ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0CmluZGV4IDBjN2Q2YjAuLjRiZmNlNDQgMTAwNjQ0Ci0tLSBhLy5jbGFuZy1mb3JtYXQKKysrIGIvLmNsYW5nLWZvcm1hdApAQCAtMjIsNyArMjIsOSBAQAogSW5jbHVkZUNhdGVnb3JpZXM6CiAgIC0gUmVnZXg6ICAgICAgICAgICAnXls8Il1jbUNvbmZpZ3VyZVwuaCcKICAgICBQcmlvcml0eTogICAgICAgIC0xCi0gIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpY20vJworICAtIFJlZ2V4OiAgICAgICAgICAgJ148cXVldWU+JworICAgIFByaW9yaXR5OiAgICAgICAgMQorICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtKGV4dCk/LycKICAgICBQcmlvcml0eTogICAgICAgIDIKICAgLSBSZWdleDogICAgICAgICAgICdeKDx8Iil3aW5kb3dzXC5oJwogICAgIFByaW9yaXR5OiAgICAgICAgMwpkaWZmIC0tZ2l0IGEvQXV4aWxpYXJ5L3ZpbS9zeW50YXgvY21ha2UudmltIGIvQXV4aWxpYXJ5L3ZpbS9zeW50YXgvY21ha2UudmltCmluZGV4IDVkZTExN2IuLjA2NzZmN2UgMTAwNjQ0Ci0tLSBhL0F1eGlsaWFyeS92aW0vc3ludGF4L2NtYWtlLnZpbQorKysgYi9BdXhpbGlhcnkvdmltL3N5bnRheC9jbWFrZS52aW0KQEAgLTEwMSw2ICsxMDEsNyBAQAogICAgICAgICAgICAgXCBDTEVBTl9OT19DVVNUT00KICAgICAgICAgICAgIFwgQ01BS0VfQ09ORklHVVJFX0RFUEVORFMKICAgICAgICAgICAgIFwgQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTCisgICAgICAgICAgICBcIENNQUtFX0NVREFfS05PV05fRkVBVFVSRVMKICAgICAgICAgICAgIFwgQ01BS0VfQ19LTk9XTl9GRUFUVVJFUwogICAgICAgICAgICAgXCBDTUFLRV9ST0xFCiAgICAgICAgICAgICBcIENPTU1PTl9MQU5HVUFHRV9SVU5USU1FCkBAIC0yMjAsNiArMjIxLDcgQEAKICAgICAgICAgICAgIFwgSk9CX1BPT0xTCiAgICAgICAgICAgICBcIEpPQl9QT09MX0NPTVBJTEUKICAgICAgICAgICAgIFwgSk9CX1BPT0xfTElOSworICAgICAgICAgICAgXCBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgogICAgICAgICAgICAgXCBLRUVQX0VYVEVOU0lPTgogICAgICAgICAgICAgXCBMQUJFTFMKICAgICAgICAgICAgIFwgTEFOR1VBR0UKQEAgLTcyNSw2ICs3MjcsNyBAQAogICAgICAgICAgICAgXCBDTUFLRV9DVURBX0NPTVBJTEVSX0FSCiAgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRVJfQVJDSElURUNUVVJFX0lECiAgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOCisgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUwogICAgICAgICAgICAgXCBDTUFLRV9DVURBX0NPTVBJTEVSX0lECiAgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRVJfTEFVTkNIRVIKICAgICAgICAgICAgIFwgQ01BS0VfQ1VEQV9DT01QSUxFUl9MT0FERUQKQEAgLTEwNjQsNiArMTA2Nyw3IEBACiAgICAgICAgICAgICBcIENNQUtFX0pPQl9QT09MUwogICAgICAgICAgICAgXCBDTUFLRV9KT0JfUE9PTF9DT01QSUxFCiAgICAgICAgICAgICBcIENNQUtFX0pPQl9QT09MX0xJTksKKyAgICAgICAgICAgIFwgQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIKICAgICAgICAgICAgIFwgQ01BS0VfSmF2YQogICAgICAgICAgICAgXCBDTUFLRV9KYXZhX0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkUKICAgICAgICAgICAgIFwgQ01BS0VfSmF2YV9BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgKQEAgLTI4NjIsNiArMjg2NiwxMSBAQAogICAgICAgICAgICAgXCBfTElOS0VSX1dSQVBQRVJfRkxBRwogICAgICAgICAgICAgXCBfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAKIAorc3luIGtleXdvcmQgY21ha2VLV3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMgY29udGFpbmVkCisgICAgICAgICAgICBcIElOVEVSRkFDRQorICAgICAgICAgICAgXCBQUklWQVRFCisgICAgICAgICAgICBcIFBVQkxJQworCiBzeW4ga2V5d29yZCBjbWFrZUtXdGFyZ2V0X3NvdXJjZXMgY29udGFpbmVkCiAgICAgICAgICAgICBcIEFMSUFTCiAgICAgICAgICAgICBcIElNUE9SVEVECkBAIC0zMTY2LDYgKzMxNzUsNyBAQAogICAgICAgICAgICAgXCB0YXJnZXRfbGlua19kaXJlY3RvcmllcwogICAgICAgICAgICAgXCB0YXJnZXRfbGlua19saWJyYXJpZXMKICAgICAgICAgICAgIFwgdGFyZ2V0X2xpbmtfb3B0aW9ucworICAgICAgICAgICAgXCB0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzCiAgICAgICAgICAgICBcIHRhcmdldF9zb3VyY2VzCiAgICAgICAgICAgICBcIHRyeV9jb21waWxlCiAgICAgICAgICAgICBcIHRyeV9ydW4KQEAgLTMzMjIsNiArMzMzMiw3IEBACiBoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgTW9kZU1zZwogaGkgZGVmIGxpbmsgY21ha2VLV3RhcmdldF9saW5rX2xpYnJhcmllcyBNb2RlTXNnCiBoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X2xpbmtfb3B0aW9ucyBNb2RlTXNnCitoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyBNb2RlTXNnCiBoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X3NvdXJjZXMgTW9kZU1zZwogaGkgZGVmIGxpbmsgY21ha2VLV3RyeV9jb21waWxlIE1vZGVNc2cKIGhpIGRlZiBsaW5rIGNtYWtlS1d0cnlfcnVuIE1vZGVNc2cKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggNTc2MjA5OS4uYjZlZjU0MyAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTI2NCw3ICsyNjQsNiBAQAogICAgICAgJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0aW5nL0hUTUwvVGVzdGluZ1Jlc3VsdHMvSWNvbnMvTG9nby5naWYgQ09QWU9OTFkpCiAgIGVuZGlmKCkKICAgbWFya19hc19hZHZhbmNlZChEQVJUX1JPT1QpCi0gIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9URVNUSU5HKQogZW5kbWFjcm8oKQogCiAKQEAgLTU0OCwyMSArNTQ3LDI1IEBACiAgICAgc2V0KFpMSUJfSU5DTFVERV9ESVIgJHtDTUFLRV9aTElCX0lOQ0xVREVTfSkKICAgICBzZXQoWkxJQl9MSUJSQVJZICR7Q01BS0VfWkxJQl9MSUJSQVJJRVN9KQogICAgIGFkZF9kZWZpbml0aW9ucygtRExJQkFSQ0hJVkVfU1RBVElDKQorICAgIHNldChFTkFCTEVfTUJFRFRMUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB1c2Ugb2YgbWJlZCBUTFMiKQogICAgIHNldChFTkFCTEVfTkVUVExFIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHVzZSBvZiBOZXR0bGUiKQogICAgIHNldChFTkFCTEVfT1BFTlNTTCAke0NNQUtFX1VTRV9PUEVOU1NMfSBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHVzZSBvZiBPcGVuU1NMIikKKyAgICBzZXQoRU5BQkxFX0xJQkIyIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMSUJCMiBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xaTUEgT04gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFpNQSBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xaNCBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFo0IGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfTFpPIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMWk8gbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9aTElCIE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIFpMSUIgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9CWmlwMiBPTiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBCWmlwMiBsaWJyYXJ5IGlmIGZvdW5kIikKKyAgICBzZXQoRU5BQkxFX1pTVEQgT04gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0genN0ZCBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xJQlhNTDIgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIGxpYnhtbDIgbGlicmFyeSBpZiBmb3VuZCIpCi0gICAgc2V0KEVOQUJMRV9FWFBBVCBPTiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBFWFBBVCBsaWJyYXJ5IGlmIGZvdW5kIikKKyAgICBzZXQoRU5BQkxFX0VYUEFUIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBFWFBBVCBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX1BDUkVQT1NJWCBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gUENSRVBPU0lYIGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfTGliR0NDIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMaWJHQ0MgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9YQVRUUiBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCIpCiAgICAgc2V0KEVOQUJMRV9BQ0wgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgQUNMIHN1cHBvcnQiKQogICAgIHNldChFTkFCTEVfSUNPTlYgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgaWNvbnYgc3VwcG9ydCIpCiAgICAgc2V0KEVOQUJMRV9DTkcgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiBDTkcoQ3J5cHRvIE5leHQgR2VuZXJhdGlvbikiKQorICAgIFNFVChQT1NJWF9SRUdFWF9MSUIgIiIgQ0FDSEUgSU5URVJOQUwgIkNob29zZSB3aGF0IGxpYnJhcnkgc2hvdWxkIHByb3ZpZGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQiKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzL2NtbGliYXJjaGl2ZSkKICAgICBDTUFLRV9TRVRfVEFSR0VUX0ZPTERFUihjbWxpYmFyY2hpdmUgIlV0aWxpdGllcy8zcmRQYXJ0eSIpCiAgICAgc2V0KENNQUtFX1RBUl9MSUJSQVJJRVMgY21saWJhcmNoaXZlICR7QlpJUDJfTElCUkFSSUVTfSkKQEAgLTY3MSwxMCArNjc0LDYgQEAKICAgc2V0KExJQlJBUllfT1VUUFVUX1BBVEggIiIgQ0FDSEUgSU5URVJOQUwKICAgICAiV2hlcmUgdG8gcHV0IHRoZSBsaWJyYXJpZXMgZm9yIENNYWtlIikKIAotICAjIFRoZSBDTWFrZSBleGVjdXRhYmxlcyB1c3VhbGx5IGRvIG5vdCBuZWVkIGFueSBycGF0aCB0byBydW4gaW4gdGhlIGJ1aWxkIG9yCi0gICMgaW5zdGFsbCB0cmVlLgotICBzZXQoQ01BS0VfU0tJUF9SUEFUSCBPTiBDQUNIRSBJTlRFUk5BTCAiQ01ha2UgZG9lcyBub3QgbmVlZCBSUEFUSHMuIikKLQogICAjIExvYWQgaW5zdGFsbCBkZXN0aW5hdGlvbnMuCiAgIGluY2x1ZGUoU291cmNlL0NNYWtlSW5zdGFsbERlc3RpbmF0aW9ucy5jbWFrZSkKIApAQCAtNzE0LDE5ICs3MTMsNiBAQAogICAjIGJ1aWxkIHRoZSB1dGlsaXRpZXMgKGEgbWFjcm8gZGVmaW5lZCBpbiB0aGlzIGZpbGUpCiAgIENNQUtFX0JVSUxEX1VUSUxJVElFUygpCiAKLSAgIyBPbiBOZXRCU0QgbmN1cnNlcyBpcyByZXF1aXJlZCwgc2luY2UgY3Vyc2VzIGRvZXNuJ3QgaGF2ZSB0aGUgd3N5bmN1cCgpCi0gICMgZnVuY3Rpb24uIG5jdXJzZXMgaXMgaW5zdGFsbGVkIHZpYSBwa2dzcmMsIHNvIHRoZSBsaWJyYXJ5IGlzIGluIC91c3IvcGtnL2xpYiwKLSAgIyB3aGljaCBpc24ndCBpbiB0aGUgZGVmYXVsdCBsaW5rZXIgc2VhcmNoIHBhdGguIFNvIHdpdGhvdXQgUlBBVEggY2NtYWtlCi0gICMgZG9lc24ndCBydW4gYW5kIHRoZSBidWlsZCBkb2Vzbid0IHN1Y2NlZWQgc2luY2UgY2NtYWtlIGlzIGV4ZWN1dGVkIGZvcgotICAjIGdlbmVyYXRpbmcgdGhlIGRvY3VtZW50YXRpb24uCi0gIGlmKEJVSUxEX0N1cnNlc0RpYWxvZykKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9DVVJTRVNfRElSICIke0NVUlNFU19MSUJSQVJZfSIgUEFUSCkKLSAgICBzZXQoQ1VSU0VTX05FRURfUlBBVEggRkFMU0UpCi0gICAgaWYoTk9UICIke19DVVJTRVNfRElSfSIgU1RSRVFVQUwgIi9saWIiIEFORCBOT1QgIiR7X0NVUlNFU19ESVJ9IiBTVFJFUVVBTCAiL3Vzci9saWIiIEFORCBOT1QgIiR7X0NVUlNFU19ESVJ9IiBTVFJFUVVBTCAiL2xpYjY0IiBBTkQgTk9UICIke19DVVJTRVNfRElSfSIgU1RSRVFVQUwgIi91c3IvbGliNjQiKQotICAgICAgc2V0KENVUlNFU19ORUVEX1JQQVRIIFRSVUUpCi0gICAgZW5kaWYoKQotICBlbmRpZigpCi0KICAgaWYoQlVJTERfUXREaWFsb2cpCiAgICAgaWYoQVBQTEUpCiAgICAgICBzZXQoQ01BS0VfQlVORExFX1ZFUlNJT04KQEAgLTczOSwyOCArNzI1LDE1IEBACiAgICAgICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVgKICAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9Q01ha2UuYXBwL0NvbnRlbnRzIikKICAgICBlbmRpZigpCi0KLSAgICBzZXQoUVRfTkVFRF9SUEFUSCBGQUxTRSkKLSAgICBpZihOT1QgIiR7UVRfTElCUkFSWV9ESVJ9IiBTVFJFUVVBTCAiL2xpYiIgQU5EIE5PVCAiJHtRVF9MSUJSQVJZX0RJUn0iIFNUUkVRVUFMICIvdXNyL2xpYiIgQU5EIE5PVCAiJHtRVF9MSUJSQVJZX0RJUn0iIFNUUkVRVUFMICIvbGliNjQiIEFORCBOT1QgIiR7UVRfTElCUkFSWV9ESVJ9IiBTVFJFUVVBTCAiL3Vzci9saWI2NCIpCi0gICAgICBzZXQoUVRfTkVFRF9SUEFUSCBUUlVFKQotICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0KLSAgIyBUaGUgc2FtZSBtaWdodCBiZSB0cnVlIG9uIG90aGVyIHN5c3RlbXMgZm9yIG90aGVyIGxpYnJhcmllcy4KLSAgIyBUaGVuIG9ubHkgZW5hYmxlIFJQQVRIIGlmIHdlIGhhdmUgYXJlIGJ1aWxkaW5nIGF0IGxlYXN0IHdpdGggY21ha2UgMi40LAotICAjIHNpbmNlIHRoaXMgb25lIGhhcyBtdWNoIGJldHRlciBSUEFUSCBmZWF0dXJlcyB0aGFuIGNtYWtlIDIuMi4KLSAgIyBUaGUgZXhlY3V0YWJsZXMgYXJlIHRoZW4gYnVpbHQgd2l0aCB0aGUgUlBBVEggZm9yIHRoZSBsaWJyYXJpZXMgb3V0c2lkZQotICAjIHRoZSBidWlsZCB0cmVlLCB3aGljaCBpcyBib3RoIHRoZSBidWlsZCBhbmQgdGhlIGluc3RhbGwgUlBBVEguCi0gIGlmIChVTklYKQotICAgIGlmKCAgIENNQUtFX1VTRV9TWVNURU1fQ1VSTCAgIE9SICBDTUFLRV9VU0VfU1lTVEVNX1pMSUIKLSAgICAgICAgICBPUiAgQ01BS0VfVVNFX1NZU1RFTV9FWFBBVCAgT1IgIENVUlNFU19ORUVEX1JQQVRIICBPUiAgUVRfTkVFRF9SUEFUSCkKLSAgICAgIHNldChDTUFLRV9TS0lQX1JQQVRIIE9GRiBDQUNIRSBJTlRFUk5BTCAiQ01ha2UgYnVpbHQgd2l0aCBSUEFUSC4iKQotICAgICAgc2V0KENNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSCBUUlVFKQotICAgICAgc2V0KENNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9SUEFUSCBUUlVFKQotICAgIGVuZGlmKCkKLSAgZW5kaWYgKCkKLQorICBpZihVTklYKQorICAgICMgSW5zdGFsbCBleGVjdXRhYmxlcyB3aXRoIHRoZSBSUEFUSCBzZXQgZm9yIGxpYnJhcmllcyBvdXRzaWRlIHRoZSBidWlsZCB0cmVlLgorICAgICMgVGhpcyBpcyBhbHNvIHN1aXRhYmxlIGZvciBiaW5hcmllcyBpbiB0aGUgYnVpbGQgdHJlZS4gIEF2b2lkIHJlLWxpbmsgb24gaW5zdGFsbC4KKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIIE9OIENBQ0hFIEJPT0wgIkluc3RhbGwgd2l0aCBSUEFUSCBzZXQgdG8gZmluZCBjdXN0b20tYnVpbHQgbGlicmFyaWVzLiIpCisgICAgc2V0KENNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9SUEFUSCBPTiBDQUNIRSBCT09MICJCdWlsZCB3aXRoIFJQQVRIIHNldCB0byBtYXRjaCBpbnN0YWxsLXRyZWUgUlBBVEguIikKKyAgICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSCBDTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfUlBBVEgpCisgIGVuZGlmKCkKIAogICAjIGFkZCB0aGUgdW5pbnN0YWxsIHN1cHBvcnQKICAgY29uZmlndXJlX2ZpbGUoCmRpZmYgLS1naXQgYS9DVGVzdEN1c3RvbS5jbWFrZS5pbiBiL0NUZXN0Q3VzdG9tLmNtYWtlLmluCmluZGV4IGQzYWI5ZDMuLmZiOGUwOTkgMTAwNjQ0Ci0tLSBhL0NUZXN0Q3VzdG9tLmNtYWtlLmluCisrKyBiL0NUZXN0Q3VzdG9tLmNtYWtlLmluCkBAIC03Miw2ICs3Miw3IEBACiAgICJjbShTdHJpbmdDb21tYW5kfENUZXN0VGVzdEhhbmRsZXIpXFwuY3h4Lip3YXJuaW5nLipyYW5kLippc24uKnQgcmFuZG9tIiAjIHdlIGRvIG5vdCBkbyBjcnlwdG8KICAgImNtKFN0cmluZ0NvbW1hbmR8Q1Rlc3RUZXN0SGFuZGxlcilcXC5jeHguKndhcm5pbmcuKnNyYW5kLipzZWVkIGNob2ljZXMgYXJlLipwb29yIiAjIHdlIGRvIG5vdCBkbyBjcnlwdG8KICAgIklQQSB3YXJuaW5nOiBmdW5jdGlvbi4qbXVsdGlwbHkgZGVmaW5lZCBpbiIKKyAgIkxJQ0VOU0UgV0FSTklORyIgIyBQR0kgbGljZW5zZSBleHBpcnkuICBOb3QgdXNlZnVsIGluIG5pZ2h0bHkgdGVzdGluZy4KIAogICAjIElnbm9yZSBjb21waWxlciBzdW1tYXJ5IHdhcm5pbmcsIGFzc3VtaW5nIHByaW9yIHRleHQgaGFzIG1hdGNoZWQgc29tZQogICAjIG90aGVyIHdhcm5pbmcgZXhwcmVzc2lvbjoKZGlmZiAtLWdpdCBhL0NvcHlyaWdodC50eHQgYi9Db3B5cmlnaHQudHh0CmluZGV4IGYyMzYyMTQuLmI4NjdkMDEgMTAwNjQ0Ci0tLSBhL0NvcHlyaWdodC50eHQKKysrIGIvQ29weXJpZ2h0LnR4dApAQCAtMSw1ICsxLDUgQEAKIENNYWtlIC0gQ3Jvc3MgUGxhdGZvcm0gTWFrZWZpbGUgR2VuZXJhdG9yCi1Db3B5cmlnaHQgMjAwMC0yMDE5IEtpdHdhcmUsIEluYy4gYW5kIENvbnRyaWJ1dG9ycworQ29weXJpZ2h0IDIwMDAtMjAyMCBLaXR3YXJlLCBJbmMuIGFuZCBDb250cmlidXRvcnMKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTksNiArOTksNyBAQAogKiBTZWJhc3RpYW4gSG9sdGVybWFubiA8c2ViaG9sdEB4d213Lm9yZz4KICogU3RlcGhlbiBLZWxseSA8c3RldmVpcmVAZ21haWwuY29tPgogKiBTeWx2YWluIEpvdWJlcnQgPGpvdWJlcnQuc3lAZ21haWwuY29tPgorKiBUaGUgUXQgQ29tcGFueSBMdGQuCiAqIFRob21hcyBTb25kZXJnYWFyZCA8dHNAbWVkaWNhbC1pbnNpZ2h0LmNvbT4KICogVG9iaWFzIEh1bmdlciA8dG9iaWFzLmh1bmdlckBxdC5pbz4KICogVG9kZCBHYW1ibGluIDx0Z2FtYmxpbkBsbG5sLmdvdj4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9GSU5EX1hYWC50eHQgYi9IZWxwL2NvbW1hbmQvRklORF9YWFgudHh0CmluZGV4IDQyYmY1MmIuLmNlYmUwNTEgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9GSU5EX1hYWC50eHQKKysrIGIvSGVscC9jb21tYW5kL0ZJTkRfWFhYLnR4dApAQCAtMTUsNiArMTUsNyBAQAogICAgICAgICAgICAgIFtQQVRIUyBwYXRoMSBbcGF0aDIgLi4uIEVOViB2YXJdXQogICAgICAgICAgICAgIFtQQVRIX1NVRkZJWEVTIHN1ZmZpeDEgW3N1ZmZpeDIgLi4uXV0KICAgICAgICAgICAgICBbRE9DICJjYWNoZSBkb2N1bWVudGF0aW9uIHN0cmluZyJdCisgICAgICAgICAgICAgW1JFUVVJUkVEXQogICAgICAgICAgICAgIFtOT19ERUZBVUxUX1BBVEhdCiAgICAgICAgICAgICAgW05PX1BBQ0tBR0VfUk9PVF9QQVRIXQogICAgICAgICAgICAgIFtOT19DTUFLRV9QQVRIXQpAQCAtMzEsOCArMzIsOSBAQAogb2YgdGhpcyBjb21tYW5kLgogSWYgdGhlIHxTRUFSQ0hfWFhYfCBpcyBmb3VuZCB0aGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUKIGFuZCB0aGUgc2VhcmNoIHdpbGwgbm90IGJlIHJlcGVhdGVkIHVubGVzcyB0aGUgdmFyaWFibGUgaXMgY2xlYXJlZC4KLUlmIG5vdGhpbmcgaXMgZm91bmQsIHRoZSByZXN1bHQgd2lsbCBiZQotYGA8VkFSPi1OT1RGT1VORGBgLCBhbmQgdGhlIHNlYXJjaCB3aWxsIGJlIGF0dGVtcHRlZCBhZ2FpbiB0aGUKK0lmIG5vdGhpbmcgaXMgZm91bmQsIHRoZSByZXN1bHQgd2lsbCBiZSBgYDxWQVI+LU5PVEZPVU5EYGAuCitUaGUgYGBSRVFVSVJFRGBgIG9wdGlvbiBzdG9wcyBwcm9jZXNzaW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3RoaW5nCitpcyBmb3VuZCwgb3RoZXJ3aXNlIHRoZSBzZWFyY2ggd2lsbCBiZSBhdHRlbXB0ZWQgYWdhaW4gdGhlCiBuZXh0IHRpbWUgfEZJTkRfWFhYfCBpcyBpbnZva2VkIHdpdGggdGhlIHNhbWUgdmFyaWFibGUuCiAKIE9wdGlvbnMgaW5jbHVkZToKQEAgLTU3LDYgKzU5LDkgQEAKIGBgRE9DYGAKICAgU3BlY2lmeSB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgZm9yIHRoZSBgYDxWQVI+YGAgY2FjaGUgZW50cnkuCiAKK2BgUkVRVUlSRURgYAorICBTdG9wIHByb2Nlc3Npbmcgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdGhpbmcgaXMgZm91bmQuCisKIElmIGBgTk9fREVGQVVMVF9QQVRIYGAgaXMgc3BlY2lmaWVkLCB0aGVuIG5vIGFkZGl0aW9uYWwgcGF0aHMgYXJlCiBhZGRlZCB0byB0aGUgc2VhcmNoLgogSWYgYGBOT19ERUZBVUxUX1BBVEhgYCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc2VhcmNoIHByb2Nlc3MgaXMgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9hZGRfY3VzdG9tX2NvbW1hbmQucnN0IGIvSGVscC9jb21tYW5kL2FkZF9jdXN0b21fY29tbWFuZC5yc3QKaW5kZXggYWJhMzc0Mi4uOTI3OTc0OCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2FkZF9jdXN0b21fY29tbWFuZC5yc3QKKysrIGIvSGVscC9jb21tYW5kL2FkZF9jdXN0b21fY29tbWFuZC5yc3QKQEAgLTY4LDYgKzY4LDkgQEAKICAgb3JkZXItb25seSBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIHRoZSBieXByb2R1Y3RzIHdpbGwgYmUKICAgYXZhaWxhYmxlIGJlZm9yZSB0aGVpciBkZXBlbmRlbnRzIGJ1aWxkLgogCisgIFRoZSA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYCB3aWxsIHJlbW92ZSBgYEJZUFJPRFVDVFNgYCBhbmQgb3RoZXIKKyAgOnByb3Bfc2Y6YEdFTkVSQVRFRGAgZmlsZXMgZHVyaW5nIGBgbWFrZSBjbGVhbmBgLgorCiBgYENPTU1BTkRgYAogICBTcGVjaWZ5IHRoZSBjb21tYW5kLWxpbmUocykgdG8gZXhlY3V0ZSBhdCBidWlsZCB0aW1lLgogICBJZiBtb3JlIHRoYW4gb25lIGBgQ09NTUFORGBgIGlzIHNwZWNpZmllZCB0aGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gb3JkZXIsCkBAIC0xMTIsMjQgKzExNSw0MiBAQAogICBidWlsZCB0aW1lLgogCiBgYERFUEVORFNgYAotICBTcGVjaWZ5IGZpbGVzIG9uIHdoaWNoIHRoZSBjb21tYW5kIGRlcGVuZHMuICBJZiBhbnkgZGVwZW5kZW5jeSBpcwotICBhbiBgYE9VVFBVVGBgIG9mIGFub3RoZXIgY3VzdG9tIGNvbW1hbmQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0gIChgYENNYWtlTGlzdHMudHh0YGAgZmlsZSkgQ01ha2UgYXV0b21hdGljYWxseSBicmluZ3MgdGhlIG90aGVyCisgIFNwZWNpZnkgZmlsZXMgb24gd2hpY2ggdGhlIGNvbW1hbmQgZGVwZW5kcy4gIEVhY2ggYXJndW1lbnQgaXMgY29udmVydGVkCisgIHRvIGEgZGVwZW5kZW5jeSBhcyBmb2xsb3dzOgorCisgIDEuIElmIHRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldCAoY3JlYXRlZCBieSB0aGUKKyAgICAgOmNvbW1hbmQ6YGFkZF9jdXN0b21fdGFyZ2V0YCwgOmNvbW1hbmQ6YGFkZF9leGVjdXRhYmxlYCwgb3IKKyAgICAgOmNvbW1hbmQ6YGFkZF9saWJyYXJ5YCBjb21tYW5kKSBhIHRhcmdldC1sZXZlbCBkZXBlbmRlbmN5IGlzCisgICAgIGNyZWF0ZWQgdG8gbWFrZSBzdXJlIHRoZSB0YXJnZXQgaXMgYnVpbHQgYmVmb3JlIGFueSB0YXJnZXQKKyAgICAgdXNpbmcgdGhpcyBjdXN0b20gY29tbWFuZC4gIEFkZGl0aW9uYWxseSwgaWYgdGhlIHRhcmdldCBpcyBhbgorICAgICBleGVjdXRhYmxlIG9yIGxpYnJhcnksIGEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQgdG8KKyAgICAgY2F1c2UgdGhlIGN1c3RvbSBjb21tYW5kIHRvIHJlLXJ1biB3aGVuZXZlciB0aGUgdGFyZ2V0IGlzCisgICAgIHJlY29tcGlsZWQuCisKKyAgMi4gSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFic29sdXRlIHBhdGgsIGEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5CisgICAgIGlzIGNyZWF0ZWQgb24gdGhhdCBwYXRoLgorCisgIDMuIElmIHRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHNvdXJjZSBmaWxlIHRoYXQgaGFzIGJlZW4KKyAgICAgYWRkZWQgdG8gYSB0YXJnZXQgb3Igb24gd2hpY2ggYSBzb3VyY2UgZmlsZSBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQsCisgICAgIGEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQgb24gdGhhdCBzb3VyY2UgZmlsZS4KKworICA0LiBJZiB0aGUgYXJndW1lbnQgaXMgYSByZWxhdGl2ZSBwYXRoIGFuZCBpdCBleGlzdHMgaW4gdGhlIGN1cnJlbnQKKyAgICAgc291cmNlIGRpcmVjdG9yeSwgYSBmaWxlLWxldmVsIGRlcGVuZGVuY3kgaXMgY3JlYXRlZCBvbiB0aGF0CisgICAgIGZpbGUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGRpcmVjdG9yeS4KKworICA1LiBPdGhlcndpc2UsIGEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQgb24gdGhhdCBwYXRoIHJlbGF0aXZlCisgICAgIHRvIHRoZSBjdXJyZW50IGJpbmFyeSBkaXJlY3RvcnkuCisKKyAgSWYgYW55IGRlcGVuZGVuY3kgaXMgYW4gYGBPVVRQVVRgYCBvZiBhbm90aGVyIGN1c3RvbSBjb21tYW5kIGluIHRoZSBzYW1lCisgIGRpcmVjdG9yeSAoYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUpLCBDTWFrZSBhdXRvbWF0aWNhbGx5IGJyaW5ncyB0aGUgb3RoZXIKICAgY3VzdG9tIGNvbW1hbmQgaW50byB0aGUgdGFyZ2V0IGluIHdoaWNoIHRoaXMgY29tbWFuZCBpcyBidWlsdC4KICAgQSB0YXJnZXQtbGV2ZWwgZGVwZW5kZW5jeSBpcyBhZGRlZCBpZiBhbnkgZGVwZW5kZW5jeSBpcyBsaXN0ZWQgYXMKICAgYGBCWVBST0RVQ1RTYGAgb2YgYSB0YXJnZXQgb3IgYW55IG9mIGl0cyBidWlsZCBldmVudHMgaW4gdGhlIHNhbWUKICAgZGlyZWN0b3J5IHRvIGVuc3VyZSB0aGUgYnlwcm9kdWN0cyB3aWxsIGJlIGF2YWlsYWJsZS4KLSAgSWYgYGBERVBFTkRTYGAgaXMgbm90IHNwZWNpZmllZCB0aGUgY29tbWFuZCB3aWxsIHJ1biB3aGVuZXZlcgorCisgIElmIGBgREVQRU5EU2BgIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIHdpbGwgcnVuIHdoZW5ldmVyCiAgIHRoZSBgYE9VVFBVVGBgIGlzIG1pc3Npbmc7IGlmIHRoZSBjb21tYW5kIGRvZXMgbm90IGFjdHVhbGx5Ci0gIGNyZWF0ZSB0aGUgYGBPVVRQVVRgYCB0aGVuIHRoZSBydWxlIHdpbGwgYWx3YXlzIHJ1bi4KLSAgSWYgYGBERVBFTkRTYGAgc3BlY2lmaWVzIGFueSB0YXJnZXQgKGNyZWF0ZWQgYnkgdGhlCi0gIDpjb21tYW5kOmBhZGRfY3VzdG9tX3RhcmdldGAsIDpjb21tYW5kOmBhZGRfZXhlY3V0YWJsZWAsIG9yCi0gIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgY29tbWFuZCkgYSB0YXJnZXQtbGV2ZWwgZGVwZW5kZW5jeSBpcwotICBjcmVhdGVkIHRvIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IGlzIGJ1aWx0IGJlZm9yZSBhbnkgdGFyZ2V0Ci0gIHVzaW5nIHRoaXMgY3VzdG9tIGNvbW1hbmQuICBBZGRpdGlvbmFsbHksIGlmIHRoZSB0YXJnZXQgaXMgYW4KLSAgZXhlY3V0YWJsZSBvciBsaWJyYXJ5IGEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQgdG8KLSAgY2F1c2UgdGhlIGN1c3RvbSBjb21tYW5kIHRvIHJlLXJ1biB3aGVuZXZlciB0aGUgdGFyZ2V0IGlzCi0gIHJlY29tcGlsZWQuCisgIGNyZWF0ZSB0aGUgYGBPVVRQVVRgYCwgdGhlIHJ1bGUgd2lsbCBhbHdheXMgcnVuLgogCiAgIEFyZ3VtZW50cyB0byBgYERFUEVORFNgYCBtYXkgdXNlCiAgIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvYWRkX2N1c3RvbV90YXJnZXQucnN0IGIvSGVscC9jb21tYW5kL2FkZF9jdXN0b21fdGFyZ2V0LnJzdAppbmRleCAyZDVmNWYwLi41NmFiNDE0IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvYWRkX2N1c3RvbV90YXJnZXQucnN0CisrKyBiL0hlbHAvY29tbWFuZC9hZGRfY3VzdG9tX3RhcmdldC5yc3QKQEAgLTQ5LDYgKzQ5LDkgQEAKICAgb3JkZXItb25seSBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIHRoZSBieXByb2R1Y3RzIHdpbGwgYmUKICAgYXZhaWxhYmxlIGJlZm9yZSB0aGVpciBkZXBlbmRlbnRzIGJ1aWxkLgogCisgIFRoZSA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYCB3aWxsIHJlbW92ZSBgYEJZUFJPRFVDVFNgYCBhbmQgb3RoZXIKKyAgOnByb3Bfc2Y6YEdFTkVSQVRFRGAgZmlsZXMgZHVyaW5nIGBgbWFrZSBjbGVhbmBgLgorCiBgYENPTU1BTkRgYAogICBTcGVjaWZ5IHRoZSBjb21tYW5kLWxpbmUocykgdG8gZXhlY3V0ZSBhdCBidWlsZCB0aW1lLgogICBJZiBtb3JlIHRoYW4gb25lIGBgQ09NTUFORGBgIGlzIHNwZWNpZmllZCB0aGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gb3JkZXIsCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvY21ha2VfY29tbWFuZC5yc3QgYi9IZWxwL2NvbW1hbmQvY21ha2VfY29tbWFuZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiNzgzMgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvY29tbWFuZC9jbWFrZV9jb21tYW5kLnJzdApAQCAtMCwwICsxLDkwIEBACitjbWFrZV9jb21tYW5kCistLS0tLS0tLS0tLS0tCisKK0NhbGwgbWV0YS1vcGVyYXRpb25zIG9uIENNYWtlIGNvbW1hbmRzLgorCitTeW5vcHNpcworXl5eXl5eXl4KKworLi4gcGFyc2VkLWxpdGVyYWw6OgorCisgIGNtYWtlX2NvbW1hbmQoYElOVk9LRWBfIDxjb21tYW5kPiBbPGFyZ3M+Li4uXSkKKyAgY21ha2VfY29tbWFuZChgRVZBTGBfIENPREUgPGNvZGU+Li4uKQorCitJbnRyb2R1Y3Rpb24KK15eXl5eXl5eXl5eXgorCitUaGlzIGNvbW1hbmQgd2lsbCBjYWxsIG1ldGEtb3BlcmF0aW9ucyBvbiBidWlsdC1pbiBDTWFrZSBjb21tYW5kcyBvcgordGhvc2UgY3JlYXRlZCB2aWEgdGhlIDpjb21tYW5kOmBtYWNyb2Agb3IgOmNvbW1hbmQ6YGZ1bmN0aW9uYCBjb21tYW5kcy4KKworYGBjbWFrZV9jb21tYW5kYGAgZG9lcyBub3QgaW50cm9kdWNlIGEgbmV3IHZhcmlhYmxlIG9yIHBvbGljeSBzY29wZS4KKworSW52b2tpbmcgQ29tbWFuZHMKK15eXl5eXl5eXl5eXl5eXl5eCisKKy4uIF9JTlZPS0U6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGNtYWtlX2NvbW1hbmQoSU5WT0tFIDxjb21tYW5kPiBbPGFyZ3M+Li4uXSkKKworSW52b2tlcyB0aGUgbmFtZWQgYGA8Y29tbWFuZD5gYCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgKGlmIGFueSkuCitGb3IgZXhhbXBsZSwgdGhlIGNvZGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChtZXNzYWdlX2NvbW1hbmQgIm1lc3NhZ2UiKQorICBjbWFrZV9jb21tYW5kKElOVk9LRSAke21lc3NhZ2VfY29tbWFuZH0gU1RBVFVTICJIZWxsbyBXb3JsZCEiKQorCitpcyBlcXVpdmFsZW50IHRvCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIG1lc3NhZ2UoU1RBVFVTICJIZWxsbyBXb3JsZCEiKQorCitFdmFsdWF0aW5nIENvZGUKK15eXl5eXl5eXl5eXl5eXgorCisuLiBfRVZBTDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgY21ha2VfY29tbWFuZChFVkFMIENPREUgPGNvZGU+Li4uKQorCitFdmFsdWF0ZXMgdGhlIGBgPGNvZGU+Li4uYGAgYXMgQ01ha2UgY29kZS4KKworRm9yIGV4YW1wbGUsIHRoZSBjb2RlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXQoQSBUUlVFKQorICBzZXQoQiBUUlVFKQorICBzZXQoQyBUUlVFKQorICBzZXQoY29uZGl0aW9uICIoQSBBTkQgQikgT1IgQyIpCisKKyAgY21ha2VfY29tbWFuZChFVkFMIENPREUgIgorICAgIGlmICgke2NvbmRpdGlvbn0pCisgICAgICBtZXNzYWdlKFNUQVRVUyBUUlVFKQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShTVEFUVVMgRkFMU0UpCisgICAgZW5kaWYoKSIKKyAgKQorCitpcyBlcXVpdmFsZW50IHRvCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChBIFRSVUUpCisgIHNldChCIFRSVUUpCisgIHNldChDIFRSVUUpCisgIHNldChjb25kaXRpb24gIihBIEFORCBCKSBPUiBDIikKKworICBmaWxlKFdSSVRFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9ldmFsLmNtYWtlICIKKyAgICBpZiAoJHtjb25kaXRpb259KQorICAgICAgbWVzc2FnZShTVEFUVVMgVFJVRSkKKyAgICBlbHNlKCkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTIEZBTFNFKQorICAgIGVuZGlmKCkiCisgICkKKworICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9ldmFsLmNtYWtlKQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2N0ZXN0X3Rlc3QucnN0IGIvSGVscC9jb21tYW5kL2N0ZXN0X3Rlc3QucnN0CmluZGV4IDdhMzM5M2IuLjVjNjdiMmMgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9jdGVzdF90ZXN0LnJzdAorKysgYi9IZWxwL2NvbW1hbmQvY3Rlc3RfdGVzdC5yc3QKQEAgLTIzLDYgKzIzLDcgQEAKICAgICAgICAgICAgICBbU1RPUF9USU1FIDx0aW1lLW9mLWRheT5dCiAgICAgICAgICAgICAgW1JFVFVSTl9WQUxVRSA8cmVzdWx0LXZhcj5dCiAgICAgICAgICAgICAgW0NBUFRVUkVfQ01BS0VfRVJST1IgPHJlc3VsdC12YXI+XQorICAgICAgICAgICAgIFtSRVBFQVQgPG1vZGU+OjxuPl0KICAgICAgICAgICAgICBbUVVJRVRdCiAgICAgICAgICAgICAgKQogCkBAIC05NSw2ICs5NiwyNSBAQAogICBhbmQgdGhlbiB0aGUgYGAtLXRlc3QtbG9hZGBgIGNvbW1hbmQtbGluZSBhcmd1bWVudCB0byA6bWFudWFsOmBjdGVzdCgxKWAuCiAgIFNlZSBhbHNvIHRoZSBgYFRlc3RMb2FkYGAgc2V0dGluZyBpbiB0aGUgOnJlZjpgQ1Rlc3QgVGVzdCBTdGVwYC4KIAorYGBSRVBFQVQgPG1vZGU+OjxuPmBgCisgIFJ1biB0ZXN0cyByZXBlYXRlZGx5IGJhc2VkIG9uIHRoZSBnaXZlbiBgYDxtb2RlPmBgIHVwIHRvIGBgPG4+YGAgdGltZXMuCisgIFRoZSBtb2RlcyBhcmU6CisKKyAgYGBVTlRJTF9GQUlMYGAKKyAgICBSZXF1aXJlIGVhY2ggdGVzdCB0byBydW4gYGA8bj5gYCB0aW1lcyB3aXRob3V0IGZhaWxpbmcgaW4gb3JkZXIgdG8gcGFzcy4KKyAgICBUaGlzIGlzIHVzZWZ1bCBpbiBmaW5kaW5nIHNwb3JhZGljIGZhaWx1cmVzIGluIHRlc3QgY2FzZXMuCisKKyAgYGBVTlRJTF9QQVNTYGAKKyAgICBBbGxvdyBlYWNoIHRlc3QgdG8gcnVuIHVwIHRvIGBgPG4+YGAgdGltZXMgaW4gb3JkZXIgdG8gcGFzcy4KKyAgICBSZXBlYXRzIHRlc3RzIGlmIHRoZXkgZmFpbCBmb3IgYW55IHJlYXNvbi4KKyAgICBUaGlzIGlzIHVzZWZ1bCBpbiB0b2xlcmF0aW5nIHNwb3JhZGljIGZhaWx1cmVzIGluIHRlc3QgY2FzZXMuCisKKyAgYGBBRlRFUl9USU1FT1VUYGAKKyAgICBBbGxvdyBlYWNoIHRlc3QgdG8gcnVuIHVwIHRvIGBgPG4+YGAgdGltZXMgaW4gb3JkZXIgdG8gcGFzcy4KKyAgICBSZXBlYXRzIHRlc3RzIG9ubHkgaWYgdGhleSB0aW1lb3V0LgorICAgIFRoaXMgaXMgdXNlZnVsIGluIHRvbGVyYXRpbmcgc3BvcmFkaWMgdGltZW91dHMgaW4gdGVzdCBjYXNlcworICAgIG9uIGJ1c3kgbWFjaGluZXMuCisKIGBgU0NIRURVTEVfUkFORE9NIDxPTnxPRkY+YGAKICAgTGF1bmNoIHRlc3RzIGluIGEgcmFuZG9tIG9yZGVyLiAgVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBkZXRlY3RpbmcKICAgaW1wbGljaXQgdGVzdCBkZXBlbmRlbmNpZXMuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZXhlY3V0ZV9wcm9jZXNzLnJzdCBiL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0CmluZGV4IDE0Zjg3OWQuLmIzMjAyNWYgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0CisrKyBiL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0CkBAIC0yMSw3ICsyMSw5IEBACiAgICAgICAgICAgICAgICAgICBbQ09NTUFORF9FQ0hPIDx3aGVyZT5dCiAgICAgICAgICAgICAgICAgICBbT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0VdCiAgICAgICAgICAgICAgICAgICBbRVJST1JfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRV0KLSAgICAgICAgICAgICAgICAgIFtFTkNPRElORyA8bmFtZT5dKQorICAgICAgICAgICAgICAgICAgW0VOQ09ESU5HIDxuYW1lPl0KKyAgICAgICAgICAgICAgICAgIFtFQ0hPX09VVFBVVF9WQVJJQUJMRV0KKyAgICAgICAgICAgICAgICAgIFtFQ0hPX0VSUk9SX1ZBUklBQkxFXSkKIAogUnVucyB0aGUgZ2l2ZW4gc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgY29tbWFuZHMuCiAKQEAgLTEwNSw2ICsxMDcsMTUgQEAKICAgIGZvciB0aGlzIGVuY29kaW5nLiBJbiBDTWFrZSAzLjExLjAsIGBgVVRGLThgYCB3YXMgYWRkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGgKICAgIHRoZSBgVVRGLTggUkZDIDxodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzYyOT5gXyBuYW1pbmcgY29udmVudGlvbi4KIAorYGBFQ0hPX09VVFBVVF9WQVJJQUJMRWBgLCBgYEVDSE9fRVJST1JfVkFSSUFCTEVgYAorICBUaGUgc3RhbmRhcmQgb3V0cHV0IG9yIHN0YW5kYXJkIGVycm9yIHdpbGwgbm90IGJlIGV4Y2x1c2l2ZWx5IHJlZGlyZWN0ZWQgdG8KKyAgdGhlIGNvbmZpZ3VyZWQgdmFyaWFibGVzLgorCisgIFRoZSBvdXRwdXQgd2lsbCBiZSBkdXBsaWNhdGVkLCBpdCB3aWxsIGJlIHNlbnQgaW50byB0aGUgY29uZmlndXJlZCB2YXJpYWJsZXMKKyAgYW5kIGFsc28gb24gc3RhbmRhcmQgb3V0cHV0IG9yIHN0YW5kYXJkIGVycm9yLgorCisgIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBgYHRlZWBgIFVuaXggY29tbWFuZC4KKwogSWYgbW9yZSB0aGFuIG9uZSBgYE9VVFBVVF8qYGAgb3IgYGBFUlJPUl8qYGAgb3B0aW9uIGlzIGdpdmVuIGZvciB0aGUKIHNhbWUgcGlwZSB0aGUgcHJlY2VkZW5jZSBpcyBub3Qgc3BlY2lmaWVkLgogSWYgbm8gYGBPVVRQVVRfKmBgIG9yIGBgRVJST1JfKmBgIG9wdGlvbnMgYXJlIGdpdmVuIHRoZSBvdXRwdXQgd2lsbApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2ZpbGUucnN0IGIvSGVscC9jb21tYW5kL2ZpbGUucnN0CmluZGV4IGIxODYxNzcuLjkyY2IyZWQgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9maWxlLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvZmlsZS5yc3QKQEAgLTE5LDYgKzE5LDcgQEAKICAgICBmaWxlKHtgV1JJVEVgXyB8IGBBUFBFTkRgX30gPGZpbGVuYW1lPiA8Y29udGVudD4uLi4pCiAgICAgZmlsZSh7YFRPVUNIYF8gfCBgVE9VQ0hfTk9DUkVBVEVgX30gWzxmaWxlPi4uLl0pCiAgICAgZmlsZShgR0VORVJBVEVgXyBPVVRQVVQgPG91dHB1dC1maWxlPiBbLi4uXSkKKyAgICBmaWxlKGBDT05GSUdVUkVgXyBPVVRQVVQgPG91dHB1dC1maWxlPiBDT05URU5UIDxjb250ZW50PiBbLi4uXSkKIAogICBgRmlsZXN5c3RlbWBfCiAgICAgZmlsZSh7YEdMT0JgXyB8IGBHTE9CX1JFQ1VSU0VgX30gPG91dC12YXI+IFsuLi5dIFs8Z2xvYmJpbmctZXhwcj4uLi5dKQpAQCAtNDEsNiArNDIsMTAgQEAKICAgYExvY2tpbmdgXwogICAgIGZpbGUoYExPQ0tgXyA8cGF0aD4gWy4uLl0pCiAKKyAgIGBBcmNoaXZpbmdgXworICAgICBmaWxlKGBBUkNISVZFX0NSRUFURWBfIE9VVFBVVCA8YXJjaGl2ZT4gRklMRVMgPGZpbGVzPiBbLi4uXSkKKyAgICAgZmlsZShgQVJDSElWRV9FWFRSQUNUYF8gSU5QVVQgPGFyY2hpdmU+IERFU1RJTkFUSU9OIDxkaXI+IFsuLi5dKQorCiBSZWFkaW5nCiBeXl5eXl5eCiAKQEAgLTU0LDcgKzU5LDkgQEAKIFJlYWQgY29udGVudCBmcm9tIGEgZmlsZSBjYWxsZWQgYGA8ZmlsZW5hbWU+YGAgYW5kIHN0b3JlIGl0IGluIGEKIGBgPHZhcmlhYmxlPmBgLiAgT3B0aW9uYWxseSBzdGFydCBmcm9tIHRoZSBnaXZlbiBgYDxvZmZzZXQ+YGAgYW5kCiByZWFkIGF0IG1vc3QgYGA8bWF4LWluPmBgIGJ5dGVzLiAgVGhlIGBgSEVYYGAgb3B0aW9uIGNhdXNlcyBkYXRhIHRvCi1iZSBjb252ZXJ0ZWQgdG8gYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiAodXNlZnVsIGZvciBiaW5hcnkgZGF0YSkuCitiZSBjb252ZXJ0ZWQgdG8gYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiAodXNlZnVsIGZvciBiaW5hcnkgZGF0YSkuIElmIHRoZQorYGBIRVhgYCBvcHRpb24gaXMgc3BlY2lmaWVkLCBsZXR0ZXJzIGluIHRoZSBvdXRwdXQgKGBgYWBgIHRocm91Z2ggYGBmYGApIGFyZSBpbgorbG93ZXJjYXNlLgogCiAuLiBfU1RSSU5HUzoKIApAQCAtNDgyLDYgKzQ4OSw0NSBAQAogYGBmaWxlKEdFTkVSQVRFKWBgIGNvbW1hbmQgcmV0dXJucywgaXQgaXMgd3JpdHRlbiBvbmx5IGFmdGVyIHByb2Nlc3NpbmcgYWxsCiBvZiBhIHByb2plY3QncyBgYENNYWtlTGlzdHMudHh0YGAgZmlsZXMuCiAKKy4uIF9DT05GSUdVUkU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGZpbGUoQ09ORklHVVJFIE9VVFBVVCBvdXRwdXQtZmlsZQorICAgICAgIENPTlRFTlQgY29udGVudAorICAgICAgIFtFU0NBUEVfUVVPVEVTXSBbQE9OTFldCisgICAgICAgW05FV0xJTkVfU1RZTEUgW1VOSVh8RE9TfFdJTjMyfExGfENSTEZdIF0pCisKK0dlbmVyYXRlIGFuIG91dHB1dCBmaWxlIHVzaW5nIHRoZSBpbnB1dCBnaXZlbiBieSBgYENPTlRFTlRgYCBhbmQgc3Vic3RpdHV0ZQordmFyaWFibGUgdmFsdWVzIHJlZmVyZW5jZWQgYXMgYGBAVkFSQGBgIG9yIGBgJHtWQVJ9YGAgY29udGFpbmVkIHRoZXJlaW4uIFRoZQorc3Vic3RpdHV0aW9uIHJ1bGVzIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCBjb21tYW5kLgorSW4gb3JkZXIgdG8gbWF0Y2ggOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCdzIGJlaGF2aW9yLCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMKK2FyZSBub3Qgc3VwcG9ydGVkIGZvciBib3RoIGBgT1VUUFVUYGAgYW5kIGBgQ09OVEVOVGBgLgorCitUaGUgYXJndW1lbnRzIGFyZToKKworYGBPVVRQVVQgPG91dHB1dC1maWxlPmBgCisgIFNwZWNpZnkgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gZ2VuZXJhdGUuIEEgcmVsYXRpdmUgcGF0aCBpcyB0cmVhdGVkIHdpdGgKKyAgcmVzcGVjdCB0byB0aGUgdmFsdWUgb2YgOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgLiBTZWUgcG9saWN5CisgIDpwb2xpY3k6YENNUDAwNzBgLgorICBgYDxvdXRwdXQtZmlsZT5gYCBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyYXRvciBleHByZXNzaW9ucy4KKworYGBDT05URU5UIDxjb250ZW50PmBgCisgIFVzZSB0aGUgY29udGVudCBnaXZlbiBleHBsaWNpdGx5IGFzIGlucHV0LgorICBgYDxjb250ZW50PmBgIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zLgorCitgYEVTQ0FQRV9RVU9URVNgYAorICBFc2NhcGUgYW55IHN1YnN0aXR1dGVkIHF1b3RlcyB3aXRoIGJhY2tzbGFzaGVzIChDLXN0eWxlKS4KKworYGBAT05MWWBgCisgIFJlc3RyaWN0IHZhcmlhYmxlIHJlcGxhY2VtZW50IHRvIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGBAVkFSQGBgLgorICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc2NyaXB0cyB0aGF0IHVzZSBgYCR7VkFSfWBgIHN5bnRheC4KKworYGBORVdMSU5FX1NUWUxFIDxzdHlsZT5gYAorICBTcGVjaWZ5IHRoZSBuZXdsaW5lIHN0eWxlIGZvciB0aGUgb3V0cHV0IGZpbGUuICBTcGVjaWZ5CisgIGBgVU5JWGBgIG9yIGBgTEZgYCBmb3IgYGBcbmBgIG5ld2xpbmVzLCBvciBzcGVjaWZ5CisgIGBgRE9TYGAsIGBgV0lOMzJgYCwgb3IgYGBDUkxGYGAgZm9yIGBgXHJcbmBgIG5ld2xpbmVzLgorCiBGaWxlc3lzdGVtCiBeXl5eXl5eXl5eCiAKQEAgLTU0MCw3ICs1ODYsNyBAQAogQnkgZGVmYXVsdCBgYEdMT0JfUkVDVVJTRWBgIG9taXRzIGRpcmVjdG9yaWVzIGZyb20gcmVzdWx0IGxpc3QgLSBzZXR0aW5nCiBgYExJU1RfRElSRUNUT1JJRVNgYCB0byB0cnVlIGFkZHMgZGlyZWN0b3JpZXMgdG8gcmVzdWx0IGxpc3QuCiBJZiBgYEZPTExPV19TWU1MSU5LU2BgIGlzIGdpdmVuIG9yIHBvbGljeSA6cG9saWN5OmBDTVAwMDA5YCBpcyBub3Qgc2V0IHRvCi1gYE9MRGBgIHRoZW4gYGBMSVNUX0RJUkVDVE9SSUVTYGAgdHJlYXRzIHN5bWxpbmtzIGFzIGRpcmVjdG9yaWVzLgorYGBORVdgYCB0aGVuIGBgTElTVF9ESVJFQ1RPUklFU2BgIHRyZWF0cyBzeW1saW5rcyBhcyBkaXJlY3Rvcmllcy4KIAogRXhhbXBsZXMgb2YgcmVjdXJzaXZlIGdsb2JiaW5nIGluY2x1ZGU6OgogCkBAIC04NDYsMyArODkyLDYyIEBACiBUcnlpbmcgdG8gbG9jayBmaWxlIHR3aWNlIGlzIG5vdCBhbGxvd2VkLiAgQW55IGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBhbmQKIGZpbGUgaXRzZWxmIHdpbGwgYmUgY3JlYXRlZCBpZiB0aGV5IG5vdCBleGlzdC4gIGBgR1VBUkRgYCBhbmQgYGBUSU1FT1VUYGAKIG9wdGlvbnMgaWdub3JlZCBvbiBgYFJFTEVBU0VgYCBvcGVyYXRpb24uCisKK0FyY2hpdmluZworXl5eXl5eXl5eCisKKy4uIF9BUkNISVZFX0NSRUFURToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgZmlsZShBUkNISVZFX0NSRUFURSBPVVRQVVQgPGFyY2hpdmU+CisgICAgW0ZJTEVTIDxmaWxlcz5dCisgICAgW0RJUkVDVE9SWSA8ZGlycz5dCisgICAgW0ZPUk1BVCA8Zm9ybWF0Pl0KKyAgICBbVFlQRSA8dHlwZT5dCisgICAgW01USU1FIDxtdGltZT5dCisgICAgW1ZFUkJPU0VdKQorCitDcmVhdGVzIGFuIGFyY2hpdmUgc3BlY2lmZWQgYnkgYGBPVVRQVVRgYCB3aXRoIHRoZSBjb250ZW50IG9mIGBgRklMRVNgYCBhbmQKK2BgRElSRUNUT1JZYGAuCisKK1RvIHNwZWNpZnkgdGhlIGZvcm1hdCBvZiB0aGUgYXJjaGl2ZSBzZXQgdGhlIGBgRk9STUFUYGAgb3B0aW9uLgorU3VwcG9ydGVkIGZvcm1hdHMgYXJlOiBgYDd6aXBgYCwgYGBnbnV0YXJgYCwgYGBwYXhgYCwgYGBwYXhyYGAsIGBgcmF3YGAsCisocmVzdHJpY3RlZCBwYXgsIGRlZmF1bHQpLCBhbmQgYGB6aXBgYC4KKworVG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb21wcmVzc2lvbiBzZXQgdGhlIGBgVFlQRWBgIG9wdGlvbi4KK1N1cHBvcnRlZCBjb21wcmVzc2lvbiB0eXBlcyBhcmU6IGBgTm9uZWBgLCBgYEJaaXAyYGAsIGBgR1ppcGBgLCBgYFhaYGAsCithbmQgYGBac3RkYGAuCisKKy4uIG5vdGU6OgorICBXaXRoIGBgRk9STUFUYGAgc2V0IHRvIGBgcmF3YGAgb25seSBvbmUgZmlsZSB3aWxsIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUKKyAgY29tcHJlc3Npb24gdHlwZSBzcGVjaWZpZWQgYnkgYGBUWVBFYGAuCisKK1dpdGggYGBWRVJCT1NFYGAgdGhlIGNvbW1hbmQgd2lsbCBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0LgorCitUbyBzcGVjaWZ5IHRoZSBtb2RpZmljYXRpb24gdGltZSByZWNvcmRlZCBpbiB0YXJiYWxsIGVudHJpZXMgdXNlCit0aGUgYGBNVElNRWBgIG9wdGlvbi4KKworLi4gX0FSQ0hJVkVfRVhUUkFDVDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgZmlsZShBUkNISVZFX0VYVFJBQ1QgSU5QVVQgPGFyY2hpdmU+CisgICAgW0ZJTEVTIDxmaWxlcz5dCisgICAgW0RJUkVDVE9SWSA8ZGlycz5dCisgICAgW0RFU1RJTkFUSU9OIDxkaXI+XQorICAgIFtMSVNUX09OTFldCisgICAgW1ZFUkJPU0VdKQorCitFeHRyYWN0cyBvciBsaXN0cyB0aGUgY29udGVudCBvZiBhbiBhcmNoaXZlIHNwZWNpZmllZCBieSBgYElOUFVUYGAuCisKK1RoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNvbnRlbnQgb2YgdGhlIGFyY2hpdmUgd2lsbCBiZSBleHRyYWN0ZWQgY2FuCitiZSBzcGVjaWZpZWQgdmlhIGBgREVTVElOQVRJT05gYC4gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGl0LCBpdAord2lsbCBiZSBjcmVhdGVkLgorCitUbyBzZWxlY3Qgd2hpY2ggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpbGwgYmUgZXh0cmFjdGVkIG9yIGxpc3RlZAordXNlICBgYEZJTEVTYGAgYW5kIGBgRElSRUNUT1JZYGAgb3B0aW9ucy4KKworYGBMSVNUX09OTFlgYCB3aWxsIG9ubHkgbGlzdCB0aGUgZmlsZXMgaW4gdGhlIGFyY2hpdmUuCisKK1dpdGggYGBWRVJCT1NFYGAgdGhlIGNvbW1hbmQgd2lsbCBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0LgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2ZvcmVhY2gucnN0IGIvSGVscC9jb21tYW5kL2ZvcmVhY2gucnN0CmluZGV4IGFlMmFmYjIuLmEwMWExMDQgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9mb3JlYWNoLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvZm9yZWFjaC5yc3QKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKLSAgZm9yZWFjaChsb29wX3ZhciBJTiBbTElTVFMgWzxsaXN0cz5dXSBbSVRFTVMgWzxpdGVtcz5dXSkKKyAgZm9yZWFjaCg8bG9vcF92YXI+IElOIFtMSVNUUyBbPGxpc3RzPl1dIFtJVEVNUyBbPGl0ZW1zPl1dKQogCiBJbiB0aGlzIHZhcmlhbnQsIGBgPGxpc3RzPmBgIGlzIGEgd2hpdGVzcGFjZSBvciBzZW1pY29sb24KIHNlcGFyYXRlZCBsaXN0IG9mIGxpc3QtdmFsdWVkIHZhcmlhYmxlcy4gVGhlIGBgZm9yZWFjaGBgCkBAIC04MiwzICs4Miw0NiBAQAogICAtLSBYPTYKICAgLS0gWD03CiAgIC0tIFg9OAorCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGZvcmVhY2goPGxvb3BfdmFyPi4uLiBJTiBaSVBfTElTVFMgPGxpc3RzPikKKworSW4gdGhpcyB2YXJpYW50LCBgYDxsaXN0cz5gYCBpcyBhIHdoaXRlc3BhY2Ugb3Igc2VtaWNvbG9uCitzZXBhcmF0ZWQgbGlzdCBvZiBsaXN0LXZhbHVlZCB2YXJpYWJsZXMuIFRoZSBgYGZvcmVhY2hgYAorY29tbWFuZCBpdGVyYXRlcyBvdmVyIGVhY2ggbGlzdCBzaW11bHRhbmVvdXNseSBzZXR0aW5nIHRoZQoraXRlcmF0aW9uIHZhcmlhYmxlcyBhcyBmb2xsb3dzOgorCistIGlmIHRoZSBvbmx5IGBgbG9vcF92YXJgYCBnaXZlbiwgdGhlbiBpdCBzZXRzIGEgc2VyaWVzIG9mCisgIGBgbG9vcF92YXJfTmBgIHZhcmlhYmxlcyB0byB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlCisgIGNvcnJlc3BvbmRpbmcgbGlzdDsKKy0gaWYgbXVsdGlwbGUgdmFyaWFibGUgbmFtZXMgcGFzc2VkLCB0aGVpciBjb3VudCBzaG91bGQgbWF0Y2gKKyAgdGhlIGxpc3RzIHZhcmlhYmxlcyBjb3VudDsKKy0gaWYgYW55IG9mIHRoZSBsaXN0cyBhcmUgc2hvcnRlciwgdGhlIGNvcnJlc3BvbmRpbmcgaXRlcmF0aW9uCisgIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBpdGVyYXRpb24uCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGxpc3QoQVBQRU5EIEVuZ2xpc2ggb25lIHR3byB0aHJlZSBmb3VyKQorICBsaXN0KEFQUEVORCBCYWhhc2Egc2F0dSBkdWEgdGlnYSkKKworICBmb3JlYWNoKG51bSBJTiBaSVBfTElTVFMgRW5nbGlzaCBCYWhhc2EpCisgICAgICBtZXNzYWdlKFNUQVRVUyAibnVtXzA9JHtudW1fMH0sIG51bV8xPSR7bnVtXzF9IikKKyAgZW5kZm9yZWFjaCgpCisKKyAgZm9yZWFjaChlbiBiYSBJTiBaSVBfTElTVFMgRW5nbGlzaCBCYWhhc2EpCisgICAgICBtZXNzYWdlKFNUQVRVUyAiZW49JHtlbn0sIGJhPSR7YmF9IikKKyAgZW5kZm9yZWFjaCgpCisKK3lpZWxkcworOjoKKworICAtLSBudW1fMD1vbmUsIG51bV8xPXNhdHUKKyAgLS0gbnVtXzA9dHdvLCBudW1fMT1kdWEKKyAgLS0gbnVtXzA9dGhyZWUsIG51bV8xPXRpZ2EKKyAgLS0gbnVtXzA9Zm91ciwgbnVtXzE9CisgIC0tIGVuPW9uZSwgYmE9c2F0dQorICAtLSBlbj10d28sIGJhPWR1YQorICAtLSBlbj10aHJlZSwgYmE9dGlnYQorICAtLSBlbj1mb3VyLCBiYT0KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9mdW5jdGlvbi5yc3QgYi9IZWxwL2NvbW1hbmQvZnVuY3Rpb24ucnN0CmluZGV4IDUzYmE3NTQuLjMwOTM4YjMgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9mdW5jdGlvbi5yc3QKKysrIGIvSGVscC9jb21tYW5kL2Z1bmN0aW9uLnJzdApAQCAtNDQsMTEgKzQ0LDE1IEBACiAgIGZvbygpCiAgIEZvbygpCiAgIEZPTygpCisgIGNtYWtlX2NvbW1hbmQoSU5WT0tFIGZvbykKIAogYW5kIHNvIG9uLiBIb3dldmVyLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBzdGF5IHdpdGggdGhlCiBjYXNlIGNob3NlbiBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVHlwaWNhbGx5IGZ1bmN0aW9ucyB1c2UKIGFsbC1sb3dlcmNhc2UgbmFtZXMuCiAKK1RoZSA6Y29tbWFuZDpgY21ha2VfY29tbWFuZChJTlZPS0UgLi4uKWAgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGludm9rZSB0aGUKK2Z1bmN0aW9uLgorCiBBcmd1bWVudHMKIF5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvaW5zdGFsbC5yc3QgYi9IZWxwL2NvbW1hbmQvaW5zdGFsbC5yc3QKaW5kZXggNWFmZmM1Yi4uY2YwNGVkYSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2luc3RhbGwucnN0CisrKyBiL0hlbHAvY29tbWFuZC9pbnN0YWxsLnJzdApAQCAtMzAsMTMgKzMwLDIwIEBACiAKIGBgREVTVElOQVRJT05gYAogICBTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgb24gZGlzayB0byB3aGljaCBhIGZpbGUgd2lsbCBiZSBpbnN0YWxsZWQuCi0gIElmIGEgZnVsbCBwYXRoICh3aXRoIGEgbGVhZGluZyBzbGFzaCBvciBkcml2ZSBsZXR0ZXIpIGlzIGdpdmVuCi0gIGl0IGlzIHVzZWQgZGlyZWN0bHkuICBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZ2l2ZW4gaXQgaXMgaW50ZXJwcmV0ZWQKLSAgcmVsYXRpdmUgdG8gdGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCB2YXJpYWJsZS4KKyAgQXJndW1lbnRzIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRocy4KKworICBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZ2l2ZW4gaXQgaXMgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHZhbHVlCisgIG9mIHRoZSA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCB2YXJpYWJsZS4KICAgVGhlIHByZWZpeCBjYW4gYmUgcmVsb2NhdGVkIGF0IGluc3RhbGwgdGltZSB1c2luZyB0aGUgYGBERVNURElSYGAKICAgbWVjaGFuaXNtIGV4cGxhaW5lZCBpbiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAgdmFyaWFibGUKICAgZG9jdW1lbnRhdGlvbi4KIAorICBJZiBhbiBhYnNvbHV0ZSBwYXRoICh3aXRoIGEgbGVhZGluZyBzbGFzaCBvciBkcml2ZSBsZXR0ZXIpIGlzIGdpdmVuCisgIGl0IGlzIHVzZWQgdmVyYmF0aW0uCisKKyAgQXMgYWJzb2x1dGUgcGF0aHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgOm1hbnVhbDpgY3BhY2sgPGNwYWNrKDEpPmAgaW5zdGFsbGVyCisgIGdlbmVyYXRvcnMsIGl0IGlzIHByZWZlcmFibGUgdG8gdXNlIHJlbGF0aXZlIHBhdGhzIHRocm91Z2hvdXQuCisKIGBgUEVSTUlTU0lPTlNgYAogICBTcGVjaWZ5IHBlcm1pc3Npb25zIGZvciBpbnN0YWxsZWQgZmlsZXMuICBWYWxpZCBwZXJtaXNzaW9ucyBhcmUKICAgYGBPV05FUl9SRUFEYGAsIGBgT1dORVJfV1JJVEVgYCwgYGBPV05FUl9FWEVDVVRFYGAsIGBgR1JPVVBfUkVBRGBgLApAQCAtMTE5LDMxICsxMjYsMzggQEAKICAgICAgICAgICApCiAKIFRoZSBgYFRBUkdFVFNgYCBmb3JtIHNwZWNpZmllcyBydWxlcyBmb3IgaW5zdGFsbGluZyB0YXJnZXRzIGZyb20gYQotcHJvamVjdC4gIFRoZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIHRhcmdldCBmaWxlcyB0aGF0IG1heSBiZSBpbnN0YWxsZWQ6Citwcm9qZWN0LiAgVGhlcmUgYXJlIHNldmVyYWwga2luZHMgb2YgdGFyZ2V0IDpyZWY6YE91dHB1dCBBcnRpZmFjdHNgCit0aGF0IG1heSBiZSBpbnN0YWxsZWQ6CiAKIGBgQVJDSElWRWBgCi0gIFN0YXRpYyBsaWJyYXJpZXMgYXJlIHRyZWF0ZWQgYXMgYGBBUkNISVZFYGAgdGFyZ2V0cywgZXhjZXB0IHRob3NlCi0gIG1hcmtlZCB3aXRoIHRoZSBgYEZSQU1FV09SS2BgIHByb3BlcnR5IG9uIG1hY09TIChzZWUgYGBGUkFNRVdPUktgYAotICBiZWxvdy4pIEZvciBETEwgcGxhdGZvcm1zIChhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZwotICBDeWd3aW4pLCB0aGUgRExMIGltcG9ydCBsaWJyYXJ5IGlzIHRyZWF0ZWQgYXMgYW4gYGBBUkNISVZFYGAgdGFyZ2V0LgotICBPbiBBSVgsIHRoZSBsaW5rZXIgaW1wb3J0IGZpbGUgY3JlYXRlZCBmb3IgZXhlY3V0YWJsZXMgd2l0aAotICA6cHJvcF90Z3Q6YEVOQUJMRV9FWFBPUlRTYCBpcyB0cmVhdGVkIGFzIGFuIGBgQVJDSElWRWBgIHRhcmdldC4KKyAgVGFyZ2V0IGFydGlmYWN0cyBvZiB0aGlzIGtpbmQgaW5jbHVkZToKKworICAqICpTdGF0aWMgbGlicmFyaWVzKgorICAgIChleGNlcHQgb24gbWFjT1Mgd2hlbiBtYXJrZWQgYXMgYGBGUkFNRVdPUktgYCwgc2VlIGJlbG93KTsKKyAgKiAqRExMIGltcG9ydCBsaWJyYXJpZXMqCisgICAgKG9uIGFsbCBXaW5kb3dzLWJhc2VkIHN5c3RlbXMgaW5jbHVkaW5nIEN5Z3dpbjsgdGhleSBoYXZlIGV4dGVuc2lvbgorICAgIGBgLmxpYmBgLCBpbiBjb250cmFzdCB0byB0aGUgYGAuZGxsYGAgbGlicmFyaWVzIHRoYXQgZ28gdG8gYGBSVU5USU1FYGApOworICAqIE9uIEFJWCwgdGhlICpsaW5rZXIgaW1wb3J0IGZpbGUqIGNyZWF0ZWQgZm9yIGV4ZWN1dGFibGVzIHdpdGgKKyAgICA6cHJvcF90Z3Q6YEVOQUJMRV9FWFBPUlRTYCBlbmFibGVkLgogCiBgYExJQlJBUllgYAotICBNb2R1bGUgbGlicmFyaWVzIGFyZSBhbHdheXMgdHJlYXRlZCBhcyBgYExJQlJBUllgYCB0YXJnZXRzLiBGb3Igbm9uLQotICBETEwgcGxhdGZvcm1zIHNoYXJlZCBsaWJyYXJpZXMgYXJlIHRyZWF0ZWQgYXMgYGBMSUJSQVJZYGAgdGFyZ2V0cywKLSAgZXhjZXB0IHRob3NlIG1hcmtlZCB3aXRoIHRoZSBgYEZSQU1FV09SS2BgIHByb3BlcnR5IG9uIG1hY09TIChzZWUKLSAgYGBGUkFNRVdPUktgYCBiZWxvdy4pCisgIFRhcmdldCBhcnRpZmFjdHMgb2YgdGhpcyBraW5kIGluY2x1ZGU6CisKKyAgKiAqU2hhcmVkIGxpYnJhcmllcyosIGV4Y2VwdAorCisgICAgLSBETExzICh0aGVzZSBnbyB0byBgYFJVTlRJTUVgYCwgc2VlIGJlbG93KSwKKyAgICAtIG9uIG1hY09TIHdoZW4gbWFya2VkIGFzIGBgRlJBTUVXT1JLYGAgKHNlZSBiZWxvdykuCiAKIGBgUlVOVElNRWBgCi0gIEV4ZWN1dGFibGVzIGFyZSB0cmVhdGVkIGFzIGBgUlVOVElNRWBgIG9iamVjdHMsIGV4Y2VwdCB0aG9zZSBtYXJrZWQKLSAgd2l0aCB0aGUgYGBNQUNPU1hfQlVORExFYGAgcHJvcGVydHkgb24gbWFjT1MgKHNlZSBgYEJVTkRMRWBgIGJlbG93LikKLSAgRm9yIERMTCBwbGF0Zm9ybXMgKGFsbCBXaW5kb3dzLWJhc2VkIHN5c3RlbXMgaW5jbHVkaW5nIEN5Z3dpbiksIHRoZQotICBETEwgcGFydCBvZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHRyZWF0ZWQgYXMgYSBgYFJVTlRJTUVgYCB0YXJnZXQuCisgIFRhcmdldCBhcnRpZmFjdHMgb2YgdGhpcyBraW5kIGluY2x1ZGU6CisKKyAgKiAqRXhlY3V0YWJsZXMqCisgICAgKGV4Y2VwdCBvbiBtYWNPUyB3aGVuIG1hcmtlZCBhcyBgYE1BQ09TWF9CVU5ETEVgYCwgc2VlIGBgQlVORExFYGAgYmVsb3cpOworICAqIERMTHMgKG9uIGFsbCBXaW5kb3dzLWJhc2VkIHN5c3RlbXMgaW5jbHVkaW5nIEN5Z3dpbjsgbm90ZSB0aGF0IHRoZQorICAgIGFjY29tcGFueWluZyBpbXBvcnQgbGlicmFyaWVzIGFyZSBvZiBraW5kIGBgQVJDSElWRWBgKS4KIAogYGBPQkpFQ1RTYGAKLSAgT2JqZWN0IGxpYnJhcmllcyAoYSBzaW1wbGUgZ3JvdXAgb2Ygb2JqZWN0IGZpbGVzKSBhcmUgYWx3YXlzIHRyZWF0ZWQKLSAgYXMgYGBPQkpFQ1RTYGAgdGFyZ2V0cy4KKyAgT2JqZWN0IGZpbGVzIGFzc29jaWF0ZWQgd2l0aCAqb2JqZWN0IGxpYnJhcmllcyouCiAKIGBgRlJBTUVXT1JLYGAKICAgQm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgbWFya2VkIHdpdGggdGhlIGBgRlJBTUVXT1JLYGAKQEAgLTYzMCw2ICs2NDQsMTMgQEAKIGBgKElNUE9SVEVEXyk/TElOS19JTlRFUkZBQ0VfTElCUkFSSUVTKF88Q09ORklHPik/YGAgdG8gYmUgZXhwb3J0ZWQsIHdoZW4KIHBvbGljeSA6cG9saWN5OmBDTVAwMDIyYCBpcyBgYE5FV2BgLgogCisuLiBub3RlOjoKKyAgVGhlIGluc3RhbGxlZCBgYDxleHBvcnQtbmFtZT4uY21ha2VgYCBmaWxlIG1heSBjb21lIHdpdGggYWRkaXRpb25hbAorICBwZXItY29uZmlndXJhdGlvbiBgYDxleHBvcnQtbmFtZT4tKi5jbWFrZWBgIGZpbGVzIHRvIGJlIGxvYWRlZCBieQorICBnbG9iYmluZy4gIERvIG5vdCB1c2UgYW4gZXhwb3J0IG5hbWUgdGhhdCBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZQorICBuYW1lIGluIGNvbWJpbmF0aW9uIHdpdGggaW5zdGFsbGluZyBhIGBgPHBhY2thZ2UtbmFtZT4tY29uZmlnLmNtYWtlYGAKKyAgZmlsZSBvciB0aGUgbGF0dGVyIG1heSBiZSBpbmNvcnJlY3RseSBtYXRjaGVkIGJ5IHRoZSBnbG9iIGFuZCBsb2FkZWQuCisKIFdoZW4gYSBgYENPTVBPTkVOVGBgIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGxpc3RlZCBgYDxjb21wb25lbnQ+YGAgaW1wbGljaXRseQogZGVwZW5kcyBvbiBhbGwgY29tcG9uZW50cyBtZW50aW9uZWQgaW4gdGhlIGV4cG9ydCBzZXQuIFRoZSBleHBvcnRlZAogYGA8bmFtZT4uY21ha2VgYCBmaWxlIHdpbGwgcmVxdWlyZSBlYWNoIG9mIHRoZSBleHBvcnRlZCBjb21wb25lbnRzIHRvIGJlCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvbWFjcm8ucnN0IGIvSGVscC9jb21tYW5kL21hY3JvLnJzdAppbmRleCAwNWU1ZDc5Li5lZTk1NWNiIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvbWFjcm8ucnN0CisrKyBiL0hlbHAvY29tbWFuZC9tYWNyby5yc3QKQEAgLTQyLDExICs0MiwxNSBAQAogICBmb28oKQogICBGb28oKQogICBGT08oKQorICBjbWFrZV9jb21tYW5kKElOVk9LRSBmb28pCiAKIGFuZCBzbyBvbi4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc3RheSB3aXRoIHRoZQogY2FzZSBjaG9zZW4gaW4gdGhlIG1hY3JvIGRlZmluaXRpb24uICBUeXBpY2FsbHkgbWFjcm9zIHVzZQogYWxsLWxvd2VyY2FzZSBuYW1lcy4KIAorVGhlIDpjb21tYW5kOmBjbWFrZV9jb21tYW5kKElOVk9LRSAuLi4pYCBjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgdG8gaW52b2tlIHRoZQorbWFjcm8uCisKIEFyZ3VtZW50cwogXl5eXl5eXl5eCiAKQEAgLTkxLDYgKzk1LDEyIEBACiBmcm9tIHRoZSBzY29wZSBvZiB0aGUgbWFjcm8gY2FsbC4gIFRvIGF2b2lkIGNvbmZ1c2lvbiwgaXQgaXMgcmVjb21tZW5kZWQKIHRvIGF2b2lkIDpjb21tYW5kOmByZXR1cm4oKWAgaW4gbWFjcm9zIGFsdG9nZXRoZXIuCiAKK1VubGlrZSBhIGZ1bmN0aW9uLCB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYCwKKzp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAsCis6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYCwKKzp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkVgIHZhcmlhYmxlcyBhcmUgbm90CitzZXQgZm9yIG1hY3JvLgorCiAuLiBfYEFyZ3VtZW50IENhdmVhdHNgOgogCiBBcmd1bWVudCBDYXZlYXRzCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvbWFya19hc19hZHZhbmNlZC5yc3QgYi9IZWxwL2NvbW1hbmQvbWFya19hc19hZHZhbmNlZC5yc3QKaW5kZXggNTcxMmZiNC4uZTUyZTYyMyAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL21hcmtfYXNfYWR2YW5jZWQucnN0CisrKyBiL0hlbHAvY29tbWFuZC9tYXJrX2FzX2FkdmFuY2VkLnJzdApAQCAtMjIsMyArMjIsOSBAQAogbmV3IHZhbHVlcyB3aWxsIGJlIG1hcmtlZCBhcyBhZHZhbmNlZCwgYnV0IGlmIGEKIHZhcmlhYmxlIGFscmVhZHkgaGFzIGFuIGFkdmFuY2VkL25vbi1hZHZhbmNlZCBzdGF0ZSwKIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCisKKy4uIG5vdGU6OgorCisgIFBvbGljeSA6cG9saWN5OmBDTVAwMTAyYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgYGBtYXJrX2FzX2FkdmFuY2VkYGAKKyAgY2FsbC4gV2hlbiBzZXQgdG8gYGBORVdgYCwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGlzIGNvbW1hbmQgd2hpY2ggYXJlIG5vdAorICBhbHJlYWR5IGluIHRoZSBjYWNoZSBhcmUgaWdub3JlZC4gU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTAyYC4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9tZXNzYWdlLnJzdCBiL0hlbHAvY29tbWFuZC9tZXNzYWdlLnJzdAppbmRleCBjNjE0Mjg2Li42YmMwZTRjIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvbWVzc2FnZS5yc3QKKysrIGIvSGVscC9jb21tYW5kL21lc3NhZ2UucnN0CkBAIC0xLDEzICsxLDMzIEBACiBtZXNzYWdlCiAtLS0tLS0tCiAKLURpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyLgorTG9nIGEgbWVzc2FnZS4KKworU3lub3BzaXMKK15eXl5eXl5eCisKKy4uIHBhcnNlZC1saXRlcmFsOjoKKworICBgR2VuZXJhbCBtZXNzYWdlc2BfCisgICAgbWVzc2FnZShbPG1vZGU+XSAibWVzc2FnZSB0ZXh0IiAuLi4pCisKKyAgYFJlcG9ydGluZyBjaGVja3NgXworICAgIG1lc3NhZ2UoPGNoZWNrU3RhdGU+ICJtZXNzYWdlIHRleHQiIC4uLikKKworCitHZW5lcmFsIG1lc3NhZ2VzCiteXl5eXl5eXl5eXl5eXl5eCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi0gIG1lc3NhZ2UoWzxtb2RlPl0gIm1lc3NhZ2UgdG8gZGlzcGxheSIgLi4uKQorICBtZXNzYWdlKFs8bW9kZT5dICJtZXNzYWdlIHRleHQiIC4uLikKIAotVGhlIG9wdGlvbmFsIGBgPG1vZGU+YGAga2V5d29yZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIG1lc3NhZ2U6CitSZWNvcmQgdGhlIHNwZWNpZmllZCBtZXNzYWdlIHRleHQgaW4gdGhlIGxvZy4gIElmIG1vcmUgdGhhbiBvbmUgbWVzc2FnZQorc3RyaW5nIGlzIGdpdmVuLCB0aGV5IGFyZSBjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSBtZXNzYWdlIHdpdGggbm8KK3NlcGFyYXRvciBiZXR3ZWVuIHRoZSBzdHJpbmdzLgorCitUaGUgb3B0aW9uYWwgYGA8bW9kZT5gYCBrZXl3b3JkIGRldGVybWluZXMgdGhlIHR5cGUgb2YgbWVzc2FnZSwgd2hpY2gKK2luZmx1ZW5jZXMgdGhlIHdheSB0aGUgbWVzc2FnZSBpcyBoYW5kbGVkOgogCiBgYEZBVEFMX0VSUk9SYGAKICAgQ01ha2UgRXJyb3IsIHN0b3AgcHJvY2Vzc2luZyBhbmQgZ2VuZXJhdGlvbi4KQEAgLTU5LDEyICs3OSwxMDQgQEAKIG1lc3NhZ2VzIG9uZSBhdCBhIHRpbWUgb24gYSBzdGF0dXMgbGluZSBhbmQgb3RoZXIgbWVzc2FnZXMgaW4gYW4KIGludGVyYWN0aXZlIHBvcC11cCBib3guICBUaGUgYGAtLWxvZy1sZXZlbGBgIGNvbW1hbmQtbGluZSBvcHRpb24gdG8gZWFjaCBvZgogdGhlc2UgdG9vbHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBtZXNzYWdlcyB3aWxsIGJlIHNob3duLgorVG8gbWFrZSBhIGxvZyBsZXZlbCBwZXJzaXN0IGJldHdlZW4gQ01ha2UgcnVucywgdGhlCis6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfTE9HX0xFVkVMYCB2YXJpYWJsZSBjYW4gYmUgc2V0IGluc3RlYWQuCitOb3RlIHRoYXQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjYWNoZSB2YXJpYWJsZS4KIAotTWVzc2FnZXMgb2YgbG9nIGxldmVscyBgYE5PVElDRWBgIGFuZCBiZWxvdyB3aWxsIGFsc28gaGF2ZSBlYWNoIGxpbmUgcHJlY2VkZWQKK01lc3NhZ2VzIG9mIGxvZyBsZXZlbHMgYGBOT1RJQ0VgYCBhbmQgYmVsb3cgd2lsbCBoYXZlIGVhY2ggbGluZSBwcmVjZWRlZAogYnkgdGhlIGNvbnRlbnQgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9JTkRFTlRgIHZhcmlhYmxlIChjb252ZXJ0ZWQgdG8KIGEgc2luZ2xlIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGl0cyBsaXN0IGl0ZW1zKS4gIEZvciBgYFNUQVRVU2BgIHRvIGBgVFJBQ0VgYAogbWVzc2FnZXMsIHRoaXMgaW5kZW50aW5nIGNvbnRlbnQgd2lsbCBiZSBpbnNlcnRlZCBhZnRlciB0aGUgaHlwaGVucy4KIAorTWVzc2FnZXMgb2YgbG9nIGxldmVscyBgYE5PVElDRWBgIGFuZCBiZWxvdyBjYW4gYWxzbyBoYXZlIGVhY2ggbGluZSBwcmVjZWRlZAord2l0aCBjb250ZXh0IG9mIHRoZSBmb3JtIGBgW3NvbWUuY29udGV4dC5leGFtcGxlXWBgLiAgVGhlIGNvbnRlbnQgYmV0d2VlbiB0aGUKK3NxdWFyZSBicmFja2V0cyBpcyBvYnRhaW5lZCBieSBjb252ZXJ0aW5nIHRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVGAKK2xpc3QgdmFyaWFibGUgdG8gYSBkb3Qtc2VwYXJhdGVkIHN0cmluZy4gIFRoZSBtZXNzYWdlIGNvbnRleHQgd2lsbCBhbHdheXMKK2FwcGVhciBiZWZvcmUgYW55IGluZGVudGluZyBjb250ZW50IGJ1dCBhZnRlciBhbnkgYXV0b21hdGljYWxseSBhZGRlZCBsZWFkaW5nCitoeXBoZW5zLiBCeSBkZWZhdWx0LCBtZXNzYWdlIGNvbnRleHQgaXMgbm90IHNob3duLCBpdCBoYXMgdG8gYmUgZXhwbGljaXRseQorZW5hYmxlZCBieSBnaXZpbmcgdGhlIDptYW51YWw6YGNtYWtlIDxjbWFrZSgxKT5gIGBgLS1sb2ctY29udGV4dGBgCitjb21tYW5kLWxpbmUgb3B0aW9uIG9yIGJ5IHNldHRpbmcgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgCit2YXJpYWJsZSB0byB0cnVlLiAgU2VlIHRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVGAgZG9jdW1lbnRhdGlvbiBmb3IKK3VzYWdlIGV4YW1wbGVzLgorCiBDTWFrZSBXYXJuaW5nIGFuZCBFcnJvciBtZXNzYWdlIHRleHQgZGlzcGxheXMgdXNpbmcgYSBzaW1wbGUgbWFya3VwCiBsYW5ndWFnZS4gIE5vbi1pbmRlbnRlZCB0ZXh0IGlzIGZvcm1hdHRlZCBpbiBsaW5lLXdyYXBwZWQgcGFyYWdyYXBocwogZGVsaW1pdGVkIGJ5IG5ld2xpbmVzLiAgSW5kZW50ZWQgdGV4dCBpcyBjb25zaWRlcmVkIHByZS1mb3JtYXR0ZWQuCisKKworUmVwb3J0aW5nIGNoZWNrcworXl5eXl5eXl5eXl5eXl5eXgorCitBIGNvbW1vbiBwYXR0ZXJuIGluIENNYWtlIG91dHB1dCBpcyBhIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGUgc3RhcnQgb2Ygc29tZQorc29ydCBvZiBjaGVjaywgZm9sbG93ZWQgYnkgYW5vdGhlciBtZXNzYWdlIHJlcG9ydGluZyB0aGUgcmVzdWx0IG9mIHRoYXQgY2hlY2suCitGb3IgZXhhbXBsZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIHNvbWVoZWFkZXIuaCIpCisgICMuLi4gZG8gdGhlIGNoZWNrcywgc2V0IGNoZWNrU3VjY2VzcyB3aXRoIHRoZSByZXN1bHQKKyAgaWYoY2hlY2tTdWNjZXNzKQorICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBzb21laGVhZGVyLmggLSBmb3VuZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBzb21laGVhZGVyLmggLSBub3QgZm91bmQiKQorICBlbmRpZigpCisKK1RoaXMgY2FuIGJlIG1vcmUgcm9idXN0bHkgYW5kIGNvbnZlbmllbnRseSBleHByZXNzZWQgdXNpbmcgdGhlIGBgQ0hFQ0tfLi4uYGAKK2tleXdvcmQgZm9ybSBvZiB0aGUgYGBtZXNzYWdlKClgYCBjb21tYW5kOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBtZXNzYWdlKDxjaGVja1N0YXRlPiAibWVzc2FnZSIgLi4uKQorCit3aGVyZSBgYDxjaGVja1N0YXRlPmBgIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgYGBDSEVDS19TVEFSVGBgCisgICAgUmVjb3JkIGEgY29uY2lzZSBtZXNzYWdlIGFib3V0IHRoZSBjaGVjayBhYm91dCB0byBiZSBwZXJmb3JtZWQuCisKKyAgYGBDSEVDS19QQVNTYGAKKyAgICBSZWNvcmQgYSBzdWNjZXNzZnVsIHJlc3VsdCBmb3IgYSBjaGVjay4KKworICBgYENIRUNLX0ZBSUxgYAorICAgIFJlY29yZCBhbiB1bnN1Y2Nlc3NmdWwgcmVzdWx0IGZvciBhIGNoZWNrLgorCitXaGVuIHJlY29yZGluZyBhIGNoZWNrIHJlc3VsdCwgdGhlIGNvbW1hbmQgcmVwZWF0cyB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtb3N0CityZWNlbnRseSBzdGFydGVkIGNoZWNrIGZvciB3aGljaCBubyByZXN1bHQgaGFzIHlldCBiZWVuIHJlcG9ydGVkLCB0aGVuIHNvbWUKK3NlcGFyYXRvciBjaGFyYWN0ZXJzIGFuZCB0aGVuIHRoZSBtZXNzYWdlIHRleHQgcHJvdmlkZWQgYWZ0ZXIgdGhlCitgYENIRUNLX1BBU1NgYCBvciBgYENIRUNLX0ZBSUxgYCBrZXl3b3JkLiAgQ2hlY2sgbWVzc2FnZXMgYXJlIGFsd2F5cyByZXBvcnRlZAorYXQgYGBTVEFUVVNgYCBsb2cgbGV2ZWwuCisKK0NoZWNrcyBtYXkgYmUgbmVzdGVkIGFuZCBldmVyeSBgYENIRUNLX1NUQVJUYGAgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUKK21hdGNoaW5nIGBgQ0hFQ0tfUEFTU2BgIG9yIGBgQ0hFQ0tfRkFJTGBgLgorVGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9JTkRFTlRgIHZhcmlhYmxlIGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkCitpbmRlbnRpbmcgdG8gbmVzdGVkIGNoZWNrcyBpZiBkZXNpcmVkLiAgRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkZpbmRpbmcgbXkgdGhpbmdzIikKKyAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgIikKKyAgdW5zZXQobWlzc2luZ0NvbXBvbmVudHMpCisKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiRmluZGluZyBwYXJ0QSIpCisgICMgLi4uIGRvIGNoZWNrLCBhc3N1bWUgd2UgZmluZCBBCisgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZm91bmQiKQorCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkZpbmRpbmcgcGFydEIiKQorICAjIC4uLiBkbyBjaGVjaywgYXNzdW1lIHdlIGRvbid0IGZpbmQgQgorICBsaXN0KEFQUEVORCBtaXNzaW5nQ29tcG9uZW50cyBCKQorICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCisKKyAgbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKyAgaWYobWlzc2luZ0NvbXBvbmVudHMpCisgICAgbWVzc2FnZShDSEVDS19GQUlMICJtaXNzaW5nIGNvbXBvbmVudHM6ICR7bWlzc2luZ0NvbXBvbmVudHN9IikKKyAgZWxzZSgpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJhbGwgY29tcG9uZW50cyBmb3VuZCIpCisgIGVuZGlmKCkKKworT3V0cHV0IGZyb20gdGhlIGFib3ZlIHdvdWxkIGFwcGVhciBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOjoKKworICAtLSBGaW5kaW5nIG15IHRoaW5ncworICAtLSAgIEZpbmRpbmcgcGFydEEKKyAgLS0gICBGaW5kaW5nIHBhcnRBIC0gZm91bmQKKyAgLS0gICBGaW5kaW5nIHBhcnRCCisgIC0tICAgRmluZGluZyBwYXJ0QiAtIG5vdCBmb3VuZAorICAtLSBGaW5kaW5nIG15IHRoaW5ncyAtIG1pc3NpbmcgY29tcG9uZW50czogQgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3Byb2plY3QucnN0IGIvSGVscC9jb21tYW5kL3Byb2plY3QucnN0CmluZGV4IDM5NTE0NTYuLmI2MDkzZDMgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9wcm9qZWN0LnJzdAorKysgYi9IZWxwL2NvbW1hbmQvcHJvamVjdC5yc3QKQEAgLTEwMiw5ICsxMDIsMTIgQEAKIENvZGUgSW5qZWN0aW9uCiBeXl5eXl5eXl5eXl5eXgogCi1JZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFYCB2YXJpYWJsZSBpcyBzZXQsIHRoZSBmaWxlCi1wb2ludGVkIHRvIGJ5IHRoYXQgdmFyaWFibGUgd2lsbCBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3Qgc3RlcCBvZiB0aGUKK0lmIHRoZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkVgIG9yCis6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfPFBST0pFQ1QtTkFNRT5fSU5DTFVERV9CRUZPUkVgIHZhcmlhYmxlcyBhcmUgc2V0LAordGhlIGZpbGVzIHRoZXkgcG9pbnQgdG8gd2lsbCBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3Qgc3RlcCBvZiB0aGUKIGBgcHJvamVjdCgpYGAgY29tbWFuZC4KK0lmIGJvdGggYXJlIHNldCwgdGhlbiA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkVgIHdpbGwgYmUKK2luY2x1ZGVkIGJlZm9yZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfPFBST0pFQ1QtTkFNRT5fSU5DTFVERV9CRUZPUkVgLgogCiBJZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUX0lOQ0xVREVgIG9yCiA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfPFBST0pFQ1QtTkFNRT5fSU5DTFVERWAgdmFyaWFibGVzIGFyZSBzZXQsIHRoZSBmaWxlcwpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3N0cmluZy5yc3QgYi9IZWxwL2NvbW1hbmQvc3RyaW5nLnJzdAppbmRleCA4MWEyMDYxLi5jZmNmOTE0IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvc3RyaW5nLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvc3RyaW5nLnJzdApAQCAtMTEsOCArMTEsNiBAQAogICBgU2VhcmNoIGFuZCBSZXBsYWNlYF8KICAgICBzdHJpbmcoYEZJTkRgXyA8c3RyaW5nPiA8c3Vic3RyaW5nPiA8b3V0LXZhcj4gWy4uLl0pCiAgICAgc3RyaW5nKGBSRVBMQUNFYF8gPG1hdGNoLXN0cmluZz4gPHJlcGxhY2Utc3RyaW5nPiA8b3V0LXZhcj4gPGlucHV0Pi4uLikKLQotICBgUmVndWxhciBFeHByZXNzaW9uc2BfCiAgICAgc3RyaW5nKGBSRUdFWCBNQVRDSGBfIDxtYXRjaC1yZWdleD4gPG91dC12YXI+IDxpbnB1dD4uLi4pCiAgICAgc3RyaW5nKGBSRUdFWCBNQVRDSEFMTGBfIDxtYXRjaC1yZWdleD4gPG91dC12YXI+IDxpbnB1dD4uLi4pCiAgICAgc3RyaW5nKGBSRUdFWCBSRVBMQUNFYF8gPG1hdGNoLXJlZ2V4PiA8cmVwbGFjZS1leHByPiA8b3V0LXZhcj4gPGlucHV0Pi4uLikKQEAgLTM4LDYgKzM2LDcgQEAKIAogICBgR2VuZXJhdGlvbmBfCiAgICAgc3RyaW5nKGBBU0NJSWBfIDxudW1iZXI+Li4uIDxvdXQtdmFyPikKKyAgICBzdHJpbmcoYEhFWGBfIDxzdHJpbmc+IDxvdXQtdmFyPikKICAgICBzdHJpbmcoYENPTkZJR1VSRWBfIDxzdHJpbmc+IDxvdXQtdmFyPiBbLi4uXSkKICAgICBzdHJpbmcoYE1BS0VfQ19JREVOVElGSUVSYF8gPHN0cmluZz4gPG91dC12YXI+KQogICAgIHN0cmluZyhgUkFORE9NYF8gWzxvcHRpb24+Li4uXSA8b3V0LXZhcj4pCkBAIC00Nyw2ICs0Niw5IEBACiBTZWFyY2ggYW5kIFJlcGxhY2UKIF5eXl5eXl5eXl5eXl5eXl5eXgogCitTZWFyY2ggYW5kIFJlcGxhY2UgV2l0aCBQbGFpbiBTdHJpbmdzCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCisKIC4uIF9GSU5EOgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKQEAgLTc0LDggKzc2LDggQEAKIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mIGBgPG1hdGNoX3N0cmluZz5gYCBpbiB0aGUgYGA8aW5wdXQ+YGAKIHdpdGggYGA8cmVwbGFjZV9zdHJpbmc+YGAgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIGBgPG91dHB1dF92YXJpYWJsZT5gYC4KIAotUmVndWxhciBFeHByZXNzaW9ucwotXl5eXl5eXl5eXl5eXl5eXl5eXgorU2VhcmNoIGFuZCBSZXBsYWNlIFdpdGggUmVndWxhciBFeHByZXNzaW9ucworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiAuLiBfYFJFR0VYIE1BVENIYDoKIApAQCAtODcsNiArODksNyBAQAogTWF0Y2ggdGhlIGBgPHJlZ3VsYXJfZXhwcmVzc2lvbj5gYCBvbmNlIGFuZCBzdG9yZSB0aGUgbWF0Y2ggaW4gdGhlCiBgYDxvdXRwdXRfdmFyaWFibGU+YGAuCiBBbGwgYGA8aW5wdXQ+YGAgYXJndW1lbnRzIGFyZSBjb25jYXRlbmF0ZWQgYmVmb3JlIG1hdGNoaW5nLgorUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3BlY2lmaWVkIGluIHRoZSBzdWJzZWN0aW9uIGp1c3QgYmVsb3cuCiAKIC4uIF9gUkVHRVggTUFUQ0hBTExgOgogCkBAIC0zNTMsNiArMzU2LDE2IEBACiAKIENvbnZlcnQgYWxsIG51bWJlcnMgaW50byBjb3JyZXNwb25kaW5nIEFTQ0lJIGNoYXJhY3RlcnMuCiAKKy4uIF9IRVg6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHN0cmluZyhIRVggPHN0cmluZz4gPG91dHB1dF92YXJpYWJsZT4pCisKK0NvbnZlcnQgZWFjaCBieXRlIGluIHRoZSBpbnB1dCBgYDxzdHJpbmc+YGAgdG8gaXRzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uCithbmQgc3RvcmUgdGhlIGNvbmNhdGVuYXRlZCBoZXggZGlnaXRzIGluIHRoZSBgYDxvdXRwdXRfdmFyaWFibGU+YGAuIExldHRlcnMgaW4KK3RoZSBvdXRwdXQgKGBgYWBgIHRocm91Z2ggYGBmYGApIGFyZSBpbiBsb3dlcmNhc2UuCisKIC4uIF9DT05GSUdVUkU6CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX2ZlYXR1cmVzLnJzdCBiL0hlbHAvY29tbWFuZC90YXJnZXRfY29tcGlsZV9mZWF0dXJlcy5yc3QKaW5kZXggOTI3MWNkNS4uYzU0MDFlNiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX2ZlYXR1cmVzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMucnN0CkBAIC04LDkgKzgsOSBAQAogICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyg8dGFyZ2V0PiA8UFJJVkFURXxQVUJMSUN8SU5URVJGQUNFPiA8ZmVhdHVyZT4gWy4uLl0pCiAKIFNwZWNpZmllcyBjb21waWxlciBmZWF0dXJlcyByZXF1aXJlZCB3aGVuIGNvbXBpbGluZyBhIGdpdmVuIHRhcmdldC4gIElmIHRoZQotZmVhdHVyZSBpcyBub3QgbGlzdGVkIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AgdmFyaWFibGUKLW9yIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVNgIHZhcmlhYmxlLAotdGhlbiBhbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGJ5IENNYWtlLiAgSWYgdGhlIHVzZSBvZiB0aGUgZmVhdHVyZSByZXF1aXJlcworZmVhdHVyZSBpcyBub3QgbGlzdGVkIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AsCis6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFU2AsIG9yIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVNgCit2YXJpYWJsZXMsIHRoZW4gYW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBieSBDTWFrZS4gIElmIHRoZSB1c2Ugb2YgdGhlIGZlYXR1cmUgcmVxdWlyZXMKIGFuIGFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZywgc3VjaCBhcyBgYC1zdGQ9Z251KysxMWBgLCB0aGUgZmxhZyB3aWxsIGJlIGFkZGVkCiBhdXRvbWF0aWNhbGx5LgogCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9hcmNoaXZlLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2FyY2hpdmUucnN0CmluZGV4IGQ0NTVmNGIuLmU5OTA0YWUgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL2FyY2hpdmUucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2FyY2hpdmUucnN0CkBAIC0xLDggKzEsOCBAQAogQ1BhY2sgQXJjaGl2ZSBHZW5lcmF0b3IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFyY2hpdmUgQ1BhY2sgZ2VuZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFja2FnaW5nIG9mIHNvdXJjZXMgYW5kIGJpbmFyaWVzIGluCi1kaWZmZXJlbnQgZm9ybWF0czoKK0NQYWNrIGdlbmVyYXRvciBmb3IgcGFja2FnaW5nIGZpbGVzIGludG8gYW4gYXJjaGl2ZSwgd2hpY2ggY2FuIGhhdmUKK2FueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CiAKICAgLSA3WiAtIDd6aXAgLSAoLjd6KQogICAtIFRCWjIgKC50YXIuYnoyKQpAQCAtMTIsMjUgKzEyLDQyIEBACiAgIC0gVFpTVCAoLnRhci56c3QpCiAgIC0gWklQICguemlwKQogCitXaGVuIHRoaXMgZ2VuZXJhdG9yIGlzIGNhbGxlZCBmcm9tIGBgQ1BhY2tTb3VyY2VDb25maWcuY21ha2VgYCAob3IgdGhyb3VnaAordGhlIGBgcGFja2FnZV9zb3VyY2VgYCB0YXJnZXQpLCB0aGVuIHRoZSBnZW5lcmF0ZWQgYXJjaGl2ZSB3aWxsIGNvbnRhaW4gYWxsCitmaWxlcyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnksIGV4Y2VwdCB0aG9zZSBzcGVjaWZpZWQgaW4KKzp2YXJpYWJsZTpgQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFU2AuICBUaGUgZm9sbG93aW5nIGlzIG9uZSBleGFtcGxlIG9mCitwYWNrYWdpbmcgYWxsIHNvdXJjZSBmaWxlcyBvZiBhIHByb2plY3Q6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChDUEFDS19TT1VSQ0VfR0VORVJBVE9SICJUR1oiKQorICBzZXQoQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFUworICAgIFxcLmdpdC8KKyAgICBidWlsZC8KKyAgICAiLip+JCIKKyAgKQorICBzZXQoQ1BBQ0tfVkVSQkFUSU1fVkFSSUFCTEVTIFlFUykKKyAgaW5jbHVkZShDUGFjaykKKworV2hlbiB0aGlzIGdlbmVyYXRvciBpcyBjYWxsZWQgZnJvbSBgYENQYWNrQ29uZmlnLmNtYWtlYGAgKG9yIHRocm91Z2ggdGhlCitgYHBhY2thZ2VgYCB0YXJnZXQpLCB0aGVuIHRoZSBnZW5lcmF0ZWQgYXJjaGl2ZSB3aWxsIGNvbnRhaW4gYWxsIGZpbGVzCit0aGF0IGhhdmUgYmVlbiBpbnN0YWxsZWQgdmlhIENNYWtlJ3MgOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQgKGFuZCB0aGUKK2RlcHJlY2F0ZWQgY29tbWFuZHMgOmNvbW1hbmQ6YGluc3RhbGxfZmlsZXNgLCA6Y29tbWFuZDpgaW5zdGFsbF9wcm9ncmFtc2AsCithbmQgOmNvbW1hbmQ6YGluc3RhbGxfdGFyZ2V0c2ApLgorCiBWYXJpYWJsZXMgc3BlY2lmaWMgdG8gQ1BhY2sgQXJjaGl2ZSBnZW5lcmF0b3IKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0FSQ0hJVkVfRklMRV9OQU1FCiAgICAgICAgICAgICAgIENQQUNLX0FSQ0hJVkVfPGNvbXBvbmVudD5fRklMRV9OQU1FCiAKLSBQYWNrYWdlIGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbiB3aGljaCBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5IGRlcGVuZGluZwotIG9uIHRoZSBhcmNoaXZlIGZvcm1hdC4KLQotICogTWFuZGF0b3J5IDogWUVTCi0gKiBEZWZhdWx0ICAgOiBgYDxDUEFDS19QQUNLQUdFX0ZJTEVfTkFNRT5bLTxjb21wb25lbnQ+XS48ZXh0ZW5zaW9uPmBgIHdpdGgKLSAgICAgICAgICAgICAgIHNwYWNlcyByZXBsYWNlZCBieSAnLScKKyAgUGFja2FnZSBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24uIFRoZSBleHRlbnNpb24gaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZQorICBhcmNoaXZlIGZvcm1hdCAoc2VlIGxpc3QgYWJvdmUpIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkIHRvIHRoZSBmaWxlIG5hbWUuCisgIFRoZSBkZWZhdWx0IGlzIGBgPENQQUNLX1BBQ0tBR0VfRklMRV9OQU1FPlstPGNvbXBvbmVudD5dYGAsIHdpdGggc3BhY2VzCisgIHJlcGxhY2VkIGJ5ICctJy4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19BUkNISVZFX0NPTVBPTkVOVF9JTlNUQUxMCiAKLSBFbmFibGUgY29tcG9uZW50IHBhY2thZ2luZyBmb3IgQ1BhY2tBcmNoaXZlCi0KLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBPRkYKLQotIElmIGVuYWJsZWQgKE9OKSBtdWx0aXBsZSBwYWNrYWdlcyBhcmUgZ2VuZXJhdGVkLiBCeSBkZWZhdWx0IGEgc2luZ2xlIHBhY2thZ2UKLSBjb250YWluaW5nIGZpbGVzIG9mIGFsbCBjb21wb25lbnRzIGlzIGdlbmVyYXRlZC4KKyAgRW5hYmxlIGNvbXBvbmVudCBwYWNrYWdpbmcuIElmIGVuYWJsZWQgKE9OKSwgdGhlbiB0aGUgYXJjaGl2ZSBnZW5lcmF0b3IKKyAgY3JlYXRlcyAgbXVsdGlwbGUgcGFja2FnZXMuIFRoZSBkZWZhdWx0IGlzIE9GRiwgd2hpY2ggbWVhbnMgdGhhdCBhIHNpbmdsZQorICBwYWNrYWdlIGNvbnRhaW5pbmcgZmlsZXMgb2YgYWxsIGNvbXBvbmVudHMgaXMgZ2VuZXJhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vZG1nLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2RtZy5yc3QKaW5kZXggMWUzNzg4OS4uY2VkZTBmMiAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vZG1nLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9kbWcucnN0CkBAIC01NCwxMCArNTQsMTIgQEAKIAogICBEaXJlY3Rvcnkgd2hlcmUgbGljZW5zZSBhbmQgbWVudSBmaWxlcyBmb3IgZGlmZmVyZW50IGxhbmd1YWdlcyBhcmUgc3RvcmVkLgogICBTZXR0aW5nIHRoaXMgY2F1c2VzIENQYWNrIHRvIGxvb2sgZm9yIGEgYGA8bGFuZ3VhZ2U+Lm1lbnUudHh0YGAgYW5kCi0gIGBgPGxhbmd1YWdlPi5saWNlbnNlLnR4dGBgIGZpbGUgZm9yIGV2ZXJ5IGxhbmd1YWdlIGRlZmluZWQgaW4KLSAgYGBDUEFDS19ETUdfU0xBX0xBTkdVQUdFU2BgLiBJZiBib3RoIHRoaXMgdmFyaWFibGUgYW5kCisgIGBgPGxhbmd1YWdlPi5saWNlbnNlLnR4dGBgIG9yIGBgPGxhbmd1YWdlPi5saWNlbnNlLnJ0ZmBgIGZpbGUgZm9yIGV2ZXJ5CisgIGxhbmd1YWdlIGRlZmluZWQgaW4gYGBDUEFDS19ETUdfU0xBX0xBTkdVQUdFU2BgLiAgSWYgYm90aCB0aGlzIHZhcmlhYmxlIGFuZAogICBgYENQQUNLX1JFU09VUkNFX0ZJTEVfTElDRU5TRWBgIGFyZSBzZXQsIENQYWNrIHdpbGwgb25seSBsb29rIGZvciB0aGUgbWVudQotICBmaWxlcyBhbmQgdXNlIHRoZSBzYW1lIGxpY2Vuc2UgZmlsZSBmb3IgYWxsIGxhbmd1YWdlcy4KKyAgZmlsZXMgYW5kIHVzZSB0aGUgc2FtZSBsaWNlbnNlIGZpbGUgZm9yIGFsbCBsYW5ndWFnZXMuICBJZiBib3RoCisgIGBgPGxhbmd1YWdlPi5saWNlbnNlLnR4dGBgIGFuZCBgYDxsYW5ndWFnZT4ubGljZW5zZS5ydGZgYCBleGlzdCwgdGhlIGBgLnR4dGBgCisgIGZpbGUgd2lsbCBiZSB1c2VkLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0RNR19TTEFfTEFOR1VBR0VTCiAKQEAgLTgxLDYgKzgzLDEzIEBACiAgIGBgPGxhbmd1YWdlPi5tZW51LnR4dGBgIGFuZCBgYDxsYW5ndWFnZT4ubGljZW5zZS50eHRgYCBpbiB0aGUgZGlyZWN0b3J5CiAgIHNwZWNpZmllZCBieSB0aGUgOnZhcmlhYmxlOmBDUEFDS19ETUdfU0xBX0RJUmAgdmFyaWFibGUuCiAKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfRE1HXzxjb21wb25lbnQ+X0ZJTEVfTkFNRQorCisgRmlsZSBuYW1lIHdoZW4gcGFja2FnaW5nIGBgPGNvbXBvbmVudD5gYCBhcyBpdHMgb3duIERNRworIChgYENQQUNLX0NPTVBPTkVOVFNfR1JPVVBJTkdgYCBzZXQgdG8gSUdOT1JFKS4KKworIC0gRGVmYXVsdDogYGBDUEFDS19QQUNLQUdFX0ZJTEVfTkFNRS08Y29tcG9uZW50PmBgCisKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQ09NTUFORF9IRElVVElMCiAKICBQYXRoIHRvIHRoZSBgYGhkaXV0aWwoMSlgYCBjb21tYW5kIHVzZWQgdG8gb3BlcmF0ZSBvbiBkaXNrIGltYWdlIGZpbGVzIG9uCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9pZncucnN0IGIvSGVscC9jcGFja19nZW4vaWZ3LnJzdAppbmRleCBmZWNjZDNkLi43NzZiYjQ2IDEwMDY0NAotLS0gYS9IZWxwL2NwYWNrX2dlbi9pZncucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2lmdy5yc3QKQEAgLTEsNzggKzEsMjggQEAKIENQYWNrIElGVyBHZW5lcmF0b3IKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIDptb2R1bGU6YENQYWNrSUZXYCBmb3IgZGV0YWlscyBvbiB0aGUgQ1BhY2tJRlcgbW9kdWxlLgorQ29uZmlndXJlIGFuZCBydW4gdGhlIFF0IEluc3RhbGxlciBGcmFtZXdvcmsgdG8gZ2VuZXJhdGUgYSBRdCBpbnN0YWxsZXIuCiAKLS4uIF9RdElGVzogaHR0cDovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9pbmRleC5odG1sCisuLiBvbmx5OjogaHRtbAogCisgIC4uIGNvbnRlbnRzOjoKIAogT3ZlcnZpZXcKIF5eXl5eXl5eCiAKLUNQYWNrIGBgSUZXYGAgZ2VuZXJhdG9yIGhlbHBzIHlvdSB0byBjcmVhdGUgb25saW5lIGFuZCBvZmZsaW5lCi1iaW5hcnkgY3Jvc3MtcGxhdGZvcm0gaW5zdGFsbGVycyB3aXRoIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlLgorVGhpcyA6bWFudWFsOmBjcGFjayBnZW5lcmF0b3IgPGNwYWNrLWdlbmVyYXRvcnMoNyk+YCBnZW5lcmF0ZXMKK2NvbmZpZ3VyYXRpb24gYW5kIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSBgUXQgSW5zdGFsbGVyIEZyYW1ld29yaworPGh0dHA6Ly9kb2MucXQuaW8vcXRpbnN0YWxsZXJmcmFtZXdvcmsvaW5kZXguaHRtbD5gXyAoUXRJRlcpLAorYW5kIHJ1bnMgUXRJRlcgdG9vbHMgdG8gZ2VuZXJhdGUgYSBRdCBpbnN0YWxsZXIuCiAKLUNQYWNrIElGVyBnZW5lcmF0b3IgcHJlcGFyZXMgcHJvamVjdCBpbnN0YWxsYXRpb24gYW5kIGdlbmVyYXRlcyBjb25maWd1cmF0aW9uCi1hbmQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgUXRJRldfIHRvb2xzLgorUXRJRlcgcHJvdmlkZXMgdG9vbHMgYW5kIHV0aWxpdGllcyB0byBjcmVhdGUgaW5zdGFsbGVycyBmb3IKK3RoZSBwbGF0Zm9ybXMgc3VwcG9ydGVkIGJ5IGBRdCA8aHR0cHM6Ly93d3cucXQuaW8+YF86IExpbnV4LAorTWljcm9zb2Z0IFdpbmRvd3MsIGFuZCBtYWNPUy4KIAotVGhlIFF0SUZXXyBwcm92aWRlcyBhIHNldCBvZiB0b29scyBhbmQgdXRpbGl0aWVzIHRvIGNyZWF0ZQotaW5zdGFsbGVycyBmb3IgdGhlIHN1cHBvcnRlZCBkZXNrdG9wIFF0IHBsYXRmb3JtczogTGludXgsIE1pY3Jvc29mdCBXaW5kb3dzLAotYW5kIG1hY09TLgotCi1Zb3Ugc2hvdWxkIGFsc28gaW5zdGFsbCBRdElGV18gdG8gdXNlIENQYWNrIGBgSUZXYGAgZ2VuZXJhdG9yLgotCi1IaW50cwotXl5eXl4KLQotR2VuZXJhbGx5LCB0aGUgQ1BhY2sgYGBJRldgYCBnZW5lcmF0b3IgYXV0b21hdGljYWxseSBmaW5kcyBRdElGV18gdG9vbHMsCi1idXQgaWYgeW91IGRvbid0IHVzZSBhIGRlZmF1bHQgcGF0aCBmb3IgaW5zdGFsbGF0aW9uIG9mIHRoZSBRdElGV18gdG9vbHMsCi10aGUgcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGluIGVpdGhlciBhIENNYWtlIG9yIGFuIGVudmlyb25tZW50IHZhcmlhYmxlOgotCi0uLiB2YXJpYWJsZTo6IENQQUNLX0lGV19ST09UCi0KLSBBbiBDTWFrZSB2YXJpYWJsZSB3aGljaCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBRdElGV18gdG9vbCBzdWl0ZS4KLQotIFRoZSB2YXJpYWJsZSB3aWxsIGJlIGNhY2hlZCBpbiB0aGUgYGBDUGFja0NvbmZpZy5jbWFrZWBgIGZpbGUgYW5kIHVzZWQgYXQKLSBDUGFjayBydW50aW1lLgotCi0uLiB2YXJpYWJsZTo6IFFUSUZXRElSCi0KLSBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBRdElGV18gdG9vbAotIHN1aXRlLgotCi0uLiBub3RlOjoKLSAgVGhlIHNwZWNpZmllZCBwYXRoIHNob3VsZCBub3QgY29udGFpbiAiYmluIiBhdCB0aGUgZW5kCi0gIChmb3IgZXhhbXBsZTogIkQ6XFxEZXZUb29sc1xcUXRJRlcyLjAuNSIpLgotCi1UaGUgOnZhcmlhYmxlOmBDUEFDS19JRldfUk9PVGAgdmFyaWFibGUgaGFzIGEgaGlnaGVyIHByaW9yaXR5IGFuZCBvdmVycmlkZXMKLXRoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBRVElGV0RJUmAgdmFyaWFibGUuCi0KLUludGVybmF0aW9uYWxpemF0aW9uCi1eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1Tb21lIHZhcmlhYmxlcyBhbmQgY29tbWFuZCBhcmd1bWVudHMgc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXphdGlvbiB2aWEKLUNNYWtlIHNjcmlwdC4gVGhpcyBpcyBhbiBvcHRpb25hbCBmZWF0dXJlLgotCi1JbnN0YWxsZXJzIGNyZWF0ZWQgYnkgUXRJRldfIHRvb2xzIGhhdmUgYnVpbHQtaW4gc3VwcG9ydCBmb3IKLWludGVybmF0aW9uYWxpemF0aW9uIGFuZCBtYW55IHBocmFzZXMgYXJlIGxvY2FsaXplZCB0byBtYW55IGxhbmd1YWdlcywKLWJ1dCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgeW91ciBjb21wb25lbnRzIGFuZCBncm91cHMKLXRoYXQgd2lsbCBiZSBkaXN0cmlidXRlZC4KLQotTG9jYWxpemF0aW9uIG9mIHRoZSBkZXNjcmlwdGlvbiBvZiB5b3VyIGNvbXBvbmVudHMgYW5kIGdyb3VwcyBpcyB1c2VmdWwgZm9yCi11c2VycyBvZiB5b3VyIGluc3RhbGxlcnMuCi0KLUEgbG9jYWxpemVkIHZhcmlhYmxlIG9yIGFyZ3VtZW50IGNhbiBjb250YWluIGEgc2luZ2xlIGRlZmF1bHQgdmFsdWUsIGFuZCBhCi1zZXQgb2YgcGFpcnMgdGhlIG5hbWUgb2YgdGhlIGxvY2FsZSBhbmQgdGhlIGxvY2FsaXplZCB2YWx1ZS4KLQotRm9yIGV4YW1wbGU6Ci0KLS4uIGNvZGUtYmxvY2s6OiBjbWFrZQotCi0gICBzZXQoTE9DQUxJWkFCTEVfVkFSSUFCTEUgIkRlZmF1bHQgdmFsdWUiCi0gICAgIGVuICJFbmdsaXNoIHZhbHVlIgotICAgICBlbl9VUyAiQW1lcmljYW4gdmFsdWUiCi0gICAgIGVuX0dCICJHcmVhdCBCcml0YWluIHZhbHVlIgotICAgICApCitUbyBtYWtlIHVzZSBvZiB0aGlzIGdlbmVyYXRvciwgUXRJRlcgbmVlZHMgdG8gYmUgaW5zdGFsbGVkLgorVGhlIDptb2R1bGU6YENQYWNrSUZXYCBtb2R1bGUgbG9va3MgZm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUKK1F0SUZXIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMsIGFuZCBkZWZpbmVzIHNldmVyYWwgY29tbWFuZHMgdG8KK2NvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZ2VuZXJhdG9yLgogCiBWYXJpYWJsZXMKIF5eXl5eXl5eXgpAQCAtMTYyLDYgKzExMiw4IEBACiAgRGVmYXVsdCB0YXJnZXQgZGlyZWN0b3J5IGZvciBpbnN0YWxsYXRpb24uCiAgQnkgZGVmYXVsdCB1c2VkCiAgIkBBcHBsaWNhdGlvbnNEaXJALzp2YXJpYWJsZTpgQ1BBQ0tfUEFDS0FHRV9JTlNUQUxMX0RJUkVDVE9SWWAiCisgKHZhcmlhYmxlcyBlbWJlZGRlZCBpbiAnQCcgYXJlIGV4cGFuZGVkIGJ5IHRoZQorIGBRdElGVyBzY3JpcHRpbmcgZW5naW5lIDxodHRwczovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9zY3JpcHRpbmcuaHRtbD5gXykuCiAKICBZb3UgY2FuIHVzZSBwcmVkZWZpbmVkIHZhcmlhYmxlcy4KIApAQCAtMTg1LDcgKzEzNyw3IEBACiAgRmlsZW5hbWUgb2YgdGhlIGdlbmVyYXRlZCBtYWludGVuYW5jZSB0b29sLgogIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBleGVjdXRhYmxlIGZpbGUgZXh0ZW5zaW9uIGlzIGFwcGVuZGVkLgogCi0gQnkgZGVmYXVsdCB1c2VkIFF0SUZXXyBkZWZhdWx0cyAoYGBtYWludGVuYW5jZXRvb2xgYCkuCisgQnkgZGVmYXVsdCB1c2VkIFF0SUZXIGRlZmF1bHRzIChgYG1haW50ZW5hbmNldG9vbGBgKS4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfUEFDS0FHRV9SRU1PVkVfVEFSR0VUX0RJUgogCkBAIC0xOTcsMTkgKzE0OSwxOSBAQAogCiAgRmlsZW5hbWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgbWFpbnRlbmFuY2UgdG9vbC4KIAotIEJ5IGRlZmF1bHQgdXNlZCBRdElGV18gZGVmYXVsdHMgKGBgbWFpbnRlbmFuY2V0b29sLmluaWBgKS4KKyBCeSBkZWZhdWx0IHVzZWQgUXRJRlcgZGVmYXVsdHMgKGBgbWFpbnRlbmFuY2V0b29sLmluaWBgKS4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfUEFDS0FHRV9BTExPV19OT05fQVNDSUlfQ0hBUkFDVEVSUwogCiAgU2V0IHRvIGBgT05gYCBpZiB0aGUgaW5zdGFsbGF0aW9uIHBhdGggY2FuIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAKLSBJcyBgYE9OYGAgZm9yIFF0SUZXXyBsZXNzIDIuMCB0b29scy4KKyBJcyBgYE9OYGAgZm9yIFF0SUZXIGxlc3MgMi4wIHRvb2xzLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19QQUNLQUdFX0FMTE9XX1NQQUNFX0lOX1BBVEgKIAogIFNldCB0byBgYE9GRmBgIGlmIHRoZSBpbnN0YWxsYXRpb24gcGF0aCBjYW5ub3QgY29udGFpbiBzcGFjZSBjaGFyYWN0ZXJzLgogCi0gSXMgYGBPTmBgIGZvciBRdElGV18gbGVzcyAyLjAgdG9vbHMuCisgSXMgYGBPTmBgIGZvciBRdElGVyBsZXNzIDIuMCB0b29scy4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfUEFDS0FHRV9DT05UUk9MX1NDUklQVAogCkBAIC0yNjYsNTcgKzIxOCwxMTMgQEAKIAogIEFkZGl0aW9uYWwgcHJlcGFyZWQgcmVwb3NpdG9yeSBkaXJzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUgYW5kCiAgcmVwYWNrIGRlcGVuZGVudCBjb21wb25lbnRzLiBUaGlzIGZlYXR1cmUgYXZhaWxhYmxlIG9ubHkKLSBzaW5jZSBRdElGV18gMy4xLgorIHNpbmNlIFF0SUZXIDMuMS4KIAotVG9vbHMKLSIiIiIiCitRdElGVyBUb29scworIiIiIiIiIiIiIiIKIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfRlJBTUVXT1JLX1ZFUlNJT04KIAotIFRoZSB2ZXJzaW9uIG9mIHVzZWQgUXRJRldfIHRvb2xzLgorIFRoZSB2ZXJzaW9uIG9mIHVzZWQgUXRJRlcgdG9vbHMuCisKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHByb3ZpZGUgdGhlIGxvY2F0aW9ucyBvZiB0aGUgUXRJRlcKK2NvbW1hbmQtbGluZSB0b29scyBhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBtb2R1bGUgOm1vZHVsZTpgQ1BhY2tJRldgLgorVGhlc2UgdmFyaWFibGVzIGFyZSBjYWNoZWQsIGFuZCBtYXkgYmUgY29uZmlndXJlZCBpZiBuZWVkZWQuCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX0JJTkFSWUNSRUFUT1JfRVhFQ1VUQUJMRQogCi0gVGhlIHBhdGggdG8gImJpbmFyeWNyZWF0b3IiIGNvbW1hbmQgbGluZSBjbGllbnQuCi0KLSBUaGlzIHZhcmlhYmxlIGlzIGNhY2hlZCBhbmQgbWF5IGJlIGNvbmZpZ3VyZWQgaWYgbmVlZGVkLgorIFRoZSBwYXRoIHRvIGBgYmluYXJ5Y3JlYXRvcmBgLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19SRVBPR0VOX0VYRUNVVEFCTEUKIAotIFRoZSBwYXRoIHRvICJyZXBvZ2VuIiBjb21tYW5kIGxpbmUgY2xpZW50LgotCi0gVGhpcyB2YXJpYWJsZSBpcyBjYWNoZWQgYW5kIG1heSBiZSBjb25maWd1cmVkIGlmIG5lZWRlZC4KKyBUaGUgcGF0aCB0byBgYHJlcG9nZW5gYC4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfSU5TVEFMTEVSQkFTRV9FWEVDVVRBQkxFCiAKLSBUaGUgcGF0aCB0byAiaW5zdGFsbGVyYmFzZSIgaW5zdGFsbGVyIGV4ZWN1dGFibGUgYmFzZS4KLQotIFRoaXMgdmFyaWFibGUgaXMgY2FjaGVkIGFuZCBtYXkgYmUgY29uZmlndXJlZCBpZiBuZWVkZWQuCisgVGhlIHBhdGggdG8gYGBpbnN0YWxsZXJiYXNlYGAuCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX0RFVlRPT0xfRVhFQ1VUQUJMRQogCi0gVGhlIHBhdGggdG8gImRldnRvb2wiIGNvbW1hbmQgbGluZSBjbGllbnQuCisgVGhlIHBhdGggdG8gYGBkZXZ0b29sYGAuCiAKLSBUaGlzIHZhcmlhYmxlIGlzIGNhY2hlZCBhbmQgbWF5IGJlIGNvbmZpZ3VyZWQgaWYgbmVlZGVkLgorSGludHMgZm9yIEZpbmRpbmcgUXRJRlcKKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKK0dlbmVyYWxseSwgdGhlIENQYWNrIGBgSUZXYGAgZ2VuZXJhdG9yIGF1dG9tYXRpY2FsbHkgZmluZHMgUXRJRlcgdG9vbHMsCitidXQgaWYgeW91IGRvbid0IHVzZSBhIGRlZmF1bHQgcGF0aCBmb3IgaW5zdGFsbGF0aW9uIG9mIHRoZSBRdElGVyB0b29scywKK3RoZSBwYXRoIG1heSBiZSBzcGVjaWZpZWQgaW4gZWl0aGVyIGEgQ01ha2Ugb3IgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU6CisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX1JPT1QKKworIEFuIENNYWtlIHZhcmlhYmxlIHdoaWNoIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIFF0SUZXIHRvb2wgc3VpdGUuCisKKyBUaGUgdmFyaWFibGUgd2lsbCBiZSBjYWNoZWQgaW4gdGhlIGBgQ1BhY2tDb25maWcuY21ha2VgYCBmaWxlIGFuZCB1c2VkIGF0CisgQ1BhY2sgcnVudGltZS4KKworLi4gdmFyaWFibGU6OiBRVElGV0RJUgorCisgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgUXRJRlcgdG9vbAorIHN1aXRlLgorCisuLiBub3RlOjoKKyAgVGhlIHNwZWNpZmllZCBwYXRoIHNob3VsZCBub3QgY29udGFpbiAiYmluIiBhdCB0aGUgZW5kCisgIChmb3IgZXhhbXBsZTogIkQ6XFxEZXZUb29sc1xcUXRJRlcyLjAuNSIpLgorCitUaGUgOnZhcmlhYmxlOmBDUEFDS19JRldfUk9PVGAgdmFyaWFibGUgaGFzIGEgaGlnaGVyIHByaW9yaXR5IGFuZCBvdmVycmlkZXMKK3RoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBRVElGV0RJUmAgdmFyaWFibGUuCisKK090aGVyIFNldHRpbmdzCiteXl5eXl5eXl5eXl5eXgogCiBPbmxpbmUgaW5zdGFsbGVyCi1eXl5eXl5eXl5eXl5eXl5eCisiIiIiIiIiIiIiIiIiIiIiCiAKLUJ5IGRlZmF1bHQgQ1BhY2sgSUZXIGdlbmVyYXRvciBtYWtlcyBvZmZsaW5lIGluc3RhbGxlci4gVGhpcyBtZWFucyB0aGF0IGFsbAotY29tcG9uZW50cyB3aWxsIGJlIHBhY2thZ2VkIGludG8gYSBiaW5hcnkgZmlsZS4KK0J5IGRlZmF1bHQsIHRoaXMgZ2VuZXJhdG9yIGdlbmVyYXRlcyBhbiAqb2ZmbGluZSBpbnN0YWxsZXIqLiBUaGlzIG1lYW5zIHRoYXQKK3RoYXQgYWxsIHBhY2thZ2VkIGZpbGVzIGFyZSBmdWxseSBjb250YWluZWQgaW4gdGhlIGluc3RhbGxlciBleGVjdXRhYmxlLgogCi1UbyBtYWtlIGEgY29tcG9uZW50IGRvd25sb2FkZWQsIHlvdSBtdXN0IHNldCB0aGUgYGBET1dOTE9BREVEYGAgb3B0aW9uIGluCi06Y29tbWFuZDpgY3BhY2tfYWRkX2NvbXBvbmVudGAuCitJbiBjb250cmFzdCwgYW4gKm9ubGluZSBpbnN0YWxsZXIqIHdpbGwgZG93bmxvYWQgc29tZSBvciBhbGwgY29tcG9uZW50cyBmcm9tCithIHJlbW90ZSBzZXJ2ZXIuCiAKLVRoZW4geW91IHdvdWxkIHVzZSB0aGUgY29tbWFuZCA6Y29tbWFuZDpgY3BhY2tfY29uZmlndXJlX2Rvd25sb2Fkc2AuCi1JZiB5b3Ugc2V0IGBgQUxMYGAgb3B0aW9uIGFsbCBjb21wb25lbnRzIHdpbGwgYmUgZG93bmxvYWRlZC4KK1RoZSBgYERPV05MT0FERURgYCBvcHRpb24gaW4gdGhlIDpjb21tYW5kOmBjcGFja19hZGRfY29tcG9uZW50YCBjb21tYW5kCitzcGVjaWZpZXMgdGhhdCBhIGNvbXBvbmVudCBpcyB0byBiZSBkb3dubG9hZGVkLiBBbHRlcm5hdGl2ZWx5LCB0aGUgYGBBTExgYAorb3B0aW9uIGluIHRoZSA6Y29tbWFuZDpgY3BhY2tfY29uZmlndXJlX2Rvd25sb2Fkc2AgY29tbWFuZCBzcGVjaWZpZXMgdGhhdAorYGFsbGAgY29tcG9uZW50cyBhcmUgdG8gYmUgYmUgZG93bmxvYWRlZC4KIAotWW91IGFsc28gY2FuIHVzZSBjb21tYW5kIDpjb21tYW5kOmBjcGFja19pZndfYWRkX3JlcG9zaXRvcnlgIGFuZAotdmFyaWFibGUgOnZhcmlhYmxlOmBDUEFDS19JRldfRE9XTkxPQURfQUxMYCBmb3IgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgorVGhlIDpjb21tYW5kOmBjcGFja19pZndfYWRkX3JlcG9zaXRvcnlgIGNvbW1hbmQgYW5kIHRoZQorOnZhcmlhYmxlOmBDUEFDS19JRldfRE9XTkxPQURfQUxMYCB2YXJpYWJsZSBhbGxvdyBmb3IgbW9yZSBzcGVjaWZpYworY29uZmlndXJhdGlvbi4KIAotQ1BhY2sgSUZXIGdlbmVyYXRvciBjcmVhdGVzICJyZXBvc2l0b3J5IiBkaXIgaW4gY3VycmVudCBiaW5hcnkgZGlyLiBZb3UKLXdvdWxkIGNvcHkgY29udGVudCBvZiB0aGlzIGRpciB0byBzcGVjaWZpZWQgYGBzaXRlYGAgKGBgdXJsYGApLgorV2hlbiB0aGVyZSBhcmUgb25saW5lIGNvbXBvbmVudHMsIENQYWNrIHdpbGwgd3JpdGUgdGhlbSB0byBhcmNoaXZlIGZpbGVzLgorVGhlIGhlbHAgcGFnZSBvZiB0aGUgOm1vZHVsZTpgQ1BhY2tDb21wb25lbnRgIG1vZHVsZSwgZXNwZWNpYWxseSB0aGUgc2VjdGlvbgorb24gdGhlIDpjb21tYW5kOmBjcGFja19jb25maWd1cmVfZG93bmxvYWRzYCBmdW5jdGlvbiwgZXhwbGFpbnMgaG93IHRvIG1ha2UKK3RoZXNlIGZpbGVzIGFjY2Vzc2libGUgZnJvbSBhIGRvd25sb2FkIFVSTC4KKworSW50ZXJuYXRpb25hbGl6YXRpb24KKyIiIiIiIiIiIiIiIiIiIiIiIiIiCisKK1NvbWUgdmFyaWFibGVzIGFuZCBjb21tYW5kIGFyZ3VtZW50cyBzdXBwb3J0IGludGVybmF0aW9uYWxpemF0aW9uIHZpYQorQ01ha2Ugc2NyaXB0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUuCisKK0luc3RhbGxlcnMgY3JlYXRlZCBieSBRdElGVyB0b29scyBoYXZlIGJ1aWx0LWluIHN1cHBvcnQgZm9yCitpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbWFueSBwaHJhc2VzIGFyZSBsb2NhbGl6ZWQgdG8gbWFueSBsYW5ndWFnZXMsCitidXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHlvdXIgY29tcG9uZW50cyBhbmQgZ3JvdXBzCit0aGF0IHdpbGwgYmUgZGlzdHJpYnV0ZWQuCisKK0xvY2FsaXphdGlvbiBvZiB0aGUgZGVzY3JpcHRpb24gb2YgeW91ciBjb21wb25lbnRzIGFuZCBncm91cHMgaXMgdXNlZnVsIGZvcgordXNlcnMgb2YgeW91ciBpbnN0YWxsZXJzLgorCitBIGxvY2FsaXplZCB2YXJpYWJsZSBvciBhcmd1bWVudCBjYW4gY29udGFpbiBhIHNpbmdsZSBkZWZhdWx0IHZhbHVlLCBhbmQgYQorc2V0IG9mIHBhaXJzIHRoZSBuYW1lIG9mIHRoZSBsb2NhbGUgYW5kIHRoZSBsb2NhbGl6ZWQgdmFsdWUuCisKK0ZvciBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgc2V0KExPQ0FMSVpBQkxFX1ZBUklBQkxFICJEZWZhdWx0IHZhbHVlIgorICAgICBlbiAiRW5nbGlzaCB2YWx1ZSIKKyAgICAgZW5fVVMgIkFtZXJpY2FuIHZhbHVlIgorICAgICBlbl9HQiAiR3JlYXQgQnJpdGFpbiB2YWx1ZSIKKyAgICAgKQogCiBTZWUgQWxzbwogXl5eXl5eXl4KQEAgLTMzNSw1ICszNDMsNSBAQAogKiBQcm9tb3RpbmcgVXBkYXRlczoKICAgaHR0cDovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9pZnctdXBkYXRlcy5odG1sCiAKLURvd25sb2FkIFF0IEluc3RhbGxlciBGcmFtZXdvcmsgZm9yIHlvdSBwbGF0Zm9ybSBmcm9tIFF0IHNpdGU6CitEb3dubG9hZCBRdCBJbnN0YWxsZXIgRnJhbWV3b3JrIGZvciB5b3VyIHBsYXRmb3JtIGZyb20gUXQgc2l0ZToKICBodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQtaW5zdGFsbGVyLWZyYW1ld29yawpkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vbnNpcy5yc3QgYi9IZWxwL2NwYWNrX2dlbi9uc2lzLnJzdAppbmRleCBjZDJhZWE2Li5hMzEwZTlmIDEwMDY0NAotLS0gYS9IZWxwL2NwYWNrX2dlbi9uc2lzLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9uc2lzLnJzdApAQCAtMTI4LDMgKzEyOCwyOCBAQAogICBzZXQoQ1BBQ0tfTlNJU19NRU5VX0xJTktTCiAgICAgICAiZG9jL2NtYWtlLUBDTWFrZV9WRVJTSU9OX01BSk9SQC5AQ01ha2VfVkVSU0lPTl9NSU5PUkAvY21ha2UuaHRtbCIKICAgICAgICJDTWFrZSBIZWxwIiAiaHR0cHM6Ly9jbWFrZS5vcmciICJDTWFrZSBXZWIgU2l0ZSIpCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfTlNJU19VTklOU1RBTExfTkFNRQorCisgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1bmluc3RhbGwgdGhlIHZlcnNpb24uCisgRGVmYXVsdCBpcyBgYFVuaW5zdGFsbGBgLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX05TSVNfV0VMQ09NRV9USVRMRQorCisgIFRoZSB0aXRsZSB0byBkaXNwbGF5IG9uIHRoZSB0b3Agb2YgdGhlIHBhZ2UgZm9yIHRoZSB3ZWxjb21lIHBhZ2UuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfTlNJU19XRUxDT01FX1RJVExFXzNMSU5FUworCisgRGlzcGxheSB0aGUgdGl0bGUgaW4gdGhlIHdlbGNvbWUgcGFnZSBvbiAzIGxpbmVzIGluc3RlYWQgb2YgMi4KKworLi4gdmFyaWFibGU6OiBDUEFDS19OU0lTX0ZJTklTSF9USVRMRQorCisgVGhlIHRpdGxlIHRvIGRpc3BsYXkgb24gdGhlIHRvcCBvZiB0aGUgcGFnZSBmb3IgdGhlIGZpbmlzaCBwYWdlLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX05TSVNfRklOSVNIX1RJVExFXzNMSU5FUworCisgRGlzcGxheSB0aGUgdGl0bGUgaW4gdGhlIGZpbmlzaCBwYWdlIG9uIDMgbGluZXMgaW5zdGVhZCBvZiAyLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX05TSVNfTVVJX0hFQURFUklNQUdFCisKKyBUaGUgaW1hZ2UgdG8gZGlzcGxheSBvbiB0aGUgaGVhZGVyIG9mIGluc3RhbGxlcnMgcGFnZXMuCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9wYWNrYWdlbWFrZXIucnN0IGIvSGVscC9jcGFja19nZW4vcGFja2FnZW1ha2VyLnJzdAppbmRleCBlOTQ2NGI3Li5jMmE0NTBlIDEwMDY0NAotLS0gYS9IZWxwL2NwYWNrX2dlbi9wYWNrYWdlbWFrZXIucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL3BhY2thZ2VtYWtlci5yc3QKQEAgLTMsNiArMywxMSBAQAogCiBQYWNrYWdlTWFrZXIgQ1BhY2sgZ2VuZXJhdG9yIChtYWNPUykuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjE3CisKKyAgWGNvZGUgbm8gbG9uZ2VyIGRpc3RyaWJ1dGVzIHRoZSBQYWNrYWdlTWFrZXIgdG9vbHMuCisgIFRoaXMgQ1BhY2sgZ2VuZXJhdG9yIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIENQYWNrLgorCiBWYXJpYWJsZXMgc3BlY2lmaWMgdG8gQ1BhY2sgUGFja2FnZU1ha2VyIGdlbmVyYXRvcgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMTUsOSArMjAsNjAgQEAKICBjb21wYXRpYmxlIHdpdGguIERpZmZlcmVudCB2ZXJzaW9ucyBvZiBtYWNPUyBzdXBwb3J0IGRpZmZlcmVudAogIGZlYXR1cmVzLiBGb3IgZXhhbXBsZSwgQ1BhY2sgY2FuIG9ubHkgYnVpbGQgY29tcG9uZW50LWJhc2VkIGluc3RhbGxlcnMgZm9yCiAgbWFjT1MgMTAuNCBvciBuZXdlciwgYW5kIGNhbiBvbmx5IGJ1aWxkIGluc3RhbGxlcnMgdGhhdCBkb3dubG9hZAotIGNvbXBvbmVudCBzb24tdGhlLWZseSBmb3IgbWFjT1MgMTAuNSBvciBuZXdlci4gSWYgbGVmdCBibGFuaywgdGhpcyB2YWx1ZQorIGNvbXBvbmVudHMgb24tdGhlLWZseSBmb3IgbWFjT1MgMTAuNSBvciBuZXdlci4gSWYgbGVmdCBibGFuaywgdGhpcyB2YWx1ZQogIHdpbGwgYmUgc2V0IHRvIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgbWFjT1MgdGhhdCBzdXBwb3J0cyB0aGUgcmVxdWVzdGVkCiAgZmVhdHVyZXMuIFNldCB0aGlzIHZhcmlhYmxlIHRvIHNvbWUgdmFsdWUgKGUuZy4sIDEwLjQpIG9ubHkgaWYgeW91IHdhbnQgdG8KICBndWFyYW50ZWUgdGhhdCB5b3VyIGluc3RhbGxlciB3aWxsIHdvcmsgb24gdGhhdCB2ZXJzaW9uIG9mIG1hY09TLCBhbmQKICBkb24ndCBtaW5kIG1pc3NpbmcgZXh0cmEgZmVhdHVyZXMgYXZhaWxhYmxlIGluIHRoZSBpbnN0YWxsZXIgc2hpcHBpbmcgd2l0aAogIGxhdGVyIHZlcnNpb25zIG9mIG1hY09TLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5ECisKKyBBZGRzIGEgYmFja2dyb3VuZCB0byBEaXN0cmlidGlvbiBYTUwgaWYgc3BlY2lmaWVkLiBUaGUgdmFsdWUgY29udGFpbnMgdGhlCisgcGF0aCB0byBpbWFnZSBpbiBgYFJlc291cmNlc2BgIGRpcmVjdG9yeS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QQUNLQUdFTUFLRVJfQkFDS0dST1VORF9BTElHTk1FTlQKKworIEFkZHMgYW4gYGBhbGlnbm1lbnRgYCBhdHRyaWJ1dGUgdG8gdGhlIGJhY2tncm91bmQgaW4gRGlzdHJpYnV0aW9uIFhNTC4KKyBSZWZlciB0byBBcHBsZSBkb2N1bWVudGF0aW9uIGZvciB2YWxpZCB2YWx1ZXMuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfU0NBTElORworCisgQWRkcyBhIGBgc2NhbGluZ2BgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFJlZmVyIHRvIEFwcGxlIGRvY3VtZW50YXRpb24gZm9yIHZhbGlkIHZhbHVlcy4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QQUNLQUdFTUFLRVJfQkFDS0dST1VORF9NSU1FX1RZUEUKKworIEFkZHMgYSBgYG1pbWUtdHlwZWBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFRoZSBvcHRpb24gY29udGFpbnMgTUlNRSB0eXBlIG9mIGFuIGltYWdlLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX1VUSQorCisgQWRkcyBhbiBgYHV0aWBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFRoZSBvcHRpb24gY29udGFpbnMgVVRJIHR5cGUgb2YgYW4gaW1hZ2UuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfREFSS0FRVUEKKworIEFkZHMgYSBiYWNrZ3JvdW5kIGZvciB0aGUgRGFyayBBcXVhIHRoZW1lIHRvIERpc3RyaWJ1dGlvbiBYTUwgaWYKKyBzcGVjaWZpZWQuIFRoZSB2YWx1ZSBjb250YWlucyB0aGUgcGF0aCB0byBpbWFnZSBpbiBgYFJlc291cmNlc2BgCisgZGlyZWN0b3J5LgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX0RBUktBUVVBX0FMSUdOTUVOVAorCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX0FMSUdOTUVOVGAgb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfREFSS0FRVUFfU0NBTElORworCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX1NDQUxJTkdgIG9wdGlvbiwKKyBidXQgZm9yIHRoZSBkYXJrIHRoZW1lLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX0RBUktBUVVBX01JTUVfVFlQRQorCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX01JTUVfVFlQRWAgb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfREFSS0FRVUFfVVRJCisKKyBEb2VzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfVVRJYCBvcHRpb24sCisgYnV0IGZvciB0aGUgZGFyayB0aGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL3Byb2R1Y3RidWlsZC5yc3QgYi9IZWxwL2NwYWNrX2dlbi9wcm9kdWN0YnVpbGQucnN0CmluZGV4IGQyMmZjZDQuLjgyYjc5YWUgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL3Byb2R1Y3RidWlsZC5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vcHJvZHVjdGJ1aWxkLnJzdApAQCAtNTgsNyArNTgsNiBAQAogIGNvbXBvbmVudCBuYW1lLiAgTm8gYGBwb3N0aW5zdGFsbGBgIHNjcmlwdCBpcyBhZGRlZCBpZiB0aGlzIHZhcmlhYmxlIGlzIG5vdAogIGRlZmluZWQgZm9yIGEgZ2l2ZW4gY29tcG9uZW50LgogCi0KIC4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX1JFU09VUkNFU19ESVIKIAogIElmIHNwZWNpZmllZCB0aGUgcHJvZHVjdGJ1aWxkIGdlbmVyYXRvciBjb3BpZXMgZmlsZXMgZnJvbSB0aGlzIGRpcmVjdG9yeQpAQCAtNjYsMyArNjUsNTQgQEAKICBiZWZvcmUgdGhlIDp2YXJpYWJsZTpgQ1BBQ0tfUkVTT1VSQ0VfRklMRV9XRUxDT01FYCwKICA6dmFyaWFibGU6YENQQUNLX1JFU09VUkNFX0ZJTEVfUkVBRE1FYCwgYW5kCiAgOnZhcmlhYmxlOmBDUEFDS19SRVNPVVJDRV9GSUxFX0xJQ0VOU0VgIGZpbGVzIGFyZSBjb3BpZWQuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkQKKworIEFkZHMgYSBiYWNrZ3JvdW5kIHRvIERpc3RyaWJ0aW9uIFhNTCBpZiBzcGVjaWZpZWQuIFRoZSB2YWx1ZSBjb250YWlucyB0aGUKKyBwYXRoIHRvIGltYWdlIGluIGBgUmVzb3VyY2VzYGAgZGlyZWN0b3J5LgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX0FMSUdOTUVOVAorCisgQWRkcyBhbiBgYGFsaWdubWVudGBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFJlZmVyIHRvIEFwcGxlIGRvY3VtZW50YXRpb24gZm9yIHZhbGlkIHZhbHVlcy4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9TQ0FMSU5HCisKKyBBZGRzIGEgYGBzY2FsaW5nYGAgYXR0cmlidXRlIHRvIHRoZSBiYWNrZ3JvdW5kIGluIERpc3RyaWJ1dGlvbiBYTUwuCisgUmVmZXIgdG8gQXBwbGUgZG9jdW1lbnRhdGlvbiBmb3IgdmFsaWQgdmFsdWVzLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX01JTUVfVFlQRQorCisgQWRkcyBhIGBgbWltZS10eXBlYGAgYXR0cmlidXRlIHRvIHRoZSBiYWNrZ3JvdW5kIGluIERpc3RyaWJ1dGlvbiBYTUwuCisgVGhlIG9wdGlvbiBjb250YWlucyBNSU1FIHR5cGUgb2YgYW4gaW1hZ2UuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfVVRJCisKKyBBZGRzIGFuIGBgdXRpYGAgYXR0cmlidXRlIHRvIHRoZSBiYWNrZ3JvdW5kIGluIERpc3RyaWJ1dGlvbiBYTUwuCisgVGhlIG9wdGlvbiBjb250YWlucyBVVEkgdHlwZSBvZiBhbiBpbWFnZS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9EQVJLQVFVQQorCisgQWRkcyBhIGJhY2tncm91bmQgZm9yIHRoZSBEYXJrIEFxdWEgdGhlbWUgdG8gRGlzdHJpYnV0aW9uIFhNTCBpZgorIHNwZWNpZmllZC4gVGhlIHZhbHVlIGNvbnRhaW5zIHRoZSBwYXRoIHRvIGltYWdlIGluIGBgUmVzb3VyY2VzYGAKKyBkaXJlY3RvcnkuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfREFSS0FRVUFfQUxJR05NRU5UCisKKyBEb2VzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfQUxJR05NRU5UYCBvcHRpb24sCisgYnV0IGZvciB0aGUgZGFyayB0aGVtZS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9EQVJLQVFVQV9TQ0FMSU5HCisKKyBEb2VzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfU0NBTElOR2Agb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfREFSS0FRVUFfTUlNRV9UWVBFCisKKyBEb2VzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfTUlNRV9UWVBFYCBvcHRpb24sCisgYnV0IGZvciB0aGUgZGFyayB0aGVtZS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9EQVJLQVFVQV9VVEkKKworIERvZXMgdGhlIHNhbWUgYXMgOnZhcmlhYmxlOmBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9VVElgIG9wdGlvbiwKKyBidXQgZm9yIHRoZSBkYXJrIHRoZW1lLgpkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vcnBtLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL3JwbS5yc3QKaW5kZXggMjY5M2M3Yi4uNjZkNTQ2NCAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vcnBtLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9ycG0ucnN0CkBAIC00NzMsMzggKzQ3Myw0MiBAQAogCiAuLiB2YXJpYWJsZTo6IENQQUNLX1JQTV9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICAgICAgICAgICBDUEFDS19SUE1fUFJFX1VOSU5TVEFMTF9TQ1JJUFRfRklMRQorICAgICAgICAgICAgICBDUEFDS19SUE1fUFJFX1RSQU5TX1NDUklQVF9GSUxFCiAKLSBQYXRoIHRvIGZpbGUgY29udGFpbmluZyBwcmUgKHVuKWluc3RhbGwgc2NyaXB0LgorIFBhdGggdG8gZmlsZSBjb250YWluaW5nIHByZSBpbnN0YWxsL3VuaW5zdGFsbC90cmFuc2FjdGlvbiBzY3JpcHQuCiAKICAqIE1hbmRhdG9yeSA6IE5PCiAgKiBEZWZhdWx0ICAgOiAtCiAKLSBNYXkgYmUgdXNlZCB0byBlbWJlZCBhIHByZSAodW4paW5zdGFsbGF0aW9uIHNjcmlwdCBpbiB0aGUgc3BlYyBmaWxlLgorIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcHJlIGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbi90cmFuc2FjdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KICBUaGUgcmVmZXJyZWQgc2NyaXB0IGZpbGUgKG9yIGJvdGgpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKICBwdXQgYWZ0ZXIgdGhlIGBgJXByZWBgIG9yIGBgJXByZXVuYGAgc2VjdGlvbgotIElmIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX0NPTVBPTkVOVF9JTlNUQUxMYCBpcyBzZXQgdG8gT04gdGhlICh1bilpbnN0YWxsCisgSWYgOnZhcmlhYmxlOmBDUEFDS19SUE1fQ09NUE9ORU5UX0lOU1RBTExgIGlzIHNldCB0byBPTiB0aGUgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24KICBzY3JpcHQgZm9yIGVhY2ggY29tcG9uZW50IGNhbiBiZSBvdmVycmlkZGVuIHdpdGgKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRWBgIGFuZAotIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEVgYC4KKyBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRWBgLAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEVgYCwgYW5kCisgYGBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX1RSQU5TX1NDUklQVF9GSUxFYGAKICBPbmUgbWF5IHZlcmlmeSB3aGljaCBzY3JpcHRsZXQgaGFzIGJlZW4gaW5jbHVkZWQgd2l0aDo6CiAKICAgcnBtIC1xcCAtLXNjcmlwdHMgIHBhY2thZ2UucnBtCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfUlBNX1BPU1RfSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICAgICAgICAgICBDUEFDS19SUE1fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEUKKyAgICAgICAgICAgICAgQ1BBQ0tfUlBNX1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUKIAotIFBhdGggdG8gZmlsZSBjb250YWluaW5nIHBvc3QgKHVuKWluc3RhbGwgc2NyaXB0LgorIFBhdGggdG8gZmlsZSBjb250YWluaW5nIHBvc3QgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24gc2NyaXB0LgogCiAgKiBNYW5kYXRvcnkgOiBOTwogICogRGVmYXVsdCAgIDogLQogCi0gTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0ICh1bilpbnN0YWxsYXRpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCisgTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0IGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbi90cmFuc2FjdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KICBUaGUgcmVmZXJyZWQgc2NyaXB0IGZpbGUgKG9yIGJvdGgpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKICBwdXQgYWZ0ZXIgdGhlIGBgJXBvc3RgYCBvciBgYCVwb3N0dW5gYCBzZWN0aW9uLgotIElmIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX0NPTVBPTkVOVF9JTlNUQUxMYCBpcyBzZXQgdG8gT04gdGhlICh1bilpbnN0YWxsCisgSWYgOnZhcmlhYmxlOmBDUEFDS19SUE1fQ09NUE9ORU5UX0lOU1RBTExgIGlzIHNldCB0byBPTiB0aGUgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24KICBzY3JpcHQgZm9yIGVhY2ggY29tcG9uZW50IGNhbiBiZSBvdmVycmlkZGVuIHdpdGgKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEVgYCBhbmQKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1VOSU5TVEFMTF9TQ1JJUFRfRklMRWBgLgorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfSU5TVEFMTF9TQ1JJUFRfRklMRWBgLAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFYGAsIGFuZAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEVgYAogIE9uZSBtYXkgdmVyaWZ5IHdoaWNoIHNjcmlwdGxldCBoYXMgYmVlbiBpbmNsdWRlZCB3aXRoOjoKIAogICBycG0gLXFwIC0tc2NyaXB0cyAgcGFja2FnZS5ycG0KZGlmZiAtLWdpdCBhL0hlbHAvZGV2L21haW50LnJzdCBiL0hlbHAvZGV2L21haW50LnJzdAppbmRleCA0NGUyMjczLi5hMWMxYTZmIDEwMDY0NAotLS0gYS9IZWxwL2Rldi9tYWludC5yc3QKKysrIGIvSGVscC9kZXYvbWFpbnQucnN0CkBAIC0xNCw2ICsxNCwxMSBAQAogVGhlIGBDTWFrZSBSZXZpZXcgUHJvY2Vzc2BfIHJlcXVpcmVzIGEgbWFpbnRhaW5lciB0byBpc3N1ZSB0aGUgYGBEbzogbWVyZ2VgYAogY29tbWFuZCB0byBpbnRlZ3JhdGUgYSBtZXJnZSByZXF1ZXN0LiAgUGxlYXNlIGNoZWNrIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmc6CiAKKyogSWYgdGhlIE1SIHNvdXJjZSBicmFuY2ggKG9yIHBhcnQgb2YgaXQpIHNob3VsZCBiZSBiYWNrcG9ydGVkCisgIHRvIHRoZSBgYHJlbGVhc2VgYCBicmFuY2ggKGFuZCBpcyBhbHJlYWR5IGJhc2VkIG9uIGEgY29tbWl0CisgIGNvbnRhaW5lZCBpbiB0aGUgYGByZWxlYXNlYGAgYnJhbmNoKSwgYWRkIGEgYGBCYWNrcG9ydDogcmVsZWFzZWBgIG9yCisgIGBgQmFja3BvcnQ6IHJlbGVhc2U6PGNvbW1pdC1pc2g+YGAgdHJhaWxpbmcgbGluZSB0byB0aGUgTVIgZGVzY3JpcHRpb24uCisKICogSWYgdGhlIE1SIHNvdXJjZSBicmFuY2ggaXMgbm90IG5hbWVkIHdlbGwgZm9yIHRoZSBjaGFuZ2UgaXQgbWFrZXMKICAgKGUuZy4gaXQgaXMganVzdCBgYG1hc3RlcmBgIG9yIHRoZSBwYXRjaCBjaGFuZ2VkIGR1cmluZyByZXZpZXcpLAogICBhZGQgYSBgYFRvcGljLXJlbmFtZTogPHRvcGljPmBgIHRyYWlsaW5nIGxpbmUgdG8gdGhlIE1SIGRlc2NyaXB0aW9uCkBAIC0zOCw5ICs0MywxMCBAQAogICBvZiB2YXJpb3VzIG5pZ2h0bHkgYnVpbGRlcnMuKQogCiAqIEVuc3VyZSB0aGF0IHRoZSBNUiB0YXJnZXRzIHRoZSBgYG1hc3RlcmBgIGJyYW5jaC4gIEEgTVIgaW50ZW5kZWQgZm9yCi0gIHRoZSBgYHJlbGVhc2VgYCBicmFuY2ggc2hvdWxkIGJlIGJhc2VkIG9uIGBgcmVsZWFzZWBgIGJ1dCBzdGlsbCBtZXJnZWQKLSAgdG8gYGBtYXN0ZXJgYCBmaXJzdCAodmlhIGBgRG86IG1lcmdlYGApLiAgQSBtYWludGFpbmVyIG1heSB0aGVuIG1lcmdlCi0gIHRoZSBNUiB0b3BpYyB0byBgYHJlbGVhc2VgYCBtYW51YWxseS4KKyAgdGhlIGBgcmVsZWFzZWBgIGJyYW5jaCBzaG91bGQgYmUgYmFzZWQgb24gYGByZWxlYXNlYGAgYnV0IHN0aWxsIHRhcmdldAorICBgYG1hc3RlcmBgLiAgVXNlIHRoZSBhYm92ZS1tZW50aW9uZWQgYGBCYWNrcG9ydDogcmVsZWFzZWBgIGxpbmUgdG8gdGVsbAorICBgYERvOiBtZXJnZWBgIHRvIG1lcmdlIHRvIGJvdGguICBJZiBhIE1SIGlzIG1lcmdlZCB3aXRob3V0IHRoZSBiYWNrcG9ydAorICBsaW5lLCBhIG1haW50YWluZXIgbWF5IHN0aWxsIG1lcmdlIHRoZSBNUiB0b3BpYyB0byBgYHJlbGVhc2VgYCBtYW51YWxseS4KIAogTWFpbnRhaW4gQ3VycmVudCBSZWxlYXNlCiA9PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTUxLDYgKzU3LDEyIEBACiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgcmVsZWFzZSBpbiB0aGUgZm9ybSBgYCRtYWpvci4kbWlub3JgYC4gIEl0IGlzIGFsd2F5cwogbWVyZ2VkIGludG8gYGBtYXN0ZXJgYCBiZWZvcmUgcHVibGlzaGluZy4KIAorVG8gbWVyZ2UgYW4gb3BlbiBNUiB0byB0aGUgYGByZWxlYXNlYGAgYnJhbmNoLCBlZGl0IGl0cyBkZXNjcmlwdGlvbiB0bwordXNlIHRoZSBgYEJhY2twb3J0OiByZWxlYXNlYGAgbGluZSBtZW50aW9uZWQgYWJvdmUgYW5kIHRoZW4gYGBEbzogbWVyZ2VgYAorbm9ybWFsbHkuICBUbyB1cGRhdGUgdGhlIGBgcmVsZWFzZWBgIGJyYW5jaCBtYW51YWxseSAoZS5nLiB0byBtZXJnZSBhCitgYCR0b3BpY2BgIGJyYW5jaCB0aGF0IHdhcyBtZXJnZWQgd2l0aG91dCB0aGUgYmFja3BvcnQgbGluZSksIHVzZSB0aGUKK2ZvbGxvd2luZyBwcm9jZWR1cmUuCisKIEJlZm9yZSBtZXJnaW5nIGEgYGAkdG9waWNgYCBicmFuY2ggaW50byBgYHJlbGVhc2VgYCwgdmVyaWZ5IHRoYXQgdGhlCiBgYCR0b3BpY2BgIGJyYW5jaCBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZCB0byBgYG1hc3RlcmBgIHZpYSB0aGUgdXN1YWwKIGBgRG86IG1lcmdlYGAgcHJvY2Vzcy4gIFRoZW4sIHRvIG1lcmdlIHRoZSBgYCR0b3BpY2BgIGJyYW5jaCBpbnRvCmRpZmYgLS1naXQgYS9IZWxwL2Rldi9yZXZpZXcucnN0IGIvSGVscC9kZXYvcmV2aWV3LnJzdAppbmRleCBjYmRlNmZlLi44ZWM0MWQyIDEwMDY0NAotLS0gYS9IZWxwL2Rldi9yZXZpZXcucnN0CisrKyBiL0hlbHAvZGV2L3Jldmlldy5yc3QKQEAgLTUzLDYgKzUzLDEwIEBACiAgIHRvIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkuICBTZWUgdGhlIGBFeHBpcmVgXyBzdGVwLiAgVXNlIHRoaXMgbGFiZWwKICAgYWZ0ZXIgY2xvc2luZyBhIE1SIGZvciB0aGlzIHJlYXNvbi4KIAorKiBgYHdvcmtmbG93OmV4dGVybmFsLWRpc2N1c3Npb25gYCBpbmRpY2F0ZXMgdGhhdCB0aGUgTVIgaGFzIGJlZW4gY2xvc2VkCisgIHBlbmRpbmcgZGlzY3Vzc2lvbiBlbHNld2hlcmUuICBTZWUgdGhlIGBFeHRlcm5hbCBEaXNjdXNzaW9uYF8gc3RlcC4KKyAgVXNlIHRoaXMgbGFiZWwgYWZ0ZXIgY2xvc2luZyBhIE1SIGZvciB0aGlzIHJlYXNvbi4KKwogVGhlIHdvcmtmbG93IHN0YXR1cyBsYWJlbHMgYXJlIGludGVuZGVkIHRvIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwKIHNvIHBsZWFzZSByZW1vdmUgYW55IGV4aXN0aW5nIHdvcmtmbG93IGxhYmVsIHdoZW4gYWRkaW5nIG9uZS4KIApAQCAtNDI5LDYgKzQzMywyMSBAQAogaW4gdGhlIE1SIGRlc2NyaXB0aW9uICh0aGUgZm9sbG93aW5nIGhhdmUgbm8gZWZmZWN0IGlmIHVzZWQgaW4gYSBNUgogY29tbWVudCBpbnN0ZWFkKToKIAorKiBgYEJhY2twb3J0OiByZWxlYXNlWzo8Y29tbWl0LWlzaD5dYGA6IG1lcmdlIHRoZSB0b3BpYyBicmFuY2ggaW50bworICB0aGUgYGByZWxlYXNlYGAgYnJhbmNoIHRvIGJhY2twb3J0IHRoZSBjaGFuZ2UuICBUaGlzIGlzIGFsbG93ZWQKKyAgb25seSBpZiB0aGUgdG9waWMgYnJhbmNoIGlzIGJhc2VkIG9uIGEgY29tbWl0IGluIGBgcmVsZWFzZWBgIGFscmVhZHkuCisgIElmIG9ubHkgcGFydCBvZiB0aGUgdG9waWMgYnJhbmNoIHNob3VsZCBiZSBiYWNrcG9ydGVkLCBzcGVjaWZ5IGl0IGFzCisgIGBgOjxjb21taXQtaXNoPmBgLiAgVGhlIGBgPGNvbW1pdC1pc2g+YGAgbWF5IHVzZSBgZ2l0IHJldi1wYXJzZWBfCisgIHN5bnRheCB0byByZWZlcmVuY2UgY29tbWl0cyByZWxhdGl2ZSB0byB0aGUgdG9waWMgYGBIRUFEYGAuCisgIFNlZSBhZGRpdGlvbmFsIGBiYWNrcG9ydCBpbnN0cnVjdGlvbnNgXyBmb3IgZGV0YWlscy4KKyAgRm9yIGV4YW1wbGU6CisKKyAgYGBCYWNrcG9ydDogcmVsZWFzZWBgCisgICAgTWVyZ2UgdGhlIHRvcGljIGJyYW5jaCBoZWFkIGludG8gYm90aCBgYHJlbGVhc2VgYCBhbmQgYGBtYXN0ZXJgYC4KKyAgYGBCYWNrcG9ydDogcmVsZWFzZTpIRUFEfjFeMmBgCisgICAgTWVyZ2UgdGhlIHRvcGljIGJyYW5jaCBoZWFkJ3MgcGFyZW50J3Mgc2Vjb25kIHBhcmVudCBjb21taXQgaW50bworICAgIHRoZSBgYHJlbGVhc2VgYCBicmFuY2guICBNZXJnZSB0aGUgdG9waWMgYnJhbmNoIGhlYWQgdG8gYGBtYXN0ZXJgYC4KKwogKiBgYFRvcGljLXJlbmFtZTogPHRvcGljPmBgOiBzdWJzdGl0dXRlIGBgPHRvcGljPmBgIGZvciB0aGUgbmFtZSBvZgogICB0aGUgTVIgdG9waWMgYnJhbmNoIGluIHRoZSBjb25zdHJ1Y3RlZCBtZXJnZSBjb21taXQgbWVzc2FnZS4KICAgSXQgaXMgYWxzbyB1c2VkIGluIG1lcmdlIGNvbW1pdHMgY29uc3RydWN0ZWQgYnkgYGBEbzogc3RhZ2VgYC4KQEAgLTQzNiw2ICs0NTUsOCBAQAogICByZW5hbWUgc2V0IGluIHRoZSBNUiBkZXNjcmlwdGlvbi4KIAogLi4gX2BDTWFrZSBHaXRMYWIgUHJvamVjdCBNYXN0ZXJzYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2Uvc2V0dGluZ3MvbWVtYmVycworLi4gX2BiYWNrcG9ydCBpbnN0cnVjdGlvbnNgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS91dGlscy9naXQtd29ya2Zsb3cvd2lraXMvQmFja3BvcnQtdG9waWNzCisuLiBfYGdpdCByZXYtcGFyc2VgOiBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LXJldi1wYXJzZQogCiBDbG9zZQogLS0tLS0KZGlmZiAtLWdpdCBhL0hlbHAvZGV2L3NvdXJjZS5yc3QgYi9IZWxwL2Rldi9zb3VyY2UucnN0CmluZGV4IDBmNzQ4OGIuLjUzNzEzNTMgMTAwNjQ0Ci0tLSBhL0hlbHAvZGV2L3NvdXJjZS5yc3QKKysrIGIvSGVscC9kZXYvc291cmNlLnJzdApAQCAtMjMsMTIgKzIzLDE0MiBAQAogQysrIFN1YnNldCBQZXJtaXR0ZWQKID09PT09PT09PT09PT09PT09PT09CiAKLUNNYWtlIHJlcXVpcmVzIGNvbXBpbGluZyBhcyBDKysxMSBvciBhYm92ZS4gIEhvd2V2ZXIsIGluIG9yZGVyIHRvIHN1cHBvcnQKLWJ1aWxkaW5nIG9uIG9sZGVyIHRvb2xjaGFpbnMgc29tZSBjb25zdHJ1Y3RzIG5lZWQgdG8gYmUgaGFuZGxlZCB3aXRoIGNhcmU6CitDTWFrZSByZXF1aXJlcyBjb21waWxpbmcgYXMgQysrMTEgaW4gb3JkZXIgdG8gc3VwcG9ydCBidWlsZGluZyBvbiBvbGRlcgordG9vbGNoYWlucy4gIEhvd2V2ZXIsIHRvIGZhY2lsaXRhdGUgZGV2ZWxvcG1lbnQsIHNvbWUgc3RhbmRhcmQgbGlicmFyeQorZmVhdHVyZXMgZnJvbSBtb3JlIHJlY2VudCBDKysgc3RhbmRhcmRzIGFyZSBzdXBwb3J0ZWQgdGhyb3VnaCBhIGNvbXBhdGliaWxpdHkKK2xheWVyLiAgVGhlc2UgZmVhdHVyZXMgYXJlIGRlZmluZWQgdW5kZXIgdGhlIG5hbWVzcGFjZSBgYGNtYGAgYW5kIGhlYWRlcnMKK2FyZSBhY2Nlc3NpYmxlIHVuZGVyIHRoZSBgYGNtL2BgIGRpcmVjdG9yeS4gIFRoZSBoZWFkZXJzIHVuZGVyIGBgY20vYGAgY2FuCitiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSBzdGFuZGFyZCBvbmVzIHdoZW4gZXh0ZW5kZWQgZmVhdHVyZXMgYXJlIG5lZWRlZC4KK0ZvciBleGFtcGxlIGBgPGNtL21lbW9yeT5gYCBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBgYDxtZW1vcnk+YGAuCiAKLSogRG8gbm90IHVzZSBgYHN0ZDo6YXV0b19wdHJgYC4KK0F2YWlsYWJsZSBmZWF0dXJlcyBhcmU6CiAKLSAgVGhlIGBgc3RkOjphdXRvX3B0cmBgIHRlbXBsYXRlIGlzIGRlcHJlY2F0ZWQgaW4gQysrMTEuIFVzZSBgYHN0ZDo6dW5pcXVlX3B0cmBgLgorKiBGcm9tIGBgQysrMTRgYDoKKworICAqIGBgPGNtL2l0ZXJhdG9yPmBgOgorICAgIGBgY206Om1ha2VfcmV2ZXJzZV9pdGVyYXRvcmBgLCBgYGNtOjpjYmVnaW5gYCwgYGBjbTo6Y2VuZGBgLAorICAgIGBgY206OnJiZWdpbmBgLCBgYGNtOjpyZW5kYGAsIGBgY206OmNyYmVnaW5gYCwgYGBjbTo6Y3JlbmRgYAorCisgICogYGA8Y20vbWVtb3J5PmBgOgorICAgIGBgY206Om1ha2VfdW5pcXVlYGAKKworICAqIGBgPGNtL3NoYXJlZF9tdXRleD5gYDoKKyAgICBgYGNtOjpzaGFyZWRfbG9ja2BgCisKKyAgKiBgYDxjbS90eXBlX3RyYWl0cz5gYDoKKyAgICBgYGNtOjplbmFibGVfaWZfdGBgCisKKyogRnJvbSBgYEMrKzE3YGA6CisKKyAgKiBgYDxjbS9hbGdvcml0aG0+YGA6CisgICAgYGBjbTo6Y2xhbXBgYAorCisgICogYGA8Y20vaXRlcmF0b3I+YGA6CisgICAgYGBjbTo6c2l6ZWBgLCBgYGNtOjplbXB0eWBgLCBgYGNtOjpkYXRhYGAKKworICAqIGBgPGNtL29wdGlvbmFsPmBgOgorICAgIGBgY206Om51bGxvcHRfdGBgLCBgYGNtOjpudWxsb3B0YGAsIGBgY206Om9wdGlvbmFsYGAsCisgICAgYGBjbTo6bWFrZV9vcHRpb25hbGBgLCBgYGNtOjpiYWRfb3B0aW9uYWxfYWNjZXNzYGAKKworICAqIGBgPGNtL3NoYXJlZF9tdXRleD5gYDoKKyAgICBgYGNtOjpzaGFyZWRfbXV0ZXhgYAorCisgICogYGA8Y20vc3RyaW5nX3ZpZXc+YGA6CisgICAgYGBjbTo6c3RyaW5nX3ZpZXdgYAorCisgICogYGA8Y20vdHlwZV90cmFpdHM+YGA6CisgICAgYGBjbTo6Ym9vbF9jb25zdGFudGBgLCBgYGNtOjppbnZva2VfcmVzdWx0X3RgYCwgYGBjbTo6aW52b2tlX3Jlc3VsdGBgLAorICAgIGBgY206OnZvaWRfdGBgCisKKyAgKiBgYDxjbS91dGlsaXR5PmBgOgorICAgIGBgY206OmluX3BsYWNlX3RgYCwgYGBjbTo6aW5fcGxhY2VgYAorCisqIEZyb20gYGBDKysyMGBgOgorCisgICogYGA8Y20vZGVxdWU+YGA6CisgICAgYGBjbTo6ZXJhc2VgYCwgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vbGlzdD5gYDoKKyAgICBgYGNtOjplcmFzZWBgLCBgYGNtOjplcmFzZV9pZmBgCisKKyAgKiBgYDxjbS9tYXA+YGAgOgorICAgIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL3NldD5gYCA6CisgICAgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vc3RyaW5nPmBgOgorICAgIGBgY206OmVyYXNlYGAsIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL3Vub3JkZXJlZF9tYXA+YGA6CisgICAgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vdW5vcmRlcmVkX3NldD5gYDoKKyAgICBgYGNtOjplcmFzZV9pZmBgCisKKyAgKiBgYDxjbS92ZWN0b3I+YGA6CisgICAgYGBjbTo6ZXJhc2VgYCwgYGBjbTo6ZXJhc2VfaWZgYAorCitBZGRpdGlvbmFsbHksIHNvbWUgdXNlZnVsIG5vbi1zdGFuZGFyZCBleHRlbnNpb25zIHRvIHRoZSBDKysgc3RhbmRhcmQgbGlicmFyeQorYXJlIGF2YWlsYWJsZSBpbiBoZWFkZXJzIHVuZGVyIHRoZSBkaXJlY3RvcnkgYGBjbWV4dC9gYCBpbiBuYW1lc3BhY2UgYGBjbWBgLgorVGhlc2UgYXJlOgorCisqIGBgPGNtZXh0L2FsZ29yaXRobT5gYDoKKworICAqIGBgY206OmFwcGVuZGBgOgorICAgIEFwcGVuZCBlbGVtZW50cyB0byBhIHNlcXVlbnRpYWwgY29udGFpbmVyLgorCisqIGBgPGNtZXh0L2l0ZXJhdG9yPmBgOgorCisgICogYGBjbTo6aXNfdGVyYXRvcmBgOgorICAgIENoZWNrcyBpZiBhIHR5cGUgaXMgYW4gaXRlcmF0b3IgdHlwZS4KKworICAqIGBgY206OmlzX2lucHV0X2l0ZXJhdG9yYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCBpdGVyYXRvciB0eXBlLgorCisgICogYGBjbTo6aXNfcmFuZ2VgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGEgcmFuZ2UgdHlwZTogbXVzdCBoYXZlIG1ldGhvZHMgYGBiZWdpbigpYGAgYW5kCisgICAgYGBlbmQoKWBgIHJldHVybmluZyBhbiBpdGVyYXRvci4KKworICAqIGBgY206OmlzX2lucHV0X3JhbmdlYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCByYW5nZSB0eXBlOiBtdXN0IGhhdmUgbWV0aG9kcyBgYGJlZ2luKClgYCBhbmQKKyAgICBgYGVuZCgpYGAgcmV0dXJuaW5nIGFuIGlucHV0IGl0ZXJhdG9yLgorCisqIGBgPGNtZXh0L21lbW9yeT5gYDoKKworICAqIGBgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdGBgOgorICAgIEFwcGx5IGEgYGBzdGF0aWNfY2FzdGBgIHRvIGEgc21hcnQgcG9pbnRlci4KKworICAqIGBgY206OmR5bmFtaWNfcmVmZXJlbmNlX2Nhc3RgYDoKKyAgICBBcHBseSBhIGBgZHluYW1pY19jYXN0YGAgdG8gYSBzbWFydCBwb2ludGVyLgorCisqIGBgPGNtZXh0L3R5cGVfdHJhaXRzPmBgOgorCisgICogYGBjbTo6aXNfY29udGFpbmVyYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhIGNvbnRhaW5lciB0eXBlLgorCisgICogYGBjbTo6aXNfYXNzb2NpYXRpdmVfY29udGFpbmVyYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3Vub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXJgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGFuIHVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3NlcXVlbmNlX2NvbnRhaW5lcmBgOgorICAgIENoZWNrcyBpZiBhIHR5cGUgaXMgYSBzZXF1ZW5jZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3VuaXF1ZV9wdHJgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGEgYGBzdGQ6OnVuaXF1ZV9wdHJgYCB0eXBlLgorCitEeW5hbWljIE1lbW9yeSBNYW5hZ2VtZW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIGVuc3VyZSBlZmZpY2llbnQgbWVtb3J5IG1hbmFnZW1lbnQsIGkuZS4gbm8gbWVtb3J5IGxlYWtzLCBpdCBpcyByZXF1aXJlZAordG8gdXNlIHNtYXJ0IHBvaW50ZXJzLiAgQW55IGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gbXVzdCBiZSBoYW5kbGVkIGJ5IGEKK3NtYXJ0IHBvaW50ZXIgc3VjaCBhcyBgYHN0ZDo6dW5pcXVlX3B0cmBgIG9yIGBgc3RkOjpzaGFyZWRfcHRyYGAuCisKK0l0IGlzIGFsbG93ZWQgdG8gcGFzcyByYXcgcG9pbnRlcnMgYmV0d2VlbiBvYmplY3RzIHRvIGVuYWJsZSBvYmplY3RzIHNoYXJpbmcuCitBIHJhdyBwb2ludGVyICoqbXVzdCoqIG5vdCBiZSBkZWxldGVkLiBPbmx5IHRoZSBvYmplY3Qocykgb3duaW5nIHRoZSBzbWFydAorcG9pbnRlciBhcmUgYWxsb3dlZCB0byBkZWxldGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeS4KIAogU291cmNlIFRyZWUgTGF5b3V0CiA9PT09PT09PT09PT09PT09PT0KQEAgLTY5LDYgKzE5OSwxMiBAQAogKiBgYFV0aWxpdGllcy9gYDoKICAgU2NyaXB0cywgdGhpcmQtcGFydHkgc291cmNlIGNvZGUuCiAKKyAgKiBgYFV0aWxpdGllcy9zdGQvY21gYDoKKyAgICBTdXBwb3J0IGZpbGVzIGZvciB2YXJpb3VzIEMrKyBzdGFuZGFyZHMuCisKKyAgKiBgYFV0aWxpdGllcy9zdGQvY21leHRgYDoKKyAgICBFeHRlbnNpb25zIHRvIHRoZSBDKysgU1RMLgorCiAgICogYGBVdGlsaXRpZXMvU3BoaW54L2BgOgogICAgIFNwaGlueCBjb25maWd1cmF0aW9uIHRvIGJ1aWxkIENNYWtlIHVzZXIgZG9jdW1lbnRhdGlvbi4KIApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMucnN0IGIvSGVscC9lbnZ2YXIvQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTA4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QKQEAgLTAsMCArMSw5IEBACitDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciA6dmFyaWFibGU6YENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTYCB3aGVuIHRoZXJlCitpcyBubyBleHBsaWNpdCBjb25maWd1cmF0aW9uIGdpdmVuIG9uIHRoZSBmaXJzdCBydW4gd2hpbGUgY3JlYXRpbmcgYSBuZXcKK2J1aWxkIHRyZWUuICBPbiBsYXRlciBydW5zIGluIGFuIGV4aXN0aW5nIGJ1aWxkIHRyZWUgdGhlIHZhbHVlIHBlcnNpc3RzIGluCit0aGUgY2FjaGUgYXMgOnZhcmlhYmxlOmBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU2AuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTFlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdApAQCAtMCwwICsxLDEwIEBACitDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKKworRGVmYXVsdCBjb21waWxlciBsYXVuY2hlciB0byB1c2UgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UuIFdpbGwgb25seSBiZSB1c2VkCitieSBDTWFrZSB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSBvbiB0aGUgZmlyc3QgY29uZmlndXJhdGlvbi4gQWZ0ZXJ3YXJkcywgaXQKK2lzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBjYWNoZSBzZXR0aW5nIG9mIHRoZSB2YXJpYWJsZSBvZiB0aGUgc2FtZSBuYW1lLiBGb3IKK2FueSBjb25maWd1cmF0aW9uIHJ1biAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlCitpZ25vcmVkIGlmIHRoZSA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9DT01QSUxFUl9MQVVOQ0hFUmAgdmFyaWFibGUgaXMgZGVmaW5lZC4KZGlmZiAtLWdpdCBhL0hlbHAvZ2VuZXJhdG9yL05pbmphIE11bHRpLUNvbmZpZy5yc3QgYi9IZWxwL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODBlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcucnN0CkBAIC0wLDAgKzEsODcgQEAKK05pbmphIE11bHRpLUNvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYXRlcyBtdWx0aXBsZSBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgZmlsZXMuCisKK1RoaXMgZ2VuZXJhdG9yIGlzIHZlcnkgbXVjaCBsaWtlIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLCBidXQgd2l0aAorc29tZSBrZXkgZGlmZmVyZW5jZXMuIE9ubHkgdGhlc2UgZGlmZmVyZW5jZXMgd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhpcworZG9jdW1lbnQuCisKK1VubGlrZSB0aGUgOmdlbmVyYXRvcjpgTmluamFgIGdlbmVyYXRvciwgYGBOaW5qYSBNdWx0aS1Db25maWdgYCBnZW5lcmF0ZXMKK211bHRpcGxlIGNvbmZpZ3VyYXRpb25zIGF0IG9uY2Ugd2l0aCA6dmFyaWFibGU6YENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVNgCitpbnN0ZWFkIG9mIG9ubHkgb25lIGNvbmZpZ3VyYXRpb24gd2l0aCA6dmFyaWFibGU6YENNQUtFX0JVSUxEX1RZUEVgLiBPbmUKK2BgYnVpbGQtPENvbmZpZz4ubmluamFgYCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIG9mIHRoZXNlCitjb25maWd1cmF0aW9ucyAod2l0aCBgYDxDb25maWc+YGAgYmVpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZS4pIFRoZXNlIGZpbGVzCithcmUgaW50ZW5kZWQgdG8gYmUgcnVuIHdpdGggYGBuaW5qYSAtZiBidWlsZC08Q29uZmlnPi5uaW5qYWBgLiBBCitgYGJ1aWxkLm5pbmphYGAgZmlsZSBpcyBhbHNvIGdlbmVyYXRlZCwgdXNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBlaXRoZXIKKzp2YXJpYWJsZTpgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFYCBvciB0aGUgZmlyc3QgaXRlbSBmcm9tCis6dmFyaWFibGU6YENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVNgLgorCitgYGNtYWtlIC0tYnVpbGQgLiAtLWNvbmZpZyA8Q29uZmlnPmBgIHdpbGwgYWx3YXlzIHVzZSBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAKK3RvIGJ1aWxkLiBJZiBubyBgYC0tY29uZmlnYGAgYXJndW1lbnQgaXMgc3BlY2lmaWVkLCBgYGNtYWtlIC0tYnVpbGQgLmBgIHdpbGwKK2RlZmF1bHQgdG8gYGBidWlsZC1EZWJ1Zy5uaW5qYWBgLCB1bmxlc3MgYSBgYGJ1aWxkLm5pbmphYGAgaXMgZ2VuZXJhdGVkIChzZWUKK2JlbG93KSwgaW4gd2hpY2ggY2FzZSB0aGF0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitFYWNoIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBmaWxlIGNvbnRhaW5zIGBgPHRhcmdldD5gYCB0YXJnZXRzIGFzIHdlbGwgYXMKK2BgPHRhcmdldD46PENvbmZpZz5gYCB0YXJnZXRzLCB3aGVyZSBgYDxDb25maWc+YGAgaXMgdGhlIHNhbWUgYXMgdGhlCitjb25maWd1cmF0aW9uIHNwZWNpZmllZCBpbiBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgQWRkaXRpb25hbGx5LCBpZgorY3Jvc3MtY29uZmlnIG1vZGUgaXMgZW5hYmxlZCwgYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIG1heSBjb250YWluCitgYDx0YXJnZXQ+OjxPdGhlckNvbmZpZz5gYCB0YXJnZXRzLCB3aGVyZSBgYDxPdGhlckNvbmZpZz5gYCBpcyBhIGNyb3NzLWNvbmZpZywKK2FzIHdlbGwgYXMgYGA8dGFyZ2V0PjphbGxgYCwgd2hpY2ggYnVpbGRzIHRoZSB0YXJnZXQgaW4gYWxsIGNyb3NzLWNvbmZpZ3MuIFNlZQorYmVsb3cgZm9yIGhvdyB0byBlbmFibGUgY3Jvc3MtY29uZmlnIG1vZGUuCisKK1RoZSBgYE5pbmphIE11bHRpLUNvbmZpZ2BgIGdlbmVyYXRvciByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCis6dmFyaWFibGU6YENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVNgCisgIFNwZWNpZmllcyB0aGUgdG90YWwgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIGJ1aWxkLgorCis6dmFyaWFibGU6YENNQUtFX0NST1NTX0NPTkZJR1NgCisgIFNwZWNpZmllcyBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZgorICBjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgZnJvbSBhbGwgYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGZpbGVzLgorCis6dmFyaWFibGU6YENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRWAKKyAgU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZSBieSBkZWZhdWx0IGluIGEgYGBidWlsZC5uaW5qYWBgIGZpbGUuCisKKzp2YXJpYWJsZTpgQ01BS0VfREVGQVVMVF9DT05GSUdTYAorICBTcGVjaWZpZXMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YKKyAgY29uZmlndXJhdGlvbnMgdG8gYnVpbGQgZm9yIGEgdGFyZ2V0IGluIGBgYnVpbGQubmluamFgYAorICBpZiBubyBgYDo8Q29uZmlnPmBgIHN1ZmZpeCBpcyBzcGVjaWZpZWQuCisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCisgIHByb2plY3QoTXVsdGlDb25maWdOaW5qYSBDKQorCisgIGFkZF9leGVjdXRhYmxlKGdlbmVyYXRvciBnZW5lcmF0b3IuYykKKyAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCBnZW5lcmF0ZWQuYyBDT01NQU5EIGdlbmVyYXRvciBnZW5lcmF0ZWQuYykKKyAgYWRkX2xpYnJhcnkoZ2VuZXJhdGVkICR7Q01BS0VfQklOQVJZX0RJUn0vZ2VuZXJhdGVkLmMpCisKK05vdyBhc3N1bWUgeW91IGNvbmZpZ3VyZSB0aGUgcHJvamVjdCB3aXRoIGBgTmluamEgTXVsdGktQ29uZmlnYGAgYW5kIHJ1biBvbmUgb2YKK3RoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbAorCisgIG5pbmphIC1mIGJ1aWxkLURlYnVnLm5pbmphIGdlbmVyYXRlZAorICAjIE9SCisgIGNtYWtlIC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZyAtLXRhcmdldCBnZW5lcmF0ZWQKKworVGhpcyB3b3VsZCBidWlsZCB0aGUgYGBEZWJ1Z2BgIGNvbmZpZ3VyYXRpb24gb2YgYGBnZW5lcmF0b3JgYCwgd2hpY2ggd291bGQgYmUKK3VzZWQgdG8gZ2VuZXJhdGUgYGBnZW5lcmF0ZWQuY2BgLCB3aGljaCB3b3VsZCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBgYERlYnVnYGAKK2NvbmZpZ3VyYXRpb24gb2YgYGBnZW5lcmF0ZWRgYC4KKworQnV0IGlmIDp2YXJpYWJsZTpgQ01BS0VfQ1JPU1NfQ09ORklHU2AgaXMgc2V0IHRvIGBgYWxsYGAsIGFuZCB5b3UgcnVuIHRoZQorZm9sbG93aW5nIGluc3RlYWQ6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbAorCisgIG5pbmphIC1mIGJ1aWxkLVJlbGVhc2UubmluamEgZ2VuZXJhdGVkOkRlYnVnCisgICMgT1IKKyAgY21ha2UgLS1idWlsZCAuIC0tY29uZmlnIFJlbGVhc2UgLS10YXJnZXQgZ2VuZXJhdGVkOkRlYnVnCisKK1RoaXMgd291bGQgYnVpbGQgdGhlIGBgUmVsZWFzZWBgIGNvbmZpZ3VyYXRpb24gb2YgYGBnZW5lcmF0b3JgYCwgd2hpY2ggd291bGQgYmUKK3VzZWQgdG8gZ2VuZXJhdGUgYGBnZW5lcmF0ZWQuY2BgLCB3aGljaCB3b3VsZCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBgYERlYnVnYGAKK2NvbmZpZ3VyYXRpb24gb2YgYGBnZW5lcmF0ZWRgYC4gVGhpcyBpcyB1c2VmdWwgZm9yIHJ1bm5pbmcgYSByZWxlYXNlLW9wdGltaXplZAordmVyc2lvbiBvZiBhIGdlbmVyYXRvciB1dGlsaXR5IHdoaWxlIHN0aWxsIGJ1aWxkaW5nIHRoZSBkZWJ1ZyB2ZXJzaW9uIG9mIHRoZQordGFyZ2V0cyBidWlsdCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZS4KZGlmZiAtLWdpdCBhL0hlbHAvZ2VuZXJhdG9yL05pbmphLnJzdCBiL0hlbHAvZ2VuZXJhdG9yL05pbmphLnJzdAppbmRleCBjNzVkMmM0Li4yNzUwNTVkIDEwMDY0NAotLS0gYS9IZWxwL2dlbmVyYXRvci9OaW5qYS5yc3QKKysrIGIvSGVscC9nZW5lcmF0b3IvTmluamEucnN0CkBAIC0xLDcgKzEsNyBAQAogTmluamEKIC0tLS0tCiAKLUdlbmVyYXRlcyBidWlsZC5uaW5qYSBmaWxlcy4KK0dlbmVyYXRlcyBgYGJ1aWxkLm5pbmphYGAgZmlsZXMuCiAKIEEgYGBidWlsZC5uaW5qYWBgIGZpbGUgaXMgZ2VuZXJhdGVkIGludG8gdGhlIGJ1aWxkIHRyZWUuICBVc2UgdGhlIG5pbmphCiBwcm9ncmFtIHRvIGJ1aWxkIHRoZSBwcm9qZWN0IHRocm91Z2ggdGhlIGBgYWxsYGAgdGFyZ2V0IGFuZCBpbnN0YWxsIHRoZQpAQCAtMzgsMyArMzgsOSBAQAogYSBicmFuY2ggb2YgTmluamEgd2l0aCB0aGUgcmVxdWlyZWQgZmVhdHVyZXMgb24gYGdpdGh1Yi5jb20vS2l0d2FyZS9uaW5qYWBfLgogCiAuLiBfYGdpdGh1Yi5jb20vS2l0d2FyZS9uaW5qYWA6IGh0dHBzOi8vZ2l0aHViLmNvbS9LaXR3YXJlL25pbmphL3RyZWUvZmVhdHVyZXMtZm9yLWZvcnRyYW4jcmVhZG1lCisKK1NlZSBBbHNvCiteXl5eXl5eXgorCitUaGUgOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYCBnZW5lcmF0b3IgaXMgc2ltaWxhciB0byB0aGUgYGBOaW5qYWBgCitnZW5lcmF0b3IsIGJ1dCBnZW5lcmF0ZXMgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgYXQgb25jZS4KZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL0NNYWtlTGlzdHMudHh0CmluZGV4IGVjYTc5ZDkuLjRkOGEzYWQgMTAwNjQ0Ci0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvQ01ha2VMaXN0cy50eHQKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9DTWFrZUxpc3RzLnR4dApAQCAtMyw2ICszLDggQEAKICMgc2V0IHRoZSBwcm9qZWN0IG5hbWUgYW5kIHZlcnNpb24KIHByb2plY3QoVHV0b3JpYWwgVkVSU0lPTiAxLjApCiAKK3NldChDTUFLRV9ERUJVR19QT1NURklYIGQpCisKIGFkZF9saWJyYXJ5KHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRSkKIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRSBjeHhfc3RkXzExKQogCkBAIC0zNyw2ICszOSw4IEBACiAKICMgYWRkIHRoZSBleGVjdXRhYmxlCiBhZGRfZXhlY3V0YWJsZShUdXRvcmlhbCB0dXRvcmlhbC5jeHgpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVHV0b3JpYWwgUFJPUEVSVElFUyBERUJVR19QT1NURklYICR7Q01BS0VfREVCVUdfUE9TVEZJWH0pCisKIHRhcmdldF9saW5rX2xpYnJhcmllcyhUdXRvcmlhbCBQVUJMSUMgTWF0aEZ1bmN0aW9ucykKIAogIyBhZGQgdGhlIGJpbmFyeSB0cmVlIHRvIHRoZSBzZWFyY2ggcGF0aCBmb3IgaW5jbHVkZSBmaWxlcwpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CmluZGV4IGRmYTg0YzkuLmM5MTE2MjUgMTAwNjQ0Ci0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDcgKzE3LDcgQEAKIAogICAjIGZpcnN0IHdlIGFkZCB0aGUgZXhlY3V0YWJsZSB0aGF0IGdlbmVyYXRlcyB0aGUgdGFibGUKICAgYWRkX2V4ZWN1dGFibGUoTWFrZVRhYmxlIE1ha2VUYWJsZS5jeHgpCi0gIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYWtlVGFibGUgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYWtlVGFibGUgUFJJVkFURSB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKIAogICAjIGFkZCB0aGUgY29tbWFuZCB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGNvZGUKICAgYWRkX2N1c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NdWx0aUNQYWNrQ29uZmlnLmNtYWtlIGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NdWx0aUNQYWNrQ29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTgzZGYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL011bHRpQ1BhY2tDb25maWcuY21ha2UKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlKCJyZWxlYXNlL0NQYWNrQ29uZmlnLmNtYWtlIikKKworc2V0KENQQUNLX0lOU1RBTExfQ01BS0VfUFJPSkVDVFMKKyAgICAiZGVidWc7VHV0b3JpYWw7QUxMOy8iCisgICAgInJlbGVhc2U7VHV0b3JpYWw7QUxMOy8iCisgICAgKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS90dXRvcmlhbC5jeHggYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL3R1dG9yaWFsLmN4eAppbmRleCA1ODZkMTgzLi5hNGY0NGQ1IDEwMDY0NAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL3R1dG9yaWFsLmN4eAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL3R1dG9yaWFsLmN4eApAQCAtMSw2ICsxLDUgQEAKIC8vIEEgc2ltcGxlIHByb2dyYW0gdGhhdCBjb21wdXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIKICNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgIk1hdGhGdW5jdGlvbnMuaCIKQEAgLTksNiArOCw3IEBACiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogewogICBpZiAoYXJnYyA8IDIpIHsKKyAgICAvLyByZXBvcnQgdmVyc2lvbgogICAgIHN0ZDo6Y291dCA8PCBhcmd2WzBdIDw8ICIgVmVyc2lvbiAiIDw8IFR1dG9yaWFsX1ZFUlNJT05fTUFKT1IgPDwgIi4iCiAgICAgICAgICAgICAgIDw8IFR1dG9yaWFsX1ZFUlNJT05fTUlOT1IgPDwgc3RkOjplbmRsOwogICAgIHN0ZDo6Y291dCA8PCAiVXNhZ2U6ICIgPDwgYXJndlswXSA8PCAiIG51bWJlciIgPDwgc3RkOjplbmRsOwpAQCAtMTgsOCArMTgsOCBAQAogICAvLyBjb252ZXJ0IGlucHV0IHRvIGRvdWJsZQogICBjb25zdCBkb3VibGUgaW5wdXRWYWx1ZSA9IHN0ZDo6c3RvZChhcmd2WzFdKTsKIAotICAvLyBjYWxjdWxhdGUgc3F1YXJlIHJvb3QKICAgY29uc3QgZG91YmxlIG91dHB1dFZhbHVlID0gbWF0aGZ1bmN0aW9uczo6c3FydChpbnB1dFZhbHVlKTsKKwogICBzdGQ6OmNvdXQgPDwgIlRoZSBzcXVhcmUgcm9vdCBvZiAiIDw8IGlucHV0VmFsdWUgPDwgIiBpcyAiIDw8IG91dHB1dFZhbHVlCiAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db25zdW1lci9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29uc3VtZXIvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZTQ1OTguLjAwMDAwMDAKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db25zdW1lci9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEwKQotCi1pZihOT1QgREVGSU5FRCBDTUFLRV9DWFhfU1RBTkRBUkQpCi0gIHNldChDTUFLRV9DWFhfU1RBTkRBUkQgMTEpCi0gIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQgVHJ1ZSkKLWVuZGlmKCkKLQotCi1mdW5jdGlvbihmaW5kX2V4dGVybmFsX2RlcGVuZGVuY3kgbmFtZSkKLSAgc2V0KCR7bmFtZX1fUk9PVCAiIiAgQ0FDSEUgUEFUSCAiUm9vdCBkaXJlY3RvcnkgdG8gZmluZCAke25hbWV9IikKLSAgbWFya19hc19hZHZhbmNlZCgke25hbWV9X0RJUikKLSAgZmluZF9wYWNrYWdlKCR7bmFtZX0gUEFUSFMgJHske25hbWV9X1JPT1R9IFJFUVVJUkVEKQotZW5kZnVuY3Rpb24oKQotCi0KLXByb2plY3QoQ29uc3VtZXIpCi0KLWZpbmRfZXh0ZXJuYWxfZGVwZW5kZW5jeShNYXRoRnVuY3Rpb25zKQotCi1hZGRfbGlicmFyeShjb25zdW1lciBjb25zdW1lci5jeHgpCi10YXJnZXRfbGlua19saWJyYXJpZXMoY29uc3VtZXIgUFVCTElDIE1hdGhGdW5jdGlvbnMpCi0KLSMgaW5zdGFsbCB0aGUgY29uc3VtZXIgbGlicmFyeQotaW5zdGFsbChUQVJHRVRTIGNvbnN1bWVyIERFU1RJTkFUSU9OIGJpbiBFWFBPUlQgQ29uc3VtZXJUYXJnZXRzKQotCi0jIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cwotaW5zdGFsbChFWFBPUlQgQ29uc3VtZXJUYXJnZXRzCi0gIEZJTEUgQ29uc3VtZXJUYXJnZXRzLmNtYWtlCi0gIERFU1RJTkFUSU9OIGxpYi9jbWFrZS9Db25zdW1lcgotKQotCi1pbmNsdWRlKENNYWtlUGFja2FnZUNvbmZpZ0hlbHBlcnMpCi0jIGdlbmVyYXRlIHRoZSBjb25maWcgZmlsZSB0aGF0IGlzIGluY2x1ZGVzIHRoZSBleHBvcnRzCi1jb25maWd1cmVfcGFja2FnZV9jb25maWdfZmlsZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ29uZmlnLmNtYWtlLmluCi0gICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uc3VtZXJDb25maWcuY21ha2UiCi0gIElOU1RBTExfREVTVElOQVRJT04gImxpYi9jbWFrZS9leGFtcGxlIgotICBOT19TRVRfQU5EX0NIRUNLX01BQ1JPCi0gIE5PX0NIRUNLX1JFUVVJUkVEX0NPTVBPTkVOVFNfTUFDUk8KLSAgKQotCi0jIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQotaW5zdGFsbChGSUxFUwotICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uc3VtZXJDb25maWcuY21ha2UKLSAgREVTVElOQVRJT04gbGliL2NtYWtlL0NvbnN1bWVyCi0gICkKLQotIyBnZW5lcmF0ZSB0aGUgZXhwb3J0IHRhcmdldHMgZm9yIHRoZSBidWlsZCB0cmVlCi0jIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBpbnN0YWxsKFRBUkdFVFMgKSBjb21tYW5kCi1leHBvcnQoRVhQT1JUIENvbnN1bWVyVGFyZ2V0cwotICBGSUxFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uc3VtZXJUYXJnZXRzLmNtYWtlIgotKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db25zdW1lci9Db25maWcuY21ha2UuaW4gYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbnN1bWVyL0NvbmZpZy5jbWFrZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZjFlNC4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbnN1bWVyL0NvbmZpZy5jbWFrZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLQotQFBBQ0tBR0VfSU5JVEAKLQotaW5jbHVkZShDTWFrZUZpbmREZXBlbmRlbmN5TWFjcm8pCi0KLWZ1bmN0aW9uKGZpbmRfZXh0ZXJuYWxfZGVwZW5kZW5jeSBuYW1lKQotICBzZXQoJHtuYW1lfV9ST09UICIiICBDQUNIRSBQQVRIICJSb290IGRpcmVjdG9yeSB0byBmaW5kICR7bmFtZX0iKQotICBtYXJrX2FzX2FkdmFuY2VkKCR7bmFtZX1fRElSKQotICBmaW5kX2RlcGVuZGVuY3koJHtuYW1lfSBQQVRIUyAkeyR7bmFtZX1fUk9PVH0gUkVRVUlSRUQpCi1lbmRmdW5jdGlvbigpCi0KLWZpbmRfZXh0ZXJuYWxfZGVwZW5kZW5jeShNYXRoRnVuY3Rpb25zKQotCi1pbmNsdWRlICggIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29uc3VtZXJUYXJnZXRzLmNtYWtlIiApCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbnN1bWVyL2NvbnN1bWVyLmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29uc3VtZXIvY29uc3VtZXIuY3h4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTc4NzdiLi4wMDAwMDAwCi0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29uc3VtZXIvY29uc3VtZXIuY3h4CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLy8gQSBzaW1wbGUgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIKLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIk1hdGhGdW5jdGlvbnMuaCIKLQotZG91YmxlIHN0cmluZ19zcXVhcmVfcm9vdChzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCi17Ci0gIHJldHVybiBtYXRoZnVuY3Rpb25zOjpzcXJ0KHN0ZDo6c3RvZCh2YWx1ZSkpOwotfQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFkNDE3YS4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKLQotIyBzZXQgdGhlIHByb2plY3QgbmFtZSBhbmQgdmVyc2lvbgotcHJvamVjdChUdXRvcmlhbCBWRVJTSU9OIDEuMCkKLQotc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKLXNldChDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQgVHJ1ZSkKLQotCi0jIGNvbnRyb2wgd2hlcmUgdGhlIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBhcmUgYnVpbHQgc28gdGhhdCBvbiB3aW5kb3dzCi0jIHdlIGRvbid0IG5lZWQgdG8gdGlua2VyIHdpdGggdGhlIHBhdGggdG8gcnVuIHRoZSBleGVjdXRhYmxlCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfSIpCi0KLW9wdGlvbihCVUlMRF9TSEFSRURfTElCUyAiQnVpbGQgdXNpbmcgc2hhcmVkIGxpYnJhcmllcyIgT04pCi0KLWlmKEFQUExFKQotICBzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSCAiQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIiKQotZWxzZWlmKFVOSVgpCi0gIHNldChDTUFLRV9JTlNUQUxMX1JQQVRIICIkT1JJR0lOLy4uL2xpYiIpCi1lbmRpZigpCi0KLSMgY29uZmlndXJlIGEgaGVhZGVyIGZpbGUgdG8gcGFzcyB0aGUgdmVyc2lvbiBudW1iZXIgb25seQotY29uZmlndXJlX2ZpbGUoVHV0b3JpYWxDb25maWcuaC5pbiBUdXRvcmlhbENvbmZpZy5oKQotCi0jIGFkZCB0aGUgTWF0aEZ1bmN0aW9ucyBsaWJyYXJ5Ci1hZGRfc3ViZGlyZWN0b3J5KE1hdGhGdW5jdGlvbnMpCi0KLSMgYWRkIHRoZSBleGVjdXRhYmxlCi1hZGRfZXhlY3V0YWJsZShUdXRvcmlhbCB0dXRvcmlhbC5jeHgpCi10YXJnZXRfbGlua19saWJyYXJpZXMoVHV0b3JpYWwgUFVCTElDIE1hdGhGdW5jdGlvbnMpCi0KLSMgYWRkIHRoZSBiaW5hcnkgdHJlZSB0byB0aGUgc2VhcmNoIHBhdGggZm9yIGluY2x1ZGUgZmlsZXMKLSMgc28gdGhhdCB3ZSB3aWxsIGZpbmQgVHV0b3JpYWxDb25maWcuaAotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoVHV0b3JpYWwgUFVCTElDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0jIGFkZCB0aGUgaW5zdGFsbCB0YXJnZXRzCi1pbnN0YWxsKFRBUkdFVFMgVHV0b3JpYWwgREVTVElOQVRJT04gYmluKQotaW5zdGFsbChGSUxFUyAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L1R1dG9yaWFsQ29uZmlnLmgiCi0gIERFU1RJTkFUSU9OIGluY2x1ZGUKLSAgKQotCi0jIGVuYWJsZSB0ZXN0aW5nCi1lbmFibGVfdGVzdGluZygpCi0KLSMgZG9lcyB0aGUgYXBwbGljYXRpb24gcnVuCi1hZGRfdGVzdChOQU1FIFJ1bnMgQ09NTUFORCBUdXRvcmlhbCAyNSkKLQotIyBkb2VzIHRoZSB1c2FnZSBtZXNzYWdlIHdvcms/Ci1hZGRfdGVzdChOQU1FIFVzYWdlIENPTU1BTkQgVHV0b3JpYWwpCi1zZXRfdGVzdHNfcHJvcGVydGllcyhVc2FnZQotICBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJVc2FnZTouKm51bWJlciIKLSAgKQotCi0jIGRlZmluZSBhIGZ1bmN0aW9uIHRvIHNpbXBsaWZ5IGFkZGluZyB0ZXN0cwotZnVuY3Rpb24oZG9fdGVzdCB0YXJnZXQgYXJnIHJlc3VsdCkKLSAgYWRkX3Rlc3QoTkFNRSBDb21wJHthcmd9IENPTU1BTkQgJHt0YXJnZXR9ICR7YXJnfSkKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoQ29tcCR7YXJnfQotICAgIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gJHtyZXN1bHR9Ci0gICAgKQotZW5kZnVuY3Rpb24oZG9fdGVzdCkKLQotIyBkbyBhIGJ1bmNoIG9mIHJlc3VsdCBiYXNlZCB0ZXN0cwotZG9fdGVzdChUdXRvcmlhbCA0ICI0IGlzIDIiKQotZG9fdGVzdChUdXRvcmlhbCA5ICI5IGlzIDMiKQotZG9fdGVzdChUdXRvcmlhbCA1ICI1IGlzIDIuMjM2IikKLWRvX3Rlc3QoVHV0b3JpYWwgNyAiNyBpcyAyLjY0NSIpCi1kb190ZXN0KFR1dG9yaWFsIDI1ICIyNSBpcyA1IikKLWRvX3Rlc3QoVHV0b3JpYWwgLTI1ICItMjUgaXMgWy1uYW58bmFufDBdIikKLWRvX3Rlc3QoVHV0b3JpYWwgMC4wMDAxICIwLjAwMDEgaXMgMC4wMSIpCi0KLWluY2x1ZGUoSW5zdGFsbFJlcXVpcmVkU3lzdGVtTGlicmFyaWVzKQotc2V0KENQQUNLX1JFU09VUkNFX0ZJTEVfTElDRU5TRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0xpY2Vuc2UudHh0IikKLXNldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUFKT1IgIiR7VHV0b3JpYWxfVkVSU0lPTl9NQUpPUn0iKQotc2V0KENQQUNLX1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiAiJHtUdXRvcmlhbF9WRVJTSU9OX01JTk9SfSIpCi1pbmNsdWRlKENQYWNrKQotCi0jIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cwotaW5zdGFsbChFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMKLSAgRklMRSBNYXRoRnVuY3Rpb25zVGFyZ2V0cy5jbWFrZQotICBERVNUSU5BVElPTiBsaWIvY21ha2UvTWF0aEZ1bmN0aW9ucwotKQotCi1pbmNsdWRlKENNYWtlUGFja2FnZUNvbmZpZ0hlbHBlcnMpCi0jIGdlbmVyYXRlIHRoZSBjb25maWcgZmlsZSB0aGF0IGlzIGluY2x1ZGVzIHRoZSBleHBvcnRzCi1jb25maWd1cmVfcGFja2FnZV9jb25maWdfZmlsZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ29uZmlnLmNtYWtlLmluCi0gICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWF0aEZ1bmN0aW9uc0NvbmZpZy5jbWFrZSIKLSAgSU5TVEFMTF9ERVNUSU5BVElPTiAibGliL2NtYWtlL2V4YW1wbGUiCi0gIE5PX1NFVF9BTkRfQ0hFQ0tfTUFDUk8KLSAgTk9fQ0hFQ0tfUkVRVUlSRURfQ09NUE9ORU5UU19NQUNSTwotICApCi0jIGdlbmVyYXRlIHRoZSB2ZXJzaW9uIGZpbGUgZm9yIHRoZSBjb25maWcgZmlsZQotd3JpdGVfYmFzaWNfcGFja2FnZV92ZXJzaW9uX2ZpbGUoCi0gICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWF0aEZ1bmN0aW9uc0NvbmZpZ1ZlcnNpb24uY21ha2UiCi0gIFZFUlNJT04gIiR7VHV0b3JpYWxfVkVSU0lPTl9NQUpPUn0uJHtUdXRvcmlhbF9WRVJTSU9OX01JTk9SfSIKLSAgQ09NUEFUSUJJTElUWSBBbnlOZXdlclZlcnNpb24KLSkKLQotIyBpbnN0YWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKLWluc3RhbGwoRklMRVMKLSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01hdGhGdW5jdGlvbnNDb25maWcuY21ha2UKLSAgREVTVElOQVRJT04gbGliL2NtYWtlL01hdGhGdW5jdGlvbnMKLSAgKQotCi0jIGdlbmVyYXRlIHRoZSBleHBvcnQgdGFyZ2V0cyBmb3IgdGhlIGJ1aWxkIHRyZWUKLSMgbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGluc3RhbGwoVEFSR0VUUyApIGNvbW1hbmQKLWV4cG9ydChFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMKLSAgRklMRSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01hdGhGdW5jdGlvbnNUYXJnZXRzLmNtYWtlIgotKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZGYyYTcuLjAwMDAwMDAKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSMgYWRkIHRoZSBsaWJyYXJ5IHRoYXQgcnVucwotYWRkX2xpYnJhcnkoTWF0aEZ1bmN0aW9ucyBNYXRoRnVuY3Rpb25zLmN4eCkKLQotIyBzdGF0ZSB0aGF0IGFueWJvZHkgbGlua2luZyB0byB1cyBuZWVkcyB0byBpbmNsdWRlIHRoZSBjdXJyZW50IHNvdXJjZSBkaXIKLSMgdG8gZmluZCBNYXRoRnVuY3Rpb25zLmgsIHdoaWxlIHdlIGRvbid0LgotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoTWF0aEZ1bmN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxCVUlMRF9JTlRFUkZBQ0U6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8SU5TVEFMTF9JTlRFUkZBQ0U6aW5jbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLQotIyBzaG91bGQgd2UgdXNlIG91ciBvd24gbWF0aCBmdW5jdGlvbnMKLW9wdGlvbihVU0VfTVlNQVRIICJVc2UgdHV0b3JpYWwgcHJvdmlkZWQgbWF0aCBpbXBsZW1lbnRhdGlvbiIgT04pCi1pZihVU0VfTVlNQVRIKQotCi0gIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKE1hdGhGdW5jdGlvbnMgUFJJVkFURSAiVVNFX01ZTUFUSCIpCi0KLSAgIyBmaXJzdCB3ZSBhZGQgdGhlIGV4ZWN1dGFibGUgdGhhdCBnZW5lcmF0ZXMgdGhlIHRhYmxlCi0gIGFkZF9leGVjdXRhYmxlKE1ha2VUYWJsZSBNYWtlVGFibGUuY3h4KQotCi0gICMgYWRkIHRoZSBjb21tYW5kIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2UgY29kZQotICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9UYWJsZS5oCi0gICAgQ09NTUFORCBNYWtlVGFibGUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1RhYmxlLmgKLSAgICBERVBFTkRTIE1ha2VUYWJsZQotICAgICkKLQotICAjIGxpYnJhcnkgdGhhdCBqdXN0IGRvZXMgc3FydAotICBhZGRfbGlicmFyeShTcXJ0TGlicmFyeSBTVEFUSUMKLSAgICAgICAgICAgICAgbXlzcXJ0LmN4eAotICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vVGFibGUuaAotICAgICAgICAgICAgICApCi0KLSAgIyBzdGF0ZSB0aGF0IHdlIGRlcGVuZCBvbiBvdXIgYmluYXJ5IGRpciB0byBmaW5kIFRhYmxlLmgKLSAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoU3FydExpYnJhcnkgUFJJVkFURQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0gICMgc3RhdGUgdGhhdCBTcXJ0TGlicmFyeSBuZWVkIFBJQyB3aGVuIHRoZSBkZWZhdWx0IGlzIHNoYXJlZCBsaWJyYXJpZXMKLSAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNxcnRMaWJyYXJ5IFBST1BFUlRJRVMKLSAgICAgICAgICAgICAgICAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgJHtCVUlMRF9TSEFSRURfTElCU30KLSAgICAgICAgICAgICAgICAgICAgICAgICkKLQotICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWF0aEZ1bmN0aW9ucyBQUklWQVRFIFNxcnRMaWJyYXJ5KQotZW5kaWYoKQotCi0jIGRlZmluZSB0aGUgc3ltYm9sIHN0YXRpbmcgd2UgYXJlIHVzaW5nIHRoZSBkZWNsc3BlYyhkbGxleHBvcnQpIHdoZW4KLSMgYnVpbGRpbmcgb24gd2luZG93cwotdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTWF0aEZ1bmN0aW9ucyBQUklWQVRFICJFWFBPUlRJTkdfTVlNQVRIIikKLQotIyBzZXR1cCB0aGUgdmVyc2lvbiBudW1iZXJpbmcKLXNldF9wcm9wZXJ0eShUQVJHRVQgTWF0aEZ1bmN0aW9ucyBQUk9QRVJUWSBWRVJTSU9OICIxLjAuMCIpCi1zZXRfcHJvcGVydHkoVEFSR0VUIE1hdGhGdW5jdGlvbnMgUFJPUEVSVFkgU09WRVJTSU9OICIxIikKLQotIyBpbnN0YWxsIHJ1bGVzCi1pbnN0YWxsKFRBUkdFVFMgTWF0aEZ1bmN0aW9ucwotICAgICAgICBERVNUSU5BVElPTiBsaWIKLSAgICAgICAgRVhQT1JUIE1hdGhGdW5jdGlvbnNUYXJnZXRzKQotaW5zdGFsbChGSUxFUyBNYXRoRnVuY3Rpb25zLmggREVTVElOQVRJT04gaW5jbHVkZSkKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmN4eApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2MjJiZS4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL215c3FydC5jeHgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNsdWRlICJNYXRoRnVuY3Rpb25zLmgiCi0KLS8vIGluY2x1ZGUgdGhlIGdlbmVyYXRlZCB0YWJsZQotI2luY2x1ZGUgIlRhYmxlLmgiCi0KLW5hbWVzcGFjZSBtYXRoZnVuY3Rpb25zIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotLy8gYSBoYWNrIHNxdWFyZSByb290IGNhbGN1bGF0aW9uIHVzaW5nIHNpbXBsZSBvcGVyYXRpb25zCi1kb3VibGUgbXlzcXJ0KGRvdWJsZSB4KQotewotICBpZiAoeCA8PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyB1c2UgdGhlIHRhYmxlIHRvIGhlbHAgZmluZCBhbiBpbml0aWFsIHZhbHVlCi0gIGRvdWJsZSByZXN1bHQgPSB4OwotICBpZiAoeCA+PSAxICYmIHggPCAxMCkgewotICAgIHJlc3VsdCA9IHNxcnRUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KHgpXTsKLSAgfQotCi0gIC8vIGlmIHdlIGhhdmUgYm90aCBsb2cgYW5kIGV4cCB0aGVuIHVzZSB0aGVtCi0KLSAgLy8gZG8gdGVuIGl0ZXJhdGlvbnMKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKSB7Ci0gICAgICByZXN1bHQgPSAwLjE7Ci0gICAgfQotICAgIGRvdWJsZSBkZWx0YSA9IHggLSAocmVzdWx0ICogcmVzdWx0KTsKLSAgICByZXN1bHQgPSByZXN1bHQgKyAwLjUgKiBkZWx0YSAvIHJlc3VsdDsKLSAgICBzdGQ6OmNvdXQgPDwgIkNvbXB1dGluZyBzcXJ0IG9mICIgPDwgeCA8PCAiIHRvIGJlICIgPDwgcmVzdWx0IDw8IHN0ZDo6ZW5kbDsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci19Ci19CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NdWx0aUNQYWNrQ29uZmlnLmNtYWtlIGIvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTXVsdGlDUGFja0NvbmZpZy5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAzYjYzMy4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NdWx0aUNQYWNrQ29uZmlnLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLWluY2x1ZGUoInJlbGVhc2UvQ1BhY2tDb25maWcuY21ha2UiKQotCi1zZXQoQ1BBQ0tfSU5TVEFMTF9DTUFLRV9QUk9KRUNUUwotICAgICJkZWJ1ZztUdXRvcmlhbDtBTEw7LyIKLSAgICAicmVsZWFzZTtUdXRvcmlhbDtBTEw7LyIKLSAgICApCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9UdXRvcmlhbENvbmZpZy5oLmluIGIvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvVHV0b3JpYWxDb25maWcuaC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNkMmZjOS4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9UdXRvcmlhbENvbmZpZy5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vLyB0aGUgY29uZmlndXJlZCB2ZXJzaW9uIG51bWJlcgotI2RlZmluZSBUdXRvcmlhbF9WRVJTSU9OX01BSk9SIEBUdXRvcmlhbF9WRVJTSU9OX01BSk9SQAotI2RlZmluZSBUdXRvcmlhbF9WRVJTSU9OX01JTk9SIEBUdXRvcmlhbF9WRVJTSU9OX01JTk9SQApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvdHV0b3JpYWwuY3h4IGIvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvdHV0b3JpYWwuY3h4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTc4MDViLi4wMDAwMDAwCi0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL3R1dG9yaWFsLmN4eAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8vIEEgc2ltcGxlIHByb2dyYW0gdGhhdCBjb21wdXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIKLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJNYXRoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiVHV0b3JpYWxDb25maWcuaCIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKLXsKLSAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgc3RkOjpjb3V0IDw8IGFyZ3ZbMF0gPDwgIiBWZXJzaW9uICIgPDwgVHV0b3JpYWxfVkVSU0lPTl9NQUpPUiA8PCAiLiIKLSAgICAgICAgICAgICAgPDwgVHV0b3JpYWxfVkVSU0lPTl9NSU5PUiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICJVc2FnZTogIiA8PCBhcmd2WzBdIDw8ICIgbnVtYmVyIiA8PCBzdGQ6OmVuZGw7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICAvLyBjb252ZXJ0IGlucHV0IHRvIGRvdWJsZQotICBkb3VibGUgaW5wdXRWYWx1ZSA9IHN0ZDo6c3RvZChhcmd2WzFdKTsKLQotICBjb25zdCBkb3VibGUgb3V0cHV0VmFsdWUgPSBtYXRoZnVuY3Rpb25zOjpzcXJ0KGlucHV0VmFsdWUpOwotCi0gIHN0ZDo6Y291dCA8PCAiVGhlIHNxdWFyZSByb290IG9mICIgPDwgaW5wdXRWYWx1ZSA8PCAiIGlzICIgPDwgb3V0cHV0VmFsdWUKLSAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTEvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAppbmRleCBlNmNiOGJhLi4zMmY1ZTA4IDEwMDY0NAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDExL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKQEAgLTE1LDcgKzE1LDcgQEAKIAogICAjIGZpcnN0IHdlIGFkZCB0aGUgZXhlY3V0YWJsZSB0aGF0IGdlbmVyYXRlcyB0aGUgdGFibGUKICAgYWRkX2V4ZWN1dGFibGUoTWFrZVRhYmxlIE1ha2VUYWJsZS5jeHgpCi0gIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYWtlVGFibGUgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYWtlVGFibGUgUFJJVkFURSB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKIAogICAjIGFkZCB0aGUgY29tbWFuZCB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGNvZGUKICAgYWRkX2N1c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2E3OWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMjAgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorCisjIHNldCB0aGUgcHJvamVjdCBuYW1lIGFuZCB2ZXJzaW9uCitwcm9qZWN0KFR1dG9yaWFsIFZFUlNJT04gMS4wKQorCithZGRfbGlicmFyeSh0dXRvcmlhbF9jb21waWxlcl9mbGFncyBJTlRFUkZBQ0UpCit0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyh0dXRvcmlhbF9jb21waWxlcl9mbGFncyBJTlRFUkZBQ0UgY3h4X3N0ZF8xMSkKKworIyBhZGQgY29tcGlsZXIgd2FybmluZyBmbGFncyBqdXN0IHdoZW4gYnVpbGRpbmcgdGhpcyBwcm9qZWN0IHZpYQorIyB0aGUgQlVJTERfSU5URVJGQUNFIGdlbmV4CitzZXQoZ2NjX2xpa2VfY3h4ICIkPENPTVBJTEVfTEFOR19BTkRfSUQ6Q1hYLEFSTUNsYW5nLEFwcGxlQ2xhbmcsQ2xhbmcsR05VPiIpCitzZXQobXN2Y19jeHggIiQ8Q09NUElMRV9MQU5HX0FORF9JRDpDWFgsTVNWQz4iKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyh0dXRvcmlhbF9jb21waWxlcl9mbGFncyBJTlRFUkZBQ0UKKyAgIiQ8JHtnY2NfbGlrZV9jeHh9OiQ8QlVJTERfSU5URVJGQUNFOi1XYWxsOy1XZXh0cmE7LVdzaGFkb3c7LVdmb3JtYXQ9MjstV3VudXNlZD4+IgorICAiJDwke21zdmNfY3h4fTokPEJVSUxEX0lOVEVSRkFDRTotVzM+PiIKKykKKworIyBjb250cm9sIHdoZXJlIHRoZSBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGJ1aWx0IHNvIHRoYXQgb24gd2luZG93cworIyB3ZSBkb24ndCBuZWVkIHRvIHRpbmtlciB3aXRoIHRoZSBwYXRoIHRvIHJ1biB0aGUgZXhlY3V0YWJsZQorc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfSIpCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0iKQorCitvcHRpb24oQlVJTERfU0hBUkVEX0xJQlMgIkJ1aWxkIHVzaW5nIHNoYXJlZCBsaWJyYXJpZXMiIE9OKQorCitpZihBUFBMRSkKKyAgc2V0KENNQUtFX0lOU1RBTExfUlBBVEggIkBleGVjdXRhYmxlX3BhdGgvLi4vbGliIikKK2Vsc2VpZihVTklYKQorICBzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSCAiJE9SSUdJTi8uLi9saWIiKQorZW5kaWYoKQorCisjIGNvbmZpZ3VyZSBhIGhlYWRlciBmaWxlIHRvIHBhc3MgdGhlIHZlcnNpb24gbnVtYmVyIG9ubHkKK2NvbmZpZ3VyZV9maWxlKFR1dG9yaWFsQ29uZmlnLmguaW4gVHV0b3JpYWxDb25maWcuaCkKKworIyBhZGQgdGhlIE1hdGhGdW5jdGlvbnMgbGlicmFyeQorYWRkX3N1YmRpcmVjdG9yeShNYXRoRnVuY3Rpb25zKQorCisjIGFkZCB0aGUgZXhlY3V0YWJsZQorYWRkX2V4ZWN1dGFibGUoVHV0b3JpYWwgdHV0b3JpYWwuY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFR1dG9yaWFsIFBVQkxJQyBNYXRoRnVuY3Rpb25zKQorCisjIGFkZCB0aGUgYmluYXJ5IHRyZWUgdG8gdGhlIHNlYXJjaCBwYXRoIGZvciBpbmNsdWRlIGZpbGVzCisjIHNvIHRoYXQgd2Ugd2lsbCBmaW5kIFR1dG9yaWFsQ29uZmlnLmgKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFR1dG9yaWFsIFBVQkxJQworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7UFJPSkVDVF9CSU5BUllfRElSfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyBhZGQgdGhlIGluc3RhbGwgdGFyZ2V0cworaW5zdGFsbChUQVJHRVRTIFR1dG9yaWFsIERFU1RJTkFUSU9OIGJpbikKK2luc3RhbGwoRklMRVMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9UdXRvcmlhbENvbmZpZy5oIgorICBERVNUSU5BVElPTiBpbmNsdWRlCisgICkKKworIyBlbmFibGUgdGVzdGluZworZW5hYmxlX3Rlc3RpbmcoKQorCisjIGRvZXMgdGhlIGFwcGxpY2F0aW9uIHJ1bgorYWRkX3Rlc3QoTkFNRSBSdW5zIENPTU1BTkQgVHV0b3JpYWwgMjUpCisKKyMgZG9lcyB0aGUgdXNhZ2UgbWVzc2FnZSB3b3JrPworYWRkX3Rlc3QoTkFNRSBVc2FnZSBDT01NQU5EIFR1dG9yaWFsKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVXNhZ2UKKyAgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiVXNhZ2U6LipudW1iZXIiCisgICkKKworIyBkZWZpbmUgYSBmdW5jdGlvbiB0byBzaW1wbGlmeSBhZGRpbmcgdGVzdHMKK2Z1bmN0aW9uKGRvX3Rlc3QgdGFyZ2V0IGFyZyByZXN1bHQpCisgIGFkZF90ZXN0KE5BTUUgQ29tcCR7YXJnfSBDT01NQU5EICR7dGFyZ2V0fSAke2FyZ30pCisgIHNldF90ZXN0c19wcm9wZXJ0aWVzKENvbXAke2FyZ30KKyAgICBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICR7cmVzdWx0fQorICAgICkKK2VuZGZ1bmN0aW9uKGRvX3Rlc3QpCisKKyMgZG8gYSBidW5jaCBvZiByZXN1bHQgYmFzZWQgdGVzdHMKK2RvX3Rlc3QoVHV0b3JpYWwgNCAiNCBpcyAyIikKK2RvX3Rlc3QoVHV0b3JpYWwgOSAiOSBpcyAzIikKK2RvX3Rlc3QoVHV0b3JpYWwgNSAiNSBpcyAyLjIzNiIpCitkb190ZXN0KFR1dG9yaWFsIDcgIjcgaXMgMi42NDUiKQorZG9fdGVzdChUdXRvcmlhbCAyNSAiMjUgaXMgNSIpCitkb190ZXN0KFR1dG9yaWFsIC0yNSAiLTI1IGlzIFstbmFufG5hbnwwXSIpCitkb190ZXN0KFR1dG9yaWFsIDAuMDAwMSAiMC4wMDAxIGlzIDAuMDEiKQorCitpbmNsdWRlKEluc3RhbGxSZXF1aXJlZFN5c3RlbUxpYnJhcmllcykKK3NldChDUEFDS19SRVNPVVJDRV9GSUxFX0xJQ0VOU0UgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9MaWNlbnNlLnR4dCIpCitzZXQoQ1BBQ0tfUEFDS0FHRV9WRVJTSU9OX01BSk9SICIke1R1dG9yaWFsX1ZFUlNJT05fTUFKT1J9IikKK3NldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUlOT1IgIiR7VHV0b3JpYWxfVkVSU0lPTl9NSU5PUn0iKQoraW5jbHVkZShDUGFjaykKKworIyBpbnN0YWxsIHRoZSBjb25maWd1cmF0aW9uIHRhcmdldHMKK2luc3RhbGwoRVhQT1JUIE1hdGhGdW5jdGlvbnNUYXJnZXRzCisgIEZJTEUgTWF0aEZ1bmN0aW9uc1RhcmdldHMuY21ha2UKKyAgREVTVElOQVRJT04gbGliL2NtYWtlL01hdGhGdW5jdGlvbnMKKykKKworaW5jbHVkZShDTWFrZVBhY2thZ2VDb25maWdIZWxwZXJzKQorIyBnZW5lcmF0ZSB0aGUgY29uZmlnIGZpbGUgdGhhdCBpcyBpbmNsdWRlcyB0aGUgZXhwb3J0cworY29uZmlndXJlX3BhY2thZ2VfY29uZmlnX2ZpbGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NvbmZpZy5jbWFrZS5pbgorICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01hdGhGdW5jdGlvbnNDb25maWcuY21ha2UiCisgIElOU1RBTExfREVTVElOQVRJT04gImxpYi9jbWFrZS9leGFtcGxlIgorICBOT19TRVRfQU5EX0NIRUNLX01BQ1JPCisgIE5PX0NIRUNLX1JFUVVJUkVEX0NPTVBPTkVOVFNfTUFDUk8KKyAgKQorIyBnZW5lcmF0ZSB0aGUgdmVyc2lvbiBmaWxlIGZvciB0aGUgY29uZmlnIGZpbGUKK3dyaXRlX2Jhc2ljX3BhY2thZ2VfdmVyc2lvbl9maWxlKAorICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01hdGhGdW5jdGlvbnNDb25maWdWZXJzaW9uLmNtYWtlIgorICBWRVJTSU9OICIke1R1dG9yaWFsX1ZFUlNJT05fTUFKT1J9LiR7VHV0b3JpYWxfVkVSU0lPTl9NSU5PUn0iCisgIENPTVBBVElCSUxJVFkgQW55TmV3ZXJWZXJzaW9uCispCisKKyMgaW5zdGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCitpbnN0YWxsKEZJTEVTCisgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9NYXRoRnVuY3Rpb25zQ29uZmlnLmNtYWtlCisgIERFU1RJTkFUSU9OIGxpYi9jbWFrZS9NYXRoRnVuY3Rpb25zCisgICkKKworIyBnZW5lcmF0ZSB0aGUgZXhwb3J0IHRhcmdldHMgZm9yIHRoZSBidWlsZCB0cmVlCisjIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBpbnN0YWxsKFRBUkdFVFMgKSBjb21tYW5kCitleHBvcnQoRVhQT1JUIE1hdGhGdW5jdGlvbnNUYXJnZXRzCisgIEZJTEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9NYXRoRnVuY3Rpb25zVGFyZ2V0cy5jbWFrZSIKKykKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL0NUZXN0Q29uZmlnLmNtYWtlIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ1Rlc3RDb25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlZmRiMQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL0NUZXN0Q29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KENURVNUX1BST0pFQ1RfTkFNRSAiQ01ha2VUdXRvcmlhbCIpCitzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICIwMDowMDowMCBFU1QiKQorCitzZXQoQ1RFU1RfRFJPUF9NRVRIT0QgImh0dHAiKQorc2V0KENURVNUX0RST1BfU0lURSAibXkuY2Rhc2gub3JnIikKK3NldChDVEVTVF9EUk9QX0xPQ0FUSU9OICIvc3VibWl0LnBocD9wcm9qZWN0PUNNYWtlVHV0b3JpYWwiKQorc2V0KENURVNUX0RST1BfU0lURV9DREFTSCBUUlVFKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvQ29uZmlnLmNtYWtlLmluIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ29uZmlnLmNtYWtlLmluCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBIZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9Db25maWcuY21ha2UuaW4KcmVuYW1lIHRvIEhlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL0NvbmZpZy5jbWFrZS5pbgpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTGljZW5zZS50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9MaWNlbnNlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTGljZW5zZS50eHQKcmVuYW1lIHRvIEhlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL0xpY2Vuc2UudHh0CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjBlZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU5IEBACisjIGFkZCB0aGUgbGlicmFyeSB0aGF0IHJ1bnMKK2FkZF9saWJyYXJ5KE1hdGhGdW5jdGlvbnMgTWF0aEZ1bmN0aW9ucy5jeHgpCisKKyMgc3RhdGUgdGhhdCBhbnlib2R5IGxpbmtpbmcgdG8gdXMgbmVlZHMgdG8gaW5jbHVkZSB0aGUgY3VycmVudCBzb3VyY2UgZGlyCisjIHRvIGZpbmQgTWF0aEZ1bmN0aW9ucy5oLCB3aGlsZSB3ZSBkb24ndC4KK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKE1hdGhGdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8QlVJTERfSU5URVJGQUNFOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPElOU1RBTExfSU5URVJGQUNFOmluY2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMgc2hvdWxkIHdlIHVzZSBvdXIgb3duIG1hdGggZnVuY3Rpb25zCitvcHRpb24oVVNFX01ZTUFUSCAiVXNlIHR1dG9yaWFsIHByb3ZpZGVkIG1hdGggaW1wbGVtZW50YXRpb24iIE9OKQoraWYoVVNFX01ZTUFUSCkKKworICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgIlVTRV9NWU1BVEgiKQorCisgICMgZmlyc3Qgd2UgYWRkIHRoZSBleGVjdXRhYmxlIHRoYXQgZ2VuZXJhdGVzIHRoZSB0YWJsZQorICBhZGRfZXhlY3V0YWJsZShNYWtlVGFibGUgTWFrZVRhYmxlLmN4eCkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1ha2VUYWJsZSBQUklWQVRFIHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzKQorCisgICMgYWRkIHRoZSBjb21tYW5kIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2UgY29kZQorICBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9UYWJsZS5oCisgICAgQ09NTUFORCBNYWtlVGFibGUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1RhYmxlLmgKKyAgICBERVBFTkRTIE1ha2VUYWJsZQorICAgICkKKworICAjIGxpYnJhcnkgdGhhdCBqdXN0IGRvZXMgc3FydAorICBhZGRfbGlicmFyeShTcXJ0TGlicmFyeSBTVEFUSUMKKyAgICAgICAgICAgICAgbXlzcXJ0LmN4eAorICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vVGFibGUuaAorICAgICAgICAgICAgICApCisKKyAgIyBzdGF0ZSB0aGF0IHdlIGRlcGVuZCBvbiBvdXIgYmluYXJ5IGRpciB0byBmaW5kIFRhYmxlLmgKKyAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoU3FydExpYnJhcnkgUFJJVkFURQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICMgc3RhdGUgdGhhdCBTcXJ0TGlicmFyeSBuZWVkIFBJQyB3aGVuIHRoZSBkZWZhdWx0IGlzIHNoYXJlZCBsaWJyYXJpZXMKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNxcnRMaWJyYXJ5IFBST1BFUlRJRVMKKyAgICAgICAgICAgICAgICAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgJHtCVUlMRF9TSEFSRURfTElCU30KKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICB0YXJnZXRfbGlua19saWJyYXJpZXMoU3FydExpYnJhcnkgUFVCTElDIHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWF0aEZ1bmN0aW9ucyBQUklWQVRFIFNxcnRMaWJyYXJ5KQorZW5kaWYoKQorCit0YXJnZXRfbGlua19saWJyYXJpZXMoTWF0aEZ1bmN0aW9ucyBQVUJMSUMgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCisKKyMgZGVmaW5lIHRoZSBzeW1ib2wgc3RhdGluZyB3ZSBhcmUgdXNpbmcgdGhlIGRlY2xzcGVjKGRsbGV4cG9ydCkgd2hlbgorIyBidWlsZGluZyBvbiB3aW5kb3dzCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgIkVYUE9SVElOR19NWU1BVEgiKQorCisjIGluc3RhbGwgcnVsZXMKK2luc3RhbGwoVEFSR0VUUyBNYXRoRnVuY3Rpb25zIHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzCisgICAgICAgIERFU1RJTkFUSU9OIGxpYgorICAgICAgICBFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMpCitpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9NYWtlVGFibGUuY3h4IGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9NYWtlVGFibGUuY3h4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBIZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL01ha2VUYWJsZS5jeHgKcmVuYW1lIHRvIEhlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvTWFrZVRhYmxlLmN4eApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9NYXRoRnVuY3Rpb25zLmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5jeHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIEhlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5jeHgKcmVuYW1lIHRvIEhlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5jeHgKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5oIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9NYXRoRnVuY3Rpb25zLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIEhlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5oCnJlbmFtZSB0byBIZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuaApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9teXNxcnQuY3h4IGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9teXNxcnQuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNTNmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL215c3FydC5jeHgKQEAgLTAsMCArMSwzNyBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSAiTWF0aEZ1bmN0aW9ucy5oIgorCisvLyBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgdGFibGUKKyNpbmNsdWRlICJUYWJsZS5oIgorCituYW1lc3BhY2UgbWF0aGZ1bmN0aW9ucyB7CituYW1lc3BhY2UgZGV0YWlsIHsKKy8vIGEgaGFjayBzcXVhcmUgcm9vdCBjYWxjdWxhdGlvbiB1c2luZyBzaW1wbGUgb3BlcmF0aW9ucworZG91YmxlIG15c3FydChkb3VibGUgeCkKK3sKKyAgaWYgKHggPD0gMCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgLy8gdXNlIHRoZSB0YWJsZSB0byBoZWxwIGZpbmQgYW4gaW5pdGlhbCB2YWx1ZQorICBkb3VibGUgcmVzdWx0ID0geDsKKyAgaWYgKHggPj0gMSAmJiB4IDwgMTApIHsKKyAgICBzdGQ6OmNvdXQgPDwgIlVzZSB0aGUgdGFibGUgdG8gaGVscCBmaW5kIGFuIGluaXRpYWwgdmFsdWUgIiA8PCBzdGQ6OmVuZGw7CisgICAgcmVzdWx0ID0gc3FydFRhYmxlW3N0YXRpY19jYXN0PGludD4oeCldOworICB9CisKKyAgLy8gZG8gdGVuIGl0ZXJhdGlvbnMKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgaWYgKHJlc3VsdCA8PSAwKSB7CisgICAgICByZXN1bHQgPSAwLjE7CisgICAgfQorICAgIGRvdWJsZSBkZWx0YSA9IHggLSAocmVzdWx0ICogcmVzdWx0KTsKKyAgICByZXN1bHQgPSByZXN1bHQgKyAwLjUgKiBkZWx0YSAvIHJlc3VsdDsKKyAgICBzdGQ6OmNvdXQgPDwgIkNvbXB1dGluZyBzcXJ0IG9mICIgPDwgeCA8PCAiIHRvIGJlICIgPDwgcmVzdWx0IDw8IHN0ZDo6ZW5kbDsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9Cit9Cit9CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL215c3FydC5oIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9teXNxcnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9teXNxcnQuaApyZW5hbWUgdG8gSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9teXNxcnQuaApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvVHV0b3JpYWxDb25maWcuaC5pbiBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL1R1dG9yaWFsQ29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0ZDdmYQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL1R1dG9yaWFsQ29uZmlnLmguaW4KQEAgLTAsMCArMSwzIEBACisvLyB0aGUgY29uZmlndXJlZCBvcHRpb25zIGFuZCBzZXR0aW5ncyBmb3IgVHV0b3JpYWwKKyNkZWZpbmUgVHV0b3JpYWxfVkVSU0lPTl9NQUpPUiBAVHV0b3JpYWxfVkVSU0lPTl9NQUpPUkAKKyNkZWZpbmUgVHV0b3JpYWxfVkVSU0lPTl9NSU5PUiBAVHV0b3JpYWxfVkVSU0lPTl9NSU5PUkAKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL3R1dG9yaWFsLmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL3R1dG9yaWFsLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGY0NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvdHV0b3JpYWwuY3h4CkBAIC0wLDAgKzEsMjYgQEAKKy8vIEEgc2ltcGxlIHByb2dyYW0gdGhhdCBjb21wdXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJNYXRoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiVHV0b3JpYWxDb25maWcuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgaWYgKGFyZ2MgPCAyKSB7CisgICAgLy8gcmVwb3J0IHZlcnNpb24KKyAgICBzdGQ6OmNvdXQgPDwgYXJndlswXSA8PCAiIFZlcnNpb24gIiA8PCBUdXRvcmlhbF9WRVJTSU9OX01BSk9SIDw8ICIuIgorICAgICAgICAgICAgICA8PCBUdXRvcmlhbF9WRVJTSU9OX01JTk9SIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIlVzYWdlOiAiIDw8IGFyZ3ZbMF0gPDwgIiBudW1iZXIiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIC8vIGNvbnZlcnQgaW5wdXQgdG8gZG91YmxlCisgIGNvbnN0IGRvdWJsZSBpbnB1dFZhbHVlID0gc3RkOjpzdG9kKGFyZ3ZbMV0pOworCisgIGNvbnN0IGRvdWJsZSBvdXRwdXRWYWx1ZSA9IG1hdGhmdW5jdGlvbnM6OnNxcnQoaW5wdXRWYWx1ZSk7CisKKyAgc3RkOjpjb3V0IDw8ICJUaGUgc3F1YXJlIHJvb3Qgb2YgIiA8PCBpbnB1dFZhbHVlIDw8ICIgaXMgIiA8PCBvdXRwdXRWYWx1ZQorICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDYvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDYvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAppbmRleCA0YmY2MDI0Li5mNjRjNmFjIDEwMDY0NAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA2L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwNi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC04LDEwICs4LDIwIEBACiAKICMgZG9lcyB0aGlzIHN5c3RlbSBwcm92aWRlIHRoZSBsb2cgYW5kIGV4cCBmdW5jdGlvbnM/CiBpbmNsdWRlKENoZWNrU3ltYm9sRXhpc3RzKQotc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAibSIpCiBjaGVja19zeW1ib2xfZXhpc3RzKGxvZyAibWF0aC5oIiBIQVZFX0xPRykKIGNoZWNrX3N5bWJvbF9leGlzdHMoZXhwICJtYXRoLmgiIEhBVkVfRVhQKQoraWYoTk9UIChIQVZFX0xPRyBBTkQgSEFWRV9FWFApKQorICB1bnNldChIQVZFX0xPRyBDQUNIRSkKKyAgdW5zZXQoSEFWRV9FWFAgQ0FDSEUpCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgIm0iKQorICBjaGVja19zeW1ib2xfZXhpc3RzKGxvZyAibWF0aC5oIiBIQVZFX0xPRykKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhleHAgIm1hdGguaCIgSEFWRV9FWFApCisgIGlmKEhBVkVfTE9HIEFORCBIQVZFX0VYUCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWF0aEZ1bmN0aW9ucyBQUklWQVRFIG0pCisgIGVuZGlmKCkKK2VuZGlmKCkKIAorIyBhZGQgY29tcGlsZSBkZWZpbml0aW9ucwogaWYoSEFWRV9MT0cgQU5EIEhBVkVfRVhQKQogICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSVZBVEUgIkhBVkVfTE9HIiAiSEFWRV9FWFAiKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL2luZGV4LnJzdAppbmRleCBkNzRkMTYwLi40ZmJjZDRjIDEwMDY0NAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL2luZGV4LnJzdAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL2luZGV4LnJzdApAQCAtNDUsNyArNDUsOCBAQAogdmVyc2lvbiBudW1iZXIuIFdoaWxlIHdlIGNvdWxkIGRvIHRoaXMgZXhjbHVzaXZlbHkgaW4gdGhlIHNvdXJjZSBjb2RlLCB1c2luZwogYGBDTWFrZUxpc3RzLnR4dGBgIHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHkuCiAKLUZpcnN0LCBtb2RpZnkgdGhlIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHRvIHNldCB0aGUgdmVyc2lvbiBudW1iZXIuCitGaXJzdCwgbW9kaWZ5IHRoZSBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSB0byB1c2UgdGhlIDpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kCit0byBzZXQgdGhlIHByb2plY3QgbmFtZSBhbmQgdmVyc2lvbiBudW1iZXIuCiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDIvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQpAQCAtMTAyLDkgKzEwMywxMCBAQAogCiBXZSB3aWxsIG5lZWQgdG8gZXhwbGljaXRseSBzdGF0ZSBpbiB0aGUgQ01ha2UgY29kZSB0aGF0IGl0IHNob3VsZCB1c2UgdGhlCiBjb3JyZWN0IGZsYWdzLiBUaGUgZWFzaWVzdCB3YXkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGEgc3BlY2lmaWMgQysrIHN0YW5kYXJkCi1pbiBDTWFrZSBpcyBieSB1c2luZyB0aGUgYGBDTUFLRV9DWFhfU1RBTkRBUkRgYCB2YXJpYWJsZS4gRm9yIHRoaXMgdHV0b3JpYWwsCi1zZXQgdGhlIGBgQ01BS0VfQ1hYX1NUQU5EQVJEYGAgdmFyaWFibGUgaW4gdGhlIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHRvIDExCi1hbmQgYGBDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRURgYCB0byBUcnVlOgoraW4gQ01ha2UgaXMgYnkgdXNpbmcgdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX1NUQU5EQVJEYCB2YXJpYWJsZS4gRm9yIHRoaXMKK3R1dG9yaWFsLCBzZXQgdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX1NUQU5EQVJEYCB2YXJpYWJsZSBpbiB0aGUKK2BgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHRvIDExIGFuZCA6dmFyaWFibGU6YENNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRGAgdG8KK1RydWU6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDIvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQpAQCAtMTEzLDcgKzExNSw4IEBACiBCdWlsZCBhbmQgVGVzdAogLS0tLS0tLS0tLS0tLS0KIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAorUnVuIHRoZSA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKIHdpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbC4KIAogRm9yIGV4YW1wbGUsIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3ZSBjb3VsZCBuYXZpZ2F0ZSB0byB0aGUKQEAgLTE1NiwxMSArMTU5LDExIEBACiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAzL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQogCi1UbyBtYWtlIHVzZSBvZiB0aGUgbmV3IGxpYnJhcnkgd2Ugd2lsbCBhZGQgYW4gYGBhZGRfc3ViZGlyZWN0b3J5YGAgY2FsbCBpbiB0aGUKLXRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSBzbyB0aGF0IHRoZSBsaWJyYXJ5IHdpbGwgZ2V0IGJ1aWx0LiBXZSBhZGQKLXRoZSBuZXcgbGlicmFyeSB0byB0aGUgZXhlY3V0YWJsZSwgYW5kIGFkZCBgYE1hdGhGdW5jdGlvbnNgYCBhcyBhbiBpbmNsdWRlCi1kaXJlY3Rvcnkgc28gdGhhdCB0aGUgYGBtcXNxcnQuaGBgIGhlYWRlciBmaWxlIGNhbiBiZSBmb3VuZC4gVGhlIGxhc3QgZmV3IGxpbmVzCi1vZiB0aGUgdG9wLWxldmVsIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHNob3VsZCBub3cgbG9vayBsaWtlOgorVG8gbWFrZSB1c2Ugb2YgdGhlIG5ldyBsaWJyYXJ5IHdlIHdpbGwgYWRkIGFuIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YAorY2FsbCBpbiB0aGUgdG9wLWxldmVsIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHNvIHRoYXQgdGhlIGxpYnJhcnkgd2lsbCBnZXQKK2J1aWx0LiBXZSBhZGQgdGhlIG5ldyBsaWJyYXJ5IHRvIHRoZSBleGVjdXRhYmxlLCBhbmQgYWRkIGBgTWF0aEZ1bmN0aW9uc2BgIGFzCithbiBpbmNsdWRlIGRpcmVjdG9yeSBzbyB0aGF0IHRoZSBgYG1xc3FydC5oYGAgaGVhZGVyIGZpbGUgY2FuIGJlIGZvdW5kLiBUaGUKK2xhc3QgZmV3IGxpbmVzIG9mIHRoZSB0b3AtbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUgc2hvdWxkIG5vdyBsb29rIGxpa2U6CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCkBAIC0xODAsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIE5vdyBsZXQgdXMgbWFrZSB0aGUgTWF0aEZ1bmN0aW9ucyBsaWJyYXJ5IG9wdGlvbmFsLiBXaGlsZSBmb3IgdGhlIHR1dG9yaWFsCi10aGVyZSByZWFsbHkgaXNu4oCZdCBhbnkgbmVlZCB0byBkbyBzbywgZm9yIGxhcmdlciBwcm9qZWN0cyB0aGlzIGlzIGEgY29tbW9uCit0aGVyZSByZWFsbHkgaXNuJ3QgYW55IG5lZWQgdG8gZG8gc28sIGZvciBsYXJnZXIgcHJvamVjdHMgdGhpcyBpcyBhIGNvbW1vbgogb2NjdXJyZW5jZS4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gYWRkIGFuIG9wdGlvbiB0byB0aGUgdG9wLWxldmVsCiBgYENNYWtlTGlzdHMudHh0YGAgZmlsZS4KIApAQCAtMTg5LDEwICsxOTIsMTEgQEAKICAgOnN0YXJ0LWFmdGVyOiAjIHNob3VsZCB3ZSB1c2Ugb3VyIG93biBtYXRoIGZ1bmN0aW9ucwogICA6ZW5kLWJlZm9yZTogIyBhZGQgdGhlIE1hdGhGdW5jdGlvbnMgbGlicmFyeQogCi1UaGlzIG9wdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgQ01ha2UgR1VJIGFuZCBjY21ha2Ugd2l0aCBhIGRlZmF1bHQKLXZhbHVlIG9mIE9OIHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIuIFRoaXMgc2V0dGluZyB3aWxsIGJlIHN0b3JlZCBpbgotdGhlIGNhY2hlIHNvIHRoYXQgdGhlIHVzZXIgZG9lcyBub3QgbmVlZCB0byBzZXQgdGhlIHZhbHVlIGVhY2ggdGltZSB0aGV5IHJ1bgotQ01ha2Ugb24gYSBidWlsZCBkaXJlY3RvcnkuCitUaGlzIG9wdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCBhbmQKKzptYW51YWw6YGNjbWFrZSA8Y2NtYWtlKDEpPmAKK3dpdGggYSBkZWZhdWx0IHZhbHVlIG9mIE9OIHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIuIFRoaXMgc2V0dGluZyB3aWxsCitiZSBzdG9yZWQgaW4gdGhlIGNhY2hlIHNvIHRoYXQgdGhlIHVzZXIgZG9lcyBub3QgbmVlZCB0byBzZXQgdGhlIHZhbHVlIGVhY2gKK3RpbWUgdGhleSBydW4gQ01ha2Ugb24gYSBidWlsZCBkaXJlY3RvcnkuCiAKIFRoZSBuZXh0IGNoYW5nZSBpcyB0byBtYWtlIGJ1aWxkaW5nIGFuZCBsaW5raW5nIHRoZSBNYXRoRnVuY3Rpb25zIGxpYnJhcnkKIGNvbmRpdGlvbmFsLiBUbyBkbyB0aGlzIHdlIGNoYW5nZSB0aGUgZW5kIG9mIHRoZSB0b3AtbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgCkBAIC0yMzQsMTEgKzIzOCwxMyBAQAogKipFeGVyY2lzZSoqOiBXaHkgaXMgaXQgaW1wb3J0YW50IHRoYXQgd2UgY29uZmlndXJlIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgCiBhZnRlciB0aGUgb3B0aW9uIGZvciBgYFVTRV9NWU1BVEhgYD8gV2hhdCB3b3VsZCBoYXBwZW4gaWYgd2UgaW52ZXJ0ZWQgdGhlIHR3bz8KIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAorUnVuIHRoZSA6bWFudWFsOmBjbWFrZSAgPGNtYWtlKDEpPmAgZXhlY3V0YWJsZSBvciB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0IGFuZCB0aGVuIGJ1aWxkIGl0CiB3aXRoIHlvdXIgY2hvc2VuIGJ1aWxkIHRvb2wuIFRoZW4gcnVuIHRoZSBidWlsdCBUdXRvcmlhbCBleGVjdXRhYmxlLgogCi1Vc2UgY2NtYWtlIG9yIHRoZSBDTWFrZSBHVUkgdG8gdXBkYXRlIHRoZSB2YWx1ZSBvZiBgYFVTRV9NWU1BVEhgYC4gUmVidWlsZCBhbmQKLXJ1biB0aGUgdHV0b3JpYWwgYWdhaW4uIFdoaWNoIGZ1bmN0aW9uIGdpdmVzIGJldHRlciByZXN1bHRzLCBzcXJ0IG9yIG15c3FydD8KK1VzZSB0aGUgOm1hbnVhbDpgY2NtYWtlIDxjY21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZSA6bWFudWFsOmBjbWFrZS1ndWkgPGNtYWtlLWd1aSgxKT5gCit0byB1cGRhdGUgdGhlIHZhbHVlIG9mIGBgVVNFX01ZTUFUSGBgLiBSZWJ1aWxkIGFuZCBydW4gdGhlIHR1dG9yaWFsIGFnYWluLgorV2hpY2ggZnVuY3Rpb24gZ2l2ZXMgYmV0dGVyIHJlc3VsdHMsIHNxcnQgb3IgbXlzcXJ0PwogCiBBZGRpbmcgVXNhZ2UgUmVxdWlyZW1lbnRzIGZvciBMaWJyYXJ5IChTdGVwIDMpCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNDgsMTkgKzI1NCwyMCBAQAogcHJvcGVydHkgb2YgdGFyZ2V0cyBpbnNpZGUgQ01ha2UuIFRoZSBwcmltYXJ5IGNvbW1hbmRzIHRoYXQgbGV2ZXJhZ2UgdXNhZ2UKIHJlcXVpcmVtZW50cyBhcmU6CiAKLSAgLSBgYHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zYGAKLSAgLSBgYHRhcmdldF9jb21waWxlX29wdGlvbnNgYAotICAtIGBgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNgYAotICAtIGBgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYGAKKyAgLSA6Y29tbWFuZDpgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnNgCisgIC0gOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX29wdGlvbnNgCisgIC0gOmNvbW1hbmQ6YHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzYAorICAtIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgCiAKIExldCdzIHJlZmFjdG9yIG91ciBjb2RlIGZyb20gYEFkZGluZyBhIExpYnJhcnkgKFN0ZXAgMilgXyB0byB1c2UgdGhlIG1vZGVybgogQ01ha2UgYXBwcm9hY2ggb2YgdXNhZ2UgcmVxdWlyZW1lbnRzLiBXZSBmaXJzdCBzdGF0ZSB0aGF0IGFueWJvZHkgbGlua2luZyB0bwogTWF0aEZ1bmN0aW9ucyBuZWVkcyB0byBpbmNsdWRlIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnksIHdoaWxlCi1NYXRoRnVuY3Rpb25zIGl0c2VsZiBkb2Vzbid0LiBTbyAgdGhpcyBjYW4gYmVjb21lIGFuIGBgSU5URVJGQUNFYGAgdXNhZ2UKK01hdGhGdW5jdGlvbnMgaXRzZWxmIGRvZXNuJ3QuIFNvIHRoaXMgY2FuIGJlY29tZSBhbiBgYElOVEVSRkFDRWBgIHVzYWdlCiByZXF1aXJlbWVudC4KIAogUmVtZW1iZXIgYGBJTlRFUkZBQ0VgYCBtZWFucyB0aGluZ3MgdGhhdCBjb25zdW1lcnMgcmVxdWlyZSBidXQgdGhlIHByb2R1Y2VyCi1kb2Vzbid0LiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB0aGUgZW5kIG9mIGBgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgOgorZG9lc24ndC4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gdGhlIGVuZCBvZgorYGBNYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0YGA6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDQvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCkBAIC0yODEsOSArMjg4LDEwIEBACiAgIDpsYW5ndWFnZTogY21ha2UKICAgOnN0YXJ0LWFmdGVyOiAjIHNvIHRoYXQgd2Ugd2lsbCBmaW5kIFR1dG9yaWFsQ29uZmlnLmgKIAotT25jZSB0aGlzIGlzIGRvbmUsIHJ1biAqKmNtYWtlKiogb3IgKipjbWFrZS1ndWkqKiB0byBjb25maWd1cmUgdGhlIHByb2plY3QKLWFuZCB0aGVuIGJ1aWxkIGl0IHdpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbCBvciBieSB1c2luZyBgYGNtYWtlIC0tYnVpbGQgLmBgCi1mcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCitPbmNlIHRoaXMgaXMgZG9uZSwgcnVuIHRoZSA6bWFudWFsOmBjbWFrZSAgPGNtYWtlKDEpPmAgZXhlY3V0YWJsZSBvciB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0IGFuZCB0aGVuIGJ1aWxkIGl0Cit3aXRoIHlvdXIgY2hvc2VuIGJ1aWxkIHRvb2wgb3IgYnkgdXNpbmcgYGBjbWFrZSAtLWJ1aWxkIC5gYCBmcm9tIHRoZSBidWlsZAorZGlyZWN0b3J5LgogCiBJbnN0YWxsaW5nIGFuZCBUZXN0aW5nIChTdGVwIDQpCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zMTIsMTYgKzMyMCwxNyBAQAogCiBUaGF0IGlzIGFsbCB0aGF0IGlzIG5lZWRlZCB0byBjcmVhdGUgYSBiYXNpYyBsb2NhbCBpbnN0YWxsIG9mIHRoZSB0dXRvcmlhbC4KIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAotd2l0aCB5b3VyIGNob3NlbiBidWlsZCB0b29sLiBSdW4gdGhlIGluc3RhbGwgc3RlcCBieSB0eXBpbmcKLWBgY21ha2UgLS1pbnN0YWxsIC5gYCAoaW50cm9kdWNlZCBpbiAzLjE1LCBvbGRlciB2ZXJzaW9ucyBvZiBDTWFrZSBtdXN0IHVzZQotYGBtYWtlIGluc3RhbGxgYCkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBvciBidWlsZCB0aGUgYGBJTlNUQUxMYGAgdGFyZ2V0IGZyb20KLWFuIElERS4gVGhpcyB3aWxsIGluc3RhbGwgdGhlIGFwcHJvcHJpYXRlIGhlYWRlciBmaWxlcywgbGlicmFyaWVzLCBhbmQKLWV4ZWN1dGFibGVzLgorUnVuIHRoZSA6bWFudWFsOmBjbWFrZSAgPGNtYWtlKDEpPmAgZXhlY3V0YWJsZSBvciB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0IGFuZCB0aGVuIGJ1aWxkIGl0Cit3aXRoIHlvdXIgY2hvc2VuIGJ1aWxkIHRvb2wuIFJ1biB0aGUgaW5zdGFsbCBzdGVwIGJ5IHVzaW5nIHRoZSBgYGluc3RhbGxgYAorb3B0aW9uIG9mIHRoZSA6bWFudWFsOmBjbWFrZSAgPGNtYWtlKDEpPmAgY29tbWFuZCAoaW50cm9kdWNlZCBpbiAzLjE1LCBvbGRlcgordmVyc2lvbnMgb2YgQ01ha2UgbXVzdCB1c2UgYGBtYWtlIGluc3RhbGxgYCkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBvciBidWlsZAordGhlIGBgSU5TVEFMTGBgIHRhcmdldCBmcm9tIGFuIElERS4gVGhpcyB3aWxsIGluc3RhbGwgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcgorZmlsZXMsIGxpYnJhcmllcywgYW5kIGV4ZWN1dGFibGVzLgogCi1UaGUgQ01ha2UgdmFyaWFibGUgYGBDTUFLRV9JTlNUQUxMX1BSRUZJWGBgIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByb290IG9mCi13aGVyZSB0aGUgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQuIElmIHVzaW5nIGBgY21ha2UgLS1pbnN0YWxsYGAgYSBjdXN0b20KLWluc3RhbGxhdGlvbiBkaXJlY3RvcnkgY2FuIGJlIGdpdmVuIHZpYSBgYC0tcHJlZml4YGAgYXJndW1lbnQuIEZvcgorVGhlIENNYWtlIHZhcmlhYmxlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQorcm9vdCBvZiB3aGVyZSB0aGUgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQuIElmIHVzaW5nIGBgY21ha2UgLS1pbnN0YWxsYGAgYQorY3VzdG9tIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgY2FuIGJlIGdpdmVuIHZpYSB0aGUgYGAtLXByZWZpeGBgIGFyZ3VtZW50LiBGb3IKIG11bHRpLWNvbmZpZ3VyYXRpb24gdG9vbHMsIHVzZSB0aGUgYGAtLWNvbmZpZ2BgIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlCiBjb25maWd1cmF0aW9uLgogCkBAIC0zMzksMjUgKzM0OCwyNSBAQAogICA6c3RhcnQtYWZ0ZXI6ICMgZW5hYmxlIHRlc3RpbmcKIAogVGhlIGZpcnN0IHRlc3Qgc2ltcGx5IHZlcmlmaWVzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHJ1bnMsIGRvZXMgbm90IHNlZ2ZhdWx0IG9yCi1vdGhlcndpc2UgY3Jhc2gsIGFuZCBoYXMgYSB6ZXJvIHJldHVybiB2YWx1ZS4gVGhpcyBpcyB0aGUgYmFzaWMgZm9ybSBvZiBhIENUZXN0Ci10ZXN0Lgorb3RoZXJ3aXNlIGNyYXNoLCBhbmQgaGFzIGEgemVybyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgdGhlIGJhc2ljIGZvcm0gb2YgYQorQ1Rlc3QgdGVzdC4KIAotVGhlIG5leHQgdGVzdCBtYWtlcyB1c2Ugb2YgdGhlIGBgUEFTU19SRUdVTEFSX0VYUFJFU1NJT05gYCB0ZXN0IHByb3BlcnR5IHRvCi12ZXJpZnkgdGhhdCB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IGNvbnRhaW5zIGNlcnRhaW4gc3RyaW5ncy4gSW4gdGhpcyBjYXNlLAotdmVyaWZ5aW5nIHRoYXQgdGhlIHVzYWdlIG1lc3NhZ2UgaXMgcHJpbnRlZCB3aGVuIGFuIGluY29ycmVjdCBudW1iZXIgb2YKLWFyZ3VtZW50cyBhcmUgcHJvdmlkZWQuCitUaGUgbmV4dCB0ZXN0IG1ha2VzIHVzZSBvZiB0aGUgOnByb3BfdGVzdDpgUEFTU19SRUdVTEFSX0VYUFJFU1NJT05gIHRlc3QKK3Byb3BlcnR5IHRvIHZlcmlmeSB0aGF0IHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QgY29udGFpbnMgY2VydGFpbiBzdHJpbmdzLiBJbgordGhpcyBjYXNlLCB2ZXJpZnlpbmcgdGhhdCB0aGUgdXNhZ2UgbWVzc2FnZSBpcyBwcmludGVkIHdoZW4gYW4gaW5jb3JyZWN0IG51bWJlcgorb2YgYXJndW1lbnRzIGFyZSBwcm92aWRlZC4KIAogTGFzdGx5LCB3ZSBoYXZlIGEgZnVuY3Rpb24gY2FsbGVkIGBgZG9fdGVzdGBgIHRoYXQgcnVucyB0aGUgYXBwbGljYXRpb24gYW5kCiB2ZXJpZmllcyB0aGF0IHRoZSBjb21wdXRlZCBzcXVhcmUgcm9vdCBpcyBjb3JyZWN0IGZvciBnaXZlbiBpbnB1dC4gRm9yIGVhY2gKIGludm9jYXRpb24gb2YgYGBkb190ZXN0YGAsIGFub3RoZXIgdGVzdCBpcyBhZGRlZCB0byB0aGUgcHJvamVjdCB3aXRoIGEgbmFtZSwKIGlucHV0LCBhbmQgZXhwZWN0ZWQgcmVzdWx0cyBiYXNlZCBvbiB0aGUgcGFzc2VkIGFyZ3VtZW50cy4KIAotUmVidWlsZCB0aGUgYXBwbGljYXRpb24gYW5kIHRoZW4gY2QgdG8gdGhlIGJpbmFyeSBkaXJlY3RvcnkgYW5kIHJ1bgotYGBjdGVzdCAtTmBgIGFuZCBgYGN0ZXN0IC1WVmBgLiBGb3IgbXVsdGktY29uZmlnIGdlbmVyYXRvcnMgKGUuZy4gVmlzdWFsCi1TdHVkaW8pLCB0aGUgY29uZmlndXJhdGlvbiB0eXBlIG11c3QgYmUgc3BlY2lmaWVkLiBUbyBydW4gdGVzdHMgaW4gRGVidWcgbW9kZSwKLWZvciBleGFtcGxlLCB1c2UgYGBjdGVzdCAtQyBEZWJ1ZyAtVlZgYCBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkgKG5vdCB0aGUKLURlYnVnIHN1YmRpcmVjdG9yeSEpLiBBbHRlcm5hdGl2ZWx5LCBidWlsZCB0aGUgYGBSVU5fVEVTVFNgYCB0YXJnZXQgZnJvbSB0aGUKLUlERS4KK1JlYnVpbGQgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGVuIGNkIHRvIHRoZSBiaW5hcnkgZGlyZWN0b3J5IGFuZCBydW4gdGhlCis6bWFudWFsOmBjdGVzdCA8Y3Rlc3QoMSk+YCBleGVjdXRhYmxlOiBgYGN0ZXN0IC1OYGAgYW5kIGBgY3Rlc3QgLVZWYGAuIEZvcgorbXVsdGktY29uZmlnIGdlbmVyYXRvcnMgKGUuZy4gVmlzdWFsIFN0dWRpbyksIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgbXVzdCBiZQorc3BlY2lmaWVkLiBUbyBydW4gdGVzdHMgaW4gRGVidWcgbW9kZSwgZm9yIGV4YW1wbGUsIHVzZSBgYGN0ZXN0IC1DIERlYnVnIC1WVmBgCitmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkgKG5vdCB0aGUgRGVidWcgc3ViZGlyZWN0b3J5ISkuIEFsdGVybmF0aXZlbHksIGJ1aWxkCit0aGUgYGBSVU5fVEVTVFNgYCB0YXJnZXQgZnJvbSB0aGUgSURFLgogCiBBZGRpbmcgU3lzdGVtIEludHJvc3BlY3Rpb24gKFN0ZXAgNSkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzcwLDE0ICszNzksMTQgQEAKIAogSWYgdGhlIHBsYXRmb3JtIGhhcyBgYGxvZ2BgIGFuZCBgYGV4cGBgIHRoZW4gd2Ugd2lsbCB1c2UgdGhlbSB0byBjb21wdXRlIHRoZQogc3F1YXJlIHJvb3QgaW4gdGhlIGBgbXlzcXJ0YGAgZnVuY3Rpb24uIFdlIGZpcnN0IHRlc3QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YKLXRoZXNlIGZ1bmN0aW9ucyB1c2luZyB0aGUgYGBDaGVja1N5bWJvbEV4aXN0c2BgIG1vZHVsZSBpbiB0aGUgdG9wLWxldmVsCit0aGVzZSBmdW5jdGlvbnMgdXNpbmcgdGhlIDptb2R1bGU6YENoZWNrU3ltYm9sRXhpc3RzYCBtb2R1bGUgaW4gdGhlIHRvcC1sZXZlbAogYGBDTWFrZUxpc3RzLnR4dGBgLiBXZSdyZSBnb2luZyB0byB1c2UgdGhlIG5ldyBkZWZpbmVzIGluCiBgYFR1dG9yaWFsQ29uZmlnLmguaW5gYCwgc28gYmUgc3VyZSB0byBzZXQgdGhlbSBiZWZvcmUgdGhhdCBmaWxlIGlzIGNvbmZpZ3VyZWQuCiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDYvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBkb2VzIHRoaXMgc3lzdGVtIHByb3ZpZGUgdGhlIGxvZyBhbmQgZXhwIGZ1bmN0aW9ucz8KLSAgOmVuZC1iZWZvcmU6IGlmKEhBVkVfTE9HIEFORCBIQVZFX0VYUCkKKyAgOmVuZC1iZWZvcmU6ICMgYWRkIGNvbXBpbGUgZGVmaW5pdGlvbnMKIAogTm93IGxldCdzIGFkZCB0aGVzZSBkZWZpbmVzIHRvIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtCiBmcm9tIGBgbXlzcXJ0LmN4eGBgOgpAQCAtMzg4LDIyICszOTcsMjkgQEAKICAgI2NtYWtlZGVmaW5lIEhBVkVfTE9HCiAgICNjbWFrZWRlZmluZSBIQVZFX0VYUAogCi1Nb2RpZnkgYGBteXNxcnQuY3h4YGAgdG8gaW5jbHVkZSBjbWF0aC4gTmV4dCwgaW4gdGhhdCBzYW1lIGZpbGUgaW4gdGhlCi1gYG15c3FydGBgIGZ1bmN0aW9uIHdlIGNhbiBwcm92aWRlIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbgotYGBsb2dgYCBhbmQgYGBleHBgYCBpZiB0aGV5IGFyZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSB1c2luZyB0aGUgZm9sbG93aW5nCi1jb2RlIChkb24ndCBmb3JnZXQgdGhlIGBgI2VuZGlmYGAgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzdWx0ISk6CitJZiBgYGxvZ2BgIGFuZCBgYGV4cGBgIGFyZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSwgdGhlbiB3ZSB3aWxsIHVzZSB0aGVtIHRvCitjb21wdXRlIHRoZSBzcXVhcmUgcm9vdCBpbiB0aGUgYGBteXNxcnRgYCBmdW5jdGlvbi4gQWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0bwordGhlIGBgbXlzcXJ0YGAgZnVuY3Rpb24gaW4gYGBNYXRoRnVuY3Rpb25zL215c3FydC5jeHhgYCAoZG9uJ3QgZm9yZ2V0IHRoZQorYGAjZW5kaWZgYCBiZWZvcmUgcmV0dXJuaW5nIHRoZSByZXN1bHQhKToKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwNi9NYXRoRnVuY3Rpb25zL215c3FydC5jeHgKICAgOmxhbmd1YWdlOiBjKysKICAgOnN0YXJ0LWFmdGVyOiAvLyBpZiB3ZSBoYXZlIGJvdGggbG9nIGFuZCBleHAgdGhlbiB1c2UgdGhlbQogICA6ZW5kLWJlZm9yZTogLy8gZG8gdGVuIGl0ZXJhdGlvbnMKIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAorV2Ugd2lsbCBhbHNvIG5lZWQgdG8gbW9kaWZ5IGBgbXlzcXJ0LmN4eGBgIHRvIGluY2x1ZGUgYGBjbWF0aGBgLgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXA2L01hdGhGdW5jdGlvbnMvbXlzcXJ0LmN4eAorICA6bGFuZ3VhZ2U6IGMrKworICA6ZW5kLWJlZm9yZTogI2luY2x1ZGUgPGlvc3RyZWFtPgorCitSdW4gdGhlIDptYW51YWw6YGNtYWtlICA8Y21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKIHdpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbCBhbmQgcnVuIHRoZSBUdXRvcmlhbCBleGVjdXRhYmxlLgogCiBZb3Ugd2lsbCBub3RpY2UgdGhhdCB3ZSdyZSBub3QgdXNpbmcgYGBsb2dgYCBhbmQgYGBleHBgYCwgZXZlbiBpZiB3ZSB0aGluayB0aGV5Ci1zaG91bGQgYmUgYXZhaWxhYmxlLiBXZSBzaG91bGQgcmVhbGl6ZSBxdWlja2x5IHRoYXQgd2UgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW5jbHVkZQotYGBUdXRvcmlhbENvbmZpZy5oYGAgaW4gYGBteXNxcnQuY3h4YGAuCitzaG91bGQgYmUgYXZhaWxhYmxlLiBXZSBzaG91bGQgcmVhbGl6ZSBxdWlja2x5IHRoYXQgd2UgaGF2ZSBmb3Jnb3R0ZW4gdG8KK2luY2x1ZGUgYGBUdXRvcmlhbENvbmZpZy5oYGAgaW4gYGBteXNxcnQuY3h4YGAuCiAKIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSBgYE1hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHRgYCBzbyBgYG15c3FydC5jeHhgYAoga25vd3Mgd2hlcmUgdGhpcyBmaWxlIGlzIGxvY2F0ZWQ6CkBAIC00MTUsMTAgKzQzMSwxMCBAQAogICAgICAgICAgICAgUFJJVkFURSAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgICAgICAgICApCiAKLUFmdGVyIG1ha2luZyB0aGlzIHVwZGF0ZSwgZ28gYWhlYWQgYW5kIGJ1aWxkIHRoZSBwcm9qZWN0IGFnYWluIGFuZCBydW4gdGhlIGJ1aWx0Ci1UdXRvcmlhbCBleGVjdXRhYmxlLiBJZiBgYGxvZ2BgIGFuZCBgYGV4cGBgIGFyZSBzdGlsbCBub3QgYmVpbmcgdXNlZCwgb3BlbiB0aGUKLWdlbmVyYXRlZCBgYFR1dG9yaWFsQ29uZmlnLmhgYCBmaWxlIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gTWF5YmUgdGhleSBhcmVuJ3QKLWF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBzeXN0ZW0/CitBZnRlciBtYWtpbmcgdGhpcyB1cGRhdGUsIGdvIGFoZWFkIGFuZCBidWlsZCB0aGUgcHJvamVjdCBhZ2FpbiBhbmQgcnVuIHRoZQorYnVpbHQgVHV0b3JpYWwgZXhlY3V0YWJsZS4gSWYgYGBsb2dgYCBhbmQgYGBleHBgYCBhcmUgc3RpbGwgbm90IGJlaW5nIHVzZWQsCitvcGVuIHRoZSBnZW5lcmF0ZWQgYGBUdXRvcmlhbENvbmZpZy5oYGAgZmlsZSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuIE1heWJlCit0aGV5IGFyZW4ndCBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgc3lzdGVtPwogCiBXaGljaCBmdW5jdGlvbiBnaXZlcyBiZXR0ZXIgcmVzdWx0cyBub3csIHNxcnQgb3IgbXlzcXJ0PwogCkBAIC00MjcsNyArNDQzLDcgQEAKIAogSXMgdGhlcmUgYSBiZXR0ZXIgcGxhY2UgZm9yIHVzIHRvIHNhdmUgdGhlIGBgSEFWRV9MT0dgYCBhbmQgYGBIQVZFX0VYUGBgIHZhbHVlcwogb3RoZXIgdGhhbiBpbiBgYFR1dG9yaWFsQ29uZmlnLmhgYD8gTGV0J3MgdHJ5IHRvIHVzZQotYGB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc2BgLgorOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zYC4KIAogRmlyc3QsIHJlbW92ZSB0aGUgZGVmaW5lcyBmcm9tIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgLiBXZSBubyBsb25nZXIgbmVlZCB0bwogaW5jbHVkZSBgYFR1dG9yaWFsQ29uZmlnLmhgYCBmcm9tIGBgbXlzcXJ0LmN4eGBgIG9yIHRoZSBleHRyYSBpbmNsdWRlIGluCkBAIC00NjAsOCArNDc2LDggQEAKIGBgSEFWRV9FWFBgYCBmcm9tIGBgbXlzcXJ0LmN4eGBgLiBBdCB0aGUgc2FtZSB0aW1lLCB3ZSBjYW4gcmVtb3ZlCiA6Y29kZTpgI2luY2x1ZGUgPGNtYXRoPmAuCiAKLUluIHRoZSBgYE1hdGhGdW5jdGlvbnNgYCBzdWJkaXJlY3RvcnksIGEgbmV3IHNvdXJjZSBmaWxlIG5hbWVkIGBgTWFrZVRhYmxlLmN4eGBgCi1oYXMgYmVlbiBwcm92aWRlZCB0byBnZW5lcmF0ZSB0aGUgdGFibGUuCitJbiB0aGUgYGBNYXRoRnVuY3Rpb25zYGAgc3ViZGlyZWN0b3J5LCBhIG5ldyBzb3VyY2UgZmlsZSBuYW1lZAorYGBNYWtlVGFibGUuY3h4YGAgaGFzIGJlZW4gcHJvdmlkZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlLgogCiBBZnRlciByZXZpZXdpbmcgdGhlIGZpbGUsIHdlIGNhbiBzZWUgdGhhdCB0aGUgdGFibGUgaXMgcHJvZHVjZWQgYXMgdmFsaWQgQysrCiBjb2RlIGFuZCB0aGF0IHRoZSBvdXRwdXQgZmlsZW5hbWUgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LgpAQCAtNTEwLDcgKzUyNiw4IEBACiAgIDpsYW5ndWFnZTogYysrCiAgIDpzdGFydC1hZnRlcjogLy8gYSBoYWNrIHNxdWFyZSByb290IGNhbGN1bGF0aW9uIHVzaW5nIHNpbXBsZSBvcGVyYXRpb25zCiAKLVJ1biAqKmNtYWtlKiogb3IgKipjbWFrZS1ndWkqKiB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKK1J1biB0aGUgOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGV4ZWN1dGFibGUgb3IgdGhlCis6bWFudWFsOmBjbWFrZS1ndWkgPGNtYWtlLWd1aSgxKT5gIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAogd2l0aCB5b3VyIGNob3NlbiBidWlsZCB0b29sLgogCiBXaGVuIHRoaXMgcHJvamVjdCBpcyBidWlsdCBpdCB3aWxsIGZpcnN0IGJ1aWxkIHRoZSBgYE1ha2VUYWJsZWBgIGV4ZWN1dGFibGUuCkBAIC01MzAsMjYgKzU0NywyOCBAQAogaW5zdGFsbGluZyB0aGUgYmluYXJpZXMgdGhhdCB3ZSBoYWQgYnVpbHQgZnJvbSB0aGUgc291cmNlIGNvZGUuIEluIHRoaXMKIGV4YW1wbGUgd2Ugd2lsbCBiZSBidWlsZGluZyBpbnN0YWxsYXRpb24gcGFja2FnZXMgdGhhdCBzdXBwb3J0IGJpbmFyeQogaW5zdGFsbGF0aW9ucyBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBUbyBhY2NvbXBsaXNoIHRoaXMgd2Ugd2lsbCB1c2UKLUNQYWNrIHRvIGNyZWF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbnN0YWxsZXJzLiBTcGVjaWZpY2FsbHkgd2UgbmVlZCB0byBhZGQKLWEgZmV3IGxpbmVzIHRvIHRoZSBib3R0b20gb2Ygb3VyIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZS4KK0NQYWNrIHRvIGNyZWF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbnN0YWxsZXJzLiBTcGVjaWZpY2FsbHkgd2UgbmVlZCB0byBhZGQgYQorZmV3IGxpbmVzIHRvIHRoZSBib3R0b20gb2Ygb3VyIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZS4KIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwOC9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBzZXR1cCBpbnN0YWxsZXIKIAogVGhhdCBpcyBhbGwgdGhlcmUgaXMgdG8gaXQuIFdlIHN0YXJ0IGJ5IGluY2x1ZGluZwotYGBJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXNgYC4gVGhpcyBtb2R1bGUgd2lsbCBpbmNsdWRlIGFueSBydW50aW1lCi1saWJyYXJpZXMgdGhhdCBhcmUgbmVlZGVkIGJ5IHRoZSBwcm9qZWN0IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4gTmV4dCB3ZQotc2V0IHNvbWUgQ1BhY2sgdmFyaWFibGVzIHRvIHdoZXJlIHdlIGhhdmUgc3RvcmVkIHRoZSBsaWNlbnNlIGFuZCB2ZXJzaW9uCis6bW9kdWxlOmBJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXNgLiBUaGlzIG1vZHVsZSB3aWxsIGluY2x1ZGUgYW55IHJ1bnRpbWUKK2xpYnJhcmllcyB0aGF0IGFyZSBuZWVkZWQgYnkgdGhlIHByb2plY3QgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBOZXh0IHdlIHNldAorc29tZSBDUGFjayB2YXJpYWJsZXMgdG8gd2hlcmUgd2UgaGF2ZSBzdG9yZWQgdGhlIGxpY2Vuc2UgYW5kIHZlcnNpb24KIGluZm9ybWF0aW9uIGZvciB0aGlzIHByb2plY3QuIFRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIHdhcyBzZXQgZWFybGllciBpbiB0aGlzCiB0dXRvcmlhbCBhbmQgdGhlIGBgbGljZW5zZS50eHRgYCBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgdG9wLWxldmVsIHNvdXJjZQogZGlyZWN0b3J5IGZvciB0aGlzIHN0ZXAuCiAKLUZpbmFsbHkgd2UgaW5jbHVkZSB0aGUgQ1BhY2sgbW9kdWxlIHdoaWNoIHdpbGwgdXNlIHRoZXNlIHZhcmlhYmxlcyBhbmQgc29tZQotb3RoZXIgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBzeXN0ZW0gdG8gc2V0dXAgYW4gaW5zdGFsbGVyLgorRmluYWxseSB3ZSBpbmNsdWRlIHRoZSA6bW9kdWxlOmBDUGFjayBtb2R1bGUgPENQYWNrPmAgd2hpY2ggd2lsbCB1c2UgdGhlc2UKK3ZhcmlhYmxlcyBhbmQgc29tZSBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0byBzZXR1cCBhbgoraW5zdGFsbGVyLgogCi1UaGUgbmV4dCBzdGVwIGlzIHRvIGJ1aWxkIHRoZSBwcm9qZWN0IGluIHRoZSB1c3VhbCBtYW5uZXIgYW5kIHRoZW4gcnVuCi1DUGFjayBvbiBpdC4gVG8gYnVpbGQgYSBiaW5hcnkgZGlzdHJpYnV0aW9uLCBmcm9tIHRoZSBiaW5hcnkgZGlyZWN0b3J5IHJ1bjoKK1RoZSBuZXh0IHN0ZXAgaXMgdG8gYnVpbGQgdGhlIHByb2plY3QgaW4gdGhlIHVzdWFsIG1hbm5lciBhbmQgdGhlbiBydW4gdGhlCis6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBleGVjdXRhYmxlLiBUbyBidWlsZCBhIGJpbmFyeSBkaXN0cmlidXRpb24sIGZyb20gdGhlCitiaW5hcnkgZGlyZWN0b3J5IHJ1bjoKIAogLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKIApAQCAtNTcxLDE2ICs1OTAsMTcgQEAKIEFsdGVybmF0aXZlbHksIHJ1biBgYG1ha2UgcGFja2FnZWBgIG9yIHJpZ2h0IGNsaWNrIHRoZSBgYFBhY2thZ2VgYCB0YXJnZXQgYW5kCiBgYEJ1aWxkIFByb2plY3RgYCBmcm9tIGFuIElERS4KIAotUnVuIHRoZSBpbnN0YWxsZXIgZm91bmQgaW4gdGhlIGJpbmFyeSBkaXJlY3RvcnkuIFRoZW4gcnVuIHRoZQotaW5zdGFsbGVkIGV4ZWN1dGFibGUgYW5kIHZlcmlmeSB0aGF0IGl0IHdvcmtzLgorUnVuIHRoZSBpbnN0YWxsZXIgZm91bmQgaW4gdGhlIGJpbmFyeSBkaXJlY3RvcnkuIFRoZW4gcnVuIHRoZSBpbnN0YWxsZWQKK2V4ZWN1dGFibGUgYW5kIHZlcmlmeSB0aGF0IGl0IHdvcmtzLgogCiBBZGRpbmcgU3VwcG9ydCBmb3IgYSBEYXNoYm9hcmQgKFN0ZXAgOCkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1BZGRpbmcgc3VwcG9ydCBmb3Igc3VibWl0dGluZyBvdXIgdGVzdCByZXN1bHRzIHRvIGEgZGFzaGJvYXJkIGlzIHZlcnkgZWFzeS4gV2UKK0FkZGluZyBzdXBwb3J0IGZvciBzdWJtaXR0aW5nIG91ciB0ZXN0IHJlc3VsdHMgdG8gYSBkYXNoYm9hcmQgaXMgc2ltcGxlLiBXZQogYWxyZWFkeSBkZWZpbmVkIGEgbnVtYmVyIG9mIHRlc3RzIGZvciBvdXIgcHJvamVjdCBpbiBgVGVzdGluZyBTdXBwb3J0YF8uIE5vdyB3ZQoganVzdCBoYXZlIHRvIHJ1biB0aG9zZSB0ZXN0cyBhbmQgc3VibWl0IHRoZW0gdG8gYSBkYXNoYm9hcmQuIFRvIGluY2x1ZGUgc3VwcG9ydAotZm9yIGRhc2hib2FyZHMgd2UgaW5jbHVkZSB0aGUgQ1Rlc3QgbW9kdWxlIGluIG91ciB0b3AtbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgLgorZm9yIGRhc2hib2FyZHMgd2UgaW5jbHVkZSB0aGUgOm1vZHVsZTpgQ1Rlc3RgIG1vZHVsZSBpbiBvdXIgdG9wLWxldmVsCitgYENNYWtlTGlzdHMudHh0YGAuCiAKIFJlcGxhY2U6CiAKQEAgLTU5Niw4ICs2MTYsOCBAQAogICAjIGVuYWJsZSBkYXNoYm9hcmQgc2NyaXB0aW5nCiAgIGluY2x1ZGUoQ1Rlc3QpCiAKLVRoZSBDVGVzdCBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgYGBlbmFibGVfdGVzdGluZygpYGAsIHNvCi13ZSBjYW4gcmVtb3ZlIGl0IGZyb20gb3VyIENNYWtlIGZpbGVzLgorVGhlIDptb2R1bGU6YENUZXN0YCBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgYGBlbmFibGVfdGVzdGluZygpYGAsIHNvIHdlCitjYW4gcmVtb3ZlIGl0IGZyb20gb3VyIENNYWtlIGZpbGVzLgogCiBXZSB3aWxsIGFsc28gbmVlZCB0byBjcmVhdGUgYSBgYENUZXN0Q29uZmlnLmNtYWtlYGAgZmlsZSBpbiB0aGUgdG9wLWxldmVsCiBkaXJlY3Rvcnkgd2hlcmUgd2UgY2FuIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgYW5kIHdoZXJlIHRvIHN1Ym1pdCB0aGUKQEAgLTYwNiw5ICs2MjYsMTEgQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDkvQ1Rlc3RDb25maWcuY21ha2UKICAgOmxhbmd1YWdlOiBjbWFrZQogCi1DVGVzdCB3aWxsIHJlYWQgaW4gdGhpcyBmaWxlIHdoZW4gaXQgcnVucy4gVG8gY3JlYXRlIGEgc2ltcGxlIGRhc2hib2FyZCB5b3UgY2FuCi1ydW4gKipjbWFrZSoqIG9yICoqY21ha2UtZ3VpKiogdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0LCBidXQgZG8gbm90IGJ1aWxkIGl0Ci15ZXQuIEluc3RlYWQsIGNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIGJpbmFyeSB0cmVlLCBhbmQgdGhlbiBydW46OgorVGhlIDptYW51YWw6YGN0ZXN0IDxjdGVzdCgxKT5gIGV4ZWN1dGFibGUgd2lsbCByZWFkIGluIHRoaXMgZmlsZSB3aGVuIGl0IHJ1bnMuCitUbyBjcmVhdGUgYSBzaW1wbGUgZGFzaGJvYXJkIHlvdSBjYW4gcnVuIHRoZSA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YAorZXhlY3V0YWJsZSBvciB0aGUgOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QsCitidXQgZG8gbm90IGJ1aWxkIGl0IHlldC4gSW5zdGVhZCwgY2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgYmluYXJ5IHRyZWUsIGFuZCB0aGVuCitydW46CiAKICAgY3Rlc3QgWy1WVl0gLUQgRXhwZXJpbWVudGFsCiAKQEAgLTYxOSwyNiArNjQxLDI2IEBACiAKIE9yLCBmcm9tIGFuIElERSwgYnVpbGQgdGhlIGBgRXhwZXJpbWVudGFsYGAgdGFyZ2V0LgogCi1gYGN0ZXN0YGAgd2lsbCBidWlsZCBhbmQgdGVzdCB0aGUgcHJvamVjdCBhbmQgc3VibWl0IHRoZSByZXN1bHRzIHRvIHRoZSBLaXR3YXJlCi1wdWJsaWMgZGFzaGJvYXJkLiBUaGUgcmVzdWx0cyBvZiB5b3VyIGRhc2hib2FyZCB3aWxsIGJlIHVwbG9hZGVkIHRvIEtpdHdhcmUncwotcHVibGljIGRhc2hib2FyZCBoZXJlOiBodHRwczovL215LmNkYXNoLm9yZy9pbmRleC5waHA/cHJvamVjdD1DTWFrZVR1dG9yaWFsLgorVGhlIDptYW51YWw6YGN0ZXN0IDxjdGVzdCgxKT5gIGV4ZWN1dGFibGUgd2lsbCBidWlsZCBhbmQgdGVzdCB0aGUgcHJvamVjdCBhbmQKK3N1Ym1pdCB0aGUgcmVzdWx0cyB0byBLaXR3YXJlJ3MgcHVibGljIGRhc2hib2FyZDoKK2h0dHBzOi8vbXkuY2Rhc2gub3JnL2luZGV4LnBocD9wcm9qZWN0PUNNYWtlVHV0b3JpYWwuCiAKIE1peGluZyBTdGF0aWMgYW5kIFNoYXJlZCAoU3RlcCA5KQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUluIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIHNob3cgaG93IGJ5IHVzaW5nIHRoZSBgYEJVSUxEX1NIQVJFRF9MSUJTYGAgdmFyaWFibGUKLXdlIGNhbiBjb250cm9sIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBgYWRkX2xpYnJhcnlgYCwgYW5kIGFsbG93IGNvbnRyb2wKLW92ZXIgaG93IGxpYnJhcmllcyB3aXRob3V0IGFuIGV4cGxpY2l0IHR5cGUgKGBgU1RBVElDYGAsIGBgU0hBUkVEYGAsIGBgTU9EVUxFYGAKLW9yIGBgT0JKRUNUYGApIGFyZSBidWlsdC4KK0luIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIHNob3cgaG93IHRoZSA6dmFyaWFibGU6YEJVSUxEX1NIQVJFRF9MSUJTYCB2YXJpYWJsZSBjYW4KK2JlIHVzZWQgdG8gY29udHJvbCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgLAorYW5kIGFsbG93IGNvbnRyb2wgb3ZlciBob3cgbGlicmFyaWVzIHdpdGhvdXQgYW4gZXhwbGljaXQgdHlwZSAoYGBTVEFUSUNgYCwKK2BgU0hBUkVEYGAsIGBgTU9EVUxFYGAgb3IgYGBPQkpFQ1RgYCkgYXJlIGJ1aWx0LgogCi1UbyBhY2NvbXBsaXNoIHRoaXMgd2UgbmVlZCB0byBhZGQgYGBCVUlMRF9TSEFSRURfTElCU2BgIHRvIHRoZSB0b3AtbGV2ZWwKLWBgQ01ha2VMaXN0cy50eHRgYC4gV2UgdXNlIHRoZSBgYG9wdGlvbmBgIGNvbW1hbmQgYXMgaXQgYWxsb3dzIHVzZXJzIHRvCi1vcHRpb25hbGx5IHNlbGVjdCBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIE9uIG9yIE9mZi4KK1RvIGFjY29tcGxpc2ggdGhpcyB3ZSBuZWVkIHRvIGFkZCA6dmFyaWFibGU6YEJVSUxEX1NIQVJFRF9MSUJTYCB0byB0aGUKK3RvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAuIFdlIHVzZSB0aGUgOmNvbW1hbmQ6YG9wdGlvbmAgY29tbWFuZCBhcyBpdCBhbGxvd3MKK3VzZXJzIHRvIG9wdGlvbmFsbHkgc2VsZWN0IGlmIHRoZSB2YWx1ZSBzaG91bGQgYmUgT04gb3IgT0ZGLgogCiBOZXh0IHdlIGFyZSBnb2luZyB0byByZWZhY3RvciBNYXRoRnVuY3Rpb25zIHRvIGJlY29tZSBhIHJlYWwgbGlicmFyeSB0aGF0CiBlbmNhcHN1bGF0ZXMgdXNpbmcgYGBteXNxcnRgYCBvciBgYHNxcnRgYCwgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxpbmcKIGNvZGUgdG8gZG8gdGhpcyBsb2dpYy4gVGhpcyB3aWxsIGFsc28gbWVhbiB0aGF0IGBgVVNFX01ZTUFUSGBgIHdpbGwgbm90IGNvbnRyb2wKLWJ1aWxkaW5nIE1hdGhGdWN0aW9ucywgYnV0IGluc3RlYWQgd2lsbCBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGlzIGxpYnJhcnkuCitidWlsZGluZyBNYXRoRnVuY3Rpb25zLCBidXQgaW5zdGVhZCB3aWxsIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoaXMgbGlicmFyeS4KIAogVGhlIGZpcnN0IHN0ZXAgaXMgdG8gdXBkYXRlIHRoZSBzdGFydGluZyBzZWN0aW9uIG9mIHRoZSB0b3AtbGV2ZWwKIGBgQ01ha2VMaXN0cy50eHRgYCB0byBsb29rIGxpa2U6CkBAIC02ODAsOCArNzAyLDggQEAKIEF0IHRoaXMgcG9pbnQsIGlmIHlvdSBidWlsZCBldmVyeXRoaW5nLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCBsaW5raW5nIGZhaWxzCiBhcyB3ZSBhcmUgY29tYmluaW5nIGEgc3RhdGljIGxpYnJhcnkgd2l0aG91dCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHdpdGggYQogbGlicmFyeSB0aGF0IGhhcyBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlLiBUaGUgc29sdXRpb24gdG8gdGhpcyBpcyB0bwotZXhwbGljaXRseSBzZXQgdGhlIGBgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERWBgIHRhcmdldCBwcm9wZXJ0eSBvZiBTcXJ0TGlicmFyeQotdG8gYmUgVHJ1ZSBubyBtYXR0ZXIgdGhlIGJ1aWxkIHR5cGUuCitleHBsaWNpdGx5IHNldCB0aGUgOnByb3BfdGd0OmBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFYCB0YXJnZXQgcHJvcGVydHkgb2YKK1NxcnRMaWJyYXJ5IHRvIGJlIFRydWUgbm8gbWF0dGVyIHRoZSBidWlsZCB0eXBlLgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMC9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKQEAgLTY5NCwzNSArNzE2LDM5IEBACiBBZGRpbmcgR2VuZXJhdG9yIEV4cHJlc3Npb25zIChTdGVwIDEwKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotR2VuZXJhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgZHVyaW5nIGJ1aWxkIHN5c3RlbSBnZW5lcmF0aW9uIHRvIHByb2R1Y2UKLWluZm9ybWF0aW9uIHNwZWNpZmljIHRvIGVhY2ggYnVpbGQgY29uZmlndXJhdGlvbi4KKzptYW51YWw6YEdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgYXJlIGV2YWx1YXRlZAorZHVyaW5nIGJ1aWxkIHN5c3RlbSBnZW5lcmF0aW9uIHRvIHByb2R1Y2UgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gZWFjaCBidWlsZAorY29uZmlndXJhdGlvbi4KIAotR2VuZXJhdG9yIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkIGluIHRoZSBjb250ZXh0IG9mIG1hbnkgdGFyZ2V0IHByb3BlcnRpZXMsCi1zdWNoIGFzIGBgTElOS19MSUJSQVJJRVNgYCwgYGBJTkNMVURFX0RJUkVDVE9SSUVTYGAsIGBgQ09NUElMRV9ERUZJTklUSU9OU2BgCi1hbmQgb3RoZXJzLiBUaGV5IG1heSBhbHNvIGJlIHVzZWQgd2hlbiB1c2luZyBjb21tYW5kcyB0byBwb3B1bGF0ZSB0aG9zZQotcHJvcGVydGllcywgc3VjaCBhcyBgYHRhcmdldF9saW5rX2xpYnJhcmllcygpYGAsCi1gYHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKClgYCwKLWBgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoKWBgIGFuZCBvdGhlcnMuCis6bWFudWFsOmBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGFyZSBhbGxvd2VkIGluCit0aGUgY29udGV4dCBvZiBtYW55IHRhcmdldCBwcm9wZXJ0aWVzLCBzdWNoIGFzIDpwcm9wX3RndDpgTElOS19MSUJSQVJJRVNgLAorOnByb3BfdGd0OmBJTkNMVURFX0RJUkVDVE9SSUVTYCwgOnByb3BfdGd0OmBDT01QSUxFX0RFRklOSVRJT05TYCBhbmQgb3RoZXJzLgorVGhleSBtYXkgYWxzbyBiZSB1c2VkIHdoZW4gdXNpbmcgY29tbWFuZHMgdG8gcG9wdWxhdGUgdGhvc2UgcHJvcGVydGllcywgc3VjaCBhcworOmNvbW1hbmQ6YHRhcmdldF9saW5rX2xpYnJhcmllc2AsIDpjb21tYW5kOmB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc2AsCis6Y29tbWFuZDpgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnNgIGFuZCBvdGhlcnMuCiAKLUdlbmVyYXRvciBleHByZXNzaW9ucyBtYXkgYmUgdXNlZCB0byBlbmFibGUgY29uZGl0aW9uYWwgbGlua2luZywgY29uZGl0aW9uYWwKLWRlZmluaXRpb25zIHVzZWQgd2hlbiBjb21waWxpbmcsIGNvbmRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIG1vcmUuCi1UaGUgY29uZGl0aW9ucyBtYXkgYmUgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHRhcmdldCBwcm9wZXJ0aWVzLAotcGxhdGZvcm0gaW5mb3JtYXRpb24gb3IgYW55IG90aGVyIHF1ZXJ5YWJsZSBpbmZvcm1hdGlvbi4KKzptYW51YWw6YEdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgIG1heSBiZSB1c2VkCit0byBlbmFibGUgY29uZGl0aW9uYWwgbGlua2luZywgY29uZGl0aW9uYWwgZGVmaW5pdGlvbnMgdXNlZCB3aGVuIGNvbXBpbGluZywKK2NvbmRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIG1vcmUuIFRoZSBjb25kaXRpb25zIG1heSBiZSBiYXNlZCBvbiB0aGUKK2J1aWxkIGNvbmZpZ3VyYXRpb24sIHRhcmdldCBwcm9wZXJ0aWVzLCBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBvciBhbnkgb3RoZXIKK3F1ZXJ5YWJsZSBpbmZvcm1hdGlvbi4KIAotVGhlcmUgYXJlIGRpZmZlcmVudCB0eXBlcyBvZiBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgaW5jbHVkaW5nIExvZ2ljYWwsCi1JbmZvcm1hdGlvbmFsLCBhbmQgT3V0cHV0IGV4cHJlc3Npb25zLgorVGhlcmUgYXJlIGRpZmZlcmVudCB0eXBlcyBvZgorOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YCBpbmNsdWRpbmcKK0xvZ2ljYWwsIEluZm9ybWF0aW9uYWwsIGFuZCBPdXRwdXQgZXhwcmVzc2lvbnMuCiAKIExvZ2ljYWwgZXhwcmVzc2lvbnMgYXJlIHVzZWQgdG8gY3JlYXRlIGNvbmRpdGlvbmFsIG91dHB1dC4gVGhlIGJhc2ljCiBleHByZXNzaW9ucyBhcmUgdGhlIDAgYW5kIDEgZXhwcmVzc2lvbnMuIEEgYGAkPDA6Li4uPmBgIHJlc3VsdHMgaW4gdGhlIGVtcHR5CiBzdHJpbmcsIGFuZCBgYDwxOi4uLj5gYCByZXN1bHRzIGluIHRoZSBjb250ZW50IG9mICIuLi4iLiAgVGhleSBjYW4gYWxzbyBiZQogbmVzdGVkLgogCi1BIGNvbW1vbiB1c2FnZSBvZiBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgaXMgdG8gY29uZGl0aW9uYWxseSBhZGQgY29tcGlsZXIKLWZsYWdzLCBzdWNoIGFzIHRob3NlIGZvciBsYW5ndWFnZSBsZXZlbHMgb3Igd2FybmluZ3MuIEEgbmljZSBwYXR0ZXJuIGlzCi10byBhc3NvY2lhdGUgdGhpcyBpbmZvcm1hdGlvbiB0byBhbiBgYElOVEVSRkFDRWBgIHRhcmdldCBhbGxvd2luZyB0aGlzCi1pbmZvcm1hdGlvbiB0byBwcm9wYWdhdGUuIExldHMgc3RhcnQgYnkgY29uc3RydWN0aW5nIGFuIGBgSU5URVJGQUNFYGAKLXRhcmdldCBhbmQgc3BlY2lmeWluZyB0aGUgcmVxdWlyZWQgQysrIHN0YW5kYXJkIGxldmVsIG9mIGBgMTFgYCBpbnN0ZWFkCi1vZiB1c2luZyBgYENNQUtFX0NYWF9TVEFOREFSRGBgLgorQSBjb21tb24gdXNhZ2Ugb2YKKzptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgaXMgdG8KK2NvbmRpdGlvbmFsbHkgYWRkIGNvbXBpbGVyIGZsYWdzLCBzdWNoIGFzIHRob3NlIGZvciBsYW5ndWFnZSBsZXZlbHMgb3IKK3dhcm5pbmdzLiBBIG5pY2UgcGF0dGVybiBpcyB0byBhc3NvY2lhdGUgdGhpcyBpbmZvcm1hdGlvbiB0byBhbiBgYElOVEVSRkFDRWBgCit0YXJnZXQgYWxsb3dpbmcgdGhpcyBpbmZvcm1hdGlvbiB0byBwcm9wYWdhdGUuIExldHMgc3RhcnQgYnkgY29uc3RydWN0aW5nIGFuCitgYElOVEVSRkFDRWBgIHRhcmdldCBhbmQgc3BlY2lmeWluZyB0aGUgcmVxdWlyZWQgQysrIHN0YW5kYXJkIGxldmVsIG9mIGBgMTFgYAoraW5zdGVhZCBvZiB1c2luZyA6dmFyaWFibGU6YENNQUtFX0NYWF9TVEFOREFSRGAuCiAKIFNvIHRoZSBmb2xsb3dpbmcgY29kZToKIApAQCAtNzM5LDExICs3NjUsMTAgQEAKICAgOmVuZC1iZWZvcmU6ICMgYWRkIGNvbXBpbGVyIHdhcm5pbmcgZmxhZ3MganVzdCB3aGVuIGJ1aWxkaW5nIHRoaXMgcHJvamVjdCB2aWEKIAogCi1OZXh0IHdlIGFkZCB0aGUgZGVzaXJlZCBjb21waWxlciB3YXJuaW5nIGZsYWdzIHRoYXQgd2Ugd2FudCBmb3Igb3VyCi1wcm9qZWN0LiBBcyB3YXJuaW5nIGZsYWdzIHZhcnkgYmFzZWQgb24gdGhlIGNvbXBpbGVyIHdlIHVzZQotdGhlIGBgQ09NUElMRV9MQU5HX0FORF9JRGBgIGdlbmVyYXRvciBleHByZXNzaW9uIHRvIGNvbnRyb2wgd2hpY2gKLWZsYWdzIHRvIGFwcGx5IGdpdmVuIGEgbGFuZ3VhZ2UgYW5kIGEgc2V0IG9mIGNvbXBpbGVyIGlkcyBhcyBzZWVuCi1iZWxvdzoKK05leHQgd2UgYWRkIHRoZSBkZXNpcmVkIGNvbXBpbGVyIHdhcm5pbmcgZmxhZ3MgdGhhdCB3ZSB3YW50IGZvciBvdXIgcHJvamVjdC4gQXMKK3dhcm5pbmcgZmxhZ3MgdmFyeSBiYXNlZCBvbiB0aGUgY29tcGlsZXIgd2UgdXNlIHRoZSBgYENPTVBJTEVfTEFOR19BTkRfSURgYAorZ2VuZXJhdG9yIGV4cHJlc3Npb24gdG8gY29udHJvbCB3aGljaCBmbGFncyB0byBhcHBseSBnaXZlbiBhIGxhbmd1YWdlIGFuZCBhIHNldAorb2YgY29tcGlsZXIgaWRzIGFzIHNlZW4gYmVsb3c6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDExL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKQEAgLTc1NSw4ICs3ODAsOCBAQAogcHJvamVjdCB3aWxsIG5vdCBpbmhlcml0IG91ciB3YXJuaW5nIGZsYWdzLgogCiAKLSoqRXhlcmNpc2UqKjogTW9kaWZ5IGBgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgIHNvIHRoYXQKLWFsbCB0YXJnZXRzIGhhdmUgYSBgYHRhcmdldF9saW5rX2xpYnJhcmllcygpYGAgY2FsbCB0byBgYHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzYGAuCisqKkV4ZXJjaXNlKio6IE1vZGlmeSBgYE1hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHRgYCBzbyB0aGF0IGFsbCB0YXJnZXRzIGhhdmUKK2EgOmNvbW1hbmQ6YHRhcmdldF9saW5rX2xpYnJhcmllc2AgY2FsbCB0byBgYHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzYGAuCiAKIAogQWRkaW5nIEV4cG9ydCBDb25maWd1cmF0aW9uIChTdGVwIDExKQpAQCAtNzcxLDEyICs3OTYsMTIgQEAKIGNhbiB1c2Ugb3VyIHByb2plY3QsIGJlIGl0IGZyb20gYSBidWlsZCBkaXJlY3RvcnksIGEgbG9jYWwgaW5zdGFsbCBvciB3aGVuCiBwYWNrYWdlZC4KIAotVGhlIGZpcnN0IHN0ZXAgaXMgdG8gdXBkYXRlIG91ciBgYGluc3RhbGwoVEFSR0VUUylgYCBjb21tYW5kcyB0byBub3Qgb25seQotc3BlY2lmeSBhIGBgREVTVElOQVRJT05gYCBidXQgYWxzbyBhbiBgYEVYUE9SVGBgLiBUaGUgYGBFWFBPUlRgYCBrZXl3b3JkCitUaGUgZmlyc3Qgc3RlcCBpcyB0byB1cGRhdGUgb3VyIDpjb21tYW5kOmBpbnN0YWxsKFRBUkdFVFMpYCBjb21tYW5kcyB0byBub3QKK29ubHkgc3BlY2lmeSBhIGBgREVTVElOQVRJT05gYCBidXQgYWxzbyBhbiBgYEVYUE9SVGBgLiBUaGUgYGBFWFBPUlRgYCBrZXl3b3JkCiBnZW5lcmF0ZXMgYW5kIGluc3RhbGxzIGEgQ01ha2UgZmlsZSBjb250YWluaW5nIGNvZGUgdG8gaW1wb3J0IGFsbCB0YXJnZXRzCi1saXN0ZWQgaW4gdGhlIGluc3RhbGwgY29tbWFuZCBmcm9tIHRoZSBpbnN0YWxsYXRpb24gdHJlZS4gU28gbGV0J3MgZ28gYWhlYWQKLWFuZCBleHBsaWNpdGx5IGBgRVhQT1JUYGAgdGhlIE1hdGhGdW5jdGlvbnMgbGlicmFyeSBieSB1cGRhdGluZyB0aGUKLWBgaW5zdGFsbGBgIGNvbW1hbmQgaW4gYGBNYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0YGAgdG8gbG9vayBsaWtlOgorbGlzdGVkIGluIHRoZSBpbnN0YWxsIGNvbW1hbmQgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIHRyZWUuIFNvIGxldCdzIGdvIGFoZWFkIGFuZAorZXhwbGljaXRseSBgYEVYUE9SVGBgIHRoZSBNYXRoRnVuY3Rpb25zIGxpYnJhcnkgYnkgdXBkYXRpbmcgdGhlIGBgaW5zdGFsbGBgCitjb21tYW5kIGluIGBgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgIHRvIGxvb2sgbGlrZToKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKQEAgLTgwNiwxMiArODMxLDEyIEBACiBXaGF0IENNYWtlIGlzIHRyeWluZyB0byBzYXkgaXMgdGhhdCBkdXJpbmcgZ2VuZXJhdGluZyB0aGUgZXhwb3J0IGluZm9ybWF0aW9uCiBpdCB3aWxsIGV4cG9ydCBhIHBhdGggdGhhdCBpcyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGN1cnJlbnQgbWFjaGluZSBhbmQKIHdpbGwgbm90IGJlIHZhbGlkIG9uIG90aGVyIG1hY2hpbmVzLiBUaGUgc29sdXRpb24gdG8gdGhpcyBpcyB0byB1cGRhdGUgdGhlCi1NYXRoRnVuY3Rpb25zIGBgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNgYCB0byB1bmRlcnN0YW5kIHRoYXQgaXQgbmVlZHMKK01hdGhGdW5jdGlvbnMgOmNvbW1hbmQ6YHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzYCB0byB1bmRlcnN0YW5kIHRoYXQgaXQgbmVlZHMKIGRpZmZlcmVudCBgYElOVEVSRkFDRWBgIGxvY2F0aW9ucyB3aGVuIGJlaW5nIHVzZWQgZnJvbSB3aXRoaW4gdGhlIGJ1aWxkCiBkaXJlY3RvcnkgYW5kIGZyb20gYW4gaW5zdGFsbCAvIHBhY2thZ2UuIFRoaXMgbWVhbnMgY29udmVydGluZyB0aGUKLWBgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNgYCBjYWxsIGZvciBNYXRoRnVuY3Rpb25zIHRvIGxvb2sgbGlrZToKKzpjb21tYW5kOmB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc2AgY2FsbCBmb3IgTWF0aEZ1bmN0aW9ucyB0byBsb29rIGxpa2U6CiAKLS4uIGxpdGVyYWxpbmNsdWRlOjogQ29tcGxldGUvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMTIvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyB0byBmaW5kIE1hdGhGdW5jdGlvbnMuaCwgd2hpbGUgd2UgZG9uJ3QuCiAgIDplbmQtYmVmb3JlOiAjIHNob3VsZCB3ZSB1c2Ugb3VyIG93biBtYXRoIGZ1bmN0aW9ucwpAQCAtODIxLDE2ICs4NDYsMTYgQEAKIAogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBDTWFrZSBwcm9wZXJseSBwYWNrYWdpbmcgdGhlIHRhcmdldCBpbmZvcm1hdGlvbiB0aGF0IGlzCiByZXF1aXJlZCBidXQgd2Ugd2lsbCBzdGlsbCBuZWVkIHRvIGdlbmVyYXRlIGEgYGBNYXRoRnVuY3Rpb25zQ29uZmlnLmNtYWtlYGAgc28KLXRoYXQgdGhlIENNYWtlIGBgZmluZF9wYWNrYWdlYGAgY29tbWFuZCBjYW4gZmluZCBvdXIgcHJvamVjdC4gU28gbGV0J3MgZ28KK3RoYXQgdGhlIENNYWtlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQgY2FuIGZpbmQgb3VyIHByb2plY3QuIFNvIGxldCdzIGdvCiBhaGVhZCBhbmQgYWRkIGEgbmV3IGZpbGUgdG8gdGhlIHRvcC1sZXZlbCBvZiB0aGUgcHJvamVjdCBjYWxsZWQKIGBgQ29uZmlnLmNtYWtlLmluYGAgd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzOgogCi0uLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL0NvbmZpZy5jbWFrZS5pbgorLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMTIvQ29uZmlnLmNtYWtlLmluCiAKIFRoZW4sIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBhbmQgaW5zdGFsbCB0aGF0IGZpbGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZQogYm90dG9tIG9mIHRoZSB0b3AtbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgOgogCi0uLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL0NNYWtlTGlzdHMudHh0CisuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMi9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBpbnN0YWxsIHRoZSBjb25maWd1cmF0aW9uIHRhcmdldHMKICAgOmVuZC1iZWZvcmU6ICMgZ2VuZXJhdGUgdGhlIGV4cG9ydApAQCAtODQwLDcgKzg2NSw3IEBACiB3ZSB3YW50IG91ciBwcm9qZWN0IHRvIGFsc28gYmUgdXNlZCBmcm9tIGEgYnVpbGQgZGlyZWN0b3J5IHdlIG9ubHkgaGF2ZSB0byBhZGQKIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdG9wIGxldmVsIGBgQ01ha2VMaXN0cy50eHRgYDoKIAotLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9DTWFrZUxpc3RzLnR4dAorLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMTIvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQogICA6c3RhcnQtYWZ0ZXI6ICMgbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGluc3RhbGwoVEFSR0VUUyApIGNvbW1hbmQKIApAQCAtODQ4LDU1ICs4NzMsODEgQEAKIGNvbmZpZ3VyZWQgYGBNYXRoRnVuY3Rpb25zQ29uZmlnLmNtYWtlYGAgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSB0byBiZSB1c2VkIGJ5CiBvdGhlciBwcm9qZWN0cywgd2l0aG91dCBuZWVkaW5nIGl0IHRvIGJlIGluc3RhbGxlZC4KIAotSW1wb3J0IGEgQ01ha2UgUHJvamVjdCAoQ29uc3VtZXIpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BhY2thZ2luZyBEZWJ1ZyBhbmQgUmVsZWFzZSAoU3RlcCAxMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBleGFtcGxlIHNob3dzIGhvdyBhIHByb2plY3QgY2FuIGZpbmQgb3RoZXIgQ01ha2UgcGFja2FnZXMgdGhhdAotZ2VuZXJhdGUgYGBDb25maWcuY21ha2VgYCBmaWxlcy4KKyoqTm90ZToqKiBUaGlzIGV4YW1wbGUgaXMgdmFsaWQgZm9yIHNpbmdsZS1jb25maWd1cmF0aW9uIGdlbmVyYXRvcnMgYW5kIHdpbGwKK25vdCB3b3JrIGZvciBtdWx0aS1jb25maWd1cmF0aW9uIGdlbmVyYXRvcnMgKGUuZy4gVmlzdWFsIFN0dWRpbykuCiAKLUl0IGFsc28gc2hvd3MgaG93IHRvIHN0YXRlIGEgcHJvamVjdCdzIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aGVuIGdlbmVyYXRpbmcKLWEgYGBDb25maWcuY21ha2VgYC4KK0J5IGRlZmF1bHQsIENNYWtlJ3MgbW9kZWwgaXMgdGhhdCBhIGJ1aWxkIGRpcmVjdG9yeSBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlCitjb25maWd1cmF0aW9uLCBiZSBpdCBEZWJ1ZywgUmVsZWFzZSwgTWluU2l6ZVJlbCwgb3IgUmVsV2l0aERlYkluZm8uIEl0IGlzCitwb3NzaWJsZSwgaG93ZXZlciwgdG8gc2V0dXAgQ1BhY2sgdG8gYnVuZGxlIG11bHRpcGxlIGJ1aWxkIGRpcmVjdG9yaWVzIGFuZAorY29uc3RydWN0IGEgcGFja2FnZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBzYW1lIHByb2plY3QuCiAKLVBhY2thZ2luZyBEZWJ1ZyBhbmQgUmVsZWFzZSAoTXVsdGlQYWNrYWdlKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGaXJzdCwgd2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzIHVzZSBkaWZmZXJlbnQgbmFtZXMKK2ZvciB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcyB0aGF0IHdpbGwgYmUgaW5zdGFsbGVkLiBMZXQncyB1c2UgYGRgIGFzIHRoZQorcG9zdGZpeCBmb3IgdGhlIGRlYnVnIGV4ZWN1dGFibGUgYW5kIGxpYnJhcmllcy4KIAotQnkgZGVmYXVsdCBDTWFrZSdzIG1vZGVsIGlzIHRoYXQgYSBidWlsZCBkaXJlY3Rvcnkgb25seSBjb250YWlucyBhIHNpbmdsZQotY29uZmlndXJhdGlvbiwgYmUgaXQgRGVidWcsIFJlbGVhc2UsIE1pblNpemVSZWwsIG9yIFJlbFdpdGhEZWJJbmZvLgorU2V0IDp2YXJpYWJsZTpgQ01BS0VfREVCVUdfUE9TVEZJWGAgbmVhciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0b3AtbGV2ZWwKK2BgQ01ha2VMaXN0cy50eHRgYCBmaWxlOgogCi1CdXQgaXQgaXMgcG9zc2libGUgdG8gc2V0dXAgQ1BhY2sgdG8gYnVuZGxlIG11bHRpcGxlIGJ1aWxkIGRpcmVjdG9yaWVzIGF0IHRoZQotc2FtZSB0aW1lIHRvIGJ1aWxkIGEgcGFja2FnZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zIG9mIHRoZQotc2FtZSBwcm9qZWN0LgorLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9DTWFrZUxpc3RzLnR4dAorICA6bGFuZ3VhZ2U6IGNtYWtlCisgIDpzdGFydC1hZnRlcjogcHJvamVjdChUdXRvcmlhbCBWRVJTSU9OIDEuMCkKKyAgOmVuZC1iZWZvcmU6IHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzCiAKLUZpcnN0IHdlIG5lZWQgdG8gY29uc3RydWN0IGEgZGlyZWN0b3J5IGNhbGxlZCBgYG11bHRpX2NvbmZpZ2BgLCB3aGljaAotd2lsbCBjb250YWluIGFsbCB0aGUgYnVpbGRzIHRoYXQgd2Ugd2FudCB0byBwYWNrYWdlIHRvZ2V0aGVyLgorQW5kIHRoZSA6cHJvcF90Z3Q6YERFQlVHX1BPU1RGSVhgIHByb3BlcnR5IG9uIHRoZSB0dXRvcmlhbCBleGVjdXRhYmxlOgogCi1TZWNvbmQgY3JlYXRlIGEgYGBkZWJ1Z2BgIGFuZCBgYHJlbGVhc2VgYCBkaXJlY3RvcnkgdW5kZXJuZWF0aAotYGBtdWx0aV9jb25maWdgYC4gQXQgdGhlIGVuZCB5b3Ugc2hvdWxkIGhhdmUgYSBsYXlvdXQgdGhhdCBsb29rcyBsaWtlOgorLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9DTWFrZUxpc3RzLnR4dAorICA6bGFuZ3VhZ2U6IGNtYWtlCisgIDpzdGFydC1hZnRlcjogIyBhZGQgdGhlIGV4ZWN1dGFibGUKKyAgOmVuZC1iZWZvcmU6ICMgYWRkIHRoZSBiaW5hcnkgdHJlZSB0byB0aGUgc2VhcmNoIHBhdGggZm9yIGluY2x1ZGUgZmlsZXMKKworTGV0J3MgYWxzbyBhZGQgdmVyc2lvbiBudW1iZXJpbmcgdG8gdGhlIE1hdGhGdW5jdGlvbnMgbGlicmFyeS4gSW4KK2BgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgLCBzZXQgdGhlIDpwcm9wX3RndDpgVkVSU0lPTmAgYW5kCis6cHJvcF90Z3Q6YFNPVkVSU0lPTmAgcHJvcGVydGllczoKKworLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CisgIDpsYW5ndWFnZTogY21ha2UKKyAgOnN0YXJ0LWFmdGVyOiAjIHNldHVwIHRoZSB2ZXJzaW9uIG51bWJlcmluZworICA6ZW5kLWJlZm9yZTogIyBpbnN0YWxsIHJ1bGVzCisKK0Zyb20gdGhlIGBgU3RlcDEyYGAgZGlyZWN0b3J5LCBjcmVhdGUgYGBkZWJ1Z2BgIGFuZCBgYHJlbGVhc2VgYAorc3ViYmRpcmVjdG9yaWVzLiBUaGUgbGF5b3V0IHdpbGwgbG9vayBsaWtlOgogCiAuLiBjb2RlLWJsb2NrOjogbm9uZQogCi0gIOKUgCBtdWx0aV9jb25maWcKLSAgICAgIOKUnOKUgOKUgCBkZWJ1ZwotICAgICAg4pSU4pSA4pSAIHJlbGVhc2UKKyAgLSBTdGVwMTIKKyAgICAgLSBkZWJ1ZworICAgICAtIHJlbGVhc2UKIAotTm93IHdlIG5lZWQgdG8gc2V0dXAgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzLCB3aGljaCB3b3VsZCByb3VnaGx5IGVudGFpbAotdGhlIGZvbGxvd2luZzoKK05vdyB3ZSBuZWVkIHRvIHNldHVwIGRlYnVnIGFuZCByZWxlYXNlIGJ1aWxkcy4gV2UgY2FuIHVzZQorOnZhcmlhYmxlOmBDTUFLRV9CVUlMRF9UWVBFYCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdHlwZToKIAogLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKIAogICBjZCBkZWJ1ZwotICBjbWFrZSAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcgLi4vLi4vTXVsdGlQYWNrYWdlLworICBjbWFrZSAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcgLi4KICAgY21ha2UgLS1idWlsZCAuCiAgIGNkIC4uL3JlbGVhc2UKLSAgY21ha2UgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgLi4vLi4vTXVsdGlQYWNrYWdlLworICBjbWFrZSAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAuLgogICBjbWFrZSAtLWJ1aWxkIC4KLSAgY2QgLi4KIAorTm93IHRoYXQgYm90aCB0aGUgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzIGFyZSBjb21wbGV0ZSwgd2UgY2FuIHVzZSBhIGN1c3RvbQorY29uZmlndXJhdGlvbiBmaWxlIHRvIHBhY2thZ2UgYm90aCBidWlsZHMgaW50byBhIHNpbmdsZSByZWxlYXNlLiBJbiB0aGUKK2BgU3RlcDEyYGAgZGlyZWN0b3J5LCBjcmVhdGUgYSBmaWxlIGNhbGxlZCBgYE11bHRpQ1BhY2tDb25maWcuY21ha2VgYC4gSW4gdGhpcworZmlsZSwgZmlyc3QgaW5jbHVkZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB3YXMgY3JlYXRlZCBieSB0aGUKKzptYW51YWw6YGNtYWtlICA8Y21ha2UoMSk+YCBleGVjdXRhYmxlLgogCi1Ob3cgdGhhdCBib3RoIHRoZSBkZWJ1ZyBhbmQgcmVsZWFzZSBidWlsZHMgYXJlIGNvbXBsZXRlLCB3ZSBjYW4gdXNlCi1hIGN1c3RvbSBgYE11bHRpQ1BhY2tDb25maWcuY21ha2VgYCBmaWxlIHRvIHBhY2thZ2UgYm90aCBidWlsZHMgaW50byBhIHNpbmdsZQotcmVsZWFzZS4KK05leHQsIHVzZSB0aGUgYGBDUEFDS19JTlNUQUxMX0NNQUtFX1BST0pFQ1RTYGAgdmFyaWFibGUgdG8gc3BlY2lmeSB3aGljaAorcHJvamVjdHMgdG8gaW5zdGFsbC4gSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIGluc3RhbGwgYm90aCBkZWJ1ZyBhbmQgcmVsZWFzZS4KKworLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9NdWx0aUNQYWNrQ29uZmlnLmNtYWtlCisgIDpsYW5ndWFnZTogY21ha2UKKworRnJvbSB0aGUgYGBTdGVwMTJgYCBkaXJlY3RvcnksIHJ1biA6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBzcGVjaWZ5aW5nIG91cgorY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZSB3aXRoIHRoZSBgYGNvbmZpZ2BgIG9wdGlvbjoKIAogLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKIAotICBjcGFjayAtLWNvbmZpZyAuLi8uLi9NdWx0aVBhY2thZ2UvTXVsdGlDUGFja0NvbmZpZy5jbWFrZQorICBjcGFjayAtLWNvbmZpZyBNdWx0aUNQYWNrQ29uZmlnLmNtYWtlCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUFkZC1FbnRyeS5wbmcgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUFkZC1FbnRyeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5YmU3ZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktQWRkLUVudHJ5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNob29zZS1HZW5lcmF0b3IucG5nIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1DaG9vc2UtR2VuZXJhdG9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWFkMmMwCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1DaG9vc2UtR2VuZXJhdG9yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNvbmZpZ3VyZS1EaWFsb2cucG5nIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Db25maWd1cmUtRGlhbG9nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM5Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Db25maWd1cmUtRGlhbG9nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLVNvdXJjZS1CaW5hcnkucG5nIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Tb3VyY2UtQmluYXJ5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzM4MzU0Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Tb3VyY2UtQmluYXJ5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vaW5kZXgucnN0IGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTEwMzhmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL2luZGV4LnJzdApAQCAtMCwwICsxLDY4NiBAQAorVXNlciBJbnRlcmFjdGlvbiBHdWlkZQorKioqKioqKioqKioqKioqKioqKioqKgorCisuLiBvbmx5OjogaHRtbAorCisgICAuLiBjb250ZW50czo6CisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1doZXJlIGEgc29mdHdhcmUgcGFja2FnZSBzdXBwbGllcyBhIENNYWtlLWJhc2VkIGJ1aWxkc3lzdGVtCit3aXRoIHRoZSBzb3VyY2Ugb2YgdGhlaXIgc29mdHdhcmUsIHRoZSBjb25zdW1lciBvZiB0aGUKK3NvZnR3YXJlIGlzIHJlcXVpcmVkIHRvIHJ1biBhIENNYWtlIHVzZXIgaW50ZXJhY3Rpb24gdG9vbAoraW4gb3JkZXIgdG8gYnVpbGQgaXQuCisKK1dlbGwtYmVoYXZlZCBDTWFrZS1iYXNlZCBidWlsZHN5c3RlbXMgZG8gbm90IGNyZWF0ZSBhbnkKK291dHB1dCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSwgc28gdHlwaWNhbGx5LCB0aGUgdXNlcgorcGVyZm9ybXMgYW4gb3V0LW9mLXNvdXJjZSBidWlsZCBhbmQgcGVyZm9ybXMgdGhlIGJ1aWxkCit0aGVyZS4gIEZpcnN0LCBDTWFrZSBtdXN0IGJlIGluc3RydWN0ZWQgdG8gZ2VuZXJhdGUgYQorc3VpdGFibGUgYnVpbGRzeXN0ZW0sIHRoZW4gdGhlIHVzZXIgaW52b2tlcyBhIGJ1aWxkIHRvb2wKK3RvIHByb2Nlc3MgdGhhdCBnZW5lcmF0ZWQgYnVpbGRzeXN0ZW0uICBUaGUgZ2VuZXJhdGVkCitidWlsZHN5c3RlbSBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSB1c2VkIHRvIGdlbmVyYXRlCitpdCBhbmQgaXMgbm90IHJlZGlzdHJpYnV0YWJsZS4gIEVhY2ggY29uc3VtZXIgb2YgYSBwcm92aWRlZAorc291cmNlIHNvZnR3YXJlIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlIENNYWtlIHRvCitnZW5lcmF0ZSBhIGJ1aWxkc3lzdGVtIHNwZWNpZmljIHRvIHRoZWlyIHN5c3RlbS4KKworR2VuZXJhdGVkIGJ1aWxkc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IGJlIHRyZWF0ZWQgYXMKK3JlYWQtb25seS4gVGhlIENNYWtlIGZpbGVzIGFzIGEgcHJpbWFyeSBhcnRpZmFjdCBzaG91bGQKK2NvbXBsZXRlbHkgc3BlY2lmeSB0aGUgYnVpbGRzeXN0ZW0gYW5kIHRoZXJlIHNob3VsZCBiZSBubworcmVhc29uIHRvIHBvcHVsYXRlIHByb3BlcnRpZXMgbWFudWFsbHkgaW4gYW4gSURFIGZvcgorZXhhbXBsZSBhZnRlciBnZW5lcmF0aW5nIHRoZSBidWlsZHN5c3RlbS4gIENNYWtlIHdpbGwKK3BlcmlvZGljYWxseSByZXdyaXRlIHRoZSBnZW5lcmF0ZWQgYnVpbGRzeXN0ZW0sIHNvCittb2RpZmljYXRpb25zIGJ5IHVzZXJzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisKK1RoZSBmZWF0dXJlcyBhbmQgdXNlciBpbnRlcmZhY2VzIGRlc2NyaWJlZCBpbiB0aGlzIG1hbnVhbAorYXJlIGF2YWlsYWJsZSBmb3IgYWxsIENNYWtlLWJhc2VkIGJ1aWxkIHN5c3RlbXMgYnkgdmlydHVlCitvZiBwcm92aWRpbmcgQ01ha2UgZmlsZXMuCisKK1RoZSBDTWFrZSB0b29saW5nIG1heSByZXBvcnQgZXJyb3JzIHRvIHRoZSB1c2VyIHdoZW4KK3Byb2Nlc3NpbmcgcHJvdmlkZWQgQ01ha2UgZmlsZXMsIHN1Y2ggYXMgcmVwb3J0aW5nIHRoYXQKK3RoZSBjb21waWxlciBpcyBub3Qgc3VwcG9ydGVkLCBvciB0aGUgY29tcGlsZXIgZG9lcyBub3QKK3N1cHBvcnQgYSByZXF1aXJlZCBjb21waWxlIG9wdGlvbiwgb3IgYSBkZXBlbmRlbmN5IGNhbgorbm90IGJlIGZvdW5kLiAgVGhlc2UgZXJyb3JzIG11c3QgYmUgcmVzb2x2ZWQgYnkgdGhlIHVzZXIKK2J5IGNob29zaW5nIGEgZGlmZmVyZW50IGNvbXBpbGVyLAorOmd1aWRlOmBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyA8VXNpbmcgRGVwZW5kZW5jaWVzIEd1aWRlPmAsCitvciBpbnN0cnVjdGluZyBDTWFrZSB3aGVyZSB0byBmaW5kIHRoZW0sIGV0Yy4KKworQ29tbWFuZCBMaW5lIGNtYWtlIHRvb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc2ltcGxlIGJ1dCB0eXBpY2FsIHVzZSBvZiA6bWFudWFsOmBjbWFrZSgxKWAgd2l0aCBhIGZyZXNoCitjb3B5IG9mIHNvZnR3YXJlIHNvdXJjZSBjb2RlIGlzIHRvIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeQorYW5kIGludm9rZSBjbWFrZSB0aGVyZToKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNkIHNvbWVfc29mdHdhcmUtMS40LjIKKyAgJCBta2RpciBidWlsZAorICAkIGNkIGJ1aWxkCisgICQgY21ha2UgLi4gLURDTUFLRV9JTlNUQUxMX1BSRUZJWD0vb3B0L3RoZS9wcmVmaXgKKyAgJCBjbWFrZSAtLWJ1aWxkIC4KKyAgJCBjbWFrZSAtLWJ1aWxkIC4gLS10YXJnZXQgaW5zdGFsbAorCitJdCBpcyByZWNvbW1lbmRlZCB0byBidWlsZCBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSB0byB0aGUKK3NvdXJjZSBiZWNhdXNlIHRoYXQga2VlcHMgdGhlIHNvdXJjZSBkaXJlY3RvcnkgcHJpc3RpbmUsCithbGxvd3MgZm9yIGJ1aWxkaW5nIGEgc2luZ2xlIHNvdXJjZSB3aXRoIG11bHRpcGxlCit0b29sY2hhaW5zLCBhbmQgYWxsb3dzIGVhc3kgY2xlYXJpbmcgb2YgYnVpbGQgYXJ0aWZhY3RzIGJ5CitzaW1wbHkgZGVsZXRpbmcgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworVGhlIENNYWtlIHRvb2xpbmcgbWF5IHJlcG9ydCB3YXJuaW5ncyB3aGljaCBhcmUgaW50ZW5kZWQKK2ZvciB0aGUgcHJvdmlkZXIgb2YgdGhlIHNvZnR3YXJlLCBub3QgaW50ZW5kZWQgZm9yIHRoZQorY29uc3VtZXIgb2YgdGhlIHNvZnR3YXJlLiAgU3VjaCB3YXJuaW5ncyBlbmQgd2l0aCAiVGhpcword2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzIi4gIFVzZXJzIG1heSBkaXNhYmxlCitzdWNoIHdhcm5pbmdzIGJ5IHBhc3NpbmcgdGhlIGBgLVduby1kZXZgYCBmbGFnIHRvCis6bWFudWFsOmBjbWFrZSgxKWAuCisKK2NtYWtlLWd1aSB0b29sCistLS0tLS0tLS0tLS0tLQorCitVc2VycyBtb3JlIGFjY3VzdG9tZWQgdG8gR1VJIGludGVyZmFjZXMgbWF5IHVzZSB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSgxKWAgdG9vbCB0byBpbnZva2UgQ01ha2UgYW5kIGdlbmVyYXRlCithIGJ1aWxkc3lzdGVtLgorCitUaGUgc291cmNlIGFuZCBiaW5hcnkgZGlyZWN0b3JpZXMgbXVzdCBmaXJzdCBiZQorcG9wdWxhdGVkLiAgSXQgaXMgYWx3YXlzIGFkdmlzZWQgdG8gdXNlIGRpZmZlcmVudAorZGlyZWN0b3JpZXMgZm9yIHRoZSBzb3VyY2UgYW5kIHRoZSBidWlsZC4KKworLi4gaW1hZ2U6OiAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktU291cmNlLUJpbmFyeS5wbmcKKworR2VuZXJhdGluZyBhIEJ1aWxkc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHNldmVyYWwgdXNlciBpbnRlcmZhY2UgdG9vbHMgd2hpY2ggbWF5IGJlIHVzZWQKK3RvIGdlbmVyYXRlIGEgYnVpbGRzeXN0ZW0gZnJvbSBDTWFrZSBmaWxlcy4gIFRoZQorOm1hbnVhbDpgY2NtYWtlKDEpYCBhbmQgOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCB0b29scyBndWlkZQordGhlIHVzZXIgdGhyb3VnaCBzZXR0aW5nIHRoZSB2YXJpb3VzIG5lY2Vzc2FyeSBvcHRpb25zLgorVGhlIDptYW51YWw6YGNtYWtlKDEpYCB0b29sIGNhbiBiZSBpbnZva2VkIHRvIHNwZWNpZnkKK29wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgbWFudWFsIGRlc2NyaWJlcyBvcHRpb25zCit3aGljaCBtYXkgYmUgc2V0IHVzaW5nIGFueSBvZiB0aGUgdXNlciBpbnRlcmZhY2UgdG9vbHMsCit0aG91Z2ggdGhlIG1vZGUgb2Ygc2V0dGluZyBhbiBvcHRpb24gaXMgZGlmZmVyZW50IGZvciBlYWNoCit0b29sLgorCitDb21tYW5kIGxpbmUgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGludm9raW5nIDptYW51YWw6YGNtYWtlKDEpYCB3aXRoIGEgY29tbWFuZCBsaW5lCitidWlsZHN5c3RlbSBzdWNoIGFzIGBgTWFrZWZpbGVzYGAgb3IgYGBOaW5qYWBgLCBpdCBpcworbmVjZXNzYXJ5IHRvIHVzZSB0aGUgY29ycmVjdCBidWlsZCBlbnZpcm9ubWVudCB0bworZW5zdXJlIHRoYXQgYnVpbGQgdG9vbHMgYXJlIGF2YWlsYWJsZS4gQ01ha2UgbXVzdCBiZQorYWJsZSB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZQorOnZhcmlhYmxlOmBidWlsZCB0b29sIDxDTUFLRV9NQUtFX1BST0dSQU0+YCwKK2NvbXBpbGVyLCBsaW5rZXIgYW5kIG90aGVyIHRvb2xzIGFzIG5lZWRlZC4KKworT24gTGludXggc3lzdGVtcywgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIGFyZSBvZnRlbgorcHJvdmlkZWQgaW4gc3lzdGVtLXdpZGUgbG9jYXRpb25zIGFuZCBtYXkgYmUgcmVhZGlseQoraW5zdGFsbGVkIHRocm91Z2ggdGhlIHN5c3RlbSBwYWNrYWdlIG1hbmFnZXIuIE90aGVyCit0b29sY2hhaW5zIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9yIGluc3RhbGxlZCBpbgorbm9uLWRlZmF1bHQgbG9jYXRpb25zIGNhbiBhbHNvIGJlIHVzZWQuCisKK1doZW4gY3Jvc3MtY29tcGlsaW5nLCBzb21lIHBsYXRmb3JtcyBtYXkgcmVxdWlyZQorZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGJlIHNldCBvciBtYXkgcHJvdmlkZQorc2NyaXB0cyB0byBzZXQgdGhlIGVudmlyb25tZW50LgorCitWaXN1YWwgU3R1ZGlvIHNoaXBzIG11bHRpcGxlIGNvbW1hbmQgcHJvbXB0cyBhbmQKK2BgdmN2YXJzYWxsLmJhdGBgIHNjcmlwdHMgZm9yIHNldHRpbmcgdXAgdGhlCitjb3JyZWN0IGVudmlyb25tZW50cyBmb3IgY29tbWFuZCBsaW5lIGJ1aWxkc3lzdGVtcy4gV2hpbGUKK25vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gdXNlIGEgY29ycmVzcG9uZGluZworY29tbWFuZCBsaW5lIGVudmlyb25tZW50IHdoZW4gdXNpbmcgYSBWaXN1YWwgU3R1ZGlvCitnZW5lcmF0b3IsIGRvaW5nIHNvIGhhcyBubyBkaXNhZHZhbnRhZ2VzLgorCitXaGVuIHVzaW5nIFhjb2RlLCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBYY29kZQordmVyc2lvbiBpbnN0YWxsZWQuICBXaGljaCBvbmUgdG8gdXNlIGNhbiBiZSBzZWxlY3RlZAoraW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMsIGJ1dCB0aGUgbW9zdCBjb21tb24KK21ldGhvZHMgYXJlOgorCisqIFNldHRpbmcgdGhlIGRlZmF1bHQgdmVyc2lvbiBpbiB0aGUgcHJlZmVyZW5jZXMKKyAgb2YgdGhlIFhjb2RlIElERS4KKyogU2V0dGluZyB0aGUgZGVmYXVsdCB2ZXJzaW9uIHZpYSB0aGUgYGB4Y29kZS1zZWxlY3RgYAorICBjb21tYW5kIGxpbmUgdG9vbC4KKyogT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGJ5IHNldHRpbmcgdGhlCisgIGBgREVWRUxPUEVSX0RJUmBgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZworICBDTWFrZSBhbmQgdGhlIGJ1aWxkIHRvb2wuCisKK0NvbW1hbmQgbGluZSBgYC1HYGAgb3B0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDTWFrZSBjaG9vc2VzIGEgZ2VuZXJhdG9yIGJ5IGRlZmF1bHQgYmFzZWQgb24gdGhlCitwbGF0Zm9ybS4gIFVzdWFsbHksIHRoZSBkZWZhdWx0IGdlbmVyYXRvciBpcyBzdWZmaWNpZW50Cit0byBhbGxvdyB0aGUgdXNlciB0byBwcm9jZWVkIHRvIGJ1aWxkIHRoZSBzb2Z0d2FyZS4KKworVGhlIHVzZXIgbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdlbmVyYXRvciB3aXRoCit0aGUgYGAtR2BgIG9wdGlvbjoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNtYWtlIC4uIC1HIE5pbmphCisKK1RoZSBvdXRwdXQgb2YgYGBjbWFrZSAtLWhlbHBgYCBpbmNsdWRlcyBhIGxpc3Qgb2YKKzptYW51YWw6YGdlbmVyYXRvcnMgPGNtYWtlLWdlbmVyYXRvcnMoNyk+YCBhdmFpbGFibGUKK2ZvciB0aGUgdXNlciB0byBjaG9vc2UgZnJvbS4gIE5vdGUgdGhhdCBnZW5lcmF0b3IKK25hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4KKworT24gVW5peC1saWtlIHN5c3RlbXMgKGluY2x1ZGluZyBNYWMgT1MgWCksIHRoZQorOmdlbmVyYXRvcjpgVW5peCBNYWtlZmlsZXNgIGdlbmVyYXRvciBpcyB1c2VkIGJ5CitkZWZhdWx0LiAgQSB2YXJpYW50IG9mIHRoYXQgZ2VuZXJhdG9yIGNhbiBhbHNvIGJlIHVzZWQKK29uIFdpbmRvd3MgaW4gdmFyaW91cyBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgdGhlCis6Z2VuZXJhdG9yOmBOTWFrZSBNYWtlZmlsZXNgIGFuZAorOmdlbmVyYXRvcjpgTWluR1cgTWFrZWZpbGVzYCBnZW5lcmF0b3IuICBUaGVzZSBnZW5lcmF0b3JzCitnZW5lcmF0ZSBhIGBgTWFrZWZpbGVgYCB2YXJpYW50IHdoaWNoIGNhbiBiZSBleGVjdXRlZAord2l0aCBgYG1ha2VgYCwgYGBnbWFrZWBgLCBgYG5tYWtlYGAgb3Igc2ltaWxhciB0b29scy4KK1NlZSB0aGUgaW5kaXZpZHVhbCBnZW5lcmF0b3IgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZQoraW5mb3JtYXRpb24gb24gdGFyZ2V0ZWQgZW52aXJvbm1lbnRzIGFuZCB0b29scy4KKworVGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3IgaXMgYXZhaWxhYmxlIG9uIGFsbAorbWFqb3IgcGxhdGZvcm1zLiBgYG5pbmphYGAgaXMgYSBidWlsZCB0b29sIHNpbWlsYXIKK2luIHVzZS1jYXNlcyB0byBgYG1ha2VgYCwgYnV0IHdpdGggYSBmb2N1cyBvbgorcGVyZm9ybWFuY2UgYW5kIGVmZmljaWVuY3kuCisKK09uIFdpbmRvd3MsIDptYW51YWw6YGNtYWtlKDEpYCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQorc29sdXRpb25zIGZvciB0aGUgVmlzdWFsIFN0dWRpbyBJREUuICBWaXN1YWwgU3R1ZGlvCit2ZXJzaW9ucyBtYXkgYmUgc3BlY2lmaWVkIGJ5IHRoZSBwcm9kdWN0IG5hbWUgb2YgdGhlCitJREUsIHdoaWNoIGluY2x1ZGVzIGEgZm91ci1kaWdpdCB5ZWFyLiAgQWxpYXNlcyBhcmUKK3Byb3ZpZGVkIGZvciBvdGhlciBtZWFucyBieSB3aGljaCBWaXN1YWwgU3R1ZGlvCit2ZXJzaW9ucyBhcmUgc29tZXRpbWVzIHJlZmVycmVkIHRvLCBzdWNoIGFzIHR3bworZGlnaXRzIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUKK1Zpc3VhbEMrKyBjb21waWxlciwgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY21ha2UgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMjAxOSIKKyAgJCBjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNiIKKyAgJCBjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IgorCitWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcnMgY2FuIHRhcmdldCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KK09uZSBjYW4gc3BlY2lmeSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB1c2luZyB0aGUgYC1BYCBvcHRpb246CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgY21ha2UgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMjAxOSIgLUEgeDY0CisgIGNtYWtlIC4uIC1HICJWaXN1YWwgU3R1ZGlvIDE2IiAtQSBBUk0KKyAgY21ha2UgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIgLUEgQVJNNjQKKworT24gQXBwbGUsIHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIG1heSBiZSB1c2VkIHRvCitnZW5lcmF0ZSBwcm9qZWN0IGZpbGVzIGZvciB0aGUgWGNvZGUgSURFLgorCitTb21lIElERXMgc3VjaCBhcyBLRGV2ZWxvcDQsIFF0Q3JlYXRvciBhbmQgQ0xpb24gaGF2ZQorbmF0aXZlIHN1cHBvcnQgZm9yIENNYWtlLWJhc2VkIGJ1aWxkc3lzdGVtcy4gIFRob3NlIElERXMKK3Byb3ZpZGUgdXNlciBpbnRlcmZhY2UgZm9yIHNlbGVjdGluZyBhbiB1bmRlcmx5aW5nCitnZW5lcmF0b3IgdG8gdXNlLCB0eXBpY2FsbHkgYSBjaG9pY2UgYmV0d2VlbiBhIGBgTWFrZWZpbGVgYAorb3IgYSBgYE5pbmphYGAgYmFzZWQgZ2VuZXJhdG9yLgorCitOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgZ2VuZXJhdG9yCit3aXRoIGBgLUdgYCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZiBDTWFrZS4gIFRvCitjaGFuZ2UgdGhlIGdlbmVyYXRvciwgdGhlIGJ1aWxkIGRpcmVjdG9yeSBtdXN0IGJlCitkZWxldGVkIGFuZCB0aGUgYnVpbGQgbXVzdCBiZSBzdGFydGVkIGZyb20gc2NyYXRjaC4KKworV2hlbiBnZW5lcmF0aW5nIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBhbmQgc29sdXRpb25zCitmaWxlcyBzZXZlcmFsIG90aGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB1c2Ugd2hlbgoraW5pdGlhbGx5IHJ1bm5pbmcgOm1hbnVhbDpgY21ha2UoMSlgLgorCitUaGUgVmlzdWFsIFN0dWRpbyB0b29sc2V0IGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUKK2BgLVRgYCBvcHRpb246CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgICAkICMgQnVpbGQgd2l0aCB0aGUgY2xhbmctY2wgdG9vbHNldAorICAgICQgY21ha2UuZXhlIC4uIC1HICJWaXN1YWwgU3R1ZGlvIDE2IDIwMTkiIC1BIHg2NCAtVCBMTFZNCisgICAgJCAjIEJ1aWxkIHRhcmdldGluZyBXaW5kb3dzIFhQCisgICAgJCBjbWFrZS5leGUgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIgLUEgeDY0IC1UIHYxMjBfeHAKKworV2hlcmVhcyB0aGUgYGAtQWBgIG9wdGlvbiBzcGVjaWZpZXMgdGhlIF90YXJnZXRfCithcmNoaXRlY3R1cmUsIHRoZSBgYC1UYGAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKK2RldGFpbHMgb2YgdGhlIHRvb2xjaGFpbiB1c2VkLiAgRm9yIGV4YW1wbGUsIGAtVGhvc3Q9eDY0YAorY2FuIGJlIGdpdmVuIHRvIHNlbGVjdCB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGhvc3QKK3Rvb2xzLiAgVGhlIGZvbGxvd2luZyBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSA2NC1iaXQKK3Rvb2xzIGFuZCBhbHNvIGJ1aWxkIGZvciBhIDY0LWJpdCB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAgJCBjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IiAtQSB4NjQgLVRob3N0PXg2NAorCitDaG9vc2luZyBhIGdlbmVyYXRvciBpbiBjbWFrZS1ndWkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgIkNvbmZpZ3VyZSIgYnV0dG9uIHRyaWdnZXJzIGEgbmV3IGRpYWxvZyB0bworc2VsZWN0IHRoZSBDTWFrZSBnZW5lcmF0b3IgdG8gdXNlLgorCisuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Db25maWd1cmUtRGlhbG9nLnBuZworCitBbGwgZ2VuZXJhdG9ycyBhdmFpbGFibGUgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgYWxzbworYXZhaWxhYmxlIGluIDptYW51YWw6YGNtYWtlLWd1aSgxKWAuCisKKy4uIGltYWdlOjogL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNob29zZS1HZW5lcmF0b3IucG5nCisKK1doZW4gY2hvb3NpbmcgYSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvciwgZnVydGhlciBvcHRpb25zCithcmUgYXZhaWxhYmxlIHRvIHNldCBhbiBhcmNoaXRlY3R1cmUgdG8gZ2VuZXJhdGUgZm9yLgorCisuLiBpbWFnZTo6IC9tYW51YWwvVlMtQ2hvb3NlLUFyY2gucG5nCisKKy4uIF9gU2V0dGluZyBCdWlsZCBWYXJpYWJsZXNgOgorCitTZXR0aW5nIEJ1aWxkIFZhcmlhYmxlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworU29mdHdhcmUgcHJvamVjdHMgb2Z0ZW4gcmVxdWlyZSB2YXJpYWJsZXMgdG8gYmUKK3NldCBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gaW52b2tpbmcgQ01ha2UuICBTb21lIG9mCit0aGUgbW9zdCBjb21tb25seSB1c2VkIENNYWtlIHZhcmlhYmxlcyBhcmUgbGlzdGVkIGluCit0aGUgdGFibGUgYmVsb3c6CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBWYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVhbmluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIDp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgICAgICAgICAgICAgICBQYXRoIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmd1aWRlOmBkZXBlbmRlbnQgcGFja2FnZXMgPFVzaW5nIERlcGVuZGVuY2llcyBHdWlkZT5gCisgOnZhcmlhYmxlOmBDTUFLRV9NT0RVTEVfUEFUSGAgICAgICAgICAgICAgIFBhdGggdG8gc2VhcmNoIGZvciBhZGRpdGlvbmFsIENNYWtlIG1vZHVsZXMKKyA6dmFyaWFibGU6YENNQUtFX0JVSUxEX1RZUEVgICAgICAgICAgICAgICAgQnVpbGQgY29uZmlndXJhdGlvbiwgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYERlYnVnYGAgb3IgYGBSZWxlYXNlYGAsIGRldGVybWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnL29wdGltaXphdGlvbiBmbGFncy4gIFRoaXMgaXMgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudCBmb3Igc2luZ2xlLWNvbmZpZ3VyYXRpb24gYnVpbGRzeXN0ZW1zIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYGBNYWtlZmlsZWBgIGFuZCBgYE5pbmphYGAuICBNdWx0aS1jb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkc3lzdGVtcyBzdWNoIGFzIHRob3NlIGZvciBWaXN1YWwgU3R1ZGlvIGFuZCBYY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgdGhpcyBzZXR0aW5nLgorIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgICAgICAgICAgICBMb2NhdGlvbiB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSB0byB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGluc3RhbGxgYCBidWlsZCB0YXJnZXQKKyA6dmFyaWFibGU6YENNQUtFX1RPT0xDSEFJTl9GSUxFYCAgICAgICAgICAgRmlsZSBjb250YWluaW5nIGNyb3NzLWNvbXBpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1hbnVhbDpgdG9vbGNoYWlucyBhbmQgc3lzcm9vdHMgPGNtYWtlLXRvb2xjaGFpbnMoNyk+YC4KKyA6dmFyaWFibGU6YEJVSUxEX1NIQVJFRF9MSUJTYCAgICAgICAgICAgICAgV2hldGhlciB0byBidWlsZCBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBzdGF0aWMgbGlicmFyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzIHVzZWQgd2l0aG91dCBhIHR5cGUKKyA6dmFyaWFibGU6YENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTYCAgR2VuZXJhdGUgYSBgYGNvbXBpbGVfY29tbWFuZHMuanNvbmBgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHVzZSB3aXRoIGNsYW5nLWJhc2VkIHRvb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK090aGVyIHByb2plY3Qtc3BlY2lmaWMgdmFyaWFibGVzIG1heSBiZSBhdmFpbGFibGUKK3RvIGNvbnRyb2wgYnVpbGRzLCBzdWNoIGFzIGVuYWJsaW5nIG9yIGRpc2FibGluZworY29tcG9uZW50cyBvZiB0aGUgcHJvamVjdC4KKworVGhlcmUgaXMgbm8gY29udmVudGlvbiBwcm92aWRlZCBieSBDTWFrZSBmb3IgaG93CitzdWNoIHZhcmlhYmxlcyBhcmUgbmFtZWQgYmV0d2VlbiBkaWZmZXJlbnQKK3Byb3ZpZGVkIGJ1aWxkc3lzdGVtcywgZXhjZXB0IHRoYXQgdmFyaWFibGVzIHdpdGgKK3RoZSBwcmVmaXggYGBDTUFLRV9gYCB1c3VhbGx5IHJlZmVyIHRvIG9wdGlvbnMKK3Byb3ZpZGVkIGJ5IENNYWtlIGl0c2VsZiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCitpbiB0aGlyZC1wYXJ0eSBvcHRpb25zLCB3aGljaCBzaG91bGQgdXNlCit0aGVpciBvd24gcHJlZml4IGluc3RlYWQuICBUaGUKKzptYW51YWw6YGNtYWtlLWd1aSgxKWAgdG9vbCBjYW4gZGlzcGxheSBvcHRpb25zCitpbiBncm91cHMgZGVmaW5lZCBieSB0aGVpciBwcmVmaXgsIHNvIGl0IG1ha2VzCitzZW5zZSBmb3IgdGhpcmQgcGFydGllcyB0byBlbnN1cmUgdGhhdCB0aGV5IHVzZSBhCitzZWxmLWNvbnNpc3RlbnQgcHJlZml4LgorCitTZXR0aW5nIHZhcmlhYmxlcyBvbiB0aGUgY29tbWFuZCBsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NNYWtlIHZhcmlhYmxlcyBjYW4gYmUgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUgZWl0aGVyCit3aGVuIGNyZWF0aW5nIHRoZSBpbml0aWFsIGJ1aWxkOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAgJCBta2RpciBidWlsZAorICAgICQgY2QgYnVpbGQKKyAgICAkIGNtYWtlIC4uIC1HIE5pbmphIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZworCitvciBsYXRlciBvbiBhIHN1YnNlcXVlbnQgaW52b2NhdGlvbiBvZgorOm1hbnVhbDpgY21ha2UoMSlgOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAgJCBjZCBidWlsZAorICAgICQgY21ha2UgLiAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcKKworVGhlIGBgLVVgYCBmbGFnIG1heSBiZSB1c2VkIHRvIHVuc2V0IHZhcmlhYmxlcworb24gdGhlIDptYW51YWw6YGNtYWtlKDEpYCBjb21tYW5kIGxpbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgICAkIGNkIGJ1aWxkCisgICAgJCBjbWFrZSAuIC1VTXlQYWNrYWdlX0RJUgorCitBIENNYWtlIGJ1aWxkc3lzdGVtIHdoaWNoIHdhcyBpbml0aWFsbHkgY3JlYXRlZAorb24gdGhlIGNvbW1hbmQgbGluZSBjYW4gYmUgbW9kaWZpZWQgdXNpbmcgdGhlCis6bWFudWFsOmBjbWFrZS1ndWkoMSlgIGFuZCB2aWNlLXZlcnNhLgorCitUaGUgOm1hbnVhbDpgY21ha2UoMSlgIHRvb2wgYWxsb3dzIHNwZWNpZnlpbmcgYQorZmlsZSB0byB1c2UgdG8gcG9wdWxhdGUgdGhlIGluaXRpYWwgY2FjaGUgdXNpbmcKK3RoZSBgYC1DYGAgb3B0aW9uLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNpbXBsaWZ5Citjb21tYW5kcyBhbmQgc2NyaXB0cyB3aGljaCByZXBlYXRlZGx5IHJlcXVpcmUgdGhlCitzYW1lIGNhY2hlIGVudHJpZXMuCisKK1NldHRpbmcgdmFyaWFibGVzIHdpdGggY21ha2UtZ3VpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWYXJpYWJsZXMgbWF5IGJlIHNldCBpbiB0aGUgY21ha2UtZ3VpIHVzaW5nIHRoZSAiQWRkIEVudHJ5IgorYnV0dG9uLiAgVGhpcyB0cmlnZ2VycyBhIG5ldyBkaWFsb2cgdG8gc2V0IHRoZSB2YWx1ZSBvZgordGhlIHZhcmlhYmxlLgorCisuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1BZGQtRW50cnkucG5nCisKK1RoZSBtYWluIHZpZXcgb2YgdGhlIDptYW51YWw6YGNtYWtlLWd1aSgxKWAgdXNlciBpbnRlcmZhY2UKK2NhbiBiZSB1c2VkIHRvIGVkaXQgZXhpc3RpbmcgdmFyaWFibGVzLgorCitUaGUgQ01ha2UgQ2FjaGUKKy0tLS0tLS0tLS0tLS0tLQorCitXaGVuIENNYWtlIGlzIGV4ZWN1dGVkLCBpdCBuZWVkcyB0byBmaW5kIHRoZSBsb2NhdGlvbnMgb2YKK2NvbXBpbGVycywgdG9vbHMgYW5kIGRlcGVuZGVuY2llcy4gIEl0IGFsc28gbmVlZHMgdG8gYmUKK2FibGUgdG8gY29uc2lzdGVudGx5IHJlLWdlbmVyYXRlIGEgYnVpbGRzeXN0ZW0gdG8gdXNlIHRoZQorc2FtZSBjb21waWxlL2xpbmsgZmxhZ3MgYW5kIHBhdGhzIHRvIGRlcGVuZGVuY2llcy4gIFN1Y2gKK3BhcmFtZXRlcnMgYXJlIGFsc28gcmVxdWlyZWQgdG8gYmUgY29uZmlndXJhYmxlIGJ5IHRoZQordXNlciBiZWNhdXNlIHRoZXkgYXJlIHBhdGhzIGFuZCBvcHRpb25zIHNwZWNpZmljIHRvIHRoZQordXNlcnMgc3lzdGVtLgorCitXaGVuIGl0IGlzIGZpcnN0IGV4ZWN1dGVkLCBDTWFrZSBnZW5lcmF0ZXMgYQorYGBDTWFrZUNhY2hlLnR4dGBgIGZpbGUgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSBjb250YWluaW5nCitrZXktdmFsdWUgcGFpcnMgZm9yIHN1Y2ggYXJ0aWZhY3RzLiAgVGhlIGNhY2hlIGZpbGUgY2FuIGJlCit2aWV3ZWQgb3IgZWRpdGVkIGJ5IHRoZSB1c2VyIGJ5IHJ1bm5pbmcgdGhlCis6bWFudWFsOmBjbWFrZS1ndWkoMSlgIG9yIDptYW51YWw6YGNjbWFrZSgxKWAgdG9vbC4gIFRoZQordG9vbHMgcHJvdmlkZSBhbiBpbnRlcmFjdGl2ZSBpbnRlcmZhY2UgZm9yIHJlLWNvbmZpZ3VyaW5nCit0aGUgcHJvdmlkZWQgc29mdHdhcmUgYW5kIHJlLWdlbmVyYXRpbmcgdGhlIGJ1aWxkc3lzdGVtLAorYXMgaXMgbmVlZGVkIGFmdGVyIGVkaXRpbmcgY2FjaGVkIHZhbHVlcy4gIEVhY2ggY2FjaGUKK2VudHJ5IG1heSBoYXZlIGFuIGFzc29jaWF0ZWQgc2hvcnQgaGVscCB0ZXh0IHdoaWNoIGlzCitkaXNwbGF5ZWQgaW4gdGhlIHVzZXIgaW50ZXJmYWNlIHRvb2xzLgorCitUaGUgY2FjaGUgZW50cmllcyBtYXkgYWxzbyBoYXZlIGEgdHlwZSB0byBzaWduaWZ5IGhvdyBpdAorc2hvdWxkIGJlIHByZXNlbnRlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuICBGb3IgZXhhbXBsZSwKK2EgY2FjaGUgZW50cnkgb2YgdHlwZSBgYEJPT0xgYCBjYW4gYmUgZWRpdGVkIGJ5IGEKK2NoZWNrYm94IGluIGEgdXNlciBpbnRlcmZhY2UsIGEgYGBTVFJJTkdgYCBjYW4gYmUgZWRpdGVkCitpbiBhIHRleHQgZmllbGQsIGFuZCBhIGBgRklMRVBBVEhgYCB3aGlsZSBzaW1pbGFyIHRvIGEKK2BgU1RSSU5HYGAgc2hvdWxkIGFsc28gcHJvdmlkZSBhIHdheSB0byBsb2NhdGUgZmlsZXN5c3RlbQorcGF0aHMgdXNpbmcgYSBmaWxlIGRpYWxvZy4gIEFuIGVudHJ5IG9mIHR5cGUgYGBTVFJJTkdgYAorbWF5IHByb3ZpZGUgYSByZXN0cmljdGVkIGxpc3Qgb2YgYWxsb3dlZCB2YWx1ZXMgd2hpY2ggYXJlCit0aGVuIHByb3ZpZGVkIGluIGEgZHJvcC1kb3duIG1lbnUgaW4gdGhlCis6bWFudWFsOmBjbWFrZS1ndWkoMSlgIHVzZXIgaW50ZXJmYWNlIChzZWUgdGhlCis6cHJvcF9jYWNoZTpgU1RSSU5HU2AgY2FjaGUgcHJvcGVydHkpLgorCitUaGUgQ01ha2UgZmlsZXMgc2hpcHBlZCB3aXRoIGEgc29mdHdhcmUgcGFja2FnZSBtYXkgYWxzbworZGVmaW5lIGJvb2xlYW4gdG9nZ2xlIG9wdGlvbnMgdXNpbmcgdGhlIDpjb21tYW5kOmBvcHRpb25gCitjb21tYW5kLiAgVGhlIGNvbW1hbmQgY3JlYXRlcyBhIGNhY2hlIGVudHJ5IHdoaWNoIGhhcyBhCitoZWxwIHRleHQgYW5kIGEgZGVmYXVsdCB2YWx1ZS4gIFN1Y2ggY2FjaGUgZW50cmllcyBhcmUKK3R5cGljYWxseSBzcGVjaWZpYyB0byB0aGUgcHJvdmlkZWQgc29mdHdhcmUgYW5kIGFmZmVjdAordGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1aWxkLCBzdWNoIGFzIHdoZXRoZXIgdGVzdHMKK2FuZCBleGFtcGxlcyBhcmUgYnVpbHQsIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBleGNlcHRpb25zCitlbmFibGVkIGV0Yy4KKworSW52b2tpbmcgdGhlIEJ1aWxkc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQWZ0ZXIgZ2VuZXJhdGluZyB0aGUgYnVpbGRzeXN0ZW0sIHRoZSBzb2Z0d2FyZSBjYW4gYmUKK2J1aWx0IGJ5IGludm9raW5nIHRoZSBwYXJ0aWN1bGFyIGJ1aWxkIHRvb2wuICBJbiB0aGUKK2Nhc2Ugb2YgdGhlIElERSBnZW5lcmF0b3JzLCB0aGlzIGNhbiBpbnZvbHZlIGxvYWRpbmcKK3RoZSBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlIGludG8gdGhlIElERSB0byBpbnZva2UgdGhlCitidWlsZC4KKworQ01ha2UgaXMgYXdhcmUgb2YgdGhlIHNwZWNpZmljIGJ1aWxkIHRvb2wgbmVlZGVkIHRvIGludm9rZQorYSBidWlsZCBzbyBpbiBnZW5lcmFsLCB0byBidWlsZCBhIGJ1aWxkc3lzdGVtIG9yIHByb2plY3QKK2Zyb20gdGhlIGNvbW1hbmQgbGluZSBhZnRlciBnZW5lcmF0aW5nLCB0aGUgZm9sbG93aW5nCitjb21tYW5kIG1heSBiZSBpbnZva2VkIGluIHRoZSBidWlsZCBkaXJlY3Rvcnk6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBjbWFrZSAtLWJ1aWxkIC4KKworVGhlIGBgLS1idWlsZGBgIGZsYWcgZW5hYmxlcyBhIHBhcnRpY3VsYXIgbW9kZSBvZgorb3BlcmF0aW9uIGZvciB0aGUgOm1hbnVhbDpgY21ha2UoMSlgIHRvb2wuICBJdCBpbnZva2VzCit0aGUgIDp2YXJpYWJsZTpgQ01BS0VfTUFLRV9QUk9HUkFNYCBjb21tYW5kIGFzc29jaWF0ZWQKK3dpdGggdGhlIDptYW51YWw6YGdlbmVyYXRvciA8Y21ha2UtZ2VuZXJhdG9ycyg3KT5gLCBvcgordGhlIGJ1aWxkIHRvb2wgY29uZmlndXJlZCBieSB0aGUgdXNlci4KKworVGhlIGBgLS1idWlsZGBgIG1vZGUgYWxzbyBhY2NlcHRzIHRoZSBwYXJhbWV0ZXIKK2BgLS10YXJnZXRgYCB0byBzcGVjaWZ5IGEgcGFydGljdWxhciB0YXJnZXQgdG8gYnVpbGQsCitmb3IgZXhhbXBsZSBhIHBhcnRpY3VsYXIgbGlicmFyeSwgZXhlY3V0YWJsZSBvcgorY3VzdG9tIHRhcmdldCwgb3IgYSBwYXJ0aWN1bGFyIHNwZWNpYWwgdGFyZ2V0IGxpa2UKK2BgaW5zdGFsbGBgOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY21ha2UgLS1idWlsZCAuIC0tdGFyZ2V0IG15ZXhlCisKK1RoZSBgYC0tYnVpbGRgYCBtb2RlIGFsc28gYWNjZXB0cyBhIGBgLS1jb25maWdgYCBwYXJhbWV0ZXIKK2luIHRoZSBjYXNlIG9mIG11bHRpLWNvbmZpZyBnZW5lcmF0b3JzIHRvIHNwZWNpZnkgd2hpY2gKK3BhcnRpY3VsYXIgY29uZmlndXJhdGlvbiB0byBidWlsZDoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNtYWtlIC0tYnVpbGQgLiAtLXRhcmdldCBteWV4ZSAtLWNvbmZpZyBSZWxlYXNlCisKK1RoZSBgYC0tY29uZmlnYGAgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgdGhlIGdlbmVyYXRvcgorZ2VuZXJhdGVzIGEgYnVpbGRzeXN0ZW0gc3BlY2lmaWMgdG8gYSBjb25maWd1cmF0aW9uIHdoaWNoCitpcyBjaG9zZW4gd2hlbiBpbnZva2luZyBjbWFrZSB3aXRoIHRoZQorOnZhcmlhYmxlOmBDTUFLRV9CVUlMRF9UWVBFYCB2YXJpYWJsZS4KKworU29tZSBidWlsZHN5c3RlbXMgb21pdCBkZXRhaWxzIG9mIGNvbW1hbmQgbGluZXMgaW52b2tlZAorZHVyaW5nIHRoZSBidWlsZC4gIFRoZSBgYC0tdmVyYm9zZWBgIGZsYWcgY2FuIGJlIHVzZWQgdG8KK2NhdXNlIHRob3NlIGNvbW1hbmQgbGluZXMgdG8gYmUgc2hvd246CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBjbWFrZSAtLWJ1aWxkIC4gLS10YXJnZXQgbXlleGUgLS12ZXJib3NlCisKK1RoZSBgYC0tYnVpbGRgYCBtb2RlIGNhbiBhbHNvIHBhc3MgcGFydGljdWxhciBjb21tYW5kCitsaW5lIG9wdGlvbnMgdG8gdGhlIHVuZGVybHlpbmcgYnVpbGQgdG9vbCBieSBsaXN0aW5nCit0aGVtIGFmdGVyIGBgLS1gYC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBzcGVjaWZ5CitvcHRpb25zIHRvIHRoZSBidWlsZCB0b29sLCBzdWNoIGFzIHRvIGNvbnRpbnVlIHRoZQorYnVpbGQgYWZ0ZXIgYSBmYWlsZWQgam9iLCB3aGVyZSBDTWFrZSBkb2VzIG5vdAorcHJvdmlkZSBhIGhpZ2gtbGV2ZWwgdXNlciBpbnRlcmZhY2UuCisKK0ZvciBhbGwgZ2VuZXJhdG9ycywgaXQgaXMgcG9zc2libGUgdG8gcnVuIHRoZSB1bmRlcmx5aW5nCitidWlsZCB0b29sIGFmdGVyIGludm9raW5nIENNYWtlLiAgRm9yIGV4YW1wbGUsIGBgbWFrZWBgCittYXkgYmUgZXhlY3V0ZWQgYWZ0ZXIgZ2VuZXJhdGluZyB3aXRoIHRoZQorOmdlbmVyYXRvcjpgVW5peCBNYWtlZmlsZXNgIGdlbmVyYXRvciB0byBpbnZva2UgdGhlIGJ1aWxkLAorb3IgYGBuaW5qYWBgIGFmdGVyIGdlbmVyYXRpbmcgd2l0aCB0aGUgOmdlbmVyYXRvcjpgTmluamFgCitnZW5lcmF0b3IgZXRjLiAgVGhlIElERSBidWlsZHN5c3RlbXMgdXN1YWxseSBwcm92aWRlCitjb21tYW5kIGxpbmUgdG9vbGluZyBmb3IgYnVpbGRpbmcgYSBwcm9qZWN0IHdoaWNoIGNhbgorYWxzbyBiZSBpbnZva2VkLgorCitTZWxlY3RpbmcgYSBUYXJnZXQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitFYWNoIGV4ZWN1dGFibGUgYW5kIGxpYnJhcnkgZGVzY3JpYmVkIGluIHRoZSBDTWFrZSBmaWxlcworaXMgYSBidWlsZCB0YXJnZXQsIGFuZCB0aGUgYnVpbGRzeXN0ZW0gbWF5IGRlc2NyaWJlCitjdXN0b20gdGFyZ2V0cywgZWl0aGVyIGZvciBpbnRlcm5hbCB1c2UsIG9yIGZvciB1c2VyCitjb25zdW1wdGlvbiwgZm9yIGV4YW1wbGUgdG8gY3JlYXRlIGRvY3VtZW50YXRpb24uCisKK0NNYWtlIHByb3ZpZGVzIHNvbWUgYnVpbHQtaW4gdGFyZ2V0cyBmb3IgYWxsIGJ1aWxkc3lzdGVtcworcHJvdmlkaW5nIENNYWtlIGZpbGVzLgorCitgYGFsbGBgCisgIFRoZSBkZWZhdWx0IHRhcmdldCB1c2VkIGJ5IGBgTWFrZWZpbGVgYCBhbmQgYGBOaW5qYWBgCisgIGdlbmVyYXRvcnMuICBCdWlsZHMgYWxsIHRhcmdldHMgaW4gdGhlIGJ1aWxkc3lzdGVtLAorICBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlIGV4Y2x1ZGVkIGJ5IHRoZWlyCisgIDpwcm9wX3RndDpgRVhDTFVERV9GUk9NX0FMTGAgdGFyZ2V0IHByb3BlcnR5IG9yCisgIDpwcm9wX2RpcjpgRVhDTFVERV9GUk9NX0FMTGAgZGlyZWN0b3J5IHByb3BlcnR5LiAgVGhlCisgIG5hbWUgYGBBTExfQlVJTERgYCBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UgZm9yIHRoZQorICBYY29kZSBhbmQgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3JzLgorYGBoZWxwYGAKKyAgTGlzdHMgdGhlIHRhcmdldHMgYXZhaWxhYmxlIGZvciBidWlsZC4gIFRoaXMgdGFyZ2V0IGlzCisgIGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSA6Z2VuZXJhdG9yOmBVbml4IE1ha2VmaWxlc2Agb3IKKyAgOmdlbmVyYXRvcjpgTmluamFgIGdlbmVyYXRvciwgYW5kIHRoZSBleGFjdCBvdXRwdXQgaXMKKyAgdG9vbC1zcGVjaWZpYy4KK2BgY2xlYW5gYAorICBEZWxldGUgYnVpbHQgb2JqZWN0IGZpbGVzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMuICBUaGUKKyAgYGBNYWtlZmlsZWBgIGJhc2VkIGdlbmVyYXRvcnMgY3JlYXRlIGEgYGBjbGVhbmBgIHRhcmdldAorICBwZXIgZGlyZWN0b3J5LCBzbyB0aGF0IGFuIGluZGl2aWR1YWwgZGlyZWN0b3J5IGNhbiBiZQorICBjbGVhbmVkLiAgVGhlIGBgTmluamFgYCB0b29sIHByb3ZpZGVzIGl0cyBvd24gZ3JhbnVsYXIKKyAgYGAtdCBjbGVhbmBgIHN5c3RlbS4KK2BgdGVzdGBgCisgIFJ1bnMgdGVzdHMuICBUaGlzIHRhcmdldCBpcyBvbmx5IGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlCisgIGlmIHRoZSBDTWFrZSBmaWxlcyBwcm92aWRlIENUZXN0LWJhc2VkIHRlc3RzLiAgU2VlIGFsc28KKyAgYFJ1bm5pbmcgVGVzdHNgXy4KK2BgaW5zdGFsbGBgCisgIEluc3RhbGxzIHRoZSBzb2Z0d2FyZS4gIFRoaXMgdGFyZ2V0IGlzIG9ubHkgYXV0b21hdGljYWxseQorICBhdmFpbGFibGUgaWYgdGhlIHNvZnR3YXJlIGRlZmluZXMgaW5zdGFsbCBydWxlcyB3aXRoIHRoZQorICA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZC4gIFNlZSBhbHNvCisgIGBTb2Z0d2FyZSBJbnN0YWxsYXRpb25gXy4KK2BgcGFja2FnZWBgCisgIENyZWF0ZXMgYSBiaW5hcnkgcGFja2FnZS4gIFRoaXMgdGFyZ2V0IGlzIG9ubHkKKyAgYXV0b21hdGljYWxseSBhdmFpbGFibGUgaWYgdGhlIENNYWtlIGZpbGVzIHByb3ZpZGUKKyAgQ1BhY2stYmFzZWQgcGFja2FnZXMuCitgYHBhY2thZ2Vfc291cmNlYGAKKyAgQ3JlYXRlcyBhIHNvdXJjZSBwYWNrYWdlLiAgVGhpcyB0YXJnZXQgaXMgb25seQorICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZSBpZiB0aGUgQ01ha2UgZmlsZXMgcHJvdmlkZQorICBDUGFjay1iYXNlZCBwYWNrYWdlcy4KKworRm9yIGBgTWFrZWZpbGVgYCBiYXNlZCBzeXN0ZW1zLCBgYC9mYXN0YGAgdmFyaWFudHMgb2YgYmluYXJ5CitidWlsZCB0YXJnZXRzIGFyZSBwcm92aWRlZC4gVGhlIGBgL2Zhc3RgYCB2YXJpYW50cyBhcmUgdXNlZAordG8gYnVpbGQgdGhlIHNwZWNpZmllZCB0YXJnZXQgd2l0aG91dCByZWdhcmQgZm9yIGl0cworZGVwZW5kZW5jaWVzLiAgVGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGNoZWNrZWQgYW5kCithcmUgbm90IHJlYnVpbHQgaWYgb3V0IG9mIGRhdGUuICBUaGUgOmdlbmVyYXRvcjpgTmluamFgCitnZW5lcmF0b3IgaXMgc3VmZmljaWVudGx5IGZhc3QgYXQgZGVwZW5kZW5jeSBjaGVja2luZyB0aGF0CitzdWNoIHRhcmdldHMgYXJlIG5vdCBwcm92aWRlZCBmb3IgdGhhdCBnZW5lcmF0b3IuCisKK2BgTWFrZWZpbGVgYCBiYXNlZCBzeXN0ZW1zIGFsc28gcHJvdmlkZSBidWlsZC10YXJnZXRzIHRvCitwcmVwcm9jZXNzLCBhc3NlbWJsZSBhbmQgY29tcGlsZSBpbmRpdmlkdWFsIGZpbGVzIGluIGEKK3BhcnRpY3VsYXIgZGlyZWN0b3J5LgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgbWFrZSBmb28uY3BwLmkKKyAgJCBtYWtlIGZvby5jcHAucworICAkIG1ha2UgZm9vLmNwcC5vCisKK1RoZSBmaWxlIGV4dGVuc2lvbiBpcyBidWlsdCBpbnRvIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQKK2JlY2F1c2UgYW5vdGhlciBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgYSBkaWZmZXJlbnQKK2V4dGVuc2lvbiBtYXkgZXhpc3QuICBIb3dldmVyLCBidWlsZC10YXJnZXRzIHdpdGhvdXQgdGhlCitmaWxlIGV4dGVuc2lvbiBhcmUgYWxzbyBwcm92aWRlZC4KKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIG1ha2UgZm9vLmkKKyAgJCBtYWtlIGZvby5zCisgICQgbWFrZSBmb28ubworCitJbiBidWlsZHN5c3RlbXMgd2hpY2ggY29udGFpbiBgYGZvby5jYGAgYW5kIGBgZm9vLmNwcGBgLAorYnVpbGRpbmcgdGhlIGBgZm9vLmlgYCB0YXJnZXQgd2lsbCBwcmVwcm9jZXNzIGJvdGggZmlsZXMuCisKK1NwZWNpZnlpbmcgYSBCdWlsZCBQcm9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvZ3JhbSBpbnZva2VkIGJ5IHRoZSBgYC0tYnVpbGRgYCBtb2RlIGlzIGRldGVybWluZWQKK2J5IHRoZSA6dmFyaWFibGU6YENNQUtFX01BS0VfUFJPR1JBTWAgdmFyaWFibGUuICBGb3IgbW9zdAorZ2VuZXJhdG9ycywgdGhlIHBhcnRpY3VsYXIgcHJvZ3JhbSBkb2VzIG5vdCBuZWVkIHRvIGJlCitjb25maWd1cmVkLgorCis9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgR2VuZXJhdG9yICAgICAgICAgICBEZWZhdWx0IG1ha2UgcHJvZ3JhbSAgICAgICAgICAgQWx0ZXJuYXRpdmVzCis9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PQorIFhDb2RlICAgICAgICAgICAgICAgICBgYHhjb2RlYnVpbGRgYAorIFVuaXggTWFrZWZpbGVzICAgICAgICBgYG1ha2VgYAorIE5NYWtlIE1ha2VmaWxlcyAgICAgICBgYG5tYWtlYGAgICAgICAgICAgICAgICAgICAgYGBqb21gYAorIE5NYWtlIE1ha2VmaWxlcyBKT00gICBgYGpvbWBgICAgICAgICAgICAgICAgICAgICAgYGBubWFrZWBgCisgTWluR1cgTWFrZWZpbGVzICAgICAgIGBgbWluZ3czMi1tYWtlYGAKKyBNU1lTIE1ha2VmaWxlcyAgICAgICAgYGBtYWtlYGAKKyBOaW5qYSAgICAgICAgICAgICAgICAgYGBuaW5qYWBgCisgVmlzdWFsIFN0dWRpbyAgICAgICAgIGBgbXNidWlsZGBgCisgV2F0Y29tIFdNYWtlICAgICAgICAgIGBgd21ha2VgYAorPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGBgam9tYGAgdG9vbCBpcyBjYXBhYmxlIG9mIHJlYWRpbmcgbWFrZWZpbGVzIG9mIHRoZQorYGBOTWFrZWBgIGZsYXZvciBhbmQgYnVpbGRpbmcgaW4gcGFyYWxsZWwsIHdoaWxlIHRoZQorYGBubWFrZWBgIHRvb2wgYWx3YXlzIGJ1aWxkcyBzZXJpYWxseS4gIEFmdGVyIGdlbmVyYXRpbmcKK3dpdGggdGhlIDpnZW5lcmF0b3I6YE5NYWtlIE1ha2VmaWxlc2AgZ2VuZXJhdG9yIGEgdXNlcgorY2FuIHJ1biBgYGpvbWBgIGluc3RlYWQgb2YgYGBubWFrZWBgLiAgVGhlIGBgLS1idWlsZGBgCittb2RlIHdvdWxkIGFsc28gdXNlIGBgam9tYGAgaWYgdGhlCis6dmFyaWFibGU6YENNQUtFX01BS0VfUFJPR1JBTWAgd2FzIHNldCB0byBgYGpvbWBgIHdoaWxlCit1c2luZyB0aGUgOmdlbmVyYXRvcjpgTk1ha2UgTWFrZWZpbGVzYCBnZW5lcmF0b3IsIGFuZAorYXMgYSBjb252ZW5pZW5jZSwgdGhlIDpnZW5lcmF0b3I6YE5NYWtlIE1ha2VmaWxlcyBKT01gCitnZW5lcmF0b3IgaXMgcHJvdmlkZWQgdG8gZmluZCBgYGpvbWBgIGluIHRoZSBub3JtYWwgd2F5CithbmQgdXNlIGl0IGFzIHRoZSA6dmFyaWFibGU6YENNQUtFX01BS0VfUFJPR1JBTWAuIEZvcgorY29tcGxldGVuZXNzLCBgYG5tYWtlYGAgaXMgYW4gYWx0ZXJuYXRpdmUgdG9vbCB3aGljaAorY2FuIHByb2Nlc3MgdGhlIG91dHB1dCBvZiB0aGUKKzpnZW5lcmF0b3I6YE5NYWtlIE1ha2VmaWxlcyBKT01gIGdlbmVyYXRvciwgYnV0IGRvaW5nCitzbyB3b3VsZCBiZSBhIHBlc3NpbWlzYXRpb24uCisKK1NvZnR3YXJlIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCB2YXJpYWJsZSBjYW4gYmUKK3NldCBpbiB0aGUgQ01ha2UgY2FjaGUgdG8gc3BlY2lmeSB3aGVyZSB0byBpbnN0YWxsIHRoZQorcHJvdmlkZWQgc29mdHdhcmUuICBJZiB0aGUgcHJvdmlkZWQgc29mdHdhcmUgaGFzIGluc3RhbGwKK3J1bGVzLCBzcGVjaWZpZWQgdXNpbmcgdGhlIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kLAordGhleSB3aWxsIGluc3RhbGwgYXJ0aWZhY3RzIGludG8gdGhhdCBwcmVmaXguICBPbiBXaW5kb3dzLAordGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZQorYGBQcm9ncmFtRmlsZXNgYCBzeXN0ZW0gZGlyZWN0b3J5IHdoaWNoIG1heSBiZQorYXJjaGl0ZWN0dXJlIHNwZWNpZmljLiAgT24gVW5peCBob3N0cywgYGAvdXNyL2xvY2FsYGAgaXMKK3RoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KKworVGhlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlIGFsd2F5cworcmVmZXJzIHRvIHRoZSBpbnN0YWxsYXRpb24gcHJlZml4IG9uIHRoZSB0YXJnZXQKK2ZpbGVzeXN0ZW0uCisKK0luIGNyb3NzLWNvbXBpbGluZyBvciBwYWNrYWdpbmcgc2NlbmFyaW9zIHdoZXJlIHRoZQorc3lzcm9vdCBpcyByZWFkLW9ubHkgb3Igd2hlcmUgdGhlIHN5c3Jvb3Qgc2hvdWxkIG90aGVyd2lzZQorcmVtYWluIHByaXN0aW5lLCB0aGUgOnZhcmlhYmxlOmBDTUFLRV9TVEFHSU5HX1BSRUZJWGAKK3ZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBsb2NhdGlvbiB0byBhY3R1YWxseSBpbnN0YWxsCit0aGUgZmlsZXMuCisKK1RoZSBjb21tYW5kczoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNtYWtlIC4uIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9L3Vzci9sb2NhbCBcCisgICAgLURDTUFLRV9TWVNST09UPSRIT01FL3Jvb3QgXAorICAgIC1EQ01BS0VfU1RBR0lOR19QUkVGSVg9L3RtcC9wYWNrYWdlCisgICQgY21ha2UgLS1idWlsZCAuCisgICQgY21ha2UgLS1idWlsZCAuIC0tdGFyZ2V0IGluc3RhbGwKKworcmVzdWx0IGluIGZpbGVzIGJlaW5nIGluc3RhbGxlZCB0byBwYXRocyBzdWNoCithcyBgYC90bXAvcGFja2FnZS9saWIvbGliZm9vLnNvYGAgb24gdGhlIGhvc3QgbWFjaGluZS4KK1RoZSBgYC91c3IvbG9jYWxgYCBsb2NhdGlvbiBvbiB0aGUgaG9zdCBtYWNoaW5lIGlzCitub3QgYWZmZWN0ZWQuCisKK1NvbWUgcHJvdmlkZWQgc29mdHdhcmUgbWF5IHNwZWNpZnkgYGB1bmluc3RhbGxgYCBydWxlcywKK2J1dCBDTWFrZSBkb2VzIG5vdCBnZW5lcmF0ZSBzdWNoIHJ1bGVzIGJ5IGRlZmF1bHQgaXRzZWxmLgorCitSdW5uaW5nIFRlc3RzCis9PT09PT09PT09PT09CisKK1RoZSA6bWFudWFsOmBjdGVzdCgxKWAgdG9vbCBpcyBzaGlwcGVkIHdpdGggdGhlIENNYWtlCitkaXN0cmlidXRpb24gdG8gZXhlY3V0ZSBwcm92aWRlZCB0ZXN0cyBhbmQgcmVwb3J0CityZXN1bHRzLiAgVGhlIGBgdGVzdGBgIGJ1aWxkLXRhcmdldCBpcyBwcm92aWRlZCB0byBydW4KK2FsbCBhdmFpbGFibGUgdGVzdHMsIGJ1dCB0aGUgOm1hbnVhbDpgY3Rlc3QoMSlgIHRvb2wKK2FsbG93cyBncmFudWxhciBjb250cm9sIG92ZXIgd2hpY2ggdGVzdHMgdG8gcnVuLCBob3cgdG8KK3J1biB0aGVtLCBhbmQgaG93IHRvIHJlcG9ydCByZXN1bHRzLiAgRXhlY3V0aW5nCis6bWFudWFsOmBjdGVzdCgxKWAgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyBlcXVpdmFsZW50Cit0byBydW5uaW5nIHRoZSBgYHRlc3RgYCB0YXJnZXQ6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBjdGVzdAorCitBIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgcGFzc2VkIHRvIHJ1biBvbmx5IHRlc3RzCit3aGljaCBtYXRjaCB0aGUgZXhwcmVzc2lvbi4gIFRvIHJ1biBvbmx5IHRlc3RzIHdpdGgKK2BgUXRgYCBpbiB0aGVpciBuYW1lOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY3Rlc3QgLVIgUXQKKworVGVzdHMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiB0b28uICBUbworcnVuIG9ubHkgdGVzdHMgd2l0aG91dCBgYFF0YGAgaW4gdGhlaXIgbmFtZToKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGN0ZXN0IC1FIFF0CisKK1Rlc3RzIGNhbiBiZSBydW4gaW4gcGFyYWxsZWwgYnkgcGFzc2luZyBgYC1qYGAgYXJndW1lbnRzCit0byA6bWFudWFsOmBjdGVzdCgxKWA6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBjdGVzdCAtUiBRdCAtajgKKworVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YENURVNUX1BBUkFMTEVMX0xFVkVMYAorY2FuIGFsdGVybmF0aXZlbHkgYmUgc2V0IHRvIGF2b2lkIHRoZSBuZWVkIHRvIHBhc3MKK2BgLWpgYC4KKworQnkgZGVmYXVsdCA6bWFudWFsOmBjdGVzdCgxKWAgZG9lcyBub3QgcHJpbnQgdGhlIG91dHB1dAorZnJvbSB0aGUgdGVzdHMuIFRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgYGAtVmBgIChvcgorYGAtLXZlcmJvc2VgYCkgZW5hYmxlcyB2ZXJib3NlIG1vZGUgdG8gcHJpbnQgdGhlCitvdXRwdXQgZnJvbSBhbGwgdGVzdHMuCitUaGUgYGAtLW91dHB1dC1vbi1mYWlsdXJlYGAgb3B0aW9uIHByaW50cyB0aGUgdGVzdAorb3V0cHV0IGZvciBmYWlsaW5nIHRlc3RzIG9ubHkuICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKzplbnZ2YXI6YENURVNUX09VVFBVVF9PTl9GQUlMVVJFYAorY2FuIGJlIHNldCB0byBgYDFgYCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBwYXNzaW5nIHRoZQorYGAtLW91dHB1dC1vbi1mYWlsdXJlYGAgb3B0aW9uIHRvIDptYW51YWw6YGN0ZXN0KDEpYC4KZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdXNpbmctZGVwZW5kZW5jaWVzL2luZGV4LnJzdCBiL0hlbHAvZ3VpZGUvdXNpbmctZGVwZW5kZW5jaWVzL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmRjYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS91c2luZy1kZXBlbmRlbmNpZXMvaW5kZXgucnN0CkBAIC0wLDAgKzEsMjAwIEBACitVc2luZyBEZXBlbmRlbmNpZXMgR3VpZGUKKyoqKioqKioqKioqKioqKioqKioqKioqKgorCisuLiBvbmx5OjogaHRtbAorCisgICAuLiBjb250ZW50czo6CisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK0ZvciBkZXZlbG9wZXJzIHdpc2hpbmcgdG8gdXNlIENNYWtlIHRvIGNvbnN1bWUgYSB0aGlyZAorcGFydHkgYmluYXJ5IHBhY2thZ2UsIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzCityZWdhcmRpbmcgaG93IHRvIG9wdGltYWxseSBkbyBzbywgZGVwZW5kaW5nIG9uIGhvdworQ01ha2UtYXdhcmUgdGhlIHRoaXJkLXBhcnR5IGxpYnJhcnkgaXMuCisKK0NNYWtlIGZpbGVzIHByb3ZpZGVkIHdpdGggYSBzb2Z0d2FyZSBwYWNrYWdlIGNvbnRhaW4KK2luc3RydWN0aW9ucyBmb3IgZmluZGluZyBlYWNoIGJ1aWxkIGRlcGVuZGVuY3kuICBTb21lCitidWlsZCBkZXBlbmRlbmNpZXMgYXJlIG9wdGlvbmFsIGluIHRoYXQgdGhlIGJ1aWxkIG1heQorc3VjY2VlZCB3aXRoIGEgZGlmZmVyZW50IGZlYXR1cmUgc2V0IGlmIHRoZSBkZXBlbmRlbmN5CitpcyBtaXNzaW5nLCBhbmQgc29tZSBkZXBlbmRlbmNpZXMgYXJlIHJlcXVpcmVkLiAgQ01ha2UKK3NlYXJjaGVzIHdlbGwta25vd24gbG9jYXRpb25zIGZvciBlYWNoIGRlcGVuZGVuY3ksIGFuZAordGhlIHByb3ZpZGVkIHNvZnR3YXJlIG1heSBzdXBwbHkgYWRkaXRpb25hbCBoaW50cyBvcgorbG9jYXRpb25zIHRvIENNYWtlIHRvIGZpbmQgZWFjaCBkZXBlbmRlbmN5LgorCitJZiBhIHJlcXVpcmVkIGRlcGVuZGVuY3kgaXMgbm90IGZvdW5kIGJ5Cis6bWFudWFsOmBjbWFrZSgxKWAsIHRoZSBjYWNoZSBpcyBwb3B1bGF0ZWQgd2l0aCBhbiBlbnRyeQord2hpY2ggY29udGFpbnMgYSBgYE5PVEZPVU5EYGAgdmFsdWUuICBUaGlzIHZhbHVlIGNhbiBiZQorcmVwbGFjZWQgYnkgc3BlY2lmeWluZyBpdCBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciBpbgordGhlIDptYW51YWw6YGNjbWFrZSgxKWAgb3IgOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCB0b29sLgorU2VlIHRoZSA6Z3VpZGU6YFVzZXIgSW50ZXJhY3Rpb24gR3VpZGVgIGZvcgorbW9yZSBhYm91dCBzZXR0aW5nIGNhY2hlIGVudHJpZXMuCisKK0xpYnJhcmllcyBwcm92aWRpbmcgQ29uZmlnLWZpbGUgcGFja2FnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1vc3QgY29udmVuaWVudCB3YXkgZm9yIGEgdGhpcmQtcGFydHkgdG8gcHJvdmlkZSBsaWJyYXJ5CitiaW5hcmllcyBmb3IgdXNlIHdpdGggQ01ha2UgaXMgdG8gcHJvdmlkZQorOnJlZjpgQ29uZmlnIEZpbGUgUGFja2FnZXNgLiAgVGhlc2UgcGFja2FnZXMgYXJlIHRleHQgZmlsZXMKK3NoaXBwZWQgd2l0aCB0aGUgbGlicmFyeSB3aGljaCBpbnN0cnVjdCBDTWFrZSBob3cgdG8gdXNlIHRoZQorbGlicmFyeSBiaW5hcmllcyBhbmQgYXNzb2NpYXRlZCBoZWFkZXJzLCBoZWxwZXIgdG9vbHMgYW5kCitDTWFrZSBtYWNyb3MgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkuCisKK1RoZSBjb25maWcgZmlsZXMgY2FuIHVzdWFsbHkgYmUgZm91bmQgaW4gYSBkaXJlY3Rvcnkgd2hvc2UKK25hbWUgbWF0Y2hlcyB0aGUgcGF0dGVybiBgYGxpYi9jbWFrZS88UGFja2FnZU5hbWU+YGAsIHRob3VnaAordGhleSBtYXkgYmUgaW4gb3RoZXIgbG9jYXRpb25zIGluc3RlYWQuICBUaGUKK2BgPFBhY2thZ2VOYW1lPmBgIGNvcnJlc3BvbmRzIHRvIHVzZSBpbiBDTWFrZSBjb2RlIHdpdGggdGhlCis6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjb21tYW5kIHN1Y2ggYXMKK2BgZmluZF9wYWNrYWdlKFBhY2thZ2VOYW1lIFJFUVVJUkVEKWBgLgorCitUaGUgYGBsaWIvY21ha2UvPFBhY2thZ2VOYW1lPmBgIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYQorZmlsZSB3aGljaCBpcyBlaXRoZXIgbmFtZWQgYGA8UGFja2FnZU5hbWU+Q29uZmlnLmNtYWtlYGAKK29yIGBgPFBhY2thZ2VOYW1lPi1jb25maWcuY21ha2VgYC4gIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50Cit0byB0aGUgcGFja2FnZSBmb3IgQ01ha2UuICBBIHNlcGFyYXRlIG9wdGlvbmFsIGZpbGUgbmFtZWQKK2BgPFBhY2thZ2VOYW1lPkNvbmZpZ1ZlcnNpb24uY21ha2VgYCBtYXkgYWxzbyBleGlzdCBpbiB0aGUKK2RpcmVjdG9yeS4gIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IENNYWtlIHRvIGRldGVybWluZSB3aGV0aGVyCit0aGUgdmVyc2lvbiBvZiB0aGUgdGhpcmQgcGFydHkgcGFja2FnZSBzYXRpc2ZpZXMgdXNlcyBvZiB0aGUKKzpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQgd2hpY2ggc3BlY2lmeSB2ZXJzaW9uCitjb25zdHJhaW50cy4gIEl0IGlzIG9wdGlvbmFsIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHdoZW4gdXNpbmcKKzpjb21tYW5kOmBmaW5kX3BhY2thZ2VgLCBldmVuIGlmIGEgYGBDb25maWdWZXJzaW9uYGAgZmlsZSBpcworcHJlc2VudC4KKworSWYgdGhlIGBgQ29uZmlnLmNtYWtlYGAgZmlsZSBpcyBmb3VuZCBhbmQgdGhlCitvcHRpb25hbGx5LXNwZWNpZmllZCB2ZXJzaW9uIGlzIHNhdGlzZmllZCwgdGhlbiB0aGUgQ01ha2UKKzpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQgY29uc2lkZXJzIHRoZSBwYWNrYWdlIHRvIGJlCitmb3VuZCBhbmQgdGhlIGVudGlyZSBsaWJyYXJ5IHBhY2thZ2UgaXMgYXNzdW1lZCB0byBiZQorY29tcGxldGUgYXMgZGVzaWduZWQuCisKK1RoZXJlIG1heSBiZSBhZGRpdGlvbmFsIGZpbGVzIHByb3ZpZGluZyBDTWFrZSBtYWNyb3Mgb3IKKzpyZWY6YGltcG9ydGVkIHRhcmdldHNgIGZvciB5b3UgdG8gdXNlLiAgQ01ha2UgZG9lcyBub3QKK2VuZm9yY2UgYW55IG5hbWluZyBjb252ZW50aW9uIGZvciB0aGVzZQorZmlsZXMuICBUaGV5IGFyZSByZWxhdGVkIHRvIHRoZSBwcmltYXJ5IGBgQ29uZmlnYGAgZmlsZSBieQordXNlIG9mIHRoZSBDTWFrZSA6Y29tbWFuZDpgaW5jbHVkZWAgY29tbWFuZC4KKworOmd1aWRlOmBJbnZva2luZyBDTWFrZSA8VXNlciBJbnRlcmFjdGlvbiBHdWlkZT5gIHdpdGggdGhlCitpbnRlbnQgb2YgdXNpbmcgYSBwYWNrYWdlIG9mIHRoaXJkIHBhcnR5IGJpbmFyaWVzIHJlcXVpcmVzCit0aGF0IGNtYWtlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmRzIHN1Y2NlZWQgaW4gZmluZGluZwordGhlIHBhY2thZ2UuICBJZiB0aGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgaXMgaW4gYSBkaXJlY3RvcnkKK2tub3duIHRvIENNYWtlLCB0aGUgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY2FsbCBzaG91bGQKK3N1Y2NlZWQuICBUaGUgZGlyZWN0b3JpZXMga25vd24gdG8gY21ha2UgYXJlIHBsYXRmb3JtLXNwZWNpZmljLgorRm9yIGV4YW1wbGUsIHBhY2thZ2VzIGluc3RhbGxlZCBvbiBMaW51eCB3aXRoIGEgc3RhbmRhcmQKK3N5c3RlbSBwYWNrYWdlIG1hbmFnZXIgd2lsbCBiZSBmb3VuZCBpbiB0aGUgYGAvdXNyYGAgcHJlZml4CithdXRvbWF0aWNhbGx5LiAgUGFja2FnZXMgaW5zdGFsbGVkIGluIGBgUHJvZ3JhbSBGaWxlc2BgIG9uCitXaW5kb3dzIHdpbGwgc2ltaWxhcmx5IGJlIGZvdW5kIGF1dG9tYXRpY2FsbHkuCisKK1BhY2thZ2VzIHdoaWNoIGFyZSBub3QgZm91bmQgYXV0b21hdGljYWxseSBhcmUgaW4gbG9jYXRpb25zCitub3QgcHJlZGljdGFibGUgdG8gQ01ha2Ugc3VjaCBhcyBgYC9vcHQvbXlsaWJgYCBvcgorYGAkSE9NRS9kZXYvcHJlZml4YGAuICBUaGlzIGlzIGEgbm9ybWFsIHNpdHVhdGlvbiBhbmQgQ01ha2UKK3Byb3ZpZGVzIHNldmVyYWwgd2F5cyBmb3IgdXNlcnMgdG8gc3BlY2lmeSB3aGVyZSB0byBmaW5kCitzdWNoIGxpYnJhcmllcy4KKworVGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgIHZhcmlhYmxlIG1heSBiZQorOnJlZjpgc2V0IHdoZW4gaW52b2tpbmcgQ01ha2UgPFNldHRpbmcgQnVpbGQgVmFyaWFibGVzPmAuCitJdCBpcyB0cmVhdGVkIGFzIGEgbGlzdCBvZiBwYXRocyB0byBzZWFyY2ggZm9yCis6cmVmOmBDb25maWcgRmlsZSBQYWNrYWdlc2AuICBBIHBhY2thZ2UgaW5zdGFsbGVkIGluCitgYC9vcHQvc29tZXBhY2thZ2VgYCB3aWxsIHR5cGljYWxseSBpbnN0YWxsIGNvbmZpZyBmaWxlcworc3VjaCBhcworYGAvb3B0L3NvbWVwYWNrYWdlL2xpYi9jbWFrZS9zb21lUGFja2FnZS9Tb21lUGFja2FnZUNvbmZpZy5jbWFrZWBgLgorSW4gdGhhdCBjYXNlLCBgYC9vcHQvc29tZXBhY2thZ2VgYCBzaG91bGQgYmUgYWRkZWQgdG8KKzp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgLgorCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBDTUFLRV9QUkVGSVhfUEFUSGBgIG1heSBhbHNvIGJlCitwb3B1bGF0ZWQgd2l0aCBwcmVmaXhlcyB0byBzZWFyY2ggZm9yIHBhY2thZ2VzLiAgTGlrZSB0aGUKK2BgUEFUSGBgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGlzIGlzIGEgbGlzdCBhbmQgbmVlZHMgdG8gdXNlCit0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGUgbGlzdCBpdGVtIHNlcGFyYXRvcgorKGBgOmBgIG9uIFVuaXggYW5kIGBgO2BgIG9uIFdpbmRvd3MpLgorCitUaGUgOnZhcmlhYmxlOmBDTUFLRV9QUkVGSVhfUEFUSGAgdmFyaWFibGUgcHJvdmlkZXMgY29udmVuaWVuY2UKK2luIGNhc2VzIHdoZXJlIG11bHRpcGxlIHByZWZpeGVzIG5lZWQgdG8gYmUgc3BlY2lmaWVkLCBvciB3aGVuCittdWx0aXBsZSBkaWZmZXJlbnQgcGFja2FnZSBiaW5hcmllcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBzYW1lCitwcmVmaXguICBQYXRocyB0byBwYWNrYWdlcyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYnkgc2V0dGluZwordmFyaWFibGVzIG1hdGNoaW5nIGBgPFBhY2thZ2VOYW1lPl9ESVJgYCwgc3VjaCBhcworYGBTb21lUGFja2FnZV9ESVJgYC4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIHByZWZpeCBidXQgc2hvdWxkCitiZSBhIGZ1bGwgcGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgY29uZmlnLXN0eWxlIHBhY2thZ2UKK2ZpbGUsIHN1Y2ggYXMgYGAvb3B0L3NvbWVwYWNrYWdlL2xpYi9jbWFrZS9Tb21lUGFja2FnZS9gYCBpbgordGhlIGFib3ZlIGV4YW1wbGUuCisKK0ltcG9ydGVkIFRhcmdldHMgZnJvbSBQYWNrYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgdGhpcmQtcGFydHkgcGFja2FnZSB3aGljaCBwcm92aWRlcyBjb25maWctZmlsZSBwYWNrYWdlcyBtYXkKK2Fsc28gcHJvdmlkZSA6cmVmOmBJbXBvcnRlZCB0YXJnZXRzYC4gVGhlc2Ugd2lsbCBiZQorc3BlY2lmaWVkIGluIGZpbGVzIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBmaWxlCitwYXRocyByZWxldmFudCB0byB0aGUgcGFja2FnZSwgc3VjaCBhcyBkZWJ1ZyBhbmQgcmVsZWFzZQordmVyc2lvbnMgb2YgbGlicmFyaWVzLgorCitPZnRlbiB0aGUgdGhpcmQtcGFydHkgcGFja2FnZSBkb2N1bWVudGF0aW9uIHdpbGwgcG9pbnQgb3V0IHRoZQorbmFtZXMgb2YgaW1wb3J0ZWQgdGFyZ2V0cyBhdmFpbGFibGUgYWZ0ZXIgYSBzdWNjZXNzZnVsCitgYGZpbmRfcGFja2FnZWBgIGZvciBhIGxpYnJhcnkuICBUaG9zZSBpbXBvcnRlZCB0YXJnZXQgbmFtZXMKK2NhbiBiZSB1c2VkIHdpdGggdGhlIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgIGNvbW1hbmQuCisKK0EgY29tcGxldGUgZXhhbXBsZSB3aGljaCBtYWtlcyBhIHNpbXBsZSB1c2Ugb2YgYSB0aGlyZCBwYXJ0eQorbGlicmFyeSBtaWdodCBsb29rIGxpa2U6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTApCisgICAgcHJvamVjdChNeUV4ZVByb2plY3QgVkVSU0lPTiAxLjAuMCkKKworICAgIGZpbmRfcGFja2FnZShTb21lUGFja2FnZSBSRVFVSVJFRCkKKyAgICBhZGRfZXhlY3V0YWJsZShNeUV4ZSBtYWluLmNwcCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoTXlFeGUgUFJJVkFURSBTb21lUHJlZml4OjpMaWJOYW1lKQorCitTZWUgOm1hbnVhbDpgY21ha2UtYnVpbGRzeXN0ZW0oNylgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCithYm91dCBkZXZlbG9waW5nIGEgQ01ha2UgYnVpbGRzeXN0ZW0uCisKK0xpYnJhcmllcyBub3QgUHJvdmlkaW5nIENvbmZpZy1maWxlIFBhY2thZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlyZC1wYXJ0eSBsaWJyYXJpZXMgd2hpY2ggZG8gbm90IHByb3ZpZGUgY29uZmlnLWZpbGUgcGFja2FnZXMKK2NhbiBzdGlsbCBiZSBmb3VuZCB3aXRoIHRoZSA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjb21tYW5kLCBpZgorYSBgYEZpbmRTb21lUGFja2FnZS5jbWFrZWBgIGZpbGUgaXMgYXZhaWxhYmxlLgorCitUaGVzZSBtb2R1bGUtZmlsZSBwYWNrYWdlcyBhcmUgZGlmZmVyZW50IHRvIGNvbmZpZy1maWxlIHBhY2thZ2VzCitpbiB0aGF0OgorCisjLiBUaGV5IHNob3VsZCBub3QgYmUgcHJvdmlkZWQgYnkgdGhlIHRoaXJkIHBhcnR5LCBleGNlcHQKKyAgIHBlcmhhcHMgaW4gdGhlIGZvcm0gb2YgZG9jdW1lbnRhdGlvbgorIy4gVGhlIGF2YWlsYWJpbGl0eSBvZiBhIGBgRmluZDxQYWNrYWdlTmFtZT4uY21ha2VgYCBmaWxlIGRvZXMKKyAgIG5vdCBpbmRpY2F0ZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBiaW5hcmllcyB0aGVtc2VsdmVzLgorIy4gQ01ha2UgZG9lcyBub3Qgc2VhcmNoIHRoZSA6dmFyaWFibGU6YENNQUtFX1BSRUZJWF9QQVRIYCBmb3IKKyAgIGBgRmluZDxQYWNrYWdlTmFtZT4uY21ha2VgYCBmaWxlcy4gIEluc3RlYWQgQ01ha2Ugc2VhcmNoZXMKKyAgIGZvciBzdWNoIGZpbGVzIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX01PRFVMRV9QQVRIYAorICAgdmFyaWFibGUuIEl0IGlzIGNvbW1vbiBmb3IgdXNlcnMgdG8gc2V0IHRoZQorICAgOnZhcmlhYmxlOmBDTUFLRV9NT0RVTEVfUEFUSGAgd2hlbiBydW5uaW5nIENNYWtlLCBhbmQgaXQgaXMKKyAgIGNvbW1vbiBmb3IgQ01ha2UgcHJvamVjdHMgdG8gYXBwZW5kIHRvCisgICA6dmFyaWFibGU6YENNQUtFX01PRFVMRV9QQVRIYCB0byBhbGxvdyB1c2Ugb2YgbG9jYWwKKyAgIG1vZHVsZS1maWxlIHBhY2thZ2VzLgorIy4gQ01ha2Ugc2hpcHMgYGBGaW5kPFBhY2thZ2VOYW1lPi5jbWFrZWBgIGZpbGVzIGZvciBzb21lCisgICA6bWFudWFsOmB0aGlyZCBwYXJ0eSBwYWNrYWdlcyA8Y21ha2UtbW9kdWxlcyg3KT5gCisgICBmb3IgY29udmVuaWVuY2UgaW4gY2FzZXMgd2hlcmUgdGhlIHRoaXJkIHBhcnR5IGRvZXMKKyAgIG5vdCBwcm92aWRlIGNvbmZpZy1maWxlIHBhY2thZ2VzIGRpcmVjdGx5LiAgVGhlc2UgZmlsZXMgYXJlCisgICBhIG1haW50ZW5hbmNlIGJ1cmRlbiBmb3IgQ01ha2UsIHNvIG5ldyBGaW5kIG1vZHVsZXMgYXJlCisgICBnZW5lcmFsbHkgbm90IGFkZGVkIHRvIENNYWtlIGFueW1vcmUuICBUaGlyZC1wYXJ0aWVzIHNob3VsZAorICAgcHJvdmlkZSBjb25maWcgZmlsZSBwYWNrYWdlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBGaW5kCisgICBtb2R1bGUgdG8gYmUgcHJvdmlkZWQgYnkgQ01ha2UuCisKK01vZHVsZS1maWxlIHBhY2thZ2VzIG1heSBhbHNvIHByb3ZpZGUgOnJlZjpgSW1wb3J0ZWQgdGFyZ2V0c2AuCitBIGNvbXBsZXRlIGV4YW1wbGUgd2hpY2ggZmluZHMgc3VjaCBhIHBhY2thZ2UgbWlnaHQgbG9vaworbGlrZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKKyAgICBwcm9qZWN0KE15RXhlUHJvamVjdCBWRVJTSU9OIDEuMC4wKQorCisgICAgZmluZF9wYWNrYWdlKFBORyBSRVFVSVJFRCkKKworICAgICMgQWRkIHBhdGggdG8gYSBGaW5kU29tZVBhY2thZ2UuY21ha2UgZmlsZQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01PRFVMRV9QQVRIICIke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlIikKKyAgICBmaW5kX3BhY2thZ2UoU29tZVBhY2thZ2UgUkVRVUlSRUQpCisKKyAgICBhZGRfZXhlY3V0YWJsZShNeUV4ZSBtYWluLmNwcCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoTXlFeGUgUFJJVkFURQorICAgICAgICBQTkc6OlBORworICAgICAgICBTb21lUHJlZml4OjpMaWJOYW1lCisgICAgKQorCitUaGUgOnZhcmlhYmxlOmA8UGFja2FnZU5hbWU+X1JPT1RgIHZhcmlhYmxlIGlzIGFsc28KK3NlYXJjaGVkIGFzIGEgcHJlZml4IGZvciA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjYWxscyB1c2luZworbW9kdWxlLWZpbGUgcGFja2FnZXMgc3VjaCBhcyBgYEZpbmRTb21lUGFja2FnZWBgLgpkaWZmIC0tZ2l0IGEvSGVscC9pbmRleC5yc3QgYi9IZWxwL2luZGV4LnJzdAppbmRleCBjYzZjZWU2Li40ZDlhOWM4IDEwMDY0NAotLS0gYS9IZWxwL2luZGV4LnJzdAorKysgYi9IZWxwL2luZGV4LnJzdApAQCAtMSw1ICsxLDM0IEBACiAuLiB0aXRsZTo6IENNYWtlIFJlZmVyZW5jZSBEb2N1bWVudGF0aW9uCiAKK0ludHJvZHVjdGlvbgorIyMjIyMjIyMjIyMjCisKK0NNYWtlIGlzIGEgdG9vbCB0byBtYW5hZ2UgYnVpbGRpbmcgb2Ygc291cmNlIGNvZGUuICBPcmlnaW5hbGx5LCBDTWFrZSB3YXMKK2Rlc2lnbmVkIGFzIGEgZ2VuZXJhdG9yIGZvciB2YXJpb3VzIGRpYWxlY3RzIG9mIGBgTWFrZWZpbGVgYCwgdG9kYXkKK0NNYWtlIGdlbmVyYXRlcyBtb2Rlcm4gYnVpbGRzeXN0ZW1zIHN1Y2ggYXMgYGBOaW5qYWBgIGFzIHdlbGwgYXMgcHJvamVjdAorZmlsZXMgZm9yIElERXMgc3VjaCBhcyBWaXN1YWwgU3R1ZGlvIGFuZCBYY29kZS4KKworQ01ha2UgaXMgd2lkZWx5IHVzZWQgZm9yIHRoZSBDIGFuZCBDKysgbGFuZ3VhZ2VzLCBidXQgaXQgbWF5IGJlIHVzZWQgdG8KK2J1aWxkIHNvdXJjZSBjb2RlIG9mIG90aGVyIGxhbmd1YWdlcyB0b28uCisKK1Blb3BsZSBlbmNvdW50ZXJpbmcgQ01ha2UgZm9yIHRoZSBmaXJzdCB0aW1lIG1heSBoYXZlIGRpZmZlcmVudCBpbml0aWFsCitnb2Fscy4gIFRvIGxlYXJuIGhvdyB0byBidWlsZCBhIHNvdXJjZSBjb2RlIHBhY2thZ2UgZG93bmxvYWRlZCBmcm9tIHRoZQoraW50ZXJuZXQsIHN0YXJ0IHdpdGggdGhlIDpndWlkZTpgVXNlciBJbnRlcmFjdGlvbiBHdWlkZWAuCitUaGlzIHdpbGwgZGV0YWlsIHRoZSBzdGVwcyBuZWVkZWQgdG8gcnVuIHRoZSA6bWFudWFsOmBjbWFrZSgxKWAgb3IKKzptYW51YWw6YGNtYWtlLWd1aSgxKWAgZXhlY3V0YWJsZSBhbmQgaG93IHRvIGNob29zZSBhIGdlbmVyYXRvciwgYW5kCitob3cgdG8gY29tcGxldGUgdGhlIGJ1aWxkLgorCitUaGUgOmd1aWRlOmBVc2luZyBEZXBlbmRlbmNpZXMgR3VpZGVgIGlzIGFpbWVkIGF0IGRldmVsb3BlcnMKK3dpc2hpbmcgdG8gZ2V0IHN0YXJ0ZWQgdXNpbmcgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5LgorCitGb3IgZGV2ZWxvcGVycyBzdGFydGluZyBhIHByb2plY3QgdXNpbmcgQ01ha2UsIHRoZSA6Z3VpZGU6YENNYWtlIFR1dG9yaWFsYAoraXMgYSBzdWl0YWJsZSBzdGFydGluZyBwb2ludC4gIFRoZSA6bWFudWFsOmBjbWFrZS1idWlsZHN5c3RlbSg3KWAKK21hbnVhbCBpcyBhaW1lZCBhdCBkZXZlbG9wZXJzIGV4cGFuZGluZyB0aGVpciBrbm93bGVkZ2Ugb2YgbWFpbnRhaW5pbmcKK2EgYnVpbGRzeXN0ZW0gYW5kIGJlY29taW5nIGZhbWlsaWFyIHdpdGggdGhlIGJ1aWxkIHRhcmdldHMgdGhhdAorY2FuIGJlIHJlcHJlc2VudGVkIGluIENNYWtlLiAgVGhlIDptYW51YWw6YGNtYWtlLXBhY2thZ2VzKDcpYCBtYW51YWwKK2V4cGxhaW5zIGhvdyB0byBjcmVhdGUgcGFja2FnZXMgd2hpY2ggY2FuIGVhc2lseSBiZSBjb25zdW1lZCBieQordGhpcmQtcGFydHkgQ01ha2UtYmFzZWQgYnVpbGRzeXN0ZW1zLgorCiBDb21tYW5kLUxpbmUgVG9vbHMKICMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC01Myw2ICs4Miw4IEBACiAgICAgOm1heGRlcHRoOiAxCiAKICAgICAvZ3VpZGUvdHV0b3JpYWwvaW5kZXgKKyAgICAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9pbmRleAorICAgIC9ndWlkZS91c2luZy1kZXBlbmRlbmNpZXMvaW5kZXgKIAogLi4gb25seTo6IGh0bWwgb3IgdGV4dAogCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9JRF9SRVNFUlZFLnR4dCBiL0hlbHAvbWFudWFsL0lEX1JFU0VSVkUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMmIxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL21hbnVhbC9JRF9SRVNFUlZFLnR4dApAQCAtMCwwICsxLDcgQEAKKy4uIG5vdGU6OgorCisgIENNYWtlIHJlc2VydmVzIGlkZW50aWZpZXJzIHRoYXQ6CisKKyAgKiBiZWdpbiB3aXRoIGBgQ01BS0VfYGAgKHVwcGVyLSwgbG93ZXItLCBvciBtaXhlZC1jYXNlKSwgb3IKKyAgKiBiZWdpbiB3aXRoIGBgX0NNQUtFX2BgICh1cHBlci0sIGxvd2VyLSwgb3IgbWl4ZWQtY2FzZSksIG9yCisgICogYmVnaW4gd2l0aCBgYF9gYCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiBhbnkgOm1hbnVhbDpgQ01ha2UgQ29tbWFuZCA8Y21ha2UtY29tbWFuZHMoNyk+YC4KZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL1ZTLUNob29zZS1BcmNoLnBuZyBiL0hlbHAvbWFudWFsL1ZTLUNob29zZS1BcmNoLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZiMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9tYW51YWwvVlMtQ2hvb3NlLUFyY2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLWNvbW1hbmRzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtY29tbWFuZHMuNy5yc3QKaW5kZXggNTliYTg5Ny4uODc3NDNiNCAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtY29tbWFuZHMuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtY29tbWFuZHMuNy5yc3QKQEAgLTE2LDYgKzE2LDcgQEAKICAgIDptYXhkZXB0aDogMQogCiAgICAvY29tbWFuZC9icmVhaworICAgL2NvbW1hbmQvY21ha2VfY29tbWFuZAogICAgL2NvbW1hbmQvY21ha2VfaG9zdF9zeXN0ZW1faW5mb3JtYXRpb24KICAgIC9jb21tYW5kL2NtYWtlX21pbmltdW1fcmVxdWlyZWQKICAgIC9jb21tYW5kL2NtYWtlX3BhcnNlX2FyZ3VtZW50cwpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtY29tcGlsZS1mZWF0dXJlcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWNvbXBpbGUtZmVhdHVyZXMuNy5yc3QKaW5kZXggYTE0ZTMyMi4uMDVkYzAzOCAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtY29tcGlsZS1mZWF0dXJlcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1jb21waWxlLWZlYXR1cmVzLjcucnN0CkBAIC0xOSwxMSArMTksMTEgQEAKIENNYWtlIHByb3ZpZGVzIGEgcHJpbWFyeSB1c2VyIGludGVyZmFjZSBiYXNlZCBvbiBncmFudWxhciBoYW5kbGluZyBvZgogdGhlIGZlYXR1cmVzLCBub3QgdGhlIGxhbmd1YWdlIHN0YW5kYXJkIHRoYXQgaW50cm9kdWNlZCB0aGUgZmVhdHVyZS4KIAotVGhlIDpwcm9wX2dibDpgQ01BS0VfQ19LTk9XTl9GRUFUVVJFU2AgYW5kCi06cHJvcF9nYmw6YENNQUtFX0NYWF9LTk9XTl9GRUFUVVJFU2AgZ2xvYmFsIHByb3BlcnRpZXMgY29udGFpbiBhbGwgdGhlCitUaGUgOnByb3BfZ2JsOmBDTUFLRV9DX0tOT1dOX0ZFQVRVUkVTYCwgOnByb3BfZ2JsOmBDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTYCwKK2FuZCA6cHJvcF9nYmw6YENNQUtFX0NYWF9LTk9XTl9GRUFUVVJFU2AgZ2xvYmFsIHByb3BlcnRpZXMgY29udGFpbiBhbGwgdGhlCiBmZWF0dXJlcyBrbm93biB0byBDTWFrZSwgcmVnYXJkbGVzcyBvZiBjb21waWxlciBzdXBwb3J0IGZvciB0aGUgZmVhdHVyZS4KLVRoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AgYW5kCi06dmFyaWFibGU6YENNQUtFX0NYWF9DT01QSUxFX0ZFQVRVUkVTYCB2YXJpYWJsZXMgY29udGFpbiBhbGwgZmVhdHVyZXMKK1RoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AsIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTYAorLCBhbmQgOnZhcmlhYmxlOmBDTUFLRV9DWFhfQ09NUElMRV9GRUFUVVJFU2AgdmFyaWFibGVzIGNvbnRhaW4gYWxsIGZlYXR1cmVzCiBDTWFrZSBrbm93cyBhcmUga25vd24gdG8gdGhlIGNvbXBpbGVyLCByZWdhcmRsZXNzIG9mIGxhbmd1YWdlIHN0YW5kYXJkCiBvciBjb21waWxlIGZsYWdzIG5lZWRlZCB0byB1c2UgdGhlbS4KIApAQCAtMzY4LDggKzM2OCw5IEBACiAqIGFsbCBjb21waWxlcnMgYW5kIHZlcnNpb25zIGxpc3RlZCBhYm92ZSB3aXRoIG9ubHkgbWV0YS1mZWF0dXJlcyBmb3IgQysrLgogKiBgYFRJYGA6IFRleGFzIEluc3RydW1lbnRzIGNvbXBpbGVyLgogCi1DTWFrZSBpcyBjdXJyZW50bHkgYXdhcmUgb2YgdGhlIDpwcm9wX3RndDpgQ1VEQSBzdGFuZGFyZHMgPENVREFfU1RBTkRBUkQ+YAotZnJvbSB0aGUgZm9sbG93aW5nIDp2YXJpYWJsZTpgY29tcGlsZXIgaWRzIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBhcyBvZiB0aGUKK0NNYWtlIGlzIGN1cnJlbnRseSBhd2FyZSBvZiB0aGUgOnByb3BfdGd0OmBDVURBIHN0YW5kYXJkcyA8Q1VEQV9TVEFOREFSRD5gIGFuZAordGhlaXIgYXNzb2NpYXRlZCBtZXRhLWZlYXR1cmVzIChlLmcuIGBgY3VkYV9zdGRfMTFgYCkgYXZhaWxhYmxlIGZyb20gdGhlCitmb2xsb3dpbmcgOnZhcmlhYmxlOmBjb21waWxlciBpZHMgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gIGFzIG9mIHRoZQogdmVyc2lvbnMgc3BlY2lmaWVkIGZvciBlYWNoOgogCiAqIGBgTlZJRElBYGA6IE5WSURJQSBudmNjIGNvbXBpbGVyIDcuNSsuCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1lbnYtdmFyaWFibGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZW52LXZhcmlhYmxlcy43LnJzdAppbmRleCA5NmNlYjk0Li5hZGZjMzllIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1lbnYtdmFyaWFibGVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWVudi12YXJpYWJsZXMuNy5yc3QKQEAgLTIzLDEwICsyMywxMiBAQAogCiAgICAvZW52dmFyL0NNQUtFX0JVSUxEX1BBUkFMTEVMX0xFVkVMCiAgICAvZW52dmFyL0NNQUtFX0NPTkZJR19UWVBFCisgICAvZW52dmFyL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTCiAgICAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUgogICAgL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UKICAgIC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNCiAgICAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUCisgICAvZW52dmFyL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIKICAgIC9lbnZ2YXIvQ01BS0VfTVNWQ0lERV9SVU5fUEFUSAogICAgL2VudnZhci9DTUFLRV9OT19WRVJCT1NFCiAgICAvZW52dmFyL0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1maWxlLWFwaS43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0CmluZGV4IDA0YjZlZDIuLjEyZWVjZDkgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0CkBAIC0xOTksNiArMTk5LDcgQEAKICAgICAgICAgInJvb3QiOiAiL3ByZWZpeC9zaGFyZS9jbWFrZS0zLjE0IgogICAgICAgfSwKICAgICAgICJnZW5lcmF0b3IiOiB7CisgICAgICAgICJtdWx0aUNvbmZpZyI6IGZhbHNlLAogICAgICAgICAibmFtZSI6ICJVbml4IE1ha2VmaWxlcyIKICAgICAgIH0KICAgICB9LApAQCAtMjY3LDYgKzI2OCw5IEBACiAgICAgQSBKU09OIG9iamVjdCBkZXNjcmliaW5nIHRoZSBDTWFrZSBnZW5lcmF0b3IgdXNlZCBmb3IgdGhlIGJ1aWxkLgogICAgIEl0IGhhcyBtZW1iZXJzOgogCisgICAgYGBtdWx0aUNvbmZpZ2BgCisgICAgICBBIGJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBnZW5lcmF0b3Igc3VwcG9ydHMgbXVsdGlwbGUgb3V0cHV0CisgICAgICBjb25maWd1cmF0aW9ucy4KICAgICBgYG5hbWVgYAogICAgICAgQSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdG9yLgogICAgIGBgcGxhdGZvcm1gYApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zLjcucnN0CmluZGV4IDc1ZjRiZDQuLjcyZGU0YWMgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMuNy5yc3QKQEAgLTI1OSw2ICsyNTksMTA5IEBACiAgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAgbWFpbi5jcHApCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG15YXBwIG15YXBwX2MgbXlhcHBfY3h4KQogCisuLiBfYEJvb2xlYW4gTElOS19MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbmA6CisKK2BgJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmd1YWdlLGNvbXBpbGVyX2lkcz5gYAorICBgYDFgYCB3aGVuIHRoZSBsYW5ndWFnZSB1c2VkIGZvciBsaW5rIHN0ZXAgbWF0Y2hlcyBgYGxhbmd1YWdlYGAgYW5kIHRoZQorICBDTWFrZSdzIGNvbXBpbGVyIGlkIG9mIHRoZSBsYW5ndWFnZSBsaW5rZXIgbWF0Y2hlcyBhbnkgb25lIG9mIHRoZSBlbnRyaWVzCisgIGluIGBgY29tcGlsZXJfaWRzYGAsIG90aGVyd2lzZSBgYDBgYC4gVGhpcyBleHByZXNzaW9uIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlCisgIGNvbWJpbmF0aW9uIG9mIGBgJDxMSU5LX0xBTkdVQUdFOmxhbmd1YWdlPmBgIGFuZAorICBgYCQ8TEFOR19DT01QSUxFUl9JRDpjb21waWxlcl9pZHM+YGAuIFRoaXMgZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIG9wdGlvbnMsIGxpbmsgZGlyZWN0b3JpZXMgYW5kIGxpbmsgZGVwZW5kZW5jaWVzIG9mIGEKKyAgcGFydGljdWxhciBsYW5ndWFnZSBhbmQgbGlua2VyIGNvbWJpbmF0aW9uIGluIGEgdGFyZ2V0LiBGb3IgZXhhbXBsZToKKworICAuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgIGFkZF9saWJyYXJ5KGxpYkNfQ2xhbmcgLi4uKQorICAgIGFkZF9saWJyYXJ5KGxpYkNYWF9DbGFuZyAuLi4pCisgICAgYWRkX2xpYnJhcnkobGliQ19JbnRlbCAuLi4pCisgICAgYWRkX2xpYnJhcnkobGliQ1hYX0ludGVsIC4uLikKKworICAgIGFkZF9leGVjdXRhYmxlKG15YXBwIG1haW4uYykKKyAgICBpZiAoQ1hYX0NPTkZJRykKKyAgICAgIHRhcmdldF9zb3VyY2VzKG15YXBwIFBSSVZBVEUgZmlsZS5jeHgpCisgICAgZW5kaWYoKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcAorICAgICAgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQ2xhbmcsQXBwbGVDbGFuZz46bGliQ1hYX0NsYW5nPgorICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLENsYW5nLEFwcGxlQ2xhbmc+OmxpYkNfQ2xhbmc+CisgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxJbnRlbD46bGliQ1hYX0ludGVsPgorICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEludGVsPjpsaWJDX0ludGVsPikKKworICBUaGlzIHNwZWNpZmllcyB0aGUgdXNlIG9mIGRpZmZlcmVudCBsaW5rIGxpYnJhcmllcyBiYXNlZCBvbiBib3RoIHRoZQorICBjb21waWxlciBpZCBhbmQgbGluayBsYW5ndWFnZS4gVGhpcyBleGFtcGxlIHdpbGwgaGF2ZSB0YXJnZXQgYGBsaWJDWFhfQ2xhbmdgYAorICBhcyBsaW5rIGRlcGVuZGVuY3kgd2hlbiBgYENsYW5nYGAgb3IgYGBBcHBsZUNsYW5nYGAgaXMgdGhlIGBgQ1hYYGAKKyAgbGlua2VyLCBhbmQgYGBsaWJDWFhfSW50ZWxgYCB3aGVuIGBgSW50ZWxgYCBpcyB0aGUgYGBDWFhgYCBsaW5rZXIuCisgIExpa2V3aXNlIHdoZW4gdGhlIGBgQ2BgIGxpbmtlciBpcyBgYENsYW5nYGAgb3IgYGBBcHBsZUNsYW5nYGAsIHRhcmdldAorICBgYGxpYkNfQ2xhbmdgYCB3aWxsIGJlIGFkZGVkIGFzIGxpbmsgZGVwZW5kZW5jeSBhbmQgYGBsaWJDX0ludGVsYGAgd2hlbgorICBgYEludGVsYGAgaXMgdGhlIGBgQ2BgIGxpbmtlci4KKworICBTZWUgOnJlZjpgdGhlIG5vdGUgcmVsYXRlZCB0bworICA8Q29uc3RyYWludHMgTElOS19MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbj5gCisgIGBgJDxMSU5LX0xBTkdVQUdFOmxhbmd1YWdlPmBgIGZvciBjb25zdHJhaW50cyBhYm91dCB0aGUgdXNhZ2Ugb2YgdGhpcworICBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KKworYGAkPExJTktfTEFOR1VBR0U6bGFuZ3VhZ2VzPmBgCisgIGBgMWBgIHdoZW4gdGhlIGxhbmd1YWdlIHVzZWQgZm9yIGxpbmsgc3RlcCBtYXRjaGVzIGFueSBvZiB0aGUgZW50cmllcworICBpbiBgYGxhbmd1YWdlc2BgLCBvdGhlcndpc2UgYGAwYGAuICBUaGlzIGV4cHJlc3Npb24gbWF5IGJlIHVzZWQgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBvcHRpb25zLCBsaW5rIGRpcmVjdG9yaWVzIGFuZCBsaW5rIGRlcGVuZGVuY2llcyBvZiBhCisgIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgaW4gYSB0YXJnZXQuIEZvciBleGFtcGxlOgorCisgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgYWRkX2xpYnJhcnkoYXBpX0MgLi4uKQorICAgIGFkZF9saWJyYXJ5KGFwaV9DWFggLi4uKQorICAgIGFkZF9saWJyYXJ5KGFwaSBJTlRFUkZBQ0UpCisgICAgdGFyZ2V0X2xpbmtfb3B0aW9ucyhhcGkgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+Oi1vcHRfYz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi1vcHRfY3h4PikKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoYXBpIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjphcGlfQz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OmFwaV9DWFg+KQorCisgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAxIG1haW4uYykKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKG15YXBwMSBQUklWQVRFIGFwaSkKKworICAgIGFkZF9leGVjdXRhYmxlKG15YXBwMiBtYWluLmNwcCkKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKG15YXBwMiBQUklWQVRFIGFwaSkKKworICBUaGlzIHNwZWNpZmllcyB0byB1c2UgdGhlIGBgYXBpYGAgdGFyZ2V0IGZvciBsaW5raW5nIHRhcmdldHMgYGBteWFwcDFgYCBhbmQKKyAgYGBteWFwcDJgYC4gSW4gcHJhY3RpY2UsIGBgbXlhcHAxYGAgd2lsbCBsaW5rIHdpdGggdGFyZ2V0IGBgYXBpX0NgYCBhbmQKKyAgb3B0aW9uIGBgLW9wdF9jYGAgYmVjYXVzZSBpdCB3aWxsIHVzZSBgYENgYCBhcyBsaW5rIGxhbmd1YWdlLiBBbmQgYGBteWFwcDJgYAorICB3aWxsIGxpbmsgd2l0aCBgYGFwaV9DWFhgYCBhbmQgb3B0aW9uIGBgLW9wdF9jeHhgYCBiZWNhdXNlIGBgQ1hYYGAgd2lsbCBiZQorICB0aGUgbGluayBsYW5ndWFnZS4KKworICAuLiBfYENvbnN0cmFpbnRzIExJTktfTEFOR1VBR0UgR2VuZXJhdG9yIEV4cHJlc3Npb25gOgorCisgIC4uIG5vdGU6OgorCisgICAgVG8gZGV0ZXJtaW5lIHRoZSBsaW5rIGxhbmd1YWdlIG9mIGEgdGFyZ2V0LCBpdCBpcyByZXF1aXJlZCB0byBjb2xsZWN0LAorICAgIHRyYW5zaXRpdmVseSwgYWxsIHRoZSB0YXJnZXRzIHdoaWNoIHdpbGwgYmUgbGlua2VkIHRvIGl0LiBTbywgZm9yIGxpbmsKKyAgICBsaWJyYXJpZXMgcHJvcGVydGllcywgYSBkb3VibGUgZXZhbHVhdGlvbiB3aWxsIGJlIGRvbmUuIER1cmluZyB0aGUgZmlyc3QKKyAgICBldmFsdWF0aW9uLCBgYCQ8TElOS19MQU5HVUFHRTouLj5gYCBleHByZXNzaW9ucyB3aWxsIGFsd2F5cyByZXR1cm4gYGAwYGAuCisgICAgVGhlIGxpbmsgbGFuZ3VhZ2UgY29tcHV0ZWQgYWZ0ZXIgdGhpcyBmaXJzdCBwYXNzIHdpbGwgYmUgdXNlZCB0byBkbyB0aGUKKyAgICBzZWNvbmQgcGFzcy4gVG8gYXZvaWQgaW5jb25zaXN0ZW5jeSwgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgc2Vjb25kIHBhc3MKKyAgICBkbyBub3QgY2hhbmdlIHRoZSBsaW5rIGxhbmd1YWdlLiBNb3Jlb3ZlciwgdG8gYXZvaWQgdW5leHBlY3RlZAorICAgIHNpZGUtZWZmZWN0cywgaXQgaXMgcmVxdWlyZWQgdG8gc3BlY2lmeSBjb21wbGV0ZSBlbnRpdGllcyBhcyBwYXJ0IG9mIHRoZQorICAgIGBgJDxMSU5LX0xBTkdVQUdFOi4uPmBgIGV4cHJlc3Npb24uIEZvciBleGFtcGxlOgorCisgICAgLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICAgIGFkZF9saWJyYXJ5KGxpYiBTVEFUSUMgZmlsZS5jeHgpCisgICAgICBhZGRfbGlicmFyeShsaWJvdGhlciBTVEFUSUMgZmlsZS5jKQorCisgICAgICAjIGJhZCB1c2FnZQorICAgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAxIG1haW4uYykKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcDEgUFJJVkFURSBsaWIkPCQ8TElOS19MQU5HVUFHRTpDPjpvdGhlcj4pCisKKyAgICAgICMgY29ycmVjdCB1c2FnZQorICAgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAyIG1haW4uYykKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcDIgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpsaWJvdGhlcj4pCisKKyAgICBJbiB0aGlzIGV4YW1wbGUsIGZvciBgYG15YXBwMWBgLCB0aGUgZmlyc3QgcGFzcyB3aWxsLCB1bmV4cGVjdGVkbHksCisgICAgZGV0ZXJtaW5lIHRoYXQgdGhlIGxpbmsgbGFuZ3VhZ2UgaXMgYGBDWFhgYCBiZWNhdXNlIHRoZSBldmFsdWF0aW9uIG9mIHRoZQorICAgIGdlbmVyYXRvciBleHByZXNzaW9uIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nIHNvIGBgbXlhcHAxYGAgd2lsbCBkZXBlbmRzIG9uCisgICAgdGFyZ2V0IGBgbGliYGAgd2hpY2ggaXMgYGBDKytgYC4gT24gdGhlIGNvbnRyYXJ5LCBmb3IgYGBteWFwcDJgYCwgdGhlIGZpcnN0CisgICAgZXZhbHVhdGlvbiB3aWxsIGdpdmUgYGBDYGAgYXMgbGluayBsYW5ndWFnZSwgc28gdGhlIHNlY29uZCBwYXNzIHdpbGwKKyAgICBjb3JyZWN0bHkgYWRkIHRhcmdldCBgYGxpYm90aGVyYGAgYXMgbGluayBkZXBlbmRlbmN5LgorCiBTdHJpbmctVmFsdWVkIEdlbmVyYXRvciBFeHByZXNzaW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDUwLDIyICs1NTMsNDEgQEAKICAgPEJvb2xlYW4gQ09NUElMRV9MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbj5gCiAgIGBgJDxDT01QSUxFX0xBTkdVQUdFOmxhbmd1YWdlPmBgCiAgIGZvciBub3RlcyBhYm91dCB0aGUgcG9ydGFiaWxpdHkgb2YgdGhpcyBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KK2BgJDxMSU5LX0xBTkdVQUdFPmBgCisgIFRoZSBsaW5rIGxhbmd1YWdlIG9mIHRhcmdldCB3aGVuIGV2YWx1YXRpbmcgbGluayBvcHRpb25zLgorICBTZWUgOnJlZjpgdGhlIHJlbGF0ZWQgYm9vbGVhbiBleHByZXNzaW9uCisgIDxCb29sZWFuIExJTktfTEFOR1VBR0UgR2VuZXJhdG9yIEV4cHJlc3Npb24+YCBgYCQ8TElOS19MQU5HVUFHRTpsYW5ndWFnZT5gYAorICBmb3Igbm90ZXMgYWJvdXQgdGhlIHBvcnRhYmlsaXR5IG9mIHRoaXMgZ2VuZXJhdG9yIGV4cHJlc3Npb24uCisKKyAgLi4gbm90ZTo6CisKKyAgICBUaGlzIGdlbmVyYXRvciBleHByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxpbmsgbGlicmFyaWVzCisgICAgcHJvcGVydGllcyB0byBhdm9pZCBzaWRlLWVmZmVjdHMgZHVlIHRvIHRoZSBkb3VibGUgZXZhbHVhdGlvbiBvZgorICAgIHRoZXNlIHByb3BlcnRpZXMuCiAKIFRhcmdldC1EZXBlbmRlbnQgUXVlcmllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWBgJDxUQVJHRVRfTkFNRV9JRl9FWElTVFM6dGd0PmBgCi0gIEV4cGFuZHMgdG8gdGhlIGBgdGd0YGAgaWYgdGhlIGdpdmVuIHRhcmdldCBleGlzdHMsIGFuIGVtcHR5IHN0cmluZwotICBvdGhlcndpc2UuCi1gYCQ8VEFSR0VUX0ZJTEU6dGd0PmBgCi0gIEZ1bGwgcGF0aCB0byBtYWluIGZpbGUgKC5leGUsIC5zby4xLjIsIC5hKSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEKLSAgdGFyZ2V0LgotYGAkPFRBUkdFVF9GSUxFX0JBU0VfTkFNRTp0Z3Q+YGAKLSAgQmFzZSBuYW1lIG9mIG1haW4gZmlsZSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorVGhlc2UgcXVlcmllcyByZWZlciB0byBhIHRhcmdldCBgYHRndGBgLiBUaGlzIGNhbiBiZSBhbnkgcnVudGltZSBhcnRpZmFjdCwKK25hbWVseToKIAotICBUaGUgYmFzZSBuYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lIChzZWUKLSAgYGAkPFRBUkdFVF9GSUxFX05BTUU6dGd0PmBgKSB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LiBGb3IgZXhhbXBsZSwgaWYKLSAgdGFyZ2V0IGZpbGUgbmFtZSBpcyBgYGxpYmJhc2Uuc29gYCwgdGhlIGJhc2UgbmFtZSBpcyBgYGJhc2VgYC4KKyogYW4gZXhlY3V0YWJsZSB0YXJnZXQgY3JlYXRlZCBieSA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgCisqIGEgc2hhcmVkIGxpYnJhcnkgdGFyZ2V0IChgYC5zb2BgLCBgYC5kbGxgYCBidXQgbm90IHRoZWlyIGBgLmxpYmBgIGltcG9ydCBsaWJyYXJ5KQorICBjcmVhdGVkIGJ5IDpjb21tYW5kOmBhZGRfbGlicmFyeWAKKyogYSBzdGF0aWMgbGlicmFyeSB0YXJnZXQgY3JlYXRlZCBieSA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgCisKK0luIHRoZSBmb2xsb3dpbmcsICJ0aGUgYGB0Z3RgYCBmaWxlbmFtZSIgbWVhbnMgdGhlIG5hbWUgb2YgdGhlIGBgdGd0YGAKK2JpbmFyeSBmaWxlLiBUaGlzIGhhcyB0byBiZSBkaXN0aW5ndWlzaGVkIGZyb20gInRoZSB0YXJnZXQgbmFtZSIsCit3aGljaCBpcyBqdXN0IHRoZSBzdHJpbmcgYGB0Z3RgYC4KKworYGAkPFRBUkdFVF9OQU1FX0lGX0VYSVNUUzp0Z3Q+YGAKKyAgVGhlIHRhcmdldCBuYW1lIGBgdGd0YGAgaWYgdGhlIHRhcmdldCBleGlzdHMsIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCitgYCQ8VEFSR0VUX0ZJTEU6dGd0PmBgCisgIEZ1bGwgcGF0aCB0byB0aGUgYGB0Z3RgYCBiaW5hcnkgZmlsZS4KK2BgJDxUQVJHRVRfRklMRV9CQVNFX05BTUU6dGd0PmBgCisgIEJhc2UgbmFtZSBvZiBgYHRndGBgLCBpLmUuIGBgJDxUQVJHRVRfRklMRV9OQU1FOnRndD5gYCB3aXRob3V0IHByZWZpeCBhbmQKKyAgc3VmZml4LgorICBGb3IgZXhhbXBsZSwgaWYgdGhlIGBgdGd0YGAgZmlsZW5hbWUgaXMgYGBsaWJiYXNlLnNvYGAsIHRoZSBiYXNlIG5hbWUgaXMgYGBiYXNlYGAuCiAKICAgU2VlIGFsc28gdGhlIDpwcm9wX3RndDpgT1VUUFVUX05BTUVgLCA6cHJvcF90Z3Q6YEFSQ0hJVkVfT1VUUFVUX05BTUVgLAogICA6cHJvcF90Z3Q6YExJQlJBUllfT1VUUFVUX05BTUVgIGFuZCA6cHJvcF90Z3Q6YFJVTlRJTUVfT1VUUFVUX05BTUVgCkBAIC00ODAsMzIgKzYwMiwzMSBAQAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfRklMRV9QUkVGSVg6dGd0PmBgCi0gIFByZWZpeCBvZiBtYWluIGZpbGUgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KKyAgUHJlZml4IG9mIHRoZSBgYHRndGBgIGZpbGVuYW1lIChzdWNoIGFzIGBgbGliYGApLgogCiAgIFNlZSBhbHNvIHRoZSA6cHJvcF90Z3Q6YFBSRUZJWGAgdGFyZ2V0IHByb3BlcnR5LgogCiAgIE5vdGUgdGhhdCBgYHRndGBgIGlzIG5vdCBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIHRhcmdldCB0aGlzCiAgIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uLgogYGAkPFRBUkdFVF9GSUxFX1NVRkZJWDp0Z3Q+YGAKLSAgU3VmZml4IG9mIG1haW4gZmlsZSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgotCi0gIFRoZSBzdWZmaXggY29ycmVzcG9uZHMgdG8gdGhlIGZpbGUgZXh0ZW5zaW9uIChzdWNoIGFzICIuc28iIG9yICIuZXhlIikuCisgIFN1ZmZpeCBvZiB0aGUgYGB0Z3RgYCBmaWxlbmFtZSAoZXh0ZW5zaW9uIHN1Y2ggYXMgYGAuc29gYCBvciBgYC5leGVgYCkuCiAKICAgU2VlIGFsc28gdGhlIDpwcm9wX3RndDpgU1VGRklYYCB0YXJnZXQgcHJvcGVydHkuCiAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0ZJTEVfTkFNRTp0Z3Q+YGAKLSAgTmFtZSBvZiBtYWluIGZpbGUgKC5leGUsIC5zby4xLjIsIC5hKS4KKyAgVGhlIGBgdGd0YGAgZmlsZW5hbWUuCiBgYCQ8VEFSR0VUX0ZJTEVfRElSOnRndD5gYAotICBEaXJlY3Rvcnkgb2YgbWFpbiBmaWxlICguZXhlLCAuc28uMS4yLCAuYSkuCisgIERpcmVjdG9yeSBvZiB0aGUgYGB0Z3RgYCBiaW5hcnkgZmlsZS4KIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEU6dGd0PmBgCi0gIEZpbGUgdXNlZCB0byBsaW5rICguYSwgLmxpYiwgLnNvKSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorICBGaWxlIHVzZWQgd2hlbiBsaW5raW5nIHRvIHRoZSBgYHRndGBgIHRhcmdldC4gIFRoaXMgd2lsbCB1c3VhbGx5CisgIGJlIHRoZSBsaWJyYXJ5IHRoYXQgYGB0Z3RgYCByZXByZXNlbnRzIChgYC5hYGAsIGBgLmxpYmBgLCBgYC5zb2BgKSwKKyAgYnV0IGZvciBhIHNoYXJlZCBsaWJyYXJ5IG9uIERMTCBwbGF0Zm9ybXMsIGl0IHdvdWxkIGJlIHRoZSBgYC5saWJgYAorICBpbXBvcnQgbGlicmFyeSBhc3NvY2lhdGVkIHdpdGggdGhlIERMTC4KIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FOnRndD5gYAotICBCYXNlIG5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KLQotICBUaGUgYmFzZSBuYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSB0YXJnZXQgbGlua2VyIGZpbGUgbmFtZSAoc2VlCi0gIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRTp0Z3Q+YGApIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZmaXguIEZvciBleGFtcGxlLAorICBCYXNlIG5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgdGhlIHRhcmdldCBgYHRndGBgLCBpLmUuCisgIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRTp0Z3Q+YGAgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZpeC4gRm9yIGV4YW1wbGUsCiAgIGlmIHRhcmdldCBmaWxlIG5hbWUgaXMgYGBsaWJiYXNlLmFgYCwgdGhlIGJhc2UgbmFtZSBpcyBgYGJhc2VgYC4KIAogICBTZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBPVVRQVVRfTkFNRWAsIDpwcm9wX3RndDpgQVJDSElWRV9PVVRQVVRfTkFNRWAsCkBAIC01MjAsNyArNjQxLDcgQEAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWDp0Z3Q+YGAKLSAgUHJlZml4IG9mIGZpbGUgdXNlZCB0byBsaW5rIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCisgIFByZWZpeCBvZiBmaWxlIHVzZWQgdG8gbGluayB0YXJnZXQgYGB0Z3RgYC4KIAogICBTZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBQUkVGSVhgIGFuZCA6cHJvcF90Z3Q6YElNUE9SVF9QUkVGSVhgIHRhcmdldAogICBwcm9wZXJ0aWVzLgpAQCAtNTM4LDE1ICs2NTksMTUgQEAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0xJTktFUl9GSUxFX05BTUU6dGd0PmBgCi0gIE5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgKC5hLCAubGliLCAuc28pLgorICBOYW1lIG9mIGZpbGUgdXNlZCB0byBsaW5rIHRhcmdldCBgYHRndGBgLgogYGAkPFRBUkdFVF9MSU5LRVJfRklMRV9ESVI6dGd0PmBgCi0gIERpcmVjdG9yeSBvZiBmaWxlIHVzZWQgdG8gbGluayAoLmEsIC5saWIsIC5zbykuCisgIERpcmVjdG9yeSBvZiBmaWxlIHVzZWQgdG8gbGluayB0YXJnZXQgYGB0Z3RgYC4KIGBgJDxUQVJHRVRfU09OQU1FX0ZJTEU6dGd0PmBgCi0gIEZpbGUgd2l0aCBzb25hbWUgKC5zby4zKSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorICBGaWxlIHdpdGggc29uYW1lIChgYC5zby4zYGApIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCiBgYCQ8VEFSR0VUX1NPTkFNRV9GSUxFX05BTUU6dGd0PmBgCi0gIE5hbWUgb2YgZmlsZSB3aXRoIHNvbmFtZSAoLnNvLjMpLgorICBOYW1lIG9mIGZpbGUgd2l0aCBzb25hbWUgKGBgLnNvLjNgYCkuCiBgYCQ8VEFSR0VUX1NPTkFNRV9GSUxFX0RJUjp0Z3Q+YGAKLSAgRGlyZWN0b3J5IG9mIHdpdGggc29uYW1lICguc28uMykuCisgIERpcmVjdG9yeSBvZiB3aXRoIHNvbmFtZSAoYGAuc28uM2BgKS4KIGBgJDxUQVJHRVRfUERCX0ZJTEU6dGd0PmBgCiAgIEZ1bGwgcGF0aCB0byB0aGUgbGlua2VyIGdlbmVyYXRlZCBwcm9ncmFtIGRhdGFiYXNlIGZpbGUgKC5wZGIpCiAgIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCkBAIC01ODksMTQgKzcxMCwxNCBAQAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfUFJPUEVSVFk6cHJvcD5gYAotICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkgYGBwcm9wYGAgb24gdGhlIHRhcmdldCBvbiB3aGljaCB0aGUgZ2VuZXJhdG9yCi0gIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLiBOb3RlIHRoYXQgZm9yIGdlbmVyYXRvciBleHByZXNzaW9ucyBpbgotICA6cmVmOmBUYXJnZXQgVXNhZ2UgUmVxdWlyZW1lbnRzYCB0aGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKLSAgb24gdGhlIGNvbnN1bWluZyB0YXJnZXQgcmF0aGVyIHRoYW4gdGhlIHRhcmdldCBzcGVjaWZ5aW5nIHRoZQotICByZXF1aXJlbWVudC4KKyAgVmFsdWUgb2YgdGhlIHByb3BlcnR5IGBgcHJvcGBgIG9uIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBleHByZXNzaW9uCisgIGlzIGJlaW5nIGV2YWx1YXRlZC4gTm90ZSB0aGF0IGZvciBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgaW4KKyAgOnJlZjpgVGFyZ2V0IFVzYWdlIFJlcXVpcmVtZW50c2AgdGhpcyBpcyB0aGUgY29uc3VtaW5nIHRhcmdldCByYXRoZXIKKyAgdGhhbiB0aGUgdGFyZ2V0IHNwZWNpZnlpbmcgdGhlIHJlcXVpcmVtZW50LgogYGAkPElOU1RBTExfUFJFRklYPmBgCiAgIENvbnRlbnQgb2YgdGhlIGluc3RhbGwgcHJlZml4IHdoZW4gdGhlIHRhcmdldCBpcyBleHBvcnRlZCB2aWEKLSAgOmNvbW1hbmQ6YGluc3RhbGwoRVhQT1JUKWAgYW5kIGVtcHR5IG90aGVyd2lzZS4KKyAgOmNvbW1hbmQ6YGluc3RhbGwoRVhQT1JUKWAsIG9yIHdoZW4gZXZhbHVhdGVkIGluCisgIDpwcm9wX3RndDpgSU5TVEFMTF9OQU1FX0RJUmAsIGFuZCBlbXB0eSBvdGhlcndpc2UuCiAKIE91dHB1dC1SZWxhdGVkIEV4cHJlc3Npb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9ycy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWdlbmVyYXRvcnMuNy5yc3QKaW5kZXggNDFmNzY1Mi4uNmY4OGMwYSAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9ycy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1nZW5lcmF0b3JzLjcucnN0CkBAIC01MiwxMyArNTIsMTQgQEAKICAgIC9nZW5lcmF0b3IvVW5peCBNYWtlZmlsZXMKICAgIC9nZW5lcmF0b3IvV2F0Y29tIFdNYWtlCiAKLU5pbmphIEdlbmVyYXRvcgotXl5eXl5eXl5eXl5eXl5eCitOaW5qYSBHZW5lcmF0b3JzCiteXl5eXl5eXl5eXl5eXl5eCiAKIC4uIHRvY3RyZWU6OgogICAgOm1heGRlcHRoOiAxCiAKICAgIC9nZW5lcmF0b3IvTmluamEKKyAgIC9nZW5lcmF0b3IvTmluamEgTXVsdGktQ29uZmlnCiAKIC4uIF9gSURFIEJ1aWxkIFRvb2wgR2VuZXJhdG9yc2A6CiAKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLWxhbmd1YWdlLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtbGFuZ3VhZ2UuNy5yc3QKaW5kZXggNGNhOGUzYS4uYjdmMDg2MSAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtbGFuZ3VhZ2UuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtbGFuZ3VhZ2UuNy5yc3QKQEAgLTU2Nyw2ICs1NjcsOCBAQAogdGhhdCBhcmUgcHJvdmlkZWQgYnkgQ01ha2Ugb3IgaGF2ZSBtZWFuaW5nIHRvIENNYWtlIHdoZW4gc2V0CiBieSBwcm9qZWN0IGNvZGUuCiAKKy4uIGluY2x1ZGU6OiBJRF9SRVNFUlZFLnR4dAorCiAuLiBfYENNYWtlIExhbmd1YWdlIEVudmlyb25tZW50IFZhcmlhYmxlc2A6CiAKIEVudmlyb25tZW50IFZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtbW9kdWxlcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLW1vZHVsZXMuNy5yc3QKaW5kZXggYzYwZGM0MC4uYmU2NDExMiAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtbW9kdWxlcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1tb2R1bGVzLjcucnN0CkBAIC0xMjIsNiArMTIyLDcgQEAKICAgIC9tb2R1bGUvRmluZENBQkxFCiAgICAvbW9kdWxlL0ZpbmRDb2luM0QKICAgIC9tb2R1bGUvRmluZEN1cHMKKyAgIC9tb2R1bGUvRmluZENVREFUb29sa2l0CiAgICAvbW9kdWxlL0ZpbmRDVVJMCiAgICAvbW9kdWxlL0ZpbmRDdXJzZXMKICAgIC9tb2R1bGUvRmluZENWUwpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtcG9saWNpZXMuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdAppbmRleCA0NGVhMWE4Li4wOGQ1OWU3IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdApAQCAtNTEsNiArNTEsMjYgQEAKIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJlcG9ydCBhbiBlcnJvciBvbiB1c2Ugb2YgZGVwcmVjYXRlZCBtYWNyb3Mgb3IKIGZ1bmN0aW9ucy4KIAorUG9saWNpZXMgSW50cm9kdWNlZCBieSBDTWFrZSAzLjE4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDEKKworICAgQ01QMDEwMzogTXVsdGlwbGUgZXhwb3J0KCkgd2l0aCBzYW1lIEZJTEUgd2l0aG91dCBBUFBFTkQgaXMgbm90IGFsbG93ZWQuIDwvcG9saWN5L0NNUDAxMDM+CisKK1BvbGljaWVzIEludHJvZHVjZWQgYnkgQ01ha2UgMy4xNworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorICAgOm1heGRlcHRoOiAxCisKKyAgIENNUDAxMDI6IG1hcmtfYXNfYWR2YW5jZWQoKSBkb2VzIG5vdGhpbmcgaWYgYSBjYWNoZSBlbnRyeSBkb2VzIG5vdCBleGlzdC4gPC9wb2xpY3kvQ01QMDEwMj4KKyAgIENNUDAxMDE6IHRhcmdldF9jb21waWxlX29wdGlvbnMgaG9ub3JzIEJFRk9SRSBrZXl3b3JkIGluIGFsbCBzY29wZXMuIDwvcG9saWN5L0NNUDAxMDE+CisgICBDTVAwMTAwOiBMZXQgQVVUT01PQyBhbmQgQVVUT1VJQyBwcm9jZXNzIC5oaCBoZWFkZXIgZmlsZXMuIDwvcG9saWN5L0NNUDAxMDA+CisgICBDTVAwMDk5OiBMaW5rIHByb3BlcnRpZXMgYXJlIHRyYW5zaXRpdmUgb3ZlciBwcml2YXRlIGRlcGVuZGVuY3kgb24gc3RhdGljIGxpYnJhcmllcy4gPC9wb2xpY3kvQ01QMDA5OT4KKyAgIENNUDAwOTg6IEZpbmRGTEVYIHJ1bnMgZmxleCBpbiBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVIgd2hlbiBleGVjdXRpbmcuIDwvcG9saWN5L0NNUDAwOTg+CisKIFBvbGljaWVzIEludHJvZHVjZWQgYnkgQ01ha2UgMy4xNgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLXByb3BlcnRpZXMuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS1wcm9wZXJ0aWVzLjcucnN0CmluZGV4IGU3MDQzNzEuLmNiYjIyOTggMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLXByb3BlcnRpZXMuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtcHJvcGVydGllcy43LnJzdApAQCAtMjIsMTAgKzIyLDEzIEBACiAgICAvcHJvcF9nYmwvQVVUT01PQ19UQVJHRVRTX0ZPTERFUgogICAgL3Byb3BfZ2JsL0FVVE9SQ0NfU09VUkNFX0dST1VQCiAgICAvcHJvcF9nYmwvQ01BS0VfQ19LTk9XTl9GRUFUVVJFUworICAgL3Byb3BfZ2JsL0NNQUtFX0NVREFfS05PV05fRkVBVFVSRVMKICAgIC9wcm9wX2dibC9DTUFLRV9DWFhfS05PV05fRkVBVFVSRVMKICAgIC9wcm9wX2dibC9DTUFLRV9ST0xFCiAgICAvcHJvcF9nYmwvREVCVUdfQ09ORklHVVJBVElPTlMKICAgIC9wcm9wX2dibC9ESVNBQkxFRF9GRUFUVVJFUworICAgL3Byb3BfZ2JsL0VDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFMKKyAgIC9wcm9wX2dibC9FQ0xJUFNFX0VYVFJBX05BVFVSRVMKICAgIC9wcm9wX2dibC9FTkFCTEVEX0ZFQVRVUkVTCiAgICAvcHJvcF9nYmwvRU5BQkxFRF9MQU5HVUFHRVMKICAgIC9wcm9wX2dibC9GSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTCkBAIC0zNiwxMiArMzksMTAgQEAKICAgIC9wcm9wX2dibC9HTE9CQUxfREVQRU5EU19ERUJVR19NT0RFCiAgICAvcHJvcF9nYmwvR0xPQkFMX0RFUEVORFNfTk9fQ1lDTEVTCiAgICAvcHJvcF9nYmwvSU5fVFJZX0NPTVBJTEUKKyAgIC9wcm9wX2dibC9KT0JfUE9PTFMKICAgIC9wcm9wX2dibC9QQUNLQUdFU19GT1VORAogICAgL3Byb3BfZ2JsL1BBQ0tBR0VTX05PVF9GT1VORAotICAgL3Byb3BfZ2JsL0pPQl9QT09MUwogICAgL3Byb3BfZ2JsL1BSRURFRklORURfVEFSR0VUU19GT0xERVIKLSAgIC9wcm9wX2dibC9FQ0xJUFNFX0VYVFJBX05BVFVSRVMKLSAgIC9wcm9wX2dibC9FQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTCiAgICAvcHJvcF9nYmwvUkVQT1JUX1VOREVGSU5FRF9QUk9QRVJUSUVTCiAgICAvcHJvcF9nYmwvUlVMRV9MQVVOQ0hfQ09NUElMRQogICAgL3Byb3BfZ2JsL1JVTEVfTEFVTkNIX0NVU1RPTQpAQCAtMTAzLDYgKzEwNCw3IEBACiAgICA6bWF4ZGVwdGg6IDEKIAogICAgL3Byb3BfdGd0L0FERElUSU9OQUxfQ0xFQU5fRklMRVMKKyAgIC9wcm9wX3RndC9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTCiAgICAvcHJvcF90Z3QvQUxJQVNFRF9UQVJHRVQKICAgIC9wcm9wX3RndC9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMKICAgIC9wcm9wX3RndC9BTkRST0lEX0FQSQpAQCAtMTI1LDI0ICsxMjcsMjUgQEAKICAgIC9wcm9wX3RndC9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkKICAgIC9wcm9wX3RndC9BUkNISVZFX09VVFBVVF9OQU1FX0NPTkZJRwogICAgL3Byb3BfdGd0L0FSQ0hJVkVfT1VUUFVUX05BTUUKKyAgIC9wcm9wX3RndC9QQ0hfV0FSTl9JTlZBTElECiAgICAvcHJvcF90Z3QvQVVUT0dFTl9CVUlMRF9ESVIKICAgIC9wcm9wX3RndC9BVVRPR0VOX09SSUdJTl9ERVBFTkRTCiAgICAvcHJvcF90Z3QvQVVUT0dFTl9QQVJBTExFTAogICAgL3Byb3BfdGd0L0FVVE9HRU5fVEFSR0VUX0RFUEVORFMKKyAgIC9wcm9wX3RndC9BVVRPTU9DCiAgICAvcHJvcF90Z3QvQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTCiAgICAvcHJvcF90Z3QvQVVUT01PQ19ERVBFTkRfRklMVEVSUwogICAgL3Byb3BfdGd0L0FVVE9NT0NfRVhFQ1VUQUJMRQogICAgL3Byb3BfdGd0L0FVVE9NT0NfTUFDUk9fTkFNRVMKICAgIC9wcm9wX3RndC9BVVRPTU9DX01PQ19PUFRJT05TCiAgICAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWAotICAgL3Byb3BfdGd0L0FVVE9NT0MKKyAgIC9wcm9wX3RndC9BVVRPUkNDCisgICAvcHJvcF90Z3QvQVVUT1JDQ19FWEVDVVRBQkxFCisgICAvcHJvcF90Z3QvQVVUT1JDQ19PUFRJT05TCiAgICAvcHJvcF90Z3QvQVVUT1VJQwogICAgL3Byb3BfdGd0L0FVVE9VSUNfRVhFQ1VUQUJMRQogICAgL3Byb3BfdGd0L0FVVE9VSUNfT1BUSU9OUwogICAgL3Byb3BfdGd0L0FVVE9VSUNfU0VBUkNIX1BBVEhTCi0gICAvcHJvcF90Z3QvQVVUT1JDQwotICAgL3Byb3BfdGd0L0FVVE9SQ0NfRVhFQ1VUQUJMRQotICAgL3Byb3BfdGd0L0FVVE9SQ0NfT1BUSU9OUwogICAgL3Byb3BfdGd0L0JJTkFSWV9ESVIKICAgIC9wcm9wX3RndC9CVUlMRF9SUEFUSAogICAgL3Byb3BfdGd0L0JVSUxEX1JQQVRIX1VTRV9PUklHSU4KQEAgLTE3Miw2ICsxNzUsNyBAQAogICAgL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OCiAgICAvcHJvcF90Z3QvQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04KICAgIC9wcm9wX3RndC9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMKKyAgIC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWQogICAgL3Byb3BfdGd0L0NVREFfRVhURU5TSU9OUwogICAgL3Byb3BfdGd0L0NVREFfU1RBTkRBUkQKICAgIC9wcm9wX3RndC9DVURBX1NUQU5EQVJEX1JFUVVJUkVECkBAIC0xODIsNyArMTg2LDkgQEAKICAgIC9wcm9wX3RndC9ERUZJTkVfU1lNQk9MCiAgICAvcHJvcF90Z3QvREVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZCiAgICAvcHJvcF90Z3QvREVQTE9ZTUVOVF9BRERJVElPTkFMX0ZJTEVTCisgICAvcHJvcF90Z3QvREVQUkVDQVRJT04KICAgIC9wcm9wX3RndC9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUworICAgL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLCiAgICAvcHJvcF90Z3QvRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTgogICAgL3Byb3BfdGd0L0VjaG9TdHJpbmcKICAgIC9wcm9wX3RndC9FTkFCTEVfRVhQT1JUUwpAQCAtMTk1LDYgKzIwMSw3IEBACiAgICAvcHJvcF90Z3QvRm9ydHJhbl9GT1JNQVQKICAgIC9wcm9wX3RndC9Gb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkKICAgIC9wcm9wX3RndC9GUkFNRVdPUksKKyAgIC9wcm9wX3RndC9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHCiAgICAvcHJvcF90Z3QvRlJBTUVXT1JLX1ZFUlNJT04KICAgIC9wcm9wX3RndC9HRU5FUkFUT1JfRklMRV9OQU1FCiAgICAvcHJvcF90Z3QvR0hTX0lOVEVHUklUWV9BUFAKQEAgLTI1MSw2ICsyNTgsNyBAQAogICAgL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVECiAgICAvcHJvcF90Z3QvSk9CX1BPT0xfQ09NUElMRQogICAgL3Byb3BfdGd0L0pPQl9QT09MX0xJTksKKyAgIC9wcm9wX3RndC9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgogICAgL3Byb3BfdGd0L0xBQkVMUwogICAgL3Byb3BfdGd0L0xBTkdfQ0xBTkdfVElEWQogICAgL3Byb3BfdGd0L0xBTkdfQ09NUElMRVJfTEFVTkNIRVIKQEAgLTI3OSw2ICsyODcsOCBAQAogICAgL3Byb3BfdGd0L0xJTktfV0hBVF9ZT1VfVVNFCiAgICAvcHJvcF90Z3QvTE9DQVRJT05fQ09ORklHCiAgICAvcHJvcF90Z3QvTE9DQVRJT04KKyAgIC9wcm9wX3RndC9NQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04KKyAgIC9wcm9wX3RndC9NQUNIT19DVVJSRU5UX1ZFUlNJT04KICAgIC9wcm9wX3RndC9NQUNPU1hfQlVORExFX0lORk9fUExJU1QKICAgIC9wcm9wX3RndC9NQUNPU1hfQlVORExFCiAgICAvcHJvcF90Z3QvTUFDT1NYX0ZSQU1FV09SS19JTkZPX1BMSVNUCkBAIC0zNDgsNiArMzU4LDcgQEAKICAgIC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFUwogICAgL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUwKICAgIC9wcm9wX3RndC9WU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OCisgICAvcHJvcF90Z3QvVlNfRE9UTkVUX0RPQ1VNRU5UQVRJT05fRklMRQogICAgL3Byb3BfdGd0L1ZTX0RQSV9BV0FSRQogICAgL3Byb3BfdGd0L1ZTX0dMT0JBTF9LRVlXT1JECiAgICAvcHJvcF90Z3QvVlNfR0xPQkFMX1BST0pFQ1RfVFlQRVMKQEAgLTM2Niw2ICszNzcsOCBAQAogICAgL3Byb3BfdGd0L1ZTX1NDQ19QUk9KRUNUTkFNRQogICAgL3Byb3BfdGd0L1ZTX1NDQ19QUk9WSURFUgogICAgL3Byb3BfdGd0L1ZTX1NES19SRUZFUkVOQ0VTCisgICAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZCisgICAvcHJvcF90Z3QvVlNfU09VUkNFX1NFVFRJTkdTX3Rvb2wKICAgIC9wcm9wX3RndC9WU19VU0VSX1BST1BTCiAgICAvcHJvcF90Z3QvVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fTUlOX1ZFUlNJT04KICAgIC9wcm9wX3RndC9WU19XSU5SVF9DT01QT05FTlQKQEAgLTM5Niw2ICs0MDksNyBAQAogICAgL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AKICAgIC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIKICAgIC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUAorICAgL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWQogICAgL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUwogICAgL3Byb3BfdGd0L1hDVEVTVAogCkBAIC00NDIsOCArNDU2LDggQEAKICAgIDptYXhkZXB0aDogMQogCiAgICAvcHJvcF9zZi9BQlNUUkFDVAotICAgL3Byb3Bfc2YvQVVUT1VJQ19PUFRJT05TCiAgICAvcHJvcF9zZi9BVVRPUkNDX09QVElPTlMKKyAgIC9wcm9wX3NmL0FVVE9VSUNfT1BUSU9OUwogICAgL3Byb3Bfc2YvQ09NUElMRV9ERUZJTklUSU9OUwogICAgL3Byb3Bfc2YvQ09NUElMRV9GTEFHUwogICAgL3Byb3Bfc2YvQ09NUElMRV9PUFRJT05TCkBAIC00NzQsNiArNDg4LDcgQEAKICAgIC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfTE9DQVRJT04KICAgIC9wcm9wX3NmL1ZTX0lOQ0xVREVfSU5fVlNJWAogICAgL3Byb3Bfc2YvVlNfUkVTT1VSQ0VfR0VORVJBVE9SCisgICAvcHJvcF9zZi9WU19TRVRUSU5HUwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0VOQUJMRV9ERUJVRwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0VOVFJZUE9JTlQKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLXRvb2xjaGFpbnMuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS10b29sY2hhaW5zLjcucnN0CmluZGV4IGYyMzNkMDguLmU4YmFkZDQgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLXRvb2xjaGFpbnMuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtdG9vbGNoYWlucy43LnJzdApAQCAtMjMzLDYgKzIzMyw5IEBACiAgIHNldChDTUFLRV9DWFhfQ09NUElMRVIgUUNDKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX1RBUkdFVCAke2FyY2h9KQogCisgIHNldChDTUFLRV9TWVNST09UICRFTlZ7UU5YX1RBUkdFVH0pCisKKwogQ3Jvc3MgQ29tcGlsaW5nIGZvciBXaW5kb3dzIENFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtdmFyaWFibGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtdmFyaWFibGVzLjcucnN0CmluZGV4IDUzYjdmOGQuLjYyYzMwMWMgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLXZhcmlhYmxlcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS12YXJpYWJsZXMuNy5yc3QKQEAgLTE0LDYgKzE0LDcgQEAKIDpyZWY6YFZhcmlhYmxlcyA8Q01ha2UgTGFuZ3VhZ2UgVmFyaWFibGVzPmAKIHNlY3Rpb24gaW4gdGhlIGNtYWtlLWxhbmd1YWdlIG1hbnVhbC4KIAorLi4gaW5jbHVkZTo6IElEX1JFU0VSVkUudHh0CiAKIFZhcmlhYmxlcyB0aGF0IFByb3ZpZGUgSW5mb3JtYXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM3LDE3ICszOCwyNCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0NST1NTQ09NUElMSU5HX0VNVUxBVE9SCiAgICAvdmFyaWFibGUvQ01BS0VfQ1RFU1RfQ09NTUFORAogICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUgorICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04KKyAgIC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSCisgICAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUKKyAgIC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORQogICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfTElTVF9ESVIKICAgIC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0xJU1RfRklMRQogICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfTElTVF9MSU5FCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSCisgICAvdmFyaWFibGUvQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMKICAgIC92YXJpYWJsZS9DTUFLRV9ESVJFQ1RPUllfTEFCRUxTCiAgICAvdmFyaWFibGUvQ01BS0VfRExfTElCUworICAgL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLCiAgICAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTgogICAgL3ZhcmlhYmxlL0NNQUtFX0VESVRfQ09NTUFORAogICAgL3ZhcmlhYmxlL0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYCiAgICAvdmFyaWFibGUvQ01BS0VfRVhUUkFfR0VORVJBVE9SCiAgICAvdmFyaWFibGUvQ01BS0VfRVhUUkFfU0hBUkVEX0xJQlJBUllfU1VGRklYRVMKKyAgIC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUKICAgIC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRQogICAgL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTgogICAgL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX09SREVSCkBAIC01OSw2ICs2Nyw3IEBACiAgICAvdmFyaWFibGUvQ01BS0VfSU1QT1JUX0xJQlJBUllfU1VGRklYCiAgICAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xfQ09NUElMRQogICAgL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MX0xJTksKKyAgIC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgogICAgL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MUwogICAgL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVIKICAgIC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1JBTkxJQgpAQCAtNzAsNyArNzksNiBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX01BS0VfUFJPR1JBTQogICAgL3ZhcmlhYmxlL0NNQUtFX01BVENIX0NPVU5UCiAgICAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfbgotICAgL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfSU5ERU5UCiAgICAvdmFyaWFibGUvQ01BS0VfTUlOSU1VTV9SRVFVSVJFRF9WRVJTSU9OCiAgICAvdmFyaWFibGUvQ01BS0VfTUlOT1JfVkVSU0lPTgogICAgL3ZhcmlhYmxlL0NNQUtFX05FVFJDCkBAIC0xNTUsNyArMTYzLDYgQEAKICAgIC92YXJpYWJsZS9DTUFLRV9DT0RFTElURV9VU0VfVEFSR0VUUwogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTE9SX01BS0VGSUxFCiAgICAvdmFyaWFibGUvQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUwotICAgL3ZhcmlhYmxlL0NNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTCiAgICAvdmFyaWFibGUvQ01BS0VfREVQRU5EU19JTl9QUk9KRUNUX09OTFkKICAgIC92YXJpYWJsZS9DTUFLRV9ESVNBQkxFX0ZJTkRfUEFDS0FHRV9QYWNrYWdlTmFtZQogICAgL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfR0VORVJBVEVfTElOS0VEX1JFU09VUkNFUwpAQCAtMjA2LDYgKzIxMywxMCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFCiAgICAvdmFyaWFibGUvQ01BS0VfTUZDX0ZMQUcKICAgIC92YXJpYWJsZS9DTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSAorICAgL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVAorICAgL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XCisgICAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9JTkRFTlQKKyAgIC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTAogICAgL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9QQVRICiAgICAvdmFyaWFibGUvQ01BS0VfUE9MSUNZX0RFRkFVTFRfQ01QTk5OTgogICAgL3ZhcmlhYmxlL0NNQUtFX1BPTElDWV9XQVJOSU5HX0NNUE5OTk4KQEAgLTIxNCw2ICsyMjUsNyBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERQogICAgL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUKICAgIC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFCisgICAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9QUk9KRUNULU5BTUVfSU5DTFVERV9CRUZPUkUKICAgIC92YXJpYWJsZS9DTUFLRV9TS0lQX0lOU1RBTExfQUxMX0RFUEVOREVOQ1kKICAgIC92YXJpYWJsZS9DTUFLRV9TVEFHSU5HX1BSRUZJWAogICAgL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VOVl9TRVRUSU5HUwpAQCAtMjM5LDYgKzI1MSw3IEBACiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUgogICAgL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFCisgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5UCiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0dVQVJEX01BTExPQwogICAgL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTCkBAIC0yNDgsNiArMjYxLDcgQEAKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QCiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSCiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AKKyAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMKICAgIC92YXJpYWJsZS9QYWNrYWdlTmFtZV9ST09UCiAKQEAgLTMwOSw2ICszMjMsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDEKIAorICAgL3ZhcmlhYmxlL0NNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMKICAgIC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMKICAgIC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSQogICAgL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVBJX01JTgpAQCAtMzU3LDkgKzM3MiwxNCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkKICAgIC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRwogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTkZJR19QT1NURklYCisgICAvdmFyaWFibGUvQ01BS0VfQ1JPU1NfQ09ORklHUworICAgL3ZhcmlhYmxlL0NNQUtFX0NURVNUX0FSR1VNRU5UUwogICAgL3ZhcmlhYmxlL0NNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTCisgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkKICAgIC92YXJpYWJsZS9DTUFLRV9ERUJVR19QT1NURklYCisgICAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFCisgICAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTCiAgICAvdmFyaWFibGUvQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMKICAgIC92YXJpYWJsZS9DTUFLRV9FTkFCTEVfRVhQT1JUUwogICAgL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1MKQEAgLTM2OCw2ICszODgsNyBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVAogICAgL3ZhcmlhYmxlL0NNQUtFX0ZPTERFUgogICAgL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SSworICAgL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcKICAgIC92YXJpYWJsZS9DTUFLRV9Gb3J0cmFuX0ZPUk1BVAogICAgL3ZhcmlhYmxlL0NNQUtFX0ZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWQogICAgL3ZhcmlhYmxlL0NNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRQpAQCAtNDE3LDYgKzQzOCw3IEBACiAgICAvdmFyaWFibGUvQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMKICAgIC92YXJpYWJsZS9DTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQKICAgIC92YXJpYWJsZS9DTUFLRV9PU1hfU1lTUk9PVAorICAgL3ZhcmlhYmxlL0NNQUtFX1BDSF9XQVJOX0lOVkFMSUQKICAgIC92YXJpYWJsZS9DTUFLRV9QREJfT1VUUFVUX0RJUkVDVE9SWQogICAgL3ZhcmlhYmxlL0NNQUtFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRwogICAgL3ZhcmlhYmxlL0NNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUKQEAgLTQ2Niw2ICs0ODgsNyBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNDCiAgICAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYCiAgICAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VRzc3CisgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9FWFRFTlNJT05TCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UuMS5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdAppbmRleCA0YWI1NWEwLi5lNDk3ODkwIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdApAQCAtMjA2LDkgKzIwNiwyNCBAQAogIFRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCB3aWxsIG9ubHkgb3V0cHV0IG1lc3NhZ2VzIG9mIHRoZSBzcGVjaWZpZWQKICBsb2cgbGV2ZWwgb3IgaGlnaGVyLiAgVGhlIGRlZmF1bHQgbG9nIGxldmVsIGlzIGBgU1RBVFVTYGAuCiAKKyBUbyBtYWtlIGEgbG9nIGxldmVsIHBlcnNpc3QgYmV0d2VlbiBDTWFrZSBydW5zLCBzZXQKKyA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfTE9HX0xFVkVMYCBhcyBhIGNhY2hlIHZhcmlhYmxlIGluc3RlYWQuCisgSWYgYm90aCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgdGhlIHZhcmlhYmxlIGFyZSBnaXZlbiwgdGhlIGNvbW1hbmQgbGluZQorIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgorCiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYGAtLWxvZ2xldmVsYGAgaXMgYWxzbyBhY2NlcHRlZCBhcyBhCiAgc3lub255bSBmb3IgdGhpcyBvcHRpb24uCiAKK2BgLS1sb2ctY29udGV4dGBgCisgRW5hYmxlIHRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCBvdXRwdXR0aW5nIGNvbnRleHQgYXR0YWNoZWQgdG8gZWFjaAorIG1lc3NhZ2UuCisKKyBUaGlzIG9wdGlvbiB0dXJucyBvbiBzaG93aW5nIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IENNYWtlIHJ1biBvbmx5LgorIFRvIG1ha2Ugc2hvd2luZyB0aGUgY29udGV4dCBwZXJzaXN0ZW50IGZvciBhbGwgc3Vic2VxdWVudCBDTWFrZSBydW5zLCBzZXQKKyA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XYCBhcyBhIGNhY2hlIHZhcmlhYmxlIGluc3RlYWQuCisgV2hlbiB0aGlzIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgZ2l2ZW4sIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgCisgaXMgaWdub3JlZC4KKwogYGAtLWRlYnVnLXRyeWNvbXBpbGVgYAogIERvIG5vdCBkZWxldGUgdGhlIDpjb21tYW5kOmB0cnlfY29tcGlsZWAgYnVpbGQgdHJlZS4KICBPbmx5IHVzZWZ1bCBvbiBvbmUgOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBhdCBhIHRpbWUuCkBAIC0yMjYsNiArMjQxLDEyIEBACiAgUHJpbnQgZXh0cmEgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBjbWFrZSBydW4gbGlrZSBzdGFjayB0cmFjZXMgd2l0aAogIDpjb21tYW5kOmBtZXNzYWdlKFNFTkRfRVJST1IpYCBjYWxscy4KIAorYGAtLWRlYnVnLWZpbmRgYAorIFB1dCBjbWFrZSBmaW5kIGluIGEgZGVidWcgbW9kZS4KKworIFByaW50IGV4dHJhIGZpbmQgY2FsbCBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIGNtYWtlIHJ1biB0byBzdGFuZGFyZAorIGVycm9yLiBPdXRwdXQgaXMgZGVzaWduZWQgZm9yIGh1bWFuIGNvbnN1bXB0aW9uIGFuZCBub3QgZm9yIHBhcnNpbmcuCisKIGBgLS10cmFjZWBgCiAgUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUuCiAKQEAgLTIzNiw2ICsyNTcsNzQgQEAKIAogIExpa2UgYGAtLXRyYWNlYGAsIGJ1dCB3aXRoIHZhcmlhYmxlcyBleHBhbmRlZC4KIAorYGAtLXRyYWNlLWZvcm1hdD08Zm9ybWF0PmBgCisgUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUgYW5kIHNldHMgdGhlIHRyYWNlIG91dHB1dCBmb3JtYXQuCisKKyBgYDxmb3JtYXQ+YGAgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy4KKworICAgYGBodW1hbmBgCisgICAgIFByaW50cyBlYWNoIHRyYWNlIGxpbmUgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQuIFRoaXMgaXMgdGhlCisgICAgIGRlZmF1bHQgZm9ybWF0LgorCisgICBgYGpzb24tdjFgYAorICAgICBQcmludHMgZWFjaCBsaW5lIGFzIGEgc2VwYXJhdGUgSlNPTiBkb2N1bWVudC4gRWFjaCBkb2N1bWVudCBpcworICAgICBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lICggYGBcbmBgICkuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubworICAgICBuZXdsaW5lIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVzZW50IGluc2lkZSBhIEpTT04gZG9jdW1lbnQuCisKKyAgICAgSlNPTiB0cmFjZSBmb3JtYXQ6CisKKyAgICAgLi4gY29kZS1ibG9jazo6IGpzb24KKworICAgICAgIHsKKyAgICAgICAgICJmaWxlIjogIi9mdWxsL3BhdGgvdG8vdGhlL0NNYWtlL2ZpbGUudHh0IiwKKyAgICAgICAgICJsaW5lIjogMCwKKyAgICAgICAgICJjbWQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgImFyZ3MiOiBbImZvbyIsICJiYXIiXSwKKyAgICAgICAgICJ0aW1lIjogMTU3OTUxMjUzNS45Njg3MjMxLAorICAgICAgICAgImZyYW1lIjogMgorICAgICAgIH0KKworICAgICBUaGUgbWVtYmVycyBhcmU6CisKKyAgICAgYGBmaWxlYGAKKyAgICAgICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBDTWFrZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgZnVuY3Rpb24KKyAgICAgICB3YXMgY2FsbGVkLgorCisgICAgIGBgbGluZWBgCisgICAgICAgVGhlIGxpbmUgaW4gYGBmaWxlYGAgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCisKKyAgICAgYGBjbWRgYAorICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBjYWxsZWQuCisKKyAgICAgYGBhcmdzYGAKKyAgICAgICBBIHN0cmluZyBsaXN0IG9mIGFsbCBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorCisgICAgIGBgdGltZWBgCisgICAgICAgVGltZXN0YW1wIChzZWNvbmRzIHNpbmNlIGVwb2NoKSBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KKworICAgICBgYGZyYW1lYGAKKyAgICAgICBTdGFjayBmcmFtZSBkZXB0aCBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgY2FsbGVkLgorCisgICAgIEFkZGl0aW9uYWxseSwgdGhlIGZpcnN0IEpTT04gZG9jdW1lbnQgb3V0cHV0dGVkIGNvbnRhaW5zIHRoZQorICAgICBgYHZlcnNpb25gYCBrZXkgZm9yIHRoZSBjdXJyZW50IG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIHRoZQorCisgICAgIEpTT04gdHJhY2UgZm9ybWF0OgorCisgICAgIC4uIGNvZGUtYmxvY2s6OiBqc29uCisKKyAgICAgICB7CisgICAgICAgICAidmVyc2lvbiI6IHsKKyAgICAgICAgICAgIm1ham9yIjogMSwKKyAgICAgICAgICAgIm1pbm9yIjogMAorICAgICAgICAgfQorICAgICAgIH0KKworICAgICBUaGUgbWVtYmVycyBhcmU6CisKKyAgICAgYGB2ZXJzaW9uYGAKKyAgICAgICBJbmRpY2F0ZXMgdGhlIHZlcnNpb24gb2YgdGhlIEpTT04gZm9ybWF0LiBUaGUgdmVyc2lvbiBoYXMgYQorICAgICAgIG1ham9yIGFuZCBtaW5vciBjb21wb25lbnRzIGZvbGxvd2luZyBzZW1hbnRpYyB2ZXJzaW9uIGNvbnZlbnRpb25zLgorCiBgYC0tdHJhY2Utc291cmNlPTxmaWxlPmBgCiAgUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUsIGJ1dCBvdXRwdXQgb25seSBsaW5lcyBvZiBhIHNwZWNpZmllZCBmaWxlLgogCkBAIC0yNjcsNiArMzU2LDIwIEBACiAgaW4gOnZhcmlhYmxlOmBDTUFLRV9TT1VSQ0VfRElSYCBhbmQgOnZhcmlhYmxlOmBDTUFLRV9CSU5BUllfRElSYC4KICBUaGlzIGZsYWcgdGVsbHMgQ01ha2UgdG8gd2FybiBhYm91dCBvdGhlciBmaWxlcyBhcyB3ZWxsLgogCitgYC0tcHJvZmlsaW5nLW91dHB1dD08cGF0aD5gYAorIFVzZWQgaW4gY29uanVjdGlvbiB3aXRoIGBgLS1wcm9maWxpbmctZm9ybWF0YGAgdG8gb3V0cHV0IHRvIGEgZ2l2ZW4gcGF0aC4KKworYGAtLXByb2ZpbGluZy1mb3JtYXQ9PGZpbGU+YGAKKyBFbmFibGUgdGhlIG91dHB1dCBvZiBwcm9maWxpbmcgZGF0YSBvZiBDTWFrZSBzY3JpcHQgaW4gdGhlIGdpdmVuIGZvcm1hdC4KKworIFRoaXMgY2FuIGFpZCBwZXJmb3JtYW5jZSBhbmFseXNpcyBvZiBDTWFrZSBzY3JpcHRzIGV4ZWN1dGVkLiBUaGlyZCBwYXJ0eQorIGFwcGxpY2F0aW9ucyBzaG91bGQgYmUgdXNlZCB0byBwcm9jZXNzIHRoZSBvdXRwdXQgaW50byBodW1hbiByZWFkYWJsZSBmb3JtYXQuCisKKyBDdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlcyBhcmU6CisgYGBnb29nbGUtdHJhY2VgYCBPdXRwdXRzIGluIEdvb2dsZSBUcmFjZSBGb3JtYXQsIHdoaWNoIGNhbiBiZSBwYXJzZWQgYnkgdGhlCisgYWJvdXQ6dHJhY2luZyB0YWIgb2YgR29vZ2xlIENocm9tZSBvciB1c2luZyBhIHBsdWdpbiBmb3IgYSB0b29sIGxpa2UgVHJhY2UKKyBDb21wYXNzLgorCiAuLiBfYEJ1aWxkIFRvb2wgTW9kZWA6CiAKIEJ1aWxkIGEgUHJvamVjdApAQCAtNTM5LDIyICs2NDIsMzggQEAKICAgICAgN2EwYjU0ODk2ZmU1ZTcwY2NhNmRkNjQzYWQ2ZjY3MjYxNGIxODliZjI2ZjgxNTMwNjFjNGQyMTk0NzRiMDVkYWQwOGM0ZTcyOWFmOWY0YjAwOWYxYTFhMjgwY2I2MjU0NTRiZjU4N2M2OTBmNDYxN2MyN2UzYWViZGYzYjdhMmQgIGZpbGUyLnR4dAogCiBgYHJlbW92ZSBbLWZdIDxmaWxlPi4uLmBgCi0gIFJlbW92ZSB0aGUgZmlsZShzKS4gSWYgYW55IG9mIHRoZSBsaXN0ZWQgZmlsZXMgYWxyZWFkeSBkbyBub3QKLSAgZXhpc3QsIHRoZSBjb21tYW5kIHJldHVybnMgYSBub24temVybyBleGl0IGNvZGUsIGJ1dCBubyBtZXNzYWdlCi0gIGlzIGxvZ2dlZC4gVGhlIGBgLWZgYCBvcHRpb24gY2hhbmdlcyB0aGUgYmVoYXZpb3IgdG8gcmV0dXJuIGEKKyAgLi4gZGVwcmVjYXRlZDo6IDMuMTcKKworICBSZW1vdmUgdGhlIGZpbGUocykuIFRoZSBwbGFubmVkIGJlaGF2aW91ciB3YXMgdGhhdCBpZiBhbnkgb2YgdGhlCisgIGxpc3RlZCBmaWxlcyBhbHJlYWR5IGRvIG5vdCBleGlzdCwgdGhlIGNvbW1hbmQgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZSwKKyAgYnV0IG5vIG1lc3NhZ2UgaXMgbG9nZ2VkLiBUaGUgYGAtZmBgIG9wdGlvbiBjaGFuZ2VzIHRoZSBiZWhhdmlvciB0byByZXR1cm4gYQogICB6ZXJvIGV4aXQgY29kZSAoaS5lLiBzdWNjZXNzKSBpbiBzdWNoIHNpdHVhdGlvbnMgaW5zdGVhZC4KICAgYGByZW1vdmVgYCBkb2VzIG5vdCBmb2xsb3cgc3ltbGlua3MuIFRoYXQgbWVhbnMgaXQgcmVtb3ZlIG9ubHkgc3ltbGlua3MKICAgYW5kIG5vdCBmaWxlcyBpdCBwb2ludCB0by4KIAorICBUaGUgaW1wbGVtZW50YXRpb24gd2FzIGJ1Z2d5IGFuZCBhbHdheXMgcmV0dXJuZWQgMC4gSXQgY2Fubm90IGJlIGZpeGVkIHdpdGhvdXQKKyAgYnJlYWtpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFVzZSBgYHJtYGAgaW5zdGVhZC4KKwogYGByZW1vdmVfZGlyZWN0b3J5IDxkaXI+Li4uYGAKLSAgUmVtb3ZlIGBgPGRpcj5gYCBkaXJlY3RvcmllcyBhbmQgdGhlaXIgY29udGVudHMuICBJZiBhIGRpcmVjdG9yeSBkb2VzCisgIC4uIGRlcHJlY2F0ZWQ6OiAzLjE3CisKKyAgUmVtb3ZlIGBgPGRpcj5gYCBkaXJlY3RvcmllcyBhbmQgdGhlaXIgY29udGVudHMuIElmIGEgZGlyZWN0b3J5IGRvZXMKICAgbm90IGV4aXN0IGl0IHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4gIElmIGBgPGRpcj5gYCBpcyBhIHN5bWxpbmsgdG8KICAgYSBkaXJlY3RvcnksIGp1c3QgdGhlIHN5bWxpbmsgd2lsbCBiZSByZW1vdmVkLgorICBVc2UgYGBybWBgIGluc3RlYWQuCiAKIGBgcmVuYW1lIDxvbGRuYW1lPiA8bmV3bmFtZT5gYAogICBSZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeSAob24gb25lIHZvbHVtZSkuIElmIGZpbGUgd2l0aCB0aGUgYGA8bmV3bmFtZT5gYCBuYW1lCiAgIGFscmVhZHkgZXhpc3RzLCB0aGVuIGl0IHdpbGwgYmUgc2lsZW50bHkgcmVwbGFjZWQuCiAKK2Bgcm0gWy1yUmZdIDxmaWxlPiA8ZGlyPi4uLmBgCisgIFJlbW92ZSB0aGUgZmlsZXMgYGA8ZmlsZT5gYCBvciBkaXJlY3RvcmllcyBgYGRpcmBgLgorICBVc2UgYGAtcmBgIG9yIGBgLVJgYCB0byByZW1vdmUgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIGNvbnRlbnRzIHJlY3Vyc2l2ZWx5LgorICBJZiBhbnkgb2YgdGhlIGxpc3RlZCBmaWxlcy9kaXJlY3RvcmllcyBkbyBub3QgZXhpc3QsIHRoZSBjb21tYW5kIHJldHVybnMgYQorICBub24temVybyBleGl0IGNvZGUsIGJ1dCBubyBtZXNzYWdlIGlzIGxvZ2dlZC4gVGhlIGBgLWZgYCBvcHRpb24gY2hhbmdlcworICB0aGUgYmVoYXZpb3IgdG8gcmV0dXJuIGEgemVybyBleGl0IGNvZGUgKGkuZS4gc3VjY2VzcykgaW4gc3VjaAorICBzaXR1YXRpb25zIGluc3RlYWQuCisKIGBgc2VydmVyYGAKICAgTGF1bmNoIDptYW51YWw6YGNtYWtlLXNlcnZlcig3KWAgbW9kZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY3Rlc3QuMS5yc3QgYi9IZWxwL21hbnVhbC9jdGVzdC4xLnJzdAppbmRleCBlMjllYmNhLi42NTAzZjBlIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jdGVzdC4xLnJzdAorKysgYi9IZWxwL21hbnVhbC9jdGVzdC4xLnJzdApAQCAtMjYxLDEwICsyNjEsMjcgQEAKICBmYWlsLCBzdWJzZXF1ZW50IGNhbGxzIHRvIENUZXN0IHdpdGggdGhlIGBgLS1yZXJ1bi1mYWlsZWRgYCBvcHRpb24gd2lsbCBydW4KICB0aGUgc2V0IG9mIHRlc3RzIHRoYXQgbW9zdCByZWNlbnRseSBmYWlsZWQgKGlmIGFueSkuCiAKLWBgLS1yZXBlYXQtdW50aWwtZmFpbCA8bj5gYAotIFJlcXVpcmUgZWFjaCB0ZXN0IHRvIHJ1biBgYDxuPmBgIHRpbWVzIHdpdGhvdXQgZmFpbGluZyBpbiBvcmRlciB0byBwYXNzLgorYGAtLXJlcGVhdCA8bW9kZT46PG4+YGAKKyAgUnVuIHRlc3RzIHJlcGVhdGVkbHkgYmFzZWQgb24gdGhlIGdpdmVuIGBgPG1vZGU+YGAgdXAgdG8gYGA8bj5gYCB0aW1lcy4KKyAgVGhlIG1vZGVzIGFyZToKIAotIFRoaXMgaXMgdXNlZnVsIGluIGZpbmRpbmcgc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdCBjYXNlcy4KKyAgYGB1bnRpbC1mYWlsYGAKKyAgICBSZXF1aXJlIGVhY2ggdGVzdCB0byBydW4gYGA8bj5gYCB0aW1lcyB3aXRob3V0IGZhaWxpbmcgaW4gb3JkZXIgdG8gcGFzcy4KKyAgICBUaGlzIGlzIHVzZWZ1bCBpbiBmaW5kaW5nIHNwb3JhZGljIGZhaWx1cmVzIGluIHRlc3QgY2FzZXMuCisKKyAgYGB1bnRpbC1wYXNzYGAKKyAgICBBbGxvdyBlYWNoIHRlc3QgdG8gcnVuIHVwIHRvIGBgPG4+YGAgdGltZXMgaW4gb3JkZXIgdG8gcGFzcy4KKyAgICBSZXBlYXRzIHRlc3RzIGlmIHRoZXkgZmFpbCBmb3IgYW55IHJlYXNvbi4KKyAgICBUaGlzIGlzIHVzZWZ1bCBpbiB0b2xlcmF0aW5nIHNwb3JhZGljIGZhaWx1cmVzIGluIHRlc3QgY2FzZXMuCisKKyAgYGBhZnRlci10aW1lb3V0YGAKKyAgICBBbGxvdyBlYWNoIHRlc3QgdG8gcnVuIHVwIHRvIGBgPG4+YGAgdGltZXMgaW4gb3JkZXIgdG8gcGFzcy4KKyAgICBSZXBlYXRzIHRlc3RzIG9ubHkgaWYgdGhleSB0aW1lb3V0LgorICAgIFRoaXMgaXMgdXNlZnVsIGluIHRvbGVyYXRpbmcgc3BvcmFkaWMgdGltZW91dHMgaW4gdGVzdCBjYXNlcworICAgIG9uIGJ1c3kgbWFjaGluZXMuCisKK2BgLS1yZXBlYXQtdW50aWwtZmFpbCA8bj5gYAorIEVxdWl2YWxlbnQgdG8gYGAtLXJlcGVhdCB1bnRpbC1mYWlsOjxuPmBgLgogCiBgYC0tbWF4LXdpZHRoIDx3aWR0aD5gYAogIFNldCB0aGUgbWF4IHdpZHRoIGZvciBhIHRlc3QgbmFtZSB0byBvdXRwdXQuCkBAIC0zNTMsNiArMzcwLDE0IEBACiAgVGhpcyBvcHRpb24gd2lsbCBub3QgcnVuIGFueSB0ZXN0cywgaXQgd2lsbCBzaW1wbHkgcHJpbnQgdGhlIGxpc3Qgb2YKICBhbGwgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGVzdCBzZXQuCiAKK2BgLS1uby10ZXN0cz08W2Vycm9yfGlnbm9yZV0+YGAKKyBSZWdhcmQgbm8gdGVzdHMgZm91bmQgZWl0aGVyIGFzIGVycm9yIG9yIGlnbm9yZSBpdC4KKworIElmIG5vIHRlc3RzIHdlcmUgZm91bmQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIENUZXN0IGlzIHRvIGFsd2F5cyBsb2cgYW4KKyBlcnJvciBtZXNzYWdlIGJ1dCB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbiBzY3JpcHQgbW9kZSBvbmx5LiAgVGhpcyBvcHRpb24KKyB1bmlmaWVzIHRoZSBiZWhhdmlvciBvZiBDVGVzdCBieSBlaXRoZXIgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaWYgbm8gdGVzdHMKKyB3ZXJlIGZvdW5kIG9yIGJ5IGlnbm9yaW5nIGl0LgorCiAuLiBpbmNsdWRlOjogT1BUSU9OU19IRUxQLnR4dAogCiAuLiBfYExhYmVsIGFuZCBTdWJwcm9qZWN0IFN1bW1hcnlgOgpAQCAtMTA5Niw2ICsxMTIxLDIwIEBACiAgICogYENUZXN0IFNjcmlwdGBfIHZhcmlhYmxlOiBub25lCiAgICogOm1vZHVsZTpgQ1Rlc3RgIG1vZHVsZSB2YXJpYWJsZTogYGBWQUxHUklORF9DT01NQU5EX09QVElPTlNgYAogCitgYERyTWVtb3J5Q29tbWFuZGBgCisgIFNwZWNpZnkgYSBgYE1lbW9yeUNoZWNrQ29tbWFuZGBgIHRoYXQgaXMga25vd24gdG8gYmUgYSBjb21tYW5kLWxpbmUKKyAgY29tcGF0aWJsZSB3aXRoIERyTWVtb3J5LgorCisgICogYENUZXN0IFNjcmlwdGBfIHZhcmlhYmxlOiBub25lCisgICogOm1vZHVsZTpgQ1Rlc3RgIG1vZHVsZSB2YXJpYWJsZTogYGBEUk1FTU9SWV9DT01NQU5EYGAKKworYGBEck1lbW9yeUNvbW1hbmRPcHRpb25zYGAKKyAgU3BlY2lmeSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byB0aGUgYGBEck1lbW9yeUNvbW1hbmRgYCB0b29sLgorICBUaGV5IHdpbGwgYmUgcGxhY2VkIHByaW9yIHRvIHRoZSB0ZXN0IGNvbW1hbmQgbGluZS4KKworICAqIGBDVGVzdCBTY3JpcHRgXyB2YXJpYWJsZTogbm9uZQorICAqIDptb2R1bGU6YENUZXN0YCBtb2R1bGUgdmFyaWFibGU6IGBgRFJNRU1PUllfQ09NTUFORF9PUFRJT05TYGAKKwogLi4gX2BDVGVzdCBTdWJtaXQgU3RlcGA6CiAKIENUZXN0IFN1Ym1pdCBTdGVwCkBAIC0xMjkyLDYgKzEzMzEsMTUgQEAKIHJlc291cmNlcyBhcmUgaW4gdXNlIGFuZCB3aGljaCBhcmUgZnJlZSwgc2NoZWR1bGluZyB0ZXN0cyBpbiBhIHdheSB0aGF0CiBwcmV2ZW50cyB0aGVtIGZyb20gdHJ5aW5nIHRvIGNsYWltIHJlc291cmNlcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlLgogCitXaGVuIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGZlYXR1cmUgaXMgdXNlZCwgQ1Rlc3Qgd2lsbCBub3Qgb3ZlcnN1YnNjcmliZQorcmVzb3VyY2VzLiBGb3IgZXhhbXBsZSwgaWYgYSByZXNvdXJjZSBoYXMgOCBzbG90cywgQ1Rlc3Qgd2lsbCBub3QgcnVuIHRlc3RzCit0aGF0IGNvbGxlY3RpdmVseSB1c2UgbW9yZSB0aGFuIDggc2xvdHMgYXQgYSB0aW1lLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCitsaW1pdGluZyBob3cgbWFueSB0ZXN0cyBjYW4gcnVuIGF0IGFueSBnaXZlbiB0aW1lLCBldmVuIGlmIGEgaGlnaCBgYC1qYGAKK2FyZ3VtZW50IGlzIHVzZWQsIGlmIHRob3NlIHRlc3RzIGFsbCB1c2Ugc29tZSBzbG90cyBmcm9tIHRoZSBzYW1lIHJlc291cmNlLgorSW4gYWRkaXRpb24sIGl0IG1lYW5zIHRoYXQgYSBzaW5nbGUgdGVzdCB0aGF0IHVzZXMgbW9yZSBvZiBhIHJlc291cmNlIHRoYW4gaXMKK2F2YWlsYWJsZSBvbiBhIG1hY2hpbmUgd2lsbCBub3QgcnVuIGF0IGFsbCAoYW5kIHdpbGwgYmUgcmVwb3J0ZWQgYXMKK2BgTm90IFJ1bmBgKS4KKwogQSBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgZmVhdHVyZSBpcyBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIHRoZSB1c2Ugb2YgYSBHUFUuCiBNdWx0aXBsZSB0ZXN0cyBjYW4gc2ltdWx0YW5lb3VzbHkgYWxsb2NhdGUgbWVtb3J5IGZyb20gYSBHUFUsIGJ1dCBpZiB0b28gbWFueQogdGVzdHMgdHJ5IHRvIGRvIHRoaXMgYXQgb25jZSwgc29tZSBvZiB0aGVtIHdpbGwgZmFpbCB0byBhbGxvY2F0ZSwgcmVzdWx0aW5nIGluCmRpZmYgLS1naXQgYS9IZWxwL21vZHVsZS9GaW5kQ1VEQVRvb2xraXQucnN0IGIvSGVscC9tb2R1bGUvRmluZENVREFUb29sa2l0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjAxZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9tb2R1bGUvRmluZENVREFUb29sa2l0LnJzdApAQCAtMCwwICsxIEBACisuLiBjbWFrZS1tb2R1bGU6OiAuLi8uLi9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA5OC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDk4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDE0NDNiCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5OC5yc3QKQEAgLTAsMCArMSwzMCBAQAorQ01QMDA5OAorLS0tLS0tLQorCis6bW9kdWxlOmBGaW5kRkxFWGAgcnVucyBgYGZsZXhgYCBpbiBkaXJlY3RvcnkKKzp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYCB3aGVuIGV4ZWN1dGluZy4KKworVGhlIG1vZHVsZSBwcm92aWRlcyBhIGBgRkxFWF9UQVJHRVRgYCBtYWNybyB3aGljaCBnZW5lcmF0ZXMgRkxFWCBvdXRwdXQuCitJbiBDTWFrZSAzLjE2IGFuZCBiZWxvdyB0aGUgbWFjcm8gd291bGQgZ2VuZXJhdGUgYSBjdXN0b20gY29tbWFuZCB0aGF0IHJ1bnMKK2BgZmxleGBgIGluIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuICBDTWFrZSAzLjE3IGFuZCBsYXRlciBwcmVmZXIgdG8KK3J1biBpdCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IGFuZCB1c2UgOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgCithcyB0aGUgYGBXT1JLSU5HX0RJUkVDVE9SWWBgIG9mIGl0cyA6Y29tbWFuZDpgYWRkX2N1c3RvbV9jb21tYW5kYCBpbnZvY2F0aW9uLgorVGhpcyBlbnN1cmVzIHRoYXQgYW55IGltcGxpY2l0bHkgZ2VuZXJhdGVkIGZpbGUgaXMgd3JpdHRlbiByZWxhdGl2ZSB0byB0aGUKK2J1aWxkIHRyZWUgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZSB0cmVlLCB1bmxlc3MgdGhlIGdlbmVyYXRlZCBmaWxlIGlzCitwcm92aWRlZCBhcyBhYnNvbHV0ZSBwYXRoLgorCitUaGlzIHBvbGljeSBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGZvciBwcm9qZWN0cyB0aGF0IGhhdmUgbm90IGJlZW4gdXBkYXRlZAordG8gZXhwZWN0IHRoZSBuZXcgYmVoYXZpb3IuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyBmb3IgYGBGTEVYX1RBUkdFVGBgIHRvIHVzZQordGhlIGN1cnJlbnQgc291cmNlIGRpcmVjdG9yeSBmb3IgdGhlIGBgV09SS0lOR19ESVJFQ1RPUllgYCBhbmQgd2hlcmUKK3RvIGdlbmVyYXRlIGltcGxpY2l0IGZpbGVzLiBUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0bwordXNlIHRoZSBjdXJyZW50IGJpbmFyeSBkaXJlY3RvcnkgZm9yIHRoZSBgYFdPUktJTkdfRElSRUNUT1JZYGAgcmVsYXRpdmUgdG8KK3doaWNoIGltcGxpY2l0IGZpbGVzIGFyZSBnZW5lcmF0ZWQgdW5sZXNzIHByb3ZpZGVkIGFzIGFic29sdXRlIHBhdGguCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTkucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5OS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5N2U3YgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTkucnN0CkBAIC0wLDAgKzEsMjQgQEAKK0NNUDAwOTkKKy0tLS0tLS0KKworVGFyZ2V0IGxpbmsgcHJvcGVydGllcyA6cHJvcF90Z3Q6YElOVEVSRkFDRV9MSU5LX09QVElPTlNgLAorOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFU2AgYW5kIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfREVQRU5EU2AKK2FyZSBub3cgdHJhbnNpdGl2ZSBvdmVyIHByaXZhdGUgZGVwZW5kZW5jaWVzIG9mIHN0YXRpYyBsaWJyYXJpZXMuCisKK0luIENNYWtlIDMuMTYgYW5kIGJlbG93IHRoZSBpbnRlcmZhY2UgbGluayBwcm9wZXJ0aWVzIGF0dGFjaGVkIHRvIGxpYnJhcmllcworYXJlIG5vdCBwcm9wYWdhdGVkIGZvciBwcml2YXRlIGRlcGVuZGVuY2llcyBvZiBzdGF0aWMgbGlicmFyaWVzLgorT25seSB0aGUgbGlicmFyaWVzIHRoZW1zZWx2ZXMgYXJlIHByb3BhZ2F0ZWQgdG8gbGluayB0aGUgZGVwZW5kZW50IGJpbmFyeS4KK0NNYWtlIDMuMTcgYW5kIGxhdGVyIHByZWZlciB0byBwcm9wYWdhdGUgYWxsIGludGVyZmFjZSBsaW5rIHByb3BlcnRpZXMuCitUaGlzIHBvbGljeSBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGZvciBwcm9qZWN0cyB0aGF0IGhhdmUgbm90IGJlZW4gdXBkYXRlZAordG8gZXhwZWN0IHRoZSBuZXcgYmVoYXZpb3IuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBub3QgcHJvcGFnYXRlIGludGVyZmFjZSBsaW5rCitwcm9wZXJ0aWVzLiBUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byBwcm9wYWdhdGUgaW50ZXJmYWNlIGxpbmsKK3Byb3BlcnRpZXMuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDAucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwMC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ZDAxMwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDAucnN0CkBAIC0wLDAgKzEsNDAgQEAKK0NNUDAxMDAKKy0tLS0tLS0KKworTGV0IDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AgcHJvY2VzcworaGVhZGVyIGZpbGVzIHRoYXQgZW5kIHdpdGggYSBgYC5oaGBgIGV4dGVuc2lvbi4KKworU2luY2UgdmVyc2lvbiAzLjE3LCBDTWFrZSBwcm9jZXNzZXMgaGVhZGVyIGZpbGVzIHRoYXQgZW5kIHdpdGggYQorYGAuaGhgYCBleHRlbnNpb24gaW4gOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYC4KK0luIGVhcmxpZXIgQ01ha2UgdmVyc2lvbnMsIHRoZXNlIGhlYWRlciBmaWxlcyB3ZXJlIGlnbm9yZWQgYnkKKzpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AuCisKK1RoaXMgcG9saWN5IGFmZmVjdHMgaG93IGhlYWRlciBmaWxlcyB0aGF0IGVuZCB3aXRoIGEgYGAuaGhgYCBleHRlbnNpb24KK2dldCB0cmVhdGVkIGluIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBpZ25vcmUgYGAuaGhgYCBoZWFkZXIgZmlsZXMKK2luIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AuCisKK1RoZSBgYE5FV2BgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBwcm9jZXNzIGBgLmhoYGAgaGVhZGVyIGZpbGVzCitpbiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgIGp1c3QgbGlrZSBvdGhlciBoZWFkZXIgZmlsZXMuCisKKy4uIG5vdGU6OgorCisgIFRvIHNpbGVuY2UgdGhlIGBgQ01QMDEwMGBgIHdhcm5pbmcgc291cmNlIGZpbGVzIGNhbiBiZSBleGNsdWRlZCBmcm9tCisgIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AgcHJvY2Vzc2luZyBieSBzZXR0aW5nIHRoZQorICBzb3VyY2UgZmlsZSBwcm9wZXJ0aWVzIDpwcm9wX3NmOmBTS0lQX0FVVE9NT0NgLCA6cHJvcF9zZjpgU0tJUF9BVVRPVUlDYCBvcgorICA6cHJvcF9zZjpgU0tJUF9BVVRPR0VOYC4KKworICAuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgICMgU291cmNlIHNraXAgZXhhbXBsZToKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIC9wYXRoL3RvL2ZpbGUxLmhoIFBST1BFUlRZIFNLSVBfQVVUT01PQyBPTikKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIC9wYXRoL3RvL2ZpbGUyLmhoIFBST1BFUlRZIFNLSVBfQVVUT1VJQyBPTikKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIC9wYXRoL3RvL2ZpbGUzLmhoIFBST1BFUlRZIFNLSVBfQVVUT0dFTiBPTikKKworVGhpcyBwb2xpY3kgd2FzIGludHJvZHVjZWQgaW4gQ01ha2UgdmVyc2lvbiAzLjE3LjAuICBDTWFrZSB2ZXJzaW9uCit8cmVsZWFzZXwgd2FybnMgd2hlbiB0aGUgcG9saWN5IGlzIG5vdCBzZXQgYW5kIHVzZXMgYGBPTERgYCBiZWhhdmlvci4KK1VzZSB0aGUgOmNvbW1hbmQ6YGNtYWtlX3BvbGljeWAgY29tbWFuZCB0byBzZXQgaXQgdG8gYGBPTERgYCBvciBgYE5FV2BgCitleHBsaWNpdGx5LgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDEucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwMS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0MWFjZgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDEucnN0CkBAIC0wLDAgKzEsMjAgQEAKK0NNUDAxMDEKKy0tLS0tLS0KKworOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX29wdGlvbnNgIG5vdyBob25vcnMgYGBCRUZPUkVgYCBrZXl3b3JkIGluIGFsbCBzY29wZXMuCisKK0luIENNYWtlIDMuMTYgYW5kIGJlbG93IHRoZSA6Y29tbWFuZDpgdGFyZ2V0X2NvbXBpbGVfb3B0aW9uc2AgaWdub3JlcyB0aGUKK2BgQkVGT1JFYGAga2V5d29yZCBpbiBwcml2YXRlIHNjb3BlLiBDTWFrZSAzLjE3IGFuZCBsYXRlciBob25vcnMKK2BgQkVGT1JFYGAga2V5d29yZCBpbiBhbGwgc2NvcGVzLiBUaGlzIHBvbGljeSBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGZvcgorcHJvamVjdHMgdGhhdCBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgdG8gZXhwZWN0IHRoZSBuZXcgYmVoYXZpb3IuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBub3QgaG9ub3IgYGBCRUZPUkVgYCBrZXl3b3JkIGluCitwcml2YXRlIHNjb3BlLiBUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byBob25vcgorYGBCRUZPUkVgYCBrZXl3b3JkIGluIGFsbCBzY29wZXMuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDIucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwMi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1OTAwNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDIucnN0CkBAIC0wLDAgKzEsMjUgQEAKK0NNUDAxMDIKKy0tLS0tLS0KKworVGhlIDpjb21tYW5kOmBtYXJrX2FzX2FkdmFuY2VkYCBjb21tYW5kIG5vIGxvbmdlciBjcmVhdGVzIGEgY2FjaGUgZW50cnkgaWYgb25lCitkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCitJbiBDTWFrZSAzLjE2IGFuZCBiZWxvdywgaWYgYSB2YXJpYWJsZSB3YXMgbm90IGRlZmluZWQgYXQgYWxsIG9yIGp1c3QgZGVmaW5lZAorbG9jYWxseSwgdGhlIDpjb21tYW5kOmBtYXJrX2FzX2FkdmFuY2VkYCBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG5ldyBjYWNoZQorZW50cnkgd2l0aCBhbiBgYFVOSU5JVElBTElaRURgYCB0eXBlIGFuZCBubyB2YWx1ZS4gV2hlbiBhIDpjb21tYW5kOmBmaW5kX3BhdGhgCisob3Igb3RoZXIgc2ltaWxhciBgYGZpbmRfYGAgY29tbWFuZCkgd291bGQgbmV4dCBydW4sIGl0IHdvdWxkIGZpbmQgdGhpcwordW5kZWZpbmVkIGNhY2hlIGVudHJ5IGFuZCBzZXQgaXQgdXAgd2l0aCBhbiBlbXB0eSBzdHJpbmcgdmFsdWUuIFRoaXMgcHJvY2Vzcword291bGQgZW5kIHVwIGRlbGV0aW5nIHRoZSBsb2NhbCB2YXJpYWJsZSBpbiB0aGUgcHJvY2VzcyAoZHVlIHRvIHRoZSB3YXkgdGhlCitjYWNoZSB3b3JrcyksIGVmZmVjdGl2ZWx5IGNsZWFyaW5nIGFueSBzdG9yZWQgYGBmaW5kX2BgIHJlc3VsdHMgdGhhdCB3ZXJlIG9ubHkKK2F2YWlsYWJsZSBpbiB0aGUgbG9jYWwgc2NvcGUuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBjcmVhdGUgdGhlIGVtcHR5IGNhY2hlIGRlZmluaXRpb24uCitUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byBpZ25vcmUgdmFyaWFibGVzIHdoaWNoIGRvIG5vdAorYWxyZWFkeSBleGlzdCBpbiB0aGUgY2FjaGUuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwMy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzZTBjYgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDMucnN0CkBAIC0wLDAgKzEsMjIgQEAKK0NNUDAxMDMKKy0tLS0tLS0KKworTXVsdGlwbGUgY2FsbHMgdG8gOmNvbW1hbmQ6YGV4cG9ydGAgY29tbWFuZCB3aXRoIHNhbWUgYGBGSUxFYGAgd2l0aG91dAorYGBBUFBFTkRgYCBpcyBubyBsb25nZXIgYWxsb3dlZC4KKworSW4gQ01ha2UgMy4xNyBhbmQgYmVsb3csIG11bHRpcGxlIGNhbGxzIHRvIDpjb21tYW5kOmBleHBvcnRgIGNvbW1hbmQgd2l0aCB0aGUKK3NhbWUgYGBGSUxFYGAgd2l0aG91dCBgYEFQUEVORGBgIGFyZSBhY2NlcHRlZCBzaWxlbnRseSBidXQgb25seSB0aGUgbGFzdAorb2NjdXJyZW5jZSBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgdG8gaWdub3JlIHRoZSBtdWx0aXBsZSBvY2N1cnJlbmNlcyBvZgorIDpjb21tYW5kOmBleHBvcnRgIGNvbW1hbmQgZXhjZXB0IHRoZSBsYXN0IG9uZS4KKworVGhlIGBgTkVXYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgdG8gcmFpc2UgYW4gZXJyb3Igb24gc2Vjb25kIGNhbGwgdG8KKzpjb21tYW5kOmBleHBvcnRgIGNvbW1hbmQgd2l0aCBzYW1lIGBgRklMRWBgIHdpdGhvdXQgYGBBUFBFTkRgYC4KKworVGhpcyBwb2xpY3kgd2FzIGludHJvZHVjZWQgaW4gQ01ha2UgdmVyc2lvbiAzLjE4LiAgQ01ha2UgdmVyc2lvbgorfHJlbGVhc2V8IHdhcm5zIHdoZW4gdGhlIHBvbGljeSBpcyBub3Qgc2V0IGFuZCB1c2VzIGBgT0xEYGAgYmVoYXZpb3IuCitVc2UgdGhlIDpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYAorZXhwbGljaXRseS4KKworLi4gaW5jbHVkZTo6IERFUFJFQ0FURUQudHh0CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NVREFfS05PV05fRkVBVFVSRVMucnN0IGIvSGVscC9wcm9wX2dibC9DTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGUzN2ZlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX2dibC9DTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTLnJzdApAQCAtMCwwICsxLDMwIEBACitDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpc3Qgb2YgQ1VEQSBmZWF0dXJlcyBrbm93biB0byB0aGlzIHZlcnNpb24gb2YgQ01ha2UuCisKK1RoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gdGhpcyBnbG9iYWwgcHJvcGVydHkgbWF5IGJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSB0byB0aGUKK0NVREEgY29tcGlsZXIuICBJZiB0aGUgZmVhdHVyZSBpcyBhdmFpbGFibGUgd2l0aCB0aGUgQysrIGNvbXBpbGVyLCBpdCB3aWxsCitiZSBsaXN0ZWQgaW4gdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTYCB2YXJpYWJsZS4KKworVGhlIGZlYXR1cmVzIGxpc3RlZCBoZXJlIG1heSBiZSB1c2VkIHdpdGggdGhlIDpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9mZWF0dXJlc2AKK2NvbW1hbmQuICBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWNvbXBpbGUtZmVhdHVyZXMoNylgIG1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24KK2NvbXBpbGUgZmVhdHVyZXMgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcGlsZXJzLgorCisKK1RoZSBmZWF0dXJlcyBrbm93biB0byB0aGlzIHZlcnNpb24gb2YgQ01ha2UgYXJlOgorCitgYGN1ZGFfc3RkXzAzYGAKKyAgQ29tcGlsZXIgbW9kZSBpcyBhdCBsZWFzdCBDVURBL0MrKyAwMy4KKworYGBjdWRhX3N0ZF8xMWBgCisgIENvbXBpbGVyIG1vZGUgaXMgYXQgbGVhc3QgQ1VEQS9DKysgMTEuCisKK2BgY3VkYV9zdGRfMTRgYAorICBDb21waWxlciBtb2RlIGlzIGF0IGxlYXN0IENVREEvQysrIDE0LgorCitgYGN1ZGFfc3RkXzE3YGAKKyAgQ29tcGlsZXIgbW9kZSBpcyBhdCBsZWFzdCBDVURBL0MrKyAxNy4KKworYGBjdWRhX3N0ZF8yMGBgCisgIENvbXBpbGVyIG1vZGUgaXMgYXQgbGVhc3QgQ1VEQS9DKysgMjAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvR0VORVJBVEVELnJzdCBiL0hlbHAvcHJvcF9zZi9HRU5FUkFURUQucnN0CmluZGV4IGQ0MzBlZTIuLjQ4ZmY3MGMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9HRU5FUkFURUQucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9HRU5FUkFURUQucnN0CkBAIC00LDE2ICs0LDI5IEBACiBJcyB0aGlzIHNvdXJjZSBmaWxlIGdlbmVyYXRlZCBhcyBwYXJ0IG9mIHRoZSBidWlsZCBvciBDTWFrZSBwcm9jZXNzLgogCiBUZWxscyB0aGUgaW50ZXJuYWwgQ01ha2UgZW5naW5lIHRoYXQgYSBzb3VyY2UgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgYW4gb3V0c2lkZQotcHJvY2VzcyBzdWNoIGFzIGFub3RoZXIgYnVpbGQgc3RlcCwgb3IgdGhlIGV4ZWN1dGlvbiBvZiBDTWFrZSBpdHNlbGYuIFRoaXMKLWluZm9ybWF0aW9uIGlzIHRoZW4gdXNlZCB0byBleGVtcHQgdGhlIGZpbGUgZnJvbSBhbnkgZXhpc3RlbmNlIG9yIHZhbGlkaXR5Ci1jaGVja3MuIEdlbmVyYXRlZCBmaWxlcyBhcmUgY3JlYXRlZCBieSB0aGUgZXhlY3V0aW9uIG9mIGNvbW1hbmRzIHN1Y2ggYXMKLTpjb21tYW5kOmBhZGRfY3VzdG9tX2NvbW1hbmRgIGFuZCA6Y29tbWFuZDpgZmlsZShHRU5FUkFURSlgLgorcHJvY2VzcyBzdWNoIGFzIGFub3RoZXIgYnVpbGQgc3RlcCwgb3IgdGhlIGV4ZWN1dGlvbiBvZiBDTWFrZSBpdHNlbGYuCitUaGlzIGluZm9ybWF0aW9uIGlzIHRoZW4gdXNlZCB0byBleGVtcHQgdGhlIGZpbGUgZnJvbSBhbnkgZXhpc3RlbmNlIG9yCit2YWxpZGl0eSBjaGVja3MuCiAKLVdoZW4gYSBnZW5lcmF0ZWQgZmlsZSBjcmVhdGVkIGJ5IGFuIDpjb21tYW5kOmBhZGRfY3VzdG9tX2NvbW1hbmRgIGNvbW1hbmQKLWlzIGV4cGxpY2l0bHkgbGlzdGVkIGFzIGEgc291cmNlIGZpbGUgZm9yIGFueSB0YXJnZXQgaW4gdGhlIHNhbWUKLWRpcmVjdG9yeSBzY29wZSAod2hpY2ggdXN1YWxseSBtZWFucyB0aGUgc2FtZSBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSksCi1DTWFrZSB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgZGVwZW5kZW5jeSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMKLWdlbmVyYXRlZCBiZWZvcmUgYnVpbGRpbmcgdGhhdCB0YXJnZXQuCitBbnkgZmlsZSB0aGF0IGlzCisKKy0gY3JlYXRlZCBieSB0aGUgZXhlY3V0aW9uIG9mIGNvbW1hbmRzIHN1Y2ggYXMKKyAgOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgYW5kIDpjb21tYW5kOmBmaWxlKEdFTkVSQVRFKWAKKy0gbGlzdGVkIGFzIG9uZSBvZiB0aGUgYGBCWVBST0RVQ1RTYGAgb2YgYW4gOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAKKyAgb3IgOmNvbW1hbmQ6YGFkZF9jdXN0b21fdGFyZ2V0YCBjb21tYW5kLCBvcgorLSBjcmVhdGVkIGJ5IGEgQ01ha2UgYGBBVVRPR0VOYGAgb3BlcmF0aW9uIHN1Y2ggYXMgOnByb3BfdGd0OmBBVVRPTU9DYCwKKyAgOnByb3BfdGd0OmBBVVRPUkNDYCwgb3IgOnByb3BfdGd0OmBBVVRPVUlDYAorCit3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBgYEdFTkVSQVRFRGBgIHByb3BlcnR5LgorCitXaGVuIGEgZ2VuZXJhdGVkIGZpbGUgY3JlYXRlZCBhcyB0aGUgYGBPVVRQVVRgYCBvZiBhbgorOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgY29tbWFuZCBpcyBleHBsaWNpdGx5IGxpc3RlZCBhcyBhIHNvdXJjZSBmaWxlCitmb3IgYW55IHRhcmdldCBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgc2NvcGUgKHdoaWNoIHVzdWFsbHkgbWVhbnMgdGhlIHNhbWUKK2BgQ01ha2VMaXN0cy50eHRgYCBmaWxlKSwgQ01ha2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIGRlcGVuZGVuY3kgdG8KK21ha2Ugc3VyZSB0aGUgZmlsZSBpcyBnZW5lcmF0ZWQgYmVmb3JlIGJ1aWxkaW5nIHRoYXQgdGFyZ2V0LgorCitUaGUgOnJlZjpgTWFrZWZpbGUgR2VuZXJhdG9yc2Agd2lsbCByZW1vdmUgYGBHRU5FUkFURURgYCBmaWxlcyBkdXJpbmcKK2BgbWFrZSBjbGVhbmBgLgogCiBHZW5lcmF0ZWQgc291cmNlcyBtYXkgYmUgaGlkZGVuIGluIHNvbWUgSURFIHRvb2xzLCB3aGlsZSBpbiBvdGhlcnMgdGhleSBtaWdodAogYmUgc2hvd24uIEZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHNvdXJjZXMgZ2VuZXJhdGVkIGJ5IENNYWtlJ3MgOnByb3BfdGd0OmBBVVRPTU9DYApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NFVFRJTkdTLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19TRVRUSU5HUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxOTQwNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF9zZi9WU19TRVRUSU5HUy5yc3QKQEAgLTAsMCArMSwxOCBAQAorVlNfU0VUVElOR1MKKy0tLS0tLS0tLS0tCisKK1NldCBhbnkgaXRlbSBtZXRhZGF0YSBvbiBhIG5vbi1idWlsdCBmaWxlLgorCitUYWtlcyBhIGxpc3Qgb2YgYGBLZXk9VmFsdWVgYCBwYWlycy4gVGVsbHMgdGhlIFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9yIHRvIHNldAorYGBLZXlgYCB0byBgYFZhbHVlYGAgYXMgaXRlbSBtZXRhZGF0YSBvbiB0aGUgZmlsZS4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgZmlsZS5obHNsIFBST1BFUlRZIFZTX1NFVFRJTkdTICJLZXk9VmFsdWUiICJLZXkyPVZhbHVlMiIpCisKK3dpbGwgc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFuZCBgYEtleTJgYCB0byBgYFZhbHVlMmBgIG9uIHRoZQorYGBmaWxlLmhsc2xgYCBpdGVtIGFzIG1ldGFkYXRhLgorCitHZW5lcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQUlYX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZGRjMGIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMucnN0CkBAIC0wLDAgKzEsMTIgQEAKK0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gQUlYLCBDTWFrZSBhdXRvbWF0aWNhbGx5IGV4cG9ydHMgYWxsIHN5bWJvbHMgZnJvbSBzaGFyZWQgbGlicmFyaWVzLCBhbmQKK2Zyb20gZXhlY3V0YWJsZXMgd2l0aCB0aGUgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgdGFyZ2V0IHByb3BlcnR5IHNldC4KK0V4cGxpY2l0bHkgZGlzYWJsZSB0aGlzIGJvb2xlYW4gcHJvcGVydHkgdG8gc3VwcHJlc3MgdGhlIGJlaGF2aW9yIGFuZAorZXhwb3J0IG5vIHN5bWJvbHMgYnkgZGVmYXVsdC4gIEluIHRoaXMgY2FzZSBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBwcm9qZWN0Cit3aWxsIHVzZSBvdGhlciBtZWFucyB0byBleHBvcnQgc29tZSBzeW1ib2xzLgorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZgordGhlIDp2YXJpYWJsZTpgQ01BS0VfQUlYX0VYUE9SVF9BTExfU1lNQk9MU2AgdmFyaWFibGUgaWYgaXQgaXMgc2V0Cit3aGVuIGEgdGFyZ2V0IGlzIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fUEFSQUxMRUwucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX1BBUkFMTEVMLnJzdAppbmRleCAwN2ZiYzVhLi45NjhiNjE5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fUEFSQUxMRUwucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9QQVJBTExFTC5yc3QKQEAgLTQsOSArNCw5IEBACiBOdW1iZXIgb2YgcGFyYWxsZWwgYGBtb2NgYCBvciBgYHVpY2BgIHByb2Nlc3NlcyB0byBzdGFydCB3aGVuIHVzaW5nCiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgLgogCi1UaGUgY3VzdG9tIGA8b3JpZ2luPl9hdXRvZ2VuYCB0YXJnZXQgc3RhcnRzIGEgbnVtYmVyIG9mIHRocmVhZHMgb2Ygd2hpY2gKK1RoZSBjdXN0b20gYGA8b3JpZ2luPl9hdXRvZ2VuYGAgdGFyZ2V0IHN0YXJ0cyBhIG51bWJlciBvZiB0aHJlYWRzIG9mIHdoaWNoCiBlYWNoIG9uZSBwYXJzZXMgYSBzb3VyY2UgZmlsZSBhbmQgb24gZGVtYW5kIHN0YXJ0cyBhIGBgbW9jYGAgb3IgYGB1aWNgYAotcHJvY2Vzcy4gIDpwcm9wX3RndDpgQVVUT0dFTl9QQVJBTExFTGAgY29udHJvbHMgaG93IG1hbnkgcGFyYWxsZWwgdGhyZWFkcworcHJvY2Vzcy4gIGBgQVVUT0dFTl9QQVJBTExFTGBgIGNvbnRyb2xzIGhvdyBtYW55IHBhcmFsbGVsIHRocmVhZHMKIChhbmQgdGhlcmVmb3JlIGBgbW9jYGAgb3IgYGB1aWNgYCBwcm9jZXNzZXMpIGFyZSBzdGFydGVkLgogCiAtIEFuIGVtcHR5IChvciB1bnNldCkgdmFsdWUgb3IgdGhlIHN0cmluZyBgYEFVVE9gYCBzZXRzIHRoZSBudW1iZXIgb2YKQEAgLTE0LDcgKzE0LDcgQEAKIC0gQSBwb3NpdGl2ZSBub24gemVybyBpbnRlZ2VyIHZhbHVlIHNldHMgdGhlIGV4YWN0IHRocmVhZC9wcm9jZXNzIGNvdW50LgogLSBPdGhlcndpc2UgYSBzaW5nbGUgdGhyZWFkL3Byb2Nlc3MgaXMgc3RhcnRlZC4KIAotQnkgZGVmYXVsdCA6cHJvcF90Z3Q6YEFVVE9HRU5fUEFSQUxMRUxgIGlzIGluaXRpYWxpemVkIGZyb20KK0J5IGRlZmF1bHQgYGBBVVRPR0VOX1BBUkFMTEVMYGAgaXMgaW5pdGlhbGl6ZWQgZnJvbQogOnZhcmlhYmxlOmBDTUFLRV9BVVRPR0VOX1BBUkFMTEVMYC4KIAogU2VlIHRoZSA6bWFudWFsOmBjbWFrZS1xdCg3KWAgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIENNYWtlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fVEFSR0VUX0RFUEVORFMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX1RBUkdFVF9ERVBFTkRTLnJzdAppbmRleCBkNWM1ZTE0Li45MmI1MmEzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fVEFSR0VUX0RFUEVORFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9UQVJHRVRfREVQRU5EUy5yc3QKQEAgLTMzLDQgKzMzLDQgQEAKICAgOnByb3Bfc2Y6YFNLSVBfQVVUT1VJQ2AsIDpwcm9wX3NmOmBTS0lQX0FVVE9HRU5gIG9yIDpwb2xpY3k6YENNUDAwNzFgIG9yCiAtIGEgZmlsZSB0aGF0IGlzbid0IGluIHRoZSBvcmlnaW4gdGFyZ2V0J3Mgc291cmNlcwogCi1pdCBtdXN0IGFkZGVkIHRvIDpwcm9wX3RndDpgQVVUT0dFTl9UQVJHRVRfREVQRU5EU2AuCitpdCBtdXN0IGJlIGFkZGVkIHRvIDpwcm9wX3RndDpgQVVUT0dFTl9UQVJHRVRfREVQRU5EU2AuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0MucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DLnJzdAppbmRleCBmNmRmYWJkLi5jMTg4NTliIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0MucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQy5yc3QKQEAgLTE3Miw3ICsxNzIsNyBAQAogdGhlbiB0aGUgdmVyc2lvbiB2YXJpYWJsZXMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSB0byB0aGUgOnByb3BfdGd0OmBBVVRPTU9DYAogZW5hYmxlZCB0YXJnZXQuCiBJbiB0aGF0IGNhc2UgdGhlIHZlcnNpb24gdmFyaWFibGVzIGNhbiBiZSBmb3J3YXJkZWQgZnJvbSB0aGUKLWBmaW5kX3BhY2thZ2UoUXRbNDVdLi4uKWAgY2FsbGluZyBjb250ZXh0IHRvIHRoZSA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgCitgYGZpbmRfcGFja2FnZShRdFs0NV0uLi4pYGAgY2FsbGluZyBjb250ZXh0IHRvIHRoZSA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgCiBvciA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgIGNhbGxpbmcgY29udGV4dCBhcyBkaXJlY3RvcnkgcHJvcGVydGllcy4KIFRoZSBmb2xsb3dpbmcgUXQ1IGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBwcm9jZWR1cmUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0CmluZGV4IDY5OTU3YmYuLjZlZGEyNmMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX0RFUEVORF9GSUxURVJTLnJzdApAQCAtMjYsNiArMjYsOSBAQAogQnkgZGVmYXVsdCA6cHJvcF90Z3Q6YEFVVE9NT0NfREVQRU5EX0ZJTFRFUlNgIGlzIGluaXRpYWxpemVkIGZyb20KIDp2YXJpYWJsZTpgQ01BS0VfQVVUT01PQ19ERVBFTkRfRklMVEVSU2AsIHdoaWNoIGlzIGVtcHR5IGJ5IGRlZmF1bHQuCiAKK0Zyb20gUXQgNS4xNS4wIG9uIHRoaXMgdmFyaWFibGUgaXMgaWdub3JlZCBhcyBtb2MgaXMgYWJsZSB0byBvdXRwdXQgdGhlIGNvcnJlY3QKK2RlcGVuZGVuY2llcy4KKwogU2VlIHRoZSA6bWFudWFsOmBjbWFrZS1xdCg3KWAgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIENNYWtlCiB3aXRoIFF0LgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTU9DX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX01PQ19PUFRJT05TLnJzdAppbmRleCBlYmQ1YzQ5Li4zMzA4NDliIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTU9DX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19NT0NfT1BUSU9OUy5yc3QKQEAgLTEsNyArMSw3IEBACiBBVVRPTU9DX01PQ19PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgbW9jIHdoZW4gdXNpbmcgOnByb3BfdGd0OmBBVVRPTU9DYAorQWRkaXRpb25hbCBvcHRpb25zIGZvciBgYG1vY2BgIHdoZW4gdXNpbmcgOnByb3BfdGd0OmBBVVRPTU9DYAogCiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCBpZiB0aGUgOnByb3BfdGd0OmBBVVRPTU9DYCBwcm9wZXJ0eSBpcyBgYE9OYGAKIGZvciB0aGlzIHRhcmdldC4gIEluIHRoaXMgY2FzZSwgaXQgaG9sZHMgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUKQEAgLTksNyArOSw5IEBACiBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvcHRpb25hbCBgYE9QVElPTlNgYCBhcmd1bWVudCBvZiB0aGUKIDptb2R1bGU6YHF0NF93cmFwX2NwcCgpIDxGaW5kUXQ0PmAgbWFjcm8uCiAKLUJ5IGRlZmF1bHQgaXQgaXMgZW1wdHkuCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKzp2YXJpYWJsZTpgQ01BS0VfQVVUT01PQ19NT0NfT1BUSU9OU2AgdmFyaWFibGUgaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQKK2lzIGNyZWF0ZWQsIG9yIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCiAKIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtcXQoNylgIG1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBDTWFrZQogd2l0aCBRdC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfUEFUSF9QUkVGSVgucnN0CmluZGV4IGUyZWJiM2YuLjNlMzA1OWQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX1BBVEhfUFJFRklYLnJzdApAQCAtMjEsMTEgKzIxLDExIEBACiBSZXByb2R1Y2libGUgYnVpbGRzCiBeXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUZvciByZXByb2R1Y2libGUgYnVpbGRzIGlzIGlzIHJlY29tbWVuZGVkIHRvIGtlZXAgaGVhZGVycyB0aGF0IGFyZSBgYG1vY2BgCitGb3IgcmVwcm9kdWNpYmxlIGJ1aWxkcyBpdCBpcyByZWNvbW1lbmRlZCB0byBrZWVwIGhlYWRlcnMgdGhhdCBhcmUgYGBtb2NgYAogY29tcGlsZWQgaW4gb25lIG9mIHRoZSB0YXJnZXQKIDpjb21tYW5kOmBpbmNsdWRlIGRpcmVjdG9yaWVzIDx0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcz5gIGFuZCBzZXQKIDpwcm9wX3RndDpgQVVUT01PQ19QQVRIX1BSRUZJWGAgdG8gYGBPTmBgICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuICBUaGlzIGVuc3VyZXMKLXRoYXQKK3RoYXQ6CiAKIC0gYGBtb2NgYCBvdXRwdXQgZmlsZXMgYXJlIGlkZW50aWNhbCBvbiBkaWZmZXJlbnQgYnVpbGQgc2V0dXBzLAogLSBgYG1vY2BgIG91dHB1dCBmaWxlcyB3aWxsIGNvbXBpbGUgY29ycmVjdGx5IHdoZW4gdGhlIHNvdXJjZSBhbmQvb3IKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9SQ0MucnN0CmluZGV4IGNjYTNlNTguLjlhOThmNDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPUkNDLnJzdApAQCAtMzEsOSArMzEsMTAgQEAKIFRoZSBgYHJjY2BgIGV4ZWN1dGFibGUgd2lsbCBiZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBidXQgY2FuIGJlIGZvcmNlZCB0bwogYSBjZXJ0YWluIGJpbmFyeSBieSBzZXR0aW5nIHRoaXMgdGFyZ2V0IHByb3BlcnR5LgogCi06cHJvcF9zZjpgQVVUT1JDQ19PUFRJT05TYDoKLUFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIGBgcmNjYGAgY2FuIGJlIHNldCB2aWEgdGhpcyBgYC5xcmNgYAotc291cmNlIGZpbGUgcHJvcGVydHkuCis6cHJvcF90Z3Q6YEFVVE9SQ0NfT1BUSU9OU2A6CitBZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBgYHJjY2BgIGNhbiBiZSBzZXQgdmlhIHRoaXMgdGFyZ2V0Citwcm9wZXJ0eS4gIFRoZSBjb3JyZXNwb25kaW5nIDpwcm9wX3NmOmBBVVRPUkNDX09QVElPTlNgIHNvdXJjZSBmaWxlIHByb3BlcnR5CitjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9wdGlvbnMgdG8gYmUgYXBwbGllZCBvbmx5IHRvIGEgc3BlY2lmaWMgYGAucXJjYGAgZmlsZS4KIAogOnByb3Bfc2Y6YFNLSVBfQVVUT1JDQ2A6CiBgYC5xcmNgYCBmaWxlcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSA6cHJvcF90Z3Q6YEFVVE9SQ0NgIHByb2Nlc3NpbmcgYnkKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQ19PUFRJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT1JDQ19PUFRJT05TLnJzdAppbmRleCBkNmFkZTVhLi41MjYxYWZmIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9SQ0NfT1BUSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPUkNDX09QVElPTlMucnN0CkBAIC04LDExICs4LDkgQEAKIGkuZS4gaXQgaXMgZXF1aXZhbGVudCB0byB0aGUgb3B0aW9uYWwgYGBPUFRJT05TYGAgYXJndW1lbnQgb2YgdGhlCiA6bW9kdWxlOmBxdDRfYWRkX3Jlc291cmNlcygpIDxGaW5kUXQ0PmAgbWFjcm8uCiAKLUJ5IGRlZmF1bHQgaXQgaXMgZW1wdHkuCi0KIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9BVVRPUkNDX09QVElPTlNgIHZhcmlhYmxlIGlmIGl0IGlzIHNldCB3aGVuIGEgdGFyZ2V0IGlzCi1jcmVhdGVkLgorY3JlYXRlZCwgb3IgYW4gZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KIAogVGhlIG9wdGlvbnMgc2V0IG9uIHRoZSB0YXJnZXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgOnByb3Bfc2Y6YEFVVE9SQ0NfT1BUSU9OU2AKIHNldCBvbiB0aGUgYGAucXJjYGAgc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9VSUMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPVUlDLnJzdAppbmRleCA1Y2Y4NzU1Li5jZDI0ZjVlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9VSUMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT1VJQy5yc3QKQEAgLTUyLDggKzUyLDExIEBACiBUaGUgYGB1aWNgYCBleGVjdXRhYmxlIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgYnV0IGNhbiBiZSBmb3JjZWQgdG8KIGEgY2VydGFpbiBiaW5hcnkgdXNpbmcgdGhpcyB0YXJnZXQgcHJvcGVydHkuCiAKLTpwcm9wX3NmOmBBVVRPVUlDX09QVElPTlNgOiBBZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBgYHVpY2BgIGNhbgotYmUgc2V0IHZpYSB0aGlzIHNvdXJjZSBmaWxlIHByb3BlcnR5IG9uIGEgYGA8YmFzZV9uYW1lPi51aWBgIGZpbGUuCis6cHJvcF90Z3Q6YEFVVE9VSUNfT1BUSU9OU2A6CitBZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBgYHVpY2BgIGNhbiBiZSBzZXQgdmlhIHRoaXMgdGFyZ2V0Citwcm9wZXJ0eS4gIFRoZSBjb3JyZXNwb25kaW5nIDpwcm9wX3NmOmBBVVRPVUlDX09QVElPTlNgIHNvdXJjZSBmaWxlIHByb3BlcnR5CitjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9wdGlvbnMgdG8gYmUgYXBwbGllZCBvbmx5IHRvIGEgc3BlY2lmaWMKK2BgPGJhc2VfbmFtZT4udWlgYCBmaWxlLgogCiA6cHJvcF9zZjpgU0tJUF9BVVRPVUlDYDoKIFNvdXJjZSBmaWxlcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSA6cHJvcF90Z3Q6YEFVVE9VSUNgIHByb2Nlc3NpbmcgYnkgc2V0dGluZwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BVVRPVUlDX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPVUlDX09QVElPTlMucnN0CmluZGV4IDNmNjEzYjkuLjQyNWVhMWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19PUFRJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfT1BUSU9OUy5yc3QKQEAgLTgsMTEgKzgsOSBAQAogZXF1aXZhbGVudCB0byB0aGUgb3B0aW9uYWwgYGBPUFRJT05TYGAgYXJndW1lbnQgb2YgdGhlCiA6bW9kdWxlOmBxdDRfd3JhcF91aSgpIDxGaW5kUXQ0PmAgbWFjcm8uCiAKLUJ5IGRlZmF1bHQgaXQgaXMgZW1wdHkuCi0KIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9BVVRPVUlDX09QVElPTlNgIHZhcmlhYmxlIGlmIGl0IGlzIHNldCB3aGVuIGEgdGFyZ2V0IGlzCi1jcmVhdGVkLgorY3JlYXRlZCwgb3IgYW4gZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KIAogVGhlIG9wdGlvbnMgc2V0IG9uIHRoZSB0YXJnZXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgOnByb3Bfc2Y6YEFVVE9VSUNfT1BUSU9OU2AKIHNldCBvbiB0aGUgYGAudWlgYCBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9GRUFUVVJFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfRkVBVFVSRVMucnN0CmluZGV4IDE5NTIxNWUuLjQ2YWVjNGYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DT01QSUxFX0ZFQVRVUkVTLnJzdApAQCAtNCw3ICs0LDggQEAKIENvbXBpbGVyIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoaXMgdGFyZ2V0LgogCiBUaGUgbGlzdCBvZiBmZWF0dXJlcyBpbiB0aGlzIHByb3BlcnR5IGFyZSBhIHN1YnNldCBvZiB0aGUgZmVhdHVyZXMgbGlzdGVkCi1pbiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DWFhfQ09NUElMRV9GRUFUVVJFU2AgdmFyaWFibGUuCitpbiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DX0NPTVBJTEVfRkVBVFVSRVNgLCA6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFU2AsIGFuZAorOnZhcmlhYmxlOmBDTUFLRV9DWFhfQ09NUElMRV9GRUFUVVJFU2AgdmFyaWFibGVzLgogCiBDb250ZW50cyBvZiBgYENPTVBJTEVfRkVBVFVSRVNgYCBtYXkgdXNlICJnZW5lcmF0b3IgZXhwcmVzc2lvbnMiIHdpdGggdGhlCiBzeW50YXggYGAkPC4uLj5gYC4gIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpYCBtYW51YWwgZm9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NPTkZJR19QT1NURklYLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ09ORklHX1BPU1RGSVgucnN0CmluZGV4IDExYjUwYjkuLjVjMmZiZDcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ09ORklHX1BPU1RGSVgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ09ORklHX1BPU1RGSVgucnN0CkBAIC04LDMgKzgsNiBAQAogdGFyZ2V0cywgdGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCiBDTUFLRV88Q09ORklHPl9QT1NURklYIGlmIGl0IGlzIHNldCB3aGVuIGEgdGFyZ2V0IGlzIGNyZWF0ZWQuICBUaGlzCiBwcm9wZXJ0eSBpcyBpZ25vcmVkIG9uIHRoZSBNYWMgZm9yIEZyYW1ld29ya3MgYW5kIEFwcCBCdW5kbGVzLgorCitGb3IgbWFjT1Mgc2VlIGFsc28gdGhlIDpwcm9wX3RndDpgRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+YAordGFyZ2V0IHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS1WQUxVRVMudHh0IGIvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS1WQUxVRVMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZDcwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0NVREFfUlVOVElNRV9MSUJSQVJZLVZBTFVFUy50eHQKQEAgLTAsMCArMSw5IEBACitgYE5vbmVgYAorICBMaW5rIHdpdGggYGAtY3VkYXJ0PW5vbmVgYCBvciBlcXVpdmFsZW50IGZsYWcocykgdG8gdXNlIG5vIENVREEKKyAgcnVudGltZSBsaWJyYXJ5LgorYGBTaGFyZWRgYAorICBMaW5rIHdpdGggYGAtY3VkYXJ0PXNoYXJlZGBgIG9yIGVxdWl2YWxlbnQgZmxhZyhzKSB0byB1c2UgYQorICBkeW5hbWljYWxseS1saW5rZWQgQ1VEQSBydW50aW1lIGxpYnJhcnkuCitgYFN0YXRpY2BgCisgIExpbmsgd2l0aCBgYC1jdWRhcnQ9c3RhdGljYGAgb3IgZXF1aXZhbGVudCBmbGFnKHMpIHRvIHVzZSBhCisgIHN0YXRpY2FsbHktbGlua2VkIENVREEgcnVudGltZSBsaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfUlVOVElNRV9MSUJSQVJZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzgyNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKQEAgLTAsMCArMSwyMSBAQAorQ1VEQV9SVU5USU1FX0xJQlJBUlkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlbGVjdCB0aGUgQ1VEQSBydW50aW1lIGxpYnJhcnkgZm9yIHVzZSBieSBjb21waWxlcnMgdGFyZ2V0aW5nIHRoZSBDVURBIGxhbmd1YWdlLgorCitUaGUgYWxsb3dlZCBjYXNlIGluc2Vuc2l0aXZlIHZhbHVlcyBhcmU6CisKKy4uIGluY2x1ZGU6OiBDVURBX1JVTlRJTUVfTElCUkFSWS1WQUxVRVMudHh0CisKK0NvbnRlbnRzIG9mIGBgQ1VEQV9SVU5USU1FX0xJQlJBUllgYCBtYXkgdXNlCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgorCitJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzZXQgdGhlbiBDTWFrZSB1c2VzIHRoZSBkZWZhdWx0IHZhbHVlCitgYFN0YXRpY2BgIHRvIHNlbGVjdCB0aGUgQ1VEQSBydW50aW1lIGxpYnJhcnkuCisKKy4uIG5vdGU6OgorCisgIFRoaXMgcHJvcGVydHkgaGFzIGVmZmVjdCBvbmx5IHdoZW4gdGhlIGBgQ1VEQWBgIGxhbmd1YWdlIGlzIGVuYWJsZWQuIFRvCisgIGNvbnRyb2wgdGhlIENVREEgcnVudGltZSBsaW5raW5nIHdoZW4gb25seSB1c2luZyB0aGUgQ1VEQSBTREsgd2l0aCB0aGUKKyAgYGBDYGAgb3IgYGBDKytgYCBsYW5ndWFnZSB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlIDptb2R1bGU6YEZpbmRDVURBVG9vbGtpdGAKKyAgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBSRUNBVElPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0RFUFJFQ0FUSU9OLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWYyZTJlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9ERVBSRUNBVElPTi5yc3QKQEAgLTAsMCArMSw3IEBACitERVBSRUNBVElPTgorLS0tLS0tLS0tLS0KKworRGVwcmVjYXRpb24gbWVzc2FnZSBmcm9tIGltcG9ydGVkIHRhcmdldCdzIGRldmVsb3Blci4KKworYGBERVBSRUNBVElPTmBgIGlzIHRoZSBtZXNzYWdlIHJlZ2FyZGluZyBhIGRlcHJlY2F0aW9uIHN0YXR1cyB0byBiZSBkaXNwbGF5ZWQKK3RvIGRvd25zdHJlYW0gdXNlcnMgb2YgYSB0YXJnZXQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdCBiL0hlbHAvcHJvcF90Z3QvRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OThlYjYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdApAQCAtMCwwICsxLDEzIEBACitET1RORVRfVEFSR0VUX0ZSQU1FV09SSworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3BlY2lmeSB0aGUgLk5FVCB0YXJnZXQgZnJhbWV3b3JrLgorCitVc2VkIHRvIHNwZWNpZnkgdGhlIC5ORVQgdGFyZ2V0IGZyYW1ld29yayBmb3IgQysrL0NMSSBhbmQgQyMuICBGb3IKK2V4YW1wbGU6IGBgbmV0Y29yZWFwcDIuMWBgLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgZXZhbHVhdGVkIGZvciA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgCitWUyAyMDEwIGFuZCBhYm92ZS4KKworQ2FuIGJlIGluaXRpYWxpemVkIGZvciBhbGwgdGFyZ2V0cyB1c2luZyB0aGUgdmFyaWFibGUKKzp2YXJpYWJsZTpgQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktgLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKaW5kZXggYzEwMDMyNi4uYjMzZjRmYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CkBAIC0zLDExICszLDEzIEBACiAKIFNwZWNpZnkgdGhlIC5ORVQgdGFyZ2V0IGZyYW1ld29yayB2ZXJzaW9uLgogCi1Vc2VkIHRvIHNwZWNpZnkgdGhlIC5ORVQgdGFyZ2V0IGZyYW1ld29yayB2ZXJzaW9uIGZvciBDKysvQ0xJLiAgRm9yCi1leGFtcGxlOiBgYHY0LjVgYC4KK1VzZWQgdG8gc3BlY2lmeSB0aGUgLk5FVCB0YXJnZXQgZnJhbWV3b3JrIHZlcnNpb24gZm9yIEMrKy9DTEkgYW5kIEMjLgorRm9yIGV4YW1wbGU6IGBgdjQuNWBgLgogCiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgZXZhbHVhdGVkIGZvciA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgCiBWUyAyMDEwIGFuZCBhYm92ZS4KIAotQ2FuIGJlIGluaXRpYWxpemVkIGZvciBhbGwgdGFyZ2V0cyB1c2luZyB0aGUgdmFyaWFibGUKLTp2YXJpYWJsZTpgQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAuCitUbyBpbml0aWFsaXplIHRoaXMgdmFyaWFibGUgZm9yIGFsbCB0YXJnZXRzIHNldAorOnZhcmlhYmxlOmBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS2Agb3IKKzp2YXJpYWJsZTpgQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAuIElmIGJvdGggYXJlIHNldCwKK3RoZSBsYXR0ZXIgaXMgaWdub3JlZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRy5yc3QgYi9IZWxwL3Byb3BfdGd0L0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjBiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0CkBAIC0wLDAgKzEsMjUgQEAKK0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF88Q09ORklHPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bvc3RmaXggdG8gYXBwZW5kIHRvIHRoZSBmcmFtZXdvcmsgZmlsZSBuYW1lIGZvciBjb25maWd1cmF0aW9uIDxDT05GSUc+LAord2hlbiB1c2luZyBhIG11bHRpLWNvbmZpZyBnZW5lcmF0b3IgKGxpa2UgWGNvZGUgYW5kIE5pbmphIE11bHRpLUNvbmZpZykuCisKK1doZW4gYnVpbGRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDxDT05GSUc+IHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5CitpcyBhcHBlbmRlZCB0byB0aGUgZnJhbWV3b3JrIGZpbGUgbmFtZSBidWlsdCBvbiBkaXNrLgorCitGb3IgZXhhbXBsZSBnaXZlbiBhIGZyYW1ld29yayBjYWxsZWQgYGBteV9md2BgLCBhIHZhbHVlIG9mIGBgX2RlYnVnYGAKK2ZvciB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz5gIHByb3BlcnR5LCBhbmQKK2BgRGVidWc7UmVsZWFzZWBgIGluIGBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTYCwgdGhlIGZvbGxvd2luZyByZWxldmFudAorZmlsZXMgd291bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGBgRGVidWdgYCBhbmQgYGBSZWxlYXNlYGAgY29uZmlndXJhdGlvbnM6CisKKy0gUmVsZWFzZS9teV9mdy5mcmFtZXdvcmsvbXlfZncKKy0gUmVsZWFzZS9teV9mdy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9teV9mdworLSBEZWJ1Zy9teV9mdy5mcmFtZXdvcmsvbXlfZndfZGVidWcKKy0gRGVidWcvbXlfZncuZnJhbWV3b3JrL1ZlcnNpb25zL0EvbXlfZndfZGVidWcKKworRm9yIGZyYW1ld29yayB0YXJnZXRzLCB0aGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKK3ZhcmlhYmxlIDp2YXJpYWJsZTpgQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+YCBpZiBpdAoraXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMgY3JlYXRlZC4KKworVGhpcyBwcm9wZXJ0eSBpcyBpZ25vcmVkIGZvciBub24tZnJhbWV3b3JrIHRhcmdldHMsIGFuZCB3aGVuIHVzaW5nIHNpbmdsZQorY29uZmlnIGdlbmVyYXRvcnMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfTkFNRV9ESVIucnN0IGIvSGVscC9wcm9wX3RndC9JTlNUQUxMX05BTUVfRElSLnJzdAppbmRleCAyMjE2MDcyLi43NDc2MTVhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfTkFNRV9ESVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9OQU1FX0RJUi5yc3QKQEAgLTEwLDMgKzEwLDcgQEAKIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQogOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX05BTUVfRElSYCBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcwogY3JlYXRlZC4KKworVGhpcyBwcm9wZXJ0eSBzdXBwb3J0cyA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgorSW4gcGFydGljdWxhciwgdGhlIGBgJDxJTlNUQUxMX1BSRUZJWD5gYCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlCitkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGluc3RhbGwtdGltZSBwcmVmaXguCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QKaW5kZXggZDhiZTk1NC4uZDE2YTdhMSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRILnJzdApAQCAtMyw4ICszLDEyIEBACiAKIEFkZCBwYXRocyB0byBsaW5rZXIgc2VhcmNoIGFuZCBpbnN0YWxsZWQgcnBhdGguCiAKLWBgSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIYGAgaXMgYSBib29sZWFuIHRoYXQgaWYgc2V0IHRvIGBgVHJ1ZWBgIHdpbGwKLWFwcGVuZCBkaXJlY3RvcmllcyBpbiB0aGUgbGlua2VyIHNlYXJjaCBwYXRoIGFuZCBvdXRzaWRlIHRoZSBwcm9qZWN0Ci10byB0aGUgOnByb3BfdGd0OmBJTlNUQUxMX1JQQVRIYC4gIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mCi10aGUgdmFyaWFibGUgYGBDTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEhgYCBpZiBpdCBpcyBzZXQgd2hlbiBhCi10YXJnZXQgaXMgY3JlYXRlZC4KK2BgSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIYGAgaXMgYSBib29sZWFuIHRoYXQgaWYgc2V0IHRvIGBgVHJ1ZWBgCit3aWxsIGFwcGVuZCB0byB0aGUgcnVudGltZSBzZWFyY2ggcGF0aCAocnBhdGgpIG9mIGluc3RhbGxlZCBiaW5hcmllcworYW55IGRpcmVjdG9yaWVzIG91dHNpZGUgdGhlIHByb2plY3QgdGhhdCBhcmUgaW4gdGhlIGxpbmtlciBzZWFyY2ggcGF0aCBvcgorY29udGFpbiBsaW5rZWQgbGlicmFyeSBmaWxlcy4gIFRoZSBkaXJlY3RvcmllcyBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhlCit2YWx1ZSBvZiB0aGUgOnByb3BfdGd0OmBJTlNUQUxMX1JQQVRIYCB0YXJnZXQgcHJvcGVydHkuCisKK1RoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQorOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEhgIGlmIGl0IGlzIHNldCB3aGVuIGEgdGFyZ2V0IGlzCitjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QgYi9IZWxwL3Byb3BfdGd0L0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2UyOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QKQEAgLTAsMCArMSwyMSBAQAorSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05pbmphIG9ubHk6IFBvb2wgdXNlZCBmb3IgZ2VuZXJhdGluZyBwcmUtY29tcGlsZWQgaGVhZGVycy4KKworVGhlIG51bWJlciBvZiBwYXJhbGxlbCBjb21waWxlIHByb2Nlc3NlcyBjb3VsZCBiZSBsaW1pdGVkIGJ5IGRlZmluaW5nCitwb29scyB3aXRoIHRoZSBnbG9iYWwgOnByb3BfZ2JsOmBKT0JfUE9PTFNgCitwcm9wZXJ0eSBhbmQgdGhlbiBzcGVjaWZ5aW5nIGhlcmUgdGhlIHBvb2wgbmFtZS4KKworRm9yIGluc3RhbmNlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXRfcHJvcGVydHkoVEFSR0VUIG15ZXhlIFBST1BFUlRZIEpPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSIHR3b19qb2JzKQorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZgorOnZhcmlhYmxlOmBDTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUmAuCisKK0lmIG5laXRoZXIgOnByb3BfdGd0OmBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUmAgbm9yCis6dmFyaWFibGU6YENNQUtFX0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSYCBhcmUgc2V0IHRoZW4KKzpwcm9wX3RndDpgSk9CX1BPT0xfQ09NUElMRWAgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHRhc2suCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0xJTktfTElCUkFSSUVTX0lORElSRUNUSU9OLnR4dCBiL0hlbHAvcHJvcF90Z3QvTElOS19MSUJSQVJJRVNfSU5ESVJFQ1RJT04udHh0CmluZGV4IDFmZGI2YWQuLjQ3NmU0YTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTElOS19MSUJSQVJJRVNfSU5ESVJFQ1RJT04udHh0CisrKyBiL0hlbHAvcHJvcF90Z3QvTElOS19MSUJSQVJJRVNfSU5ESVJFQ1RJT04udHh0CkBAIC0xLDkgKzEsOSBAQAogLi4gbm90ZTo6CiAgIEEgY2FsbCB0byA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKDx0YXJnZXQ+IC4uLilgIG1heSB1cGRhdGUgdGhpcwogICBwcm9wZXJ0eSBvbiBgYDx0YXJnZXQ+YGAuICBJZiBgYDx0YXJnZXQ+YGAgd2FzIG5vdCBjcmVhdGVkIGluIHRoZSBzYW1lCi0gIGRpcmVjdG9yeSBhcyB0aGUgY2FsbCB0aGVuIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgIHdpbGwgYWRkIGEKLSAgc3VmZml4IG9mIHRoZSBmb3JtIGBgOjpAPGRpcmVjdG9yeS1pZD5gYCB0byBlYWNoIGVudHJ5LCB3aGVyZSB0aGUKLSAgYGA6OkBgYCBpcyBhIHNlcGFyYXRvciBhbmQgdGhlIGBgPGRpcmVjdG9yeS1pZD5gYCBpcyB1bnNwZWNpZmllZC4KKyAgZGlyZWN0b3J5IGFzIHRoZSBjYWxsIHRoZW4gOmNvbW1hbmQ6YHRhcmdldF9saW5rX2xpYnJhcmllc2Agd2lsbCB3cmFwIGVhY2gKKyAgZW50cnkgd2l0aCB0aGUgZm9ybSBgYDo6QChkaXJlY3RvcnktaWQpOy4uLjs6OkBgYCwgd2hlcmUgdGhlIGBgOjpAYGAgaXMKKyAgbGl0ZXJhbCBhbmQgdGhlIGBgKGRpcmVjdG9yeS1pZClgYCBpcyB1bnNwZWNpZmllZC4KICAgVGhpcyB0ZWxscyB0aGUgZ2VuZXJhdG9ycyB0aGF0IHRoZSBuYW1lZCBsaWJyYXJpZXMgbXVzdCBiZSBsb29rZWQgdXAgaW4KICAgdGhlIHNjb3BlIG9mIHRoZSBjYWxsZXIgcmF0aGVyIHRoYW4gaW4gdGhlIHNjb3BlIGluIHdoaWNoIHRoZQogICBgYDx0YXJnZXQ+YGAgd2FzIGNyZWF0ZWQuICBWYWxpZCBkaXJlY3RvcnkgaWRzIGFyZSBzdHJpcHBlZCBvbiBleHBvcnQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZlZGJhCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9NQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04ucnN0CkBAIC0wLDAgKzEsMTQgQEAKK01BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIG51bWJlciBpcyB0aGlzIHRhcmdldCBmb3IgTWFjaC1PIGJpbmFyaWVzLgorCitGb3Igc2hhcmVkIGxpYnJhcmllcyBvbiBNYWNoLU8gc3lzdGVtcyAoZS5nLiBtYWNPUywgaU9TKQordGhlIGBgTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OYGAgcHJvcGVydHkgY29ycmVzcG9uZCB0bworYGBjb21wYXRpYmlsaXR5IHZlcnNpb25gYCBhbmQgOnByb3BfdGd0OmBNQUNIT19DVVJSRU5UX1ZFUlNJT05gIHRvCitgYGN1cnJlbnQgdmVyc2lvbmBgLgorU2VlIHRoZSA6cHJvcF90Z3Q6YEZSQU1FV09SS2AgdGFyZ2V0IHByb3BlcnR5IGZvciBhbiBleGFtcGxlLgorCitWZXJzaW9ucyBvZiBNYWNoLU8gYmluYXJpZXMgbWF5IGJlIGNoZWNrZWQgd2l0aCB0aGUgYGBvdG9vbCAtTCA8YmluYXJ5PmBgCitjb21tYW5kLiAgSWYgYGBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gYCBpcyBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKK3RoZSA6cHJvcF90Z3Q6YFNPVkVSU0lPTmAgcHJvcGVydHkgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9NQUNIT19DVVJSRU5UX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9NQUNIT19DVVJSRU5UX1ZFUlNJT04ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMWQzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L01BQ0hPX0NVUlJFTlRfVkVSU0lPTi5yc3QKQEAgLTAsMCArMSwxMyBAQAorTUFDSE9fQ1VSUkVOVF9WRVJTSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdCBjdXJyZW50IHZlcnNpb24gbnVtYmVyIGlzIHRoaXMgdGFyZ2V0IGZvciBNYWNoLU8gYmluYXJpZXMuCisKK0ZvciBzaGFyZWQgbGlicmFyaWVzIG9uIE1hY2gtTyBzeXN0ZW1zIChlLmcuIG1hY09TLCBpT1MpCit0aGUgOnByb3BfdGd0OmBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gIHByb3BlcnR5IGNvcnJlc3BvbmQgdG8KK2BgY29tcGF0aWJpbGl0eSB2ZXJzaW9uYGAgYW5kIGBgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYGAgdG8gYGBjdXJyZW50IHZlcnNpb25gYC4KK1NlZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldCBwcm9wZXJ0eSBmb3IgYW4gZXhhbXBsZS4KKworVmVyc2lvbnMgb2YgTWFjaC1PIGJpbmFyaWVzIG1heSBiZSBjaGVja2VkIHdpdGggdGhlIGBgb3Rvb2wgLUwgPGJpbmFyeT5gYAorY29tbWFuZC4gIElmIGBgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYGAgaXMgbm90IHNldCwgdGhlIHZhbHVlIG9mCit0aGUgOnByb3BfdGd0OmBWRVJTSU9OYCBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1BDSF9XQVJOX0lOVkFMSUQucnN0IGIvSGVscC9wcm9wX3RndC9QQ0hfV0FSTl9JTlZBTElELnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmVjMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9QQ0hfV0FSTl9JTlZBTElELnJzdApAQCAtMCwwICsxLDggQEAKK1BDSF9XQVJOX0lOVkFMSUQKKy0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgcHJlY29tcGlsZSBoZWFkZXIgY29tcGlsZXIgb3B0aW9ucword2lsbCBjb250YWluIGEgY29tcGlsZXIgZmxhZyB3aWNoIHNob3VsZCB3YXJuIGFib3V0IGludmFsaWQgcHJlY29tcGlsZWQKK2hlYWRlcnMgZS5nLiBgYC1XaW52YWxpZC1wY2hgYCBmb3IgR05VIGNvbXBpbGVyLgorCitUaGUgZGVmYWx1dCB2YWx1ZSBpcyBgYE9OYGAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1NPVkVSU0lPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L1NPVkVSU0lPTi5yc3QKaW5kZXggYjA3YzE3Yy4uZDZmOGE5NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9TT1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvU09WRVJTSU9OLnJzdApAQCAtMjEsNyArMjEsOSBAQAogXl5eXl5eXl5eXl5eXl5eCiAKIEZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBvbiBNYWNoLU8gc3lzdGVtcyAoZS5nLiBtYWNPUywgaU9TKSwKLXRoZSBgYFNPVkVSU0lPTmBgIHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvICpjb21wYXRpYmlsaXR5IHZlcnNpb24qIGFuZAotOnByb3BfdGd0OmBWRVJTSU9OYCB0byAqY3VycmVudCB2ZXJzaW9uKi4gIFNlZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldAotcHJvcGVydHkgZm9yIGFuIGV4YW1wbGUuICBWZXJzaW9ucyBvZiBNYWNoLU8gYmluYXJpZXMgbWF5IGJlIGNoZWNrZWQgd2l0aCB0aGUKLWBgb3Rvb2wgLUwgPGJpbmFyeT5gYCBjb21tYW5kLgordGhlIGBgU09WRVJTSU9OYGAgcHJvcGVydHkgaXMgYSBmYWxsYmFjayB0bworOnByb3BfdGd0OmBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gIHByb3BlcnR5IHdoaWNoIGNvcnJlc3BvbmRzIHRvCisqY29tcGF0aWJsaXR5IHZlcnNpb24qIGFuZCA6cHJvcF90Z3Q6YFZFUlNJT05gIGlzIGEgZmFsbGJhY2sgdG8KKzpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCB3aGljaCBjb3JyZXNwb25kcyB0byAqY3VycmVudCB2ZXJzaW9uKi4KK1NlZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldCBwcm9wZXJ0eSBmb3IgYW4gZXhhbXBsZS4gIFZlcnNpb25zCitvZiBNYWNoLU8gYmluYXJpZXMgbWF5IGJlIGNoZWNrZWQgd2l0aCB0aGUgYGBvdG9vbCAtTCA8YmluYXJ5PmBgIGNvbW1hbmQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WRVJTSU9OLnJzdAppbmRleCBmZjNiMzAzLi5mNTkyZjRhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVkVSU0lPTi5yc3QKQEAgLTIzLDcgKzIzLDkgQEAKIF5eXl5eXl5eXl5eXl5eXgogCiBGb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgb24gTWFjaC1PIHN5c3RlbXMgKGUuZy4gbWFjT1MsIGlPUyksCi10aGUgOnByb3BfdGd0OmBTT1ZFUlNJT05gIHByb3BlcnR5IGNvcnJlc3BvbmQgdG8gKmNvbXBhdGliaWxpdHkgdmVyc2lvbiogYW5kCi1gYFZFUlNJT05gYCB0byAqY3VycmVudCB2ZXJzaW9uKi4gIFNlZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldAordGhlIGBgVkVSU0lPTmBgIHByb3BlcnR5IGlzIGEgZmFsbGJhY2sgdG8gOnByb3BfdGd0OmBNQUNIT19DVVJSRU5UX1ZFUlNJT05gCitwcm9wZXJ0eSB3aGljaCBjb3JyZXNwb25kcyB0byAqY3VycmVudCB2ZXJzaW9uKiBhbmQgOnByb3BfdGd0OmBTT1ZFUlNJT05gCitpcyBhIGZhbGxiYWNrIHRvIDpwcm9wX3RndDpgTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OYCB3aGljaCBjb3JyZXNwb25kcwordG8gKmNvbXBhdGlibGl0eSB2ZXJzaW9uKi4gIFNlZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldAogcHJvcGVydHkgZm9yIGFuIGV4YW1wbGUuICBWZXJzaW9ucyBvZiBNYWNoLU8gYmluYXJpZXMgbWF5IGJlIGNoZWNrZWQgd2l0aCB0aGUKIGBgb3Rvb2wgLUwgPGJpbmFyeT5gYCBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX0RPQ1VNRU5UQVRJT05fRklMRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjMzYxYwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX0RPQ1VNRU5UQVRJT05fRklMRS5yc3QKQEAgLTAsMCArMSw2IEBACitWU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Zpc3VhbCBTdHVkaW8gbWFuYWdlZCBwcm9qZWN0IC5ORVQgZG9jdW1lbnRhdGlvbiBvdXRwdXQKKworU2V0cyB0aGUgdGFyZ2V0IFhNTCBkb2N1bWVudGF0aW9uIGZpbGUgb3V0cHV0LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKaW5kZXggOWY1YTMxMy4uNmNiOGY4NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CkBAIC0zLDggKzMsOSBAQAogCiBTcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbi4KIAotVXNlZCB0byBzcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbiBmb3IgQysrL0NMSS4gIEZvcgorVXNlZCB0byBzcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbiBmb3IgQysrL0NMSS4gRm9yCiBleGFtcGxlLCAidjQuNSIuCiAKIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZQorOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2Agb3IKIDpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTA2ZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19TT0xVVElPTl9ERVBMT1kucnN0CkBAIC0wLDAgKzEsMjkgQEAKK1ZTX1NPTFVUSU9OX0RFUExPWQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHNob3VsZCBiZSBtYXJrZWQgZm9yIGRlcGxveW1lbnQgd2hlbiBub3QgdGFyZ2V0aW5nCitXaW5kb3dzIENFLCBXaW5kb3dzIFBob25lIG9yIGEgV2luZG93cyBTdG9yZSBhcHBsaWNhdGlvbi4KKworSWYgdGhlIHRhcmdldCBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZGVwbG95bWVudCwgdGhpcyBwcm9wZXJ0eSB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisKK0dlbmVyYXRvciBleHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLgorCitFeGFtcGxlIDEKK15eXl5eXl5eXgorCitUaGlzIHNob3dzIHNldHRpbmcgdGhlIHZhcmlhYmxlIGZvciB0aGUgdGFyZ2V0IGZvby4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgYWRkX2V4ZWN1dGFibGUoZm9vIFNIQVJFRCBmb28uY3BwKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIGZvbyBQUk9QRVJUWSBWU19TT0xVVElPTl9ERVBMT1kgT04pCisKK0V4YW1wbGUgMgorXl5eXl5eXl5eCisKK1RoaXMgc2hvd3Mgc2V0dGluZyB0aGUgdmFyaWFibGUgZm9yIHRoZSBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gb25seS4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgYWRkX2V4ZWN1dGFibGUoZm9vIFNIQVJFRCBmb28uY3BwKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIGZvbyBQUk9QRVJUWSBWU19TT0xVVElPTl9ERVBMT1kgIiQ8Tk9UOiQ8Q09ORklHOlJlbGVhc2U+PiIpCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1NPVVJDRV9TRVRUSU5HU190b29sLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfU09VUkNFX1NFVFRJTkdTX3Rvb2wucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDY4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX1NPVVJDRV9TRVRUSU5HU190b29sLnJzdApAQCAtMCwwICsxLDE5IEBACitWU19TT1VSQ0VfU0VUVElOR1NfPHRvb2w+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldCBhbnkgaXRlbSBtZXRhZGF0YSBvbiBhbGwgbm9uLWJ1aWx0IGZpbGVzIHRoYXQgdXNlIDx0b29sPi4KKworVGFrZXMgYSBsaXN0IG9mIGBgS2V5PVZhbHVlYGAgcGFpcnMuIFRlbGxzIHRoZSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcgordG8gc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFzIGl0ZW0gbWV0YWRhdGEgb24gYWxsIG5vbi1idWlsdCBmaWxlcwordGhhdCB1c2UgYGA8dG9vbD5gYC4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgbWFpbiBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlICJLZXk9VmFsdWUiICJLZXkyPVZhbHVlMiIpCisKK3dpbGwgc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFuZCBgYEtleTJgYCB0byBgYFZhbHVlMmBgIGZvciBhbGwKK25vbi1idWlsdCBmaWxlcyB0aGF0IHVzZSBgYEZYQ29tcGlsZWBgLgorCitHZW5lcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfR0VORVJBVEVfU0NIRU1FLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfR0VORVJBVEVfU0NIRU1FLnJzdAppbmRleCAwZTE4MmNmLi5jMzJiNGRlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9HRU5FUkFURV9TQ0hFTUUucnN0CkBAIC0zOCwzICszOCw0IEBACiAtIDpwcm9wX3RndDpgWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkdgCiAtIDpwcm9wX3RndDpgWENPREVfU0NIRU1FX0VOVklST05NRU5UYAogLSA6cHJvcF90Z3Q6YFhDT0RFX1NDSEVNRV9FWEVDVVRBQkxFYAorLSA6cHJvcF90Z3Q6YFhDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWWAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTM4ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0CkBAIC0wLDAgKzEsMTMgQEAKK1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NwZWNpZnkgdGhlIGBgV29ya2luZyBEaXJlY3RvcnlgYCBvZiB0aGUgKlJ1biogYW5kICpQcm9maWxlKgorYWN0aW9ucyBpbiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4gSW4gY2FzZSB0aGUgdmFsdWUgY29udGFpbnMKK2dlbmVyYXRvciBleHByZXNzaW9ucyB0aG9zZSBhcmUgZXZhbHVhdGVkLgorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKKzp2YXJpYWJsZTpgQ01BS0VfWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZYCBpZiBpdCBpcyBzZXQKK3doZW4gYSB0YXJnZXQgaXMgY3JlYXRlZC4KKworUGxlYXNlIHJlZmVyIHRvIHRoZSA6cHJvcF90Z3Q6YFhDT0RFX0dFTkVSQVRFX1NDSEVNRWAgdGFyZ2V0IHByb3BlcnR5Citkb2N1bWVudGF0aW9uIHRvIHNlZSBhbGwgWGNvZGUgc2NoZW1hIHJlbGF0ZWQgcHJvcGVydGllcy4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS8zLjE3LnJzdCBiL0hlbHAvcmVsZWFzZS8zLjE3LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmNmZGYwCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlLzMuMTcucnN0CkBAIC0wLDAgKzEsMzIxIEBACitDTWFrZSAzLjE3IFJlbGVhc2UgTm90ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKgorCisuLiBvbmx5OjogaHRtbAorCisgIC4uIGNvbnRlbnRzOjoKKworQ2hhbmdlcyBtYWRlIHNpbmNlIENNYWtlIDMuMTYgaW5jbHVkZSB0aGUgZm9sbG93aW5nLgorCitOZXcgRmVhdHVyZXMKKz09PT09PT09PT09PQorCitHZW5lcmF0b3JzCistLS0tLS0tLS0tCisKKyogOm1hbnVhbDpgY21ha2UoMSlgIGdhaW5lZCBhIDpnZW5lcmF0b3I6YE5pbmphIE11bHRpLUNvbmZpZ2AgZ2VuZXJhdG9yLAorICB3aGljaCBpcyBzaW1pbGFyIHRvIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yIGJ1dCBjYW4gYmUgdXNlZCB0byBidWlsZAorICBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBhdCBvbmNlLgorCisqIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgbGVhcm5lZCB0byBzdXBwb3J0IHBlci1jb25maWcgc291cmNlcy4KKyAgUHJldmlvdXNseSBvbmx5IDpyZWY6YENvbW1hbmQtTGluZSBCdWlsZCBUb29sIEdlbmVyYXRvcnNgIHN1cHBvcnRlZCB0aGVtLgorCisqIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIG5vdyBzdXBwb3J0CisgIHNwZWNpZnlpbmcgdGhlIGBgVkNUYXJnZXRzUGF0aGBgIHZhbHVlIGZvciBwcm9qZWN0IGZpbGVzIGluCisgIDp2YXJpYWJsZTpgQ01BS0VfR0VORVJBVE9SX1RPT0xTRVRgIHNldHRpbmcuCisKKyogOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgbGVhcm5lZCB0bworICBzdXBwb3J0IC5ORVQgU3RhbmRhcmQgYW5kIC5ORVQgQ29yZS4gIFNlZSB0aGUKKyAgOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgdGFyZ2V0IHByb3BlcnR5IGFuZAorICBhc3NvY2lhdGVkIDp2YXJpYWJsZTpgQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktgIHZhcmlhYmxlLgorCitMYW5ndWFnZXMKKy0tLS0tLS0tLQorCisqIFRoZSA6bWFudWFsOmBDb21waWxlIEZlYXR1cmVzIDxjbWFrZS1jb21waWxlLWZlYXR1cmVzKDcpPmAgZnVuY3Rpb25hbGl0eQorICBub3cgb2ZmZXJzIG1ldGEtZmVhdHVyZXMgZm9yIHRoZSBDVURBIGxhbmd1YWdlIHN0YW5kYXJkIGxldmVscworICAoZS5nLiBgYGN1ZGFfc3RkXzAzYGAsIGBgY3VkYV9zdGRfMTRgYCkuICBTZWUKKyAgOnByb3BfZ2JsOmBDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTYC4KKworQ29tcGlsZXJzCistLS0tLS0tLS0KKworKiBUaGUgSUJNIFhMIEZvcnRyYW4gY29tcGlsZXIgaXMgbm93IHN1cHBvcnRlZCBieSB0aGUgOmdlbmVyYXRvcjpgTmluamFgCisgIGdlbmVyYXRvci4KKworQ29tbWFuZC1MaW5lCistLS0tLS0tLS0tLS0KKworKiA6bWFudWFsOmBjbWFrZSgxKWAgZ2FpbmVkIGEgYGAtLWRlYnVnLWZpbmRgYCBjb21tYW5kLWxpbmUgb3B0aW9uIHRvCisgIGVuYWJsZSBhZGRpdGlvbmFsIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBvbiB3aGVyZSBgYGZpbmRfKmBgIGNvbW1hbmRzIHNlYXJjaC4KKworKiA6bWFudWFsOmBjbWFrZSgxKWAgZ2FpbmVkIGEgYGAtLXRyYWNlLWZvcm1hdGBgIGNvbW1hbmQtbGluZSBvcHRpb24gdGhhdAorICBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGBgLS10cmFjZWBgIG91dHB1dCBmb3JtYXQuIEN1cnJlbnRseSwgdGhlIG9sZAorICBodW1hbiByZWFkYWJsZSBhbmQgdGhlIG5ldyBKU09OIGZvcm1hdCBhcmUgc3VwcG9ydGVkLiBUaGUgbmV3IEpTT04gZm9ybWF0CisgIGlzIGVhc2llciB0byBwYXJzZSBhdXRvbWF0aWNhbGx5IHRoYW4gdGhlIGV4aXN0aW5nIGZvcm1hdC4KKworKiA6bWFudWFsOmBjbWFrZSgxKWAgZ2FpbmVkIGEgYGAtRSBybWBgIGNvbW1hbmQtbGluZSB0b29sIHRoYXQgY2FuIGJlCisgIHVzZWQgdG8gcmVtb3ZlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4gIFRoaXMgc3VwZXJzZWRlcyB0aGUgZXhpc3RpbmcKKyAgYGAtRSByZW1vdmVgYCBhbmQgYGAtRSByZW1vdmVfZGlyZWN0b3J5YGAgdG9vbHMgYW5kIGhhcyBiZXR0ZXIgc2VtYW50aWNzLgorCitDb21tYW5kcworLS0tLS0tLS0KKworKiBUaGUgOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgY29tbWFuZCBsZWFybmVkIHRvIGludGVycHJldCBwYXRocyBpbgorICBgYERFUEVORFNgYCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CisgIGJpbmFyeSBkaXJlY3RvcnkuCisKKyogVGhlIDpjb21tYW5kOmBmb3JlYWNoYCBjb21tYW5kIGxlYXJuZWQgYSBuZXcgYGBaSVBfTElTVFNgYCBvcHRpb24gdG8gaXRlcmF0ZQorICBvdmVyIG11bHRpcGxlIGxpc3RzIHNpbXVsdGFuZW91c2x5LgorCisqIFRoZSA6Y29tbWFuZDpgbG9hZF9jYWNoZShSRUFEX1dJVEhfUFJFRklYKWAgY29tbWFuZCBtb2RlIGlzIG5vdyBhbGxvd2VkCisgIHdoZW4gdXNpbmcgYGBjbWFrZSAtUGBgIHRvIDpyZWY6YFJ1biBhIFNjcmlwdCA8U2NyaXB0IFByb2Nlc3NpbmcgTW9kZT5gLgorCisqIFRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCBsZWFybmVkIHRvIG91dHB1dCBjb250ZXh0IHByb3ZpZGVkIGluCisgIHRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVGAgdmFyaWFibGUgZm9yIGxvZyBsZXZlbHMKKyAgYGBOT1RJQ0VgYCBhbmQgYmVsb3cuICBFbmFibGUgdGhpcyBvdXRwdXQgd2l0aCB0aGUgbmV3IGBgLS1sb2ctY29udGV4dGBgCisgIGNvbW1hbmQtbGluZSBvcHRpb24gb3IgOnZhcmlhYmxlOmBDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPV2AgdmFyaWFibGUuCisKKyogVGhlIDpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kIGdhaW5lZCBuZXcga2V5d29yZHMgYGBDSEVDS19TVEFSVGBgLAorICBgYENIRUNLX1BBU1NgYCBhbmQgYGBDSEVDS19GQUlMYGAuCisKKyogVGhlIDpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9vcHRpb25zYCBjb21tYW5kIG5vdyBob25vcnMgdGhlIGBgQkVGT1JFYGAKKyAga2V5d29yZCBtb3JlIGNvbnNpc3RlbnRseS4gIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDEwMWAuCisKK1ZhcmlhYmxlcworLS0tLS0tLS0tCisKKyogQSA6dmFyaWFibGU6YENNQUtFX0NURVNUX0FSR1VNRU5UU2AgdmFyaWFibGUgd2FzIGFkZGVkIHRvIHNwZWNpZnkgYSBsaXN0CisgIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgcGFzc2VkIHRvIENUZXN0IHdoZW4gcnVubmluZyB0aHJvdWdoIHRoZQorICBgYHRlc3RgYCAob3IgYGBSVU5fVEVTVFNgYCkgdGFyZ2V0IG9mIHRoZSBnZW5lcmF0ZWQgYnVpbGQgc3lzdGVtLgorCisqIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBub3cgZGVmaW5lZCBpbnNpZGUgYSA6Y29tbWFuZDpgZnVuY3Rpb25gOgorCisgIC0gOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYAorICAtIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAKKyAgLSA6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYAorICAtIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkVgCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllgIHZhcmlhYmxlIGFuZAorICA6cHJvcF90Z3Q6YENVREFfUlVOVElNRV9MSUJSQVJZYCB0YXJnZXQgcHJvcGVydHkgd2VyZSBpbnRyb2R1Y2VkIHRvCisgIHNlbGVjdCB0aGUgQ1VEQSBydW50aW1lIGxpYnJhcnkgdXNlZCB3aGVuIGxpbmtpbmcgdGFyZ2V0cyB0aGF0CisgIHVzZSBDVURBLgorCisqIFRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfREVCVUdfTU9ERWAgdmFyaWFibGUgd2FzIGludHJvZHVjZWQgdG8KKyAgcHJpbnQgZXh0cmEgYGBmaW5kXypgYCBjYWxsIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgY21ha2UgcnVuIHRvIHN0YW5kYXJkCisgIGVycm9yLiBPdXRwdXQgaXMgZGVzaWduZWQgZm9yIGh1bWFuIGNvbnN1bXB0aW9uIGFuZCBub3QgZm9yIHBhcnNpbmcuCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFNgIHZhcmlhYmxlIG5vdyB0YWtlcyBpdHMKKyAgaW5pdGlhbCB2YWx1ZSBmcm9tIHRoZSA6ZW52dmFyOmBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU2AgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaWYgbm8gZXhwbGljaXQgY29uZmlndXJhdGlvbiBpcyBnaXZlbi4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVJgIHZhcmlhYmxlLCBpZiBub3Qgc2V0CisgIGV4cGxpY2l0bHksIG5vdyB0YWtlcyBpdHMgaW5pdGlhbCB2YWx1ZSBmcm9tIHRoZQorICA6ZW52dmFyOmBDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVJgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisqIFRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfTE9HX0xFVkVMYCB2YXJpYWJsZSBjYW4gbm93IGJlIHVzZWQKKyAgdG8gcGVyc2lzdCBhIGxvZyBsZXZlbCBiZXR3ZWVuIENNYWtlIHJ1bnMsIHVubGlrZSB0aGUgYGAtLWxvZy1sZXZlbGBgCisgIGNvbW1hbmQgbGluZSBvcHRpb24gd2hpY2ggb25seSBhcHBsaWVzIHRvIHRoYXQgcGFydGljdWxhciBydW4uCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5UYCB2YXJpYWJsZSB3YXMgYWRkZWQKKyAgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBYQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlRgIHRhcmdldCBwcm9wZXJ0eS4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUllgIHZhcmlhYmxlIGFuZAorICBhc3NvY2lhdGVkIDpwcm9wX3RndDpgWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZYCB0YXJnZXQgcHJvcGVydHkKKyAgd2VyZSBhZGRlZCB0byB0ZWxsIHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIHRvIHNldCB0aGUgdmFsdWUgb2YKKyAgdGhlIGBgQ3VzdG9tIFdvcmtpbmcgRGlyZWN0b3J5YGAgc2NoZW1hIG9wdGlvbi4KKworUHJvcGVydGllcworLS0tLS0tLS0tLQorCisqIFRoZSA6cHJvcF90Z3Q6YEFJWF9FWFBPUlRfQUxMX1NZTUJPTFNgIHRhcmdldCBwcm9wZXJ0eSBhbmQgYXNzb2NpYXRlZAorICA6dmFyaWFibGU6YENNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFNgIHZhcmlhYmxlIHdlcmUgY3JlYXRlZCB0bworICBvcHRpb25hbGx5IGV4cGxpY2l0bHkgZGlzYWJsZSBhdXRvbWF0aWMgZXhwb3J0IG9mIHN5bWJvbHMgZnJvbSBzaGFyZWQKKyAgbGlicmFyaWVzIG9uIEFJWC4KKworKiBUaGUgOnByb3BfdGd0OmBERVBSRUNBVElPTmAgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZCB0byBtYXJrCisgIGEgdGFyZ2V0IGFzIGRlcHJlY2F0ZWQuICBJZiBhIGxpbmtlZCB0YXJnZXQgaXMgbWFya2VkIGFzCisgIGRlcHJlY2F0ZWQsIGEgd2FybmluZyB3aXRoIHRoZSBkZXByZWNhdGlvbiBtZXNzYWdlIGlzIGlzc3VlZAorICBhdCBnZW5lcmF0ZSB0aW1lLgorCisqIFRoZSA6cHJvcF90Z3Q6YElOU1RBTExfTkFNRV9ESVJgIHRhcmdldCBwcm9wZXJ0eSBub3cgc3VwcG9ydHMKKyAgOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KKyAgSW4gcGFydGljdWxhciwgdGhlIGBgJDxJTlNUQUxMX1BSRUZJWD5gYCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBjYW4KKyAgYmUgdXNlZCB0byBzZXQgdGhlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgaW5zdGFsbC10aW1lIHByZWZpeC4KKworKiBUYXJnZXQgcHJvcGVydGllcyA6cHJvcF90Z3Q6YE1BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTmAgYW5kCisgIDpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCB3ZXJlIGFkZGVkIHRvIHNldCB0aGUKKyAgYGBjb21wYXRpYmlsaXR5X3ZlcnNpb25gYCBhbmQgYGBjdXJlbnRfdmVyc2lvbmBgLCByZXNwZWN0aXZlbHksCisgIGZvciBNYWNoLU8gYmluYXJpZXMuICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIHRoZXNlIHByb3BlcnRpZXMKKyAgYXJlIG5vdCBzZXQsIDpwcm9wX3RndDpgU09WRVJTSU9OYCBhbmQgOnByb3BfdGd0OmBWRVJTSU9OYAorICBhcmUgdXNlZCByZXNwZWN0aXZlbHkgYXMgZmFsbGJhY2tzLgorCisqIFRoZSA6cHJvcF90Z3Q6YFZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEVgIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQKKyAgdG8gdGVsbCA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIHRvIGdlbmVyYXRlIGEgYGBEb2N1bWVudGF0aW9uRmlsZWBgCisgIHJlZmVyZW5jZSBpbiBgYC5jc3Byb2pgYCBmaWxlcy4KKworTW9kdWxlcworLS0tLS0tLQorCisqIFRoZSA6bW9kdWxlOmBFeHRlcm5hbFByb2plY3RgIG1vZHVsZSA6Y29tbWFuZDpgRXh0ZXJuYWxQcm9qZWN0X0FkZGAKKyAgY29tbWFuZCBnYWluZWQgYSBgYEdJVF9TVUJNT0RVTEVTX1JFQ1VSU0VgYCBvcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyCisgIEdpdCBzdWJtb2R1bGVzIHNob3VsZCBiZSB1cGRhdGVkIHJlY3Vyc2l2ZWx5LiAgVGhlIGRlZmF1bHQgaXMgb24gdG8KKyAgcHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IuCisKKyogVGhlIDptb2R1bGU6YEZpbmRDVURBVG9vbGtpdGAgbW9kdWxlIHdhcyBhZGRlZCB0byBmaW5kIHRoZQorICBDVURBIFRvb2xraXQgd2l0aG91dCBlbmFibGluZyBDVURBIGFzIGEgbGFuZ3VhZ2UuCisKKyogVGhlIDptb2R1bGU6YEZpbmRDVVJMYCBtb2R1bGUgbGVhcm5lZCB0byBmaW5kIENVUkwgdXNpbmcKKyAgdGhlIGBgQ1VSTENvbmZpZy5jbWFrZWBgIHBhY2thZ2UgY29uZmlndXJhdGlvbiBmaWxlIGdlbmVyYXRlZCBieQorICBDVVJMJ3MgY21ha2UgYnVpbGRzeXN0ZW0uICBJdCBhbHNvIGdhaW5lZCBhIG5ldyBgYENVUkxfTk9fQ1VSTF9DTUFLRWBgCisgIG9wdGlvbiB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuCisKKyogVGhlIDptb2R1bGU6YEZpbmRGTEVYYCBtb2R1bGUncyBgYEZMRVhfVEFSR0VUYGAgY29tbWFuZCBub3cgcnVucyBgYGZsZXhgYAorICB3aXRoIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYCBhcyB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDA5OGAuCisKKyogVGhlIDptb2R1bGU6YEZpbmRMaWJBcmNoaXZlYCBtb2R1bGUgbm93IHByb3ZpZGVzIGFuIGltcG9ydGVkIHRhcmdldAorICBmb3IgbGliYXJjaGl2ZS4KKworKiBUaGUgOm1vZHVsZTpgRmluZFB5dGhvbmAgbW9kdWxlIGhhcyBsZWFybmVkIHRvIGZpbmQgUHl0aG9uIGNvbXBvbmVudHMKKyAgaW4gYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnRzIG1hbmFnZWQgYnkgYGBjb25kYWBgLgorCisqIFRoZSA6bW9kdWxlOmBGaW5kUHl0aG9uM2AgYW5kIDptb2R1bGU6YEZpbmRQeXRob25gIG1vZHVsZXMgZ2FpbmVkLAorICByZXNwZWN0aXZlbHksIHZhcmlhYmxlIGBgUHl0aG9uM19TT0FCSWBgIGFuZCBgYFB5dGhvbl9TT0FCSWBgIGdpdmluZworICB0aGUgc3RhbmRhcmQgZXh0ZW5zaW9uIHN1ZmZpeCBmb3IgbW9kdWxlcy4gTW9yZW92ZXIsIGNvbW1hbmRzCisgIGBgUHl0aG9uM19hZGRfbGlicmFyeSgpYGAgYW5kIGBgUHl0aG9uX2FkZF9saWJyYXJ5KClgYCBnYWluZWQgdGhlIG9wdGlvbgorICBgYFdJVEhfU09BQklgYCB0byBwcmVmaXggdGhlIGxpYnJhcnkgc3VmZml4IHdpdGggdGhlIHZhbHVlIG9mIGBgU09BQklgYC4KKworKiBUaGUgOm1vZHVsZTpgRmluZExpYlhtbDJgIG1vZHVsZSBub3cgcHJvdmlkZXMgYW4gaW1wb3J0ZWQgdGFyZ2V0IGZvciB0aGUKKyAgYGB4bWxsaW50YGAgZXhlY3V0YWJsZS4KKworQXV0b2dlbgorLS0tLS0tLQorCisqIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AgbGVhcm5lZCB0byBwcm9jZXNzIGhlYWRlcnMKKyAgd2l0aCBhIGBgLmhoYGAgZXh0ZW5zaW9uLiAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTAwYC4KKworQ1Rlc3QKKy0tLS0tCisKKyogVGhlIDp2YXJpYWJsZTpgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFYCB2YXJpYWJsZSBpcyBub3cgc2V0IGZyb20gdGhlCisgIGNvbW1hbmQgbGluZSB3aGVuIDptYW51YWw6YGN0ZXN0KDEpYCBpcyBpbnZva2VkIHdpdGggYGAtQyA8Y2ZnPmBgLgorCisqIFRoZSA6bWFudWFsOmBjdGVzdCgxKWAgdG9vbCBnYWluZWQgc3VwcG9ydCBmb3IgRHIuIE1lbW9yeSB0byBydW4KKyAgbWVtY2hlY2sgcnVucy4KKworKiBUaGUgOm1hbnVhbDpgY3Rlc3QoMSlgIHRvb2wgZ2FpbmVkIGEgYGAtLW5vLXRlc3RzPTxbZXJyb3J8aWdub3JlXT5gYCBvcHRpb24KKyAgdG8gZXhwbGljaXRseSBzZXQgYW5kIHVuaWZ5IHRoZSBiZWhhdmlvciBiZXR3ZWVuIGRpcmVjdCBpbnZvY2F0aW9uIGFuZAorICBzY3JpcHQgbW9kZSBpZiBubyB0ZXN0cyB3ZXJlIGZvdW5kLgorCisqIFRoZSA6bWFudWFsOmBjdGVzdCgxKWAgdG9vbCBnYWluZWQgYSBgYC0tcmVwZWF0IDxtb2RlPjo8bj5gYCBvcHRpb24KKyAgdG8gc3BlY2lmeSBjb25kaXRpb25zIGluIHdoaWNoIHRvIHJlcGVhdCB0ZXN0cy4gIFRoaXMgZ2VuZXJhbGl6ZXMKKyAgdGhlIGV4aXN0aW5nIGBgLS1yZXBlYXQtdW50aWwtZmFpbCA8bj5gYCBvcHRpb24gdG8gYWRkIG1vZGVzIGZvcgorICBgYHVudGlsLXBhc3NgYCBhbmQgYGBhZnRlci10aW1lb3V0YGAuCisKKyogVGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kIGdhaW5lZCBhIGBgUkVQRUFUIDxtb2RlPjo8bj5gYCBvcHRpb24KKyAgdG8gc3BlY2lmeSBjb25kaXRpb25zIGluIHdoaWNoIHRvIHJlcGVhdCB0ZXN0cy4KKworQ1BhY2sKKy0tLS0tCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIERyYWdORHJvcCBHZW5lcmF0b3JgIGxlYXJuZWQgdG8gdXNlCisgIHRoZSA6dmFyaWFibGU6YENQQUNLX0RNR188Y29tcG9uZW50Pl9GSUxFX05BTUVgIHZhcmlhYmxlCisgIHRvIHNldCBhIGN1c3RvbSBmaWxlbmFtZSB3aGVuIHBhY2thZ2luZyBjb21wb25lbnRzIGludG8KKyAgdGhlaXIgb3duIERNR3MuCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIERyYWdORHJvcCBHZW5lcmF0b3JgIGxlYXJuZWQgdG8gaGFuZGxlCisgIFJURiBmb3JtYXR0ZWQgbGljZW5zZSBmaWxlcy4gIFdoZW4gOnZhcmlhYmxlOmBDUEFDS19ETUdfU0xBX0RJUmAKKyAgdmFyaWFibGUgaXMgc2V0LCBgYDxsYW5ndWFnZT4ubGljZW5zZS5ydGZgYCBpcyBjb25zaWRlcmVkLCBidXQKKyAgb25seSBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIHBsYWludGV4dCAoYGAudHh0YGApIGZpbGUgaXMgbm90IGZvdW5kCisgIGluIG9yZGVyIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBOU0lTIEdlbmVyYXRvcmAgZ2FpbmVkIGEgbmV3IHZhcmlhYmxlCisgIDp2YXJpYWJsZTpgQ1BBQ0tfTlNJU19NVUlfSEVBREVSSU1BR0VgIHRvIHNldCB0aGUgaGVhZGVyIGltYWdlLgorICBUbyBub3QgYnJlYWsgZXhpc3Rpbmcgc2V0dXBzLCBpdCBzdGlsbCBkZWZhdWx0cyB0bworICA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VfSUNPTmAgaWYgdGhlIG5ldyB2YXJpYWJsZSBpcyBub3Qgc2V0LgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBOU0lTIEdlbmVyYXRvcmAgbm93IHN1cHBvcnRzCisgIDp2YXJpYWJsZTpgQ1BBQ0tfTlNJU19VTklOU1RBTExfTkFNRWAuCisgIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVW5pbnN0YWxsIHByb2dyYW0uCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIE5TSVMgR2VuZXJhdG9yYCBub3cgc3VwcG9ydHMKKyAgOnZhcmlhYmxlOmBDUEFDS19OU0lTX1dFTENPTUVfVElUTEVgIGFuZAorICA6dmFyaWFibGU6YENQQUNLX05TSVNfV0VMQ09NRV9USVRMRV8zTElORVNgLgorICBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB3ZWxjb21lIHBhZ2UgdGl0bGUgYW5kIGRpc3BsYXkgaXQgaW4gMyBsaW5lcy4KKworKiBUaGUgOmNwYWNrX2dlbjpgQ1BhY2sgTlNJUyBHZW5lcmF0b3JgIG5vdyBzdXBwb3J0cworICA6dmFyaWFibGU6YENQQUNLX05TSVNfRklOSVNIX1RJVExFYCBhbmQKKyAgOnZhcmlhYmxlOmBDUEFDS19OU0lTX0ZJTklTSF9USVRMRV8zTElORVNgLgorICBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaW5pc2ggcGFnZSB0aXRsZSBhbmQgZGlzcGxheSBpdCBpbiAzIGxpbmVzLgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBwcm9kdWN0YnVpbGQgR2VuZXJhdG9yYCBnYWluZWQgc3VwcG9ydCBmb3IgYQorICA6dmFyaWFibGU6YENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EYCB2YXJpYWJsZSB0byBzcGVjaWZ5IGEgYmFja2dyb3VuZAorICBpbWFnZSBmb3IgdGhlIG1hY09TIGluc3RhbGxlci4KKworT3RoZXIKKy0tLS0tCisKKyogOm1hbnVhbDpgY2NtYWtlKDEpYCBub3cgZGlzcGxheXMgY2FjaGUgdmFsdWVzIHVzaW5nIGNvbG9ycworICBiYXNlZCBvbiB0aGUgZW50cnkgdHlwZSBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgY29sb3IuCisKKyogOm1hbnVhbDpgY2NtYWtlKDEpYCBub3cgZGlzcGxheXMgbWVzc2FnZXMgYW5kIGEgcHJvZ3Jlc3MgYmFyIGR1cmluZworICBjb25maWd1cmUgYW5kIGdlbmVyYXRlLiAgSXQgd2lsbCBrZWVwIHRoZSBvdXRwdXQgZGlzcGxheWVkIGlmIGFueQorICBlcnJvcnMgb3Igd2FybmluZ3Mgb2NjdXJyZWQuCisKK0RlcHJlY2F0ZWQgYW5kIFJlbW92ZWQgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBBbiBleHBsaWNpdCBkZXByZWNhdGlvbiBkaWFnbm9zdGljIHdhcyBhZGRlZCBmb3IgcG9saWN5IGBgQ01QMDA2OGBgCisgIGFuZCBwb2xpY3kgYGBDTVAwMDY5YGAgKGBgQ01QMDA2N2BgIGFuZCBiZWxvdyB3ZXJlIGFscmVhZHkgZGVwcmVjYXRlZCkuCisgIFRoZSA6bWFudWFsOmBjbWFrZS1wb2xpY2llcyg3KWAgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMKKyAgb2YgYWxsIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IHByb2plY3RzIHNob3VsZCBwb3J0IHRvIHRoZQorICBORVcgYmVoYXZpb3JzLgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBQYWNrYWdlTWFrZXIgR2VuZXJhdG9yYCBnZW5lcmF0b3IgaGFzIGJlZW4KKyAgZGVwcmVjYXRlZCBiZWNhdXNlIFhjb2RlIG5vIGxvbmdlciBkaXN0cmlidXRlcyB0aGUgUGFja2FnZU1ha2VyIHRvb2xzLgorICBUaGUgdW5kb2N1bWVudGVkIGBgT1NYWDExYGAgZ2VuZXJhdG9yIGhhcyBhbHNvIGJlZW4gZGVwcmVjYXRlZC4KKworKiBUaGUgOm1hbnVhbDpgY21ha2UoMSlgIGNvbW1hbmQtbGluZSBgYC1FIHJlbW92ZWBgIGFuZCBgYC1FIHJlbW92ZV9kaXJlY3RvcnlgYAorICB0b29scyBhcmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgbmV3IGBgLUUgcm1gYCB0b29sLiAgVGhlIG9sZGVyIHRvb2xzCisgIGFsd2F5cyByZXR1cm5lZCAwIGlmIGEgbmFtZWQgcGF0aCBkaWQgbm90IGV4aXN0IGV2ZW4gd2l0aG91dCB0aGUgZm9yY2UKKyAgb3B0aW9uIGFuZCBjYW5ub3QgYmUgZml4ZWQgd2l0aG91dCBicmVha2luZyBjb21wYXRpYmlsaXR5LCBhbmQgc28gaGF2ZQorICBiZWVuIHN1cGVyc2VkZWQuCisKK090aGVyIENoYW5nZXMKKz09PT09PT09PT09PT0KKworKiBUaGUgOm1hbnVhbDpgZmlsZSBBUEkgPGNtYWtlLWZpbGUtYXBpKDcpPmAgaW5kZXggZmlsZSBub3cgZW1pdHMgYQorICBgYG11bHRpQ29uZmlnYGAgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBnZW5lcmF0b3Igc3VwcG9ydHMKKyAgbXVsdGlwbGUgb3V0cHV0IGNvbmZpZ3VyYXRpb25zLgorCisqIFRhcmdldCBsaW5rIHByb3BlcnRpZXMgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19PUFRJT05TYCwKKyAgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFU2AgYW5kCisgIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfREVQRU5EU2AgYXJlIG5vdyB0cmFuc2l0aXZlIG92ZXIgcHJpdmF0ZQorICBkZXBlbmRlbmNpZXMgb24gc3RhdGljIGxpYnJhcmllcy4KKyAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMDk5YC4KKworKiBXaGVuIHVzaW5nIE1pbkdXIHRvb2xzLCB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCBubyBsb25nZXIKKyAgZmluZHMgYGAuZGxsYGAgZmlsZXMgYnkgZGVmYXVsdC4gIEluc3RlYWQsIGl0IGV4cGVjdHMgYGAuZGxsLmFgYCBpbXBvcnQKKyAgbGlicmFyaWVzIHRvIGJlIGF2YWlsYWJsZS4KKworKiBUaGUgOmdlbmVyYXRvcjpgTWluR1cgTWFrZWZpbGVzYCBnZW5lcmF0b3Igbm8gbG9uZ2VyIGlzc3VlcyBhbiBlcnJvciBpZgorICBgYHNoLmV4ZWBgIGlzIHByZXNlbnQgaW4gdGhlIGVudmlyb25tZW50J3MgYGBQQVRIYGAuCisKKyogVGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3Igbm93IHByZWZlcnMgdGhlIGZpcnN0IG5pbmphIGJ1aWxkCisgIHRvb2wgdG8gYXBwZWFyIGluIHRoZSBgYFBBVEhgYCBubyBtYXR0ZXIgd2hldGhlciBpdCBpcyBjYWxsZWQKKyAgYGBuaW5qYS1idWlsZGBgLCBgYG5pbmphYGAsIG9yIGBgc2FtdWBgLiAgUHJldmlvdXNseSB0aGUgZmlyc3QKKyAgb2YgdGhvc2UgbmFtZXMgdG8gYXBwZWFyIGFueXdoZXJlIGluIHRoZSBgYFBBVEhgYCB3b3VsZCBiZSBwcmVmZXJyZWQuCisKKyogV2l0aCBTRENDIHRoZSBgYHNkYXJgYCB0b29sIGlzIG5vdyBwcmVmZXJyZWQgb3ZlciBgYHNkY2NsaWJgYCBhcyBsaWJyYXJpYW4uCisgIFRoZSBsYXR0ZXIgd2FzIGRlcHJlY2F0ZWQgYnkgU0RDQyAzLjIuMCBhbmQgcmVtb3ZlZCBpbiBTRENDIDMuOC42LgorCisqIFdpdGggU0RDQyB0aGUgZGVmYXVsdCBmbGFncyBubyBsb25nZXIgaW5jbHVkZSBhbnkgdGFyZ2V0LXNwZWNpZmljIGZsYWdzLgorICBQcmV2aW91c2x5IHRoZSBkZWZhdWx0IGZsYWdzIHdlcmUgaGFyZC1jb2RlZCBmb3IgODA1MS4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV9WU19HTE9CQUxTYCB2YXJpYWJsZSB2YWx1ZSBub3cgYXBwbGllcyBkdXJpbmcKKyAgY29tcGlsZXIgaWRlbnRpZmljYXRpb24gYW5kIGluIHRhcmdldHMgY3JlYXRlZCBieSB0aGUKKyAgOmNvbW1hbmQ6YGFkZF9jdXN0b21fdGFyZ2V0YCBjb21tYW5kLgorCisqIFRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIG5vIGxvbmdlciBoYXJkLWNvZGVzIGBgLVdtb3N0YGAsCisgIGBgLVduby1mb3VyLWNoYXItY29uc3RhbnRzYGAsIGFuZCBgYC1Xbm8tdW5rbm93bi1wcmFnbWFzYGAgd2FybmluZyBmbGFncy4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvMC1zYW1wbGUtdG9waWMucnN0IGIvSGVscC9yZWxlYXNlL2Rldi8wLXNhbXBsZS10b3BpYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjYzAxZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvMC1zYW1wbGUtdG9waWMucnN0CkBAIC0wLDAgKzEsNyBAQAorMC1zYW1wbGUtdG9waWMKKy0tLS0tLS0tLS0tLS0tCisKKyogVGhpcyBpcyBhIHNhbXBsZSByZWxlYXNlIG5vdGUgZm9yIHRoZSBjaGFuZ2UgaW4gYSB0b3BpYy4KKyAgRGV2ZWxvcGVycyBzaG91bGQgYWRkIHNpbWlsYXIgbm90ZXMgZm9yIGVhY2ggdG9waWMgYnJhbmNoCisgIG1ha2luZyBhIG5vdGV3b3J0aHkgY2hhbmdlLiAgRWFjaCBkb2N1bWVudCBzaG91bGQgYmUgbmFtZWQKKyAgYW5kIHRpdGxlZCB0byBtYXRjaCB0aGUgdG9waWMgbmFtZSB0byBhdm9pZCBtZXJnZSBjb25mbGljdHMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L0NQYWNrUlBNLXRyYW5zLXNjcmlwdHMucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9DUGFja1JQTS10cmFucy1zY3JpcHRzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZjMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9DUGFja1JQTS10cmFucy1zY3JpcHRzLnJzdApAQCAtMCwwICsxLDcgQEAKK0NQYWNrUlBNLXRyYW5zLXNjcmlwdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOmNwYWNrX2dlbjpgQ1BhY2sgUlBNIEdlbmVyYXRvcmAgZ2FpbmVkCisgIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX1BSRV9UUkFOU19TQ1JJUFRfRklMRWAKKyAgOnZhcmlhYmxlOmBDUEFDS19SUE1fUE9TVF9UUkFOU19TQ1JJUFRfRklMRWAKKyAgdmFyaWFibGVzIHRvIHNwZWNpZnkgcHJlLSBhbmQgcG9zdC10cmFucyBzY3JpcHRzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9GaW5kUHl0aG9uLWFydGlmYWN0cy1pbnRlcmFjdGl2ZS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRQeXRob24tYXJ0aWZhY3RzLWludGVyYWN0aXZlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWE0YjNlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kUHl0aG9uLWFydGlmYWN0cy1pbnRlcmFjdGl2ZS5yc3QKQEAgLTAsMCArMSw2IEBACitGaW5kUHl0aG9uLWFydGlmYWN0cy1pbnRlcmFjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1vZHVsZTpgRmluZFB5dGhvbjNgLCA6bW9kdWxlOmBGaW5kUHl0aG9uMmAgYW5kIDptb2R1bGU6YEZpbmRQeXRob25gCisgIG1vZHVsZXMgZ2FpbmVkIHRoZSBwb3NzaWJpbGl0eSB0byBjcmVhdGUgYXJ0aWZhY3RzIGNhY2hlIHZhcmlhYmxlcyBmb3IKKyAgaW50ZXJhY3RpdmUgZWRpdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvRmluZFJ1YnktdmFyaWFibGUtY2FzZS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRSdWJ5LXZhcmlhYmxlLWNhc2UucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGEyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRSdWJ5LXZhcmlhYmxlLWNhc2UucnN0CkBAIC0wLDAgKzEsNyBAQAorRmluZFJ1YnktdmFyaWFibGUtY2FzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6bW9kdWxlOmBGaW5kUnVieWAgbW9kdWxlIGlucHV0IGFuZCBvdXRwdXQgdmFyaWFibGVzIHdlcmUgYWxsIHJlbmFtZWQKKyAgZnJvbSBgYFJVQllfYGAgdG8gYGBSdWJ5X2BgIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIGZpbmQgbW9kdWxlcy4KKyAgSW5wdXQgdmFyaWFibGVzIG9mIHRoZSBvbGQgY2FzZSB3aWxsIGJlIGhvbm9yZWQgaWYgcHJvdmlkZWQsIGFuZCBvdXRwdXQKKyAgdmFyaWFibGVzIG9mIHRoZSBvbGQgY2FzZSBhcmUgYWx3YXlzIHByb3ZpZGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9Hb29nbGVUZXN0LVhNTF9PVVRQVVRfRElSLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvR29vZ2xlVGVzdC1YTUxfT1VUUFVUX0RJUi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyOWU2MAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvR29vZ2xlVGVzdC1YTUxfT1VUUFVUX0RJUi5yc3QKQEAgLTAsMCArMSw2IEBACitHb29nbGVUZXN0LVhNTF9PVVRQVVRfRElSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YEdvb2dsZVRlc3RgIG1vZHVsZSBgYGd0ZXN0X2Rpc2NvdmVyX3Rlc3RgYCBjb21tYW5kCisgIGdhaW5lZCBhIG5ldyBvcHRpb25hbCBwYXJhbWV0ZXIgYGBYTUxfT1VUUFVUX0RJUmBgLiBXaGVuIHNldCB0aGUgSlVuaXQgWE1MCisgIHRlc3QgcmVzdWx0cyBhcmUgc3RvcmVkIGluIHRoYXQgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9jbWFrZS1ndWktZW52LXBsYXRmb3JtLWRlZmF1bHRzLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvY21ha2UtZ3VpLWVudi1wbGF0Zm9ybS1kZWZhdWx0cy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2MGVmMQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY21ha2UtZ3VpLWVudi1wbGF0Zm9ybS1kZWZhdWx0cy5yc3QKQEAgLTAsMCArMSw4IEBACitjbWFrZS1ndWktZW52LXBsYXRmb3JtLWRlZmF1bHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCBub3cgcG9wdWxhdGVzIGl0cyBnZW5lcmF0b3Igc2VsZWN0aW9uCisgIHdpZGdldCBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIDplbnZ2YXI6YENNQUtFX0dFTkVSQVRPUmAgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUuICBBZGRpdGlvbmFsbHksIGVudmlyb25tZW50IHZhcmlhYmxlcworICA6ZW52dmFyOmBDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk1gIGFuZCA6ZW52dmFyOmBDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVGAKKyAgYXJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlaXIgcmVzcGVjdGl2ZSB3aWRnZXQgZGVmYXVsdHMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2NtYWtlX2NvbW1hbmQtY29tbWFuZC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2NtYWtlX2NvbW1hbmQtY29tbWFuZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwMGFlMgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY21ha2VfY29tbWFuZC1jb21tYW5kLnJzdApAQCAtMCwwICsxLDYgQEAKK2NtYWtlX2NvbW1hbmQKKy0tLS0tLS0tLS0tLS0KKworKiBUaGUgOmNvbW1hbmQ6YGNtYWtlX2NvbW1hbmQoKWAgY29tbWFuZCB3YXMgYWRkZWQgZm9yIG1ldGEtb3BlcmF0aW9ucyBvbgorICBzY3JpcHRlZCBvciBidWlsdC1pbiBjb21tYW5kcywgc3RhcnRpbmcgd2l0aCBhIG1vZGUgdG8gYGBJTlZPS0VgYCBvdGhlcgorICBjb21tYW5kcywgYW5kIGBgRVZBTCBDT0RFYGAgdG8gaW5wbGFjZSBldmFsdWF0ZSBhIENNYWtlIHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvZGVwcmVjYXRlLXBvbGljeS1vbGQucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9kZXByZWNhdGUtcG9saWN5LW9sZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmZDIwNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvZGVwcmVjYXRlLXBvbGljeS1vbGQucnN0CkBAIC0wLDAgKzEsOCBAQAorZGVwcmVjYXRlLXBvbGljeS1vbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQW4gZXhwbGljaXQgZGVwcmVjYXRpb24gZGlhZ25vc3RpYyB3YXMgYWRkZWQgZm9yIHBvbGljeSBgYENNUDAwNzBgYAorICBhbmQgcG9saWN5IGBgQ01QMDA3MWBgIChgYENNUDAwNjlgYCBhbmQgYmVsb3cgd2VyZSBhbHJlYWR5IGRlcHJlY2F0ZWQpLgorICBUaGUgOm1hbnVhbDpgY21ha2UtcG9saWNpZXMoNylgIG1hbnVhbCBleHBsYWlucyB0aGF0IHRoZSBPTEQgYmVoYXZpb3JzCisgIG9mIGFsbCBwb2xpY2llcyBhcmUgZGVwcmVjYXRlZCBhbmQgdGhhdCBwcm9qZWN0cyBzaG91bGQgcG9ydCB0byB0aGUKKyAgTkVXIGJlaGF2aW9ycy4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvZXhlY3V0ZV9wcm9jZXNzLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvZXhlY3V0ZV9wcm9jZXNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU4MTNiCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9leGVjdXRlX3Byb2Nlc3MucnN0CkBAIC0wLDAgKzEsNSBAQAorZXhlY3V0ZV9wcm9jZXNzCistLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOmNvbW1hbmQ6YGV4ZWN1dGVfcHJvY2Vzc2AgY29tbWFuZCBnYWluZWQgdGhlIGBgRUNIT19PVVRQVVRfVkFSSUFCTEVgYAorICBhbmQgYGBFQ0hPX0VSUk9SX1ZBUklBQkxFYGAgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvZXhwb3J0LW11bHRpcGxlLWNhbGxzLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvZXhwb3J0LW11bHRpcGxlLWNhbGxzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM3MmNlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9leHBvcnQtbXVsdGlwbGUtY2FsbHMucnN0CkBAIC0wLDAgKzEsNSBAQAorZXhwb3J0LW11bHRpcGxlLWNhbGxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOmNvbW1hbmQ6YGV4cG9ydGAgY29tbWFuZCBub3cgcmFpc2UgYW4gZXJyb3IgaWYgdXNlZCBtdWx0aXBsZSB0aW1lcyB3aXRoCisgIHNhbWUgYGBGSUxFYGAgd2l0aG91dCBgYEFQUEVORGBgLiBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDNgLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9maWxlX2FyY2hpdmUucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9maWxlX2FyY2hpdmUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTUyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbGVfYXJjaGl2ZS5yc3QKQEAgLTAsMCArMSw3IEBACitmaWxlX2FyY2hpdmUKKy0tLS0tLS0tLS0tLQorCisqIFRoZSA6Y29tbWFuZDpgZmlsZWAgY29tbWFuZCBnYWluZWQgdGhlIGBgQVJDSElWRV97Q1JFQVRFfEVYVFJBQ1R9YGAgc3ViY29tbWFuZHMuCisKKyAgVGhlc2Ugc3ViY29tbWFuZHMgd2lsbCByZXBsaWNhdGUgdGhlIDptYW51YWw6YGNtYWtlKDEpYCBgYC1FIHRhcmBgIGZ1bmN0aW9uYWxpdHkgaW4KKyAgQ01ha2Ugc2NyaXB0aW5nIGNvZGUuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2ZpbGVfY29uZmlndXJlLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvZmlsZV9jb25maWd1cmUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTk5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbGVfY29uZmlndXJlLnJzdApAQCAtMCwwICsxLDYgQEAKK2ZpbGVfY29uZmlndXJlCistLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6Y29tbWFuZDpgZmlsZShDT05GSUdVUkUpYCBzdWJjb21tYW5kIHdhcyBjcmVhdGVkIGluIG9yZGVyIHJlcGxpY2F0ZSB0aGUKKyAgOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgcmVzb3J0aW5nIHRvIGEgcHJlLWV4aXN0aW5nCisgIGZpbGUgb24gZGlzayBhcyBpbnB1dC4gVGhlIGNvbnRlbnQgaXMgaW5zdGVhZCBwYXNzZWQgYXMgYSBzdHJpbmcuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2ZpbmRzd2lnLWNvbXBvbmVudHMucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9maW5kc3dpZy1jb21wb25lbnRzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU2OWJlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9maW5kc3dpZy1jb21wb25lbnRzLnJzdApAQCAtMCwwICsxLDUgQEAKK2ZpbmRzd2lnLWNvbXBvbmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1vZHVsZTpgRmluZFNXSUdgIG1vZHVsZSBub3cgYWNjZXB0cyB0YXJnZXQgbGFuZ3VhZ2VzIGFzICBgYENPTVBPTkVOVFNgYAorICBhbmQgYGBPUFRJT05BTF9DT01QT05FTlRTYGAgYXJndW1lbnRzIHRvIGBgZmluZF9wYWNrYWdlYGAuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2ZyYW1ld29yay1tdWx0aS1jb25maWctcG9zdGZpeC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2ZyYW1ld29yay1tdWx0aS1jb25maWctcG9zdGZpeC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjZjljZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvZnJhbWV3b3JrLW11bHRpLWNvbmZpZy1wb3N0Zml4LnJzdApAQCAtMCwwICsxLDcgQEAKK2ZyYW1ld29yay1tdWx0aS1jb25maWctcG9zdGZpeAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDpwcm9wX3RndDpgRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+YCB0YXJnZXQgcHJvcGVydHkKKyAgYW5kIGFzc29jaWF0ZWQgOnZhcmlhYmxlOmBDTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz5gCisgIHZhcmlhYmxlIHdlcmUgY3JlYXRlZCB0byBhbGxvdyBhZGRpbmcgYSBwb3N0Zml4IHRvIHRoZSBuYW1lIG9mIGEKKyAgZnJhbWV3b3JrIGZpbGUgbmFtZSB3aGVuIHVzaW5nIGEgbXVsdGktY29uZmlnIGdlbmVyYXRvci4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvZ2VuZXgtTElOS19MQU5HVUFHRS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2dlbmV4LUxJTktfTEFOR1VBR0UucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODk0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2dlbmV4LUxJTktfTEFOR1VBR0UucnN0CkBAIC0wLDAgKzEsNSBAQAorZ2VuZXgtTElOS19MQU5HVUFHRQorPT09PT09PT09PT09PT09PT09PQorCisqIFRoZSBgYCQ8TElOS19MQU5HVUFHRTouLi4+YGAgYW5kIGBgJDxMSU5LX0xBTkdfQU5EX0lEOi4uLj5gYAorICA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIHdlcmUgYWRkZWQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L3BjaC13YXJuLWludmFsaWQucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9wY2gtd2Fybi1pbnZhbGlkLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmEzZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9wY2gtd2Fybi1pbnZhbGlkLnJzdApAQCAtMCwwICsxLDYgQEAKK3BjaC13YXJuLWludmFsaWQKKy0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV9QQ0hfV0FSTl9JTlZBTElEYCB2YXJpYWJsZSB3YXMgYWRkZWQgdG8gaW5pdGlhbGl6ZSB0aGUKKyAgOnByb3BfdGd0OmBQQ0hfV0FSTl9JTlZBTElEYCB0YXJnZXQgcHJvcGVydHkgdG8gYWxsb3cgdGhlIHJlbW92YWwgb2YgdGhlCisgIHByZWNvbXBpbGVkIGhlYWRlciBpbnZhbGlkIHdhcm5pbmcuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L3Byb2ZpbGluZy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L3Byb2ZpbGluZy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxODBmMAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvcHJvZmlsaW5nLnJzdApAQCAtMCwwICsxLDkgQEAKK2NtYWtlLXByb2ZpbGluZworLS0tLS0tLS0tLS0tLS0tCisKKyogQWRkIHN1cHBvcnQgZm9yIHByb2ZpbGluZyBvZiBDTWFrZSBzY3JpcHRzIHRocm91Z2ggdGhlIHBhcmFtZXRlcnMKKyAgYGAtLXByb2ZpbGluZy1vdXRwdXRgYCBhbmQgYGAtLXByb2ZpbGluZy1mb3JtYXRgYC4gVGhlc2Ugb3B0aW9ucyBjYW4KKyAgYmUgdXNlZCBieSB1c2VycyB0byBnYWluIGluc2lnaHQgaW50byB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlaXIgc2NyaXB0cy4KKworICBUaGUgZmlyc3Qgc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQgaXMgYGBnb29nbGUtdHJhY2VgYCB3aGljaCBpcyBhIGZvcm1hdAorICBzdXBwb3J0ZWQgYnkgR29vZ2xlIENocm9tZSdzIGBgYWJvdXQ6dHJhY2luZ2BgIHRhYi4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvcmVxdWlyZWRfZmluZF9jb21tYW5kcy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L3JlcXVpcmVkX2ZpbmRfY29tbWFuZHMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMmJmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L3JlcXVpcmVkX2ZpbmRfY29tbWFuZHMucnN0CkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZWRfZmluZF9jb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCwgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAsIDpjb21tYW5kOmBmaW5kX3BhdGhgCisgIGFuZCA6Y29tbWFuZDpgZmluZF9maWxlYCBjb21tYW5kcyBnYWluZWQgYSBuZXcgYGBSRVFVSVJFRGBgIG9wdGlvbiB0aGF0IHdpbGwKKyAgc3RvcCBwcm9jZXNzaW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3RoaW5nIGlzIGZvdW5kLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9zdHJpbmctaGV4LnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvc3RyaW5nLWhleC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyMGFjYQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvc3RyaW5nLWhleC5yc3QKQEAgLTAsMCArMSw1IEBACitzdHJpbmctaGV4CistLS0tLS0tLS0tCisKKyogVGhlIDpjb21tYW5kOmBzdHJpbmdgIGNvbW1hbmQgbGVhcm5lZCBhIG5ldyBgYEhFWGBgIHN1Yi1jb21tYW5kLCB3aGljaAorICBjb252ZXJ0cyBzdHJpbmdzIGludG8gdGhlaXIgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L3VzZXN3aWctZm9ydHJhbi5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L3VzZXN3aWctZm9ydHJhbi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiYWY5NgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvdXNlc3dpZy1mb3J0cmFuLnJzdApAQCAtMCwwICsxLDcgQEAKK3VzZXN3aWctZm9ydHJhbgorLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YFVzZVNXSUdgIG1vZHVsZSBub3cgc3VwcG9ydHMgRm9ydHJhbiBhcyBhIHRhcmdldCBsYW5ndWFnZSBpZgorICB0aGUgYGBTV0lHX0VYRUNVVEFCTEVgYCBpcyBTV0lHLUZvcnRyYW5fLgorCisuLiBfYFNXSUctRm9ydHJhbmA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zd2lnLWZvcnRyYW4vc3dpZwpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi92cy1ub24tYnVpbHQtZmlsZS1pdGVtLW1ldGFkYXRhLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvdnMtbm9uLWJ1aWx0LWZpbGUtaXRlbS1tZXRhZGF0YS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYmFkMAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvdnMtbm9uLWJ1aWx0LWZpbGUtaXRlbS1tZXRhZGF0YS5yc3QKQEAgLTAsMCArMSwxMCBAQAordnMtbm9uLWJ1aWx0LWZpbGUtaXRlbS1tZXRhZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6cHJvcF90Z3Q6YFZTX1NPVVJDRV9TRVRUSU5HU188dG9vbD5gIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQKKyAgdG8gdGVsbCA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSB0byBhZGQKKyAgbWV0YWRhdGEgdG8gbm9uLWJ1aWx0IHNvdXJjZSBmaWxlcyB1c2luZyBgYDx0b29sPmBgLgorCisqIFRoZSA6cHJvcF9zZjpgVlNfU0VUVElOR1NgIHNvdXJjZSBmaWxlIHByb3BlcnR5IHdhcyBhZGRlZCB0byB0ZWxsCisgIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHRvIGFkZAorICBtZXRhZGF0YSB0byBhIG5vbi1idWlsdCBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvdnMtc2xuLWRlcGxveS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L3ZzLXNsbi1kZXBsb3kucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODNlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L3ZzLXNsbi1kZXBsb3kucnN0CkBAIC0wLDAgKzEsNiBAQAordnMtc2xuLWRlcGxveQorLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6cHJvcF90Z3Q6YFZTX1NPTFVUSU9OX0RFUExPWWAgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZCB0byB0ZWxsCisgIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHRvIG1hcmsgYQorICB0YXJnZXQgZm9yIGRlcGxveW1lbnQgZXZlbiB3aGVuIG5vdCBidWlsZGluZyBmb3IgV2luZG93cyBQaG9uZS9TdG9yZS9DRS4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9pbmRleC5yc3QgYi9IZWxwL3JlbGVhc2UvaW5kZXgucnN0CmluZGV4IDBjYzNmOTcuLjIyYjFhMDkgMTAwNjQ0Ci0tLSBhL0hlbHAvcmVsZWFzZS9pbmRleC5yc3QKKysrIGIvSGVscC9yZWxlYXNlL2luZGV4LnJzdApAQCAtNywxMiArNywxNSBAQAogICBUaGlzIGZpbGUgc2hvdWxkIGluY2x1ZGUgdGhlIGFkamFjZW50ICJkZXYudHh0IiBmaWxlCiAgIGluIGRldmVsb3BtZW50IHZlcnNpb25zIGJ1dCBub3QgaW4gcmVsZWFzZSB2ZXJzaW9ucy4KIAorLi4gaW5jbHVkZTo6IGRldi50eHQKKwogUmVsZWFzZXMKID09PT09PT09CiAKIC4uIHRvY3RyZWU6OgogICAgOm1heGRlcHRoOiAxCiAKKyAgIDMuMTcgPDMuMTc+CiAgICAzLjE2IDwzLjE2PgogICAgMy4xNSA8My4xNT4KICAgIDMuMTQgPDMuMTQ+CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjRkZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdApAQCAtMCwwICsxLDYgQEAKK0NNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBBSVhfRVhQT1JUX0FMTF9TWU1CT0xTYCB0YXJnZXQgcHJvcGVydHkuCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMgaXQgaXMKK2NyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NGR19JTlRESVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DRkdfSU5URElSLnJzdAppbmRleCBhZjgyZjc1Li44NDI2NTRlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NGR19JTlRESVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ0ZHX0lOVERJUi5yc3QKQEAgLTE2LDYgKzE2LDEzIEBACiAgICQoQ29uZmlndXJhdGlvbikgICAgID0gVmlzdWFsIFN0dWRpbyAxMAogICAkKENPTkZJR1VSQVRJT04pICAgICA9IFhjb2RlCiAgIC4gICAgICAgICAgICAgICAgICAgID0gTWFrZS1iYXNlZCB0b29scworICAuICAgICAgICAgICAgICAgICAgICA9IE5pbmphCisgICR7Q09ORklHVVJBVElPTn0gICAgID0gTmluamEgTXVsdGktQ29uZmlnCisKK05vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIG9ubHkgaGFzIGxpbWl0ZWQgc3VwcG9ydCBvbgorOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYC4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZQorYGAkPENPTkZJRz5gYCA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbiA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAKK2luc3RlYWQuCiAKIFNpbmNlIHRoZXNlIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGJ5IHRoZSBuYXRpdmUgYnVpbGQgc3lzdGVtLCB0aGlzCiB2YXJpYWJsZSBpcyBzdWl0YWJsZSBvbmx5IGZvciB1c2UgaW4gY29tbWFuZCBsaW5lcyB0aGF0IHdpbGwgYmUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NfQ09ORklHUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NST1NTX0NPTkZJR1MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTU3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NST1NTX0NPTkZJR1MucnN0CkBAIC0wLDAgKzEsMTUgQEAKK0NNQUtFX0NST1NTX0NPTkZJR1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3BlY2lmaWVzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mCitjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgZnJvbSBhbGwgYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGZpbGVzIGluIHRoZQorOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYCBnZW5lcmF0b3IuICBUaGlzIHZhcmlhYmxlIGFjdGl2YXRlcworY3Jvc3MtY29uZmlnIG1vZGUuIFRhcmdldHMgZnJvbSBlYWNoIGNvbmZpZyBzcGVjaWZpZWQgaW4gdGhpcyB2YXJpYWJsZSBjYW4gYmUKK2J1aWx0IGZyb20gYW55IGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBmaWxlLiBDdXN0b20gY29tbWFuZHMgd2lsbCB1c2UgdGhlCitjb25maWd1cmF0aW9uIG5hdGl2ZSB0byBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAuIElmIGl0IGlzIHNldCB0byBgYGFsbGBgLCBhbGwKK2NvbmZpZ3VyYXRpb25zIGZyb20gOnZhcmlhYmxlOmBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTYCBhcmUgY3Jvc3MtY29uZmlncy4gSWYKK2l0IGlzIG5vdCBzcGVjaWZpZWQsIG9yIGVtcHR5LCBlYWNoIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBmaWxlIHdpbGwgb25seQorY29udGFpbiBidWlsZCBydWxlcyBmb3IgaXRzIG93biBjb25maWd1cmF0aW9uLgorCitUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBtdXN0IGJlIGEgc3Vic2V0IG9mCis6dmFyaWFibGU6YENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVNgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVEVTVF9BUkdVTUVOVFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVEVTVF9BUkdVTUVOVFMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDBiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NURVNUX0FSR1VNRU5UUy5yc3QKQEAgLTAsMCArMSw2IEBACitDTUFLRV9DVEVTVF9BUkdVTUVOVFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXQgdGhpcyB0byBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZgorY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBwYXNzIHRvIDptYW51YWw6YGN0ZXN0KDEpYCB3aGVuIHJ1bm5pbmcgdGVzdHMKK3Rocm91Z2ggdGhlIGBgdGVzdGBgIChvciBgYFJVTl9URVNUU2BgKSB0YXJnZXQgb2YgdGhlIGdlbmVyYXRlZCBidWlsZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkMjY1MAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTLnJzdApAQCAtMCwwICsxLDExIEBACitDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIHRoZSBDVURBIGNvbXBpbGVyCisKK1RoZXNlIGZlYXR1cmVzIGFyZSBrbm93biB0byBiZSBhdmFpbGFibGUgZm9yIHVzZSB3aXRoIHRoZSBDVURBIGNvbXBpbGVyLiBUaGlzCitsaXN0IGlzIGEgc3Vic2V0IG9mIHRoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gdGhlCis6cHJvcF9nYmw6YENNQUtFX0NVREFfS05PV05fRkVBVFVSRVNgIGdsb2JhbCBwcm9wZXJ0eS4KKworU2VlIHRoZSA6bWFudWFsOmBjbWFrZS1jb21waWxlLWZlYXR1cmVzKDcpYCBtYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCitjb21waWxlIGZlYXR1cmVzIGFuZCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbXBpbGVycy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExYzFiOAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0CkBAIC0wLDAgKzEsMjQgQEAKK0NNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWxlY3QgdGhlIENVREEgcnVudGltZSBsaWJyYXJ5IGZvciB1c2UgYnkgY29tcGlsZXJzIHRhcmdldGluZyB0aGUgTVNWQyBBQkkuCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDVURBX1JVTlRJTUVfTElCUkFSWWAKK3Byb3BlcnR5IG9uIGFsbCB0YXJnZXRzIGFzIHRoZXkgYXJlIGNyZWF0ZWQuCisKK1RoZSBhbGxvd2VkIGNhc2UgaW5zZW5zaXRpdmUgdmFsdWVzIGFyZToKKworLi4gaW5jbHVkZTo6IC4uL3Byb3BfdGd0L0NVREFfUlVOVElNRV9MSUJSQVJZLVZBTFVFUy50eHQKKworQ29udGVudHMgb2YgYGBDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWWBgIG1heSB1c2UKKzptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCisKK0lmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCB0aGVuIHRoZSA6cHJvcF90Z3Q6YENVREFfUlVOVElNRV9MSUJSQVJZYCB0YXJnZXQKK3Byb3BlcnR5IHdpbGwgbm90IGJlIHNldCBhdXRvbWF0aWNhbGx5LiAgSWYgdGhhdCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHRoZW4KK0NNYWtlIHVzZXMgdGhlIGRlZmF1bHQgdmFsdWUgYGBTdGF0aWNgYCB0byBzZWxlY3QgdGhlIENVREEgcnVudGltZSBsaWJyYXJ5LgorCisuLiBub3RlOjoKKworICBUaGlzIHByb3BlcnR5IGhhcyBlZmZlY3Qgb25seSB3aGVuIHRoZSBgYENVREFgYCBsYW5ndWFnZSBpcyBlbmFibGVkLiBUbworICBjb250cm9sIHRoZSBDVURBIHJ1bnRpbWUgbGlua2luZyB3aGVuIG9ubHkgdXNpbmcgdGhlIENVREEgU0RLIHdpdGggdGhlCisgIGBgQ2BgIG9yIGBgQysrYGAgbGFuZ3VhZ2Ugd2UgcmVjb21tZW5kIHVzaW5nIHRoZSA6bW9kdWxlOmBGaW5kQ1VEQVRvb2xraXRgCisgIG1vZHVsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjkzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04ucnN0CkBAIC0wLDAgKzEsNiBAQAorQ01BS0VfQ1VSUkVOVF9GVU5DVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGV4ZWN1dGluZyBjb2RlIGluc2lkZSBhIDpjb21tYW5kOmBmdW5jdGlvbmAsIHRoaXMgdmFyaWFibGUKK2NvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgSXQgY2FuIGJlIHVzZWQgZm9yCitkaWFnbm9zdGljIG9yIGRlYnVnIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExOTM4MQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUi5yc3QKQEAgLTAsMCArMSwzMyBAQAorQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGV4ZWN1dGluZyBjb2RlIGluc2lkZSBhIDpjb21tYW5kOmBmdW5jdGlvbmAsIHRoaXMgdmFyaWFibGUKK2NvbnRhaW5zIHRoZSBmdWxsIGRpcmVjdG9yeSBvZiB0aGUgbGlzdGZpbGUgZGVmaW5pbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisKK0l0IGlzIHF1aXRlIGNvbW1vbiBwcmFjdGljZSBpbiBDTWFrZSB0aGF0IG1vZHVsZXMgdXNlIHNvbWUgYWRkaXRpb25hbCBmaWxlcworKGUuZy4sIHRlbXBsYXRlcyB0byByZW5kZXIpLiAgQW5kIHRoZSBjb2RlIHR5cGljYWxseSBkaWQgdGhlIGZvbGxvd2luZzoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisgICAgOmNhcHRpb246IEJhZAorCisgICAgc2V0KF9USElTX01PRFVMRV9CQVNFX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCisKKyAgICBmdW5jdGlvbihmb28pCisgICAgICBjb25maWd1cmVfZmlsZSgKKyAgICAgICAgIiR7X1RISVNfTU9EVUxFX0JBU0VfRElSfS9zb21lLnRlbXBsYXRlLmluIgorICAgICAgICBzb21lLm91dHB1dAorICAgICAgKQorICAgIGVuZGZ1bmN0aW9uKCkKKworVXNpbmcgdGhpcyB2YXJpYWJsZSBpbnNpZGUgYSBmdW5jdGlvbiBlbGltaW5hdGVzIHRoZSBuZWNjZXNzaXR5IG9mIHRoZQorYWRkaXRpb25hbCBvbmUgd2l0aCAiZ2xvYmFsIiBzY29wZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisgICAgOmNhcHRpb246IEdvb2QKKworICAgIGZ1bmN0aW9uKGZvbykKKyAgICAgIGNvbmZpZ3VyZV9maWxlKAorICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9zb21lLnRlbXBsYXRlLmluIgorICAgICAgICBzb21lLm91dHB1dAorICAgICAgKQorICAgIGVuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjODQ2YQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUucnN0CkBAIC0wLDAgKzEsNSBAQAorQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gZXhlY3V0aW5nIGNvZGUgaW5zaWRlIGEgOmNvbW1hbmQ6YGZ1bmN0aW9uYCwgdGhpcyB2YXJpYWJsZQorY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbGlzdGZpbGUgZGVjbGFyaW5nIGEgY3VycmVudCBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3Y2QxMwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUucnN0CkBAIC0wLDAgKzEsNSBAQAorQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gZXhlY3V0aW5nIGNvZGUgaW5zaWRlIGEgOmNvbW1hbmQ6YGZ1bmN0aW9uYCwgdGhpcyB2YXJpYWJsZQorY29udGFpbnMgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBsaXN0ZmlsZSB3aGVyZSBhIGN1cnJlbnQgZnVuY3Rpb24gaGFzIGRlZmluZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ZjgyZAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLnJzdApAQCAtMCwwICsxLDEyIEBACitDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGJ5IGRlZmF1bHQgaW4gYSBgYGJ1aWxkLm5pbmphYGAgZmlsZSBpbiB0aGUKKzpnZW5lcmF0b3I6YE5pbmphIE11bHRpLUNvbmZpZ2AgZ2VuZXJhdG9yLiBJZiB0aGlzIHZhcmlhYmxlIGlzIHNwZWNpZmllZCwKK2BgYnVpbGQubmluamFgYCB1c2VzIGJ1aWxkIHJ1bGVzIGZyb20gYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGJ5IGRlZmF1bHQuIEFsbAorY3VzdG9tIGNvbW1hbmRzIGFyZSBleGVjdXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdAorc3BlY2lmaWVkLCB0aGUgZmlyc3QgaXRlbSBmcm9tIDp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AgaXMgdXNlZAoraW5zdGVhZC4KKworVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgbXVzdCBiZSBvbmUgb2YgdGhlIGl0ZW1zIGZyb20KKzp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQ09ORklHUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQ09ORklHUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjNjQyYQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTLnJzdApAQCAtMCwwICsxLDE5IEBACitDTUFLRV9ERUZBVUxUX0NPTkZJR1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTcGVjaWZpZXMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YgY29uZmlndXJhdGlvbnMKK3RvIGJ1aWxkIGZvciBhIHRhcmdldCBpbiBgYGJ1aWxkLm5pbmphYGAgaWYgbm8gYGA6PENvbmZpZz5gYCBzdWZmaXggaXMgc3BlY2lmaWVkIGluCit0aGUgOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYCBnZW5lcmF0b3IuIElmIGl0IGlzIHNldCB0byBgYGFsbGBgLCBhbGwKK2NvbmZpZ3VyYXRpb25zIGZyb20gOnZhcmlhYmxlOmBDTUFLRV9DUk9TU19DT05GSUdTYCBhcmUgdXNlZC4gSWYgaXQgaXMgbm90CitzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIDp2YXJpYWJsZTpgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFYC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOnZhcmlhYmxlOmBDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEVgIHRvIGBgUmVsZWFzZWBgLAorYnV0IHNldCA6dmFyaWFibGU6YENNQUtFX0RFRkFVTFRfQ09ORklHU2AgdG8gYGBEZWJ1Z2BgIG9yIGBgYWxsYGAsIGFsbAorYGA8dGFyZ2V0PmBgIGFsaWFzZXMgaW4gYGBidWlsZC5uaW5qYWBgIHdpbGwgcmVzb2x2ZSB0byBgYDx0YXJnZXQ+OkRlYnVnYGAgb3IKK2BgPHRhcmdldD46YWxsYGAsIGJ1dCBjdXN0b20gY29tbWFuZHMgd2lsbCBzdGlsbCB1c2UgdGhlIGBgUmVsZWFzZWBgCitjb25maWd1cmF0aW9uLgorCitUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBtdXN0IGJlIGEgc3Vic2V0IG9mIDp2YXJpYWJsZTpgQ01BS0VfQ1JPU1NfQ09ORklHU2AKK29yIGJlIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFYC4gSXQgbXVzdCBub3QgYmUKK3NwZWNpZmllZCBpZiA6dmFyaWFibGU6YENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRWAgb3IKKzp2YXJpYWJsZTpgQ01BS0VfQ1JPU1NfQ09ORklHU2AgaXMgbm90IHVzZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdApAQCAtMCwwICsxLDE2IEBACitDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgcHJvcGVydHkJb2YKK3RhcmdldHMuCisKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZQorOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgcHJvcGVydHkgb24gYWxsIHRhcmdldHMuIFNlZSB0aGF0Cit0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKK1NldHRpbmcgYGBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS2BgIG1heSBiZSBuZWNlc3NhcnkKK3doZW4gd29ya2luZyB3aXRoIGBgQyNgYCBhbmQgbmV3ZXIgLk5FVCBmcmFtZXdvcmsgdmVyc2lvbnMgdG8KK2F2b2lkIHJlZmVyZW5jaW5nIGVycm9ycyB3aXRoIHRoZSBgYEFMTF9CVUlMRGBgIENNYWtlIHRhcmdldC4KKworVGhpcyB2YXJpYWJsZSBpcyBvbmx5IGV2YWx1YXRlZCBmb3IgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYAorVlMgMjAxMCBhbmQgYWJvdmUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAppbmRleCAxMjRmZWZlLi5jMmVlZjllIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKQEAgLTYsNyArNiwxMSBAQAogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUKIDpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAgcHJvcGVydHkgb24gYWxsCi10YXJnZXRzLiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCit0YXJnZXRzLiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIFdoZW4gc2V0LAorOnZhcmlhYmxlOmBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgdGFrZXMgcHJlY2VkbmVjZSBvdmVyIHRoaXMKK3ZhcmlhYmxlLiBTZWUgdGhhdCB2YXJpYWJsZSBvciB0aGUgYXNzb2NpYXRlZCB0YXJnZXQgcHJvcGVydHkKKzpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorCiAKIFNldHRpbmcgYGBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OYGAgbWF5IGJlIG5lY2Vzc2FyeQogd2hlbiB3b3JraW5nIHdpdGggYGBDI2BgIGFuZCBuZXdlciAuTkVUIGZyYW1ld29yayB2ZXJzaW9ucyB0bwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdAppbmRleCA0NTQ4YWJjLi42ZDI0NTBiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdApAQCAtMjUsNiArMjUsOSBAQAogICAgIH0KICAgXQogCitUaGlzIGlzIGluaXRpYWxpemVkIGJ5IHRoZSA6ZW52dmFyOmBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCiAuLiBub3RlOjoKICAgVGhpcyBvcHRpb24gaXMgaW1wbGVtZW50ZWQgb25seSBieSA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYAogICBhbmQgdGhlIDpnZW5lcmF0b3I6YE5pbmphYC4gIEl0IGlzIGlnbm9yZWQgb24gb3RoZXIgZ2VuZXJhdG9ycy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9ERUJVR19NT0RFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9ERUJVR19NT0RFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ZmZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUucnN0CkBAIC0wLDAgKzEsMjIgQEAKK0NNQUtFX0ZJTkRfREVCVUdfTU9ERQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ByaW50IGV4dHJhIGZpbmQgY2FsbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBzdGFuZGFyZAorZXJyb3I6CisqIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gCisqIDpjb21tYW5kOmBmaW5kX2xpYnJhcnlgCisqIDpjb21tYW5kOmBmaW5kX2ZpbGVgCisqIDpjb21tYW5kOmBmaW5kX3BhdGhgCisqIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgCisKK091dHB1dCBpcyBkZXNpZ25lZCBmb3IgaHVtYW4gY29uc3VtcHRpb24gYW5kIG5vdCBmb3IgcGFyc2luZy4KK0VuYWJsaW5nIHRoaXMgdmFyaWFibGUgaXMgZXF1aXZhbGVudCB0byB1c2luZyA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YCBgYC0tZGVidWctZmluZGBgCit3aXRoIHRoZSBhZGRlZCBhYmlsaXR5IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgZm9yIGEgc3Vic2V0IG9mIGZpbmQgY2FsbHMuCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChDTUFLRV9GSU5EX0RFQlVHX01PREUgVFJVRSkKKyAgZmluZF9wcm9ncmFtKC4uLikKKyAgc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSBGQUxTRSkKKworRGVmYXVsdCBpcyB1bnNldC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2NkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0CkBAIC0wLDAgKzEsOCBAQAorQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVmYXVsdCBmcmFtZXdvcmsgZmlsZW5hbWUgcG9zdGZpeCB1bmRlciBjb25maWd1cmF0aW9uIGBgPENPTkZJRz5gYCB3aGVuCit1c2luZyBhIG11bHRpLWNvbmZpZyBnZW5lcmF0b3IuCisKK1doZW4gYSBmcmFtZXdvcmsgdGFyZ2V0IGlzIGNyZWF0ZWQgaXRzIDpwcm9wX3RndDpgRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+YAordGFyZ2V0IHByb3BlcnR5IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaWYgaXQgaXMgc2V0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VULnJzdAppbmRleCAyMjI4MjRmLi41M2FkMmYzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VULnJzdApAQCAtNTgsMyArNTgsOCBAQAogICBTcGVjaWZ5IHRoZSB0b29sc2V0IHZlcnNpb24gdG8gdXNlLiAgU3VwcG9ydGVkIGJ5IFZTIDIwMTcKICAgYW5kIGFib3ZlIHdpdGggdGhlIHNwZWNpZmllZCB0b29sc2V0IGluc3RhbGxlZC4KICAgU2VlIHRoZSA6dmFyaWFibGU6YENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkVSU0lPTmAgdmFyaWFibGUuCisKK2BgVkNUYXJnZXRzUGF0aD08cGF0aD5gYAorICBTcGVjaWZ5IGFuIGFsdGVybmF0aXZlIGBgVkNUYXJnZXRzUGF0aGBgIHZhbHVlIGZvciBWaXN1YWwgU3R1ZGlvCisgIHByb2plY3QgZmlsZXMuICBUaGlzIGFsbG93cyB1c2Ugb2YgVlMgcGxhdGZvcm0gZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24KKyAgZmlsZXMgKGBgLnByb3BzYGAgYW5kIGBgLnRhcmdldHNgYCkgdGhhdCBhcmUgbm90IGluc3RhbGxlZCB3aXRoIFZTLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVQucnN0CmluZGV4IGU4Mjg2N2QuLjg1ODc3NDIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVC5yc3QKQEAgLTMsNyArMyw3IEBACiAKIFN3aXRjaCB0byBlbmFibGUgZ2VuZXJhdGlvbiBvZiBhIGdsb2JhbCBgYGF1dG9nZW5gYCB0YXJnZXQuCiAKLVdoZW4gOnZhcmlhYmxlOmBDTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRgIGlzIGVuYWJsZWQsIGEgY3VzdG9tIHRhcmdldAorV2hlbiA6dmFyaWFibGU6YENNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVGAgaXMgZW5hYmxlZCwgYSBjdXN0b20gdGFyZ2V0CiBgYGF1dG9nZW5gYCBpcyBnZW5lcmF0ZWQuICBUaGlzIHRhcmdldCBkZXBlbmRzIG9uIGFsbCA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZAogOnByb3BfdGd0OmBBVVRPVUlDYCBnZW5lcmF0ZWQgYGA8T1JJR0lOPl9hdXRvZ2VuYGAgdGFyZ2V0cyBpbiB0aGUgcHJvamVjdC4KIEJ5IGJ1aWxkaW5nIHRoZSBnbG9iYWwgYGBhdXRvZ2VuYGAgdGFyZ2V0LCBhbGwgOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSE9TVF9TWVNURU1fUFJPQ0VTU09SLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSE9TVF9TWVNURU1fUFJPQ0VTU09SLnJzdAppbmRleCBiYThhODUwLi41ZjA4NzI4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0hPU1RfU1lTVEVNX1BST0NFU1NPUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9IT1NUX1NZU1RFTV9QUk9DRVNTT1IucnN0CkBAIC0zLDYgKzMsMTMgQEAKIAogVGhlIG5hbWUgb2YgdGhlIENQVSBDTWFrZSBpcyBydW5uaW5nIG9uLgogCi1PbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBgYHVuYW1lYGAsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBvdXRwdXQgb2YKLWBgdW5hbWUgLXBgYC4gIE9uIFdpbmRvd3MgaXQgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLWBgUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRWBgLgorT24gV2luZG93cywgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorYGBQUk9DRVNTT1JfQVJDSElURUNUVVJFYGAuIE9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGBgdW5hbWVgYCwgdGhpcyB2YXJpYWJsZSBpcworc2V0IHRvIHRoZSBvdXRwdXQgb2Y6CisKKy0gYGB1bmFtZSAtbWBgIG9uIEdOVSwgTGludXgsIEN5Z3dpbiwgRGFyd2luLCBBbmRyb2lkLCBvcgorLSBgYGFyY2hgYCBvbiBPcGVuQlNELCBvcgorLSBvbiBvdGhlciBzeXN0ZW1zLAorCisgICogYGB1bmFtZSAtcGBgIGlmIGl0cyBleGl0IGNvZGUgaXMgbm9uemVybywgb3IKKyAgKiBgYHVuYW1lIC1tYGAgb3RoZXJ3aXNlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEgucnN0CmluZGV4IDc4MTQ4ZDUuLjM0NTI0ZDEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QKQEAgLTMsNyArMywxMSBAQAogCiBBZGQgcGF0aHMgdG8gbGlua2VyIHNlYXJjaCBhbmQgaW5zdGFsbGVkIHJwYXRoLgogCi1gYENNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSGBgIGlzIGEgYm9vbGVhbiB0aGF0IGlmIHNldCB0byBgYHRydWVgYAotd2lsbCBhcHBlbmQgZGlyZWN0b3JpZXMgaW4gdGhlIGxpbmtlciBzZWFyY2ggcGF0aCBhbmQgb3V0c2lkZSB0aGUKLXByb2plY3QgdG8gdGhlIDpwcm9wX3RndDpgSU5TVEFMTF9SUEFUSGAuICBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUKLXRhcmdldCBwcm9wZXJ0eSA6cHJvcF90Z3Q6YElOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSGAgZm9yIGFsbCB0YXJnZXRzLgorYGBDTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEhgYCBpcyBhIGJvb2xlYW4gdGhhdCBpZiBzZXQgdG8gYGBUcnVlYGAKK3dpbGwgYXBwZW5kIHRvIHRoZSBydW50aW1lIHNlYXJjaCBwYXRoIChycGF0aCkgb2YgaW5zdGFsbGVkIGJpbmFyaWVzCithbnkgZGlyZWN0b3JpZXMgb3V0c2lkZSB0aGUgcHJvamVjdCB0aGF0IGFyZSBpbiB0aGUgbGlua2VyIHNlYXJjaCBwYXRoIG9yCitjb250YWluIGxpbmtlZCBsaWJyYXJ5IGZpbGVzLiAgVGhlIGRpcmVjdG9yaWVzIGFyZSBhcHBlbmRlZCBhZnRlciB0aGUKK3ZhbHVlIG9mIHRoZSA6cHJvcF90Z3Q6YElOU1RBTExfUlBBVEhgIHRhcmdldCBwcm9wZXJ0eS4KKworVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHRhcmdldCBwcm9wZXJ0eQorOnByb3BfdGd0OmBJTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEhgIGZvciBhbGwgdGFyZ2V0cy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0NjdiMwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0CkBAIC0wLDAgKzEsNiBAQAorQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEpPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSYAorcHJvcGVydHkgb24gYWxsIHRoZSB0YXJnZXRzLiBTZWUgOnByb3BfdGd0OmBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUmAKK2ZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QKaW5kZXggNmI3ZTM1YS4uYzc2ZTJkMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0CkBAIC01LDMgKzUsNiBAQAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzCiBjcmVhdGVkLiAgVGhpcyBpcyBkb25lIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgLCBgYENYWGBgLCBgYEZvcnRyYW5gYCwKIGBgT0JKQ2BgLCBgYE9CSkNYWGBgLCBvciBgYENVREFgYC4KKworVGhpcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byB0aGUgOmVudnZhcjpgQ01BS0VfPExBTkc+X0NPTVBJTEVSX0xBVU5DSEVSYAorZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgaXQgaXMgc2V0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0NPTlRFWFQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0NPTlRFWFQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGNhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVC5yc3QKQEAgLTAsMCArMSw2MiBAQAorQ01BS0VfTUVTU0FHRV9DT05URVhUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBlbmFibGVkIGJ5IHRoZSA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YCBgYC0tbG9nLWNvbnRleHRgYCBjb21tYW5kIGxpbmUKK29wdGlvbiBvciB0aGUgOnZhcmlhYmxlOmBDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPV2AgdmFyaWFibGUsIHRoZQorOmNvbW1hbmQ6YG1lc3NhZ2VgIGNvbW1hbmQgY29udmVydHMgdGhlIGBgQ01BS0VfTUVTU0FHRV9DT05URVhUYGAgbGlzdCBpbnRvIGEKK2RvdC1zZXBhcmF0ZWQgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc3F1YXJlIGJyYWNrZXRzIGFuZCBwcmVwZW5kcyBpdCB0byBlYWNoIGxpbmUKK2ZvciBtZXNzYWdlcyBvZiBsb2cgbGV2ZWxzIGBgTk9USUNFYGAgYW5kIGJlbG93LgorCitGb3IgbG9nZ2luZyBjb250ZXh0cyB0byB3b3JrIGVmZmVjdGl2ZWx5LCBwcm9qZWN0cyBzaG91bGQgZ2VuZXJhbGx5CitgYEFQUEVORGBgIGFuZCBgYFBPUF9CQUNLYGAgYW4gaXRlbSB0byB0aGUgY3VycmVudCB2YWx1ZSBvZgorYGBDTUFLRV9NRVNTQUdFX0NPTlRFWFRgYCByYXRoZXIgdGhhbiByZXBsYWNlIGl0LgorUHJvamVjdHMgc2hvdWxkIG5vdCBhc3N1bWUgdGhlIG1lc3NhZ2UgY29udGV4dCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZQoraXMgZW1wdHksIGFzIHRoZXJlIGFyZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0CisoZS5nLiBoaWVyYXJjaGljYWwgcHJvamVjdHMpLgorCisuLiB3YXJuaW5nOjoKKworICBWYWxpZCBjb250ZXh0IG5hbWVzIGFyZSByZXN0cmljdGVkIHRvIGFueXRoaW5nIHRoYXQgY291bGQgYmUgdXNlZAorICBhcyBhIENNYWtlIHZhcmlhYmxlIG5hbWUuICBBbGwgbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUKKyAgb3IgdGhlIHN0cmluZyBgYGNtYWtlX2BgIGFyZSBhbHNvIHJlc2VydmVkIGZvciB1c2UgYnkgQ01ha2UgYW5kCisgIHNob3VsZCBub3QgYmUgdXNlZCBieSBwcm9qZWN0cy4KKworRXhhbXBsZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgZnVuY3Rpb24oYmFyKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfQ09OVEVYVCAiYmFyIikKKyAgICBtZXNzYWdlKFZFUkJPU0UgImJhciBWRVJCT1NFIG1lc3NhZ2UiKQorICBlbmRmdW5jdGlvbigpCisKKyAgZnVuY3Rpb24oYmF6KQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfQ09OVEVYVCAiYmF6IikKKyAgICBtZXNzYWdlKERFQlVHICJiYXogREVCVUcgbWVzc2FnZSIpCisgIGVuZGZ1bmN0aW9uKCkKKworICBmdW5jdGlvbihmb28pCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9DT05URVhUICJmb28iKQorICAgIGJhcigpCisgICAgbWVzc2FnZShUUkFDRSAiZm9vIFRSQUNFIG1lc3NhZ2UiKQorICAgIGJheigpCisgIGVuZGZ1bmN0aW9uKCkKKworICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0NPTlRFWFQgInRvcCIpCisKKyAgbWVzc2FnZShWRVJCT1NFICJCZWZvcmUgYGZvb2AiKQorICBmb28oKQorICBtZXNzYWdlKFZFUkJPU0UgIkFmdGVyIGBmb29gIikKKworICBsaXN0KFBPUF9CQUNLIENNQUtFX01FU1NBR0VfQ09OVEVYVCkKKworCitXaGljaCByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQorCisgIC0tIFt0b3BdIEJlZm9yZSBgZm9vYAorICAtLSBbdG9wLmZvby5iYXJdIGJhciBWRVJCT1NFIG1lc3NhZ2UKKyAgLS0gW3RvcC5mb29dIGZvbyBUUkFDRSBtZXNzYWdlCisgIC0tIFt0b3AuZm9vLmJhel0gYmF6IERFQlVHIG1lc3NhZ2UKKyAgLS0gW3RvcF0gQWZ0ZXIgYGZvb2AKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPVy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjMjE4ZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cucnN0CkBAIC0wLDAgKzEsMTUgQEAKK0NNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gdHJ1ZSBlbmFibGVzIHNob3dpbmcgYSBjb250ZXh0IHdpdGggZWFjaCBsaW5lCitsb2dnZWQgYnkgdGhlIDpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kIChzZWUgOnZhcmlhYmxlOmBDTUFLRV9NRVNTQUdFX0NPTlRFWFRgCitmb3IgaG93IHRoZSBjb250ZXh0IGl0c2VsZiBpcyBzcGVjaWZpZWQpLgorCitUaGlzIHZhcmlhYmxlIGlzIGFuIGFsdGVybmF0aXZlIHRvIHByb3ZpZGluZyB0aGUgYGAtLWxvZy1jb250ZXh0YGAgb3B0aW9uCitvbiB0aGUgOm1hbnVhbDpgY21ha2UgPGNtYWtlKDEpPmAgY29tbWFuZCBsaW5lLiAgV2hlcmVhcyB0aGUgY29tbWFuZCBsaW5lCitvcHRpb24gd2lsbCBhcHBseSBvbmx5IHRvIHRoYXQgb25lIENNYWtlIHJ1biwgc2V0dGluZworYGBDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPV2BgIHRvIHRydWUgYXMgYSBjYWNoZSB2YXJpYWJsZSB3aWxsIGVuc3VyZSB0aGF0CitzdWJzZXF1ZW50IENNYWtlIHJ1bnMgd2lsbCBjb250aW51ZSB0byBzaG93IHRoZSBtZXNzYWdlIGNvbnRleHQuCisKK1Byb2plY3RzIHNob3VsZCBub3Qgc2V0IGBgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgYC4gIEl0IGlzIGludGVuZGVkIGZvcgordXNlcnMgc28gdGhhdCB0aGV5IG1heSBjb250cm9sIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgY29udGV4dCB3aXRoIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfTE9HX0xFVkVMLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRjZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QKQEAgLTAsMCArMSwxNSBAQAorQ01BS0VfTUVTU0FHRV9MT0dfTEVWRUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gc2V0LCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbG9nZ2luZyBsZXZlbCB1c2VkIGJ5IHRoZQorOmNvbW1hbmQ6YG1lc3NhZ2VgIGNvbW1hbmQuICBWYWxpZCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciB0aGUKK2BgLS1sb2ctbGV2ZWxgYCBjb21tYW5kIGxpbmUgb3B0aW9uIG9mIHRoZSA6bWFudWFsOmBjbWFrZSgxKWAgcHJvZ3JhbS4KK0lmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGFuZCB0aGUgYGAtLWxvZy1sZXZlbGBgIGNvbW1hbmQgbGluZSBvcHRpb24gaXMKK2dpdmVuLCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgorCitUaGUgbWFpbiBhZHZhbnRhZ2UgdG8gdXNpbmcgdGhpcyB2YXJpYWJsZSBpcyB0byBtYWtlIGEgbG9nIGxldmVsIHBlcnNpc3QKK2JldHdlZW4gQ01ha2UgcnVucy4gIFNldHRpbmcgaXQgYXMgYSBjYWNoZSB2YXJpYWJsZSB3aWxsIGVuc3VyZSB0aGF0CitzdWJzZXF1ZW50IENNYWtlIHJ1bnMgd2lsbCBjb250aW51ZSB0byB1c2UgdGhlIGNob3NlbiBsb2cgbGV2ZWwuCisKK1Byb2plY3RzIHNob3VsZCBub3Qgc2V0IHRoaXMgdmFyaWFibGUsIGl0IGlzIGludGVuZGVkIGZvciB1c2VycyBzbyB0aGF0Cit0aGV5IG1heSBjb250cm9sIHRoZSBsb2cgbGV2ZWwgYWNjb3JkaW5nIHRvIHRoZWlyIG93biBuZWVkcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUENIX1dBUk5fSU5WQUxJRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BDSF9XQVJOX0lOVkFMSUQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTJhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BDSF9XQVJOX0lOVkFMSUQucnN0CkBAIC0wLDAgKzEsNSBAQAorQ01BS0VfUENIX1dBUk5fSU5WQUxJRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBQQ0hfV0FSTl9JTlZBTElEYAorcHJvcGVydHkgb2YgdGFyZ2V0cyB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BPTElDWV9XQVJOSU5HX0NNUE5OTk4ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QT0xJQ1lfV0FSTklOR19DTVBOTk5OLnJzdAppbmRleCBmYzUyZTdiLi5kZTcxZDBlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BPTElDWV9XQVJOSU5HX0NNUE5OTk4ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUE9MSUNZX1dBUk5JTkdfQ01QTk5OTi5yc3QKQEAgLTIzLDYgKzIzLDggQEAKICAgcG9saWN5IDpwb2xpY3k6YENNUDAwODJgLgogKiBgYENNQUtFX1BPTElDWV9XQVJOSU5HX0NNUDAwODlgYCBjb250cm9scyB0aGUgd2FybmluZyBmb3IKICAgcG9saWN5IDpwb2xpY3k6YENNUDAwODlgLgorKiBgYENNQUtFX1BPTElDWV9XQVJOSU5HX0NNUDAxMDJgYCBjb250cm9scyB0aGUgd2FybmluZyBmb3IKKyAgcG9saWN5IDpwb2xpY3k6YENNUDAxMDJgLgogCiBUaGlzIHZhcmlhYmxlIHNob3VsZCBub3QgYmUgc2V0IGJ5IGEgcHJvamVjdCBpbiBDTWFrZSBjb2RlLiAgUHJvamVjdAogZGV2ZWxvcGVycyBydW5uaW5nIENNYWtlIG1heSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGVpciBjYWNoZSB0bwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREUucnN0CmluZGV4IDk2NWM5NGUuLjU4MzUyNjQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERS5yc3QKQEAgLTUsNSArNSw2IEBACiA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCBjYWxscy4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGluamVjdGluZyBjdXN0b20gY29kZQogaW50byBwcm9qZWN0IGJ1aWxkcyB3aXRob3V0IG1vZGlmeWluZyB0aGVpciBzb3VyY2UuCiAKLVNlZSBhbHNvIHRoZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfPFBST0pFQ1QtTkFNRT5fSU5DTFVERWAgYW5kCitTZWUgYWxzbyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVgLAorOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFYCBhbmQKIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRS5yc3QKaW5kZXggNzBiMTVlNi4uMjgwYzE0YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUucnN0CkBAIC01LDUgKzUsNiBAQAogOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQgY2FsbHMuICBUaGlzIGlzIGludGVuZGVkIGZvciBpbmplY3RpbmcgY3VzdG9tIGNvZGUKIGludG8gcHJvamVjdCBidWlsZHMgd2l0aG91dCBtb2RpZnlpbmcgdGhlaXIgc291cmNlLgogCi1TZWUgYWxzbyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVgIGFuZAorU2VlIGFsc28gdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFYCwKKzp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFX0JFRk9SRWAgYW5kCiA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9QUk9KRUNULU5BTUVfSU5DTFVERS5yc3QKaW5kZXggMzQ4NWMzOC4uNzQyNDdmMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfUFJPSkVDVC1OQU1FX0lOQ0xVREUucnN0CkBAIC02LDUgKzYsNiBAQAogbmFtZS4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGluamVjdGluZyBjdXN0b20gY29kZSBpbnRvIHByb2plY3QgYnVpbGRzIHdpdGhvdXQKIG1vZGlmeWluZyB0aGVpciBzb3VyY2UuCiAKLVNlZSBhbHNvIHRoZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERWAgYW5kCitTZWUgYWxzbyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFYCwKKzp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFYCBhbmQKIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfUFJPSkVDVC1OQU1FX0lOQ0xVREVfQkVGT1JFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjE0MzJkCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QKQEAgLTAsMCArMSwxMSBAQAorQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFX0JFRk9SRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIENNYWtlIGxhbmd1YWdlIGZpbGUgb3IgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGFzIHRoZSBmaXJzdCBzdGVwIG9mIGFueQorOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQgY2FsbHMgdGhhdCBzcGVjaWZ5IGBgPFBST0pFQ1QtTkFNRT5gYCBhcyB0aGUgcHJvamVjdAorbmFtZS4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGluamVjdGluZyBjdXN0b20gY29kZSBpbnRvIHByb2plY3QgYnVpbGRzIHdpdGhvdXQKK21vZGlmeWluZyB0aGVpciBzb3VyY2UuCisKK1NlZSBhbHNvIHRoZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfPFBST0pFQ1QtTkFNRT5fSU5DTFVERWAsCis6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERWAgYW5kCis6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkVgIHZhcmlhYmxlcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lOUlRfQllfREVGQVVMVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQucnN0CmluZGV4IDJiYThmZTIuLjJlZWE0MjQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lOUlRfQllfREVGQVVMVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxULnJzdApAQCAtMSw4ICsxLDE4IEBACiBDTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRlbGwgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgdGhhdCB0aGUKLXRhcmdldCBwbGF0Zm9ybSBjb21waWxlcyBhcyBXaW5SVCBieSBkZWZhdWx0IChjb21waWxlcyB3aXRoIGBgL1pXYGApLgorSW5mb3JtIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHRoYXQgdGhlCit0YXJnZXQgcGxhdGZvcm0gZW5hYmxlcyBXaW5SVCBjb21waWxhdGlvbiBieSBkZWZhdWx0IGFuZCBpdCBuZWVkcyB0bworYmUgZXhwbGljaXRseSBkaXNhYmxlZCBpZiBgYC9aV2BgIG9yIDpwcm9wX3RndDpgVlNfV0lOUlRfQ09NUE9ORU5UYCBpcworb21pdHRlZCAoYXMgb3Bwb3NlZCB0byBlbmFibGluZyBpdCB3aGVuIGVpdGhlciBvZiB0aG9zZSBvcHRpb25zIGlzCitwcmVzZW50KQorCitUaGlzIG1ha2VzIGNtYWtlIGNvbmZpZ3VyYXRpb24gY29uc2lzdGVudCBpbiB0ZXJtcyBvZiBXaW5SVCBhbW9uZworcGxhdGZvcm1zIC0gaWYgeW91IGRpZCBub3QgZW5hYmxlIHRoZSBXaW5SVCBjb21waWxhdGlvbiBleHBsaWNpdGx5LCBpdAord2lsbCBiZSBkaXNhYmxlZCAoYnkgZWl0aGVyIG5vdCBlbmFibGluZyBpdCBvciBleHBsaWNpdGx5IGRpc2FibGluZyBpdCkKKworTm90ZTogV2luUlQgY29tcGlsYXRpb24gaXMgYWx3YXlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgZm9yIEMgbGFuZ3VhZ2UKK3NvdXJjZSBmaWxlcywgZXZlbiBpZiBpdCBpcyBleHBsaWNsdHkgZW5hYmxlZCBmb3IgYSBwcm9qZWN0CiAKIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEKIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUgPENNQUtFX1RPT0xDSEFJTl9GSUxFPmAgZm9yIHN1Y2ggcGxhdGZvcm1zLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzI2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVC5yc3QKQEAgLTAsMCArMSwxNSBAQAorQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3BlY2lmeSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIEFyZ3VtZW50cworc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KKworSWYgc2V0IHRvIGEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHZhbHVlcyBvZiB0aGUgZm9ybQorYGBNWVZBUj12YWx1ZWBgIHRob3NlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZQorc2NoZW1lLgorCitUaGlzIHZhcmlhYmxlIGluaXRpYWxpemVzIHRoZSA6cHJvcF90Z3Q6YFhDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVGAKK3Byb3BlcnR5IG9uIGFsbCB0YXJnZXRzLgorCitQbGVhc2UgcmVmZXIgdG8gdGhlIDpwcm9wX3RndDpgWENPREVfR0VORVJBVEVfU0NIRU1FYCB0YXJnZXQgcHJvcGVydHkKK2RvY3VtZW50YXRpb24gdG8gc2VlIGFsbCBYY29kZSBzY2hlbWEgcmVsYXRlZCBwcm9wZXJ0aWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjc5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKQEAgLTAsMCArMSwxMiBAQAorQ01BS0VfWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3BlY2lmeSB0aGUgYGBXb3JraW5nIERpcmVjdG9yeWBgIG9mIHRoZSAqUnVuKiBhbmQgKlByb2ZpbGUqCithY3Rpb25zIGluIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgorCitUaGlzIHZhcmlhYmxlIGluaXRpYWxpemVzIHRoZQorOnByb3BfdGd0OmBYQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUllgCitwcm9wZXJ0eSBvbiBhbGwgdGFyZ2V0cy4KKworUGxlYXNlIHJlZmVyIHRvIHRoZSA6cHJvcF90Z3Q6YFhDT0RFX0dFTkVSQVRFX1NDSEVNRWAgdGFyZ2V0IHByb3BlcnR5Citkb2N1bWVudGF0aW9uIHRvIHNlZSBhbGwgWGNvZGUgc2NoZW1hIHJlbGF0ZWQgcHJvcGVydGllcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFLnJzdAppbmRleCBjOTA1NDgwLi45ZTI3N2ZhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkFUSU9OX1RZUEUucnN0CkBAIC0zLDMgKzMsNiBAQAogCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYERlZmF1bHRDVGVzdENvbmZpZ3VyYXRpb25UeXBlYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCisKK0lmIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgaXMgc2V0IHZpYSBgYC1DIDxjZmc+YGAgZnJvbSB0aGUgY29tbWFuZCBsaW5lCit0aGVuIHRoaXMgdmFyaWFibGUgaXMgcG9wdWxhdGVkIGFjY29yZGluZ2x5LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19UWVBFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfVFlQRS5yc3QKaW5kZXggYjhiNGMzMC4uNGU3ZDVjMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19UWVBFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1RZUEUucnN0CkBAIC0zLDYgKzMsNiBAQAogCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYE1lbW9yeUNoZWNrVHlwZWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgotVmFsaWQgdmFsdWVzIGFyZSBgYFZhbGdyaW5kYGAsIGBgUHVyaWZ5YGAsIGBgQm91bmRzQ2hlY2tlcmBgLCBhbmQKK1ZhbGlkIHZhbHVlcyBhcmUgYGBWYWxncmluZGBgLCBgYFB1cmlmeWBgLCBgYEJvdW5kc0NoZWNrZXJgYCwgYGBEck1lbW9yeWBgIGFuZAogYGBUaHJlYWRTYW5pdGl6ZXJgYCwgYGBBZGRyZXNzU2FuaXRpemVyYGAsIGBgTGVha1Nhbml0aXplcmBgLCBgYE1lbW9yeVNhbml0aXplcmBgLCBhbmQKIGBgVW5kZWZpbmVkQmVoYXZpb3JTYW5pdGl6ZXJgYC4KZGlmZiAtLWdpdCBhL01vZHVsZXMvQW5kcm9pZFRlc3RVdGlsaXRpZXMuY21ha2UgYi9Nb2R1bGVzL0FuZHJvaWRUZXN0VXRpbGl0aWVzLmNtYWtlCmluZGV4IGUzMzNjZGIuLjk1ZTJlZjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQW5kcm9pZFRlc3RVdGlsaXRpZXMuY21ha2UKKysrIGIvTW9kdWxlcy9BbmRyb2lkVGVzdFV0aWxpdGllcy5jbWFrZQpAQCAtNzYsOCArNzYsNiBAQAogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRXh0ZXJuYWxEYXRhLmNtYWtlKQogCi1zZXQoX0FuZHJvaWRUZXN0VXRpbGl0aWVzX1NFTEZfRElSICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9IikKLQogIyBUaGUgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBzZXQgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMsCiAjIGZpbGVzLCBhbmQgbGlicmFyaWVzIHRoYXQgbmVlZCB0byBiZSBpbnN0YWxsZWQgcHJpb3IgdG8gdGVzdGluZy4KIGZ1bmN0aW9uKGFuZHJvaWRfYWRkX3Rlc3RfZGF0YSB0ZXN0X25hbWUpCkBAIC0xNTksNiArMTU3LDYgQEAKICAgICAgICItRGFyZ19maWxlcz0ke3Byb2Nlc3NlZF9GSUxFU30iCiAgICAgICAiLURhcmdfbGlicz0ke0FTVF9MSUJTfSIKICAgICAgICItRGFyZ19zcmNfZGlyPSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIKLSAgICAgIC1QICR7X0FuZHJvaWRUZXN0VXRpbGl0aWVzX1NFTEZfRElSfS9BbmRyb2lkVGVzdFV0aWxpdGllcy9QdXNoVG9BbmRyb2lkRGV2aWNlLmNtYWtlKQorICAgICAgLVAgJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9BbmRyb2lkVGVzdFV0aWxpdGllcy9QdXNoVG9BbmRyb2lkRGV2aWNlLmNtYWtlKQogICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQVNNQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlQVNNQ29tcGlsZXIuY21ha2UuaW4KaW5kZXggYjhlMDlmZS4uODU4YzA1MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTUNvbXBpbGVyLmNtYWtlLmluCisrKyBiL01vZHVsZXMvQ01ha2VBU01Db21waWxlci5jbWFrZS5pbgpAQCAtMTAsNiArMTAsNyBAQAogc2V0KENNQUtFX0FTTUBBU01fRElBTEVDVEBfQ09NUElMRVJfSUQgIkBfQ01BS0VfQVNNX0NPTVBJTEVSX0lEQCIpCiBzZXQoQ01BS0VfQVNNQEFTTV9ESUFMRUNUQF9DT01QSUxFUl9WRVJTSU9OICJAX0NNQUtFX0FTTV9DT01QSUxFUl9WRVJTSU9OQCIpCiBzZXQoQ01BS0VfQVNNQEFTTV9ESUFMRUNUQF9DT01QSUxFUl9FTlZfVkFSICJAX0NNQUtFX0FTTV9DT01QSUxFUl9FTlZfVkFSQCIpCitAX1NFVF9DTUFLRV9BU01fQ09NUElMRVJfSURfVkVORE9SX01BVENIQAogQF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JREAKIAogc2V0KENNQUtFX0FTTUBBU01fRElBTEVDVEBfSUdOT1JFX0VYVEVOU0lPTlMgaDtIO287TztvYmo7T0JKO2RlZjtERUY7cmM7UkMpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQVNNSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQVNNSW5mb3JtYXRpb24uY21ha2UKaW5kZXggNmI3MzczMC4uMDMxOTVjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTUluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VBU01JbmZvcm1hdGlvbi5jbWFrZQpAQCAtNzYsMTIgKzc2LDEyIEBACiBpZihOT1QgQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZKQogICBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZCiAgICAgICAiPENNQUtFX0FSPiBjciA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICIKLSAgICAgICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiAiKQorICAgICAgIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9FWEVDVVRBQkxFX1JVTlRJTUVfQVNNJHtBU01fRElBTEVDVH1fRkxBRykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VBU01fTUFTTUluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUFTTV9NQVNNSW5mb3JtYXRpb24uY21ha2UKaW5kZXggOWY3ZTkzNC4uNmQxZTE3NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTV9NQVNNSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUFTTV9NQVNNSW5mb3JtYXRpb24uY21ha2UKQEAgLTgsNyArOCw3IEBACiAKIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9TT1VSQ0VfRklMRV9FWFRFTlNJT05TIGFzbSkKIAotc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVfT0JKRUNUICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gL2MgIC9GbyA8T0JKRUNUPiA8U09VUkNFPiIpCitzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRV9PQkpFQ1QgIjxDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAvYyAvRm8gPE9CSkVDVD4gPFNPVVJDRT4iKQogCiAjIFRoZSBBU01fTUFTTSBjb21waWxlciBpZCBmb3IgdGhpcyBjb21waWxlciBpcyAiTVNWQyIsIHNvIGZpbGwgb3V0IHRoZSBydW50aW1lIGxpYnJhcnkgdGFibGUuCiBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWQgICAgICAgICAiIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VBZGRGb3J0cmFuU3ViZGlyZWN0b3J5LmNtYWtlIGIvTW9kdWxlcy9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkuY21ha2UKaW5kZXggMjYxMzU2OS4uNjlhODQxNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkuY21ha2UKQEAgLTQzLDcgKzQzLDYgQEAKIGJpbmFyaWVzIGR1cmluZyBgYG1ha2UgaW5zdGFsbGBgLgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotc2V0KF9NU19NSU5HV19TT1VSQ0VfRElSICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0pCiBpbmNsdWRlKENoZWNrTGFuZ3VhZ2UpCiBpbmNsdWRlKEV4dGVybmFsUHJvamVjdCkKIApAQCAtODcsMTEgKzg2LDExIEBACiAgIGZpbGUoVE9fTkFUSVZFX1BBVEggIiR7TUlOR1dfUEFUSH0iIE1JTkdXX1BBVEgpCiAgIHN0cmluZyhSRVBMQUNFICJcXCIgIlxcXFwiIE1JTkdXX1BBVEggIiR7TUlOR1dfUEFUSH0iKQogICBjb25maWd1cmVfZmlsZSgKLSAgICAke19NU19NSU5HV19TT1VSQ0VfRElSfS9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkvY29uZmlnX21pbmd3LmNtYWtlLmluCisgICAgJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkvY29uZmlnX21pbmd3LmNtYWtlLmluCiAgICAgJHtidWlsZF9kaXJ9L2NvbmZpZ19taW5ndy5jbWFrZQogICAgIEBPTkxZKQogICBjb25maWd1cmVfZmlsZSgKLSAgICAke19NU19NSU5HV19TT1VSQ0VfRElSfS9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkvYnVpbGRfbWluZ3cuY21ha2UuaW4KKyAgICAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJ9L0NNYWtlQWRkRm9ydHJhblN1YmRpcmVjdG9yeS9idWlsZF9taW5ndy5jbWFrZS5pbgogICAgICR7YnVpbGRfZGlyfS9idWlsZF9taW5ndy5jbWFrZQogICAgIEBPTkxZKQogZW5kZnVuY3Rpb24oKQpAQCAtMTUwLDE3ICsxNDksOSBAQAogICAgIC1QICR7YnVpbGRfZGlyfS9jb25maWdfbWluZ3cuY21ha2UKICAgICBCVUlMRF9DT01NQU5EICR7Q01BS0VfQ09NTUFORH0KICAgICAtUCAke2J1aWxkX2Rpcn0vYnVpbGRfbWluZ3cuY21ha2UKKyAgICBCVUlMRF9BTFdBWVMgMQogICAgIElOU1RBTExfQ09NTUFORCAiIgogICAgICkKLSAgIyBtYWtlIHRoZSBleHRlcm5hbCBwcm9qZWN0IGFsd2F5cyBydW4gbWFrZSB3aXRoIGVhY2ggYnVpbGQKLSAgZXh0ZXJuYWxwcm9qZWN0X2FkZF9zdGVwKCR7cHJvamVjdF9uYW1lfV9idWlsZCBmb3JjZWJ1aWxkCi0gICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9Ci0gICAgLUUgcmVtb3ZlCi0gICAgJHtDTUFLRV9DVVJSRU5UX0JVSUxEX0RJUn0vJHtwcm9qZWN0X25hbWV9LXByZWZpeC9zcmMvJHtwcm9qZWN0X25hbWV9LXN0YW1wLyR7cHJvamVjdF9uYW1lfS1idWlsZAotICAgIERFUEVOREVFUyBjb25maWd1cmUKLSAgICBERVBFTkRFUlMgYnVpbGQKLSAgICBBTFdBWVMgMQotICAgICkKICAgIyBjcmVhdGUgaW1wb3J0ZWQgdGFyZ2V0cyBmb3IgYWxsIGxpYnJhcmllcwogICBmb3JlYWNoKGxpYiAke2xpYnJhcmllc30pCiAgICAgYWRkX2xpYnJhcnkoJHtsaWJ9IFNIQVJFRCBJTVBPUlRFRCBHTE9CQUwpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ0luZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUNJbmZvcm1hdGlvbi5jbWFrZQppbmRleCBkZjQzNTU5Li5mNmQ2MjBmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ0luZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDSW5mb3JtYXRpb24uY21ha2UKQEAgLTExMCw2ICsxMTAsMTEgQEAKICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9DX1NUQU5EQVJEX0xJQlJBUklFUykKIGVuZGlmKCkKIAoraWYoTk9UIENNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVIgQU5EIERFRklORUQgRU5We0NNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVJ9KQorICBzZXQoQ01BS0VfQ19DT01QSUxFUl9MQVVOQ0hFUiAiJEVOVntDTUFLRV9DX0NPTVBJTEVSX0xBVU5DSEVSfSIKKyAgICBDQUNIRSBTVFJJTkcgIkNvbXBpbGVyIGxhdW5jaGVyIGZvciBDLiIpCitlbmRpZigpCisKIGluY2x1ZGUoQ01ha2VDb21tb25MYW5ndWFnZUluY2x1ZGUpCiAKICMgbm93IGRlZmluZSB0aGUgZm9sbG93aW5nIHJ1bGUgdmFyaWFibGVzCkBAIC0xNTYsNyArMTYxLDcgQEAKICAgc2V0KENNQUtFX0NfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfQ19BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX0NfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX0NfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9DX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0xNjUsMTIgKzE3MCwxMiBAQAogIyBjb21waWxlIGEgQyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVAotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAgIC1jIDxTT1VSQ0U+IikKKyAgICAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUpCiAgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX0NfQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX0VYRUNVVEFCTEVfUlVOVElNRV9DX0ZMQUcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ1NoYXJwSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQ1NoYXJwSW5mb3JtYXRpb24uY21ha2UKaW5kZXggNDhlMWExZS4uNDFjZDQ0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNTaGFycEluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDU2hhcnBJbmZvcm1hdGlvbi5jbWFrZQpAQCAtMTAsNyArMTAsNyBAQAogCiBzZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQogCi1zZXQoQ01BS0VfQ1NoYXJwX0ZMQUdTX0lOSVQgIi9kZWZpbmU6VFJBQ0UgL2xhbmd2ZXJzaW9uOjMiKQorc2V0KENNQUtFX0NTaGFycF9GTEFHU19JTklUICIvZGVmaW5lOlRSQUNFIikKIHNldChDTUFLRV9DU2hhcnBfRkxBR1NfREVCVUdfSU5JVCAiL2RlYnVnOmZ1bGwgL29wdGltaXplLSAvd2FybjozIC9lcnJvcnJlcG9ydDpwcm9tcHQgL2RlZmluZTpERUJVRyIpCiBzZXQoQ01BS0VfQ1NoYXJwX0ZMQUdTX1JFTEVBU0VfSU5JVCAiL2RlYnVnOm5vbmUgL29wdGltaXplICAvd2FybjoxICAvZXJyb3JyZXBvcnQ6cXVldWUiKQogc2V0KENNQUtFX0NTaGFycF9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUICIvZGVidWc6ZnVsbCAvb3B0aW1pemUtIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlLmluCmluZGV4IDcxMTEyOWEuLjE0YTM5YTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZUNVREFDb21waWxlci5jbWFrZS5pbgpAQCAtNCw3ICs0LDE2IEBACiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCAiQENNQUtFX0NVREFfQ09NUElMRVJfSURAIikKIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gIkBDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT05AIikKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEX0NPTVBVVEVEX0RFRkFVTFQgIkBDTUFLRV9DVURBX1NUQU5EQVJEX0NPTVBVVEVEX0RFRkFVTFRAIikKK3NldChDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMgIkBDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVNAIikKK3NldChDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFUyAiQENNQUtFX0NVREEwM19DT01QSUxFX0ZFQVRVUkVTQCIpCitzZXQoQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMgIkBDTUFLRV9DVURBMTFfQ09NUElMRV9GRUFUVVJFU0AiKQorc2V0KENNQUtFX0NVREExNF9DT01QSUxFX0ZFQVRVUkVTICJAQ01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVNAIikKK3NldChDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFUyAiQENNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTQCIpCitzZXQoQ01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVMgIkBDTUFLRV9DVURBMjBfQ09NUElMRV9GRUFUVVJFU0AiKQorCitzZXQoQ01BS0VfQ1VEQV9QTEFURk9STV9JRCAiQENNQUtFX0NVREFfUExBVEZPUk1fSURAIikKIHNldChDTUFLRV9DVURBX1NJTVVMQVRFX0lEICJAQ01BS0VfQ1VEQV9TSU1VTEFURV9JREAiKQorc2V0KENNQUtFX0NVREFfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVCAiQENNQUtFX0NVREFfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVEAiKQogc2V0KENNQUtFX0NVREFfU0lNVUxBVEVfVkVSU0lPTiAiQENNQUtFX0NVREFfU0lNVUxBVEVfVkVSU0lPTkAiKQogQFNFVF9NU1ZDX0NVREFfQVJDSElURUNUVVJFX0lEQAogCkBAIC0xNyw2ICsyNiwyMiBAQAogc2V0KENNQUtFX0NVREFfTElOS0VSX1BSRUZFUkVOQ0UgMTUpCiBzZXQoQ01BS0VfQ1VEQV9MSU5LRVJfUFJFRkVSRU5DRV9QUk9QQUdBVEVTIDEpCiAKK3NldChDTUFLRV9DVURBX1NJWkVPRl9EQVRBX1BUUiAiQENNQUtFX0NVREFfU0laRU9GX0RBVEFfUFRSQCIpCitzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9BQkkgIkBDTUFLRV9DVURBX0NPTVBJTEVSX0FCSUAiKQorc2V0KENNQUtFX0NVREFfTElCUkFSWV9BUkNISVRFQ1RVUkUgIkBDTUFLRV9DVURBX0xJQlJBUllfQVJDSElURUNUVVJFQCIpCisKK2lmKENNQUtFX0NVREFfU0laRU9GX0RBVEFfUFRSKQorICBzZXQoQ01BS0VfU0laRU9GX1ZPSURfUCAiJHtDTUFLRV9DVURBX1NJWkVPRl9EQVRBX1BUUn0iKQorZW5kaWYoKQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0FCSSkKKyAgc2V0KENNQUtFX0lOVEVSTkFMX1BMQVRGT1JNX0FCSSAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX0FCSX0iKQorZW5kaWYoKQorCitpZihDTUFLRV9DVURBX0xJQlJBUllfQVJDSElURUNUVVJFKQorICBzZXQoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgIkBDTUFLRV9DVURBX0xJQlJBUllfQVJDSElURUNUVVJFQCIpCitlbmRpZigpCisKIHNldChDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUyAiQENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTQCIpCiAKIHNldChDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgIkBDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVNAIikKQEAgLTI5LDQgKzU0LDUgQEAKIHNldChDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRlJBTUVXT1JLX0RJUkVDVE9SSUVTICJAQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0ZSQU1FV09SS19ESVJFQ1RPUklFU0AiKQogCiBzZXQoQ01BS0VfTElOS0VSICJAQ01BS0VfTElOS0VSQCIpCitzZXQoQ01BS0VfQVIgIkBDTUFLRV9BUkAiKQogc2V0KENNQUtFX01UICJAQ01BS0VfTVRAIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXJJZC5jdS5pbiBiL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXJJZC5jdS5pbgppbmRleCA2ZWRhOTI0Li4yMDU1ZGUyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVySWQuY3UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZUNVREFDb21waWxlcklkLmN1LmluCkBAIC0yNiw3ICsyNiw3IEBACiAjZWxpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCiAgICIxMSIKICNlbHNlCi0gICI5OCIKKyAgIjAzIgogI2VuZGlmCiAiXSI7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDVURBSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQ1VEQUluZm9ybWF0aW9uLmNtYWtlCmluZGV4IGIwZDgwZDEuLmY3ZWI0YTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDVURBSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUNVREFJbmZvcm1hdGlvbi5jbWFrZQpAQCAtODIsNiArODIsMTEgQEAKICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9DVURBX1NUQU5EQVJEX0xJQlJBUklFUykKIGVuZGlmKCkKIAoraWYoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfTEFVTkNIRVIgQU5EIERFRklORUQgRU5We0NNQUtFX0NVREFfQ09NUElMRVJfTEFVTkNIRVJ9KQorICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MQVVOQ0hFUiAiJEVOVntDTUFLRV9DVURBX0NPTVBJTEVSX0xBVU5DSEVSfSIKKyAgICBDQUNIRSBTVFJJTkcgIkNvbXBpbGVyIGxhdW5jaGVyIGZvciBDVURBLiIpCitlbmRpZigpCisKIGluY2x1ZGUoQ01ha2VDb21tb25MYW5ndWFnZUluY2x1ZGUpCiAKICMgbm93IGRlZmluZSB0aGUgZm9sbG93aW5nIHJ1bGVzOgpAQCAtOTMsOSArOTgsNyBAQAogIyBDTUFLRV9DVURBX0xJTktfRVhFQ1VUQUJMRQogCiBpZihDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIpCi0gIHNldChDTUFLRV9DVURBX0hPU1RfRkxBR1MgIi1jY2Jpbj08Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSPiIpCi1lbHNlKCkKLSAgc2V0KENNQUtFX0NVREFfSE9TVF9GTEFHUyAiIikKKyAgc3RyaW5nKEFQUEVORCBfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHUyAiIC1jY2Jpbj08Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSPiIpCiBlbmRpZigpCiAKIHNldChfX0lNUExJQ1RfTElOS1MgKQpAQCAtMTI2LDcgKzEyOSw3IEBACiAgIHNldChDTUFLRV9DVURBX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfQ1VEQV9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX0NVREFfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV9DVURBX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DVURBX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfQ1VEQV9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQpAQCAtMTM1LDI2ICsxMzgsMjYgQEAKICNTcGVjaWZ5IGhvdyB0byBjb21waWxlIHdoZW4gcHR4IGhhcyBiZWVuIHJlcXVlc3RlZAogaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRV9QVFhfQ09NUElMQVRJT04pCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfUFRYX0NPTVBJTEFUSU9OCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtcHR4IDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IikKKyAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gJHtfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUd9IC1wdHggPFNPVVJDRT4gLW8gPE9CSkVDVD4iKQogZW5kaWYoKQogCiAjU3BlY2lmeSBob3cgdG8gY29tcGlsZSB3aGVuIHNlcGFyYWJsZSBjb21waWxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQKIGlmKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVfU0VQQVJBQkxFX0NPTVBJTEFUSU9OKQogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX1NFUEFSQUJMRV9DT01QSUxBVElPTgotICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtDTUFLRV9DVURBX0hPU1RfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLWRjIDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IikKKyAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gJHtfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUd9IC1kYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCiBlbmRpZigpCiAKICNTcGVjaWZ5IGhvdyB0byBjb21waWxlIHdoZW4gd2hvbGUgY29tcGlsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkCiBpZihOT1QgQ01BS0VfQ1VEQV9DT01QSUxFX1dIT0xFX0NPTVBJTEFUSU9OKQogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX1dIT0xFX0NPTVBJTEFUSU9OCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCisgICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+ICR7X0NNQUtFX0NPTVBJTEVfQVNfQ1VEQV9GTEFHfSAtYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCiBlbmRpZigpCiAKLWlmKENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiKQoraWYoQ01BS0VfR0VORVJBVE9SIFNUUkVRVUFMICJOaW5qYSIgQU5EIE5PVCBDTUFLRV9ERVBGSUxFX0ZMQUdTX0NVREEpCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfREVQRU5ERU5DWV9ERVRFQ1RJT04KLSAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7Q01BS0VfQ1VEQV9IT1NUX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IGN1IC1NIDxTT1VSQ0U+IC1NVCA8T0JKRUNUPiAtbyAkREVQX0ZJTEUiKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLU0gPFNPVVJDRT4gLU1UIDxPQkpFQ1Q+IC1vICRERVBfRklMRSIpCiAgICNUaGUgTmluamEgZ2VuZXJhdG9yIHVzZXMgdGhlIG1ha2UgZmlsZSBkZXBlbmRlbmN5IGZpbGVzIHRvIGRldGVybWluZSB3aGF0Ci0gICNmaWxlcyBuZWVkIHRvIGJlIHJlY29tcGlsZWQuIFVuZm9ydHVuYXRlbHksIG52Y2MgZG9lc24ndCBzdXBwb3J0IGJ1aWxkaW5nCisgICNmaWxlcyBuZWVkIHRvIGJlIHJlY29tcGlsZWQuIFVuZm9ydHVuYXRlbHksIG52Y2MgPCAxMC4yIGRvZXNuJ3Qgc3VwcG9ydCBidWlsZGluZwogICAjYSBzb3VyY2UgZmlsZSBhbmQgZ2VuZXJhdGluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIHNhaWQgZmlsZSBpbiBhIHNpbmdsZQogICAjaW52b2NhdGlvbi4gSW5zdGVhZCB3ZSBoYXZlIHRvIHN0YXRlIHRoYXQgeW91IG5lZWQgdG8gY2hhaW4gdHdvIGNvbW1hbmRzLgogICAjCkBAIC0xNzEsMTMgKzE3NCw2IEBACiAgICAgIjxDTUFLRV9DVURBX0hPU1RfTElOS19MQVVOQ0hFUj4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+JHtfX0lNUExJQ1RfTElOS1N9IikKIGVuZGlmKCkKIAotaWYoIENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk5WSURJQSIgQU5ECi0gICAgQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiOC4wLjAiKQotICBzZXQoX0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1MgIi1Xbm8tZGVwcmVjYXRlZC1ncHUtdGFyZ2V0cyIpCi1lbHNlKCkKLSAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTICIiKQotZW5kaWYoKQotCiAjIEFkZCBpbXBsaWNpdCBob3N0IGxpbmsgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGRldmljZSBsaWJyYXJpZXMKICMgdG8gdGhlIGRldmljZSBsaW5rIGxpbmUuCiBzZXQoX19JTVBMSUNUX0RMSU5LX0RJUlMgJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQpAQCAtMTkyLDE0ICsxODgsMTUgQEAKIGVuZGZvcmVhY2goKQogdW5zZXQoX19JTVBMSUNUX0RMSU5LX0RJUlMpCiAKKwogI1RoZXNlIGFyZSB1c2VkIHdoZW4gbGlua2luZyByZWxvY2F0YWJsZSAoZGMpIGN1ZGEgY29kZQogaWYoTk9UIENNQUtFX0NVREFfREVWSUNFX0xJTktfTElCUkFSWSkKICAgc2V0KENNQUtFX0NVREFfREVWSUNFX0xJTktfTElCUkFSWQotICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtDTUFLRV9DVURBX0hPU1RfRkxBR1N9IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+ICR7Q01BS0VfQ1VEQV9DT01QSUxFX09QVElPTlNfUElDfSAke19DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTfSAtc2hhcmVkIC1kbGluayA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiR7X19JTVBMSUNUX0RMSU5LX0ZMQUdTfSIpCiBlbmRpZigpCiBpZihOT1QgQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19FWEVDVVRBQkxFKQogICBzZXQoQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPEZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPEZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQogZW5kaWYoKQogCiB1bnNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDWFhJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VDWFhJbmZvcm1hdGlvbi5jbWFrZQppbmRleCBhODk2Yjk5Li5kYmI0MzY2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ1hYSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUNYWEluZm9ybWF0aW9uLmNtYWtlCkBAIC0yMDcsNiArMjA3LDExIEBACiAgIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfQ1hYX1NUQU5EQVJEX0xJQlJBUklFUykKIGVuZGlmKCkKIAoraWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9MQVVOQ0hFUiBBTkQgREVGSU5FRCBFTlZ7Q01BS0VfQ1hYX0NPTVBJTEVSX0xBVU5DSEVSfSkKKyAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9MQVVOQ0hFUiAiJEVOVntDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVJ9IgorICAgIENBQ0hFIFNUUklORyAiQ29tcGlsZXIgbGF1bmNoZXIgZm9yIENYWC4iKQorZW5kaWYoKQorCiBpbmNsdWRlKENNYWtlQ29tbW9uTGFuZ3VhZ2VJbmNsdWRlKQogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlczoKQEAgLTI1Myw3ICsyNTgsNyBAQAogICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfQ1hYX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQorICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DWFhfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9DWFhfQVJDSElWRV9GSU5JU0ggIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKQEAgLTI2MiwxMiArMjY3LDEyIEBACiAjIGNvbXBpbGUgYSBDKysgZmlsZSBpbnRvIGFuIG9iamVjdCBmaWxlCiBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+ICA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFKQogICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAgPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKIAogbWFya19hc19hZHZhbmNlZCgKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDaGVja0NvbXBpbGVyRmxhZ0NvbW1vblBhdHRlcm5zLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUNoZWNrQ29tcGlsZXJGbGFnQ29tbW9uUGF0dGVybnMuY21ha2UKaW5kZXggZTFjZTYxNy4uMmRjNzVkNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNoZWNrQ29tcGlsZXJGbGFnQ29tbW9uUGF0dGVybnMuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUNoZWNrQ29tcGlsZXJGbGFnQ29tbW9uUGF0dGVybnMuY21ha2UKQEAgLTksNiArOSw3IEBACiBtYWNybyAoQ0hFQ0tfQ09NUElMRVJfRkxBR19DT01NT05fUEFUVEVSTlMgX1ZBUikKICAgc2V0KCR7X1ZBUn0KICAgICBGQUlMX1JFR0VYICJbVXVdbnJlY29nbmlbc3pdZWQgLipvcHRpb24iICAgICAgICAgICAgICAgIyBHTlUsIE5BRworICAgIEZBSUxfUkVHRVggInN3aXRjaCAuKiBpcyBubyBsb25nZXIgc3VwcG9ydGVkIiAgICAgICAgICAjIEdOVQogICAgIEZBSUxfUkVHRVggInVua25vd24gLipvcHRpb24iICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsYW5nCiAgICAgRkFJTF9SRUdFWCAib3B0aW1pemF0aW9uIGZsYWcgLiogbm90IHN1cHBvcnRlZCIgICAgICAgICMgQ2xhbmcKICAgICBGQUlMX1JFR0VYICJ1bmtub3duIGFyZ3VtZW50IGlnbm9yZWQiICAgICAgICAgICAgICAgICAgIyBDbGFuZyAoY2wpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQVNNQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQVNNQ29tcGlsZXIuY21ha2UKaW5kZXggZTQ3ZjNhNC4uODZmYjA1NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUFTTUNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVBU01Db21waWxlci5jbWFrZQpAQCAtMjExLDYgKzIxMSwxMyBAQAogICBzZXQoX0NNQUtFX0FTTV8ke192YXJ9ICIke0NNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9XyR7X3Zhcn19IikKIGVuZGZvcmVhY2goKQogCitpZihDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0gpCisgIHNldChfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0gKKyAgICAic2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSCBbPT1bJHtDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0h9XT09XSkiKQorZWxzZSgpCisgIHNldChfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0ggIiIpCitlbmRpZigpCisKIGlmKENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRCkKICAgc2V0KF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRAogICAgICJzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEICR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEfSkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNVREFDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDVURBQ29tcGlsZXIuY21ha2UKaW5kZXggNDkwZDY1OS4uOTVjM2NjOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNVREFDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1VEQUNvbXBpbGVyLmNtYWtlCkBAIC03NCw2ICs3NCw3IEBACiAKIHNldChfQ01BS0VfUFJPQ0VTU0lOR19MQU5HVUFHRSAiQ1VEQSIpCiBpbmNsdWRlKENNYWtlRmluZEJpblV0aWxzKQoraW5jbHVkZShDb21waWxlci8ke0NNQUtFX0NVREFfQ09NUElMRVJfSUR9LUZpbmRCaW5VdGlscyBPUFRJT05BTCkKIHVuc2V0KF9DTUFLRV9QUk9DRVNTSU5HX0xBTkdVQUdFKQogCiBpZihNU1ZDX0NVREFfQVJDSElURUNUVVJFX0lEKQpAQCAtODYsNyArODcsNyBAQAogICBzZXQoQ01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTICIiKQogICBzZXQoQ01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVMgIiIpCiAgIHNldChDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMgIiIpCi1lbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCBOVklESUEpCitlbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKICAgc2V0KF9udmNjX2xvZyAiIikKICAgc3RyaW5nKFJFUExBQ0UgIlxyIiAiIiBfbnZjY19vdXRwdXRfb3JpZyAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQogICBpZihfbnZjY19vdXRwdXRfb3JpZyBNQVRDSEVTICIjXFxcJCArUEFUSD0gKihbXlxuXSopXG4iKQpAQCAtMTg2LDggKzE4NywxMiBAQAogICAgICAgIkZhaWxlZCB0byBwYXJzZWQgQ1VEQSBudmNjIGltcGxpY2l0IGxpbmsgaW5mb3JtYXRpb246XG4ke19udmNjX2xvZ31cblxuIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZXh0cmFjdCBudmNjIGltcGxpY2l0IGxpbmsgbGluZS4iKQogICBlbmRpZigpCitlbmRpZigpCiAKLSAgc2V0KENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTICkKKyMgRGV0ZXJtaW5lIENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICBzZXQoQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIHN0cmluZyhSRVBMQUNFICJcciIgIiIgX252Y2Nfb3V0cHV0X29yaWcgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9QUk9EVUNFRF9PVVRQVVR9IikKICAgaWYoX252Y2Nfb3V0cHV0X29yaWcgTUFUQ0hFUyAiI1xcXCQgK0lOQ0xVREVTPSAqKFteXG5dKilcbiIpCiAgICAgc2V0KF9udmNjX2luY2x1ZGVzICIke0NNQUtFX01BVENIXzF9IikKICAgICBzdHJpbmcoQVBQRU5EIF9udmNjX2xvZyAiICBmb3VuZCAnSU5DTFVERVM9JyBzdHJpbmc6IFske19udmNjX2luY2x1ZGVzfV1cbiIpCkBAIC0xOTgsNyArMjAzLDcgQEAKICAgZW5kaWYoKQogICBpZihfbnZjY19pbmNsdWRlcykKICAgICAjIGFjcm9zcyBhbGwgb3BlcmF0aW5nIHN5c3RlbSBlYWNoIGluY2x1ZGUgZGlyZWN0b3J5IGlzIHByZWZpeGVkIHdpdGggLUkKLSAgICBzZXBhcmF0ZV9hcmd1bWVudHMoX252Y2Nfb3V0cHV0IFVOSVhfQ09NTUFORCAiJHtfbnZjY19pbmNsdWRlc30iKQorICAgIHNlcGFyYXRlX2FyZ3VtZW50cyhfbnZjY19vdXRwdXQgTkFUSVZFX0NPTU1BTkQgIiR7X252Y2NfaW5jbHVkZXN9IikKICAgICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgX252Y2Nfb3V0cHV0KQogICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4tSSIgIiIgbGluZSAiJHtsaW5lfSIpCiAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGxpbmUgIiR7bGluZX0iIEFCU09MVVRFKQpAQCAtMjExLDggKzIxNiw2IEBACiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICJGYWlsZWQgdG8gZGV0ZWN0IENVREEgbnZjYyBpbmNsdWRlIGluZm9ybWF0aW9uOlxuJHtfbnZjY19sb2d9XG5cbiIpCiAgIGVuZGlmKCkKLQotCiBlbmRpZigpCiAKICMgY29uZmlndXJlIGFsbCB2YXJpYWJsZXMgc2V0IGluIHRoaXMgZmlsZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UKaW5kZXggMDFhODFhMS4uYjUwZTVmMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlCkBAIC01LDcgKzUsNyBAQAogZnVuY3Rpb24oY21ha2VfZGV0ZXJtaW5lX2NvbXBpbGVfZmVhdHVyZXMgbGFuZykKIAogICBpZihsYW5nIFNUUkVRVUFMIEMgQU5EIENPTU1BTkQgY21ha2VfcmVjb3JkX2NfY29tcGlsZV9mZWF0dXJlcykKLSAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyIpCiAKICAgICBzZXQoQ01BS0VfQzkwX0NPTVBJTEVfRkVBVFVSRVMpCiAgICAgc2V0KENNQUtFX0M5OV9DT01QSUxFX0ZFQVRVUkVTKQpAQCAtMTYsNyArMTYsNyBAQAogICAgIGNtYWtlX3JlY29yZF9jX2NvbXBpbGVfZmVhdHVyZXMoKQogCiAgICAgaWYoTk9UIF9yZXN1bHQgRVFVQUwgMCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlIGZlYXR1cmVzIC0gZmFpbGVkIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiZmFpbGVkIikKICAgICAgIHJldHVybigpCiAgICAgZW5kaWYoKQogCkBAIC00MCwxMCArNDAsMTAgQEAKICAgICBzZXQoQ01BS0VfQzk5X0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DOTlfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQogICAgIHNldChDTUFLRV9DMTFfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0MxMV9DT01QSUxFX0ZFQVRVUkVTfSBQQVJFTlRfU0NPUEUpCiAKLSAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyAtIGRvbmUiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZG9uZSIpCiAKICAgZWxzZWlmKGxhbmcgU1RSRVFVQUwgQ1hYIEFORCBDT01NQU5EIGNtYWtlX3JlY29yZF9jeHhfY29tcGlsZV9mZWF0dXJlcykKLSAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyIpCiAKICAgICBzZXQoQ01BS0VfQ1hYOThfQ09NUElMRV9GRUFUVVJFUykKICAgICBzZXQoQ01BS0VfQ1hYMTFfQ09NUElMRV9GRUFUVVJFUykKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBjbWFrZV9yZWNvcmRfY3h4X2NvbXBpbGVfZmVhdHVyZXMoKQogCiAgICAgaWYoTk9UIF9yZXN1bHQgRVFVQUwgMCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlIGZlYXR1cmVzIC0gZmFpbGVkIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiZmFpbGVkIikKICAgICAgIHJldHVybigpCiAgICAgZW5kaWYoKQogCkBAIC05MCw3ICs5MCw1OCBAQAogICAgIHNldChDTUFLRV9DWFgxN19DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1hYMTdfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQogICAgIHNldChDTUFLRV9DWFgyMF9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1hYMjBfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQogCi0gICAgbWVzc2FnZShTVEFUVVMgIkRldGVjdGluZyAke2xhbmd9IGNvbXBpbGUgZmVhdHVyZXMgLSBkb25lIikKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgImRvbmUiKQorCisgIGVsc2VpZihsYW5nIFNUUkVRVUFMIENVREEgQU5EIENPTU1BTkQgY21ha2VfcmVjb3JkX2N1ZGFfY29tcGlsZV9mZWF0dXJlcykKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlIGZlYXR1cmVzIikKKworICAgIHNldChDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFUykKKyAgICBzZXQoQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMpCisgICAgc2V0KENNQUtFX0NVREExNF9DT01QSUxFX0ZFQVRVUkVTKQorICAgIHNldChDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFUykKKyAgICBzZXQoQ01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVMpCisKKyAgICBpbmNsdWRlKCIke0NNQUtFX1JPT1R9L01vZHVsZXMvSW50ZXJuYWwvRmVhdHVyZVRlc3RpbmcuY21ha2UiKQorCisgICAgY21ha2VfcmVjb3JkX2N1ZGFfY29tcGlsZV9mZWF0dXJlcygpCisKKyAgICBpZihOT1QgX3Jlc3VsdCBFUVVBTCAwKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJmYWlsZWQiKQorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisKKyAgaWYgKENNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTIEFORCBDTUFLRV9DVURBMjBfQ09NUElMRV9GRUFUVVJFUykKKyAgICAgIGxpc3QoUkVNT1ZFX0lURU0gQ01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFU30pCisgICAgZW5kaWYoKQorICAgIGlmIChDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFUyBBTkQgQ01BS0VfQ1VEQTE3X0NPTVBJTEVfRkVBVFVSRVMpCisgICAgICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVN9KQorICAgIGVuZGlmKCkKKyAgICBpZiAoQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMgQU5EIENNQUtFX0NVREExNF9DT01QSUxFX0ZFQVRVUkVTKQorICAgICAgbGlzdChSRU1PVkVfSVRFTSBDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NVREExMV9DT01QSUxFX0ZFQVRVUkVTfSkKKyAgICBlbmRpZigpCisgICAgaWYgKENNQUtFX0NVREEwM19DT01QSUxFX0ZFQVRVUkVTIEFORCBDTUFLRV9DVURBMTFfQ09NUElMRV9GRUFUVVJFUykKKyAgICAgIGxpc3QoUkVNT1ZFX0lURU0gQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFU30pCisgICAgZW5kaWYoKQorCisgICAgaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUykKKyAgICAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMKKyAgICAgICAgJHtDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFU30KKyAgICAgICAgJHtDTUFLRV9DVURBMTFfQ09NUElMRV9GRUFUVVJFU30KKyAgICAgICAgJHtDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFU30KKyAgICAgICAgJHtDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFU30KKyAgICAgICAgJHtDTUFLRV9DVURBMjBfQ09NUElMRV9GRUFUVVJFU30KKyAgICAgICkKKyAgICBlbmRpZigpCisKKyAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTfSBQQVJFTlRfU0NPUEUpCisgICAgc2V0KENNQUtFX0NVREEwM19DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTAzX0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DVURBMTFfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQorICAgIHNldChDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NVREExNF9DT01QSUxFX0ZFQVRVUkVTfSBQQVJFTlRfU0NPUEUpCisgICAgc2V0KENNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTE3X0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoQ01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DVURBMjBfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQorCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJkb25lIikKKwogICBlbmRpZigpCiAKIGVuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZQppbmRleCAwNmYzYmEyLi5lMWIzYzUyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlCkBAIC0xMiw3ICsxMiw3IEBACiAKIGZ1bmN0aW9uKENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkgbGFuZyBzcmMpCiAgIGlmKE5PVCBERUZJTkVEIENNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEKQotICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlciBBQkkgaW5mbyIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8iKQogCiAgICAgIyBDb21waWxlIHRoZSBBQkkgaWRlbnRpZmljYXRpb24gc291cmNlLgogICAgIHNldChCSU4gIiR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQklfJHtsYW5nfS5iaW4iKQpAQCAtMzIsNiArMzIsOSBAQAogICAgIGVuZGlmKCkKICAgICBfX1Rlc3RDb21waWxlcl9zZXRUcnlDb21waWxlVGFyZ2V0VHlwZSgpCiAKKyAgICAjIEF2b2lkIGZhaWxpbmcgQUJJIGRldGVjdGlvbiBvbiB3YXJuaW5ncy4KKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiKF58ICktV2Vycm9yKD1bXiBdKik/KCB8JCkiICIgIiBDTUFLRV8ke2xhbmd9X0ZMQUdTICIke0NNQUtFXyR7bGFuZ31fRkxBR1N9IikKKwogICAgICMgU2F2ZSB0aGUgY3VycmVudCBMQ19BTEwsIExDX01FU1NBR0VTLCBhbmQgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAjIGFuZCBzZXQgdGhlbSB0byAiQyIgdGhhdCB3YXkgR0NDJ3MgInNlYXJjaCBzdGFydHMgaGVyZSIgdGV4dCBpcyBpbgogICAgICMgRW5nbGlzaCBhbmQgd2UgY2FuIGdyb2sgaXQuCkBAIC02Niw3ICs2OSw3IEBACiAKICAgICAjIExvYWQgdGhlIHJlc3VsdGluZyBpbmZvcm1hdGlvbiBzdHJpbmdzLgogICAgIGlmKENNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEIEFORCBOT1QgX2NvcHlfZXJyb3IpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8gLSBkb25lIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZG9uZSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8gY29tcGlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQogICAgICAgZmlsZShTVFJJTkdTICIke0JJTn0iIEFCSV9TVFJJTkdTIExJTUlUX0NPVU5UIDIgUkVHRVggIklORk86W0EtWmEtejAtOV9dK1xcW1teXV0qXFxdIikKQEAgLTEyNCw4ICsxMjcsNyBAQAogICAgICAgIyBhIHRyeS1jb21waWxlCiAgICAgICBpZigiJHtsYW5nfSIgTUFUQ0hFUyAiRm9ydHJhbiIKICAgICAgICAgICBBTkQgIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCi0gICAgICAgIHNldChfZGVzYyAiRGV0ZXJtaW5lIEludGVsIEZvcnRyYW4gQ29tcGlsZXIgSW1wbGljaXQgTGluayBQYXRoIikKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7X2Rlc2N9IikKKyAgICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZXJtaW5lIEludGVsIEZvcnRyYW4gQ29tcGlsZXIgSW1wbGljaXQgTGluayBQYXRoIikKICAgICAgICAgIyBCdWlsZCBhIHNhbXBsZSBwcm9qZWN0IHdoaWNoIHJlcG9ydHMgc3ltYm9scy4KICAgICAgICAgdHJ5X2NvbXBpbGUoSUZPUlRfTElCX1BBVEhfQ09NUElMRUQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvSW50ZWxWU0ltcGxpY2l0UGF0aApAQCAtMTM4LDggKzE0MCw3IEBACiAgICAgICAgICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9JbnRlbFZTSW1wbGljaXRQYXRoL291dHB1dC50eHQiCiAgICAgICAgICAgIiR7X291dHB1dH0iKQogICAgICAgICBpbmNsdWRlKCR7Q01BS0VfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9JbnRlbFZTSW1wbGljaXRQYXRoL291dHB1dC5jbWFrZSBPUFRJT05BTCkKLSAgICAgICAgc2V0KF9kZXNjICJEZXRlcm1pbmUgSW50ZWwgRm9ydHJhbiBDb21waWxlciBJbXBsaWNpdCBMaW5rIFBhdGggLS0gZG9uZSIpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke19kZXNjfSIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZG9uZSIpCiAgICAgICBlbmRpZigpCiAKICAgICAgICMgSW1wbGljaXQgbGluayBsaWJyYXJpZXMgY2Fubm90IGJlIHVzZWQgZXhwbGljaXRseSBmb3IgbXVsdGlwbGUKQEAgLTE2MywxMCArMTY0LDIyIEBACiAgICAgICAgICAgICBicmVhaygpCiAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgIGVsc2VpZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgU1RSRVFVQUwgUUNDKQorICAgICAgICBmb3JlYWNoKGRpciAke2ltcGxpY2l0X2RpcnN9KQorICAgICAgICAgIGlmIChkaXIgTUFUQ0hFUyAiL2xpYiQiKQorICAgICAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChhc3N1bWVkQXJjaERpciAiJHtkaXJ9IiBESVJFQ1RPUlkpCisgICAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGFyY2hQYXJlbnREaXIgIiR7YXNzdW1lZEFyY2hEaXJ9IiBESVJFQ1RPUlkpCisgICAgICAgICAgICBpZiAoYXJjaFBhcmVudERpciBTVFJFUVVBTCBDTUFLRV9TWVNST09UKQorICAgICAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGFyY2hEaXJOYW1lICIke2Fzc3VtZWRBcmNoRGlyfSIgTkFNRSkKKyAgICAgICAgICAgICAgc2V0KENNQUtFXyR7bGFuZ31fTElCUkFSWV9BUkNISVRFQ1RVUkUgIiR7YXJjaERpck5hbWV9IiBQQVJFTlRfU0NPUEUpCisgICAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGZvcmVhY2goKQogICAgICAgZW5kaWYoKQogCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8gLSBmYWlsZWQiKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJmYWlsZWQiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8gZmFpbGVkIHRvIGNvbXBpbGUgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuJHtfY29weV9lcnJvcn1cblxuIikKICAgICBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlcklkLmNtYWtlCmluZGV4IDdiNTcxYzMuLjllYmFhNmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlcklkLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlcklkLmNtYWtlCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICBzZXQoQ01BS0VfRVhFQ1VUQUJMRV9GT1JNQVQgIlVua25vd24iIENBQ0hFIElOVEVSTkFMICJFeGVjdXRhYmxlIGZpbGUgZm9ybWF0IikKICAgZW5kaWYoKQogCi0gIGlmKENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiIEFORCBNU1ZDXyR7bGFuZ31fQVJDSElURUNUVVJFX0lEKQorICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiXk5pbmphIiBBTkQgTVNWQ18ke2xhbmd9X0FSQ0hJVEVDVFVSRV9JRCkKICAgICBmb3JlYWNoKHVzZXJmbGFncyAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX0ZMQUdTX0xJU1R9IiAiIikKICAgICAgIENNQUtFX0RFVEVSTUlORV9NU1ZDX1NIT1dJTkNMVURFU19QUkVGSVgoJHtsYW5nfSAiJHt1c2VyZmxhZ3N9IikKICAgICBlbmRmb3JlYWNoKCkKQEAgLTE4Miw2ICsxODIsMTAgQEAKICAgICBtZXNzYWdlKFNUQVRVUyAiVGhlICR7bGFuZ30gY29tcGlsZXIgaWRlbnRpZmljYXRpb24gaXMgdW5rbm93biIpCiAgIGVuZGlmKCkKIAorICBpZihsYW5nIFNUUkVRVUFMICJGb3J0cmFuIiBBTkQgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiWEwiKQorICAgIHNldChDTUFLRV8ke2xhbmd9X1hMX0NQUCAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX0NQUH0iIFBBUkVOVF9TQ09QRSkKKyAgZW5kaWYoKQorCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSUR9IiBQQVJFTlRfU0NPUEUpCiAgIHNldChDTUFLRV8ke2xhbmd9X1BMQVRGT1JNX0lEICIke0NNQUtFXyR7bGFuZ31fUExBVEZPUk1fSUR9IiBQQVJFTlRfU0NPUEUpCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRCAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRH0iIFBBUkVOVF9TQ09QRSkKQEAgLTI0NCw2ICsyNDgsOCBAQAogICAgIHNldChpZF9Qb3N0QnVpbGRFdmVudF9Db21tYW5kICIiKQogICAgIGlmKENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVQgTUFUQ0hFUyAiXltMbF1bTGxdW1Z2XVtNbV0oX3ZbMC05XSsoX3hwKT8pPyQiKQogICAgICAgc2V0KGlkX2NsX3ZhciAiQ2xhbmdDbEV4ZWN1dGFibGUiKQorICAgIGVsc2VpZihDTUFLRV9WU19QTEFURk9STV9UT09MU0VUIE1BVENIRVMgIl5bQ2NdW0xsXVtBYV1bTm5dW0dnXVtDY11bTGxdJCIpCisgICAgICBzZXQoaWRfY2wgIiQoQ0xUb29sRXhlKSIpCiAgICAgZWxzZWlmKENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVQgTUFUQ0hFUyAidlswLTldK19jbGFuZ18uKiIpCiAgICAgICBzZXQoaWRfY2wgY2xhbmcuZXhlKQogICAgIGVsc2UoKQpAQCAtMzE4LDYgKzMyNCwxNSBAQAogICAgIGlmKENNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04pCiAgICAgICBzZXQoaWRfV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbiAiPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+JHtDTUFLRV9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9WRVJTSU9OfTwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4iKQogICAgIGVuZGlmKCkKKyAgICBpZihDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX1ZDVEFSR0VUU19DVVNUT01fRElSKQorICAgICAgc2V0KGlkX1Rvb2xzZXRWQ1RhcmdldHNEaXIgIjxWQ1RhcmdldHNQYXRoPiR7Q01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WQ1RBUkdFVFNfQ1VTVE9NX0RJUn08L1ZDVGFyZ2V0c1BhdGg+IikKKyAgICBlbmRpZigpCisgICAgc2V0KGlkX0N1c3RvbUdsb2JhbHMgIiIpCisgICAgZm9yZWFjaChwYWlyIElOIExJU1RTIENNQUtFX1ZTX0dMT0JBTFMpCisgICAgICBpZigiJHtwYWlyfSIgTUFUQ0hFUyAiKFtePV0rKT0oLiopJCIpCisgICAgICAgIHN0cmluZyhBUFBFTkQgaWRfQ3VzdG9tR2xvYmFscyAiPCR7Q01BS0VfTUFUQ0hfMX0+JHtDTUFLRV9NQVRDSF8yfTwvJHtDTUFLRV9NQVRDSF8xfT5cbiAgICAiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGZvcmVhY2goKQogICAgIGlmKGlkX3BsYXRmb3JtIFNUUkVRVUFMIEFSTTY0KQogICAgICAgc2V0KGlkX1dpbmRvd3NTREtEZXNrdG9wQVJNU3VwcG9ydCAiPFdpbmRvd3NTREtEZXNrdG9wQVJNNjRTdXBwb3J0PnRydWU8L1dpbmRvd3NTREtEZXNrdG9wQVJNNjRTdXBwb3J0PiIpCiAgICAgZWxzZWlmKGlkX3BsYXRmb3JtIFNUUkVRVUFMIEFSTSkKQEAgLTM1Myw2ICszNjgsNyBAQAogICAgICAgZW5kaWYoKQogICAgICAgc2V0KGN1ZGFfdG9vbHMgIkNVREEgJHtDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREF9IikKICAgICAgIHNldChpZF9jb21waWxlICJDdWRhQ29tcGlsZSIpCisgICAgICBzZXQoaWRfSXRlbURlZmluaXRpb25Hcm91cF9lbnRyeSAiPEN1ZGFDb21waWxlPjxBZGRpdGlvbmFsT3B0aW9ucz4lKEFkZGl0aW9uYWxPcHRpb25zKS12PC9BZGRpdGlvbmFsT3B0aW9ucz48L0N1ZGFDb21waWxlPiIpCiAgICAgICBzZXQoaWRfUG9zdEJ1aWxkRXZlbnRfQ29tbWFuZCBbW2VjaG8gQ01BS0VfQ1VEQV9DT01QSUxFUj0kKEN1ZGFUb29sa2l0QmluRGlyKVxudmNjLmV4ZV1dKQogICAgICAgaWYoQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIpCiAgICAgICAgIHNldChpZF9DdWRhVG9vbGtpdEN1c3RvbURpciAiPEN1ZGFUb29sa2l0Q3VzdG9tRGlyPiR7Q01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVJ9bnZjYzwvQ3VkYVRvb2xraXRDdXN0b21EaXI+IikKQEAgLTM2Myw3ICszNzksNyBAQAogICAgICAgICBzdHJpbmcoQ09OQ0FUIGlkX0ltcG9ydF90YXJnZXRzIFtbPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNcXV0gIiR7Y3VkYV90b29sc30iIFtbLnRhcmdldHMiIC8+XV0pCiAgICAgICBlbmRpZigpCiAgICAgICBpZihDTUFLRV9WU19QTEFURk9STV9OQU1FIFNUUkVRVUFMIHg2NCkKLSAgICAgICAgc2V0KGlkX0l0ZW1EZWZpbml0aW9uR3JvdXBfZW50cnkgIjxDdWRhQ29tcGlsZT48VGFyZ2V0TWFjaGluZVBsYXRmb3JtPjY0PC9UYXJnZXRNYWNoaW5lUGxhdGZvcm0+PC9DdWRhQ29tcGlsZT4iKQorICAgICAgICBzZXQoaWRfSXRlbURlZmluaXRpb25Hcm91cF9lbnRyeSAiPEN1ZGFDb21waWxlPjxUYXJnZXRNYWNoaW5lUGxhdGZvcm0+NjQ8L1RhcmdldE1hY2hpbmVQbGF0Zm9ybT48QWRkaXRpb25hbE9wdGlvbnM+JShBZGRpdGlvbmFsT3B0aW9ucyktdjwvQWRkaXRpb25hbE9wdGlvbnM+PC9DdWRhQ29tcGlsZT4iKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KGlkX0xpbmtfQWRkaXRpb25hbERlcGVuZGVuY2llcyAiPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Y3VkYXJ0LmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4iKQogICAgIGVuZGlmKCkKQEAgLTUzNCw2ICs1NTAsMTIgQEAKICAgICAgIEVSUk9SX1ZBUklBQkxFIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfT1VUUFVUCiAgICAgICBSRVNVTFRfVkFSSUFCTEUgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9SRVNVTFQKICAgICAgICkKKyAgICBpZigiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX09VVFBVVH0iIE1BVENIRVMgImV4ZWM6IFteXG5dKlxcKCgvW14sXG5dKi9jcHApLENNYWtlRm9ydHJhbkNvbXBpbGVySWQuRiIpCisgICAgICBzZXQoX2NwcCAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgICBpZihFWElTVFMgIiR7X2NwcH0iKQorICAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9DUFAgIiR7X2NwcH0iIFBBUkVOVF9TQ09QRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAogICAjIENoZWNrIHRoZSByZXN1bHQgb2YgY29tcGlsYXRpb24uCkBAIC04NDgsNiArODcwLDE0IEBACiAgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfRElSfSkKICAgZW5kaWYoKQogCisgICMgU2F2ZSB0aGUgY3VycmVudCBMQ19BTEwsIExDX01FU1NBR0VTLCBhbmQgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgIyBhbmQgc2V0IHRoZW0gdG8gIkMiIHNvIHdlIGdldCB0aGUgZXhwZWN0ZWQgb3V0cHV0IHRvIG1hdGNoLgorICBzZXQoX29yaWdfbGNfYWxsICAgICAgJEVOVntMQ19BTEx9KQorICBzZXQoX29yaWdfbGNfbWVzc2FnZXMgJEVOVntMQ19NRVNTQUdFU30pCisgIHNldChfb3JpZ19sYW5nICAgICAgICAkRU5We0xBTkd9KQorICBzZXQoRU5We0xDX0FMTH0gICAgICBDKQorICBzZXQoRU5We0xDX01FU1NBR0VTfSBDKQorICBzZXQoRU5We0xBTkd9ICAgICAgICBDKQogCiAgIGZvcmVhY2godmVuZG9yICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9WRU5ET1JTfSkKICAgICBzZXQoZmxhZ3MgJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX1ZFTkRPUl9GTEFHU18ke3ZlbmRvcn19KQpAQCAtODY5LDYgKzg5OSw3IEBACiAgICAgICAgICJtYXRjaGVkIFwiJHtyZWdleH1cIjpcbiR7b3V0cHV0fSIpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRCAiJHt2ZW5kb3J9IiBQQVJFTlRfU0NPUEUpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9PVVRQVVQgIiR7b3V0cHV0fSIgUEFSRU5UX1NDT1BFKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfVkVORE9SX01BVENIICIke0NNQUtFX01BVENIXzF9IiBQQVJFTlRfU0NPUEUpCiAgICAgICBicmVhaygpCiAgICAgZWxzZSgpCiAgICAgICBpZigiJHtyZXN1bHR9IiBNQVRDSEVTICAidGltZW91dCIpCkBAIC04ODIsNiArOTEzLDExIEBACiAgICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCisKKyAgIyBSZXN0b3JlIG9yaWdpbmFsIExDX0FMTCwgTENfTUVTU0FHRVMsIGFuZCBMQU5HCisgIHNldChFTlZ7TENfQUxMfSAgICAgICR7X29yaWdfbGNfYWxsfSkKKyAgc2V0KEVOVntMQ19NRVNTQUdFU30gJHtfb3JpZ19sY19tZXNzYWdlc30pCisgIHNldChFTlZ7TEFOR30gICAgICAgICR7X29yaWdfbGFuZ30pCiBlbmRmdW5jdGlvbigpCiAKIGZ1bmN0aW9uKENNQUtFX0RFVEVSTUlORV9NU1ZDX1NIT1dJTkNMVURFU19QUkVGSVggbGFuZyB1c2VyZmxhZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lRm9ydHJhbkNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUZvcnRyYW5Db21waWxlci5jbWFrZQppbmRleCA1ZGRkNjRmLi5lODUwNTQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lRm9ydHJhbkNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVGb3J0cmFuQ29tcGlsZXIuY21ha2UKQEAgLTI3MSw2ICsyNzEsMTEgQEAKIGluY2x1ZGUoQ29tcGlsZXIvJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEfS1GaW5kQmluVXRpbHMgT1BUSU9OQUwpCiB1bnNldChfQ01BS0VfUFJPQ0VTU0lOR19MQU5HVUFHRSkKIAoraWYoQ01BS0VfRm9ydHJhbl9YTF9DUFApCisgIHNldChfU0VUX0NNQUtFX0ZvcnRyYW5fWExfQ1BQCisgICAgInNldChDTUFLRV9Gb3J0cmFuX1hMX0NQUCBcIiR7Q01BS0VfRm9ydHJhbl9YTF9DUFB9XCIpIikKK2VuZGlmKCkKKwogaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQpCiAgIHNldChfU0VUX0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJDSElURUNUVVJFX0lECiAgICAgInNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRCAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEfSkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZVN3aWZ0Q29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3dpZnRDb21waWxlci5jbWFrZQppbmRleCA5YWFmZTQ4Li42ODgxMzNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3dpZnRDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3dpZnRDb21waWxlci5jbWFrZQpAQCAtMTYsNyArMTYsNyBAQAogICBlbmRpZigpCiAgIHNldChDTUFLRV9Td2lmdF9DT01QSUxFUl9YQ09ERV9UWVBFIHNvdXJjZWNvZGUuc3dpZnQpCiAgIF9jbWFrZV9maW5kX2NvbXBpbGVyX3BhdGgoU3dpZnQpCi1lbHNlaWYoIiR7Q01BS0VfR0VORVJBVE9SfSIgU1RSRVFVQUwgIk5pbmphIikKK2Vsc2VpZigiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJeTmluamEiKQogICBpZihDTUFLRV9Td2lmdF9DT01QSUxFUikKICAgICBfY21ha2VfZmluZF9jb21waWxlcl9wYXRoKFN3aWZ0KQogICBlbHNlKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVTeXN0ZW0uY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3lzdGVtLmNtYWtlCmluZGV4IGRjMjA4YzYuLmYzZWM0ZGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVTeXN0ZW0uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZVN5c3RlbS5jbWFrZQpAQCAtNDMsNyArNDMsNyBAQAogICAgIGVsc2UoKQogICAgICAgZXhlY19wcm9ncmFtKCR7Q01BS0VfVU5BTUV9IEFSR1MgLXIgT1VUUFVUX1ZBUklBQkxFIENNQUtFX0hPU1RfU1lTVEVNX1ZFUlNJT04pCiAgICAgZW5kaWYoKQotICAgIGlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXh8Q1lHV0lOLip8RGFyd2lufF5HTlUkIikKKyAgICBpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIE1BVENIRVMgIkxpbnV4fENZR1dJTi4qfERhcndpbnxeR05VJHxBbmRyb2lkIikKICAgICAgIGV4ZWNfcHJvZ3JhbSgke0NNQUtFX1VOQU1FfSBBUkdTIC1tIE9VVFBVVF9WQVJJQUJMRSBDTUFLRV9IT1NUX1NZU1RFTV9QUk9DRVNTT1IKICAgICAgICAgUkVUVVJOX1ZBTFVFIHZhbCkKICAgICAgIGlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkRhcndpbiIgQU5ECmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRmluZEJpblV0aWxzLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUZpbmRCaW5VdGlscy5jbWFrZQppbmRleCBjMjNlNDQ3Li5kZTllZjlhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRmluZEJpblV0aWxzLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VGaW5kQmluVXRpbHMuY21ha2UKQEAgLTc1LDYgKzc1LDcgQEAKICAgZW5kaWYoKQogCiAgIGZpbmRfcHJvZ3JhbShDTUFLRV9MSU5LRVIgTkFNRVMgJHtfQ01BS0VfQURESVRJT05BTF9MSU5LRVJfTkFNRVN9IGxpbmsgSElOVFMgJHtfQ01BS0VfVE9PTENIQUlOX0xPQ0FUSU9OfSkKKyAgZmluZF9wcm9ncmFtKENNQUtFX0FSICAgICBOQU1FUyBsaWIgIEhJTlRTICR7X0NNQUtFX1RPT0xDSEFJTl9MT0NBVElPTn0pCiAgIGZpbmRfcHJvZ3JhbShDTUFLRV9NVCAgICAgTkFNRVMgbXQgICBISU5UUyAke19DTUFLRV9UT09MQ0hBSU5fTE9DQVRJT059KQogCiAgIGxpc3QoQVBQRU5EIF9DTUFLRV9UT09MX1ZBUlMgTElOS0VSIE1UKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUZpbmRGcmFtZXdvcmtzLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUZpbmRGcmFtZXdvcmtzLmNtYWtlCmluZGV4IDA2YzA1ZmIuLjg5MDZmNDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGaW5kRnJhbWV3b3Jrcy5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRmluZEZyYW1ld29ya3MuY21ha2UKQEAgLTE3LDEzICsxNywyNSBAQAogICBtYWNybyhDTUFLRV9GSU5EX0ZSQU1FV09SS1MgZndrKQogICAgIHNldCgke2Z3a31fRlJBTUVXT1JLUykKICAgICBpZihBUFBMRSkKLSAgICAgIGZvcmVhY2goZGlyCi0gICAgICAgICAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MvJHtmd2t9LmZyYW1ld29yawotICAgICAgICAgIC91c3IvbG9jYWwvRnJhbWV3b3Jrcy8ke2Z3a30uZnJhbWV3b3JrCi0gICAgICAgICAgL0xpYnJhcnkvRnJhbWV3b3Jrcy8ke2Z3a30uZnJhbWV3b3JrCi0gICAgICAgICAgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvJHtmd2t9LmZyYW1ld29yawotICAgICAgICAgIC9OZXR3b3JrL0xpYnJhcnkvRnJhbWV3b3Jrcy8ke2Z3a30uZnJhbWV3b3JrCi0gICAgICAgICAgJHtDTUFLRV9GSU5EX0ZSQU1FV09SS19FWFRSQV9MT0NBVElPTlN9KQorICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfSIgX2NtZmZfQ01BS0VfRlJBTUVXT1JLX1BBVEgpCisgICAgICBzZXQoX2NtZmZfc2VhcmNoX3BhdGhzCisgICAgICAgICAgICAke0NNQUtFX0ZSQU1FV09SS19QQVRIfQorICAgICAgICAgICAgJHtfY21mZl9DTUFLRV9GUkFNRVdPUktfUEFUSH0KKyAgICAgICAgICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICAgICAgICAvdXNyL2xvY2FsL0ZyYW1ld29ya3MKKyAgICAgICAgICAgIC9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgICAgICAgIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICAgICAgICAvTmV0d29yay9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgICAgICAgICR7Q01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRIfSkKKworICAgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywKKyAgICAgICMgQ01BS0VfRklORF9GUkFNRVdPUktfRVhUUkFfTE9DQVRJT05TIGluY2x1ZGVzICR7ZndrfS5mcmFtZXdvcmsKKyAgICAgIGxpc3QoVFJBTlNGT1JNIF9jbWZmX3NlYXJjaF9wYXRocyBBUFBFTkQgLyR7ZndrfS5mcmFtZXdvcmspCisgICAgICBsaXN0KEFQUEVORCBfY21mZl9zZWFyY2hfcGF0aHMgJHtDTUFLRV9GSU5EX0ZSQU1FV09SS19FWFRSQV9MT0NBVElPTlN9KQorCisgICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIF9jbWZmX3NlYXJjaF9wYXRocykKKworICAgICAgZm9yZWFjaChkaXIgSU4gTElTVFMgX2NtZmZfc2VhcmNoX3BhdGhzKQogICAgICAgICBpZihFWElTVFMgJHtkaXJ9KQogICAgICAgICAgIHNldCgke2Z3a31fRlJBTUVXT1JLUyAkeyR7ZndrfV9GUkFNRVdPUktTfSAke2Rpcn0pCiAgICAgICAgIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlLmluCmluZGV4IGFlN2I3M2EuLjM0ZjQ0YWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZS5pbgpAQCAtNiw2ICs2LDcgQEAKIHNldChDTUFLRV9Gb3J0cmFuX1BMQVRGT1JNX0lEICJAQ01BS0VfRm9ydHJhbl9QTEFURk9STV9JREAiKQogc2V0KENNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfSUQgIkBDTUFLRV9Gb3J0cmFuX1NJTVVMQVRFX0lEQCIpCiBzZXQoQ01BS0VfRm9ydHJhbl9TSU1VTEFURV9WRVJTSU9OICJAQ01BS0VfRm9ydHJhbl9TSU1VTEFURV9WRVJTSU9OQCIpCitAX1NFVF9DTUFLRV9Gb3J0cmFuX1hMX0NQUEAKIEBfU0VUX0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEQAogQFNFVF9NU1ZDX0ZvcnRyYW5fQVJDSElURUNUVVJFX0lEQAogc2V0KENNQUtFX0FSICJAQ01BS0VfQVJAIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGb3J0cmFuSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlRm9ydHJhbkluZm9ybWF0aW9uLmNtYWtlCmluZGV4IGZmYTZhMjQuLjlhNGNlNjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGb3J0cmFuSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUZvcnRyYW5JbmZvcm1hdGlvbi5jbWFrZQpAQCAtMTYzLDYgKzE2MywxMSBAQAogCiBjbWFrZV9pbml0aWFsaXplX3Blcl9jb25maWdfdmFyaWFibGUoQ01BS0VfRm9ydHJhbl9GTEFHUyAiRmxhZ3MgdXNlZCBieSB0aGUgRm9ydHJhbiBjb21waWxlciIpCiAKK2lmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xBVU5DSEVSIEFORCBERUZJTkVEIEVOVntDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xBVU5DSEVSfSkKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTEFVTkNIRVIgIiRFTlZ7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9MQVVOQ0hFUn0iCisgICAgQ0FDSEUgU1RSSU5HICJDb21waWxlciBsYXVuY2hlciBmb3IgRm9ydHJhbi4iKQorZW5kaWYoKQorCiBpbmNsdWRlKENNYWtlQ29tbW9uTGFuZ3VhZ2VJbmNsdWRlKQogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlIHZhcmlhYmxlcwpAQCAtMTg4LDcgKzE5Myw3IEBACiAgIHNldChDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfRm9ydHJhbl9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX0ZvcnRyYW5fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfRm9ydHJhbl9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQpAQCAtMjA0LDcgKzIwOSw3IEBACiAjIGxpbmsgYSBmb3J0cmFuIHByb2dyYW0KIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0ZvcnRyYW5fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiA8Q01BS0VfRm9ydHJhbl9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPEZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gPENNQUtFX0ZvcnRyYW5fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxGTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihDTUFLRV9Gb3J0cmFuX1NUQU5EQVJEX0xJQlJBUklFU19JTklUKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUdlbmVyaWNTeXN0ZW0uY21ha2UgYi9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQppbmRleCA3N2Q4Y2ZkLi5mNTM5YjQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQpAQCAtMjcsNyArMjcsNyBAQAogc2V0KENNQUtFX0FVVE9HRU5fT1JJR0lOX0RFUEVORFMgT04pCiBzZXQoQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTIE9OKQogc2V0KENNQUtFX0FVVE9NT0NfUEFUSF9QUkVGSVggT04pCi1zZXQoQ01BS0VfQVVUT01PQ19NQUNST19OQU1FUyAiUV9PQkpFQ1QiICJRX0dBREdFVCIgIlFfTkFNRVNQQUNFIikKK3NldChDTUFLRV9BVVRPTU9DX01BQ1JPX05BTUVTICJRX09CSkVDVCIgIlFfR0FER0VUIiAiUV9OQU1FU1BBQ0UiICJRX05BTUVTUEFDRV9FWFBPUlQiKQogCiAjIGJhc2ljYWxseSBhbGwgZ2VuZXJhbCBwdXJwb3NlIE9TcyBzdXBwb3J0IHNoYXJlZCBsaWJzCiBzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUyBUUlVFKQpAQCAtNTEsMTYgKzUxLDE2IEBACiAgICAgc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSBUQVJHRVRfTUVTU0FHRVMgJHtDTUFLRV9UQVJHRVRfTUVTU0FHRVN9KQogICBlbmRpZigpCiAgIGlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJVbml4IE1ha2VmaWxlcyIpCi0gICAgc2V0KENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTIE9GRiBDQUNIRSBCT09MCi0gICAgICAiRW5hYmxlL0Rpc2FibGUgb3V0cHV0IG9mIGNvbXBpbGUgY29tbWFuZHMgZHVyaW5nIGdlbmVyYXRpb24uIgorICAgIHNldChDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyAiJEVOVntDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU30iCisgICAgICBDQUNIRSBCT09MICJFbmFibGUvRGlzYWJsZSBvdXRwdXQgb2YgY29tcGlsZSBjb21tYW5kcyBkdXJpbmcgZ2VuZXJhdGlvbi4iCiAgICAgICApCiAgICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUykKICAgZW5kaWYoKQogZW5kaWYoKQogCiBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiKQotICBzZXQoQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMgT0ZGIENBQ0hFIEJPT0wKLSAgICAiRW5hYmxlL0Rpc2FibGUgb3V0cHV0IG9mIGNvbXBpbGUgY29tbWFuZHMgZHVyaW5nIGdlbmVyYXRpb24uIgorICBzZXQoQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMgIiRFTlZ7Q01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFN9IgorICAgIENBQ0hFIEJPT0wgIkVuYWJsZS9EaXNhYmxlIG91dHB1dCBvZiBjb21waWxlIGNvbW1hbmRzIGR1cmluZyBnZW5lcmF0aW9uLiIKICAgICApCiAgIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZQppbmRleCAxOTExZTczLi5iZTRhM2JlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2UKQEAgLTUsMTE5ICs1LDE0NSBAQAogQ01ha2VHcmFwaFZpek9wdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBidWlsdGluIGdyYXBodml6IHN1cHBvcnQgb2YgQ01ha2UuCitUaGUgYnVpbHRpbiBHcmFwaHZpeiBzdXBwb3J0IG9mIENNYWtlLgogCi1WYXJpYWJsZXMgc3BlY2lmaWMgdG8gdGhlIGdyYXBodml6IHN1cHBvcnQKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorR2VuZXJhdGluZyBHcmFwaHZpeiBmaWxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1DTWFrZQotY2FuIGdlbmVyYXRlIGBncmFwaHZpeiA8aHR0cDovL3d3dy5ncmFwaHZpei5vcmcvPmBfIGZpbGVzLCBzaG93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUKLXRhcmdldHMgaW4gYSBwcm9qZWN0IGFuZCBhbHNvIGV4dGVybmFsIGxpYnJhcmllcyB3aGljaCBhcmUgbGlua2VkCi1hZ2FpbnN0LiAgV2hlbiBDTWFrZSBpcyBydW4gd2l0aCB0aGUgYGAtLWdyYXBodml6PWZvby5kb3RgYCBvcHRpb24sIGl0IHdpbGwKLXByb2R1Y2U6CitDTWFrZSBjYW4gZ2VuZXJhdGUgYEdyYXBodml6IDxodHRwczovL3d3dy5ncmFwaHZpei5vcmcvPmBfIGZpbGVzIHNob3dpbmcgdGhlCitkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdGFyZ2V0cyBpbiBhIHByb2plY3QsIGFzIHdlbGwgYXMgZXh0ZXJuYWwgbGlicmFyaWVzCit3aGljaCBhcmUgbGlua2VkIGFnYWluc3QuCiAKLSogYSBgYGZvby5kb3RgYCBmaWxlIHNob3dpbmcgYWxsIGRlcGVuZGVuY2llcyBpbiB0aGUgcHJvamVjdAotKiBhIGBgZm9vLmRvdC48dGFyZ2V0PmBgIGZpbGUgZm9yIGVhY2ggdGFyZ2V0LCBmaWxlIHNob3dpbmcgb24gd2hpY2ggb3RoZXIgdGFyZ2V0cyB0aGUgcmVzcGVjdGl2ZSB0YXJnZXQgZGVwZW5kcwotKiBhIGBgZm9vLmRvdC48dGFyZ2V0Pi5kZXBlbmRlcnNgYCBmaWxlLCBzaG93aW5nIHdoaWNoIG90aGVyIHRhcmdldHMgZGVwZW5kIG9uIHRoZSByZXNwZWN0aXZlIHRhcmdldAorV2hlbiBydW5uaW5nIENNYWtlIHdpdGggdGhlIGBgLS1ncmFwaHZpej1mb28uZG90YGAgb3B0aW9uLCBpdCBwcm9kdWNlczoKIAotVGhlIGRpZmZlcmVudCBkZXBlbmRlbmN5IHR5cGVzIGBgUFVCTElDYGAsIGBgUFJJVkFURWBgIGFuZCBgYElOVEVSRkFDRWBgCisqIGEgYGBmb28uZG90YGAgZmlsZSwgc2hvd2luZyBhbGwgZGVwZW5kZW5jaWVzIGluIHRoZSBwcm9qZWN0CisqIGEgYGBmb28uZG90Ljx0YXJnZXQ+YGAgZmlsZSBmb3IgZWFjaCB0YXJnZXQsIHNob3dpbmcgb24gd2hpY2ggb3RoZXIgdGFyZ2V0cworICBpdCBkZXBlbmRzCisqIGEgYGBmb28uZG90Ljx0YXJnZXQ+LmRlcGVuZGVyc2BgIGZpbGUgZm9yIGVhY2ggdGFyZ2V0LCBzaG93aW5nIHdoaWNoIG90aGVyCisgIHRhcmdldHMgZGVwZW5kIG9uIGl0CisKK1Rob3NlIC5kb3QgZmlsZXMgY2FuIGJlIGNvbnZlcnRlZCB0byBpbWFnZXMgdXNpbmcgdGhlICpkb3QqIGNvbW1hbmQgZnJvbSB0aGUKK0dyYXBodml6IHBhY2thZ2U6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbAorCisgIGRvdCAtVHBuZyAtbyBmb28ucG5nIGZvby5kb3QKKworVGhlIGRpZmZlcmVudCBkZXBlbmRlbmN5IHR5cGVzIGBgUFVCTElDYGAsIGBgSU5URVJGQUNFYGAgYW5kIGBgUFJJVkFURWBgCiBhcmUgcmVwcmVzZW50ZWQgYXMgc29saWQsIGRhc2hlZCBhbmQgZG90dGVkIGVkZ2VzLgogCi1UaGlzIGNhbiByZXN1bHQgaW4gaHVnZSBncmFwaHMuICBVc2luZyB0aGUgZmlsZQotYGBDTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZWBgIHRoZSBsb29rIGFuZCBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQKLWdyYXBocyBjYW4gYmUgaW5mbHVlbmNlZC4gIFRoaXMgZmlsZSBpcyBzZWFyY2hlZCBmaXJzdCBpbgotOnZhcmlhYmxlOmBDTUFLRV9CSU5BUllfRElSYCBhbmQgdGhlbiBpbiA6dmFyaWFibGU6YENNQUtFX1NPVVJDRV9ESVJgLiAgSWYgZm91bmQsIGl0IGlzCi1yZWFkIGFuZCB0aGUgdmFyaWFibGVzIHNldCBpbiBpdCBhcmUgdXNlZCB0byBhZGp1c3Qgb3B0aW9ucyBmb3IgdGhlCi1nZW5lcmF0ZWQgZ3JhcGh2aXogZmlsZXMuCitWYXJpYWJsZXMgc3BlY2lmaWMgdG8gdGhlIEdyYXBodml6IHN1cHBvcnQKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi0uLiB2YXJpYWJsZTo6IEdSQVBIVklaX0dSQVBIX1RZUEUKLQotIFRoZSBncmFwaCB0eXBlLgotCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogImRpZ3JhcGgiCi0KLSBWYWxpZCBncmFwaCB0eXBlcyBhcmU6Ci0KLSAqICJncmFwaCIgOiBOb2RlcyBhcmUgam9pbmVkIHdpdGggbGluZXMKLSAqICJkaWdyYXBoIiA6IE5vZGVzIGFyZSBqb2luZWQgd2l0aCBhcnJvd3Mgc2hvd2luZyBkaXJlY3Rpb24KLSAqICJzdHJpY3QgZ3JhcGgiIDogTGlrZSAiZ3JhcGgiIGJ1dCBtYXggb25lIGxpbmUgYmV0d2VlbiBlYWNoIG5vZGUKLSAqICJzdHJpY3QgZGlncmFwaCIgOiBMaWtlICJncmFwaCIgYnV0IG1heCBvbmUgbGluZSBiZXR3ZWVuIGVhY2ggbm9kZSBpbiBlYWNoIGRpcmVjdGlvbgorVGhlIHJlc3VsdGluZyBncmFwaHMgY2FuIGJlIGh1Z2UuICBUaGUgbG9vayBhbmQgY29udGVudCBvZiB0aGUgZ2VuZXJhdGVkIGdyYXBocworY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgdGhlIGZpbGUgYGBDTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZWBgLiAgVGhpcyBmaWxlIGlzCitmaXJzdCBzZWFyY2hlZCBpbiA6dmFyaWFibGU6YENNQUtFX0JJTkFSWV9ESVJgLCBhbmQgdGhlbiBpbgorOnZhcmlhYmxlOmBDTUFLRV9TT1VSQ0VfRElSYC4gIElmIGZvdW5kLCB0aGUgdmFyaWFibGVzIHNldCBpbiBpdCBhcmUgdXNlZCB0bworYWRqdXN0IG9wdGlvbnMgZm9yIHRoZSBnZW5lcmF0ZWQgR3JhcGh2aXogZmlsZXMuCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfR1JBUEhfTkFNRQogCiAgVGhlIGdyYXBoIG5hbWUuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiAiR0ciCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiB2YWx1ZSBvZiA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfTkFNRWAKIAogLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9HUkFQSF9IRUFERVIKIAotIFRoZSBoZWFkZXIgd3JpdHRlbiBhdCB0aGUgdG9wIG9mIHRoZSBncmFwaHZpeiBmaWxlLgorIFRoZSBoZWFkZXIgd3JpdHRlbiBhdCB0aGUgdG9wIG9mIHRoZSBHcmFwaHZpeiBmaWxlcy4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6ICJub2RlIFtuICBmb250c2l6ZSA9ICIxMiJdOyIKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6ICJub2RlIFsgZm9udHNpemUgPSAiMTIiIF07IgogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX05PREVfUFJFRklYCiAKLSBUaGUgcHJlZml4IGZvciBlYWNoIG5vZGUgaW4gdGhlIGdyYXBodml6IGZpbGUuCisgVGhlIHByZWZpeCBmb3IgZWFjaCBub2RlIGluIHRoZSBHcmFwaHZpeiBmaWxlcy4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6ICJub2RlIgorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogIm5vZGUiCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfRVhFQ1VUQUJMRVMKIAotIFNldCB0aGlzIHRvIEZBTFNFIHRvIGV4Y2x1ZGUgZXhlY3V0YWJsZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKyBTZXQgdG8gRkFMU0UgdG8gZXhjbHVkZSBleGVjdXRhYmxlcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogVFJVRQorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX1NUQVRJQ19MSUJTCiAKLSBTZXQgdGhpcyB0byBGQUxTRSB0byBleGNsdWRlIHN0YXRpYyBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKyBTZXQgdG8gRkFMU0UgdG8gZXhjbHVkZSBzdGF0aWMgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBUUlVFCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfU0hBUkVEX0xJQlMKIAotIFNldCB0aGlzIHRvIEZBTFNFIHRvIGV4Y2x1ZGUgc2hhcmVkIGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgorIFNldCB0byBGQUxTRSB0byBleGNsdWRlIHNoYXJlZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6IFRSVUUKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IFRSVUUKIAogLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9NT0RVTEVfTElCUwogCi0gU2V0IHRoaXMgdG8gRkFMU0UgdG8gZXhjbHVkZSBtb2R1bGUgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgbW9kdWxlIGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogVFJVRQorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQorCisuLiB2YXJpYWJsZTo6IEdSQVBIVklaX0lOVEVSRkFDRV9MSUJTCisKKyBTZXQgdG8gRkFMU0UgdG8gZXhjbHVkZSBpbnRlcmZhY2UgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCisKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IFRSVUUKKworLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9PQkpFQ1RfTElCUworCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgb2JqZWN0IGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgorCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCisKKy4uIHZhcmlhYmxlOjogR1JBUEhWSVpfVU5LTk9XTl9MSUJTCisKKyBTZXQgdG8gRkFMU0UgdG8gZXhjbHVkZSB1bmtub3duIGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgorCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfRVhURVJOQUxfTElCUwogCi0gU2V0IHRoaXMgdG8gRkFMU0UgdG8gZXhjbHVkZSBleHRlcm5hbCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKyBTZXQgdG8gRkFMU0UgdG8gZXhjbHVkZSBleHRlcm5hbCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6IFRSVUUKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IFRSVUUKKworLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9DVVNUT01fVEFSR0VUUworCisgU2V0IHRvIFRSVUUgdG8gaW5jbHVkZSBjdXN0b20gdGFyZ2V0cyBpbiB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKworICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogRkFMU0UKIAogLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9JR05PUkVfVEFSR0VUUwogCi0gQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGlnbm9yaW5nIHRhcmdldHMuCisgQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIG5hbWVzIG9mIHRhcmdldHMgdG8gZXhjbHVkZSBmcm9tIHRoZQorIGdlbmVyYXRlZCBncmFwaHMuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBlbXB0eQorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogZW1wdHkKIAogLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9HRU5FUkFURV9QRVJfVEFSR0VUCiAKLSBTZXQgdGhpcyB0byBGQUxTRSB0byBleGNsdWRlIHBlciB0YXJnZXQgZ3JhcGhzIGBgZm9vLmRvdC48dGFyZ2V0PmBgLgorIFNldCB0byBGQUxTRSB0byBub3QgZ2VuZXJhdGUgcGVyLXRhcmdldCBncmFwaHMgYGBmb28uZG90Ljx0YXJnZXQ+YGAuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBUUlVFCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfR0VORVJBVEVfREVQRU5ERVJTCiAKLSBTZXQgdGhpcyB0byBGQUxTRSB0byBleGNsdWRlIGRlcGVuZGVyIGdyYXBocyBgYGZvby5kb3QuPHRhcmdldD4uZGVwZW5kZXJzYGAuCisgU2V0IHRvIEZBTFNFIHRvIG5vdCBnZW5lcmF0ZSBkZXBlbmRlciBncmFwaHMgYGBmb28uZG90Ljx0YXJnZXQ+LmRlcGVuZGVyc2BgLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogVFJVRQorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VNaW5HV0ZpbmRNYWtlLmNtYWtlIGIvTW9kdWxlcy9DTWFrZU1pbkdXRmluZE1ha2UuY21ha2UKaW5kZXggNTIzZjAwYy4uZjAyNmU5YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZU1pbkdXRmluZE1ha2UuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZU1pbkdXRmluZE1ha2UuY21ha2UKQEAgLTcsMTAgKzcsNSBAQAogICBjOi9NaW5HVy9iaW4gL01pbkdXL2JpbgogICAiW0hLRVlfQ1VSUkVOVF9VU0VSXFxTb2Z0d2FyZVxcQ29kZUJsb2NrcztQYXRoXS9NaW5HVy9iaW4iCiAgICkKLWZpbmRfcHJvZ3JhbShDTUFLRV9TSCBzaC5leGUgKQotaWYoQ01BS0VfU0gpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IgInNoLmV4ZSB3YXMgZm91bmQgaW4geW91ciBQQVRILCBoZXJlOlxuJHtDTUFLRV9TSH1cbkZvciBNaW5HVyBtYWtlIHRvIHdvcmsgY29ycmVjdGx5IHNoLmV4ZSBtdXN0IE5PVCBiZSBpbiB5b3VyIHBhdGguXG5SdW4gY21ha2UgZnJvbSBhIHNoZWxsIHRoYXQgZG9lcyBub3QgaGF2ZSBzaC5leGUgaW4geW91ciBQQVRILlxuSWYgeW91IHdhbnQgdG8gdXNlIGEgVU5JWCBzaGVsbCwgdGhlbiB1c2UgTVNZUyBNYWtlZmlsZXMuXG4iKQotICBzZXQoQ01BS0VfTUFLRV9QUk9HUkFNIE5PVEZPVU5EKQotZW5kaWYoKQogCi1tYXJrX2FzX2FkdmFuY2VkKENNQUtFX01BS0VfUFJPR1JBTSBDTUFLRV9TSCkKK21hcmtfYXNfYWR2YW5jZWQoQ01BS0VfTUFLRV9QUk9HUkFNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZU5pbmphRmluZE1ha2UuY21ha2UgYi9Nb2R1bGVzL0NNYWtlTmluamFGaW5kTWFrZS5jbWFrZQppbmRleCA3MDJhZjEzLi4zMmY3OGRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlTmluamFGaW5kTWFrZS5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlTmluamFGaW5kTWFrZS5jbWFrZQpAQCAtNCw1ICs0LDYgQEAKIAogZmluZF9wcm9ncmFtKENNQUtFX01BS0VfUFJPR1JBTQogICBOQU1FUyBuaW5qYS1idWlsZCBuaW5qYSBzYW11CisgIE5BTUVTX1BFUl9ESVIKICAgRE9DICJQcm9ncmFtIHVzZWQgdG8gYnVpbGQgZnJvbSBidWlsZC5uaW5qYSBmaWxlcy4iKQogbWFya19hc19hZHZhbmNlZChDTUFLRV9NQUtFX1BST0dSQU0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlT0JKQ0luZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZU9CSkNJbmZvcm1hdGlvbi5jbWFrZQppbmRleCBjYjYxY2I4Li5iM2RhODJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlT0JKQ0luZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VPQkpDSW5mb3JtYXRpb24uY21ha2UKQEAgLTExMCw2ICsxMTAsMTEgQEAKICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9PQkpDX1NUQU5EQVJEX0xJQlJBUklFUykKIGVuZGlmKCkKIAoraWYoTk9UIENNQUtFX09CSkNfQ09NUElMRVJfTEFVTkNIRVIgQU5EIERFRklORUQgRU5We0NNQUtFX09CSkNfQ09NUElMRVJfTEFVTkNIRVJ9KQorICBzZXQoQ01BS0VfT0JKQ19DT01QSUxFUl9MQVVOQ0hFUiAiJEVOVntDTUFLRV9PQkpDX0NPTVBJTEVSX0xBVU5DSEVSfSIKKyAgICBDQUNIRSBTVFJJTkcgIkNvbXBpbGVyIGxhdW5jaGVyIGZvciBPQkpDLiIpCitlbmRpZigpCisKIGluY2x1ZGUoQ01ha2VDb21tb25MYW5ndWFnZUluY2x1ZGUpCiAKICMgbm93IGRlZmluZSB0aGUgZm9sbG93aW5nIHJ1bGUgdmFyaWFibGVzCkBAIC0xNTYsNyArMTYxLDcgQEAKICAgc2V0KENNQUtFX09CSkNfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9PQkpDX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfT0JKQ19BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX09CSkNfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX09CSkNfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9PQkpDX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0xNjUsMTIgKzE3MCwxMiBAQAogIyBjb21waWxlIGFuIE9iamVjdGl2ZS1DIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogaWYoTk9UIENNQUtFX09CSkNfQ09NUElMRV9PQkpFQ1QpCiAgIHNldChDTUFLRV9PQkpDX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9PQkpDX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IG9iamVjdGl2ZS1jIC1vIDxPQkpFQ1Q+ICAgLWMgPFNPVVJDRT4iKQorICAgICI8Q01BS0VfT0JKQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBvYmplY3RpdmUtYyAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9PQkpDX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX09CSkNfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9PQkpDX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9PQkpDX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfT0JKQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfT0JKQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfRVhFQ1VUQUJMRV9SVU5USU1FX09CSkNfRkxBRykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VPQkpDWFhJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VPQkpDWFhJbmZvcm1hdGlvbi5jbWFrZQppbmRleCA3MWFjMjZhLi43MWJlYjdmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlT0JKQ1hYSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZU9CSkNYWEluZm9ybWF0aW9uLmNtYWtlCkBAIC0yMDMsNiArMjAzLDExIEBACiAgIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfT0JKQ1hYX1NUQU5EQVJEX0xJQlJBUklFUykKIGVuZGlmKCkKIAoraWYoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9MQVVOQ0hFUiBBTkQgREVGSU5FRCBFTlZ7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSX0xBVU5DSEVSfSkKKyAgc2V0KENNQUtFX09CSkNYWF9DT01QSUxFUl9MQVVOQ0hFUiAiJEVOVntDTUFLRV9PQkpDWFhfQ09NUElMRVJfTEFVTkNIRVJ9IgorICAgIENBQ0hFIFNUUklORyAiQ29tcGlsZXIgbGF1bmNoZXIgZm9yIE9CSkNYWC4iKQorZW5kaWYoKQorCiBpbmNsdWRlKENNYWtlQ29tbW9uTGFuZ3VhZ2VJbmNsdWRlKQogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlczoKQEAgLTI0OSw3ICsyNTQsNyBAQAogICBzZXQoQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQorICBzZXQoQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9PQkpDWFhfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9PQkpDWFhfQVJDSElWRV9GSU5JU0ggIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKQEAgLTI1OCwxMiArMjYzLDEyIEBACiAjIGNvbXBpbGUgYW4gT2JqZWN0aXZlLUMrKyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRV9PQkpFQ1QpCiAgIHNldChDTUFLRV9PQkpDWFhfQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX09CSkNYWF9DT01QSUxFUj4gIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggb2JqZWN0aXZlLWMrKyAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCisgICAgIjxDTUFLRV9PQkpDWFhfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggb2JqZWN0aXZlLWMrKyAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9PQkpDWFhfTElOS19FWEVDVVRBQkxFKQogICBzZXQoQ01BS0VfT0JKQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfT0JKQ1hYX0NPTVBJTEVSPiAgPEZMQUdTPiA8Q01BS0VfT0JKQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfT0JKQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9PQkpDWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKIAogbWFya19hc19hZHZhbmNlZCgKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VQcmludFN5c3RlbUluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UKaW5kZXggZjg3M2E0ZC4uOGQ1Y2Y1YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UKQEAgLTUsOSArNSw5IEBACiBDTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1wcmludCBzeXN0ZW0gaW5mb3JtYXRpb24KK1ByaW50IHN5c3RlbSBpbmZvcm1hdGlvbi4KIAotVGhpcyBmaWxlIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzIGp1c3QgaW5jbHVkZSBpdCBpbiBhCitUaGlzIG1vZHVsZSBzZXJ2ZXMgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gSnVzdCBpbmNsdWRlIGl0IGluIGEKIHByb2plY3QgdG8gc2VlIHZhcmlvdXMgaW50ZXJuYWwgQ01ha2UgdmFyaWFibGVzLgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVN3aWZ0Q29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlU3dpZnRDb21waWxlci5jbWFrZS5pbgppbmRleCA3YzhkMWMxLi40N2FkYTM4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlU3dpZnRDb21waWxlci5jbWFrZS5pbgorKysgYi9Nb2R1bGVzL0NNYWtlU3dpZnRDb21waWxlci5jbWFrZS5pbgpAQCAtMTIsMyArMTIsNSBAQAogCiBzZXQoQ01BS0VfU3dpZnRfQ09NUElMRVJfSURfUlVOIDEpCiBzZXQoQ01BS0VfU3dpZnRfU09VUkNFX0ZJTEVfRVhURU5TSU9OUyBzd2lmdCkKKworc2V0KENNQUtFX1N3aWZ0X0lNUExJQ0lUX0lOQ0xVREVfRElSRUNUT1JJRVMgIkBDTUFLRV9Td2lmdF9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTQCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlU3dpZnRJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VTd2lmdEluZm9ybWF0aW9uLmNtYWtlCmluZGV4IDJjNTRkYTAuLjhmMDkwOWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VTd2lmdEluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VTd2lmdEluZm9ybWF0aW9uLmNtYWtlCkBAIC0xNyw2ICsxNyw4IEBACiAgIGluY2x1ZGUoUGxhdGZvcm0vJHtDTUFLRV9FRkZFQ1RJVkVfU1lTVEVNX05BTUV9LSR7Q01BS0VfU3dpZnRfQ09NUElMRVJfSUR9LVN3aWZ0IE9QVElPTkFMKQogZW5kaWYoKQogCitzZXQoQ01BS0VfRVhFX0VYUE9SVFNfU3dpZnRfRkxBRyAiLWVtaXQtbW9kdWxlIC1lbWl0LW1vZHVsZS1wYXRoIDxTV0lGVF9NT0RVTEU+ICR7Q01BS0VfU3dpZnRfSU1QTElCX0xJTktFUl9GTEFHU30iKQorCiBzZXQoQ01BS0VfSU5DTFVERV9GTEFHX1N3aWZ0ICItSSAiKQogaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgRGFyd2luKQogICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfU09OQU1FX1N3aWZ0X0ZMQUcgIi1YbGlua2VyIC1pbnN0YWxsX25hbWUgLVhsaW5rZXIgIikKQEAgLTI1LDggKzI3LDE1IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCBXaW5kb3dzKQorICBzZXQoQ01BS0VfRVhFQ1VUQUJMRV9SVU5USU1FX1N3aWZ0X0ZMQUcgIi1YbGlua2VyIC1ycGF0aCAtWGxpbmtlciAiKQogICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV9Td2lmdF9GTEFHICItWGxpbmtlciAtcnBhdGggLVhsaW5rZXIgIikKLSAgc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfU3dpZnRfRkxBR19TRVAgIjoiKQorICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCBEYXJ3aW4pCisgICAgc2V0KENNQUtFX0VYRUNVVEFCTEVfUlVOVElNRV9Td2lmdF9GTEFHX1NFUCAiIikKKyAgICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV9Td2lmdF9GTEFHX1NFUCAiIikKKyAgZWxzZSgpCisgICAgc2V0KENNQUtFX0VYRUNVVEFCTEVfUlVOVElNRV9Td2lmdF9GTEFHX1NFUCAiOiIpCisgICAgc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfU3dpZnRfRkxBR19TRVAgIjoiKQorICBlbmRpZigpCiBlbmRpZigpCiAKIHNldChDTUFLRV9Td2lmdF9DT01QSUxFX09QVElPTlNfVEFSR0VUICItdGFyZ2V0ICIpCkBAIC03MiwxMCArODEsNiBAQAogICBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbihSRVNVTFQgQ01BS0VfU3dpZnRfTlVNX1RIUkVBRFMgUVVFUlkgTlVNQkVSX09GX0xPR0lDQUxfQ09SRVMpCiBlbmRpZigpCiAKLWlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMIFdpbmRvd3MpCi0gIHNldChDTUFLRV9Td2lmdF9JTVBMSUJfTElOS0VSX0ZMQUdTICItWGxpbmtlciAtaW1wbGliOjxUQVJHRVRfSU1QTElCPiIpCi1lbmRpZigpCi0KIGlmKE5PVCBDTUFLRV9Td2lmdF9DUkVBVEVfU0hBUkVEX0xJQlJBUlkpCiAgIHNldChDTUFLRV9Td2lmdF9DUkVBVEVfU0hBUkVEX0xJQlJBUlkgIjxDTUFLRV9Td2lmdF9DT01QSUxFUj4gLW91dHB1dC1maWxlLW1hcCA8U1dJRlRfT1VUUFVUX0ZJTEVfTUFQPiAtaW5jcmVtZW50YWwgLWogJHtDTUFLRV9Td2lmdF9OVU1fVEhSRUFEU30gLWVtaXQtbGlicmFyeSAtbyA8VEFSR0VUPiAtbW9kdWxlLW5hbWUgPFNXSUZUX01PRFVMRV9OQU1FPiAtbW9kdWxlLWxpbmstbmFtZSA8U1dJRlRfTElCUkFSWV9OQU1FPiAtZW1pdC1tb2R1bGUgLWVtaXQtbW9kdWxlLXBhdGggPFNXSUZUX01PRFVMRT4gLWVtaXQtZGVwZW5kZW5jaWVzIDxERUZJTkVTPiA8RkxBR1M+IDxJTkNMVURFUz4gPFNXSUZUX1NPVVJDRVM+IDxMSU5LX0ZMQUdTPiA8U09OQU1FX0ZMQUc+IDxUQVJHRVRfSU5TVEFMTE5BTUVfRElSPjxUQVJHRVRfU09OQU1FPiAke0NNQUtFX1N3aWZ0X0lNUExJQl9MSU5LRVJfRkxBR1N9IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQpAQCAtODUsNyArOTAsNyBAQAogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfU3dpZnRfTElOS19FWEVDVVRBQkxFKQotICBzZXQoQ01BS0VfU3dpZnRfTElOS19FWEVDVVRBQkxFICI8Q01BS0VfU3dpZnRfQ09NUElMRVI+IC1vdXRwdXQtZmlsZS1tYXAgPFNXSUZUX09VVFBVVF9GSUxFX01BUD4gLWluY3JlbWVudGFsIC1qICR7Q01BS0VfU3dpZnRfTlVNX1RIUkVBRFN9IC1lbWl0LWV4ZWN1dGFibGUgLW8gPFRBUkdFVD4gLWVtaXQtbW9kdWxlIC1lbWl0LW1vZHVsZS1wYXRoIDxTV0lGVF9NT0RVTEU+IC1lbWl0LWRlcGVuZGVuY2llcyA8REVGSU5FUz4gPEZMQUdTPiA8SU5DTFVERVM+IDxTV0lGVF9TT1VSQ0VTPiA8TElOS19GTEFHUz4gJHtDTUFLRV9Td2lmdF9JTVBMSUJfTElOS0VSX0ZMQUdTfSA8TElOS19MSUJSQVJJRVM+IikKKyAgc2V0KENNQUtFX1N3aWZ0X0xJTktfRVhFQ1VUQUJMRSAiPENNQUtFX1N3aWZ0X0NPTVBJTEVSPiAtb3V0cHV0LWZpbGUtbWFwIDxTV0lGVF9PVVRQVVRfRklMRV9NQVA+IC1pbmNyZW1lbnRhbCAtaiAke0NNQUtFX1N3aWZ0X05VTV9USFJFQURTfSAtZW1pdC1leGVjdXRhYmxlIC1vIDxUQVJHRVQ+IC1lbWl0LWRlcGVuZGVuY2llcyA8REVGSU5FUz4gPEZMQUdTPiA8SU5DTFVERVM+IDxTV0lGVF9TT1VSQ0VTPiA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9Td2lmdF9DUkVBVEVfU1RBVElDX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdENDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlCmluZGV4IDdiZjZmZGUuLmVhZGVhODkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlCkBAIC0yNyw3ICsyNyw3IEBACiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQyIgIiIpCisgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDIikKICAgX19UZXN0Q29tcGlsZXJfc2V0VHJ5Q29tcGlsZVRhcmdldFR5cGUoKQogICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdENDb21waWxlci5jCiAgICAgIiNpZmRlZiBfX2NwbHVzcGx1c1xuIgpAQCAtNTIsNyArNTIsNyBAQAogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkMiICIgLS0gYnJva2VuIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCiAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpAQCAtNjMsNyArNjMsNyBAQAogICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKIGVsc2UoKQogICBpZihDX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQyIgIiAtLSB3b3JrcyIpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEMgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgogICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDU2hhcnBDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q1NoYXJwQ29tcGlsZXIuY21ha2UKaW5kZXggNjcxNWMzMC4uMTExOWE0NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RDU2hhcnBDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENTaGFycENvbXBpbGVyLmNtYWtlCkBAIC0yMCw3ICsyMCw5IEBACiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9DU2hhcnBfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDIyIgIiR7Q01BS0VfQ1NoYXJwX0NPTVBJTEVSfSIpCisgICMgRG9uJ3QgY2FsbCBQcmludFRlc3RDb21waWxlclN0YXR1cygpIGJlY2F1c2UgdGhlICJDIyIgd2Ugd2FudCB0byBwYXNzCisgICMgYXMgdGhlIExBTkcgZG9lc24ndCBtYXRjaCB3aXRoIHRoZSB2YXJpYWJsZSBuYW1lICJDTUFLRV9DU2hhcnBfQ09NUElMRVIiCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGZvciB3b3JraW5nIEMjIGNvbXBpbGVyOiAke0NNQUtFX0NTaGFycF9DT01QSUxFUn0iKQogICBmaWxlKFdSSVRFICIke3Rlc3RfY29tcGlsZV9maWxlfSIKICAgICAibmFtZXNwYWNlIFRlc3QgeyIKICAgICAiICAgcHVibGljIGNsYXNzIENTaGFycCB7IgpAQCAtMzgsNyArNDAsNyBAQAogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfQ1NoYXJwX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQyMiICIke0NNQUtFX0NTaGFycF9DT01QSUxFUn0gLS0gYnJva2VuIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyMgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgogICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DU2hhcnBfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpAQCAtNDksNyArNTEsNyBAQAogICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKIGVsc2UoKQogICBpZihDU2hhcnBfVEVTVF9XQVNfUlVOKQotICAgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDIyIgIiR7Q01BS0VfQ1NoYXJwX0NPTVBJTEVSfSAtLSB3b3JrcyIpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEMjIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DU2hhcnBfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDVURBQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZQppbmRleCBmMDQ1NGRhLi4wNTgxMWE4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZQpAQCAtMjAsNyArMjAsNyBAQAogIyBpcyBzZXQgYW5kIGNtYWtlIHN0b3BzIHByb2Nlc3NpbmcgY29tbWFuZHMgYW5kIHdpbGwgbm90IGdlbmVyYXRlCiAjIGFueSBtYWtlZmlsZXMgb3IgcHJvamVjdHMuCiBpZihOT1QgQ01BS0VfQ1VEQV9DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkNVREEiICIiKQorICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1VEQSIpCiAgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9tYWluLmN1CiAgICAgIiNpZm5kZWYgX19DVURBQ0NfX1xuIgogICAgICIjIGVycm9yIFwiVGhlIENNQUtFX0NVREFfQ09NUElMRVIgaXMgc2V0IHRvIGFuIGludmFsaWQgQ1VEQSBjb21waWxlclwiXG4iCkBAIC0zOCw3ICszOCw3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1VEQSIgIiAtLSBicm9rZW4iKQorICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQogICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDVURBIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1VEQV9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCkBAIC00OSw3ICs0OSw3IEBACiAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQogZWxzZSgpCiAgIGlmKENVREFfVEVTVF9XQVNfUlVOKQotICAgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDVURBIiAiIC0tIHdvcmtzIikKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1VEQSBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCiAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1VEQV9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCkBAIC01OCwxMiArNTgsMzggQEAKICAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VDVURBQ29tcGlsZXIuY21ha2UKICAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKICAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShDVURBICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNVREFDb21waWxlckFCSS5jdSkKKyAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGZlYXR1cmVzCisgIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQorICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRV9GRUFUVVJFUyhDVURBKQogCiAgIGlmKCJ4JHtDTUFLRV9DVURBX1NJTVVMQVRFX0lEfSIgU1RSRVFVQUwgInhNU1ZDIikKICAgICBzZXQoQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyAiJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVN9IikKICAgICBzZXQoQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTICIke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSIpCiAgIGVuZGlmKCkKIAorICAjIFJlbW92ZSB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBhbmQKKyAgIyBDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTCisgICMKKyAgIyAtIGN1ZGFydAorICAjIC0gY3VkYXJ0X3N0YXRpYworICAjIC0gY3VkYWRldnJ0CisgICMKKyAgIyBUaGVzZSBhcmUgY29udHJvbGxlZCBieSBDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWQorICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREFfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgY3VkYXJ0IGN1ZGFydF9zdGF0aWMgY3VkYWRldnJ0KQorICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBjdWRhcnQgY3VkYXJ0X3N0YXRpYyBjdWRhZGV2cnQpCisKKyAgIyBSZW1vdmUgdGhlIENVREEgVG9vbGtpdCBpbmNsdWRlIGRpcmVjdG9yaWVzIGZyb20gdGhlIHNldCBvZgorICAjIGltcGxpY2l0IHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzLgorICAjIFRoaXMgcmVzb2x2ZXMgdGhlIGlzc3VlIHRoYXQgTlZDQyBkb2Vzbid0IHNwZWNpZnkgdGhlc2UKKyAgIyBpbmNsdWRlcyBhcyBTWVNURU0gaW5jbHVkZXMgd2hlbiBjb21waWxpbmcgZGV2aWNlIGNvZGUsIGFuZCBzb21ldGltZXMKKyAgIyB0aGV5IGNvbnRhaW4gaGVhZGVycyB0aGF0IGdlbmVyYXRlIHdhcm5pbmdzLCBzbyBsZXQgdXNlcnMgbWFyayB0aGVtCisgICMgYXMgU1lTVEVNIGV4cGxpY2l0bHkKKyAgaWYoQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgICAgbGlzdChSRU1PVkVfSVRFTSBDTUFLRV9DVURBX0lNUExJQ0lUX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICR7Q01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVN9CisgICAgICApCisgIGVuZGlmKCkKKwogICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCiAgIGNvbmZpZ3VyZV9maWxlKAogICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNVREFDb21waWxlci5jbWFrZS5pbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDWFhDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q1hYQ29tcGlsZXIuY21ha2UKaW5kZXggN2U1OTViNy4uYmQ0MjE1MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RDWFhDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENYWENvbXBpbGVyLmNtYWtlCkBAIC0yNyw3ICsyNyw3IEBACiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDWFgiICIiKQorICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1hYIikKICAgX19UZXN0Q29tcGlsZXJfc2V0VHJ5Q29tcGlsZVRhcmdldFR5cGUoKQogICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdENYWENvbXBpbGVyLmN4eAogICAgICIjaWZuZGVmIF9fY3BsdXNwbHVzXG4iCkBAIC00NSw3ICs0NSw3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDWFgiICIgLS0gYnJva2VuIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1hYX0NPTVBJTEVSX09VVFBVVH1cblxuIikKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCiBlbHNlKCkKICAgaWYoQ1hYX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1hYIiAiIC0tIHdvcmtzIikKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDb21waWxlckNvbW1vbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q29tcGlsZXJDb21tb24uY21ha2UKaW5kZXggNmVlNTE3NS4uZGE3YzAwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RDb21waWxlckNvbW1vbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENvbXBpbGVyQ29tbW9uLmNtYWtlCkBAIC0yLDggKzIsMTUgQEAKICMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KIAogCi1mdW5jdGlvbihQcmludFRlc3RDb21waWxlclN0YXR1cyBMQU5HIE1TRykKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciB3b3JraW5nICR7TEFOR30gY29tcGlsZXI6ICR7Q01BS0VfJHtMQU5HfV9DT01QSUxFUn0ke01TR30iKQorZnVuY3Rpb24oUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMgTEFORykKKyAgIyBBUkdOIHNob3VsZG4ndCBiZSBuZWVkZWQgbm93LCBidXQgaXQgaXMgdGhlcmUgdG8gcHJlc2VydmUgYmFja3dhcmQKKyAgIyBjb21wYXRpYmlsaXR5IGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcm9qZWN0IGNvZGUgb3IKKyAgIyBjdXN0b20gdG9vbGNoYWlucyAodGhleSBzaG91bGRuJ3QsIGJ1dCB3ZSBjYW4gZWFzaWx5IHN1cHBvcnQgaXQpCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGZvciB3b3JraW5nICR7TEFOR30gY29tcGlsZXI6ICR7Q01BS0VfJHtMQU5HfV9DT01QSUxFUn0ke0FSR059IikKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQgVFlQRSBNU0cpCisgIG1lc3NhZ2UoJHtUWVBFfSAiJHtNU0d9IikKIGVuZGZ1bmN0aW9uKCkKIAogIyBpZiByZXF1aXJlZCBzZXQgdGhlIHRhcmdldCB0eXBlIGlmIG5vdCBhbHJlYWR5IGV4cGxpY2l0bHkgc2V0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdEZvcnRyYW5Db21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlCmluZGV4IGU5ODYwZTkuLjc0NjFmOWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlCkBAIC0yMSw3ICsyMSw3IEBACiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiRm9ydHJhbiIgIiIpCisgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJGb3J0cmFuIikKICAgZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3Rlc3RGb3J0cmFuQ29tcGlsZXIuZiAiCiAgICAgICAgIFBST0dSQU0gVEVTVEZvcnRyYW4KICAgICAgICAgUFJJTlQgKiwgJ0hlbGxvJwpAQCAtMzcsNyArMzcsNyBAQAogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkZvcnRyYW4iICIgIC0tIGJyb2tlbiIpCisgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCiAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgogICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQpAQCAtNDgsNyArNDgsNyBAQAogICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKIGVsc2UoKQogICBpZihGT1JUUkFOX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiRm9ydHJhbiIgIiAgLS0gd29ya3MiKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICMgVGVzdCBmb3IgRm9ydHJhbiA5MCBzdXBwb3J0IGJ5IHVzaW5nIGFuIGY5MC1zcGVjaWZpYyBjb25zdHJ1Y3QuCiAgIGlmKE5PVCBERUZJTkVEIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gc3VwcG9ydHMgRm9ydHJhbiA5MCIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2tpbmcgd2hldGhlciAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IHN1cHBvcnRzIEZvcnRyYW4gOTAiKQogICAgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0Rm9ydHJhbkNvbXBpbGVyRjkwLmY5MCAiCiAgICAgICBQUk9HUkFNIFRFU1RGb3J0cmFuOTAKICAgICAgIGludGVnZXIgc3RvcCA7IHN0b3AgPSAxIDsgZG8gd2hpbGUgKCBzdG9wIC5lcS4gMCApIDsgZW5kIGRvCkBAIC03MCwxMyArNzAsMTMgQEAKICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlckY5MC5mOTAKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAgICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTApCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgd2hldGhlciAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IHN1cHBvcnRzIEZvcnRyYW4gOTAgLS0geWVzIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAieWVzIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgRm9ydHJhbiBjb21waWxlciBzdXBwb3J0cyBGb3J0cmFuIDkwIHBhc3NlZCB3aXRoICIKICAgICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCiAgICAgICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgMSkKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gc3VwcG9ydHMgRm9ydHJhbiA5MCAtLSBubyIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHN1cHBvcnRzIEZvcnRyYW4gOTAgZmFpbGVkIHdpdGggIgogICAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VUZXN0T0JKQ0NvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UKaW5kZXggMDAzMDY4My4uYmNjNmZhZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UKQEAgLTI3LDcgKzI3LDcgQEAKICMgaXMgc2V0IGFuZCBjbWFrZSBzdG9wcyBwcm9jZXNzaW5nIGNvbW1hbmRzIGFuZCB3aWxsIG5vdCBnZW5lcmF0ZQogIyBhbnkgbWFrZWZpbGVzIG9yIHByb2plY3RzLgogaWYoTk9UIENNQUtFX09CSkNfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJPQkpDIiAiIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIk9CSkMiKQogICBfX1Rlc3RDb21waWxlcl9zZXRUcnlDb21waWxlVGFyZ2V0VHlwZSgpCiAgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0T0JKQ0NvbXBpbGVyLm0KICAgICAiI2lmZGVmIF9fY3BsdXNwbHVzXG4iCkBAIC00OSw3ICs0OSw3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQyIgIiAtLSBicm9rZW4iKQorICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQogICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgIkRldGVybWluaW5nIGlmIHRoZSBPYmplY3RpdmUtQyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCiAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpAQCAtNjAsNyArNjAsNyBAQAogICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKIGVsc2UoKQogICBpZihPQkpDX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQyIgIiAtLSB3b3JrcyIpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDX0NPTVBJTEVSX09VVFBVVH1cblxuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VUZXN0T0JKQ1hYQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNYWENvbXBpbGVyLmNtYWtlCmluZGV4IGJjY2UyZjEuLjgzMjI3ZDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0T0JKQ1hYQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDWFhDb21waWxlci5jbWFrZQpAQCAtMjcsNyArMjcsNyBAQAogIyBpcyBzZXQgYW5kIGNtYWtlIHN0b3BzIHByb2Nlc3NpbmcgY29tbWFuZHMgYW5kIHdpbGwgbm90IGdlbmVyYXRlCiAjIGFueSBtYWtlZmlsZXMgb3IgcHJvamVjdHMuCiBpZihOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQ1hYIiAiIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIk9CSkNYWCIpCiAgIF9fVGVzdENvbXBpbGVyX3NldFRyeUNvbXBpbGVUYXJnZXRUeXBlKCkKICAgZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3Rlc3RPQkpDWFhDb21waWxlci5tbQogICAgICIjaWZuZGVmIF9fY3BsdXNwbHVzXG4iCkBAIC00OCw3ICs0OCw3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJPQkpDWFgiICIgLS0gYnJva2VuIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJEZXRlcm1pbmluZyBpZiB0aGUgT2JqZWN0aXZlLUMrKyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCiAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNYWF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCkBAIC01OSw3ICs1OSw3IEBACiAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQogZWxzZSgpCiAgIGlmKE9CSkNYWF9URVNUX1dBU19SVU4pCi0gICAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIk9CSkNYWCIgIiAtLSB3b3JrcyIpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgogICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNYWF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdFN3aWZ0Q29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdFN3aWZ0Q29tcGlsZXIuY21ha2UKaW5kZXggODQxYWVlNi4uZDk4ZGM5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RTd2lmdENvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0U3dpZnRDb21waWxlci5jbWFrZQpAQCAtMjAsNyArMjAsNyBAQAogIyBpcyBzZXQgYW5kIGNtYWtlIHN0b3BzIHByb2Nlc3NpbmcgY29tbWFuZHMgYW5kIHdpbGwgbm90IGdlbmVyYXRlCiAjIGFueSBtYWtlZmlsZXMgb3IgcHJvamVjdHMuCiBpZihOT1QgQ01BS0VfU3dpZnRfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJTd2lmdCIgIiIpCisgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJTd2lmdCIpCiAgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9tYWluLnN3aWZ0CiAgICAgInByaW50KFwiQ01ha2VcIilcbiIpCiAgIHRyeV9jb21waWxlKENNQUtFX1N3aWZ0X0NPTVBJTEVSX1dPUktTICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTMzLDcgKzMzLDcgQEAKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX1N3aWZ0X0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiU3dpZnQiICIgLS0gYnJva2VuIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJEZXRlcm1pbmluZyBpZiB0aGUgU3dpZnQgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgogICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9Td2lmdF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCkBAIC00NCwxMiArNDQsMTcgQEAKICAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCiBlbHNlKCkKICAgaWYoU3dpZnRfVEVTVF9XQVNfUlVOKQotICAgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJTd2lmdCIgIiAtLSB3b3JrcyIpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIFN3aWZ0IGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9Td2lmdF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCiAgIGVuZGlmKCkKIAorICAjIFVubGlrZSBDIGFuZCBDWFggd2UgZG8gbm90IHlldCBkZXRlY3QgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBTd2lmdCBBQkkuCisgICMgSG93ZXZlciwgb25lIG9mIHRoZSBzdGVwcyBkb25lIGZvciBDIGFuZCBDWFggYXMgcGFydCBvZiB0aGF0IGRldGVjdGlvbiBpcworICAjIHRvIGluaXRpYWxpemUgdGhlIGltcGxpY2l0IGluY2x1ZGUgZGlyZWN0b3JpZXMuICBUaGF0IGlzIHJlbGV2YW50IGhlcmUuCisgIHNldChDTUFLRV9Td2lmdF9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTICIke19DTUFLRV9Td2lmdF9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTX0lOSVR9IikKKwogICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCiAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZVN3aWZ0Q29tcGlsZXIuY21ha2UuaW4KICAgICAgICAgICAgICAgICAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VTd2lmdENvbXBpbGVyLmNtYWtlIEBPTkxZKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DUGFjay5jbWFrZSBiL01vZHVsZXMvQ1BhY2suY21ha2UKaW5kZXggYzJlZDNkZS4uNjIzNGI5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DUGFjay5jbWFrZQorKysgYi9Nb2R1bGVzL0NQYWNrLmNtYWtlCkBAIC01LDI2ICs1LDMxIEBACiBDUGFjawogLS0tLS0KIAotQnVpbGQgYmluYXJ5IGFuZCBzb3VyY2UgcGFja2FnZSBpbnN0YWxsZXJzLgorQ29uZmlndXJlIGdlbmVyYXRvcnMgZm9yIGJpbmFyeSBpbnN0YWxsZXJzIGFuZCBzb3VyY2UgcGFja2FnZXMuCiAKIEludHJvZHVjdGlvbgogXl5eXl5eXl5eXl5eCiAKLVRoZSBDUGFjayBtb2R1bGUgZ2VuZXJhdGVzIGEgZmlsZSBgYENQYWNrQ29uZmlnLmNtYWtlYGAgaW50ZW5kZWQgZm9yCi11c2UgaW4gYSBzdWJzZXF1ZW50IHJ1biBvZiAgdGhlIDptYW51YWw6YGNwYWNrIDxjcGFjaygxKT5gIHByb2dyYW0KLXdoZXJlIGl0IHN0ZWVycyB0aGUgZ2VuZXJhdGlvbiBvZiBpbnN0YWxsZXJzIG9yL2FuZCBzb3VyY2UgcGFja2FnZXMuCitUaGUgQ1BhY2sgbW9kdWxlIGdlbmVyYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBgYENQYWNrQ29uZmlnLmNtYWtlYGAKK2FuZCBgYENQYWNrU291cmNlQ29uZmlnLmNtYWtlYGAuIFRoZXkgYXJlIGludGVuZGVkIGZvciB1c2UgaW4gYSBzdWJzZXF1ZW50CitydW4gb2YgIHRoZSA6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBwcm9ncmFtIHdoZXJlIHRoZXkgc3RlZXIgdGhlIGdlbmVyYXRpb24KK29mIGluc3RhbGxlcnMgb3IvYW5kIHNvdXJjZSBwYWNrYWdlcy4KIAotSW5jbHVzaW9uIG9mIHRoZSBDUGFjayBtb2R1bGUgYWRkcyB0d28gbmV3IGJ1aWxkIHRhcmdldHMsIGBgcGFja2FnZWBgCi1hbmQgYGBwYWNrYWdlX3NvdXJjZWBgLCB3aGljaCBidWlsZCB0aGUgYmluYXJ5IGFuZCBzb3VyY2UgaW5zdGFsbGVycwotcmVzcGVjdGl2ZWx5LiAgVGhlIGdlbmVyYXRlZCBiaW5hcnkgaW5zdGFsbGVycyBjb250YWluIGV2ZXJ5dGhpbmcKLWluc3RhbGxlZCB2aWEgQ01ha2UncyA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZCAoYW5kIHRoZSBkZXByZWNhdGVkCi1jb21tYW5kcyA6Y29tbWFuZDpgaW5zdGFsbF9maWxlc2AsIDpjb21tYW5kOmBpbnN0YWxsX3Byb2dyYW1zYCwgYW5kCi06Y29tbWFuZDpgaW5zdGFsbF90YXJnZXRzYCkuCitEZXBlbmRpbmcgb24gdGhlIENNYWtlIGdlbmVyYXRvciwgdGhlIENQYWNrIG1vZHVsZSBtYXkgYWxzbyBhZGQgdHdvIG5ldyBidWlsZAordGFyZ2V0cywgYGBwYWNrYWdlYGAgYW5kIGBgcGFja2FnZV9zb3VyY2VgYC4gU2VlIHRoZSBgcGFja2FnaW5nIHRhcmdldHNgXworc2VjdGlvbiBiZWxvdyBmb3IgZGV0YWlscy4KIAotRm9yIGNlcnRhaW4ga2luZHMgb2YgYmluYXJ5IGluc3RhbGxlcnMgKGluY2x1ZGluZyB0aGUgZ3JhcGhpY2FsCi1pbnN0YWxsZXJzIG9uIG1hY09TIGFuZCBXaW5kb3dzKSwgQ1BhY2sgZ2VuZXJhdGVzIGluc3RhbGxlcnMgdGhhdAotYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGluZGl2aWR1YWwgYXBwbGljYXRpb24gY29tcG9uZW50cyB0byBpbnN0YWxsLgotU2VlIDptb2R1bGU6YENQYWNrQ29tcG9uZW50YCBtb2R1bGUgZm9yIGZ1cnRoZXIgZGV0YWlscy4KK1RoZSBnZW5lcmF0ZWQgYmluYXJ5IGluc3RhbGxlcnMgd2lsbCBjb250YWluIGFsbCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBpbnN0YWxsZWQKK3ZpYSBDTWFrZSdzIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kIChhbmQgdGhlIGRlcHJlY2F0ZWQgY29tbWFuZHMKKzpjb21tYW5kOmBpbnN0YWxsX2ZpbGVzYCwgOmNvbW1hbmQ6YGluc3RhbGxfcHJvZ3JhbXNgLCBhbmQKKzpjb21tYW5kOmBpbnN0YWxsX3RhcmdldHNgKS4gIENlcnRhaW4ga2luZHMgb2YgYmluYXJ5IGluc3RhbGxlcnMgY2FuIGJlCitjb25maWd1cmVkIHN1Y2ggdGhhdCB1c2VycyBjYW4gc2VsZWN0IGluZGl2aWR1YWwgYXBwbGljYXRpb24gY29tcG9uZW50cyB0bworaW5zdGFsbC4gIFNlZSB0aGUgOm1vZHVsZTpgQ1BhY2tDb21wb25lbnRgIG1vZHVsZSBmb3IgZnVydGhlciBkZXRhaWxzLgorCitTb3VyY2UgcGFja2FnZXMgKGNvbmZpZ3VyZWQgdGhyb3VnaCBgYENQYWNrU291cmNlQ29uZmlnLmNtYWtlYGAgYW5kIGdlbmVyYXRlZAorYnkgdGhlIDpjcGFja19nZW46YENQYWNrIEFyY2hpdmUgR2VuZXJhdG9yYCkgd2lsbCBjb250YWluIGFsbCBzb3VyY2UgZmlsZXMgaW4KK3RoZSBwcm9qZWN0IGRpcmVjdG9yeSBleGNlcHQgdGhvc2Ugc3BlY2lmaWVkIGluCis6dmFyaWFibGU6YENQQUNLX1NPVVJDRV9JR05PUkVfRklMRVNgLgogCiBDUGFjayBHZW5lcmF0b3JzCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC0zNywxMCArNDIsNiBAQAogOnZhcmlhYmxlOmBDUEFDS19HRU5FUkFUT1JgIGlzIGEgKnN0cmluZyBuYW1pbmcgYSBzaW5nbGUgZ2VuZXJhdG9yKi4gIElmIHlvdQogbmVlZCBwZXItY3BhY2stZ2VuZXJhdG9yIGxvZ2ljIHRvIGNvbnRyb2wgKm90aGVyKiBjcGFjayBzZXR0aW5ncywgdGhlbiB5b3UKIG5lZWQgYSA6dmFyaWFibGU6YENQQUNLX1BST0pFQ1RfQ09ORklHX0ZJTEVgLgotCi1UaGUgQ01ha2Ugc291cmNlIHRyZWUgaXRzZWxmIGNvbnRhaW5zIGEgOnZhcmlhYmxlOmBDUEFDS19QUk9KRUNUX0NPTkZJR19GSUxFYC4KLVNlZSB0aGUgdG9wIGxldmVsIGZpbGUgYGBDTWFrZUNQYWNrT3B0aW9ucy5jbWFrZS5pbmBgIGZvciBhbiBleGFtcGxlLgotCiBJZiBzZXQsIHRoZSA6dmFyaWFibGU6YENQQUNLX1BST0pFQ1RfQ09ORklHX0ZJTEVgIGlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkKIG9uIGEgcGVyLWdlbmVyYXRvciBiYXNpcy4gIEl0IG9ubHkgbmVlZCBjb250YWluIG92ZXJyaWRlcy4KIApAQCAtNjMsNiArNjQsMjYgQEAKIGludGVybmFsbHkgdG8gKnRoZSBvbmUgY3VycmVudGx5IGJlaW5nIHVzZWQqIGFuZCB0aGVuIGluY2x1ZGUgdGhlCiA6dmFyaWFibGU6YENQQUNLX1BST0pFQ1RfQ09ORklHX0ZJTEVgLgogCitGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBnZW5lcmF0b3JzLCBzZWUgOm1hbnVhbDpgY3BhY2stZ2VuZXJhdG9ycyg3KWAuCisKKy4uIF9gcGFja2FnaW5nIHRhcmdldHNgOgorCitUYXJnZXRzIHBhY2thZ2UgYW5kIHBhY2thZ2Vfc291cmNlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lmIENNYWtlIGlzIHJ1biB3aXRoIHRoZSBNYWtlZmlsZSwgTmluamEsIG9yIFhjb2RlIGdlbmVyYXRvciwgdGhlbgorYGBpbmNsdWRlKENQYWNrKWBgIGdlbmVyYXRlcyBhIHRhcmdldCBgYHBhY2thZ2VgYC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZQordG8gYnVpbGQgYSBiaW5hcnkgaW5zdGFsbGVyIGZyb20gQ01ha2UsIE1ha2UsIG9yIE5pbmphOiBJbnN0ZWFkIG9mIGBgY3BhY2tgYCwKK29uZSBtYXkgY2FsbCBgYGNtYWtlIC0tYnVpbGQgLiAtLXRhcmdldCBwYWNrYWdlYGAgb3IgYGBtYWtlIHBhY2thZ2VgYCBvcgorYGBuaW5qYSBwYWNrYWdlYGAuIFRoZSBWUyBnZW5lcmF0b3IgY3JlYXRlcyBhbiB1cHBlcmNhc2UgdGFyZ2V0IGBgUEFDS0FHRWBgLgorCitJZiBDTWFrZSBpcyBydW4gd2l0aCB0aGUgTWFrZWZpbGUgb3IgTmluamEgZ2VuZXJhdG9yLCB0aGVuIGBgaW5jbHVkZShDUGFjaylgYAorYWxzbyBnZW5lcmF0ZXMgYSB0YXJnZXQgYGBwYWNrYWdlX3NvdXJjZWBgLiBUbyBidWlsZCBhIHNvdXJjZSBwYWNrYWdlLAoraW5zdGVhZCBvZiBgYGNwYWNrIC1HIFRHWiAtLWNvbmZpZyBDUGFja0NvbmZpZy5jbWFrZWBgIG9uZSBtYXkgY2FsbAorYGBjbWFrZSAtLWJ1aWxkIC4gLS10YXJnZXQgcGFja2FnZV9zb3VyY2VgYCwgYGBtYWtlIHBhY2thZ2Vfc291cmNlYGAsCitvciBgYG5pbmphIHBhY2thZ2Vfc291cmNlYGAuCisKKwogVmFyaWFibGVzIGNvbW1vbiB0byBhbGwgQ1BhY2sgR2VuZXJhdG9ycwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC01NjMsMTEgKzU4NCwxOSBAQAogICAgICAgaWYoQVBQTEUpCiAgICAgICAgIG9wdGlvbihDUEFDS19CSU5BUllfQlVORExFICAgICAgICJFbmFibGUgdG8gYnVpbGQgT1NYIGJ1bmRsZXMiICAgICAgT0ZGKQogICAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX0RSQUdORFJPUCAgICAiRW5hYmxlIHRvIGJ1aWxkIE9TWCBEcmFnIEFuZCBEcm9wIHBhY2thZ2UiIE9GRikKLSAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9PU1hYMTEgICAgICAgIkVuYWJsZSB0byBidWlsZCBPU1ggWDExIHBhY2thZ2VzIiAgICAgIE9GRikKLSAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9QQUNLQUdFTUFLRVIgIkVuYWJsZSB0byBidWlsZCBQYWNrYWdlTWFrZXIgcGFja2FnZXMiIE9GRikKKyAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9PU1hYMTEgICAgICAgIkVuYWJsZSB0byBidWlsZCBPU1ggWDExIHBhY2thZ2VzIChkZXByZWNhdGVkKSIgT0ZGKQorICAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1BBQ0tBR0VNQUtFUiAiRW5hYmxlIHRvIGJ1aWxkIFBhY2thZ2VNYWtlciBwYWNrYWdlcyAoZGVwcmVjYXRlZCkiIE9GRikKICAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9QUk9EVUNUQlVJTEQgIkVuYWJsZSB0byBidWlsZCBwcm9kdWN0YnVpbGQgcGFja2FnZXMiIE9GRikKKyAgICAgICAgbWFya19hc19hZHZhbmNlZCgKKyAgICAgICAgICBDUEFDS19CSU5BUllfQlVORExFCisgICAgICAgICAgQ1BBQ0tfQklOQVJZX0RSQUdORFJPUAorICAgICAgICAgIENQQUNLX0JJTkFSWV9PU1hYMTEKKyAgICAgICAgICBDUEFDS19CSU5BUllfUEFDS0FHRU1BS0VSCisgICAgICAgICAgQ1BBQ0tfQklOQVJZX1BST0RVQ1RCVUlMRAorICAgICAgICAgICkKICAgICAgIGVsc2UoKQogICAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1RaICAiRW5hYmxlIHRvIGJ1aWxkIFRaIHBhY2thZ2VzIiAgICAgT04pCisgICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1BBQ0tfQklOQVJZX1RaKQogICAgICAgZW5kaWYoKQogICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9ERUIgICJFbmFibGUgdG8gYnVpbGQgRGViaWFuIHBhY2thZ2VzIiAgT0ZGKQogICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9GUkVFQlNEICAiRW5hYmxlIHRvIGJ1aWxkIEZyZWVCU0QgcGFja2FnZXMiICBPRkYpCkBAIC01NzcsNiArNjA2LDE2IEBACiAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1RCWjIgIkVuYWJsZSB0byBidWlsZCBUQloyIHBhY2thZ2VzIiAgICBPRkYpCiAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1RHWiAgIkVuYWJsZSB0byBidWlsZCBUR1ogcGFja2FnZXMiICAgICBPTikKICAgICAgIG9wdGlvbihDUEFDS19CSU5BUllfVFhaICAiRW5hYmxlIHRvIGJ1aWxkIFRYWiBwYWNrYWdlcyIgICAgIE9GRikKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoCisgICAgICAgIENQQUNLX0JJTkFSWV9ERUIKKyAgICAgICAgQ1BBQ0tfQklOQVJZX0ZSRUVCU0QKKyAgICAgICAgQ1BBQ0tfQklOQVJZX05TSVMKKyAgICAgICAgQ1BBQ0tfQklOQVJZX1JQTQorICAgICAgICBDUEFDS19CSU5BUllfU1RHWgorICAgICAgICBDUEFDS19CSU5BUllfVEJaMgorICAgICAgICBDUEFDS19CSU5BUllfVEdaCisgICAgICAgIENQQUNLX0JJTkFSWV9UWFoKKyAgICAgICAgKQogICAgIGVuZGlmKCkKICAgZWxzZSgpCiAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV83WiAgICAiRW5hYmxlIHRvIGJ1aWxkIDctWmlwIHBhY2thZ2VzIiBPRkYpCkBAIC01ODQsOCArNjIzLDE2IEBACiAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9OVUdFVCAiRW5hYmxlIHRvIGJ1aWxkIE51R2V0IHBhY2thZ2VzIiBPRkYpCiAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9XSVggICAiRW5hYmxlIHRvIGJ1aWxkIFdpWCBwYWNrYWdlcyIgT0ZGKQogICAgIG9wdGlvbihDUEFDS19CSU5BUllfWklQICAgIkVuYWJsZSB0byBidWlsZCBaSVAgcGFja2FnZXMiIE9GRikKKyAgICBtYXJrX2FzX2FkdmFuY2VkKAorICAgICAgQ1BBQ0tfQklOQVJZXzdaCisgICAgICBDUEFDS19CSU5BUllfTlNJUworICAgICAgQ1BBQ0tfQklOQVJZX05VR0VUCisgICAgICBDUEFDS19CSU5BUllfV0lYCisgICAgICBDUEFDS19CSU5BUllfWklQCisgICAgICApCiAgIGVuZGlmKCkKICAgb3B0aW9uKENQQUNLX0JJTkFSWV9JRlcgIkVuYWJsZSB0byBidWlsZCBJRlcgcGFja2FnZXMiIE9GRikKKyAgbWFya19hc19hZHZhbmNlZChDUEFDS19CSU5BUllfSUZXKQogCiAgIGNwYWNrX29wdGlvbmFsX2FwcGVuZChDUEFDS19HRU5FUkFUT1IgIENQQUNLX0JJTkFSWV83WiAgICAgICAgICAgN1opCiAgIGNwYWNrX29wdGlvbmFsX2FwcGVuZChDUEFDS19HRU5FUkFUT1IgIENQQUNLX0JJTkFSWV9CVU5ETEUgICAgICAgQnVuZGxlKQpAQCAtNjE1LDYgKzY2Miw3IEBACiAgIGlmKFVOSVgpCiAgICAgaWYoQ1lHV0lOKQogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9DWUdXSU4gIkVuYWJsZSB0byBidWlsZCBDeWd3aW4gc291cmNlIHBhY2thZ2VzIiBPTikKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1BBQ0tfU09VUkNFX0NZR1dJTikKICAgICBlbHNlKCkKICAgICAgIG9wdGlvbihDUEFDS19TT1VSQ0VfUlBNICAiRW5hYmxlIHRvIGJ1aWxkIFJQTSBzb3VyY2UgcGFja2FnZXMiICBPRkYpCiAgICAgICBvcHRpb24oQ1BBQ0tfU09VUkNFX1RCWjIgIkVuYWJsZSB0byBidWlsZCBUQloyIHNvdXJjZSBwYWNrYWdlcyIgT04pCkBAIC02MjIsMTAgKzY3MCwyMiBAQAogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9UWFogICJFbmFibGUgdG8gYnVpbGQgVFhaIHNvdXJjZSBwYWNrYWdlcyIgIE9OKQogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9UWiAgICJFbmFibGUgdG8gYnVpbGQgVFogc291cmNlIHBhY2thZ2VzIiAgIE9OKQogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9aSVAgICJFbmFibGUgdG8gYnVpbGQgWklQIHNvdXJjZSBwYWNrYWdlcyIgIE9GRikKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoCisgICAgICAgIENQQUNLX1NPVVJDRV9SUE0KKyAgICAgICAgQ1BBQ0tfU09VUkNFX1RCWjIKKyAgICAgICAgQ1BBQ0tfU09VUkNFX1RHWgorICAgICAgICBDUEFDS19TT1VSQ0VfVFhaCisgICAgICAgIENQQUNLX1NPVVJDRV9UWgorICAgICAgICBDUEFDS19TT1VSQ0VfWklQCisgICAgICAgICkKICAgICBlbmRpZigpCiAgIGVsc2UoKQogICAgIG9wdGlvbihDUEFDS19TT1VSQ0VfN1ogICJFbmFibGUgdG8gYnVpbGQgNy1aaXAgc291cmNlIHBhY2thZ2VzIiBPTikKICAgICBvcHRpb24oQ1BBQ0tfU09VUkNFX1pJUCAiRW5hYmxlIHRvIGJ1aWxkIFpJUCBzb3VyY2UgcGFja2FnZXMiIE9OKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoCisgICAgICBDUEFDS19TT1VSQ0VfN1oKKyAgICAgIENQQUNLX1NPVVJDRV9aSVAKKyAgICAgICkKICAgZW5kaWYoKQogCiAgIGNwYWNrX29wdGlvbmFsX2FwcGVuZChDUEFDS19TT1VSQ0VfR0VORVJBVE9SICBDUEFDS19TT1VSQ0VfN1ogICAgICA3WikKQEAgLTYzOCwzOCArNjk4LDYgQEAKICAgY3BhY2tfb3B0aW9uYWxfYXBwZW5kKENQQUNLX1NPVVJDRV9HRU5FUkFUT1IgIENQQUNLX1NPVVJDRV9aSVAgICAgIFpJUCkKIGVuZGlmKCkKIAotIyBtYXJrIHRoZSBhYm92ZSBvcHRpb25zIGFzIGFkdmFuY2VkCi1tYXJrX2FzX2FkdmFuY2VkKAotICBDUEFDS19CSU5BUllfN1oKLSAgQ1BBQ0tfQklOQVJZX0JVTkRMRQotICBDUEFDS19CSU5BUllfQ1lHV0lOCi0gIENQQUNLX0JJTkFSWV9ERUIKLSAgQ1BBQ0tfQklOQVJZX0RSQUdORFJPUAotICBDUEFDS19CSU5BUllfRlJFRUJTRAotICBDUEFDS19CSU5BUllfSUZXCi0gIENQQUNLX0JJTkFSWV9OU0lTCi0gIENQQUNLX0JJTkFSWV9OVUdFVAotICBDUEFDS19CSU5BUllfT1NYWDExCi0gIENQQUNLX0JJTkFSWV9QQUNLQUdFTUFLRVIKLSAgQ1BBQ0tfQklOQVJZX1BST0RVQ1RCVUlMRAotICBDUEFDS19CSU5BUllfUlBNCi0gIENQQUNLX0JJTkFSWV9TVEdaCi0gIENQQUNLX0JJTkFSWV9UQloyCi0gIENQQUNLX0JJTkFSWV9UR1oKLSAgQ1BBQ0tfQklOQVJZX1RYWgotICBDUEFDS19CSU5BUllfVFoKLSAgQ1BBQ0tfQklOQVJZX1dJWAotICBDUEFDS19CSU5BUllfWklQCi0gIENQQUNLX1NPVVJDRV83WgotICBDUEFDS19TT1VSQ0VfQ1lHV0lOCi0gIENQQUNLX1NPVVJDRV9SUE0KLSAgQ1BBQ0tfU09VUkNFX1RCWjIKLSAgQ1BBQ0tfU09VUkNFX1RHWgotICBDUEFDS19TT1VSQ0VfVFhaCi0gIENQQUNLX1NPVVJDRV9UWgotICBDUEFDS19TT1VSQ0VfWklQCi0gICkKLQogIyBTZXQgc29tZSBvdGhlciB2YXJpYWJsZXMKIF9jcGFja19zZXRfZGVmYXVsdChDUEFDS19JTlNUQUxMX0NNQUtFX1BST0pFQ1RTCiAgICIke0NNQUtFX0JJTkFSWV9ESVJ9OyR7Q01BS0VfUFJPSkVDVF9OQU1FfTtBTEw7LyIpCkBAIC02ODQsNiArNzEyLDggQEAKICMgdmFsdWUgb2YgQ1BBQ0tfTlNJU19QQUNLQUdFX05BTUUgIGluc3RlYWQKICMgb2YgQ1BBQ0tfUEFDS0FHRV9JTlNUQUxMX0RJUkVDVE9SWQogX2NwYWNrX3NldF9kZWZhdWx0KENQQUNLX05TSVNfRElTUExBWV9OQU1FICIke0NQQUNLX1BBQ0tBR0VfSU5TVEFMTF9ESVJFQ1RPUll9IikKKyMgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVW5pbnN0YWxsIGZpbGUgaW4gTlNJUworX2NwYWNrX3NldF9kZWZhdWx0KENQQUNLX05TSVNfVU5JTlNUQUxMX05BTUUgIlVuaW5zdGFsbCIpCiAKIGlmKENQQUNLX05TSVNfRElTUExBWV9OQU1FX1NFVCkKICAgX2NwYWNrX3NldF9kZWZhdWx0KENQQUNLX05TSVNfUEFDS0FHRV9OQU1FICIke0NQQUNLX05TSVNfRElTUExBWV9OQU1FfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NQYWNrQ29tcG9uZW50LmNtYWtlIGIvTW9kdWxlcy9DUGFja0NvbXBvbmVudC5jbWFrZQppbmRleCAyMTFkNzY3Li4xZjhjMzhjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NQYWNrQ29tcG9uZW50LmNtYWtlCisrKyBiL01vZHVsZXMvQ1BhY2tDb21wb25lbnQuY21ha2UKQEAgLTUsMjkgKzUsMzQgQEAKIENQYWNrQ29tcG9uZW50CiAtLS0tLS0tLS0tLS0tLQogCi1CdWlsZCBiaW5hcnkgYW5kIHNvdXJjZSBwYWNrYWdlIGluc3RhbGxlcnMKK0NvbmZpZ3VyZSBjb21wb25lbnRzIGZvciBiaW5hcnkgaW5zdGFsbGVycyBhbmQgc291cmNlIHBhY2thZ2VzLgogCi1WYXJpYWJsZXMgY29uY2VybmluZyBDUGFjayBDb21wb25lbnRzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisuLiBvbmx5OjogaHRtbAogCi1UaGUgQ1BhY2tDb21wb25lbnQgbW9kdWxlIGlzIHRoZSBtb2R1bGUgd2hpY2ggaGFuZGxlcyB0aGUgY29tcG9uZW50Ci1wYXJ0IG9mIENQYWNrLiAgU2VlIENQYWNrIG1vZHVsZSBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBDUGFjay4KKyAgLi4gY29udGVudHM6OgogCi1Gb3IgY2VydGFpbiBraW5kcyBvZiBiaW5hcnkgaW5zdGFsbGVycyAoaW5jbHVkaW5nIHRoZSBncmFwaGljYWwKLWluc3RhbGxlcnMgb24gbWFjT1MgYW5kIFdpbmRvd3MpLCBDUGFjayBnZW5lcmF0ZXMgaW5zdGFsbGVycyB0aGF0Ci1hbGxvdyB1c2VycyB0byBzZWxlY3QgaW5kaXZpZHVhbCBhcHBsaWNhdGlvbiBjb21wb25lbnRzIHRvIGluc3RhbGwuCi1UaGUgY29udGVudHMgb2YgZWFjaCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaWRlbnRpZmllZCBieSB0aGUgQ09NUE9ORU5UCi1hcmd1bWVudCBvZiBDTWFrZSdzIElOU1RBTEwgY29tbWFuZC4gIFRoZXNlIGNvbXBvbmVudHMgY2FuIGJlCitJbnRyb2R1Y3Rpb24KK15eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5IDptb2R1bGU6YENQYWNrYC4KKworQ2VydGFpbiBiaW5hcnkgaW5zdGFsbGVycyAoZXNwZWNpYWxseSB0aGUgZ3JhcGhpY2FsIGluc3RhbGxlcnMpIGdlbmVyYXRlZAorYnkgQ1BhY2sgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGluZGl2aWR1YWwgYXBwbGljYXRpb24gKmNvbXBvbmVudHMqIHRvIGluc3RhbGwuCitUaGlzIG1vZHVsZSBhbGxvd3MgZGV2ZWxvcGVycyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2luZyBvZiBzdWNoIGNvbXBvbmVudHMuCisKK0NvbnRlbnRzIGlzIGFzc2lnbmVkIHRvIGNvbXBvbmVudHMgYnkgdGhlIGBgQ09NUE9ORU5UYGAKK2FyZ3VtZW50IG9mIENNYWtlJ3MgOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQuICBDb21wb25lbnRzIGNhbiBiZQogYW5ub3RhdGVkIHdpdGggdXNlci1mcmllbmRseSBuYW1lcyBhbmQgZGVzY3JpcHRpb25zLCBpbnRlci1jb21wb25lbnQKIGRlcGVuZGVuY2llcywgZXRjLiwgYW5kIGdyb3VwZWQgaW4gdmFyaW91cyB3YXlzIHRvIGN1c3RvbWl6ZSB0aGUKLXJlc3VsdGluZyBpbnN0YWxsZXIuICBTZWUgdGhlIGNwYWNrX2FkZF8qIGNvbW1hbmRzLCBkZXNjcmliZWQgYmVsb3csCi1mb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wb25lbnQtc3BlY2lmaWMgaW5zdGFsbGF0aW9ucy4KK3Jlc3VsdGluZyBpbnN0YWxsZXIsIHVzaW5nIHRoZSBjb21tYW5kcyBkZXNjcmliZWQgYmVsb3cuCiAKLUNvbXBvbmVudC1zcGVjaWZpYyBpbnN0YWxsYXRpb24gYWxsb3dzIHVzZXJzIHRvIHNlbGVjdCBzcGVjaWZpYyBzZXRzCi1vZiBjb21wb25lbnRzIHRvIGluc3RhbGwgZHVyaW5nIHRoZSBpbnN0YWxsIHByb2Nlc3MuICBJbnN0YWxsYXRpb24KLWNvbXBvbmVudHMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIENPTVBPTkVOVCBhcmd1bWVudCBvZiBDTWFrZSdzIElOU1RBTEwKLWNvbW1hbmRzLCBhbmQgc2hvdWxkIGJlIGZ1cnRoZXIgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgQ1BhY2sKLWNvbW1hbmRzOgorVG8gc3BlY2lmeSBkaWZmZXJlbnQgZ3JvdXBpbmdzIGZvciBkaWZmZXJlbnQgQ1BhY2sgZ2VuZXJhdG9ycyB1c2UKK2EgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRS4KKworVmFyaWFibGVzCiteXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW5mbHVlbmNlIHRoZSBjb21wb25lbnQtc3BlY2lmaWMgcGFja2FnaW5nOgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0NPTVBPTkVOVFNfQUxMCiAKQEAgLTYxLDE2ICs2NiwxNCBAQAogIFNwZWNpZnkgaG93IGNvbXBvbmVudHMgYXJlIGdyb3VwZWQgZm9yIG11bHRpLXBhY2thZ2UgY29tcG9uZW50LWF3YXJlIENQYWNrCiAgZ2VuZXJhdG9ycy4KIAotIFNvbWUgZ2VuZXJhdG9ycyBsaWtlIFJQTSBvciBBUkNISVZFIGZhbWlseSAoVEdaLCBaSVAsIC4uLikgZ2VuZXJhdGVzCi0gc2V2ZXJhbCBwYWNrYWdlcyBmaWxlcyB3aGVuIGFza2VkIGZvciBjb21wb25lbnQgcGFja2FnaW5nLiAgVGhleSBncm91cAotIHRoZSBjb21wb25lbnQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlOgorIFNvbWUgZ2VuZXJhdG9ycyBsaWtlIFJQTSBvciBBUkNISVZFIChUR1osIFpJUCwgLi4uKSBtYXkgZ2VuZXJhdGUKKyBzZXZlcmFsIHBhY2thZ2VzIGZpbGVzIHdoZW4gdGhlcmUgYXJlIGNvbXBvbmVudHMsIGRlcGVuZGluZworIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlOgogCi0gKiBPTkVfUEVSX0dST1VQIChkZWZhdWx0KTogY3JlYXRlcyBvbmUgcGFja2FnZSBmaWxlIHBlciBjb21wb25lbnQgZ3JvdXAKLSAqIEFMTF9DT01QT05FTlRTX0lOX09ORSA6IGNyZWF0ZXMgYSBzaW5nbGUgcGFja2FnZSB3aXRoIGFsbCAocmVxdWVzdGVkKSBjb21wb25lbnRzCi0gKiBJR05PUkUgOiBjcmVhdGVzIG9uZSBwYWNrYWdlIHBlciBjb21wb25lbnQsIGkuZS4gSUdOT1JFIGNvbXBvbmVudCBncm91cAotCi0gT25lIGNhbiBzcGVjaWZ5IGRpZmZlcmVudCBncm91cGluZyBmb3IgZGlmZmVyZW50IENQYWNrIGdlbmVyYXRvciBieQotIHVzaW5nIGEgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRS4KKyAqIE9ORV9QRVJfR1JPVVAgKGRlZmF1bHQpOiBjcmVhdGUgb25lIHBhY2thZ2UgcGVyIGNvbXBvbmVudCBncm91cAorICogSUdOT1JFIDogY3JlYXRlIG9uZSBwYWNrYWdlIHBlciBjb21wb25lbnQgKGlnbm9yZSB0aGUgZ3JvdXBzKQorICogQUxMX0NPTVBPTkVOVFNfSU5fT05FIDogY3JlYXRlIGEgc2luZ2xlIHBhY2thZ2Ugd2l0aCBhbGwgcmVxdWVzdGVkCisgICBjb21wb25lbnRzCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQ09NUE9ORU5UXzxjb21wTmFtZT5fRElTUExBWV9OQU1FCiAKQEAgLTEwMCwxMCArMTAzLDE1IEBACiAKICBUcnVlIGlmIHRoaXMgY29tcG9uZW50IGlzIG5vdCBzZWxlY3RlZCB0byBiZSBpbnN0YWxsZWQgYnkgZGVmYXVsdC4KIAorQ29tbWFuZHMKK15eXl5eXl5eCisKK0FkZCBjb21wb25lbnQKKyIiIiIiIiIiIiIiIiIKKwogLi4gY29tbWFuZDo6IGNwYWNrX2FkZF9jb21wb25lbnQKIAotRGVzY3JpYmVzIGEgQ1BhY2sgaW5zdGFsbGF0aW9uCi1jb21wb25lbnQgbmFtZWQgYnkgdGhlIENPTVBPTkVOVCBhcmd1bWVudCB0byBhIENNYWtlIElOU1RBTEwgY29tbWFuZC4KK0Rlc2NyaWJlIGFuIGluc3RhbGxhdGlvbiBjb21wb25lbnQuCiAKIDo6CiAKQEAgLTExOCwxMyArMTI2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgW0FSQ0hJVkVfRklMRSBmaWxlbmFtZV0KICAgICAgICAgICAgICAgICAgICAgICBbUExJU1QgZmlsZW5hbWVdKQogCi0KLQotVGhlIGNtYWtlX2FkZF9jb21wb25lbnQgY29tbWFuZCBkZXNjcmliZXMgYW4gaW5zdGFsbGF0aW9uIGNvbXBvbmVudCwKLXdoaWNoIHRoZSB1c2VyIGNhbiBvcHQgdG8gaW5zdGFsbCBvciByZW1vdmUgYXMgcGFydCBvZiB0aGUgZ3JhcGhpY2FsCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIGNvbXBuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQsIGFzCi1wcm92aWRlZCB0byB0aGUgQ09NUE9ORU5UIGFyZ3VtZW50IG9mIG9uZSBvciBtb3JlIENNYWtlIElOU1RBTEwKLWNvbW1hbmRzLgorYGBjb21wbmFtZWBgIGlzIHRoZSBuYW1lIG9mIGFuIGluc3RhbGxhdGlvbiBjb21wb25lbnQsIGFzIGRlZmluZWQgYnkgdGhlCitgYENPTVBPTkVOVGBgIGFyZ3VtZW50IG9mIG9uZSBvciBtb3JlIENNYWtlIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kcy4KK1dpdGggdGhlIGBgY3BhY2tfYWRkX2NvbXBvbmVudGBgIGNvbW1hbmQgb25lIGNhbiBzZXQgYSBuYW1lLCBhIGRlc2NyaXB0aW9uLAorYW5kIG90aGVyIGF0dHJpYnV0ZXMgb2YgYW4gaW5zdGFsbGF0aW9uIGNvbXBvbmVudC4KK09uZSBjYW4gYWxzbyBhc3NpZ24gYSBjb21wb25lbnQgdG8gYSBjb21wb25lbnQgZ3JvdXAuCiAKIERJU1BMQVlfTkFNRSBpcyB0aGUgZGlzcGxheWVkIG5hbWUgb2YgdGhlIGNvbXBvbmVudCwgdXNlZCBpbiBncmFwaGljYWwKIGluc3RhbGxlcnMgdG8gZGlzcGxheSB0aGUgY29tcG9uZW50IG5hbWUuICBUaGlzIHZhbHVlIGNhbiBiZSBhbnkKQEAgLTE3Nyw2ICsxODMsOSBAQAogUExJU1QgZ2l2ZXMgYSBmaWxlbmFtZSB0aGF0IGlzIHBhc3NlZCB0byBwa2didWlsZCB3aXRoIHRoZQogYGAtLWNvbXBvbmVudC1wbGlzdGBgIGFyZ3VtZW50IHdoZW4gdXNpbmcgdGhlIHByb2R1Y3RidWlsZCBnZW5lcmF0b3IuCiAKK0FkZCBjb21wb25lbnQgZ3JvdXAKKyIiIiIiIiIiIiIiIiIiIiIiIiIKKwogLi4gY29tbWFuZDo6IGNwYWNrX2FkZF9jb21wb25lbnRfZ3JvdXAKIAogRGVzY3JpYmVzIGEgZ3JvdXAgb2YgcmVsYXRlZCBDUGFjayBpbnN0YWxsYXRpb24gY29tcG9uZW50cy4KQEAgLTIyNSw2ICsyMzQsOSBAQAogQk9MRF9USVRMRSBpbmRpY2F0ZXMgdGhhdCB0aGUgZ3JvdXAgdGl0bGUgc2hvdWxkIGFwcGVhciBpbiBib2xkLCB0bwogY2FsbCB0aGUgdXNlcidzIGF0dGVudGlvbiB0byB0aGUgZ3JvdXAuCiAKK0FkZCBpbnN0YWxsYXRpb24gdHlwZQorIiIiIiIiIiIiIiIiIiIiIiIiIiIiCisKIC4uIGNvbW1hbmQ6OiBjcGFja19hZGRfaW5zdGFsbF90eXBlCiAKIEFkZCBhIG5ldyBpbnN0YWxsYXRpb24gdHlwZSBjb250YWluaW5nCkBAIC0yNDksNiArMjYxLDkgQEAKIHR5cGljYWxseSBzaG93IHVwIGluIGEgZHJvcC1kb3duIGJveCB3aXRoaW4gYSBncmFwaGljYWwgaW5zdGFsbGVyLgogVGhpcyB2YWx1ZSBjYW4gYmUgYW55IHN0cmluZy4KIAorQ29uZmlndXJlIGRvd25sb2FkcworIiIiIiIiIiIiIiIiIiIiIiIiIgorCiAuLiBjb21tYW5kOjogY3BhY2tfY29uZmlndXJlX2Rvd25sb2FkcwogCiBDb25maWd1cmUgQ1BhY2sgdG8gZG93bmxvYWQKQEAgLTI4MSw4ICsyOTYsNiBAQAogCiAgIGh0dHA6Ly9uc2lzLnNvdXJjZWZvcmdlLm5ldC9aaXBETExfcGx1Zy1pbgogCi0KLQogT24gbWFjT1MsIGluc3RhbGxlcnMgdGhhdCBkb3dubG9hZCBjb21wb25lbnRzIG9uLXRoZS1mbHkgY2FuIG9ubHkKIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgb24gc3lzdGVtIHVzaW5nIG1hY09TIDEwLjUgb3IgbGF0ZXIuCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1BhY2tJRlcuY21ha2UgYi9Nb2R1bGVzL0NQYWNrSUZXLmNtYWtlCmluZGV4IDQyZWY4YzcuLmY1OGY5ZWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1BhY2tJRlcuY21ha2UKKysrIGIvTW9kdWxlcy9DUGFja0lGVy5jbWFrZQpAQCAtNSwxNSArNSwxMiBAQAogQ1BhY2tJRlcKIC0tLS0tLS0tCiAKLVRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ1BhY2sgSUZXIGdlbmVyYXRvciBoYXMgbW92ZWQgaGVyZTogOmNwYWNrX2dlbjpgQ1BhY2sgSUZXIEdlbmVyYXRvcmAKLQotLi4gX1F0SUZXOiBodHRwOi8vZG9jLnF0LmlvL3F0aW5zdGFsbGVyZnJhbWV3b3JrL2luZGV4Lmh0bWwKLQotVGhpcyBtb2R1bGUgbG9va3MgZm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbWFuZCBsaW5lIHV0aWxpdGllcyBzdXBwbGllZAotd2l0aCB0aGUgUXQgSW5zdGFsbGVyIEZyYW1ld29yayAoUXRJRldfKS4KK1RoaXMgbW9kdWxlIGxvb2tzIGZvciB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMgc3VwcGxpZWQgd2l0aCB0aGUKK2BRdCBJbnN0YWxsZXIgRnJhbWV3b3JrIDxodHRwOi8vZG9jLnF0LmlvL3F0aW5zdGFsbGVyZnJhbWV3b3JrL2luZGV4Lmh0bWw+YF8KKyhRdElGVykuCiAKIFRoZSBtb2R1bGUgYWxzbyBkZWZpbmVzIHNldmVyYWwgY29tbWFuZHMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhlCi1DUGFjayBgYElGV2BgIGdlbmVyYXRvci4KKzpjcGFja19nZW46YENQYWNrIElGVyBHZW5lcmF0b3JgLgogCiBDb21tYW5kcwogXl5eXl5eXl4KQEAgLTEwMiwxMCArOTksMTAgQEAKIAogICBgYERFUEVORFNgYCB8IGBgREVQRU5ERU5DSUVTYGAKICAgICBsaXN0IG9mIGRlcGVuZGVuY3kgY29tcG9uZW50IG9yIGNvbXBvbmVudCBncm91cCBpZGVudGlmaWVycyBpbgotICAgIFF0SUZXXyBzdHlsZS4KKyAgICBRdElGVyBzdHlsZS4KIAogICBgYEFVVE9fREVQRU5EX09OYGAKLSAgICBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIGNvbXBvbmVudCBvciBjb21wb25lbnQgZ3JvdXAgaW4gUXRJRldfIHN0eWxlCisgICAgbGlzdCBvZiBpZGVudGlmaWVycyBvZiBjb21wb25lbnQgb3IgY29tcG9uZW50IGdyb3VwIGluIFF0SUZXIHN0eWxlCiAgICAgdGhhdCB0aGlzIGNvbXBvbmVudCBoYXMgYW4gYXV0b21hdGljIGRlcGVuZGVuY3kgb24uCiAKICAgYGBMSUNFTlNFU2BgCkBAIC0yMDcsMTAgKzIwNCwxMCBAQAogCiAgIGBgREVQRU5EU2BgIHwgYGBERVBFTkRFTkNJRVNgYAogICAgIGxpc3Qgb2YgZGVwZW5kZW5jeSBjb21wb25lbnQgb3IgY29tcG9uZW50IGdyb3VwIGlkZW50aWZpZXJzIGluCi0gICAgUXRJRldfIHN0eWxlLgorICAgIFF0SUZXIHN0eWxlLgogCiAgIGBgQVVUT19ERVBFTkRfT05gYAotICAgIGxpc3Qgb2YgaWRlbnRpZmllcnMgb2YgY29tcG9uZW50IG9yIGNvbXBvbmVudCBncm91cCBpbiBRdElGV18gc3R5bGUKKyAgICBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIGNvbXBvbmVudCBvciBjb21wb25lbnQgZ3JvdXAgaW4gUXRJRlcgc3R5bGUKICAgICB0aGF0IHRoaXMgY29tcG9uZW50IGdyb3VwIGhhcyBhbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSBvbi4KIAogICBgYExJQ0VOU0VTYGAKQEAgLTI0Miw3ICsyMzksNyBAQAogCiAuLiBjb21tYW5kOjogY3BhY2tfaWZ3X2FkZF9yZXBvc2l0b3J5CiAKLSAgQWRkIFF0SUZXXyBzcGVjaWZpYyByZW1vdGUgcmVwb3NpdG9yeSB0byBiaW5hcnkgaW5zdGFsbGVyLgorICBBZGQgUXRJRlcgc3BlY2lmaWMgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYmluYXJ5IGluc3RhbGxlci4KIAogICA6OgogCkBAIC0yNzMsNyArMjcwLDcgQEAKIAogLi4gY29tbWFuZDo6IGNwYWNrX2lmd191cGRhdGVfcmVwb3NpdG9yeQogCi0gIFVwZGF0ZSBRdElGV18gc3BlY2lmaWMgcmVwb3NpdG9yeSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LgorICBVcGRhdGUgUXRJRlcgc3BlY2lmaWMgcmVwb3NpdG9yeSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LgogCiAgIDo6CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1Rlc3QuY21ha2UgYi9Nb2R1bGVzL0NUZXN0LmNtYWtlCmluZGV4IDNhMTExY2EuLjgxMDkxMDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1Rlc3QuY21ha2UKKysrIGIvTW9kdWxlcy9DVGVzdC5jbWFrZQpAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgIkhvdyBtYW55IHRpbWVzIHRvIHJldHJ5IHRpbWVkLW91dCBDVGVzdCBzdWJtaXNzaW9ucy4iKQogCiAgIGZpbmRfcHJvZ3JhbShNRU1PUllDSEVDS19DT01NQU5ECi0gICAgTkFNRVMgcHVyaWZ5IHZhbGdyaW5kIGJvdW5kc2NoZWNrCisgICAgTkFNRVMgcHVyaWZ5IHZhbGdyaW5kIGJvdW5kc2NoZWNrIGRybWVtb3J5CiAgICAgUEFUSFMKICAgICAiW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFJhdGlvbmFsIFNvZnR3YXJlXFxQdXJpZnlcXFNldHVwO0luc3RhbGxGb2xkZXJdIgogICAgIERPQyAiUGF0aCB0byB0aGUgbWVtb3J5IGNoZWNraW5nIGNvbW1hbmQsIHVzZWQgZm9yIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24uIgpAQCAtMjQzLDcgKzI0Myw2IEBACiAKICAgbWFya19hc19hZHZhbmNlZCgKICAgICBCWlJDT01NQU5ECi0gICAgQlpSX1VQREFURV9PUFRJT05TCiAgICAgQ09WRVJBR0VfQ09NTUFORAogICAgIENPVkVSQUdFX0VYVFJBX0ZMQUdTCiAgICAgQ1RFU1RfU1VCTUlUX1JFVFJZX0RFTEFZCkBAIC0yNTcsMTMgKzI1NiwxMCBAQAogICAgIE1BS0VDT01NQU5ECiAgICAgTUVNT1JZQ0hFQ0tfQ09NTUFORAogICAgIE1FTU9SWUNIRUNLX1NVUFBSRVNTSU9OU19GSUxFCi0gICAgUFVSSUZZQ09NTUFORAotICAgIFNDUENPTU1BTkQKICAgICBTTFVSTV9TQkFUQ0hfQ09NTUFORAogICAgIFNMVVJNX1NSVU5fQ09NTUFORAogICAgIFNJVEUKICAgICBTVk5DT01NQU5ECi0gICAgU1ZOX1VQREFURV9PUFRJT05TCiAgICAgKQogICBpZihOT1QgUlVOX0ZST01fREFSVCkKICAgICBzZXQoUlVOX0ZST01fQ1RFU1RfT1JfREFSVCAxKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0NDb21waWxlckZsYWcuY21ha2UgYi9Nb2R1bGVzL0NoZWNrQ0NvbXBpbGVyRmxhZy5jbWFrZQppbmRleCBhM2UyZGEzLi42ZDY1MzEzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrQ0NvbXBpbGVyRmxhZy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrQ0NvbXBpbGVyRmxhZy5jbWFrZQpAQCAtMzYsMjggKzM2LDIzIEBACiBpbmNsdWRlKENoZWNrQ1NvdXJjZUNvbXBpbGVzKQogaW5jbHVkZShDTWFrZUNoZWNrQ29tcGlsZXJGbGFnQ29tbW9uUGF0dGVybnMpCiAKLW1hY3JvIChDSEVDS19DX0NPTVBJTEVSX0ZMQUcgX0ZMQUcgX1JFU1VMVCkKLSAgc2V0KFNBRkVfQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlMgIiR7Q01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9IikKLSAgc2V0KENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke19GTEFHfSIpCitmdW5jdGlvbihjaGVja19jX2NvbXBpbGVyX2ZsYWcgX2ZsYWcgX3ZhcikKKyAgc2V0KENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke19mbGFnfSIpCiAKLSAgICMgTm9ybWFsaXplIGxvY2FsZSBkdXJpbmcgdGVzdCBjb21waWxhdGlvbi4KLSAgc2V0KF9DaGVja0NDb21waWxlckZsYWdfTE9DQUxFX1ZBUlMgTENfQUxMIExDX01FU1NBR0VTIExBTkcpCi0gIGZvcmVhY2godiAke19DaGVja0NDb21waWxlckZsYWdfTE9DQUxFX1ZBUlN9KQotICAgIHNldChfQ2hlY2tDQ29tcGlsZXJGbGFnX1NBVkVEXyR7dn0gIiRFTlZ7JHt2fX0iKQorICAjIE5vcm1hbGl6ZSBsb2NhbGUgZHVyaW5nIHRlc3QgY29tcGlsYXRpb24uCisgIHNldChfbG9jYWxlX3ZhcnMgTENfQUxMIExDX01FU1NBR0VTIExBTkcpCisgIGZvcmVhY2godiBJTiBMSVNUUyBfbG9jYWxlX3ZhcnMpCisgICAgc2V0KF9sb2NhbGVfdmFyc19zYXZlZF8ke3Z9ICIkRU5WeyR7dn19IikKICAgICBzZXQoRU5WeyR7dn19IEMpCiAgIGVuZGZvcmVhY2goKQotICBDSEVDS19DT01QSUxFUl9GTEFHX0NPTU1PTl9QQVRURVJOUyhfQ2hlY2tDQ29tcGlsZXJGbGFnX0NPTU1PTl9QQVRURVJOUykKLSAgQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVMoImludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0iICR7X1JFU1VMVH0KKyAgY2hlY2tfY29tcGlsZXJfZmxhZ19jb21tb25fcGF0dGVybnMoX2NvbW1vbl9wYXR0ZXJucykKKyAgY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoImludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0iICR7X3Zhcn0KICAgICAjIFNvbWUgY29tcGlsZXJzIGRvIG5vdCBmYWlsIHdpdGggYSBiYWQgZmxhZwogICAgIEZBSUxfUkVHRVggImNvbW1hbmQgbGluZSBvcHRpb24gLiogaXMgdmFsaWQgZm9yIC4qIGJ1dCBub3QgZm9yIEMiICMgR05VCi0gICAgJHtfQ2hlY2tDQ29tcGlsZXJGbGFnX0NPTU1PTl9QQVRURVJOU30KKyAgICAke19jb21tb25fcGF0dGVybnN9CiAgICAgKQotICBmb3JlYWNoKHYgJHtfQ2hlY2tDQ29tcGlsZXJGbGFnX0xPQ0FMRV9WQVJTfSkKLSAgICBzZXQoRU5WeyR7dn19ICR7X0NoZWNrQ0NvbXBpbGVyRmxhZ19TQVZFRF8ke3Z9fSkKLSAgICB1bnNldChfQ2hlY2tDQ29tcGlsZXJGbGFnX1NBVkVEXyR7dn0pCisgIGZvcmVhY2godiBJTiBMSVNUUyBfbG9jYWxlX3ZhcnMpCisgICAgc2V0KEVOVnske3Z9fSAke19sb2NhbGVfdmFyc19zYXZlZF8ke3Z9fSkKICAgZW5kZm9yZWFjaCgpCi0gIHVuc2V0KF9DaGVja0NDb21waWxlckZsYWdfTE9DQUxFX1ZBUlMpCi0gIHVuc2V0KF9DaGVja0NDb21waWxlckZsYWdfQ09NTU9OX1BBVFRFUk5TKQotCi0gIHNldCAoQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlMgIiR7U0FGRV9DTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30iKQotZW5kbWFjcm8gKCkKKyAgc2V0KCR7X3Zhcn0gIiR7JHtfdmFyfX0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tDU291cmNlQ29tcGlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrQ1NvdXJjZUNvbXBpbGVzLmNtYWtlCmluZGV4IDc3YmEwY2MuLjY3ZmM5OTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tDU291cmNlQ29tcGlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0NTb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAiJHtTT1VSQ0V9XG4iKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIHRyeV9jb21waWxlKCR7VkFSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgaWYoJHtWQVJ9KQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBDIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICJTb3VyY2UgZmlsZSB3YXM6XG4ke1NPVVJDRX1cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gRmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0NTb3VyY2VSdW5zLmNtYWtlIGIvTW9kdWxlcy9DaGVja0NTb3VyY2VSdW5zLmNtYWtlCmluZGV4IGViYTcwZjIuLjdkMTE2ZGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tDU291cmNlUnVucy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrQ1NvdXJjZVJ1bnMuY21ha2UKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X3J1bigke1ZBUn1fRVhJVENPREUgJHtWQVJ9X0NPTVBJTEVECiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICBpZigiJHske1ZBUn1fRVhJVENPREV9IiBFUVVBTCAwKQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBDIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcGlsZSBvdXRwdXQ6XG4iCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgIGVuZGlmKCkKIAogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgQyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbXBpbGUgb3V0cHV0OlxuIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0NYWENvbXBpbGVyRmxhZy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tDWFhDb21waWxlckZsYWcuY21ha2UKaW5kZXggNTcyOTg0My4uNWUwN2MyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0NYWENvbXBpbGVyRmxhZy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrQ1hYQ29tcGlsZXJGbGFnLmNtYWtlCkBAIC0zNiwyOCArMzYsMjMgQEAKIGluY2x1ZGUoQ2hlY2tDWFhTb3VyY2VDb21waWxlcykKIGluY2x1ZGUoQ01ha2VDaGVja0NvbXBpbGVyRmxhZ0NvbW1vblBhdHRlcm5zKQogCi1tYWNybyAoQ0hFQ0tfQ1hYX0NPTVBJTEVSX0ZMQUcgX0ZMQUcgX1JFU1VMVCkKLSAgc2V0KFNBRkVfQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlMgIiR7Q01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9IikKLSAgc2V0KENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke19GTEFHfSIpCitmdW5jdGlvbihjaGVja19jeHhfY29tcGlsZXJfZmxhZyBfZmxhZyBfdmFyKQorICBzZXQoQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlMgIiR7X2ZsYWd9IikKIAogICAjIE5vcm1hbGl6ZSBsb2NhbGUgZHVyaW5nIHRlc3QgY29tcGlsYXRpb24uCi0gIHNldChfQ2hlY2tDWFhDb21waWxlckZsYWdfTE9DQUxFX1ZBUlMgTENfQUxMIExDX01FU1NBR0VTIExBTkcpCi0gIGZvcmVhY2godiAke19DaGVja0NYWENvbXBpbGVyRmxhZ19MT0NBTEVfVkFSU30pCi0gICAgc2V0KF9DaGVja0NYWENvbXBpbGVyRmxhZ19TQVZFRF8ke3Z9ICIkRU5WeyR7dn19IikKKyAgc2V0KF9sb2NhbGVfdmFycyBMQ19BTEwgTENfTUVTU0FHRVMgTEFORykKKyAgZm9yZWFjaCh2IElOIExJU1RTIF9sb2NhbGVfdmFycykKKyAgICBzZXQoX2xvY2FsZV92YXJzX3NhdmVkXyR7dn0gIiRFTlZ7JHt2fX0iKQogICAgIHNldChFTlZ7JHt2fX0gQykKICAgZW5kZm9yZWFjaCgpCi0gIENIRUNLX0NPTVBJTEVSX0ZMQUdfQ09NTU9OX1BBVFRFUk5TKF9DaGVja0NYWENvbXBpbGVyRmxhZ19DT01NT05fUEFUVEVSTlMpCi0gIENIRUNLX0NYWF9TT1VSQ0VfQ09NUElMRVMoImludCBtYWluKCkgeyByZXR1cm4gMDsgfSIgJHtfUkVTVUxUfQorICBjaGVja19jb21waWxlcl9mbGFnX2NvbW1vbl9wYXR0ZXJucyhfY29tbW9uX3BhdHRlcm5zKQorICBjaGVja19jeHhfc291cmNlX2NvbXBpbGVzKCJpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0iICR7X3Zhcn0KICAgICAjIFNvbWUgY29tcGlsZXJzIGRvIG5vdCBmYWlsIHdpdGggYSBiYWQgZmxhZwogICAgIEZBSUxfUkVHRVggImNvbW1hbmQgbGluZSBvcHRpb24gLiogaXMgdmFsaWQgZm9yIC4qIGJ1dCBub3QgZm9yIENcXFxcK1xcXFwrIiAjIEdOVQotICAgICR7X0NoZWNrQ1hYQ29tcGlsZXJGbGFnX0NPTU1PTl9QQVRURVJOU30KKyAgICAke19jb21tb25fcGF0dGVybnN9CiAgICAgKQotICBmb3JlYWNoKHYgJHtfQ2hlY2tDWFhDb21waWxlckZsYWdfTE9DQUxFX1ZBUlN9KQotICAgIHNldChFTlZ7JHt2fX0gJHtfQ2hlY2tDWFhDb21waWxlckZsYWdfU0FWRURfJHt2fX0pCi0gICAgdW5zZXQoX0NoZWNrQ1hYQ29tcGlsZXJGbGFnX1NBVkVEXyR7dn0pCisgIGZvcmVhY2godiBJTiBMSVNUUyBfbG9jYWxlX3ZhcnMpCisgICAgc2V0KEVOVnske3Z9fSAke19sb2NhbGVfdmFyc19zYXZlZF8ke3Z9fSkKICAgZW5kZm9yZWFjaCgpCi0gIHVuc2V0KF9DaGVja0NYWENvbXBpbGVyRmxhZ19MT0NBTEVfVkFSUykKLSAgdW5zZXQoX0NoZWNrQ1hYQ29tcGlsZXJGbGFnX0NPTU1PTl9QQVRURVJOUykKLQotICBzZXQgKENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke1NBRkVfQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9IikKLWVuZG1hY3JvICgpCisgIHNldCgke192YXJ9ICIkeyR7X3Zhcn19IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlQ29tcGlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlQ29tcGlsZXMuY21ha2UKaW5kZXggY2M0NTdhNS4uYzY5M2QzMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0NYWFNvdXJjZUNvbXBpbGVzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tDWFhTb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAiJHtTT1VSQ0V9XG4iKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIHRyeV9jb21waWxlKCR7VkFSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgaWYoJHtWQVJ9KQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBDKysgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gc3VjY2VlZGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgIlNvdXJjZSBmaWxlIHdhczpcbiR7U09VUkNFfVxuIikKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJ9ICIiIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tDWFhTb3VyY2VSdW5zLmNtYWtlCmluZGV4IDVlM2YxOTUuLjQwOGUxODMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tDWFhTb3VyY2VSdW5zLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tDWFhTb3VyY2VSdW5zLmNtYWtlCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAiJHtTT1VSQ0V9XG4iKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIHRyeV9ydW4oJHtWQVJ9X0VYSVRDT0RFICR7VkFSfV9DT01QSUxFRAogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgaWYoIiR7JHtWQVJ9X0VYSVRDT0RFfSIgRVFVQUwgMCkKICAgICAgIHNldCgke1ZBUn0gMSBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIFN1Y2Nlc3MiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgQysrIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICBlbmRpZigpCiAKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIEMrKyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuRnVuY3Rpb25FeGlzdHMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrRm9ydHJhbkZ1bmN0aW9uRXhpc3RzLmNtYWtlCmluZGV4IDdjYTIwNWEuLmQwNjIwM2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuRnVuY3Rpb25FeGlzdHMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5GdW5jdGlvbkV4aXN0cy5jbWFrZQpAQCAtMzgsNyArMzgsNyBAQAogCiBtYWNybyhDSEVDS19GT1JUUkFOX0ZVTkNUSU9OX0VYSVNUUyBGVU5DVElPTiBWQVJJQUJMRSkKICAgaWYoTk9UIERFRklORUQgJHtWQVJJQUJMRX0pCi0gICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIEZvcnRyYW4gJHtGVU5DVElPTn0iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yIEZvcnRyYW4gJHtGVU5DVElPTn0iKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKICAgICAgIHNldChDSEVDS19GVU5DVElPTl9FWElTVFNfQUREX0xJTktfT1BUSU9OUwogICAgICAgICBMSU5LX09QVElPTlMgJHtDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlN9KQpAQCAtNjEsMjEgKzYxLDIwIEBACiAgICAgIgogICAgICkKICAgICB0cnlfY29tcGlsZSgke1ZBUklBQkxFfQotICAgICR7Q01BS0VfQklOQVJZX0RJUn0KLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3Rlc3RGb3J0cmFuQ29tcGlsZXIuZgotICAgICR7Q0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0FERF9MSU5LX09QVElPTlN9Ci0gICAgJHtDSEVDS19GVU5DVElPTl9FWElTVFNfQUREX0xJQlJBUklFU30KLSAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCisgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3Rlc3RGb3J0cmFuQ29tcGlsZXIuZgorICAgICAgJHtDSEVDS19GVU5DVElPTl9FWElTVFNfQUREX0xJTktfT1BUSU9OU30KKyAgICAgICR7Q0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0FERF9MSUJSQVJJRVN9CisgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCiAgICAgKQotIyAgICBtZXNzYWdlKFNUQVRVUyAiJHtPVVRQVVR9IikKICAgICBpZigke1ZBUklBQkxFfSkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIEZvcnRyYW4gZnVuY3Rpb24gJHtGVU5DVElPTn0iKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIEZvcnRyYW4gJHtGVU5DVElPTn0gLSBmb3VuZCIpCisgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgRm9ydHJhbiAke0ZVTkNUSU9OfSBleGlzdHMgcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cblxuIikKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBGb3J0cmFuICR7RlVOQ1RJT059IC0gbm90IGZvdW5kIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICAgIHNldCgke1ZBUklBQkxFfSAiIiBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBGb3J0cmFuIGZ1bmN0aW9uICR7RlVOQ1RJT059IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuICR7RlVOQ1RJT059IGV4aXN0cyBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzLmNtYWtlCmluZGV4IGY5NGIyNTQuLjMzNTRiZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Tb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtMTAzLDggKzEwMyw2IEBACiAgICAgaWYoTk9UIF9TUkNfRVhUKQogICAgICAgc2V0KF9TUkNfRVhUIEYpCiAgICAgZW5kaWYoKQotICAgIHNldChNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OUwotICAgICAgIi1EJHtWQVJ9ICR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IikKICAgICBpZihDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlMpCiAgICAgICBzZXQoQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJTktfT1BUSU9OUwogICAgICAgICBMSU5LX09QVElPTlMgJHtDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlN9KQpAQCAtMTI3LDE1ICsxMjUsMTUgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3NyYy4ke19TUkNfRVhUfQotICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfQorICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAtRCR7VkFSfSAke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfQogICAgICAgJHtDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElOS19PUFRJT05TfQogICAgICAgJHtDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElCUkFSSUVTfQotICAgICAgQ01BS0VfRkxBR1MgLURDT01QSUxFX0RFRklOSVRJT05TOlNUUklORz0ke01BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TfQorICAgICAgQ01BS0VfRkxBR1MgLURDT01QSUxFX0RFRklOSVRJT05TOlNUUklORz0ke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfQogICAgICAgIiR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0lOQ0xVREVTfSIKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAKQEAgLTE0OCw3ICsxNDYsNyBAQAogICAgIGlmKCR7VkFSfSkKICAgICAgIHNldCgke1ZBUn0gMSBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIFN1Y2Nlc3MiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgRm9ydHJhbiBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBzdWNjZWVkZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKQEAgLTE1Niw3ICsxNTQsNyBAQAogICAgICAgICAiU291cmNlIGZpbGUgd2FzOlxuJHtTT1VSQ0V9XG4iKQogICAgIGVsc2UoKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUn0gIiIgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlUnVucy5jbWFrZQppbmRleCBhODBjMTNkLi5mODU4Yjg0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZVJ1bnMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Tb3VyY2VSdW5zLmNtYWtlCkBAIC05OCw4ICs5OCw2IEBACiAgICAgaWYoTk9UIF9TUkNfRVhUKQogICAgICAgc2V0KF9TUkNfRVhUIEY5MCkKICAgICBlbmRpZigpCi0gICAgc2V0KE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TCi0gICAgICAiLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKICAgICAgIHNldChDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElOS19PUFRJT05TCiAgICAgICAgIExJTktfT1BUSU9OUyAke0NNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OU30pCkBAIC0xMjIsMTUgKzEyMCwxNSBAQAogICAgICAgIiR7U09VUkNFfVxuIikKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfcnVuKCR7VkFSfV9FWElUQ09ERSAke1ZBUn1fQ09NUElMRUQKICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvc3JjLiR7X1NSQ19FWFR9Ci0gICAgICBDT01QSUxFX0RFRklOSVRJT05TICR7Q01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9CisgICAgICBDT01QSUxFX0RFRklOSVRJT05TIC1EJHtWQVJ9ICR7Q01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9CiAgICAgICAke0NIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTX0FERF9MSU5LX09QVElPTlN9CiAgICAgICAke0NIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTX0FERF9MSUJSQVJJRVN9Ci0gICAgICBDTUFLRV9GTEFHUyAtRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7TUFDUk9fQ0hFQ0tfRlVOQ1RJT05fREVGSU5JVElPTlN9CisgICAgICBDTUFLRV9GTEFHUyAtRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7Q01BS0VfUkVRVUlSRURfRkxBR1N9CiAgICAgICAtRENNQUtFX1NLSVBfUlBBVEg6Qk9PTD0ke0NNQUtFX1NLSVBfUlBBVEh9CiAgICAgICAiJHtDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfSU5DTFVERVN9IgogICAgICAgQ09NUElMRV9PVVRQVVRfVkFSSUFCTEUgT1VUUFVUCkBAIC0xNDQsNyArMTQyLDcgQEAKICAgICBpZigiJHske1ZBUn1fRVhJVENPREV9IiBFUVVBTCAwKQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBGb3J0cmFuIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTYxLDcgKzE1OSw3IEBACiAgICAgICBlbmRpZigpCiAKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIEZvcnRyYW4gU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrRnVuY3Rpb25FeGlzdHMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrRnVuY3Rpb25FeGlzdHMuY21ha2UKaW5kZXggYzM5MTQ0Zi4uMTM2ZGE4OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0Z1bmN0aW9uRXhpc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tGdW5jdGlvbkV4aXN0cy5jbWFrZQpAQCAtNTcsNyArNTcsNyBAQAogICAgIHNldChNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OUwogICAgICAgIi1EQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTPSR7RlVOQ1RJT059ICR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IikKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtGVU5DVElPTn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiTG9va2luZyBmb3IgJHtGVU5DVElPTn0iKQogICAgIGVuZGlmKCkKICAgICBpZihDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlMpCiAgICAgICBzZXQoQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0FERF9MSU5LX09QVElPTlMKQEAgLTEwMSwxNCArMTAxLDE0IEBACiAgICAgaWYoJHtWQVJJQUJMRX0pCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBmdW5jdGlvbiAke0ZVTkNUSU9OfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIGZ1bmN0aW9uICR7RlVOQ1RJT059IGV4aXN0cyBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuXG4iKQogICAgIGVsc2UoKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtGVU5DVElPTn0gLSBub3QgZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgZnVuY3Rpb24gJHtGVU5DVElPTn0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0lQT1N1cHBvcnRlZC5jbWFrZSBiL01vZHVsZXMvQ2hlY2tJUE9TdXBwb3J0ZWQuY21ha2UKaW5kZXggMGQ2YWQyMC4uOTBhOWY2MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0lQT1N1cHBvcnRlZC5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkLmNtYWtlCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgZW5kZm9yZWFjaCgpCiAKICAgdHJ5X2NvbXBpbGUoCi0gICAgICByZXN1bHQKKyAgICAgIF9JUE9fTEFOR1VBR0VfQ0hFQ0tfUkVTVUxUCiAgICAgICAiJHtiaW5kaXJ9IgogICAgICAgIiR7c3JjZGlyfSIKICAgICAgICIke1RSWV9DT01QSUxFX1BST0pFQ1RfTkFNRX0iCkBAIC0xMjIsOCArMTIyLDEwIEBACiAgICAgICAiLURDTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OPU9OIgogICAgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAogICApCisgIHNldChfSVBPX0xBTkdVQUdFX0NIRUNLX1JFU1VMVCAiJHtfSVBPX0xBTkdVQUdFX0NIRUNLX1JFU1VMVH0iKQorICB1bnNldChfSVBPX0xBTkdVQUdFX0NIRUNLX1JFU1VMVCBDQUNIRSkKIAotICBpZihOT1QgcmVzdWx0KQorICBpZihOT1QgX0lQT19MQU5HVUFHRV9DSEVDS19SRVNVTFQpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgIiR7bGFuZ3VhZ2V9IGNvbXBpbGVyIElQTyBjaGVjayBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICIke291dHB1dH1cbiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGUuY21ha2UgYi9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGUuY21ha2UKaW5kZXggZDdiOTQ4MS4uM2ExMDQ3MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZS5jbWFrZQpAQCAtNTUsNyArNTUsNyBAQAogICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmMuaW4KICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvQ2hlY2tJbmNsdWRlRmlsZS5jKQogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0lOQ0xVREV9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yICR7SU5DTFVERX0iKQogICAgIGVuZGlmKCkKICAgICBpZigke0FSR0N9IEVRVUFMIDMpCiAgICAgICBzZXQoQ01BS0VfQ19GTEFHU19TQVZFICR7Q01BS0VfQ19GTEFHU30pCkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgIGlmKCR7VkFSSUFCTEV9KQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtJTkNMVURFfSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBpbmNsdWRlICR7SU5DTFVERX0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0lOQ0xVREV9IC0gbm90IGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJub3QgZm91bmQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSSUFCTEV9ICIiIENBQ0hFIElOVEVSTkFMICJIYXZlIGluY2x1ZGUgJHtJTkNMVURFfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGVDWFguY21ha2UgYi9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGVDWFguY21ha2UKaW5kZXggZGU1YTgzYi4uNDk2NTUwZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZUNYWC5jbWFrZQpAQCAtNTQsNyArNTQsNyBAQAogICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmN4eC5pbgogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9DaGVja0luY2x1ZGVGaWxlLmN4eCkKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgQysrIGluY2x1ZGUgJHtJTkNMVURFfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciBDKysgaW5jbHVkZSAke0lOQ0xVREV9IikKICAgICBlbmRpZigpCiAgICAgaWYoJHtBUkdDfSBFUVVBTCAzKQogICAgICAgc2V0KENNQUtFX0NYWF9GTEFHU19TQVZFICR7Q01BS0VfQ1hYX0ZMQUdTfSkKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgaWYoJHtWQVJJQUJMRX0pCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBDKysgaW5jbHVkZSAke0lOQ0xVREV9IC0gZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIGluY2x1ZGUgJHtJTkNMVURFfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICIke09VVFBVVH1cblxuIikKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIEMrKyBpbmNsdWRlICR7SU5DTFVERX0gLSBub3QgZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgaW5jbHVkZSAke0lOQ0xVREV9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGVzLmNtYWtlCmluZGV4IGY1MmFiNTUuLjhlMTBjZDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlcy5jbWFrZQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgZW5kaWYoKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7X2Rlc2NyaXB0aW9ufSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciAke19kZXNjcmlwdGlvbn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfY29tcGlsZSgke1ZBUklBQkxFfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgdW5zZXQoX0NJRl9MSU5LX0xJQlJBUklFUykKICAgICBpZigke1ZBUklBQkxFfSkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7X2Rlc2NyaXB0aW9ufSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBpbmNsdWRlICR7SU5DTFVERX0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke19kZXNjcmlwdGlvbn0gLSBub3QgZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgaW5jbHVkZXMgJHtJTkNMVURFfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrTGFuZ3VhZ2UuY21ha2UgYi9Nb2R1bGVzL0NoZWNrTGFuZ3VhZ2UuY21ha2UKaW5kZXggYTFhM2E3YS4uZjQ4MTA3YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0xhbmd1YWdlLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tMYW5ndWFnZS5jbWFrZQpAQCAtMzksNyArMzksNyBAQAogbWFjcm8oY2hlY2tfbGFuZ3VhZ2UgbGFuZykKICAgaWYoTk9UIERFRklORUQgQ01BS0VfJHtsYW5nfV9DT01QSUxFUikKICAgICBzZXQoX2Rlc2MgIkxvb2tpbmcgZm9yIGEgJHtsYW5nfSBjb21waWxlciIpCi0gICAgbWVzc2FnZShTVEFUVVMgJHtfZGVzY30pCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiJHtfZGVzY30iKQogICAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ2hlY2ske2xhbmd9KQogCiAgICAgc2V0KGV4dHJhX2NvbXBpbGVyX3ZhcmlhYmxlcykKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgIHNldChleHRyYV9jb21waWxlcl92YXJpYWJsZXMgInNldChDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIgXFxcIlwke0NNQUtFX0NVREFfSE9TVF9DT01QSUxFUn1cXFwiKSIpCiAgICAgZW5kaWYoKQogCi0gICAgc2V0KGNvbnRlbnQKKyAgICBzZXQoX2NsX2NvbnRlbnQKICAgICAgICJjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gJHtDTUFLRV9WRVJTSU9OfSkKIHByb2plY3QoQ2hlY2ske2xhbmd9ICR7bGFuZ30pCiBmaWxlKFdSSVRFIFwiXCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9yZXN1bHQuY21ha2VcIgpAQCAtNTcsMzQgKzU3LDQyIEBACiAgICAgKQogCiAgICAgZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ2hlY2ske2xhbmd9L0NNYWtlTGlzdHMudHh0IgotICAgICAgIiR7Y29udGVudH0iKQorICAgICAgIiR7X2NsX2NvbnRlbnR9IikKICAgICBpZihDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UpCiAgICAgICBzZXQoX0RfQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFICItRENNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRTpJTlRFUk5BTD0ke0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRX0iKQogICAgIGVsc2UoKQogICAgICAgc2V0KF9EX0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRSAiIikKICAgICBlbmRpZigpCisgICAgaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIl4oWGNvZGUkfEdyZWVuIEhpbGxzIE1VTFRJJHxWaXN1YWwgU3R1ZGlvKSIpCisgICAgICBzZXQoX0RfQ01BS0VfTUFLRV9QUk9HUkFNICIiKQorICAgIGVsc2UoKQorICAgICAgc2V0KF9EX0NNQUtFX01BS0VfUFJPR1JBTSAiLURDTUFLRV9NQUtFX1BST0dSQU06RklMRVBBVEg9JHtDTUFLRV9NQUtFX1BST0dSQU19IikKKyAgICBlbmRpZigpCiAgICAgZXhlY3V0ZV9wcm9jZXNzKAogICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ2hlY2ske2xhbmd9CiAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLiAtRyAke0NNQUtFX0dFTkVSQVRPUn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1BICIke0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVCAiJHtDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke19EX0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRX0KLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBvdXRwdXQKLSAgICAgIEVSUk9SX1ZBUklBQkxFIG91dHB1dAotICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfRF9DTUFLRV9NQUtFX1BST0dSQU19CisgICAgICBPVVRQVVRfVkFSSUFCTEUgX2NsX291dHB1dAorICAgICAgRVJST1JfVkFSSUFCTEUgX2NsX291dHB1dAorICAgICAgUkVTVUxUX1ZBUklBQkxFIF9jbF9yZXN1bHQKICAgICAgICkKICAgICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0NoZWNrJHtsYW5nfS9yZXN1bHQuY21ha2UgT1BUSU9OQUwpCi0gICAgaWYoQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBBTkQgIiR7cmVzdWx0fSIgU1RSRVFVQUwgIjAiKQorICAgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVIgQU5EICIke19jbF9yZXN1bHR9IiBTVFJFUVVBTCAiMCIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiJHtfZGVzY30gcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCi0gICAgICAgICIke291dHB1dH1cbiIpCisgICAgICAgICIke19jbF9vdXRwdXR9XG4iKQorICAgICAgc2V0KF9DSEVDS19DT01QSUxFUl9TVEFUVVMgQ0hFQ0tfUEFTUykKICAgICBlbHNlKCkKICAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSIE5PVEZPVU5EKQorICAgICAgc2V0KF9DSEVDS19DT01QSUxFUl9TVEFUVVMgQ0hFQ0tfRkFJTCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIiR7X2Rlc2N9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgotICAgICAgICAiJHtvdXRwdXR9XG4iKQorICAgICAgICAiJHtfY2xfb3V0cHV0fVxuIikKICAgICBlbmRpZigpCi0gICAgbWVzc2FnZShTVEFUVVMgIiR7X2Rlc2N9IC0gJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIpCisgICAgbWVzc2FnZSgke19DSEVDS19DT01QSUxFUl9TVEFUVVN9ICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9IikKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUiAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIgQ0FDSEUgRklMRVBBVEggIiR7bGFuZ30gY29tcGlsZXIiKQogICAgIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUikKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0xpYnJhcnlFeGlzdHMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrTGlicmFyeUV4aXN0cy5jbWFrZQppbmRleCA2NTA0ZGY1Li42NDcwZGZkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrTGlicmFyeUV4aXN0cy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrTGlicmFyeUV4aXN0cy5jbWFrZQpAQCAtNDIsNyArNDIsNyBAQAogICAgIHNldChNQUNST19DSEVDS19MSUJSQVJZX0VYSVNUU19ERUZJTklUSU9OCiAgICAgICAiLURDSEVDS19GVU5DVElPTl9FWElTVFM9JHtGVU5DVElPTn0gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSBpbiAke0xJQlJBUll9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yICR7RlVOQ1RJT059IGluICR7TElCUkFSWX0iKQogICAgIGVuZGlmKCkKICAgICBzZXQoQ0hFQ0tfTElCUkFSWV9FWElTVFNfTElOS19PUFRJT05TKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIGlmKCR7VkFSSUFCTEV9KQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtGVU5DVElPTn0gaW4gJHtMSUJSQVJZfSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBsaWJyYXJ5ICR7TElCUkFSWX0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgIiR7T1VUUFVUfVxuXG4iKQogICAgIGVsc2UoKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtGVU5DVElPTn0gaW4gJHtMSUJSQVJZfSAtIG5vdCBmb3VuZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAiIiBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBsaWJyYXJ5ICR7TElCUkFSWX0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VDb21waWxlcy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlQ29tcGlsZXMuY21ha2UKaW5kZXggYTQ2NzZhZC4uNjAxZjFmYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VDb21waWxlcy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZUNvbXBpbGVzLmNtYWtlCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICBpZigke1ZBUn0pCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICJTb3VyY2UgZmlsZSB3YXM6XG4ke1NPVVJDRX1cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gRmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VSdW5zLmNtYWtlIGIvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VSdW5zLmNtYWtlCmluZGV4IDAwYTFlYmQuLjY2ODQ2OTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlUnVucy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZVJ1bnMuY21ha2UKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X3J1bigke1ZBUn1fRVhJVENPREUgJHtWQVJ9X0NPTVBJTEVECiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICBpZigiJHske1ZBUn1fRVhJVENPREV9IiBFUVVBTCAwKQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBPYmplY3RpdmUtQyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBzdWNjZWVkZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbXBpbGUgb3V0cHV0OlxuIgpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICBlbmRpZigpCiAKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcGlsZSBvdXRwdXQ6XG4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlQ29tcGlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlQ29tcGlsZXMuY21ha2UKaW5kZXggNGMwZmRkMC4uMmVlNzlmNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja09CSkNYWFNvdXJjZUNvbXBpbGVzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAiJHtTT1VSQ0V9XG4iKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIHRyeV9jb21waWxlKCR7VkFSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgaWYoJHtWQVJ9KQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBPYmplY3RpdmUtQysrIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgICJTb3VyY2UgZmlsZSB3YXM6XG4ke1NPVVJDRX1cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gRmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja09CSkNYWFNvdXJjZVJ1bnMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlUnVucy5jbWFrZQppbmRleCBhM2Q1OTIzLi43ZjdlMDRmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlUnVucy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlUnVucy5jbWFrZQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgIiR7U09VUkNFfVxuIikKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfcnVuKCR7VkFSfV9FWElUQ09ERSAke1ZBUn1fQ09NUElMRUQKICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIGlmKCIkeyR7VkFSfV9FWElUQ09ERX0iIEVRVUFMIDApCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DKysgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gc3VjY2VlZGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgIGVuZGlmKCkKIAogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgT2JqZWN0aXZlLUMrKyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tQcm90b3R5cGVEZWZpbml0aW9uLmNtYWtlIGIvTW9kdWxlcy9DaGVja1Byb3RvdHlwZURlZmluaXRpb24uY21ha2UKaW5kZXggYTdiMDIwYy4uOGIwNjQwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1Byb3RvdHlwZURlZmluaXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja1Byb3RvdHlwZURlZmluaXRpb24uY21ha2UKQEAgLTU0LDYgKzU0LDkgQEAKIGZ1bmN0aW9uKGNoZWNrX3Byb3RvdHlwZV9kZWZpbml0aW9uIF9GVU5DVElPTiBfUFJPVE9UWVBFIF9SRVRVUk4gX0hFQURFUiBfVkFSSUFCTEUpCiAKICAgaWYgKE5PVCBERUZJTkVEICR7X1ZBUklBQkxFfSkKKyAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVja2luZyBwcm90b3R5cGUgJHtfRlVOQ1RJT059IGZvciAke19WQVJJQUJMRX0iKQorICAgIGVuZGlmKCkKICAgICBzZXQoQ0hFQ0tfUFJPVE9UWVBFX0RFRklOSVRJT05fQ09OVEVOVCAiLyogKi9cbiIpCiAKICAgICBzZXQoQ0hFQ0tfUFJPVE9UWVBFX0RFRklOSVRJT05fRkxBR1MgJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30pCkBAIC0xMDMsMTQgKzEwNiwxNCBAQAogICAgIGlmICgke19WQVJJQUJMRX0pCiAgICAgICBzZXQoJHtfVkFSSUFCTEV9IDEgQ0FDSEUgSU5URVJOQUwgIkhhdmUgY29ycmVjdCBwcm90b3R5cGUgZm9yICR7X0ZVTkNUSU9OfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBwcm90b3R5cGUgJHtfRlVOQ1RJT059IGZvciAke19WQVJJQUJMRX0gLSBUcnVlIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJUcnVlIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgcHJvdG90eXBlICR7X0ZVTkNUSU9OfSBleGlzdHMgZm9yICR7X1ZBUklBQkxFfSBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuXG4iKQogICAgIGVsc2UgKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHByb3RvdHlwZSAke19GVU5DVElPTn0gZm9yICR7X1ZBUklBQkxFfSAtIEZhbHNlIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWxzZSIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtfVkFSSUFCTEV9IDAgQ0FDSEUgSU5URVJOQUwgIkhhdmUgY29ycmVjdCBwcm90b3R5cGUgZm9yICR7X0ZVTkNUSU9OfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrU3ltYm9sRXhpc3RzLmNtYWtlIGIvTW9kdWxlcy9DaGVja1N5bWJvbEV4aXN0cy5jbWFrZQppbmRleCAxMDUzMzgzLi40ZjIwMmM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrU3ltYm9sRXhpc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tTeW1ib2xFeGlzdHMuY21ha2UKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgIiR7U09VUkNFRklMRX0iIEBPTkxZKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7U1lNQk9MfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciAke1NZTUJPTH0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfY29tcGlsZSgke1ZBUklBQkxFfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogICAgIGlmKCR7VkFSSUFCTEV9KQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtTWU1CT0x9IC0gZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIHN5bWJvbCAke1NZTUJPTH0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAiJHtDTUFLRV9DT05GSUdVUkFCTEVfRklMRV9DT05URU5UfVxuIikKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7U1lNQk9MfSAtIG5vdCBmb3VuZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAiIiBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBzeW1ib2wgJHtTWU1CT0x9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tUeXBlU2l6ZS5jLmluIGIvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4KaW5kZXggODIwMzVhMy4uZmI5MzA3MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4KKysrIGIvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4KQEAgLTUsMTAgKzUsMTQgQEAKICMgZGVmaW5lIEtFWSAnXycsJ18nLCdpJywnMycsJzgnLCc2JwogI2VsaWYgZGVmaW5lZChfX3g4Nl82NCkKICMgZGVmaW5lIEtFWSAnXycsJ18nLCd4JywnOCcsJzYnLCdfJywnNicsJzQnCi0jZWxpZiBkZWZpbmVkKF9fcHBjX18pCi0jIGRlZmluZSBLRVkgJ18nLCdfJywncCcsJ3AnLCdjJywnXycsJ18nCisjZWxpZiBkZWZpbmVkKF9fUFBDNjRfXykKKyMgZGVmaW5lIEtFWSAnXycsJ18nLCdQJywnUCcsJ0MnLCc2JywnNCcsJ18nLCdfJwogI2VsaWYgZGVmaW5lZChfX3BwYzY0X18pCiAjIGRlZmluZSBLRVkgJ18nLCdfJywncCcsJ3AnLCdjJywnNicsJzQnLCdfJywnXycKKyNlbGlmIGRlZmluZWQoX19QUENfXykKKyMgZGVmaW5lIEtFWSAnXycsJ18nLCdQJywnUCcsJ0MnLCdfJywnXycKKyNlbGlmIGRlZmluZWQoX19wcGNfXykKKyMgZGVmaW5lIEtFWSAnXycsJ18nLCdwJywncCcsJ2MnLCdfJywnXycKICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCiAjIGRlZmluZSBLRVkgJ18nLCdfJywnYScsJ2EnLCdyJywnYycsJ2gnLCc2JywnNCcsJ18nLCdfJwogI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuY21ha2UgYi9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuY21ha2UKaW5kZXggMzcyNzM3My4uMmIwN2I3YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1R5cGVTaXplLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tUeXBlU2l6ZS5jbWFrZQpAQCAtODYsNyArODYsNyBAQAogIyBIZWxwZXIgZnVuY3Rpb24uICBETyBOT1QgQ0FMTCBESVJFQ1RMWS4KIGZ1bmN0aW9uKF9fY2hlY2tfdHlwZV9zaXplX2ltcGwgdHlwZSB2YXIgbWFwIGJ1aWx0aW4gbGFuZ3VhZ2UpCiAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgc2l6ZSBvZiAke3R5cGV9IikKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVjayBzaXplIG9mICR7dHlwZX0iKQogICBlbmRpZigpCiAKICAgIyBJbmNsdWRlIGhlYWRlciBmaWxlcy4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgIGVuZGlmKCkKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBzaXplIG9mICR7dHlwZX0gLSBkb25lIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZG9uZSIpCiAgICAgZW5kaWYoKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgc2l6ZSBvZiAke3R5cGV9IHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtvdXRwdXR9XG5cbiIpCkBAIC0xODEsNyArMTgxLDcgQEAKICAgZWxzZSgpCiAgICAgIyBUaGUgY2hlY2sgZmFpbGVkIHRvIGNvbXBpbGUuCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIHNpemUgb2YgJHt0eXBlfSAtIGZhaWxlZCIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgImZhaWxlZCIpCiAgICAgZW5kaWYoKQogICAgIGZpbGUoUkVBRCAke3NyY30gY29udGVudCkKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrVmFyaWFibGVFeGlzdHMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrVmFyaWFibGVFeGlzdHMuY21ha2UKaW5kZXggZjQ5NTNhMy4uOGE5MzUzNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1ZhcmlhYmxlRXhpc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tWYXJpYWJsZUV4aXN0cy5jbWFrZQpAQCAtNDIsNyArNDIsNyBAQAogICAgIHNldChNQUNST19DSEVDS19WQVJJQUJMRV9ERUZJTklUSU9OUwogICAgICAgIi1EQ0hFQ0tfVkFSSUFCTEVfRVhJU1RTPSR7VkFSfSAke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfSIpCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICBpZihDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlMpCiAgICAgICBzZXQoQ0hFQ0tfVkFSSUFCTEVfRVhJU1RTX0FERF9MSU5LX09QVElPTlMKQEAgLTY3LDcgKzY3LDcgQEAKICAgICBpZigke1ZBUklBQkxFfSkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIHZhcmlhYmxlICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke1ZBUn0gLSBmb3VuZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZm91bmQiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSB2YXJpYWJsZSAke1ZBUn0gZXhpc3RzIHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtNzUsNyArNzUsNyBAQAogICAgIGVsc2UoKQogICAgICAgc2V0KCR7VkFSSUFCTEV9ICIiIENBQ0hFIElOVEVSTkFMICJIYXZlIHZhcmlhYmxlICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke1ZBUn0gLSBub3QgZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgdmFyaWFibGUgJHtWQVJ9IGV4aXN0cyBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQ1hYLmNtYWtlCmluZGV4IDNmYTY5OTAuLjE1ZWRjMjEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9BcHBsZUNsYW5nLUNYWC5jbWFrZQpAQCAtMjUsNyArMjUsMTAgQEAKICAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQogZW5kaWYoKQogCi1pZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA2LjEpCitpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxMC4wKQorICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICBzZXQoQ01BS0VfQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQorZWxzZWlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDYuMSkKICAgc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzF6IikKICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1PQkpDWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctT0JKQ1hYLmNtYWtlCmluZGV4IDJjMDg0YWYuLjQwOWJkNGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1PQkpDWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9BcHBsZUNsYW5nLU9CSkNYWC5jbWFrZQpAQCAtMjIsNyArMjIsMTAgQEAKICAgc2V0KENNQUtFX09CSkNYWDE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQogZW5kaWYoKQogCi1pZiAoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA2LjEpCitpZiAoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxMC4wKQorICBzZXQoQ01BS0VfT0JKQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICBzZXQoQ01BS0VfT0JKQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQorZWxzZWlmIChOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDYuMSkKICAgc2V0KENNQUtFX09CSkNYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzF6IikKICAgc2V0KENNQUtFX09CSkNYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3Jvcy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3Jvcy5jbWFrZQppbmRleCA5NjUzN2Y4Li40MDliNjVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0NNYWtlQ29tbW9uQ29tcGlsZXJNYWNyb3MuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9DTWFrZUNvbW1vbkNvbXBpbGVyTWFjcm9zLmNtYWtlCkBAIC0xMzQsMyArMTM0LDQ3IEBACiAgICAgdW5zZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCiAgIGVuZGlmKCkKIGVuZG1hY3JvKCkKKworbWFjcm8oY21ha2VfcmVjb3JkX2N1ZGFfY29tcGlsZV9mZWF0dXJlcykKKyAgc2V0KF9yZXN1bHQgMCkKKyAgaWYoX3Jlc3VsdCBFUVVBTCAwIEFORCBERUZJTkVEIENNQUtFX0NVREEyMF9TVEFOREFSRF9DT01QSUxFX09QVElPTikKKyAgICBpZihDTUFLRV9DVURBMjBfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCisgICAgICBfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMjApCisgICAgZWxzZSgpCisgICAgICBfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMjApCisgICAgZW5kaWYoKQorICAgIHVuc2V0KENNQUtFX0NVREEyMF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgZW5kaWYoKQorICBpZihfcmVzdWx0IEVRVUFMIDAgQU5EIERFRklORUQgQ01BS0VfQ1VEQTE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQorICAgIGlmKENNQUtFX0NVREExN19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIF9oYXNfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgxNykKKyAgICBlbHNlKCkKKyAgICAgIF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgxNykKKyAgICBlbmRpZigpCisgICAgdW5zZXQoQ01BS0VfQ1VEQTE3X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICBlbmRpZigpCisgIGlmKF9yZXN1bHQgRVFVQUwgMCBBTkQgREVGSU5FRCBDTUFLRV9DVURBMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04pCisgICAgaWYoQ01BS0VfQ1VEQTE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICAgICAgX2hhc19jb21waWxlcl9mZWF0dXJlc19jdWRhKDE0KQorICAgIGVsc2UoKQorICAgICAgX3JlY29yZF9jb21waWxlcl9mZWF0dXJlc19jdWRhKDE0KQorICAgIGVuZGlmKCkKKyAgICB1bnNldChDTUFLRV9DVURBMTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCisgIGVuZGlmKCkKKyAgaWYoX3Jlc3VsdCBFUVVBTCAwIEFORCBERUZJTkVEIENNQUtFX0NVREExMV9TVEFOREFSRF9DT01QSUxFX09QVElPTikKKyAgICBpZihDTUFLRV9DVURBMTFfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCisgICAgICBfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMTEpCisgICAgZWxzZSgpCisgICAgICBfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMTEpCisgICAgZW5kaWYoKQorICAgIHVuc2V0KENNQUtFX0NVREExMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgZW5kaWYoKQorICBpZihfcmVzdWx0IEVRVUFMIDAgQU5EIERFRklORUQgQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQorICAgIGlmKENNQUtFX0NVREEwM19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIF9oYXNfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgwMykKKyAgICBlbHNlKCkKKyAgICAgIF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgwMykKKyAgICBlbmRpZigpCisgICAgdW5zZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUMuY21ha2UKaW5kZXggMDQ0ODk2NS4uN2M0YTI2MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQy5jbWFrZQpAQCAtNiw2ICs2LDEwIEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKK2lmKCJ4JHtDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBzZXQoQ01BS0VfQ19DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCitlbmRpZigpCisKIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNCkKICAgaWYoTk9UICJ4JHtDTUFLRV9DX1NJTVVMQVRFX0lEfSIgU1RSRVFVQUwgInhNU1ZDIikKICAgICBzZXQoQ01BS0VfQzkwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWM5MCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUNYWC5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQ1hYLmNtYWtlCmluZGV4IDYxNzA5ZjguLmNiMjQwZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQ1hYLmNtYWtlCkBAIC0xMCw2ICsxMCw5IEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKK2lmKCJ4JHtDTUFLRV9DWFhfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVH0iIFNUUkVRVUFMICJ4TVNWQyIpCisgIHNldChDTUFLRV9DWFhfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSAiY2wiKQorZW5kaWYoKQogCiBpZigieCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieEdOVSIpCiAgIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmcuY21ha2UKaW5kZXggNWNjOTMyOC4uZjY1OTE2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLmNtYWtlCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICBpZiAoTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJYY29kZSIpCiAgICAgICBzZXQoQ01BS0VfUENIX1BST0xPR1VFICIjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIiKQogICAgIGVuZGlmKCkKLSAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVVNFX1BDSCAtWGNsYW5nIC1pbmNsdWRlLXBjaCAtWGNsYW5nIDxQQ0hfRklMRT4pCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVhjbGFuZyAtaW5jbHVkZS1wY2ggLVhjbGFuZyA8UENIX0ZJTEU+IC1YY2xhbmcgLWluY2x1ZGUgLVhjbGFuZyA8UENIX0hFQURFUj4pCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVhjbGFuZyAtZW1pdC1wY2ggLVhjbGFuZyAtaW5jbHVkZSAtWGNsYW5nIDxQQ0hfSEVBREVSPikKICAgZW5kbWFjcm8oKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HTlUtQVNNLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9HTlUtQVNNLmNtYWtlCmluZGV4IGUwNzQwMWQuLjNkYWE1N2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUFTTS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1BU00uY21ha2UKQEAgLTQsMyArNCw5IEBACiBzZXQoQ01BS0VfQVNNX1NPVVJDRV9GSUxFX0VYVEVOU0lPTlMgcztTO2FzbSkKIAogX19jb21waWxlcl9nbnUoQVNNKQorCitpZihDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0ggU1RSRVFVQUwgIkdOVSBhc3NlbWJsZXIiKQorICBzZXQoQ01BS0VfREVQRklMRV9GTEFHU19BU00ke0FTTV9ESUFMRUNUfSAiLS1NRCA8REVQRklMRT4iKQorICBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fTElOS19FWEVDVVRBQkxFCisgICAgIjxDTUFLRV9MSU5LRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0dOVS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvR05VLmNtYWtlCmluZGV4IDFjMDUwYTIuLjMzNTdhODYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvR05VLmNtYWtlCkBAIC0xMTQsNiArMTE0LDcgQEAKICAgaWYgKE5PVCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiWGNvZGUiKQogICAgIHNldChDTUFLRV9QQ0hfUFJPTE9HVUUgIiNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIiKQogICBlbmRpZigpCi0gIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1XaW52YWxpZC1wY2ggLWluY2x1ZGUgPFBDSF9IRUFERVI+KQotICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfQ1JFQVRFX1BDSCAtV2ludmFsaWQtcGNoIC14ICR7X19wY2hfaGVhZGVyXyR7bGFuZ319IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIC1XaW52YWxpZC1wY2gpCisgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLXggJHtfX3BjaF9oZWFkZXJfJHtsYW5nfX0gLWluY2x1ZGUgPFBDSF9IRUFERVI+KQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DLmNtYWtlCmluZGV4IGU5ZTU5YTIuLmVjM2JmZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUMuY21ha2UKQEAgLTksNiArOSw4IEBACiAKIGlmKCJ4JHtDTUFLRV9DX1NJTVVMQVRFX0lEfSIgU1RSRVFVQUwgInhNU1ZDIikKIAorICBzZXQoQ01BS0VfQ19DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCisKICAgaWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE2LjAuMCkKICAgICBzZXQoQ01BS0VfQzExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItUXN0ZD1jMTEiKQogICAgIHNldChDTUFLRV9DMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItUXN0ZD1jMTEiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQppbmRleCBiNjMwYTZiLi4xZWQxYjA4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQpAQCAtOSw2ICs5LDggQEAKIAogaWYoIngke0NNQUtFX0NYWF9TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCiAKKyAgc2V0KENNQUtFX0NYWF9DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCisKICAgaWYgKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTguMC4wKQogICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLVFzdGQ9YysrMTciKQogICAgIHNldChDTUFLRV9DWFgxN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1Rc3RkPWMrKzE3IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLmNtYWtlCmluZGV4IGQ4OTVlZDAuLjYzYTIwYWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC5jbWFrZQpAQCAtMzcsNyArMzcsOCBAQAogICAgIHNldChDTUFLRV9QQ0hfRVhURU5TSU9OIC5wY2hpKQogICAgIHNldChDTUFLRV9MSU5LX1BDSCBPTikKICAgICBzZXQoQ01BS0VfUENIX0VQSUxPR1VFICIjcHJhZ21hIGhkcnN0b3AiKQotICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1XaW52YWxpZC1wY2ggLVduby1wY2gtbWVzc2FnZXMgLXBjaC11c2UgPFBDSF9GSUxFPiAtaW5jbHVkZSA8UENIX0hFQURFUj4pCi0gICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVdpbnZhbGlkLXBjaCAtV25vLXBjaC1tZXNzYWdlcyAtcGNoLWNyZWF0ZSA8UENIX0ZJTEU+IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfSU5WQUxJRF9QQ0ggLVdpbnZhbGlkLXBjaCkKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVVNFX1BDSCAtV25vLXBjaC1tZXNzYWdlcyAtcGNoLXVzZSA8UENIX0ZJTEU+IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfQ1JFQVRFX1BDSCAtV25vLXBjaC1tZXNzYWdlcyAtcGNoLWNyZWF0ZSA8UENIX0ZJTEU+IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKICAgZW5kbWFjcm8oKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9NU1ZDLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL01TVkMtQy5jbWFrZQppbmRleCAyMDc4N2EzLi5iY2E5NzY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL01TVkMtQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL01TVkMtQy5jbWFrZQpAQCAtMTEsNiArMTEsOCBAQAogIyBUaGVyZSBpcyBubyBtZWFuaW5nZnVsIGRlZmF1bHQgZm9yIHRoaXMKIHNldChDTUFLRV9DX1NUQU5EQVJEX0RFRkFVTFQgIiIpCiAKK3NldChDTUFLRV9DX0NMQU5HX1RJRFlfRFJJVkVSX01PREUgImNsIikKKwogIyBUaGVyZSBhcmUgbm8gQyBjb21waWxlciBtb2RlcyBzbyB3ZSBoYXJkLWNvZGUgdGhlIGtub3duIGNvbXBpbGVyIHN1cHBvcnRlZAogIyBmZWF0dXJlcy4gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWFjcm8gZm9yIHRoaXMgc3BlY2lhbCBjYXNlLiAgUHJldGVuZCB0aGF0CiAjIGFsbCBsYW5ndWFnZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBzbyB0aGF0IGF0IGxlYXN0IGNvbXBpbGF0aW9uCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL01TVkMtQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9NU1ZDLUNYWC5jbWFrZQppbmRleCA5MTUyOTVkLi4xZGZjNzYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL01TVkMtQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvTVNWQy1DWFguY21ha2UKQEAgLTMsNiArMyw4IEBACiAKIGluY2x1ZGUoQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3JvcykKIAorc2V0KENNQUtFX0NYWF9DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCisKIGlmICgoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDE5LjAuMjQyMTUuMSBBTkQKICAgICAgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE5LjEwKSBPUgogICAgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDE5LjEwLjI1MDE3KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9OQUctRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvTkFHLUZvcnRyYW4uY21ha2UKaW5kZXggZWRjNTZmZC4uMjExMWM2NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9OQUctRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL05BRy1Gb3J0cmFuLmNtYWtlCkBAIC0xLDYgKzEsNiBAQAogIyBIZWxwIENNQUtFX1BBUlNFX0lNUExJQ0lUX0xJTktfSU5GTyBkZXRlY3QgTkFHIEZvcnRyYW4gb2JqZWN0IGZpbGVzLgogaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MgQU5EIE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0ZPUkNFRCkKLSAgbWVzc2FnZShTVEFUVVMgIkRldGVjdGluZyBOQUcgRm9ydHJhbiBkaXJlY3RvcnkiKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJEZXRlY3RpbmcgTkFHIEZvcnRyYW4gZGlyZWN0b3J5IikKICAgIyBSdW4gd2l0aCAtZHJ5cnVuIHRvIHNlZSBzYW1wbGUgImxpbmsiIGxpbmUuCiAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICBDT01NQU5EICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gZHVtbXkubyAtZHJ5cnVuCkBAIC0yMCwxMSArMjAsMTEgQEAKICAgICAgICIgIGRpcmVjdG9yeTogJHtfbmFnX2Rpcn1cbiIKICAgICAgICIgIHJlZ2V4OiAke0NNQUtFX0ZvcnRyYW5fSU1QTElDSVRfT0JKRUNUX1JFR0VYfVxuIgogICAgICAgImZyb20gb3V0cHV0OlxuJHtfZHJ5cnVufVxuXG4iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgTkFHIEZvcnRyYW4gZGlyZWN0b3J5IC0gJHtfbmFnX2Rpcn0iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiJHtfbmFnX2Rpcn0iKQogICBlbHNlKCkKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAiRGV0ZWN0aW5nIE5BRyBGb3J0cmFuIGRpcmVjdG9yeSB3aXRoIC1kcnlydW4gZmFpbGVkOlxuJHtfZHJ5cnVufVxuXG4iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgTkFHIEZvcnRyYW4gZGlyZWN0b3J5IC0gZmFpbGVkIikKKyAgICBtZXNzYWdlKENIRUNLX0ZBSUwgImZhaWxlZCIpCiAgIGVuZGlmKCkKIGVuZGlmKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtQ1VEQS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvTlZJRElBLUNVREEuY21ha2UKaW5kZXggYWU0MDEwMC4uMmEyNTY0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtQ1VEQS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL05WSURJQS1DVURBLmNtYWtlCkBAIC0xLDcgKzEsMzQgQEAKK2luY2x1ZGUoQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3JvcykKKwogc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSEFTX0RFVklDRV9MSU5LX1BIQVNFIFRydWUpCiBzZXQoQ01BS0VfQ1VEQV9WRVJCT1NFX0ZMQUcgIi12IikKIHNldChDTUFLRV9DVURBX1ZFUkJPU0VfQ09NUElMRV9GTEFHICItWGNvbXBpbGVyPS12IikKIAorc2V0KF9DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBRyAiLXggY3UiKQorCitpZiAoQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxMC4yLjg5KQorICAjIFRoZSAtZm9yd2FyZC11bmtub3duLXRvLWhvc3QtY29tcGlsZXIgZmxhZyB3YXMgb25seQorICAjIGFkZGVkIHRvIG52Y2MgaW4gMTAuMiBzbyBiZWZvcmUgdGhhdCB3ZSBoYWQgbm8gZ29vZAorICAjIHdheSB0byBpbnZva2UgdGhlIENVREEgY29tcGlsZXIgYW5kIHByb3BhZ2F0ZSB1bmtub3duCisgICMgZmxhZ3Mgc3VjaCBhcyAtcHRocmVhZCB0byB0aGUgaG9zdCBjb21waWxlcgorICBzZXQoX0NNQUtFX0NVREFfRVhUUkFfRkxBR1MgIi1mb3J3YXJkLXVua25vd24tdG8taG9zdC1jb21waWxlciIpCitlbHNlKCkKKyAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0ZMQUdTICIiKQorZW5kaWYoKQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICI4LjAuMCIpCisgIHNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUyAiLVduby1kZXByZWNhdGVkLWdwdS10YXJnZXRzIikKK2Vsc2UoKQorICBzZXQoX0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1MgIiIpCitlbmRpZigpCisKK2lmIChDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEwLjIuODkpCisgICMgVGhlIC1NRCBmbGFnIHdhcyBvbmx5IGFkZGVkIHRvIG52Y2MgaW4gMTAuMiBzbworICAjIGJlZm9yZSB0aGF0IHdlIGhhZCB0byBpbnZva2UgdGhlIGNvbXBpbGVyIHR3aWNlCisgICMgdG8gZ2V0IGhlYWRlciBkZXBlbmRlbmN5IGluZm9ybWF0aW9uCisgIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTX0NVREEgIi1NRCAtTVQgPE9CSkVDVD4gLU1GIDxERVBGSUxFPiIpCitlbmRpZigpCisKIGlmKE5PVCAieCR7Q01BS0VfQ1VEQV9TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfT1BUSU9OU19QSUUgLVhjb21waWxlcj0tZlBJRSkKICAgc2V0KENNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQyAtWGNvbXBpbGVyPS1mUElDKQpAQCAtMTgsMTggKzQ1LDMyIEBACiBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NVREFfRkxBR1MgLXNoYXJlZCkKIHNldChDTUFLRV9JTkNMVURFX1NZU1RFTV9GTEFHX0NVREEgLWlzeXN0ZW09KQogCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVCAiU1RBVElDIikKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfU1RBVElDICAiY3VkYWRldnJ0O2N1ZGFydF9zdGF0aWMiKQorc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TSEFSRUQgICJjdWRhZGV2cnQ7Y3VkYXJ0IikKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfTk9ORSAgICAiIikKKwogaWYoIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQotICBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRF9ERUZBVUxUICIiKQorICBzZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICBzZXQoQ01BS0VfQ1VEQTAzX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKworICBzZXQoQ01BS0VfQ1VEQTExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICBzZXQoQ01BS0VfQ1VEQTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKworICBpZiAoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgOS4wKQorICAgIHNldChDTUFLRV9DVURBMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFX0NVREExNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisgIGVuZGlmKCkKIGVsc2UoKQotICBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRF9ERUZBVUxUIDk4KQotICBzZXQoQ01BS0VfQ1VEQTk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1VEQTk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgc2V0KENNQUtFX0NVREEwM19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgc2V0KENNQUtFX0NVREEwM19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisKICAgc2V0KENNQUtFX0NVREExMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxMSIpCiAgIHNldChDTUFLRV9DVURBMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzExIikKIAogICBpZiAoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgOS4wKQotICAgIHNldChDTUFLRV9DVURBOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMDMiKQotICAgIHNldChDTUFLRV9DVURBOThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzAzIikKKyAgICBzZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzAzIikKKyAgICBzZXQoQ01BS0VfQ1VEQTAzX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1jKyswMyIpCiAgICAgc2V0KENNQUtFX0NVREExNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCiAgICAgc2V0KENNQUtFX0NVREExNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTQiKQogICBlbmRpZigpCkBAIC00NiwzICs4Nyw1IEBACiAgIHNldChDTUFLRV9DVURBX1JFU1BPTlNFX0ZJTEVfREVWSUNFX0xJTktfRkxBRyAiLS1vcHRpb25zLWZpbGUgIikKICAgc2V0KENNQUtFX0NVREFfUkVTUE9OU0VfRklMRV9GTEFHICItLW9wdGlvbnMtZmlsZSAiKQogZW5kaWYoKQorCitfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoQ1VEQSA2LjAgMDMpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1FDQy1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1FDQy1DWFguY21ha2UKaW5kZXggMGU3MzE0YS4uNDIzMDNmNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9RQ0MtQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvUUNDLUNYWC5jbWFrZQpAQCAtMTAsNiArMTAsNiBAQAogICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLWxhbmctYysrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogCiBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLWxhbmctYysrIDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC1sYW5nLWMrKyA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIAogc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfVklTSUJJTElUWV9JTkxJTkVTX0hJRERFTiAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvUUNDLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9RQ0MuY21ha2UKaW5kZXggOWRmODI2OS4uMTBlMTM4OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9RQ0MuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9RQ0MuY21ha2UKQEAgLTEwLDYgKzEwLDkgQEAKICAgIyBodHRwOi8vd3d3LnFueC5jb20vZGV2ZWxvcGVycy9kb2NzLzYuNC4wL25ldXRyaW5vL3V0aWxpdGllcy9xL3FjYy5odG1sI2V4YW1wbGVzCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19UQVJHRVQgIi1WIikKIAorICBzZXQoQ01BS0VfUFJFRklYX0xJQlJBUllfQVJDSElURUNUVVJFICJPTiIpCisKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1NZU1JPT1QgIi1XYywtaXN5c3Jvb3QsIikKICAgc2V0KENNQUtFX0lOQ0xVREVfU1lTVEVNX0ZMQUdfJHtsYW5nfSAiLVdwLC1pc3lzdGVtLCIpCiAgIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTXyR7bGFuZ30gIi1XcCwtTUQsPERFUEZJTEU+IC1XcCwtTVQsPE9CSkVDVD4gLVdwLC1NRiw8REVQRklMRT4iKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1RJLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLUMuY21ha2UKaW5kZXggMWMwZjRiYy4uYjA2MGVlOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9USS1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvVEktQy5jbWFrZQpAQCAtMTQsNSArMTQsOSBAQAogc2V0KENNQUtFX0NfQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UgIjxDTUFLRV9DX0NPTVBJTEVSPiAtLXByZXByb2Nfb25seSAtLWNfZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKIAogc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgICI8Q01BS0VfQ19DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1jX2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxPQkpFQ1Q+IikKLXNldChDTUFLRV9DX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IC1yIDxUQVJHRVQ+IDxPQkpFQ1RTPiIpCi1zZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9DX0NPTVBJTEVSPiAtLXJ1bl9saW5rZXIgLS1vdXRwdXRfZmlsZT08VEFSR0VUPiAtLW1hcF9maWxlPTxUQVJHRVQ+Lm1hcCA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iKQorc2V0KENNQUtFX0NfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcXIgPFRBUkdFVD4gPE9CSkVDVFM+IikKK3NldChDTUFLRV9DX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHFhIDxUQVJHRVQ+IDxPQkpFQ1RTPiIpCitzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9DX0NPTVBJTEVSPiAtLXJ1bl9saW5rZXIgLS1vdXRwdXRfZmlsZT08VEFSR0VUPiAtLW1hcF9maWxlPTxUQVJHRVRfTkFNRT4ubWFwIDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIpCitzZXQoQ01BS0VfQVNNX1JFU1BPTlNFX0ZJTEVfRkxBRyAiLS1jbWRfZmlsZT0iKQorc2V0KENNQUtFX0NfUkVTUE9OU0VfRklMRV9GTEFHICItLWNtZF9maWxlPSIpCitzZXQoQ01BS0VfQ19SRVNQT05TRV9GSUxFX0xJTktfRkxBRyAiICIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1hMLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUZvcnRyYW4uY21ha2UKaW5kZXggYzRmYjA5Ny4uZTAxZWM4ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9YTC1Gb3J0cmFuLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi5jbWFrZQpAQCAtOCw2ICs4LDcgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0ZPUk1BVF9GUkVFX0ZMQUcgIi1xZnJlZSIpICMgWz1mOTB8aWJtXQogCiBzZXQoQ01BS0VfRm9ydHJhbl9NT0RESVJfRkxBRyAiLXFtb2RkaXI9IikKK3NldChDTUFLRV9Gb3J0cmFuX01PRERJUl9JTkNMVURFX0ZMQUcgIi1JIikgIyAtcW1vZGRpcj0gZG9lcyBub3QgYWZmZWN0IHNlYXJjaCBwYXRoCiAKIHNldChDTUFLRV9Gb3J0cmFuX0RFRklORV9GTEFHICItV0YsLUQiKQogCkBAIC0xOCwzICsxOSw3IEBACiAjIHhsZjogMTUwMS0yMTQgKFcpIGNvbW1hbmQgb3B0aW9uIEUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgLSBpZ25vcmVkCiBzZXQoQ01BS0VfRm9ydHJhbl9DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRSkKIHNldChDTUFLRV9Gb3J0cmFuX0NSRUFURV9BU1NFTUJMWV9TT1VSQ0UpCisKK3NldChDTUFLRV9Gb3J0cmFuX1BSRVBST0NFU1NfU09VUkNFCisgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtcXByZXByb2Nlc3MgLXFub29iamVjdCAtcXN1cHByZXNzPTE1MTctMDIwIC10RiAtQiBcIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vWEwtRm9ydHJhbi9cIiAtV0YsLS1jcHAsXCIke0NNQUtFX0ZvcnRyYW5fWExfQ1BQfVwiLC0tb3V0LDxQUkVQUk9DRVNTRURfU09VUkNFPiA8U09VUkNFPiIKKyAgKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9YTC1Gb3J0cmFuL2NwcCBiL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi9jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZkNjJjMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi9jcHAKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorCisjIFNvdXJjZSBmaWxlLgorc3JjPSIkKHByaW50ZiAlcSAiJDEiKSIKK3NoaWZ0CisKKyMgT3V0cHV0IGZpbGUgdGhlIGNvbXBpbGVyIGV4cGVjdHMuCitvdXQ9IiQocHJpbnRmICVxICIkMSIpIgorc2hpZnQKKworIyBDcmVhdGUgdGhlIGZpbGUgdGhlIGNvbXBpbGVyIGV4cGVjdHMuICBJdCB3aWxsIGNoZWNrIHN5bnRheC4KKz4iJG91dCIKKworY3BwPSdjcHAnCitvcHRzPScnCit3aGlsZSB0ZXN0ICIkIyIgIT0gMDsgZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAjIEV4dHJhY3QgdGhlIG9wdGlvbiBmb3IgdGhlIHBhdGggdG8gY3BwLgorICAgIC0tY3BwKSBzaGlmdDsgY3BwPSIkKHByaW50ZiAlcSAiJDEiKSIgOzsKKyAgICAjIEV4dHJhY3QgdGhlIG9wdGlvbiBmb3Igb3VyIG93biBvdXRwdXQgZmlsZS4KKyAgICAtLW91dCkgc2hpZnQ7IG91dD0iJChwcmludGYgJXEgIiQxIikiIDs7CisgICAgIyBDb2xsZWN0IHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUuCisgICAgKikgb3B0cz0iJG9wdHMgJChwcmludGYgJXEgIiQxIikiIDs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKKyMgRXhlY3V0ZSB0aGUgcmVhbCBwcmVwcm9jZXNzb3IgdG9vbC4KK2V2YWwgImV4ZWMgJGNwcCAkc3JjICRvdXQgJG9wdHMiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVySWQvVlMtMTAudmN4cHJvai5pbiBiL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluCmluZGV4IGQ3NDIyNzQuLmI0OGEzMzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluCisrKyBiL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluCkBAIC0xNSw2ICsxNSw4IEBACiAgICAgQGlkX1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb25ACiAgICAgQGlkX1dpbmRvd3NTREtEZXNrdG9wQVJNU3VwcG9ydEAKICAgICBAaWRfQ3VkYVRvb2xraXRDdXN0b21EaXJACisgICAgQGlkX1Rvb2xzZXRWQ1RhcmdldHNEaXJACisgICAgQGlkX0N1c3RvbUdsb2JhbHNACiAgIDwvUHJvcGVydHlHcm91cD4KICAgQGlkX3Rvb2xzZXRfdmVyc2lvbl9wcm9wc0AKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KZGlmZiAtLWdpdCBhL01vZHVsZXMvRGFydENvbmZpZ3VyYXRpb24udGNsLmluIGIvTW9kdWxlcy9EYXJ0Q29uZmlndXJhdGlvbi50Y2wuaW4KaW5kZXggZTQ1MTNiMy4uMDg2YmEwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9EYXJ0Q29uZmlndXJhdGlvbi50Y2wuaW4KKysrIGIvTW9kdWxlcy9EYXJ0Q29uZmlndXJhdGlvbi50Y2wuaW4KQEAgLTY5LDYgKzY5LDggQEAKIFB1cmlmeUNvbW1hbmQ6IEBQVVJJRllDT01NQU5EQAogVmFsZ3JpbmRDb21tYW5kOiBAVkFMR1JJTkRfQ09NTUFOREAKIFZhbGdyaW5kQ29tbWFuZE9wdGlvbnM6IEBWQUxHUklORF9DT01NQU5EX09QVElPTlNACitEck1lbW9yeUNvbW1hbmQ6IEBEUk1FTU9SWV9DT01NQU5EQAorRHJNZW1vcnlDb21tYW5kT3B0aW9uczogQERSTUVNT1JZX0NPTU1BTkRfT1BUSU9OU0AKIE1lbW9yeUNoZWNrVHlwZTogQE1FTU9SWUNIRUNLX1RZUEVACiBNZW1vcnlDaGVja1Nhbml0aXplck9wdGlvbnM6IEBNRU1PUllDSEVDS19TQU5JVElaRVJfT1BUSU9OU0AKIE1lbW9yeUNoZWNrQ29tbWFuZDogQE1FTU9SWUNIRUNLX0NPTU1BTkRACmRpZmYgLS1naXQgYS9Nb2R1bGVzL0RlcGxveVF0NC5jbWFrZSBiL01vZHVsZXMvRGVwbG95UXQ0LmNtYWtlCmluZGV4IDRhMTg5MjcuLjlhYTQzODMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRGVwbG95UXQ0LmNtYWtlCisrKyBiL01vZHVsZXMvRGVwbG95UXQ0LmNtYWtlCkBAIC0xMDYsNyArMTA2LDYgQEAKICMgVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgZmlsZSBkZXBlbmQgb24gdGhlIGZpeHVwX2J1bmRsZSBmdW5jdGlvbgogIyAoYW5kIG90aGVycykgZm91bmQgaW4gQnVuZGxlVXRpbGl0aWVzLmNtYWtlCiAKLXNldChEZXBsb3lRdDRfY21ha2VfZGlyICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9IikKIHNldChEZXBsb3lRdDRfYXBwbGVfcGx1Z2luc19kaXIgIlBsdWdJbnMiKQogCiBmdW5jdGlvbih3cml0ZV9xdDRfY29uZiBxdF9jb25mX2RpciBxdF9jb25mX2NvbnRlbnRzKQpAQCAtMzkyLDcgKzM5MSw3IEBACiAgIHJlc29sdmVfcXQ0X3BhdGhzKGxpYnMgIiIpCiAKICAgaW5zdGFsbChDT0RFCi0iaW5jbHVkZShcIiR7RGVwbG95UXQ0X2NtYWtlX2Rpcn0vRGVwbG95UXQ0LmNtYWtlXCIpCisiaW5jbHVkZShcIiR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUn0vRGVwbG95UXQ0LmNtYWtlXCIpCiBzZXQoQlVfQ0hNT0RfQlVORExFX0lURU1TIFRSVUUpCiBGSVhVUF9RVDRfRVhFQ1VUQUJMRShcIlwkRU5We0RFU1RESVJ9XCR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZXhlY3V0YWJsZX1cIiBcIlwiIFwiJHtsaWJzfVwiIFwiJHtkaXJzfVwiIFwiJHtwbHVnaW5zX2Rpcn1cIiBcIiR7cmVxdWVzdF9xdF9jb25mfVwiKSIKICAgICAgICAgICAke2NvbXBvbmVudH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlIGIvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UKaW5kZXggNjYwNjFhMS4uMzI2ZWUwNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UKKysrIGIvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UKQEAgLTksOCArOSwxMSBAQAogCiAgICAuLiBjb250ZW50czo6CiAKK0NvbW1hbmRzCiteXl5eXl5eXgorCiBFeHRlcm5hbCBQcm9qZWN0IERlZmluaXRpb24KLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKIC4uIGNvbW1hbmQ6OiBFeHRlcm5hbFByb2plY3RfQWRkCiAKQEAgLTI2NSw2ICsyNjgsMTEgQEAKICAgICAgICAgaXMgc2V0IHRvIGBgTkVXYGAgaWYgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHRoZW4gbm8gc3VibW9kdWxlcwogICAgICAgICBhcmUgaW5pdGlhbGl6ZWQgb3IgdXBkYXRlZC4KIAorICAgICAgYGBHSVRfU1VCTU9EVUxFU19SRUNVUlNFIDxib29sPmBgCisgICAgICAgIFNwZWNpZnkgd2hldGhlciBnaXQgc3VibW9kdWxlcyAoaWYgYW55KSBzaG91bGQgdXBkYXRlIHJlY3Vyc2l2ZWx5IGJ5CisgICAgICAgIHBhc3NpbmcgdGhlIGBgLS1yZWN1cnNpdmVgYCBmbGFnIHRvIGBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgYC4KKyAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgb24uCisKICAgICAgIGBgR0lUX1NIQUxMT1cgPGJvb2w+YGAKICAgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgYGBnaXQgY2xvbmVgYCBvcGVyYXRpb24gd2lsbCBiZSBnaXZlbgogICAgICAgICB0aGUgYGAtLWRlcHRoIDFgYCBvcHRpb24uIFRoaXMgcGVyZm9ybXMgYSBzaGFsbG93IGNsb25lLCB3aGljaCBhdm9pZHMKQEAgLTY2MCw3ICs2NjgsNyBAQAogICBhdXRvbWF0aWMgc3Vic3RpdHV0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIHNvbWUgb3B0aW9ucy4KIAogT2J0YWluaW5nIFByb2plY3QgUHJvcGVydGllcwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiAuLiBjb21tYW5kOjogRXh0ZXJuYWxQcm9qZWN0X0dldF9Qcm9wZXJ0eQogCkBAIC02ODEsNyArNjg5LDcgQEAKICAgICBtZXNzYWdlKCJTb3VyY2UgZGlyIG9mIG15RXh0UHJvaiA9ICR7U09VUkNFX0RJUn0iKQogCiBFeHBsaWNpdCBTdGVwIE1hbmFnZW1lbnQKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKIFRoZSBgYEV4dGVybmFsUHJvamVjdF9BZGQoKWBgIGZ1bmN0aW9uIG9uIGl0cyBvd24gaXMgb2Z0ZW4gc3VmZmljaWVudCBmb3IKIGluY29ycG9yYXRpbmcgYW4gZXh0ZXJuYWwgcHJvamVjdCBpbnRvIHRoZSBtYWluIGJ1aWxkLiBDZXJ0YWluIHNjZW5hcmlvcwpAQCAtMTA2NSw3ICsxMDczLDcgQEAKICAgIkV4dGVybmFsUHJvamVjdCBtb2R1bGUuIgogICApCiAKLWZ1bmN0aW9uKF9lcF93cml0ZV9naXRjbG9uZV9zY3JpcHQgc2NyaXB0X2ZpbGVuYW1lIHNvdXJjZV9kaXIgZ2l0X0VYRUNVVEFCTEUgZ2l0X3JlcG9zaXRvcnkgZ2l0X3RhZyBnaXRfcmVtb3RlX25hbWUgaW5pdF9zdWJtb2R1bGVzIGdpdF9zdWJtb2R1bGVzIGdpdF9zaGFsbG93IGdpdF9wcm9ncmVzcyBnaXRfY29uZmlnIHNyY19uYW1lIHdvcmtfZGlyIGdpdGNsb25lX2luZm9maWxlIGdpdGNsb25lX3N0YW1wZmlsZSB0bHNfdmVyaWZ5KQorZnVuY3Rpb24oX2VwX3dyaXRlX2dpdGNsb25lX3NjcmlwdCBzY3JpcHRfZmlsZW5hbWUgc291cmNlX2RpciBnaXRfRVhFQ1VUQUJMRSBnaXRfcmVwb3NpdG9yeSBnaXRfdGFnIGdpdF9yZW1vdGVfbmFtZSBpbml0X3N1Ym1vZHVsZXMgZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSBnaXRfc3VibW9kdWxlcyBnaXRfc2hhbGxvdyBnaXRfcHJvZ3Jlc3MgZ2l0X2NvbmZpZyBzcmNfbmFtZSB3b3JrX2RpciBnaXRjbG9uZV9pbmZvZmlsZSBnaXRjbG9uZV9zdGFtcGZpbGUgdGxzX3ZlcmlmeSkKICAgaWYoTk9UIEdJVF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS44LjUpCiAgICAgIyBVc2UgYGdpdCBjaGVja291dCA8dHJlZS1pc2g+IC0tYCB0byBhdm9pZCBhbWJpZ3VpdHkgd2l0aCBhIGxvY2FsIHBhdGguCiAgICAgc2V0KGdpdF9jaGVja291dF9leHBsaWNpdC0tICItLSIpCkBAIC0xMDkxLDcgKzEwOTksNyBAQAogICAgIGxpc3QoQVBQRU5EIGdpdF9jbG9uZV9vcHRpb25zIC0tcHJvZ3Jlc3MpCiAgIGVuZGlmKCkKICAgZm9yZWFjaChjb25maWcgSU4gTElTVFMgZ2l0X2NvbmZpZykKLSAgICBsaXN0KEFQUEVORCBnaXRfY2xvbmVfb3B0aW9ucyAtLWNvbmZpZyAke2NvbmZpZ30pCisgICAgbGlzdChBUFBFTkQgZ2l0X2Nsb25lX29wdGlvbnMgLS1jb25maWcgXCIke2NvbmZpZ31cIikKICAgZW5kZm9yZWFjaCgpCiAgIGlmKE5PVCAke2dpdF9yZW1vdGVfbmFtZX0gU1RSRVFVQUwgIm9yaWdpbiIpCiAgICAgbGlzdChBUFBFTkQgZ2l0X2Nsb25lX29wdGlvbnMgLS1vcmlnaW4gXCIke2dpdF9yZW1vdGVfbmFtZX1cIikKQEAgLTExMTUsNyArMTEyMyw3IEBACiBlbmRpZigpCiAKIGV4ZWN1dGVfcHJvY2VzcygKLSAgQ09NTUFORCBcJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5IFwiJHtzb3VyY2VfZGlyfVwiCisgIENPTU1BTkQgXCR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmIFwiJHtzb3VyY2VfZGlyfVwiCiAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCiAgICkKIGlmKGVycm9yX2NvZGUpCkBAIC0xMTUzLDcgKzExNjEsNyBAQAogc2V0KGluaXRfc3VibW9kdWxlcyAke2luaXRfc3VibW9kdWxlc30pCiBpZihpbml0X3N1Ym1vZHVsZXMpCiAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiAke2dpdF9vcHRpb25zfSBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIC0taW5pdCAke2dpdF9zdWJtb2R1bGVzfQorICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiICR7Z2l0X29wdGlvbnN9IHN1Ym1vZHVsZSB1cGRhdGUgJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSAtLWluaXQgJHtnaXRfc3VibW9kdWxlc30KICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9LyR7c3JjX25hbWV9XCIKICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQogICAgICkKQEAgLTExOTEsNyArMTE5OSw3IEBACiBlbmRpZigpCiAKIGV4ZWN1dGVfcHJvY2VzcygKLSAgQ09NTUFORCBcJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5IFwiJHtzb3VyY2VfZGlyfVwiCisgIENPTU1BTkQgXCR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmIFwiJHtzb3VyY2VfZGlyfVwiCiAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCiAgICkKIGlmKGVycm9yX2NvZGUpCkBAIC0xMjM0LDcgKzEyNDIsNyBAQAogZW5kZnVuY3Rpb24oKQogCiAKLWZ1bmN0aW9uKF9lcF93cml0ZV9naXR1cGRhdGVfc2NyaXB0IHNjcmlwdF9maWxlbmFtZSBnaXRfRVhFQ1VUQUJMRSBnaXRfdGFnIGdpdF9yZW1vdGVfbmFtZSBpbml0X3N1Ym1vZHVsZXMgZ2l0X3N1Ym1vZHVsZXMgZ2l0X3JlcG9zaXRvcnkgd29ya19kaXIpCitmdW5jdGlvbihfZXBfd3JpdGVfZ2l0dXBkYXRlX3NjcmlwdCBzY3JpcHRfZmlsZW5hbWUgZ2l0X0VYRUNVVEFCTEUgZ2l0X3RhZyBnaXRfcmVtb3RlX25hbWUgaW5pdF9zdWJtb2R1bGVzIGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2UgZ2l0X3N1Ym1vZHVsZXMgZ2l0X3JlcG9zaXRvcnkgd29ya19kaXIpCiAgIGlmKCIke2dpdF90YWd9IiBTVFJFUVVBTCAiIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYWcgZm9yIGdpdCBjaGVja291dCBzaG91bGQgbm90IGJlIGVtcHR5LiIpCiAgIGVuZGlmKCkKQEAgLTEzOTQsNyArMTQwMiw3IEBACiAgIHNldChpbml0X3N1Ym1vZHVsZXMgJHtpbml0X3N1Ym1vZHVsZXN9KQogICBpZihpbml0X3N1Ym1vZHVsZXMpCiAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAtLWluaXQgJHtnaXRfc3VibW9kdWxlc30KKyAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN1Ym1vZHVsZSB1cGRhdGUgJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSAtLWluaXQgJHtnaXRfc3VibW9kdWxlc30KICAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn0vJHtzcmNfbmFtZX1cIgogICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKICAgICAgICkKQEAgLTE3NzIsNiArMTc4MCwxMSBAQAogICAjIFJlcGxhY2UgbG9jYXRpb24gdGFncy4KICAgX2VwX3JlcGxhY2VfbG9jYXRpb25fdGFncygke3RhcmdldF9uYW1lfSBzY3JpcHRfaW5pdGlhbF9jYWNoZSkKICAgX2VwX3JlcGxhY2VfbG9jYXRpb25fdGFncygke3RhcmdldF9uYW1lfSBzY3JpcHRfZmlsZW5hbWUpCisgICMgUmVwbGFjZSBsaXN0IHNlcGFyYXRvcnMuCisgIGdldF9wcm9wZXJ0eShzZXAgVEFSR0VUICR7dGFyZ2V0X25hbWV9IFBST1BFUlRZIF9FUF9MSVNUX1NFUEFSQVRPUikKKyAgaWYoc2VwIEFORCBzY3JpcHRfaW5pdGlhbF9jYWNoZSkKKyAgICBzdHJpbmcoUkVQTEFDRSAiJHtzZXB9IiAiOyIgc2NyaXB0X2luaXRpYWxfY2FjaGUgIiR7c2NyaXB0X2luaXRpYWxfY2FjaGV9IikKKyAgZW5kaWYoKQogICAjIFdyaXRlIG91dCB0aGUgaW5pdGlhbCBjYWNoZSBmaWxlIHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuCiAgIGZpbGUoR0VORVJBVEUgT1VUUFVUICIke3NjcmlwdF9maWxlbmFtZX0iIENPTlRFTlQgIiR7c2NyaXB0X2luaXRpYWxfY2FjaGV9IikKIGVuZGZ1bmN0aW9uKCkKQEAgLTIzMjksNiArMjM0MiwyOSBAQAogICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCiAKK2Z1bmN0aW9uKF9lcF9nZXRfZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSBnaXRfc3VibW9kdWxlc19yZWN1cnNlKQorICAjIENoZWNrcyBmb3IgR0lUX1NVQk1PRFVMRVNfUkVDVVJTRSBwcm9wZXJ0eQorICAjIERlZmF1bHQgaXMgT04sIHdoaWNoIHNldHMgZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSBvdXRwdXQgdmFyaWFibGUgdG8gIi0tcmVjdXJzaXZlIgorICAjIE90aGVyd2lzZSwgdGhlIG91dHB1dCB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gZW1wdHkgdmFsdWUgIiIKKyAgZ2V0X3Byb3BlcnR5KGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2Vfc2V0IFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9HSVRfU1VCTU9EVUxFU19SRUNVUlNFIFNFVCkKKyAgaWYoTk9UIGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2Vfc2V0KQorICAgIHNldChyZWN1cnNlRmxhZyAiLS1yZWN1cnNpdmUiKQorICBlbHNlKCkKKyAgICBnZXRfcHJvcGVydHkoZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZV92YWx1ZSBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfR0lUX1NVQk1PRFVMRVNfUkVDVVJTRSkKKyAgICBpZihnaXRfc3VibW9kdWxlc19yZWN1cnNlX3ZhbHVlKQorICAgICAgc2V0KHJlY3Vyc2VGbGFnICItLXJlY3Vyc2l2ZSIpCisgICAgZWxzZSgpCisgICAgICBzZXQocmVjdXJzZUZsYWcgIiIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIHNldCgke2dpdF9zdWJtb2R1bGVzX3JlY3Vyc2V9ICIke3JlY3Vyc2VGbGFnfSIgUEFSRU5UX1NDT1BFKQorCisgICMgVGhlIGdpdCBzdWJtb2R1bGUgdXBkYXRlICctLXJlY3Vyc2l2ZScgZmxhZyByZXF1aXJlcyBnaXQgPj0gdjEuNi41CisgIGlmKHJlY3Vyc2VGbGFnIEFORCBHSVRfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNi41KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImVycm9yOiBnaXQgdmVyc2lvbiAxLjYuNSBvciBsYXRlciByZXF1aXJlZCBmb3IgLS1yZWN1cnNpdmUgZmxhZyB3aXRoICdnaXQgc3VibW9kdWxlIC4uLic6IEdJVF9WRVJTSU9OX1NUUklORz0nJHtHSVRfVkVSU0lPTl9TVFJJTkd9JyIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKwogCiBmdW5jdGlvbihfZXBfYWRkX2Rvd25sb2FkX2NvbW1hbmQgbmFtZSkKICAgRXh0ZXJuYWxQcm9qZWN0X0dldF9Qcm9wZXJ0eSgke25hbWV9IHNvdXJjZV9kaXIgc3RhbXBfZGlyIGRvd25sb2FkX2RpciB0bXBfZGlyKQpAQCAtMjQyMSwxMSArMjQ1Nyw3IEBACiAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogY291bGQgbm90IGZpbmQgZ2l0IGZvciBjbG9uZSBvZiAke25hbWV9IikKICAgICBlbmRpZigpCiAKLSAgICAjIFRoZSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAnLS1yZWN1cnNpdmUnIGZsYWcgcmVxdWlyZXMgZ2l0ID49IHYxLjYuNQotICAgICMKLSAgICBpZihHSVRfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNi41KQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXJyb3I6IGdpdCB2ZXJzaW9uIDEuNi41IG9yIGxhdGVyIHJlcXVpcmVkIGZvciAnZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUnOiBHSVRfVkVSU0lPTl9TVFJJTkc9JyR7R0lUX1ZFUlNJT05fU1RSSU5HfSciKQotICAgIGVuZGlmKCkKKyAgICBfZXBfZ2V0X2dpdF9zdWJtb2R1bGVzX3JlY3Vyc2UoZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSkKIAogICAgIGdldF9wcm9wZXJ0eShnaXRfdGFnIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9HSVRfVEFHKQogICAgIGlmKE5PVCBnaXRfdGFnKQpAQCAtMjQ3Nyw3ICsyNTA5LDcgQEAKICAgICAjIFRoZSBzY3JpcHQgd2lsbCBkZWxldGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYW5kIHRoZW4gY2FsbCBnaXQgY2xvbmUuCiAgICAgIwogICAgIF9lcF93cml0ZV9naXRjbG9uZV9zY3JpcHQoJHt0bXBfZGlyfS8ke25hbWV9LWdpdGNsb25lLmNtYWtlICR7c291cmNlX2Rpcn0KLSAgICAgICR7R0lUX0VYRUNVVEFCTEV9ICR7Z2l0X3JlcG9zaXRvcnl9ICR7Z2l0X3RhZ30gJHtnaXRfcmVtb3RlX25hbWV9ICR7Z2l0X2luaXRfc3VibW9kdWxlc30gIiR7Z2l0X3N1Ym1vZHVsZXN9IiAiJHtnaXRfc2hhbGxvd30iICIke2dpdF9wcm9ncmVzc30iICIke2dpdF9jb25maWd9IiAke3NyY19uYW1lfSAke3dvcmtfZGlyfQorICAgICAgJHtHSVRfRVhFQ1VUQUJMRX0gJHtnaXRfcmVwb3NpdG9yeX0gJHtnaXRfdGFnfSAke2dpdF9yZW1vdGVfbmFtZX0gJHtnaXRfaW5pdF9zdWJtb2R1bGVzfSAiJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSIgIiR7Z2l0X3N1Ym1vZHVsZXN9IiAiJHtnaXRfc2hhbGxvd30iICIke2dpdF9wcm9ncmVzc30iICIke2dpdF9jb25maWd9IiAke3NyY19uYW1lfSAke3dvcmtfZGlyfQogICAgICAgJHtzdGFtcF9kaXJ9LyR7bmFtZX0tZ2l0aW5mby50eHQgJHtzdGFtcF9kaXJ9LyR7bmFtZX0tZ2l0Y2xvbmUtbGFzdHJ1bi50eHQgIiR7dGxzX3ZlcmlmeX0iCiAgICAgICApCiAgICAgc2V0KGNvbW1lbnQgIlBlcmZvcm1pbmcgZG93bmxvYWQgc3RlcCAoZ2l0IGNsb25lKSBmb3IgJyR7bmFtZX0nIikKQEAgLTI1NjMsNyArMjU5NSw3IEBACiAgICAgaWYoSVNfRElSRUNUT1JZICIke3VybH0iKQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChhYnNfZGlyICIke3VybH0iIEFCU09MVVRFKQogICAgICAgc2V0KGNvbW1lbnQgIlBlcmZvcm1pbmcgZG93bmxvYWQgc3RlcCAoRElSIGNvcHkpIGZvciAnJHtuYW1lfSciKQotICAgICAgc2V0KGNtZCAgICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeSAke3NvdXJjZV9kaXJ9CisgICAgICBzZXQoY21kICAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgJHtzb3VyY2VfZGlyfQogICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weV9kaXJlY3RvcnkgJHthYnNfZGlyfSAke3NvdXJjZV9kaXJ9KQogICAgIGVsc2UoKQogICAgICAgZ2V0X3Byb3BlcnR5KG5vX2V4dHJhY3QgVEFSR0VUICIke25hbWV9IiBQUk9QRVJUWSBfRVBfRE9XTkxPQURfTk9fRVhUUkFDVCBTRVQpCkBAIC0yNzUyLDggKzI3ODQsMTAgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAKKyAgICBfZXBfZ2V0X2dpdF9zdWJtb2R1bGVzX3JlY3Vyc2UoZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSkKKwogICAgIF9lcF93cml0ZV9naXR1cGRhdGVfc2NyaXB0KCR7dG1wX2Rpcn0vJHtuYW1lfS1naXR1cGRhdGUuY21ha2UKLSAgICAgICR7R0lUX0VYRUNVVEFCTEV9ICR7Z2l0X3RhZ30gJHtnaXRfcmVtb3RlX25hbWV9ICR7Z2l0X2luaXRfc3VibW9kdWxlc30gIiR7Z2l0X3N1Ym1vZHVsZXN9IiAke2dpdF9yZXBvc2l0b3J5fSAke3dvcmtfZGlyfQorICAgICAgJHtHSVRfRVhFQ1VUQUJMRX0gJHtnaXRfdGFnfSAke2dpdF9yZW1vdGVfbmFtZX0gJHtnaXRfaW5pdF9zdWJtb2R1bGVzfSAiJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSIgIiR7Z2l0X3N1Ym1vZHVsZXN9IiAke2dpdF9yZXBvc2l0b3J5fSAke3dvcmtfZGlyfQogICAgICAgKQogICAgIHNldChjbWQgJHtDTUFLRV9DT01NQU5EfSAtUCAke3RtcF9kaXJ9LyR7bmFtZX0tZ2l0dXBkYXRlLmNtYWtlKQogICAgIHNldChhbHdheXMgMSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmV0Y2hDb250ZW50LmNtYWtlIGIvTW9kdWxlcy9GZXRjaENvbnRlbnQuY21ha2UKaW5kZXggNTcxNmIwMS4uMGU5OGY0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GZXRjaENvbnRlbnQuY21ha2UKKysrIGIvTW9kdWxlcy9GZXRjaENvbnRlbnQuY21ha2UKQEAgLTc2LDggKzc2LDExIEBACiBwb3B1bGF0ZSBzb21lIGNvbnRlbnQgaW4gQ01ha2UncyBzY3JpcHQgbW9kZS4KIAogCitDb21tYW5kcworXl5eXl5eXl4KKwogRGVjbGFyaW5nIENvbnRlbnQgRGV0YWlscwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiAuLiBjb21tYW5kOjogRmV0Y2hDb250ZW50X0RlY2xhcmUKIApAQCAtMTMwLDcgKzEzMyw3IEBACiAgICAgKQogCiBQb3B1bGF0aW5nIFRoZSBDb250ZW50Ci1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKIEZvciBtb3N0IGNvbW1vbiBzY2VuYXJpb3MsIHBvcHVsYXRpb24gbWVhbnMgbWFraW5nIGNvbnRlbnQgYXZhaWxhYmxlIHRvIHRoZQogbWFpbiBidWlsZCBhY2NvcmRpbmcgdG8gcHJldmlvdXNseSBkZWNsYXJlZCBkZXRhaWxzIGZvciB0aGF0IGRlcGVuZGVuY3kuCkBAIC01OTYsOSArNTk5LDYgQEAKIAogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotCi1zZXQoX19GZXRjaENvbnRlbnRfcHJpdmF0ZURpciAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GZXRjaENvbnRlbnQiKQotCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgUmVjb3JkaW5nIGFuZCByZXRyaWV2aW5nIGNvbnRlbnQgZGV0YWlscyBmb3IgbGF0ZXIgcG9wdWxhdGlvbgogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04ODgsNyArODg4LDcgQEAKICAgIyBhbnl0aGluZyB0byBiZSB1cGRhdGVkLCBzbyBleHRyYSByZWJ1aWxkcyBvZiB0aGUgcHJvamVjdCB3b24ndCBvY2N1ci4KICAgIyBNYWtlIHN1cmUgdG8gcGFzcyB0aHJvdWdoIENNQUtFX01BS0VfUFJPR1JBTSBpbiBjYXNlIHRoZSBtYWluIHByb2plY3QKICAgIyBoYXMgdGhpcyBzZXQgdG8gc29tZXRoaW5nIG5vdCBmaW5kYWJsZSBvbiB0aGUgUEFUSC4KLSAgY29uZmlndXJlX2ZpbGUoIiR7X19GZXRjaENvbnRlbnRfcHJpdmF0ZURpcn0vQ01ha2VMaXN0cy5jbWFrZS5pbiIKKyAgY29uZmlndXJlX2ZpbGUoIiR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUn0vRmV0Y2hDb250ZW50L0NNYWtlTGlzdHMuY21ha2UuaW4iCiAgICAgICAgICAgICAgICAgICIke0FSR19TVUJCVUlMRF9ESVJ9L0NNYWtlTGlzdHMudHh0IikKICAgZXhlY3V0ZV9wcm9jZXNzKAogICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAke2dlbmVyYXRvck9wdHN9IC4KZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEFybWFkaWxsby5jbWFrZSBiL01vZHVsZXMvRmluZEFybWFkaWxsby5jbWFrZQppbmRleCBjNGU1NWNlLi4yNDNiOWUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRBcm1hZGlsbG8uY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQXJtYWRpbGxvLmNtYWtlCkBAIC02LDcgKzYsNyBAQAogLS0tLS0tLS0tLS0tLQogCiBGaW5kIHRoZSBBcm1hZGlsbG8gQysrIGxpYnJhcnkuCi1Bcm1hZGlsbG8gaXMgbGlicmFyeSBmb3IgbGluZWFyIGFsZ2VicmEgJiBzY2llbnRpZmljIGNvbXB1dGluZy4KK0FybWFkaWxsbyBpcyBhIGxpYnJhcnkgZm9yIGxpbmVhciBhbGdlYnJhICYgc2NpZW50aWZpYyBjb21wdXRpbmcuCiAKIFVzaW5nIEFybWFkaWxsbzoKIApAQCAtMzEsMTkgKzMxLDEzIEBACiAgIEFSTUFESUxMT19WRVJTSU9OX05BTUUgLSBuYW1lIG9mIHRoZSB2ZXJzaW9uIChleDogIkFudGlwb2RlYW4gQW50aWxlZWNoIikKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLSMgVU5JWCBwYXRocyBhcmUgc3RhbmRhcmQsIG5vIG5lZWQgdG8gd3JpdGUuCi1maW5kX2xpYnJhcnkoQVJNQURJTExPX0xJQlJBUlkKLSAgTkFNRVMgYXJtYWRpbGxvCi0gIFBBVEhTICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvL2xpYiIgICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvL2xpYjY0IiAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsbyIKLSAgKQogZmluZF9wYXRoKEFSTUFESUxMT19JTkNMVURFX0RJUgogICBOQU1FUyBhcm1hZGlsbG8KICAgUEFUSFMgIiRFTlZ7UHJvZ3JhbUZpbGVzfS9Bcm1hZGlsbG8vaW5jbHVkZSIKICAgKQotCittYXJrX2FzX2FkdmFuY2VkKEFSTUFESUxMT19JTkNMVURFX0RJUikKIAogaWYoQVJNQURJTExPX0lOQ0xVREVfRElSKQotCiAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICMgIEV4dHJhY3QgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIDxhcm1hZGlsbG8+CiAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OSwzMiArNTMsNzkgQEAKICAgaWYoRVhJU1RTICIke0FSTUFESUxMT19JTkNMVURFX0RJUn0vYXJtYWRpbGxvX2JpdHMvYXJtYV92ZXJzaW9uLmhwcCIpCiAKICAgICAjIFJlYWQgYW5kIHBhcnNlIGFybWRpbGxvIHZlcnNpb24gaGVhZGVyIGZpbGUgZm9yIHZlcnNpb24gbnVtYmVyCi0gICAgZmlsZShTVFJJTkdTICIke0FSTUFESUxMT19JTkNMVURFX0RJUn0vYXJtYWRpbGxvX2JpdHMvYXJtYV92ZXJzaW9uLmhwcCIgX2FybWFkaWxsb19IRUFERVJfQ09OVEVOVFMgUkVHRVggIiNkZWZpbmUgQVJNQV9WRVJTSU9OX1tBLVpdKyAiKQotICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX01BSk9SIChbMC05XSspLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX01BSk9SICIke19hcm1hZGlsbG9fSEVBREVSX0NPTlRFTlRTfSIpCi0gICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fTUlOT1IgKFswLTldKykuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fTUlOT1IgIiR7X2FybWFkaWxsb19IRUFERVJfQ09OVEVOVFN9IikKLSAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9QQVRDSCAoWzAtOV0rKS4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9QQVRDSCAiJHtfYXJtYWRpbGxvX0hFQURFUl9DT05URU5UU30iKQorICAgIGZpbGUoU1RSSU5HUyAiJHtBUk1BRElMTE9fSU5DTFVERV9ESVJ9L2FybWFkaWxsb19iaXRzL2FybWFfdmVyc2lvbi5ocHAiIF9BUk1BX0hFQURFUl9DT05URU5UUyBSRUdFWCAiI2RlZmluZSBBUk1BX1ZFUlNJT05fW0EtWl0rICIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fTUFKT1IgKFswLTldKykuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fTUFKT1IgIiR7X0FSTUFfSEVBREVSX0NPTlRFTlRTfSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fTUlOT1IgKFswLTldKykuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fTUlOT1IgIiR7X0FSTUFfSEVBREVSX0NPTlRFTlRTfSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fUEFUQ0ggKFswLTldKykuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fUEFUQ0ggIiR7X0FSTUFfSEVBREVSX0NPTlRFTlRTfSIpCiAKICAgICAjIFdBUk5JTkc6IFRoZSBudW1iZXIgb2Ygc3BhY2VzIGJlZm9yZSB0aGUgdmVyc2lvbiBuYW1lIGlzIG5vdCBvbmUuCi0gICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fTkFNRSArXCIoWzAtOWEtekEtWiBfLV0rKVwiLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX05BTUUgIiR7X2FybWFkaWxsb19IRUFERVJfQ09OVEVOVFN9IikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9OQU1FXCArXCIoWzAtOWEtekEtWlwgXy1dKylcIi4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9OQU1FICIke19BUk1BX0hFQURFUl9DT05URU5UU30iKQogCi0gICAgdW5zZXQoX2FybWFkaWxsb19IRUFERVJfQ09OVEVOVFMpCiAgIGVuZGlmKCkKIAogICBzZXQoQVJNQURJTExPX1ZFUlNJT05fU1RSSU5HICIke0FSTUFESUxMT19WRVJTSU9OX01BSk9SfS4ke0FSTUFESUxMT19WRVJTSU9OX01JTk9SfS4ke0FSTUFESUxMT19WRVJTSU9OX1BBVENIfSIpCiBlbmRpZiAoKQogCitpZihFWElTVFMgIiR7QVJNQURJTExPX0lOQ0xVREVfRElSfS9hcm1hZGlsbG9fYml0cy9jb25maWcuaHBwIikKKyAgZmlsZShTVFJJTkdTICIke0FSTUFESUxMT19JTkNMVURFX0RJUn0vYXJtYWRpbGxvX2JpdHMvY29uZmlnLmhwcCIgX0FSTUFfQ09ORklHX0NPTlRFTlRTIFJFR0VYICJeI2RlZmluZSBBUk1BX1VTRV9bQS1aXSsiKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIkFSTUFfVVNFX1dSQVBQRVIiIF9BUk1BX1VTRV9XUkFQUEVSICIke19BUk1BX0NPTkZJR19DT05URU5UU30iKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIkFSTUFfVVNFX0xBUEFDSyIgX0FSTUFfVVNFX0xBUEFDSyAiJHtfQVJNQV9DT05GSUdfQ09OVEVOVFN9IikKKyAgc3RyaW5nKFJFR0VYIE1BVENIICJBUk1BX1VTRV9CTEFTIiBfQVJNQV9VU0VfQkxBUyAiJHtfQVJNQV9DT05GSUdfQ09OVEVOVFN9IikKKyAgc3RyaW5nKFJFR0VYIE1BVENIICJBUk1BX1VTRV9BUlBBQ0siIF9BUk1BX1VTRV9BUlBBQ0sgIiR7X0FSTUFfQ09ORklHX0NPTlRFTlRTfSIpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiQVJNQV9VU0VfSERGNSIgX0FSTUFfVVNFX0hERjUgIiR7X0FSTUFfQ09ORklHX0NPTlRFTlRTfSIpCitlbmRpZigpCisKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKKworIyBJZiBfQVJNQV9VU0VfV1JBUFBFUiBpcyBzZXQsIHRoZW4gd2UganVzdCBsaW5rIHRvIGFybWFkaWxsbywgYnV0IGlmIGl0J3Mgbm90IHRoZW4gd2UgbmVlZCBzdXBwb3J0IGxpYnJhcmllcyBpbnN0ZWFkCitzZXQoX0FSTUFfU1VQUE9SVF9MSUJSQVJJRVMpCisKK2lmKF9BUk1BX1VTRV9XUkFQUEVSKQorICAjIExpbmsgdG8gdGhlIGFybWFkaWxsbyB3cmFwcGVyIGxpYnJhcnkuCisgIGZpbmRfbGlicmFyeShBUk1BRElMTE9fTElCUkFSWQorICAgIE5BTUVTIGFybWFkaWxsbworICAgIFBBVEhTCisgICAgICAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9saWIiCisgICAgICAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9saWI2NCIKKyAgICAgICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvIgorICAgICkKKyAgbWFya19hc19hZHZhbmNlZChBUk1BRElMTE9fTElCUkFSWSkKKyAgc2V0KF9BUk1BX1JFUVVJUkVEX1ZBUlMgQVJNQURJTExPX0xJQlJBUlkpCitlbHNlKCkKKyAgIyBMaW5rIGRpcmVjdGx5IHRvIGluZGl2aWR1YWwgY29tcG9uZW50cy4KKyAgc2V0KEFSTUFESUxMT19MSUJSQVJZICIiKQorICBmb3JlYWNoKHBrZworICAgICAgTEFQQUNLCisgICAgICBCTEFTCisgICAgICBBUlBBQ0sKKyAgICAgIEhERjUKKyAgICAgICkKKyAgICBpZihfQVJNQV9VU0VfJHtwa2d9KQorICAgICAgZmluZF9wYWNrYWdlKCR7cGtnfSBRVUlFVCkKKyAgICAgIGxpc3QoQVBQRU5EIF9BUk1BX1JFUVVJUkVEX1ZBUlMgIiR7cGtnfV9GT1VORCIpCisgICAgICBpZigke3BrZ31fRk9VTkQpCisgICAgICAgIGxpc3QoQVBQRU5EIF9BUk1BX1NVUFBPUlRfTElCUkFSSUVTICR7JHtwa2d9X0xJQlJBUklFU30pCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGlmKCkKKwogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEFybWFkaWxsbwotICBSRVFVSVJFRF9WQVJTIEFSTUFESUxMT19MSUJSQVJZIEFSTUFESUxMT19JTkNMVURFX0RJUgorICBSRVFVSVJFRF9WQVJTIEFSTUFESUxMT19JTkNMVURFX0RJUiAke19BUk1BX1JFUVVJUkVEX1ZBUlN9CiAgIFZFUlNJT05fVkFSIEFSTUFESUxMT19WRVJTSU9OX1NUUklORykKLSMgdmVyc2lvbl92YXIgZmFpbHMgd2l0aCBjbWFrZSA8IDIuOC40LgogCiBpZiAoQVJNQURJTExPX0ZPVU5EKQogICBzZXQoQVJNQURJTExPX0lOQ0xVREVfRElSUyAke0FSTUFESUxMT19JTkNMVURFX0RJUn0pCi0gIHNldChBUk1BRElMTE9fTElCUkFSSUVTICR7QVJNQURJTExPX0xJQlJBUll9KQorICBzZXQoQVJNQURJTExPX0xJQlJBUklFUyAke0FSTUFESUxMT19MSUJSQVJZfSAke19BUk1BX1NVUFBPUlRfTElCUkFSSUVTfSkKIGVuZGlmICgpCiAKLSMgSGlkZSBpbnRlcm5hbCB2YXJpYWJsZXMKLW1hcmtfYXNfYWR2YW5jZWQoCi0gIEFSTUFESUxMT19JTkNMVURFX0RJUgotICBBUk1BRElMTE9fTElCUkFSWSkKKyMgQ2xlYW4gdXAgaW50ZXJuYWwgdmFyaWFibGVzCit1bnNldChfQVJNQV9SRVFVSVJFRF9WQVJTKQordW5zZXQoX0FSTUFfU1VQUE9SVF9MSUJSQVJJRVMpCit1bnNldChfQVJNQV9VU0VfV1JBUFBFUikKK3Vuc2V0KF9BUk1BX1VTRV9MQVBBQ0spCit1bnNldChfQVJNQV9VU0VfQkxBUykKK3Vuc2V0KF9BUk1BX1VTRV9BUlBBQ0spCit1bnNldChfQVJNQV9VU0VfSERGNSkKK3Vuc2V0KF9BUk1BX0NPTkZJR19DT05URU5UUykKK3Vuc2V0KF9BUk1BX0hFQURFUl9DT05URU5UUykKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEJMQVMuY21ha2UgYi9Nb2R1bGVzL0ZpbmRCTEFTLmNtYWtlCmluZGV4IGQzYWNhZmMuLjliNmQwOWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEJMQVMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQkxBUy5jbWFrZQpAQCAtOCw4ICs4LDkgQEAKIEZpbmQgQmFzaWMgTGluZWFyIEFsZ2VicmEgU3VicHJvZ3JhbXMgKEJMQVMpIGxpYnJhcnkKIAogVGhpcyBtb2R1bGUgZmluZHMgYW4gaW5zdGFsbGVkIEZvcnRyYW4gbGlicmFyeSB0aGF0IGltcGxlbWVudHMgdGhlCi1CTEFTIGxpbmVhci1hbGdlYnJhIGludGVyZmFjZSAoc2VlIGh0dHA6Ly93d3cubmV0bGliLm9yZy9ibGFzLykuICBUaGUKLWxpc3Qgb2YgbGlicmFyaWVzIHNlYXJjaGVkIGZvciBpcyB0YWtlbiBmcm9tIHRoZSBgYGF1dG9jb25mYGAgbWFjcm8gZmlsZSwKK0JMQVMgbGluZWFyLWFsZ2VicmEgaW50ZXJmYWNlIChzZWUgaHR0cDovL3d3dy5uZXRsaWIub3JnL2JsYXMvKS4KKworVGhlIGFwcHJvYWNoIGZvbGxvd3MgdGhhdCB0YWtlbiBmb3IgdGhlIGBgYXV0b2NvbmZgYCBtYWNybyBmaWxlLAogYGBhY3hfYmxhcy5tNGBgIChkaXN0cmlidXRlZCBhdAogaHR0cDovL2FjLWFyY2hpdmUuc291cmNlZm9yZ2UubmV0L2FjLWFyY2hpdmUvYWN4X2JsYXMuaHRtbCkuCiAKQEAgLTI1LDI4ICsyNiwyOSBAQAogICBJZiBzZXQsIGNoZWNrcyBvbmx5IHRoZSBzcGVjaWZpZWQgdmVuZG9yLCBpZiBub3Qgc2V0IGNoZWNrcyBhbGwgdGhlCiAgIHBvc3NpYmlsaXRpZXMuICBMaXN0IG9mIHZlbmRvcnMgdmFsaWQgaW4gdGhpcyBtb2R1bGU6CiAKLSAgKiBHb3RvCi0gICogT3BlbkJMQVMKLSAgKiBGTEFNRQotICAqIEFUTEFTIFBoaVBBQ0sKLSAgKiBDWE1MCi0gICogRFhNTAotICAqIFN1blBlcmYKLSAgKiBTQ1NMCi0gICogU0dJTUFUSAotICAqIElCTUVTU0wKLSAgKiBJbnRlbDEwXzMyIChpbnRlbCBta2wgdjEwIDMyIGJpdCkKLSAgKiBJbnRlbDEwXzY0bHAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgbHA2NCBtb2RlbCkKLSAgKiBJbnRlbDEwXzY0bHBfc2VxIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNlcXVlbnRpYWwgY29kZSwgbHA2NCBtb2RlbCkKLSAgKiBJbnRlbDEwXzY0aWxwIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGlscDY0IG1vZGVsKQotICAqIEludGVsMTBfNjRpbHBfc2VxIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNlcXVlbnRpYWwgY29kZSwgaWxwNjQgbW9kZWwpCi0gICogSW50ZWwgKG9ic29sZXRlIHZlcnNpb25zIG9mIG1rbCAzMiBhbmQgNjQgYml0KQotICAqIEFDTUwKLSAgKiBBQ01MX01QCi0gICogQUNNTF9HUFUKLSAgKiBBcHBsZQotICAqIE5BUwotICAqIEdlbmVyaWMKKyAgKiBgYEdvdG9gYAorICAqIGBgT3BlbkJMQVNgYAorICAqIGBgRkxBTUVgYAorICAqIGBgQVRMQVMgUGhpUEFDS2BgCisgICogYGBDWE1MYGAKKyAgKiBgYERYTUxgYAorICAqIGBgU3VuUGVyZmBgCisgICogYGBTQ1NMYGAKKyAgKiBgYFNHSU1BVEhgYAorICAqIGBgSUJNRVNTTGBgCisgICogYGBJbnRlbDEwXzMyYGAgKGludGVsIG1rbCB2MTAgMzIgYml0KQorICAqIGBgSW50ZWwxMF82NGxwYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgbHA2NCBtb2RlbCkKKyAgKiBgYEludGVsMTBfNjRscF9zZXFgYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzZXF1ZW50aWFsIGNvZGUsIGxwNjQgbW9kZWwpCisgICogYGBJbnRlbDEwXzY0aWxwYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgaWxwNjQgbW9kZWwpCisgICogYGBJbnRlbDEwXzY0aWxwX3NlcWBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNlcXVlbnRpYWwgY29kZSwgaWxwNjQgbW9kZWwpCisgICogYGBJbnRlbDEwXzY0X2R5bmBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNpbmdsZSBkeW5hbWljIGxpYnJhcnkpCisgICogYGBJbnRlbGBgIChvYnNvbGV0ZSB2ZXJzaW9ucyBvZiBta2wgMzIgYW5kIDY0IGJpdCkKKyAgKiBgYEFDTUxgYAorICAqIGBgQUNNTF9NUGBgCisgICogYGBBQ01MX0dQVWBgCisgICogYGBBcHBsZWBgCisgICogYGBOQVNgYAorICAqIGBgR2VuZXJpY2BgCiAKIGBgQkxBX0Y5NWBgCiAgIGlmIGBgT05gYCB0cmllcyB0byBmaW5kIHRoZSBCTEFTOTUgaW50ZXJmYWNlcwpAQCAtNzUsNyArNzcsOCBAQAogCiAuLiBub3RlOjoKIAotICBDIG9yIENYWCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIEludGVsIE1hdGggS2VybmVsIExpYnJhcnkgKE1LTCkKKyAgQywgQ1hYIG9yIEZvcnRyYW4gbXVzdCBiZSBlbmFibGVkIHRvIGRldGVjdCBhIEJMQVMgbGlicmFyeS4KKyAgQyBvciBDWFggbXVzdCBiZSBlbmFibGVkIHRvIHVzZSBJbnRlbCBNYXRoIEtlcm5lbCBMaWJyYXJ5IChNS0wpLgogCiAgIEZvciBleGFtcGxlLCB0byB1c2UgSW50ZWwgTUtMIGxpYnJhcmllcyBhbmQvb3IgSW50ZWwgY29tcGlsZXI6CiAKQEAgLTg3LDIyICs5MCwxNSBAQAogSGludHMKIF5eXl5eCiAKLVNldCBgYE1LTFJPT1RgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGFuIE1LTAotaW5zdGFsbGF0aW9uLgorU2V0IHRoZSBgYE1LTFJPT1RgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGFuIE1LTAoraW5zdGFsbGF0aW9uLCBvciBhZGQgdGhlIGRpcmVjdG9yeSB0byB0aGUgZHluYW1pYyBsaWJyYXJ5IGxvYWRlciBlbnZpcm9ubWVudAordmFyaWFibGUgZm9yIHlvdXIgcGxhdGZvcm0gKGBgTElCYGAsIGBgRFlMRF9MSUJSQVJZX1BBVEhgYCBvcgorYGBMRF9MSUJSQVJZX1BBVEhgYCkuCiAKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0Z1bmN0aW9uRXhpc3RzLmNtYWtlKQotaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NoZWNrRm9ydHJhbkZ1bmN0aW9uRXhpc3RzLmNtYWtlKQotaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NNYWtlUHVzaENoZWNrU3RhdGUuY21ha2UpCi1pbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCi1jbWFrZV9wdXNoX2NoZWNrX3N0YXRlKCkKLXNldChDTUFLRV9SRVFVSVJFRF9RVUlFVCAke0JMQVNfRklORF9RVUlFVExZfSkKLQotc2V0KF9ibGFzX09SSUdfQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKLQogIyBDaGVjayB0aGUgbGFuZ3VhZ2UgYmVpbmcgdXNlZAotaWYoIE5PVCAoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkgKQoraWYoTk9UIChDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKSkKICAgaWYoQkxBU19GSU5EX1JFUVVJUkVEKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZpbmRCTEFTIHJlcXVpcmVzIEZvcnRyYW4sIEMsIG9yIEMrKyB0byBiZSBlbmFibGVkLiIpCiAgIGVsc2UoKQpAQCAtMTExLDYgKzEwNywxNiBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKK2lmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKQorICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ2hlY2tGb3J0cmFuRnVuY3Rpb25FeGlzdHMuY21ha2UpCitlbHNlKCkKKyAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NoZWNrRnVuY3Rpb25FeGlzdHMuY21ha2UpCitlbmRpZigpCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ01ha2VQdXNoQ2hlY2tTdGF0ZS5jbWFrZSkKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKK2NtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorc2V0KENNQUtFX1JFUVVJUkVEX1FVSUVUICR7QkxBU19GSU5EX1FVSUVUTFl9KQorCiBpZihCTEFfUFJFRkVSX1BLR0NPTkZJRykKICAgZmluZF9wYWNrYWdlKFBrZ0NvbmZpZykKICAgcGtnX2NoZWNrX21vZHVsZXMoUEtHQ19CTEFTIGJsYXMpCkBAIC0xMjEsNyArMTI3LDIzIEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAotbWFjcm8oQ2hlY2tfRm9ydHJhbl9MaWJyYXJpZXMgTElCUkFSSUVTIF9wcmVmaXggX25hbWUgX2ZsYWdzIF9saXN0IF90aHJlYWQpCitzZXQoX2JsYXNfT1JJR19DTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQoraWYoQkxBX1NUQVRJQykKKyAgaWYoV0lOMzIpCisgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAubGliICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKKyAgZWxzZSgpCisgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAuYSAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCisgIGVuZGlmKCkKK2Vsc2UoKQorICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQorICAgICMgZm9yIHVidW50dSdzIGxpYmJsYXMzZ2YgYW5kIGxpYmxhcGFjazNnZiBwYWNrYWdlcworICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9IC5zby4zZ2YpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworIyBUT0RPOiBtb3ZlIHRoaXMgc3R1ZmYgdG8gYSBzZXBhcmF0ZSBtb2R1bGUKKworbWFjcm8oQ0hFQ0tfQkxBU19MSUJSQVJJRVMgTElCUkFSSUVTIF9wcmVmaXggX25hbWUgX2ZsYWdzIF9saXN0IF90aHJlYWRsaWJzIF9hZGRsaWJkaXIgX3N1YmRpcnMpCiAgICMgVGhpcyBtYWNybyBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGNvbWJpbmF0aW9uIG9mIGZvcnRyYW4gbGlicmFyaWVzCiAgICMgZ2l2ZW4gYnkgX2xpc3QuICBJZiB0aGUgY29tYmluYXRpb24gaXMgZm91bmQsIHRoaXMgbWFjcm8gY2hlY2tzICh1c2luZyB0aGUKICAgIyBDaGVja19Gb3J0cmFuX0Z1bmN0aW9uX0V4aXN0cyBtYWNybykgd2hldGhlciBjYW4gbGluayBhZ2FpbnN0IHRoYXQgbGlicmFyeQpAQCAtMTMyLDU5ICsxNTQsNTEgQEAKIAogICAjIE4uQi4gX3ByZWZpeCBpcyB0aGUgcHJlZml4IGFwcGxpZWQgdG8gdGhlIG5hbWVzIG9mIGFsbCBjYWNoZWQgdmFyaWFibGVzIHRoYXQKICAgIyBhcmUgZ2VuZXJhdGVkIGludGVybmFsbHkgYW5kIG1hcmtlZCBhZHZhbmNlZCBieSB0aGlzIG1hY3JvLgotCi0gIHNldChfbGliZGlyICR7QVJHTn0pCisgICMgX2FkZGxpYmRpciBpcyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggcGF0aHMuIF9zdWJkaXJzIGlzIGEgbGlzdCBvZiBwYXRoCisgICMgc3VmZml4ZXMgdG8gYmUgdXNlZCBieSBmaW5kX2xpYnJhcnkoKS4KIAogICBzZXQoX2xpYnJhcmllc193b3JrIFRSVUUpCiAgIHNldCgke0xJQlJBUklFU30pCiAgIHNldChfY29tYmluZWRfbmFtZSkKLSAgaWYgKE5PVCBfbGliZGlyKQotICAgIGlmIChXSU4zMikKLSAgICAgIHNldChfbGliZGlyIEVOViBMSUIpCi0gICAgZWxzZWlmIChBUFBMRSkKLSAgICAgIHNldChfbGliZGlyIEVOViBEWUxEX0xJQlJBUllfUEFUSCkKLSAgICBlbHNlICgpCi0gICAgICBzZXQoX2xpYmRpciBFTlYgTERfTElCUkFSWV9QQVRIKQotICAgIGVuZGlmICgpCi0gIGVuZGlmICgpCiAKLSAgbGlzdChBUFBFTkQgX2xpYmRpciAiJHtDTUFLRV9DX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKKyAgc2V0KF9leHRhZGRsaWJkaXIgIiR7X2FkZGxpYmRpcn0iKQorICBpZihXSU4zMikKKyAgICBsaXN0KEFQUEVORCBfZXh0YWRkbGliZGlyIEVOViBMSUIpCisgIGVsc2VpZihBUFBMRSkKKyAgICBsaXN0KEFQUEVORCBfZXh0YWRkbGliZGlyIEVOViBEWUxEX0xJQlJBUllfUEFUSCkKKyAgZWxzZSgpCisgICAgbGlzdChBUFBFTkQgX2V4dGFkZGxpYmRpciBFTlYgTERfTElCUkFSWV9QQVRIKQorICBlbmRpZigpCisgIGxpc3QoQVBQRU5EIF9leHRhZGRsaWJkaXIgIiR7Q01BS0VfQ19JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSIpCiAKICAgZm9yZWFjaChfbGlicmFyeSAke19saXN0fSkKLSAgICBzZXQoX2NvbWJpbmVkX25hbWUgJHtfY29tYmluZWRfbmFtZX1fJHtfbGlicmFyeX0pCi0gICAgaWYoTk9UICIke190aHJlYWR9IiBTVFJFUVVBTCAiIikKLSAgICAgIHNldChfY29tYmluZWRfbmFtZSAke19jb21iaW5lZF9uYW1lfV90aHJlYWQpCi0gICAgZW5kaWYoKQotICAgIGlmKF9saWJyYXJpZXNfd29yaykKLSAgICAgIGlmIChCTEFfU1RBVElDKQotICAgICAgICBpZiAoV0lOMzIpCi0gICAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAubGliICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgaWYgKEFQUExFKQotICAgICAgICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmxpYiAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCi0gICAgICAgIGVsc2UgKCkKLSAgICAgICAgICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5hICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgIGVsc2UgKCkKLSAgICAgICAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCi0gICAgICAgICAgIyBmb3IgdWJ1bnR1J3MgbGliYmxhczNnZiBhbmQgbGlibGFwYWNrM2dmIHBhY2thZ2VzCi0gICAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30gLnNvLjNnZikKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgIGVuZGlmICgpCi0gICAgICBmaW5kX2xpYnJhcnkoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZCi0gICAgICAgIE5BTUVTICR7X2xpYnJhcnl9Ci0gICAgICAgIFBBVEhTICR7X2xpYmRpcn0KKyAgICBpZihfbGlicmFyeSBNQVRDSEVTICJeLVdsLC0tKHN0YXJ0fGVuZCktZ3JvdXAkIikKKyAgICAgICMgUmVzcGVjdCBsaW5rZXIgZmxhZ3MgbGlrZSAtLXN0YXJ0L2VuZC1ncm91cCAocmVxdWlyZWQgYnkgTUtMKQorICAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gIiR7X2xpYnJhcnl9IikKKyAgICBlbHNlKCkKKyAgICAgIHNldChfY29tYmluZWRfbmFtZSAke19jb21iaW5lZF9uYW1lfV8ke19saWJyYXJ5fSkKKyAgICAgIGlmKE5PVCAiJHtfdGhyZWFkbGlic30iIFNUUkVRVUFMICIiKQorICAgICAgICBzZXQoX2NvbWJpbmVkX25hbWUgJHtfY29tYmluZWRfbmFtZX1fdGhyZWFkbGlicykKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKF9saWJyYXJpZXNfd29yaykKKyAgICAgICAgZmluZF9saWJyYXJ5KCR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWQorICAgICAgICAgIE5BTUVTICR7X2xpYnJhcnl9CisgICAgICAgICAgUEFUSFMgJHtfZXh0YWRkbGliZGlyfQorICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfc3ViZGlyc30KICAgICAgICAgKQotICAgICAgbWFya19hc19hZHZhbmNlZCgke19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUlkpCi0gICAgICBzZXQoJHtMSUJSQVJJRVN9ICR7JHtMSUJSQVJJRVN9fSAkeyR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWX0pCi0gICAgICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKKyAgICAgICAgI21lc3NhZ2UoIkRFQlVHOiBmaW5kX2xpYnJhcnkoJHtfbGlicmFyeX0pIGdvdCAkeyR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWX0iKQorICAgICAgICBtYXJrX2FzX2FkdmFuY2VkKCR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWSkKKyAgICAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gJHske19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUll9KQorICAgICAgICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKKyAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQorCiAgIGlmKF9saWJyYXJpZXNfd29yaykKICAgICAjIFRlc3QgdGhpcyBjb21iaW5hdGlvbiBvZiBsaWJyYXJpZXMuCi0gICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke19mbGFnc30gJHske0xJQlJBUklFU319ICR7X3RocmVhZH0pCi0gICAgIyAgbWVzc2FnZSgiREVCVUc6IENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyA9ICR7Q01BS0VfUkVRVUlSRURfTElCUkFSSUVTfSIpCi0gICAgaWYgKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKQorICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtfZmxhZ3N9ICR7JHtMSUJSQVJJRVN9fSAke190aHJlYWRsaWJzfSkKKyAgICAjbWVzc2FnZSgiREVCVUc6IENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyA9ICR7Q01BS0VfUkVRVUlSRURfTElCUkFSSUVTfSIpCisgICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MT0FERUQpCiAgICAgICBjaGVja19mb3J0cmFuX2Z1bmN0aW9uX2V4aXN0cygiJHtfbmFtZX0iICR7X3ByZWZpeH0ke19jb21iaW5lZF9uYW1lfV9XT1JLUykKICAgICBlbHNlKCkKICAgICAgIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cygiJHtfbmFtZX1fIiAke19wcmVmaXh9JHtfY29tYmluZWRfbmFtZX1fV09SS1MpCkBAIC0xOTIsMTEgKzIwNiwxMiBAQAogICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCiAgICAgc2V0KF9saWJyYXJpZXNfd29yayAkeyR7X3ByZWZpeH0ke19jb21iaW5lZF9uYW1lfV9XT1JLU30pCiAgIGVuZGlmKCkKKwogICBpZihfbGlicmFyaWVzX3dvcmspCiAgICAgaWYoIiR7X2xpc3R9IiBTVFJFUVVBTCAiIikKICAgICAgIHNldCgke0xJQlJBUklFU30gIiR7TElCUkFSSUVTfS1QTEFDRUhPTERFUi1GT1ItRU1QVFktTElCUkFSSUVTIikKICAgICBlbHNlKCkKLSAgICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICR7X3RocmVhZH0pICAjIGZvciBzdGF0aWMgbGluaworICAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gJHtfdGhyZWFkbGlic30pCiAgICAgZW5kaWYoKQogICBlbHNlKCkKICAgICBzZXQoJHtMSUJSQVJJRVN9IEZBTFNFKQpAQCAtMjA3LDkxICsyMjIsOTYgQEAKIHNldChCTEFTX0xJTktFUl9GTEFHUykKIHNldChCTEFTX0xJQlJBUklFUykKIHNldChCTEFTOTVfTElCUkFSSUVTKQotaWYgKE5PVCAkRU5We0JMQV9WRU5ET1J9IFNUUkVRVUFMICIiKQoraWYoTk9UICRFTlZ7QkxBX1ZFTkRPUn0gU1RSRVFVQUwgIiIpCiAgIHNldChCTEFfVkVORE9SICRFTlZ7QkxBX1ZFTkRPUn0pCi1lbHNlICgpCitlbHNlKCkKICAgaWYoTk9UIEJMQV9WRU5ET1IpCiAgICAgc2V0KEJMQV9WRU5ET1IgIkFsbCIpCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorIyBJbXBsaWNpdGx5IGxpbmtlZCBCTEFTIGxpYnJhcmllcz8KK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICAjIEltcGxpY2l0bHkgbGlua2VkIEJMQVMgbGlicmFyaWVzCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAiIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCi0jQkxBUyBpbiBpbnRlbCBta2wgMTArIGxpYnJhcnk/IChlbTY0dCA2NGJpdCkKLWlmIChCTEFfVkVORE9SIE1BVENIRVMgIkludGVsIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotICBpZiAoTk9UIEJMQVNfTElCUkFSSUVTKQotCi0gICAgIyBTeXN0ZW0tc3BlY2lmaWMgc2V0dGluZ3MKLSAgICBpZiAoV0lOMzIpCi0gICAgICBpZiAoQkxBX1NUQVRJQykKLSAgICAgICAgc2V0KEJMQVNfbWtsX0RMTF9TVUZGSVggIiIpCisjIEJMQVMgaW4gdGhlIEludGVsIE1LTCAxMCsgbGlicmFyeT8KK2lmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiSW50ZWwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKKyAgICBpZihDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEKQorICAgICAgIyBTeXN0ZW0tc3BlY2lmaWMgc2V0dGluZ3MKKyAgICAgIGlmKFdJTjMyKQorICAgICAgICBpZihCTEFfU1RBVElDKQorICAgICAgICAgIHNldChCTEFTX21rbF9ETExfU1VGRklYICIiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoQkxBU19ta2xfRExMX1NVRkZJWCAiX2RsbCIpCisgICAgICAgIGVuZGlmKCkKICAgICAgIGVsc2UoKQotICAgICAgICBzZXQoQkxBU19ta2xfRExMX1NVRkZJWCAiX2RsbCIpCisgICAgICAgIGlmKEJMQV9TVEFUSUMpCisgICAgICAgICAgc2V0KEJMQVNfbWtsX1NUQVJUX0dST1VQICItV2wsLS1zdGFydC1ncm91cCIpCisgICAgICAgICAgc2V0KEJMQVNfbWtsX0VORF9HUk9VUCAiLVdsLC0tZW5kLWdyb3VwIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KEJMQVNfbWtsX1NUQVJUX0dST1VQICIiKQorICAgICAgICAgIHNldChCTEFTX21rbF9FTkRfR1JPVVAgIiIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgIyBTd2l0Y2ggdG8gR05VIEZvcnRyYW4gc3VwcG9ydCBsYXllciBpZiBuZWVkZWQgKGJ1dCBub3Qgb24gQXBwbGUsIHdoZXJlIE1LTCBkb2VzIG5vdCBwcm92aWRlIGl0KQorICAgICAgICBpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCBBTkQgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIiBBTkQgTk9UIEFQUExFKQorICAgICAgICAgICAgc2V0KEJMQVNfbWtsX0lOVEZBQ0UgImdmIikKKyAgICAgICAgICAgIHNldChCTEFTX21rbF9USFJFQURJTkcgImdudSIpCisgICAgICAgICAgICBzZXQoQkxBU19ta2xfT01QICJnb21wIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgICBzZXQoQkxBU19ta2xfSU5URkFDRSAiaW50ZWwiKQorICAgICAgICAgICAgc2V0KEJMQVNfbWtsX1RIUkVBRElORyAiaW50ZWwiKQorICAgICAgICAgICAgc2V0KEJMQVNfbWtsX09NUCAiaW9tcDUiKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHNldChCTEFTX21rbF9MTSAiLWxtIikKKyAgICAgICAgc2V0KEJMQVNfbWtsX0xETCAiLWxkbCIpCiAgICAgICBlbmRpZigpCi0gICAgZWxzZSgpCi0gICAgICAjIFN3aXRjaCB0byBHTlUgRm9ydHJhbiBzdXBwb3J0IGxheWVyIGlmIG5lZWRlZCAoYnV0IG5vdCBvbiBBcHBsZSwgd2hlcmUgTUtMIGRvZXMgbm90IHByb3ZpZGUgaXQpCi0gICAgICBpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCBBTkQgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIiBBTkQgTk9UIEFQUExFKQotICAgICAgICAgIHNldChCTEFTX21rbF9JTlRGQUNFICJnZiIpCi0gICAgICAgICAgc2V0KEJMQVNfbWtsX1RIUkVBRElORyAiZ251IikKLSAgICAgICAgICBzZXQoQkxBU19ta2xfT01QICJnb21wIikKLSAgICAgIGVsc2UoKQotICAgICAgICAgIHNldChCTEFTX21rbF9JTlRGQUNFICJpbnRlbCIpCi0gICAgICAgICAgc2V0KEJMQVNfbWtsX1RIUkVBRElORyAiaW50ZWwiKQotICAgICAgICAgIHNldChCTEFTX21rbF9PTVAgImlvbXA1IikKLSAgICAgIGVuZGlmKCkKLSAgICAgIHNldChCTEFTX21rbF9MTSAiLWxtIikKLSAgICAgIHNldChCTEFTX21rbF9MREwgIi1sZGwiKQotICAgIGVuZGlmKCkKIAotICAgIGlmIChCTEFfVkVORE9SIE1BVENIRVMgIl82NGlscCIpCi0gICAgICBzZXQoQkxBU19ta2xfSUxQX01PREUgImlscDY0IikKLSAgICBlbHNlICgpCi0gICAgICBzZXQoQkxBU19ta2xfSUxQX01PREUgImxwNjQiKQotICAgIGVuZGlmICgpCi0KLSAgICBpZiAoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCkKICAgICAgIGlmKEJMQVNfRklORF9RVUlFVExZIE9SIE5PVCBCTEFTX0ZJTkRfUkVRVUlSRUQpCiAgICAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzKQogICAgICAgZWxzZSgpCiAgICAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQogICAgICAgZW5kaWYoKQogCisgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl82NGlscCIpCisgICAgICAgIHNldChCTEFTX21rbF9JTFBfTU9ERSAiaWxwNjQiKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldChCTEFTX21rbF9JTFBfTU9ERSAibHA2NCIpCisgICAgICBlbmRpZigpCisKICAgICAgIHNldChCTEFTX1NFQVJDSF9MSUJTICIiKQogCiAgICAgICBpZihCTEFfRjk1KQotICAgICAgICBzZXQoQkxBU19ta2xfU0VBUkNIX1NZTUJPTCBzZ2VtbV9mOTUpCisgICAgICAgIHNldChCTEFTX21rbF9TRUFSQ0hfU1lNQk9MICJzZ2VtbV9mOTUiKQogICAgICAgICBzZXQoX0xJQlJBUklFUyBCTEFTOTVfTElCUkFSSUVTKQotICAgICAgICBpZiAoV0lOMzIpCisgICAgICAgIGlmKFdJTjMyKQogICAgICAgICAgICMgRmluZCB0aGUgbWFpbiBmaWxlICgzMi1iaXQgb3IgNjQtYml0KQogICAgICAgICAgIHNldChCTEFTX1NFQVJDSF9MSUJTX1dJTl9NQUlOICIiKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9NQUlOCiAgICAgICAgICAgICAgICJta2xfYmxhczk1JHtCTEFTX21rbF9ETExfU1VGRklYfSBta2xfaW50ZWxfYyR7QkxBU19ta2xfRExMX1NVRkZJWH0iKQogICAgICAgICAgIGVuZGlmKCkKLSAgICAgICAgICBpZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHAiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU4KICAgICAgICAgICAgICAgIm1rbF9ibGFzOTVfJHtCTEFTX21rbF9JTFBfTU9ERX0ke0JMQVNfbWtsX0RMTF9TVUZGSVh9IG1rbF9pbnRlbF8ke0JMQVNfbWtsX0lMUF9NT0RFfSR7QkxBU19ta2xfRExMX1NVRkZJWH0iKQotICAgICAgICAgIGVuZGlmICgpCisgICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICAgIyBBZGQgdGhyZWFkaW5nL3NlcXVlbnRpYWwgbGlicwogICAgICAgICAgIHNldChCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQgIiIpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKLSAgICAgICAgICAgICAgIm1rbF9zZXF1ZW50aWFsJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCi0gICAgICAgICAgZW5kaWYoKQotICAgICAgICAgIGlmIChOT1QgQkxBX1ZFTkRPUiBNQVRDSEVTICJfc2VxJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9uCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKICAgICAgICAgICAgICAgImxpYmd1aWRlNDAgbWtsX2ludGVsX3RocmVhZCR7QkxBU19ta2xfRExMX1NVRkZJWH0iKQpAQCAtMjk5LDU2ICszMTksNjAgQEAKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAogICAgICAgICAgICAgICAibGliaW9tcDVtZCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKKyAgICAgICAgICAgICAgIm1rbF9zZXF1ZW50aWFsJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCisgICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICAgIyBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0aGUgYWJvdmUKLSAgICAgICAgICBmb3JlYWNoIChNQUlOICR7QkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTn0pCi0gICAgICAgICAgICBmb3JlYWNoIChUSFJFQUQgJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUR9KQorICAgICAgICAgIGZvcmVhY2goTUFJTiAke0JMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU59KQorICAgICAgICAgICAgZm9yZWFjaChUSFJFQUQgJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUR9KQogICAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICAgIiR7TUFJTn0gJHtUSFJFQUR9IG1rbF9jb3JlJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgICBlbmRmb3JlYWNoKCkKICAgICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgZWxzZSAoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgIyBvbGQgdmVyc2lvbgogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwogICAgICAgICAgICAgICAibWtsX2JsYXM5NSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSBndWlkZSIpCiAKICAgICAgICAgICAgICMgbWtsID49IDEwLjMKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKLSAgICAgICAgICAgICAgIm1rbF9ibGFzOTUgbWtsXyR7QkxBU19ta2xfSU5URkFDRX0gbWtsXyR7QkxBU19ta2xfVEhSRUFESU5HfV90aHJlYWQgbWtsX2NvcmUgJHtCTEFTX21rbF9PTVB9IikKLSAgICAgICAgICBlbmRpZiAoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgICAgICIke0JMQVNfbWtsX1NUQVJUX0dST1VQfSBta2xfYmxhczk1IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfRU5EX0dST1VQfSAke0JMQVNfbWtsX09NUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9uCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICJta2xfYmxhczk1IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlIGd1aWRlIikKIAogICAgICAgICAgICAgIyBta2wgPj0gMTAuMwogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwotICAgICAgICAgICAgICAibWtsX2JsYXM5NV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSAke0JMQVNfbWtsX09NUH0iKQotICAgICAgICAgIGVuZGlmICgpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgICAgICIke0JMQVNfbWtsX1NUQVJUX0dST1VQfSBta2xfYmxhczk1XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfRU5EX0dST1VQfSAke0JMQVNfbWtsX09NUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scF9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwotICAgICAgICAgICAgICAibWtsX2JsYXM5NV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfc2VxdWVudGlhbCBta2xfY29yZSIpCi0gICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgIGVsc2UgKCkKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF9ibGFzOTVfJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsXyR7QkxBU19ta2xfSU5URkFDRX1fJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsX3NlcXVlbnRpYWwgbWtsX2NvcmUgJHtCTEFTX21rbF9FTkRfR1JPVVB9IikKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVsc2UoKQogICAgICAgICBzZXQoQkxBU19ta2xfU0VBUkNIX1NZTUJPTCBzZ2VtbSkKICAgICAgICAgc2V0KF9MSUJSQVJJRVMgQkxBU19MSUJSQVJJRVMpCi0gICAgICAgIGlmIChXSU4zMikKKyAgICAgICAgaWYoV0lOMzIpCiAgICAgICAgICAgIyBGaW5kIHRoZSBtYWluIGZpbGUgKDMyLWJpdCBvciA2NC1iaXQpCiAgICAgICAgICAgc2V0KEJMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU4gIiIpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSW50ZWwxMF8zMiIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU4KICAgICAgICAgICAgICAgIm1rbF9pbnRlbF9jJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU4KICAgICAgICAgICAgICAgIm1rbF9pbnRlbF8ke0JMQVNfbWtsX0lMUF9NT0RFfSR7QkxBU19ta2xfRExMX1NVRkZJWH0iKQotICAgICAgICAgIGVuZGlmICgpCisgICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICAgIyBBZGQgdGhyZWFkaW5nL3NlcXVlbnRpYWwgbGlicwogICAgICAgICAgIHNldChCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQgIiIpCi0gICAgICAgICAgaWYgKE5PVCBCTEFfVkVORE9SIE1BVENIRVMgIl9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgICMgb2xkIHZlcnNpb24KICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAogICAgICAgICAgICAgICAibGliZ3VpZGU0MCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCkBAIC0zNTYsOTYgKzM4MCwxMTggQEAKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAogICAgICAgICAgICAgICAibGliaW9tcDVtZCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIE1BVENIRVMgIl9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKICAgICAgICAgICAgICAgIm1rbF9zZXF1ZW50aWFsJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICAgIyBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0aGUgYWJvdmUKLSAgICAgICAgICBmb3JlYWNoIChNQUlOICR7QkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTn0pCi0gICAgICAgICAgICBmb3JlYWNoIChUSFJFQUQgJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUR9KQorICAgICAgICAgIGZvcmVhY2goTUFJTiAke0JMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU59KQorICAgICAgICAgICAgZm9yZWFjaChUSFJFQUQgJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUR9KQogICAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICAgIiR7TUFJTn0gJHtUSFJFQUR9IG1rbF9jb3JlJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgICBlbmRmb3JlYWNoKCkKICAgICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgZWxzZSAoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgIyBvbGQgdmVyc2lvbgogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwogICAgICAgICAgICAgICAibWtsXyR7QkxBU19ta2xfSU5URkFDRX0gbWtsXyR7QkxBU19ta2xfVEhSRUFESU5HfV90aHJlYWQgbWtsX2NvcmUgZ3VpZGUiKQogCiAgICAgICAgICAgICAjIG1rbCA+PSAxMC4zCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCi0gICAgICAgICAgICAgICJta2xfJHtCTEFTX21rbF9JTlRGQUNFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSAke0JMQVNfbWtsX09NUH0iKQotICAgICAgICAgIGVuZGlmICgpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfRU5EX0dST1VQfSAke0JMQVNfbWtsX09NUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9uCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICJta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSBndWlkZSIpCiAKICAgICAgICAgICAgICMgbWtsID49IDEwLjMKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKLSAgICAgICAgICAgICAgIm1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfT01QfSIpCi0gICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgICBpZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHBfc2VxJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfRU5EX0dST1VQfSAke0JMQVNfbWtsX09NUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scF9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwotICAgICAgICAgICAgICAibWtsXyR7QkxBU19ta2xfSU5URkFDRX1fJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsX3NlcXVlbnRpYWwgbWtsX2NvcmUiKQotICAgICAgICAgIGVuZGlmICgpCisgICAgICAgICAgICAgICIke0JMQVNfbWtsX1NUQVJUX0dST1VQfSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfc2VxdWVudGlhbCBta2xfY29yZSAke0JMQVNfbWtsX0VORF9HUk9VUH0iKQorICAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICAgICNvbGRlciB2ZXNpb25zIG9mIGludGVsIG1rbCBsaWJzCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwogICAgICAgICAgICAgICAibWtsIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKICAgICAgICAgICAgICAgIm1rbF9pYTMyIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKICAgICAgICAgICAgICAgIm1rbF9lbTY0dCIpCi0gICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgIGVuZGlmICgpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCiAKLSAgICAgIGlmIChERUZJTkVEIEVOVntNS0xST09UfSkKLSAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiKQotICAgICAgICAgIHNldChfQkxBU19NS0xST09UX0xJQl9ESVIgIiRFTlZ7TUtMUk9PVH0vbGliL2lhMzIiKQotICAgICAgICBlbHNlaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHBfc2VxJCIpCi0gICAgICAgICAgc2V0KF9CTEFTX01LTFJPT1RfTElCX0RJUiAiJEVOVntNS0xST09UfS9saWIvaW50ZWw2NCIpCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbmRpZiAoKQotICAgICAgaWYgKF9CTEFTX01LTFJPT1RfTElCX0RJUikKLSAgICAgICAgaWYgKFdJTjMyKQotICAgICAgICAgIHN0cmluZyhBUFBFTkQgX0JMQVNfTUtMUk9PVF9MSUJfRElSICJfd2luIikKLSAgICAgICAgZWxzZWlmIChBUFBMRSkKLSAgICAgICAgICBzdHJpbmcoQVBQRU5EIF9CTEFTX01LTFJPT1RfTElCX0RJUiAiX21hYyIpCi0gICAgICAgIGVsc2UgKCkKLSAgICAgICAgICBzdHJpbmcoQVBQRU5EIF9CTEFTX01LTFJPT1RfTElCX0RJUiAiX2xpbiIpCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbmRpZiAoKQorICAgICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NF9keW4kIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAjIG1rbCA+PSAxMC4zIHdpdGggc2luZ2xlIGR5bmFtaWMgbGlicmFyeQorICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCisgICAgICAgICAgIm1rbF9ydCIpCisgICAgICBlbmRpZigpCiAKLSAgICAgIGZvcmVhY2ggKElUICR7QkxBU19TRUFSQ0hfTElCU30pCisgICAgICAjIE1LTCB1c2VzIGEgbXVsdGl0dWRlIG9mIHBhcnRpYWxseSBwbGF0Zm9ybS1zcGVjaWZpYyBzdWJkaXJlY3RvcmllczoKKyAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiKQorICAgICAgICBzZXQoQkxBU19ta2xfQVJDSF9OQU1FICJpYTMyIikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoQkxBU19ta2xfQVJDSF9OQU1FICJpbnRlbDY0IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKFdJTjMyKQorICAgICAgICBzZXQoQkxBU19ta2xfT1NfTkFNRSAid2luIikKKyAgICAgIGVsc2VpZihBUFBMRSkKKyAgICAgICAgc2V0KEJMQVNfbWtsX09TX05BTUUgIm1hYyIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KEJMQVNfbWtsX09TX05BTUUgImxpbiIpCisgICAgICBlbmRpZigpCisgICAgICBpZihERUZJTkVEIEVOVntNS0xST09UfSkKKyAgICAgICAgc2V0KEJMQVNfbWtsX01LTFJPT1QgIiRFTlZ7TUtMUk9PVH0iKQorICAgICAgICAjIElmIE1LTFJPT1QgcG9pbnRzIHRvIHRoZSBzdWJkaXJlY3RvcnkgJ21rbCcsIHVzZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBpbnN0ZWFkCisgICAgICAgICMgc28gd2UgY2FuIGJldHRlciBkZXRlY3Qgb3RoZXIgcmVsZXZhbnQgbGlicmFyaWVzIGluICdjb21waWxlcicgb3IgJ3RiYic6CisgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQkxBU19ta2xfTUtMUk9PVF9MQVNUX0RJUiAiJHtCTEFTX21rbF9NS0xST09UfSIgTkFNRSkKKyAgICAgICAgaWYoQkxBU19ta2xfTUtMUk9PVF9MQVNUX0RJUiBTVFJFUVVBTCAibWtsIikKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQkxBU19ta2xfTUtMUk9PVCAiJHtCTEFTX21rbF9NS0xST09UfSIgRElSRUNUT1JZKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgICBzZXQoQkxBU19ta2xfTElCX1BBVEhfU1VGRklYRVMKKyAgICAgICAgICAiY29tcGlsZXIvbGliIiAiY29tcGlsZXIvbGliLyR7QkxBU19ta2xfQVJDSF9OQU1FfV8ke0JMQVNfbWtsX09TX05BTUV9IgorICAgICAgICAgICJta2wvbGliIiAibWtsL2xpYi8ke0JMQVNfbWtsX0FSQ0hfTkFNRX1fJHtCTEFTX21rbF9PU19OQU1FfSIKKyAgICAgICAgICAibGliLyR7QkxBU19ta2xfQVJDSF9OQU1FfV8ke0JMQVNfbWtsX09TX05BTUV9IikKKworICAgICAgZm9yZWFjaChJVCAke0JMQVNfU0VBUkNIX0xJQlN9KQogICAgICAgICBzdHJpbmcoUkVQTEFDRSAiICIgIjsiIFNFQVJDSF9MSUJTICR7SVR9KQotICAgICAgICBpZiAoTk9UICR7X0xJQlJBUklFU30pCi0gICAgICAgICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgICAgIGlmKE5PVCAke19MSUJSQVJJRVN9KQorICAgICAgICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgICAgICAgJHtfTElCUkFSSUVTfQogICAgICAgICAgICAgQkxBUwogICAgICAgICAgICAgJHtCTEFTX21rbF9TRUFSQ0hfU1lNQk9MfQogICAgICAgICAgICAgIiIKICAgICAgICAgICAgICIke1NFQVJDSF9MSUJTfSIKICAgICAgICAgICAgICIke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9OyR7QkxBU19ta2xfTE19OyR7QkxBU19ta2xfTERMfSIKLSAgICAgICAgICAgICIke19CTEFTX01LTFJPT1RfTElCX0RJUn0iCisgICAgICAgICAgICAiJHtCTEFTX21rbF9NS0xST09UfSIKKyAgICAgICAgICAgICIke0JMQVNfbWtsX0xJQl9QQVRIX1NVRkZJWEVTfSIKICAgICAgICAgICAgICkKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgIGVuZGZvcmVhY2ggKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kZm9yZWFjaCgpCiAKLSAgICBlbmRpZiAoKQotICAgIHVuc2V0KEJMQVNfbWtsX0lMUF9NT0RFKQotICAgIHVuc2V0KEJMQVNfbWtsX0lOVEZBQ0UpCi0gICAgdW5zZXQoQkxBU19ta2xfVEhSRUFESU5HKQotICAgIHVuc2V0KEJMQVNfbWtsX09NUCkKLSAgICB1bnNldChCTEFTX21rbF9ETExfU1VGRklYKQotICAgIHVuc2V0KEJMQVNfbWtsX0xNKQotICAgIHVuc2V0KEJMQVNfbWtsX0xETCkKLSAgZW5kaWYgKCkKLWVuZGlmICgpCisgICAgICB1bnNldChCTEFTX21rbF9JTFBfTU9ERSkKKyAgICAgIHVuc2V0KEJMQVNfbWtsX0lOVEZBQ0UpCisgICAgICB1bnNldChCTEFTX21rbF9USFJFQURJTkcpCisgICAgICB1bnNldChCTEFTX21rbF9PTVApCisgICAgICB1bnNldChCTEFTX21rbF9ETExfU1VGRklYKQorICAgICAgdW5zZXQoQkxBU19ta2xfTE0pCisgICAgICB1bnNldChCTEFTX21rbF9MREwpCisgICAgICB1bnNldChCTEFTX21rbF9NS0xST09UKQorICAgICAgdW5zZXQoQkxBU19ta2xfTUtMUk9PVF9MQVNUX0RJUikKKyAgICAgIHVuc2V0KEJMQVNfbWtsX0FSQ0hfTkFNRSkKKyAgICAgIHVuc2V0KEJMQVNfbWtsX09TX05BTUUpCisgICAgICB1bnNldChCTEFTX21rbF9MSUJfUEFUSF9TVUZGSVhFUykKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGlmKCkKIAogaWYoQkxBX0Y5NSkKICAgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEJMQVMgUkVRVUlSRURfVkFSUyBCTEFTOTVfTElCUkFSSUVTKQpAQCAtNDU1LDMwICs1MDEsMzQgQEAKICAgZW5kaWYoKQogZW5kaWYoKQogCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR290byIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyMgZ290b2JsYXM/IChodHRwOi8vd3d3LnRhY2MudXRleGFzLmVkdS90YWNjLXByb2plY3RzL2dvdG9ibGFzMikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkdvdG8iIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICAjIGdvdG9ibGFzIChodHRwOi8vd3d3LnRhY2MudXRleGFzLmVkdS90YWNjLXByb2plY3RzL2dvdG9ibGFzMikKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJnb3RvMiIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk9wZW5CTEFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorIyBPcGVuQkxBUz8gKGh0dHA6Ly93d3cub3BlbmJsYXMubmV0KQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiT3BlbkJMQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICAjIE9wZW5CTEFTIChodHRwOi8vd3d3Lm9wZW5ibGFzLm5ldCkKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJvcGVuYmxhcyIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMgQU5EIChDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEKSkKQEAgLTQ4NywyNDYgKzUzNywyNjUgQEAKICAgICBlbHNlKCkKICAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQogICAgIGVuZGlmKCkKLSAgICAjIE9wZW5CTEFTIChodHRwOi8vd3d3Lm9wZW5ibGFzLm5ldCkKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJvcGVuYmxhcyIKICAgICAgICIke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9IgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJGTEFNRSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyMgRkxBTUUncyBibGlzIGxpYnJhcnk/IChodHRwczovL2dpdGh1Yi5jb20vZmxhbWUvYmxpcykKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkZMQU1FIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgIyBGTEFNRSdzIGJsaXMgbGlicmFyeSAoaHR0cHM6Ly9naXRodWIuY29tL2ZsYW1lL2JsaXMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAiYmxpcyIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFUTEFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorIyBCTEFTIGluIHRoZSBBVExBUyBsaWJyYXJ5PyAoaHR0cDovL21hdGgtYXRsYXMuc291cmNlZm9yZ2UubmV0LykKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFUTEFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgIyBCTEFTIGluIEFUTEFTIGxpYnJhcnk/IChodHRwOi8vbWF0aC1hdGxhcy5zb3VyY2Vmb3JnZS5uZXQvKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIGRnZW1tCiAgICAgICAiIgotICAgICAgImY3N2JsYXM7YXRsYXMiCisgICAgICAiYmxhcztmNzdibGFzO2F0bGFzIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCiAjIEJMQVMgaW4gUGhpUEFDSyBsaWJyYXJpZXM/IChyZXF1aXJlcyBnZW5lcmljIEJMQVMgbGliLCB0b28pCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiUGhpUEFDSyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIlBoaVBBQ0siIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJzZ2VtbTtkZ2VtbTtibGFzIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCiAjIEJMQVMgaW4gQWxwaGEgQ1hNTCBsaWJyYXJ5PwotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkNYTUwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCitpZihCTEFfVkVORE9SIFNUUkVRVUFMICJDWE1MIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAiY3htbCIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAogIyBCTEFTIGluIEFscGhhIERYTUwgbGlicmFyeT8gKG5vdyBjYWxsZWQgQ1hNTCwgc2VlIGFib3ZlKQotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkRYTUwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCitpZihCTEFfVkVORE9SIFNUUkVRVUFMICJEWE1MIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAiZHhtbCIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAogIyBCTEFTIGluIFN1biBQZXJmb3JtYW5jZSBsaWJyYXJ5PwotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIlN1blBlcmYiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCitpZihCTEFfVkVORE9SIFNUUkVRVUFMICJTdW5QZXJmIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIteGxpY19saWI9c3VucGVyZiIKICAgICAgICJzdW5wZXJmO3N1bm1hdGgiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgICAgaWYoQkxBU19MSUJSQVJJRVMpCiAgICAgICBzZXQoQkxBU19MSU5LRVJfRkxBR1MgIi14bGljX2xpYj1zdW5wZXJmIikKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKICMgQkxBUyBpbiBTQ1NMIGxpYnJhcnk/ICAoU0dJL0NyYXkgU2NpZW50aWZpYyBMaWJyYXJ5KQotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIlNDU0wiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCitpZihCTEFfVkVORE9SIFNUUkVRVUFMICJTQ1NMIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAic2NzbCIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAogIyBCTEFTIGluIFNHSU1BVEggbGlicmFyeT8KLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJTR0lNQVRIIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiU0dJTUFUSCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCiAgICAgICAiIgogICAgICAgImNvbXBsaWIuc2dpbWF0aCIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAogIyBCTEFTIGluIElCTSBFU1NMIGxpYnJhcnk/IChyZXF1aXJlcyBnZW5lcmljIEJMQVMgbGliLCB0b28pCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSUJNRVNTTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIklCTUVTU0wiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJlc3NsO2JsYXMiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKLSNCTEFTIGluIGFjbWwgbGlicmFyeT8KLWlmIChCTEFfVkVORE9SIE1BVENIRVMgIkFDTUwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gIGlmKCAoKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUwiKSBBTkQgKE5PVCBCTEFTX0FDTUxfTElCX0RJUlMpKSBPUgorIyBCTEFTIGluIGFjbWwgbGlicmFyeT8KK2lmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiQUNNTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgaWYoKChCTEFfVkVORE9SIFNUUkVRVUFMICJBQ01MIikgQU5EIChOT1QgQkxBU19BQ01MX0xJQl9ESVJTKSkgT1IKICAgICAoKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUxfTVAiKSBBTkQgKE5PVCBCTEFTX0FDTUxfTVBfTElCX0RJUlMpKSBPUgogICAgICgoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTF9HUFUiKSBBTkQgKE5PVCBCTEFTX0FDTUxfR1BVX0xJQl9ESVJTKSkKICAgICApCiAgICMgdHJ5IHRvIGZpbmQgYWNtbCBpbiAic3RhbmRhcmQiIHBhdGhzCi0gIGlmKCBXSU4zMiApCi0gICAgZmlsZSggR0xPQiBfQUNNTF9ST09UICJDOi9BTUQvYWNtbCovQUNNTC1FVUxBLnR4dCIgKQorICBpZihXSU4zMikKKyAgICBmaWxlKEdMT0IgX0FDTUxfUk9PVCAiQzovQU1EL2FjbWwqL0FDTUwtRVVMQS50eHQiKQogICBlbHNlKCkKLSAgICBmaWxlKCBHTE9CIF9BQ01MX1JPT1QgIi9vcHQvYWNtbCovQUNNTC1FVUxBLnR4dCIgKQorICAgIGZpbGUoR0xPQiBfQUNNTF9ST09UICIvb3B0L2FjbWwqL0FDTUwtRVVMQS50eHQiKQogICBlbmRpZigpCi0gIGlmKCBXSU4zMiApCi0gICAgZmlsZSggR0xPQiBfQUNNTF9HUFVfUk9PVCAiQzovQU1EL2FjbWwqL0dQR1BVZXhhbXBsZXMiICkKKyAgaWYoV0lOMzIpCisgICAgZmlsZShHTE9CIF9BQ01MX0dQVV9ST09UICJDOi9BTUQvYWNtbCovR1BHUFVleGFtcGxlcyIpCiAgIGVsc2UoKQotICAgIGZpbGUoIEdMT0IgX0FDTUxfR1BVX1JPT1QgIi9vcHQvYWNtbCovR1BHUFVleGFtcGxlcyIgKQorICAgIGZpbGUoR0xPQiBfQUNNTF9HUFVfUk9PVCAiL29wdC9hY21sKi9HUEdQVWV4YW1wbGVzIikKICAgZW5kaWYoKQogICBsaXN0KEdFVCBfQUNNTF9ST09UIDAgX0FDTUxfUk9PVCkKICAgbGlzdChHRVQgX0FDTUxfR1BVX1JPT1QgMCBfQUNNTF9HUFVfUk9PVCkKLSAgaWYoIF9BQ01MX1JPT1QgKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoIF9BQ01MX1JPT1QgJHtfQUNNTF9ST09UfSBQQVRIICkKLSAgICBpZiggU0laRU9GX0lOVEVHRVIgRVFVQUwgOCApCi0gICAgICBzZXQoIF9BQ01MX1BBVEhfU1VGRklYICJfaW50NjQiICkKKyAgaWYoX0FDTUxfUk9PVCkKKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9BQ01MX1JPT1QgJHtfQUNNTF9ST09UfSBQQVRIKQorICAgIGlmKFNJWkVPRl9JTlRFR0VSIEVRVUFMIDgpCisgICAgICBzZXQoX0FDTUxfUEFUSF9TVUZGSVggIl9pbnQ2NCIpCiAgICAgZWxzZSgpCi0gICAgICBzZXQoIF9BQ01MX1BBVEhfU1VGRklYICIiICkKKyAgICAgIHNldChfQUNNTF9QQVRIX1NVRkZJWCAiIikKICAgICBlbmRpZigpCi0gICAgaWYoIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIkludGVsIiApCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSMzIgImlmb3J0MzIiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAiaWZvcnQ2NCIgKQotICAgIGVsc2VpZiggQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiU3VuUHJvIiApCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSMzIgInN1bjMyIiApCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSNjQgInN1bjY0IiApCi0gICAgZWxzZWlmKCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJQR0kiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVIzMiAicGdpMzIiICkKLSAgICAgIGlmKCBXSU4zMiApCi0gICAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAid2luNjQiICkKKyAgICBpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJJbnRlbCIpCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVIzMiAiaWZvcnQzMiIpCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVI2NCAiaWZvcnQ2NCIpCisgICAgZWxzZWlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIlN1blBybyIpCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVIzMiAic3VuMzIiKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSNjQgInN1bjY0IikKKyAgICBlbHNlaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiUEdJIikKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjMyICJwZ2kzMiIpCisgICAgICBpZihXSU4zMikKKyAgICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSNjQgIndpbjY0IikKICAgICAgIGVsc2UoKQotICAgICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSNjQgInBnaTY0IiApCisgICAgICAgIHNldChfQUNNTF9DT01QSUxFUjY0ICJwZ2k2NCIpCiAgICAgICBlbmRpZigpCi0gICAgZWxzZWlmKCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJPcGVuNjQiICkKKyAgICBlbHNlaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiT3BlbjY0IikKICAgICAgICMgMzIgYml0IGJ1aWxkcyBub3Qgc3VwcG9ydGVkIG9uIE9wZW42NCBidXQgZm9yIGNvZGUgc2ltcGxpY2l0eQogICAgICAgIyBXZSdsbCBqdXN0IHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgdHdpY2UKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVIzMiAib3BlbjY0XzY0IiApCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSNjQgIm9wZW42NF82NCIgKQotICAgIGVsc2VpZiggQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTkFHIiApCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSMzIgIm5hZzMyIiApCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSNjQgIm5hZzY0IiApCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVIzMiAib3BlbjY0XzY0IikKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjY0ICJvcGVuNjRfNjQiKQorICAgIGVsc2VpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOQUciKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSMzIgIm5hZzMyIikKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjY0ICJuYWc2NCIpCiAgICAgZWxzZSgpCi0gICAgICBzZXQoIF9BQ01MX0NPTVBJTEVSMzIgImdmb3J0cmFuMzIiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAiZ2ZvcnRyYW42NCIgKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSMzIgImdmb3J0cmFuMzIiKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSNjQgImdmb3J0cmFuNjQiKQogICAgIGVuZGlmKCkKIAotICAgIGlmKCBCTEFfVkVORE9SIFNUUkVRVUFMICJBQ01MX01QIiApCisgICAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTF9NUCIpCiAgICAgICBzZXQoX0FDTUxfTVBfTElCX0RJUlMKICAgICAgICAgIiR7X0FDTUxfUk9PVH0vJHtfQUNNTF9DT01QSUxFUjMyfV9tcCR7X0FDTUxfUEFUSF9TVUZGSVh9L2xpYiIKLSAgICAgICAgIiR7X0FDTUxfUk9PVH0vJHtfQUNNTF9DT01QSUxFUjY0fV9tcCR7X0FDTUxfUEFUSF9TVUZGSVh9L2xpYiIgKQorICAgICAgICAiJHtfQUNNTF9ST09UfS8ke19BQ01MX0NPTVBJTEVSNjR9X21wJHtfQUNNTF9QQVRIX1NVRkZJWH0vbGliIikKICAgICBlbHNlKCkKICAgICAgIHNldChfQUNNTF9MSUJfRElSUwogICAgICAgICAiJHtfQUNNTF9ST09UfS8ke19BQ01MX0NPTVBJTEVSMzJ9JHtfQUNNTF9QQVRIX1NVRkZJWH0vbGliIgotICAgICAgICAiJHtfQUNNTF9ST09UfS8ke19BQ01MX0NPTVBJTEVSNjR9JHtfQUNNTF9QQVRIX1NVRkZJWH0vbGliIiApCisgICAgICAgICIke19BQ01MX1JPT1R9LyR7X0FDTUxfQ09NUElMRVI2NH0ke19BQ01MX1BBVEhfU1VGRklYfS9saWIiKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogZWxzZWlmKEJMQVNfJHtCTEFfVkVORE9SfV9MSUJfRElSUykKICAgc2V0KF8ke0JMQV9WRU5ET1J9X0xJQl9ESVJTICR7QkxBU18ke0JMQV9WRU5ET1J9X0xJQl9ESVJTfSkKIGVuZGlmKCkKIAotaWYoIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUxfTVAiICkKLSAgZm9yZWFjaCggQkxBU19BQ01MX01QX0xJQl9ESVJTICR7X0FDTUxfTVBfTElCX0RJUlN9KQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzICgKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUxfTVAiKQorICBmb3JlYWNoKEJMQVNfQUNNTF9NUF9MSUJfRElSUyAke19BQ01MX01QX0xJQl9ESVJTfSkKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQotICAgICAgIiIgImFjbWxfbXA7YWNtbF9tdiIgIiIgJHtCTEFTX0FDTUxfTVBfTElCX0RJUlN9CisgICAgICAiIiAiYWNtbF9tcDthY21sX212IiAiIiAke0JMQVNfQUNNTF9NUF9MSUJfRElSU30gIiIKICAgICAgICkKLSAgICBpZiggQkxBU19MSUJSQVJJRVMgKQorICAgIGlmKEJMQVNfTElCUkFSSUVTKQogICAgICAgYnJlYWsoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi1lbHNlaWYoIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUxfR1BVIiApCi0gIGZvcmVhY2goIEJMQVNfQUNNTF9HUFVfTElCX0RJUlMgJHtfQUNNTF9HUFVfTElCX0RJUlN9KQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzICgKK2Vsc2VpZihCTEFfVkVORE9SIFNUUkVRVUFMICJBQ01MX0dQVSIpCisgIGZvcmVhY2goQkxBU19BQ01MX0dQVV9MSUJfRElSUyAke19BQ01MX0dQVV9MSUJfRElSU30pCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KLSAgICAgICIiICJhY21sO2FjbWxfbXY7Q0FMQkxBUyIgIiIgJHtCTEFTX0FDTUxfR1BVX0xJQl9ESVJTfQorICAgICAgIiIgImFjbWw7YWNtbF9tdjtDQUxCTEFTIiAiIiAke0JMQVNfQUNNTF9HUFVfTElCX0RJUlN9ICIiCiAgICAgICApCi0gICAgaWYoIEJMQVNfTElCUkFSSUVTICkKKyAgICBpZihCTEFTX0xJQlJBUklFUykKICAgICAgIGJyZWFrKCkKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQogZWxzZSgpCi0gIGZvcmVhY2goIEJMQVNfQUNNTF9MSUJfRElSUyAke19BQ01MX0xJQl9ESVJTfSApCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMgKAorICBmb3JlYWNoKEJMQVNfQUNNTF9MSUJfRElSUyAke19BQ01MX0xJQl9ESVJTfSkKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQotICAgICAgIiIgImFjbWw7YWNtbF9tdiIgIiIgJHtCTEFTX0FDTUxfTElCX0RJUlN9CisgICAgICAiIiAiYWNtbDthY21sX212IiAiIiAke0JMQVNfQUNNTF9MSUJfRElSU30gIiIKICAgICAgICkKLSAgICBpZiggQkxBU19MSUJSQVJJRVMgKQorICAgIGlmKEJMQVNfTElCUkFSSUVTKQogICAgICAgYnJlYWsoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCkBAIC03MzQsNzcgKzgwMyw5MCBAQAogCiAjIEVpdGhlciBhY21sIG9yIGFjbWxfbXAgc2hvdWxkIGJlIGluIExEX0xJQlJBUllfUEFUSCBidXQgbm90IGJvdGgKIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgIEJMQVNfTElCUkFSSUVTCiAgICAgQkxBUwogICAgIHNnZW1tCiAgICAgIiIKICAgICAiYWNtbDthY21sX212IgogICAgICIiCisgICAgIiIKKyAgICAiIgogICAgICkKIGVuZGlmKCkKIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgIEJMQVNfTElCUkFSSUVTCiAgICAgQkxBUwogICAgIHNnZW1tCiAgICAgIiIKICAgICAiYWNtbF9tcDthY21sX212IgogICAgICIiCisgICAgIiIKKyAgICAiIgogICAgICkKIGVuZGlmKCkKIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgIEJMQVNfTElCUkFSSUVTCiAgICAgQkxBUwogICAgIHNnZW1tCiAgICAgIiIKICAgICAiYWNtbDthY21sX212O0NBTEJMQVMiCiAgICAgIiIKKyAgICAiIgorICAgICIiCiAgICAgKQogZW5kaWYoKQotZW5kaWYgKCkgIyBBQ01MCitlbmRpZigpICMgQUNNTAogCiAjIEFwcGxlIEJMQVMgbGlicmFyeT8KLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJBcHBsZSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFwcGxlIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgZGdlbW0KICAgICAgICIiCiAgICAgICAiQWNjZWxlcmF0ZSIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk5BUyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgaWYgKCBOT1QgQkxBU19MSUJSQVJJRVMgKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorIyBBcHBsZSBOQVMgKHZlY0xpYikgbGlicmFyeT8KK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk5BUyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIGRnZW1tCiAgICAgICAiIgogICAgICAgInZlY0xpYiIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKLSAgZW5kaWYgKCkKLWVuZGlmICgpCisgIGVuZGlmKCkKK2VuZGlmKCkKIAogIyBHZW5lcmljIEJMQVMgbGlicmFyeT8KLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJHZW5lcmljIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR2VuZXJpYyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCiAgICAgICAiIgogICAgICAgImJsYXMiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKIGlmKE5PVCBCTEFfRjk1KQogICBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoQkxBUyBSRVFVSVJFRF9WQVJTIEJMQVNfTElCUkFSSUVTKQpAQCAtODEyLDcgKzg5NCw3IEBACiAKICMgT24gY29tcGlsZXJzIHRoYXQgaW1wbGljaXRseSBsaW5rIEJMQVMgKHN1Y2ggYXMgZnRuLCBjYywgYW5kIENDIG9uIENyYXkgSFBDIG1hY2hpbmVzKQogIyB3ZSB1c2VkIGEgcGxhY2Vob2xkZXIgZm9yIGVtcHR5IEJMQVNfTElCUkFSSUVTIHRvIGdldCB0aHJvdWdoIG91ciBsb2dpYyBhYm92ZS4KLWlmIChCTEFTX0xJQlJBUklFUyBTVFJFUVVBTCAiQkxBU19MSUJSQVJJRVMtUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCitpZihCTEFTX0xJQlJBUklFUyBTVFJFUVVBTCAiQkxBU19MSUJSQVJJRVMtUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCiAgIHNldChCTEFTX0xJQlJBUklFUyAiIikKIGVuZGlmKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQm9vc3QuY21ha2UgYi9Nb2R1bGVzL0ZpbmRCb29zdC5jbWFrZQppbmRleCAwZTg0ZmFiLi4zOGQzYmZhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRCb29zdC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRCb29zdC5jbWFrZQpAQCAtMjQ4LDYgKzI0OCw3IEBACiAjIFNhdmUgcHJvamVjdCdzIHBvbGljaWVzCiBjbWFrZV9wb2xpY3koUFVTSCkKIGNtYWtlX3BvbGljeShTRVQgQ01QMDA1NyBORVcpICMgaWYgSU5fTElTVAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTAyIE5FVykgIyBpZiBtYXJrX2FzX2FkdmFuY2VkKG5vbl9jYWNoZV92YXIpCiAKIGZ1bmN0aW9uKF9ib29zdF9nZXRfZXhpc3RpbmdfdGFyZ2V0IGNvbXBvbmVudCB0YXJnZXRfdmFyKQogICBzZXQobmFtZXMgIiR7Y29tcG9uZW50fSIpCkBAIC00NDEsNyArNDQyLDkgQEAKICAgIyBOb3RlIHRoYXQgYXJncyBhcmUgcGFzc2VkIGluIHRoZSBCb29zdF9GSU5EX3h4eHh4IHZhcmlhYmxlcywgc28gdGhlcmUgaXMgbm8KICAgIyBuZWVkIHRvIGRlbGVnYXRlIHRoZW0gdG8gdGhpcyBmaW5kX3BhY2thZ2UgY2FsbC4KICAgZmluZF9wYWNrYWdlKEJvb3N0IFFVSUVUIE5PX01PRFVMRSkKLSAgbWFya19hc19hZHZhbmNlZChCb29zdF9ESVIpCisgIGlmIChERUZJTkVEIEJvb3N0X0RJUikKKyAgICBtYXJrX2FzX2FkdmFuY2VkKEJvb3N0X0RJUikKKyAgZW5kaWYgKCkKIAogICAjIElmIHdlIGZvdW5kIGEgYm9vc3QgY21ha2UgcGFja2FnZSwgdGhlbiB3ZSdyZSBkb25lLiBQcmludCBvdXQgd2hhdCB3ZSBmb3VuZC4KICAgIyBPdGhlcndpc2UgbGV0IHRoZSByZXN0IG9mIHRoZSBtb2R1bGUgdHJ5IHRvIGZpbmQgaXQuCkBAIC0xNDY3LDQzICsxNDcwLDYgQEAKIF9Cb29zdF9ERUJVR19QUklOVF9WQVIoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfTElORX0iICJCb29zdF9BRERJVElPTkFMX1ZFUlNJT05TIikKIF9Cb29zdF9ERUJVR19QUklOVF9WQVIoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfTElORX0iICJCb29zdF9OT19TWVNURU1fUEFUSFMiKQogCi0jIFN1cHBseSBCb29zdF9MSUJfRElBR05PU1RJQ19ERUZJTklUSU9OUyBhcyBhIGNvbnZlbmllbmNlIHRhcmdldC4gSXQKLSMgd2lsbCBvbmx5IGNvbnRhaW4gYW55IGludGVyZmFjZSBkZWZpbml0aW9ucyBvbiBXSU4zMiwgYnV0IGlzIGNyZWF0ZWQKLSMgb24gYWxsIHBsYXRmb3JtcyB0byBrZWVwIGVuZCB1c2VyIGNvZGUgZnJlZSBmcm9tIHBsYXRmb3JtIGRlcGVuZGVudAotIyBjb2RlLiAgQWxzbyBwcm92aWRlIGNvbnZlbmllbmNlIHRhcmdldHMgdG8gZGlzYWJsZSBhdXRvbGlua2luZyBhbmQKLSMgZW5hYmxlIGR5bmFtaWMgbGlua2luZy4KLWlmKE5PVCBUQVJHRVQgQm9vc3Q6OmRpYWdub3N0aWNfZGVmaW5pdGlvbnMpCi0gIGFkZF9saWJyYXJ5KEJvb3N0OjpkaWFnbm9zdGljX2RlZmluaXRpb25zIElOVEVSRkFDRSBJTVBPUlRFRCkKLSAgYWRkX2xpYnJhcnkoQm9vc3Q6OmRpc2FibGVfYXV0b2xpbmtpbmcgSU5URVJGQUNFIElNUE9SVEVEKQotICBhZGRfbGlicmFyeShCb29zdDo6ZHluYW1pY19saW5raW5nIElOVEVSRkFDRSBJTVBPUlRFRCkKLSAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEJvb3N0OjpkeW5hbWljX2xpbmtpbmcgUFJPUEVSVElFUwotICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICJCT09TVF9BTExfRFlOX0xJTksiKQotZW5kaWYoKQotaWYoV0lOMzIpCi0gICMgSW4gd2luZG93cywgYXV0b21hdGljIGxpbmtpbmcgaXMgcGVyZm9ybWVkLCBzbyB5b3UgZG8gbm90IGhhdmUKLSAgIyB0byBzcGVjaWZ5IHRoZSBsaWJyYXJpZXMuICBJZiB5b3UgYXJlIGxpbmtpbmcgdG8gYSBkeW5hbWljCi0gICMgcnVudGltZSwgdGhlbiB5b3UgY2FuIGNob29zZSB0byBsaW5rIHRvIGVpdGhlciBhIHN0YXRpYyBvciBhCi0gICMgZHluYW1pYyBCb29zdCBsaWJyYXJ5LCB0aGUgZGVmYXVsdCBpcyB0byBkbyBhIHN0YXRpYyBsaW5rLiAgWW91Ci0gICMgY2FuIGFsdGVyIHRoaXMgZm9yIGEgc3BlY2lmaWMgbGlicmFyeSAid2hhdGV2ZXIiIGJ5IGRlZmluaW5nCi0gICMgQk9PU1RfV0hBVEVWRVJfRFlOX0xJTksgdG8gZm9yY2UgQm9vc3QgbGlicmFyeSAid2hhdGV2ZXIiIHRvIGJlCi0gICMgbGlua2VkIGR5bmFtaWNhbGx5LiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGZvcmNlIGFsbCBCb29zdAotICAjIGxpYnJhcmllcyB0byBkeW5hbWljIGxpbmsgYnkgZGVmaW5pbmcgQk9PU1RfQUxMX0RZTl9MSU5LLgotCi0gICMgVGhpcyBmZWF0dXJlIGNhbiBiZSBkaXNhYmxlZCBmb3IgQm9vc3QgbGlicmFyeSAid2hhdGV2ZXIiIGJ5Ci0gICMgZGVmaW5pbmcgQk9PU1RfV0hBVEVWRVJfTk9fTElCLCBvciBmb3IgYWxsIG9mIEJvb3N0IGJ5IGRlZmluaW5nCi0gICMgQk9PU1RfQUxMX05PX0xJQi4KLQotICAjIElmIHlvdSB3YW50IHRvIG9ic2VydmUgd2hpY2ggbGlicmFyaWVzIGFyZSBiZWluZyBsaW5rZWQgYWdhaW5zdAotICAjIHRoZW4gZGVmaW5pbmcgQk9PU1RfTElCX0RJQUdOT1NUSUMgd2lsbCBjYXVzZSB0aGUgYXV0by1saW5raW5nCi0gICMgY29kZSB0byBlbWl0IGEgI3ByYWdtYSBtZXNzYWdlIGVhY2ggdGltZSBhIGxpYnJhcnkgaXMgc2VsZWN0ZWQKLSAgIyBmb3IgbGlua2luZy4KLSAgc2V0KEJvb3N0X0xJQl9ESUFHTk9TVElDX0RFRklOSVRJT05TICItREJPT1NUX0xJQl9ESUFHTk9TVElDIikKLSAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEJvb3N0OjpkaWFnbm9zdGljX2RlZmluaXRpb25zIFBST1BFUlRJRVMKLSAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUyAiQk9PU1RfTElCX0RJQUdOT1NUSUMiKQotICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQm9vc3Q6OmRpc2FibGVfYXV0b2xpbmtpbmcgUFJPUEVSVElFUwotICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICJCT09TVF9BTExfTk9fTElCIikKLWVuZGlmKCkKLQogY21ha2VfcG9saWN5KEdFVCBDTVAwMDc0IF9Cb29zdF9DTVAwMDc0KQogaWYoTk9UICJ4JHtfQm9vc3RfQ01QMDA3NH14IiBTVFJFUVVBTCAieE5FV3giKQogICBfQm9vc3RfQ0hFQ0tfU1BFTExJTkcoQm9vc3RfUk9PVCkKQEAgLTE2ODAsMTAgKzE2NDYsMTUgQEAKICMgIFByZWZpeCBpbml0aWFsaXphdGlvbgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc2V0KEJvb3N0X0xJQl9QUkVGSVggIiIpCi1pZiAoIChHSFNNVUxUSSBBTkQgQm9vc3RfVVNFX1NUQVRJQ19MSUJTKSBPUgotICAgIChXSU4zMiBBTkQgQm9vc3RfVVNFX1NUQVRJQ19MSUJTIEFORCBOT1QgQ1lHV0lOKSApCisjIEJvb3N0J3Mgc3RhdGljIGxpYnJhcmllcyB1c2UgYSAibGliIiBwcmVmaXggb24gRExMIHBsYXRmb3JtcworIyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gdGhlIERMTCBpbXBvcnQgbGlicmFyaWVzLgoraWYgKEJvb3N0X1VTRV9TVEFUSUNfTElCUyBBTkQgKAorICAgIChXSU4zMiBBTkQgTk9UIENZR1dJTikKKyAgICBPUiBHSFNNVUxUSQorICAgICkpCiAgIHNldChCb29zdF9MSUJfUFJFRklYICJsaWIiKQorZWxzZSgpCisgIHNldChCb29zdF9MSUJfUFJFRklYICIiKQogZW5kaWYoKQogCiBpZiAoIE5PVCBCb29zdF9OQU1FU1BBQ0UgKQpAQCAtMjI5Niw2ICsyMjY3LDQzIEBACiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKKworICAjIFN1cHBseSBCb29zdF9MSUJfRElBR05PU1RJQ19ERUZJTklUSU9OUyBhcyBhIGNvbnZlbmllbmNlIHRhcmdldC4gSXQKKyAgIyB3aWxsIG9ubHkgY29udGFpbiBhbnkgaW50ZXJmYWNlIGRlZmluaXRpb25zIG9uIFdJTjMyLCBidXQgaXMgY3JlYXRlZAorICAjIG9uIGFsbCBwbGF0Zm9ybXMgdG8ga2VlcCBlbmQgdXNlciBjb2RlIGZyZWUgZnJvbSBwbGF0Zm9ybSBkZXBlbmRlbnQKKyAgIyBjb2RlLiAgQWxzbyBwcm92aWRlIGNvbnZlbmllbmNlIHRhcmdldHMgdG8gZGlzYWJsZSBhdXRvbGlua2luZyBhbmQKKyAgIyBlbmFibGUgZHluYW1pYyBsaW5raW5nLgorICBpZihOT1QgVEFSR0VUIEJvb3N0OjpkaWFnbm9zdGljX2RlZmluaXRpb25zKQorICAgIGFkZF9saWJyYXJ5KEJvb3N0OjpkaWFnbm9zdGljX2RlZmluaXRpb25zIElOVEVSRkFDRSBJTVBPUlRFRCkKKyAgICBhZGRfbGlicmFyeShCb29zdDo6ZGlzYWJsZV9hdXRvbGlua2luZyBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgYWRkX2xpYnJhcnkoQm9vc3Q6OmR5bmFtaWNfbGlua2luZyBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEJvb3N0OjpkeW5hbWljX2xpbmtpbmcgUFJPUEVSVElFUworICAgICAgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgIkJPT1NUX0FMTF9EWU5fTElOSyIpCisgIGVuZGlmKCkKKyAgaWYoV0lOMzIpCisgICAgIyBJbiB3aW5kb3dzLCBhdXRvbWF0aWMgbGlua2luZyBpcyBwZXJmb3JtZWQsIHNvIHlvdSBkbyBub3QgaGF2ZQorICAgICMgdG8gc3BlY2lmeSB0aGUgbGlicmFyaWVzLiAgSWYgeW91IGFyZSBsaW5raW5nIHRvIGEgZHluYW1pYworICAgICMgcnVudGltZSwgdGhlbiB5b3UgY2FuIGNob29zZSB0byBsaW5rIHRvIGVpdGhlciBhIHN0YXRpYyBvciBhCisgICAgIyBkeW5hbWljIEJvb3N0IGxpYnJhcnksIHRoZSBkZWZhdWx0IGlzIHRvIGRvIGEgc3RhdGljIGxpbmsuICBZb3UKKyAgICAjIGNhbiBhbHRlciB0aGlzIGZvciBhIHNwZWNpZmljIGxpYnJhcnkgIndoYXRldmVyIiBieSBkZWZpbmluZworICAgICMgQk9PU1RfV0hBVEVWRVJfRFlOX0xJTksgdG8gZm9yY2UgQm9vc3QgbGlicmFyeSAid2hhdGV2ZXIiIHRvIGJlCisgICAgIyBsaW5rZWQgZHluYW1pY2FsbHkuICBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gZm9yY2UgYWxsIEJvb3N0CisgICAgIyBsaWJyYXJpZXMgdG8gZHluYW1pYyBsaW5rIGJ5IGRlZmluaW5nIEJPT1NUX0FMTF9EWU5fTElOSy4KKworICAgICMgVGhpcyBmZWF0dXJlIGNhbiBiZSBkaXNhYmxlZCBmb3IgQm9vc3QgbGlicmFyeSAid2hhdGV2ZXIiIGJ5CisgICAgIyBkZWZpbmluZyBCT09TVF9XSEFURVZFUl9OT19MSUIsIG9yIGZvciBhbGwgb2YgQm9vc3QgYnkgZGVmaW5pbmcKKyAgICAjIEJPT1NUX0FMTF9OT19MSUIuCisKKyAgICAjIElmIHlvdSB3YW50IHRvIG9ic2VydmUgd2hpY2ggbGlicmFyaWVzIGFyZSBiZWluZyBsaW5rZWQgYWdhaW5zdAorICAgICMgdGhlbiBkZWZpbmluZyBCT09TVF9MSUJfRElBR05PU1RJQyB3aWxsIGNhdXNlIHRoZSBhdXRvLWxpbmtpbmcKKyAgICAjIGNvZGUgdG8gZW1pdCBhICNwcmFnbWEgbWVzc2FnZSBlYWNoIHRpbWUgYSBsaWJyYXJ5IGlzIHNlbGVjdGVkCisgICAgIyBmb3IgbGlua2luZy4KKyAgICBzZXQoQm9vc3RfTElCX0RJQUdOT1NUSUNfREVGSU5JVElPTlMgIi1EQk9PU1RfTElCX0RJQUdOT1NUSUMiKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhCb29zdDo6ZGlhZ25vc3RpY19kZWZpbml0aW9ucyBQUk9QRVJUSUVTCisgICAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUyAiQk9PU1RfTElCX0RJQUdOT1NUSUMiKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhCb29zdDo6ZGlzYWJsZV9hdXRvbGlua2luZyBQUk9QRVJUSUVTCisgICAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUyAiQk9PU1RfQUxMX05PX0xJQiIpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZENVREEuY21ha2UgYi9Nb2R1bGVzL0ZpbmRDVURBLmNtYWtlCmluZGV4IGI2ODU5YWEuLmUxYWYyZDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZENVREEuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQ1VEQS5jbWFrZQpAQCAtNSwxNyArNSwyMiBAQAogLi4gZGVwcmVjYXRlZDo6IDMuMTAKIAogICBTdXBlcnNlZGVkIGJ5IGZpcnN0LWNsYXNzIHN1cHBvcnQgZm9yIHRoZSBDVURBIGxhbmd1YWdlIGluIENNYWtlLgorICBTdXBlcnNlZGVkIGJ5IHRoZSA6bW9kdWxlOmBGaW5kQ1VEQVRvb2xraXRgIGZvciBDVURBIHRvb2xraXQgbGlicmFyaWVzLgogCiBSZXBsYWNlbWVudAogXl5eXl5eXl5eXl4KIAotSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byB1c2UgdGhpcyBtb2R1bGUgb3IgY2FsbCBgYGZpbmRfcGFja2FnZShDVURBKWBgLgotSW5zdGVhZCwgbGlzdCBgYENVREFgYCBhbW9uZyB0aGUgbGFuZ3VhZ2VzIG5hbWVkIGluIHRoZSB0b3AtbGV2ZWwKLWNhbGwgdG8gdGhlIDpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kLCBvciBjYWxsIHRoZQorSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byB1c2UgdGhpcyBtb2R1bGUgb3IgY2FsbCBgYGZpbmRfcGFja2FnZShDVURBKWBgCitmb3IgY29tcGlsaW5nIENVREEgY29kZS4gSW5zdGVhZCwgbGlzdCBgYENVREFgYCBhbW9uZyB0aGUgbGFuZ3VhZ2VzIG5hbWVkCitpbiB0aGUgdG9wLWxldmVsIGNhbGwgdG8gdGhlIDpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kLCBvciBjYWxsIHRoZQogOmNvbW1hbmQ6YGVuYWJsZV9sYW5ndWFnZWAgY29tbWFuZCB3aXRoIGBgQ1VEQWBgLgogVGhlbiBvbmUgY2FuIGFkZCBDVURBIChgYC5jdWBgKSBzb3VyY2VzIHRvIHByb2dyYW1zIGRpcmVjdGx5CiBpbiBjYWxscyB0byA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgIGFuZCA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgLgogCitUbyBmaW5kIGFuZCB1c2UgdGhlIENVREEgdG9vbGtpdCBsaWJyYXJpZXMgdGhlIDptb2R1bGU6YEZpbmRDVURBVG9vbGtpdGAKK21vZHVsZSBoYXMgc3VwZXJzZWRlZCB0aGlzIG1vZHVsZS4gIEl0IHdvcmtzIHdoZXRoZXIgb3Igbm90IHRoZSBgYENVREFgYAorbGFuZ3VhZ2UgaXMgZW5hYmxlZC4KKwogRG9jdW1lbnRhdGlvbiBvZiBEZXByZWNhdGVkIFVzYWdlCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtNjc2LDcgKzY4MSw3IEBACiAjIFNlYXJjaCBmb3IgdGhlIGN1ZGEgZGlzdHJpYnV0aW9uLgogaWYoTk9UIENVREFfVE9PTEtJVF9ST09UX0RJUiBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKQogICAjIFNlYXJjaCBpbiB0aGUgQ1VEQV9CSU5fUEFUSCBmaXJzdC4KLSAgZmluZF9wYXRoKENVREFfVE9PTEtJVF9ST09UX0RJUgorICBmaW5kX3Byb2dyYW0oQ1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0MKICAgICBOQU1FUyBudmNjIG52Y2MuZXhlCiAgICAgUEFUSFMKICAgICAgIEVOViBDVURBX1RPT0xLSVRfUk9PVApAQCAtNjg4LDE5ICs2OTMsMjIgQEAKICAgICApCiAKICAgIyBOb3cgc2VhcmNoIGRlZmF1bHQgcGF0aHMKLSAgZmluZF9wYXRoKENVREFfVE9PTEtJVF9ST09UX0RJUgorICBmaW5kX3Byb2dyYW0oQ1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0MKICAgICBOQU1FUyBudmNjIG52Y2MuZXhlCiAgICAgUEFUSFMgL29wdC9jdWRhL2JpbgogICAgIFBBVEhfU1VGRklYRVMgY3VkYS9iaW4KICAgICBET0MgIlRvb2xraXQgbG9jYXRpb24uIgogICAgICkKIAotICBpZiAoQ1VEQV9UT09MS0lUX1JPT1RfRElSKQorICBpZiAoQ1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0MpCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDVURBX1RPT0xLSVRfUk9PVF9ESVJfTlZDQ19QQVIgIiR7Q1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0N9IiBESVJFQ1RPUlkpCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDVURBX1RPT0xLSVRfUk9PVF9ESVIgIiR7Q1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0NfUEFSfSIgRElSRUNUT1JZIENBQ0hFKQogICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbL1xcXFxdP2Jpbls2NF0qWy9cXFxcXT8kIiAiIiBDVURBX1RPT0xLSVRfUk9PVF9ESVIgJHtDVURBX1RPT0xLSVRfUk9PVF9ESVJ9KQogICAgICMgV2UgbmVlZCB0byBmb3JjZSB0aGlzIGJhY2sgaW50byB0aGUgY2FjaGUuCiAgICAgc2V0KENVREFfVE9PTEtJVF9ST09UX0RJUiAke0NVREFfVE9PTEtJVF9ST09UX0RJUn0gQ0FDSEUgUEFUSCAiVG9vbGtpdCBsb2NhdGlvbi4iIEZPUkNFKQogICAgIHNldChDVURBX1RPT0xLSVRfVEFSR0VUX0RJUiAke0NVREFfVE9PTEtJVF9ST09UX0RJUn0pCiAgIGVuZGlmKCkKKyAgdW5zZXQoQ1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0MgQ0FDSEUpCiAKICAgaWYgKE5PVCBFWElTVFMgJHtDVURBX1RPT0xLSVRfUk9PVF9ESVJ9KQogICAgIGlmKENVREFfRklORF9SRVFVSVJFRCkKQEAgLTkyMSw3ICs5MjksMTEgQEAKIGlmKENVREFfQlVJTERfRU1VTEFUSU9OIEFORCBDVURBX0NVREFSVEVNVV9MSUJSQVJZKQogICBsaXN0KEFQUEVORCBDVURBX0xJQlJBUklFUyAke0NVREFfQ1VEQVJURU1VX0xJQlJBUll9KQogZWxzZWlmKENVREFfVVNFX1NUQVRJQ19DVURBX1JVTlRJTUUgQU5EIENVREFfY3VkYXJ0X3N0YXRpY19MSUJSQVJZKQotICBsaXN0KEFQUEVORCBDVURBX0xJQlJBUklFUyAke0NVREFfY3VkYXJ0X3N0YXRpY19MSUJSQVJZfSAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9ICR7Q01BS0VfRExfTElCU30pCisgIGxpc3QoQVBQRU5EIENVREFfTElCUkFSSUVTICR7Q1VEQV9jdWRhcnRfc3RhdGljX0xJQlJBUll9KQorICBpZiAoVEFSR0VUIFRocmVhZHM6OlRocmVhZHMpCisgICAgbGlzdChBUFBFTkQgQ1VEQV9MSUJSQVJJRVMgVGhyZWFkczo6VGhyZWFkcykKKyAgZW5kaWYoKQorICBsaXN0KEFQUEVORCBDVURBX0xJQlJBUklFUyAke0NNQUtFX0RMX0xJQlN9KQogICBpZiAoQ1VEQV9ydF9MSUJSQVJZKQogICAgIGxpc3QoQVBQRU5EIENVREFfTElCUkFSSUVTICR7Q1VEQV9ydF9MSUJSQVJZfSkKICAgZW5kaWYoKQpAQCAtMjAwMyw3ICsyMDE1LDcgQEAKICAgICBzdHJpbmcoVE9VUFBFUiAke2N1ZGFfY2xlYW5fdGFyZ2V0X25hbWV9IGN1ZGFfY2xlYW5fdGFyZ2V0X25hbWUpCiAgIGVuZGlmKCkKICAgYWRkX2N1c3RvbV90YXJnZXQoJHtjdWRhX2NsZWFuX3RhcmdldF9uYW1lfQotICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmUgJHtDVURBX0FERElUSU9OQUxfQ0xFQU5fRklMRVN9KQorICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtZiAke0NVREFfQURESVRJT05BTF9DTEVBTl9GSUxFU30pCiAKICAgIyBDbGVhciBvdXQgdGhlIHZhcmlhYmxlLCBzbyB0aGUgbmV4dCB0aW1lIHdlIGNvbmZpZ3VyZSBpdCB3aWxsIGJlIGVtcHR5LgogICAjIFRoaXMgaXMgdXNlZnVsIHNvIHRoYXQgdGhlIGZpbGVzIHdvbid0IHBlcnNpc3QgaW4gdGhlIGxpc3QgYWZ0ZXIgdGFyZ2V0cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ1VEQS9ydW5fbnZjYy5jbWFrZSBiL01vZHVsZXMvRmluZENVREEvcnVuX252Y2MuY21ha2UKaW5kZXggYWYxNWQ1NS4uYmEzNTQzMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQ1VEQS9ydW5fbnZjYy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRDVURBL3J1bl9udmNjLmNtYWtlCkBAIC0xNzQsNyArMTc0LDcgQEAKICMgRGVsZXRlIHRoZSB0YXJnZXQgZmlsZQogY3VkYV9leGVjdXRlX3Byb2Nlc3MoCiAgICJSZW1vdmluZyAke2dlbmVyYXRlZF9maWxlfSIKLSAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgcmVtb3ZlICIke2dlbmVyYXRlZF9maWxlfSIKKyAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgcm0gLWYgIiR7Z2VuZXJhdGVkX2ZpbGV9IgogICApCiAKICMgRm9yIENVREEgMi4zIGFuZCBiZWxvdywgLUcgLU0gZG9lc24ndCB3b3JrLCBzbyByZW1vdmUgdGhlIC1HIGZsYWcKQEAgLTI0MSw3ICsyNDEsNyBAQAogIyBEZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlCiBjdWRhX2V4ZWN1dGVfcHJvY2VzcygKICAgIlJlbW92aW5nICR7Y21ha2VfZGVwZW5kZW5jeV9maWxlfS50bXAgYW5kICR7TlZDQ19nZW5lcmF0ZWRfZGVwZW5kZW5jeV9maWxlfSIKLSAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgcmVtb3ZlICIke2NtYWtlX2RlcGVuZGVuY3lfZmlsZX0udG1wIiAiJHtOVkNDX2dlbmVyYXRlZF9kZXBlbmRlbmN5X2ZpbGV9IgorICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBybSAtZiAiJHtjbWFrZV9kZXBlbmRlbmN5X2ZpbGV9LnRtcCIgIiR7TlZDQ19nZW5lcmF0ZWRfZGVwZW5kZW5jeV9maWxlfSIKICAgKQogCiBpZihDVURBX3Jlc3VsdCkKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAjIFNpbmNlIG52Y2MgY2FuIHNvbWV0aW1lcyBsZWF2ZSBoYWxmIGRvbmUgZmlsZXMgbWFrZSBzdXJlIHRoYXQgd2UgZGVsZXRlIHRoZSBvdXRwdXQgZmlsZS4KICAgY3VkYV9leGVjdXRlX3Byb2Nlc3MoCiAgICAgIlJlbW92aW5nICR7Z2VuZXJhdGVkX2ZpbGV9IgotICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJlbW92ZSAiJHtnZW5lcmF0ZWRfZmlsZX0iCisgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgcm0gLWYgIiR7Z2VuZXJhdGVkX2ZpbGV9IgogICAgICkKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXJyb3IgZ2VuZXJhdGluZyBmaWxlICR7Z2VuZXJhdGVkX2ZpbGV9IikKIGVsc2UoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ1VEQVRvb2xraXQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjE0ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9GaW5kQ1VEQVRvb2xraXQuY21ha2UKQEAgLTAsMCArMSw4NzAgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworI1s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsucnN0OgorRmluZENVREFUb29sa2l0CistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzY3JpcHQgbG9jYXRlcyB0aGUgTlZJRElBIENVREEgdG9vbGtpdCBhbmQgdGhlIGFzc29jaWF0ZWQgbGlicmFyaWVzLCBidXQKK2RvZXMgbm90IHJlcXVpcmUgdGhlIGBgQ1VEQWBgIGxhbmd1YWdlIGJlIGVuYWJsZWQgZm9yIGEgZ2l2ZW4gcHJvamVjdC4gVGhpcworbW9kdWxlIGRvZXMgbm90IHNlYXJjaCBmb3IgdGhlIE5WSURJQSBDVURBIFNhbXBsZXMuCisKK1NlYXJjaCBCZWhhdmlvcgorXl5eXl5eXl5eXl5eXl5eCisKK0ZpbmRpbmcgdGhlIENVREEgVG9vbGtpdCByZXF1aXJlcyBmaW5kaW5nIHRoZSBgYG52Y2NgYCBleGVjdXRhYmxlLCB3aGljaCBpcworc2VhcmNoZWQgZm9yIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisKKzEuIElmIHRoZSBgYENVREFgYCBsYW5ndWFnZSBoYXMgYmVlbiBlbmFibGVkIHdlIHdpbGwgdXNlIHRoZSBkaXJlY3RvcnkKKyAgIGNvbnRhaW5pbmcgdGhlIGNvbXBpbGVyIGFzIHRoZSBmaXJzdCBzZWFyY2ggbG9jYXRpb24gZm9yIGBgbnZjY2BgLgorCisyLiBJZiB0aGUgYGBDVURBVG9vbGtpdF9ST09UYGAgY21ha2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoZS5nLiwKKyAgIGBgLURDVURBVG9vbGtpdF9ST09UPS9zb21lL3BhdGhgYCkgKm9yKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBkZWZpbmVkLCBpdAorICAgd2lsbCBiZSBzZWFyY2hlZC4gIElmIGJvdGggYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgKiphbmQqKiBhCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFyZSBzcGVjaWZpZWQsIHRoZSAqY29uZmlndXJhdGlvbiogdmFyaWFibGUgdGFrZXMKKyAgIHByZWNlZGVuY2UuCisKKyAgIFRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGhlcmUgbXVzdCBiZSBzdWNoIHRoYXQgdGhlIGV4ZWN1dGFibGUgYGBudmNjYGAgY2FuIGJlCisgICBmb3VuZCB1bmRlcm5lYXRoIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IGBgQ1VEQVRvb2xraXRfUk9PVGBgLiAgSWYKKyAgIGBgQ1VEQVRvb2xraXRfUk9PVGBgIGlzIHNwZWNpZmllZCwgYnV0IG5vIGBgbnZjY2BgIGlzIGZvdW5kIHVuZGVybmVhdGgsIHRoaXMKKyAgIHBhY2thZ2UgaXMgbWFya2VkIGFzICoqbm90KiogZm91bmQuICBObyBzdWJzZXF1ZW50IHNlYXJjaCBhdHRlbXB0cyBhcmUKKyAgIHBlcmZvcm1lZC4KKworMy4gSWYgdGhlIENVREFfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIHNlYXJjaGVkLgorCis0LiBUaGUgdXNlcidzIHBhdGggaXMgc2VhcmNoZWQgZm9yIGBgbnZjY2BgIHVzaW5nIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gLiAgSWYKKyAgIHRoaXMgaXMgZm91bmQsIG5vIHN1YnNlcXVlbnQgc2VhcmNoIGF0dGVtcHRzIGFyZSBwZXJmb3JtZWQuICBVc2VycyBhcmUKKyAgIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBmaXJzdCBgYG52Y2NgYCB0byBzaG93IHVwIGluIHRoZSBwYXRoIGlzCisgICB0aGUgZGVzaXJlZCBwYXRoIGluIHRoZSBldmVudCB0aGF0IG11bHRpcGxlIENVREEgVG9vbGtpdHMgYXJlIGluc3RhbGxlZC4KKworNS4gT24gVW5peCBzeXN0ZW1zLCBpZiB0aGUgc3ltYm9saWMgbGluayBgYC91c3IvbG9jYWwvY3VkYWBgIGV4aXN0cywgdGhpcyBpcworICAgdXNlZC4gIE5vIHN1YnNlcXVlbnQgc2VhcmNoIGF0dGVtcHRzIGFyZSBwZXJmb3JtZWQuICBObyBkZWZhdWx0IHN5bWJvbGljIGxpbmsKKyAgIGxvY2F0aW9uIGV4aXN0cyBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0uCisKKzYuIFRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb25zIGFyZSBzZWFyY2hlZC4gIElmIGV4YWN0bHkgb25lCisgICBjYW5kaWRhdGUgaXMgZm91bmQsIHRoaXMgaXMgdXNlZC4gIFRoZSBkZWZhdWx0IENVREEgVG9vbGtpdCBpbnN0YWxsIGxvY2F0aW9ucworICAgc2VhcmNoZWQgYXJlOgorCisgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBQbGF0Zm9ybSAgICB8IFNlYXJjaCBQYXR0ZXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IG1hY09TICAgICAgIHwgYGAvRGV2ZWxvcGVyL05WSURJQS9DVURBLVguWWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgT3RoZXIgVW5peCAgfCBgYC91c3IvbG9jYWwvY3VkYS1YLllgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBXaW5kb3dzICAgICB8IGBgQzpcUHJvZ3JhbSBGaWxlc1xOVklESUEgR1BVIENvbXB1dGluZyBUb29sa2l0XENVREFcdlguWWBgIHwKKyAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIGBgWC5ZYGAgd291bGQgYmUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBDVURBIFRvb2xraXQsIHN1Y2ggYXMKKyAgIGBgL3Vzci9sb2NhbC9jdWRhLTkuMGBgIG9yCisgICBgYEM6XFByb2dyYW0gRmlsZXNcTlZJRElBIEdQVSBDb21wdXRpbmcgVG9vbGtpdFxDVURBXHY5LjBgYAorCisgICAuLiBub3RlOjoKKworICAgICAgIFdoZW4gbXVsdGlwbGUgQ1VEQSBUb29sa2l0cyBhcmUgaW5zdGFsbGVkIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIGEKKyAgICAgICBzeXN0ZW0gKGUuZy4sIGJvdGggYGAvdXNyL2xvY2FsL2N1ZGEtOS4wYGAgYW5kIGBgL3Vzci9sb2NhbC9jdWRhLTEwLjBgYAorICAgICAgIGV4aXN0IGJ1dCB0aGUgYGAvdXNyL2xvY2FsL2N1ZGFgYCBzeW1ib2xpYyBsaW5rIGRvZXMgKipub3QqKiBleGlzdCksIHRoaXMKKyAgICAgICBwYWNrYWdlIGlzIG1hcmtlZCBhcyAqKm5vdCoqIGZvdW5kLgorCisgICAgICAgVGhlcmUgYXJlIHRvbyBtYW55IGZhY3RvcnMgaW52b2x2ZWQgaW4gbWFraW5nIGFuIGF1dG9tYXRpYyBkZWNpc2lvbiBpbgorICAgICAgIHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBDVURBIFRvb2xraXRzIGJlaW5nIGluc3RhbGxlZC4gIEluIHRoaXMKKyAgICAgICBzaXR1YXRpb24sIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGVpdGhlciAoMSkgc2V0IGBgQ1VEQVRvb2xraXRfUk9PVGBgIG9yCisgICAgICAgKDIpIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGBgbnZjY2BgIGV4ZWN1dGFibGUgc2hvd3MgdXAgaW4gYGAkUEFUSGBgIGZvcgorICAgICAgIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gIHRvIGZpbmQuCisKK09wdGlvbnMKK15eXl5eXl4KKworYGBWRVJTSU9OYGAKKyAgICBJZiBzcGVjaWZpZWQsIGRlc2NyaWJlcyB0aGUgdmVyc2lvbiBvZiB0aGUgQ1VEQSBUb29sa2l0IHRvIHNlYXJjaCBmb3IuCisKK2BgUkVRVUlSRURgYAorICAgIElmIHNwZWNpZmllZCwgY29uZmlndXJhdGlvbiB3aWxsIGVycm9yIGlmIGEgc3VpdGFibGUgQ1VEQSBUb29sa2l0IGlzIG5vdAorICAgIGZvdW5kLgorCitgYFFVSUVUYGAKKyAgICBJZiBzcGVjaWZpZWQsIHRoZSBzZWFyY2ggZm9yIGEgc3VpdGFibGUgQ1VEQSBUb29sa2l0IHdpbGwgbm90IHByb2R1Y2UgYW55CisgICAgbWVzc2FnZXMuCisKK2BgRVhBQ1RgYAorICAgIElmIHNwZWNpZmllZCwgdGhlIENVREEgVG9vbGtpdCBpcyBjb25zaWRlcmVkIGZvdW5kIG9ubHkgaWYgdGhlIGV4YWN0CisgICAgYGBWRVJTSU9OYGAgc3BlY2lmaWVkIGlzIHJlY292ZXJlZC4KKworSW1wb3J0ZWQgdGFyZ2V0cworXl5eXl5eXl5eXl5eXl5eXgorCitBbiA6cmVmOmBpbXBvcnRlZCB0YXJnZXQgPEltcG9ydGVkIHRhcmdldHM+YCBuYW1lZCBgYENVREE6OnRvb2xraXRgYCBpcyBwcm92aWRlZC4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXRzIGZvciBlYWNoCitvZiB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBDVURBVG9vbGtpdDoKKworLSA6cmVmOmBDVURBIFJ1bnRpbWUgTGlicmFyeTxjdWRhX3Rvb2xraXRfcnRfbGliPmAKKy0gOnJlZjpgQ1VEQSBEcml2ZXIgTGlicmFyeTxjdWRhX3Rvb2xraXRfZHJpdmVyX2xpYj5gCistIDpyZWY6YGN1QkxBUzxjdWRhX3Rvb2xraXRfY3VCTEFTPmAKKy0gOnJlZjpgY3VGRlQ8Y3VkYV90b29sa2l0X2N1RkZUPmAKKy0gOnJlZjpgY3VSQU5EPGN1ZGFfdG9vbGtpdF9jdVJBTkQ+YAorLSA6cmVmOmBjdVNPTFZFUjxjdWRhX3Rvb2xraXRfY3VTT0xWRVI+YAorLSA6cmVmOmBjdVNQQVJTRTxjdWRhX3Rvb2xraXRfY3VTUEFSU0U+YAorLSA6cmVmOmBjdVBUSTxjdWRhX3Rvb2xraXRfY3VwdGk+YAorLSA6cmVmOmBOUFA8Y3VkYV90b29sa2l0X05QUD5gCistIDpyZWY6YG52QkxBUzxjdWRhX3Rvb2xraXRfbnZCTEFTPmAKKy0gOnJlZjpgbnZHUkFQSDxjdWRhX3Rvb2xraXRfbnZHUkFQSD5gCistIDpyZWY6YG52SlBFRzxjdWRhX3Rvb2xraXRfbnZKUEVHPmAKKy0gOnJlZjpgbnZpZGlhLU1MPGN1ZGFfdG9vbGtpdF9udk1MPmAKKy0gOnJlZjpgbnZSVEM8Y3VkYV90b29sa2l0X252UlRDPmAKKy0gOnJlZjpgbnZUb29sc0V4dDxjdWRhX3Rvb2xraXRfbnZUb29sc0V4dD5gCistIDpyZWY6YE9wZW5DTDxjdWRhX3Rvb2xraXRfb3BlbmNsPmAKKy0gOnJlZjpgY3VMSUJPUzxjdWRhX3Rvb2xraXRfY3VMSUJPUz5gCisKKy4uIF9gY3VkYV90b29sa2l0X3J0X2xpYmA6CisKK0NVREEgUnVudGltZSBMaWJyYXJ5CisiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgQ1VEQSBSdW50aW1lIGxpYnJhcnkgKGN1ZGFydCkgYXJlIHdoYXQgbW9zdCBhcHBsaWNhdGlvbnMgd2lsbCB0eXBpY2FsbHkKK25lZWQgdG8gbGluayBhZ2FpbnN0IHRvIG1ha2UgYW55IGNhbGxzIHN1Y2ggYXMgYGN1ZGFNYWxsb2NgLCBhbmQgYGN1ZGFGcmVlYC4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VkYXJ0YGAKKy0gYGBDVURBOjpjdWRhcnRfc3RhdGljYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfZHJpdmVyX2xpYmA6CisKK0NVREEgRHJpdmVyIExpYnJhcnkKKyIiIiIiIiIiIiIiIiIiIiIiIiIiCisKK1RoZSBDVURBIERyaXZlciBsaWJyYXJ5IChjdWRhKSBhcmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgY2FsbHMKK3N1Y2ggYXMgYGN1TWVtQWxsb2NgLCBhbmQgYGN1TWVtRnJlZWAuIFRoaXMgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgYWR2YW5jZWQKKworCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpjdWRhX2RyaXZlcmBgCistIGBgQ1VEQTo6Y3VkYV9kcml2ZXJgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdUJMQVNgOgorCitjdUJMQVMKKyIiIiIiIgorCitUaGUgYGN1QkxBUyA8aHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdWJsYXMvaW5kZXguaHRtbD5gXyBsaWJyYXJ5LgorCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpjdWJsYXNgYAorLSBgYENVREE6OmN1Ymxhc19zdGF0aWNgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdUZGVGA6CisKK2N1RkZUCisiIiIiIgorCitUaGUgYGN1RkZUIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1ZmZ0L2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VmZnRgYAorLSBgYENVREE6OmN1ZmZ0d2BgCistIGBgQ1VEQTo6Y3VmZnRfc3RhdGljYGAKKy0gYGBDVURBOjpjdWZmdHdfc3RhdGljYGAKKworY3VSQU5ECisiIiIiIiIKKworVGhlIGBjdVJBTkQgPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvY3VyYW5kL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VyYW5kYGAKKy0gYGBDVURBOjpjdXJhbmRfc3RhdGljYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfY3VTT0xWRVJgOgorCitjdVNPTFZFUgorIiIiIiIiIiIKKworVGhlIGBjdVNPTFZFUiA8aHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdXNvbHZlci9pbmRleC5odG1sPmBfIGxpYnJhcnkuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6OmN1c29sdmVyYGAKKy0gYGBDVURBOjpjdXNvbHZlcl9zdGF0aWNgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdVNQQVJTRWA6CisKK2N1U1BBUlNFCisiIiIiIiIiIgorCitUaGUgYGN1U1BBUlNFIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1c3BhcnNlL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VzcGFyc2VgYAorLSBgYENVREE6OmN1c3BhcnNlX3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X2N1cHRpYDoKKworY3VwdGkKKyIiIiIiCisKK1RoZSBgTlZJRElBIENVREEgUHJvZmlsaW5nIFRvb2xzIEludGVyZmFjZSA8aHR0cHM6Ly9kZXZlbG9wZXIubnZpZGlhLmNvbS9DVVBUST5gXy4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VwdGlgYAorLSBgYENVREE6OmN1cHRpX3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X05QUGA6CisKK05QUAorIiIiCisKK1RoZSBgTlBQIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL25wcC9pbmRleC5odG1sPmBfIGxpYnJhcmllcy4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBucHBjYDoKKworICAtIGBgQ1VEQTo6bnBwY2BgCisgIC0gYGBDVURBOjpucHBjX3N0YXRpY2BgCisKKy0gYG5wcGlhbGA6IEFyaXRobWV0aWMgYW5kIGxvZ2ljYWwgb3BlcmF0aW9uIGZ1bmN0aW9ucyBpbiBgbnBwaV9hcml0aG1ldGljX2FuZF9sb2dpY2FsX29wZXJhdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaWFsYGAKKyAgLSBgYENVREE6Om5wcGlhbF9zdGF0aWNgYAorCistIGBucHBpY2NgOiBDb2xvciBjb252ZXJzaW9uIGFuZCBzYW1wbGluZyBmdW5jdGlvbnMgaW4gYG5wcGlfY29sb3JfY29udmVyc2lvbi5oYAorCisgIC0gYGBDVURBOjpucHBpY2NgYAorICAtIGBgQ1VEQTo6bnBwaWNjX3N0YXRpY2BgCisKKy0gYG5wcGljb21gOiBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucyBpbiBgbnBwaV9jb21wcmVzc2lvbl9mdW5jdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaWNvbWBgCisgIC0gYGBDVURBOjpucHBpY29tX3N0YXRpY2BgCisKKy0gYG5wcGlkZWlgOiBEYXRhIGV4Y2hhbmdlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgaW4gYG5wcGlfZGF0YV9leGNoYW5nZV9hbmRfaW5pdGlhbGl6YXRpb24uaGAKKworICAtIGBgQ1VEQTo6bnBwaWRlaWBgCisgIC0gYGBDVURBOjpucHBpZGVpX3N0YXRpY2BgCisKKy0gYG5wcGlmYDogRmlsdGVyaW5nIGFuZCBjb21wdXRlciB2aXNpb24gZnVuY3Rpb25zIGluIGBucHBpX2ZpbHRlcl9mdW5jdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaWZgYAorICAtIGBgQ1VEQTo6bnBwaWZfc3RhdGljYGAKKworLSBgbnBwaWdgOiBHZW9tZXRyeSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgZm91bmQgaW4gYG5wcGlfZ2VvbWV0cnlfdHJhbnNmb3Jtcy5oYAorCisgIC0gYGBDVURBOjpucHBpZ2BgCisgIC0gYGBDVURBOjpucHBpZ19zdGF0aWNgYAorCistIGBucHBpbWA6IE1vcnBob2xvZ2ljYWwgb3BlcmF0aW9uIGZ1bmN0aW9ucyBmb3VuZCBpbiBgbnBwaV9tb3JwaG9sb2dpY2FsX29wZXJhdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaW1gYAorICAtIGBgQ1VEQTo6bnBwaW1fc3RhdGljYGAKKworLSBgbnBwaXN0YDogU3RhdGlzdGljcyBhbmQgbGluZWFyIHRyYW5zZm9ybSBpbiBgbnBwaV9zdGF0aXN0aWNzX2Z1bmN0aW9ucy5oYCBhbmQgYG5wcGlfbGluZWFyX3RyYW5zZm9ybXMuaGAKKworICAtIGBgQ1VEQTo6bnBwaXN0YGAKKyAgLSBgYENVREE6Om5wcGlzdF9zdGF0aWNgYAorCistIGBucHBpc3VgOiBNZW1vcnkgc3VwcG9ydCBmdW5jdGlvbnMgaW4gYG5wcGlfc3VwcG9ydF9mdW5jdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaXN1YGAKKyAgLSBgYENVREE6Om5wcGlzdV9zdGF0aWNgYAorCistIGBucHBpdGNgOiBUaHJlc2hvbGQgYW5kIGNvbXBhcmUgb3BlcmF0aW9uIGZ1bmN0aW9ucyBpbiBgbnBwaV90aHJlc2hvbGRfYW5kX2NvbXBhcmVfb3BlcmF0aW9ucy5oYAorCisgIC0gYGBDVURBOjpucHBpdGNgYAorICAtIGBgQ1VEQTo6bnBwaXRjX3N0YXRpY2BgCisKKy0gYG5wcHNgOgorCisgIC0gYGBDVURBOjpucHBzYGAKKyAgLSBgYENVREE6Om5wcHNfc3RhdGljYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfbnZCTEFTYDoKKworbnZCTEFTCisiIiIiIiIKKworVGhlIGBudkJMQVMgPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvbnZibGFzL2luZGV4Lmh0bWw+YF8gbGlicmFyaWVzLgorVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5IG9ubHkuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6Om52Ymxhc2BgCisKKy4uIF9gY3VkYV90b29sa2l0X252R1JBUEhgOgorCitudkdSQVBICisiIiIiIiIiCisKK1RoZSBgbnZHUkFQSCA8aHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9udmdyYXBoL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6bnZncmFwaGBgCistIGBgQ1VEQTo6bnZncmFwaF9zdGF0aWNgYAorCisKKy4uIF9gY3VkYV90b29sa2l0X252SlBFR2A6CisKK252SlBFRworIiIiIiIiCisKK1RoZSBgbnZKUEVHIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL252anBlZy9pbmRleC5odG1sPmBfIGxpYnJhcnkuCitJbnRyb2R1Y2VkIGluIENVREEgMTAuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6Om52anBlZ2BgCistIGBgQ1VEQTo6bnZqcGVnX3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X252UlRDYDoKKworbnZSVEMKKyIiIiIiCisKK1RoZSBgbnZSVEMgPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvbnZydGMvaW5kZXguaHRtbD5gXyAoUnVudGltZSBDb21waWxhdGlvbikgbGlicmFyeS4KK1RoaXMgaXMgYSBzaGFyZWQgbGlicmFyeSBvbmx5LgorCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpudnJ0Y2BgCisKKy4uIF9gY3VkYV90b29sa2l0X252bWxgOgorCitudmlkaWEtTUwKKyIiIiIiIiIiIgorCitUaGUgYE5WSURJQSBNYW5hZ2VtZW50IExpYnJhcnkgPGh0dHBzOi8vZGV2ZWxvcGVyLm52aWRpYS5jb20vbnZpZGlhLW1hbmFnZW1lbnQtbGlicmFyeS1udm1sPmBfLgorVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5IG9ubHkuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6Om52bWxgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9udlRvb2xzRXh0YDoKKworbnZUb29sc0V4dAorIiIiIiIiIiIiIgorCitUaGUgYE5WSURJQSBUb29scyBFeHRlbnNpb24gPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2dhbWV3b3Jrcy9jb250ZW50L2dhbWV3b3Jrc2xpYnJhcnkvbnZ0eC9udmlkaWFfdG9vbHNfZXh0ZW5zaW9uX2xpYnJhcnlfbnZ0eC5odG0+YF8uCitUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkgb25seS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6bnZUb29sc0V4dGBgCisKKy4uIF9gY3VkYV90b29sa2l0X29wZW5jbGA6CisKK09wZW5DTAorIiIiIiIiCisKK1RoZSBgTlZJRElBIE9wZW5DTCBMaWJyYXJ5IDxodHRwczovL2RldmVsb3Blci5udmlkaWEuY29tL29wZW5jbD5gXy4KK1RoaXMgaXMgYSBzaGFyZWQgbGlicmFyeSBvbmx5LgorCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpPcGVuQ0xgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdUxJQk9TYDoKKworY3VMSUJPUworIiIiIiIiIgorCitUaGUgY3VMSUJPUyBsaWJyYXJ5IGlzIGEgYmFja2VuZCB0aHJlYWQgYWJzdHJhY3Rpb24gbGF5ZXIgbGlicmFyeSB3aGljaCBpcworc3RhdGljIG9ubHkuICBUaGUgYGBDVURBOjpjdWJsYXNfc3RhdGljYGAsIGBgQ1VEQTo6Y3VzcGFyc2Vfc3RhdGljYGAsCitgYENVREE6OmN1ZmZ0X3N0YXRpY2BgLCBgYENVREE6OmN1cmFuZF9zdGF0aWNgYCwgYW5kICh3aGVuIGltcGxlbWVudGVkKSBOUFAKK2xpYnJhcmllcyBhbGwgYXV0b21hdGljYWxseSBoYXZlIHRoaXMgZGVwZW5kZW5jeSBsaW5rZWQuCisKK1RhcmdldCBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VsaWJvc2BgCisKKyoqTm90ZSoqOiBkaXJlY3QgdXNhZ2Ugb2YgdGhpcyB0YXJnZXQgYnkgY29uc3VtZXJzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdVJBTkRgOgorCisKKworUmVzdWx0IHZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgorCitgYENVREFUb29sa2l0X0ZPVU5EYGAKKyAgICBBIGJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0aGUgQ1VEQSBUb29sa2l0IHdhcyBmb3VuZC4KKworYGBDVURBVG9vbGtpdF9WRVJTSU9OYGAKKyAgICBUaGUgZXhhY3QgdmVyc2lvbiBvZiB0aGUgQ1VEQSBUb29sa2l0IGZvdW5kIChhcyByZXBvcnRlZCBieQorICAgIGBgbnZjYyAtLXZlcnNpb25gYCkuCisKK2BgQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUmBgCisgICAgVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIENVREEgVG9vbGtpdC4KKworYGBDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SYGAKKyAgICBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQ1VEQSBUb29sa2l0LgorCitgYENVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0hgYAorICAgIFRoZSBwYXRjaCB2ZXJzaW9uIG9mIHRoZSBDVURBIFRvb2xraXQuCisKK2BgQ1VEQVRvb2xraXRfQklOX0RJUmBgCisgICAgVGhlIHBhdGggdG8gdGhlIENVREEgVG9vbGtpdCBsaWJyYXJ5IGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBDVURBCisgICAgZXhlY3V0YWJsZSBgYG52Y2NgYC4KKworYGBDVURBVG9vbGtpdF9JTkNMVURFX0RJUlNgYAorICAgIFRoZSBwYXRoIHRvIHRoZSBDVURBIFRvb2xraXQgYGBpbmNsdWRlYGAgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGhlYWRlciBmaWxlcworICAgIHJlcXVpcmVkIHRvIGNvbXBpbGUgYSBwcm9qZWN0IGxpbmtpbmcgYWdhaW5zdCBDVURBLgorCitgYENVREFUb29sa2l0X0xJQlJBUllfRElSYGAKKyAgICBUaGUgcGF0aCB0byB0aGUgQ1VEQSBUb29sa2l0IGxpYnJhcnkgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIENVREEKKyAgICBSdW50aW1lIGxpYnJhcnkgYGBjdWRhcnRgYC4KKworYGBDVURBVG9vbGtpdF9UQVJHRVRfRElSYGAKKyAgICBUaGUgcGF0aCB0byB0aGUgQ1VEQSBUb29sa2l0IGRpcmVjdG9yeSBpbmNsdWRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUKKyAgICB3aGVuIGNyb3NzLWNvbXBpbGluZy4gV2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nIHRoaXMgd2lsbCBiZSBlcXVpdmFsYW50IHRvCisgICAgYGBDVURBVG9vbGtpdF9ST09UX0RJUmBgLgorCitgYENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRWBgCisgICAgVGhlIHBhdGggdG8gdGhlIE5WSURJQSBDVURBIGNvbXBpbGVyIGBgbnZjY2BgLiAgTm90ZSB0aGF0IHRoaXMgcGF0aCBtYXkKKyAgICAqKm5vdCoqIGJlIHRoZSBzYW1lIGFzCisgICAgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0NPTVBJTEVSIDxDTUFLRV88TEFORz5fQ09NUElMRVI+YC4gIGBgbnZjY2BgIG11c3QgYmUKKyAgICBmb3VuZCB0byBkZXRlcm1pbmUgdGhlIENVREEgVG9vbGtpdCB2ZXJzaW9uIGFzIHdlbGwgYXMgZGV0ZXJtaW5pbmcgb3RoZXIKKyAgICBmZWF0dXJlcyBvZiB0aGUgVG9vbGtpdC4gIFRoaXMgdmFyaWFibGUgaXMgc2V0IGZvciB0aGUgY29udmVuaWVuY2Ugb2YKKyAgICBtb2R1bGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb25lLgorCisKKyNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCisKKyMgTk9URTogbXVjaCBvZiB0aGlzIHdhcyBzaW1wbHkgZXh0cmFjdGVkIGZyb20gRmluZENVREEuY21ha2UuCisKKyMgICBKYW1lcyBCaWdsZXIsIE5WSURJQSBDb3JwIChudmlkaWEuY29tIC0gamJpZ2xlcikKKyMgICBBYmUgU3RlcGhlbnMsIFNDSSBJbnN0aXR1dGUgLS0gaHR0cDovL3d3dy5zY2kudXRhaC5lZHUvfmFiZS9GaW5kQ3VkYS5odG1sCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAwOSBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA5CisjICAgU2NpZW50aWZpYyBDb21wdXRpbmcgYW5kIEltYWdpbmcgSW5zdGl0dXRlLCBVbml2ZXJzaXR5IG9mIFV0YWgKKyMKKyMgICBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiAgU2VlIHRoZSBGaW5kQ1VEQS5jbWFrZSBzY3JpcHQKKyMgICBmb3IgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UuCisKKyMgVGhlIE1JVCBMaWNlbnNlCisjCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorIyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyMgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyMgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisjIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorIyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9MT0FERUQgQU5EIE5PVCBDVURBVG9vbGtpdF9CSU5fRElSKQorICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGN1ZGFfZGlyICIke0NNQUtFX0NVREFfQ09NUElMRVJ9IiBESVJFQ1RPUlkpCisgICMgdXNlIHRoZSBhbHJlYWR5IGRldGVjdGVkIGN1ZGEgY29tcGlsZXIKKyAgc2V0KENVREFUb29sa2l0X0JJTl9ESVIgIiR7Y3VkYV9kaXJ9IiBDQUNIRSBQQVRIICIiKQorICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X0JJTl9ESVIpCisgIHVuc2V0KGN1ZGFfZGlyKQorZW5kaWYoKQorCisjIFRyeSBsYW5ndWFnZS0gb3IgdXNlci1wcm92aWRlZCBwYXRoIGZpcnN0LgoraWYoQ1VEQVRvb2xraXRfQklOX0RJUikKKyAgZmluZF9wcm9ncmFtKENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRQorICAgIE5BTUVTIG52Y2MgbnZjYy5leGUKKyAgICBQQVRIUyAke0NVREFUb29sa2l0X0JJTl9ESVJ9CisgICAgTk9fREVGQVVMVF9QQVRICisgICAgKQorZW5kaWYoKQorCisjIFNlYXJjaCB1c2luZyBDVURBVG9vbGtpdF9ST09UCitmaW5kX3Byb2dyYW0oQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFCisgIE5BTUVTIG52Y2MgbnZjYy5leGUKKyAgUEFUSFMgRU5WIENVREFfUEFUSAorICBQQVRIX1NVRkZJWEVTIGJpbgorKQorCisjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBDVURBVG9vbGtpdF9ST09UIGJ1dCBudmNjIGNvdWxkIG5vdCBiZSBmb3VuZCwgdGhpcyBpcyBhbiBlcnJvci4KK2lmIChOT1QgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFIEFORCAoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UIE9SIERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KSkKKyAgIyBEZWNsYXJlIGVycm9yIG1lc3NhZ2VzIG5vdywgcHJpbnQgbGF0ZXIgZGVwZW5kaW5nIG9uIGZpbmRfcGFja2FnZSBhcmdzLgorICBzZXQoZmFpbF9iYXNlICJDb3VsZCBub3QgZmluZCBudmNjIGV4ZWN1dGFibGUgaW4gcGF0aCBzcGVjaWZpZWQgYnkiKQorICBzZXQoY3VkYV9yb290X2ZhaWwgIiR7ZmFpbF9iYXNlfSBDVURBVG9vbGtpdF9ST09UPSR7Q1VEQVRvb2xraXRfUk9PVH0iKQorICBzZXQoZW52X2N1ZGFfcm9vdF9mYWlsICIke2ZhaWxfYmFzZX0gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1VEQVRvb2xraXRfUk9PVD0kRU5We0NVREFUb29sa2l0X1JPT1R9IikKKworICBpZiAoQ1VEQVRvb2xraXRfRklORF9SRVFVSVJFRCkKKyAgICBpZiAoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2N1ZGFfcm9vdF9mYWlsfSkKKyAgICBlbHNlaWYgKERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2Vudl9jdWRhX3Jvb3RfZmFpbH0pCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBpZiAoTk9UIENVREFUb29sa2l0X0ZJTkRfUVVJRVRMWSkKKyAgICAgIGlmIChERUZJTkVEIENVREFUb29sa2l0X1JPT1QpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICR7Y3VkYV9yb290X2ZhaWx9KQorICAgICAgZWxzZWlmIChERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgJHtlbnZfY3VkYV9yb290X2ZhaWx9KQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgICBzZXQoQ1VEQVRvb2xraXRfRk9VTkQgRkFMU0UpCisgICAgdW5zZXQoZmFpbF9iYXNlKQorICAgIHVuc2V0KGN1ZGFfcm9vdF9mYWlsKQorICAgIHVuc2V0KGVudl9jdWRhX3Jvb3RfZmFpbCkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRpZigpCisKKyMgQ1VEQVRvb2xraXRfUk9PVCBjbWFrZSAvIGVudiB2YXJpYWJsZSBub3Qgc3BlY2lmaWVkLCB0cnkgcGxhdGZvcm0gZGVmYXVsdHMuCisjCisjIC0gTGludXg6IC91c3IvbG9jYWwvY3VkYS1YLlkKKyMgLSBtYWNPUzogL0RldmVsb3Blci9OVklESUEvQ1VEQS1YLlkKKyMgLSBXaW5kb3dzOiBDOlxQcm9ncmFtIEZpbGVzXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcQ1VEQVx2WC5ZCisjCisjIFdlIHdpbGwgYWxzbyBzZWFyY2ggdGhlIGRlZmF1bHQgc3ltbGluayBsb2NhdGlvbiAvdXNyL2xvY2FsL2N1ZGEgZmlyc3Qgc2luY2UKKyMgaWYgQ1VEQVRvb2xraXRfUk9PVCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHN5bWxpbmtlZAorIyBkaXJlY3RvcnkgaXMgdGhlIGRlc2lyZWQgbG9jYXRpb24uCitpZiAoTk9UIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSkKKyAgaWYgKFVOSVgpCisgICAgaWYgKE5PVCBBUFBMRSkKKyAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvdXNyL2xvY2FsL2N1ZGEtIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvRGV2ZWxvcGVyL05WSURJQS9DVURBLSIpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBzZXQocGxhdGZvcm1fYmFzZSAiQzpcXFByb2dyYW0gRmlsZXNcXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcXENVREFcXHYiKQorICBlbmRpZigpCisKKyAgIyBCdWlsZCBvdXQgYSBkZXNjZW5kaW5nIGxpc3Qgb2YgcG9zc2libGUgY3VkYSBpbnN0YWxsYXRpb25zLCBlLmcuCisgIGZpbGUoR0xPQiBwb3NzaWJsZV9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSoiKQorICAjIEl0ZXJhdGUgdGhlIGdsb2IgcmVzdWx0cyBhbmQgY3JlYXRlIGEgZGVzY2VuZGluZyBsaXN0LgorICBzZXQocG9zc2libGVfdmVyc2lvbnMpCisgIGZvcmVhY2ggKHAgJHtwb3NzaWJsZV9wYXRoc30pCisgICAgIyBFeHRyYWN0IHZlcnNpb24gbnVtYmVyIGZyb20gZW5kIG9mIHN0cmluZworICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiWzAtOV1bMC05XT9cXC5bMC05XSQiIHBfdmVyc2lvbiAke3B9KQorICAgIGlmIChJU19ESVJFQ1RPUlkgJHtwfSBBTkQgcF92ZXJzaW9uKQorICAgICAgbGlzdChBUFBFTkQgcG9zc2libGVfdmVyc2lvbnMgJHtwX3ZlcnNpb259KQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgIyBDYW5ub3QgdXNlIGxpc3QoU09SVCkgYmVjYXVzZSB0aGF0IGlzIGFscGhhYmV0aWNhbCwgd2UgbmVlZCBudW1lcmljYWwuCisgICMgTk9URTogdGhpcyBpcyBub3QgYW4gZWZmaWNpZW50IHNvcnRpbmcgc3RyYXRlZ3kuICBCdXQgZXZlbiBpZiBhIHVzZXIgaGFkCisgICMgZXZlcnkgcG9zc2libGUgdmVyc2lvbiBvZiBDVURBIGluc3RhbGxlZCwgdGhpcyB3b3VsZG4ndCBjcmVhdGUgYW55CisgICMgc2lnbmlmaWNhbnQgb3ZlcmhlYWQuCisgIHNldCh2ZXJzaW9ucykKKyAgZm9yZWFjaCAodiAke3Bvc3NpYmxlX3ZlcnNpb25zfSkKKyAgICBsaXN0KExFTkdUSCB2ZXJzaW9ucyBudW1fdmVyc2lvbnMpCisgICAgIyBGaXJzdCB2ZXJzaW9uLCBub3RoaW5nIHRvIGNvbXBhcmUgd2l0aCBzbyBqdXN0IGFwcGVuZC4KKyAgICBpZiAobnVtX3ZlcnNpb25zIEVRVUFMIDApCisgICAgICBsaXN0KEFQUEVORCB2ZXJzaW9ucyAke3Z9KQorICAgIGVsc2UoKQorICAgICAgIyBMb29wIHRocm91Z2ggbGlzdC4gIEluc2VydCBhdCBhbiBpbmRleCB3aGVuIGNvbXBhcmlzb24gaXMKKyAgICAgICMgVkVSU0lPTl9HUkVBVEVSIHNpbmNlIHdlIHdhbnQgYSBkZXNjZW5kaW5nIGxpc3QuICBEdXBsaWNhdGVzIHdpbGwgbm90CisgICAgICAjIGhhcHBlbiBzaW5jZSB0aGlzIGNhbWUgZnJvbSBhIGdsb2IgbGlzdCBvZiBkaXJlY3Rvcmllcy4KKyAgICAgIHNldChpIDApCisgICAgICBzZXQoZWFybHlfdGVybWluYXRlIEZBTFNFKQorICAgICAgd2hpbGUgKGkgTEVTUyBudW1fdmVyc2lvbnMpCisgICAgICAgIGxpc3QoR0VUIHZlcnNpb25zICR7aX0gY3VycikKKyAgICAgICAgaWYgKHYgVkVSU0lPTl9HUkVBVEVSIGN1cnIpCisgICAgICAgICAgbGlzdChJTlNFUlQgdmVyc2lvbnMgJHtpfSAke3Z9KQorICAgICAgICAgIHNldChlYXJseV90ZXJtaW5hdGUgVFJVRSkKKyAgICAgICAgICBicmVhaygpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgbWF0aChFWFBSIGkgIiR7aX0gKyAxIikKKyAgICAgIGVuZHdoaWxlKCkKKyAgICAgICMgSWYgaXQgZGlkIG5vdCBnZXQgaW5zZXJ0ZWQsIHBsYWNlIGl0IGF0IHRoZSBlbmQuCisgICAgICBpZiAoTk9UIGVhcmx5X3Rlcm1pbmF0ZSkKKyAgICAgICAgbGlzdChBUFBFTkQgdmVyc2lvbnMgJHt2fSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgICMgV2l0aCBhIGRlc2NlbmRpbmcgbGlzdCBvZiB2ZXJzaW9ucywgcG9wdWxhdGUgcG9zc2libGUgcGF0aHMgdG8gc2VhcmNoLgorICBzZXQoc2VhcmNoX3BhdGhzKQorICBmb3JlYWNoICh2ICR7dmVyc2lvbnN9KQorICAgIGxpc3QoQVBQRU5EIHNlYXJjaF9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSR7dn0iKQorICBlbmRmb3JlYWNoKCkKKworICAjIEZvcmNlIHRoZSBnbG9iYWwgZGVmYXVsdCAvdXNyL2xvY2FsL2N1ZGEgdG8gdGhlIGZyb250IG9uIFVuaXguCisgIGlmIChVTklYKQorICAgIGxpc3QoSU5TRVJUIHNlYXJjaF9wYXRocyAwICIvdXNyL2xvY2FsL2N1ZGEiKQorICBlbmRpZigpCisKKyAgIyBOb3cgc2VhcmNoIGZvciBudmNjIGFnYWluIHVzaW5nIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IHNlYXJjaCBwYXRocy4KKyAgZmluZF9wcm9ncmFtKENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRQorICAgIE5BTUVTIG52Y2MgbnZjYy5leGUKKyAgICBQQVRIUyAke3NlYXJjaF9wYXRoc30KKyAgICBQQVRIX1NVRkZJWEVTIGJpbgorICApCisKKyAgIyBXZSBhcmUgZG9uZSB3aXRoIHRoZXNlIHZhcmlhYmxlcyBub3csIGNsZWFudXAgZm9yIGNhbGxlci4KKyAgdW5zZXQocGxhdGZvcm1fYmFzZSkKKyAgdW5zZXQocG9zc2libGVfcGF0aHMpCisgIHVuc2V0KHBvc3NpYmxlX3ZlcnNpb25zKQorICB1bnNldCh2ZXJzaW9ucykKKyAgdW5zZXQoaSkKKyAgdW5zZXQoZWFybHlfdGVybWluYXRlKQorICB1bnNldChzZWFyY2hfcGF0aHMpCisKKyAgaWYgKE5PVCBDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUpCisgICAgaWYgKENVREFUb29sa2l0X0ZJTkRfUkVRVUlSRUQpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBudmNjLCBwbGVhc2Ugc2V0IENVREFUb29sa2l0X1JPT1QuIikKKyAgICBlbHNlaWYoTk9UIENVREFUb29sa2l0X0ZJTkRfUVVJRVRMWSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJDb3VsZCBub3QgZmluZCBudmNjLCBwbGVhc2Ugc2V0IENVREFUb29sa2l0X1JPT1QuIikKKyAgICBlbmRpZigpCisKKyAgICBzZXQoQ1VEQVRvb2xraXRfRk9VTkQgRkFMU0UpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpZihOT1QgQ1VEQVRvb2xraXRfQklOX0RJUiBBTkQgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFKQorICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGN1ZGFfZGlyICIke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0iIERJUkVDVE9SWSkKKyAgc2V0KENVREFUb29sa2l0X0JJTl9ESVIgIiR7Y3VkYV9kaXJ9IiBDQUNIRSBQQVRIICIiIEZPUkNFKQorICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X0JJTl9ESVIpCisgIHVuc2V0KGN1ZGFfZGlyKQorZW5kaWYoKQorCitpZihDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUgQU5ECisgICBDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUgU1RSRVFVQUwgQ01BS0VfQ1VEQV9DT01QSUxFUikKKyAgIyBOZWVkIHRvIHNldCB0aGVzZSBiYXNlZCBvZmYgdGhlIGFscmVhZHkgY29tcHV0ZWQgQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIHZhbHVlCisgICMgVGhpcyBpZiBzdGF0ZW1lbnQgd2lsbCBhbHdheXMgbWF0Y2gsIGJ1dCBpcyB1c2VkIHRvIHByb3ZpZGUgdmFyaWFibGVzIGZvciBNQVRDSCAxLDIsMy4uLgorICBpZihDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gTUFUQ0hFUyBbPVsoWzAtOV0rKVwuKFswLTldKylcLihbMC05XSspXT1dKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SICIke0NNQUtFX01BVENIXzF9IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NSU5PUiAiJHtDTUFLRV9NQVRDSF8yfSIpCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0ggIiR7Q01BS0VfTUFUQ0hfM30iKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OICIke0NNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTn0iKQorICBlbmRpZigpCitlbHNlKCkKKyAgIyBDb21wdXRlIHRoZSB2ZXJzaW9uIGJ5IGludm9raW5nIG52Y2MKKyAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7Q1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFfSAiLS12ZXJzaW9uIiBPVVRQVVRfVkFSSUFCTEUgTlZDQ19PVVQpCisgIGlmKE5WQ0NfT1VUIE1BVENIRVMgWz1bIFYoWzAtOV0rKVwuKFswLTldKylcLihbMC05XSspXT1dKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SICIke0NNQUtFX01BVENIXzF9IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NSU5PUiAiJHtDTUFLRV9NQVRDSF8yfSIpCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0ggIiR7Q01BS0VfTUFUQ0hfM30iKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OICAiJHtDTUFLRV9NQVRDSF8xfS4ke0NNQUtFX01BVENIXzJ9LiR7Q01BS0VfTUFUQ0hfM30iKQorICBlbmRpZigpCisgIHVuc2V0KE5WQ0NfT1VUKQorZW5kaWYoKQorCisKK2dldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQVRvb2xraXRfUk9PVF9ESVIgJHtDVURBVG9vbGtpdF9CSU5fRElSfSBESVJFQ1RPUlkgQUJTT0xVVEUpCisKKyMgSGFuZGxlIGNyb3NzIGNvbXBpbGF0aW9uCitpZihDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiYXJtdjctYSIpCisgICAgIyBTdXBwb3J0IGZvciBOVlBBQ0sKKyAgICBzZXQgKENVREFUb29sa2l0X1RBUkdFVF9OQU1FICJhcm12Ny1saW51eC1hbmRyb2lkZWFiaSIpCisgIGVsc2VpZihDTUFLRV9TWVNURU1fUFJPQ0VTU09SIE1BVENIRVMgImFybSIpCisgICAgIyBTdXBwb3J0IGZvciBhcm0gY3Jvc3MgY29tcGlsYXRpb24KKyAgICBzZXQoQ1VEQVRvb2xraXRfVEFSR0VUX05BTUUgImFybXY3LWxpbnV4LWdudWVhYmloZiIpCisgIGVsc2VpZihDTUFLRV9TWVNURU1fUFJPQ0VTU09SIE1BVENIRVMgImFhcmNoNjQiKQorICAgICMgU3VwcG9ydCBmb3IgYWFyY2g2NCBjcm9zcyBjb21waWxhdGlvbgorICAgIGlmIChBTkRST0lEX0FSQ0hfTkFNRSBTVFJFUVVBTCAiYXJtNjQiKQorICAgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9OQU1FICJhYXJjaDY0LWxpbnV4LWFuZHJvaWRlYWJpIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAiYWFyY2g2NC1saW51eCIpCisgICAgZW5kaWYgKEFORFJPSURfQVJDSF9OQU1FIFNUUkVRVUFMICJhcm02NCIpCisgIGVsc2VpZihDTUFLRV9TWVNURU1fUFJPQ0VTU09SIFNUUkVRVUFMICJ4ODZfNjQiKQorICAgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9OQU1FICJ4ODZfNjQtbGludXgiKQorICBlbmRpZigpCisKKyAgaWYgKEVYSVNUUyAiJHtDVURBVG9vbGtpdF9ST09UX0RJUn0vdGFyZ2V0cy8ke0NVREFUb29sa2l0X1RBUkdFVF9OQU1FfSIpCisgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9ESVIgIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9L3RhcmdldHMvJHtDVURBVG9vbGtpdF9UQVJHRVRfTkFNRX0iKQorICAgICMgYWRkIGtub3duIENVREEgdGFyZ2V0IHJvb3QgcGF0aCB0byB0aGUgc2V0IG9mIGRpcmVjdG9yaWVzIHdlIHNlYXJjaCBmb3IgcHJvZ3JhbXMsIGxpYnJhcmllcyBhbmQgaGVhZGVycworICAgIGxpc3QoUFJFUEVORCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAiJHtDVURBVG9vbGtpdF9UQVJHRVRfRElSfSIpCisKKyAgICAjIE1hcmsgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUgcm9vdCBzZWFyY2ggcGF0aCBjaGFuZ2VzIGFmdGVyIHdlIGhhdmUKKyAgICAjIGZvdW5kIGFsbCBjdWRhIGxpYnJhcmllcyBzbyB0aGF0IHNlYXJjaGVzIGZvciBvdXIgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAjIGxpYnJhcmllcyB3b3JrIHdoZW4gYW5vdGhlciBjdWRhIHNkayBpcyBpbiBDTUFLRV9QUkVGSVhfUEFUSCBvcgorICAgICMgUEFUaAorICAgIHNldChfQ1VEQVRvb2xraXRfUG9wX1JPT1RfUEFUSCBUcnVlKQorICBlbmRpZigpCitlbHNlKCkKKyAgIyBOb3QgY3Jvc3MgY29tcGlsaW5nCisgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfRElSICIke0NVREFUb29sa2l0X1JPT1RfRElSfSIpCisgICMgTm93IHRoYXQgd2UgaGF2ZSB0aGUgcmVhbCBST09UX0RJUiwgZmluZCBjb21wb25lbnRzIGluc2lkZSBpdC4KKyAgbGlzdChBUFBFTkQgQ01BS0VfUFJFRklYX1BBVEggJHtDVURBVG9vbGtpdF9ST09UX0RJUn0pCisKKyAgIyBNYXJrIHRoYXQgd2UgbmVlZCB0byBwb3AgdGhlIHByZWZpeCBwYXRoIGNoYW5nZXMgYWZ0ZXIgd2UgaGF2ZQorICAjIGZvdW5kIHRoZSBjdWRhcnQgbGlicmFyeS4KKyAgc2V0KF9DVURBVG9vbGtpdF9Qb3BfUHJlZml4IFRydWUpCitlbmRpZigpCisKKworIyBGaW5kIHRoZSBpbmNsdWRlLyBkaXJlY3RvcnkKK2ZpbmRfcGF0aChDVURBVG9vbGtpdF9JTkNMVURFX0RJUgorICBOQU1FUyBjdWRhX3J1bnRpbWUuaAorKQorCisjIEFuZCBmaW5kIHRoZSBDVURBIFJ1bnRpbWUgTGlicmFyeSBsaWJjdWRhcnQKK2ZpbmRfbGlicmFyeShDVURBX0NVREFSVAorICBOQU1FUyBjdWRhcnQKKyAgUEFUSF9TVUZGSVhFUyBsaWI2NCBsaWI2NC9zdHVicyBsaWIveDY0CispCitpZiAoTk9UIENVREFfQ1VEQVJUIEFORCBOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQorICBtZXNzYWdlKFNUQVRVUyAiVW5hYmxlIHRvIGZpbmQgY3VkYXJ0IGxpYnJhcnkuIikKK2VuZGlmKCkKKwordW5zZXQoQ1VEQVRvb2xraXRfUk9PVF9ESVIpCitpZihfQ1VEQVRvb2xraXRfUG9wX1ByZWZpeCkKKyAgbGlzdChSRU1PVkVfQVQgQ01BS0VfUFJFRklYX1BBVEggLTEpCisgIHVuc2V0KF9DVURBVG9vbGtpdF9Qb3BfUHJlZml4KQorZW5kaWYoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSB2ZXJzaW9uIGNvbXBhcmlzb24gYW5kIHZhbGlkYXRlIGFsbCByZXF1aXJlZCB2YXJpYWJsZXMgYXJlIHNldC4KK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhDVURBVG9vbGtpdAorICBSRVFVSVJFRF9WQVJTCisgICAgQ1VEQVRvb2xraXRfSU5DTFVERV9ESVIKKyAgICBDVURBX0NVREFSVAorICAgIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRQorICBWRVJTSU9OX1ZBUgorICAgIENVREFUb29sa2l0X1ZFUlNJT04KKykKK21hcmtfYXNfYWR2YW5jZWQoQ1VEQV9DVURBUlQKKyAgICAgICAgICAgICAgICAgQ1VEQVRvb2xraXRfSU5DTFVERV9ESVIKKyAgICAgICAgICAgICAgICAgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnN0cnVjdCByZXN1bHQgdmFyaWFibGVzCitpZihDVURBVG9vbGtpdF9GT1VORCkKKyBzZXQoQ1VEQVRvb2xraXRfSU5DTFVERV9ESVJTICR7Q1VEQVRvb2xraXRfSU5DTFVERV9ESVJ9KQorIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQVRvb2xraXRfTElCUkFSWV9ESVIgJHtDVURBX0NVREFSVH0gRElSRUNUT1JZIEFCU09MVVRFKQorZW5kaWYoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uc3RydWN0IGltcG9ydCB0YXJnZXRzCitpZihDVURBVG9vbGtpdF9GT1VORCkKKworICBmdW5jdGlvbihfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIgbGliX25hbWUpCisgICAgY21ha2VfcGFyc2VfYXJndW1lbnRzKGFyZyAiIiAiIiAiQUxUO0RFUFM7RVhUUkFfUEFUSF9TVUZGSVhFUyIgJHtBUkdOfSkKKworICAgIHNldChzZWFyY2hfbmFtZXMgJHtsaWJfbmFtZX0gJHthcmdfQUxUfSkKKworICAgIGZpbmRfbGlicmFyeShDVURBXyR7bGliX25hbWV9X0xJQlJBUlkKKyAgICAgIE5BTUVTICR7c2VhcmNoX25hbWVzfQorICAgICAgSElOVFMgJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0KKyAgICAgICAgICAgIEVOViBDVURBX1BBVEgKKyAgICAgIFBBVEhfU1VGRklYRVMgbnZpZGlhL2N1cnJlbnQgbGliNjQgbGliNjQvc3R1YnMgbGliL3g2NCBsaWIgbGliL3N0dWJzCisgICAgICAgICAgICAgICAgICAgICR7YXJnX0VYVFJBX1BBVEhfU1VGRklYRVN9CisgICAgKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1VEQV8ke2xpYl9uYW1lfV9MSUJSQVJZKQorCisgICAgaWYgKE5PVCBUQVJHRVQgQ1VEQTo6JHtsaWJfbmFtZX0gQU5EIENVREFfJHtsaWJfbmFtZX1fTElCUkFSWSkKKyAgICAgIGFkZF9saWJyYXJ5KENVREE6OiR7bGliX25hbWV9IElNUE9SVEVEIElOVEVSRkFDRSkKKyAgICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKENVREE6OiR7bGliX25hbWV9IFNZU1RFTSBJTlRFUkZBQ0UgIiR7Q1VEQVRvb2xraXRfSU5DTFVERV9ESVJTfSIpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoQ1VEQTo6JHtsaWJfbmFtZX0gSU5URVJGQUNFICIke0NVREFfJHtsaWJfbmFtZX1fTElCUkFSWX0iKQorICAgICAgZm9yZWFjaChkZXAgJHthcmdfREVQU30pCisgICAgICAgIGlmKFRBUkdFVCBDVURBOjoke2RlcH0pCisgICAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKENVREE6OiR7bGliX25hbWV9IElOVEVSRkFDRSBDVURBOjoke2RlcH0pCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVuZGlmKCkKKyAgZW5kZnVuY3Rpb24oKQorCisgIGlmKE5PVCBUQVJHRVQgQ1VEQTo6dG9vbGtpdCkKKyAgICBhZGRfbGlicmFyeShDVURBOjp0b29sa2l0IElNUE9SVEVEIElOVEVSRkFDRSkKKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhDVURBOjp0b29sa2l0IFNZU1RFTSBJTlRFUkZBQ0UgIiR7Q1VEQVRvb2xraXRfSU5DTFVERV9ESVJTfSIpCisgICAgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMoQ1VEQTo6dG9vbGtpdCBJTlRFUkZBQ0UgIiR7Q1VEQVRvb2xraXRfTElCUkFSWV9ESVJ9IikKKyAgZW5kaWYoKQorCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihjdWRhX2RyaXZlciBBTFQgY3VkYSkKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VkYXJ0KQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VkYXJ0X3N0YXRpYykKKworICAjIHNldHVwIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgY3VkYXJ0X3N0YXRpYyB3aGVuIGJ1aWxkaW5nCisgICMgb24gbGludXguIFRoZXNlIGFyZSBnZW5lcmFsbHkgb25seSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBDVURBIHRvb2xraXQKKyAgIyB3aGVuIENVREEgbGFuZ3VhZ2UgaXMgZGlzYWJsZWQKKyAgaWYoTk9UIFRBUkdFVCBDVURBOjpjdWRhcnRfc3RhdGljX2RlcHMKKyAgICAgQU5EIFRBUkdFVCBDVURBOjpjdWRhcnRfc3RhdGljKQorCisgICAgYWRkX2xpYnJhcnkoQ1VEQTo6Y3VkYXJ0X3N0YXRpY19kZXBzIElNUE9SVEVEIElOVEVSRkFDRSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoQ1VEQTo6Y3VkYXJ0X3N0YXRpYyBJTlRFUkZBQ0UgQ1VEQTo6Y3VkYXJ0X3N0YXRpY19kZXBzKQorCisgICAgaWYoVU5JWCBBTkQgKENNQUtFX0NfQ09NUElMRVIgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSKSkKKyAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQorICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKENVREE6OmN1ZGFydF9zdGF0aWNfZGVwcyBJTlRFUkZBQ0UgVGhyZWFkczo6VGhyZWFkcyAke0NNQUtFX0RMX0xJQlN9KQorICAgIGVuZGlmKCkKKworICAgIGlmKFVOSVggQU5EIE5PVCBBUFBMRSkKKyAgICAgICMgT24gTGludXgsIHlvdSBtdXN0IGxpbmsgYWdhaW5zdCBsaWJydCB3aGVuIHVzaW5nIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lLgorICAgICAgZmluZF9saWJyYXJ5KENVREFUb29sa2l0X3J0X0xJQlJBUlkgcnQpCisgICAgICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X3J0X0xJQlJBUlkpCisgICAgICBpZihOT1QgQ1VEQVRvb2xraXRfcnRfTElCUkFSWSkKKyAgICAgICAgbWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCBsaWJydCBsaWJyYXJ5LCBuZWVkZWQgYnkgQ1VEQTo6Y3VkYXJ0X3N0YXRpYyIpCisgICAgICBlbHNlKCkKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKENVREE6OmN1ZGFydF9zdGF0aWNfZGVwcyBJTlRFUkZBQ0UgJHtDVURBVG9vbGtpdF9ydF9MSUJSQVJZfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VsaWJvcykgIyBpdCdzIGEgc3RhdGljIGxpYnJhcnkKKyAgZm9yZWFjaCAoY3VkYV9saWIgY3VibGFzIGN1ZmZ0IGN1cmFuZCBjdXNwYXJzZSBucHBjIG52anBlZykKKyAgICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoJHtjdWRhX2xpYn0pCisgICAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKCR7Y3VkYV9saWJ9X3N0YXRpYyBERVBTIGN1bGlib3MpCisgIGVuZGZvcmVhY2goKQorCisgICMgY3VGRlRXIGRlcGVuZHMgb24gY3VGRlQKKyAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKGN1ZmZ0dyBERVBTIGN1ZmZ0KQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VmZnR3IERFUFMgY3VmZnRfc3RhdGljKQorCisgICMgY3VTT0xWRVIgZGVwZW5kcyBvbiBjdUJMQVMsIGFuZCBjdVNQQVJTRQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3Vzb2x2ZXIgREVQUyBjdWJsYXMgY3VzcGFyc2UpCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihjdXNvbHZlcl9zdGF0aWMgREVQUyBjdWJsYXNfc3RhdGljIGN1c3BhcnNlX3N0YXRpYyBjdWxpYm9zKQorCisgICMgbnZHUkFQSCBkZXBlbmRzIG9uIGN1UkFORCwgYW5kIGN1U09MVkVSLgorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZncmFwaCBERVBTIGN1cmFuZCBjdXNvbHZlcikKKyAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKG52Z3JhcGhfc3RhdGljIERFUFMgY3VyYW5kX3N0YXRpYyBjdXNvbHZlcl9zdGF0aWMpCisKKyAgIyBQcm9jZXNzIHRoZSBtYWpvcml0eSBvZiB0aGUgTlBQIGxpYnJhcmllcy4KKyAgZm9yZWFjaCAoY3VkYV9saWIgbnBwaWFsIG5wcGljYyBucHBpZGVpIG5wcGlmIG5wcGlnIG5wcGltIG5wcGlzdCBucHBpdGMgbnBwcyBucHBpY29tIG5wcGlzdSkKKyAgICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoJHtjdWRhX2xpYn0gREVQUyBucHBjKQorICAgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYigke2N1ZGFfbGlifV9zdGF0aWMgREVQUyBucHBjX3N0YXRpYykKKyAgZW5kZm9yZWFjaCgpCisKKyAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKGN1cHRpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQV9QQVRIX1NVRkZJWEVTIC4uL2V4dHJhcy9DVVBUSS9saWI2NC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4vZXh0cmFzL0NVUFRJL2xpYi8pCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihjdXB0aV9zdGF0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBX1BBVEhfU1VGRklYRVMgLi4vZXh0cmFzL0NVUFRJL2xpYjY0LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi9leHRyYXMvQ1VQVEkvbGliLykKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZydGMgREVQUyBjdWRhX2RyaXZlcikKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZtbCBBTFQgbnZpZGlhLW1sIG52bWwpCisKKyAgaWYoV0lOMzIpCisgICAgIyBudnRvb2xzIGNhbiBiZSBpbnN0YWxsZWQgb3V0c2lkZSB0aGUgQ1VEQSB0b29sa2l0IGRpcmVjdG9yeQorICAgICMgc28gcHJlZmVyIHRoZSBOVlRPT0xTRVhUX1BBVEggd2luZG93cyBvbmx5IGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgIyBJbiBhZGRpdGlvbiBvbiB3aW5kb3dzIHRoZSBtb3N0IGNvbW1vbiBuYW1lIGlzIG52VG9vbHNFeHQ2NF8xCisgICAgZmluZF9saWJyYXJ5KENVREFfbnZUb29sc0V4dF9MSUJSQVJZCisgICAgICBOQU1FUyBudlRvb2xzRXh0NjRfMSBudlRvb2xzRXh0NjQgbnZUb29sc0V4dAorICAgICAgUEFUSFMgRU5WIE5WVE9PTFNFWFRfUEFUSAorICAgICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgUEFUSF9TVUZGSVhFUyBsaWIveDY0IGxpYgorICAgICkKKyAgZW5kaWYoKQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZUb29sc0V4dCBBTFQgbnZUb29sc0V4dDY0KQorCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihPcGVuQ0wpCitlbmRpZigpCisKK2lmKF9DVURBVG9vbGtpdF9Qb3BfUk9PVF9QQVRIKQorICBsaXN0KFJFTU9WRV9BVCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAwKQorICB1bnNldChfQ1VEQVRvb2xraXRfUG9wX1JPT1RfUEFUSCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZENVUkwuY21ha2UgYi9Nb2R1bGVzL0ZpbmRDVVJMLmNtYWtlCmluZGV4IGFlZWJjODQuLjkxOWJhYmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZENVUkwuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQ1VSTC5jbWFrZQpAQCAtMzcsOCArMzcsMzUgQEAKIAogYGBDVVJMX1ZFUlNJT05fU1RSSU5HYGAKICAgVGhlIHZlcnNpb24gb2YgYGBjdXJsYGAgZm91bmQuCisKK0NVUkwgQ01ha2UKK15eXl5eXl5eXl4KKworSWYgQ1VSTCB3YXMgYnVpbHQgdXNpbmcgdGhlIENNYWtlIGJ1aWxkc3lzdGVtIHRoZW4gaXQgcHJvdmlkZXMgaXRzIG93bgorYGBDVVJMQ29uZmlnLmNtYWtlYGAgZmlsZSBmb3IgdXNlIHdpdGggdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQncworY29uZmlnIG1vZGUuIFRoaXMgbW9kdWxlIGxvb2tzIGZvciB0aGlzIGZpbGUgYW5kLCBpZiBmb3VuZCwKK3JldHVybnMgaXRzIHJlc3VsdHMgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbi4KKworU2V0IGBgQ1VSTF9OT19DVVJMX0NNQUtFYGAgdG8gYGBPTmBgIHRvIGRpc2FibGUgdGhpcyBzZWFyY2guCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKKworaWYoTk9UIENVUkxfTk9fQ1VSTF9DTUFLRSkKKyAgIyBkbyBhIGZpbmQgcGFja2FnZSBjYWxsIHRvIHNwZWNpZmljYWxseSBsb29rIGZvciB0aGUgQ01ha2UgdmVyc2lvbgorICAjIG9mIGN1cmwKKyAgZmluZF9wYWNrYWdlKENVUkwgUVVJRVQgTk9fTU9EVUxFKQorICBtYXJrX2FzX2FkdmFuY2VkKENVUkxfRElSKQorCisgICMgaWYgd2UgZm91bmQgdGhlIENVUkwgY21ha2UgcGFja2FnZSB0aGVuIHdlIGFyZSBkb25lLCBhbmQKKyAgIyBjYW4gcHJpbnQgd2hhdCB3ZSBmb3VuZCBhbmQgcmV0dXJuLgorICBpZihDVVJMX0ZPVU5EKQorICAgIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhDVVJMIEhBTkRMRV9DT01QT05FTlRTIENPTkZJR19NT0RFKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGlmKCkKKwogZmluZF9wYWNrYWdlKFBrZ0NvbmZpZyBRVUlFVCkKIGlmKFBLR19DT05GSUdfRk9VTkQpCiAgIHBrZ19jaGVja19tb2R1bGVzKFBDX0NVUkwgUVVJRVQgbGliY3VybCkKQEAgLTEzOSw3ICsxNjYsNiBAQAogICBlbmRmb3JlYWNoKCkKIGVuZGlmKCkKIAotaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKENVUkwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9WQVJTIENVUkxfTElCUkFSWSBDVVJMX0lOQ0xVREVfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgQ1VSTF9WRVJTSU9OX1NUUklORwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ3Vyc2VzLmNtYWtlIGIvTW9kdWxlcy9GaW5kQ3Vyc2VzLmNtYWtlCmluZGV4IGUzZTcyNzMuLmJhNTYwNzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEN1cnNlcy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRDdXJzZXMuY21ha2UKQEAgLTE1OSw2ICsxNTksMTAgQEAKICAgaWYoTk9UIENVUlNFU19OQ1VSU0VTX0hBU19DQlJFQUspCiAgICAgZmluZF9saWJyYXJ5KENVUlNFU19FWFRSQV9MSUJSQVJZICIke0NVUlNFU19USU5GT19MSUJSQVJZX05BTUV9IiBISU5UUyAiJHtfY3Vyc2VzTGliRGlyfSIpCiAgICAgZmluZF9saWJyYXJ5KENVUlNFU19FWFRSQV9MSUJSQVJZICIke0NVUlNFU19USU5GT19MSUJSQVJZX05BTUV9IiApCisKKyAgICBtYXJrX2FzX2FkdmFuY2VkKAorICAgICAgQ1VSU0VTX0VYVFJBX0xJQlJBUlkKKyAgICAgICkKICAgZW5kaWYoKQogZWxzZSgpCiAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2N1cnNlc0xpYkRpciAiJHtDVVJTRVNfQ1VSU0VTX0xJQlJBUll9IiBQQVRIKQpAQCAtMjYyLDYgKzI2Niw1IEBACiAgIENVUlNFU19JTkNMVURFX1BBVEgKICAgQ1VSU0VTX0NVUlNFU19MSUJSQVJZCiAgIENVUlNFU19OQ1VSU0VTX0xJQlJBUlkKLSAgQ1VSU0VTX0VYVFJBX0xJQlJBUlkKICAgQ1VSU0VTX0ZPUk1fTElCUkFSWQogICApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmREQ01USy5jbWFrZSBiL01vZHVsZXMvRmluZERDTVRLLmNtYWtlCmluZGV4IGQ0OGRlMDguLmIyZTAwZGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZERDTVRLLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZERDTVRLLmNtYWtlCkBAIC0xMDIsNyArMTAyLDcgQEAKICMgU3RlcDE6IEF0dGVtcHQgdG8gZmluZCBhIHZlcnNpb24gb2YgRENNVEsgcHJvdmlkaW5nIGEgRENNVEtDb25maWcuY21ha2UgZmlsZS4KICMKIGlmKE5PVCBEQ01US19GSU5EX1FVSUVUTFkpCi0gIG1lc3NhZ2UoU1RBVFVTICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UiKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UiKQogZW5kaWYoKQogZmluZF9wYWNrYWdlKERDTVRLIFFVSUVUIE5PX01PRFVMRSkKIGlmKERDTVRLX0ZPVU5ECkBAIC0xMTAsMTIgKzExMCwxMiBAQAogICAgIEFORCBOT1QgIngiIFNUUkVRVUFMICJ4JHtEQ01US19JTkNMVURFX0RJUlN9IikKIAogICBpZihOT1QgRENNVEtfRklORF9RVUlFVExZKQotICAgIG1lc3NhZ2UoU1RBVFVTICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UgLSBvayIpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJvayIpCiAgIGVuZGlmKCkKICAgcmV0dXJuKCkKIGVsc2UoKQogICBpZihOT1QgRENNVEtfRklORF9RVUlFVExZKQotICAgIG1lc3NhZ2UoU1RBVFVTICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UgLSBmYWlsZWQiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiZmFpbGVkIikKICAgZW5kaWYoKQogZW5kaWYoKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRGTEVYLmNtYWtlIGIvTW9kdWxlcy9GaW5kRkxFWC5jbWFrZQppbmRleCBkMjJiN2VjLi45MGU1Zjg2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRGTEVYLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEZMRVguY21ha2UKQEAgLTE0Miw4ICsxNDIsNiBAQAogICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICMKICAgbWFjcm8oRkxFWF9UQVJHRVQgTmFtZSBJbnB1dCBPdXRwdXQpCi0gICAgc2V0KEZMRVhfVEFSR0VUX291dHB1dHMgIiR7T3V0cHV0fSIpCi0gICAgc2V0KEZMRVhfRVhFQ1VUQUJMRV9vcHRzICIiKQogCiAgICAgc2V0KEZMRVhfVEFSR0VUX1BBUkFNX09QVElPTlMpCiAgICAgc2V0KEZMRVhfVEFSR0VUX1BBUkFNX09ORV9WQUxVRV9LRVlXT1JEUwpAQCAtMTY1LDMxICsxNjMsNjggQEAKICAgICBpZihOT1QgIiR7RkxFWF9UQVJHRVRfQVJHX1VOUEFSU0VEX0FSR1VNRU5UU30iIFNUUkVRVUFMICIiKQogICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICR7RkxFWF9UQVJHRVRfdXNhZ2V9KQogICAgIGVsc2UoKQotICAgICAgaWYoTk9UICIke0ZMRVhfVEFSR0VUX0FSR19DT01QSUxFX0ZMQUdTfSIgU1RSRVFVQUwgIiIpCi0gICAgICAgIHNldChGTEVYX0VYRUNVVEFCTEVfb3B0cyAiJHtGTEVYX1RBUkdFVF9BUkdfQ09NUElMRV9GTEFHU30iKQotICAgICAgICBzZXBhcmF0ZV9hcmd1bWVudHMoRkxFWF9FWEVDVVRBQkxFX29wdHMpCisKKyAgICAgIGNtYWtlX3BvbGljeShHRVQgQ01QMDA5OCBfZmxleF9DTVAwMDk4CisgICAgICAgICAgUEFSRU5UX1NDT1BFICMgdW5kb2N1bWVudGVkLCBkbyBub3QgdXNlIG91dHNpZGUgb2YgQ01ha2UKKyAgICAgICAgKQorICAgICAgc2V0KF9mbGV4X0lOUFVUICIke0lucHV0fSIpCisgICAgICBpZigieCR7X2ZsZXhfQ01QMDA5OH14IiBTVFJFUVVBTCAieE5FV3giKQorICAgICAgICBzZXQoX2ZsZXhfV09SS0lOR19ESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIpCisgICAgICAgIGlmKE5PVCBJU19BQlNPTFVURSAiJHtfZmxleF9JTlBVVH0iKQorICAgICAgICAgIHNldChfZmxleF9JTlBVVCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7X2ZsZXhfSU5QVVR9IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldChfZmxleF9XT1JLSU5HX0RJUiAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKICAgICAgIGVuZGlmKCkKLSAgICAgIGlmKE5PVCAiJHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSIgU1RSRVFVQUwgIiIpCi0gICAgICAgIGxpc3QoQVBQRU5EIEZMRVhfVEFSR0VUX291dHB1dHMgIiR7RkxFWF9UQVJHRVRfQVJHX0RFRklORVNfRklMRX0iKQotICAgICAgICBsaXN0KEFQUEVORCBGTEVYX0VYRUNVVEFCTEVfb3B0cyAtLWhlYWRlci1maWxlPSR7RkxFWF9UQVJHRVRfQVJHX0RFRklORVNfRklMRX0pCisgICAgICB1bnNldChfZmxleF9DTVAwMDk4KQorCisgICAgICBzZXQoX2ZsZXhfT1VUUFVUICIke091dHB1dH0iKQorICAgICAgaWYoTk9UIElTX0FCU09MVVRFICR7X2ZsZXhfT1VUUFVUfSkKKyAgICAgICAgc2V0KF9mbGV4X09VVFBVVCAiJHtfZmxleF9XT1JLSU5HX0RJUn0vJHtfZmxleF9PVVRQVVR9IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIHNldChfZmxleF9UQVJHRVRfT1VUUFVUUyAiJHtfZmxleF9PVVRQVVR9IikKKworICAgICAgc2V0KF9mbGV4X0VYRV9PUFRTICIiKQorICAgICAgaWYoTk9UICIke0ZMRVhfVEFSR0VUX0FSR19DT01QSUxFX0ZMQUdTfSIgU1RSRVFVQUwgIiIpCisgICAgICAgIHNldChfZmxleF9FWEVfT1BUUyAiJHtGTEVYX1RBUkdFVF9BUkdfQ09NUElMRV9GTEFHU30iKQorICAgICAgICBzZXBhcmF0ZV9hcmd1bWVudHMoX2ZsZXhfRVhFX09QVFMpCiAgICAgICBlbmRpZigpCiAKLSAgICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtGTEVYX1RBUkdFVF9vdXRwdXRzfQotICAgICAgICBDT01NQU5EICR7RkxFWF9FWEVDVVRBQkxFfSAke0ZMRVhfRVhFQ1VUQUJMRV9vcHRzfSAtbyR7T3V0cHV0fSAke0lucHV0fQorICAgICAgc2V0KF9mbGV4X09VVFBVVF9IRUFERVIgIiIpCisgICAgICBpZihOT1QgIiR7RkxFWF9UQVJHRVRfQVJHX0RFRklORVNfRklMRX0iIFNUUkVRVUFMICIiKQorICAgICAgICBzZXQoX2ZsZXhfT1VUUFVUX0hFQURFUiAiJHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSIpCisgICAgICAgIGlmKElTX0FCU09MVVRFICIke19mbGV4X09VVFBVVF9IRUFERVJ9IikKKyAgICAgICAgICBzZXQoX2ZsZXhfT1VUUFVUX0hFQURFUl9BQlMgIiR7X2ZsZXhfT1VUUFVUX0hFQURFUn0iKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoX2ZsZXhfT1VUUFVUX0hFQURFUl9BQlMgIiR7X2ZsZXhfV09SS0lOR19ESVJ9LyR7X2ZsZXhfT1VUUFVUX0hFQURFUn0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGxpc3QoQVBQRU5EIF9mbGV4X1RBUkdFVF9PVVRQVVRTICIke19mbGV4X09VVFBVVF9IRUFERVJfQUJTfSIpCisgICAgICAgIGxpc3QoQVBQRU5EIF9mbGV4X0VYRV9PUFRTIC0taGVhZGVyLWZpbGU9JHtfZmxleF9PVVRQVVRfSEVBREVSX0FCU30pCisgICAgICBlbmRpZigpCisKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2ZsZXhfRVhFX05BTUVfV0UgIiR7RkxFWF9FWEVDVVRBQkxFfSIgTkFNRV9XRSkKKyAgICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtfZmxleF9UQVJHRVRfT1VUUFVUU30KKyAgICAgICAgQ09NTUFORCAke0ZMRVhfRVhFQ1VUQUJMRX0gJHtfZmxleF9FWEVfT1BUU30gLW8ke19mbGV4X09VVFBVVH0gJHtfZmxleF9JTlBVVH0KICAgICAgICAgVkVSQkFUSU0KLSAgICAgICAgREVQRU5EUyAke0lucHV0fQotICAgICAgICBDT01NRU5UICJbRkxFWF1bJHtOYW1lfV0gQnVpbGRpbmcgc2Nhbm5lciB3aXRoIGZsZXggJHtGTEVYX1ZFUlNJT059IgotICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCisgICAgICAgIERFUEVORFMgJHtfZmxleF9JTlBVVH0KKyAgICAgICAgQ09NTUVOVCAiW0ZMRVhdWyR7TmFtZX1dIEJ1aWxkaW5nIHNjYW5uZXIgd2l0aCAke19mbGV4X0VYRV9OQU1FX1dFfSAke0ZMRVhfVkVSU0lPTn0iCisgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7X2ZsZXhfV09SS0lOR19ESVJ9KQogCiAgICAgICBzZXQoRkxFWF8ke05hbWV9X0RFRklORUQgVFJVRSkKLSAgICAgIHNldChGTEVYXyR7TmFtZX1fT1VUUFVUUyAke091dHB1dH0pCi0gICAgICBzZXQoRkxFWF8ke05hbWV9X0lOUFVUICR7SW5wdXR9KQotICAgICAgc2V0KEZMRVhfJHtOYW1lfV9DT01QSUxFX0ZMQUdTICR7RkxFWF9FWEVDVVRBQkxFX29wdHN9KQotICAgICAgaWYoIiR7RkxFWF9UQVJHRVRfQVJHX0RFRklORVNfRklMRX0iIFNUUkVRVUFMICIiKQotICAgICAgICBzZXQoRkxFWF8ke05hbWV9X09VVFBVVF9IRUFERVIgIiIpCi0gICAgICBlbHNlKCkKLSAgICAgICAgc2V0KEZMRVhfJHtOYW1lfV9PVVRQVVRfSEVBREVSICR7RkxFWF9UQVJHRVRfQVJHX0RFRklORVNfRklMRX0pCi0gICAgICBlbmRpZigpCisgICAgICBzZXQoRkxFWF8ke05hbWV9X09VVFBVVFMgJHtfZmxleF9UQVJHRVRfT1VUUFVUU30pCisgICAgICBzZXQoRkxFWF8ke05hbWV9X0lOUFVUICR7X2ZsZXhfSU5QVVR9KQorICAgICAgc2V0KEZMRVhfJHtOYW1lfV9DT01QSUxFX0ZMQUdTICR7X2ZsZXhfRVhFX09QVFN9KQorICAgICAgc2V0KEZMRVhfJHtOYW1lfV9PVVRQVVRfSEVBREVSICR7X2ZsZXhfT1VUUFVUX0hFQURFUn0pCisKKyAgICAgIHVuc2V0KF9mbGV4X0VYRV9OQU1FX1dFKQorICAgICAgdW5zZXQoX2ZsZXhfRVhFX09QVFMpCisgICAgICB1bnNldChfZmxleF9JTlBVVCkKKyAgICAgIHVuc2V0KF9mbGV4X09VVFBVVCkKKyAgICAgIHVuc2V0KF9mbGV4X09VVFBVVF9IRUFERVIpCisgICAgICB1bnNldChfZmxleF9PVVRQVVRfSEVBREVSX0FCUykKKyAgICAgIHVuc2V0KF9mbGV4X1RBUkdFVF9PVVRQVVRTKQorICAgICAgdW5zZXQoX2ZsZXhfV09SS0lOR19ESVIpCisKICAgICBlbmRpZigpCiAgIGVuZG1hY3JvKCkKICAgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kR0xFVy5jbWFrZSBiL01vZHVsZXMvRmluZEdMRVcuY21ha2UKaW5kZXggYmQ2OTgxOS4uMjdmZmExMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kR0xFVy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRHTEVXLmNtYWtlCkBAIC0xMCw3ICsxMCw3IEBACiBJbnB1dCBWYXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXgogCi1UaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBtYXkgYmUgc2V0IHRvIGluZmx1ZW5jZSB0aGlzIG1vZHVsZeKAmXMgYmVoYXZpb3I6CitUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBtYXkgYmUgc2V0IHRvIGluZmx1ZW5jZSB0aGlzIG1vZHVsZSdzIGJlaGF2aW9yOgogCiBgYEdMRVdfVVNFX1NUQVRJQ19MSUJTYGAKICAgdG8gZmluZCBhbmQgY3JlYXRlIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldCBmb3Igc3RhdGljIGxpbmthZ2UuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRHVEsyLmNtYWtlIGIvTW9kdWxlcy9GaW5kR1RLMi5jbWFrZQppbmRleCA4MzA5MWYzLi41NjU3NjNkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRHVEsyLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEdUSzIuY21ha2UKQEAgLTUsOTYgKzUsODMgQEAKIEZpbmRHVEsyCiAtLS0tLS0tLQogCi1GaW5kIHRoZSBHVEsyIHdpZGdldCBsaWJyYXJpZXMgYW5kIHNldmVyYWwgb2YgaXRzCi1vdGhlciBvcHRpb25hbCBjb21wb25lbnRzIGxpa2UgYGBndGttbWBgLCBgYGdsYWRlYGAsIGFuZCBgYGdsYWRlbW1gYC4KLQotTk9URTogSWYgeW91IGludGVuZCB0byB1c2UgdmVyc2lvbiBjaGVja2luZywgQ01ha2UgMi42LjIgb3IgbGF0ZXIgaXMKLQotOjoKLQotICAgICAgIHJlcXVpcmVkLgotCi0KK0ZpbmQgdGhlIEdUSzIgd2lkZ2V0IGxpYnJhcmllcyBhbmQgc2V2ZXJhbCBvZiBpdHMgb3RoZXIgb3B0aW9uYWwgY29tcG9uZW50cworbGlrZSBgYGd0a21tYGAsIGBgZ2xhZGVgYCwgYW5kIGBgZ2xhZGVtbWBgLgogCiBTcGVjaWZ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcyB5b3UgY2FsbCB0aGlzIGZpbmQKIG1vZHVsZS4gIFNlZSBleGFtcGxlIGJlbG93LgogCi06OgorKiBgYGd0a2BgCisqIGBgZ3RrbW1gYAorKiBgYGdsYWRlYGAKKyogYGBnbGFkZW1tYGAKIAotICAgZ3RrCi0gICBndGttbQotICAgZ2xhZGUKLSAgIGdsYWRlbW0KLQotCitSZXN1bHQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCiAKIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdpbGwgYmUgZGVmaW5lZCBmb3IgeW91ciB1c2UKIAotOjoKK2BgR1RLMl9GT1VORGBgCisgIFdlcmUgYWxsIG9mIHlvdXIgc3BlY2lmaWVkIGNvbXBvbmVudHMgZm91bmQ/CitgYEdUSzJfSU5DTFVERV9ESVJTYGAKKyAgQWxsIGluY2x1ZGUgZGlyZWN0b3JpZXMKK2BgR1RLMl9MSUJSQVJJRVNgYAorICBBbGwgbGlicmFyaWVzCitgYEdUSzJfVEFSR0VUU2BgCisgIEFsbCBpbXBvcnRlZCB0YXJnZXRzCitgYEdUSzJfREVGSU5JVElPTlNgYAorICBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzCitgYEdUSzJfVkVSU0lPTmBgCisgIFRoZSB2ZXJzaW9uIG9mIEdUSzIgZm91bmQgKHgueS56KQorYGBHVEsyX01BSk9SX1ZFUlNJT05gYAorICBUaGUgbWFqb3IgdmVyc2lvbiBvZiBHVEsyCitgYEdUSzJfTUlOT1JfVkVSU0lPTmBgCisgIFRoZSBtaW5vciB2ZXJzaW9uIG9mIEdUSzIKK2BgR1RLMl9QQVRDSF9WRVJTSU9OYGAKKyAgVGhlIHBhdGNoIHZlcnNpb24gb2YgR1RLMgogCi0gICBHVEsyX0ZPVU5EIC0gV2VyZSBhbGwgb2YgeW91ciBzcGVjaWZpZWQgY29tcG9uZW50cyBmb3VuZD8KLSAgIEdUSzJfSU5DTFVERV9ESVJTIC0gQWxsIGluY2x1ZGUgZGlyZWN0b3JpZXMKLSAgIEdUSzJfTElCUkFSSUVTIC0gQWxsIGxpYnJhcmllcwotICAgR1RLMl9UQVJHRVRTIC0gQWxsIGltcG9ydGVkIHRhcmdldHMKLSAgIEdUSzJfREVGSU5JVElPTlMgLSBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzCi0KLQotCi06OgotCi0gICBHVEsyX1ZFUlNJT04gLSBUaGUgdmVyc2lvbiBvZiBHVEsyIGZvdW5kICh4LnkueikKLSAgIEdUSzJfTUFKT1JfVkVSU0lPTiAtIFRoZSBtYWpvciB2ZXJzaW9uIG9mIEdUSzIKLSAgIEdUSzJfTUlOT1JfVkVSU0lPTiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIEdUSzIKLSAgIEdUSzJfUEFUQ0hfVkVSU0lPTiAtIFRoZSBwYXRjaCB2ZXJzaW9uIG9mIEdUSzIKLQotCitJbnB1dCBWYXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXgogCiBPcHRpb25hbCB2YXJpYWJsZXMgeW91IGNhbiBkZWZpbmUgcHJpb3IgdG8gY2FsbGluZyB0aGlzIG1vZHVsZToKIAotOjoKK2BgR1RLMl9ERUJVR2BgCisgIEVuYWJsZXMgdmVyYm9zZSBkZWJ1Z2dpbmcgb2YgdGhlIG1vZHVsZQorYGBHVEsyX0FERElUSU9OQUxfU1VGRklYRVNgYAorICBBbGxvd3MgZGVmaW5pbmcgYWRkaXRpb25hbCBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMKIAotICAgR1RLMl9ERUJVRyAtIEVuYWJsZXMgdmVyYm9zZSBkZWJ1Z2dpbmcgb2YgdGhlIG1vZHVsZQotICAgR1RLMl9BRERJVElPTkFMX1NVRkZJWEVTIC0gQWxsb3dzIGRlZmluaW5nIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaCBmb3IgaW5jbHVkZSBmaWxlcworRXhhbXBsZSBVc2FnZQorXl5eXl5eXl5eXl5eXgogCitDYWxsIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIG9uY2UuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHRvIHBpY2sgZnJvbToKIAorUmVxdWlyZSBHVEsgMi42IG9yIGxhdGVyOgogCi09PT09PT09PT09PT09PT09PSBFeGFtcGxlIFVzYWdlOgorLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKLTo6CisgIGZpbmRfcGFja2FnZShHVEsyIDIuNiBSRVFVSVJFRCBndGspCiAKLSAgIENhbGwgZmluZF9wYWNrYWdlKCkgb25jZSwgaGVyZSBhcmUgc29tZSBleGFtcGxlcyB0byBwaWNrIGZyb206CitSZXF1aXJlIEdUSyAyLjEwIG9yIGxhdGVyIGFuZCBHbGFkZToKIAorLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKKyAgZmluZF9wYWNrYWdlKEdUSzIgMi4xMCBSRVFVSVJFRCBndGsgZ2xhZGUpCiAKLTo6CitTZWFyY2ggZm9yIEdUSy9HVEtNTSAyLjggb3IgbGF0ZXI6CiAKLSAgIFJlcXVpcmUgR1RLIDIuNiBvciBsYXRlcgotICAgICAgIGZpbmRfcGFja2FnZShHVEsyIDIuNiBSRVFVSVJFRCBndGspCisuLiBjb2RlLWJsb2NrOjogY21ha2UKIAorICBmaW5kX3BhY2thZ2UoR1RLMiAyLjggQ09NUE9ORU5UUyBndGsgZ3RrbW0pCiAKK1VzZSB0aGUgcmVzdWx0czoKIAotOjoKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi0gICBSZXF1aXJlIEdUSyAyLjEwIG9yIGxhdGVyIGFuZCBHbGFkZQotICAgICAgIGZpbmRfcGFja2FnZShHVEsyIDIuMTAgUkVRVUlSRUQgZ3RrIGdsYWRlKQotCi0KLQotOjoKLQotICAgU2VhcmNoIGZvciBHVEsvR1RLTU0gMi44IG9yIGxhdGVyCi0gICAgICAgZmluZF9wYWNrYWdlKEdUSzIgMi44IENPTVBPTkVOVFMgZ3RrIGd0a21tKQotCi0KLQotOjoKLQotICAgaWYoR1RLMl9GT1VORCkKLSAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtHVEsyX0lOQ0xVREVfRElSU30pCi0gICAgICBhZGRfZXhlY3V0YWJsZShteWd1aSBteWd1aS5jYykKLSAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWd1aSAke0dUSzJfTElCUkFSSUVTfSkKLSAgIGVuZGlmKCkKKyAgaWYoR1RLMl9GT1VORCkKKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7R1RLMl9JTkNMVURFX0RJUlN9KQorICAgIGFkZF9leGVjdXRhYmxlKG15Z3VpIG15Z3VpLmNjKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWd1aSAke0dUSzJfTElCUkFSSUVTfSkKKyAgZW5kaWYoKQogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogIyBWZXJzaW9uIDEuNiAoQ01ha2UgMy4wKQpAQCAtODgxLDYgKzg2OCw3IEBACiAKICAgICBzZXQoR1RLMl8ke19DT01QT05FTlRfVVBQRVJ9X0ZJTkRfUVVJRVRMWSAke0dUSzJfRklORF9RVUlFVExZfSkKIAorICAgIHNldChGUEhTQV9OQU1FX01JU01BVENIRUQgMSkKICAgICBpZihfR1RLMl9jb21wb25lbnQgU1RSRVFVQUwgImd0ayIpCiAgICAgICAgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhHVEsyXyR7X0NPTVBPTkVOVF9VUFBFUn0gIlNvbWUgb3IgYWxsIG9mIHRoZSBndGsgbGlicmFyaWVzIHdlcmUgbm90IGZvdW5kLiIKICAgICAgICAgICAgIEdUSzJfR1RLX0xJQlJBUlkKQEAgLTkyMyw2ICs5MTEsNyBAQAogICAgICAgICAgICAgR1RLMl9HTEFERU1NQ09ORklHX0lOQ0xVREVfRElSCiAgICAgICAgICkKICAgICBlbmRpZigpCisgICAgdW5zZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEKQogCiAgICAgaWYoTk9UIEdUSzJfJHtfQ09NUE9ORU5UX1VQUEVSfV9GT1VORCkKICAgICAgICAgc2V0KF9HVEsyX2RpZF93ZV9maW5kX2V2ZXJ5dGhpbmcgZmFsc2UpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRHVGVzdC5jbWFrZSBiL01vZHVsZXMvRmluZEdUZXN0LmNtYWtlCmluZGV4IGUwMTVhOTguLjUzY2FiMWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEdUZXN0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEdUZXN0LmNtYWtlCkBAIC0yNDAsNCArMjQwLDE1IEBACiAgICAgICAgIF9fZ3Rlc3RfaW1wb3J0X2xpYnJhcnkoR1Rlc3Q6Ok1haW4gR1RFU1RfTUFJTl9MSUJSQVJZICJSRUxFQVNFIikKICAgICAgICAgX19ndGVzdF9pbXBvcnRfbGlicmFyeShHVGVzdDo6TWFpbiBHVEVTVF9NQUlOX0xJQlJBUlkgIkRFQlVHIikKICAgICBlbmRpZigpCisKKyAgICAjIEFkZCB0YXJnZXRzIG1hcHBpbmcgdGhlIHNhbWUgbGlicmFyeSBuYW1lcyBhcyBkZWZpbmVkIGluCisgICAgIyBHVGVzdCdzIENNYWtlIHBhY2thZ2UgY29uZmlnLgorICAgIGlmKE5PVCBUQVJHRVQgR1Rlc3Q6Omd0ZXN0KQorICAgICAgICBhZGRfbGlicmFyeShHVGVzdDo6Z3Rlc3QgSU5URVJGQUNFIElNUE9SVEVEKQorICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoR1Rlc3Q6Omd0ZXN0IElOVEVSRkFDRSBHVGVzdDo6R1Rlc3QpCisgICAgZW5kaWYoKQorICAgIGlmKE5PVCBUQVJHRVQgR1Rlc3Q6Omd0ZXN0X21haW4pCisgICAgICAgIGFkZF9saWJyYXJ5KEdUZXN0OjpndGVzdF9tYWluIElOVEVSRkFDRSBJTVBPUlRFRCkKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdUZXN0OjpndGVzdF9tYWluIElOVEVSRkFDRSBHVGVzdDo6TWFpbikKKyAgICBlbmRpZigpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRIREY1LmNtYWtlIGIvTW9kdWxlcy9GaW5kSERGNS5jbWFrZQppbmRleCBiNDg4NDE4Li5jMTg4OGE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRIREY1LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEhERjUuY21ha2UKQEAgLTE5LDkgKzE5LDEyIEBACiBgYENPTVBPTkVOVFNgYCBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBmaW5kIG1vZHVsZSB3aWxsIGRlZmF1bHQgdG8gZmluZGluZwogb25seSB0aGUgYGBIREY1YGAgQyBsaWJyYXJ5LiAgSWYgb25lIG9yIG1vcmUgYGBDT01QT05FTlRTYGAgYXJlIHNwZWNpZmllZCwgdGhlCiBtb2R1bGUgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIGxhbmd1YWdlIGJpbmRpbmdzIGZvciB0aGUgc3BlY2lmaWVkCi1jb21wb25lbnRzLiAgVGhlIG9ubHkgdmFsaWQgY29tcG9uZW50cyBhcmUgYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgLCBgYEhMYGAsCi1hbmQgYGBGb3J0cmFuX0hMYGAuICBJZiB0aGUgYGBDT01QT05FTlRTYGAgYXJndW1lbnQgaXMgbm90IGdpdmVuLCB0aGUgbW9kdWxlIHdpbGwKK2NvbXBvbmVudHMuICBUaGUgdmFsaWQgY29tcG9uZW50cyBhcmUgYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgLCBgYEhMYGAuCitgYEhMYGAgcmVmZXJzIHRvIHRoZSAiaGlnaC1sZXZlbCIgSERGNSBmdW5jdGlvbnMgZm9yIEMgYW5kIEZvcnRyYW4uCitJZiB0aGUgYGBDT01QT05FTlRTYGAgYXJndW1lbnQgaXMgbm90IGdpdmVuLCB0aGUgbW9kdWxlIHdpbGwKIGF0dGVtcHQgdG8gZmluZCBvbmx5IHRoZSBDIGJpbmRpbmdzLgorRm9yIGV4YW1wbGUsIHRvIHVzZSBGb3J0cmFuIEhERjUgYW5kIEhERjUtSEwgZnVuY3Rpb25zLCBkbzoKK2BgZmluZF9wYWNrYWdlKEhERjUgQ09NUE9ORU5UUyBGb3J0cmFuIEhMKWBgLgogCiBUaGlzIG1vZHVsZSB3aWxsIHJlYWQgdGhlIHZhcmlhYmxlCiBgYEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVNgYCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gcHJlZmVyIGEKQEAgLTI5LDExICszMiw2IEBACiBUbyB1c2UgdGhpcyBmZWF0dXJlLCBtYWtlIHN1cmUgdGhhdCB0aGUgYGBIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTYGAKIHZhcmlhYmxlIGlzIHNldCBiZWZvcmUgdGhlIGNhbGwgdG8gZmluZF9wYWNrYWdlLgogCi1UbyBwcm92aWRlIHRoZSBtb2R1bGUgd2l0aCBhIGhpbnQgYWJvdXQgd2hlcmUgdG8gZmluZCB5b3VyIGBgSERGNWBgCi1pbnN0YWxsYXRpb24sIHlvdSBjYW4gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYEhERjVfUk9PVGBgLiAgVGhlCi1GaW5kIG1vZHVsZSB3aWxsIHRoZW4gbG9vayBpbiB0aGlzIHBhdGggd2hlbiBzZWFyY2hpbmcgZm9yIGBgSERGNWBgCi1leGVjdXRhYmxlcywgcGF0aHMsIGFuZCBsaWJyYXJpZXMuCi0KIEJvdGggdGhlIHNlcmlhbCBhbmQgcGFyYWxsZWwgYGBIREY1YGAgd3JhcHBlcnMgYXJlIGNvbnNpZGVyZWQgYW5kIHRoZSBmaXJzdAogZGlyZWN0b3J5IHRvIGNvbnRhaW4gZWl0aGVyIG9uZSB3aWxsIGJlIHVzZWQuICBJbiB0aGUgZXZlbnQgdGhhdCBib3RoIGFwcGVhcgogaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoZSBzZXJpYWwgdmVyc2lvbiBpcyBwcmVmZXJlbnRpYWxseSBzZWxlY3RlZC4gVGhpcwpAQCAtMTE1LDEwICsxMTMsMTAgQEAKIEhpbnRzCiBeXl5eXgogCi1UaGUgZm9sbG93aW5nIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gZ3VpZGUgdGhlIHNlYXJjaCBmb3IgSERGNSBsaWJyYXJpZXMgYW5kIGluY2x1ZGVzOgorVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgY2FuIGJlIHNldCB0byBndWlkZSB0aGUgc2VhcmNoIGZvciBIREY1IGxpYnJhcmllcyBhbmQgaW5jbHVkZXM6CiAKLWBgSERGNV9ST09UYGAKLSAgU3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgSERGNSBpbnN0YWxsYXRpb24gdG8gdXNlLgorYGBIREY1X1BSRUZFUl9QQVJBTExFTGBgCisgIHNldCBgYHRydWVgYCB0byBwcmVmZXIgcGFyYWxsZWwgSERGNSAoYnkgZGVmYXVsdCwgc2VyaWFsIGlzIHByZWZlcnJlZCkKIAogYGBIREY1X0ZJTkRfREVCVUdgYAogICBTZXQgYGB0cnVlYGAgdG8gZ2V0IGV4dHJhIGRlYnVnZ2luZyBvdXRwdXQuCkBAIC0zNDMsMzUgKzM0MSw0NiBAQAogICAgIGVsc2VpZigiJHtsYW5ndWFnZX0iIFNUUkVRVUFMICJGb3J0cmFuIikKICAgICAgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuZjkwKQogICAgIGVuZGlmKCkKKyAgICAjIFZlcmlmeSB0aGF0IHRoZSBjb21waWxlciB3cmFwcGVyIGNhbiBhY3R1YWxseSBjb21waWxlOiBzb21ldGltZXMgdGhlIGNvbXBpbGVyCisgICAgIyB3cmFwcGVyIGV4aXN0cywgYnV0IG5vdCB0aGUgY29tcGlsZXIuICBFLmcuIE1pbmljb25kYSAvIEFuYWNvbmRhIFB5dGhvbgogICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgJHtIREY1XyR7bGFuZ3VhZ2V9X0NPTVBJTEVSX0VYRUNVVEFCTEV9IC1zaG93ICR7bGliX3R5cGVfYXJnc30gJHt0ZXN0X2ZpbGV9Ci0gICAgICBPVVRQVVRfVkFSSUFCTEUgJHtvdXRwdXR9Ci0gICAgICBFUlJPUl9WQVJJQUJMRSAke291dHB1dH0KKyAgICAgIENPTU1BTkQgJHtIREY1XyR7bGFuZ3VhZ2V9X0NPTVBJTEVSX0VYRUNVVEFCTEV9ICR7dGVzdF9maWxlfQogICAgICAgUkVTVUxUX1ZBUklBQkxFICR7cmV0dXJuX3ZhbHVlfQogICAgICAgKQogICAgIGlmKE5PVCAkeyR7cmV0dXJuX3ZhbHVlfX0gRVFVQUwgMCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMKLSAgICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBIREY1ICR7bGFuZ3VhZ2V9IGZsYWdzIGZyb20gSERGNSB3cmFwcGVyLiIpCi0gICAgZW5kaWYoKQotICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgJHtIREY1XyR7bGFuZ3VhZ2V9X0NPTVBJTEVSX0VYRUNVVEFCTEV9IC1zaG93Y29uZmlnCi0gICAgICBPVVRQVVRfVkFSSUFCTEUgY29uZmlnX291dHB1dAotICAgICAgRVJST1JfVkFSSUFCTEUgY29uZmlnX291dHB1dAotICAgICAgUkVTVUxUX1ZBUklBQkxFIGNvbmZpZ19yZXR1cm4KLSAgICAgICkKLSAgICBpZihOT1QgJHtyZXR1cm5fdmFsdWV9IEVRVUFMIDApCi0gICAgICAgIG1lc3NhZ2UoIFNUQVRVUwotICAgICAgICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIEhERjUgJHtsYW5ndWFnZX0gdmVyc2lvbiBmcm9tIEhERjUgd3JhcHBlci4iKQotICAgIGVuZGlmKCkKLSAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIkhERjUgVmVyc2lvbjogKFthLXpBLVowLTlcXC5cXC1dKikiIHZlcnNpb25fbWF0Y2ggIiR7Y29uZmlnX291dHB1dH0iKQotICAgIGlmKHZlcnNpb25fbWF0Y2gpCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICJIREY1IFZlcnNpb246ICIgIiIgJHt2ZXJzaW9ufSAiJHt2ZXJzaW9uX21hdGNofSIpCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICItcGF0Y2giICIuIiAke3ZlcnNpb259ICIkeyR7dmVyc2lvbn19IikKLSAgICBlbmRpZigpCi0gICAgaWYoY29uZmlnX291dHB1dCBNQVRDSEVTICJQYXJhbGxlbCBIREY1OiB5ZXMiKQotICAgICAgc2V0KCR7aXNfcGFyYWxsZWx9IFRSVUUpCisgICAgICBtZXNzYWdlKFNUQVRVUworICAgICAgICAiSERGNSAke2xhbmd1YWdlfSBjb21waWxlciB3cmFwcGVyIGlzIHVuYWJsZSB0byBjb21waWxlIGEgbWluaW1hbCBIREY1IHByb2dyYW0uIikKICAgICBlbHNlKCkKLSAgICAgIHNldCgke2lzX3BhcmFsbGVsfSBGQUxTRSkKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgQ09NTUFORCAke0hERjVfJHtsYW5ndWFnZX1fQ09NUElMRVJfRVhFQ1VUQUJMRX0gLXNob3cgJHtsaWJfdHlwZV9hcmdzfSAke3Rlc3RfZmlsZX0KKyAgICAgICAgT1VUUFVUX1ZBUklBQkxFICR7b3V0cHV0fQorICAgICAgICBFUlJPUl9WQVJJQUJMRSAke291dHB1dH0KKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFICR7cmV0dXJuX3ZhbHVlfQorICAgICAgICApCisgICAgICBpZihOT1QgJHske3JldHVybl92YWx1ZX19IEVRVUFMIDApCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMKKyAgICAgICAgICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIEhERjUgJHtsYW5ndWFnZX0gZmxhZ3MgZnJvbSBIREY1IHdyYXBwZXIuIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgQ09NTUFORCAke0hERjVfJHtsYW5ndWFnZX1fQ09NUElMRVJfRVhFQ1VUQUJMRX0gLXNob3djb25maWcKKyAgICAgICAgT1VUUFVUX1ZBUklBQkxFIGNvbmZpZ19vdXRwdXQKKyAgICAgICAgRVJST1JfVkFSSUFCTEUgY29uZmlnX291dHB1dAorICAgICAgICBSRVNVTFRfVkFSSUFCTEUgY29uZmlnX3JldHVybgorICAgICAgICApCisgICAgICBpZihOT1QgJHtyZXR1cm5fdmFsdWV9IEVRVUFMIDApCisgICAgICAgICAgbWVzc2FnZSggU1RBVFVTCisgICAgICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBIREY1ICR7bGFuZ3VhZ2V9IHZlcnNpb24gZnJvbSBIREY1IHdyYXBwZXIuIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiSERGNSBWZXJzaW9uOiAoW2EtekEtWjAtOVxcLlxcLV0qKSIgdmVyc2lvbl9tYXRjaCAiJHtjb25maWdfb3V0cHV0fSIpCisgICAgICBpZih2ZXJzaW9uX21hdGNoKQorICAgICAgICAgIHN0cmluZyhSRVBMQUNFICJIREY1IFZlcnNpb246ICIgIiIgJHt2ZXJzaW9ufSAiJHt2ZXJzaW9uX21hdGNofSIpCisgICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIi1wYXRjaCIgIi4iICR7dmVyc2lvbn0gIiR7JHt2ZXJzaW9ufX0iKQorICAgICAgZW5kaWYoKQorICAgICAgaWYoY29uZmlnX291dHB1dCBNQVRDSEVTICJQYXJhbGxlbCBIREY1OiB5ZXMiKQorICAgICAgICBzZXQoJHtpc19wYXJhbGxlbH0gVFJVRSkKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoJHtpc19wYXJhbGxlbH0gRkFMU0UpCisgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogZW5kbWFjcm8oKQogCkBAIC03NjksNiArNzc4LDE3IEBACiAgICAgc2V0KEhERjVfRm9ydHJhbl9MSUJSQVJZX05BTUVTICAgIGhkZjVfZm9ydHJhbiAgICR7SERGNV9DX0xJQlJBUllfTkFNRVN9KQogICAgIHNldChIREY1X0ZvcnRyYW5fSExfTElCUkFSWV9OQU1FUyBoZGY1aGxfZm9ydHJhbiAke0hERjVfQ19ITF9MSUJSQVJZX05BTUVTfSAke0hERjVfRm9ydHJhbl9MSUJSQVJZX05BTUVTfSkKIAorICAgICMgc3VmZml4ZXMgYXMgc2VlbiBvbiBMaW51eCwgTVNZUzIsIC4uLgorICAgIHNldChfbGliX3N1ZmZpeGVzIGhkZjUpCisgICAgaWYoTk9UIEhERjVfUFJFRkVSX1BBUkFMTEVMKQorICAgICAgbGlzdChBUFBFTkQgX2xpYl9zdWZmaXhlcyBoZGY1L3NlcmlhbCkKKyAgICBlbmRpZigpCisgICAgaWYoSERGNV9VU0VfU1RBVElDX0xJQlJBUklFUykKKyAgICAgIHNldChfaW5jX3N1ZmZpeGVzIGluY2x1ZGUvc3RhdGljKQorICAgIGVsc2UoKQorICAgICAgc2V0KF9pbmNfc3VmZml4ZXMgaW5jbHVkZS9zaGFyZWQpCisgICAgZW5kaWYoKQorCiAgICAgZm9yZWFjaChfX2xhbmcgSU4gTElTVFMgSERGNV9MQU5HVUFHRV9CSU5ESU5HUykKICAgICAgICAgIyBmaW5kIHRoZSBIREY1IGluY2x1ZGUgZGlyZWN0b3JpZXMKICAgICAgICAgaWYoIiR7X19sYW5nfSIgU1RSRVFVQUwgIkZvcnRyYW4iKQpAQCAtNzgyLDcgKzgwMiw3IEBACiAgICAgICAgIGZpbmRfcGF0aChIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUiAke0hERjVfSU5DTFVERV9GSUxFTkFNRX0KICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfQogICAgICAgICAgICAgUEFUSFMgJEVOVntIT01FfS8ubG9jYWwvaW5jbHVkZQotICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBpbmNsdWRlIEluY2x1ZGUKKyAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgaW5jbHVkZSBJbmNsdWRlICR7X2luY19zdWZmaXhlc30gJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICAgKQogICAgICAgICBtYXJrX2FzX2FkdmFuY2VkKEhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSKQpAQCAtODExLDE0ICs4MzEsMTUgQEAKICAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7TElCfV9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgICAgTkFNRVMgJHtUSElTX0xJQlJBUllfU0VBUkNIX0RFQlVHfQotICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIKKyAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliICR7X2xpYl9zdWZmaXhlc30KICAgICAgICAgICAgICAgICAke19IREY1X1NFQVJDSF9PUFRTfQogICAgICAgICAgICAgKQotICAgICAgICAgICAgZmluZF9saWJyYXJ5KCBIREY1XyR7TElCfV9MSUJSQVJZX1JFTEVBU0UKKyAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7TElCfV9MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICAgICBOQU1FUyAke1RISVNfTElCUkFSWV9TRUFSQ0hfUkVMRUFTRX0KLSAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliCisgICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYiAke19saWJfc3VmZml4ZXN9CiAgICAgICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICAgICAgICkKKwogICAgICAgICAgICAgc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoIEhERjVfJHtMSUJ9ICkKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfX2xhbmd9X0xJQlJBUklFUyAke0hERjVfJHtMSUJ9X0xJQlJBUll9KQogICAgICAgICBlbmRmb3JlYWNoKCkKQEAgLTg0OCwxNCArODY5LDE1IEBACiAgICAgICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7TElCfV9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7VEhJU19MSUJSQVJZX1NFQVJDSF9ERUJVR30KLSAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYgorICAgICAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliICR7X2xpYl9zdWZmaXhlc30KICAgICAgICAgICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgZmluZF9saWJyYXJ5KCBIREY1XyR7TElCfV9MSUJSQVJZX1JFTEVBU0UKKyAgICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke0xJQn1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7VEhJU19MSUJSQVJZX1NFQVJDSF9SRUxFQVNFfQotICAgICAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliCisgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIgJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgICAgICAgICAke19IREY1X1NFQVJDSF9PUFRTfQogICAgICAgICAgICAgICAgICkKKwogICAgICAgICAgICAgICAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKCBIREY1XyR7TElCfSApCiAgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTICR7SERGNV8ke0xJQn1fTElCUkFSWX0pCiAgICAgICAgICAgICBlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZExBUEFDSy5jbWFrZSBiL01vZHVsZXMvRmluZExBUEFDSy5jbWFrZQppbmRleCAzY2IzNjUzLi5jOTYyOTc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMQVBBQ0suY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTEFQQUNLLmNtYWtlCkBAIC03LDEwICs3LDEwIEBACiAKIEZpbmQgTGluZWFyIEFsZ2VicmEgUEFDS2FnZSAoTEFQQUNLKSBsaWJyYXJ5CiAKLVRoaXMgbW9kdWxlIGZpbmRzIGFuIGluc3RhbGxlZCBmb3J0cmFuIGxpYnJhcnkgdGhhdCBpbXBsZW1lbnRzIHRoZQorVGhpcyBtb2R1bGUgZmluZHMgYW4gaW5zdGFsbGVkIEZvcnRyYW4gbGlicmFyeSB0aGF0IGltcGxlbWVudHMgdGhlCiBMQVBBQ0sgbGluZWFyLWFsZ2VicmEgaW50ZXJmYWNlIChzZWUgaHR0cDovL3d3dy5uZXRsaWIub3JnL2xhcGFjay8pLgogCi1UaGUgYXBwcm9hY2ggZm9sbG93cyB0aGF0IHRha2VuIGZvciB0aGUgYXV0b2NvbmYgbWFjcm8gZmlsZSwKK1RoZSBhcHByb2FjaCBmb2xsb3dzIHRoYXQgdGFrZW4gZm9yIHRoZSBgYGF1dG9jb25mYGAgbWFjcm8gZmlsZSwKIGBgYWN4X2xhcGFjay5tNGBgIChkaXN0cmlidXRlZCBhdAogaHR0cDovL2FjLWFyY2hpdmUuc291cmNlZm9yZ2UubmV0L2FjLWFyY2hpdmUvYWN4X2xhcGFjay5odG1sKS4KIApAQCAtMjYsMjEgKzI2LDIyIEBACiAgIElmIHNldCwgY2hlY2tzIG9ubHkgdGhlIHNwZWNpZmllZCB2ZW5kb3IsIGlmIG5vdCBzZXQgY2hlY2tzIGFsbCB0aGUKICAgcG9zc2liaWxpdGllcy4gIExpc3Qgb2YgdmVuZG9ycyB2YWxpZCBpbiB0aGlzIG1vZHVsZToKIAorICAqIGBgT3BlbkJMQVNgYAorICAqIGBgRkxBTUVgYAogICAqIGBgSW50ZWwxMF8zMmBgIChpbnRlbCBta2wgdjEwIDMyIGJpdCkKICAgKiBgYEludGVsMTBfNjRscGBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGxwNjQgbW9kZWwpCiAgICogYGBJbnRlbDEwXzY0bHBfc2VxYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgc2VxdWVudGlhbCBjb2RlLCBscDY0IG1vZGVsKQogICAqIGBgSW50ZWwxMF82NGlscGBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGlscDY0IG1vZGVsKQogICAqIGBgSW50ZWwxMF82NGlscF9zZXFgYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzZXF1ZW50aWFsIGNvZGUsIGlscDY0IG1vZGVsKQorICAqIGBgSW50ZWwxMF82NF9keW5gYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzaW5nbGUgZHluYW1pYyBsaWJyYXJ5KQogICAqIGBgSW50ZWxgYCAob2Jzb2xldGUgdmVyc2lvbnMgb2YgbWtsIDMyIGFuZCA2NCBiaXQpCi0gICogYGBPcGVuQkxBU2BgCi0gICogYGBGTEFNRWBgCiAgICogYGBBQ01MYGAKICAgKiBgYEFwcGxlYGAKICAgKiBgYE5BU2BgCiAgICogYGBHZW5lcmljYGAKIAogYGBCTEFfRjk1YGAKLSAgaWYgYGBPTmBgIHRyaWVzIHRvIGZpbmQgQkxBUzk1L0xBUEFDSzk1CisgIGlmIGBgT05gYCB0cmllcyB0byBmaW5kIHRoZSBCTEFTOTUvTEFQQUNLOTUgaW50ZXJmYWNlcwogCiBSZXN1bHQgVmFyaWFibGVzCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC01MCw3ICs1MSw3IEBACiBgYExBUEFDS19GT1VORGBgCiAgIGxpYnJhcnkgaW1wbGVtZW50aW5nIHRoZSBMQVBBQ0sgaW50ZXJmYWNlIGlzIGZvdW5kCiBgYExBUEFDS19MSU5LRVJfRkxBR1NgYAotICB1bmNhY2hlZCBsaXN0IG9mIHJlcXVpcmVkIGxpbmtlciBmbGFncyAoZXhjbHVkaW5nIC1sIGFuZCAtTCkuCisgIHVuY2FjaGVkIGxpc3Qgb2YgcmVxdWlyZWQgbGlua2VyIGZsYWdzIChleGNsdWRpbmcgYGAtbGBgIGFuZCBgYC1MYGApLgogYGBMQVBBQ0tfTElCUkFSSUVTYGAKICAgdW5jYWNoZWQgbGlzdCBvZiBsaWJyYXJpZXMgKHVzaW5nIGZ1bGwgcGF0aCBuYW1lKSB0byBsaW5rIGFnYWluc3QKICAgdG8gdXNlIExBUEFDSwpAQCAtNjIsNyArNjMsOCBAQAogCiAuLiBub3RlOjoKIAotICBDIG9yIENYWCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIEludGVsIE1LTAorICBDLCBDWFggb3IgRm9ydHJhbiBtdXN0IGJlIGVuYWJsZWQgdG8gZGV0ZWN0IGEgQkxBUy9MQVBBQ0sgbGlicmFyeS4KKyAgQyBvciBDWFggbXVzdCBiZSBlbmFibGVkIHRvIHVzZSBJbnRlbCBNYXRoIEtlcm5lbCBMaWJyYXJ5IChNS0wpLgogCiAgIEZvciBleGFtcGxlLCB0byB1c2UgSW50ZWwgTUtMIGxpYnJhcmllcyBhbmQvb3IgSW50ZWwgY29tcGlsZXI6CiAKQEAgLTcyLDEwICs3NCw4IEBACiAgICAgZmluZF9wYWNrYWdlKExBUEFDSykKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLXNldChfbGFwYWNrX09SSUdfQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKLQogIyBDaGVjayB0aGUgbGFuZ3VhZ2UgYmVpbmcgdXNlZAotaWYoIE5PVCAoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkgKQoraWYoTk9UIChDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKSkKICAgaWYoTEFQQUNLX0ZJTkRfUkVRVUlSRUQpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmluZExBUEFDSyByZXF1aXJlcyBGb3J0cmFuLCBDLCBvciBDKysgdG8gYmUgZW5hYmxlZC4iKQogICBlbHNlKCkKQEAgLTg0LDExICs4NCwxMSBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKLWlmIChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0ZvcnRyYW5GdW5jdGlvbkV4aXN0cy5jbWFrZSkKLWVsc2UgKCkKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0Z1bmN0aW9uRXhpc3RzLmNtYWtlKQotZW5kaWYgKCkKK2lmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKQorICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ2hlY2tGb3J0cmFuRnVuY3Rpb25FeGlzdHMuY21ha2UpCitlbHNlKCkKKyAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NoZWNrRnVuY3Rpb25FeGlzdHMuY21ha2UpCitlbmRpZigpCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ01ha2VQdXNoQ2hlY2tTdGF0ZS5jbWFrZSkKIAogY21ha2VfcHVzaF9jaGVja19zdGF0ZSgpCkBAIC05NywyOTAgKzk3LDM0NCBAQAogc2V0KExBUEFDS19GT1VORCBGQUxTRSkKIHNldChMQVBBQ0s5NV9GT1VORCBGQUxTRSkKIAotIyBUT0RPOiBtb3ZlIHRoaXMgc3R1ZmYgdG8gc2VwYXJhdGUgbW9kdWxlCi0KLW1hY3JvKENoZWNrX0xhcGFja19MaWJyYXJpZXMgTElCUkFSSUVTIF9wcmVmaXggX25hbWUgX2ZsYWdzIF9saXN0IF9ibGFzIF90aHJlYWRzKQotIyBUaGlzIG1hY3JvIGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgY29tYmluYXRpb24gb2YgZm9ydHJhbiBsaWJyYXJpZXMKLSMgZ2l2ZW4gYnkgX2xpc3QuICBJZiB0aGUgY29tYmluYXRpb24gaXMgZm91bmQsIHRoaXMgbWFjcm8gY2hlY2tzICh1c2luZyB0aGUKLSMgQ2hlY2tfRm9ydHJhbl9GdW5jdGlvbl9FeGlzdHMgbWFjcm8pIHdoZXRoZXIgY2FuIGxpbmsgYWdhaW5zdCB0aGF0IGxpYnJhcnkKLSMgY29tYmluYXRpb24gdXNpbmcgdGhlIG5hbWUgb2YgYSByb3V0aW5lIGdpdmVuIGJ5IF9uYW1lIHVzaW5nIHRoZSBsaW5rZXIKLSMgZmxhZ3MgZ2l2ZW4gYnkgX2ZsYWdzLiAgSWYgdGhlIGNvbWJpbmF0aW9uIG9mIGxpYnJhcmllcyBpcyBmb3VuZCBhbmQgcGFzc2VzCi0jIHRoZSBsaW5rIHRlc3QsIExJQlJBUklFUyBpcyBzZXQgdG8gdGhlIGxpc3Qgb2YgY29tcGxldGUgbGlicmFyeSBwYXRocyB0aGF0Ci0jIGhhdmUgYmVlbiBmb3VuZC4gIE90aGVyd2lzZSwgTElCUkFSSUVTIGlzIHNldCB0byBGQUxTRS4KLQotIyBOLkIuIF9wcmVmaXggaXMgdGhlIHByZWZpeCBhcHBsaWVkIHRvIHRoZSBuYW1lcyBvZiBhbGwgY2FjaGVkIHZhcmlhYmxlcyB0aGF0Ci0jIGFyZSBnZW5lcmF0ZWQgaW50ZXJuYWxseSBhbmQgbWFya2VkIGFkdmFuY2VkIGJ5IHRoaXMgbWFjcm8uCi0KLXNldChfbGlicmFyaWVzX3dvcmsgVFJVRSkKLXNldCgke0xJQlJBUklFU30pCi1zZXQoX2NvbWJpbmVkX25hbWUpCi1pZiAoTk9UIF9saWJkaXIpCi0gIGlmIChXSU4zMikKLSAgICBzZXQoX2xpYmRpciBFTlYgTElCKQotICBlbHNlaWYgKEFQUExFKQotICAgIHNldChfbGliZGlyIEVOViBEWUxEX0xJQlJBUllfUEFUSCkKLSAgZWxzZSAoKQotICAgIHNldChfbGliZGlyIEVOViBMRF9MSUJSQVJZX1BBVEgpCi0gIGVuZGlmICgpCi1lbmRpZiAoKQotCi1saXN0KEFQUEVORCBfbGliZGlyICIke0NNQUtFX0NfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30iKQotCi1mb3JlYWNoKF9saWJyYXJ5ICR7X2xpc3R9KQotICBzZXQoX2NvbWJpbmVkX25hbWUgJHtfY29tYmluZWRfbmFtZX1fJHtfbGlicmFyeX0pCi0KLSAgaWYoX2xpYnJhcmllc193b3JrKQotICAgIGlmIChCTEFfU1RBVElDKQotICAgICAgaWYgKFdJTjMyKQotICAgICAgICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5saWIgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQotICAgICAgZW5kaWYgKCkKLSAgICAgIGlmIChBUFBMRSkKLSAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAubGliICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKLSAgICAgIGVsc2UgKCkKLSAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAuYSAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCi0gICAgICBlbmRpZiAoKQotICAgIGVsc2UgKCkKLSAgICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQotICAgICAgICAjIGZvciB1YnVudHUncyBsaWJibGFzM2dmIGFuZCBsaWJsYXBhY2szZ2YgcGFja2FnZXMKLSAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30gLnNvLjNnZikKLSAgICAgIGVuZGlmICgpCi0gICAgZW5kaWYgKCkKLSAgICBmaW5kX2xpYnJhcnkoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZCi0gICAgICBOQU1FUyAke19saWJyYXJ5fQotICAgICAgUEFUSFMgJHtfbGliZGlyfQotICAgICAgKQotICAgIG1hcmtfYXNfYWR2YW5jZWQoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZKQotICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKLSAgICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKLSAgZW5kaWYoKQotZW5kZm9yZWFjaCgpCi0KLWlmKF9saWJyYXJpZXNfd29yaykKLSAgIyBUZXN0IHRoaXMgY29tYmluYXRpb24gb2YgbGlicmFyaWVzLgotICBpZihVTklYIEFORCBCTEFfU1RBVElDKQotICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtfZmxhZ3N9ICItV2wsLS1zdGFydC1ncm91cCIgJHske0xJQlJBUklFU319ICR7X2JsYXN9ICItV2wsLS1lbmQtZ3JvdXAiICR7X3RocmVhZHN9KQorc2V0KF9sYXBhY2tfT1JJR19DTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQoraWYoQkxBX1NUQVRJQykKKyAgaWYoV0lOMzIpCisgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAubGliICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKICAgZWxzZSgpCi0gICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke19mbGFnc30gJHske0xJQlJBUklFU319ICR7X2JsYXN9ICR7X3RocmVhZHN9KQorICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmEgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQogICBlbmRpZigpCi0jICBtZXNzYWdlKCJERUJVRzogQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTID0gJHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9IikKLSAgaWYgKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKLSAgICBjaGVja19mdW5jdGlvbl9leGlzdHMoIiR7X25hbWV9XyIgJHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTKQotICBlbHNlICgpCi0gICAgY2hlY2tfZm9ydHJhbl9mdW5jdGlvbl9leGlzdHMoJHtfbmFtZX0gJHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTKQotICBlbmRpZiAoKQotICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTKQotICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTfSkKLSAgI21lc3NhZ2UoIkRFQlVHOiAke0xJQlJBUklFU30gPSAkeyR7TElCUkFSSUVTfX0iKQorZWxzZSgpCisgIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCisgICAgIyBmb3IgdWJ1bnR1J3MgbGliYmxhczNnZiBhbmQgbGlibGFwYWNrM2dmIHBhY2thZ2VzCisgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30gLnNvLjNnZikKKyAgZW5kaWYoKQogZW5kaWYoKQogCi0gaWYoX2xpYnJhcmllc193b3JrKQotICAgaWYoIiR7X2xpc3R9JHtfYmxhc30iIFNUUkVRVUFMICIiKQotICAgICBzZXQoJHtMSUJSQVJJRVN9ICIke0xJQlJBUklFU30tUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCi0gICBlbHNlKCkKLSAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gJHtfYmxhc30gJHtfdGhyZWFkc30pCi0gICBlbmRpZigpCi0gZWxzZSgpCisjIFRPRE86IG1vdmUgdGhpcyBzdHVmZiB0byBhIHNlcGFyYXRlIG1vZHVsZQorCittYWNybyhDSEVDS19MQVBBQ0tfTElCUkFSSUVTIExJQlJBUklFUyBfcHJlZml4IF9uYW1lIF9mbGFncyBfbGlzdCBfdGhyZWFkbGlicyBfYWRkbGliZGlyIF9zdWJkaXJzIF9ibGFzKQorICAjIFRoaXMgbWFjcm8gY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBjb21iaW5hdGlvbiBvZiBmb3J0cmFuIGxpYnJhcmllcworICAjIGdpdmVuIGJ5IF9saXN0LiAgSWYgdGhlIGNvbWJpbmF0aW9uIGlzIGZvdW5kLCB0aGlzIG1hY3JvIGNoZWNrcyAodXNpbmcgdGhlCisgICMgQ2hlY2tfRm9ydHJhbl9GdW5jdGlvbl9FeGlzdHMgbWFjcm8pIHdoZXRoZXIgY2FuIGxpbmsgYWdhaW5zdCB0aGF0IGxpYnJhcnkKKyAgIyBjb21iaW5hdGlvbiB1c2luZyB0aGUgbmFtZSBvZiBhIHJvdXRpbmUgZ2l2ZW4gYnkgX25hbWUgdXNpbmcgdGhlIGxpbmtlcgorICAjIGZsYWdzIGdpdmVuIGJ5IF9mbGFncy4gIElmIHRoZSBjb21iaW5hdGlvbiBvZiBsaWJyYXJpZXMgaXMgZm91bmQgYW5kIHBhc3NlcworICAjIHRoZSBsaW5rIHRlc3QsIExJQlJBUklFUyBpcyBzZXQgdG8gdGhlIGxpc3Qgb2YgY29tcGxldGUgbGlicmFyeSBwYXRocyB0aGF0CisgICMgaGF2ZSBiZWVuIGZvdW5kLiAgT3RoZXJ3aXNlLCBMSUJSQVJJRVMgaXMgc2V0IHRvIEZBTFNFLgorCisgICMgTi5CLiBfcHJlZml4IGlzIHRoZSBwcmVmaXggYXBwbGllZCB0byB0aGUgbmFtZXMgb2YgYWxsIGNhY2hlZCB2YXJpYWJsZXMgdGhhdAorICAjIGFyZSBnZW5lcmF0ZWQgaW50ZXJuYWxseSBhbmQgbWFya2VkIGFkdmFuY2VkIGJ5IHRoaXMgbWFjcm8uCisgICMgX2FkZGxpYmRpciBpcyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggcGF0aHMuIF9zdWJkaXJzIGlzIGEgbGlzdCBvZiBwYXRoCisgICMgc3VmZml4ZXMgdG8gYmUgdXNlZCBieSBmaW5kX2xpYnJhcnkoKS4KKworICBzZXQoX2xpYnJhcmllc193b3JrIFRSVUUpCisgIHNldCgke0xJQlJBUklFU30pCisgIHNldChfY29tYmluZWRfbmFtZSkKKworICBzZXQoX2V4dGFkZGxpYmRpciAiJHtfYWRkbGliZGlyfSIpCisgIGlmKFdJTjMyKQorICAgIGxpc3QoQVBQRU5EIF9leHRhZGRsaWJkaXIgRU5WIExJQikKKyAgZWxzZWlmKEFQUExFKQorICAgIGxpc3QoQVBQRU5EIF9leHRhZGRsaWJkaXIgRU5WIERZTERfTElCUkFSWV9QQVRIKQorICBlbHNlKCkKKyAgICBsaXN0KEFQUEVORCBfZXh0YWRkbGliZGlyIEVOViBMRF9MSUJSQVJZX1BBVEgpCisgIGVuZGlmKCkKKyAgbGlzdChBUFBFTkQgX2V4dGFkZGxpYmRpciAiJHtDTUFLRV9DX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKKworICBmb3JlYWNoKF9saWJyYXJ5ICR7X2xpc3R9KQorICAgIGlmKF9saWJyYXJ5IE1BVENIRVMgIl4tV2wsLS0oc3RhcnR8ZW5kKS1ncm91cCQiKQorICAgICAgIyBSZXNwZWN0IGxpbmtlciBmbGFncyBsaWtlIC0tc3RhcnQvZW5kLWdyb3VwIChyZXF1aXJlZCBieSBNS0wpCisgICAgICBzZXQoJHtMSUJSQVJJRVN9ICR7JHtMSUJSQVJJRVN9fSAiJHtfbGlicmFyeX0iKQorICAgIGVsc2UoKQorICAgICAgc2V0KF9jb21iaW5lZF9uYW1lICR7X2NvbWJpbmVkX25hbWV9XyR7X2xpYnJhcnl9KQorICAgICAgaWYoX2xpYnJhcmllc193b3JrKQorICAgICAgICBmaW5kX2xpYnJhcnkoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZCisgICAgICAgICAgTkFNRVMgJHtfbGlicmFyeX0KKyAgICAgICAgICBQQVRIUyAke19leHRhZGRsaWJkaXJ9CisgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke19zdWJkaXJzfQorICAgICAgICApCisgICAgICAgICNtZXNzYWdlKCJERUJVRzogZmluZF9saWJyYXJ5KCR7X2xpYnJhcnl9KSBnb3QgJHske19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUll9IikKKyAgICAgICAgbWFya19hc19hZHZhbmNlZCgke19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUlkpCisgICAgICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKKyAgICAgICAgc2V0KF9saWJyYXJpZXNfd29yayAkeyR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWX0pCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZihfbGlicmFyaWVzX3dvcmspCisgICAgIyBUZXN0IHRoaXMgY29tYmluYXRpb24gb2YgbGlicmFyaWVzLgorICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtfZmxhZ3N9ICR7JHtMSUJSQVJJRVN9fSAke19ibGFzfSAke190aHJlYWRsaWJzfSkKKyAgICAjbWVzc2FnZSgiREVCVUc6IENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyA9ICR7Q01BS0VfUkVRVUlSRURfTElCUkFSSUVTfSIpCisgICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MT0FERUQpCisgICAgICBjaGVja19mb3J0cmFuX2Z1bmN0aW9uX2V4aXN0cygiJHtfbmFtZX0iICR7X3ByZWZpeH0ke19jb21iaW5lZF9uYW1lfV9XT1JLUykKKyAgICBlbHNlKCkKKyAgICAgIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cygiJHtfbmFtZX1fIiAke19wcmVmaXh9JHtfY29tYmluZWRfbmFtZX1fV09SS1MpCisgICAgZW5kaWYoKQorICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCisgICAgc2V0KF9saWJyYXJpZXNfd29yayAkeyR7X3ByZWZpeH0ke19jb21iaW5lZF9uYW1lfV9XT1JLU30pCisgIGVuZGlmKCkKKworICBpZihfbGlicmFyaWVzX3dvcmspCisgICAgaWYoIiR7X2xpc3R9JHtfYmxhc30iIFNUUkVRVUFMICIiKQorICAgICAgc2V0KCR7TElCUkFSSUVTfSAiJHtMSUJSQVJJRVN9LVBMQUNFSE9MREVSLUZPUi1FTVBUWS1MSUJSQVJJRVMiKQorICAgIGVsc2UoKQorICAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gJHtfYmxhc30gJHtfdGhyZWFkbGlic30pCisgICAgZW5kaWYoKQorICBlbHNlKCkKICAgICBzZXQoJHtMSUJSQVJJRVN9IEZBTFNFKQotIGVuZGlmKCkKLQorICBlbmRpZigpCisgICNtZXNzYWdlKCJERUJVRzogJHtMSUJSQVJJRVN9ID0gJHske0xJQlJBUklFU319IikKIGVuZG1hY3JvKCkKIAotCiBzZXQoTEFQQUNLX0xJTktFUl9GTEFHUykKIHNldChMQVBBQ0tfTElCUkFSSUVTKQogc2V0KExBUEFDSzk1X0xJQlJBUklFUykKIAotCiBpZihMQVBBQ0tfRklORF9RVUlFVExZIE9SIE5PVCBMQVBBQ0tfRklORF9SRVFVSVJFRCkKICAgZmluZF9wYWNrYWdlKEJMQVMpCiBlbHNlKCkKICAgZmluZF9wYWNrYWdlKEJMQVMgUkVRVUlSRUQpCiBlbmRpZigpCiAKLQogaWYoQkxBU19GT1VORCkKICAgc2V0KExBUEFDS19MSU5LRVJfRkxBR1MgJHtCTEFTX0xJTktFUl9GTEFHU30pCi0gIGlmIChOT1QgJEVOVntCTEFfVkVORE9SfSBTVFJFUVVBTCAiIikKKyAgaWYoTk9UICRFTlZ7QkxBX1ZFTkRPUn0gU1RSRVFVQUwgIiIpCiAgICAgc2V0KEJMQV9WRU5ET1IgJEVOVntCTEFfVkVORE9SfSkKLSAgZWxzZSAoKQorICBlbHNlKCkKICAgICBpZihOT1QgQkxBX1ZFTkRPUikKICAgICAgIHNldChCTEFfVkVORE9SICJBbGwiKQogICAgIGVuZGlmKCkKLSAgZW5kaWYgKCkKKyAgZW5kaWYoKQogCi0jaW50ZWwgbGFwYWNrCi1pZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJJbnRlbCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCi0gIGlmIChOT1QgV0lOMzIpCi0gICAgc2V0KExBUEFDS19ta2xfTE0gIi1sbSIpCi0gICAgc2V0KExBUEFDS19ta2xfTERMICItbGRsIikKLSAgZW5kaWYgKCkKLSAgaWYgKENNQUtFX0NfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0NYWF9DT01QSUxFUl9MT0FERUQpCi0gICAgaWYoTEFQQUNLX0ZJTkRfUVVJRVRMWSBPUiBOT1QgTEFQQUNLX0ZJTkRfUkVRVUlSRUQpCi0gICAgICBmaW5kX1BBQ0tBR0UoVGhyZWFkcykKLSAgICBlbHNlKCkKLSAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQotICAgIGVuZGlmKCkKKyAgIyBMQVBBQ0sgaW4gdGhlIEludGVsIE1LTCAxMCsgbGlicmFyeT8KKyAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJJbnRlbCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgIGlmKENNQUtFX0NfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0NYWF9DT01QSUxFUl9MT0FERUQpCisgICAgICAgICMgU3lzdGVtLXNwZWNpZmljIHNldHRpbmdzCisgICAgICAgIGlmKE5PVCBXSU4zMikKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9MTSAiLWxtIikKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9MREwgIi1sZGwiKQorICAgICAgICBlbmRpZigpCiAKLSAgICBpZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJfNjRpbHAiKQotICAgICAgc2V0KExBUEFDS19ta2xfSUxQX01PREUgImlscDY0IikKLSAgICBlbHNlICgpCi0gICAgICBzZXQoTEFQQUNLX21rbF9JTFBfTU9ERSAibHA2NCIpCi0gICAgZW5kaWYgKCkKKyAgICAgICAgaWYoTEFQQUNLX0ZJTkRfUVVJRVRMWSBPUiBOT1QgTEFQQUNLX0ZJTkRfUkVRVUlSRUQpCisgICAgICAgICAgZmluZF9wYWNrYWdlKFRocmVhZHMpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQorICAgICAgICBlbmRpZigpCiAKLSAgICBzZXQoTEFQQUNLX1NFQVJDSF9MSUJTICIiKQorICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl82NGlscCIpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfSUxQX01PREUgImlscDY0IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfSUxQX01PREUgImxwNjQiKQorICAgICAgICBlbmRpZigpCiAKLSAgICBpZiAoQkxBX0Y5NSkKLSAgICAgIHNldChMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0wgImNoZWV2X2Y5NSIpCi0gICAgICBzZXQoX0xJQlJBUklFUyBMQVBBQ0s5NV9MSUJSQVJJRVMpCi0gICAgICBzZXQoX0JMQVNfTElCUkFSSUVTICR7QkxBUzk1X0xJQlJBUklFU30pCisgICAgICAgIHNldChMQVBBQ0tfU0VBUkNIX0xJQlMgIiIpCiAKLSAgICAgICMgb2xkCi0gICAgICBsaXN0KEFQUEVORCBMQVBBQ0tfU0VBUkNIX0xJQlMKLSAgICAgICAgIm1rbF9sYXBhY2s5NSIpCi0gICAgICAjIG5ldyA+PSAxMC4zCi0gICAgICBsaXN0KEFQUEVORCBMQVBBQ0tfU0VBUkNIX0xJQlMKLSAgICAgICAgIm1rbF9pbnRlbF9jIikKLSAgICAgIGxpc3QoQVBQRU5EIExBUEFDS19TRUFSQ0hfTElCUwotICAgICAgICAibWtsX2xhcGFjazk1XyR7TEFQQUNLX21rbF9JTFBfTU9ERX0iKQotICAgIGVsc2UoKQotICAgICAgc2V0KExBUEFDS19ta2xfU0VBUkNIX1NZTUJPTCAiY2hlZXYiKQotICAgICAgc2V0KF9MSUJSQVJJRVMgTEFQQUNLX0xJQlJBUklFUykKLSAgICAgIHNldChfQkxBU19MSUJSQVJJRVMgJHtCTEFTX0xJQlJBUklFU30pCisgICAgICAgIGlmKEJMQV9GOTUpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfU0VBUkNIX1NZTUJPTCAiY2hlZXZfZjk1IikKKyAgICAgICAgICBzZXQoX0xJQlJBUklFUyBMQVBBQ0s5NV9MSUJSQVJJRVMpCisgICAgICAgICAgc2V0KF9CTEFTX0xJQlJBUklFUyAke0JMQVM5NV9MSUJSQVJJRVN9KQogCi0gICAgICAjIG9sZAotICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCi0gICAgICAgICJta2xfbGFwYWNrIikKLSAgICBlbmRpZigpCisgICAgICAgICAgIyBvbGQKKyAgICAgICAgICBsaXN0KEFQUEVORCBMQVBBQ0tfU0VBUkNIX0xJQlMKKyAgICAgICAgICAgICJta2xfbGFwYWNrOTUiKQorICAgICAgICAgICMgbmV3ID49IDEwLjMKKyAgICAgICAgICBsaXN0KEFQUEVORCBMQVBBQ0tfU0VBUkNIX0xJQlMKKyAgICAgICAgICAgICJta2xfaW50ZWxfYyIpCisgICAgICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCisgICAgICAgICAgICAibWtsX2xhcGFjazk1XyR7TEFQQUNLX21rbF9JTFBfTU9ERX0iKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9TRUFSQ0hfU1lNQk9MICJjaGVldiIpCisgICAgICAgICAgc2V0KF9MSUJSQVJJRVMgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgICAgICBzZXQoX0JMQVNfTElCUkFSSUVTICR7QkxBU19MSUJSQVJJRVN9KQogCi0gICAgIyBGaXJzdCB0cnkgZW1wdHkgbGFwYWNrIGxpYnMKLSAgICBpZiAoTk9UICR7X0xJQlJBUklFU30pCi0gICAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICAgICAgICAke19MSUJSQVJJRVN9Ci0gICAgICAgIExBUEFDSwotICAgICAgICAke0xBUEFDS19ta2xfU0VBUkNIX1NZTUJPTH0KLSAgICAgICAgIiIKLSAgICAgICAgIiIKLSAgICAgICAgIiR7X0JMQVNfTElCUkFSSUVTfSIKLSAgICAgICAgIiIKLSAgICAgICAgKQotICAgIGVuZGlmICgpCi0gICAgIyBUaGVuIHRyeSB0aGUgc2VhcmNoIGxpYnMKLSAgICBmb3JlYWNoIChJVCAke0xBUEFDS19TRUFSQ0hfTElCU30pCi0gICAgICBpZiAoTk9UICR7X0xJQlJBUklFU30pCi0gICAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCi0gICAgICAgICAgJHtfTElCUkFSSUVTfQotICAgICAgICAgIExBUEFDSwotICAgICAgICAgICR7TEFQQUNLX21rbF9TRUFSQ0hfU1lNQk9MfQotICAgICAgICAgICIiCi0gICAgICAgICAgIiR7SVR9IgotICAgICAgICAgICIke19CTEFTX0xJQlJBUklFU30iCi0gICAgICAgICAgIiR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH07JHtMQVBBQ0tfbWtsX0xNfTske0xBUEFDS19ta2xfTERMfSIKKyAgICAgICAgICAjIG9sZCBhbmQgbmV3ID49IDEwLjMKKyAgICAgICAgICBsaXN0KEFQUEVORCBMQVBBQ0tfU0VBUkNIX0xJQlMKKyAgICAgICAgICAgICJta2xfbGFwYWNrIikKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgTUtMIHVzZXMgYSBtdWx0aXR1ZGUgb2YgcGFydGlhbGx5IHBsYXRmb3JtLXNwZWNpZmljIHN1YmRpcmVjdG9yaWVzOgorICAgICAgICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIikKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9BUkNIX05BTUUgImlhMzIiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9BUkNIX05BTUUgImludGVsNjQiKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGlmKFdJTjMyKQorICAgICAgICAgIHNldChMQVBBQ0tfbWtsX09TX05BTUUgIndpbiIpCisgICAgICAgIGVsc2VpZihBUFBMRSkKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9PU19OQU1FICJtYWMiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9PU19OQU1FICJsaW4iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGlmKERFRklORUQgRU5We01LTFJPT1R9KQorICAgICAgICAgIHNldChMQVBBQ0tfbWtsX01LTFJPT1QgIiRFTlZ7TUtMUk9PVH0iKQorICAgICAgICAgICMgSWYgTUtMUk9PVCBwb2ludHMgdG8gdGhlIHN1YmRpcmVjdG9yeSAnbWtsJywgdXNlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGluc3RlYWQKKyAgICAgICAgICAjIHNvIHdlIGNhbiBiZXR0ZXIgZGV0ZWN0IG90aGVyIHJlbGV2YW50IGxpYnJhcmllcyBpbiAnY29tcGlsZXInIG9yICd0YmInOgorICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoTEFQQUNLX21rbF9NS0xST09UX0xBU1RfRElSICIke0xBUEFDS19ta2xfTUtMUk9PVH0iIE5BTUUpCisgICAgICAgICAgaWYoTEFQQUNLX21rbF9NS0xST09UX0xBU1RfRElSIFNUUkVRVUFMICJta2wiKQorICAgICAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KExBUEFDS19ta2xfTUtMUk9PVCAiJHtMQVBBQ0tfbWtsX01LTFJPT1R9IiBESVJFQ1RPUlkpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHNldChMQVBBQ0tfbWtsX0xJQl9QQVRIX1NVRkZJWEVTCisgICAgICAgICAgICAiY29tcGlsZXIvbGliIiAiY29tcGlsZXIvbGliLyR7TEFQQUNLX21rbF9BUkNIX05BTUV9XyR7TEFQQUNLX21rbF9PU19OQU1FfSIKKyAgICAgICAgICAgICJta2wvbGliIiAibWtsL2xpYi8ke0xBUEFDS19ta2xfQVJDSF9OQU1FfV8ke0xBUEFDS19ta2xfT1NfTkFNRX0iCisgICAgICAgICAgICAibGliLyR7TEFQQUNLX21rbF9BUkNIX05BTUV9XyR7TEFQQUNLX21rbF9PU19OQU1FfSIpCisKKyAgICAgICAgIyBGaXJzdCB0cnkgZW1wdHkgbGFwYWNrIGxpYnMKKyAgICAgICAgaWYoTk9UICR7X0xJQlJBUklFU30pCisgICAgICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgICAgICR7X0xJQlJBUklFU30KKyAgICAgICAgICAgIExBUEFDSworICAgICAgICAgICAgJHtMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0x9CisgICAgICAgICAgICAiIgorICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICIke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9OyR7TEFQQUNLX21rbF9MTX07JHtMQVBBQ0tfbWtsX0xETH0iCisgICAgICAgICAgICAiJHtMQVBBQ0tfbWtsX01LTFJPT1R9IgorICAgICAgICAgICAgIiR7TEFQQUNLX21rbF9MSUJfUEFUSF9TVUZGSVhFU30iCisgICAgICAgICAgICAiJHtfQkxBU19MSUJSQVJJRVN9IgogICAgICAgICAgICkKLSAgICAgIGVuZGlmICgpCi0gICAgZW5kZm9yZWFjaCAoKQorICAgICAgICBlbmRpZigpCiAKLSAgICB1bnNldChMQVBBQ0tfbWtsX0lMUF9NT0RFKQotICAgIHVuc2V0KExBUEFDS19ta2xfU0VBUkNIX1NZTUJPTCkKLSAgICB1bnNldChMQVBBQ0tfbWtsX0xNKQotICAgIHVuc2V0KExBUEFDS19ta2xfTERMKQotICBlbmRpZiAoKQorICAgICAgICAjIFRoZW4gdHJ5IHRoZSBzZWFyY2ggbGlicworICAgICAgICBmb3JlYWNoKElUICR7TEFQQUNLX1NFQVJDSF9MSUJTfSkKKyAgICAgICAgICBzdHJpbmcoUkVQTEFDRSAiICIgIjsiIFNFQVJDSF9MSUJTICR7SVR9KQorICAgICAgICAgIGlmKE5PVCAke19MSUJSQVJJRVN9KQorICAgICAgICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgICAgICAgJHtfTElCUkFSSUVTfQorICAgICAgICAgICAgICBMQVBBQ0sKKyAgICAgICAgICAgICAgJHtMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0x9CisgICAgICAgICAgICAgICIiCisgICAgICAgICAgICAgICIke1NFQVJDSF9MSUJTfSIKKyAgICAgICAgICAgICAgIiR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH07JHtMQVBBQ0tfbWtsX0xNfTske0xBUEFDS19ta2xfTERMfSIKKyAgICAgICAgICAgICAgIiR7TEFQQUNLX21rbF9NS0xST09UfSIKKyAgICAgICAgICAgICAgIiR7TEFQQUNLX21rbF9MSUJfUEFUSF9TVUZGSVhFU30iCisgICAgICAgICAgICAgICIke19CTEFTX0xJQlJBUklFU30iCisgICAgICAgICAgICApCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRmb3JlYWNoKCkKKworICAgICAgICB1bnNldChMQVBBQ0tfbWtsX0lMUF9NT0RFKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0wpCisgICAgICAgIHVuc2V0KExBUEFDS19ta2xfTE0pCisgICAgICAgIHVuc2V0KExBUEFDS19ta2xfTERMKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX01LTFJPT1QpCisgICAgICAgIHVuc2V0KExBUEFDS19ta2xfQVJDSF9OQU1FKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX09TX05BTUUpCisgICAgICAgIHVuc2V0KExBUEFDS19ta2xfTElCX1BBVEhfU1VGRklYRVMpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQogICBlbmRpZigpCi1lbmRpZigpCiAKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJHb3RvIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQotICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICBMQVBBQ0tfTElCUkFSSUVTCi0gIExBUEFDSwotICBjaGVldgotICAiIgotICAiZ290bzIiCi0gICIke0JMQVNfTElCUkFSSUVTfSIKLSAgIiIKLSAgKQotIGVuZGlmKCkKLWVuZGlmICgpCi0KLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJPcGVuQkxBUyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKLSAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKLSAgTEFQQUNLX0xJQlJBUklFUwotICBMQVBBQ0sKLSAgY2hlZXYKLSAgIiIKLSAgIm9wZW5ibGFzIgotICAiJHtCTEFTX0xJQlJBUklFU30iCi0gICIiCi0gICkKLSBlbmRpZigpCi1lbmRpZiAoKQotCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiRkxBTUUiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCi0gIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCi0gIExBUEFDS19MSUJSQVJJRVMKLSAgTEFQQUNLCi0gIGNoZWV2Ci0gICIiCi0gICJmbGFtZSIKLSAgIiR7QkxBU19MSUJSQVJJRVN9IgotICAiIgotICApCi0gZW5kaWYoKQotZW5kaWYgKCkKLQotI2FjbWwgbGFwYWNrCi1pZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJBQ01MIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotICBpZiAoQkxBU19MSUJSQVJJRVMgTUFUQ0hFUyAiLithY21sLisiKQotICAgIHNldCAoTEFQQUNLX0xJQlJBUklFUyAke0JMQVNfTElCUkFSSUVTfSkKLSAgZW5kaWYgKCkKLWVuZGlmICgpCi0KLSMgQXBwbGUgTEFQQUNLIGxpYnJhcnk/Ci1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQXBwbGUiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQotICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCi0gICAgTEFQQUNLX0xJQlJBUklFUwotICAgIExBUEFDSwotICAgIGNoZWV2Ci0gICAgIiIKLSAgICAiQWNjZWxlcmF0ZSIKLSAgICAiJHtCTEFTX0xJQlJBUklFU30iCi0gICAgIiIKLSAgICApCisgICMgZ290b2JsYXM/IChodHRwOi8vd3d3LnRhY2MudXRleGFzLmVkdS90YWNjLXByb2plY3RzL2dvdG9ibGFzMikKKyAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR290byIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgIExBUEFDS19MSUJSQVJJRVMKKyAgICAgICAgTEFQQUNLCisgICAgICAgIGNoZWV2CisgICAgICAgICIiCisgICAgICAgICJnb3RvMiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiR7QkxBU19MSUJSQVJJRVN9IgorICAgICAgKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQotZW5kaWYgKCkKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJOQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gIGlmICggTk9UIExBUEFDS19MSUJSQVJJRVMgKQotICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCi0gICAgTEFQQUNLX0xJQlJBUklFUwotICAgIExBUEFDSwotICAgIGNoZWV2Ci0gICAgIiIKLSAgICAidmVjTGliIgotICAgICIke0JMQVNfTElCUkFSSUVTfSIKLSAgICAiIgotICAgICkKLSAgZW5kaWYgKCkKLWVuZGlmICgpCi0jIEdlbmVyaWMgTEFQQUNLIGxpYnJhcnk/Ci1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR2VuZXJpYyIgT1IKLSAgICBCTEFfVkVORE9SIFNUUkVRVUFMICJBVExBUyIgT1IKLSAgICBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotICBpZiAoIE5PVCBMQVBBQ0tfTElCUkFSSUVTICkKLSAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICAgIExBUEFDS19MSUJSQVJJRVMKLSAgICBMQVBBQ0sKLSAgICBjaGVldgotICAgICIiCi0gICAgImxhcGFjayIKLSAgICAiJHtCTEFTX0xJQlJBUklFU30iCi0gICAgIiIKLSAgICApCi0gIGVuZGlmICgpCi1lbmRpZiAoKQogCisgICMgT3BlbkJMQVM/IChodHRwOi8vd3d3Lm9wZW5ibGFzLm5ldCkKKyAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiT3BlbkJMQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCisgICAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAorICAgICAgICBMQVBBQ0tfTElCUkFSSUVTCisgICAgICAgIExBUEFDSworICAgICAgICBjaGVldgorICAgICAgICAiIgorICAgICAgICAib3BlbmJsYXMiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIke0JMQVNfTElCUkFSSUVTfSIKKyAgICAgICkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICAjIEZMQU1FJ3MgYmxpcyBsaWJyYXJ5PyAoaHR0cHM6Ly9naXRodWIuY29tL2ZsYW1lL2JsaXMpCisgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkZMQU1FIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQorICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgTEFQQUNLX0xJQlJBUklFUworICAgICAgICBMQVBBQ0sKKyAgICAgICAgY2hlZXYKKyAgICAgICAgIiIKKyAgICAgICAgImZsYW1lIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiJHtCTEFTX0xJQlJBUklFU30iCisgICAgICApCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgIyBCTEFTIGluIGFjbWwgbGlicmFyeT8KKyAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJBQ01MIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgIGlmKEJMQVNfTElCUkFSSUVTIE1BVENIRVMgIi4rYWNtbC4rIikKKyAgICAgIHNldChMQVBBQ0tfTElCUkFSSUVTICR7QkxBU19MSUJSQVJJRVN9KQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgICMgQXBwbGUgTEFQQUNLIGxpYnJhcnk/CisgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFwcGxlIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQorICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgTEFQQUNLX0xJQlJBUklFUworICAgICAgICBMQVBBQ0sKKyAgICAgICAgY2hlZXYKKyAgICAgICAgIiIKKyAgICAgICAgIkFjY2VsZXJhdGUiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIke0JMQVNfTElCUkFSSUVTfSIKKyAgICAgICkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICAjIEFwcGxlIE5BUyAodmVjTGliKSBsaWJyYXJ5PworICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJOQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCisgICAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAorICAgICAgICBMQVBBQ0tfTElCUkFSSUVTCisgICAgICAgIExBUEFDSworICAgICAgICBjaGVldgorICAgICAgICAiIgorICAgICAgICAidmVjTGliIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiJHtCTEFTX0xJQlJBUklFU30iCisgICAgICApCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgIyBHZW5lcmljIExBUEFDSyBsaWJyYXJ5PworICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJHZW5lcmljIiBPUgorICAgICAgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQVRMQVMiIE9SCisgICAgICBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQorICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgTEFQQUNLX0xJQlJBUklFUworICAgICAgICBMQVBBQ0sKKyAgICAgICAgY2hlZXYKKyAgICAgICAgIiIKKyAgICAgICAgImxhcGFjayIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiR7QkxBU19MSUJSQVJJRVN9IgorICAgICAgKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogZWxzZSgpCiAgIG1lc3NhZ2UoU1RBVFVTICJMQVBBQ0sgcmVxdWlyZXMgQkxBUyIpCiBlbmRpZigpCkBAIC0zOTcsMTEgKzQ1MSwxMSBAQAogICAgIGVsc2UoKQogICAgICAgaWYoTEFQQUNLX0ZJTkRfUkVRVUlSRUQpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKLSAgICAgICAgIkEgcmVxdWlyZWQgbGlicmFyeSB3aXRoIExBUEFDSzk1IEFQSSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IGxpYnJhcnkgbG9jYXRpb24uIgorICAgICAgICAgICJBIHJlcXVpcmVkIGxpYnJhcnkgd2l0aCBMQVBBQ0s5NSBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKICAgICAgICAgKQogICAgICAgZWxzZSgpCiAgICAgICAgIG1lc3NhZ2UoU1RBVFVTCi0gICAgICAgICJBIGxpYnJhcnkgd2l0aCBMQVBBQ0s5NSBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKKyAgICAgICAgICAiQSBsaWJyYXJ5IHdpdGggTEFQQUNLOTUgQVBJIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgbGlicmFyeSBsb2NhdGlvbi4iCiAgICAgICAgICkKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCkBAIC00MjEsMTEgKzQ3NSwxMSBAQAogICAgIGVsc2UoKQogICAgICAgaWYoTEFQQUNLX0ZJTkRfUkVRVUlSRUQpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKLSAgICAgICAgIkEgcmVxdWlyZWQgbGlicmFyeSB3aXRoIExBUEFDSyBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKKyAgICAgICAgICAiQSByZXF1aXJlZCBsaWJyYXJ5IHdpdGggTEFQQUNLIEFQSSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IGxpYnJhcnkgbG9jYXRpb24uIgogICAgICAgICApCiAgICAgICBlbHNlKCkKICAgICAgICAgbWVzc2FnZShTVEFUVVMKLSAgICAgICAgIkEgbGlicmFyeSB3aXRoIExBUEFDSyBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKKyAgICAgICAgICAiQSBsaWJyYXJ5IHdpdGggTEFQQUNLIEFQSSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IGxpYnJhcnkgbG9jYXRpb24uIgogICAgICAgICApCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQpAQCAtNDM0LDcgKzQ4OCw3IEBACiAKICMgT24gY29tcGlsZXJzIHRoYXQgaW1wbGljaXRseSBsaW5rIExBUEFDSyAoc3VjaCBhcyBmdG4sIGNjLCBhbmQgQ0Mgb24gQ3JheSBIUEMgbWFjaGluZXMpCiAjIHdlIHVzZWQgYSBwbGFjZWhvbGRlciBmb3IgZW1wdHkgTEFQQUNLX0xJQlJBUklFUyB0byBnZXQgdGhyb3VnaCBvdXIgbG9naWMgYWJvdmUuCi1pZiAoTEFQQUNLX0xJQlJBUklFUyBTVFJFUVVBTCAiTEFQQUNLX0xJQlJBUklFUy1QTEFDRUhPTERFUi1GT1ItRU1QVFktTElCUkFSSUVTIikKK2lmKExBUEFDS19MSUJSQVJJRVMgU1RSRVFVQUwgIkxBUEFDS19MSUJSQVJJRVMtUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCiAgIHNldChMQVBBQ0tfTElCUkFSSUVTICIiKQogZW5kaWYoKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRMaWJBcmNoaXZlLmNtYWtlIGIvTW9kdWxlcy9GaW5kTGliQXJjaGl2ZS5jbWFrZQppbmRleCBlZjI3YjdkLi5jZTNjOGI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMaWJBcmNoaXZlLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZExpYkFyY2hpdmUuY21ha2UKQEAgLTE2LDE4ICsxNiwyNiBAQAogICBMaWJBcmNoaXZlX0lOQ0xVREVfRElSUyAtIGluY2x1ZGUgc2VhcmNoIHBhdGgKICAgTGliQXJjaGl2ZV9MSUJSQVJJRVMgICAgLSBsaWJyYXJpZXMgdG8gbGluawogICBMaWJBcmNoaXZlX1ZFUlNJT04gICAgICAtIGxpYmFyY2hpdmUgMy1jb21wb25lbnQgdmVyc2lvbiBudW1iZXIKKworVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYGBJTVBPUlRFRGBgIHRhcmdldHM6CisKKzo6CisKKyAgTGliQXJjaGl2ZTo6TGliQXJjaGl2ZSAgLSB0YXJnZXQgZm9yIGxpbmtpbmcgYWdhaW5zdCBsaWJhcmNoaXZlCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBmaW5kX3BhdGgoTGliQXJjaGl2ZV9JTkNMVURFX0RJUgogICBOQU1FUyBhcmNoaXZlLmgKICAgUEFUSFMKICAgIltIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxHbnVXaW4zMlxcTGliQXJjaGl2ZTtJbnN0YWxsUGF0aF0vaW5jbHVkZSIKKyAgRE9DICJsaWJhcmNoaXZlIGluY2x1ZGUgZGlyZWN0b3J5IgogICApCiAKIGZpbmRfbGlicmFyeShMaWJBcmNoaXZlX0xJQlJBUlkKICAgTkFNRVMgYXJjaGl2ZSBsaWJhcmNoaXZlCiAgIFBBVEhTCiAgICJbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcR251V2luMzJcXExpYkFyY2hpdmU7SW5zdGFsbFBhdGhdL2xpYiIKKyAgRE9DICJsaWJhcmNoaXZlIGxpYnJhcnkiCiAgICkKIAogbWFya19hc19hZHZhbmNlZChMaWJBcmNoaXZlX0lOQ0xVREVfRElSIExpYkFyY2hpdmVfTElCUkFSWSkKQEAgLTU4LDQgKzY2LDExIEBACiBpZihMaWJBcmNoaXZlX0ZPVU5EKQogICBzZXQoTGliQXJjaGl2ZV9JTkNMVURFX0RJUlMgJHtMaWJBcmNoaXZlX0lOQ0xVREVfRElSfSkKICAgc2V0KExpYkFyY2hpdmVfTElCUkFSSUVTICAgICR7TGliQXJjaGl2ZV9MSUJSQVJZfSkKKworICBpZiAoTk9UIFRBUkdFVCBMaWJBcmNoaXZlOjpMaWJBcmNoaXZlKQorICAgIGFkZF9saWJyYXJ5KExpYkFyY2hpdmU6OkxpYkFyY2hpdmUgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliQXJjaGl2ZTo6TGliQXJjaGl2ZSBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtMaWJBcmNoaXZlX0xJQlJBUll9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TGliQXJjaGl2ZV9JTkNMVURFX0RJUn0iKQorICBlbmRpZiAoKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTGliWG1sMi5jbWFrZSBiL01vZHVsZXMvRmluZExpYlhtbDIuY21ha2UKaW5kZXggZGE4YmZlMC4uZjU1MWRmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTGliWG1sMi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMaWJYbWwyLmNtYWtlCkBAIC0xMCw4ICsxMCwxMiBAQAogSU1QT1JURUQgVGFyZ2V0cwogXl5eXl5eXl5eXl5eXl5eXgogCi1UaGlzIG1vZHVsZSBkZWZpbmVzIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldCBgYExpYlhtbDI6OkxpYlhtbDJgYCwgaWYKLWxpYnhtbDIgaGFzIGJlZW4gZm91bmQuCitUaGUgZm9sbG93aW5nIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldHMgbWF5IGJlIGRlZmluZWQ6CisKK2BgTGliWG1sMjo6TGliWG1sMmBgCisgIElmIHRoZSBsaWJ4bWwyIGxpYnJhcnkgaGFzIGJlZW4gZm91bmQKK2BgTGliWG1sMjo6eG1sbGludGBgCisgIElmIHRoZSB4bWxsaW50IGNvbW1hbmQtbGluZSBleGVjdXRhYmxlIGhhcyBiZWVuIGZvdW5kCiAKIFJlc3VsdCB2YXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTQ4LDcgKzUyLDYgQEAKICMgaW4gdGhlIGZpbmRfcGF0aCgpIGFuZCBmaW5kX2xpYnJhcnkoKSBjYWxscwogZmluZF9wYWNrYWdlKFBrZ0NvbmZpZyBRVUlFVCkKIFBLR19DSEVDS19NT0RVTEVTKFBDX0xJQlhNTCBRVUlFVCBsaWJ4bWwtMi4wKQotc2V0KExJQlhNTDJfREVGSU5JVElPTlMgJHtQQ19MSUJYTUxfQ0ZMQUdTX09USEVSfSkKIAogZmluZF9wYXRoKExJQlhNTDJfSU5DTFVERV9ESVIgTkFNRVMgbGlieG1sL3hwYXRoLmgKICAgIEhJTlRTCkBAIC03NCw5ICs3Nyw3IEBACiAjIGZvciBiYWNrd2FyZHMgY29tcGF0LiB3aXRoIEtERSA0LjAueDoKIHNldChYTUxMSU5UX0VYRUNVVEFCTEUgIiR7TElCWE1MMl9YTUxMSU5UX0VYRUNVVEFCTEV9IikKIAotaWYoUENfTElCWE1MX1ZFUlNJT04pCi0gICAgc2V0KExJQlhNTDJfVkVSU0lPTl9TVFJJTkcgJHtQQ19MSUJYTUxfVkVSU0lPTn0pCi1lbHNlaWYoTElCWE1MMl9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke0xJQlhNTDJfSU5DTFVERV9ESVJ9L2xpYnhtbC94bWx2ZXJzaW9uLmgiKQoraWYoTElCWE1MMl9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke0xJQlhNTDJfSU5DTFVERV9ESVJ9L2xpYnhtbC94bWx2ZXJzaW9uLmgiKQogICAgIGZpbGUoU1RSSU5HUyAiJHtMSUJYTUwyX0lOQ0xVREVfRElSfS9saWJ4bWwveG1sdmVyc2lvbi5oIiBsaWJ4bWwyX3ZlcnNpb25fc3RyCiAgICAgICAgICBSRUdFWCAiXiNkZWZpbmVbXHQgXStMSUJYTUxfRE9UVEVEX1ZFUlNJT05bXHQgXStcIi4qXCIiKQogCkBAIC04NSw5ICs4NiwyMCBAQAogICAgIHVuc2V0KGxpYnhtbDJfdmVyc2lvbl9zdHIpCiBlbmRpZigpCiAKLXNldChMSUJYTUwyX0lOQ0xVREVfRElSUyAke0xJQlhNTDJfSU5DTFVERV9ESVJ9ICR7UENfTElCWE1MX0lOQ0xVREVfRElSU30pCitzZXQoTElCWE1MMl9JTkNMVURFX0RJUlMgJHtMSUJYTUwyX0lOQ0xVREVfRElSfSkKIHNldChMSUJYTUwyX0xJQlJBUklFUyAke0xJQlhNTDJfTElCUkFSWX0pCiAKKyMgRGlkIHdlIGZpbmQgdGhlIHNhbWUgaW5zdGFsbGF0aW9uIGFzIHBrZy1jb25maWc/CisjIElmIHNvLCB1c2UgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcm9tIGl0LgordW5zZXQoTElCWE1MMl9ERUZJTklUSU9OUykKK2ZvcmVhY2gobGlieG1sMl9wY19saWJfZGlyIElOIExJU1RTIFBDX0xJQlhNTF9MSUJESVIgUENfTElCWE1MX0xJQlJBUllfRElSUykKKyAgaWYgKExJQlhNTDJfTElCUkFSWSBNQVRDSEVTICJeJHtsaWJ4bWwyX3BjX2xpYl9kaXJ9IikKKyAgICBsaXN0KEFQUEVORCBMSUJYTUwyX0lOQ0xVREVfRElSUyAke1BDX0xJQlhNTF9JTkNMVURFX0RJUlN9KQorICAgIHNldChMSUJYTUwyX0RFRklOSVRJT05TICR7UENfTElCWE1MX0NGTEFHU19PVEhFUn0pCisgICAgYnJlYWsoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKwogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKExpYlhtbDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9WQVJTIExJQlhNTDJfTElCUkFSWSBMSUJYTUwyX0lOQ0xVREVfRElSCkBAIC05OCw1ICsxMTAsMTEgQEAKIGlmKExpYlhtbDJfRk9VTkQgQU5EIE5PVCBUQVJHRVQgTGliWG1sMjo6TGliWG1sMikKICAgYWRkX2xpYnJhcnkoTGliWG1sMjo6TGliWG1sMiBVTktOT1dOIElNUE9SVEVEKQogICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliWG1sMjo6TGliWG1sMiBQUk9QRVJUSUVTIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke0xJQlhNTDJfSU5DTFVERV9ESVJTfSIpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYbWwyOjpMaWJYbWwyIFBST1BFUlRJRVMgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyAiJHtMSUJYTUwyX0RFRklOSVRJT05TfSIpCiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgTGliWG1sMjo6TGliWG1sMiBBUFBFTkQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7TElCWE1MMl9MSUJSQVJZfSIpCiBlbmRpZigpCisKK2lmKExJQlhNTDJfWE1MTElOVF9FWEVDVVRBQkxFIEFORCBOT1QgVEFSR0VUIExpYlhtbDI6OnhtbGxpbnQpCisgIGFkZF9leGVjdXRhYmxlKExpYlhtbDI6OnhtbGxpbnQgSU1QT1JURUQpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYbWwyOjp4bWxsaW50IFBST1BFUlRJRVMgSU1QT1JURURfTE9DQVRJT04gIiR7TElCWE1MMl9YTUxMSU5UX0VYRUNVVEFCTEV9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEx1YS5jbWFrZSBiL01vZHVsZXMvRmluZEx1YS5jbWFrZQppbmRleCBjYWY5ZDY5Li4wYjBjOTcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMdWEuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTHVhLmNtYWtlCkBAIC0yMTEsNiArMjExLDcgQEAKICAgIyBpbmNsdWRlIHRoZSBtYXRoIGxpYnJhcnkgZm9yIFVuaXgKICAgaWYgKFVOSVggQU5EIE5PVCBBUFBMRSBBTkQgTk9UIEJFT1MpCiAgICAgZmluZF9saWJyYXJ5KExVQV9NQVRIX0xJQlJBUlkgbSkKKyAgICBtYXJrX2FzX2FkdmFuY2VkKExVQV9NQVRIX0xJQlJBUlkpCiAgICAgc2V0KExVQV9MSUJSQVJJRVMgIiR7TFVBX0xJQlJBUll9OyR7TFVBX01BVEhfTElCUkFSWX0iKQogCiAgICAgIyBpbmNsdWRlIGRsIGxpYnJhcnkgZm9yIHN0YXRpY2FsbHktbGlua2VkIEx1YSBsaWJyYXJ5CkBAIC0yMzIsNiArMjMzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9WQVJTIExVQV9MSUJSQVJJRVMgTFVBX0lOQ0xVREVfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgTFVBX1ZFUlNJT05fU1RSSU5HKQogCi1tYXJrX2FzX2FkdmFuY2VkKExVQV9JTkNMVURFX0RJUiBMVUFfTElCUkFSWSBMVUFfTUFUSF9MSUJSQVJZKQorbWFya19hc19hZHZhbmNlZChMVUFfSU5DTFVERV9ESVIgTFVBX0xJQlJBUlkpCiAKIGNtYWtlX3BvbGljeShQT1ApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRNRkMuY21ha2UgYi9Nb2R1bGVzL0ZpbmRNRkMuY21ha2UKaW5kZXggZTM2NjYxOS4uYjhjYTcxYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTUZDLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZE1GQy5jbWFrZQpAQCAtMzEsNyArMzEsNyBAQAogICAgIHNldChDSEVDS19JTkNMVURFX0ZJTEVfVkFSICJhZnh3aW4uaCIpCiAgICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGUuY3h4LmluCiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL0NoZWNrSW5jbHVkZUZpbGUuY3h4KQotICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBNRkMiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yIE1GQyIpCiAgICAgIyBUcnkgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBhcyB0aGUgcm9vdCBwcm9qZWN0IG1heSBoYXZlIHNldCB0aGUgL01UIGZsYWcKICAgICB0cnlfY29tcGlsZShNRkNfSEFWRV9NRkMKICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTUxLDEzICs1MSwxMyBAQAogICAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogICAgIGVuZGlmKCkKICAgICBpZihNRkNfSEFWRV9NRkMpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgTUZDIC0gZm91bmQiKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBzZXQoTUZDX0hBVkVfTUZDIDEgQ0FDSEUgSU5URVJOQUwgIkhhdmUgTUZDPyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgTUZDIGV4aXN0cyBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuXG4iKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIE1GQyAtIG5vdCBmb3VuZCIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBzZXQoTUZDX0hBVkVfTUZDIDAgQ0FDSEUgSU5URVJOQUwgIkhhdmUgTUZDPyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBNRkMgZXhpc3RzIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTVBJLmNtYWtlIGIvTW9kdWxlcy9GaW5kTVBJLmNtYWtlCmluZGV4IGQ2Y2Q3OTkuLjQxZTFkMDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE1QSS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRNUEkuY21ha2UKQEAgLTg0Miw4ICs4NDIsOCBAQAogICBpZihOT1QgTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUykKICAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUyAgICAgICR7TVBJX0NPTVBJTEVfREVGSU5JVElPTlNfV09SS30gQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBjb21waWxhdGlvbiBkZWZpbml0aW9ucyIgICAgICAgIEZPUkNFKQogICBlbmRpZigpCi0gIGlmKE5PVCBNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUykKLSAgICBzZXQoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgICR7TVBJX0lOQ0xVREVfRElSU19XT1JLfSAgICAgICAgQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBhZGRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMiIEZPUkNFKQorICBpZihOT1QgTVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTKQorICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFUl9JTkNMVURFX0RJUlMgICAgJHtNUElfSU5DTFVERV9ESVJTX1dPUkt9ICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGVyIHdyYXBwZXIgaW5jbHVkZSBkaXJlY3RvcmllcyIgRk9SQ0UpCiAgIGVuZGlmKCkKICAgaWYoTk9UIE1QSV8ke0xBTkd9X0xJTktfRkxBR1MpCiAgICAgc2V0KE1QSV8ke0xBTkd9X0xJTktfRkxBR1MgICAgICAgICAgICAgICAke01QSV9MSU5LX0ZMQUdTX1dPUkt9ICAgICAgICAgIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gbGlua2VyIGZsYWdzIiAgICAgICAgICAgICAgICAgICBGT1JDRSkKQEAgLTEwNzIsMzQgKzEwNzIsMjggQEAKIGVuZG1hY3JvKCkKIAogbWFjcm8oX01QSV9hc3NlbWJsZV9pbmNsdWRlX2RpcnMgTEFORykKLSAgaWYoIiR7TVBJXyR7TEFOR31fQ09NUElMRVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV8ke0xBTkd9X0NPTVBJTEVSfSIpCi0gICAgc2V0KE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiIikKLSAgZWxzZSgpCi0gICAgc2V0KE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30iKQotICAgIGlmKCIke0xBTkd9IiBNQVRDSEVTICIoQ3xDWFgpIikKLSAgICAgIGlmKE1QSV8ke0xBTkd9X0hFQURFUl9ESVIpCi0gICAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9IRUFERVJfRElSfSIpCi0gICAgICBlbmRpZigpCi0gICAgZWxzZSgpICMgRm9ydHJhbgotICAgICAgaWYoTVBJXyR7TEFOR31fRjc3X0hFQURFUl9ESVIpCi0gICAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9GNzdfSEVBREVSX0RJUn0iKQotICAgICAgZW5kaWYoKQotICAgICAgaWYoTVBJXyR7TEFOR31fTU9EVUxFX0RJUiBBTkQgTk9UICIke01QSV8ke0xBTkd9X01PRFVMRV9ESVJ9IiBJTl9MSVNUIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUykKLSAgICAgICAgbGlzdChBUFBFTkQgTVBJXyR7TEFOR31fSU5DTFVERV9ESVJTICIke01QSV8ke0xBTkd9X01PRFVMRV9ESVJ9IikKLSAgICAgIGVuZGlmKCkKKyAgc2V0KE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUworICAgICR7TVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTfQorICAgICR7TVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlN9CisgICAgKQorICBpZigiJHtMQU5HfSIgTUFUQ0hFUyAiKEN8Q1hYKSIpCisgICAgaWYoTVBJXyR7TEFOR31fSEVBREVSX0RJUikKKyAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9IRUFERVJfRElSfSIpCiAgICAgZW5kaWYoKQotICAgIGlmKE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9WQVJTKQotICAgICAgZm9yZWFjaChNUElfQURESVRJT05BTF9JTkNfRElSIElOIExJU1RTIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9WQVJTKQotICAgICAgICBsaXN0KEFQUEVORCBNUElfJHtMQU5HfV9JTkNMVURFX0RJUlMgIiR7TVBJXyR7TVBJX0FERElUSU9OQUxfSU5DX0RJUn1fSU5DTFVERV9ESVJ9IikKLSAgICAgIGVuZGZvcmVhY2goKQorICBlbHNlKCkgIyBGb3J0cmFuCisgICAgaWYoTVBJXyR7TEFOR31fRjc3X0hFQURFUl9ESVIpCisgICAgICBsaXN0KEFQUEVORCBNUElfJHtMQU5HfV9JTkNMVURFX0RJUlMgIiR7TVBJXyR7TEFOR31fRjc3X0hFQURFUl9ESVJ9IikKICAgICBlbmRpZigpCisgICAgaWYoTVBJXyR7TEFOR31fTU9EVUxFX0RJUikKKyAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9NT0RVTEVfRElSfSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUykKKyAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUykKICAgZW5kaWYoKQogZW5kbWFjcm8oKQogCi1mdW5jdGlvbihfTVBJX3NwbGl0X2luY2x1ZGVfZGlycyBMQU5HKQotICBpZigiJHtNUElfJHtMQU5HfV9DT01QSUxFUn0iIFNUUkVRVUFMICIke0NNQUtFXyR7TEFOR31fQ09NUElMRVJ9IikKLSAgICByZXR1cm4oKQotICBlbmRpZigpCittYWNybyhfTVBJX3NwbGl0X2luY2x1ZGVfZGlycyBMQU5HKQogICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBTZWFyY2ggSU5DTFVERV9QQVRIIGlmIGdpdmVuLgogICBpZihNUElfJHtMQU5HfV9JTkNMVURFX1BBVEgpCiAgICAgbGlzdChBUFBFTkQgTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgIiR7TVBJXyR7TEFOR31fSU5DTFVERV9QQVRIfSIpCkBAIC0xMTA5LDIzICsxMTAzLDMwIEBACiAgICMgRm9yIEMvQysrLCB3ZSBqdXN0IG5lZWQgdG8gaGF2ZSBhIGxvb2sgZm9yIG1waS5oLgogICBpZigiJHtMQU5HfSIgTUFUQ0hFUyAiKEN8Q1hYKSIpCiAgICAgZmluZF9wYXRoKE1QSV8ke0xBTkd9X0hFQURFUl9ESVIgIm1waS5oIgotICAgICAgSElOVFMgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30KKyAgICAgIEhJTlRTCisgICAgICAgICR7TVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTfQorICAgICAgICAke01QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTfQogICAgICkKICAgICBtYXJrX2FzX2FkdmFuY2VkKE1QSV8ke0xBTkd9X0hFQURFUl9ESVIpCiAgICAgaWYoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMpCiAgICAgICBsaXN0KFJFTU9WRV9JVEVNIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTICIke01QSV8ke0xBTkd9X0hFQURFUl9ESVJ9IikKICAgICBlbmRpZigpCisKICAgIyBGb3J0cmFuIGlzIG1vcmUgY29tcGxpY2F0ZWQgaGVyZTogQW4gaW1wbGVtZW50YXRpb24gY291bGQgcHJvdmlkZQogICAjIGFueSBvZiB0aGUgRm9ydHJhbiA3Ny85MC8yMDA4IEFQSXMgZm9yIE1QSS4gRm9yIGV4YW1wbGUsIE1TTVBJCiAgICMgb25seSBwcm92aWRlcyBGb3J0cmFuIDc3IGFuZCAtIGlmIG1waS5mOTAgaXMgYnVpbHQgLSBwb3RlbnRpYWxseQogICAjIGEgRm9ydHJhbiA5MCBtb2R1bGUuCiAgIGVsc2VpZigiJHtMQU5HfSIgU1RSRVFVQUwgIkZvcnRyYW4iKQogICAgIGZpbmRfcGF0aChNUElfJHtMQU5HfV9GNzdfSEVBREVSX0RJUiAibXBpZi5oIgotICAgICAgSElOVFMgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30KKyAgICAgIEhJTlRTCisgICAgICAgICR7TVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTfQorICAgICAgICAke01QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTfQogICAgICkKICAgICBmaW5kX3BhdGgoTVBJXyR7TEFOR31fTU9EVUxFX0RJUgogICAgICAgTkFNRVMgIm1waS5tb2QiICJtcGlfZjA4Lm1vZCIKLSAgICAgIEhJTlRTICR7TVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlN9CisgICAgICBISU5UUworICAgICAgICAke01QSV8ke0xBTkd9X0NPTVBJTEVSX0lOQ0xVREVfRElSU30KKyAgICAgICAgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30KICAgICApCiAgICAgaWYoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMpCiAgICAgICBsaXN0KFJFTU9WRV9JVEVNIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTCkBAIC0xMTM1LDYgKzExMzYsNyBAQAogICAgIGVuZGlmKCkKICAgICBtYXJrX2FzX2FkdmFuY2VkKE1QSV8ke0xBTkd9X0Y3N19IRUFERVJfRElSIE1QSV8ke0xBTkd9X01PRFVMRV9ESVIpCiAgIGVuZGlmKCkKKwogICAjIFJlbW92ZSBkdXBsaWNhdGVzIGFuZCBkZWZhdWx0IHN5c3RlbSBkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LgogICBpZihNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUykKICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTKQpAQCAtMTE0Miw4ICsxMTQ0LDkgQEAKICAgICAgIGxpc3QoUkVNT1ZFX0lURU0gTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgJHtNUElfSU1QTElDSVRfSU5DX0RJUn0pCiAgICAgZW5kZm9yZWFjaCgpCiAgIGVuZGlmKCkKKwogICBzZXQoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30gQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBhZGRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMiIEZPUkNFKQotZW5kZnVuY3Rpb24oKQorZW5kbWFjcm8oKQogCiBtYWNybyhfTVBJX2NyZWF0ZV9pbXBvcnRlZF90YXJnZXQgTEFORykKICAgaWYoTk9UIFRBUkdFVCBNUEk6Ok1QSV8ke0xBTkd9KQpAQCAtMTQwMywxMyArMTQwNiwxNCBAQAogICAgIGVuZGlmKCkKICAgZWxzZSgpCiAgICAgc2V0KF9NUElfRklORF8ke0xBTkd9IEZBTFNFKQorICAgIHN0cmluZyhBUFBFTkQgX01QSV9GQUlMX1JFQVNPTiAiTVBJIGNvbXBvbmVudCAnJHtMQU5HfScgd2FzIHJlcXVlc3RlZCwgYnV0IGxhbmd1YWdlICR7TEFOR30gaXMgbm90IGVuYWJsZWQuICAiKQogICBlbmRpZigpCiAgIGlmKF9NUElfRklORF8ke0xBTkd9KQogICAgIGlmKCAke0xBTkd9IFNUUkVRVUFMIENYWCBBTkQgTk9UIE1QSUNYWCBJTl9MSVNUIE1QSV9GSU5EX0NPTVBPTkVOVFMgKQogICAgICAgc2V0KE1QSV9DWFhfU0tJUF9NUElDWFggRkFMU0UgQ0FDSEUgQk9PTCAiSWYgdHJ1ZSwgdGhlIE1QSS0yIEMrKyBiaW5kaW5ncyBhcmUgZGlzYWJsZWQgdXNpbmcgZGVmaW5pdGlvbnMuIikKICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoTVBJX0NYWF9TS0lQX01QSUNYWCkKICAgICBlbmRpZigpCi0gICAgaWYoTk9UIChNUElfJHtMQU5HfV9MSUJfTkFNRVMgQU5EIChNUElfJHtMQU5HfV9JTkNMVURFX1BBVEggT1IgTVBJXyR7TEFOR31fSU5DTFVERV9ESVJTIE9SIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTKSkpCisgICAgaWYoTk9UIChNUElfJHtMQU5HfV9MSUJfTkFNRVMgQU5EIChNUElfJHtMQU5HfV9JTkNMVURFX1BBVEggT1IgTVBJXyR7TEFOR31fSU5DTFVERV9ESVJTIE9SIE1QSV8ke0xBTkd9X0NPTVBJTEVSX0lOQ0xVREVfRElSUykpKQogICAgICAgc2V0KE1QSV8ke0xBTkd9X1RSSUVEX0lNUExJQ0lUIEZBTFNFKQogICAgICAgc2V0KE1QSV8ke0xBTkd9X1dPUktTX0lNUExJQ0lUIEZBTFNFKQogICAgICAgaWYoTk9UIE1QSV8ke0xBTkd9X0NPTVBJTEVSIEFORCBOT1QgTVBJX0FTU1VNRV9OT19CVUlMVElOX01QSSkKQEAgLTE0OTQsNyArMTQ5OCw3IEBACiAgICAgICAgICAgICBpZigiJHtMQU5HfSIgU1RSRVFVQUwgIkNYWCIgQU5EIE1QSV9DX1dSQVBQRVJfRk9VTkQpCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFX09QVElPTlMgICAgICAgICAgJHtNUElfQ19DT01QSUxFX09QVElPTlN9ICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGF0aW9uIG9wdGlvbnMiICAgICAgICAgICApCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFX0RFRklOSVRJT05TICAgICAgJHtNUElfQ19DT01QSUxFX0RFRklOSVRJT05TfSBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGF0aW9uIGRlZmluaXRpb25zIiAgICAgICApCi0gICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUyAgJHtNUElfQ19JTkNMVURFX0RJUlN9ICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGFkZGl0aW9uYWwgaW5jbHVkZSBkaXJlY3RvcmllcyIpCisgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFUl9JTkNMVURFX0RJUlMgICAgJHtNUElfQ19JTkNMVURFX0RJUlN9ICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGVyIHdyYXBwZXIgaW5jbHVkZSBkaXJlY3RvcmllcyIpCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9MSU5LX0ZMQUdTICAgICAgICAgICAgICAgJHtNUElfQ19MSU5LX0ZMQUdTfSAgICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGxpbmtlciBmbGFncyIgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9MSUJfTkFNRVMgICAgICAgICAgICAgICAgJHtNUElfQ19MSUJfTkFNRVN9ICAgICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3QiICAgICApCiAgICAgICAgICAgICBlbHNlKCkKQEAgLTE1MDUsOCArMTUwOSwxMiBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKIAotICAgIF9NUElfc3BsaXRfaW5jbHVkZV9kaXJzKCR7TEFOR30pCi0gICAgX01QSV9hc3NlbWJsZV9pbmNsdWRlX2RpcnMoJHtMQU5HfSkKKyAgICBpZihOT1QgIiR7TVBJXyR7TEFOR31fQ09NUElMRVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV8ke0xBTkd9X0NPTVBJTEVSfSIpCisgICAgICBfTVBJX3NwbGl0X2luY2x1ZGVfZGlycygke0xBTkd9KQorICAgICAgX01QSV9hc3NlbWJsZV9pbmNsdWRlX2RpcnMoJHtMQU5HfSkKKyAgICBlbHNlKCkKKyAgICAgIHNldChNUElfJHtMQU5HfV9JTkNMVURFX0RJUlMgIiIpCisgICAgZW5kaWYoKQogICAgIF9NUElfYXNzZW1ibGVfbGlicmFyaWVzKCR7TEFOR30pCiAKICAgICBfTVBJX2FkanVzdF9jb21waWxlX2RlZmluaXRpb25zKCR7TEFOR30pCkBAIC0xNTIwLDEzICsxNTI4LDIxIEBACiAgICAgIyBOZXh0LCB3ZSdsbCBpbml0aWFsaXplIHRoZSBNUEkgdmFyaWFibGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBwcmV2aW91c2x5IHNldC4KICAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TICAgICAgICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gY29tcGlsYXRpb24gZmxhZ3MiICAgICAgICAgICAgICkKICAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUyAgICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gY29tcGlsYXRpb24gZGVmaW5pdGlvbnMiICAgICAgICkKKyAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gY29tcGlsZXIgd3JhcHBlciBpbmNsdWRlIGRpcmVjdG9yaWVzIikKICAgICBzZXQoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gYWRkaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzIikKICAgICBzZXQoTVBJXyR7TEFOR31fTElOS19GTEFHUyAgICAgICAgICAgICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gbGlua2VyIGZsYWdzIiAgICAgICAgICAgICAgICAgICkKICAgICBpZihOT1QgTVBJXyR7TEFOR31fQ09NUElMRVIgU1RSRVFVQUwgQ01BS0VfJHtMQU5HfV9DT01QSUxFUikKICAgICAgIHNldChNUElfJHtMQU5HfV9MSUJfTkFNRVMgICAgICAgICAgICAgICAgIiIgQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBsaWJyYXJpZXMgdG8gbGluayBhZ2FpbnN0IiAgICkKICAgICBlbmRpZigpCi0gICAgbWFya19hc19hZHZhbmNlZChNUElfJHtMQU5HfV9DT01QSUxFX09QVElPTlMgTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUyBNUElfJHtMQU5HfV9MSU5LX0ZMQUdTCi0gICAgICBNUElfJHtMQU5HfV9MSUJfTkFNRVMgTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgTVBJXyR7TEFOR31fQ09NUElMRVIpCisgICAgbWFya19hc19hZHZhbmNlZCgKKyAgICAgIE1QSV8ke0xBTkd9X0NPTVBJTEVfT1BUSU9OUworICAgICAgTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUworICAgICAgTVBJXyR7TEFOR31fTElOS19GTEFHUworICAgICAgTVBJXyR7TEFOR31fTElCX05BTUVTCisgICAgICBNUElfJHtMQU5HfV9DT01QSUxFUl9JTkNMVURFX0RJUlMKKyAgICAgIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTCisgICAgICBNUElfJHtMQU5HfV9DT01QSUxFUgorICAgICAgKQogCiAgICAgIyBJZiB3ZSd2ZSBmb3VuZCBNUEksIHRoZW4gd2UnbGwgcGVyZm9ybSBhZGRpdGlvbmFsIGFuYWx5c2lzOiBEZXRlcm1pbmUgdGhlIE1QSSB2ZXJzaW9uLCBNUEkgbGlicmFyeSB2ZXJzaW9uLCBzdXBwb3J0ZWQKICAgICAjIE1QSSBBUElzIChpLmUuIE1QSS0yIEMrKyBiaW5kaW5ncykuIEZvciBGb3J0cmFuIHdlIGFsc28gbmVlZCB0byBmaW5kIHNwZWNpZmljIHBhcmFtZXRlcnMgaWYgd2UncmUgdW5kZXIgTVBJLTMuCkBAIC0xNjc1LDcgKzE2OTEsOCBAQAogICAgICAgICBsaXN0KEFQUEVORCBNUElfJHtMQU5HfV9SRVFVSVJFRF9WQVJTICJNUElfJHtMQU5HfV9XT1JLUyIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQotICAgIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhNUElfJHtMQU5HfSBSRVFVSVJFRF9WQVJTICR7TVBJXyR7TEFOR31fUkVRVUlSRURfVkFSU30KKyAgICBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTVBJXyR7TEFOR30gTkFNRV9NSVNNQVRDSEVECisgICAgICBSRVFVSVJFRF9WQVJTICR7TVBJXyR7TEFOR31fUkVRVUlSRURfVkFSU30KICAgICAgIFZFUlNJT05fVkFSIE1QSV8ke0xBTkd9X1ZFUlNJT04pCiAKICAgICBpZihERUZJTkVEIE1QSV8ke0xBTkd9X1ZFUlNJT04pCkBAIC0xNzAwLDYgKzE3MTcsNyBAQAogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE1QSQogICAgIFJFUVVJUkVEX1ZBUlMgJHtfTVBJX1JFUV9WQVJTfQogICAgIFZFUlNJT05fVkFSICR7X01QSV9NSU5fVkVSU0lPTn0KKyAgICBSRUFTT05fRkFJTFVSRV9NRVNTQUdFICIke19NUElfRkFJTF9SRUFTT059IgogICAgIEhBTkRMRV9DT01QT05FTlRTKQogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE1hdGxhYi5jbWFrZSBiL01vZHVsZXMvRmluZE1hdGxhYi5jbWFrZQppbmRleCA5MmVlNzI5Li5lNDJjMjA2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRNYXRsYWIuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTWF0bGFiLmNtYWtlCkBAIC0yNDEsNiArMjQxLDcgQEAKIGVuZGlmKCkKIAogc2V0KE1BVExBQl9WRVJTSU9OU19NQVBQSU5HCisgICJSMjAyMGE9OS44IgogICAiUjIwMTliPTkuNyIKICAgIlIyMDE5YT05LjYiCiAgICJSMjAxOGI9OS41IgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kT3BlbkFDQy5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5BQ0MuY21ha2UKaW5kZXggNzQzZTBlMi4uMzk4ZGNmNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kT3BlbkFDQy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuQUNDLmNtYWtlCkBAIC0yNTQsNiArMjU0LDcgQEAKICAgICBfT1BFTkFDQ19TRVRfVkVSU0lPTl9CWV9TUEVDX0RBVEUoIiR7TEFOR30iKQogCiAgICAgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE9wZW5BQ0NfJHtMQU5HfQorICAgICAgTkFNRV9NSVNNQVRDSEVECiAgICAgICBSRVFVSVJFRF9WQVJTIE9wZW5BQ0NfJHtMQU5HfV9GTEFHUwogICAgICAgVkVSU0lPTl9WQVIgT3BlbkFDQ18ke0xBTkd9X1ZFUlNJT04KICAgICApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRPcGVuQUwuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPcGVuQUwuY21ha2UKaW5kZXggMjdkY2FmNS4uYzljMDkwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kT3BlbkFMLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZE9wZW5BTC5jbWFrZQpAQCAtNSwyNyArNSw0NSBAQAogRmluZE9wZW5BTAogLS0tLS0tLS0tLQogCi0KIEZpbmRzIE9wZW4gQXVkaW8gTGlicmFyeSAoT3BlbkFMKS4KLVRoaXMgbW9kdWxlIGRlZmluZXMgYGBPUEVOQUxfTElCUkFSWSBPUEVOQUxfRk9VTkRgYCwgaWYKLWZhbHNlLCBkbyBub3QgdHJ5IHRvIGxpbmsgdG8gT3BlbkFMIGBgT1BFTkFMX0lOQ0xVREVfRElSYGAsIHdoZXJlIHRvIGZpbmQKLXRoZSBoZWFkZXJzLgogCi1gYCRPUEVOQUxESVJgYCBpcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdvdWxkIGNvcnJlc3BvbmQgdG8gdGhlCi1gYC4vY29uZmlndXJlIC0tcHJlZml4PSRPUEVOQUxESVJgYCB1c2VkIGluIGJ1aWxkaW5nIE9wZW5BTC4KK1Byb2plY3RzIHVzaW5nIHRoaXMgbW9kdWxlIHNob3VsZCB1c2UgYGAjaW5jbHVkZSA8YWwuaD5gYCB0byBpbmNsdWRlIHRoZSBPcGVuQUwKK2hlYWRlciBmaWxlLCAqKm5vdCoqIGBgI2luY2x1ZGUgPEFMLmFsLmg+YGAuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlCitsYXR0ZXIgaXMgbm90IGVudGlyZWx5IHBvcnRhYmxlLiAgV2luZG93cy9DcmVhdGl2ZSBMYWJzIGRvZXMgbm90IGJ5IGRlZmF1bHQgcHV0Cit0aGVpciBoZWFkZXJzIGluIGBgQUwvYGAgYW5kIG1hY09TIHVzZXMgdGhlIGNvbnZlbnRpb24gYGA8T3BlbkFML2FsLmg+YGAuCiAKLUNyZWF0ZWQgYnkgRXJpYyBXaW5nLiAgVGhpcyB3YXMgaW5mbHVlbmNlZCBieSB0aGUgYGBGaW5kU0RMLmNtYWtlYGAKLW1vZHVsZS4KK0hpbnRzCiteXl5eXgorCitFbnZpcm9ubWVudCB2YXJpYWJsZSBgYCRPUEVOQUxESVJgYCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHByZWZpeCBvZiBPcGVuQUwKK2luc3RhbGxhdGlvbiB0byBiZSBmb3VuZC4KKworQnkgZGVmYXVsdCBvbiBtYWNPUywgc3lzdGVtIGZyYW1ld29yayBpcyBzZWFyY2ggZmlyc3QuICBJbiBvdGhlciB3b3JkcywKK09wZW5BTCBpcyBzZWFyY2hlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorCisxLiBTeXN0ZW0gZnJhbWV3b3JrOiBgYC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzYGAsIHdob3NlIHByaW9yaXR5IGNhbiBiZQorICAgY2hhbmdlZCB2aWEgc2V0dGluZyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX0ZSQU1FV09SS2AgdmFyaWFibGUuCisyLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBgYCRPUEVOQUxESVJgYC4KKzMuIFN5c3RlbSBwYXRocy4KKzQuIFVzZXItY29tcGlsZWQgZnJhbWV3b3JrOiBgYH4vTGlicmFyeS9GcmFtZXdvcmtzYGAuCis1LiBNYW51YWxseSBjb21waWxlZCBmcmFtZXdvcms6IGBgL0xpYnJhcnkvRnJhbWV3b3Jrc2BgLgorNi4gQWRkLW9uIHBhY2thZ2U6IGBgL29wdGBgLgorCitSZXN1bHQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKK2BgT1BFTkFMX0ZPVU5EYGAKKyAgSWYgZmFsc2UsIGRvIG5vdCB0cnkgdG8gbGluayB0byBPcGVuQUwKK2BgT1BFTkFMX0lOQ0xVREVfRElSYGAKKyAgT3BlbkFMIGluY2x1ZGUgZGlyZWN0b3J5CitgYE9QRU5BTF9MSUJSQVJZYGAKKyAgUGF0aCB0byB0aGUgT3BlbkFMIGxpYnJhcnkKK2BgT1BFTkFMX1ZFUlNJT05fU1RSSU5HYGAKKyAgSHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgT3BlbkFMCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi0jIFRoaXMgbWFrZXMgdGhlIHByZXN1bXB0aW9uIHRoYXQgeW91IGFyZSBpbmNsdWRlIGFsLmggbGlrZQotIyAjaW5jbHVkZSAiYWwuaCIKLSMgYW5kIG5vdAotIyAjaW5jbHVkZSA8QUwvYWwuaD4KLSMgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgbm90IGVudGlyZWx5IHBvcnRhYmxlLgotIyBXaW5kb3dzL0NyZWF0aXZlIExhYnMgZG9lcyBub3QgYnkgZGVmYXVsdCBwdXQgdGhlaXIgaGVhZGVycyBpbiBBTC8gYW5kCi0jIE9TIFggdXNlcyB0aGUgY29udmVudGlvbiA8T3BlbkFML2FsLmg+LgotIwogIyBGb3IgV2luZG93cywgQ3JlYXRpdmUgTGFicyBzZWVtcyB0byBoYXZlIGFkZGVkIGEgcmVnaXN0cnkga2V5IGZvciB0aGVpcgogIyBPcGVuQUwgMS4xIGluc3RhbGxlci4gSSBoYXZlIGFkZGVkIHRoYXQga2V5IHRvIHRoZSBsaXN0IG9mIHNlYXJjaCBwYXRocywKICMgaG93ZXZlciwgdGhlIGtleSBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgbGl0dGxlIGZyYWdpbGUgZGVwZW5kaW5nIG9uCkBAIC0zNiwzNiArNTQsMTcgQEAKICMgcGxhdGZvcm1zIGFyZSBpbnRyb2R1Y2VkLgogIyBUaGUgT3BlbkFMIDEuMCBpbnN0YWxsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB1c2VmdWwga2V5IEkgY2FuIHVzZS4KICMgSSBkbyBub3Qga25vdyBpZiB0aGUgTnZpZGlhIE9wZW5BTCBTREsgaGFzIGEgcmVnaXN0cnkga2V5LgotIwotIyBGb3IgT1MgWCwgcmVtZW1iZXIgdGhhdCBPcGVuQUwgd2FzIGFkZGVkIGJ5IEFwcGxlIGluIDEwLjQgKFRpZ2VyKS4KLSMgVG8gc3VwcG9ydCB0aGUgZnJhbWV3b3JrLCBJIG9yaWdpbmFsbHkgd3JvdGUgc3BlY2lhbCBmcmFtZXdvcmsgZGV0ZWN0aW9uCi0jIGNvZGUgaW4gdGhpcyBtb2R1bGUgd2hpY2ggSSBoYXZlIG5vdyByZW1vdmVkIHdpdGggQ01ha2UncyBpbnRyb2R1Y3Rpb24KLSMgb2YgbmF0aXZlIHN1cHBvcnQgZm9yIGZyYW1ld29ya3MuCi0jIEluIGFkZGl0aW9uLCBPcGVuQUwgaXMgb3BlbiBzb3VyY2UsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIG9uIFBhbnRoZXIuCi0jIEZ1cnRoZXJtb3JlLCBkdWUgdG8gYnVncyBpbiB0aGUgaW5pdGlhbCBPcGVuQUwgcmVsZWFzZSwgYW5kIHRoZQotIyB0cmFuc2l0aW9uIHRvIE9wZW5BTCAxLjEsIGl0IGlzIGNvbW1vbiB0byBuZWVkIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbgotIyBmcmFtZXdvcmsuCi0jIFBlciBteSByZXF1ZXN0LCBDTWFrZSBzaG91bGQgc2VhcmNoIGZvciBmcmFtZXdvcmtzIGZpcnN0IGluCi0jIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0jIH4vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5BTC5mcmFtZXdvcmsvSGVhZGVycwotIyAvTGlicmFyeS9GcmFtZXdvcmtzL09wZW5BTC5mcmFtZXdvcmsvSGVhZGVycwotIyAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuQUwuZnJhbWV3b3JrL0hlYWRlcnMKLSMKLSMgT24gT1MgWCwgdGhpcyB3aWxsIHByZWZlciB0aGUgRnJhbWV3b3JrIHZlcnNpb24gKGlmIGZvdW5kKSBvdmVyIG90aGVycy4KLSMgUGVvcGxlIHdpbGwgaGF2ZSB0byBtYW51YWxseSBjaGFuZ2UgdGhlIGNhY2hlIHZhbHVlcyBvZgotIyBPUEVOQUxfTElCUkFSWSB0byBvdmVycmlkZSB0aGlzIHNlbGVjdGlvbiBvciBzZXQgdGhlIENNYWtlIGVudmlyb25tZW50Ci0jIENNQUtFX0lOQ0xVREVfUEFUSCB0byBtb2RpZnkgdGhlIHNlYXJjaCBwYXRocy4KIAogZmluZF9wYXRoKE9QRU5BTF9JTkNMVURFX0RJUiBhbC5oCiAgIEhJTlRTCiAgICAgRU5WIE9QRU5BTERJUgotICBQQVRIX1NVRkZJWEVTIGluY2x1ZGUvQUwgaW5jbHVkZS9PcGVuQUwgaW5jbHVkZSBBTCBPcGVuQUwKICAgUEFUSFMKLSAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKLSAgL0xpYnJhcnkvRnJhbWV3b3JrcwotICAvb3B0Ci0gIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDcmVhdGl2ZVwgTGFic1xcT3BlbkFMXCAxLjFcIFNvZnR3YXJlXCBEZXZlbG9wbWVudFwgS2l0XFwxLjAwLjAwMDA7SW5zdGFsbERpcl0KLSkKKyAgICB+L0xpYnJhcnkvRnJhbWV3b3JrcworICAgIC9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAvb3B0CisgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENyZWF0aXZlXCBMYWJzXFxPcGVuQUxcIDEuMVwgU29mdHdhcmVcIERldmVsb3BtZW50XCBLaXRcXDEuMDAuMDAwMDtJbnN0YWxsRGlyXQorICBQQVRIX1NVRkZJWEVTIGluY2x1ZGUvQUwgaW5jbHVkZS9PcGVuQUwgaW5jbHVkZSBBTCBPcGVuQUwKKyAgKQogCiBpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCiAgIHNldChfT3BlbkFMX0FSQ0hfRElSIGxpYnMvV2luNjQpCkBAIC03NywxNyArNzYsMjEgQEAKICAgTkFNRVMgT3BlbkFMIGFsIG9wZW5hbCBPcGVuQUwzMgogICBISU5UUwogICAgIEVOViBPUEVOQUxESVIKLSAgUEFUSF9TVUZGSVhFUyBsaWJ4MzIgbGliNjQgbGliIGxpYnM2NCBsaWJzICR7X09wZW5BTF9BUkNIX0RJUn0KICAgUEFUSFMKLSAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKLSAgL0xpYnJhcnkvRnJhbWV3b3JrcwotICAvb3B0Ci0gIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDcmVhdGl2ZVwgTGFic1xcT3BlbkFMXCAxLjFcIFNvZnR3YXJlXCBEZXZlbG9wbWVudFwgS2l0XFwxLjAwLjAwMDA7SW5zdGFsbERpcl0KLSkKKyAgICB+L0xpYnJhcnkvRnJhbWV3b3JrcworICAgIC9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAvb3B0CisgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENyZWF0aXZlXCBMYWJzXFxPcGVuQUxcIDEuMVwgU29mdHdhcmVcIERldmVsb3BtZW50XCBLaXRcXDEuMDAuMDAwMDtJbnN0YWxsRGlyXQorICBQQVRIX1NVRkZJWEVTIGxpYngzMiBsaWI2NCBsaWIgbGliczY0IGxpYnMgJHtfT3BlbkFMX0FSQ0hfRElSfQorICApCiAKIHVuc2V0KF9PcGVuQUxfQVJDSF9ESVIpCiAKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKLUZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhPcGVuQUwgIERFRkFVTFRfTVNHICBPUEVOQUxfTElCUkFSWSBPUEVOQUxfSU5DTFVERV9ESVIpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoCisgIE9wZW5BTAorICBSRVFVSVJFRF9WQVJTIE9QRU5BTF9MSUJSQVJZIE9QRU5BTF9JTkNMVURFX0RJUgorICBWRVJTSU9OX1ZBUiBPUEVOQUxfVkVSU0lPTl9TVFJJTkcKKyAgKQogCiBtYXJrX2FzX2FkdmFuY2VkKE9QRU5BTF9MSUJSQVJZIE9QRU5BTF9JTkNMVURFX0RJUikKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5DTC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5DTC5jbWFrZQppbmRleCA5ODkxNzI0Li4zNGEyMDNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRPcGVuQ0wuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3BlbkNMLmNtYWtlCkBAIC03OCw2ICs3OCw4IEBACiAgICAgRU5WIENVREFfUEFUSAogICAgIEVOViBBVElTVFJFQU1TREtST09UCiAgICAgRU5WIE9DTF9ST09UCisgICAgL3Vzci9sb2NhbC9jdWRhCisgICAgL29wdC9jdWRhCiAgIFBBVEhfU1VGRklYRVMKICAgICBpbmNsdWRlCiAgICAgT3BlbkNML2NvbW1vbi9pbmMKQEAgLTEyNiw2ICsxMjgsOCBAQAogICAgICAgUEFUSFMKICAgICAgICAgRU5WIEFNREFQUFNES1JPT1QKICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgICAvdXNyL2xvY2FsL2N1ZGEKKyAgICAgICAgL29wdC9jdWRhCiAgICAgICBQQVRIX1NVRkZJWEVTCiAgICAgICAgIGxpYi94ODYKICAgICAgICAgbGliKQpAQCAtMTM1LDYgKzEzOSw4IEBACiAgICAgICBQQVRIUwogICAgICAgICBFTlYgQU1EQVBQU0RLUk9PVAogICAgICAgICBFTlYgQ1VEQV9QQVRICisgICAgICAgIC91c3IvbG9jYWwvY3VkYQorICAgICAgICAvb3B0L2N1ZGEKICAgICAgIFBBVEhfU1VGRklYRVMKICAgICAgICAgbGliL3g4Nl82NAogICAgICAgICBsaWIveDY0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRPcGVuR0wuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPcGVuR0wuY21ha2UKaW5kZXggMjNiYjAwMWQuLjc0MzkyZGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9wZW5HTC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuR0wuY21ha2UKQEAgLTEzMCw2ICsxMzAsOCBAQAogICBzZXQoT1BFTkdMX1VTRV8ke19DT01QT05FTlR9IDEpCiBlbmRmb3JlYWNoKCkKIAorc2V0KF9PcGVuR0xfQ0FDSEVfVkFSUykKKwogaWYgKENZR1dJTikKICAgZmluZF9wYXRoKE9QRU5HTF9JTkNMVURFX0RJUiBHTC9nbC5oICkKICAgbGlzdChBUFBFTkQgX09wZW5HTF9SRVFVSVJFRF9WQVJTIE9QRU5HTF9JTkNMVURFX0RJUikKQEAgLTEzNyw2ICsxMzksMTEgQEAKICAgZmluZF9saWJyYXJ5KE9QRU5HTF9nbF9MSUJSQVJZIG9wZW5nbDMyICkKICAgZmluZF9saWJyYXJ5KE9QRU5HTF9nbHVfTElCUkFSWSBnbHUzMiApCiAKKyAgbGlzdChBUFBFTkQgX09wZW5HTF9DQUNIRV9WQVJTCisgICAgT1BFTkdMX0lOQ0xVREVfRElSCisgICAgT1BFTkdMX2dsX0xJQlJBUlkKKyAgICBPUEVOR0xfZ2x1X0xJQlJBUlkKKyAgICApCiBlbHNlaWYgKFdJTjMyKQogCiAgIGlmKEJPUkxBTkQpCkBAIC0xNDcsNiArMTU0LDEwIEBACiAgICAgc2V0IChPUEVOR0xfZ2x1X0xJQlJBUlkgZ2x1MzIgQ0FDSEUgU1RSSU5HICJHTFUgbGlicmFyeSBmb3Igd2luMzIiKQogICBlbmRpZigpCiAKKyAgbGlzdChBUFBFTkQgX09wZW5HTF9DQUNIRV9WQVJTCisgICAgT1BFTkdMX2dsX0xJQlJBUlkKKyAgICBPUEVOR0xfZ2x1X0xJQlJBUlkKKyAgICApCiBlbHNlaWYgKEFQUExFKQogICAjIFRoZSBPcGVuR0wuZnJhbWV3b3JrIHByb3ZpZGVzIGJvdGggZ2wgYW5kIGdsdQogICBmaW5kX2xpYnJhcnkoT1BFTkdMX2dsX0xJQlJBUlkgT3BlbkdMIERPQyAiT3BlbkdMIGxpYnJhcnkgZm9yIE9TIFgiKQpAQCAtMTU1LDYgKzE2NiwxMSBAQAogICBmaW5kX3BhdGgoT1BFTkdMX0lOQ0xVREVfRElSIE9wZW5HTC9nbC5oIERPQyAiSW5jbHVkZSBmb3IgT3BlbkdMIG9uIE9TIFgiKQogICBsaXN0KEFQUEVORCBfT3BlbkdMX1JFUVVJUkVEX1ZBUlMgT1BFTkdMX0lOQ0xVREVfRElSKQogCisgIGxpc3QoQVBQRU5EIF9PcGVuR0xfQ0FDSEVfVkFSUworICAgIE9QRU5HTF9JTkNMVURFX0RJUgorICAgIE9QRU5HTF9nbF9MSUJSQVJZCisgICAgT1BFTkdMX2dsdV9MSUJSQVJZCisgICAgKQogZWxzZSgpCiAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJIUC1VWCIpCiAgICAgIyBIYW5kbGUgSFAtVVggY2FzZXMgd2hlcmUgd2Ugb25seSB3YW50IHRvIGZpbmQgT3BlbkdMIGluIGVpdGhlciBocHV4NjQKQEAgLTE5NCw2ICsyMTAsMTIgQEAKICAgICAvdXNyL29wZW53aW4vc2hhcmUvaW5jbHVkZQogICAgIC9vcHQvZ3JhcGhpY3MvT3BlbkdML2luY2x1ZGUKICAgKQorICBsaXN0KEFQUEVORCBfT3BlbkdMX0NBQ0hFX1ZBUlMKKyAgICBPUEVOR0xfSU5DTFVERV9ESVIKKyAgICBPUEVOR0xfR0xYX0lOQ0xVREVfRElSCisgICAgT1BFTkdMX0VHTF9JTkNMVURFX0RJUgorICAgIE9QRU5HTF94bWVzYV9JTkNMVURFX0RJUgorICAgICkKIAogICAjIFNlYXJjaCBmb3IgdGhlIEdMVk5EIGxpYnJhcmllcy4gIFdlIGRvIHRoaXMgcmVnYXJkbGVzcyBvZiBDT01QT05FTlRTOyB3ZSdsbAogICAjIHRha2UgaW50byBhY2NvdW50IHRoZSBDT01QT05FTlRTIGxvZ2ljIGxhdGVyLgpAQCAtMjIyLDYgKzI0NCwxMyBAQAogICAgICAgICAgIC91c3Ivc2hsaWIKICAgKQogCisgIGxpc3QoQVBQRU5EIF9PcGVuR0xfQ0FDSEVfVkFSUworICAgIE9QRU5HTF9vcGVuZ2xfTElCUkFSWQorICAgIE9QRU5HTF9nbHhfTElCUkFSWQorICAgIE9QRU5HTF9lZ2xfTElCUkFSWQorICAgIE9QRU5HTF9nbHVfTElCUkFSWQorICAgICkKKwogICBzZXQoX09wZW5HTF9HTF9QT0xJQ1lfV0FSTiAwKQogICBpZihOT1QgREVGSU5FRCBPcGVuR0xfR0xfUFJFRkVSRU5DRSkKICAgICBzZXQoT3BlbkdMX0dMX1BSRUZFUkVOQ0UgIiIpCkBAIC0yNjgsNiArMjk3LDcgQEAKICAgICAgICAgICAgICR7X09QRU5HTF9MSUJfUEFUSH0KICAgICAgIFBBVEhfU1VGRklYRVMgbGliZ2x2bmQKICAgICAgICkKKyAgICBsaXN0KEFQUEVORCBfT3BlbkdMX0NBQ0hFX1ZBUlMgT1BFTkdMX2dsX0xJQlJBUlkpCiAgIGVuZGlmKCkKIAogICBpZihfT3BlbkdMX0dMX1BPTElDWV9XQVJOIEFORCBPUEVOR0xfZ2xfTElCUkFSWSBBTkQgT1BFTkdMX29wZW5nbF9MSUJSQVJZIEFORCBPUEVOR0xfZ2x4X0xJQlJBUlkpCkBAIC01MzIsMTQgKzU2Miw1IEBACiAjIFRoaXMgZGVwcmVjYXRlZCBzZXR0aW5nIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggQ01ha2UxLjQKIHNldChPUEVOR0xfSU5DTFVERV9QQVRIICR7T1BFTkdMX0lOQ0xVREVfRElSfSkKIAotbWFya19hc19hZHZhbmNlZCgKLSAgT1BFTkdMX0lOQ0xVREVfRElSCi0gIE9QRU5HTF94bWVzYV9JTkNMVURFX0RJUgotICBPUEVOR0xfZWdsX0xJQlJBUlkKLSAgT1BFTkdMX2dsdV9MSUJSQVJZCi0gIE9QRU5HTF9nbHhfTElCUkFSWQotICBPUEVOR0xfZ2xfTElCUkFSWQotICBPUEVOR0xfb3BlbmdsX0xJQlJBUlkKLSAgT1BFTkdMX0VHTF9JTkNMVURFX0RJUgotICBPUEVOR0xfR0xYX0lOQ0xVREVfRElSCi0pCittYXJrX2FzX2FkdmFuY2VkKCR7X09wZW5HTF9DQUNIRV9WQVJTfSkKK3Vuc2V0KF9PcGVuR0xfQ0FDSEVfVkFSUykKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5NUC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5NUC5jbWFrZQppbmRleCA5MGQxYzNlLi5hNGIxZTFlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRPcGVuTVAuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3Blbk1QLmNtYWtlCkBAIC05Niw3ICs5Niw3IEBACiAgICAgdW5zZXQoT3Blbk1QX0ZMQUdfQ0FORElEQVRFUykKIAogICAgIHNldChPTVBfRkxBR19HTlUgIi1mb3Blbm1wIikKLSAgICBzZXQoT01QX0ZMQUdfQ2xhbmcgIi1mb3Blbm1wPWxpYm9tcCIgIi1mb3Blbm1wPWxpYmlvbXA1IiAiLWZvcGVubXAiKQorICAgIHNldChPTVBfRkxBR19DbGFuZyAiLWZvcGVubXA9bGlib21wIiAiLWZvcGVubXA9bGliaW9tcDUiICItZm9wZW5tcCIgIi1YY2xhbmcgLWZvcGVubXAiKQogICAgIHNldChPTVBfRkxBR19BcHBsZUNsYW5nICItWGNsYW5nIC1mb3Blbm1wIikKICAgICBzZXQoT01QX0ZMQUdfSFAgIitPb3Blbm1wIikKICAgICBpZihXSU4zMikKQEAgLTI5OSw2ICsyOTksMjUgQEAKICAgICAgICAgICBicmVhaygpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYoQ01BS0VfJHtMQU5HfV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiQ2xhbmciIEFORCBXSU4zMikKKyAgICAgICMgQ2hlY2sgZm9yIHNlcGFyYXRlIE9wZW5NUCBsaWJyYXJ5IGZvciBDbGFuZyBvbiBXaW5kb3dzCisgICAgICBmaW5kX2xpYnJhcnkoT3Blbk1QX2xpYm9tcF9MSUJSQVJZCisgICAgICAgIE5BTUVTIGxpYm9tcCBsaWJnb21wIGxpYmlvbXA1CisgICAgICAgIEhJTlRTICR7Q01BS0VfJHtMQU5HfV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfQorICAgICAgKQorICAgICAgbWFya19hc19hZHZhbmNlZChPcGVuTVBfbGlib21wX0xJQlJBUlkpCisgICAgICBpZihPcGVuTVBfbGlib21wX0xJQlJBUlkpCisgICAgICAgIHRyeV9jb21waWxlKCBPcGVuTVBfQ09NUElMRV9SRVNVTFRfJHtGTEFHX01PREV9XyR7T1BFTk1QX1BMQUlOX0ZMQUd9ICR7Q01BS0VfQklOQVJZX0RJUn0gJHtfT1BFTk1QX1RFU1RfU1JDfQorICAgICAgICAgIENNQUtFX0ZMQUdTICItRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7T1BFTk1QX0ZMQUdTX1RFU1R9IgorICAgICAgICAgIExJTktfTElCUkFSSUVTICR7Q01BS0VfJHtMQU5HfV9WRVJCT1NFX0ZMQUd9ICR7T3Blbk1QX2xpYm9tcF9MSUJSQVJZfQorICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPcGVuTVBfVFJZX0NPTVBJTEVfT1VUUFVUCisgICAgICAgICkKKyAgICAgICAgaWYoT3Blbk1QX0NPTVBJTEVfUkVTVUxUXyR7RkxBR19NT0RFfV8ke09QRU5NUF9QTEFJTl9GTEFHfSkKKyAgICAgICAgICBzZXQoIiR7T1BFTk1QX0ZMQUdfVkFSfSIgIiR7T1BFTk1QX0ZMQUd9IiBQQVJFTlRfU0NPUEUpCisgICAgICAgICAgc2V0KCIke09QRU5NUF9MSUJfTkFNRVNfVkFSfSIgImxpYm9tcCIgUEFSRU5UX1NDT1BFKQorICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZWN0aW5nICR7TEFOR30gT3Blbk1QIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPcGVuTVBfVFJZX0NPTVBJTEVfT1VUUFVUfVxuXG4iKQpAQCAtNDI1LDEzICs0NDQsMTIgQEAKICAgICBpZihOT1QgREVGSU5FRCBPcGVuTVBfJHtMQU5HfV9GTEFHUyBPUiAiJHtPcGVuTVBfJHtMQU5HfV9GTEFHU30iIFNUUkVRVUFMICJOT1RGT1VORCIKICAgICAgIE9SIE5PVCBERUZJTkVEIE9wZW5NUF8ke0xBTkd9X0xJQl9OQU1FUyBPUiAiJHtPcGVuTVBfJHtMQU5HfV9MSUJfTkFNRVN9IiBTVFJFUVVBTCAiTk9URk9VTkQiKQogICAgICAgX09QRU5NUF9HRVRfRkxBR1MoIiR7TEFOR30iICIke0xBTkd9IiBPcGVuTVBfJHtMQU5HfV9GTEFHU19XT1JLIE9wZW5NUF8ke0xBTkd9X0xJQl9OQU1FU19XT1JLKQorICAgICAgc2V0KE9wZW5NUF8ke0xBTkd9X0ZMQUdTICIke09wZW5NUF8ke0xBTkd9X0ZMQUdTX1dPUkt9IgorICAgICAgICBDQUNIRSBTVFJJTkcgIiR7TEFOR30gY29tcGlsZXIgZmxhZ3MgZm9yIE9wZW5NUCBwYXJhbGxlbGl6YXRpb24iIEZPUkNFKQorICAgICAgc2V0KE9wZW5NUF8ke0xBTkd9X0xJQl9OQU1FUyAiJHtPcGVuTVBfJHtMQU5HfV9MSUJfTkFNRVNfV09SS30iCisgICAgICAgIENBQ0hFIFNUUklORyAiJHtMQU5HfSBjb21waWxlciBsaWJyYXJpZXMgZm9yIE9wZW5NUCBwYXJhbGxlbGl6YXRpb24iIEZPUkNFKQorICAgICAgbWFya19hc19hZHZhbmNlZChPcGVuTVBfJHtMQU5HfV9GTEFHUyBPcGVuTVBfJHtMQU5HfV9MSUJfTkFNRVMpCiAgICAgZW5kaWYoKQotCi0gICAgc2V0KE9wZW5NUF8ke0xBTkd9X0ZMQUdTICIke09wZW5NUF8ke0xBTkd9X0ZMQUdTX1dPUkt9IgotICAgICAgQ0FDSEUgU1RSSU5HICIke0xBTkd9IGNvbXBpbGVyIGZsYWdzIGZvciBPcGVuTVAgcGFyYWxsZWxpemF0aW9uIikKLSAgICBzZXQoT3Blbk1QXyR7TEFOR31fTElCX05BTUVTICIke09wZW5NUF8ke0xBTkd9X0xJQl9OQU1FU19XT1JLfSIKLSAgICAgIENBQ0hFIFNUUklORyAiJHtMQU5HfSBjb21waWxlciBsaWJyYXJpZXMgZm9yIE9wZW5NUCBwYXJhbGxlbGl6YXRpb24iKQotICAgIG1hcmtfYXNfYWR2YW5jZWQoT3Blbk1QXyR7TEFOR31fRkxBR1MgT3Blbk1QXyR7TEFOR31fTElCX05BTUVTKQogICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKIApAQCAtNTA5LDYgKzUyNyw3IEBACiAgICAgZW5kaWYoKQogCiAgICAgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE9wZW5NUF8ke0xBTkd9CisgICAgICBOQU1FX01JU01BVENIRUQKICAgICAgIFJFUVVJUkVEX1ZBUlMgT3Blbk1QXyR7TEFOR31fRkxBR1MgJHtfT1BFTk1QXyR7TEFOR31fUkVRVUlSRURfTElCX1ZBUlN9CiAgICAgICBWRVJTSU9OX1ZBUiBPcGVuTVBfJHtMQU5HfV9WRVJTSU9OCiAgICAgKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kT3BlblNTTC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5TU0wuY21ha2UKaW5kZXggNDc4YTU5Mi4uYWY3MTNkNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kT3BlblNTTC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuU1NMLmNtYWtlCkBAIC0xMzEsNiArMTMxLDcgQEAKICAgJHtfT1BFTlNTTF9ST09UX0hJTlRTX0FORF9QQVRIU30KICAgSElOVFMKICAgICAke19PUEVOU1NMX0lOQ0xVREVESVJ9CisgICAgJHtfT1BFTlNTTF9JTkNMVURFX0RJUlN9CiAgIFBBVEhfU1VGRklYRVMKICAgICBpbmNsdWRlCiApCkBAIC0zMTksNiArMzIwLDcgQEAKICAgICAke19PUEVOU1NMX1JPT1RfSElOVFNfQU5EX1BBVEhTfQogICAgIEhJTlRTCiAgICAgICAke19PUEVOU1NMX0xJQkRJUn0KKyAgICAgICR7X09QRU5TU0xfTElCUkFSWV9ESVJTfQogICAgIFBBVEhfU1VGRklYRVMKICAgICAgIGxpYgogICApCkBAIC0zMzAsNiArMzMyLDcgQEAKICAgICAke19PUEVOU1NMX1JPT1RfSElOVFNfQU5EX1BBVEhTfQogICAgIEhJTlRTCiAgICAgICAke19PUEVOU1NMX0xJQkRJUn0KKyAgICAgICR7X09QRU5TU0xfTElCUkFSWV9ESVJTfQogICAgIFBBVEhfU1VGRklYRVMKICAgICAgIGxpYgogICApCkBAIC00NTUsNyArNDU4LDcgQEAKICAgICAiQ291bGQgTk9UIGZpbmQgT3BlblNTTCwgdHJ5IHRvIHNldCB0aGUgcGF0aCB0byBPcGVuU1NMIHJvb3QgZm9sZGVyIGluIHRoZSBzeXN0ZW0gdmFyaWFibGUgT1BFTlNTTF9ST09UX0RJUiIKICkKIAotbWFya19hc19hZHZhbmNlZChPUEVOU1NMX0lOQ0xVREVfRElSIE9QRU5TU0xfTElCUkFSSUVTKQorbWFya19hc19hZHZhbmNlZChPUEVOU1NMX0lOQ0xVREVfRElSKQogCiBpZihPUEVOU1NMX0ZPVU5EKQogICBpZihOT1QgVEFSR0VUIE9wZW5TU0w6OkNyeXB0byBBTkQKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFBORy5jbWFrZSBiL01vZHVsZXMvRmluZFBORy5jbWFrZQppbmRleCBiZDQwMGM3Li5mMWZlODlhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQTkcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUE5HLmNtYWtlCkBAIC05NCw2ICs5NCwxMCBAQAogICAgICAgc2V0KFBOR19JTkNMVURFX0RJUlMgJHtQTkdfUE5HX0lOQ0xVREVfRElSfSAke1pMSUJfSU5DTFVERV9ESVJ9ICkKICAgICAgIHNldChQTkdfSU5DTFVERV9ESVIgJHtQTkdfSU5DTFVERV9ESVJTfSApICMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgIHNldChQTkdfTElCUkFSSUVTICR7UE5HX0xJQlJBUll9ICR7WkxJQl9MSUJSQVJZfSkKKyAgICAgIGlmKChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKSBBTkQKKyAgICAgICAgICgiJHtQTkdfTElCUkFSWX0iIE1BVENIRVMgIlxcJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVh9JCIpKQorICAgICAgICBsaXN0KEFQUEVORCBQTkdfTElCUkFSSUVTIG0pCisgICAgICBlbmRpZigpCiAKICAgICAgIGlmIChDWUdXSU4pCiAgICAgICAgIGlmKEJVSUxEX1NIQVJFRF9MSUJTKQpAQCAtMTEwLDYgKzExNCwxMiBAQAogICAgICAgICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICIke19QTkdfQ09NUElMRV9ERUZJTklUSU9OU30iCiAgICAgICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7UE5HX0lOQ0xVREVfRElSU30iCiAgICAgICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIFpMSUI6OlpMSUIpCisgICAgICAgIGlmKChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKSBBTkQKKyAgICAgICAgICAgKCIke1BOR19MSUJSQVJZfSIgTUFUQ0hFUyAiXFwke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWH0kIikpCisgICAgICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBQTkc6OlBORyBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBtKQorICAgICAgICBlbmRpZigpCisKICAgICAgICAgaWYoRVhJU1RTICIke1BOR19MSUJSQVJZfSIpCiAgICAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFBORzo6UE5HIFBST1BFUlRJRVMKICAgICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFUyAiQyIKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCmluZGV4IGQ4MjRlZTguLmEwNzgwNDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZQpAQCAtMjcsNiArMjcsNyBAQAogICAgICAgW1ZFUlNJT05fVkFSIDx2ZXJzaW9uLXZhcj5dCiAgICAgICBbSEFORExFX0NPTVBPTkVOVFNdCiAgICAgICBbQ09ORklHX01PREVdCisgICAgICBbTkFNRV9NSVNNQVRDSEVEXQogICAgICAgW1JFQVNPTl9GQUlMVVJFX01FU1NBR0UgPHJlYXNvbi1mYWlsdXJlLW1lc3NhZ2U+XQogICAgICAgW0ZBSUxfTUVTU0FHRSA8Y3VzdG9tLWZhaWx1cmUtbWVzc2FnZT5dCiAgICAgICApCkBAIC05MCw2ICs5MSwxMiBAQAogICAgIFNwZWNpZnkgYSBjdXN0b20gZmFpbHVyZSBtZXNzYWdlIGluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQKICAgICBnZW5lcmF0ZWQgbWVzc2FnZS4gIE5vdCByZWNvbW1lbmRlZC4KIAorICBgYE5BTUVfTUlTTUFUQ0hFRGBgCisgICAgSW5kaWNhdGUgdGhhdCB0aGUgYGA8UGFja2FnZU5hbWU+YGAgZG9lcyBub3QgbWF0Y2gKKyAgICBgYCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9YGAuIFRoaXMgaXMgdXN1YWxseSBhIG1pc3Rha2UgYW5kIHJhaXNlcyBhCisgICAgd2FybmluZywgYnV0IGl0IG1heSBiZSBpbnRlbnRpb25hbCBmb3IgdXNhZ2Ugb2YgdGhlIGNvbW1hbmQgZm9yIGNvbXBvbmVudHMKKyAgICBvZiBhIGxhcmdlciBwYWNrYWdlLgorCiBFeGFtcGxlIGZvciB0aGUgc2ltcGxlIHNpZ25hdHVyZToKIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCkBAIC0xMDYsNiArMTEzLDE3IEBACiB0aGUgY29udGVudCBvZiB0aGUgZmlyc3QgYGA8cmVxdWlyZWQtdmFyPmBgLiAgT24gcmVwZWF0ZWQgQ01ha2UgcnVucywKIHRoZSBzYW1lIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcHJpbnRlZCBhZ2Fpbi4KIAorLi4gbm90ZTo6CisKKyAgSWYgYGA8UGFja2FnZU5hbWU+YGAgZG9lcyBub3QgbWF0Y2ggYGBDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRWBgIGZvciB0aGUKKyAgY2FsbGluZyBtb2R1bGUsIGEgd2FybmluZyB0aGF0IHRoZXJlIGlzIGEgbWlzbWF0Y2ggaXMgZ2l2ZW4uIFRoZQorICBgYEZQSFNBX05BTUVfTUlTTUFUQ0hFRGBgIHZhcmlhYmxlIG1heSBiZSBzZXQgdG8gYnlwYXNzIHRoZSB3YXJuaW5nIGlmIHVzaW5nCisgIHRoZSBvbGQgc2lnbmF0dXJlIGFuZCB0aGUgYGBOQU1FX01JU01BVENIRURgYCBhcmd1bWVudCB1c2luZyB0aGUgbmV3CisgIHNpZ25hdHVyZS4gVG8gYXZvaWQgZm9yY2luZyB0aGUgY2FsbGVyIHRvIHJlcXVpcmUgbmV3ZXIgdmVyc2lvbnMgb2YgQ01ha2UgZm9yCisgIHVzYWdlLCB0aGUgdmFyaWFibGUncyB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgZGVmaW5lZCB3aGVuIHRoZQorICBgYE5BTUVfTUlTTUFUQ0hFRGBgIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgZm9yIHRoZSBuZXcgc2lnbmF0dXJlIChidXQgdXNpbmcKKyAgYm90aCBpcyBhbiBlcnJvcikuLgorCiBFeGFtcGxlIGZvciB0aGUgZnVsbCBzaWduYXR1cmU6CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpAQCAtMTkwLDE1ICsyMDgsMzIgQEAKIAogZnVuY3Rpb24oRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTIF9OQU1FIF9GSVJTVF9BUkcpCiAKLSMgU2V0IHVwIHRoZSBhcmd1bWVudHMgZm9yIGBjbWFrZV9wYXJzZV9hcmd1bWVudHNgLgotICBzZXQob3B0aW9ucyAgQ09ORklHX01PREUgIEhBTkRMRV9DT01QT05FTlRTKQorICAjIFNldCB1cCB0aGUgYXJndW1lbnRzIGZvciBgY21ha2VfcGFyc2VfYXJndW1lbnRzYC4KKyAgc2V0KG9wdGlvbnMgIENPTkZJR19NT0RFICBIQU5ETEVfQ09NUE9ORU5UUyBOQU1FX01JU01BVENIRUQpCiAgIHNldChvbmVWYWx1ZUFyZ3MgIEZBSUxfTUVTU0FHRSAgUkVBU09OX0ZBSUxVUkVfTUVTU0FHRSBWRVJTSU9OX1ZBUiAgRk9VTkRfVkFSKQogICBzZXQobXVsdGlWYWx1ZUFyZ3MgUkVRVUlSRURfVkFSUykKIAotIyBDaGVjayB3aGV0aGVyIHdlIGFyZSBpbiAnc2ltcGxlJyBvciAnZXh0ZW5kZWQnIG1vZGU6CisgICMgQ2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gJ3NpbXBsZScgb3IgJ2V4dGVuZGVkJyBtb2RlOgogICBzZXQoX0tFWVdPUkRTX0ZPUl9FWFRFTkRFRF9NT0RFICAke29wdGlvbnN9ICR7b25lVmFsdWVBcmdzfSAke211bHRpVmFsdWVBcmdzfSApCiAgIGxpc3QoRklORCBfS0VZV09SRFNfRk9SX0VYVEVOREVEX01PREUgIiR7X0ZJUlNUX0FSR30iIElOREVYKQogCisgIHVuc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRF9vdmVycmlkZSkKKyAgaWYgKERFRklORUQgRlBIU0FfTkFNRV9NSVNNQVRDSEVEKQorICAgICMgSWYgdGhlIHZhcmlhYmxlIE5BTUVfTUlTTUFUQ0hFRCB2YXJpYWJsZSBpcyBzZXQsIGVycm9yIGlmIGl0IGlzIHBhc3NlZCBhcworICAgICMgYW4gYXJndW1lbnQuIFRoZSBmb3JtZXIgaXMgZm9yIG9sZCBzaWduYXR1cmVzLCB0aGUgbGF0dGVyIGlzIGZvciBuZXcKKyAgICAjIHNpZ25hdHVyZXMuCisgICAgbGlzdChGSU5EIEFSR04gIk5BTUVfTUlTTUFUQ0hFRCIgbmFtZV9taXNtYXRjaGVkX2lkeCkKKyAgICBpZiAoTk9UIG5hbWVfbWlzbWF0Y2hlZF9pZHggRVFVQUwgIi0xIikKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICAgIlRoZSBgTkFNRV9NSVNNQVRDSEVEYCBhcmd1bWVudCBtYXkgb25seSBiZSBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50IG9yICIKKyAgICAgICAgInRoZSB2YXJpYWJsZSwgbm90IGJvdGguIikKKyAgICBlbmRpZiAoKQorCisgICAgIyBCdXQgdXNlIHRoZSB2YXJpYWJsZSBpZiBpdCBpcyBub3QgYW4gYXJndW1lbnQgdG8gYXZvaWQgZm9yY2luZyBtaW5pbXVtCisgICAgIyBDTWFrZSB2ZXJzaW9uIGJ1bXBzIGZvciBjYWxsaW5nIG1vZHVsZXMuCisgICAgc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRF9vdmVycmlkZSAiJHtGUEhTQV9OQU1FX01JU01BVENIRUR9IikKKyAgZW5kaWYgKCkKKwogICBpZigke0lOREVYfSBFUVVBTCAtMSkKICAgICBzZXQoRlBIU0FfRkFJTF9NRVNTQUdFICR7X0ZJUlNUX0FSR30pCiAgICAgc2V0KEZQSFNBX1JFUVVJUkVEX1ZBUlMgJHtBUkdOfSkKQEAgLTIyNyw2ICsyNjIsMjEgQEAKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAorICBpZiAoREVGSU5FRCBGUEhTQV9OQU1FX01JU01BVENIRURfb3ZlcnJpZGUpCisgICAgc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCAiJHtGUEhTQV9OQU1FX01JU01BVENIRURfb3ZlcnJpZGV9IikKKyAgZW5kaWYgKCkKKworICBpZiAoREVGSU5FRCBDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRQorICAgICAgQU5EIE5PVCBGUEhTQV9OQU1FX01JU01BVENIRUQKKyAgICAgIEFORCBOT1QgX05BTUUgU1RSRVFVQUwgQ01BS0VfRklORF9QQUNLQUdFX05BTUUpCisgICAgbWVzc2FnZShBVVRIT1JfV0FSTklORworICAgICAgIlRoZSBwYWNrYWdlIG5hbWUgcGFzc2VkIHRvIGBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3NgICIKKyAgICAgICIoJHtfTkFNRX0pIGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBjYWxsaW5nIHBhY2thZ2UgIgorICAgICAgIigke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfSkuIFRoaXMgY2FuIGxlYWQgdG8gcHJvYmxlbXMgaW4gY2FsbGluZyAiCisgICAgICAiY29kZSB0aGF0IGV4cGVjdHMgYGZpbmRfcGFja2FnZWAgcmVzdWx0IHZhcmlhYmxlcyAoZS5nLiwgYF9GT1VORGApICIKKyAgICAgICJ0byBmb2xsb3cgYSBjZXJ0YWluIHBhdHRlcm4uIikKKyAgZW5kaWYgKCkKKwogIyBub3cgdGhhdCB3ZSBjb2xsZWN0ZWQgYWxsIGFyZ3VtZW50cywgcHJvY2VzcyB0aGVtCiAKICAgaWYoIngke0ZQSFNBX0ZBSUxfTUVTU0FHRX0iIFNUUkVRVUFMICJ4REVGQVVMVF9NU0ciKQpAQCAtMjM5LDEwICsyODksMTIgQEAKICAgc3RyaW5nKFRPTE9XRVIgJHtfTkFNRX0gX05BTUVfTE9XRVIpCiAKICAgaWYoRlBIU0FfRk9VTkRfVkFSKQotICAgIGlmKEZQSFNBX0ZPVU5EX1ZBUiBNQVRDSEVTICJeJHtfTkFNRX1fRk9VTkQkIiAgT1IgIEZQSFNBX0ZPVU5EX1ZBUiBNQVRDSEVTICJeJHtfTkFNRV9VUFBFUn1fRk9VTkQkIikKKyAgICBzZXQoX0ZPVU5EX1ZBUl9VUFBFUiAke19OQU1FX1VQUEVSfV9GT1VORCkKKyAgICBzZXQoX0ZPVU5EX1ZBUl9NSVhFRCAke19OQU1FfV9GT1VORCkKKyAgICBpZihGUEhTQV9GT1VORF9WQVIgU1RSRVFVQUwgX0ZPVU5EX1ZBUl9NSVhFRCAgT1IgIEZQSFNBX0ZPVU5EX1ZBUiBTVFJFUVVBTCBfRk9VTkRfVkFSX1VQUEVSKQogICAgICAgc2V0KF9GT1VORF9WQVIgJHtGUEhTQV9GT1VORF9WQVJ9KQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIGFyZ3VtZW50IGZvciBGT1VORF9WQVIgaXMgXCIke0ZQSFNBX0ZPVU5EX1ZBUn1cIiwgYnV0IG9ubHkgXCIke19OQU1FfV9GT1VORFwiIGFuZCBcIiR7X05BTUVfVVBQRVJ9X0ZPVU5EXCIgYXJlIHZhbGlkIG5hbWVzLiIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgYXJndW1lbnQgZm9yIEZPVU5EX1ZBUiBpcyBcIiR7RlBIU0FfRk9VTkRfVkFSfVwiLCBidXQgb25seSBcIiR7X0ZPVU5EX1ZBUl9NSVhFRH1cIiBhbmQgXCIke19GT1VORF9WQVJfVVBQRVJ9XCIgYXJlIHZhbGlkIG5hbWVzLiIpCiAgICAgZW5kaWYoKQogICBlbHNlKCkKICAgICBzZXQoX0ZPVU5EX1ZBUiAke19OQU1FX1VQUEVSfV9GT1VORCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFBrZ0NvbmZpZy5jbWFrZSBiL01vZHVsZXMvRmluZFBrZ0NvbmZpZy5jbWFrZQppbmRleCBiZDFiYzdjLi5iN2U2NDQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQa2dDb25maWcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUGtnQ29uZmlnLmNtYWtlCkBAIC0zNCwxNiArMzQsMzEgQEAKIGZpbmRfcHJvZ3JhbShQS0dfQ09ORklHX0VYRUNVVEFCTEUgTkFNRVMgcGtnLWNvbmZpZyBET0MgInBrZy1jb25maWcgZXhlY3V0YWJsZSIpCiBtYXJrX2FzX2FkdmFuY2VkKFBLR19DT05GSUdfRVhFQ1VUQUJMRSkKIAorc2V0KF9QS0dfQ09ORklHX0ZBSUxVUkVfTUVTU0FHRSAiIikKIGlmIChQS0dfQ09ORklHX0VYRUNVVEFCTEUpCiAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7UEtHX0NPTkZJR19FWEVDVVRBQkxFfSAtLXZlcnNpb24KLSAgICBPVVRQVVRfVkFSSUFCTEUgUEtHX0NPTkZJR19WRVJTSU9OX1NUUklORwotICAgIEVSUk9SX1FVSUVUCi0gICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCisgICAgT1VUUFVUX1ZBUklBQkxFIFBLR19DT05GSUdfVkVSU0lPTl9TVFJJTkcgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICBFUlJPUl9WQVJJQUJMRSBfUEtHX0NPTkZJR19WRVJTSU9OX0VSUk9SIEVSUk9SX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICBSRVNVTFRfVkFSSUFCTEUgX1BLR19DT05GSUdfVkVSU0lPTl9SRVNVTFQKKyAgICApCisKKyAgaWYgKE5PVCBfUEtHX0NPTkZJR19WRVJTSU9OX1JFU1VMVCBFUVVBTCAwKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAgICIgX1BLR19DT05GSUdfVkVSU0lPTl9FUlJPUiAiICAgICAgJHtfUEtHX0NPTkZJR19WRVJTSU9OX0VSUk9SfSIpCisgICAgc3RyaW5nKEFQUEVORCBfUEtHX0NPTkZJR19GQUlMVVJFX01FU1NBR0UKKyAgICAgICJUaGUgY29tbWFuZFxuIgorICAgICAgIiAgICAgIFwiJHtQS0dfQ09ORklHX0VYRUNVVEFCTEV9XCIgLS12ZXJzaW9uXG4iCisgICAgICAiICAgIGZhaWxlZCB3aXRoIG91dHB1dFxuJHtfUEtHX0NPTkZJR19WRVJTSU9OX0VSUk9SfSIKKyAgICAgICkKKyAgICBzZXQoUEtHX0NPTkZJR19FWEVDVVRBQkxFICIiKQorICAgIHVuc2V0KFBLR19DT05GSUdfVkVSU0lPTl9TVFJJTkcpCisgIGVuZGlmICgpCisgIHVuc2V0KF9QS0dfQ09ORklHX1ZFUlNJT05fUkVTVUxUKQogZW5kaWYgKCkKIAogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKFBrZ0NvbmZpZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkVEX1ZBUlMgUEtHX0NPTkZJR19FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBU09OX0ZBSUxVUkVfTUVTU0FHRSAiJHtfUEtHX0NPTkZJR19GQUlMVVJFX01FU1NBR0V9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIFBLR19DT05GSUdfVkVSU0lPTl9TVFJJTkcpCiAKICMgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgbW9kdWxlIG5hbWUgaXMgIlBrZ0NvbmZpZyIgYnV0IHRoZSBuYW1lIG9mCkBAIC0zNDEsNyArMzU2LDcgQEAKICAgICAgICMgcmVtb3ZlIGVtcHR5IHZhbHVlcyBmcm9tIHRoZSBsaXN0CiAgICAgICBsaXN0KFJFTU9WRV9JVEVNIF9wa2djb25maWdfcGF0aCAiIikKICAgICAgIGZpbGUoVE9fTkFUSVZFX1BBVEggIiR7X3BrZ2NvbmZpZ19wYXRofSIgX3BrZ2NvbmZpZ19wYXRoKQotICAgICAgaWYoVU5JWCkKKyAgICAgIGlmKENNQUtFX0hPU1RfVU5JWCkKICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIjsiICI6IiBfcGtnY29uZmlnX3BhdGggIiR7X3BrZ2NvbmZpZ19wYXRofSIpCiAgICAgICAgIHN0cmluZyhSRVBMQUNFICJcXCAiICIgIiBfcGtnY29uZmlnX3BhdGggIiR7X3BrZ2NvbmZpZ19wYXRofSIpCiAgICAgICBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQcm90b2J1Zi5jbWFrZSBiL01vZHVsZXMvRmluZFByb3RvYnVmLmNtYWtlCmluZGV4IDJkNDU5NjUuLmYzNTk3OGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFByb3RvYnVmLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFByb3RvYnVmLmNtYWtlCkBAIC00ODIsMjIgKzQ4MiwyNCBAQAogICAgICAgICAiJHtfUFJPVE9CVUZfQ09NTU9OX0hFQURFUn0gcmV2ZWFscyBwcm90b2J1ZiAke1Byb3RvYnVmX1ZFUlNJT059IikKICAgZW5kaWYoKQogCi0gICMgQ2hlY2sgUHJvdG9idWYgY29tcGlsZXIgdmVyc2lvbiB0byBiZSBhbGlnbmVkIHdpdGggbGlicmFyaWVzIHZlcnNpb24KLSAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtQcm90b2J1Zl9QUk9UT0NfRVhFQ1VUQUJMRX0gLS12ZXJzaW9uCi0gICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT04pCisgIGlmKFByb3RvYnVmX1BST1RPQ19FWEVDVVRBQkxFKQorICAgICMgQ2hlY2sgUHJvdG9idWYgY29tcGlsZXIgdmVyc2lvbiB0byBiZSBhbGlnbmVkIHdpdGggbGlicmFyaWVzIHZlcnNpb24KKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1Byb3RvYnVmX1BST1RPQ19FWEVDVVRBQkxFfSAtLXZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OKQogCi0gIGlmKCIke19QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OfSIgTUFUQ0hFUyAibGlicHJvdG9jIChbMC05Ll0rKSIpCi0gICAgc2V0KF9QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OICIke0NNQUtFX01BVENIXzF9IikKLSAgZW5kaWYoKQorICAgIGlmKCIke19QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OfSIgTUFUQ0hFUyAibGlicHJvdG9jIChbMC05Ll0rKSIpCisgICAgICBzZXQoX1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT04gIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIGVuZGlmKCkKIAotICBpZihQcm90b2J1Zl9ERUJVRykKLSAgICBtZXNzYWdlKFNUQVRVUyAiWyAke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfToke0NNQUtFX0NVUlJFTlRfTElTVF9MSU5FfSBdICIKLSAgICAgICAgIiR7UHJvdG9idWZfUFJPVE9DX0VYRUNVVEFCTEV9IHJldmVhbHMgdmVyc2lvbiAke19QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OfSIpCi0gIGVuZGlmKCkKKyAgICBpZihQcm90b2J1Zl9ERUJVRykKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJbICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9OiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0xJTkV9IF0gIgorICAgICAgICAgICIke1Byb3RvYnVmX1BST1RPQ19FWEVDVVRBQkxFfSByZXZlYWxzIHZlcnNpb24gJHtfUFJPVE9CVUZfUFJPVE9DX0VYRUNVVEFCTEVfVkVSU0lPTn0iKQorICAgIGVuZGlmKCkKIAotICBpZihOT1QgIiR7X1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT059IiBWRVJTSU9OX0VRVUFMICIke1Byb3RvYnVmX1ZFUlNJT059IikKKyAgICBpZihOT1QgIiR7X1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT059IiBWRVJTSU9OX0VRVUFMICIke1Byb3RvYnVmX1ZFUlNJT059IikKICAgICAgIG1lc3NhZ2UoV0FSTklORyAiUHJvdG9idWYgY29tcGlsZXIgdmVyc2lvbiAke19QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OfSIKLSAgICAgICAgICAiIGRvZXNuJ3QgbWF0Y2ggbGlicmFyeSB2ZXJzaW9uICR7UHJvdG9idWZfVkVSU0lPTn0iKQorICAgICAgICAiIGRvZXNuJ3QgbWF0Y2ggbGlicmFyeSB2ZXJzaW9uICR7UHJvdG9idWZfVkVSU0lPTn0iKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCiAgIGlmKFByb3RvYnVmX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQeXRob24uY21ha2UgYi9Nb2R1bGVzL0ZpbmRQeXRob24uY21ha2UKaW5kZXggMmJkZmFmMy4uMDE4OTU2YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUHl0aG9uLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFB5dGhvbi5jbWFrZQpAQCAtOTMsNiArOTMsMTMgQEAKIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQogICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYC4KK2BgUHl0aG9uX1NPQUJJYGAKKyAgRXh0ZW5zaW9uIHN1ZmZpeCBmb3IgbW9kdWxlcy4KKworICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ19mbGFnKCdTT0FCSScpYGAgb3IgY29tcHV0ZWQgZnJvbQorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ19mbGFnKCdFWFRfU1VGRklYJylgYCBvcgorICBgYHB5dGhvbi1jb25maWcgLS1leHRlbnNpb24tc3VmZml4YGAuCiBgYFB5dGhvbl9Db21waWxlcl9GT1VORGBgCiAgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBjb21waWxlci4KIGBgUHl0aG9uX0NPTVBJTEVSYGAKQEAgLTE4NCw4ICsxOTEsNyBAQAogCiBgYFB5dGhvbl9GSU5EX1NUUkFURUdZYGAKICAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIGhvdyBsb29rdXAgd2lsbCBiZSBkb25lLgotICBUaGUgYGBQeXRob25fRklORF9TVFJBVEVHWWBgIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gZW1wdHkgb3Igb25lIG9mIHRoZQotICBmb2xsb3dpbmc6CisgIFRoZSBgYFB5dGhvbl9GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgVkVSU0lPTmBgOiBUcnkgdG8gZmluZCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBpbiBhbGwgc3BlY2lmaWVkCiAgICAgbG9jYXRpb25zLgpAQCAtMTk4LDggKzIwNCw3IEBACiBgYFB5dGhvbl9GSU5EX1JFR0lTVFJZYGAKICAgT24gV2luZG93cyB0aGUgYGBQeXRob25fRklORF9SRUdJU1RSWWBgIHZhcmlhYmxlIGRldGVybWluZSB0aGUgb3JkZXIKICAgb2YgcHJlZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdHJ5IGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0gIHRoZSBgYFB5dGhvbl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgdGhlIGBgUHl0aG9uX0ZJTkRfUkVHSVNUUllgYCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCiAgICogYGBGSVJTVGBgOiBUcnkgdG8gdXNlIHJlZ2lzdHJ5IGJlZm9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KQEAgLTIwOSw4ICsyMTQsOCBAQAogYGBQeXRob25fRklORF9GUkFNRVdPUktgYAogICBPbiBtYWNPUyB0aGUgYGBQeXRob25fRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZSBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mCiAgIHByZWZlcmVuY2UgYmV0d2VlbiBBcHBsZS1zdHlsZSBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCi0gIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciB0YWtlIHNhbWUgdmFsdWVzIGFzCi0gIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgIHZhcmlhYmxlLgorICBUaGlzIHZhcmlhYmxlIGNhbiB0YWtlIHNhbWUgdmFsdWVzIGFzIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgCisgIHZhcmlhYmxlLgogCiAgIC4uIG5vdGU6OgogCkBAIC0yMjAsMTEgKzIyNSwxMSBAQAogICB2YXJpYWJsZSB3aWxsIGJlIHVzZWQsIGlmIGFueS4KIAogYGBQeXRob25fRklORF9WSVJUVUFMRU5WYGAKLSAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBoYW5kbGluZyBvZiB2aXJ0dWFsIGVudmlyb25tZW50cy4gSXQgaXMgbWVhbmluZ2Z1bGwKLSAgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgYWN0aXZhdGVgYCBzY3JpcHQgaGFzCi0gIGJlZW4gZXZhbHVhdGVkKS4gSW4gdGhpcyBjYXNlLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKLSAgYGBQeXRob25fRklORF9SRUdJU1RSWWBgIGFuZCBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgdmFyaWFibGVzLgotICBUaGUgYGBQeXRob25fRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMgbWFuYWdlZCBieQorICBgYHZpcnR1YWxlbnZgYCBvciBgYGNvbmRhYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgYWN0aXZhdGVgYCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkKS4gSW4gdGhpcyBjYXNlLCBpdAorICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYGBQeXRob25fRklORF9SRUdJU1RSWWBgIGFuZCBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAKKyAgdmFyaWFibGVzLiAgVGhlIGBgUHl0aG9uX0ZJTkRfVklSVFVBTEVOVmBgIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gb25lIG9mIHRoZQogICBmb2xsb3dpbmc6CiAKICAgKiBgYEZJUlNUYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIHVzZWQgYmVmb3JlIGFueSBvdGhlciBzdGFuZGFyZApAQCAtMjgxLDYgKzI4NiwyMiBAQAogICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgorCitgYFB5dGhvbl9BUlRJRkFDVFNfSU5URVJBQ1RJVkVgYAorICBTZWxlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgbW9kdWxlLiBUaGlzIGlzIGEgYm9vbGVhbiB2YXJpYWJsZToKKworICAqIElmIHNldCB0byBgYFRSVUVgYDogQ3JlYXRlIENNYWtlIGNhY2hlIGVudHJpZXMgZm9yIHRoZSBhYm92ZSBhcnRpZmFjdAorICAgIHNwZWNpZmljYXRpb24gdmFyaWFibGVzIHNvIHRoYXQgdXNlcnMgY2FuIGVkaXQgdGhlbSBpbnRlcmFjdGl2ZWx5LgorICAgIFRoaXMgZGlzYWJsZXMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzLgorICAqIElmIHNldCB0byBgYEZBTFNFYGAgb3IgdW5kZWZpbmVkOiBFbmFibGUgbXVsdGlwbGUgdmVyc2lvbi9jb21wb25lbnQKKyAgICByZXF1aXJlbWVudHMuCisKIENvbW1hbmRzCiBeXl5eXl5eXgogCkBAIC0yOTAsOSArMzExLDEzIEBACiB3aGVuIGxpYnJhcnkgdHlwZSBpcyBgYE1PRFVMRWBgLCB0byB0YXJnZXQgYGBQeXRob246Ok1vZHVsZWBgIGFuZCB0YWtlcyBjYXJlIG9mCiBQeXRob24gbW9kdWxlIG5hbWluZyBydWxlczo6CiAKLSAgUHl0aG9uX2FkZF9saWJyYXJ5IChteV9tb2R1bGUgTU9EVUxFIHNyYzEuY3BwKQorICBQeXRob25fYWRkX2xpYnJhcnkgKDxuYW1lPiBbU1RBVElDIHwgU0hBUkVEIHwgTU9EVUxFIFtXSVRIX1NPQUJJXV0KKyAgICAgICAgICAgICAgICAgICAgICA8c291cmNlMT4gWzxzb3VyY2UyPiAuLi5dKQogCi1JZiBsaWJyYXJ5IHR5cGUgaXMgbm90IHNwZWNpZmllZCwgYGBNT0RVTEVgYCBpcyBhc3N1bWVkLgorSWYgdGhlIGxpYnJhcnkgdHlwZSBpcyBub3Qgc3BlY2lmaWVkLCBgYE1PRFVMRWBgIGlzIGFzc3VtZWQuCisKK0ZvciBgYE1PRFVMRWBgIGxpYnJhcnkgdHlwZSwgaWYgb3B0aW9uIGBgV0lUSF9TT0FCSWBgIGlzIHNwZWNpZmllZCwgdGhlCittb2R1bGUgc3VmZml4IHdpbGwgaW5jbHVkZSB0aGUgYGBQeXRob25fU09BQklgYCB2YWx1ZSwgaWYgYW55LgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQeXRob24vU3VwcG9ydC5jbWFrZSBiL01vZHVsZXMvRmluZFB5dGhvbi9TdXBwb3J0LmNtYWtlCmluZGV4IDY3ZGI0ZDMuLjY4YmUzZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFB5dGhvbi9TdXBwb3J0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFB5dGhvbi9TdXBwb3J0LmNtYWtlCkBAIC03NSwzMCArNzUsMjkgQEAKICAgICAgIChfUFlUSE9OX2lzTXVsdGlDb25maWcgT1IgQ01BS0VfQlVJTERfVFlQRSkpCiAgICAgIyBpZiB0aGUgZ2VuZXJhdG9yIGlzIG11bHRpLWNvbmZpZyBvciBpZiBDTUFLRV9CVUlMRF9UWVBFIGlzIHNldCBmb3IKICAgICAjIHNpbmdsZS1jb25maWcgZ2VuZXJhdG9ycywgc2V0IG9wdGltaXplZCBhbmQgZGVidWcgbGlicmFyaWVzCi0gICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlkgIiIpCi0gICAgZm9yZWFjaCAoX1BZVEhPTl9saWJuYW1lIElOIExJU1RTICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9SRUxFQVNFICkKLSAgICAgIGxpc3QoIEFQUEVORCAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlkgb3B0aW1pemVkICIke19QWVRIT05fbGlibmFtZX0iICkKKyAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTICIiKQorICAgIGZvcmVhY2ggKF9QWVRIT05fbGlibmFtZSBJTiBMSVNUUyAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgIGxpc3QoIEFQUEVORCAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyBvcHRpbWl6ZWQgIiR7X1BZVEhPTl9saWJuYW1lfSIpCiAgICAgZW5kZm9yZWFjaCgpCi0gICAgZm9yZWFjaCAoX1BZVEhPTl9saWJuYW1lIElOIExJU1RTICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVRyApCi0gICAgICBsaXN0KCBBUFBFTkQgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZIGRlYnVnICIke19QWVRIT05fbGlibmFtZX0iICkKKyAgICBmb3JlYWNoIChfUFlUSE9OX2xpYm5hbWUgSU4gTElTVFMgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZX0RFQlVHKQorICAgICAgbGlzdCggQVBQRU5EICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTIGRlYnVnICIke19QWVRIT05fbGlibmFtZX0iKQogICAgIGVuZGZvcmVhY2goKQogICBlbHNlaWYgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9SRUxFQVNFKQotICAgIHNldCAoJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZICIkeyR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9SRUxFQVNFfSIpCisgICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRX0iKQogICBlbHNlaWYgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVRykKLSAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWSAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfREVCVUd9IikKKyAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTICIkeyR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVR30iKQogICBlbHNlKCkKLSAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWSAiJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZLU5PVEZPVU5EIikKKyAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTICIke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlktTk9URk9VTkQiKQogICBlbmRpZigpCi0KLSAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUll9IikKIGVuZG1hY3JvKCkKIAogCiBtYWNybyAoX1BZVEhPTl9GSU5EX0ZSQU1FV09SS1MpCiAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLUykKICAgaWYgKENNQUtFX0hPU1RfQVBQTEUgT1IgQVBQTEUpCisgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfSIgX3BmZl9DTUFLRV9GUkFNRVdPUktfUEFUSCkKICAgICBzZXQgKF9wZmZfZnJhbWV3b3JrcyAke0NNQUtFX0ZSQU1FV09SS19QQVRIfQotICAgICAgICAgICAgICAgICAgICAkRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfQorICAgICAgICAgICAgICAgICAgICAke19wZmZfQ01BS0VfRlJBTUVXT1JLX1BBVEh9CiAgICAgICAgICAgICAgICAgICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzCiAgICAgICAgICAgICAgICAgICAgIC91c3IvbG9jYWwvRnJhbWV3b3JrcwogICAgICAgICAgICAgICAgICAgICAke0NNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSH0pCkBAIC0yODksMTIgKzI4OCwxNiBAQAogZnVuY3Rpb24gKF9QWVRIT05fR0VUX0NPTkZJR19WQVIgX1BZVEhPTl9QR0NWX1ZBTFVFIE5BTUUpCiAgIHVuc2V0ICgke19QWVRIT05fUEdDVl9WQUxVRX0gUEFSRU5UX1NDT1BFKQogCi0gIGlmIChOT1QgTkFNRSBNQVRDSEVTICJeKFBSRUZJWHxBQklGTEFHU3xDT05GSUdESVJ8SU5DTFVERVN8TElCUykkIikKKyAgaWYgKE5PVCBOQU1FIE1BVENIRVMgIl4oUFJFRklYfEFCSUZMQUdTfENPTkZJR0RJUnxJTkNMVURFU3xMSUJTfFNPQUJJKSQiKQogICAgIHJldHVybigpCiAgIGVuZGlmKCkKIAogICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKLSAgICBzZXQgKGNvbmZpZ19mbGFnICItLSR7TkFNRX0iKQorICAgIGlmIChOQU1FIFNUUkVRVUFMICJTT0FCSSIpCisgICAgICBzZXQgKGNvbmZpZ19mbGFnICItLWV4dGVuc2lvbi1zdWZmaXgiKQorICAgIGVsc2UoKQorICAgICAgc2V0IChjb25maWdfZmxhZyAiLS0ke05BTUV9IikKKyAgICBlbmRpZigpCiAgICAgc3RyaW5nIChUT0xPV0VSICIke2NvbmZpZ19mbGFnfSIgY29uZmlnX2ZsYWcpCiAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9DT05GSUd9IiAke2NvbmZpZ19mbGFnfQogICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQKQEAgLTMwOSwxMyArMzEyLDE2IEBACiAgICAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0hBTEwgIigtSXwtaXdpdGhzeXNyb290KVsgXSpbXiBdKyIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiKC1JfC1pd2l0aHN5c3Jvb3QpWyBdKiIgIiIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCisgICAgICBlbHNlaWYgKE5BTUUgU1RSRVFVQUwgIlNPQUJJIikKKyAgICAgICAgIyBjbGVhbi11cDogcmVtb3ZlIHByZWZpeCBjaGFyYWN0ZXIgYW5kIHN1ZmZpeAorICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl5bLi1dKC4rKSgke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH18XFwuKHNvfHB5ZCkpJCIgIlxcMSIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpCiAgICAgaWYgKE5BTUUgU1RSRVFVQUwgIlBSRUZJWCIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLlBSRUZJWCxzeXNjb25maWcuRVhFQ19QUkVGSVgsc3lzY29uZmlnLkJBU0VfRVhFQ19QUkVGSVhdKSkiCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLlBSRUZJWCxzeXNjb25maWcuRVhFQ19QUkVGSVgsc3lzY29uZmlnLkJBU0VfRVhFQ19QUkVGSVhdKSlcbmV4Y2VwdCBFeGNlcHRpb246XG4gICBpbXBvcnQgc3lzY29uZmlnXG4gICBzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ2Jhc2UnKSBvciAnJywgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdpbnN0YWxsZWRfYmFzZScpIG9yICcnXSkpIgogICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3ZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVApAQCAtMzI2LDIwICszMzIsNDcgQEAKICAgICAgICAgbGlzdCAoUkVNT1ZFX0RVUExJQ0FURVMgX3ZhbHVlcykKICAgICAgIGVuZGlmKCkKICAgICBlbHNlaWYgKE5BTUUgU1RSRVFVQUwgIklOQ0xVREVTIikKLSAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnOyBzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1GYWxzZSldKSkiCisgICAgICBpZiAoV0lOMzIpCisgICAgICAgIHNldCAoX3NjaGVtZSAibnQiKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCAoX3NjaGVtZSAicG9zaXhfcHJlZml4IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzXG50cnk6XG4gICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnXG4gICBzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1GYWxzZSldKSlcbmV4Y2VwdCBFeGNlcHRpb246XG4gICBpbXBvcnQgc3lzY29uZmlnXG4gICBzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRpbmNsdWRlJyksc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0aW5jbHVkZScsJyR7X3NjaGVtZX0nKSxzeXNjb25maWcuZ2V0X3BhdGgoJ2luY2x1ZGUnKSxzeXNjb25maWcuZ2V0X3BhdGgoJ2luY2x1ZGUnLCcke19zY2hlbWV9JyldKSkiCiAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCiAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQogICAgICAgaWYgKF9yZXN1bHQpCiAgICAgICAgIHVuc2V0IChfdmFsdWVzKQorICAgICAgZWxzZSgpCisgICAgICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmIChOQU1FIFNUUkVRVUFMICJTT0FCSSIpCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTT0FCSScpIG9yICcnLHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIG9yICcnXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZztzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPQUJJJykgb3IgJycsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgb3IgJyddKSkiCisgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfc29hYmkKKyAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCisgICAgICBpZiAoX3Jlc3VsdCkKKyAgICAgICAgdW5zZXQgKF92YWx1ZXMpCisgICAgICBlbHNlKCkKKyAgICAgICAgZm9yZWFjaCAoX2l0ZW0gSU4gTElTVFMgX3NvYWJpKQorICAgICAgICAgIGlmIChfaXRlbSkKKyAgICAgICAgICAgIHNldCAoX3ZhbHVlcyAiJHtfaXRlbX0iKQorICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIGlmIChfdmFsdWVzKQorICAgICAgICAgICMgY2xlYW4tdXA6IHJlbW92ZSBwcmVmaXggY2hhcmFjdGVyIGFuZCBzdWZmaXgKKyAgICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl5bLi1dKC4rKSgke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH18XFwuKHNvfHB5ZCkpJCIgIlxcMSIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCisgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKICAgICBlbHNlKCkKICAgICAgIHNldCAoY29uZmlnX2ZsYWcgIiR7TkFNRX0iKQogICAgICAgaWYgKE5BTUUgU1RSRVFVQUwgIkNPTkZJR0RJUiIpCiAgICAgICAgIHNldCAoY29uZmlnX2ZsYWcgIkxJQlBMIikKICAgICAgIGVuZGlmKCkKLSAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnOyBzeXMuc3Rkb3V0LndyaXRlKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignJHtjb25maWdfZmxhZ30nKSkiCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJyR7Y29uZmlnX2ZsYWd9JykpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJyR7Y29uZmlnX2ZsYWd9JykpIgogICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3ZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVApAQCAtMzY3LDYgKzQwMCwxMCBAQAogICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCiAgIGVuZGlmKCkKIAorICBpZiAoV0lOMzIgQU5EIE5BTUUgTUFUQ0hFUyAiXihQUkVGSVh8Q09ORklHRElSfElOQ0xVREVTKSQiKQorICAgIGZpbGUgKFRPX0NNQUtFX1BBVEggIiR7X3ZhbHVlc30iIF92YWx1ZXMpCisgIGVuZGlmKCkKKwogICBzZXQgKCR7X1BZVEhPTl9QR0NWX1ZBTFVFfSAiJHtfdmFsdWVzfSIgUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC00NTQsNiArNDkxLDcgQEAKIAogICBpZiAoX1BWSV9DSEVDS19FWElTVFMgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IikKICAgICAjIGludGVycHJldGVyIGRvZXMgbm90IGV4aXN0IGFueW1vcmUKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGludGVycHJldGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX1cIiIpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCiAgICAgcmV0dXJuKCkKICAgZW5kaWYoKQpAQCAtNDcyLDYgKzUxMCw3IEBACiAgICAgZW5kaWYoKQogICAgIGlmIChOT1QgYWJpIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTKQogICAgICAgIyBpbmNvbXBhdGlibGUgQUJJCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiV3JvbmcgQUJJIGZvciB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIikKICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUtTk9URk9VTkQiKQogICAgICAgcmV0dXJuKCkKICAgICBlbmRpZigpCkBAIC00ODcsOSArNTI2LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQotICAgIGlmIChyZXN1bHQgT1IgKF9QVklfRVhBQ1QgQU5EIE5PVCB2ZXJzaW9uIFZFUlNJT05fRVFVQUwgZXhwZWN0ZWRfdmVyc2lvbikgT1IgKHZlcnNpb24gVkVSU0lPTl9MRVNTIGV4cGVjdGVkX3ZlcnNpb24pKQotICAgICAgIyBpbnRlcnByZXRlciBub3QgdXNhYmxlIG9yIGhhcyB3cm9uZyBtYWpvciB2ZXJzaW9uCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICMgaW50ZXJwcmV0ZXIgaXMgbm90IHVzYWJsZQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCB1c2UgdGhlIGludGVycHJldGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX1cIiIpCiAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKKyAgICBlbHNlKCkKKyAgICAgIGlmIChfUFZJX0VYQUNUIEFORCBOT1QgdmVyc2lvbiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pCisgICAgICAgICMgaW50ZXJwcmV0ZXIgaGFzIHdyb25nIHZlcnNpb24KKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIldyb25nIHZlcnNpb24gZm9yIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiKQorICAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKKyAgICAgIGVsc2UoKQorICAgICAgICAjIGNoZWNrIHRoYXQgdmVyc2lvbiBpcyBPSworICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXihbMC05XSspXFwuLiokIiAiXFwxIiBtYWpvcl92ZXJzaW9uICIke3ZlcnNpb259IikKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4oWzAtOV0rKVxcLj8uKiQiICJcXDEiIGV4cGVjdGVkX21ham9yX3ZlcnNpb24gIiR7ZXhwZWN0ZWRfdmVyc2lvbn0iKQorICAgICAgICBpZiAoTk9UIG1ham9yX3ZlcnNpb24gVkVSU0lPTl9FUVVBTCBleHBlY3RlZF9tYWpvcl92ZXJzaW9uCisgICAgICAgICAgICBPUiBOT1QgdmVyc2lvbiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiV3JvbmcgdmVyc2lvbiBmb3IgdGhlIGludGVycHJldGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX1cIiIpCisgICAgICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgICAgIHJldHVybigpCiAgICAgZW5kaWYoKQogICBlbHNlKCkKQEAgLTUwNCw2ICs1NjEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAgICAgICBpZiAocmVzdWx0IE9SIE5PVCB2ZXJzaW9uIEVRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SKQogICAgICAgICAjIGludGVycHJldGVyIG5vdCB1c2FibGUgb3IgaGFzIHdyb25nIG1ham9yIHZlcnNpb24KKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIldyb25nIG1ham9yIHZlcnNpb24gZm9yIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiKQorICAgICAgICBlbmRpZigpCiAgICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUtTk9URk9VTkQiKQogICAgICAgICByZXR1cm4oKQogICAgICAgZW5kaWYoKQpAQCAtNTIxLDYgKzU4MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAgICAgaWYgKHJlc3VsdCBPUiBOT1Qgc2l6ZSBFUVVBTCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQogICAgICAgIyBpbnRlcnByZXRlciBub3QgdXNhYmxlIG9yIGhhcyB3cm9uZyBhcmNoaXRlY3R1cmUKKyAgICAgIGlmIChyZXN1bHQpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgdXNlIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJXcm9uZyBhcmNoaXRlY3R1cmUgZm9yIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiKQorICAgICAgZW5kaWYoKQogICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCiAgICAgICByZXR1cm4oKQogICAgIGVuZGlmKCkKQEAgLTU0NSw2ICs2MTIsNyBAQAogCiAgIGlmIChfUFZDX0NIRUNLX0VYSVNUUyBBTkQgTk9UIEVYSVNUUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IikKICAgICAjIENvbXBpbGVyIGRvZXMgbm90IGV4aXN0IGFueW1vcmUKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGNvbXBpbGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9XCIiKQogICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9DT01QSUxFUi1OT1RGT1VORCIpCiAgICAgcmV0dXJuKCkKICAgZW5kaWYoKQpAQCAtNTcxLDYgKzYzOSwxMSBAQAogCiAgIGlmIChyZXN1bHQgT1IgKF9QVkNfRVhBQ1QgQU5EIE5PVCB2ZXJzaW9uIFZFUlNJT05fRVFVQUwgZXhwZWN0ZWRfdmVyc2lvbikgT1IgKHZlcnNpb24gVkVSU0lPTl9MRVNTIGV4cGVjdGVkX3ZlcnNpb24pKQogICAgICMgQ29tcGlsZXIgbm90IHVzYWJsZSBvciBoYXMgd3JvbmcgdmVyc2lvbgorICAgIGlmIChyZXN1bHQpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgY29tcGlsZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn1cIiIpCisgICAgZWxzZSgpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSAiV3JvbmcgdmVyc2lvbiBmb3IgdGhlIGNvbXBpbGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9XCIiKQorICAgIGVuZGlmKCkKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUiBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVItTk9URk9VTkQiKQogICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCkBAIC01OTAsNiArNjYzLDcgQEAKIAogICBpZiAoX1BWTF9DSEVDS19FWElTVFMgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQogICAgICMgbGlicmFyeSBkb2VzIG5vdCBleGlzdCBhbnltb3JlCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfVwiIikKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRS1OT1RGT1VORCIpCiAgICAgaWYgKFdJTjMyKQogICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRyBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRy1OT1RGT1VORCIpCkBAIC02MDMsMTYgKzY3NywxOSBAQAogCiAgIGlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0FCSSBBTkQgTk9UIGxpYl9BQkkgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MpCiAgICAgIyBpbmNvbXBhdGlibGUgQUJJCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIldyb25nIEFCSSBmb3IgdGhlIGxpYnJhcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9XCIiKQogICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFLU5PVEZPVU5EIikKICAgZWxzZSgpCiAgICAgaWYgKGV4cGVjdGVkX3ZlcnNpb24pCiAgICAgICBpZiAoKF9QVkxfRVhBQ1QgQU5EIE5PVCBsaWJfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SIChsaWJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgZXhwZWN0ZWRfdmVyc2lvbikpCiAgICAgICAgICMgbGlicmFyeSBoYXMgd3JvbmcgdmVyc2lvbgorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSAiV3JvbmcgdmVyc2lvbiBmb3IgdGhlIGxpYnJhcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9XCIiKQogICAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRS1OT1RGT1VORCIpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZSgpCiAgICAgICBpZiAoTk9UIGxpYl9WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IpCiAgICAgICAgICMgbGlicmFyeSBoYXMgd3JvbmcgbWFqb3IgdmVyc2lvbgorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSAiV3JvbmcgbWFqb3IgdmVyc2lvbiBmb3IgdGhlIGxpYnJhcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9XCIiKQogICAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRS1OT1RGT1VORCIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQpAQCAtNjQzLDYgKzcyMCw3IEBACiAKICAgaWYgKF9QVklEX0NIRUNLX0VYSVNUUyBBTkQgTk9UIEVYSVNUUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKICAgICAjIGluY2x1ZGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhbnltb3JlCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn1cIiIpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSLU5PVEZPVU5EIikKICAgICByZXR1cm4oKQogICBlbmRpZigpCkBAIC02NTIsMTYgKzczMCwxOSBAQAogCiAgIGlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0FCSSBBTkQgTk9UIGluY19BQkkgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MpCiAgICAgIyBpbmNvbXBhdGlibGUgQUJJCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIldyb25nIEFCSSBmb3IgdGhlIGRpcmVjdG9yeSBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfVwiIikKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVItTk9URk9VTkQiKQogICBlbHNlKCkKICAgICBpZiAoZXhwZWN0ZWRfdmVyc2lvbikKICAgICAgIGlmICgoX1BWSURfRVhBQ1QgQU5EIE5PVCBpbmNfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SIChpbmNfVkVSU0lPTiBWRVJTSU9OX0xFU1MgZXhwZWN0ZWRfdmVyc2lvbikpCiAgICAgICAgICMgaW5jbHVkZSBkaXIgaGFzIHdyb25nIHZlcnNpb24KKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIldyb25nIHZlcnNpb24gZm9yIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn1cIiIpCiAgICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUi1OT1RGT1VORCIpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZSgpCiAgICAgICBpZiAoTk9UIGluY19WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IpCiAgICAgICAgICMgaW5jbHVkZSBkaXIgaGFzIHdyb25nIG1ham9yIHZlcnNpb24KKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIldyb25nIG1ham9yIHZlcnNpb24gZm9yIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn1cIiIpCiAgICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUi1OT1RGT1VORCIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQpAQCAtNzYxLDYgKzg0Miw3IEBACiAgICAgX3B5dGhvbl9nZXRfYWJpZmxhZ3MgKF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKICAgZW5kaWYoKQogZW5kaWYoKQordW5zZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1NPQUJJKQogCiAjIERlZmluZSBsb29rdXAgc3RyYXRlZ3kKIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTE9PS1VQX1BPTElDWSBTVFJFUVVBTCAiTkVXIikKQEAgLTg1MCw4ICs5MzIsOCBAQAogICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZICJGSVJTVCIpCiBlbmRpZigpCiAKLSMgdmlydHVhbCBlbnZpcm9ubWVudHMgaGFuZGxpbmcKLWlmIChERUZJTkVEIEVOVntWSVJUVUFMX0VOVn0pCisjIHZpcnR1YWwgZW52aXJvbm1lbnRzIHJlY29nbml0aW9uCitpZiAoREVGSU5FRCBFTlZ7VklSVFVBTF9FTlZ9IE9SIERFRklORUQgRU5We0NPTkRBX1BSRUZJWH0pCiAgIGlmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOVikKICAgICBpZiAoTk9UICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFl8U1RBTkRBUkQpJCIpCiAgICAgICBtZXNzYWdlIChBVVRIT1JfV0FSTklORyAiRmluZCR7X1BZVEhPTl9QUkVGSVh9OiAkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOVn06IGludmFsaWQgdmFsdWUgZm9yICcke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYnLiAnRklSU1QnLCAnT05MWScgb3IgJ1NUQU5EQVJEJyBleHBlY3RlZC4gJ0ZJUlNUJyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQpAQCAtODY5LDIwICs5NTEsMjQgQEAKIAogIyBDb21wdXRlIHNlYXJjaCBzaWduYXR1cmUKICMgVGhpcyBzaWduYXR1cmUgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIHZhbGlkaXR5IG9mIGNhY2hlZCB2YXJpYWJsZXMgb24gbmV3IHNlYXJjaAotc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSfTokeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1l9OiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WfSIpCitzZXQgKF8ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkUgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1l9OiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WfSIpCiBpZiAoTk9UIFdJTjMyKQogICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHske19QWVRIT05fUFJFRklYfV9VU0VfU1RBVElDX0xJQlN9OiIpCiBlbmRpZigpCiBpZiAoQ01BS0VfSE9TVF9BUFBMRSkKLSAgc3RyaW5nIChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRSAiOiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUkt9IikKKyAgc3RyaW5nIChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRSAiOiR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLfSIpCiBlbmRpZigpCiBpZiAoQ01BS0VfSE9TVF9XSU4zMikKLSAgc3RyaW5nIChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRSAiOiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWX0iKQorICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWX0iKQogZW5kaWYoKQogCiAKIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUykKIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ0FDSEVEX1ZBUlMpCit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFKQordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSkKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUpCit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1JFQVNPTl9GQUlMVVJFKQogCiAKICMgZmlyc3Qgc3RlcCwgc2VhcmNoIGZvciB0aGUgaW50ZXJwcmV0ZXIKQEAgLTg5NCw2ICs5ODAsMTAgQEAKIAogICBpZiAoREVGSU5FRCAke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCiAgICAgICBBTkQgSVNfQUJTT0xVVEUgIiR7JHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iKQorICAgIGlmIChOT1QgJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBTVFJFUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKKyAgICAgICMgaW52YWxpZGF0ZSBjYWNoZSBwcm9wZXJ0aWVzCisgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgQ0FDSEUpCisgICAgZW5kaWYoKQogICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgIiR7JHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIENBQ0hFIElOVEVSTkFMICIiKQogICBlbHNlaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUpCiAgICAgIyBjb21wdXRlIGludGVycHJldGVyIHNpZ25hdHVyZSBhbmQgY2hlY2sgdmFsaWRpdHkgb2YgZGVmaW5pdGlvbgpAQCAtOTA3LDcgKzk5NywxMCBAQAogICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIENBQ0hFKQorICAgIGVuZGlmKCkKKyAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkUgQ0FDSEUpCisgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgQ0FDSEUpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKQEAgLTk0Miw3ICsxMDM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyBFTlYgVklSVFVBTF9FTlYKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTIEVOViBWSVJUVUFMX0VOViBFTlYgQ09OREFfUFJFRklYCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiBTY3JpcHRzCiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICkBAIC0xMDYyLDcgKzExNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTIEVOViBWSVJUVUFMX0VOVgorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgRU5WIFZJUlRVQUxfRU5WIEVOViBDT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluIFNjcmlwdHMKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX0VOVklST05NRU5UX1BBVEgKQEAgLTEyMDAsMTA1ICsxMjkzLDE0MiBAQAogICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQogICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRV9VU0FCTEUgVFJVRSkKLSAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0hBTEwgIlswLTldKyIgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IikKLSAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTlMgMCAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SKQotICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUyAxICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1IpCi0gICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TIDIgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCkKICAgICBlbHNlKCkKICAgICAgICMgSW50ZXJwcmV0ZXIgaXMgbm90IHVzYWJsZQogICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRV9VU0FCTEUgRkFMU0UpCiAgICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTikKKyAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgcnVuIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0gIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEVfVVNBQkxFCi0gICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0VRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SKQotICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgVFJVRSkKLSAgICAjIFVzZSBpbnRlcnByZXRlciB2ZXJzaW9uIGFuZCBBQkkgZm9yIGZ1dHVyZSBzZWFyY2hlcyB0byBlbnN1cmUgY29uc2lzdGVuY3kKLSAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SfSkKLSAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuYWJpZmxhZ3MpIgotICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKLSAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MKLSAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCi0gICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKLSAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKLSAgICAgICMgYXNzdW5tZSBBQkkgaXMgbm90IHN1cHBvcnRlZAotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MgIiIpCi0gICAgZW5kaWYoKQotICBlbmRpZigpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEVfVVNBQkxFKQorICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUykKKyAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgVFJVRSkKIAotICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpCi0gICAgIyBjb21wdXRlIGFuZCBzYXZlIGludGVycHJldGVyIHNpZ25hdHVyZQotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IikKLSAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyAwICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQogCi0gICAgaWYgKE5PVCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQotICAgICAgIyBkZXRlcm1pbmUgaW50ZXJwcmV0ZXIgYXJjaGl0ZWN0dXJlCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLm1heHNpemUgPiAyKiozMikiCi0gICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9JUzY0QklUCi0gICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lTNjRCSVQpCi0gICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCi0gICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JUzY0QklUKQotICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggNjQpCi0gICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgNjQpCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggMzIpCi0gICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgMzIpCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgMSAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SKQorICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9QUk9QRVJUSUVTIDIgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyAzICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUQ0gpCisKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyA0IF8ke19QWVRIT05fUFJFRklYfV9BUkNIKQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH0pCisKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyA1IF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyA2ICR7X1BZVEhPTl9QUkVGSVh9X1NPQUJJKQorCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgNyAke19QWVRIT05fUFJFRklYfV9TVERMSUIpCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgOCAke19QWVRIT05fUFJFRklYfV9TVERBUkNIKQorICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9QUk9QRVJUSUVTIDkgJHtfUFlUSE9OX1BSRUZJWH1fU0lURUxJQikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyAxMCAke19QWVRIT05fUFJFRklYfV9TSVRFQVJDSCkKKyAgICBlbHNlKCkKKyAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0hBTEwgIlswLTldKyIgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTlMgMCAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SKQorICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUyAxICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1IpCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TIDIgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCkKKworICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9FUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUikKKyAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBUUlVFKQorCisgICAgICAgICMgVXNlIGludGVycHJldGVyIHZlcnNpb24gYW5kIEFCSSBmb3IgZnV0dXJlIHNlYXJjaGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SfSkKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLmFiaWZsYWdzKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAorICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKKyAgICAgICAgICAjIGFzc3VubWUgQUJJIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUyAiIikKICAgICAgICAgZW5kaWYoKQogICAgICAgZW5kaWYoKQotICAgIGVuZGlmKCkKIAotICAgICMgcmV0cmlldmUgaW50ZXJwcmV0ZXIgaWRlbnRpdHkKLSAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtVgotICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKLSAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRAotICAgICAgICAgICAgICAgICAgICAgRVJST1JfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQpCi0gICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQotICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIE1BVENIRVMgIkFuYWNvbmRhIikKLSAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiQW5hY29uZGEiKQotICAgICAgZWxzZWlmICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBNQVRDSEVTICJFbnRob3VnaHQiKQotICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICJDYW5vcHkiKQotICAgICAgZWxzZSgpCi0gICAgICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiXihbXiBdKykuKiIgIlxcMSIgJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIiR7JHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUR9IikKLSAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJQeXRob24iKQotICAgICAgICAgICMgdHJ5IHRvIGdldCBhIG1vcmUgcHJlY2lzZSBJRAotICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBwcmludChzeXMuY29weXJpZ2h0KSIKKyAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCkKKyAgICAgICAgIyBjb21wdXRlIGFuZCBzYXZlIGludGVycHJldGVyIHNpZ25hdHVyZQorICAgICAgICBzdHJpbmcgKE1ENSBfXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSAiJHtfXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRX0iIENBQ0hFIElOVEVSTkFMICIiKQorCisgICAgICAgIGlmIChOT1QgQ01BS0VfU0laRU9GX1ZPSURfUCkKKyAgICAgICAgICAjIGRldGVybWluZSBpbnRlcnByZXRlciBhcmNoaXRlY3R1cmUKKyAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLm1heHNpemUgPiAyKiozMikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0NPUFlSSUdIVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQpCi0gICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0NPUFlSSUdIVCBNQVRDSEVTICJBY3RpdmVTdGF0ZSIpCi0gICAgICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICJBY3RpdmVQeXRob24iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lTNjRCSVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lTNjRCSVQpCisgICAgICAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQorICAgICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lTNjRCSVQpCisgICAgICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggNjQpCisgICAgICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyIDY0KQorICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggMzIpCisgICAgICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyIDMyKQorICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgcmV0cmlldmUgaW50ZXJwcmV0ZXIgaWRlbnRpdHkKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLVYKKyAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAorICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRAorICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQorICAgICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCisgICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIE1BVENIRVMgIkFuYWNvbmRhIikKKyAgICAgICAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIkFuYWNvbmRhIikKKyAgICAgICAgICBlbHNlaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIE1BVENIRVMgIkVudGhvdWdodCIpCisgICAgICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICJDYW5vcHkiKQorICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgc3RyaW5nIChSRUdFWCBSRVBMQUNFICJeKFteIF0rKS4qIiAiXFwxIiAke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiJHske19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRH0iKQorICAgICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJQeXRob24iKQorICAgICAgICAgICAgICAjIHRyeSB0byBnZXQgYSBtb3JlIHByZWNpc2UgSUQKKyAgICAgICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzeXM7IHByaW50KHN5cy5jb3B5cmlnaHQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0NPUFlSSUdIVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUKQorICAgICAgICAgICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQ09QWVJJR0hUIE1BVENIRVMgIkFjdGl2ZVN0YXRlIikKKyAgICAgICAgICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICJBY3RpdmVQeXRob24iKQorICAgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFB5dGhvbikKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgcmV0cmlldmUgdmFyaW91cyBwYWNrYWdlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllcworICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPVRydWUpLHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpLHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1GYWxzZSksc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9RmFsc2UpXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9wYXRoKCdzdGRsaWInKSxzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKSxzeXNjb25maWcuZ2V0X3BhdGgoJ3B1cmVsaWInKSxzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRsaWInKV0pKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTCisgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVCkKKyAgICAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQorICAgICAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMgMCAke19QWVRIT05fUFJFRklYfV9TVERMSUIpCisgICAgICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAxICR7X1BZVEhPTl9QUkVGSVh9X1NUREFSQ0gpCisgICAgICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAyICR7X1BZVEhPTl9QUkVGSVh9X1NJVEVMSUIpCisgICAgICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAzICR7X1BZVEhPTl9QUkVGSVh9X1NJVEVBUkNIKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fU1RETElCKQorICAgICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TVERBUkNIKQorICAgICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TSVRFTElCKQorICAgICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TSVRFQVJDSCkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMykKKyAgICAgICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyICgke19QWVRIT05fUFJFRklYfV9TT0FCSSBTT0FCSSkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgc3RvcmUgcHJvcGVydGllcyBpbiB0aGUgY2FjaGUgdG8gc3BlZWQtdXAgZnV0dXJlIHNlYXJjaGVzCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMKKyAgICAgICAgICAiJHske19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRH07JHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfTskeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9OyR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSH07JHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH07JHtfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1N9OyR7JHtfUFlUSE9OX1BSRUZJWH1fU09BQkl9OyR7JHtfUFlUSE9OX1BSRUZJWH1fU1RETElCfTskeyR7X1BZVEhPTl9QUkVGSVh9X1NUREFSQ0h9OyR7JHtfUFlUSE9OX1BSRUZJWH1fU0lURUxJQn07JHske19QWVRIT05fUFJFRklYfV9TSVRFQVJDSH0iIENBQ0hFIElOVEVSTkFMICIke19QWVRIT05fUFJFRklYfSBQcm9wZXJ0aWVzIikKKyAgICAgIGVsc2UoKQorICAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSBDQUNIRSkKKyAgICAgICAgdW5zZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQogICAgICAgZW5kaWYoKQotICAgIGVsc2UoKQotICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBQeXRob24pCiAgICAgZW5kaWYoKQorICBlbmRpZigpCiAKLSAgICAjIHJldHJpZXZlIHZhcmlvdXMgcGFja2FnZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMKLSAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZztzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPUZhbHNlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSldKSkiCi0KLSAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTCi0gICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVCkKLSAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCi0gICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTIDAgJHtfUFlUSE9OX1BSRUZJWH1fU1RETElCKQotICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAxICR7X1BZVEhPTl9QUkVGSVh9X1NUREFSQ0gpCi0gICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTIDIgJHtfUFlUSE9OX1BSRUZJWH1fU0lURUxJQikKLSAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMgMyAke19QWVRIT05fUFJFRklYfV9TSVRFQVJDSCkKLSAgICBlbHNlKCkKLSAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TVERMSUIpCi0gICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fU1REQVJDSCkKLSAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TSVRFTElCKQotICAgICAgdW5zZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1NJVEVBUkNIKQotICAgIGVuZGlmKCkKLSAgZWxzZSgpCi0gICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkUgQ0FDSEUpCi0gICAgdW5zZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIENBQ0hFIEZJTEVQQVRIICIke19QWVRIT05fUFJFRklYfSBJbnRlcnByZXRlciIpCiAgIGVuZGlmKCkKIAogICBfcHl0aG9uX21hcmtfYXNfaW50ZXJuYWwgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFKQogZW5kaWYoKQogCkBAIC0xNDYzLDYgKzE1OTMsNyBAQAogICAgIGVsc2UoKQogICAgICAgIyBjb21waWxlciBub3QgdXNhYmxlCiAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9VU0FCTEUgRkFMU0UpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHJ1biB0aGUgY29tcGlsZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn1cIiIpCiAgICAgZW5kaWYoKQogICAgIGZpbGUgKFJFTU9WRV9SRUNVUlNFICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX0RJUn0iKQogICBlbmRpZigpCkBAIC0xNDkxLDYgKzE2MjIsMTAgQEAKICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfSUQpCiAgIGVuZGlmKCkKIAorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IENvbXBpbGVyIikKKyAgZW5kaWYoKQorCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX1NJR05BVFVSRSkKIGVuZGlmKCkKQEAgLTE1MzIsOSArMTY2NywxMyBAQAogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgQ0FDSEUpCiAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcgQ0FDSEUpCiAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIENBQ0hFKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgQ0FDSEUpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCisgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBPUiBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHIENBQ0hFKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFIENBQ0hFKQorICBlbmRpZigpCisKICAgaWYgKERFRklORUQgJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWQogICAgICAgQU5EIElTX0FCU09MVVRFICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUll9IikKICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgIiR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWX0iIENBQ0hFIElOVEVSTkFMICIiKQpAQCAtMTU2NSw3ICsxNzA0LDcgQEAKICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSfSIgRU5WICR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTKQogICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQotICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTIEVOViBWSVJUVUFMX0VOVikKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUyBFTlYgVklSVFVBTF9FTlYgRU5WIENPTkRBX1BSRUZJWCkKICAgICAgIGVuZGlmKCkKICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTKQogCkBAIC0xNzk2LDcgKzE5MzUsNyBAQAogCiAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMpCiAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCi0gICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WKQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTIEVOViBWSVJUVUFMX0VOViBFTlYgQ09OREFfUFJFRklYKQogICAgICAgZW5kaWYoKQogCiAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1kgU1RSRVFVQUwgIkxPQ0FUSU9OIikKQEAgLTE5NjEsNiArMjEwMCw3IEBACiAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IikKIAogICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBBTkQgTk9UIEVYSVNUUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfVwiIikKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRS1OT1RGT1VORCIpCiAgIGVuZGlmKCkKIApAQCAtMjAxNiw3ICsyMTU2LDcgQEAKICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUykKICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWSkkIikKLSAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUyBFTlYgVklSVFVBTF9FTlYpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WIEVOViBDT05EQV9QUkVGSVgpCiAgICAgICBlbmRpZigpCiAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFMpCiAKQEAgLTIwOTMsNiArMjIzMyw3IEBACiAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJTICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0iKQogCiAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfSIpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn1cIiIpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSLU5PVEZPVU5EIikKICAgZW5kaWYoKQogCkBAIC0yMTU4LDYgKzIyOTksMTEgQEAKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAorICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDMKKyAgICAgIEFORCBOT1QgREVGSU5FRCAke19QWVRIT05fUFJFRklYfV9TT0FCSSkKKyAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyICgke19QWVRIT05fUFJFRklYfV9TT0FCSSBTT0FCSSkKKyAgZW5kaWYoKQorCiAgIGlmICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9GT1VORCkKICAgICAjIGNvbXB1dGUgYW5kIHNhdmUgZGV2ZWxvcG1lbnQgc2lnbmF0dXJlCiAgICAgc3RyaW5nIChNRDUgX18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfToke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0iKQpAQCAtMjE3MSwxMSArMjMxNywxNyBAQAogICAgIHNldCAoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCiAgIGVuZGlmKCkKIAorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IExpYnJhcnkiKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IEluY2x1ZGUgRGlyZWN0b3J5IikKKyAgZW5kaWYoKQorCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9DT05GSUcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFKQogZW5kaWYoKQogCkBAIC0yMjE4LDYgKzIzNzAsNyBAQAogICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJ9IikKIAogICBpZihfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSfSIpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUn1cIiIpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSLU5PVEZPVU5EIikKICAgZW5kaWYoKQogCkBAIC0yMjQ3LDYgKzI0MDAsMTAgQEAKICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSBDQUNIRSkKICAgZW5kaWYoKQogCisgIGlmICgke19QWVRIT05fUFJFRklYfV9BUlRJRkFDVFNfSU5URVJBQ1RJVkUpCisgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJ9IiBDQUNIRSBGSUxFUEFUSCAiJHtfUFlUSE9OX1BSRUZJWH0gTnVtUHkgSW5jbHVkZSBEaXJlY3RvcnkiKQorICBlbmRpZigpCisKICAgX3B5dGhvbl9tYXJrX2FzX2ludGVybmFsIChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTlVNUFlfU0lHTkFUVVJFKQogZW5kaWYoKQpAQCAtMjI1NywxMSArMjQxNCwxOSBAQAogICBfcHl0aG9uX2Rpc3BsYXlfZmFpbHVyZSAoIkNvdWxkIE5PVCBmaW5kICR7X1BZVEhPTl9QUkVGSVh9OiBGb3VuZCB1bnN1aXRhYmxlIG1ham9yIHZlcnNpb24gXCIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9XCIsIGJ1dCByZXF1aXJlZCBtYWpvciB2ZXJzaW9uIGlzIGV4YWN0IHZlcnNpb24gXCIke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfVwiIikKIGVuZGlmKCkKIAordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9SRUFTT05fRkFJTFVSRSkKK2ZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlQgSU4gSVRFTVMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIgRGV2ZWxvcG1lbnQgTnVtUHkpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfV9SRUFTT05fRkFJTFVSRSkKKyAgICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVBU09OX0ZBSUxVUkUgIlxuICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9OiAke18ke19QWVRIT05fUFJFRklYfV8ke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9X1JFQVNPTl9GQUlMVVJFfSIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCiBpbmNsdWRlICgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9Ly4uL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzICgke19QWVRIT05fUFJFRklYfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9WQVJTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlN9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX0NPTVBPTkVOVFMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9DT01QT05FTlRTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQVNPTl9GQUlMVVJFX01FU1NBR0UgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFQVNPTl9GQUlMVVJFfSIpCiAKICMgQ3JlYXRlIGltcG9ydGVkIHRhcmdldHMgYW5kIGhlbHBlciBmdW5jdGlvbnMKIGlmKF8ke19QWVRIT05fUFJFRklYfV9DTUFLRV9ST0xFIFNUUkVRVUFMICJQUk9KRUNUIikKQEAgLTIzMTQsOCArMjQ3OSw4IEBACiAgICAgICAgIGVsc2UoKQogICAgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyAoJHtfX25hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFUyAiQyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfSU1QTElCICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUll9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHske19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUll9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfSU1QTElCICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUklFU30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFfSIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVsc2UoKQogICAgICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIEFORCAke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQpAQCAtMjMyOSw3ICsyNDk0LDcgQEAKICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzICgke19fbmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTICJDIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHske19QWVRIT05fUFJFRklYfV9MSUJSQVJZfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAKQEAgLTIzNzcsMTUgKzI1NDIsMjEgQEAKICAgICAjCiAgICAgZnVuY3Rpb24gKF9fJHtfUFlUSE9OX1BSRUZJWH1fQUREX0xJQlJBUlkgcHJlZml4IG5hbWUpCiAgICAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMiBQWVRIT05fQUREX0xJQlJBUlkKLSAgICAgICAgIlNUQVRJQztTSEFSRUQ7TU9EVUxFIiAiIiAiIikKKyAgICAgICAgIlNUQVRJQztTSEFSRUQ7TU9EVUxFO1dJVEhfU09BQkkiICIiICIiKQogCi0gICAgICB1bnNldCAodHlwZSkKLSAgICAgIGlmIChOT1QgKFBZVEhPTl9BRERfTElCUkFSWV9TVEFUSUMKLSAgICAgICAgICAgIE9SIFBZVEhPTl9BRERfTElCUkFSWV9TSEFSRUQKLSAgICAgICAgICAgIE9SIFBZVEhPTl9BRERfTElCUkFSWV9NT0RVTEUpKQorICAgICAgaWYgKHByZWZpeCBTVFJFUVVBTCAiUHl0aG9uMiIgQU5EIFBZVEhPTl9BRERfTElCUkFSWV9XSVRIX1NPQUJJKQorICAgICAgICBtZXNzYWdlIChBVVRIT1JfV0FSTklORyAiRmluZFB5dGhvbjI6IE9wdGlvbiBgV0lUSF9TT0FCSWAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUHl0aG9uMiBhbmQgd2lsbCBiZSBpZ25vcmVkLiIpCisgICAgICAgIHVuc2V0IChQWVRIT05fQUREX0xJQlJBUllfV0lUSF9TT0FCSSkKKyAgICAgIGVuZGlmKCkKKworICAgICAgaWYgKFBZVEhPTl9BRERfTElCUkFSWV9TVEFUSUMpCisgICAgICAgIHNldCAodHlwZSBTVEFUSUMpCisgICAgICBlbHNlaWYgKFBZVEhPTl9BRERfTElCUkFSWV9TSEFSRUQpCisgICAgICAgIHNldCAodHlwZSBTSEFSRUQpCisgICAgICBlbHNlKCkKICAgICAgICAgc2V0ICh0eXBlIE1PRFVMRSkKICAgICAgIGVuZGlmKCkKLSAgICAgIGFkZF9saWJyYXJ5ICgke25hbWV9ICR7dHlwZX0gJHtBUkdOfSkKKyAgICAgIGFkZF9saWJyYXJ5ICgke25hbWV9ICR7dHlwZX0gJHtQWVRIT05fQUREX0xJQlJBUllfVU5QQVJTRURfQVJHVU1FTlRTfSkKIAogICAgICAgZ2V0X3Byb3BlcnR5ICh0eXBlIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIFRZUEUpCiAKQEAgLTIzOTYsNyArMjU2NywxOCBAQAogICAgICAgICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiV2luZG93cyIpCiAgICAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBTVUZGSVggIi5weWQiKQogICAgICAgICBlbmRpZigpCisKKyAgICAgICAgaWYgKFBZVEhPTl9BRERfTElCUkFSWV9XSVRIX1NPQUJJIEFORCAke3ByZWZpeH1fU09BQkkpCisgICAgICAgICAgZ2V0X3Byb3BlcnR5IChzdWZmaXggVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgU1VGRklYKQorICAgICAgICAgIGlmIChOT1Qgc3VmZml4KQorICAgICAgICAgICAgc2V0IChzdWZmaXggIiR7Q01BS0VfU0hBUkVEX01PRFVMRV9TVUZGSVh9IikKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBTVUZGSVggIi4keyR7cHJlZml4fV9TT0FCSX0ke3N1ZmZpeH0iKQorICAgICAgICBlbmRpZigpCiAgICAgICBlbHNlKCkKKyAgICAgICAgaWYgKFBZVEhPTl9BRERfTElCUkFSWV9XSVRIX1NPQUJJKQorICAgICAgICAgIG1lc3NhZ2UgKEFVVEhPUl9XQVJOSU5HICJGaW5kJHtwcmVmaXh9OiBPcHRpb24gYFdJVEhfU09BQklgIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBgTU9EVUxFYCBsaWJyYXJ5IHR5cGUuIikKKyAgICAgICAgZW5kaWYoKQogICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMgKCR7bmFtZX0gUFJJVkFURSAke3ByZWZpeH06OlB5dGhvbikKICAgICAgIGVuZGlmKCkKICAgICBlbmRmdW5jdGlvbigpCkBAIC0yNDI3LDUgKzI2MDksMyBAQAogZWxzZSgpCiAgIHVuc2V0IChDTUFLRV9GSU5EX0ZSQU1FV09SSykKIGVuZGlmKCkKLQotdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT05GSUcgQ0FDSEUpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQeXRob24yLmNtYWtlIGIvTW9kdWxlcy9GaW5kUHl0aG9uMi5jbWFrZQppbmRleCAzY2M3ZDU2Li4xNWUxY2UxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQeXRob24yLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFB5dGhvbjIuY21ha2UKQEAgLTE0MCw4ICsxNDAsNyBAQAogCiBgYFB5dGhvbjJfRklORF9TVFJBVEVHWWBgCiAgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyBob3cgbG9va3VwIHdpbGwgYmUgZG9uZS4KLSAgVGhlIGBgUHl0aG9uMl9GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uMl9GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgVkVSU0lPTmBgOiBUcnkgdG8gZmluZCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBpbiBhbGwgc3BlY2lmaWVkCiAgICAgbG9jYXRpb25zLgpAQCAtMTU0LDggKzE1Myw3IEBACiBgYFB5dGhvbjJfRklORF9SRUdJU1RSWWBgCiAgIE9uIFdpbmRvd3MgdGhlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgZGV0ZXJtaW5lIHRoZSBvcmRlcgogICBvZiBwcmVmZXJlbmNlIGJldHdlZW4gcmVnaXN0cnkgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgdGhlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgdGhlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVHJ5IHRvIHVzZSByZWdpc3RyeSBiZWZvcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQuCkBAIC0xNjUsOCArMTYzLDggQEAKIGBgUHl0aG9uMl9GSU5EX0ZSQU1FV09SS2BgCiAgIE9uIG1hY09TIHRoZSBgYFB5dGhvbjJfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZSBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mCiAgIHByZWZlcmVuY2UgYmV0d2VlbiBBcHBsZS1zdHlsZSBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCi0gIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciB0YWtlIHNhbWUgdmFsdWVzIGFzCi0gIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgIHZhcmlhYmxlLgorICBUaGlzIHZhcmlhYmxlIGNhbiB0YWtlIHNhbWUgdmFsdWVzIGFzIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgCisgIHZhcmlhYmxlLgogCiAgIC4uIG5vdGU6OgogCkBAIC0xNzYsMTEgKzE3NCwxMSBAQAogICB2YXJpYWJsZSB3aWxsIGJlIHVzZWQsIGlmIGFueS4KIAogYGBQeXRob24yX0ZJTkRfVklSVFVBTEVOVmBgCi0gIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMuIEl0IGlzIG1lYW5pbmdmdWxsCi0gIG9ubHkgd2hlbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlIChpLmUuIHRoZSBgYGFjdGl2YXRlYGAgc2NyaXB0IGhhcwotICBiZWVuIGV2YWx1YXRlZCkuIEluIHRoaXMgY2FzZSwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyCi0gIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgYW5kIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZXMuCi0gIFRoZSBgYFB5dGhvbjJfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMgbWFuYWdlZCBieQorICBgYHZpcnR1YWxlbnZgYCBvciBgYGNvbmRhYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgYWN0aXZhdGVgYCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkKS4gSW4gdGhpcyBjYXNlLCBpdAorICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYGBQeXRob24yX0ZJTkRfUkVHSVNUUllgYCBhbmQgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgCisgIHZhcmlhYmxlcy4gIFRoZSBgYFB5dGhvbjJfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlCiAgIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCBiZWZvcmUgYW55IG90aGVyIHN0YW5kYXJkCkBAIC0yMzcsMTYgKzIzNSwzMyBAQAogICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgorCitgYFB5dGhvbjJfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFYGAKKyAgU2VsZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS4gVGhpcyBpcyBhIGJvb2xlYW4gdmFyaWFibGU6CisKKyAgKiBJZiBzZXQgdG8gYGBUUlVFYGA6IENyZWF0ZSBDTWFrZSBjYWNoZSBlbnRyaWVzIGZvciB0aGUgYWJvdmUgYXJ0aWZhY3QKKyAgICBzcGVjaWZpY2F0aW9uIHZhcmlhYmxlcyBzbyB0aGF0IHVzZXJzIGNhbiBlZGl0IHRoZW0gaW50ZXJhY3RpdmVseS4KKyAgICBUaGlzIGRpc2FibGVzIHN1cHBvcnQgZm9yIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50IHJlcXVpcmVtZW50cy4KKyAgKiBJZiBzZXQgdG8gYGBGQUxTRWBgIG9yIHVuZGVmaW5lZDogRW5hYmxlIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50CisgICAgcmVxdWlyZW1lbnRzLgorCiBDb21tYW5kcwogXl5eXl5eXl4KIAotVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgY29tbWFuZCBgYFB5dGhvbl9hZGRfbGlicmFyeWBgICh3aGVuCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjb21tYW5kIGBgUHl0aG9uMl9hZGRfbGlicmFyeWBgICh3aGVuCiA6cHJvcF9nYmw6YENNQUtFX1JPTEVgIGlzIGBgUFJPSkVDVGBgKSwgd2hpY2ggaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcwogOmNvbW1hbmQ6YGFkZF9saWJyYXJ5YCBhbmQgYWRkcyBhIGRlcGVuZGVuY3kgdG8gdGFyZ2V0IGBgUHl0aG9uMjo6UHl0aG9uYGAgb3IsCiB3aGVuIGxpYnJhcnkgdHlwZSBpcyBgYE1PRFVMRWBgLCB0byB0YXJnZXQgYGBQeXRob24yOjpNb2R1bGVgYCBhbmQgdGFrZXMgY2FyZQogb2YgUHl0aG9uIG1vZHVsZSBuYW1pbmcgcnVsZXM6OgogCi0gIFB5dGhvbjJfYWRkX2xpYnJhcnkgKG15X21vZHVsZSBNT0RVTEUgc3JjMS5jcHApCisgIFB5dGhvbjJfYWRkX2xpYnJhcnkgKDxuYW1lPiBbU1RBVElDIHwgU0hBUkVEIHwgTU9EVUxFXQorICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlMT4gWzxzb3VyY2UyPiAuLi5dKQogCiBJZiBsaWJyYXJ5IHR5cGUgaXMgbm90IHNwZWNpZmllZCwgYGBNT0RVTEVgYCBpcyBhc3N1bWVkLgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFB5dGhvbjMuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQeXRob24zLmNtYWtlCmluZGV4IDA2NmQwZGYuLjgxMzVhMWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFB5dGhvbjMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUHl0aG9uMy5jbWFrZQpAQCAtOTQsNiArOTQsMTMgQEAKIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQogICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYC4KK2BgUHl0aG9uM19TT0FCSWBgCisgIEV4dGVuc2lvbiBzdWZmaXggZm9yIG1vZHVsZXMuCisKKyAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfZmxhZygnU09BQkknKWBgIG9yIGNvbXB1dGVkIGZyb20KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfZmxhZygnRVhUX1NVRkZJWCcpYGAgb3IKKyAgYGBweXRob24zLWNvbmZpZyAtLWV4dGVuc2lvbi1zdWZmaXhgYC4KIGBgUHl0aG9uM19Db21waWxlcl9GT1VORGBgCiAgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiAzIGNvbXBpbGVyLgogYGBQeXRob24zX0NPTVBJTEVSYGAKQEAgLTE4MSw4ICsxODgsNyBAQAogCiBgYFB5dGhvbjNfRklORF9TVFJBVEVHWWBgCiAgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyBob3cgbG9va3VwIHdpbGwgYmUgZG9uZS4KLSAgVGhlIGBgUHl0aG9uM19GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uM19GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgVkVSU0lPTmBgOiBUcnkgdG8gZmluZCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBpbiBhbGwgc3BlY2lmaWVkCiAgICAgbG9jYXRpb25zLgpAQCAtMTk1LDggKzIwMSw3IEBACiBgYFB5dGhvbjNfRklORF9SRUdJU1RSWWBgCiAgIE9uIFdpbmRvd3MgdGhlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgZGV0ZXJtaW5lIHRoZSBvcmRlcgogICBvZiBwcmVmZXJlbmNlIGJldHdlZW4gcmVnaXN0cnkgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgVGhlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVHJ5IHRvIHVzZSByZWdpc3RyeSBiZWZvcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQuCkBAIC0yMDYsOCArMjExLDggQEAKIGBgUHl0aG9uM19GSU5EX0ZSQU1FV09SS2BgCiAgIE9uIG1hY09TIHRoZSBgYFB5dGhvbjNfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZSBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mCiAgIHByZWZlcmVuY2UgYmV0d2VlbiBBcHBsZS1zdHlsZSBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCi0gIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciB0YWtlIHNhbWUgdmFsdWVzIGFzCi0gIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgIHZhcmlhYmxlLgorICBUaGlzIHZhcmlhYmxlIGNhbiB0YWtlIHNhbWUgdmFsdWVzIGFzIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgCisgIHZhcmlhYmxlLgogCiAgIC4uIG5vdGU6OgogCkBAIC0yMTcsMTEgKzIyMiwxMSBAQAogICB2YXJpYWJsZSB3aWxsIGJlIHVzZWQsIGlmIGFueS4KIAogYGBQeXRob24zX0ZJTkRfVklSVFVBTEVOVmBgCi0gIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMuIEl0IGlzIG1lYW5pbmdmdWxsCi0gIG9ubHkgd2hlbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlIChpLmUuIHRoZSBgYGFjdGl2YXRlYGAgc2NyaXB0IGhhcwotICBiZWVuIGV2YWx1YXRlZCkuIEluIHRoaXMgY2FzZSwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyCi0gIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgYW5kIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZXMuCi0gIFRoZSBgYFB5dGhvbjNfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMgbWFuYWdlZCBieQorICBgYHZpcnR1YWxlbnZgYCBvciBgYGNvbmRhYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgYWN0aXZhdGVgYCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkKS4gSW4gdGhpcyBjYXNlLCBpdAorICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYGBQeXRob24zX0ZJTkRfUkVHSVNUUllgYCBhbmQgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgCisgIHZhcmlhYmxlcy4gIFRoZSBgYFB5dGhvbjNfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlCiAgIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCBiZWZvcmUgYW55IG90aGVyIHN0YW5kYXJkCkBAIC0yNzgsMTggKzI4MywzOCBAQAogICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgorCitgYFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFYGAKKyAgU2VsZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS4gVGhpcyBpcyBhIGJvb2xlYW4gdmFyaWFibGU6CisKKyAgKiBJZiBzZXQgdG8gYGBUUlVFYGA6IENyZWF0ZSBDTWFrZSBjYWNoZSBlbnRyaWVzIGZvciB0aGUgYWJvdmUgYXJ0aWZhY3QKKyAgICBzcGVjaWZpY2F0aW9uIHZhcmlhYmxlcyBzbyB0aGF0IHVzZXJzIGNhbiBlZGl0IHRoZW0gaW50ZXJhY3RpdmVseS4KKyAgICBUaGlzIGRpc2FibGVzIHN1cHBvcnQgZm9yIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50IHJlcXVpcmVtZW50cy4KKyAgKiBJZiBzZXQgdG8gYGBGQUxTRWBgIG9yIHVuZGVmaW5lZDogRW5hYmxlIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50CisgICAgcmVxdWlyZW1lbnRzLgorCiBDb21tYW5kcwogXl5eXl5eXl4KIAotVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgY29tbWFuZCBgYFB5dGhvbl9hZGRfbGlicmFyeWBgICh3aGVuCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjb21tYW5kIGBgUHl0aG9uM19hZGRfbGlicmFyeWBgICh3aGVuCiA6cHJvcF9nYmw6YENNQUtFX1JPTEVgIGlzIGBgUFJPSkVDVGBgKSwgd2hpY2ggaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcwogOmNvbW1hbmQ6YGFkZF9saWJyYXJ5YCBhbmQgYWRkcyBhIGRlcGVuZGVuY3kgdG8gdGFyZ2V0IGBgUHl0aG9uMzo6UHl0aG9uYGAgb3IsCiB3aGVuIGxpYnJhcnkgdHlwZSBpcyBgYE1PRFVMRWBgLCB0byB0YXJnZXQgYGBQeXRob24zOjpNb2R1bGVgYCBhbmQgdGFrZXMgY2FyZQogb2YgUHl0aG9uIG1vZHVsZSBuYW1pbmcgcnVsZXM6OgogCi0gIFB5dGhvbjNfYWRkX2xpYnJhcnkgKG15X21vZHVsZSBNT0RVTEUgc3JjMS5jcHApCisgIFB5dGhvbjNfYWRkX2xpYnJhcnkgKDxuYW1lPiBbU1RBVElDIHwgU0hBUkVEIHwgTU9EVUxFIFtXSVRIX1NPQUJJXV0KKyAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZTE+IFs8c291cmNlMj4gLi4uXSkKIAotSWYgbGlicmFyeSB0eXBlIGlzIG5vdCBzcGVjaWZpZWQsIGBgTU9EVUxFYGAgaXMgYXNzdW1lZC4KK0lmIHRoZSBsaWJyYXJ5IHR5cGUgaXMgbm90IHNwZWNpZmllZCwgYGBNT0RVTEVgYCBpcyBhc3N1bWVkLgorCitGb3IgYGBNT0RVTEVgYCBsaWJyYXJ5IHR5cGUsIGlmIG9wdGlvbiBgYFdJVEhfU09BQklgYCBpcyBzcGVjaWZpZWQsIHRoZQorbW9kdWxlIHN1ZmZpeCB3aWxsIGluY2x1ZGUgdGhlIGBgUHl0aG9uM19TT0FCSWBgIHZhbHVlLCBpZiBhbnkuCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFJ1YnkuY21ha2UgYi9Nb2R1bGVzL0ZpbmRSdWJ5LmNtYWtlCmluZGV4IDdlMDFmYmMuLjFiZGVlNjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFJ1YnkuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUnVieS5jbWFrZQpAQCAtOCwyODggKzgsNTA1IEBACiBGaW5kIFJ1YnkKIAogVGhpcyBtb2R1bGUgZmluZHMgaWYgUnVieSBpcyBpbnN0YWxsZWQgYW5kIGRldGVybWluZXMgd2hlcmUgdGhlCi1pbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgYXJlLiAgUnVieSAxLjgsIDEuOSwgMi4wIGFuZCAyLjEgYXJlCitpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgYXJlLiAgUnVieSAxLjggdGhyb3VnaCAyLjcgYXJlCiBzdXBwb3J0ZWQuCiAKIFRoZSBtaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24gb2YgUnVieSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQotc3RhbmRhcmQgc3ludGF4LCBlLmcuICBmaW5kX3BhY2thZ2UoUnVieSAxLjgpCitzdGFuZGFyZCBzeW50YXgsIGUuZy4KIAotSXQgYWxzbyBkZXRlcm1pbmVzIHdoYXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgaXMuICBUaGlzIGNvZGUgc2V0cwotdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotYGBSVUJZX0VYRUNVVEFCTEVgYAorICBmaW5kX3BhY2thZ2UoUnVieSAyLjUuMSBFWEFDVCBSRVFVSVJFRCkKKyAgIyBPUgorICBmaW5kX3BhY2thZ2UoUnVieSAyLjQpCisKK0l0IGFsc28gZGV0ZXJtaW5lcyB3aGF0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGlzLgorCitWaXJ0dWFsIGVudmlyb25tZW50cyBzdWNoIGFzIFJWTSBhcmUgaGFuZGxlZCBhcyB3ZWxsLCBieSBwYXNzaW5nCit0aGUgYXJndW1lbnQgYGBSdWJ5X0ZJTkRfVklSVFVBTEVOVmBgCisKK1Jlc3VsdCBWYXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtb2R1bGUgd2lsbCBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW4geW91ciBwcm9qZWN0OgorCitgYFJ1YnlfRk9VTkRgYAorICBzZXQgdG8gdHJ1ZSBpZiBydWJ5IHdhcyBmb3VuZCBzdWNjZXNzZnVsbHkKK2BgUnVieV9FWEVDVVRBQkxFYGAKICAgZnVsbCBwYXRoIHRvIHRoZSBydWJ5IGJpbmFyeQotYGBSVUJZX0lOQ0xVREVfRElSU2BgCitgYFJ1YnlfSU5DTFVERV9ESVJTYGAKICAgaW5jbHVkZSBkaXJzIHRvIGJlIHVzZWQgd2hlbiB1c2luZyB0aGUgcnVieSBsaWJyYXJ5Ci1gYFJVQllfTElCUkFSWWBgCi0gIGZ1bGwgcGF0aCB0byB0aGUgcnVieSBsaWJyYXJ5Ci1gYFJVQllfVkVSU0lPTmBgCitgYFJ1YnlfTElCUkFSSUVTYGAKKyAgbGlicmFyaWVzIG5lZWRlZCB0byB1c2UgcnVieSBmcm9tIEMuCitgYFJ1YnlfVkVSU0lPTmBgCiAgIHRoZSB2ZXJzaW9uIG9mIHJ1Ynkgd2hpY2ggd2FzIGZvdW5kLCBlLmcuICIxLjguNyIKLWBgUlVCWV9GT1VORGBgCi0gIHNldCB0byB0cnVlIGlmIHJ1Ynkgd3MgZm91bmQgc3VjY2Vzc2Z1bGx5CitgYFJ1YnlfVkVSU0lPTl9NQUpPUmBgCisgIFJ1YnkgbWFqb3IgdmVyc2lvbi4KK2BgUnVieV9WRVJTSU9OX01JTk9SYGAKKyAgUnVieSBtaW5vciB2ZXJzaW9uLgorYGBSdWJ5X1ZFUlNJT05fUEFUQ0hgYAorICBSdWJ5IHBhdGNoIHZlcnNpb24uCisKIAogQWxzbzoKIAotYGBSVUJZX0lOQ0xVREVfUEFUSGBgCi0gIHNhbWUgYXMgUlVCWV9JTkNMVURFX0RJUlMsIG9ubHkgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgZG9uJ3QgdXNlIGl0CitgYFJ1YnlfSU5DTFVERV9QQVRIYGAKKyAgc2FtZSBhcyBSdWJ5X0lOQ0xVREVfRElSUywgb25seSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBkb24ndCB1c2UgaXQKKworSGludHMKK15eXl5eCisKK2BgUnVieV9ST09UX0RJUmBgCisgIERlZmluZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgYSBSdWJ5IGluc3RhbGxhdGlvbi4KKworYGBSdWJ5X0ZJTkRfVklSVFVBTEVOVmBgCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMgbWFuYWdlZCBieQorICBgYHJ2bWBgLiBJdCBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQKKyAgaXMgYWN0aXZlIChpLmUuIHRoZSBgYHJ2bWBgIHNjcmlwdCBoYXMgYmVlbiBldmFsdWF0ZWQgb3IgYXQgbGVhc3QgdGhlCisgIGBgTVlfUlVCWV9IT01FYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KS4KKyAgVGhlIGBgUnVieV9GSU5EX1ZJUlRVQUxFTlZgYCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIGVtcHR5IG9yCisgIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICogYGBGSVJTVGBgOiBUaGUgdmlydHVhbCBlbnZpcm9ubWVudCBpcyB1c2VkIGJlZm9yZSBhbnkgb3RoZXIgc3RhbmRhcmQKKyAgICBwYXRocyB0byBsb29rLXVwIGZvciB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisgICogYGBPTkxZYGA6IE9ubHkgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCB0byBsb29rLXVwIGZvciB0aGUKKyAgICBpbnRlcnByZXRlci4KKyAgKiBgYFNUQU5EQVJEYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIG5vdCB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQorICAgIGludGVycHJldGVyIChhc3N1bWluZyBpdCBpc24ndCBzdGlsbCBpbiB0aGUgUEFUSC4uLikKKwogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotIyAgIFJVQllfQVJDSERJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJhcmNoZGlyIkA6PkApJ2AKLSMgICBSVUJZX1NJVEVBUkNIRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAInNpdGVhcmNoZGlyIkA6PkApJ2AKLSMgICBSVUJZX1NJVEVESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAic2l0ZWxpYmRpciJAOj5AKSdgCi0jICAgUlVCWV9MSUJESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAibGliZGlyIkA6PkApJ2AKLSMgICBSVUJZX0xJQlJVQllBUkc9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAiTElCUlVCWUFSR19TSEFSRUQiQDo+QCknYAorIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorIyBEZWZpbmUgY2FtZWwgY2FzZSB2ZXJzaW9ucyBvZiBpbnB1dCB2YXJpYWJsZXMKK2ZvcmVhY2goVVBQRVIKKyAgICBSVUJZX0VYRUNVVEFCTEUKKyAgICBSVUJZX0xJQlJBUlkKKyAgICBSVUJZX0lOQ0xVREVfRElSCisgICAgUlVCWV9DT05GSUdfSU5DTFVERV9ESVIKKyAgICApCisgICAgaWYgKERFRklORUQgJHtVUFBFUn0pCisgICAgICBzdHJpbmcoUkVQTEFDRSAiUlVCWV8iICJSdWJ5XyIgQ2FtZWwgJHtVUFBFUn0pCisgICAgICAgIGlmIChOT1QgREVGSU5FRCAke0NhbWVsfSkKKyAgICAgICAgICAgIHNldCgke0NhbWVsfSAkeyR7VVBQRVJ9fSkKKyAgICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCisjICAgUnVieV9BUkNIRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAImFyY2hkaXIiQDo+QCknYAorIyAgIFJ1YnlfU0lURUFSQ0hESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAic2l0ZWFyY2hkaXIiQDo+QCknYAorIyAgIFJ1YnlfU0lURURJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJzaXRlbGliZGlyIkA6PkApJ2AKKyMgICBSdWJ5X0xJQkRJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJsaWJkaXIiQDo+QCknYAorIyAgIFJ1YnlfTElCUlVCWUFSRz1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJMSUJSVUJZQVJHX1NIQVJFRCJAOj5AKSdgCiAKICMgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBnZXQgZGVidWcgb3V0cHV0IGZvciB0aGlzIGZpbGUKLSMgc2V0KF9SVUJZX0RFQlVHX09VVFBVVCBUUlVFKQorIyBzZXQoX1J1YnlfREVCVUdfT1VUUFVUIFRSVUUpCiAKICMgRGV0ZXJtaW5lIHRoZSBsaXN0IG9mIHBvc3NpYmxlIG5hbWVzIG9mIHRoZSBydWJ5IGV4ZWN1dGFibGUgZGVwZW5kaW5nCiAjIG9uIHdoaWNoIHZlcnNpb24gb2YgcnVieSBpcyByZXF1aXJlZAotc2V0KF9SVUJZX1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVMgcnVieSkKK3NldChfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkpCiAKLSMgaWYgMS45IGlzIHJlcXVpcmVkLCBkb24ndCBsb29rIGZvciBydWJ5MTggYW5kIHJ1YnkxLjgsIGRlZmF1bHQgdG8gdmVyc2lvbiAxLjgKLWlmKERFRklORUQgUnVieV9GSU5EX1ZFUlNJT05fTUFKT1IgQU5EIERFRklORUQgUnVieV9GSU5EX1ZFUlNJT05fTUlOT1IpCi0gIHNldChSdWJ5X0ZJTkRfVkVSU0lPTl9TSE9SVF9OT0RPVCAiJHtSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUn0ke1JVQllfRklORF9WRVJTSU9OX01JTk9SfSIpCi0gICMgd2UgY2FuJ3QgY29uc3RydWN0IHRoYXQgaWYgb25seSBtYWpvciB2ZXJzaW9uIGlzIGdpdmVuCi0gIHNldChfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTCi0gICAgcnVieSR7UnVieV9GSU5EX1ZFUlNJT05fTUFKT1J9LiR7UnVieV9GSU5EX1ZFUlNJT05fTUlOT1J9Ci0gICAgcnVieSR7UnVieV9GSU5EX1ZFUlNJT05fTUFKT1J9JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUn0KLSAgICAke19SVUJZX1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9KQotZWxzZSgpCi0gIHNldChSdWJ5X0ZJTkRfVkVSU0lPTl9TSE9SVF9OT0RPVCAiMTgiKQorIyBJZiBub3Qgc3BlY2lmaWVkLCBhbGxvdyBldmVyeXRoaW5nIGFzIGZhciBiYWNrIGFzIDEuOC4wCitpZihOT1QgREVGSU5FRCBSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUikKKyAgc2V0KFJ1YnlfRklORF9WRVJTSU9OICIxLjguMCIpCisgIHNldChSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUiAxKQorICBzZXQoUnVieV9GSU5EX1ZFUlNJT05fTUlOT1IgOCkKKyAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX1BBVENIIDApCiBlbmRpZigpCiAKLWlmKE5PVCBSdWJ5X0ZJTkRfVkVSU0lPTl9FWEFDVCkKLSAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5Mi40IHJ1YnkyNCkKLSAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5Mi4zIHJ1YnkyMykKLSAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5Mi4yIHJ1YnkyMikKLSAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5Mi4xIHJ1YnkyMSkKLSAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5Mi4wIHJ1YnkyMCkKLSAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5MS45IHJ1YnkxOSkKK2lmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgbWVzc2FnZSgiUnVieV9GSU5EX1ZFUlNJT049JHtSdWJ5X0ZJTkRfVkVSU0lPTn0iKQorICBtZXNzYWdlKCJSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUj0ke1J1YnlfRklORF9WRVJTSU9OX01BSk9SfSIpCisgIG1lc3NhZ2UoIlJ1YnlfRklORF9WRVJTSU9OX01JTk9SPSR7UnVieV9GSU5EX1ZFUlNJT05fTUlOT1J9IikKKyAgbWVzc2FnZSgiUnVieV9GSU5EX1ZFUlNJT05fUEFUQ0g9JHtSdWJ5X0ZJTkRfVkVSU0lPTl9QQVRDSH0iKQorZW5kaWYoKQogCi0gICMgaWYgd2Ugd2FudCBhIHZlcnNpb24gYmVsb3cgMS45LCBhbHNvIGxvb2sgZm9yIHJ1YnkgMS44Ci0gIGlmKCIke1J1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UfSIgVkVSU0lPTl9MRVNTICIxOSIpCi0gICAgbGlzdChBUFBFTkQgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5MS44IHJ1YnkxOCkKK3NldChSdWJ5X0ZJTkRfVkVSU0lPTl9TSE9SVF9OT0RPVCAiJHtSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUn0ke1J1YnlfRklORF9WRVJTSU9OX01JTk9SfSIpCisKKyMgU2V0IG5hbWUgb2YgcG9zc2libGUgZXhlY3V0YWJsZXMsIGlnbm9yaW5nIHRoZSBtaW5vcgorIyBFZzoKKyMgMi4xLjEgPT4gZnJvbSBydWJ5MjcgdG8gcnVieTIxIGluY2x1ZGVkCisjIDIuMSAgID0+IGZyb20gcnVieTI3IHRvIHJ1YnkyMSBpbmNsdWRlZAorIyAyICAgICA9PiBmcm9tIHJ1YnkyNiB0byBydWJ5MjAgaW5jbHVkZWQKKyMgZW1wdHkgPT4gZnJvbSBydWJ5MjcgdG8gcnVieTE4IGluY2x1ZGVkCitpZihOT1QgUnVieV9GSU5EX1ZFUlNJT05fRVhBQ1QpCisKKyAgZm9yZWFjaChfcnVieV92ZXJzaW9uIFJBTkdFIDI3IDE4IC0xKQorICAgIHN0cmluZyhTVUJTVFJJTkcgIiR7X3J1YnlfdmVyc2lvbn0iIDAgMSBfcnVieV9tYWpvcl92ZXJzaW9uKQorICAgIHN0cmluZyhTVUJTVFJJTkcgIiR7X3J1YnlfdmVyc2lvbn0iIDEgMSBfcnVieV9taW5vcl92ZXJzaW9uKQorCisgICAgaWYoTk9UICIke19ydWJ5X21ham9yX3ZlcnNpb259JHtfcnVieV9taW5vcl92ZXJzaW9ufSIgVkVSU0lPTl9MRVNTICR7UnVieV9GSU5EX1ZFUlNJT05fU0hPUlRfTk9ET1R9KQorICAgICAgIyBBcHBlbmQgYm90aCBydWJ5WC5ZIGFuZCBydWJ5WFkgKGVnOiBydWJ5Mi43IHJ1YnkyNykKKyAgICAgIGxpc3QoQVBQRU5EIF9SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVMgcnVieSR7X3J1YnlfbWFqb3JfdmVyc2lvbn0uJHtfcnVieV9taW5vcl92ZXJzaW9ufSBydWJ5JHtfcnVieV9tYWpvcl92ZXJzaW9ufSR7X3J1YnlfbWlub3JfdmVyc2lvbn0pCisgICAgZWxzZSgpCisgICAgICBicmVhaygpCisgICAgZW5kaWYoKQorCisgIGVuZGZvcmVhY2goKQorCisgIGxpc3QoUkVNT1ZFX0RVUExJQ0FURVMgX1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUykKK2VuZGlmKCkKKworIyB2aXJ0dWFsIGVudmlyb25tZW50cyBoYW5kbGluZyAoZWcgUlZNKQoraWYgKERFRklORUQgRU5We01ZX1JVQllfSE9NRX0pCisgIGlmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgICBtZXNzYWdlKCJNeSBydWJ5IGhvbWUgaXMgZGVmaW5lZDogJEVOVntNWV9SVUJZX0hPTUV9IikKICAgZW5kaWYoKQogCi0gIGxpc3QoUkVNT1ZFX0RVUExJQ0FURVMgX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUykKKyAgaWYgKERFRklORUQgUnVieV9GSU5EX1ZJUlRVQUxFTlYpCisgICAgaWYgKE5PVCBSdWJ5X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFl8U1RBTkRBUkQpJCIpCisgICAgICBtZXNzYWdlIChBVVRIT1JfV0FSTklORyAiRmluZFJ1Ynk6ICR7UnVieV9GSU5EX1ZJUlRVQUxFTlZ9OiBpbnZhbGlkIHZhbHVlIGZvciAnUnVieV9GSU5EX1ZJUlRVQUxFTlYnLiAnRklSU1QnLCAnT05MWScgb3IgJ1NUQU5EQVJEJyBleHBlY3RlZC4gJ0ZJUlNUJyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgc2V0IChfUnVieV9GSU5EX1ZJUlRVQUxFTlYgIkZJUlNUIikKKyAgICBlbHNlKCkKKyAgICAgIHNldCAoX1J1YnlfRklORF9WSVJUVUFMRU5WICR7UnVieV9GSU5EX1ZJUlRVQUxFTlZ9KQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc2V0IChfUnVieV9GSU5EX1ZJUlRVQUxFTlYgRklSU1QpCisgIGVuZGlmKCkKK2Vsc2UoKQorICBpZiAoREVGSU5FRCBSdWJ5X0ZJTkRfVklSVFVBTEVOVikKKyAgICBtZXNzYWdlKCJFbnZpcm9ubWVudCB2YXJpYWJsZSBNWV9SVUJZX0hPTUUgaXNuJ3Qgc2V0LCBkZWZhdWx0aW5nIGJhY2sgdG8gUnVieV9GSU5EX1ZJUlRVQUxFTlY9U1RBTkRBUkQiKQorICBlbmRpZigpCisgIHNldCAoX1J1YnlfRklORF9WSVJUVUFMRU5WIFNUQU5EQVJEKQogZW5kaWYoKQogCi1maW5kX3Byb2dyYW0oUlVCWV9FWEVDVVRBQkxFIE5BTUVTICR7X1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FU30pCitpZihfUnVieV9ERUJVR19PVVRQVVQpCisgIG1lc3NhZ2UoIl9SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVM9JHtfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfSIpCisgIG1lc3NhZ2UoIl9SdWJ5X0ZJTkRfVklSVFVBTEVOVj0ke19SdWJ5X0ZJTkRfVklSVFVBTEVOVn0iKQorZW5kaWYoKQogCi1pZihSVUJZX0VYRUNVVEFCTEUgIEFORCBOT1QgIFJVQllfVkVSU0lPTl9NQUpPUikKK2Z1bmN0aW9uIChfUlVCWV9WQUxJREFURV9JTlRFUlBSRVRFUikKKyAgaWYgKE5PVCBSdWJ5X0VYRUNVVEFCTEUpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAwIF9SVkkgIkVYQUNUO0NIRUNLX0VYSVNUUyIgIiIgIiIpCisgIGlmIChfUlZJX1VOUEFSU0VEX0FSR1VNRU5UUykKKyAgICBzZXQgKGV4cGVjdGVkX3ZlcnNpb24gJHtfUlZJX1VOUEFSU0VEX0FSR1VNRU5UU30pCisgIGVsc2UoKQorICAgIHVuc2V0IChleHBlY3RlZF92ZXJzaW9uKQorICBlbmRpZigpCisKKyAgaWYgKF9SVklfQ0hFQ0tfRVhJU1RTIEFORCBOT1QgRVhJU1RTICIke1J1YnlfRVhFQ1VUQUJMRX0iKQorICAgICMgaW50ZXJwcmV0ZXIgZG9lcyBub3QgZXhpc3QgYW55bW9yZQorICAgIHNldCAoX1J1YnlfSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBpbnRlcnByZXRlciBcIiR7UnVieV9FWEVDVVRBQkxFfVwiIikKKyAgICBzZXRfcHJvcGVydHkgKENBQ0hFIFJ1YnlfRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiUnVieV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgIyBDaGVjayB0aGUgdmVyc2lvbiBpdCByZXR1cm5zCisgICMgZXhlY3V0YWJsZSBmb3VuZCBtdXN0IGhhdmUgYSBzcGVjaWZpYyB2ZXJzaW9uCisgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtSdWJ5X0VYRUNVVEFCTEV9IiAtZSAicHV0cyBSVUJZX1ZFUlNJT04iCisgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgaWYgKHJlc3VsdCBPUiAoX1JWSV9FWEFDVCBBTkQgTk9UIHZlcnNpb24gVkVSU0lPTl9FUVVBTCBleHBlY3RlZF92ZXJzaW9uKSBPUiAodmVyc2lvbiBWRVJTSU9OX0xFU1MgZXhwZWN0ZWRfdmVyc2lvbikpCisgICAgIyBpbnRlcnByZXRlciBub3QgdXNhYmxlIG9yIGhhcyB3cm9uZyBtYWpvciB2ZXJzaW9uCisgICAgaWYgKHJlc3VsdCkKKyAgICAgIHNldCAoX1J1YnlfSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCB1c2UgdGhlIGludGVycHJldGVyIFwiJHtSdWJ5X0VYRUNVVEFCTEV9XCIiKQorICAgIGVsc2UoKQorICAgICAgc2V0IChfUnVieV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiV3JvbmcgbWFqb3IgdmVyc2lvbiBmb3IgdGhlIGludGVycHJldGVyIFwiJHtSdWJ5X0VYRUNVVEFCTEV9XCIiKQorICAgIGVuZGlmKCkKKyAgICBzZXRfcHJvcGVydHkgKENBQ0hFIFJ1YnlfRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiUnVieV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKK2VuZGZ1bmN0aW9uKCkKKword2hpbGUoMSkKKyAgIyBWaXJ0dWFsIGVudmlyb25tZW50cyBoYW5kbGluZworICBpZihfUnVieV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQorICAgIGlmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgICAgIG1lc3NhZ2UoIkluc2lkZSBNYXRjaGVzIikKKyAgICBlbmRpZigpCisgICAgZmluZF9wcm9ncmFtIChSdWJ5X0VYRUNVVEFCTEUKKyAgICAgICAgICAgICAgICAgIE5BTUVTICR7X1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FU30KKyAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgIFBBVEhTIEVOViBNWV9SVUJZX0hPTUUKKyAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluIFNjcmlwdHMKKyAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1BBVEgKKyAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKworICAgIGlmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgICAgIG1lc3NhZ2UoIlJ1YnlfRVhFQ1VUQUJMRT0ke1J1YnlfRVhFQ1VUQUJMRX0iKQorICAgIGVuZGlmKCkKKworICAgIF9SVUJZX1ZBTElEQVRFX0lOVEVSUFJFVEVSICgke1J1YnlfRklORF9WRVJTSU9OfX0pCisgICAgaWYoUnVieV9FWEVDVVRBQkxFKQorICAgICAgYnJlYWsoKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgX1J1YnlfRklORF9WSVJUVUFMRU5WIFNUUkVRVUFMICJPTkxZIikKKyAgICAgIGJyZWFrKCkKKyAgICBlbmRpZigpCisgIGVsc2VpZihfUnVieV9ERUJVR19PVVRQVVQpCisgICAgbWVzc2FnZSgiX1J1YnlfRklORF9WSVJUVUFMRU5WIGRvZXNuJ3QgbWF0Y2g6ICR7X1J1YnlfRklORF9WSVJUVUFMRU5WfSIpCisgIGVuZGlmKCkKKworICAjIHRyeSB1c2luZyBzdGFuZGFyZCBwYXRocworICBmaW5kX3Byb2dyYW0gKFJ1YnlfRVhFQ1VUQUJMRQorICAgICAgICAgICAgICAgIE5BTUVTICR7X1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FU30KKyAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSKQorICBfUlVCWV9WQUxJREFURV9JTlRFUlBSRVRFUiAoJHtSdWJ5X0ZJTkRfVkVSU0lPTn0pCisgIGlmIChSdWJ5X0VYRUNVVEFCTEUpCisgICAgYnJlYWsoKQorICBlbmRpZigpCisKKyAgYnJlYWsoKQorZW5kd2hpbGUoKQorCitpZihSdWJ5X0VYRUNVVEFCTEUgQU5EIE5PVCBSdWJ5X1ZFUlNJT05fTUFKT1IpCiAgIGZ1bmN0aW9uKF9SVUJZX0NPTkZJR19WQVIgUkJWQVIgT1VUVkFSKQotICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7UlVCWV9FWEVDVVRBQkxFfSAtciByYmNvbmZpZyAtZSAicHJpbnQgUmJDb25maWc6OkNPTkZJR1snJHtSQlZBUn0nXSIKLSAgICAgIFJFU1VMVF9WQVJJQUJMRSBfUlVCWV9TVUNDRVNTCi0gICAgICBPVVRQVVRfVkFSSUFCTEUgX1JVQllfT1VUUFVUCisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtSdWJ5X0VYRUNVVEFCTEV9IC1yIHJiY29uZmlnIC1lICJwcmludCBSYkNvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgorICAgICAgUkVTVUxUX1ZBUklBQkxFIF9SdWJ5X1NVQ0NFU1MKKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBfUnVieV9PVVRQVVQKICAgICAgIEVSUk9SX1FVSUVUKQotICAgIGlmKF9SVUJZX1NVQ0NFU1MgT1IgX1JVQllfT1VUUFVUIFNUUkVRVUFMICIiKQotICAgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtSVUJZX0VYRUNVVEFCTEV9IC1yIHJiY29uZmlnIC1lICJwcmludCBDb25maWc6OkNPTkZJR1snJHtSQlZBUn0nXSIKLSAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9SVUJZX1NVQ0NFU1MKLSAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9SVUJZX09VVFBVVAorICAgIGlmKF9SdWJ5X1NVQ0NFU1MgT1IgX1J1YnlfT1VUUFVUIFNUUkVRVUFMICIiKQorICAgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtSdWJ5X0VYRUNVVEFCTEV9IC1yIHJiY29uZmlnIC1lICJwcmludCBDb25maWc6OkNPTkZJR1snJHtSQlZBUn0nXSIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9SdWJ5X1NVQ0NFU1MKKyAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9SdWJ5X09VVFBVVAogICAgICAgICBFUlJPUl9RVUlFVCkKICAgICBlbmRpZigpCi0gICAgc2V0KCR7T1VUVkFSfSAiJHtfUlVCWV9PVVRQVVR9IiBQQVJFTlRfU0NPUEUpCisgICAgc2V0KCR7T1VUVkFSfSAiJHtfUnVieV9PVVRQVVR9IiBQQVJFTlRfU0NPUEUpCiAgIGVuZGZ1bmN0aW9uKCkKIAogCiAgICMgcXVlcnkgdGhlIHJ1YnkgdmVyc2lvbgotICBfUlVCWV9DT05GSUdfVkFSKCJNQUpPUiIgUlVCWV9WRVJTSU9OX01BSk9SKQotICBfUlVCWV9DT05GSUdfVkFSKCJNSU5PUiIgUlVCWV9WRVJTSU9OX01JTk9SKQotICBfUlVCWV9DT05GSUdfVkFSKCJURUVOWSIgUlVCWV9WRVJTSU9OX1BBVENIKQorICBfUlVCWV9DT05GSUdfVkFSKCJNQUpPUiIgUnVieV9WRVJTSU9OX01BSk9SKQorICBfUlVCWV9DT05GSUdfVkFSKCJNSU5PUiIgUnVieV9WRVJTSU9OX01JTk9SKQorICBfUlVCWV9DT05GSUdfVkFSKCJURUVOWSIgUnVieV9WRVJTSU9OX1BBVENIKQogCiAgICMgcXVlcnkgdGhlIGRpZmZlcmVudCBkaXJlY3RvcmllcwotICBfUlVCWV9DT05GSUdfVkFSKCJhcmNoZGlyIiBSVUJZX0FSQ0hfRElSKQotICBfUlVCWV9DT05GSUdfVkFSKCJhcmNoIiBSVUJZX0FSQ0gpCi0gIF9SVUJZX0NPTkZJR19WQVIoInJ1YnloZHJkaXIiIFJVQllfSERSX0RJUikKLSAgX1JVQllfQ09ORklHX1ZBUigicnVieWFyY2hoZHJkaXIiIFJVQllfQVJDSEhEUl9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoImxpYmRpciIgUlVCWV9QT1NTSUJMRV9MSUJfRElSKQotICBfUlVCWV9DT05GSUdfVkFSKCJydWJ5bGliZGlyIiBSVUJZX1JVQllfTElCX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigiYXJjaGRpciIgUnVieV9BUkNIX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigiYXJjaCIgUnVieV9BUkNIKQorICBfUlVCWV9DT05GSUdfVkFSKCJydWJ5aGRyZGlyIiBSdWJ5X0hEUl9ESVIpCisgIF9SVUJZX0NPTkZJR19WQVIoInJ1YnlhcmNoaGRyZGlyIiBSdWJ5X0FSQ0hIRFJfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJsaWJkaXIiIFJ1YnlfUE9TU0lCTEVfTElCX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigicnVieWxpYmRpciIgUnVieV9SVUJZX0xJQl9ESVIpCiAKICAgIyBzaXRlX3J1YnkKLSAgX1JVQllfQ09ORklHX1ZBUigic2l0ZWFyY2hkaXIiIFJVQllfU0lURUFSQ0hfRElSKQotICBfUlVCWV9DT05GSUdfVkFSKCJzaXRlbGliZGlyIiBSVUJZX1NJVEVMSUJfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJzaXRlYXJjaGRpciIgUnVieV9TSVRFQVJDSF9ESVIpCisgIF9SVUJZX0NPTkZJR19WQVIoInNpdGVsaWJkaXIiIFJ1YnlfU0lURUxJQl9ESVIpCiAKICAgIyB2ZW5kb3JfcnVieSBhdmFpbGFibGUgPwotICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1JVQllfRVhFQ1VUQUJMRX0gLXIgdmVuZG9yLXNwZWNpZmljIC1lICJwcmludCAndHJ1ZSciCi0gICAgT1VUUFVUX1ZBUklBQkxFIFJVQllfSEFTX1ZFTkRPUl9SVUJZICBFUlJPUl9RVUlFVCkKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtSdWJ5X0VYRUNVVEFCTEV9IC1yIHZlbmRvci1zcGVjaWZpYyAtZSAicHJpbnQgJ3RydWUnIgorICAgIE9VVFBVVF9WQVJJQUJMRSBSdWJ5X0hBU19WRU5ET1JfUlVCWSAgRVJST1JfUVVJRVQpCiAKLSAgaWYoUlVCWV9IQVNfVkVORE9SX1JVQlkpCi0gICAgX1JVQllfQ09ORklHX1ZBUigidmVuZG9ybGliZGlyIiBSVUJZX1ZFTkRPUkxJQl9ESVIpCi0gICAgX1JVQllfQ09ORklHX1ZBUigidmVuZG9yYXJjaGRpciIgUlVCWV9WRU5ET1JBUkNIX0RJUikKKyAgaWYoUnVieV9IQVNfVkVORE9SX1JVQlkpCisgICAgX1JVQllfQ09ORklHX1ZBUigidmVuZG9ybGliZGlyIiBSdWJ5X1ZFTkRPUkxJQl9ESVIpCisgICAgX1JVQllfQ09ORklHX1ZBUigidmVuZG9yYXJjaGRpciIgUnVieV9WRU5ET1JBUkNIX0RJUikKICAgZW5kaWYoKQogCiAgICMgc2F2ZSB0aGUgcmVzdWx0cyBpbiB0aGUgY2FjaGUgc28gd2UgZG9uJ3QgaGF2ZSB0byBydW4gcnVieSB0aGUgbmV4dCB0aW1lIGFnYWluCi0gIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgICAgJHtSVUJZX1ZFUlNJT05fTUFKT1J9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IG1ham9yIHZlcnNpb24iIEZPUkNFKQotICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SICAgICR7UlVCWV9WRVJTSU9OX01JTk9SfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBtaW5vciB2ZXJzaW9uIiBGT1JDRSkKLSAgc2V0KFJVQllfVkVSU0lPTl9QQVRDSCAgICAke1JVQllfVkVSU0lPTl9QQVRDSH0gICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgcGF0Y2ggdmVyc2lvbiIgRk9SQ0UpCi0gIHNldChSVUJZX0FSQ0hfRElSICAgICAgICAgJHtSVUJZX0FSQ0hfRElSfSAgICAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IGFyY2ggZGlyIiBGT1JDRSkKLSAgc2V0KFJVQllfSERSX0RJUiAgICAgICAgICAke1JVQllfSERSX0RJUn0gICAgICAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgaGVhZGVyIGRpciAoMS45KykiIEZPUkNFKQotICBzZXQoUlVCWV9BUkNISERSX0RJUiAgICAgICR7UlVCWV9BUkNISERSX0RJUn0gICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBhcmNoIGhlYWRlciBkaXIgKDIuMCspIiBGT1JDRSkKLSAgc2V0KFJVQllfUE9TU0lCTEVfTElCX0RJUiAke1JVQllfUE9TU0lCTEVfTElCX0RJUn0gQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgbGliIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX1JVQllfTElCX0RJUiAgICAgJHtSVUJZX1JVQllfTElCX0RJUn0gICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHJ1YnktbGliIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX1NJVEVBUkNIX0RJUiAgICAgJHtSVUJZX1NJVEVBUkNIX0RJUn0gICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHNpdGUgYXJjaCBkaXIiIEZPUkNFKQotICBzZXQoUlVCWV9TSVRFTElCX0RJUiAgICAgICR7UlVCWV9TSVRFTElCX0RJUn0gICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBzaXRlIGxpYiBkaXIiIEZPUkNFKQotICBzZXQoUlVCWV9IQVNfVkVORE9SX1JVQlkgICR7UlVCWV9IQVNfVkVORE9SX1JVQll9ICBDQUNIRSBCT09MICJWZW5kb3IgUnVieSBpcyBhdmFpbGFibGUiIEZPUkNFKQotICBzZXQoUlVCWV9WRU5ET1JBUkNIX0RJUiAgICR7UlVCWV9WRU5ET1JBUkNIX0RJUn0gICBDQUNIRSBQQVRIICJUaGUgUnVieSB2ZW5kb3IgYXJjaCBkaXIiIEZPUkNFKQotICBzZXQoUlVCWV9WRU5ET1JMSUJfRElSICAgICR7UlVCWV9WRU5ET1JMSUJfRElSfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSB2ZW5kb3IgbGliIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgICAgJHtSdWJ5X1ZFUlNJT05fTUFKT1J9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IG1ham9yIHZlcnNpb24iIEZPUkNFKQorICBzZXQoUnVieV9WRVJTSU9OX01JTk9SICAgICR7UnVieV9WRVJTSU9OX01JTk9SfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBtaW5vciB2ZXJzaW9uIiBGT1JDRSkKKyAgc2V0KFJ1YnlfVkVSU0lPTl9QQVRDSCAgICAke1J1YnlfVkVSU0lPTl9QQVRDSH0gICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgcGF0Y2ggdmVyc2lvbiIgRk9SQ0UpCisgIHNldChSdWJ5X0FSQ0hfRElSICAgICAgICAgJHtSdWJ5X0FSQ0hfRElSfSAgICAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IGFyY2ggZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfSERSX0RJUiAgICAgICAgICAke1J1YnlfSERSX0RJUn0gICAgICAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgaGVhZGVyIGRpciAoMS45KykiIEZPUkNFKQorICBzZXQoUnVieV9BUkNISERSX0RJUiAgICAgICR7UnVieV9BUkNISERSX0RJUn0gICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBhcmNoIGhlYWRlciBkaXIgKDIuMCspIiBGT1JDRSkKKyAgc2V0KFJ1YnlfUE9TU0lCTEVfTElCX0RJUiAke1J1YnlfUE9TU0lCTEVfTElCX0RJUn0gQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgbGliIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1JVQllfTElCX0RJUiAgICAgJHtSdWJ5X1JVQllfTElCX0RJUn0gICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHJ1YnktbGliIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1NJVEVBUkNIX0RJUiAgICAgJHtSdWJ5X1NJVEVBUkNIX0RJUn0gICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHNpdGUgYXJjaCBkaXIiIEZPUkNFKQorICBzZXQoUnVieV9TSVRFTElCX0RJUiAgICAgICR7UnVieV9TSVRFTElCX0RJUn0gICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBzaXRlIGxpYiBkaXIiIEZPUkNFKQorICBzZXQoUnVieV9IQVNfVkVORE9SX1JVQlkgICR7UnVieV9IQVNfVkVORE9SX1JVQll9ICBDQUNIRSBCT09MICJWZW5kb3IgUnVieSBpcyBhdmFpbGFibGUiIEZPUkNFKQorICBzZXQoUnVieV9WRU5ET1JBUkNIX0RJUiAgICR7UnVieV9WRU5ET1JBUkNIX0RJUn0gICBDQUNIRSBQQVRIICJUaGUgUnVieSB2ZW5kb3IgYXJjaCBkaXIiIEZPUkNFKQorICBzZXQoUnVieV9WRU5ET1JMSUJfRElSICAgICR7UnVieV9WRU5ET1JMSUJfRElSfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSB2ZW5kb3IgbGliIGRpciIgRk9SQ0UpCiAKICAgbWFya19hc19hZHZhbmNlZCgKLSAgICBSVUJZX0FSQ0hfRElSCi0gICAgUlVCWV9BUkNICi0gICAgUlVCWV9IRFJfRElSCi0gICAgUlVCWV9BUkNISERSX0RJUgotICAgIFJVQllfUE9TU0lCTEVfTElCX0RJUgotICAgIFJVQllfUlVCWV9MSUJfRElSCi0gICAgUlVCWV9TSVRFQVJDSF9ESVIKLSAgICBSVUJZX1NJVEVMSUJfRElSCi0gICAgUlVCWV9IQVNfVkVORE9SX1JVQlkKLSAgICBSVUJZX1ZFTkRPUkFSQ0hfRElSCi0gICAgUlVCWV9WRU5ET1JMSUJfRElSCi0gICAgUlVCWV9WRVJTSU9OX01BSk9SCi0gICAgUlVCWV9WRVJTSU9OX01JTk9SCi0gICAgUlVCWV9WRVJTSU9OX1BBVENICisgICAgUnVieV9BUkNIX0RJUgorICAgIFJ1YnlfQVJDSAorICAgIFJ1YnlfSERSX0RJUgorICAgIFJ1YnlfQVJDSEhEUl9ESVIKKyAgICBSdWJ5X1BPU1NJQkxFX0xJQl9ESVIKKyAgICBSdWJ5X1JVQllfTElCX0RJUgorICAgIFJ1YnlfU0lURUFSQ0hfRElSCisgICAgUnVieV9TSVRFTElCX0RJUgorICAgIFJ1YnlfSEFTX1ZFTkRPUl9SVUJZCisgICAgUnVieV9WRU5ET1JBUkNIX0RJUgorICAgIFJ1YnlfVkVORE9STElCX0RJUgorICAgIFJ1YnlfVkVSU0lPTl9NQUpPUgorICAgIFJ1YnlfVkVSU0lPTl9NSU5PUgorICAgIFJ1YnlfVkVSU0lPTl9QQVRDSAogICAgICkKIGVuZGlmKCkKIAotIyBJbiBjYXNlIFJVQllfRVhFQ1VUQUJMRSBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgKGUuZy4gY3Jvc3MgY29tcGlsaW5nKQorIyBJbiBjYXNlIFJ1YnlfRVhFQ1VUQUJMRSBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgKGUuZy4gY3Jvc3MgY29tcGlsaW5nKQogIyB0cnkgdG8gZGV0ZWN0IHdoaWNoIHZlcnNpb24gd2UgZm91bmQuIFRoaXMgaXMgbm90IHRvbyBnb29kLgotaWYoUlVCWV9FWEVDVVRBQkxFIEFORCBOT1QgUlVCWV9WRVJTSU9OX01BSk9SKQoraWYoUnVieV9FWEVDVVRBQkxFIEFORCBOT1QgUnVieV9WRVJTSU9OX01BSk9SKQogICAjIGJ5IGRlZmF1bHQgYXNzdW1lIDEuOC4wCi0gIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMSkKLSAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiA4KQotICBzZXQoUlVCWV9WRVJTSU9OX1BBVENIIDApCisgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMSkKKyAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiA4KQorICBzZXQoUnVieV9WRVJTSU9OX1BBVENIIDApCiAgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAxLjkueAotICBpZigke1JVQllfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTFcXC4/OSIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAxKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgOSkKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkxXFwuPzkiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMSkKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDkpCiAgIGVuZGlmKCkKICAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuMC54Ci0gIGlmKCR7UlVCWV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8wIikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01BSk9SIDIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiAwKQorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MCIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgMCkKICAgZW5kaWYoKQogICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi4xLngKLSAgaWYoJHtSVUJZX0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzEiKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDEpCisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8xIikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiAxKQogICBlbmRpZigpCiAgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjIueAotICBpZigke1JVQllfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MiIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAyKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgMikKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzIiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDIpCiAgIGVuZGlmKCkKICAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuMy54Ci0gIGlmKCR7UlVCWV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8zIikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01BSk9SIDIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiAzKQorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MyIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgMykKICAgZW5kaWYoKQogICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi40LngKLSAgaWYoJHtSVUJZX0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzQiKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDQpCisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj80IikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiA0KQorICBlbmRpZigpCisgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjUueAorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/NSIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgNSkKKyAgZW5kaWYoKQorICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi42LngKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzYiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDYpCisgIGVuZGlmKCkKKyAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuNy54CisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj83IikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiA3KQogICBlbmRpZigpCiBlbmRpZigpCiAKLWlmKFJVQllfVkVSU0lPTl9NQUpPUikKLSAgc2V0KFJVQllfVkVSU0lPTiAiJHtSVUJZX1ZFUlNJT05fTUFKT1J9LiR7UlVCWV9WRVJTSU9OX01JTk9SfS4ke1JVQllfVkVSU0lPTl9QQVRDSH0iKQotICBzZXQoX1JVQllfVkVSU0lPTl9TSE9SVCAiJHtSVUJZX1ZFUlNJT05fTUFKT1J9LiR7UlVCWV9WRVJTSU9OX01JTk9SfSIpCi0gIHNldChfUlVCWV9WRVJTSU9OX1NIT1JUX05PRE9UICIke1JVQllfVkVSU0lPTl9NQUpPUn0ke1JVQllfVkVSU0lPTl9NSU5PUn0iKQotICBzZXQoX1JVQllfTk9ET1RfVkVSU0lPTiAiJHtSVUJZX1ZFUlNJT05fTUFKT1J9JHtSVUJZX1ZFUlNJT05fTUlOT1J9JHtSVUJZX1ZFUlNJT05fUEFUQ0h9IikKK2lmKFJ1YnlfVkVSU0lPTl9NQUpPUikKKyAgc2V0KFJ1YnlfVkVSU0lPTiAiJHtSdWJ5X1ZFUlNJT05fTUFKT1J9LiR7UnVieV9WRVJTSU9OX01JTk9SfS4ke1J1YnlfVkVSU0lPTl9QQVRDSH0iKQorICBzZXQoX1J1YnlfVkVSU0lPTl9TSE9SVCAiJHtSdWJ5X1ZFUlNJT05fTUFKT1J9LiR7UnVieV9WRVJTSU9OX01JTk9SfSIpCisgIHNldChfUnVieV9WRVJTSU9OX1NIT1JUX05PRE9UICIke1J1YnlfVkVSU0lPTl9NQUpPUn0ke1J1YnlfVkVSU0lPTl9NSU5PUn0iKQorICBzZXQoX1J1YnlfTk9ET1RfVkVSU0lPTiAiJHtSdWJ5X1ZFUlNJT05fTUFKT1J9JHtSdWJ5X1ZFUlNJT05fTUlOT1J9JHtSdWJ5X1ZFUlNJT05fUEFUQ0h9IikKIGVuZGlmKCkKIAotZmluZF9wYXRoKFJVQllfSU5DTFVERV9ESVIKKyMgRklYTUU6IEN1cnJlbnRseSB3ZSByZXF1aXJlIGJvdGggdGhlIGludGVycHJldGVyIGFuZCBkZXZlbG9wbWVudCBjb21wb25lbnRzIHRvIGJlIGZvdW5kCisjIGluIG9yZGVyIHRvIHVzZSBlaXRoZXIuICBTZWUgaXNzdWUgIzIwNDc0LgorZmluZF9wYXRoKFJ1YnlfSU5DTFVERV9ESVIKICAgTkFNRVMgcnVieS5oCiAgIEhJTlRTCi0gICAgJHtSVUJZX0hEUl9ESVJ9Ci0gICAgJHtSVUJZX0FSQ0hfRElSfQotICAgIC91c3IvbGliL3J1YnkvJHtfUlVCWV9WRVJTSU9OX1NIT1JUfS9pNTg2LWxpbnV4LWdudS8KKyAgICAke1J1YnlfSERSX0RJUn0KKyAgICAke1J1YnlfQVJDSF9ESVJ9CisgICAgL3Vzci9saWIvcnVieS8ke19SdWJ5X1ZFUlNJT05fU0hPUlR9L2k1ODYtbGludXgtZ251LwogKQogCi1zZXQoUlVCWV9JTkNMVURFX0RJUlMgJHtSVUJZX0lOQ0xVREVfRElSfSApCitzZXQoUnVieV9JTkNMVURFX0RJUlMgJHtSdWJ5X0lOQ0xVREVfRElSfSkKIAogIyBpZiBydWJ5ID4gMS44IGlzIHJlcXVpcmVkIG9yIGlmIHJ1YnkgPiAxLjggd2FzIGZvdW5kLCBzZWFyY2ggZm9yIHRoZSBjb25maWcuaCBkaXIKLWlmKCAiJHtSdWJ5X0ZJTkRfVkVSU0lPTl9TSE9SVF9OT0RPVH0iIEdSRUFURVIgMTggIE9SICAiJHtfUlVCWV9WRVJTSU9OX1NIT1JUX05PRE9UfSIgR1JFQVRFUiAxOCAgT1IgIFJVQllfSERSX0RJUikKLSAgZmluZF9wYXRoKFJVQllfQ09ORklHX0lOQ0xVREVfRElSCitpZiggUnVieV9GSU5EX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxLjkiICBPUiAgUnVieV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiMS45IiAgT1IgIFJ1YnlfSERSX0RJUikKKyAgZmluZF9wYXRoKFJ1YnlfQ09ORklHX0lOQ0xVREVfRElSCiAgICAgTkFNRVMgcnVieS9jb25maWcuaCAgY29uZmlnLmgKICAgICBISU5UUwotICAgICAgJHtSVUJZX0hEUl9ESVJ9LyR7UlVCWV9BUkNIfQotICAgICAgJHtSVUJZX0FSQ0hfRElSfQotICAgICAgJHtSVUJZX0FSQ0hIRFJfRElSfQorICAgICAgJHtSdWJ5X0hEUl9ESVJ9LyR7UnVieV9BUkNIfQorICAgICAgJHtSdWJ5X0FSQ0hfRElSfQorICAgICAgJHtSdWJ5X0FSQ0hIRFJfRElSfQogICApCiAKLSAgc2V0KFJVQllfSU5DTFVERV9ESVJTICR7UlVCWV9JTkNMVURFX0RJUlN9ICR7UlVCWV9DT05GSUdfSU5DTFVERV9ESVJ9ICkKKyAgc2V0KFJ1YnlfSU5DTFVERV9ESVJTICR7UnVieV9JTkNMVURFX0RJUlN9ICR7UnVieV9DT05GSUdfSU5DTFVERV9ESVJ9ICkKIGVuZGlmKCkKIAogCiAjIERldGVybWluZSB0aGUgbGlzdCBvZiBwb3NzaWJsZSBuYW1lcyBmb3IgdGhlIHJ1YnkgbGlicmFyeQotc2V0KF9SVUJZX1BPU1NJQkxFX0xJQl9OQU1FUyBydWJ5IHJ1Ynktc3RhdGljIHJ1Ynkke19SVUJZX1ZFUlNJT05fU0hPUlR9IHJ1Ynkke19SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1R9IHJ1YnktJHtfUlVCWV9WRVJTSU9OX1NIT1JUfSBydWJ5LSR7UlVCWV9WRVJTSU9OfSkKK3NldChfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVMgcnVieSBydWJ5LXN0YXRpYyBydWJ5JHtfUnVieV9WRVJTSU9OX1NIT1JUfSBydWJ5JHtfUnVieV9WRVJTSU9OX1NIT1JUX05PRE9UfSBydWJ5LSR7X1J1YnlfVkVSU0lPTl9TSE9SVH0gcnVieS0ke1J1YnlfVkVSU0lPTn0pCiAKIGlmKFdJTjMyKQotICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiIiApCi0gIGlmKCBNU1ZDX1ZFUlNJT04gRVFVQUwgMTIwMCApCi0gICAgc2V0KCBfUlVCWV9NU1ZDX1JVTlRJTUUgIjYwIiApCi0gIGVuZGlmKCkKLSAgaWYoIE1TVkNfVkVSU0lPTiBFUVVBTCAxMzAwICkKLSAgICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiNzAiICkKLSAgZW5kaWYoKQotICBpZiggTVNWQ19WRVJTSU9OIEVRVUFMIDEzMTAgKQotICAgIHNldCggX1JVQllfTVNWQ19SVU5USU1FICI3MSIgKQotICBlbmRpZigpCi0gIGlmKCBNU1ZDX1ZFUlNJT04gRVFVQUwgMTQwMCApCi0gICAgc2V0KCBfUlVCWV9NU1ZDX1JVTlRJTUUgIjgwIiApCi0gIGVuZGlmKCkKLSAgaWYoIE1TVkNfVkVSU0lPTiBFUVVBTCAxNTAwICkKLSAgICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiOTAiICkKKyAgaWYoTVNWQ19UT09MU0VUX1ZFUlNJT04pCisgICAgc2V0KF9SdWJ5X01TVkNfUlVOVElNRSAiJHtNU1ZDX1RPT0xTRVRfVkVSU0lPTn0iKQorICBlbHNlKCkKKyAgICBzZXQoX1J1YnlfTVNWQ19SVU5USU1FICIiKQogICBlbmRpZigpCiAKLSAgc2V0KF9SVUJZX0FSQ0hfUFJFRklYICIiKQorICBzZXQoX1J1YnlfQVJDSF9QUkVGSVggIiIpCiAgIGlmKENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKLSAgICBzZXQoX1JVQllfQVJDSF9QUkVGSVggIng2NC0iKQorICAgIHNldChfUnVieV9BUkNIX1BSRUZJWCAieDY0LSIpCiAgIGVuZGlmKCkKIAotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9MSUJfTkFNRVMKLSAgICAgICAgICAgICAiJHtfUlVCWV9BUkNIX1BSRUZJWH1tc3ZjciR7X1JVQllfTVNWQ19SVU5USU1FfS1ydWJ5JHtfUlVCWV9OT0RPVF9WRVJTSU9OfSIKLSAgICAgICAgICAgICAiJHtfUlVCWV9BUkNIX1BSRUZJWH1tc3ZjciR7X1JVQllfTVNWQ19SVU5USU1FfS1ydWJ5JHtfUlVCWV9OT0RPVF9WRVJTSU9OfS1zdGF0aWMiCi0gICAgICAgICAgICAgIiR7X1JVQllfQVJDSF9QUkVGSVh9bXN2Y3J0LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059IgotICAgICAgICAgICAgICIke19SVUJZX0FSQ0hfUFJFRklYfW1zdmNydC1ydWJ5JHtfUlVCWV9OT0RPVF9WRVJTSU9OfS1zdGF0aWMiICkKKyAgbGlzdChBUFBFTkQgX1J1YnlfUE9TU0lCTEVfTElCX05BTUVTCisgICAgICAgICAgICAgIiR7X1J1YnlfQVJDSF9QUkVGSVh9bXN2Y3Ike19SdWJ5X01TVkNfUlVOVElNRX0tcnVieSR7X1J1YnlfTk9ET1RfVkVSU0lPTn0iCisgICAgICAgICAgICAgIiR7X1J1YnlfQVJDSF9QUkVGSVh9bXN2Y3Ike19SdWJ5X01TVkNfUlVOVElNRX0tcnVieSR7X1J1YnlfTk9ET1RfVkVSU0lPTn0tc3RhdGljIgorICAgICAgICAgICAgICIke19SdWJ5X0FSQ0hfUFJFRklYfW1zdmNydC1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfSIKKyAgICAgICAgICAgICAiJHtfUnVieV9BUkNIX1BSRUZJWH1tc3ZjcnQtcnVieSR7X1J1YnlfTk9ET1RfVkVSU0lPTn0tc3RhdGljIiApCiBlbmRpZigpCiAKLWZpbmRfbGlicmFyeShSVUJZX0xJQlJBUlkgTkFNRVMgJHtfUlVCWV9QT1NTSUJMRV9MSUJfTkFNRVN9IEhJTlRTICR7UlVCWV9QT1NTSUJMRV9MSUJfRElSfSApCitmaW5kX2xpYnJhcnkoUnVieV9MSUJSQVJZIE5BTUVTICR7X1J1YnlfUE9TU0lCTEVfTElCX05BTUVTfSBISU5UUyAke1J1YnlfUE9TU0lCTEVfTElCX0RJUn0gKQogCi1pbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCi1zZXQoX1JVQllfUkVRVUlSRURfVkFSUyBSVUJZX0VYRUNVVEFCTEUgUlVCWV9JTkNMVURFX0RJUiBSVUJZX0xJQlJBUlkpCi1pZihfUlVCWV9WRVJTSU9OX1NIT1JUX05PRE9UIEdSRUFURVIgMTgpCi0gIGxpc3QoQVBQRU5EIF9SVUJZX1JFUVVJUkVEX1ZBUlMgUlVCWV9DT05GSUdfSU5DTFVERV9ESVIpCitzZXQoX1J1YnlfUkVRVUlSRURfVkFSUyBSdWJ5X0VYRUNVVEFCTEUgUnVieV9JTkNMVURFX0RJUiBSdWJ5X0xJQlJBUlkpCitpZihfUnVieV9WRVJTSU9OX1NIT1JUX05PRE9UIEdSRUFURVIgMTgpCisgIGxpc3QoQVBQRU5EIF9SdWJ5X1JFUVVJUkVEX1ZBUlMgUnVieV9DT05GSUdfSU5DTFVERV9ESVIpCiBlbmRpZigpCiAKLWlmKF9SVUJZX0RFQlVHX09VVFBVVCkKK2lmKF9SdWJ5X0RFQlVHX09VVFBVVCkKICAgbWVzc2FnZShTVEFUVVMgIi0tLS0tLS0tRmluZFJ1YnkuY21ha2UgZGVidWctLS0tLS0tLS0tLS0iKQotICBtZXNzYWdlKFNUQVRVUyAiX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUzogJHtfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJfUlVCWV9QT1NTSUJMRV9MSUJfTkFNRVM6ICR7X1JVQllfUE9TU0lCTEVfTElCX05BTUVTfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0FSQ0hfRElSOiAke1JVQllfQVJDSF9ESVJ9IikKLSAgbWVzc2FnZShTVEFUVVMgIlJVQllfSERSX0RJUjogJHtSVUJZX0hEUl9ESVJ9IikKLSAgbWVzc2FnZShTVEFUVVMgIlJVQllfUE9TU0lCTEVfTElCX0RJUjogJHtSVUJZX1BPU1NJQkxFX0xJQl9ESVJ9IikKLSAgbWVzc2FnZShTVEFUVVMgIkZvdW5kIFJVQllfVkVSU0lPTjogXCIke1JVQllfVkVSU0lPTn1cIiAsIHNob3J0OiBcIiR7X1JVQllfVkVSU0lPTl9TSE9SVH1cIiwgbm9kb3Q6IFwiJHtfUlVCWV9WRVJTSU9OX1NIT1JUX05PRE9UfVwiIikKLSAgbWVzc2FnZShTVEFUVVMgIl9SVUJZX1JFUVVJUkVEX1ZBUlM6ICR7X1JVQllfUkVRVUlSRURfVkFSU30iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9FWEVDVVRBQkxFOiAke1JVQllfRVhFQ1VUQUJMRX0iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9MSUJSQVJZOiAke1JVQllfTElCUkFSWX0iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9JTkNMVURFX0RJUjogJHtSVUJZX0lOQ0xVREVfRElSfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0NPTkZJR19JTkNMVURFX0RJUjogJHtSVUJZX0NPTkZJR19JTkNMVURFX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiX1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUzogJHtfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVM6ICR7X1J1YnlfUE9TU0lCTEVfTElCX05BTUVTfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0FSQ0hfRElSOiAke1J1YnlfQVJDSF9ESVJ9IikKKyAgbWVzc2FnZShTVEFUVVMgIlJ1YnlfSERSX0RJUjogJHtSdWJ5X0hEUl9ESVJ9IikKKyAgbWVzc2FnZShTVEFUVVMgIlJ1YnlfUE9TU0lCTEVfTElCX0RJUjogJHtSdWJ5X1BPU1NJQkxFX0xJQl9ESVJ9IikKKyAgbWVzc2FnZShTVEFUVVMgIkZvdW5kIFJ1YnlfVkVSU0lPTjogXCIke1J1YnlfVkVSU0lPTn1cIiAsIHNob3J0OiBcIiR7X1J1YnlfVkVSU0lPTl9TSE9SVH1cIiwgbm9kb3Q6IFwiJHtfUnVieV9WRVJTSU9OX1NIT1JUX05PRE9UfVwiIikKKyAgbWVzc2FnZShTVEFUVVMgIl9SdWJ5X1JFUVVJUkVEX1ZBUlM6ICR7X1J1YnlfUkVRVUlSRURfVkFSU30iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9FWEVDVVRBQkxFOiAke1J1YnlfRVhFQ1VUQUJMRX0iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9MSUJSQVJZOiAke1J1YnlfTElCUkFSWX0iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9JTkNMVURFX0RJUjogJHtSdWJ5X0lOQ0xVREVfRElSfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0NPTkZJR19JTkNMVURFX0RJUjogJHtSdWJ5X0NPTkZJR19JTkNMVURFX0RJUn0iKQogICBtZXNzYWdlKFNUQVRVUyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQogZW5kaWYoKQogCi1GSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoUnVieSAgUkVRVUlSRURfVkFSUyAgJHtfUlVCWV9SRVFVSVJFRF9WQVJTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIFJVQllfVkVSU0lPTiApCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCitGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoUnVieSAgUkVRVUlSRURfVkFSUyAgJHtfUnVieV9SRVFVSVJFRF9WQVJTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIFJ1YnlfVkVSU0lPTiApCisKK2lmKFJ1YnlfRk9VTkQpCisgIHNldChSdWJ5X0xJQlJBUklFUyAke1J1YnlfTElCUkFSWX0pCitlbmRpZigpCiAKIG1hcmtfYXNfYWR2YW5jZWQoCi0gIFJVQllfRVhFQ1VUQUJMRQotICBSVUJZX0xJQlJBUlkKLSAgUlVCWV9JTkNMVURFX0RJUgotICBSVUJZX0NPTkZJR19JTkNMVURFX0RJUgorICBSdWJ5X0VYRUNVVEFCTEUKKyAgUnVieV9MSUJSQVJZCisgIFJ1YnlfSU5DTFVERV9ESVIKKyAgUnVieV9DT05GSUdfSU5DTFVERV9ESVIKICAgKQogCi0jIFNldCBzb21lIHZhcmlhYmxlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBmaWxlCi1zZXQoUlVCWV9QT1NTSUJMRV9MSUJfUEFUSCAke1JVQllfUE9TU0lCTEVfTElCX0RJUn0pCi1zZXQoUlVCWV9SVUJZX0xJQl9QQVRIICR7UlVCWV9SVUJZX0xJQl9ESVJ9KQotc2V0KFJVQllfSU5DTFVERV9QQVRIICR7UlVCWV9JTkNMVURFX0RJUlN9KQorIyBTZXQgc29tZSB2YXJpYWJsZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgZmlsZSAobm8gbmVlZCB0byBwcm92aWRlIGEgQ2FtZWxDYXNlIHZlcnNpb24gb2YgdGhhdC4uLikKK3NldChSVUJZX1BPU1NJQkxFX0xJQl9QQVRIICR7UnVieV9QT1NTSUJMRV9MSUJfRElSfSkKK3NldChSVUJZX1JVQllfTElCX1BBVEggJHtSdWJ5X1JVQllfTElCX0RJUn0pCitzZXQoUlVCWV9JTkNMVURFX1BBVEggJHtSdWJ5X0lOQ0xVREVfRElSU30pCisKKyMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyMgRGVmaW5lIHVwcGVyIGNhc2UgdmVyc2lvbnMgb2Ygb3V0cHV0IHZhcmlhYmxlcworZm9yZWFjaChDYW1lbAorICAgIFJ1YnlfRVhFQ1VUQUJMRQorICAgIFJ1YnlfSU5DTFVERV9ESVJTCisgICAgUnVieV9MSUJSQVJZCisgICAgUnVieV9WRVJTSU9OCisgICAgUnVieV9WRVJTSU9OX01BSk9SCisgICAgUnVieV9WRVJTSU9OX01JTk9SCisgICAgUnVieV9WRVJTSU9OX1BBVENICisgICAgUnVieV9JTkNMVURFX1BBVEgKKworICAgIFJ1YnlfQVJDSF9ESVIKKyAgICBSdWJ5X0FSQ0gKKyAgICBSdWJ5X0hEUl9ESVIKKyAgICBSdWJ5X0FSQ0hIRFJfRElSCisgICAgUnVieV9QT1NTSUJMRV9MSUJfRElSCisgICAgUnVieV9SVUJZX0xJQl9ESVIKKyAgICBSdWJ5X1NJVEVBUkNIX0RJUgorICAgIFJ1YnlfU0lURUxJQl9ESVIKKyAgICBSdWJ5X0hBU19WRU5ET1JfUlVCWQorICAgIFJ1YnlfVkVORE9SQVJDSF9ESVIKKworICAgICkKKyAgICBzdHJpbmcoVE9VUFBFUiAke0NhbWVsfSBVUFBFUikKKyAgICBzZXQoJHtVUFBFUn0gJHske0NhbWVsfX0pCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFNXSUcuY21ha2UgYi9Nb2R1bGVzL0ZpbmRTV0lHLmNtYWtlCmluZGV4IGFlNmFlNTYuLjJmZGVkNDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFNXSUcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kU1dJRy5jbWFrZQpAQCAtNSwyNSArNSw0OSBAQAogRmluZFNXSUcKIC0tLS0tLS0tCiAKLUZpbmQgU2ltcGxpZmllZCBXcmFwcGVyIGFuZCBJbnRlcmZhY2UgR2VuZXJhdG9yIChTV0lHKQotCi1UaGlzIG1vZHVsZSBmaW5kcyBhbiBpbnN0YWxsZWQgU1dJRy4gIEl0IHNldHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0KLTo6Ci0KLSAgU1dJR19GT1VORCAtIHNldCB0byAiVHJ1ZSIgaWYgU1dJRyBpcyBmb3VuZAotICBTV0lHX0RJUiAtIHRoZSBkaXJlY3Rvcnkgd2hlcmUgc3dpZyBpcyBpbnN0YWxsZWQKLSAgU1dJR19FWEVDVVRBQkxFIC0gdGhlIHBhdGggdG8gdGhlIHN3aWcgZXhlY3V0YWJsZQotICBTV0lHX1ZFUlNJT04gICAtIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgc3dpZyBleGVjdXRhYmxlCitGaW5kIHRoZSBTaW1wbGlmaWVkIFdyYXBwZXIgYW5kIEludGVyZmFjZSBHZW5lcmF0b3IgKFNXSUdfKSBleGVjdXRhYmxlLgogCiAKK1RoaXMgbW9kdWxlIGZpbmRzIGFuIGluc3RhbGxlZCBTV0lHIGFuZCBkZXRlcm1pbmVzIGl0cyB2ZXJzaW9uLiBJZiBhCitgYENPTVBPTkVOVFNgYCBvciBgYE9QVElPTkFMX0NPTVBPTkVOVFNgYCBhcmd1bWVudCBpcyBnaXZlbiB0byBgYGZpbmRfcGFja2FnZWBgLAoraXQgd2lsbCBhbHNvIGRldGVybWluZSBzdXBwb3J0ZWQgdGFyZ2V0IGxhbmd1YWdlcy4gIFRoZSBtb2R1bGUgc2VudHMgdGhlCitmb2xsb3dpbmcgdmFyaWFibGVzOgogCi1UaGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIG9mIFNXSUcgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUKLXN0YW5kYXJkIHN5bnRheCwgZS5nLiAgIDpjb21tYW5kOmBmaW5kX3BhY2thZ2UoU1dJRyAxLjEpYAorYGBTV0lHX0ZPVU5EYGAKKyAgV2hldGhlciBTV0lHIGFuZCBhbnkgcmVxdWlyZWQgY29tcG9uZW50cyB3ZXJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCitgYFNXSUdfRVhFQ1VUQUJMRWBgCisgIFBhdGggdG8gdGhlIFNXSUcgZXhlY3V0YWJsZS4KK2BgU1dJR19ESVJgYAorICBQYXRoIHRvIHRoZSBpbnN0YWxsZWQgU1dJRyBgYExpYmBgIGRpcmVjdG9yeSAocmVzdWx0IG9mIGBgc3dpZyAtc3dpZ2xpYmBgKS4KK2BgU1dJR19WRVJTSU9OYGAKKyAgU1dJRyBleGVjdXRhYmxlIHZlcnNpb24gKHJlc3VsdCBvZiBgYHN3aWcgLXZlcnNpb25gYCkuCitgYFNXSUdfPGxhbmc+X0ZPVU5EYGAKKyAgSWYgYGBDT01QT05FTlRTYGAgb3IgYGBPUFRJT05BTF9DT01QT05FTlRTYGAgYXJlIHJlcXVlc3RlZCwgZWFjaCBhdmFpbGFibGUKKyAgdGFyZ2V0IGxhbmd1YWdlIGBgPGxhbmc+YGAgKGxvd2VyY2FzZSkgd2lsbCBiZSBzZXQgdG8gVFJVRS4KKworQW55IGBgQ09NUE9ORU5UU2BgIGdpdmVuIHRvIGBgZmluZF9wYWNrYWdlYGAgc2hvdWxkIGJlIHRoZSBuYW1lcyBvZiBzdXBwb3J0ZWQKK3RhcmdldCBsYW5ndWFnZXMgYXMgcHJvdmlkZWQgdG8gdGhlIExBTkdVQUdFIGFyZ3VtZW50IG9mIGBgc3dpZ19hZGRfbGlicmFyeWBgLAorc3VjaCBhcyBgYHB5dGhvbmBgIG9yIGBgcGVybDVgYC4gTGFuZ3VhZ2UgbmFtZXMgKm11c3QqIGJlIGxvd2VyY2FzZS4KIAogQWxsIGluZm9ybWF0aW9uIGlzIGNvbGxlY3RlZCBmcm9tIHRoZSBgYFNXSUdfRVhFQ1VUQUJMRWBgLCBzbyB0aGUgdmVyc2lvbgogdG8gYmUgZm91bmQgY2FuIGJlIGNoYW5nZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGJ5IG1lYW5zIG9mIHNldHRpbmcKLWBgU1dJR19FWEVDVVRBQkxFYGAKK2BgU1dJR19FWEVDVVRBQkxFYGAuCisKK0V4YW1wbGUgdXNhZ2UgcmVxdWlyaW5nIFNXSUcgNC4wIG9yIGhpZ2hlciBhbmQgUHl0aG9uIGxhbmd1YWdlIHN1cHBvcnQsIHdpdGgKK29wdGlvbmFsIEZvcnRyYW4gc3VwcG9ydDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgIGZpbmRfcGFja2FnZShTV0lHIDQuMCBDT01QT05FTlRTIHB5dGhvbiBPUFRJT05BTF9DT01QT05FTlRTIGZvcnRyYW4pCisgICBpZihTV0lHX0ZPVU5EKQorICAgICBtZXNzYWdlKCJTV0lHIGZvdW5kOiAke1NXSUdfRVhFQ1VUQUJMRX0iKQorICAgICBpZihOT1QgU1dJR19mb3J0cmFuX0ZPVU5EKQorICAgICAgIG1lc3NhZ2UoV0FSTklORyAiU1dJRyBGb3J0cmFuIGJpbmRpbmdzIGNhbm5vdCBiZSBnZW5lcmF0ZWQiKQorICAgICBlbmRpZigpCisgICBlbmRpZigpCisKKy4uIF9gU1dJR2A6IGh0dHA6Ly9zd2lnLm9yZworCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBmaW5kX3Byb2dyYW0oU1dJR19FWEVDVVRBQkxFIE5BTUVTIHN3aWc0LjAgc3dpZzMuMCBzd2lnMi4wIHN3aWcpCkBAIC01OCwxMCArODIsMjkgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKKworICBpZihTV0lHX0ZJTkRfQ09NUE9ORU5UUykKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1NXSUdfRVhFQ1VUQUJMRX0gLWhlbHAKKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBTV0lHX3N3aWdoZWxwX291dHB1dAorICAgICAgRVJST1JfVkFSSUFCTEUgU1dJR19zd2lnaGVscF9lcnJvcgorICAgICAgUkVTVUxUX1ZBUklBQkxFIFNXSUdfc3dpZ2hlbHBfcmVzdWx0KQorICAgIGlmKFNXSUdfc3dpZ2hlbHBfcmVzdWx0KQorICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJDb21tYW5kIFwiJHtTV0lHX0VYRUNVVEFCTEV9IC1oZWxwXCIgZmFpbGVkIHdpdGggb3V0cHV0OlxuJHtTV0lHX3N3aWdsaWJfZXJyb3J9IikKKyAgICBlbHNlKCkKKyAgICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIjsiIFNXSUdfc3dpZ2hlbHBfb3V0cHV0ICIke1NXSUdfc3dpZ2hlbHBfb3V0cHV0fSIpCisgICAgICBmb3JlYWNoKFNXSUdfbGluZSBJTiBMSVNUUyBTV0lHX3N3aWdoZWxwX291dHB1dCkKKyAgICAgICAgaWYoU1dJR19saW5lIE1BVENIRVMgIi0oW0EtWmEtejAtOV9dKykgKy0gKkdlbmVyYXRlLip3cmFwcGVycyIpCisgICAgICAgICAgc2V0KFNXSUdfJHtDTUFLRV9NQVRDSF8xfV9GT1VORCBUUlVFKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQotRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKFNXSUcgIFJFUVVJUkVEX1ZBUlMgU1dJR19FWEVDVVRBQkxFIFNXSUdfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgU1dJR19WRVJTSU9OICkKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncygKKyAgU1dJRyBIQU5ETEVfQ09NUE9ORU5UUworICBSRVFVSVJFRF9WQVJTIFNXSUdfRVhFQ1VUQUJMRSBTV0lHX0RJUgorICBWRVJTSU9OX1ZBUiBTV0lHX1ZFUlNJT04pCiAKIG1hcmtfYXNfYWR2YW5jZWQoU1dJR19ESVIgU1dJR19WRVJTSU9OIFNXSUdfRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFRDTC5jbWFrZSBiL01vZHVsZXMvRmluZFRDTC5jbWFrZQppbmRleCBiZTQ3YzM5Li45NjAyNjVmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRUQ0wuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kVENMLmNtYWtlCkBAIC0yMjQsMTIgKzIyNCwxNCBAQAogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoVENMIERFRkFVTFRfTVNHIFRDTF9MSUJSQVJZIFRDTF9JTkNMVURFX1BBVEgpCitzZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEIDEpCiBzZXQoVENMVEtfRklORF9SRVFVSVJFRCAke1RDTF9GSU5EX1JFUVVJUkVEfSkKIHNldChUQ0xUS19GSU5EX1FVSUVUTFkgICR7VENMX0ZJTkRfUVVJRVRMWX0pCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoVENMVEsgREVGQVVMVF9NU0cgVENMX0xJQlJBUlkgVENMX0lOQ0xVREVfUEFUSCBUS19MSUJSQVJZIFRLX0lOQ0xVREVfUEFUSCkKIHNldChUS19GSU5EX1JFUVVJUkVEICR7VENMX0ZJTkRfUkVRVUlSRUR9KQogc2V0KFRLX0ZJTkRfUVVJRVRMWSAgJHtUQ0xfRklORF9RVUlFVExZfSkKIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhUSyBERUZBVUxUX01TRyBUS19MSUJSQVJZIFRLX0lOQ0xVREVfUEFUSCkKK3Vuc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCkKIAogbWFya19hc19hZHZhbmNlZCgKICAgVENMX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kVGhyZWFkcy5jbWFrZSBiL01vZHVsZXMvRmluZFRocmVhZHMuY21ha2UKaW5kZXggYjBjOTFiMi4uZjk3ZTVjOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kVGhyZWFkcy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRUaHJlYWRzLmNtYWtlCkBAIC03LDMxICs3LDQ0IEBACiAKIFRoaXMgbW9kdWxlIGRldGVybWluZXMgdGhlIHRocmVhZCBsaWJyYXJ5IG9mIHRoZSBzeXN0ZW0uCiAKLVRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzZXQKK0ltcG9ydGVkIFRhcmdldHMKK15eXl5eXl5eXl5eXl5eXl4KIAotOjoKK1RoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXQ6CiAKLSAgQ01BS0VfVEhSRUFEX0xJQlNfSU5JVCAgICAgLSB0aGUgdGhyZWFkIGxpYnJhcnkKLSAgQ01BS0VfVVNFX1dJTjMyX1RIUkVBRFNfSU5JVCAtIHVzaW5nIFdJTjMyIHRocmVhZHM/Ci0gIENNQUtFX1VTRV9QVEhSRUFEU19JTklUICAgIC0gYXJlIHdlIHVzaW5nIHB0aHJlYWRzCi0gIENNQUtFX0hQX1BUSFJFQURTX0lOSVQgICAgIC0gYXJlIHdlIHVzaW5nIGhwIHB0aHJlYWRzCitgYFRocmVhZHM6OlRocmVhZHNgYAorICBUaGUgdGhyZWFkIGxpYnJhcnksIGlmIGZvdW5kLgogCi1UaGUgZm9sbG93aW5nIGltcG9ydCB0YXJnZXQgaXMgY3JlYXRlZAorUmVzdWx0IFZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgogCi06OgorVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHNldDoKIAotICBUaHJlYWRzOjpUaHJlYWRzCitgYFRocmVhZHNfRk9VTkRgYAorICBJZiBhIHN1cHBvcnRlZCB0aHJlYWQgbGlicmFyeSB3YXMgZm91bmQuCitgYENNQUtFX1RIUkVBRF9MSUJTX0lOSVRgYAorICBUaGUgdGhyZWFkIGxpYnJhcnkgdG8gdXNlLiBUaGlzIG1heSBiZSBlbXB0eSBpZiB0aGUgdGhyZWFkIGZ1bmN0aW9ucworICBhcmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSBsaWJyYXJpZXMgYW5kIG5vIHNwZWNpYWwgZmxhZ3MgYXJlIG5lZWRlZAorICB0byB1c2UgdGhlbS4KK2BgQ01BS0VfVVNFX1dJTjMyX1RIUkVBRFNfSU5JVGBgCisgIElmIHRoZSBmb3VuZCB0aHJlYWQgbGlicmFyeSBpcyB0aGUgd2luMzIgb25lLgorYGBDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVGBgCisgIElmIHRoZSBmb3VuZCB0aHJlYWQgbGlicmFyeSBpcyBwdGhyZWFkIGNvbXBhdGlibGUuCitgYENNQUtFX0hQX1BUSFJFQURTX0lOSVRgYAorICBJZiB0aGUgZm91bmQgdGhyZWFkIGxpYnJhcnkgaXMgdGhlIEhQIHRocmVhZCBsaWJyYXJ5LgogCi1JZiB0aGUgdXNlIG9mIHRoZSAtcHRocmVhZCBjb21waWxlciBhbmQgbGlua2VyIGZsYWcgaXMgcHJlZmVycmVkIHRoZW4gdGhlCi1jYWxsZXIgY2FuIHNldAorVmFyaWFibGVzIEFmZmVjdGluZyBCZWhhdmlvcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi06OgorLi4gdmFyaWFibGU6OiBUSFJFQURTX1BSRUZFUl9QVEhSRUFEX0ZMQUcKIAotICBUSFJFQURTX1BSRUZFUl9QVEhSRUFEX0ZMQUcKKyAgSWYgdGhlIHVzZSBvZiB0aGUgLXB0aHJlYWQgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFnIGlzIHByZWZlcnJlZCB0aGVuCisgIHRoZSBjYWxsZXIgY2FuIHNldCB0aGlzIHZhcmlhYmxlIHRvIFRSVUUuIFRoZSBjb21waWxlciBmbGFnIGNhbiBvbmx5IGJlCisgIHVzZWQgd2l0aCB0aGUgaW1wb3J0ZWQgdGFyZ2V0LiBVc2Ugb2YgYm90aCB0aGUgaW1wb3J0ZWQgdGFyZ2V0IGFzIHdlbGwKKyAgYXMgdGhpcyBzd2l0Y2ggaXMgaGlnaGx5IHJlY29tbWVuZGVkIGZvciBuZXcgY29kZS4KIAotVGhlIGNvbXBpbGVyIGZsYWcgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBpbXBvcnRlZAotdGFyZ2V0LiBVc2Ugb2YgYm90aCB0aGUgaW1wb3J0ZWQgdGFyZ2V0IGFzIHdlbGwgYXMgdGhpcyBzd2l0Y2ggaXMgaGlnaGx5Ci1yZWNvbW1lbmRlZCBmb3IgbmV3IGNvZGUuCisgIFRoaXMgdmFyaWFibGUgaGFzIG5vIGVmZmVjdCBpZiB0aGUgc3lzdGVtIGxpYnJhcmllcyBwcm92aWRlIHRoZQorICB0aHJlYWQgZnVuY3Rpb25zLCBpLmUuIHdoZW4gYGBDTUFLRV9USFJFQURfTElCU19JTklUYGAgd2lsbCBiZSBlbXB0eS4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGluY2x1ZGUgKENoZWNrTGlicmFyeUV4aXN0cykKQEAgLTYzLDYgKzc2LDcgQEAKICAgcHRocmVhZF90IHRocmVhZDsKICAgcHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgdGVzdF9mdW5jLCBOVUxMKTsKICAgcHRocmVhZF9kZXRhY2godGhyZWFkKTsKKyAgcHRocmVhZF9jYW5jZWwodGhyZWFkKTsKICAgcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiAgIHB0aHJlYWRfYXRmb3JrKE5VTEwsIE5VTEwsIE5VTEwpOwogICBwdGhyZWFkX2V4aXQoTlVMTCk7CkBAIC05MCw3ICsxMDQsNyBAQAogICBpZihOT1QgVGhyZWFkc19GT1VORCkKICAgICAjIElmIHdlIGRpZCBub3QgZm91bmQgLWxwdGhyZWFkLCAtbHB0aHJlYWQsIG9yIC1sdGhyZWFkLCBsb29rIGZvciAtcHRocmVhZAogICAgIGlmKE5PVCBERUZJTkVEIFRIUkVBRFNfSEFWRV9QVEhSRUFEX0FSRykKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiBjb21waWxlciBhY2NlcHRzIC1wdGhyZWFkIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGlmIGNvbXBpbGVyIGFjY2VwdHMgLXB0aHJlYWQiKQogICAgICAgaWYoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQpCiAgICAgICAgIHNldChfdGhyZWFkc19zcmMgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0ZvclB0aHJlYWRzLmMpCiAgICAgICBlbHNlaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCkKQEAgLTEwNiw5ICsxMjAsOSBAQAogCiAgICAgICBpZihUSFJFQURTX0hBVkVfUFRIUkVBRF9BUkcpCiAgICAgICAgIHNldChUaHJlYWRzX0ZPVU5EIFRSVUUpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiBjb21waWxlciBhY2NlcHRzIC1wdGhyZWFkIC0geWVzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJ5ZXMiKQogICAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiBjb21waWxlciBhY2NlcHRzIC1wdGhyZWFkIC0gbm8iKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vIikKICAgICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICAgIkRldGVybWluaW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgLXB0aHJlYWQgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFgxMS5jbWFrZSBiL01vZHVsZXMvRmluZFgxMS5jbWFrZQppbmRleCBiMjhkZDEyLi5hYTgzNTc1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRYMTEuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kWDExLmNtYWtlCkBAIC0yNSw2ICsyNSwxMCBAQAogICBYMTFfWGFjY2Vzc3J1bGVzX0lOQ0xVREVfUEFUSCwKICAgWDExX1hhY2Nlc3NzdHJfSU5DTFVERV9QQVRILCAgICAgICAgICAgICAgICAgICAgICAgWDExX1hhY2Nlc3NfRk9VTkQKICAgWDExX1hhdV9JTkNMVURFX1BBVEgsICAgICAgICAgIFgxMV9YYXVfTElCLCAgICAgICAgWDExX1hhdV9GT1VORCwgICAgICAgIFgxMTo6WGF1CisgIFgxMV94Y2JfSU5DTFVERV9QQVRILCAgICAgICAgICBYMTFfeGNiX0xJQiwgICAgICAgIFgxMV94Y2JfRk9VTkQsICAgICAgICBYMTE6OnhjYgorICBYMTFfWDExX3hjYl9JTkNMVURFX1BBVEgsICAgICAgWDExX1gxMV94Y2JfTElCLCAgICBYMTFfWDExX3hjYl9GT1VORCwgICAgWDExOjpYMTFfeGNiCisgIFgxMV94Y2JfaWNjY21fSU5DTFVERV9QQVRILCAgICBYMTFfeGNiX2ljY2NtX0xJQiwgIFgxMV94Y2JfaWNjY21fRk9VTkQsICBYMTE6OnhjYl9pY2NjbQorICBYMTFfeGNiX3hrYl9JTkNMVURFX1BBVEgsICAgICAgWDExX3hjYl94a2JfTElCLCAgICBYMTFfeGNiX3hrYl9GT1VORCwgICAgWDExOjp4Y2JfeGtiCiAgIFgxMV9YY29tcG9zaXRlX0lOQ0xVREVfUEFUSCwgICBYMTFfWGNvbXBvc2l0ZV9MSUIsIFgxMV9YY29tcG9zaXRlX0ZPVU5ELCBYMTE6Olhjb21wb3NpdGUKICAgWDExX1hjdXJzb3JfSU5DTFVERV9QQVRILCAgICAgIFgxMV9YY3Vyc29yX0xJQiwgICAgWDExX1hjdXJzb3JfRk9VTkQsICAgIFgxMTo6WGN1cnNvcgogICBYMTFfWGRhbWFnZV9JTkNMVURFX1BBVEgsICAgICAgWDExX1hkYW1hZ2VfTElCLCAgICBYMTFfWGRhbWFnZV9GT1VORCwgICAgWDExOjpYZGFtYWdlCkBAIC0zOCw2ICs0Miw4IEBACiAgIFgxMV9YaW5lcmFtYV9JTkNMVURFX1BBVEgsICAgICBYMTFfWGluZXJhbWFfTElCLCAgIFgxMV9YaW5lcmFtYV9GT1VORCwgICBYMTE6OlhpbmVyYW1hCiAgIFgxMV9Ya2JfSU5DTFVERV9QQVRILAogICBYMTFfWGtibGliX0lOQ0xVREVfUEFUSCwgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTFfWGtiX0ZPVU5ELCAgICAgICAgWDExOjpYa2IKKyAgWDExX3hrYmNvbW1vbl9JTkNMVURFX1BBVEgsICAgIFgxMV94a2Jjb21tb25fTElCLCAgWDExX3hrYmNvbW1vbl9GT1VORCwgIFgxMTo6eGtiY29tbW9uCisgIFgxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSCxYMTFfeGtiY29tbW9uX1gxMV9MSUIsWDExX3hrYmNvbW1vbl9YMTFfRk9VTkQsWDExOjp4a2Jjb21tb25fWDExCiAgIFgxMV94a2JmaWxlX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfeGtiZmlsZV9MSUIsICAgIFgxMV94a2JmaWxlX0ZPVU5ELCAgICBYMTE6OnhrYmZpbGUKICAgWDExX1htdV9JTkNMVURFX1BBVEgsICAgICAgICAgIFgxMV9YbXVfTElCLCAgICAgICAgWDExX1htdV9GT1VORCwgICAgICAgIFgxMTo6WG11CiAgIFgxMV9YcG1fSU5DTFVERV9QQVRILCAgICAgICAgICBYMTFfWHBtX0xJQiwgICAgICAgIFgxMV9YcG1fRk9VTkQsICAgICAgICBYMTE6OlhwbQpAQCAtOTQsNiArMTAwLDkgQEAKICAgZmluZF9wYXRoKFgxMV9YYWNjZXNzcnVsZXNfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hLQnJ1bGVzLmggICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGFjY2Vzc3N0cl9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWEtCc3RyLmggICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hhdV9JTkNMVURFX1BBVEggWDExL1hhdXRoLmggICAgICAgICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV94Y2JfSU5DTFVERV9QQVRIIHhjYi94Y2IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCisgIGZpbmRfcGF0aChYMTFfWDExX3hjYl9JTkNMVURFX1BBVEggWDExL1hsaWIteGNiLmggICAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQorICBmaW5kX3BhdGgoWDExX3hjYl9pY2NjbV9JTkNMVURFX1BBVEggeGNiL3hjYl9pY2NjbS5oICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV9YY29tcG9zaXRlX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmggICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGN1cnNvcl9JTkNMVURFX1BBVEggWDExL1hjdXJzb3IvWGN1cnNvci5oICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hkYW1hZ2VfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaCAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKQEAgLTEwNyw2ICsxMTYsOCBAQAogICBmaW5kX3BhdGgoWDExX1hpX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YSW5wdXQuaCAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV9YaW5lcmFtYV9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWGluZXJhbWEuaCAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGtiX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YS0IuaCAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQorICBmaW5kX3BhdGgoWDExX3hrYmNvbW1vbl9JTkNMVURFX1BBVEggeGtiY29tbW9uL3hrYmNvbW1vbi5oICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSCB4a2Jjb21tb24veGtiY29tbW9uLXgxMS5oICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGtibGliX0lOQ0xVREVfUEFUSCBYMTEvWEtCbGliLmggICAgICAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX3hrYmZpbGVfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hLQmZpbGUuaCAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV9YbXVfSU5DTFVERV9QQVRIIFgxMS9YbXUvWG11LmggICAgICAgICAgICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCkBAIC0xMzcsNiArMTQ4LDEwIEBACiAgIGZpbmRfbGlicmFyeShYMTFfSUNFX0xJQiBJQ0UgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1NNX0xJQiBTTSAgICAgICAgICAgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YYXVfTElCIFhhdSAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGNiX0xJQiB4Y2IgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQorICBmaW5kX2xpYnJhcnkoWDExX1gxMV94Y2JfTElCIFgxMS14Y2IgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9saWJyYXJ5KFgxMV94Y2JfaWNjY21fTElCIHhjYi1pY2NjbSAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGNiX3hrYl9MSUIgeGNiLXhrYiAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hjb21wb3NpdGVfTElCIFhjb21wb3NpdGUgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YY3Vyc29yX0xJQiBYY3Vyc29yICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfWGRhbWFnZV9MSUIgWGRhbWFnZSAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQpAQCAtMTQ2LDYgKzE2MSw4IEBACiAgIGZpbmRfbGlicmFyeShYMTFfWGZ0X0xJQiBYZnQgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hpX0xJQiBYaSAgICAgICAgICAgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YaW5lcmFtYV9MSUIgWGluZXJhbWEgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGtiY29tbW9uX0xJQiB4a2Jjb21tb24gICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQorICBmaW5kX2xpYnJhcnkoWDExX3hrYmNvbW1vbl9YMTFfTElCIHhrYmNvbW1vbi14MTEgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX3hrYmZpbGVfTElCIHhrYmZpbGUgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YbXVfTElCIFhtdSAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfWHBtX0xJQiBYcG0gICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQpAQCAtMjIxLDYgKzIzOCwyMiBAQAogICAgIHNldChYMTFfWGF1X0ZPVU5EIFRSVUUpCiAgIGVuZGlmICgpCiAKKyAgaWYgKFgxMV94Y2JfTElCIEFORCBYMTFfeGNiX0lOQ0xVREVfUEFUSCkKKyAgICBzZXQoWDExX3hjYl9GT1VORCBUUlVFKQorICBlbmRpZiAoKQorCisgIGlmIChYMTFfWDExX3hjYl9MSUIgQU5EIFgxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSCkKKyAgICBzZXQoWDExX1gxMV94Y2JfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl9pY2NjbV9MSUIgQU5EIFgxMV94Y2JfaWNjY21fSU5DTFVERV9QQVRIKQorICAgIHNldChYMTFfeGNiX2ljY2NtX0ZPVU5EIFRSVUUpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfeGtiX0xJQikKKyAgICBzZXQoWDExX3hjYl94a2JfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX1hkbWNwX0lOQ0xVREVfUEFUSCBBTkQgWDExX1hkbWNwX0xJQikKICAgICAgIHNldChYMTFfWGRtY3BfRk9VTkQgVFJVRSkKICAgICAgIGxpc3QoQVBQRU5EIFgxMV9JTkNMVURFX0RJUiAke1gxMV9YZG1jcF9JTkNMVURFX1BBVEh9KQpAQCAtMzI2LDYgKzM1OSwxNCBAQAogICAgICBsaXN0KEFQUEVORCBYMTFfSU5DTFVERV9ESVIgJHtYMTFfWGtiX0lOQ0xVREVfUEFUSH0gKQogICBlbmRpZiAoKQogCisgIGlmIChYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSCBBTkQgWDExX3hrYmNvbW1vbl9MSUIpCisgICAgIHNldChYMTFfeGtiY29tbW9uX0ZPVU5EIFRSVUUpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSCBBTkQgWDExX3hrYmNvbW1vbl9YMTFfTElCKQorICAgICBzZXQoWDExX3hrYmNvbW1vbl9YMTFfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX3hrYmZpbGVfSU5DTFVERV9QQVRIIEFORCBYMTFfeGtiZmlsZV9MSUIgQU5EIFgxMV9YbGliX0lOQ0xVREVfUEFUSCkKICAgICAgc2V0KFgxMV94a2JmaWxlX0ZPVU5EIFRSVUUpCiAgICAgICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCkBAIC00NzgsNiArNTE5LDM1IEBACiAgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtYMTFfWGF1X0lOQ0xVREVfUEFUSH0iKQogICBlbmRpZiAoKQogCisgIGlmIChYMTFfeGNiX0ZPVU5EIEFORCBOT1QgVEFSR0VUIFgxMTo6eGNiKQorICAgIGFkZF9saWJyYXJ5KFgxMTo6eGNiIFVOS05PV04gSU1QT1JURUQpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6eGNiIFBST1BFUlRJRVMKKyAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIke1gxMV94Y2JfTElCfSIKKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1gxMV94Y2JfSU5DTFVERV9QQVRIfSIpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV9YMTFfeGNiX0ZPVU5EIEFORCBOT1QgVEFSR0VUIFgxMTo6WDExX3hjYikKKyAgICBhZGRfbGlicmFyeShYMTE6OlgxMV94Y2IgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjpYMTFfeGNiIFBST1BFUlRJRVMKKyAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIke1gxMV9YMTFfeGNiX0xJQn0iCisgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtYMTFfWDExX3hjYl9JTkNMVURFX1BBVEh9IgorICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTICJYMTE6OnhjYjtYMTE6OlgxMSIpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfaWNjY21fRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4Y2JfaWNjY20pCisgICAgYWRkX2xpYnJhcnkoWDExOjp4Y2JfaWNjY20gVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjp4Y2JfaWNjY20gUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hjYl9pY2NjbV9MSUJ9IgorICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTICJYMTE6OnhjYiIpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfeGtiX0ZPVU5EIEFORCBOT1QgVEFSR0VUIFgxMTo6eGNiX3hrYikKKyAgICBhZGRfbGlicmFyeShYMTE6OnhjYl94a2IgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjp4Y2JfeGtiIFBST1BFUlRJRVMKKyAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIke1gxMV94Y2JfeGtiX0xJQn0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6eGNiIikKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjpYY29tcG9zaXRlKQogICAgIGFkZF9saWJyYXJ5KFgxMTo6WGNvbXBvc2l0ZSBVTktOT1dOIElNUE9SVEVEKQogICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6Olhjb21wb3NpdGUgUFJPUEVSVElFUwpAQCAtNTcyLDYgKzY0MiwyMSBAQAogICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTICJYMTE6OlgxMSIpCiAgIGVuZGlmICgpCiAKKyAgaWYgKFgxMV94a2Jjb21tb25fRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4a2Jjb21tb24pCisgICAgYWRkX2xpYnJhcnkoWDExOjp4a2Jjb21tb24gVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjp4a2Jjb21tb24gUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hrYmNvbW1vbl9MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX3hrYmNvbW1vbl9JTkNMVURFX1BBVEh9IikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hrYmNvbW1vbl9YMTFfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4a2Jjb21tb25fWDExKQorICAgIGFkZF9saWJyYXJ5KFgxMTo6eGtiY29tbW9uX1gxMSBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhrYmNvbW1vbl9YMTEgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hrYmNvbW1vbl9YMTFfTElCfSIKKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1gxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSH0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6WDExO1gxMTo6eGtiY29tbW9uIikKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX3hrYmZpbGVfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4a2JmaWxlKQogICAgIGFkZF9saWJyYXJ5KFgxMTo6eGtiZmlsZSBVTktOT1dOIElNUE9SVEVEKQogICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhrYmZpbGUgUFJPUEVSVElFUwpAQCAtNjY4LDYgKzc1MywxMSBAQAogICAgIFgxMV9YZXh0X0xJQgogICAgIFgxMV9YYXVfTElCCiAgICAgWDExX1hhdV9JTkNMVURFX1BBVEgKKyAgICBYMTFfeGNiX0xJQgorICAgIFgxMV94Y2JfSU5DTFVERV9QQVRICisgICAgWDExX3hjYl94a2JfTElCCisgICAgWDExX1gxMV94Y2JfTElCCisgICAgWDExX1gxMV94Y2JfSU5DTFVERV9QQVRICiAgICAgWDExX1hsaWJfSU5DTFVERV9QQVRICiAgICAgWDExX1h1dGlsX0lOQ0xVREVfUEFUSAogICAgIFgxMV9YY29tcG9zaXRlX0lOQ0xVREVfUEFUSApAQCAtNzA0LDYgKzc5NCwxMCBAQAogICAgIFgxMV9YZG1jcF9JTkNMVURFX1BBVEgKICAgICBYMTFfWGtiX0lOQ0xVREVfUEFUSAogICAgIFgxMV9Ya2JsaWJfSU5DTFVERV9QQVRICisgICAgWDExX3hrYmNvbW1vbl9JTkNMVURFX1BBVEgKKyAgICBYMTFfeGtiY29tbW9uX0xJQgorICAgIFgxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSAorICAgIFgxMV94a2Jjb21tb25fWDExX0xJQgogICAgIFgxMV94a2JmaWxlX0lOQ0xVREVfUEFUSAogICAgIFgxMV94a2JmaWxlX0xJQgogICAgIFgxMV9YbXVfSU5DTFVERV9QQVRICmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlLmNtYWtlIGIvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS5jbWFrZQppbmRleCA4OTNhOTZmLi41NDczNDZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlLmNtYWtlCisrKyBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UuY21ha2UKQEAgLTM0MSw3ICszNDEsNyBAQAogICAjIEJ1aWxkIHRoZSB2ZXJpZmljYXRpb24gcHJvamVjdCBpZiBub3QgeWV0IGJ1aWx0LgogICBpZihOT1QgREVGSU5FRCBGb3J0cmFuQ0ludGVyZmFjZV9WRVJJRklFRF8ke2xhbmd9KQogICAgIHNldChfZGVzYyAiVmVyaWZ5aW5nIEZvcnRyYW4vJHtsYW5nfSBDb21waWxlciBDb21wYXRpYmlsaXR5IikKLSAgICBtZXNzYWdlKFNUQVRVUyAiJHtfZGVzY30iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIiR7X2Rlc2N9IikKIAogICAgICMgQnVpbGQgYSBzYW1wbGUgcHJvamVjdCB3aGljaCByZXBvcnRzIHN5bWJvbHMuCiAgICAgc2V0KENNQUtFX1RSWV9DT01QSUxFX0NPTkZJR1VSQVRJT04gUmVsZWFzZSkKQEAgLTM2MywxMiArMzYzLDEyIEBACiAKICAgICAjIFJlcG9ydCByZXN1bHRzLgogICAgIGlmKEZvcnRyYW5DSW50ZXJmYWNlX1ZFUklGWV8ke2xhbmd9X0NPTVBJTEVEKQotICAgICAgbWVzc2FnZShTVEFUVVMgIiR7X2Rlc2N9IC0gU3VjY2VzcyIpCisgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIiR7X2Rlc2N9IHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfb3V0cHV0fVxuXG4iKQogICAgICAgc2V0KEZvcnRyYW5DSW50ZXJmYWNlX1ZFUklGSUVEXyR7bGFuZ30gMSBDQUNIRSBJTlRFUk5BTCAiRm9ydHJhbi8ke2xhbmd9IGNvbXBhdGliaWxpdHkiKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIiR7X2Rlc2N9IC0gRmFpbGVkIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIiR7X2Rlc2N9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfb3V0cHV0fVxuXG4iKQogICAgICAgc2V0KEZvcnRyYW5DSW50ZXJmYWNlX1ZFUklGSUVEXyR7bGFuZ30gMCBDQUNIRSBJTlRFUk5BTCAiRm9ydHJhbi8ke2xhbmd9IGNvbXBhdGliaWxpdHkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dCBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQKaW5kZXggMzgxMDgwYi4uMTNlNDQ5OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDEsMyArMTAxLDcgQEAKICMgUmVxdWlyZSBzeW1ib2xzIHRocm91Z2ggRm9ydHJhbi4KIGFkZF9leGVjdXRhYmxlKEZvcnRyYW5DSW50ZXJmYWNlIG1haW4uRiBjYWxsX3N1Yi5mICR7Y2FsbF9tb2R9KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEZvcnRyYW5DSW50ZXJmYWNlIFBVQkxJQyBzeW1ib2xzKQorCitmaWxlKEdFTkVSQVRFIE9VVFBVVCBleGUtJDxDT05GSUc+LmNtYWtlIENPTlRFTlQgW1sKK3NldChGb3J0cmFuQ0ludGVyZmFjZV9FWEUgIiQ8VEFSR0VUX0ZJTEU6Rm9ydHJhbkNJbnRlcmZhY2U+IikKK11dKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS9EZXRlY3QuY21ha2UgYi9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0RldGVjdC5jbWFrZQppbmRleCA3Nzg5Nzg1Li5jNzUwNjdiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0RldGVjdC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0RldGVjdC5jbWFrZQpAQCAtMTUsNyArMTUsNyBAQAogICAgIE9SICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9CiAgICAgSVNfTkVXRVJfVEhBTiAke0ZvcnRyYW5DSW50ZXJmYWNlX0JJTkFSWV9ESVJ9L091dHB1dC5jbWFrZQogICAgICkKLSAgbWVzc2FnZShTVEFUVVMgIkRldGVjdGluZyBGb3J0cmFuL0MgSW50ZXJmYWNlIikKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nIEZvcnRyYW4vQyBJbnRlcmZhY2UiKQogZWxzZSgpCiAgIHJldHVybigpCiBlbmRpZigpCkBAIC00MywxNyArNDMsMTEgQEAKIHVuc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0NPTVBJTEVEIENBQ0hFKQogCiAjIExvY2F0ZSB0aGUgc2FtcGxlIHByb2plY3QgZXhlY3V0YWJsZS4KK3NldChGb3J0cmFuQ0ludGVyZmFjZV9FWEUpCiBpZihGb3J0cmFuQ0ludGVyZmFjZV9DT01QSUxFRCkKLSAgZmluZF9wcm9ncmFtKEZvcnRyYW5DSW50ZXJmYWNlX0VYRQotICAgIE5BTUVTIEZvcnRyYW5DSW50ZXJmYWNlJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0KLSAgICBQQVRIUyAke0ZvcnRyYW5DSW50ZXJmYWNlX0JJTkFSWV9ESVJ9ICR7Rm9ydHJhbkNJbnRlcmZhY2VfQklOQVJZX0RJUn0vUmVsZWFzZQotICAgIE5PX0RFRkFVTFRfUEFUSAotICAgICkKLSAgc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSAke0ZvcnRyYW5DSW50ZXJmYWNlX0VYRX0pCi0gIHVuc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSBDQUNIRSkKKyAgaW5jbHVkZSgke0ZvcnRyYW5DSW50ZXJmYWNlX0JJTkFSWV9ESVJ9L2V4ZS1SZWxlYXNlLmNtYWtlIE9QVElPTkFMKQogZWxzZSgpCiAgIHNldChfcmVzdWx0ICJGYWlsZWQgdG8gY29tcGlsZSIpCi0gIHNldChGb3J0cmFuQ0ludGVyZmFjZV9FWEUpCiAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAiRm9ydHJhbi9DIGludGVyZmFjZSB0ZXN0IHByb2plY3QgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgIiR7Rm9ydHJhbkNJbnRlcmZhY2VfT1VUUFVUfVxuIikKQEAgLTE3Miw3ICsxNjYsOSBAQAogICBlbHNlKCkKICAgICBzZXQoX3Jlc3VsdCAiRm91bmQgR0xPQkFMIGJ1dCBub3QgTU9EVUxFIG1hbmdsaW5nIikKICAgZW5kaWYoKQorICBzZXQoX3Jlc3VsdF90eXBlIENIRUNLX1BBU1MpCiBlbHNlaWYoTk9UIF9yZXN1bHQpCiAgIHNldChfcmVzdWx0ICJGYWlsZWQgdG8gcmVjb2duaXplIHN5bWJvbHMiKQorICBzZXQoX3Jlc3VsdF90eXBlIENIRUNLX0ZBSUwpCiBlbmRpZigpCi1tZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nIEZvcnRyYW4vQyBJbnRlcmZhY2UgLSAke19yZXN1bHR9IikKK21lc3NhZ2UoJHtfcmVzdWx0X3R5cGV9ICIke19yZXN1bHR9IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvR05VSW5zdGFsbERpcnMuY21ha2UgYi9Nb2R1bGVzL0dOVUluc3RhbGxEaXJzLmNtYWtlCmluZGV4IGY5NWU2ZTIuLjllZjIyYjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvR05VSW5zdGFsbERpcnMuY21ha2UKKysrIGIvTW9kdWxlcy9HTlVJbnN0YWxsRGlycy5jbWFrZQpAQCAtMjIxLDYgKzIyMSwxMSBAQAogICAgICMgZGVmYXVsdCBvbmUuIFdoZW4gQ01BS0VfSU5TVEFMTF9QUkVGSVggY2hhbmdlcywgdGhlIHZhbHVlIGlzCiAgICAgIyB1cGRhdGVkIHRvIHRoZSBuZXcgZGVmYXVsdCwgdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgY2hhbmdlZCBpdC4KICAgZW5kaWYoKQorICBpZiAoTk9UIERFRklORUQgQ01BS0VfU1lTVEVNX05BTUUgT1IgTk9UIERFRklORUQgQ01BS0VfU0laRU9GX1ZPSURfUCkKKyAgICBtZXNzYWdlKEFVVEhPUl9XQVJOSU5HCisgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IENNQUtFX0lOU1RBTExfTElCRElSIGRpcmVjdG9yeSBiZWNhdXNlIG5vIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMga25vd24uICIKKyAgICAgICJQbGVhc2UgZW5hYmxlIGF0IGxlYXN0IG9uZSBsYW5ndWFnZSBiZWZvcmUgaW5jbHVkaW5nIEdOVUluc3RhbGxEaXJzLiIpCisgIGVuZGlmKCkKICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiXihMaW51eHxrRnJlZUJTRHxHTlUpJCIKICAgICAgIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcKICAgICAgIEFORCBOT1QgRVhJU1RTICIvZXRjL2FyY2gtcmVsZWFzZSIpCkBAIC0yMzUsMTYgKzI0MCwxMCBAQAogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZSgpICMgbm90IGRlYmlhbiwgcmVseSBvbiBDTUFLRV9TSVpFT0ZfVk9JRF9QOgotICAgICAgaWYoTk9UIERFRklORUQgQ01BS0VfU0laRU9GX1ZPSURfUCkKLSAgICAgICAgbWVzc2FnZShBVVRIT1JfV0FSTklORwotICAgICAgICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgQ01BS0VfSU5TVEFMTF9MSUJESVIgZGlyZWN0b3J5IGJlY2F1c2Ugbm8gdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBrbm93bi4gIgotICAgICAgICAgICJQbGVhc2UgZW5hYmxlIGF0IGxlYXN0IG9uZSBsYW5ndWFnZSBiZWZvcmUgaW5jbHVkaW5nIEdOVUluc3RhbGxEaXJzLiIpCi0gICAgICBlbHNlKCkKLSAgICAgICAgaWYoIiR7Q01BS0VfU0laRU9GX1ZPSURfUH0iIEVRVUFMICI4IikKLSAgICAgICAgICBzZXQoX0xJQkRJUl9ERUZBVUxUICJsaWI2NCIpCi0gICAgICAgICAgaWYoREVGSU5FRCBfR05VSW5zdGFsbERpcnNfTEFTVF9DTUFLRV9JTlNUQUxMX1BSRUZJWCkKLSAgICAgICAgICAgIHNldChfX0xBU1RfTElCRElSX0RFRkFVTFQgImxpYjY0IikKLSAgICAgICAgICBlbmRpZigpCisgICAgICBpZigiJHtDTUFLRV9TSVpFT0ZfVk9JRF9QfSIgRVFVQUwgIjgiKQorICAgICAgICBzZXQoX0xJQkRJUl9ERUZBVUxUICJsaWI2NCIpCisgICAgICAgIGlmKERFRklORUQgX0dOVUluc3RhbGxEaXJzX0xBU1RfQ01BS0VfSU5TVEFMTF9QUkVGSVgpCisgICAgICAgICAgc2V0KF9fTEFTVF9MSUJESVJfREVGQVVMVCAibGliNjQiKQogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Hb29nbGVUZXN0LmNtYWtlIGIvTW9kdWxlcy9Hb29nbGVUZXN0LmNtYWtlCmluZGV4IGE1YmI4NjMuLjk3NWNlNmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvR29vZ2xlVGVzdC5jbWFrZQorKysgYi9Nb2R1bGVzL0dvb2dsZVRlc3QuY21ha2UKQEAgLTE1MSw2ICsxNTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFtQUk9QRVJUSUVTIG5hbWUxIHZhbHVlMS4uLl0KICAgICAgICAgICAgICAgICAgICAgICAgICBbVEVTVF9MSVNUIHZhcl0KICAgICAgICAgICAgICAgICAgICAgICAgICBbRElTQ09WRVJZX1RJTUVPVVQgc2Vjb25kc10KKyAgICAgICAgICAgICAgICAgICAgICAgICBbWE1MX09VVFBVVF9ESVIgZGlyXQorICAgICAgICAgICAgICAgICAgICAgICAgIFtESVNDT1ZFUllfTU9ERSA8UE9TVF9CVUlMRHxQUkVfVEVTVD5dCiAgICAgKQogCiAgIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHNgYCBzZXRzIHVwIGEgcG9zdC1idWlsZCBjb21tYW5kIG9uIHRoZSB0ZXN0IGV4ZWN1dGFibGUKQEAgLTIzNiw2ICsyMzgsMjkgQEAKICAgICAgIHByb2JsZW0uICBUaGUgYW1iaWd1b3VzIGJlaGF2aW9yIG9mIHRoZSBgYFRJTUVPVVRgYCBrZXl3b3JkIGluIDMuMTAuMQogICAgICAgYW5kIDMuMTAuMiBoYXMgbm90IGJlZW4gcHJlc2VydmVkLgogCisgIGBgWE1MX09VVFBVVF9ESVIgZGlyYGAKKyAgICBJZiBzcGVjaWZpZWQsIHRoZSBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsb25nIHdpdGggYGAtLWd0ZXN0X291dHB1dD14bWw6YGAKKyAgICB0byB0ZXN0IGV4ZWN1dGFibGUuIFRoZSBhY3R1YWwgZmlsZSBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSB0ZXN0IHRhcmdldCwKKyAgICBpbmNsdWRpbmcgcHJlZml4IGFuZCBzdWZmaXguIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgorICAgIGBgRVhUUkFfQVJHUyAtLWd0ZXN0X291dHB1dD14bWxgYCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd3JpdGluZyB0aGUKKyAgICBYTUwgcmVzdWx0IG91dHB1dCB3aGVuIHVzaW5nIHBhcmFsbGVsIHRlc3QgZXhlY3V0aW9uLgorCisgIGBgRElTQ09WRVJZX01PREVgYAorICAgIFByb3ZpZGVzIGdyZWF0ZXIgY29udHJvbCBvdmVyIHdoZW4gYGBndGVzdF9kaXNjb3Zlcl90ZXN0c2BgcGVyZm9ybXMgdGVzdAorICAgIGRpc2NvdmVyeS4gQnkgZGVmYXVsdCwgYGBQT1NUX0JVSUxEYGAgc2V0cyB1cCBhIHBvc3QtYnVpbGQgY29tbWFuZAorICAgIHRvIHBlcmZvcm0gdGVzdCBkaXNjb3ZlcnkgYXQgYnVpbGQgdGltZS4gSW4gY2VydGFpbiBzY2VuYXJpb3MsIGxpa2UKKyAgICBjcm9zcy1jb21waWxpbmcsIHRoaXMgYGBQT1NUX0JVSUxEYGAgYmVoYXZpb3IgaXMgbm90IGRlc2lyYWJsZS4KKyAgICBCeSBjb250cmFzdCwgYGBQUkVfVEVTVGBgIGRlbGF5cyB0ZXN0IGRpc2NvdmVyeSB1bnRpbCBqdXN0IHByaW9yIHRvIHRlc3QKKyAgICBleGVjdXRpb24uIFRoaXMgd2F5IHRlc3QgZGlzY292ZXJ5IG9jY3VycyBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50CisgICAgd2hlcmUgdGhlIHRlc3QgaGFzIGEgYmV0dGVyIGNoYW5jZSBhdCBmaW5kaW5nIGFwcHJvcHJpYXRlIHJ1bnRpbWUKKyAgICBkZXBlbmRlbmNpZXMuCisKKyAgICBgYERJU0NPVkVSWV9NT0RFYGAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRoZQorICAgIGBgQ01BS0VfR1RFU1RfRElTQ09WRVJfVEVTVFNfRElTQ09WRVJZX01PREVgYCB2YXJpYWJsZSBpZiBpdCBpcyBub3QKKyAgICBwYXNzZWQgd2hlbiBjYWxsaW5nIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHNgYC4gVGhpcyBwcm92aWRlcyBhIG1lY2hhbmlzbQorICAgIGZvciBnbG9iYWxseSBzZWxlY3RpbmcgYSBwcmVmZXJyZWQgdGVzdCBkaXNjb3ZlcnkgYmVoYXZpb3Igd2l0aG91dCBoYXZpbmcKKyAgICB0byBtb2RpZnkgZWFjaCBjYWxsIHNpdGUuCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKICMgU2F2ZSBwcm9qZWN0J3MgcG9saWNpZXMKQEAgLTM2OCwxMSArMzkzLDEyIEBACiBlbmRmdW5jdGlvbigpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogZnVuY3Rpb24oZ3Rlc3RfZGlzY292ZXJfdGVzdHMgVEFSR0VUKQogICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoCiAgICAgIiIKICAgICAiTk9fUFJFVFRZX1RZUEVTO05PX1BSRVRUWV9WQUxVRVMiCi0gICAgIlRFU1RfUFJFRklYO1RFU1RfU1VGRklYO1dPUktJTkdfRElSRUNUT1JZO1RFU1RfTElTVDtESVNDT1ZFUllfVElNRU9VVCIKKyAgICAiVEVTVF9QUkVGSVg7VEVTVF9TVUZGSVg7V09SS0lOR19ESVJFQ1RPUlk7VEVTVF9MSVNUO0RJU0NPVkVSWV9USU1FT1VUO1hNTF9PVVRQVVRfRElSO0RJU0NPVkVSWV9NT0RFIgogICAgICJFWFRSQV9BUkdTO1BST1BFUlRJRVMiCiAgICAgJHtBUkdOfQogICApCkBAIC0zODYsNiArNDEyLDEyIEBACiAgIGlmKE5PVCBfRElTQ09WRVJZX1RJTUVPVVQpCiAgICAgc2V0KF9ESVNDT1ZFUllfVElNRU9VVCA1KQogICBlbmRpZigpCisgIGlmKE5PVCBfRElTQ09WRVJZX01PREUpCisgICAgaWYoTk9UIENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFKQorICAgICAgc2V0KENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFICJQT1NUX0JVSUxEIikKKyAgICBlbmRpZigpCisgICAgc2V0KF9ESVNDT1ZFUllfTU9ERSAke0NNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFfSkKKyAgZW5kaWYoKQogCiAgIGdldF9wcm9wZXJ0eSgKICAgICBoYXNfY291bnRlcgpAQCAtNDE3LDM0ICs0NDksODYgQEAKICAgICBUQVJHRVQgJHtUQVJHRVR9CiAgICAgUFJPUEVSVFkgQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IKICAgKQotICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgVEFSR0VUICR7VEFSR0VUfSBQT1NUX0JVSUxECi0gICAgQllQUk9EVUNUUyAiJHtjdGVzdF90ZXN0c19maWxlfSIKLSAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgotICAgICAgICAgICAgLUQgIlRFU1RfVEFSR0VUPSR7VEFSR0VUfSIKLSAgICAgICAgICAgIC1EICJURVNUX0VYRUNVVEFCTEU9JDxUQVJHRVRfRklMRToke1RBUkdFVH0+IgotICAgICAgICAgICAgLUQgIlRFU1RfRVhFQ1VUT1I9JHtjcm9zc2NvbXBpbGluZ19lbXVsYXRvcn0iCi0gICAgICAgICAgICAtRCAiVEVTVF9XT1JLSU5HX0RJUj0ke19XT1JLSU5HX0RJUkVDVE9SWX0iCi0gICAgICAgICAgICAtRCAiVEVTVF9FWFRSQV9BUkdTPSR7X0VYVFJBX0FSR1N9IgotICAgICAgICAgICAgLUQgIlRFU1RfUFJPUEVSVElFUz0ke19QUk9QRVJUSUVTfSIKLSAgICAgICAgICAgIC1EICJURVNUX1BSRUZJWD0ke19URVNUX1BSRUZJWH0iCi0gICAgICAgICAgICAtRCAiVEVTVF9TVUZGSVg9JHtfVEVTVF9TVUZGSVh9IgotICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9UWVBFUz0ke19OT19QUkVUVFlfVFlQRVN9IgotICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9WQUxVRVM9JHtfTk9fUFJFVFRZX1ZBTFVFU30iCi0gICAgICAgICAgICAtRCAiVEVTVF9MSVNUPSR7X1RFU1RfTElTVH0iCi0gICAgICAgICAgICAtRCAiQ1RFU1RfRklMRT0ke2N0ZXN0X3Rlc3RzX2ZpbGV9IgotICAgICAgICAgICAgLUQgIlRFU1RfRElTQ09WRVJZX1RJTUVPVVQ9JHtfRElTQ09WRVJZX1RJTUVPVVR9IgotICAgICAgICAgICAgLVAgIiR7X0dPT0dMRVRFU1RfRElTQ09WRVJfVEVTVFNfU0NSSVBUfSIKLSAgICBWRVJCQVRJTQotICApCiAKLSAgZmlsZShXUklURSAiJHtjdGVzdF9pbmNsdWRlX2ZpbGV9IgotICAgICJpZihFWElTVFMgXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpXG4iCi0gICAgIiAgaW5jbHVkZShcIiR7Y3Rlc3RfdGVzdHNfZmlsZX1cIilcbiIKLSAgICAiZWxzZSgpXG4iCi0gICAgIiAgYWRkX3Rlc3QoJHtUQVJHRVR9X05PVF9CVUlMVCAke1RBUkdFVH1fTk9UX0JVSUxUKVxuIgotICAgICJlbmRpZigpXG4iCi0gICkKKyAgaWYoX0RJU0NPVkVSWV9NT0RFIFNUUkVRVUFMICJQT1NUX0JVSUxEIikKKyAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgICBUQVJHRVQgJHtUQVJHRVR9IFBPU1RfQlVJTEQKKyAgICAgIEJZUFJPRFVDVFMgIiR7Y3Rlc3RfdGVzdHNfZmlsZX0iCisgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9UQVJHRVQ9JHtUQVJHRVR9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9FWEVDVVRBQkxFPSQ8VEFSR0VUX0ZJTEU6JHtUQVJHRVR9PiIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfRVhFQ1VUT1I9JHtjcm9zc2NvbXBpbGluZ19lbXVsYXRvcn0iCisgICAgICAgICAgICAgIC1EICJURVNUX1dPUktJTkdfRElSPSR7X1dPUktJTkdfRElSRUNUT1JZfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfRVhUUkFfQVJHUz0ke19FWFRSQV9BUkdTfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfUFJPUEVSVElFUz0ke19QUk9QRVJUSUVTfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfUFJFRklYPSR7X1RFU1RfUFJFRklYfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfU1VGRklYPSR7X1RFU1RfU1VGRklYfSIKKyAgICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9UWVBFUz0ke19OT19QUkVUVFlfVFlQRVN9IgorICAgICAgICAgICAgICAtRCAiTk9fUFJFVFRZX1ZBTFVFUz0ke19OT19QUkVUVFlfVkFMVUVTfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfTElTVD0ke19URVNUX0xJU1R9IgorICAgICAgICAgICAgICAtRCAiQ1RFU1RfRklMRT0ke2N0ZXN0X3Rlc3RzX2ZpbGV9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9ESVNDT1ZFUllfVElNRU9VVD0ke19ESVNDT1ZFUllfVElNRU9VVH0iCisgICAgICAgICAgICAgIC1EICJURVNUX1hNTF9PVVRQVVRfRElSPSR7X1hNTF9PVVRQVVRfRElSfSIKKyAgICAgICAgICAgICAgLVAgIiR7X0dPT0dMRVRFU1RfRElTQ09WRVJfVEVTVFNfU0NSSVBUfSIKKyAgICAgIFZFUkJBVElNCisgICAgKQorCisgICAgZmlsZShXUklURSAiJHtjdGVzdF9pbmNsdWRlX2ZpbGV9IgorICAgICAgImlmKEVYSVNUUyBcIiR7Y3Rlc3RfdGVzdHNfZmlsZX1cIilcbiIKKyAgICAgICIgIGluY2x1ZGUoXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpXG4iCisgICAgICAiZWxzZSgpXG4iCisgICAgICAiICBhZGRfdGVzdCgke1RBUkdFVH1fTk9UX0JVSUxUICR7VEFSR0VUfV9OT1RfQlVJTFQpXG4iCisgICAgICAiZW5kaWYoKVxuIgorICAgICkKKyAgZWxzZWlmKF9ESVNDT1ZFUllfTU9ERSBTVFJFUVVBTCAiUFJFX1RFU1QiKQorCisgICAgZ2V0X3Byb3BlcnR5KEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcgR0xPQkFMCisgICAgICAgIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcKKyAgICApCisKKyAgICBpZihHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgc2V0KGN0ZXN0X3Rlc3RzX2ZpbGUgIiR7Y3Rlc3RfZmlsZV9iYXNlfV90ZXN0cy0kPENPTkZJRz4uY21ha2UiKQorICAgIGVuZGlmKCkKKworICAgIHN0cmluZyhDT05DQVQgY3Rlc3RfaW5jbHVkZV9jb250ZW50CisgICAgICAiaWYoRVhJU1RTIFwiJDxUQVJHRVRfRklMRToke1RBUkdFVH0+XCIpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICIgIGlmKFwiJDxUQVJHRVRfRklMRToke1RBUkdFVH0+XCIgSVNfTkVXRVJfVEhBTiBcIiR7Y3Rlc3RfdGVzdHNfZmlsZX1cIikiICAgIlxuIgorICAgICAgIiAgICBpbmNsdWRlKEdvb2dsZVRlc3RBZGRUZXN0cykiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICAgIGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzX2ltcGwoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0VYRUNVVEFCTEUiICAgICAgICAiIFs9PVsiICIkPFRBUkdFVF9GSUxFOiR7VEFSR0VUfT4iICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfRVhFQ1VUT1IiICAgICAgICAgICIgWz09WyIgIiR7Y3Jvc3Njb21waWxpbmdfZW11bGF0b3J9IiAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9XT1JLSU5HX0RJUiIgICAgICAgIiBbPT1bIiAiJHtfV09SS0lOR19ESVJFQ1RPUll9IiAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0VYVFJBX0FSR1MiICAgICAgICAiIFs9PVsiICIke19FWFRSQV9BUkdTfSIgICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfUFJPUEVSVElFUyIgICAgICAgICIgWz09WyIgIiR7X1BST1BFUlRJRVN9IiAgICAgICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9QUkVGSVgiICAgICAgICAgICAgIiBbPT1bIiAiJHtfVEVTVF9QUkVGSVh9IiAgICAgICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX1NVRkZJWCIgICAgICAgICAgICAiIFs9PVsiICIke19URVNUX1NVRkZJWH0iICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIE5PX1BSRVRUWV9UWVBFUyIgICAgICAgICIgWz09WyIgIiR7X05PX1BSRVRUWV9UWVBFU30iICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgTk9fUFJFVFRZX1ZBTFVFUyIgICAgICAgIiBbPT1bIiAiJHtfTk9fUFJFVFRZX1ZBTFVFU30iICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0xJU1QiICAgICAgICAgICAgICAiIFs9PVsiICIke19URVNUX0xJU1R9IiAgICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIENURVNUX0ZJTEUiICAgICAgICAgICAgICIgWz09WyIgIiR7Y3Rlc3RfdGVzdHNfZmlsZX0iICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9ESVNDT1ZFUllfVElNRU9VVCIgIiBbPT1bIiAiJHtfRElTQ09WRVJZX1RJTUVPVVR9IiAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX1hNTF9PVVRQVVRfRElSIiAgICAiIFs9PVsiICIke19YTUxfT1VUUFVUX0RJUn0iICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICApIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICBlbmRpZigpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICIgIGluY2x1ZGUoXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgImVsc2UoKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICBhZGRfdGVzdCgke1RBUkdFVH1fTk9UX0JVSUxUICR7VEFSR0VUfV9OT1RfQlVJTFQpIiAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICJlbmRpZigpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICkKKworICAgIGlmKEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgICBmb3JlYWNoKF9jb25maWcgJHtDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTfSkKKyAgICAgICAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Y3Rlc3RfZmlsZV9iYXNlfV9pbmNsdWRlLSR7X2NvbmZpZ30uY21ha2UiIENPTlRFTlQgIiR7Y3Rlc3RfaW5jbHVkZV9jb250ZW50fSIgQ09ORElUSU9OICQ8Q09ORklHOiR7X2NvbmZpZ30+KQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBmaWxlKFdSSVRFICIke2N0ZXN0X2luY2x1ZGVfZmlsZX0iICJpbmNsdWRlKFwiJHtjdGVzdF9maWxlX2Jhc2V9X2luY2x1ZGUtXCR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfS5jbWFrZVwiKSIpCisgICAgZWxzZSgpCisgICAgICBmaWxlKEdFTkVSQVRFIE9VVFBVVCAiJHtjdGVzdF9maWxlX2Jhc2V9X2luY2x1ZGUuY21ha2UiIENPTlRFTlQgIiR7Y3Rlc3RfaW5jbHVkZV9jb250ZW50fSIpCisgICAgICBmaWxlKFdSSVRFICIke2N0ZXN0X2luY2x1ZGVfZmlsZX0iICJpbmNsdWRlKFwiJHtjdGVzdF9maWxlX2Jhc2V9X2luY2x1ZGUuY21ha2VcIikiKQorICAgIGVuZGlmKCkKKworICBlbHNlKCkKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIlVua25vd24gRElTQ09WRVJZX01PREU6ICR7X0RJU0NPVkVSWV9NT0RFfSIpCisgIGVuZGlmKCkKIAogICAjIEFkZCBkaXNjb3ZlcmVkIHRlc3RzIHRvIGRpcmVjdG9yeSBURVNUX0lOQ0xVREVfRklMRVMKICAgc2V0X3Byb3BlcnR5KERJUkVDVE9SWQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Hb29nbGVUZXN0QWRkVGVzdHMuY21ha2UgYi9Nb2R1bGVzL0dvb2dsZVRlc3RBZGRUZXN0cy5jbWFrZQppbmRleCA0YWJiYmVjLi42NWFmNGMyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0dvb2dsZVRlc3RBZGRUZXN0cy5jbWFrZQorKysgYi9Nb2R1bGVzL0dvb2dsZVRlc3RBZGRUZXN0cy5jbWFrZQpAQCAtMSwxMDYgKzEsMTc1IEBACiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCiAKLXNldChwcmVmaXggIiR7VEVTVF9QUkVGSVh9IikKLXNldChzdWZmaXggIiR7VEVTVF9TVUZGSVh9IikKLXNldChleHRyYV9hcmdzICR7VEVTVF9FWFRSQV9BUkdTfSkKLXNldChwcm9wZXJ0aWVzICR7VEVTVF9QUk9QRVJUSUVTfSkKLXNldChzY3JpcHQpCi1zZXQoc3VpdGUpCi1zZXQodGVzdHMpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gJHtDTUFLRV9WRVJTSU9OfSkKIAotZnVuY3Rpb24oYWRkX2NvbW1hbmQgTkFNRSkKKyMgT3ZlcndyaXRlIHBvc3NpYmx5IGV4aXN0aW5nICR7X0NURVNUX0ZJTEV9IHdpdGggZW1wdHkgZmlsZQorc2V0KGZsdXNoX3Rlc3RzX01PREUgV1JJVEUpCisKKyMgRmx1c2hlcyBzY3JpcHQgdG8gJHtfQ1RFU1RfRklMRX0KK21hY3JvKGZsdXNoX3NjcmlwdCkKKyAgZmlsZSgke2ZsdXNoX3Rlc3RzX01PREV9ICIke19DVEVTVF9GSUxFfSIgIiR7c2NyaXB0fSIpCisgIHNldChmbHVzaF90ZXN0c19NT0RFIEFQUEVORCkKKworICBzZXQoc2NyaXB0ICIiKQorZW5kbWFjcm8oKQorCisjIEZsdXNoZXMgdGVzdHNfYnVmZmVyIHRvIHRlc3RzCittYWNybyhmbHVzaF90ZXN0c19idWZmZXIpCisgIGxpc3QoQVBQRU5EIHRlc3RzICIke3Rlc3RzX2J1ZmZlcn0iKQorICBzZXQodGVzdHNfYnVmZmVyICIiKQorZW5kbWFjcm8oKQorCittYWNybyhhZGRfY29tbWFuZCBOQU1FKQogICBzZXQoX2FyZ3MgIiIpCiAgIGZvcmVhY2goX2FyZyAke0FSR059KQogICAgIGlmKF9hcmcgTUFUQ0hFUyAiW14tLi86YS16QS1aMC05X10iKQotICAgICAgc2V0KF9hcmdzICIke19hcmdzfSBbPT1bJHtfYXJnfV09PV0iKQorICAgICAgc3RyaW5nKEFQUEVORCBfYXJncyAiIFs9PVske19hcmd9XT09XSIpCiAgICAgZWxzZSgpCi0gICAgICBzZXQoX2FyZ3MgIiR7X2FyZ3N9ICR7X2FyZ30iKQorICAgICAgc3RyaW5nKEFQUEVORCBfYXJncyAiICR7X2FyZ30iKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi0gIHNldChzY3JpcHQgIiR7c2NyaXB0fSR7TkFNRX0oJHtfYXJnc30pXG4iIFBBUkVOVF9TQ09QRSkKLWVuZGZ1bmN0aW9uKCkKKyAgc3RyaW5nKEFQUEVORCBzY3JpcHQgIiR7TkFNRX0oJHtfYXJnc30pXG4iKQorICBzdHJpbmcoTEVOR1RIICIke3NjcmlwdH0iIF9zY3JpcHRfbGVuKQorICBpZigke19zY3JpcHRfbGVufSBHUkVBVEVSICI1MDAwMCIpCisgICAgZmx1c2hfc2NyaXB0KCkKKyAgZW5kaWYoKQorICAjIFVuc2V0cyBtYWNybyBsb2NhbCB2YXJpYWJsZXMgdG8gcHJldmVudCBsZWFrYWdlIG91dHNpZGUgb2YgdGhpcyBtYWNyby4KKyAgdW5zZXQoX2FyZ3MpCisgIHVuc2V0KF9zY3JpcHRfbGVuKQorZW5kbWFjcm8oKQogCi0jIFJ1biB0ZXN0IGV4ZWN1dGFibGUgdG8gZ2V0IGxpc3Qgb2YgYXZhaWxhYmxlIHRlc3RzCi1pZihOT1QgRVhJU1RTICIke1RFU1RfRVhFQ1VUQUJMRX0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SCi0gICAgIlNwZWNpZmllZCB0ZXN0IGV4ZWN1dGFibGUgZG9lcyBub3QgZXhpc3QuXG4iCi0gICAgIiAgUGF0aDogJyR7VEVTVF9FWEVDVVRBQkxFfSciCitmdW5jdGlvbihndGVzdF9kaXNjb3Zlcl90ZXN0c19pbXBsKQorCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cygKKyAgICAiIgorICAgICIiCisgICAgIk5PX1BSRVRUWV9UWVBFUztOT19QUkVUVFlfVkFMVUVTO1RFU1RfRVhFQ1VUQUJMRTtURVNUX0VYRUNVVE9SO1RFU1RfV09SS0lOR19ESVI7VEVTVF9QUkVGSVg7VEVTVF9TVUZGSVg7VEVTVF9MSVNUO0NURVNUX0ZJTEU7VEVTVF9ESVNDT1ZFUllfVElNRU9VVDtURVNUX1hNTF9PVVRQVVRfRElSIgorICAgICJURVNUX0VYVFJBX0FSR1M7VEVTVF9QUk9QRVJUSUVTIgorICAgICR7QVJHTn0KICAgKQotZW5kaWYoKQotZXhlY3V0ZV9wcm9jZXNzKAotICBDT01NQU5EICR7VEVTVF9FWEVDVVRPUn0gIiR7VEVTVF9FWEVDVVRBQkxFfSIgLS1ndGVzdF9saXN0X3Rlc3RzCi0gIFdPUktJTkdfRElSRUNUT1JZICIke1RFU1RfV09SS0lOR19ESVJ9IgotICBUSU1FT1VUICR7VEVTVF9ESVNDT1ZFUllfVElNRU9VVH0KLSAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAotICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0Ci0pCi1pZihOT1QgJHtyZXN1bHR9IEVRVUFMIDApCi0gIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAgICIgb3V0cHV0ICIke291dHB1dH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SCi0gICAgIkVycm9yIHJ1bm5pbmcgdGVzdCBleGVjdXRhYmxlLlxuIgotICAgICIgIFBhdGg6ICcke1RFU1RfRVhFQ1VUQUJMRX0nXG4iCi0gICAgIiAgUmVzdWx0OiAke3Jlc3VsdH1cbiIKLSAgICAiICBPdXRwdXQ6XG4iCi0gICAgIiAgICAke291dHB1dH1cbiIKKworICBzZXQocHJlZml4ICIke19URVNUX1BSRUZJWH0iKQorICBzZXQoc3VmZml4ICIke19URVNUX1NVRkZJWH0iKQorICBzZXQoZXh0cmFfYXJncyAke19URVNUX0VYVFJBX0FSR1N9KQorICBzZXQocHJvcGVydGllcyAke19URVNUX1BST1BFUlRJRVN9KQorICBzZXQoc2NyaXB0KQorICBzZXQoc3VpdGUpCisgIHNldCh0ZXN0cykKKyAgc2V0KHRlc3RzX2J1ZmZlcikKKworICAjIFJ1biB0ZXN0IGV4ZWN1dGFibGUgdG8gZ2V0IGxpc3Qgb2YgYXZhaWxhYmxlIHRlc3RzCisgIGlmKE5PVCBFWElTVFMgIiR7X1RFU1RfRVhFQ1VUQUJMRX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJTcGVjaWZpZWQgdGVzdCBleGVjdXRhYmxlIGRvZXMgbm90IGV4aXN0LlxuIgorICAgICAgIiAgUGF0aDogJyR7X1RFU1RfRVhFQ1VUQUJMRX0nIgorICAgICkKKyAgZW5kaWYoKQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAke19URVNUX0VYRUNVVE9SfSAiJHtfVEVTVF9FWEVDVVRBQkxFfSIgLS1ndGVzdF9saXN0X3Rlc3RzCisgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7X1RFU1RfV09SS0lOR19ESVJ9IgorICAgIFRJTUVPVVQgJHtfVEVTVF9ESVNDT1ZFUllfVElNRU9VVH0KKyAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0CisgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAogICApCi1lbmRpZigpCisgIGlmKE5PVCAke3Jlc3VsdH0gRVFVQUwgMCkKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgICAiIG91dHB1dCAiJHtvdXRwdXR9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiRXJyb3IgcnVubmluZyB0ZXN0IGV4ZWN1dGFibGUuXG4iCisgICAgICAiICBQYXRoOiAnJHtfVEVTVF9FWEVDVVRBQkxFfSdcbiIKKyAgICAgICIgIFJlc3VsdDogJHtyZXN1bHR9XG4iCisgICAgICAiICBPdXRwdXQ6XG4iCisgICAgICAiICAgICR7b3V0cHV0fVxuIgorICAgICkKKyAgZW5kaWYoKQogCi1zdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXRwdXQgIiR7b3V0cHV0fSIpCisgIHN0cmluZyhSRVBMQUNFICJcbiIgIjsiIG91dHB1dCAiJHtvdXRwdXR9IikKIAotIyBQYXJzZSBvdXRwdXQKLWZvcmVhY2gobGluZSAke291dHB1dH0pCi0gICMgU2tpcCBoZWFkZXIKLSAgaWYoTk9UIGxpbmUgTUFUQ0hFUyAiZ3Rlc3RfbWFpblxcLmNjIikKLSAgICAjIERvIHdlIGhhdmUgYSBtb2R1bGUgbmFtZSBvciBhIHRlc3QgbmFtZT8KLSAgICBpZihOT1QgbGluZSBNQVRDSEVTICJeICAiKQotICAgICAgIyBNb2R1bGU7IHJlbW92ZSB0cmFpbGluZyAnLicgdG8gZ2V0IGp1c3QgdGhlIG5hbWUuLi4KLSAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXC4oICojLiopPyIgIiIgc3VpdGUgIiR7bGluZX0iKQotICAgICAgaWYobGluZSBNQVRDSEVTICIjIiBBTkQgTk9UIE5PX1BSRVRUWV9UWVBFUykKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi9bMC05XVxcLisgKyMuKj0gKyIgIi8iIHByZXR0eV9zdWl0ZSAiJHtsaW5lfSIpCisgICMgUGFyc2Ugb3V0cHV0CisgIGZvcmVhY2gobGluZSAke291dHB1dH0pCisgICAgIyBTa2lwIGhlYWRlcgorICAgIGlmKE5PVCBsaW5lIE1BVENIRVMgImd0ZXN0X21haW5cXC5jYyIpCisgICAgICAjIERvIHdlIGhhdmUgYSBtb2R1bGUgbmFtZSBvciBhIHRlc3QgbmFtZT8KKyAgICAgIGlmKE5PVCBsaW5lIE1BVENIRVMgIl4gICIpCisgICAgICAgICMgTW9kdWxlOyByZW1vdmUgdHJhaWxpbmcgJy4nIHRvIGdldCBqdXN0IHRoZSBuYW1lLi4uCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXC4oICojLiopPyIgIiIgc3VpdGUgIiR7bGluZX0iKQorICAgICAgICBpZihsaW5lIE1BVENIRVMgIiMiIEFORCBOT1QgX05PX1BSRVRUWV9UWVBFUykKKyAgICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL1swLTldXFwuKyArIy4qPSArIiAiLyIgcHJldHR5X3N1aXRlICIke2xpbmV9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KHByZXR0eV9zdWl0ZSAiJHtzdWl0ZX0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeRElTQUJMRURfIiAiIiBwcmV0dHlfc3VpdGUgIiR7cHJldHR5X3N1aXRlfSIpCiAgICAgICBlbHNlKCkKLSAgICAgICAgc2V0KHByZXR0eV9zdWl0ZSAiJHtzdWl0ZX0iKQotICAgICAgZW5kaWYoKQotICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5ESVNBQkxFRF8iICIiIHByZXR0eV9zdWl0ZSAiJHtwcmV0dHlfc3VpdGV9IikKLSAgICBlbHNlKCkKLSAgICAgICMgVGVzdCBuYW1lOyBzdHJpcCBzcGFjZXMgYW5kIGNvbW1lbnRzIHRvIGdldCBqdXN0IHRoZSBuYW1lLi4uCi0gICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiICsiICIiIHRlc3QgIiR7bGluZX0iKQotICAgICAgaWYodGVzdCBNQVRDSEVTICIjIiBBTkQgTk9UIE5PX1BSRVRUWV9WQUxVRVMpCi0gICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvWzAtOV0rI0dldFBhcmFtLi49IiAiLyIgcHJldHR5X3Rlc3QgIiR7dGVzdH0iKQotICAgICAgZWxzZSgpCi0gICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIjLioiICIiIHByZXR0eV90ZXN0ICIke3Rlc3R9IikKLSAgICAgIGVuZGlmKCkKLSAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeRElTQUJMRURfIiAiIiBwcmV0dHlfdGVzdCAiJHtwcmV0dHlfdGVzdH0iKQotICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiMuKiIgIiIgdGVzdCAiJHt0ZXN0fSIpCi0gICAgICAjIC4uLmFuZCBhZGQgdG8gc2NyaXB0Ci0gICAgICBhZGRfY29tbWFuZChhZGRfdGVzdAotICAgICAgICAiJHtwcmVmaXh9JHtwcmV0dHlfc3VpdGV9LiR7cHJldHR5X3Rlc3R9JHtzdWZmaXh9IgotICAgICAgICAke1RFU1RfRVhFQ1VUT1J9Ci0gICAgICAgICIke1RFU1RfRVhFQ1VUQUJMRX0iCi0gICAgICAgICItLWd0ZXN0X2ZpbHRlcj0ke3N1aXRlfS4ke3Rlc3R9IgotICAgICAgICAiLS1ndGVzdF9hbHNvX3J1bl9kaXNhYmxlZF90ZXN0cyIKLSAgICAgICAgJHtleHRyYV9hcmdzfQotICAgICAgKQotICAgICAgaWYoc3VpdGUgTUFUQ0hFUyAiXkRJU0FCTEVEIiBPUiB0ZXN0IE1BVENIRVMgIl5ESVNBQkxFRCIpCisgICAgICAgICMgVGVzdCBuYW1lOyBzdHJpcCBzcGFjZXMgYW5kIGNvbW1lbnRzIHRvIGdldCBqdXN0IHRoZSBuYW1lLi4uCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIgKyIgIiIgdGVzdCAiJHtsaW5lfSIpCisgICAgICAgIGlmKHRlc3QgTUFUQ0hFUyAiIyIgQU5EIE5PVCBfTk9fUFJFVFRZX1ZBTFVFUykKKyAgICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL1swLTldKyNHZXRQYXJhbS4uPSIgIi8iIHByZXR0eV90ZXN0ICIke3Rlc3R9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiMuKiIgIiIgcHJldHR5X3Rlc3QgIiR7dGVzdH0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeRElTQUJMRURfIiAiIiBwcmV0dHlfdGVzdCAiJHtwcmV0dHlfdGVzdH0iKQorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiIy4qIiAiIiB0ZXN0ICIke3Rlc3R9IikKKyAgICAgICAgaWYoTk9UICIke19URVNUX1hNTF9PVVRQVVRfRElSfSIgU1RSRVFVQUwgIiIpCisgICAgICAgICAgc2V0KFRFU1RfWE1MX09VVFBVVF9QQVJBTSAiLS1ndGVzdF9vdXRwdXQ9eG1sOiR7X1RFU1RfWE1MX09VVFBVVF9ESVJ9LyR7cHJlZml4fSR7cHJldHR5X3N1aXRlfS4ke3ByZXR0eV90ZXN0fSR7c3VmZml4fS54bWwiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICB1bnNldChURVNUX1hNTF9PVVRQVVRfUEFSQU0pCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgIyAuLi5hbmQgYWRkIHRvIHNjcmlwdAorICAgICAgICBhZGRfY29tbWFuZChhZGRfdGVzdAorICAgICAgICAgICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iCisgICAgICAgICAgJHtfVEVTVF9FWEVDVVRPUn0KKyAgICAgICAgICAiJHtfVEVTVF9FWEVDVVRBQkxFfSIKKyAgICAgICAgICAiLS1ndGVzdF9maWx0ZXI9JHtzdWl0ZX0uJHt0ZXN0fSIKKyAgICAgICAgICAiLS1ndGVzdF9hbHNvX3J1bl9kaXNhYmxlZF90ZXN0cyIKKyAgICAgICAgICAke1RFU1RfWE1MX09VVFBVVF9QQVJBTX0KKyAgICAgICAgICAke2V4dHJhX2FyZ3N9CisgICAgICAgICkKKyAgICAgICAgaWYoc3VpdGUgTUFUQ0hFUyAiXkRJU0FCTEVEIiBPUiB0ZXN0IE1BVENIRVMgIl5ESVNBQkxFRCIpCisgICAgICAgICAgYWRkX2NvbW1hbmQoc2V0X3Rlc3RzX3Byb3BlcnRpZXMKKyAgICAgICAgICAgICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iCisgICAgICAgICAgICBQUk9QRVJUSUVTIERJU0FCTEVEIFRSVUUKKyAgICAgICAgICApCisgICAgICAgIGVuZGlmKCkKICAgICAgICAgYWRkX2NvbW1hbmQoc2V0X3Rlc3RzX3Byb3BlcnRpZXMKICAgICAgICAgICAiJHtwcmVmaXh9JHtwcmV0dHlfc3VpdGV9LiR7cHJldHR5X3Rlc3R9JHtzdWZmaXh9IgotICAgICAgICAgIFBST1BFUlRJRVMgRElTQUJMRUQgVFJVRQorICAgICAgICAgIFBST1BFUlRJRVMKKyAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtfVEVTVF9XT1JLSU5HX0RJUn0iCisgICAgICAgICAgJHtwcm9wZXJ0aWVzfQogICAgICAgICApCisgICAgICAgIGxpc3QoQVBQRU5EIHRlc3RzX2J1ZmZlciAiJHtwcmVmaXh9JHtwcmV0dHlfc3VpdGV9LiR7cHJldHR5X3Rlc3R9JHtzdWZmaXh9IikKKyAgICAgICAgbGlzdChMRU5HVEggdGVzdHNfYnVmZmVyIHRlc3RzX2J1ZmZlcl9sZW5ndGgpCisgICAgICAgIGlmKCR7dGVzdHNfYnVmZmVyX2xlbmd0aH0gR1JFQVRFUiAiMjUwIikKKyAgICAgICAgICBmbHVzaF90ZXN0c19idWZmZXIoKQorICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCi0gICAgICBhZGRfY29tbWFuZChzZXRfdGVzdHNfcHJvcGVydGllcwotICAgICAgICAiJHtwcmVmaXh9JHtwcmV0dHlfc3VpdGV9LiR7cHJldHR5X3Rlc3R9JHtzdWZmaXh9IgotICAgICAgICBQUk9QRVJUSUVTCi0gICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke1RFU1RfV09SS0lOR19ESVJ9IgotICAgICAgICAke3Byb3BlcnRpZXN9Ci0gICAgICApCi0gICAgIGxpc3QoQVBQRU5EIHRlc3RzICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iKQogICAgIGVuZGlmKCkKLSAgZW5kaWYoKQotZW5kZm9yZWFjaCgpCisgIGVuZGZvcmVhY2goKQogCi0jIENyZWF0ZSBhIGxpc3Qgb2YgYWxsIGRpc2NvdmVyZWQgdGVzdHMsIHdoaWNoIHVzZXJzIG1heSB1c2UgdG8gZS5nLiBzZXQKLSMgcHJvcGVydGllcyBvbiB0aGUgdGVzdHMKLWFkZF9jb21tYW5kKHNldCAke1RFU1RfTElTVH0gJHt0ZXN0c30pCiAKLSMgV3JpdGUgQ1Rlc3Qgc2NyaXB0Ci1maWxlKFdSSVRFICIke0NURVNUX0ZJTEV9IiAiJHtzY3JpcHR9IikKKyAgIyBDcmVhdGUgYSBsaXN0IG9mIGFsbCBkaXNjb3ZlcmVkIHRlc3RzLCB3aGljaCB1c2VycyBtYXkgdXNlIHRvIGUuZy4gc2V0CisgICMgcHJvcGVydGllcyBvbiB0aGUgdGVzdHMKKyAgZmx1c2hfdGVzdHNfYnVmZmVyKCkKKyAgYWRkX2NvbW1hbmQoc2V0ICR7X1RFU1RfTElTVH0gJHt0ZXN0c30pCisKKyAgIyBXcml0ZSBDVGVzdCBzY3JpcHQKKyAgZmx1c2hfc2NyaXB0KCkKKworZW5kZnVuY3Rpb24oKQorCitpZihDTUFLRV9TQ1JJUFRfTU9ERV9GSUxFKQorICBndGVzdF9kaXNjb3Zlcl90ZXN0c19pbXBsKAorICAgIE5PX1BSRVRUWV9UWVBFUyAke05PX1BSRVRUWV9UWVBFU30KKyAgICBOT19QUkVUVFlfVkFMVUVTICR7Tk9fUFJFVFRZX1ZBTFVFU30KKyAgICBURVNUX0VYRUNVVEFCTEUgJHtURVNUX0VYRUNVVEFCTEV9CisgICAgVEVTVF9FWEVDVVRPUiAke1RFU1RfRVhFQ1VUT1J9CisgICAgVEVTVF9XT1JLSU5HX0RJUiAke1RFU1RfV09SS0lOR19ESVJ9CisgICAgVEVTVF9QUkVGSVggJHtURVNUX1BSRUZJWH0KKyAgICBURVNUX1NVRkZJWCAke1RFU1RfU1VGRklYfQorICAgIFRFU1RfTElTVCAke1RFU1RfTElTVH0KKyAgICBDVEVTVF9GSUxFICR7Q1RFU1RfRklMRX0KKyAgICBURVNUX0RJU0NPVkVSWV9USU1FT1VUICR7VEVTVF9ESVNDT1ZFUllfVElNRU9VVH0KKyAgICBURVNUX1hNTF9PVVRQVVRfRElSICR7VEVTVF9YTUxfT1VUUFVUX0RJUn0KKyAgICBURVNUX0VYVFJBX0FSR1MgJHtURVNUX0VYVFJBX0FSR1N9CisgICAgVEVTVF9QUk9QRVJUSUVTICR7VEVTVF9QUk9QRVJUSUVTfQorICApCitlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrRGViLmNtYWtlIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja0RlYi5jbWFrZQppbmRleCA5NzkwNmNhLi4xNGJiMTA0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrRGViLmNtYWtlCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tEZWIuY21ha2UKQEAgLTU1NCw4ICs1NTQsOCBAQAogICApCiAKICAgIyBIb21lcGFnZTogKG9wdGlvbmFsKQotICBpZihOT1QgQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfSE9NRVBBR0UgQU5EIENNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMKQotICAgIHNldChDUEFDS19ERUJJQU5fUEFDS0FHRV9IT01FUEFHRSAiJHtDTUFLRV9QUk9KRUNUX0hPTUVQQUdFX1VSTH0iKQorICBpZihOT1QgQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfSE9NRVBBR0UgQU5EIENQQUNLX1BBQ0tBR0VfSE9NRVBBR0VfVVJMKQorICAgIHNldChDUEFDS19ERUJJQU5fUEFDS0FHRV9IT01FUEFHRSAiJHtDUEFDS19QQUNLQUdFX0hPTUVQQUdFX1VSTH0iKQogICBlbmRpZigpCiAKICAgIyBTZWN0aW9uOiAocmVjb21tZW5kZWQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrRnJlZUJTRC5jbWFrZSBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tGcmVlQlNELmNtYWtlCmluZGV4IDE2ZjkwNmMuLmFlNDA1MzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tGcmVlQlNELmNtYWtlCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tGcmVlQlNELmNtYWtlCkBAIC02OCw3ICs2OCw3IEBACiAjIFRoZXJlJ3MgcmVhbGx5IG9ubHkgb25lIGhvbWVwYWdlIGZvciBhIHByb2plY3QsIHNvCiAjIHJlLXVzZSB0aGUgRGViaWFuIHNldHRpbmcgaWYgaXQncyB0aGVyZS4KIF9jcGFja19mcmVlYnNkX2ZhbGxiYWNrX3ZhcigiQ1BBQ0tfRlJFRUJTRF9QQUNLQUdFX1dXVyIKLSAgICAiQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwiCisgICAgIkNQQUNLX1BBQ0tBR0VfSE9NRVBBR0VfVVJMIgogICAgICJDUEFDS19ERUJJQU5fUEFDS0FHRV9IT01FUEFHRSIKICAgICAiX2NwYWNrX2ZyZWVic2RfZmFsbGJhY2tfd3d3IgogICAgICkKZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tOdUdldC5jbWFrZSBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tOdUdldC5jbWFrZQppbmRleCA4MjA1M2IyLi4yMGVlZDJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrTnVHZXQuY21ha2UKKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja051R2V0LmNtYWtlCkBAIC0yMzAsMzEgKzIzMCwyMiBAQAogICAgIGZvcmVhY2goX2RlcCBJTiBMSVNUUyBfZGVwcykKICAgICAgICAgX2NwYWNrX251Z2V0X2RlYnVnKCIgIGNoZWNraW5nIGRlcGVuZGVuY3kgYCR7X2RlcH1gIikKIAotICAgICAgICBzdHJpbmcoTUFLRV9DX0lERU5USUZJRVIgIiR7X2RlcH0iIF9kZXBfaWQpCi0KLSAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcF9pZH1fVkVSU0lPTikKKyAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcH1fVkVSU0lPTikKIAogICAgICAgICBpZihOT1QgX3ZlcikKLSAgICAgICAgICAgIHN0cmluZyhUT1VQUEVSICIke19kZXBfaWR9IiBfZGVwX2lkKQotICAgICAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcF9pZH1fVkVSU0lPTikKKyAgICAgICAgICAgIHN0cmluZyhUT1VQUEVSICIke19kZXB9IiBfZGVwX3VwcGVyKQorICAgICAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcF91cHBlcn1fVkVSU0lPTikKICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgIGlmKF92ZXIpCiAgICAgICAgICAgICBfY3BhY2tfbnVnZXRfZGVidWcoIiAgZ290IGAke19kZXB9YCBkZXBlbmRlbmN5IHZlcnNpb24gJHtfdmVyfSIpCi0gICAgICAgICAgICBsaXN0KEFQUEVORCBfY29sbGVjdGVkX2RlcHMgIjxkZXBlbmRlbmN5IGlkPVwiJHtfZGVwfVwiIHZlcnNpb249XCIke192ZXJ9XCIgLz4iKQorICAgICAgICAgICAgc3RyaW5nKENPTkNBVCBfY29sbGVjdGVkX2RlcHMgIiR7X2NvbGxlY3RlZF9kZXBzfSIgIiAgICAgICAgICAgIDxkZXBlbmRlbmN5IGlkPVwiJHtfZGVwfVwiIHZlcnNpb249XCIke192ZXJ9XCIgLz5cbiIpCiAgICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKIAogICAgICMgUmVuZGVyIGRlcHMgaW50byB0aGUgdmFyaWFibGUKICAgICBpZihfY29sbGVjdGVkX2RlcHMpCi0gICAgICAgIHNldChfQ1BBQ0tfTlVHRVRfREVQRU5ERU5DSUVTX1RBRyAiPGRlcGVuZGVuY2llcz5cbiIpCi0gICAgICAgIGZvcmVhY2goX2xpbmUgSU4gTElTVFMgX2NvbGxlY3RlZF9kZXBzKQotICAgICAgICAgICAgc3RyaW5nKAotICAgICAgICAgICAgICAgIEFQUEVORCBfQ1BBQ0tfTlVHRVRfREVQRU5ERU5DSUVTX1RBRwotICAgICAgICAgICAgICAgICIgICAgICAgICAgICAke19saW5lfVxuIgotICAgICAgICAgICAgICApCi0gICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBzdHJpbmcoQVBQRU5EIF9DUEFDS19OVUdFVF9ERVBFTkRFTkNJRVNfVEFHICIgICAgICAgIDwvZGVwZW5kZW5jaWVzPiIpCisgICAgICAgIHN0cmluZyhDT05DQVQgX0NQQUNLX05VR0VUX0RFUEVOREVOQ0lFU19UQUcgIjxkZXBlbmRlbmNpZXM+XG4iICIke19jb2xsZWN0ZWRfZGVwc30iICIgICAgICAgIDwvZGVwZW5kZW5jaWVzPiIpCiAgICAgZW5kaWYoKQogCiAgICAgIyBSZW5kZXIgdGhlIHNwZWMgZmlsZQpAQCAtMjk2LDcgKzI4NywxMSBAQAogICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgICAgQ09NTUFORCAiJHtOVUdFVF9FWEVDVVRBQkxFfSIgcGFjayAke0NQQUNLX05VR0VUX1BBQ0tfQURESVRJT05BTF9PUFRJT05TfQogICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfSIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9udWdldF9yZXN1bHQKICAgICAgICkKKyAgICBpZihOT1QgX251Z2V0X3Jlc3VsdCBFUVVBTCAwKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOdWdldCBwYWNrIGZhaWxlZCIpCisgICAgZW5kaWYoKQogCiBlbHNlaWYoQ1BBQ0tfTlVHRVRfQUxMX0lOX09ORSkKICAgICAjIFRoaXMgdmFyaWFibGUgYENQQUNLX05VR0VUX0FMTF9JTl9PTkVgIHNldCBieSBDKysgY29kZToKQEAgLTMwOSw3ICszMDQsMTEgQEAKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICAgIENPTU1BTkQgIiR7TlVHRVRfRVhFQ1VUQUJMRX0iIHBhY2sgJHtDUEFDS19OVUdFVF9QQUNLX0FERElUSU9OQUxfT1BUSU9OU30KICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0iCisgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfbnVnZXRfcmVzdWx0CiAgICAgICApCisgICAgaWYoTk9UIF9udWdldF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTnVnZXQgcGFjayBmYWlsZWQiKQorICAgIGVuZGlmKCkKIAogZWxzZSgpCiAgICAgIyBJcyB0aGVyZSBhbnkgZ3JvdXBlZCBjb21wb25lbnQ/CkBAIC0zMzEsNyArMzMwLDExIEBACiAgICAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICAgICAgICAgICAgQ09NTUFORCAiJHtOVUdFVF9FWEVDVVRBQkxFfSIgcGFjayAke0NQQUNLX05VR0VUX1BBQ0tfQURESVRJT05BTF9PUFRJT05TfQogICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke0NQQUNLX1RFTVBPUkFSWV9ESVJFQ1RPUll9IgorICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfbnVnZXRfcmVzdWx0CiAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmKE5PVCBfbnVnZXRfcmVzdWx0IEVRVUFMIDApCisgICAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTnVnZXQgcGFjayBmYWlsZWQiKQorICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRmb3JlYWNoKCkKICAgICBlbmRpZigpCiAgICAgIyBJcyB0aGVyZSBhbnkgc2luZ2xlIGNvbXBvbmVudCBwYWNrYWdlIG5lZWRlZD8KQEAgLTM1MCw3ICszNTMsMTEgQEAKICAgICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgICAgICAgICAgICBDT01NQU5EICIke05VR0VUX0VYRUNVVEFCTEV9IiBwYWNrICR7Q1BBQ0tfTlVHRVRfUEFDS19BRERJVElPTkFMX09QVElPTlN9CiAgICAgICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0iCisgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9udWdldF9yZXN1bHQKICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgaWYoTk9UIF9udWdldF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOdWdldCBwYWNrIGZhaWxlZCIpCisgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgIGVuZGZvcmVhY2goKQogICAgIGVuZGlmKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tSUE0uY21ha2UgYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrUlBNLmNtYWtlCmluZGV4IGZmYjI0ZTIuLjA4YmJjNjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tSUE0uY21ha2UKKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja1JQTS5jbWFrZQpAQCAtODQ0LDggKzg0NCw4IEBACiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKLSAgaWYoTk9UIENQQUNLX1JQTV9QQUNLQUdFX1VSTCBBTkQgQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwpCi0gICAgc2V0KENQQUNLX1JQTV9QQUNLQUdFX1VSTCAiJHtDTUFLRV9QUk9KRUNUX0hPTUVQQUdFX1VSTH0iKQorICBpZihOT1QgQ1BBQ0tfUlBNX1BBQ0tBR0VfVVJMIEFORCBDUEFDS19QQUNLQUdFX0hPTUVQQUdFX1VSTCkKKyAgICBzZXQoQ1BBQ0tfUlBNX1BBQ0tBR0VfVVJMICIke0NQQUNLX1BBQ0tBR0VfSE9NRVBBR0VfVVJMfSIpCiAgIGVuZGlmKCkKIAogICAjIENQQUNLX1JQTV9QQUNLQUdFX05BTUUgKG1hbmRhdG9yeSkKQEAgLTEwOTksMTYgKzEwOTksMTggQEAKIAogICAjIENQQUNLX1JQTV9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEUpCiAgICMgQ1BBQ0tfUlBNX1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFIChvciBDUEFDS19SUE1fPENPTVBPTkVOVD5fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEUpCi0gICMgTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0ICh1bilpbnN0YWxsYXRpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCisgICMgQ1BBQ0tfUlBNX1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1RSQU5TX1NDUklQVF9GSUxFKQorICAjIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcG9zdCBpbnN0YWxsYXRpb24vdW5pbnN0YWxsYXRpb24vdHJhbnNhY3Rpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCiAgICMgVGhlIHJlZmVycmVkIHNjcmlwdCBmaWxlKHMpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKLSAgIyBwdXQgYWZ0ZXIgdGhlICVwb3N0IG9yICVwb3N0dW4gc2VjdGlvbgorICAjIHB1dCBhZnRlciB0aGUgJXBvc3Qgb3IgJXBvc3R1biBvciAlcG9zdHRyYW5zIHNlY3Rpb24KICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICMgQ1BBQ0tfUlBNX1BSRV9JTlNUQUxMX1NDUklQVF9GSUxFIChvciBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX0lOU1RBTExfU0NSSVBUX0ZJTEUpCiAgICMgQ1BBQ0tfUlBNX1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfVU5JTlNUQUxMX1NDUklQVF9GSUxFKQotICAjIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcHJlICh1bilpbnN0YWxsYXRpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCisgICMgQ1BBQ0tfUlBNX1BSRV9UUkFOU19TQ1JJUFRfRklMRSAob3IgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9UUkFOU19TQ1JJUFRfRklMRSkKKyAgIyBNYXkgYmUgdXNlZCB0byBlbWJlZCBhIHByZSBpbnN0YWxsYXRpb24vdW5pbnN0YWxsYXRpb24vdHJhbnNhY3Rpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCiAgICMgVGhlIHJlZmVycmVkIHNjcmlwdCBmaWxlKHMpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKLSAgIyBwdXQgYWZ0ZXIgdGhlICVwcmUgb3IgJXByZXVuIHNlY3Rpb24KLSAgZm9yZWFjaChSUE1fU0NSSVBUX0ZJTEVfVFlQRV8gIklOU1RBTEwiICJVTklOU1RBTEwiKQorICAjIHB1dCBhZnRlciB0aGUgJXByZSBvciAlcHJldW4gb3IgJXByZXRyYW5zIHNlY3Rpb24KKyAgZm9yZWFjaChSUE1fU0NSSVBUX0ZJTEVfVFlQRV8gIklOU1RBTEwiICJVTklOU1RBTEwiICJUUkFOUyIpCiAgICAgZm9yZWFjaChSUE1fU0NSSVBUX0ZJTEVfVElNRV8gIlBSRSIgIlBPU1QiKQogICAgICAgc2V0KCJDUEFDS19SUE1fJHtSUE1fU0NSSVBUX0ZJTEVfVElNRV99XyR7UlBNX1NDUklQVF9GSUxFX1RZUEVffV9SRUFEX0ZJTEUiCiAgICAgICAgICIke0NQQUNLX1JQTV8ke1JQTV9TQ1JJUFRfRklMRV9USU1FX31fJHtSUE1fU0NSSVBUX0ZJTEVfVFlQRV99X1NDUklQVF9GSUxFfSIpCkBAIC0xNzI3LDEyICsxNzI5LDE4IEBACiBcQFJQTV9TWU1MSU5LX1BPU1RJTlNUQUxMXEAKIFxAQ1BBQ0tfUlBNX1NQRUNfUE9TVElOU1RBTExcQAogCislcG9zdHRyYW5zCitcQENQQUNLX1JQTV9TUEVDX1BPU1RUUkFOU1xACisKICVwb3N0dW4KIFxAQ1BBQ0tfUlBNX1NQRUNfUE9TVFVOSU5TVEFMTFxACiAKICVwcmUKIFxAQ1BBQ0tfUlBNX1NQRUNfUFJFSU5TVEFMTFxACiAKKyVwcmV0cmFucworXEBDUEFDS19SUE1fU1BFQ19QUkVUUkFOU1xACisKICVwcmV1bgogXEBDUEFDS19SUE1fU1BFQ19QUkVVTklOU1RBTExcQAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL05TSVMudGVtcGxhdGUuaW4gYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL05TSVMudGVtcGxhdGUuaW4KaW5kZXggZjc1YWU3OC4uNjYwYmZhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9OU0lTLnRlbXBsYXRlLmluCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svTlNJUy50ZW1wbGF0ZS5pbgpAQCAtNTI0LDE0ICs1MjQsNiBAQAogIWVuZGlmCiAKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotOyBJbnN0YWxsYXRpb24gdHlwZXMKLUBDUEFDS19OU0lTX0lOU1RBTExBVElPTl9UWVBFU0AKLQotOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi07IENvbXBvbmVudCBzZWN0aW9ucwotQENQQUNLX05TSVNfQ09NUE9ORU5UX1NFQ1RJT05TQAotCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsgRGVmaW5lIHNvbWUgbWFjcm8gc2V0dGluZyBmb3IgdGhlIGd1aQogQENQQUNLX05TSVNfSU5TVEFMTEVSX01VSV9JQ09OX0NPREVACiBAQ1BBQ0tfTlNJU19JTlNUQUxMRVJfSUNPTl9DT0RFQApAQCAtNTQyLDYgKzUzNCw4IEBACiAKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogO1BhZ2VzCisgIEBDUEFDS19OU0lTX0lOU1RBTExFUl9XRUxDT01FX1RJVExFX0NPREVACisgIEBDUEFDS19OU0lTX0lOU1RBTExFUl9XRUxDT01FX1RJVExFXzNMSU5FU19DT0RFQAogICAhaW5zZXJ0bWFjcm8gTVVJX1BBR0VfV0VMQ09NRQogCiAgICFpbnNlcnRtYWNybyBNVUlfUEFHRV9MSUNFTlNFICJAQ1BBQ0tfUkVTT1VSQ0VfRklMRV9MSUNFTlNFQCIKQEAgLTU1Nyw2ICs1NTEsOCBAQAogICBAQ1BBQ0tfTlNJU19QQUdFX0NPTVBPTkVOVFNACiAKICAgIWluc2VydG1hY3JvIE1VSV9QQUdFX0lOU1RGSUxFUworICBAQ1BBQ0tfTlNJU19JTlNUQUxMRVJfRklOSVNIX1RJVExFX0NPREVACisgIEBDUEFDS19OU0lTX0lOU1RBTExFUl9GSU5JU0hfVElUTEVfM0xJTkVTX0NPREVACiAgICFpbnNlcnRtYWNybyBNVUlfUEFHRV9GSU5JU0gKIAogICAhaW5zZXJ0bWFjcm8gTVVJX1VOUEFHRV9DT05GSVJNCkBAIC02MTcsNyArNjEzLDYgQEAKICAgIWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiVWtyYWluaWFuIgogICAhaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJXZWxzaCIKIAotCiA7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDtSZXNlcnZlIEZpbGVzCiAKQEAgLTYyOCw2ICs2MjMsMTcgQEAKICAgUmVzZXJ2ZUZpbGUgIk5TSVMuSW5zdGFsbE9wdGlvbnMuaW5pIgogICAhaW5zZXJ0bWFjcm8gTVVJX1JFU0VSVkVGSUxFX0lOU1RBTExPUFRJT05TCiAKKyAgOyBmb3IgVXNlckluZm86OkdldE5hbWUgYW5kIFVzZXJJbmZvOjpHZXRBY2NvdW50VHlwZQorICBSZXNlcnZlRmlsZSAvcGx1Z2luICdVc2VySW5mby5kbGwnCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBJbnN0YWxsYXRpb24gdHlwZXMKK0BDUEFDS19OU0lTX0lOU1RBTExBVElPTl9UWVBFU0AKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IENvbXBvbmVudCBzZWN0aW9ucworQENQQUNLX05TSVNfQ09NUE9ORU5UX1NFQ1RJT05TQAorCiA7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDtJbnN0YWxsZXIgU2VjdGlvbnMKIApAQCAtNjQyLDcgKzY0OCw3IEBACiAgIFdyaXRlUmVnU3RyIFNIQ1RYICJTb2Z0d2FyZVxAQ1BBQ0tfUEFDS0FHRV9WRU5ET1JAXEBDUEFDS19QQUNLQUdFX0lOU1RBTExfUkVHSVNUUllfS0VZQCIgIiIgJElOU1RESVIKIAogICA7Q3JlYXRlIHVuaW5zdGFsbGVyCi0gIFdyaXRlVW5pbnN0YWxsZXIgIiRJTlNURElSXFVuaW5zdGFsbC5leGUiCisgIFdyaXRlVW5pbnN0YWxsZXIgIiRJTlNURElSXEBDUEFDS19OU0lTX1VOSU5TVEFMTF9OQU1FQC5leGUiCiAgIFB1c2ggIkRpc3BsYXlOYW1lIgogICBQdXNoICJAQ1BBQ0tfTlNJU19ESVNQTEFZX05BTUVAIgogICBDYWxsIENvbmRpdGlvbmFsQWRkVG9SZWdpc3R5CkBAIC02NTMsNyArNjU5LDcgQEAKICAgUHVzaCAiQENQQUNLX1BBQ0tBR0VfVkVORE9SQCIKICAgQ2FsbCBDb25kaXRpb25hbEFkZFRvUmVnaXN0eQogICBQdXNoICJVbmluc3RhbGxTdHJpbmciCi0gIFB1c2ggIiRJTlNURElSXFVuaW5zdGFsbC5leGUiCisgIFB1c2ggIiRJTlNURElSXEBDUEFDS19OU0lTX1VOSU5TVEFMTF9OQU1FQC5leGUiCiAgIENhbGwgQ29uZGl0aW9uYWxBZGRUb1JlZ2lzdHkKICAgUHVzaCAiTm9SZXBhaXIiCiAgIFB1c2ggIjEiCkBAIC02OTAsNyArNjk2LDcgQEAKICAgQ3JlYXRlRGlyZWN0b3J5ICIkU01QUk9HUkFNU1wkU1RBUlRNRU5VX0ZPTERFUiIKIEBDUEFDS19OU0lTX0NSRUFURV9JQ09OU0AKIEBDUEFDS19OU0lTX0NSRUFURV9JQ09OU19FWFRSQUAKLSAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRTVEFSVE1FTlVfRk9MREVSXFVuaW5zdGFsbC5sbmsiICIkSU5TVERJUlxVbmluc3RhbGwuZXhlIgorICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJFNUQVJUTUVOVV9GT0xERVJcVW5pbnN0YWxsLmxuayIgIiRJTlNURElSXEBDUEFDS19OU0lTX1VOSU5TVEFMTF9OQU1FQC5leGUiCiAKICAgO1JlYWQgYSB2YWx1ZSBmcm9tIGFuIEluc3RhbGxPcHRpb25zIElOSSBmaWxlCiAgICFpbnNlcnRtYWNybyBNVUlfSU5TVEFMTE9QVElPTlNfUkVBRCAkRE9fTk9UX0FERF9UT19QQVRIICJOU0lTLkluc3RhbGxPcHRpb25zLmluaSIgIkZpZWxkIDIiICJTdGF0ZSIKQEAgLTgyOSw3ICs4MzUsNyBAQAogIWVuZGlmCiAKICAgO1JlbW92ZSB0aGUgdW5pbnN0YWxsZXIgaXRzZWxmLgotICBEZWxldGUgIiRJTlNURElSXFVuaW5zdGFsbC5leGUiCisgIERlbGV0ZSAiJElOU1RESVJcQENQQUNLX05TSVNfVU5JTlNUQUxMX05BTUVALmV4ZSIKICAgRGVsZXRlUmVnS2V5IFNIQ1RYICJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcQENQQUNLX1BBQ0tBR0VfSU5TVEFMTF9SRUdJU1RSWV9LRVlAIgogCiAgIDtSZW1vdmUgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0ZlYXR1cmVUZXN0aW5nLmNtYWtlIGIvTW9kdWxlcy9JbnRlcm5hbC9GZWF0dXJlVGVzdGluZy5jbWFrZQppbmRleCA3NWJlNDczLi43MmQ5NmIzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ludGVybmFsL0ZlYXR1cmVUZXN0aW5nLmNtYWtlCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvRmVhdHVyZVRlc3RpbmcuY21ha2UKQEAgLTg5LDYgKzg5LDE2IEBACiAgIHVuc2V0KGxhbmdfbGV2ZWxfaGFzX2ZlYXR1cmVzKQogZW5kbWFjcm8oKQogCittYWNybyhfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEgc3RkKQorICBsaXN0KEFQUEVORCBDTUFLRV9DVURBJHtzdGR9X0NPTVBJTEVfRkVBVFVSRVMgY3VkYV9zdGRfJHtzdGR9KQorCisgIGdldF9wcm9wZXJ0eShsYW5nX2xldmVsX2hhc19mZWF0dXJlcyBHTE9CQUwgUFJPUEVSVFkgQ01BS0VfQ1VEQSR7c3RkfV9LTk9XTl9GRUFUVVJFUykKKyAgaWYobGFuZ19sZXZlbF9oYXNfZmVhdHVyZXMpCisgICAgX3JlY29yZF9jb21waWxlcl9mZWF0dXJlcyhDVURBICIke0NNQUtFX0NVREEke3N0ZH1fU1RBTkRBUkRfQ09NUElMRV9PUFRJT059IiBDTUFLRV9DVURBJHtzdGR9X0NPTVBJTEVfRkVBVFVSRVMpCisgIGVuZGlmKCkKKyAgdW5zZXQobGFuZ19sZXZlbF9oYXNfZmVhdHVyZXMpCitlbmRtYWNybygpCisKIG1hY3JvKF9oYXNfY29tcGlsZXJfZmVhdHVyZXMgbGFuZyBsZXZlbCBjb21waWxlX2ZsYWdzIGZlYXR1cmVfbGlzdCkKICAgIyBwcmVzdW1lIGFsbCBrbm93biBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkCiAgIGdldF9wcm9wZXJ0eShrbm93bl9mZWF0dXJlcyBHTE9CQUwgUFJPUEVSVFkgQ01BS0VfJHtsYW5nfSR7bGV2ZWx9X0tOT1dOX0ZFQVRVUkVTKQpAQCAtMTAzLDMgKzExMyw3IEBACiAgIGxpc3QoQVBQRU5EIENNQUtFX0NYWCR7c3RkfV9DT01QSUxFX0ZFQVRVUkVTIGN4eF9zdGRfJHtzdGR9KQogICBfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzKENYWCAke3N0ZH0gIiR7Q01BS0VfQ1hYJHtzdGR9X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OfSIgQ01BS0VfQ1hYJHtzdGR9X0NPTVBJTEVfRkVBVFVSRVMpCiBlbmRtYWNybygpCittYWNybyhfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEgc3RkKQorICBsaXN0KEFQUEVORCBDTUFLRV9DVURBJHtzdGR9X0NPTVBJTEVfRkVBVFVSRVMgY3VkYV9zdGRfJHtzdGR9KQorICBfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzKENVREEgJHtzdGR9ICIke0NNQUtFX0NVREEke3N0ZH1fU1RBTkRBUkRfQ09NUElMRV9PUFRJT059IiBDTUFLRV9DVURBJHtzdGR9X0NPTVBJTEVfRkVBVFVSRVMpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC1HTlUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FJWC1HTlUuY21ha2UKaW5kZXggNjFkMjEzYS4uNWE1MzJjNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BSVgtR05VLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQUlYLUdOVS5jbWFrZQpAQCAtMjMsMTEgKzIzLDExIEBACiAgICMgQ29uc3RydWN0IHRoZSBleHBvcnQgbGlzdCBvdXJzZWx2ZXMgdG8gcGFzcyBvbmx5IHRoZSBvYmplY3QgZmlsZXMgc28KICAgIyB0aGF0IHdlIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGFjdHVhbGx5IHByb3ZpZGVkIGJ5IHRoZSBzb3VyY2VzLgogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKLSAgICAiXCIke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3RcIiAtbyA8T0JKRUNUX0RJUj4vb2JqZWN0cy5leHAgPE9CSkVDVFM+IgotICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPENNQUtFX1NIQVJFRF9MSUJSQVJZXyR7bGFuZ31fRkxBR1M+IC1XbCwtYkU6PE9CSkVDVF9ESVI+L29iamVjdHMuZXhwIDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV8ke2xhbmd9X0ZMQUdTPiA8U09OQU1FX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IgorICAgICJcIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdFwiIC1vIDxPQkpFQ1RfRElSPi9leHBvcnRzLmV4cCA8QUlYX0VYUE9SVFM+IDxPQkpFQ1RTPiIKKyAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiAtV2wsLWJFOjxPQkpFQ1RfRElSPi9leHBvcnRzLmV4cCA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gPFNPTkFNRV9GTEFHPjxUQVJHRVRfU09OQU1FPiAtbyA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIKICAgICApCiAKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFX1dJVEhfRVhQT1JUUwotICAgICJcIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdFwiIC1vIDxUQVJHRVRfSU1QTElCPiAtbCAuIDxPQkpFQ1RTPiIKKyAgICAiXCIke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3RcIiAtbyA8VEFSR0VUX0lNUExJQj4gLWwgLiA8QUlYX0VYUE9SVFM+IDxPQkpFQ1RTPiIKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gLVdsLC1iRTo8VEFSR0VUX0lNUExJQj4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQUlYLVhMLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BSVgtWEwuY21ha2UKaW5kZXggMmE2N2M0Zi4uMmE4YzE1OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BSVgtWEwuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BSVgtWEwuY21ha2UKQEAgLTI5LDEyICsyOSwxMiBAQAogICAjIENvbnN0cnVjdCB0aGUgZXhwb3J0IGxpc3Qgb3Vyc2VsdmVzIHRvIHBhc3Mgb25seSB0aGUgb2JqZWN0IGZpbGVzIHNvCiAgICMgdGhhdCB3ZSBleHBvcnQgb25seSB0aGUgc3ltYm9scyBhY3R1YWxseSBwcm92aWRlZCBieSB0aGUgc291cmNlcy4KICAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NIQVJFRF9MSUJSQVJZCi0gICAgIlwiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0XCIgLW8gPE9CSkVDVF9ESVI+L29iamVjdHMuZXhwJHtfT0JKRUNUU30iCi0gICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfJHtsYW5nfV9GTEFHUz4gLVdsLC1iRTo8T0JKRUNUX0RJUj4vb2JqZWN0cy5leHAgPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFXyR7bGFuZ31fRkxBR1M+IDxTT05BTUVfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRBUkdFVD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iCisgICAgIlwiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0XCIgLW8gPE9CSkVDVF9ESVI+L2V4cG9ydHMuZXhwIDxBSVhfRVhQT1JUUz4ke19PQkpFQ1RTfSIKKyAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiAtV2wsLWJFOjxPQkpFQ1RfRElSPi9leHBvcnRzLmV4cCA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gPFNPTkFNRV9GTEFHPjxUQVJHRVRfU09OQU1FPiAtbyA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIKICAgICApCiAKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFX1dJVEhfRVhQT1JUUwotICAgICJcIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdFwiIC1vIDxUQVJHRVRfSU1QTElCPiAtbCAuIDxPQkpFQ1RTPiIKKyAgICAiXCIke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3RcIiAtbyA8VEFSR0VUX0lNUExJQj4gLWwgLiA8QUlYX0VYUE9SVFM+IDxPQkpFQ1RTPiIKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gLVdsLC1iRTo8VEFSR0VUX0lNUExJQj4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIAogICB1bnNldChfT0JKRUNUUykKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3QgYi9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0CmluZGV4IDRmNjdlZjUuLjg5MWJjZTcgMTAwNzU1Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3QKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdApAQCAtNSw3ICs1LDcgQEAKICMgVGhpcyBzY3JpcHQgaXMgaW50ZXJuYWwgdG8gQ01ha2UgYW5kIG1lYW50IG9ubHkgdG8gYmUKICMgaW52b2tlZCBieSBDTWFrZS1nZW5lcmF0ZWQgYnVpbGQgc3lzdGVtcyBvbiBBSVguCiAKLXVzYWdlPSd1c2FnZTogRXhwb3J0SW1wb3J0TGlzdCAtbyA8b3V0LWZpbGU+IFstbCA8bGliPl0gWy0tXSA8b2JqZWN0cz4uLi4nCit1c2FnZT0ndXNhZ2U6IEV4cG9ydEltcG9ydExpc3QgLW8gPG91dC1maWxlPiBbLWwgPGxpYj5dIFstbl0gWy0tXSA8b2JqZWN0cz4uLi4nCiAKIGRpZSgpIHsKICAgICBlY2hvICIkQCIgMT4mMjsgZXhpdCAxCkBAIC0xNCwxMCArMTQsMTIgQEAKICMgUHJvY2VzcyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgogb3V0PScnCiBsaWI9JycKK25vX29iamVjdHM9JycKIHdoaWxlIHRlc3QgIiQjIiAhPSAwOyBkbwogICAgIGNhc2UgIiQxIiBpbgogICAgIC1sKSBzaGlmdDsgbGliPSIkMSIgOzsKICAgICAtbykgc2hpZnQ7IG91dD0iJDEiIDs7CisgICAgLW4pIG5vX29iamVjdHM9JzEnIDs7CiAgICAgLS0pIHNoaWZ0OyBicmVhayA7OwogICAgIC0qKSBkaWUgIiR1c2FnZSIgOzsKICAgICAqKSAgYnJlYWsgOzsKQEAgLTI2LDIzICsyOCwyOCBAQAogZG9uZQogdGVzdCAtbiAiJG91dCIgfHwgZGllICIkdXNhZ2UiCiAKLSMgQ29sbGVjdCBzeW1ib2xzIGV4cG9ydGVkIGZyb20gYWxsIG9iamVjdCBmaWxlcy4KKyMgQnVpbGQgYSB0ZW1wb3JhcnkgZmlsZSB0aGF0IGF0b21pY2FsbHkgcmVwbGFjZXMgdGhlIG91dHB1dCBsYXRlci4KIG91dF90bXA9IiRvdXQudG1wJCQiCiB0cmFwICdybSAtZiAiJG91dF90bXAiJyBFWElUIElOVCBURVJNCi1mb3IgZiBpbiAiJEAiOyBkbwotICAgIGR1bXAgLXRvdiAtWCAzMl82NCAiJGYiIHwKLSAgICBhd2sgJwotICAgICAgICBCRUdJTiB7Ci0gICAgICAgICAgICBWWyJFWFBPUlRFRCJdPSIgZXhwb3J0IgotICAgICAgICAgICAgVlsiUFJPVEVDVEVEIl09IiBwcm90ZWN0ZWQiCi0gICAgICAgIH0KLSAgICAgICAgL15cW1swLTldK1xdXHRtICtbXiBdKyArXC4odGV4dHxkYXRhfGJzcykgK1teIF0rICsoZXh0ZXJufHdlYWspICsoRVhQT1JURUR8UFJPVEVDVEVEfCApIC8gewotICAgICAgICAgICAgaWYgKCFtYXRjaCgkTkYsL14oXC58X19zaW5pdHxfX3N0ZXJtfF9fWzAtOV0rX18pLykpIHsKLSAgICAgICAgICAgICAgICBwcmludCAkTkYgVlskKE5GLTEpXQorPiAiJG91dF90bXAiCisKKyMgQ29sbGVjdCBzeW1ib2xzIGV4cG9ydGVkIGZyb20gYWxsIG9iamVjdCBmaWxlcy4KK2lmIHRlc3QgLXogIiRub19vYmplY3RzIjsgdGhlbgorICAgIGZvciBmIGluICIkQCI7IGRvCisgICAgICAgIGR1bXAgLXRvdiAtWCAzMl82NCAiJGYiIHwKKyAgICAgICAgYXdrICcKKyAgICAgICAgICAgIEJFR0lOIHsKKyAgICAgICAgICAgICAgICBWWyJFWFBPUlRFRCJdPSIgZXhwb3J0IgorICAgICAgICAgICAgICAgIFZbIlBST1RFQ1RFRCJdPSIgcHJvdGVjdGVkIgogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgJwotZG9uZSA+ICIkb3V0X3RtcCIKKyAgICAgICAgICAgIC9eXFtbMC05XStcXVx0bSArW14gXSsgK1wuKHRleHR8ZGF0YXxic3MpICtbXiBdKyArKGV4dGVybnx3ZWFrKSArKEVYUE9SVEVEfFBST1RFQ1RFRHwgKSAvIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCRORiwvXihcLnxfX3Npbml0fF9fc3Rlcm18X19bMC05XStfXykvKSkgeworICAgICAgICAgICAgICAgICAgICBwcmludCAkTkYgVlskKE5GLTEpXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgJworICAgIGRvbmUgPj4gIiRvdXRfdG1wIgorZmkKIAogIyBHZW5lcmF0ZSB0aGUgZXhwb3J0L2ltcG9ydCBmaWxlLgogewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNsYW5nLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNsYW5nLmNtYWtlCmluZGV4IDg0NzE3OGYuLjc1OTQ0OGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1DbGFuZy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ2xhbmcuY21ha2UKQEAgLTI0LDYgKzI0LDE0IEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKKyMgTmF0aXZlbHkgY29tcGlsaW5nIG9uIGFuIEFuZHJvaWQgaG9zdCBkb2Vzbid0IHVzZSB0aGUgTkRLIGNyb3NzLWNvbXBpbGF0aW9uCisjIHRvb2xzLgoraWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQW5kcm9pZCIpCisgIG1hY3JvKF9fYW5kcm9pZF9jb21waWxlcl9jbGFuZyBsYW5nKQorICBlbmRtYWNybygpCisgIHJldHVybigpCitlbmRpZigpCisKIGluY2x1ZGUoUGxhdGZvcm0vQW5kcm9pZC1Db21tb24pCiAKICMgVGhlIE5ESyB0b29sY2hhaW4gY29uZmlndXJhdGlvbiBmaWxlcyBhdDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1Db21tb24uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ29tbW9uLmNtYWtlCmluZGV4IDFhZmZjZDAuLjU4MWZkZTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1Db21tb24uY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNvbW1vbi5jbWFrZQpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgbWFjcm8oX19hbmRyb2lkX3N0bCBsYW5nKQogICAgICAgICAjIEZJWE1FOiBBZGQgYSB3YXkgdG8gYWRkIHByb2plY3Qtd2lkZSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlLW9ubHkgZmxhZ3MuCiAgICAgICAgIHNldChDTUFLRV9DWFhfQ09NUElMRV9PQkpFQ1QKLSAgICAgICAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4gLW5vc3RkaW5jKysiKQorICAgICAgICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IC1ub3N0ZGluYysrIikKICAgICAgICAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X1NUQU5EQVJEX0xJQlJBUklFUyAiIC1ub3N0ZGxpYisrIikKICAgICAgIGVuZG1hY3JvKCkKICAgICBlbHNlKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1EZXRlcm1pbmUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtRGV0ZXJtaW5lLmNtYWtlCmluZGV4IGU3YzFiNDguLjIyMjU4OTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1EZXRlcm1pbmUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLURldGVybWluZS5jbWFrZQpAQCAtMTgsNiArMTgsMTIgQEAKICAgcmV0dXJuKCkKIGVuZGlmKCkKIAorIyBOYXRpdmVseSBjb21waWxpbmcgb24gYW4gQW5kcm9pZCBob3N0IGRvZXNuJ3QgdXNlIHRoZSBOREsgY3Jvc3MtY29tcGlsYXRpb24KKyMgdG9vbHMuCitpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBbmRyb2lkIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKwogY21ha2VfcG9saWN5KFBVU0gpCiBjbWFrZV9wb2xpY3koU0VUIENNUDAwNTcgTkVXKSAjIGlmIElOX0xJU1QKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtSW5pdGlhbGl6ZS5jbWFrZQppbmRleCBhNWQyODIwLi5iOTBkZDdhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtSW5pdGlhbGl6ZS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtSW5pdGlhbGl6ZS5jbWFrZQpAQCAtMjQsNiArMjQsMTIgQEAKICAgcmV0dXJuKCkKIGVuZGlmKCkKIAorIyBOYXRpdmVseSBjb21waWxpbmcgb24gYW4gQW5kcm9pZCBob3N0IGRvZXNuJ3QgdXNlIHRoZSBOREsgY3Jvc3MtY29tcGlsYXRpb24KKyMgdG9vbHMuCitpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBbmRyb2lkIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKwogaWYoTk9UIENNQUtFX1NZU1JPT1QpCiAgIGlmKENNQUtFX0FORFJPSURfTkRLKQogICAgIHNldChDTUFLRV9TWVNST09UICIke0NNQUtFX0FORFJPSURfTkRLfS9wbGF0Zm9ybXMvYW5kcm9pZC0ke0NNQUtFX1NZU1RFTV9WRVJTSU9OfS9hcmNoLSR7Q01BS0VfQU5EUk9JRF9BUkNIfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQuY21ha2UKaW5kZXggZjA4Zjg0MS4uOGZmYTFiMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC5jbWFrZQpAQCAtMiw2ICsyLDExIEBACiAKIHNldChBTkRST0lEIDEpCiAKKyMgTmF0aXZlbHkgY29tcGlsaW5nIG9uIGFuIEFuZHJvaWQgaG9zdCBkb2Vzbid0IG5lZWQgdGhlc2UgZmxhZ3MgdG8gYmUgcmVzZXQuCitpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBbmRyb2lkIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKwogIyBDb252ZW50aW9uYWxseSBBbmRyb2lkIGRvZXMgbm90IHVzZSB2ZXJzaW9uZWQgc29uYW1lCiAjIEJ1dCBpbiBtb2Rlcm4gdmVyc2lvbnMgaXQgaXMgYWNjZXB0YWJsZQogaWYoTk9UIERFRklORUQgQ01BS0VfUExBVEZPUk1fTk9fVkVSU0lPTkVEX1NPTkFNRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9EZXRlcm1pbmUtQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvRGV0ZXJtaW5lLUNvbXBpbGVyLmNtYWtlCmluZGV4IDVjNmI5N2IuLmY5YzJkODkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9EZXRlcm1pbmUtQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkL0RldGVybWluZS1Db21waWxlci5jbWFrZQpAQCAtMzEsNiArMzEsMTYgQEAKICAgc2V0KF9BTkRST0lEX0hPU1RfRVhUICIiKQogZWxzZWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3MiKQogICBzZXQoX0FORFJPSURfSE9TVF9FWFQgIi5leGUiKQorZWxzZWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFuZHJvaWQiKQorICAjIE5hdGl2ZWx5IGNvbXBpbGluZyBvbiBhbiBBbmRyb2lkIGhvc3QgZG9lc24ndCB1c2UgdGhlIE5ESyBjcm9zcy1jb21waWxhdGlvbgorICAjIHRvb2xzLgorICBtYWNybyhfX2FuZHJvaWRfZGV0ZXJtaW5lX2NvbXBpbGVyIGxhbmcpCisgICAgIyBEbyBub3RoaW5nCisgIGVuZG1hY3JvKCkKKyAgaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9OQU1FUykKKyAgICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX05BTUVTIGMrKykKKyAgZW5kaWYoKQorICByZXR1cm4oKQogZWxzZSgpCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkFuZHJvaWQ6IEJ1aWxkcyBob3N0ZWQgb24gJyR7Q01BS0VfSE9TVF9TWVNURU1fTkFNRX0nIG5vdCBzdXBwb3J0ZWQuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQXBwbGUtR05VLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BcHBsZS1HTlUuY21ha2UKaW5kZXggMGViODE2OC4uOTU3MjczNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BcHBsZS1HTlUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BcHBsZS1HTlUuY21ha2UKQEAgLTE5LDE3ICsxOSwxNyBAQAogbWFjcm8oY21ha2VfZ251X3NldF9zeXNyb290X2ZsYWcgbGFuZykKICAgaWYoTk9UIERFRklORUQgQ01BS0VfJHtsYW5nfV9TWVNST09UX0ZMQUcpCiAgICAgc2V0KF9kb2MgIiR7bGFuZ30gY29tcGlsZXIgaGFzIC1pc3lzcm9vdCIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2tpbmcgd2hldGhlciAke19kb2N9IikKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICBDT01NQU5EICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0gIi12IiAiLS1oZWxwIgogICAgICAgT1VUUFVUX1ZBUklBQkxFIF9nY2NfaGVscAogICAgICAgRVJST1JfVkFSSUFCTEUgX2djY19oZWxwCiAgICAgICApCiAgICAgaWYoIiR7X2djY19oZWxwfSIgTUFUQ0hFUyAiaXN5c3Jvb3QiKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSAtIHllcyIpCisgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgInllcyIpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9TWVNST09UX0ZMQUcgIi1pc3lzcm9vdCIpCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgd2hldGhlciAke19kb2N9IC0gbm8iKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJubyIpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9TWVNST09UX0ZMQUcgIiIpCiAgICAgZW5kaWYoKQogICAgIHNldChDTUFLRV8ke2xhbmd9X1NZU1JPT1RfRkxBR19DT0RFICJzZXQoQ01BS0VfJHtsYW5nfV9TWVNST09UX0ZMQUcgXCIke0NNQUtFXyR7bGFuZ31fU1lTUk9PVF9GTEFHfVwiKSIpCkBAIC0zOSwxNyArMzksMTcgQEAKIG1hY3JvKGNtYWtlX2dudV9zZXRfb3N4X2RlcGxveW1lbnRfdGFyZ2V0X2ZsYWcgbGFuZykKICAgaWYoTk9UIERFRklORUQgQ01BS0VfJHtsYW5nfV9PU1hfREVQTE9ZTUVOVF9UQVJHRVRfRkxBRykKICAgICBzZXQoX2RvYyAiJHtsYW5nfSBjb21waWxlciBzdXBwb3J0cyBPU1ggZGVwbG95bWVudCB0YXJnZXQgZmxhZyIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2tpbmcgd2hldGhlciAke19kb2N9IikKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICBDT01NQU5EICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0gIi12IiAiLS1oZWxwIgogICAgICAgT1VUUFVUX1ZBUklBQkxFIF9nY2NfaGVscAogICAgICAgRVJST1JfVkFSSUFCTEUgX2djY19oZWxwCiAgICAgICApCiAgICAgaWYoIiR7X2djY19oZWxwfSIgTUFUQ0hFUyAibWFjb3N4LXZlcnNpb24tbWluIikKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7X2RvY30gLSB5ZXMiKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJ5ZXMiKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fT1NYX0RFUExPWU1FTlRfVEFSR0VUX0ZMQUcgIi1tbWFjb3N4LXZlcnNpb24tbWluPSIpCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgd2hldGhlciAke19kb2N9IC0gbm8iKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJubyIpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9PU1hfREVQTE9ZTUVOVF9UQVJHRVRfRkxBRyAiIikKICAgICBlbmRpZigpCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fT1NYX0RFUExPWU1FTlRfVEFSR0VUX0ZMQUdfQ09ERSAic2V0KENNQUtFXyR7bGFuZ31fT1NYX0RFUExPWU1FTlRfVEFSR0VUX0ZMQUcgXCIke0NNQUtFXyR7bGFuZ31fT1NYX0RFUExPWU1FTlRfVEFSR0VUX0ZMQUd9XCIpIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZUwuY21ha2UKaW5kZXggMDgyZTQ2Yy4uMGVkOTk3NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZUwuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZUwuY21ha2UKQEAgLTIzLDE4ICsyMywxOCBAQAogCiBpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKICAgc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCisgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbGdjYywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKIGVsc2UoKQogICAjIHdoZW4gdXNpbmcgSUJNIHhsYyB3ZSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGxpbmsgdG8gLWxnY2MKICAgc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCisgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKIGVuZGlmKCkKIAogaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYKQogICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbHN0ZGMrKywtbGdjYywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbHN0ZGMrKywtbGdjYywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKIGVsc2UoKQogICAjIHdoZW4gdXNpbmcgdGhlIElCTSB4bEMgd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBsaW5rIHRvIC1sZ2NjCiAgIHNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC1XbCwtcmVsYXggPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVdsLC1sc3RkYysrLC1sYyAtbG5zc19maWxlcyAtbG5zc19kbnMgLWxyZXNvbHYiKQorICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVdsLC1sc3RkYysrLC1sYyAtbG5zc19maWxlcyAtbG5zc19kbnMgLWxyZXNvbHYiKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVAtYmFzZS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVQLWJhc2UuY21ha2UKaW5kZXggZmU5NWI0Mi4uNzA5NWRkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVAtYmFzZS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lUC1iYXNlLmNtYWtlCkBAIC05Nyw3ICs5Nyw3IEBACiAgIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FXyR7bGFuZ31fRkxBR19TRVAgICI6IikgIyA6IG9yIGVtcHR5CiAKICAgc2V0KEJHUF8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTCi0gICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtV2wsLXJlbGF4ICR7QkdQXyR7bGFuZ31fRFlOQU1JQ19FWEVfRkxBR1N9ICR7QkdQXyR7bGFuZ31fREVGQVVMVF9FWEVfRkxBR1N9IikKIGVuZG1hY3JvKCkKQEAgLTEwOCw3ICsxMDgsNyBAQAogIwogbWFjcm8oX19CbHVlR2VuZVBfc2V0X3N0YXRpY19mbGFncyBjb21waWxlcl9pZCBsYW5nKQogICBzZXQoQkdQXyR7bGFuZ31fREVGQVVMVF9FWEVfRkxBR1MKLSAgICAiPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9MSU5LX0VYRUNVVEFCTEUKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IC1XbCwtcmVsYXggJHtCR1BfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHU30iKQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVEtYmFzZS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVRLWJhc2UuY21ha2UKaW5kZXggNWU1NmQ4ZS4uOTRjYjBhOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVEtYmFzZS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lUS1iYXNlLmNtYWtlCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgZm9yZWFjaChkaXIgJHtDTUFLRV9TWVNURU1fSU5DTFVERV9QQVRIfSkKICAgICBzdHJpbmcoQVBQRU5EIEJHUV9TWVNURU1fSU5DTFVERVMgIiAtSSR7ZGlyfSIpCiAgIGVuZGZvcmVhY2goKQotICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAgICI8Q01BS0VfQ19DT01QSUxFUj4gICA8REVGSU5FUz4gJHtCR1FfU1lTVEVNX0lOQ0xVREVTfSA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQorICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAgICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+ICR7QkdRX1NZU1RFTV9JTkNMVURFU30gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVCAiPENNQUtFX0NYWF9DT01QSUxFUj4gPERFRklORVM+ICR7QkdRX1NZU1RFTV9JTkNMVURFU30gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKIAogICAjCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogICAjIEZvciBkeW5hbWljIGV4ZWN1dGFibGVzLCBuZWVkIHRvIHByb3ZpZGUgc3BlY2lhbCBCRy9RIGFyZ3VtZW50cy4KICAgc2V0KEJHUV8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTCi0gICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtV2wsLXJlbGF4ICR7QkdRXyR7bGFuZ31fRFlOQU1JQ19FWEVfRkxBR1N9ICR7QkdRXyR7bGFuZ31fREVGQVVMVF9FWEVfRkxBR1N9IikKIGVuZG1hY3JvKCkKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAgICMgRm9yIHN0YXRpYyBleGVjdXRhYmxlcywgdXNlIGRlZmF1bHQgbGluayBzZXR0aW5ncy4KICAgc2V0KEJHUV8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTCi0gICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtV2wsLXJlbGF4ICR7QkdRXyR7bGFuZ31fREVGQVVMVF9FWEVfRkxBR1N9IikKIGVuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQ1lHV0lOLUdOVS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQ1lHV0lOLUdOVS5jbWFrZQppbmRleCBjYTkwNzEyLi40ZmExNGNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0NZR1dJTi1HTlUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9DWUdXSU4tR05VLmNtYWtlCkBAIC0yMiw3ICsyMiw3IEBACiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTElCUkFSWQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV8ke2xhbmd9X0ZMQUdTPiAtbyA8VEFSR0VUPiAtV2wsLS1vdXQtaW1wbGliLDxUQVJHRVRfSU1QTElCPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IC1XbCwtLW91dC1pbXBsaWIsPFRBUkdFVF9JTVBMSUI+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLVdsLC0tb3V0LWltcGxpYiw8VEFSR0VUX0lNUExJQj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8TElOS19MSUJSQVJJRVM+IikKIAogICAgIyBObyAtZlBJQyBvbiBjeWd3aW4KICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1BJQyAiIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLUluaXRpYWxpemUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi1Jbml0aWFsaXplLmNtYWtlCmluZGV4IDJkNzk3ZjYuLjcyOTIxN2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLUluaXRpYWxpemUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9EYXJ3aW4tSW5pdGlhbGl6ZS5jbWFrZQpAQCAtMTIyLDcgKzEyMiw5NyBAQAogc2V0KENNQUtFX09TWF9TWVNST09UICIke19DTUFLRV9PU1hfU1lTUk9PVF9ERUZBVUxUfSIgQ0FDSEUgJHtfQ01BS0VfT1NYX1NZU1JPT1RfVFlQRX0KICAgIlRoZSBwcm9kdWN0IHdpbGwgYmUgYnVpbHQgYWdhaW5zdCB0aGUgaGVhZGVycyBhbmQgbGlicmFyaWVzIGxvY2F0ZWQgaW5zaWRlIHRoZSBpbmRpY2F0ZWQgU0RLLiIpCiAKLSMgVHJhbnNmb3JtIHRoZSBjYWNoZWQgdmFsdWUgdG8gc29tZXRoaW5nIHdlIGNhbiB1c2UuCisjIFJlc29sdmVzIHRoZSBTREsgbmFtZSBpbnRvIGEgcGF0aAorZnVuY3Rpb24oX2FwcGxlX3Jlc29sdmVfc2RrX3BhdGggc2RrX25hbWUgcmV0KQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCB4Y3J1biAtc2RrICR7c2RrX25hbWV9IC0tc2hvdy1zZGstcGF0aAorICAgIE9VVFBVVF9WQVJJQUJMRSBfc3Rkb3V0CisgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICBFUlJPUl9WQVJJQUJMRSBfc3RkZXJyCisgICAgUkVTVUxUX1ZBUklBQkxFIF9mYWlsZWQKKyAgKQorICBzZXQoJHtyZXR9ICIke19zdGRvdXR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisjIEhhbmRsZSBtdWx0aS1hcmNoIHN5c3Jvb3RzLiBEbyB0aGlzIGJlZm9yZSBDTUFLRV9PU1hfU1lTUk9PVCBpcworIyB0cmFuc2Zvcm1lZCBpbnRvIGEgcGF0aCwgc28gdGhhdCB3ZSBrbm93IHRoZSBzeXNyb290IG5hbWUuCitmdW5jdGlvbihfYXBwbGVfcmVzb2x2ZV9tdWx0aV9hcmNoX3N5c3Jvb3RzKQorICBpZihDTUFLRV9BUFBMRV9BUkNIX1NZU1JPT1RTKQorICAgIHJldHVybigpICMgQWxyZWFkeSBjYWNoZWQKKyAgZW5kaWYoKQorCisgIGxpc3QoTEVOR1RIIENNQUtFX09TWF9BUkNISVRFQ1RVUkVTIF9udW1fYXJjaHMpCisgIGlmKE5PVCAoX251bV9hcmNocyBHUkVBVEVSIDEpKQorICAgIHJldHVybigpICMgT25seSBhcHBseSB0byBtdWx0aS1hcmNoCisgIGVuZGlmKCkKKworICBpZihDTUFLRV9PU1hfU1lTUk9PVCBTVFJFUVVBTCAibWFjb3N4IikKKyAgICAjIG1hY09TIGRvZXNuJ3QgaGF2ZSBhIHNpbXVsYXRvciBzZGsgLyBzeXNyb290LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGhhbmRsZSBwZXItc2RrIGFyY2hlcy4KKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYoSVNfRElSRUNUT1JZICIke0NNQUtFX09TWF9TWVNST09UfSIpCisgICAgaWYoTk9UIENNQUtFX09TWF9TWVNST09UIFNUUkVRVUFMIF9DTUFLRV9PU1hfU1lTUk9PVF9ERUZBVUxUKQorICAgICAgbWVzc2FnZShXQVJOSU5HICJDYW4gbm90IHJlc29sdmUgbXVsdGktYXJjaCBzeXNyb290cyB3aXRoIENNQUtFX09TWF9TWVNST09UIHNldCB0byBwYXRoICgke0NNQUtFX09TWF9TWVNST09UfSkiKQorICAgIGVuZGlmKCkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgc3RyaW5nKFJFUExBQ0UgIm9zIiAic2ltdWxhdG9yIiBfc2ltdWxhdG9yX3NkayAke0NNQUtFX09TWF9TWVNST09UfSkKKyAgc2V0KF9zZGtzICIke0NNQUtFX09TWF9TWVNST09UfTske19zaW11bGF0b3Jfc2RrfSIpCisgIGZvcmVhY2goc2RrICR7X3Nka3N9KQorICAgIF9hcHBsZV9yZXNvbHZlX3Nka19wYXRoKCR7c2RrfSBfc2RrX3BhdGgpCisgICAgaWYoTk9UIElTX0RJUkVDVE9SWSAiJHtfc2RrX3BhdGh9IikKKyAgICAgIG1lc3NhZ2UoV0FSTklORyAiRmFpbGVkIHRvIHJlc29sdmUgU0RLIHBhdGggZm9yICcke3Nka30nIikKKyAgICAgIGNvbnRpbnVlKCkKKyAgICBlbmRpZigpCisKKyAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICBDT01NQU5EIHBsdXRpbCAtZXh0cmFjdCBTdXBwb3J0ZWRUYXJnZXRzLiR7c2RrfS5BcmNocyBqc29uICR7X3Nka19wYXRofS9TREtTZXR0aW5ncy5wbGlzdCAtbyAtCisgICAgICBPVVRQVVRfVkFSSUFCTEUgX3Nka19hcmNoc19qc29uCisgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorICAgICAgRVJST1JfVkFSSUFCTEUgX3N0ZGVycgorICAgICAgUkVTVUxUX1ZBUklBQkxFIF9mYWlsZWQKKyAgICAgICkKKyAgICBpZihfZmFpbGVkKQorICAgICAgIyBGYWlsdXJlIHRvIGV4dHJhY3Qgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgZm9yIGFuIFNESyBtZWFucyB0aGF0IHRoZSBpbnN0YWxsZWQgU0RLIGlzIG9sZAorICAgICAgIyBhbmQgZG9lcyBub3QgcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIChTREtzIHRoYXQgY29tZSB3aXRoIFhjb2RlID49IDEwLnggc3RhcnRlZCBwcm92aWRpbmcKKyAgICAgICMgdGhlIGluZm9ybWF0aW9uKS4gSW4gc3VjaCBhIGNhc2UsIHJldHVybiBlYXJseSwgYW5kIGhhbmRsZSBtdWx0aS1hcmNoIGJ1aWxkcyB0aGUgb2xkIHdheQorICAgICAgIyAobm8gcGVyLXNkayBhcmNoZXMpLgorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisKKyAgICAjIFBvb3IgbWFuJ3MgSlNPTiBkZWNvZGluZworICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXVxcW1wiXSIgIiIgX3Nka19hcmNocyAke19zZGtfYXJjaHNfanNvbn0pCisgICAgc3RyaW5nKFJFUExBQ0UgIiwiICI7IiBfc2RrX2FyY2hzICR7X3Nka19hcmNoc30pCisKKyAgICBzZXQoX3Nka19hcmNoc18ke3Nka30gJHtfc2RrX2FyY2hzfSkKKyAgICBzZXQoX3Nka19wYXRoXyR7c2RrfSAke19zZGtfcGF0aH0pCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goYXJjaCAke0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTfSkKKyAgICBzZXQoX2FyY2hfc3lzcm9vdCAiIikKKyAgICBmb3JlYWNoKHNkayAke19zZGtzfSkKKyAgICAgIGxpc3QoRklORCBfc2RrX2FyY2hzXyR7c2RrfSAke2FyY2h9IGFyY2hfaW5kZXgpCisgICAgICBpZihOT1QgYXJjaF9pbmRleCBFUVVBTCAtMSkKKyAgICAgICAgc2V0KF9hcmNoX3N5c3Jvb3QgJHtfc2RrX3BhdGhfJHtzZGt9fSkKKyAgICAgICAgYnJlYWsoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGZvcmVhY2goKQorICAgIGlmKF9hcmNoX3N5c3Jvb3QpCisgICAgICBsaXN0KEFQUEVORCBfYXJjaF9zeXNyb290cyAke19hcmNoX3N5c3Jvb3R9KQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShXQVJOSU5HICJObyBTREsgZm91bmQgZm9yIGFyY2hpdGVjdHVyZSAnJHthcmNofSciKQorICAgICAgbGlzdChBUFBFTkQgX2FyY2hfc3lzcm9vdHMgIiIpICMgUGxhY2Vob2xkZXIKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIHNldChDTUFLRV9BUFBMRV9BUkNIX1NZU1JPT1RTICIke19hcmNoX3N5c3Jvb3RzfSIgQ0FDSEUgSU5URVJOQUwKKyAgICAiQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBzeXNyb290cywgb25lIHBlciBDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIpCitlbmRmdW5jdGlvbigpCisKK19hcHBsZV9yZXNvbHZlX211bHRpX2FyY2hfc3lzcm9vdHMoKQorCisjIFRyYW5zZm9ybSBDTUFLRV9PU1hfU1lTUk9PVCB0byBhYnNvbHV0ZSBwYXRoCiBzZXQoX0NNQUtFX09TWF9TWVNST09UX1BBVEggIiIpCiBpZihDTUFLRV9PU1hfU1lTUk9PVCkKICAgaWYoIngke0NNQUtFX09TWF9TWVNST09UfSIgTUFUQ0hFUyAiLyIpCkBAIC0xMzQsMTYgKzIyNCw5IEBACiAgICAgZW5kaWYoKQogICAgIHNldChfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSCAiJHtDTUFLRV9PU1hfU1lTUk9PVH0iKQogICBlbHNlKCkKLSAgICAjIFRyYW5zZm9ybSB0aGUgc2RrIG5hbWUgaW50byBhIHBhdGguCi0gICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgQ09NTUFORCB4Y29kZWJ1aWxkIC1zZGsgJHtDTUFLRV9PU1hfU1lTUk9PVH0gLXZlcnNpb24gUGF0aAotICAgICAgT1VUUFVUX1ZBUklBQkxFIF9zdGRvdXQKLSAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCi0gICAgICBFUlJPUl9WQVJJQUJMRSBfc3RkZXJyCi0gICAgICBSRVNVTFRfVkFSSUFCTEUgX2ZhaWxlZAotICAgICAgKQotICAgIGlmKE5PVCBfZmFpbGVkIEFORCBJU19ESVJFQ1RPUlkgIiR7X3N0ZG91dH0iKQotICAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9QQVRIICIke19zdGRvdXR9IikKKyAgICBfYXBwbGVfcmVzb2x2ZV9zZGtfcGF0aCgke0NNQUtFX09TWF9TWVNST09UfSBfc2RrX3BhdGgpCisgICAgaWYoSVNfRElSRUNUT1JZICIke19zZGtfcGF0aH0iKQorICAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9QQVRIICIke19zZGtfcGF0aH0iKQogICAgICAgIyBGb3Igbm9uLVhjb2RlIGdlbmVyYXRvcnMgdXNlIHRoZSBwYXRoLgogICAgICAgaWYoTk9UICIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIlhjb2RlIikKICAgICAgICAgc2V0KENNQUtFX09TWF9TWVNST09UICIke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCmluZGV4IGU1YTU3YjUuLjBhNGQ0ZTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCkBAIC0yMTAsNyArMjEwLDcgQEAKIGluY2x1ZGUoUGxhdGZvcm0vVW5peFBhdGhzKQogaWYoX0NNQUtFX09TWF9TWVNST09UX1BBVEggQU5EIEVYSVNUUyAke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfS91c3IvaW5jbHVkZSkKICAgbGlzdChBUFBFTkQgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3VzcikKLSAgZm9yZWFjaChsYW5nIEMgQ1hYIE9CSkMgT0JKQ1hYKQorICBmb3JlYWNoKGxhbmcgQyBDWFggT0JKQyBPQkpDWFggU3dpZnQpCiAgICAgbGlzdChBUFBFTkQgX0NNQUtFXyR7bGFuZ31fSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFU19JTklUICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9pbmNsdWRlKQogICBlbmRmb3JlYWNoKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vR2VuZXJpYy1TRENDLUMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0dlbmVyaWMtU0RDQy1DLmNtYWtlCmluZGV4IGFlZjRhYmYuLmMzZmQxODYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vR2VuZXJpYy1TRENDLUMuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9HZW5lcmljLVNEQ0MtQy5jbWFrZQpAQCAtMSw0ICsxLDMgQEAKLQogIyBUaGlzIGZpbGUgaW1wbGVtZW50cyBiYXNpYyBzdXBwb3J0IGZvciBzZGNjIChodHRwOi8vc2RjYy5zb3VyY2Vmb3JnZS5uZXQvKQogIyBhIGZyZWUgQyBjb21waWxlciBmb3IgOCBhbmQgMTYgYml0IG1pY3JvY29udHJvbGxlcnMuCiAjIFRvIHVzZSBpdCBlaXRoZXIgYSB0b29sY2hhaW4gZmlsZSBpcyByZXF1aXJlZCBvciBjbWFrZSBoYXMgdG8gYmUgcnVuIGxpa2UgdGhpczoKQEAgLTE5LDIyICsxOCwyNiBAQAogCiBzZXQoQ01BS0VfQ19PVVRQVVRfRVhURU5TSU9OICIucmVsIikKIAotIyBmaW5kIHNkY2NsaWIgYXMgQ01BS0VfQVIKLSMgc2luY2UgY21ha2UgbWF5IGFscmVhZHkgaGF2ZSBzZWFyY2hlZCBmb3IgImFyIiwgc2RjY2xpYiBoYXMgdG8KLSMgYmUgc2VhcmNoZWQgd2l0aCBhIGRpZmZlcmVudCB2YXJpYWJsZSBuYW1lIChTRENDTElCX0VYRUNVVEFCTEUpCi0jIGFuZCBtdXN0IHRoZW4gYmUgZm9yY2VkIGludG8gdGhlIGNhY2hlCisjIGZpbmQgc2Rhci9zZGNjbGliIGFzIENNQUtFX0FSCisjIHNpbmNlIGNtYWtlIG1heSBhbHJlYWR5IGhhdmUgc2VhcmNoZWQgZm9yICJhciIsIHNkYXIgaGFzIHRvCisjIGJlIHNlYXJjaGVkIHdpdGggYSBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZSAoU0RDQ0FSX0VYRUNVVEFCTEUpCisjIGFuZCBtdXN0IHRoZW4gYmUgZm9yY2VkIGludG8gdGhlIGNhY2hlLgorIyBzZGNjbGliIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gU0RDQyAzLjIuMCBhbmQgcmVtb3ZlZCBpbiAzLjguNgorIyBzbyB3ZSBmaXJzdCBsb29rIGZvciBzZGFyCiBnZXRfZmlsZW5hbWVfY29tcG9uZW50KFNEQ0NfTE9DQVRJT04gIiR7Q01BS0VfQ19DT01QSUxFUn0iIFBBVEgpCi1maW5kX3Byb2dyYW0oU0RDQ0xJQl9FWEVDVVRBQkxFIHNkY2NsaWIgUEFUSFMgIiR7U0RDQ19MT0NBVElPTn0iIE5PX0RFRkFVTFRfUEFUSCkKLWZpbmRfcHJvZ3JhbShTRENDTElCX0VYRUNVVEFCTEUgc2RjY2xpYikKLXNldChDTUFLRV9BUiAiJHtTRENDTElCX0VYRUNVVEFCTEV9IiBDQUNIRSBGSUxFUEFUSCAiVGhlIHNkY2MgbGlicmFyaWFuIiBGT1JDRSkKLQotIyBDTUFLRV9DX0ZMQUdTX0lOSVQgYW5kIENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCBzaG91bGQgYmUgc2V0IGluIGEgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBmaWxlCi1pZihOT1QgREVGSU5FRCBDTUFLRV9DX0ZMQUdTX0lOSVQpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfQ19GTEFHU19JTklUICIgLW1tY3M1MSAtLW1vZGVsLXNtYWxsIikKK2ZpbmRfcHJvZ3JhbShTRENDQVJfRVhFQ1VUQUJMRSBzZGFyIE5BTUVTIHNkY2NsaWIgUEFUSFMgIiR7U0RDQ19MT0NBVElPTn0iIE5PX0RFRkFVTFRfUEFUSCkKK2ZpbmRfcHJvZ3JhbShTRENDQVJfRVhFQ1VUQUJMRSBzZGFyIE5BTUVTIHNkY2NsaWIpCisjIGZvciBjb21wYXRpYmlsaXR5LCBpbiBjYXNlIFNEQ0NMSUJfRVhFQ1VUQUJMRSBpcyBzZXQsIHdlIHVzZSBpdAoraWYoREVGSU5FRCBTRENDTElCX0VYRUNVVEFCTEUpCisgIHNldChDTUFLRV9BUiAiJHtTRENDTElCX0VYRUNVVEFCTEV9IiBDQUNIRSBGSUxFUEFUSCAiVGhlIHNkY2MgbGlicmFyaWFuIiBGT1JDRSkKK2Vsc2UoKQorICBzZXQoQ01BS0VfQVIgIiR7U0RDQ0FSX0VYRUNVVEFCTEV9IiBDQUNIRSBGSUxFUEFUSCAiVGhlIHNkY2MgbGlicmFyaWFuIiBGT1JDRSkKIGVuZGlmKCkKIAotaWYoTk9UIERFRklORUQgQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUKQotICBzZXQgKENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCAtLW1vZGVsLXNtYWxsKQoraWYoIiR7U0RDQ0FSX0VYRUNVVEFCTEV9IiBNQVRDSEVTICJzZGNjbGliIikKKyAgc2V0KENNQUtFX0FSX09QVElPTlMgIi1hIikKK2Vsc2UoKQorICBzZXQoQ01BS0VfQVJfT1BUSU9OUyAiLXJjIikKIGVuZGlmKCkKIAogc2V0KENNQUtFX0NfTElOS0VSX1dSQVBQRVJfRkxBRyAiLVdsIiAiLCIpCkBAIC00NSwxMCArNDgsMTAgQEAKICMgbGluayBvYmplY3QgZmlsZXMgdG8gYW4gZXhlY3V0YWJsZQogc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4iKQogCi0jIG5lZWRzIHNkY2MgMi43LjAgKyBzZGRjbGliIGZyb20gY3ZzCisjIG5lZWRzIHNkY2MgKyBzZGFyL3NkY2NsaWIKIHNldChDTUFLRV9DX0NSRUFURV9TVEFUSUNfTElCUkFSWQogICAgICAgIlwiJHtDTUFLRV9DT01NQU5EfVwiIC1FIHJlbW92ZSA8VEFSR0VUPiIKLSAgICAgICI8Q01BS0VfQVI+IC1hIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIikKKyAgICAgICI8Q01BS0VfQVI+ICR7Q01BS0VfQVJfT1BUSU9OU30gPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAiKQogCiAjIG5vdCBzdXBwb3J0ZWQgYnkgc2RjYwogc2V0KENNQUtFX0NfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICIiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC1IUC1DLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC1IUC1DLmNtYWtlCmluZGV4IDc2MTAzODMuLjU3YmEyZWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vSFAtVVgtSFAtQy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0hQLVVYLUhQLUMuY21ha2UKQEAgLTMsNCArMyw0IEBACiAKIHNldChDTUFLRV9DX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtRSA8U09VUkNFPiA+IDxQUkVQUk9DRVNTRURfU09VUkNFPiIpCiBzZXQoQ01BS0VfQ19DUkVBVEVfQVNTRU1CTFlfU09VUkNFICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtUyA8U09VUkNFPiAtbyA8QVNTRU1CTFlfU09VUkNFPiIpCi1zZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiAtQWEgLUFlIDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAgIC1jIDxTT1VSQ0U+IikKK3NldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IC1BYSAtQWUgPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vTGludXgtY29tby5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtY29tby5jbWFrZQppbmRleCBkMTU1MGQyLi5mNmRiMzRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LWNvbW8uY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1jb21vLmNtYWtlCkBAIC0xMSw3ICsxMSw3IEBACiAKIHNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC0tcHJlbGlua19vYmplY3RzIDxPQkpFQ1RTPiIKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPEZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8RkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIAogc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfQ19GTEFHICIiKQogc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX0NfRkxBR1MgIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQXBwbGUtU3dpZnQuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQXBwbGUtU3dpZnQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3Nzc1NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1BcHBsZS1Td2lmdC5jbWFrZQpAQCAtMCwwICsxIEBACitzZXQoQ01BS0VfU3dpZnRfSU1QTElCX0xJTktFUl9GTEFHUyAiLVhsaW5rZXIgLWltcGxpYjo8VEFSR0VUX0lNUExJQj4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLUFTTS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1DbGFuZy1BU00uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1ZDc3ZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1DbGFuZy1BU00uY21ha2UKQEAgLTAsMCArMSwyIEBACitpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtQ2xhbmcpCitfX3dpbmRvd3NfY29tcGlsZXJfY2xhbmcoQVNNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLmNtYWtlCmluZGV4IDAyODY0YzYuLjAxOGRlNGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1DbGFuZy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQ2xhbmcuY21ha2UKQEAgLTIxLDEwICsyMSwxMiBAQAogICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYICIuZGxsIikKICAgc2V0KENNQUtFX1NIQVJFRF9NT0RVTEVfU1VGRklYICAiLmRsbCIpCiAgIHNldChDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVggIi5saWIiKQotICBzZXQoQ01BS0VfREVQRklMRV9GTEFHU18ke2xhbmd9ICItTUQgLU1UIDxPQkpFQ1Q+IC1NRiA8REVQRklMRT4iKQorICBpZihOT1QgIiR7bGFuZ30iIFNUUkVRVUFMICJBU00iKQorICAgIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTXyR7bGFuZ30gIi1NRCAtTVQgPE9CSkVDVD4gLU1GIDxERVBGSUxFPiIpCisgIGVuZGlmKCkKIAogICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTICJsaWIiICIiKQotICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIuZGxsIiAiLmRsbC5hIiAiLmEiICIubGliIikKKyAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAiLmRsbC5hIiAiLmEiICIubGliIikKICAgc2V0KENNQUtFX1NVUFBPUlRfV0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFMgMSkKICAgc2V0IChDTUFLRV9MSU5LX0RFRl9GSUxFX0ZMQUcgIi1YbGlua2VyIC9ERUY6IikKIApAQCAtNTMsMzYgKzU1LDM4IEBACiAKICAgIyBDcmVhdGUgYXJjaGl2aW5nIHJ1bGVzIHRvIHN1cHBvcnQgbGFyZ2Ugb2JqZWN0IGZpbGUgbGlzdHMgZm9yIHN0YXRpYyBsaWJyYXJpZXMuCiAgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQotICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9GSU5JU0ggIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NIQVJFRF9MSUJSQVJZCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtZnVzZS1sZD1sbGQtbGluayAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfJHtsYW5nfV9GTEFHUz4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFXyR7bGFuZ31fRkxBR1M+IC1vIDxUQVJHRVQ+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gLVhsaW5rZXIgL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gLVhsaW5rZXIgL3BkYjo8VEFSR0VUX1BEQj4gLVhsaW5rZXIgL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NIQVJFRF9NT0RVTEUgJHtDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTElCUkFSWX0pCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLWZ1c2UtbGQ9bGxkLWxpbmsgLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiAtWGxpbmtlciAvaW1wbGliOjxUQVJHRVRfSU1QTElCPiAtWGxpbmtlciAvcGRiOjxUQVJHRVRfUERCPiAtWGxpbmtlciAvdmVyc2lvbjo8VEFSR0VUX1ZFUlNJT05fTUFKT1I+LjxUQVJHRVRfVkVSU0lPTl9NSU5PUj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IC1mdXNlLWxkPWxsZC1saW5rIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIDxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiAtWGxpbmtlciAvaW1wbGliOjxUQVJHRVRfSU1QTElCPiAtWGxpbmtlciAvcGRiOjxUQVJHRVRfUERCPiAtWGxpbmtlciAvdmVyc2lvbjo8VEFSR0VUX1ZFUlNJT05fTUFKT1I+LjxUQVJHRVRfVkVSU0lPTl9NSU5PUj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8TElOS19MSUJSQVJJRVM+IikKIAotICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZCAgICAgICAgIC1YY2xhbmcgLWZsdG8tdmlzaWJpbGl0eS1wdWJsaWMtc3RkIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPWxpYmNtdCkKLSAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWRETEwgICAgICAtRF9ETEwgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bXN2Y3J0KQotICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZERlYnVnICAgIC1EX0RFQlVHIC1YY2xhbmcgLWZsdG8tdmlzaWJpbGl0eS1wdWJsaWMtc3RkIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPWxpYmNtdGQpCi0gIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19NU1ZDX1JVTlRJTUVfTElCUkFSWV9NdWx0aVRocmVhZGVkRGVidWdETEwgLURfREVCVUcgLURfRExMIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPW1zdmNydGQpCisgIGlmKE5PVCAiJHtsYW5nfSIgU1RSRVFVQUwgIkFTTSIpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWQgICAgICAgICAtWGNsYW5nIC1mbHRvLXZpc2liaWxpdHktcHVibGljLXN0ZCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1saWJjbXQpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWRETEwgICAgICAtRF9ETEwgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bXN2Y3J0KQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19NU1ZDX1JVTlRJTUVfTElCUkFSWV9NdWx0aVRocmVhZGVkRGVidWcgICAgLURfREVCVUcgLVhjbGFuZyAtZmx0by12aXNpYmlsaXR5LXB1YmxpYy1zdGQgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bGliY210ZCkKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZERlYnVnRExMIC1EX0RFQlVHIC1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnRkKQogCi0gIGlmKENNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQpCi0gICAgc2V0KF9fQURERURfRkxBR1MgIiIpCi0gICAgc2V0KF9fQURERURfRkxBR1NfREVCVUcgIiIpCi0gIGVsc2UoKQotICAgIHNldChfX0FEREVEX0ZMQUdTX0RFQlVHICItRF9ERUJVRyAtRF9ETEwgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bXN2Y3J0ZCIpCi0gICAgc2V0KF9fQURERURfRkxBR1MgIi1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnQiKQorICAgIGlmKENNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQpCisgICAgICBzZXQoX19BRERFRF9GTEFHUyAiIikKKyAgICAgIHNldChfX0FEREVEX0ZMQUdTX0RFQlVHICIiKQorICAgIGVsc2UoKQorICAgICAgc2V0KF9fQURERURfRkxBR1NfREVCVUcgIi1EX0RFQlVHIC1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnRkIikKKyAgICAgIHNldChfX0FEREVEX0ZMQUdTICItRF9ETEwgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bXN2Y3J0IikKKyAgICBlbmRpZigpCisKKyAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfREVCVUdfSU5JVCAiIC1nIC1YY2xhbmcgLWdjb2RldmlldyAtTzAgJHtfX0FEREVEX0ZMQUdTX0RFQlVHfSIpCisgICAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX01JTlNJWkVSRUxfSU5JVCAiIC1PcyAtRE5ERUJVRyAke19fQURERURfRkxBR1N9IikKKyAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMRUFTRV9JTklUICIgLU8zIC1ETkRFQlVHICR7X19BRERFRF9GTEFHU30iKQorICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUICIgLU8yIC1nIC1ETkRFQlVHIC1YY2xhbmcgLWdjb2RldmlldyAke19fQURERURfRkxBR1N9IikKICAgZW5kaWYoKQotCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19ERUJVR19JTklUICIgLWcgLVhjbGFuZyAtZ2NvZGV2aWV3IC1PMCAke19fQURERURfRkxBR1NfREVCVUd9IikKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX01JTlNJWkVSRUxfSU5JVCAiIC1PcyAtRE5ERUJVRyAke19fQURERURfRkxBR1N9IikKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX1JFTEVBU0VfSU5JVCAiIC1PMyAtRE5ERUJVRyAke19fQURERURfRkxBR1N9IikKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX1JFTFdJVEhERUJJTkZPX0lOSVQgIiAtTzIgLWcgLUROREVCVUcgLVhjbGFuZyAtZ2NvZGV2aWV3ICR7X19BRERFRF9GTEFHU30iKQogICBzZXQoQ01BS0VfSU5DTFVERV9TWVNURU1fRkxBR18ke2xhbmd9ICItaXN5c3RlbSAiKQogCiAgIHNldChDTUFLRV9QQ0hfRVhURU5TSU9OIC5wY2gpCiAgIHNldChDTUFLRV9QQ0hfUFJPTE9HVUUgIiNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciIpCi0gIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1YY2xhbmcgLWluY2x1ZGUtcGNoIC1YY2xhbmcgPFBDSF9GSUxFPikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVhjbGFuZyAtaW5jbHVkZS1wY2ggLVhjbGFuZyA8UENIX0ZJTEU+IC1YY2xhbmcgLWluY2x1ZGUgLVhjbGFuZyA8UENIX0hFQURFUj4pCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIC1YY2xhbmcgLWVtaXQtcGNoIC1YY2xhbmcgLWluY2x1ZGUgLVhjbGFuZyA8UENIX0hFQURFUj4pCiAKICAgdW5zZXQoX19BRERFRF9GTEFHUykKQEAgLTEyOSw2ICsxMzMsMjQgQEAKICAgaWYgKCAieCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieE1TVkMiIE9SICJ4JHtDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieE1TVkMiICkKICAgICBpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtTVNWQykKIAorICAgICMgRmVlZCB0aGUgcHJlcHJvY2Vzc2VkIHJjIGZpbGUgdG8gbGx2bS1yYworICAgIGlmKENNQUtFX1JDX0NPTVBJTEVSX0lOSVQgTUFUQ0hFUyAibGx2bS1yYyIpCisgICAgICBpZihERUZJTkVEIENNQUtFX0NfQ09NUElMRVJfSUQpCisgICAgICAgIHNldChDTUFLRV9SQ19QUkVQUk9DRVNTT1IgQ01BS0VfQ19DT01QSUxFUikKKyAgICAgIGVsc2VpZihERUZJTkVEIENNQUtFX0NYWF9DT01QSUxFUl9JRCkKKyAgICAgICAgc2V0KENNQUtFX1JDX1BSRVBST0NFU1NPUiBDTUFLRV9DWFhfQ09NUElMRVIpCisgICAgICBlbmRpZigpCisgICAgICBpZihERUZJTkVEIENNQUtFX1JDX1BSRVBST0NFU1NPUikKKyAgICAgICAgc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfUkMgIi1jbGFuZzotTUQgLWNsYW5nOi1NRiAtY2xhbmc6PERFUEZJTEU+IikKKyAgICAgICAgc2V0KENNQUtFX1JDX0NPTVBJTEVfT0JKRUNUICIke0NNQUtFX0NPTU1BTkR9IC1FIGNtYWtlX2xsdm1fcmMgPE9CSkVDVD4ucHAgPCR7Q01BS0VfUkNfUFJFUFJPQ0VTU09SfT4gPERFRklORVM+IC1EUkNfSU5WT0tFRCA8SU5DTFVERVM+IDxGTEFHUz4gLUUgPFNPVVJDRT4gLS0gPENNQUtFX1JDX0NPTVBJTEVSPiA8REVGSU5FUz4gL2ZvIDxPQkpFQ1Q+IDxPQkpFQ1Q+LnBwIikKKyAgICAgICAgaWYoQ01BS0VfR0VORVJBVE9SIFNUUkVRVUFMICJOaW5qYSIpCisgICAgICAgICAgc2V0KENNQUtFX05JTkpBX0NNQ0xERVBTX1JDIDApCisgICAgICAgICAgc2V0KENNQUtFX05JTkpBX0RFUF9UWVBFX1JDIGdjYykKKyAgICAgICAgZW5kaWYoKQorICAgICAgICB1bnNldChDTUFLRV9SQ19QUkVQUk9DRVNTT1IpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorCiAgICAgbWFjcm8oX193aW5kb3dzX2NvbXBpbGVyX2NsYW5nIGxhbmcpCiAgICAgICBzZXQoX0NPTVBJTEVfJHtsYW5nfSAiJHtfQ09NUElMRV8ke2xhbmd9X01TVkN9IikKICAgICAgIF9fd2luZG93c19jb21waWxlcl9tc3ZjKCR7bGFuZ30pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtRW1iYXJjYWRlcm8uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtRW1iYXJjYWRlcm8uY21ha2UKaW5kZXggMzcwYjU2ZS4uMGMyNDczOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUVtYmFyY2FkZXJvLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1FbWJhcmNhZGVyby5jbWFrZQpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICMgUHJlY29tcGlsZSBIZWFkZXJzCiAgIGlmIChFTUJBUkNBREVSTykKICAgICBzZXQoQ01BS0VfUENIX0VYVEVOU0lPTiAucGNoKQotICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1YY2xhbmcgLWluY2x1ZGUtcGNoIC1YY2xhbmcgPFBDSF9GSUxFPikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVVNFX1BDSCAtWGNsYW5nIC1pbmNsdWRlLXBjaCAtWGNsYW5nIDxQQ0hfRklMRT4gLVhjbGFuZyAtaW5jbHVkZSAtWGNsYW5nIDxQQ0hfSEVBREVSPikKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfQ1JFQVRFX1BDSCAtWGNsYW5nIC1lbWl0LXBjaCAtWGNsYW5nIC1pbmNsdWRlIC1YY2xhbmcgPFBDSF9IRUFERVI+KQogICBlbmRpZigpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1HTlUtQVNNLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS1BU00uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwMDg5MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1HTlUtQVNNLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAoraW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLUdOVSkKK19fd2luZG93c19jb21waWxlcl9nbnUoQVNNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1HTlUuY21ha2UKaW5kZXggNmJmMjQ1Yy4uYTJlMzgxMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtR05VLmNtYWtlCkBAIC0yNSw3ICsyNSw3IEBACiAKIGlmKE1JTkdXKQogICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTICJsaWIiICIiKQotICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIuZGxsIiAiLmRsbC5hIiAiLmEiICIubGliIikKKyAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAiLmRsbC5hIiAiLmEiICIubGliIikKICAgc2V0KENNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTX0lOSVQgIi1sa2VybmVsMzIgLWx1c2VyMzIgLWxnZGkzMiAtbHdpbnNwb29sIC1sc2hlbGwzMiAtbG9sZTMyIC1sb2xlYXV0MzIgLWx1dWlkIC1sY29tZGxnMzIgLWxhZHZhcGkzMiIpCiAgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfTElCUkFSSUVTX0lOSVQgIiR7Q01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVNfSU5JVH0iKQogZW5kaWYoKQpAQCAtNDcsMTYgKzQ3LDEyIEBACiAgIHNldChfX1dJTkRPV1NfR05VX0xEX1JFU1BPTlNFIDApCiBlbmRpZigpCiAKLWlmKE5PVCBDTUFLRV9HRU5FUkFUT1JfUkMgQU5EIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJVbml4IE1ha2VmaWxlcyIpCi0gIHNldChDTUFLRV9HRU5FUkFUT1JfUkMgd2luZHJlcykKLWVuZGlmKCkKLQogbWFjcm8oX193aW5kb3dzX2NvbXBpbGVyX2dudSBsYW5nKQogCiAgIGlmKE1TWVMgT1IgTUlOR1cpCiAgICAgIyBDcmVhdGUgYXJjaGl2aW5nIHJ1bGVzIHRvIHN1cHBvcnQgbGFyZ2Ugb2JqZWN0IGZpbGUgbGlzdHMgZm9yIHN0YXRpYyBsaWJyYXJpZXMuCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCi0gICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQogCiAgICAgIyBJbml0aWFsaXplIEMgbGluayB0eXBlIHNlbGVjdGlvbiBmbGFncy4gIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHdoZW4KQEAgLTEwOCw3ICsxMDQsNyBAQAogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gLW8gPFRBUkdFVD4gLVdsLC0tb3V0LWltcGxpYiw8VEFSR0VUX0lNUExJQj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiAtV2wsLS1vdXQtaW1wbGliLDxUQVJHRVRfSU1QTElCPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1XbCwtLW91dC1pbXBsaWIsPFRBUkdFVF9JTVBMSUI+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCiAKICAgbGlzdChBUFBFTkQgQ01BS0VfJHtsYW5nfV9BQklfRklMRVMgIlBsYXRmb3JtL1dpbmRvd3MtR05VLSR7bGFuZ30tQUJJIikKIApAQCAtMTI0LDcgKzEyMCw3IEBACiAgICAgICBzdHJpbmcoUkVQTEFDRSAiPE9CSkVDVFM+IiAiLVdsLC0td2hvbGUtYXJjaGl2ZSA8T0JKRUNUX0RJUj4vb2JqZWN0cy5hIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUiCiAgICAgICAgIENNQUtFXyR7bGFuZ31fJHtydWxlfSAiJHtDTUFLRV8ke2xhbmd9XyR7cnVsZX19IikKICAgICAgIHNldChDTUFLRV8ke2xhbmd9XyR7cnVsZX0KLSAgICAgICAgIjxDTUFLRV9DT01NQU5EPiAtRSByZW1vdmUgLWYgPE9CSkVDVF9ESVI+L29iamVjdHMuYSIKKyAgICAgICAgIjxDTUFLRV9DT01NQU5EPiAtRSBybSAtZiA8T0JKRUNUX0RJUj4vb2JqZWN0cy5hIgogICAgICAgICAiPENNQUtFX0FSPiBjciA8T0JKRUNUX0RJUj4vb2JqZWN0cy5hIDxPQkpFQ1RTPiIKICAgICAgICAgIiR7Q01BS0VfJHtsYW5nfV8ke3J1bGV9fSIKICAgICAgICAgKQpAQCAtMTMyLDcgKzEyOCw3IEBACiAgIGVuZGlmKCkKIAogICBpZihOT1QgQ01BS0VfUkNfQ09NUElMRVJfSU5JVCBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUl9SQykKLSAgICBzZXQoQ01BS0VfUkNfQ09NUElMRVJfSU5JVCB3aW5kcmVzKQorICAgIHNldChDTUFLRV9SQ19DT01QSUxFUl9JTklUICR7X0NNQUtFX1RPT0xDSEFJTl9QUkVGSVh9d2luZHJlcykKICAgZW5kaWYoKQogCiAgIGVuYWJsZV9sYW5ndWFnZShSQykKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1JbnRlbC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1JbnRlbC5jbWFrZQppbmRleCA5NmIxNzYwLi41ZDhmN2ZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtSW50ZWwuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUludGVsLmNtYWtlCkBAIC0xMSw3ICsxMSw3IEBACiBpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtTVNWQykKIG1hY3JvKF9fd2luZG93c19jb21waWxlcl9pbnRlbCBsYW5nKQogICBfX3dpbmRvd3NfY29tcGlsZXJfbXN2Yygke2xhbmd9KQotICBzdHJpbmcoUkVQTEFDRSAiPENNQUtFX0xJTktFUj4gL2xpYiIgInhpbGliIiBDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAiJHtDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWX0iKQorICBzdHJpbmcoUkVQTEFDRSAiPENNQUtFX0FSPiIgInhpbGliIiBDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAiJHtDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWX0iKQogICBmb3JlYWNoKHJ1bGUgQ1JFQVRFX1NIQVJFRF9MSUJSQVJZIENSRUFURV9TSEFSRURfTU9EVUxFIExJTktfRVhFQ1VUQUJMRSkKICAgICBzdHJpbmcoUkVQTEFDRSAiPENNQUtFX0xJTktFUj4iICJ4aWxpbmsiIENNQUtFXyR7bGFuZ31fJHtydWxlfSAiJHtDTUFLRV8ke2xhbmd9XyR7cnVsZX19IikKICAgZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTVNWQy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlCmluZGV4IDM0ZjVkMDMuLjdlZTUwMWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlCkBAIC0yMTcsNyArMjE3LDcgQEAKIGVsc2UoKQogICBzZXQoX1BMQVRGT1JNX0RFRklORVMgIi9EV0lOMzIiKQogCi0gIGlmKF9NU1ZDX0NfQVJDSElURUNUVVJFX0ZBTUlMWSBTVFJFUVVBTCAiQVJNIiBPUiBfTVNWQ19DWFhfQVJDSElURUNUVVJFX0ZBTUlMWSBTVFJFUVVBTCAiQVJNIiBPUiBfTVNWQ19DX0FSQ0hJVEVDVFVSRV9GQU1JTFkgU1RSRVFVQUwgIkFSTTY0IiBPUiBfTVNWQ19DWFhfQVJDSElURUNUVVJFX0ZBTUlMWSBTVFJFUVVBTCAiQVJNNjQiKQorICBpZihfTVNWQ19DX0FSQ0hJVEVDVFVSRV9GQU1JTFkgU1RSRVFVQUwgIkFSTSIgT1IgX01TVkNfQ1hYX0FSQ0hJVEVDVFVSRV9GQU1JTFkgU1RSRVFVQUwgIkFSTSIpCiAgICAgc2V0KENNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTX0lOSVQgImtlcm5lbDMyLmxpYiB1c2VyMzIubGliIikKICAgZWxzZWlmKE1TVkNfVkVSU0lPTiBHUkVBVEVSIDEzMTApCiAgICAgaWYoQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVCBNQVRDSEVTICJ2WzAtOV0rX2NsYW5nXy4qIikKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICIke19DTUFLRV9WU19MSU5LX0RMTH08Q01BS0VfTElOS0VSPiAke0NNQUtFX0NMX05PTE9HT30gPE9CSkVDVFM+ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAvb3V0OjxUQVJHRVQ+IC9pbXBsaWI6PFRBUkdFVF9JTVBMSUI+IC9wZGI6PFRBUkdFVF9QREI+IC9kbGwgL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+JHtfUExBVEZPUk1fTElOS19GTEFHU30gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiAKICAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NIQVJFRF9NT0RVTEUgJHtDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTElCUkFSWX0pCi0gIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIjxDTUFLRV9MSU5LRVI+IC9saWIgJHtDTUFLRV9DTF9OT0xPR099IDxMSU5LX0ZMQUdTPiAvb3V0OjxUQVJHRVQ+IDxPQkpFQ1RTPiAiKQorICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU1RBVElDX0xJQlJBUlkgICI8Q01BS0VfQVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8TElOS19GTEFHUz4gL291dDo8VEFSR0VUPiA8T0JKRUNUUz4gIikKIAogICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09CSkVDVAogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfQ0xfTk9MT0dPfSR7X0NPTVBJTEVfJHtsYW5nfX0gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAvRm88T0JKRUNUPiAvRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiR7X0ZTXyR7bGFuZ319IC1jIDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTlZJRElBLUNVREEuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTlZJRElBLUNVREEuY21ha2UKaW5kZXggOTRkNzdiOS4uMmY1MDI4MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU5WSURJQS1DVURBLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1OVklESUEtQ1VEQS5jbWFrZQpAQCAtMSwxMSArMSwxMSBAQAogaW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLU1TVkMpCiAKIHNldChDTUFLRV9DVURBX0NPTVBJTEVfUFRYX0NPTVBJTEFUSU9OCi0gICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtDTUFLRV9DVURBX0hPU1RfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX1NFUEFSQUJMRV9DT01QSUxBVElPTgotICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7Q01BS0VfQ1VEQV9IT1NUX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IGN1IC1kYyA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLWRjIDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTIikKIHNldChDTUFLRV9DVURBX0NPTVBJTEVfV0hPTEVfQ09NUElMQVRJT04KLSAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtYyA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLWMgPFNPVVJDRT4gLW8gPE9CSkVDVD4gLVhjb21waWxlcj0tRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiwtRlMiKQogCiBzZXQoX19JTVBMSUNUX0xJTktTICkKIGZvcmVhY2goZGlyICR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQpAQCAtMjMsMTggKzIzLDEzIEBACiAgICIke19DTUFLRV9WU19MSU5LX0RMTH08Q01BS0VfTElOS0VSPiAke0NNQUtFX0NMX05PTE9HT30gPE9CSkVDVFM+ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAvb3V0OjxUQVJHRVQ+IC9pbXBsaWI6PFRBUkdFVF9JTVBMSUI+IC9wZGI6PFRBUkdFVF9QREI+IC9kbGwgL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+JHtfUExBVEZPUk1fTElOS19GTEFHU30gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9MSU5LU30gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiAKIHNldChDTUFLRV9DVURBX0NSRUFURV9TSEFSRURfTU9EVUxFICR7Q01BS0VfQ1VEQV9DUkVBVEVfU0hBUkVEX0xJQlJBUll9KQotc2V0KENNQUtFX0NVREFfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICAiPENNQUtFX0xJTktFUj4gL2xpYiAke0NNQUtFX0NMX05PTE9HT30gPExJTktfRkxBR1M+IC9vdXQ6PFRBUkdFVD4gPE9CSkVDVFM+ICIpCitzZXQoQ01BS0VfQ1VEQV9DUkVBVEVfU1RBVElDX0xJQlJBUlkgICI8Q01BS0VfQVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8TElOS19GTEFHUz4gL291dDo8VEFSR0VUPiA8T0JKRUNUUz4gIikKIHNldChDTUFLRV9DVURBX0xJTktFUl9TVVBQT1JUU19QREIgT04pCiBzZXQoQ01BS0VfQ1VEQV9MSU5LX0VYRUNVVEFCTEUKICAgIiR7X0NNQUtFX1ZTX0xJTktfRVhFfTxDTUFLRV9MSU5LRVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8T0JKRUNUUz4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9IC9vdXQ6PFRBUkdFVD4gL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gL3BkYjo8VEFSR0VUX1BEQj4gL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+JHtfUExBVEZPUk1fTElOS19GTEFHU30gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9MSU5LU30gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiB1bnNldChfQ01BS0VfVlNfTElOS19FWEUpCiB1bnNldChfQ01BS0VfVlNfTElOS19FWEUpCiAKLWlmKENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjguMC4wIikKLSAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTICItV25vLWRlcHJlY2F0ZWQtZ3B1LXRhcmdldHMiKQotZWxzZSgpCi0gIHNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUyAiIikKLWVuZGlmKCkKIAogIyBBZGQgaW1wbGljaXQgaG9zdCBsaW5rIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBkZXZpY2UgbGlicmFyaWVzCiAjIHRvIHRoZSBkZXZpY2UgbGluayBsaW5lLgpAQCAtNTEsMTEgKzQ2LDkgQEAKIHVuc2V0KF9fSU1QTElDVF9ETElOS19ESVJTKQogCiBzZXQoQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZCi0gICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKKyAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVhjb21waWxlcj0tRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiwtRlMke19fSU1QTElDVF9ETElOS19GTEFHU30iKQogc2V0KENNQUtFX0NVREFfREVWSUNFX0xJTktfRVhFQ1VUQUJMRQotICAiPENNQUtFX0NVREFfQ09NUElMRVI+IDxGTEFHUz4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVhjb21waWxlcj0tRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiwtRlMke19fSU1QTElDVF9ETElOS19GTEFHU30iKQotCi11bnNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUykKKyAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8RkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKIHVuc2V0KF9fSU1QTElDVF9ETElOS19GTEFHUykKIAogc3RyaW5nKFJFUExBQ0UgIi9EIiAiLUQiIF9QTEFURk9STV9ERUZJTkVTX0NVREEgIiR7X1BMQVRGT1JNX0RFRklORVN9JHtfUExBVEZPUk1fREVGSU5FU19DWFh9IikKQEAgLTc2LDYgKzY5LDExIEBACiBlbmRpZigpCiB1bnNldChfY21wMDA5MikKIAorc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQgIlNUQVRJQyIpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NUQVRJQyAgImN1ZGFkZXZydDtjdWRhcnRfc3RhdGljIikKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfU0hBUkVEICAiY3VkYWRldnJ0O2N1ZGFydCIpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX05PTkUgICAgIiIpCisKIHN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHU19JTklUICIgJHtQTEFURk9STV9ERUZJTkVTX0NVREF9IC1EX1dJTkRPV1MgLVhjb21waWxlcj1cIiR7X1czfSR7X0ZMQUdTX0NYWH1cIiIpCiBzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1NfREVCVUdfSU5JVCAiIC1YY29tcGlsZXI9XCIke19NRGR9LVppIC1PYjAgLU9kICR7X1JUQzF9XCIiKQogc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTX1JFTEVBU0VfSU5JVCAiIC1YY29tcGlsZXI9XCIke19NRH0tTzIgLU9iMlwiIC1ETkRFQlVHIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1QR0kuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtUEdJLmNtYWtlCmluZGV4IGFkNzdlOGEuLjgxNjYyNDAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1QR0kuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLVBHSS5jbWFrZQpAQCAtOSw5ICs5LDEwIEBACiBzZXQoX19XSU5ET1dTX0NPTVBJTEVSX1BHSSAxKQogCiAjIFBHSSBvbiBXaW5kb3dzIGRvZXNuJ3Qgc3VwcG9ydCBwYXJhbGxlbCBjb21waWxlIHByb2Nlc3NlcwotaWYoTk9UIERFRklORUQgQ01BS0VfSk9CX1BPT0xfTElOSyBPUiBOT1QgREVGSU5FRCBDTUFLRV9KT0JfUE9PTF9DT01QSUxFKQoraWYoTk9UIERFRklORUQgQ01BS0VfSk9CX1BPT0xfTElOSyBPUiBOT1QgREVGSU5FRCBDTUFLRV9KT0JfUE9PTF9DT01QSUxFIE9SIE5PVCBERUZJTkVEIENNQUtFX0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSKQogICBzZXQoQ01BS0VfSk9CX1BPT0xfTElOSyBQR0lUYXNrUG9vbCkKICAgc2V0KENNQUtFX0pPQl9QT09MX0NPTVBJTEUgUEdJVGFza1Bvb2wpCisgIHNldChDTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUiBQR0lUYXNrUG9vbCkKICAgZ2V0X3Byb3BlcnR5KF9wZ2lqcCBHTE9CQUwgUFJPUEVSVFkgSk9CX1BPT0xTKQogICBpZihOT1QgX3BnaWpwIE1BVENIRVMgIlBHSVRhc2tQb29sPSIpCiAgICAgICBzZXRfcHJvcGVydHkoR0xPQkFMIEFQUEVORCBQUk9QRVJUWSBKT0JfUE9PTFMgUEdJVGFza1Bvb2w9MSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1kZi5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1kZi5jbWFrZQppbmRleCBmOTQ4OTE0Li44YjgyNGJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtZGYuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLWRmLmNtYWtlCkBAIC0xMyw3ICsxMyw3IEBACiBzZXQoQ01BS0VfRm9ydHJhbl9NT0RESVJfRkxBRyAiLW1vZHVsZToiKQogCiBzZXQoQ01BS0VfRm9ydHJhbl9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKLSAibGluayAke0NNQUtFX0NMX05PTE9HT30gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICAvb3V0OjxUQVJHRVQ+IC9kbGwgIDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKKyAibGluayAke0NNQUtFX0NMX05PTE9HT30gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9IC9vdXQ6PFRBUkdFVD4gL2RsbCA8TElOS19GTEFHUz4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiAKIHNldChDTUFLRV9Gb3J0cmFuX0NSRUFURV9TSEFSRURfTU9EVUxFICR7Q01BS0VfRm9ydHJhbl9DUkVBVEVfU0hBUkVEX0xJQlJBUll9KQogCkBAIC0yMiw3ICsyMiw3IEBACiAKICMgY29tcGlsZSBhIEMrKyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiAgJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfQ0xfTk9MT0dPfSAvb2JqZWN0OjxPQkpFQ1Q+IDxGTEFHUz4gL2NvbXBpbGVfb25seSA8U09VUkNFPiR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQorICAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfQ0xfTk9MT0dPfSAvb2JqZWN0OjxPQkpFQ1Q+IDxGTEFHUz4gL2NvbXBpbGVfb25seSA8U09VUkNFPiR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQogCiBzZXQoQ01BS0VfRm9ydHJhbl9MSU5LX0VYRUNVVEFCTEUKICAgICAiPENNQUtFX0ZvcnRyYW5fQ09NUElMRVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gPEZMQUdTPiAvZXhlOjxUQVJHRVQ+IDxPQkpFQ1RTPiAvbGluayA8Q01BS0VfRm9ydHJhbl9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzUGhvbmUtQ2xhbmctQVNNLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzUGhvbmUtQ2xhbmctQVNNLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjRjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQaG9uZS1DbGFuZy1BU00uY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLUFTTSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1Bob25lLUdOVS1BU00uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQaG9uZS1HTlUtQVNNLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQaG9uZS1HTlUtQVNNLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoUGxhdGZvcm0vV2luZG93cy1HTlUtQVNNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzU3RvcmUtQ2xhbmctQVNNLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzU3RvcmUtQ2xhbmctQVNNLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjRjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NTdG9yZS1DbGFuZy1BU00uY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLUFTTSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1N0b3JlLUdOVS1BU00uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NTdG9yZS1HTlUtQVNNLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NTdG9yZS1HTlUtQVNNLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoUGxhdGZvcm0vV2luZG93cy1HTlUtQVNNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9lQ29zLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9lQ29zLmNtYWtlCmluZGV4IGUxMjc5ZWYuLjI1ZGIwMjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vZUNvcy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL2VDb3MuY21ha2UKQEAgLTUyLDggKzUyLDggQEAKIGFkZF9kZWZpbml0aW9ucygtRF9fRUNPU19fPTEgLURfX0VDT1M9MSkKIAogIyBzcGVjaWFsIGxpbmsgY29tbWFuZHMgZm9yIGVDb3MgZXhlY3V0YWJsZXMKLXNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0VDT1NfTElCVEFSR0VUX0RJUkVDVE9SWX0gLVR0YXJnZXQubGQgIDxMSU5LX0xJQlJBUklFUz4iKQotc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICAgICI8Q01BS0VfQ19DT01QSUxFUj4gICA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+ICAgPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtTCR7RUNPU19MSUJUQVJHRVRfRElSRUNUT1JZfSAtVHRhcmdldC5sZCAgPExJTktfTElCUkFSSUVTPiIpCitzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1MJHtFQ09TX0xJQlRBUkdFVF9ESVJFQ1RPUll9IC1UdGFyZ2V0LmxkIDxMSU5LX0xJQlJBUklFUz4iKQorc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1MJHtFQ09TX0xJQlRBUkdFVF9ESVJFQ1RPUll9IC1UdGFyZ2V0LmxkIDxMSU5LX0xJQlJBUklFUz4iKQogCiAjIGVDb3MgZG9lc24ndCBzdXBwb3J0IHNoYXJlZCBsaWJzCiBzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUyBGQUxTRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vZ2FzLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9nYXMuY21ha2UKaW5kZXggN2M2NTlmMi4uODQ4NDA3NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9nYXMuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9nYXMuY21ha2UKQEAgLTExLDcgKzExLDcgQEAKICAgICAgICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiAiKQogCiBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9MSU5LRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfTElOS0VSPiA8RkxBR1M+IDxDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogCiAjIHRvIGJlIGRvbmUKIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1F0NE1hY3Jvcy5jbWFrZSBiL01vZHVsZXMvUXQ0TWFjcm9zLmNtYWtlCmluZGV4IDMzY2FjZjEuLmNiNmFlNDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUXQ0TWFjcm9zLmNtYWtlCisrKyBiL01vZHVsZXMvUXQ0TWFjcm9zLmNtYWtlCkBAIC00MzYsNyArNDM2LDcgQEAKICAgICBpZihfbXlfc291cmNlcykKICAgICAgICMgbWFrZSBhIC5wcm8gZmlsZSB0byBjYWxsIGx1cGRhdGUgb24sIHNvIHdlIGRvbid0IG1ha2Ugb3VyIGNvbW1hbmRzIHRvbwogICAgICAgIyBsb25nIGZvciBzb21lIHN5c3RlbXMKLSAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3RzX25hbWUgJHtfdHNfZmlsZX0gTkFNRV9XRSkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3RzX25hbWUgJHtfdHNfZmlsZX0gTkFNRSkKICAgICAgIHNldChfdHNfcHJvICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS8ke190c19uYW1lfV9sdXBkYXRlLnBybykKICAgICAgIHNldChfcHJvX3NyY3MpCiAgICAgICBmb3JlYWNoKF9wcm9fc3JjICR7X215X3NvdXJjZXN9KQpAQCAtNDYzLDEzICs0NjMsMTUgQEAKIG1hY3JvKFFUNF9BRERfVFJBTlNMQVRJT04gX3FtX2ZpbGVzKQogICBmb3JlYWNoIChfY3VycmVudF9GSUxFICR7QVJHTn0pCiAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfYWJzX0ZJTEUgJHtfY3VycmVudF9GSUxFfSBBQlNPTFVURSkKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHFtICR7X2Fic19GSUxFfSBOQU1FX1dFKQotICAgIGdldF9wcm9wZXJ0eShvdXRwdXRfbG9jYXRpb24gU09VUkNFICR7X2Fic19GSUxFfSBQUk9QRVJUWSBPVVRQVVRfTE9DQVRJT04pCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChxbSAke19hYnNfRklMRX0gTkFNRSkKKyAgICAjIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBsYXN0IGRvdCBoYXMgdG8gYmUgY29uc2lkZXJlZCB0aGUgZmlsZSBuYW1lIChpbmNsdWRpbmcgb3RoZXIgZG90cykKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXFwuW14uXSokIiAiIiBGSUxFX05BTUUgJHtxbX0pCisgICAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KG91dHB1dF9sb2NhdGlvbiAke19hYnNfRklMRX0gT1VUUFVUX0xPQ0FUSU9OKQogICAgIGlmKG91dHB1dF9sb2NhdGlvbikKICAgICAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7b3V0cHV0X2xvY2F0aW9ufSIpCi0gICAgICBzZXQocW0gIiR7b3V0cHV0X2xvY2F0aW9ufS8ke3FtfS5xbSIpCisgICAgICBzZXQocW0gIiR7b3V0cHV0X2xvY2F0aW9ufS8ke0ZJTEVfTkFNRX0ucW0iKQogICAgIGVsc2UoKQotICAgICAgc2V0KHFtICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtxbX0ucW0iKQorICAgICAgc2V0KHFtICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtGSUxFX05BTUV9LnFtIikKICAgICBlbmRpZigpCiAKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUICR7cW19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL1Rlc3RCaWdFbmRpYW4uY21ha2UgYi9Nb2R1bGVzL1Rlc3RCaWdFbmRpYW4uY21ha2UKaW5kZXggMGM2ZTE4OC4uOGE3NjliNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9UZXN0QmlnRW5kaWFuLmNtYWtlCisrKyBiL01vZHVsZXMvVGVzdEJpZ0VuZGlhbi5jbWFrZQpAQCAtMTksOCArMTksOCBAQAogCiBtYWNybyhURVNUX0JJR19FTkRJQU4gVkFSSUFCTEUpCiAgIGlmKE5PVCBERUZJTkVEIEhBVkVfJHtWQVJJQUJMRX0pCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGlmIHRoZSBzeXN0ZW0gaXMgYmlnIGVuZGlhbiIpCi0gICAgbWVzc2FnZShTVEFUVVMgIlNlYXJjaGluZyAxNiBiaXQgaW50ZWdlciIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2sgaWYgdGhlIHN5c3RlbSBpcyBiaWcgZW5kaWFuIikKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJTZWFyY2hpbmcgMTYgYml0IGludGVnZXIiKQogCiAgICAgaWYoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQpCiAgICAgICBzZXQoX3Rlc3RfbGFuZ3VhZ2UgIkMiKQpAQCAtMzIsMTkgKzMyLDE5IEBACiAKICAgICBDSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIHNob3J0IiBDTUFLRV9TSVpFT0ZfVU5TSUdORURfU0hPUlQgTEFOR1VBR0UgJHtfdGVzdF9sYW5ndWFnZX0pCiAgICAgaWYoQ01BS0VfU0laRU9GX1VOU0lHTkVEX1NIT1JUIEVRVUFMIDIpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiVXNpbmcgdW5zaWduZWQgc2hvcnQiKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJVc2luZyB1bnNpZ25lZCBzaG9ydCIpCiAgICAgICBzZXQoQ01BS0VfMTZCSVRfVFlQRSAidW5zaWduZWQgc2hvcnQiKQogICAgIGVsc2UoKQogICAgICAgQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBpbnQiICAgQ01BS0VfU0laRU9GX1VOU0lHTkVEX0lOVCBMQU5HVUFHRSAke190ZXN0X2xhbmd1YWdlfSkKICAgICAgIGlmKENNQUtFX1NJWkVPRl9VTlNJR05FRF9JTlQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJVc2luZyB1bnNpZ25lZCBpbnQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlVzaW5nIHVuc2lnbmVkIGludCIpCiAgICAgICAgIHNldChDTUFLRV8xNkJJVF9UWVBFICJ1bnNpZ25lZCBpbnQiKQogCiAgICAgICBlbHNlKCkKIAogICAgICAgICBDSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIGxvbmciICBDTUFLRV9TSVpFT0ZfVU5TSUdORURfTE9ORyBMQU5HVUFHRSAke190ZXN0X2xhbmd1YWdlfSkKICAgICAgICAgaWYoQ01BS0VfU0laRU9GX1VOU0lHTkVEX0xPTkcpCi0gICAgICAgICAgbWVzc2FnZShTVEFUVVMgIlVzaW5nIHVuc2lnbmVkIGxvbmciKQorICAgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiVXNpbmcgdW5zaWduZWQgbG9uZyIpCiAgICAgICAgICAgc2V0KENNQUtFXzE2QklUX1RZUEUgInVuc2lnbmVkIGxvbmciKQogICAgICAgICBlbHNlKCkKICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJubyBzdWl0YWJsZSB0eXBlIGZvdW5kIikKQEAgLTk1LDE1ICs5NSwxNiBAQAogCiAgICAgICAgIGlmKENNQUtFX1RFU1RfRU5ESUFORVNTX1NUUklOR1NfTEUpCiAgICAgICAgICAgc2V0KCR7VkFSSUFCTEV9IDAgQ0FDSEUgSU5URVJOQUwgIlJlc3VsdCBvZiBURVNUX0JJR19FTkRJQU4iIEZPUkNFKQotICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiB0aGUgc3lzdGVtIGlzIGJpZyBlbmRpYW4gLSBsaXR0bGUgZW5kaWFuIikKKyAgICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImxpdHRsZSBlbmRpYW4iKQogICAgICAgICBlbmRpZigpCiAKICAgICAgICAgaWYoQ01BS0VfVEVTVF9FTkRJQU5FU1NfU1RSSU5HU19CRSkKICAgICAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiUmVzdWx0IG9mIFRFU1RfQklHX0VORElBTiIgRk9SQ0UpCi0gICAgICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGlmIHRoZSBzeXN0ZW0gaXMgYmlnIGVuZGlhbiAtIGJpZyBlbmRpYW4iKQorICAgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiYmlnIGVuZGlhbiIpCiAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICBpZihOT1QgQ01BS0VfVEVTVF9FTkRJQU5FU1NfU1RSSU5HU19CRSAgQU5EICBOT1QgQ01BS0VfVEVTVF9FTkRJQU5FU1NfU1RSSU5HU19MRSkKKyAgICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIlRFU1RfQklHX0VORElBTiBmb3VuZCBubyByZXN1bHQhIikKICAgICAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIlRFU1RfQklHX0VORElBTiBmb3VuZCBubyByZXN1bHQhIikKICAgICAgICAgZW5kaWYoKQogCkBAIC0xMTEsNyArMTEyLDcgQEAKICAgICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIHN5c3RlbSBpcyBiaWcgZW5kaWFuIHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5UZXN0RW5kaWFuZXNzLmM6XG4ke1RFU1RfRU5ESUFORVNTX0ZJTEVfQ09OVEVOVH1cblxuIikKIAogICAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiB0aGUgc3lzdGVtIGlzIGJpZyBlbmRpYW4gLSBmYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgImZhaWxlZCIpCiAgICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIHN5c3RlbSBpcyBiaWcgZW5kaWFuIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5UZXN0RW5kaWFuZXNzLmM6XG4ke1RFU1RfRU5ESUFORVNTX0ZJTEVfQ09OVEVOVH1cblxuIikKICAgICAgICAgc2V0KCR7VkFSSUFCTEV9KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9UZXN0Q1hYQWNjZXB0c0ZsYWcuY21ha2UgYi9Nb2R1bGVzL1Rlc3RDWFhBY2NlcHRzRmxhZy5jbWFrZQppbmRleCA5MmEzNjJlLi5jZTUwNWYzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1Rlc3RDWFhBY2NlcHRzRmxhZy5jbWFrZQorKysgYi9Nb2R1bGVzL1Rlc3RDWFhBY2NlcHRzRmxhZy5jbWFrZQpAQCAtMjMsMTkgKzIzLDE5IEBACiAKIG1hY3JvKENIRUNLX0NYWF9BQ0NFUFRTX0ZMQUcgRkxBR1MgIFZBUklBQkxFKQogICBpZihOT1QgREVGSU5FRCAke1ZBUklBQkxFfSkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgdG8gc2VlIGlmIENYWCBjb21waWxlciBhY2NlcHRzIGZsYWcgJHtGTEFHU30iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNraW5nIHRvIHNlZSBpZiBDWFggY29tcGlsZXIgYWNjZXB0cyBmbGFnICR7RkxBR1N9IikKICAgICB0cnlfY29tcGlsZSgke1ZBUklBQkxFfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0R1bW15Q1hYRmlsZS5jeHgKICAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtGTEFHU30KICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAgICAgaWYoJHtWQVJJQUJMRX0pCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgdG8gc2VlIGlmIENYWCBjb21waWxlciBhY2NlcHRzIGZsYWcgJHtGTEFHU30gLSB5ZXMiKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJ5ZXMiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDWFggY29tcGlsZXIgYWNjZXB0cyB0aGUgZmxhZyAke0ZMQUdTfSBwYXNzZWQgd2l0aCAiCiAgICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHRvIHNlZSBpZiBDWFggY29tcGlsZXIgYWNjZXB0cyBmbGFnICR7RkxBR1N9IC0gbm8iKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJubyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIGFjY2VwdHMgdGhlIGZsYWcgJHtGTEFHU30gZmFpbGVkIHdpdGggIgogICAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvVGVzdEZvckFOU0lGb3JTY29wZS5jbWFrZSBiL01vZHVsZXMvVGVzdEZvckFOU0lGb3JTY29wZS5jbWFrZQppbmRleCAyNzJlNGVjLi4wZjJkYzAxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1Rlc3RGb3JBTlNJRm9yU2NvcGUuY21ha2UKKysrIGIvTW9kdWxlcy9UZXN0Rm9yQU5TSUZvclNjb3BlLmNtYWtlCkBAIC0xNiwxOSArMTYsMTkgQEAKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGlmKE5PVCBERUZJTkVEIENNQUtFX0FOU0lfRk9SX1NDT1BFKQotICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIEFOU0kgc2NvcGUiKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVjayBmb3IgQU5TSSBzY29wZSIpCiAgIHRyeV9jb21waWxlKENNQUtFX0FOU0lfRk9SX1NDT1BFICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1Rlc3RGb3JBbnNpRm9yU2NvcGUuY3h4CiAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKICAgaWYgKENNQUtFX0FOU0lfRk9SX1NDT1BFKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3IgQU5TSSBzY29wZSAtIGZvdW5kIikKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICBzZXQgKENNQUtFX05PX0FOU0lfRk9SX1NDT1BFIDAgQ0FDSEUgSU5URVJOQUwKICAgICAgICJEb2VzIHRoZSBjb21waWxlciBzdXBwb3J0IGFuc2kgZm9yIHNjb3BlLiIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGFuc2kgZm9yIHNjb3BlcyBwYXNzZWQgd2l0aCAiCiAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKICAgZWxzZSAoKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3IgQU5TSSBzY29wZSAtIG5vdCBmb3VuZCIpCisgICAgbWVzc2FnZShDSEVDS19GQUlMICJub3QgZm91bmQiKQogICAgIHNldCAoQ01BS0VfTk9fQU5TSV9GT1JfU0NPUEUgMSBDQUNIRSBJTlRFUk5BTAogICAgICAgIkRvZXMgdGhlIGNvbXBpbGVyIHN1cHBvcnQgYW5zaSBmb3Igc2NvcGUuIikKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1Rlc3RGb3JTU1RSRUFNLmNtYWtlIGIvTW9kdWxlcy9UZXN0Rm9yU1NUUkVBTS5jbWFrZQppbmRleCBlNzBkZjAwLi41NDViN2VjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1Rlc3RGb3JTU1RSRUFNLmNtYWtlCisrKyBiL01vZHVsZXMvVGVzdEZvclNTVFJFQU0uY21ha2UKQEAgLTE1LDE5ICsxNSwxOSBAQAogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogaWYoTk9UIERFRklORUQgQ01BS0VfSEFTX0FOU0lfU1RSSU5HX1NUUkVBTSkKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciBzc3RyZWFtIikKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2sgZm9yIHNzdHJlYW0iKQogICB0cnlfY29tcGlsZShDTUFLRV9IQVNfQU5TSV9TVFJJTkdfU1RSRUFNICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1Rlc3RGb3JTU1RSRUFNLmN4eAogICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAgIGlmIChDTUFLRV9IQVNfQU5TSV9TVFJJTkdfU1RSRUFNKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igc3N0cmVhbSAtIGZvdW5kIikKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICBzZXQgKENNQUtFX05PX0FOU0lfU1RSSU5HX1NUUkVBTSAwIENBQ0hFIElOVEVSTkFMCiAgICAgICAgICAiRG9lcyB0aGUgY29tcGlsZXIgc3VwcG9ydCBzc3RyZWFtIikKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDWFggY29tcGlsZXIgaGFzIHNzdHJlYW0gcGFzc2VkIHdpdGggIgogICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCiAgIGVsc2UgKCkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIHNzdHJlYW0gLSBub3QgZm91bmQiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICBzZXQgKENNQUtFX05PX0FOU0lfU1RSSU5HX1NUUkVBTSAxIENBQ0hFIElOVEVSTkFMCiAgICAgICAgIkRvZXMgdGhlIGNvbXBpbGVyIHN1cHBvcnQgc3N0cmVhbSIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9UZXN0Rm9yU1RETmFtZXNwYWNlLmNtYWtlIGIvTW9kdWxlcy9UZXN0Rm9yU1RETmFtZXNwYWNlLmNtYWtlCmluZGV4IDcwM2U2MzEuLmQxMDFjODMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVGVzdEZvclNURE5hbWVzcGFjZS5jbWFrZQorKysgYi9Nb2R1bGVzL1Rlc3RGb3JTVEROYW1lc3BhY2UuY21ha2UKQEAgLTE1LDE5ICsxNSwxOSBAQAogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogaWYoTk9UIERFRklORUQgQ01BS0VfU1REX05BTUVTUEFDRSkKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciBTVEQgbmFtZXNwYWNlIikKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2sgZm9yIFNURCBuYW1lc3BhY2UiKQogICB0cnlfY29tcGlsZShDTUFLRV9TVERfTkFNRVNQQUNFICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1Rlc3RGb3JTVEROYW1lc3BhY2UuY3h4CiAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKICAgaWYgKENNQUtFX1NURF9OQU1FU1BBQ0UpCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciBTVEQgbmFtZXNwYWNlIC0gZm91bmQiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZm91bmQiKQogICAgIHNldCAoQ01BS0VfTk9fU1REX05BTUVTUEFDRSAwIENBQ0hFIElOVEVSTkFMCiAgICAgICAgICAiRG9lcyB0aGUgY29tcGlsZXIgc3VwcG9ydCBzdGQ6Oi4iKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENYWCBjb21waWxlciBoYXMgc3RkIG5hbWVzcGFjZSBwYXNzZWQgd2l0aCAiCiAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKICAgZWxzZSAoKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3IgU1REIG5hbWVzcGFjZSAtIG5vdCBmb3VuZCIpCisgICAgbWVzc2FnZShDSEVDS19GQUlMICJub3QgZm91bmQiKQogICAgIHNldCAoQ01BS0VfTk9fU1REX05BTUVTUEFDRSAxIENBQ0hFIElOVEVSTkFMCiAgICAgICAgIkRvZXMgdGhlIGNvbXBpbGVyIHN1cHBvcnQgc3RkOjouIikKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1VzZUVjb3MuY21ha2UgYi9Nb2R1bGVzL1VzZUVjb3MuY21ha2UKaW5kZXggNjAzMjRiMS4uODNjOWIyMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Vc2VFY29zLmNtYWtlCisrKyBiL01vZHVsZXMvVXNlRWNvcy5jbWFrZQpAQCAtMTg1LDExICsxODUsMTEgQEAKICMgd2hlbiB1c2luZyBubWFrZSBtYWtlZmlsZXMsIHRoZSBjdXN0b20gYnVpbGR0eXBlIHN1cHByZXNzZXMgdGhlIGRlZmF1bHQgY2wuZXhlIGZsYWdzCiAjIGFuZCB0aGUgcnVsZXMgZm9yIGNyZWF0aW5nIG9iamVjdHMgYXJlIGFkanVzdGVkIGZvciBnY2MKICAgc2V0KENNQUtFX0JVSUxEX1RZUEUgQ1VTVE9NX0VDT1NfQlVJTEQpCi0gIHNldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUICAgICAiPENNQUtFX0NfQ09NUElMRVI+ICAgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCisgIHNldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUICAgICAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogIyBzcGVjaWFsIGxpbmsgY29tbWFuZHMgZm9yIGVjb3MtZXhlY3V0YWJsZXMKLSAgc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gJHtfZWNvc19FWFRSQV9MSUJTfSAtbm9zdGRsaWIgIC1ub3N0YXJ0ZmlsZXMgLUwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZWNvcy9pbnN0YWxsL2xpYiAtVHRhcmdldC5sZCAke0VDT1NfTERfTUNQVX0iKQotICBzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAgIDxDTUFLRV9DX0xJTktfRkxBR1M+ICAgPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiAke19lY29zX0VYVFJBX0xJQlN9IC1ub3N0ZGxpYiAgLW5vc3RhcnRmaWxlcyAtTCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9lY29zL2luc3RhbGwvbGliIC1UdGFyZ2V0LmxkICR7RUNPU19MRF9NQ1BVfSIpCisgIHNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gJHtfZWNvc19FWFRSQV9MSUJTfSAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtTCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9lY29zL2luc3RhbGwvbGliIC1UdGFyZ2V0LmxkICR7RUNPU19MRF9NQ1BVfSIpCisgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRSAgICAiPENNQUtFX0NfQ09NUElMRVI+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiAke19lY29zX0VYVFJBX0xJQlN9IC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1MJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2Vjb3MvaW5zdGFsbC9saWIgLVR0YXJnZXQubGQgJHtFQ09TX0xEX01DUFV9IikKICMgc29tZSBzdHJpY3QgY29tcGlsZXIgZmxhZ3MKICAgc2V0IChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1Xc3RyaWN0LXByb3RvdHlwZXMiKQogICBzZXQgKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1Xb3ZlcmxvYWRlZC12aXJ0dWFsIC1mbm8tcnR0aSAtV2N0b3ItZHRvci1wcml2YWN5IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tZXhjZXB0aW9ucyIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1VzZUphdmEuY21ha2UgYi9Nb2R1bGVzL1VzZUphdmEuY21ha2UKaW5kZXggMDc5ODQ4OC4uYjY2OGI5ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Vc2VKYXZhLmNtYWtlCisrKyBiL01vZHVsZXMvVXNlSmF2YS5jbWFrZQpAQCAtNDA1LDkgKzQwNSwxNCBAQAogCiAjIGRlZmluZSBoZWxwZXIgc2NyaXB0cwogc2V0KF9KQVZBX0VYUE9SVF9UQVJHRVRTX1NDUklQVCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2phdmFUYXJnZXRzLmNtYWtlLmluKQotc2V0KF9KQVZBX0NMQVNTX0ZJTEVMSVNUX1NDUklQVCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1VzZUphdmFDbGFzc0ZpbGVsaXN0LmNtYWtlKQogc2V0KF9KQVZBX1NZTUxJTktfU0NSSVBUICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVXNlSmF2YVN5bWxpbmtzLmNtYWtlKQogCitpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgTk9UIENZR1dJTiBBTkQgQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBNQVRDSEVTICJXaW5kb3dzIikKKyAgICBzZXQoX1VzZUphdmFfUEFUSF9TRVAgIiQ8U0VNSUNPTE9OPiIpCitlbHNlICgpCisgICAgc2V0KF9Vc2VKYXZhX1BBVEhfU0VQICI6IikKK2VuZGlmKCkKKwogZnVuY3Rpb24oYWRkX2phciBfVEFSR0VUX05BTUUpCiAKICAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoX2FkZF9qYXIKQEAgLTQ5NywxNCArNTAyLDggQEAKICAgICAgICAgJHtDTUFLRV9KQVZBX0xJQlJBUllfT1VUUFVUX1BBVEh9CiAgICAgKQogCi0gICAgaWYgKENNQUtFX0hPU1RfV0lOMzIgQU5EIE5PVCBDWUdXSU4gQU5EIENNQUtFX0hPU1RfU1lTVEVNX05BTUUgTUFUQ0hFUyAiV2luZG93cyIpCi0gICAgICAgIHNldChDTUFLRV9KQVZBX0lOQ0xVREVfRkxBR19TRVAgIjsiKQotICAgIGVsc2UgKCkKLSAgICAgICAgc2V0KENNQUtFX0pBVkFfSU5DTFVERV9GTEFHX1NFUCAiOiIpCi0gICAgZW5kaWYoKQotCiAgICAgZm9yZWFjaCAoSkFWQV9JTkNMVURFX0RJUiBJTiBMSVNUUyBDTUFLRV9KQVZBX0lOQ0xVREVfUEFUSCkKLSAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFX0pBVkFfSU5DTFVERV9QQVRIX0ZJTkFMICIke0NNQUtFX0pBVkFfSU5DTFVERV9GTEFHX1NFUH0ke0pBVkFfSU5DTFVERV9ESVJ9IikKKyAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFX0pBVkFfSU5DTFVERV9QQVRIX0ZJTkFMICIke19Vc2VKYXZhX1BBVEhfU0VQfSR7SkFWQV9JTkNMVURFX0RJUn0iKQogICAgIGVuZGZvcmVhY2goKQogCiAgICAgc2V0KENNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS8ke19UQVJHRVRfTkFNRX0uZGlyIikKQEAgLTU3Niw3ICs1NzUsNyBAQAogICAgICAgICBpZiAoVEFSR0VUICR7X0pBVkFfSU5DTFVERV9KQVJ9KQogICAgICAgICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfSkFWQV9KQVJfUEFUSCAke19KQVZBX0lOQ0xVREVfSkFSfSBKQVJfRklMRSkKICAgICAgICAgICAgIGlmIChfSkFWQV9KQVJfUEFUSCkKLSAgICAgICAgICAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFX0pBVkFfSU5DTFVERV9QQVRIX0ZJTkFMICIke0NNQUtFX0pBVkFfSU5DTFVERV9GTEFHX1NFUH0ke19KQVZBX0pBUl9QQVRIfSIpCisgICAgICAgICAgICAgICAgc3RyaW5nKEFQUEVORCBDTUFLRV9KQVZBX0lOQ0xVREVfUEFUSF9GSU5BTCAiJHtfVXNlSmF2YV9QQVRIX1NFUH0ke19KQVZBX0pBUl9QQVRIfSIpCiAgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEggJHtfSkFWQV9KQVJfUEFUSH0pCiAgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgX0pBVkFfREVQRU5EUyAke19KQVZBX0lOQ0xVREVfSkFSfSkKICAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBfSkFWQV9DT01QSUxFX0RFUEVORFMgJHtfSkFWQV9KQVJfUEFUSH0pCkBAIC01ODQsNyArNTgzLDcgQEAKICAgICAgICAgICAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgImFkZF9qYXI6IElOQ0xVREVfSkFSUyB0YXJnZXQgJHtfSkFWQV9JTkNMVURFX0pBUn0gaXMgbm90IGEgamFyIikKICAgICAgICAgICAgIGVuZGlmICgpCiAgICAgICAgIGVsc2UgKCkKLSAgICAgICAgICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEhfRklOQUwgIiR7Q01BS0VfSkFWQV9JTkNMVURFX0ZMQUdfU0VQfSR7X0pBVkFfSU5DTFVERV9KQVJ9IikKKyAgICAgICAgICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEhfRklOQUwgIiR7X1VzZUphdmFfUEFUSF9TRVB9JHtfSkFWQV9JTkNMVURFX0pBUn0iKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEggIiR7X0pBVkFfSU5DTFVERV9KQVJ9IikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIF9KQVZBX0RFUEVORFMgIiR7X0pBVkFfSU5DTFVERV9KQVJ9IikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIF9KQVZBX0NPTVBJTEVfREVQRU5EUyAiJHtfSkFWQV9JTkNMVURFX0pBUn0iKQpAQCAtNjI3LDcgKzYyNiw3IEBACiAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0KICAgICAgICAgICAgICAgICAtRENNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEg9JHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfQogICAgICAgICAgICAgICAgIC1EQ01BS0VfSkFSX0NMQVNTRVNfUFJFRklYPSIke0NNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWH0iCi0gICAgICAgICAgICAgICAgLVAgJHtfSkFWQV9DTEFTU19GSUxFTElTVF9TQ1JJUFR9CisgICAgICAgICAgICAgICAgLVAgJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9Vc2VKYXZhQ2xhc3NGaWxlbGlzdC5jbWFrZQogICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEh9L2phdmFfY29tcGlsZWRfJHtfVEFSR0VUX05BTUV9CiAgICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0KICAgICAgICAgKQpAQCAtMTE5MCw1NSArMTE4OSw0MCBAQAogICAgIHNldChfamF2YWRvY19vcHRpb25zIC1kICR7X2phdmFkb2NfYnVpbGRkaXJ9KQogCiAgICAgaWYgKF9qYXZhZG9jX3NvdXJjZXBhdGgpCi0gICAgICAgIHNldChfc3RhcnQgVFJVRSkKLSAgICAgICAgZm9yZWFjaChfcGF0aCBJTiBMSVNUUyBfamF2YWRvY19zb3VyY2VwYXRoKQotICAgICAgICAgICAgaWYgKF9zdGFydCkKLSAgICAgICAgICAgICAgICBzZXQoX3NvdXJjZXBhdGggJHtfcGF0aH0pCi0gICAgICAgICAgICAgICAgc2V0KF9zdGFydCBGQUxTRSkKLSAgICAgICAgICAgIGVsc2UgKCkKLSAgICAgICAgICAgICAgICBzZXQoX3NvdXJjZXBhdGggJHtfc291cmNlcGF0aH06JHtfcGF0aH0pCi0gICAgICAgICAgICBlbmRpZiAoKQotICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtc291cmNlcGF0aCAke19zb3VyY2VwYXRofSkKKyAgICAgICAgbGlzdChKT0lOIF9qYXZhZG9jX3NvdXJjZXBhdGggIiR7X1VzZUphdmFfUEFUSF9TRVB9IiBfamF2YWRvY19zb3VyY2VwYXRoKQorICAgICAgICBsaXN0KEFQUEVORCBfamF2YWRvY19vcHRpb25zIC1zb3VyY2VwYXRoICJcIiR7X2phdmFkb2Nfc291cmNlcGF0aH1cIiIpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChfamF2YWRvY19jbGFzc3BhdGgpCi0gICAgICAgIHNldChfc3RhcnQgVFJVRSkKLSAgICAgICAgZm9yZWFjaChfcGF0aCBJTiBMSVNUUyBfamF2YWRvY19jbGFzc3BhdGgpCi0gICAgICAgICAgICBpZiAoX3N0YXJ0KQotICAgICAgICAgICAgICAgIHNldChfY2xhc3NwYXRoICR7X3BhdGh9KQotICAgICAgICAgICAgICAgIHNldChfc3RhcnQgRkFMU0UpCi0gICAgICAgICAgICBlbHNlICgpCi0gICAgICAgICAgICAgICAgc2V0KF9jbGFzc3BhdGggJHtfY2xhc3NwYXRofToke19wYXRofSkKLSAgICAgICAgICAgIGVuZGlmICgpCi0gICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBzZXQoX2phdmFkb2Nfb3B0aW9ucyAke19qYXZhZG9jX29wdGlvbnN9IC1jbGFzc3BhdGggIiR7X2NsYXNzcGF0aH0iKQorICAgICAgICBsaXN0KEpPSU4gX2phdmFkb2NfY2xhc3NwYXRoICIke19Vc2VKYXZhX1BBVEhfU0VQfSIgX2phdmFkb2NfY2xhc3NwYXRoKQorICAgICAgICBsaXN0KEFQUEVORCBfamF2YWRvY19vcHRpb25zIC1jbGFzc3BhdGggIlwiJHtfamF2YWRvY19jbGFzc3BhdGh9XCIiKQogICAgIGVuZGlmICgpCiAKICAgICBpZiAoX2phdmFkb2NfZG9jdGl0bGUpCi0gICAgICAgIHNldChfamF2YWRvY19vcHRpb25zICR7X2phdmFkb2Nfb3B0aW9uc30gLWRvY3RpdGxlICcke19qYXZhZG9jX2RvY3RpdGxlfScpCisgICAgICAgIGxpc3QoQVBQRU5EIF9qYXZhZG9jX29wdGlvbnMgLWRvY3RpdGxlICcke19qYXZhZG9jX2RvY3RpdGxlfScpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChfamF2YWRvY193aW5kb3d0aXRsZSkKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtd2luZG93dGl0bGUgJyR7X2phdmFkb2Nfd2luZG93dGl0bGV9JykKKyAgICAgICAgbGlzdChBUFBFTkQgX2phdmFkb2Nfb3B0aW9ucyAtd2luZG93dGl0bGUgJyR7X2phdmFkb2Nfd2luZG93dGl0bGV9JykKICAgICBlbmRpZiAoKQogCiAgICAgaWYgKF9qYXZhZG9jX2F1dGhvcikKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtYXV0aG9yKQorICAgICAgICBsaXN0KEFQUEVORCBfamF2YWRvY19vcHRpb25zIC1hdXRob3IpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChfamF2YWRvY191c2UpCi0gICAgICAgIHNldChfamF2YWRvY19vcHRpb25zICR7X2phdmFkb2Nfb3B0aW9uc30gLXVzZSkKKyAgICAgICAgbGlzdChBUFBFTkQgX2phdmFkb2Nfb3B0aW9ucyAtdXNlKQogICAgIGVuZGlmICgpCiAKICAgICBpZiAoX2phdmFkb2NfdmVyc2lvbikKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtdmVyc2lvbikKKyAgICAgICAgbGlzdChBUFBFTkQgX2phdmFkb2Nfb3B0aW9ucyAtdmVyc2lvbikKICAgICBlbmRpZiAoKQogCiAgICAgYWRkX2N1c3RvbV90YXJnZXQoJHtfdGFyZ2V0fV9qYXZhZG9jIEFMTAotICAgICAgICBDT01NQU5EICR7SmF2YV9KQVZBRE9DX0VYRUNVVEFCTEV9ICR7X2phdmFkb2Nfb3B0aW9uc30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke19qYXZhZG9jX2ZpbGVzfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X2phdmFkb2NfcGFja2FnZXN9CisgICAgICAgIENPTU1BTkQgJHtKYXZhX0pBVkFET0NfRVhFQ1VUQUJMRX0KKyAgICAgICAgICAgICAgICAke19qYXZhZG9jX29wdGlvbnN9CisgICAgICAgICAgICAgICAgJHtfamF2YWRvY19maWxlc30KKyAgICAgICAgICAgICAgICAke19qYXZhZG9jX3BhY2thZ2VzfQogICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0KICAgICApCiAKQEAgLTEyNzQsMTEgKzEyNTgsNiBAQAogICAgIGVuZGlmKCkKIAogICAgIHNldCAoX291dHB1dF9maWxlcykKLSAgICBpZiAoV0lOMzIgQU5EIE5PVCBDWUdXSU4gQU5EIENNQUtFX0hPU1RfU1lTVEVNX05BTUUgTUFUQ0hFUyAiV2luZG93cyIpCi0gICAgICBzZXQoX2NsYXNzcGF0aF9zZXAgIiQ8U0VNSUNPTE9OPiIpCi0gICAgZWxzZSAoKQotICAgICAgc2V0KF9jbGFzc3BhdGhfc2VwICI6IikKLSAgICBlbmRpZigpCiAKICAgICAjIGhhbmRsZSBqYXZhaCBvcHRpb25zCiAgICAgc2V0IChfamF2YWhfb3B0aW9ucykKQEAgLTEzMDQsNyArMTI4Myw3IEBACiAgICAgICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJjcmVhdGVfamF2YWg6IENMQVNTUEFUSCBlbnRyeSAke19wYXRofSBkb2VzIG5vdCBleGlzdC4iKQogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgIHN0cmluZyAoUkVQTEFDRSAiOyIgIiR7X2NsYXNzcGF0aF9zZXB9IiBfY2xhc3NwYXRoICIke19jbGFzc3BhdGh9IikKKyAgICAgIHN0cmluZyAoUkVQTEFDRSAiOyIgIiR7X1VzZUphdmFfUEFUSF9TRVB9IiBfY2xhc3NwYXRoICIke19jbGFzc3BhdGh9IikKICAgICAgIGxpc3QgKEFQUEVORCBfamF2YWhfb3B0aW9ucyAtY2xhc3NwYXRoICIke19jbGFzc3BhdGh9IikKICAgICBlbmRpZigpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvVXNlU1dJRy5jbWFrZSBiL01vZHVsZXMvVXNlU1dJRy5jbWFrZQppbmRleCA3ODUyMmRhLi5mNmEyMGY4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1VzZVNXSUcuY21ha2UKKysrIGIvTW9kdWxlcy9Vc2VTV0lHLmNtYWtlCkBAIC0zNDEsNiArMzQxLDIzIEBACiAgICAgbGlzdChBUFBFTkQgZmlsZXMgIiR7ZXh0cmFfZmlsZX0iKQogICBlbmRmb3JlYWNoKCkKIAorICBpZiAobGFuZ3VhZ2UgU1RSRVFVQUwgIkZPUlRSQU4iIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKKyAgICAjIFByb2Nlc3MgcG9zc2libGUgdXNlci1zdXBwbGllZCBleHRlbnNpb24gaW4gZmxhZ3MgKG9idGFpbmVkIHZpYSBwYXJlbnQKKyAgICAjIHNjb3BlIHZhcmlhYmxlKSB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisgICAgbGlzdChGSU5EIFNXSUdfQ09NUElMQVRJT05fRkxBR1MgIi1mZXh0IiBmZXh0X2lkeCkKKyAgICBpZiAoZmV4dF9pZHggRVFVQUwgLTEpCisgICAgICAjIERlZmF1bHQgRm9ydHJhbiBnZW5lcmF0ZWQgZXh0ZW5zaW9uCisgICAgICBzZXQoZmV4dCAiZjkwIikKKyAgICBlbHNlKCkKKyAgICAgICMgR2V0IGV4dGVuc2lvbiBmcm9tIHVzZXItcHJvdmlkZWQgZmxhZworICAgICAgbWF0aChFWFBSIGZleHRfaWR4ICIke2ZleHRfaWR4fSArIDEiKQorICAgICAgbGlzdChHRVQgU1dJR19DT01QSUxBVElPTl9GTEFHUyAiJHtmZXh0X2lkeH0iIGZleHQpCisgICAgZW5kaWYoKQorICAgIHNldChleHRyYV9maWxlICIke2dlbmVyYXRlZHBhdGh9LyR7bW9kdWxlX2Jhc2VuYW1lfS4ke2ZleHR9IikKKyAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7ZXh0cmFfZmlsZX0iIFBST1BFUlRJRVMgTEFOR1VBR0UgIkZvcnRyYW4iKQorICAgIGxpc3QoQVBQRU5EIGZpbGVzICIke2V4dHJhX2ZpbGV9IikKKyAgZW5kaWYoKQorCiAgIHNldCAoJHtvdXRmaWxlc30gJHtmaWxlc30gUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC00MTUsNiArNDMyLDcgQEAKICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChzd2lnX3NvdXJjZV9maWxlX2Z1bGxuYW1lICIke2luZmlsZX0iIEFCU09MVVRFKQogCiAgIGlmIChOT1QgU1dJR19NT0RVTEVfJHtuYW1lfV9OT1BST1hZKQorICAgIHNldChTV0lHX0NPTVBJTEFUSU9OX0ZMQUdTICR7c3dpZ19zb3VyY2VfZmlsZV9mbGFnc30pCiAgICAgU1dJR19HRVRfRVhUUkFfT1VUUFVUX0ZJTEVTKCR7U1dJR19NT0RVTEVfJHtuYW1lfV9MQU5HVUFHRX0KICAgICAgIHN3aWdfZXh0cmFfZ2VuZXJhdGVkX2ZpbGVzCiAgICAgICAiJHtvdXRkaXJ9IgpAQCAtNzg3LDYgKzgwNSw4IEBACiAgICAgaWYgKEFQUExFKQogICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzICgke3RhcmdldF9uYW1lfSBQUk9QRVJUSUVTIFNVRkZJWCAiLmR5bGliIikKICAgICBlbmRpZiAoKQorICBlbHNlaWYgKHN3aWdfbG93ZXJjYXNlX2xhbmd1YWdlIFNUUkVRVUFMICJmb3J0cmFuIikKKyAgICAjIERvICpub3QqIG92ZXJyaWRlIHRoZSB0YXJnZXQncyBsaWJyYXJ5IHByZWZpeAogICBlbHNlKCkKICAgICAjIGFzc3VtZSBlbXB0eSBwcmVmaXggYmVjYXVzZSB3ZSBleHBlY3QgdGhlIG1vZHVsZSB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQKICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMgKCR7dGFyZ2V0X25hbWV9IFBST1BFUlRJRVMgUFJFRklYICIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0NNYWtlTGlzdHMudHh0CmluZGV4IGIxZjdiMjkuLjU2NGU2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKQEAgLTEsNiArMSwxMSBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgogCisjIFRvIGVuc3VyZSBtYXhpbXVtIHBvcnRhYmlsaXR5IGFjcm9zcyB2YXJpb3VzIGNvbXBpbGVycyBhbmQgcGxhdGZvcm1zCisjIGRlYWN0aXZhdGUgYW55IGNvbXBpbGVyIGV4dGVuc2lvbnMKK3NldChDTUFLRV9DX0VYVEVOU0lPTlMgRkFMU0UpCitzZXQoQ01BS0VfQ1hYX0VYVEVOU0lPTlMgRkFMU0UpCisKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZSkKICMgQ2hlY2sgaWYgd2UgY2FuIGJ1aWxkIHN1cHBvcnQgZm9yIEVMRiBwYXJzaW5nLgogaWYoQ01BS0VfQ1hYX1BMQVRGT1JNX0lEIE1BVENIRVMgIk9wZW5CU0QiKQpAQCAtMTM0LDYgKzEzOSw5IEBACiAgIExleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKICAgTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyVG9rZW5zLmgKICAgTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyLnkKKyAgTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuY3h4CisgIExleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmgKKyAgTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaW4ubAogICBMZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuYwogICBMZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuaW4ubAogCkBAIC0yNzAsNiArMjc4LDEwIEBACiAgIGNtRm9ydHJhblBhcnNlckltcGwuY3h4CiAgIGNtRlNQZXJtaXNzaW9ucy5jeHgKICAgY21GU1Blcm1pc3Npb25zLmgKKyAgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuY3h4CisgIGNtR2NjRGVwZmlsZUxleGVySGVscGVyLmgKKyAgY21HY2NEZXBmaWxlUmVhZGVyLmN4eAorICBjbUdjY0RlcGZpbGVSZWFkZXIuaAogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0uY3h4CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuY3h4CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaApAQCAtMjg5LDYgKzMwMSw4IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oCiAgIGNtR2VuZXJhdG9yVGFyZ2V0LmN4eAogICBjbUdlbmVyYXRvclRhcmdldC5oCisgIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IuY3h4CisgIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IuaAogICBjbUdldFBpcGVzLmN4eAogICBjbUdldFBpcGVzLmgKICAgY21HbG9iYWxDb21tb25HZW5lcmF0b3IuY3h4CkBAIC0zNDUsNiArMzU5LDcgQEAKICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHgKICAgY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4CiAgIGNtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eAorICBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5jeHgKICAgY21NYWtlZmlsZVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CiAgIGNtTWVzc2FnZVR5cGUuaAogICBjbU1lc3Nlbmdlci5jeHgKQEAgLTQ3NSw2ICs0OTAsOCBAQAogICBjbUJ1aWxkQ29tbWFuZC5oCiAgIGNtQnVpbGROYW1lQ29tbWFuZC5jeHgKICAgY21CdWlsZE5hbWVDb21tYW5kLmgKKyAgY21DTWFrZUNvbW1hbmQuY3h4CisgIGNtQ01ha2VDb21tYW5kLmgKICAgY21DTWFrZUhvc3RTeXN0ZW1JbmZvcm1hdGlvbkNvbW1hbmQuY3h4CiAgIGNtQ01ha2VIb3N0U3lzdGVtSW5mb3JtYXRpb25Db21tYW5kLmgKICAgY21DTWFrZU1pbmltdW1SZXF1aXJlZC5jeHgKQEAgLTY5MSw2ICs3MDgsOCBAQAogCiAgIGNtRHVyYXRpb24uaAogICBjbUR1cmF0aW9uLmN4eAorCisgIGJpbmRleHBsaWIuY3h4CiAgICkKIAogU0VUX1BST1BFUlRZKFNPVVJDRSBjbVByb2Nlc3NPdXRwdXQuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCkBAIC03MTMsNyArNzMyLDYgQEAKICAgc2V0KFNSQ1MgJHtTUkNTfQogICAgIGNtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eAogICAgIGNtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmgKLSAgICBiaW5kZXhwbGliLmN4eAogICAgICkKIAogICBpZihOT1QgVU5JWCkKQEAgLTExOTMsNiArMTIxMSwxMSBAQAogICBlbmRmb3JlYWNoKCkKIGVuZGlmKCkKIAoraWYoQ01ha2VfSk9CX1BPT0xfTElOS19CSU4pCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtfdG9vbHN9IFBST1BFUlRZIEpPQl9QT09MX0xJTksgImxpbmstYmluIikKKyAgc2V0X3Byb3BlcnR5KEdMT0JBTCBBUFBFTkQgUFJPUEVSVFkgSk9CX1BPT0xTICJsaW5rLWJpbj0ke0NNYWtlX0pPQl9QT09MX0xJTktfQklOfSIpCitlbmRpZigpCisKICMgSW5zdGFsbCB0b29scwogCiBmb3JlYWNoKF90b29sICR7X3Rvb2xzfSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UgYi9Tb3VyY2UvQ01ha2VWZXJzaW9uLmNtYWtlCmluZGV4IDZhOGQyZmMuLmIzN2UxZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UKKysrIGIvU291cmNlL0NNYWtlVmVyc2lvbi5jbWFrZQpAQCAtMSw3ICsxLDcgQEAKICMgQ01ha2UgdmVyc2lvbiBudW1iZXIgY29tcG9uZW50cy4KIHNldChDTWFrZV9WRVJTSU9OX01BSk9SIDMpCi1zZXQoQ01ha2VfVkVSU0lPTl9NSU5PUiAxNikKLXNldChDTWFrZV9WRVJTSU9OX1BBVENIIDUpCitzZXQoQ01ha2VfVkVSU0lPTl9NSU5PUiAxNykKK3NldChDTWFrZV9WRVJTSU9OX1BBVENIIDIwMjAwMzMxKQogI3NldChDTWFrZV9WRVJTSU9OX1JDIDApCiBzZXQoQ01ha2VfVkVSU0lPTl9JU19ESVJUWSAwKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXR2VuZXJhdG9yLmN4eAppbmRleCA1MDlhYzY1Li4yODA2YzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0dlbmVyYXRvci5jeHgKQEAgLTU0NCwxMCArNTQ0LDcgQEAKICAgaWYgKGdyb3VwLT5QYXJlbnRHcm91cCkgewogICAgIGNtQ1BhY2tJRldQYWNrYWdlKiBwYWNrYWdlID0gdGhpcy0+R2V0R3JvdXBQYWNrYWdlKGdyb3VwLT5QYXJlbnRHcm91cCk7CiAgICAgYm9vbCBkb3QgPSAhdGhpcy0+UmVzb2x2ZUR1cGxpY2F0ZU5hbWVzOwotICAgIGlmIChkb3QgJiYgbmFtZS5zdWJzdHIoMCwgcGFja2FnZS0+TmFtZS5zaXplKCkpID09IHBhY2thZ2UtPk5hbWUpIHsKLSAgICAgIGRvdCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZG90KSB7CisgICAgaWYgKGRvdCAmJiAhY21IYXNQcmVmaXgobmFtZSwgcGFja2FnZS0+TmFtZSkpIHsKICAgICAgIG5hbWUgPSBwYWNrYWdlLT5OYW1lICsgIi4iICsgbmFtZTsKICAgICB9CiAgIH0KQEAgLTU3NiwxMCArNTczLDcgQEAKICAgICAgIHJldHVybiBwYWNrYWdlLT5OYW1lOwogICAgIH0KICAgICBib29sIGRvdCA9ICF0aGlzLT5SZXNvbHZlRHVwbGljYXRlTmFtZXM7Ci0gICAgaWYgKGRvdCAmJiBuYW1lLnN1YnN0cigwLCBwYWNrYWdlLT5OYW1lLnNpemUoKSkgPT0gcGFja2FnZS0+TmFtZSkgewotICAgICAgZG90ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb3QpIHsKKyAgICBpZiAoZG90ICYmICFjbUhhc1ByZWZpeChuYW1lLCBwYWNrYWdlLT5OYW1lKSkgewogICAgICAgbmFtZSA9IHBhY2thZ2UtPk5hbWUgKyAiLiIgKyBuYW1lOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXUGFja2FnZS5jeHggYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldQYWNrYWdlLmN4eAppbmRleCA5YTljZDU2Li41NmE3NGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldQYWNrYWdlLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldQYWNrYWdlLmN4eApAQCAtNTUsOCArNTUsNyBAQAogICBpZiAoZGFzaFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHBvcyA9IGRhc2hQb3M7CiAgIH0KLSAgdGhpcy0+TmFtZSA9Ci0gICAgcG9zID09IHN0ZDo6c3RyaW5nOjpucG9zID8gZGVwZW5kZW5jZSA6IGRlcGVuZGVuY2Uuc3Vic3RyKDAsIHBvcyk7CisgIHRoaXMtPk5hbWUgPSBkZXBlbmRlbmNlLnN1YnN0cigwLCBwb3MpOwogfQogCiBzdGQ6OnN0cmluZyBjbUNQYWNrSUZXUGFja2FnZTo6RGVwZW5kZW5jZVN0cnVjdDo6TmFtZVdpdGhDb21wYXJlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9PU1hTY3JpcHRMYXVuY2hlci5jeHggYi9Tb3VyY2UvQ1BhY2svT1NYU2NyaXB0TGF1bmNoZXIuY3h4CmluZGV4IDIxZDI3YTAuLmJkYWY3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9PU1hTY3JpcHRMYXVuY2hlci5jeHgKKysrIGIvU291cmNlL0NQYWNrL09TWFNjcmlwdExhdW5jaGVyLmN4eApAQCAtNSw2ICs1LDggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtMjYsNyArMjgsNiBAQAogICBDRlN0cmluZ1JlZiBmaWxlTmFtZTsKICAgQ0ZCdW5kbGVSZWYgYXBwQnVuZGxlOwogICBDRlVSTFJlZiBzY3JpcHRGaWxlVVJMOwotICBVSW50OCogcGF0aDsKIAogICAvLyBnZXQgQ0YgVVJMIGZvciBzY3JpcHQKICAgaWYgKCEoYXBwQnVuZGxlID0gQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCkpKSB7CkBAIC00MSwxMyArNDIsMTUgQEAKICAgfQogCiAgIC8vIGNyZWF0ZSBwYXRoIHN0cmluZwotICBpZiAoIShwYXRoID0gbmV3IFVJbnQ4W1BBVEhfTUFYXSkpIHsKKyAgYXV0byBwYXRoID0gY206Om1ha2VfdW5pcXVlPFVJbnQ4W10+KFBBVEhfTUFYKTsKKyAgaWYgKCFwYXRoKSB7CiAgICAgcmV0dXJuIDE7CiAgIH0KIAogICAvLyBnZXQgdGhlIGZpbGUgc3lzdGVtIHBhdGggb2YgdGhlIHVybCBhcyBhIGNzdHJpbmcKICAgLy8gaW4gYW4gZW5jb2Rpbmcgc3VpdGFibGUgZm9yIHBvc2l4IGFwaXMKLSAgaWYgKCFDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzY3JpcHRGaWxlVVJMLCB0cnVlLCBwYXRoLCBQQVRIX01BWCkpIHsKKyAgaWYgKCFDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzY3JpcHRGaWxlVVJMLCB0cnVlLCBwYXRoLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYKSkgewogICAgIERlYnVnRXJyb3IoIkNGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uIGZhaWxlZCIpOwogICAgIHJldHVybiAxOwogICB9CkBAIC01NSwxMCArNTgsMTAgQEAKICAgLy8gZGlzcG9zZSBvZiB0aGUgQ0YgdmFyaWFibGUKICAgQ0ZSZWxlYXNlKHNjcmlwdEZpbGVVUkwpOwogCi0gIHN0ZDo6c3RyaW5nIGZ1bGxTY3JpcHRQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF0aCk7Ci0gIGRlbGV0ZVtdIHBhdGg7CisgIHN0ZDo6c3RyaW5nIGZ1bGxTY3JpcHRQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF0aC5nZXQoKSk7CisgIHBhdGgucmVzZXQoKTsKIAotICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsU2NyaXB0UGF0aC5jX3N0cigpKSkgeworICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsU2NyaXB0UGF0aCkpIHsKICAgICByZXR1cm4gMTsKICAgfQogCkBAIC04MCw3ICs4Myw2IEBACiAgIGNtc3lzUHJvY2Vzc19TZXRUaW1lb3V0KGNwLCAwKTsKICAgY21zeXNQcm9jZXNzX0V4ZWN1dGUoY3ApOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBPdXRwdXQ7CiAgIGNoYXIqIGRhdGE7CiAgIGludCBsZW5ndGg7CiAgIHdoaWxlIChjbXN5c1Byb2Nlc3NfV2FpdEZvckRhdGEoY3AsICZkYXRhLCAmbGVuZ3RoLCBudWxscHRyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9XaVgvY21DUGFja1dJWEdlbmVyYXRvci5jeHgKaW5kZXggZTcxYTM4Zi4uZTQ4MWQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKQEAgLTM1LDIyICszNiwxNiBAQAogI2luY2x1ZGUgImNtQ01ha2VUb1dpeFBhdGguaCIKIAogY21DUGFja1dJWEdlbmVyYXRvcjo6Y21DUGFja1dJWEdlbmVyYXRvcigpCi0gIDogUGF0Y2goMCkKLSAgLCBDb21wb25lbnRHdWlkVHlwZShjbVdJWFNvdXJjZVdyaXRlcjo6V0lYX0dFTkVSQVRFRF9HVUlEKQorICA6IENvbXBvbmVudEd1aWRUeXBlKGNtV0lYU291cmNlV3JpdGVyOjpXSVhfR0VORVJBVEVEX0dVSUQpCiB7CiB9CiAKLWNtQ1BhY2tXSVhHZW5lcmF0b3I6On5jbUNQYWNrV0lYR2VuZXJhdG9yKCkKLXsKLSAgaWYgKHRoaXMtPlBhdGNoKSB7Ci0gICAgZGVsZXRlIHRoaXMtPlBhdGNoOwotICB9Ci19CitjbUNQYWNrV0lYR2VuZXJhdG9yOjp+Y21DUGFja1dJWEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogaW50IGNtQ1BhY2tXSVhHZW5lcmF0b3I6OkluaXRpYWxpemVJbnRlcm5hbCgpCiB7CiAgIGNvbXBvbmVudFBhY2thZ2VNZXRob2QgPSBPTkVfUEFDS0FHRTsKLSAgdGhpcy0+UGF0Y2ggPSBuZXcgY21XSVhQYXRjaCh0aGlzLT5Mb2dnZXIpOworICB0aGlzLT5QYXRjaCA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoPih0aGlzLT5Mb2dnZXIpOwogCiAgIHJldHVybiB0aGlzLT5TdXBlcmNsYXNzOjpJbml0aWFsaXplSW50ZXJuYWwoKTsKIH0KQEAgLTEwMyw3ICs5OCw3IEBACiAgICAgY29tbWFuZCA8PCAiIC1leHQgIiA8PCBRdW90ZVBhdGgoZXh0KTsKICAgfQogCi0gIGlmIChzb3VyY2VGaWxlLnJmaW5kKHRoaXMtPkNQYWNrVG9wTGV2ZWwsIDApICE9IDApIHsKKyAgaWYgKCFjbUhhc1N1ZmZpeChzb3VyY2VGaWxlLCB0aGlzLT5DUGFja1RvcExldmVsKSkgewogICAgIGNvbW1hbmQgPDwgIiAiIDw8IFF1b3RlUGF0aCgiLUkiICsgdGhpcy0+Q1BhY2tUb3BMZXZlbCk7CiAgIH0KIApAQCAtMzU1LDggKzM1MCw3IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRpb25zID0gR2V0T3B0aW9ucygpOwogCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiBvcHRpb25zKSB7Ci0gICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBwcmVmaXgubGVuZ3RoKCkgJiYKLSAgICAgICAgbmFtZS5zdWJzdHIoMCwgcHJlZml4Lmxlbmd0aCgpKSA9PSBwcmVmaXgpIHsKKyAgICBpZiAoY21IYXNQcmVmaXgobmFtZSwgcHJlZml4KSkgewogICAgICAgc3RkOjpzdHJpbmcgaWQgPSBuYW1lLnN1YnN0cihwcmVmaXgubGVuZ3RoKCkpOwogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBHZXRPcHRpb24obmFtZS5jX3N0cigpKTsKIApAQCAtMTEwNCwxNCArMTA5OCwxNCBAQAogICBjbUNyeXB0b0hhc2ggc2hhMShjbUNyeXB0b0hhc2g6OkFsZ29TSEExKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgaGFzaCA9IHNoYTEuSGFzaFN0cmluZyhwYXRoKTsKIAotICBzdGQ6OnN0cmluZyBpZGVudGlmaWVyID0gY21TdHJDYXQoY206OnN0cmluZ192aWV3KGhhc2gpLnN1YnN0cigwLCA3KSwgJ18nKTsKLQogICBjb25zdCBzaXplX3QgbWF4RmlsZU5hbWVMZW5ndGggPSA1MjsKKyAgc3RkOjpzdHJpbmcgaWRlbnRpZmllciA9CisgICAgY21TdHJDYXQoY206OnN0cmluZ192aWV3KGhhc2gpLnN1YnN0cigwLCA3KSwgJ18nLAorICAgICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhub3JtYWxpemVkRmlsZW5hbWUpLnN1YnN0cigwLCBtYXhGaWxlTmFtZUxlbmd0aCkpOworCisgIC8vIGlmIHRoZSBuYW1lIHdhcyB0cnVuY2F0ZWQKICAgaWYgKG5vcm1hbGl6ZWRGaWxlbmFtZS5sZW5ndGgoKSA+IG1heEZpbGVOYW1lTGVuZ3RoKSB7Ci0gICAgaWRlbnRpZmllciArPSBub3JtYWxpemVkRmlsZW5hbWUuc3Vic3RyKDAsIG1heEZpbGVOYW1lTGVuZ3RoIC0gMyk7CiAgICAgaWRlbnRpZmllciArPSAiLi4uIjsKLSAgfSBlbHNlIHsKLSAgICBpZGVudGlmaWVyICs9IG5vcm1hbGl6ZWRGaWxlbmFtZTsKICAgfQogCiAgIHJldHVybiBpZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaAppbmRleCBkMTkzMzQ4Li5kNWExNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaApAQCAtNCw2ICs0LDcgQEAKICNkZWZpbmUgY21DUGFja1dJWEdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKQEAgLTI0LDYgKzI1LDggQEAKICAgY21DUGFja1R5cGVNYWNybyhjbUNQYWNrV0lYR2VuZXJhdG9yLCBjbUNQYWNrR2VuZXJhdG9yKTsKIAogICBjbUNQYWNrV0lYR2VuZXJhdG9yKCk7CisgIGNtQ1BhY2tXSVhHZW5lcmF0b3IoY29uc3QgY21DUGFja1dJWEdlbmVyYXRvciYpID0gZGVsZXRlOworICBjb25zdCBjbUNQYWNrV0lYR2VuZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgY21DUGFja1dJWEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21DUGFja1dJWEdlbmVyYXRvcigpOwogCiBwcm90ZWN0ZWQ6CkBAIC0xNTcsNyArMTYwLDcgQEAKIAogICBzdGQ6OnN0cmluZyBDUGFja1RvcExldmVsOwogCi0gIGNtV0lYUGF0Y2gqIFBhdGNoOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21XSVhQYXRjaD4gUGF0Y2g7CiAKICAgY21XSVhTb3VyY2VXcml0ZXI6Okd1aWRUeXBlIENvbXBvbmVudEd1aWRUeXBlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhBY2Nlc3NDb250cm9sTGlzdC5jeHggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYQWNjZXNzQ29udHJvbExpc3QuY3h4CmluZGV4IDM2NjhiNDYuLjk2ODVhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhBY2Nlc3NDb250cm9sTGlzdC5jeHgKKysrIGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWEFjY2Vzc0NvbnRyb2xMaXN0LmN4eApAQCAtMiw2ICsyLDggQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtV0lYQWNjZXNzQ29udHJvbExpc3QuaCIKIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTM1LDEyICszNywxMyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIHVzZXJfYW5kX2RvbWFpbiA9IGVudHJ5LnN1YnN0cigwLCBwb3MpOwotICBzdGQ6OnN0cmluZyBwZXJtaXNzaW9uX3N0cmluZyA9IGVudHJ5LnN1YnN0cihwb3MgKyAxKTsKKyAgY206OnN0cmluZ192aWV3IGVudmlldyhlbnRyeSk7CisgIGNtOjpzdHJpbmdfdmlldyB1c2VyX2FuZF9kb21haW4gPSBlbnZpZXcuc3Vic3RyKDAsIHBvcyk7CisgIGNtOjpzdHJpbmdfdmlldyBwZXJtaXNzaW9uX3N0cmluZyA9IGVudmlldy5zdWJzdHIocG9zICsgMSk7CiAKICAgcG9zID0gdXNlcl9hbmRfZG9tYWluLmZpbmQoJ0AnKTsKLSAgc3RkOjpzdHJpbmcgdXNlcjsKLSAgc3RkOjpzdHJpbmcgZG9tYWluOworICBjbTo6c3RyaW5nX3ZpZXcgdXNlcjsKKyAgY206OnN0cmluZ192aWV3IGRvbWFpbjsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHVzZXIgPSB1c2VyX2FuZF9kb21haW4uc3Vic3RyKDAsIHBvcyk7CiAgICAgZG9tYWluID0gdXNlcl9hbmRfZG9tYWluLnN1YnN0cihwb3MgKyAxKTsKQEAgLTUxLDkgKzU0LDkgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBlcm1pc3Npb25zID0gY21Ub2tlbml6ZShwZXJtaXNzaW9uX3N0cmluZywgIiwiKTsKIAogICB0aGlzLT5Tb3VyY2VXcml0ZXIuQmVnaW5FbGVtZW50KCJQZXJtaXNzaW9uIik7Ci0gIHRoaXMtPlNvdXJjZVdyaXRlci5BZGRBdHRyaWJ1dGUoIlVzZXIiLCB1c2VyKTsKKyAgdGhpcy0+U291cmNlV3JpdGVyLkFkZEF0dHJpYnV0ZSgiVXNlciIsIHN0ZDo6c3RyaW5nKHVzZXIpKTsKICAgaWYgKCFkb21haW4uZW1wdHkoKSkgewotICAgIHRoaXMtPlNvdXJjZVdyaXRlci5BZGRBdHRyaWJ1dGUoIkRvbWFpbiIsIGRvbWFpbik7CisgICAgdGhpcy0+U291cmNlV3JpdGVyLkFkZEF0dHJpYnV0ZSgiRG9tYWluIiwgc3RkOjpzdHJpbmcoZG9tYWluKSk7CiAgIH0KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcGVybWlzc2lvbiA6IHBlcm1pc3Npb25zKSB7CiAgICAgdGhpcy0+RW1pdEJvb2xlYW5BdHRyaWJ1dGUoZW50cnksIGNtVHJpbVdoaXRlc3BhY2UocGVybWlzc2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbVdJWEZpbGVzU291cmNlV3JpdGVyLmN4eCBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhGaWxlc1NvdXJjZVdyaXRlci5jeHgKaW5kZXggYzBkODc5YS4uYjQwODVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL1dpWC9jbVdJWEZpbGVzU291cmNlV3JpdGVyLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYRmlsZXNTb3VyY2VXcml0ZXIuY3h4CkBAIC0xLDUgKzEsMTAgQEAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisvLyBGb3IgU19JV1JJVEUgc3ltYm9sCisjICBkZWZpbmUgX0RFRkFVTFRfU09VUkNFCisjZW5kaWYKKwogI2luY2x1ZGUgImNtV0lYRmlsZXNTb3VyY2VXcml0ZXIuaCIKIAogI2luY2x1ZGUgImNtX3N5c19zdGF0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2guY3h4IGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWFBhdGNoLmN4eAppbmRleCBjYTIzMmY5Li4xMjJmZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2guY3h4CisrKyBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaC5jeHgKQEAgLTQxLDcgKzQxLDcgQEAKIHZvaWQgY21XSVhQYXRjaDo6QXBwbHlFbGVtZW50Q2hpbGRyZW4oY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtV0lYU291cmNlV3JpdGVyJiB3cml0ZXIpCiB7Ci0gIGZvciAoY21XSVhQYXRjaE5vZGUqIG5vZGUgOiBlbGVtZW50LmNoaWxkcmVuKSB7CisgIGZvciAoY29uc3QgYXV0byYgbm9kZSA6IGVsZW1lbnQuY2hpbGRyZW4pIHsKICAgICBzd2l0Y2ggKG5vZGUtPnR5cGUoKSkgewogICAgICAgY2FzZSBjbVdJWFBhdGNoTm9kZTo6RUxFTUVOVDoKICAgICAgICAgQXBwbHlFbGVtZW50KGR5bmFtaWNfY2FzdDxjb25zdCBjbVdJWFBhdGNoRWxlbWVudCY+KCpub2RlKSwgd3JpdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5jeHggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2hQYXJzZXIuY3h4CmluZGV4IGZkOTEwM2IuLjU1ODhkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5jeHgKKysrIGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWFBhdGNoUGFyc2VyLmN4eApAQCAtMiw2ICsyLDEwIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVdJWFBhdGNoUGFyc2VyLmgiCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21fZXhwYXQuaCIKIAogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKQEAgLTIwLDEyICsyNCw4IEBACiB7CiB9CiAKLWNtV0lYUGF0Y2hFbGVtZW50Ojp+Y21XSVhQYXRjaEVsZW1lbnQoKQotewotICBmb3IgKGNtV0lYUGF0Y2hOb2RlKiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgZGVsZXRlIGNoaWxkOwotICB9Ci19CitjbVdJWFBhdGNoRWxlbWVudDo6Y21XSVhQYXRjaEVsZW1lbnQoKSA9IGRlZmF1bHQ7CitjbVdJWFBhdGNoRWxlbWVudDo6fmNtV0lYUGF0Y2hFbGVtZW50KCkgPSBkZWZhdWx0OwogCiBjbVdJWFBhdGNoUGFyc2VyOjpjbVdJWFBhdGNoUGFyc2VyKGZyYWdtZW50X21hcF90JiBmcmFnbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ1BhY2tMb2cqIGxvZ2dlcikKQEAgLTU0LDggKzU0LDcgQEAKICAgfSBlbHNlIGlmIChTdGF0ZSA9PSBJTlNJREVfRlJBR01FTlQpIHsKICAgICBjbVdJWFBhdGNoRWxlbWVudCYgcGFyZW50ID0gKkVsZW1lbnRTdGFjay5iYWNrKCk7CiAKLSAgICBjbVdJWFBhdGNoRWxlbWVudCogZWxlbWVudCA9IG5ldyBjbVdJWFBhdGNoRWxlbWVudDsKLSAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIGF1dG8gZWxlbWVudCA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoRWxlbWVudD4oKTsKIAogICAgIGVsZW1lbnQtPm5hbWUgPSBuYW1lOwogCkBAIC02Niw3ICs2NSw4IEBACiAgICAgICBlbGVtZW50LT5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTsKICAgICB9CiAKLSAgICBFbGVtZW50U3RhY2sucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIEVsZW1lbnRTdGFjay5wdXNoX2JhY2soZWxlbWVudC5nZXQoKSk7CisgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayhzdGQ6Om1vdmUoZWxlbWVudCkpOwogICB9CiB9CiAKQEAgLTEzMCwxMCArMTMwLDEwIEBACiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBsYXN0ID0gdGV4dC5maW5kX2xhc3Rfbm90X29mKHdoaXRlc3BhY2UpOwogCiAgICAgaWYgKGZpcnN0ICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGxhc3QgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgIGNtV0lYUGF0Y2hUZXh0KiB0ZXh0X25vZGUgPSBuZXcgY21XSVhQYXRjaFRleHQ7CisgICAgICBhdXRvIHRleHRfbm9kZSA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoVGV4dD4oKTsKICAgICAgIHRleHRfbm9kZS0+dGV4dCA9IHRleHQuc3Vic3RyKGZpcnN0LCBsYXN0IC0gZmlyc3QgKyAxKTsKIAotICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayh0ZXh0X25vZGUpOworICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayhzdGQ6Om1vdmUodGV4dF9ub2RlKSk7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2hQYXJzZXIuaCBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCmluZGV4IDg3ZGQ4OTIuLjhkNWQyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCisrKyBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUNQYWNrV0lYUGF0Y2hQYXJzZXJfaAogCiAjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC0zMyw5ICszNCwxNCBAQAogewogICB2aXJ0dWFsIFR5cGUgdHlwZSgpOwogCisgIGNtV0lYUGF0Y2hFbGVtZW50KCk7CisKKyAgY21XSVhQYXRjaEVsZW1lbnQoY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBjbVdJWFBhdGNoRWxlbWVudCYpID0gZGVsZXRlOworCiAgIH5jbVdJWFBhdGNoRWxlbWVudCgpOwogCi0gIHVzaW5nIGNoaWxkX2xpc3RfdCA9IHN0ZDo6dmVjdG9yPGNtV0lYUGF0Y2hOb2RlKj47CisgIHVzaW5nIGNoaWxkX2xpc3RfdCA9IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVdJWFBhdGNoTm9kZT4+OwogICB1c2luZyBhdHRyaWJ1dGVzX3QgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OwogCiAgIHN0ZDo6c3RyaW5nIG5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5jeHgKaW5kZXggZWE3MTAwNy4uZmU3YWJmNCAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmN4eApAQCAtMTM4LDExICsxMzgsMTYgQEAKICAgICB9CiAgICAgZm9yIChhdXRvIGNvbnN0JiBsYW5ndWFnZSA6IGxhbmd1YWdlcykgewogICAgICAgc3RkOjpzdHJpbmcgbGljZW5zZSA9IHNsYURpcmVjdG9yeSArICIvIiArIGxhbmd1YWdlICsgIi5saWNlbnNlLnR4dCI7Ci0gICAgICBpZiAoIXNpbmdsZUxpY2Vuc2UgJiYgIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobGljZW5zZSkpIHsKLSAgICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgIk1pc3NpbmcgbGljZW5zZSBmaWxlICIgPDwgbGFuZ3VhZ2UgPDwgIi5saWNlbnNlLnR4dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgIHN0ZDo6c3RyaW5nIGxpY2Vuc2VfcnRmID0gc2xhRGlyZWN0b3J5ICsgIi8iICsgbGFuZ3VhZ2UgKyAiLmxpY2Vuc2UucnRmIjsKKyAgICAgIGlmICghc2luZ2xlTGljZW5zZSkgeworICAgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobGljZW5zZSkgJiYKKyAgICAgICAgICAgICFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGxpY2Vuc2VfcnRmKSkgeworICAgICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3NpbmcgbGljZW5zZSBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgbGFuZ3VhZ2UgPDwgIi5saWNlbnNlLnR4dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAvICIgPDwgbGFuZ3VhZ2UgPDwgIi5saWNlbnNlLnJ0ZiIgPDwgc3RkOjplbmRsKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgbWVudSA9IHNsYURpcmVjdG9yeSArICIvIiArIGxhbmd1YWdlICsgIi5tZW51LnR4dCI7CiAgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobWVudSkpIHsKQEAgLTc3NSw2ICs3ODAsMTEgQEAKICAgICB9CiAgIH0KIAorICBzdGQ6OnN0cmluZyBjb21wb25lbnRGaWxlTmFtZSA9CisgICAgIkNQQUNLX0RNR18iICsgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbXBvbmVudE5hbWUpICsgIl9GSUxFX05BTUUiOworICBpZiAodGhpcy0+SXNTZXQoY29tcG9uZW50RmlsZU5hbWUpKSB7CisgICAgcmV0dXJuIHRoaXMtPkdldE9wdGlvbihjb21wb25lbnRGaWxlTmFtZSk7CisgIH0KICAgcmV0dXJuIEdldENvbXBvbmVudFBhY2thZ2VGaWxlTmFtZShwYWNrYWdlX2ZpbGVfbmFtZSwgY29tcG9uZW50TmFtZSwgZmFsc2UpOwogfQogCkBAIC03ODgsMTMgKzc5OCwyOSBAQAogICAgIGxpY2Vuc2VMYW5ndWFnZSA9ICJFbmdsaXNoIjsKICAgfQogCisgIC8vIExpY2Vuc2UgZmlsZQorICBzdGQ6OnN0cmluZyBsaWNlbnNlX2Zvcm1hdCA9ICJURVhUIjsKKyAgc3RkOjpzdHJpbmcgYWN0dWFsX2xpY2Vuc2U7CisgIGlmICghbGljZW5zZUZpbGUuZW1wdHkoKSkgeworICAgIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobGljZW5zZUZpbGUsICIucnRmIikpIHsKKyAgICAgIGxpY2Vuc2VfZm9ybWF0ID0gIlJURiAiOworICAgIH0KKyAgICBhY3R1YWxfbGljZW5zZSA9IGxpY2Vuc2VGaWxlOworICB9IGVsc2UgeworICAgIHN0ZDo6c3RyaW5nIGxpY2Vuc2Vfd29fZXh0ID0KKyAgICAgIHNsYURpcmVjdG9yeSArICIvIiArIGxpY2Vuc2VMYW5ndWFnZSArICIubGljZW5zZSI7CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobGljZW5zZV93b19leHQgKyAiLnR4dCIpKSB7CisgICAgICBhY3R1YWxfbGljZW5zZSA9IGxpY2Vuc2Vfd29fZXh0ICsgIi50eHQiOworICAgIH0gZWxzZSB7CisgICAgICBsaWNlbnNlX2Zvcm1hdCA9ICJSVEYgIjsKKyAgICAgIGFjdHVhbF9saWNlbnNlID0gbGljZW5zZV93b19leHQgKyAiLnJ0ZiI7CisgICAgfQorICB9CisKICAgLy8gTGljZW5zZSBoZWFkZXIKLSAgb3V0cHV0U3RyZWFtIDw8ICJkYXRhICdURVhUJyAoIiA8PCBsaWNlbnNlTnVtYmVyIDw8ICIsIFwiIiA8PCBsaWNlbnNlTGFuZ3VhZ2UKLSAgICAgICAgICAgICAgIDw8ICJcIikge1xuIjsKKyAgb3V0cHV0U3RyZWFtIDw8ICJkYXRhICciIDw8IGxpY2Vuc2VfZm9ybWF0IDw8ICInICgiIDw8IGxpY2Vuc2VOdW1iZXIKKyAgICAgICAgICAgICAgIDw8ICIsIFwiIiA8PCBsaWNlbnNlTGFuZ3VhZ2UgPDwgIlwiKSB7XG4iOwogICAvLyBMaWNlbnNlIGJvZHkKLSAgc3RkOjpzdHJpbmcgYWN0dWFsX2xpY2Vuc2UgPSAhbGljZW5zZUZpbGUuZW1wdHkoKQotICAgID8gbGljZW5zZUZpbGUKLSAgICA6IChzbGFEaXJlY3RvcnkgKyAiLyIgKyBsaWNlbnNlTGFuZ3VhZ2UgKyAiLmxpY2Vuc2UudHh0Iik7CiAgIGNtc3lzOjppZnN0cmVhbSBsaWNlbnNlX2lmczsKICAgbGljZW5zZV9pZnMub3BlbihhY3R1YWxfbGljZW5zZS5jX3N0cigpKTsKICAgaWYgKGxpY2Vuc2VfaWZzLmlzX29wZW4oKSkgewpAQCAtODczLDggKzg5OSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKQogewogICBjb25zdCBzaXplX3QgbWF4X2xpbmVfbGVuZ3RoID0gNTEyOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmUuc2l6ZSgpOyBpICs9IG1heF9saW5lX2xlbmd0aCkgewotICAgIHNpemVfdCBsaW5lX2xlbmd0aCA9IG1heF9saW5lX2xlbmd0aDsKKyAgc2l6ZV90IGxpbmVfbGVuZ3RoID0gbWF4X2xpbmVfbGVuZ3RoOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmUuc2l6ZSgpOyBpICs9IGxpbmVfbGVuZ3RoKSB7CisgICAgbGluZV9sZW5ndGggPSBtYXhfbGluZV9sZW5ndGg7CiAgICAgaWYgKGkgKyBsaW5lX2xlbmd0aCA+IGxpbmUuc2l6ZSgpKSB7CiAgICAgICBsaW5lX2xlbmd0aCA9IGxpbmUuc2l6ZSgpIC0gaTsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tHZW5lcmF0b3IuY3h4CmluZGV4IDY2OThmM2MuLjcxMmViNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0dlbmVyYXRvci5jeHgKQEAgLTYyMSw5ICs2MjEsOSBAQAogICAgICAgICBidWlsZENvbmZpZ3MuZW1wbGFjZV9iYWNrKCk7CiAgICAgICB9CiAKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2xvYmFsR2VuZXJhdG9yKAorICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBnbG9iYWxHZW5lcmF0b3IgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZU1hcC0+R2V0Q01ha2VJbnN0YW5jZSgpLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoCi0gICAgICAgICAgY21ha2VHZW5lcmF0b3IpKTsKKyAgICAgICAgICBjbWFrZUdlbmVyYXRvcik7CiAgICAgICBpZiAoIWdsb2JhbEdlbmVyYXRvcikgewogICAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAiU3BlY2lmaWVkIHBhY2thZ2UgZ2VuZXJhdG9yIG5vdCBmb3VuZC4gIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuY3h4CmluZGV4IGNhNjc1ZmQuLjQ5ZTQxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrTG9nLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5jeHgKQEAgLTQsNTQgKzQsMzggQEAKIAogI2luY2x1ZGUgPGlvc3RyZWFtPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBjbUNQYWNrTG9nOjpjbUNQYWNrTG9nKCkKIHsKLSAgdGhpcy0+VmVyYm9zZSA9IGZhbHNlOwotICB0aGlzLT5EZWJ1ZyA9IGZhbHNlOwotICB0aGlzLT5RdWlldCA9IGZhbHNlOwotICB0aGlzLT5OZXdMaW5lID0gdHJ1ZTsKLQotICB0aGlzLT5MYXN0VGFnID0gY21DUGFja0xvZzo6Tk9UQUc7CiAgIHRoaXMtPkRlZmF1bHRPdXRwdXQgPSAmc3RkOjpjb3V0OwogICB0aGlzLT5EZWZhdWx0RXJyb3IgPSAmc3RkOjpjZXJyOwotCi0gIHRoaXMtPkxvZ091dHB1dCA9IG51bGxwdHI7Ci0gIHRoaXMtPkxvZ091dHB1dENsZWFudXAgPSBmYWxzZTsKIH0KIAotY21DUGFja0xvZzo6fmNtQ1BhY2tMb2coKQotewotICB0aGlzLT5TZXRMb2dPdXRwdXRTdHJlYW0obnVsbHB0cik7Ci19CitjbUNQYWNrTG9nOjp+Y21DUGFja0xvZygpID0gZGVmYXVsdDsKIAogdm9pZCBjbUNQYWNrTG9nOjpTZXRMb2dPdXRwdXRTdHJlYW0oc3RkOjpvc3RyZWFtKiBvcykKIHsKLSAgaWYgKHRoaXMtPkxvZ091dHB1dENsZWFudXAgJiYgdGhpcy0+TG9nT3V0cHV0KSB7Ci0gICAgZGVsZXRlIHRoaXMtPkxvZ091dHB1dDsKLSAgfQotICB0aGlzLT5Mb2dPdXRwdXRDbGVhbnVwID0gZmFsc2U7CisgIHRoaXMtPkxvZ091dHB1dFN0cmVhbS5yZXNldCgpOwogICB0aGlzLT5Mb2dPdXRwdXQgPSBvczsKIH0KIAogYm9vbCBjbUNQYWNrTG9nOjpTZXRMb2dPdXRwdXRGaWxlKGNvbnN0IGNoYXIqIGZuYW1lKQogewotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIGNnID0gbnVsbHB0cjsKKyAgdGhpcy0+TG9nT3V0cHV0U3RyZWFtLnJlc2V0KCk7CiAgIGlmIChmbmFtZSkgewotICAgIGNnID0gbmV3IGNtR2VuZXJhdGVkRmlsZVN0cmVhbShmbmFtZSk7CisgICAgdGhpcy0+TG9nT3V0cHV0U3RyZWFtID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oZm5hbWUpOwogICB9Ci0gIGlmIChjZyAmJiAhKmNnKSB7Ci0gICAgZGVsZXRlIGNnOwotICAgIGNnID0gbnVsbHB0cjsKKyAgaWYgKHRoaXMtPkxvZ091dHB1dFN0cmVhbSAmJiAhKnRoaXMtPkxvZ091dHB1dFN0cmVhbSkgeworICAgIHRoaXMtPkxvZ091dHB1dFN0cmVhbS5yZXNldCgpOwogICB9Ci0gIHRoaXMtPlNldExvZ091dHB1dFN0cmVhbShjZyk7Ci0gIGlmICghY2cpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgdGhpcy0+TG9nT3V0cHV0Q2xlYW51cCA9IHRydWU7Ci0gIHJldHVybiB0cnVlOworCisgIHRoaXMtPkxvZ091dHB1dCA9IHRoaXMtPkxvZ091dHB1dFN0cmVhbS5nZXQoKTsKKworICByZXR1cm4gdGhpcy0+TG9nT3V0cHV0ICE9IG51bGxwdHI7CiB9CiAKIHZvaWQgY21DUGFja0xvZzo6TG9nKGludCB0YWcsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBtc2csCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuaAppbmRleCAxY2IxNjQzLi42OGZmY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTG9nLmgKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogCkBAIC05NywxMyArOTgsMTMgQEAKICAgdm9pZCBTZXRFcnJvclByZWZpeChzdGQ6OnN0cmluZyBjb25zdCYgcGZ4KSB7IHRoaXMtPkVycm9yUHJlZml4ID0gcGZ4OyB9CiAKIHByaXZhdGU6Ci0gIGJvb2wgVmVyYm9zZTsKLSAgYm9vbCBEZWJ1ZzsKLSAgYm9vbCBRdWlldDsKKyAgYm9vbCBWZXJib3NlID0gZmFsc2U7CisgIGJvb2wgRGVidWcgPSBmYWxzZTsKKyAgYm9vbCBRdWlldCA9IGZhbHNlOwogCi0gIGJvb2wgTmV3TGluZTsKKyAgYm9vbCBOZXdMaW5lID0gdHJ1ZTsKIAotICBpbnQgTGFzdFRhZzsKKyAgaW50IExhc3RUYWcgPSBjbUNQYWNrTG9nOjpOT1RBRzsKIAogICBzdGQ6OnN0cmluZyBQcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIE91dHB1dFByZWZpeDsKQEAgLTExMiwxMyArMTEzLDExIEBACiAgIHN0ZDo6c3RyaW5nIFdhcm5pbmdQcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIEVycm9yUHJlZml4OwogCi0gIHN0ZDo6b3N0cmVhbSogRGVmYXVsdE91dHB1dDsKLSAgc3RkOjpvc3RyZWFtKiBEZWZhdWx0RXJyb3I7CisgIHN0ZDo6b3N0cmVhbSogRGVmYXVsdE91dHB1dCA9IG51bGxwdHI7CisgIHN0ZDo6b3N0cmVhbSogRGVmYXVsdEVycm9yID0gbnVsbHB0cjsKIAotICBzdGQ6OnN0cmluZyBMb2dPdXRwdXRGaWxlTmFtZTsKLSAgc3RkOjpvc3RyZWFtKiBMb2dPdXRwdXQ7Ci0gIC8vIERvIHdlIG5lZWQgdG8gY2xlYW51cCBsb2cgb3V0cHV0IHN0cmVhbQotICBib29sIExvZ091dHB1dENsZWFudXA7CisgIHN0ZDo6b3N0cmVhbSogTG9nT3V0cHV0ID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmVhbT4gTG9nT3V0cHV0U3RyZWFtOwogfTsKIAogY2xhc3MgY21DUGFja0xvZ1dyaXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tOU0lTR2VuZXJhdG9yLmN4eAppbmRleCA5YmY3MmRmLi42YjMwNDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5jeHgKQEAgLTY4LDcgKzY4LDcgQEAKIAogICAgICAgLy8gVXNlIHRoZSBjdXN0b20gY29tcG9uZW50IGluc3RhbGwgZGlyZWN0b3J5IGlmIHdlIGhhdmUgb25lCiAgICAgICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbXBvbmVudE5hbWUgPSBmaWxlTi5zdWJzdHIoMCwgcG9zKTsKKyAgICAgICAgYXV0byBjb21wb25lbnROYW1lID0gY206OnN0cmluZ192aWV3KGZpbGVOKS5zdWJzdHIoMCwgcG9zKTsKICAgICAgICAgb3V0cHV0RGlyID0gQ3VzdG9tQ29tcG9uZW50SW5zdGFsbERpcmVjdG9yeShjb21wb25lbnROYW1lKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIG91dHB1dERpciA9IEN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoZmlsZU4pOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGNvbXBvbmVudE5hbWUgPSBmaWxlTi5zdWJzdHIoMCwgc2xhc2gpOwogCiAgICAgICAgIC8vIFN0cmlwIG9mZiB0aGUgY29tcG9uZW50IHBhcnQgb2YgdGhlIHBhdGguCi0gICAgICAgIGZpbGVOID0gZmlsZU4uc3Vic3RyKHNsYXNoICsgMSk7CisgICAgICAgIGZpbGVOLmVyYXNlKDAsIHNsYXNoICsgMSk7CiAgICAgICB9CiAgICAgfQogICAgIHN0ZDo6cmVwbGFjZShmaWxlTi5iZWdpbigpLCBmaWxlTi5lbmQoKSwgJy8nLCAnXFwnKTsKQEAgLTEyOCwyMiArMTI4LDI2IEBACiAgICAgICB0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19NVUlfVU5JSUNPTiIpKSB7CiAgICAgc3RkOjpzdHJpbmcgaW5zdGFsbGVySWNvbkNvZGU7CiAgICAgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19OU0lTX01VSV9JQ09OIikpIHsKLSAgICAgIGluc3RhbGxlckljb25Db2RlICs9ICIhZGVmaW5lIE1VSV9JQ09OIFwiIjsKLSAgICAgIGluc3RhbGxlckljb25Db2RlICs9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU19NVUlfSUNPTiIpOwotICAgICAgaW5zdGFsbGVySWNvbkNvZGUgKz0gIlwiXG4iOworICAgICAgaW5zdGFsbGVySWNvbkNvZGUgKz0gY21TdHJDYXQoCisgICAgICAgICIhZGVmaW5lIE1VSV9JQ09OIFwiIiwgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19OU0lTX01VSV9JQ09OIiksICJcIlxuIik7CiAgICAgfQogICAgIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19NVUlfVU5JSUNPTiIpKSB7Ci0gICAgICBpbnN0YWxsZXJJY29uQ29kZSArPSAiIWRlZmluZSBNVUlfVU5JQ09OIFwiIjsKLSAgICAgIGluc3RhbGxlckljb25Db2RlICs9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU19NVUlfVU5JSUNPTiIpOwotICAgICAgaW5zdGFsbGVySWNvbkNvZGUgKz0gIlwiXG4iOworICAgICAgaW5zdGFsbGVySWNvbkNvZGUgKz0KKyAgICAgICAgY21TdHJDYXQoIiFkZWZpbmUgTVVJX1VOSUNPTiBcIiIsCisgICAgICAgICAgICAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU19NVUlfVU5JSUNPTiIpLCAiXCJcbiIpOwogICAgIH0KICAgICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfTlNJU19JTlNUQUxMRVJfTVVJX0lDT05fQ09ERSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVySWNvbkNvZGUuY19zdHIoKSk7CiAgIH0KLSAgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19QQUNLQUdFX0lDT04iKSkgewotICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxlckljb25Db2RlID0KLSAgICAgIGNtU3RyQ2F0KCIhZGVmaW5lIE1VSV9IRUFERVJJTUFHRV9CSVRNQVAgXCIiLAotICAgICAgICAgICAgICAgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19QQUNLQUdFX0lDT04iKSwgIlwiXG4iKTsKKyAgc3RkOjpzdHJpbmcgaW5zdGFsbGVySGVhZGVySW1hZ2U7CisgIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19NVUlfSEVBREVSSU1BR0UiKSkgeworICAgIGluc3RhbGxlckhlYWRlckltYWdlID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19OU0lTX01VSV9IRUFERVJJTUFHRSIpOworICB9IGVsc2UgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19QQUNLQUdFX0lDT04iKSkgeworICAgIGluc3RhbGxlckhlYWRlckltYWdlID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19QQUNLQUdFX0lDT04iKTsKKyAgfQorICBpZiAoIWluc3RhbGxlckhlYWRlckltYWdlLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnN0cmluZyBpbnN0YWxsZXJJY29uQ29kZSA9IGNtU3RyQ2F0KAorICAgICAgIiFkZWZpbmUgTVVJX0hFQURFUklNQUdFX0JJVE1BUCBcIiIsIGluc3RhbGxlckhlYWRlckltYWdlLCAiXCJcbiIpOwogICAgIHRoaXMtPlNldE9wdGlvbklmTm90U2V0KCJDUEFDS19OU0lTX0lOU1RBTExFUl9JQ09OX0NPREUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlckljb25Db2RlLmNfc3RyKCkpOwogICB9CkBAIC0xNzMsNiArMTc3LDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyUnVuQ29kZS5jX3N0cigpKTsKICAgfQogCisgIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19XRUxDT01FX1RJVExFIikpIHsKKyAgICBzdGQ6OnN0cmluZyB3ZWxjb21lVGl0bGVDb2RlID0KKyAgICAgIGNtU3RyQ2F0KCIhZGVmaW5lIE1VSV9XRUxDT01FUEFHRV9USVRMRSBcIiIsCisgICAgICAgICAgICAgICB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX05TSVNfV0VMQ09NRV9USVRMRSIpLCAiXCIiKTsKKyAgICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfTlNJU19JTlNUQUxMRVJfV0VMQ09NRV9USVRMRV9DT0RFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGVDb2RlLmNfc3RyKCkpOworICB9CisKKyAgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19OU0lTX1dFTENPTUVfVElUTEVfM0xJTkVTIikpIHsKKyAgICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfTlNJU19JTlNUQUxMRVJfV0VMQ09NRV9USVRMRV8zTElORVNfQ09ERSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiFkZWZpbmUgTVVJX1dFTENPTUVQQUdFX1RJVExFXzNMSU5FUyIpOworICB9CisKKyAgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19OU0lTX0ZJTklTSF9USVRMRSIpKSB7CisgICAgc3RkOjpzdHJpbmcgZmluaXNoVGl0bGVDb2RlID0KKyAgICAgIGNtU3RyQ2F0KCIhZGVmaW5lIE1VSV9GSU5JU0hQQUdFX1RJVExFIFwiIiwKKyAgICAgICAgICAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU19GSU5JU0hfVElUTEUiKSwgIlwiIik7CisgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfSU5TVEFMTEVSX0ZJTklTSF9USVRMRV9DT0RFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUaXRsZUNvZGUuY19zdHIoKSk7CisgIH0KKworICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX05TSVNfRklOSVNIX1RJVExFXzNMSU5FUyIpKSB7CisgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfSU5TVEFMTEVSX0ZJTklTSF9USVRMRV8zTElORVNfQ09ERSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiFkZWZpbmUgTVVJX0ZJTklTSFBBR0VfVElUTEVfM0xJTkVTIik7CisgIH0KKwogICAvLyBTZXR1cCBhbGwgb2YgdGhlIGNvbXBvbmVudCBzZWN0aW9ucwogICBpZiAodGhpcy0+Q29tcG9uZW50cy5lbXB0eSgpKSB7CiAgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfSU5TVEFMTEFUSU9OX1RZUEVTIiwgIiIpOwpAQCAtNjQyLDcgKzY3Miw3IEBACiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcG9uZW50T3V0cHV0RGlyID0KICAgICBDdXN0b21Db21wb25lbnRJbnN0YWxsRGlyZWN0b3J5KGNvbXBvbmVudC0+TmFtZSk7Ci0gIGNvbXBvbmVudENvZGUgKz0gIiAgU2V0T3V0UGF0aCBcIiIgKyBjb21wb25lbnRPdXRwdXREaXIgKyAiXCJcbiI7CisgIGNvbXBvbmVudENvZGUgKz0gY21TdHJDYXQoIiAgU2V0T3V0UGF0aCBcIiIsIGNvbXBvbmVudE91dHB1dERpciwgIlwiXG4iKTsKIAogICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBpbnN0YWxsYXRpb24gY29tbWFuZHMKICAgaWYgKGNvbXBvbmVudC0+SXNEb3dubG9hZGVkKSB7CkBAIC04OTEsMTIgKzkyMSwxMSBAQAogfQogCiBzdGQ6OnN0cmluZyBjbUNQYWNrTlNJU0dlbmVyYXRvcjo6Q3VzdG9tQ29tcG9uZW50SW5zdGFsbERpcmVjdG9yeSgKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBvbmVudE5hbWUpCisgIGNtOjpzdHJpbmdfdmlldyBjb21wb25lbnROYW1lKQogewotICBjb25zdCBjaGFyKiBvdXRwdXREaXIgPQotICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU18iICsgY29tcG9uZW50TmFtZSArICJfSU5TVEFMTF9ESVJFQ1RPUlkiKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcG9uZW50T3V0cHV0RGlyID0gKG91dHB1dERpciA/IG91dHB1dERpciA6ICIkSU5TVERJUiIpOwotICByZXR1cm4gY29tcG9uZW50T3V0cHV0RGlyOworICBjb25zdCBjaGFyKiBvdXRwdXREaXIgPSB0aGlzLT5HZXRPcHRpb24oCisgICAgY21TdHJDYXQoIkNQQUNLX05TSVNfIiwgY29tcG9uZW50TmFtZSwgIl9JTlNUQUxMX0RJUkVDVE9SWSIpKTsKKyAgcmV0dXJuIG91dHB1dERpciA/IG91dHB1dERpciA6ICIkSU5TVERJUiI7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtQ1BhY2tOU0lTR2VuZXJhdG9yOjpUcmFuc2xhdGVOZXdsaW5lcyhzdGQ6OnN0cmluZyBzdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuaCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5oCmluZGV4IDBhZjM3YWYuLjg4Y2JhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogCiBjbGFzcyBjbUNQYWNrQ29tcG9uZW50OwpAQCAtNzUsOCArNzcsNyBAQAogCiAgIC8vLyBSZXR1cm5zIHRoZSBjdXN0b20gaW5zdGFsbCBkaXJlY3RvcnkgaWYgYXZhaWxhYmxlIGZvciB0aGUgc3BlY2lmaWVkCiAgIC8vLyBjb21wb25lbnQsIG90aGVyd2lzZSAkSU5TVERJUiBpcyByZXR1cm5lZC4KLSAgc3RkOjpzdHJpbmcgQ3VzdG9tQ29tcG9uZW50SW5zdGFsbERpcmVjdG9yeSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcG9uZW50TmFtZSk7CisgIHN0ZDo6c3RyaW5nIEN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoY206OnN0cmluZ192aWV3IGNvbXBvbmVudE5hbWUpOwogCiAgIC8vLyBUcmFuc2xhdGlvbnMgYW55IG5ld2xpbmVzIGZvdW5kIGluIHRoZSBzdHJpbmcgaW50byBcXHJcXG4sIHNvIHRoYXQgdGhlCiAgIC8vLyByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSB1c2VkIHdpdGhpbiBOU0lTLgpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tPU1hYMTFHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tPU1hYMTFHZW5lcmF0b3IuY3h4CmluZGV4IDk1MWM2NWYuLjVkZTRhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrT1NYWDExR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja09TWFgxMUdlbmVyYXRvci5jeHgKQEAgLTE3OCw2ICsxNzgsOSBAQAogCiBpbnQgY21DUGFja09TWFgxMUdlbmVyYXRvcjo6SW5pdGlhbGl6ZUludGVybmFsKCkKIHsKKyAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAiVGhlIE9TWFgxMSBnZW5lcmF0b3IgaXMgZGVwcmVjYXRlZCAiCisgICAgICAgICAgICAgICAgImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiIpOwogICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19ERUJVRywKICAgICAgICAgICAgICAgICAiY21DUGFja09TWFgxMUdlbmVyYXRvcjo6SW5pdGlhbGl6ZSgpIiA8PCBzdGQ6OmVuZGwpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrUEtHR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrUEtHR2VuZXJhdG9yLmN4eAppbmRleCBkYWU1ZWM5Li5hYzNkNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja1BLR0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tQS0dHZW5lcmF0b3IuY3h4CkBAIC00Niw3ICs0Niw2NiBAQAogICByZXR1cm4gY29tcG9uZW50LkFyY2hpdmVGaWxlICsgIi5wa2ciOwogfQogCi12b2lkIGNtQ1BhY2tQS0dHZW5lcmF0b3I6OldyaXRlRGlzdHJpYnV0aW9uRmlsZShjb25zdCBjaGFyKiBtZXRhcGFja2FnZUZpbGUpCit2b2lkIGNtQ1BhY2tQS0dHZW5lcmF0b3I6OkNyZWF0ZUJhY2tncm91bmQoY29uc3QgY2hhciogdGhlbWVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1ldGFwYWNrYWdlRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6c3RyaW5nX3ZpZXcgZ2VuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVhNTFdyaXRlciYgeG91dCkKK3sKKyAgc3RkOjpzdHJpbmcgcGFyYW1TdWZmaXggPQorICAgICh0aGVtZU5hbWUgPT0gbnVsbHB0cikgPyAiIiA6IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSh0aGVtZU5hbWUpOworICBzdGQ6OnN0cmluZyBvcHQgPSAodGhlbWVOYW1lID09IG51bGxwdHIpCisgICAgPyBjbVN0ckNhdCgiQ1BBQ0tfIiwgZ2VuTmFtZSwgIl9CQUNLR1JPVU5EIikKKyAgICA6IGNtU3RyQ2F0KCJDUEFDS18iLCBnZW5OYW1lLCAiX0JBQ0tHUk9VTkRfIiwgcGFyYW1TdWZmaXgpOworICBjb25zdCBjaGFyKiBiZ0ZpbGVOYW1lID0gdGhpcy0+R2V0T3B0aW9uKG9wdCk7CisgIGlmIChiZ0ZpbGVOYW1lID09IG51bGxwdHIpIHsKKyAgICByZXR1cm47CisgIH0KKworICBzdGQ6OnN0cmluZyBiZ0ZpbGVQYXRoID0gY21TdHJDYXQobWV0YXBhY2thZ2VGaWxlLCAiL0NvbnRlbnRzLyIsIGJnRmlsZU5hbWUpOworCisgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhiZ0ZpbGVQYXRoKSkgeworICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgIkJhY2tncm91bmQgaW1hZ2UgZG9lc24ndCBleGlzdCBpbiB0aGUgcmVzb3VyY2UgZGlyZWN0b3J5OiAiCisgICAgICAgICAgICAgICAgICAgIDw8IGJnRmlsZU5hbWUgPDwgc3RkOjplbmRsKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAodGhlbWVOYW1lID09IG51bGxwdHIpIHsKKyAgICB4b3V0LlN0YXJ0RWxlbWVudCgiYmFja2dyb3VuZCIpOworICB9IGVsc2UgeworICAgIHhvdXQuU3RhcnRFbGVtZW50KGNtU3RyQ2F0KCJiYWNrZ3JvdW5kLSIsIHRoZW1lTmFtZSkpOworICB9CisKKyAgeG91dC5BdHRyaWJ1dGUoImZpbGUiLCBiZ0ZpbGVOYW1lKTsKKworICBjb25zdCBjaGFyKiBwYXJhbSA9IHRoaXMtPkdldE9wdGlvbihjbVN0ckNhdChvcHQsICJfQUxJR05NRU5UIikpOworICBpZiAocGFyYW0gIT0gbnVsbHB0cikgeworICAgIHhvdXQuQXR0cmlidXRlKCJhbGlnbm1lbnQiLCBwYXJhbSk7CisgIH0KKworICBwYXJhbSA9IHRoaXMtPkdldE9wdGlvbihjbVN0ckNhdChvcHQsICJfU0NBTElORyIpKTsKKyAgaWYgKHBhcmFtICE9IG51bGxwdHIpIHsKKyAgICB4b3V0LkF0dHJpYnV0ZSgic2NhbGluZyIsIHBhcmFtKTsKKyAgfQorCisgIC8vIEFwcGxlIGRvY3Mgc2F5IHRoYXQgeW91IG11c3QgcHJvdmlkZSBlaXRoZXIgbWltZS10eXBlIG9yIHV0aQorICAvLyBhdHRyaWJ1dGUgZm9yIHRoZSBiYWNrZ3JvdW5kLCBidXQgSSd2ZSBzZWVuIGV4YW1wbGVzIHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlIHRoZW0sIHNvIGRvbid0IG1ha2UgdGhlbSBtYW5kYXRvcnkuCisgIHBhcmFtID0gdGhpcy0+R2V0T3B0aW9uKGNtU3RyQ2F0KG9wdCwgIl9NSU1FX1RZUEUiKSk7CisgIGlmIChwYXJhbSAhPSBudWxscHRyKSB7CisgICAgeG91dC5BdHRyaWJ1dGUoIm1pbWUtdHlwZSIsIHBhcmFtKTsKKyAgfQorCisgIHBhcmFtID0gdGhpcy0+R2V0T3B0aW9uKGNtU3RyQ2F0KG9wdCwgIl9VVEkiKSk7CisgIGlmIChwYXJhbSAhPSBudWxscHRyKSB7CisgICAgeG91dC5BdHRyaWJ1dGUoInV0aSIsIHBhcmFtKTsKKyAgfQorCisgIHhvdXQuRW5kRWxlbWVudCgpOworfQorCit2b2lkIGNtQ1BhY2tQS0dHZW5lcmF0b3I6OldyaXRlRGlzdHJpYnV0aW9uRmlsZShjb25zdCBjaGFyKiBtZXRhcGFja2FnZUZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBnZW5OYW1lKQogewogICBzdGQ6OnN0cmluZyBkaXN0cmlidXRpb25UZW1wbGF0ZSA9CiAgICAgdGhpcy0+RmluZFRlbXBsYXRlKCJDUGFjay5kaXN0cmlidXRpb24uZGlzdC5pbiIpOwpAQCAtMTAyLDYgKzE2MSwxMSBAQAogICAgIENyZWF0ZUNob2ljZShQb3N0RmxpZ2h0Q29tcG9uZW50LCB4b3V0KTsKICAgfQogCisgIC8vIGRlZmF1bHQgYmFja2dyb3VuZAorICB0aGlzLT5DcmVhdGVCYWNrZ3JvdW5kKG51bGxwdHIsIG1ldGFwYWNrYWdlRmlsZSwgZ2VuTmFtZSwgeG91dCk7CisgIC8vIERhcmsgQXF1YQorICB0aGlzLT5DcmVhdGVCYWNrZ3JvdW5kKCJkYXJrQXF1YSIsIG1ldGFwYWNrYWdlRmlsZSwgZ2VuTmFtZSwgeG91dCk7CisKICAgdGhpcy0+U2V0T3B0aW9uKCJDUEFDS19QQUNLQUdFTUFLRVJfQ0hPSUNFUyIsIGNob2ljZU91dC5zdHIoKS5jX3N0cigpKTsKIAogICAvLyBDcmVhdGUgdGhlIGRpc3RyaWJ1dGlvbi5kaXN0IGZpbGUgaW4gdGhlIG1ldGFwYWNrYWdlIHRvIHR1cm4gaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrUEtHR2VuZXJhdG9yLmggYi9Tb3VyY2UvQ1BhY2svY21DUGFja1BLR0dlbmVyYXRvci5oCmluZGV4IDY5Mjg2ZmYuLmJlNzMwYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrUEtHR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tQS0dHZW5lcmF0b3IuaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21DUGFja0NvbXBvbmVudEdyb3VwLmgiCiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogCkBAIC01Nyw3ICs1OSw3IEBACiAgIC8vIGludGVyLWNvbXBvbmVudCBkZXBlbmRlbmNpZXMuIG1ldGFwYWNrYWdlRmlsZSBpcyB0aGUgbmFtZSBvZiB0aGUKICAgLy8gbWV0YXBhY2thZ2UgZm9yIHRoZSBkaXN0cmlidXRpb24uIE9ubHkgdmFsaWQgZm9yIGEKICAgLy8gY29tcG9uZW50LWJhc2VkIGluc3RhbGwuCi0gIHZvaWQgV3JpdGVEaXN0cmlidXRpb25GaWxlKGNvbnN0IGNoYXIqIG1ldGFwYWNrYWdlRmlsZSk7CisgIHZvaWQgV3JpdGVEaXN0cmlidXRpb25GaWxlKGNvbnN0IGNoYXIqIG1ldGFwYWNrYWdlRmlsZSwgY29uc3QgY2hhciogZ2VuTmFtZSk7CiAKICAgLy8gU3Vicm91dGluZSBvZiBXcml0ZURpc3RyaWJ1dGlvbkZpbGUgdGhhdCB3cml0ZXMgb3V0IHRoZQogICAvLyBkZXBlbmRlbmN5IGF0dHJpYnV0ZXMgZm9yIGludGVyLWNvbXBvbmVudCBkZXBlbmRlbmNpZXMuCkBAIC04NSw2ICs4NywxMCBAQAogICAvLy8gaW5zdGFsbGVyIEdVSS4KICAgdm9pZCBDcmVhdGVDaG9pY2UoY29uc3QgY21DUGFja0NvbXBvbmVudCYgY29tcG9uZW50LCBjbVhNTFdyaXRlciYgeG91dCk7CiAKKyAgLy8vIENyZWF0ZXMgYSBiYWNrZ3JvdW5kIGluIHRoZSBkaXN0cmlidXRpb24gWE1MLgorICB2b2lkIENyZWF0ZUJhY2tncm91bmQoY29uc3QgY2hhciogdGhlbWVOYW1lLCBjb25zdCBjaGFyKiBtZXRhcGFja2FnZUZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjbTo6c3RyaW5nX3ZpZXcgZ2VuTmFtZSwgY21YTUxXcml0ZXImIHhvdXQpOworCiAgIC8vIFRoZSBQb3N0RmxpZ2h0IGNvbXBvbmVudCB3aGVuIGNyZWF0aW5nIGEgbWV0YXBhY2thZ2UKICAgY21DUGFja0NvbXBvbmVudCBQb3N0RmxpZ2h0Q29tcG9uZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrUGFja2FnZU1ha2VyR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrUGFja2FnZU1ha2VyR2VuZXJhdG9yLmN4eAppbmRleCBjNWJhNzI2Li5mNTFlYTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja1BhY2thZ2VNYWtlckdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tQYWNrYWdlTWFrZXJHZW5lcmF0b3IuY3h4CkBAIC0yNzksNyArMjc5LDcgQEAKICAgfSBlbHNlIHsKICAgICAvLyBXZSBoYXZlIGJ1aWx0IHRoZSBwYWNrYWdlIGluIHBsYWNlLiBHZW5lcmF0ZSB0aGUKICAgICAvLyBkaXN0cmlidXRpb24uZGlzdCBmaWxlIHRvIGRlc2NyaWJlIGl0IGZvciB0aGUgaW5zdGFsbGVyLgotICAgIFdyaXRlRGlzdHJpYnV0aW9uRmlsZShwYWNrYWdlRGlyRmlsZU5hbWUuY19zdHIoKSk7CisgICAgV3JpdGVEaXN0cmlidXRpb25GaWxlKHBhY2thZ2VEaXJGaWxlTmFtZS5jX3N0cigpLCAiUEFDS0FHRU1BS0VSIik7CiAgIH0KIAogICBzdGQ6OnN0cmluZyB0bXBGaWxlID0gY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKCJDUEFDS19UT1BMRVZFTF9ESVJFQ1RPUlkiKSwKQEAgLTMyMSw2ICszMjEsOSBAQAogCiBpbnQgY21DUGFja1BhY2thZ2VNYWtlckdlbmVyYXRvcjo6SW5pdGlhbGl6ZUludGVybmFsKCkKIHsKKyAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAiVGhlIFBhY2thZ2VNYWtlciBnZW5lcmF0b3IgaXMgZGVwcmVjYXRlZCAiCisgICAgICAgICAgICAgICAgImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiIpOwogICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfUEFDS0FHSU5HX0lOU1RBTExfUFJFRklYIiwgIi91c3IiKTsKIAogICAvLyBTdGFydGluZyB3aXRoIFhjb2RlIDQuMywgUGFja2FnZU1ha2VyIGlzIGEgc2VwYXJhdGUgYXBwLCBhbmQgeW91CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja1Byb2R1Y3RCdWlsZEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja1Byb2R1Y3RCdWlsZEdlbmVyYXRvci5jeHgKaW5kZXggZGFlMjY4Yy4uYTNlNTVkZSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tQcm9kdWN0QnVpbGRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrUHJvZHVjdEJ1aWxkR2VuZXJhdG9yLmN4eApAQCAtODEsNyArODEsNyBAQAogICB9CiAKICAgLy8gY29tYmluZSBwYWNrYWdlKHMpIGludG8gYSBkaXN0cmlidXRpb24KLSAgV3JpdGVEaXN0cmlidXRpb25GaWxlKHBhY2thZ2VEaXJGaWxlTmFtZS5jX3N0cigpKTsKKyAgV3JpdGVEaXN0cmlidXRpb25GaWxlKHBhY2thZ2VEaXJGaWxlTmFtZS5jX3N0cigpLCAiUFJPRFVDVEJVSUxEIik7CiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBwa2dDbWQ7CiAKICAgc3RkOjpzdHJpbmcgdmVyc2lvbiA9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfUEFDS0FHRV9WRVJTSU9OIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY3BhY2suY3h4IGIvU291cmNlL0NQYWNrL2NwYWNrLmN4eAppbmRleCA1ODk1NjUyLi4yZTViZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY3BhY2suY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jcGFjay5jeHgKQEAgLTg1LDcgKzg1LDcgQEAKICAgICByZXR1cm4gMDsKICAgfQogICBzdGQ6OnN0cmluZyBrZXkgPSB2YWx1ZS5zdWJzdHIoMCwgcG9zKTsKLSAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIocG9zICsgMSk7CisgIHZhbHVlLmVyYXNlKDAsIHBvcyArIDEpOwogICBkZWYtPk1hcFtrZXldID0gdmFsdWU7CiAgIGNtQ1BhY2tfTG9nKGRlZi0+TG9nLCBjbUNQYWNrTG9nOjpMT0dfREVCVUcsCiAgICAgICAgICAgICAgICJTZXQgQ1BhY2sgdmFyaWFibGU6ICIgPDwga2V5IDw8ICIgdG8gXCIiIDw8IHZhbHVlIDw8ICJcIiIKQEAgLTExNSw3ICsxMTUsNiBAQAogICBhcmdjID0gYXJncy5hcmdjKCk7CiAgIGFyZ3YgPSBhcmdzLmFyZ3YoKTsKIAotICBjbVN5c3RlbVRvb2xzOjpFbmFibGVNU1ZDRGVidWdIb29rKCk7CiAgIGNtU3lzdGVtVG9vbHM6OkluaXRpYWxpemVMaWJVVigpOwogICBjbVN5c3RlbVRvb2xzOjpGaW5kQ01ha2VSZXNvdXJjZXMoYXJndlswXSk7CiAgIGNtQ1BhY2tMb2cgbG9nOwpAQCAtMzE0LDcgKzMxMyw3IEBACiAgICAgZWxzZSB7CiAgICAgICAvLyBnZXQgYSBkZWZhdWx0IHZhbHVlIChjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KQogICAgICAgY3BhY2tQcm9qZWN0RGlyZWN0b3J5ID0gY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOwotICAgICAgLy8gdXNlIGRlZmF1bHQgdmFsdWUgaWZmIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkIGJ5IHRoZSBjb25maWcgZmlsZQorICAgICAgLy8gdXNlIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQgYnkgdGhlIGNvbmZpZyBmaWxlCiAgICAgICBpZiAoIWdsb2JhbE1GLklzU2V0KCJDUEFDS19QQUNLQUdFX0RJUkVDVE9SWSIpKSB7CiAgICAgICAgIGdsb2JhbE1GLkFkZERlZmluaXRpb24oIkNQQUNLX1BBQ0tBR0VfRElSRUNUT1JZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcGFja1Byb2plY3REaXJlY3RvcnkpOwpAQCAtMzI0LDYgKzMyMywxMiBAQAogICAgICAgZ2xvYmFsTUYuQWRkRGVmaW5pdGlvbihjZC5maXJzdCwgY2Quc2Vjb25kKTsKICAgICB9CiAKKyAgICAvLyBGb3JjZSBDUEFDS19QQUNLQUdFX0RJUkVDVE9SWSBhcyBhYnNvbHV0ZSBwYXRoCisgICAgY3BhY2tQcm9qZWN0RGlyZWN0b3J5ID0gZ2xvYmFsTUYuR2V0RGVmaW5pdGlvbigiQ1BBQ0tfUEFDS0FHRV9ESVJFQ1RPUlkiKTsKKyAgICBjcGFja1Byb2plY3REaXJlY3RvcnkgPQorICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjcGFja1Byb2plY3REaXJlY3RvcnkpOworICAgIGdsb2JhbE1GLkFkZERlZmluaXRpb24oIkNQQUNLX1BBQ0tBR0VfRElSRUNUT1JZIiwgY3BhY2tQcm9qZWN0RGlyZWN0b3J5KTsKKwogICAgIGNvbnN0IGNoYXIqIGNwYWNrTW9kdWxlc1BhdGggPSBnbG9iYWxNRi5HZXREZWZpbml0aW9uKCJDUEFDS19NT0RVTEVfUEFUSCIpOwogICAgIGlmIChjcGFja01vZHVsZXNQYXRoKSB7CiAgICAgICBnbG9iYWxNRi5BZGREZWZpbml0aW9uKCJDTUFLRV9NT0RVTEVfUEFUSCIsIGNwYWNrTW9kdWxlc1BhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RCWlIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCWlIuY3h4CmluZGV4IDg2NDBjNDYuLmM4N2ZiODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJaUi5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCWlIuY3h4CkBAIC04LDExICs4LDEyIEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKICNpbmNsdWRlICJjbV9leHBhdC5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RWQy5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc1Rvb2xzLmgiCkBAIC0yNDUsNyArMjQ2LDcgQEAKIAogICB2b2lkIENoYXJhY3RlckRhdGFIYW5kbGVyKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlCiAgIHsKLSAgICBjbUFwcGVuZCh0aGlzLT5DRGF0YSwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CisgICAgY206OmFwcGVuZCh0aGlzLT5DRGF0YSwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiAgIH0KIAogICB2b2lkIEVuZEVsZW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIG92ZXJyaWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQW5kVGVzdEhhbmRsZXIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZEFuZFRlc3RIYW5kbGVyLmN4eAppbmRleCAyYWQ2NjFjLi5kYjQyNmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQW5kVGVzdEhhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5jeHgKQEAgLTIxNSwxMSArMjE1LDExIEBACiAKICAgaWYgKHRoaXMtPkJ1aWxkTm9DTWFrZSkgewogICAgIC8vIE1ha2UgdGhlIGdlbmVyYXRvciBhdmFpbGFibGUgZm9yIHRoZSBCdWlsZCBjYWxsIGJlbG93LgotICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4gPSBjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodGhpcy0+QnVpbGRHZW5lcmF0b3IpOwotICAgIGNtLlNldEdsb2JhbEdlbmVyYXRvcihnZW4pOworICAgIGNtLlNldEdsb2JhbEdlbmVyYXRvcihjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodGhpcy0+QnVpbGRHZW5lcmF0b3IpKTsKICAgICBpZiAoIXRoaXMtPkJ1aWxkR2VuZXJhdG9yUGxhdGZvcm0uZW1wdHkoKSkgewotICAgICAgY21NYWtlZmlsZSBtZihnZW4sIGNtLkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKLSAgICAgIGlmICghZ2VuLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybSh0aGlzLT5CdWlsZEdlbmVyYXRvclBsYXRmb3JtLCAmbWYpKSB7CisgICAgICBjbU1ha2VmaWxlIG1mKGNtLkdldEdsb2JhbEdlbmVyYXRvcigpLCBjbS5HZXRDdXJyZW50U25hcHNob3QoKSk7CisgICAgICBpZiAoIWNtLkdldEdsb2JhbEdlbmVyYXRvcigpLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybSgKKyAgICAgICAgICAgIHRoaXMtPkJ1aWxkR2VuZXJhdG9yUGxhdGZvcm0sICZtZikpIHsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgfQpAQCAtMzc5LDcgKzM3OSw3IEBACiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYWxsQXJncykKIHsKICAgLy8gLS1idWlsZC1hbmQtdGVzdCBvcHRpb25zCi0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtYW5kLXRlc3QiLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtYW5kLXRlc3QiKSAmJgogICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWYgKGlkeCArIDIgPCBhbGxBcmdzLnNpemUoKSkgewogICAgICAgaWR4Kys7CkBAIC0zOTcsMjUgKzM5NywyOSBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtdGFyZ2V0IiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS1idWlsZC10YXJnZXQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRUYXJnZXRzLnB1c2hfYmFjayhhbGxBcmdzW2lkeF0pOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtbm9jbWFrZSIsIDApID09IDApIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS1idWlsZC1ub2NtYWtlIikpIHsKICAgICB0aGlzLT5CdWlsZE5vQ01ha2UgPSB0cnVlOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtcnVuLWRpciIsIDApID09IDAgJiYgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtcnVuLWRpciIpICYmCisgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5CdWlsZFJ1bkRpciA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLXR3by1jb25maWciLCAwKSA9PSAwKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtdHdvLWNvbmZpZyIpKSB7CiAgICAgdGhpcy0+QnVpbGRUd29Db25maWcgPSB0cnVlOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtZXhlLWRpciIsIDApID09IDAgJiYgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtZXhlLWRpciIpICYmCisgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5FeGVjdXRhYmxlRGlyZWN0b3J5ID0gYWxsQXJnc1tpZHhdOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tdGVzdC10aW1lb3V0IiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS10ZXN0LXRpbWVvdXQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+VGltZW91dCA9IGNtRHVyYXRpb24oYXRvZihhbGxBcmdzW2lkeF0uY19zdHIoKSkpOwogICB9CkBAIC00MzEsMzEgKzQzNSwzMyBAQAogICAgIGlkeCsrOwogICAgIHRoaXMtPkJ1aWxkR2VuZXJhdG9yVG9vbHNldCA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLXByb2plY3QiLCAwKSA9PSAwICYmIGlkeCA8IGFsbEFyZ3Muc2l6ZSgpIC0gMSkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLXByb2plY3QiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRQcm9qZWN0ID0gYWxsQXJnc1tpZHhdOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtbWFrZXByb2dyYW0iLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtbWFrZXByb2dyYW0iKSAmJgogICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRNYWtlUHJvZ3JhbSA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLWNvbmZpZy1zYW1wbGUiLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtY29uZmlnLXNhbXBsZSIpICYmCiAgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5Db25maWdTYW1wbGUgPSBhbGxBcmdzW2lkeF07CiAgIH0KLSAgaWYgKGN1cnJlbnRBcmcuZmluZCgiLS1idWlsZC1ub2NsZWFuIiwgMCkgPT0gMCkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLW5vY2xlYW4iKSkgewogICAgIHRoaXMtPkJ1aWxkTm9DbGVhbiA9IHRydWU7CiAgIH0KLSAgaWYgKGN1cnJlbnRBcmcuZmluZCgiLS1idWlsZC1vcHRpb25zIiwgMCkgPT0gMCkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLW9wdGlvbnMiKSkgewogICAgIHdoaWxlIChpZHggKyAxIDwgYWxsQXJncy5zaXplKCkgJiYgYWxsQXJnc1tpZHggKyAxXSAhPSAiLS1idWlsZC10YXJnZXQiICYmCiAgICAgICAgICAgIGFsbEFyZ3NbaWR4ICsgMV0gIT0gIi0tdGVzdC1jb21tYW5kIikgewogICAgICAgKytpZHg7CiAgICAgICB0aGlzLT5CdWlsZE9wdGlvbnMucHVzaF9iYWNrKGFsbEFyZ3NbaWR4XSk7CiAgICAgfQogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tdGVzdC1jb21tYW5kIiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS10ZXN0LWNvbW1hbmQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgKytpZHg7CiAgICAgdGhpcy0+VGVzdENvbW1hbmQgPSBhbGxBcmdzW2lkeF07CiAgICAgd2hpbGUgKGlkeCArIDEgPCBhbGxBcmdzLnNpemUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuY3h4CmluZGV4IDE4ZGYyMTQuLmQxYjc3MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQ29tbWFuZC5jeHgKQEAgLTI5LDEzICsyOSw3IEBACiAgIHRoaXMtPkJpbmQoIlBST0pFQ1RfTkFNRSJfcywgdGhpcy0+UHJvamVjdE5hbWUpOwogfQogCi1jbUNUZXN0QnVpbGRDb21tYW5kOjp+Y21DVGVzdEJ1aWxkQ29tbWFuZCgpCi17Ci0gIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKLSAgICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IG51bGxwdHI7Ci0gIH0KLX0KK2NtQ1Rlc3RCdWlsZENvbW1hbmQ6On5jbUNUZXN0QnVpbGRDb21tYW5kKCkgPSBkZWZhdWx0OwogCiBjbUNUZXN0R2VuZXJpY0hhbmRsZXIqIGNtQ1Rlc3RCdWlsZENvbW1hbmQ6OkluaXRpYWxpemVIYW5kbGVyKCkKIHsKQEAgLTc5LDggKzczLDcgQEAKICAgICAgIH0KICAgICAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKICAgICAgICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TmFtZSgpICE9IGNtYWtlR2VuZXJhdG9yTmFtZSkgewotICAgICAgICAgIGRlbGV0ZSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7Ci0gICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IucmVzZXQoKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQ29tbWFuZC5oCmluZGV4IGRhMDBhNDMuLjBmODI4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuaApAQCAtNDgsNyArNDgsNyBAQAogICBib29sIEluaXRpYWxQYXNzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKSBvdmVycmlkZTsKIAotICBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBHbG9iYWxHZW5lcmF0b3I7CiAKIHByb3RlY3RlZDoKICAgY21DVGVzdEJ1aWxkSGFuZGxlciogSGFuZGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRIYW5kbGVyLmN4eAppbmRleCA5Y2I1NDQ5Li45MGM1YjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZEhhbmRsZXIuY3h4CkBAIC03LDExICs3LDEyIEBACiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21GaWxlVGltZUNhY2hlLmgiCkBAIC0zODUsMjQgKzM4NiwyMCBAQAogICBpZiAodGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5Iikuc2l6ZSgpID4gMjApIHsKICAgICBzdGQ6OnN0cmluZyBzcmNkaXIgPQogICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5IikgKyAiLyI7Ci0gICAgZm9yIChjYyA9IHNyY2Rpci5zaXplKCkgLSAyOyBjYyA+IDA7IGNjLS0pIHsKLSAgICAgIGlmIChzcmNkaXJbY2NdID09ICcvJykgewotICAgICAgICBzcmNkaXIgPSBzcmNkaXIuc3Vic3RyKDAsIGNjICsgMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgIGNjID0gc3JjZGlyLnJmaW5kKCcvJywgc3JjZGlyLnNpemUoKSAtIDIpOworICAgIGlmIChjYyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgc3JjZGlyLnJlc2l6ZShjYyArIDEpOworICAgICAgdGhpcy0+U2ltcGxpZnlTb3VyY2VEaXIgPSBzdGQ6Om1vdmUoc3JjZGlyKTsKICAgICB9Ci0gICAgdGhpcy0+U2ltcGxpZnlTb3VyY2VEaXIgPSBzcmNkaXI7CiAgIH0KICAgaWYgKHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJ1aWxkRGlyZWN0b3J5Iikuc2l6ZSgpID4gMjApIHsKICAgICBzdGQ6OnN0cmluZyBiaW5kaXIgPQogICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQnVpbGREaXJlY3RvcnkiKSArICIvIjsKLSAgICBmb3IgKGNjID0gYmluZGlyLnNpemUoKSAtIDI7IGNjID4gMDsgY2MtLSkgewotICAgICAgaWYgKGJpbmRpcltjY10gPT0gJy8nKSB7Ci0gICAgICAgIGJpbmRpciA9IGJpbmRpci5zdWJzdHIoMCwgY2MgKyAxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAgY2MgPSBiaW5kaXIucmZpbmQoJy8nLCBiaW5kaXIuc2l6ZSgpIC0gMik7CisgICAgaWYgKGNjICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICBiaW5kaXIucmVzaXplKGNjICsgMSk7CisgICAgICB0aGlzLT5TaW1wbGlmeUJ1aWxkRGlyID0gc3RkOjptb3ZlKGJpbmRpcik7CiAgICAgfQotICAgIHRoaXMtPlNpbXBsaWZ5QnVpbGREaXIgPSBiaW5kaXI7CiAgIH0KIAogICAvLyBPaywgbGV0J3MgZG8gdGhlIGJ1aWxkCkBAIC05NjksNyArOTY2LDcgQEAKICAgICBpZiAoaXQgIT0gcXVldWUtPmVuZCgpKSB7CiAgICAgICAvLyBDcmVhdGUgYSBjb250aWd1b3VzIGFycmF5IGZvciB0aGUgbGluZQogICAgICAgdGhpcy0+Q3VycmVudFByb2Nlc3NpbmdMaW5lLmNsZWFyKCk7Ci0gICAgICBjbUFwcGVuZCh0aGlzLT5DdXJyZW50UHJvY2Vzc2luZ0xpbmUsIHF1ZXVlLT5iZWdpbigpLCBpdCk7CisgICAgICBjbTo6YXBwZW5kKHRoaXMtPkN1cnJlbnRQcm9jZXNzaW5nTGluZSwgcXVldWUtPmJlZ2luKCksIGl0KTsKICAgICAgIHRoaXMtPkN1cnJlbnRQcm9jZXNzaW5nTGluZS5wdXNoX2JhY2soMCk7CiAgICAgICBjb25zdCBjaGFyKiBsaW5lID0gdGhpcy0+Q3VycmVudFByb2Nlc3NpbmdMaW5lLmRhdGEoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb25maWd1cmVDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q29uZmlndXJlQ29tbWFuZC5jeHgKaW5kZXggZjJmNDJiNC4uMzg1NDcxMCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb25maWd1cmVDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvbmZpZ3VyZUNvbW1hbmQuY3h4CkBAIC02OSwxMiArNjksMTEgQEAKICAgICAgIGJvb2wgbXVsdGlDb25maWcgPSBmYWxzZTsKICAgICAgIGJvb2wgY21ha2VCdWlsZFR5cGVJbk9wdGlvbnMgPSBmYWxzZTsKIAotICAgICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0KLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKAotICAgICAgICAgIGNtYWtlR2VuZXJhdG9yTmFtZSk7CisgICAgICBhdXRvIGdnID0gdGhpcy0+TWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgICAgICBjbWFrZUdlbmVyYXRvck5hbWUpOwogICAgICAgaWYgKGdnKSB7CiAgICAgICAgIG11bHRpQ29uZmlnID0gZ2ctPklzTXVsdGlDb25maWcoKTsKLSAgICAgICAgZGVsZXRlIGdnOworICAgICAgICBnZy5yZXNldCgpOwogICAgICAgfQogCiAgICAgICBzdGQ6OnN0cmluZyBjbWFrZUNvbmZpZ3VyZUNvbW1hbmQgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXIuY3h4CmluZGV4IDRjZDc4M2YuLmRhYTEwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q292ZXJhZ2VIYW5kbGVyLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlSGFuZGxlci5jeHgKQEAgLTEyLDEyICsxMiwxMyBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL0dsb2IuaHh4IgogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgpAQCAtNjc5LDggKzY4MCw5IEBACiAvLwogI2lmZGVmIF9XSU4zMgogIyAgZGVmaW5lIGZuYyhzKSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UocykKKyMgIGRlZmluZSBmbmNfcHJlZml4KHMsIHQpIGZuYyhzLnN1YnN0cigwLCB0LnNpemUoKSkpID09IGZuYyh0KQogI2Vsc2UKLSMgIGRlZmluZSBmbmMocykgcworIyAgZGVmaW5lIGZuY19wcmVmaXgocywgdCkgY21IYXNQcmVmaXgocywgdCkKICNlbmRpZgogCiBib29sIElzRmlsZUluRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmRpcikKQEAgLTY4OCw4ICs2OTAsOCBAQAogICBzdGQ6OnN0cmluZyBmaWxlID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpbmZpbGUpOwogICBzdGQ6OnN0cmluZyBkaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGluZGlyKTsKIAotICByZXR1cm4gZmlsZS5zaXplKCkgPiBkaXIuc2l6ZSgpICYmCi0gICAgZm5jKGZpbGUuc3Vic3RyKDAsIGRpci5zaXplKCkpKSA9PSBmbmMoZGlyKSAmJiBmaWxlW2Rpci5zaXplKCldID09ICcvJzsKKyAgcmV0dXJuIGZpbGUuc2l6ZSgpID4gZGlyLnNpemUoKSAmJiBmbmNfcHJlZml4KGZpbGUsIGRpcikgJiYKKyAgICBmaWxlW2Rpci5zaXplKCldID09ICcvJzsKIH0KIAogaW50IGNtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXI6OkhhbmRsZVBIUENvdmVyYWdlKApAQCAtODE5LDcgKzgyMSw3IEBACiAgIHN0ZDo6c3RyaW5nIGJpbmFyeURpciA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJ1aWxkRGlyZWN0b3J5Iik7CiAgIHN0ZDo6c3RyaW5nIGJpbkNvdmVyYWdlRmlsZSA9IGJpbmFyeURpciArICIvKmphY29jby54bWwiOwogICBnMi5GaW5kRmlsZXMoYmluQ292ZXJhZ2VGaWxlKTsKLSAgY21BcHBlbmQoZmlsZXMsIGcyLkdldEZpbGVzKCkpOworICBjbTo6YXBwZW5kKGZpbGVzLCBnMi5HZXRGaWxlcygpKTsKIAogICBpZiAoIWZpbGVzLmVtcHR5KCkpIHsKICAgICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfVkVSQk9TRV9PVVRQVVQsCkBAIC0xNDYyLDcgKzE0NjQsNyBAQAogICAgICAgICAiICAgbG9va2luZyBmb3IgTENPViBmaWxlcyBpbjogIiA8PCBkYUdsb2IgPDwgc3RkOjplbmRsLCB0aGlzLT5RdWlldCk7CiAgICAgICBnbC5GaW5kRmlsZXMoZGFHbG9iKTsKICAgICAgIC8vIEtlZXAgYSBsaXN0IG9mIGFsbCBMQ09WIGZpbGVzCi0gICAgICBjbUFwcGVuZChsY292RmlsZXMsIGdsLkdldEZpbGVzKCkpOworICAgICAgY206OmFwcGVuZChsY292RmlsZXMsIGdsLkdldEZpbGVzKCkpOwogCiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogbGNvdkZpbGVzKSB7CiAgICAgICAgIGxjb3ZGaWxlID0gZmlsZTsKQEAgLTE1OTksMTAgKzE2MDEsMTAgQEAKICAgICAgICIgICBnbG9iYmluZyBmb3IgY292ZXJhZ2UgaW46ICIgPDwgbG0uZmlyc3QgPDwgc3RkOjplbmRsLCB0aGlzLT5RdWlldCk7CiAgICAgc3RkOjpzdHJpbmcgZGFHbG9iID0gY21TdHJDYXQobG0uZmlyc3QsICIvKi5kYSIpOwogICAgIGdsLkZpbmRGaWxlcyhkYUdsb2IpOwotICAgIGNtQXBwZW5kKGZpbGVzLCBnbC5HZXRGaWxlcygpKTsKKyAgICBjbTo6YXBwZW5kKGZpbGVzLCBnbC5HZXRGaWxlcygpKTsKICAgICBkYUdsb2IgPSBjbVN0ckNhdChsbS5maXJzdCwgIi8qLmdjZGEiKTsKICAgICBnbC5GaW5kRmlsZXMoZGFHbG9iKTsKLSAgICBjbUFwcGVuZChmaWxlcywgZ2wuR2V0RmlsZXMoKSk7CisgICAgY206OmFwcGVuZChmaWxlcywgZ2wuR2V0RmlsZXMoKSk7CiAgIH0KIH0KIApAQCAtMTYzOCw3ICsxNjQwLDcgQEAKICAgICAgICAgICAgICAgICJFcnJvciB3aGlsZSBmaW5kaW5nIGZpbGVzIG1hdGNoaW5nICIgPDwgZGFHbG9iIDw8IHN0ZDo6ZW5kbCk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIGNtQXBwZW5kKGZpbGVzLCBnbC5HZXRGaWxlcygpKTsKKyAgY206OmFwcGVuZChmaWxlcywgZ2wuR2V0RmlsZXMoKSk7CiAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9WRVJCT1NFX09VVFBVVCwKICAgICAgICAgICAgICAgICAgICAgICJOb3cgc2VhcmNoaW5nIGluOiAiIDw8IGRhR2xvYiA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKICAgcmV0dXJuIHRydWU7CkBAIC0xNzA4LDI5ICsxNzEwLDI2IEBACiAKICAgICAgICAgLy8gUmVhZCB0aGUgY292ZXJhZ2UgY291bnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBUcmFjZS5weSBvdXRwdXQKICAgICAgICAgLy8gbGluZQotICAgICAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBubC5zdWJzdHIoMCwgNik7Ci0gICAgICAgIGlmIChwcmVmaXhbNV0gIT0gJyAnICYmIHByZWZpeFs1XSAhPSAnOicpIHsKLSAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjay4gV2Ugc2hvdWxkIHJlYWxseSBkbyBzb21ldGhpbmcgbW9yZSBlbGFib3JhdGUKLSAgICAgICAgICBwcmVmaXggPSBubC5zdWJzdHIoMCwgNyk7Ci0gICAgICAgICAgaWYgKHByZWZpeFs2XSAhPSAnICcgJiYgcHJlZml4WzZdICE9ICc6JykgewotICAgICAgICAgICAgcHJlZml4ID0gbmwuc3Vic3RyKDAsIDgpOwotICAgICAgICAgICAgaWYgKHByZWZpeFs3XSAhPSAnICcgJiYgcHJlZml4WzddICE9ICc6JykgewotICAgICAgICAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAotICAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50bHkgdGhlIGxpbWl0IGlzIG1heGltdW0gY292ZXJhZ2Ugb2YgOTk5OTk5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3M7CisgICAgICAgIGludCBjb3YgPSAwOworICAgICAgICAvLyBUaGlzIGlzIGEgaGFjay4gV2Ugc2hvdWxkIHJlYWxseSBkbyBzb21ldGhpbmcgbW9yZSBlbGFib3JhdGUKKyAgICAgICAgZm9yIChwb3MgPSA1OyBwb3MgPCA4OyBwb3MrKykgeworICAgICAgICAgIGlmIChubFtwb3NdID09ICcgJykgeworICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRvZXMgbm90IGhhdmUgJzonIHNvIG5vIGNvdmVyYWdlIGhlcmUuIFRoYXQgc2FpZCwKKyAgICAgICAgICAgIC8vIFRyYWNlLnB5IGRvZXMgbm90IGhhbmRsZSBub3QgY292ZXJlZCBsaW5lcyB2ZXJzdXMgY29tbWVudHMgZXRjLgorICAgICAgICAgICAgLy8gU28sIHRoaXMgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobmxbcG9zXSA9PSAnOicpIHsKKyAgICAgICAgICAgIGNvdiA9IGF0b2kobmwuc3Vic3RyKDAsIHBvcyAtIDEpLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGludCBjb3YgPSBhdG9pKHByZWZpeC5jX3N0cigpKTsKLSAgICAgICAgaWYgKHByZWZpeFtwcmVmaXguc2l6ZSgpIC0gMV0gIT0gJzonKSB7Ci0gICAgICAgICAgLy8gVGhpcyBsaW5lIGRvZXMgbm90IGhhdmUgJzonIHNvIG5vIGNvdmVyYWdlIGhlcmUuIFRoYXQgc2FpZCwKLSAgICAgICAgICAvLyBUcmFjZS5weSBkb2VzIG5vdCBoYW5kbGUgbm90IGNvdmVyZWQgbGluZXMgdmVyc3VzIGNvbW1lbnRzIGV0Yy4KLSAgICAgICAgICAvLyBTbywgdGhpcyB3aWxsIGJlIHNldCB0byAwLgotICAgICAgICAgIGNvdiA9IDA7CisgICAgICAgIGlmIChwb3MgPT0gOCkgeworICAgICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCisgICAgICAgICAgICAgICAgICAgICAiQ3VycmVudGx5IHRoZSBsaW1pdCBpcyBtYXhpbXVtIGNvdmVyYWdlIG9mIDk5OTk5OSIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICAgICAgfQotICAgICAgICBjbUNUZXN0T3B0aW9uYWxMb2coCi0gICAgICAgICAgdGhpcy0+Q1Rlc3QsIERFQlVHLAotICAgICAgICAgICJQcmVmaXg6ICIgPDwgcHJlZml4IDw8ICIgY292OiAiIDw8IGNvdiA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKICAgICAgICAgLy8gUmVhZCB0aGUgbGluZSBudW1iZXIgc3RhcnRpbmcgYXQgdGhlIDEwdGggY2hhcmFjdGVyIG9mIHRoZSBnY292CiAgICAgICAgIC8vIG91dHB1dCBsaW5lCiAgICAgICAgIGxvbmcgbGluZUlkeCA9IGNudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEN1cmwuY3h4CmluZGV4IGNjYWM4MzIuLjY5YzU3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDdXJsLmN4eApAQCAtNSw3ICs1LDggQEAKICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8b3N0cmVhbT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUN1cmwuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ2LDE1ICs0NywxNSBAQAogewogICBpbnQgcmVhbHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemUgKiBubWVtYik7CiAgIGNvbnN0IGNoYXIqIGNoUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHB0cik7Ci0gIGNtQXBwZW5kKCpzdGF0aWNfY2FzdDxzdGQ6OnZlY3RvcjxjaGFyPio+KGRhdGEpLCBjaFB0ciwgY2hQdHIgKyByZWFsc2l6ZSk7CisgIGNtOjphcHBlbmQoKnN0YXRpY19jYXN0PHN0ZDo6dmVjdG9yPGNoYXI+Kj4oZGF0YSksIGNoUHRyLCBjaFB0ciArIHJlYWxzaXplKTsKICAgcmV0dXJuIHJlYWxzaXplOwogfQogCiBzaXplX3QgY3VybERlYnVnQ2FsbGJhY2soQ1VSTCogLyp1bnVzZWQqLywgY3VybF9pbmZvdHlwZSAvKnVudXNlZCovLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGNoUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSkKIHsKLSAgY21BcHBlbmQoKnN0YXRpY19jYXN0PHN0ZDo6dmVjdG9yPGNoYXI+Kj4oZGF0YSksIGNoUHRyLCBjaFB0ciArIHNpemUpOwotICByZXR1cm4gc2l6ZTsKKyAgY206OmFwcGVuZCgqc3RhdGljX2Nhc3Q8c3RkOjp2ZWN0b3I8Y2hhcj4qPihkYXRhKSwgY2hQdHIsIGNoUHRyICsgc2l6ZSk7CisgIHJldHVybiAwOwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEdJVC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEdJVC5jeHgKaW5kZXggM2YzYzEwNy4uNTY4YjA5MSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RHSVQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0R0lULmN4eApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxjdGltZT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtMTkzLDcgKzE5NCw4IEBACiAgICAgICBpZiAobGluZS5maW5kKCJcdG5vdC1mb3ItbWVyZ2VcdCIpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gbGluZS5maW5kKCdcdCcpOwogICAgICAgICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAgc2hhMSA9IGxpbmUuc3Vic3RyKDAsIHBvcyk7CisgICAgICAgICAgc2hhMSA9IHN0ZDo6bW92ZShsaW5lKTsKKyAgICAgICAgICBzaGExLnJlc2l6ZShwb3MpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RIRy5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEhHLmN4eAppbmRleCAzMjY1NDk4Li41ZjQ1ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEhHLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEhHLmN4eApAQCAtNSw5ICs1LDEwIEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFZDLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzVG9vbHMuaCIKQEAgLTIwNCw3ICsyMDUsNyBAQAogCiAgIHZvaWQgQ2hhcmFjdGVyRGF0YUhhbmRsZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGUKICAgewotICAgIGNtQXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgfQogCiAgIHZvaWQgRW5kRWxlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmN4eAppbmRleCBhNWVjMWFlLi5jMWVjYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuY3h4CkBAIC0yLDkgKzIsMTEgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKQEAgLTEyLDYgKzE0LDcgQEAKICNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKKyNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTE2MiwxMiArMTY1LDEzIEBACiB2b2lkIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkdlbmVyYXRlVGVzdENvbW1hbmQoCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncywgaW50IHRlc3QpCiB7Ci0gIHN0ZDo6c3RyaW5nIGluZGV4OwotICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICBzdGQ6OnN0cmluZyBpbmRleCA9IHN0ZDo6dG9fc3RyaW5nKHRlc3QpOwogICBzdGQ6OnN0cmluZyBtZW1jaGVja2NvbW1hbmQgPQogICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgodGhpcy0+TWVtb3J5VGVzdGVyKTsKLSAgc3RyZWFtIDw8IHRlc3Q7Ci0gIGluZGV4ID0gc3RyZWFtLnN0cigpOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkaXJzOworICBib29sIG5leHRBcmdJc0RpciA9IGZhbHNlOworCiAgIGZvciAoc3RkOjpzdHJpbmcgYXJnIDogdGhpcy0+TWVtb3J5VGVzdGVyRHluYW1pY09wdGlvbnMpIHsKICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IGFyZy5maW5kKCI/PyIpOwogICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKQEAgLTE3Nyw2ICsxODEsMTYgQEAKICAgICBtZW1jaGVja2NvbW1hbmQgKz0gIiBcIiI7CiAgICAgbWVtY2hlY2tjb21tYW5kICs9IGFyZzsKICAgICBtZW1jaGVja2NvbW1hbmQgKz0gIlwiIjsKKworICAgIGlmIChuZXh0QXJnSXNEaXIpIHsKKyAgICAgIG5leHRBcmdJc0RpciA9IGZhbHNlOworICAgICAgZGlycy5wdXNoX2JhY2soYXJnKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPT0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlkgJiYKKyAgICAgICAgKGFyZyA9PSAiLWxvZ2RpciIgfHwgYXJnID09ICItc3ltY2FjaGVfZGlyIikpIHsKKyAgICAgIG5leHRBcmdJc0RpciA9IHRydWU7CisgICAgfQogICB9CiAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIG1lbW9yeSB0ZXN0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgbWVtb3J5IHRlc3RpbmcgcHJvZ3JhbXMgdGhhdCBwYXNzIG9wdGlvbnMKQEAgLTIwOCw2ICsyMjIsMTEgQEAKICAgICBtZW1jaGVja2NvbW1hbmQgKz0gIiAiICsgbWVtVGVzdGVyRW52aXJvbm1lbnRWYXJpYWJsZTsKICAgICBhcmdzLnB1c2hfYmFjayhtZW1UZXN0ZXJFbnZpcm9ubWVudFZhcmlhYmxlKTsKICAgfQorCisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGRpciA6IGRpcnMpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGRpcik7CisgIH0KKwogICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfVkVSQk9TRV9PVVRQVVQsCiAgICAgICAgICAgICAgICAgICAgICAiTWVtb3J5IGNoZWNrIGNvbW1hbmQ6ICIgPDwgbWVtY2hlY2tjb21tYW5kIDw8IHN0ZDo6ZW5kbCwKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKQEAgLTMwMCw2ICszMTksOSBAQAogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VkFMR1JJTkQ6CiAgICAgICB4bWwuQXR0cmlidXRlKCJDaGVja2VyIiwgIlZhbGdyaW5kIik7CiAgICAgICBicmVhazsKKyAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkRSTUVNT1JZOgorICAgICAgeG1sLkF0dHJpYnV0ZSgiQ2hlY2tlciIsICJEck1lbW9yeSIpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQVVJJRlk6CiAgICAgICB4bWwuQXR0cmlidXRlKCJDaGVja2VyIiwgIlB1cmlmeSIpOwogICAgICAgYnJlYWs7CkBAIC0zODcsMTEgKzQwOSwxMSBAQAogICB9CiAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9PVVRQVVQsCiAgICAgICAgICAgICAgICAgICAgICAiTWVtQ2hlY2sgbG9nIGZpbGVzIGNhbiBiZSBmb3VuZCBoZXJlOiAiCi0gICAgICAgICAgICAgICAgICAgICAiKCAqIGNvcnJlc3BvbmRzIHRvIHRlc3QgbnVtYmVyKSIKKyAgICAgICAgICAgICAgICAgICAgICIoPCM+IGNvcnJlc3BvbmRzIHRvIHRlc3QgbnVtYmVyKSIKICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsLAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogICBzdGQ6OnN0cmluZyBvdXRwdXQgPSB0aGlzLT5NZW1vcnlUZXN0ZXJPdXRwdXRGaWxlOwotICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKG91dHB1dCwgIj8/IiwgIioiKTsKKyAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhvdXRwdXQsICI/PyIsICI8Iz4iKTsKICAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX09VVFBVVCwgb3V0cHV0IDw8IHN0ZDo6ZW5kbCwKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKICAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX09VVFBVVCwKQEAgLTQzNyw2ICs0NTksMTAgQEAKICAgICBpZiAodGVzdGVyTmFtZS5maW5kKCJ2YWxncmluZCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zIHx8CiAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1lbW9yeUNoZWNrVHlwZSIpID09ICJWYWxncmluZCIpIHsKICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VkFMR1JJTkQ7CisgICAgfSBlbHNlIGlmICh0ZXN0ZXJOYW1lLmZpbmQoImRybWVtb3J5IikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKKyAgICAgICAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1lbW9yeUNoZWNrVHlwZSIpID09CisgICAgICAgICAgICAgICAgICJEck1lbW9yeSIpIHsKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk7CiAgICAgfSBlbHNlIGlmICh0ZXN0ZXJOYW1lLmZpbmQoInB1cmlmeSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlBVUklGWTsKICAgICB9IGVsc2UgaWYgKHRlc3Rlck5hbWUuZmluZCgiQkMiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewpAQCAtNDUzLDYgKzQ3OSwxMCBAQAogICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIlZhbGdyaW5kQ29tbWFuZCIpOwogICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VkFMR1JJTkQ7CiAgIH0gZWxzZSBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cygKKyAgICAgICAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkRyTWVtb3J5Q29tbWFuZCIpKSkgeworICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkRyTWVtb3J5Q29tbWFuZCIpOworICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk7CisgIH0gZWxzZSBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cygKICAgICAgICAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJvdW5kc0NoZWNrZXJDb21tYW5kIikpKSB7CiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0KICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJvdW5kc0NoZWNrZXJDb21tYW5kIik7CkBAIC00OTgsNiArNTI4LDggQEAKICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Qk9VTkRTX0NIRUNLRVI7CiAgICAgfSBlbHNlIGlmIChjaGVja1R5cGUgPT0gIlZhbGdyaW5kIikgewogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpWQUxHUklORDsKKyAgICB9IGVsc2UgaWYgKGNoZWNrVHlwZSA9PSAiRHJNZW1vcnkiKSB7CisgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkRSTUVNT1JZOwogICAgIH0KICAgfQogICBpZiAodGhpcy0+TWVtb3J5VGVzdGVyLmVtcHR5KCkpIHsKQEAgLTUxOSw2ICs1NTEsMTAgQEAKICAgICAgICAgICAgICAgICAuZW1wdHkoKSkgewogICAgIG1lbW9yeVRlc3Rlck9wdGlvbnMgPQogICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiVmFsZ3JpbmRDb21tYW5kT3B0aW9ucyIpOworICB9IGVsc2UgaWYgKCF0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJEck1lbW9yeUNvbW1hbmRPcHRpb25zIikKKyAgICAgICAgICAgICAgICAuZW1wdHkoKSkgeworICAgIG1lbW9yeVRlc3Rlck9wdGlvbnMgPQorICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiRHJNZW1vcnlDb21tYW5kT3B0aW9ucyIpOwogICB9CiAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMgPQogICAgIGNtU3lzdGVtVG9vbHM6OlBhcnNlQXJndW1lbnRzKG1lbW9yeVRlc3Rlck9wdGlvbnMpOwpAQCAtNTU0LDYgKzU5MCw2NCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUpOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk6IHsKKyAgICAgIHN0ZDo6c3RyaW5nIHRlbXBEck1lbW9yeURpciA9CisgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRCaW5hcnlEaXIoKSArICIvVGVzdGluZy9UZW1wb3JhcnkvRHJNZW1vcnkiOworCisgICAgICBpZiAoIWNtQ29udGFpbnModGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucywgIi1xdWlldCIpKSB7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW1wbGFjZV9iYWNrKCItcXVpZXQiKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMsICItYmF0Y2giKSkgeworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygiLWJhdGNoIik7CisgICAgICB9CisKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3RlckR5bmFtaWNPcHRpb25zLmVtcGxhY2VfYmFjaygiLWxvZ2RpciIpOworICAgICAgYXV0byBsb2dkaXJPcHRpb24gPQorICAgICAgICBzdGQ6OmZpbmQodGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbmQoKSwgIi1sb2dkaXIiKTsKKyAgICAgIGlmIChsb2dkaXJPcHRpb24gPT0gdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbmQoKSkgeworICAgICAgICAvLyBObyBsb2dkaXIgZm91bmQgaW4gbWVtb3J5IHRlc3RlciBvcHRpb25zCisgICAgICAgIHN0ZDo6c3RyaW5nIGRyTWVtb3J5TG9nRGlyID0gdGVtcERyTWVtb3J5RGlyICsgIi8/PyI7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlckR5bmFtaWNPcHRpb25zLnB1c2hfYmFjayhkck1lbW9yeUxvZ0Rpcik7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUgPSBkck1lbW9yeUxvZ0RpcjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFVzZSBsb2dkaXIgZm91bmQgaW4gbWVtb3J5IHRlc3RlciBvcHRpb25zCisgICAgICAgIGF1dG8gbG9nZGlyTG9jYXRpb24gPSBzdGQ6Om5leHQobG9nZGlyT3B0aW9uKTsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3V0cHV0RmlsZSA9ICpsb2dkaXJMb2NhdGlvbjsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyRHluYW1pY09wdGlvbnMucHVzaF9iYWNrKCpsb2dkaXJMb2NhdGlvbik7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZXJhc2UobG9nZGlyT3B0aW9uLCBsb2dkaXJMb2NhdGlvbiArIDEpOworICAgICAgfQorICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3V0cHV0RmlsZSArPSAiLyovcmVzdWx0cy50eHQiOworCisgICAgICBpZiAoc3RkOjpmaW5kKHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgIi1zeW1jYWNoZV9kaXIiKSA9PSB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVuZCgpKSB7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlckR5bmFtaWNPcHRpb25zLmVtcGxhY2VfYmFjaygiLXN5bWNhY2hlX2RpciIpOworICAgICAgICBzdGQ6OnN0cmluZyBkck1lbW9yeUNhY2hlRGlyID0gdGVtcERyTWVtb3J5RGlyICsgIi9jYWNoZSI7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlckR5bmFtaWNPcHRpb25zLnB1c2hfYmFjayhkck1lbW9yeUNhY2hlRGlyKTsKKyAgICAgIH0KKworICAgICAgaWYgKCF0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJNZW1vcnlDaGVja1N1cHByZXNzaW9uRmlsZSIpCisgICAgICAgICAgICAgLmVtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICJNZW1vcnlDaGVja1N1cHByZXNzaW9uRmlsZSIpKSkgeworICAgICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCisgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGZpbmQgbWVtb3J5IGNoZWNrZXIgc3VwcHJlc3Npb24gZmlsZTogIgorICAgICAgICAgICAgICAgICAgICAgICA8PCB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZW1vcnlDaGVja1N1cHByZXNzaW9uRmlsZSIpCisgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW1wbGFjZV9iYWNrKCItc3VwcHJlc3MiKTsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5wdXNoX2JhY2soCisgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tTdXBwcmVzc2lvbkZpbGUiKSk7CisgICAgICB9CisKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW1wbGFjZV9iYWNrKCItLSIpOworCisgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQVVJJRlk6IHsKICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dEZpbGU7CiAjaWZkZWYgX1dJTjMyCkBAIC02NjcsNiArNzYxLDggQEAKICAgc3dpdGNoICh0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSkgewogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VkFMR1JJTkQ6CiAgICAgICByZXR1cm4gdGhpcy0+UHJvY2Vzc01lbUNoZWNrVmFsZ3JpbmRPdXRwdXQoc3RyLCBsb2csIHJlc3VsdHMpOworICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk6CisgICAgICByZXR1cm4gdGhpcy0+UHJvY2Vzc01lbUNoZWNrRHJNZW1vcnlPdXRwdXQoc3RyLCBsb2csIHJlc3VsdHMpOwogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UFVSSUZZOgogICAgICAgcmV0dXJuIHRoaXMtPlByb2Nlc3NNZW1DaGVja1B1cmlmeU91dHB1dChzdHIsIGxvZywgcmVzdWx0cyk7CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBRERSRVNTX1NBTklUSVpFUjoKQEAgLTkzMiw2ICsxMDI4LDQ3IEBACiAgIHJldHVybiBkZWZlY3RzID09IDA7CiB9CiAKK2Jvb2wgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UHJvY2Vzc01lbUNoZWNrRHJNZW1vcnlPdXRwdXQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpCit7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5lczsKKyAgY21zeXM6OlN5c3RlbVRvb2xzOjpTcGxpdChzdHIsIGxpbmVzKTsKKworICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gZHJNZW1vcnlFcnJvcigiXkVycm9yICNbMC05XSsiKTsKKworICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gdW5hZGRyZXNzYWJsZUFjY2VzcygiVU5BRERSRVNTQUJMRSBBQ0NFU1MiKTsKKyAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIHVuaW5pdGlhbGl6ZWRSZWFkKCJVTklOSVRJQUxJWkVEIFJFQUQiKTsKKyAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGludmFsaWRIZWFwQXJndW1lbnQoIklOVkFMSUQgSEVBUCBBUkdVTUVOVCIpOworICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gbGVhaygiTEVBSyIpOworICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gaGFuZGxlTGVhaygiSEFORExFIExFQUsiKTsKKworICBpbnQgZGVmZWN0cyA9IDA7CisKKyAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zdHI7CisgIGZvciAoY29uc3QgYXV0byYgbCA6IGxpbmVzKSB7CisgICAgb3N0ciA8PCBsIDw8IHN0ZDo6ZW5kbDsKKyAgICBpZiAoZHJNZW1vcnlFcnJvci5maW5kKGwpKSB7CisgICAgICBkZWZlY3RzKys7CisgICAgICBpZiAodW5hZGRyZXNzYWJsZUFjY2Vzcy5maW5kKGwpKSB7CisgICAgICAgIHJlc3VsdHNbY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1SXSsrOworICAgICAgfSBlbHNlIGlmICh1bmluaXRpYWxpemVkUmVhZC5maW5kKGwpKSB7CisgICAgICAgIHJlc3VsdHNbY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1SXSsrOworICAgICAgfSBlbHNlIGlmIChsZWFrLmZpbmQobCkpIHsKKyAgICAgICAgcmVzdWx0c1tjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpNTEtdKys7CisgICAgICB9IGVsc2UgaWYgKGhhbmRsZUxlYWsuZmluZChsKSkgeworICAgICAgICByZXN1bHRzW2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6Ok1MS10rKzsKKyAgICAgIH0gZWxzZSBpZiAoaW52YWxpZEhlYXBBcmd1bWVudC5maW5kKGwpKSB7CisgICAgICAgIHJlc3VsdHNbY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Rk1NXSsrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGxvZyA9IG9zdHIuc3RyKCk7CisKKyAgdGhpcy0+RGVmZWN0Q291bnQgKz0gZGVmZWN0czsKKyAgcmV0dXJuIGRlZmVjdHMgPT0gMDsKK30KKwogYm9vbCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQcm9jZXNzTWVtQ2hlY2tCb3VuZHNDaGVja2VyT3V0cHV0KAogICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLCBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKQogewpAQCAtOTkxLDYgKzExMjgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogICBpZiAodGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPT0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Qk9VTkRTX0NIRUNLRVIpIHsKICAgICB0aGlzLT5Qb3N0UHJvY2Vzc0JvdW5kc0NoZWNrZXJUZXN0KHJlcywgdGVzdCk7CisgIH0gZWxzZSBpZiAodGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPT0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlkpIHsKKyAgICB0aGlzLT5Qb3N0UHJvY2Vzc0RyTWVtb3J5VGVzdChyZXMsIHRlc3QpOwogICB9IGVsc2UgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlczsKICAgICB0aGlzLT5UZXN0T3V0cHV0RmlsZU5hbWVzKHRlc3QsIGZpbGVzKTsKQEAgLTEwNDUsNiArMTE4NCwzNyBAQAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogfQogCit2b2lkIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlBvc3RQcm9jZXNzRHJNZW1vcnlUZXN0KAorICBjbUNUZXN0VGVzdEhhbmRsZXI6OmNtQ1Rlc3RUZXN0UmVzdWx0JiByZXMsIGludCB0ZXN0KQoreworICBzdGQ6OnN0cmluZyBkck1lbW9yeUxvZ0RpciA9IHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUuc3Vic3RyKAorICAgIDAsIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUuZmluZCgiLyovcmVzdWx0cy50eHQiKSk7CisKKyAgLy8gcmVwbGFjZSBwbGFjZWhvbGRlciBvZiB0ZXN0CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gZHJNZW1vcnlMb2dEaXIuZmluZCgiPz8iKTsKKyAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIGRyTWVtb3J5TG9nRGlyLnJlcGxhY2UocG9zLCAyLCBzdGQ6OnRvX3N0cmluZyh0ZXN0KSk7CisgIH0KKworICBjbXN5czo6R2xvYiBnOworICBnLkZpbmRGaWxlcyhkck1lbW9yeUxvZ0RpciArICIvcmVzZmlsZS4qIik7CisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmlsZXMgPSBnLkdldEZpbGVzKCk7CisKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZiA6IGZpbGVzKSB7CisgICAgY21zeXM6Omlmc3RyZWFtIGlmcyhmLmNfc3RyKCkpOworICAgIGlmICghaWZzKSB7CisgICAgICBzdGQ6OnN0cmluZyBsb2cgPSAiQ2Fubm90IHJlYWQgbWVtb3J5IHRlc3RlciBvdXRwdXQgZmlsZTogIiArIGY7CisgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLCBsb2cgPDwgc3RkOjplbmRsKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0RmlsZUxvY2F0aW9uOworICAgIGNtU3lzdGVtVG9vbHM6OkdldExpbmVGcm9tU3RyZWFtKGlmcywgcmVzdWx0RmlsZUxvY2F0aW9uKTsKKyAgICB0aGlzLT5BcHBlbmRNZW1UZXN0ZXJPdXRwdXQocmVzLCByZXN1bHRGaWxlTG9jYXRpb24pOworICAgIGlmcy5jbG9zZSgpOworICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZik7CisgIH0KK30KKwogdm9pZCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBcHBlbmRNZW1UZXN0ZXJPdXRwdXQoY21DVGVzdFRlc3RSZXN1bHQmIHJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvZmlsZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5oCmluZGV4IGVkYTY1ZjcuLjUyNjY3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuaApAQCAtNDMsNiArNDMsNyBAQAogICAgIFVOS05PV04gPSAwLAogICAgIFZBTEdSSU5ELAogICAgIFBVUklGWSwKKyAgICBEUk1FTU9SWSwKICAgICBCT1VORFNfQ0hFQ0tFUiwKICAgICAvLyBjaGVja2VycyBhZnRlciBoZXJlIGRvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIGVycm9yIGxpc3QKICAgICBBRERSRVNTX1NBTklUSVpFUiwKQEAgLTEzMiw2ICsxMzMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKTsKICAgYm9vbCBQcm9jZXNzTWVtQ2hlY2tWYWxncmluZE91dHB1dChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpOworICBib29sIFByb2Nlc3NNZW1DaGVja0RyTWVtb3J5T3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiYgcmVzdWx0cyk7CiAgIGJvb2wgUHJvY2Vzc01lbUNoZWNrUHVyaWZ5T3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpOwogICBib29sIFByb2Nlc3NNZW1DaGVja1Nhbml0aXplck91dHB1dChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLApAQCAtMTQyLDYgKzE0NSw3IEBACiAKICAgdm9pZCBQb3N0UHJvY2Vzc1Rlc3QoY21DVGVzdFRlc3RSZXN1bHQmIHJlcywgaW50IHRlc3QpOwogICB2b2lkIFBvc3RQcm9jZXNzQm91bmRzQ2hlY2tlclRlc3QoY21DVGVzdFRlc3RSZXN1bHQmIHJlcywgaW50IHRlc3QpOworICB2b2lkIFBvc3RQcm9jZXNzRHJNZW1vcnlUZXN0KGNtQ1Rlc3RUZXN0UmVzdWx0JiByZXMsIGludCB0ZXN0KTsKIAogICAvLyEgYXBwZW5kIE1lbW9yeVRlc3Rlck91dHB1dEZpbGUgdG8gdGhlIHRlc3QgbG9nCiAgIHZvaWQgQXBwZW5kTWVtVGVzdGVyT3V0cHV0KGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Y21DVGVzdFRlc3RSZXN1bHQmIHJlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuY3h4CmluZGV4IDAyZDM5NmUuLjUwYzk2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmN4eApAQCAtMTIsMTMgKzEyLDE1IEBACiAjaW5jbHVkZSA8aW9tYW5pcD4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0YWNrPgogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3lzdGVtSW5mb3JtYXRpb24uaHh4IgogCkBAIC0xNzAsMTAgKzE3MiwxMSBAQAogICB0aGlzLT5FcmFzZVRlc3QodGVzdCk7CiAgIHRoaXMtPlJ1bm5pbmdDb3VudCArPSBHZXRQcm9jZXNzb3JzVXNlZCh0ZXN0KTsKIAotICBjbUNUZXN0UnVuVGVzdCogdGVzdFJ1biA9IG5ldyBjbUNUZXN0UnVuVGVzdCgqdGhpcyk7Ci0gIGlmICh0aGlzLT5DVGVzdC0+R2V0UmVwZWF0VW50aWxGYWlsKCkpIHsKLSAgICB0ZXN0UnVuLT5TZXRSdW5VbnRpbEZhaWxPbigpOwotICAgIHRlc3RSdW4tPlNldE51bWJlck9mUnVucyh0aGlzLT5DVGVzdC0+R2V0VGVzdFJlcGVhdCgpKTsKKyAgYXV0byB0ZXN0UnVuID0gY206Om1ha2VfdW5pcXVlPGNtQ1Rlc3RSdW5UZXN0PigqdGhpcyk7CisKKyAgaWYgKHRoaXMtPlJlcGVhdE1vZGUgIT0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcikgeworICAgIHRlc3RSdW4tPlNldFJlcGVhdE1vZGUodGhpcy0+UmVwZWF0TW9kZSk7CisgICAgdGVzdFJ1bi0+U2V0TnVtYmVyT2ZSdW5zKHRoaXMtPlJlcGVhdENvdW50KTsKICAgfQogICB0ZXN0UnVuLT5TZXRJbmRleCh0ZXN0KTsKICAgdGVzdFJ1bi0+U2V0VGVzdFByb3BlcnRpZXModGhpcy0+UHJvcGVydGllc1t0ZXN0XSk7CkBAIC0xOTQsMjggKzE5Nyw1OCBAQAogICAvLyB3b3JraW5nIGRpcmVjdG9yeSBiZWNhdXNlIEZpbmlzaFRlc3RQcm9jZXNzKCkgd2lsbCB0cnkgdG8gdW5sb2NrIHRoZW0KICAgdGhpcy0+TG9ja1Jlc291cmNlcyh0ZXN0KTsKIAotICBpZiAoIXRoaXMtPlRlc3RzSGF2ZVN1ZmZpY2llbnRSZXNvdXJjZXNbdGVzdF0pIHsKLSAgICB0ZXN0UnVuLT5TdGFydEZhaWx1cmUoIkluc3VmZmljaWVudCByZXNvdXJjZXMiKTsKLSAgICB0aGlzLT5GaW5pc2hUZXN0UHJvY2Vzcyh0ZXN0UnVuLCBmYWxzZSk7CisgIGlmICghdGhpcy0+UmVzb3VyY2VBbGxvY2F0aW9uRXJyb3JzW3Rlc3RdLmVtcHR5KCkpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKKyAgICBlIDw8ICJJbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0ICIgPDwgdGhpcy0+UHJvcGVydGllc1t0ZXN0XS0+TmFtZQorICAgICAgPDwgIjpcblxuIjsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGl0IDogdGhpcy0+UmVzb3VyY2VBbGxvY2F0aW9uRXJyb3JzW3Rlc3RdKSB7CisgICAgICBzd2l0Y2ggKGl0LnNlY29uZCkgeworICAgICAgICBjYXNlIFJlc291cmNlQWxsb2NhdGlvbkVycm9yOjpOb1Jlc291cmNlVHlwZToKKyAgICAgICAgICBlIDw8ICIgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICciIDw8IGl0LmZpcnN0CisgICAgICAgICAgICA8PCAiJyB3aGljaCBkb2VzIG5vdCBleGlzdFxuIjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJlc291cmNlQWxsb2NhdGlvbkVycm9yOjpJbnN1ZmZpY2llbnRSZXNvdXJjZXM6CisgICAgICAgICAgZSA8PCAiICBUZXN0IHJlcXVlc3RlZCByZXNvdXJjZXMgb2YgdHlwZSAnIiA8PCBpdC5maXJzdAorICAgICAgICAgICAgPDwgIicgaW4gdGhlIGZvbGxvd2luZyBhbW91bnRzOlxuIjsKKyAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGdyb3VwIDogdGhpcy0+UHJvcGVydGllc1t0ZXN0XS0+UmVzb3VyY2VHcm91cHMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgcmVxdWlyZW1lbnQgOiBncm91cCkgeworICAgICAgICAgICAgICBpZiAocmVxdWlyZW1lbnQuUmVzb3VyY2VUeXBlID09IGl0LmZpcnN0KSB7CisgICAgICAgICAgICAgICAgZSA8PCAiICAgICIgPDwgcmVxdWlyZW1lbnQuU2xvdHNOZWVkZWQKKyAgICAgICAgICAgICAgICAgIDw8IChyZXF1aXJlbWVudC5TbG90c05lZWRlZCA9PSAxID8gIiBzbG90XG4iIDogIiBzbG90c1xuIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZSA8PCAiICBidXQgb25seSB0aGUgZm9sbG93aW5nIHVuaXRzIHdlcmUgYXZhaWxhYmxlOlxuIjsKKyAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIHJlcyA6CisgICAgICAgICAgICAgICB0aGlzLT5SZXNvdXJjZUFsbG9jYXRvci5HZXRSZXNvdXJjZXMoKS5hdChpdC5maXJzdCkpIHsKKyAgICAgICAgICAgIGUgPDwgIiAgICAnIiA8PCByZXMuZmlyc3QgPDwgIic6ICIgPDwgcmVzLnNlY29uZC5Ub3RhbAorICAgICAgICAgICAgICA8PCAocmVzLnNlY29uZC5Ub3RhbCA9PSAxID8gIiBzbG90XG4iIDogIiBzbG90c1xuIik7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZSA8PCAiXG4iOworICAgIH0KKyAgICBlIDw8ICJSZXNvdXJjZSBzcGVjIGZpbGU6XG5cbiAgIiA8PCB0aGlzLT5UZXN0SGFuZGxlci0+UmVzb3VyY2VTcGVjRmlsZTsKKyAgICBjbUNUZXN0UnVuVGVzdDo6U3RhcnRGYWlsdXJlKHN0ZDo6bW92ZSh0ZXN0UnVuKSwgZS5zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnN1ZmZpY2llbnQgcmVzb3VyY2VzIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgY21Xb3JraW5nRGlyZWN0b3J5IHdvcmtkaXIodGhpcy0+UHJvcGVydGllc1t0ZXN0XS0+RGlyZWN0b3J5KTsKICAgaWYgKHdvcmtkaXIuRmFpbGVkKCkpIHsKLSAgICB0ZXN0UnVuLT5TdGFydEZhaWx1cmUoIkZhaWxlZCB0byBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdG8gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPkRpcmVjdG9yeSArICIgOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJlcnJvcih3b3JrZGlyLkdldExhc3RSZXN1bHQoKSkpOwotICB9IGVsc2UgewotICAgIGlmICh0ZXN0UnVuLT5TdGFydFRlc3QodGhpcy0+Q29tcGxldGVkLCB0aGlzLT5Ub3RhbCkpIHsKLSAgICAgIC8vIE93bmVyc2hpcCBvZiAndGVzdFJ1bicgaGFzIG1vdmVkIHRvIGFub3RoZXIgc3RydWN0dXJlLgotICAgICAgLy8gV2hlbiB0aGUgdGVzdCBmaW5pc2hlcywgRmluaXNoVGVzdFByb2Nlc3Mgd2lsbCBiZSBjYWxsZWQuCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0RmFpbHVyZShzdGQ6Om1vdmUodGVzdFJ1biksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UHJvcGVydGllc1t0ZXN0XS0+RGlyZWN0b3J5ICsgIiA6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmVycm9yKHdvcmtkaXIuR2V0TGFzdFJlc3VsdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5Iik7CisgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgLy8gUGFzcyBvd25lcnNoaXAgb2YgJ3Rlc3RSdW4nLgotICB0aGlzLT5GaW5pc2hUZXN0UHJvY2Vzcyh0ZXN0UnVuLCBmYWxzZSk7Ci0gIHJldHVybiBmYWxzZTsKKyAgLy8gT3duZXJzaGlwIG9mICd0ZXN0UnVuJyBoYXMgbW92ZWQgdG8gYW5vdGhlciBzdHJ1Y3R1cmUuCisgIC8vIFdoZW4gdGhlIHRlc3QgZmluaXNoZXMsIEZpbmlzaFRlc3RQcm9jZXNzIHdpbGwgYmUgY2FsbGVkLgorICByZXR1cm4gY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzdGQ6Om1vdmUodGVzdFJ1biksIHRoaXMtPkNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VG90YWwpOwogfQogCiBib29sIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyOjpBbGxvY2F0ZVJlc291cmNlcyhpbnQgaW5kZXgpCkBAIC0yNDcsNyArMjgwLDggQEAKIAogYm9vbCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6VHJ5QWxsb2NhdGVSZXNvdXJjZXMoCiAgIGludCBpbmRleCwKLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RCaW5QYWNrZXJBbGxvY2F0aW9uPj4mIGFsbG9jYXRpb25zKQorICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21DVGVzdEJpblBhY2tlckFsbG9jYXRpb24+PiYgYWxsb2NhdGlvbnMsCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcj4qIGVycm9ycykKIHsKICAgYWxsb2NhdGlvbnMuY2xlYXIoKTsKIApAQCAtMjYyLDE4ICsyOTYsMjggQEAKICAgICArK3Byb2Nlc3NJbmRleDsKICAgfQogCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgYXV0byBjb25zdCYgYXZhaWxhYmxlUmVzb3VyY2VzID0gdGhpcy0+UmVzb3VyY2VBbGxvY2F0b3IuR2V0UmVzb3VyY2VzKCk7CiAgIGZvciAoYXV0byYgaXQgOiBhbGxvY2F0aW9ucykgewogICAgIGlmICghYXZhaWxhYmxlUmVzb3VyY2VzLmNvdW50KGl0LmZpcnN0KSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWNtQWxsb2NhdGVDVGVzdFJlc291cmNlc1JvdW5kUm9iaW4oYXZhaWxhYmxlUmVzb3VyY2VzLmF0KGl0LmZpcnN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc2Vjb25kKSkgewotICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKGVycm9ycykgeworICAgICAgICAoKmVycm9ycylbaXQuZmlyc3RdID0gUmVzb3VyY2VBbGxvY2F0aW9uRXJyb3I6Ok5vUmVzb3VyY2VUeXBlOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFjbUFsbG9jYXRlQ1Rlc3RSZXNvdXJjZXNSb3VuZFJvYmluKAorICAgICAgICAgICAgICAgICBhdmFpbGFibGVSZXNvdXJjZXMuYXQoaXQuZmlyc3QpLCBpdC5zZWNvbmQpKSB7CisgICAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgICgqZXJyb3JzKVtpdC5maXJzdF0gPSBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcjo6SW5zdWZmaWNpZW50UmVzb3VyY2VzOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KICAgICB9CiAgIH0KIAotICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6RGVhbGxvY2F0ZVJlc291cmNlcyhpbnQgaW5kZXgpCkBAIC0zMTQsMTEgKzM1OCwxMyBAQAogCiB2b2lkIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyOjpDaGVja1Jlc291cmNlc0F2YWlsYWJsZSgpCiB7Ci0gIGZvciAoYXV0byB0ZXN0IDogdGhpcy0+U29ydGVkVGVzdHMpIHsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21DVGVzdEJpblBhY2tlckFsbG9jYXRpb24+PiBhbGxvY2F0aW9uczsKLSAgICB0aGlzLT5UZXN0c0hhdmVTdWZmaWNpZW50UmVzb3VyY2VzW3Rlc3RdID0KLSAgICAgICF0aGlzLT5UZXN0SGFuZGxlci0+VXNlUmVzb3VyY2VTcGVjIHx8Ci0gICAgICB0aGlzLT5UcnlBbGxvY2F0ZVJlc291cmNlcyh0ZXN0LCBhbGxvY2F0aW9ucyk7CisgIGlmICh0aGlzLT5UZXN0SGFuZGxlci0+VXNlUmVzb3VyY2VTcGVjKSB7CisgICAgZm9yIChhdXRvIHRlc3QgOiB0aGlzLT5Tb3J0ZWRUZXN0cykgeworICAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RCaW5QYWNrZXJBbGxvY2F0aW9uPj4KKyAgICAgICAgYWxsb2NhdGlvbnM7CisgICAgICB0aGlzLT5UcnlBbGxvY2F0ZVJlc291cmNlcyh0ZXN0LCBhbGxvY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGlzLT5SZXNvdXJjZUFsbG9jYXRpb25FcnJvcnNbdGVzdF0pOworICAgIH0KICAgfQogfQogCkBAIC00MDUsNyArNDUxLDcgQEAKICAgfQogCiAgIC8vIEFsbG9jYXRlIHJlc291cmNlcwotICBpZiAodGhpcy0+VGVzdHNIYXZlU3VmZmljaWVudFJlc291cmNlc1t0ZXN0XSAmJgorICBpZiAodGhpcy0+UmVzb3VyY2VBbGxvY2F0aW9uRXJyb3JzW3Rlc3RdLmVtcHR5KCkgJiYKICAgICAgICF0aGlzLT5BbGxvY2F0ZVJlc291cmNlcyh0ZXN0KSkgewogICAgIHRoaXMtPkRlYWxsb2NhdGVSZXNvdXJjZXModGVzdCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDkyLDcgKzUzOCw4IEBACiAgICAgaWYgKHRoaXMtPlNlcmlhbFRlc3RSdW5uaW5nKSB7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgLy8gV2UgY2FuIG9ubHkgc3RhcnQgYSBSVU5fU0VSSUFMIHRlc3QgaWYgbm8gb3RoZXIgdGVzdHMgYXJlIGFsc28gcnVubmluZy4KKyAgICAvLyBXZSBjYW4gb25seSBzdGFydCBhIFJVTl9TRVJJQUwgdGVzdCBpZiBubyBvdGhlciB0ZXN0cyBhcmUgYWxzbworICAgIC8vIHJ1bm5pbmcuCiAgICAgaWYgKHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPlJ1blNlcmlhbCAmJiB0aGlzLT5SdW5uaW5nQ291bnQgPiAwKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CkBAIC01NzAsOCArNjE3LDggQEAKICAgc2VsZi0+U3RhcnROZXh0VGVzdHMoKTsKIH0KIAotdm9pZCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6RmluaXNoVGVzdFByb2Nlc3MoY21DVGVzdFJ1blRlc3QqIHJ1bm5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCkKK3ZvaWQgY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OkZpbmlzaFRlc3RQcm9jZXNzKAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwgYm9vbCBzdGFydGVkKQogewogICB0aGlzLT5Db21wbGV0ZWQrKzsKIApAQCAtNTgzLDcgKzYzMCw4IEBACiAgICAgdGhpcy0+U2V0U3RvcFRpbWVQYXNzZWQoKTsKICAgfQogICBpZiAoc3RhcnRlZCkgewotICAgIGlmICghdGhpcy0+U3RvcFRpbWVQYXNzZWQgJiYgcnVubmVyLT5TdGFydEFnYWluKHRoaXMtPkNvbXBsZXRlZCkpIHsKKyAgICBpZiAoIXRoaXMtPlN0b3BUaW1lUGFzc2VkICYmCisgICAgICAgIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEFnYWluKHN0ZDo6bW92ZShydW5uZXIpLCB0aGlzLT5Db21wbGV0ZWQpKSB7CiAgICAgICB0aGlzLT5Db21wbGV0ZWQtLTsgLy8gcmVtb3ZlIHRoZSBjb21wbGV0ZWQgdGVzdCBiZWNhdXNlIHJ1biBhZ2FpbgogICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxMSw3ICs2NTksNyBAQAogICB9CiAgIHByb3BlcnRpZXMtPkFmZmluaXR5LmNsZWFyKCk7CiAKLSAgZGVsZXRlIHJ1bm5lcjsKKyAgcnVubmVyLnJlc2V0KCk7CiAgIGlmIChzdGFydGVkKSB7CiAgICAgdGhpcy0+U3RhcnROZXh0VGVzdHMoKTsKICAgfQpAQCAtNzg4LDcgKzgzNiw3IEBACiAgIC8vIFNvcnQgdGVzdHMgd2l0aGluIGVhY2ggbGV2ZWwgYnkgQ09TVCBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIGNvc3QgbGlzdC4KICAgZm9yIChUZXN0U2V0IGNvbnN0JiBjdXJyZW50U2V0IDogY21SZXZlcnNlUmFuZ2UocHJpb3JpdHlTdGFjaykpIHsKICAgICBUZXN0TGlzdCBzb3J0ZWRDb3B5OwotICAgIGNtQXBwZW5kKHNvcnRlZENvcHksIGN1cnJlbnRTZXQpOworICAgIGNtOjphcHBlbmQoc29ydGVkQ29weSwgY3VycmVudFNldCk7CiAgICAgc3RkOjpzdGFibGVfc29ydChzb3J0ZWRDb3B5LmJlZ2luKCksIHNvcnRlZENvcHkuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcGFyYXRvcih0aGlzKSk7CiAKQEAgLTExNTQsNyArMTIwMiw3IEBACiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmdzID0gdGVzdFJ1bi5HZXRBcmd1bWVudHMoKTsKICAgICBpZiAoIWFyZ3MuZW1wdHkoKSkgewogICAgICAgY29tbWFuZEFuZEFyZ3MucmVzZXJ2ZShhcmdzLnNpemUoKSArIDEpOwotICAgICAgY21BcHBlbmQoY29tbWFuZEFuZEFyZ3MsIGFyZ3MpOworICAgICAgY206OmFwcGVuZChjb21tYW5kQW5kQXJncywgYXJncyk7CiAgICAgfQogICAgIHRlc3RJbmZvWyJjb21tYW5kIl0gPSBEdW1wVG9Kc29uQXJyYXkoY29tbWFuZEFuZEFyZ3MpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5oCmluZGV4IDFkYjRiZmQuLmMzNjg2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtMTQsMTEgKzE1LDExIEBACiAKICNpbmNsdWRlICJjbV91di5oIgogCisjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RSZXNvdXJjZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgImNtQ1Rlc3RUZXN0SGFuZGxlci5oIgogI2luY2x1ZGUgImNtVVZIYW5kbGVQdHIuaCIKIAotY2xhc3MgY21DVGVzdDsKIHN0cnVjdCBjbUNUZXN0QmluUGFja2VyQWxsb2NhdGlvbjsKIGNsYXNzIGNtQ1Rlc3RSZXNvdXJjZVNwZWM7CiBjbGFzcyBjbUNUZXN0UnVuVGVzdDsKQEAgLTg1LDYgKzg2LDEyIEBACiAKICAgY21DVGVzdFRlc3RIYW5kbGVyKiBHZXRUZXN0SGFuZGxlcigpIHsgcmV0dXJuIHRoaXMtPlRlc3RIYW5kbGVyOyB9CiAKKyAgdm9pZCBTZXRSZXBlYXRNb2RlKGNtQ1Rlc3Q6OlJlcGVhdCBtb2RlLCBpbnQgY291bnQpCisgIHsKKyAgICB0aGlzLT5SZXBlYXRNb2RlID0gbW9kZTsKKyAgICB0aGlzLT5SZXBlYXRDb3VudCA9IGNvdW50OworICB9CisKICAgdm9pZCBTZXRRdWlldChib29sIGIpIHsgdGhpcy0+UXVpZXQgPSBiOyB9CiAKICAgdm9pZCBJbml0UmVzb3VyY2VBbGxvY2F0b3IoY29uc3QgY21DVGVzdFJlc291cmNlU3BlYyYgc3BlYykKQEAgLTExOCw3ICsxMjUsNyBAQAogICAvLyBSZW1vdmVzIHRoZSBjaGVja3BvaW50IGZpbGUKICAgdm9pZCBNYXJrRmluaXNoZWQoKTsKICAgdm9pZCBFcmFzZVRlc3QoaW50IGluZGV4KTsKLSAgdm9pZCBGaW5pc2hUZXN0UHJvY2VzcyhjbUNUZXN0UnVuVGVzdCogcnVubmVyLCBib29sIHN0YXJ0ZWQpOworICB2b2lkIEZpbmlzaFRlc3RQcm9jZXNzKHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLCBib29sIHN0YXJ0ZWQpOwogCiAgIHN0YXRpYyB2b2lkIE9uVGVzdExvYWRSZXRyeUNCKHV2X3RpbWVyX3QqIHRpbWVyKTsKIApAQCAtMTM3LDExICsxNDQsMTggQEAKICAgdm9pZCBMb2NrUmVzb3VyY2VzKGludCBpbmRleCk7CiAgIHZvaWQgVW5sb2NrUmVzb3VyY2VzKGludCBpbmRleCk7CiAKKyAgZW51bSBjbGFzcyBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcgorICB7CisgICAgTm9SZXNvdXJjZVR5cGUsCisgICAgSW5zdWZmaWNpZW50UmVzb3VyY2VzLAorICB9OworCiAgIGJvb2wgQWxsb2NhdGVSZXNvdXJjZXMoaW50IGluZGV4KTsKICAgYm9vbCBUcnlBbGxvY2F0ZVJlc291cmNlcygKICAgICBpbnQgaW5kZXgsCiAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RCaW5QYWNrZXJBbGxvY2F0aW9uPj4mCi0gICAgICBhbGxvY2F0aW9ucyk7CisgICAgICBhbGxvY2F0aW9ucywKKyAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgUmVzb3VyY2VBbGxvY2F0aW9uRXJyb3I+KiBlcnJvcnMgPSBudWxscHRyKTsKICAgdm9pZCBEZWFsbG9jYXRlUmVzb3VyY2VzKGludCBpbmRleCk7CiAgIGJvb2wgQWxsUmVzb3VyY2VzQXZhaWxhYmxlKCk7CiAKQEAgLTE2OCw3ICsxODIsOCBAQAogICBzdGQ6Om1hcDxpbnQsCiAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxSZXNvdXJjZUFsbG9jYXRpb24+Pj4+CiAgICAgQWxsb2NhdGVkUmVzb3VyY2VzOwotICBzdGQ6Om1hcDxpbnQsIGJvb2w+IFRlc3RzSGF2ZVN1ZmZpY2llbnRSZXNvdXJjZXM7CisgIHN0ZDo6bWFwPGludCwgc3RkOjptYXA8c3RkOjpzdHJpbmcsIFJlc291cmNlQWxsb2NhdGlvbkVycm9yPj4KKyAgICBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcnM7CiAgIGNtQ1Rlc3RSZXNvdXJjZUFsbG9jYXRvciBSZXNvdXJjZUFsbG9jYXRvcjsKICAgc3RkOjp2ZWN0b3I8Y21DVGVzdFRlc3RIYW5kbGVyOjpjbUNUZXN0VGVzdFJlc3VsdD4qIFRlc3RSZXN1bHRzOwogICBzaXplX3QgUGFyYWxsZWxMZXZlbDsgLy8gbWF4IG51bWJlciBvZiBwcm9jZXNzIHRoYXQgY2FuIGJlIHJ1biBhdCBvbmNlCkBAIC0xNzksNiArMTk0LDggQEAKICAgY21DVGVzdFRlc3RIYW5kbGVyKiBUZXN0SGFuZGxlcjsKICAgY21DVGVzdCogQ1Rlc3Q7CiAgIGJvb2wgSGFzQ3ljbGVzOworICBjbUNUZXN0OjpSZXBlYXQgUmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6TmV2ZXI7CisgIGludCBSZXBlYXRDb3VudCA9IDE7CiAgIGJvb2wgUXVpZXQ7CiAgIGJvb2wgU2VyaWFsVGVzdFJ1bm5pbmc7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RQNC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFA0LmN4eAppbmRleCBlMjA2M2UxLi4xMzc1YmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFA0LmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFA0LmN4eApAQCAtNyw5ICs3LDEwIEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RWQy5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc1Rvb2xzLmgiCkBAIC0zMjYsNyArMzI3LDcgQEAKICAgICAvLyBUaGUgQ1RFU1RfUDRfT1BUSU9OUyB2YXJpYWJsZSBhZGRzIGFkZGl0aW9uYWwgUGVyZm9yY2UgY29tbWFuZCBsaW5lCiAgICAgLy8gb3B0aW9ucyBiZWZvcmUgdGhlIG1haW4gY29tbWFuZAogICAgIHN0ZDo6c3RyaW5nIG9wdHMgPSB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJQNE9wdGlvbnMiKTsKLSAgICBjbUFwcGVuZChQNE9wdGlvbnMsIGNtU3lzdGVtVG9vbHM6OlBhcnNlQXJndW1lbnRzKG9wdHMpKTsKKyAgICBjbTo6YXBwZW5kKFA0T3B0aW9ucywgY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMob3B0cykpOwogICB9CiAKICAgQ29tbWFuZE9wdGlvbnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJ1blRlc3QuY3h4CmluZGV4IDMwOTEwNTAuLjdkMGY2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmN4eApAQCAtMzQsOSArMzQsNiBAQAogICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Tk9UX1JVTjsKICAgdGhpcy0+VGVzdFJlc3VsdC5UZXN0Q291bnQgPSAwOwogICB0aGlzLT5UZXN0UmVzdWx0LlByb3BlcnRpZXMgPSBudWxscHRyOwotICB0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0ID0gMTsgLy8gZGVmYXVsdCB0byAxIHJ1biBvZiB0aGUgdGVzdAotICB0aGlzLT5SdW5VbnRpbEZhaWwgPSBmYWxzZTsgLy8gZGVmYXVsdCB0byBydW4gdGhlIHRlc3Qgb25jZQotICB0aGlzLT5SdW5BZ2FpbiA9IGZhbHNlOyAgICAgLy8gZGVmYXVsdCB0byBub3QgaGF2aW5nIHRvIHJ1biBhZ2FpbgogfQogCiB2b2lkIGNtQ1Rlc3RSdW5UZXN0OjpDaGVja091dHB1dChzdGQ6OnN0cmluZyBjb25zdCYgbGluZSkKQEAgLTMxMCw0MyArMzA3LDUyIEBACiAgIH0KICAgLy8gSWYgdGhlIHRlc3QgZG9lcyBub3QgbmVlZCB0byByZXJ1biBwdXNoIHRoZSBjdXJyZW50IFRlc3RSZXN1bHQgb250byB0aGUKICAgLy8gVGVzdEhhbmRsZXIgdmVjdG9yCi0gIGlmICghdGhpcy0+TmVlZHNUb1JlcnVuKCkpIHsKKyAgaWYgKCF0aGlzLT5OZWVkc1RvUmVwZWF0KCkpIHsKICAgICB0aGlzLT5UZXN0SGFuZGxlci0+VGVzdFJlc3VsdHMucHVzaF9iYWNrKHRoaXMtPlRlc3RSZXN1bHQpOwogICB9CiAgIHRoaXMtPlRlc3RQcm9jZXNzLnJlc2V0KCk7CiAgIHJldHVybiBwYXNzZWQgfHwgc2tpcHBlZDsKIH0KIAotYm9vbCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRBZ2FpbihzaXplX3QgY29tcGxldGVkKQorYm9vbCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRBZ2FpbihzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbXBsZXRlZCkKIHsKLSAgaWYgKCF0aGlzLT5SdW5BZ2FpbikgeworICBhdXRvKiB0ZXN0UnVuID0gcnVubmVyLmdldCgpOworCisgIGlmICghdGVzdFJ1bi0+UnVuQWdhaW4pIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgdGhpcy0+UnVuQWdhaW4gPSBmYWxzZTsgLy8gcmVzZXQKKyAgdGVzdFJ1bi0+UnVuQWdhaW4gPSBmYWxzZTsgLy8gcmVzZXQKKyAgdGVzdFJ1bi0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPihzdGQ6Om1vdmUocnVubmVyKSk7CiAgIC8vIGNoYW5nZSB0byB0ZXN0cyBkaXJlY3RvcnkKLSAgY21Xb3JraW5nRGlyZWN0b3J5IHdvcmtkaXIodGhpcy0+VGVzdFByb3BlcnRpZXMtPkRpcmVjdG9yeSk7CisgIGNtV29ya2luZ0RpcmVjdG9yeSB3b3JrZGlyKHRlc3RSdW4tPlRlc3RQcm9wZXJ0aWVzLT5EaXJlY3RvcnkpOwogICBpZiAod29ya2Rpci5GYWlsZWQoKSkgewotICAgIHRoaXMtPlN0YXJ0RmFpbHVyZSgiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VGVzdFByb3BlcnRpZXMtPkRpcmVjdG9yeSArICIgOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJlcnJvcih3b3JrZGlyLkdldExhc3RSZXN1bHQoKSkpOworICAgIHRlc3RSdW4tPlN0YXJ0RmFpbHVyZSgiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVuLT5UZXN0UHJvcGVydGllcy0+RGlyZWN0b3J5ICsgIiA6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyZXJyb3Iod29ya2Rpci5HZXRMYXN0UmVzdWx0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAgdGhpcy0+U3RhcnRUZXN0KGNvbXBsZXRlZCwgdGhpcy0+VG90YWxOdW1iZXJPZlRlc3RzKTsKKyAgdGVzdFJ1bi0+U3RhcnRUZXN0KGNvbXBsZXRlZCwgdGVzdFJ1bi0+VG90YWxOdW1iZXJPZlRlc3RzKTsKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgY21DVGVzdFJ1blRlc3Q6Ok5lZWRzVG9SZXJ1bigpCitib29sIGNtQ1Rlc3RSdW5UZXN0OjpOZWVkc1RvUmVwZWF0KCkKIHsKICAgdGhpcy0+TnVtYmVyT2ZSdW5zTGVmdC0tOwogICBpZiAodGhpcy0+TnVtYmVyT2ZSdW5zTGVmdCA9PSAwKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIC8vIGlmIG51bWJlciBvZiBydW5zIGxlZnQgaXMgbm90IDAsIGFuZCB3ZSBhcmUgcnVubmluZyB1bnRpbAotICAvLyB3ZSBmaW5kIGEgZmFpbGVkIHRlc3QsIHRoZW4gcmV0dXJuIHRydWUgc28gdGhlIHRlc3QgY2FuIGJlCisgIC8vIHdlIGZpbmQgYSBmYWlsZWQgKG9yIHBhc3NlZCkgdGVzdCwgdGhlbiByZXR1cm4gdHJ1ZSBzbyB0aGUgdGVzdCBjYW4gYmUKICAgLy8gcmVzdGFydGVkCi0gIGlmICh0aGlzLT5SdW5VbnRpbEZhaWwgJiYKLSAgICAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID09IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Q09NUExFVEVEKSB7CisgIGlmICgodGhpcy0+UmVwZWF0TW9kZSA9PSBjbUNUZXN0OjpSZXBlYXQ6OlVudGlsRmFpbCAmJgorICAgICAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID09IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Q09NUExFVEVEKSB8fAorICAgICAgKHRoaXMtPlJlcGVhdE1vZGUgPT0gY21DVGVzdDo6UmVwZWF0OjpVbnRpbFBhc3MgJiYKKyAgICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyAhPSBjbUNUZXN0VGVzdEhhbmRsZXI6OkNPTVBMRVRFRCkgfHwKKyAgICAgICh0aGlzLT5SZXBlYXRNb2RlID09IGNtQ1Rlc3Q6OlJlcGVhdDo6QWZ0ZXJUaW1lb3V0ICYmCisgICAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPT0gY21DVGVzdFRlc3RIYW5kbGVyOjpUSU1FT1VUKSkgewogICAgIHRoaXMtPlJ1bkFnYWluID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpAQCAtMzgwLDcgKzM4NiwyMCBAQAogICBoYW5kbGVyLT5Qb3N0UHJvY2Vzc1Rlc3QodGhpcy0+VGVzdFJlc3VsdCwgdGhpcy0+SW5kZXgpOwogfQogCi12b2lkIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEZhaWx1cmUoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCkKK3ZvaWQgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0RmFpbHVyZShzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXRhaWwpCit7CisgIGF1dG8qIHRlc3RSdW4gPSBydW5uZXIuZ2V0KCk7CisKKyAgdGVzdFJ1bi0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPihzdGQ6Om1vdmUocnVubmVyKSk7CisgIHRlc3RSdW4tPlN0YXJ0RmFpbHVyZShvdXRwdXQsIGRldGFpbCk7CisKKyAgdGVzdFJ1bi0+RmluYWxpemVUZXN0KGZhbHNlKTsKK30KKwordm9pZCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRGYWlsdXJlKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRldGFpbCkKIHsKICAgLy8gU3RpbGwgbmVlZCB0byBsb2cgdGhlIFN0YXJ0IG1lc3NhZ2Ugc28gdGhlIHRlc3Qgc3VtbWFyeSByZWNvcmRzIG91cgogICAvLyBhdHRlbXB0IHRvIHN0YXJ0IHRoaXMgdGVzdApAQCAtNDAzLDE0ICs0MjIsMTMgQEAKICAgdGhpcy0+VGVzdFJlc3VsdC5FeGVjdXRpb25UaW1lID0gY21EdXJhdGlvbjo6emVybygpOwogICB0aGlzLT5UZXN0UmVzdWx0LkNvbXByZXNzT3V0cHV0ID0gZmFsc2U7CiAgIHRoaXMtPlRlc3RSZXN1bHQuUmV0dXJuVmFsdWUgPSAtMTsKLSAgdGhpcy0+VGVzdFJlc3VsdC5Db21wbGV0aW9uU3RhdHVzID0gIkZhaWxlZCB0byBzdGFydCI7CisgIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9IGRldGFpbDsKICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPSBjbUNUZXN0VGVzdEhhbmRsZXI6Ok5PVF9SVU47CiAgIHRoaXMtPlRlc3RSZXN1bHQuVGVzdENvdW50ID0gdGhpcy0+VGVzdFByb3BlcnRpZXMtPkluZGV4OwogICB0aGlzLT5UZXN0UmVzdWx0Lk5hbWUgPSB0aGlzLT5UZXN0UHJvcGVydGllcy0+TmFtZTsKICAgdGhpcy0+VGVzdFJlc3VsdC5QYXRoID0gdGhpcy0+VGVzdFByb3BlcnRpZXMtPkRpcmVjdG9yeTsKICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSBvdXRwdXQ7CiAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7Ci0gIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogfQogCiBzdGQ6OnN0cmluZyBjbUNUZXN0UnVuVGVzdDo6R2V0VGVzdFByZWZpeChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpIGNvbnN0CkBAIC00MzQsNiArNDUyLDIxIEBACiAgIHJldHVybiBvdXRwdXRTdHJlYW0uc3RyKCk7CiB9CiAKK2Jvb2wgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpCit7CisgIGF1dG8qIHRlc3RSdW4gPSBydW5uZXIuZ2V0KCk7CisKKyAgdGVzdFJ1bi0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPihzdGQ6Om1vdmUocnVubmVyKSk7CisKKyAgaWYgKCF0ZXN0UnVuLT5TdGFydFRlc3QoY29tcGxldGVkLCB0b3RhbCkpIHsKKyAgICB0ZXN0UnVuLT5GaW5hbGl6ZVRlc3QoZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiAvLyBTdGFydHMgdGhlIGV4ZWN1dGlvbiBvZiBhIHRlc3QuICBSZXR1cm5zIG9uY2UgaXQgaGFzIHN0YXJ0ZWQKIGJvb2wgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpCiB7CkBAIC00NjUsNyArNDk4LDYgQEAKICAgaWYgKHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5EaXNhYmxlZCkgewogICAgIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9ICJEaXNhYmxlZCI7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPSBjbUNUZXN0VGVzdEhhbmRsZXI6Ok5PVF9SVU47Ci0gICAgdGhpcy0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPigqdGhpcyk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSAiRGlzYWJsZWQiOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDc5LDcgKzUxMSw2IEBACiAgIC8vIGl0cyBhcmd1bWVudHMgYXJlIGlycmVsZXZhbnQuIFRoaXMgbWF0dGVycyBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBmaXh0dXJlCiAgIC8vIGRlcGVuZGVuY3kgbWlnaHQgYmUgY3JlYXRpbmcgdGhlIGV4ZWN1dGFibGUgd2Ugd2FudCB0byBydW4uCiAgIGlmICghdGhpcy0+RmFpbGVkRGVwZW5kZW5jaWVzLmVtcHR5KCkpIHsKLSAgICB0aGlzLT5UZXN0UHJvY2VzcyA9IGNtOjptYWtlX3VuaXF1ZTxjbVByb2Nlc3M+KCp0aGlzKTsKICAgICBzdGQ6OnN0cmluZyBtc2cgPSAiRmFpbGVkIHRlc3QgZGVwZW5kZW5jaWVzOiI7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmFpbGVkRGVwIDogdGhpcy0+RmFpbGVkRGVwZW5kZW5jaWVzKSB7CiAgICAgICBtc2cgKz0gIiAiICsgZmFpbGVkRGVwOwpAQCAtNDk2LDcgKzUyNyw2IEBACiAgIHRoaXMtPkNvbXB1dGVBcmd1bWVudHMoKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmdzID0gdGhpcy0+VGVzdFByb3BlcnRpZXMtPkFyZ3M7CiAgIGlmIChhcmdzLnNpemUoKSA+PSAyICYmIGFyZ3NbMV0gPT0gIk5PVF9BVkFJTEFCTEUiKSB7Ci0gICAgdGhpcy0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPigqdGhpcyk7CiAgICAgc3RkOjpzdHJpbmcgbXNnOwogICAgIGlmICh0aGlzLT5DVGVzdC0+R2V0Q29uZmlnVHlwZSgpLmVtcHR5KCkpIHsKICAgICAgIG1zZyA9ICJUZXN0IG5vdCBhdmFpbGFibGUgd2l0aG91dCBjb25maWd1cmF0aW9uLiAgKE1pc3NpbmcgXCItQyAiCkBAIC01MTgsNyArNTQ4LDYgQEAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSA6IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5SZXF1aXJlZEZpbGVzKSB7CiAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGUpKSB7CiAgICAgICAvLyBSZXF1aXJlZCBmaWxlIHdhcyBub3QgZm91bmQKLSAgICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgICAgKnRoaXMtPlRlc3RIYW5kbGVyLT5Mb2dGaWxlIDw8ICJVbmFibGUgdG8gZmluZCByZXF1aXJlZCBmaWxlOiAiIDw8IGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLApAQCAtNTM0LDcgKzU2Myw2IEBACiAgIGlmICh0aGlzLT5BY3R1YWxDb21tYW5kLmVtcHR5KCkpIHsKICAgICAvLyBpZiB0aGUgY29tbWFuZCB3YXMgbm90IGZvdW5kIGNyZWF0ZSBhIFRlc3RSZXN1bHQgb2JqZWN0CiAgICAgLy8gdGhhdCBoYXMgdGhhdCBpbmZvcm1hdGlvbgotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgICp0aGlzLT5UZXN0SGFuZGxlci0+TG9nRmlsZSA8PCAiVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZTogIiA8PCBhcmdzWzFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLApAQCAtNjQ2LDcgKzY3NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGVudmlyb25tZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiogYWZmaW5pdHkpCiB7Ci0gIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICB0aGlzLT5UZXN0UHJvY2Vzcy0+U2V0SWQodGhpcy0+SW5kZXgpOwogICB0aGlzLT5UZXN0UHJvY2Vzcy0+U2V0V29ya2luZ0RpcmVjdG9yeSh0aGlzLT5UZXN0UHJvcGVydGllcy0+RGlyZWN0b3J5KTsKICAgdGhpcy0+VGVzdFByb2Nlc3MtPlNldENvbW1hbmQodGhpcy0+QWN0dWFsQ29tbWFuZCk7CkBAIC03NDYsNyArNzczLDEyIEBACiAgIC8vIHRoZW4gaXQgd2lsbCBuZXZlciBwcmludCBvdXQgdGhlIGNvbXBsZXRlZCAvIHRvdGFsLCBzYW1lIHdvdWxkCiAgIC8vIGdvdCBmb3IgcnVuIHVudGlsIHBhc3MuICBUcmljayBpcyB3aGVuIHRoaXMgaXMgY2FsbGVkIHdlIGRvbid0CiAgIC8vIHlldCBrbm93IGlmIHdlIGFyZSBwYXNzaW5nIG9yIGZhaWxpbmcuCi0gIGlmICh0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0ID09IDEgfHwgdGhpcy0+Q1Rlc3QtPkdldFRlc3RQcm9ncmVzc091dHB1dCgpKSB7CisgIGJvb2wgY29uc3QgcHJvZ3Jlc3NPbkxhc3QgPQorICAgICh0aGlzLT5SZXBlYXRNb2RlICE9IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxQYXNzICYmCisgICAgIHRoaXMtPlJlcGVhdE1vZGUgIT0gY21DVGVzdDo6UmVwZWF0OjpBZnRlclRpbWVvdXQpOworICBpZiAoKHByb2dyZXNzT25MYXN0ICYmIHRoaXMtPk51bWJlck9mUnVuc0xlZnQgPT0gMSkgfHwKKyAgICAgICghcHJvZ3Jlc3NPbkxhc3QgJiYgdGhpcy0+TnVtYmVyT2ZSdW5zTGVmdCA9PSB0aGlzLT5OdW1iZXJPZlJ1bnNUb3RhbCkgfHwKKyAgICAgIHRoaXMtPkNUZXN0LT5HZXRUZXN0UHJvZ3Jlc3NPdXRwdXQoKSkgewogICAgIG91dHB1dFN0cmVhbSA8PCBzdGQ6OnNldHcoZ2V0TnVtV2lkdGgodG90YWwpKSA8PCBjb21wbGV0ZWQgPDwgIi8iOwogICAgIG91dHB1dFN0cmVhbSA8PCBzdGQ6OnNldHcoZ2V0TnVtV2lkdGgodG90YWwpKSA8PCB0b3RhbCA8PCAiICI7CiAgIH0KQEAgLTgwOCw3ICs4NDAsOCBAQAogICAgICAgICAgICAgICJUZXN0aW5nICIgPDwgdGhpcy0+VGVzdFByb3BlcnRpZXMtPk5hbWUgPDwgIiAuLi4gIik7CiB9CiAKLXZvaWQgY21DVGVzdFJ1blRlc3Q6OkZpbmFsaXplVGVzdCgpCit2b2lkIGNtQ1Rlc3RSdW5UZXN0OjpGaW5hbGl6ZVRlc3QoYm9vbCBzdGFydGVkKQogewotICB0aGlzLT5NdWx0aVRlc3RIYW5kbGVyLkZpbmlzaFRlc3RQcm9jZXNzKHRoaXMsIHRydWUpOworICB0aGlzLT5NdWx0aVRlc3RIYW5kbGVyLkZpbmlzaFRlc3RQcm9jZXNzKHRoaXMtPlRlc3RQcm9jZXNzLT5HZXRSdW5uZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmgKaW5kZXggZjc4MWM3YS4uYjFkMTg4YSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmgKQEAgLTEzLDEzICsxMywxMiBAQAogCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKKyNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0VGVzdEhhbmRsZXIuaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzLmgiCiAKLWNsYXNzIGNtQ1Rlc3Q7Ci0KIC8qKiBcY2xhc3MgY21SdW5UZXN0CiAgKiBcYnJpZWYgcmVwcmVzZW50cyBhIHNpbmdsZSB0ZXN0IHRvIGJlIHJ1bgogICoKQEAgLTMwLDggKzI5LDEzIEBACiBwdWJsaWM6CiAgIGV4cGxpY2l0IGNtQ1Rlc3RSdW5UZXN0KGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyJiBtdWx0aUhhbmRsZXIpOwogCi0gIHZvaWQgU2V0TnVtYmVyT2ZSdW5zKGludCBuKSB7IHRoaXMtPk51bWJlck9mUnVuc0xlZnQgPSBuOyB9Ci0gIHZvaWQgU2V0UnVuVW50aWxGYWlsT24oKSB7IHRoaXMtPlJ1blVudGlsRmFpbCA9IHRydWU7IH0KKyAgdm9pZCBTZXROdW1iZXJPZlJ1bnMoaW50IG4pCisgIHsKKyAgICB0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0ID0gbjsKKyAgICB0aGlzLT5OdW1iZXJPZlJ1bnNUb3RhbCA9IG47CisgIH0KKworICB2b2lkIFNldFJlcGVhdE1vZGUoY21DVGVzdDo6UmVwZWF0IHIpIHsgdGhpcy0+UmVwZWF0TW9kZSA9IHI7IH0KICAgdm9pZCBTZXRUZXN0UHJvcGVydGllcyhjbUNUZXN0VGVzdEhhbmRsZXI6OmNtQ1Rlc3RUZXN0UHJvcGVydGllcyogcHJvcCkKICAgewogICAgIHRoaXMtPlRlc3RQcm9wZXJ0aWVzID0gcHJvcDsKQEAgLTYxLDYgKzY1LDE1IEBACiAgIC8vIFJlYWQgYW5kIHN0b3JlIG91dHB1dC4gIFJldHVybnMgdHJ1ZSBpZiBpdCBtdXN0IGJlIGNhbGxlZCBhZ2Fpbi4KICAgdm9pZCBDaGVja091dHB1dChzdGQ6OnN0cmluZyBjb25zdCYgbGluZSk7CiAKKyAgc3RhdGljIGJvb2wgU3RhcnRUZXN0KHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbXBsZXRlZCwgc2l6ZV90IHRvdGFsKTsKKyAgc3RhdGljIGJvb2wgU3RhcnRBZ2FpbihzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGxldGVkKTsKKworICBzdGF0aWMgdm9pZCBTdGFydEZhaWx1cmUoc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRldGFpbCk7CisKICAgLy8gbGF1bmNoIHRoZSB0ZXN0IHByb2Nlc3MsIHJldHVybiB3aGV0aGVyIGl0IHN0YXJ0ZWQgY29ycmVjdGx5CiAgIGJvb2wgU3RhcnRUZXN0KHNpemVfdCBjb21wbGV0ZWQsIHNpemVfdCB0b3RhbCk7CiAgIC8vIGNhcHR1cmUgYW5kIHJlcG9ydCB0aGUgdGVzdCByZXN1bHRzCkBAIC03MCw5ICs4Myw3IEBACiAKICAgdm9pZCBDb21wdXRlV2VpZ2h0ZWRDb3N0KCk7CiAKLSAgYm9vbCBTdGFydEFnYWluKHNpemVfdCBjb21wbGV0ZWQpOwotCi0gIHZvaWQgU3RhcnRGYWlsdXJlKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQpOworICB2b2lkIFN0YXJ0RmFpbHVyZShzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0LCBzdGQ6OnN0cmluZyBjb25zdCYgZGV0YWlsKTsKIAogICBjbUNUZXN0KiBHZXRDVGVzdCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkNUZXN0OyB9CiAKQEAgLTgwLDcgKzkxLDcgQEAKIAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldEFyZ3VtZW50cygpIHsgcmV0dXJuIHRoaXMtPkFyZ3VtZW50czsgfQogCi0gIHZvaWQgRmluYWxpemVUZXN0KCk7CisgIHZvaWQgRmluYWxpemVUZXN0KGJvb2wgc3RhcnRlZCA9IHRydWUpOwogCiAgIGJvb2wgVGltZWRPdXRGb3JTdG9wVGltZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlRpbWVvdXRJc0ZvclN0b3BUaW1lOyB9CiAKQEAgLTk4LDcgKzEwOSw3IEBACiAgIH0KIAogcHJpdmF0ZToKLSAgYm9vbCBOZWVkc1RvUmVydW4oKTsKKyAgYm9vbCBOZWVkc1RvUmVwZWF0KCk7CiAgIHZvaWQgRGFydFByb2Nlc3NpbmcoKTsKICAgdm9pZCBFeGVOb3RGb3VuZChzdGQ6OnN0cmluZyBleGUpOwogICBib29sIEZvcmtQcm9jZXNzKGNtRHVyYXRpb24gdGVzdFRpbWVPdXQsIGJvb2wgZXhwbGljaXRUaW1lb3V0LApAQCAtMTMyLDkgKzE0MywxMCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6Om1hcDwKICAgICBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OlJlc291cmNlQWxsb2NhdGlvbj4+PgogICAgIEFsbG9jYXRlZFJlc291cmNlczsKLSAgYm9vbCBSdW5VbnRpbEZhaWw7Ci0gIGludCBOdW1iZXJPZlJ1bnNMZWZ0OwotICBib29sIFJ1bkFnYWluOworICBjbUNUZXN0OjpSZXBlYXQgUmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6TmV2ZXI7CisgIGludCBOdW1iZXJPZlJ1bnNMZWZ0ID0gMTsgIC8vIGRlZmF1bHQgdG8gMSBydW4gb2YgdGhlIHRlc3QKKyAgaW50IE51bWJlck9mUnVuc1RvdGFsID0gMTsgLy8gZGVmYXVsdCB0byAxIHJ1biBvZiB0aGUgdGVzdAorICBib29sIFJ1bkFnYWluID0gZmFsc2U7ICAgICAvLyBkZWZhdWx0IHRvIG5vdCBoYXZpbmcgdG8gcnVuIGFnYWluCiAgIHNpemVfdCBUb3RhbE51bWJlck9mVGVzdHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNWTi5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNWTi5jeHgKaW5kZXggMzQzOTVjOS4uNDRkZmFiMiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTVk4uY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U1ZOLmN4eApAQCAtNyw5ICs3LDEwIEBACiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPG9zdHJlYW0+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFZDLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzVG9vbHMuaCIKQEAgLTI3MSw3ICsyNzIsNyBAQAogCiAgIHN0ZDo6dmVjdG9yPGNoYXIgY29uc3QqPiBhcmdzOwogICBhcmdzLnB1c2hfYmFjayh0aGlzLT5Db21tYW5kTGluZVRvb2wuY19zdHIoKSk7Ci0gIGNtQXBwZW5kKGFyZ3MsIHBhcmFtZXRlcnMpOworICBjbTo6YXBwZW5kKGFyZ3MsIHBhcmFtZXRlcnMpOwogICBhcmdzLnB1c2hfYmFjaygiLS1ub24taW50ZXJhY3RpdmUiKTsKIAogICBzdGQ6OnN0cmluZyB1c2VyT3B0aW9ucyA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIlNWTk9wdGlvbnMiKTsKQEAgLTM0NCw3ICszNDUsNyBAQAogCiAgIHZvaWQgQ2hhcmFjdGVyRGF0YUhhbmRsZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGUKICAgewotICAgIGNtQXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgfQogCiAgIHZvaWQgRW5kRWxlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNjcmlwdEhhbmRsZXIuY3h4CmluZGV4IDYwZmFjYmQuLjRmYTRkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmN4eApAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxyYXRpbz4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC01MSwyMiArNTAsNyBAQAogCiAjZGVmaW5lIENURVNUX0lOSVRJQUxfQ01BS0VfT1VUUFVUX0ZJTEVfTkFNRSAiQ1Rlc3RJbml0aWFsQ01ha2VPdXRwdXQubG9nIgogCi1jbUNUZXN0U2NyaXB0SGFuZGxlcjo6Y21DVGVzdFNjcmlwdEhhbmRsZXIoKQotewotICB0aGlzLT5CYWNrdXAgPSBmYWxzZTsKLSAgdGhpcy0+RW1wdHlCaW5EaXIgPSBmYWxzZTsKLSAgdGhpcy0+RW1wdHlCaW5EaXJPbmNlID0gZmFsc2U7Ci0gIHRoaXMtPk1ha2VmaWxlID0gbnVsbHB0cjsKLSAgdGhpcy0+UGFyZW50TWFrZWZpbGUgPSBudWxscHRyOwotICB0aGlzLT5DTWFrZSA9IG51bGxwdHI7Ci0gIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IG51bGxwdHI7Ci0KLSAgdGhpcy0+U2NyaXB0U3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCgpOwotCi0gIC8vIHRoZSAqNjAgaXMgYmVjYXVzZSB0aGUgc2V0dGluZ3MgYXJlIGluIG1pbnV0ZXMgYnV0IEdldFRpbWUgaXMgc2Vjb25kcwotICB0aGlzLT5NaW5pbXVtSW50ZXJ2YWwgPSAzMCAqIDYwOwotICB0aGlzLT5Db250aW51b3VzRHVyYXRpb24gPSAtMTsKLX0KK2NtQ1Rlc3RTY3JpcHRIYW5kbGVyOjpjbUNUZXN0U2NyaXB0SGFuZGxlcigpID0gZGVmYXVsdDsKIAogdm9pZCBjbUNUZXN0U2NyaXB0SGFuZGxlcjo6SW5pdGlhbGl6ZSgpCiB7CkBAIC05NSwyMiArNzksMTUgQEAKICAgLy8gd2hhdCB0aW1lIGluIHNlY29uZHMgZGlkIHRoaXMgc2NyaXB0IHN0YXJ0IHJ1bm5pbmcKICAgdGhpcy0+U2NyaXB0U3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCgpOwogCi0gIGRlbGV0ZSB0aGlzLT5NYWtlZmlsZTsKLSAgdGhpcy0+TWFrZWZpbGUgPSBudWxscHRyOworICB0aGlzLT5NYWtlZmlsZS5yZXNldCgpOwogICB0aGlzLT5QYXJlbnRNYWtlZmlsZSA9IG51bGxwdHI7CiAKLSAgZGVsZXRlIHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKLSAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKKyAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLnJlc2V0KCk7CiAKLSAgZGVsZXRlIHRoaXMtPkNNYWtlOworICB0aGlzLT5DTWFrZS5yZXNldCgpOwogfQogCi1jbUNUZXN0U2NyaXB0SGFuZGxlcjo6fmNtQ1Rlc3RTY3JpcHRIYW5kbGVyKCkKLXsKLSAgZGVsZXRlIHRoaXMtPk1ha2VmaWxlOwotICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwotICBkZWxldGUgdGhpcy0+Q01ha2U7Ci19CitjbUNUZXN0U2NyaXB0SGFuZGxlcjo6fmNtQ1Rlc3RTY3JpcHRIYW5kbGVyKCkgPSBkZWZhdWx0OwogCiAvLyBqdXN0IGFkZHMgYW4gYXJndW1lbnQgdG8gdGhlIHZlY3Rvcgogdm9pZCBjbUNUZXN0U2NyaXB0SGFuZGxlcjo6QWRkQ29uZmlndXJhdGlvblNjcmlwdChjb25zdCBjaGFyKiBzY3JpcHQsCkBAIC0yNDcsMjMgKzIyNCwyMCBAQAogdm9pZCBjbUNUZXN0U2NyaXB0SGFuZGxlcjo6Q3JlYXRlQ01ha2UoKQogewogICAvLyBjcmVhdGUgYSBjbWFrZSBpbnN0YW5jZSB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdAotICBpZiAodGhpcy0+Q01ha2UpIHsKLSAgICBkZWxldGUgdGhpcy0+Q01ha2U7Ci0gICAgZGVsZXRlIHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKLSAgICBkZWxldGUgdGhpcy0+TWFrZWZpbGU7Ci0gIH0KLSAgdGhpcy0+Q01ha2UgPSBuZXcgY21ha2UoY21ha2U6OlJvbGVTY3JpcHQsIGNtU3RhdGU6OkNUZXN0KTsKKyAgdGhpcy0+Q01ha2UgPSBjbTo6bWFrZV91bmlxdWU8Y21ha2U+KGNtYWtlOjpSb2xlU2NyaXB0LCBjbVN0YXRlOjpDVGVzdCk7CiAgIHRoaXMtPkNNYWtlLT5TZXRIb21lRGlyZWN0b3J5KCIiKTsKICAgdGhpcy0+Q01ha2UtPlNldEhvbWVPdXRwdXREaXJlY3RvcnkoIiIpOwogICB0aGlzLT5DTWFrZS0+R2V0Q3VycmVudFNuYXBzaG90KCkuU2V0RGVmYXVsdERlZmluaXRpb25zKCk7CiAgIHRoaXMtPkNNYWtlLT5BZGRDTWFrZVBhdGhzKCk7Ci0gIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IG5ldyBjbUdsb2JhbEdlbmVyYXRvcih0aGlzLT5DTWFrZSk7CisgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9CisgICAgY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsR2VuZXJhdG9yPih0aGlzLT5DTWFrZS5nZXQoKSk7CiAKICAgY21TdGF0ZVNuYXBzaG90IHNuYXBzaG90ID0gdGhpcy0+Q01ha2UtPkdldEN1cnJlbnRTbmFwc2hvdCgpOwogICBzdGQ6OnN0cmluZyBjd2QgPSBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOwogICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRDdXJyZW50U291cmNlKGN3ZCk7CiAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRCaW5hcnkoY3dkKTsKLSAgdGhpcy0+TWFrZWZpbGUgPSBuZXcgY21NYWtlZmlsZSh0aGlzLT5HbG9iYWxHZW5lcmF0b3IsIHNuYXBzaG90KTsKKyAgdGhpcy0+TWFrZWZpbGUgPQorICAgIGNtOjptYWtlX3VuaXF1ZTxjbU1ha2VmaWxlPih0aGlzLT5HbG9iYWxHZW5lcmF0b3IuZ2V0KCksIHNuYXBzaG90KTsKICAgaWYgKHRoaXMtPlBhcmVudE1ha2VmaWxlKSB7CiAgICAgdGhpcy0+TWFrZWZpbGUtPlNldFJlY3Vyc2lvbkRlcHRoKAogICAgICAgdGhpcy0+UGFyZW50TWFrZWZpbGUtPkdldFJlY3Vyc2lvbkRlcHRoKCkpOwpAQCAtMzEwLDEyICsyODQsMTQgQEAKICAgLy8gaWYgdGhlIGFyZ3VtZW50IGhhcyBhICwgaW4gaXQgdGhlbiBpdCBuZWVkcyB0byBiZSBicm9rZW4gaW50byB0aGUgZmlzdAogICAvLyBhcmd1bWVudCAod2hpY2ggaXMgdGhlIHNjcmlwdCkgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgd2hpY2ggd2lsbCBiZQogICAvLyBwYXNzZWQgaW50byB0aGUgc2NyaXB0cyBhcyBTX0FSRwotICBzdGQ6OnN0cmluZyBzY3JpcHQgPSB0b3RhbF9zY3JpcHRfYXJnOworICBzdGQ6OnN0cmluZyBzY3JpcHQ7CiAgIHN0ZDo6c3RyaW5nIHNjcmlwdF9hcmc7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgY29tbWFfcG9zID0gdG90YWxfc2NyaXB0X2FyZy5maW5kKCcsJyk7CiAgIGlmIChjb21tYV9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBzY3JpcHQgPSB0b3RhbF9zY3JpcHRfYXJnLnN1YnN0cigwLCBjb21tYV9wb3MpOwogICAgIHNjcmlwdF9hcmcgPSB0b3RhbF9zY3JpcHRfYXJnLnN1YnN0cihjb21tYV9wb3MgKyAxKTsKKyAgfSBlbHNlIHsKKyAgICBzY3JpcHQgPSB0b3RhbF9zY3JpcHRfYXJnOwogICB9CiAgIC8vIG1ha2Ugc3VyZSB0aGUgZmlsZSBleGlzdHMKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHNjcmlwdCkpIHsKQEAgLTM0MCw2ICszMTYsMTMgQEAKICAgdGhpcy0+U2V0UnVuQ3VycmVudFNjcmlwdCh0cnVlKTsKICAgdGhpcy0+VXBkYXRlRWxhcHNlZFRpbWUoKTsKIAorICAvLyBzZXQgdGhlIENURVNUX0NPTkZJR1VSQVRJT05fVFlQRSB2YXJpYWJsZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKyAgLy8gdGhlIC1DIGFyZ3VtZW50IG9uIHRoZSBjb21tYW5kIGxpbmUuCisgIGlmICghdGhpcy0+Q1Rlc3QtPkdldENvbmZpZ1R5cGUoKS5lbXB0eSgpKSB7CisgICAgdGhpcy0+TWFrZWZpbGUtPkFkZERlZmluaXRpb24oIkNURVNUX0NPTkZJR1VSQVRJT05fVFlQRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENvbmZpZ1R5cGUoKSk7CisgIH0KKwogICAvLyBhZGQgdGhlIHNjcmlwdCBhcmcgaWYgZGVmaW5lZAogICBpZiAoIXNjcmlwdF9hcmcuZW1wdHkoKSkgewogICAgIHRoaXMtPk1ha2VmaWxlLT5BZGREZWZpbml0aW9uKCJDVEVTVF9TQ1JJUFRfQVJHIiwgc2NyaXB0X2FyZyk7CkBAIC04NzEsNyArODU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzbmFtZSwgYm9vbCBJblByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiByZXR1cm5WYWx1ZSkKIHsKLSAgY21DVGVzdFNjcmlwdEhhbmRsZXIqIHNoID0gbmV3IGNtQ1Rlc3RTY3JpcHRIYW5kbGVyKCk7CisgIGF1dG8gc2ggPSBjbTo6bWFrZV91bmlxdWU8Y21DVGVzdFNjcmlwdEhhbmRsZXI+KCk7CiAgIHNoLT5TZXRDVGVzdEluc3RhbmNlKGN0ZXN0KTsKICAgc2gtPlBhcmVudE1ha2VmaWxlID0gbWY7CiAgIHNoLT5BZGRDb25maWd1cmF0aW9uU2NyaXB0KHNuYW1lLCBJblByb2Nlc3MpOwpAQCAtODc5LDcgKzg2Miw2IEBACiAgIGlmIChyZXR1cm5WYWx1ZSkgewogICAgICpyZXR1cm5WYWx1ZSA9IHJlczsKICAgfQotICBkZWxldGUgc2g7CiAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNjcmlwdEhhbmRsZXIuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oCmluZGV4IGQwMDMxOTkuLmViYjc5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oCkBAIC0xMDEsMTIgKzEwMSwxNCBAQAogICBjbUR1cmF0aW9uIEdldFJlbWFpbmluZ1RpbWVBbGxvd2VkKCk7CiAKICAgY21DVGVzdFNjcmlwdEhhbmRsZXIoKTsKKyAgY21DVGVzdFNjcmlwdEhhbmRsZXIoY29uc3QgY21DVGVzdFNjcmlwdEhhbmRsZXImKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21DVGVzdFNjcmlwdEhhbmRsZXImIG9wZXJhdG9yPShjb25zdCBjbUNUZXN0U2NyaXB0SGFuZGxlciYpID0gZGVsZXRlOwogICB+Y21DVGVzdFNjcmlwdEhhbmRsZXIoKSBvdmVycmlkZTsKIAogICB2b2lkIEluaXRpYWxpemUoKSBvdmVycmlkZTsKIAogICB2b2lkIENyZWF0ZUNNYWtlKCk7Ci0gIGNtYWtlKiBHZXRDTWFrZSgpIHsgcmV0dXJuIHRoaXMtPkNNYWtlOyB9CisgIGNtYWtlKiBHZXRDTWFrZSgpIHsgcmV0dXJuIHRoaXMtPkNNYWtlLmdldCgpOyB9CiAKICAgdm9pZCBTZXRSdW5DdXJyZW50U2NyaXB0KGJvb2wgdmFsdWUpOwogCkBAIC0xNDMsOSArMTQ1LDkgQEAKIAogICBib29sIFNob3VsZFJ1bkN1cnJlbnRTY3JpcHQ7CiAKLSAgYm9vbCBCYWNrdXA7Ci0gIGJvb2wgRW1wdHlCaW5EaXI7Ci0gIGJvb2wgRW1wdHlCaW5EaXJPbmNlOworICBib29sIEJhY2t1cCA9IGZhbHNlOworICBib29sIEVtcHR5QmluRGlyID0gZmFsc2U7CisgIGJvb2wgRW1wdHlCaW5EaXJPbmNlID0gZmFsc2U7CiAKICAgc3RkOjpzdHJpbmcgU291cmNlRGlyOwogICBzdGQ6OnN0cmluZyBCaW5hcnlEaXI7CkBAIC0xNjEsMTYgKzE2MywxOCBAQAogICBzdGQ6OnN0cmluZyBDTU91dEZpbGU7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBFeHRyYVVwZGF0ZXM7CiAKLSAgZG91YmxlIE1pbmltdW1JbnRlcnZhbDsKLSAgZG91YmxlIENvbnRpbnVvdXNEdXJhdGlvbjsKKyAgLy8gdGhlICo2MCBpcyBiZWNhdXNlIHRoZSBzZXR0aW5ncyBhcmUgaW4gbWludXRlcyBidXQgR2V0VGltZSBpcyBzZWNvbmRzCisgIGRvdWJsZSBNaW5pbXVtSW50ZXJ2YWwgPSAzMCAqIDYwOworICBkb3VibGUgQ29udGludW91c0R1cmF0aW9uID0gLTE7CiAKICAgLy8gd2hhdCB0aW1lIGluIHNlY29uZHMgZGlkIHRoaXMgc2NyaXB0IHN0YXJ0IHJ1bm5pbmcKLSAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBTY3JpcHRTdGFydFRpbWU7CisgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgU2NyaXB0U3RhcnRUaW1lID0KKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50KCk7CiAKLSAgY21NYWtlZmlsZSogTWFrZWZpbGU7Ci0gIGNtTWFrZWZpbGUqIFBhcmVudE1ha2VmaWxlOwotICBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yOwotICBjbWFrZSogQ01ha2U7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlPiBNYWtlZmlsZTsKKyAgY21NYWtlZmlsZSogUGFyZW50TWFrZWZpbGUgPSBudWxscHRyOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IEdsb2JhbEdlbmVyYXRvcjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtYWtlPiBDTWFrZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0Q29tbWFuZC5jeHgKaW5kZXggNDZiMDBiMS4uYWNiNzViMiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdENvbW1hbmQuY3h4CkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y20vdmVjdG9yPgogCiAjaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKIApAQCAtMTc0LDcgKzE3NSw3IEBACiAgIHRoaXMtPlBhcnRzTWVudGlvbmVkID0gIXRoaXMtPlBhcnRzLmVtcHR5KCkgfHwgY21Db250YWlucyhrZXl3b3JkcywgIlBBUlRTIik7CiAgIHRoaXMtPkZpbGVzTWVudGlvbmVkID0gIXRoaXMtPkZpbGVzLmVtcHR5KCkgfHwgY21Db250YWlucyhrZXl3b3JkcywgIkZJTEVTIik7CiAKLSAgY21FcmFzZUlmKHRoaXMtPlBhcnRzLCBbdGhpc10oc3RkOjpzdHJpbmcgY29uc3QmIGFyZykgLT4gYm9vbCB7CisgIGNtOjplcmFzZV9pZih0aGlzLT5QYXJ0cywgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpIC0+IGJvb2wgewogICAgIGNtQ1Rlc3Q6OlBhcnQgcCA9IHRoaXMtPkNUZXN0LT5HZXRQYXJ0RnJvbU5hbWUoYXJnLmNfc3RyKCkpOwogICAgIGlmIChwID09IGNtQ1Rlc3Q6OlBhcnRDb3VudCkgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CkBAIC0xODUsNyArMTg2LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0pOwogCi0gIGNtRXJhc2VJZih0aGlzLT5GaWxlcywgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpIC0+IGJvb2wgeworICBjbTo6ZXJhc2VfaWYodGhpcy0+RmlsZXMsIFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCYgYXJnKSAtPiBib29sIHsKICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoYXJnKSkgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICBlIDw8ICJGaWxlIFwiIiA8PCBhcmcgPDwgIlwiIGRvZXMgbm90IGV4aXN0LiBDYW5ub3Qgc3VibWl0ICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0SGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdEhhbmRsZXIuY3h4CmluZGV4IDJhYzVhZjYuLjgxMWE3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRIYW5kbGVyLmN4eApAQCAtNyw2ICs3LDggQEAKICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbV9jdXJsLmgiCiAjaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKICNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCkBAIC02NSw3ICs2Nyw3IEBACiAKICAgdm9pZCBDaGFyYWN0ZXJEYXRhSGFuZGxlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZQogICB7Ci0gICAgY21BcHBlbmQodGhpcy0+Q3VycmVudFZhbHVlLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPkN1cnJlbnRWYWx1ZSwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiAgIH0KIAogICB2b2lkIEVuZEVsZW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIG92ZXJyaWRlCkBAIC05Niw4ICs5OCw4IEBACiB7CiAgIGludCByZWFsc2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZSAqIG5tZW1iKTsKICAgY29uc3QgY2hhciogY2hQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKTsKLSAgY21BcHBlbmQoKnN0YXRpY19jYXN0PGNtQ1Rlc3RTdWJtaXRIYW5kbGVyVmVjdG9yT2ZDaGFyKj4oZGF0YSksIGNoUHRyLAotICAgICAgICAgICBjaFB0ciArIHJlYWxzaXplKTsKKyAgY206OmFwcGVuZCgqc3RhdGljX2Nhc3Q8Y21DVGVzdFN1Ym1pdEhhbmRsZXJWZWN0b3JPZkNoYXIqPihkYXRhKSwgY2hQdHIsCisgICAgICAgICAgICAgY2hQdHIgKyByZWFsc2l6ZSk7CiAgIHJldHVybiByZWFsc2l6ZTsKIH0KIApAQCAtMTA2LDkgKzEwOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogY2hQdHIsIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRhdGEpCiB7Ci0gIGNtQXBwZW5kKCpzdGF0aWNfY2FzdDxjbUNUZXN0U3VibWl0SGFuZGxlclZlY3Rvck9mQ2hhcio+KGRhdGEpLCBjaFB0ciwKLSAgICAgICAgICAgY2hQdHIgKyBzaXplKTsKLSAgcmV0dXJuIHNpemU7CisgIGNtOjphcHBlbmQoKnN0YXRpY19jYXN0PGNtQ1Rlc3RTdWJtaXRIYW5kbGVyVmVjdG9yT2ZDaGFyKj4oZGF0YSksIGNoUHRyLAorICAgICAgICAgICAgIGNoUHRyICsgc2l6ZSk7CisgIHJldHVybiAwOwogfQogCiBjbUNUZXN0U3VibWl0SGFuZGxlcjo6Y21DVGVzdFN1Ym1pdEhhbmRsZXIoKQpAQCAtMjU4LDExICsyNjAsMTAgQEAKICAgICAgICAgY21DVGVzdFNjcmlwdEhhbmRsZXIqIGNoID0gdGhpcy0+Q1Rlc3QtPkdldFNjcmlwdEhhbmRsZXIoKTsKICAgICAgICAgY21ha2UqIGNtID0gY2gtPkdldENNYWtlKCk7CiAgICAgICAgIGlmIChjbSkgewotICAgICAgICAgIGNvbnN0IGNoYXIqIHN1YnByb2plY3QgPQotICAgICAgICAgICAgY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJTdWJQcm9qZWN0Iik7CisgICAgICAgICAgY21Qcm9wIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKICAgICAgICAgICBpZiAoc3VicHJvamVjdCkgewogICAgICAgICAgICAgdXBsb2FkX2FzICs9ICImc3VicHJvamVjdD0iOwotICAgICAgICAgICAgdXBsb2FkX2FzICs9IGN0ZXN0X2N1cmwuRXNjYXBlKHN1YnByb2plY3QpOworICAgICAgICAgICAgdXBsb2FkX2FzICs9IGN0ZXN0X2N1cmwuRXNjYXBlKCpzdWJwcm9qZWN0KTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTUwNCwxOCArNTA1LDE5IEBACiAgIGN1cmwuU2V0VGltZU91dFNlY29uZHMoU1VCTUlUX1RJTUVPVVRfSU5fU0VDT05EU19ERUZBVUxUKTsKICAgY3VybC5TZXRIdHRwSGVhZGVycyh0aGlzLT5IdHRwSGVhZGVycyk7CiAgIHN0ZDo6c3RyaW5nIHVybCA9IHRoaXMtPkNUZXN0LT5HZXRTdWJtaXRVUkwoKTsKLSAgc3RkOjpzdHJpbmcgZmllbGRzOwotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHVybC5maW5kKCc/Jyk7Ci0gIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICBmaWVsZHMgPSB1cmwuc3Vic3RyKHBvcyArIDEpOwotICAgIHVybCA9IHVybC5zdWJzdHIoMCwgcG9zKTsKLSAgfQogICBpZiAoIWNtSGFzTGl0ZXJhbFByZWZpeCh1cmwsICJodHRwOi8vIikgJiYKICAgICAgICFjbUhhc0xpdGVyYWxQcmVmaXgodXJsLCAiaHR0cHM6Ly8iKSkgewogICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAiT25seSBodHRwIGFuZCBodHRwcyBhcmUgc3VwcG9ydGVkIGZvciBDREFTSF9VUExPQURcbiIpOwogICAgIHJldHVybiAtMTsKICAgfQorCisgIHN0ZDo6c3RyaW5nIGZpZWxkczsKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSB1cmwuZmluZCgnPycpOworICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgZmllbGRzID0gdXJsLnN1YnN0cihwb3MgKyAxKTsKKyAgICB1cmwuZXJhc2UocG9zKTsKKyAgfQogICBib29sIGludGVybmFsVGVzdCA9IGNtSXNPbih0aGlzLT5HZXRPcHRpb24oIkludGVybmFsVGVzdCIpKTsKIAogICAvLyBHZXQgUkVUUllfQ09VTlQgYW5kIFJFVFJZX0RFTEFZIHZhbHVlcyBpZiB0aGV5IHdlcmUgc2V0LgpAQCAtNTUzLDExICs1NTUsMTEgQEAKICAgLy8gYSAiJnN1YnByb2plY3Q9c3VicHJvamVjdG5hbWUiIHRvIHRoZSBmaXJzdCBQT1NULgogICBjbUNUZXN0U2NyaXB0SGFuZGxlciogY2ggPSB0aGlzLT5DVGVzdC0+R2V0U2NyaXB0SGFuZGxlcigpOwogICBjbWFrZSogY20gPSBjaC0+R2V0Q01ha2UoKTsKLSAgY29uc3QgY2hhciogc3VicHJvamVjdCA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdCIpOworICBjbVByb3Agc3VicHJvamVjdCA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdCIpOwogICAvLyBUT0RPOiBFbmNvZGUgdmFsdWVzIGZvciBhIFVSTCBpbnN0ZWFkIG9mIHRydXN0aW5nIGNhbGxlci4KICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgaWYgKHN1YnByb2plY3QpIHsKLSAgICBzdHIgPDwgInN1YnByb2plY3Q9IiA8PCBjdXJsLkVzY2FwZShzdWJwcm9qZWN0KSA8PCAiJiI7CisgICAgc3RyIDw8ICJzdWJwcm9qZWN0PSIgPDwgY3VybC5Fc2NhcGUoKnN1YnByb2plY3QpIDw8ICImIjsKICAgfQogICBhdXRvIHRpbWVOb3cgPQogICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRvX3RpbWVfdChzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSk7CkBAIC03NjgsNyArNzcwLDcgQEAKIAogICBpZiAoIXRoaXMtPkZpbGVzLmVtcHR5KCkpIHsKICAgICAvLyBTdWJtaXQgdGhlIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZXM6Ci0gICAgY21BcHBlbmQoZmlsZXMsIHRoaXMtPkZpbGVzKTsKKyAgICBjbTo6YXBwZW5kKGZpbGVzLCB0aGlzLT5GaWxlcyk7CiAgIH0KIAogICAvLyBBZGQgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gc3VibWl0IGZyb20gYW55IHNlbGVjdGVkLCBleGlzdGluZyBwYXJ0czoKQEAgLTgxNCw3ICs4MTYsNyBAQAogICAgIH0KIAogICAgIC8vIFN1Ym1pdCBmaWxlcyBmcm9tIHRoaXMgcGFydC4KLSAgICBjbUFwcGVuZChmaWxlcywgdGhpcy0+Q1Rlc3QtPkdldFN1Ym1pdEZpbGVzKHApKTsKKyAgICBjbTo6YXBwZW5kKGZpbGVzLCB0aGlzLT5DVGVzdC0+R2V0U3VibWl0RmlsZXMocCkpOwogICB9CiAKICAgLy8gTWFrZSBzdXJlIGZpbGVzIGFyZSB1bmlxdWUsIGJ1dCBwcmVzZXJ2ZSBvcmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHgKaW5kZXggOTc4NDIxNC4uMGY5YjY5NSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHgKQEAgLTI5LDYgKzI5LDcgQEAKICAgdGhpcy0+QmluZCgiRVhDTFVERV9GSVhUVVJFX1NFVFVQIl9zLCB0aGlzLT5FeGNsdWRlRml4dHVyZVNldHVwKTsKICAgdGhpcy0+QmluZCgiRVhDTFVERV9GSVhUVVJFX0NMRUFOVVAiX3MsIHRoaXMtPkV4Y2x1ZGVGaXh0dXJlQ2xlYW51cCk7CiAgIHRoaXMtPkJpbmQoIlBBUkFMTEVMX0xFVkVMIl9zLCB0aGlzLT5QYXJhbGxlbExldmVsKTsKKyAgdGhpcy0+QmluZCgiUkVQRUFUIl9zLCB0aGlzLT5SZXBlYXQpOwogICB0aGlzLT5CaW5kKCJTQ0hFRFVMRV9SQU5ET00iX3MsIHRoaXMtPlNjaGVkdWxlUmFuZG9tKTsKICAgdGhpcy0+QmluZCgiU1RPUF9USU1FIl9zLCB0aGlzLT5TdG9wVGltZSk7CiAgIHRoaXMtPkJpbmQoIlRFU1RfTE9BRCJfcywgdGhpcy0+VGVzdExvYWQpOwpAQCAtODUsNiArODYsOSBAQAogICBpZiAoIXRoaXMtPlBhcmFsbGVsTGV2ZWwuZW1wdHkoKSkgewogICAgIGhhbmRsZXItPlNldE9wdGlvbigiUGFyYWxsZWxMZXZlbCIsIHRoaXMtPlBhcmFsbGVsTGV2ZWwuY19zdHIoKSk7CiAgIH0KKyAgaWYgKCF0aGlzLT5SZXBlYXQuZW1wdHkoKSkgeworICAgIGhhbmRsZXItPlNldE9wdGlvbigiUmVwZWF0IiwgdGhpcy0+UmVwZWF0LmNfc3RyKCkpOworICB9CiAgIGlmICghdGhpcy0+U2NoZWR1bGVSYW5kb20uZW1wdHkoKSkgewogICAgIGhhbmRsZXItPlNldE9wdGlvbigiU2NoZWR1bGVSYW5kb20iLCB0aGlzLT5TY2hlZHVsZVJhbmRvbS5jX3N0cigpKTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5oCmluZGV4IDQwMTk2OTQuLjIzNDVhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdENvbW1hbmQuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RDb21tYW5kLmgKQEAgLTU1LDYgKzU1LDcgQEAKICAgc3RkOjpzdHJpbmcgRXhjbHVkZUZpeHR1cmVTZXR1cDsKICAgc3RkOjpzdHJpbmcgRXhjbHVkZUZpeHR1cmVDbGVhbnVwOwogICBzdGQ6OnN0cmluZyBQYXJhbGxlbExldmVsOworICBzdGQ6OnN0cmluZyBSZXBlYXQ7CiAgIHN0ZDo6c3RyaW5nIFNjaGVkdWxlUmFuZG9tOwogICBzdGQ6OnN0cmluZyBTdG9wVGltZTsKICAgc3RkOjpzdHJpbmcgVGVzdExvYWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuY3h4CmluZGV4IGM4YmJiMGIuLjFmZWFjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuY3h4CkBAIC0xOCwxMiArMTgsMTQgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSA8Y21zeXMvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8Y21zeXMvRGlyZWN0b3J5Lmh4eD4KICNpbmNsdWRlIDxjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHg+CiAKKyNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgogI2luY2x1ZGUgImNtX3V0ZjguaCIKIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgpAQCAtNDEwLDEwICs0MTIsMTUgQEAKIAogICBhdXRvIGNsb2NrX2ZpbmlzaCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCisgIGJvb2wgbm9UZXN0c0ZvdW5kRXJyb3IgPSBmYWxzZTsKICAgaWYgKHBhc3NlZC5zaXplKCkgKyBmYWlsZWQuc2l6ZSgpID09IDApIHsKLSAgICBpZiAoIXRoaXMtPkNUZXN0LT5HZXRTaG93T25seSgpICYmICF0aGlzLT5DVGVzdC0+U2hvdWxkUHJpbnRMYWJlbHMoKSkgeworICAgIGlmICghdGhpcy0+Q1Rlc3QtPkdldFNob3dPbmx5KCkgJiYgIXRoaXMtPkNUZXN0LT5TaG91bGRQcmludExhYmVscygpICYmCisgICAgICAgIHRoaXMtPkNUZXN0LT5HZXROb1Rlc3RzTW9kZSgpICE9IGNtQ1Rlc3Q6Ok5vVGVzdHM6Oklnbm9yZSkgewogICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICAgIk5vIHRlc3RzIHdlcmUgZm91bmQhISEiIDw8IHN0ZDo6ZW5kbCk7CisgICAgICBpZiAodGhpcy0+Q1Rlc3QtPkdldE5vVGVzdHNNb2RlKCkgPT0gY21DVGVzdDo6Tm9UZXN0czo6RXJyb3IpIHsKKyAgICAgICAgbm9UZXN0c0ZvdW5kRXJyb3IgPSB0cnVlOworICAgICAgfQogICAgIH0KICAgfSBlbHNlIHsKICAgICBpZiAodGhpcy0+SGFuZGxlclZlcmJvc2UgJiYgIXBhc3NlZC5lbXB0eSgpICYmCkBAIC00NTksNiArNDY2LDEyIEBACiAgICAgdGhpcy0+TG9nRmlsZSA9IG51bGxwdHI7CiAgICAgcmV0dXJuIC0xOwogICB9CisKKyAgaWYgKG5vVGVzdHNGb3VuZEVycm9yKSB7CisgICAgdGhpcy0+TG9nRmlsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIC0xOworICB9CisKICAgdGhpcy0+TG9nRmlsZSA9IG51bGxwdHI7CiAgIHJldHVybiAwOwogfQpAQCAtNDcxLDYgKzQ4NCwzMCBAQAogICBpZiAoY21Jc09uKHRoaXMtPkdldE9wdGlvbigiU2NoZWR1bGVSYW5kb20iKSkpIHsKICAgICB0aGlzLT5DVGVzdC0+U2V0U2NoZWR1bGVUeXBlKCJSYW5kb20iKTsKICAgfQorICBpZiAoY29uc3QgY2hhciogcmVwZWF0ID0gdGhpcy0+R2V0T3B0aW9uKCJSZXBlYXQiKSkgeworICAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiByZXBlYXRSZWdleCgKKyAgICAgICJeKFVOVElMX0ZBSUx8VU5USUxfUEFTU3xBRlRFUl9USU1FT1VUKTooWzAtOV0rKSQiKTsKKyAgICBpZiAocmVwZWF0UmVnZXguZmluZChyZXBlYXQpKSB7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY291bnQgPSByZXBlYXRSZWdleC5tYXRjaCgyKTsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IDE7CisgICAgICBjbVN0clRvVUxvbmcoY291bnQsICZuKTsgLy8gcmVnZXggZ3VhcmFudGVlcyBzdWNjZXNzCisgICAgICB0aGlzLT5SZXBlYXRDb3VudCA9IHN0YXRpY19jYXN0PGludD4obik7CisgICAgICBpZiAodGhpcy0+UmVwZWF0Q291bnQgPiAxKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBtb2RlID0gcmVwZWF0UmVnZXgubWF0Y2goMSk7CisgICAgICAgIGlmIChtb2RlID09ICJVTlRJTF9GQUlMIikgeworICAgICAgICAgIHRoaXMtPlJlcGVhdE1vZGUgPSBjbUNUZXN0OjpSZXBlYXQ6OlVudGlsRmFpbDsKKyAgICAgICAgfSBlbHNlIGlmIChtb2RlID09ICJVTlRJTF9QQVNTIikgeworICAgICAgICAgIHRoaXMtPlJlcGVhdE1vZGUgPSBjbUNUZXN0OjpSZXBlYXQ6OlVudGlsUGFzczsKKyAgICAgICAgfSBlbHNlIGlmIChtb2RlID09ICJBRlRFUl9USU1FT1VUIikgeworICAgICAgICAgIHRoaXMtPlJlcGVhdE1vZGUgPSBjbUNUZXN0OjpSZXBlYXQ6OkFmdGVyVGltZW91dDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAorICAgICAgICAgICAgICAgICAiUmVwZWF0IG9wdGlvbiBpbnZhbGlkIHZhbHVlOiAiIDw8IHJlcGVhdCA8PCBzdGQ6OmVuZGwpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQogICBpZiAodGhpcy0+R2V0T3B0aW9uKCJQYXJhbGxlbExldmVsIikpIHsKICAgICB0aGlzLT5DVGVzdC0+U2V0UGFyYWxsZWxMZXZlbChhdG9pKHRoaXMtPkdldE9wdGlvbigiUGFyYWxsZWxMZXZlbCIpKSk7CiAgIH0KQEAgLTUxMyw2ICs1NTAsNyBAQAogICB2YWwgPSB0aGlzLT5HZXRPcHRpb24oIlJlc291cmNlU3BlY0ZpbGUiKTsKICAgaWYgKHZhbCkgewogICAgIHRoaXMtPlVzZVJlc291cmNlU3BlYyA9IHRydWU7CisgICAgdGhpcy0+UmVzb3VyY2VTcGVjRmlsZSA9IHZhbDsKICAgICBhdXRvIHJlc3VsdCA9IHRoaXMtPlJlc291cmNlU3BlYy5SZWFkRnJvbUpTT05GaWxlKHZhbCk7CiAgICAgaWYgKHJlc3VsdCAhPSBjbUNUZXN0UmVzb3VyY2VTcGVjOjpSZWFkRmlsZVJlc3VsdDo6UkVBRF9PSykgewogICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKQEAgLTEyMzEsMTAgKzEyNjksMTYgQEAKICAgdGhpcy0+U3RhcnRUZXN0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogICBhdXRvIGVsYXBzZWRfdGltZV9zdGFydCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCi0gIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyKiBwYXJhbGxlbCA9IG5ldyBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjsKKyAgYXV0byBwYXJhbGxlbCA9IGNtOjptYWtlX3VuaXF1ZTxjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcj4oKTsKICAgcGFyYWxsZWwtPlNldENUZXN0KHRoaXMtPkNUZXN0KTsKICAgcGFyYWxsZWwtPlNldFBhcmFsbGVsTGV2ZWwodGhpcy0+Q1Rlc3QtPkdldFBhcmFsbGVsTGV2ZWwoKSk7CiAgIHBhcmFsbGVsLT5TZXRUZXN0SGFuZGxlcih0aGlzKTsKKyAgaWYgKHRoaXMtPlJlcGVhdE1vZGUgIT0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcikgeworICAgIHBhcmFsbGVsLT5TZXRSZXBlYXRNb2RlKHRoaXMtPlJlcGVhdE1vZGUsIHRoaXMtPlJlcGVhdENvdW50KTsKKyAgfSBlbHNlIHsKKyAgICBwYXJhbGxlbC0+U2V0UmVwZWF0TW9kZSh0aGlzLT5DVGVzdC0+R2V0UmVwZWF0TW9kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRSZXBlYXRDb3VudCgpKTsKKyAgfQogICBwYXJhbGxlbC0+U2V0UXVpZXQodGhpcy0+UXVpZXQpOwogICBpZiAodGhpcy0+VGVzdExvYWQgPiAwKSB7CiAgICAgcGFyYWxsZWwtPlNldFRlc3RMb2FkKHRoaXMtPlRlc3RMb2FkKTsKQEAgLTEyOTYsNyArMTM0MCw2IEBACiAgIH0gZWxzZSB7CiAgICAgcGFyYWxsZWwtPlJ1blRlc3RzKCk7CiAgIH0KLSAgZGVsZXRlIHBhcmFsbGVsOwogICB0aGlzLT5FbmRUZXN0ID0gdGhpcy0+Q1Rlc3QtPkN1cnJlbnRUaW1lKCk7CiAgIHRoaXMtPkVuZFRlc3RUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgIHRoaXMtPkVsYXBzZWRUZXN0aW5nVGltZSA9CkBAIC0xODUyLDcgKzE4OTUsOCBAQAogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAotICAgICAgaW50IHZhbCA9IGF0b2kobGluZS5zdWJzdHIoMCwgcG9zKS5jX3N0cigpKTsKKyAgICAgIGxpbmUuZXJhc2UocG9zKTsKKyAgICAgIGludCB2YWwgPSBhdG9pKGxpbmUuY19zdHIoKSk7CiAgICAgICB0aGlzLT5UZXN0c1RvUnVuLnB1c2hfYmFjayh2YWwpOwogICAgIH0KICAgICBpZnMuY2xvc2UoKTsKQEAgLTE5NzQsMTMgKzIwMTgsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGQ6Omlvczo6YmluYXJ5CiAjZW5kaWYKICAgICAgICAgICApOwotICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGZpbGVfYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNoYXJbbGVuICsgMV07Ci0gICAgICAgICAgaWZzLnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmlsZV9idWZmZXIpLCBsZW4pOwotICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGVuY29kZWRfYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNoYXJbc3RhdGljX2Nhc3Q8aW50PigKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obGVuKSAqIDEuNSArIDUuMCldOworICAgICAgICAgIGF1dG8gZmlsZV9idWZmZXIgPSBjbTo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hhcltdPihsZW4gKyAxKTsKKyAgICAgICAgICBpZnMucmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihmaWxlX2J1ZmZlci5nZXQoKSksIGxlbik7CisgICAgICAgICAgYXV0byBlbmNvZGVkX2J1ZmZlciA9IGNtOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxkb3VibGU+KGxlbikgKiAxLjUgKyA1LjApKTsKIAotICAgICAgICAgIHNpemVfdCBybGVuID0KLSAgICAgICAgICAgIGNtc3lzQmFzZTY0X0VuY29kZShmaWxlX2J1ZmZlciwgbGVuLCBlbmNvZGVkX2J1ZmZlciwgMSk7CisgICAgICAgICAgc2l6ZV90IHJsZW4gPSBjbXN5c0Jhc2U2NF9FbmNvZGUoZmlsZV9idWZmZXIuZ2V0KCksIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2J1ZmZlci5nZXQoKSwgMSk7CiAKICAgICAgICAgICB4bWwuU3RhcnRFbGVtZW50KCJOYW1lZE1lYXN1cmVtZW50Iik7CiAgICAgICAgICAgeG1sLkF0dHJpYnV0ZShtZWFzdXJlbWVudGZpbGUubWF0Y2goMSkuY19zdHIoKSwKQEAgLTE5OTcsOCArMjA0MSw2IEBACiAgICAgICAgICAgfQogICAgICAgICAgIHhtbC5FbGVtZW50KCJWYWx1ZSIsIG9zdHIuc3RyKCkpOwogICAgICAgICAgIHhtbC5FbmRFbGVtZW50KCk7IC8vIE5hbWVkTWVhc3VyZW1lbnQKLSAgICAgICAgICBkZWxldGVbXSBmaWxlX2J1ZmZlcjsKLSAgICAgICAgICBkZWxldGVbXSBlbmNvZGVkX2J1ZmZlcjsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IGlkeCA9IDQ7CkBAIC0yMDQzLDE5ICsyMDg1LDE4IEBACiAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGluKSkgewogICAgIGNtc3lzOjppZnN0cmVhbSBmaW4oaW4pOwogICAgIHVuc2lnbmVkIGxvbmcgZmlsZWxlbiA9IGNtU3lzdGVtVG9vbHM6OkZpbGVMZW5ndGgoaW4pOwotICAgIGNoYXIqIGJ1ZmYgPSBuZXcgY2hhcltmaWxlbGVuICsgMV07Ci0gICAgZmluLmdldGxpbmUoYnVmZiwgZmlsZWxlbik7CisgICAgYXV0byBidWZmID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4oZmlsZWxlbiArIDEpOworICAgIGZpbi5nZXRsaW5lKGJ1ZmYuZ2V0KCksIGZpbGVsZW4pOwogICAgIGJ1ZmZbZmluLmdjb3VudCgpXSA9IDA7Ci0gICAgdGhpcy0+VGVzdHNUb1J1blN0cmluZyA9IGJ1ZmY7Ci0gICAgZGVsZXRlW10gYnVmZjsKKyAgICB0aGlzLT5UZXN0c1RvUnVuU3RyaW5nID0gYnVmZi5nZXQoKTsKICAgfQogfQogCi1ib29sIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Q2xlYW5UZXN0T3V0cHV0KHN0ZDo6c3RyaW5nJiBvdXRwdXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Q2xlYW5UZXN0T3V0cHV0KHN0ZDo6c3RyaW5nJiBvdXRwdXQsIHNpemVfdCBsZW5ndGgpCiB7CiAgIGlmICghbGVuZ3RoIHx8IGxlbmd0aCA+PSBvdXRwdXQuc2l6ZSgpIHx8CiAgICAgICBvdXRwdXQuZmluZCgiQ1RFU1RfRlVMTF9PVVRQVVQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybjsKICAgfQogCiAgIC8vIFRydW5jYXRlIGF0IGdpdmVuIGxlbmd0aCBidXQgZG8gbm90IGJyZWFrIGluIHRoZSBtaWRkbGUgb2YgYSBtdWx0aS1ieXRlCkBAIC0yMDc2LDcgKzIxMTcsNyBAQAogICAgICAgKytjdXJyZW50OwogICAgIH0KICAgfQotICBvdXRwdXQgPSBvdXRwdXQuc3Vic3RyKDAsIGN1cnJlbnQgLSBiZWdpbik7CisgIG91dHB1dC5lcmFzZShjdXJyZW50IC0gYmVnaW4pOwogCiAgIC8vIEFwcGVuZCB0cnVuY2F0aW9uIG1lc3NhZ2UuCiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7CkBAIC0yMDg2LDcgKzIxMjcsNiBAQAogICAgICAgICAgIm9mICIKICAgICAgIDw8IGxlbmd0aCA8PCAiIGJ5dGVzLlxuIjsKICAgb3V0cHV0ICs9IG1zZy5zdHIoKTsKLSAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgY21DVGVzdFRlc3RIYW5kbGVyOjpTZXRUZXN0c1Byb3BlcnRpZXMoCkBAIC0yMTA3LDE2ICsyMTQ3LDE2IEBACiAgIH0KICAgKytpdDsgLy8gc2tpcCBQUk9QRVJUSUVTCiAgIGZvciAoOyBpdCAhPSBhcmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgc3RkOjpzdHJpbmcga2V5ID0gKml0OworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkgPSAqaXQ7CiAgICAgKytpdDsKICAgICBpZiAoaXQgPT0gYXJncy5lbmQoKSkgewogICAgICAgYnJlYWs7CiAgICAgfQotICAgIHN0ZDo6c3RyaW5nIHZhbCA9ICppdDsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsID0gKml0OwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHQgOiB0ZXN0cykgewogICAgICAgZm9yIChjbUNUZXN0VGVzdFByb3BlcnRpZXMmIHJ0IDogdGhpcy0+VGVzdExpc3QpIHsKICAgICAgICAgaWYgKHQgPT0gcnQuTmFtZSkgewotICAgICAgICAgIGlmIChrZXkgPT0gIl9CQUNLVFJBQ0VfVFJJUExFUyIpIHsKKyAgICAgICAgICBpZiAoa2V5ID09ICJfQkFDS1RSQUNFX1RSSVBMRVMiX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0cmlwbGVzOwogICAgICAgICAgICAgLy8gYWxsb3cgZW1wdHkgYXJncyBpbiB0aGUgdHJpcGxlcwogICAgICAgICAgICAgY21FeHBhbmRMaXN0KHZhbCwgdHJpcGxlcywgdHJ1ZSk7CkBAIC0yMTQwLDkxICsyMTgwLDcwIEBACiAgICAgICAgICAgICAgICAgcnQuQmFja3RyYWNlID0gcnQuQmFja3RyYWNlLlB1c2goZmMpOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIldJTExfRkFJTCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiV0lMTF9GQUlMIl9zKSB7CiAgICAgICAgICAgICBydC5XaWxsRmFpbCA9IGNtSXNPbih2YWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJESVNBQkxFRCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRElTQUJMRUQiX3MpIHsKICAgICAgICAgICAgIHJ0LkRpc2FibGVkID0gY21Jc09uKHZhbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkFUVEFDSEVEX0ZJTEVTIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJBVFRBQ0hFRF9GSUxFUyJfcykgewogICAgICAgICAgICAgY21FeHBhbmRMaXN0KHZhbCwgcnQuQXR0YWNoZWRGaWxlcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkFUVEFDSEVEX0ZJTEVTX09OX0ZBSUwiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkFUVEFDSEVEX0ZJTEVTX09OX0ZBSUwiX3MpIHsKICAgICAgICAgICAgIGNtRXhwYW5kTGlzdCh2YWwsIHJ0LkF0dGFjaE9uRmFpbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlJFU09VUkNFX0xPQ0siKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlJFU09VUkNFX0xPQ0siX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKIAogICAgICAgICAgICAgcnQuTG9ja2VkUmVzb3VyY2VzLmluc2VydChsdmFsLmJlZ2luKCksIGx2YWwuZW5kKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJGSVhUVVJFU19TRVRVUCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRklYVFVSRVNfU0VUVVAiX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKIAogICAgICAgICAgICAgcnQuRml4dHVyZXNTZXR1cC5pbnNlcnQobHZhbC5iZWdpbigpLCBsdmFsLmVuZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiRklYVFVSRVNfQ0xFQU5VUCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRklYVFVSRVNfQ0xFQU5VUCJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogCiAgICAgICAgICAgICBydC5GaXh0dXJlc0NsZWFudXAuaW5zZXJ0KGx2YWwuYmVnaW4oKSwgbHZhbC5lbmQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkZJWFRVUkVTX1JFUVVJUkVEIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJGSVhUVVJFU19SRVFVSVJFRCJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogCiAgICAgICAgICAgICBydC5GaXh0dXJlc1JlcXVpcmVkLmluc2VydChsdmFsLmJlZ2luKCksIGx2YWwuZW5kKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJUSU1FT1VUIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJUSU1FT1VUIl9zKSB7CiAgICAgICAgICAgICBydC5UaW1lb3V0ID0gY21EdXJhdGlvbihhdG9mKHZhbC5jX3N0cigpKSk7CiAgICAgICAgICAgICBydC5FeHBsaWNpdFRpbWVvdXQgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJDT1NUIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJDT1NUIl9zKSB7CiAgICAgICAgICAgICBydC5Db3N0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YodmFsLmNfc3RyKCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUkVRVUlSRURfRklMRVMiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlJFUVVJUkVEX0ZJTEVTIl9zKSB7CiAgICAgICAgICAgICBjbUV4cGFuZExpc3QodmFsLCBydC5SZXF1aXJlZEZpbGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUlVOX1NFUklBTCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUlVOX1NFUklBTCJfcykgewogICAgICAgICAgICAgcnQuUnVuU2VyaWFsID0gY21Jc09uKHZhbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogICAgICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY3IgOiBsdmFsKSB7CiAgICAgICAgICAgICAgIHJ0LkVycm9yUmVndWxhckV4cHJlc3Npb25zLmVtcGxhY2VfYmFjayhjciwgY3IpOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJTS0lQX1JFR1VMQVJfRVhQUkVTU0lPTiIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiU0tJUF9SRUdVTEFSX0VYUFJFU1NJT04iX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKICAgICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNyIDogbHZhbCkgewogICAgICAgICAgICAgICBydC5Ta2lwUmVndWxhckV4cHJlc3Npb25zLmVtcGxhY2VfYmFjayhjciwgY3IpOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJQUk9DRVNTT1JTIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJQUk9DRVNTT1JTIl9zKSB7CiAgICAgICAgICAgICBydC5Qcm9jZXNzb3JzID0gYXRvaSh2YWwuY19zdHIoKSk7CiAgICAgICAgICAgICBpZiAocnQuUHJvY2Vzc29ycyA8IDEpIHsKICAgICAgICAgICAgICAgcnQuUHJvY2Vzc29ycyA9IDE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlBST0NFU1NPUl9BRkZJTklUWSIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUFJPQ0VTU09SX0FGRklOSVRZIl9zKSB7CiAgICAgICAgICAgICBydC5XYW50QWZmaW5pdHkgPSBjbUlzT24odmFsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUkVTT1VSQ0VfR1JPVVBTIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJSRVNPVVJDRV9HUk9VUFMiX3MpIHsKICAgICAgICAgICAgIGlmICghUGFyc2VSZXNvdXJjZUdyb3Vwc1Byb3BlcnR5KHZhbCwgcnQuUmVzb3VyY2VHcm91cHMpKSB7CiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiU0tJUF9SRVRVUk5fQ09ERSIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiU0tJUF9SRVRVUk5fQ09ERSJfcykgewogICAgICAgICAgICAgcnQuU2tpcFJldHVybkNvZGUgPSBhdG9pKHZhbC5jX3N0cigpKTsKICAgICAgICAgICAgIGlmIChydC5Ta2lwUmV0dXJuQ29kZSA8IDAgfHwgcnQuU2tpcFJldHVybkNvZGUgPiAyNTUpIHsKICAgICAgICAgICAgICAgcnQuU2tpcFJldHVybkNvZGUgPSAtMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiREVQRU5EUyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiREVQRU5EUyJfcykgewogICAgICAgICAgICAgY21FeHBhbmRMaXN0KHZhbCwgcnQuRGVwZW5kcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkVOVklST05NRU5UIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJFTlZJUk9OTUVOVCJfcykgewogICAgICAgICAgICAgY21FeHBhbmRMaXN0KHZhbCwgcnQuRW52aXJvbm1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJMQUJFTFMiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkxBQkVMUyJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IExhYmVscyA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAgICAgICAgICAgICBydC5MYWJlbHMuaW5zZXJ0KHJ0LkxhYmVscy5lbmQoKSwgTGFiZWxzLmJlZ2luKCksIExhYmVscy5lbmQoKSk7CiAgICAgICAgICAgICAvLyBzb3J0IHRoZSBhcnJheQpAQCAtMjIzMiw4ICsyMjUxLDcgQEAKICAgICAgICAgICAgIC8vIHJlbW92ZSBkdXBsaWNhdGVzCiAgICAgICAgICAgICBhdXRvIG5ld19lbmQgPSBzdGQ6OnVuaXF1ZShydC5MYWJlbHMuYmVnaW4oKSwgcnQuTGFiZWxzLmVuZCgpKTsKICAgICAgICAgICAgIHJ0LkxhYmVscy5lcmFzZShuZXdfZW5kLCBydC5MYWJlbHMuZW5kKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJNRUFTVVJFTUVOVCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiTUVBU1VSRU1FTlQiX3MpIHsKICAgICAgICAgICAgIHNpemVfdCBwb3MgPSB2YWwuZmluZF9maXJzdF9vZignPScpOwogICAgICAgICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBtS2V5ID0gdmFsLnN1YnN0cigwLCBwb3MpOwpAQCAtMjI0MiwxNyArMjI2MCwxNCBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgcnQuTWVhc3VyZW1lbnRzW3ZhbF0gPSAiMSI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogICAgICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY3IgOiBsdmFsKSB7CiAgICAgICAgICAgICAgIHJ0LlJlcXVpcmVkUmVndWxhckV4cHJlc3Npb25zLmVtcGxhY2VfYmFjayhjciwgY3IpOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJXT1JLSU5HX0RJUkVDVE9SWSIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiV09SS0lOR19ESVJFQ1RPUlkiX3MpIHsKICAgICAgICAgICAgIHJ0LkRpcmVjdG9yeSA9IHZhbDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiVElNRU9VVF9BRlRFUl9NQVRDSCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiVElNRU9VVF9BRlRFUl9NQVRDSCJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BBcmdzID0gY21FeHBhbmRlZExpc3QodmFsKTsKICAgICAgICAgICAgIGlmIChwcm9wQXJncy5zaXplKCkgIT0gMikgewogICAgICAgICAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBXQVJOSU5HLApAQCAtMjI5MiwxNiArMjMwNywxNiBAQAogICB9CiAgICsraXQ7IC8vIHNraXAgUFJPUEVSVElFUwogICBmb3IgKDsgaXQgIT0gYXJncy5lbmQoKTsgKytpdCkgewotICAgIHN0ZDo6c3RyaW5nIGtleSA9ICppdDsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYga2V5ID0gKml0OwogICAgICsraXQ7CiAgICAgaWYgKGl0ID09IGFyZ3MuZW5kKCkpIHsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBzdGQ6OnN0cmluZyB2YWwgPSAqaXQ7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhbCA9ICppdDsKICAgICBmb3IgKGNtQ1Rlc3RUZXN0UHJvcGVydGllcyYgcnQgOiB0aGlzLT5UZXN0TGlzdCkgewogICAgICAgc3RkOjpzdHJpbmcgY3dkID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKICAgICAgIGlmIChjd2QgPT0gcnQuRGlyZWN0b3J5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gIkxBQkVMUyIpIHsKKyAgICAgICAgaWYgKGtleSA9PSAiTEFCRUxTIl9zKSB7CiAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IERpcmVjdG9yeUxhYmVscyA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAgICAgICAgICAgcnQuTGFiZWxzLmluc2VydChydC5MYWJlbHMuZW5kKCksIERpcmVjdG9yeUxhYmVscy5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5TGFiZWxzLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuaAppbmRleCBlYWI3NWQwLi44YTQ5ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RIYW5kbGVyLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5oCkBAIC0xOCwxMiArMTgsMTIgQEAKIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAorI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0R2VuZXJpY0hhbmRsZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0UmVzb3VyY2VTcGVjLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogCi1jbGFzcyBjbUNUZXN0OwogY2xhc3MgY21NYWtlZmlsZTsKIGNsYXNzIGNtWE1MV3JpdGVyOwogCkBAIC0yMzUsNyArMjM1LDcgQEAKICAgdm9pZCBBdHRhY2hGaWxlcyhjbVhNTFdyaXRlciYgeG1sLCBjbUNUZXN0VGVzdFJlc3VsdCYgcmVzdWx0KTsKIAogICAvLyEgQ2xlYW4gdGVzdCBvdXRwdXQgdG8gc3BlY2lmaWVkIGxlbmd0aAotICBib29sIENsZWFuVGVzdE91dHB1dChzdGQ6OnN0cmluZyYgb3V0cHV0LCBzaXplX3QgbGVuZ3RoKTsKKyAgdm9pZCBDbGVhblRlc3RPdXRwdXQoc3RkOjpzdHJpbmcmIG91dHB1dCwgc2l6ZV90IGxlbmd0aCk7CiAKICAgY21EdXJhdGlvbiBFbGFwc2VkVGVzdGluZ1RpbWU7CiAKQEAgLTMzOCw2ICszMzgsNyBAQAogCiAgIGJvb2wgVXNlUmVzb3VyY2VTcGVjOwogICBjbUNUZXN0UmVzb3VyY2VTcGVjIFJlc291cmNlU3BlYzsKKyAgc3RkOjpzdHJpbmcgUmVzb3VyY2VTcGVjRmlsZTsKIAogICB2b2lkIEdlbmVyYXRlUmVncmVzc2lvbkltYWdlcyhjbVhNTFdyaXRlciYgeG1sLCBjb25zdCBzdGQ6OnN0cmluZyYgZGFydCk7CiAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBEYXJ0U3R1ZmYxOwpAQCAtMzUzLDYgKzM1NCw4IEBACiAKICAgc3RkOjpvc3RyZWFtKiBMb2dGaWxlOwogCisgIGNtQ1Rlc3Q6OlJlcGVhdCBSZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcjsKKyAgaW50IFJlcGVhdENvdW50ID0gMTsKICAgYm9vbCBSZXJ1bkZhaWxlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VXBsb2FkQ29tbWFuZC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFVwbG9hZENvbW1hbmQuY3h4CmluZGV4IGQwZTM4NDguLmVhZWYxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VXBsb2FkQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RVcGxvYWRDb21tYW5kLmN4eApAQCAtNCwxMSArNCwxMSBAQAogCiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y20vdmVjdG9yPgogCiAjaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0VXBsb2FkSGFuZGxlci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTI0LDcgKzI0LDcgQEAKIAogdm9pZCBjbUNUZXN0VXBsb2FkQ29tbWFuZDo6Q2hlY2tBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JikKIHsKLSAgY21FcmFzZUlmKHRoaXMtPkZpbGVzLCBbdGhpc10oc3RkOjpzdHJpbmcgY29uc3QmIGFyZykgLT4gYm9vbCB7CisgIGNtOjplcmFzZV9pZih0aGlzLT5GaWxlcywgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpIC0+IGJvb2wgewogICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhhcmcpKSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgICAgIGUgPDwgIkZpbGUgXCIiIDw8IGFyZyA8PCAiXCIgZG9lcyBub3QgZXhpc3QuIENhbm5vdCBzdWJtaXQgIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmN4eAppbmRleCA2MDI2YzY5Li40NTJkNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmN4eApAQCAtMzgsNyArMzgsNyBAQAogICB0aGlzLT5Tb3VyY2VEaXJlY3RvcnkgPSBkaXI7CiB9CiAKLWJvb2wgY21DVGVzdFZDOjpJbml0aWFsQ2hlY2tvdXQoY29uc3QgY2hhciogY29tbWFuZCkKK2Jvb2wgY21DVGVzdFZDOjpJbml0aWFsQ2hlY2tvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1hbmQpCiB7CiAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfT1VUUFVULAogICAgICAgICAgICAgICIgICBGaXJzdCBwZXJmb3JtIHRoZSBpbml0aWFsIGNoZWNrb3V0OiAiIDw8IGNvbW1hbmQgPDwgIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmgKaW5kZXggMmE0NzY1ZC4uMzAzN2UwMSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VkMuaApAQCAtMzYsNyArMzYsNyBAQAogICBzdGQ6OnN0cmluZyBHZXROaWdodGx5VGltZSgpOwogCiAgIC8qKiBQcmVwYXJlIHRoZSB3b3JrIHRyZWUuICAqLwotICBib29sIEluaXRpYWxDaGVja291dChjb25zdCBjaGFyKiBjb21tYW5kKTsKKyAgYm9vbCBJbml0aWFsQ2hlY2tvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1hbmQpOwogCiAgIC8qKiBQZXJmb3JtIGNsZWFudXAgb3BlcmF0aW9ucyBvbiB0aGUgd29yayB0cmVlLiAgKi8KICAgdm9pZCBDbGVhbnVwKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuY3h4IGIvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmN4eAppbmRleCA4YzRkYTc1Li4xYTVlN2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5jeHgKQEAgLTE5LDcgKzE5LDcgQEAKIHsKIH0KIAotYm9vbCBjbVBhcnNlQ2FjaGVDb3ZlcmFnZTo6TG9hZENvdmVyYWdlRGF0YShjb25zdCBjaGFyKiBkKQorYm9vbCBjbVBhcnNlQ2FjaGVDb3ZlcmFnZTo6TG9hZENvdmVyYWdlRGF0YShzdGQ6OnN0cmluZyBjb25zdCYgZCkKIHsKICAgLy8gbG9hZCBhbGwgdGhlIC5tY292IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CiAgIGNtc3lzOjpEaXJlY3RvcnkgZGlyOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgLy8gaWYgd2UgaGF2ZSBhIHJvdXRpbmUgbmFtZSwgY2hlY2sgZm9yIGVuZCBvZiByb3V0aW5lCiAgICAgZWxzZSB7CiAgICAgICAvLyBUb3RhbHMgaW4gYXJnIDAgbWFya3MgdGhlIGVuZCBvZiBhIHJvdXRpbmUKLSAgICAgIGlmIChzZXBhcmF0ZUxpbmVbMF0uc3Vic3RyKDAsIDYpID09ICJUb3RhbHMiKSB7CisgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHNlcGFyYXRlTGluZVswXSwgIlRvdGFscyIpKSB7CiAgICAgICAgIHJvdXRpbmUuY2xlYXIoKTsgLy8gYXQgdGhlIGVuZCBvZiB0aGlzIHJvdXRpbmUKICAgICAgICAgZmlsZXBhdGguY2xlYXIoKTsKICAgICAgICAgY29udGludWU7IC8vIG1vdmUgdG8gbmV4dCBsaW5lCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuaCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5oCmluZGV4IGU4OWI5ZTQuLjNiNTU0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAKIHByb3RlY3RlZDoKICAgLy8gaW1wbGVtZW50IHZpcnR1YWwgZnJvbSBwYXJlbnQKLSAgYm9vbCBMb2FkQ292ZXJhZ2VEYXRhKGNvbnN0IGNoYXIqIGRpcikgb3ZlcnJpZGU7CisgIGJvb2wgTG9hZENvdmVyYWdlRGF0YShzdGQ6OnN0cmluZyBjb25zdCYgZGlyKSBvdmVycmlkZTsKICAgLy8gcmVtb3ZlIGZpbGVzIHdpdGggbm8gY292ZXJhZ2UKICAgdm9pZCBSZW1vdmVVbkNvdmVyZWRGaWxlcygpOwogICAvLyBSZWFkIGEgc2luZ2xlIG1jb3YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VDb2JlcnR1cmFDb3ZlcmFnZS5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNvYmVydHVyYUNvdmVyYWdlLmN4eAppbmRleCAwNWRhODRlLi43MTFhODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNvYmVydHVyYUNvdmVyYWdlLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNvYmVydHVyYUNvdmVyYWdlLmN4eApAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYWJzb2x1dGUgcGF0aCB0aGF0IGZhbGxzIHdpdGhpbiBvdXIKICAgICAgICAgICAvLyBzb3VyY2Ugb3IgYmluYXJ5IGRpcmVjdG9yaWVzLgogICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVQYXRoIDogRmlsZVBhdGhzKSB7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUuZmluZChmaWxlUGF0aCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKGNtSGFzUHJlZml4KGZpbGVuYW1lLCBmaWxlUGF0aCkpIHsKICAgICAgICAgICAgICAgdGhpcy0+Q3VyRmlsZU5hbWUgPSBmaWxlbmFtZTsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmN4eCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuY3h4CmluZGV4IDFkYzViNzAuLjE0NDE3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuY3h4CkBAIC0xOSw3ICsxOSw3IEBACiB7CiB9CiAKLWJvb2wgY21QYXJzZUdUTUNvdmVyYWdlOjpMb2FkQ292ZXJhZ2VEYXRhKGNvbnN0IGNoYXIqIGQpCitib29sIGNtUGFyc2VHVE1Db3ZlcmFnZTo6TG9hZENvdmVyYWdlRGF0YShzdGQ6OnN0cmluZyBjb25zdCYgZCkKIHsKICAgLy8gbG9hZCBhbGwgdGhlIC5tY292IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CiAgIGNtc3lzOjpEaXJlY3RvcnkgZGlyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5oIGIvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5oCmluZGV4IGZlMGFlMGIuLjQxY2M3ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHJvdGVjdGVkOgogICAvLyBpbXBsZW1lbnQgdmlydHVhbCBmcm9tIHBhcmVudAotICBib29sIExvYWRDb3ZlcmFnZURhdGEoY29uc3QgY2hhciogZGlyKSBvdmVycmlkZTsKKyAgYm9vbCBMb2FkQ292ZXJhZ2VEYXRhKHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpIG92ZXJyaWRlOwogICAvLyBSZWFkIGEgc2luZ2xlIG1jb3YgZmlsZQogICBib29sIFJlYWRNQ292RmlsZShjb25zdCBjaGFyKiBmKTsKICAgLy8gZmluZCBvdXQgd2hhdCBsaW5lIGluIGEgbXVtcHMgZmlsZSAoZmlsZXBhdGgpIHRoZSBnaXZlbiBlbnRyeSBwb2ludApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmN4eCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5jeHgKaW5kZXggYjE2ZjEwMS4uZGMzMDY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuY3h4CkBAIC0zOSw5ICszOSw5IEBACiAgICAgICBzdGQ6OnN0cmluZyB0eXBlID0gbGluZS5zdWJzdHIoMCwgcG9zKTsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBsaW5lLnN1YnN0cihwb3MgKyAxKTsKICAgICAgIGlmICh0eXBlID09ICJwYWNrYWdlcyIpIHsKLSAgICAgICAgdGhpcy0+TG9hZFBhY2thZ2VzKHBhdGguY19zdHIoKSk7CisgICAgICAgIHRoaXMtPkxvYWRQYWNrYWdlcyhwYXRoKTsKICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiY292ZXJhZ2VfZGlyIikgewotICAgICAgICB0aGlzLT5Mb2FkQ292ZXJhZ2VEYXRhKHBhdGguY19zdHIoKSk7CisgICAgICAgIHRoaXMtPkxvYWRDb3ZlcmFnZURhdGEocGF0aCk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgICAgICJQYXJzZSBFcnJvciBpbiBNdW1wcyBjb3ZlcmFnZSBmaWxlIDpcbiIKQEAgLTEwNSw3ICsxMDUsNyBAQAogICB9CiB9CiAKLWJvb2wgY21QYXJzZU11bXBzQ292ZXJhZ2U6OkxvYWRQYWNrYWdlcyhjb25zdCBjaGFyKiBkKQorYm9vbCBjbVBhcnNlTXVtcHNDb3ZlcmFnZTo6TG9hZFBhY2thZ2VzKHN0ZDo6c3RyaW5nIGNvbnN0JiBkKQogewogICBjbXN5czo6R2xvYiBnbG9iOwogICBnbG9iLlJlY3Vyc2VPbigpOwpAQCAtMTEzLDcgKzExMyw4IEBACiAgIGdsb2IuRmluZEZpbGVzKHBhdCk7CiAgIGZvciAoc3RkOjpzdHJpbmcmIGZpbGUgOiBnbG9iLkdldEZpbGVzKCkpIHsKICAgICBzdGQ6OnN0cmluZyBuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZpbGUpOwotICAgIHRoaXMtPlJvdXRpbmVUb0RpcmVjdG9yeVtuYW1lLnN1YnN0cigwLCBuYW1lLnNpemUoKSAtIDIpXSA9IGZpbGU7CisgICAgbmFtZS5lcmFzZShuYW1lLnNpemUoKSAtIDIpOworICAgIHRoaXMtPlJvdXRpbmVUb0RpcmVjdG9yeVtuYW1lXSA9IGZpbGU7CiAgICAgLy8gaW5pdGlhbGl6ZSBlYWNoIGZpbGUsIHRoaXMgaXMgbGVmdCBvdXQgdW50aWwgQ0Rhc2ggaXMgZml4ZWQKICAgICAvLyB0byBoYW5kbGUgbGFyZ2UgbnVtYmVycyBvZiBmaWxlcwogICAgIHRoaXMtPkluaXRpYWxpemVNdW1wc0ZpbGUoZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuaCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5oCmluZGV4IDJjNTQ0OTUuLjhjMDg3MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5oCkBAIC0yOSwxMCArMjksMTAgQEAKIHByb3RlY3RlZDoKICAgLy8gc3ViIGNsYXNzZXMgd2lsbCB1c2UgdGhpcyB0bwogICAvLyBsb2FkIGFsbCBjb3ZlcmFnZSBmaWxlcyBmb3VuZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5Ci0gIHZpcnR1YWwgYm9vbCBMb2FkQ292ZXJhZ2VEYXRhKGNvbnN0IGNoYXIqIGQpID0gMDsKKyAgdmlydHVhbCBib29sIExvYWRDb3ZlcmFnZURhdGEoc3RkOjpzdHJpbmcgY29uc3QmIGQpID0gMDsKICAgLy8gc2VhcmNoIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSBmb3IgbXVtcHMgZmlsZXMgYW5kIGZpbGwKICAgLy8gaW4gdGhlIFJvdXRpbmVUb0RpcmVjdG9yeSBtYXAKLSAgYm9vbCBMb2FkUGFja2FnZXMoY29uc3QgY2hhciogZGlyKTsKKyAgYm9vbCBMb2FkUGFja2FnZXMoc3RkOjpzdHJpbmcgY29uc3QmIGRpcik7CiAgIC8vIGluaXRpYWxpemUgdGhlIGNvdmVyYWdlIGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBtdW1wcyBmaWxlCiAgIHZvaWQgSW5pdGlhbGl6ZU11bXBzRmlsZShzdGQ6OnN0cmluZyYgZmlsZSk7CiAgIC8vIEZpbmQgbXVtcHMgZmlsZSBmb3Igcm91dGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VQSFBDb3ZlcmFnZS5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZVBIUENvdmVyYWdlLmN4eAppbmRleCBhNDk0YjkyLi4wNDRmNTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZVBIUENvdmVyYWdlLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZVBIUENvdmVyYWdlLmN4eApAQCAtMyw2ICszLDggQEAKICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCkBAIC0xNDIsMTcgKzE0NCwxNSBAQAogICBpbnQgc2l6ZSA9IDA7CiAgIGlmICh0aGlzLT5SZWFkSW50KGluLCBzaXplKSkgewogICAgIHNpemUrKzsgLy8gYWRkIG9uZSBmb3IgbnVsbCB0ZXJtaW5hdGlvbgotICAgIGNoYXIqIHMgPSBuZXcgY2hhcltzaXplICsgMV07CisgICAgYXV0byBzID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4oc2l6ZSArIDEpOwogICAgIC8vIHJlYWQgb3BlbiBxdW90ZQogICAgIGlmIChpbi5nZXQoYykgJiYgYyAhPSAnIicpIHsKLSAgICAgIGRlbGV0ZVtdIHM7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIHJlYWQgdGhlIHN0cmluZyBkYXRhCi0gICAgaW4ucmVhZChzLCBzaXplIC0gMSk7CisgICAgaW4ucmVhZChzLmdldCgpLCBzaXplIC0gMSk7CiAgICAgc1tzaXplIC0gMV0gPSAwOwotICAgIHN0ZDo6c3RyaW5nIGZpbGVOYW1lID0gczsKLSAgICBkZWxldGVbXSBzOworICAgIHN0ZDo6c3RyaW5nIGZpbGVOYW1lID0gcy5nZXQoKTsKICAgICAvLyByZWFkIGNsb3NlIHF1b3RlCiAgICAgaWYgKGluLmdldChjKSAmJiBjICE9ICciJykgewogICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuY3h4IGIvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5jeHgKaW5kZXggODdmNzE0Ny4uMjc0MmZkNyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5jeHgKQEAgLTUsMTAgKzUsMTIgQEAKICNpbmNsdWRlIDxjc2lnbmFsPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvUHJvY2Vzcy5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RSdW5UZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFRlc3RIYW5kbGVyLmgiCkBAIC0xNywxMiArMTksMTEgQEAKICNpZiBkZWZpbmVkKF9XSU4zMikKICMgIGluY2x1ZGUgImNtX2t3aW1sLmgiCiAjZW5kaWYKLSNpbmNsdWRlIDx1dGlsaXR5PgogCiAjZGVmaW5lIENNX1BST0NFU1NfQlVGX1NJWkUgNjU1MzYKIAotY21Qcm9jZXNzOjpjbVByb2Nlc3MoY21DVGVzdFJ1blRlc3QmIHJ1bm5lcikKLSAgOiBSdW5uZXIocnVubmVyKQorY21Qcm9jZXNzOjpjbVByb2Nlc3Moc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIpCisgIDogUnVubmVyKHN0ZDo6bW92ZShydW5uZXIpKQogICAsIENvbnYoY21Qcm9jZXNzT3V0cHV0OjpVVEY4LCBDTV9QUk9DRVNTX0JVRl9TSVpFKQogewogICB0aGlzLT5UaW1lb3V0ID0gY21EdXJhdGlvbjo6emVybygpOwpAQCAtNjgsNyArNjksNyBAQAogICBjbTo6dXZfdGltZXJfcHRyIHRpbWVyOwogICBpbnQgc3RhdHVzID0gdGltZXIuaW5pdChsb29wLCB0aGlzKTsKICAgaWYgKHN0YXR1cyAhPSAwKSB7Ci0gICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXIuR2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKKyAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci0+R2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJFcnJvciBpbml0aWFsaXppbmcgdGltZXI6ICIgPDwgdXZfc3RyZXJyb3Ioc3RhdHVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTgzLDcgKzg0LDcgQEAKICAgaW50IGZkc1syXSA9IHsgLTEsIC0xIH07CiAgIHN0YXR1cyA9IGNtR2V0UGlwZXMoZmRzKTsKICAgaWYgKHN0YXR1cyAhPSAwKSB7Ci0gICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXIuR2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKKyAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci0+R2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJFcnJvciBpbml0aWFsaXppbmcgcGlwZTogIiA8PCB1dl9zdHJlcnJvcihzdGF0dXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICB1dl9yZWFkX3N0YXJ0KHBpcGVfcmVhZGVyLCAmY21Qcm9jZXNzOjpPbkFsbG9jYXRlQ0IsICZjbVByb2Nlc3M6Ok9uUmVhZENCKTsKIAogICBpZiAoc3RhdHVzICE9IDApIHsKLSAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAorICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLT5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIkVycm9yIHN0YXJ0aW5nIHJlYWQgZXZlbnRzOiAiIDw8IHV2X3N0cmVycm9yKHN0YXR1cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEzNCw3ICsxMzUsNyBAQAogCiAgIHN0YXR1cyA9IHRoaXMtPlByb2Nlc3Muc3Bhd24obG9vcCwgb3B0aW9ucywgdGhpcyk7CiAgIGlmIChzdGF0dXMgIT0gMCkgewotICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCisgICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXItPkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAiUHJvY2VzcyBub3Qgc3RhcnRlZFxuICIgPDwgdGhpcy0+Q29tbWFuZCA8PCAiXG5bIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHV2X3N0cmVycm9yKHN0YXR1cykgPDwgIl1cbiIpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1MSw3ICsxNTIsNyBAQAogCiB2b2lkIGNtUHJvY2Vzczo6U3RhcnRUaW1lcigpCiB7Ci0gIGF1dG8gcHJvcGVydGllcyA9IHRoaXMtPlJ1bm5lci5HZXRUZXN0UHJvcGVydGllcygpOworICBhdXRvIHByb3BlcnRpZXMgPSB0aGlzLT5SdW5uZXItPkdldFRlc3RQcm9wZXJ0aWVzKCk7CiAgIGF1dG8gbXNlYyA9CiAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4odGhpcy0+VGltZW91dCk7CiAKQEAgLTIxOCwxMCArMjE5LDEwIEBACiAgIGlmIChucmVhZCA+IDApIHsKICAgICBzdGQ6OnN0cmluZyBzdHJkYXRhOwogICAgIHRoaXMtPkNvbnYuRGVjb2RlVGV4dChidWYtPmJhc2UsIHN0YXRpY19jYXN0PHNpemVfdD4obnJlYWQpLCBzdHJkYXRhKTsKLSAgICBjbUFwcGVuZCh0aGlzLT5PdXRwdXQsIHN0cmRhdGEpOworICAgIGNtOjphcHBlbmQodGhpcy0+T3V0cHV0LCBzdHJkYXRhKTsKIAogICAgIHdoaWxlICh0aGlzLT5PdXRwdXQuR2V0TGluZShsaW5lKSkgewotICAgICAgdGhpcy0+UnVubmVyLkNoZWNrT3V0cHV0KGxpbmUpOworICAgICAgdGhpcy0+UnVubmVyLT5DaGVja091dHB1dChsaW5lKTsKICAgICAgIGxpbmUuY2xlYXIoKTsKICAgICB9CiAKQEAgLTIzNSwyMCArMjM2LDIwIEBACiAgIC8vIFRoZSBwcm9jZXNzIHdpbGwgcHJvdmlkZSBubyBtb3JlIGRhdGEuCiAgIGlmIChucmVhZCAhPSBVVl9FT0YpIHsKICAgICBhdXRvIGVycm9yID0gc3RhdGljX2Nhc3Q8aW50PihucmVhZCk7Ci0gICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXIuR2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKKyAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci0+R2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJFcnJvciByZWFkaW5nIHN0cmVhbTogIiA8PCB1dl9zdHJlcnJvcihlcnJvcikgPDwgc3RkOjplbmRsKTsKICAgfQogCiAgIC8vIExvb2sgZm9yIHBhcnRpYWwgbGFzdCBsaW5lcy4KICAgaWYgKHRoaXMtPk91dHB1dC5HZXRMYXN0KGxpbmUpKSB7Ci0gICAgdGhpcy0+UnVubmVyLkNoZWNrT3V0cHV0KGxpbmUpOworICAgIHRoaXMtPlJ1bm5lci0+Q2hlY2tPdXRwdXQobGluZSk7CiAgIH0KIAogICB0aGlzLT5SZWFkSGFuZGxlQ2xvc2VkID0gdHJ1ZTsKICAgdGhpcy0+UGlwZVJlYWRlci5yZXNldCgpOwogICBpZiAodGhpcy0+UHJvY2Vzc0hhbmRsZUNsb3NlZCkgewogICAgIHV2X3RpbWVyX3N0b3AodGhpcy0+VGltZXIpOwotICAgIHRoaXMtPlJ1bm5lci5GaW5hbGl6ZVRlc3QoKTsKKyAgICB0aGlzLT5GaW5pc2goKTsKICAgfQogfQogCkBAIC0yNzcsOSArMjc4LDYgQEAKIAogdm9pZCBjbVByb2Nlc3M6Ok9uVGltZW91dCgpCiB7Ci0gIGlmICh0aGlzLT5Qcm9jZXNzU3RhdGUgIT0gY21Qcm9jZXNzOjpTdGF0ZTo6RXhlY3V0aW5nKSB7Ci0gICAgcmV0dXJuOwotICB9CiAgIHRoaXMtPlByb2Nlc3NTdGF0ZSA9IGNtUHJvY2Vzczo6U3RhdGU6OkV4cGlyZWQ7CiAgIGJvb2wgY29uc3Qgd2FzX3N0aWxsX3JlYWRpbmcgPSAhdGhpcy0+UmVhZEhhbmRsZUNsb3NlZDsKICAgaWYgKCF0aGlzLT5SZWFkSGFuZGxlQ2xvc2VkKSB7CkBAIC0yOTMsNyArMjkxLDcgQEAKICAgICAvLyBPdXIgb24tZXhpdCBoYW5kbGVyIGFscmVhZHkgcmFuIGJ1dCBkaWQgbm90IGZpbmlzaCB0aGUgdGVzdAogICAgIC8vIGJlY2F1c2Ugd2Ugd2VyZSBzdGlsbCByZWFkaW5nIG91dHB1dC4gIFdlJ3ZlIGp1c3QgZHJvcHBlZAogICAgIC8vIG91ciByZWFkIGhhbmRsZXIsIHNvIHdlIG5lZWQgdG8gZmluaXNoIHRoZSB0ZXN0IG5vdy4KLSAgICB0aGlzLT5SdW5uZXIuRmluYWxpemVUZXN0KCk7CisgICAgdGhpcy0+RmluaXNoKCk7CiAgIH0KIH0KIApAQCAtMzIzLDYgKzMyMSwxNiBAQAogICAvLyBSZWNvcmQgZXhpdCBpbmZvcm1hdGlvbi4KICAgdGhpcy0+RXhpdFZhbHVlID0gZXhpdF9zdGF0dXM7CiAgIHRoaXMtPlNpZ25hbCA9IHRlcm1fc2lnbmFsOworCisgIHRoaXMtPlByb2Nlc3NIYW5kbGVDbG9zZWQgPSB0cnVlOworICBpZiAodGhpcy0+UmVhZEhhbmRsZUNsb3NlZCkgeworICAgIHV2X3RpbWVyX3N0b3AodGhpcy0+VGltZXIpOworICAgIHRoaXMtPkZpbmlzaCgpOworICB9Cit9CisKK3ZvaWQgY21Qcm9jZXNzOjpGaW5pc2goKQorewogICB0aGlzLT5Ub3RhbFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSAtIHRoaXMtPlN0YXJ0VGltZTsKICAgLy8gQmVjYXVzZSBvZiBhIHByb2Nlc3NvciBjbG9jayBzY2V3IHRoZSBydW50aW1lIG1heSBiZWNvbWUgc2xpZ2h0bHkKICAgLy8gbmVnYXRpdmUuIElmIHNvbWVvbmUgY2hhbmdlZCB0aGUgc3lzdGVtIGNsb2NrIHdoaWxlIHRoZSBwcm9jZXNzIHdhcwpAQCAtMzMxLDEyICszMzksNyBAQAogICBpZiAodGhpcy0+VG90YWxUaW1lIDw9IGNtRHVyYXRpb246Onplcm8oKSkgewogICAgIHRoaXMtPlRvdGFsVGltZSA9IGNtRHVyYXRpb246Onplcm8oKTsKICAgfQotCi0gIHRoaXMtPlByb2Nlc3NIYW5kbGVDbG9zZWQgPSB0cnVlOwotICBpZiAodGhpcy0+UmVhZEhhbmRsZUNsb3NlZCkgewotICAgIHV2X3RpbWVyX3N0b3AodGhpcy0+VGltZXIpOwotICAgIHRoaXMtPlJ1bm5lci5GaW5hbGl6ZVRlc3QoKTsKLSAgfQorICB0aGlzLT5SdW5uZXItPkZpbmFsaXplVGVzdCgpOwogfQogCiBjbVByb2Nlc3M6OlN0YXRlIGNtUHJvY2Vzczo6R2V0UHJvY2Vzc1N0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmggYi9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmgKaW5kZXggMmMyNGYyZC4uNTI2YzkyMCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuaApAQCAtNiw3ICs2LDkgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KQEAgLTI4LDcgKzMwLDcgQEAKIGNsYXNzIGNtUHJvY2VzcwogewogcHVibGljOgotICBleHBsaWNpdCBjbVByb2Nlc3MoY21DVGVzdFJ1blRlc3QmIHJ1bm5lcik7CisgIGV4cGxpY2l0IGNtUHJvY2VzcyhzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lcik7CiAgIH5jbVByb2Nlc3MoKTsKICAgdm9pZCBTZXRDb21tYW5kKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21tYW5kKTsKICAgdm9pZCBTZXRDb21tYW5kQXJndW1lbnRzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJnKTsKQEAgLTcwLDYgKzcyLDExIEBACiAgIEV4Y2VwdGlvbiBHZXRFeGl0RXhjZXB0aW9uKCk7CiAgIHN0ZDo6c3RyaW5nIEdldEV4aXRFeGNlcHRpb25TdHJpbmcoKTsKIAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IEdldFJ1bm5lcigpCisgIHsKKyAgICByZXR1cm4gc3RkOjptb3ZlKHRoaXMtPlJ1bm5lcik7CisgIH0KKwogcHJpdmF0ZToKICAgY21EdXJhdGlvbiBUaW1lb3V0OwogICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IFN0YXJ0VGltZTsKQEAgLTgyLDcgKzg5LDcgQEAKICAgY206OnV2X3RpbWVyX3B0ciBUaW1lcjsKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gQnVmOwogCi0gIGNtQ1Rlc3RSdW5UZXN0JiBSdW5uZXI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gUnVubmVyOwogICBjbVByb2Nlc3NPdXRwdXQgQ29udjsKICAgaW50IFNpZ25hbCA9IDA7CiAgIGNtUHJvY2Vzczo6U3RhdGUgUHJvY2Vzc1N0YXRlID0gY21Qcm9jZXNzOjpTdGF0ZTo6U3RhcnRpbmc7CkBAIC0xMDEsNiArMTA4LDcgQEAKICAgdm9pZCBPbkFsbG9jYXRlKHNpemVfdCBzdWdnZXN0ZWRfc2l6ZSwgdXZfYnVmX3QqIGJ1Zik7CiAKICAgdm9pZCBTdGFydFRpbWVyKCk7CisgIHZvaWQgRmluaXNoKCk7CiAKICAgY2xhc3MgQnVmZmVyIDogcHVibGljIHN0ZDo6dmVjdG9yPGNoYXI+CiAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DaGVja3MvQ3Vyc2VzLmNtYWtlIGIvU291cmNlL0NoZWNrcy9DdXJzZXMuY21ha2UKaW5kZXggMjk0MmI2Ni4uZDM1ZGQyYSAxMDA2NDQKLS0tIGEvU291cmNlL0NoZWNrcy9DdXJzZXMuY21ha2UKKysrIGIvU291cmNlL0NoZWNrcy9DdXJzZXMuY21ha2UKQEAgLTEsNCArMSw3IEBACi1tZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgZm9yIGN1cnNlcyBzdXBwb3J0IikKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UpCitjbV9tZXNzYWdlX2NoZWNrc19jb21wYXQoCisgICJDaGVja2luZyBmb3IgY3Vyc2VzIHN1cHBvcnQiIF9fY2hlY2tTdGFydCBfX2NoZWNrUGFzcyBfX2NoZWNrRmFpbCkKK21lc3NhZ2UoJHtfX2NoZWNrU3RhcnR9KQogCiAjIFRyeSBjb21waWxpbmcgYSBzaW1wbGUgcHJvamVjdCB1c2luZyBjdXJzZXMuCiAjIFBhc3MgaW4gYW55IGNhY2hlIGVudHJpZXMgdGhhdCB0aGUgdXNlciBtYXkgaGF2ZSBzZXQuCkBAIC0zMSwxMSArMzQsMTEgQEAKIHVuc2V0KENNYWtlQ2hlY2tDdXJzZXNfQ09NUElMRUQgQ0FDSEUpCiAKIGlmKENNYWtlQ2hlY2tDdXJzZXNfQ09NUElMRUQpCi0gIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBmb3IgY3Vyc2VzIHN1cHBvcnQgLSBTdWNjZXNzIikKKyAgbWVzc2FnZSgke19fY2hlY2tQYXNzfSAiU3VjY2VzcyIpCiAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgIkNoZWNraW5nIGZvciBjdXJzZXMgc3VwcG9ydCBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7Q01ha2VDaGVja0N1cnNlc19PVVRQVVR9XG5cbiIpCiBlbHNlKCkKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGZvciBjdXJzZXMgc3VwcG9ydCAtIEZhaWxlZCIpCisgIG1lc3NhZ2UoJHtfX2NoZWNrRmFpbH0gIkZhaWxlZCIpCiAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAiQ2hlY2tpbmcgZm9yIGN1cnNlcyBzdXBwb3J0IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtDTWFrZUNoZWNrQ3Vyc2VzX09VVFBVVH1cblxuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DaGVja3MvY21fYzExX3RocmVhZF9sb2NhbC5jbWFrZSBiL1NvdXJjZS9DaGVja3MvY21fYzExX3RocmVhZF9sb2NhbC5jbWFrZQppbmRleCA2YjhkMTBiLi4yMjYzYmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ2hlY2tzL2NtX2MxMV90aHJlYWRfbG9jYWwuY21ha2UKKysrIGIvU291cmNlL0NoZWNrcy9jbV9jMTFfdGhyZWFkX2xvY2FsLmNtYWtlCkBAIC0xLDcgKzEsMTEgQEAKIHNldChDTWFrZV9DMTFfVEhSRUFEX0xPQ0FMX0JST0tFTiAwKQogaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVSIgQU5EIENNQUtFX0MxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTikKICAgaWYoTk9UIERFRklORUQgQ01ha2VfQzExX1RIUkVBRF9MT0NBTF9XT1JLUykKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzExIF9UaHJlYWRfbG9jYWwiKQorICAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UpCisgICAgY21fbWVzc2FnZV9jaGVja3NfY29tcGF0KAorICAgICAgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMxMSBfVGhyZWFkX2xvY2FsIgorICAgICAgX19jaGVja1N0YXJ0IF9fY2hlY2tQYXNzIF9fY2hlY2tGYWlsKQorICAgIG1lc3NhZ2UoJHtfX2NoZWNrU3RhcnR9KQogICAgIHRyeV9jb21waWxlKENNYWtlX0MxMV9USFJFQURfTE9DQUxfV09SS1MKICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jbV9jMTFfdGhyZWFkX2xvY2FsLmMKQEAgLTEyLDE0ICsxNiwxNCBAQAogICAgICAgc2V0X3Byb3BlcnR5KENBQ0hFIENNYWtlX0MxMV9USFJFQURfTE9DQUxfV09SS1MgUFJPUEVSVFkgVkFMVUUgMCkKICAgICBlbmRpZigpCiAgICAgaWYoQ01ha2VfQzExX1RIUkVBRF9MT0NBTF9XT1JLUykKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBDMTEgX1RocmVhZF9sb2NhbCAtIHllcyIpCisgICAgICBtZXNzYWdlKCR7X19jaGVja1Bhc3N9ICJ5ZXMiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMxMSBfVGhyZWFkX2xvY2FsIHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICAiJHtPVVRQVVR9XG4iCiAgICAgICAgICJcbiIKICAgICAgICAgKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMxMSBfVGhyZWFkX2xvY2FsIC0gbm8iKQorICAgICAgbWVzc2FnZSgke19fY2hlY2tGYWlsfSAibm8iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzExIF9UaHJlYWRfbG9jYWwgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DaGVja3MvY21fY3h4MTRfY2hlY2suY21ha2UgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE0X2NoZWNrLmNtYWtlCmluZGV4IDM4NjA2YjkuLmU1NjU2YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DaGVja3MvY21fY3h4MTRfY2hlY2suY21ha2UKKysrIGIvU291cmNlL0NoZWNrcy9jbV9jeHgxNF9jaGVjay5jbWFrZQpAQCAtMSwxMCArMSwxNCBAQAogc2V0KENNYWtlX0NYWDE0X0JST0tFTiAwKQotaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVXxDbGFuZ3xQR0kiKQoraWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVXxDbGFuZ3xQR0l8SW50ZWwiKQogICBpZihOT1QgQ01BS0VfQ1hYMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04pCiAgICAgc2V0KENNYWtlX0NYWDE0X1dPUktTIDApCiAgIGVuZGlmKCkKICAgaWYoTk9UIERFRklORUQgQ01ha2VfQ1hYMTRfV09SS1MpCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNCBjb25zdHJ1Y3RzIikKKyAgICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY21fbWVzc2FnZV9jaGVja3NfY29tcGF0LmNtYWtlKQorICAgIGNtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdCgKKyAgICAgICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTQgY29uc3RydWN0cyIKKyAgICAgIF9fY2hlY2tTdGFydCBfX2NoZWNrUGFzcyBfX2NoZWNrRmFpbCkKKyAgICBtZXNzYWdlKCR7X19jaGVja1N0YXJ0fSkKICAgICB0cnlfY29tcGlsZShDTWFrZV9DWFgxNF9XT1JLUwogICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NtX2N4eDE0X2NoZWNrLmNwcApAQCAtMTUsMTQgKzE5LDE0IEBACiAgICAgICBzZXRfcHJvcGVydHkoQ0FDSEUgQ01ha2VfQ1hYMTRfV09SS1MgUFJPUEVSVFkgVkFMVUUgMCkKICAgICBlbmRpZigpCiAgICAgaWYoQ01ha2VfQ1hYMTRfV09SS1MpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE0IGNvbnN0cnVjdHMgLSB5ZXMiKQorICAgICAgbWVzc2FnZSgke19fY2hlY2tQYXNzfSAieWVzIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTQgY29uc3RydWN0cyBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuIgogICAgICAgICAiXG4iCiAgICAgICAgICkKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTQgY29uc3RydWN0cyAtIG5vIikKKyAgICAgIG1lc3NhZ2UoJHtfX2NoZWNrRmFpbH0gIm5vIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNCBjb25zdHJ1Y3RzIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICAiJHtPVVRQVVR9XG4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNtYWtlIGIvU291cmNlL0NoZWNrcy9jbV9jeHgxN19jaGVjay5jbWFrZQppbmRleCA0ZGEyZmQ3Li5kYmEzZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNtYWtlCisrKyBiL1NvdXJjZS9DaGVja3MvY21fY3h4MTdfY2hlY2suY21ha2UKQEAgLTEsMTAgKzEsMTQgQEAKIHNldChDTWFrZV9DWFgxN19CUk9LRU4gMCkKLWlmKENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJHTlV8Q2xhbmd8UEdJIikKK2lmKENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJHTlV8Q2xhbmd8UEdJfEludGVsIikKICAgaWYoTk9UIENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQogICAgIHNldChDTWFrZV9DWFgxN19XT1JLUyAwKQogICBlbmRpZigpCiAgIGlmKE5PVCBERUZJTkVEIENNYWtlX0NYWDE3X1dPUktTKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTcgY29uc3RydWN0cyIpCisgICAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdC5jbWFrZSkKKyAgICBjbV9tZXNzYWdlX2NoZWNrc19jb21wYXQoCisgICAgICAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE3IGNvbnN0cnVjdHMiCisgICAgICBfX2NoZWNrU3RhcnQgX19jaGVja1Bhc3MgX19jaGVja0ZhaWwpCisgICAgbWVzc2FnZSgke19fY2hlY2tTdGFydH0pCiAgICAgdHJ5X2NvbXBpbGUoQ01ha2VfQ1hYMTdfV09SS1MKICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jbV9jeHgxN19jaGVjay5jcHAKQEAgLTE1LDE0ICsxOSwxNCBAQAogICAgICAgc2V0X3Byb3BlcnR5KENBQ0hFIENNYWtlX0NYWDE3X1dPUktTIFBST1BFUlRZIFZBTFVFIDApCiAgICAgZW5kaWYoKQogICAgIGlmKENNYWtlX0NYWDE3X1dPUktTKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNyBjb25zdHJ1Y3RzIC0geWVzIikKKyAgICAgIG1lc3NhZ2UoJHtfX2NoZWNrUGFzc30gInllcyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE3IGNvbnN0cnVjdHMgcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cbiIKICAgICAgICAgIlxuIgogICAgICAgICApCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE3IGNvbnN0cnVjdHMgLSBubyIpCisgICAgICBtZXNzYWdlKCR7X19jaGVja0ZhaWx9ICJubyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTcgY29uc3RydWN0cyBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NoZWNrcy9jbV9jeHgxN19jaGVjay5jcHAgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNwcAppbmRleCAyOTg2M2IxLi5hYmJlMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNwcAorKysgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNwcApAQCAtOCw2ICs4LDEzIEBACiAjICBpbmNsdWRlIDxjb21kZWYuaD4KICNlbmRpZgogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKKyAgICAgICAgICB0eXBlbmFtZSBzdGQ6Omludm9rZV9yZXN1bHQ8ZGVjbHR5cGUoJlQ6OmdldCksIFQ+Ojp0eXBlID0gbnVsbHB0cj4KK3R5cGVuYW1lIFQ6OnBvaW50ZXIgZ2V0X3B0cihUJiBpdGVtKQoreworICByZXR1cm4gaXRlbS5nZXQoKTsKK30KKwogaW50IG1haW4oKQogewogICBpbnQgYVtdID0geyAwLCAxLCAyIH07CkBAIC0yMCw2ICsyNyw5IEBACiAKICAgc3RkOjp1bmlxdWVfcHRyPGludD4gdShuZXcgaW50KDApKTsKIAorICAvLyBJbnRlbCBjb21waWxlciBkbyBub3QgaGFuZGxlIGNvcnJlY3RseSAnZGVjbHR5cGUnIGluc2lkZSAnaW52b2tlX3Jlc3VsdCcKKyAgZ2V0X3B0cih1KTsKKwogI2lmZGVmIF9NU0NfVkVSCiAgIC8vIGNsYW5nLWNsIGhhcyBwcm9ibGVtcyBpbnN0YW50aWF0aW5nIHRoaXMgY29uc3RydWN0b3IgaW4gQysrMTcgbW9kZQogICAvLyAgZXJyb3I6IGluZGlyZWN0aW9uIHJlcXVpcmVzIHBvaW50ZXIgb3BlcmFuZCAoJ2NvbnN0IF9HVUlEJyBpbnZhbGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0NoZWNrcy9jbV9jeHhfZmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9mZWF0dXJlcy5jbWFrZQppbmRleCBmYjY4ZWQ3Li5jMTYyODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9mZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9mZWF0dXJlcy5jbWFrZQpAQCAtMSw4ICsxLDEyIEBACitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY21fbWVzc2FnZV9jaGVja3NfY29tcGF0LmNtYWtlKQogCiBmdW5jdGlvbihjbV9jaGVja19jeHhfZmVhdHVyZSBuYW1lKQogICBzdHJpbmcoVE9VUFBFUiAke25hbWV9IEZFQVRVUkUpCiAgIGlmKE5PVCBERUZJTkVEIENNYWtlX0hBVkVfQ1hYXyR7RkVBVFVSRX0pCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMrKyAke25hbWV9IikKKyAgICBjbV9tZXNzYWdlX2NoZWNrc19jb21wYXQoCisgICAgICAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQysrICR7bmFtZX0iCisgICAgICBfX2NoZWNrU3RhcnQgX19jaGVja1Bhc3MgX19jaGVja0ZhaWwpCisgICAgbWVzc2FnZSgke19fY2hlY2tTdGFydH0pCiAgICAgaWYoQ01BS0VfQ1hYX1NUQU5EQVJEKQogICAgICAgc2V0KG1heWJlX2N4eF9zdGFuZGFyZCAtRENNQUtFX0NYWF9TVEFOREFSRD0ke0NNQUtFX0NYWF9TVEFOREFSRH0pCiAgICAgZWxzZSgpCkBAIC0yNiwxOSArMzAsMjMgQEAKICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cbl0qd2FybmluZzpbXlxuXSpzcHJpbnRmXFwoXFwpIGlzIG9mdGVuIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc25wcmludGZbXlxuXSoiICIiIGNoZWNrX291dHB1dCAiJHtjaGVja19vdXRwdXR9IikKICAgICAjIEZpbHRlciBvdXQgeGNvZGVidWlsZCB3YXJuaW5ncy4KICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cbl0qIHhjb2RlYnVpbGRcXFtbMC05XSo6WzAtOV0qXFxdIHdhcm5pbmc6IFteXG5dKiIgIiIgY2hlY2tfb3V0cHV0ICIke2NoZWNrX291dHB1dH0iKQorICAgICMgRmlsdGVyIG91dCBsZCB3YXJuaW5ncy4KKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cbl0qbGQ6IHdhcm5pbmc6IFteXG5dKiIgIiIgY2hlY2tfb3V0cHV0ICIke2NoZWNrX291dHB1dH0iKQorICAgICMgRmlsdGVyIG91dCBDVURBIGluc3RhbGxhdGlvbiB3YXJuaW5ncy4KKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cbl0qY2xhbmc6IHdhcm5pbmc6IFVua25vd24gQ1VEQSB2ZXJzaW9uW15cbl0qIiAiIiBjaGVja19vdXRwdXQgIiR7Y2hlY2tfb3V0cHV0fSIpCiAgICAgIyBJZiB1c2luZyB0aGUgZmVhdHVyZSBjYXVzZXMgd2FybmluZ3MsIHRyZWF0IGl0IGFzIGJyb2tlbi91bmF2YWlsYWJsZS4KICAgICBpZihjaGVja19vdXRwdXQgTUFUQ0hFUyAiKF58WyA6XSlbV3ddW0FhXVtScl1bTm5dW0lpXVtObl1bR2ddIikKICAgICAgIHNldChDTWFrZV9IQVZFX0NYWF8ke0ZFQVRVUkV9IE9GRiBDQUNIRSBJTlRFUk5BTCAiVFJZX0NPTVBJTEUiIEZPUkNFKQogICAgIGVuZGlmKCkKICAgICBpZihDTWFrZV9IQVZFX0NYWF8ke0ZFQVRVUkV9KQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMrKyAke25hbWV9IC0geWVzIikKKyAgICAgIG1lc3NhZ2UoJHtfX2NoZWNrUGFzc30gInllcyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQysrICR7bmFtZX0gcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cbiIKICAgICAgICAgIlxuIgogICAgICAgICApCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQysrICR7bmFtZX0gLSBubyIpCisgICAgICBtZXNzYWdlKCR7X19jaGVja0ZhaWx9ICJubyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBjb21waWxlciBzdXBwb3J0cyBDKysgJHtuYW1lfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NoZWNrcy9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UgYi9Tb3VyY2UvQ2hlY2tzL2NtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRjMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0NoZWNrcy9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UKQEAgLTAsMCArMSwxMyBAQAorIyBTdXBwb3J0aW5nIHVzaW5nIHRoZSBDSEVDS18uLi4gbWVzc2FnZSBtb2RlcyBpZiBhdmFpbGFibGUKKyMgYW5kIGZhbGwgYmFjayB0byB0aGUgb2xkZXIgYmVoYXZpb3IgaWYgbm90CittYWNybyhjbV9tZXNzYWdlX2NoZWNrc19jb21wYXQgZGVzY3JpcHRpb24gc3RhcnRWYXIgcGFzc1ZhciBmYWlsVmFyKQorICBpZihDTUFLRV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiAzLjE2LjIwMTkpCisgICAgc2V0KCR7c3RhcnRWYXJ9IENIRUNLX1NUQVJUICIke2Rlc2NyaXB0aW9ufSIpCisgICAgc2V0KCR7cGFzc1Zhcn0gIENIRUNLX1BBU1MpCisgICAgc2V0KCR7ZmFpbFZhcn0gIENIRUNLX0ZBSUwpCisgIGVsc2UoKQorICAgIHNldCgke3N0YXJ0VmFyfSBTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKKyAgICBzZXQoJHtwYXNzVmFyfSAgU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtICIpCisgICAgc2V0KCR7ZmFpbFZhcn0gIFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSAiKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0N1cnNlc0RpYWxvZy9DTWFrZUxpc3RzLnR4dAppbmRleCA3MDA5NzE3Li5jMjRlZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvQ01ha2VMaXN0cy50eHQKQEAgLTUsNiArNSw3IEBACiAgIGNjbWFrZS5jeHgKICAgY21DdXJzZXNCb29sV2lkZ2V0LmN4eAogICBjbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuY3h4CisgIGNtQ3Vyc2VzQ29sb3IuY3h4CiAgIGNtQ3Vyc2VzRHVtbXlXaWRnZXQuY3h4CiAgIGNtQ3Vyc2VzRmlsZVBhdGhXaWRnZXQuY3h4CiAgIGNtQ3Vyc2VzRm9ybS5jeHgKQEAgLTE3LDIxICsxOCw0NSBAQAogICBjbUN1cnNlc1dpZGdldC5jeHgKICAgKQogdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoY2NtYWtlIFBSSVZBVEUgJHtDVVJTRVNfSU5DTFVERV9QQVRIfSkKK3NldChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke0NVUlNFU19JTkNMVURFX1BBVEh9KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNjbWFrZSBDTWFrZUxpYikKIGlmKENNQUtFX1VTRV9TWVNURU1fRk9STSkKICAgZmluZF9wYXRoKENVUlNFU19GT1JNX0lOQ0xVREVfRElSIE5BTUVTIGZvcm0uaCBISU5UUyAke0NVUlNFU19JTkNMVURFX1BBVEh9ICR7Q1VSU0VTX0lOQ0xVREVfUEFUSH0vbmN1cnNlcykKICAgaWYoQ1VSU0VTX0ZPUk1fSU5DTFVERV9ESVIpCiAgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoY2NtYWtlIFBSSVZBVEUgJHtDVVJTRVNfRk9STV9JTkNMVURFX0RJUn0pCisgICAgbGlzdChBUFBFTkQgQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDVVJTRVNfRk9STV9JTkNMVURFX0RJUn0pCiAgIGVuZGlmKCkKICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNjbWFrZQogICAgICR7Q1VSU0VTX0ZPUk1fTElCUkFSWX0KICAgICAke0NVUlNFU19MSUJSQVJZfQogICApCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMKKyAgICAke0NVUlNFU19GT1JNX0xJQlJBUll9CisgICAgJHtDVVJTRVNfTElCUkFSWX0KKyAgKQogICBpZihDVVJTRVNfRVhUUkFfTElCUkFSWSkKICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoY2NtYWtlICR7Q1VSU0VTX0VYVFJBX0xJQlJBUll9KQorICAgIGxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke0NVUlNFU19FWFRSQV9MSUJSQVJZfSkKICAgZW5kaWYoKQogZWxzZSgpCiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhjY21ha2UgY21Gb3JtKQorICBnZXRfdGFyZ2V0X3Byb3BlcnR5KGNtRm9ybUluY2x1ZGVEaXJzIGNtRm9ybSBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgbGlzdChBUFBFTkQgQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtjbUZvcm1JbmNsdWRlRGlyc30pCisgIGdldF90YXJnZXRfcHJvcGVydHkoY21Gb3JtTGlicmFyaWVzIGNtRm9ybSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMpCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtjbUZvcm1MaWJyYXJpZXN9KQorZW5kaWYoKQorCitpbmNsdWRlKENoZWNrU3ltYm9sRXhpc3RzKQorY2hlY2tfc3ltYm9sX2V4aXN0cyh1c2VfZGVmYXVsdF9jb2xvcnMKKyAgImZvcm0uaCIKKyAgSEFWRV9DVVJTRVNfVVNFX0RFRkFVTFRfQ09MT1JTKQoraWYoSEFWRV9DVVJTRVNfVVNFX0RFRkFVTFRfQ09MT1JTKQorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoY21DdXJzZXNDb2xvci5jeHgKKyAgICBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgSEFWRV9DVVJTRVNfVVNFX0RFRkFVTFRfQ09MT1JTKQorZW5kaWYoKQorCitpZihDTWFrZV9KT0JfUE9PTF9MSU5LX0JJTikKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBjY21ha2UgUFJPUEVSVFkgSk9CX1BPT0xfTElOSyAibGluay1iaW4iKQogZW5kaWYoKQogCiBDTWFrZV9PUFRJT05BTF9DT01QT05FTlQoY2NtYWtlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jY21ha2UuY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jY21ha2UuY3h4CmluZGV4IDllOWRmYmQuLjlhMjZkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY2NtYWtlLmN4eAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NjbWFrZS5jeHgKQEAgLTksMTIgKzksMTQgQEAKIAogI2luY2x1ZGUgImNtc3lzL0VuY29kaW5nLmh4eCIKIAorI2luY2x1ZGUgImNtQ3Vyc2VzQ29sb3IuaCIKICNpbmNsdWRlICJjbUN1cnNlc0Zvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc01haW5Gb3JtLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNTdGFuZGFyZEluY2x1ZGVzLmgiCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlICJjbVN0YXRlLmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogI2luY2x1ZGUgImNtYWtlLmgiCiAKQEAgLTExMCw4ICsxMTIsOCBAQAogCiAgIHN0ZDo6c3RyaW5nIGNhY2hlRGlyID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKICAgZm9yIChpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICBzdGQ6OnN0cmluZyBhcmcgPSBhcmdzW2ldOwotICAgIGlmIChhcmcuZmluZCgiLUIiLCAwKSA9PSAwKSB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFyZyA9IGFyZ3NbaV07CisgICAgaWYgKGNtSGFzUHJlZml4KGFyZywgIi1CIikpIHsKICAgICAgIGNhY2hlRGlyID0gYXJnLnN1YnN0cigyKTsKICAgICB9CiAgIH0KQEAgLTEyNiw2ICsxMjgsNyBAQAogICBub2VjaG8oKTsgICAgICAgICAgICAgLyogRWNobyBvZmYgKi8KICAgY2JyZWFrKCk7ICAgICAgICAgICAgIC8qIG5sLSBvciBjciBub3QgbmVlZGVkICovCiAgIGtleXBhZChzdGRzY3IsIHRydWUpOyAvKiBVc2Uga2V5IHN5bWJvbHMgYXMgS0VZX0RPV04gKi8KKyAgY21DdXJzZXNDb2xvcjo6SW5pdENvbG9ycygpOwogCiAgIHNpZ25hbChTSUdXSU5DSCwgb25zaWcpOwogCkBAIC0xNTMsMTAgKzE1NiwyOCBAQAogICAgIHJldHVybiAxOwogICB9CiAKKyAgLyoKKyAgICogVGhlIG1lc3NhZ2UgaXMgc3RvcmVkIGluIGEgbGlzdCBieSB0aGUgZm9ybSB3aGljaCB3aWxsIGJlCisgICAqIGpvaW5lZCBieSAnXG4nIGJlZm9yZSBkaXNwbGF5LgorICAgKiBSZW1vdmluZyBhbnkgdHJhaWxpbmcgJ1xuJyBhdm9pZCBleHRyYSBlbXB0eSBsaW5lcyBpbiB0aGUgZmluYWwgcmVzdWx0cworICAgKi8KKyAgYXV0byBjbGVhbk1lc3NhZ2UgPSBbXShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgLT4gc3RkOjpzdHJpbmcgeworICAgIGF1dG8gbXNnID0gbWVzc2FnZTsKKyAgICBpZiAoIW1zZy5lbXB0eSgpICYmIG1zZy5iYWNrKCkgPT0gJ1xuJykgeworICAgICAgbXNnLnBvcF9iYWNrKCk7CisgICAgfQorICAgIHJldHVybiBtc2c7CisgIH07CiAgIGNtU3lzdGVtVG9vbHM6OlNldE1lc3NhZ2VDYWxsYmFjaygKLSAgICBbbXlmb3JtXShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSwgY29uc3QgY2hhciogdGl0bGUpIHsKLSAgICAgIG15Zm9ybS0+QWRkRXJyb3IobWVzc2FnZSwgdGl0bGUpOworICAgIFsmXShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSwgY29uc3QgY2hhciogdGl0bGUpIHsKKyAgICAgIG15Zm9ybS0+QWRkRXJyb3IoY2xlYW5NZXNzYWdlKG1lc3NhZ2UpLCB0aXRsZSk7CiAgICAgfSk7CisgIGNtU3lzdGVtVG9vbHM6OlNldFN0ZGVyckNhbGxiYWNrKFsmXShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgeworICAgIG15Zm9ybS0+QWRkRXJyb3IoY2xlYW5NZXNzYWdlKG1lc3NhZ2UpLCAiIik7CisgIH0pOworICBjbVN5c3RlbVRvb2xzOjpTZXRTdGRvdXRDYWxsYmFjayhbJl0oY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpIHsKKyAgICBteWZvcm0tPlVwZGF0ZVByb2dyZXNzKGNsZWFuTWVzc2FnZShtZXNzYWdlKSwgLTEpOworICB9KTsKIAogICBjbUN1cnNlc0Zvcm06OkN1cnJlbnRGb3JtID0gbXlmb3JtOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQm9vbFdpZGdldC5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQm9vbFdpZGdldC5jeHgKaW5kZXggOTdiMDgxMS4uYzRkYmVkOCAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0Jvb2xXaWRnZXQuY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNCb29sV2lkZ2V0LmN4eApAQCAtNCw2ICs0LDcgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAorI2luY2x1ZGUgImNtQ3Vyc2VzQ29sb3IuaCIKICNpbmNsdWRlICJjbUN1cnNlc1dpZGdldC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogCkBAIC0xMiw4ICsxMywxMCBAQAogICA6IGNtQ3Vyc2VzV2lkZ2V0KHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCkKIHsKICAgdGhpcy0+VHlwZSA9IGNtU3RhdGVFbnVtczo6Qk9PTDsKLSAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIEFfTk9STUFMKTsKLSAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIEFfU1RBTkRPVVQpOworICBpZiAoIWNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7CisgICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIEFfTk9STUFMKTsKKyAgICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQV9TVEFORE9VVCk7CisgIH0KICAgZmllbGRfb3B0c19vZmYodGhpcy0+RmllbGQsIE9fU1RBVElDKTsKICAgdGhpcy0+U2V0VmFsdWVBc0Jvb2woZmFsc2UpOwogfQpAQCAtNDIsOCArNDUsMTYgQEAKIHsKICAgaWYgKHZhbHVlKSB7CiAgICAgdGhpcy0+U2V0VmFsdWUoIk9OIik7CisgICAgaWYgKGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7CisgICAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpCb29sT24pKTsKKyAgICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OkJvb2xPbikpOworICAgIH0KICAgfSBlbHNlIHsKICAgICB0aGlzLT5TZXRWYWx1ZSgiT0ZGIik7CisgICAgaWYgKGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7CisgICAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpCb29sT2ZmKSk7CisgICAgICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpCb29sT2ZmKSk7CisgICAgfQogICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlLmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlLmN4eAppbmRleCA0ZDMxMzFiLi45MjUwZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZS5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuY3h4CkBAIC00OCw0MiArNDgsNDIgQEAKICAgICB0aGlzLT5Jc05ld0xhYmVsID0gY206Om1ha2VfdW5pcXVlPGNtQ3Vyc2VzTGFiZWxXaWRnZXQ+KDEsIDEsIDEsIDEsICIgIik7CiAgIH0KIAotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKKyAgY21Qcm9wIHZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOwogICBhc3NlcnQodmFsdWUpOwogICBzd2l0Y2ggKHN0YXRlLT5HZXRDYWNoZUVudHJ5VHlwZShrZXkpKSB7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkJPT0w6IHsKICAgICAgIGF1dG8gYncgPSBjbTo6bWFrZV91bmlxdWU8Y21DdXJzZXNCb29sV2lkZ2V0Pih0aGlzLT5FbnRyeVdpZHRoLCAxLCAxLCAxKTsKLSAgICAgIGJ3LT5TZXRWYWx1ZUFzQm9vbChjbUlzT24odmFsdWUpKTsKKyAgICAgIGJ3LT5TZXRWYWx1ZUFzQm9vbChjbUlzT24oKnZhbHVlKSk7CiAgICAgICB0aGlzLT5FbnRyeSA9IHN0ZDo6bW92ZShidyk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlBBVEg6IHsKICAgICAgIGF1dG8gcHcgPSBjbTo6bWFrZV91bmlxdWU8Y21DdXJzZXNQYXRoV2lkZ2V0Pih0aGlzLT5FbnRyeVdpZHRoLCAxLCAxLCAxKTsKLSAgICAgIHB3LT5TZXRTdHJpbmcodmFsdWUpOworICAgICAgcHctPlNldFN0cmluZygqdmFsdWUpOwogICAgICAgdGhpcy0+RW50cnkgPSBzdGQ6Om1vdmUocHcpOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpGSUxFUEFUSDogewogICAgICAgYXV0byBmcHcgPQogICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21DdXJzZXNGaWxlUGF0aFdpZGdldD4odGhpcy0+RW50cnlXaWR0aCwgMSwgMSwgMSk7Ci0gICAgICBmcHctPlNldFN0cmluZyh2YWx1ZSk7CisgICAgICBmcHctPlNldFN0cmluZygqdmFsdWUpOwogICAgICAgdGhpcy0+RW50cnkgPSBzdGQ6Om1vdmUoZnB3KTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RSSU5HOiB7Ci0gICAgICBjb25zdCBjaGFyKiBzdHJpbmdzUHJvcCA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCAiU1RSSU5HUyIpOworICAgICAgY21Qcm9wIHN0cmluZ3NQcm9wID0gc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksICJTVFJJTkdTIik7CiAgICAgICBpZiAoc3RyaW5nc1Byb3ApIHsKICAgICAgICAgYXV0byBvdyA9CiAgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtQ3Vyc2VzT3B0aW9uc1dpZGdldD4odGhpcy0+RW50cnlXaWR0aCwgMSwgMSwgMSk7Ci0gICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG9wdCA6IGNtRXhwYW5kZWRMaXN0KHN0cmluZ3NQcm9wKSkgeworICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHQgOiBjbUV4cGFuZGVkTGlzdCgqc3RyaW5nc1Byb3ApKSB7CiAgICAgICAgICAgb3ctPkFkZE9wdGlvbihvcHQpOwogICAgICAgICB9Ci0gICAgICAgIG93LT5TZXRPcHRpb24odmFsdWUpOworICAgICAgICBvdy0+U2V0T3B0aW9uKCp2YWx1ZSk7CiAgICAgICAgIHRoaXMtPkVudHJ5ID0gc3RkOjptb3ZlKG93KTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gc3cgPQogICAgICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUN1cnNlc1N0cmluZ1dpZGdldD4odGhpcy0+RW50cnlXaWR0aCwgMSwgMSwgMSk7Ci0gICAgICAgIHN3LT5TZXRTdHJpbmcodmFsdWUpOworICAgICAgICBzdy0+U2V0U3RyaW5nKCp2YWx1ZSk7CiAgICAgICAgIHRoaXMtPkVudHJ5ID0gc3RkOjptb3ZlKHN3KTsKICAgICAgIH0KICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxZDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5jeHgKQEAgLTAsMCArMSwyOSBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2luY2x1ZGUgImNtQ3Vyc2VzQ29sb3IuaCIKKworI2luY2x1ZGUgImNtQ3Vyc2VzU3RhbmRhcmRJbmNsdWRlcy5oIgorCitib29sIGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpCit7CisjaWZkZWYgSEFWRV9DVVJTRVNfVVNFX0RFRkFVTFRfQ09MT1JTCisgIHJldHVybiBoYXNfY29sb3JzKCk7CisjZWxzZQorICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBjbUN1cnNlc0NvbG9yOjpJbml0Q29sb3JzKCkKK3sKKyNpZmRlZiBIQVZFX0NVUlNFU19VU0VfREVGQVVMVF9DT0xPUlMKKyAgaWYgKEhhc0NvbG9ycygpKSB7CisgICAgc3RhcnRfY29sb3IoKTsKKyAgICB1c2VfZGVmYXVsdF9jb2xvcnMoKTsKKyAgICBpbml0X3BhaXIoY21DdXJzZXNDb2xvcjo6Qm9vbE9mZiwgQ09MT1JfUkVELCAtMSk7CisgICAgaW5pdF9wYWlyKGNtQ3Vyc2VzQ29sb3I6OkJvb2xPbiwgQ09MT1JfR1JFRU4sIC0xKTsKKyAgICBpbml0X3BhaXIoY21DdXJzZXNDb2xvcjo6U3RyaW5nLCBDT0xPUl9CTFVFLCAtMSk7CisgICAgaW5pdF9wYWlyKGNtQ3Vyc2VzQ29sb3I6OlBhdGgsIENPTE9SX1lFTExPVywgLTEpOworICAgIGluaXRfcGFpcihjbUN1cnNlc0NvbG9yOjpPcHRpb25zLCBDT0xPUl9NQUdFTlRBLCAtMSk7CisgIH0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGNhNTJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmgKQEAgLTAsMCArMSwyNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbUN1cnNlc0NvbG9yX2gKKyNkZWZpbmUgY21DdXJzZXNDb2xvcl9oCisKK2NsYXNzIGNtQ3Vyc2VzQ29sb3IKK3sKK3B1YmxpYzoKKyAgZW51bSBDb2xvcgorICB7CisgICAgLy8gRGVmYXVsdCBjb2xvciBpcyBwYWlyIDAKKyAgICBCb29sT2ZmID0gMSwKKyAgICBCb29sT24sCisgICAgU3RyaW5nLAorICAgIFBhdGgsCisgICAgT3B0aW9ucworICB9OworCisgIHN0YXRpYyBib29sIEhhc0NvbG9ycygpOworCisgIHN0YXRpYyB2b2lkIEluaXRDb2xvcnMoKTsKK307CisKKyNlbmRpZiAvLyBjbUN1cnNlc0NvbG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNMb25nTWVzc2FnZUZvcm0uY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5jeHgKaW5kZXggZTJkOGQwNi4uODA2ZTY2MyAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5jeHgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAiY21DdXJzZXNGb3JtLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNNYWluRm9ybS5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzU3RhbmRhcmRJbmNsdWRlcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtVmVyc2lvbi5oIgogCiBpbmxpbmUgaW50IGN0cmwoaW50IHopCkBAIC0xNiwxNCArMTcsMTIgQEAKIH0KIAogY21DdXJzZXNMb25nTWVzc2FnZUZvcm06OmNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIG1lc3NhZ2VzLCBjb25zdCBjaGFyKiB0aXRsZSkKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBtZXNzYWdlcywgY29uc3QgY2hhciogdGl0bGUsCisgIFNjcm9sbEJlaGF2aW9yIHNjcm9sbEJlaGF2aW9yKQorICA6IFNjcm9sbGluZyhzY3JvbGxCZWhhdmlvcikKIHsKICAgLy8gQXBwZW5kIGFsbCBtZXNzYWdlcyBpbnRvIG9uIGJpZyBzdHJpbmcKLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbWVzc2FnZSA6IG1lc3NhZ2VzKSB7Ci0gICAgdGhpcy0+TWVzc2FnZXMgKz0gbWVzc2FnZTsKLSAgICAvLyBBZGQgb25lIGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlCi0gICAgdGhpcy0+TWVzc2FnZXMgKz0gIlxuXG4iOwotICB9CisgIHRoaXMtPk1lc3NhZ2VzID0gY21Kb2luKG1lc3NhZ2VzLCAiXG4iKTsKICAgdGhpcy0+VGl0bGUgPSB0aXRsZTsKICAgdGhpcy0+RmllbGRzWzBdID0gbnVsbHB0cjsKICAgdGhpcy0+RmllbGRzWzFdID0gbnVsbHB0cjsKQEAgLTQ4LDcgKzQ3LDcgQEAKICAgICBzaXplID0gY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIIC0gMTsKICAgfQogICBzdHJuY3B5KGJhciwgdGhpcy0+VGl0bGUuY19zdHIoKSwgc2l6ZSk7Ci0gIGZvciAoc2l6ZV90IGkgPSBzaXplIC0gMTsgaSA8IGNtQ3Vyc2VzTWFpbkZvcm06Ok1BWF9XSURUSDsgaSsrKSB7CisgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpIDwgY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIOyBpKyspIHsKICAgICBiYXJbaV0gPSAnICc7CiAgIH0KICAgaW50IHdpZHRoOwpAQCAtODksNyArODgsNyBAQAogICAgIHJldHVybjsKICAgfQogICBjaGFyIGZpcnN0TGluZVs1MTJdOwotICBzcHJpbnRmKGZpcnN0TGluZSwgIlByZXNzIFtlXSB0byBleGl0IGhlbHAiKTsKKyAgc3ByaW50ZihmaXJzdExpbmUsICJQcmVzcyBbZV0gdG8gZXhpdCBzY3JlZW4iKTsKIAogICBjaGFyIGZtdF9zW10gPSAiJXMiOwogICBjdXJzZXNfbW92ZSh5IC0gMiwgMCk7CkBAIC0xMTIsOCArMTExLDYgQEAKIAogICBjb25zdCBjaGFyKiBtc2cgPSB0aGlzLT5NZXNzYWdlcy5jX3N0cigpOwogCi0gIGN1cnNlc19jbGVhcigpOwotCiAgIGlmICh0aGlzLT5GaWVsZHNbMF0pIHsKICAgICBmcmVlX2ZpZWxkKHRoaXMtPkZpZWxkc1swXSk7CiAgICAgdGhpcy0+RmllbGRzWzBdID0gbnVsbHB0cjsKQEAgLTEzNiwxMCArMTMzLDEzIEBACiAgICAgfQogICAgIGkrKzsKICAgfQotICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfQkVHX0ZJRUxEKTsKKyAgaWYgKHRoaXMtPlNjcm9sbGluZyA9PSBTY3JvbGxCZWhhdmlvcjo6U2Nyb2xsRG93bikgeworICAgIGZvcm1fZHJpdmVyKHRoaXMtPkZvcm0sIFJFUV9FTkRfRklFTEQpOworICB9IGVsc2UgeworICAgIGZvcm1fZHJpdmVyKHRoaXMtPkZvcm0sIFJFUV9CRUdfRklFTEQpOworICB9CiAKICAgdGhpcy0+VXBkYXRlU3RhdHVzQmFyKCk7Ci0gIHRoaXMtPlByaW50S2V5cygpOwogICB0b3VjaHdpbihzdGRzY3IpOwogICByZWZyZXNoKCk7CiB9CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgY2hhciBkZWJ1Z01lc3NhZ2VbMTI4XTsKIAogICBmb3IgKDs7KSB7CisgICAgdGhpcy0+UHJpbnRLZXlzKCk7CiAgICAgaW50IGtleSA9IGdldGNoKCk7CiAKICAgICBzcHJpbnRmKGRlYnVnTWVzc2FnZSwgIk1lc3NhZ2Ugd2lkZ2V0IGhhbmRsaW5nIGlucHV0LCBrZXk6ICVkIiwga2V5KTsKQEAgLTE3Myw3ICsxNzQsNiBAQAogICAgIH0KIAogICAgIHRoaXMtPlVwZGF0ZVN0YXR1c0JhcigpOwotICAgIHRoaXMtPlByaW50S2V5cygpOwogICAgIHRvdWNod2luKHN0ZHNjcik7CiAgICAgd3JlZnJlc2goc3Rkc2NyKTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5oIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5oCmluZGV4IDQyZjljNzEuLjg4ZWZlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNMb25nTWVzc2FnZUZvcm0uaAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtLmgKQEAgLTE0LDggKzE0LDE0IEBACiBjbGFzcyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSA6IHB1YmxpYyBjbUN1cnNlc0Zvcm0KIHsKIHB1YmxpYzoKKyAgZW51bSBjbGFzcyBTY3JvbGxCZWhhdmlvcgorICB7CisgICAgTm9TY3JvbGwsCisgICAgU2Nyb2xsRG93bgorICB9OworCiAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbWVzc2FnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRpdGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGl0bGUsIFNjcm9sbEJlaGF2aW9yIHNjcm9sbEJlaGF2aW9yKTsKICAgfmNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKCkgb3ZlcnJpZGU7CiAKICAgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0oY21DdXJzZXNMb25nTWVzc2FnZUZvcm0gY29uc3QmKSA9IGRlbGV0ZTsKQEAgLTQzLDYgKzQ5LDcgQEAKIHByb3RlY3RlZDoKICAgc3RkOjpzdHJpbmcgTWVzc2FnZXM7CiAgIHN0ZDo6c3RyaW5nIFRpdGxlOworICBTY3JvbGxCZWhhdmlvciBTY3JvbGxpbmc7CiAKICAgRklFTEQqIEZpZWxkc1syXTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc01haW5Gb3JtLmN4eAppbmRleCA2YjcxZThhLi43NzUyYTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5jeHgKQEAgLTM0LDYgKzM0LDcgQEAKICAgOiBBcmdzKHN0ZDo6bW92ZShhcmdzKSkKICAgLCBJbml0aWFsV2lkdGgoaW5pdFdpZHRoKQogeworICB0aGlzLT5IYXNOb25TdGF0dXNPdXRwdXRzID0gZmFsc2U7CiAgIHRoaXMtPk51bWJlck9mUGFnZXMgPSAwOwogICB0aGlzLT5BZHZhbmNlZE1vZGUgPSBmYWxzZTsKICAgdGhpcy0+TnVtYmVyT2ZWaXNpYmxlRW50cmllcyA9IDA7CkBAIC0xNjAsNyArMTYxLDcgQEAKICAgICAvLyBJZiBub3JtYWwgbW9kZSwgY291bnQgb25seSBub24tYWR2YW5jZWQgZW50cmllcwogICAgIHRoaXMtPk51bWJlck9mVmlzaWJsZUVudHJpZXMgPSAwOwogICAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgICBib29sIGFkdmFuY2VkID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKApAQCAtMTgxLDcgKzE4Miw3IEBACiAKICAgLy8gQXNzaWduIGZpZWxkcwogICBmb3IgKGNtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZSYgZW50cnkgOiB0aGlzLT5FbnRyaWVzKSB7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGVudHJ5LkdldFZhbHVlKCkpOwogICAgIGJvb2wgYWR2YW5jZWQgPQogICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKApAQCAtMjQwLDcgKzI0MSw3IEBACiAgICAgLy8gSWYgbm9ybWFsLCBkaXNwbGF5IG9ubHkgbm9uLWFkdmFuY2VkIGVudHJpZXMKICAgICB0aGlzLT5OdW1iZXJPZlZpc2libGVFbnRyaWVzID0gMDsKICAgICBmb3IgKGNtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZSYgZW50cnkgOiB0aGlzLT5FbnRyaWVzKSB7Ci0gICAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KKyAgICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGVudHJ5LkdldFZhbHVlKCkpOwogICAgICAgYm9vbCBhZHZhbmNlZCA9CiAgICAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbCgKQEAgLTI1OCw3ICsyNTksNyBAQAogICAgIGJvb2wgaXNOZXdQYWdlOwogICAgIGludCBpID0gMDsKICAgICBmb3IgKGNtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZSYgZW50cnkgOiB0aGlzLT5FbnRyaWVzKSB7Ci0gICAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KKyAgICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGVudHJ5LkdldFZhbHVlKCkpOwogICAgICAgYm9vbCBhZHZhbmNlZCA9CiAgICAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbCgKQEAgLTMyMSwyNSArMzIyLDI1IEBACiAgICAgfSBlbHNlIHsKICAgICAgIGlmICh0aGlzLT5Pa1RvR2VuZXJhdGUpIHsKICAgICAgICAgc3ByaW50ZihmaXJzdExpbmUsCi0gICAgICAgICAgICAgICAgIlByZXNzIFtjXSB0byBjb25maWd1cmUgICAgICAgUHJlc3MgW2ddIHRvIGdlbmVyYXRlIGFuZCBleGl0Iik7CisgICAgICAgICAgICAgICAgIiAgICAgIFtsXSBTaG93IGxvZyBvdXRwdXQgICBbY10gQ29uZmlndXJlIgorICAgICAgICAgICAgICAgICIgICAgICAgW2ddIEdlbmVyYXRlICAgICAgICAiKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHNwcmludGYoZmlyc3RMaW5lLAotICAgICAgICAgICAgICAgICJQcmVzcyBbY10gdG8gY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworICAgICAgICAgICAgICAgICIgICAgICBbbF0gU2hvdyBsb2cgb3V0cHV0ICAgW2NdIENvbmZpZ3VyZSIKKyAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CiAgICAgICB9CiAgICAgICB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHRvZ2dsZUtleUluc3RydWN0aW9uID0KLSAgICAgICAgICAiUHJlc3MgW3RdIHRvIHRvZ2dsZSBhZHZhbmNlZCBtb2RlIChDdXJyZW50bHkgJXMpIjsKKyAgICAgICAgICAiICAgICAgW3RdIFRvZ2dsZSBhZHZhbmNlZCBtb2RlIChjdXJyZW50bHkgJXMpIjsKICAgICAgICAgc3ByaW50Zih0aGlyZExpbmUsIHRvZ2dsZUtleUluc3RydWN0aW9uLAotICAgICAgICAgICAgICAgIHRoaXMtPkFkdmFuY2VkTW9kZSA/ICJPbiIgOiAiT2ZmIik7CisgICAgICAgICAgICAgICAgdGhpcy0+QWR2YW5jZWRNb2RlID8gIm9uIiA6ICJvZmYiKTsKICAgICAgIH0KICAgICAgIHNwcmludGYoc2Vjb25kTGluZSwKLSAgICAgICAgICAgICAgIlByZXNzIFtoXSBmb3IgaGVscCAgICAgICAgICAgIgotICAgICAgICAgICAgICAiUHJlc3MgW3FdIHRvIHF1aXQgd2l0aG91dCBnZW5lcmF0aW5nIik7CisgICAgICAgICAgICAgICIgICAgICBbaF0gSGVscCAgICAgICAgICAgICAgW3FdIFF1aXQgd2l0aG91dCBnZW5lcmF0aW5nIik7CiAgICAgfQogCiAgICAgY3Vyc2VzX21vdmUoeSAtIDQsIDApOwotICAgIGNoYXIgZm10WzUxMl0gPQotICAgICAgIlByZXNzIFtlbnRlcl0gdG8gZWRpdCBvcHRpb24gUHJlc3MgW2RdIHRvIGRlbGV0ZSBhbiBlbnRyeSI7CisgICAgY2hhciBmbXRbNTEyXSA9ICJLZXlzOiBbZW50ZXJdIEVkaXQgYW4gZW50cnkgW2RdIERlbGV0ZSBhbiBlbnRyeSI7CiAgICAgaWYgKHByb2Nlc3MpIHsKICAgICAgIG1lbXNldChmbXQsICcgJywgNTcpOwogICAgIH0KQEAgLTM2NCw3ICszNjUsNyBAQAogCiAvLyBQcmludCB0aGUga2V5IG9mIHRoZSBjdXJyZW50IGVudHJ5IGFuZCB0aGUgQ01ha2UgdmVyc2lvbgogLy8gb24gdGhlIHN0YXR1cyBiYXIuIERlc2lnbmVkIGZvciBhIHdpZHRoIG9mIDgwIGNoYXJzLgotdm9pZCBjbUN1cnNlc01haW5Gb3JtOjpVcGRhdGVTdGF0dXNCYXIoY29uc3QgY2hhciogbWVzc2FnZSkKK3ZvaWQgY21DdXJzZXNNYWluRm9ybTo6VXBkYXRlU3RhdHVzQmFyKGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gbWVzc2FnZSkKIHsKICAgaW50IHg7CiAgIGludCB5OwpAQCAtMzg1LDExOSArMzg2LDkyIEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgLy8gR2V0IHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZW50cnkKLSAgRklFTEQqIGN1ciA9IGN1cnJlbnRfZmllbGQodGhpcy0+Rm9ybSk7Ci0gIGludCBmaW5kZXggPSBmaWVsZF9pbmRleChjdXIpOwotICBjbUN1cnNlc1dpZGdldCogbGJsID0gbnVsbHB0cjsKLSAgaWYgKGZpbmRleCA+PSAwKSB7Ci0gICAgbGJsID0gcmVpbnRlcnByZXRfY2FzdDxjbUN1cnNlc1dpZGdldCo+KAotICAgICAgZmllbGRfdXNlcnB0cih0aGlzLT5GaWVsZHNbZmluZGV4IC0gMl0pKTsKLSAgfQotICBjaGFyIGhlbHBbMTI4XSA9ICIiOwotICBjb25zdCBjaGFyKiBjdXJGaWVsZCA9ICIiOwotICBpZiAobGJsKSB7Ci0gICAgY3VyRmllbGQgPSBsYmwtPkdldFZhbHVlKCk7CisgIC8vIEZpbmQgdGhlIGN1cnJlbnQgbGFiZWwgaW5kZXgKKyAgLy8gRmllbGQgYXJlIGdyb3VwZWQgYnkgMywgdGhlIGxhYmVsIHNob3VsZCBiZSAyIGxlc3MgdGhhbiB0aGUgY3VycmVudCBpbmRleAorICB1c2luZyBzaXplX3R5cGUgPSBkZWNsdHlwZSh0aGlzLT5GaWVsZHMpOjpzaXplX3R5cGU7CisgIHNpemVfdHlwZSBjdXJyZW50TGFiZWxJbmRleCA9IGZpZWxkX2luZGV4KGN1cnJlbnRfZmllbGQodGhpcy0+Rm9ybSkpIC0gMjsKKworICAvLyBVc2UgdGhlIHN0YXR1cyBtZXNzYWdlIGlmIGFueSwgb3RoZXJ3aXNlIGpvaW4gdGhlIGtleSBhbmQgaGVscCBzdHJpbmcKKyAgc3RkOjpzdHJpbmcgYmFyOworICBpZiAobWVzc2FnZSkgeworICAgIGJhciA9ICptZXNzYWdlOworICB9IGVsc2UgeworICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBjdXJyZW50IGVudHJ5CisgICAgY21DdXJzZXNXaWRnZXQqIGxhYmVsV2lkZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxjbUN1cnNlc1dpZGdldCo+KAorICAgICAgZmllbGRfdXNlcnB0cih0aGlzLT5GaWVsZHNbY3VycmVudExhYmVsSW5kZXhdKSk7CisgICAgc3RkOjpzdHJpbmcgbGFiZWxWYWx1ZSA9IGxhYmVsV2lkZ2V0LT5HZXRWYWx1ZSgpOworICAgIGJhciA9IGxhYmVsVmFsdWUgKyAiOiAiOwogCiAgICAgLy8gR2V0IHRoZSBoZWxwIHN0cmluZyBvZiB0aGUgY3VycmVudCBlbnRyeQogICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGhlbHAgc3RyaW5nCi0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9Ci0gICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoY3VyRmllbGQpOworICAgIGF1dG8gY21ha2VTdGF0ZSA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCk7CisgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPSBjbWFrZVN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUobGFiZWxWYWx1ZSk7CiAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGhzID0gdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KAotICAgICAgICBjdXJGaWVsZCwgIkhFTFBTVFJJTkciKTsKLSAgICAgIGlmIChocykgewotICAgICAgICBzdHJuY3B5KGhlbHAsIGhzLCAxMjcpOwotICAgICAgICBoZWxwWzEyN10gPSAnXDAnOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaGVscFswXSA9IDA7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNwcmludGYoaGVscCwgIiAiKTsKLSAgICB9Ci0gIH0KLQotICAvLyBKb2luIHRoZSBrZXksIGhlbHAgc3RyaW5nIGFuZCBwYWQgd2l0aCBzcGFjZXMKLSAgLy8gKG9yIHRydW5jYXRlKSBhcyBuZWNlc3NhcnkKLSAgY2hhciBiYXJbY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIXTsKLSAgc2l6ZV90IGN1ckZpZWxkTGVuID0gc3RybGVuKGN1ckZpZWxkKTsKLSAgc2l6ZV90IGhlbHBMZW4gPSBzdHJsZW4oaGVscCk7Ci0KLSAgc2l6ZV90IHdpZHRoID0gc3RkOjptaW48c2l6ZV90Pih4LCBjbUN1cnNlc01haW5Gb3JtOjpNQVhfV0lEVEgpOwotCi0gIGlmIChtZXNzYWdlKSB7Ci0gICAgY3VyRmllbGQgPSBtZXNzYWdlOwotICAgIGN1ckZpZWxkTGVuID0gc3RybGVuKG1lc3NhZ2UpOwotICAgIHN0cm5jcHkoYmFyLCBjdXJGaWVsZCwgd2lkdGgpOwotICAgIGlmIChjdXJGaWVsZExlbiA8IHdpZHRoKSB7Ci0gICAgICBtZW1zZXQoYmFyICsgY3VyRmllbGRMZW4sICcgJywgd2lkdGggLSBjdXJGaWVsZExlbik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHN0cm5jcHkoYmFyLCBjdXJGaWVsZCwgd2lkdGgpOwotICAgIGlmIChjdXJGaWVsZExlbiA8IHdpZHRoKSB7Ci0gICAgICBiYXJbY3VyRmllbGRMZW5dID0gJzonOwotICAgICAgYmFyW2N1ckZpZWxkTGVuICsgMV0gPSAnICc7Ci0gICAgICBzdHJuY3B5KGJhciArIGN1ckZpZWxkTGVuICsgMiwgaGVscCwgd2lkdGggLSBjdXJGaWVsZExlbiAtIDIpOwotICAgICAgaWYgKGN1ckZpZWxkTGVuICsgaGVscExlbiArIDIgPCB3aWR0aCkgewotICAgICAgICBtZW1zZXQoYmFyICsgY3VyRmllbGRMZW4gKyBoZWxwTGVuICsgMiwgJyAnLAotICAgICAgICAgICAgICAgd2lkdGggLSAoY3VyRmllbGRMZW4gKyBoZWxwTGVuICsgMikpOworICAgICAgY21Qcm9wIGhlbHAgPQorICAgICAgICBjbWFrZVN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkobGFiZWxWYWx1ZSwgIkhFTFBTVFJJTkciKTsKKyAgICAgIGlmIChoZWxwKSB7CisgICAgICAgIGJhciArPSAqaGVscDsKICAgICAgIH0KICAgICB9CiAgIH0KLQotICBiYXJbd2lkdGhdID0gJ1wwJzsKLQotICAvLyBEaXNwbGF5IENNYWtlIHZlcnNpb24gaW5mbyBvbiB0aGUgbmV4dCBsaW5lCi0gIC8vIFdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIG9uIHRoZSByaWdodAotICBjaGFyIHZlcnNpb25bY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIXTsKLSAgY2hhciB2ZXJ0bXBbMTI4XTsKLSAgc3ByaW50Zih2ZXJ0bXAsICJDTWFrZSBWZXJzaW9uICVzIiwgY21WZXJzaW9uOjpHZXRDTWFrZVZlcnNpb24oKSk7Ci0gIHNpemVfdCBzaWRlU3BhY2UgPSAod2lkdGggLSBzdHJsZW4odmVydG1wKSk7Ci0gIG1lbXNldCh2ZXJzaW9uLCAnICcsIHNpZGVTcGFjZSk7Ci0gIHNwcmludGYodmVyc2lvbiArIHNpZGVTcGFjZSwgIiVzIiwgdmVydG1wKTsKLSAgdmVyc2lvblt3aWR0aF0gPSAnXDAnOwotCi0gIC8vIE5vdyBwcmludCBib3RoIGxpbmVzCi0gIGNoYXIgZm10X3NbXSA9ICIlcyI7CisgIC8vIFBhZCB3aXRoIHNwYWNlcyB0byBlcmFzZSBhbnkgcHJldmlvdXMgdGV4dCwKKyAgLy8gb3IgdHJ1bmNhdGUgYXMgbmVjZXNzYXJ5IHRvIGZpdCB0aGUgc2NyZWVuCisgIGJhci5yZXNpemUoeCwgJyAnKTsKICAgY3Vyc2VzX21vdmUoeSAtIDUsIDApOwogICBhdHRyb24oQV9TVEFORE9VVCk7Ci0gIHByaW50dyhmbXRfcywgYmFyKTsKKyAgY2hhciBmbXRfc1tdID0gIiVzIjsKKyAgcHJpbnR3KGZtdF9zLCBiYXIuY19zdHIoKSk7CiAgIGF0dHJvZmYoQV9TVEFORE9VVCk7Ci0gIGN1cnNlc19tb3ZlKHkgLSA0LCAwKTsKLSAgcHJpbnR3KGZtdF9zLCB2ZXJzaW9uKTsKKworICAvLyBIaWdobGlnaHQgdGhlIGN1cnJlbnQgbGFiZWwsIHJlc2V0IG90aGVycworICAvLyBGaWVsZHMgYXJlIGdyb3VwZWQgYnkgMywgdGhlIGZpcnN0IG9uZSBiZWluZyB0aGUgbGFiZWwKKyAgLy8gc28gc3RhcnQgYXQgMCBhbmQgbW92ZSB1cCBieSAzIGF2b2lkaW5nIHRoZSBsYXN0IG51bGwgZW50cnkKKyAgZm9yIChzaXplX3R5cGUgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMtPkZpZWxkcy5zaXplKCkgLSAxOyBpbmRleCArPSAzKSB7CisgICAgYm9vbCBjdXJyZW50TGFiZWwgPSBpbmRleCA9PSBjdXJyZW50TGFiZWxJbmRleDsKKyAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZHNbaW5kZXhdLCBjdXJyZW50TGFiZWwgPyBBX1NUQU5ET1VUIDogQV9OT1JNQUwpOworICB9CisKKyAgLy8gRGlzcGxheSBDTWFrZSB2ZXJzaW9uIHVuZGVyIHRoZSBzdGF0dXMgYmFyCisgIC8vIFdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIG9uIHRoZSByaWdodAorICBzdGQ6OnN0cmluZyB2ZXJzaW9uID0gIkNNYWtlIFZlcnNpb24gIjsKKyAgdmVyc2lvbiArPSBjbVZlcnNpb246OkdldENNYWtlVmVyc2lvbigpOworICB2ZXJzaW9uLnJlc2l6ZShzdGQ6Om1pbjxzdGQ6OnN0cmluZzo6c2l6ZV90eXBlPih4LCB2ZXJzaW9uLnNpemUoKSkpOworICBjdXJzZXNfbW92ZSh5IC0gNCwgeCAtIHN0YXRpY19jYXN0PGludD4odmVyc2lvbi5zaXplKCkpKTsKKyAgcHJpbnR3KGZtdF9zLCB2ZXJzaW9uLmNfc3RyKCkpOworCiAgIHBvc19mb3JtX2N1cnNvcih0aGlzLT5Gb3JtKTsKIH0KIAogdm9pZCBjbUN1cnNlc01haW5Gb3JtOjpVcGRhdGVQcm9ncmVzcyhjb25zdCBzdGQ6OnN0cmluZyYgbXNnLCBmbG9hdCBwcm9nKQogewotICBjaGFyIHRtcFsxMDI0XTsKLSAgY29uc3QgY2hhciogY21zZyA9IHRtcDsKICAgaWYgKHByb2cgPj0gMCkgewotICAgIHNwcmludGYodG1wLCAiJXMgJWklJSIsIG1zZy5jX3N0cigpLCBzdGF0aWNfY2FzdDxpbnQ+KDEwMCAqIHByb2cpKTsKKyAgICBjb25zdGV4cHIgaW50IHByb2dyZXNzQmFyV2lkdGggPSA0MDsKKyAgICBpbnQgcHJvZ3Jlc3NCYXJDb21wbGV0ZWQgPSBzdGF0aWNfY2FzdDxpbnQ+KHByb2dyZXNzQmFyV2lkdGggKiBwcm9nKTsKKyAgICBpbnQgcGVyY2VudENvbXBsZXRlZCA9IHN0YXRpY19jYXN0PGludD4oMTAwICogcHJvZyk7CisgICAgdGhpcy0+TGFzdFByb2dyZXNzID0gKHBlcmNlbnRDb21wbGV0ZWQgPCAxMDAgPyAiICIgOiAiIik7CisgICAgdGhpcy0+TGFzdFByb2dyZXNzICs9IChwZXJjZW50Q29tcGxldGVkIDwgMTAgPyAiICIgOiAiIik7CisgICAgdGhpcy0+TGFzdFByb2dyZXNzICs9IHN0ZDo6dG9fc3RyaW5nKHBlcmNlbnRDb21wbGV0ZWQpICsgIiUgWyI7CisgICAgdGhpcy0+TGFzdFByb2dyZXNzLmFwcGVuZChwcm9ncmVzc0JhckNvbXBsZXRlZCwgJyMnKTsKKyAgICB0aGlzLT5MYXN0UHJvZ3Jlc3MuYXBwZW5kKHByb2dyZXNzQmFyV2lkdGggLSBwcm9ncmVzc0JhckNvbXBsZXRlZCwgJyAnKTsKKyAgICB0aGlzLT5MYXN0UHJvZ3Jlc3MgKz0gIl0gIiArIG1zZyArICIuLi4iOwogICB9IGVsc2UgewotICAgIGNtc2cgPSBtc2cuY19zdHIoKTsKKyAgICB0aGlzLT5PdXRwdXRzLmVtcGxhY2VfYmFjayhtc2cpOwogICB9Ci0gIHRoaXMtPlVwZGF0ZVN0YXR1c0JhcihjbXNnKTsKLSAgdGhpcy0+UHJpbnRLZXlzKDEpOwotICBjdXJzZXNfbW92ZSgxLCAxKTsKLSAgdG91Y2h3aW4oc3Rkc2NyKTsKLSAgcmVmcmVzaCgpOworCisgIHRoaXMtPkRpc3BsYXlPdXRwdXRzKCk7CiB9CiAKIGludCBjbUN1cnNlc01haW5Gb3JtOjpDb25maWd1cmUoaW50IG5vY29uZmlndXJlKQogewotICBpbnQgeGk7Ci0gIGludCB5aTsKLSAgZ2V0bWF4eXgoc3Rkc2NyLCB5aSwgeGkpOworICB0aGlzLT5SZXNldE91dHB1dHMoKTsKIAotICBjdXJzZXNfbW92ZSgxLCAxKTsKLSAgdGhpcy0+VXBkYXRlU3RhdHVzQmFyKCJDb25maWd1cmluZywgcGxlYXNlIHdhaXQuLi4iKTsKLSAgdGhpcy0+UHJpbnRLZXlzKDEpOwotICB0b3VjaHdpbihzdGRzY3IpOwotICByZWZyZXNoKCk7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlNldFByb2dyZXNzQ2FsbGJhY2soCi0gICAgW3RoaXNdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2csIGZsb2F0IHByb2cpIHsKLSAgICAgIHRoaXMtPlVwZGF0ZVByb2dyZXNzKG1zZywgcHJvZyk7Ci0gICAgfSk7CisgIGlmIChub2NvbmZpZ3VyZSA9PSAwKSB7CisgICAgdGhpcy0+VXBkYXRlUHJvZ3Jlc3MoIkNvbmZpZ3VyaW5nIiwgMCk7CisgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0UHJvZ3Jlc3NDYWxsYmFjaygKKyAgICAgIFt0aGlzXShjb25zdCBzdGQ6OnN0cmluZyYgbXNnLCBmbG9hdCBwcm9nKSB7CisgICAgICAgIHRoaXMtPlVwZGF0ZVByb2dyZXNzKG1zZywgcHJvZyk7CisgICAgICB9KTsKKyAgfQogCiAgIC8vIGFsd2F5cyBzYXZlIHRoZSBjdXJyZW50IGd1aSB2YWx1ZXMgdG8gZGlzawogICB0aGlzLT5GaWxsQ2FjaGVNYW5hZ2VyRnJvbVVJKCk7CkBAIC01MDUsOSArNDc5LDYgQEAKICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCkpOwogICB0aGlzLT5Mb2FkQ2FjaGUobnVsbHB0cik7CiAKLSAgLy8gR2V0IHJpZCBvZiBwcmV2aW91cyBlcnJvcnMKLSAgdGhpcy0+RXJyb3JzID0gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCk7Ci0KICAgLy8gcnVuIHRoZSBnZW5lcmF0ZSBwcm9jZXNzCiAgIHRoaXMtPk9rVG9HZW5lcmF0ZSA9IHRydWU7CiAgIGludCByZXRWYWw7CkBAIC01MjQsNyArNDk1LDcgQEAKIAogICBrZXlwYWQoc3Rkc2NyLCB0cnVlKTsgLyogVXNlIGtleSBzeW1ib2xzIGFzIEtFWV9ET1dOICovCiAKLSAgaWYgKHJldFZhbCAhPSAwIHx8ICF0aGlzLT5FcnJvcnMuZW1wdHkoKSkgeworICBpZiAocmV0VmFsICE9IDAgfHwgdGhpcy0+SGFzTm9uU3RhdHVzT3V0cHV0cykgewogICAgIC8vIHNlZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RXJyb3JPY2N1cmVkRmxhZygpKSB7CiAgICAgICB0aGlzLT5Pa1RvR2VuZXJhdGUgPSBmYWxzZTsKQEAgLTUzMiwxMSArNTAzLDEzIEBACiAgICAgaW50IHh4OwogICAgIGludCB5eTsKICAgICBnZXRtYXh5eChzdGRzY3IsIHl5LCB4eCk7Ci0gICAgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0qIG1zZ3MgPQotICAgICAgbmV3IGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKHRoaXMtPkVycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIkVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdGhlIGxhc3QgcGFzcy4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJDTWFrZSBwcm9kdWNlZCB0aGUgZm9sbG93aW5nIG91dHB1dC4iKTsKKyAgICBjb25zdCBjaGFyKiB0aXRsZSA9ICJDb25maWd1cmUgcHJvZHVjZWQgdGhlIGZvbGxvd2luZyBvdXRwdXQiOworICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkpIHsKKyAgICAgIHRpdGxlID0gIkNvbmZpZ3VyZSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dCI7CisgICAgfQorICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKiBtc2dzID0gbmV3IGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKAorICAgICAgdGhpcy0+T3V0cHV0cywgdGl0bGUsCisgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTo6U2Nyb2xsQmVoYXZpb3I6OlNjcm9sbERvd24pOwogICAgIC8vIHJlc2V0IGVycm9yIGNvbmRpdGlvbgogICAgIGNtU3lzdGVtVG9vbHM6OlJlc2V0RXJyb3JPY2N1cmVkRmxhZygpOwogICAgIEN1cnJlbnRGb3JtID0gbXNnczsKQEAgLTU0NywxMSArNTIwLDEzIEBACiAgICAgaWYgKHJldFZhbCA9PSAtMikgewogICAgICAgcmV0dXJuIHJldFZhbDsKICAgICB9Ci0gICAgQ3VycmVudEZvcm0gPSB0aGlzOwotICAgIHRoaXMtPlJlbmRlcigxLCAxLCB4eCwgeXkpOwogICB9CiAKICAgdGhpcy0+SW5pdGlhbGl6ZVVJKCk7CisgIEN1cnJlbnRGb3JtID0gdGhpczsKKyAgaW50IHhpOworICBpbnQgeWk7CisgIGdldG1heHl4KHN0ZHNjciwgeWksIHhpKTsKICAgdGhpcy0+UmVuZGVyKDEsIDEsIHhpLCB5aSk7CiAKICAgcmV0dXJuIDA7CkBAIC01NTksMzAgKzUzNCwyMSBAQAogCiBpbnQgY21DdXJzZXNNYWluRm9ybTo6R2VuZXJhdGUoKQogewotICBpbnQgeGk7Ci0gIGludCB5aTsKLSAgZ2V0bWF4eXgoc3Rkc2NyLCB5aSwgeGkpOworICB0aGlzLT5SZXNldE91dHB1dHMoKTsKIAotICBjdXJzZXNfbW92ZSgxLCAxKTsKLSAgdGhpcy0+VXBkYXRlU3RhdHVzQmFyKCJHZW5lcmF0aW5nLCBwbGVhc2Ugd2FpdC4uLiIpOwotICB0aGlzLT5QcmludEtleXMoMSk7Ci0gIHRvdWNod2luKHN0ZHNjcik7Ci0gIHJlZnJlc2goKTsKKyAgdGhpcy0+VXBkYXRlUHJvZ3Jlc3MoIkdlbmVyYXRpbmciLCAwKTsKICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0UHJvZ3Jlc3NDYWxsYmFjaygKICAgICBbdGhpc10oY29uc3Qgc3RkOjpzdHJpbmcmIG1zZywgZmxvYXQgcHJvZykgewogICAgICAgdGhpcy0+VXBkYXRlUHJvZ3Jlc3MobXNnLCBwcm9nKTsKICAgICB9KTsKIAotICAvLyBHZXQgcmlkIG9mIHByZXZpb3VzIGVycm9ycwotICB0aGlzLT5FcnJvcnMgPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKTsKLQogICAvLyBydW4gdGhlIGdlbmVyYXRlIHByb2Nlc3MKICAgaW50IHJldFZhbCA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdlbmVyYXRlKCk7CiAKICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0UHJvZ3Jlc3NDYWxsYmFjayhudWxscHRyKTsKICAga2V5cGFkKHN0ZHNjciwgdHJ1ZSk7IC8qIFVzZSBrZXkgc3ltYm9scyBhcyBLRVlfRE9XTiAqLwogCi0gIGlmIChyZXRWYWwgIT0gMCB8fCAhdGhpcy0+RXJyb3JzLmVtcHR5KCkpIHsKKyAgaWYgKHJldFZhbCAhPSAwIHx8IHRoaXMtPkhhc05vblN0YXR1c091dHB1dHMpIHsKICAgICAvLyBzZWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yCiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSkgewogICAgICAgdGhpcy0+T2tUb0dlbmVyYXRlID0gZmFsc2U7CkBAIC01OTIsMTIgKzU1OCwxMyBAQAogICAgIGludCB4eDsKICAgICBpbnQgeXk7CiAgICAgZ2V0bWF4eXgoc3Rkc2NyLCB5eSwgeHgpOwotICAgIGNvbnN0IGNoYXIqIHRpdGxlID0gIk1lc3NhZ2VzIGR1cmluZyBsYXN0IHBhc3MuIjsKKyAgICBjb25zdCBjaGFyKiB0aXRsZSA9ICJHZW5lcmF0ZSBwcm9kdWNlZCB0aGUgZm9sbG93aW5nIG91dHB1dCI7CiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSkgewotICAgICAgdGl0bGUgPSAiRXJyb3JzIG9jY3VycmVkIGR1cmluZyB0aGUgbGFzdCBwYXNzLiI7CisgICAgICB0aXRsZSA9ICJHZW5lcmF0ZSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dCI7CiAgICAgfQotICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKiBtc2dzID0KLSAgICAgIG5ldyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSh0aGlzLT5FcnJvcnMsIHRpdGxlKTsKKyAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSogbXNncyA9IG5ldyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSgKKyAgICAgIHRoaXMtPk91dHB1dHMsIHRpdGxlLAorICAgICAgY21DdXJzZXNMb25nTWVzc2FnZUZvcm06OlNjcm9sbEJlaGF2aW9yOjpTY3JvbGxEb3duKTsKICAgICBDdXJyZW50Rm9ybSA9IG1zZ3M7CiAgICAgbXNncy0+UmVuZGVyKDEsIDEsIHh4LCB5eSk7CiAgICAgbXNncy0+SGFuZGxlSW5wdXQoKTsKQEAgLTYwNiwxMSArNTczLDEzIEBACiAgICAgaWYgKHJldFZhbCA9PSAtMikgewogICAgICAgcmV0dXJuIHJldFZhbDsKICAgICB9Ci0gICAgQ3VycmVudEZvcm0gPSB0aGlzOwotICAgIHRoaXMtPlJlbmRlcigxLCAxLCB4eCwgeXkpOwogICB9CiAKICAgdGhpcy0+SW5pdGlhbGl6ZVVJKCk7CisgIEN1cnJlbnRGb3JtID0gdGhpczsKKyAgaW50IHhpOworICBpbnQgeWk7CisgIGdldG1heHl4KHN0ZHNjciwgeWksIHhpKTsKICAgdGhpcy0+UmVuZGVyKDEsIDEsIHhpLCB5aSk7CiAKICAgcmV0dXJuIDA7CkBAIC02MTksNyArNTg4LDkgQEAKIHZvaWQgY21DdXJzZXNNYWluRm9ybTo6QWRkRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIC8qdW51c2VkKi8pCiB7Ci0gIHRoaXMtPkVycm9ycy5lbXBsYWNlX2JhY2sobWVzc2FnZSk7CisgIHRoaXMtPk91dHB1dHMuZW1wbGFjZV9iYWNrKG1lc3NhZ2UpOworICB0aGlzLT5IYXNOb25TdGF0dXNPdXRwdXRzID0gdHJ1ZTsKKyAgdGhpcy0+RGlzcGxheU91dHB1dHMoKTsKIH0KIAogdm9pZCBjbUN1cnNlc01haW5Gb3JtOjpSZW1vdmVFbnRyeShjb25zdCBjaGFyKiB2YWx1ZSkKQEAgLTY0NiwxMCArNjE3LDEwIEBACiB7CiAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY2FjaGVLZXkgPSBlbnRyeS5LZXk7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGNhY2hlS2V5KTsKICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewotICAgICAgc3RkOjpzdHJpbmcgb2xkVmFsdWUgPSBleGlzdGluZ1ZhbHVlOworICAgICAgc3RkOjpzdHJpbmcgb2xkVmFsdWUgPSAqZXhpc3RpbmdWYWx1ZTsKICAgICAgIHN0ZDo6c3RyaW5nIG5ld1ZhbHVlID0gZW50cnkuRW50cnktPkdldFZhbHVlKCk7CiAgICAgICBzdGQ6OnN0cmluZyBmaXhlZE9sZFZhbHVlOwogICAgICAgc3RkOjpzdHJpbmcgZml4ZWROZXdWYWx1ZTsKQEAgLTcwNCw3ICs2NzUsNyBAQAogICAgIHRoaXMtPlByaW50S2V5cygpOwogICAgIGlmICh0aGlzLT5TZWFyY2hNb2RlKSB7CiAgICAgICBzdGQ6OnN0cmluZyBzZWFyY2hzdHIgPSAiU2VhcmNoOiAiICsgdGhpcy0+U2VhcmNoU3RyaW5nOwotICAgICAgdGhpcy0+VXBkYXRlU3RhdHVzQmFyKHNlYXJjaHN0ci5jX3N0cigpKTsKKyAgICAgIHRoaXMtPlVwZGF0ZVN0YXR1c0JhcihzZWFyY2hzdHIpOwogICAgICAgdGhpcy0+UHJpbnRLZXlzKDEpOwogICAgICAgY3Vyc2VzX21vdmUoeSAtIDUsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc2VhcmNoc3RyLnNpemUoKSkpOwogICAgICAgLy8gY3Vyc2VzX21vdmUoMSwxKTsKQEAgLTgzMiw5ICs4MDMsOSBAQAogICAgICAgICBjbUN1cnNlc1dpZGdldCogbGJsID0gcmVpbnRlcnByZXRfY2FzdDxjbUN1cnNlc1dpZGdldCo+KAogICAgICAgICAgIGZpZWxkX3VzZXJwdHIodGhpcy0+RmllbGRzW2ZpbmRleCAtIDJdKSk7CiAgICAgICAgIGNvbnN0IGNoYXIqIGN1ckZpZWxkID0gbGJsLT5HZXRWYWx1ZSgpOwotICAgICAgICBjb25zdCBjaGFyKiBoZWxwU3RyaW5nID0gbnVsbHB0cjsKKyAgICAgICAgY21Qcm9wIGhlbHBTdHJpbmcgPSBudWxscHRyOwogCi0gICAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGN1ckZpZWxkKTsKICAgICAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKICAgICAgICAgICBoZWxwU3RyaW5nID0gdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KApAQCAtODQzLDEzICs4MTQsMTQgQEAKICAgICAgICAgaWYgKGhlbHBTdHJpbmcpIHsKICAgICAgICAgICB0aGlzLT5IZWxwTWVzc2FnZVsxXSA9CiAgICAgICAgICAgICBjbVN0ckNhdCgiQ3VycmVudCBvcHRpb24gaXM6ICIsIGN1ckZpZWxkLCAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgIkhlbHAgc3RyaW5nIGZvciB0aGlzIG9wdGlvbiBpczogIiwgaGVscFN0cmluZywgJ1xuJyk7CisgICAgICAgICAgICAgICAgICAgICAiSGVscCBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uIGlzOiAiLCAqaGVscFN0cmluZywgJ1xuJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgdGhpcy0+SGVscE1lc3NhZ2VbMV0gPSAiIjsKICAgICAgICAgfQogCi0gICAgICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKiBtc2dzID0KLSAgICAgICAgICBuZXcgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0odGhpcy0+SGVscE1lc3NhZ2UsICJIZWxwLiIpOworICAgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSogbXNncyA9IG5ldyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSgKKyAgICAgICAgICB0aGlzLT5IZWxwTWVzc2FnZSwgIkhlbHAiLAorICAgICAgICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpTY3JvbGxCZWhhdmlvcjo6Tm9TY3JvbGwpOwogICAgICAgICBDdXJyZW50Rm9ybSA9IG1zZ3M7CiAgICAgICAgIG1zZ3MtPlJlbmRlcigxLCAxLCB4LCB5KTsKICAgICAgICAgbXNncy0+SGFuZGxlSW5wdXQoKTsKQEAgLTg2MSw3ICs4MzMsOCBAQAogICAgICAgZWxzZSBpZiAoa2V5ID09ICdsJykgewogICAgICAgICBnZXRtYXh5eChzdGRzY3IsIHksIHgpOwogICAgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSogbXNncyA9IG5ldyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSgKLSAgICAgICAgICB0aGlzLT5FcnJvcnMsICJFcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHRoZSBsYXN0IHBhc3MuIik7CisgICAgICAgICAgdGhpcy0+T3V0cHV0cywgIkNNYWtlIHByb2R1Y2VkIHRoZSBmb2xsb3dpbmcgb3V0cHV0IiwKKyAgICAgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTo6U2Nyb2xsQmVoYXZpb3I6Ok5vU2Nyb2xsKTsKICAgICAgICAgQ3VycmVudEZvcm0gPSBtc2dzOwogICAgICAgICBtc2dzLT5SZW5kZXIoMSwgMSwgeCwgeSk7CiAgICAgICAgIG1zZ3MtPkhhbmRsZUlucHV0KCk7CkBAIC0xMDA3LDE1ICs5ODAsNiBAQAogICAgIH0gZWxzZSB7CiAgICAgICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfTkVYVF9GSUVMRCk7CiAgICAgfQotICAgIC8qCi0gICAgY2hhciBidWZmZXJbMTAyNF07Ci0gICAgc3ByaW50ZihidWZmZXIsICJMaW5lOiAlZCAhPSAlZCAvICVkXG4iLCBmaW5kZXgsIGlkeCwKLSAgICB0aGlzLT5OdW1iZXJPZlZpc2libGVFbnRyaWVzKTsKLSAgICB0b3VjaHdpbihzdGRzY3IpOwotICAgIHJlZnJlc2goKTsKLSAgICB0aGlzLT5VcGRhdGVTdGF0dXNCYXIoIGJ1ZmZlciApOwotICAgIHVzbGVlcCgxMDAwMDApOwotICAgICovCiAgICAgY3VyID0gY3VycmVudF9maWVsZCh0aGlzLT5Gb3JtKTsKICAgICBmaW5kZXggPSBmaWVsZF9pbmRleChjdXIpOwogICAgIGlmIChmaW5kZXggPT0gc3RhcnRfaW5kZXgpIHsKQEAgLTEwMjQsNiArOTg4LDI4IEBACiAgIH0KIH0KIAordm9pZCBjbUN1cnNlc01haW5Gb3JtOjpSZXNldE91dHB1dHMoKQoreworICB0aGlzLT5Mb2dGb3JtLnJlc2V0KCk7CisgIHRoaXMtPk91dHB1dHMuY2xlYXIoKTsKKyAgdGhpcy0+SGFzTm9uU3RhdHVzT3V0cHV0cyA9IGZhbHNlOworICB0aGlzLT5MYXN0UHJvZ3Jlc3MuY2xlYXIoKTsKK30KKwordm9pZCBjbUN1cnNlc01haW5Gb3JtOjpEaXNwbGF5T3V0cHV0cygpCit7CisgIGludCB4aTsKKyAgaW50IHlpOworICBnZXRtYXh5eChzdGRzY3IsIHlpLCB4aSk7CisKKyAgYXV0byBuZXdMb2dGb3JtID0gbmV3IGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKAorICAgIHRoaXMtPk91dHB1dHMsIHRoaXMtPkxhc3RQcm9ncmVzcy5jX3N0cigpLAorICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpTY3JvbGxCZWhhdmlvcjo6U2Nyb2xsRG93bik7CisgIEN1cnJlbnRGb3JtID0gbmV3TG9nRm9ybTsKKyAgdGhpcy0+TG9nRm9ybS5yZXNldChuZXdMb2dGb3JtKTsKKyAgdGhpcy0+TG9nRm9ybS0+UmVuZGVyKDEsIDEsIHhpLCB5aSk7Cit9CisKIGNvbnN0IGNoYXIqIGNtQ3Vyc2VzTWFpbkZvcm06OnNfQ29uc3RIZWxwTWVzc2FnZSA9CiAgICJDTWFrZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgZ2VuZXJhdGUgYnVpbGQgZmlsZXMgZm9yIHNvZnR3YXJlIHByb2plY3RzLiAiCiAgICJUaGUgYmFzaWMgc3RlcHMgZm9yIGNvbmZpZ3VyaW5nIGEgcHJvamVjdCB3aXRoIGNjbWFrZSBhcmUgYXMgZm9sbG93czpcblxuIgpAQCAtMTA4MCw3ICsxMDY2LDcgQEAKICAgIiBjIDogcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoIHRoZSBjdXJyZW50IG9wdGlvbnNcbiIKICAgIiBnIDogZ2VuZXJhdGUgYnVpbGQgZmlsZXMgYW5kIGV4aXQsIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlcmUgYXJlIG5vICIKICAgIm5ldyBvcHRpb25zIGFuZCBubyBlcnJvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIGR1cmluZyBsYXN0IGNvbmZpZ3VyYXRpb24uXG4iCi0gICIgbCA6IHNob3dzIGxhc3QgZXJyb3JzXG4iCisgICIgbCA6IHNob3dzIGNtYWtlIG91dHB1dFxuIgogICAiIGQgOiBkZWxldGUgYW4gb3B0aW9uXG4iCiAgICIgdCA6IHRvZ2dsZXMgYWR2YW5jZWQgbW9kZS4gSW4gbm9ybWFsIG1vZGUsIG9ubHkgdGhlIG1vc3QgaW1wb3J0YW50ICIKICAgIm9wdGlvbnMgYXJlIHNob3duLiBJbiBhZHZhbmNlZCBtb2RlLCBhbGwgb3B0aW9ucyBhcmUgc2hvd24uIFdlIHJlY29tbWVuZCAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uaCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5oCmluZGV4IGI4NzY5YjcuLmI3YzIwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5oCisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5oCkBAIC0xMCwxMiArMTAsMTUgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vb3B0aW9uYWw+CisKICNpbmNsdWRlICJjbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuaCIKICNpbmNsdWRlICJjbUN1cnNlc0Zvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc1N0YW5kYXJkSW5jbHVkZXMuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKIAogY2xhc3MgY21ha2U7CitjbGFzcyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTsKIAogLyoqIFxjbGFzcyBjbUN1cnNlc01haW5Gb3JtCiAgKiBcYnJpZWYgVGhlIG1haW4gcGFnZSBvZiBjY21ha2UKQEAgLTY2LDggKzY5LDggQEAKICAgICogZXhjZXB0aW9uIGlzIGR1cmluZyBhIHJlc2l6ZS4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUKICAgICogc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgc3RhdHVzIGJhci4KICAgICovCi0gIHZvaWQgVXBkYXRlU3RhdHVzQmFyKCkgb3ZlcnJpZGUgeyB0aGlzLT5VcGRhdGVTdGF0dXNCYXIobnVsbHB0cik7IH0KLSAgdmlydHVhbCB2b2lkIFVwZGF0ZVN0YXR1c0Jhcihjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgdm9pZCBVcGRhdGVTdGF0dXNCYXIoKSBvdmVycmlkZSB7IHRoaXMtPlVwZGF0ZVN0YXR1c0JhcihjbTo6bnVsbG9wdCk7IH0KKyAgdm9pZCBVcGRhdGVTdGF0dXNCYXIoY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBtZXNzYWdlKTsKIAogICAvKioKICAgICogRGlzcGxheSBjdXJyZW50IGNvbW1hbmRzIGFuZCB0aGVpciBrZXlzIG9uIHRoZSB0b29sYmFyLiAgVGhpcwpAQCAtMTIyLDEwICsxMjUsMjQgQEAKICAgLy8gSnVtcCB0byB0aGUgY2FjaGUgZW50cnkgd2hvc2UgbmFtZSBtYXRjaGVzIHRoZSBzdHJpbmcuCiAgIHZvaWQgSnVtcFRvQ2FjaGVFbnRyeShjb25zdCBjaGFyKiBzdHIpOwogCisgIC8vIENsZWFyIGFuZCByZXNldCB0aGUgb3V0cHV0IGxvZyBhbmQgc3RhdGUKKyAgdm9pZCBSZXNldE91dHB1dHMoKTsKKworICAvLyBEaXNwbGF5IHRoZSBjdXJyZW50IHByb2dyZXNzIGFuZCBvdXRwdXQKKyAgdm9pZCBEaXNwbGF5T3V0cHV0cygpOworCiAgIC8vIENvcGllcyBvZiBjYWNoZSBlbnRyaWVzIHN0b3JlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UKICAgc3RkOjp2ZWN0b3I8Y21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlPiBFbnRyaWVzOwotICAvLyBFcnJvcnMgcHJvZHVjZWQgZHVyaW5nIGxhc3QgcnVuIG9mIGNtYWtlCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBFcnJvcnM7CisKKyAgLy8gVGhlIGZvcm0gdXNlZCB0byBkaXNwbGF5IGxvZ3MgZHVyaW5nIHByb2Nlc3NpbmcKKyAgc3RkOjp1bmlxdWVfcHRyPGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtPiBMb2dGb3JtOworICAvLyBPdXRwdXQgcHJvZHVjZWQgYnkgdGhlIGxhc3QgcGFzcworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gT3V0cHV0czsKKyAgLy8gRGlkIHRoZSBsYXN0IHBhc3MgcHJvZHVjZWQgb3V0cHV0cyBvZiBpbnRlcmVzdCAoZXJyb3JzLCB3YXJuaW5ncywgLi4uKQorICBib29sIEhhc05vblN0YXR1c091dHB1dHM7CisgIC8vIExhc3QgcHJvZ3Jlc3MgYmFyCisgIHN0ZDo6c3RyaW5nIExhc3RQcm9ncmVzczsKKwogICAvLyBDb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBjbWFrZSBlYWNoIHRpbWUKICAgLy8gaXQgaXMgcnVuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBBcmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc09wdGlvbnNXaWRnZXQuY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc09wdGlvbnNXaWRnZXQuY3h4CmluZGV4IGViNzczYWQuLmExNTI0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNPcHRpb25zV2lkZ2V0LmN4eAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzT3B0aW9uc1dpZGdldC5jeHgKQEAgLTIsNiArMiw3IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUN1cnNlc09wdGlvbnNXaWRnZXQuaCIKIAorI2luY2x1ZGUgImNtQ3Vyc2VzQ29sb3IuaCIKICNpbmNsdWRlICJjbUN1cnNlc1dpZGdldC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogCkBAIC0xNSw4ICsxNiwxMyBAQAogICAvLyB0aGVyZSBpcyBubyBvcHRpb24gdHlwZSwgYW5kIHN0cmluZyB0eXBlIGNhdXNlcyBjY21ha2UgdG8gY2FzdAogICAvLyB0aGUgd2lkZ2V0IGludG8gYSBzdHJpbmcgd2lkZ2V0IGF0IHNvbWUgcG9pbnQuICBCT09MIGlzIHNhZmUgZm9yCiAgIC8vIG5vdy4KLSAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIEFfTk9STUFMKTsKLSAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIEFfU1RBTkRPVVQpOworICBpZiAoY21DdXJzZXNDb2xvcjo6SGFzQ29sb3JzKCkpIHsKKyAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpPcHRpb25zKSk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6T3B0aW9ucykpOworICB9IGVsc2UgeworICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBBX05PUk1BTCk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIEFfU1RBTkRPVVQpOworICB9CiAgIGZpZWxkX29wdHNfb2ZmKHRoaXMtPkZpZWxkLCBPX1NUQVRJQyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNQYXRoV2lkZ2V0LmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNQYXRoV2lkZ2V0LmN4eAppbmRleCBiYjM4MDhlLi44ZWQ0MmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzUGF0aFdpZGdldC5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1BhdGhXaWRnZXQuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSAiY21DdXJzZXNDb2xvci5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzTWFpbkZvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc1N0cmluZ1dpZGdldC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtMTYsNiArMTcsMTMgQEAKICAgdGhpcy0+VHlwZSA9IGNtU3RhdGVFbnVtczo6UEFUSDsKICAgdGhpcy0+Q3ljbGUgPSBmYWxzZTsKICAgdGhpcy0+Q3VycmVudEluZGV4ID0gMDsKKyAgaWYgKGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7CisgICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6UGF0aCkpOworICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OlBhdGgpKTsKKyAgfSBlbHNlIHsKKyAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQV9OT1JNQUwpOworICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBBX1NUQU5ET1VUKTsKKyAgfQogfQogCiB2b2lkIGNtQ3Vyc2VzUGF0aFdpZGdldDo6T25UeXBlKGludCYga2V5LCBjbUN1cnNlc01haW5Gb3JtKiBmbSwgV0lORE9XKiB3KQpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1N0cmluZ1dpZGdldC5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmN4eAppbmRleCA2Mjk2YWYyLi5jNjI5NDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmN4eAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmN4eApAQCAtNCw2ICs0LDcgQEAKIAogI2luY2x1ZGUgPGNzdGRpbz4KIAorI2luY2x1ZGUgImNtQ3Vyc2VzQ29sb3IuaCIKICNpbmNsdWRlICJjbUN1cnNlc0Zvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc01haW5Gb3JtLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNTdGFuZGFyZEluY2x1ZGVzLmgiCkBAIC0yMSw4ICsyMiwxMyBAQAogewogICB0aGlzLT5JbkVkaXQgPSBmYWxzZTsKICAgdGhpcy0+VHlwZSA9IGNtU3RhdGVFbnVtczo6U1RSSU5HOwotICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQV9OT1JNQUwpOwotICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQV9TVEFORE9VVCk7CisgIGlmIChjbUN1cnNlc0NvbG9yOjpIYXNDb2xvcnMoKSkgeworICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OlN0cmluZykpOworICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OlN0cmluZykpOworICB9IGVsc2UgeworICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBBX05PUk1BTCk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIEFfU1RBTkRPVVQpOworICB9CiAgIGZpZWxkX29wdHNfb2ZmKHRoaXMtPkZpZWxkLCBPX1NUQVRJQyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci8uZ2l0YXR0cmlidXRlcyBiL1NvdXJjZS9MZXhlclBhcnNlci8uZ2l0YXR0cmlidXRlcwppbmRleCBiZjcwMjQ5Li42M2Q5YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvLmdpdGF0dHJpYnV0ZXMKKysrIGIvU291cmNlL0xleGVyUGFyc2VyLy5naXRhdHRyaWJ1dGVzCkBAIC0xNiw0ICsxNiw2IEBACiAvY21Gb3J0cmFuTGV4ZXIuaCAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZAogL2NtRm9ydHJhblBhcnNlci5jeHggICAgICAgICAgICAgICBnZW5lcmF0ZWQKIC9jbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCAgICAgICAgICAgZ2VuZXJhdGVkCisvY21HY2NEZXBmaWxlTGV4ZXIuY3h4ICAgICAgICAgICAgIGdlbmVyYXRlZAorL2NtR2NjRGVwZmlsZUxleGVyLmggICAgICAgICAgICAgICBnZW5lcmF0ZWQKIC9jbUxpc3RGaWxlTGV4ZXIuYyAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IGIvU291cmNlL0xleGVyUGFyc2VyL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eAppbmRleCBhZTdmYjQyLi4zNGRjOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgKQEAgLTEsNCArMSw0IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4zLjIuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNC4yLiAgKi8KIAogLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKIApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4zLjIiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTcyLDcgKzcyLDcgQEAKIAogCiAvKiBGaXJzdCBwYXJ0IG9mIHVzZXIgcHJvbG9ndWUuICAqLwotI2xpbmUgMSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjMzNyAgKi8KKyNsaW5lIDEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KQEAgLTEzNCw3ICsxMzQsOCBAQAogIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgogI2VuZGlmCiAKLSNsaW5lIDEzOCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MzM3ICAqLworI2xpbmUgMTM4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCisKICMgaWZuZGVmIFlZX05VTExQVFIKICMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKICMgICBpZiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCkBAIC0xNTUsOCArMTU2LDggQEAKICMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCiAjZW5kaWYKIAotLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBCaXNvbiwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKLSAgIGJ5ICNpbmNsdWRlICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oIi4gICovCisvKiBVc2UgYXBpLmhlYWRlci5pbmNsdWRlIHRvICNpbmNsdWRlIHRoaXMgaGVhZGVyCisgICBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuICAqLwogI2lmbmRlZiBZWV9DTUNPTU1BTkRBUkdVTUVOVF9ZWV9DTUNPTU1BTkRBUkdVTUVOVFBBUlNFUlRPS0VOU19IX0lOQ0xVREVECiAjIGRlZmluZSBZWV9DTUNPTU1BTkRBUkdVTUVOVF9ZWV9DTUNPTU1BTkRBUkdVTUVOVFBBUlNFUlRPS0VOU19IX0lOQ0xVREVECiAvKiBEZWJ1ZyB0cmFjZXMuICAqLwpAQCAtMzEwLDYgKzMxMSw4IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIFlZX0FTU0VSVChFKSAoKHZvaWQpICgwICYmIChFKSkpCisKICNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIAogLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwpAQCAtNzAwLDcgKzcwMyw5IEBACiAgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCiAgICAgWVlQUklOVCAoeXlvLCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwogIyBlbmRpZgorICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICBZWVVTRSAoeXl0eXBlKTsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECiB9CiAKIApAQCAtMTEzOCw2ICsxMTQzLDggQEAKIHwgeXluZXdzdGF0ZSAtLSBzZXQgY3VycmVudCBzdGF0ZSAodGhlIHRvcCBvZiB0aGUgc3RhY2spIHRvIHl5c3RhdGUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXlzZXRzdGF0ZToKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKyAgWVlfQVNTRVJUICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8IFlZTlNUQVRFUyk7CiAgICp5eXNzcCA9ICh5eXR5cGVfaW50MTYpIHl5c3RhdGU7CiAKICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCkBAIC0xMjAwLDggKzEyMDcsNiBAQAogICAgIH0KICNlbmRpZiAvKiAhZGVmaW5lZCB5eW92ZXJmbG93ICYmICFkZWZpbmVkIFlZU1RBQ0tfUkVMT0NBVEUgKi8KIAotICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCiAgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCiAgICAgWVlBQ0NFUFQ7CiAKQEAgLTEyNjksNyArMTI3NCw2IEBACiAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgICorK3l5dnNwID0geXlsdmFsOwogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLQogICBnb3RvIHl5bmV3c3RhdGU7CiAKIApAQCAtMTMwNCwxOTMgKzEzMDgsMTk0IEBACiAgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKICAgc3dpdGNoICh5eW4pCiAgICAgewotICAgICAgICBjYXNlIDI6Ci0jbGluZSA5OSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisgIGNhc2UgMjoKKyNsaW5lIDk5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IDA7CiAgICAgeXlHZXRQYXJzZXItPlNldFJlc3VsdCgoeXl2c3BbMF0uc3RyKSk7CiAgIH0KLSNsaW5lIDEzMTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzE4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOgotI2xpbmUgMTA1ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEwNSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTMyMiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzMjYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ6Ci0jbGluZSAxMDggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTA4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5Db21iaW5lVW5pb25zKCh5eXZzcFstMV0uc3RyKSwgKHl5dnNwWzBdLnN0cikpOwogICB9Ci0jbGluZSAxMzMwICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMzNCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKLSNsaW5lIDExMyAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTMgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5zdHIpID0gMDsKICAgfQotI2xpbmUgMTMzOCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNDIgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDY6Ci0jbGluZSAxMTYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTE2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5Db21iaW5lVW5pb25zKCh5eXZzcFstMV0uc3RyKSwgKHl5dnNwWzBdLnN0cikpOwogICB9Ci0jbGluZSAxMzQ2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM1MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKLSNsaW5lIDEyMSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5zdHIpID0gKHl5dnNwWzBdLnN0cik7CiAgIH0KLSNsaW5lIDEzNTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzU4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMTI0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEyNCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTM2MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNjYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDk6Ci0jbGluZSAxMjkgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTI5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzcwICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM3NCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6Ci0jbGluZSAxMzIgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzc4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM4MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6Ci0jbGluZSAxMzUgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM1ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzg2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM5MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6Ci0jbGluZSAxMzggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzk0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM5OCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM6Ci0jbGluZSAxNDEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQxICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxNDAyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQwNiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6Ci0jbGluZSAxNDQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxNDEwICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQxNCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAxNDkgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRTcGVjaWFsVmFyaWFibGUoKHl5dnNwWy0yXS5zdHIpLCAoeXl2c3BbLTFdLnN0cikpOwogICB9Ci0jbGluZSAxNDE4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQyMiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6Ci0jbGluZSAxNTIgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTUyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRTcGVjaWFsVmFyaWFibGUoKHl5dnNwWy0yXS5zdHIpLCAoeXl2c3BbLTFdLnN0cikpOwogICB9Ci0jbGluZSAxNDI2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQzMCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6Ci0jbGluZSAxNTUgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU1ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRWYXJpYWJsZSgoeXl2c3BbLTFdLnN0cikpOwogICB9Ci0jbGluZSAxNDM0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQzOCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAxNTggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRWYXJpYWJsZUZvckF0KCh5eXZzcFswXS5zdHIpKTsKICAgfQotI2xpbmUgMTQ0MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NDYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE5OgotI2xpbmUgMTYzICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MyAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTQ1MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTY2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbLTFdLnN0cik7CiAgIH0KLSNsaW5lIDE0NTggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDYyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMToKLSNsaW5lIDE3MSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5zdHIpID0gMDsKICAgfQotI2xpbmUgMTQ2NiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NzAgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIyOgotI2xpbmUgMTc0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSB5eUdldFBhcnNlci0+Q29tYmluZVVuaW9ucygoeXl2c3BbLTFdLnN0ciksICh5eXZzcFswXS5zdHIpKTsKICAgfQotI2xpbmUgMTQ3NCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NzggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMTc5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3OSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTQ4MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0ODYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0OgotI2xpbmUgMTgyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE4MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTQ5MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0OTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogCi0jbGluZSAxNDk0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ5OCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgorCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcwpAQCAtMTcyMyw3ICsxNzI4LDcgQEAKICNlbmRpZgogICByZXR1cm4geXlyZXN1bHQ7CiB9Ci0jbGluZSAxODcgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxOTE4ICAqLworI2xpbmUgMTg3ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogCiAvKiBFbmQgb2YgZ3JhbW1hciAqLwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Db21tYW5kQXJndW1lbnRQYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oCmluZGV4IDU2Yzk3OTQuLjAzM2I4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21EZXBlbmRzSmF2YVBhcnNlci5jeHggYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21EZXBlbmRzSmF2YVBhcnNlci5jeHgKaW5kZXggNmMxZmIyYy4uYjE1MDgyZCAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtRGVwZW5kc0phdmFQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbURlcGVuZHNKYXZhUGFyc2VyLmN4eApAQCAtMSw0ICsxLDQgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjMuMi4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy40LjIuICAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCkBAIC00OCw3ICs0OCw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjMuMiIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjQuMiIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNzIsNyArNzIsNyBAQAogCiAKIC8qIEZpcnN0IHBhcnQgb2YgdXNlciBwcm9sb2d1ZS4gICovCi0jbGluZSAxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzozMzcgICovCisjbGluZSAxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KQEAgLTEyMyw3ICsxMjMsOCBAQAogIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgogI2VuZGlmCiAKLSNsaW5lIDEyNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzozMzcgICovCisjbGluZSAxMjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgorCiAjIGlmbmRlZiBZWV9OVUxMUFRSCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCiAjICAgaWYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cwpAQCAtMTQ0LDggKzE0NSw4IEBACiAjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQogI2VuZGlmCiAKLS8qIEluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgQmlzb24sIHRoaXMgc2VjdGlvbiB3aWxsIGJlIHJlcGxhY2VkCi0gICBieSAjaW5jbHVkZSAiY21EZXBlbmRzSmF2YVBhcnNlclRva2Vucy5oIi4gICovCisvKiBVc2UgYXBpLmhlYWRlci5pbmNsdWRlIHRvICNpbmNsdWRlIHRoaXMgaGVhZGVyCisgICBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuICAqLwogI2lmbmRlZiBZWV9DTURFUEVORFNKQVZBX1lZX0NNREVQRU5EU0pBVkFQQVJTRVJUT0tFTlNfSF9JTkNMVURFRAogIyBkZWZpbmUgWVlfQ01ERVBFTkRTSkFWQV9ZWV9DTURFUEVORFNKQVZBUEFSU0VSVE9LRU5TX0hfSU5DTFVERUQKIC8qIERlYnVnIHRyYWNlcy4gICovCkBAIC00ODEsNiArNDgyLDggQEAKICNlbmRpZgogCiAKKyNkZWZpbmUgWVlfQVNTRVJUKEUpICgodm9pZCkgKDAgJiYgKEUpKSkKKwogI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQogCiAvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCkBAIC0xNjg1LDcgKzE2ODgsOSBAQAogICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQogICAgIFlZUFJJTlQgKHl5bywgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKICMgZW5kaWYKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgWVlVU0UgKHl5dHlwZSk7CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogfQogCiAKQEAgLTIxMjMsNiArMjEyOCw4IEBACiB8IHl5bmV3c3RhdGUgLS0gc2V0IGN1cnJlbnQgc3RhdGUgKHRoZSB0b3Agb2YgdGhlIHN0YWNrKSB0byB5eXN0YXRlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5c2V0c3RhdGU6CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisgIFlZX0FTU0VSVCAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPCBZWU5TVEFURVMpOwogICAqeXlzc3AgPSAoeXl0eXBlX2ludDE2KSB5eXN0YXRlOwogCiAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQpAQCAtMjE4NSw4ICsyMTkyLDYgQEAKICAgICB9CiAjZW5kaWYgLyogIWRlZmluZWQgeXlvdmVyZmxvdyAmJiAhZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFICovCiAKLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQogICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCkBAIC0yMjU0LDcgKzIyNTksNiBAQAogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICAqKyt5eXZzcCA9IHl5bHZhbDsKICAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi0KICAgZ290byB5eW5ld3N0YXRlOwogCiAKQEAgLTIyODksMjE1ICsyMjkzLDIxNSBAQAogICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgICAgY2FzZSAyOgotI2xpbmUgMTgzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworICBjYXNlIDI6CisjbGluZSAxODMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDIzMDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIzMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKLSNsaW5lIDE5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjMxMiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjMxNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0OgotI2xpbmUgMjAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyMzIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDU6Ci0jbGluZSAyMDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDIzMzQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIzMzggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDIxNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjM0NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM0OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgotI2xpbmUgMjI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyMzU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDg6Ci0jbGluZSAyMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDIzNjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIzNzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKLSNsaW5lIDI0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjM3OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM4MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKLSNsaW5lIDI0OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjM4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM5MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDI1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjQwMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQwNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKLSNsaW5lIDI2NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjQxMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQxNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKLSNsaW5lIDI3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiB9Ci0jbGluZSAyNDE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0OgotI2xpbmUgMjgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKIH0KLSNsaW5lIDI0MjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAyODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogfQotI2xpbmUgMjQzNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQzOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKLSNsaW5lIDI5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiB9Ci0jbGluZSAyNDQzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDQ3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3OgotI2xpbmUgMjk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKIH0KLSNsaW5lIDI0NTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0NTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAzMDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogfQotI2xpbmUgMjQ1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQ2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKLSNsaW5lIDMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiB9Ci0jbGluZSAyNDY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDcxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMzEwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKIH0KLSNsaW5lIDI0NzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0NzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6Ci0jbGluZSAzMTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI0ODYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0OTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6Ci0jbGluZSAzMjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI0OTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1MDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM6Ci0jbGluZSAzMzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcFN0b3JlQ2xhc3MoKHl5dnNwWzBdLnN0cikpOwpAQCAtMjUwNSw0NCArMjUwOSw0NCBAQAogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTEzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0OgotI2xpbmUgMzQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1OgotI2xpbmUgMzUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTMxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2OgotI2xpbmUgMzYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI3OgotI2xpbmUgMzY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBTdG9yZUNsYXNzKCh5eXZzcFstMV0uc3RyKSk7CkBAIC0yNTUwLDU2ICsyNTU0LDU2IEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI1NTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg6Ci0jbGluZSAzNzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogfQotI2xpbmUgMjU2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjU2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyOToKLSNsaW5lIDM4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDM4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgICh5eXZhbC5zdHIpID0gKHl5dnNwWzBdLnN0cik7CiB9Ci0jbGluZSAyNTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwOgotI2xpbmUgMzkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKIH0KLSNsaW5lIDI1ODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1ODUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzE6Ci0jbGluZSAzOTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogfQotI2xpbmUgMjU5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjU5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMjoKLSNsaW5lIDQwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgICh5eXZhbC5zdHIpID0gKHl5dnNwWzBdLnN0cik7CiB9Ci0jbGluZSAyNTk5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNjAzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzOgotI2xpbmUgNDEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkFkZENsYXNzRm91bmQoKHl5dnNwWy0yXS5zdHIpKTsKQEAgLTI2MDcsMTEgKzI2MTEsMTEgQEAKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0yXS5zdHIpKSk7CiAgICh5eXZhbC5zdHIpID0gY29uc3RfY2FzdDxjaGFyKj4oeXlHZXRQYXJzZXItPkdldEN1cnJlbnRDb21iaW5lKCkpOwogfQotI2xpbmUgMjYxMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjYxNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDoKLSNsaW5lIDQyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwU3RvcmVDbGFzcygoeXl2c3BbLTJdLnN0cikpOwpAQCAtMjYyMCwxMSArMjYyNCwxMSBAQAogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNjI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNjI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDM1OgotI2xpbmUgNDMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBTdG9yZUNsYXNzKCh5eXZzcFstMl0uc3RyKSk7CkBAIC0yNjMzLDExOCArMjYzNywxMTggQEAKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjYzNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY0MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKLSNsaW5lIDQ0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY0OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY1MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNzoKLSNsaW5lIDQ1MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzODoKLSNsaW5lIDQ1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY3MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY3NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToKLSNsaW5lIDQ2NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY4MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MDoKLSNsaW5lIDQ3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI2OTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2OTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6Ci0jbGluZSA0ODIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0ODIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI3MDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI3MDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNDI6Ci0jbGluZSA0OTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQzOgotI2xpbmUgNDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ0OgotI2xpbmUgNTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjczMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjczNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NToKLSNsaW5lIDUxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjc0NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjc0OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NjoKLSNsaW5lIDUyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50UGFja2FnZSgoeXl2c3BbLTFdLnN0cikpOwpAQCAtMjc1NCwzMyArMjc1OCwzMyBAQAogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ3OgotI2xpbmUgNTMzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTMzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzczICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ4OgotI2xpbmUgNTQxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTQxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ5OgotI2xpbmUgNTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkFkZFBhY2thZ2VzSW1wb3J0KCh5eXZzcFstMV0uc3RyKSk7CkBAIC0yNzkwLDExICsyNzk0LDExIEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI3OTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI3OTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTA6Ci0jbGluZSA1NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBzdGQ6OnN0cmluZyBzdHIgPSAoeXl2c3BbLTNdLnN0cik7CkBAIC0yODA1LDc3ICsyODA5LDc3IEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTE6Ci0jbGluZSA1NzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4MjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4MjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTI6Ci0jbGluZSA1ODMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4MzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4MzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTM6Ci0jbGluZSA1OTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4NDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTQ6Ci0jbGluZSA2MDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4NTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTU6Ci0jbGluZSA2MDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4NjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6Ci0jbGluZSA2MjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIHl5R2V0UGFyc2VyLT5TdGFydENsYXNzKCh5eXZzcFswXS5zdHIpKTsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKIH0KLSNsaW5lIDI4NzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjg6Ci0jbGluZSA2MzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC0yODgzLDExICsyODg3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAgIHl5R2V0UGFyc2VyLT5FbmRDbGFzcygpOwogfQotI2xpbmUgMjg4NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjg5MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToKLSNsaW5lIDY0MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY0MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTI4OTUsMTEgKzI4OTksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKICAgeXlHZXRQYXJzZXItPkVuZENsYXNzKCk7CiB9Ci0jbGluZSAyODk5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTAzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDcwOgotI2xpbmUgNjUxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjUxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMjkwNywxMSArMjkxMSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogICB5eUdldFBhcnNlci0+RW5kQ2xhc3MoKTsKIH0KLSNsaW5lIDI5MTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI5MTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzE6Ci0jbGluZSA2NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICBqcENoZWNrRW1wdHkoNCk7CkBAIC0yOTE5LDIyNiArMjkyMywyMjYgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKICAgeXlHZXRQYXJzZXItPkVuZENsYXNzKCk7CiB9Ci0jbGluZSAyOTIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDcyOgotI2xpbmUgNjY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjkzMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjkzNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3MzoKLSNsaW5lIDY3NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY3NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk0NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk0OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoKLSNsaW5lIDY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NToKLSNsaW5lIDY5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk2NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk3MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NjoKLSNsaW5lIDcwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk3NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk4MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NzoKLSNsaW5lIDcxMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcxMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk4OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk5MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKLSNsaW5lIDcyMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcyMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzAwMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OToKLSNsaW5lIDcyOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcyOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwMDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwMTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODA6Ci0jbGluZSA3MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwMjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwMjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODE6Ci0jbGluZSA3NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwMzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwMzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODI6Ci0jbGluZSA3NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODM6Ci0jbGluZSA3NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODQ6Ci0jbGluZSA3NjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6Ci0jbGluZSA3NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6Ci0jbGluZSA3ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwODYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwOTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODc6Ci0jbGluZSA3OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogfQotI2xpbmUgMzA5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA5OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4ODoKLSNsaW5lIDgwMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgwMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzEwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEwOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OToKLSNsaW5lIDgwOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgwOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzExNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEyMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MDoKLSNsaW5lIDgxNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgxNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzEyNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEzMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKLSNsaW5lIDgyNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgyNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzEzOCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE0MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKLSNsaW5lIDgzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CkBAIC0zMTQ2LDc3ICszMTUwLDc3IEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxNTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxNTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6Ci0jbGluZSA4NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxNjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxNjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTQ6Ci0jbGluZSA4NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxNzIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxNzYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTU6Ci0jbGluZSA4NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxODMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxODcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTY6Ci0jbGluZSA4NjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxOTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxOTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6Ci0jbGluZSA4NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMyMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyMDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTg6Ci0jbGluZSA4ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMyMTYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyMjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6Ci0jbGluZSA4OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICBqcENoZWNrRW1wdHkoNCk7CkBAIC0zMjI0LDExICszMjI4LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyMjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyMzIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAwOgotI2xpbmUgOTAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtMzIzNiwyMiArMzI0MCwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzMjQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMjQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEwMToKLSNsaW5lIDkxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDkxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzI1MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzI1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6Ci0jbGluZSA5MjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5MjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC0zMjU5LDExICszMjYzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyNjMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyNjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAzOgotI2xpbmUgOTMwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTMwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0zXS5zdHIpKSk7CkBAIC0zMjcyLDQwICszMjc2LDQwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyNzYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyODAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA0OgotI2xpbmUgOTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKIAogfQotI2xpbmUgMzI4NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzI4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6Ci0jbGluZSA5NDYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5NDYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyOTYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMzMDAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA3OgotI2xpbmUgOTU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKIAogfQotI2xpbmUgMzMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzMwOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6Ci0jbGluZSA5NjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5NjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC0zMzEzLDExICszMzE3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMzMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMzMjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA5OgotI2xpbmUgOTczICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTczICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzMyNSwxMSArMzMyOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzMzI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMzMzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExMDoKLSNsaW5lIDk4MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDk4MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTMzMzcsMjAgKzMzNDEsMjAgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM0MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM0NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTE6Ci0jbGluZSA5OTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5OTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogCiB9Ci0jbGluZSAzMzUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMzU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExMjoKLSNsaW5lIDk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTMzNTgsMTEgKzMzNjIsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM2MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM2NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTM6Ci0jbGluZSAxMDA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAwOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTMzNzAsMTEgKzMzNzQsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM3NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM3OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTQ6Ci0jbGluZSAxMDE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAxOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTMzODIsMTEgKzMzODYsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM4NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTU6Ci0jbGluZSAxMDI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAyOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIGpwQ2hlY2tFbXB0eSg0KTsKQEAgLTMzOTQsMTEgKzMzOTgsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM5OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzQwMiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTY6Ci0jbGluZSAxMDM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAzOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAgIGpwQ2hlY2tFbXB0eSg1KTsKQEAgLTM0MDYsMTEgKzM0MTAsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzQxMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzQxNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTc6Ci0jbGluZSAxMDQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTA0OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFstM10uc3RyKSkpOwpAQCAtMzQxOSwxMSArMzQyMywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExODoKLSNsaW5lIDEwNTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtMzQzMSwyMiArMzQzNSwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDM5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExOToKLSNsaW5lIDEwNjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKLSNsaW5lIDEwNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzQ1NCwxMSArMzQ1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMToKLSNsaW5lIDEwODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg1KTsKICAganBDaGVja0VtcHR5KDUpOwpAQCAtMzQ2NiwxMSArMzQ3MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMjoKLSNsaW5lIDEwOTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg1KTsKICAganBDaGVja0VtcHR5KDUpOwpAQCAtMzQ3OCwyMiArMzQ4MiwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMzoKLSNsaW5lIDExMDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICB5eUdldFBhcnNlci0+U3RhcnRDbGFzcygoeXl2c3BbMF0uc3RyKSk7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbMF0uc3RyKSkpOwogICBqcENoZWNrRW1wdHkoMyk7CiB9Ci0jbGluZSAzNDkzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyNDoKLSNsaW5lIDExMTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzUwMSwyMSArMzUwNSwyMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogICB5eUdldFBhcnNlci0+RW5kQ2xhc3MoKTsKIH0KLSNsaW5lIDM1MDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDM1MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgotI2xpbmUgMTEyMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDExMjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAzNTE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKLSNsaW5lIDExMzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTMwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzUyMywxMSArMzUyNywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTMxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKLSNsaW5lIDExNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzUzNSwxMSArMzUzOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTM5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTQzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyODoKLSNsaW5lIDExNDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTQ5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzU0NywxMSArMzU1MSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTUxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTU1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyOToKLSNsaW5lIDExNTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzU1OSwzMyArMzU2MywzMyBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTYzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMDoKLSNsaW5lIDExNjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMToKLSNsaW5lIDExNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTg1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMjoKLSNsaW5lIDExODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTg1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzU5MywxMSArMzU5NywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjAxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKLSNsaW5lIDExOTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzYwNSwxMSArMzYwOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjEzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNDoKLSNsaW5lIDEyMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzYxNywyMiArMzYyMSwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjIxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjI1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNToKLSNsaW5lIDEyMTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNjoKLSNsaW5lIDEyMjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjIwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzY0MCwyMiArMzY0NCwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNzoKLSNsaW5lIDEyMjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjU1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzODoKLSNsaW5lIDEyMzggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzY2MywxMSArMzY2NywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjcxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzOToKLSNsaW5lIDEyNDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzY3NSwxMSArMzY3OSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjc5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjgzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKLSNsaW5lIDEyNTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzY4NywxMSArMzY5MSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjkxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MToKLSNsaW5lIDEyNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzY5OSwxMSArMzcwMywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzAzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MjoKLSNsaW5lIDEyNzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjc3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzcxMSwyMiArMzcxNSwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MzoKLSNsaW5lIDEyODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzMwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NDoKLSNsaW5lIDEyOTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzczNCwxMSArMzczOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NToKLSNsaW5lIDEzMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzc0NiwxMSArMzc1MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NjoKLSNsaW5lIDEzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzEzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzc1OCwxMSArMzc2MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NzoKLSNsaW5lIDEzMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzIyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzc3MCwzMyArMzc3NCwzMyBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0ODoKLSNsaW5lIDEzMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzMyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzg1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0OToKLSNsaW5lIDEzNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODAwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MDoKLSNsaW5lIDEzNDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzgwNCwxMSArMzgwOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MToKLSNsaW5lIDEzNTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzgxNiwxMSArMzgyMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKLSNsaW5lIDEzNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzgyOCwxMSArMzgzMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKLSNsaW5lIDEzNzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzc3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzg0MCwxMSArMzg0NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NDoKLSNsaW5lIDEzODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzg1MiwxMSArMzg1NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NToKLSNsaW5lIDEzOTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzg2NCwxMSArMzg2OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NjoKLSNsaW5lIDE0MDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzg3NiwxMSArMzg4MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKLSNsaW5lIDE0MTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzg4OCwxMSArMzg5MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKLSNsaW5lIDE0MjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzkwMCwxMSArMzkwNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1OToKLSNsaW5lIDE0MzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzkxMiwxMSArMzkxNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MDoKLSNsaW5lIDE0NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzkyNCwxMSArMzkyOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MToKLSNsaW5lIDE0NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzkzNiwxMSArMzk0MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MjoKLSNsaW5lIDE0NjEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk0OCwxMSArMzk1MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTUyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MzoKLSNsaW5lIDE0NzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDcwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk2MCwxMSArMzk2NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTY0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NDoKLSNsaW5lIDE0NzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDc5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk3MiwxMSArMzk3NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NToKLSNsaW5lIDE0ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk4NCwxMSArMzk4OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NjoKLSNsaW5lIDE0OTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk5NiwxMSArNDAwMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDAwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NzoKLSNsaW5lIDE1MDcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDAwOCwxMSArNDAxMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2ODoKLSNsaW5lIDE1MTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDAyMCwxMSArNDAyNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2OToKLSNsaW5lIDE1MjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTI1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDAzMiwxMSArNDAzNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKLSNsaW5lIDE1MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA0NCwxMSArNDA0OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDUyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MToKLSNsaW5lIDE1NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA1NiwxMSArNDA2MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDY0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MjoKLSNsaW5lIDE1NTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA2OCwxMSArNDA3MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKLSNsaW5lIDE1NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA4MCwxMSArNDA4NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NDoKLSNsaW5lIDE1NzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTcxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA5MiwxMSArNDA5NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTAwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NToKLSNsaW5lIDE1ODAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDEwNCwxMSArNDEwOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NjoKLSNsaW5lIDE1ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDExNiwxMSArNDEyMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NzoKLSNsaW5lIDE1OTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDEyOCwxMSArNDEzMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3ODoKLSNsaW5lIDE2MDcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE0MCwxMSArNDE0NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3OToKLSNsaW5lIDE2MTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE1MiwxMSArNDE1NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MDoKLSNsaW5lIDE2MjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjI1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE2NCwxMSArNDE2OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MToKLSNsaW5lIDE2MzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE3NiwxMSArNDE4MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MjoKLSNsaW5lIDE2NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE4OCwxMSArNDE5MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKLSNsaW5lIDE2NTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0yXS5zdHIpKSk7CkBAIC00MjAxLDExICs0MjA1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgotI2xpbmUgMTY2NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC00MjEzLDExICs0MjE3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg1OgotI2xpbmUgMTY3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC00MjI1LDExICs0MjI5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyMjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg2OgotI2xpbmUgMTY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjM3LDExICs0MjQxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyNDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg3OgotI2xpbmUgMTY5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjQ5LDExICs0MjUzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyNTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgotI2xpbmUgMTcwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjYxLDExICs0MjY1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyNjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg5OgotI2xpbmUgMTcxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjczLDExICs0Mjc3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkwOgotI2xpbmUgMTcyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MjEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00Mjg1LDExICs0Mjg5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyODkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyOTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkxOgotI2xpbmUgMTczMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00Mjk3LDExICs0MzAxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgotI2xpbmUgMTczOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MzA5LDExICs0MzEzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkzOgotI2xpbmUgMTc0OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBqcENoZWNrRW1wdHkoNSk7CkBAIC00MzIxLDExICs0MzI1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzMjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk0OgotI2xpbmUgMTc1OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDcpOwogICBqcENoZWNrRW1wdHkoNyk7CkBAIC00MzMzLDExICs0MzM3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzNDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk1OgotI2xpbmUgMTc2OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDcpOwogICBqcENoZWNrRW1wdHkoNyk7CkBAIC00MzQ1LDQwICs0MzQ5LDQwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzNDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgotI2xpbmUgMTc3OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogCiB9Ci0jbGluZSA0MzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MzYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE5NzoKLSNsaW5lIDE3ODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKIAogfQotI2xpbmUgNDM2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDM3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6Ci0jbGluZSAxNzkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTc5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDM3OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDM4MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTk6Ci0jbGluZSAxODAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgwMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQzODYsMjIgKzQzOTAsMjIgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDM5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDM5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDA6Ci0jbGluZSAxODA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgwOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQwMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDE6Ci0jbGluZSAxODE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgxNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0MDksMTEgKzQ0MTMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQxMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQxNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDI6Ci0jbGluZSAxODI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgyNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0MjEsMTEgKzQ0MjUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQyNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQyOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDM6Ci0jbGluZSAxODM3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgzNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQ0MzMsMTEgKzQ0MzcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQzNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ0MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDQ6Ci0jbGluZSAxODQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg0NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0NDUsMTEgKzQ0NDksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQ0OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ1MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDU6Ci0jbGluZSAxODU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg1NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ0NTcsMTEgKzQ0NjEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQ2MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ2NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDY6Ci0jbGluZSAxODY1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg2NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0NjksNTggKzQ0NzMsNTggQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQ3MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ3NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDc6Ci0jbGluZSAxODc1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAKIH0KLSNsaW5lIDQ0ODIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ0ODYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA4OgotI2xpbmUgMTg4MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE4ODIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogCiB9Ci0jbGluZSA0NDkxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0NDk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOToKLSNsaW5lIDE4ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxODg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg3KTsKIAogfQotI2xpbmUgNDUwMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDUwNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMTA6Ci0jbGluZSAxODk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg5NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoOSk7CiAKIH0KLSNsaW5lIDQ1MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjExOgotI2xpbmUgMTkwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1MjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjEyOgotI2xpbmUgMTkxMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTI4LDIyICs0NTMyLDIyIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1MzIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MzYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjEzOgotI2xpbmUgMTkyMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NDMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1NDcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE0OgotI2xpbmUgMTkyOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTUxLDMzICs0NTU1LDMzIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1NTkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE1OgotI2xpbmUgMTkzOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDkpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NjYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1NzAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE2OgotI2xpbmUgMTk0NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NDcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1ODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE3OgotI2xpbmUgMTk1NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTg1LDExICs0NTg5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1ODkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1OTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE4OgotI2xpbmUgMTk2NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTk3LDExICs0NjAxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2MDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE5OgotI2xpbmUgMTk3NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NjA5LDExICs0NjEzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2MTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIwOgotI2xpbmUgMTk4NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5ODQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NjIxLDExICs0NjI1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2MjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIxOgotI2xpbmUgMTk5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NjMzLDExICs0NjM3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIyOgotI2xpbmUgMjAwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC00NjQ1LDExICs0NjQ5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2NDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIzOgotI2xpbmUgMjAxMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC00NjU3LDExICs0NjYxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2NjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI0OgotI2xpbmUgMjAyMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBqcENoZWNrRW1wdHkoNSk7CkBAIC00NjY5LDExICs0NjczLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2NzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI1OgotI2xpbmUgMjAzMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTFdLnN0cikpKTsKQEAgLTQ2ODIsMzEgKzQ2ODYsMzEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDY4NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDY5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjY6Ci0jbGluZSAyMDQyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA0MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDY5NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDcwMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjc6Ci0jbGluZSAyMDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA1MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAKIH0KLSNsaW5lIDQ3MDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ3MTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI4OgotI2xpbmUgMjA1NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwNTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTFdLnN0cikpKTsKQEAgLTQ3MTUsMTEgKzQ3MTksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDcxOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDcyMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjk6Ci0jbGluZSAyMDY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA2OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ3MjcsMTEgKzQ3MzEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDczMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDczNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzA6Ci0jbGluZSAyMDc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA3OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ3MzksMTEgKzQ3NDMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc0MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc0NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzE6Ci0jbGluZSAyMDg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA4OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAgIGpwQ2hlY2tFbXB0eSg1KTsKQEAgLTQ3NTEsMTEgKzQ3NTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzI6Ci0jbGluZSAyMDk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA5OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ3NjMsMTEgKzQ3NjcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzM6Ci0jbGluZSAyMTA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjEwNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIGpwQ2hlY2tFbXB0eSg0KTsKQEAgLTQ3NzUsMjIgKzQ3NzksMjIgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc3OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc4MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzQ6Ci0jbGluZSAyMTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjExNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzU6Ci0jbGluZSAyMTI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjEyNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQ3OTgsMTEgKzQ4MDIsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDgwMiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDgwNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzY6Ci0jbGluZSAyMTM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjEzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQ4MTAsMTEgKzQ4MTQsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDgxNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDgxOCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzc6Ci0jbGluZSAyMTQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjE0MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ4MjIsMjAgKzQ4MjYsMjAgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDgyNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDgzMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzg6Ci0jbGluZSAyMTUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjE1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAKIH0KLSNsaW5lIDQ4MzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4MzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM5OgotI2xpbmUgMjE2MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC00ODQzLDExICs0ODQ3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4NDcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4NTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQwOgotI2xpbmUgMjE3MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00ODU1LDExICs0ODU5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4NTkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4NjMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQxOgotI2xpbmUgMjE3OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00ODY3LDExICs0ODcxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4NzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4NzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQyOgotI2xpbmUgMjE4OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00ODc5LDIwICs0ODgzLDIwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4ODMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4ODcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQzOgotI2xpbmUgMjE5OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxOTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogCiB9Ci0jbGluZSA0ODkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0ODk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NDoKLSNsaW5lIDIyMDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNDkwMCwxMSArNDkwNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NToKLSNsaW5lIDIyMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjEzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDkxMiwxMSArNDkxNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NjoKLSNsaW5lIDIyMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjIyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDkyNCwxMSArNDkyOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NzoKLSNsaW5lIDIyMzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDkzNiwxMSArNDk0MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0ODoKLSNsaW5lIDIyNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDk0OCwxMSArNDk1MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTUyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0OToKLSNsaW5lIDIyNTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg2KTsKICAganBDaGVja0VtcHR5KDYpOwpAQCAtNDk2MCwyMiArNDk2NCwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTY0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MDoKLSNsaW5lIDIyNTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTc1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTc5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MToKLSNsaW5lIDIyNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDk4MywyMiArNDk4NywyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTg3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTkxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MjoKLSNsaW5lIDIyNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MzoKLSNsaW5lIDIyODQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTAwNiwxMSArNTAxMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NDoKLSNsaW5lIDIyOTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTAxOCwxMSArNTAyMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NToKLSNsaW5lIDIzMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTAzMCwxMSArNTAzNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NjoKLSNsaW5lIDIzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzEzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA0MiwxMSArNTA0NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NzoKLSNsaW5lIDIzMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzIyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA1NCwxMSArNTA1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1ODoKLSNsaW5lIDIzMzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA2NiwxMSArNTA3MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1OToKLSNsaW5lIDIzNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA3OCwyMiArNTA4MiwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MDoKLSNsaW5lIDIzNDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzQ5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDkzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MToKLSNsaW5lIDIzNTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTEwMSwxMSArNTEwNSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MjoKLSNsaW5lIDIzNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTExMywxMSArNTExNywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTIxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MzoKLSNsaW5lIDIzNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtNTEyNSwxMSArNTEyOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTMzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2NDoKLSNsaW5lIDIzODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTEzNywyOSArNTE0MSwyOSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTQxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTQ1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2NToKLSNsaW5lIDIzOTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKIAogfQotI2xpbmUgNTE1MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTE1NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjY6Ci0jbGluZSAyNDAyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQwMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAKIH0KLSNsaW5lIDUxNTkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUxNjMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjY3OgotI2xpbmUgMjQwOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbMF0uc3RyKSkpOwpAQCAtNTE2OCwxMSArNTE3MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2ODoKLSNsaW5lIDI0MTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWzBdLnN0cikpKTsKQEAgLTUxODEsMTEgKzUxODUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTE4NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTE4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjk6Ci0jbGluZSAyNDI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQyOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CkBAIC01MTk0LDExICs1MTk4LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUxOTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyMDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjcwOgotI2xpbmUgMjQzOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbMF0uc3RyKSkpOwpAQCAtNTIwNywxMSArNTIxMSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MjExICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MjE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI3MToKLSNsaW5lIDI0NTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0zXS5zdHIpKSk7CkBAIC01MjIwLDExICs1MjI0LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUyMjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyMjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjcyOgotI2xpbmUgMjQ2MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDYpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTVdLnN0cikpKTsKQEAgLTUyMzQsMTEgKzUyMzgsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTIzOCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTI0MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzM6Ci0jbGluZSAyNDcxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQ3MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNik7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFstM10uc3RyKSkpOwpAQCAtNTI0NywxMSArNTI1MSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MjUxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MjU1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI3NDoKLSNsaW5lIDI0ODEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDgxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg2KTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0zXS5zdHIpKSk7CkBAIC01MjYwLDExICs1MjY0LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUyNjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyNjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc1OgotI2xpbmUgMjQ5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0OTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTNdLnN0cikpKTsKQEAgLTUyNzMsMTEgKzUyNzcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTI3NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTI4MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzY6Ci0jbGluZSAyNTAyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjUwMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIGpwQ2hlY2tFbXB0eSg0KTsKQEAgLTUyODUsMTEgKzUyODksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTI4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTI5MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzc6Ci0jbGluZSAyNTEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjUxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTUyOTcsMTEgKzUzMDEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTMwMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzg6Ci0jbGluZSAyNTIxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjUyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CkBAIC01MzA5LDExICs1MzEzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc5OgotI2xpbmUgMjUzMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1MzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC01MzIxLDExICs1MzI1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzMjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzMjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgwOgotI2xpbmUgMjUzOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzMzLDExICs1MzM3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzMzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgxOgotI2xpbmUgMjU0OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzQ1LDExICs1MzQ5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzNDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgyOgotI2xpbmUgMjU1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01MzU3LDExICs1MzYxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzNjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgzOgotI2xpbmUgMjU2OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01MzY5LDExICs1MzczLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzNzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg0OgotI2xpbmUgMjU3OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NzggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzgxLDExICs1Mzg1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzODUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzODkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg1OgotI2xpbmUgMjU4NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1ODcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzkzLDExICs1Mzk3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzOTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg2OgotI2xpbmUgMjU5NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1OTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDA1LDExICs1NDA5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg3OgotI2xpbmUgMjYwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDE3LDExICs1NDIxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0MjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg4OgotI2xpbmUgMjYxNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01NDI5LDExICs1NDMzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0MzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg5OgotI2xpbmUgMjYyNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDQxLDExICs1NDQ1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0NDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0NDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkwOgotI2xpbmUgMjYzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDUzLDExICs1NDU3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0NTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0NjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkxOgotI2xpbmUgMjY0NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01NDY1LDExICs1NDY5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0NjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0NzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkyOgotI2xpbmUgMjY1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDc3LDExICs1NDgxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0ODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0ODUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkzOgotI2xpbmUgMjY2MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDg5LDExICs1NDkzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0OTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0OTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk0OgotI2xpbmUgMjY3MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01NTAxLDExICs1NTA1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU1MDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU1MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk1OgotI2xpbmUgMjY4MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2ODEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBqcENoZWNrRW1wdHkoNSk7CkBAIC01NTEzLDExICs1NTE3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU1MTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU1MjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk2OgotI2xpbmUgMjY5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2OTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICBqcENoZWNrRW1wdHkoNCk7CkBAIC01NTI1LDIwICs1NTI5LDIwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU1MjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU1MzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk3OgotI2xpbmUgMjY5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2OTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogCiB9Ci0jbGluZSA1NTM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI5ODoKLSNsaW5lIDI3MDYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzA2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTU0NiwxMSArNTU1MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI5OToKLSNsaW5lIDI3MTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTU1OCwxMSArNTU2MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMDoKLSNsaW5lIDI3MjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTU3MCwxMSArNTU3NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMToKLSNsaW5lIDI3MzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzMzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTU4MiwxMSArNTU4NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTkwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMjoKLSNsaW5lIDI3NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTU5NCwxMSArNTU5OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMzoKLSNsaW5lIDI3NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTYwNiwxMSArNTYxMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNDoKLSNsaW5lIDI3NjEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTYxOCwxMSArNTYyMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNToKLSNsaW5lIDI3NzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzcxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTYzMCwxMSArNTYzNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNjoKLSNsaW5lIDI3ODAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY0MiwxMSArNTY0NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNzoKLSNsaW5lIDI3ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY1NCwxMSArNTY1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwODoKLSNsaW5lIDI3OTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY2NiwxMSArNTY3MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Njc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwOToKLSNsaW5lIDI4MDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTY3OCwxMSArNTY4MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Njg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMDoKLSNsaW5lIDI4MTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY5MCwxMSArNTY5NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1Njk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Njk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMToKLSNsaW5lIDI4MjYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTcwMiwxMSArNTcwNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzA2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMjoKLSNsaW5lIDI4MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTcxNCwxMSArNTcxOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzE4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMzoKLSNsaW5lIDI4NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTcyNiwxMSArNTczMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzMwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNDoKLSNsaW5lIDI4NTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTczOCwxMSArNTc0MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNToKLSNsaW5lIDI4NjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODYzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTc1MCwxMSArNTc1NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNjoKLSNsaW5lIDI4NzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODcyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTc2MiwxMSArNTc2NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNzoKLSNsaW5lIDI4ODEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODgxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTc3NCwxMSArNTc3OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1Nzc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxODoKLSNsaW5lIDI4OTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODkxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTc4NiwxMSArNTc5MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzkwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Nzk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxOToKLSNsaW5lIDI5MDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTc5OCwxMSArNTgwMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODA2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMDoKLSNsaW5lIDI5MTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTEwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTgxMCwxMSArNTgxNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODE4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMToKLSNsaW5lIDI5MTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTgyMiwxMSArNTgyNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODMwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMjoKLSNsaW5lIDI5MjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTgzNCwxMSArNTgzOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMzoKLSNsaW5lIDI5MzggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTg0NiwxMSArNTg1MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNDoKLSNsaW5lIDI5NDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTg1OCwxMSArNTg2MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNToKLSNsaW5lIDI5NTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTg3MCwxMSArNTg3NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNjoKLSNsaW5lIDI5NjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTg4MiwxMSArNTg4NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODkwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNzoKLSNsaW5lIDI5NzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTg5NCwxMSArNTg5OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyODoKLSNsaW5lIDI5ODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTkwNiwxMSArNTkxMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyOToKLSNsaW5lIDI5OTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg1KTsKICAganBDaGVja0VtcHR5KDUpOwpAQCAtNTkxOCwxMSArNTkyMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMDoKLSNsaW5lIDMwMDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTkzMCwxMSArNTkzNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMToKLSNsaW5lIDMwMTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTk0MiwxMSArNTk0NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMjoKLSNsaW5lIDMwMjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTk1NCwxMSArNTk1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMzoKLSNsaW5lIDMwMzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWzBdLnN0cikpKTsKQEAgLTU5NjcsMTEgKzU5NzEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTk3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTk3NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzQ6Ci0jbGluZSAzMDQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA0NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTU5NzksMTEgKzU5ODMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTk4MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTk4NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzU6Ci0jbGluZSAzMDUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTU5OTEsMTEgKzU5OTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTk5NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzY6Ci0jbGluZSAzMDYzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA2MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMDMsMTEgKzYwMDcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjAwNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjAxMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzc6Ci0jbGluZSAzMDcyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA3MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMTUsMTEgKzYwMTksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjAxOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjAyMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzg6Ci0jbGluZSAzMDgxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA4MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMjcsMTEgKzYwMzEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjAzMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjAzNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzk6Ci0jbGluZSAzMDkwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMzksMTEgKzYwNDMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA0MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA0NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDA6Ci0jbGluZSAzMDk5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwNTEsMTEgKzYwNTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDE6Ci0jbGluZSAzMTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEwOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwNjMsMTEgKzYwNjcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDI6Ci0jbGluZSAzMTE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzExNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwNzUsMTEgKzYwNzksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA3OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA4MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDM6Ci0jbGluZSAzMTI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEyNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwODcsMTEgKzYwOTEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA5MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA5NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDQ6Ci0jbGluZSAzMTM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEzNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwOTksMTEgKzYxMDMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjEwMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjEwNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDU6Ci0jbGluZSAzMTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE0NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxMTEsMTEgKzYxMTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjExNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjExOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDY6Ci0jbGluZSAzMTUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxMjMsMTEgKzYxMjcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjEyNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjEzMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDc6Ci0jbGluZSAzMTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE2MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxMzUsMTEgKzYxMzksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjEzOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE0MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDg6Ci0jbGluZSAzMTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE3MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxNDcsMTEgKzYxNTEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjE1MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDk6Ci0jbGluZSAzMTgyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE4MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxNTksMTEgKzYxNjMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjE2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNTA6Ci0jbGluZSAzMTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxNzEsMTEgKzYxNzUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjE3NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE3OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNTE6Ci0jbGluZSAzMjAxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzIwMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwU3RvcmVDbGFzcygoeXl2c3BbLTJdLnN0cikpOwpAQCAtNjE4NCwxMSArNjE4OCwxMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA2MTg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogCi0jbGluZSA2MTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MTk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKKwogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKQEAgLTY0MjEsNyArNjQyNiw3IEBACiAjZW5kaWYKICAgcmV0dXJuIHl5cmVzdWx0OwogfQotI2xpbmUgMzIxMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTkxOCAgKi8KKyNsaW5lIDMyMTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKIAogLyogRW5kIG9mIGdyYW1tYXIgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtRGVwZW5kc0phdmFQYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbURlcGVuZHNKYXZhUGFyc2VyVG9rZW5zLmgKaW5kZXggNmJiYzA4NC4uZTBkZmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtRGVwZW5kc0phdmFQYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21EZXBlbmRzSmF2YVBhcnNlclRva2Vucy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21FeHByUGFyc2VyLmN4eCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXIuY3h4CmluZGV4IDg0MTZlNzIuLjU2MmIzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXIuY3h4CkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuMy4yIgorI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuNC4yIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAgKi8KICNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC03Miw3ICs3Miw3IEBACiAKIAogLyogRmlyc3QgcGFydCBvZiB1c2VyIHByb2xvZ3VlLiAgKi8KLSNsaW5lIDEgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MzM3ICAqLworI2xpbmUgMSAiY21FeHByUGFyc2VyLnkiCiAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KQEAgLTExNiw3ICsxMTYsOCBAQAogIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgogI2VuZGlmCiAKLSNsaW5lIDEyMCAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjMzNyAgKi8KKyNsaW5lIDEyMCAiY21FeHByUGFyc2VyLmN4eCIKKwogIyBpZm5kZWYgWVlfTlVMTFBUUgogIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwogIyAgIGlmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKQEAgLTEzNyw4ICsxMzgsOCBAQAogIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKICNlbmRpZgogCi0vKiBJbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNlZAotICAgYnkgI2luY2x1ZGUgImNtRXhwclBhcnNlclRva2Vucy5oIi4gICovCisvKiBVc2UgYXBpLmhlYWRlci5pbmNsdWRlIHRvICNpbmNsdWRlIHRoaXMgaGVhZGVyCisgICBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuICAqLwogI2lmbmRlZiBZWV9DTUVYUFJfWVlfQ01FWFBSUEFSU0VSVE9LRU5TX0hfSU5DTFVERUQKICMgZGVmaW5lIFlZX0NNRVhQUl9ZWV9DTUVYUFJQQVJTRVJUT0tFTlNfSF9JTkNMVURFRAogLyogRGVidWcgdHJhY2VzLiAgKi8KQEAgLTI5Niw2ICsyOTcsOCBAQAogI2VuZGlmCiAKIAorI2RlZmluZSBZWV9BU1NFUlQoRSkgKCh2b2lkKSAoMCAmJiAoRSkpKQorCiAjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCiAKIC8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KQEAgLTY4OCw3ICs2OTEsOSBAQAogICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQogICAgIFlZUFJJTlQgKHl5bywgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKICMgZW5kaWYKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgWVlVU0UgKHl5dHlwZSk7CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogfQogCiAKQEAgLTExMjYsNiArMTEzMSw4IEBACiB8IHl5bmV3c3RhdGUgLS0gc2V0IGN1cnJlbnQgc3RhdGUgKHRoZSB0b3Agb2YgdGhlIHN0YWNrKSB0byB5eXN0YXRlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5c2V0c3RhdGU6CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisgIFlZX0FTU0VSVCAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPCBZWU5TVEFURVMpOwogICAqeXlzc3AgPSAoeXl0eXBlX2ludDE2KSB5eXN0YXRlOwogCiAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQpAQCAtMTE4OCw4ICsxMTk1LDYgQEAKICAgICB9CiAjZW5kaWYgLyogIWRlZmluZWQgeXlvdmVyZmxvdyAmJiAhZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFICovCiAKLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQogICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCkBAIC0xMjU3LDcgKzEyNjIsNiBAQAogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICAqKyt5eXZzcCA9IHl5bHZhbDsKICAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi0KICAgZ290byB5eW5ld3N0YXRlOwogCiAKQEAgLTEyOTIsMTk1ICsxMjk2LDE5NiBAQAogICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgICAgY2FzZSAyOgotI2xpbmUgNzcgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyAgY2FzZSAyOgorI2xpbmUgNzcgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICBjbUV4cHJfeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+U2V0UmVzdWx0KCh5eXZzcFswXS5OdW1iZXIpKTsKICAgfQotI2xpbmUgMTMwMSAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzA1ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKLSNsaW5lIDgyICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4MiAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzMDkgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMxMyAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ6Ci0jbGluZSA4NSAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgODUgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSB8ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzE3ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzMjEgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1OgotI2xpbmUgOTAgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDkwICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTMyNSAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzI5ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDkzICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5MyAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWy0yXS5OdW1iZXIpIF4gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzMzMgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMzNyAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDc6Ci0jbGluZSA5OCAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTggImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzQxICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNDUgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMTAxICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDEgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSAmICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzQ5ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNTMgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMTA2ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDYgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzU3ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNjEgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKLSNsaW5lIDEwOSAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTA5ICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTJdLk51bWJlcikgPDwgKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzNjUgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM2OSAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExOgotI2xpbmUgMTEyICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTIgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSA+PiAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTM3MyAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzc3ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6Ci0jbGluZSAxMTcgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDExNyAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzODEgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM4NSAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzOgotI2xpbmUgMTIwICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjAgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSArICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzg5ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzOTMgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKLSNsaW5lIDEyMyAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTIzICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTJdLk51bWJlcikgLSAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTM5NyAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDAxICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAxMjggImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEyOCAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0MDUgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQwOSAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2OgotI2xpbmUgMTMxICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzEgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSAqICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxNDEzICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0MTcgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzoKLSNsaW5lIDEzNCAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM0ICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgaWYgKHl5dnNwWzBdLk51bWJlciA9PSAwKSB7CiAgICAgICB0aHJvdyBzdGQ6Om92ZXJmbG93X2Vycm9yKCJkaXZpZGUgYnkgemVybyIpOwogICAgIH0KICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSAvICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxNDI0ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0MjggImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKLSNsaW5lIDE0MCAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQwICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTJdLk51bWJlcikgJSAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTQzMiAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDM2ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6Ci0jbGluZSAxNDUgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NSAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NDAgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ0NCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTQ4ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDggImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICsgKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NDggImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ1MiAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIxOgotI2xpbmUgMTUxICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTEgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9IC0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NTYgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ2MCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIyOgotI2xpbmUgMTU0ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTQgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9IH4gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NjQgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ2OCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMTU5ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTkgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxNDcyICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NzYgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKLSNsaW5lIDE2MiAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTYyICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTFdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0ODAgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ4NCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogCi0jbGluZSAxNDg0ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0ODggImNtRXhwclBhcnNlci5jeHgiCisKICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KICAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCkBAIC0xNzEzLDcgKzE3MTgsNyBAQAogI2VuZGlmCiAgIHJldHVybiB5eXJlc3VsdDsKIH0KLSNsaW5lIDE2NyAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxOTE4ICAqLworI2xpbmUgMTY3ICJjbUV4cHJQYXJzZXIueSIKIAogLyogRW5kIG9mIGdyYW1tYXIgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtRXhwclBhcnNlclRva2Vucy5oIGIvU291cmNlL0xleGVyUGFyc2VyL2NtRXhwclBhcnNlclRva2Vucy5oCmluZGV4IDVmZmQ3YzUuLmUzMGE4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21FeHByUGFyc2VyVG9rZW5zLmgKQEAgLTEsNCArMSw0IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4zLjIuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNC4yLiAgKi8KIAogLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXIuY3h4IGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKaW5kZXggMmNhNzkyNy4uMjQ5NGFhZCAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKKysrIGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKQEAgLTEsNCArMSw0IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4zLjIuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNC4yLiAgKi8KIAogLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKIApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4zLjIiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTcyLDcgKzcyLDcgQEAKIAogCiAvKiBGaXJzdCBwYXJ0IG9mIHVzZXIgcHJvbG9ndWUuICAqLwotI2xpbmUgMSAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzozMzcgICovCisjbGluZSAxICJjbUZvcnRyYW5QYXJzZXIueSIKIAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwpAQCAtMTM1LDcgKzEzNSw4IEBACiAjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCiAjZW5kaWYKIAotI2xpbmUgMTM5ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MzM3ICAqLworI2xpbmUgMTM5ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgorCiAjIGlmbmRlZiBZWV9OVUxMUFRSCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCiAjICAgaWYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cwpAQCAtMTU2LDggKzE1Nyw4IEBACiAjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQogI2VuZGlmCiAKLS8qIEluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgQmlzb24sIHRoaXMgc2VjdGlvbiB3aWxsIGJlIHJlcGxhY2VkCi0gICBieSAjaW5jbHVkZSAiY21Gb3J0cmFuUGFyc2VyVG9rZW5zLmgiLiAgKi8KKy8qIFVzZSBhcGkuaGVhZGVyLmluY2x1ZGUgdG8gI2luY2x1ZGUgdGhpcyBoZWFkZXIKKyAgIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgaGVyZS4gICovCiAjaWZuZGVmIFlZX0NNRk9SVFJBTl9ZWV9DTUZPUlRSQU5QQVJTRVJUT0tFTlNfSF9JTkNMVURFRAogIyBkZWZpbmUgWVlfQ01GT1JUUkFOX1lZX0NNRk9SVFJBTlBBUlNFUlRPS0VOU19IX0lOQ0xVREVECiAvKiBEZWJ1ZyB0cmFjZXMuICAqLwpAQCAtMjU1LDE2ICsyNTYsMTUgQEAKIAogLyogVmFsdWUgdHlwZS4gICovCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLQogdW5pb24gWVlTVFlQRQogewotI2xpbmUgNzMgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MzUyICAqLworI2xpbmUgNzMgImNtRm9ydHJhblBhcnNlci55IgogCiAgIGNoYXIqIHN0cmluZzsKIAotI2xpbmUgMjY2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MzUyICAqLwotfTsKKyNsaW5lIDI2NiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKIAorfTsKIHR5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOwogIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpAQCAtMzc4LDYgKzM3OCw4IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIFlZX0FTU0VSVChFKSAoKHZvaWQpICgwICYmIChFKSkpCisKICNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIAogLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwpAQCAtNTA5LDE2ICs1MTEsMTYgQEAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCiAjZGVmaW5lIFlZRklOQUwgIDIKIC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICA1OTMKKyNkZWZpbmUgWVlMQVNUICAgNTk0CiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KICNkZWZpbmUgWVlOVE9LRU5TICA0MQogLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwogI2RlZmluZSBZWU5OVFMgIDE0CiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjMKKyNkZWZpbmUgWVlOUlVMRVMgIDY0CiAvKiBZWU5TVEFURVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMTI2CisjZGVmaW5lIFlZTlNUQVRFUyAgMTI3CiAKICNkZWZpbmUgWVlVTkRFRlRPSyAgMgogI2RlZmluZSBZWU1BWFVUT0sgICAyOTUKQEAgLTU3NCw3ICs1NzYsNyBAQAogICAgICAyMjAsICAgMjIwLCAgIDIyMSwgICAyMjEsICAgMjIyLCAgIDIyMiwgICAyMjMsICAgMjIzLCAgIDIyNCwgICAyMjQsCiAgICAgIDIyNSwgICAyMjUsICAgMjI2LCAgIDIyNiwgICAyMjcsICAgMjI3LCAgIDIyOCwgICAyMjgsICAgMjMxLCAgIDIzMiwKICAgICAgMjMzLCAgIDIzNCwgICAyMzUsICAgMjM2LCAgIDIzNywgICAyMzgsICAgMjM5LCAgIDI0MCwgICAyNDEsICAgMjQyLAotICAgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAyNDYKKyAgICAgMjQzLCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NwogfTsKICNlbmRpZgogCkBAIC02MjYsMTYgKzYyOCwxNiBAQAogICAgICAtMzksICAgIDIxLCAgIC0zOSwgICAgIDEsICAgLTM5LCAgIC0yMCwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksCiAgICAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKICAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTI0LCAgIC0xOCwgICAgMjAsICAgIC04LAotICAgICAgLTMsICAgIDM5LCAgIC0zOSwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDMzLCAgIC0zOSwgICAtMzksCisgICAgICAtMywgICAgNDAsICAgLTM5LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOSwgICAgMzQsICAgLTM5LCAgIC0zOSwKICAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgICA1OSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgNzYsCi0gICAgIDExNCwgICAxMjksICAgMTY3LCAgIDE4MiwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgIDc3LAorICAgICAxMTUsICAgMTMwLCAgIDE2OCwgICAxODMsICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksCiAgICAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKLSAgICAgLTM5LCAgIC0zOSwgICAyMjAsICAgMjM1LCAgIDI3MywgICAyODgsICAgLTIxLCAgICAyNiwgICAtMzksICAgMzI2LAotICAgICAzNDEsICAgMzc5LCAgIDM5NCwgICA0MzIsICAgNDQ3LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksCi0gICAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgMzgsICAgIDQwLCAgICA0MSwgICA0ODUsICAgLTM5LCAgIC0zOSwKLSAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgICA0NSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgNDMsICAgNTAwLAotICAgICA1MzgsICAgLTM5LCAgIC0zOSwgICAtMzksICAgNTUzLCAgIC0zOQorICAgICAtMzksICAgLTM5LCAgIC0zOSwgICAyMjEsICAgMjM2LCAgIDI3NCwgICAyODksICAgLTIxLCAgICAyNiwgICAtMzksCisgICAgIDMyNywgICAzNDIsICAgMzgwLCAgIDM5NSwgICA0MzMsICAgNDQ4LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKKyAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgMzksICAgIDQxLCAgICA0MiwgICA0ODYsICAgLTM5LAorICAgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgICAxOCwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgNDMsCisgICAgIDUwMSwgICA1MzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgNTU0LCAgIC0zOQogfTsKIAogICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCkBAIC02NDksMTMgKzY1MSwxMyBAQAogICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0NiwgICAgNDYsCiAgICAgICA0NiwgICAgNDYsICAgIDI2LCAgICA0NiwgICAgIDAsICAgIDQ2LCAgICA0NiwgICAgIDQsICAgIDQ2LCAgICA0NiwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE1LCAgICA1NywgICAgNTYsICAgIDYyLCAgICA1OCwgICAgNTksCi0gICAgICA2MCwgICAgNjEsICAgIDYzLCAgICA1NSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKLSAgICAgIDU0LCAgICA0NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDYsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMTQsCi0gICAgICAxMCwgICAgMTMsICAgICA5LCAgICAgNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgNDYsICAgIDQ2LCAgICAxMSwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDQ2LCAgICAgNywgICAgMTIsICAgICAwLCAgICAgOAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE1LCAgICA1NywgICAgNTYsICAgIDY0LCAgICA2MiwgICAgNTgsCisgICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MywgICAgNTUsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAgIDUzLCAgICA1NCwgICAgNDcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAxNCwgICAgMTAsICAgIDEzLCAgICAgOSwgICAgIDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDQ2LCAgICA0NiwgICAgMTEsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0NiwgICAgIDcsICAgIDEyLCAgICAgMCwgICAgIDgKIH07CiAKICAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KQEAgLTY2OSw3ICs2NzEsNyBAQAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KIHsKICAgICAgIC0xLCAgICAgMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0NCwgICAgODEKKyAgICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDgyCiB9OwogCiAgIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dIC0tIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKQEAgLTY3Nyw2NiArNjc5LDY2IEBACiAgICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9CiB7Ci0gICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNDIsICAgIDYzLCAgIDEwNCwgICAgODIsICAgIDgzLCAgIDEwNSwKLSAgICAgIDg0LCAgICA4NSwgICAgNDMsICAgIDQ1LCAgICA0NiwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLAotICAgICAgOTQsICAgICAyLCAgICAgMywgICAgNDcsICAgICA0LCAgICA0OSwgICAgNTAsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNDIsICAgIDYzLCAgIDEwNSwgICAgODMsICAgIDg0LCAgIDEwNiwKKyAgICAgIDg1LCAgICA4NiwgICAgNDMsICAgIDQ1LCAgICA0NiwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LAorICAgICAgOTUsICAgICAyLCAgICAgMywgICAgNDcsICAgICA0LCAgICA0OSwgICAgNTAsICAgICA1LCAgICAgNiwgICAgIDcsCiAgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICA1NCwgICAgIDAsICAgIDU1LAotICAgICAxMDcsICAgIDU2LCAgICA1NywgICAgNDgsICAgMTA2LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDUxLCAgICA1OCwgICAgNTIsICAgIDg2LCAgICA4NywKLSAgICAgIDg4LCAgIDExNCwgICAgNTMsICAgMTE1LCAgIDExNiwgICAxMTgsICAgMTIxLCAgIDExOSwgICAxMjAsICAgIDk1LAotICAgICAgNjUsICAgIDY2LCAgICAgMCwgICAxMjQsICAgICAwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCi0gICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKLSAgICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAotICAgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDk2LCAgICA2NSwgICAgNjYsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgNTQsICAgMTE5LCAgICA1NSwKKyAgICAgIDU2LCAgIDEwOCwgICAgNTcsICAgIDQ4LCAgIDEwNywgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNTEsICAgIDU4LCAgICA1MiwgICAgODcsCisgICAgICA4OCwgICAgODksICAgMTE1LCAgICA1MywgICAxMTYsICAgMTE3LCAgIDEyMiwgICAgIDAsICAgMTIwLCAgIDEyMSwKKyAgICAgIDk2LCAgICA2NSwgICAgNjYsICAgIDY3LCAgIDEyNSwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLAorICAgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgOTcsICAgIDY1LAorICAgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5OCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLAorICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKKyAgICAgIDgxLCAgICA5OSwgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDAsICAgIDY1LCAgICA2NiwgICAgNjcsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAxMDEsICAgIDY1LCAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTAyLAorICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY4LCAgICA2OSwgICAgNzAsCisgICAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgMTAzLCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMDQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwKKyAgICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAxMDksICAgIDY1LCAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTEwLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAorICAgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwKKyAgICAgIDc5LCAgICA4MCwgICAgODEsICAgMTExLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMiwgICAgNjUsCisgICAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgODEsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsCisgICAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgIDExMywgICAgNjUsICAgIDY2LCAgICA2NywKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICA5NywgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwKLSAgICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLAotICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCi0gICAgICA5OCwgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTksICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsCi0gICAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDY3LCAgICA2OCwKLSAgICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LAotICAgICAgNzgsICAgIDc5LCAgICA4MCwgICAxMDAsICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTAxLCAgICA2NSwKLSAgICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLAotICAgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCi0gICAgICA4MCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwKLSAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgMTAyLCAgICA2NSwgICAgNjYsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxMDMsICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2NywKLSAgICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LAotICAgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsCi0gICAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgIDEwOCwKLSAgICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICA2NSwgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKLSAgICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA2NywgICAgNjgsICAgIDY5LAotICAgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsCi0gICAgICA3OSwgICAgODAsICAgMTEwLCAgICA2NSwgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMSwgICAgNjUsICAgIDY2LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCi0gICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKLSAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LAotICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgIDExMiwgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTEzLCAgICA2NSwgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LAotICAgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsCi0gICAgICA3OCwgICAgNzksICAgIDgwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywKLSAgICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAxMTcsICAgIDY1LAotICAgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLAotICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsCi0gICAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKLSAgICAgIDgwLCAgIDEyMywgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjUsICAgIDY1LCAgICA2NiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwKLSAgICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDY3LAotICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsCi0gICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MAorICAgICAgIDAsICAgMTE0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjgsCisgICAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAxMTgsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMywgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsCisgICAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwKKyAgICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LAorICAgICAgODAsICAgIDgxLCAgIDEyNCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjYsICAgIDY1LCAgICA2NiwKKyAgICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLAorICAgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwKKyAgICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MQogfTsKIAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9CkBAIC03NDUsNjIgKzc0Nyw2MiBAQAogICAgICAgNDgsICAgIDQ5LCAgICAzMiwgICAgMzcsICAgIDMyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTcsCiAgICAgICA1OCwgICAgIDAsICAgICAxLCAgICAgMywgICAgIDMsICAgIDMzLCAgICAyOSwgICAgIDYsICAgICA3LCAgICAgOCwKICAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDMyLCAgICAtMSwgICAgMzMsCi0gICAgICA4OCwgICAgMzMsICAgIDMzLCAgICAzMywgICAgMjgsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgMjYsICAgIDMzLCAgICAyOCwgICAgMzMsICAgIDMzLAotICAgICAgMzMsICAgIDMzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAzMCwgICAgMzMsICAgMTE1LCAgIDExNiwgICAgIDMsCi0gICAgICAgNCwgICAgIDUsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAzMiwgICAgMzAsICAgIDMzLAorICAgICAgMzMsICAgIDg5LCAgICAzMywgICAgMzMsICAgIDI4LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAyNiwgICAgMzMsICAgIDI4LCAgICAzMywKKyAgICAgIDMzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAtMSwgICAxMTYsICAgMTE3LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgMTIyLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCiAgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsCi0gICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgIDMsCi0gICAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCi0gICAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCiAgICAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsCiAgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKICAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwKKyAgICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKICAgICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDI2LAogICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsCisgICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAKIH07CiAKICAgLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKQEAgLTgxMywxMyArODE1LDEzIEBACiAgICAgICAzOSwgICAgNDAsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKICAgICAgIDUxLCAgICA1MiwgICAgIDMsICAgIDMyLCAgICA1MywgICAgMzcsICAgIDMyLCAgICAgMywgICAgMzMsICAgIDMzLAogICAgICAgMjksICAgIDI2LCAgICAyOCwgICAgMzMsICAgIDMyLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAzMywgICAgNTMsCi0gICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDU0LCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgMzMsICAgIDMzLCAgICAzMywgICAgNTMsCi0gICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAyNywgICAgMzAsICAgIDI4LCAgICA1MywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgIDMzLCAgICAzMywgICAgMzMsICAgICAzLCAgICAzMCwgICAgNTMsCi0gICAgICA1MywgICAgMzMsICAgICAzLCAgICAgMywgICAgNTMsICAgICAzCisgICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIDQwLCAgICA1NCwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDMzLCAgICAzMywgICAgMzMsCisgICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDUzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgMjcsICAgIDMwLCAgICAyOCwgICAgNTMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAgMywgICAgMzAsCisgICAgICA1MywgICAgNTMsICAgIDMzLCAgICAgMywgICAgIDMsICAgIDUzLCAgICAgMwogfTsKIAogICAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KQEAgLTgzMSw3ICs4MzMsNyBAQAogICAgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNDYsICAgIDQ3LCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksCiAgICAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDU0LCAgICA1NCwKICAgICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LAotICAgICAgNTQsICAgIDU0LCAgICA1NCwgICAgNTQKKyAgICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LCAgICA1NAogfTsKIAogICAvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCkBAIC04NDMsNyArODQ1LDcgQEAKICAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAogICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsCiAgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEKIH07CiAKIApAQCAtOTMwLDcgKzkzMiw5IEBACiAgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCiAgICAgWVlQUklOVCAoeXlvLCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwogIyBlbmRpZgorICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICBZWVVTRSAoeXl0eXBlKTsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECiB9CiAKIApAQCAtMTM2OCw2ICsxMzcyLDggQEAKIHwgeXluZXdzdGF0ZSAtLSBzZXQgY3VycmVudCBzdGF0ZSAodGhlIHRvcCBvZiB0aGUgc3RhY2spIHRvIHl5c3RhdGUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXlzZXRzdGF0ZToKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKyAgWVlfQVNTRVJUICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8IFlZTlNUQVRFUyk7CiAgICp5eXNzcCA9ICh5eXR5cGVfaW50MTYpIHl5c3RhdGU7CiAKICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCkBAIC0xNDMwLDggKzE0MzYsNiBAQAogICAgIH0KICNlbmRpZiAvKiAhZGVmaW5lZCB5eW92ZXJmbG93ICYmICFkZWZpbmVkIFlZU1RBQ0tfUkVMT0NBVEUgKi8KIAotICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCiAgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCiAgICAgWVlBQ0NFUFQ7CiAKQEAgLTE0OTksNyArMTUwMyw2IEBACiAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgICorK3l5dnNwID0geXlsdmFsOwogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLQogICBnb3RvIHl5bmV3c3RhdGU7CiAKIApAQCAtMTUzNCwyNyArMTUzNywyNyBAQAogICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgICAgY2FzZSA0OgotI2xpbmUgMTA0ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisgIGNhc2UgNDoKKyNsaW5lIDEwNCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1NldEluSW50ZXJmYWNlKHBhcnNlciwgdHJ1ZSk7CiAgIH0KLSNsaW5lIDE1NDQgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU0NyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDU6Ci0jbGluZSAxMDggImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEwOCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVVc2UocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTU1NCAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTU3ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDExMyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTEzICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBpZiAoY21zeXNTdHJpbmdfc3RyY2FzZWNtcCgoeXl2c3BbLTJdLnN0cmluZyksICJmdW5jdGlvbiIpICE9IDAgJiYKQEAgLTE1NjQsMjIgKzE1NjcsMjIgQEAKICAgICB9CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNTY4ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE1NzEgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgotI2xpbmUgMTIyICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjIgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlU3VibW9kdWxlKHBhcnNlciwgKHl5dnNwWy00XS5zdHJpbmcpLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy00XS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE1NzkgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU4MiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDg6Ci0jbGluZSAxMjggImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEyOCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVTdWJtb2R1bGVOZXN0ZWQocGFyc2VyLCAoeXl2c3BbLTZdLnN0cmluZyksICh5eXZzcFstNF0uc3RyaW5nKSwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKQEAgLTE1ODcsNDAgKzE1OTAsNDAgQEAKICAgICBmcmVlKCh5eXZzcFstNF0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNTkxICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE1OTQgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMTM1ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzUgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9TZXRJbkludGVyZmFjZShwYXJzZXIsIHRydWUpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTYwMSAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjA0ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6Ci0jbGluZSAxNDAgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0MCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1NldEluSW50ZXJmYWNlKHBhcnNlciwgZmFsc2UpOwogICB9Ci0jbGluZSAxNjEwICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MTMgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDE0NCAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ0ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZVVzZShwYXJzZXIsICh5eXZzcFstMl0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjIwICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MjMgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKLSNsaW5lIDE0OSAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ5ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgaWYgKGNtc3lzU3RyaW5nX3N0cmNhc2VjbXAoKHl5dnNwWy00XS5zdHJpbmcpLCAibm9uX2ludHJpbnNpYyIpID09IDApIHsKICAgICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CkBAIC0xNjI5LDEzOSArMTYzMiwxNDAgQEAKICAgICBmcmVlKCh5eXZzcFstNF0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjMzICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MzYgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKLSNsaW5lIDE1NyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU3ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUluY2x1ZGUocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTY0MyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjQ2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6Ci0jbGluZSAxNjIgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MiAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVMaW5lRGlyZWN0aXZlKHBhcnNlciwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE2NTMgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTY1NiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1OgotI2xpbmUgMTY3ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjcgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlSW5jbHVkZShwYXJzZXIsICh5eXZzcFstMl0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjYzICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NjYgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKLSNsaW5lIDE3MiAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTcyICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUluY2x1ZGUocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTY3MyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjc2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6Ci0jbGluZSAxNzcgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NyAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVEZWZpbmUocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTY4MyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjg2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAxODIgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE4MiAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVVbmRlZihwYXJzZXIsICh5eXZzcFstMl0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjkzICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2OTYgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKLSNsaW5lIDE4NyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg3ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUlmZGVmKHBhcnNlciwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE3MDMgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTcwNiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTkyICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxOTIgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlSWZuZGVmKHBhcnNlciwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE3MTMgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTcxNiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIxOgotI2xpbmUgMTk3ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxOTcgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlSWYocGFyc2VyKTsKICAgfQotI2xpbmUgMTcyMiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzI1ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6Ci0jbGluZSAyMDEgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMSAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVFbGlmKHBhcnNlcik7CiAgIH0KLSNsaW5lIDE3MzEgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTczNCAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMjA1ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMDUgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlRWxzZShwYXJzZXIpOwogICB9Ci0jbGluZSAxNzQwICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NDMgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKLSNsaW5lIDIwOSAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA5ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUVuZGlmKHBhcnNlcik7CiAgIH0KLSNsaW5lIDE3NDkgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTc1MiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ4OgotI2xpbmUgMjMxICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzEgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsgZnJlZSAoKHl5dnNwWzBdLnN0cmluZykpOyB9Ci0jbGluZSAxNzU1ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NTggImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NToKLSNsaW5lIDIzOCAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM4ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7IGZyZWUgKCh5eXZzcFswXS5zdHJpbmcpKTsgfQotI2xpbmUgMTc2MSAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzY0ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAKLSNsaW5lIDE3NjUgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTc2OCAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKKwogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKQEAgLTE5OTQsNiArMTk5OCw2IEBACiAjZW5kaWYKICAgcmV0dXJuIHl5cmVzdWx0OwogfQotI2xpbmUgMjQ5ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE5MTggICovCisjbGluZSAyNTAgImNtRm9ydHJhblBhcnNlci55IgogCiAvKiBFbmQgb2YgZ3JhbW1hciAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci55IGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci55CmluZGV4IDg3ZjNlMGEuLjFiNTRkZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXIueQorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyLnkKQEAgLTI0NCw2ICsyNDQsNyBAQAogfCBSUEFSRU4KIHwgQ09NTUEKIHwgVU5URVJNSU5BVEVEX1NUUklORworfCBDUFBfTElORV9ESVJFQ1RJVkUKIDsKIAogJSUKZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXJUb2tlbnMuaAppbmRleCAwZGE0YzFjLi5mNjZhMTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyVG9rZW5zLmgKKysrIGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlclRva2Vucy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCkBAIC0xMzEsMTYgKzEzMSwxNSBAQAogCiAvKiBWYWx1ZSB0eXBlLiAgKi8KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotCiB1bmlvbiBZWVNUWVBFCiB7Ci0jbGluZSA3MyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxOTIxICAqLworI2xpbmUgNzMgImNtRm9ydHJhblBhcnNlci55IgogCiAgIGNoYXIqIHN0cmluZzsKIAotI2xpbmUgMTQyICJjbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCIgLyogeWFjYy5jOjE5MjEgICovCi19OworI2xpbmUgMTQxICJjbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCIKIAorfTsKIHR5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOwogIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmN4eCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4OTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5jeHgKQEAgLTAsMCArMSwyMjEwIEBACisjaW5jbHVkZSAiY21TdGFuZGFyZExleGVyLmgiCisKKyNkZWZpbmUgRkxFWElOVF9IIDEKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gNAorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworI2lmZGVmIHl5X2NyZWF0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2NyZWF0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9jcmVhdGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2RlbGV0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2RlbGV0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9kZWxldGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9kZWxldGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X3NjYW5fYnVmZmVyCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9zY2FuX3N0cmluZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zY2FuX3N0cmluZyBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmcKKyNlbmRpZgorCisjaWZkZWYgeXlfc2Nhbl9ieXRlcworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9ieXRlc19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnl0ZXMgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnl0ZXMKKyNlbmRpZgorCisjaWZkZWYgeXlfaW5pdF9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfaW5pdF9idWZmZXIgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2ZsdXNoX2J1ZmZlcgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfZmx1c2hfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfZmx1c2hfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9mbHVzaF9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfbG9hZF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfbG9hZF9idWZmZXJfc3RhdGUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5X3N3aXRjaF90b19idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zd2l0Y2hfdG9fYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5cHVzaF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5cHVzaF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXB1c2hfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXB1c2hfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlwb3BfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlwb3BfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXBvcF9idWZmZXJfc3RhdGUKKyNlbmRpZgorCisjaWZkZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWVuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWVuc3VyZV9idWZmZXJfc3RhY2sgY21HY2NEZXBmaWxlX3l5ZW5zdXJlX2J1ZmZlcl9zdGFjaworI2VuZGlmCisKKyNpZmRlZiB5eWxleAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlsZXhfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleCBjbUdjY0RlcGZpbGVfeXlsZXgKKyNlbmRpZgorCisjaWZkZWYgeXlyZXN0YXJ0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXJlc3RhcnRfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXJlc3RhcnQgY21HY2NEZXBmaWxlX3l5cmVzdGFydAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdCBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdF9leHRyYSBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9kZXN0cm95CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfZGVzdHJveSBjbUdjY0RlcGZpbGVfeXlsZXhfZGVzdHJveQorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9kZWJ1ZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9kZWJ1ZyBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWcKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfZGVidWcKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfZGVidWcgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2V4dHJhIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9leHRyYQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9leHRyYSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmEKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfaW4KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X2luX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfaW4gY21HY2NEZXBmaWxlX3l5Z2V0X2luCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2luCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9pbl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2luIGNtR2NjRGVwZmlsZV95eXNldF9pbgorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9vdXQKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X291dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X291dCBjbUdjY0RlcGZpbGVfeXlnZXRfb3V0CisjZW5kaWYKKworI2lmZGVmIHl5c2V0X291dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfb3V0IGNtR2NjRGVwZmlsZV95eXNldF9vdXQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGVuZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfbGVuZ19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2xlbmcgY21HY2NEZXBmaWxlX3l5Z2V0X2xlbmcKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfdGV4dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfdGV4dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X3RleHQgY21HY2NEZXBmaWxlX3l5Z2V0X3RleHQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGluZW5vCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9saW5lbm8gY21HY2NEZXBmaWxlX3l5Z2V0X2xpbmVubworI2VuZGlmCisKKyNpZmRlZiB5eXNldF9saW5lbm8KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2xpbmVub19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2xpbmVubyBjbUdjY0RlcGZpbGVfeXlzZXRfbGluZW5vCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2NvbHVtbgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfY29sdW1uIGNtR2NjRGVwZmlsZV95eWdldF9jb2x1bW4KKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfY29sdW1uCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9jb2x1bW4gY21HY2NEZXBmaWxlX3l5c2V0X2NvbHVtbgorI2VuZGlmCisKKyNpZmRlZiB5eXdyYXAKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5d3JhcF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5d3JhcCBjbUdjY0RlcGZpbGVfeXl3cmFwCisjZW5kaWYKKworI2lmZGVmIHl5YWxsb2MKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5YWxsb2NfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWFsbG9jIGNtR2NjRGVwZmlsZV95eWFsbG9jCisjZW5kaWYKKworI2lmZGVmIHl5cmVhbGxvYworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlyZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlyZWFsbG9jIGNtR2NjRGVwZmlsZV95eXJlYWxsb2MKKyNlbmRpZgorCisjaWZkZWYgeXlmcmVlCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWZyZWVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWZyZWUgY21HY2NEZXBmaWxlX3l5ZnJlZQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNpZm5kZWYgU0laRV9NQVgKKyNkZWZpbmUgU0laRV9NQVggICAgICAgICAgICAgICAofihzaXplX3QpMCkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMrKyBoZWFkZXJzLiAqLworCisvKiBUT0RPOiB0aGlzIGlzIGFsd2F5cyBkZWZpbmVkLCBzbyBpbmxpbmUgaXQgKi8KKyNkZWZpbmUgeXljb25zdCBjb25zdAorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSB5eW5vcmV0dXJuIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxzZQorI2RlZmluZSB5eW5vcmV0dXJuCisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuCisgKiAgIGludGVnZXIgaW4gcmFuZ2UgWzAuLjI1NV0gZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKFlZX0NIQVIpIChjKSkKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoIHl5aW4gLCB5eXNjYW5uZXIgKQorI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCisgICAgI2RlZmluZSBZWV9MSU5FTk9fUkVXSU5EX1RPKHB0cikKKworLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCB5eXJlc3RhcnQgKCBGSUxFICppbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKCBZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKCBGSUxFICpmaWxlLCBpbnQgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9kZWxldGVfYnVmZmVyICggWVlfQlVGRkVSX1NUQVRFIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfZmx1c2hfYnVmZmVyICggWVlfQlVGRkVSX1NUQVRFIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoIFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICggeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiLCBGSUxFICpmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoIFlZX0NVUlJFTlRfQlVGRkVSICwgeXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKCBjaGFyICpiYXNlLCB5eV9zaXplX3Qgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICggY29uc3QgY2hhciAqeXlfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoIGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQgbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnl5YWxsb2MgKCB5eV9zaXplX3QgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnl5cmVhbGxvYyAoIHZvaWQgKiwgeXlfc2l6ZV90ICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5ZnJlZSAoIHZvaWQgKiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcgorI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlciggeXlpbiwgWVlfQlVGX1NJWkUgLCB5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoIHl5aW4sIFlZX0JVRl9TSVpFICwgeXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXl3cmFwKHl5c2Nhbm5lcikgKC8qQ09OU1RDT05EKi8xKQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAordHlwZWRlZiBmbGV4X3VpbnQ4X3QgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoIHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3IgKCBjb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoaW50KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDExCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTIKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsyNl0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDEyLCAgIDEwLCAgICA4LCAgICA2LCAgIDEwLCAgICA5LCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgICA4LCAgICAwLCAgICA2LCAgICA5LCAgICAxLCAgICA3LCAgICA1LCAgICAwLCAgICAzLAorICAgICAgICAyLCAgICAwLCAgICA0LCAgICAwLCAgICAwCisgICAgfSA7CisKK3N0YXRpYyBjb25zdCBZWV9DSEFSIHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICA2LCAgICAxLCAgICAxLCAgICA2LAorICAgICAgICA2LCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA5LCAgICAxLCAgICAxLAorICAgICAgICA2LCAgICAxLCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgIDEwLCAgICA2LCAgICAxLCAgICA2LCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDEsICAgIDYsICAgIDYsICAgIDEsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNgorICAgIH0gOworCitzdGF0aWMgY29uc3QgWVlfQ0hBUiB5eV9tZXRhWzExXSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMKKyAgICB9IDsKKworc3RhdGljIGNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzI4XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjksICAgMzUsICAgMTgsICAgMzUsICAgMjIsICAgMTgsICAgMTUsICAgIDAsCisgICAgICAgIDgsICAgMTIsICAgMTYsICAgMzUsICAgMTEsICAgMzUsICAgIDAsICAgMzUsICAgMTMsICAgMzUsCisgICAgICAgMzUsICAgMTYsICAgMzUsICAgMjIsICAgMzUsICAgMzEsICAgMTIKKyAgICB9IDsKKworc3RhdGljIGNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbMjhdID0KKyAgICB7ICAgMCwKKyAgICAgICAyNSwgICAgMSwgICAyNSwgICAyNSwgICAyNiwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNywKKyAgICAgICAyNSwgICAyNiwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNywgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAgMCwgICAyNSwgICAyNQorICAgIH0gOworCitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X254dFs0Nl0gPQorICAgIHsgICAwLAorICAgICAgICA0LCAgICA1LCAgICA2LCAgICA3LCAgICA1LCAgICA4LCAgICA0LCAgICA5LCAgIDEwLCAgIDExLAorICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDE3LCAgIDIxLCAgIDE4LCAgIDE1LCAgIDIyLCAgIDE4LCAgIDE5LAorICAgICAgIDIzLCAgIDEzLCAgIDE2LCAgIDE1LCAgIDE0LCAgIDI0LCAgIDIwLCAgIDEzLCAgIDI1LCAgIDI1LAorICAgICAgIDI1LCAgIDIyLCAgIDEyLCAgIDEyLCAgICAzLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1CisgICAgfSA7CisKK3N0YXRpYyBjb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzQ2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTEsICAgMTEsICAgMTEsICAgMjcsICAgMTEsICAgMTksICAgMTUsICAgMTEsICAgMTMsICAgMTMsCisgICAgICAgMjIsICAgMTIsICAgIDksICAgIDgsICAgIDcsICAgMjIsICAgMjQsICAgIDUsICAgIDMsICAgIDAsCisgICAgICAgIDAsICAgMjQsICAgMjYsICAgMjYsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisvKiBJV1lVIHByYWdtYTogbm9fZm9yd2FyZF9kZWNsYXJlIHl5Z3V0c190ICovCisKKyNpZm5kZWYgX19jbGFuZ19hbmFseXplcl9fIC8qIFN1cHByZXNzIGNsYW5nIHNjYW4tYnVpbGQgd2FybmluZ3MgKi8KKworI2luY2x1ZGUgPGNtR2NjRGVwZmlsZUxleGVySGVscGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjZGVmaW5lIElOSVRJQUwgMAorCisjaWZuZGVmIFlZX0VYVFJBX1RZUEUKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lkICoKKyNlbmRpZgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFyczsKKyAgICBpbnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHl5bGV4X2luaXRfZXh0cmEgKCBZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCwgeXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfZGVidWcgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoIGludCBkZWJ1Z19mbGFnICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9leHRyYSAoIFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X2luICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfaW4gICggRklMRSAqIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqeXlnZXRfb3V0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoIEZJTEUgKiBfb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisJCQlpbnQgeXlnZXRfbGVuZyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICp5eWdldF90ZXh0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9saW5lbm8gKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9saW5lbm8gKCBpbnQgX2xpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9jb2x1bW4gICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfY29sdW1uICggaW50IF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX1VOUFVUCisKKyAgICBzdGF0aWMgdm9pZCB5eXVucHV0ICggaW50IGMsIGNoYXIgKmJ1Zl9wdHIgICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5ICggY2hhciAqLCBjb25zdCBjaGFyICosIGludCAsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICggY29uc3QgY2hhciAqICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IChpbnQpIGZyZWFkKGJ1ZiwgMSwgKHl5X3NpemVfdCkgbWF4X3NpemUsIHl5aW4pKSA9PSAwICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQorCitleHRlcm4gaW50IHl5bGV4ICh5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyAvKkxJTlRFRCovYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwljaGFyICp5eV9jcCwgKnl5X2JwOworCWludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKCB5eWluLCBZWV9CVUZfU0laRSAsIHl5c2Nhbm5lcik7CisJCX0KKworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CisJCX0KKworCXsKKworCXdoaWxlICggLypDT05TVENPTkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDI2ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gIT0gMzUgKTsKKworeXlfZmluZF9hY3Rpb246CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9hY3QgPT0gMCApCisJCQl7IC8qIGhhdmUgdG8gYmFjayB1cCAqLworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCX0KKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZSB0aGUgZG9sbGFyIHNpZ24uCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCgiJCIpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZSB0aGUgaGFzaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5hZGRUb0N1cnJlbnRQYXRoKCIjIik7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAoreworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDJOKzEgYmFja3NsYXNoZXMgcGx1cyBzcGFjZSAtPiBOIGJhY2tzbGFzaGVzIHBsdXMgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGMgPSAoc3RybGVuKHl5dGV4dCkgLSAxKSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcyhjLCAnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzLnB1c2hfYmFjaygnICcpOworICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPmFkZFRvQ3VycmVudFBhdGgocy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMk4gYmFja3NsYXNoZXMgcGx1cyBzcGFjZSAtPiAyTiBiYWNrc2xhc2hlcywgZW5kIG9mIGZpbGVuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgIHl5dGV4dFtzdHJsZW4oeXl0ZXh0KSAtIDFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5hZGRUb0N1cnJlbnRQYXRoKHl5dGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3RGVwZW5kZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBsaW5lIGNvbnRpbnVhdGlvbiBlbmRzIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKwlZWV9CUkVBSworY2FzZSA2OgorLyogcnVsZSA2IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIG5ld2xpbmUgZW5kcyB0aGUgY3VycmVudCBmaWxlIG5hbWUgYW5kIHRoZSBjdXJyZW50IHJ1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3RW50cnkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBjb2xvbiBmb2xsb3dlZCBieSBzcGFjZSBlbmRzIHRoZSBydWxlcyBhbmQgc3RhcnRzIGEgbmV3IGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3RGVwZW5kZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSdWxlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBzZXBhcmF0ZWQgYnkgYmxvY2tzIG9mIHdoaXRlc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3UnVsZU9yRGVwZW5kZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYSBzcGFuIG9mIHBsYWluIHRleHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290IGFuIG90aGVyd2lzZSB1bm1hdGNoZWQgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPmFkZFRvQ3VycmVudFBhdGgoeXl0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorCVlZX0JSRUFLCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CisJeXl0ZXJtaW5hdGUoKTsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJeworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBpbnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKworCQkJCWlmICggeXl3cmFwKCB5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KKwl9IC8qIGVuZCBvZiB1c2VyJ3MgZGVjbGFyYXRpb25zICovCit9IC8qIGVuZCBvZiB5eWxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwljaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIDEpOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCAodm9pZCAqKSBiLT55eV9jaF9idWYsCisJCQkJCQkJICh5eV9zaXplX3QpIChiLT55eV9idWZfc2l6ZSArIDIpICwgeXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSBOVUxMOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KCB5eWluICAsIHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJaW50IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygKKwkJCSh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLCAoeXlfc2l6ZV90KSBuZXdfc2l6ZSAsIHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJCS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplID0gKGludCkgKG5ld19zaXplIC0gMik7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwljaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAyNiApCisJCQkJeXlfYyA9IHl5X21ldGFbeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCWNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAyNiApCisJCQl5eV9jID0geXlfbWV0YVt5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDI1KTsKKworCSh2b2lkKXl5ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9fVU5QVVQKKworICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLCBjaGFyICogeXlfYnAgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJY2hhciAqeXlfY3A7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwkvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KKwkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggeXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQl7IC8qIG5lZWQgdG8gc2hpZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLworCQkvKiArMiBmb3IgRU9CIGNoYXJzLiAqLworCQlpbnQgbnVtYmVyX3RvX21vdmUgPSB5eWctPnl5X25fY2hhcnMgKyAyOworCQljaGFyICpkZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWworCQkJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07CisJCWNoYXIgKnNvdXJjZSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXTsKKworCQl3aGlsZSAoIHNvdXJjZSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCSotLWRlc3QgPSAqLS1zb3VyY2U7CisKKwkJeXlfY3AgKz0gKGludCkgKGRlc3QgLSBzb3VyY2UpOworCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9CisJCQl5eWctPnl5X25fY2hhcnMgPSAoaW50KSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplOworCisJCWlmICggeXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQkJWVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93IiApOworCQl9CisKKwkqLS15eV9jcCA9IChjaGFyKSBjOworCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7CisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7Cit9CisKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCWludCBvZmZzZXQgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKTsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KCB5eWluICwgeXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHl5d3JhcCggeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlciggeXlpbiwgWVlfQlVGX1NJWkUgLCB5eXNjYW5uZXIpOworCX0KKworCXl5X2luaXRfYnVmZmVyKCBZWV9DVVJSRU5UX0JVRkZFUiwgaW5wdXRfZmlsZSAsIHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoIHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2MoIHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICwgeXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyggKHl5X3NpemVfdCkgKGItPnl5X2J1Zl9zaXplICsgMikgLCB5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1ZmZlciggYiwgZmlsZSAsIHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQl5eWZyZWUoICh2b2lkICopIGItPnl5X2NoX2J1ZiAsIHl5c2Nhbm5lciApOworCisJeXlmcmVlKCAodm9pZCAqKSBiICwgeXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJeXlfZmx1c2hfYnVmZmVyKCBiICwgeXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSBmaWxlID8gKGlzYXR0eSggZmlsZW5vKGZpbGUpICkgPiAwKSA6IDA7CisKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCB5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoIHl5c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICwgeXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworICAgICAgbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLiAqLworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJeXlfc2l6ZV90IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gTlVMTDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKCBzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAsIHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gKGludCkgKHNpemUgLSAyKTsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IE5VTEw7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIoIGIgLCB5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoY29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCisJcmV0dXJuIHl5X3NjYW5fYnl0ZXMoIHl5c3RyLCAoaW50KSBzdHJsZW4oeXlzdHIpICwgeXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKGNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJaW50IGk7CisKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gKHl5X3NpemVfdCkgKF95eWJ5dGVzX2xlbiArIDIpOworCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MoIG4gLCB5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoIGJ1ZiwgbiAsIHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoY29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwkodm9pZCl5eWc7CisJZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5eWdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHl5Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqeXlnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnl5Z2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitjaGFyICp5eWdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBfbGluZV9udW1iZXIgbGluZSBudW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2xpbmVubyAoaW50ICBfbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOworCisgICAgeXlsaW5lbm8gPSBfbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgorICogQHBhcmFtIF9jb2x1bW5fbm8gY29sdW1uIG51bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgeXlzZXRfY29sdW1uIChpbnQgIF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOworCisgICAgeXljb2x1bW4gPSBfY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIF9pbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHl5c2V0X2luIChGSUxFICogIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBfaW5fc3RyIDsKK30KKwordm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgX291dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5b3V0ID0gX291dF9zdHIgOworfQorCitpbnQgeXlnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgIF9iZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBfYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KKworLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiB5eWxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KK2ludCB5eWxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKK3sKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHl5bGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgeXlsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHl5YWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCitpbnQgeXlsZXhfaW5pdF9leHRyYSggWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQsIHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCit7CisgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICB5eXNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOworCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHl5bGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KKyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7CisgICAgeXlnLT55eV9jX2J1Zl9wID0gTlVMTDsKKyAgICB5eWctPnl5X2luaXQgPSAwOworICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5eWluID0gTlVMTDsKKyAgICB5eW91dCA9IE5VTEw7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKCBZWV9DVVJSRU5UX0JVRkZFUiAsIHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICwgeXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHl5ZnJlZSggeXlnLT55eV9zdGFydF9zdGFjayAsIHl5c2Nhbm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICB5eWZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIGNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKworCWludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKGNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKwlyZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKworCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJICovCisJcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKwordm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19jbGFuZ19hbmFseXplcl9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzQwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaApAQCAtMCwwICsxLDY4NyBAQAorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlIRUFERVJfSAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlIRUFERVJfSCAxCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eUlOX0hFQURFUiAxCisKKyNkZWZpbmUgRkxFWElOVF9IIDEKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gNAorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworI2lmZGVmIHl5X2NyZWF0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2NyZWF0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9jcmVhdGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2RlbGV0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2RlbGV0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9kZWxldGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9kZWxldGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X3NjYW5fYnVmZmVyCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9zY2FuX3N0cmluZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zY2FuX3N0cmluZyBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmcKKyNlbmRpZgorCisjaWZkZWYgeXlfc2Nhbl9ieXRlcworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9ieXRlc19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnl0ZXMgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnl0ZXMKKyNlbmRpZgorCisjaWZkZWYgeXlfaW5pdF9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfaW5pdF9idWZmZXIgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2ZsdXNoX2J1ZmZlcgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfZmx1c2hfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfZmx1c2hfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9mbHVzaF9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfbG9hZF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfbG9hZF9idWZmZXJfc3RhdGUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5X3N3aXRjaF90b19idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zd2l0Y2hfdG9fYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5cHVzaF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5cHVzaF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXB1c2hfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXB1c2hfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlwb3BfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlwb3BfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXBvcF9idWZmZXJfc3RhdGUKKyNlbmRpZgorCisjaWZkZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWVuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWVuc3VyZV9idWZmZXJfc3RhY2sgY21HY2NEZXBmaWxlX3l5ZW5zdXJlX2J1ZmZlcl9zdGFjaworI2VuZGlmCisKKyNpZmRlZiB5eWxleAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlsZXhfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleCBjbUdjY0RlcGZpbGVfeXlsZXgKKyNlbmRpZgorCisjaWZkZWYgeXlyZXN0YXJ0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXJlc3RhcnRfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXJlc3RhcnQgY21HY2NEZXBmaWxlX3l5cmVzdGFydAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdCBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdF9leHRyYSBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9kZXN0cm95CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfZGVzdHJveSBjbUdjY0RlcGZpbGVfeXlsZXhfZGVzdHJveQorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9kZWJ1ZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9kZWJ1ZyBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWcKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfZGVidWcKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfZGVidWcgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2V4dHJhIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9leHRyYQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9leHRyYSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmEKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfaW4KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X2luX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfaW4gY21HY2NEZXBmaWxlX3l5Z2V0X2luCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2luCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9pbl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2luIGNtR2NjRGVwZmlsZV95eXNldF9pbgorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9vdXQKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X291dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X291dCBjbUdjY0RlcGZpbGVfeXlnZXRfb3V0CisjZW5kaWYKKworI2lmZGVmIHl5c2V0X291dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfb3V0IGNtR2NjRGVwZmlsZV95eXNldF9vdXQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGVuZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfbGVuZ19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2xlbmcgY21HY2NEZXBmaWxlX3l5Z2V0X2xlbmcKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfdGV4dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfdGV4dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X3RleHQgY21HY2NEZXBmaWxlX3l5Z2V0X3RleHQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGluZW5vCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9saW5lbm8gY21HY2NEZXBmaWxlX3l5Z2V0X2xpbmVubworI2VuZGlmCisKKyNpZmRlZiB5eXNldF9saW5lbm8KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2xpbmVub19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2xpbmVubyBjbUdjY0RlcGZpbGVfeXlzZXRfbGluZW5vCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2NvbHVtbgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfY29sdW1uIGNtR2NjRGVwZmlsZV95eWdldF9jb2x1bW4KKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfY29sdW1uCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9jb2x1bW4gY21HY2NEZXBmaWxlX3l5c2V0X2NvbHVtbgorI2VuZGlmCisKKyNpZmRlZiB5eXdyYXAKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5d3JhcF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5d3JhcCBjbUdjY0RlcGZpbGVfeXl3cmFwCisjZW5kaWYKKworI2lmZGVmIHl5YWxsb2MKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5YWxsb2NfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWFsbG9jIGNtR2NjRGVwZmlsZV95eWFsbG9jCisjZW5kaWYKKworI2lmZGVmIHl5cmVhbGxvYworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlyZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlyZWFsbG9jIGNtR2NjRGVwZmlsZV95eXJlYWxsb2MKKyNlbmRpZgorCisjaWZkZWYgeXlmcmVlCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWZyZWVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWZyZWUgY21HY2NEZXBmaWxlX3l5ZnJlZQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNpZm5kZWYgU0laRV9NQVgKKyNkZWZpbmUgU0laRV9NQVggICAgICAgICAgICAgICAofihzaXplX3QpMCkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMrKyBoZWFkZXJzLiAqLworCisvKiBUT0RPOiB0aGlzIGlzIGFsd2F5cyBkZWZpbmVkLCBzbyBpbmxpbmUgaXQgKi8KKyNkZWZpbmUgeXljb25zdCBjb25zdAorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSB5eW5vcmV0dXJuIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxzZQorI2RlZmluZSB5eW5vcmV0dXJuCisjZW5kaWYKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKK3ZvaWQgeXlyZXN0YXJ0ICggRklMRSAqaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICggWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICggRklMRSAqZmlsZSwgaW50IHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKCBZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICggY2hhciAqYmFzZSwgeXlfc2l6ZV90IHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoIGNvbnN0IGNoYXIgKnl5X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKCBjb25zdCBjaGFyICpieXRlcywgaW50IGxlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICp5eWFsbG9jICggeXlfc2l6ZV90ICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICp5eXJlYWxsb2MgKCB2b2lkICosIHl5X3NpemVfdCAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eWZyZWUgKCB2b2lkICogLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXdyYXAoeXlzY2FubmVyKSAoLypDT05TVENPTkQqLzEpCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgorCisjaWZkZWYgWVlfSEVBREVSX0VYUE9SVF9TVEFSVF9DT05ESVRJT05TCisjZGVmaW5lIElOSVRJQUwgMAorCisjZW5kaWYKKworI2lmbmRlZiBZWV9FWFRSQV9UWVBFCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgdm9pZCAqCisjZW5kaWYKKworaW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHl5bGV4X2luaXRfZXh0cmEgKCBZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCwgeXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfZGVidWcgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoIGludCBkZWJ1Z19mbGFnICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9leHRyYSAoIFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X2luICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfaW4gICggRklMRSAqIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqeXlnZXRfb3V0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoIEZJTEUgKiBfb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisJCQlpbnQgeXlnZXRfbGVuZyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICp5eWdldF90ZXh0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9saW5lbm8gKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9saW5lbm8gKCBpbnQgX2xpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9jb2x1bW4gICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfY29sdW1uICggaW50IF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoIGNvbnN0IGNoYXIgKiAsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgeXlsZXggKHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisjdW5kZWYgWVlfTkVXX0ZJTEUKKyN1bmRlZiBZWV9GTFVTSF9CVUZGRVIKKyN1bmRlZiB5eV9zZXRfYm9sCisjdW5kZWYgeXlfbmV3X2J1ZmZlcgorI3VuZGVmIHl5X3NldF9pbnRlcmFjdGl2ZQorI3VuZGVmIFlZX0RPX0JFRk9SRV9BQ1RJT04KKworI2lmZGVmIFlZX0RFQ0xfSVNfT1VSUworI3VuZGVmIFlZX0RFQ0xfSVNfT1VSUworI3VuZGVmIFlZX0RFQ0wKKyNlbmRpZgorCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eV9jcmVhdGVfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X2NyZWF0ZV9idWZmZXIKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlfZGVsZXRlX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9kZWxldGVfYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X3NjYW5fYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3NjYW5fc3RyaW5nX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X3NjYW5fc3RyaW5nCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnl0ZXNfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfc2Nhbl9ieXRlcworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eV9pbml0X2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9pbml0X2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eV9mbHVzaF9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfZmx1c2hfYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfc3dpdGNoX3RvX2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXB1c2hfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5cHVzaF9idWZmZXJfc3RhdGUKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlwb3BfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWVuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5bGV4X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGV4CisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5cmVzdGFydF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXJlc3RhcnQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWxleF9pbml0CisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5bGV4X2luaXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlsZXhfaW5pdF9leHRyYQorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWxleF9kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGV4X2Rlc3Ryb3kKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfZGVidWcKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfZGVidWcKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfZXh0cmEKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfZXh0cmEKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfaW5fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfaW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfaW5fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfaW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X291dAorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXNldF9vdXRfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfb3V0CisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5Z2V0X2xlbmdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbGVuZworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWdldF90ZXh0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X3RleHQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfbGluZW5vX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X2xpbmVubworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXNldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfbGluZW5vCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5Z2V0X2NvbHVtbl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWdldF9jb2x1bW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5c2V0X2NvbHVtbgorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXdyYXBfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXl3cmFwCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5Z2V0X2x2YWxfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbHZhbAorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXNldF9sdmFsX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5c2V0X2x2YWwKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfbGxvY19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWdldF9sbG9jCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5c2V0X2xsb2NfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfbGxvYworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5YWxsb2MKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlyZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5cmVhbGxvYworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWZyZWVfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlmcmVlCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5dGV4dF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXRleHQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlsZW5nX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGVuZworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWluX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5aW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlvdXRfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlvdXQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlfZmxleF9kZWJ1Z19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9mbGV4X2RlYnVnCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5bGluZW5vX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGluZW5vCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5dGFibGVzX2Zsb2FkX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5dGFibGVzX2Zsb2FkCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5dGFibGVzX2Rlc3Ryb3lfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXl0YWJsZXNfZGVzdHJveQorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eVRBQkxFU19OQU1FX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5VEFCTEVTX05BTUUKKyNlbmRpZgorCisjdW5kZWYgY21HY2NEZXBmaWxlX3l5SU5fSEVBREVSCisjZW5kaWYgLyogY21HY2NEZXBmaWxlX3l5SEVBREVSX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5pbi5sIGIvU291cmNlL0xleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmluLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmODU3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5pbi5sCkBAIC0wLDAgKzEsNzIgQEAKKyV7CisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKy8qIElXWVUgcHJhZ21hOiBub19mb3J3YXJkX2RlY2xhcmUgeXlndXRzX3QgKi8KKworI2lmbmRlZiBfX2NsYW5nX2FuYWx5emVyX18gLyogU3VwcHJlc3MgY2xhbmcgc2Nhbi1idWlsZCB3YXJuaW5ncyAqLworCisjaW5jbHVkZSA8Y21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CislfQorCislb3B0aW9uIHByZWZpeD0iY21HY2NEZXBmaWxlX3l5IgorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiByZWVudHJhbnQKKyVwb2ludGVyCisKK1dTUEFDRSBbIFx0XQorTkVXTElORSBccj9cbgorCislJQorXCR7Mn0gICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGUgdGhlIGRvbGxhciBzaWduLgorICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPmFkZFRvQ3VycmVudFBhdGgoIiQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorXFwjICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGUgdGhlIGhhc2guCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCgiIyIpOworICAgICAgICAgICAgICAgICAgICAgICB9CisoXFxcXCkqXFxbIF0gICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyTisxIGJhY2tzbGFzaGVzIHBsdXMgc3BhY2UgLT4gTiBiYWNrc2xhc2hlcyBwbHVzIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjID0gKHN0cmxlbih5eXRleHQpIC0gMSkgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHMoYywgJ1xcJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgcy5wdXNoX2JhY2soJyAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5hZGRUb0N1cnJlbnRQYXRoKHMuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyhcXFxcKStbIF0gICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDJOIGJhY2tzbGFzaGVzIHBsdXMgc3BhY2UgLT4gMk4gYmFja3NsYXNoZXMsIGVuZCBvZiBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eXRleHRbc3RybGVuKHl5dGV4dCkgLSAxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPm5ld0RlcGVuZGVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQore1dTUEFDRX0qXFx7TkVXTElORX0gICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBsaW5lIGNvbnRpbnVhdGlvbiBlbmRzIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KK3tORVdMSU5FfSAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbmV3bGluZSBlbmRzIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgdGhlIGN1cnJlbnQgcnVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdFbnRyeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9Cis6e1dTUEFDRX0rICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGNvbG9uIGZvbGxvd2VkIGJ5IHNwYWNlIGVuZHMgdGhlIHJ1bGVzIGFuZCBzdGFydHMgYSBuZXcgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KK3tXU1BBQ0V9KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIHNlcGFyYXRlZCBieSBibG9ja3Mgb2Ygd2hpdGVzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdSdWxlT3JEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KK1thLXpBLVowLTkrLC9fLn4oKX17JT1AXHg1Qlx4NUQhXHg4MC1ceEZGLV0rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYSBzcGFuIG9mIHBsYWluIHRleHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICB9CisuICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYW4gb3RoZXJ3aXNlIHVubWF0Y2hlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICB9CisKKyUlCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19jbGFuZ19hbmFseXplcl9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmMgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmMKaW5kZXggMTVkY2RhMC4uZWM3NDI0YyAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5jCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuYwpAQCAtMjc4Nyw3ICsyNzg3LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogY21MaXN0RmlsZUxleGVyX1Rva2VuKiBjbUxpc3RGaWxlTGV4ZXJfU2NhbihjbUxpc3RGaWxlTGV4ZXIqIGxleGVyKQogewotICBpZiAoIWxleGVyLT5maWxlKSB7CisgIGlmICghbGV4ZXItPmZpbGUgJiYgIWxleGVyLT5zdHJpbmdfYnVmZmVyKSB7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgaWYgKGNtTGlzdEZpbGVMZXhlcl95eWxleChsZXhlci0+c2Nhbm5lciwgbGV4ZXIpKSB7CkBAIC0yODAxLDIxICsyODAxLDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGxvbmcgY21MaXN0RmlsZUxleGVyX0dldEN1cnJlbnRMaW5lKGNtTGlzdEZpbGVMZXhlciogbGV4ZXIpCiB7Ci0gIGlmIChsZXhlci0+ZmlsZSkgewotICAgIHJldHVybiBsZXhlci0+bGluZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQorICByZXR1cm4gbGV4ZXItPmxpbmU7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogbG9uZyBjbUxpc3RGaWxlTGV4ZXJfR2V0Q3VycmVudENvbHVtbihjbUxpc3RGaWxlTGV4ZXIqIGxleGVyKQogewotICBpZiAobGV4ZXItPmZpbGUpIHsKLSAgICByZXR1cm4gbGV4ZXItPmNvbHVtbjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQorICByZXR1cm4gbGV4ZXItPmNvbHVtbjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmluLmwgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmluLmwKaW5kZXggZmRmMTRkMi4uOTRjZjhhNSAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5pbi5sCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuaW4ubApAQCAtNTAwLDcgKzUwMCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGNtTGlzdEZpbGVMZXhlcl9Ub2tlbiogY21MaXN0RmlsZUxleGVyX1NjYW4oY21MaXN0RmlsZUxleGVyKiBsZXhlcikKIHsKLSAgaWYgKCFsZXhlci0+ZmlsZSkgeworICBpZiAoIWxleGVyLT5maWxlICYmICFsZXhlci0+c3RyaW5nX2J1ZmZlcikgewogICAgIHJldHVybiAwOwogICB9CiAgIGlmIChjbUxpc3RGaWxlTGV4ZXJfeXlsZXgobGV4ZXItPnNjYW5uZXIsIGxleGVyKSkgewpAQCAtNTE0LDIxICs1MTQsMTMgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogbG9uZyBjbUxpc3RGaWxlTGV4ZXJfR2V0Q3VycmVudExpbmUoY21MaXN0RmlsZUxleGVyKiBsZXhlcikKIHsKLSAgaWYgKGxleGVyLT5maWxlKSB7Ci0gICAgcmV0dXJuIGxleGVyLT5saW5lOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9CisgIHJldHVybiBsZXhlci0+bGluZTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBsb25nIGNtTGlzdEZpbGVMZXhlcl9HZXRDdXJyZW50Q29sdW1uKGNtTGlzdEZpbGVMZXhlciogbGV4ZXIpCiB7Ci0gIGlmIChsZXhlci0+ZmlsZSkgewotICAgIHJldHVybiBsZXhlci0+Y29sdW1uOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9CisgIHJldHVybiBsZXhlci0+Y29sdW1uOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dAppbmRleCBjYjg5ZDE5Li45OGRkMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1F0RGlhbG9nL0NNYWtlTGlzdHMudHh0CkBAIC0xNzgsNiArMTc4LDEwIEBACiAgIHRhcmdldF9zb3VyY2VzKGNtYWtlLWd1aSBQUklWQVRFICQ8VEFSR0VUX09CSkVDVFM6Q01ha2VWZXJzaW9uPikKIGVuZGlmKCkKIAoraWYoQ01ha2VfSk9CX1BPT0xfTElOS19CSU4pCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgY21ha2UtZ3VpIFBST1BFUlRZIEpPQl9QT09MX0xJTksgImxpbmstYmluIikKK2VuZGlmKCkKKwogIyBjbWFrZS1ndWkgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgZm9yIGBpbmNsdWRlLXdoYXQteW91LXVzZWAuCiAjIEJsb2NrIHRoZSB0b29sIHVudGlsIHRoaXMgaXMgZG9uZS4KIHNldF90YXJnZXRfcHJvcGVydGllcyhjbWFrZS1ndWkgUFJPUEVSVElFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXAuY3h4IGIvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXAuY3h4CmluZGV4IGVlODFhN2QuLjlkOTI4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwLmN4eAorKysgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cC5jeHgKQEAgLTIwMSw4ICsyMDEsNyBAQAogICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGFyZ3NbMV0udG9Mb2NhbDhCaXQoKS5kYXRhKCkpOwogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIENNYWtlQ2FjaGUudHh0Ci0gICAgICBzdGQ6OnN0cmluZyBidWlsZEZpbGVQYXRoID0KLSAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgiQ01ha2VDYWNoZS50eHQiLCBmaWxlUGF0aC5jX3N0cigpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPSBjbVN0ckNhdChmaWxlUGF0aCwgIi9DTWFrZUNhY2hlLnR4dCIpOwogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIENNYWtlQ2FjaGUudHh0IGZpbGUKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZVBhdGgpID09ICJDTWFrZUNhY2hlLnR4dCIgJiYKQEAgLTIxMSw4ICsyMTAsNyBAQAogICAgICAgfQogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIENNYWtlTGlzdHMudHh0Ci0gICAgICBzdGQ6OnN0cmluZyBzcmNGaWxlUGF0aCA9Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoIkNNYWtlTGlzdHMudHh0IiwgZmlsZVBhdGguY19zdHIoKSk7CisgICAgICBzdGQ6OnN0cmluZyBzcmNGaWxlUGF0aCA9IGNtU3RyQ2F0KGZpbGVQYXRoLCAiL0NNYWtlTGlzdHMudHh0Iik7CiAKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGJ1aWxkRmlsZVBhdGguY19zdHIoKSkpIHsKICAgICAgICAgZGlhbG9nLnNldEJpbmFyeURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KApkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuY3h4IGIvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuY3h4CmluZGV4IDQzNmE5MDQuLjI3NmJmNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwRGlhbG9nLmN4eAorKysgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJDTWFrZVNldHVwRGlhbG9nLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlIDxRQ2xvc2VFdmVudD4KICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEZXNrdG9wU2VydmljZXM+CkBAIC0zOSwyMyArNDEsMjEgQEAKIAogUUNNYWtlVGhyZWFkOjpRQ01ha2VUaHJlYWQoUU9iamVjdCogcCkKICAgOiBRVGhyZWFkKHApCi0gICwgQ01ha2VJbnN0YW5jZShudWxscHRyKQogewogfQogCiBRQ01ha2UqIFFDTWFrZVRocmVhZDo6Y21ha2VJbnN0YW5jZSgpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5DTWFrZUluc3RhbmNlOworICByZXR1cm4gdGhpcy0+Q01ha2VJbnN0YW5jZS5nZXQoKTsKIH0KIAogdm9pZCBRQ01ha2VUaHJlYWQ6OnJ1bigpCiB7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBuZXcgUUNNYWtlOworICB0aGlzLT5DTWFrZUluc3RhbmNlID0gY206Om1ha2VfdW5pcXVlPFFDTWFrZT4oKTsKICAgLy8gZW1pdCB0aGF0IHRoaXMgY21ha2UgdGhyZWFkIGlzIHJlYWR5IGZvciB1c2UKICAgZW1pdCB0aGlzLT5jbWFrZUluaXRpYWxpemVkKCk7CiAgIHRoaXMtPmV4ZWMoKTsKLSAgZGVsZXRlIHRoaXMtPkNNYWtlSW5zdGFuY2U7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBudWxscHRyOworICB0aGlzLT5DTWFrZUluc3RhbmNlLnJlc2V0KCk7CiB9CiAKIENNYWtlU2V0dXBEaWFsb2c6OkNNYWtlU2V0dXBEaWFsb2coKQpAQCAtMTIwNiw3ICsxMjA2LDcgQEAKIAogdm9pZCBDTWFrZVNldHVwRGlhbG9nOjpkb091dHB1dENvbnRleHRNZW51KFFQb2ludCBwdCkKIHsKLSAgUU1lbnUqIG1lbnUgPSB0aGlzLT5PdXRwdXQtPmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKTsKKyAgc3RkOjp1bmlxdWVfcHRyPFFNZW51PiBtZW51KHRoaXMtPk91dHB1dC0+Y3JlYXRlU3RhbmRhcmRDb250ZXh0TWVudSgpKTsKIAogICBtZW51LT5hZGRTZXBhcmF0b3IoKTsKICAgbWVudS0+YWRkQWN0aW9uKHRyKCJGaW5kLi4uIiksIHRoaXMsIFNMT1QoZG9PdXRwdXRGaW5kRGlhbG9nKCkpLApAQCAtMTIyMCw3ICsxMjIwLDYgQEAKICAgICAgICAgICAgICAgICAgIFFLZXlTZXF1ZW5jZShRdDo6S2V5X0Y4KSk7CiAKICAgbWVudS0+ZXhlYyh0aGlzLT5PdXRwdXQtPm1hcFRvR2xvYmFsKHB0KSk7Ci0gIGRlbGV0ZSBtZW51OwogfQogCiB2b2lkIENNYWtlU2V0dXBEaWFsb2c6OmRvT3V0cHV0RmluZERpYWxvZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5oIGIvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuaAppbmRleCBmMjNhZWU2Li5kMWUyMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5oCisrKyBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwRGlhbG9nLmgKQEAgLTMsNiArMyw4IEBACiAjaWZuZGVmIENNYWtlU2V0dXBEaWFsb2dfaAogI2RlZmluZSBDTWFrZVNldHVwRGlhbG9nX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgIlFDTWFrZS5oIgogI2luY2x1ZGUgPFFFdmVudExvb3A+CiAjaW5jbHVkZSA8UU1haW5XaW5kb3c+CkBAIC0xNDMsNyArMTQ1LDcgQEAKIAogcHJvdGVjdGVkOgogICB2aXJ0dWFsIHZvaWQgcnVuKCk7Ci0gIFFDTWFrZSogQ01ha2VJbnN0YW5jZTsKKyAgc3RkOjp1bmlxdWVfcHRyPFFDTWFrZT4gQ01ha2VJbnN0YW5jZTsKIH07CiAKICNlbmRpZiAvLyBDTWFrZVNldHVwRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9GaXJzdENvbmZpZ3VyZS5jeHggYi9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuY3h4CmluZGV4IGNhMjhiMTkuLjNjMjRiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9GaXJzdENvbmZpZ3VyZS5jeHgKKysrIGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmN4eApAQCAtMTAsOCArMTAsMTIgQEAKIAogI2luY2x1ZGUgIkNvbXBpbGVycy5oIgogCi1TdGFydENvbXBpbGVyU2V0dXA6OlN0YXJ0Q29tcGlsZXJTZXR1cChRV2lkZ2V0KiBwKQorU3RhcnRDb21waWxlclNldHVwOjpTdGFydENvbXBpbGVyU2V0dXAoUVN0cmluZyBkZWZhdWx0R2VuZXJhdG9yUGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGRlZmF1bHRHZW5lcmF0b3JUb29sc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCogcCkKICAgOiBRV2l6YXJkUGFnZShwKQorICAsIERlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybShzdGQ6Om1vdmUoZGVmYXVsdEdlbmVyYXRvclBsYXRmb3JtKSkKKyAgLCBEZWZhdWx0R2VuZXJhdG9yVG9vbHNldChzdGQ6Om1vdmUoZGVmYXVsdEdlbmVyYXRvclRvb2xzZXQpKQogewogICBRVkJveExheW91dCogbCA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKICAgbC0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwodHIoIlNwZWNpZnkgdGhlIGdlbmVyYXRvciBmb3IgdGhpcyBwcm9qZWN0IikpKTsKQEAgLTY4LDYgKzcyLDEwIEBACiAgIFRvb2xzZXQgPSBuZXcgUUxpbmVFZGl0KGZyYW1lKTsKICAgbC0+YWRkV2lkZ2V0KFRvb2xzZXQpOwogCisgIC8vIERlZmF1bHQgdG8gQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQgZW52IHZhciBpZiBzZXQKKyAgaWYgKCFEZWZhdWx0R2VuZXJhdG9yVG9vbHNldC5pc0VtcHR5KCkpIHsKKyAgICB0aGlzLT5Ub29sc2V0LT5zZXRUZXh0KERlZmF1bHRHZW5lcmF0b3JUb29sc2V0KTsKKyAgfQogICByZXR1cm4gZnJhbWU7CiB9CiAKQEAgLTE5OSw2ICsyMDcsMTQgQEAKIAogICAgIHRoaXMtPlBsYXRmb3JtT3B0aW9ucy0+YWRkSXRlbXMocGxhdGZvcm1fbGlzdCk7CiAgICAgUGxhdGZvcm1GcmFtZS0+c2hvdygpOworCisgICAgLy8gRGVmYXVsdCB0byBnZW5lcmF0b3IgcGxhdGZvcm0gZnJvbSBlbnZpcm9ubWVudAorICAgIGlmICghRGVmYXVsdEdlbmVyYXRvclBsYXRmb3JtLmlzRW1wdHkoKSkgeworICAgICAgaW50IHBsYXRmb3JtX2luZGV4ID0gcGxhdGZvcm1zLmluZGV4T2YoRGVmYXVsdEdlbmVyYXRvclBsYXRmb3JtKTsKKyAgICAgIGlmIChwbGF0Zm9ybV9pbmRleCAhPSAtMSkgeworICAgICAgICB0aGlzLT5QbGF0Zm9ybU9wdGlvbnMtPnNldEN1cnJlbnRJbmRleChwbGF0Zm9ybV9pbmRleCk7CisgICAgICB9CisgICAgfQogICB9IGVsc2UgewogICAgIFBsYXRmb3JtRnJhbWUtPmhpZGUoKTsKICAgfQpAQCAtNDIxLDggKzQzNywyNiBAQAogCiBGaXJzdENvbmZpZ3VyZTo6Rmlyc3RDb25maWd1cmUoKQogeworICBjb25zdCBjaGFyKiBlbnZfZ2VuZXJhdG9yID0gc3RkOjpnZXRlbnYoIkNNQUtFX0dFTkVSQVRPUiIpOworICBjb25zdCBjaGFyKiBlbnZfZ2VuZXJhdG9yX3BsYXRmb3JtID0gbnVsbHB0cjsKKyAgY29uc3QgY2hhciogZW52X2dlbmVyYXRvcl90b29sc2V0ID0gbnVsbHB0cjsKKyAgaWYgKGVudl9nZW5lcmF0b3IgJiYgc3RkOjpzdHJsZW4oZW52X2dlbmVyYXRvcikpIHsKKyAgICBtRGVmYXVsdEdlbmVyYXRvciA9IGVudl9nZW5lcmF0b3I7CisgICAgZW52X2dlbmVyYXRvcl9wbGF0Zm9ybSA9IHN0ZDo6Z2V0ZW52KCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iKTsKKyAgICBlbnZfZ2VuZXJhdG9yX3Rvb2xzZXQgPSBzdGQ6OmdldGVudigiQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQiKTsKKyAgfQorCisgIGlmICghZW52X2dlbmVyYXRvcl9wbGF0Zm9ybSkgeworICAgIGVudl9nZW5lcmF0b3JfcGxhdGZvcm0gPSAiIjsKKyAgfQorCisgIGlmICghZW52X2dlbmVyYXRvcl90b29sc2V0KSB7CisgICAgZW52X2dlbmVyYXRvcl90b29sc2V0ID0gIiI7CisgIH0KKwogICAvLyB0aGlzLT5zZXRPcHRpb24oUVdpemFyZDo6SGF2ZUZpbmlzaEJ1dHRvbk9uRWFybHlQYWdlcywgdHJ1ZSk7Ci0gIHRoaXMtPm1TdGFydENvbXBpbGVyU2V0dXBQYWdlID0gbmV3IFN0YXJ0Q29tcGlsZXJTZXR1cCh0aGlzKTsKKyAgdGhpcy0+bVN0YXJ0Q29tcGlsZXJTZXR1cFBhZ2UgPSBuZXcgU3RhcnRDb21waWxlclNldHVwKAorICAgIGVudl9nZW5lcmF0b3JfcGxhdGZvcm0sIGVudl9nZW5lcmF0b3JfdG9vbHNldCwgdGhpcyk7CiAgIHRoaXMtPnNldFBhZ2UoU3RhcnQsIHRoaXMtPm1TdGFydENvbXBpbGVyU2V0dXBQYWdlKTsKICAgUU9iamVjdDo6Y29ubmVjdCh0aGlzLT5tU3RhcnRDb21waWxlclNldHVwUGFnZSwgU0lHTkFMKHNlbGVjdGlvbkNoYW5nZWQoKSksCiAgICAgICAgICAgICAgICAgICAgdGhpcywgU0xPVChyZXN0YXJ0KCkpKTsKQEAgLTUwNCw2ICs1MzgsMTcgQEAKICAgdGhpcy0+bUNyb3NzQ29tcGlsZXJTZXR1cFBhZ2UtPnNldEluY2x1ZGVNb2RlKAogICAgIHNldHRpbmdzLnZhbHVlKCJJbmNsdWRlTW9kZSIsIDApLnRvSW50KCkpOwogICBzZXR0aW5ncy5lbmRHcm91cCgpOworCisgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBhcHBsaWNhdGlvbiBzZXR0aW5ncyBiZWNhdXNlLi4uCisgIC8vIC0gdGhleSdyZSBoYXJkZXIgdG8gc2V0CisgIC8vIC0gc2V0dGluZ3MgYWx3YXlzIGV4aXN0IGFmdGVyIHRoZSBwcm9ncmFtIGlzIHJ1biBvbmNlLCBzbyB0aGUgZW52aXJvbm1lbnQKKyAgLy8gICAgIHZhcmlhYmxlcyB3b3VsZCBuZXZlciBiZSB1c2VkIG90aGVyd2lzZQorICAvLyAtIHBsYXRmb3JtIGFuZCB0b29sc2V0IGFyZSBwb3B1bGF0ZWQgb25seSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcywgc28KKyAgLy8gICAgIHRoaXMgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIHRha2VuIGZyb20gZW52aXJvbm1lbnQsIHdoaWxlIHRoZQorICAvLyAgICAgZ2VuZXJhdG9yIGlzIHRha2VuIGZyb20gYXBwbGljYXRpb24gc2V0dGluZ3MKKyAgaWYgKCFtRGVmYXVsdEdlbmVyYXRvci5pc0VtcHR5KCkpIHsKKyAgICB0aGlzLT5tU3RhcnRDb21waWxlclNldHVwUGFnZS0+c2V0Q3VycmVudEdlbmVyYXRvcihtRGVmYXVsdEdlbmVyYXRvcik7CisgIH0KIH0KIAogdm9pZCBGaXJzdENvbmZpZ3VyZTo6c2F2ZVRvU2V0dGluZ3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmggYi9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuaAppbmRleCBkMWRiNWJmLi5jMjZmNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuaAorKysgYi9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuaApAQCAtMjksNyArMjksOCBAQAogewogICBRX09CSkVDVAogcHVibGljOgotICBTdGFydENvbXBpbGVyU2V0dXAoUVdpZGdldCogcCk7CisgIFN0YXJ0Q29tcGlsZXJTZXR1cChRU3RyaW5nIGRlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZGVmYXVsdEdlbmVyYXRvclRvb2xzZXQsIFFXaWRnZXQqIHApOwogICB+U3RhcnRDb21waWxlclNldHVwKCk7CiAgIHZvaWQgc2V0R2VuZXJhdG9ycyhzdGQ6OnZlY3RvcjxjbWFrZTo6R2VuZXJhdG9ySW5mbz4gY29uc3QmIGdlbnMpOwogICB2b2lkIHNldEN1cnJlbnRHZW5lcmF0b3IoY29uc3QgUVN0cmluZyYgZ2VuKTsKQEAgLTY0LDYgKzY1LDcgQEAKICAgUVN0cmluZ0xpc3QgR2VuZXJhdG9yc1N1cHBvcnRpbmdQbGF0Zm9ybTsKICAgUU11bHRpTWFwPFFTdHJpbmcsIFFTdHJpbmc+IEdlbmVyYXRvclN1cHBvcnRlZFBsYXRmb3JtczsKICAgUU1hcDxRU3RyaW5nLCBRU3RyaW5nPiBHZW5lcmF0b3JEZWZhdWx0UGxhdGZvcm07CisgIFFTdHJpbmcgRGVmYXVsdEdlbmVyYXRvclBsYXRmb3JtLCBEZWZhdWx0R2VuZXJhdG9yVG9vbHNldDsKIAogcHJpdmF0ZToKICAgUUZyYW1lKiBDcmVhdGVUb29sc2V0V2lkZ2V0cygpOwpAQCAtMTk3LDYgKzE5OSw3IEBACiAgIE5hdGl2ZUNvbXBpbGVyU2V0dXAqIG1OYXRpdmVDb21waWxlclNldHVwUGFnZTsKICAgQ3Jvc3NDb21waWxlclNldHVwKiBtQ3Jvc3NDb21waWxlclNldHVwUGFnZTsKICAgVG9vbGNoYWluQ29tcGlsZXJTZXR1cCogbVRvb2xjaGFpbkNvbXBpbGVyU2V0dXBQYWdlOworICBRU3RyaW5nIG1EZWZhdWx0R2VuZXJhdG9yOwogfTsKIAogI2VuZGlmIC8vIEZpcnN0Q29uZmlndXJlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4IGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZS5jeHgKaW5kZXggYjYwOGZjYi4uNzc2YWY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL1FDTWFrZS5jeHgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZS5jeHgKQEAgLTIsMTAgKzIsMTMgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgIlFDTWFrZS5oIgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRRGlyPgogCiAjaW5jbHVkZSAiY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTM0LDcgKzM3LDggQEAKICAgY21TeXN0ZW1Ub29sczo6U2V0U3RkZXJyQ2FsbGJhY2soCiAgICAgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpIHsgdGhpcy0+c3RkZXJyQ2FsbGJhY2sobXNnKTsgfSk7CiAKLSAgdGhpcy0+Q01ha2VJbnN0YW5jZSA9IG5ldyBjbWFrZShjbWFrZTo6Um9sZVByb2plY3QsIGNtU3RhdGU6OlByb2plY3QpOworICB0aGlzLT5DTWFrZUluc3RhbmNlID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21ha2U+KGNtYWtlOjpSb2xlUHJvamVjdCwgY21TdGF0ZTo6UHJvamVjdCk7CiAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlNldENNYWtlRWRpdENvbW1hbmQoCiAgICAgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VHVUlDb21tYW5kKCkpOwogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRQcm9ncmVzc0NhbGxiYWNrKApAQCAtNTQsMTEgKzU4LDcgQEAKICAgfQogfQogCi1RQ01ha2U6On5RQ01ha2UoKQotewotICBkZWxldGUgdGhpcy0+Q01ha2VJbnN0YW5jZTsKLSAgLy8gY21EeW5hbWljTG9hZGVyOjpGbHVzaENhY2hlKCk7Ci19CitRQ01ha2U6On5RQ01ha2UoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgUUNNYWtlOjpsb2FkQ2FjaGUoY29uc3QgUVN0cmluZyYgZGlyKQogewpAQCAtMTAwLDI5ICsxMDAsMjggQEAKIAogICAgIFFDTWFrZVByb3BlcnR5TGlzdCBwcm9wcyA9IHRoaXMtPnByb3BlcnRpZXMoKTsKICAgICBlbWl0IHRoaXMtPnByb3BlcnRpZXNDaGFuZ2VkKHByb3BzKTsKLSAgICBjb25zdCBjaGFyKiBob21lRGlyID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfSE9NRV9ESVJFQ1RPUlkiKTsKKyAgICBjbVByb3AgaG9tZURpciA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CiAgICAgaWYgKGhvbWVEaXIpIHsKLSAgICAgIHNldFNvdXJjZURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGhvbWVEaXIpKTsKKyAgICAgIHNldFNvdXJjZURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGhvbWVEaXItPmNfc3RyKCkpKTsKICAgICB9Ci0gICAgY29uc3QgY2hhciogZ2VuID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CisgICAgY21Qcm9wIGdlbiA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOwogICAgIGlmIChnZW4pIHsKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBleHRyYUdlbiA9CiAgICAgICAgIHN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0VYVFJBX0dFTkVSQVRPUiIpOwogICAgICAgc3RkOjpzdHJpbmcgY3VyR2VuID0KICAgICAgICAgY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcjo6Q3JlYXRlRnVsbEdlbmVyYXRvck5hbWUoCi0gICAgICAgICAgZ2VuLCBleHRyYUdlbiA/ICpleHRyYUdlbiA6ICIiKTsKKyAgICAgICAgICAqZ2VuLCBleHRyYUdlbiA/ICpleHRyYUdlbiA6ICIiKTsKICAgICAgIHRoaXMtPnNldEdlbmVyYXRvcihRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGN1ckdlbi5jX3N0cigpKSk7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogcGxhdGZvcm0gPQotICAgICAgc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7CisgICAgY21Qcm9wIHBsYXRmb3JtID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7CiAgICAgaWYgKHBsYXRmb3JtKSB7Ci0gICAgICB0aGlzLT5zZXRQbGF0Zm9ybShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHBsYXRmb3JtKSk7CisgICAgICB0aGlzLT5zZXRQbGF0Zm9ybShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHBsYXRmb3JtLT5jX3N0cigpKSk7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogdG9vbHNldCA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7CisgICAgY21Qcm9wIHRvb2xzZXQgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIpOwogICAgIGlmICh0b29sc2V0KSB7Ci0gICAgICB0aGlzLT5zZXRUb29sc2V0KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQodG9vbHNldCkpOworICAgICAgdGhpcy0+c2V0VG9vbHNldChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHRvb2xzZXQtPmNfc3RyKCkpKTsKICAgICB9CiAKICAgICBjaGVja09wZW5Qb3NzaWJsZSgpOwpAQCAtMzAzLDI3ICszMDIsMjggQEAKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIGNvbnN0IGNoYXIqIGNhY2hlZFZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOworICAgIGNtUHJvcCBjYWNoZWRWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKIAogICAgIFFDTWFrZVByb3BlcnR5IHByb3A7CiAgICAgcHJvcC5LZXkgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGtleS5jX3N0cigpKTsKLSAgICBwcm9wLkhlbHAgPQotICAgICAgUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgIkhFTFBTVFJJTkciKSk7Ci0gICAgcHJvcC5WYWx1ZSA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoY2FjaGVkVmFsdWUpOworICAgIGlmIChjbVByb3AgaHMgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgIkhFTFBTVFJJTkciKSkgeworICAgICAgcHJvcC5IZWxwID0gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChocy0+Y19zdHIoKSk7CisgICAgfQorICAgIHByb3AuVmFsdWUgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGNhY2hlZFZhbHVlLT5jX3N0cigpKTsKICAgICBwcm9wLkFkdmFuY2VkID0gc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChrZXksICJBRFZBTkNFRCIpOwogICAgIGlmICh0ID09IGNtU3RhdGVFbnVtczo6Qk9PTCkgewogICAgICAgcHJvcC5UeXBlID0gUUNNYWtlUHJvcGVydHk6OkJPT0w7Ci0gICAgICBwcm9wLlZhbHVlID0gY21Jc09uKGNhY2hlZFZhbHVlKTsKKyAgICAgIHByb3AuVmFsdWUgPSBjbUlzT24oKmNhY2hlZFZhbHVlKTsKICAgICB9IGVsc2UgaWYgKHQgPT0gY21TdGF0ZUVudW1zOjpQQVRIKSB7CiAgICAgICBwcm9wLlR5cGUgPSBRQ01ha2VQcm9wZXJ0eTo6UEFUSDsKICAgICB9IGVsc2UgaWYgKHQgPT0gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCkgewogICAgICAgcHJvcC5UeXBlID0gUUNNYWtlUHJvcGVydHk6OkZJTEVQQVRIOwogICAgIH0gZWxzZSBpZiAodCA9PSBjbVN0YXRlRW51bXM6OlNUUklORykgewogICAgICAgcHJvcC5UeXBlID0gUUNNYWtlUHJvcGVydHk6OlNUUklORzsKLSAgICAgIGNvbnN0IGNoYXIqIHN0cmluZ3NQcm9wZXJ0eSA9Ci0gICAgICAgIHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCAiU1RSSU5HUyIpOworICAgICAgY21Qcm9wIHN0cmluZ3NQcm9wZXJ0eSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCAiU1RSSU5HUyIpOwogICAgICAgaWYgKHN0cmluZ3NQcm9wZXJ0eSkgewotICAgICAgICBwcm9wLlN0cmluZ3MgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN0cmluZ3NQcm9wZXJ0eSkuc3BsaXQoIjsiKTsKKyAgICAgICAgcHJvcC5TdHJpbmdzID0KKyAgICAgICAgICBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN0cmluZ3NQcm9wZXJ0eS0+Y19zdHIoKSkuc3BsaXQoIjsiKTsKICAgICAgIH0KICAgICB9CiAKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCiB2b2lkIFFDTWFrZTo6Y2hlY2tPcGVuUG9zc2libGUoKQogewotICBhdXRvIGRhdGEgPSB0aGlzLT5CaW5hcnlEaXJlY3RvcnkudG9Mb2NhbDhCaXQoKS5kYXRhKCk7CisgIHN0ZDo6c3RyaW5nIGRhdGEgPSB0aGlzLT5CaW5hcnlEaXJlY3RvcnkudG9Mb2NhbDhCaXQoKS5kYXRhKCk7CiAgIGF1dG8gcG9zc2libGUgPSB0aGlzLT5DTWFrZUluc3RhbmNlLT5PcGVuKGRhdGEsIHRydWUpOwogICBlbWl0IG9wZW5Qb3NzaWJsZShwb3NzaWJsZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlLmggYi9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlLmgKaW5kZXggZmE0NDUxYi4uMTEwYTk3MSAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL1FDTWFrZS5oCisrKyBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuaApAQCAtMTIsNiArMTIsNyBAQAogIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ1MTIpCiAjZW5kaWYKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxRQXRvbWljSW50PgpAQCAtMTY1LDcgKzE2Niw3IEBACiAgIHZvaWQgb3BlblBvc3NpYmxlKGJvb2wgcG9zc2libGUpOwogCiBwcm90ZWN0ZWQ6Ci0gIGNtYWtlKiBDTWFrZUluc3RhbmNlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21ha2U+IENNYWtlSW5zdGFuY2U7CiAKICAgYm9vbCBpbnRlcnJ1cHRDYWxsYmFjaygpOwogICB2b2lkIHByb2dyZXNzQ2FsbGJhY2soc3RkOjpzdHJpbmcgY29uc3QmIG1zZywgZmxvYXQgcGVyY2VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYmluZGV4cGxpYi5jeHggYi9Tb3VyY2UvYmluZGV4cGxpYi5jeHgKaW5kZXggYjg1Y2MzMy4uZmRmZDRjMCAxMDA2NDQKLS0tIGEvU291cmNlL2JpbmRleHBsaWIuY3h4CisrKyBiL1NvdXJjZS9iaW5kZXhwbGliLmN4eApAQCAtNjQsMzIgKzY0LDM2IEBACiAgKi8KICNpbmNsdWRlICJiaW5kZXhwbGliLmgiCiAKLSNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgorIyAgaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgorI2VuZGlmCisKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAotI2lmbmRlZiBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNCi0jICBkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX0FSTSAweDAxYzAgLy8gQVJNIExpdHRsZS1FbmRpYW4KLSNlbmRpZgorI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIElNQUdFX0ZJTEVfTUFDSElORV9BUk0KKyMgICAgZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9BUk0gMHgwMWMwIC8vIEFSTSBMaXR0bGUtRW5kaWFuCisjICBlbmRpZgogCi0jaWZuZGVmIElNQUdFX0ZJTEVfTUFDSElORV9USFVNQgotIyAgZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9USFVNQiAweDAxYzIgLy8gQVJNIFRodW1iL1RodW1iLTIgTGl0dGxlLUVuZGlhbgotI2VuZGlmCisjICBpZm5kZWYgSU1BR0VfRklMRV9NQUNISU5FX1RIVU1CCisjICAgIGRlZmluZSBJTUFHRV9GSUxFX01BQ0hJTkVfVEhVTUIgMHgwMWMyIC8vIEFSTSBUaHVtYi9UaHVtYi0yIExpdHRsZS1FbmRpYW4KKyMgIGVuZGlmCiAKLSNpZm5kZWYgSU1BR0VfRklMRV9NQUNISU5FX0FSTU5UCi0jICBkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX0FSTU5UIDB4MDFjNCAvLyBBUk0gVGh1bWItMiBMaXR0bGUtRW5kaWFuCi0jZW5kaWYKKyMgIGlmbmRlZiBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNTlQKKyMgICAgZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9BUk1OVCAweDAxYzQgLy8gQVJNIFRodW1iLTIgTGl0dGxlLUVuZGlhbgorIyAgZW5kaWYKIAotI2lmbmRlZiBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNNjQKLSMgIGRlZmluZSBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNNjQgMHhhYTY0IC8vIEFSTTY0IExpdHRsZS1FbmRpYW4KLSNlbmRpZgorIyAgaWZuZGVmIElNQUdFX0ZJTEVfTUFDSElORV9BUk02NAorIyAgICBkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX0FSTTY0IDB4YWE2NCAvLyBBUk02NCBMaXR0bGUtRW5kaWFuCisjICBlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBjbUFOT05fT0JKRUNUX0hFQURFUl9CSUdPQkoKIHsKQEAgLTMwNiw2ICszMTAsNyBAQAogICBTeW1ib2xUYWJsZVR5cGUqIFN5bWJvbFRhYmxlOwogICBib29sIElzSTM4NjsKIH07CisjZW5kaWYKIAogYm9vbCBEdW1wRmlsZVdpdGhMbHZtTm0oc3RkOjpzdHJpbmcgY29uc3QmIG5tUGF0aCwgY29uc3QgY2hhciogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIHN5bWJvbHMsCkBAIC0zMTUsMTUgKzMyMCwxNSBAQAogICAvLyBicmVhayB1cCBjb21tYW5kIGxpbmUgaW50byBhIHZlY3RvcgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29tbWFuZDsKICAgY29tbWFuZC5wdXNoX2JhY2sobm1QYXRoKTsKLSAgY29tbWFuZC5wdXNoX2JhY2soIi0tbm8td2VhayIpOwotICBjb21tYW5kLnB1c2hfYmFjaygiLS1kZWZpbmVkLW9ubHkiKTsKLSAgY29tbWFuZC5wdXNoX2JhY2soIi0tZm9ybWF0PXBvc2l4Iik7Ci0gIGNvbW1hbmQucHVzaF9iYWNrKGZpbGVuYW1lKTsKKyAgY29tbWFuZC5lbXBsYWNlX2JhY2soIi0tbm8td2VhayIpOworICBjb21tYW5kLmVtcGxhY2VfYmFjaygiLS1kZWZpbmVkLW9ubHkiKTsKKyAgY29tbWFuZC5lbXBsYWNlX2JhY2soIi0tZm9ybWF0PXBvc2l4Iik7CisgIGNvbW1hbmQuZW1wbGFjZV9iYWNrKGZpbGVuYW1lKTsKIAogICAvLyBydW4gdGhlIGNvbW1hbmQKICAgaW50IGV4aXRfY29kZSA9IDA7Ci0gIGNtU3lzdGVtVG9vbHM6OlJ1blNpbmdsZUNvbW1hbmQoY29tbWFuZCwgJm91dHB1dCwgJm91dHB1dCwgJmV4aXRfY29kZSwgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6T1VUUFVUX05PTkUpOworICBjbVN5c3RlbVRvb2xzOjpSdW5TaW5nbGVDb21tYW5kKGNvbW1hbmQsICZvdXRwdXQsICZvdXRwdXQsICZleGl0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgY21TeXN0ZW1Ub29sczo6T1VUUFVUX05PTkUpOwogCiAgIGlmIChleGl0X2NvZGUgIT0gMCkgewogICAgIGZwcmludGYoc3RkZXJyLCAibGx2bS1ubSByZXR1cm5lZCBhbiBlcnJvcjogJXNcbiIsIG91dHB1dC5jX3N0cigpKTsKQEAgLTMzNiw3ICszNDEsNyBAQAogICAgIGlmIChsaW5lLmVtcHR5KCkpIHsgLy8gbGFzdCBsaW5lCiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgc2l6ZV90IHN5bV9lbmQgPSBsaW5lLmZpbmQoIiAiKTsKKyAgICBzaXplX3Qgc3ltX2VuZCA9IGxpbmUuZmluZCgnICcpOwogICAgIGlmIChzeW1fZW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHBhcnNlIGxsdm0tbm0gb3V0cHV0IGxpbmU6ICVzXG4iLAogICAgICAgICAgICAgICBsaW5lLmNfc3RyKCkpOwpAQCAtMzQ3LDE0ICszNTIsMTQgQEAKICAgICAgICAgICAgICAgbGluZS5jX3N0cigpKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgc3ltID0gbGluZS5zdWJzdHIoMCwgc3ltX2VuZCk7CiAgICAgY29uc3QgY2hhciBzeW1fdHlwZSA9IGxpbmVbc3ltX2VuZCArIDFdOworICAgIGxpbmUucmVzaXplKHN5bV9lbmQpOwogICAgIHN3aXRjaCAoc3ltX3R5cGUpIHsKICAgICAgIGNhc2UgJ0QnOgotICAgICAgICBkYXRhU3ltYm9scy5pbnNlcnQoc3ltKTsKKyAgICAgICAgZGF0YVN5bWJvbHMuaW5zZXJ0KGxpbmUpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgJ1QnOgotICAgICAgICBzeW1ib2xzLmluc2VydChzeW0pOworICAgICAgICBzeW1ib2xzLmluc2VydChsaW5lKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CkBAIC0zNjYsNiArMzcxLDkgQEAKICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBzeW1ib2xzLAogICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGRhdGFTeW1ib2xzKQogeworI2lmbmRlZiBfV0lOMzIKKyAgcmV0dXJuIER1bXBGaWxlV2l0aExsdm1ObShubVBhdGgsIGZpbGVuYW1lLCBzeW1ib2xzLCBkYXRhU3ltYm9scyk7CisjZWxzZQogICBIQU5ETEUgaEZpbGU7CiAgIEhBTkRMRSBoRmlsZU1hcHBpbmc7CiAgIExQVk9JRCBscEZpbGVCYXNlOwpAQCAtNDQ2LDYgKzQ1NCw3IEBACiAgIENsb3NlSGFuZGxlKGhGaWxlTWFwcGluZyk7CiAgIENsb3NlSGFuZGxlKGhGaWxlKTsKICAgcmV0dXJuIHRydWU7CisjZW5kaWYKIH0KIAogYm9vbCBiaW5kZXhwbGliOjpBZGRPYmplY3RGaWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkQ3VzdG9tQ29tbWFuZENvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkQ3VzdG9tQ29tbWFuZENvbW1hbmQuY3h4CmluZGV4IDZlMDRjZTUuLjIzMWEyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFkZEN1c3RvbUNvbW1hbmRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGRDdXN0b21Db21tYW5kQ29tbWFuZC5jeHgKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgICBkb2luZyA9IGRvaW5nX2NvbW1lbnQ7CiAgICAgICB9IGVsc2UgaWYgKGNvcHkgPT0ga2V5REVQRklMRSkgewogICAgICAgICBkb2luZyA9IGRvaW5nX2RlcGZpbGU7Ci0gICAgICAgIGlmIChtZi5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TmFtZSgpICE9ICJOaW5qYSIpIHsKKyAgICAgICAgaWYgKCFtZi5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+U3VwcG9ydHNDdXN0b21Db21tYW5kRGVwZmlsZSgpKSB7CiAgICAgICAgICAgc3RhdHVzLlNldEVycm9yKCJPcHRpb24gREVQRklMRSBub3Qgc3VwcG9ydGVkIGJ5ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICBtZi5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TmFtZSgpKTsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTUsNyArMjE1LDggQEAKICAgICAgIH0KIAogICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGZpbGVuYW1lKSkgewotICAgICAgICBmaWxlbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoZmlsZW5hbWUpOworICAgICAgICBmaWxlbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICAgICAgZmlsZW5hbWUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CiAgICAgICB9CiAgICAgICBzd2l0Y2ggKGRvaW5nKSB7CiAgICAgICAgIGNhc2UgZG9pbmdfZGVwZmlsZToKQEAgLTI2MSw5ICsyNjIsOSBAQAogICAgICAgICBjYXNlIGRvaW5nX3RhcmdldDoKICAgICAgICAgICB0YXJnZXQgPSBjb3B5OwogICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGRvaW5nX2RlcGVuZHM6IHsKKyAgICAgICAgY2FzZSBkb2luZ19kZXBlbmRzOgogICAgICAgICAgIGRlcGVuZHMucHVzaF9iYWNrKGNvcHkpOwotICAgICAgICB9IGJyZWFrOworICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGRvaW5nX291dHB1dHM6CiAgICAgICAgICAgb3V0cHV0cy5wdXNoX2JhY2soZmlsZW5hbWUpOwogICAgICAgICAgIGJyZWFrOwpAQCAtMzQzLDcgKzM0NCw3IEBACiAgICAgLy8gVGFyZ2V0IGlzIGVtcHR5LCB1c2UgdGhlIG91dHB1dC4KICAgICBtZi5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgICBvdXRwdXQsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIG1haW5fZGVwZW5kZW5jeSwgaW1wbGljaXRfZGVwZW5kcywKLSAgICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZy5jX3N0cigpLCBmYWxzZSwgZXNjYXBlT2xkU3R5bGUsCisgICAgICBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmcuY19zdHIoKSwgbnVsbHB0ciwgZmFsc2UsIGVzY2FwZU9sZFN0eWxlLAogICAgICAgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKICAgfSBlbHNlIGlmICghYnlwcm9kdWN0cy5lbXB0eSgpKSB7CiAgICAgc3RhdHVzLlNldEVycm9yKCJCWVBST0RVQ1RTIG1heSBub3QgYmUgc3BlY2lmaWVkIHdpdGggU09VUkNFIHNpZ25hdHVyZXMiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFkZEN1c3RvbVRhcmdldENvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkQ3VzdG9tVGFyZ2V0Q29tbWFuZC5jeHgKaW5kZXggZTI3YjEyNi4uYWE5OGQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWRkQ3VzdG9tVGFyZ2V0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQWRkQ3VzdG9tVGFyZ2V0Q29tbWFuZC5jeHgKQEAgLTYsNyArNiw2IEBACiAKICNpbmNsdWRlICJjbUNoZWNrQ3VzdG9tT3V0cHV0cy5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCi0jaW5jbHVkZSAiY21DdXN0b21Db21tYW5kVHlwZXMuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCkBAIC0yMTUsOSArMjE0LDkgQEAKICAgLy8gQWRkIHRoZSB1dGlsaXR5IHRhcmdldCB0byB0aGUgbWFrZWZpbGUuCiAgIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSAhdmVyYmF0aW07CiAgIGNtVGFyZ2V0KiB0YXJnZXQgPSBtZi5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICB0YXJnZXROYW1lLCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsIGV4Y2x1ZGVGcm9tQWxsLAotICAgIHdvcmtpbmdfZGlyZWN0b3J5LmNfc3RyKCksIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywKLSAgICBlc2NhcGVPbGRTdHlsZSwgY29tbWVudCwgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIGpvYl9wb29sKTsKKyAgICB0YXJnZXROYW1lLCBleGNsdWRlRnJvbUFsbCwgd29ya2luZ19kaXJlY3RvcnkuY19zdHIoKSwgYnlwcm9kdWN0cywgZGVwZW5kcywKKyAgICBjb21tYW5kTGluZXMsIGVzY2FwZU9sZFN0eWxlLCBjb21tZW50LCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgICBqb2JfcG9vbCk7CiAKICAgLy8gQWRkIGFkZGl0aW9uYWwgdXNlci1zcGVjaWZpZWQgc291cmNlIGZpbGVzIHRvIHRoZSB0YXJnZXQuCiAgIHRhcmdldC0+QWRkU291cmNlcyhzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFkZERlcGVuZGVuY2llc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkRGVwZW5kZW5jaWVzQ29tbWFuZC5jeHgKaW5kZXggYjFmYzg5My4uMmQ1NWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWRkRGVwZW5kZW5jaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQWRkRGVwZW5kZW5jaWVzQ29tbWFuZC5jeHgKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIC8vIHNraXAgb3ZlciB0YXJnZXRfbmFtZQogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKGFyZ3MpLmFkdmFuY2UoMSkpIHsKLSAgICAgIHRhcmdldC0+QWRkVXRpbGl0eShhcmcsICZtZik7CisgICAgICB0YXJnZXQtPkFkZFV0aWxpdHkoYXJnLCBmYWxzZSwgJm1mKTsKICAgICB9CiAgIH0gZWxzZSB7CiAgICAgbWYuSXNzdWVNZXNzYWdlKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkTGlicmFyeUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkTGlicmFyeUNvbW1hbmQuY3h4CmluZGV4IDA0MzljNTEuLmY0NDNmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFkZExpYnJhcnlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGRMaWJyYXJ5Q29tbWFuZC5jeHgKQEAgLTIsNyArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUFkZExpYnJhcnlDb21tYW5kLmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCkBAIC0zMDksNyArMzEwLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCi0gIGNtQXBwZW5kKHNyY2xpc3RzLCBzLCBhcmdzLmVuZCgpKTsKKyAgY206OmFwcGVuZChzcmNsaXN0cywgcywgYXJncy5lbmQoKSk7CiAKICAgbWYuQWRkTGlicmFyeShsaWJOYW1lLCB0eXBlLCBzcmNsaXN0cywgZXhjbHVkZUZyb21BbGwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21BZGRTdWJEaXJlY3RvcnlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUFkZFN1YkRpcmVjdG9yeUNvbW1hbmQuY3h4CmluZGV4IDZhMWE1MTQuLjgzZDYzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFkZFN1YkRpcmVjdG9yeUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUFkZFN1YkRpcmVjdG9yeUNvbW1hbmQuY3h4CkBAIC00LDYgKzQsOCBAQAogCiAjaW5jbHVkZSA8Y3N0cmluZz4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgpAQCAtNTMsNyArNTUsOCBAQAogICAgIHN0YXR1cy5TZXRFcnJvcihlcnJvcik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHNyY1BhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNyY1BhdGgpOworICBzcmNQYXRoID0KKyAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNyY1BhdGgsIG1mLkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBiaW5hcnkgZGlyZWN0b3J5LgogICBzdGQ6OnN0cmluZyBiaW5QYXRoOwpAQCAtODUsNyArODgsOCBAQAogICAgIGlmIChiaW5MZW4gPiAwICYmIGJpbi5iYWNrKCkgPT0gJy8nKSB7CiAgICAgICAtLWJpbkxlbjsKICAgICB9Ci0gICAgYmluUGF0aCA9IGJpbi5zdWJzdHIoMCwgYmluTGVuKSArIHNyY1BhdGguc3Vic3RyKHNyY0xlbik7CisgICAgYmluUGF0aCA9IGNtU3RyQ2F0KGNtOjpzdHJpbmdfdmlldyhiaW4pLnN1YnN0cigwLCBiaW5MZW4pLAorICAgICAgICAgICAgICAgICAgICAgICBjbTo6c3RyaW5nX3ZpZXcoc3JjUGF0aCkuc3Vic3RyKHNyY0xlbikpOwogICB9IGVsc2UgewogICAgIC8vIFVzZSB0aGUgYmluYXJ5IGRpcmVjdG9yeSBzcGVjaWZpZWQuCiAgICAgLy8gSW50ZXJwcmV0IGEgcmVsYXRpdmUgcGF0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgYmluYXJ5IGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFkZFRlc3RDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUFkZFRlc3RDb21tYW5kLmN4eAppbmRleCA4OTQyMTEzLi4yMDVjMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BZGRUZXN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQWRkVGVzdENvbW1hbmQuY3h4CkBAIC0yLDYgKzIsOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21BZGRUZXN0Q29tbWFuZC5oIgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC00NCw3ICs0Niw3IEBACiAgIH0gZWxzZSB7CiAgICAgdGVzdCA9IG1mLkNyZWF0ZVRlc3QoYXJnc1swXSk7CiAgICAgdGVzdC0+U2V0T2xkU3R5bGUodHJ1ZSk7Ci0gICAgbWYuQWRkVGVzdEdlbmVyYXRvcihuZXcgY21UZXN0R2VuZXJhdG9yKHRlc3QpKTsKKyAgICBtZi5BZGRUZXN0R2VuZXJhdG9yKGNtOjptYWtlX3VuaXF1ZTxjbVRlc3RHZW5lcmF0b3I+KHRlc3QpKTsKICAgfQogICB0ZXN0LT5TZXRDb21tYW5kKGNvbW1hbmQpOwogCkBAIC0xNDEsNyArMTQzLDcgQEAKICAgICB0ZXN0LT5TZXRQcm9wZXJ0eSgiV09SS0lOR19ESVJFQ1RPUlkiLCB3b3JraW5nX2RpcmVjdG9yeS5jX3N0cigpKTsKICAgfQogICB0ZXN0LT5TZXRDb21tYW5kRXhwYW5kTGlzdHMoY29tbWFuZF9leHBhbmRfbGlzdHMpOwotICBtZi5BZGRUZXN0R2VuZXJhdG9yKG5ldyBjbVRlc3RHZW5lcmF0b3IodGVzdCwgY29uZmlndXJhdGlvbnMpKTsKKyAgbWYuQWRkVGVzdEdlbmVyYXRvcihjbTo6bWFrZV91bmlxdWU8Y21UZXN0R2VuZXJhdG9yPih0ZXN0LCBjb25maWd1cmF0aW9ucykpOwogCiAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWxnb3JpdGhtcy5oIGIvU291cmNlL2NtQWxnb3JpdGhtcy5oCmluZGV4IGUwZDI3ZWUuLmMwYWM1NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFsZ29yaXRobXMuaAorKysgYi9Tb3VyY2UvY21BbGdvcml0aG1zLmgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CkBAIC0zNiwxMiArMzcsNiBAQAogICByZXR1cm4gZmlyc3Q7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIsIHR5cGVuYW1lIFByZWRpY2F0ZT4KLXZvaWQgY21FcmFzZUlmKENvbnRhaW5lciYgY29udCwgUHJlZGljYXRlIHByZWQpCi17Ci0gIGNvbnQuZXJhc2Uoc3RkOjpyZW1vdmVfaWYoY29udC5iZWdpbigpLCBjb250LmVuZCgpLCBwcmVkKSwgY29udC5lbmQoKSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZSwgdHlwZW5hbWUgS2V5PgogYXV0byBjbUNvbnRhaW5zSW1wbChSYW5nZSBjb25zdCYgcmFuZ2UsIEtleSBjb25zdCYga2V5LCBjbU92ZXJsb2FkUHJpb3JpdHk8Mj4pCiAgIC0+IGRlY2x0eXBlKHJhbmdlLmV4aXN0cyhrZXkpKQpAQCAtNzIsNDAgKzY3LDYgQEAKIAogbmFtZXNwYWNlIENvbnRhaW5lckFsZ29yaXRobXMgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBjbUlzUGFpcgotewotICBlbnVtCi0gIHsKLSAgICB2YWx1ZSA9IGZhbHNlCi0gIH07Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLXN0cnVjdCBjbUlzUGFpcjxzdGQ6OnBhaXI8SywgVj4+Ci17Ci0gIGVudW0KLSAgewotICAgIHZhbHVlID0gdHJ1ZQotICB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLAotICAgICAgICAgIGJvb2wgdmFsdWVUeXBlSXNQYWlyID0gY21Jc1BhaXI8dHlwZW5hbWUgUmFuZ2U6OnZhbHVlX3R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBEZWZhdWx0RGVsZXRlcgotewotICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgUmFuZ2U6OnZhbHVlX3R5cGUgdmFsdWUpIGNvbnN0IHsgZGVsZXRlIHZhbHVlOyB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+Ci1zdHJ1Y3QgRGVmYXVsdERlbGV0ZXI8UmFuZ2UsIC8qIHZhbHVlVHlwZUlzUGFpciA9ICovIHRydWU+Ci17Ci0gIHZvaWQgb3BlcmF0b3IoKSh0eXBlbmFtZSBSYW5nZTo6dmFsdWVfdHlwZSB2YWx1ZSkgY29uc3QKLSAgewotICAgIGRlbGV0ZSB2YWx1ZS5zZWNvbmQ7Ci0gIH0KLX07Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBGd2RJdD4KIEZ3ZEl0IFJlbW92ZU4oRndkSXQgaTEsIEZ3ZEl0IGkyLCBzaXplX3QgbikKIHsKQEAgLTEzOCwyNSArOTksNiBAQAogICBjbVJhbmdlPHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVCYWNrdHJhY2U+Ojpjb25zdF9pdGVyYXRvcj47CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KLXZvaWQgY21EZWxldGVBbGwoUmFuZ2UgY29uc3QmIHIpCi17Ci0gIHN0ZDo6Zm9yX2VhY2goci5iZWdpbigpLCByLmVuZCgpLAotICAgICAgICAgICAgICAgIENvbnRhaW5lckFsZ29yaXRobXM6OkRlZmF1bHREZWxldGVyPFJhbmdlPigpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhbmdlPgotdm9pZCBjbUFwcGVuZChzdGQ6OnZlY3RvcjxUPiYgdiwgUmFuZ2UgY29uc3QmIHIpCi17Ci0gIHYuaW5zZXJ0KHYuZW5kKCksIHIuYmVnaW4oKSwgci5lbmQoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJbnB1dEl0Pgotdm9pZCBjbUFwcGVuZChzdGQ6OnZlY3RvcjxUPiYgdiwgSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KQotewotICB2Lmluc2VydCh2LmVuZCgpLCBmaXJzdCwgbGFzdCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KIHR5cGVuYW1lIFJhbmdlOjpjb25zdF9pdGVyYXRvciBjbVJlbW92ZU4oUmFuZ2UmIHIsIHNpemVfdCBuKQogewogICByZXR1cm4gQ29udGFpbmVyQWxnb3JpdGhtczo6UmVtb3ZlTihyLmJlZ2luKCksIHIuZW5kKCksIG4pOwpAQCAtMTk3LDcgKzEzOSw3IEBACiBGb3J3YXJkSXRlcmF0b3IgY21SZW1vdmVEdXBsaWNhdGVzKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QpCiB7CiAgIHVzaW5nIFZhbHVlID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZTsKLSAgdXNpbmcgSGFzaCA9IHN0cnVjdAorICBzdHJ1Y3QgSGFzaAogICB7CiAgICAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShGb3J3YXJkSXRlcmF0b3IgaXQpIGNvbnN0CiAgICAgewpAQCAtMjA1LDcgKzE0Nyw3IEBACiAgICAgfQogICB9OwogCi0gIHVzaW5nIEVxdWFsID0gc3RydWN0CisgIHN0cnVjdCBFcXVhbAogICB7CiAgICAgYm9vbCBvcGVyYXRvcigpKEZvcndhcmRJdGVyYXRvciBpdDEsIEZvcndhcmRJdGVyYXRvciBpdDIpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmN4eCBiL1NvdXJjZS9jbUFyY2hpdmVXcml0ZS5jeHgKaW5kZXggZTVlZWE3OS4uZDI5YjJhYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmN4eAorKysgYi9Tb3VyY2UvY21BcmNoaXZlV3JpdGUuY3h4CkBAIC0yMDAsOCArMjAwLDExIEBACiBib29sIGNtQXJjaGl2ZVdyaXRlOjpBZGRQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIHNpemVfdCBza2lwLCBjb25zdCBjaGFyKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlKQogewotICBpZiAoIXRoaXMtPkFkZEZpbGUocGF0aCwgc2tpcCwgcHJlZml4KSkgewotICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHN0cmNtcChwYXRoLCAiLiIpICE9IDAgfHwKKyAgICAgICh0aGlzLT5Gb3JtYXQgIT0gInppcCIgJiYgdGhpcy0+Rm9ybWF0ICE9ICI3emlwIikpIHsKKyAgICBpZiAoIXRoaXMtPkFkZEZpbGUocGF0aCwgc2tpcCwgcHJlZml4KSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgfQogICBpZiAoKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkocGF0aCkgfHwgIXJlY3Vyc2l2ZSkgfHwKICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsocGF0aCkpIHsKQEAgLTIxMCw2ICsyMTMsOSBAQAogICBjbXN5czo6RGlyZWN0b3J5IGQ7CiAgIGlmIChkLkxvYWQocGF0aCkpIHsKICAgICBzdGQ6OnN0cmluZyBuZXh0ID0gY21TdHJDYXQocGF0aCwgJy8nKTsKKyAgICBpZiAobmV4dCA9PSAiLi8iICYmICh0aGlzLT5Gb3JtYXQgPT0gInppcCIgfHwgdGhpcy0+Rm9ybWF0ID09ICI3emlwIikpIHsKKyAgICAgIG5leHQuY2xlYXIoKTsKKyAgICB9CiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBuZXh0LnNpemUoKTsKICAgICB1bnNpZ25lZCBsb25nIG4gPSBkLkdldE51bWJlck9mRmlsZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBuOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUF1eFNvdXJjZURpcmVjdG9yeUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQXV4U291cmNlRGlyZWN0b3J5Q29tbWFuZC5jeHgKaW5kZXggMjg5YmI3Mi4uZDZmNzUwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUF1eFNvdXJjZURpcmVjdG9yeUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUF1eFNvdXJjZURpcmVjdG9yeUNvbW1hbmQuY3h4CkBAIC02LDYgKzYsOCBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCkBAIC01MCwxMSArNTIsMTAgQEAKICAgICAgIC8vIFNwbGl0IHRoZSBmaWxlbmFtZSBpbnRvIGJhc2UgYW5kIGV4dGVuc2lvbgogICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3Rwb3MgPSBmaWxlLnJmaW5kKCcuJyk7CiAgICAgICBpZiAoZG90cG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGV4dCA9IGZpbGUuc3Vic3RyKGRvdHBvcyArIDEpOwotICAgICAgICBzdGQ6OnN0cmluZyBiYXNlID0gZmlsZS5zdWJzdHIoMCwgZG90cG9zKTsKKyAgICAgICAgYXV0byBleHQgPSBjbTo6c3RyaW5nX3ZpZXcoZmlsZSkuc3Vic3RyKGRvdHBvcyArIDEpOwogICAgICAgICAvLyBQcm9jZXNzIG9ubHkgc291cmNlIGZpbGVzCiAgICAgICAgIGF1dG8gY20gPSBtZi5HZXRDTWFrZUluc3RhbmNlKCk7Ci0gICAgICAgIGlmICghYmFzZS5lbXB0eSgpICYmIGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHQpKSB7CisgICAgICAgIGlmIChkb3Rwb3MgPiAwICYmIGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHQpKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgZnVsbG5hbWUgPSBjbVN0ckNhdCh0ZW1wbGF0ZURpcmVjdG9yeSwgJy8nLCBmaWxlKTsKICAgICAgICAgICAvLyBhZGQgdGhlIGZpbGUgYXMgYSBjbGFzcyBmaWxlIHNvCiAgICAgICAgICAgLy8gZGVwZW5kcyBjYW4gYmUgZG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQmluVXRpbHNMaW51eEVMRkxpbmtlci5jeHggYi9Tb3VyY2UvY21CaW5VdGlsc0xpbnV4RUxGTGlua2VyLmN4eAppbmRleCAwZGVhODI1Li45Y2U0MDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21CaW5VdGlsc0xpbnV4RUxGTGlua2VyLmN4eAorKysgYi9Tb3VyY2UvY21CaW5VdGlsc0xpbnV4RUxGTGlua2VyLmN4eApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSA8Y21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4PgogCkBAIC0yNiwxNCArMjcsMTYgQEAKIAogICBjbXN5czo6UmVndWxhckV4cHJlc3Npb25NYXRjaCBtYXRjaDsKICAgaWYgKG9yaWdpblJlZ2V4LmZpbmQocnBhdGguY19zdHIoKSwgbWF0Y2gpKSB7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW4gPSBycGF0aC5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoMSkpOwotICAgIHN0ZDo6c3RyaW5nIGVuZCA9IHJwYXRoLnN1YnN0cihtYXRjaC5lbmQoMSkpOwotICAgIHJldHVybiBiZWdpbiArIG9yaWdpbiArIGVuZDsKKyAgICBjbTo6c3RyaW5nX3ZpZXcgcGF0aHYocnBhdGgpOworICAgIGF1dG8gYmVnaW4gPSBwYXRodi5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoMSkpOworICAgIGF1dG8gZW5kID0gcGF0aHYuc3Vic3RyKG1hdGNoLmVuZCgxKSk7CisgICAgcmV0dXJuIGNtU3RyQ2F0KGJlZ2luLCBvcmlnaW4sIGVuZCk7CiAgIH0KICAgaWYgKG9yaWdpbkN1cmx5UmVnZXguZmluZChycGF0aC5jX3N0cigpLCBtYXRjaCkpIHsKLSAgICBzdGQ6OnN0cmluZyBiZWdpbiA9IHJwYXRoLnN1YnN0cigwLCBtYXRjaC5zdGFydCgpKTsKLSAgICBzdGQ6OnN0cmluZyBlbmQgPSBycGF0aC5zdWJzdHIobWF0Y2guZW5kKCkpOwotICAgIHJldHVybiBiZWdpbiArIG9yaWdpbiArIGVuZDsKKyAgICBjbTo6c3RyaW5nX3ZpZXcgcGF0aHYocnBhdGgpOworICAgIGF1dG8gYmVnaW4gPSBwYXRodi5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoKSk7CisgICAgYXV0byBlbmQgPSBwYXRodi5zdWJzdHIobWF0Y2guZW5kKCkpOworICAgIHJldHVybiBjbVN0ckNhdChiZWdpbiwgb3JpZ2luLCBlbmQpOwogICB9CiAgIHJldHVybiBycGF0aDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUJ1aWxkQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21CdWlsZENvbW1hbmQuY3h4CmluZGV4IDQ5Yzk0MzkuLmI4MmZiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUJ1aWxkQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQnVpbGRDb21tYW5kLmN4eApAQCAtMTA4LDcgKzEwOCw3IEBACiAgIGlmIChjYWNoZVZhbHVlKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KLSAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGRlZmluZSwgbWFrZWNvbW1hbmQuY19zdHIoKSwKKyAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGRlZmluZSwgbWFrZWNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCB1c2VkIHRvIGJ1aWxkIGVudGlyZSBwcm9qZWN0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHRoZSBjb21tYW5kIGxpbmUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUJ1aWxkTmFtZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQnVpbGROYW1lQ29tbWFuZC5jeHgKaW5kZXggM2U1MTdkYy4uYWQ0ZDY2NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQnVpbGROYW1lQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQnVpbGROYW1lQ29tbWFuZC5jeHgKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgIHN0ZDo6cmVwbGFjZShjdi5iZWdpbigpLCBjdi5lbmQoKSwgJy8nLCAnXycpOwogICAgICAgc3RkOjpyZXBsYWNlKGN2LmJlZ2luKCksIGN2LmVuZCgpLCAnKCcsICdfJyk7CiAgICAgICBzdGQ6OnJlcGxhY2UoY3YuYmVnaW4oKSwgY3YuZW5kKCksICcpJywgJ18nKTsKLSAgICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihhcmdzWzBdLCBjdi5jX3N0cigpLCAiTmFtZSBvZiBidWlsZC4iLAorICAgICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGFyZ3NbMF0sIGN2LCAiTmFtZSBvZiBidWlsZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NCw3ICs1NCw3IEBACiAgIHN0ZDo6cmVwbGFjZShidWlsZG5hbWUuYmVnaW4oKSwgYnVpbGRuYW1lLmVuZCgpLCAnKCcsICdfJyk7CiAgIHN0ZDo6cmVwbGFjZShidWlsZG5hbWUuYmVnaW4oKSwgYnVpbGRuYW1lLmVuZCgpLCAnKScsICdfJyk7CiAKLSAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGFyZ3NbMF0sIGJ1aWxkbmFtZS5jX3N0cigpLCAiTmFtZSBvZiBidWlsZC4iLAorICBtZi5BZGRDYWNoZURlZmluaXRpb24oYXJnc1swXSwgYnVpbGRuYW1lLCAiTmFtZSBvZiBidWlsZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNNYWtlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21DTWFrZUNvbW1hbmQuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWEwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21DTWFrZUNvbW1hbmQuY3h4CkBAIC0wLDAgKzEsNjggQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpbmNsdWRlICJjbUNNYWtlQ29tbWFuZC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgorI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgorI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVJhbmdlLmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCisKK2Jvb2wgY21DTWFrZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBpZiAoYXJncy5lbXB0eSgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNtTWFrZWZpbGUmIG1ha2VmaWxlID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7CisgIGNtTGlzdEZpbGVDb250ZXh0IGNvbnRleHQgPSBtYWtlZmlsZS5HZXRFeGVjdXRpb25Db250ZXh0KCk7CisKKyAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICBpZiAoYXJnc1swXSA9PSAiSU5WT0tFIikgeworICAgIGlmIChhcmdzLnNpemUoKSA9PSAxKSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRmlyc3QgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICBjbUxpc3RGaWxlRnVuY3Rpb24gZnVuYzsKKyAgICBmdW5jLk5hbWUgPSBhcmdzWzFdOworICAgIGZ1bmMuTGluZSA9IGNvbnRleHQuTGluZTsKKworICAgIC8vIFRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gY2FsbCBhYm92ZQorICAgIGZ1bmMuQXJndW1lbnRzLnJlc2l6ZShhcmdzLnNpemUoKSAtIDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAyOyBpIDwgYXJncy5zaXplKCk7ICsraSkgeworICAgICAgY21MaXN0RmlsZUFyZ3VtZW50IGxmYXJnOworICAgICAgbGZhcmcuTGluZSA9IGNvbnRleHQuTGluZTsKKyAgICAgIGxmYXJnLlZhbHVlID0gYXJnc1tpXTsKKyAgICAgIGZ1bmMuQXJndW1lbnRzLmVtcGxhY2VfYmFjayhsZmFyZyk7CisgICAgfQorCisgICAgcmVzdWx0ID0gbWFrZWZpbGUuRXhlY3V0ZUNvbW1hbmQoZnVuYywgc3RhdHVzKTsKKyAgfSBlbHNlIGlmIChhcmdzWzBdID09ICJFVkFMIikgeworICAgIGlmIChhcmdzLnNpemUoKSA8IDIpIHsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRvIGNvZGVfaXRlciA9IHN0ZDo6ZmluZChhcmdzLmJlZ2luKCksIGFyZ3MuZW5kKCksICJDT0RFIik7CisgICAgaWYgKGNvZGVfaXRlciA9PSBhcmdzLmVuZCgpKSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRob3V0IENPREUgYXJndW1lbnQiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBjb2RlID0gY21Kb2luKGNtTWFrZVJhbmdlKCsrY29kZV9pdGVyLCBhcmdzLmVuZCgpKSwgIiAiKTsKKyAgICByZXN1bHQgPSBtYWtlZmlsZS5SZWFkTGlzdEZpbGVBc1N0cmluZygKKyAgICAgIGNvZGUsIGNtU3RyQ2F0KGNvbnRleHQuRmlsZVBhdGgsICI6IiwgY29udGV4dC5MaW5lLCAiOkVWQUwiKSk7CisgIH0gZWxzZSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCB1bmtub3duIG1ldGEtb3BlcmF0aW9uIik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ01ha2VDb21tYW5kLmggYi9Tb3VyY2UvY21DTWFrZUNvbW1hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjlmNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtQ01ha2VDb21tYW5kLmgKQEAgLTAsMCArMSwyMCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbUNNYWtlQ29tbWFuZF9oCisjZGVmaW5lIGNtQ01ha2VDb21tYW5kX2gKKworI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitjbGFzcyBjbUV4ZWN1dGlvblN0YXR1czsKKworLyoqCisgKiBcYnJpZWYgQ2FsbHMgYSBzY3JpcHRlZCBvciBidWlsZC1pbiBjb21tYW5kCisgKgorICovCitib29sIGNtQ01ha2VDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ1BsdWdpbkFQSS5jeHggYi9Tb3VyY2UvY21DUGx1Z2luQVBJLmN4eAppbmRleCAxNzdiY2E4Li44NzRlZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DUGx1Z2luQVBJLmN4eAorKysgYi9Tb3VyY2UvY21DUGx1Z2luQVBJLmN4eApAQCAtMjIxLDEwICsyMjEsMTAgQEAKIAogICAvLyBQYXNzIHRoZSBjYWxsIHRvIHRoZSBtYWtlZmlsZSBpbnN0YW5jZS4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7Ci0gIG1mLT5BZGRVdGlsaXR5Q29tbWFuZCh1dGlsaXR5TmFtZSwgY21Db21tYW5kT3JpZ2luOjpQcm9qZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgKGFsbCA/IGZhbHNlIDogdHJ1ZSksIG51bGxwdHIsIG5vX2J5cHJvZHVjdHMsIGRlcGVuZHMyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZExpbmVzKTsKKyAgbWYtPkFkZFV0aWxpdHlDb21tYW5kKHV0aWxpdHlOYW1lLCAoYWxsID8gZmFsc2UgOiB0cnVlKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vX2J5cHJvZHVjdHMsIGRlcGVuZHMyLCBjb21tYW5kTGluZXMpOwogfQorCiB2b2lkIENDT05WIGNtQWRkQ3VzdG9tQ29tbWFuZCh2b2lkKiBhcmcsIGNvbnN0IGNoYXIqIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBudW1BcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIGFyZ3MsIGludCBudW1EZXBlbmRzLApAQCAtNDg4LDI0ICs0ODgsOCBAQAogCiAvLyBLZWVwIGEgbWFwIGZyb20gcmVhbCBjbVNvdXJjZUZpbGUgaW5zdGFuY2VzIHN0b3JlZCBpbiBhIG1ha2VmaWxlIHRvCiAvLyB0aGUgQ1BsdWdpbkFQSSBwcm94eSBzb3VyY2UgZmlsZS4KLWNsYXNzIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAKLSAgOiBwdWJsaWMgc3RkOjptYXA8Y21Tb3VyY2VGaWxlKiwgY21DUGx1Z2luQVBJU291cmNlRmlsZSo+Ci17Ci1wdWJsaWM6Ci0gIHVzaW5nIGRlcml2ZWQgPSBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUqLCBjbUNQbHVnaW5BUElTb3VyY2VGaWxlKj47Ci0gIHVzaW5nIGl0ZXJhdG9yID0gZGVyaXZlZDo6aXRlcmF0b3I7Ci0gIHVzaW5nIHZhbHVlX3R5cGUgPSBkZXJpdmVkOjp2YWx1ZV90eXBlOwotICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwKCkgPSBkZWZhdWx0OwotICB+Y21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCgpCi0gIHsKLSAgICBmb3IgKGF1dG8gY29uc3QmIGkgOiAqdGhpcykgewotICAgICAgZGVsZXRlIGkuc2Vjb25kOwotICAgIH0KLSAgfQotICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwKGNvbnN0IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAmKSA9IGRlbGV0ZTsKLSAgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCYgb3BlcmF0b3I9KGNvbnN0IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAmKSA9Ci0gICAgZGVsZXRlOwotfTsKK3VzaW5nIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAgPQorICBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUqLCBzdGQ6OnVuaXF1ZV9wdHI8Y21DUGx1Z2luQVBJU291cmNlRmlsZT4+OwogY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCBjbUNQbHVnaW5BUElTb3VyY2VGaWxlczsKIAogdm9pZCogQ0NPTlYgY21DcmVhdGVTb3VyY2VGaWxlKHZvaWQpCkBAIC01MzYsNyArNTIwLDcgQEAKICAgICBhdXRvIGkgPSBjbUNQbHVnaW5BUElTb3VyY2VGaWxlcy5maW5kKHJzZik7CiAgICAgaWYgKGkgPT0gY21DUGx1Z2luQVBJU291cmNlRmlsZXMuZW5kKCkpIHsKICAgICAgIC8vIENyZWF0ZSBhIHByb3h5IHNvdXJjZSBmaWxlIG9iamVjdCBmb3IgdGhpcyBzb3VyY2UuCi0gICAgICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlKiBzZiA9IG5ldyBjbUNQbHVnaW5BUElTb3VyY2VGaWxlOworICAgICAgYXV0byBzZiA9IGNtOjptYWtlX3VuaXF1ZTxjbUNQbHVnaW5BUElTb3VyY2VGaWxlPigpOwogICAgICAgc2YtPlJlYWxTb3VyY2VGaWxlID0gcnNmOwogICAgICAgc2YtPkZ1bGxQYXRoID0gcnNmLT5SZXNvbHZlRnVsbFBhdGgoKTsKICAgICAgIHNmLT5Tb3VyY2VOYW1lID0KQEAgLTU0NSwxMCArNTI5LDkgQEAKICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKHNmLT5GdWxsUGF0aCk7CiAKICAgICAgIC8vIFN0b3JlIHRoZSBwcm94eSBpbiB0aGUgbWFwIHNvIGl0IGNhbiBiZSByZS11c2VkIGFuZCBkZWxldGVkIGxhdGVyLgotICAgICAgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcDo6dmFsdWVfdHlwZSBlbnRyeShyc2YsIHNmKTsKLSAgICAgIGkgPSBjbUNQbHVnaW5BUElTb3VyY2VGaWxlcy5pbnNlcnQoZW50cnkpLmZpcnN0OworICAgICAgaSA9IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzLmVtcGxhY2UocnNmLCBzdGQ6Om1vdmUoc2YpKS5maXJzdDsKICAgICB9Ci0gICAgcmV0dXJuIGktPnNlY29uZDsKKyAgICByZXR1cm4gaS0+c2Vjb25kLmdldCgpOwogICB9CiAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNTY5LDE1ICs1NTIsMTYgQEAKICAgfQogCiAgIC8vIENyZWF0ZSB0aGUgcHJveHkgZm9yIHRoZSByZWFsIHNvdXJjZSBmaWxlLgotICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlKiBzZiA9IG5ldyBjbUNQbHVnaW5BUElTb3VyY2VGaWxlOworICBhdXRvIHNmID0gY206Om1ha2VfdW5pcXVlPGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGU+KCk7CiAgIHNmLT5SZWFsU291cmNlRmlsZSA9IHJzZjsKICAgc2YtPkZ1bGxQYXRoID0gb3NmLT5GdWxsUGF0aDsKICAgc2YtPlNvdXJjZU5hbWUgPSBvc2YtPlNvdXJjZU5hbWU7CiAgIHNmLT5Tb3VyY2VFeHRlbnNpb24gPSBvc2YtPlNvdXJjZUV4dGVuc2lvbjsKIAogICAvLyBTdG9yZSB0aGUgcHJveHkgaW4gdGhlIG1hcCBzbyBpdCBjYW4gYmUgcmUtdXNlZCBhbmQgZGVsZXRlZCBsYXRlci4KLSAgY21DUGx1Z2luQVBJU291cmNlRmlsZXNbcnNmXSA9IHNmOwotICByZXR1cm4gc2Y7CisgIGF1dG8gdmFsdWUgPSBzZi5nZXQoKTsKKyAgY21DUGx1Z2luQVBJU291cmNlRmlsZXNbcnNmXSA9IHN0ZDo6bW92ZShzZik7CisgIHJldHVybiB2YWx1ZTsKIH0KIAogY29uc3QgY2hhciogQ0NPTlYgY21Tb3VyY2VGaWxlR2V0U291cmNlTmFtZSh2b2lkKiBhcmcpCkBAIC02MDEsNyArNTg1LDggQEAKICAgaWYgKCFzdHJjbXAocHJvcCwgIkxPQ0FUSU9OIikpIHsKICAgICByZXR1cm4gc2YtPkZ1bGxQYXRoLmNfc3RyKCk7CiAgIH0KLSAgcmV0dXJuIHNmLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSBzZi0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICByZXR1cm4gcmV0VmFsID8gcmV0VmFsLT5jX3N0cigpIDogbnVsbHB0cjsKIH0KIAogaW50IENDT05WIGNtU291cmNlRmlsZUdldFByb3BlcnR5QXNCb29sKHZvaWQqIGFyZywgY29uc3QgY2hhciogcHJvcCkKQEAgLTc5MSw4ICs3NzYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbG9uZ0RvY3MsIGludCBjaGFpbmVkKQogewogICBjbU1ha2VmaWxlKiBtZiA9IHN0YXRpY19jYXN0PGNtTWFrZWZpbGUqPihhcmcpOwotICBtZi0+R2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkobmFtZSwgY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEUsIGJyaWVmRG9jcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdEb2NzLCBjaGFpbmVkICE9IDApOworICBtZi0+R2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkobmFtZSwgY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmllZkRvY3MgPyBicmllZkRvY3MgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdEb2NzID8gbG9uZ0RvY3MgOiAiIiwgY2hhaW5lZCAhPSAwKTsKIH0KIAogfSAvLyBjbG9zZSB0aGUgZXh0ZXJuICJDIiBzY29wZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ1BsdWdpbkFQSS5oIGIvU291cmNlL2NtQ1BsdWdpbkFQSS5oCmluZGV4IDZhOTUxNDguLjE5NjI2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNQbHVnaW5BUEkuaAorKysgYi9Tb3VyY2UvY21DUGx1Z2luQVBJLmgKQEAgLTM2LDcgKzM2LDcgQEAKICAgb2YgZnVuY3Rpb25zIGFyZSB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgcGx1Z2luIEFQSQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KICAgLyogc2V0L0dldCB0aGUgQ2xpZW50RGF0YSBpbiB0aGUgY21Mb2FkZWRDb21tYW5kSW5mbyBzdHJ1Y3R1cmUsIHRoaXMgaXMgaG93Ci0gICAgIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBmcm9tIHRoZSBJbml0aWFsUGFzcyB0byBGSW5hbFBhc3MgZm9yIGNvbW1hbmRzCisgICAgIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBmcm9tIHRoZSBJbml0aWFsUGFzcyB0byBGaW5hbFBhc3MgZm9yIGNvbW1hbmRzCiAgICAgIHRoYXQgbmVlZCBhIEZpbmFsUGFzcyBhbmQgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBJbml0aWFsUGFzcyAqLwogICB2b2lkKihDQ09OViogR2V0Q2xpZW50RGF0YSkodm9pZCogaW5mbyk7CiAgIC8qIHJldHVybiB0aGUgc3VtbWVkIHNpemUgaW4gY2hhcmFjdGVycyBvZiBhbGwgdGhlIGFyZ3VtZW50cyAqLwpAQCAtNDQsNyArNDQsNyBAQAogICAvKiBmcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhbiBhcmdjLCBhcmd2IHBhaXIgKi8KICAgdm9pZChDQ09OViogRnJlZUFyZ3VtZW50cykoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KTsKICAgLyogc2V0L0dldCB0aGUgQ2xpZW50RGF0YSBpbiB0aGUgY21Mb2FkZWRDb21tYW5kSW5mbyBzdHJ1Y3R1cmUsIHRoaXMgaXMgaG93Ci0gICAgIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBmcm9tIHRoZSBJbml0aWFsUGFzcyB0byBGSW5hbFBhc3MgZm9yIGNvbW1hbmRzCisgICAgIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBmcm9tIHRoZSBJbml0aWFsUGFzcyB0byBGaW5hbFBhc3MgZm9yIGNvbW1hbmRzCiAgICAgIHRoYXQgbmVlZCBhIEZpbmFsUGFzcyBhbmQgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBJbml0aWFsUGFzcyAqLwogICB2b2lkKENDT05WKiBTZXRDbGllbnREYXRhKSh2b2lkKiBpbmZvLCB2b2lkKiBjZCk7CiAgIC8qIHdoZW4gYW4gZXJyb3Igb2NjdXJzLCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBlcnJvciBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNUZXN0LmN4eCBiL1NvdXJjZS9jbUNUZXN0LmN4eAppbmRleCA2ZWFlMjZlLi5jNTUwNWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DVGVzdC5jeHgKKysrIGIvU291cmNlL2NtQ1Rlc3QuY3h4CkBAIC0xNiwxMSArMTYsMTYgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9CYXNlNjQuaCIKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL0dsb2IuaHh4IgogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3lzdGVtSW5mb3JtYXRpb24uaHh4IgogCiAjaW5jbHVkZSAiY21fY3VybC5oIgpAQCAtMzEsOSArMzYsOCBAQAogIyAgaW5jbHVkZSA8dW5pc3RkLmg+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjZW5kaWYKIAotI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdEJ1aWxkQW5kVGVzdEhhbmRsZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0QnVpbGRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21DVGVzdENvbmZpZ3VyZUhhbmRsZXIuaCIKQEAgLTgzLDggKzg3LDggQEAKICAgICBzdGQ6OnN0cmluZyBOYW1lOwogICB9OwogCi0gIGludCBSZXBlYXRUZXN0cyA9IDE7IC8vIGRlZmF1bHQgdG8gcnVuIGVhY2ggdGVzdCBvbmNlCi0gIGJvb2wgUmVwZWF0VW50aWxGYWlsID0gZmFsc2U7CisgIGludCBSZXBlYXRDb3VudCA9IDE7IC8vIGRlZmF1bHQgdG8gcnVuIGVhY2ggdGVzdCBvbmNlCisgIGNtQ1Rlc3Q6OlJlcGVhdCBSZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcjsKICAgc3RkOjpzdHJpbmcgQ29uZmlnVHlwZTsKICAgc3RkOjpzdHJpbmcgU2NoZWR1bGVUeXBlOwogICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IFN0b3BUaW1lOwpAQCAtMjAwLDEzICsyMDQsMTUgQEAKIAogICBpbnQgU3VibWl0SW5kZXggPSAwOwogCi0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogT3V0cHV0TG9nRmlsZSA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IE91dHB1dExvZ0ZpbGU7CiAgIGludCBPdXRwdXRMb2dGaWxlTGFzdFRhZyA9IC0xOwogCiAgIGJvb2wgT3V0cHV0VGVzdE91dHB1dE9uVGVzdEZhaWx1cmUgPSBmYWxzZTsKICAgYm9vbCBPdXRwdXRDb2xvckNvZGUgPSBjbUNUZXN0OjpDb2xvcmVkT3V0cHV0U3VwcG9ydGVkQnlDb25zb2xlKCk7CiAKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBEZWZpbml0aW9uczsKKworICBjbUNUZXN0OjpOb1Rlc3RzIE5vVGVzdHNNb2RlID0gY21DVGVzdDo6Tm9UZXN0czo6TGVnYWN5OwogfTsKIAogc3RydWN0IHRtKiBjbUNUZXN0OjpHZXROaWdodGx5VGltZShzdGQ6OnN0cmluZyBjb25zdCYgc3RyLCBib29sIHRvbW9ycm93dGFnKQpAQCAtMjY4LDkgKzI3NCwxMCBAQAogICByZXR1cm4gdGhpcy0+SW1wbC0+VG9tb3Jyb3dUYWc7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtQ1Rlc3Q6OkNsZWFuU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCitzdGQ6OnN0cmluZyBjbUNUZXN0OjpDbGVhblN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzcG9zKQogewotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MgPSBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIiBcblx0XHJcZlx2Iik7CisgIHNwb3MgPSBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIiBcblx0XHJcZlx2Iiwgc3Bvcyk7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZXBvcyA9IHN0ci5maW5kX2xhc3Rfbm90X29mKCIgXG5cdFxyXGZcdiIpOwogICBpZiAoc3BvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpAQCAtMzU5LDEwICszNjYsNyBAQAogICBjbVN5c3RlbVRvb2xzOjpFbmFibGVWU0NvbnNvbGVPdXRwdXQoKTsKIH0KIAotY21DVGVzdDo6fmNtQ1Rlc3QoKQotewotICBkZWxldGUgdGhpcy0+SW1wbC0+T3V0cHV0TG9nRmlsZTsKLX0KK2NtQ1Rlc3Q6On5jbUNUZXN0KCkgPSBkZWZhdWx0OwogCiBpbnQgY21DVGVzdDo6R2V0UGFyYWxsZWxMZXZlbCgpIGNvbnN0CiB7CkBAIC03MjQsNyArNzI4LDcgQEAKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICB3aGlsZSAoZmluICYmIChsaW5lLmJhY2soKSA9PSAnXFwnKSkgewotICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgbGluZS5zaXplKCkgLSAxKTsKKyAgICAgICAgbGluZS5yZXNpemUobGluZS5zaXplKCkgLSAxKTsKICAgICAgICAgYnVmZmVyWzBdID0gMDsKICAgICAgICAgZmluLmdldGxpbmUoYnVmZmVyLCAxMDIzKTsKICAgICAgICAgYnVmZmVyWzEwMjNdID0gMDsKQEAgLTczOCw3ICs3NDIsNyBAQAogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIGtleSA9IGxpbmUuc3Vic3RyKDAsIGNwb3MpOwotICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBjbUNUZXN0OjpDbGVhblN0cmluZyhsaW5lLnN1YnN0cihjcG9zICsgMSkpOworICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBjbUNUZXN0OjpDbGVhblN0cmluZyhsaW5lLCBjcG9zICsgMSk7CiAgICAgICB0aGlzLT5JbXBsLT5DVGVzdENvbmZpZ3VyYXRpb25ba2V5XSA9IHZhbHVlOwogICAgIH0KICAgICBmaW4uY2xvc2UoKTsKQEAgLTEyNzksNyArMTI4Myw3IEBACiAgIHdoaWxlIChjbXN5c1Byb2Nlc3NfV2FpdEZvckRhdGEoY3AsICZkYXRhLCAmbGVuZ3RoLCBudWxscHRyKSkgewogICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEpOwogICAgIGlmIChvdXRwdXQpIHsKLSAgICAgIGNtQXBwZW5kKHRlbXBPdXRwdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgY206OmFwcGVuZCh0ZW1wT3V0cHV0LCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgICB9CiAgICAgY21DVGVzdExvZyh0aGlzLCBIQU5ETEVSX1ZFUkJPU0VfT1VUUFVULAogICAgICAgICAgICAgICAgY21DVGVzdExvZ1dyaXRlKHN0cmRhdGEuY19zdHIoKSwgc3RyZGF0YS5zaXplKCkpKTsKQEAgLTE0MzksMTYgKzE0NDMsMTUgQEAKICAgICByZXR1cm47CiAgIH0KICAgLy8gVGhpcyBjb2RlIHNob3VsZCBnbyB3aGVuIGNkYXNoIGlzIGNoYW5nZWQgdG8gdXNlIGxhYmVscyBvbmx5Ci0gIGNvbnN0IGNoYXIqIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKKyAgY21Qcm9wIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKICAgaWYgKHN1YnByb2plY3QpIHsKICAgICB4bWwuU3RhcnRFbGVtZW50KCJTdWJwcm9qZWN0Iik7Ci0gICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsIHN1YnByb2plY3QpOwotICAgIGNvbnN0IGNoYXIqIGxhYmVscyA9CisgICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsICpzdWJwcm9qZWN0KTsKKyAgICBjbVByb3AgbGFiZWxzID0KICAgICAgIGNoLT5HZXRDTWFrZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdExhYmVscyIpOwogICAgIGlmIChsYWJlbHMpIHsKICAgICAgIHhtbC5TdGFydEVsZW1lbnQoIkxhYmVscyIpOwotICAgICAgc3RkOjpzdHJpbmcgbCA9IGxhYmVsczsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzID0gY21FeHBhbmRlZExpc3QobCk7CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJncyA9IGNtRXhwYW5kZWRMaXN0KCpsYWJlbHMpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGFyZ3MpIHsKICAgICAgICAgeG1sLkVsZW1lbnQoIkxhYmVsIiwgaSk7CiAgICAgICB9CkBAIC0xNDU4LDEwICsxNDYxLDEwIEBACiAgIH0KIAogICAvLyBUaGlzIGNvZGUgc2hvdWxkIHN0YXkgd2hlbiBjZGFzaCBvbmx5IGRvZXMgbGFiZWwgYmFzZWQgc3ViLXByb2plY3RzCi0gIGNvbnN0IGNoYXIqIGxhYmVsID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJMYWJlbCIpOworICBjbVByb3AgbGFiZWwgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkxhYmVsIik7CiAgIGlmIChsYWJlbCkgewogICAgIHhtbC5TdGFydEVsZW1lbnQoIkxhYmVscyIpOwotICAgIHhtbC5FbGVtZW50KCJMYWJlbCIsIGxhYmVsKTsKKyAgICB4bWwuRWxlbWVudCgiTGFiZWwiLCAqbGFiZWwpOwogICAgIHhtbC5FbmRFbGVtZW50KCk7CiAgIH0KIH0KQEAgLTE4MTMsMTAgKzE4MTYsMTAgQEAKICAgICAgIDw8ICIgIGN0ZXN0IC1EIE5pZ2h0bHlNZW1vcnlDaGVjayIgPDwgc3RkOjplbmRsKTsKIH0KIAotYm9vbCBjbUNUZXN0OjpDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNvbnN0IGNoYXIqIHZhcmcxLAorYm9vbCBjbUNUZXN0OjpDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNtOjpzdHJpbmdfdmlldyB2YXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJnMikKIHsKLSAgcmV0dXJuICh2YXJnMSAmJiBhcmcgPT0gdmFyZzEpIHx8ICh2YXJnMiAmJiBhcmcgPT0gdmFyZzIpOworICByZXR1cm4gKGFyZyA9PSB2YXJnMSkgfHwgKHZhcmcyICYmIGFyZyA9PSB2YXJnMik7CiB9CiAKIC8vIFByb2Nlc3NlcyBvbmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IChhbmQgaXRzIGFyZ3VtZW50cyBpZiBhbnkpCkBAIC0xODI2LDM4ICsxODI5LDc2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBlcnJvcm1zZykKIHsKICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUYiKSkgeworICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRiJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5GYWlsb3ZlciA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLWoiLCAiLS1wYXJhbGxlbCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1qIl9zLCAiLS1wYXJhbGxlbCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICBpbnQgcGxldmVsID0gYXRvaShhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPlNldFBhcmFsbGVsTGV2ZWwocGxldmVsKTsKICAgICB0aGlzLT5JbXBsLT5QYXJhbGxlbExldmVsU2V0SW5DbGkgPSB0cnVlOwotICB9IGVsc2UgaWYgKGFyZy5maW5kKCItaiIpID09IDApIHsKKyAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChhcmcsICItaiIpKSB7CiAgICAgaW50IHBsZXZlbCA9IGF0b2koYXJnLnN1YnN0cigyKS5jX3N0cigpKTsKICAgICB0aGlzLT5TZXRQYXJhbGxlbExldmVsKHBsZXZlbCk7CiAgICAgdGhpcy0+SW1wbC0+UGFyYWxsZWxMZXZlbFNldEluQ2xpID0gdHJ1ZTsKICAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXJlcGVhdC11bnRpbC1mYWlsIikpIHsKKworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVwZWF0LXVudGlsLWZhaWwiX3MpKSB7CiAgICAgaWYgKGkgPj0gYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICBlcnJvcm1zZyA9ICInLS1yZXBlYXQtdW50aWwtZmFpbCcgcmVxdWlyZXMgYW4gYXJndW1lbnQiOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBpZiAodGhpcy0+SW1wbC0+UmVwZWF0TW9kZSAhPSBjbUNUZXN0OjpSZXBlYXQ6Ok5ldmVyKSB7CisgICAgICBlcnJvcm1zZyA9ICJBdCBtb3N0IG9uZSAnLS1yZXBlYXQnIG9wdGlvbiBtYXkgYmUgdXNlZC4iOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBpKys7CiAgICAgbG9uZyByZXBlYXQgPSAxOwogICAgIGlmICghY21TdHJUb0xvbmcoYXJnc1tpXSwgJnJlcGVhdCkpIHsKLSAgICAgIGVycm9ybXNnID0KLSAgICAgICAgIictLXJlcGVhdC11bnRpbC1mYWlsJyBnaXZlbiBub24taW50ZWdlciB2YWx1ZSAnIiArIGFyZ3NbaV0gKyAiJyI7CisgICAgICBlcnJvcm1zZyA9IGNtU3RyQ2F0KCInLS1yZXBlYXQtdW50aWwtZmFpbCcgZ2l2ZW4gbm9uLWludGVnZXIgdmFsdWUgJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0sICInIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHRoaXMtPkltcGwtPlJlcGVhdFRlc3RzID0gc3RhdGljX2Nhc3Q8aW50PihyZXBlYXQpOworICAgIHRoaXMtPkltcGwtPlJlcGVhdENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihyZXBlYXQpOwogICAgIGlmIChyZXBlYXQgPiAxKSB7Ci0gICAgICB0aGlzLT5JbXBsLT5SZXBlYXRVbnRpbEZhaWwgPSB0cnVlOworICAgICAgdGhpcy0+SW1wbC0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxGYWlsOwogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1sb2FkIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVwZWF0Il9zKSkgeworICAgIGlmIChpID49IGFyZ3Muc2l6ZSgpIC0gMSkgeworICAgICAgZXJyb3Jtc2cgPSAiJy0tcmVwZWF0JyByZXF1aXJlcyBhbiBhcmd1bWVudCI7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0aGlzLT5JbXBsLT5SZXBlYXRNb2RlICE9IGNtQ1Rlc3Q6OlJlcGVhdDo6TmV2ZXIpIHsKKyAgICAgIGVycm9ybXNnID0gIkF0IG1vc3Qgb25lICctLXJlcGVhdCcgb3B0aW9uIG1heSBiZSB1c2VkLiI7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGkrKzsKKyAgICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gcmVwZWF0UmVnZXgoCisgICAgICAiXih1bnRpbC1mYWlsfHVudGlsLXBhc3N8YWZ0ZXItdGltZW91dCk6KFswLTldKykkIik7CisgICAgaWYgKHJlcGVhdFJlZ2V4LmZpbmQoYXJnc1tpXSkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb3VudCA9IHJlcGVhdFJlZ2V4Lm1hdGNoKDIpOworICAgICAgdW5zaWduZWQgbG9uZyBuID0gMTsKKyAgICAgIGNtU3RyVG9VTG9uZyhjb3VudCwgJm4pOyAvLyByZWdleCBndWFyYW50ZWVzIHN1Y2Nlc3MKKyAgICAgIHRoaXMtPkltcGwtPlJlcGVhdENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihuKTsKKyAgICAgIGlmICh0aGlzLT5JbXBsLT5SZXBlYXRDb3VudCA+IDEpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG1vZGUgPSByZXBlYXRSZWdleC5tYXRjaCgxKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gInVudGlsLWZhaWwiKSB7CisgICAgICAgICAgdGhpcy0+SW1wbC0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxGYWlsOworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gInVudGlsLXBhc3MiKSB7CisgICAgICAgICAgdGhpcy0+SW1wbC0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxQYXNzOworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gImFmdGVyLXRpbWVvdXQiKSB7CisgICAgICAgICAgdGhpcy0+SW1wbC0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6QWZ0ZXJUaW1lb3V0OworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGVycm9ybXNnID0gY21TdHJDYXQoIictLXJlcGVhdCcgZ2l2ZW4gaW52YWxpZCB2YWx1ZSAnIiwgYXJnc1tpXSwgIiciKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1sb2FkIl9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHVuc2lnbmVkIGxvbmcgbG9hZDsKICAgICBpZiAoY21TdHJUb1VMb25nKGFyZ3NbaV0sICZsb2FkKSkgewpAQCAtMTg2OCw3NiArMTkwOSw2NiBAQAogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tbm8tY29tcHJlc3Mtb3V0cHV0IikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLWNvbXByZXNzLW91dHB1dCJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5Db21wcmVzc1Rlc3RPdXRwdXQgPSBmYWxzZTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcHJpbnQtbGFiZWxzIikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXByaW50LWxhYmVscyJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5QcmludExhYmVscyA9IHRydWU7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWh0dHAxLjAiKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0taHR0cDEuMCJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5Vc2VIVFRQMTAgPSB0cnVlOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10aW1lb3V0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGltZW91dCJfcykgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICBhdXRvIHRpbWVvdXQgPSBjbUR1cmF0aW9uKGF0b2YoYXJnc1tpXS5jX3N0cigpKSk7CiAgICAgdGhpcy0+SW1wbC0+R2xvYmFsVGltZW91dCA9IHRpbWVvdXQ7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN0b3AtdGltZSIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN0b3AtdGltZSJfcykgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5TZXRTdG9wVGltZShhcmdzW2ldKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1DIiwgIi0tYnVpbGQtY29uZmlnIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItQyJfcywgIi0tYnVpbGQtY29uZmlnIikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5TZXRDb25maWdUeXBlKGFyZ3NbaV0uY19zdHIoKSk7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWRlYnVnIikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWRlYnVnIl9zKSkgewogICAgIHRoaXMtPkltcGwtPkRlYnVnID0gdHJ1ZTsKICAgICB0aGlzLT5JbXBsLT5TaG93TGluZU51bWJlcnMgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZ3JvdXAiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWdyb3VwIl9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkltcGwtPlNwZWNpZmljR3JvdXAgPSBhcmdzW2ldOwogICB9CiAgIC8vIFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIC8gZGVwcmVjYXRlZCBvcHRpb24uCiAgIC8vICJUcmFjayIgaGFzIGJlZW4gcmVuYW1lZCB0byAiR3JvdXAiLgotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXRyYWNrIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdHJhY2siX3MpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+SW1wbC0+U3BlY2lmaWNHcm91cCA9IGFyZ3NbaV07Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zaG93LWxpbmUtbnVtYmVycyIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXNob3ctbGluZS1udW1iZXJzIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlNob3dMaW5lTnVtYmVycyA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1uby1sYWJlbC1zdW1tYXJ5IikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tbm8tbGFiZWwtc3VtbWFyeSJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5MYWJlbFN1bW1hcnkgPSBmYWxzZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLXN1YnByb2plY3Qtc3VtbWFyeSIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLXN1YnByb2plY3Qtc3VtbWFyeSJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5TdWJwcm9qZWN0U3VtbWFyeSA9IGZhbHNlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1RIiwgIi0tcXVpZXQiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVEiX3MsICItLXF1aWV0IikpIHsKICAgICB0aGlzLT5JbXBsLT5RdWlldCA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1wcm9ncmVzcyIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXByb2dyZXNzIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlRlc3RQcm9ncmVzc091dHB1dCA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVYiLCAiLS12ZXJib3NlIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1WIl9zLCAiLS12ZXJib3NlIikpIHsKICAgICB0aGlzLT5JbXBsLT5WZXJib3NlID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVlYiLCAiLS1leHRyYS12ZXJib3NlIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1WViJfcywgIi0tZXh0cmEtdmVyYm9zZSIpKSB7CiAgICAgdGhpcy0+SW1wbC0+RXh0cmFWZXJib3NlID0gdHJ1ZTsKICAgICB0aGlzLT5JbXBsLT5WZXJib3NlID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW91dHB1dC1vbi1mYWlsdXJlIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tb3V0cHV0LW9uLWZhaWx1cmUiX3MpKSB7CiAgICAgdGhpcy0+SW1wbC0+T3V0cHV0VGVzdE91dHB1dE9uVGVzdEZhaWx1cmUgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1vdXRwdXQtc2l6ZS1wYXNzZWQiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LW91dHB1dC1zaXplLXBhc3NlZCJfcykgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIGxvbmcgb3V0cHV0U2l6ZTsKICAgICBpZiAoY21TdHJUb0xvbmcoYXJnc1tpXSwgJm91dHB1dFNpemUpKSB7CkBAIC0xOTQ3LDkgKzE5NzgsOCBAQAogICAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgJy0tdGVzdC1vdXRwdXQtc2l6ZS1wYXNzZWQnOiAiIDw8IGFyZ3NbaV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iKTsKICAgICB9Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LW91dHB1dC1zaXplLWZhaWxlZCIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXRlc3Qtb3V0cHV0LXNpemUtZmFpbGVkIl9zKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgbG9uZyBvdXRwdXRTaXplOwogICAgIGlmIChjbVN0clRvTG9uZyhhcmdzW2ldLCAmb3V0cHV0U2l6ZSkpIHsKQEAgLTE5NTksMTEgKzE5ODksOSBAQAogICAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgJy0tdGVzdC1vdXRwdXQtc2l6ZS1mYWlsZWQnOiAiIDw8IGFyZ3NbaV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iKTsKICAgICB9Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU4iLCAiLS1zaG93LW9ubHkiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU4iX3MsICItLXNob3ctb25seSIpKSB7CiAgICAgdGhpcy0+SW1wbC0+U2hvd09ubHkgPSB0cnVlOwotICB9Ci0gIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1zaG93LW9ubHk9IikpIHsKKyAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1zaG93LW9ubHk9IikpIHsKICAgICB0aGlzLT5JbXBsLT5TaG93T25seSA9IHRydWU7CiAKICAgICAvLyBDaGVjayBpZiBhIHNwZWNpZmljIGZvcm1hdCBpcyByZXF1ZXN0ZWQuIERlZmF1bHRzIHRvIGh1bWFuIHJlYWRhYmxlCkBAIC0xOTgxLDI3ICsyMDA5LDI2IEBACiAgICAgfQogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU8iLCAiLS1vdXRwdXQtbG9nIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1PIl9zLCAiLS1vdXRwdXQtbG9nIikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5TZXRPdXRwdXRMb2dGaWxlTmFtZShhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10b21vcnJvdy10YWciKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdG9tb3Jyb3ctdGFnIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlRvbW9ycm93VGFnID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWZvcmNlLW5ldy1jdGVzdC1wcm9jZXNzIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZm9yY2UtbmV3LWN0ZXN0LXByb2Nlc3MiX3MpKSB7CiAgICAgdGhpcy0+SW1wbC0+Rm9yY2VOZXdDVGVzdFByb2Nlc3MgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1XIiwgIi0tbWF4LXdpZHRoIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVciX3MsICItLW1heC13aWR0aCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5JbXBsLT5NYXhUZXN0TmFtZVdpZHRoID0gYXRvaShhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0taW50ZXJhY3RpdmUtZGVidWctbW9kZSIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWludGVyYWN0aXZlLWRlYnVnLW1vZGUiX3MpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5JbXBsLT5JbnRlcmFjdGl2ZURlYnVnTW9kZSA9IGNtSXNPbihhcmdzW2ldKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN1Ym1pdC1pbmRleCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc3VibWl0LWluZGV4Il9zKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+SW1wbC0+U3VibWl0SW5kZXggPSBhdG9pKGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgaWYgKHRoaXMtPkltcGwtPlN1Ym1pdEluZGV4IDwgMCkgewpAQCAtMjAwOSw0NiArMjAzNiw2MCBAQAogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tb3ZlcndyaXRlIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tb3ZlcndyaXRlIl9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkFkZENUZXN0Q29uZmlndXJhdGlvbk92ZXJ3cml0ZShhcmdzW2ldKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItQSIsICItLWFkZC1ub3RlcyIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1BIl9zLCAiLS1hZGQtbm90ZXMiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICB0aGlzLT5TZXRUZXN0KCJOb3RlcyIpOwogICAgIGkrKzsKICAgICB0aGlzLT5TZXROb3Rlc0ZpbGVzKGFyZ3NbaV0uY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBjbTo6c3RyaW5nX3ZpZXcgbm9UZXN0c1ByZWZpeCA9ICItLW5vLXRlc3RzPSI7CisgIGlmIChjbUhhc1ByZWZpeChhcmcsIG5vVGVzdHNQcmVmaXgpKSB7CisgICAgY206OnN0cmluZ192aWV3IG5vVGVzdHNNb2RlID0KKyAgICAgIGNtOjpzdHJpbmdfdmlldyhhcmcpLnN1YnN0cihub1Rlc3RzUHJlZml4Lmxlbmd0aCgpKTsKKyAgICBpZiAobm9UZXN0c01vZGUgPT0gImVycm9yIikgeworICAgICAgdGhpcy0+SW1wbC0+Tm9UZXN0c01vZGUgPSBjbUNUZXN0OjpOb1Rlc3RzOjpFcnJvcjsKKyAgICB9IGVsc2UgaWYgKG5vVGVzdHNNb2RlICE9ICJpZ25vcmUiKSB7CisgICAgICBlcnJvcm1zZyA9CisgICAgICAgIGNtU3RyQ2F0KCInLS1uby10ZXN0cz0nIGdpdmVuIHVua25vd24gdmFsdWUgJyIsIG5vVGVzdHNNb2RlLCAnXCcnKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy0+SW1wbC0+Tm9UZXN0c01vZGUgPSBjbUNUZXN0OjpOb1Rlc3RzOjpJZ25vcmU7CisgICAgfQogICB9CiAKICAgLy8gb3B0aW9ucyB0aGF0IGNvbnRyb2wgd2hhdCB0ZXN0cyBhcmUgcnVuCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1JIiwgIi0tdGVzdHMtaW5mb3JtYXRpb24iKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1JIl9zLCAiLS10ZXN0cy1pbmZvcm1hdGlvbiIpICYmCisgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiVGVzdHNUb1J1bkluZm9ybWF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlRlc3RzVG9SdW5JbmZvcm1hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVSIsICItLXVuaW9uIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1VIl9zLCAiLS11bmlvbiIpKSB7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiVXNlVW5pb24iLCAidHJ1ZSIpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJVc2VVbmlvbiIsICJ0cnVlIik7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVIiLCAiLS10ZXN0cy1yZWdleCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1SIl9zLCAiLS10ZXN0cy1yZWdleCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJJbmNsdWRlUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiSW5jbHVkZVJlZ3VsYXJFeHByZXNzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1MIiwgIi0tbGFiZWwtcmVnZXgiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItTCJfcywgIi0tbGFiZWwtcmVnZXgiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiTGFiZWxSZWd1bGFyRXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJMYWJlbFJlZ3VsYXJFeHByZXNzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1MRSIsICItLWxhYmVsLWV4Y2x1ZGUiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUxFIl9zLCAiLS1sYWJlbC1leGNsdWRlIikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oCiAgICAgICAiRXhjbHVkZUxhYmVsUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwpAQCAtMjA1Niw4ICsyMDk3LDggQEAKICAgICAgICJFeGNsdWRlTGFiZWxSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRSIsICItLWV4Y2x1ZGUtcmVnZXgiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1FIl9zLCAiLS1leGNsdWRlLXJlZ2V4IikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJFeGNsdWRlUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKQEAgLTIwNjUsMjQgKzIxMDYsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUZBIiwgIi0tZml4dHVyZS1leGNsdWRlLWFueSIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUZBIl9zLCAiLS1maXh0dXJlLWV4Y2x1ZGUtYW55IikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKAogICAgICAgIkV4Y2x1ZGVGaXh0dXJlUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKAogICAgICAgIkV4Y2x1ZGVGaXh0dXJlUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GUyIsICItLWZpeHR1cmUtZXhjbHVkZS1zZXR1cCIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRlMiX3MsICItLWZpeHR1cmUtZXhjbHVkZS1zZXR1cCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKAogICAgICAgIkV4Y2x1ZGVGaXh0dXJlU2V0dXBSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oCiAgICAgICAiRXhjbHVkZUZpeHR1cmVTZXR1cFJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRkMiLCAiLS1maXh0dXJlLWV4Y2x1ZGUtY2xlYW51cCIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRkMiX3MsICItLWZpeHR1cmUtZXhjbHVkZS1jbGVhbnVwIikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oCiAgICAgICAiRXhjbHVkZUZpeHR1cmVDbGVhbnVwUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwpAQCAtMjA5MCw4ICsyMTI5LDggQEAKICAgICAgICJFeGNsdWRlRml4dHVyZUNsZWFudXBSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXJlc291cmNlLXNwZWMtZmlsZSIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXNvdXJjZS1zcGVjLWZpbGUiX3MpICYmCisgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiUmVzb3VyY2VTcGVjRmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwpAQCAtMjA5OSw3ICsyMTM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXJ1bi1mYWlsZWQiKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVydW4tZmFpbGVkIl9zKSkgewogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlJlcnVuRmFpbGVkIiwgInRydWUiKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiUmVydW5GYWlsZWQiLCAidHJ1ZSIpOwogICB9CkBAIC0yMTUxLDcgKzIxOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgU1JBcmd1bWVudFNwZWNpZmllZCkKIHsKICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVNQIiwgIi0tc2NyaXB0LW5ldy1wcm9jZXNzIikgJiYKKyAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVNQIl9zLCAiLS1zY3JpcHQtbmV3LXByb2Nlc3MiKSAmJgogICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIHRoaXMtPkltcGwtPlJ1bkNvbmZpZ3VyYXRpb25TY3JpcHQgPSB0cnVlOwogICAgIGkrKzsKQEAgLTIxNjIsNyArMjIwMSw4IEBACiAgICAgfQogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVNSIiwgIi0tc2NyaXB0LXJ1biIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVNSIl9zLCAiLS1zY3JpcHQtcnVuIikgJiYKKyAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBTUkFyZ3VtZW50U3BlY2lmaWVkID0gdHJ1ZTsKICAgICB0aGlzLT5JbXBsLT5SdW5Db25maWd1cmF0aW9uU2NyaXB0ID0gdHJ1ZTsKICAgICBpKys7CkBAIC0yMTcwLDcgKzIyMTAsNyBAQAogICAgIGNoLT5BZGRDb25maWd1cmF0aW9uU2NyaXB0KGFyZ3NbaV0uY19zdHIoKSwgdHJ1ZSk7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItUyIsICItLXNjcmlwdCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVMiX3MsICItLXNjcmlwdCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICB0aGlzLT5JbXBsLT5SdW5Db25maWd1cmF0aW9uU2NyaXB0ID0gdHJ1ZTsKICAgICBpKys7CiAgICAgY21DVGVzdFNjcmlwdEhhbmRsZXIqIGNoID0gdGhpcy0+R2V0U2NyaXB0SGFuZGxlcigpOwpAQCAtMjIwNCw3ICsyMjQ0LDcgQEAKICAgYm9vbCBTUkFyZ3VtZW50U3BlY2lmaWVkID0gZmFsc2U7CiAKICAgLy8gY29weSB0aGUgY29tbWFuZCBsaW5lCi0gIGNtQXBwZW5kKHRoaXMtPkltcGwtPkluaXRpYWxDb21tYW5kTGluZUFyZ3VtZW50cywgYXJncyk7CisgIGNtOjphcHBlbmQodGhpcy0+SW1wbC0+SW5pdGlhbENvbW1hbmRMaW5lQXJndW1lbnRzLCBhcmdzKTsKIAogICAvLyBwcm9jZXNzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewpAQCAtMjIyMCw3ICsyMjYwLDggQEAKIAogICAgIC8vIC0tZGFzaGJvYXJkOiBoYW5kbGUgYSByZXF1ZXN0IGZvciBhIGRhc2hib2FyZAogICAgIHN0ZDo6c3RyaW5nIGFyZyA9IGFyZ3NbaV07Ci0gICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUQiLCAiLS1kYXNoYm9hcmQiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUQiX3MsICItLWRhc2hib2FyZCIpICYmCisgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICAgIHRoaXMtPkltcGwtPlByb2R1Y2VYTUwgPSB0cnVlOwogICAgICAgaSsrOwogICAgICAgc3RkOjpzdHJpbmcgdGFyZyA9IGFyZ3NbaV07CkBAIC0yMjU2LDcgKzIyOTcsNyBAQAogICAgIH0KIAogICAgIC8vIC0tZXh0cmEtc3VibWl0Ci0gICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1leHRyYS1zdWJtaXQiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1leHRyYS1zdWJtaXQiX3MpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICAgIHRoaXMtPkltcGwtPlByb2R1Y2VYTUwgPSB0cnVlOwogICAgICAgdGhpcy0+U2V0VGVzdCgiU3VibWl0Iik7CiAgICAgICBpKys7CkBAIC0yMjY2LDEyICsyMzA3LDEzIEBACiAgICAgfQogCiAgICAgLy8gLS1idWlsZC1hbmQtdGVzdCBvcHRpb25zCi0gICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1idWlsZC1hbmQtdGVzdCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWJ1aWxkLWFuZC10ZXN0Il9zKSAmJgorICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICBjbWFrZUFuZFRlc3QgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIC0tc2NoZWR1bGUtcmFuZG9tCi0gICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zY2hlZHVsZS1yYW5kb20iKSkgeworICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc2NoZWR1bGUtcmFuZG9tIl9zKSkgewogICAgICAgdGhpcy0+SW1wbC0+U2NoZWR1bGVUeXBlID0gIlJhbmRvbSI7CiAgICAgfQogCkBAIC0yMzI2LDcgKzIzNjgsNyBAQAogewogICBib29sIHN1Y2Nlc3MgPSB0cnVlOwogICBzdGQ6OnN0cmluZyBhcmcgPSBhcmdzW2ldOwotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVCIsICItLXRlc3QtYWN0aW9uIikgJiYKKyAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVQiX3MsICItLXRlc3QtYWN0aW9uIikgJiYKICAgICAgIChpIDwgYXJncy5zaXplKCkgLSAxKSkgewogICAgIHRoaXMtPkltcGwtPlByb2R1Y2VYTUwgPSB0cnVlOwogICAgIGkrKzsKQEAgLTIzNTgsMTUgKzI0MDAsMTUgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU0iLCAiLS10ZXN0LW1vZGVsIikgJiYKKyAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU0iX3MsICItLXRlc3QtbW9kZWwiKSAmJgogICAgICAgKGkgPCBhcmdzLnNpemUoKSAtIDEpKSB7CiAgICAgaSsrOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIgPSBhcmdzW2ldOwotICAgIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKSA9PSAibmlnaHRseSIpIHsKKyAgICBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN0cikgPT0gIm5pZ2h0bHkiX3MpIHsKICAgICAgIHRoaXMtPlNldFRlc3RNb2RlbChjbUNUZXN0OjpOSUdIVExZKTsKLSAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzdHIpID09ICJjb250aW51b3VzIikgeworICAgIH0gZWxzZSBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN0cikgPT0gImNvbnRpbnVvdXMiX3MpIHsKICAgICAgIHRoaXMtPlNldFRlc3RNb2RlbChjbUNUZXN0OjpDT05USU5VT1VTKTsKLSAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzdHIpID09ICJleHBlcmltZW50YWwiKSB7CisgICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKSA9PSAiZXhwZXJpbWVudGFsIl9zKSB7CiAgICAgICB0aGlzLT5TZXRUZXN0TW9kZWwoY21DVGVzdDo6RVhQRVJJTUVOVEFMKTsKICAgICB9IGVsc2UgewogICAgICAgc3VjY2VzcyA9IGZhbHNlOwpAQCAtMjYzMyw3ICsyNjc1LDcgQEAKIAogICAgIHBhdGggPSAiLi8iICsgKnJlczsKICAgICBpZiAocGF0aC5iYWNrKCkgPT0gJy8nKSB7Ci0gICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgcGF0aC5zaXplKCkgLSAxKTsKKyAgICAgIHBhdGgucmVzaXplKHBhdGguc2l6ZSgpIC0gMSk7CiAgICAgfQogICB9CiAKQEAgLTI2ODQsNyArMjcyNiw3IEBACiAgICAgc3RkOjpzdHJpbmcgc2l0ZSA9IHRoaXMtPkdldENUZXN0Q29uZmlndXJhdGlvbigiRHJvcFNpdGUiKTsKICAgICBzdGQ6OnN0cmluZyBsb2NhdGlvbiA9IHRoaXMtPkdldENUZXN0Q29uZmlndXJhdGlvbigiRHJvcExvY2F0aW9uIik7CiAKLSAgICB1cmwgPSBjbVN0ckNhdChtZXRob2QuZW1wdHkoKSA/ICJodHRwIiA6IG1ldGhvZCwgIjovLyIpOworICAgIHVybCA9IGNtU3RyQ2F0KG1ldGhvZC5lbXB0eSgpID8gImh0dHAiIDogbWV0aG9kLCAiOi8vIl9zKTsKICAgICBpZiAoIXVzZXIuZW1wdHkoKSkgewogICAgICAgdXJsICs9IHVzZXI7CiAgICAgICBpZiAoIXBhc3N3b3JkLmVtcHR5KCkpIHsKQEAgLTI4NDcsMTQgKzI4ODksMTkgQEAKICAgcmV0dXJuIHRoaXMtPkltcGwtPkRlZmluaXRpb25zOwogfQogCi1pbnQgY21DVGVzdDo6R2V0VGVzdFJlcGVhdCgpIGNvbnN0CitpbnQgY21DVGVzdDo6R2V0UmVwZWF0Q291bnQoKSBjb25zdAogewotICByZXR1cm4gdGhpcy0+SW1wbC0+UmVwZWF0VGVzdHM7CisgIHJldHVybiB0aGlzLT5JbXBsLT5SZXBlYXRDb3VudDsKIH0KIAotYm9vbCBjbUNUZXN0OjpHZXRSZXBlYXRVbnRpbEZhaWwoKSBjb25zdAorY21DVGVzdDo6UmVwZWF0IGNtQ1Rlc3Q6OkdldFJlcGVhdE1vZGUoKSBjb25zdAogewotICByZXR1cm4gdGhpcy0+SW1wbC0+UmVwZWF0VW50aWxGYWlsOworICByZXR1cm4gdGhpcy0+SW1wbC0+UmVwZWF0TW9kZTsKK30KKworY21DVGVzdDo6Tm9UZXN0cyBjbUNUZXN0OjpHZXROb1Rlc3RzTW9kZSgpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5JbXBsLT5Ob1Rlc3RzTW9kZTsKIH0KIAogdm9pZCBjbUNUZXN0OjpTZXRCdWlsZElEKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKQEAgLTI5NjQsMTAgKzMwMTEsMTAgQEAKICAgICByZXMgPSBjbXN5c1Byb2Nlc3NfV2FpdEZvckRhdGEoY3AsICZkYXRhLCAmbGVuZ3RoLCBudWxscHRyKTsKICAgICBzd2l0Y2ggKHJlcykgewogICAgICAgY2FzZSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERPVVQ6Ci0gICAgICAgIGNtQXBwZW5kKHRlbXBPdXRwdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgICBjbTo6YXBwZW5kKHRlbXBPdXRwdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgY21zeXNQcm9jZXNzX1BpcGVfU1RERVJSOgotICAgICAgICBjbUFwcGVuZCh0ZW1wRXJyb3IsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgICBjbTo6YXBwZW5kKHRlbXBFcnJvciwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0zMDI3LDEyICszMDc0LDEwIEBACiAKIHZvaWQgY21DVGVzdDo6U2V0T3V0cHV0TG9nRmlsZU5hbWUoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgaWYgKHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUpIHsKLSAgICBkZWxldGUgdGhpcy0+SW1wbC0+T3V0cHV0TG9nRmlsZTsKLSAgICB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlID0gbnVsbHB0cjsKLSAgfQogICBpZiAobmFtZSkgewotICAgIHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUgPSBuZXcgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKG5hbWUpOworICAgIHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUgPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPihuYW1lKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlLnJlc2V0KCk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ1Rlc3QuaCBiL1NvdXJjZS9jbUNUZXN0LmgKaW5kZXggODJhNmY0Yy4uOTg0YmUxMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ1Rlc3QuaAorKysgYi9Tb3VyY2UvY21DVGVzdC5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgogCkBAIC0xNDAsNyArMTQyLDggQEAKIAogICBzdGQ6OnN0cmluZyBHZXRUZXN0TW9kZWxTdHJpbmcoKTsKICAgc3RhdGljIGludCBHZXRUZXN0TW9kZWxGcm9tU3RyaW5nKGNvbnN0IGNoYXIqIHN0cik7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBDbGVhblN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKTsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIENsZWFuU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MgPSAwKTsKICAgc3RkOjpzdHJpbmcgR2V0Q1Rlc3RDb25maWd1cmF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgdm9pZCBTZXRDVGVzdENvbmZpZ3VyYXRpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcHJlc3MgPSBmYWxzZSk7CkBAIC00MzEsMTAgKzQzNCwyNCBAQAogICBjb25zdCBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBHZXREZWZpbml0aW9ucygpIGNvbnN0OwogCiAgIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyBhIHRlc3Qgc2hvdWxkIGJlIHJ1biAqLwotICBpbnQgR2V0VGVzdFJlcGVhdCgpIGNvbnN0OworICBpbnQgR2V0UmVwZWF0Q291bnQoKSBjb25zdDsKIAotICAvKiogUmV0dXJuIHRydWUgaWYgdGVzdCBzaG91bGQgcnVuIHVudGlsIGZhaWwgKi8KLSAgYm9vbCBHZXRSZXBlYXRVbnRpbEZhaWwoKSBjb25zdDsKKyAgZW51bSBjbGFzcyBSZXBlYXQKKyAgeworICAgIE5ldmVyLAorICAgIFVudGlsRmFpbCwKKyAgICBVbnRpbFBhc3MsCisgICAgQWZ0ZXJUaW1lb3V0LAorICB9OworICBSZXBlYXQgR2V0UmVwZWF0TW9kZSgpIGNvbnN0OworCisgIGVudW0gY2xhc3MgTm9UZXN0cworICB7CisgICAgTGVnYWN5LAorICAgIEVycm9yLAorICAgIElnbm9yZQorICB9OworICBOb1Rlc3RzIEdldE5vVGVzdHNNb2RlKCkgY29uc3Q7CiAKICAgdm9pZCBHZW5lcmF0ZVN1YnByb2plY3RzT3V0cHV0KGNtWE1MV3JpdGVyJiB4bWwpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0TGFiZWxzRm9yU3VicHJvamVjdHMoKTsKQEAgLTQ5Miw4ICs1MDksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsZXMpOwogCiAgIC8qKiBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgKi8KLSAgYm9vbCBDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNvbnN0IGNoYXIqIHZhcmcxLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyZzIgPSBudWxscHRyKTsKKyAgc3RhdGljIGJvb2wgQ2hlY2tBcmd1bWVudChjb25zdCBzdGQ6OnN0cmluZyYgYXJnLCBjbTo6c3RyaW5nX3ZpZXcgdmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyZzIgPSBudWxscHRyKTsKIAogICAvKiogT3V0cHV0IGVycm9ycyBmcm9tIGEgdGVzdCAqLwogICB2b2lkIE91dHB1dFRlc3RFcnJvcnMoc3RkOjp2ZWN0b3I8Y2hhcj4gY29uc3QmIHByb2Nlc3Nfb3V0cHV0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5jeHggYi9Tb3VyY2UvY21DYWNoZU1hbmFnZXIuY3h4CmluZGV4IGQ2Mjc0NjUuLjMxYTg2OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5jeHgKKysrIGIvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmN4eApAQCAtNzcsNyArNzcsNyBAQAogICAgIH0KICAgICB3aGlsZSAocmVhbGJ1ZmZlclswXSA9PSAnLycgJiYgcmVhbGJ1ZmZlclsxXSA9PSAnLycpIHsKICAgICAgIGlmICgocmVhbGJ1ZmZlclsyXSA9PSAnXFwnKSAmJiAocmVhbGJ1ZmZlclszXSA9PSAnbicpKSB7Ci0gICAgICAgIGhlbHBTdHJpbmcgKz0gIlxuIjsKKyAgICAgICAgaGVscFN0cmluZyArPSAnXG4nOwogICAgICAgICBoZWxwU3RyaW5nICs9ICZyZWFsYnVmZmVyWzRdOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgaGVscFN0cmluZyArPSAmcmVhbGJ1ZmZlclsyXTsKQEAgLTExNywyMCArMTE3LDIwIEBACiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlcnJvcjsKLSAgICAgIGVycm9yIDw8ICJQYXJzZSBlcnJvciBpbiBjYWNoZSBmaWxlICIgPDwgY2FjaGVGaWxlOwotICAgICAgZXJyb3IgPDwgIiBvbiBsaW5lICIgPDwgbGluZW5vIDw8ICIuIE9mZmVuZGluZyBlbnRyeTogIiA8PCByZWFsYnVmZmVyOworICAgICAgZXJyb3IgPDwgIlBhcnNlIGVycm9yIGluIGNhY2hlIGZpbGUgIiA8PCBjYWNoZUZpbGUgPDwgIiBvbiBsaW5lICIKKyAgICAgICAgICAgIDw8IGxpbmVubyA8PCAiLiBPZmZlbmRpbmcgZW50cnk6ICIgPDwgcmVhbGJ1ZmZlcjsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGVycm9yLnN0cigpKTsKICAgICB9CiAgIH0KICAgdGhpcy0+Q2FjaGVNYWpvclZlcnNpb24gPSAwOwogICB0aGlzLT5DYWNoZU1pbm9yVmVyc2lvbiA9IDA7Ci0gIGlmIChjb25zdCBzdGQ6OnN0cmluZyogY21ham9yID0KKyAgaWYgKGNtUHJvcCBjbWFqb3IgPQogICAgICAgICB0aGlzLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0NBQ0hFX01BSk9SX1ZFUlNJT04iKSkgewogICAgIHVuc2lnbmVkIGludCB2ID0gMDsKICAgICBpZiAoc3NjYW5mKGNtYWpvci0+Y19zdHIoKSwgIiV1IiwgJnYpID09IDEpIHsKICAgICAgIHRoaXMtPkNhY2hlTWFqb3JWZXJzaW9uID0gdjsKICAgICB9Ci0gICAgaWYgKGNvbnN0IHN0ZDo6c3RyaW5nKiBjbWlub3IgPQorICAgIGlmIChjbVByb3AgY21pbm9yID0KICAgICAgICAgICB0aGlzLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0NBQ0hFX01JTk9SX1ZFUlNJT04iKSkgewogICAgICAgaWYgKHNzY2FuZihjbWlub3ItPmNfc3RyKCksICIldSIsICZ2KSA9PSAxKSB7CiAgICAgICAgIHRoaXMtPkNhY2hlTWlub3JWZXJzaW9uID0gdjsKQEAgLTE1MCw4ICsxNTAsNyBAQAogICB9CiAgIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgY2FjaGUgZGlyZWN0b3J5IGhhcyBub3QKICAgLy8gYmVlbiBtb3ZlZAotICBjb25zdCBzdGQ6OnN0cmluZyogb2xkRGlyID0KLSAgICB0aGlzLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0NBQ0hFRklMRV9ESVIiKTsKKyAgY21Qcm9wIG9sZERpciA9IHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOwogICBpZiAoaW50ZXJuYWwgJiYgb2xkRGlyKSB7CiAgICAgc3RkOjpzdHJpbmcgY3VycmVudGN3ZCA9IHBhdGg7CiAgICAgc3RkOjpzdHJpbmcgb2xkY3dkID0gKm9sZERpcjsKQEAgLTE1OSw4ICsxNTgsNyBAQAogICAgIGN1cnJlbnRjd2QgKz0gIi9DTWFrZUNhY2hlLnR4dCI7CiAgICAgb2xkY3dkICs9ICIvQ01ha2VDYWNoZS50eHQiOwogICAgIGlmICghY21TeXN0ZW1Ub29sczo6U2FtZUZpbGUob2xkY3dkLCBjdXJyZW50Y3dkKSkgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcqIGRpciA9Ci0gICAgICAgIHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOworICAgICAgY21Qcm9wIGRpciA9IHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOwogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1lc3NhZ2U7CiAgICAgICBtZXNzYWdlIDw8ICJUaGUgY3VycmVudCBDTWFrZUNhY2hlLnR4dCBkaXJlY3RvcnkgIiA8PCBjdXJyZW50Y3dkCiAgICAgICAgICAgICAgIDw8ICIgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGRpcmVjdG9yeSAiIDw8IChkaXIgPyAqZGlyIDogIiIpCkBAIC0xOTAsNyArMTg4LDcgQEAKICAgICBpZiAoZW50cnlLZXkuc2l6ZSgpID4gcGxlbiAmJiAqKGVuZCAtIHBsZW4pID09ICctJyAmJgogICAgICAgICBzdHJjbXAoZW5kIC0gcGxlbiArIDEsICpwKSA9PSAwKSB7CiAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBlbnRyeUtleS5zdWJzdHIoMCwgZW50cnlLZXkuc2l6ZSgpIC0gcGxlbik7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOworICAgICAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPSB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7CiAgICAgICBpZiAoaXQuSXNBdEVuZCgpKSB7CiAgICAgICAgIC8vIENyZWF0ZSBhbiBlbnRyeSBhbmQgc3RvcmUgdGhlIHByb3BlcnR5LgogICAgICAgICBDYWNoZUVudHJ5JiBuZSA9IHRoaXMtPkNhY2hlW2tleV07CkBAIC0yMTAsNyArMjA4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpCiB7CiAgIGZvciAoY29uc3QgY2hhcioqIHAgPSBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXM7ICpwOyArK3ApIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSBpLkdldFByb3BlcnR5KCpwKSkgeworICAgIGlmIChjbVByb3AgdmFsdWUgPSBpLkdldFByb3BlcnR5KCpwKSkgewogICAgICAgc3RkOjpzdHJpbmcgaGVscHN0cmluZyA9CiAgICAgICAgIGNtU3RyQ2F0KCpwLCAiIHByb3BlcnR5IGZvciB2YXJpYWJsZTogIiwgaS5HZXROYW1lKCkpOwogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcob3MsIGhlbHBzdHJpbmcpOwpAQCAtMjE4LDkgKzIxNiw5IEBACiAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChpLkdldE5hbWUoKSwgJy0nLCAqcCk7CiAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0S2V5KG9zLCBrZXkpOwogICAgICAgb3MgPDwgIjpJTlRFUk5BTD0iOwotICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKG9zLCB2YWx1ZSk7Ci0gICAgICBvcyA8PCAiXG4iOwotICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dE5ld2xpbmVUcnVuY2F0aW9uV2FybmluZyhvcywga2V5LCB2YWx1ZSwKKyAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRWYWx1ZShvcywgKnZhbHVlKTsKKyAgICAgIG9zIDw8ICdcbic7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKG9zLCBrZXksICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyKTsKICAgICB9CiAgIH0KQEAgLTI3MCwzMSArMjY4LDI5IEBACiAKICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBmb3V0IDw8ICIjIFRoaXMgaXMgdGhlIENNYWtlQ2FjaGUgZmlsZS5cbiIKLSAgICAgICA8PCAiIyBGb3IgYnVpbGQgaW4gZGlyZWN0b3J5OiAiIDw8IGN1cnJlbnRjd2QgPDwgIlxuIgotICAgICAgIDw8ICIjIEl0IHdhcyBnZW5lcmF0ZWQgYnkgQ01ha2U6ICIKLSAgICAgICA8PCBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgIiMgRm9yIGJ1aWxkIGluIGRpcmVjdG9yeTogIiA8PCBjdXJyZW50Y3dkIDw8ICJcbiIKKyAgICAgICAgICAiIyBJdCB3YXMgZ2VuZXJhdGVkIGJ5IENNYWtlOiAiCisgICAgICAgPDwgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCkKKyAgICAgICA8PCAiXG4iCisgICAgICAgICAgIiMgWW91IGNhbiBlZGl0IHRoaXMgZmlsZSB0byBjaGFuZ2UgdmFsdWVzIGZvdW5kIGFuZCB1c2VkIGJ5IGNtYWtlLiIKKyAgICAgICAgICAiXG4iCisgICAgICAgICAgIiMgSWYgeW91IGRvIG5vdCB3YW50IHRvIGNoYW5nZSBhbnkgb2YgdGhlIHZhbHVlcywgc2ltcGx5IGV4aXQgdGhlICIKKyAgICAgICAgICAiZWRpdG9yLlxuIgorICAgICAgICAgICIjIElmIHlvdSBkbyB3YW50IHRvIGNoYW5nZSBhIHZhbHVlLCBzaW1wbHkgZWRpdCwgc2F2ZSwgYW5kIGV4aXQgIgorICAgICAgICAgICJ0aGUgZWRpdG9yLlxuIgorICAgICAgICAgICIjIFRoZSBzeW50YXggZm9yIHRoZSBmaWxlIGlzIGFzIGZvbGxvd3M6XG4iCisgICAgICAgICAgIiMgS0VZOlRZUEU9VkFMVUVcbiIKKyAgICAgICAgICAiIyBLRVkgaXMgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSBpbiB0aGUgY2FjaGUuXG4iCisgICAgICAgICAgIiMgVFlQRSBpcyBhIGhpbnQgdG8gR1VJcyBmb3IgdGhlIHR5cGUgb2YgVkFMVUUsIERPIE5PVCBFRElUIFRZUEUhLiIKKyAgICAgICAgICAiXG4iCisgICAgICAgICAgIiMgVkFMVUUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBLRVkuXG4iCisgICAgICAgICAgIlxuIgorICAgICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICAgICAiIyBFWFRFUk5BTCBjYWNoZSBlbnRyaWVzXG4iCisgICAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICAgICJcbiI7CiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi0gIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgZm91dCA8PCAiIyBZb3UgY2FuIGVkaXQgdGhpcyBmaWxlIHRvIGNoYW5nZSB2YWx1ZXMgZm91bmQgYW5kIHVzZWQgYnkgY21ha2UuIgotICAgICAgIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIElmIHlvdSBkbyBub3Qgd2FudCB0byBjaGFuZ2UgYW55IG9mIHRoZSB2YWx1ZXMsIHNpbXBseSBleGl0IHRoZSAiCi0gICAgICAgImVkaXRvci4iIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIElmIHlvdSBkbyB3YW50IHRvIGNoYW5nZSBhIHZhbHVlLCBzaW1wbHkgZWRpdCwgc2F2ZSwgYW5kIGV4aXQgIgotICAgICAgICJ0aGUgZWRpdG9yLiIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgVGhlIHN5bnRheCBmb3IgdGhlIGZpbGUgaXMgYXMgZm9sbG93czpcbiIKLSAgICAgICA8PCAiIyBLRVk6VFlQRT1WQUxVRVxuIgotICAgICAgIDw8ICIjIEtFWSBpcyB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIGluIHRoZSBjYWNoZS5cbiIKLSAgICAgICA8PCAiIyBUWVBFIGlzIGEgaGludCB0byBHVUlzIGZvciB0aGUgdHlwZSBvZiBWQUxVRSwgRE8gTk9UIEVESVQgIgotICAgICAgICJUWVBFIS4iIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIFZBTFVFIGlzIHRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGUgS0VZLlxuXG4iOwotICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KLQotICBmb3V0IDw8ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7Ci0gIGZvdXQgPDwgIiMgRVhURVJOQUwgY2FjaGUgZW50cmllc1xuIjsKLSAgZm91dCA8PCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOwotICBmb3V0IDw8ICJcbiI7Ci0KICAgZm9yIChhdXRvIGNvbnN0JiBpIDogdGhpcy0+Q2FjaGUpIHsKICAgICBDYWNoZUVudHJ5IGNvbnN0JiBjZSA9IGkuc2Vjb25kOwogICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdCA9IGNlLlR5cGU7CkBAIC0zMDUsMjYgKzMwMSwyNiBAQAogICAgICAgKi8KICAgICB9IGVsc2UgaWYgKHQgIT0gY21TdGF0ZUVudW1zOjpJTlRFUk5BTCkgewogICAgICAgLy8gRm9ybWF0IGlzIGtleTp0eXBlPXZhbHVlCi0gICAgICBpZiAoY29uc3QgY2hhciogaGVscCA9IGNlLkdldFByb3BlcnR5KCJIRUxQU1RSSU5HIikpIHsKLSAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgaGVscCk7CisgICAgICBpZiAoY21Qcm9wIGhlbHAgPSBjZS5HZXRQcm9wZXJ0eSgiSEVMUFNUUklORyIpKSB7CisgICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRIZWxwU3RyaW5nKGZvdXQsICpoZWxwKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRIZWxwU3RyaW5nKGZvdXQsICJNaXNzaW5nIGRlc2NyaXB0aW9uIik7CiAgICAgICB9CiAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0S2V5KGZvdXQsIGkuZmlyc3QpOwotICAgICAgZm91dCA8PCAiOiIgPDwgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyh0KSA8PCAiPSI7CisgICAgICBmb3V0IDw8ICc6JyA8PCBjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHQpIDw8ICc9JzsKICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRWYWx1ZShmb3V0LCBjZS5WYWx1ZSk7Ci0gICAgICBmb3V0IDw8ICJcbiI7CisgICAgICBmb3V0IDw8ICdcbic7CiAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKGZvdXQsIGkuZmlyc3QsIGNlLlZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIpOwotICAgICAgZm91dCA8PCAiXG4iOworICAgICAgZm91dCA8PCAnXG4nOwogICAgIH0KICAgfQogCi0gIGZvdXQgPDwgIlxuIjsKLSAgZm91dCA8PCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOwotICBmb3V0IDw8ICIjIElOVEVSTkFMIGNhY2hlIGVudHJpZXNcbiI7Ci0gIGZvdXQgPDwgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsKLSAgZm91dCA8PCAiXG4iOworICBmb3V0IDw8ICJcbiIKKyAgICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgICAgIiMgSU5URVJOQUwgY2FjaGUgZW50cmllc1xuIgorICAgICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICAgICAiXG4iOwogCiAgIGZvciAoY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaSA9IHRoaXMtPk5ld0l0ZXJhdG9yKCk7ICFpLklzQXRFbmQoKTsKICAgICAgICBpLk5leHQoKSkgewpAQCAtMzM2LDE4ICszMzIsMTggQEAKICAgICB0aGlzLT5Xcml0ZVByb3BlcnR5RW50cmllcyhmb3V0LCBpLCBtZXNzZW5nZXIpOwogICAgIGlmICh0ID09IGNtU3RhdGVFbnVtczo6SU5URVJOQUwpIHsKICAgICAgIC8vIEZvcm1hdCBpcyBrZXk6dHlwZT12YWx1ZQotICAgICAgaWYgKGNvbnN0IGNoYXIqIGhlbHAgPSBpLkdldFByb3BlcnR5KCJIRUxQU1RSSU5HIikpIHsKLSAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgaGVscCk7CisgICAgICBpZiAoY21Qcm9wIGhlbHAgPSBpLkdldFByb3BlcnR5KCJIRUxQU1RSSU5HIikpIHsKKyAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgKmhlbHApOwogICAgICAgfQogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEtleShmb3V0LCBpLkdldE5hbWUoKSk7Ci0gICAgICBmb3V0IDw8ICI6IiA8PCBjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHQpIDw8ICI9IjsKKyAgICAgIGZvdXQgPDwgJzonIDw8IGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodCkgPDwgJz0nOwogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKGZvdXQsIGkuR2V0VmFsdWUoKSk7Ci0gICAgICBmb3V0IDw8ICJcbiI7CisgICAgICBmb3V0IDw8ICdcbic7CiAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKGZvdXQsIGkuR2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLkdldFZhbHVlKCksIG1lc3Nlbmdlcik7CiAgICAgfQogICB9Ci0gIGZvdXQgPDwgIlxuIjsKKyAgZm91dCA8PCAnXG4nOwogICBmb3V0LkNsb3NlKCk7CiAgIHN0ZDo6c3RyaW5nIGNoZWNrQ2FjaGVGaWxlID0gY21TdHJDYXQocGF0aCwgIi9DTWFrZUZpbGVzIik7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkoY2hlY2tDYWNoZUZpbGUpOwpAQCAtMzg1LDcgKzM4MSw5IEBACiB7CiAgIC8vIHN1cHBvcnQgOiBpbiBrZXkgbmFtZSBieSBkb3VibGUgcXVvdGluZwogICBjb25zdCBjaGFyKiBxID0KLSAgICAoa2V5LmZpbmQoJzonKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBrZXkuZmluZCgiLy8iKSA9PSAwKSA/ICJcIiIgOiAiIjsKKyAgICAoa2V5LmZpbmQoJzonKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBjbUhhc0xpdGVyYWxQcmVmaXgoa2V5LCAiLy8iKSkKKyAgICA/ICJcIiIKKyAgICA6ICIiOwogICBmb3V0IDw8IHEgPDwga2V5IDw8IHE7CiB9CiAKQEAgLTQzMCw3ICs0MjgsNyBAQAogICAgICAgICBmb3V0IDw8ICJcXG4iOwogICAgICAgfQogICAgICAgb25lTGluZSA9IGhlbHBTdHJpbmcuc3Vic3RyKHBvcywgaSAtIHBvcyk7Ci0gICAgICBmb3V0IDw8IG9uZUxpbmUgPDwgIlxuIjsKKyAgICAgIGZvdXQgPDwgb25lTGluZSA8PCAnXG4nOwogICAgICAgcG9zID0gaTsKICAgICB9CiAgIH0KQEAgLTQ1Miw3ICs0NTAsNyBAQAogICAgICAgICBmb3V0IDw8ICJcXG4iOwogICAgICAgfQogICAgICAgb25lTGluZSA9IG1lc3NhZ2Uuc3Vic3RyKHBvcywgaSAtIHBvcyk7Ci0gICAgICBmb3V0IDw8IG9uZUxpbmUgPDwgIlxuIjsKKyAgICAgIGZvdXQgPDwgb25lTGluZSA8PCAnXG4nOwogICAgICAgcG9zID0gaTsKICAgICB9CiAgIH0KQEAgLTQ5NywxMyArNDk1LDE4IEBACiAgIHJldHVybiBudWxscHRyOwogfQogCi1jbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVJdGVyYXRvcihjb25zdCBjaGFyKiBrZXkpCitjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVJdGVyYXRvcigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKIHsKLSAgcmV0dXJuIHsgKnRoaXMsIGtleSB9OworICByZXR1cm4geyAqdGhpcywga2V5LmNfc3RyKCkgfTsKIH0KIAotY29uc3Qgc3RkOjpzdHJpbmcqIGNtQ2FjaGVNYW5hZ2VyOjpHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0CitjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVJdGVyYXRvcigpCit7CisgIHJldHVybiB7ICp0aGlzLCBudWxscHRyIH07Cit9CisKK2NtUHJvcCBjbUNhY2hlTWFuYWdlcjo6R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0CiB7CiAgIGF1dG8gaSA9IHRoaXMtPkNhY2hlLmZpbmQoa2V5KTsKICAgaWYgKGkgIT0gdGhpcy0+Q2FjaGUuZW5kKCkgJiYgaS0+c2Vjb25kLkluaXRpYWxpemVkKSB7CkBAIC01MTQsMTcgKzUxNywxNyBAQAogCiB2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpQcmludENhY2hlKHN0ZDo6b3N0cmVhbSYgb3V0KSBjb25zdAogewotICBvdXQgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDw8IHN0ZDo6ZW5kbDsKLSAgb3V0IDw8ICJDTWFrZUNhY2hlIENvbnRlbnRzOiIgPDwgc3RkOjplbmRsOworICBvdXQgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKKyAgICAgICAgICJDTWFrZUNhY2hlIENvbnRlbnRzOlxuIjsKICAgZm9yIChhdXRvIGNvbnN0JiBpIDogdGhpcy0+Q2FjaGUpIHsKICAgICBpZiAoaS5zZWNvbmQuVHlwZSAhPSBjbVN0YXRlRW51bXM6OklOVEVSTkFMKSB7Ci0gICAgICBvdXQgPDwgaS5maXJzdCA8PCAiID0gIiA8PCBpLnNlY29uZC5WYWx1ZSA8PCBzdGQ6OmVuZGw7CisgICAgICBvdXQgPDwgaS5maXJzdCA8PCAiID0gIiA8PCBpLnNlY29uZC5WYWx1ZSA8PCAnXG4nOwogICAgIH0KICAgfQotICBvdXQgPDwgIlxuXG4iOwotICBvdXQgPDwgIlRvIGNoYW5nZSB2YWx1ZXMgaW4gdGhlIENNYWtlQ2FjaGUsICIgPDwgc3RkOjplbmRsCi0gICAgICA8PCAiZWRpdCBDTWFrZUNhY2hlLnR4dCBpbiB5b3VyIG91dHB1dCBkaXJlY3RvcnkuXG4iOwotICBvdXQgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDw8IHN0ZDo6ZW5kbDsKKyAgb3V0IDw8ICJcblxuIgorICAgICAgICAgIlRvIGNoYW5nZSB2YWx1ZXMgaW4gdGhlIENNYWtlQ2FjaGUsIFxuIgorICAgICAgICAgImVkaXQgQ01ha2VDYWNoZS50eHQgaW4geW91ciBvdXRwdXQgZGlyZWN0b3J5LlxuIgorICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CiB9CiAKIHZvaWQgY21DYWNoZU1hbmFnZXI6OkFkZENhY2hlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgY29uc3QgY2hhciogdmFsdWUsCkBAIC02MTMsMTQgKzYxNiwxMyBAQAogICByZXR1cm4gdGhpcy0+UHJvcGVydGllcy5HZXRLZXlzKCk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5OjpHZXRQcm9wZXJ0eSgKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitjbVByb3AgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnk6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAogewogICBpZiAocHJvcCA9PSAiVFlQRSIpIHsKLSAgICByZXR1cm4gY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyh0aGlzLT5UeXBlKTsKKyAgICByZXR1cm4gJmNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodGhpcy0+VHlwZSk7CiAgIH0KICAgaWYgKHByb3AgPT0gIlZBTFVFIikgewotICAgIHJldHVybiB0aGlzLT5WYWx1ZS5jX3N0cigpOworICAgIHJldHVybiAmdGhpcy0+VmFsdWU7CiAgIH0KICAgcmV0dXJuIHRoaXMtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKIH0KQEAgLTYzOCwxNCArNjQwLDE1IEBACiB9CiAKIHZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnk6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQogewogICBpZiAocHJvcCA9PSAiVFlQRSIpIHsKLSAgICB0aGlzLT5UeXBlID0gY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZSh2YWx1ZSA/IHZhbHVlIDogIlNUUklORyIpOworICAgIHRoaXMtPlR5cGUgPQorICAgICAgY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZSghdmFsdWUuZW1wdHkoKSA/IHZhbHVlIDogIlNUUklORyIpOwogICB9IGVsc2UgaWYgKHByb3AgPT0gIlZBTFVFIikgewotICAgIGlmICh2YWx1ZSkgewotICAgICAgaWYgKCF0aGlzLT5WYWx1ZS5lbXB0eSgpICYmICp2YWx1ZSAmJiAhYXNTdHJpbmcpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKKyAgICAgIGlmICghdGhpcy0+VmFsdWUuZW1wdHkoKSAmJiAhYXNTdHJpbmcpIHsKICAgICAgICAgdGhpcy0+VmFsdWUgKz0gIjsiOwogICAgICAgfQogICAgICAgdGhpcy0+VmFsdWUgKz0gdmFsdWU7CkBAIC02NTUsNyArNjU4LDcgQEAKICAgfQogfQogCi1jb25zdCBjaGFyKiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6R2V0UHJvcGVydHkoCitjbVByb3AgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OkdldFByb3BlcnR5KAogICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgaWYgKCF0aGlzLT5Jc0F0RW5kKCkpIHsKQEAgLTY3Myw3ICs2NzYsNyBAQAogfQogCiB2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCiB7CiAgIGlmICghdGhpcy0+SXNBdEVuZCgpKSB7CkBAIC02ODQsOCArNjg3LDggQEAKIGJvb2wgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OkdldFByb3BlcnR5QXNCb29sKAogICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKLSAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCkpIHsKLSAgICByZXR1cm4gY21Jc09uKHZhbHVlKTsKKyAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgcmV0dXJuIGNtSXNPbigqdmFsdWUpOwogICB9CiAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5oIGIvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmgKaW5kZXggZmFhNjBjNS4uM2RiNzZhOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmgKKysrIGIvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmgKQEAgLTM3LDkgKzM3LDkgQEAKICAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIFR5cGUgPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQ7CiAgICAgY21Qcm9wZXJ0eU1hcCBQcm9wZXJ0aWVzOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRQcm9wZXJ0eUxpc3QoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OworICAgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IGNoYXIqIHZhbHVlLAorICAgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwogICAgIGJvb2wgSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgfTsKQEAgLTU0LDE0ICs1NCwxNCBAQAogICAgIHZvaWQgTmV4dCgpOwogICAgIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Qb3NpdGlvbi0+Zmlyc3Q7IH0KICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0UHJvcGVydHlMaXN0KCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdDsKKyAgICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdDsKICAgICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3Q7CiAgICAgYm9vbCBQcm9wZXJ0eUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IGNoYXIqIHZhbHVlLAorICAgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwogICAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBib29sIHZhbHVlKTsKLSAgICBjb25zdCBjaGFyKiBHZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuVmFsdWUuY19zdHIoKTsgfQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuVmFsdWU7IH0KICAgICBib29sIEdldFZhbHVlQXNCb29sKCkgY29uc3Q7CiAgICAgdm9pZCBTZXRWYWx1ZShjb25zdCBjaGFyKik7CiAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBHZXRUeXBlKCkgY29uc3QKQEAgLTExMSw3ICsxMTEsOCBAQAogICB2b2lkIFByaW50Q2FjaGUoc3RkOjpvc3RyZWFtJikgY29uc3Q7CiAKICAgLy8hIEdldCB0aGUgaXRlcmF0b3IgZm9yIGFuIGVudHJ5IHdpdGggYSBnaXZlbiBrZXkuCi0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIEdldENhY2hlSXRlcmF0b3IoY29uc3QgY2hhcioga2V5ID0gbnVsbHB0cik7CisgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIEdldENhY2hlSXRlcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSk7CisgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIEdldENhY2hlSXRlcmF0b3IoKTsKIAogICAvLyEgUmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlCiAgIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5KTsKQEAgLTEyMCw1NiArMTIxLDU2IEBACiAgIGludCBHZXRTaXplKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzLT5DYWNoZS5zaXplKCkpOyB9CiAKICAgLy8hIEdldCBhIHZhbHVlIGZyb20gdGhlIGNhY2hlIGdpdmVuIGEga2V5Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkgY29uc3Q7CisgIGNtUHJvcCBHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkgY29uc3Q7CiAKLSAgY29uc3QgY2hhciogR2V0Q2FjaGVFbnRyeVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpCisgIGNtUHJvcCBHZXRDYWNoZUVudHJ5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKICAgewotICAgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSk7CisgICAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPSB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7CiAgICAgaWYgKGl0LklzQXRFbmQoKSkgewogICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBpdC5HZXRWYWx1ZSgpOworICAgIHJldHVybiAmaXQuR2V0VmFsdWUoKTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lKQorICBjbVByb3AgR2V0Q2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lKQogICB7Ci0gICAgcmV0dXJuIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpLkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgICByZXR1cm4gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpLkdldFByb3BlcnR5KHByb3BOYW1lKTsKICAgfQogCiAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgR2V0Q2FjaGVFbnRyeVR5cGUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkKICAgewotICAgIHJldHVybiB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKS5HZXRUeXBlKCk7CisgICAgcmV0dXJuIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5HZXRUeXBlKCk7CiAgIH0KIAogICBib29sIEdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcE5hbWUpCiAgIHsKLSAgICByZXR1cm4gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkuR2V0UHJvcGVydHlBc0Jvb2wocHJvcE5hbWUpOworICAgIHJldHVybiB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuR2V0UHJvcGVydHlBc0Jvb2wocHJvcE5hbWUpOwogICB9CiAKICAgdm9pZCBTZXRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCiAgIHsKLSAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKS5TZXRQcm9wZXJ0eShwcm9wTmFtZSwgdmFsdWUuY19zdHIoKSk7CisgICAgdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpLlNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZS5jX3N0cigpKTsKICAgfQogCiAgIHZvaWQgU2V0Q2FjaGVFbnRyeUJvb2xQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lLCBib29sIHZhbHVlKQogICB7Ci0gICAgdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkuU2V0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlKTsKKyAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuU2V0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlKTsKICAgfQogCiAgIHZvaWQgU2V0Q2FjaGVFbnRyeVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpLlNldFZhbHVlKHZhbHVlLmNfc3RyKCkpOworICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5TZXRWYWx1ZSh2YWx1ZS5jX3N0cigpKTsKICAgfQogCiAgIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpLlNldFByb3BlcnR5KHByb3BOYW1lLCBudWxscHRyKTsKKyAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuU2V0UHJvcGVydHkocHJvcE5hbWUsIG51bGxwdHIpOwogICB9CiAKICAgdm9pZCBBcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKQEAgLTE3Nyw4ICsxNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpCi0gICAgICAuQXBwZW5kUHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLmNfc3RyKCksIGFzU3RyaW5nKTsKKyAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuQXBwZW5kUHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLCBhc1N0cmluZyk7CiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q2FjaGVFbnRyeUtleXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eCBiL1NvdXJjZS9jbUNhbGxWaXN1YWxTdHVkaW9NYWNyby5jeHgKaW5kZXggOWUxNTJmZi4uOTRiNmUxOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eAorKysgYi9Tb3VyY2UvY21DYWxsVmlzdWFsU3R1ZGlvTWFjcm8uY3h4CkBAIC00Myw4ICs0Myw3IEBACiAgICAgICBpZiAoTG9nRXJyb3JzQXNNZXNzYWdlcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBfaHJlc3VsdF9vc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIF9ocmVzdWx0X29zcy5mbGFncyhzdGQ6Omlvczo6aGV4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9ocmVzdWx0X29zcyA8PCBjb250ZXh0IDw8ICIgZmFpbGVkIEhSRVNVTFQsIGhyID0gMHgiIDw8IGhyICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9ocmVzdWx0X29zcyA8PCBjb250ZXh0IDw8ICIgZmFpbGVkIEhSRVNVTFQsIGhyID0gMHgiIDw8IGhyIDw8ICdcbic7ICBcCiAgICAgICAgIF9ocmVzdWx0X29zcy5mbGFncyhzdGQ6Omlvczo6ZGVjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIF9ocmVzdWx0X29zcyA8PCBfX0ZJTEVfXyA8PCAiKCIgPDwgX19MSU5FX18gPDwgIikiOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UoX2hyZXN1bHRfb3NzLnN0cigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05OCwzMiArOTcsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBESVNQQVRDSF9NRVRIT0QsICZwYXJhbXMsICZyZXN1bHQsICZleGNlcCwgJmFyZyk7CiAKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgICBvc3MgPDwgc3RkOjplbmRsOwotICAgICAgb3NzIDw8ICJJbnZva2UoRXhlY3V0ZUNvbW1hbmQpIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBvc3MgPDwgIiAgTWFjcm86ICIgPDwgbWFjcm8gPDwgc3RkOjplbmRsOwotICAgICAgb3NzIDw8ICIgIEFyZ3M6ICIgPDwgYXJncyA8PCBzdGQ6OmVuZGw7CisgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgICBvc3MgPDwgIlxuSW52b2tlKEV4ZWN1dGVDb21tYW5kKVxuIgorICAgICAgICAgICAgICIgIE1hY3JvOiAiIDw8IG1hY3JvIDw8ICJcbiIKKyAgICAgICAgICAgICAiICBBcmdzOiAiIDw8IGFyZ3MgPDwgJ1xuJzsKKyAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAgICAgICBpZiAoRElTUF9FX0VYQ0VQVElPTiA9PSBocikgewotICAgICAgICBvc3MgPDwgIkRJU1BfRV9FWENFUFRJT04gRVhDRVBJTkZPOiIgPDwgZXhjZXAud0NvZGUgPDwgc3RkOjplbmRsOwotICAgICAgICBvc3MgPDwgIiAgd0NvZGU6ICIgPDwgZXhjZXAud0NvZGUgPDwgc3RkOjplbmRsOwotICAgICAgICBvc3MgPDwgIiAgd1Jlc2VydmVkOiAiIDw8IGV4Y2VwLndSZXNlcnZlZCA8PCBzdGQ6OmVuZGw7CisgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICAgICAgb3NzIDw8ICJESVNQX0VfRVhDRVBUSU9OIEVYQ0VQSU5GTzoiIDw8IGV4Y2VwLndDb2RlIDw8ICJcbiIKKyAgICAgICAgICAgICAgICIgIHdDb2RlOiAiIDw8IGV4Y2VwLndDb2RlIDw8ICJcbiIKKyAgICAgICAgICAgICAgICIgIHdSZXNlcnZlZDogIiA8PCBleGNlcC53UmVzZXJ2ZWQgPDwgJ1xuJzsKKyAgICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgICAgIGlmIChleGNlcC5ic3RyU291cmNlKSB7CiAgICAgICAgICAgb3NzIDw8ICIgIGJzdHJTb3VyY2U6ICIgPDwgKGNvbnN0IGNoYXIqKShfYnN0cl90KWV4Y2VwLmJzdHJTb3VyY2UKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICA8PCAnXG4nOwogICAgICAgICB9CiAgICAgICAgIGlmIChleGNlcC5ic3RyRGVzY3JpcHRpb24pIHsKICAgICAgICAgICBvc3MgPDwgIiAgYnN0ckRlc2NyaXB0aW9uOiAiCi0gICAgICAgICAgICAgIDw8IChjb25zdCBjaGFyKikoX2JzdHJfdClleGNlcC5ic3RyRGVzY3JpcHRpb24gPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICA8PCAoY29uc3QgY2hhciopKF9ic3RyX3QpZXhjZXAuYnN0ckRlc2NyaXB0aW9uIDw8ICdcbic7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4Y2VwLmJzdHJIZWxwRmlsZSkgewogICAgICAgICAgIG9zcyA8PCAiICBic3RySGVscEZpbGU6ICIgPDwgKGNvbnN0IGNoYXIqKShfYnN0cl90KWV4Y2VwLmJzdHJIZWxwRmlsZQotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgIDw8ICdcbic7CiAgICAgICAgIH0KLSAgICAgICAgb3NzIDw8ICIgIGR3SGVscENvbnRleHQ6ICIgPDwgZXhjZXAuZHdIZWxwQ29udGV4dCA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICBwdlJlc2VydmVkOiAiIDw8IGV4Y2VwLnB2UmVzZXJ2ZWQgPDwgc3RkOjplbmRsOwotICAgICAgICBvc3MgPDwgIiAgcGZuRGVmZXJyZWRGaWxsSW46ICIKLSAgICAgICAgICAgIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4Y2VwLnBmbkRlZmVycmVkRmlsbEluKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICBzY29kZTogIiA8PCBleGNlcC5zY29kZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICAgICAgb3NzIDw8ICIgIGR3SGVscENvbnRleHQ6ICIgPDwgZXhjZXAuZHdIZWxwQ29udGV4dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiICBwdlJlc2VydmVkOiAiIDw8IGV4Y2VwLnB2UmVzZXJ2ZWQgPDwgIlxuIgorICAgICAgICAgICAgICAgIiAgcGZuRGVmZXJyZWRGaWxsSW46ICIKKyAgICAgICAgICAgIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4Y2VwLnBmbkRlZmVycmVkRmlsbEluKSA8PCAiXG4iCisgICAgICAgICAgICAgICAiICBzY29kZTogIiA8PCBleGNlcC5zY29kZSA8PCAnXG4nOworICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgICAgIH0KIAogICAgICAgc3RkOjpzdHJpbmcgZXhzdHIob3NzLnN0cigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5jeHggYi9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuY3h4CmluZGV4IDYxM2FlMDYuLjM3OTgzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5jeHgKKysrIGIvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmN4eApAQCAtNSw2ICs1LDkgQEAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL21lbW9yeT4KIAogI2luY2x1ZGUgImNtQ29tbWFuZEFyZ3VtZW50TGV4ZXIuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC00MCwxMCArNDMsMTAgQEAKICAgaWYgKHN0ci5lbXB0eSgpKSB7CiAgICAgcmV0dXJuICIiOwogICB9Ci0gIGNoYXIqIHN0VmFsID0gbmV3IGNoYXJbc3RyLnNpemUoKSArIDFdOwotICBzdHJjcHkoc3RWYWwsIHN0ci5jX3N0cigpKTsKLSAgdGhpcy0+VmFyaWFibGVzLnB1c2hfYmFjayhzdFZhbCk7Ci0gIHJldHVybiBzdFZhbDsKKyAgYXV0byBzdFZhbCA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KHN0ci5zaXplKCkgKyAxKTsKKyAgc3RyY3B5KHN0VmFsLmdldCgpLCBzdHIuY19zdHIoKSk7CisgIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2soc3RkOjptb3ZlKHN0VmFsKSk7CisgIHJldHVybiB0aGlzLT5WYXJpYWJsZXMuYmFjaygpLmdldCgpOwogfQogCiBjb25zdCBjaGFyKiBjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlcjo6RXhwYW5kU3BlY2lhbFZhcmlhYmxlKApAQCAtMTM2LDExICsxMzksMTEgQEAKICAgICByZXR1cm4gaW4xOwogICB9CiAgIHNpemVfdCBsZW4gPSBzdHJsZW4oaW4xKSArIHN0cmxlbihpbjIpICsgMTsKLSAgY2hhciogb3V0ID0gbmV3IGNoYXJbbGVuXTsKLSAgc3RyY3B5KG91dCwgaW4xKTsKLSAgc3RyY2F0KG91dCwgaW4yKTsKLSAgdGhpcy0+VmFyaWFibGVzLnB1c2hfYmFjayhvdXQpOwotICByZXR1cm4gb3V0OworICBhdXRvIG91dCA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KGxlbik7CisgIHN0cmNweShvdXQuZ2V0KCksIGluMSk7CisgIHN0cmNhdChvdXQuZ2V0KCksIGluMik7CisgIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2soc3RkOjptb3ZlKG91dCkpOworICByZXR1cm4gdGhpcy0+VmFyaWFibGVzLmJhY2soKS5nZXQoKTsKIH0KIAogdm9pZCBjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlcjo6QWxsb2NhdGVQYXJzZXJUeXBlKApAQCAtMTUzLDExICsxNTYsMTEgQEAKICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGNoYXIqIG91dCA9IG5ldyBjaGFyW2xlbiArIDFdOwotICBtZW1jcHkob3V0LCBzdHIsIGxlbik7Ci0gIG91dFtsZW5dID0gMDsKLSAgcHQtPnN0ciA9IG91dDsKLSAgdGhpcy0+VmFyaWFibGVzLnB1c2hfYmFjayhvdXQpOworICBhdXRvIG91dCA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KGxlbiArIDEpOworICBtZW1jcHkob3V0LmdldCgpLCBzdHIsIGxlbik7CisgIG91dC5nZXQoKVtsZW5dID0gMDsKKyAgcHQtPnN0ciA9IG91dC5nZXQoKTsKKyAgdGhpcy0+VmFyaWFibGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUob3V0KSk7CiB9CiAKIGJvb2wgY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXI6OkhhbmRsZUVzY2FwZVN5bWJvbCgKQEAgLTIzNSwxMCArMjM4LDcgQEAKIAogdm9pZCBjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlcjo6Q2xlYW51cFBhcnNlcigpCiB7Ci0gIGZvciAoY2hhciogdmFyIDogdGhpcy0+VmFyaWFibGVzKSB7Ci0gICAgZGVsZXRlW10gdmFyOwotICB9Ci0gIHRoaXMtPlZhcmlhYmxlcy5lcmFzZSh0aGlzLT5WYXJpYWJsZXMuYmVnaW4oKSwgdGhpcy0+VmFyaWFibGVzLmVuZCgpKTsKKyAgdGhpcy0+VmFyaWFibGVzLmNsZWFyKCk7CiB9CiAKIGludCBjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlcjo6TGV4SW5wdXQoY2hhciogYnVmLCBpbnQgbWF4bGVuKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmggYi9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuaAppbmRleCAyNWU2ODkyLi5iNDZlZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuaAorKysgYi9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuaApAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtNjksNyArNzAsNyBAQAogICB2b2lkIENsZWFudXBQYXJzZXIoKTsKICAgdm9pZCBTZXRFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKTsKIAotICBzdGQ6OnZlY3RvcjxjaGFyKj4gVmFyaWFibGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPj4gVmFyaWFibGVzOwogICBjb25zdCBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKICAgc3RkOjpzdHJpbmcgUmVzdWx0OwogICBzdGQ6OnN0cmluZyBFcnJvclN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbW1hbmRzLmN4eCBiL1NvdXJjZS9jbUNvbW1hbmRzLmN4eAppbmRleCA2ZjE5Njk3Li4yOGI0MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21tYW5kcy5jeHgKKysrIGIvU291cmNlL2NtQ29tbWFuZHMuY3h4CkBAIC05MSw2ICs5MSw3IEBACiAjICBpbmNsdWRlICJjbUFkZExpbmtPcHRpb25zQ29tbWFuZC5oIgogIyAgaW5jbHVkZSAiY21BdXhTb3VyY2VEaXJlY3RvcnlDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUJ1aWxkTmFtZUNvbW1hbmQuaCIKKyMgIGluY2x1ZGUgImNtQ01ha2VDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUNNYWtlSG9zdFN5c3RlbUluZm9ybWF0aW9uQ29tbWFuZC5oIgogIyAgaW5jbHVkZSAiY21FeHBvcnRDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmgiCkBAIC0xOTYsOCArMTk3LDEwIEBACiAgICAgIm1hdGNoIHRoZSBvcGVuaW5nIFdISUxFIGNvbW1hbmQuIik7CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgiY21ha2VfY29tbWFuZCIsIGNtQ01ha2VDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUNNYWtlSG9zdFN5c3RlbUluZm9ybWF0aW9uQ29tbWFuZCk7CisgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgibG9hZF9jYWNoZSIsIGNtTG9hZENhY2hlQ29tbWFuZCk7CiAgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgicmVtb3ZlIiwgY21SZW1vdmVDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJ2YXJpYWJsZV93YXRjaCIsIGNtVmFyaWFibGVXYXRjaENvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoIndyaXRlX2ZpbGUiLCBjbVdyaXRlRmlsZUNvbW1hbmQpOwpAQCAtMjc5LDcgKzI4Miw2IEBACiAgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgibGlua19saWJyYXJpZXMiLCBjbUxpbmtMaWJyYXJpZXNDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJ0YXJnZXRfbGlua19kaXJlY3RvcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldExpbmtEaXJlY3Rvcmllc0NvbW1hbmQpOwotICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoImxvYWRfY2FjaGUiLCBjbUxvYWRDYWNoZUNvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoInF0X3dyYXBfY3BwIiwgY21RVFdyYXBDUFBDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJxdF93cmFwX3VpIiwgY21RVFdyYXBVSUNvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoInJlbW92ZV9kZWZpbml0aW9ucyIsIGNtUmVtb3ZlRGVmaW5pdGlvbnNDb21tYW5kKTsKQEAgLTMzOSw3ICszNDEsNiBAQAogICBDTV9VTkVYUEVDVEVEX1BST0pFQ1RfQ09NTUFORCgiaW5zdGFsbCIpOwogICBDTV9VTkVYUEVDVEVEX1BST0pFQ1RfQ09NTUFORCgibGlua19kaXJlY3RvcmllcyIpOwogICBDTV9VTkVYUEVDVEVEX1BST0pFQ1RfQ09NTUFORCgibGlua19saWJyYXJpZXMiKTsKLSAgQ01fVU5FWFBFQ1RFRF9QUk9KRUNUX0NPTU1BTkQoImxvYWRfY2FjaGUiKTsKICAgQ01fVU5FWFBFQ1RFRF9QUk9KRUNUX0NPTU1BTkQoInByb2plY3QiKTsKICAgQ01fVU5FWFBFQ1RFRF9QUk9KRUNUX0NPTU1BTkQoInF0X3dyYXBfY3BwIik7CiAgIENNX1VORVhQRUNURURfUFJPSkVDVF9DT01NQU5EKCJxdF93cmFwX3VpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCAxOWEwOTZiLi4wMzNjYjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVRhcmdldC5oIgogCiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6Y21Db21tb25UYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIGd0KQogICA6IEdlbmVyYXRvclRhcmdldChndCkKQEAgLTI1LDI3ICsyNiwyOSBAQAogICAgICAgc3RhdGljX2Nhc3Q8Y21Mb2NhbENvbW1vbkdlbmVyYXRvcio+KGd0LT5Mb2NhbEdlbmVyYXRvcikpCiAgICwgR2xvYmFsQ29tbW9uR2VuZXJhdG9yKHN0YXRpY19jYXN0PGNtR2xvYmFsQ29tbW9uR2VuZXJhdG9yKj4oCiAgICAgICBndC0+TG9jYWxHZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpKSkKLSAgLCBDb25maWdOYW1lKExvY2FsQ29tbW9uR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCkpCisgICwgQ29uZmlnTmFtZXMoTG9jYWxDb21tb25HZW5lcmF0b3ItPkdldENvbmZpZ05hbWVzKCkpCiB7CiB9CiAKIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjp+Y21Db21tb25UYXJnZXRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKLXN0ZDo6c3RyaW5nIGNvbnN0JiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0Q29uZmlnTmFtZSgpIGNvbnN0CitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRDb25maWdOYW1lcygpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5Db25maWdOYW1lOworICByZXR1cm4gdGhpcy0+Q29uZmlnTmFtZXM7CiB9CiAKLWNvbnN0IGNoYXIqIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKQorY29uc3QgY2hhciogY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlKGZlYXR1cmUsIHRoaXMtPkNvbmZpZ05hbWUpOworICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlKGZlYXR1cmUsIGNvbmZpZyk7CiB9CiAKIHZvaWQgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkFkZE1vZHVsZURlZmluaXRpb25GbGFnKAotICBjbUxpbmtMaW5lQ29tcHV0ZXIqIGxpbmtMaW5lQ29tcHV0ZXIsIHN0ZDo6c3RyaW5nJiBmbGFncykKKyAgY21MaW5rTGluZUNvbXB1dGVyKiBsaW5rTGluZUNvbXB1dGVyLCBzdGQ6OnN0cmluZyYgZmxhZ3MsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNb2R1bGVEZWZpbml0aW9uSW5mbyBjb25zdCogbWRpID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE1vZHVsZURlZmluaXRpb25JbmZvKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNb2R1bGVEZWZpbml0aW9uSW5mbyhjb25maWcpOwogICBpZiAoIW1kaSB8fCBtZGktPkRlZkZpbGUuZW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQpAQCAtOTQsNTcgKzk3LDYwIEBACiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZsYWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsKQorc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZsYWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGF1dG8gaSA9IHRoaXMtPkZsYWdzQnlMYW5ndWFnZS5maW5kKGwpOwotICBpZiAoaSA9PSB0aGlzLT5GbGFnc0J5TGFuZ3VhZ2UuZW5kKCkpIHsKKyAgYXV0byBpID0gdGhpcy0+Q29uZmlnc1tjb25maWddLkZsYWdzQnlMYW5ndWFnZS5maW5kKGwpOworICBpZiAoaSA9PSB0aGlzLT5Db25maWdzW2NvbmZpZ10uRmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZmxhZ3M7CiAKLSAgICB0aGlzLT5Mb2NhbENvbW1vbkdlbmVyYXRvci0+R2V0VGFyZ2V0Q29tcGlsZUZsYWdzKAotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCB0aGlzLT5Db25maWdOYW1lLCBsLCBmbGFncyk7CisgICAgdGhpcy0+TG9jYWxDb21tb25HZW5lcmF0b3ItPkdldFRhcmdldENvbXBpbGVGbGFncyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsIGwsIGZsYWdzKTsKIAogICAgIEJ5TGFuZ3VhZ2VNYXA6OnZhbHVlX3R5cGUgZW50cnkobCwgZmxhZ3MpOwotICAgIGkgPSB0aGlzLT5GbGFnc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKKyAgICBpID0gdGhpcy0+Q29uZmlnc1tjb25maWddLkZsYWdzQnlMYW5ndWFnZS5pbnNlcnQoZW50cnkpLmZpcnN0OwogICB9CiAgIHJldHVybiBpLT5zZWNvbmQ7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXREZWZpbmVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsKQorc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldERlZmluZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBhdXRvIGkgPSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5maW5kKGwpOwotICBpZiAoaSA9PSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5lbmQoKSkgeworICBhdXRvIGkgPSB0aGlzLT5Db25maWdzW2NvbmZpZ10uRGVmaW5lc0J5TGFuZ3VhZ2UuZmluZChsKTsKKyAgaWYgKGkgPT0gdGhpcy0+Q29uZmlnc1tjb25maWddLkRlZmluZXNCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGRlZmluZXM7Ci0gICAgdGhpcy0+TG9jYWxDb21tb25HZW5lcmF0b3ItPkdldFRhcmdldERlZmluZXModGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIGwsIGRlZmluZXMpOworICAgIHRoaXMtPkxvY2FsQ29tbW9uR2VuZXJhdG9yLT5HZXRUYXJnZXREZWZpbmVzKHRoaXMtPkdlbmVyYXRvclRhcmdldCwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwsIGRlZmluZXMpOwogCiAgICAgc3RkOjpzdHJpbmcgZGVmaW5lc1N0cmluZzsKICAgICB0aGlzLT5Mb2NhbENvbW1vbkdlbmVyYXRvci0+Sm9pbkRlZmluZXMoZGVmaW5lcywgZGVmaW5lc1N0cmluZywgbCk7CiAKICAgICBCeUxhbmd1YWdlTWFwOjp2YWx1ZV90eXBlIGVudHJ5KGwsIGRlZmluZXNTdHJpbmcpOwotICAgIGkgPSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5pbnNlcnQoZW50cnkpLmZpcnN0OworICAgIGkgPSB0aGlzLT5Db25maWdzW2NvbmZpZ10uRGVmaW5lc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKICAgfQogICByZXR1cm4gaS0+c2Vjb25kOwogfQogCi1zdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0SW5jbHVkZXMoc3RkOjpzdHJpbmcgY29uc3QmIGwpCitzdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0SW5jbHVkZXMoc3RkOjpzdHJpbmcgY29uc3QmIGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgYXV0byBpID0gdGhpcy0+SW5jbHVkZXNCeUxhbmd1YWdlLmZpbmQobCk7Ci0gIGlmIChpID09IHRoaXMtPkluY2x1ZGVzQnlMYW5ndWFnZS5lbmQoKSkgeworICBhdXRvIGkgPSB0aGlzLT5Db25maWdzW2NvbmZpZ10uSW5jbHVkZXNCeUxhbmd1YWdlLmZpbmQobCk7CisgIGlmIChpID09IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5JbmNsdWRlc0J5TGFuZ3VhZ2UuZW5kKCkpIHsKICAgICBzdGQ6OnN0cmluZyBpbmNsdWRlczsKLSAgICB0aGlzLT5BZGRJbmNsdWRlRmxhZ3MoaW5jbHVkZXMsIGwpOworICAgIHRoaXMtPkFkZEluY2x1ZGVGbGFncyhpbmNsdWRlcywgbCwgY29uZmlnKTsKICAgICBCeUxhbmd1YWdlTWFwOjp2YWx1ZV90eXBlIGVudHJ5KGwsIGluY2x1ZGVzKTsKLSAgICBpID0gdGhpcy0+SW5jbHVkZXNCeUxhbmd1YWdlLmluc2VydChlbnRyeSkuZmlyc3Q7CisgICAgaSA9IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5JbmNsdWRlc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKICAgfQogICByZXR1cm4gaS0+c2Vjb25kOwogfQogCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldExpbmtlZFRhcmdldERpcmVjdG9yaWVzKCkKLSAgY29uc3QKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkaXJzOwogICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IGVtaXR0ZWQ7CiAgIGlmIChjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKHRoaXMtPkNvbmZpZ05hbWUpKSB7CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKGNvbmZpZykpIHsKICAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW1WZWN0b3IgY29uc3QmIGl0ZW1zID0gY2xpLT5HZXRJdGVtcygpOwogICAgIGZvciAoYXV0byBjb25zdCYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogbGlua2VlID0gaXRlbS5UYXJnZXQ7CkBAIC0xNjUsMTkgKzE3MSwyNCBAQAogICByZXR1cm4gZGlyczsKIH0KIAotc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCkgY29uc3QKK3N0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpDb21wdXRlVGFyZ2V0Q29tcGlsZVBEQigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgY29tcGlsZVBkYlBhdGg7CiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA+IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICByZXR1cm4gY29tcGlsZVBkYlBhdGg7CiAgIH0KIAotICBjb21waWxlUGRiUGF0aCA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDb21waWxlUERCUGF0aCh0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICBjb21waWxlUGRiUGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q29tcGlsZVBEQlBhdGgoY29uZmlnKTsKICAgaWYgKGNvbXBpbGVQZGJQYXRoLmVtcHR5KCkpIHsKICAgICAvLyBNYXRjaCBWUyBkZWZhdWx0OiBgJChJbnREaXIpdmMkKFBsYXRmb3JtVG9vbHNldFZlcnNpb24pLnBkYmAuCiAgICAgLy8gQSB0cmFpbGluZyBzbGFzaCB0ZWxscyB0aGUgdG9vbGNoYWluIHRvIGFkZCBpdHMgZGVmYXVsdCBmaWxlIG5hbWUuCi0gICAgY29tcGlsZVBkYlBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSArICIvIjsKKyAgICBjb21waWxlUGRiUGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOworICAgIGlmICh0aGlzLT5HbG9iYWxDb21tb25HZW5lcmF0b3ItPklzTXVsdGlDb25maWcoKSkgeworICAgICAgY29tcGlsZVBkYlBhdGggKz0gIi8iOworICAgICAgY29tcGlsZVBkYlBhdGggKz0gY29uZmlnOworICAgIH0KKyAgICBjb21waWxlUGRiUGF0aCArPSAiLyI7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHsKICAgICAgIC8vIE1hdGNoIFZTIGRlZmF1bHQgZm9yIHN0YXRpYyBsaWJzOiBgJChJbnREaXIpJChQcm9qZWN0TmFtZSkucGRiYC4KICAgICAgIGNvbXBpbGVQZGJQYXRoICs9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpOwpAQCAtMTg4LDEwICsxOTksMTAgQEAKICAgcmV0dXJuIGNvbXBpbGVQZGJQYXRoOwogfQogCi1zdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0TWFuaWZlc3RzKCkKK3N0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRNYW5pZmVzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gbWFuaWZlc3Rfc3JjczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TWFuaWZlc3RzKG1hbmlmZXN0X3NyY3MsIGNvbmZpZyk7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1hbmlmZXN0czsKICAgbWFuaWZlc3RzLnJlc2VydmUobWFuaWZlc3Rfc3Jjcy5zaXplKCkpOwpAQCAtMjA2LDYgKzIxNywyMCBAQAogICByZXR1cm4gY21Kb2luKG1hbmlmZXN0cywgIiAiKTsKIH0KIAorc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEFJWEV4cG9ydHMoc3RkOjpzdHJpbmcgY29uc3QmKQoreworICBzdGQ6OnN0cmluZyBhaXhFeHBvcnRzOworICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPklzQUlYKCkpIHsKKyAgICBpZiAoY29uc3QgY2hhciogZXhwb3J0QWxsID0KKyAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBSVhfRVhQT1JUX0FMTF9TWU1CT0xTIikpIHsKKyAgICAgIGlmIChjbUlzT2ZmKGV4cG9ydEFsbCkpIHsKKyAgICAgICAgYWl4RXhwb3J0cyA9ICItbiI7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBhaXhFeHBvcnRzOworfQorCiB2b2lkIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpBcHBlbmRPU1hWZXJGbGFnKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgc28pCkBAIC0yMjMsNyArMjQ4LDEwIEBACiAgIGludCBtYWpvcjsKICAgaW50IG1pbm9yOwogICBpbnQgcGF0Y2g7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VGFyZ2V0VmVyc2lvbihzbywgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisgIHN0ZDo6c3RyaW5nIHByb3AgPSBjbVN0ckNhdCgiTUFDSE9fIiwgbmFtZSwgIl9WRVJTSU9OIik7CisgIHN0ZDo6c3RyaW5nIGZhbGxiYWNrX3Byb3AgPSBzbyA/ICJTT1ZFUlNJT04iIDogIlZFUlNJT04iOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFRhcmdldFZlcnNpb25GYWxsYmFjayhwcm9wLCBmYWxsYmFja19wcm9wLCBtYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3IsIHBhdGNoKTsKICAgaWYgKG1ham9yID4gMCB8fCBtaW5vciA+IDAgfHwgcGF0Y2ggPiAwKSB7CiAgICAgLy8gQXBwZW5kIHRoZSBmbGFnIHNpbmNlIGEgbm9uLXplcm8gdmVyc2lvbiBpcyBzcGVjaWZpZWQuCiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHZmbGFnOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuaAppbmRleCAxNzc5MmQ2Li5iNDBhMmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuaApAQCAtMjUsNDIgKzI1LDUxIEBACiAgIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCk7CiAgIHZpcnR1YWwgfmNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yKCk7CiAKLSAgc3RkOjpzdHJpbmcgY29uc3QmIEdldENvbmZpZ05hbWUoKSBjb25zdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBHZXRDb25maWdOYW1lcygpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgIC8vIEZlYXR1cmUgcXVlcnkgbWV0aG9kcy4KLSAgY29uc3QgY2hhciogR2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSk7CisgIGNvbnN0IGNoYXIqIEdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgLy8gSGVscGVyIHRvIGFkZCBmbGFnIGZvciB3aW5kb3dzIC5kZWYgZmlsZS4KICAgdm9pZCBBZGRNb2R1bGVEZWZpbml0aW9uRmxhZyhjbUxpbmtMaW5lQ29tcHV0ZXIqIGxpbmtMaW5lQ29tcHV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBHZW5lcmF0b3JUYXJnZXQ7CiAgIGNtTWFrZWZpbGUqIE1ha2VmaWxlOwogICBjbUxvY2FsQ29tbW9uR2VuZXJhdG9yKiBMb2NhbENvbW1vbkdlbmVyYXRvcjsKICAgY21HbG9iYWxDb21tb25HZW5lcmF0b3IqIEdsb2JhbENvbW1vbkdlbmVyYXRvcjsKLSAgc3RkOjpzdHJpbmcgQ29uZmlnTmFtZTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbmZpZ05hbWVzOwogCiAgIHZvaWQgQXBwZW5kRm9ydHJhbkZvcm1hdEZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UpOwogCi0gIHZpcnR1YWwgdm9pZCBBZGRJbmNsdWRlRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSA9IDA7CisgIHZpcnR1YWwgdm9pZCBBZGRJbmNsdWRlRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLCBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSA9IDA7CiAKICAgdm9pZCBBcHBlbmRPU1hWZXJGbGFnKHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lLCBib29sIHNvKTsKIAotICB1c2luZyBCeUxhbmd1YWdlTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjsKLSAgc3RkOjpzdHJpbmcgR2V0RmxhZ3MoY29uc3Qgc3RkOjpzdHJpbmcmIGwpOwotICBCeUxhbmd1YWdlTWFwIEZsYWdzQnlMYW5ndWFnZTsKLSAgc3RkOjpzdHJpbmcgR2V0RGVmaW5lcyhjb25zdCBzdGQ6OnN0cmluZyYgbCk7Ci0gIEJ5TGFuZ3VhZ2VNYXAgRGVmaW5lc0J5TGFuZ3VhZ2U7Ci0gIHN0ZDo6c3RyaW5nIEdldEluY2x1ZGVzKHN0ZDo6c3RyaW5nIGNvbnN0JiBsKTsKLSAgQnlMYW5ndWFnZU1hcCBJbmNsdWRlc0J5TGFuZ3VhZ2U7Ci0gIHN0ZDo6c3RyaW5nIEdldE1hbmlmZXN0cygpOworICBzdGQ6OnN0cmluZyBHZXRGbGFncyhjb25zdCBzdGQ6OnN0cmluZyYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHN0ZDo6c3RyaW5nIEdldERlZmluZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICBzdGQ6OnN0cmluZyBHZXRJbmNsdWRlcyhzdGQ6OnN0cmluZyBjb25zdCYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHN0ZDo6c3RyaW5nIEdldE1hbmlmZXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgc3RkOjpzdHJpbmcgR2V0QUlYRXhwb3J0cyhzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKIAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoKSBjb25zdDsKLSAgc3RkOjpzdHJpbmcgQ29tcHV0ZVRhcmdldENvbXBpbGVQREIoKSBjb25zdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldExpbmtlZFRhcmdldERpcmVjdG9yaWVzKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBDb21wdXRlVGFyZ2V0Q29tcGlsZVBEQihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKworcHJpdmF0ZToKKyAgdXNpbmcgQnlMYW5ndWFnZU1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz47CisgIHN0cnVjdCBCeUNvbmZpZworICB7CisgICAgQnlMYW5ndWFnZU1hcCBGbGFnc0J5TGFuZ3VhZ2U7CisgICAgQnlMYW5ndWFnZU1hcCBEZWZpbmVzQnlMYW5ndWFnZTsKKyAgICBCeUxhbmd1YWdlTWFwIEluY2x1ZGVzQnlMYW5ndWFnZTsKKyAgfTsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJ5Q29uZmlnPiBDb25maWdzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguY3h4IGIvU291cmNlL2NtQ29tcHV0ZUNvbXBvbmVudEdyYXBoLmN4eAppbmRleCBhZjI1N2VlLi44MWNkODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguY3h4CisrKyBiL1NvdXJjZS9jbUNvbXB1dGVDb21wb25lbnRHcmFwaC5jeHgKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAvLyBXZSBkbyBub3QgYXR0ZW1wdCB0byBjb21iaW5lIGR1cGxpY2F0ZSBlZGdlcywgYnV0IGluc3RlYWQKICAgICAgICAgLy8gc3RvcmUgdGhlIGludGVyLWNvbXBvbmVudCBlZGdlcyB3aXRoIHN1aXRhYmxlIG11bHRpcGxpY2l0eS4KICAgICAgICAgdGhpcy0+Q29tcG9uZW50R3JhcGhbaV9jb21wb25lbnRdLmVtcGxhY2VfYmFjaygKLSAgICAgICAgICBqX2NvbXBvbmVudCwgbmkuSXNTdHJvbmcoKSwgbmkuR2V0QmFja3RyYWNlKCkpOworICAgICAgICAgIGpfY29tcG9uZW50LCBuaS5Jc1N0cm9uZygpLCBuaS5Jc0Nyb3NzKCksIG5pLkdldEJhY2t0cmFjZSgpKTsKICAgICAgIH0KICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5jeHggYi9Tb3VyY2UvY21Db21wdXRlTGlua0RlcGVuZHMuY3h4CmluZGV4IGNjZWY5YzguLmU5YmY1YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5jeHgKKysrIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtEZXBlbmRzLmN4eApAQCAtNDEyLDcgKzQxMiw3IEBACiAgIC8vIFRoaXMgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jeSBtdXN0IGZvbGxvdyB0aGUgaXRlbSB0aGF0IGxpc3RlZAogICAvLyBpdC4KICAgdGhpcy0+RW50cnlDb25zdHJhaW50R3JhcGhbZGVwLkRlcGVuZGVySW5kZXhdLmVtcGxhY2VfYmFjaygKLSAgICBpbmRleCwgdHJ1ZSwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKTsKKyAgICBpbmRleCwgdHJ1ZSwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CiAKICAgLy8gVGFyZ2V0IGl0ZW1zIG1heSBoYXZlIHRoZWlyIG93biBkZXBlbmRlbmNpZXMuCiAgIGlmIChlbnRyeS5UYXJnZXQpIHsKQEAgLTUxNCw3ICs1MTQsNyBAQAogICAgIC8vIFRoZSBkZXBlbmRlZSBtdXN0IGNvbWUgYWZ0ZXIgdGhlIGRlcGVuZGVyLgogICAgIGlmIChkZXBlbmRlcl9pbmRleCA+PSAwKSB7CiAgICAgICB0aGlzLT5FbnRyeUNvbnN0cmFpbnRHcmFwaFtkZXBlbmRlcl9pbmRleF0uZW1wbGFjZV9iYWNrKAotICAgICAgICBkZXBlbmRlZV9pbmRleCwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CisgICAgICAgIGRlcGVuZGVlX2luZGV4LCBmYWxzZSwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIFRoaXMgaXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IGJlaW5nIGxpbmtlZC4KICAgICAgIHRoaXMtPk9yaWdpbmFsRW50cmllcy5wdXNoX2JhY2soZGVwZW5kZWVfaW5kZXgpOwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAgICAgY21HcmFwaEVkZ2VMaXN0JiBlZGdlcyA9IHRoaXMtPkVudHJ5Q29uc3RyYWludEdyYXBoW2RlcGVuZGVyX2luZGV4XTsKICAgICBlZGdlcy5yZXNlcnZlKGVkZ2VzLnNpemUoKSArIGNvbW1vbi5zaXplKCkpOwogICAgIGZvciAoYXV0byBjb25zdCYgYyA6IGNvbW1vbikgewotICAgICAgZWRnZXMuZW1wbGFjZV9iYWNrKGMsIHRydWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CisgICAgICBlZGdlcy5lbXBsYWNlX2JhY2soYywgdHJ1ZSwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21wdXRlTGlua0RlcGVuZHMuaCBiL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5oCmluZGV4IDQzYmZkMWQuLmU4MDZkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5oCisrKyBiL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5oCkBAIC03LDEyICs3LDExIEBACiAKICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSA8cXVldWU+Ci0KICNpbmNsdWRlICJjbUdyYXBoQWRqYWNlbmN5TGlzdC5oIgogI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uY3h4IGIvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5jeHgKaW5kZXggZjNkZDg0MC4uOGQyNzY5OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5jeHgKKysrIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5jeHgKQEAgLTgsOCArOCwxMSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ29tcHV0ZUxpbmtEZXBlbmRzLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgpAQCAtMjU2LDExICsyNTksMTAgQEAKICAgICAiRklORF9MSUJSQVJZX1VTRV9PUEVOQlNEX1ZFUlNJT05JTkciKTsKIAogICAvLyBBbGxvY2F0ZSBpbnRlcm5hbHMuCi0gIHRoaXMtPk9yZGVyTGlua2VyU2VhcmNoUGF0aCA9IG5ldyBjbU9yZGVyRGlyZWN0b3JpZXMoCisgIHRoaXMtPk9yZGVyTGlua2VyU2VhcmNoUGF0aCA9IGNtOjptYWtlX3VuaXF1ZTxjbU9yZGVyRGlyZWN0b3JpZXM+KAogICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciwgdGFyZ2V0LCAibGlua2VyIHNlYXJjaCBwYXRoIik7Ci0gIHRoaXMtPk9yZGVyUnVudGltZVNlYXJjaFBhdGggPSBuZXcgY21PcmRlckRpcmVjdG9yaWVzKAorICB0aGlzLT5PcmRlclJ1bnRpbWVTZWFyY2hQYXRoID0gY206Om1ha2VfdW5pcXVlPGNtT3JkZXJEaXJlY3Rvcmllcz4oCiAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLCB0YXJnZXQsICJydW50aW1lIHNlYXJjaCBwYXRoIik7Ci0gIHRoaXMtPk9yZGVyRGVwZW5kZW50UlBhdGggPSBudWxscHRyOwogCiAgIC8vIEdldCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IgbGlua2luZyB0aGlzIHRhcmdldC4KICAgdGhpcy0+TGlua0xhbmd1YWdlID0gdGhpcy0+VGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcpOwpAQCAtMzU4LDcgKzM2MCw3IEBACiAgICAgdGhpcy0+U2hhcmVkRGVwZW5kZW5jeU1vZGUgPSBTaGFyZWREZXBNb2RlTGliRGlyOwogICB9IGVsc2UgaWYgKCF0aGlzLT5SUGF0aExpbmtGbGFnLmVtcHR5KCkpIHsKICAgICB0aGlzLT5TaGFyZWREZXBlbmRlbmN5TW9kZSA9IFNoYXJlZERlcE1vZGVEaXI7Ci0gICAgdGhpcy0+T3JkZXJEZXBlbmRlbnRSUGF0aCA9IG5ldyBjbU9yZGVyRGlyZWN0b3JpZXMoCisgICAgdGhpcy0+T3JkZXJEZXBlbmRlbnRSUGF0aCA9IGNtOjptYWtlX3VuaXF1ZTxjbU9yZGVyRGlyZWN0b3JpZXM+KAogICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLCB0YXJnZXQsICJkZXBlbmRlbnQgbGlicmFyeSBwYXRoIik7CiAgIH0KIApAQCAtNDAwLDEyICs0MDIsNyBAQAogICAgICJDTUFLRV9QT0xJQ1lfV0FSTklOR19DTVAwMDYwIik7CiB9CiAKLWNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6fmNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbigpCi17Ci0gIGRlbGV0ZSB0aGlzLT5PcmRlckxpbmtlclNlYXJjaFBhdGg7Ci0gIGRlbGV0ZSB0aGlzLT5PcmRlclJ1bnRpbWVTZWFyY2hQYXRoOwotICBkZWxldGUgdGhpcy0+T3JkZXJEZXBlbmRlbnRSUGF0aDsKLX0KK2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6fmNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbigpID0gZGVmYXVsdDsKIAogdm9pZCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246OkFwcGVuZFZhbHVlcygKICAgc3RkOjpzdHJpbmcmIHJlc3VsdCwgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiYgdmFsdWVzKQpAQCAtNTczLDYgKzU3MCwxNSBAQAogICBjbUdlbmVyYXRvclRhcmdldDo6TGlua0Nsb3N1cmUgY29uc3QqIGxjID0KICAgICB0aGlzLT5UYXJnZXQtPkdldExpbmtDbG9zdXJlKHRoaXMtPkNvbmZpZyk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxpIDogbGMtPkxhbmd1YWdlcykgeworCisgICAgaWYgKGxpID09ICJDVURBIikgeworICAgICAgLy8gVGhlc2UgbmVlZCB0byBnbyBiZWZvcmUgdGhlIG90aGVyIGltcGxpY2l0IGxpbmsgaW5mb3JtYXRpb24KKyAgICAgIC8vIGFzIHRoZXkgY291bGQgcmVxdWlyZSBzeW1ib2xzIGZyb20gdGhvc2Ugb3RoZXIgbGlicmFyeQorICAgICAgLy8gQ3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gQ1VEQSBhcyBpdCBpcyB0aGUgb25seSBsYW5ndWFnZQorICAgICAgLy8gd2UgaGF2ZSBkb2N1bWVudGVkIHJ1bnRpbWUgYmVoYXZpb3IgY29udHJvbHMgZm9yCisgICAgICB0aGlzLT5BZGRSdW50aW1lTGlua0xpYnJhcnkobGkpOworICAgIH0KKwogICAgIC8vIFNraXAgdGhvc2Ugb2YgdGhlIGxpbmtlciBsYW5ndWFnZS4gIFRoZXkgYXJlIGltcGxpY2l0LgogICAgIGlmIChsaSAhPSB0aGlzLT5MaW5rTGFuZ3VhZ2UpIHsKICAgICAgIHRoaXMtPkFkZEltcGxpY2l0TGlua0luZm8obGkpOwpAQCAtNTgwLDYgKzU4NiwzOSBAQAogICB9CiB9CiAKK3ZvaWQgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpBZGRSdW50aW1lTGlua0xpYnJhcnkoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpCit7IC8vIEFkZCB0aGUgbGFuZyBydW50aW1lIGxpYnJhcnkgZmxhZ3MuIFRoaXMgaXMgYWN0aXZhdGVkIGJ5IHRoZSBwcmVzZW5jZQorICAvLyBvZiBhIGRlZmF1bHQgc2VsZWN0aW9uIHdoZXRoZXIgb3Igbm90IGl0IGlzIG92ZXJyaWRkZW4gYnkgYSBwcm9wZXJ0eS4KKyAgc3RkOjpzdHJpbmcgZGVmYXVsdFZhciA9CisgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQiKTsKKyAgY29uc3QgY2hhciogbGFuZ1J1bnRpbWVMaWJyYXJ5RGVmYXVsdCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oZGVmYXVsdFZhcik7CisgIGlmIChsYW5nUnVudGltZUxpYnJhcnlEZWZhdWx0ICYmICpsYW5nUnVudGltZUxpYnJhcnlEZWZhdWx0KSB7CisgICAgY29uc3QgY2hhciogcnVudGltZUxpYnJhcnlWYWx1ZSA9CisgICAgICB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfUlVOVElNRV9MSUJSQVJZIikpOworICAgIGlmICghcnVudGltZUxpYnJhcnlWYWx1ZSkgeworICAgICAgcnVudGltZUxpYnJhcnlWYWx1ZSA9IGxhbmdSdW50aW1lTGlicmFyeURlZmF1bHQ7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgcnVudGltZUxpYnJhcnkgPQorICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCisgICAgICAgIHJ1bnRpbWVMaWJyYXJ5VmFsdWUsIHRoaXMtPlRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgdGhpcy0+Q29uZmlnLAorICAgICAgICB0aGlzLT5UYXJnZXQpKTsKKyAgICBpZiAoIXJ1bnRpbWVMaWJyYXJ5LmVtcHR5KCkpIHsKKyAgICAgIGlmIChjb25zdCBjaGFyKiBydW50aW1lTGlua09wdGlvbnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU18iICsKKyAgICAgICAgICAgIHJ1bnRpbWVMaWJyYXJ5KSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlic1ZlYyA9IGNtRXhwYW5kZWRMaXN0KHJ1bnRpbWVMaW5rT3B0aW9ucyk7CisgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBsaWJzVmVjKSB7CisgICAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0xpYnMsIGkpKSB7CisgICAgICAgICAgICB0aGlzLT5BZGRJdGVtKGksIG51bGxwdHIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCiB2b2lkIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6QWRkSW1wbGljaXRMaW5rSW5mbyhzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykKIHsKICAgLy8gQWRkIGxpYnJhcmllcyBmb3IgdGhpcyBsYW5ndWFnZSB0aGF0IGFyZSBub3QgaW1wbGllZCBieSB0aGUKQEAgLTc0OSwxMCArNzg4LDEwIEBACiAgIGlmICh0aGlzLT5TaGFyZWREZXBlbmRlbmN5TW9kZSA9PSBTaGFyZWREZXBNb2RlTGliRGlyICYmCiAgICAgICAhdGhpcy0+TGlua1dpdGhSdW50aW1lUGF0aCAvKiBBZGRMaWJyYXJ5UnVudGltZUluZm8gYWRkcyBpdCAqLykgewogICAgIC8vIEFkZCB0aGUgaXRlbSB0byB0aGUgbGlua2VyIHNlYXJjaCBwYXRoLgotICAgIG9yZGVyID0gdGhpcy0+T3JkZXJMaW5rZXJTZWFyY2hQYXRoOworICAgIG9yZGVyID0gdGhpcy0+T3JkZXJMaW5rZXJTZWFyY2hQYXRoLmdldCgpOwogICB9IGVsc2UgaWYgKHRoaXMtPlNoYXJlZERlcGVuZGVuY3lNb2RlID09IFNoYXJlZERlcE1vZGVEaXIpIHsKICAgICAvLyBBZGQgdGhlIGl0ZW0gdG8gdGhlIHNlcGFyYXRlIGRlcGVuZGVudCBsaWJyYXJ5IHNlYXJjaCBwYXRoLgotICAgIG9yZGVyID0gdGhpcy0+T3JkZXJEZXBlbmRlbnRSUGF0aDsKKyAgICBvcmRlciA9IHRoaXMtPk9yZGVyRGVwZW5kZW50UlBhdGguZ2V0KCk7CiAgIH0KICAgaWYgKG9yZGVyKSB7CiAgICAgaWYgKHRndCkgewpAQCAtMTE2MSw3ICsxMjAwLDggQEAKICAgICAvLyBDTVAwMDAzIHNvIHB1dCBpdCBpbiBPbGRVc2VyRmxhZ0l0ZW1zLCBpZiBpdCBpcyBub3QgYSAtbAogICAgIC8vIG9yIC1XbCwtbCAoLWZyYW1ld29yayAtcHRocmVhZCksIHRoZW4gYWxsb3cgaXQgd2l0aG91dCBhCiAgICAgLy8gQ01QMDAwMyBhcyAtTCB3aWxsIG5vdCBhZmZlY3QgdGhvc2Ugb3RoZXIgbGlua2VyIGZsYWdzCi0gICAgaWYgKGl0ZW0uVmFsdWUuZmluZCgiLWwiKSA9PSAwIHx8IGl0ZW0uVmFsdWUuZmluZCgiLVdsLC1sIikgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoaXRlbS5WYWx1ZSwgIi1sIikgfHwKKyAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KGl0ZW0uVmFsdWUsICItV2wsLWwiKSkgewogICAgICAgLy8gVGhpcyBpcyBhIGxpbmtlciBvcHRpb24gcHJvdmlkZWQgYnkgdGhlIHVzZXIuCiAgICAgICB0aGlzLT5PbGRVc2VyRmxhZ0l0ZW1zLnB1c2hfYmFjayhpdGVtLlZhbHVlKTsKICAgICB9CkBAIC0xNzU3LDExICsxNzk3LDExIEBACiAgICAgICAvLyBzdXBwb3J0IG9yIGlmIHVzaW5nIHRoZSBsaW5rIHBhdGggYXMgYW4gcnBhdGguCiAgICAgICBpZiAodXNlX2J1aWxkX3JwYXRoKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGQgPSByaTsKLSAgICAgICAgaWYgKCFyb290UGF0aC5lbXB0eSgpICYmIGQuZmluZChyb290UGF0aCkgPT0gMCkgewotICAgICAgICAgIGQgPSBkLnN1YnN0cihyb290UGF0aC5zaXplKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YWdlUGF0aCAmJiAqc3RhZ2VQYXRoICYmIGQuZmluZChzdGFnZVBhdGgpID09IDApIHsKLSAgICAgICAgICBzdGQ6OnN0cmluZyBzdWZmaXggPSBkLnN1YnN0cihzdHJsZW4oc3RhZ2VQYXRoKSk7Ci0gICAgICAgICAgZCA9IGNtU3RyQ2F0KGluc3RhbGxQcmVmaXgsICcvJywgc3VmZml4KTsKKyAgICAgICAgaWYgKCFyb290UGF0aC5lbXB0eSgpICYmIGNtSGFzUHJlZml4KGQsIHJvb3RQYXRoKSkgeworICAgICAgICAgIGQuZXJhc2UoMCwgcm9vdFBhdGguc2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFnZVBhdGggJiYgKnN0YWdlUGF0aCAmJiBjbUhhc1ByZWZpeChkLCBzdGFnZVBhdGgpKSB7CisgICAgICAgICAgZC5lcmFzZSgwLCBzdHJsZW4oc3RhZ2VQYXRoKSk7CisgICAgICAgICAgZCA9IGNtU3RyQ2F0KGluc3RhbGxQcmVmaXgsICcvJywgZCk7CiAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZCk7CiAgICAgICAgIH0gZWxzZSBpZiAodXNlX3JlbGF0aXZlX2J1aWxkX3JwYXRoKSB7CiAgICAgICAgICAgLy8gSWYgZXhwYW5zaW9uIG9mIHRoZSAkT1JJR0lOIHRva2VuIGlzIHN1cHBvcnRlZCBhbmQgcGVybWl0dGVkIHBlcgpAQCAtMTc4OCwxMSArMTgyOCwxMSBAQAogICAgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OklzU3ViRGlyZWN0b3J5KHJpLCB0b3BTb3VyY2VEaXIpICYmCiAgICAgICAgICAgICAhY21TeXN0ZW1Ub29sczo6SXNTdWJEaXJlY3RvcnkocmksIHRvcEJpbmFyeURpcikpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBkID0gcmk7Ci0gICAgICAgICAgaWYgKCFyb290UGF0aC5lbXB0eSgpICYmIGQuZmluZChyb290UGF0aCkgPT0gMCkgewotICAgICAgICAgICAgZCA9IGQuc3Vic3RyKHJvb3RQYXRoLnNpemUoKSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChzdGFnZVBhdGggJiYgKnN0YWdlUGF0aCAmJiBkLmZpbmQoc3RhZ2VQYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBzdWZmaXggPSBkLnN1YnN0cihzdHJsZW4oc3RhZ2VQYXRoKSk7Ci0gICAgICAgICAgICBkID0gY21TdHJDYXQoaW5zdGFsbFByZWZpeCwgJy8nLCBzdWZmaXgpOworICAgICAgICAgIGlmICghcm9vdFBhdGguZW1wdHkoKSAmJiBjbUhhc1ByZWZpeChkLCByb290UGF0aCkpIHsKKyAgICAgICAgICAgIGQuZXJhc2UoMCwgcm9vdFBhdGguc2l6ZSgpKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN0YWdlUGF0aCAmJiAqc3RhZ2VQYXRoICYmIGNtSGFzUHJlZml4KGQsIHN0YWdlUGF0aCkpIHsKKyAgICAgICAgICAgIGQuZXJhc2UoMCwgc3RybGVuKHN0YWdlUGF0aCkpOworICAgICAgICAgICAgZCA9IGNtU3RyQ2F0KGluc3RhbGxQcmVmaXgsICcvJywgZCk7CiAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhkKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKGVtaXR0ZWQuaW5zZXJ0KGQpLnNlY29uZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oCmluZGV4IGVlNzRjY2QuLmU1MGQzNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtMjksNiArMzAsOSBAQAogcHVibGljOgogICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oY29uc3QgY21Db21wdXRlTGlua0luZm9ybWF0aW9uJikgPSBkZWxldGU7CisgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYgb3BlcmF0b3I9KGNvbnN0IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYpID0KKyAgICBkZWxldGU7CiAgIH5jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oKTsKICAgYm9vbCBDb21wdXRlKCk7CiAKQEAgLTE2Niw3ICsxNzAsNyBAQAogICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gU3BsaXRGcmFtZXdvcms7CiAKICAgLy8gTGlua2VyIHNlYXJjaCBwYXRoIGNvbXB1dGF0aW9uLgotICBjbU9yZGVyRGlyZWN0b3JpZXMqIE9yZGVyTGlua2VyU2VhcmNoUGF0aDsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtT3JkZXJEaXJlY3Rvcmllcz4gT3JkZXJMaW5rZXJTZWFyY2hQYXRoOwogICBib29sIEZpbmlzaExpbmtlclNlYXJjaERpcmVjdG9yaWVzKCk7CiAgIHZvaWQgUHJpbnRMaW5rUG9saWN5RGlhZ25vc2lzKHN0ZDo6b3N0cmVhbSYpOwogCkBAIC0xNzQsNiArMTc4LDcgQEAKICAgdm9pZCBMb2FkSW1wbGljaXRMaW5rSW5mbygpOwogICB2b2lkIEFkZEltcGxpY2l0TGlua0luZm8oKTsKICAgdm9pZCBBZGRJbXBsaWNpdExpbmtJbmZvKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKTsKKyAgdm9pZCBBZGRSdW50aW1lTGlua0xpYnJhcnkoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gSW1wbGljaXRMaW5rRGlyczsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEltcGxpY2l0TGlua0xpYnM7CiAKQEAgLTE4Niw5ICsxOTEsOSBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gT2xkVXNlckZsYWdJdGVtczsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IENNUDAwNjBXYXJuSXRlbXM7CiAgIC8vIERlcGVuZGVudCBsaWJyYXJ5IHBhdGggY29tcHV0YXRpb24uCi0gIGNtT3JkZXJEaXJlY3RvcmllcyogT3JkZXJEZXBlbmRlbnRSUGF0aDsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtT3JkZXJEaXJlY3Rvcmllcz4gT3JkZXJEZXBlbmRlbnRSUGF0aDsKICAgLy8gUnVudGltZSBwYXRoIGNvbXB1dGF0aW9uLgotICBjbU9yZGVyRGlyZWN0b3JpZXMqIE9yZGVyUnVudGltZVNlYXJjaFBhdGg7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU9yZGVyRGlyZWN0b3JpZXM+IE9yZGVyUnVudGltZVNlYXJjaFBhdGg7CiAKICAgYm9vbCBPbGRMaW5rRGlyTW9kZTsKICAgYm9vbCBPcGVuQlNEOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZVRhcmdldERlcGVuZHMuY3h4IGIvU291cmNlL2NtQ29tcHV0ZVRhcmdldERlcGVuZHMuY3h4CmluZGV4IDE2MmJhYjIuLjQxZjUzNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmN4eAorKysgYi9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5jeHgKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCkBAIC0xNTAsNiArMTUxLDcgQEAKICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogZGVwID0gdGhpcy0+VGFyZ2V0c1tuaV07CiAgICAgYXV0byBkaSA9IGRlcHMuaW5zZXJ0KGRlcCkuZmlyc3Q7CiAgICAgZGktPlNldFR5cGUobmkuSXNTdHJvbmcoKSk7CisgICAgZGktPlNldENyb3NzKG5pLklzQ3Jvc3MoKSk7CiAgICAgZGktPlNldEJhY2t0cmFjZShuaS5HZXRCYWNrdHJhY2UoKSk7CiAgIH0KIH0KQEAgLTE1NywxNSArMTU5LDEyIEBACiB2b2lkIGNtQ29tcHV0ZVRhcmdldERlcGVuZHM6OkNvbGxlY3RUYXJnZXRzKCkKIHsKICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0cyBmcm9tIGFsbCBnZW5lcmF0b3JzLgotICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4gY29uc3QmIGxnZW5zID0KLSAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gOiBsZ2VucykgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPQotICAgICAgbGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRpIDogdGFyZ2V0cykgeworICBhdXRvIGNvbnN0JiBsZ2VucyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7CisgIGZvciAoY29uc3QgYXV0byYgbGdlbiA6IGxnZW5zKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0aSA6IGxnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pih0aGlzLT5UYXJnZXRzLnNpemUoKSk7Ci0gICAgICB0aGlzLT5UYXJnZXRJbmRleFt0aV0gPSBpbmRleDsKLSAgICAgIHRoaXMtPlRhcmdldHMucHVzaF9iYWNrKHRpKTsKKyAgICAgIHRoaXMtPlRhcmdldEluZGV4W3RpLmdldCgpXSA9IGluZGV4OworICAgICAgdGhpcy0+VGFyZ2V0cy5wdXNoX2JhY2sodGkuZ2V0KCkpOwogICAgIH0KICAgfQogfQpAQCAtMTk5LDYgKzE5OCwyMCBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlncyA9CiAgICAgICBkZXBlbmRlci0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdCA6IGNvbmZpZ3MpIHsKKyAgICAgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0gZGVwZW5kZXItPkdldExpbmtJbXBsZW1lbnRhdGlvbihpdCk7CisKKyAgICAgIC8vIEEgdGFyZ2V0IHNob3VsZCBub3QgZGVwZW5kIG9uIGl0c2VsZi4KKyAgICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKyAgICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIHRydWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOworICAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CisgICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgbGlicmFyeSB0d2ljZSBmb3IgdGhpcyB0YXJnZXQuCisgICAgICAgIGlmIChlbWl0dGVkLmluc2VydChsaWIpLnNlY29uZCkgeworICAgICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgbGliLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgdGhpcy0+QWRkSW50ZXJmYWNlRGVwZW5kcyhkZXBlbmRlcl9pbmRleCwgbGliLCBpdCwgZW1pdHRlZCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gQWRkIGRlcGVuZGVuY2llcyBvbiBvYmplY3QgbGlicmFyaWVzIG5vdCBvdGhlcndpc2UgaGFuZGxlZCBhYm92ZS4KICAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IG9iamVjdEZpbGVzOwogICAgICAgZGVwZW5kZXItPkdldEV4dGVybmFsT2JqZWN0cyhvYmplY3RGaWxlcywgaXQpOwogICAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG8gOiBvYmplY3RGaWxlcykgewpAQCAtMjE5LDIyICsyMzIsMTAgQEAKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29uc3RfY2FzdDxjbUdlbmVyYXRvclRhcmdldCo+KGRlcGVuZGVyKS0+VGFyZ2V0LT5BZGRVdGlsaXR5KAotICAgICAgICAgICAgICBvYmpMaWIpOworICAgICAgICAgICAgICBvYmpMaWIsIGZhbHNlKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLQotICAgICAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGltcGwgPSBkZXBlbmRlci0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGl0KTsKLQotICAgICAgLy8gQSB0YXJnZXQgc2hvdWxkIG5vdCBkZXBlbmQgb24gaXRzZWxmLgotICAgICAgZW1pdHRlZC5pbnNlcnQoY21MaW5rSXRlbShkZXBlbmRlciwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7Ci0gICAgICBmb3IgKGNtTGlua0ltcGxJdGVtIGNvbnN0JiBsaWIgOiBpbXBsLT5MaWJyYXJpZXMpIHsKLSAgICAgICAgLy8gRG9uJ3QgZW1pdCB0aGUgc2FtZSBsaWJyYXJ5IHR3aWNlIGZvciB0aGlzIHRhcmdldC4KLSAgICAgICAgaWYgKGVtaXR0ZWQuaW5zZXJ0KGxpYikuc2Vjb25kKSB7Ci0gICAgICAgICAgdGhpcy0+QWRkVGFyZ2V0RGVwZW5kKGRlcGVuZGVyX2luZGV4LCBsaWIsIHRydWUpOwotICAgICAgICAgIHRoaXMtPkFkZEludGVyZmFjZURlcGVuZHMoZGVwZW5kZXJfaW5kZXgsIGxpYiwgaXQsIGVtaXR0ZWQpOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgfQogICB9CiAKQEAgLTI0MywxMSArMjQ0LDEyIEBACiAgICAgc3RkOjpzZXQ8Y21MaW5rSXRlbT4gY29uc3QmIHR1dGlscyA9IGRlcGVuZGVyLT5HZXRVdGlsaXR5SXRlbXMoKTsKICAgICBzdGQ6OnNldDxjbUxpbmtJdGVtPiBlbWl0dGVkOwogICAgIC8vIEEgdGFyZ2V0IHNob3VsZCBub3QgZGVwZW5kIG9uIGl0c2VsZi4KLSAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKyAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCBmYWxzZSwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7CisgICAgZW1pdHRlZC5pbnNlcnQoY21MaW5rSXRlbShkZXBlbmRlciwgdHJ1ZSwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7CiAgICAgZm9yIChjbUxpbmtJdGVtIGNvbnN0JiBsaXRlbSA6IHR1dGlscykgewogICAgICAgLy8gRG9uJ3QgZW1pdCB0aGUgc2FtZSB1dGlsaXR5IHR3aWNlIGZvciB0aGlzIHRhcmdldC4KICAgICAgIGlmIChlbWl0dGVkLmluc2VydChsaXRlbSkuc2Vjb25kKSB7Ci0gICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgbGl0ZW0sIGZhbHNlKTsKKyAgICAgICAgdGhpcy0+QWRkVGFyZ2V0RGVwZW5kKGRlcGVuZGVyX2luZGV4LCBsaXRlbSwgZmFsc2UsIGxpdGVtLkNyb3NzKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI2OSw3ICsyNzEsNyBAQAogICAgICAgICAvLyBjb2RlIGluIHRoZSBwcm9qZWN0IHRoYXQgY2F1c2VkIHRoaXMgZGVwZW5kZW5jeSB0byBiZSBhZGRlZC4KICAgICAgICAgY21MaW5rSXRlbSBsaWJCVCA9IGxpYjsKICAgICAgICAgbGliQlQuQmFja3RyYWNlID0gZGVwZW5kZWVfYmFja3RyYWNlOwotICAgICAgICB0aGlzLT5BZGRUYXJnZXREZXBlbmQoZGVwZW5kZXJfaW5kZXgsIGxpYkJULCB0cnVlKTsKKyAgICAgICAgdGhpcy0+QWRkVGFyZ2V0RGVwZW5kKGRlcGVuZGVyX2luZGV4LCBsaWJCVCwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICB0aGlzLT5BZGRJbnRlcmZhY2VEZXBlbmRzKGRlcGVuZGVyX2luZGV4LCBsaWJCVCwgY29uZmlnLCBlbWl0dGVkKTsKICAgICAgIH0KICAgICB9CkBAIC0yOTIsNyArMjk0LDggQEAKIAogICBpZiAoZGVwZW5kZWUpIHsKICAgICAvLyBBIHRhcmdldCBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHNlbGYuCi0gICAgZW1pdHRlZC5pbnNlcnQoY21MaW5rSXRlbShkZXBlbmRlciwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7CisgICAgZW1pdHRlZC5pbnNlcnQoY21MaW5rSXRlbShkZXBlbmRlciwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOworICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIHRydWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOwogICAgIHRoaXMtPkFkZEludGVyZmFjZURlcGVuZHMoZGVwZW5kZXJfaW5kZXgsIGRlcGVuZGVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZWVfbmFtZS5CYWNrdHJhY2UsIGNvbmZpZywgZW1pdHRlZCk7CiAgIH0KQEAgLTMwMCw3ICszMDMsNyBAQAogCiB2b2lkIGNtQ29tcHV0ZVRhcmdldERlcGVuZHM6OkFkZFRhcmdldERlcGVuZChpbnQgZGVwZW5kZXJfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsaW5raW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsaW5raW5nLCBib29sIGNyb3NzKQogewogICAvLyBHZXQgdGhlIGRlcGVuZGVyLgogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogZGVwZW5kZXIgPSB0aGlzLT5UYXJnZXRzW2RlcGVuZGVyX2luZGV4XTsKQEAgLTM0NSwxMyArMzQ4LDEzIEBACiAKICAgaWYgKGRlcGVuZGVlKSB7CiAgICAgdGhpcy0+QWRkVGFyZ2V0RGVwZW5kKGRlcGVuZGVyX2luZGV4LCBkZXBlbmRlZSwgZGVwZW5kZWVfbmFtZS5CYWNrdHJhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5raW5nLCBjcm9zcyk7CiAgIH0KIH0KIAogdm9pZCBjbUNvbXB1dGVUYXJnZXREZXBlbmRzOjpBZGRUYXJnZXREZXBlbmQoCiAgIGludCBkZXBlbmRlcl9pbmRleCwgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGRlcGVuZGVlLAotICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBkZXBlbmRlZV9iYWNrdHJhY2UsIGJvb2wgbGlua2luZykKKyAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgZGVwZW5kZWVfYmFja3RyYWNlLCBib29sIGxpbmtpbmcsIGJvb2wgY3Jvc3MpCiB7CiAgIGlmIChkZXBlbmRlZS0+SXNJbXBvcnRlZCgpIHx8CiAgICAgICBkZXBlbmRlZS0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKQEAgLTM2MSw3ICszNjQsNyBAQAogICAgIGZvciAoY21MaW5rSXRlbSBjb25zdCYgaSA6IHV0aWxzKSB7CiAgICAgICBpZiAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRyYW5zaXRpdmVfZGVwZW5kZWUgPSBpLlRhcmdldCkgewogICAgICAgICB0aGlzLT5BZGRUYXJnZXREZXBlbmQoZGVwZW5kZXJfaW5kZXgsIHRyYW5zaXRpdmVfZGVwZW5kZWUsIGkuQmFja3RyYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGkuQ3Jvc3MpOwogICAgICAgfQogICAgIH0KICAgfSBlbHNlIHsKQEAgLTM3Myw3ICszNzYsNyBAQAogCiAgICAgLy8gQWRkIHRoaXMgZW50cnkgdG8gdGhlIGRlcGVuZGVuY3kgZ3JhcGguCiAgICAgdGhpcy0+SW5pdGlhbEdyYXBoW2RlcGVuZGVyX2luZGV4XS5lbXBsYWNlX2JhY2soZGVwZW5kZWVfaW5kZXgsICFsaW5raW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVlX2JhY2t0cmFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MsIGRlcGVuZGVlX2JhY2t0cmFjZSk7CiAgIH0KIH0KIApAQCAtNTA3LDcgKzUxMCw4IEBACiAgICAgZm9yIChjbUdyYXBoRWRnZSBjb25zdCYgZWRnZSA6IGVsKSB7CiAgICAgICBpbnQgaiA9IGVkZ2U7CiAgICAgICBpZiAoY21hcFtqXSA9PSBjICYmIGVkZ2UuSXNTdHJvbmcoKSkgewotICAgICAgICB0aGlzLT5GaW5hbEdyYXBoW2ldLmVtcGxhY2VfYmFjayhqLCB0cnVlLCBlZGdlLkdldEJhY2t0cmFjZSgpKTsKKyAgICAgICAgdGhpcy0+RmluYWxHcmFwaFtpXS5lbXBsYWNlX2JhY2soaiwgdHJ1ZSwgZWRnZS5Jc0Nyb3NzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuR2V0QmFja3RyYWNlKCkpOwogICAgICAgICBpZiAoIXRoaXMtPkludHJhQ29tcG9uZW50KGNtYXAsIGMsIGosIGhlYWQsIGVtaXR0ZWQsIHZpc2l0ZWQpKSB7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MTYsNyArNTIwLDggQEAKIAogICAgIC8vIFByZXBlbmQgdG8gYSBsaW5lYXIgbGlua2VkLWxpc3Qgb2YgaW50cmEtY29tcG9uZW50IGVkZ2VzLgogICAgIGlmICgqaGVhZCA+PSAwKSB7Ci0gICAgICB0aGlzLT5GaW5hbEdyYXBoW2ldLmVtcGxhY2VfYmFjaygqaGVhZCwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CisgICAgICB0aGlzLT5GaW5hbEdyYXBoW2ldLmVtcGxhY2VfYmFjaygqaGVhZCwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgdGhpcy0+Q29tcG9uZW50VGFpbFtjXSA9IGk7CiAgICAgfQpAQCAtNTY2LDcgKzU3MSw4IEBACiAgICAgICBpbnQgZGVwZW5kZWVfY29tcG9uZW50ID0gbmk7CiAgICAgICBpbnQgZGVwZW5kZWVfY29tcG9uZW50X2hlYWQgPSB0aGlzLT5Db21wb25lbnRIZWFkW2RlcGVuZGVlX2NvbXBvbmVudF07CiAgICAgICB0aGlzLT5GaW5hbEdyYXBoW2RlcGVuZGVyX2NvbXBvbmVudF90YWlsXS5lbXBsYWNlX2JhY2soCi0gICAgICAgIGRlcGVuZGVlX2NvbXBvbmVudF9oZWFkLCBuaS5Jc1N0cm9uZygpLCBuaS5HZXRCYWNrdHJhY2UoKSk7CisgICAgICAgIGRlcGVuZGVlX2NvbXBvbmVudF9oZWFkLCBuaS5Jc1N0cm9uZygpLCBuaS5Jc0Nyb3NzKCksCisgICAgICAgIG5pLkdldEJhY2t0cmFjZSgpKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5oIGIvU291cmNlL2NtQ29tcHV0ZVRhcmdldERlcGVuZHMuaAppbmRleCBkODA2MGFlLi5lMGQ2MjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5oCisrKyBiL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmgKQEAgLTQ2LDEwICs0NiwxMCBAQAogICB2b2lkIENvbGxlY3REZXBlbmRzKCk7CiAgIHZvaWQgQ29sbGVjdFRhcmdldERlcGVuZHMoaW50IGRlcGVuZGVyX2luZGV4KTsKICAgdm9pZCBBZGRUYXJnZXREZXBlbmQoaW50IGRlcGVuZGVyX2luZGV4LCBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGxpbmtpbmcpOworICAgICAgICAgICAgICAgICAgICAgICBib29sIGxpbmtpbmcsIGJvb2wgY3Jvc3MpOwogICB2b2lkIEFkZFRhcmdldERlcGVuZChpbnQgZGVwZW5kZXJfaW5kZXgsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBkZXBlbmRlZSwKICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgZGVwZW5kZWVfYmFja3RyYWNlLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGxpbmtpbmcpOworICAgICAgICAgICAgICAgICAgICAgICBib29sIGxpbmtpbmcsIGJvb2wgY3Jvc3MpOwogICBib29sIENvbXB1dGVGaW5hbERlcGVuZHMoY21Db21wdXRlQ29tcG9uZW50R3JhcGggY29uc3QmIGNjZyk7CiAgIHZvaWQgQWRkSW50ZXJmYWNlRGVwZW5kcyhpbnQgZGVwZW5kZXJfaW5kZXgsIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29uZGl0aW9uRXZhbHVhdG9yLmN4eCBiL1NvdXJjZS9jbUNvbmRpdGlvbkV2YWx1YXRvci5jeHgKaW5kZXggMDAzZTYwZC4uYmYxMTAyMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29uZGl0aW9uRXZhbHVhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Db25kaXRpb25FdmFsdWF0b3IuY3h4CkBAIC05LDYgKzksOCBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgpAQCAtMzk2LDcgKzM5OCw3IEBACiAgICAgICAgIC8vIGNvcHkgdG8gdGhlIGxpc3Qgc3RydWN0dXJlCiAgICAgICAgIGF1dG8gYXJnUDEgPSBhcmc7CiAgICAgICAgIGFyZ1AxKys7Ci0gICAgICAgIGNtQXBwZW5kKG5ld0FyZ3MyLCBhcmdQMSwgYXJnQ2xvc2UpOworICAgICAgICBjbTo6YXBwZW5kKG5ld0FyZ3MyLCBhcmdQMSwgYXJnQ2xvc2UpOwogICAgICAgICBuZXdBcmdzMi5wb3BfYmFjaygpOwogICAgICAgICAvLyBub3cgcmVjdXJzaXZlbHkgaW52b2tlIElzVHJ1ZSB0byBoYW5kbGUgdGhlIHZhbHVlcyBpbnNpZGUgdGhlCiAgICAgICAgIC8vIHBhcmVudGhldGljYWwgZXhwcmVzc2lvbgpAQCAtNDkyLDEyICs0OTQsMTIgQEAKICAgICAgIGlmICh0aGlzLT5Jc0tleXdvcmQoa2V5REVGSU5FRCwgKmFyZykgJiYgYXJnUDEgIT0gbmV3QXJncy5lbmQoKSkgewogICAgICAgICBzaXplX3QgYXJnUDFsZW4gPSBhcmdQMS0+R2V0VmFsdWUoKS5zaXplKCk7CiAgICAgICAgIGJvb2wgYmRlZiA9IGZhbHNlOwotICAgICAgICBpZiAoYXJnUDFsZW4gPiA0ICYmIGFyZ1AxLT5HZXRWYWx1ZSgpLnN1YnN0cigwLCA0KSA9PSAiRU5WeyIgJiYKKyAgICAgICAgaWYgKGFyZ1AxbGVuID4gNCAmJiBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnUDEtPkdldFZhbHVlKCksICJFTlZ7IikgJiYKICAgICAgICAgICAgIGFyZ1AxLT5HZXRWYWx1ZSgpLm9wZXJhdG9yW10oYXJnUDFsZW4gLSAxKSA9PSAnfScpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBlbnYgPSBhcmdQMS0+R2V0VmFsdWUoKS5zdWJzdHIoNCwgYXJnUDFsZW4gLSA1KTsKICAgICAgICAgICBiZGVmID0gY21TeXN0ZW1Ub29sczo6SGFzRW52KGVudik7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJnUDFsZW4gPiA2ICYmCi0gICAgICAgICAgICAgICAgICAgYXJnUDEtPkdldFZhbHVlKCkuc3Vic3RyKDAsIDYpID09ICJDQUNIRXsiICYmCisgICAgICAgICAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KGFyZ1AxLT5HZXRWYWx1ZSgpLCAiQ0FDSEV7IikgJiYKICAgICAgICAgICAgICAgICAgICBhcmdQMS0+R2V0VmFsdWUoKS5vcGVyYXRvcltdKGFyZ1AxbGVuIC0gMSkgPT0gJ30nKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgY2FjaGUgPSBhcmdQMS0+R2V0VmFsdWUoKS5zdWJzdHIoNiwgYXJnUDFsZW4gLSA3KTsKICAgICAgICAgICBiZGVmID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbnZlcnRNU0J1aWxkWE1MVG9KU09OLnB5IGIvU291cmNlL2NtQ29udmVydE1TQnVpbGRYTUxUb0pTT04ucHkKaW5kZXggMDIwNzRiYS4uMmJlMzc4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29udmVydE1TQnVpbGRYTUxUb0pTT04ucHkKKysrIGIvU291cmNlL2NtQ29udmVydE1TQnVpbGRYTUxUb0pTT04ucHkKQEAgLTM1LDEyICszNSwxNCBAQAogICAgIHJldHVybiB2YWx1ZXMKIAogCi1kZWYgcmVhZF9tc2J1aWxkX3htbChwYXRoLCB2YWx1ZXM9e30pOgorZGVmIHJlYWRfbXNidWlsZF94bWwocGF0aCwgdmFsdWVzPU5vbmUpOgogICAgICIiIlJlYWRzIHRoZSBNUyBCdWlsZCBYTUwgZmlsZSBhdCB0aGUgcGF0aCBhbmQgcmV0dXJucyBpdHMgY29udGVudHMuCiAKICAgICBLZXl3b3JkIGFyZ3VtZW50czoKICAgICB2YWx1ZXMgLS0gVGhlIG1hcCB0byBhcHBlbmQgdGhlIGNvbnRlbnRzIHRvIChkZWZhdWx0IHt9KQogICAgICIiIgorICAgIGlmIHZhbHVlcyBpcyBOb25lOgorICAgICAgICB2YWx1ZXMgPSB7fQogCiAgICAgIyBBdHRlbXB0IHRvIHJlYWQgdGhlIGZpbGUgY29udGVudHMKICAgICB0cnk6CkBAIC03NiwxMiArNzgsMTUgQEAKICAgICByZXR1cm4gdmFsdWVzCiAKIAotZGVmIHJlYWRfbXNidWlsZF9qc29uKHBhdGgsIHZhbHVlcz1bXSk6CitkZWYgcmVhZF9tc2J1aWxkX2pzb24ocGF0aCwgdmFsdWVzPU5vbmUpOgogICAgICIiIlJlYWRzIHRoZSBNUyBCdWlsZCBKU09OIGZpbGUgYXQgdGhlIHBhdGggYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzLgogCiAgICAgS2V5d29yZCBhcmd1bWVudHM6CiAgICAgdmFsdWVzIC0tIFRoZSBsaXN0IHRvIGFwcGVuZCB0aGUgY29udGVudHMgdG8gKGRlZmF1bHQgW10pCiAgICAgIiIiCisgICAgaWYgdmFsdWVzIGlzIE5vbmU6CisgICAgICAgIHZhbHVlcyA9IFtdCisKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgIGxvZ2dpbmcuaW5mbygnQ291bGQgbm90IGZpbmQgTVMgQnVpbGQgSlNPTiBmaWxlIGF0ICVzJywgcGF0aCkKICAgICAgICAgcmV0dXJuIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuY3h4IGIvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuY3h4CmluZGV4IDU3MTFjYWUuLjljMjZmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmN4eAorKysgYi9Tb3VyY2UvY21Db3JlVHJ5Q29tcGlsZS5jeHgKQEAgLTUxLDYgKzUxLDggQEAKIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUID0KICAgIkNNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCI7CiBzdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX09TWF9TWVNST09UID0gIkNNQUtFX09TWF9TWVNST09UIjsKK3N0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUyA9CisgICJDTUFLRV9BUFBMRV9BUkNIX1NZU1JPT1RTIjsKIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSA9CiAgICJDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIjsKIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVCA9ICJDTUFLRV9TWVNST09UIjsKQEAgLTk5LDI5ICsxMDEsMjMgQEAKICAgdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSA9IHRydWU7CiAKICAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU7Ci0gIGNvbnN0IGNoYXIqIHR0ID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUiKTsKLSAgaWYgKCFpc1RyeVJ1biAmJiB0dCAmJiAqdHQpIHsKLSAgICBpZiAoc3RyY21wKHR0LCBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpKSA9PQotICAgICAgICAwKSB7CisgIGNvbnN0IHN0ZDo6c3RyaW5nKiB0dCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUiKTsKKyAgaWYgKCFpc1RyeVJ1biAmJiB0dCAmJiAhdHQtPmVtcHR5KCkpIHsKKyAgICBpZiAoKnR0ID09IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkpIHsKICAgICAgIHRhcmdldFR5cGUgPSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAodHQsCi0gICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoKnR0ID09CisgICAgICAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSkgewogICAgICAgdGFyZ2V0VHlwZSA9IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk7CiAgICAgfSBlbHNlIHsKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICAgc3RkOjpzdHJpbmcoIkludmFsaWQgdmFsdWUgJyIpICsgdHQgKwotICAgICAgICAgICInIGZvciAiCi0gICAgICAgICAgIkNNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFLiAgT25seSAiCi0gICAgICAgICAgIiciICsKLSAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpICsKLSAgICAgICAgICAiJyBhbmQgIgotICAgICAgICAgICInIiArCi0gICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSkgKwotICAgICAgICAgICInICIKLSAgICAgICAgICAiYXJlIGFsbG93ZWQuIik7CisgICAgICAgIGNtU3RyQ2F0KCJJbnZhbGlkIHZhbHVlICciLCAqdHQsCisgICAgICAgICAgICAgICAgICInIGZvciBDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRS4gIE9ubHkgJyIsCisgICAgICAgICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSksCisgICAgICAgICAgICAgICAgICInIGFuZCAnIiwKKyAgICAgICAgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSksCisgICAgICAgICAgICAgICAgICInIGFyZSBhbGxvd2VkLiIpKTsKICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgIH0KQEAgLTI5NCwxMiArMjkwLDEwIEBACiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICAgICAgICAgIk9ubHkgbGlicmFyaWVzIG1heSBiZSB1c2VkIGFzIHRyeV9jb21waWxlIG9yIHRyeV9ydW4gSU1QT1JURUQgIgotICAgICAgICAgICAgICAiTElOS19MSUJSQVJJRVMuICBHb3QgIiArCi0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcodGd0LT5HZXROYW1lKCkpICsKLSAgICAgICAgICAgICAgICAiIG9mICIKLSAgICAgICAgICAgICAgICAidHlwZSAiICsKLSAgICAgICAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0Z3QtPkdldFR5cGUoKSkgKyAiLiIpOworICAgICAgICAgICAgICBjbVN0ckNhdCgiT25seSBsaWJyYXJpZXMgbWF5IGJlIHVzZWQgYXMgdHJ5X2NvbXBpbGUgb3IgdHJ5X3J1biAiCisgICAgICAgICAgICAgICAgICAgICAgICJJTVBPUlRFRCBMSU5LX0xJQlJBUklFUy4gIEdvdCAiLAorICAgICAgICAgICAgICAgICAgICAgICB0Z3QtPkdldE5hbWUoKSwgIiBvZiB0eXBlICIsCisgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRndC0+R2V0VHlwZSgpKSwgIi4iKSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRndC0+SXNJbXBvcnRlZCgpKSB7CkBAIC03MjMsNiArNzE3LDcgQEAKICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9PU1hfQVJDSElURUNUVVJFUyk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUKTsKICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9PU1hfU1lTUk9PVCk7CisgICAgICB2YXJzLmluc2VydChrQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUyk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfU1lTUk9PVCk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfU1lTUk9PVF9DT01QSUxFKTsKQEAgLTEwNDIsNyArMTAzNyw5IEBACiAgICAgICBpZiAoZGVsZXRlZEZpbGVzLmluc2VydChmaWxlTmFtZSkuc2Vjb25kKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGZ1bGxQYXRoID0KICAgICAgICAgICBzdGQ6OnN0cmluZyhiaW5EaXIpLmFwcGVuZCgiLyIpLmFwcGVuZChmaWxlTmFtZSk7Ci0gICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZnVsbFBhdGgpKSB7CisgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKGZ1bGxQYXRoKSkgeworICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZnVsbFBhdGgpOworICAgICAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShmdWxsUGF0aCkpIHsKICAgICAgICAgICB0aGlzLT5DbGVhbnVwRmlsZXMoZnVsbFBhdGgpOwogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUFEaXJlY3RvcnkoZnVsbFBhdGgpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eAppbmRleCAwOWQyNjliLi4wZGQ4NzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eApAQCAtNCwyNyArNCwyMyBAQAogCiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgotI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLWNtQ3VzdG9tQ29tbWFuZDo6Y21DdXN0b21Db21tYW5kKGNtTWFrZWZpbGUgY29uc3QqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHMsCitjbUN1c3RvbUNvbW1hbmQ6OmNtQ3VzdG9tQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBieXByb2R1Y3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0LCBjb25zdCBjaGFyKiBjb21tZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSkKICAgOiBPdXRwdXRzKHN0ZDo6bW92ZShvdXRwdXRzKSkKICAgLCBCeXByb2R1Y3RzKHN0ZDo6bW92ZShieXByb2R1Y3RzKSkKICAgLCBEZXBlbmRzKHN0ZDo6bW92ZShkZXBlbmRzKSkKICAgLCBDb21tYW5kTGluZXMoc3RkOjptb3ZlKGNvbW1hbmRMaW5lcykpCisgICwgQmFja3RyYWNlKHN0ZDo6bW92ZShsZmJ0KSkKICAgLCBDb21tZW50KGNvbW1lbnQgPyBjb21tZW50IDogIiIpCiAgICwgV29ya2luZ0RpcmVjdG9yeSh3b3JraW5nRGlyZWN0b3J5ID8gd29ya2luZ0RpcmVjdG9yeSA6ICIiKQogICAsIEhhdmVDb21tZW50KGNvbW1lbnQgIT0gbnVsbHB0cikKIHsKLSAgaWYgKG1mKSB7Ci0gICAgdGhpcy0+QmFja3RyYWNlID0gbWYtPkdldEJhY2t0cmFjZSgpOwotICB9CiB9CiAKIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY21DdXN0b21Db21tYW5kOjpHZXRPdXRwdXRzKCkgY29uc3QKQEAgLTU1LDEyICs1MSwxMiBAQAogCiB2b2lkIGNtQ3VzdG9tQ29tbWFuZDo6QXBwZW5kQ29tbWFuZHMoY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcykKIHsKLSAgY21BcHBlbmQodGhpcy0+Q29tbWFuZExpbmVzLCBjb21tYW5kTGluZXMpOworICBjbTo6YXBwZW5kKHRoaXMtPkNvbW1hbmRMaW5lcywgY29tbWFuZExpbmVzKTsKIH0KIAogdm9pZCBjbUN1c3RvbUNvbW1hbmQ6OkFwcGVuZERlcGVuZHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzKQogewotICBjbUFwcGVuZCh0aGlzLT5EZXBlbmRzLCBkZXBlbmRzKTsKKyAgY206OmFwcGVuZCh0aGlzLT5EZXBlbmRzLCBkZXBlbmRzKTsKIH0KIAogYm9vbCBjbUN1c3RvbUNvbW1hbmQ6OkdldEVzY2FwZU9sZFN0eWxlKCkgY29uc3QKQEAgLTEwMCw3ICs5Niw3IEBACiAKIHZvaWQgY21DdXN0b21Db21tYW5kOjpBcHBlbmRJbXBsaWNpdERlcGVuZHMoY21JbXBsaWNpdERlcGVuZHNMaXN0IGNvbnN0JiBsKQogewotICBjbUFwcGVuZCh0aGlzLT5JbXBsaWNpdERlcGVuZHMsIGwpOworICBjbTo6YXBwZW5kKHRoaXMtPkltcGxpY2l0RGVwZW5kcywgbCk7CiB9CiAKIGJvb2wgY21DdXN0b21Db21tYW5kOjpHZXRVc2VzVGVybWluYWwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5oIGIvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5oCmluZGV4IDQ2ODlhY2UuLmQzMDBmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmQuaAorKysgYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmgKQEAgLTEyLDggKzEyLDYgQEAKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogCi1jbGFzcyBjbU1ha2VmaWxlOwotCiBjbGFzcyBjbUltcGxpY2l0RGVwZW5kc0xpc3QKICAgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4+CiB7CkBAIC0yOCwxMSArMjYsMTEgQEAKIHsKIHB1YmxpYzoKICAgLyoqIE1haW4gY29uc3RydWN0b3Igc3BlY2lmaWVzIGFsbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbW1hbmQuICAqLwotICBjbUN1c3RvbUNvbW1hbmQoY21NYWtlZmlsZSBjb25zdCogbWYsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdXRwdXRzLAorICBjbUN1c3RvbUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHMsCiAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYnlwcm9kdWN0cywKICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzLAotICAgICAgICAgICAgICAgICAgY21DdXN0b21Db21tYW5kTGluZXMgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAotICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSk7CisgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnkpOwogCiAgIC8qKiBHZXQgdGhlIG91dHB1dCBmaWxlIHByb2R1Y2VkIGJ5IHRoZSBjb21tYW5kLiAgKi8KICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBHZXRPdXRwdXRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CmluZGV4IGMxZjQxMmQuLjI0MzJkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CkBAIC02LDcgKzYsOCBAQAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kTGluZXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKQEAgLTI5LDEwICszMCwxMSBAQAogICAgIGZvciAoc3RkOjpzdHJpbmcmIGl0IDogcmVzdWx0KSB7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhpdCk7CiAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgoaXQpKSB7Ci0gICAgICAgIGl0ID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpdCk7CisgICAgICAgIGl0ID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICAgICBpdCwgbGctPkdldE1ha2VmaWxlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CiAgICAgICB9CiAgICAgfQotICAgIGNtQXBwZW5kKG91dHB1dCwgcmVzdWx0KTsKKyAgICBjbTo6YXBwZW5kKG91dHB1dCwgcmVzdWx0KTsKICAgfQogfQogfQpAQCAtNTYsNyArNTgsNyBAQAogICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPSBnZS5QYXJzZShjbGFyZyk7CiAgICAgICBzdGQ6OnN0cmluZyBwYXJzZWRfYXJnID0gY2dlLT5FdmFsdWF0ZSh0aGlzLT5MRywgdGhpcy0+Q29uZmlnKTsKICAgICAgIGlmICh0aGlzLT5DQy5HZXRDb21tYW5kRXhwYW5kTGlzdHMoKSkgewotICAgICAgICBjbUFwcGVuZChhcmd2LCBjbUV4cGFuZGVkTGlzdChwYXJzZWRfYXJnKSk7CisgICAgICAgIGNtOjphcHBlbmQoYXJndiwgY21FeHBhbmRlZExpc3QocGFyc2VkX2FyZykpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgYXJndi5wdXNoX2JhY2soc3RkOjptb3ZlKHBhcnNlZF9hcmcpKTsKICAgICAgIH0KQEAgLTEzNyw3ICsxMzksNyBAQAogICAgICAgKHRhcmdldC0+SXNJbXBvcnRlZCgpIHx8CiAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IiKSB8fAogICAgICAgICF0aGlzLT5MRy0+R2V0TWFrZWZpbGUoKS0+SXNPbigiQ01BS0VfQ1JPU1NDT01QSUxJTkciKSkpIHsKLSAgICByZXR1cm4gdGFyZ2V0LT5HZXRMb2NhdGlvbih0aGlzLT5Db25maWcpOworICAgIHJldHVybiB0YXJnZXQtPkdldExvY2F0aW9uKHRoaXMtPkNvbmZpZykuY19zdHIoKTsKICAgfQogICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTIwMSw3ICsyMDMsOSBAQAogICAgICAgaWYgKHRoaXMtPk9sZFN0eWxlKSB7CiAgICAgICAgIGNtZCArPSBlc2NhcGVGb3JTaGVsbE9sZFN0eWxlKGVtdWxhdG9yW2pdKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNtZCArPSB0aGlzLT5MRy0+RXNjYXBlRm9yU2hlbGwoZW11bGF0b3Jbal0sIHRoaXMtPk1ha2VWYXJzKTsKKyAgICAgICAgY21kICs9CisgICAgICAgICAgdGhpcy0+TEctPkVzY2FwZUZvclNoZWxsKGVtdWxhdG9yW2pdLCB0aGlzLT5NYWtlVmFycywgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlVmFycyAmJiB0aGlzLT5MRy0+SXNOaW5qYU11bHRpKCkpOwogICAgICAgfQogICAgIH0KIApAQCAtMjIyLDcgKzIyNiw5IEBACiAgICAgaWYgKHRoaXMtPk9sZFN0eWxlKSB7CiAgICAgICBjbWQgKz0gZXNjYXBlRm9yU2hlbGxPbGRTdHlsZShhcmcpOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbWQgKz0gdGhpcy0+TEctPkVzY2FwZUZvclNoZWxsKGFyZywgdGhpcy0+TWFrZVZhcnMpOworICAgICAgY21kICs9CisgICAgICAgIHRoaXMtPkxHLT5Fc2NhcGVGb3JTaGVsbChhcmcsIHRoaXMtPk1ha2VWYXJzLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlVmFycyAmJiB0aGlzLT5MRy0+SXNOaW5qYU11bHRpKCkpOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVmaW5lUHJvcGVydHlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbURlZmluZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZjRlNGZkYS4uNGUyZDliMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVmaW5lUHJvcGVydHlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21EZWZpbmVQcm9wZXJ0eUNvbW1hbmQuY3h4CkBAIC05NSw3ICs5NSw3IEBACiAKICAgLy8gQWN0dWFsbHkgZGVmaW5lIHRoZSBwcm9wZXJ0eS4KICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkoCi0gICAgUHJvcGVydHlOYW1lLCBzY29wZSwgQnJpZWZEb2NzLmNfc3RyKCksIEZ1bGxEb2NzLmNfc3RyKCksIGluaGVyaXRlZCk7CisgICAgUHJvcGVydHlOYW1lLCBzY29wZSwgQnJpZWZEb2NzLCBGdWxsRG9jcywgaW5oZXJpdGVkKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlcGVuZHMuY3h4IGIvU291cmNlL2NtRGVwZW5kcy5jeHgKaW5kZXggMTI5YTVmNy4uZDRlOGRhNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kcy5jeHgKKysrIGIvU291cmNlL2NtRGVwZW5kcy5jeHgKQEAgLTIsNyArMiw2IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbURlcGVuZHMuaCIKIAotI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtODEsMTYgKzgwLDE0IEBACiB7CiAgIC8vIFByaW50IHZlcmJvc2Ugb3V0cHV0LgogICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgbXNnIDw8ICJDbGVhcmluZyBkZXBlbmRlbmNpZXMgaW4gXCIiIDw8IGZpbGUgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChtc2cuc3RyKCkpOworICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dCgKKyAgICAgIGNtU3RyQ2F0KCJDbGVhcmluZyBkZXBlbmRlbmNpZXMgaW4gXCIiLCBmaWxlLCAiXCIuXG4iKSk7CiAgIH0KIAogICAvLyBXcml0ZSBhbiBlbXB0eSBkZXBlbmRlbmN5IGZpbGUuCiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBkZXBGaWxlU3RyZWFtKGZpbGUpOwogICBkZXBGaWxlU3RyZWFtIDw8ICIjIEVtcHR5IGRlcGVuZGVuY2llcyBmaWxlXG4iCi0gICAgICAgICAgICAgICAgPDwgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LiIKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgICAgICAgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LlxuIjsKIH0KIAogYm9vbCBjbURlcGVuZHM6OldyaXRlRGVwZW5kZW5jaWVzKGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgLyp1bnVzZWQqLywKQEAgLTE3MiwxMCArMTY5LDkgQEAKIAogICAgICAgLy8gUHJpbnQgdmVyYm9zZSBvdXRwdXQuCiAgICAgICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICBtc2cgPDwgIkRlcGVuZGVlIFwiIiA8PCBkZXBlbmRlZSA8PCAiXCIgZG9lcyBub3QgZXhpc3QgZm9yIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgPDwgZGVwZW5kZXIgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQobXNnLnN0cigpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGRvZXMgbm90IGV4aXN0IGZvciBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlciwgIlwiLlxuIikpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGVwZW5kZXJFeGlzdHMpIHsKICAgICAgIC8vIFRoZSBkZXBlbmRlZSBhbmQgZGVwZW5kZXIgYm90aCBleGlzdC4gIENvbXBhcmUgZmlsZSB0aW1lcy4KQEAgLTE4NSwxMCArMTgxLDkgQEAKIAogICAgICAgICAvLyBQcmludCB2ZXJib3NlIG91dHB1dC4KICAgICAgICAgaWYgKHRoaXMtPlZlcmJvc2UpIHsKLSAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICAgIG1zZyA8PCAiRGVwZW5kZWUgXCIiIDw8IGRlcGVuZGVlIDw8ICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgICA8PCBkZXBlbmRlciA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVyLCAiXCIuXG4iKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjAwLDExICsxOTUsOSBAQAogCiAgICAgICAgIC8vIFByaW50IHZlcmJvc2Ugb3V0cHV0LgogICAgICAgICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICAgICAgbXNnIDw8ICJEZXBlbmRlZSBcIiIgPDwgZGVwZW5kZWUKLSAgICAgICAgICAgICAgPDwgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kcyBmaWxlIFwiIiA8PCBpbnRlcm5hbERlcGVuZHNGaWxlTmFtZQotICAgICAgICAgICAgICA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRzIGZpbGUgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbERlcGVuZHNGaWxlTmFtZSwgIlwiLlxuIikpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0MuY3h4IGIvU291cmNlL2NtRGVwZW5kc0MuY3h4CmluZGV4IGUzMGQ5NTkuLjAxYmI2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHNDLmN4eAorKysgYi9Tb3VyY2UvY21EZXBlbmRzQy5jeHgKQEAgLTIxMiwxNyArMjEyLDE3IEBACiAgIC8vIGNvbnZlcnQgdGhlIGRlcGVuZGVuY2llcyB0byBwYXRocyByZWxhdGl2ZSB0byB0aGUgaG9tZSBvdXRwdXQKICAgLy8gZGlyZWN0b3J5LiAgV2UgbXVzdCBkbyB0aGUgc2FtZSBoZXJlLgogICBzdGQ6OnN0cmluZyBvYmpfbSA9IGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgob2JqX2kpOwotICBpbnRlcm5hbERlcGVuZHMgPDwgb2JqX2kgPDwgc3RkOjplbmRsOworICBpbnRlcm5hbERlcGVuZHMgPDwgb2JqX2kgPDwgJ1xuJzsKIAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXAgOiBkZXBlbmRlbmNpZXMpIHsKICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiCiAgICAgICAgICAgICAgICAgPDwgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwKSkKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgaW50ZXJuYWxEZXBlbmRzIDw8ICIgIiA8PCBkZXAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgIDw8ICdcbic7CisgICAgaW50ZXJuYWxEZXBlbmRzIDw8ICcgJyA8PCBkZXAgPDwgJ1xuJzsKICAgfQotICBtYWtlRGVwZW5kcyA8PCBzdGQ6OmVuZGw7CisgIG1ha2VEZXBlbmRzIDw8ICdcbic7CiAKICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNjQsMTkgKzI2NCwxOSBAQAogICAgICAgLy8gZmlsZSBkb2Vzbid0IGV4aXN0LCBjaGVjayB0aGF0IHRoZSByZWd1bGFyIGV4cHJlc3Npb25zCiAgICAgICAvLyBoYXZlbid0IGNoYW5nZWQKICAgICAgIGVsc2UgaWYgKCFyZXMpIHsKLSAgICAgICAgaWYgKGxpbmUuZmluZChJTkNMVURFX1JFR0VYX0xJTkVfTUFSS0VSKSA9PSAwKSB7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgSU5DTFVERV9SRUdFWF9MSU5FX01BUktFUikpIHsKICAgICAgICAgICBpZiAobGluZSAhPSB0aGlzLT5JbmNsdWRlUmVnZXhMaW5lU3RyaW5nKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGxpbmUuZmluZChJTkNMVURFX1JFR0VYX1NDQU5fTUFSS0VSKSA9PSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpbmUsIElOQ0xVREVfUkVHRVhfU0NBTl9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4U2NhblN0cmluZykgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChsaW5lLmZpbmQoSU5DTFVERV9SRUdFWF9DT01QTEFJTl9NQVJLRVIpID09IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgSU5DTFVERV9SRUdFWF9DT01QTEFJTl9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4Q29tcGxhaW5TdHJpbmcpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobGluZS5maW5kKElOQ0xVREVfUkVHRVhfVFJBTlNGT1JNX01BUktFUikgPT0gMCkgeworICAgICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChsaW5lLCBJTkNMVURFX1JFR0VYX1RSQU5TRk9STV9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4VHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQpAQCAtMzEyLDE3ICszMTIsMTcgQEAKIAogICBmb3IgKGF1dG8gY29uc3QmIGZpbGVJdCA6IHRoaXMtPkZpbGVDYWNoZSkgewogICAgIGlmIChmaWxlSXQuc2Vjb25kLlVzZWQpIHsKLSAgICAgIGNhY2hlT3V0IDw8IGZpbGVJdC5maXJzdCA8PCBzdGQ6OmVuZGw7CisgICAgICBjYWNoZU91dCA8PCBmaWxlSXQuZmlyc3QgPDwgJ1xuJzsKIAogICAgICAgZm9yIChVbnNjYW5uZWRFbnRyeSBjb25zdCYgaW5jIDogZmlsZUl0LnNlY29uZC5VbnNjYW5uZWRFbnRyaWVzKSB7Ci0gICAgICAgIGNhY2hlT3V0IDw8IGluYy5GaWxlTmFtZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGNhY2hlT3V0IDw8IGluYy5GaWxlTmFtZSA8PCAnXG4nOwogICAgICAgICBpZiAoaW5jLlF1b3RlZExvY2F0aW9uLmVtcHR5KCkpIHsKLSAgICAgICAgICBjYWNoZU91dCA8PCAiLSIgPDwgc3RkOjplbmRsOworICAgICAgICAgIGNhY2hlT3V0IDw8ICctJyA8PCAnXG4nOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNhY2hlT3V0IDw8IGluYy5RdW90ZWRMb2NhdGlvbiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgY2FjaGVPdXQgPDwgaW5jLlF1b3RlZExvY2F0aW9uIDw8ICdcbic7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGNhY2hlT3V0IDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGNhY2hlT3V0IDw8ICdcbic7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21EZXBlbmRzQy5oIGIvU291cmNlL2NtRGVwZW5kc0MuaAppbmRleCAzYmI2ZTM2Li44NjhjOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzQy5oCisrKyBiL1NvdXJjZS9jbURlcGVuZHNDLmgKQEAgLTcsMTIgKzcsMTEgQEAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8cXVldWU+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlIDxxdWV1ZT4KLQogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAogI2luY2x1ZGUgImNtRGVwZW5kcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uY3h4IGIvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uY3h4CmluZGV4IDM2OTIyMDIuLjY2NjMwNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmN4eAorKysgYi9Tb3VyY2UvY21EZXBlbmRzRm9ydHJhbi5jeHgKQEAgLTEwMiwxMCArMTAyLDcgQEAKICAgdGhpcy0+U01vZEV4dCA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfRm9ydHJhbl9TVUJNT0RVTEVfRVhUIik7CiB9CiAKLWNtRGVwZW5kc0ZvcnRyYW46On5jbURlcGVuZHNGb3J0cmFuKCkKLXsKLSAgZGVsZXRlIHRoaXMtPkludGVybmFsOwotfQorY21EZXBlbmRzRm9ydHJhbjo6fmNtRGVwZW5kc0ZvcnRyYW4oKSA9IGRlZmF1bHQ7CiAKIGJvb2wgY21EZXBlbmRzRm9ydHJhbjo6V3JpdGVEZXBlbmRlbmNpZXMoY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb2JqLApAQCAtMTg4LDcgKzE4NSw3IEBACiAgIGZpU3RyZWFtIDw8ICJwcm92aWRlc1xuIjsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBwcm92aWRlcyA9IHRoaXMtPkludGVybmFsLT5UYXJnZXRQcm92aWRlczsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IHByb3ZpZGVzKSB7Ci0gICAgZmlTdHJlYW0gPDwgIiAiIDw8IGkgPDwgIlxuIjsKKyAgICBmaVN0cmVhbSA8PCAnICcgPDwgaSA8PCAnXG4nOwogICB9CiAKICAgLy8gQ3JlYXRlIGEgc2NyaXB0IHRvIGNsZWFuIHRoZSBtb2R1bGVzLgpAQCAtMjA1LDE0ICsyMDIsMTQgQEAKICAgICAgIHN0ZDo6c3RyaW5nIG1vZF9sb3dlciA9IGNtU3RyQ2F0KG1vZF9kaXIsICcvJyk7CiAgICAgICBjbUZvcnRyYW5Nb2R1bGVBcHBlbmRVcHBlckxvd2VyKGksIG1vZF91cHBlciwgbW9kX2xvd2VyKTsKICAgICAgIHN0ZDo6c3RyaW5nIHN0YW1wID0gY21TdHJDYXQoc3RhbXBfZGlyLCAnLycsIGksICIuc3RhbXAiKTsKLSAgICAgIGZjU3RyZWFtIDw8ICJcbiI7Ci0gICAgICBmY1N0cmVhbSA8PCAiICBcIiIKKyAgICAgIGZjU3RyZWFtIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgIFwiIgogICAgICAgICAgICAgICAgPDwgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgbW9kX2xvd2VyKQotICAgICAgICAgICAgICAgPDwgIlwiXG4iOwotICAgICAgZmNTdHJlYW0gPDwgIiAgXCIiCisgICAgICAgICAgICAgICA8PCAiXCJcbiIKKyAgICAgICAgICAgICAgICAgICIgIFwiIgogICAgICAgICAgICAgICAgPDwgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgbW9kX3VwcGVyKQotICAgICAgICAgICAgICAgPDwgIlwiXG4iOwotICAgICAgZmNTdHJlYW0gPDwgIiAgXCIiCisgICAgICAgICAgICAgICA8PCAiXCJcbiIKKyAgICAgICAgICAgICAgICAgICIgIFwiIgogICAgICAgICAgICAgICAgPDwgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgc3RhbXApCiAgICAgICAgICAgICAgICA8PCAiXCJcbiI7CiAgICAgfQpAQCAtMzI5LDE2ICszMjYsMTUgQEAKICAgc3RkOjpzdHJpbmcgYmluRGlyID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpOwogICBzdGQ6OnN0cmluZyBvYmpfaSA9IHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGJpbkRpciwgb2JqKTsKICAgc3RkOjpzdHJpbmcgb2JqX20gPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKG9ial9pKTsKLSAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8IHN0ZDo6ZW5kbDsKLSAgaW50ZXJuYWxEZXBlbmRzIDw8ICIgIiA8PCBzcmMgPDwgc3RkOjplbmRsOworICBpbnRlcm5hbERlcGVuZHMgPDwgb2JqX2kgPDwgIlxuICIgPDwgc3JjIDw8ICdcbic7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBpbmZvLkluY2x1ZGVzKSB7CiAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIjogIgogICAgICAgICAgICAgICAgIDw8IGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgoCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIGkpKQotICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICBpbnRlcm5hbERlcGVuZHMgPDwgIiAiIDw8IGkgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgIDw8ICdcbic7CisgICAgaW50ZXJuYWxEZXBlbmRzIDw8ICcgJyA8PCBpIDw8ICdcbic7CiAgIH0KLSAgbWFrZURlcGVuZHMgPDwgc3RkOjplbmRsOworICBtYWtlRGVwZW5kcyA8PCAnXG4nOwogCiAgIC8vIFdyaXRlIG1vZHVsZSByZXF1aXJlbWVudHMgdG8gdGhlIG91dHB1dCBzdHJlYW0uCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBpbmZvLlJlcXVpcmVzKSB7CkBAIC0zNTcsNyArMzUzLDcgQEAKICAgICAgIC8vIFRoaXMgbW9kdWxlIGlzIGtub3duLiAgRGVwZW5kIG9uIGl0cyB0aW1lc3RhbXAgZmlsZS4KICAgICAgIHN0ZDo6c3RyaW5nIHN0YW1wRmlsZSA9IGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgoCiAgICAgICAgIHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGJpbkRpciwgcmVxdWlyZWQtPnNlY29uZCkpOwotICAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIjogIiA8PCBzdGFtcEZpbGUgPDwgIlxuIjsKKyAgICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIgPDwgc3RhbXBGaWxlIDw8ICdcbic7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIFRoaXMgbW9kdWxlIGlzIG5vdCBrbm93biB0byBDTWFrZS4gIFRyeSB0byBsb2NhdGUgaXQgd2hlcmUKICAgICAgIC8vIHRoZSBjb21waWxlciB3aWxsIGFuZCBkZXBlbmQgb24gdGhhdC4KQEAgLTM2NSw3ICszNjEsNyBAQAogICAgICAgaWYgKHRoaXMtPkZpbmRNb2R1bGUoaSwgbW9kdWxlKSkgewogICAgICAgICBtb2R1bGUgPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKAogICAgICAgICAgIHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGJpbkRpciwgbW9kdWxlKSk7Ci0gICAgICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIgPDwgbW9kdWxlIDw8ICJcbiI7CisgICAgICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIgPDwgbW9kdWxlIDw8ICdcbic7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0zOTQsNyArMzkwLDcgQEAKICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChzdGFtcEZpbGUpOwogCiAgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiLnByb3ZpZGVzLmJ1aWxkIgotICAgICAgICAgICAgICAgICAgPDwgIjogIiA8PCBzdGFtcEZpbGVGb3JNYWtlIDw8ICJcbiI7CisgICAgICAgICAgICAgICAgICA8PCAiOiAiIDw8IHN0YW1wRmlsZUZvck1ha2UgPDwgJ1xuJzsKICAgICAgIC8vIE5vdGUgdGhhdCB3aGVuIGNtYWtlX2NvcHlfZjkwX21vZCBmaW5kcyB0aGF0IGEgbW9kdWxlIGZpbGUKICAgICAgIC8vIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdGFtcCBmaWxlIGhhdmUgbm8gZGlmZmVyZW5jZXMsIHRoZSBzdGFtcAogICAgICAgLy8gZmlsZSBpcyBub3QgdXBkYXRlZC4gSW4gc3VjaCBjYXNlIHRoZSBzdGFtcCBmaWxlIHdpbGwgYmUgYWx3YXlzCkBAIC00MDIsMTUgKzM5OCwxNSBAQAogICAgICAgLy8gb24gZWFjaCBuZXcgYnVpbGQuIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3IgZm9yIGluY3JlbWVudGFsCiAgICAgICAvLyBidWlsZHMgYW5kIGNhbiBub3QgYmUgY2hhbmdlZCB3aXRob3V0IHByZWZvcm1pbmcgcmVjdXJzaXZlIG1ha2UKICAgICAgIC8vIGNhbGxzIHRoYXQgd291bGQgY29uc2lkZXJhYmx5IHNsb3cgZG93biB0aGUgYnVpbGRpbmcgcHJvY2Vzcy4KLSAgICAgIG1ha2VEZXBlbmRzIDw8IHN0YW1wRmlsZUZvck1ha2UgPDwgIjogIiA8PCBvYmpfbSA8PCAiXG4iOworICAgICAgbWFrZURlcGVuZHMgPDwgc3RhbXBGaWxlRm9yTWFrZSA8PCAiOiAiIDw8IG9ial9tIDw8ICdcbic7CiAgICAgICBtYWtlRGVwZW5kcyA8PCAiXHQkKENNQUtFX0NPTU1BTkQpIC1FIGNtYWtlX2NvcHlfZjkwX21vZCAiIDw8IG1vZEZpbGUKLSAgICAgICAgICAgICAgICAgIDw8ICIgIiA8PCBzdGFtcEZpbGVGb3JTaGVsbDsKKyAgICAgICAgICAgICAgICAgIDw8ICcgJyA8PCBzdGFtcEZpbGVGb3JTaGVsbDsKICAgICAgIGNtTWFrZWZpbGUqIG1mID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlKCk7CiAgICAgICBjb25zdCBjaGFyKiBjaWQgPSBtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCIpOwogICAgICAgaWYgKGNpZCAmJiAqY2lkKSB7Ci0gICAgICAgIG1ha2VEZXBlbmRzIDw8ICIgIiA8PCBjaWQ7CisgICAgICAgIG1ha2VEZXBlbmRzIDw8ICcgJyA8PCBjaWQ7CiAgICAgICB9Ci0gICAgICBtYWtlRGVwZW5kcyA8PCAiXG4iOworICAgICAgbWFrZURlcGVuZHMgPDwgJ1xuJzsKICAgICB9CiAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIi5wcm92aWRlcy5idWlsZDpcbiI7CiAgICAgLy8gQWZ0ZXIgY29weWluZyB0aGUgbW9kdWxlcyB1cGRhdGUgdGhlIHRpbWVzdGFtcCBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uaCBiL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmgKaW5kZXggMDQ4NTExNS4uZTNlMGQwNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uaAorKysgYi9Tb3VyY2UvY21EZXBlbmRzRm9ydHJhbi5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtODQsNyArODUsNyBAQAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gUFBEZWZpbml0aW9uczsKIAogICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotICBjbURlcGVuZHNGb3J0cmFuSW50ZXJuYWxzKiBJbnRlcm5hbCA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbURlcGVuZHNGb3J0cmFuSW50ZXJuYWxzPiBJbnRlcm5hbDsKIAogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGJhc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5jeHggYi9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5jeHgKaW5kZXggNTE2YmJiZi4uZmMxYmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuY3h4CisrKyBiL1NvdXJjZS9jbURlcGVuZHNKYXZhUGFyc2VySGVscGVyLmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0xNjksMTAgKzE3MCwxMSBAQAogICAgIHJldHVybjsKICAgfQogICB0aGlzLT5VbmlvbnNBdmFpbGFibGUrKzsKLSAgcHQtPnN0ciA9IG5ldyBjaGFyW2xlbiArIDFdOworICBhdXRvIHVwID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4obGVuICsgMSk7CisgIHB0LT5zdHIgPSB1cC5nZXQoKTsKICAgc3RybmNweShwdC0+c3RyLCBzdHIsIGxlbik7CiAgIHB0LT5zdHJbbGVuXSA9IDA7Ci0gIHRoaXMtPkFsbG9jYXRlcy5wdXNoX2JhY2socHQtPnN0cik7CisgIHRoaXMtPkFsbG9jYXRlcy5wdXNoX2JhY2soc3RkOjptb3ZlKHVwKSk7CiB9CiAKIHZvaWQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6U3RhcnRDbGFzcyhjb25zdCBjaGFyKiBjbHMpCkBAIC0yNzUsMTAgKzI3Nyw3IEBACiAKIHZvaWQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6Q2xlYW51cFBhcnNlcigpCiB7Ci0gIGZvciAoY2hhciogYWxsb2NhdGUgOiB0aGlzLT5BbGxvY2F0ZXMpIHsKLSAgICBkZWxldGVbXSBhbGxvY2F0ZTsKLSAgfQotICB0aGlzLT5BbGxvY2F0ZXMuZXJhc2UodGhpcy0+QWxsb2NhdGVzLmJlZ2luKCksIHRoaXMtPkFsbG9jYXRlcy5lbmQoKSk7CisgIHRoaXMtPkFsbG9jYXRlcy5jbGVhcigpOwogfQogCiBpbnQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6TGV4SW5wdXQoY2hhciogYnVmLCBpbnQgbWF4bGVuKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuaCBiL1NvdXJjZS9jbURlcGVuZHNKYXZhUGFyc2VySGVscGVyLmgKaW5kZXggYTY3M2I1Yi4uYzU0NWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuaAorKysgYi9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC04MSw3ICs4Miw3IEBACiAgIGludCBDdXJyZW50RGVwdGg7CiAgIGludCBWZXJib3NlOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXIqPiBBbGxvY2F0ZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+PiBBbGxvY2F0ZXM7CiAKICAgdm9pZCBQcmludENsYXNzZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRG9jdW1lbnRhdGlvblNlY3Rpb24uaCBiL1NvdXJjZS9jbURvY3VtZW50YXRpb25TZWN0aW9uLmgKaW5kZXggMTVjYWRhNi4uNjQxMjYzZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRG9jdW1lbnRhdGlvblNlY3Rpb24uaAorKysgYi9Tb3VyY2UvY21Eb2N1bWVudGF0aW9uU2VjdGlvbi5oCkBAIC04LDcgKzgsOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogCiAvLyBMb3ctbGV2ZWwgaW50ZXJmYWNlIGZvciBjdXN0b20gZG9jdW1lbnRzOgpAQCAtNDcsNyArNDgsNyBAQAogICB9CiAgIHZvaWQgQXBwZW5kKGNvbnN0IHN0ZDo6dmVjdG9yPGNtRG9jdW1lbnRhdGlvbkVudHJ5PiYgZW50cmllcykKICAgewotICAgIGNtQXBwZW5kKHRoaXMtPkVudHJpZXMsIGVudHJpZXMpOworICAgIGNtOjphcHBlbmQodGhpcy0+RW50cmllcywgZW50cmllcyk7CiAgIH0KIAogICAvKiogQXBwZW5kIGFuIGVudHJ5IHRvIHRoaXMgc2VjdGlvbiB1c2luZyBOVUxMIHRlcm1pbmF0ZWQgY2hhcnMgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUR5bmFtaWNMb2FkZXIuY3h4IGIvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHgKaW5kZXggMGI3MmE5NC4uYTM3MzFjMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHgKKysrIGIvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKK25hbWVzcGFjZSB7CiBjbGFzcyBjbUR5bmFtaWNMb2FkZXJDYWNoZQogewogcHVibGljOgpAQCAtMTUsMTQgKzE2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGNtc3lzOjpEeW5hbWljTG9hZGVyOjpMaWJyYXJ5SGFuZGxlJiAvKnAqLyk7CiAgIGJvb2wgRmx1c2hDYWNoZShjb25zdCBjaGFyKiBwYXRoKTsKICAgdm9pZCBGbHVzaENhY2hlKCk7Ci0gIHN0YXRpYyBjbUR5bmFtaWNMb2FkZXJDYWNoZSogR2V0SW5zdGFuY2UoKTsKKyAgc3RhdGljIGNtRHluYW1pY0xvYWRlckNhY2hlJiBHZXRJbnN0YW5jZSgpOwogCiBwcml2YXRlOgogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21zeXM6OkR5bmFtaWNMb2FkZXI6OkxpYnJhcnlIYW5kbGU+IENhY2hlTWFwOwotICBzdGF0aWMgY21EeW5hbWljTG9hZGVyQ2FjaGUqIEluc3RhbmNlOworICBzdGF0aWMgY21EeW5hbWljTG9hZGVyQ2FjaGUgSW5zdGFuY2U7CiB9OwogCi1jbUR5bmFtaWNMb2FkZXJDYWNoZSogY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlID0gbnVsbHB0cjsKK2NtRHluYW1pY0xvYWRlckNhY2hlIGNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZTsKK30KIAogY21EeW5hbWljTG9hZGVyQ2FjaGU6On5jbUR5bmFtaWNMb2FkZXJDYWNoZSgpID0gZGVmYXVsdDsKIApAQCAtNjQsMTUgKzY2LDExIEBACiAgIGZvciAoYXV0byBjb25zdCYgaXQgOiB0aGlzLT5DYWNoZU1hcCkgewogICAgIGNtc3lzOjpEeW5hbWljTG9hZGVyOjpDbG9zZUxpYnJhcnkoaXQuc2Vjb25kKTsKICAgfQotICBkZWxldGUgY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlOwotICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6SW5zdGFuY2UgPSBudWxscHRyOworICB0aGlzLT5DYWNoZU1hcC5jbGVhcigpOwogfQogCi1jbUR5bmFtaWNMb2FkZXJDYWNoZSogY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCkKK2NtRHluYW1pY0xvYWRlckNhY2hlJiBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKQogewotICBpZiAoIWNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZSkgewotICAgIGNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZSA9IG5ldyBjbUR5bmFtaWNMb2FkZXJDYWNoZTsKLSAgfQogICByZXR1cm4gY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlOwogfQogCkBAIC04MCwxNSArNzgsMTUgQEAKICAgY29uc3QgY2hhciogbGlibmFtZSkKIHsKICAgY21zeXM6OkR5bmFtaWNMb2FkZXI6OkxpYnJhcnlIYW5kbGUgbGg7Ci0gIGlmIChjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS0+R2V0Q2FjaGVGaWxlKGxpYm5hbWUsIGxoKSkgeworICBpZiAoY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCkuR2V0Q2FjaGVGaWxlKGxpYm5hbWUsIGxoKSkgewogICAgIHJldHVybiBsaDsKICAgfQogICBsaCA9IGNtc3lzOjpEeW5hbWljTG9hZGVyOjpPcGVuTGlicmFyeShsaWJuYW1lKTsKLSAgY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCktPkNhY2hlRmlsZShsaWJuYW1lLCBsaCk7CisgIGNtRHluYW1pY0xvYWRlckNhY2hlOjpHZXRJbnN0YW5jZSgpLkNhY2hlRmlsZShsaWJuYW1lLCBsaCk7CiAgIHJldHVybiBsaDsKIH0KIAogdm9pZCBjbUR5bmFtaWNMb2FkZXI6OkZsdXNoQ2FjaGUoKQogewotICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS0+Rmx1c2hDYWNoZSgpOworICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS5GbHVzaENhY2hlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FTEYuY3h4IGIvU291cmNlL2NtRUxGLmN4eAppbmRleCA1OTc2YjJmLi4yMDJiMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FTEYuY3h4CisrKyBiL1NvdXJjZS9jbUVMRi5jeHgKQEAgLTEwLDEzICsxMCwxMiBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogI2luY2x1ZGUgImNtX2t3aW1sLmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKLQogLy8gSW5jbHVkZSB0aGUgRUxGIGZvcm1hdCBpbmZvcm1hdGlvbiBzeXN0ZW0gaGVhZGVyLgogI2lmIGRlZmluZWQoX19PcGVuQlNEX18pCiAjICBpbmNsdWRlIDxlbGZfYWJpLmg+CkBAIC01NzgsNyArNTc3LDcgQEAKICAgICB9CiAKICAgICBjaGFyKiBwZHluID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmR5bik7Ci0gICAgY21BcHBlbmQocmVzdWx0LCBwZHluLCBwZHluICsgc2l6ZW9mKEVMRl9EeW4pKTsKKyAgICBjbTo6YXBwZW5kKHJlc3VsdCwgcGR5biwgcGR5biArIHNpemVvZihFTEZfRHluKSk7CiAgIH0KIAogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhlY3V0ZVByb2Nlc3NDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUV4ZWN1dGVQcm9jZXNzQ29tbWFuZC5jeHgKaW5kZXggODBlNGJjZC4uMDhhMGY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhlY3V0ZVByb2Nlc3NDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmQuY3h4CkBAIC05LDExICs5LDEyIEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKIAogI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC02MCw2ICs2MSw4IEBACiAgICAgYm9vbCBFcnJvclF1aWV0ID0gZmFsc2U7CiAgICAgYm9vbCBPdXRwdXRTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSA9IGZhbHNlOwogICAgIGJvb2wgRXJyb3JTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSA9IGZhbHNlOworICAgIGJvb2wgRWNob091dHB1dFZhcmlhYmxlID0gZmFsc2U7CisgICAgYm9vbCBFY2hvRXJyb3JWYXJpYWJsZSA9IGZhbHNlOwogICAgIHN0ZDo6c3RyaW5nIEVuY29kaW5nOwogICB9OwogCkBAIC04Miw3ICs4NSw5IEBACiAgICAgICAgICAgICAmQXJndW1lbnRzOjpPdXRwdXRTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSkKICAgICAgIC5CaW5kKCJFUlJPUl9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFIl9zLAogICAgICAgICAgICAgJkFyZ3VtZW50czo6RXJyb3JTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSkKLSAgICAgIC5CaW5kKCJFTkNPRElORyJfcywgJkFyZ3VtZW50czo6RW5jb2RpbmcpOworICAgICAgLkJpbmQoIkVOQ09ESU5HIl9zLCAmQXJndW1lbnRzOjpFbmNvZGluZykKKyAgICAgIC5CaW5kKCJFQ0hPX09VVFBVVF9WQVJJQUJMRSJfcywgJkFyZ3VtZW50czo6RWNob091dHB1dFZhcmlhYmxlKQorICAgICAgLkJpbmQoIkVDSE9fRVJST1JfVkFSSUFCTEUiX3MsICZBcmd1bWVudHM6OkVjaG9FcnJvclZhcmlhYmxlKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5wYXJzZWRBcmd1bWVudHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBrZXl3b3Jkc01pc3NpbmdWYWx1ZTsKQEAgLTI0MCwyOCArMjQ1LDMyIEBACiAgIHdoaWxlICgocCA9IGNtc3lzUHJvY2Vzc19XYWl0Rm9yRGF0YShjcCwgJmRhdGEsICZsZW5ndGgsIG51bGxwdHIpKSkgewogICAgIC8vIFB1dCB0aGUgb3V0cHV0IGluIHRoZSByaWdodCBwbGFjZS4KICAgICBpZiAocCA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERPVVQgJiYgIWFyZ3VtZW50cy5PdXRwdXRRdWlldCkgewotICAgICAgaWYgKGFyZ3VtZW50cy5PdXRwdXRWYXJpYWJsZS5lbXB0eSgpKSB7CisgICAgICBpZiAoYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkgfHwgYXJndW1lbnRzLkVjaG9PdXRwdXRWYXJpYWJsZSkgewogICAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoZGF0YSwgbGVuZ3RoLCBzdHJkYXRhLCAxKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KHN0cmRhdGEpOwotICAgICAgfSBlbHNlIHsKKyAgICAgIH0KKyAgICAgIGlmICghYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkpIHsKICAgICAgICAgY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmRBcHBlbmQodGVtcE91dHB1dCwgZGF0YSwgbGVuZ3RoKTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHAgPT0gY21zeXNQcm9jZXNzX1BpcGVfU1RERVJSICYmICFhcmd1bWVudHMuRXJyb3JRdWlldCkgewotICAgICAgaWYgKGFyZ3VtZW50cy5FcnJvclZhcmlhYmxlLmVtcHR5KCkpIHsKKyAgICAgIGlmIChhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpIHx8IGFyZ3VtZW50cy5FY2hvRXJyb3JWYXJpYWJsZSkgewogICAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoZGF0YSwgbGVuZ3RoLCBzdHJkYXRhLCAyKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3RkZXJyKHN0cmRhdGEpOwotICAgICAgfSBlbHNlIHsKKyAgICAgIH0KKyAgICAgIGlmICghYXJndW1lbnRzLkVycm9yVmFyaWFibGUuZW1wdHkoKSkgewogICAgICAgICBjbUV4ZWN1dGVQcm9jZXNzQ29tbWFuZEFwcGVuZCh0ZW1wRXJyb3IsIGRhdGEsIGxlbmd0aCk7CiAgICAgICB9CiAgICAgfQogICB9Ci0gIGlmICghYXJndW1lbnRzLk91dHB1dFF1aWV0ICYmIGFyZ3VtZW50cy5PdXRwdXRWYXJpYWJsZS5lbXB0eSgpKSB7CisgIGlmICghYXJndW1lbnRzLk91dHB1dFF1aWV0ICYmCisgICAgICAoYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkgfHwgYXJndW1lbnRzLkVjaG9PdXRwdXRWYXJpYWJsZSkpIHsKICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMSk7CiAgICAgaWYgKCFzdHJkYXRhLmVtcHR5KCkpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChzdHJkYXRhKTsKICAgICB9CiAgIH0KLSAgaWYgKCFhcmd1bWVudHMuRXJyb3JRdWlldCAmJiBhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpKSB7CisgIGlmICghYXJndW1lbnRzLkVycm9yUXVpZXQgJiYKKyAgICAgIChhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpIHx8IGFyZ3VtZW50cy5FY2hvRXJyb3JWYXJpYWJsZSkpIHsKICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMik7CiAgICAgaWYgKCFzdHJkYXRhLmVtcHR5KCkpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZGVycihzdHJkYXRhKTsKQEAgLTQwMiw2ICs0MTEsNiBAQAogICAgIC0tbGVuZ3RoOwogICB9CiAjZW5kaWYKLSAgY21BcHBlbmQob3V0cHV0LCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgY206OmFwcGVuZChvdXRwdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOwogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwb3J0QnVpbGRBbmRyb2lkTUtHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXhwb3J0QnVpbGRBbmRyb2lkTUtHZW5lcmF0b3IuY3h4CmluZGV4IDU2MWU4MzAuLmEyYjRkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKQEAgLTExOCwxMyArMTE4LDEzIEBACiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgcmVscGF0aCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gY21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvcjo6SU5TVEFMTCkgewotICAgICAgICAgICAgICByZWxwYXRoID0gbGliLnN1YnN0cigwLCAzKSA9PSAiLi4vIjsKKyAgICAgICAgICAgICAgcmVscGF0aCA9IGNtSGFzTGl0ZXJhbFByZWZpeChsaWIsICIuLi8iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBmdWxsIHBhdGggb3IgaWYgaXQgYWxyZWFkeSBoYXMgYSAtbCwgb3IKICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIGFuIGluc3RhbGwgY2hlY2sgZm9yIHJlbGF0aXZlIHBhdGhzCiAgICAgICAgICAgICAvLyBpZiBpdCBpcyBmdWxsIG9yIGEgbGluayBsaWJyYXJ5IHRoZW4gdXNlIHN0cmluZyBkaXJlY3RseQogICAgICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGxpYikgfHwKLSAgICAgICAgICAgICAgICBsaWIuc3Vic3RyKDAsIDIpID09ICItbCIgfHwgcmVscGF0aCkgeworICAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChsaWIsICItbCIpIHx8IHJlbHBhdGgpIHsKICAgICAgICAgICAgICAgbGRsaWJzICs9ICIgIiArIGxpYjsKICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IGEgcGF0aCBhbmQgZG9lcyBub3QgaGF2ZSBhIC1sIHRoZW4gYWRkIC1sCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFsaWIuZW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvci5jeHgKaW5kZXggN2U5YTk4Ny4uZDIyYmQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuY3h4CkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRXhwb3J0U2V0LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTMwMCwxMSArMzAxLDEwIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBvcnRGaWxlczsKICAgc3RkOjpzdHJpbmcgbnM7CiAKLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKj4mIGV4cG9ydFNldHMgPQotICAgIGdnLT5HZXRCdWlsZEV4cG9ydFNldHMoKTsKKyAgYXV0byYgZXhwb3J0U2V0cyA9IGdnLT5HZXRCdWlsZEV4cG9ydFNldHMoKTsKIAogICBmb3IgKGF1dG8gY29uc3QmIGV4cCA6IGV4cG9ydFNldHMpIHsKLSAgICBjb25zdCBjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciogZXhwb3J0U2V0ID0gZXhwLnNlY29uZDsKKyAgICBjb25zdCBhdXRvJiBleHBvcnRTZXQgPSBleHAuc2Vjb25kOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0YXJnZXRzOwogICAgIGV4cG9ydFNldC0+R2V0VGFyZ2V0cyh0YXJnZXRzKTsKICAgICBpZiAoY21Db250YWlucyh0YXJnZXRzLCBuYW1lKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaAppbmRleCAxMWZiZDAyLi42NmU4Y2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaApAQCAtMTAsNyArMTAsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeHBvcnRGaWxlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAKQEAgLTQxLDcgKzQyLDcgQEAKICAgdm9pZCBHZXRUYXJnZXRzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdGFyZ2V0cykgY29uc3Q7CiAgIHZvaWQgQXBwZW5kVGFyZ2V0cyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIHRhcmdldHMpCiAgIHsKLSAgICBjbUFwcGVuZCh0aGlzLT5UYXJnZXRzLCB0YXJnZXRzKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPlRhcmdldHMsIHRhcmdldHMpOwogICB9CiAgIHZvaWQgU2V0RXhwb3J0U2V0KGNtRXhwb3J0U2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydENvbW1hbmQuY3h4IGIvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKaW5kZXggMmE2YmY1ZC4uZjMxNzU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKQEAgLTYsNiArNiw4IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCiAjaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKQEAgLTIyLDYgKzI0LDcgQEAKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgogCkBAIC0xODEsMTIgKzE4NCwzNCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIC8vIGlmIGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yIGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlIGZpbGUKKyAgLy8gYW5kIEFQUEVORCBpcyBub3Qgc3BlY2lmaWVkLCBpZiBDTVAwMTAzIGlzIE9MRCBpZ25vcmUgcHJldmlvdXMgZGVmaW5pdGlvbgorICAvLyBlbHNlIHJhaXNlIGFuIGVycm9yCisgIGlmIChnZy0+R2V0RXhwb3J0ZWRUYXJnZXRzRmlsZShmbmFtZSkgIT0gbnVsbHB0cikgeworICAgIHN3aXRjaCAobWYuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAxMDMpKSB7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46CisgICAgICAgIG1mLklzc3VlTWVzc2FnZSgKKyAgICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICAgICAgY21TdHJDYXQoY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMTAzKSwgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAiZXhwb3J0KCkgY29tbWFuZCBhbHJlYWR5IHNwZWNpZmllZCBmb3IgdGhlIGZpbGVcbiAgIiwKKyAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuRmlsZW5hbWUsICJcbkRpZCB5b3UgbWlzcyAnQVBQRU5EJyBrZXl3b3JkPyIpKTsKKyAgICAgICAgQ01fRkFMTFRIUk9VR0g7CisgICAgICBjYXNlIGNtUG9saWNpZXM6Ok9MRDoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlXG4gICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuRmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5EaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZD8iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKwogICAvLyBTZXR1cCBleHBvcnQgZmlsZSBnZW5lcmF0aW9uLgotICBjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciogZWJmZyA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4gZWJmZyA9IG51bGxwdHI7CiAgIGlmIChhbmRyb2lkKSB7Ci0gICAgZWJmZyA9IG5ldyBjbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yOworICAgIGViZmcgPSBjbTo6bWFrZV91bmlxdWU8Y21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvcj4oKTsKICAgfSBlbHNlIHsKLSAgICBlYmZnID0gbmV3IGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yOworICAgIGViZmcgPSBjbTo6bWFrZV91bmlxdWU8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I+KCk7CiAgIH0KICAgZWJmZy0+U2V0RXhwb3J0RmlsZShmbmFtZS5jX3N0cigpKTsKICAgZWJmZy0+U2V0TmFtZXNwYWNlKGFyZ3VtZW50cy5OYW1lc3BhY2UpOwpAQCAtMTk2LDcgKzIyMSw2IEBACiAgIH0gZWxzZSB7CiAgICAgZWJmZy0+U2V0VGFyZ2V0cyh0YXJnZXRzKTsKICAgfQotICBtZi5BZGRFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IoZWJmZyk7CiAgIGViZmctPlNldEV4cG9ydE9sZChhcmd1bWVudHMuRXhwb3J0T2xkKTsKIAogICAvLyBDb21wdXRlIHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZXhwb3J0ZWQuCkBAIC0yMDksMTAgKzIzMywxMSBAQAogICAgIGViZmctPkFkZENvbmZpZ3VyYXRpb24oY3QpOwogICB9CiAgIGlmIChleHBvcnRTZXQgIT0gbnVsbHB0cikgewotICAgIGdnLT5BZGRCdWlsZEV4cG9ydEV4cG9ydFNldChlYmZnKTsKKyAgICBnZy0+QWRkQnVpbGRFeHBvcnRFeHBvcnRTZXQoZWJmZy5nZXQoKSk7CiAgIH0gZWxzZSB7Ci0gICAgZ2ctPkFkZEJ1aWxkRXhwb3J0U2V0KGViZmcpOworICAgIGdnLT5BZGRCdWlsZEV4cG9ydFNldChlYmZnLmdldCgpKTsKICAgfQorICBtZi5BZGRFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3Ioc3RkOjptb3ZlKGViZmcpKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEZpbGVHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5jeHgKaW5kZXggYWVlZjYwMi4uZWEzMTQxNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5jeHgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgorI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21MaW5rSXRlbS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC02MCw5ICs2MSw5IEBACiAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKHRoaXMtPk1haW5JbXBvcnRGaWxlKTsKIH0KIAotY29uc3QgY2hhciogY21FeHBvcnRGaWxlR2VuZXJhdG9yOjpHZXRNYWluRXhwb3J0RmlsZU5hbWUoKSBjb25zdAorY29uc3Qgc3RkOjpzdHJpbmcmIGNtRXhwb3J0RmlsZUdlbmVyYXRvcjo6R2V0TWFpbkV4cG9ydEZpbGVOYW1lKCkgY29uc3QKIHsKLSAgcmV0dXJuIHRoaXMtPk1haW5JbXBvcnRGaWxlLmNfc3RyKCk7CisgIHJldHVybiB0aGlzLT5NYWluSW1wb3J0RmlsZTsKIH0KIAogYm9vbCBjbUV4cG9ydEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRlSW1wb3J0RmlsZSgpCkBAIC0yNzUsOCArMjc2LDcgQEAKICAgICAgICAgICAgICAgICA8PCAiXCJcbmhvd2V2ZXIgaXQgaXMgYWxzbyAiCiAgICAgICAgICAgICAgICAgICAgImEgc3ViZGlyZWN0b3J5IG9mIHRoZSAiCiAgICAgICAgICAgICAgICAgPDwgKGluQmluYXJ5ID8gImJ1aWxkIiA6ICJzb3VyY2UiKSA8PCAiIHRyZWU6XG4gICAgXCIiCi0gICAgICAgICAgICAgICAgPDwgKGluQmluYXJ5ID8gdG9wQmluYXJ5RGlyIDogdG9wU291cmNlRGlyKSA8PCAiXCIiCi0gICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgIDw8IChpbkJpbmFyeSA/IHRvcEJpbmFyeURpciA6IHRvcFNvdXJjZURpcikgPDwgIlwiXG4iOwogICAgICAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPklzc3VlTWVzc2FnZSgKICAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIHMuc3RyKCkpOwogICAgICAgICAgICAgICBDTV9GQUxMVEhST1VHSDsKQEAgLTY0MCw2ICs2NDAsOSBAQAogICBzdGQ6OnN0cmluZyBzZXA7CiAgIGlucHV0LmNsZWFyKCk7CiAgIGZvciAoc3RkOjpzdHJpbmcmIGxpIDogcGFydHMpIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpLCBDTUFLRV9ESVJFQ1RPUllfSURfU0VQKSkgeworICAgICAgY29udGludWU7CisgICAgfQogICAgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobGkpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICB0aGlzLT5BZGRUYXJnZXROYW1lc3BhY2UobGksIHRhcmdldCwgbWlzc2luZ1RhcmdldHMpOwogICAgIH0gZWxzZSB7CkBAIC0xMDYyLDYgKzEwNjUsMTIgQEAKICAgaWYgKHRhcmdldC0+SXNDRkJ1bmRsZU9uQXBwbGUoKSkgewogICAgIG9zIDw8ICJzZXRfcHJvcGVydHkoVEFSR0VUICIgPDwgdGFyZ2V0TmFtZSA8PCAiIFBST1BFUlRZIEJVTkRMRSAxKVxuIjsKICAgfQorCisgIC8vIGdlbmVyYXRlIERFUFJFQ0FUSU9OCisgIGlmICh0YXJnZXQtPklzRGVwcmVjYXRlZCgpKSB7CisgICAgb3MgPDwgInNldF9wcm9wZXJ0eShUQVJHRVQgIiA8PCB0YXJnZXROYW1lIDw8ICIgUFJPUEVSVFkgREVQUkVDQVRJT04gIgorICAgICAgIDw8IGNtRXhwb3J0RmlsZUdlbmVyYXRvckVzY2FwZSh0YXJnZXQtPkdldERlcHJlY2F0aW9uKCkpIDw8ICIpXG4iOworICB9CiAgIG9zIDw8ICJcbiI7CiB9CiAKQEAgLTExMDYsNyArMTExNSw3IEBACiAgICAgcmV0dXJuOwogICB9CiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgb3MgPDwgIiMgTWFrZSBzdXJlIHRoZSB0YXJnZXRzIHdoaWNoIGhhdmUgYmVlbiBleHBvcnRlZCBpbiBzb21lIG90aGVyIFxuIgorICBvcyA8PCAiIyBNYWtlIHN1cmUgdGhlIHRhcmdldHMgd2hpY2ggaGF2ZSBiZWVuIGV4cG9ydGVkIGluIHNvbWUgb3RoZXJcbiIKICAgICAgICAgIiMgZXhwb3J0IHNldCBleGlzdC5cbiIKICAgICAgICAgInVuc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X05PVF9GT1VORF9NRVNTQUdFX3RhcmdldHMpXG4iCiAgICAgICAgICJmb3JlYWNoKF90YXJnZXQgIjsKQEAgLTEyMDUsOSArMTIxNCw5IEBACiAgIHN0ZDo6c3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgIGF1dG8mIHRhcmdldFByb3BlcnRpZXMgPSBndGUtPlRhcmdldC0+R2V0UHJvcGVydGllcygpOwotICBpZiAoY29uc3QgY2hhciogZXhwb3J0UHJvcGVydGllcyA9CisgIGlmIChjbVByb3AgZXhwb3J0UHJvcGVydGllcyA9CiAgICAgICAgIHRhcmdldFByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZSgiRVhQT1JUX1BST1BFUlRJRVMiKSkgewotICAgIGZvciAoYXV0byYgcHJvcCA6IGNtRXhwYW5kZWRMaXN0KGV4cG9ydFByb3BlcnRpZXMpKSB7CisgICAgZm9yIChhdXRvJiBwcm9wIDogY21FeHBhbmRlZExpc3QoKmV4cG9ydFByb3BlcnRpZXMpKSB7CiAgICAgICAvKiBCbGFjayBsaXN0IHJlc2VydmVkIHByb3BlcnRpZXMgKi8KICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIklNUE9SVEVEXyIpIHx8CiAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTlRFUkZBQ0VfIikpIHsKQEAgLTEyMTgsMTUgKzEyMjcsMTUgQEAKICAgICAgICAgZXJyb3JNZXNzYWdlID0gZS5zdHIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgYXV0byBwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICAgICAgY21Qcm9wIHByb3BlcnR5VmFsdWUgPSB0YXJnZXRQcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA9PSBudWxscHRyKSB7CiAgICAgICAgIC8vIEFza2VkIHRvIGV4cG9ydCBhIHByb3BlcnR5IHRoYXQgaXNuJ3QgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0LiBEbyBub3QKICAgICAgICAgLy8gY29uc2lkZXIgdGhpcyBhbiBlcnJvciwgdGhlcmUncyBqdXN0IG5vdGhpbmcgdG8gZXhwb3J0LgogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZFZhbHVlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKAotICAgICAgICBwcm9wZXJ0eVZhbHVlLCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwQWxsR2VuZXJhdG9yRXhwcmVzc2lvbnMpOwotICAgICAgaWYgKGV2YWx1YXRlZFZhbHVlICE9IHByb3BlcnR5VmFsdWUpIHsKKyAgICAgICAgKnByb3BlcnR5VmFsdWUsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBBbGxHZW5lcmF0b3JFeHByZXNzaW9ucyk7CisgICAgICBpZiAoZXZhbHVhdGVkVmFsdWUgIT0gKnByb3BlcnR5VmFsdWUpIHsKICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgIGUgPDwgIlRhcmdldCBcIiIgPDwgZ3RlLT5UYXJnZXQtPkdldE5hbWUoKSA8PCAiXCIgY29udGFpbnMgcHJvcGVydHkgXCIiCiAgICAgICAgICAgPDwgcHJvcCA8PCAiXCIgaW4gRVhQT1JUX1BST1BFUlRJRVMgYnV0IHRoaXMgcHJvcGVydHkgY29udGFpbnMgYSAiCkBAIC0xMjM0LDcgKzEyNDMsNyBAQAogICAgICAgICBlcnJvck1lc3NhZ2UgPSBlLnN0cigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzW3Byb3BdID0gcHJvcGVydHlWYWx1ZTsKKyAgICAgIHByb3BlcnRpZXNbcHJvcF0gPSAqcHJvcGVydHlWYWx1ZTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmgKaW5kZXggMGQ2OTc3OS4uZTlkMGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUV4cG9ydEZpbGVHZW5lcmF0b3IuaApAQCAtNDYsNyArNDYsNyBAQAogCiAgIC8qKiBTZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZXhwb3J0IGZpbGUgdG8gZ2VuZXJhdGUuICAqLwogICB2b2lkIFNldEV4cG9ydEZpbGUoY29uc3QgY2hhciogbWFpbkZpbGUpOwotICBjb25zdCBjaGFyKiBHZXRNYWluRXhwb3J0RmlsZU5hbWUoKSBjb25zdDsKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldE1haW5FeHBvcnRGaWxlTmFtZSgpIGNvbnN0OwogCiAgIC8qKiBTZXQgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBwbGFjZSBleHBvcnRlZCB0YXJnZXQgbmFtZXMuICAqLwogICB2b2lkIFNldE5hbWVzcGFjZShjb25zdCBzdGQ6OnN0cmluZyYgbnMpIHsgdGhpcy0+TmFtZXNwYWNlID0gbnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKaW5kZXggMmQ3MzJjMS4uODBmNzc2ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBpZiAodGUtPkFyY2hpdmVHZW5lcmF0b3IpIHsKICAgICAgIGRlc3QgPSB0ZS0+QXJjaGl2ZUdlbmVyYXRvci0+R2V0RGVzdGluYXRpb24oIiIpOwogICAgIH0KLSAgICB0ZS0+VGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJfX2Rlc3QiLCBkZXN0LmNfc3RyKCkpOworICAgIHRlLT5UYXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoIl9fZGVzdCIsIGRlc3QpOwogICB9CiB9CiAKQEAgLTY2LDcgKzY2LDcgQEAKICAgb3MgPDwgIkxPQ0FMX01PRFVMRSA6PSAiOwogICBvcyA8PCB0YXJnZXROYW1lIDw8ICJcbiI7CiAgIG9zIDw8ICJMT0NBTF9TUkNfRklMRVMgOj0gJChfSU1QT1JUX1BSRUZJWCkvIjsKLSAgb3MgPDwgdGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnR5KCJfX2Rlc3QiKSA8PCAiLyI7CisgIG9zIDw8IHRhcmdldC0+VGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIl9fZGVzdCIpIDw8ICIvIjsKICAgc3RkOjpzdHJpbmcgY29uZmlnOwogICBpZiAoIXRoaXMtPkNvbmZpZ3VyYXRpb25zLmVtcHR5KCkpIHsKICAgICBjb25maWcgPSB0aGlzLT5Db25maWd1cmF0aW9uc1swXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yLmN4eAppbmRleCA2ZDI5Yzk5Li45ODdlYzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3IuY3h4CkBAIC0yNTgsMTUgKzI1OCw3IEBACiAKIHZvaWQgY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvcjo6UmVwbGFjZUluc3RhbGxQcmVmaXgoc3RkOjpzdHJpbmcmIGlucHV0KQogewotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IDA7Ci0gIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgbGFzdFBvcyA9IHBvczsKLQotICB3aGlsZSAoKHBvcyA9IGlucHV0LmZpbmQoIiQ8SU5TVEFMTF9QUkVGSVg+IiwgbGFzdFBvcykpICE9Ci0gICAgICAgICBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kUG9zID0gcG9zICsgc2l6ZW9mKCIkPElOU1RBTExfUFJFRklYPiIpIC0gMTsKLSAgICBpbnB1dC5yZXBsYWNlKHBvcywgZW5kUG9zIC0gcG9zLCAiJHtfSU1QT1JUX1BSRUZJWH0iKTsKLSAgICBsYXN0UG9zID0gZW5kUG9zOwotICB9CisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UmVwbGFjZUluc3RhbGxQcmVmaXgoaW5wdXQsICIke19JTVBPUlRfUFJFRklYfSIpOwogfQogCiBib29sIGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRlSW1wb3J0RmlsZUNvbmZpZygKQEAgLTUyNSwxMyArNTE3LDE0IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3I6Okluc3RhbGxOYW1lRGlyKAotICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykKKyAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjpzdHJpbmcgaW5zdGFsbF9uYW1lX2RpcjsKIAogICBjbU1ha2VmaWxlKiBtZiA9IHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpOwogICBpZiAobWYtPklzT24oIkNNQUtFX1BMQVRGT1JNX0hBU19JTlNUQUxMTkFNRSIpKSB7Ci0gICAgaW5zdGFsbF9uYW1lX2RpciA9IHRhcmdldC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgpOworICAgIGluc3RhbGxfbmFtZV9kaXIgPQorICAgICAgdGFyZ2V0LT5HZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKGNvbmZpZywgIiR7X0lNUE9SVF9QUkVGSVh9Iik7CiAgIH0KIAogICByZXR1cm4gaW5zdGFsbF9uYW1lX2RpcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmN4eAppbmRleCA4OTA5M2U5Li42MDExYmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRMaWJyYXJ5RGVwZW5kZW5jaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0TGlicmFyeURlcGVuZGVuY2llc0NvbW1hbmQuY3h4CkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0yMCw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY21UYXJnZXRMaW5rTGlicmFyeVR5cGUuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCitjbGFzcyBjbUxpc3RGaWxlQmFja3RyYWNlOworCiBzdGF0aWMgdm9pZCBGaW5hbEFjdGlvbihjbU1ha2VmaWxlJiBtYWtlZmlsZSwgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmQpCiB7CkBAIC00NiwxMSArNDksMTEgQEAKICAgLy8gdGhlIHByb2plY3QuCiAgIGNtYWtlKiBjbSA9IG1ha2VmaWxlLkdldENNYWtlSW5zdGFuY2UoKTsKICAgY21HbG9iYWxHZW5lcmF0b3IqIGdsb2JhbCA9IGNtLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+JiBsb2NhbHMgPSBnbG9iYWwtPkdldE1ha2VmaWxlcygpOworICBjb25zdCBhdXRvJiBsb2NhbHMgPSBnbG9iYWwtPkdldE1ha2VmaWxlcygpOwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IGxpYkRlcHNPbGQ7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbGliRGVwc05ldzsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBsaWJUeXBlczsKLSAgZm9yIChjbU1ha2VmaWxlKiBsb2NhbCA6IGxvY2FscykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsIDogbG9jYWxzKSB7CiAgICAgZm9yIChhdXRvIGNvbnN0JiB0Z3QgOiBsb2NhbC0+R2V0VGFyZ2V0cygpKSB7CiAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdGFyZ2V0LgogICAgICAgY21UYXJnZXQgY29uc3QmIHRhcmdldCA9IHRndC5zZWNvbmQ7CkBAIC0xNTAsOSArMTUzLDkgQEAKIAogICBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZW5hbWUgPSBhcmdzWzBdOwogICBib29sIGNvbnN0IGFwcGVuZCA9IGFyZ3Muc2l6ZSgpID4gMSAmJiBhcmdzWzFdID09ICJBUFBFTkQiOwotICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRGaW5hbEFjdGlvbigKLSAgICBbZmlsZW5hbWUsIGFwcGVuZF0oY21NYWtlZmlsZSYgbWFrZWZpbGUpIHsKLSAgICAgIEZpbmFsQWN0aW9uKG1ha2VmaWxlLCBmaWxlbmFtZSwgYXBwZW5kKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkR2VuZXJhdG9yQWN0aW9uKAorICAgIFtmaWxlbmFtZSwgYXBwZW5kXShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYpIHsKKyAgICAgIEZpbmFsQWN0aW9uKCpsZy5HZXRNYWtlZmlsZSgpLCBmaWxlbmFtZSwgYXBwZW5kKTsKICAgICB9KTsKIAogICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmN4eAppbmRleCBmYWZhNTFiLi44MDdlYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRUcnlDb21waWxlRmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0VHJ5Q29tcGlsZUZpbGVHZW5lcmF0b3IuY3h4CkBAIC03MCw3ICs3MCw4IEBACiAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UocHJvcCk7CiAKICAgY21UYXJnZXQgZHVtbXlIZWFkKCJ0cnlfY29tcGlsZV9kdW1teV9leGUiLCBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUsCi0gICAgICAgICAgICAgICAgICAgICBjbVRhcmdldDo6VmlzaWJpbGl0eU5vcm1hbCwgdGd0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCkpOworICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXQ6OlZpc2liaWxpdHlOb3JtYWwsIHRndC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLAorICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAKICAgY21HZW5lcmF0b3JUYXJnZXQgZ0R1bW15SGVhZCgmZHVtbXlIZWFkLCB0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCkpOwogCkBAIC05Niw5ICs5Nyw5IEBACiAKICAgICBwcm9wZXJ0aWVzW3BdID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwKTsKIAotICAgIGlmIChwLmZpbmQoIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyIpID09IDAgfHwKLSAgICAgICAgcC5maW5kKCJJTVBPUlRFRF9MSU5LX0RFUEVOREVOVF9MSUJSQVJJRVMiKSA9PSAwIHx8Ci0gICAgICAgIHAuZmluZCgiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIikgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgocCwgIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyIpIHx8CisgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwLCAiSU1QT1JURURfTElOS19ERVBFTkRFTlRfTElCUkFSSUVTIikgfHwKKyAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHAsICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKSkgewogICAgICAgc3RkOjpzdHJpbmcgZXZhbFJlc3VsdCA9CiAgICAgICAgIHRoaXMtPkZpbmRUYXJnZXRzKHAsIHRhcmdldCwgc3RkOjpzdHJpbmcoKSwgZW1pdHRlZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvci5oCmluZGV4IGE0NzJhMDYuLjJiOGQ1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IuaApAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtNzgsNyArNzksNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0U3VwcG9ydGVkR2xvYmFsR2VuZXJhdG9ycygpIGNvbnN0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQWxpYXNlczsKIAotICB2aXJ0dWFsIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqCisgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I+CiAgIENyZWF0ZUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKCkgY29uc3QgPSAwOwogCiAgIHZvaWQgQWRkU3VwcG9ydGVkR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlKTsKQEAgLTEwMCwxMCArMTAxLDEwIEBACiAgIHsKICAgfQogCi0gIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqIENyZWF0ZUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKCkKLSAgICBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4KKyAgQ3JlYXRlRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IoKSBjb25zdCBvdmVycmlkZQogICB7Ci0gICAgVCogcCA9IG5ldyBUOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yPiBwKG5ldyBUKTsKICAgICBwLT5TZXROYW1lKEdldE5hbWUoKSk7CiAgICAgcmV0dXJuIHA7CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYUNvZGVCbG9ja3NHZW5lcmF0b3IuY3h4CmluZGV4IDVhNWQ5NTkuLjQyZmQwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yLmN4eApAQCAtMywxMCArMywxMyBAQAogI2luY2x1ZGUgImNtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yLmgiCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtMjA5LDEzICsyMTIsMTMgQEAKICAgICAvLyBDb2xsZWN0IGFsbCBmaWxlcwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaXN0RmlsZXM7CiAgICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGl0LnNlY29uZCkgewotICAgICAgY21BcHBlbmQobGlzdEZpbGVzLCBsZy0+R2V0TWFrZWZpbGUoKS0+R2V0TGlzdEZpbGVzKCkpOworICAgICAgY206OmFwcGVuZChsaXN0RmlsZXMsIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRMaXN0RmlsZXMoKSk7CiAgICAgfQogCiAgICAgLy8gQ29udmVydAogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxpc3RGaWxlIDogbGlzdEZpbGVzKSB7CiAgICAgICAvLyBkb24ndCBwdXQgY21ha2UncyBvd24gZmlsZXMgaW50byB0aGUgcHJvamVjdCAoIzEyMTEwKToKLSAgICAgIGlmIChsaXN0RmlsZS5maW5kKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlUm9vdCgpKSA9PSAwKSB7CisgICAgICBpZiAoY21IYXNQcmVmaXgobGlzdEZpbGUsIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlUm9vdCgpKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIApAQCAtMjgzLDggKzI4Niw4IEBACiAgIC8vIGFkZCBhbGwgZXhlY3V0YWJsZSBhbmQgbGlicmFyeSB0YXJnZXRzIGFuZCBzb21lIG9mIHRoZSBHTE9CQUwKICAgLy8gYW5kIFVUSUxJVFkgdGFyZ2V0cwogICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogbGdzKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpOwogICAgICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDogewpAQCAtMjk4LDExICszMDEsMTEgQEAKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CiAgICAgICAgICAgLy8gQWRkIGFsbCB1dGlsaXR5IHRhcmdldHMsIGV4Y2VwdCB0aGUgTmlnaHRseS9Db250aW51b3VzLwogICAgICAgICAgIC8vIEV4cGVyaW1lbnRhbC0ic3ViInRhcmdldHMgYXMgZS5nLiBOaWdodGx5U3RhcnQKLSAgICAgICAgICBpZiAoKCh0YXJnZXROYW1lLmZpbmQoIk5pZ2h0bHkiKSA9PSAwKSAmJgorICAgICAgICAgIGlmICgoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJOaWdodGx5IikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJOaWdodGx5IikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJDb250aW51b3VzIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiQ29udGludW91cyIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiQ29udGludW91cyIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiRXhwZXJpbWVudGFsIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiRXhwZXJpbWVudGFsIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJFeHBlcmltZW50YWwiKSkpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTMxNSw3ICszMTgsNyBAQAogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZOiB7Ci0gICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gdGFyZ2V0OworICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IHRhcmdldC5nZXQoKTsKICAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXQoeG1sLCB0YXJnZXROYW1lLCBndCwgbWFrZSwgbGcsIGNvbXBpbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlQXJncyk7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgZmFzdFRhcmdldCA9IGNtU3RyQ2F0KHRhcmdldE5hbWUsICIvZmFzdCIpOwpAQCAtMzQxLDggKzM0NCw4IEBACiAKICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGxncykgewogICAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gbGctPkdldE1ha2VmaWxlKCk7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOgpAQCAtMzUyLDEzICszNTUsMTIgQEAKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6IC8vIGNhbiBoYXZlIHNvdXJjZXMgc2luY2UgMi42LjMKICAgICAgICAgewogICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7Ci0gICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gdGFyZ2V0OwotICAgICAgICAgIGd0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSk7CisgICAgICAgICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcygKKyAgICAgICAgICAgIHNvdXJjZXMsIG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQlVJTERfVFlQRSIpKTsKICAgICAgICAgICBmb3IgKGNtU291cmNlRmlsZSogcyA6IHNvdXJjZXMpIHsKICAgICAgICAgICAgIC8vIGRvbid0IGFkZCBzb3VyY2UgZmlsZXMgZnJvbSBVVElMSVRZIHRhcmdldCB3aGljaCBoYXZlIHRoZQogICAgICAgICAgICAgLy8gR0VORVJBVEVEIHByb3BlcnR5IHNldDoKLSAgICAgICAgICAgIGlmIChndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSAmJgorICAgICAgICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSAmJgogICAgICAgICAgICAgICAgIHMtPkdldElzR2VuZXJhdGVkKCkpIHsKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0zOTEsNyArMzkzLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQ2JwVW5pdCYgY2JwVW5pdCA9IGFsbEZpbGVzW2Z1bGxQYXRoXTsKLSAgICAgICAgICAgIGNicFVuaXQuVGFyZ2V0cy5wdXNoX2JhY2sodGFyZ2V0KTsKKyAgICAgICAgICAgIGNicFVuaXQuVGFyZ2V0cy5wdXNoX2JhY2sodGFyZ2V0LmdldCgpKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDogLy8gaW50ZW5kZWQgZmFsbHRocm91Z2gKQEAgLTU1OCwxOSArNTYwLDE5IEBACiAgICAgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogICAgICAgbGctPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgdGFyZ2V0LCAiQyIsIGJ1aWxkVHlwZSk7Ci0gICAgICBjbUFwcGVuZChhbGxJbmNsdWRlRGlycywgaW5jbHVkZXMpOworICAgICAgY206OmFwcGVuZChhbGxJbmNsdWRlRGlycywgaW5jbHVkZXMpOwogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIHN5c3RlbUluY2x1ZGVEaXJzID0gbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAogICAgICAgIkNNQUtFX0VYVFJBX0dFTkVSQVRPUl9DWFhfU1lTVEVNX0lOQ0xVREVfRElSUyIpOwogICAgIGlmICghc3lzdGVtSW5jbHVkZURpcnMuZW1wdHkoKSkgewotICAgICAgY21BcHBlbmQoYWxsSW5jbHVkZURpcnMsIGNtRXhwYW5kZWRMaXN0KHN5c3RlbUluY2x1ZGVEaXJzKSk7CisgICAgICBjbTo6YXBwZW5kKGFsbEluY2x1ZGVEaXJzLCBjbUV4cGFuZGVkTGlzdChzeXN0ZW1JbmNsdWRlRGlycykpOwogICAgIH0KIAogICAgIHN5c3RlbUluY2x1ZGVEaXJzID0gbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAogICAgICAgIkNNQUtFX0VYVFJBX0dFTkVSQVRPUl9DX1NZU1RFTV9JTkNMVURFX0RJUlMiKTsKICAgICBpZiAoIXN5c3RlbUluY2x1ZGVEaXJzLmVtcHR5KCkpIHsKLSAgICAgIGNtQXBwZW5kKGFsbEluY2x1ZGVEaXJzLCBjbUV4cGFuZGVkTGlzdChzeXN0ZW1JbmNsdWRlRGlycykpOworICAgICAgY206OmFwcGVuZChhbGxJbmNsdWRlRGlycywgY21FeHBhbmRlZExpc3Qoc3lzdGVtSW5jbHVkZURpcnMpKTsKICAgICB9CiAKICAgICBhdXRvIGVuZCA9IGNtUmVtb3ZlRHVwbGljYXRlcyhhbGxJbmNsdWRlRGlycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHRyYUNvZGVMaXRlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CmluZGV4IGM3Yjc0NTcuLmRlNDBjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC0xMTYsMTAgKzExNyw5IEBACiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXR2YWw7CiAgIC8vIGZvciBlYWNoIHRhcmdldCBpbiB0aGUgd29ya3NwYWNlIGNyZWF0ZSBhIGNvZGVsaXRlIHByb2plY3QKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBsZ3MgPQotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiBsZ3MpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBsdCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgY29uc3QgYXV0byYgbGdzID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IGxncykgeworICAgIGZvciAoY29uc3QgYXV0byYgbHQgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdHlwZSA9IGx0LT5HZXRUeXBlKCk7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0RGlyID0gbGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPSBsdC0+R2V0TmFtZSgpOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgICAgeG1sLT5BdHRyaWJ1dGUoIkFjdGl2ZSIsICJObyIpOwogICAgICAgICAgIHhtbC0+RW5kRWxlbWVudCgpOwogCi0gICAgICAgICAgQ3JlYXRlTmV3UHJvamVjdEZpbGUobHQsIGZpbGVuYW1lKTsKKyAgICAgICAgICBDcmVhdGVOZXdQcm9qZWN0RmlsZShsdC5nZXQoKSwgZmlsZW5hbWUpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIGJyZWFrOwpAQCAtMjY5LDkgKzI2OSw5IEBACiAKICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGxncykgewogICAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gbGctPkdldE1ha2VmaWxlKCk7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgcHJvamVjdFR5cGUgPSBDb2xsZWN0U291cmNlRmlsZXMobWFrZWZpbGUsIHRhcmdldCwgY0ZpbGVzLCBvdGhlckZpbGVzKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICAgIHByb2plY3RUeXBlID0KKyAgICAgICAgQ29sbGVjdFNvdXJjZUZpbGVzKG1ha2VmaWxlLCB0YXJnZXQuZ2V0KCksIGNGaWxlcywgb3RoZXJGaWxlcyk7CiAgICAgfQogICB9CiAKQEAgLTYzNCw3ICs2MzQsMTAgQEAKICAgaWYgKGdlbmVyYXRvciA9PSAiTk1ha2UgTWFrZWZpbGVzIiB8fCBnZW5lcmF0b3IgPT0gIk5pbmphIikgewogICAgIHNzIDw8IG1ha2U7CiAgIH0gZWxzZSBpZiAoZ2VuZXJhdG9yID09ICJNaW5HVyBNYWtlZmlsZXMiIHx8IGdlbmVyYXRvciA9PSAiVW5peCBNYWtlZmlsZXMiKSB7Ci0gICAgc3MgPDwgbWFrZSA8PCAiIC1mJChQcm9qZWN0UGF0aCkvTWFrZWZpbGUgLWogIiA8PCB0aGlzLT5DcHVDb3VudDsKKyAgICBzcyA8PCBtYWtlIDw8ICIgLWYkKFByb2plY3RQYXRoKS9NYWtlZmlsZSI7CisgICAgaWYgKHRoaXMtPkNwdUNvdW50ID4gMCkgeworICAgICAgc3MgPDwgIiAtaiAiIDw8IHRoaXMtPkNwdUNvdW50OworICAgIH0KICAgfQogICBpZiAoIXRhcmdldE5hbWUuZW1wdHkoKSkgewogICAgIHNzIDw8ICIgIiA8PCB0YXJnZXROYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmN4eAppbmRleCBiMjg2YWNmLi43MzdiMGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmN4eApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIApAQCAtOTgsNyArOTksNyBAQAogCiB2b2lkIGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6R2VuZXJhdGUoKQogewotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKICAgY29uc3QgY21NYWtlZmlsZSogbWYgPSBsZy0+R2V0TWFrZWZpbGUoKTsKIAogICBzdGQ6OnN0cmluZyBlY2xpcHNlVmVyc2lvbiA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfRUNMSVBTRV9WRVJTSU9OIik7CkBAIC0xNzUsNyArMTc2LDcgQEAKIAogdm9pZCBjbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3I6OkNyZWF0ZVNldHRpbmdzUmVzb3VyY2VQcmVmc0ZpbGUoKQogewotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKICAgY21NYWtlZmlsZSogbWYgPSBsZy0+R2V0TWFrZWZpbGUoKTsKIAogICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9CkBAIC0xODYsMTAgKzE4NywxMCBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGZvdXQgPDwgImVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgImVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xXG4iOwogICBjb25zdCBjaGFyKiBlbmNvZGluZyA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9FQ0xJUFNFX1JFU09VUkNFX0VOQ09ESU5HIik7CiAgIGlmIChlbmNvZGluZykgewotICAgIGZvdXQgPDwgImVuY29kaW5nLzxwcm9qZWN0Pj0iIDw8IGVuY29kaW5nIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICJlbmNvZGluZy88cHJvamVjdD49IiA8PCBlbmNvZGluZyA8PCAnXG4nOwogICB9CiB9CiAKQEAgLTE5OCw3ICsxOTksNyBAQAogICBhc3NlcnQodGhpcy0+SG9tZURpcmVjdG9yeSAhPSB0aGlzLT5Ib21lT3V0cHV0RGlyZWN0b3J5KTsKIAogICAvLyBzZXQgdXAgdGhlIHByb2plY3QgbmFtZTogPHByb2plY3Q+LVNvdXJjZUA8YmFzZVNvdXJjZVBhdGhOYW1lPgotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6R2VuZXJhdGVQcm9qZWN0TmFtZSgKICAgICBsZy0+R2V0UHJvamVjdE5hbWUoKSwgIlNvdXJjZSIsCiAgICAgY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpHZXRQYXRoQmFzZW5hbWUodGhpcy0+SG9tZURpcmVjdG9yeSkpOwpAQCAtMjMxLDkgKzIzMiw5IEBACiAKIHZvaWQgY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpBZGRFbnZWYXIoc3RkOjpvc3RyZWFtJiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudlZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3ImIGxnKQogewotICBjbU1ha2VmaWxlKiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOworICBjbU1ha2VmaWxlKiBtZiA9IGxnLkdldE1ha2VmaWxlKCk7CiAKICAgLy8gZ2V0IHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIGZyb20gdGhlIGNhY2hlIGFuZCB0aGVuCiAgIC8vIGZpZ3VyZSBvdXQgd2hpY2ggb25lIHRvIHVzZToKQEAgLTI0Myw3ICsyNDQsNyBAQAogCiAgIHN0ZDo6c3RyaW5nIGNhY2hlRW50cnlOYW1lID0gY21TdHJDYXQoIkNNQUtFX0VDTElQU0VfRU5WVkFSXyIsIGVudlZhcik7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBjYWNoZVZhbHVlID0KLSAgICBsZy0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNhY2hlRW50cnlOYW1lKTsKKyAgICBsZy5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoY2FjaGVFbnRyeU5hbWUpOwogCiAgIC8vIG5vdyB3ZSBoYXZlIGJvdGgsIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlCiAgIHN0ZDo6c3RyaW5nIHZhbHVlVG9Vc2U7CkBAIC0yNTQsOSArMjU1LDkgQEAKICAgICAvLyBUaGUgdmFyaWFibGUgaXMgaW4gdGhlIGVudiwgYnV0IG5vdCBpbiB0aGUgY2FjaGUuIFVzZSBpdCBhbmQgcHV0IGl0CiAgICAgLy8gaW4gdGhlIGNhY2hlCiAgICAgdmFsdWVUb1VzZSA9IGVudlZhclZhbHVlOwotICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oY2FjaGVFbnRyeU5hbWUsIHZhbHVlVG9Vc2UuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnlOYW1lLmNfc3RyKCksIGNtU3RhdGVFbnVtczo6U1RSSU5HLCB0cnVlKTsKLSAgICBtZi0+R2V0Q01ha2VJbnN0YW5jZSgpLT5TYXZlQ2FjaGUobGctPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKGNhY2hlRW50cnlOYW1lLCB2YWx1ZVRvVXNlLCBjYWNoZUVudHJ5TmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVFJJTkcsIHRydWUpOworICAgIG1mLT5HZXRDTWFrZUluc3RhbmNlKCktPlNhdmVDYWNoZShsZy5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7CiAgIH0gZWxzZSBpZiAoIWVudlZhclNldCAmJiBjYWNoZVZhbHVlICE9IG51bGxwdHIpIHsKICAgICAvLyBJdCBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZSwgYnV0IG5vdCBpbiB0aGUgZW52LCBzbyB1c2UgaXQgZnJvbSB0aGUgY2FjaGUKICAgICB2YWx1ZVRvVXNlID0gKmNhY2hlVmFsdWU7CkBAIC0yNjksMTAgKzI3MCwxMCBAQAogICAgIHZhbHVlVG9Vc2UgPSAqY2FjaGVWYWx1ZTsKICAgICBpZiAodmFsdWVUb1VzZS5maW5kKGVudlZhclZhbHVlKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgdmFsdWVUb1VzZSA9IGVudlZhclZhbHVlOwotICAgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbihjYWNoZUVudHJ5TmFtZSwgdmFsdWVUb1VzZS5jX3N0cigpLAorICAgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbihjYWNoZUVudHJ5TmFtZSwgdmFsdWVUb1VzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVFbnRyeU5hbWUuY19zdHIoKSwgY21TdGF0ZUVudW1zOjpTVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgbWYtPkdldENNYWtlSW5zdGFuY2UoKS0+U2F2ZUNhY2hlKGxnLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgICBtZi0+R2V0Q01ha2VJbnN0YW5jZSgpLT5TYXZlQ2FjaGUobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCkpOwogICAgIH0KICAgfQogCkBAIC0yODMsNyArMjg0LDcgQEAKIAogdm9pZCBjbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3I6OkNyZWF0ZVByb2plY3RGaWxlKCkKIHsKLSAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpWzBdOworICBjb25zdCBhdXRvJiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CiAgIGNtTWFrZWZpbGUqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSB0aGlzLT5Ib21lT3V0cHV0RGlyZWN0b3J5ICsgIi8ucHJvamVjdCI7CkBAIC0zNTAsMTUgKzM1MSwxNSBAQAogICAvLyBzZXQgdnN2YXJzMzIuYmF0IGVudmlyb25tZW50IGF2YWlsYWJsZSBhdCBDTWFrZSB0aW1lLAogICAvLyAgIGJ1dCBub3QgbmVjZXNzYXJpbHkgd2hlbiBlY2xpcHNlIGlzIG9wZW4KICAgaWYgKGNvbXBpbGVySWQgPT0gIk1TVkMiKSB7Ci0gICAgQWRkRW52VmFyKGVudmlyb25tZW50LCAiUEFUSCIsIGxnKTsKLSAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJJTkNMVURFIiwgbGcpOwotICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIkxJQiIsIGxnKTsKLSAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJMSUJQQVRIIiwgbGcpOworICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIlBBVEgiLCAqbGcpOworICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIklOQ0xVREUiLCAqbGcpOworICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIkxJQiIsICpsZyk7CisgICAgQWRkRW52VmFyKGVudmlyb25tZW50LCAiTElCUEFUSCIsICpsZyk7CiAgIH0gZWxzZSBpZiAoY29tcGlsZXJJZCA9PSAiSW50ZWwiKSB7CiAgICAgLy8gaWYgdGhlIGVudi52YXIgaXMgc2V0LCB1c2UgdGhpcyBvbmUgYW5kIHB1dCBpdCBpbiB0aGUgY2FjaGUKICAgICAvLyBpZiB0aGUgZW52LnZhciBpcyBub3Qgc2V0LCBidXQgdGhlIHZhbHVlIGlzIGluIHRoZSBjYWNoZSwKICAgICAvLyB1c2UgaXQgZnJvbSB0aGUgY2FjaGU6Ci0gICAgQWRkRW52VmFyKGVudmlyb25tZW50LCAiSU5URUxfTElDRU5TRV9GSUxFIiwgbGcpOworICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIklOVEVMX0xJQ0VOU0VfRklMRSIsICpsZyk7CiAgIH0KICAgQXBwZW5kRGljdGlvbmFyeSh4bWwsICJvcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmVudmlyb25tZW50IiwKICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC5zdHIoKSk7CkBAIC00MTQsOSArNDE1LDkgQEAKICAgICB4bWwuRWxlbWVudCgibmF0dXJlIiwgbik7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogZXh0cmFOYXR1cmVzUHJvcCA9CisgIGlmIChjbVByb3AgZXh0cmFOYXR1cmVzUHJvcCA9CiAgICAgICAgIG1mLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiRUNMSVBTRV9FWFRSQV9OQVRVUkVTIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXh0cmFOYXR1cmVzID0gY21FeHBhbmRlZExpc3QoZXh0cmFOYXR1cmVzUHJvcCk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4dHJhTmF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KCpleHRyYU5hdHVyZXNQcm9wKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuIDogZXh0cmFOYXR1cmVzKSB7CiAgICAgICB4bWwuRWxlbWVudCgibmF0dXJlIiwgbik7CiAgICAgfQpAQCAtNDk0LDExICs0OTUsMTEgQEAKICAgY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpBcHBlbmRMaW5rZWRSZXNvdXJjZSgKICAgICB4bWwsIGxpbmtOYW1lLCAidmlydHVhbDovdmlydHVhbCIsIFZpcnR1YWxGb2xkZXIpOwogCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CiAgICAgY21NYWtlZmlsZSogbWFrZWZpbGUgPSBsZy0+R2V0TWFrZWZpbGUoKTsKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0gbGctPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgICBjb25zdCBhdXRvJiB0YXJnZXRzID0gbGctPkdldEdlbmVyYXRvclRhcmdldHMoKTsKIAotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtOYW1lMiA9IGNtU3RyQ2F0KGxpbmtOYW1lLCAnLycpOwogICAgICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKQEAgLTUxOSwxMCArNTIwLDkgQEAKICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUdyb3VwPiBzb3VyY2VHcm91cHMgPQogICAgICAgICAgICAgbWFrZWZpbGUtPkdldFNvdXJjZUdyb3VwcygpOwogICAgICAgICAgIC8vIGdldCB0aGUgZmlsZXMgZnJvbSB0aGUgc291cmNlIGxpc3RzIHRoZW4gYWRkIHRoZW0gdG8gdGhlIGdyb3VwcwotICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IGNvbnN0X2Nhc3Q8Y21HZW5lcmF0b3JUYXJnZXQqPih0YXJnZXQpOwogICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IGZpbGVzOwotICAgICAgICAgIGd0LT5HZXRTb3VyY2VGaWxlcyhmaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIikpOworICAgICAgICAgIHRhcmdldC0+R2V0U291cmNlRmlsZXMoCisgICAgICAgICAgICBmaWxlcywgbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIikpOwogICAgICAgICAgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IGZpbGVzKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIGZpbGUgdG8gdGhlIGxpc3Qgb2Ygc291cmNlcy4KICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBzb3VyY2UgPSBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCk7CkBAIC02MDYsNyArNjA2LDcgQEAKIHsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGVtbWl0ZWQ7CiAKLSAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpWzBdOworICBjb25zdCBhdXRvJiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CiAgIGNvbnN0IGNtTWFrZWZpbGUqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSB0aGlzLT5Ib21lT3V0cHV0RGlyZWN0b3J5ICsgIi8uY3Byb2plY3QiOwpAQCAtNzUyLDcgKzc1Miw3IEBACiAKICAgLy8gYWRkIHByZS1wcm9jZXNzb3IgZGVmaW5pdGlvbnMgdG8gYWxsb3cgZWNsaXBzZSB0byBncmF5IG91dCBzZWN0aW9ucwogICBlbW1pdGVkLmNsZWFyKCk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZ2VuIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgewogCiAgICAgaWYgKGNvbnN0IGNoYXIqIGNkZWZzID0KICAgICAgICAgICBsZ2VuLT5HZXRNYWtlZmlsZSgpLT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIpKSB7CkBAIC04NTksMTYgKzg1OSwxNSBAQAogCiAgIC8vIGluY2x1ZGUgZGlycwogICBlbW1pdGVkLmNsZWFyKCk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0KLSAgICAgIGxnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKKyAgICBjb25zdCBhdXRvJiB0YXJnZXRzID0gbGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZURpcnM7CiAgICAgICBzdGQ6OnN0cmluZyBjb25maWcgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKTsKLSAgICAgIGxnZW4tPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlRGlycywgdGFyZ2V0LCAiQyIsIGNvbmZpZyk7CisgICAgICBsZ2VuLT5HZXRJbmNsdWRlRGlyZWN0b3JpZXMoaW5jbHVkZURpcnMsIHRhcmdldC5nZXQoKSwgIkMiLCBjb25maWcpOwogICAgICAgdGhpcy0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKHhtbCwgaW5jbHVkZURpcnMsIGVtbWl0ZWQpOwogICAgIH0KICAgfQpAQCAtOTE1LDE2ICs5MTQsMTUgQEAKIAogICAvLyBhZGQgYWxsIGV4ZWN1dGFibGUgYW5kIGxpYnJhcnkgdGFyZ2V0cyBhbmQgc29tZSBvZiB0aGUgR0xPQkFMCiAgIC8vIGFuZCBVVElMSVRZIHRhcmdldHMKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZ2VuIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPQotICAgICAgbGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIGxnZW4gOiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CisgICAgY29uc3QgYXV0byYgdGFyZ2V0cyA9IGxnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKTsKICAgICBzdGQ6OnN0cmluZyBzdWJkaXIgPSBsZ2VuLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aCgKICAgICAgIHRoaXMtPkhvbWVPdXRwdXREaXJlY3RvcnksIGxnZW4tPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CiAgICAgaWYgKHN1YmRpciA9PSAiLiIpIHsKICAgICAgIHN1YmRpci5jbGVhcigpOwogICAgIH0KIAotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKICAgICAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6IHsKQEAgLTkzOCwxMSArOTM2LDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgogICAgICAgICAgIC8vIEFkZCBhbGwgdXRpbGl0eSB0YXJnZXRzLCBleGNlcHQgdGhlIE5pZ2h0bHkvQ29udGludW91cy8KICAgICAgICAgICAvLyBFeHBlcmltZW50YWwtInN1YiJ0YXJnZXRzIGFzIGUuZy4gTmlnaHRseVN0YXJ0Ci0gICAgICAgICAgaWYgKCgodGFyZ2V0TmFtZS5maW5kKCJOaWdodGx5IikgPT0gMCkgJiYKKyAgICAgICAgICBpZiAoKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiTmlnaHRseSIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiTmlnaHRseSIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiQ29udGludW91cyIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkNvbnRpbnVvdXMiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkNvbnRpbnVvdXMiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkV4cGVyaW1lbnRhbCIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkV4cGVyaW1lbnRhbCIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiRXhwZXJpbWVudGFsIikpKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC05NzUsOCArOTczLDcgQEAKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNsZWFuQXJncyA9CiAgICAgICAgICAgICAgIGNtU3RyQ2F0KCItRSBjaGRpciBcIiIsIGxnZW4tPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIlwiIFwiIiwgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICJcIiAtUCBcIiIpOwotICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gdGFyZ2V0OwotICAgICAgICAgICAgY2xlYW5BcmdzICs9IGxnZW4tPkdldFRhcmdldERpcmVjdG9yeShndCk7CisgICAgICAgICAgICBjbGVhbkFyZ3MgKz0gbGdlbi0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRhcmdldC5nZXQoKSk7CiAgICAgICAgICAgICBjbGVhbkFyZ3MgKz0gIi9jbWFrZV9jbGVhbi5jbWFrZVwiIjsKICAgICAgICAgICAgIGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6QXBwZW5kVGFyZ2V0KAogICAgICAgICAgICAgICB4bWwsICJDbGVhbiIsIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBjbGVhbkFyZ3MsCkBAIC0xMDM2LDkgKzEwMzMsOSBAQAogICB4bWwuRW5kRWxlbWVudCgpOyAvLyBzdG9yYWdlTW9kdWxlCiAKICAgLy8gQXBwZW5kIGFkZGl0aW9uYWwgY3Byb2plY3QgY29udGVudHMgd2l0aG91dCBhcHBseWluZyBhbnkgWE1MIGZvcm1hdHRpbmcKLSAgaWYgKGNvbnN0IGNoYXIqIGV4dHJhQ1Byb2plY3RDb250ZW50cyA9CisgIGlmIChjbVByb3AgZXh0cmFDUHJvamVjdENvbnRlbnRzID0KICAgICAgICAgbWYtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJFQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTIikpIHsKLSAgICBmb3V0IDw8IGV4dHJhQ1Byb2plY3RDb250ZW50czsKKyAgICBmb3V0IDw8ICpleHRyYUNQcm9qZWN0Q29udGVudHM7CiAgIH0KIAogICB4bWwuRW5kRWxlbWVudCgpOyAvLyBjcHJvamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5oIGIvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5oCmluZGV4IGZmNGM1OWUuLmE3YWE1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmgKQEAgLTg2LDcgKzg2LDcgQEAKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGVtaXR0ZWREaXJzKTsKIAogICBzdGF0aWMgdm9pZCBBZGRFbnZWYXIoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIGVudlZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAogICB2b2lkIFdyaXRlR3JvdXBzKHN0ZDo6dmVjdG9yPGNtU291cmNlR3JvdXA+IGNvbnN0JiBzb3VyY2VHcm91cHMsCiAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxpbmtOYW1lLCBjbVhNTFdyaXRlciYgeG1sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYUthdGVHZW5lcmF0b3IuY3h4CmluZGV4IGU4YzlkZDAuLjI3MWJiZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmN4eApAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJjbUV4dHJhS2F0ZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtNDAsMjEgKzQxLDIxIEBACiAKIHZvaWQgY21FeHRyYUthdGVHZW5lcmF0b3I6OkdlbmVyYXRlKCkKIHsKLSAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpWzBdOworICBjb25zdCBhdXRvJiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CiAgIGNvbnN0IGNtTWFrZWZpbGUqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CiAgIHRoaXMtPlByb2plY3ROYW1lID0gdGhpcy0+R2VuZXJhdGVQcm9qZWN0TmFtZSgKICAgICBsZy0+R2V0UHJvamVjdE5hbWUoKSwgbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIiksCiAgICAgdGhpcy0+R2V0UGF0aEJhc2VuYW1lKGxnLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSkpOwogICB0aGlzLT5Vc2VOaW5qYSA9ICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE5hbWUoKSA9PSAiTmluamEiKTsKIAotICB0aGlzLT5DcmVhdGVLYXRlUHJvamVjdEZpbGUobGcpOwotICB0aGlzLT5DcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZShsZyk7CisgIHRoaXMtPkNyZWF0ZUthdGVQcm9qZWN0RmlsZSgqbGcpOworICB0aGlzLT5DcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZSgqbGcpOwogfQogCiB2b2lkIGNtRXh0cmFLYXRlR2VuZXJhdG9yOjpDcmVhdGVLYXRlUHJvamVjdEZpbGUoCi0gIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBjb25zdAorICBjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBjbVN0ckNhdChsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksICIvLmthdGVwcm9qZWN0Iik7CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gY21TdHJDYXQobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCksICIvLmthdGVwcm9qZWN0Iik7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0KGZpbGVuYW1lKTsKICAgaWYgKCFmb3V0KSB7CiAgICAgcmV0dXJuOwpAQCAtNjQsMjEgKzY1LDIxIEBACiAgIGZvdXQgPDwKICAgICAie1xuIgogICAgICJcdFwibmFtZVwiOiBcIiIgPDwgdGhpcy0+UHJvamVjdE5hbWUgPDwgIlwiLFxuIgotICAgICJcdFwiZGlyZWN0b3J5XCI6IFwiIiA8PCBsZy0+R2V0U291cmNlRGlyZWN0b3J5KCkgPDwgIlwiLFxuIgorICAgICJcdFwiZGlyZWN0b3J5XCI6IFwiIiA8PCBsZy5HZXRTb3VyY2VEaXJlY3RvcnkoKSA8PCAiXCIsXG4iCiAgICAgIlx0XCJmaWxlc1wiOiBbIHsgIiA8PCB0aGlzLT5HZW5lcmF0ZUZpbGVzU3RyaW5nKGxnKSA8PCAifSBdLFxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIHRoaXMtPldyaXRlVGFyZ2V0cyhsZywgZm91dCk7CiAgIGZvdXQgPDwgIn1cbiI7CiB9CiAKLXZvaWQgY21FeHRyYUthdGVHZW5lcmF0b3I6OldyaXRlVGFyZ2V0cyhjb25zdCBjbUxvY2FsR2VuZXJhdG9yKiBsZywKK3ZvaWQgY21FeHRyYUthdGVHZW5lcmF0b3I6OldyaXRlVGFyZ2V0cyhjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZvdXQpIGNvbnN0CiB7Ci0gIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CisgIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gbGcuR2V0TWFrZWZpbGUoKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2UgPSBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2VBcmdzID0KICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0tBVEVfTUFLRV9BUkdVTUVOVFMiKTsKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGhvbWVPdXRwdXREaXIgPSBsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBob21lT3V0cHV0RGlyID0gbGcuR2V0QmluYXJ5RGlyZWN0b3J5KCk7CiAKICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBmb3V0IDw8CkBAIC0xMDksMTQgKzExMCwxMiBAQAogCiAgIC8vIGFkZCBhbGwgZXhlY3V0YWJsZSBhbmQgbGlicmFyeSB0YXJnZXRzIGFuZCBzb21lIG9mIHRoZSBHTE9CQUwKICAgLy8gYW5kIFVUSUxJVFkgdGFyZ2V0cwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDoKLSAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9Ci0gICAgICBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwogICAgIHN0ZDo6c3RyaW5nIGN1cnJlbnREaXIgPSBsb2NhbEdlbi0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGJvb2wgdG9wTGV2ZWwgPSAoY3VycmVudERpciA9PSBsb2NhbEdlbi0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwogCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHRhcmdldE5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKICAgICAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6IHsKQEAgLTE0NSwxMSArMTQ0LDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgogICAgICAgICAgIC8vIEFkZCBhbGwgdXRpbGl0eSB0YXJnZXRzLCBleGNlcHQgdGhlIE5pZ2h0bHkvQ29udGludW91cy8KICAgICAgICAgICAvLyBFeHBlcmltZW50YWwtInN1YiJ0YXJnZXRzIGFzIGUuZy4gTmlnaHRseVN0YXJ0Ci0gICAgICAgICAgaWYgKCgodGFyZ2V0TmFtZS5maW5kKCJOaWdodGx5IikgPT0gMCkgJiYKKyAgICAgICAgICBpZiAoKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiTmlnaHRseSIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiTmlnaHRseSIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiQ29udGludW91cyIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkNvbnRpbnVvdXMiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkNvbnRpbnVvdXMiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkV4cGVyaW1lbnRhbCIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkV4cGVyaW1lbnRhbCIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiRXhwZXJpbWVudGFsIikpKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0yMDUsMTAgKzIwNCwxMCBAQAogfQogCiB2b2lkIGNtRXh0cmFLYXRlR2VuZXJhdG9yOjpDcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZSgKLSAgY29uc3QgY21Mb2NhbEdlbmVyYXRvciogbGcpIGNvbnN0CisgIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKSBjb25zdAogewogICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9Ci0gICAgY21TdHJDYXQobGctPkdldEJpbmFyeURpcmVjdG9yeSgpLCAnLycsIHRoaXMtPlByb2plY3ROYW1lLCAiLmthdGVwcm9qZWN0Iik7CisgICAgY21TdHJDYXQobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCksICcvJywgdGhpcy0+UHJvamVjdE5hbWUsICIua2F0ZXByb2plY3QiKTsKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZvdXQoZmlsZW5hbWUpOwogICBpZiAoIWZvdXQpIHsKICAgICByZXR1cm47CkBAIC0yMTksMjYgKzIxOCwyNSBAQAogfQogCiBzdGQ6OnN0cmluZyBjbUV4dHJhS2F0ZUdlbmVyYXRvcjo6R2VuZXJhdGVGaWxlc1N0cmluZygKLSAgY29uc3QgY21Mb2NhbEdlbmVyYXRvciogbGcpIGNvbnN0CisgIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKSBjb25zdAogewotICBzdGQ6OnN0cmluZyBzID0gY21TdHJDYXQobGctPkdldFNvdXJjZURpcmVjdG9yeSgpLCAiLy5naXQiKTsKKyAgc3RkOjpzdHJpbmcgcyA9IGNtU3RyQ2F0KGxnLkdldFNvdXJjZURpcmVjdG9yeSgpLCAiLy5naXQiKTsKICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocykpIHsKICAgICByZXR1cm4gIlwiZ2l0XCI6IDEgIjsKICAgfQogCi0gIHMgPSBjbVN0ckNhdChsZy0+R2V0U291cmNlRGlyZWN0b3J5KCksICIvLnN2biIpOworICBzID0gY21TdHJDYXQobGcuR2V0U291cmNlRGlyZWN0b3J5KCksICIvLnN2biIpOwogICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhzKSkgewogICAgIHJldHVybiAiXCJzdm5cIjogMSAiOwogICB9CiAKLSAgcyA9IGNtU3RyQ2F0KGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgJy8nKTsKKyAgcyA9IGNtU3RyQ2F0KGxnLkdldFNvdXJjZURpcmVjdG9yeSgpLCAnLycpOwogCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBmaWxlczsKICAgc3RkOjpzdHJpbmcgdG1wOwotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIGxncyA9Ci0gICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKTsKKyAgY29uc3QgYXV0byYgbGdzID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKTsKIAotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gOiBsZ3MpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZ2VuIDogbGdzKSB7CiAgICAgY21NYWtlZmlsZSogbWFrZWZpbGUgPSBsZ2VuLT5HZXRNYWtlZmlsZSgpOwogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGlzdEZpbGVzID0gbWFrZWZpbGUtPkdldExpc3RGaWxlcygpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxpc3RGaWxlIDogbGlzdEZpbGVzKSB7CkBAIC0yNDgsOCArMjQ2LDcgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiYgc291cmNlcyA9IG1ha2VmaWxlLT5HZXRTb3VyY2VGaWxlcygpOwotICAgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IHNvdXJjZXMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNmIDogbWFrZWZpbGUtPkdldFNvdXJjZUZpbGVzKCkpIHsKICAgICAgIGlmIChzZi0+R2V0SXNHZW5lcmF0ZWQoKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5oIGIvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmgKaW5kZXggYmUxMzc2YS4uMWZiODFiNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmgKQEAgLTI1LDE2ICsyNSwxNiBAQAogICB2b2lkIEdlbmVyYXRlKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gIHZvaWQgQ3JlYXRlS2F0ZVByb2plY3RGaWxlKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBjb25zdDsKLSAgdm9pZCBDcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZShjb25zdCBjbUxvY2FsR2VuZXJhdG9yKiBsZykgY29uc3Q7Ci0gIHZvaWQgV3JpdGVUYXJnZXRzKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnLAorICB2b2lkIENyZWF0ZUthdGVQcm9qZWN0RmlsZShjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZykgY29uc3Q7CisgIHZvaWQgQ3JlYXRlRHVtbXlLYXRlUHJvamVjdEZpbGUoY29uc3QgY21Mb2NhbEdlbmVyYXRvciYgbGcpIGNvbnN0OworICB2b2lkIFdyaXRlVGFyZ2V0cyhjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZywKICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBmb3V0KSBjb25zdDsKICAgdm9pZCBBcHBlbmRUYXJnZXQoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFrZSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2VBcmdzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGhvbWVPdXRwdXREaXIpIGNvbnN0OwogCi0gIHN0ZDo6c3RyaW5nIEdlbmVyYXRlRmlsZXNTdHJpbmcoY29uc3QgY21Mb2NhbEdlbmVyYXRvciogbGcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZW5lcmF0ZUZpbGVzU3RyaW5nKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgR2V0UGF0aEJhc2VuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdGVQcm9qZWN0TmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdHlwZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5jeHgKaW5kZXggNDk1MzI0Yy4uNWIxMzZlMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5jeHgKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSAiY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmgiCiAKICNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtMTgyLDggKzE4Myw4IEBACiAgIC8vIGFuZCBVVElMSVRZIHRhcmdldHMKICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGxncykgewogICAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gbGctPkdldE1ha2VmaWxlKCk7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpOwogICAgICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDogewpAQCAtMTk4LDExICsxOTksMTEgQEAKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CiAgICAgICAgICAgLy8gQWRkIGFsbCB1dGlsaXR5IHRhcmdldHMsIGV4Y2VwdCB0aGUgTmlnaHRseS9Db250aW51b3VzLwogICAgICAgICAgIC8vIEV4cGVyaW1lbnRhbC0ic3ViInRhcmdldHMgYXMgZS5nLiBOaWdodGx5U3RhcnQKLSAgICAgICAgICBpZiAoKCh0YXJnZXROYW1lLmZpbmQoIk5pZ2h0bHkiKSA9PSAwKSAmJgorICAgICAgICAgIGlmICgoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJOaWdodGx5IikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJOaWdodGx5IikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJDb250aW51b3VzIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiQ29udGludW91cyIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiQ29udGludW91cyIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiRXhwZXJpbWVudGFsIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiRXhwZXJpbWVudGFsIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJFeHBlcmltZW50YWwiKSkpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTIxNiwxMSArMjE3LDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlk6IHsKLSAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXQoZm91dCwgdGFyZ2V0TmFtZSwgbGcsIHRhcmdldCwgbWFrZS5jX3N0cigpLAorICAgICAgICAgIHRoaXMtPkFwcGVuZFRhcmdldChmb3V0LCB0YXJnZXROYW1lLCBsZywgdGFyZ2V0LmdldCgpLCBtYWtlLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VmaWxlLCBjb21waWxlci5jX3N0cigpLCBzb3VyY2VGaWxlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBmYXN0VGFyZ2V0ID0gY21TdHJDYXQodGFyZ2V0TmFtZSwgIi9mYXN0Iik7Ci0gICAgICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0KGZvdXQsIGZhc3RUYXJnZXQsIGxnLCB0YXJnZXQsIG1ha2UuY19zdHIoKSwKKyAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXQoZm91dCwgZmFzdFRhcmdldCwgbGcsIHRhcmdldC5nZXQoKSwgbWFrZS5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlZmlsZSwgY29tcGlsZXIuY19zdHIoKSwgc291cmNlRmlsZUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgIH0gYnJlYWs7CkBAIC0yOTYsOCArMjk3LDcgQEAKICAgZm91dCA8PCAiXHR7XG5cdFx0XHRcIm5hbWVcIjogXCIiIDw8IGxnLT5HZXRQcm9qZWN0TmFtZSgpIDw8ICIgLSAiCiAgICAgICAgPDwgdGFyZ2V0TmFtZSA8PCAiXCIsXG4iOwogICBmb3V0IDw8ICJcdFx0XHRcImNtZFwiOiBbIgotICAgICAgIDw8IHRoaXMtPkJ1aWxkTWFrZUNvbW1hbmQobWFrZSwgbWFrZWZpbGVOYW1lLmNfc3RyKCksIHRhcmdldE5hbWUpCi0gICAgICAgPDwgIl0sXG4iOworICAgICAgIDw8IHRoaXMtPkJ1aWxkTWFrZUNvbW1hbmQobWFrZSwgbWFrZWZpbGVOYW1lLCB0YXJnZXROYW1lKSA8PCAiXSxcbiI7CiAgIGZvdXQgPDwgIlx0XHRcdFwid29ya2luZ19kaXJcIjogXCIke3Byb2plY3RfcGF0aH1cIixcbiI7CiAgIGZvdXQgPDwgIlx0XHRcdFwiZmlsZV9yZWdleFwiOiBcIiIKICAgICAgICAgICAiXiguLlteOl0qKSg/Ojp8XFxcXCgpKFswLTldKykoPzo6fFxcXFwpKSg/OihbMC05XSspOik/XFxcXHMqKC4qKSIKQEAgLTMwOCw3ICszMDgsOCBAQAogLy8gQ3JlYXRlIHRoZSBjb21tYW5kIGxpbmUgZm9yIGJ1aWxkaW5nIHRoZSBnaXZlbiB0YXJnZXQgdXNpbmcgdGhlIHNlbGVjdGVkCiAvLyBtYWtlCiBzdGQ6OnN0cmluZyBjbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3I6OkJ1aWxkTWFrZUNvbW1hbmQoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlLCBjb25zdCBjaGFyKiBtYWtlZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlZmlsZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCkKIHsKICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGNtU3RyQ2F0KCciJywgbWFrZSwgJyInKTsKICAgc3RkOjpzdHJpbmcgZ2VuZXJhdG9yID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXROYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmgKaW5kZXggN2U4ZjJkNC4uMDc4Y2ZlNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3IuaApAQCAtNDQsNyArNDQsOCBAQAogICAvKiogUmV0dXJucyB0aGUgYnVpbGQgY29tbWFuZCB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIHRvIGJ1aWxkIHRoZQogICAgKiAgc3BlY2lmaWVkIHRhcmdldC4KICAgICovCi0gIHN0ZDo6c3RyaW5nIEJ1aWxkTWFrZUNvbW1hbmQoY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2UsIGNvbnN0IGNoYXIqIG1ha2VmaWxlLAorICBzdGQ6OnN0cmluZyBCdWlsZE1ha2VDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0KTsKICAgLyoqIEFwcGVuZHMgdGhlIHNwZWNpZmllZCB0YXJnZXQgdG8gdGhlIGdlbmVyYXRlZCBwcm9qZWN0IGZpbGUgYXMgYSBTdWJsaW1lCiAgICAqICBUZXh0IGJ1aWxkIHN5c3RlbS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZMVEtXcmFwVUlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUZMVEtXcmFwVUlDb21tYW5kLmN4eAppbmRleCAxMTg0NGU0Li5kODg2MTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GTFRLV3JhcFVJQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRkxUS1dyYXBVSUNvbW1hbmQuY3h4CkBAIC02LDE1ICs2LDIwIEBACiAKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKyNpbmNsdWRlICJjbWFrZS5oIgogCiBjbGFzcyBjbVRhcmdldDsKIAotc3RhdGljIHZvaWQgRmluYWxBY3Rpb24oY21NYWtlZmlsZSYgbWFrZWZpbGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKQorc3RhdGljIHZvaWQgRmluYWxBY3Rpb24oY21NYWtlZmlsZSYgbWFrZWZpbGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkKIHsKICAgLy8gcGVvcGxlIHNob3VsZCBhZGQgdGhlIHNyY3MgdG8gdGhlIHRhcmdldCB0aGVtc2VsdmVzLCBidXQgdGhlIG9sZCBjb21tYW5kCiAgIC8vIGRpZG4ndCBzdXBwb3J0IHRoYXQsIHNvIGNoZWNrIGFuZCBzZWUgaWYgdGhleSBhZGRlZCB0aGUgZmlsZXMgaW4gYW5kIGlmCkBAIC0yNiw3ICszMSw4IEBACiAgICAgICAiLiAgVGhlIHByb2JsZW0gd2FzIGZvdW5kIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHNvdXJjZSBkaXJlY3Rvcnk6ICIsCiAgICAgICBtYWtlZmlsZS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksCiAgICAgICAiLiAgVGhpcyBGTFRLX1dSQVBfVUkgY2FsbCB3aWxsIGJlIGlnbm9yZWQuIik7Ci0gICAgY21TeXN0ZW1Ub29sczo6TWVzc2FnZShtc2csICJXYXJuaW5nIik7CisgICAgbWFrZWZpbGUuR2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkFVVEhPUl9FUlJPUiwgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxmYnQpOwogICB9CiB9CiAKQEAgLTExNiw3ICsxMjIsOSBAQAogICBzdGQ6OnN0cmluZyBjb25zdCB2YXJOYW1lID0gdGFyZ2V0ICsgIl9GTFRLX1VJX1NSQ1MiOwogICBtZi5BZGREZWZpbml0aW9uKHZhck5hbWUsIHNvdXJjZUxpc3RWYWx1ZSk7CiAKLSAgbWYuQWRkRmluYWxBY3Rpb24oCi0gICAgW3RhcmdldF0oY21NYWtlZmlsZSYgbWFrZWZpbGUpIHsgRmluYWxBY3Rpb24obWFrZWZpbGUsIHRhcmdldCk7IH0pOworICBtZi5BZGRHZW5lcmF0b3JBY3Rpb24oCisgICAgW3RhcmdldF0oY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpIHsKKyAgICAgIEZpbmFsQWN0aW9uKCpsZy5HZXRNYWtlZmlsZSgpLCB0YXJnZXQsIGxmYnQpOworICAgIH0pOwogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmN4eCBiL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmN4eAppbmRleCBmNDE5OTk3Li40NGJhOTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5jeHgKKysrIGIvU291cmNlL2NtRmlsZUFQSUNNYWtlRmlsZXMuY3h4CkBAIC0yLDYgKzIsNyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21GaWxlQVBJQ01ha2VGaWxlcy5oIgogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKQEAgLTY3LDcgKzY4LDcgQEAKIAogICBjbUdsb2JhbEdlbmVyYXRvciogZ2cgPQogICAgIHRoaXMtPkZpbGVBUEkuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBsZyA6IGdnLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CiAgICAgY21NYWtlZmlsZSBjb25zdCogbWYgPSBsZy0+R2V0TWFrZWZpbGUoKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogbWYtPkdldExpc3RGaWxlcygpKSB7CiAgICAgICBpbnB1dHMuYXBwZW5kKHRoaXMtPkR1bXBJbnB1dChmaWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuY3h4IGIvU291cmNlL2NtRmlsZUFQSUNhY2hlLmN4eAppbmRleCBlZjc3Nzk1Li41ZDJkZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuY3h4CisrKyBiL1NvdXJjZS9jbUZpbGVBUElDYWNoZS5jeHgKQEAgLTY3LDcgKzY3LDcgQEAKICAgZW50cnlbIm5hbWUiXSA9IG5hbWU7CiAgIGVudHJ5WyJ0eXBlIl0gPQogICAgIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlUeXBlKG5hbWUpKTsKLSAgZW50cnlbInZhbHVlIl0gPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKG5hbWUpOworICBlbnRyeVsidmFsdWUiXSA9IHRoaXMtPlN0YXRlLT5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKG5hbWUpOwogCiAgIEpzb246OlZhbHVlIHByb3BlcnRpZXMgPSB0aGlzLT5EdW1wRW50cnlQcm9wZXJ0aWVzKG5hbWUpOwogICBpZiAoIXByb3BlcnRpZXMuZW1wdHkoKSkgewpAQCAtOTQsNyArOTQsOCBAQAogewogICBKc29uOjpWYWx1ZSBwcm9wZXJ0eSA9IEpzb246Om9iamVjdFZhbHVlOwogICBwcm9wZXJ0eVsibmFtZSJdID0gcHJvcDsKLSAgcHJvcGVydHlbInZhbHVlIl0gPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KG5hbWUsIHByb3ApOworICBjbVByb3AgcCA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkobmFtZSwgcHJvcCk7CisgIHByb3BlcnR5WyJ2YWx1ZSJdID0gcCA/ICpwIDogIiI7CiAgIHJldHVybiBwcm9wZXJ0eTsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUElDb2RlbW9kZWwuY3h4IGIvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHgKaW5kZXggZDc5OTNjNy4uOTU1MTk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHgKKysrIGIvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHgKQEAgLTE1LDkgKzE1LDEwIEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNyeXB0b0hhc2guaCIKICNpbmNsdWRlICJjbUZpbGVBUEkuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKQEAgLTQyNiw3ICs0MjcsNyBAQAogICBKc29uOjpWYWx1ZSBjb25maWd1cmF0aW9ucyA9IEpzb246OmFycmF5VmFsdWU7CiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9CiAgICAgdGhpcy0+RmlsZUFQSS5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpOwotICBhdXRvIG1ha2VmaWxlcyA9IGdnLT5HZXRNYWtlZmlsZXMoKTsKKyAgY29uc3QgYXV0byYgbWFrZWZpbGVzID0gZ2ctPkdldE1ha2VmaWxlcygpOwogICBpZiAoIW1ha2VmaWxlcy5lbXB0eSgpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KICAgICAgIG1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOwpAQCAtNDY5LDE3ICs0NzAsMTcgQEAKIHsKICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0KICAgICB0aGlzLT5GaWxlQVBJLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7Ci0gIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiBjb25zdCYgbG9jYWxHZW5zID0gZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpOworICBhdXRvIGNvbnN0JiBsb2NhbEdlbnMgPSBnZy0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7CiAKICAgLy8gQWRkIGRpcmVjdG9yaWVzIGluIGZvcndhcmQgb3JkZXIgdG8gcHJvY2VzcyBwYXJlbnRzIGJlZm9yZSBjaGlsZHJlbi4KICAgdGhpcy0+RGlyZWN0b3JpZXMucmVzZXJ2ZShsb2NhbEdlbnMuc2l6ZSgpKTsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGxvY2FsR2VucykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogbG9jYWxHZW5zKSB7CiAgICAgYXV0byBkaXJlY3RvcnlJbmRleCA9CiAgICAgICBzdGF0aWNfY2FzdDxKc29uOjpBcnJheUluZGV4Pih0aGlzLT5EaXJlY3Rvcmllcy5zaXplKCkpOwogICAgIHRoaXMtPkRpcmVjdG9yaWVzLmVtcGxhY2VfYmFjaygpOwogICAgIERpcmVjdG9yeSYgZCA9IHRoaXMtPkRpcmVjdG9yaWVzW2RpcmVjdG9yeUluZGV4XTsKICAgICBkLlNuYXBzaG90ID0gbGctPkdldFN0YXRlU25hcHNob3QoKS5HZXRCdWlsZHN5c3RlbURpcmVjdG9yeSgpOwotICAgIGQuTG9jYWxHZW5lcmF0b3IgPSBsZzsKKyAgICBkLkxvY2FsR2VuZXJhdG9yID0gbGcuZ2V0KCk7CiAgICAgdGhpcy0+RGlyZWN0b3J5TWFwW2QuU25hcHNob3RdID0gZGlyZWN0b3J5SW5kZXg7CiAKICAgICBkLlByb2plY3RJbmRleCA9IHRoaXMtPkFkZFByb2plY3QoZC5TbmFwc2hvdCk7CkBAIC00OTIsOCArNDkzLDkgQEAKICAgICBEaXJlY3RvcnkmIGQgPSAqZGk7CiAKICAgICAvLyBBY2N1bXVsYXRlIHRoZSBwcmVzZW5jZSBvZiBpbnN0YWxsIHJ1bGVzIG9uIHRoZSB3YXkgdXAuCi0gICAgZm9yIChhdXRvIGdlbiA6IGQuTG9jYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlKCktPkdldEluc3RhbGxHZW5lcmF0b3JzKCkpIHsKLSAgICAgIGlmICghZHluYW1pY19jYXN0PGNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvcio+KGdlbikpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGdlbiA6CisgICAgICAgICBkLkxvY2FsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpKSB7CisgICAgICBpZiAoIWR5bmFtaWNfY2FzdDxjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IqPihnZW4uZ2V0KCkpKSB7CiAgICAgICAgIGQuSGFzSW5zdGFsbFJ1bGUgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTU1NCw4ICs1NTYsOCBAQAogICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+IHRhcmdldExpc3Q7CiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9CiAgICAgdGhpcy0+RmlsZUFQSS5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGxnIDogZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpKSB7Ci0gICAgY21BcHBlbmQodGFyZ2V0TGlzdCwgbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSk7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiBnZy0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKKyAgICBjbTo6YXBwZW5kKHRhcmdldExpc3QsIGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpOwogICB9CiAgIHN0ZDo6c29ydCh0YXJnZXRMaXN0LmJlZ2luKCksIHRhcmdldExpc3QuZW5kKCksCiAgICAgICAgICAgICBbXShjbUdlbmVyYXRvclRhcmdldCogbCwgY21HZW5lcmF0b3JUYXJnZXQqIHIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUZpbGVDb21tYW5kLmN4eAppbmRleCBkNDU0MTRmLi40NjAzYjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRmlsZUNvbW1hbmQuY3h4CkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3N0cmVhbT4KQEAgLTE1LDYgKzE2LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCkBAIC0zMiwxMiArMzQsMTQgQEAKICNpbmNsdWRlICJjbUZpbGVJbnN0YWxsZXIuaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUG9vbC5oIgogI2luY2x1ZGUgImNtRmlsZVRpbWVzLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUhleEZpbGVDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtTmV3TGluZVN0eWxlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5oIgpAQCAtNDYsNiArNTAsNyBAQAogI2luY2x1ZGUgImNtU3ViY29tbWFuZFRhYmxlLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogI2luY2x1ZGUgImNtVGltZXN0YW1wLmgiCisjaW5jbHVkZSAiY21Xb3JraW5nRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKQEAgLTc4Myw3ICs3ODgsNyBAQAogICAgICAgfQogCiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGZvdW5kRmlsZXMgPSBnLkdldEZpbGVzKCk7Ci0gICAgICBjbUFwcGVuZChmaWxlcywgZm91bmRGaWxlcyk7CisgICAgICBjbTo6YXBwZW5kKGZpbGVzLCBmb3VuZEZpbGVzKTsKIAogICAgICAgaWYgKGNvbmZpZ3VyZURlcGVuZHMpIHsKICAgICAgICAgc3RkOjpzb3J0KGZvdW5kRmlsZXMuYmVnaW4oKSwgZm91bmRGaWxlcy5lbmQoKSk7CkBAIC0xMzk0LDggKzEzOTksOCBAQAogewogICBpbnQgcmVhbHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemUgKiBubWVtYik7CiAgIGNvbnN0IGNoYXIqIGNoUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHB0cik7Ci0gIGNtQXBwZW5kKCpzdGF0aWNfY2FzdDxjbUZpbGVDb21tYW5kVmVjdG9yT2ZDaGFyKj4oZGF0YSksIGNoUHRyLAotICAgICAgICAgICBjaFB0ciArIHJlYWxzaXplKTsKKyAgY206OmFwcGVuZCgqc3RhdGljX2Nhc3Q8Y21GaWxlQ29tbWFuZFZlY3Rvck9mQ2hhcio+KGRhdGEpLCBjaFB0ciwKKyAgICAgICAgICAgICBjaFB0ciArIHJlYWxzaXplKTsKICAgcmV0dXJuIHJlYWxzaXplOwogfQogCkBAIC0xNDA4LDcgKzE0MTMsNyBAQAogICAgIGNhc2UgQ1VSTElORk9fVEVYVDoKICAgICBjYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKICAgICBjYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6Ci0gICAgICBjbUFwcGVuZCh2ZWMsIGNoUHRyLCBjaFB0ciArIHNpemUpOworICAgICAgY206OmFwcGVuZCh2ZWMsIGNoUHRyLCBjaFB0ciArIHNpemUpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMSU5GT19EQVRBX0lOOgogICAgIGNhc2UgQ1VSTElORk9fREFUQV9PVVQ6CkBAIC0xNDE4LDcgKzE0MjMsNyBAQAogICAgICAgaW50IG4gPSBzcHJpbnRmKGJ1ZiwgIlslIiBLV0lNTF9JTlRfUFJJdTY0ICIgYnl0ZXMgZGF0YV1cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S1dJTUxfSU5UX3VpbnQ2NF90PihzaXplKSk7CiAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgY21BcHBlbmQodmVjLCBidWYsIGJ1ZiArIG4pOworICAgICAgICBjbTo6YXBwZW5kKHZlYywgYnVmLCBidWYgKyBuKTsKICAgICAgIH0KICAgICB9IGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xNzA3LDcgKzE3MTIsOCBAQAogICAvLyBhcyB3ZSByZWNlaXZlIGRvd25sb2FkZWQgYml0cyBmcm9tIGN1cmwuLi4KICAgLy8KICAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZpbGUpOwotICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGlyKSAmJiAhY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShkaXIpKSB7CisgIGlmICghZGlyLmVtcHR5KCkgJiYgIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGlyKSAmJgorICAgICAgIWNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkoZGlyKSkgewogICAgIHN0ZDo6c3RyaW5nIGVycnN0cmluZyA9ICJET1dOTE9BRCBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJyIgKyBkaXIgKwogICAgICAgIicgLSBTcGVjaWZ5IGZpbGUgYnkgZnVsbCBwYXRoIG5hbWUgYW5kIHZlcmlmeSB0aGF0IHlvdSAiCiAgICAgICAiaGF2ZSBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgd3JpdGUgcHJpdmlsZWdlcy4iOwpAQCAtMjMyMSwxMiArMjMyNyw5IEBACiAgICAgcGF0aCArPSAiL2NtYWtlLmxvY2siOwogICB9CiAKLSAgaWYgKCFjbXN5czo6U3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhdGgpKSB7Ci0gICAgcGF0aCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSArICIvIiArIHBhdGg7Ci0gIH0KLQogICAvLyBVbmlmeSBwYXRoIChyZW1vdmUgJy8vJywgJy8uLi8nLCAuLi4pCi0gIHBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHBhdGgpOworICBwYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICBwYXRoLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgIC8vIENyZWF0ZSBmaWxlIGFuZCBkaXJlY3RvcmllcyBpZiBuZWVkZWQKICAgc3RkOjpzdHJpbmcgcGFyZW50RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0UGFyZW50RGlyZWN0b3J5KHBhdGgpOwpAQCAtMjc3NCw2ICsyNzc3LDMyNSBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBIYW5kbGVDb25maWd1cmVDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBpZiAoYXJncy5zaXplKCkgPCA1KSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJJbmNvcnJlY3QgYXJndW1lbnRzIHRvIENPTkZJR1VSRSBzdWJjb21tYW5kLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoYXJnc1sxXSAhPSAiT1VUUFVUIikgeworICAgIHN0YXR1cy5TZXRFcnJvcigiSW5jb3JyZWN0IGFyZ3VtZW50cyB0byBDT05GSUdVUkUgc3ViY29tbWFuZC4iKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKGFyZ3NbM10gIT0gIkNPTlRFTlQiKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJJbmNvcnJlY3QgYXJndW1lbnRzIHRvIENPTkZJR1VSRSBzdWJjb21tYW5kLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgY21OZXdMaW5lU3R5bGUgbmV3TGluZVN0eWxlOworICBpZiAoIW5ld0xpbmVTdHlsZS5SZWFkRnJvbUFyZ3VtZW50cyhhcmdzLCBlcnJvck1lc3NhZ2UpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJDT05GSUdVUkUgIiwgZXJyb3JNZXNzYWdlKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBlc2NhcGVRdW90ZXMgPSBmYWxzZTsKKyAgYm9vbCBhdE9ubHkgPSBmYWxzZTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDU7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CisgICAgaWYgKGFyZ3NbaV0gPT0gIkBPTkxZIikgeworICAgICAgYXRPbmx5ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFyZ3NbaV0gPT0gIkVTQ0FQRV9RVU9URVMiKSB7CisgICAgICBlc2NhcGVRdW90ZXMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTkVXTElORV9TVFlMRSIgfHwgYXJnc1tpXSA9PSAiTEYiIHx8CisgICAgICAgICAgICAgICBhcmdzW2ldID09ICJVTklYIiB8fCBhcmdzW2ldID09ICJDUkxGIiB8fCBhcmdzW2ldID09ICJXSU4zMiIgfHwKKyAgICAgICAgICAgICAgIGFyZ3NbaV0gPT0gIkRPUyIpIHsKKyAgICAgIC8qIE9wdGlvbnMgaGFuZGxlZCBieSBOZXdMaW5lU3R5bGUgbWVtYmVyIGFib3ZlLiAgKi8KKyAgICB9IGVsc2UgeworICAgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgICBjbVN0ckNhdCgiQ09ORklHVVJFIFVucmVjb2duaXplZCBhcmd1bWVudCBcIiIsIGFyZ3NbaV0sICJcIiIpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICAvLyBDaGVjayBmb3IgZ2VuZXJhdG9yIGV4cHJlc3Npb25zCisgIGNvbnN0IHN0ZDo6c3RyaW5nIGlucHV0ID0gYXJnc1s0XTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0RmlsZSA9IGFyZ3NbMl07CisKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBpbnB1dC5maW5kX2ZpcnN0X29mKCI8PiIpOworICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJDT05GSUdVUkUgY2FsbGVkIHdpdGggQ09OVEVOVCBjb250YWluaW5nIGEgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtwb3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIuICBUaGlzIGNoYXJhY3RlciBpcyBub3QgYWxsb3dlZC4iKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcG9zID0gb3V0cHV0RmlsZS5maW5kX2ZpcnN0X29mKCI8PiIpOworICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJDT05GSUdVUkUgY2FsbGVkIHdpdGggT1VUUFVUIGNvbnRhaW5pbmcgYSBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEZpbGVbcG9zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiLiAgVGhpcyBjaGFyYWN0ZXIgaXMgbm90IGFsbG93ZWQuIikpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNtTWFrZWZpbGUmIG1ha2VGaWxlID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7CisgIGlmICghbWFrZUZpbGUuQ2FuSVdyaXRlVGhpc0ZpbGUob3V0cHV0RmlsZSkpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBmaWxlOiAiICsgb3V0cHV0RmlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnRvIGEgc291cmNlIGRpcmVjdG9yeS4iKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhvdXRwdXRGaWxlKTsKKworICAvLyBSZS1nZW5lcmF0ZSBpZiBub24tdGVtcG9yYXJ5IG91dHB1dHMgYXJlIG1pc3NpbmcuCisgIC8vIHdoZW4gd2UgZmluYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gd2Ugd2lsbCByZW1vdmUgYWxsCisgIC8vIG91dHB1dCBmaWxlcyB0aGF0IG5vdyBkb24ndCBleGlzdC4KKyAgbWFrZUZpbGUuQWRkQ01ha2VPdXRwdXRGaWxlKG91dHB1dEZpbGUpOworCisgIC8vIENyZWF0ZSBvdXRwdXQgZGlyZWN0b3J5CisgIGNvbnN0IHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc2xhc2hQb3MgPSBvdXRwdXRGaWxlLnJmaW5kKCcvJyk7CisgIGlmIChzbGFzaFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBhdGggPSBvdXRwdXRGaWxlLnN1YnN0cigwLCBzbGFzaFBvcyk7CisgICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShwYXRoKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIG5ld0xpbmVDaGFyYWN0ZXJzOworICBib29sIG9wZW5fd2l0aF9iaW5hcnlfZmxhZyA9IGZhbHNlOworICBpZiAobmV3TGluZVN0eWxlLklzVmFsaWQoKSkgeworICAgIG9wZW5fd2l0aF9iaW5hcnlfZmxhZyA9IHRydWU7CisgICAgbmV3TGluZUNoYXJhY3RlcnMgPSBuZXdMaW5lU3R5bGUuR2V0Q2hhcmFjdGVycygpOworICB9CisKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZvdXQ7CisgIGZvdXQuT3BlbihvdXRwdXRGaWxlLCBmYWxzZSwgb3Blbl93aXRoX2JpbmFyeV9mbGFnKTsKKyAgaWYgKCFmb3V0KSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNvdWxkIG5vdCBvcGVuIGZpbGUgZm9yIHdyaXRlIGluIGNvcHkgb3BlcmF0aW9uICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEZpbGUpOworICAgIGNtU3lzdGVtVG9vbHM6OlJlcG9ydExhc3RTeXN0ZW1FcnJvcigiIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGZvdXQuU2V0Q29weUlmRGlmZmVyZW50KHRydWUpOworCisgIC8vIGNvcHkgaW50cHV0IHRvIG91dHB1dCBhbmQgZXhwYW5kIHZhcmlhYmxlcyBmcm9tIGlucHV0IGF0IHRoZSBzYW1lIHRpbWUKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc2luKGlucHV0LCBzdGQ6Omlvczo6aW4pOworICBzdGQ6OnN0cmluZyBpbkxpbmU7CisgIHN0ZDo6c3RyaW5nIG91dExpbmU7CisgIHdoaWxlIChjbVN5c3RlbVRvb2xzOjpHZXRMaW5lRnJvbVN0cmVhbShzaW4sIGluTGluZSkpIHsKKyAgICBvdXRMaW5lLmNsZWFyKCk7CisgICAgbWFrZUZpbGUuQ29uZmlndXJlU3RyaW5nKGluTGluZSwgb3V0TGluZSwgYXRPbmx5LCBlc2NhcGVRdW90ZXMpOworICAgIGZvdXQgPDwgb3V0TGluZSA8PCBuZXdMaW5lQ2hhcmFjdGVyczsKKyAgfQorCisgIC8vIGNsb3NlIGZpbGUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29weQorICBmb3V0LmNsb3NlKCk7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGFuZGxlQXJjaGl2ZUNyZWF0ZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBzdHJ1Y3QgQXJndW1lbnRzCisgIHsKKyAgICBzdGQ6OnN0cmluZyBPdXRwdXQ7CisgICAgc3RkOjpzdHJpbmcgRm9ybWF0OworICAgIHN0ZDo6c3RyaW5nIFR5cGU7CisgICAgc3RkOjpzdHJpbmcgTVRpbWU7CisgICAgYm9vbCBWZXJib3NlID0gZmFsc2U7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEZpbGVzOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEaXJlY3RvcmllczsKKyAgfTsKKworICBzdGF0aWMgYXV0byBjb25zdCBwYXJzZXIgPSBjbUFyZ3VtZW50UGFyc2VyPEFyZ3VtZW50cz57fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJPVVRQVVQiX3MsICZBcmd1bWVudHM6Ok91dHB1dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiRk9STUFUIl9zLCAmQXJndW1lbnRzOjpGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIlRZUEUiX3MsICZBcmd1bWVudHM6OlR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIk1USU1FIl9zLCAmQXJndW1lbnRzOjpNVGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiVkVSQk9TRSJfcywgJkFyZ3VtZW50czo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiRklMRVMiX3MsICZBcmd1bWVudHM6OkZpbGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJESVJFQ1RPUlkiX3MsICZBcmd1bWVudHM6OkRpcmVjdG9yaWVzKTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5yZWNvZ25pemVkQXJndW1lbnRzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5d29yZHNNaXNzaW5nVmFsdWVzOworICBhdXRvIHBhcnNlZEFyZ3MgPQorICAgIHBhcnNlci5QYXJzZShjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDEpLCAmdW5yZWNvZ25pemVkQXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAma2V5d29yZHNNaXNzaW5nVmFsdWVzKTsKKyAgYXV0byBhcmdJdCA9IHVucmVjb2duaXplZEFyZ3VtZW50cy5iZWdpbigpOworICBpZiAoYXJnSXQgIT0gdW5yZWNvZ25pemVkQXJndW1lbnRzLmVuZCgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJVbnJlY29nbml6ZWQgYXJndW1lbnQ6IFwiIiwgKmFyZ0l0LCAiXCIiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTElTVF9BUkdTID0geworICAgICJPVVRQVVQiLCAiRk9STUFUIiwgIlRZUEUiLCAiTVRJTUUiLCAiRklMRVMiLCAiRElSRUNUT1JZIiwKKyAgfTsKKyAgYXV0byBrd2JlZ2luID0ga2V5d29yZHNNaXNzaW5nVmFsdWVzLmNiZWdpbigpOworICBhdXRvIGt3ZW5kID0gY21SZW1vdmVNYXRjaGluZyhrZXl3b3Jkc01pc3NpbmdWYWx1ZXMsIExJU1RfQVJHUyk7CisgIGlmIChrd2VuZCAhPSBrd2JlZ2luKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJLZXl3b3JkcyBtaXNzaW5nIHZhbHVlczpcbiAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Kb2luKGNtTWFrZVJhbmdlKGt3YmVnaW4sIGt3ZW5kKSwgIlxuICAiKSkpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3QgY2hhcioga25vd25Gb3JtYXRzW10gPSB7CisgICAgIjd6aXAiLCAiZ251dGFyIiwgInBheCIsICJwYXhyIiwgInJhdyIsICJ6aXAiCisgIH07CisKKyAgaWYgKCFwYXJzZWRBcmdzLkZvcm1hdC5lbXB0eSgpICYmCisgICAgICAhY21Db250YWlucyhrbm93bkZvcm1hdHMsIHBhcnNlZEFyZ3MuRm9ybWF0KSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCJhcmNoaXZlIGZvcm1hdCAiLCBwYXJzZWRBcmdzLkZvcm1hdCwgIiBub3Qgc3VwcG9ydGVkIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3QgY2hhciogemlwRmlsZUZvcm1hdHNbXSA9IHsgIjd6aXAiLCAiemlwIiB9OworICBpZiAoIXBhcnNlZEFyZ3MuVHlwZS5lbXB0eSgpICYmCisgICAgICBjbUNvbnRhaW5zKHppcEZpbGVGb3JtYXRzLCBwYXJzZWRBcmdzLkZvcm1hdCkpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImFyY2hpdmUgZm9ybWF0ICIsIHBhcnNlZEFyZ3MuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRvZXMgbm90IHN1cHBvcnQgVFlQRSBhcmd1bWVudHMiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGF0aWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtU3lzdGVtVG9vbHM6OmNtVGFyQ29tcHJlc3Npb24+CisgICAgY29tcHJlc3Npb25UeXBlTWFwID0geyB7ICJOb25lIiwgY21TeXN0ZW1Ub29sczo6VGFyQ29tcHJlc3NOb25lIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJCWmlwMiIsIGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzQlppcDIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkdaaXAiLCBjbVN5c3RlbVRvb2xzOjpUYXJDb21wcmVzc0daaXAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIlhaIiwgY21TeXN0ZW1Ub29sczo6VGFyQ29tcHJlc3NYWiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiWnN0ZCIsIGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzWnN0ZCB9IH07CisKKyAgc3RkOjpzdHJpbmcgY29uc3QmIG91dEZpbGUgPSBwYXJzZWRBcmdzLk91dHB1dDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzID0gcGFyc2VkQXJncy5GaWxlczsKKyAgc3RkOjpjb3B5KHBhcnNlZEFyZ3MuRGlyZWN0b3JpZXMuYmVnaW4oKSwgcGFyc2VkQXJncy5EaXJlY3Rvcmllcy5lbmQoKSwKKyAgICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihmaWxlcykpOworCisgIGNtU3lzdGVtVG9vbHM6OmNtVGFyQ29tcHJlc3Npb24gY29tcHJlc3MgPSBjbVN5c3RlbVRvb2xzOjpUYXJDb21wcmVzc05vbmU7CisgIGF1dG8gdHlwZUl0ID0gY29tcHJlc3Npb25UeXBlTWFwLmZpbmQocGFyc2VkQXJncy5UeXBlKTsKKyAgaWYgKHR5cGVJdCAhPSBjb21wcmVzc2lvblR5cGVNYXAuZW5kKCkpIHsKKyAgICBjb21wcmVzcyA9IHR5cGVJdC0+c2Vjb25kOworICB9IGVsc2UgaWYgKCFwYXJzZWRBcmdzLlR5cGUuZW1wdHkoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCJjb21wcmVzc2lvbiB0eXBlICIsIHBhcnNlZEFyZ3MuVHlwZSwgIiBpcyBub3Qgc3VwcG9ydGVkIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGZpbGVzLmVtcHR5KCkpIHsKKyAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gZmlsZXMgb3IgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIik7CisgIH0KKworICBpZiAoIWNtU3lzdGVtVG9vbHM6OkNyZWF0ZVRhcihvdXRGaWxlLCBmaWxlcywgY29tcHJlc3MsIHBhcnNlZEFyZ3MuVmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXJncy5NVGltZSwgcGFyc2VkQXJncy5Gb3JtYXQpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJmYWlsZWQgdG8gY29tcHJlc3M6ICIsIG91dEZpbGUpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCitib29sIEhhbmRsZUFyY2hpdmVFeHRyYWN0Q29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBzdHJ1Y3QgQXJndW1lbnRzCisgIHsKKyAgICBzdGQ6OnN0cmluZyBJbnB1dDsKKyAgICBib29sIFZlcmJvc2UgPSBmYWxzZTsKKyAgICBib29sIExpc3RPbmx5ID0gZmFsc2U7CisgICAgc3RkOjpzdHJpbmcgRGVzdGluYXRpb247CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEZpbGVzOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEaXJlY3RvcmllczsKKyAgfTsKKworICBzdGF0aWMgYXV0byBjb25zdCBwYXJzZXIgPSBjbUFyZ3VtZW50UGFyc2VyPEFyZ3VtZW50cz57fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJJTlBVVCJfcywgJkFyZ3VtZW50czo6SW5wdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIlZFUkJPU0UiX3MsICZBcmd1bWVudHM6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIkxJU1RfT05MWSJfcywgJkFyZ3VtZW50czo6TGlzdE9ubHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIkRFU1RJTkFUSU9OIl9zLCAmQXJndW1lbnRzOjpEZXN0aW5hdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiRklMRVMiX3MsICZBcmd1bWVudHM6OkZpbGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJESVJFQ1RPUlkiX3MsICZBcmd1bWVudHM6OkRpcmVjdG9yaWVzKTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5yZWNvZ25pemVkQXJndW1lbnRzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5d29yZHNNaXNzaW5nVmFsdWVzOworICBhdXRvIHBhcnNlZEFyZ3MgPQorICAgIHBhcnNlci5QYXJzZShjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDEpLCAmdW5yZWNvZ25pemVkQXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAma2V5d29yZHNNaXNzaW5nVmFsdWVzKTsKKyAgYXV0byBhcmdJdCA9IHVucmVjb2duaXplZEFyZ3VtZW50cy5iZWdpbigpOworICBpZiAoYXJnSXQgIT0gdW5yZWNvZ25pemVkQXJndW1lbnRzLmVuZCgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJVbnJlY29nbml6ZWQgYXJndW1lbnQ6IFwiIiwgKmFyZ0l0LCAiXCIiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTElTVF9BUkdTID0geworICAgICJJTlBVVCIsCisgICAgIkRFU1RJTkFUSU9OIiwKKyAgICAiRklMRVMiLAorICAgICJESVJFQ1RPUlkiLAorICB9OworICBhdXRvIGt3YmVnaW4gPSBrZXl3b3Jkc01pc3NpbmdWYWx1ZXMuY2JlZ2luKCk7CisgIGF1dG8ga3dlbmQgPSBjbVJlbW92ZU1hdGNoaW5nKGtleXdvcmRzTWlzc2luZ1ZhbHVlcywgTElTVF9BUkdTKTsKKyAgaWYgKGt3ZW5kICE9IGt3YmVnaW4pIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoIktleXdvcmRzIG1pc3NpbmcgdmFsdWVzOlxuICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4oY21NYWtlUmFuZ2Uoa3diZWdpbiwga3dlbmQpLCAiXG4gICIpKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnN0cmluZyBpbkZpbGUgPSBwYXJzZWRBcmdzLklucHV0OworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXMgPSBwYXJzZWRBcmdzLkZpbGVzOworICBzdGQ6OmNvcHkocGFyc2VkQXJncy5EaXJlY3Rvcmllcy5iZWdpbigpLCBwYXJzZWRBcmdzLkRpcmVjdG9yaWVzLmVuZCgpLAorICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGZpbGVzKSk7CisKKyAgaWYgKHBhcnNlZEFyZ3MuTGlzdE9ubHkpIHsKKyAgICBpZiAoIWNtU3lzdGVtVG9vbHM6Okxpc3RUYXIoaW5GaWxlLCBmaWxlcywgcGFyc2VkQXJncy5WZXJib3NlKSkgeworICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJmYWlsZWQgdG8gbGlzdDogIiwgaW5GaWxlKSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdGQ6OnN0cmluZyBkZXN0RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcnNlZEFyZ3MuRGVzdGluYXRpb24uZW1wdHkoKSkgeworICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhcnNlZEFyZ3MuRGVzdGluYXRpb24pKSB7CisgICAgICAgIGRlc3REaXIgPSBwYXJzZWRBcmdzLkRlc3RpbmF0aW9uOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdERpciA9IGNtU3RyQ2F0KGRlc3REaXIsICIvIiwgcGFyc2VkQXJncy5EZXN0aW5hdGlvbik7CisgICAgICB9CisKKyAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShkZXN0RGlyKSkgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5OiAiLCBkZXN0RGlyKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChpbkZpbGUpKSB7CisgICAgICAgIGluRmlsZSA9CisgICAgICAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKSwgIi8iLCBpbkZpbGUpOworICAgICAgfQorICAgIH0KKworICAgIGNtV29ya2luZ0RpcmVjdG9yeSB3b3JrZGlyKGRlc3REaXIpOworICAgIGlmICh3b3JrZGlyLkZhaWxlZCgpKSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCJmYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHRvOiAiLCBkZXN0RGlyKSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY21TeXN0ZW1Ub29sczo6RXh0cmFjdFRhcihpbkZpbGUsIGZpbGVzLCBwYXJzZWRBcmdzLlZlcmJvc2UpKSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImZhaWxlZCB0byBleHRyYWN0OiAiLCBpbkZpbGUpKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIGJvb2wgY21GaWxlQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCkBAIC0yODI3LDYgKzMxNDksOSBAQAogICAgIHsgIlJFQURfU1lNTElOSyJfcywgSGFuZGxlUmVhZFN5bWxpbmtDb21tYW5kIH0sCiAgICAgeyAiQ1JFQVRFX0xJTksiX3MsIEhhbmRsZUNyZWF0ZUxpbmtDb21tYW5kIH0sCiAgICAgeyAiR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTIl9zLCBIYW5kbGVHZXRSdW50aW1lRGVwZW5kZW5jaWVzQ29tbWFuZCB9LAorICAgIHsgIkNPTkZJR1VSRSJfcywgSGFuZGxlQ29uZmlndXJlQ29tbWFuZCB9LAorICAgIHsgIkFSQ0hJVkVfQ1JFQVRFIl9zLCBIYW5kbGVBcmNoaXZlQ3JlYXRlQ29tbWFuZCB9LAorICAgIHsgIkFSQ0hJVkVfRVhUUkFDVCJfcywgSGFuZGxlQXJjaGl2ZUV4dHJhY3RDb21tYW5kIH0sCiAgIH07CiAKICAgcmV0dXJuIHN1YmNvbW1hbmQoYXJnc1swXSwgYXJncywgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVMb2NrLmN4eCBiL1NvdXJjZS9jbUZpbGVMb2NrLmN4eAppbmRleCBlOTBmNTcxLi42MDEwMjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlTG9jay5jeHgKKysrIGIvU291cmNlL2NtRmlsZUxvY2suY3h4CkBAIC0zLDExICszLDIzIEBACiAjaW5jbHVkZSAiY21GaWxlTG9jay5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21GaWxlTG9ja1Jlc3VsdC5oIgogCiAvLyBDb21tb24gaW1wbGVtZW50YXRpb24KIAorY21GaWxlTG9jazo6Y21GaWxlTG9jayhjbUZpbGVMb2NrJiYgb3RoZXIpIG5vZXhjZXB0Cit7CisgIHRoaXMtPkZpbGUgPSBvdGhlci5GaWxlOworI2lmIGRlZmluZWQoX1dJTjMyKQorICBvdGhlci5GaWxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisjZWxzZQorICBvdGhlci5GaWxlID0gLTE7CisjZW5kaWYKKyAgdGhpcy0+RmlsZW5hbWUgPSBzdGQ6Om1vdmUob3RoZXIuRmlsZW5hbWUpOworfQorCiBjbUZpbGVMb2NrOjp+Y21GaWxlTG9jaygpCiB7CiAgIGlmICghdGhpcy0+RmlsZW5hbWUuZW1wdHkoKSkgewpAQCAtMTcsNiArMjksMTkgQEAKICAgfQogfQogCitjbUZpbGVMb2NrJiBjbUZpbGVMb2NrOjpvcGVyYXRvcj0oY21GaWxlTG9jayYmIG90aGVyKSBub2V4Y2VwdAoreworICB0aGlzLT5GaWxlID0gb3RoZXIuRmlsZTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgb3RoZXIuRmlsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworI2Vsc2UKKyAgb3RoZXIuRmlsZSA9IC0xOworI2VuZGlmCisgIHRoaXMtPkZpbGVuYW1lID0gc3RkOjptb3ZlKG90aGVyLkZpbGVuYW1lKTsKKworICByZXR1cm4gKnRoaXM7Cit9CisKIGNtRmlsZUxvY2tSZXN1bHQgY21GaWxlTG9jazo6TG9jayhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUxvY2suaCBiL1NvdXJjZS9jbUZpbGVMb2NrLmgKaW5kZXggMjEzMGQ2NS4uNWZlMDY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUxvY2suaAorKysgYi9Tb3VyY2UvY21GaWxlTG9jay5oCkBAIC0yNiw3ICsyNiw5IEBACiAgIH5jbUZpbGVMb2NrKCk7CiAKICAgY21GaWxlTG9jayhjbUZpbGVMb2NrIGNvbnN0JikgPSBkZWxldGU7CisgIGNtRmlsZUxvY2soY21GaWxlTG9jayYmKSBub2V4Y2VwdDsKICAgY21GaWxlTG9jayYgb3BlcmF0b3I9KGNtRmlsZUxvY2sgY29uc3QmKSA9IGRlbGV0ZTsKKyAgY21GaWxlTG9jayYgb3BlcmF0b3I9KGNtRmlsZUxvY2smJikgbm9leGNlcHQ7CiAKICAgLyoqCiAgICAqIEBicmllZiBMb2NrIHRoZSBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUxvY2tQb29sLmN4eCBiL1NvdXJjZS9jbUZpbGVMb2NrUG9vbC5jeHgKaW5kZXggOGRiMmRiMi4uZTFmNmU5NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUxvY2tQb29sLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlTG9ja1Bvb2wuY3h4CkBAIC0zLDQwICszLDM0IEBACiAjaW5jbHVkZSAiY21GaWxlTG9ja1Bvb2wuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRmlsZUxvY2suaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUmVzdWx0LmgiCiAKIGNtRmlsZUxvY2tQb29sOjpjbUZpbGVMb2NrUG9vbCgpID0gZGVmYXVsdDsKIAotY21GaWxlTG9ja1Bvb2w6On5jbUZpbGVMb2NrUG9vbCgpCi17Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkZ1bmN0aW9uU2NvcGVzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+RmlsZVNjb3Blcyk7Ci19CitjbUZpbGVMb2NrUG9vbDo6fmNtRmlsZUxvY2tQb29sKCkgPSBkZWZhdWx0OwogCiB2b2lkIGNtRmlsZUxvY2tQb29sOjpQdXNoRnVuY3Rpb25TY29wZSgpCiB7Ci0gIHRoaXMtPkZ1bmN0aW9uU2NvcGVzLnB1c2hfYmFjayhuZXcgU2NvcGVQb29sKCkpOworICB0aGlzLT5GdW5jdGlvblNjb3Blcy5wdXNoX2JhY2soU2NvcGVQb29sKCkpOwogfQogCiB2b2lkIGNtRmlsZUxvY2tQb29sOjpQb3BGdW5jdGlvblNjb3BlKCkKIHsKICAgYXNzZXJ0KCF0aGlzLT5GdW5jdGlvblNjb3Blcy5lbXB0eSgpKTsKLSAgZGVsZXRlIHRoaXMtPkZ1bmN0aW9uU2NvcGVzLmJhY2soKTsKICAgdGhpcy0+RnVuY3Rpb25TY29wZXMucG9wX2JhY2soKTsKIH0KIAogdm9pZCBjbUZpbGVMb2NrUG9vbDo6UHVzaEZpbGVTY29wZSgpCiB7Ci0gIHRoaXMtPkZpbGVTY29wZXMucHVzaF9iYWNrKG5ldyBTY29wZVBvb2woKSk7CisgIHRoaXMtPkZpbGVTY29wZXMucHVzaF9iYWNrKFNjb3BlUG9vbCgpKTsKIH0KIAogdm9pZCBjbUZpbGVMb2NrUG9vbDo6UG9wRmlsZVNjb3BlKCkKIHsKICAgYXNzZXJ0KCF0aGlzLT5GaWxlU2NvcGVzLmVtcHR5KCkpOwotICBkZWxldGUgdGhpcy0+RmlsZVNjb3Blcy5iYWNrKCk7CiAgIHRoaXMtPkZpbGVTY29wZXMucG9wX2JhY2soKTsKIH0KIApAQCAtNDksNyArNDMsNyBAQAogICBpZiAodGhpcy0+RnVuY3Rpb25TY29wZXMuZW1wdHkoKSkgewogICAgIHJldHVybiBjbUZpbGVMb2NrUmVzdWx0OjpNYWtlTm9GdW5jdGlvbigpOwogICB9Ci0gIHJldHVybiB0aGlzLT5GdW5jdGlvblNjb3Blcy5iYWNrKCktPkxvY2soZmlsZW5hbWUsIHRpbWVvdXRTZWMpOworICByZXR1cm4gdGhpcy0+RnVuY3Rpb25TY29wZXMuYmFjaygpLkxvY2soZmlsZW5hbWUsIHRpbWVvdXRTZWMpOwogfQogCiBjbUZpbGVMb2NrUmVzdWx0IGNtRmlsZUxvY2tQb29sOjpMb2NrRmlsZVNjb3BlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwKQEAgLTU5LDcgKzUzLDcgQEAKICAgICByZXR1cm4gY21GaWxlTG9ja1Jlc3VsdDo6TWFrZUFscmVhZHlMb2NrZWQoKTsKICAgfQogICBhc3NlcnQoIXRoaXMtPkZpbGVTY29wZXMuZW1wdHkoKSk7Ci0gIHJldHVybiB0aGlzLT5GaWxlU2NvcGVzLmJhY2soKS0+TG9jayhmaWxlbmFtZSwgdGltZW91dFNlYyk7CisgIHJldHVybiB0aGlzLT5GaWxlU2NvcGVzLmJhY2soKS5Mb2NrKGZpbGVuYW1lLCB0aW1lb3V0U2VjKTsKIH0KIAogY21GaWxlTG9ja1Jlc3VsdCBjbUZpbGVMb2NrUG9vbDo6TG9ja1Byb2Nlc3NTY29wZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCkBAIC03NCwxNCArNjgsMTQgQEAKIGNtRmlsZUxvY2tSZXN1bHQgY21GaWxlTG9ja1Bvb2w6OlJlbGVhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQogewogICBmb3IgKGF1dG8mIGZ1bmNTY29wZSA6IHRoaXMtPkZ1bmN0aW9uU2NvcGVzKSB7Ci0gICAgY29uc3QgY21GaWxlTG9ja1Jlc3VsdCByZXN1bHQgPSBmdW5jU2NvcGUtPlJlbGVhc2UoZmlsZW5hbWUpOworICAgIGNvbnN0IGNtRmlsZUxvY2tSZXN1bHQgcmVzdWx0ID0gZnVuY1Njb3BlLlJlbGVhc2UoZmlsZW5hbWUpOwogICAgIGlmICghcmVzdWx0LklzT2soKSkgewogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgIH0KIAogICBmb3IgKGF1dG8mIGZpbGVTY29wZSA6IHRoaXMtPkZpbGVTY29wZXMpIHsKLSAgICBjb25zdCBjbUZpbGVMb2NrUmVzdWx0IHJlc3VsdCA9IGZpbGVTY29wZS0+UmVsZWFzZShmaWxlbmFtZSk7CisgICAgY29uc3QgY21GaWxlTG9ja1Jlc3VsdCByZXN1bHQgPSBmaWxlU2NvcGUuUmVsZWFzZShmaWxlbmFtZSk7CiAgICAgaWYgKCFyZXN1bHQuSXNPaygpKSB7CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTkzLDE0ICs4NywxNCBAQAogYm9vbCBjbUZpbGVMb2NrUG9vbDo6SXNBbHJlYWR5TG9ja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3QKIHsKICAgZm9yIChhdXRvIGNvbnN0JiBmdW5jU2NvcGUgOiB0aGlzLT5GdW5jdGlvblNjb3BlcykgewotICAgIGNvbnN0IGJvb2wgcmVzdWx0ID0gZnVuY1Njb3BlLT5Jc0FscmVhZHlMb2NrZWQoZmlsZW5hbWUpOworICAgIGNvbnN0IGJvb2wgcmVzdWx0ID0gZnVuY1Njb3BlLklzQWxyZWFkeUxvY2tlZChmaWxlbmFtZSk7CiAgICAgaWYgKHJlc3VsdCkgewogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAKICAgZm9yIChhdXRvIGNvbnN0JiBmaWxlU2NvcGUgOiB0aGlzLT5GaWxlU2NvcGVzKSB7Ci0gICAgY29uc3QgYm9vbCByZXN1bHQgPSBmaWxlU2NvcGUtPklzQWxyZWFkeUxvY2tlZChmaWxlbmFtZSk7CisgICAgY29uc3QgYm9vbCByZXN1bHQgPSBmaWxlU2NvcGUuSXNBbHJlYWR5TG9ja2VkKGZpbGVuYW1lKTsKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMTEsMjEgKzEwNSwyOSBAQAogCiBjbUZpbGVMb2NrUG9vbDo6U2NvcGVQb29sOjpTY29wZVBvb2woKSA9IGRlZmF1bHQ7CiAKLWNtRmlsZUxvY2tQb29sOjpTY29wZVBvb2w6On5TY29wZVBvb2woKQorY21GaWxlTG9ja1Bvb2w6OlNjb3BlUG9vbDo6flNjb3BlUG9vbCgpID0gZGVmYXVsdDsKKworY21GaWxlTG9ja1Bvb2w6OlNjb3BlUG9vbDo6U2NvcGVQb29sKFNjb3BlUG9vbCYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKK2NtRmlsZUxvY2tQb29sOjpTY29wZVBvb2wmIGNtRmlsZUxvY2tQb29sOjpTY29wZVBvb2w6Om9wZXJhdG9yPSgKKyAgU2NvcGVQb29sJiYgb3RoZXIpIG5vZXhjZXB0CiB7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkxvY2tzKTsKKyAgaWYgKHRoaXMgIT0gJm90aGVyKSB7CisgICAgdGhpcy0+TG9ja3MgPSBzdGQ6Om1vdmUob3RoZXIuTG9ja3MpOworICB9CisKKyAgcmV0dXJuICp0aGlzOwogfQogCiBjbUZpbGVMb2NrUmVzdWx0IGNtRmlsZUxvY2tQb29sOjpTY29wZVBvb2w6OkxvY2soY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dFNlYykKIHsKLSAgY21GaWxlTG9jayogbG9jayA9IG5ldyBjbUZpbGVMb2NrKCk7Ci0gIGNvbnN0IGNtRmlsZUxvY2tSZXN1bHQgcmVzdWx0ID0gbG9jay0+TG9jayhmaWxlbmFtZSwgdGltZW91dFNlYyk7CisgIGNtRmlsZUxvY2sgbG9jazsKKyAgY29uc3QgY21GaWxlTG9ja1Jlc3VsdCByZXN1bHQgPSBsb2NrLkxvY2soZmlsZW5hbWUsIHRpbWVvdXRTZWMpOwogICBpZiAocmVzdWx0LklzT2soKSkgewotICAgIHRoaXMtPkxvY2tzLnB1c2hfYmFjayhsb2NrKTsKKyAgICB0aGlzLT5Mb2Nrcy5wdXNoX2JhY2soc3RkOjptb3ZlKGxvY2spKTsKICAgICByZXR1cm4gY21GaWxlTG9ja1Jlc3VsdDo6TWFrZU9rKCk7CiAgIH0KLSAgZGVsZXRlIGxvY2s7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzMyw4ICsxMzUsOCBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCiB7CiAgIGZvciAoYXV0byYgbG9jayA6IHRoaXMtPkxvY2tzKSB7Ci0gICAgaWYgKGxvY2stPklzTG9ja2VkKGZpbGVuYW1lKSkgewotICAgICAgcmV0dXJuIGxvY2stPlJlbGVhc2UoKTsKKyAgICBpZiAobG9jay5Jc0xvY2tlZChmaWxlbmFtZSkpIHsKKyAgICAgIHJldHVybiBsb2NrLlJlbGVhc2UoKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIGNtRmlsZUxvY2tSZXN1bHQ6Ok1ha2VPaygpOwpAQCAtMTQ0LDcgKzE0Niw3IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3QKIHsKICAgZm9yIChhdXRvIGNvbnN0JiBsb2NrIDogdGhpcy0+TG9ja3MpIHsKLSAgICBpZiAobG9jay0+SXNMb2NrZWQoZmlsZW5hbWUpKSB7CisgICAgaWYgKGxvY2suSXNMb2NrZWQoZmlsZW5hbWUpKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVMb2NrUG9vbC5oIGIvU291cmNlL2NtRmlsZUxvY2tQb29sLmgKaW5kZXggZGFlNjhkZC4uZDQ1YzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUxvY2tQb29sLmgKKysrIGIvU291cmNlL2NtRmlsZUxvY2tQb29sLmgKQEAgLTgsNyArOCw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotY2xhc3MgY21GaWxlTG9jazsKKyNpbmNsdWRlICJjbUZpbGVMb2NrLmgiCisKIGNsYXNzIGNtRmlsZUxvY2tSZXN1bHQ7CiAKIGNsYXNzIGNtRmlsZUxvY2tQb29sCkBAIC02NCw3ICs2NSw5IEBACiAgICAgflNjb3BlUG9vbCgpOwogCiAgICAgU2NvcGVQb29sKFNjb3BlUG9vbCBjb25zdCYpID0gZGVsZXRlOworICAgIFNjb3BlUG9vbChTY29wZVBvb2wmJikgbm9leGNlcHQ7CiAgICAgU2NvcGVQb29sJiBvcGVyYXRvcj0oU2NvcGVQb29sIGNvbnN0JikgPSBkZWxldGU7CisgICAgU2NvcGVQb29sJiBvcGVyYXRvcj0oU2NvcGVQb29sJiYpIG5vZXhjZXB0OwogCiAgICAgY21GaWxlTG9ja1Jlc3VsdCBMb2NrKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0U2VjKTsKQEAgLTcyLDE3ICs3NSwxMiBAQAogICAgIGJvb2wgSXNBbHJlYWR5TG9ja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICB1c2luZyBMaXN0ID0gc3RkOjp2ZWN0b3I8Y21GaWxlTG9jayo+OwotICAgIHVzaW5nIEl0ID0gTGlzdDo6aXRlcmF0b3I7Ci0gICAgdXNpbmcgQ0l0ID0gTGlzdDo6Y29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgTGlzdCA9IHN0ZDo6dmVjdG9yPGNtRmlsZUxvY2s+OwogCiAgICAgTGlzdCBMb2NrczsKICAgfTsKIAotICB1c2luZyBMaXN0ID0gc3RkOjp2ZWN0b3I8U2NvcGVQb29sKj47Ci0KLSAgdXNpbmcgSXQgPSBMaXN0OjppdGVyYXRvcjsKLSAgdXNpbmcgQ0l0ID0gTGlzdDo6Y29uc3RfaXRlcmF0b3I7CisgIHVzaW5nIExpc3QgPSBzdGQ6OnZlY3RvcjxTY29wZVBvb2w+OwogCiAgIExpc3QgRnVuY3Rpb25TY29wZXM7CiAgIExpc3QgRmlsZVNjb3BlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVNb25pdG9yLmN4eCBiL1NvdXJjZS9jbUZpbGVNb25pdG9yLmN4eAppbmRleCBhYzhhMzdlLi44Y2ZkYjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlTW9uaXRvci5jeHgKKysrIGIvU291cmNlL2NtRmlsZU1vbml0b3IuY3h4CkBAIC03LDkgKzcsOSBAQAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtc3lzL1N5c3RlbVRvb2xzLmh4eCIKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbXN5cy9TeXN0ZW1Ub29scy5oeHgiCiAKIG5hbWVzcGFjZSB7CiB2b2lkIG9uX2RpcmVjdG9yeV9jaGFuZ2UodXZfZnNfZXZlbnRfdCogaGFuZGxlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwKQEAgLTM3LDEyICszNywxMiBAQAogY2xhc3MgY21WaXJ0dWFsRGlyZWN0b3J5V2F0Y2hlciA6IHB1YmxpYyBjbUlCYXNlV2F0Y2hlcgogewogcHVibGljOgotICB+Y21WaXJ0dWFsRGlyZWN0b3J5V2F0Y2hlcigpIG92ZXJyaWRlIHsgY21EZWxldGVBbGwodGhpcy0+Q2hpbGRyZW4pOyB9CisgIH5jbVZpcnR1YWxEaXJlY3RvcnlXYXRjaGVyKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OwogCiAgIGNtSUJhc2VXYXRjaGVyKiBGaW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcykKICAgewogICAgIGNvbnN0IGF1dG8gaSA9IHRoaXMtPkNoaWxkcmVuLmZpbmQocHMpOwotICAgIHJldHVybiAoaSA9PSB0aGlzLT5DaGlsZHJlbi5lbmQoKSkgPyBudWxscHRyIDogaS0+c2Vjb25kOworICAgIHJldHVybiAoaSA9PSB0aGlzLT5DaGlsZHJlbi5lbmQoKSkgPyBudWxscHRyIDogaS0+c2Vjb25kLmdldCgpOwogICB9CiAKICAgdm9pZCBUcmlnZ2VyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoU2VnbWVudCwgaW50IGV2ZW50cywKQEAgLTk2LDExICs5Niw3IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCi0gIHZvaWQgUmVzZXQoKQotICB7Ci0gICAgY21EZWxldGVBbGwodGhpcy0+Q2hpbGRyZW4pOwotICAgIHRoaXMtPkNoaWxkcmVuLmNsZWFyKCk7Ci0gIH0KKyAgdm9pZCBSZXNldCgpIHsgdGhpcy0+Q2hpbGRyZW4uY2xlYXIoKTsgfQogCiAgIHZvaWQgQWRkQ2hpbGRXYXRjaGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcywgY21JQmFzZVdhdGNoZXIqIHdhdGNoZXIpCiAgIHsKQEAgLTEwOCwxMSArMTA0LDEyIEBACiAgICAgYXNzZXJ0KHRoaXMtPkNoaWxkcmVuLmZpbmQocHMpID09IHRoaXMtPkNoaWxkcmVuLmVuZCgpKTsKICAgICBhc3NlcnQod2F0Y2hlcik7CiAKLSAgICB0aGlzLT5DaGlsZHJlbi5lbXBsYWNlKHN0ZDo6bWFrZV9wYWlyKHBzLCB3YXRjaGVyKSk7CisgICAgdGhpcy0+Q2hpbGRyZW4uZW1wbGFjZShwcywgc3RkOjp1bmlxdWVfcHRyPGNtSUJhc2VXYXRjaGVyPih3YXRjaGVyKSk7CiAgIH0KIAogcHJpdmF0ZToKLSAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBjbUlCYXNlV2F0Y2hlcio+IENoaWxkcmVuOyAvLyBvd25lZCEKKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Y21JQmFzZVdhdGNoZXI+PgorICAgIENoaWxkcmVuOyAvLyBvd25lZCEKIH07CiAKIC8vIFJvb3Qgb2YgYWxsIHRoZSBkaWZmZXJlbnQgKG9uIHdpbmRvd3MhKSByb290IGRpcmVjdG9yaWVzOgpAQCAtMjk1LDE0ICsyOTIsMTEgQEAKIH0gLy8gbmFtZXNwYWNlCiAKIGNtRmlsZU1vbml0b3I6OmNtRmlsZU1vbml0b3IodXZfbG9vcF90KiBsKQotICA6IFJvb3QobmV3IGNtUm9vdFdhdGNoZXIobCkpCisgIDogUm9vdChjbTo6bWFrZV91bmlxdWU8Y21Sb290V2F0Y2hlcj4obCkpCiB7CiB9CiAKLWNtRmlsZU1vbml0b3I6On5jbUZpbGVNb25pdG9yKCkKLXsKLSAgZGVsZXRlIHRoaXMtPlJvb3Q7Ci19CitjbUZpbGVNb25pdG9yOjp+Y21GaWxlTW9uaXRvcigpID0gZGVmYXVsdDsKIAogdm9pZCBjbUZpbGVNb25pdG9yOjpNb25pdG9yUGF0aHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrIGNvbnN0JiBjYikKQEAgLTMxNiw3ICszMTAsNyBAQAogICAgIGlmIChzZWdtZW50Q291bnQgPCAyKSB7IC8vIEV4cGVjdCBhdCBsZWFzdCByb290ZGlyIGFuZCBmaWxlbmFtZQogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGNtVmlydHVhbERpcmVjdG9yeVdhdGNoZXIqIGN1cnJlbnRXYXRjaGVyID0gdGhpcy0+Um9vdDsKKyAgICBjbVZpcnR1YWxEaXJlY3RvcnlXYXRjaGVyKiBjdXJyZW50V2F0Y2hlciA9IHRoaXMtPlJvb3QuZ2V0KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWdtZW50Q291bnQ7ICsraSkgewogICAgICAgYXNzZXJ0KGN1cnJlbnRXYXRjaGVyKTsKIApAQCAtMzM0LDExICszMjgsMTIgQEAKICAgICAgIGNtSUJhc2VXYXRjaGVyKiBuZXh0V2F0Y2hlciA9IGN1cnJlbnRXYXRjaGVyLT5GaW5kKGN1cnJlbnRTZWdtZW50KTsKICAgICAgIGlmICghbmV4dFdhdGNoZXIpIHsKICAgICAgICAgaWYgKHJvb3RTZWdtZW50KSB7IC8vIFJvb3QgcGFydAotICAgICAgICAgIGFzc2VydChjdXJyZW50V2F0Y2hlciA9PSB0aGlzLT5Sb290KTsKLSAgICAgICAgICBuZXh0V2F0Y2hlciA9IG5ldyBjbVJvb3REaXJlY3RvcnlXYXRjaGVyKHRoaXMtPlJvb3QsIGN1cnJlbnRTZWdtZW50KTsKKyAgICAgICAgICBhc3NlcnQoY3VycmVudFdhdGNoZXIgPT0gdGhpcy0+Um9vdC5nZXQoKSk7CisgICAgICAgICAgbmV4dFdhdGNoZXIgPQorICAgICAgICAgICAgbmV3IGNtUm9vdERpcmVjdG9yeVdhdGNoZXIodGhpcy0+Um9vdC5nZXQoKSwgY3VycmVudFNlZ21lbnQpOwogICAgICAgICAgIGFzc2VydChjdXJyZW50V2F0Y2hlci0+RmluZChjdXJyZW50U2VnbWVudCkgPT0gbmV4dFdhdGNoZXIpOwogICAgICAgICB9IGVsc2UgaWYgKGZpbGVTZWdtZW50KSB7IC8vIEZpbGUgcGFydAotICAgICAgICAgIGFzc2VydChjdXJyZW50V2F0Y2hlciAhPSB0aGlzLT5Sb290KTsKKyAgICAgICAgICBhc3NlcnQoY3VycmVudFdhdGNoZXIgIT0gdGhpcy0+Um9vdC5nZXQoKSk7CiAgICAgICAgICAgbmV4dFdhdGNoZXIgPSBuZXcgY21GaWxlV2F0Y2hlcigKICAgICAgICAgICAgIGR5bmFtaWNfY2FzdDxjbVJlYWxEaXJlY3RvcnlXYXRjaGVyKj4oY3VycmVudFdhdGNoZXIpLAogICAgICAgICAgICAgY3VycmVudFNlZ21lbnQsIGNiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVNb25pdG9yLmggYi9Tb3VyY2UvY21GaWxlTW9uaXRvci5oCmluZGV4IDdmZmM5MjkuLmI1MTBhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVNb25pdG9yLmgKKysrIGIvU291cmNlL2NtRmlsZU1vbml0b3IuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtMzAsNSArMzEsNSBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gV2F0Y2hlZERpcmVjdG9yaWVzKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gIGNtUm9vdFdhdGNoZXIqIFJvb3Q7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbVJvb3RXYXRjaGVyPiBSb290OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRCYXNlLmN4eCBiL1NvdXJjZS9jbUZpbmRCYXNlLmN4eAppbmRleCA3ZDc0MTE4Li5iNTU1M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kQmFzZS5jeHgKKysrIGIvU291cmNlL2NtRmluZEJhc2UuY3h4CkBAIC00LDEwICs0LDExIEBACiAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNlYXJjaFBhdGguaCIKQEAgLTIxLDEwICsyMiw2IEBACiBjbUZpbmRCYXNlOjpjbUZpbmRCYXNlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiAgIDogY21GaW5kQ29tbW9uKHN0YXR1cykKIHsKLSAgdGhpcy0+QWxyZWFkeUluQ2FjaGUgPSBmYWxzZTsKLSAgdGhpcy0+QWxyZWFkeUluQ2FjaGVXaXRob3V0TWV0YUluZm8gPSBmYWxzZTsKLSAgdGhpcy0+TmFtZXNQZXJEaXIgPSBmYWxzZTsKLSAgdGhpcy0+TmFtZXNQZXJEaXJBbGxvd2VkID0gZmFsc2U7CiB9CiAKIGJvb2wgY21GaW5kQmFzZTo6UGFyc2VBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzSW4pCkBAIC0xMTQsMTkgKzExMSwyNSBAQAogICAgIH0gZWxzZSBpZiAoYXJnc1tqXSA9PSAiTk9fU1lTVEVNX1BBVEgiKSB7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICAgIHRoaXMtPk5vRGVmYXVsdFBhdGggPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnc1tqXSA9PSAiUkVRVUlSRUQiKSB7CisgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICAgIHRoaXMtPlJlcXVpcmVkID0gdHJ1ZTsKKyAgICAgIG5ld1N0eWxlID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQ29tbW9uQXJndW1lbnQoYXJnc1tqXSkpIHsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgIH0gZWxzZSB7CiAgICAgICAvLyBTb21lIGNvbW1vbiBhcmd1bWVudHMgd2VyZSBhY2NpZGVudGFsbHkgc3VwcG9ydGVkIGJ5IENNYWtlCiAgICAgICAvLyAyLjQgYW5kIDIuNi4wIGluIHRoZSBzaG9ydC1oYW5kIGZvcm0gb2YgdGhlIGNvbW1hbmQsIHNvIHdlCiAgICAgICAvLyBtdXN0IHN1cHBvcnQgaXQgZXZlbiB0aG91Z2ggaXQgaXMgbm90IGRvY3VtZW50ZWQuCi0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ05hbWVzKSB7Ci0gICAgICB0aGlzLT5OYW1lcy5wdXNoX2JhY2soYXJnc1tqXSk7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ1BhdGhzKSB7Ci0gICAgICB0aGlzLT5Vc2VyR3Vlc3NBcmdzLnB1c2hfYmFjayhhcmdzW2pdKTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nSGludHMpIHsKLSAgICAgIHRoaXMtPlVzZXJIaW50c0FyZ3MucHVzaF9iYWNrKGFyZ3Nbal0pOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdQYXRoU3VmZml4ZXMpIHsKLSAgICAgIHRoaXMtPkFkZFBhdGhTdWZmaXgoYXJnc1tqXSk7CisgICAgICBpZiAoZG9pbmcgPT0gRG9pbmdOYW1lcykgeworICAgICAgICB0aGlzLT5OYW1lcy5wdXNoX2JhY2soYXJnc1tqXSk7CisgICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUGF0aHMpIHsKKyAgICAgICAgdGhpcy0+VXNlckd1ZXNzQXJncy5wdXNoX2JhY2soYXJnc1tqXSk7CisgICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nSGludHMpIHsKKyAgICAgICAgdGhpcy0+VXNlckhpbnRzQXJncy5wdXNoX2JhY2soYXJnc1tqXSk7CisgICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUGF0aFN1ZmZpeGVzKSB7CisgICAgICAgIHRoaXMtPkFkZFBhdGhTdWZmaXgoYXJnc1tqXSk7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTE1Myw3ICsxNTYsNyBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzaG9ydEFyZ3MgPSB0aGlzLT5OYW1lczsKICAgICB0aGlzLT5OYW1lcy5jbGVhcigpOyAvLyBjbGVhciBvdXQgYW55IHZhbHVlcyBpbiBOYW1lcwogICAgIHRoaXMtPk5hbWVzLnB1c2hfYmFjayhzaG9ydEFyZ3NbMF0pOwotICAgIGNtQXBwZW5kKHRoaXMtPlVzZXJHdWVzc0FyZ3MsIHNob3J0QXJncy5iZWdpbigpICsgMSwgc2hvcnRBcmdzLmVuZCgpKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPlVzZXJHdWVzc0FyZ3MsIHNob3J0QXJncy5iZWdpbigpICsgMSwgc2hvcnRBcmdzLmVuZCgpKTsKICAgfQogICB0aGlzLT5FeHBhbmRQYXRocygpOwogCkBAIC0yODgsMzkgKzI5MSwxMiBAQAogICBwYXRocy5BZGRTdWZmaXhlcyh0aGlzLT5TZWFyY2hQYXRoU3VmZml4ZXMpOwogfQogCi12b2lkIGNtRmluZEJhc2U6OlByaW50RmluZFN0dWZmKCkKLXsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hGcmFtZXdvcmtMYXN0OiAiIDw8IHRoaXMtPlNlYXJjaEZyYW1ld29ya0xhc3QgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hGcmFtZXdvcmtPbmx5OiAiIDw8IHRoaXMtPlNlYXJjaEZyYW1ld29ya09ubHkgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hGcmFtZXdvcmtGaXJzdDogIiA8PCB0aGlzLT5TZWFyY2hGcmFtZXdvcmtGaXJzdCA8PCAiXG4iOwotICBzdGQ6OmNlcnIgPDwgIlNlYXJjaEFwcEJ1bmRsZUxhc3Q6ICIgPDwgdGhpcy0+U2VhcmNoQXBwQnVuZGxlTGFzdCA8PCAiXG4iOwotICBzdGQ6OmNlcnIgPDwgIlNlYXJjaEFwcEJ1bmRsZU9ubHk6ICIgPDwgdGhpcy0+U2VhcmNoQXBwQnVuZGxlT25seSA8PCAiXG4iOwotICBzdGQ6OmNlcnIgPDwgIlNlYXJjaEFwcEJ1bmRsZUZpcnN0OiAiIDw8IHRoaXMtPlNlYXJjaEFwcEJ1bmRsZUZpcnN0IDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiVmFyaWFibGVOYW1lICIgPDwgdGhpcy0+VmFyaWFibGVOYW1lIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiVmFyaWFibGVEb2N1bWVudGF0aW9uICIgPDwgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiTm9EZWZhdWx0UGF0aCAiIDw8IHRoaXMtPk5vRGVmYXVsdFBhdGggPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOb0NNYWtlRW52aXJvbm1lbnRQYXRoICIgPDwgdGhpcy0+Tm9DTWFrZUVudmlyb25tZW50UGF0aAotICAgICAgICAgICAgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOb0NNYWtlUGF0aCAiIDw8IHRoaXMtPk5vQ01ha2VQYXRoIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiTm9TeXN0ZW1FbnZpcm9ubWVudFBhdGggIiA8PCB0aGlzLT5Ob1N5c3RlbUVudmlyb25tZW50UGF0aAotICAgICAgICAgICAgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOb0NNYWtlU3lzdGVtUGF0aCAiIDw8IHRoaXMtPk5vQ01ha2VTeXN0ZW1QYXRoIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiRW52aXJvbm1lbnRQYXRoICIgPDwgdGhpcy0+RW52aXJvbm1lbnRQYXRoIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiQ01ha2VQYXRoTmFtZSAiIDw8IHRoaXMtPkNNYWtlUGF0aE5hbWUgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOYW1lcyAgIiA8PCBjbUpvaW4odGhpcy0+TmFtZXMsICIgIikgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiU2VhcmNoUGF0aFN1ZmZpeGVzICAiOwotICBzdGQ6OmNlcnIgPDwgY21Kb2luKHRoaXMtPlNlYXJjaFBhdGhTdWZmaXhlcywgIlxuIikgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hQYXRoc1xuIjsKLSAgc3RkOjpjZXJyIDw8IGNtV3JhcCgiWyIsIHRoaXMtPlNlYXJjaFBhdGhzLCAiXSIsICJcbiIpIDw8ICJcbiI7Ci19Ci0KIGJvb2wgY21GaW5kQmFzZTo6Q2hlY2tGb3JWYXJpYWJsZUluQ2FjaGUoKQogewogICBpZiAoY29uc3QgY2hhciogY2FjaGVWYWx1ZSA9CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSkpIHsKICAgICBjbVN0YXRlKiBzdGF0ZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpOwotICAgIGNvbnN0IGNoYXIqIGNhY2hlRW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlZhcmlhYmxlTmFtZSk7CisgICAgY21Qcm9wIGNhY2hlRW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlZhcmlhYmxlTmFtZSk7CiAgICAgYm9vbCBmb3VuZCA9ICFjbUlzTk9URk9VTkQoY2FjaGVWYWx1ZSk7CiAgICAgYm9vbCBjYWNoZWQgPSBjYWNoZUVudHJ5ICE9IG51bGxwdHI7CiAgICAgaWYgKGZvdW5kKSB7CkBAIC0zMzYsMTAgKzMxMiw5NCBAQAogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChjYWNoZWQpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGhzID0KKyAgICAgIGNtUHJvcCBocyA9CiAgICAgICAgIHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkodGhpcy0+VmFyaWFibGVOYW1lLCAiSEVMUFNUUklORyIpOwotICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uID0gaHMgPyBocyA6ICIobm9uZSkiOworICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uID0gaHMgPyAqaHMgOiAiKG5vbmUpIjsKICAgICB9CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQorCitjbUZpbmRCYXNlRGVidWdTdGF0ZTo6Y21GaW5kQmFzZURlYnVnU3RhdGUoc3RkOjpzdHJpbmcgY29tbWFuZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21GaW5kQmFzZSBjb25zdCogZmluZEJhc2UpCisgIDogRmluZENvbW1hbmQoZmluZEJhc2UpCisgICwgQ29tbWFuZE5hbWUoc3RkOjptb3ZlKGNvbW1hbmROYW1lKSkKK3sKK30KKworY21GaW5kQmFzZURlYnVnU3RhdGU6On5jbUZpbmRCYXNlRGVidWdTdGF0ZSgpCit7CisgIGlmICh0aGlzLT5GaW5kQ29tbWFuZC0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgYnVmZmVyID0KKyAgICAgIGNtU3RyQ2F0KHRoaXMtPkNvbW1hbmROYW1lLCAiIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6XG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoIiAgVkFSOiAiLCB0aGlzLT5GaW5kQ29tbWFuZC0+VmFyaWFibGVOYW1lLCAiXG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoCisgICAgICAiICBOQU1FUzogIiwgY21XcmFwKCJcIiIsIHRoaXMtPkZpbmRDb21tYW5kLT5OYW1lcywgIlwiIiwgIlxuICAgICAgICAgIiksCisgICAgICAiXG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoCisgICAgICAiICBEb2N1bWVudGF0aW9uOiAiLCB0aGlzLT5GaW5kQ29tbWFuZC0+VmFyaWFibGVEb2N1bWVudGF0aW9uLCAiXG4iKTsKKyAgICBidWZmZXIgKz0gIiAgRnJhbWV3b3JrXG4iOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIE9ubHkgU2VhcmNoIEZyYW1ld29ya3M6ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkZpbmRDb21tYW5kLT5TZWFyY2hGcmFtZXdvcmtPbmx5LCAiXG4iKTsKKworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIFNlYXJjaCBGcmFtZXdvcmtzIExhc3Q6ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkZpbmRDb21tYW5kLT5TZWFyY2hGcmFtZXdvcmtMYXN0LCAiXG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoIiAgICBTZWFyY2ggRnJhbWV3b3JrcyBGaXJzdDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RmluZENvbW1hbmQtPlNlYXJjaEZyYW1ld29ya0ZpcnN0LCAiXG4iKTsKKyAgICBidWZmZXIgKz0gIiAgQXBwQnVuZGxlXG4iOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIE9ubHkgU2VhcmNoIEFwcEJ1bmRsZTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RmluZENvbW1hbmQtPlNlYXJjaEFwcEJ1bmRsZU9ubHksICJcbiIpOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIFNlYXJjaCBBcHBCdW5kbGUgTGFzdDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RmluZENvbW1hbmQtPlNlYXJjaEFwcEJ1bmRsZUxhc3QsICJcbiIpOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIFNlYXJjaCBBcHBCdW5kbGUgRmlyc3Q6ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkZpbmRDb21tYW5kLT5TZWFyY2hBcHBCdW5kbGVGaXJzdCwgIlxuIik7CisKKyAgICBpZiAodGhpcy0+RmluZENvbW1hbmQtPk5vRGVmYXVsdFBhdGgpIHsKKyAgICAgIGJ1ZmZlciArPSAiICBOT19ERUZBVUxUX1BBVEggRW5hYmxlZFxuIjsKKyAgICB9IGVsc2UgeworICAgICAgYnVmZmVyICs9IGNtU3RyQ2F0KAorICAgICAgICAiICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAiLCAhdGhpcy0+RmluZENvbW1hbmQtPk5vQ01ha2VQYXRoLCAiXG4iLAorICAgICAgICAiICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIOiAiLAorICAgICAgICAhdGhpcy0+RmluZENvbW1hbmQtPk5vQ01ha2VFbnZpcm9ubWVudFBhdGgsICJcbiIsCisgICAgICAgICIgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAiLAorICAgICAgICAhdGhpcy0+RmluZENvbW1hbmQtPk5vU3lzdGVtRW52aXJvbm1lbnRQYXRoLCAiXG4iLAorICAgICAgICAiICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSDogIiwKKyAgICAgICAgIXRoaXMtPkZpbmRDb21tYW5kLT5Ob0NNYWtlU3lzdGVtUGF0aCwgIlxuIik7CisgICAgfQorCisgICAgYnVmZmVyICs9CisgICAgICBjbVN0ckNhdCh0aGlzLT5Db21tYW5kTmFtZSwgIiBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuIik7CisgICAgZm9yIChhdXRvIGNvbnN0JiBzdGF0ZSA6IHRoaXMtPkZhaWxlZFNlYXJjaExvY2F0aW9ucykgeworICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGNtU3RyQ2F0KCIgICIsIHN0YXRlLnBhdGgpOworICAgICAgaWYgKCFzdGF0ZS5yZWdleE5hbWUuZW1wdHkoKSkgeworICAgICAgICBwYXRoID0gY21TdHJDYXQocGF0aCwgIi8iLCBzdGF0ZS5yZWdleE5hbWUpOworICAgICAgfQorICAgICAgYnVmZmVyICs9IGNtU3RyQ2F0KHBhdGgsICJcbiIpOworICAgIH0KKworICAgIGlmICghdGhpcy0+Rm91bmRTZWFyY2hMb2NhdGlvbi5wYXRoLmVtcHR5KCkpIHsKKyAgICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiVGhlIGl0ZW0gd2FzIGZvdW5kIGF0XG4gICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Rm91bmRTZWFyY2hMb2NhdGlvbi5wYXRoLCAiXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgYnVmZmVyICs9ICJUaGUgaXRlbSB3YXMgbm90IGZvdW5kLlxuIjsKKyAgICB9CisKKyAgICB0aGlzLT5GaW5kQ29tbWFuZC0+RGVidWdNZXNzYWdlKGJ1ZmZlcik7CisgIH0KK30KKwordm9pZCBjbUZpbmRCYXNlRGVidWdTdGF0ZTo6Rm91bmRBdChzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXhOYW1lKQoreworICBpZiAodGhpcy0+RmluZENvbW1hbmQtPkRlYnVnTW9kZSkgeworICAgIHRoaXMtPkZvdW5kU2VhcmNoTG9jYXRpb24gPSBEZWJ1Z0xpYlN0YXRleyBzdGQ6Om1vdmUocmVnZXhOYW1lKSwgcGF0aCB9OworICB9Cit9CisKK3ZvaWQgY21GaW5kQmFzZURlYnVnU3RhdGU6OkZhaWxlZEF0KHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXhOYW1lKQoreworICBpZiAodGhpcy0+RmluZENvbW1hbmQtPkRlYnVnTW9kZSkgeworICAgIHRoaXMtPkZhaWxlZFNlYXJjaExvY2F0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHJlZ2V4TmFtZSksIHBhdGgpOworICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQmFzZS5oIGIvU291cmNlL2NtRmluZEJhc2UuaAppbmRleCBmNzVkYjVmLi40Y2JmMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kQmFzZS5oCisrKyBiL1NvdXJjZS9jbUZpbmRCYXNlLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtRmluZENvbW1vbi5oIgpAQCAtMzEsNyArMzIsNyBAQAogICB2aXJ0dWFsIGJvb2wgUGFyc2VBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzKTsKIAogcHJvdGVjdGVkOgotICB2b2lkIFByaW50RmluZFN0dWZmKCk7CisgIGZyaWVuZCBjbGFzcyBjbUZpbmRCYXNlRGVidWdTdGF0ZTsKICAgdm9pZCBFeHBhbmRQYXRocygpOwogCiAgIC8vIHNlZSBpZiB0aGUgVmFyaWFibGVOYW1lIGlzIGFscmVhZHkgc2V0IGluIHRoZSBjYWNoZSwKQEAgLTQzLDE0ICs0NCwxNiBAQAogICBzdGQ6OnN0cmluZyBWYXJpYWJsZURvY3VtZW50YXRpb247CiAgIHN0ZDo6c3RyaW5nIFZhcmlhYmxlTmFtZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE5hbWVzOwotICBib29sIE5hbWVzUGVyRGlyOwotICBib29sIE5hbWVzUGVyRGlyQWxsb3dlZDsKKyAgYm9vbCBOYW1lc1BlckRpciA9IGZhbHNlOworICBib29sIE5hbWVzUGVyRGlyQWxsb3dlZCA9IGZhbHNlOwogCiAgIC8vIENNQUtFXypfUEFUSCBDTUFLRV9TWVNURU1fKl9QQVRIIEZSQU1FV09SS3xMSUJSQVJZfElOQ0xVREV8UFJPR1JBTQogICBzdGQ6OnN0cmluZyBFbnZpcm9ubWVudFBhdGg7IC8vIExJQixJTkNMVURFCiAKLSAgYm9vbCBBbHJlYWR5SW5DYWNoZTsKLSAgYm9vbCBBbHJlYWR5SW5DYWNoZVdpdGhvdXRNZXRhSW5mbzsKKyAgYm9vbCBBbHJlYWR5SW5DYWNoZSA9IGZhbHNlOworICBib29sIEFscmVhZHlJbkNhY2hlV2l0aG91dE1ldGFJbmZvID0gZmFsc2U7CisKKyAgYm9vbCBSZXF1aXJlZCA9IGZhbHNlOwogCiBwcml2YXRlOgogICAvLyBBZGQgcGllY2VzIG9mIHRoZSBzZWFyY2guCkBAIC02Myw0ICs2NiwzMyBAQAogICB2b2lkIEZpbGxVc2VyR3Vlc3NQYXRoKCk7CiB9OwogCitjbGFzcyBjbUZpbmRCYXNlRGVidWdTdGF0ZQoreworcHVibGljOgorICBleHBsaWNpdCBjbUZpbmRCYXNlRGVidWdTdGF0ZShzdGQ6OnN0cmluZyBuYW1lLCBjbUZpbmRCYXNlIGNvbnN0KiBmaW5kQmFzZSk7CisgIH5jbUZpbmRCYXNlRGVidWdTdGF0ZSgpOworCisgIHZvaWQgRm91bmRBdChzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCwgc3RkOjpzdHJpbmcgcmVnZXhOYW1lID0gc3RkOjpzdHJpbmcoKSk7CisgIHZvaWQgRmFpbGVkQXQoc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgsCisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXhOYW1lID0gc3RkOjpzdHJpbmcoKSk7CisKK3ByaXZhdGU6CisgIHN0cnVjdCBEZWJ1Z0xpYlN0YXRlCisgIHsKKyAgICBEZWJ1Z0xpYlN0YXRlKCkgPSBkZWZhdWx0OworICAgIERlYnVnTGliU3RhdGUoc3RkOjpzdHJpbmcmJiBuLCBzdGQ6OnN0cmluZyBwKQorICAgICAgOiByZWdleE5hbWUobikKKyAgICAgICwgcGF0aChzdGQ6Om1vdmUocCkpCisgICAgeworICAgIH0KKyAgICBzdGQ6OnN0cmluZyByZWdleE5hbWU7CisgICAgc3RkOjpzdHJpbmcgcGF0aDsKKyAgfTsKKworICBjbUZpbmRCYXNlIGNvbnN0KiBGaW5kQ29tbWFuZDsKKyAgc3RkOjpzdHJpbmcgQ29tbWFuZE5hbWU7CisgIHN0ZDo6dmVjdG9yPERlYnVnTGliU3RhdGU+IEZhaWxlZFNlYXJjaExvY2F0aW9uczsKKyAgRGVidWdMaWJTdGF0ZSBGb3VuZFNlYXJjaExvY2F0aW9uOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQ29tbW9uLmN4eCBiL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4CmluZGV4IGJhZGVjNTUuLjgyYWNmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4CkBAIC03LDExICs3LDE0IEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKyNpbmNsdWRlICJjbWFrZS5oIgogCiBjbUZpbmRDb21tb246OlBhdGhHcm91cCBjbUZpbmRDb21tb246OlBhdGhHcm91cDo6QWxsKCJBTEwiKTsKIGNtRmluZENvbW1vbjo6UGF0aExhYmVsIGNtRmluZENvbW1vbjo6UGF0aExhYmVsOjpQYWNrYWdlUm9vdCgKQEAgLTUyLDYgKzU1LDggQEAKICAgdGhpcy0+U2VhcmNoQXBwQnVuZGxlTGFzdCA9IGZhbHNlOwogCiAgIHRoaXMtPkluaXRpYWxpemVTZWFyY2hQYXRoR3JvdXBzKCk7CisKKyAgdGhpcy0+RGVidWdNb2RlID0gZmFsc2U7CiB9CiAKIHZvaWQgY21GaW5kQ29tbW9uOjpTZXRFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgZSkKQEAgLTU5LDYgKzY0LDE5IEBACiAgIHRoaXMtPlN0YXR1cy5TZXRFcnJvcihlKTsKIH0KIAordm9pZCBjbUZpbmRDb21tb246OkRlYnVnTWVzc2FnZShzdGQ6OnN0cmluZyBjb25zdCYgbXNnKSBjb25zdAoreworICBpZiAodGhpcy0+TWFrZWZpbGUpIHsKKyAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpMT0csIG1zZyk7CisgIH0KK30KKworYm9vbCBjbUZpbmRDb21tb246OkNvbXB1dGVJZkRlYnVnTW9kZVdhbnRlZCgpCit7CisgIHJldHVybiB0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfRklORF9ERUJVR19NT0RFIikgfHwKKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXREZWJ1Z0ZpbmRPdXRwdXQoKTsKK30KKwogdm9pZCBjbUZpbmRDb21tb246OkluaXRpYWxpemVTZWFyY2hQYXRoR3JvdXBzKCkKIHsKICAgc3RkOjp2ZWN0b3I8UGF0aExhYmVsPiogbGFiZWxzOwpAQCAtMjQ5LDcgKzI2Nyw3IEBACiAgIC8vIElmIHNlYXJjaGluZyBib3RoIHJvb3RlZCBhbmQgdW5yb290ZWQgcGF0aHMgYWRkIHRoZSBvcmlnaW5hbAogICAvLyBwYXRocyBhZ2Fpbi4KICAgaWYgKHRoaXMtPkZpbmRSb290UGF0aE1vZGUgPT0gUm9vdFBhdGhNb2RlQm90aCkgewotICAgIGNtQXBwZW5kKHBhdGhzLCB1bnJvb3RlZFBhdGhzKTsKKyAgICBjbTo6YXBwZW5kKHBhdGhzLCB1bnJvb3RlZFBhdGhzKTsKICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQ29tbW9uLmggYi9Tb3VyY2UvY21GaW5kQ29tbW9uLmgKaW5kZXggODE3N2VhYy4uOTE2ZjNiYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZENvbW1vbi5oCisrKyBiL1NvdXJjZS9jbUZpbmRDb21tb24uaApAQCAtMzAsOCArMzAsMTEgQEAKIAogICB2b2lkIFNldEVycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBlKTsKIAorICBib29sIERlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5EZWJ1Z01vZGU7IH0KKwogcHJvdGVjdGVkOgogICBmcmllbmQgY2xhc3MgY21TZWFyY2hQYXRoOworICBmcmllbmQgY2xhc3MgY21GaW5kQmFzZURlYnVnU3RhdGU7CiAKICAgLyoqIFVzZWQgdG8gZGVmaW5lIGdyb3VwcyBvZiBwYXRoIGxhYmVscyAqLwogICBjbGFzcyBQYXRoR3JvdXAgOiBwdWJsaWMgY21QYXRoTGFiZWwKQEAgLTk2LDYgKzk5LDEwIEBACiAgIC8qKiBDb21wdXRlIHRoZSBjdXJyZW50IGRlZmF1bHQgc2VhcmNoIG1vZGVzIGJhc2VkIG9uIGdsb2JhbCB2YXJpYWJsZXMuICAqLwogICB2b2lkIFNlbGVjdERlZmF1bHRTZWFyY2hNb2RlcygpOwogCisgIC8qKiBUaGUgYEluaXRpYWxQYXNzYCBmdW5jdGlvbnMgb2YgdGhlIGNoaWxkIGNsYXNzZXMgc2hvdWxkIHNldAorICAgICAgdGhpcy0+RGVidWdNb2RlIHRvIHRoZSByZXN1bHQgb2YgdGhpcy4gICovCisgIGJvb2wgQ29tcHV0ZUlmRGVidWdNb2RlV2FudGVkKCk7CisKICAgLy8gUGF0aCBhcmd1bWVudHMgcHJpb3IgdG8gcGF0aCBtYW5pcHVsYXRpb24gcm91dGluZXMKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFVzZXJIaW50c0FyZ3M7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBVc2VyR3Vlc3NBcmdzOwpAQCAtMTA2LDYgKzExMyw4IEBACiAgIGJvb2wgQ2hlY2tDb21tb25Bcmd1bWVudChzdGQ6OnN0cmluZyBjb25zdCYgYXJnKTsKICAgdm9pZCBBZGRQYXRoU3VmZml4KHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpOwogCisgIHZvaWQgRGVidWdNZXNzYWdlKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpIGNvbnN0OworICBib29sIERlYnVnTW9kZTsKICAgYm9vbCBOb0RlZmF1bHRQYXRoOwogICBib29sIE5vUGFja2FnZVJvb3RQYXRoOwogICBib29sIE5vQ01ha2VQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmluZExpYnJhcnlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUZpbmRMaWJyYXJ5Q29tbWFuZC5jeHgKaW5kZXggMjAyMjFiMS4uMzFmMTIwMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZExpYnJhcnlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21GaW5kTGlicmFyeUNvbW1hbmQuY3h4CkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMjksNiArMzAsNyBAQAogLy8gY21GaW5kTGlicmFyeUNvbW1hbmQKIGJvb2wgY21GaW5kTGlicmFyeUNvbW1hbmQ6OkluaXRpYWxQYXNzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJnc0luKQogeworICB0aGlzLT5EZWJ1Z01vZGUgPSBDb21wdXRlSWZEZWJ1Z01vZGVXYW50ZWQoKTsKICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uID0gIlBhdGggdG8gYSBsaWJyYXJ5LiI7CiAgIHRoaXMtPkNNYWtlUGF0aE5hbWUgPSAiTElCUkFSWSI7CiAgIGlmICghdGhpcy0+UGFyc2VBcmd1bWVudHMoYXJnc0luKSkgewpAQCAtNzQsMTUgKzc2LDIyIEBACiAgIHN0ZDo6c3RyaW5nIGNvbnN0IGxpYnJhcnkgPSB0aGlzLT5GaW5kTGlicmFyeSgpOwogICBpZiAoIWxpYnJhcnkuZW1wdHkoKSkgewogICAgIC8vIFNhdmUgdGhlIHZhbHVlIGluIHRoZSBjYWNoZQotICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24odGhpcy0+VmFyaWFibGVOYW1lLCBsaWJyYXJ5LmNfc3RyKCksCisgICAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZU5hbWUsIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24uY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6RklMRVBBVEgpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAgIHN0ZDo6c3RyaW5nIG5vdGZvdW5kID0gdGhpcy0+VmFyaWFibGVOYW1lICsgIi1OT1RGT1VORCI7Ci0gIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24odGhpcy0+VmFyaWFibGVOYW1lLCBub3Rmb3VuZC5jX3N0cigpLAorICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgbm90Zm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CisgIGlmICh0aGlzLT5SZXF1aXJlZCkgeworICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAiQ291bGQgbm90IGZpbmQgIiArIHRoaXMtPlZhcmlhYmxlTmFtZSArCisgICAgICAgICIgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogIiArIGNtSm9pbih0aGlzLT5OYW1lcywgIiwgIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkyLDYgKzEwMSwxMyBAQAogICBvcmlnaW5hbC5zd2FwKHRoaXMtPlNlYXJjaFBhdGhzKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbyA6IG9yaWdpbmFsKSB7CiAgICAgdGhpcy0+QWRkQXJjaGl0ZWN0dXJlUGF0aChvLCAwLCBzdWZmaXgpOworICAgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIG1zZyA9IGNtU3RyQ2F0KAorICAgICAgICAiZmluZF9saWJyYXJ5KCIsIHRoaXMtPlZhcmlhYmxlTmFtZSwgIikgcmVtb3ZlZCBvcmlnaW5hbCBzdWZmaXggIiwgbywKKyAgICAgICAgIiBmcm9tIFBBVEhfU1VGRklYRVMgd2hpbGUgYWRkaW5nIGFyY2hpdGVjdHVyZSBwYXRocyBmb3Igc3VmZml4ICciLAorICAgICAgICBzdWZmaXgsICInIik7CisgICAgICB0aGlzLT5EZWJ1Z01lc3NhZ2UobXNnKTsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTUzLDExICsxNjksMjMgQEAKIAogICAgIGlmICh1c2VfZGlyWCkgewogICAgICAgZGlyWCArPSAiLyI7CisgICAgICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1zZyA9IGNtU3RyQ2F0KAorICAgICAgICAgICJmaW5kX2xpYnJhcnkoIiwgdGhpcy0+VmFyaWFibGVOYW1lLCAiKSBhZGRlZCByZXBsYWNlbWVudCBwYXRoICIsCisgICAgICAgICAgZGlyWCwgIiB0byBQQVRIX1NVRkZJWEVTIGZvciBhcmNoaXRlY3R1cmUgc3VmZml4ICciLCBzdWZmaXgsICInIik7CisgICAgICAgIHRoaXMtPkRlYnVnTWVzc2FnZShtc2cpOworICAgICAgfQogICAgICAgdGhpcy0+U2VhcmNoUGF0aHMucHVzaF9iYWNrKHN0ZDo6bW92ZShkaXJYKSk7CiAgICAgfQogCiAgICAgaWYgKHVzZV9kaXIpIHsKICAgICAgIHRoaXMtPlNlYXJjaFBhdGhzLnB1c2hfYmFjayhkaXIpOworICAgICAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZyBtc2cgPSBjbVN0ckNhdCgKKyAgICAgICAgICAiZmluZF9saWJyYXJ5KCIsIHRoaXMtPlZhcmlhYmxlTmFtZSwgIikgYWRkZWQgcmVwbGFjZW1lbnQgcGF0aCAiLAorICAgICAgICAgIGRpciwgIiB0byBQQVRIX1NVRkZJWEVTIGZvciBhcmNoaXRlY3R1cmUgc3VmZml4ICciLCBzdWZmaXgsICInIik7CisgICAgICAgIHRoaXMtPkRlYnVnTWVzc2FnZShtc2cpOworICAgICAgfQogICAgIH0KICAgfQogfQpAQCAtMTc5LDcgKzIwNyw3IEBACiAKIHN0cnVjdCBjbUZpbmRMaWJyYXJ5SGVscGVyCiB7Ci0gIGNtRmluZExpYnJhcnlIZWxwZXIoY21NYWtlZmlsZSogbWYpOworICBjbUZpbmRMaWJyYXJ5SGVscGVyKGNtTWFrZWZpbGUqIG1mLCBjbUZpbmRCYXNlIGNvbnN0KiBmaW5kQmFzZSk7CiAKICAgLy8gQ29udGV4dCBpbmZvcm1hdGlvbi4KICAgY21NYWtlZmlsZSogTWFrZWZpbGU7CkBAIC0xOTgsNiArMjI2LDggQEAKICAgLy8gU3VwcG9ydCBmb3IgT3BlbkJTRCBzaGFyZWQgbGlicmFyeSBuYW1pbmc6IGxpYjxuYW1lPi5zby48bWFqb3I+LjxtaW5vcj4KICAgYm9vbCBPcGVuQlNEOwogCisgIGJvb2wgRGVidWdNb2RlOworCiAgIC8vIEN1cnJlbnQgbmFtZXMgdW5kZXIgY29uc2lkZXJhdGlvbi4KICAgc3RydWN0IE5hbWUKICAgewpAQCAtMjI3LDEwICsyNTcsMzMgQEAKICAgdm9pZCBTZXROYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKTsKICAgYm9vbCBDaGVja0RpcmVjdG9yeShzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCk7CiAgIGJvb2wgQ2hlY2tEaXJlY3RvcnlGb3JOYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoLCBOYW1lJiBuYW1lKTsKKworICBjbUZpbmRCYXNlRGVidWdTdGF0ZSBEZWJ1Z1NlYXJjaGVzOworCisgIHZvaWQgRGVidWdMaWJyYXJ5RmFpbGVkKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkKKyAgeworICAgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICAgIGF1dG8gcmVnZXhOYW1lID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+UHJlZml4UmVnZXhTdHIsIG5hbWUsIHRoaXMtPlN1ZmZpeFJlZ2V4U3RyKTsKKyAgICAgIHRoaXMtPkRlYnVnU2VhcmNoZXMuRmFpbGVkQXQocGF0aCwgcmVnZXhOYW1lKTsKKyAgICB9CisgIH07CisKKyAgdm9pZCBEZWJ1Z0xpYnJhcnlGb3VuZChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpCisgIHsKKyAgICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgICBhdXRvIHJlZ2V4TmFtZSA9CisgICAgICAgIGNtU3RyQ2F0KHRoaXMtPlByZWZpeFJlZ2V4U3RyLCBuYW1lLCB0aGlzLT5TdWZmaXhSZWdleFN0cik7CisgICAgICB0aGlzLT5EZWJ1Z1NlYXJjaGVzLkZvdW5kQXQocGF0aCwgcmVnZXhOYW1lKTsKKyAgICB9CisgIH07CiB9OwogCi1jbUZpbmRMaWJyYXJ5SGVscGVyOjpjbUZpbmRMaWJyYXJ5SGVscGVyKGNtTWFrZWZpbGUqIG1mKQorY21GaW5kTGlicmFyeUhlbHBlcjo6Y21GaW5kTGlicmFyeUhlbHBlcihjbU1ha2VmaWxlKiBtZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21GaW5kQmFzZSBjb25zdCogYmFzZSkKICAgOiBNYWtlZmlsZShtZikKKyAgLCBEZWJ1Z01vZGUoYmFzZS0+RGVidWdNb2RlRW5hYmxlZCgpKQorICAsIERlYnVnU2VhcmNoZXMoImZpbmRfbGlicmFyeSIsIGJhc2UpCiB7CiAgIHRoaXMtPkdHID0gdGhpcy0+TWFrZWZpbGUtPkdldEdsb2JhbEdlbmVyYXRvcigpOwogCkBAIC0zNTAsNyArNDAzLDEyIEBACiAgIC8vIGxpYnJhcnkgb3IgYW4gaW1wb3J0IGxpYnJhcnkpLgogICBpZiAobmFtZS5UcnlSYXcpIHsKICAgICB0aGlzLT5UZXN0UGF0aCA9IGNtU3RyQ2F0KHBhdGgsIG5hbWUuUmF3KTsKLSAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5UZXN0UGF0aCwgdHJ1ZSkpIHsKKworICAgIGNvbnN0IGJvb2wgZXhpc3RzID0gY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5UZXN0UGF0aCwgdHJ1ZSk7CisgICAgaWYgKCFleGlzdHMpIHsKKyAgICAgIHRoaXMtPkRlYnVnTGlicmFyeUZhaWxlZChuYW1lLlJhdywgcGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPkRlYnVnTGlicmFyeUZvdW5kKG5hbWUuUmF3LCBwYXRoKTsKICAgICAgIHRoaXMtPkJlc3RQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5UZXN0UGF0aCk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyh0aGlzLT5CZXN0UGF0aCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3Niw2ICs0MzQsOCBAQAogICAgIGlmIChuYW1lLlJlZ2V4LmZpbmQodGVzdE5hbWUpKSB7CiAgICAgICB0aGlzLT5UZXN0UGF0aCA9IGNtU3RyQ2F0KHBhdGgsIG9yaWdOYW1lKTsKICAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KHRoaXMtPlRlc3RQYXRoKSkgeworICAgICAgICB0aGlzLT5EZWJ1Z0xpYnJhcnlGb3VuZChuYW1lLlJhdywgZGlyKTsKKwogICAgICAgICAvLyBUaGlzIGlzIGEgbWF0Y2hpbmcgZmlsZS4gIENoZWNrIGlmIGl0IGlzIGJldHRlciB0aGFuIHRoZQogICAgICAgICAvLyBiZXN0IG5hbWUgZm91bmQgc28gZmFyLiAgRWFybGllciBwcmVmaXhlcyBhcmUgcHJlZmVycmVkLAogICAgICAgICAvLyBmb2xsb3dlZCBieSBlYXJsaWVyIHN1ZmZpeGVzLiAgRm9yIE9wZW5CU0QsIHNoYXJlZCBsaWJyYXJ5CkBAIC00MDIsNiArNDYyLDEyIEBACiAgICAgfQogICB9CiAKKyAgaWYgKHRoaXMtPkJlc3RQYXRoLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5EZWJ1Z0xpYnJhcnlGYWlsZWQobmFtZS5SYXcsIGRpcik7CisgIH0gZWxzZSB7CisgICAgdGhpcy0+RGVidWdMaWJyYXJ5Rm91bmQobmFtZS5SYXcsIHRoaXMtPkJlc3RQYXRoKTsKKyAgfQorCiAgIC8vIFVzZSB0aGUgYmVzdCBjYW5kaWRhdGUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnksIGlmIGFueS4KICAgcmV0dXJuICF0aGlzLT5CZXN0UGF0aC5lbXB0eSgpOwogfQpAQCAtNDE3LDcgKzQ4Myw3IEBACiBzdGQ6OnN0cmluZyBjbUZpbmRMaWJyYXJ5Q29tbWFuZDo6RmluZE5vcm1hbExpYnJhcnlOYW1lc1BlckRpcigpCiB7CiAgIC8vIFNlYXJjaCBmb3IgYWxsIG5hbWVzIGluIGVhY2ggZGlyZWN0b3J5LgotICBjbUZpbmRMaWJyYXJ5SGVscGVyIGhlbHBlcih0aGlzLT5NYWtlZmlsZSk7CisgIGNtRmluZExpYnJhcnlIZWxwZXIgaGVscGVyKHRoaXMtPk1ha2VmaWxlLCB0aGlzKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IHRoaXMtPk5hbWVzKSB7CiAgICAgaGVscGVyLkFkZE5hbWUobik7CiAgIH0KQEAgLTQzNCw3ICs1MDAsNyBAQAogc3RkOjpzdHJpbmcgY21GaW5kTGlicmFyeUNvbW1hbmQ6OkZpbmROb3JtYWxMaWJyYXJ5RGlyc1Blck5hbWUoKQogewogICAvLyBTZWFyY2ggdGhlIGVudGlyZSBwYXRoIGZvciBlYWNoIG5hbWUuCi0gIGNtRmluZExpYnJhcnlIZWxwZXIgaGVscGVyKHRoaXMtPk1ha2VmaWxlKTsKKyAgY21GaW5kTGlicmFyeUhlbHBlciBoZWxwZXIodGhpcy0+TWFrZWZpbGUsIHRoaXMpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuIDogdGhpcy0+TmFtZXMpIHsKICAgICAvLyBTd2l0Y2ggdG8gc2VhcmNoaW5nIGZvciB0aGlzIG5hbWUuCiAgICAgaGVscGVyLlNldE5hbWUobik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmN4eAppbmRleCAyYjExYjYyLi5lOTk2MzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5jeHgKQEAgLTE2MCw4ICsxNjAsOCBAQAogICAgIHRoaXMtPlJlcXVpcmVkQ01ha2VWZXJzaW9uID0gQ01ha2VfVkVSU0lPTl9FTkNPREUodlswXSwgdlsxXSwgdlsyXSk7CiAgIH0KIAotICAvLyBDaGVjayBmb3IgZGVidWcgbW9kZS4KLSAgdGhpcy0+RGVidWdNb2RlID0gdGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX0ZJTkRfREVCVUdfTU9ERSIpOworICB0aGlzLT5EZWJ1Z01vZGUgPSBDb21wdXRlSWZEZWJ1Z01vZGVXYW50ZWQoKTsKKyAgdGhpcy0+RGVidWdCdWZmZXIuY2xlYXIoKTsKIAogICAvLyBMb29rdXAgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgaWYgYW55LgogICBpZiAoY29uc3QgY2hhciogYXJjaCA9CkBAIC01NzYsNiArNTc2LDcgQEAKICAgfQogCiAgIHRoaXMtPkFwcGVuZFN1Y2Nlc3NJbmZvcm1hdGlvbigpOworCiAgIHJldHVybiBsb2FkZWRQYWNrYWdlOwogfQogCkBAIC02OTUsOCArNjk2LDIzIEBACiBib29sIGNtRmluZFBhY2thZ2VDb21tYW5kOjpGaW5kTW9kdWxlKGJvb2wmIGZvdW5kKQogewogICBzdGQ6OnN0cmluZyBtb2R1bGUgPSBjbVN0ckNhdCgiRmluZCIsIHRoaXMtPk5hbWUsICIuY21ha2UiKTsKKwogICBib29sIHN5c3RlbSA9IGZhbHNlOwotICBzdGQ6OnN0cmluZyBtZmlsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRNb2R1bGVzRmlsZShtb2R1bGUsIHN5c3RlbSk7CisgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyID0KKyAgICBjbVN0ckNhdCgiZmluZF9wYWNrYWdlIGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyBwYXRocyBmb3IgIiwgdGhpcy0+TmFtZSwKKyAgICAgICAgICAgICAiLmNtYWtlXG4iKTsKKyAgc3RkOjpzdHJpbmcgbWZpbGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0TW9kdWxlc0ZpbGUoCisgICAgbW9kdWxlLCBzeXN0ZW0sIHRoaXMtPkRlYnVnTW9kZSwgZGVidWdCdWZmZXIpOworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgaWYgKG1maWxlLmVtcHR5KCkpIHsKKyAgICAgIGRlYnVnQnVmZmVyID0gY21TdHJDYXQoZGVidWdCdWZmZXIsICJUaGUgZmlsZSB3YXMgbm90IGZvdW5kLiIpOworICAgIH0gZWxzZSB7CisgICAgICBkZWJ1Z0J1ZmZlciA9CisgICAgICAgIGNtU3RyQ2F0KGRlYnVnQnVmZmVyLCAiVGhlIGZpbGUgd2FzIGZvdW5kIGF0XG4gICIsIG1maWxlLCAiXG4iKTsKKyAgICB9CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CisKICAgaWYgKCFtZmlsZS5lbXB0eSgpKSB7CiAgICAgaWYgKHN5c3RlbSkgewogICAgICAgYXV0byBpdCA9IHRoaXMtPkRlcHJlY2F0ZWRGaW5kTW9kdWxlcy5maW5kKHRoaXMtPk5hbWUpOwpAQCAtODI3LDYgKzg0MywxMSBAQAogICAgIHJlc3VsdCA9IGZhbHNlOwogICB9CiAKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIHRoaXMtPkRlYnVnTWVzc2FnZSh0aGlzLT5EZWJ1Z0J1ZmZlcik7CisgICAgdGhpcy0+RGVidWdCdWZmZXIuY2xlYXIoKTsKKyAgfQorCiAgIC8vIHBhY2thZ2Ugbm90IGZvdW5kCiAgIGlmIChyZXN1bHQgJiYgIWZvdW5kKSB7CiAgICAgLy8gd2FybiBpZiBwYWNrYWdlIHJlcXVpcmVkIG9yIG5laXRoZXIgcXVpZXQgbm9yIGluIGNvbmZpZyBtb2RlCkBAIC05ODcsNiArMTAwOCwxMSBAQAogCiAgIC8vIExvb2sgZm9yIHRoZSBwcm9qZWN0J3MgY29uZmlndXJhdGlvbiBmaWxlLgogICBib29sIGZvdW5kID0gZmFsc2U7CisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmRfcGFja2FnZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9ucyBmb3IgdGhlIENvbmZpZyBtb2R1bGU6XG4iKTsKKyAgfQogCiAgIC8vIFNlYXJjaCBmb3IgZnJhbWV3b3Jrcy4KICAgaWYgKCFmb3VuZCAmJiAodGhpcy0+U2VhcmNoRnJhbWV3b3JrRmlyc3QgfHwgdGhpcy0+U2VhcmNoRnJhbWV3b3JrT25seSkpIHsKQEAgLTEwMTMsNiArMTAzOSwxNiBAQAogICAgIGZvdW5kID0gdGhpcy0+RmluZEFwcEJ1bmRsZUNvbmZpZygpOwogICB9CiAKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIGlmIChmb3VuZCkgeworICAgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCgKKyAgICAgICAgdGhpcy0+RGVidWdCdWZmZXIsICJUaGUgZmlsZSB3YXMgZm91bmQgYXRcbiAgIiwgdGhpcy0+RmlsZUZvdW5kLCAiXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy0+RGVidWdCdWZmZXIgPQorICAgICAgICBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgIlRoZSBmaWxlIHdhcyBub3QgZm91bmQuXG4iKTsKKyAgICB9CisgIH0KKwogICAvLyBTdG9yZSB0aGUgZW50cnkgaW4gdGhlIGNhY2hlIHNvIGl0IGNhbiBiZSBzZXQgYnkgdGhlIHVzZXIuCiAgIHN0ZDo6c3RyaW5nIGluaXQ7CiAgIGlmIChmb3VuZCkgewpAQCAtMTAyNCw4ICsxMDYwLDkgQEAKICAgICBjbVN0ckNhdCgiVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGEgQ01ha2UgY29uZmlndXJhdGlvbiBmaWxlIGZvciAiLAogICAgICAgICAgICAgIHRoaXMtPk5hbWUsICcuJyk7CiAgIC8vIFdlIGZvcmNlIHRoZSB2YWx1ZSBzaW5jZSB3ZSBkbyBub3QgZ2V0IGhlcmUgaWYgaXQgd2FzIGFscmVhZHkgc2V0LgotICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlLCBpbml0LmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscC5jX3N0cigpLCBjbVN0YXRlRW51bXM6OlBBVEgsIHRydWUpOworICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlLCBpbml0LCBoZWxwLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpQQVRILCB0cnVlKTsKKwogICByZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTEwNzcsMTIgKzExMTQsMTAgQEAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkFwcGVuZFRvRm91bmRQcm9wZXJ0eShib29sIGZvdW5kKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZm91bmRDb250ZW50czsKLSAgY29uc3QgY2hhciogZm91bmRQcm9wID0KKyAgY21Qcm9wIGZvdW5kUHJvcCA9CiAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJQQUNLQUdFU19GT1VORCIpOwotICBpZiAoZm91bmRQcm9wICYmICpmb3VuZFByb3ApIHsKLSAgICBzdGQ6OnN0cmluZyB0bXAgPSBmb3VuZFByb3A7Ci0KLSAgICBjbUV4cGFuZExpc3QodG1wLCBmb3VuZENvbnRlbnRzLCBmYWxzZSk7CisgIGlmIChmb3VuZFByb3AgJiYgIWZvdW5kUHJvcC0+ZW1wdHkoKSkgeworICAgIGNtRXhwYW5kTGlzdCgqZm91bmRQcm9wLCBmb3VuZENvbnRlbnRzLCBmYWxzZSk7CiAgICAgYXV0byBuYW1lSXQgPQogICAgICAgc3RkOjpmaW5kKGZvdW5kQ29udGVudHMuYmVnaW4oKSwgZm91bmRDb250ZW50cy5lbmQoKSwgdGhpcy0+TmFtZSk7CiAgICAgaWYgKG5hbWVJdCAhPSBmb3VuZENvbnRlbnRzLmVuZCgpKSB7CkBAIC0xMDkxLDEyICsxMTI2LDEwIEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm90Rm91bmRDb250ZW50czsKLSAgY29uc3QgY2hhciogbm90Rm91bmRQcm9wID0KKyAgY21Qcm9wIG5vdEZvdW5kUHJvcCA9CiAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJQQUNLQUdFU19OT1RfRk9VTkQiKTsKLSAgaWYgKG5vdEZvdW5kUHJvcCAmJiAqbm90Rm91bmRQcm9wKSB7Ci0gICAgc3RkOjpzdHJpbmcgdG1wID0gbm90Rm91bmRQcm9wOwotCi0gICAgY21FeHBhbmRMaXN0KHRtcCwgbm90Rm91bmRDb250ZW50cywgZmFsc2UpOworICBpZiAobm90Rm91bmRQcm9wICYmICFub3RGb3VuZFByb3AtPmVtcHR5KCkpIHsKKyAgICBjbUV4cGFuZExpc3QoKm5vdEZvdW5kUHJvcCwgbm90Rm91bmRDb250ZW50cywgZmFsc2UpOwogICAgIGF1dG8gbmFtZUl0ID0KICAgICAgIHN0ZDo6ZmluZChub3RGb3VuZENvbnRlbnRzLmJlZ2luKCksIG5vdEZvdW5kQ29udGVudHMuZW5kKCksIHRoaXMtPk5hbWUpOwogICAgIGlmIChuYW1lSXQgIT0gbm90Rm91bmRDb250ZW50cy5lbmQoKSkgewpAQCAtMTE2NCw2ICsxMTk3LDIxIEBACiAgIHRoaXMtPk1ha2VmaWxlLT5GaW5kUGFja2FnZVJvb3RQYXRoU3RhY2sucG9wX2JhY2soKTsKIH0KIAoraW5saW5lIHN0ZDo6c2l6ZV90IGNvbGxlY3RQYXRoc0ZvckRlYnVnKHN0ZDo6c3RyaW5nJiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TZWFyY2hQYXRoIGNvbnN0JiBzZWFyY2hQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IHN0YXJ0SW5kZXggPSAwKQoreworICBjb25zdCBhdXRvJiBwYXRocyA9IHNlYXJjaFBhdGguR2V0UGF0aHMoKTsKKyAgaWYgKHBhdGhzLmVtcHR5KCkpIHsKKyAgICBidWZmZXIgKz0gIiAgbm9uZSI7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZm9yIChzdGQ6OnNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IHBhdGhzLnNpemUoKTsgaSsrKSB7CisgICAgYnVmZmVyICs9ICIgICIgKyBwYXRoc1tpXSArICJcbiI7CisgIH0KKyAgcmV0dXJuIHBhdGhzLnNpemUoKTsKK30KKwogdm9pZCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6Q29tcHV0ZVByZWZpeGVzKCkKIHsKICAgaWYgKCF0aGlzLT5Ob0RlZmF1bHRQYXRoKSB7CkBAIC0xMTc3LDcgKzEyMjUsOSBAQAogICAgICAgdGhpcy0+RmlsbFByZWZpeGVzQ01ha2VFbnZpcm9ubWVudCgpOwogICAgIH0KICAgfQorCiAgIHRoaXMtPkZpbGxQcmVmaXhlc1VzZXJIaW50cygpOworCiAgIGlmICghdGhpcy0+Tm9EZWZhdWx0UGF0aCkgewogICAgIGlmICghdGhpcy0+Tm9TeXN0ZW1FbnZpcm9ubWVudFBhdGgpIHsKICAgICAgIHRoaXMtPkZpbGxQcmVmaXhlc1N5c3RlbUVudmlyb25tZW50KCk7CkBAIC0xMjA5LDI5ICsxMjU5LDcyIEBACiAgICAgICBwYXRocy5BZGRQYXRoKHBhdGgpOwogICAgIH0KICAgfQorICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgZGVidWdCdWZmZXIgPSAiPFBhY2thZ2VOYW1lPl9ST09UIENNYWtlIHZhcmlhYmxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbQ01BS0VfRklORF9VU0VfUEFDS0FHRV9ST09UX1BBVEhdLlxuIjsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMpOworICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQogfQogCiB2b2lkIGNtRmluZFBhY2thZ2VDb21tYW5kOjpGaWxsUHJlZml4ZXNDTWFrZUVudmlyb25tZW50KCkKIHsKICAgY21TZWFyY2hQYXRoJiBwYXRocyA9IHRoaXMtPkxhYmVsZWRQYXRoc1tQYXRoTGFiZWw6OkNNYWtlRW52aXJvbm1lbnRdOworICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlcjsKKyAgc3RkOjpzaXplX3QgZGVidWdPZmZzZXQgPSAwOwogCiAgIC8vIENoZWNrIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGNhY2hlCiAgIC8vIGVudHJ5LgogICBwYXRocy5BZGRFbnZQYXRoKHRoaXMtPlZhcmlhYmxlKTsKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIGRlYnVnQnVmZmVyID0gY21TdHJDYXQoIkVudiB2YXJpYWJsZSAiLCB0aGlzLT5WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgW0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEhdLlxuIik7CisgICAgZGVidWdPZmZzZXQgPSBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMpOworICB9CiAKICAgLy8gQW5kIG5vdyB0aGUgZ2VuZXJhbCBDTWFrZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgcGF0aHMuQWRkRW52UGF0aCgiQ01BS0VfUFJFRklYX1BBVEgiKTsKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIGRlYnVnQnVmZmVyID0gY21TdHJDYXQoZGVidWdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5DTUFLRV9QUkVGSVhfUEFUSCBlbnYgdmFyaWFibGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIltDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIXS5cbiIpOworICAgIGRlYnVnT2Zmc2V0ID0gY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsIHBhdGhzLCBkZWJ1Z09mZnNldCk7CisgIH0KKwogICBwYXRocy5BZGRFbnZQYXRoKCJDTUFLRV9GUkFNRVdPUktfUEFUSCIpOwogICBwYXRocy5BZGRFbnZQYXRoKCJDTUFLRV9BUFBCVU5ETEVfUEFUSCIpOworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgZGVidWdCdWZmZXIgPQorICAgICAgY21TdHJDYXQoZGVidWdCdWZmZXIsCisgICAgICAgICAgICAgICAiXG5DTUFLRV9GUkFNRVdPUktfUEFUSCBhbmQgQ01BS0VfQVBQQlVORExFX1BBVEggZW52ICIKKyAgICAgICAgICAgICAgICJ2YXJpYWJsZXMgW0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEhdLlxuIik7CisgICAgY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsIHBhdGhzLCBkZWJ1Z09mZnNldCk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc0NNYWtlVmFyaWFibGUoKQogewogICBjbVNlYXJjaFBhdGgmIHBhdGhzID0gdGhpcy0+TGFiZWxlZFBhdGhzW1BhdGhMYWJlbDo6Q01ha2VdOworICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlcjsKKyAgc3RkOjpzaXplX3QgZGVidWdPZmZzZXQgPSAwOwogCiAgIHBhdGhzLkFkZENNYWtlUGF0aCgiQ01BS0VfUFJFRklYX1BBVEgiKTsKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIGRlYnVnQnVmZmVyID0gIkNNQUtFX1BSRUZJWF9QQVRIIHZhcmlhYmxlIFtDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIXS5cbiI7CisgICAgZGVidWdPZmZzZXQgPSBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMpOworICB9CisKICAgcGF0aHMuQWRkQ01ha2VQYXRoKCJDTUFLRV9GUkFNRVdPUktfUEFUSCIpOwogICBwYXRocy5BZGRDTWFrZVBhdGgoIkNNQUtFX0FQUEJVTkRMRV9QQVRIIik7CisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBkZWJ1Z0J1ZmZlciA9CisgICAgICBjbVN0ckNhdChkZWJ1Z0J1ZmZlciwKKyAgICAgICAgICAgICAgICJcbkNNQUtFX0ZSQU1FV09SS19QQVRIIGFuZCBDTUFLRV9BUFBCVU5ETEVfUEFUSCB2YXJpYWJsZXMgIgorICAgICAgICAgICAgICAgIltDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIXS5cbiIpOworICAgIGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocywgZGVidWdPZmZzZXQpOworICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQogfQogCiB2b2lkIGNtRmluZFBhY2thZ2VDb21tYW5kOjpGaWxsUHJlZml4ZXNTeXN0ZW1FbnZpcm9ubWVudCgpCkBAIC0xMjUxLDYgKzEzNDQsMTIgQEAKICAgICAgIHBhdGhzLkFkZFBhdGgoaSk7CiAgICAgfQogICB9CisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlciA9ICJTdGFuZGFyZCBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEhdLlxuIjsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMpOworICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQogfQogCiB2b2lkIGNtRmluZFBhY2thZ2VDb21tYW5kOjpGaWxsUHJlZml4ZXNVc2VyUmVnaXN0cnkoKQpAQCAtMTI3NCw2ICsxMzczLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5MYWJlbGVkUGF0aHNbUGF0aExhYmVsOjpVc2VyUmVnaXN0cnldKTsKICAgfQogI2VuZGlmCisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlciA9CisgICAgICAiQ01ha2UgVXNlciBQYWNrYWdlIFJlZ2lzdHJ5IFtDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JFR0lTVFJZXS5cbiI7CisgICAgY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGFiZWxlZFBhdGhzW1BhdGhMYWJlbDo6VXNlclJlZ2lzdHJ5XSk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc1N5c3RlbVJlZ2lzdHJ5KCkKQEAgLTEyODUsNiArMTM5MSwxNSBAQAogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQogICB0aGlzLT5Mb2FkUGFja2FnZVJlZ2lzdHJ5V2luU3lzdGVtKCk7CiAjZW5kaWYKKworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgZGVidWdCdWZmZXIgPQorICAgICAgIkNNYWtlIFN5c3RlbSBQYWNrYWdlIFJlZ2lzdHJ5ICIKKyAgICAgICJbQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZXS5cbiI7CisgICAgY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGFiZWxlZFBhdGhzW1BhdGhMYWJlbDo6U3lzdGVtUmVnaXN0cnldKTsKKyAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLCBkZWJ1Z0J1ZmZlciwgIlxuIik7CisgIH0KIH0KIAogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQpAQCAtMTQ1Nyw2ICsxNTcyLDEzIEBACiAgIHBhdGhzLkFkZENNYWtlUGF0aCgiQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIIik7CiAgIHBhdGhzLkFkZENNYWtlUGF0aCgiQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRIIik7CiAgIHBhdGhzLkFkZENNYWtlUGF0aCgiQ01BS0VfU1lTVEVNX0FQUEJVTkRMRV9QQVRIIik7CisKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyID0gIkNNYWtlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBQbGF0Zm9ybSBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEhdLlxuIjsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMpOworICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQogfQogCiB2b2lkIGNtRmluZFBhY2thZ2VDb21tYW5kOjpGaWxsUHJlZml4ZXNVc2VyR3Vlc3MoKQpAQCAtMTQ2Niw2ICsxNTg4LDEyIEBACiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiB0aGlzLT5Vc2VyR3Vlc3NBcmdzKSB7CiAgICAgcGF0aHMuQWRkVXNlclBhdGgocCk7CiAgIH0KKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyID0KKyAgICAgICJQYXRocyBzcGVjaWZpZWQgYnkgdGhlIGZpbmRfcGFja2FnZSBQQVRIUyBvcHRpb24uXG4iOworICAgIGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocyk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc1VzZXJIaW50cygpCkBAIC0xNDc1LDYgKzE2MDMsMTIgQEAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHRoaXMtPlVzZXJIaW50c0FyZ3MpIHsKICAgICBwYXRocy5BZGRVc2VyUGF0aChwKTsKICAgfQorICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgZGVidWdCdWZmZXIgPQorICAgICAgIlBhdGhzIHNwZWNpZmllZCBieSB0aGUgZmluZF9wYWNrYWdlIEhJTlRTIG9wdGlvbi5cbiI7CisgICAgY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsIHBhdGhzKTsKKyAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLCBkZWJ1Z0J1ZmZlciwgIlxuIik7CisgIH0KIH0KIAogYm9vbCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6U2VhcmNoRGlyZWN0b3J5KHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpCkBAIC0xNTE5LDcgKzE2NTMsNyBAQAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogdGhpcy0+Q29uZmlncykgewogICAgIGZpbGUgPSBjbVN0ckNhdChkaXIsICcvJywgYyk7CiAgICAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBmaWxlIFslc11cbiIsIGZpbGUuY19zdHIoKSk7CisgICAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLCAiICAiLCBmaWxlLCAiXG4iKTsKICAgICB9CiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZmlsZSwgdHJ1ZSkgJiYgdGhpcy0+Q2hlY2tWZXJzaW9uKGZpbGUpKSB7CiAgICAgICAvLyBBbGxvdyByZXNvbHZpbmcgc3ltbGlua3Mgd2hlbiB0aGUgY29uZmlnIGZpbGUgaXMgZm91bmQgdGhyb3VnaCBhIGxpbmsKQEAgLTIwMzIsOSArMjE2Niw2IEBACiBib29sIGNtRmluZFBhY2thZ2VDb21tYW5kOjpTZWFyY2hQcmVmaXgoc3RkOjpzdHJpbmcgY29uc3QmIHByZWZpeF9pbikKIHsKICAgYXNzZXJ0KCFwcmVmaXhfaW4uZW1wdHkoKSAmJiBwcmVmaXhfaW4uYmFjaygpID09ICcvJyk7Ci0gIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nIHByZWZpeCBbJXNdXG4iLCBwcmVmaXhfaW4uY19zdHIoKSk7Ci0gIH0KIAogICAvLyBTa2lwIHRoaXMgaWYgdGhlIHByZWZpeCBkb2VzIG5vdCBleGlzdC4KICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkocHJlZml4X2luKSkgewpAQCAtMjE4OCw5ICsyMzE5LDYgQEAKIGJvb2wgY21GaW5kUGFja2FnZUNvbW1hbmQ6OlNlYXJjaEZyYW1ld29ya1ByZWZpeChzdGQ6OnN0cmluZyBjb25zdCYgcHJlZml4X2luKQogewogICBhc3NlcnQoIXByZWZpeF9pbi5lbXB0eSgpICYmIHByZWZpeF9pbi5iYWNrKCkgPT0gJy8nKTsKLSAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgewotICAgIGZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgZnJhbWV3b3JrIHByZWZpeCBbJXNdXG4iLCBwcmVmaXhfaW4uY19zdHIoKSk7Ci0gIH0KIAogICAvLyBTdHJpcCB0aGUgdHJhaWxpbmcgc2xhc2ggYmVjYXVzZSB0aGUgcGF0aCBnZW5lcmF0b3IgaXMgYWJvdXQgdG8KICAgLy8gYWRkIG9uZS4KQEAgLTIyNDksOSArMjM3Nyw2IEBACiBib29sIGNtRmluZFBhY2thZ2VDb21tYW5kOjpTZWFyY2hBcHBCdW5kbGVQcmVmaXgoc3RkOjpzdHJpbmcgY29uc3QmIHByZWZpeF9pbikKIHsKICAgYXNzZXJ0KCFwcmVmaXhfaW4uZW1wdHkoKSAmJiBwcmVmaXhfaW4uYmFjaygpID09ICcvJyk7Ci0gIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nIGJ1bmRsZSBwcmVmaXggWyVzXVxuIiwgcHJlZml4X2luLmNfc3RyKCkpOwotICB9CiAKICAgLy8gU3RyaXAgdGhlIHRyYWlsaW5nIHNsYXNoIGJlY2F1c2UgdGhlIHBhdGggZ2VuZXJhdG9yIGlzIGFib3V0IHRvCiAgIC8vIGFkZCBvbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuaCBiL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5oCmluZGV4IDg1ZmU3YjYuLmFlOWFkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5oCkBAIC0xNzQsNyArMTc0LDYgQEAKICAgYm9vbCBVc2VGaW5kTW9kdWxlczsKICAgYm9vbCBOb1VzZXJSZWdpc3RyeTsKICAgYm9vbCBOb1N5c3RlbVJlZ2lzdHJ5OwotICBib29sIERlYnVnTW9kZTsKICAgYm9vbCBVc2VMaWIzMlBhdGhzOwogICBib29sIFVzZUxpYjY0UGF0aHM7CiAgIGJvb2wgVXNlTGlieDMyUGF0aHM7CkBAIC0xODQsNiArMTgzLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE5hbWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29uZmlnczsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IElnbm9yZWRQYXRoczsKKyAgc3RkOjpzdHJpbmcgRGVidWdCdWZmZXI7CiAKICAgLyohIHRoZSBzZWxlY3RlZCBzb3J0T3JkZXIgKE5vbmUgYnkgZGVmYXVsdCkqLwogICBTb3J0T3JkZXJUeXBlIFNvcnRPcmRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRQYXRoQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuY3h4CmluZGV4IGY1ZTI2MzEuLjRiYWI0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRQYXRoQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmN4eApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKIAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtMjEsNiArMjIsNyBAQAogLy8gY21GaW5kUGF0aENvbW1hbmQKIGJvb2wgY21GaW5kUGF0aENvbW1hbmQ6OkluaXRpYWxQYXNzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJnc0luKQogeworICB0aGlzLT5EZWJ1Z01vZGUgPSBDb21wdXRlSWZEZWJ1Z01vZGVXYW50ZWQoKTsKICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uID0gIlBhdGggdG8gYSBmaWxlLiI7CiAgIHRoaXMtPkNNYWtlUGF0aE5hbWUgPSAiSU5DTFVERSI7CiAgIGlmICghdGhpcy0+UGFyc2VBcmd1bWVudHMoYXJnc0luKSkgewpAQCAtNDIsMjkgKzQ0LDM5IEBACiAgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IHRoaXMtPkZpbmRIZWFkZXIoKTsKICAgaWYgKCFyZXN1bHQuZW1wdHkoKSkgewogICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgICB0aGlzLT5WYXJpYWJsZU5hbWUsIHJlc3VsdC5jX3N0cigpLCB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24uY19zdHIoKSwKKyAgICAgIHRoaXMtPlZhcmlhYmxlTmFtZSwgcmVzdWx0LCB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24uY19zdHIoKSwKICAgICAgICh0aGlzLT5JbmNsdWRlRmlsZUluUGF0aCkgPyBjbVN0YXRlRW51bXM6OkZJTEVQQVRIIDogY21TdGF0ZUVudW1zOjpQQVRIKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKAotICAgIHRoaXMtPlZhcmlhYmxlTmFtZSwgKHRoaXMtPlZhcmlhYmxlTmFtZSArICItTk9URk9VTkQiKS5jX3N0cigpLAorICAgIHRoaXMtPlZhcmlhYmxlTmFtZSwgdGhpcy0+VmFyaWFibGVOYW1lICsgIi1OT1RGT1VORCIsCiAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgKHRoaXMtPkluY2x1ZGVGaWxlSW5QYXRoKSA/IGNtU3RhdGVFbnVtczo6RklMRVBBVEggOiBjbVN0YXRlRW51bXM6OlBBVEgpOworICBpZiAodGhpcy0+UmVxdWlyZWQpIHsKKyAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgIkNvdWxkIG5vdCBmaW5kICIgKyB0aGlzLT5WYXJpYWJsZU5hbWUgKworICAgICAgICAiIHVzaW5nIHRoZSBmb2xsb3dpbmcgZmlsZXM6ICIgKyBjbUpvaW4odGhpcy0+TmFtZXMsICIsICIpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICB9CiAgIHJldHVybiB0cnVlOwogfQogCiBzdGQ6OnN0cmluZyBjbUZpbmRQYXRoQ29tbWFuZDo6RmluZEhlYWRlcigpCiB7CisgIHN0ZDo6c3RyaW5nIGRlYnVnX25hbWUgPSB0aGlzLT5JbmNsdWRlRmlsZUluUGF0aCA/ICJmaW5kX2ZpbGUiIDogImZpbmRfcGF0aCI7CisgIGNtRmluZEJhc2VEZWJ1Z1N0YXRlIGRlYnVnKGRlYnVnX25hbWUsIHRoaXMpOwogICBzdGQ6OnN0cmluZyBoZWFkZXI7CiAgIGlmICh0aGlzLT5TZWFyY2hGcmFtZXdvcmtGaXJzdCB8fCB0aGlzLT5TZWFyY2hGcmFtZXdvcmtPbmx5KSB7Ci0gICAgaGVhZGVyID0gdGhpcy0+RmluZEZyYW1ld29ya0hlYWRlcigpOworICAgIGhlYWRlciA9IHRoaXMtPkZpbmRGcmFtZXdvcmtIZWFkZXIoZGVidWcpOwogICB9CiAgIGlmIChoZWFkZXIuZW1wdHkoKSAmJiAhdGhpcy0+U2VhcmNoRnJhbWV3b3JrT25seSkgewotICAgIGhlYWRlciA9IHRoaXMtPkZpbmROb3JtYWxIZWFkZXIoKTsKKyAgICBoZWFkZXIgPSB0aGlzLT5GaW5kTm9ybWFsSGVhZGVyKGRlYnVnKTsKICAgfQogICBpZiAoaGVhZGVyLmVtcHR5KCkgJiYgdGhpcy0+U2VhcmNoRnJhbWV3b3JrTGFzdCkgewotICAgIGhlYWRlciA9IHRoaXMtPkZpbmRGcmFtZXdvcmtIZWFkZXIoKTsKKyAgICBoZWFkZXIgPSB0aGlzLT5GaW5kRnJhbWV3b3JrSGVhZGVyKGRlYnVnKTsKICAgfQorCiAgIHJldHVybiBoZWFkZXI7CiB9CiAKQEAgLTExNiwyOCArMTI4LDMxIEBACiAgIHJldHVybiAiIjsKIH0KIAotc3RkOjpzdHJpbmcgY21GaW5kUGF0aENvbW1hbmQ6OkZpbmROb3JtYWxIZWFkZXIoKQorc3RkOjpzdHJpbmcgY21GaW5kUGF0aENvbW1hbmQ6OkZpbmROb3JtYWxIZWFkZXIoY21GaW5kQmFzZURlYnVnU3RhdGUmIGRlYnVnKQogewogICBzdGQ6OnN0cmluZyB0cnlQYXRoOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuIDogdGhpcy0+TmFtZXMpIHsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBzcCA6IHRoaXMtPlNlYXJjaFBhdGhzKSB7CiAgICAgICB0cnlQYXRoID0gY21TdHJDYXQoc3AsIG4pOwogICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHModHJ5UGF0aCkpIHsKKyAgICAgICAgZGVidWcuRm91bmRBdCh0cnlQYXRoKTsKICAgICAgICAgaWYgKHRoaXMtPkluY2x1ZGVGaWxlSW5QYXRoKSB7CiAgICAgICAgICAgcmV0dXJuIHRyeVBhdGg7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwOwogICAgICAgfQorICAgICAgZGVidWcuRmFpbGVkQXQodHJ5UGF0aCk7CiAgICAgfQogICB9CiAgIHJldHVybiAiIjsKIH0KIAotc3RkOjpzdHJpbmcgY21GaW5kUGF0aENvbW1hbmQ6OkZpbmRGcmFtZXdvcmtIZWFkZXIoKQorc3RkOjpzdHJpbmcgY21GaW5kUGF0aENvbW1hbmQ6OkZpbmRGcmFtZXdvcmtIZWFkZXIoY21GaW5kQmFzZURlYnVnU3RhdGUmIGRlYnVnKQogewogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuIDogdGhpcy0+TmFtZXMpIHsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBzcCA6IHRoaXMtPlNlYXJjaFBhdGhzKSB7CiAgICAgICBzdGQ6OnN0cmluZyBmd1BhdGggPSB0aGlzLT5GaW5kSGVhZGVySW5GcmFtZXdvcmsobiwgc3ApOworICAgICAgZndQYXRoLmVtcHR5KCkgPyBkZWJ1Zy5GYWlsZWRBdChmd1BhdGgpIDogZGVidWcuRm91bmRBdChmd1BhdGgpOwogICAgICAgaWYgKCFmd1BhdGguZW1wdHkoKSkgewogICAgICAgICByZXR1cm4gZndQYXRoOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmggYi9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuaAppbmRleCA4ZDFlYThiLi4xOGJmYjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuaAorKysgYi9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuaApAQCAtMzIsOCArMzIsOCBAQAogICBzdGQ6OnN0cmluZyBGaW5kSGVhZGVySW5GcmFtZXdvcmsoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGlyKTsKICAgc3RkOjpzdHJpbmcgRmluZEhlYWRlcigpOwotICBzdGQ6OnN0cmluZyBGaW5kTm9ybWFsSGVhZGVyKCk7Ci0gIHN0ZDo6c3RyaW5nIEZpbmRGcmFtZXdvcmtIZWFkZXIoKTsKKyAgc3RkOjpzdHJpbmcgRmluZE5vcm1hbEhlYWRlcihjbUZpbmRCYXNlRGVidWdTdGF0ZSYgZGVidWcpOworICBzdGQ6OnN0cmluZyBGaW5kRnJhbWV3b3JrSGVhZGVyKGNtRmluZEJhc2VEZWJ1Z1N0YXRlJiBkZWJ1Zyk7CiB9OwogCiBib29sIGNtRmluZFBhdGgoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmluZFByb2dyYW1Db21tYW5kLmN4eCBiL1NvdXJjZS9jbUZpbmRQcm9ncmFtQ29tbWFuZC5jeHgKaW5kZXggZTBhM2ZiZi4uNGI4OGJlYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZFByb2dyYW1Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21GaW5kUHJvZ3JhbUNvbW1hbmQuY3h4CkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgImNtRmluZFByb2dyYW1Db21tYW5kLmgiCiAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTE1LDcgKzE2LDkgQEAKIAogc3RydWN0IGNtRmluZFByb2dyYW1IZWxwZXIKIHsKLSAgY21GaW5kUHJvZ3JhbUhlbHBlcigpCisgIGNtRmluZFByb2dyYW1IZWxwZXIoY21NYWtlZmlsZSogbWFrZWZpbGUsIGNtRmluZEJhc2UgY29uc3QqIGJhc2UpCisgICAgOiBEZWJ1Z1NlYXJjaGVzKCJmaW5kX3Byb2dyYW0iLCBiYXNlKQorICAgICwgTWFrZWZpbGUobWFrZWZpbGUpCiAgIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQogICAgIC8vIENvbnNpZGVyIHBsYXRmb3JtLXNwZWNpZmljIGV4dGVuc2lvbnMuCkBAIC00MSw2ICs0NCwxMCBAQAogICAvLyBDdXJyZW50IGZ1bGwgcGF0aCB1bmRlciBjb25zaWRlcmF0aW9uLgogICBzdGQ6OnN0cmluZyBUZXN0UGF0aDsKIAorICAvLyBEZWJ1ZyBzdGF0ZQorICBjbUZpbmRCYXNlRGVidWdTdGF0ZSBEZWJ1Z1NlYXJjaGVzOworICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKKwogICB2b2lkIEFkZE5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpIHsgdGhpcy0+TmFtZXMucHVzaF9iYWNrKG5hbWUpOyB9CiAgIHZvaWQgU2V0TmFtZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkKICAgewpAQCAtNzgsOCArODUsMTAgQEAKICAgICAgIHRoaXMtPlRlc3ROYW1lRXh0ID0gY21TdHJDYXQobmFtZSwgZXh0KTsKICAgICAgIHRoaXMtPlRlc3RQYXRoID0KICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5UZXN0TmFtZUV4dCwgcGF0aCk7Ci0KLSAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPlRlc3RQYXRoLCB0cnVlKSkgeworICAgICAgYm9vbCBleGlzdHMgPSBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPlRlc3RQYXRoLCB0cnVlKTsKKyAgICAgIGV4aXN0cyA/IHRoaXMtPkRlYnVnU2VhcmNoZXMuRm91bmRBdCh0aGlzLT5UZXN0UGF0aCkKKyAgICAgICAgICAgICA6IHRoaXMtPkRlYnVnU2VhcmNoZXMuRmFpbGVkQXQodGhpcy0+VGVzdFBhdGgpOworICAgICAgaWYgKGV4aXN0cykgewogICAgICAgICB0aGlzLT5CZXN0UGF0aCA9IHRoaXMtPlRlc3RQYXRoOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0KQEAgLTk3LDYgKzEwNiw3IEBACiAvLyBjbUZpbmRQcm9ncmFtQ29tbWFuZAogYm9vbCBjbUZpbmRQcm9ncmFtQ29tbWFuZDo6SW5pdGlhbFBhc3Moc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzSW4pCiB7CisgIHRoaXMtPkRlYnVnTW9kZSA9IENvbXB1dGVJZkRlYnVnTW9kZVdhbnRlZCgpOwogICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24gPSAiUGF0aCB0byBhIHByb2dyYW0uIjsKICAgdGhpcy0+Q01ha2VQYXRoTmFtZSA9ICJQUk9HUkFNIjsKICAgLy8gY2FsbCBjbUZpbmRCYXNlOjpQYXJzZUFyZ3VtZW50cwpAQCAtMTE4LDE1ICsxMjgsMjIgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QgcmVzdWx0ID0gRmluZFByb2dyYW0oKTsKICAgaWYgKCFyZXN1bHQuZW1wdHkoKSkgewogICAgIC8vIFNhdmUgdGhlIHZhbHVlIGluIHRoZSBjYWNoZQotICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24odGhpcy0+VmFyaWFibGVOYW1lLCByZXN1bHQuY19zdHIoKSwKKyAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKIAogICAgIHJldHVybiB0cnVlOwogICB9CiAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgdGhpcy0+VmFyaWFibGVOYW1lLCAodGhpcy0+VmFyaWFibGVOYW1lICsgIi1OT1RGT1VORCIpLmNfc3RyKCksCisgICAgdGhpcy0+VmFyaWFibGVOYW1lLCB0aGlzLT5WYXJpYWJsZU5hbWUgKyAiLU5PVEZPVU5EIiwKICAgICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24uY19zdHIoKSwgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CisgIGlmICh0aGlzLT5SZXF1aXJlZCkgeworICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAiQ291bGQgbm90IGZpbmQgIiArIHRoaXMtPlZhcmlhYmxlTmFtZSArCisgICAgICAgICIgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogIiArIGNtSm9pbih0aGlzLT5OYW1lcywgIiwgIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1OCw3ICsxNzUsNyBAQAogc3RkOjpzdHJpbmcgY21GaW5kUHJvZ3JhbUNvbW1hbmQ6OkZpbmROb3JtYWxQcm9ncmFtTmFtZXNQZXJEaXIoKQogewogICAvLyBTZWFyY2ggZm9yIGFsbCBuYW1lcyBpbiBlYWNoIGRpcmVjdG9yeS4KLSAgY21GaW5kUHJvZ3JhbUhlbHBlciBoZWxwZXI7CisgIGNtRmluZFByb2dyYW1IZWxwZXIgaGVscGVyKHRoaXMtPk1ha2VmaWxlLCB0aGlzKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IHRoaXMtPk5hbWVzKSB7CiAgICAgaGVscGVyLkFkZE5hbWUobik7CiAgIH0KQEAgLTE4MSw3ICsxOTgsNyBAQAogc3RkOjpzdHJpbmcgY21GaW5kUHJvZ3JhbUNvbW1hbmQ6OkZpbmROb3JtYWxQcm9ncmFtRGlyc1Blck5hbWUoKQogewogICAvLyBTZWFyY2ggdGhlIGVudGlyZSBwYXRoIGZvciBlYWNoIG5hbWUuCi0gIGNtRmluZFByb2dyYW1IZWxwZXIgaGVscGVyOworICBjbUZpbmRQcm9ncmFtSGVscGVyIGhlbHBlcih0aGlzLT5NYWtlZmlsZSwgdGhpcyk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG4gOiB0aGlzLT5OYW1lcykgewogICAgIC8vIFN3aXRjaCB0byBzZWFyY2hpbmcgZm9yIHRoaXMgbmFtZS4KICAgICBoZWxwZXIuU2V0TmFtZShuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZvckVhY2hDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUZvckVhY2hDb21tYW5kLmN4eAppbmRleCA0NDM5MmJhLi4wNTQ2MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Gb3JFYWNoQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRm9yRWFjaENvbW1hbmQuY3h4CkBAIC0yLDggKzIsMTggQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtRm9yRWFjaENvbW1hbmQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorLy8gTk9URSBUaGUgZGVjbGFyYXRpb24gb2YgYHN0ZDo6YWJzYCBoYXMgbW92ZWQgdG8gYGNtYXRoYCBzaW5jZSBDKysxNworLy8gU2VlIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9udW1lcmljL21hdGgvYWJzCisvLyBBTEVSVCBCdXQgSVdZVSB1c2VkIHRvIGxpbnQgYCNpbmNsdWRlYHMgZG8gbm90ICJ1bmRlcnN0YW5kIgorLy8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gKGkuZS4gYCNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMYCkKICNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgpAQCAtMjEsMTIgKzMxLDEwIEBACiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBuYW1lc3BhY2UgewotYm9vbCBIYW5kbGVJbk1vZGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLCBjbU1ha2VmaWxlJiBtYWtlZmlsZSk7Ci0KIGNsYXNzIGNtRm9yRWFjaEZ1bmN0aW9uQmxvY2tlciA6IHB1YmxpYyBjbUZ1bmN0aW9uQmxvY2tlcgogewogcHVibGljOgotICBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXIoY21NYWtlZmlsZSogbWYpOworICBleHBsaWNpdCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXIoY21NYWtlZmlsZSogbWYpOwogICB+Y21Gb3JFYWNoRnVuY3Rpb25CbG9ja2VyKCkgb3ZlcnJpZGU7CiAKICAgY206OnN0cmluZ192aWV3IFN0YXJ0Q29tbWFuZE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiZm9yZWFjaCJfczsgfQpAQCAtMzgsMTAgKzQ2LDMzIEBACiAgIGJvb2wgUmVwbGF5KHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gZnVuY3Rpb25zLAogICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgaW5TdGF0dXMpIG92ZXJyaWRlOwogCisgIHZvaWQgU2V0SXRlcmF0aW9uVmFyc0NvdW50KGNvbnN0IHN0ZDo6c2l6ZV90IHZhcnNDb3VudCkKKyAgeworICAgIHRoaXMtPkl0ZXJhdGlvblZhcnNDb3VudCA9IHZhcnNDb3VudDsKKyAgfQorICB2b2lkIFNldFppcExpc3RzKCkgeyB0aGlzLT5aaXBMaXN0cyA9IHRydWU7IH0KKwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQXJnczsKIAogcHJpdmF0ZToKKyAgc3RydWN0IEludm9rZVJlc3VsdAorICB7CisgICAgYm9vbCBSZXN0b3JlOworICAgIGJvb2wgQnJlYWs7CisgIH07CisKKyAgYm9vbCBSZXBsYXlJdGVtcyhzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IGNvbnN0JiBmdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIGluU3RhdHVzKTsKKworICBib29sIFJlcGxheVppcExpc3RzKHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gY29uc3QmIGZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgaW5TdGF0dXMpOworCisgIEludm9rZVJlc3VsdCBpbnZva2Uoc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUZ1bmN0aW9uPiBjb25zdCYgZnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cywgY21NYWtlZmlsZSYgbWYpOworCiAgIGNtTWFrZWZpbGUqIE1ha2VmaWxlOworICBzdGQ6OnNpemVfdCBJdGVyYXRpb25WYXJzQ291bnQgPSAwdTsKKyAgYm9vbCBaaXBMaXN0cyA9IGZhbHNlOwogfTsKIAogY21Gb3JFYWNoRnVuY3Rpb25CbG9ja2VyOjpjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXIoY21NYWtlZmlsZSogbWYpCkBAIC02MCw1MyArOTEsMjg4IEBACiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBhbmRlZEFyZ3VtZW50czsKICAgbWYuRXhwYW5kQXJndW1lbnRzKGxmZi5Bcmd1bWVudHMsIGV4cGFuZGVkQXJndW1lbnRzKTsKLSAgcmV0dXJuIGV4cGFuZGVkQXJndW1lbnRzLmVtcHR5KCkgfHwgZXhwYW5kZWRBcmd1bWVudHNbMF0gPT0gdGhpcy0+QXJnc1swXTsKKyAgcmV0dXJuIGV4cGFuZGVkQXJndW1lbnRzLmVtcHR5KCkgfHwKKyAgICBleHBhbmRlZEFyZ3VtZW50cy5mcm9udCgpID09IHRoaXMtPkFyZ3MuZnJvbnQoKTsKIH0KIAogYm9vbCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI6OlJlcGxheSgKICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUZ1bmN0aW9uPiBmdW5jdGlvbnMsIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cykKIHsKLSAgY21NYWtlZmlsZSYgbWYgPSBpblN0YXR1cy5HZXRNYWtlZmlsZSgpOwotICAvLyBhdCBlbmQgb2YgZm9yIGVhY2ggZXhlY3V0ZSByZWNvcmRlZCBjb21tYW5kcworICByZXR1cm4gdGhpcy0+WmlwTGlzdHMgPyB0aGlzLT5SZXBsYXlaaXBMaXN0cyhmdW5jdGlvbnMsIGluU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLT5SZXBsYXlJdGVtcyhmdW5jdGlvbnMsIGluU3RhdHVzKTsKK30KKworYm9vbCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI6OlJlcGxheUl0ZW1zKAorICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IGNvbnN0JiBmdW5jdGlvbnMsCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cykKK3sKKyAgYXNzZXJ0KCJVbmV4cGVjdGVkIG51bWJlciBvZiBpdGVyYXRpb24gdmFyaWFibGVzIiAmJgorICAgICAgICAgdGhpcy0+SXRlcmF0aW9uVmFyc0NvdW50ID09IDEpOworCisgIGF1dG8mIG1mID0gaW5TdGF0dXMuR2V0TWFrZWZpbGUoKTsKKworICAvLyBBdCBlbmQgb2YgZm9yIGVhY2ggZXhlY3V0ZSByZWNvcmRlZCBjb21tYW5kcwogICAvLyBzdG9yZSB0aGUgb2xkIHZhbHVlCiAgIHN0ZDo6c3RyaW5nIG9sZERlZjsKLSAgaWYgKG1mLkdldERlZmluaXRpb24odGhpcy0+QXJnc1swXSkpIHsKLSAgICBvbGREZWYgPSBtZi5HZXREZWZpbml0aW9uKHRoaXMtPkFyZ3NbMF0pOworICBpZiAobWYuR2V0RGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCkpKSB7CisgICAgb2xkRGVmID0gbWYuR2V0RGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCkpOwogICB9CiAKKyAgYXV0byByZXN0b3JlID0gZmFsc2U7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKHRoaXMtPkFyZ3MpLmFkdmFuY2UoMSkpIHsKLSAgICAvLyBzZXQgdGhlIHZhcmlhYmxlIHRvIHRoZSBsb29wIHZhbHVlCi0gICAgbWYuQWRkRGVmaW5pdGlvbih0aGlzLT5BcmdzWzBdLCBhcmcpOworICAgIC8vIFNldCB0aGUgdmFyaWFibGUgdG8gdGhlIGxvb3AgdmFsdWUKKyAgICBtZi5BZGREZWZpbml0aW9uKHRoaXMtPkFyZ3MuZnJvbnQoKSwgYXJnKTsKICAgICAvLyBJbnZva2UgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGNvbGxlY3RlZCBpbiB0aGUgYmxvY2suCi0gICAgZm9yIChjbUxpc3RGaWxlRnVuY3Rpb24gY29uc3QmIGZ1bmMgOiBmdW5jdGlvbnMpIHsKLSAgICAgIGNtRXhlY3V0aW9uU3RhdHVzIHN0YXR1cyhtZik7Ci0gICAgICBtZi5FeGVjdXRlQ29tbWFuZChmdW5jLCBzdGF0dXMpOwotICAgICAgaWYgKHN0YXR1cy5HZXRSZXR1cm5JbnZva2VkKCkpIHsKLSAgICAgICAgaW5TdGF0dXMuU2V0UmV0dXJuSW52b2tlZCgpOwotICAgICAgICAvLyByZXN0b3JlIHRoZSB2YXJpYWJsZSB0byBpdHMgcHJpb3IgdmFsdWUKLSAgICAgICAgbWYuQWRkRGVmaW5pdGlvbih0aGlzLT5BcmdzWzBdLCBvbGREZWYpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChzdGF0dXMuR2V0QnJlYWtJbnZva2VkKCkpIHsKLSAgICAgICAgLy8gcmVzdG9yZSB0aGUgdmFyaWFibGUgdG8gaXRzIHByaW9yIHZhbHVlCi0gICAgICAgIG1mLkFkZERlZmluaXRpb24odGhpcy0+QXJnc1swXSwgb2xkRGVmKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RhdHVzLkdldENvbnRpbnVlSW52b2tlZCgpKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEZhdGFsRXJyb3JPY2N1cmVkKCkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9CisgICAgYXV0byByID0gdGhpcy0+aW52b2tlKGZ1bmN0aW9ucywgaW5TdGF0dXMsIG1mKTsKKyAgICByZXN0b3JlID0gci5SZXN0b3JlOworICAgIGlmIChyLkJyZWFrKSB7CisgICAgICBicmVhazsKICAgICB9CiAgIH0KIAotICAvLyByZXN0b3JlIHRoZSB2YXJpYWJsZSB0byBpdHMgcHJpb3IgdmFsdWUKLSAgbWYuQWRkRGVmaW5pdGlvbih0aGlzLT5BcmdzWzBdLCBvbGREZWYpOworICBpZiAocmVzdG9yZSkgeworICAgIC8vIHJlc3RvcmUgdGhlIHZhcmlhYmxlIHRvIGl0cyBwcmlvciB2YWx1ZQorICAgIG1mLkFkZERlZmluaXRpb24odGhpcy0+QXJncy5mcm9udCgpLCBvbGREZWYpOworICB9CiAgIHJldHVybiB0cnVlOwogfQorCitib29sIGNtRm9yRWFjaEZ1bmN0aW9uQmxvY2tlcjo6UmVwbGF5WmlwTGlzdHMoCisgIHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gY29uc3QmIGZ1bmN0aW9ucywKKyAgY21FeGVjdXRpb25TdGF0dXMmIGluU3RhdHVzKQoreworICBhc3NlcnQoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIGl0ZXJhdGlvbiB2YXJpYWJsZXMiICYmCisgICAgICAgICB0aGlzLT5JdGVyYXRpb25WYXJzQ291bnQgPj0gMSk7CisKKyAgYXV0byYgbWYgPSBpblN0YXR1cy5HZXRNYWtlZmlsZSgpOworCisgIC8vIEV4cGFuZCB0aGUgbGlzdCBvZiBsaXN0LXZhcmlhYmxlcyBpbnRvIGEgbGlzdCBvZiBsaXN0cyBvZiBzdHJpbmdzCisgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gdmFsdWVzOworICB2YWx1ZXMucmVzZXJ2ZSh0aGlzLT5BcmdzLnNpemUoKSAtIHRoaXMtPkl0ZXJhdGlvblZhcnNDb3VudCk7CisgIC8vIEFsc28gdHJhY2sgdGhlIGxvbmdlc3QgbGlzdCBzaXplCisgIHN0ZDo6c2l6ZV90IG1heEl0ZW1zID0gMHU7CisgIGZvciAoYXV0byBjb25zdCYgdmFyIDoKKyAgICAgICBjbU1ha2VSYW5nZSh0aGlzLT5BcmdzKS5hZHZhbmNlKHRoaXMtPkl0ZXJhdGlvblZhcnNDb3VudCkpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaXRlbXM7CisgICAgYXV0byBjb25zdCYgdmFsdWUgPSBtZi5HZXRTYWZlRGVmaW5pdGlvbih2YXIpOworICAgIGlmICghdmFsdWUuZW1wdHkoKSkgeworICAgICAgY21FeHBhbmRMaXN0KHZhbHVlLCBpdGVtcywgdHJ1ZSk7CisgICAgfQorICAgIG1heEl0ZW1zID0gc3RkOjptYXgobWF4SXRlbXMsIGl0ZW1zLnNpemUoKSk7CisgICAgdmFsdWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoaXRlbXMpKTsKKyAgfQorCisgIC8vIEZvcm0gdGhlIGxpc3Qgb2YgaXRlcmF0aW9uIHZhcmlhYmxlcworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaXRlcmF0aW9uVmFyczsKKyAgaWYgKHRoaXMtPkl0ZXJhdGlvblZhcnNDb3VudCA+IDEpIHsKKyAgICAvLyBJZiBtdWx0aXBsZSBpdGVyYXRpb24gdmFyaWFibGVzIGhhcyBnaXZlbiwKKyAgICAvLyBqdXN0IGNvcHkgdGhlbSB0byB0aGUgYGl0ZXJhdGlvblZhcnNgIGxpc3QuCisgICAgaXRlcmF0aW9uVmFycy5yZXNlcnZlKHZhbHVlcy5zaXplKCkpOworICAgIHN0ZDo6Y29weSh0aGlzLT5BcmdzLmJlZ2luKCksCisgICAgICAgICAgICAgIHRoaXMtPkFyZ3MuYmVnaW4oKSArIHRoaXMtPkl0ZXJhdGlvblZhcnNDb3VudCwKKyAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGl0ZXJhdGlvblZhcnMpKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBJbiBjYXNlIG9mIHRoZSBvbmx5IGl0ZXJhdGlvbiB2YXJpYWJsZSwKKyAgICAvLyBnZW5lcmF0ZSBuYW1lcyBhcyBgdmFyX25hbWVfTmAsCisgICAgLy8gd2hlcmUgYE5gIGlzIHRoZSBjb3VudCBvZiBsaXN0cyB0byB6aXAKKyAgICBpdGVyYXRpb25WYXJzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBjb25zdCBhdXRvIGl0ZXJfdmFyX3ByZWZpeCA9IHRoaXMtPkFyZ3MuZnJvbnQoKSArICJfIjsKKyAgICBhdXRvIGkgPSAwdTsKKyAgICBzdGQ6OmdlbmVyYXRlKAorICAgICAgaXRlcmF0aW9uVmFycy5iZWdpbigpLCBpdGVyYXRpb25WYXJzLmVuZCgpLAorICAgICAgWyZdKCkgLT4gc3RkOjpzdHJpbmcgeyByZXR1cm4gaXRlcl92YXJfcHJlZml4ICsgc3RkOjp0b19zdHJpbmcoaSsrKTsgfSk7CisgIH0KKyAgYXNzZXJ0KCJTYW5pdHkgY2hlY2siICYmIGl0ZXJhdGlvblZhcnMuc2l6ZSgpID09IHZhbHVlcy5zaXplKCkpOworCisgIC8vIFN0b3JlIG9sZCB2YWx1ZXMgZm9yIGl0ZXJhdGlvbiB2YXJpYWJsZXMKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBvbGREZWZzOworICBmb3IgKGF1dG8gaSA9IDB1OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgaWYgKG1mLkdldERlZmluaXRpb24oaXRlcmF0aW9uVmFyc1tpXSkpIHsKKyAgICAgIG9sZERlZnMuZW1wbGFjZShpdGVyYXRpb25WYXJzW2ldLCBtZi5HZXREZWZpbml0aW9uKGl0ZXJhdGlvblZhcnNbaV0pKTsKKyAgICB9CisgIH0KKworICAvLyBGb3JtIGEgdmVjdG9yIG9mIGN1cnJlbnQgcG9zaXRpb25zIGluIGFsbCBsaXN0cyAoT2ssIHZlY3RvcnMpIG9mIHZhbHVlcworICBzdGQ6OnZlY3RvcjxkZWNsdHlwZSh2YWx1ZXMpOjp2YWx1ZV90eXBlOjppdGVyYXRvcj4gcG9zaXRpb25zOworICBwb3NpdGlvbnMucmVzZXJ2ZSh2YWx1ZXMuc2l6ZSgpKTsKKyAgc3RkOjp0cmFuc2Zvcm0oCisgICAgdmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHBvc2l0aW9ucyksCisgICAgLy8gU2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgbGlzdAorICAgIFtdKGRlY2x0eXBlKHZhbHVlcyk6OnZhbHVlX3R5cGUmIGxpc3QpIHsgcmV0dXJuIGxpc3QuYmVnaW4oKTsgfSk7CisgIGFzc2VydCgiU2FuaXR5IGNoZWNrIiAmJiBwb3NpdGlvbnMuc2l6ZSgpID09IHZhbHVlcy5zaXplKCkpOworCisgIGF1dG8gcmVzdG9yZSA9IGZhbHNlOworICAvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBsaXN0cyBzaW11bGF0ZW5lb3VzbHkKKyAgZm9yIChhdXRvIGkgPSAwdTsgaSA8IG1heEl0ZW1zOyArK2kpIHsKKyAgICAvLyBEZWNsYXJlIGl0ZXJhdGlvbiB2YXJpYWJsZXMKKyAgICBmb3IgKGF1dG8gaiA9IDB1OyBqIDwgdmFsdWVzLnNpemUoKTsgKytqKSB7CisgICAgICAvLyBEZWZpbmUgKG9yIG5vdCkgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZSBpZiB0aGUgY3VycmVudCBwb3NpdGlvbgorICAgICAgLy8gc3RpbGwgbm90IGF0IHRoZSBlbmQuLi4KKyAgICAgIGlmIChwb3NpdGlvbnNbal0gIT0gdmFsdWVzW2pdLmVuZCgpKSB7CisgICAgICAgIG1mLkFkZERlZmluaXRpb24oaXRlcmF0aW9uVmFyc1tqXSwgKnBvc2l0aW9uc1tqXSk7CisgICAgICAgICsrcG9zaXRpb25zW2pdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbWYuUmVtb3ZlRGVmaW5pdGlvbihpdGVyYXRpb25WYXJzW2pdKTsKKyAgICAgIH0KKyAgICB9CisgICAgLy8gSW52b2tlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBjb2xsZWN0ZWQgaW4gdGhlIGJsb2NrLgorICAgIGF1dG8gciA9IHRoaXMtPmludm9rZShmdW5jdGlvbnMsIGluU3RhdHVzLCBtZik7CisgICAgcmVzdG9yZSA9IHIuUmVzdG9yZTsKKyAgICBpZiAoci5CcmVhaykgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLy8gUmVzdG9yZSB0aGUgdmFyaWFibGVzIHRvIGl0cyBwcmlvciB2YWx1ZQorICBpZiAocmVzdG9yZSkgeworICAgIGZvciAoYXV0byBjb25zdCYgcCA6IG9sZERlZnMpIHsKKyAgICAgIG1mLkFkZERlZmluaXRpb24ocC5maXJzdCwgcC5zZWNvbmQpOworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKIH0KIAorYXV0byBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI6Omludm9rZSgKKyAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUZ1bmN0aW9uPiBjb25zdCYgZnVuY3Rpb25zLAorICBjbUV4ZWN1dGlvblN0YXR1cyYgaW5TdGF0dXMsIGNtTWFrZWZpbGUmIG1mKSAtPiBJbnZva2VSZXN1bHQKK3sKKyAgSW52b2tlUmVzdWx0IHJlc3VsdCA9IHsgdHJ1ZSwgZmFsc2UgfTsKKyAgLy8gSW52b2tlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBjb2xsZWN0ZWQgaW4gdGhlIGJsb2NrLgorICBmb3IgKGNtTGlzdEZpbGVGdW5jdGlvbiBjb25zdCYgZnVuYyA6IGZ1bmN0aW9ucykgeworICAgIGNtRXhlY3V0aW9uU3RhdHVzIHN0YXR1cyhtZik7CisgICAgbWYuRXhlY3V0ZUNvbW1hbmQoZnVuYywgc3RhdHVzKTsKKyAgICBpZiAoc3RhdHVzLkdldFJldHVybkludm9rZWQoKSkgeworICAgICAgaW5TdGF0dXMuU2V0UmV0dXJuSW52b2tlZCgpOworICAgICAgcmVzdWx0LkJyZWFrID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoc3RhdHVzLkdldEJyZWFrSW52b2tlZCgpKSB7CisgICAgICByZXN1bHQuQnJlYWsgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChzdGF0dXMuR2V0Q29udGludWVJbnZva2VkKCkpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RmF0YWxFcnJvck9jY3VyZWQoKSkgeworICAgICAgcmVzdWx0LlJlc3RvcmUgPSBmYWxzZTsKKyAgICAgIHJlc3VsdC5CcmVhayA9IHRydWU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBIYW5kbGVJbk1vZGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBrd0luSXRlciwKKyAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUmIG1ha2VmaWxlKQoreworICBhc3NlcnQoIkEgdmFsaWQgaXRlcmF0b3IgZXhwZWN0ZWQiICYmIGt3SW5JdGVyICE9IGFyZ3MuZW5kKCkpOworCisgIGF1dG8gZmIgPSBjbTo6bWFrZV91bmlxdWU8Y21Gb3JFYWNoRnVuY3Rpb25CbG9ja2VyPigmbWFrZWZpbGUpOworCisgIC8vIENvcHkgaXRlcmF0aW9uIHZhcmlhYmxlIG5hbWVzIGZpcnN0CisgIHN0ZDo6Y29weShhcmdzLmJlZ2luKCksIGt3SW5JdGVyLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZmItPkFyZ3MpKTsKKyAgLy8gUmVtZW1iZXIgdGhlIGNvdW50IG9mIGdpdmVuIGl0ZXJhdGlvbiB2YXJpYWJsZSBuYW1lcworICBjb25zdCBhdXRvIHZhcnNDb3VudCA9IGZiLT5BcmdzLnNpemUoKTsKKyAgZmItPlNldEl0ZXJhdGlvblZhcnNDb3VudCh2YXJzQ291bnQpOworCisgIGVudW0gRG9pbmcKKyAgeworICAgIERvaW5nTm9uZSwKKyAgICBEb2luZ0xpc3RzLAorICAgIERvaW5nSXRlbXMsCisgICAgRG9pbmdaaXBMaXN0cworICB9OworICBEb2luZyBkb2luZyA9IERvaW5nTm9uZTsKKyAgLy8gSXRlcmF0ZSBvdmVyIGFyZ3VtZW50cyBwYXN0IHRoZSAiSU4iIGtleXdvcmQKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJnIDogY21NYWtlUmFuZ2UoKytrd0luSXRlciwgYXJncy5lbmQoKSkpIHsKKyAgICBpZiAoYXJnID09ICJMSVNUUyIpIHsKKyAgICAgIGlmIChkb2luZyA9PSBEb2luZ1ppcExpc3RzKSB7CisgICAgICAgIG1ha2VmaWxlLklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWklQX0xJU1RTIGNhbiBub3QgYmUgdXNlZCB3aXRoIExJU1RTIG9yIElURU1TIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgICAgaWYgKHZhcnNDb3VudCAhPSAxdSkgeworICAgICAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICJJVEVNUyBvciBMSVNUUyByZXF1aXJlIGV4YWN0bHkgb25lIGl0ZXJhdGlvbiB2YXJpYWJsZSIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGRvaW5nID0gRG9pbmdMaXN0czsKKworICAgIH0gZWxzZSBpZiAoYXJnID09ICJJVEVNUyIpIHsKKyAgICAgIGlmIChkb2luZyA9PSBEb2luZ1ppcExpc3RzKSB7CisgICAgICAgIG1ha2VmaWxlLklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWklQX0xJU1RTIGNhbiBub3QgYmUgdXNlZCB3aXRoIExJU1RTIG9yIElURU1TIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgICAgaWYgKHZhcnNDb3VudCAhPSAxdSkgeworICAgICAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICJJVEVNUyBvciBMSVNUUyByZXF1aXJlIGV4YWN0bHkgb25lIGl0ZXJhdGlvbiB2YXJpYWJsZSIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGRvaW5nID0gRG9pbmdJdGVtczsKKworICAgIH0gZWxzZSBpZiAoYXJnID09ICJaSVBfTElTVFMiKSB7CisgICAgICBpZiAoZG9pbmcgIT0gRG9pbmdOb25lKSB7CisgICAgICAgIG1ha2VmaWxlLklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWklQX0xJU1RTIGNhbiBub3QgYmUgdXNlZCB3aXRoIExJU1RTIG9yIElURU1TIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgICAgZG9pbmcgPSBEb2luZ1ppcExpc3RzOworICAgICAgZmItPlNldFppcExpc3RzKCk7CisKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nTGlzdHMpIHsKKyAgICAgIGF1dG8gY29uc3QmIHZhbHVlID0gbWFrZWZpbGUuR2V0U2FmZURlZmluaXRpb24oYXJnKTsKKyAgICAgIGlmICghdmFsdWUuZW1wdHkoKSkgeworICAgICAgICBjbUV4cGFuZExpc3QodmFsdWUsIGZiLT5BcmdzLCB0cnVlKTsKKyAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdJdGVtcyB8fCBkb2luZyA9PSBEb2luZ1ppcExpc3RzKSB7CisgICAgICBmYi0+QXJncy5wdXNoX2JhY2soYXJnKTsKKworICAgIH0gZWxzZSB7CisgICAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJVbmtub3duIGFyZ3VtZW50OlxuIiwgIiAgIiwgYXJnLCAiXG4iKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKworICAvLyBJZiBgWklQX0xJU1RTYCBnaXZlbiBhbmQgdmFyaWFibGVzIGNvdW50IG1vcmUgdGhhbiAxLAorICAvLyBtYWtlIHN1cmUgdGhlIGdpdmVuIGxpc3RzIGNvdW50IG1hdGNoZXMgdmFyaWFibGVzLi4uCisgIGlmIChkb2luZyA9PSBEb2luZ1ppcExpc3RzICYmIHZhcnNDb3VudCA+IDF1ICYmCisgICAgICAoMnUgKiB2YXJzQ291bnQpICE9IGZiLT5BcmdzLnNpemUoKSkgeworICAgIG1ha2VmaWxlLklzc3VlTWVzc2FnZSgKKyAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgIGNtU3RyQ2F0KCJFeHBlY3RlZCAiLCBzdGQ6OnRvX3N0cmluZyh2YXJzQ291bnQpLAorICAgICAgICAgICAgICAgIiBsaXN0IHZhcmlhYmxlcywgYnV0IGdpdmVuICIsCisgICAgICAgICAgICAgICBzdGQ6OnRvX3N0cmluZyhmYi0+QXJncy5zaXplKCkgLSB2YXJzQ291bnQpKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBtYWtlZmlsZS5BZGRGdW5jdGlvbkJsb2NrZXIoc3RkOjptb3ZlKGZiKSk7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVHJ5UGFyc2VJbnRlZ2VyKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIGludCYgaSkKK3sKKyAgdHJ5IHsKKyAgICBpID0gc3RkOjpzdG9pKHN0cik7CisgIH0gY2F0Y2ggKHN0ZDo6aW52YWxpZF9hcmd1bWVudCYpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKKyAgICBlIDw8ICJJbnZhbGlkIGludGVnZXI6ICciIDw8IHN0ciA8PCAiJyI7CisgICAgc3RhdHVzLlNldEVycm9yKGUuc3RyKCkpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBib29sIGNtRm9yRWFjaENvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CkBAIC0xMTQsOCArMzgwLDkgQEAKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIGlmIChhcmdzLnNpemUoKSA+IDEgJiYgYXJnc1sxXSA9PSAiSU4iKSB7Ci0gICAgcmV0dXJuIEhhbmRsZUluTW9kZShhcmdzLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSk7CisgIGF1dG8ga3dJbkl0ZXIgPSBzdGQ6OmZpbmQoYXJncy5iZWdpbigpLCBhcmdzLmVuZCgpLCAiSU4iKTsKKyAgaWYgKGt3SW5JdGVyICE9IGFyZ3MuZW5kKCkpIHsKKyAgICByZXR1cm4gSGFuZGxlSW5Nb2RlKGFyZ3MsIGt3SW5JdGVyLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSk7CiAgIH0KIAogICAvLyBjcmVhdGUgYSBmdW5jdGlvbiBibG9ja2VyCkBAIC0xMjYsMTYgKzM5MywyOCBAQAogICAgICAgaW50IHN0b3AgPSAwOwogICAgICAgaW50IHN0ZXAgPSAwOwogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDMpIHsKLSAgICAgICAgc3RvcCA9IGF0b2koYXJnc1syXS5jX3N0cigpKTsKKyAgICAgICAgaWYgKCFUcnlQYXJzZUludGVnZXIoc3RhdHVzLCBhcmdzWzJdLCBzdG9wKSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpIHsKLSAgICAgICAgc3RhcnQgPSBhdG9pKGFyZ3NbMl0uY19zdHIoKSk7Ci0gICAgICAgIHN0b3AgPSBhdG9pKGFyZ3NbM10uY19zdHIoKSk7CisgICAgICAgIGlmICghVHJ5UGFyc2VJbnRlZ2VyKHN0YXR1cywgYXJnc1syXSwgc3RhcnQpKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghVHJ5UGFyc2VJbnRlZ2VyKHN0YXR1cywgYXJnc1szXSwgc3RvcCkpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSA1KSB7Ci0gICAgICAgIHN0YXJ0ID0gYXRvaShhcmdzWzJdLmNfc3RyKCkpOwotICAgICAgICBzdG9wID0gYXRvaShhcmdzWzNdLmNfc3RyKCkpOwotICAgICAgICBzdGVwID0gYXRvaShhcmdzWzRdLmNfc3RyKCkpOworICAgICAgICBpZiAoIVRyeVBhcnNlSW50ZWdlcihzdGF0dXMsIGFyZ3NbMl0sIHN0YXJ0KSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVRyeVBhcnNlSW50ZWdlcihzdGF0dXMsIGFyZ3NbM10sIHN0b3ApKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghVHJ5UGFyc2VJbnRlZ2VyKHN0YXR1cywgYXJnc1s0XSwgc3RlcCkpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGlmIChzdGVwID09IDApIHsKICAgICAgICAgaWYgKHN0YXJ0ID4gc3RvcCkgewpAQCAtMTQ5LDY5ICs0MjgsMzYgQEAKICAgICAgICAgc3RhdHVzLlNldEVycm9yKAogICAgICAgICAgIGNtU3RyQ2F0KCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgcmFuZ2Ugc3BlY2lmaWNhdGlvbjogc3RhcnQgIiwgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgIiwgc3RvcCAiLCBzdG9wLCAiLCBzdGVwICIsIHN0ZXApKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJhbmdlOwotICAgICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICAgIHJhbmdlLnB1c2hfYmFjayhhcmdzWzBdKTsKLSAgICAgIGludCBjYzsKLSAgICAgIGZvciAoY2MgPSBzdGFydDs7IGNjICs9IHN0ZXApIHsKLSAgICAgICAgaWYgKChzdGVwID4gMCAmJiBjYyA+IHN0b3ApIHx8IChzdGVwIDwgMCAmJiBjYyA8IHN0b3ApKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGNjKTsKLSAgICAgICAgcmFuZ2UuZW1wbGFjZV9iYWNrKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChjYyA9PSBzdG9wKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZiLT5BcmdzID0gcmFuZ2U7CisKKyAgICAgIC8vIENhbGN1bGF0ZSBleHBlY3RlZCBpdGVyYXRpb25zIGNvdW50IGFuZCByZXNlcnZlIGVub3VnaCBzcGFjZQorICAgICAgLy8gaW4gdGhlIGBmYi0+QXJnc2AgdmVjdG9yLiBUaGUgZmlyc3QgaXRlbSBpcyB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlCisgICAgICAvLyBuYW1lLi4uCisgICAgICBjb25zdCBzdGQ6OnNpemVfdCBpdGVyX2NudCA9IDJ1ICsKKyAgICAgICAgaW50KHN0YXJ0IDwgc3RvcCkgKiAoc3RvcCAtIHN0YXJ0KSAvIHN0ZDo6YWJzKHN0ZXApICsKKyAgICAgICAgaW50KHN0YXJ0ID4gc3RvcCkgKiAoc3RhcnQgLSBzdG9wKSAvIHN0ZDo6YWJzKHN0ZXApOworICAgICAgZmItPkFyZ3MucmVzaXplKGl0ZXJfY250KTsKKyAgICAgIGZiLT5BcmdzLmZyb250KCkgPSBhcmdzLmZyb250KCk7CisgICAgICBhdXRvIGNjID0gc3RhcnQ7CisgICAgICBhdXRvIGdlbmVyYXRvciA9IFsmY2MsIHN0ZXBdKCkgLT4gc3RkOjpzdHJpbmcgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6dG9fc3RyaW5nKGNjKTsKKyAgICAgICAgY2MgKz0gc3RlcDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH07CisgICAgICAvLyBGaWxsIHRoZSBgcmFuZ2VgIHZlY3RvciB3LyBnZW5lcmF0ZWQgc3RyaW5nIHZhbHVlcworICAgICAgLy8gKHN0YXJ0aW5nIGZyb20gMm5kIHBvc2l0aW9uKQorICAgICAgc3RkOjpnZW5lcmF0ZSgrK2ZiLT5BcmdzLmJlZ2luKCksIGZiLT5BcmdzLmVuZCgpLCBnZW5lcmF0b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICBmYi0+QXJncyA9IGFyZ3M7CiAgICAgfQogICB9IGVsc2UgewogICAgIGZiLT5BcmdzID0gYXJnczsKICAgfQorCisgIGZiLT5TZXRJdGVyYXRpb25WYXJzQ291bnQoMXUpOwogICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRGdW5jdGlvbkJsb2NrZXIoc3RkOjptb3ZlKGZiKSk7CiAKICAgcmV0dXJuIHRydWU7CiB9Ci0KLW5hbWVzcGFjZSB7Ci1ib29sIEhhbmRsZUluTW9kZShzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsIGNtTWFrZWZpbGUmIG1ha2VmaWxlKQotewotICBhdXRvIGZiID0gY206Om1ha2VfdW5pcXVlPGNtRm9yRWFjaEZ1bmN0aW9uQmxvY2tlcj4oJm1ha2VmaWxlKTsKLSAgZmItPkFyZ3MucHVzaF9iYWNrKGFyZ3NbMF0pOwotCi0gIGVudW0gRG9pbmcKLSAgewotICAgIERvaW5nTm9uZSwKLSAgICBEb2luZ0xpc3RzLAotICAgIERvaW5nSXRlbXMKLSAgfTsKLSAgRG9pbmcgZG9pbmcgPSBEb2luZ05vbmU7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAyOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAgIGlmIChkb2luZyA9PSBEb2luZ0l0ZW1zKSB7Ci0gICAgICBmYi0+QXJncy5wdXNoX2JhY2soYXJnc1tpXSk7Ci0gICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJMSVNUUyIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdMaXN0czsKLSAgICB9IGVsc2UgaWYgKGFyZ3NbaV0gPT0gIklURU1TIikgewotICAgICAgZG9pbmcgPSBEb2luZ0l0ZW1zOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdMaXN0cykgewotICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBtYWtlZmlsZS5HZXREZWZpbml0aW9uKGFyZ3NbaV0pOwotICAgICAgaWYgKHZhbHVlICYmICp2YWx1ZSkgewotICAgICAgICBjbUV4cGFuZExpc3QodmFsdWUsIGZiLT5BcmdzLCB0cnVlKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgbWFrZWZpbGUuSXNzdWVNZXNzYWdlKAotICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAgIGNtU3RyQ2F0KCJVbmtub3duIGFyZ3VtZW50OlxuIiwgIiAgIiwgYXJnc1tpXSwgIlxuIikpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgbWFrZWZpbGUuQWRkRnVuY3Rpb25CbG9ja2VyKHN0ZDo6bW92ZShmYikpOwotCi0gIHJldHVybiB0cnVlOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRnVuY3Rpb25Db21tYW5kLmN4eCBiL1NvdXJjZS9jbUZ1bmN0aW9uQ29tbWFuZC5jeHgKaW5kZXggYjNkZGZlMC4uYTRjOTA3MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRnVuY3Rpb25Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21GdW5jdGlvbkNvbW1hbmQuY3h4CkBAIC0yLDE1ICsyLDE0IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUZ1bmN0aW9uQ29tbWFuZC5oIgogCi0jaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtRnVuY3Rpb25CbG9ja2VyLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCkBAIC0xOSw4ICsxOCwyMCBAQAogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBuYW1lc3BhY2Ugeworc3RkOjpzdHJpbmcgY29uc3QgQVJHQyA9ICJBUkdDIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IEFSR04gPSAiQVJHTiI7CitzdGQ6OnN0cmluZyBjb25zdCBBUkdWID0gIkFSR1YiOworc3RkOjpzdHJpbmcgY29uc3QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTiA9ICJDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFID0KKyAgIkNNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVIgPQorICAiQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUiI7CitzdGQ6OnN0cmluZyBjb25zdCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORSA9CisgICJDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORSI7CisKIC8vIGRlZmluZSB0aGUgY2xhc3MgZm9yIGZ1bmN0aW9uIGNvbW1hbmRzCiBjbGFzcyBjbUZ1bmN0aW9uSGVscGVyQ29tbWFuZAogewpAQCAtMzYsOCArNDcsOCBAQAogICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IEZ1bmN0aW9uczsKICAgY21Qb2xpY2llczo6UG9saWN5TWFwIFBvbGljaWVzOwogICBzdGQ6OnN0cmluZyBGaWxlUGF0aDsKKyAgbG9uZyBMaW5lOwogfTsKLX0KIAogYm9vbCBjbUZ1bmN0aW9uSGVscGVyQ29tbWFuZDo6b3BlcmF0b3IoKSgKICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUFyZ3VtZW50PiBjb25zdCYgYXJncywKQEAgLTUyLDkgKzYzLDkgQEAKICAgLy8gbWFrZSBzdXJlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCBpcyBhdCBsZWFzdCB0aGUgbnVtYmVyCiAgIC8vIHJlcXVpcmVkIGJ5IHRoZSBzaWduYXR1cmUKICAgaWYgKGV4cGFuZGVkQXJncy5zaXplKCkgPCB0aGlzLT5BcmdzLnNpemUoKSAtIDEpIHsKLSAgICBzdGQ6OnN0cmluZyBlcnJvck1zZyA9IGNtU3RyQ2F0KAorICAgIGF1dG8gY29uc3QgZXJyb3JNc2cgPSBjbVN0ckNhdCgKICAgICAgICJGdW5jdGlvbiBpbnZva2VkIHdpdGggaW5jb3JyZWN0IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gbmFtZWQ6ICIsCi0gICAgICB0aGlzLT5BcmdzWzBdKTsKKyAgICAgIHRoaXMtPkFyZ3MuZnJvbnQoKSk7CiAgICAgaW5TdGF0dXMuU2V0RXJyb3IoZXJyb3JNc2cpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtNjMsMzAgKzc0LDQwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBvbGljaWVzKTsKIAogICAvLyBzZXQgdGhlIHZhbHVlIG9mIGFyZ2MKLSAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbigiQVJHQyIsIHN0ZDo6dG9fc3RyaW5nKGV4cGFuZGVkQXJncy5zaXplKCkpKTsKLSAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKCJBUkdDIik7CisgIG1ha2VmaWxlLkFkZERlZmluaXRpb24oQVJHQywgc3RkOjp0b19zdHJpbmcoZXhwYW5kZWRBcmdzLnNpemUoKSkpOworICBtYWtlZmlsZS5NYXJrVmFyaWFibGVBc1VzZWQoQVJHQyk7CiAKICAgLy8gc2V0IHRoZSB2YWx1ZXMgZm9yIEFSR1YwIEFSR1YxIC4uLgotICBmb3IgKHVuc2lnbmVkIGludCB0ID0gMDsgdCA8IGV4cGFuZGVkQXJncy5zaXplKCk7ICsrdCkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB0bXBTdHJlYW07Ci0gICAgdG1wU3RyZWFtIDw8ICJBUkdWIiA8PCB0OwotICAgIG1ha2VmaWxlLkFkZERlZmluaXRpb24odG1wU3RyZWFtLnN0cigpLCBleHBhbmRlZEFyZ3NbdF0pOwotICAgIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZCh0bXBTdHJlYW0uc3RyKCkpOworICBmb3IgKGF1dG8gdCA9IDB1OyB0IDwgZXhwYW5kZWRBcmdzLnNpemUoKTsgKyt0KSB7CisgICAgYXV0byBjb25zdCB2YWx1ZSA9IGNtU3RyQ2F0KEFSR1YsIHN0ZDo6dG9fc3RyaW5nKHQpKTsKKyAgICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKHZhbHVlLCBleHBhbmRlZEFyZ3NbdF0pOworICAgIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZCh2YWx1ZSk7CiAgIH0KIAogICAvLyBkZWZpbmUgdGhlIGZvcm1hbCBhcmd1bWVudHMKLSAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDE7IGogPCB0aGlzLT5BcmdzLnNpemUoKTsgKytqKSB7CisgIGZvciAoYXV0byBqID0gMXU7IGogPCB0aGlzLT5BcmdzLnNpemUoKTsgKytqKSB7CiAgICAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbih0aGlzLT5BcmdzW2pdLCBleHBhbmRlZEFyZ3NbaiAtIDFdKTsKICAgfQogCiAgIC8vIGRlZmluZSBBUkdWIGFuZCBBUkdOCi0gIHN0ZDo6c3RyaW5nIGFyZ3ZEZWYgPSBjbUpvaW4oZXhwYW5kZWRBcmdzLCAiOyIpOwotICBhdXRvIGVpdCA9IGV4cGFuZGVkQXJncy5iZWdpbigpICsgKHRoaXMtPkFyZ3Muc2l6ZSgpIC0gMSk7Ci0gIHN0ZDo6c3RyaW5nIGFyZ25EZWYgPSBjbUpvaW4oY21NYWtlUmFuZ2UoZWl0LCBleHBhbmRlZEFyZ3MuZW5kKCkpLCAiOyIpOwotICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKCJBUkdWIiwgYXJndkRlZik7Ci0gIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZCgiQVJHViIpOwotICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKCJBUkdOIiwgYXJnbkRlZik7Ci0gIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZCgiQVJHTiIpOworICBhdXRvIGNvbnN0IGFyZ3ZEZWYgPSBjbUpvaW4oZXhwYW5kZWRBcmdzLCAiOyIpOworICBhdXRvIGNvbnN0IGVpdCA9IGV4cGFuZGVkQXJncy5iZWdpbigpICsgKHRoaXMtPkFyZ3Muc2l6ZSgpIC0gMSk7CisgIGF1dG8gY29uc3QgYXJnbkRlZiA9IGNtSm9pbihjbU1ha2VSYW5nZShlaXQsIGV4cGFuZGVkQXJncy5lbmQoKSksICI7Iik7CisgIG1ha2VmaWxlLkFkZERlZmluaXRpb24oQVJHViwgYXJndkRlZik7CisgIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZChBUkdWKTsKKyAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbihBUkdOLCBhcmduRGVmKTsKKyAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKEFSR04pOworCisgIG1ha2VmaWxlLkFkZERlZmluaXRpb24oQ01BS0VfQ1VSUkVOVF9GVU5DVElPTiwgdGhpcy0+QXJncy5mcm9udCgpKTsKKyAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKENNQUtFX0NVUlJFTlRfRlVOQ1RJT04pOworICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFLCB0aGlzLT5GaWxlUGF0aCk7CisgIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZChDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSk7CisgIG1ha2VmaWxlLkFkZERlZmluaXRpb24oQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgodGhpcy0+RmlsZVBhdGgpKTsKKyAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVIpOworICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dG9fc3RyaW5nKHRoaXMtPkxpbmUpKTsKKyAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FKTsKIAogICAvLyBJbnZva2UgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGNvbGxlY3RlZCBpbiB0aGUgYmxvY2suCiAgIC8vIGZvciBlYWNoIGZ1bmN0aW9uCkBAIC0xMDAsNyArMTIxLDcgQEAKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHN0YXR1cy5HZXRSZXR1cm5JbnZva2VkKCkpIHsKLSAgICAgIHJldHVybiB0cnVlOworICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAKQEAgLTEyOSw3ICsxNTAsOCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwYW5kZWRBcmd1bWVudHM7CiAgIG1mLkV4cGFuZEFyZ3VtZW50cyhsZmYuQXJndW1lbnRzLCBleHBhbmRlZEFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFN0YXJ0aW5nQ29udGV4dCgpLkZpbGVQYXRoLmNfc3RyKCkpOwotICByZXR1cm4gZXhwYW5kZWRBcmd1bWVudHMuZW1wdHkoKSB8fCBleHBhbmRlZEFyZ3VtZW50c1swXSA9PSB0aGlzLT5BcmdzWzBdOworICByZXR1cm4gZXhwYW5kZWRBcmd1bWVudHMuZW1wdHkoKSB8fAorICAgIGV4cGFuZGVkQXJndW1lbnRzLmZyb250KCkgPT0gdGhpcy0+QXJncy5mcm9udCgpOwogfQogCiBib29sIGNtRnVuY3Rpb25GdW5jdGlvbkJsb2NrZXI6OlJlcGxheSgKQEAgLTE0MSwxMSArMTYzLDE0IEBACiAgIGYuQXJncyA9IHRoaXMtPkFyZ3M7CiAgIGYuRnVuY3Rpb25zID0gc3RkOjptb3ZlKGZ1bmN0aW9ucyk7CiAgIGYuRmlsZVBhdGggPSB0aGlzLT5HZXRTdGFydGluZ0NvbnRleHQoKS5GaWxlUGF0aDsKKyAgZi5MaW5lID0gdGhpcy0+R2V0U3RhcnRpbmdDb250ZXh0KCkuTGluZTsKICAgbWYuUmVjb3JkUG9saWNpZXMoZi5Qb2xpY2llcyk7Ci0gIG1mLkdldFN0YXRlKCktPkFkZFNjcmlwdGVkQ29tbWFuZCh0aGlzLT5BcmdzWzBdLCBzdGQ6Om1vdmUoZikpOworICBtZi5HZXRTdGF0ZSgpLT5BZGRTY3JpcHRlZENvbW1hbmQodGhpcy0+QXJncy5mcm9udCgpLCBzdGQ6Om1vdmUoZikpOwogICByZXR1cm4gdHJ1ZTsKIH0KIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIGJvb2wgY21GdW5jdGlvbkNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogewpAQCAtMTU1LDEwICsxODAsOSBAQAogICB9CiAKICAgLy8gY3JlYXRlIGEgZnVuY3Rpb24gYmxvY2tlcgotICB7Ci0gICAgYXV0byBmYiA9IGNtOjptYWtlX3VuaXF1ZTxjbUZ1bmN0aW9uRnVuY3Rpb25CbG9ja2VyPigpOwotICAgIGNtQXBwZW5kKGZiLT5BcmdzLCBhcmdzKTsKLSAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRGdW5jdGlvbkJsb2NrZXIoc3RkOjptb3ZlKGZiKSk7Ci0gIH0KKyAgYXV0byBmYiA9IGNtOjptYWtlX3VuaXF1ZTxjbUZ1bmN0aW9uRnVuY3Rpb25CbG9ja2VyPigpOworICBjbTo6YXBwZW5kKGZiLT5BcmdzLCBhcmdzKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkRnVuY3Rpb25CbG9ja2VyKHN0ZDo6bW92ZShmYikpOworCiAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2NjRGVwZmlsZUxleGVySGVscGVyLmN4eCBiL1NvdXJjZS9jbUdjY0RlcGZpbGVMZXhlckhlbHBlci5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3ODk2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbUdjY0RlcGZpbGVMZXhlckhlbHBlci5jeHgKQEAgLTAsMCArMSwxMjYgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpbmNsdWRlICJjbUdjY0RlcGZpbGVMZXhlckhlbHBlci5oIgorCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlUmVhZGVyVHlwZXMuaCIKKworI2luY2x1ZGUgIkxleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmgiCisKKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgImNtc3lzL0VuY29kaW5nLmgiCisjZW5kaWYKKworYm9vbCBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcjo6cmVhZEZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgpCit7CisjaWZkZWYgX1dJTjMyCisgIHdjaGFyX3QqIHdwYXRoID0gY21zeXNFbmNvZGluZ19EdXBUb1dpZGUoZmlsZVBhdGgpOworICBGSUxFKiBmaWxlID0gX3dmb3Blbih3cGF0aCwgTCJyYiIpOworICBmcmVlKHdwYXRoKTsKKyNlbHNlCisgIEZJTEUqIGZpbGUgPSBmb3BlbihmaWxlUGF0aCwgInIiKTsKKyNlbmRpZgorICBpZiAoIWZpbGUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgbmV3RW50cnkoKTsKKyAgeXlzY2FuX3Qgc2Nhbm5lcjsKKyAgY21HY2NEZXBmaWxlX3l5bGV4X2luaXQoJnNjYW5uZXIpOworICBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmEodGhpcywgc2Nhbm5lcik7CisgIGNtR2NjRGVwZmlsZV95eXJlc3RhcnQoZmlsZSwgc2Nhbm5lcik7CisgIGNtR2NjRGVwZmlsZV95eWxleChzY2FubmVyKTsKKyAgY21HY2NEZXBmaWxlX3l5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgIHNhbml0aXplQ29udGVudCgpOworICBmY2xvc2UoZmlsZSk7CisgIHJldHVybiB0cnVlOworfQorCit2b2lkIGNtR2NjRGVwZmlsZUxleGVySGVscGVyOjpuZXdFbnRyeSgpCit7CisgIHRoaXMtPkhlbHBlclN0YXRlID0gU3RhdGU6OlJ1bGU7CisgIHRoaXMtPkNvbnRlbnQuZW1wbGFjZV9iYWNrKCk7CisgIG5ld1J1bGUoKTsKK30KKwordm9pZCBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcjo6bmV3UnVsZSgpCit7CisgIGF1dG8mIGVudHJ5ID0gdGhpcy0+Q29udGVudC5iYWNrKCk7CisgIGlmIChlbnRyeS5ydWxlcy5lbXB0eSgpIHx8ICFlbnRyeS5ydWxlcy5iYWNrKCkuZW1wdHkoKSkgeworICAgIGVudHJ5LnJ1bGVzLmVtcGxhY2VfYmFjaygpOworICB9Cit9CisKK3ZvaWQgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXI6Om5ld0RlcGVuZGVuY3koKQoreworICAvLyBwcmludGYoIk5FVyBERVBcbiIpOworICB0aGlzLT5IZWxwZXJTdGF0ZSA9IFN0YXRlOjpEZXBlbmRlbmN5OworICBpZiAodGhpcy0+Q29udGVudC5iYWNrKCkucGF0aHMuZW1wdHkoKSB8fAorICAgICAgIXRoaXMtPkNvbnRlbnQuYmFjaygpLnBhdGhzLmJhY2soKS5lbXB0eSgpKSB7CisgICAgdGhpcy0+Q29udGVudC5iYWNrKCkucGF0aHMuZW1wbGFjZV9iYWNrKCk7CisgIH0KK30KKwordm9pZCBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcjo6bmV3UnVsZU9yRGVwZW5kZW5jeSgpCit7CisgIGlmICh0aGlzLT5IZWxwZXJTdGF0ZSA9PSBTdGF0ZTo6UnVsZSkgeworICAgIG5ld1J1bGUoKTsKKyAgfSBlbHNlIHsKKyAgICBuZXdEZXBlbmRlbmN5KCk7CisgIH0KK30KKwordm9pZCBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcjo6YWRkVG9DdXJyZW50UGF0aChjb25zdCBjaGFyKiBzKQoreworICBpZiAodGhpcy0+Q29udGVudC5lbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIGNtR2NjU3R5bGVEZXBlbmRlbmN5KiBkZXAgPSAmdGhpcy0+Q29udGVudC5iYWNrKCk7CisgIHN0ZDo6c3RyaW5nKiBkc3QgPSBudWxscHRyOworICBzd2l0Y2ggKHRoaXMtPkhlbHBlclN0YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6UnVsZTogeworICAgICAgaWYgKGRlcC0+cnVsZXMuZW1wdHkoKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBkc3QgPSAmZGVwLT5ydWxlcy5iYWNrKCk7CisgICAgfSBicmVhazsKKyAgICBjYXNlIFN0YXRlOjpEZXBlbmRlbmN5OiB7CisgICAgICBpZiAoZGVwLT5wYXRocy5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGRzdCA9ICZkZXAtPnBhdGhzLmJhY2soKTsKKyAgICB9IGJyZWFrOworICB9CisgIGRzdC0+YXBwZW5kKHMpOworfQorCit2b2lkIGNtR2NjRGVwZmlsZUxleGVySGVscGVyOjpzYW5pdGl6ZUNvbnRlbnQoKQoreworICBmb3IgKGF1dG8gaXQgPSB0aGlzLT5Db250ZW50LmJlZ2luKCk7IGl0ICE9IHRoaXMtPkNvbnRlbnQuZW5kKCk7KSB7CisgICAgLy8gUmVtb3ZlIGVtcHR5IHJ1bGVzCisgICAgZm9yIChhdXRvIHJpdCA9IGl0LT5ydWxlcy5iZWdpbigpOyByaXQgIT0gaXQtPnJ1bGVzLmVuZCgpOykgeworICAgICAgaWYgKHJpdC0+ZW1wdHkoKSkgeworICAgICAgICByaXQgPSBpdC0+cnVsZXMuZXJhc2Uocml0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICsrcml0OworICAgICAgfQorICAgIH0KKyAgICAvLyBSZW1vdmUgdGhlIGVudHJ5IGlmIHJ1bGVzIGFyZSBlbXB0eQorICAgIGlmIChpdC0+cnVsZXMuZW1wdHkoKSkgeworICAgICAgaXQgPSB0aGlzLT5Db250ZW50LmVyYXNlKGl0KTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gUmVtb3ZlIGVtcHR5IHBhdGhzCisgICAgICBmb3IgKGF1dG8gcGl0ID0gaXQtPnBhdGhzLmJlZ2luKCk7IHBpdCAhPSBpdC0+cGF0aHMuZW5kKCk7KSB7CisgICAgICAgIGlmIChwaXQtPmVtcHR5KCkpIHsKKyAgICAgICAgICBwaXQgPSBpdC0+cGF0aHMuZXJhc2UocGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICArK3BpdDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgKytpdDsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdjY0RlcGZpbGVMZXhlckhlbHBlci5oIGIvU291cmNlL2NtR2NjRGVwZmlsZUxleGVySGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiMmZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbUdjY0RlcGZpbGVMZXhlckhlbHBlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXJfaAorI2RlZmluZSBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcl9oCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSA8Y21HY2NEZXBmaWxlUmVhZGVyVHlwZXMuaD4KKworY2xhc3MgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIKK3sKK3B1YmxpYzoKKyAgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIoKSA9IGRlZmF1bHQ7CisKKyAgYm9vbCByZWFkRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCk7CisgIGNtR2NjRGVwZmlsZUNvbnRlbnQgZXh0cmFjdENvbnRlbnQoKSAmJiB7IHJldHVybiBzdGQ6Om1vdmUodGhpcy0+Q29udGVudCk7IH0KKworICAvLyBGdW5jdGlvbnMgY2FsbGVkIGJ5IHRoZSBsZXhlcgorICB2b2lkIG5ld0VudHJ5KCk7CisgIHZvaWQgbmV3UnVsZSgpOworICB2b2lkIG5ld0RlcGVuZGVuY3koKTsKKyAgdm9pZCBuZXdSdWxlT3JEZXBlbmRlbmN5KCk7CisgIHZvaWQgYWRkVG9DdXJyZW50UGF0aChjb25zdCBjaGFyKiBzKTsKKworcHJpdmF0ZToKKyAgdm9pZCBzYW5pdGl6ZUNvbnRlbnQoKTsKKworICBjbUdjY0RlcGZpbGVDb250ZW50IENvbnRlbnQ7CisKKyAgZW51bSBjbGFzcyBTdGF0ZQorICB7CisgICAgUnVsZSwKKyAgICBEZXBlbmRlbmN5CisgIH07CisgIFN0YXRlIEhlbHBlclN0YXRlID0gU3RhdGU6OlJ1bGU7Cit9OworCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIqCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2NjRGVwZmlsZVJlYWRlci5jeHggYi9Tb3VyY2UvY21HY2NEZXBmaWxlUmVhZGVyLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDcwZWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtR2NjRGVwZmlsZVJlYWRlci5jeHgKQEAgLTAsMCArMSwxOCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2luY2x1ZGUgImNtR2NjRGVwZmlsZVJlYWRlci5oIgorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImNtR2NjRGVwZmlsZUxleGVySGVscGVyLmgiCisKK2NtR2NjRGVwZmlsZUNvbnRlbnQgY21SZWFkR2NjRGVwZmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyAgY21HY2NEZXBmaWxlQ29udGVudCByZXN1bHQ7CisgIGNtR2NjRGVwZmlsZUxleGVySGVscGVyIGhlbHBlcjsKKyAgaWYgKGhlbHBlci5yZWFkRmlsZShmaWxlUGF0aCkpIHsKKyAgICByZXN1bHQgPSBzdGQ6Om1vdmUoaGVscGVyKS5leHRyYWN0Q29udGVudCgpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HY2NEZXBmaWxlUmVhZGVyLmggYi9Tb3VyY2UvY21HY2NEZXBmaWxlUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxMzAxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbUdjY0RlcGZpbGVSZWFkZXIuaApAQCAtMCwwICsxLDEwIEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtR2NjRGVwZmlsZVJlYWRlcl9oCisjZGVmaW5lIGNtR2NjRGVwZmlsZVJlYWRlcl9oCisKKyNpbmNsdWRlICJjbUdjY0RlcGZpbGVSZWFkZXJUeXBlcy5oIgorCitjbUdjY0RlcGZpbGVDb250ZW50IGNtUmVhZEdjY0RlcGZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdjY0RlcGZpbGVSZWFkZXJUeXBlcy5oIGIvU291cmNlL2NtR2NjRGVwZmlsZVJlYWRlclR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxNWM3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbUdjY0RlcGZpbGVSZWFkZXJUeXBlcy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21HY2NEZXBmaWxlUmVhZGVyVHlwZXNfaAorI2RlZmluZSBjbUdjY0RlcGZpbGVSZWFkZXJUeXBlc19oCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitzdHJ1Y3QgY21HY2NTdHlsZURlcGVuZGVuY3kKK3sKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJ1bGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aHM7Cit9OworCit1c2luZyBjbUdjY0RlcGZpbGVDb250ZW50ID0gc3RkOjp2ZWN0b3I8Y21HY2NTdHlsZURlcGVuZGVuY3k+OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRlZEZpbGVTdHJlYW0uY3h4IGIvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5jeHgKaW5kZXggMmFmMDRiNi4uZjc2ZTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5jeHgKQEAgLTE4MCw2ICsxODAsNyBAQAogICB9CiAgIEZJTEUqIGlmcyA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6Rm9wZW4ob2xkbmFtZSwgInIiKTsKICAgaWYgKCFpZnMpIHsKKyAgICBnemNsb3NlKGdmKTsKICAgICByZXR1cm4gMDsKICAgfQogICBzaXplX3QgcmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbi5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmN4eAppbmRleCBiN2Y3ZDFkLi42ZTI5M2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmN4eApAQCAtOCw3ICs4LDYgQEAKIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmgiCkBAIC0yMiw2ICsyMSw4IEBACiB7CiB9CiAKK2NtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uOjp+Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24oKSA9IGRlZmF1bHQ7CisKIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6fmNtR2VuZXJhdG9yRXhwcmVzc2lvbigpID0gZGVmYXVsdDsKIAogc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjbUdlbmVyYXRvckV4cHJlc3Npb246OlBhcnNlKApAQCAtMzEsMTIgKzMyLDYgQEAKICAgICBuZXcgY21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24odGhpcy0+QmFja3RyYWNlLCBzdGQ6Om1vdmUoaW5wdXQpKSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQYXJzZSgKLSAgY29uc3QgY2hhciogaW5wdXQpIGNvbnN0Ci17Ci0gIHJldHVybiB0aGlzLT5QYXJzZShzdGQ6OnN0cmluZyhpbnB1dCA/IGlucHV0IDogIiIpKTsKLX0KLQogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKICAgc3RkOjpzdHJpbmcgaW5wdXQsIGNtTG9jYWxHZW5lcmF0b3IqIGxnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwKQEAgLTUxLDE3ICs0Niw2IEBACiAgIHJldHVybiBpbnB1dDsKIH0KIAotc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgY29uc3QgY2hhciogaW5wdXQsIGNtTG9jYWxHZW5lcmF0b3IqIGxnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwKLSAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlciwKLSAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGN1cnJlbnRUYXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSkKLXsKLSAgcmV0dXJuIGlucHV0ID8gRXZhbHVhdGUoc3RkOjpzdHJpbmcoaW5wdXQpLCBsZywgY29uZmlnLCBoZWFkVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYWdDaGVja2VyLCBjdXJyZW50VGFyZ2V0LCBsYW5ndWFnZSkKLSAgICAgICAgICAgICAgIDogIiI7Ci19Ci0KIGNvbnN0IHN0ZDo6c3RyaW5nJiBjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCiAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZFRhcmdldCwKQEAgLTg2LDcgKzcwLDcgQEAKIAogICB0aGlzLT5PdXRwdXQuY2xlYXIoKTsKIAotICBmb3IgKGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvciogaXQgOiB0aGlzLT5FdmFsdWF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgaXQgOiB0aGlzLT5FdmFsdWF0b3JzKSB7CiAgICAgdGhpcy0+T3V0cHV0ICs9IGl0LT5FdmFsdWF0ZSgmY29udGV4dCwgZGFnQ2hlY2tlcik7CiAKICAgICB0aGlzLT5TZWVuVGFyZ2V0UHJvcGVydGllcy5pbnNlcnQoY29udGV4dC5TZWVuVGFyZ2V0UHJvcGVydGllcy5jYmVnaW4oKSwKQEAgLTEwMiw2ICs4Niw4IEBACiAgIGlmICghY29udGV4dC5IYWRFcnJvcikgewogICAgIHRoaXMtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24gPSBjb250ZXh0LkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgICAgdGhpcy0+SGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGNvbnRleHQuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbjsKKyAgICB0aGlzLT5IYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24gPQorICAgICAgY29udGV4dC5IYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb247CiAgICAgdGhpcy0+U291cmNlU2Vuc2l0aXZlVGFyZ2V0cyA9IGNvbnRleHQuU291cmNlU2Vuc2l0aXZlVGFyZ2V0czsKICAgfQogCkBAIC0xMTgsNiArMTA0LDcgQEAKICAgLCBRdWlldChmYWxzZSkKICAgLCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKGZhbHNlKQogICAsIEhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCisgICwgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKGZhbHNlKQogewogICBjbUdlbmVyYXRvckV4cHJlc3Npb25MZXhlciBsOwogICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbj4gdG9rZW5zID0gbC5Ub2tlbml6ZSh0aGlzLT5JbnB1dCk7CkBAIC0xMjksMTEgKzExNiw2IEBACiAgIH0KIH0KIAotY21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb246On5jbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbigpCi17Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkV2YWx1YXRvcnMpOwotfQotCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwRW1wdHlMaXN0RWxlbWVudHMoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKIHsKQEAgLTM4NSw2ICszNjcsMjAgQEAKICAgcmV0dXJuIHRhcmdldE5hbWVWYWxpZGF0b3IuZmluZChpbnB1dCk7CiB9CiAKK3ZvaWQgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpSZXBsYWNlSW5zdGFsbFByZWZpeCgKKyAgc3RkOjpzdHJpbmcmIGlucHV0LCBjb25zdCBzdGQ6OnN0cmluZyYgcmVwbGFjZW1lbnQpCit7CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gMDsKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBsYXN0UG9zID0gcG9zOworCisgIHdoaWxlICgocG9zID0gaW5wdXQuZmluZCgiJDxJTlNUQUxMX1BSRUZJWD4iLCBsYXN0UG9zKSkgIT0KKyAgICAgICAgIHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmRQb3MgPSBwb3MgKyBzaXplb2YoIiQ8SU5TVEFMTF9QUkVGSVg+IikgLSAxOworICAgIGlucHV0LnJlcGxhY2UocG9zLCBlbmRQb3MgLSBwb3MsIHJlcGxhY2VtZW50KTsKKyAgICBsYXN0UG9zID0gZW5kUG9zOworICB9Cit9CisKIHZvaWQgY21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb246OkdldE1heExhbmd1YWdlU3RhbmRhcmQoCiAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0Z3QsIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4mIG1hcHBpbmcpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmgKaW5kZXggNGJkMWM5Zi4uNzViYmEwMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uaApAQCAtNDIsOCArNDIsNiBAQAogCiAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gUGFyc2UoCiAgICAgc3RkOjpzdHJpbmcgaW5wdXQpIGNvbnN0OwotICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IFBhcnNlKAotICAgIGNvbnN0IGNoYXIqIGlucHV0KSBjb25zdDsKIAogICBzdGF0aWMgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCiAgICAgc3RkOjpzdHJpbmcgaW5wdXQsIGNtTG9jYWxHZW5lcmF0b3IqIGxnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLApAQCAtNTEsMTIgKzQ5LDYgQEAKICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyID0gbnVsbHB0ciwKICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogY3VycmVudFRhcmdldCA9IG51bGxwdHIsCiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlID0gc3RkOjpzdHJpbmcoKSk7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBFdmFsdWF0ZSgKLSAgICBjb25zdCBjaGFyKiBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQgPSBudWxscHRyLAotICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIgPSBudWxscHRyLAotICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBjdXJyZW50VGFyZ2V0ID0gbnVsbHB0ciwKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UgPSBzdGQ6OnN0cmluZygpKTsKIAogICBlbnVtIFByZXByb2Nlc3NDb250ZXh0CiAgIHsKQEAgLTg3LDYgKzc5LDkgQEAKICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbHB0ciAmJiBpbnB1dFswXSA9PSAnJCcgJiYgaW5wdXRbMV0gPT0gJzwnOwogICB9CiAKKyAgc3RhdGljIHZvaWQgUmVwbGFjZUluc3RhbGxQcmVmaXgoc3RkOjpzdHJpbmcmIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVwbGFjZW1lbnQpOworCiBwcml2YXRlOgogICBjbUxpc3RGaWxlQmFja3RyYWNlIEJhY2t0cmFjZTsKIH07CkBAIC0xMzQsNiArMTI5LDEwIEBACiAgIHsKICAgICByZXR1cm4gdGhpcy0+SGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgfQorICBib29sIEdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gdGhpcy0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uOworICB9CiAgIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4gR2V0U291cmNlU2Vuc2l0aXZlVGFyZ2V0cygpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+U291cmNlU2Vuc2l0aXZlVGFyZ2V0czsKQEAgLTE2MCw3ICsxNTksNyBAQAogICBmcmllbmQgY2xhc3MgY21HZW5lcmF0b3JFeHByZXNzaW9uOwogCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgQmFja3RyYWNlOwotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqPiBFdmFsdWF0b3JzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yPj4gRXZhbHVhdG9yczsKICAgY29uc3Qgc3RkOjpzdHJpbmcgSW5wdXQ7CiAgIGJvb2wgTmVlZHNFdmFsdWF0aW9uOwogICBib29sIEV2YWx1YXRlRm9yQnVpbGRzeXN0ZW07CkBAIC0xNzUsNiArMTc0LDcgQEAKICAgbXV0YWJsZSBzdGQ6OnN0cmluZyBPdXRwdXQ7CiAgIG11dGFibGUgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwogICBtdXRhYmxlIGJvb2wgSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbjsKKyAgbXV0YWJsZSBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgbXV0YWJsZSBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IFNvdXJjZVNlbnNpdGl2ZVRhcmdldHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5jeHgKaW5kZXggNmQ5NzMzMS4uNDJjYmUyYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmN4eApAQCAtMTksNiArMTksNyBAQAogICAsIEhhZEVycm9yKGZhbHNlKQogICAsIEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCiAgICwgSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbihmYWxzZSkKKyAgLCBIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCiAgICwgRXZhbHVhdGVGb3JCdWlsZHN5c3RlbShldmFsdWF0ZUZvckJ1aWxkc3lzdGVtKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmgKaW5kZXggNDcwOWZhMC4uYmNlZmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oCkBAIC00MCw2ICs0MCw3IEBACiAgIGJvb2wgSGFkRXJyb3I7CiAgIGJvb2wgSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgYm9vbCBIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uOworICBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgYm9vbCBFdmFsdWF0ZUZvckJ1aWxkc3lzdGVtOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuY3h4IGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuY3h4CmluZGV4IDY0M2JhMzQuLmM4NjBjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5jeHgKQEAgLTYsNiArNiwxMCBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCisjaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtMTU0LDggKzE1OCw4IEBACiAKIGJvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6RXZhbHVhdGluZ0dlbmV4RXhwcmVzc2lvbigpCiB7Ci0gIHJldHVybiB0aGlzLT5Qcm9wZXJ0eS5maW5kKCJUQVJHRVRfR0VORVhfRVZBTDoiKSA9PSAwIHx8Ci0gICAgdGhpcy0+UHJvcGVydHkuZmluZCgiR0VORVhfRVZBTDoiLCAwKSA9PSAwOworICByZXR1cm4gY21IYXNMaXRlcmFsUHJlZml4KHRoaXMtPlByb3BlcnR5LCAiVEFSR0VUX0dFTkVYX0VWQUw6IikgfHwKKyAgICBjbUhhc0xpdGVyYWxQcmVmaXgodGhpcy0+UHJvcGVydHksICJHRU5FWF9FVkFMOiIpOwogfQogCiBib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdQSUNFeHByZXNzaW9uKCkKQEAgLTE3MCw2ICsxNzQsMjEgQEAKICAgcmV0dXJuIHRvcC0+UHJvcGVydHkgPT0gIklOVEVSRkFDRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIjsKIH0KIAorYm9vbCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpFdmFsdWF0aW5nTGlua0V4cHJlc3Npb24oKQoreworICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiB0b3AgPSB0aGlzOworICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBwYXJlbnQgPSB0aGlzLT5QYXJlbnQ7CisgIHdoaWxlIChwYXJlbnQpIHsKKyAgICB0b3AgPSBwYXJlbnQ7CisgICAgcGFyZW50ID0gcGFyZW50LT5QYXJlbnQ7CisgIH0KKworICBjbTo6c3RyaW5nX3ZpZXcgcHJvcGVydHkodG9wLT5Qcm9wZXJ0eSk7CisKKyAgcmV0dXJuIHByb3BlcnR5ID09ICJMSU5LX0RJUkVDVE9SSUVTIl9zIHx8IHByb3BlcnR5ID09ICJMSU5LX09QVElPTlMiX3MgfHwKKyAgICBwcm9wZXJ0eSA9PSAiTElOS19ERVBFTkRTIl9zOworfQorCiBib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0KQogewpAQCAtMTgwLDE4ICsxOTksMTcgQEAKICAgICBwYXJlbnQgPSBwYXJlbnQtPlBhcmVudDsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHByb3AgPSB0b3AtPlByb3BlcnR5LmNfc3RyKCk7CisgIGNtOjpzdHJpbmdfdmlldyBwcm9wKHRvcC0+UHJvcGVydHkpOwogCiAgIGlmICh0Z3QpIHsKLSAgICByZXR1cm4gdG9wLT5UYXJnZXQgPT0gdGd0ICYmIHN0cmNtcChwcm9wLCAiTElOS19MSUJSQVJJRVMiKSA9PSAwOworICAgIHJldHVybiB0b3AtPlRhcmdldCA9PSB0Z3QgJiYgcHJvcCA9PSAiTElOS19MSUJSQVJJRVMiX3M7CiAgIH0KIAotICByZXR1cm4gKHN0cmNtcChwcm9wLCAiTElOS19MSUJSQVJJRVMiKSA9PSAwIHx8Ci0gICAgICAgICAgc3RyY21wKHByb3AsICJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSA9PSAwIHx8Ci0gICAgICAgICAgc3RyY21wKHByb3AsICJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSA9PSAwIHx8Ci0gICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVNfIikgfHwKLSAgICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFU18iKSkgfHwKLSAgICBzdHJjbXAocHJvcCwgIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpID09IDA7CisgIHJldHVybiBwcm9wID09ICJMSU5LX0xJQlJBUklFUyJfcyB8fCBwcm9wID09ICJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiX3MgfHwKKyAgICBwcm9wID09ICJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiX3MgfHwKKyAgICBjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIkxJTktfSU5URVJGQUNFX0xJQlJBUklFU18iKSB8fAorICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwcm9wLCAiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTXyIpIHx8CisgICAgcHJvcCA9PSAiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIl9zOwogfQogCiBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6VG9wVGFyZ2V0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5oCmluZGV4IGYyYzQ5YmIuLjJhMDY1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuaApAQCAtNjgsNiArNjgsNyBAQAogCiAgIGJvb2wgRXZhbHVhdGluZ0dlbmV4RXhwcmVzc2lvbigpOwogICBib29sIEV2YWx1YXRpbmdQSUNFeHByZXNzaW9uKCk7CisgIGJvb2wgRXZhbHVhdGluZ0xpbmtFeHByZXNzaW9uKCk7CiAgIGJvb2wgRXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCA9IG51bGxwdHIpOwogCiAjZGVmaW5lIERFQ0xBUkVfVFJBTlNJVElWRV9QUk9QRVJUWV9NRVRIT0QoTUVUSE9EKSBib29sIE1FVEhPRCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmN4eAppbmRleCBlMGFlMTcwLi40MTI5YTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmN4eApAQCAtMiwxMCArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbk5vZGUuaCIKIApAQCAtMTYsNiArMTQsOCBAQAogewogfQogCitHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudDo6fkdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KCkgPSBkZWZhdWx0OworCiBzdGQ6OnN0cmluZyBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudDo6R2V0T3JpZ2luYWxFeHByZXNzaW9uKCkgY29uc3QKIHsKICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHRoaXMtPlN0YXJ0Q29udGVudCwgdGhpcy0+Q29udGVudExlbmd0aCk7CkBAIC0yNSwxNCArMjUsMTMgQEAKICAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZSogbm9kZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aWZpZXIsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+Pjo6Y29uc3RfaXRlcmF0b3IKLSAgICBwaXQpIGNvbnN0CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj46OmNvbnN0X2l0ZXJhdG9yIHBpdCkgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgcmVzdWx0OwogCiAgIGNvbnN0IGF1dG8gcGVuZCA9IHRoaXMtPlBhcmFtQ2hpbGRyZW4uZW5kKCk7CiAgIGZvciAoOyBwaXQgIT0gcGVuZDsgKytwaXQpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvciogcEV4cHJFdmFsIDogKnBpdCkgeworICAgIGZvciAoYXV0byYgcEV4cHJFdmFsIDogKnBpdCkgewogICAgICAgaWYgKG5vZGUtPlJlcXVpcmVzTGl0ZXJhbElucHV0KCkpIHsKICAgICAgICAgaWYgKHBFeHByRXZhbC0+R2V0VHlwZSgpICE9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcjo6VGV4dCkgewogICAgICAgICAgIHJlcG9ydEVycm9yKGNvbnRleHQsIHRoaXMtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLApAQCAtNjQsOCArNjMsNyBAQAogewogICBzdGQ6OnN0cmluZyBpZGVudGlmaWVyOwogICB7Ci0gICAgZm9yIChjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqIHBFeHByRXZhbCA6Ci0gICAgICAgICB0aGlzLT5JZGVudGlmaWVyQ2hpbGRyZW4pIHsKKyAgICBmb3IgKGF1dG8mIHBFeHByRXZhbCA6IHRoaXMtPklkZW50aWZpZXJDaGlsZHJlbikgewogICAgICAgaWRlbnRpZmllciArPSBwRXhwckV2YWwtPkV2YWx1YXRlKGNvbnRleHQsIGRhZ0NoZWNrZXIpOwogICAgICAgaWYgKGNvbnRleHQtPkhhZEVycm9yKSB7CiAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpAQCAtMTI2LDcgKzEyNCw3IEBACiAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgcGFyYW1ldGVyOwotICAgICAgZm9yIChjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqIHBFeHByRXZhbCA6ICpwaXQpIHsKKyAgICAgIGZvciAoYXV0byYgcEV4cHJFdmFsIDogKnBpdCkgewogICAgICAgICBwYXJhbWV0ZXIgKz0gcEV4cHJFdmFsLT5FdmFsdWF0ZShjb250ZXh0LCBkYWdDaGVja2VyKTsKICAgICAgICAgaWYgKGNvbnRleHQtPkhhZEVycm9yKSB7CiAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0xNzQsMTAgKzE3MiwzIEBACiAgIH0KICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiB9Ci0KLUdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50Ojp+R2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQoKQotewotICBjbURlbGV0ZUFsbCh0aGlzLT5JZGVudGlmaWVyQ2hpbGRyZW4pOwotICBzdGQ6OmZvcl9lYWNoKHRoaXMtPlBhcmFtQ2hpbGRyZW4uYmVnaW4oKSwgdGhpcy0+UGFyYW1DaGlsZHJlbi5lbmQoKSwKLSAgICAgICAgICAgICAgICBjbURlbGV0ZUFsbDxzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqPj4pOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5oIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5oCmluZGV4IGIxMGJiNWIuLjEwNDk2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTM2LDYgKzM3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKikgY29uc3QgPSAwOwogfTsKIAordXNpbmcgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yID0KKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcj4+OworCiBzdHJ1Y3QgVGV4dENvbnRlbnQgOiBwdWJsaWMgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yCiB7CiAgIFRleHRDb250ZW50KGNvbnN0IGNoYXIqIHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQpAQCAtNjgsMTMgKzcyLDEzIEBACiB7CiAgIEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KGNvbnN0IGNoYXIqIHN0YXJ0Q29udGVudCwgc2l6ZV90IGxlbmd0aCk7CiAKLSAgdm9pZCBTZXRJZGVudGlmaWVyKHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+IGlkZW50aWZpZXIpCisgIHZvaWQgU2V0SWRlbnRpZmllcihjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3ImJiBpZGVudGlmaWVyKQogICB7CiAgICAgdGhpcy0+SWRlbnRpZmllckNoaWxkcmVuID0gc3RkOjptb3ZlKGlkZW50aWZpZXIpOwogICB9CiAKICAgdm9pZCBTZXRQYXJhbWV0ZXJzKAotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+PiBwYXJhbWV0ZXJzKQorICAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj4mJiBwYXJhbWV0ZXJzKQogICB7CiAgICAgdGhpcy0+UGFyYW1DaGlsZHJlbiA9IHN0ZDo6bW92ZShwYXJhbWV0ZXJzKTsKICAgfQpAQCAtMTAyLDEyICsxMDYsMTIgQEAKICAgICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlKiBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllciwKICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0LAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4+Ojpjb25zdF9pdGVyYXRvcgotICAgICAgcGl0KSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3I+Ojpjb25zdF9pdGVyYXRvciBwaXQpCisgICAgY29uc3Q7CiAKIHByaXZhdGU6Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+IElkZW50aWZpZXJDaGlsZHJlbjsKLSAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4+IFBhcmFtQ2hpbGRyZW47CisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciBJZGVudGlmaWVyQ2hpbGRyZW47CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj4gUGFyYW1DaGlsZHJlbjsKICAgY29uc3QgY2hhciogU3RhcnRDb250ZW50OwogICBzaXplX3QgQ29udGVudExlbmd0aDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZS5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZS5jeHgKaW5kZXggNjZmMWM3MS4uYzBkYjkwZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbk5vZGUuY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlLmN4eApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKICNpbmNsdWRlICJjbXN5cy9TdHJpbmcuaCIKQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCi0jaW5jbHVkZSAiY21TdHJpbmcuaHh4IgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgpAQCAtNjIsNiArNjIsOSBAQAogICBpZiAoY2dlLT5HZXRIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKICAgICBjb250ZXh0LT5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKICAgfQorICBpZiAoY2dlLT5HZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKSkgeworICAgIGNvbnRleHQtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTA3LDggKzkxMCw4IEBACiAgICAgICBjb25zdCBjaGFyKiBsb2MgPSBudWxscHRyOwogICAgICAgY29uc3QgY2hhciogaW1wID0gbnVsbHB0cjsKICAgICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKLSAgICAgIGlmIChjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZygKLSAgICAgICAgICAgIGNvbnRleHQtPkNvbmZpZywgJmxvYywgJmltcCwgc3VmZml4KSkgeworICAgICAgaWYgKGNvbnRleHQtPkN1cnJlbnRUYXJnZXQtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGNvbnRleHQtPkNvbmZpZywgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcCwgc3VmZml4KSkgewogICAgICAgICAvLyBUaGlzIGltcG9ydGVkIHRhcmdldCBoYXMgYW4gYXBwcm9wcmlhdGUgbG9jYXRpb24KICAgICAgICAgLy8gZm9yIHRoaXMgKHBvc3NpYmx5IG1hcHBlZCkgY29uZmlnLgogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHByb3BlciBjb25maWcgbWFwcGluZyBmb3IgdGhlIHRlc3RlZCBjb25maWcuCkBAIC0xMDM5LDYgKzEwNDIsMTUwIEBACiAgIH0KIH0gbGFuZ3VhZ2VBbmRJZE5vZGU7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgTGlua0xhbmd1YWdlTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIExpbmtMYW5ndWFnZU5vZGUoKSB7fSAvLyBOT0xJTlQobW9kZXJuaXplLXVzZS1lcXVhbHMtZGVmYXVsdCkKKworICBpbnQgTnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gWmVyb09yTW9yZVBhcmFtZXRlcnM7IH0KKworICBzdGQ6OnN0cmluZyBFdmFsdWF0ZSgKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHBhcmFtZXRlcnMsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudCogY29udGVudCwKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgaWYgKCFjb250ZXh0LT5IZWFkVGFyZ2V0IHx8ICFkYWdDaGVja2VyIHx8CisgICAgICAgICEoZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtFeHByZXNzaW9uKCkgfHwKKyAgICAgICAgICBkYWdDaGVja2VyLT5FdmFsdWF0aW5nTGlua0xpYnJhcmllcygpKSkgeworICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAiJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzICIKKyAgICAgICAgICAgICAgICAgICJ0byBzcGVjaWZ5IGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgIgorICAgICAgICAgICAgICAgICAgImFuZCBsaW5rIGRlcGVuZHMuIik7CisgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkgJiYgcGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXBvcnRFcnJvcigKKyAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICIkPExJTktfTEFOR1VBR0U+IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGluayBsaWJyYXJpZXMgZXhwcmVzc2lvbi4iKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IGNvbnRleHQtPkxHLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKKyAgICBzdGQ6OnN0cmluZyBnZW5OYW1lID0gZ2ctPkdldE5hbWUoKTsKKyAgICBpZiAoZ2VuTmFtZS5maW5kKCJNYWtlZmlsZXMiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIk5pbmphIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJWaXN1YWwgU3R1ZGlvIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJYY29kZSIpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgIGdlbk5hbWUuZmluZCgiV2F0Y29tIFdNYWtlIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHJlcG9ydEVycm9yKGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgIiQ8TElOS19MQU5HVUFHRTouLi4+IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZ2VuZXJhdG9yLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkpIHsKKyAgICAgIGNvbnRleHQtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgICAgY29udGV4dC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gY29udGV4dC0+TGFuZ3VhZ2U7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIGlmIChjb250ZXh0LT5MYW5ndWFnZSA9PSBwYXJhbSkgeworICAgICAgICByZXR1cm4gIjEiOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIjAiOworICB9Cit9IGxpbmtMYW5ndWFnZU5vZGU7CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgTGlua2VySWQKK3sKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudCogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQorICB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpbmtlcklkID0KKyAgICAgIGNvbnRleHQtPkxHLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ09NUElMRVJfSUQiKTsKKyAgICBpZiAocGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gbGlua2VySWQ7CisgICAgfQorICAgIGlmIChsaW5rZXJJZC5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gcGFyYW1ldGVycy5mcm9udCgpLmVtcHR5KCkgPyAiMSIgOiAiMCI7CisgICAgfQorICAgIHN0YXRpYyBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gbGlua2VySWRWYWxpZGF0b3IoIl5bQS1aYS16MC05X10qJCIpOworCisgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIGlmICghbGlua2VySWRWYWxpZGF0b3IuZmluZChwYXJhbSkpIHsKKyAgICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICJFeHByZXNzaW9uIHN5bnRheCBub3QgcmVjb2duaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIGlmIChwYXJhbSA9PSBsaW5rZXJJZCkgeworICAgICAgICByZXR1cm4gIjEiOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIjAiOworICB9Cit9OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IExpbmtMYW5ndWFnZUFuZElkTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIExpbmtMYW5ndWFnZUFuZElkTm9kZSgpIHt9IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWVxdWFscy1kZWZhdWx0KQorCisgIGludCBOdW1FeHBlY3RlZFBhcmFtZXRlcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBUd29Pck1vcmVQYXJhbWV0ZXJzOyB9CisKKyAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCAhZGFnQ2hlY2tlciB8fAorICAgICAgICAhKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rRXhwcmVzc2lvbigpIHx8CisgICAgICAgICAgZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoKSkpIHsKKyAgICAgIHJlcG9ydEVycm9yKAorICAgICAgICBjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKKyAgICAgICAgIiQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgIgorICAgICAgICAidG8gc3BlY2lmeSBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayAiCisgICAgICAgICJkZXBlbmRzLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gY29udGV4dC0+TEctPkdldEdsb2JhbEdlbmVyYXRvcigpOworICAgIHN0ZDo6c3RyaW5nIGdlbk5hbWUgPSBnZy0+R2V0TmFtZSgpOworICAgIGlmIChnZW5OYW1lLmZpbmQoIk1ha2VmaWxlcyIpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgIGdlbk5hbWUuZmluZCgiTmluamEiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIlZpc3VhbCBTdHVkaW8iKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIlhjb2RlIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJXYXRjb20gV01ha2UiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgcmVwb3J0RXJyb3IoCisgICAgICAgIGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLAorICAgICAgICAiJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZ2VuZXJhdG9yLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkpIHsKKyAgICAgIGNvbnRleHQtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgICAgY29udGV4dC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZyA9IGNvbnRleHQtPkxhbmd1YWdlOworICAgIGlmIChsYW5nID09IHBhcmFtZXRlcnMuZnJvbnQoKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGlkUGFyYW1ldGVyKChwYXJhbWV0ZXJzLmNiZWdpbigpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5jZW5kKCkpOworICAgICAgcmV0dXJuIExpbmtlcklkOjpFdmFsdWF0ZShpZFBhcmFtZXRlciwgY29udGV4dCwgY29udGVudCwgbGFuZyk7CisgICAgfQorICAgIHJldHVybiAiMCI7CisgIH0KK30gbGlua0xhbmd1YWdlQW5kSWROb2RlOworCiBzdGQ6OnN0cmluZyBnZXRMaW5rZWRUYXJnZXRzQ29udGVudCgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCkBAIC0xNDIxLDcgKzE1NjgsNyBAQAogICAgICAgY29uc3QgY2hhciogbG9jID0gbnVsbHB0cjsKICAgICAgIGNvbnN0IGNoYXIqIGltcCA9IG51bGxwdHI7CiAgICAgICBzdGQ6OnN0cmluZyBzdWZmaXg7Ci0gICAgICBpZiAoZ3QtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGNvbnRleHQtPkNvbmZpZywgJmxvYywgJmltcCwgc3VmZml4KSkgeworICAgICAgaWYgKGd0LT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZyhjb250ZXh0LT5Db25maWcsIGxvYywgaW1wLCBzdWZmaXgpKSB7CiAgICAgICAgIGNtRXhwYW5kTGlzdChsb2MsIG9iamVjdHMpOwogICAgICAgfQogICAgICAgY29udGV4dC0+SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CkBAIC0yMzE0LDYgKzI0NjEsOCBAQAogICAgIHsgIkxJTktfT05MWSIsICZsaW5rT25seU5vZGUgfSwKICAgICB7ICJDT01QSUxFX0xBTkdfQU5EX0lEIiwgJmxhbmd1YWdlQW5kSWROb2RlIH0sCiAgICAgeyAiQ09NUElMRV9MQU5HVUFHRSIsICZsYW5ndWFnZU5vZGUgfSwKKyAgICB7ICJMSU5LX0xBTkdfQU5EX0lEIiwgJmxpbmtMYW5ndWFnZUFuZElkTm9kZSB9LAorICAgIHsgIkxJTktfTEFOR1VBR0UiLCAmbGlua0xhbmd1YWdlTm9kZSB9LAogICAgIHsgIlNIRUxMX1BBVEgiLCAmc2hlbGxQYXRoTm9kZSB9CiAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXIuY3h4IGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5jeHgKaW5kZXggZDZjYzZhYi4uYzJjOWVmNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5jeHgKQEAgLTYsNyArNiwxMCBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvbWVtb3J5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmgiCiAKIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcjo6Y21HZW5lcmF0b3JFeHByZXNzaW9uUGFyc2VyKApAQCAtMTcsNyArMjAsNyBAQAogfQogCiB2b2lkIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcjo6UGFyc2UoCi0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+JiByZXN1bHQpCisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0KQogewogICBpdCA9IHRoaXMtPlRva2Vucy5iZWdpbigpOwogCkBAIC0yNyw0MCArMzAsMzggQEAKIH0KIAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dCgKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mIHJlc3VsdCwKKyAgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yJiByZXN1bHQsCiAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuPjo6Y29uc3RfaXRlcmF0b3IgaXQpCiB7CiAgIGlmICghcmVzdWx0LmVtcHR5KCkgJiYKICAgICAgICgqKHJlc3VsdC5lbmQoKSAtIDEpKS0+R2V0VHlwZSgpID09CiAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcjo6VGV4dCkgewotICAgIFRleHRDb250ZW50KiB0ZXh0Q29udGVudCA9IHN0YXRpY19jYXN0PFRleHRDb250ZW50Kj4oKihyZXN1bHQuZW5kKCkgLSAxKSk7Ci0gICAgdGV4dENvbnRlbnQtPkV4dGVuZChpdC0+TGVuZ3RoKTsKKyAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PFRleHRDb250ZW50PigqKHJlc3VsdC5lbmQoKSAtIDEpKQorICAgICAgLkV4dGVuZChpdC0+TGVuZ3RoKTsKICAgfSBlbHNlIHsKLSAgICBUZXh0Q29udGVudCogdGV4dENvbnRlbnQgPSBuZXcgVGV4dENvbnRlbnQoaXQtPkNvbnRlbnQsIGl0LT5MZW5ndGgpOwotICAgIHJlc3VsdC5wdXNoX2JhY2sodGV4dENvbnRlbnQpOworICAgIGF1dG8gdGV4dENvbnRlbnQgPSBjbTo6bWFrZV91bmlxdWU8VGV4dENvbnRlbnQ+KGl0LT5Db250ZW50LCBpdC0+TGVuZ3RoKTsKKyAgICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZSh0ZXh0Q29udGVudCkpOwogICB9CiB9CiAKIHN0YXRpYyB2b2lkIGV4dGVuZFJlc3VsdCgKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mIHJlc3VsdCwKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mIGNvbnRlbnRzKQorICBjbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXI6OmNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0LAorICBjbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXI6OmNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYmIGNvbnRlbnRzKQogewogICBpZiAoIXJlc3VsdC5lbXB0eSgpICYmCiAgICAgICAoKihyZXN1bHQuZW5kKCkgLSAxKSktPkdldFR5cGUoKSA9PQogICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I6OlRleHQgJiYKICAgICAgIGNvbnRlbnRzLmZyb250KCktPkdldFR5cGUoKSA9PSBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I6OlRleHQpIHsKLSAgICBUZXh0Q29udGVudCogdGV4dENvbnRlbnQgPSBzdGF0aWNfY2FzdDxUZXh0Q29udGVudCo+KCoocmVzdWx0LmVuZCgpIC0gMSkpOwotICAgIHRleHRDb250ZW50LT5FeHRlbmQoCi0gICAgICBzdGF0aWNfY2FzdDxUZXh0Q29udGVudCo+KGNvbnRlbnRzLmZyb250KCkpLT5HZXRMZW5ndGgoKSk7Ci0gICAgZGVsZXRlIGNvbnRlbnRzLmZyb250KCk7Ci0gICAgY21BcHBlbmQocmVzdWx0LCBjb250ZW50cy5iZWdpbigpICsgMSwgY29udGVudHMuZW5kKCkpOwotICB9IGVsc2UgewotICAgIGNtQXBwZW5kKHJlc3VsdCwgY29udGVudHMpOworICAgIGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8VGV4dENvbnRlbnQ+KCoocmVzdWx0LmVuZCgpIC0gMSkpCisgICAgICAuRXh0ZW5kKAorICAgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PFRleHRDb250ZW50Pihjb250ZW50cy5mcm9udCgpKS5HZXRMZW5ndGgoKSk7CisgICAgY29udGVudHMuZXJhc2UoY29udGVudHMuYmVnaW4oKSk7CiAgIH0KKyAgY206OmFwcGVuZChyZXN1bHQsIHN0ZDo6bW92ZShjb250ZW50cykpOwogfQogCiB2b2lkIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcjo6UGFyc2VHZW5lcmF0b3JFeHByZXNzaW9uKAotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqPiYgcmVzdWx0KQorICBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3ImIHJlc3VsdCkKIHsKICAgYXNzZXJ0KHRoaXMtPml0ICE9IHRoaXMtPlRva2Vucy5lbmQoKSk7CiAgIHVuc2lnbmVkIGludCBuZXN0ZWRMZXZlbCA9IHRoaXMtPk5lc3RpbmdMZXZlbDsKQEAgLTY4LDcgKzY5LDcgQEAKIAogICBhdXRvIHN0YXJ0VG9rZW4gPSB0aGlzLT5pdCAtIDE7CiAKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4gaWRlbnRpZmllcjsKKyAgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yIGlkZW50aWZpZXI7CiAgIHdoaWxlICh0aGlzLT5pdC0+VG9rZW5UeXBlICE9IGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuOjpFbmRFeHByZXNzaW9uICYmCiAgICAgICAgICB0aGlzLT5pdC0+VG9rZW5UeXBlICE9IGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuOjpDb2xvblNlcGFyYXRvcikgewogICAgIGlmICh0aGlzLT5pdC0+VG9rZW5UeXBlID09IGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuOjpDb21tYVNlcGFyYXRvcikgewpAQCAtODcsMTggKzg4LDE4IEBACiAKICAgaWYgKHRoaXMtPml0ICE9IHRoaXMtPlRva2Vucy5lbmQoKSAmJgogICAgICAgdGhpcy0+aXQtPlRva2VuVHlwZSA9PSBjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbjo6RW5kRXhwcmVzc2lvbikgewotICAgIEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KiBjb250ZW50ID0gbmV3IEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KAorICAgIGF1dG8gY29udGVudCA9IGNtOjptYWtlX3VuaXF1ZTxHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudD4oCiAgICAgICBzdGFydFRva2VuLT5Db250ZW50LAogICAgICAgdGhpcy0+aXQtPkNvbnRlbnQgLSBzdGFydFRva2VuLT5Db250ZW50ICsgdGhpcy0+aXQtPkxlbmd0aCk7CiAgICAgYXNzZXJ0KHRoaXMtPml0ICE9IHRoaXMtPlRva2Vucy5lbmQoKSk7CiAgICAgKyt0aGlzLT5pdDsKICAgICAtLXRoaXMtPk5lc3RpbmdMZXZlbDsKICAgICBjb250ZW50LT5TZXRJZGVudGlmaWVyKHN0ZDo6bW92ZShpZGVudGlmaWVyKSk7Ci0gICAgcmVzdWx0LnB1c2hfYmFjayhjb250ZW50KTsKKyAgICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZShjb250ZW50KSk7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4+IHBhcmFtZXRlcnM7CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj4gcGFyYW1ldGVyczsKICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uVG9rZW4+Ojpjb25zdF9pdGVyYXRvcj4KICAgICBjb21tYVRva2VuczsKICAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uVG9rZW4+Ojpjb25zdF9pdGVyYXRvciBjb2xvblRva2VuOwpAQCAtMTY5LDcgKzE3MCw3IEBACiAgICAgLy8gdHJlYXQgdGhlICckPCcgYXMgaGF2aW5nIGJlZW4gcGxhaW4gdGV4dCwgYWxvbmcgd2l0aCB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5nIDogYW5kICwgdG9rZW5zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGZvdW5kLgogICAgIGV4dGVuZFRleHQocmVzdWx0LCBzdGFydFRva2VuKTsKLSAgICBleHRlbmRSZXN1bHQocmVzdWx0LCBpZGVudGlmaWVyKTsKKyAgICBleHRlbmRSZXN1bHQocmVzdWx0LCBzdGQ6Om1vdmUoaWRlbnRpZmllcikpOwogICAgIGlmICghcGFyYW1ldGVycy5lbXB0eSgpKSB7CiAgICAgICBleHRlbmRUZXh0KHJlc3VsdCwgY29sb25Ub2tlbik7CiAKQEAgLTE3OSw3ICsxODAsNyBAQAogICAgICAgYXNzZXJ0KHBhcmFtZXRlcnMuc2l6ZSgpID4gY29tbWFUb2tlbnMuc2l6ZSgpKTsKICAgICAgIGZvciAoOyBwaXQgIT0gcGVuZDsgKytwaXQsICsrY29tbWFJdCkgewogICAgICAgICBpZiAoIXBpdC0+ZW1wdHkoKSAmJiAhZW1wdHlQYXJhbVRlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgZXh0ZW5kUmVzdWx0KHJlc3VsdCwgKnBpdCk7CisgICAgICAgICAgZXh0ZW5kUmVzdWx0KHJlc3VsdCwgc3RkOjptb3ZlKCpwaXQpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY29tbWFJdCAhPSBjb21tYVRva2Vucy5lbmQoKSkgewogICAgICAgICAgIGV4dGVuZFRleHQocmVzdWx0LCAqY29tbWFJdCk7CkBAIC0xOTMsMTUgKzE5NCwxNSBAQAogCiAgIHNpemVfdCBjb250ZW50TGVuZ3RoID0KICAgICAoKHRoaXMtPml0IC0gMSktPkNvbnRlbnQgLSBzdGFydFRva2VuLT5Db250ZW50KSArICh0aGlzLT5pdCAtIDEpLT5MZW5ndGg7Ci0gIEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KiBjb250ZW50ID0KLSAgICBuZXcgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQoc3RhcnRUb2tlbi0+Q29udGVudCwgY29udGVudExlbmd0aCk7CisgIGF1dG8gY29udGVudCA9IGNtOjptYWtlX3VuaXF1ZTxHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudD4oCisgICAgc3RhcnRUb2tlbi0+Q29udGVudCwgY29udGVudExlbmd0aCk7CiAgIGNvbnRlbnQtPlNldElkZW50aWZpZXIoc3RkOjptb3ZlKGlkZW50aWZpZXIpKTsKICAgY29udGVudC0+U2V0UGFyYW1ldGVycyhzdGQ6Om1vdmUocGFyYW1ldGVycykpOwotICByZXN1bHQucHVzaF9iYWNrKGNvbnRlbnQpOworICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZShjb250ZW50KSk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JFeHByZXNzaW9uUGFyc2VyOjpQYXJzZUNvbnRlbnQoCi0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+JiByZXN1bHQpCisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0KQogewogICBhc3NlcnQodGhpcy0+aXQgIT0gdGhpcy0+VG9rZW5zLmVuZCgpKTsKICAgc3dpdGNoICh0aGlzLT5pdC0+VG9rZW5UeXBlKSB7CkBAIC0yMTMsMTcgKzIxNCwxNiBAQAogICAgICAgICAgIC8vIEEgY29tbWEgaW4gJ3BsYWluIHRleHQnIGNvdWxkIGhhdmUgc3BsaXQgdGV4dCB0aGF0IHNob3VsZAogICAgICAgICAgIC8vIG90aGVyd2lzZSBiZSBjb250aW51b3VzLiBFeHRlbmQgdGhlIGxhc3QgdGV4dCBjb250ZW50IGluc3RlYWQgb2YKICAgICAgICAgICAvLyBjcmVhdGluZyBhIG5ldyBvbmUuCi0gICAgICAgICAgVGV4dENvbnRlbnQqIHRleHRDb250ZW50ID0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHRDb250ZW50Kj4oKihyZXN1bHQuZW5kKCkgLSAxKSk7Ci0gICAgICAgICAgdGV4dENvbnRlbnQtPkV4dGVuZCh0aGlzLT5pdC0+TGVuZ3RoKTsKKyAgICAgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PFRleHRDb250ZW50PigqKHJlc3VsdC5lbmQoKSAtIDEpKQorICAgICAgICAgICAgLkV4dGVuZCh0aGlzLT5pdC0+TGVuZ3RoKTsKICAgICAgICAgICBhc3NlcnQodGhpcy0+aXQgIT0gdGhpcy0+VG9rZW5zLmVuZCgpKTsKICAgICAgICAgICArK3RoaXMtPml0OwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgfQotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKiBuID0KLSAgICAgICAgbmV3IFRleHRDb250ZW50KHRoaXMtPml0LT5Db250ZW50LCB0aGlzLT5pdC0+TGVuZ3RoKTsKLSAgICAgIHJlc3VsdC5wdXNoX2JhY2sobik7CisgICAgICBhdXRvIG4gPQorICAgICAgICBjbTo6bWFrZV91bmlxdWU8VGV4dENvbnRlbnQ+KHRoaXMtPml0LT5Db250ZW50LCB0aGlzLT5pdC0+TGVuZ3RoKTsKKyAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RkOjptb3ZlKG4pKTsKICAgICAgIGFzc2VydCh0aGlzLT5pdCAhPSB0aGlzLT5Ub2tlbnMuZW5kKCkpOwogICAgICAgKyt0aGlzLT5pdDsKICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXIuaCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXIuaAppbmRleCBlNjYzNDk2Li4xYmExNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uUGFyc2VyLmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25MZXhlci5oIgpAQCAtMTUsMTEgKzE2LDE0IEBACiB7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcihzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbj4gdG9rZW5zKTsKIAotICB2b2lkIFBhcnNlKHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+JiByZXN1bHQpOworICB1c2luZyBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3IgPQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I+PjsKKworICB2b2lkIFBhcnNlKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0KTsKIAogcHJpdmF0ZToKLSAgdm9pZCBQYXJzZUNvbnRlbnQoc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mKTsKLSAgdm9pZCBQYXJzZUdlbmVyYXRvckV4cHJlc3Npb24oc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mKTsKKyAgdm9pZCBQYXJzZUNvbnRlbnQoY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yJik7CisgIHZvaWQgUGFyc2VHZW5lcmF0b3JFeHByZXNzaW9uKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYpOwogCiBwcml2YXRlOgogICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbj46OmNvbnN0X2l0ZXJhdG9yIGl0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvclRhcmdldC5jeHgKaW5kZXggMTcxYzNlZC4uZTcyMjAzNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuY3h4CkBAIC0xMCwxNCArMTAsMTQgQEAKICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi0jaW5jbHVkZSA8cXVldWU+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kTGluZXMuaCIKKyNpbmNsdWRlICJjbUZpbGVUaW1lcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaCIKQEAgLTUxLDE1ICs1MiwxNSBAQAogY2xhc3MgY21NZXNzZW5nZXI7CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFNvdXJjZXM8Y21HZW5lcmF0b3JUYXJnZXQ+KAorY21Qcm9wIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0U291cmNlczxjbUdlbmVyYXRvclRhcmdldD4oCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsIGNtTWVzc2VuZ2VyKiAvKiBtZXNzZW5nZXIgKi8sCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIC8qIGNvbnRleHQgKi8pCiB7Ci0gIHJldHVybiB0Z3QtPkdldFNvdXJjZXNQcm9wZXJ0eSgpOworICByZXR1cm4gJnRndC0+R2V0U291cmNlc1Byb3BlcnR5KCk7CiB9CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKgorY29uc3Qgc3RkOjpzdHJpbmcmCiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkNvbXB1dGVMb2NhdGlvbkZvckJ1aWxkPGNtR2VuZXJhdG9yVGFyZ2V0PigKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCkKIHsKQEAgLTY3LDcgKzY4LDggQEAKIH0KIAogdGVtcGxhdGUgPD4KLWNvbnN0IGNoYXIqIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6Q29tcHV0ZUxvY2F0aW9uPGNtR2VuZXJhdG9yVGFyZ2V0PigKK2NvbnN0IHN0ZDo6c3RyaW5nJgorY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpDb21wdXRlTG9jYXRpb248Y21HZW5lcmF0b3JUYXJnZXQ+KAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICByZXR1cm4gdGd0LT5HZXRMb2NhdGlvbihjb25maWcpOwpAQCAtMTYyLDcgKzE2NCw4IEBACiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgQmFja3RyYWNlOwogfTsKIAotY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnkqIENyZWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCitzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+CitDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAogICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBiYWNrdHJhY2UgPSBjbUxpc3RGaWxlQmFja3RyYWNlKCksCiAgIGJvb2wgZXZhbHVhdGVGb3JCdWlsZHN5c3RlbSA9IGZhbHNlKQpAQCAtMTcyLDE1ICsxNzUsMTggQEAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9CiAgICAgICBnZS5QYXJzZShwcm9wZXJ0eVZhbHVlKTsKICAgICBjZ2UtPlNldEV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0oZXZhbHVhdGVGb3JCdWlsZHN5c3RlbSk7Ci0gICAgcmV0dXJuIG5ldyBUYXJnZXRQcm9wZXJ0eUVudHJ5R2VuZXgoc3RkOjptb3ZlKGNnZSkpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+KAorICAgICAgY206Om1ha2VfdW5pcXVlPFRhcmdldFByb3BlcnR5RW50cnlHZW5leD4oc3RkOjptb3ZlKGNnZSkpKTsKICAgfQogCi0gIHJldHVybiBuZXcgVGFyZ2V0UHJvcGVydHlFbnRyeVN0cmluZyhwcm9wZXJ0eVZhbHVlLCBzdGQ6Om1vdmUoYmFja3RyYWNlKSk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxUYXJnZXRQcm9wZXJ0eUVudHJ5U3RyaW5nPihwcm9wZXJ0eVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoYmFja3RyYWNlKSkpOwogfQogCiB2b2lkIENyZWF0ZVByb3BlcnR5R2VuZXJhdG9yRXhwcmVzc2lvbnMoCiAgIGNtU3RyaW5nUmFuZ2UgZW50cmllcywgY21CYWNrdHJhY2VSYW5nZSBiYWNrdHJhY2VzLAotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldDo6VGFyZ2V0UHJvcGVydHlFbnRyeSo+JiBpdGVtcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0OjpUYXJnZXRQcm9wZXJ0eUVudHJ5Pj4mIGl0ZW1zLAogICBib29sIGV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0gPSBmYWxzZSkKIHsKICAgYXV0byBidEl0ID0gYmFja3RyYWNlcy5iZWdpbigpOwpAQCAtMjE5LDEzICsyMjUsMTMgQEAKIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGhpc1RhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gIGNtR2VuZXJhdG9yVGFyZ2V0OjpUYXJnZXRQcm9wZXJ0eUVudHJ5KiBlbnRyeSkKKyAgY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnkmIGVudHJ5KQogewotICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGVlKGVudHJ5LT5MaW5rSW1wbEl0ZW0sIGVudHJ5LT5HZXRCYWNrdHJhY2UoKSk7Ci0gIGNtRXhwYW5kTGlzdChlbnRyeS0+RXZhbHVhdGUodGhpc1RhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNUYXJnZXQsIGRhZ0NoZWNrZXIsIGxhbmcpLAorICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGVlKGVudHJ5LkxpbmtJbXBsSXRlbSwgZW50cnkuR2V0QmFja3RyYWNlKCkpOworICBjbUV4cGFuZExpc3QoZW50cnkuRXZhbHVhdGUodGhpc1RhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1RhcmdldCwgZGFnQ2hlY2tlciwgbGFuZyksCiAgICAgICAgICAgICAgICBlZS5WYWx1ZXMpOwotICBpZiAoZW50cnktPkdldEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oKSkgeworICBpZiAoZW50cnkuR2V0SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CiAgICAgZWUuQ29udGV4dERlcGVuZGVudCA9IHRydWU7CiAgIH0KICAgcmV0dXJuIGVlOwpAQCAtMjM0LDEzICsyNDAsMTQgQEAKIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGhpc1RhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0OjpUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gY29uc3QmIGluKQorICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+PiBjb25zdCYKKyAgICBpbikKIHsKICAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gb3V0OwogICBvdXQucmVzZXJ2ZShpbi5zaXplKCkpOwotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0OjpUYXJnZXRQcm9wZXJ0eUVudHJ5KiBlbnRyeSA6IGluKSB7CisgIGZvciAoYXV0byYgZW50cnkgOiBpbikgewogICAgIG91dC5lbXBsYWNlX2JhY2soRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KHRoaXNUYXJnZXQsIGNvbmZpZywgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYWdDaGVja2VyLCBlbnRyeSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhZ0NoZWNrZXIsICplbnRyeSkpOwogICB9CiAgIHJldHVybiBvdXQ7CiB9CkBAIC0zMDIsMzEgKzMwOSwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlNvdXJjZUVudHJpZXMsIHRydWUpOwogCiAgIHRoaXMtPlBvbGljeU1hcCA9IHQtPkdldFBvbGljeU1hcCgpOworCisgIC8vIEdldCBoYXJkLWNvZGVkIGxpbmtlciBsYW5ndWFnZQorICBpZiAodGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiSEFTX0NYWCIpKSB7CisgICAgdGhpcy0+TGlua2VyTGFuZ3VhZ2UgPSAiQ1hYIjsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLT5MaW5rZXJMYW5ndWFnZSA9IHRoaXMtPlRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJMSU5LRVJfTEFOR1VBR0UiKTsKKyAgfQogfQogCi1jbUdlbmVyYXRvclRhcmdldDo6fmNtR2VuZXJhdG9yVGFyZ2V0KCkKLXsKLSAgY21EZWxldGVBbGwodGhpcy0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkNvbXBpbGVPcHRpb25zRW50cmllcyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Db21waWxlRGVmaW5pdGlvbnNFbnRyaWVzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+TGlua09wdGlvbnNFbnRyaWVzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+TGlua0RpcmVjdG9yaWVzRW50cmllcyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPlByZWNvbXBpbGVIZWFkZXJzRW50cmllcyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPlNvdXJjZUVudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5MaW5rSW5mb3JtYXRpb24pOwotfQorY21HZW5lcmF0b3JUYXJnZXQ6On5jbUdlbmVyYXRvclRhcmdldCgpID0gZGVmYXVsdDsKIAotY29uc3QgY2hhciogY21HZW5lcmF0b3JUYXJnZXQ6OkdldFNvdXJjZXNQcm9wZXJ0eSgpIGNvbnN0Citjb25zdCBzdGQ6OnN0cmluZyYgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFNvdXJjZXNQcm9wZXJ0eSgpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2YWx1ZXM7Ci0gIGZvciAoVGFyZ2V0UHJvcGVydHlFbnRyeSogc2UgOiB0aGlzLT5Tb3VyY2VFbnRyaWVzKSB7CisgIGZvciAoYXV0byYgc2UgOiB0aGlzLT5Tb3VyY2VFbnRyaWVzKSB7CiAgICAgdmFsdWVzLnB1c2hfYmFjayhzZS0+R2V0SW5wdXQoKSk7CiAgIH0KICAgc3RhdGljIHN0ZDo6c3RyaW5nIHZhbHVlOwogICB2YWx1ZS5jbGVhcigpOwogICB2YWx1ZSA9IGNtSm9pbih2YWx1ZXMsICI7Iik7Ci0gIHJldHVybiB2YWx1ZS5jX3N0cigpOworICByZXR1cm4gdmFsdWU7CiB9CiAKIGNtR2xvYmFsR2VuZXJhdG9yKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0R2xvYmFsR2VuZXJhdG9yKCkgY29uc3QKQEAgLTM3Myw5ICszNzYsOSBAQAogICAgICAgICB0aGlzLT5HZXRCYWNrdHJhY2UoKSkpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQotICBpZiAoY29uc3QgY2hhciogcmVzdWx0ID0gY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpHZXRQcm9wZXJ0eSgKKyAgaWYgKGNtUHJvcCByZXN1bHQgPSBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFByb3BlcnR5KAogICAgICAgICB0aGlzLCBwcm9wLCB0aGlzLT5NYWtlZmlsZS0+R2V0TWVzc2VuZ2VyKCksIHRoaXMtPkdldEJhY2t0cmFjZSgpKSkgewotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC0+Y19zdHIoKTsKICAgfQogICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RmF0YWxFcnJvck9jY3VyZWQoKSkgewogICAgIHJldHVybiBudWxscHRyOwpAQCAtNTM2LDE1ICs1MzksNDMgQEAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRGaWxlUG9zdGZpeChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewogICBjb25zdCBjaGFyKiBwb3N0Zml4ID0gbnVsbHB0cjsKKyAgc3RkOjpzdHJpbmcgZnJhbWV3b3JrUG9zdGZpeDsKICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ1Byb3AgPQogICAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyksICJfUE9TVEZJWCIpOwogICAgIHBvc3RmaXggPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKTsKLSAgICAvLyBNYWMgYXBwbGljYXRpb24gYnVuZGxlcyBhbmQgZnJhbWV3b3JrcyBoYXZlIG5vIHBvc3RmaXguCisKKyAgICAvLyBNYWMgYXBwbGljYXRpb24gYnVuZGxlcyBhbmQgZnJhbWV3b3JrcyBoYXZlIG5vIHJlZ3VsYXIgcG9zdGZpeCBsaWtlCisgICAgLy8gbGlicmFyaWVzIGRvLgogICAgIGlmICghdGhpcy0+SXNJbXBvcnRlZCgpICYmIHBvc3RmaXggJiYKICAgICAgICAgKHRoaXMtPklzQXBwQnVuZGxlT25BcHBsZSgpIHx8IHRoaXMtPklzRnJhbWV3b3JrT25BcHBsZSgpKSkgewogICAgICAgcG9zdGZpeCA9IG51bGxwdHI7CiAgICAgfQorCisgICAgLy8gRnJhbWV3b3JrcyBjcmVhdGVkIGJ5IG11bHRpIGNvbmZpZyBnZW5lcmF0b3JzIGNhbiBoYXZlIGEgc3BlY2lhbAorICAgIC8vIGZyYW1ld29yayBwb3N0Zml4LgorICAgIGZyYW1ld29ya1Bvc3RmaXggPSBHZXRGcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXgoY29uZmlnKTsKKyAgICBpZiAoIWZyYW1ld29ya1Bvc3RmaXguZW1wdHkoKSkgeworICAgICAgcG9zdGZpeCA9IGZyYW1ld29ya1Bvc3RmaXguY19zdHIoKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHBvc3RmaXggPyBwb3N0Zml4IDogc3RkOjpzdHJpbmcoKTsKK30KKworc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeCgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgY29uc3QgY2hhciogcG9zdGZpeCA9IG51bGxwdHI7CisgIGlmICghY29uZmlnLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnN0cmluZyBjb25maWdQcm9wID0gY21TdHJDYXQoIkZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7CisgICAgcG9zdGZpeCA9IHRoaXMtPkdldFByb3BlcnR5KGNvbmZpZ1Byb3ApOworCisgICAgaWYgKCF0aGlzLT5Jc0ltcG9ydGVkKCkgJiYgcG9zdGZpeCAmJgorICAgICAgICAodGhpcy0+SXNGcmFtZXdvcmtPbkFwcGxlKCkgJiYKKyAgICAgICAgICFHZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSkgeworICAgICAgcG9zdGZpeCA9IG51bGxwdHI7CisgICAgfQogICB9CiAgIHJldHVybiBwb3N0Zml4ID8gcG9zdGZpeCA6IHN0ZDo6c3RyaW5nKCk7CiB9CkBAIC02NTUsNiArNjg2LDcgQEAKICAgdGhpcy0+S2luZGVkU291cmNlc01hcC5jbGVhcigpOwogICB0aGlzLT5MaW5rSW1wbGVtZW50YXRpb25MYW5ndWFnZUlzQ29udGV4dERlcGVuZGVudCA9IHRydWU7CiAgIHRoaXMtPk9iamVjdHMuY2xlYXIoKTsKKyAgdGhpcy0+VmlzaXRlZENvbmZpZ3NGb3JPYmplY3RzLmNsZWFyKCk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkFkZFNvdXJjZUNvbW1vbihjb25zdCBzdGQ6OnN0cmluZyYgc3JjLCBib29sIGJlZm9yZSkKQEAgLTc0NCw3ICs3NzYsNyBAQAogewogICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZE9iamVjdFNvdXJjZSk7CiAKLSAgaWYgKCF0aGlzLT5PYmplY3RzLmVtcHR5KCkpIHsKKyAgaWYgKHRoaXMtPlZpc2l0ZWRDb25maWdzRm9yT2JqZWN0cy5jb3VudChjb25maWcpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTc1MywxNiArNzg1LDE3IEBACiAgIH0KIAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29tcHV0ZU9iamVjdEZpbGVuYW1lcyh0aGlzLT5PYmplY3RzLCB0aGlzKTsKKyAgdGhpcy0+VmlzaXRlZENvbmZpZ3NGb3JPYmplY3RzLmluc2VydChjb25maWcpOwogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb21wdXRlT2JqZWN0TWFwcGluZygpCiB7Ci0gIGlmICghdGhpcy0+T2JqZWN0cy5lbXB0eSgpKSB7CisgIGF1dG8gY29uc3QmIGNvbmZpZ3MgPSB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY29uZmlnU2V0KGNvbmZpZ3MuYmVnaW4oKSwgY29uZmlncy5lbmQoKSk7CisgIGlmIChjb25maWdTZXQgPT0gdGhpcy0+VmlzaXRlZENvbmZpZ3NGb3JPYmplY3RzKSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlncykgewogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IHNvdXJjZUZpbGVzOwogICAgIHRoaXMtPkdldE9iamVjdFNvdXJjZXMoc291cmNlRmlsZXMsIGMpOwpAQCAtOTgyLDEzICsxMDE1LDE1IEBACiB7CiAgIGlmICghdGhpcy0+VXRpbGl0eUl0ZW1zRG9uZSkgewogICAgIHRoaXMtPlV0aWxpdHlJdGVtc0RvbmUgPSB0cnVlOwotICAgIHN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4gY29uc3QmIHV0aWxpdGllcyA9IHRoaXMtPkdldFV0aWxpdGllcygpOwotICAgIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBpIDogdXRpbGl0aWVzKSB7CisgICAgc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+IGNvbnN0JiB1dGlsaXRpZXMgPQorICAgICAgdGhpcy0+R2V0VXRpbGl0aWVzKCk7CisgICAgZm9yIChCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PiBjb25zdCYgaSA6IHV0aWxpdGllcykgewogICAgICAgaWYgKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9Ci0gICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RmluZEdlbmVyYXRvclRhcmdldFRvVXNlKGkuVmFsdWUpKSB7Ci0gICAgICAgIHRoaXMtPlV0aWxpdHlJdGVtcy5pbnNlcnQoY21MaW5rSXRlbShndCwgaS5CYWNrdHJhY2UpKTsKKyAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5GaW5kR2VuZXJhdG9yVGFyZ2V0VG9Vc2UoaS5WYWx1ZS5maXJzdCkpIHsKKyAgICAgICAgdGhpcy0+VXRpbGl0eUl0ZW1zLmluc2VydChjbUxpbmtJdGVtKGd0LCBpLlZhbHVlLnNlY29uZCwgaS5CYWNrdHJhY2UpKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMtPlV0aWxpdHlJdGVtcy5pbnNlcnQoY21MaW5rSXRlbShpLlZhbHVlLCBpLkJhY2t0cmFjZSkpOworICAgICAgICB0aGlzLT5VdGlsaXR5SXRlbXMuaW5zZXJ0KAorICAgICAgICAgIGNtTGlua0l0ZW0oaS5WYWx1ZS5maXJzdCwgaS5WYWx1ZS5zZWNvbmQsIGkuQmFja3RyYWNlKSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0xMDAxLDcgKzEwMzYsOCBAQAogICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZFhhbWwpOwogfQogCi1jb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb24oCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBsb2NhdGlvbjsKICAgaWYgKHRoaXMtPklzSW1wb3J0ZWQoKSkgewpAQCAtMTAxMCw3ICsxMDQ2LDcgQEAKICAgfSBlbHNlIHsKICAgICBsb2NhdGlvbiA9IHRoaXMtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpOwogICB9Ci0gIHJldHVybiBsb2NhdGlvbi5jX3N0cigpOworICByZXR1cm4gbG9jYXRpb247CiB9CiAKIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQcmVCdWlsZENvbW1hbmRzKCkKQEAgLTEwNDEsMTMgKzEwNzcsMTMgQEAKICAgcmV0dXJuIHRoaXMtPlRhcmdldC0+SXNJbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSgpOwogfQogCi1jb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb25Gb3JCdWlsZCgpIGNvbnN0Citjb25zdCBzdGQ6OnN0cmluZyYgY21HZW5lcmF0b3JUYXJnZXQ6OkdldExvY2F0aW9uRm9yQnVpbGQoKSBjb25zdAogewogICBzdGF0aWMgc3RkOjpzdHJpbmcgbG9jYXRpb247CiAgIGlmICh0aGlzLT5Jc0ltcG9ydGVkKCkpIHsKICAgICBsb2NhdGlvbiA9IHRoaXMtPlRhcmdldC0+SW1wb3J0ZWRHZXRGdWxsUGF0aCgKICAgICAgICIiLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCk7Ci0gICAgcmV0dXJuIGxvY2F0aW9uLmNfc3RyKCk7CisgICAgcmV0dXJuIGxvY2F0aW9uOwogICB9CiAKICAgLy8gTm93IGhhbmRsZSB0aGUgZGVwcmVjYXRlZCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gbG9jYXRpb24uCkBAIC0xMDY3LDcgKzExMDMsNyBAQAogICB9CiAgIGxvY2F0aW9uICs9ICIvIjsKICAgbG9jYXRpb24gKz0gdGhpcy0+R2V0RnVsbE5hbWUoIiIsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KTsKLSAgcmV0dXJuIGxvY2F0aW9uLmNfc3RyKCk7CisgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNTeXN0ZW1JbmNsdWRlRGlyZWN0b3J5KApAQCAtMTEyMiw3ICsxMTU4LDggQEAKIH0KIAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6TWF5YmVIYXZlSW50ZXJmYWNlUHJvcGVydHkoCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLCBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAorICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKKyAgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSkgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgY29uc3Qga2V5ID0gcHJvcCArICdAJyArIGNvbnRleHQtPkNvbmZpZzsKICAgYXV0byBpID0gdGhpcy0+TWF5YmVJbnRlcmZhY2VQcm9wZXJ0eUV4aXN0cy5maW5kKGtleSk7CkBAIC0xMTQxLDcgKzExNzgsNyBAQAogICAgICAgICBjb250ZXh0LT5IZWFkVGFyZ2V0ID8gY29udGV4dC0+SGVhZFRhcmdldCA6IHRoaXM7CiAgICAgICBpZiAoY21MaW5rSW50ZXJmYWNlTGlicmFyaWVzIGNvbnN0KiBpZmFjZSA9CiAgICAgICAgICAgICB0aGlzLT5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKGNvbnRleHQtPkNvbmZpZywgaGVhZFRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpKSB7CiAgICAgICAgIGlmIChpZmFjZS0+SGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgewogICAgICAgICAgIC8vIFdpdGggYSBkaWZmZXJlbnQgaGVhZCB0YXJnZXQgd2UgbWF5IGdldCB0byBhIGxpYnJhcnkgd2l0aAogICAgICAgICAgIC8vIHRoaXMgaW50ZXJmYWNlIHByb3BlcnR5LgpAQCAtMTE1MSw3ICsxMTg4LDggQEAKICAgICAgICAgICAvLyBoZWFkIHRhcmdldCwgc28gd2UgY2FuIGZvbGxvdyB0aGVtLgogICAgICAgICAgIGZvciAoY21MaW5rSXRlbSBjb25zdCYgbGliIDogaWZhY2UtPkxpYnJhcmllcykgewogICAgICAgICAgICAgaWYgKGxpYi5UYXJnZXQgJiYKLSAgICAgICAgICAgICAgICBsaWIuVGFyZ2V0LT5NYXliZUhhdmVJbnRlcmZhY2VQcm9wZXJ0eShwcm9wLCBjb250ZXh0KSkgeworICAgICAgICAgICAgICAgIGxpYi5UYXJnZXQtPk1heWJlSGF2ZUludGVyZmFjZVByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgcHJvcCwgY29udGV4dCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpKSB7CiAgICAgICAgICAgICAgIG1heWJlSW50ZXJmYWNlUHJvcCA9IHRydWU7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTE2NSwxMiArMTIwMywxNCBAQAogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6RXZhbHVhdGVJbnRlcmZhY2VQcm9wZXJ0eSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCi0gIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXJQYXJlbnQpIGNvbnN0CisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXJQYXJlbnQsCisgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKIAogICAvLyBJZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgYXBwZWFyIHRyYW5zaXRpdmVseSBhdCBhbGwsIHdlIGFyZSBkb25lLgotICBpZiAoIXRoaXMtPk1heWJlSGF2ZUludGVyZmFjZVByb3BlcnR5KHByb3AsIGNvbnRleHQpKSB7CisgIGlmICghdGhpcy0+TWF5YmVIYXZlSW50ZXJmYWNlUHJvcGVydHkocHJvcCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZV9yZXF1aXJlbWVudHNfb25seSkpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKQEAgLTEyMDIsOCArMTI0Miw4IEBACiAgICAgICBwLCBjb250ZXh0LT5MRywgY29udGV4dCwgaGVhZFRhcmdldCwgJmRhZ0NoZWNrZXIsIHRoaXMpOwogICB9CiAKLSAgaWYgKGNtTGlua0ludGVyZmFjZUxpYnJhcmllcyBjb25zdCogaWZhY2UgPQotICAgICAgICB0aGlzLT5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKGNvbnRleHQtPkNvbmZpZywgaGVhZFRhcmdldCwgdHJ1ZSkpIHsKKyAgaWYgKGNtTGlua0ludGVyZmFjZUxpYnJhcmllcyBjb25zdCogaWZhY2UgPSB0aGlzLT5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKAorICAgICAgICBjb250ZXh0LT5Db25maWcsIGhlYWRUYXJnZXQsIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSkgewogICAgIGZvciAoY21MaW5rSXRlbSBjb25zdCYgbGliIDogaWZhY2UtPkxpYnJhcmllcykgewogICAgICAgLy8gQnJva2VuIGNvZGUgY2FuIGhhdmUgYSB0YXJnZXQgaW4gaXRzIG93biBsaW5rIGludGVyZmFjZS4KICAgICAgIC8vIERvbid0IGZvbGxvdyBzdWNoIGxpbmsgaW50ZXJmYWNlIGVudHJpZXMgc28gYXMgbm90IHRvIGNyZWF0ZSBhCkBAIC0xMjE3LDggKzEyNTcsOCBAQAogICAgICAgICAgIGNvbnRleHQtPkV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0sIGNvbnRleHQtPkJhY2t0cmFjZSwKICAgICAgICAgICBjb250ZXh0LT5MYW5ndWFnZSk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGxpYlJlc3VsdCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBFbXB0eUxpc3RFbGVtZW50cygKLSAgICAgICAgICBsaWIuVGFyZ2V0LT5FdmFsdWF0ZUludGVyZmFjZVByb3BlcnR5KHByb3AsICZsaWJDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIpKTsKKyAgICAgICAgICBsaWIuVGFyZ2V0LT5FdmFsdWF0ZUludGVyZmFjZVByb3BlcnR5KHByb3AsICZsaWJDb250ZXh0LCAmZGFnQ2hlY2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSk7CiAgICAgICAgIGlmICghbGliUmVzdWx0LmVtcHR5KCkpIHsKICAgICAgICAgICBpZiAocmVzdWx0LmVtcHR5KCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bW92ZShsaWJSZXN1bHQpOwpAQCAtMTI0MiwxMSArMTI4Miw5MiBAQAogfQogCiBuYW1lc3BhY2Ugeworc3RkOjpzdHJpbmcgQWRkU3dpZnRJbnRlcmZhY2VJbmNsdWRlRGlyZWN0b3JpZXMoCisgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiByb290LCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBjb250ZXh0KQoreworICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ3sgdGFyZ2V0LT5HZXRCYWNrdHJhY2UoKSwgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCB9OworICBzd2l0Y2ggKGRhZy5DaGVjaygpKSB7CisgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpTRUxGX1JFRkVSRU5DRToKKyAgICAgIGRhZy5SZXBvcnRFcnJvcihudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICIkPFRBUkdFVF9QUk9QRVJUWToiICsgdGFyZ2V0LT5HZXROYW1lKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgIixTd2lmdF9NT0RVTEVfRElSRUNUT1JZPiIpOworICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6Q1lDTElDX1JFRkVSRU5DRToKKyAgICAgIC8vIE5vIGVycm9yLiBXZSBqdXN0IHNraXAgY3ljbGljIHJlZmVyZW5jZXMuCisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpBTFJFQURZX1NFRU46CisgICAgICAvLyBObyBlcnJvci4gV2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhpcyB0cmFuc2l0aXZlIHByb3BlcnR5LgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6REFHOgorICAgICAgYnJlYWs7CisgIH0KKworICBzdGQ6OnN0cmluZyBkaXJlY3RvcmllczsKKyAgaWYgKGNvbnN0IGF1dG8qIGludGVyZmFjZSA9CisgICAgICAgIHRhcmdldC0+R2V0TGlua0ludGVyZmFjZUxpYnJhcmllcyhjb25maWcsIHJvb3QsIHRydWUpKSB7CisgICAgZm9yIChjb25zdCBjbUxpbmtJdGVtJiBsaWJyYXJ5IDogaW50ZXJmYWNlLT5MaWJyYXJpZXMpIHsKKyAgICAgIGlmIChjb25zdCBjbUdlbmVyYXRvclRhcmdldCogZGVwZW5kZW5jeSA9IGxpYnJhcnkuVGFyZ2V0KSB7CisgICAgICAgIGlmIChjbUNvbnRhaW5zKGRlcGVuZGVuY3ktPkdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSwgIlN3aWZ0IikpIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9CisgICAgICAgICAgICBkZXBlbmRlbmN5LT5HZXRTYWZlUHJvcGVydHkoIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiKTsKKyAgICAgICAgICBpZiAodmFsdWUuZW1wdHkoKSkgeworICAgICAgICAgICAgdmFsdWUgPQorICAgICAgICAgICAgICBkZXBlbmRlbmN5LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFkaXJlY3Rvcmllcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBkaXJlY3RvcmllcyArPSAiOyI7CisgICAgICAgICAgfQorICAgICAgICAgIGRpcmVjdG9yaWVzICs9IHZhbHVlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBkaXJlY3RvcmllczsKK30KKwordm9pZCBBZGRTd2lmdEltcGxpY2l0SW5jbHVkZURpcmVjdG9yaWVzKAorICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiYgZW50cmllcykKK3sKKyAgaWYgKGNvbnN0IGF1dG8qIGxpYnJhcmllcyA9IHRhcmdldC0+R2V0TGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzKGNvbmZpZykpIHsKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ3sgdGFyZ2V0LT5HZXRCYWNrdHJhY2UoKSwgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3dpZnRfTU9EVUxFX0RJUkVDVE9SWSIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIgfTsKKworICAgIGZvciAoY29uc3QgY21MaW5rSW1wbEl0ZW0mIGxpYnJhcnkgOiBsaWJyYXJpZXMtPkxpYnJhcmllcykgeworICAgICAgaWYgKGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBkZXBlbmRlbmN5ID0gbGlicmFyeS5UYXJnZXQpIHsKKyAgICAgICAgaWYgKGNtQ29udGFpbnMoZGVwZW5kZW5jeS0+R2V0QWxsQ29uZmlnQ29tcGlsZUxhbmd1YWdlcygpLCAiU3dpZnQiKSkgeworICAgICAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgZW50cnl7IGxpYnJhcnksIGxpYnJhcnkuQmFja3RyYWNlIH07CisKKyAgICAgICAgICBpZiAoY29uc3QgY2hhciogdmFsID0KKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LT5HZXRQcm9wZXJ0eSgiU3dpZnRfTU9EVUxFX0RJUkVDVE9SWSIpKSB7CisgICAgICAgICAgICBlbnRyeS5WYWx1ZXMuZW1wbGFjZV9iYWNrKHZhbCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LlZhbHVlcy5lbXBsYWNlX2JhY2soCisgICAgICAgICAgICAgIGRlcGVuZGVuY3ktPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgY21FeHBhbmRMaXN0KEFkZFN3aWZ0SW50ZXJmYWNlSW5jbHVkZURpcmVjdG9yaWVzKHRhcmdldCwgZGVwZW5kZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLCAmZGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuVmFsdWVzKTsKKworICAgICAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShlbnRyeSkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKIHZvaWQgQWRkSW50ZXJmYWNlRW50cmllcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLCBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+JiBlbnRyaWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+JiBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkgPSB0cnVlKQogewogICBpZiAoY21MaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMgY29uc3QqIGltcGwgPQogICAgICAgICBoZWFkVGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKSkgewpAQCAtMTI1OSw5ICsxMzgwLDkgQEAKICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCBjb250ZXh0KAogICAgICAgICAgIGhlYWRUYXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZywgZmFsc2UsIGhlYWRUYXJnZXQsCiAgICAgICAgICAgaGVhZFRhcmdldCwgdHJ1ZSwgbGliLkJhY2t0cmFjZSwgbGFuZyk7Ci0gICAgICAgIGNtRXhwYW5kTGlzdCgKLSAgICAgICAgICBsaWIuVGFyZ2V0LT5FdmFsdWF0ZUludGVyZmFjZVByb3BlcnR5KHByb3AsICZjb250ZXh0LCBkYWdDaGVja2VyKSwKLSAgICAgICAgICBlZS5WYWx1ZXMpOworICAgICAgICBjbUV4cGFuZExpc3QobGliLlRhcmdldC0+RXZhbHVhdGVJbnRlcmZhY2VQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvcCwgJmNvbnRleHQsIGRhZ0NoZWNrZXIsIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSwKKyAgICAgICAgICAgICAgICAgICAgIGVlLlZhbHVlcyk7CiAgICAgICAgIGVlLkNvbnRleHREZXBlbmRlbnQgPSBjb250ZXh0LkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgICAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShlZSkpOwogICAgICAgfQpAQCAtMTY3Miw2ICsxNzkzLDE5IEBACiAgIH0KIH0KIAorc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRBbGxDb25maWdDb21waWxlTGFuZ3VhZ2VzKCkgY29uc3QKK3sKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGxhbmd1YWdlczsKKyAgc3RkOjp2ZWN0b3I8QWxsQ29uZmlnU291cmNlPiBjb25zdCYgc291cmNlcyA9IHRoaXMtPkdldEFsbENvbmZpZ1NvdXJjZXMoKTsKKyAgZm9yIChBbGxDb25maWdTb3VyY2UgY29uc3QmIHNpIDogc291cmNlcykgeworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nID0gc2kuU291cmNlLT5HZXRPckRldGVybWluZUxhbmd1YWdlKCk7CisgICAgaWYgKCFsYW5nLmVtcHR5KCkpIHsKKyAgICAgIGxhbmd1YWdlcy5lbXBsYWNlKGxhbmcpOworICAgIH0KKyAgfQorICByZXR1cm4gbGFuZ3VhZ2VzOworfQorCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0Q29tcGlsZVBEQk5hbWUoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CkBAIC0xODg5LDcgKzIwMjMsNyBAQAogICAgIGlmIChjbUdlbmVyYXRvclRhcmdldDo6SW1wb3J0SW5mbyBjb25zdCogaW5mbyA9CiAgICAgICAgICAgdGhpcy0+R2V0SW1wb3J0SW5mbyhjb25maWcpKSB7CiAgICAgICBpZiAoIWluZm8tPk5vU09OYW1lICYmICFpbmZvLT5TT05hbWUuZW1wdHkoKSkgewotICAgICAgICBpZiAoaW5mby0+U09OYW1lLmZpbmQoIkBycGF0aC8iKSA9PSAwKSB7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoaW5mby0+U09OYW1lLCAiQHJwYXRoLyIpKSB7CiAgICAgICAgICAgaW5zdGFsbF9uYW1lX2lzX3JwYXRoID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKQEAgLTIwMDYsNyArMjE0MCw3IEBACiAgICAgICAgIHJldHVybiBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoaW5mby0+TG9jYXRpb24pOwogICAgICAgfQogICAgICAgLy8gVXNlIHRoZSBzb25hbWUgZ2l2ZW4gaWYgYW55LgotICAgICAgaWYgKGluZm8tPlNPTmFtZS5maW5kKCJAcnBhdGgvIikgPT0gMCkgeworICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChpbmZvLT5TT05hbWUsICJAcnBhdGgvIikpIHsKICAgICAgICAgcmV0dXJuIGluZm8tPlNPTmFtZS5zdWJzdHIoNik7CiAgICAgICB9CiAgICAgICByZXR1cm4gaW5mby0+U09OYW1lOwpAQCAtMjExNCw3ICsyMjQ4LDkgQEAKICAgICAvLyBJZiBidWlsZGluZyBkaXJlY3RseSBmb3IgaW5zdGFsbGF0aW9uIHRoZW4gdGhlIGJ1aWxkIHRyZWUgaW5zdGFsbF9uYW1lCiAgICAgLy8gaXMgdGhlIHNhbWUgYXMgdGhlIGluc3RhbGwgdHJlZS4KICAgICBpZiAodGhpcy0+TWFjT1NYVXNlSW5zdGFsbE5hbWVEaXIoKSkgewotICAgICAgcmV0dXJuIHRoaXMtPkdldEluc3RhbGxOYW1lRGlyRm9ySW5zdGFsbFRyZWUoKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxQcmVmaXggPQorICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0lOU1RBTExfUFJFRklYIik7CisgICAgICByZXR1cm4gdGhpcy0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZShjb25maWcsIGluc3RhbGxQcmVmaXgpOwogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgYnVpbGQgdHJlZSBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQuCkBAIC0yMTMyLDcgKzIyNjgsOCBAQAogICByZXR1cm4gIiI7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKCkgY29uc3QKK3N0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgaW5zdGFsbFByZWZpeCkgY29uc3QKIHsKICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QTEFURk9STV9IQVNfSU5TVEFMTE5BTUUiKSkgewogICAgIHN0ZDo6c3RyaW5nIGRpcjsKQEAgLTIxNDAsNyArMjI3NywxMyBAQAogCiAgICAgaWYgKHRoaXMtPkNhbkdlbmVyYXRlSW5zdGFsbE5hbWVEaXIoSU5TVEFMTF9OQU1FX0ZPUl9JTlNUQUxMKSkgewogICAgICAgaWYgKGluc3RhbGxfbmFtZV9kaXIgJiYgKmluc3RhbGxfbmFtZV9kaXIpIHsKLSAgICAgICAgZGlyID0gY21TdHJDYXQoaW5zdGFsbF9uYW1lX2RpciwgJy8nKTsKKyAgICAgICAgZGlyID0gaW5zdGFsbF9uYW1lX2RpcjsKKyAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpSZXBsYWNlSW5zdGFsbFByZWZpeChkaXIsIGluc3RhbGxQcmVmaXgpOworICAgICAgICBkaXIgPQorICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgICAgICAgaWYgKCFkaXIuZW1wdHkoKSkgeworICAgICAgICAgIGRpciA9IGNtU3RyQ2F0KGRpciwgJy8nKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICBpZiAoIWluc3RhbGxfbmFtZV9kaXIpIHsKQEAgLTIxNTgsNyArMjMwMSw4IEBACiAgIHJldHVybiB0aGlzLT5UYXJnZXQtPkdldEJhY2t0cmFjZSgpOwogfQogCi1jb25zdCBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+JiBjbUdlbmVyYXRvclRhcmdldDo6R2V0VXRpbGl0aWVzKCkgY29uc3QKK2NvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiYKK2NtR2VuZXJhdG9yVGFyZ2V0OjpHZXRVdGlsaXRpZXMoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+VGFyZ2V0LT5HZXRVdGlsaXRpZXMoKTsKIH0KQEAgLTIxOTUsMTEgKzIzMzksMTIgQEAKICAgY21UYXJnZXRDb2xsZWN0TGlua0xhbmd1YWdlcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+JiBsYW5ndWFnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWQsIGJvb2wgc2Vjb25kUGFzcykKICAgICA6IENvbmZpZyhzdGQ6Om1vdmUoY29uZmlnKSkKICAgICAsIExhbmd1YWdlcyhsYW5ndWFnZXMpCiAgICAgLCBIZWFkVGFyZ2V0KGhlYWQpCiAgICAgLCBUYXJnZXQodGFyZ2V0KQorICAgICwgU2Vjb25kUGFzcyhzZWNvbmRQYXNzKQogICB7CiAgICAgdGhpcy0+VmlzaXRlZC5pbnNlcnQodGFyZ2V0KTsKICAgfQpAQCAtMjI0MSwxMSArMjM4NiwxNCBAQAogICAgIGlmICghdGhpcy0+VmlzaXRlZC5pbnNlcnQoaXRlbS5UYXJnZXQpLnNlY29uZCkgewogICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjbUxpbmtJbnRlcmZhY2UgY29uc3QqIGlmYWNlID0KLSAgICAgIGl0ZW0uVGFyZ2V0LT5HZXRMaW5rSW50ZXJmYWNlKHRoaXMtPkNvbmZpZywgdGhpcy0+SGVhZFRhcmdldCk7CisgICAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBpZmFjZSA9IGl0ZW0uVGFyZ2V0LT5HZXRMaW5rSW50ZXJmYWNlKAorICAgICAgdGhpcy0+Q29uZmlnLCB0aGlzLT5IZWFkVGFyZ2V0LCB0aGlzLT5TZWNvbmRQYXNzKTsKICAgICBpZiAoIWlmYWNlKSB7CiAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChpZmFjZS0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKSB7CisgICAgICB0aGlzLT5IYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgIH0KIAogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlIDogaWZhY2UtPkxhbmd1YWdlcykgewogICAgICAgdGhpcy0+TGFuZ3VhZ2VzLmluc2VydChsYW5ndWFnZSk7CkBAIC0yMjU2LDEyICsyNDA0LDE5IEBACiAgICAgfQogICB9CiAKKyAgYm9vbCBHZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKQorICB7CisgICAgcmV0dXJuIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKKyAgfQorCiBwcml2YXRlOgogICBzdGQ6OnN0cmluZyBDb25maWc7CiAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIExhbmd1YWdlczsKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIEhlYWRUYXJnZXQ7CiAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBUYXJnZXQ7CiAgIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4gVmlzaXRlZDsKKyAgYm9vbCBTZWNvbmRQYXNzOworICBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IGZhbHNlOwogfTsKIAogY21HZW5lcmF0b3JUYXJnZXQ6OkxpbmtDbG9zdXJlIGNvbnN0KiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0Nsb3N1cmUoCkBAIC0yMjkyLDcgKzI0NDcsNyBAQAogICB7CiAgICAgdGhpcy0+R0cgPSB0aGlzLT5UYXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEdsb2JhbEdlbmVyYXRvcigpOwogICB9Ci0gIHZvaWQgQ29uc2lkZXIoY29uc3QgY2hhciogbGFuZykKKyAgdm9pZCBDb25zaWRlcihjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykKICAgewogICAgIGludCBwcmVmZXJlbmNlID0gdGhpcy0+R0ctPkdldExpbmtlclByZWZlcmVuY2UobGFuZyk7CiAgICAgaWYgKHByZWZlcmVuY2UgPiB0aGlzLT5QcmVmZXJlbmNlKSB7CkBAIC0yMzI1LDQwICsyNDgwLDM2IEBACiAgIH0KIH07CiAKLXZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtDbG9zdXJlJiBsYykgY29uc3QKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtDbG9zdXJlJiBsYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlY29uZFBhc3MpIGNvbnN0CiB7CiAgIC8vIEdldCBsYW5ndWFnZXMgYnVpbHQgaW4gdGhpcyB0YXJnZXQuCiAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwotICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogaW1wbCA9IHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcpOworICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogaW1wbCA9CisgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZywgc2Vjb25kUGFzcyk7CiAgIGFzc2VydChpbXBsKTsKLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGkgOiBpbXBsLT5MYW5ndWFnZXMpIHsKLSAgICBsYW5ndWFnZXMuaW5zZXJ0KGxpKTsKLSAgfQorICBsYW5ndWFnZXMuaW5zZXJ0KGltcGwtPkxhbmd1YWdlcy5jYmVnaW4oKSwgaW1wbC0+TGFuZ3VhZ2VzLmNlbmQoKSk7CiAKICAgLy8gQWRkIGludGVyZmFjZSBsYW5ndWFnZXMgZnJvbSBsaW5rZWQgdGFyZ2V0cy4KLSAgY21UYXJnZXRDb2xsZWN0TGlua0xhbmd1YWdlcyBjbGwodGhpcywgY29uZmlnLCBsYW5ndWFnZXMsIHRoaXMpOworICAvLyBjbVRhcmdldENvbGxlY3RMaW5rTGFuZ3VhZ2VzIGNsbCh0aGlzLCBjb25maWcsIGxhbmd1YWdlcywgdGhpcywKKyAgLy8gc2Vjb25kUGFzcyk7CisgIGNtVGFyZ2V0Q29sbGVjdExpbmtMYW5ndWFnZXMgY2xsKHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2VzLCB0aGlzLCBzZWNvbmRQYXNzKTsKICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CiAgICAgY2xsLlZpc2l0KGxpYik7CiAgIH0KIAogICAvLyBTdG9yZSB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlIG9mIGxhbmd1YWdlcy4KLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZyA6IGxhbmd1YWdlcykgewotICAgIGxjLkxhbmd1YWdlcy5wdXNoX2JhY2sobGFuZyk7Ci0gIH0KKyAgY206OmFwcGVuZChsYy5MYW5ndWFnZXMsIGxhbmd1YWdlcyk7CiAKICAgLy8gQ2hvb3NlIHRoZSBsYW5ndWFnZSB3aG9zZSBsaW5rZXIgc2hvdWxkIGJlIHVzZWQuCi0gIGlmICh0aGlzLT5HZXRQcm9wZXJ0eSgiSEFTX0NYWCIpKSB7Ci0gICAgbGMuTGlua2VyTGFuZ3VhZ2UgPSAiQ1hYIjsKLSAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBsaW5rZXJMYW5nID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIpKSB7Ci0gICAgbGMuTGlua2VyTGFuZ3VhZ2UgPSBsaW5rZXJMYW5nOwotICB9IGVsc2UgeworICBpZiAoc2Vjb25kUGFzcyB8fCBsYy5MaW5rZXJMYW5ndWFnZS5lbXB0eSgpKSB7CiAgICAgLy8gRmluZCB0aGUgbGFuZ3VhZ2Ugd2l0aCB0aGUgaGlnaGVzdCBwcmVmZXJlbmNlIHZhbHVlLgogICAgIGNtVGFyZ2V0U2VsZWN0TGlua2VyIHRzbCh0aGlzKTsKIAogICAgIC8vIEZpcnN0IHNlbGVjdCBmcm9tIHRoZSBsYW5ndWFnZXMgY29tcGlsZWQgZGlyZWN0bHkgaW4gdGhpcyB0YXJnZXQuCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbCA6IGltcGwtPkxhbmd1YWdlcykgewotICAgICAgdHNsLkNvbnNpZGVyKGwuY19zdHIoKSk7CisgICAgICB0c2wuQ29uc2lkZXIobCk7CiAgICAgfQogCiAgICAgLy8gTm93IGNvbnNpZGVyIGxhbmd1YWdlcyB0aGF0IHByb3BhZ2F0ZSBmcm9tIGxpbmtlZCB0YXJnZXRzLgpAQCAtMjM2NiwxMiArMjUxNyw1MCBAQAogICAgICAgc3RkOjpzdHJpbmcgcHJvcGFnYXRlcyA9CiAgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfTElOS0VSX1BSRUZFUkVOQ0VfUFJPUEFHQVRFUyI7CiAgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24ocHJvcGFnYXRlcykpIHsKLSAgICAgICAgdHNsLkNvbnNpZGVyKGxhbmcuY19zdHIoKSk7CisgICAgICAgIHRzbC5Db25zaWRlcihsYW5nKTsKICAgICAgIH0KICAgICB9CiAKICAgICBsYy5MaW5rZXJMYW5ndWFnZSA9IHRzbC5DaG9vc2UoKTsKICAgfQorCisgIHJldHVybiBpbXBsLT5IYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24gfHwKKyAgICBjbGwuR2V0SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKCk7Cit9CisKK3ZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtDbG9zdXJlJiBsYykgY29uc3QKK3sKKyAgYm9vbCBzZWNvbmRQYXNzID0gZmFsc2U7CisKKyAgeworICAgIExpbmtDbG9zdXJlIGxpbmtDbG9zdXJlOworICAgIGxpbmtDbG9zdXJlLkxpbmtlckxhbmd1YWdlID0gdGhpcy0+TGlua2VyTGFuZ3VhZ2U7CisKKyAgICAvLyBHZXQgbGFuZ3VhZ2VzIGJ1aWx0IGluIHRoaXMgdGFyZ2V0LgorICAgIHNlY29uZFBhc3MgPSB0aGlzLT5Db21wdXRlTGlua0Nsb3N1cmUoY29uZmlnLCBsaW5rQ2xvc3VyZSwgZmFsc2UpOworICAgIHRoaXMtPkxpbmtlckxhbmd1YWdlID0gbGlua0Nsb3N1cmUuTGlua2VyTGFuZ3VhZ2U7CisgICAgaWYgKCFzZWNvbmRQYXNzKSB7CisgICAgICBsYyA9IHN0ZDo6bW92ZShsaW5rQ2xvc3VyZSk7CisgICAgfQorICB9CisKKyAgaWYgKHNlY29uZFBhc3MpIHsKKyAgICBMaW5rQ2xvc3VyZSBsaW5rQ2xvc3VyZTsKKworICAgIHRoaXMtPkNvbXB1dGVMaW5rQ2xvc3VyZShjb25maWcsIGxpbmtDbG9zdXJlLCBzZWNvbmRQYXNzKTsKKyAgICBsYyA9IHN0ZDo6bW92ZShsaW5rQ2xvc3VyZSk7CisKKyAgICAvLyBsaW5rZXIgbGFuZ3VhZ2UgbXVzdCBub3QgYmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gcGFzc2VzCisgICAgaWYgKHRoaXMtPkxpbmtlckxhbmd1YWdlICE9IGxjLkxpbmtlckxhbmd1YWdlKSB7CisgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKKyAgICAgIGUgPDwgIkV2YWx1YXRpb24gb2YgJDxMSU5LX0xBTkdVQUdFOi4uLj4gb3IgJDxMSU5LX0xBTkRfQU5EX0lEOi4uLj4gIgorICAgICAgICAgICAiY2hhbmdlc1xudGhlIGxpbmtlciBsYW5ndWFnZSBmb3IgdGFyZ2V0IFwiIgorICAgICAgICA8PCB0aGlzLT5HZXROYW1lKCkgPDwgIlwiIChmcm9tICciIDw8IHRoaXMtPkxpbmtlckxhbmd1YWdlIDw8ICInIHRvICciCisgICAgICAgIDw8IGxjLkxpbmtlckxhbmd1YWdlIDw8ICInKSB3aGljaCBpcyBpbnZhbGlkLiI7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihlLnN0cigpKTsKKyAgICB9CisgIH0KIH0KIAogdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0RnVsbE5hbWVDb21wb25lbnRzKApAQCAtMjQ5MiwxMSArMjY4MSwxMSBAQAogICBpbmZvLldpbmRvd3NFeHBvcnRBbGxTeW1ib2xzID0KICAgICB0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfU1VQUE9SVF9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUyIpICYmCiAgICAgdGhpcy0+R2V0UHJvcGVydHlBc0Jvb2woIldJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTIik7Ci0jaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAgIGluZm8uRGVmRmlsZUdlbmVyYXRlZCA9CiAgICAgaW5mby5XaW5kb3dzRXhwb3J0QWxsU3ltYm9scyB8fCBpbmZvLlNvdXJjZXMuc2l6ZSgpID4gMTsKICNlbHNlCi0gIC8vIE91ciBfX2NyZWF0ZV9kZWYgaGVscGVyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisgIC8vIE91ciBfX2NyZWF0ZV9kZWYgaGVscGVyIGlzIG5vdCBhdmFpbGFibGUgZHVyaW5nIENNYWtlIGJvb3RzdHJhcC4KICAgaW5mby5EZWZGaWxlR2VuZXJhdGVkID0gZmFsc2U7CiAjZW5kaWYKICAgaWYgKGluZm8uRGVmRmlsZUdlbmVyYXRlZCkgewpAQCAtMjY5MSwxMiArMjg4MCwyMyBAQAogICBpZiAoaSA9PSB0aGlzLT5OYW1lTWFwLmVuZCgpIHx8IGktPmZpcnN0ICE9IG5hbWUpIHsKICAgICAvLyBDaGVjayBpZiB3ZSBrbm93IGhvdyB0byBnZW5lcmF0ZSB0aGlzIGZpbGUuCiAgICAgY21Tb3VyY2VzV2l0aE91dHB1dCBzb3VyY2VzID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZXNXaXRoT3V0cHV0KG5hbWUpOworICAgIC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIGEgdGFyZ2V0IG9yIHNvdXJjZSBhbmQgd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGgsIGl0CisgICAgLy8gbWlnaHQgYmUgYSB2YWxpZCBzb3VyY2UgaWYgbWFkZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBiaW5hcnkKKyAgICAvLyBkaXJlY3RvcnkuCisgICAgaWYgKCFzb3VyY2VzLlRhcmdldCAmJiAhc291cmNlcy5Tb3VyY2UgJiYKKyAgICAgICAgIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKG5hbWUpKSB7CisgICAgICBhdXRvIGZ1bGxuYW1lID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCBuYW1lKTsKKyAgICAgIGZ1bGxuYW1lID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICAgZnVsbG5hbWUsIHRoaXMtPk1ha2VmaWxlLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCkpOworICAgICAgc291cmNlcyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2VzV2l0aE91dHB1dChmdWxsbmFtZSk7CisgICAgfQogICAgIGkgPSB0aGlzLT5OYW1lTWFwLmVtcGxhY2VfaGludChpLCBuYW1lLCBzb3VyY2VzKTsKICAgfQogICBpZiAoY21UYXJnZXQqIHQgPSBpLT5zZWNvbmQuVGFyZ2V0KSB7CiAgICAgLy8gVGhlIG5hbWUgaXMgYSBieXByb2R1Y3Qgb2YgYSB1dGlsaXR5IHRhcmdldCBvciBhIFBSRV9CVUlMRCwgUFJFX0xJTkssIG9yCiAgICAgLy8gUE9TVF9CVUlMRCBjb21tYW5kLgotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KHQtPkdldE5hbWUoKSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodC0+R2V0TmFtZSgpLCBmYWxzZSk7CiAgIH0KICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSBpLT5zZWNvbmQuU291cmNlKSB7CiAgICAgLy8gRm9yIG5vdyBvbmx5IGZvbGxvdyB0aGUgZGVwZW5kZW5jeSBpZiB0aGUgc291cmNlIGZpbGUgaXMgbm90IGEKQEAgLTI3NTEsMTQgKzI5NTEsMTQgQEAKICAgICAgICAgZGVwTG9jYXRpb24gPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGRlcExvY2F0aW9uKTsKICAgICAgICAgdExvY2F0aW9uID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0TG9jYXRpb24pOwogICAgICAgICBpZiAoZGVwTG9jYXRpb24gPT0gdExvY2F0aW9uKSB7Ci0gICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodXRpbCk7CisgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodXRpbCwgZmFsc2UpOwogICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIFRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBkZXBlbmRlbmN5IHdhcyBub3QgYSBmdWxsIHBhdGguICBJdAogICAgICAgLy8gbXVzdCBuYW1lIGEgdGFyZ2V0LCBzbyBhZGQgdGhlIHRhcmdldC1sZXZlbCBkZXBlbmRlbmN5LgotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodXRpbCk7CisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh1dGlsLCBmYWxzZSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KQEAgLTI3ODYsNyArMjk4Niw3IEBACiAgICAgICAgIC8vIHRoaXMgcHJvamVjdC4gIEFkZCB0aGUgdGFyZ2V0LWxldmVsIGRlcGVuZGVuY3kgdG8gbWFrZQogICAgICAgICAvLyBzdXJlIHRoZSBleGVjdXRhYmxlIGlzIHVwIHRvIGRhdGUgYmVmb3JlIHRoaXMgY3VzdG9tCiAgICAgICAgIC8vIGNvbW1hbmQgcG9zc2libHkgcnVucy4KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkoY29tbWFuZCk7CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KGNvbW1hbmQsIHRydWUpOwogICAgICAgfQogICAgIH0KIApAQCAtMjgwMSw3ICszMDAxLDcgQEAKICAgfQogCiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0YXJnZXQtPkdldE5hbWUoKSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGFyZ2V0LT5HZXROYW1lKCksIHRydWUpOwogICB9CiAKICAgLy8gUXVldWUgdGhlIGN1c3RvbSBjb21tYW5kIGRlcGVuZGVuY2llcy4KQEAgLTMwNTcsNiArMzI1NywxMCBAQAogICAgIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKHRoaXMsIGNvbmZpZywgbGFuZywgJmRhZ0NoZWNrZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcyk7CiAKKyAgaWYgKGxhbmcgPT0gIlN3aWZ0IikgeworICAgIEFkZFN3aWZ0SW1wbGljaXRJbmNsdWRlRGlyZWN0b3JpZXModGhpcywgY29uZmlnLCBlbnRyaWVzKTsKKyAgfQorCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMiLCBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKIApAQCAtMzA2NCw3ICszMjY4LDggQEAKICAgICBjbUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyBjb25zdCogaW1wbCA9CiAgICAgICB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKTsKICAgICBmb3IgKGNtTGlua0ltcGxJdGVtIGNvbnN0JiBsaWIgOiBpbXBsLT5MaWJyYXJpZXMpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGxpYkRpciA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgobGliLkFzU3RyKCkpOworICAgICAgc3RkOjpzdHJpbmcgbGliRGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICAgbGliLkFzU3RyKCksIHRoaXMtPk1ha2VmaWxlLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCkpOwogCiAgICAgICBzdGF0aWMgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGZyYW1ld29ya0NoZWNrKAogICAgICAgICAiKC4qXFwuZnJhbWV3b3JrKSgvVmVyc2lvbnMvW14vXSspPy9bXi9dKyQiKTsKQEAgLTMyNzcsMTAgKzM0ODIsMTAgQEAKICAgICAgICAgICBDTV9GQUxMVEhST1VHSDsKICAgICAgICAgfQogICAgICAgICBjYXNlIGNtUG9saWNpZXM6Ok9MRDogewotICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyeSgKLSAgICAgICAgICAgIENyZWF0ZVRhcmdldFByb3BlcnR5RW50cnkoY29uZmlnUHJvcCkpOworICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyeSA9CisgICAgICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KGNvbmZpZ1Byb3ApOwogICAgICAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgKLSAgICAgICAgICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCBlbnRyeS5nZXQoKSkpOworICAgICAgICAgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsICplbnRyeSkpOwogICAgICAgICB9IGJyZWFrOwogICAgICAgICBjYXNlIGNtUG9saWNpZXM6Ok5FVzoKICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9BTFdBWVM6CkBAIC0zMzczLDE0ICszNTc4LDIyIEBACiAgICAgICB7ICJPQkpDWFgiLCAiLm9iamN4eC5oeHgiIH0KICAgICB9OwogCi0gICAgZmlsZW5hbWUgPSBjbVN0ckNhdChmaWxlbmFtZSwgIkNNYWtlRmlsZXMvIiwgZ2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAiLmRpci9jbWFrZV9wY2giLCBsYW5ndWFnZVRvRXh0ZW5zaW9uLmF0KGxhbmd1YWdlKSk7CisgICAgZmlsZW5hbWUgPQorICAgICAgY21TdHJDYXQoZmlsZW5hbWUsICJDTWFrZUZpbGVzLyIsIGdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpLCAiLmRpciIpOworCisgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICAgIGZpbGVuYW1lID0gY21TdHJDYXQoZmlsZW5hbWUsICIvIiwgY29uZmlnKTsKKyAgICB9CisKKyAgICBmaWxlbmFtZSA9CisgICAgICBjbVN0ckNhdChmaWxlbmFtZSwgIi9jbWFrZV9wY2giLCBsYW5ndWFnZVRvRXh0ZW5zaW9uLmF0KGxhbmd1YWdlKSk7CiAKICAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZV90bXAgPSBjbVN0ckNhdChmaWxlbmFtZSwgIi50bXAiKTsKICAgICBpZiAoIXBjaFJldXNlRnJvbSkgewogICAgICAgYXV0byBwY2hQcm9sb2d1ZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9QQ0hfUFJPTE9HVUUiKTsKICAgICAgIGF1dG8gcGNoRXBpbG9ndWUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfUENIX0VQSUxPR1VFIik7CiAKKyAgICAgIHN0ZDo6c3RyaW5nIGZpcnN0SGVhZGVyT25EaXNrOwogICAgICAgewogICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZmlsZSgKICAgICAgICAgICBmaWxlbmFtZV90bXAsIGZhbHNlLApAQCAtMzQwNCw2ICszNjE3LDExIEBACiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbGUgPDwgIiNpbmNsdWRlIFwiIiA8PCBoZWFkZXJfYnQuVmFsdWUgPDwgIlwiXG4iOwogICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGhlYWRlcl9idC5WYWx1ZSkgJiYKKyAgICAgICAgICAgICAgZmlyc3RIZWFkZXJPbkRpc2suZW1wdHkoKSkgeworICAgICAgICAgICAgZmlyc3RIZWFkZXJPbkRpc2sgPSBoZWFkZXJfYnQuVmFsdWU7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChsYW5ndWFnZSA9PSAiQ1hYIikgewogICAgICAgICAgIGZpbGUgPDwgIiNlbmRpZiAvLyBfX2NwbHVzcGx1c1xuIjsKQEAgLTM0MTUsNiArMzYzMywxMSBAQAogICAgICAgICAgIGZpbGUgPDwgcGNoRXBpbG9ndWUgPDwgIlxuIjsKICAgICAgICAgfQogICAgICAgfQorCisgICAgICBpZiAoIWZpcnN0SGVhZGVyT25EaXNrLmVtcHR5KCkpIHsKKyAgICAgICAgY21GaWxlVGltZXM6OkNvcHkoZmlyc3RIZWFkZXJPbkRpc2ssIGZpbGVuYW1lX3RtcCk7CisgICAgICB9CisKICAgICAgIGNtU3lzdGVtVG9vbHM6Ok1vdmVGaWxlSWZEaWZmZXJlbnQoZmlsZW5hbWVfdG1wLCBmaWxlbmFtZSk7CiAgICAgfQogICB9CkBAIC0zNDczLDYgKzM2OTYsNyBAQAogICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZmlsZShmaWxlbmFtZV90bXApOwogICAgICAgICBmaWxlIDw8ICIvKiBnZW5lcmF0ZWQgYnkgQ01ha2UgKi9cbiI7CiAgICAgICB9CisgICAgICBjbUZpbGVUaW1lczo6Q29weShwY2hIZWFkZXIsIGZpbGVuYW1lX3RtcCk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpNb3ZlRmlsZUlmRGlmZmVyZW50KGZpbGVuYW1lX3RtcCwgZmlsZW5hbWUpOwogICAgIH0KICAgfQpAQCAtMzU1Nyw5ICszNzgxLDE2IEBACiAgIGlmIChpbnNlcnRlZC5zZWNvbmQpIHsKICAgICBzdGQ6OnN0cmluZyYgY3JlYXRlT3B0aW9uTGlzdCA9IGluc2VydGVkLmZpcnN0LT5zZWNvbmQ7CiAKKyAgICBpZiAodGhpcy0+R2V0UHJvcGVydHlBc0Jvb2woIlBDSF9XQVJOX0lOVkFMSUQiKSkgeworICAgICAgY3JlYXRlT3B0aW9uTGlzdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKKyAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmd1YWdlLCAiX0NPTVBJTEVfT1BUSU9OU19JTlZBTElEX1BDSCIpKTsKKyAgICB9CisKICAgICBjb25zdCBzdGQ6OnN0cmluZyBjcmVhdGVPcHRWYXIgPQogICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmd1YWdlLCAiX0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIik7Ci0gICAgY3JlYXRlT3B0aW9uTGlzdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihjcmVhdGVPcHRWYXIpOworCisgICAgY3JlYXRlT3B0aW9uTGlzdCA9IGNtU3RyQ2F0KAorICAgICAgY3JlYXRlT3B0aW9uTGlzdCwgIjsiLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oY3JlYXRlT3B0VmFyKSk7CiAKICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSk7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRoaXMtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSk7CkBAIC0zNTc4LDkgKzM4MDksMTYgQEAKICAgaWYgKGluc2VydGVkLnNlY29uZCkgewogICAgIHN0ZDo6c3RyaW5nJiB1c2VPcHRpb25MaXN0ID0gaW5zZXJ0ZWQuZmlyc3QtPnNlY29uZDsKIAorICAgIGlmICh0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiUENIX1dBUk5fSU5WQUxJRCIpKSB7CisgICAgICB1c2VPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIikpOworICAgIH0KKwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHVzZU9wdFZhciA9CiAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX1VTRV9QQ0giKTsKLSAgICB1c2VPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKHVzZU9wdFZhcik7CisKKyAgICB1c2VPcHRpb25MaXN0ID0gY21TdHJDYXQodXNlT3B0aW9uTGlzdCwgIjsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24odXNlT3B0VmFyKSk7CiAKICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSk7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRoaXMtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSk7CkBAIC0zNjQ3LDcgKzM4ODUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxpbmtPcHRpb25zRW50cmllcyk7CiAKICAgQWRkSW50ZXJmYWNlRW50cmllcyh0aGlzLCBjb25maWcsICJJTlRFUkZBQ0VfTElOS19PUFRJT05TIiwgbGFuZ3VhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMpOworICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFBvbGljeVN0YXR1c0NNUDAwOTkoKSAhPSBjbVBvbGljaWVzOjpORVcpOwogCiAgIHByb2Nlc3NPcHRpb25zKHRoaXMsIGVudHJpZXMsIHJlc3VsdCwgdW5pcXVlT3B0aW9ucywgZGVidWdPcHRpb25zLAogICAgICAgICAgICAgICAgICAibGluayBvcHRpb25zIiwgT3B0aW9uc1BhcnNlOjpTaGVsbCk7CkBAIC0zNzc5LDEwICs0MDE4LDEwIEBACiAgIGlmIChjb25zdCBjaGFyKiBsaW5rT3B0aW9ucyA9IHRoaXMtPkdldFByb3BlcnR5KCJTVEFUSUNfTElCUkFSWV9PUFRJT05TIikpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9ucyA9IGNtRXhwYW5kZWRMaXN0KGxpbmtPcHRpb25zKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG9wdGlvbiA6IG9wdGlvbnMpIHsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyeSgKLSAgICAgICAgQ3JlYXRlVGFyZ2V0UHJvcGVydHlFbnRyeShvcHRpb24pKTsKLSAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgKLSAgICAgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsIGVudHJ5LmdldCgpKSk7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cnkgPQorICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KG9wdGlvbik7CisgICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkodGhpcywgY29uZmlnLCBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgKmVudHJ5KSk7CiAgICAgfQogICB9CiAgIHByb2Nlc3NPcHRpb25zKHRoaXMsIGVudHJpZXMsIHJlc3VsdCwgdW5pcXVlT3B0aW9ucywgZmFsc2UsCkBAIC0zOTAyLDcgKzQxNDEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVMiLCBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcyk7CisgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDA5OSgpICE9IGNtUG9saWNpZXM6Ok5FVyk7CiAKICAgcHJvY2Vzc0xpbmtEaXJlY3Rvcmllcyh0aGlzLCBlbnRyaWVzLCByZXN1bHQsIHVuaXF1ZURpcmVjdG9yaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnRGlyZWN0b3JpZXMpOwpAQCAtMzkzMywxNCArNDE3MywxNSBAQAogICBpZiAoY29uc3QgY2hhciogbGlua0RlcGVuZHMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS19ERVBFTkRTIikpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kcyA9IGNtRXhwYW5kZWRMaXN0KGxpbmtEZXBlbmRzKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRlcGVuZCA6IGRlcGVuZHMpIHsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyeSgKLSAgICAgICAgQ3JlYXRlVGFyZ2V0UHJvcGVydHlFbnRyeShkZXBlbmQpKTsKLSAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgKLSAgICAgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsIGVudHJ5LmdldCgpKSk7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cnkgPQorICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KGRlcGVuZCk7CisgICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkodGhpcywgY29uZmlnLCBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgKmVudHJ5KSk7CiAgICAgfQogICB9CiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0xJTktfREVQRU5EUyIsIGxhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQb2xpY3lTdGF0dXNDTVAwMDk5KCkgIT0gY21Qb2xpY2llczo6TkVXKTsKIAogICBwcm9jZXNzT3B0aW9ucyh0aGlzLCBlbnRyaWVzLCByZXN1bHQsIHVuaXF1ZU9wdGlvbnMsIGZhbHNlLCAibGluayBkZXBlbmRzIiwKICAgICAgICAgICAgICAgICAgT3B0aW9uc1BhcnNlOjpOb25lKTsKQEAgLTQxMjYsOCArNDM2Nyw4IEBACiAgICAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRoaXMtPkdldEZyYW1ld29ya1ZlcnNpb24oKTsKICAgICAgIHRhcmdldE5hbWVzLlJlYWwgKz0gIi8iOwogICAgIH0KLSAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRhcmdldE5hbWVzLkJhc2U7Ci0gICAgdGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0ID0gdGFyZ2V0TmFtZXMuUmVhbDsKKyAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRhcmdldE5hbWVzLkJhc2UgKyBzdWZmaXg7CisgICAgdGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0ID0gdGFyZ2V0TmFtZXMuUmVhbCArIHN1ZmZpeDsKICAgfSBlbHNlIHsKICAgICAvLyBUaGUgbGlicmFyeSdzIHNvbmFtZS4KICAgICB0aGlzLT5Db21wdXRlVmVyc2lvbmVkTmFtZSh0YXJnZXROYW1lcy5TaGFyZWRPYmplY3QsIHByZWZpeCwKQEAgLTQzMDIsNyArNDU0MywxNSBAQAogICBvdXRCYXNlICs9IHRoaXMtPkdldE91dHB1dE5hbWUoY29uZmlnLCBhcnRpZmFjdCk7CiAKICAgLy8gQXBwZW5kIHRoZSBwZXItY29uZmlndXJhdGlvbiBwb3N0Zml4LgotICBvdXRCYXNlICs9IGNvbmZpZ1Bvc3RmaXg7CisgIC8vIFdoZW4gdXNpbmcgWGNvZGUsIHRoZSBwb3N0Zml4IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdWZmaXggcmF0aGVyIHRoYW4gdGhlCisgIC8vIGJhc2UsIGJlY2F1c2UgdGhlIHN1ZmZpeCBlbmRzIHVwIGJlaW5nIHVzZWQgaW4gWGNvZGUncyBFWEVDVVRBQkxFX1NVRkZJWAorICAvLyBhdHRyaWJ1dGUuCisgIGlmICh0aGlzLT5Jc0ZyYW1ld29ya09uQXBwbGUoKSAmJgorICAgICAgR2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE5hbWUoKSA9PSAiWGNvZGUiKSB7CisgICAgdGFyZ2V0U3VmZml4ID0gY29uZmlnUG9zdGZpeC5jX3N0cigpOworICB9IGVsc2UgeworICAgIG91dEJhc2UgKz0gY29uZmlnUG9zdGZpeDsKKyAgfQogCiAgIC8vIE5hbWUgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZWlyIHZlcnNpb24gbnVtYmVyIG9uIHNvbWUgcGxhdGZvcm1zLgogICBpZiAoY29uc3QgY2hhciogc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpKSB7CkBAIC00NzIwLDkgKzQ5NjksOSBAQAogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDaGVja1Byb3BlcnR5Q29tcGF0aWJpbGl0eSgKLSAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBpbmZvLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAorICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIGNvbnN0IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6SXRlbVZlY3RvciYgZGVwcyA9IGluZm8tPkdldEl0ZW1zKCk7CisgIGNvbnN0IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6SXRlbVZlY3RvciYgZGVwcyA9IGluZm8uR2V0SXRlbXMoKTsKIAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZW1pdHRlZEJvb2xzOwogICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc3RyQm9vbCA9ICJDT01QQVRJQkxFX0lOVEVSRkFDRV9CT09MIjsKQEAgLTUwNjcsMTAgKzUzMTYsMTEgQEAKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGludGVyZmFjZVByb3BlcnR5ID0gIklOVEVSRkFDRV8iICsgcDsKLSAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyPiBnZW5leEludGVycHJldGVyKAotICAgIHAgPT0gIlBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiID8gbmV3IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZywgdGd0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbHB0cik7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlcj4gZ2VuZXhJbnRlcnByZXRlcjsKKyAgaWYgKHAgPT0gIlBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiKSB7CisgICAgZ2VuZXhJbnRlcnByZXRlciA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlcj4oCisgICAgICB0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZywgdGd0KTsKKyAgfQogCiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRoZVRhcmdldCA6IGRlcHMpIHsKICAgICAvLyBBbiBlcnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgaWYgb25lIGRlcGVuZGVuY3kKQEAgLTUyMTcsMzIgKzU0NjcsNDEgQEAKICAgYXV0byBpID0gdGhpcy0+TGlua0luZm9ybWF0aW9uLmZpbmQoa2V5KTsKICAgaWYgKGkgPT0gdGhpcy0+TGlua0luZm9ybWF0aW9uLmVuZCgpKSB7CiAgICAgLy8gQ29tcHV0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgotICAgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiogaW5mbyA9Ci0gICAgICBuZXcgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKHRoaXMsIGNvbmZpZyk7Ci0gICAgaWYgKCFpbmZvIHx8ICFpbmZvLT5Db21wdXRlKCkpIHsKLSAgICAgIGRlbGV0ZSBpbmZvOwotICAgICAgaW5mbyA9IG51bGxwdHI7CisgICAgYXV0byBpbmZvID0gY206Om1ha2VfdW5pcXVlPGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbj4odGhpcywgY29uZmlnKTsKKyAgICBpZiAoaW5mbyAmJiAhaW5mby0+Q29tcHV0ZSgpKSB7CisgICAgICBpbmZvLnJlc2V0KCk7CiAgICAgfQogCiAgICAgLy8gU3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCi0gICAgY21UYXJnZXRMaW5rSW5mb3JtYXRpb25NYXA6OnZhbHVlX3R5cGUgZW50cnkoa2V5LCBpbmZvKTsKLSAgICBpID0gdGhpcy0+TGlua0luZm9ybWF0aW9uLmluc2VydChlbnRyeSkuZmlyc3Q7CisgICAgaSA9IHRoaXMtPkxpbmtJbmZvcm1hdGlvbi5lbXBsYWNlKGtleSwgc3RkOjptb3ZlKGluZm8pKS5maXJzdDsKIAotICAgIGlmIChpbmZvKSB7Ci0gICAgICB0aGlzLT5DaGVja1Byb3BlcnR5Q29tcGF0aWJpbGl0eShpbmZvLCBjb25maWcpOworICAgIGlmIChpLT5zZWNvbmQpIHsKKyAgICAgIHRoaXMtPkNoZWNrUHJvcGVydHlDb21wYXRpYmlsaXR5KCppLT5zZWNvbmQsIGNvbmZpZyk7CiAgICAgfQogICB9Ci0gIHJldHVybiBpLT5zZWNvbmQ7CisgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFRhcmdldFZlcnNpb24oaW50JiBtYWpvciwgaW50JiBtaW5vcikgY29uc3QKIHsKICAgaW50IHBhdGNoOwotICB0aGlzLT5HZXRUYXJnZXRWZXJzaW9uKGZhbHNlLCBtYWpvciwgbWlub3IsIHBhdGNoKTsKKyAgdGhpcy0+R2V0VGFyZ2V0VmVyc2lvbigiVkVSU0lPTiIsIG1ham9yLCBtaW5vciwgcGF0Y2gpOwogfQogCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRUYXJnZXRWZXJzaW9uKGJvb2wgc292ZXJzaW9uLCBpbnQmIG1ham9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1pbm9yLCBpbnQmIHBhdGNoKSBjb25zdAordm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0VGFyZ2V0VmVyc2lvbkZhbGxiYWNrKAorICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IHN0ZDo6c3RyaW5nJiBmYWxsYmFja19wcm9wZXJ0eSwKKyAgaW50JiBtYWpvciwgaW50JiBtaW5vciwgaW50JiBwYXRjaCkgY29uc3QKK3sKKyAgaWYgKHRoaXMtPkdldFByb3BlcnR5KHByb3BlcnR5KSkgeworICAgIHRoaXMtPkdldFRhcmdldFZlcnNpb24ocHJvcGVydHksIG1ham9yLCBtaW5vciwgcGF0Y2gpOworICB9IGVsc2UgeworICAgIHRoaXMtPkdldFRhcmdldFZlcnNpb24oZmFsbGJhY2tfcHJvcGVydHksIG1ham9yLCBtaW5vciwgcGF0Y2gpOworICB9Cit9CisKK3ZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFRhcmdldFZlcnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1ham9yLCBpbnQmIG1pbm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHBhdGNoKSBjb25zdAogewogICAvLyBTZXQgdGhlIGRlZmF1bHQgdmFsdWVzLgogICBtYWpvciA9IDA7CkBAIC01MjUxLDkgKzU1MTAsNyBAQAogCiAgIGFzc2VydCh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSk7CiAKLSAgLy8gTG9vayBmb3IgYSBWRVJTSU9OIG9yIFNPVkVSU0lPTiBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogcHJvcCA9IHNvdmVyc2lvbiA/ICJTT1ZFUlNJT04iIDogIlZFUlNJT04iOwotICBpZiAoY29uc3QgY2hhciogdmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgIGlmIChjb25zdCBjaGFyKiB2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcGVydHkpKSB7CiAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgdGhhdCB3ZXJlCiAgICAgLy8gc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KICAgICBpbnQgcGFyc2VkX21ham9yOwpAQCAtNTM4MywyNCArNTY0MCw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlcG9ydCk7CiB9CiAKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OklzTGlua0xvb2t1cFNjb3BlKHN0ZDo6c3RyaW5nIGNvbnN0JiBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciBjb25zdComIGxnKSBjb25zdAoreworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KG4sIENNQUtFX0RJUkVDVE9SWV9JRF9TRVApKSB7CisgICAgY21EaXJlY3RvcnlJZCBjb25zdCBkaXJJZCA9IG4uc3Vic3RyKHNpemVvZihDTUFLRV9ESVJFQ1RPUllfSURfU0VQKSAtIDEpOworICAgIGlmIChkaXJJZC5TdHJpbmcuZW1wdHkoKSkgeworICAgICAgbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcjsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoY21Mb2NhbEdlbmVyYXRvciBjb25zdCogb3RoZXJMRyA9CisgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kTG9jYWxHZW5lcmF0b3IoZGlySWQpKSB7CisgICAgICBsZyA9IG90aGVyTEc7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpMb29rdXBMaW5rSXRlbXMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBidCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiYgaXRlbXMpIGNvbnN0CiB7CisgIGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3I7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG4gOiBuYW1lcykgeworICAgIGlmICh0aGlzLT5Jc0xpbmtMb29rdXBTY29wZShuLCBsZykpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKwogICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSB0aGlzLT5DaGVja0NNUDAwMDQobik7CiAgICAgaWYgKG5hbWUgPT0gdGhpcy0+R2V0TmFtZSgpIHx8IG5hbWUuZW1wdHkoKSkgewogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGl0ZW1zLnB1c2hfYmFjayh0aGlzLT5SZXNvbHZlTGlua0l0ZW0obmFtZSwgYnQpKTsKKyAgICBpdGVtcy5wdXNoX2JhY2sodGhpcy0+UmVzb2x2ZUxpbmtJdGVtKG5hbWUsIGJ0LCBsZykpOwogICB9CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkV4cGFuZExpbmtJdGVtcygKICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQsIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksCi0gIHN0ZDo6dmVjdG9yPGNtTGlua0l0ZW0+JiBpdGVtcywgYm9vbCYgaGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgY29uc3QKKyAgc3RkOjp2ZWN0b3I8Y21MaW5rSXRlbT4mIGl0ZW1zLCBib29sJiBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uLAorICBib29sJiBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24pIGNvbnN0CiB7CisgIC8vIEtlZXAgdGhpcyBsb2dpYyBpbiBzeW5jIHdpdGggQ29tcHV0ZUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcy4KICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOwogICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ0NoZWNrZXIodGhpcywgcHJvcCwgbnVsbHB0ciwgbnVsbHB0cik7CiAgIC8vIFRoZSAkPExJTktfT05MWT4gZXhwcmVzc2lvbiBtYXkgYmUgaW4gYSBsaW5rIGludGVyZmFjZSB0byBzcGVjaWZ5IHByaXZhdGUKQEAgLTU0MTAsMTkgKzU2OTIsMjggQEAKICAgfQogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGliczsKICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPSBnZS5QYXJzZSh2YWx1ZSk7Ci0gIGNtRXhwYW5kTGlzdCgKLSAgICBjZ2UtPkV2YWx1YXRlKHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIGhlYWRUYXJnZXQsICZkYWdDaGVja2VyLCB0aGlzKSwKLSAgICBsaWJzKTsKKyAgY21FeHBhbmRMaXN0KGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgaGVhZFRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIHRoaXMsIGhlYWRUYXJnZXQtPkxpbmtlckxhbmd1YWdlKSwKKyAgICAgICAgICAgICAgIGxpYnMpOwogICB0aGlzLT5Mb29rdXBMaW5rSXRlbXMobGlicywgY2dlLT5HZXRCYWNrdHJhY2UoKSwgaXRlbXMpOwogICBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gY2dlLT5HZXRIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKCk7CisgIGhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9CisgICAgY2dlLT5HZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKTsKIH0KIAogY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0ludGVyZmFjZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWQpIGNvbnN0CiB7CisgIHJldHVybiB0aGlzLT5HZXRMaW5rSW50ZXJmYWNlKGNvbmZpZywgaGVhZCwgZmFsc2UpOworfQorCitjbUxpbmtJbnRlcmZhY2UgY29uc3QqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMaW5rSW50ZXJmYWNlKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZCwKKyAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdAorewogICAvLyBJbXBvcnRlZCB0YXJnZXRzIGhhdmUgdGhlaXIgb3duIGxpbmsgaW50ZXJmYWNlLgogICBpZiAodGhpcy0+SXNJbXBvcnRlZCgpKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkdldEltcG9ydExpbmtJbnRlcmZhY2UoY29uZmlnLCBoZWFkLCBmYWxzZSk7CisgICAgcmV0dXJuIHRoaXMtPkdldEltcG9ydExpbmtJbnRlcmZhY2UoY29uZmlnLCBoZWFkLCBmYWxzZSwgc2Vjb25kUGFzcyk7CiAgIH0KIAogICAvLyBMaW5rIGludGVyZmFjZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGV4ZWN1dGFibGVzIHRoYXQgZG8gbm90CkBAIC01NDM1LDYgKzU3MjYsMTAgQEAKICAgLy8gTG9va3VwIGFueSBleGlzdGluZyBsaW5rIGludGVyZmFjZSBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgogICBjbUhlYWRUb0xpbmtJbnRlcmZhY2VNYXAmIGhtID0gdGhpcy0+R2V0SGVhZFRvTGlua0ludGVyZmFjZU1hcChjb25maWcpOwogCisgIGlmIChzZWNvbmRQYXNzKSB7CisgICAgaG0uZXJhc2UoaGVhZCk7CisgIH0KKwogICAvLyBJZiB0aGUgbGluayBpbnRlcmZhY2UgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBoZWFkIHRhcmdldAogICAvLyB0aGVuIHJldHVybiB0aGUgb25lIHdlIGNvbXB1dGVkIGZpcnN0LgogICBpZiAoIWhtLmVtcHR5KCkgJiYgIWhtLmJlZ2luKCktPnNlY29uZC5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKSB7CkBAIC01NDQ5LDcgKzU3NDQsNyBAQAogICBpZiAoIWlmYWNlLkFsbERvbmUpIHsKICAgICBpZmFjZS5BbGxEb25lID0gdHJ1ZTsKICAgICBpZiAoaWZhY2UuRXhpc3RzKSB7Ci0gICAgICB0aGlzLT5Db21wdXRlTGlua0ludGVyZmFjZShjb25maWcsIGlmYWNlLCBoZWFkKTsKKyAgICAgIHRoaXMtPkNvbXB1dGVMaW5rSW50ZXJmYWNlKGNvbmZpZywgaWZhY2UsIGhlYWQsIHNlY29uZFBhc3MpOwogICAgIH0KICAgfQogCkBAIC01NDYwLDYgKzU3NTUsMTMgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21PcHRpb25hbExpbmtJbnRlcmZhY2UmIGlmYWNlLAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCkgY29uc3QKIHsKKyAgdGhpcy0+Q29tcHV0ZUxpbmtJbnRlcmZhY2UoY29uZmlnLCBpZmFjZSwgaGVhZFRhcmdldCwgZmFsc2UpOworfQorCit2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb21wdXRlTGlua0ludGVyZmFjZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21PcHRpb25hbExpbmtJbnRlcmZhY2UmIGlmYWNlLAorICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwgYm9vbCBzZWNvbmRQYXNzKSBjb25zdAorewogICBpZiAoaWZhY2UuRXhwbGljaXQpIHsKICAgICBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgICAgdGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkgfHwKQEAgLTU0NzEsNyArNTc3Myw4IEBACiAgICAgICAgIGVtaXR0ZWQuaW5zZXJ0KGxpYik7CiAgICAgICB9CiAgICAgICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKLSAgICAgICAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGltcGwgPSB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnKTsKKyAgICAgICAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGltcGwgPQorICAgICAgICAgIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcsIHNlY29uZFBhc3MpOwogICAgICAgICBmb3IgKGNtTGlua0ltcGxJdGVtIGNvbnN0JiBsaWIgOiBpbXBsLT5MaWJyYXJpZXMpIHsKICAgICAgICAgICBpZiAoZW1pdHRlZC5pbnNlcnQobGliKS5zZWNvbmQpIHsKICAgICAgICAgICAgIGlmIChsaWIuVGFyZ2V0KSB7CkBAIC01NTAxLDcgKzU4MDQsNyBAQAogICBpZiAodGhpcy0+TGlua0xhbmd1YWdlUHJvcGFnYXRlc1RvRGVwZW5kZW50cygpKSB7CiAgICAgLy8gVGFyZ2V0cyB1c2luZyB0aGlzIGFyY2hpdmUgbmVlZCBpdHMgbGFuZ3VhZ2UgcnVudGltZSBsaWJyYXJpZXMuCiAgICAgaWYgKGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0KLSAgICAgICAgICB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnKSkgeworICAgICAgICAgIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcsIHNlY29uZFBhc3MpKSB7CiAgICAgICBpZmFjZS5MYW5ndWFnZXMgPSBpbXBsLT5MYW5ndWFnZXM7CiAgICAgfQogICB9CkBAIC01ODk3LDcgKzYyMDAsOCBAQAogICAgIC8vIFRoZSBpbnRlcmZhY2UgbGlicmFyaWVzIGhhdmUgYmVlbiBleHBsaWNpdGx5IHNldC4KICAgICB0aGlzLT5FeHBhbmRMaW5rSXRlbXMobGlua0lmYWNlUHJvcCwgZXhwbGljaXRMaWJyYXJpZXMsIGNvbmZpZywgaGVhZFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlLkxpYnJhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbik7CiAgIH0gZWxzZSBpZiAoIWNtcDAwMjJORVcpCiAgIC8vIElmIENNUDAwMjIgaXMgTkVXIHRoZW4gdGhlIHBsYWluIHRsbCBzaWduYXR1cmUgc2V0cyB0aGUKICAgLy8gSU5URVJGQUNFX0xJTktfTElCUkFSSUVTLCBzbyBpZiB3ZSBnZXQgaGVyZSB0aGVuIHRoZSBwcm9qZWN0CkBAIC01OTE3LDkgKzYyMjEsMTEgQEAKICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBuZXdQcm9wID0gIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyI7CiAgICAgICBpZiAoY29uc3QgY2hhciogbmV3RXhwbGljaXRMaWJyYXJpZXMgPSB0aGlzLT5HZXRQcm9wZXJ0eShuZXdQcm9wKSkgewogICAgICAgICBib29sIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb25EdW1teSA9IGZhbHNlOworICAgICAgICBib29sIGhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbkR1bW15ID0gZmFsc2U7CiAgICAgICAgIHRoaXMtPkV4cGFuZExpbmtJdGVtcyhuZXdQcm9wLCBuZXdFeHBsaWNpdExpYnJhcmllcywgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFRhcmdldCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlTGlicywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb25EdW1teSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uRHVtbXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb25EdW1teSk7CiAgICAgICB9CiAgICAgICBpZiAoaWZhY2VMaWJzICE9IGlmYWNlLkxpYnJhcmllcykgewogICAgICAgICBzdGQ6OnN0cmluZyBvbGRMaWJyYXJpZXMgPSBjbUpvaW4oaW1wbC0+TGlicmFyaWVzLCAiOyIpOwpAQCAtNTk1Niw3ICs2MjYyLDcgQEAKIAogY29uc3QgY21MaW5rSW50ZXJmYWNlKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0SW1wb3J0TGlua0ludGVyZmFjZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQsCi0gIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpIGNvbnN0CisgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGJvb2wgc2Vjb25kUGFzcykgY29uc3QKIHsKICAgY21HZW5lcmF0b3JUYXJnZXQ6OkltcG9ydEluZm8gY29uc3QqIGluZm8gPSB0aGlzLT5HZXRJbXBvcnRJbmZvKGNvbmZpZyk7CiAgIGlmICghaW5mbykgewpAQCAtNTk2OSw2ICs2Mjc1LDEwIEBACiAgICAgICAgPyB0aGlzLT5HZXRIZWFkVG9MaW5rSW50ZXJmYWNlVXNhZ2VSZXF1aXJlbWVudHNNYXAoY29uZmlnKQogICAgICAgIDogdGhpcy0+R2V0SGVhZFRvTGlua0ludGVyZmFjZU1hcChjb25maWcpKTsKIAorICBpZiAoc2Vjb25kUGFzcykgeworICAgIGhtLmVyYXNlKGhlYWRUYXJnZXQpOworICB9CisKICAgLy8gSWYgdGhlIGxpbmsgaW50ZXJmYWNlIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgaGVhZCB0YXJnZXQKICAgLy8gdGhlbiByZXR1cm4gdGhlIG9uZSB3ZSBjb21wdXRlZCBmaXJzdC4KICAgaWYgKCFobS5lbXB0eSgpICYmICFobS5iZWdpbigpLT5zZWNvbmQuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgewpAQCAtNTk4Miw3ICs2MjkyLDggQEAKICAgICBjbUV4cGFuZExpc3QoaW5mby0+TGFuZ3VhZ2VzLCBpZmFjZS5MYW5ndWFnZXMpOwogICAgIHRoaXMtPkV4cGFuZExpbmtJdGVtcyhpbmZvLT5MaWJyYXJpZXNQcm9wLCBpbmZvLT5MaWJyYXJpZXMsIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFRhcmdldCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlLkxpYnJhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbik7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcHMgPSBjbUV4cGFuZGVkTGlzdChpbmZvLT5TaGFyZWREZXBzKTsKICAgICB0aGlzLT5Mb29rdXBMaW5rSXRlbXMoZGVwcywgY21MaXN0RmlsZUJhY2t0cmFjZSgpLCBpZmFjZS5TaGFyZWREZXBzKTsKICAgfQpAQCAtNjA0MSw3ICs2MzUyLDcgQEAKICAgY29uc3QgY2hhciogbG9jID0gbnVsbHB0cjsKICAgY29uc3QgY2hhciogaW1wID0gbnVsbHB0cjsKICAgc3RkOjpzdHJpbmcgc3VmZml4OwotICBpZiAoIXRoaXMtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGRlc2lyZWRfY29uZmlnLCAmbG9jLCAmaW1wLCBzdWZmaXgpKSB7CisgIGlmICghdGhpcy0+VGFyZ2V0LT5HZXRNYXBwZWRDb25maWcoZGVzaXJlZF9jb25maWcsIGxvYywgaW1wLCBzdWZmaXgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTYxODcsNiArNjQ5OCwxMiBAQAogY29uc3QgY21MaW5rSW1wbGVtZW50YXRpb24qIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMaW5rSW1wbGVtZW50YXRpb24oCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CisgIHJldHVybiB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnLCBmYWxzZSk7Cit9CisKK2NvbnN0IGNtTGlua0ltcGxlbWVudGF0aW9uKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0ltcGxlbWVudGF0aW9uKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBib29sIHNlY29uZFBhc3MpIGNvbnN0Cit7CiAgIC8vIFRoZXJlIGlzIG5vIGxpbmsgaW1wbGVtZW50YXRpb24gZm9yIGltcG9ydGVkIHRhcmdldHMuCiAgIGlmICh0aGlzLT5Jc0ltcG9ydGVkKCkpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYxOTQsNiArNjUxMSw5IEBACiAKICAgc3RkOjpzdHJpbmcgQ09ORklHID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7CiAgIGNtT3B0aW9uYWxMaW5rSW1wbGVtZW50YXRpb24mIGltcGwgPSB0aGlzLT5MaW5rSW1wbE1hcFtDT05GSUddW3RoaXNdOworICBpZiAoc2Vjb25kUGFzcykgeworICAgIGltcGwgPSBjbU9wdGlvbmFsTGlua0ltcGxlbWVudGF0aW9uKCk7CisgIH0KICAgaWYgKCFpbXBsLkxpYnJhcmllc0RvbmUpIHsKICAgICBpbXBsLkxpYnJhcmllc0RvbmUgPSB0cnVlOwogICAgIHRoaXMtPkNvbXB1dGVMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnLCBpbXBsLCB0aGlzKTsKQEAgLTYzMzAsNiArNjY1MCwyMSBAQAogICByZXR1cm4gbGliOwogfQogCitib29sIGNtR2VuZXJhdG9yVGFyZ2V0OjpJc0RlcHJlY2F0ZWQoKSBjb25zdAoreworICBjb25zdCBjaGFyKiBkZXByZWNhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJERVBSRUNBVElPTiIpOworICByZXR1cm4gZGVwcmVjYXRpb24gJiYgKmRlcHJlY2F0aW9uOworfQorCitzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0RGVwcmVjYXRpb24oKSBjb25zdAoreworICAvLyBmaW5kIERFUFJFQ0FUSU9OIHByb3BlcnR5CisgIGlmIChjb25zdCBjaGFyKiBkZXByZWNhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJERVBSRUNBVElPTiIpKSB7CisgICAgcmV0dXJuIGRlcHJlY2F0aW9uOworICB9CisgIHJldHVybiBzdGQ6OnN0cmluZygpOworfQorCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMYW5ndWFnZXMoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBsYW5ndWFnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKQEAgLTYzNzksOCArNjcxNCw3IEBACiAgICAgICB0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXM7Ci0gIHRoaXMtPkdldExhbmd1YWdlcyhsYW5ndWFnZXMsICIiKTsKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGxhbmd1YWdlcyA9IHRoaXMtPkdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKTsKICAgLy8gQ29uc2lkZXIgYW4gZXhwbGljaXQgbGlua2VyIGxhbmd1YWdlIHByb3BlcnR5LCBidXQgKm5vdCogdGhlCiAgIC8vIGNvbXB1dGVkIGxpbmtlciBsYW5ndWFnZSB0aGF0IG1heSBkZXBlbmQgb24gbGlua2VkIHRhcmdldHMuCiAgIGNvbnN0IGNoYXIqIGxpbmtMYW5nID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIpOwpAQCAtNjQ2Miw2ICs2Nzk2LDcgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21PcHRpb25hbExpbmtJbXBsZW1lbnRhdGlvbiYgaW1wbCwKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWQpIGNvbnN0CiB7CisgIGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3I7CiAgIGNtU3RyaW5nUmFuZ2UgZW50cnlSYW5nZSA9IHRoaXMtPlRhcmdldC0+R2V0TGlua0ltcGxlbWVudGF0aW9uRW50cmllcygpOwogICBjbUJhY2t0cmFjZVJhbmdlIGJ0UmFuZ2UgPSB0aGlzLT5UYXJnZXQtPkdldExpbmtJbXBsZW1lbnRhdGlvbkJhY2t0cmFjZXMoKTsKICAgY21CYWNrdHJhY2VSYW5nZTo6Y29uc3RfaXRlcmF0b3IgYnRJdCA9IGJ0UmFuZ2UuYmVnaW4oKTsKQEAgLTY0NzAsMTggKzY4MDUsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbnRyeVJhbmdlLmVuZCgpOwogICAgICAgIGxlICE9IGVuZDsgKytsZSwgKytidEl0KSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxsaWJzOworICAgIC8vIEtlZXAgdGhpcyBsb2dpYyBpbiBzeW5jIHdpdGggRXhwYW5kTGlua0l0ZW1zLgogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgZGFnQ2hlY2tlcih0aGlzLCAiTElOS19MSUJSQVJJRVMiLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2UoKmJ0SXQpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY29uc3QgY2dlID0gZ2UuUGFyc2UoKmxlKTsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZXZhbHVhdGVkID0KLSAgICAgIGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgaGVhZCwgJmRhZ0NoZWNrZXIpOworICAgICAgY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnLCBoZWFkLCAmZGFnQ2hlY2tlciwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGlua2VyTGFuZ3VhZ2UpOwogICAgIGNtRXhwYW5kTGlzdChldmFsdWF0ZWQsIGxsaWJzKTsKICAgICBpZiAoY2dlLT5HZXRIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKICAgICAgIGltcGwuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CiAgICAgfQorICAgIGlmIChjZ2UtPkdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CisgICAgICBpbXBsLkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgICAgfQogCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGliIDogbGxpYnMpIHsKKyAgICAgIGlmICh0aGlzLT5Jc0xpbmtMb29rdXBTY29wZShsaWIsIGxnKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKwogICAgICAgLy8gU2tpcCBlbnRyaWVzIHRoYXQgcmVzb2x2ZSB0byB0aGUgdGFyZ2V0IGl0c2VsZiBvciBhcmUgZW1wdHkuCiAgICAgICBzdGQ6OnN0cmluZyBuYW1lID0gdGhpcy0+Q2hlY2tDTVAwMDA0KGxpYik7CiAgICAgICBpZiAobmFtZSA9PSB0aGlzLT5HZXROYW1lKCkgfHwgbmFtZS5lbXB0eSgpKSB7CkBAIC02NTE2LDcgKzY4NjAsNyBAQAogICAgICAgfQogCiAgICAgICAvLyBUaGUgZW50cnkgaXMgbWVhbnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgICAgIGltcGwuTGlicmFyaWVzLmVtcGxhY2VfYmFjayh0aGlzLT5SZXNvbHZlTGlua0l0ZW0obmFtZSwgKmJ0SXQpLAorICAgICAgaW1wbC5MaWJyYXJpZXMuZW1wbGFjZV9iYWNrKHRoaXMtPlJlc29sdmVMaW5rSXRlbShuYW1lLCAqYnRJdCwgbGcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCAhPSAqbGUpOwogICAgIH0KIApAQCAtNjU1MywzOCArNjg5NywxNiBAQAogY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldE9yU3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpSZXNvbHZlVGFyZ2V0UmVmZXJlbmNlKAogICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgY29uc3QKIHsKLSAgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcjsKLSAgc3RkOjpzdHJpbmcgY29uc3QqIGxvb2t1cE5hbWUgPSAmbmFtZTsKKyAgcmV0dXJuIHRoaXMtPlJlc29sdmVUYXJnZXRSZWZlcmVuY2UobmFtZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IpOworfQogCi0gIC8vIFdoZW4gdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCkgaXMgY2FsbGVkIHdpdGggYSBMSFMgdGFyZ2V0IHRoYXQgaXMKLSAgLy8gbm90IGNyZWF0ZWQgaW4gdGhlIGNhbGxpbmcgZGlyZWN0b3J5IGl0IGFkZHMgYSBkaXJlY3RvcnkgaWQgc3VmZml4Ci0gIC8vIHRoYXQgd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSBjYWxsaW5nIGRpcmVjdG9yeS4gIEl0IGlzIHRoYXQgc2NvcGUKLSAgLy8gaW4gd2hpY2ggdGhlIGl0ZW0gbmFtZSBpcyBtZWFuaW5nZnVsLiAgVGhpcyBjYXNlIGlzIHJlbGF0aXZlbHkgcmFyZQotICAvLyBzbyB3ZSBhbGxvY2F0ZSBhIHNlcGFyYXRlIHN0cmluZyBvbmx5IHdoZW4gdGhlIGRpcmVjdG9yeSBpZCBpcyBwcmVzZW50LgotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IG5hbWUuZmluZChDTUFLRV9ESVJFQ1RPUllfSURfU0VQKTsKLSAgc3RkOjpzdHJpbmcgcGxhaW5OYW1lOwotICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgLy8gV2Ugd2lsbCBsb29rIHVwIHRoZSBwbGFpbiBuYW1lIHdpdGhvdXQgdGhlIGRpcmVjdG9yeSBpZCBzdWZmaXguCi0gICAgcGxhaW5OYW1lID0gbmFtZS5zdWJzdHIoMCwgcG9zKTsKLQotICAgIC8vIFdlIHdpbGwgbG9vayB1cCBpbiB0aGUgc2NvcGUgb2YgdGhlIGRpcmVjdG9yeSBpZC4KLSAgICAvLyBJZiB3ZSBkbyBub3QgcmVjb2duaXplIHRoZSBpZCB0aGVuIGxlYXZlIHRoZSBvcmlnaW5hbAotICAgIC8vIHN5bnRheCBpbiBwbGFjZSB0byBwcm9kdWNlIGFuIGluZGljYXRpdmUgZXJyb3IgbGF0ZXIuCi0gICAgY21EaXJlY3RvcnlJZCBjb25zdCBkaXJJZCA9Ci0gICAgICBuYW1lLnN1YnN0cihwb3MgKyBzaXplb2YoQ01BS0VfRElSRUNUT1JZX0lEX1NFUCkgLSAxKTsKLSAgICBpZiAoY21Mb2NhbEdlbmVyYXRvciBjb25zdCogb3RoZXJMRyA9Ci0gICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kTG9jYWxHZW5lcmF0b3IoZGlySWQpKSB7Ci0gICAgICBsZyA9IG90aGVyTEc7Ci0gICAgICBsb29rdXBOYW1lID0gJnBsYWluTmFtZTsKLSAgICB9Ci0gIH0KLQorY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldE9yU3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpSZXNvbHZlVGFyZ2V0UmVmZXJlbmNlKAorICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcpIGNvbnN0Cit7CiAgIFRhcmdldE9yU3RyaW5nIHJlc29sdmVkOwogCi0gIGlmIChjbUdlbmVyYXRvclRhcmdldCogdGd0ID0gbGctPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSgqbG9va3VwTmFtZSkpIHsKKyAgaWYgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0Z3QgPSBsZy0+RmluZEdlbmVyYXRvclRhcmdldFRvVXNlKG5hbWUpKSB7CiAgICAgcmVzb2x2ZWQuVGFyZ2V0ID0gdGd0OwotICB9IGVsc2UgaWYgKGxvb2t1cE5hbWUgPT0gJnBsYWluTmFtZSkgewotICAgIHJlc29sdmVkLlN0cmluZyA9IHN0ZDo6bW92ZShwbGFpbk5hbWUpOwogICB9IGVsc2UgewogICAgIHJlc29sdmVkLlN0cmluZyA9IG5hbWU7CiAgIH0KQEAgLTY1OTUsMTAgKzY5MTcsMzAgQEAKIGNtTGlua0l0ZW0gY21HZW5lcmF0b3JUYXJnZXQ6OlJlc29sdmVMaW5rSXRlbSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0KSBjb25zdAogewotICBUYXJnZXRPclN0cmluZyByZXNvbHZlZCA9IHRoaXMtPlJlc29sdmVUYXJnZXRSZWZlcmVuY2UobmFtZSk7CisgIHJldHVybiB0aGlzLT5SZXNvbHZlTGlua0l0ZW0obmFtZSwgYnQsIHRoaXMtPkxvY2FsR2VuZXJhdG9yKTsKK30KKworY21MaW5rSXRlbSBjbUdlbmVyYXRvclRhcmdldDo6UmVzb2x2ZUxpbmtJdGVtKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGxnKSBjb25zdAoreworICBUYXJnZXRPclN0cmluZyByZXNvbHZlZCA9IHRoaXMtPlJlc29sdmVUYXJnZXRSZWZlcmVuY2UobmFtZSwgbGcpOwogCiAgIGlmICghcmVzb2x2ZWQuVGFyZ2V0KSB7Ci0gICAgcmV0dXJuIGNtTGlua0l0ZW0ocmVzb2x2ZWQuU3RyaW5nLCBidCk7CisgICAgcmV0dXJuIGNtTGlua0l0ZW0ocmVzb2x2ZWQuU3RyaW5nLCBmYWxzZSwgYnQpOworICB9CisKKyAgLy8gQ2hlY2sgZGVwcmVjYXRpb24sIGlzc3VlIG1lc3NhZ2Ugd2l0aCBgYnRgIGJhY2t0cmFjZS4KKyAgaWYgKHJlc29sdmVkLlRhcmdldC0+SXNEZXByZWNhdGVkKCkpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdzsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgdyA8PAorICAgICAgIlRoZSBsaWJyYXJ5IHRoYXQgaXMgYmVpbmcgbGlua2VkIHRvLCAiICA8PCByZXNvbHZlZC5UYXJnZXQtPkdldE5hbWUoKSA8PAorICAgICAgIiwgaXMgbWFya2VkIGFzIGJlaW5nIGRlcHJlY2F0ZWQgYnkgdGhlIG93bmVyLiAgVGhlIG1lc3NhZ2UgcHJvdmlkZWQgYnkgIgorICAgICAgInRoZSBkZXZlbG9wZXIgaXM6IFxuIiA8PCByZXNvbHZlZC5UYXJnZXQtPkdldERlcHJlY2F0aW9uKCkgPDwgIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIHcuc3RyKCksIGJ0KTsKICAgfQogCiAgIC8vIFNraXAgdGFyZ2V0cyB0aGF0IHdpbGwgbm90IHJlYWxseSBiZSBsaW5rZWQuICBUaGlzIGlzIHByb2JhYmx5IGEKQEAgLTY2MDYsMTAgKzY5NDgsMTAgQEAKICAgLy8gd2l0aGluIHRoZSBwcm9qZWN0LgogICBpZiAocmVzb2x2ZWQuVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmCiAgICAgICAhcmVzb2x2ZWQuVGFyZ2V0LT5Jc0V4ZWN1dGFibGVXaXRoRXhwb3J0cygpKSB7Ci0gICAgcmV0dXJuIGNtTGlua0l0ZW0ocmVzb2x2ZWQuVGFyZ2V0LT5HZXROYW1lKCksIGJ0KTsKKyAgICByZXR1cm4gY21MaW5rSXRlbShyZXNvbHZlZC5UYXJnZXQtPkdldE5hbWUoKSwgZmFsc2UsIGJ0KTsKICAgfQogCi0gIHJldHVybiBjbUxpbmtJdGVtKHJlc29sdmVkLlRhcmdldCwgYnQpOworICByZXR1cm4gY21MaW5rSXRlbShyZXNvbHZlZC5UYXJnZXQsIGZhbHNlLCBidCk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQREJEaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvclRhcmdldC5oIGIvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmgKaW5kZXggNDkzZWFmYy4uMTJkMzBjNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmgKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgpAQCAtNDUsNyArNDYsNyBAQAogCiAgIGJvb2wgSXNJbXBvcnRlZCgpIGNvbnN0OwogICBib29sIElzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSBjb25zdDsKLSAgY29uc3QgY2hhciogR2V0TG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRMb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICBzdGQ6OnZlY3RvcjxjbUN1c3RvbUNvbW1hbmQ+IGNvbnN0JiBHZXRQcmVCdWlsZENvbW1hbmRzKCkgY29uc3Q7CiAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIEdldFByZUxpbmtDb21tYW5kcygpIGNvbnN0OwpAQCAtNjQsNyArNjUsNyBAQAogICAvKiogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IGluIHRoZSBidWlsZCB0cmVlIHdpdGggYSBwbGFjZWhvbGRlcgogICAgICAgcmVmZXJlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIG5hdGl2ZSBidWlsZCBzeXN0ZW0uICBUaGlzCiAgICAgICBsb2NhdGlvbiBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBMT0NBVElPTiB0YXJnZXQgcHJvcGVydHkuICAqLwotICBjb25zdCBjaGFyKiBHZXRMb2NhdGlvbkZvckJ1aWxkKCkgY29uc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRMb2NhdGlvbkZvckJ1aWxkKCkgY29uc3Q7CiAKICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBHZXRMaW5rSW5mb3JtYXRpb24oCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAogICBzdHJ1Y3QgQWxsQ29uZmlnU291cmNlCiAgIHsKLSAgICBjbVNvdXJjZUZpbGUgY29uc3QqIFNvdXJjZTsKKyAgICBjbVNvdXJjZUZpbGUqIFNvdXJjZTsKICAgICBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZCBLaW5kOwogICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gQ29uZmlnczsKICAgfTsKQEAgLTEzNCw2ICsxMzUsMTAgQEAKICAgICAgIHBlci1zb3VyY2UgY29uZmlndXJhdGlvbnMgYXNzaWduZWQuICAqLwogICBzdGQ6OnZlY3RvcjxBbGxDb25maWdTb3VyY2U+IGNvbnN0JiBHZXRBbGxDb25maWdTb3VyY2VzKCkgY29uc3Q7CiAKKyAgLyoqIEdldCBhbGwgbGFuZ3VhZ2VzIHVzZWQgdG8gY29tcGlsZSBzb3VyY2VzIGluIGFueSBjb25maWd1cmF0aW9uLgorICAgICAgVGhpcyBleGNsdWRlcyB0aGUgbGFuZ3VhZ2VzIG9mIG9iamVjdHMgZnJvbSBvYmplY3QgbGlicmFyaWVzLiAgKi8KKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSBjb25zdDsKKwogICB2b2lkIEdldE9iamVjdFNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRPYmplY3ROYW1lKGNtU291cmNlRmlsZSBjb25zdCogZmlsZSk7CkBAIC0yNDUsNiArMjUwLDEzIEBACiAgIHN0ZDo6c3RyaW5nIEdldEFwcEJ1bmRsZURpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVuZGxlRGlyZWN0b3J5TGV2ZWwgbGV2ZWwpIGNvbnN0OwogCisgIC8qKiBSZXR1cm4gd2hldGhlciB0aGlzIHRhcmdldCBpcyBtYXJrZWQgYXMgZGVwcmVjYXRlZCBieSB0aGUKKyAgICAgIG1haW50YWluZXIgICovCisgIGJvb2wgSXNEZXByZWNhdGVkKCkgY29uc3Q7CisKKyAgLyoqIFJldHVybnMgdGhlIGRlcHJlY2F0aW9uIG1lc3NhZ2UgcHJvdmlkZWQgYnkgdGhlIG1haW50YWluZXIgKi8KKyAgc3RkOjpzdHJpbmcgR2V0RGVwcmVjYXRpb24oKSBjb25zdDsKKwogICAvKiogUmV0dXJuIHdoZXRoZXIgdGhpcyB0YXJnZXQgaXMgYW4gZXhlY3V0YWJsZSBCdW5kbGUsIGEgZnJhbWV3b3JrCiAgICAgICBvciBDRkJ1bmRsZSBvbiBBcHBsZS4gICovCiAgIGJvb2wgSXNCdW5kbGVPbkFwcGxlKCkgY29uc3Q7CkBAIC0yNzQsMTEgKzI4NiwxMiBAQAogCiAgIC8qKiBSZXR1cm4gdGhlIGluc3RhbGwgbmFtZSBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgaW4gdGhlCiAgICAqIGluc3RhbGwgdHJlZS4gIEZvciBleGFtcGxlOiAiXEBycGF0aC8iIG9yICJcQGxvYWRlcl9wYXRoLyIuICovCi0gIHN0ZDo6c3RyaW5nIEdldEluc3RhbGxOYW1lRGlyRm9ySW5zdGFsbFRyZWUoKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgaW5zdGFsbFByZWZpeCkgY29uc3Q7CiAKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBHZXRCYWNrdHJhY2UoKSBjb25zdDsKIAotICBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+IGNvbnN0JiBHZXRVdGlsaXRpZXMoKSBjb25zdDsKKyAgc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+IGNvbnN0JiBHZXRVdGlsaXRpZXMoKSBjb25zdDsKIAogICBib29sIExpbmtMYW5ndWFnZVByb3BhZ2F0ZXNUb0RlcGVuZGVudHMoKSBjb25zdAogICB7CkBAIC0zNDQsNyArMzU3LDYgQEAKICAgfTsKIAogICBMaW5rQ2xvc3VyZSBjb25zdCogR2V0TGlua0Nsb3N1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7Ci0gIHZvaWQgQ29tcHV0ZUxpbmtDbG9zdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIExpbmtDbG9zdXJlJiBsYykgY29uc3Q7CiAKICAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIEdldExpbmtJbXBsZW1lbnRhdGlvbigKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKQEAgLTM2NSw5ICszNzcsMTQgQEAKICAgICBjbUdlbmVyYXRvclRhcmdldCogVGFyZ2V0ID0gbnVsbHB0cjsKICAgfTsKICAgVGFyZ2V0T3JTdHJpbmcgUmVzb2x2ZVRhcmdldFJlZmVyZW5jZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgY29uc3Q7CisgIFRhcmdldE9yU3RyaW5nIFJlc29sdmVUYXJnZXRSZWZlcmVuY2Uoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcpIGNvbnN0OwogCiAgIGNtTGlua0l0ZW0gUmVzb2x2ZUxpbmtJdGVtKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBidCkgY29uc3Q7CisgIGNtTGlua0l0ZW0gUmVzb2x2ZUxpbmtJdGVtKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcpIGNvbnN0OwogCiAgIC8vIENvbXB1dGUgdGhlIHNldCBvZiBsYW5ndWFnZXMgY29tcGlsZWQgYnkgdGhlIHRhcmdldC4gIFRoaXMgaXMKICAgLy8gY29tcHV0ZWQgZXZlcnkgdGltZSBpdCBpcyBjYWxsZWQgYmVjYXVzZSB0aGUgbGFuZ3VhZ2VzIGNhbiBjaGFuZ2UKQEAgLTU3MSw2ICs1ODgsOSBAQAogICAvKiogR2V0IHRhcmdldCBmaWxlIHBvc3RmaXggKi8KICAgc3RkOjpzdHJpbmcgR2V0RmlsZVBvc3RmaXgoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKKyAgLyoqIEdldCBmcmFtZXdvcmsgbXVsdGktY29uZmlnLXNwZWNpZmljIHBvc3RmaXggKi8KKyAgc3RkOjpzdHJpbmcgR2V0RnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworCiAgIC8qKiBDbGVhcnMgY2FjaGVkIG1ldGEgZGF0YSBmb3IgbG9jYWwgYW5kIGV4dGVybmFsIHNvdXJjZSBmaWxlcy4KICAgICogVGhlIG1ldGEgZGF0YSB3aWxsIGJlIHJlY29tcHV0ZWQgb24gZGVtYW5kLgogICAgKi8KQEAgLTcwMSw3ICs3MjEsOCBAQAogCiAgIHN0ZDo6c3RyaW5nIEV2YWx1YXRlSW50ZXJmYWNlUHJvcGVydHkoCiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlclBhcmVudCkgY29uc3Q7CisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlclBhcmVudCwKKyAgICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5ID0gdHJ1ZSkgY29uc3Q7CiAKICAgYm9vbCBIYXZlSW5zdGFsbFRyZWVSUEFUSChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIApAQCAtNzM2LDE0ICs3NTcsMjIgQEAKICAgdm9pZCBHZXRUYXJnZXRWZXJzaW9uKGludCYgbWFqb3IsIGludCYgbWlub3IpIGNvbnN0OwogCiAgIC8qKiBHZXQgdGhlIHRhcmdldCBtYWpvciwgbWlub3IsIGFuZCBwYXRjaCB2ZXJzaW9uIG51bWJlcnMKLSAgICAgIGludGVycHJldGVkIGZyb20gdGhlIFZFUlNJT04gb3IgU09WRVJTSU9OIHByb3BlcnR5LiAgVmVyc2lvbiAwCisgICAgICBpbnRlcnByZXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS4gIFZlcnNpb24gMAogICAgICAgaXMgcmV0dXJuZWQgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQgb3IgY2Fubm90IGJlIHBhcnNlZC4gICovCi0gIHZvaWQgR2V0VGFyZ2V0VmVyc2lvbihib29sIHNvdmVyc2lvbiwgaW50JiBtYWpvciwgaW50JiBtaW5vciwKKyAgdm9pZCBHZXRUYXJnZXRWZXJzaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eSwgaW50JiBtYWpvciwgaW50JiBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgcGF0Y2gpIGNvbnN0OwogCisgIC8qKiBHZXQgdGhlIHRhcmdldCBtYWpvciwgbWlub3IsIGFuZCBwYXRjaCB2ZXJzaW9uIG51bWJlcnMKKyAgICAgIGludGVycHJldGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5IGFuZCBpZiBlbXB0eSB1c2UgdGhlCisgICAgICBmYWxsYmFjayBwcm9wZXJ0eS4gIFZlcnNpb24gMCBpcyByZXR1cm5lZCBpZiB0aGUgcHJvcGVydHkgaXMKKyAgICAgIG5vdCBzZXQgb3IgY2Fubm90IGJlIHBhcnNlZC4gICovCisgIHZvaWQgR2V0VGFyZ2V0VmVyc2lvbkZhbGxiYWNrKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZhbGxiYWNrX3Byb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1ham9yLCBpbnQmIG1pbm9yLCBpbnQmIHBhdGNoKSBjb25zdDsKKwogICBzdGQ6OnN0cmluZyBHZXRGb3J0cmFuTW9kdWxlRGlyZWN0b3J5KHN0ZDo6c3RyaW5nIGNvbnN0JiB3b3JraW5nX2RpcikgY29uc3Q7CiAKLSAgY29uc3QgY2hhciogR2V0U291cmNlc1Byb3BlcnR5KCkgY29uc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRTb3VyY2VzUHJvcGVydHkoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgdm9pZCBBZGRTb3VyY2VDb21tb24oY29uc3Qgc3RkOjpzdHJpbmcmIHNyYywgYm9vbCBiZWZvcmUgPSBmYWxzZSk7CkBAIC03NjAsNiArNzg5LDcgQEAKICAgfTsKICAgdXNpbmcgU291cmNlRW50cmllc1R5cGUgPSBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUgY29uc3QqLCBTb3VyY2VFbnRyeT47CiAgIFNvdXJjZUVudHJpZXNUeXBlIFNvdXJjZURlcGVuZHM7CisgIG11dGFibGUgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IFZpc2l0ZWRDb25maWdzRm9yT2JqZWN0czsKICAgbXV0YWJsZSBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUgY29uc3QqLCBzdGQ6OnN0cmluZz4gT2JqZWN0czsKICAgc3RkOjpzZXQ8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gRXhwbGljaXRPYmplY3ROYW1lOwogICBtdXRhYmxlIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IFN5c3RlbUluY2x1ZGVzQ2FjaGU7CkBAIC03ODgsNiArODE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBvdXRQcmVmaXgsIHN0ZDo6c3RyaW5nJiBvdXRCYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIG91dFN1ZmZpeCkgY29uc3Q7CiAKKyAgbXV0YWJsZSBzdGQ6OnN0cmluZyBMaW5rZXJMYW5ndWFnZTsKICAgdXNpbmcgTGlua0Nsb3N1cmVNYXBUeXBlID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIExpbmtDbG9zdXJlPjsKICAgbXV0YWJsZSBMaW5rQ2xvc3VyZU1hcFR5cGUgTGlua0Nsb3N1cmVNYXA7CiAKQEAgLTgxNiwxMiArODQ3LDE2IEBACiAgIG11dGFibGUgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENvbXBhdGlibGVJbnRlcmZhY2VzPiBDb21wYXRpYmxlSW50ZXJmYWNlc01hcDsKIAogICB1c2luZyBjbVRhcmdldExpbmtJbmZvcm1hdGlvbk1hcCA9Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbio+OworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21wdXRlTGlua0luZm9ybWF0aW9uPj47CiAgIG11dGFibGUgY21UYXJnZXRMaW5rSW5mb3JtYXRpb25NYXAgTGlua0luZm9ybWF0aW9uOwogCi0gIHZvaWQgQ2hlY2tQcm9wZXJ0eUNvbXBhdGliaWxpdHkoY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBpbmZvLAorICB2b2lkIENoZWNrUHJvcGVydHlDb21wYXRpYmlsaXR5KGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYgaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAorICB2b2lkIENvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBMaW5rQ2xvc3VyZSYgbGMpIGNvbnN0OworICBib29sIENvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBMaW5rQ2xvc3VyZSYgbGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3Q7CisKICAgc3RydWN0IExpbmtJbXBsQ2xvc3VyZSA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+CiAgIHsKICAgICBib29sIERvbmUgPSBmYWxzZTsKQEAgLTg0MCw2ICs4NzUsMTcgQEAKICAgc3RkOjpzdHJpbmcgR2V0TGlua0ludGVyZmFjZURlcGVuZGVudFN0cmluZ0FzQm9vbFByb3BlcnR5KAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAorICBmcmllbmQgY2xhc3MgY21UYXJnZXRDb2xsZWN0TGlua0xhbmd1YWdlczsKKyAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBHZXRMaW5rSW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZFRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3Q7CisgIHZvaWQgQ29tcHV0ZUxpbmtJbnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU9wdGlvbmFsTGlua0ludGVyZmFjZSYgaWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIGhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdDsKKyAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIEdldExpbmtJbXBsZW1lbnRhdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3Q7CisKICAgLy8gQ2FjaGUgaW1wb3J0IGluZm9ybWF0aW9uIGZyb20gcHJvcGVydGllcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uLgogICBzdHJ1Y3QgSW1wb3J0SW5mbwogICB7CkBAIC04NjYsOSArOTEyLDEwIEBACiAgICAgICB0aGUgbGluayBkZXBlbmRlbmNpZXMgb2YgdGhpcyB0YXJnZXQuICAqLwogICBzdGQ6OnN0cmluZyBDaGVja0NNUDAwMDQoc3RkOjpzdHJpbmcgY29uc3QmIGl0ZW0pIGNvbnN0OwogCi0gIGNtTGlua0ludGVyZmFjZSBjb25zdCogR2V0SW1wb3J0TGlua0ludGVyZmFjZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZCwKLSAgICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSBjb25zdDsKKyAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBHZXRJbXBvcnRMaW5rSW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlY29uZFBhc3MgPSBmYWxzZSkgY29uc3Q7CiAKICAgdXNpbmcgS2luZGVkU291cmNlc01hcFR5cGUgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgS2luZGVkU291cmNlcz47CiAgIG11dGFibGUgS2luZGVkU291cmNlc01hcFR5cGUgS2luZGVkU291cmNlc01hcDsKQEAgLTg4MCwxNiArOTI3LDIwIEBACiAKICAgbXV0YWJsZSBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IE1heWJlSW50ZXJmYWNlUHJvcGVydHlFeGlzdHM7CiAgIGJvb2wgTWF5YmVIYXZlSW50ZXJmYWNlUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCkgY29uc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSBjb25zdDsKIAotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gSW5jbHVkZURpcmVjdG9yaWVzRW50cmllczsKLSAgc3RkOjp2ZWN0b3I8VGFyZ2V0UHJvcGVydHlFbnRyeSo+IENvbXBpbGVPcHRpb25zRW50cmllczsKLSAgc3RkOjp2ZWN0b3I8VGFyZ2V0UHJvcGVydHlFbnRyeSo+IENvbXBpbGVGZWF0dXJlc0VudHJpZXM7Ci0gIHN0ZDo6dmVjdG9yPFRhcmdldFByb3BlcnR5RW50cnkqPiBDb21waWxlRGVmaW5pdGlvbnNFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gTGlua09wdGlvbnNFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gTGlua0RpcmVjdG9yaWVzRW50cmllczsKLSAgc3RkOjp2ZWN0b3I8VGFyZ2V0UHJvcGVydHlFbnRyeSo+IFByZWNvbXBpbGVIZWFkZXJzRW50cmllczsKLSAgc3RkOjp2ZWN0b3I8VGFyZ2V0UHJvcGVydHlFbnRyeSo+IFNvdXJjZUVudHJpZXM7CisgIHVzaW5nIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgPQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5Pj47CisKKyAgVGFyZ2V0UHJvcGVydHlFbnRyeVZlY3RvciBJbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzOworICBUYXJnZXRQcm9wZXJ0eUVudHJ5VmVjdG9yIENvbXBpbGVPcHRpb25zRW50cmllczsKKyAgVGFyZ2V0UHJvcGVydHlFbnRyeVZlY3RvciBDb21waWxlRmVhdHVyZXNFbnRyaWVzOworICBUYXJnZXRQcm9wZXJ0eUVudHJ5VmVjdG9yIENvbXBpbGVEZWZpbml0aW9uc0VudHJpZXM7CisgIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgTGlua09wdGlvbnNFbnRyaWVzOworICBUYXJnZXRQcm9wZXJ0eUVudHJ5VmVjdG9yIExpbmtEaXJlY3Rvcmllc0VudHJpZXM7CisgIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgUHJlY29tcGlsZUhlYWRlcnNFbnRyaWVzOworICBUYXJnZXRQcm9wZXJ0eUVudHJ5VmVjdG9yIFNvdXJjZUVudHJpZXM7CiAgIG11dGFibGUgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IExpbmtJbXBsaWNpdE51bGxQcm9wZXJ0aWVzOwogICBtdXRhYmxlIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gUGNoSGVhZGVyczsKICAgbXV0YWJsZSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IFBjaFNvdXJjZXM7CkBAIC05MDAsMTIgKzk1MSwxNiBAQAogCiAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gVW5pdHlCYXRjaGVkU291cmNlRmlsZXM7CiAKKyAgYm9vbCBJc0xpbmtMb29rdXBTY29wZShzdGQ6OnN0cmluZyBjb25zdCYgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiYgbGcpIGNvbnN0OworCiAgIHZvaWQgRXhwYW5kTGlua0l0ZW1zKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5LAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiYgaXRlbXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24pIGNvbnN0OworICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24pIGNvbnN0OwogICB2b2lkIExvb2t1cExpbmtJdGVtcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIG5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBidCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21MaW5rSXRlbT4mIGl0ZW1zKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldENNYWtlUHJvcGVydHlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUdldENNYWtlUHJvcGVydHlDb21tYW5kLmN4eAppbmRleCBmZjRlMzEyLi40YTk1MDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZXRDTWFrZVByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0Q01ha2VQcm9wZXJ0eUNvbW1hbmQuY3h4CkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRJbnN0YWxsQ29tcG9uZW50cygpOwogICAgIG91dHB1dCA9IGNtSm9pbigqY29tcG9uZW50cywgIjsiKTsKICAgfSBlbHNlIHsKLSAgICBjb25zdCBjaGFyKiBwcm9wID0gbnVsbHB0cjsKKyAgICBjbVByb3AgcHJvcCA9IG51bGxwdHI7CiAgICAgaWYgKCFhcmdzWzFdLmVtcHR5KCkpIHsKICAgICAgIHByb3AgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eShhcmdzWzFdKTsKICAgICB9CiAgICAgaWYgKHByb3ApIHsKLSAgICAgIG91dHB1dCA9IHByb3A7CisgICAgICBvdXRwdXQgPSAqcHJvcDsKICAgICB9CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2V0RGlyZWN0b3J5UHJvcGVydHlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUdldERpcmVjdG9yeVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggNjQ0MzhkNS4uNjViMzQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0RGlyZWN0b3J5UHJvcGVydHlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21HZXREaXJlY3RvcnlQcm9wZXJ0eUNvbW1hbmQuY3h4CkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgotI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogbmFtZXNwYWNlIHsKQEAgLTM3LDE0ICszNiw4IEBACiAgICAgICAgICJESVJFQ1RPUlkgYXJndW1lbnQgcHJvdmlkZWQgd2l0aG91dCBzdWJzZXF1ZW50IGFyZ3VtZW50cyIpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBzdGQ6OnN0cmluZyBzZCA9ICppOwotICAgIC8vIG1ha2Ugc3VyZSB0aGUgc3RhcnQgZGlyIGlzIGEgZnVsbCBwYXRoCi0gICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChzZCkpIHsKLSAgICAgIHNkID0gY21TdHJDYXQoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAnLycsICppKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9jYWwgZ2VuZXJhdG9ycyBhcmUgYXNzb2NpYXRlZCB3aXRoIGNvbGxhcHNlZCBwYXRocy4KLSAgICBzZCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc2QpOworICAgIHN0ZDo6c3RyaW5nIHNkID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICppLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgICAgLy8gbG9va3VwIHRoZSBtYWtlZmlsZSBmcm9tIHRoZSBkaXJlY3RvcnkgbmFtZQogICAgIGRpciA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kTWFrZWZpbGUoc2QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2V0RmlsZW5hbWVDb21wb25lbnRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUdldEZpbGVuYW1lQ29tcG9uZW50Q29tbWFuZC5jeHgKaW5kZXggN2Q5MWE3NS4uODExNDIxYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0RmlsZW5hbWVDb21wb25lbnRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21HZXRGaWxlbmFtZUNvbXBvbmVudENvbW1hbmQuY3h4CkBAIC0xMjAsMTEgKzEyMCwxMSBAQAogICBpZiAoYXJncy5zaXplKCkgPj0gNCAmJiBhcmdzLmJhY2soKSA9PSAiQ0FDSEUiKSB7CiAgICAgaWYgKCFwcm9ncmFtQXJncy5lbXB0eSgpICYmICFzdG9yZUFyZ3MuZW1wdHkoKSkgewogICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgICAgICBzdG9yZUFyZ3MsIHByb2dyYW1BcmdzLmNfc3RyKCksICIiLAorICAgICAgICBzdG9yZUFyZ3MsIHByb2dyYW1BcmdzLCAiIiwKICAgICAgICAgYXJnc1syXSA9PSAiUEFUSCIgPyBjbVN0YXRlRW51bXM6OkZJTEVQQVRIIDogY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogICAgIH0KICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgICBhcmdzLmZyb250KCksIHJlc3VsdC5jX3N0cigpLCAiIiwKKyAgICAgIGFyZ3MuZnJvbnQoKSwgcmVzdWx0LCAiIiwKICAgICAgIGFyZ3NbMl0gPT0gIlBBVEgiID8gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCA6IGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgfSBlbHNlIHsKICAgICBpZiAoIXByb2dyYW1BcmdzLmVtcHR5KCkgJiYgIXN0b3JlQXJncy5lbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtR2V0UHJvcGVydHlDb21tYW5kLmN4eAppbmRleCA5NDdkODkzLi4xZDhmMGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUdldFByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTI0MSw4ICsyNDEsOSBAQAogCiAgIC8vIEdldCB0aGUgcHJvcGVydHkuCiAgIGNtYWtlKiBjbSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKTsKKyAgY21Qcm9wIHAgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcGVydHlOYW1lKTsKICAgcmV0dXJuIFN0b3JlUmVzdWx0KGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIpOwogfQogCiBib29sIEhhbmRsZURpcmVjdG9yeU1vZGUoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCkBAIC0yNTYsMTQgKzI1Nyw4IEBACiAgIGlmICghbmFtZS5lbXB0eSgpKSB7CiAgICAgLy8gQ29uc3RydWN0IHRoZSBkaXJlY3RvcnkgbmFtZS4gIEludGVycHJldCByZWxhdGl2ZSBwYXRocyB3aXRoCiAgICAgLy8gcmVzcGVjdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgc3RkOjpzdHJpbmcgZGlyID0gbmFtZTsKLSAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGRpcikpIHsKLSAgICAgIGRpciA9Ci0gICAgICAgIGNtU3RyQ2F0KHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSwgJy8nLCBuYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9jYWwgZ2VuZXJhdG9ycyBhcmUgYXNzb2NpYXRlZCB3aXRoIGNvbGxhcHNlZCBwYXRocy4KLSAgICBkaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGRpcik7CisgICAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgIG5hbWUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CiAKICAgICAvLyBMb29rdXAgdGhlIGdlbmVyYXRvci4KICAgICBtZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kTWFrZWZpbGUoZGlyKTsKQEAgLTM5MywxMiArMzg4LDEzIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY29uc3QgY2hhciogdmFsdWUgPSBudWxscHRyOworICBjbVByb3AgdmFsdWUgPSBudWxscHRyOwogICBpZiAoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKG5hbWUpKSB7CiAgICAgdmFsdWUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoCiAgICAgICBuYW1lLCBwcm9wZXJ0eU5hbWUpOwogICB9Ci0gIFN0b3JlUmVzdWx0KGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsIHZhbHVlKTsKKyAgU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+Y19zdHIoKSA6IG51bGxwdHIpOwogICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDhlNDM1MmUuLmRlYjcyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdoc011bHRpVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAgIC8vIFRlbGwgdGhlIGdsb2JhbCBnZW5lcmF0b3IgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgZmlsZQogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk5hbWUpOwogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoCiAgICAgIkdFTkVSQVRPUl9GSUxFX05BTUVfRVhUIiwgR2hzTXVsdGlHcGo6OkdldEdwalRhZyh0aGlzLT5UYWdUeXBlKSk7CiAKQEAgLTE2NSwxMyArMTY1LDE1IEBACiAgICAgb3V0cGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KGNvbmZpZyk7CiAgICAgb3V0cGF0aCA9CiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgocm9vdHBhdGgsIG91dHBhdGgpOwotICAgIGZvdXQgPDwgIiAgICA6YmluRGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiIiA8PCBzdGQ6OmVuZGw7Ci0gICAgZm91dCA8PCAiICAgIC1vIFwiIiA8PCB0aGlzLT5UYXJnZXROYW1lUmVhbCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgZm91dCA8PCAiICAgIDpiaW5EaXJSZWxhdGl2ZT1cIiIgPDwgb3V0cGF0aCA8PCAiXCJcbiIKKyAgICAgICAgICAgICIgICAgLW8gXCIiIDw8IHRoaXMtPlRhcmdldE5hbWVSZWFsIDw8ICJcIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgfQogCiAgIC8vIHNldCB0YXJnZXQgb2JqZWN0IGZpbGUgZGVzdGluYXRpb24KICAgb3V0cGF0aCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKLSAgZm91dCA8PCAiICAgIDpvdXRwdXREaXJSZWxhdGl2ZT1cIiIgPDwgb3V0cGF0aCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiICAgIDpvdXRwdXREaXJSZWxhdGl2ZT1cIiIgPDwgb3V0cGF0aCA8PCAiXCJcbiI7CiB9CiAKIHZvaWQgY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvcjo6U2V0Q29tcGlsZXJGbGFncyhzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLApAQCAtMTgwLDE1ICsxODIsMTIgQEAKICAgYXV0byBpID0gdGhpcy0+RmxhZ3NCeUxhbmd1YWdlLmZpbmQobGFuZ3VhZ2UpOwogICBpZiAoaSA9PSB0aGlzLT5GbGFnc0J5TGFuZ3VhZ2UuZW5kKCkpIHsKICAgICBzdGQ6OnN0cmluZyBmbGFnczsKLSAgICBjb25zdCBjaGFyKiBsYW5nID0gbGFuZ3VhZ2UuY19zdHIoKTsKLQotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRMYW5ndWFnZUZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKLQotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDTVAwMDE4RmxhZ3MoZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZExhbmd1YWdlRmxhZ3MoZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgY29uZmlnKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQ01QMDAxOEZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgY29uZmlnKTsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkVmlzaWJpbGl0eVByZXNldEZsYWdzKAotICAgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZyk7CisgICAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5ndWFnZSk7CiAKICAgICAvLyBBcHBlbmQgb2xkLXN0eWxlIHByZXByb2Nlc3NvciBkZWZpbml0aW9uIGZsYWdzLgogICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5lRmxhZ3MoKSAhPSAiICIpIHsKQEAgLTE5Nyw4ICsxOTYsOCBAQAogICAgIH0KIAogICAgIC8vIEFkZCB0YXJnZXQtc3BlY2lmaWMgZmxhZ3MuCi0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENvbXBpbGVPcHRpb25zKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENvbXBpbGVPcHRpb25zKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLCBjb25maWcpOwogCiAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSBlbnRyeShsYW5ndWFnZSwgZmxhZ3MpOwogICAgIGkgPSB0aGlzLT5GbGFnc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKQEAgLTIxMSwxMyArMjEwLDEyIEBACiAgIGF1dG8gaSA9IHRoaXMtPkRlZmluZXNCeUxhbmd1YWdlLmZpbmQobGFuZ3VhZ2UpOwogICBpZiAoaSA9PSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5lbmQoKSkgewogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBkZWZpbmVzOwotICAgIGNvbnN0IGNoYXIqIGxhbmcgPSBsYW5ndWFnZS5jX3N0cigpOwogICAgIC8vIEFkZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZm9yIHRoaXMgdGFyZ2V0IGFuZCBjb25maWd1cmF0aW9uLgogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREZWZpbmVzKHRoaXMtPkdlbmVyYXRvclRhcmdldCwgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLCBkZWZpbmVzKTsKIAogICAgIHN0ZDo6c3RyaW5nIGRlZmluZXNTdHJpbmc7Ci0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkpvaW5EZWZpbmVzKGRlZmluZXMsIGRlZmluZXNTdHJpbmcsIGxhbmcpOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Kb2luRGVmaW5lcyhkZWZpbmVzLCBkZWZpbmVzU3RyaW5nLCBsYW5ndWFnZSk7CiAKICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojp2YWx1ZV90eXBlIGVudHJ5KGxhbmd1YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1N0cmluZyk7CkBAIC0yMzUsOCArMjMzLDggQEAKICAgICBpZiAoIWZsYWdzQnlMYW5nSS0+c2Vjb25kLmVtcHR5KCkpIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBnaHNDb21wRmxhZ3MgPQogICAgICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZUFyZ3VtZW50cyhmbGFnc0J5TGFuZ0ktPnNlY29uZCk7Ci0gICAgICBmb3IgKGF1dG8mIGYgOiBnaHNDb21wRmxhZ3MpIHsKLSAgICAgICAgZm91dCA8PCAiICAgICIgPDwgZiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBmIDogZ2hzQ29tcEZsYWdzKSB7CisgICAgICAgIGZvdXQgPDwgIiAgICAiIDw8IGYgPDwgJ1xuJzsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI0OSw3ICsyNDcsNyBAQAogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENvbXBpbGVEZWZpbml0aW9ucyhjb21waWxlRGVmaW5pdGlvbnMsIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21waWxlRGVmaW5pdGlvbiA6IGNvbXBpbGVEZWZpbml0aW9ucykgewotICAgIGZvdXQgPDwgIiAgICAtRCIgPDwgY29tcGlsZURlZmluaXRpb24gPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgIiAgICAtRCIgPDwgY29tcGlsZURlZmluaXRpb24gPDwgJ1xuJzsKICAgfQogfQogCkBAIC0yNjIsNyArMjYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgY29uZmlnKTsKIAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbmNsdWRlIDogaW5jbHVkZXMpIHsKLSAgICBmb3V0IDw8ICIgICAgLUlcIiIgPDwgaW5jbHVkZSA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICIgICAgLUlcIiIgPDwgaW5jbHVkZSA8PCAiXCJcbiI7CiAgIH0KIH0KIApAQCAtMjc5LDEwICsyNzcsMTAgQEAKICAgc3RkOjpzdHJpbmcgZnJhbWV3b3JrUGF0aDsKICAgc3RkOjpzdHJpbmcgbGlua1BhdGg7CiAKLSAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlcigKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlciA9CiAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKLSAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpOwogCiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXRGbGFncygKICAgICBsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBjb25maWcsIGxpbmtMaWJyYXJpZXMsIGZsYWdzLCBsaW5rRmxhZ3MsCkBAIC0yOTAsMTUgKzI4OCwxNSBAQAogCiAgIC8vIHdyaXRlIG91dCBsaW5rIG9wdGlvbnMKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxvcHRzID0gY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMobGlua0ZsYWdzKTsKLSAgZm9yIChhdXRvJiBsIDogbG9wdHMpIHsKLSAgICBmb3V0IDw8ICIgICAgIiA8PCBsIDw8IHN0ZDo6ZW5kbDsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbCA6IGxvcHRzKSB7CisgICAgZm91dCA8PCAiICAgICIgPDwgbCA8PCAnXG4nOwogICB9CiAKICAgLy8gd3JpdGUgb3V0IGxpbmsgc2VhcmNoIHBhdGhzCiAgIC8vIG11c3QgYmUgcXVvdGVkIGZvciBwYXRocyB0aGF0IGNvbnRhaW4gc3BhY2VzCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBscGF0aCA9IGNtU3lzdGVtVG9vbHM6OlBhcnNlQXJndW1lbnRzKGxpbmtQYXRoKTsKLSAgZm9yIChhdXRvJiBsIDogbHBhdGgpIHsKLSAgICBmb3V0IDw8ICIgICAgLUxcIiIgPDwgbCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbCA6IGxwYXRoKSB7CisgICAgZm91dCA8PCAiICAgIC1MXCIiIDw8IGwgPDwgIlwiXG4iOwogICB9CiAKICAgLy8gd3JpdGUgb3V0IGxpbmsgbGlicwpAQCAtMzA3LDEyICszMDUsMTIgQEAKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGxpYnMgPQogICAgIGNtU3lzdGVtVG9vbHM6OlBhcnNlQXJndW1lbnRzKGxpbmtMaWJyYXJpZXMpOwotICBmb3IgKGF1dG8mIGwgOiBsbGlicykgeworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBsIDogbGxpYnMpIHsKICAgICBpZiAobC5jb21wYXJlKDAsIDIsICItbCIpID09IDApIHsKLSAgICAgIGZvdXQgPDwgIiAgICBcIiIgPDwgbCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIiAgICBcIiIgPDwgbCA8PCAiXCJcbiI7CiAgICAgfSBlbHNlIHsKICAgICAgIHN0ZDo6c3RyaW5nIHJsID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChsLCBjYmQpOwotICAgICAgZm91dCA8PCAiICAgIC1sXCIiIDw8IHJsIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCAiICAgIC1sXCIiIDw8IHJsIDw8ICJcIlxuIjsKICAgICB9CiAgIH0KIH0KQEAgLTM1MywxMyArMzUxLDEyIEBACiAgICAgdGhpcy0+V3JpdGVDdXN0b21Db21tYW5kc0hlbHBlcihmLCBjY2cpOwogICAgIGYuQ2xvc2UoKTsKICAgICBpZiAodGhpcy0+VGFnVHlwZSAhPSBHaHNNdWx0aUdwajo6Q1VTVE9NX1RBUkdFVCkgewotICAgICAgZm91dCA8PCAiICAgIDoiIDw8IGNtZCA8PCAiPVwiIiA8PCBmbmFtZSA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIiAgICA6IiA8PCBjbWQgPDwgIj1cIiIgPDwgZm5hbWUgPDwgIlwiXG4iOwogICAgIH0gZWxzZSB7Ci0gICAgICBmb3V0IDw8IGZuYW1lIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIGZvdXQgPDwgIiAgICA6b3V0cHV0TmFtZT1cIiIgPDwgZm5hbWUgPDwgIi5ydWxlXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgZm5hbWUgPDwgIlxuICAgIDpvdXRwdXROYW1lPVwiIiA8PCBmbmFtZSA8PCAiLnJ1bGVcIlxuIjsKICAgICB9CiAgICAgZm9yIChhdXRvJiBieXAgOiBjY2cuR2V0Qnlwcm9kdWN0cygpKSB7Ci0gICAgICBmb3V0IDw8ICIgICAgOmV4dHJhT3V0cHV0RmlsZT1cIiIgPDwgYnlwIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCAiICAgIDpleHRyYU91dHB1dEZpbGU9XCIiIDw8IGJ5cCA8PCAiXCJcbiI7CiAgICAgfQogICB9CiB9CkBAIC00NTEsOCArNDQ4LDcgQEAKIAogICAvLyBwdXNoIGJhY2sgdGhlIGN1c3RvbSBjb21tYW5kcwogICBmb3IgKGF1dG8gY29uc3QmIGMgOiBjbWRMaW5lcykgewotICAgIGZvdXQgPDwgYyA8PCBzdGQ6OmVuZGw7Ci0gICAgZm91dCA8PCBjaGVja19lcnJvciA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCBjIDw8ICdcbicgPDwgY2hlY2tfZXJyb3IgPDwgJ1xuJzsKICAgfQogfQogCkBAIC00NjMsOCArNDU5LDggQEAKICAgY29uc3QgY2hhciogcHJvcCA9IHNmLT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CiAgIGlmIChwcm9wKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpc3QgPSBjbUV4cGFuZGVkTGlzdChwcm9wKTsKLSAgICBmb3IgKGF1dG8mIHAgOiBsaXN0KSB7Ci0gICAgICBmb3V0IDw8ICIgICAgIiA8PCBwcm9wRmxhZyA8PCBwIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBwIDogbGlzdCkgeworICAgICAgZm91dCA8PCAiICAgICIgPDwgcHJvcEZsYWcgPDwgcCA8PCAnXG4nOwogICAgIH0KICAgfQogfQpAQCAtNDgzLDcgKzQ3OSw3IEBACiAgIC8qIGZvciBlYWNoIHNvdXJjZSBmaWxlIGFzc2lnbiBpdCB0byBpdHMgZ3JvdXAgKi8KICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+PiBncm91cEZpbGVzOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZ3JvdXBOYW1lczsKLSAgZm9yIChhdXRvJiBzZiA6IHNvdXJjZXMpIHsKKyAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogc291cmNlcykgewogICAgIGNtU291cmNlR3JvdXAqIHNvdXJjZUdyb3VwID0KICAgICAgIHRoaXMtPk1ha2VmaWxlLT5GaW5kU291cmNlR3JvdXAoc2YtPlJlc29sdmVGdWxsUGF0aCgpLCBzb3VyY2VHcm91cHMpOwogICAgIHN0ZDo6c3RyaW5nIGduID0gc291cmNlR3JvdXAtPkdldEZ1bGxOYW1lKCk7CkBAIC01NzksMTIgKzU3NSwxMiBAQAogCiAgICAgaWYgKHVzZVByb2plY3RGaWxlKSB7CiAgICAgICBpZiAoc2cuZW1wdHkoKSkgewotICAgICAgICAqZm91dCA8PCAie2NvbW1lbnR9IE90aGVycyIgPDwgc3RkOjplbmRsOworICAgICAgICAqZm91dCA8PCAie2NvbW1lbnR9IE90aGVycyIgPDwgJ1xuJzsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpmb3V0IDw8ICJ7Y29tbWVudH0gIiA8PCBzZyA8PCBzdGQ6OmVuZGw7CisgICAgICAgICpmb3V0IDw8ICJ7Y29tbWVudH0gIiA8PCBzZyA8PCAnXG4nOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoc2cuZW1wdHkoKSkgewotICAgICAgKmZvdXQgPDwgIntjb21tZW50fSBPdGhlcnMiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICpmb3V0IDw8ICJ7Y29tbWVudH0gT3RoZXJzXG4iOwogICAgIH0KIAogICAgIGlmIChzZyAhPSAiQ01ha2UgUnVsZXMiKSB7CkBAIC02MTIsNyArNjA4LDcgQEAKICAgICAgICAgICBjb21waWxlID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICAqZm91dCA8PCBjb21tZW50IDw8IGZuYW1lIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgKmZvdXQgPDwgY29tbWVudCA8PCBmbmFtZSA8PCAnXG4nOwogICAgICAgICBpZiAoY29tcGlsZSkgewogICAgICAgICAgIGlmICgibGQiICE9IHNpLT5HZXRFeHRlbnNpb24oKSAmJiAiaW50IiAhPSBzaS0+R2V0RXh0ZW5zaW9uKCkgJiYKICAgICAgICAgICAgICAgImJzcCIgIT0gc2ktPkdldEV4dGVuc2lvbigpKSB7CkBAIC02MjgsNyArNjI0LDcgQEAKICAgICAgICAgICBzdGQ6OnN0cmluZyBvYmplY3ROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPYmplY3ROYW1lKHNpKTsKICAgICAgICAgICBpZiAoIW9iamVjdE5hbWUuZW1wdHkoKSAmJgogICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkhhc0V4cGxpY2l0T2JqZWN0TmFtZShzaSkpIHsKLSAgICAgICAgICAgICpmb3V0IDw8ICIgICAgLW8gIiA8PCBvYmplY3ROYW1lIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICpmb3V0IDw8ICIgICAgLW8gIiA8PCBvYmplY3ROYW1lIDw8ICdcbic7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC02OTUsMTQgKzY5MSwxNCBAQAogICAgKi8KICAgYm9vbCBzcGVjaWZ5RXh0cmEgPSB0cnVlOwogICBmb3IgKGF1dG8mIG91dCA6IGNjZy5HZXRPdXRwdXRzKCkpIHsKLSAgICBmb3V0IDw8IGZuYW1lIDw8IHN0ZDo6ZW5kbDsKLSAgICBmb3V0IDw8ICIgICAgOm91dHB1dE5hbWU9XCIiIDw8IG91dCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8IGZuYW1lIDw8ICdcbic7CisgICAgZm91dCA8PCAiICAgIDpvdXRwdXROYW1lPVwiIiA8PCBvdXQgPDwgIlwiXG4iOwogICAgIGlmIChzcGVjaWZ5RXh0cmEpIHsKICAgICAgIGZvciAoYXV0byYgYnlwIDogY2NnLkdldEJ5cHJvZHVjdHMoKSkgewotICAgICAgICBmb3V0IDw8ICIgICAgOmV4dHJhT3V0cHV0RmlsZT1cIiIgPDwgYnlwIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgICAgICBmb3V0IDw8ICIgICAgOmV4dHJhT3V0cHV0RmlsZT1cIiIgPDwgYnlwIDw8ICJcIlxuIjsKICAgICAgIH0KICAgICAgIGZvciAoYXV0byYgZGVwIDogY2NnLkdldERlcGVuZHMoKSkgewotICAgICAgICBmb3V0IDw8ICIgICAgOmRlcGVuZHM9XCIiIDw8IGRlcCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgZm91dCA8PCAiICAgIDpkZXBlbmRzPVwiIiA8PCBkZXAgPDwgIlwiXG4iOwogICAgICAgfQogICAgICAgc3BlY2lmeUV4dHJhID0gZmFsc2U7CiAgICAgfQpAQCAtNzE3LDcgKzcxMyw3IEBACiAgICAgc3RkOjpzdHJpbmcgc291cmNlTGFuZ1Byb3AocmF3TGFuZ1Byb3ApOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBleHRlbnNpb24gPSBzb3VyY2VGaWxlLT5HZXRFeHRlbnNpb24oKTsKICAgICBpZiAoIkNYWCIgPT0gc291cmNlTGFuZ1Byb3AgJiYgKCJjIiA9PSBleHRlbnNpb24gfHwgIkMiID09IGV4dGVuc2lvbikpIHsKLSAgICAgIGZvdXQgPDwgIiAgICAtZG90Y2lzY3h4IiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICIgICAgLWRvdGNpc2N4eFxuIjsKICAgICB9CiAgIH0KIH0KQEAgLTczMCw3ICs3MjYsNyBAQAogICB9CiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7CiAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U291cmNlRmlsZXMoc291cmNlcywgdGhpcy0+Q29uZmlnTmFtZSk7Ci0gIGZvciAoYXV0byYgc2YgOiBzb3VyY2VzKSB7CisgIGZvciAoY29uc3QgY21Tb3VyY2VGaWxlKiBzZiA6IHNvdXJjZXMpIHsKICAgICBpZiAoImludCIgPT0gc2YtPkdldEV4dGVuc2lvbigpKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iVmVyaWZpY2F0aW9uTWFuYWdlci5jeHggYi9Tb3VyY2UvY21HbG9iVmVyaWZpY2F0aW9uTWFuYWdlci5jeHgKaW5kZXggNDgxNzc3My4uOWFjNWNkNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYlZlcmlmaWNhdGlvbk1hbmFnZXIuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JWZXJpZmljYXRpb25NYW5hZ2VyLmN4eApAQCAtMzgsNiArMzgsOCBAQAogICAgICAgICAgICAgICAgICAgIDw8IGNtVmVyc2lvbjo6R2V0TWFqb3JWZXJzaW9uKCkgPDwgIi4iCiAgICAgICAgICAgICAgICAgICAgPDwgY21WZXJzaW9uOjpHZXRNaW5vclZlcnNpb24oKSA8PCAiXG4iOwogCisgIHZlcmlmeVNjcmlwdEZpbGUgPDwgImNtYWtlX3BvbGljeShTRVQgQ01QMDAwOSBORVcpXG4iOworCiAgIGZvciAoYXV0byBjb25zdCYgaSA6IHRoaXMtPkNhY2hlKSB7CiAgICAgQ2FjaGVFbnRyeUtleSBrID0gc3RkOjpnZXQ8MD4oaSk7CiAgICAgQ2FjaGVFbnRyeVZhbHVlIHYgPSBzdGQ6OmdldDwxPihpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuY3h4CmluZGV4IDUxZDY4MWQuLjA2OTQzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yLmN4eApAQCAtMiw2ICsyLDEwIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0zNSwxNSArMzksMTQgQEAKIH0KIAogLy8hIENyZWF0ZSBhIGxvY2FsIGdlbmVyYXRvciBhcHByb3ByaWF0ZSB0byB0aGlzIEdsb2JhbCBHZW5lcmF0b3IKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKLSAgY21NYWtlZmlsZSogbWYpCitzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4KK2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikKIHsKLSAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnID0KLSAgICBuZXcgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjModGhpcywgbWYpOworICBhdXRvIGxnID0gY206Om1ha2VfdW5pcXVlPGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPih0aGlzLCBtZik7CiAgIGxnLT5TZXRNYWtlZmlsZVZhcmlhYmxlU2l6ZSgzMik7CiAgIGxnLT5TZXRNYWtlQ29tbWFuZEVzY2FwZVRhcmdldFR3aWNlKHRydWUpOwogICBsZy0+U2V0Qm9ybGFuZE1ha2VDdXJseUhhY2sodHJ1ZSk7Ci0gIHJldHVybiBsZzsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPihzdGQ6Om1vdmUobGcpKTsKIH0KIAogdm9pZCBjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvcjo6R2V0RG9jdW1lbnRhdGlvbigKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yLmgKaW5kZXggZGEwNDc0My4uOWFmMGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yLmgKQEAgLTQsNiArNCw3IEBACiAjZGVmaW5lIGNtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yX2gKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAKICNpbmNsdWRlICJjbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuaCIKIApAQCAtMTYsMTAgKzE3LDEwIEBACiB7CiBwdWJsaWM6CiAgIGNtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yKGNtYWtlKiBjbSk7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTwKLSAgICAgIGNtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3I+KCkpOwogICB9CiAKICAgLy8hIEdldCB0aGUgbmFtZSBmb3IgdGhlIGdlbmVyYXRvci4KQEAgLTMzLDcgKzM0LDggQEAKICAgc3RhdGljIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpOwogCiAgIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi0gIGNtTG9jYWxHZW5lcmF0b3IqIENyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogICAvKioKICAgICogVHJ5IHRvIGRldGVybWluZSBzeXN0ZW0gaW5mb3JtYXRpb24gc3VjaCBhcyBzaGFyZWQgbGlicmFyeQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbENvbW1vbkdlbmVyYXRvci5jeHgKaW5kZXggOWZhNDQ2Ny4uZTA0ZWVmMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxDb21tb25HZW5lcmF0b3IuY3h4CkBAIC0yLDYgKzIsNyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HbG9iYWxDb21tb25HZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTI0LDE1ICsyNSwxNSBAQAogY21HbG9iYWxDb21tb25HZW5lcmF0b3I6OkNvbXB1dGVEaXJlY3RvcnlUYXJnZXRzKCkgY29uc3QKIHsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIERpcmVjdG9yeVRhcmdldD4gZGlyVGFyZ2V0czsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGN1cnJlbnRCaW5hcnlEaXIoCiAgICAgICBsZy0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRCaW5hcnkoKSk7CiAgICAgRGlyZWN0b3J5VGFyZ2V0JiBkaXJUYXJnZXQgPSBkaXJUYXJnZXRzW2N1cnJlbnRCaW5hcnlEaXJdOwotICAgIGRpclRhcmdldC5MRyA9IGxnOworICAgIGRpclRhcmdldC5MRyA9IGxnLmdldCgpOwogCiAgICAgLy8gVGhlIGRpcmVjdG9yeS1sZXZlbCBydWxlIHNob3VsZCBkZXBlbmQgb24gdGhlIHRhcmdldC1sZXZlbCBydWxlcwogICAgIC8vIGZvciBhbGwgdGFyZ2V0cyBpbiB0aGUgZGlyZWN0b3J5LgotICAgIGZvciAoYXV0byBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIGNvbnN0IHR5cGUgPSBndC0+R2V0VHlwZSgpOwogICAgICAgaWYgKHR5cGUgIT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmCiAgICAgICAgICAgdHlwZSAhPSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZICYmCkBAIC00Myw3ICs0NCw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgICAgRGlyZWN0b3J5VGFyZ2V0OjpUYXJnZXQgdDsKLSAgICAgIHQuR1QgPSBndDsKKyAgICAgIHQuR1QgPSBndC5nZXQoKTsKICAgICAgIGlmIChjb25zdCBjaGFyKiBleGNsdWRlID0gZ3QtPkdldFByb3BlcnR5KCJFWENMVURFX0ZST01fQUxMIikpIHsKICAgICAgICAgaWYgKGNtSXNPbihleGNsdWRlKSkgewogICAgICAgICAgIC8vIFRoaXMgdGFyZ2V0IGhhcyBiZWVuIGV4cGxpY2l0bHkgZXhjbHVkZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsR2VuZXJhdG9yLmN4eAppbmRleCAwOWZiODdkLi42ZDA4MzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5jeHgKQEAgLTcsOSArNywxMyBAQAogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgogI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL21lbW9yeT4KIAogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0zMSw2ICszNSw3IEBACiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUluc3RhbGxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIKKyNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NU1ZDNjBMaW5rTGluZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtMTIxLDYgKzEyNiw3IEBACiB7CiAgIEpzb246OlZhbHVlIGdlbmVyYXRvciA9IEpzb246Om9iamVjdFZhbHVlOwogICBnZW5lcmF0b3JbIm5hbWUiXSA9IHRoaXMtPkdldE5hbWUoKTsKKyAgZ2VuZXJhdG9yWyJtdWx0aUNvbmZpZyJdID0gdGhpcy0+SXNNdWx0aUNvbmZpZygpOwogICByZXR1cm4gZ2VuZXJhdG9yOwogfQogI2VuZGlmCkBAIC0xNjUsNyArMTcxLDcgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywKK2Jvb2wgY21HbG9iYWxHZW5lcmF0b3I6OlNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBib29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBtZikKIHsKICAgaWYgKHRzLmVtcHR5KCkpIHsKQEAgLTI0MCwxMSArMjQ2LDEwIEBACiAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoY25hbWVTdHJpbmcpOwogICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHBhdGhTdHJpbmcpOwogICAgIGlmIChjbmFtZVN0cmluZyAhPSBwYXRoU3RyaW5nKSB7Ci0gICAgICBjb25zdCBjaGFyKiBjdmFycyA9Ci0gICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCi0gICAgICAgICAgIl9fQ01BS0VfREVMRVRFX0NBQ0hFX0NIQU5HRV9WQVJTXyIpOworICAgICAgY21Qcm9wIGN2YXJzID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKKyAgICAgICAgIl9fQ01BS0VfREVMRVRFX0NBQ0hFX0NIQU5HRV9WQVJTXyIpOwogICAgICAgaWYgKGN2YXJzKSB7Ci0gICAgICAgIGNoYW5nZVZhcnMgKz0gY3ZhcnM7CisgICAgICAgIGNoYW5nZVZhcnMgKz0gKmN2YXJzOwogICAgICAgICBjaGFuZ2VWYXJzICs9ICI7IjsKICAgICAgIH0KICAgICAgIGNoYW5nZVZhcnMgKz0gbGFuZ0NvbXA7CkBAIC0yNjQsOCArMjY5LDggQEAKIHZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkFkZEJ1aWxkRXhwb3J0RXhwb3J0U2V0KAogICBjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciogZ2VuKQogewotICB0aGlzLT5CdWlsZEV4cG9ydFNldHNbZ2VuLT5HZXRNYWluRXhwb3J0RmlsZU5hbWUoKV0gPSBnZW47CiAgIHRoaXMtPkJ1aWxkRXhwb3J0RXhwb3J0U2V0c1tnZW4tPkdldE1haW5FeHBvcnRGaWxlTmFtZSgpXSA9IGdlbjsKKyAgdGhpcy0+QWRkQnVpbGRFeHBvcnRTZXQoZ2VuKTsKIH0KIAogYm9vbCBjbUdsb2JhbEdlbmVyYXRvcjo6R2VuZXJhdGVJbXBvcnRGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKQpAQCAtMjc1LDEzICsyODAsMTEgQEAKICAgICBib29sIHJlc3VsdCA9IGl0LT5zZWNvbmQtPkdlbmVyYXRlSW1wb3J0RmlsZSgpOwogCiAgICAgaWYgKCF0aGlzLT5Db25maWd1cmVEb25lQ01QMDAyNkFuZENNUDAwMjQpIHsKLSAgICAgIGZvciAoY21NYWtlZmlsZSogbSA6IHRoaXMtPk1ha2VmaWxlcykgeworICAgICAgZm9yIChjb25zdCBhdXRvJiBtIDogdGhpcy0+TWFrZWZpbGVzKSB7CiAgICAgICAgIG0tPlJlbW92ZUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvckNNUDAwMjQoaXQtPnNlY29uZCk7CiAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgaXQtPnNlY29uZCA9IG51bGxwdHI7CiAgICAgdGhpcy0+QnVpbGRFeHBvcnRTZXRzLmVyYXNlKGl0KTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CkBAIC0yOTUsOCArMjk4LDggQEAKIGJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OkNoZWNrVGFyZ2V0c0Zvck1pc3NpbmdTb3VyY2VzKCkgY29uc3QKIHsKICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGxvY2FsR2VuLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogbG9jYWxHZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZTo6R0xPQkFMX1RBUkdFVCB8fAogICAgICAgICAgIHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZTo6SU5URVJGQUNFX0xJQlJBUlkgfHwKICAgICAgICAgICB0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGU6OlVUSUxJVFkgfHwKQEAgLTMzNSw4ICszMzgsOCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogICBib29sIGZhaWxlZCA9IGZhbHNlOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGdlbmVyYXRvciA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ2VuZXJhdG9yIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBnZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSAmJgogICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIldJTjMyX0VYRUNVVEFCTEUiKSkgewogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQpAQCAtMzYzLDggKzM2Niw4IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIGJvb2wgZmFpbGVkID0gZmFsc2U7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogZ2VuZXJhdG9yIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogZ2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBnZW5lcmF0b3IgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlOjpHTE9CQUxfVEFSR0VUIHx8CiAgICAgICAgICAgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlOjpJTlRFUkZBQ0VfTElCUkFSWSB8fAogICAgICAgICAgIHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZTo6VVRJTElUWSB8fApAQCAtNDQxLDggKzQ0NCw4IEBACiAgICAgY21TeXN0ZW1Ub29sczo6R2V0U2hvcnRQYXRoKG1ha2VQcm9ncmFtLCBtYWtlUHJvZ3JhbSk7CiAgICAgY21TeXN0ZW1Ub29sczo6U3BsaXRQcm9ncmFtUGF0aChtYWtlUHJvZ3JhbSwgZGlyLCBmaWxlKTsKICAgICBtYWtlUHJvZ3JhbSA9IGNtU3RyQ2F0KGRpciwgJy8nLCBzYXZlRmlsZSk7Ci0gICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIiwgbWFrZVByb2dyYW0uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIHByb2dyYW0iLCBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iLCBtYWtlUHJvZ3JhbSwgIm1ha2UgcHJvZ3JhbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY1MCw3ICs2NTMsNyBAQAogCiAgICAgLy8gVGVsbCB0aGUgZ2VuZXJhdG9yIGFib3V0IHRoZSB0b29sc2V0LCBpZiBhbnkuCiAgICAgc3RkOjpzdHJpbmcgdG9vbHNldCA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQiKTsKLSAgICBpZiAoIXRoaXMtPlNldEdlbmVyYXRvclRvb2xzZXQodG9vbHNldCwgbWYpKSB7CisgICAgaWYgKCF0aGlzLT5TZXRHZW5lcmF0b3JUb29sc2V0KHRvb2xzZXQsIGZhbHNlLCBtZikpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE5OSwxMyArMTIwMiwxMiBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3JzKCkKIHsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JTZWFyY2hJbmRleC5jbGVhcigpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuY2xlYXIoKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnJlc2VydmUodGhpcy0+TWFrZWZpbGVzLnNpemUoKSk7Ci0gIGZvciAoY21NYWtlZmlsZSogbSA6IHRoaXMtPk1ha2VmaWxlcykgewotICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gdGhpcy0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IobSk7Ci0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnB1c2hfYmFjayhsZyk7Ci0gICAgdGhpcy0+SW5kZXhMb2NhbEdlbmVyYXRvcihsZyk7CisgIGZvciAoY29uc3QgYXV0byYgbSA6IHRoaXMtPk1ha2VmaWxlcykgeworICAgIGF1dG8gbGcgPSB0aGlzLT5DcmVhdGVMb2NhbEdlbmVyYXRvcihtLmdldCgpKTsKKyAgICB0aGlzLT5JbmRleExvY2FsR2VuZXJhdG9yKGxnLmdldCgpKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShsZykpOwogICB9CiB9CiAKQEAgLTEyMjEsOSArMTIyMywxMCBAQAogICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRDdXJyZW50QmluYXJ5KAogICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CiAKLSAgY21NYWtlZmlsZSogZGlyTWYgPSBuZXcgY21NYWtlZmlsZSh0aGlzLCBzbmFwc2hvdCk7CisgIGF1dG8gZGlyTWZ1ID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMsIHNuYXBzaG90KTsKKyAgYXV0byBkaXJNZiA9IGRpck1mdS5nZXQoKTsKKyAgdGhpcy0+TWFrZWZpbGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZGlyTWZ1KSk7CiAgIGRpck1mLT5TZXRSZWN1cnNpb25EZXB0aCh0aGlzLT5SZWN1cnNpb25EZXB0aCk7Ci0gIHRoaXMtPk1ha2VmaWxlcy5wdXNoX2JhY2soZGlyTWYpOwogICB0aGlzLT5JbmRleE1ha2VmaWxlKGRpck1mKTsKIAogICB0aGlzLT5CaW5hcnlEaXJlY3Rvcmllcy5pbnNlcnQoCkBAIC0xMjQxLDExICsxMjQ0LDExIEBACiAgICAgc3RkOjp2ZWN0b3I8R2xvYmFsVGFyZ2V0SW5mbz4gZ2xvYmFsVGFyZ2V0czsKICAgICB0aGlzLT5DcmVhdGVEZWZhdWx0R2xvYmFsVGFyZ2V0cyhnbG9iYWxUYXJnZXRzKTsKIAotICAgIGZvciAoY21NYWtlZmlsZSogbWYgOiB0aGlzLT5NYWtlZmlsZXMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG1mIDogdGhpcy0+TWFrZWZpbGVzKSB7CiAgICAgICBhdXRvJiB0YXJnZXRzID0gbWYtPkdldFRhcmdldHMoKTsKICAgICAgIGZvciAoR2xvYmFsVGFyZ2V0SW5mbyBjb25zdCYgZ2xvYmFsVGFyZ2V0IDogZ2xvYmFsVGFyZ2V0cykgewogICAgICAgICB0YXJnZXRzLmVtcGxhY2UoZ2xvYmFsVGFyZ2V0Lk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVHbG9iYWxUYXJnZXQoZ2xvYmFsVGFyZ2V0LCBtZikpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlR2xvYmFsVGFyZ2V0KGdsb2JhbFRhcmdldCwgbWYuZ2V0KCkpKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEyNTgsMTAgKzEyNjEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm51bWJlciBvZiBsb2NhbCBnZW5lcmF0b3JzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogCi0gIC8vIGNoZWNrIGZvciBsaW5rIGxpYnJhcmllcyBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyBjb250YWluaW5nICJOT1RGT1VORCIKLSAgLy8gYW5kIGZvciBpbmZpbml0ZSBsb29wcwotICB0aGlzLT5DaGVja1RhcmdldFByb3BlcnRpZXMoKTsKLQogICBpZiAodGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0V29ya2luZ01vZGUoKSA9PSBjbWFrZTo6Tk9STUFMX01PREUpIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkpIHsKQEAgLTEyODQsNiArMTI4MywxMCBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6Q3JlYXRlR2VuZXJhdGlvbk9iamVjdHMoVGFyZ2V0VHlwZXMgdGFyZ2V0VHlwZXMpCiB7CiAgIHRoaXMtPkNyZWF0ZUxvY2FsR2VuZXJhdG9ycygpOworICAvLyBDb21taXQgc2lkZSBlZmZlY3RzIG9ubHkgaWYgd2UgYXJlIGFjdHVhbGx5IGdlbmVyYXRpbmcKKyAgaWYgKHRoaXMtPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKKyAgICB0aGlzLT5DaGVja1RhcmdldFByb3BlcnRpZXMoKTsKKyAgfQogICB0aGlzLT5DcmVhdGVHZW5lcmF0b3JUYXJnZXRzKHRhcmdldFR5cGVzKTsKICAgdGhpcy0+Q29tcHV0ZUJ1aWxkRmlsZUdlbmVyYXRvcnMoKTsKIH0KQEAgLTEyOTQsOCArMTI5NywxMSBAQAogewogICB0aGlzLT5DcmVhdGVHZW5lcmF0aW9uT2JqZWN0cyhJbXBvcnRlZE9ubHkpOwogICBhdXRvIGNvbnN0IG1maXQgPQotICAgIHN0ZDo6ZmluZCh0aGlzLT5NYWtlZmlsZXMuYmVnaW4oKSwgdGhpcy0+TWFrZWZpbGVzLmVuZCgpLCBtZik7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0KKyAgICBzdGQ6OmZpbmRfaWYodGhpcy0+TWFrZWZpbGVzLmJlZ2luKCksIHRoaXMtPk1ha2VmaWxlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgW21mXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZT4mIGl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXQoKSA9PSBtZjsKKyAgICAgICAgICAgICAgICAgfSk7CisgIGF1dG8mIGxnID0KICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbc3RkOjpkaXN0YW5jZSh0aGlzLT5NYWtlZmlsZXMuYmVnaW4oKSwgbWZpdCldOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiB0IDogdGFyZ2V0cykgewogICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IGxnLT5GaW5kR2VuZXJhdG9yVGFyZ2V0VG9Vc2UodCk7CkBAIC0xMzQ1LDE2ICsxMzUxLDUxIEBACiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpDb21wdXRlQnVpbGRGaWxlR2VuZXJhdG9ycygpCiB7CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnNpemUoKTsgKytpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqPiBnZW5zID0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I+PiBjb25zdCYgZ2VucyA9CiAgICAgICB0aGlzLT5NYWtlZmlsZXNbaV0tPkdldEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMoKTsKLSAgICBmb3IgKGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnIDogZ2VucykgewotICAgICAgZy0+Q29tcHV0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0pOworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPiBjb25zdCYgZyA6IGdlbnMpIHsKKyAgICAgIGctPkNvbXB1dGUodGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldLmdldCgpKTsKICAgICB9CiAgIH0KIH0KIAorYm9vbCBjbUdsb2JhbEdlbmVyYXRvcjo6VW5zdXBwb3J0ZWRWYXJpYWJsZUlzRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdXBwb3J0ZWQpIGNvbnN0Cit7CisgIGlmICghc3VwcG9ydGVkICYmIHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXREZWZpbml0aW9uKG5hbWUpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGUgPDwKKyAgICAgICJHZW5lcmF0b3JcbiIKKyAgICAgICIgICIgPDwgdGhpcy0+R2V0TmFtZSgpIDw8ICJcbiIKKyAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHZhcmlhYmxlXG4iCisgICAgICAiICAiIDw8IG5hbWUgPDwgIlxuIgorICAgICAgImJ1dCBpdCBoYXMgYmVlbiBzcGVjaWZpZWQuIgorICAgICAgOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OkNvbXB1dGUoKQogeworICAvLyBNYWtlIHN1cmUgdW5zdXBwb3J0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4KKyAgaWYgKHRoaXMtPlVuc3VwcG9ydGVkVmFyaWFibGVJc0RlZmluZWQoIkNNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlN1cHBvcnRzRGVmYXVsdEJ1aWxkVHlwZSgpKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAodGhpcy0+VW5zdXBwb3J0ZWRWYXJpYWJsZUlzRGVmaW5lZCgiQ01BS0VfQ1JPU1NfQ09ORklHUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlN1cHBvcnRzQ3Jvc3NDb25maWdzKCkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmICh0aGlzLT5VbnN1cHBvcnRlZFZhcmlhYmxlSXNEZWZpbmVkKCJDTUFLRV9ERUZBVUxUX0NPTkZJR1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5TdXBwb3J0c0RlZmF1bHRDb25maWdzKCkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgLy8gU29tZSBnZW5lcmF0b3JzIHRyYWNrIGZpbGVzIHJlcGxhY2VkIGR1cmluZyB0aGUgR2VuZXJhdGUuCiAgIC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgdmVjdG9yOgogICB0aGlzLT5GaWxlc1JlcGxhY2VkRHVyaW5nR2VuZXJhdGUuY2xlYXIoKTsKQEAgLTEzODcsNyArMTQyOCw3IEBACiAgIH0KIAogICAvLyBBZGQgZ2VuZXJhdG9yIHNwZWNpZmljIGhlbHBlciBjb21tYW5kcwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBsb2NhbEdlbi0+QWRkSGVscGVyQ29tbWFuZHMoKTsKICAgfQogCkBAIC0xMzk3LDE2ICsxNDM4LDE2IEBACiAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjbVRhcmdldCBpbnN0YW5jZS4gIEl0IGFjY3VtdWxhdGVzIGZlYXR1cmVzCiAgIC8vIGFjcm9zcyBhbGwgY29uZmlndXJhdGlvbnMuICBTb21lIHJlZmFjdG9yaW5nIGlzIG5lZWRlZCB0bwogICAvLyBjb21wdXRlIGEgcGVyLWNvbmZpZyByZXN1bHRhIHB1cmVseSBkdXJpbmcgZ2VuZXJhdGlvbi4KLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgaWYgKCFsb2NhbEdlbi0+Q29tcHV0ZVRhcmdldENvbXBpbGVGZWF0dXJlcygpKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICB9CiAKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgY21NYWtlZmlsZSogbWYgPSBsb2NhbEdlbi0+R2V0TWFrZWZpbGUoKTsKLSAgICBmb3IgKGNtSW5zdGFsbEdlbmVyYXRvciogZyA6IG1mLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpKSB7Ci0gICAgICBpZiAoIWctPkNvbXB1dGUobG9jYWxHZW4pKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBnIDogbWYtPkdldEluc3RhbGxHZW5lcmF0b3JzKCkpIHsKKyAgICAgIGlmICghZy0+Q29tcHV0ZShsb2NhbEdlbi5nZXQoKSkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgIH0KQEAgLTE0MTYsNyArMTQ1Nyw3IEBACiAKICAgLy8gVHJhY2UgdGhlIGRlcGVuZGVuY2llcywgYWZ0ZXIgdGhhdCBubyBjdXN0b20gY29tbWFuZHMgc2hvdWxkIGJlIGFkZGVkCiAgIC8vIGJlY2F1c2UgdGhlaXIgZGVwZW5kZW5jaWVzIG1pZ2h0IG5vdCBiZSBoYW5kbGVkIGNvcnJlY3RseQotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBsb2NhbEdlbi0+VHJhY2VEZXBlbmRlbmNpZXMoKTsKICAgfQogCkBAIC0xNDI4LDcgKzE0NjksNyBAQAogICB0aGlzLT5Gb3JjZUxpbmtlckxhbmd1YWdlcygpOwogCiAgIC8vIENvbXB1dGUgdGhlIG1hbmlmZXN0IG9mIG1haW4gdGFyZ2V0cyBnZW5lcmF0ZWQuCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGxvY2FsR2VuLT5Db21wdXRlVGFyZ2V0TWFuaWZlc3QoKTsKICAgfQogCkBAIC0xNDQ1LDcgKzE0ODYsNyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGxvY2FsR2VuLT5Db21wdXRlSG9tZVJlbGF0aXZlT3V0cHV0UGF0aCgpOwogICB9CiAKQEAgLTE0NjAsNiArMTUwMSw4IEBACiAKICAgdGhpcy0+UHJvY2Vzc0V2YWx1YXRpb25GaWxlcygpOwogCisgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlVwZGF0ZVByb2dyZXNzKCJHZW5lcmF0aW5nIiwgMC4xZik7CisKICAgLy8gR2VuZXJhdGUgcHJvamVjdCBmaWxlcwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRoaXMtPkxvY2FsR2VuZXJhdG9ycy5zaXplKCk7ICsraSkgewogICAgIHRoaXMtPlNldEN1cnJlbnRNYWtlZmlsZSh0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0tPkdldE1ha2VmaWxlKCkpOwpAQCAtMTQ3MSw4ICsxNTE0LDkgQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0tPkdlbmVyYXRlVGVzdEZpbGVzKCk7CiAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+VXBkYXRlUHJvZ3Jlc3MoCiAgICAgICAiR2VuZXJhdGluZyIsCi0gICAgICAoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGkpICsgMS4wZikgLwotICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4odGhpcy0+TG9jYWxHZW5lcmF0b3JzLnNpemUoKSkpOworICAgICAgMC4xZiArCisgICAgICAgIDAuOWYgKiAoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGkpICsgMS4wZikgLworICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pih0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuc2l6ZSgpKSk7CiAgIH0KICAgdGhpcy0+U2V0Q3VycmVudE1ha2VmaWxlKG51bGxwdHIpOwogCkBAIC0xNTU1LDQwICsxNTk5LDQyIEBACiAKIGJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OkFkZEF1dG9tYXRpY1NvdXJjZXMoKQogewotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBsZy0+Q3JlYXRlRXZhbHVhdGlvbkZpbGVPdXRwdXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIGlmIChndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgfHwKICAgICAgICAgICBndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSB8fAogICAgICAgICAgIGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQotICAgICAgbGctPkFkZFVuaXR5QnVpbGQoZ3QpOwotICAgICAgbGctPkFkZFBjaERlcGVuZGVuY2llcyhndCk7CisgICAgICBsZy0+QWRkVW5pdHlCdWlsZChndC5nZXQoKSk7CisgICAgICBsZy0+QWRkUGNoRGVwZW5kZW5jaWVzKGd0LmdldCgpKTsKICAgICB9CiAgIH0KICAgLy8gVGhlIGFib3ZlIHRyYW5zZm9ybWF0aW9ucyBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBjbGFzc2lmaWNhdGlvbiBvZiBzb3VyY2VzLgogICAvLyBDbGVhciB0aGUgc291cmNlIGxpc3QgYW5kIGNsYXNzaWZpY2F0aW9uIGNhY2hlIChLaW5kZWRTb3VyY2VzKSBvZiBhbGwKICAgLy8gdGFyZ2V0cyBzbyB0aGF0IGl0IHdpbGwgYmUgcmVjb21wdXRlZCBjb3JyZWN0bHkgYnkgdGhlIGdlbmVyYXRvcnMgbGF0ZXIKICAgLy8gbm93IHRoYXQgdGhlIGFib3ZlIHRyYW5zZm9ybWF0aW9ucyBhcmUgZG9uZSBmb3IgYWxsIHRhcmdldHMuCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICAgIGZvciAoY29uc3QgYXV0byYgZ3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICBndC0+Q2xlYXJTb3VyY2VzQ2FjaGUoKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKLWNtTGlua0xpbmVDb21wdXRlciogY21HbG9iYWxHZW5lcmF0b3I6OkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCitzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBjbUdsb2JhbEdlbmVyYXRvcjo6Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgc3RhdGVEaXIpIGNvbnN0CiB7Ci0gIHJldHVybiBuZXcgY21MaW5rTGluZUNvbXB1dGVyKG91dHB1dENvbnZlcnRlciwgc3RhdGVEaXIpOworICByZXR1cm4gY206Om1ha2VfdW5pcXVlPGNtTGlua0xpbmVDb21wdXRlcj4ob3V0cHV0Q29udmVydGVyLCBzdGF0ZURpcik7CiB9CiAKLWNtTGlua0xpbmVDb21wdXRlciogY21HbG9iYWxHZW5lcmF0b3I6OkNyZWF0ZU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIoCitzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPgorY21HbG9iYWxHZW5lcmF0b3I6OkNyZWF0ZU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIoCiAgIGNtT3V0cHV0Q29udmVydGVyKiBvdXRwdXRDb252ZXJ0ZXIsIGNtU3RhdGVEaXJlY3RvcnkgY29uc3QmIHN0YXRlRGlyKSBjb25zdAogewotICByZXR1cm4gbmV3IGNtTVNWQzYwTGlua0xpbmVDb21wdXRlcihvdXRwdXRDb252ZXJ0ZXIsIHN0YXRlRGlyKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbU1TVkM2MExpbmtMaW5lQ29tcHV0ZXI+KG91dHB1dENvbnZlcnRlciwgc3RhdGVEaXIpKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6RmluYWxpemVUYXJnZXRDb21waWxlSW5mbygpCkBAIC0xNTk3LDcgKzE2NDMsNyBAQAogICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldEVuYWJsZWRMYW5ndWFnZXMoKTsKIAogICAvLyBDb25zdHJ1Y3QgcGVyLXRhcmdldCBnZW5lcmF0b3IgaW5mb3JtYXRpb24uCi0gIGZvciAoY21NYWtlZmlsZSogbWYgOiB0aGlzLT5NYWtlZmlsZXMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBtZiA6IHRoaXMtPk1ha2VmaWxlcykgewogICAgIGNvbnN0IGNtU3RyaW5nUmFuZ2Ugbm9jb25maWdfY29tcGlsZV9kZWZpbml0aW9ucyA9CiAgICAgICBtZi0+R2V0Q29tcGlsZURlZmluaXRpb25zRW50cmllcygpOwogICAgIGNvbnN0IGNtQmFja3RyYWNlUmFuZ2Ugbm9jb25maWdfY29tcGlsZV9kZWZpbml0aW9uc19idHMgPQpAQCAtMTYzMiw3ICsxNjc4LDkgQEAKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYyA6IGNvbmZpZ3MpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgICAgICAgICBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoYykpOwotICAgICAgICAgIHQtPkFwcGVuZFByb3BlcnR5KGRlZlByb3BOYW1lLCBtZi0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKTsKKyAgICAgICAgICBpZiAoY29uc3QgY2hhciogdmFsID0gbWYtPkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgeworICAgICAgICAgICAgdC0+QXBwZW5kUHJvcGVydHkoZGVmUHJvcE5hbWUsIHZhbCk7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMTY2MSw4ICsxNzA5LDcgQEAKICAgaWYgKHRhcmdldFR5cGVzID09IEFsbFRhcmdldHMpIHsKICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1mLT5HZXRUYXJnZXRzKCkpIHsKICAgICAgIGNtVGFyZ2V0KiB0ID0gJnRhcmdldC5zZWNvbmQ7Ci0gICAgICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSBuZXcgY21HZW5lcmF0b3JUYXJnZXQodCwgbGcpOwotICAgICAgbGctPkFkZEdlbmVyYXRvclRhcmdldChndCk7CisgICAgICBsZy0+QWRkR2VuZXJhdG9yVGFyZ2V0KGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvclRhcmdldD4odCwgbGcpKTsKICAgICB9CiAgIH0KIApAQCAtMTY3NSwzMSArMTcyMiwyOCBAQAogewogICBzdGQ6Om1hcDxjbVRhcmdldCosIGNtR2VuZXJhdG9yVGFyZ2V0Kj4gaW1wb3J0ZWRNYXA7CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdGhpcy0+TWFrZWZpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5NYWtlZmlsZXNbaV07Ci0gICAgZm9yIChjbVRhcmdldCogb3duZWRJbXBUZ3QgOiBtZi0+R2V0T3duZWRJbXBvcnRlZFRhcmdldHMoKSkgewotICAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV07Ci0gICAgICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSBuZXcgY21HZW5lcmF0b3JUYXJnZXQob3duZWRJbXBUZ3QsIGxnKTsKLSAgICAgIGxnLT5BZGRPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0KGd0KTsKLSAgICAgIGltcG9ydGVkTWFwW293bmVkSW1wVGd0XSA9IGd0OworICAgIGF1dG8mIG1mID0gdGhpcy0+TWFrZWZpbGVzW2ldOworICAgIGZvciAoY29uc3QgYXV0byYgb3duZWRJbXBUZ3QgOiBtZi0+R2V0T3duZWRJbXBvcnRlZFRhcmdldHMoKSkgeworICAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0uZ2V0KCk7CisgICAgICBhdXRvIGd0ID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0Pihvd25lZEltcFRndC5nZXQoKSwgbGcpOworICAgICAgaW1wb3J0ZWRNYXBbb3duZWRJbXBUZ3QuZ2V0KCldID0gZ3QuZ2V0KCk7CisgICAgICBsZy0+QWRkT3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldChzdGQ6Om1vdmUoZ3QpKTsKICAgICB9CiAgIH0KIAogICAvLyBDb25zdHJ1Y3QgcGVyLXRhcmdldCBnZW5lcmF0b3IgaW5mb3JtYXRpb24uCiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnNpemUoKTsgKytpKSB7Ci0gICAgdGhpcy0+Q3JlYXRlR2VuZXJhdG9yVGFyZ2V0cyh0YXJnZXRUeXBlcywgdGhpcy0+TWFrZWZpbGVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldLCBpbXBvcnRlZE1hcCk7CisgICAgdGhpcy0+Q3JlYXRlR2VuZXJhdG9yVGFyZ2V0cyh0YXJnZXRUeXBlcywgdGhpcy0+TWFrZWZpbGVzW2ldLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldLmdldCgpLCBpbXBvcnRlZE1hcCk7CiAgIH0KIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6Q2xlYXJHZW5lcmF0b3JNZW1iZXJzKCkKIHsKLSAgY21EZWxldGVBbGwodGhpcy0+QnVpbGRFeHBvcnRTZXRzKTsKICAgdGhpcy0+QnVpbGRFeHBvcnRTZXRzLmNsZWFyKCk7CiAKLSAgY21EZWxldGVBbGwodGhpcy0+TWFrZWZpbGVzKTsKICAgdGhpcy0+TWFrZWZpbGVzLmNsZWFyKCk7CiAKLSAgY21EZWxldGVBbGwodGhpcy0+TG9jYWxHZW5lcmF0b3JzKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLmNsZWFyKCk7CiAKICAgdGhpcy0+QWxpYXNUYXJnZXRzLmNsZWFyKCk7CkBAIC0xNzIyLDEyICsxNzY2LDEyIEBACiAKIHZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkNoZWNrVGFyZ2V0UHJvcGVydGllcygpCiB7CisgIC8vIGNoZWNrIGZvciBsaW5rIGxpYnJhcmllcyBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyBjb250YWluaW5nICJOT1RGT1VORCIKKyAgLy8gYW5kIGZvciBpbmZpbml0ZSBsb29wcwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG5vdEZvdW5kTWFwOwotICAvLyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG5vdEZvdW5kTWFwOwotICAvLyBhZnRlciBpdCBpcyBhbGwgZG9uZSBkbyBhIENvbmZpZ3VyZUZpbmFsUGFzcwogICBjbVN0YXRlKiBzdGF0ZSA9IHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKTsKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0aGlzLT5NYWtlZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICB0aGlzLT5NYWtlZmlsZXNbaV0tPkNvbmZpZ3VyZUZpbmFsUGFzcygpOworICAgIHRoaXMtPk1ha2VmaWxlc1tpXS0+R2VuZXJhdGUoKnRoaXMtPkxvY2FsR2VuZXJhdG9yc1tpXSk7CiAgICAgZm9yIChhdXRvIGNvbnN0JiB0YXJnZXQgOiB0aGlzLT5NYWtlZmlsZXNbaV0tPkdldFRhcmdldHMoKSkgewogICAgICAgaWYgKHRhcmdldC5zZWNvbmQuR2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgICAgY29udGludWU7CkBAIC0xNzcxLDExICsxODE1LDYgQEAKICAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5VcGRhdGVQcm9ncmVzcygKLSAgICAgICJDb25maWd1cmluZyIsCi0gICAgICAwLjlmICsKLSAgICAgICAgMC4xZiAqIChzdGF0aWNfY2FzdDxmbG9hdD4oaSkgKyAxLjBmKSAvCi0gICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRoaXMtPk1ha2VmaWxlcy5zaXplKCkpKTsKICAgfQogCiAgIGlmICghbm90Rm91bmRNYXAuZW1wdHkoKSkgewpAQCAtMTg3Miw2ICsxOTExLDEwIEBACiAgICAgb3V0cHV0ICs9ICJcbiI7CiAgICAgcmV0dXJuIDE7CiAgIH0KKyAgc3RkOjpzdHJpbmcgcmVhbENvbmZpZyA9IGNvbmZpZzsKKyAgaWYgKHJlYWxDb25maWcuZW1wdHkoKSkgeworICAgIHJlYWxDb25maWcgPSB0aGlzLT5HZXREZWZhdWx0QnVpbGRDb25maWcoKTsKKyAgfQogCiAgIGludCByZXRWYWwgPSAwOwogICBjbVN5c3RlbVRvb2xzOjpTZXRSdW5Db21tYW5kSGlkZUNvbnNvbGUodHJ1ZSk7CkBAIC0xODgwLDcgKzE5MjMsNyBAQAogCiAgIHN0ZDo6dmVjdG9yPEdlbmVyYXRlZE1ha2VDb21tYW5kPiBtYWtlQ29tbWFuZCA9CiAgICAgdGhpcy0+R2VuZXJhdGVCdWlsZENvbW1hbmQobWFrZUNvbW1hbmRDU1RSLCBwcm9qZWN0TmFtZSwgYmluZGlyLCB0YXJnZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgZmFzdCwgam9icywgdmVyYm9zZSwgbmF0aXZlT3B0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbENvbmZpZywgZmFzdCwgam9icywgdmVyYm9zZSwgbmF0aXZlT3B0aW9ucyk7CiAKICAgLy8gV29ya2Fyb3VuZCB0byBjb252aW5jZSBzb21lIGNvbW1hbmRzIHRvIHByb2R1Y2Ugb3V0cHV0LgogICBpZiAob3V0cHV0ZmxhZyA9PSBjbVN5c3RlbVRvb2xzOjpPVVRQVVRfUEFTU1RIUk9VR0ggJiYKQEAgLTE4OTIsNyArMTkzNSw3IEBACiAgIGlmIChjbGVhbikgewogICAgIHN0ZDo6dmVjdG9yPEdlbmVyYXRlZE1ha2VDb21tYW5kPiBjbGVhbkNvbW1hbmQgPQogICAgICAgdGhpcy0+R2VuZXJhdGVCdWlsZENvbW1hbmQobWFrZUNvbW1hbmRDU1RSLCBwcm9qZWN0TmFtZSwgYmluZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiY2xlYW4iIH0sIGNvbmZpZywgZmFzdCwgam9icywgdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJjbGVhbiIgfSwgcmVhbENvbmZpZywgZmFzdCwgam9icywgdmVyYm9zZSk7CiAgICAgb3V0cHV0ICs9ICJcblJ1biBDbGVhbiBDb21tYW5kOiI7CiAgICAgb3V0cHV0ICs9IGNsZWFuQ29tbWFuZC5mcm9udCgpLlByaW50YWJsZSgpOwogICAgIG91dHB1dCArPSAiXG4iOwpAQCAtMTk5OSwxMCArMjA0MiwxMCBAQAogICByZXR1cm4gbWFrZUNvbW1hbmQ7CiB9CiAKLXZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkFkZE1ha2VmaWxlKGNtTWFrZWZpbGUqIG1mKQordm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkTWFrZWZpbGUoc3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGU+IG1mKQogewotICB0aGlzLT5NYWtlZmlsZXMucHVzaF9iYWNrKG1mKTsKLSAgdGhpcy0+SW5kZXhNYWtlZmlsZShtZik7CisgIHRoaXMtPkluZGV4TWFrZWZpbGUobWYuZ2V0KCkpOworICB0aGlzLT5NYWtlZmlsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShtZikpOwogCiAgIC8vIHVwZGF0ZSBwcm9ncmVzcwogICAvLyBlc3RpbWF0ZSBob3cgbWFueSBsZyB0aGVyZSB3aWxsIGJlCkBAIC0yMDI1LDEwICsyMDY4LDEwIEBACiAgIH0KIAogICBpbnQgbnVtR2VuID0gYXRvaShudW1HZW5DLT5jX3N0cigpKTsKLSAgZmxvYXQgcHJvZyA9IDAuOWYgKiBzdGF0aWNfY2FzdDxmbG9hdD4odGhpcy0+TWFrZWZpbGVzLnNpemUoKSkgLwotICAgIHN0YXRpY19jYXN0PGZsb2F0PihudW1HZW4pOwotICBpZiAocHJvZyA+IDAuOWYpIHsKLSAgICBwcm9nID0gMC45ZjsKKyAgZmxvYXQgcHJvZyA9CisgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRoaXMtPk1ha2VmaWxlcy5zaXplKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bUdlbik7CisgIGlmIChwcm9nID4gMS4wZikgeworICAgIHByb2cgPSAxLjBmOwogICB9CiAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlVwZGF0ZVByb2dyZXNzKCJDb25maWd1cmluZyIsIHByb2cpOwogfQpAQCAtMjA0NSw5ICsyMDg4LDEwIEBACiAgIHRoaXMtPkluc3RhbGxUYXJnZXRFbmFibGVkID0gdHJ1ZTsKIH0KIAotY21Mb2NhbEdlbmVyYXRvciogY21HbG9iYWxHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQorc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IGNtR2xvYmFsR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgY21NYWtlZmlsZSogbWYpCiB7Ci0gIHJldHVybiBuZXcgY21Mb2NhbEdlbmVyYXRvcih0aGlzLCBtZik7CisgIHJldHVybiBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbEdlbmVyYXRvcj4odGhpcywgbWYpOwogfQogCiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpFbmFibGVMYW5ndWFnZXNGcm9tR2VuZXJhdG9yKGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4sCkBAIC0yMTQyLDcgKzIxODYsNyBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6RmlsbFByb2plY3RNYXAoKQogewogICB0aGlzLT5Qcm9qZWN0TWFwLmNsZWFyKCk7IC8vIG1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gbWFwCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIC8vIGZvciBlYWNoIGxvY2FsIGdlbmVyYXRvciBhZGQgYWxsIHByb2plY3RzCiAgICAgY21TdGF0ZVNuYXBzaG90IHNucCA9IGxvY2FsR2VuLT5HZXRTdGF0ZVNuYXBzaG90KCk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZTsKQEAgLTIxNTAsNyArMjE5NCw3IEBACiAgICAgICBzdGQ6OnN0cmluZyBzbnBQcm9qTmFtZSA9IHNucC5HZXRQcm9qZWN0TmFtZSgpOwogICAgICAgaWYgKG5hbWUgIT0gc25wUHJvak5hbWUpIHsKICAgICAgICAgbmFtZSA9IHNucFByb2pOYW1lOwotICAgICAgICB0aGlzLT5Qcm9qZWN0TWFwW25hbWVdLnB1c2hfYmFjayhsb2NhbEdlbik7CisgICAgICAgIHRoaXMtPlByb2plY3RNYXBbbmFtZV0ucHVzaF9iYWNrKGxvY2FsR2VuLmdldCgpKTsKICAgICAgIH0KICAgICAgIHNucCA9IHNucC5HZXRCdWlsZHN5c3RlbURpcmVjdG9yeVBhcmVudCgpOwogICAgIH0gd2hpbGUgKHNucC5Jc1ZhbGlkKCkpOwpAQCAtMjM1Myw3ICsyMzk3LDcgQEAKIHZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkFkZEdsb2JhbFRhcmdldF9QYWNrYWdlKAogICBzdGQ6OnZlY3RvcjxHbG9iYWxUYXJnZXRJbmZvPiYgdGFyZ2V0cykKIHsKLSAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CisgIGF1dG8mIG1mID0gdGhpcy0+TWFrZWZpbGVzWzBdOwogICBzdGQ6OnN0cmluZyBjb25maWdGaWxlID0KICAgICBjbVN0ckNhdChtZi0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiL0NQYWNrQ29uZmlnLmNtYWtlIik7CiAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhjb25maWdGaWxlKSkgewpAQCAtMjQwMiw3ICsyNDQ2LDcgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1swXTsKKyAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CiAgIHN0ZDo6c3RyaW5nIGNvbmZpZ0ZpbGUgPQogICAgIGNtU3RyQ2F0KG1mLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICIvQ1BhY2tTb3VyY2VDb25maWcuY21ha2UiKTsKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGNvbmZpZ0ZpbGUpKSB7CkBAIC0yNDM0LDcgKzI0NzgsNyBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkR2xvYmFsVGFyZ2V0X1Rlc3QoCiAgIHN0ZDo6dmVjdG9yPEdsb2JhbFRhcmdldEluZm8+JiB0YXJnZXRzKQogewotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1swXTsKKyAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CiAgIGlmICghbWYtPklzT24oIkNNQUtFX1RFU1RJTkdfRU5BQkxFRCIpKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yNDU0LDYgKzI0OTgsMTMgQEAKICAgY21DdXN0b21Db21tYW5kTGluZSBzaW5nbGVMaW5lOwogICBzaW5nbGVMaW5lLnB1c2hfYmFjayhjbVN5c3RlbVRvb2xzOjpHZXRDVGVzdENvbW1hbmQoKSk7CiAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKCItLWZvcmNlLW5ldy1jdGVzdC1wcm9jZXNzIik7CisgIGlmIChhdXRvIHRlc3RBcmdzID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NURVNUX0FSR1VNRU5UUyIpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3M7CisgICAgY21FeHBhbmRMaXN0KHRlc3RBcmdzLCBhcmdzKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGFyZyA6IGFyZ3MpIHsKKyAgICAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKGFyZyk7CisgICAgfQorICB9CiAgIGlmIChjbWFrZUNmZ0ludERpciAmJiAqY21ha2VDZmdJbnREaXIgJiYgY21ha2VDZmdJbnREaXJbMF0gIT0gJy4nKSB7CiAgICAgc2luZ2xlTGluZS5wdXNoX2JhY2soIi1DIik7CiAgICAgc2luZ2xlTGluZS5wdXNoX2JhY2soY21ha2VDZmdJbnREaXIpOwpAQCAtMjQ3NSw2ICsyNTI2LDcgQEAKICAgfQogICBHbG9iYWxUYXJnZXRJbmZvIGd0aTsKICAgZ3RpLk5hbWUgPSBlZGl0Q2FjaGVUYXJnZXROYW1lOworICBndGkuUGVyQ29uZmlnID0gZmFsc2U7CiAgIGNtQ3VzdG9tQ29tbWFuZExpbmUgc2luZ2xlTGluZTsKIAogICAvLyBVc2UgZ2VuZXJhdG9yIHByZWZlcmVuY2UgZm9yIHRoZSBlZGl0X2NhY2hlIHJ1bGUgaWYgaXQgaXMgZGVmaW5lZC4KQEAgLTI1MDksOCArMjU2MSwxMCBAQAogICBndGkuTmFtZSA9IHJlYnVpbGRDYWNoZVRhcmdldE5hbWU7CiAgIGd0aS5NZXNzYWdlID0gIlJ1bm5pbmcgQ01ha2UgdG8gcmVnZW5lcmF0ZSBidWlsZCBzeXN0ZW0uLi4iOwogICBndGkuVXNlc1Rlcm1pbmFsID0gdHJ1ZTsKKyAgZ3RpLlBlckNvbmZpZyA9IGZhbHNlOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lIHNpbmdsZUxpbmU7CiAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKTsKKyAgc2luZ2xlTGluZS5wdXNoX2JhY2soIi0tcmVnZW5lcmF0ZS1kdXJpbmctYnVpbGQiKTsKICAgc2luZ2xlTGluZS5wdXNoX2JhY2soIi1TJChDTUFLRV9TT1VSQ0VfRElSKSIpOwogICBzaW5nbGVMaW5lLnB1c2hfYmFjaygiLUIkKENNQUtFX0JJTkFSWV9ESVIpIik7CiAgIGd0aS5Db21tYW5kTGluZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShzaW5nbGVMaW5lKSk7CkBAIC0yNTIwLDcgKzI1NzQsNyBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkR2xvYmFsVGFyZ2V0X0luc3RhbGwoCiAgIHN0ZDo6dmVjdG9yPEdsb2JhbFRhcmdldEluZm8+JiB0YXJnZXRzKQogewotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1swXTsKKyAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CiAgIGNvbnN0IGNoYXIqIGNtYWtlQ2ZnSW50RGlyID0gdGhpcy0+R2V0Q01ha2VDRkdJbnREaXIoKTsKICAgYm9vbCBza2lwSW5zdGFsbFJ1bGVzID0gbWYtPklzT24oIkNNQUtFX1NLSVBfSU5TVEFMTF9SVUxFUyIpOwogICBpZiAodGhpcy0+SW5zdGFsbFRhcmdldEVuYWJsZWQgJiYgc2tpcEluc3RhbGxSdWxlcykgewpAQCAtMjU3MCw3ICsyNjI0LDcgQEAKICAgICBzaW5nbGVMaW5lLnB1c2hfYmFjayhjbWQpOwogICAgIGlmIChjbWFrZUNmZ0ludERpciAmJiAqY21ha2VDZmdJbnREaXIgJiYgY21ha2VDZmdJbnREaXJbMF0gIT0gJy4nKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjZmdBcmcgPSAiLURCVUlMRF9UWVBFPSI7Ci0gICAgICBib29sIHVzZUVQTiA9IHRoaXMtPlVzZUVmZmVjdGl2ZVBsYXRmb3JtTmFtZShtZik7CisgICAgICBib29sIHVzZUVQTiA9IHRoaXMtPlVzZUVmZmVjdGl2ZVBsYXRmb3JtTmFtZShtZi5nZXQoKSk7CiAgICAgICBpZiAodXNlRVBOKSB7CiAgICAgICAgIGNmZ0FyZyArPSAiJChDT05GSUdVUkFUSU9OKSI7CiAgICAgICAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKGNmZ0FyZyk7CkBAIC0yNjE5LDEzICsyNjczLDEzIEBACiAgIH0KIH0KIAotY29uc3QgY2hhciogY21HbG9iYWxHZW5lcmF0b3I6OkdldFByZWRlZmluZWRUYXJnZXRzRm9sZGVyKCkKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsR2VuZXJhdG9yOjpHZXRQcmVkZWZpbmVkVGFyZ2V0c0ZvbGRlcigpCiB7Ci0gIGNvbnN0IGNoYXIqIHByb3AgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAorICBjbVByb3AgcHJvcCA9IHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCiAgICAgIlBSRURFRklORURfVEFSR0VUU19GT0xERVIiKTsKIAogICBpZiAocHJvcCkgewotICAgIHJldHVybiBwcm9wOworICAgIHJldHVybiAqcHJvcDsKICAgfQogCiAgIHJldHVybiAiQ01ha2VQcmVkZWZpbmVkVGFyZ2V0cyI7CkBAIC0yNjMzLDEzICsyNjg3LDEzIEBACiAKIGJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OlVzZUZvbGRlclByb3BlcnR5KCkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogcHJvcCA9CisgIGNtUHJvcCBwcm9wID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJVU0VfRk9MREVSUyIpOwogCiAgIC8vIElmIHRoaXMgcHJvcGVydHkgaXMgZGVmaW5lZCwgbGV0IHRoZSBzZXR0ZXIgdHVybiB0aGlzIG9uIG9yIG9mZi4uLgogICAvLwogICBpZiAocHJvcCkgewotICAgIHJldHVybiBjbUlzT24ocHJvcCk7CisgICAgcmV0dXJuIGNtSXNPbigqcHJvcCk7CiAgIH0KIAogICAvLyBCeSBkZWZhdWx0LCB0aGlzIGZlYXR1cmUgaXMgT0ZGLCBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZQpAQCAtMjY1MywyMiArMjcwNywyMiBAQAogewogICAvLyBQYWNrYWdlCiAgIGNtVGFyZ2V0IHRhcmdldChndGkuTmFtZSwgY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VULAotICAgICAgICAgICAgICAgICAgY21UYXJnZXQ6OlZpc2liaWxpdHlOb3JtYWwsIG1mKTsKKyAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0OjpWaXNpYmlsaXR5Tm9ybWFsLCBtZiwgZ3RpLlBlckNvbmZpZyk7CiAgIHRhcmdldC5TZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIsICJUUlVFIik7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX291dHB1dHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwZW5kczsKICAgLy8gU3RvcmUgdGhlIGN1c3RvbSBjb21tYW5kIGluIHRoZSB0YXJnZXQuCi0gIGNtQ3VzdG9tQ29tbWFuZCBjYyhudWxscHRyLCBub19vdXRwdXRzLCBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLAotICAgICAgICAgICAgICAgICAgICAgZ3RpLkNvbW1hbmRMaW5lcywgbnVsbHB0ciwgZ3RpLldvcmtpbmdEaXIuY19zdHIoKSk7CisgIGNtQ3VzdG9tQ29tbWFuZCBjYyhub19vdXRwdXRzLCBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLCBndGkuQ29tbWFuZExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSgpLCBudWxscHRyLCBndGkuV29ya2luZ0Rpci5jX3N0cigpKTsKICAgY2MuU2V0VXNlc1Rlcm1pbmFsKGd0aS5Vc2VzVGVybWluYWwpOwogICB0YXJnZXQuQWRkUG9zdEJ1aWxkQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKICAgaWYgKCFndGkuTWVzc2FnZS5lbXB0eSgpKSB7Ci0gICAgdGFyZ2V0LlNldFByb3BlcnR5KCJFY2hvU3RyaW5nIiwgZ3RpLk1lc3NhZ2UuY19zdHIoKSk7CisgICAgdGFyZ2V0LlNldFByb3BlcnR5KCJFY2hvU3RyaW5nIiwgZ3RpLk1lc3NhZ2UpOwogICB9CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBndGkuRGVwZW5kcykgewotICAgIHRhcmdldC5BZGRVdGlsaXR5KGQpOworICAgIHRhcmdldC5BZGRVdGlsaXR5KGQsIGZhbHNlKTsKICAgfQogCiAgIC8vIE9yZ2FuaXplIGluIHRoZSAicHJlZGVmaW5lZCB0YXJnZXRzIiBmb2xkZXI6CkBAIC0yNzM3LDkgKzI3OTEsOSBAQAogfQogCiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpTZXRFeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcigKLSAgY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvciogZXh0cmFHZW5lcmF0b3IpCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yPiBleHRyYUdlbmVyYXRvcikKIHsKLSAgdGhpcy0+RXh0cmFHZW5lcmF0b3IucmVzZXQoZXh0cmFHZW5lcmF0b3IpOworICB0aGlzLT5FeHRyYUdlbmVyYXRvciA9IHN0ZDo6bW92ZShleHRyYUdlbmVyYXRvcik7CiAgIGlmICh0aGlzLT5FeHRyYUdlbmVyYXRvcikgewogICAgIHRoaXMtPkV4dHJhR2VuZXJhdG9yLT5TZXRHbG9iYWxHZW5lcmF0b3IodGhpcyk7CiAgIH0KQEAgLTI3NjUsMjcgKzI4MTksMjYgQEAKICAgICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihmaWxlbmFtZXMpKTsKIH0KIAotdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6R2V0VGFyZ2V0U2V0cyhUYXJnZXREZXBlbmRTZXQmIHByb2plY3RUYXJnZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXREZXBlbmRTZXQmIG9yaWdpbmFsVGFyZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yVmVjdG9yIGNvbnN0JiBnZW5lcmF0b3JzKQordm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6R2V0VGFyZ2V0U2V0cygKKyAgVGFyZ2V0RGVwZW5kU2V0JiBwcm9qZWN0VGFyZ2V0cywgVGFyZ2V0RGVwZW5kU2V0JiBvcmlnaW5hbFRhcmdldHMsCisgIGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgZ2VuZXJhdG9ycykKIHsKICAgLy8gbG9vcCBvdmVyIGFsbCBsb2NhbCBnZW5lcmF0b3JzCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogZ2VuZXJhdG9yIDogZ2VuZXJhdG9ycykgeworICBmb3IgKGF1dG8gZ2VuZXJhdG9yIDogZ2VuZXJhdG9ycykgewogICAgIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSBnZW5lcmF0b3IgaXMgbm90IGV4Y2x1ZGVkCiAgICAgaWYgKHRoaXMtPklzRXhjbHVkZWQocm9vdCwgZ2VuZXJhdG9yKSkgewogICAgICAgY29udGludWU7CiAgICAgfQogICAgIC8vIGxvb3Agb3ZlciBhbGwgdGhlIGdlbmVyYXRvciB0YXJnZXRzIGluIHRoZSBtYWtlZmlsZQotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7Ci0gICAgICBpZiAodGhpcy0+SXNSb290T25seVRhcmdldCh0YXJnZXQpICYmCisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBnZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgICAgaWYgKHRoaXMtPklzUm9vdE9ubHlUYXJnZXQodGFyZ2V0LmdldCgpKSAmJgogICAgICAgICAgIHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSAhPSByb290KSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgICAgLy8gcHV0IHRoZSB0YXJnZXQgaW4gdGhlIHNldCBvZiBvcmlnaW5hbCB0YXJnZXRzCi0gICAgICBvcmlnaW5hbFRhcmdldHMuaW5zZXJ0KHRhcmdldCk7CisgICAgICBvcmlnaW5hbFRhcmdldHMuaW5zZXJ0KHRhcmdldC5nZXQoKSk7CiAgICAgICAvLyBHZXQgdGhlIHNldCBvZiB0YXJnZXRzIHRoYXQgZGVwZW5kIG9uIHRhcmdldAotICAgICAgdGhpcy0+QWRkVGFyZ2V0RGVwZW5kcyh0YXJnZXQsIHByb2plY3RUYXJnZXRzKTsKKyAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZHModGFyZ2V0LmdldCgpLCBwcm9qZWN0VGFyZ2V0cyk7CiAgICAgfQogICB9CiB9CkBAIC0yOTYxLDEyICszMDE0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9DTWFrZUZpbGVzL1RhcmdldERpcmVjdG9yaWVzLnR4dCIpOwogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZm91dChmbmFtZSk7CiAKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICAgIGZvciAoY29uc3QgYXV0byYgdGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaWYgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9Ci0gICAgICB0aGlzLT5Xcml0ZVN1bW1hcnkodGd0KTsKKyAgICAgIHRoaXMtPldyaXRlU3VtbWFyeSh0Z3QuZ2V0KCkpOwogICAgICAgZm91dCA8PCB0Z3QtPkdldFN1cHBvcnREaXJlY3RvcnkoKSA8PCAiXG4iOwogICAgIH0KICAgfQpAQCAtMzEwOCwxMCArMzE2MSwyMCBAQAogICByZXR1cm4gdGhpcy0+RmlsZW5hbWVUYXJnZXREZXBlbmRzW3NmXTsKIH0KIAorY29uc3Qgc3RkOjpzdHJpbmcmIGNtR2xvYmFsR2VuZXJhdG9yOjpHZXRSZWFsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgZGlyKQoreworICBhdXRvIGkgPSB0aGlzLT5SZWFsUGF0aHMubG93ZXJfYm91bmQoZGlyKTsKKyAgaWYgKGkgPT0gdGhpcy0+UmVhbFBhdGhzLmVuZCgpIHx8CisgICAgICB0aGlzLT5SZWFsUGF0aHMua2V5X2NvbXAoKShkaXIsIGktPmZpcnN0KSkgeworICAgIGkgPSB0aGlzLT5SZWFsUGF0aHMuZW1wbGFjZV9oaW50KGksIGRpciwgY21TeXN0ZW1Ub29sczo6R2V0UmVhbFBhdGgoZGlyKSk7CisgIH0KKyAgcmV0dXJuIGktPnNlY29uZDsKK30KKwogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6UHJvY2Vzc0V2YWx1YXRpb25GaWxlcygpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBnZW5lcmF0ZWRGaWxlczsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgbG9jYWxHZW4tPlByb2Nlc3NFdmFsdWF0aW9uRmlsZXMoZ2VuZXJhdGVkRmlsZXMpOwogICB9CiB9CkBAIC0zMTI3LDcgKzMxOTAsNyBAQAogICBjbWFrZTo6SW5zdGFsbGVkRmlsZXNNYXAgY29uc3QmIGluc3RhbGxlZEZpbGVzID0KICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRJbnN0YWxsZWRGaWxlcygpOwogCi0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOworICBjb25zdCBhdXRvJiBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXTsKICAgY21NYWtlZmlsZSogbWYgPSBsZy0+R2V0TWFrZWZpbGUoKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKQEAgLTMxNDYsOCArMzIwOSw4IEBACiAgIGZvciAoYXV0byBjb25zdCYgaSA6IGluc3RhbGxlZEZpbGVzKSB7CiAgICAgY21JbnN0YWxsZWRGaWxlIGNvbnN0JiBpbnN0YWxsZWRGaWxlID0gaS5zZWNvbmQ7CiAKLSAgICBjbUNQYWNrUHJvcGVydGllc0dlbmVyYXRvciBjcGFja1Byb3BlcnRpZXNHZW5lcmF0b3IobGcsIGluc3RhbGxlZEZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3MpOworICAgIGNtQ1BhY2tQcm9wZXJ0aWVzR2VuZXJhdG9yIGNwYWNrUHJvcGVydGllc0dlbmVyYXRvcigKKyAgICAgIGxnLmdldCgpLCBpbnN0YWxsZWRGaWxlLCBjb25maWdzKTsKIAogICAgIGNwYWNrUHJvcGVydGllc0dlbmVyYXRvci5HZW5lcmF0ZShmaWxlLCBjb25maWcsIGNvbmZpZ3MpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCmluZGV4IGYyNWZmN2IuLjcwZTQzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCkBAIC0xNCw5ICsxNCwxMCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21fY29kZWN2dC5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbUV4cG9ydFNldC5oIgpAQCAtNDMsNiArNDQsNyBAQAogY2xhc3MgY21NYWtlZmlsZTsKIGNsYXNzIGNtT3V0cHV0Q29udmVydGVyOwogY2xhc3MgY21Tb3VyY2VGaWxlOworY2xhc3MgY21TdGF0ZTsKIGNsYXNzIGNtU3RhdGVEaXJlY3Rvcnk7CiBjbGFzcyBjbWFrZTsKIApAQCAtNzEsNyArNzMsNyBAQAogICB2b2lkIEFkZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHN0YXJ0LAogICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCkKICAgewotICAgIGNtQXBwZW5kKFByaW1hcnlDb21tYW5kLCBzdGFydCwgZW5kKTsKKyAgICBjbTo6YXBwZW5kKFByaW1hcnlDb21tYW5kLCBzdGFydCwgZW5kKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIFByaW50YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNtSm9pbihQcmltYXJ5Q29tbWFuZCwgIiAiKTsgfQpAQCAtOTAsMTEgKzkyLDE0IEBACiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcgogewogcHVibGljOgorICB1c2luZyBMb2NhbEdlbmVyYXRvclZlY3RvciA9IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPj47CisKICAgLy8hIEZyZWUgYW55IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB0aGUgR2xvYmFsR2VuZXJhdG9yCiAgIGNtR2xvYmFsR2VuZXJhdG9yKGNtYWtlKiBjbSk7CiAgIHZpcnR1YWwgfmNtR2xvYmFsR2VuZXJhdG9yKCk7CiAKLSAgdmlydHVhbCBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZik7CisgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKTsKIAogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGlzIGdlbmVyYXRvcgogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiAiR2VuZXJpYyI7IH0KQEAgLTEyOCw3ICsxMzMsMTQgQEAKIAogICAvKiogU2V0IHRoZSBnZW5lcmF0b3Itc3BlY2lmaWMgdG9vbHNldCBuYW1lLiAgUmV0dXJucyB0cnVlIGlmIHRvb2xzZXQKICAgICAgIGlzIHN1cHBvcnRlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgKi8KLSAgdmlydHVhbCBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBjbU1ha2VmaWxlKiBtZik7CisgIHZpcnR1YWwgYm9vbCBTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgYm9vbCBidWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpOworCisgIC8qKiBSZWFkIGFueSBvdGhlciBjYWNoZSBlbnRyaWVzIG5lZWRlZCBmb3IgY21ha2UgLS1idWlsZC4gKi8KKyAgdmlydHVhbCBib29sIFJlYWRDYWNoZUVudHJpZXNGb3JCdWlsZChjb25zdCBjbVN0YXRlJiAvKnN0YXRlKi8pCisgIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogCiAgIC8qKgogICAgKiBDcmVhdGUgTG9jYWxHZW5lcmF0b3JzIGFuZCBwcm9jZXNzIHRoZSBDTWFrZUxpc3RzIGZpbGVzLiBUaGlzIGRvZXMgbm90CkBAIC0xNTcsMTEgKzE2OSwxMSBAQAogICAgKi8KICAgdmlydHVhbCB2b2lkIEdlbmVyYXRlKCk7CiAKLSAgdmlydHVhbCBjbUxpbmtMaW5lQ29tcHV0ZXIqIENyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCisgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gQ3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICBjbU91dHB1dENvbnZlcnRlciogb3V0cHV0Q29udmVydGVyLAogICAgIGNtU3RhdGVEaXJlY3RvcnkgY29uc3QmIHN0YXRlRGlyKSBjb25zdDsKIAotICBjbUxpbmtMaW5lQ29tcHV0ZXIqIENyZWF0ZU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IENyZWF0ZU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIoCiAgICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwKICAgICBjbVN0YXRlRGlyZWN0b3J5IGNvbnN0JiBzdGF0ZURpcikgY29uc3Q7CiAKQEAgLTI0NCwxMSArMjU2LDExIEBACiAgIGNtYWtlKiBHZXRDTWFrZUluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q01ha2VJbnN0YW5jZTsgfQogCiAgIHZvaWQgU2V0Q29uZmlndXJlZEZpbGVzUGF0aChjbUdsb2JhbEdlbmVyYXRvciogZ2VuKTsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+JiBHZXRNYWtlZmlsZXMoKSBjb25zdAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZT4+JiBHZXRNYWtlZmlsZXMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPk1ha2VmaWxlczsKICAgfQotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIEdldExvY2FsR2VuZXJhdG9ycygpIGNvbnN0CisgIGNvbnN0IExvY2FsR2VuZXJhdG9yVmVjdG9yJiBHZXRMb2NhbEdlbmVyYXRvcnMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkxvY2FsR2VuZXJhdG9yczsKICAgfQpAQCAtMjYzLDExICsyNzUsMTEgQEAKICAgICB0aGlzLT5DdXJyZW50Q29uZmlndXJlTWFrZWZpbGUgPSBtZjsKICAgfQogCi0gIHZvaWQgQWRkTWFrZWZpbGUoY21NYWtlZmlsZSogbWYpOworICB2b2lkIEFkZE1ha2VmaWxlKHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlPiBtZik7CiAKICAgLy8hIFNldCBhbiBnZW5lcmF0b3IgZm9yIGFuICJleHRlcm5hbCBtYWtlZmlsZSBiYXNlZCBwcm9qZWN0IgogICB2b2lkIFNldEV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKAotICAgIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqIGV4dHJhR2VuZXJhdG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4gZXh0cmFHZW5lcmF0b3IpOwogCiAgIHN0ZDo6c3RyaW5nIEdldEV4dHJhR2VuZXJhdG9yTmFtZSgpIGNvbnN0OwogCkBAIC0zNzcsNiArMzg5LDkgQEAKICAgLy8gTG9va3VwIGVkaXRfY2FjaGUgdGFyZ2V0IGNvbW1hbmQgcHJlZmVycmVkIGJ5IHRoaXMgZ2VuZXJhdG9yLgogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldEVkaXRDYWNoZUNvbW1hbmQoKSBjb25zdCB7IHJldHVybiAiIjsgfQogCisgIC8vIERlZmF1bHQgY29uZmlnIHRvIHVzZSBmb3IgY21ha2UgLS1idWlsZAorICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldERlZmF1bHRCdWlsZENvbmZpZygpIGNvbnN0IHsgcmV0dXJuICJEZWJ1ZyI7IH0KKwogICAvLyBDbGFzcyB0byB0cmFjayBhIHNldCBvZiBkZXBlbmRlbmNpZXMuCiAgIHVzaW5nIFRhcmdldERlcGVuZFNldCA9IGNtVGFyZ2V0RGVwZW5kU2V0OwogCkBAIC00MTAsNiArNDI1LDggQEAKIAogICB2aXJ0dWFsIGJvb2wgSXNYY29kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgdmlydHVhbCBib29sIElzVmlzdWFsU3R1ZGlvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAvKiogUmV0dXJuIHRydWUgaWYgd2Uga25vdyB0aGUgZXhhY3QgbG9jYXRpb24gb2Ygb2JqZWN0IGZpbGVzLgogICAgICAgSWYgZmFsc2UsIHN0b3JlIHRoZSByZWFzb24gaW4gdGhlIGdpdmVuIHN0cmluZy4KICAgICAgIFRoaXMgaXMgbWVhbmluZ2Z1bCBvbmx5IGFmdGVyIEVuYWJsZUxhbmd1YWdlIGhhcyBiZWVuIGNhbGxlZC4gICovCkBAIC00MzEsMTEgKzQ0OCwxNyBAQAogICAgICAgTWFjRm9sZGVyLiAqLwogICB2aXJ0dWFsIGJvb2wgU2hvdWxkU3RyaXBSZXNvdXJjZVBhdGgoY21NYWtlZmlsZSopIGNvbnN0OwogCisgIHZpcnR1YWwgYm9vbCBTdXBwb3J0c0N1c3RvbUNvbW1hbmREZXBmaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICBzdGQ6OnN0cmluZyBHZXRTaGFyZWRMaWJGbGFnc0Zvckxhbmd1YWdlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKIAogICAvKiogR2VuZXJhdGUgYW4gPG91dHB1dD4ucnVsZSBmaWxlIHBhdGggZm9yIGEgZ2l2ZW4gY29tbWFuZCBvdXRwdXQuICAqLwogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdlbmVyYXRlUnVsZUZpbGUoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCkgY29uc3Q7CiAKKyAgdmlydHVhbCBib29sIFN1cHBvcnRzRGVmYXVsdEJ1aWxkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgIHZpcnR1YWwgYm9vbCBTdXBwb3J0c0Nyb3NzQ29uZmlncygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgIHZpcnR1YWwgYm9vbCBTdXBwb3J0c0RlZmF1bHRDb25maWdzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICBzdGF0aWMgc3RkOjpzdHJpbmcgRXNjYXBlSlNPTihjb25zdCBzdGQ6OnN0cmluZyYgcyk7CiAKICAgdm9pZCBQcm9jZXNzRXZhbHVhdGlvbkZpbGVzKCk7CkBAIC00NDQsOCArNDY3LDggQEAKICAgewogICAgIHJldHVybiB0aGlzLT5CdWlsZEV4cG9ydFNldHM7CiAgIH0KLSAgdm9pZCBBZGRCdWlsZEV4cG9ydFNldChjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciopOwotICB2b2lkIEFkZEJ1aWxkRXhwb3J0RXhwb3J0U2V0KGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKik7CisgIHZvaWQgQWRkQnVpbGRFeHBvcnRTZXQoY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIGdlbik7CisgIHZvaWQgQWRkQnVpbGRFeHBvcnRFeHBvcnRTZXQoY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIGdlbik7CiAgIGJvb2wgSXNFeHBvcnRlZFRhcmdldHNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3Q7CiAgIGJvb2wgR2VuZXJhdGVJbXBvcnRGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKTsKICAgY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIEdldEV4cG9ydGVkVGFyZ2V0c0ZpbGUoCkBAIC00NzUsMTMgKzQ5OCwxOSBAQAogCiAgIGludCBSZWN1cnNpb25EZXB0aDsKIAorICB2aXJ0dWFsIHZvaWQgR2V0UXRBdXRvR2VuQ29uZmlncyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ3MpIGNvbnN0CisgIHsKKyAgICBjb25maWdzLmVtcGxhY2VfYmFjaygiJDxDT05GSUc+Iik7CisgIH0KKworICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0UmVhbFBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGRpcik7CisKIHByb3RlY3RlZDoKLSAgdXNpbmcgR2VuZXJhdG9yVmVjdG9yID0gc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+OwogICAvLyBmb3IgYSBwcm9qZWN0IGNvbGxlY3QgYWxsIGl0cyB0YXJnZXRzIGJ5IGZvbGxvd2luZyBkZXBlbmQKICAgLy8gaW5mb3JtYXRpb24sIGFuZCBhbHNvIGNvbGxlY3QgYWxsIHRoZSB0YXJnZXRzCiAgIHZvaWQgR2V0VGFyZ2V0U2V0cyhUYXJnZXREZXBlbmRTZXQmIHByb2plY3RUYXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0RGVwZW5kU2V0JiBvcmlnaW5hbFRhcmdldHMsIGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JWZWN0b3IgY29uc3QmKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgZ2VuZXJhdG9ycyk7CiAgIGJvb2wgSXNSb290T25seVRhcmdldChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KSBjb25zdDsKICAgdm9pZCBBZGRUYXJnZXREZXBlbmRzKGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXREZXBlbmRTZXQmIHByb2plY3RUYXJnZXRzKTsKQEAgLTUyNCw2ICs1NTMsNyBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEZXBlbmRzOwogICAgIHN0ZDo6c3RyaW5nIFdvcmtpbmdEaXI7CiAgICAgYm9vbCBVc2VzVGVybWluYWwgPSBmYWxzZTsKKyAgICBib29sIFBlckNvbmZpZyA9IHRydWU7CiAgIH07CiAKICAgdm9pZCBDcmVhdGVEZWZhdWx0R2xvYmFsVGFyZ2V0cyhzdGQ6OnZlY3RvcjxHbG9iYWxUYXJnZXRJbmZvPiYgdGFyZ2V0cyk7CkBAIC01MzksOCArNTY5LDggQEAKICAgc3RkOjpzdHJpbmcgRmluZE1ha2VQcm9ncmFtRmlsZTsKICAgc3RkOjpzdHJpbmcgQ29uZmlndXJlZEZpbGVzUGF0aDsKICAgY21ha2UqIENNYWtlSW5zdGFuY2U7Ci0gIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiBNYWtlZmlsZXM7Ci0gIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiBMb2NhbEdlbmVyYXRvcnM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlPj4gTWFrZWZpbGVzOworICBMb2NhbEdlbmVyYXRvclZlY3RvciBMb2NhbEdlbmVyYXRvcnM7CiAgIGNtTWFrZWZpbGUqIEN1cnJlbnRDb25maWd1cmVNYWtlZmlsZTsKICAgLy8gbWFwIGZyb20gcHJvamVjdCBuYW1lIHRvIHZlY3RvciBvZiBsb2NhbCBnZW5lcmF0b3JzIGluIHRoYXQgcHJvamVjdAogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+PiBQcm9qZWN0TWFwOwpAQCAtNTU4LDcgKzU4OCw3IEBACiAKICAgY21HZW5lcmF0b3JUYXJnZXQqIEZpbmRHZW5lcmF0b3JUYXJnZXRJbXBsKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSBjb25zdDsKIAotICBjb25zdCBjaGFyKiBHZXRQcmVkZWZpbmVkVGFyZ2V0c0ZvbGRlcigpOworICBzdGQ6OnN0cmluZyBHZXRQcmVkZWZpbmVkVGFyZ2V0c0ZvbGRlcigpOwogCiBwcml2YXRlOgogICB1c2luZyBUYXJnZXRNYXAgPSBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGNtVGFyZ2V0Kj47CkBAIC02NDYsNiArNjc2LDkgQEAKIAogICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldEJ1aWxkSWdub3JlRXJyb3JzRmxhZygpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICBib29sIFVuc3VwcG9ydGVkVmFyaWFibGVJc0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRlZCkgY29uc3Q7CisKICAgLy8gQ2FjaGUgZGlyZWN0b3J5IGNvbnRlbnQgYW5kIHRhcmdldCBmaWxlcyB0byBiZSBidWlsdC4KICAgc3RydWN0IERpcmVjdG9yeUNvbnRlbnQKICAgewpAQCAtNjY2LDYgKzY5OSw4IEBACiAgIG11dGFibGUgc3RkOjptYXA8Y21Tb3VyY2VGaWxlKiwgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPj4KICAgICBGaWxlbmFtZVRhcmdldERlcGVuZHM7CiAKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBSZWFsUGF0aHM7CisKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAgIC8vIFBvb2wgb2YgZmlsZSBsb2NrcwogICBjbUZpbGVMb2NrUG9vbCBGaWxlTG9ja1Bvb2w7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5LmggYi9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5LmgKaW5kZXggYmI1Zjc0Yy4uMzcwOTM2NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkuaApAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKIGNsYXNzIGNtYWtlOwogc3RydWN0IGNtRG9jdW1lbnRhdGlvbkVudHJ5OwpAQCAtMjMsOCArMjUsOCBAQAogICB2aXJ0dWFsIH5jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkoKSA9IGRlZmF1bHQ7CiAKICAgLyoqIENyZWF0ZSBhIEdsb2JhbEdlbmVyYXRvciAqLwotICB2aXJ0dWFsIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0ID0gMDsKKyAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbiwgY21ha2UqIGNtKSBjb25zdCA9IDA7CiAKICAgLyoqIEdldCB0aGUgZG9jdW1lbnRhdGlvbiBlbnRyeSBmb3IgdGhpcyBmYWN0b3J5ICovCiAgIHZpcnR1YWwgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkgY29uc3QgPSAwOwpAQCAtNTEsMTMgKzUzLDEzIEBACiB7CiBwdWJsaWM6CiAgIC8qKiBDcmVhdGUgYSBHbG9iYWxHZW5lcmF0b3IgKi8KLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBpZiAobmFtZSAhPSBUOjpHZXRBY3R1YWxOYW1lKCkpIHsKLSAgICAgIHJldHVybiBudWxscHRyOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyBUKGNtKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihjbTo6bWFrZV91bmlxdWU8VD4oY20pKTsKICAgfQogCiAgIC8qKiBHZXQgdGhlIGRvY3VtZW50YXRpb24gZW50cnkgZm9yIHRoaXMgZmFjdG9yeSAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuY3h4CmluZGV4IDVhNzA4YWIuLjI4OWEwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5jeHgKQEAgLTgsNiArOCw5IEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZz4KKwogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCkBAIC00MCwxMCArNDMsMTEgQEAKIAogY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6fmNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKAotICBjbU1ha2VmaWxlKiBtZikKK3N0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPgorY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpCiB7Ci0gIHJldHVybiBuZXcgY21Mb2NhbEdoc011bHRpR2VuZXJhdG9yKHRoaXMsIG1mKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbEdoc011bHRpR2VuZXJhdG9yPih0aGlzLCBtZikpOwogfQogCiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OkdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KQpAQCAtNjQsOCArNjgsMTEgQEAKIH0KIAogYm9vbCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBtZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJ1aWxkLCBjbU1ha2VmaWxlKiBtZikKIHsKKyAgaWYgKGJ1aWxkKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KICAgc3RkOjpzdHJpbmcgdHNwOyAvKiB0b29sc2V0IHBhdGggKi8KIAogICB0aGlzLT5HZXRUb29sc2V0KG1mLCB0c3AsIHRzKTsKQEAgLTg0LDcgKzkxLDcgQEAKICAgICAvKiBzdG9yZSB0aGUgZnVsbCB0b29sc2V0IGZvciBsYXRlciB1c2UKICAgICAgKiAtLSBhbHJlYWR5IGRvbmUgaWYgLVQ8dG9vbHNldD4gd2FzIHNwZWNpZmllZAogICAgICAqLwotICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIiwgdHNwLmNfc3RyKCksCisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQiLCB0c3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYXRpb24gb2YgZ2VuZXJhdG9yIHRvb2xzZXQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogICB9CkBAIC0xMDYsOCArMTEzLDggQEAKICAgfQogCiAgIC8qIHN0b3JlIHRoZSB0b29sc2V0IHRoYXQgaXMgYmVpbmcgdXNlZCBmb3IgdGhpcyBidWlsZCAqLwotICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iLCBnYnVpbGQuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQgcHJvZ3JhbSB0byB1c2UiLCBjbVN0YXRlRW51bXM6OklOVEVSTkFMLCB0cnVlKTsKKyAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIiwgZ2J1aWxkLCAiYnVpbGQgcHJvZ3JhbSB0byB1c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwsIHRydWUpOwogCiAgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9TWVNURU1fVkVSU0lPTiIsIHRzcCk7CiAKQEAgLTEyNiw3ICsxMzMsNyBAQAogICAgIC8qIHN0b3JlIHRoZSBwbGF0Zm9ybSBuYW1lIGZvciBsYXRlciB1c2UKICAgICAgKiAtLSBhbHJlYWR5IGRvbmUgaWYgLUE8YXJjaD4gd2FzIHNwZWNpZmllZAogICAgICAqLwotICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIsIGFyY2guY19zdHIoKSwKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iLCBhcmNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUgb2YgZ2VuZXJhdG9yIHBsYXRmb3JtLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKICAgfSBlbHNlIHsKQEAgLTE2MCw3ICsxNjcsNyBAQAogICBpZiAoY21Jc09mZihic3BOYW1lKSAmJiBwbGF0Zm9ybS5maW5kKCJpbnRlZ3JpdHkiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIGJzcE5hbWUgPSAic2ltIiArIGFyY2g7CiAgICAgLyogd3JpdGUgYmFjayB0aGUgY2FsY3VsYXRlIG5hbWUgZm9yIG5leHQgdGltZSAqLwotICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkdIU19CU1BfTkFNRSIsIGJzcE5hbWUuY19zdHIoKSwKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJHSFNfQlNQX05BTUUiLCBic3BOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUgb2YgR0hTIHRhcmdldCBwbGF0Zm9ybS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVFJJTkcsIHRydWUpOwogICAgIHN0ZDo6c3RyaW5nIG0gPSBjbVN0ckNhdCgKQEAgLTI0NywxNCArMjU0LDE1IEBACiAKIHZvaWQgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6V3JpdGVGaWxlSGVhZGVyKHN0ZDo6b3N0cmVhbSYgZm91dCkKIHsKLSAgZm91dCA8PCAiIyFnYnVpbGQiIDw8IHN0ZDo6ZW5kbDsKLSAgZm91dCA8PCAiIyIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgQ01BS0UgZ2VuZXJhdGVkIGZpbGU6IERPIE5PVCBFRElUISIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgR2VuZXJhdGVkIGJ5IFwiIiA8PCBHZXRBY3R1YWxOYW1lKCkgPDwgIlwiIgotICAgICAgIDw8ICIgR2VuZXJhdG9yLCBDTWFrZSBWZXJzaW9uICIgPDwgY21WZXJzaW9uOjpHZXRNYWpvclZlcnNpb24oKSA8PCAiLiIKLSAgICAgICA8PCBjbVZlcnNpb246OkdldE1pbm9yVmVyc2lvbigpIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCBzdGQ6OmVuZGw7CisgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgZm91dCA8PCAiIyFnYnVpbGRcbiIKKyAgICAgICAgICAiI1xuIgorICAgICAgICAgICIjIENNQUtFIGdlbmVyYXRlZCBmaWxlOiBETyBOT1QgRURJVCFcbiIKKyAgICAgICAgICAiIyBHZW5lcmF0ZWQgYnkgXCIiIDw8IEdldEFjdHVhbE5hbWUoKSA8PCAiXCIiCisgICAgICAgICAgIiBHZW5lcmF0b3IsIENNYWtlIFZlcnNpb24gIiA8PCBjbVZlcnNpb246OkdldE1ham9yVmVyc2lvbigpIDw8ICcuJworICAgICAgIDw8IGNtVmVyc2lvbjo6R2V0TWlub3JWZXJzaW9uKCkgPDwgIlxuIgorICAgICAgICAgICIjXG5cbiI7CisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogfQogCiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OldyaXRlQ3VzdG9tUnVsZUJPRChzdGQ6Om9zdHJlYW0mIGZvdXQpCkBAIC0yNjIsMzYgKzI3MCwzNiBAQAogICBmb3V0IDw8ICJDb21tYW5kcyB7XG4iCiAgICAgICAgICAgIiAgQ3VzdG9tX1J1bGVfQ29tbWFuZCB7XG4iCiAgICAgICAgICAgIiAgICBuYW1lID0gXCJDdXN0b20gUnVsZSBDb21tYW5kXCJcbiIKLSAgICAgICAgICAiICAgIGV4ZWMgPSBcIiI7CisgICAgICAgICAgIiAgICBleGVjID0gXCIiCiAjaWZkZWYgX1dJTjMyCi0gIGZvdXQgPDwgImNtZC5leGUiOworICAgICAgICAgICJjbWQuZXhlIgogI2Vsc2UKLSAgZm91dCA8PCAiL2Jpbi9zaCI7CisgICAgICAgICAgIi9iaW4vc2giCiAjZW5kaWYKLSAgZm91dCA8PCAiXCJcbiIKKyAgICAgICAgICAiXCJcbiIKICAgICAgICAgICAiICAgIG9wdGlvbnMgPSB7XCJTcGVjaWFsT3B0aW9uc1wifVxuIgogICAgICAgICAgICIgIH1cbiIKLSAgICAgICAgICAifVxuIjsKKyAgICAgICAgICAifVxuIgogCi0gIGZvdXQgPDwgIlxuXG4iOwotICBmb3V0IDw8ICJGaWxlVHlwZXMge1xuIgorICAgICAgICAgICJcblxuIgorICAgICAgICAgICJGaWxlVHlwZXMge1xuIgogICAgICAgICAgICIgIENtYWtlUnVsZSB7XG4iCiAgICAgICAgICAgIiAgICBuYW1lID0gXCJDdXN0b20gUnVsZVwiXG4iCiAgICAgICAgICAgIiAgICBhY3Rpb24gPSBcIiZSdW5cIlxuIgotICAgICAgICAgICIgICAgZXh0ZW5zaW9ucyA9IHtcIiI7CisgICAgICAgICAgIiAgICBleHRlbnNpb25zID0ge1wiIgogI2lmZGVmIF9XSU4zMgotICBmb3V0IDw8ICJiYXQiOworICAgICAgICAgICJiYXQiCiAjZWxzZQotICBmb3V0IDw8ICJzaCI7CisgICAgICAgICAgInNoIgogI2VuZGlmCi0gIGZvdXQgPDwgIlwifVxuIgorICAgICAgICAgICJcIn1cbiIKICAgICAgICAgICAiICAgIGdyZXBhYmxlID0gZmFsc2VcbiIKICAgICAgICAgICAiICAgIGNvbW1hbmQgPSBcIkN1c3RvbSBSdWxlIENvbW1hbmRcIlxuIgotICAgICAgICAgICIgICAgY29tbWFuZExpbmUgPSBcIiRDT01NQU5EICI7CisgICAgICAgICAgIiAgICBjb21tYW5kTGluZSA9IFwiJENPTU1BTkQgIgogI2lmZGVmIF9XSU4zMgotICBmb3V0IDw8ICIvYyI7CisgICAgICAgICAgIi9jIgogI2VuZGlmCi0gIGZvdXQgPDwgIiAkSU5QVVRGSUxFXCJcbiIKKyAgICAgICAgICAiICRJTlBVVEZJTEVcIlxuIgogICAgICAgICAgICIgICAgcHJvZ3Jlc3MgPSBcIlByb2Nlc3NpbmcgQ3VzdG9tIFJ1bGVcIlxuIgogICAgICAgICAgICIgICAgcHJvbW90ZVRvRmlyc3RQYXNzID0gdHJ1ZVxuIgogICAgICAgICAgICIgICAgb3V0cHV0VHlwZSA9IFwiTm9uZVwiXG4iCkBAIC0zMjEsMTMgKzMyOSwxMyBAQAogICB0aGlzLT5Xcml0ZUhpZ2hMZXZlbERpcmVjdGl2ZXMocm9vdCwgZm91dCk7CiAgIEdoc011bHRpR3BqOjpXcml0ZUdwalRhZyhHaHNNdWx0aUdwajo6UFJPSkVDVCwgZm91dCk7CiAKLSAgZm91dCA8PCAiIyBUb3AgTGV2ZWwgUHJvamVjdCBGaWxlIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIiMgVG9wIExldmVsIFByb2plY3QgRmlsZVxuIjsKIAogICAvLyBTcGVjaWZ5IEJTUCBvcHRpb24gaWYgc3VwcGxpZWQgYnkgdXNlcgogICBjb25zdCBjaGFyKiBic3BOYW1lID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldENhY2hlRGVmaW5pdGlvbigiR0hTX0JTUF9OQU1FIik7CiAgIGlmICghY21Jc09mZihic3BOYW1lKSkgewotICAgIGZvdXQgPDwgIiAgICAtYnNwICIgPDwgYnNwTmFtZSA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiICAgIC1ic3AgIiA8PCBic3BOYW1lIDw8ICdcbic7CiAgIH0KIAogICAvLyBTcGVjaWZ5IE9TIERJUiBpZiBzdXBwbGllZCBieSB1c2VyCkBAIC0zNDIsMTQgKzM1MCwxNCBAQAogICAgIH0gZWxzZSB7CiAgICAgICBmb3V0IDw8IG9zRGlyT3B0aW9uOwogICAgIH0KLSAgICBmb3V0IDw8ICJcIiIgPDwgdGhpcy0+T3NEaXIgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiXCIiIDw8IHRoaXMtPk9zRGlyIDw8ICJcIlxuIjsKICAgfQogfQogCiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OldyaXRlU3ViUHJvamVjdHMoc3RkOjpvc3RyZWFtJiBmb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBhbGxfdGFyZ2V0KQogewotICBmb3V0IDw8ICJDTWFrZUZpbGVzLyIgPDwgYWxsX3RhcmdldCA8PCAiIFtQcm9qZWN0XSIgPDwgc3RkOjplbmRsOworICBmb3V0IDw8ICJDTWFrZUZpbGVzLyIgPDwgYWxsX3RhcmdldCA8PCAiIFtQcm9qZWN0XVxuIjsKICAgLy8gQWxsIGtub3duIHRhcmdldHMKICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0IDogdGhpcy0+UHJvamVjdFRhcmdldHMpIHsKICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSB8fApAQCAtMzYwLDcgKzM2OCw3IEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgZm91dCA8PCAiQ01ha2VGaWxlcy8iIDw8IHRhcmdldC0+R2V0TmFtZSgpICsgIi50Z3QiICsgRklMRV9FWFRFTlNJT04KLSAgICAgICAgIDw8ICIgW1Byb2plY3RdIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICA8PCAiIFtQcm9qZWN0XVxuIjsKICAgfQogfQogCkBAIC0zODQsNyArMzkyLDcgQEAKIAogICAgIHN0ZDo6c3RyaW5nIHByb2pGaWxlID0gZGlyICsgcHJvak5hbWUgKyBGSUxFX0VYVEVOU0lPTjsKICAgICBmb3V0IDw8IHByb2pGaWxlOwotICAgIGZvdXQgPDwgIiAiIDw8IHByb2pUeXBlIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICcgJyA8PCBwcm9qVHlwZSA8PCAnXG4nOwogICB9IGVsc2UgewogICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KQEAgLTYwNiwxNCArNjE0LDE0IEBACiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OldyaXRlTWFjcm9zKHN0ZDo6b3N0cmVhbSYgZm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogcm9vdCkKIHsKLSAgZm91dCA8PCAibWFjcm8gUFJPSl9OQU1FPSIgPDwgcm9vdC0+R2V0UHJvamVjdE5hbWUoKSA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIm1hY3JvIFBST0pfTkFNRT0iIDw8IHJvb3QtPkdldFByb2plY3ROYW1lKCkgPDwgJ1xuJzsKICAgY2hhciBjb25zdCogZ2hzR3BqTWFjcm9zID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldENhY2hlRGVmaW5pdGlvbigiR0hTX0dQSl9NQUNST1MiKTsKICAgaWYgKG51bGxwdHIgIT0gZ2hzR3BqTWFjcm9zKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGFuZGVkTGlzdCA9CiAgICAgICBjbUV4cGFuZGVkTGlzdChzdGQ6OnN0cmluZyhnaHNHcGpNYWNyb3MpKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBleHBhbmRlZExpc3QpIHsKLSAgICAgIGZvdXQgPDwgIm1hY3JvICIgPDwgYXJnIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIm1hY3JvICIgPDwgYXJnIDw8ICdcbic7CiAgICAgfQogICB9CiB9CkBAIC02MzYsMzAgKzY0NCwyNyBAQAogICAgIHRndCA9IGNtU3RyQ2F0KChhID8gYSA6ICIiKSwgJ18nLCAocCA/IHAgOiAiIiksICIudGd0Iik7CiAgIH0KIAotICBmb3V0IDw8ICJwcmltYXJ5VGFyZ2V0PSIgPDwgdGd0IDw8IHN0ZDo6ZW5kbDsKLSAgZm91dCA8PCAiY3VzdG9taXphdGlvbj0iIDw8IHJvb3QtPkdldEJpbmFyeURpcmVjdG9yeSgpCi0gICAgICAgPDwgIi9DTWFrZUZpbGVzL2N1c3RvbV9ydWxlLmJvZCIgPDwgc3RkOjplbmRsOwotICBmb3V0IDw8ICJjdXN0b21pemF0aW9uPSIgPDwgcm9vdC0+R2V0QmluYXJ5RGlyZWN0b3J5KCkKLSAgICAgICA8PCAiL0NNYWtlRmlsZXMvY3VzdG9tX3RhcmdldC5ib2QiIDw8IHN0ZDo6ZW5kbDsKKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICBmb3V0IDw8ICJwcmltYXJ5VGFyZ2V0PSIgPDwgdGd0IDw8ICJcbiIKKyAgICAgICAgICAiY3VzdG9taXphdGlvbj0iIDw8IHJvb3QtPkdldEJpbmFyeURpcmVjdG9yeSgpCisgICAgICAgPDwgIi9DTWFrZUZpbGVzL2N1c3RvbV9ydWxlLmJvZFxuIgorICAgICAgICAgICJjdXN0b21pemF0aW9uPSIgPDwgcm9vdC0+R2V0QmluYXJ5RGlyZWN0b3J5KCkKKyAgICAgICA8PCAiL0NNYWtlRmlsZXMvY3VzdG9tX3RhcmdldC5ib2QiIDw8ICdcbic7CisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAgIGNoYXIgY29uc3QqIGNvbnN0IGN1c3RvbWl6YXRpb24gPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0Q2FjaGVEZWZpbml0aW9uKCJHSFNfQ1VTVE9NSVpBVElPTiIpOwogICBpZiAobnVsbHB0ciAhPSBjdXN0b21pemF0aW9uICYmIHN0cmxlbihjdXN0b21pemF0aW9uKSA+IDApIHsKLSAgICBmb3V0IDw8ICJjdXN0b21pemF0aW9uPSIgPDwgdGhpcy0+VHJpbVF1b3RlcyhjdXN0b21pemF0aW9uKSA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiY3VzdG9taXphdGlvbj0iCisgICAgICAgICA8PCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpUcmltUXVvdGVzKGN1c3RvbWl6YXRpb24pIDw8ICdcbic7CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5NYXJrQ2xpQXNVc2VkKCJHSFNfQ1VTVE9NSVpBVElPTiIpOwogICB9CiB9CiAKLXN0ZDo6c3RyaW5nIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OlRyaW1RdW90ZXMoc3RkOjpzdHJpbmcgY29uc3QmIHN0cikKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OlRyaW1RdW90ZXMoc3RkOjpzdHJpbmcgc3RyKQogewotICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKHN0ci5zaXplKCkpOwotICBmb3IgKGNvbnN0IGNoYXIqIGNoID0gc3RyLmNfc3RyKCk7ICpjaCAhPSAnXDAnOyArK2NoKSB7Ci0gICAgaWYgKCpjaCAhPSAnIicpIHsKLSAgICAgIHJlc3VsdCArPSAqY2g7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7CisgIGNtOjplcmFzZShzdHIsICciJyk7CisgIHJldHVybiBzdHI7CiB9CiAKIGJvb2wgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6VGFyZ2V0Q29tcGFyZTo6b3BlcmF0b3IoKSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5oCmluZGV4IGNjZmUwNzMuLjEyY2E4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuaApAQCAtNCw2ICs0LDcgQEAKICNkZWZpbmUgY21HaHNNdWx0aUdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dXRpbGl0eT4KQEAgLTI4LDEzICsyOSwxNSBAQAogICBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yKGNtYWtlKiBjbSk7CiAgIH5jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKLSAgc3RhdGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogTmV3RmFjdG9yeSgpCisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCkKICAgewotICAgIHJldHVybiBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I+KCk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yPigpKTsKICAgfQogCiAgIC8vISBjcmVhdGUgdGhlIGNvcnJlY3QgbG9jYWwgZ2VuZXJhdG9yCi0gIGNtTG9jYWxHZW5lcmF0b3IqIENyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogICAvLy8gQHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIGdlbmVyYXRvci4KICAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldEFjdHVhbE5hbWUoKSB7IHJldHVybiAiR3JlZW4gSGlsbHMgTVVMVEkiOyB9CkBAIC01OCw3ICs2MSw4IEBACiAgIHN0YXRpYyBib29sIFN1cHBvcnRzUGxhdGZvcm0oKSB7IHJldHVybiB0cnVlOyB9CiAKICAgLy8gVG9vbHNldCAvIFBsYXRmb3JtIFN1cHBvcnQKLSAgYm9vbCBTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBib29sIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogICBib29sIFNldEdlbmVyYXRvclBsYXRmb3JtKHN0ZDo6c3RyaW5nIGNvbnN0JiBwLCBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgLyoqCkBAIC0xMDcsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIGdlbmVyYXRvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGFsbF90YXJnZXQpOwogCi0gIHN0ZDo6c3RyaW5nIFRyaW1RdW90ZXMoc3RkOjpzdHJpbmcgY29uc3QmIHN0cik7CisgIHN0YXRpYyBzdGQ6OnN0cmluZyBUcmltUXVvdGVzKHN0ZDo6c3RyaW5nIHN0cik7CiAKICAgc3RkOjpzdHJpbmcgT3NEaXI7CiAgIHN0YXRpYyBjb25zdCBjaGFyKiBERUZBVUxUX0JVSUxEX1BST0dSQU07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5jeHgKaW5kZXggZmY1NDI4OC4uZmMzMTIzYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmN4eApAQCAtNjYsNyArNjYsNyBAQAogICAvLyBTaW5jZSB3ZSBoYXZlIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBpbnZvY2F0aW9uIG9mIEpPTSwgbGV0IHVzCiAgIC8vIG1ha2UgaXQgcXVpZXQuCiAgIGpvbU1ha2VPcHRpb25zLnB1c2hfYmFjayh0aGlzLT5NYWtlU2lsZW50RmxhZyk7Ci0gIGNtQXBwZW5kKGpvbU1ha2VPcHRpb25zLCBtYWtlT3B0aW9ucyk7CisgIGNtOjphcHBlbmQoam9tTWFrZU9wdGlvbnMsIG1ha2VPcHRpb25zKTsKIAogICAvLyBKT00gZG9lcyBwYXJhbGxlbCBidWlsZHMgYnkgZGVmYXVsdCwgdGhlIC1qIGlzIG9ubHkgbmVlZGVkIGlmIGEgc3BlY2lmaWMKICAgLy8gbnVtYmVyIGlzIGdpdmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3IuaAppbmRleCBmYzM5ZGRmLi45ZjFlYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmgKQEAgLTQsNiArNCw3IEBACiAjZGVmaW5lIGNtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3JfaAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KIAogI2luY2x1ZGUgImNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogCkBAIC0xNiw5ICsxNywxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yKGNtYWtlKiBjbSk7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvcj4oKSk7CiAgIH0KICAgLy8hIEdldCB0aGUgbmFtZSBmb3IgdGhlIGdlbmVyYXRvci4KICAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxNU1lTTWFrZWZpbGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvci5oCmluZGV4IGQ2ZTQ4NDcuLmIyZGU0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvci5oCkBAIC0zLDYgKzMsOCBAQAogI2lmbmRlZiBjbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvcl9oCiAjZGVmaW5lIGNtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgImNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogCiAvKiogXGNsYXNzIGNtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yCkBAIC0xNCw5ICsxNiwxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvcihjbWFrZSogY20pOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCkKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQogICB7Ci0gICAgcmV0dXJuIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxNU1lTTWFrZWZpbGVHZW5lcmF0b3I+KCk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvcj4oKSk7CiAgIH0KIAogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvci5oCmluZGV4IDE1Mjk3ZTMuLmE5ZjkyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbE1pbkdXTWFrZWZpbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yLmgKQEAgLTMsNiArMyw4IEBACiAjaWZuZGVmIGNtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvcl9oCiAjZGVmaW5lIGNtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvcl9oCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKICNpbmNsdWRlICJjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKIAogLyoqIFxjbGFzcyBjbUdsb2JhbE1pbkdXTWFrZWZpbGVHZW5lcmF0b3IKQEAgLTE0LDEwICsxNiwxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbE1pbkdXTWFrZWZpbGVHZW5lcmF0b3IoY21ha2UqIGNtKTsKLSAgc3RhdGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogTmV3RmFjdG9yeSgpCisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCkKICAgewotICAgIHJldHVybiBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PAotICAgICAgY21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yPigpKTsKICAgfQogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmN4eAppbmRleCAyMjczYzAwLi5jNGJlYzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmN4eApAQCAtNjYsNyArNjYsNyBAQAogICAvLyBTaW5jZSB3ZSBoYXZlIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBpbnZvY2F0aW9uIG9mIG5tYWtlLCBsZXQgdXMKICAgLy8gbWFrZSBpdCBxdWlldC4KICAgbm1ha2VNYWtlT3B0aW9ucy5wdXNoX2JhY2sodGhpcy0+TWFrZVNpbGVudEZsYWcpOwotICBjbUFwcGVuZChubWFrZU1ha2VPcHRpb25zLCBtYWtlT3B0aW9ucyk7CisgIGNtOjphcHBlbmQobm1ha2VNYWtlT3B0aW9ucywgbWFrZU9wdGlvbnMpOwogCiAgIHJldHVybiB0aGlzLT5jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkdlbmVyYXRlQnVpbGRDb21tYW5kKAogICAgIG1ha2VQcm9ncmFtLCBwcm9qZWN0TmFtZSwgcHJvamVjdERpciwgdGFyZ2V0TmFtZXMsIGNvbmZpZywgZmFzdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuaAppbmRleCA0NTg2Yjc3Li5mZGY2MDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3JfaAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KIAogI2luY2x1ZGUgImNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogCkBAIC0xNiwxMCArMTcsMTAgQEAKIHsKIHB1YmxpYzoKICAgY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yKGNtYWtlKiBjbSk7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTwKLSAgICAgIGNtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvcj4oKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4oCisgICAgICBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvcj4oKSk7CiAgIH0KICAgLy8hIEdldCB0aGUgbmFtZSBmb3IgdGhlIGdlbmVyYXRvci4KICAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxOaW5qYUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxOaW5qYUdlbmVyYXRvci5jeHgKaW5kZXggZGEyMWQ2Yy4uMDYyZjhlOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbE5pbmphR2VuZXJhdG9yLmN4eApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9tZW1vcnk+CiAKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIApAQCAtMjMsNiArMjUsNyBAQAogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsTmluamFHZW5lcmF0b3IuaCIKQEAgLTQyLDEwICs0NSw5IEBACiAjaW5jbHVkZSAiY21WZXJzaW9uLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAotY2xhc3MgY21MaW5rTGluZUNvbXB1dGVyOwotCiBjb25zdCBjaGFyKiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9CVUlMRF9GSUxFID0gImJ1aWxkLm5pbmphIjsKLWNvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok5JTkpBX1JVTEVTX0ZJTEUgPSAicnVsZXMubmluamEiOworY29uc3QgY2hhciogY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfUlVMRVNfRklMRSA9CisgICJDTWFrZUZpbGVzL3J1bGVzLm5pbmphIjsKIGNvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OklOREVOVCA9ICIgICI7CiAjaWZkZWYgX1dJTjMyCiBzdGQ6OnN0cmluZyBjb25zdCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpTSEVMTF9OT09QID0gImNkIC4iOwpAQCAtODMsMTMgKzg1LDE1IEBACiAgIG9zIDw8ICIjICIgPDwgY29tbWVudC5zdWJzdHIobHBvcykgPDwgIlxuXG4iOwogfQogCi1jbUxpbmtMaW5lQ29tcHV0ZXIqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCitzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPgorY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwKICAgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgLyogc3RhdGVEaXIgKi8pIGNvbnN0CiB7Ci0gIHJldHVybiBuZXcgY21OaW5qYUxpbmtMaW5lQ29tcHV0ZXIoCi0gICAgb3V0cHV0Q29udmVydGVyLAotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLCB0aGlzKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbU5pbmphTGlua0xpbmVDb21wdXRlcj4oCisgICAgICBvdXRwdXRDb252ZXJ0ZXIsCisgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF0tPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSwgdGhpcykpOwogfQogCiBzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkKQEAgLTExNCw2ICsxMTgsMTEgQEAKICAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gbGl0OwogICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHJlc3VsdCwgIiQiLCAiJCQiKTsKICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhyZXN1bHQsICJcbiIsICIkXG4iKTsKKyAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcocmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQoJyQnLCB0aGlzLT5HZXRDTWFrZUNGR0ludERpcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENNYWtlQ0ZHSW50RGlyKCkpOworICB9CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzOSwxNSArMTQ4LDE1IEBACiB7CiAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHJ1bGUuCiAgIGlmIChidWlsZC5SdWxlLmVtcHR5KCkpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiTm8gcnVsZSBmb3IgV3JpdGVCdWlsZCEgY2FsbGVkIHdpdGggY29tbWVudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuQ29tbWVudCk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoY21TdHJDYXQoCisgICAgICAiTm8gcnVsZSBmb3IgV3JpdGVCdWlsZCEgY2FsbGVkIHdpdGggY29tbWVudDogIiwgYnVpbGQuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCiAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3V0cHV0IGZpbGUuCiAgIGlmIChidWlsZC5PdXRwdXRzLmVtcHR5KCkpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKLSAgICAgICJObyBvdXRwdXQgZmlsZXMgZm9yIFdyaXRlQnVpbGQhIGNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIgKyBidWlsZC5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihjbVN0ckNhdCgKKyAgICAgICJObyBvdXRwdXQgZmlsZXMgZm9yIFdyaXRlQnVpbGQhIGNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIsIGJ1aWxkLkNvbW1lbnQpKTsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTU4LDcgKzE2Nyw3IEBACiAgIHsKICAgICAvLyBXcml0ZSBleHBsaWNpdCBvdXRwdXRzCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0IDogYnVpbGQuT3V0cHV0cykgewotICAgICAgYnVpbGRTdHIgKz0gIiAiICsgRW5jb2RlUGF0aChvdXRwdXQpOworICAgICAgYnVpbGRTdHIgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKG91dHB1dCkpOwogICAgICAgaWYgKHRoaXMtPkNvbXB1dGluZ1Vua25vd25EZXBlbmRlbmNpZXMpIHsKICAgICAgICAgdGhpcy0+Q29tYmluZWRCdWlsZE91dHB1dHMuaW5zZXJ0KG91dHB1dCk7CiAgICAgICB9CkBAIC0xNjcsMTQgKzE3NiwxMyBAQAogICAgIGlmICghYnVpbGQuSW1wbGljaXRPdXRzLmVtcHR5KCkpIHsKICAgICAgIGJ1aWxkU3RyICs9ICIgfCI7CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbXBsaWNpdE91dCA6IGJ1aWxkLkltcGxpY2l0T3V0cykgewotICAgICAgICBidWlsZFN0ciArPSAiICIgKyBFbmNvZGVQYXRoKGltcGxpY2l0T3V0KTsKKyAgICAgICAgYnVpbGRTdHIgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKGltcGxpY2l0T3V0KSk7CiAgICAgICB9CiAgICAgfQotICAgIGJ1aWxkU3RyICs9ICI6IjsKKyAgICBidWlsZFN0ciArPSAnOic7CiAKICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KLSAgICBidWlsZFN0ciArPSAiICI7Ci0gICAgYnVpbGRTdHIgKz0gYnVpbGQuUnVsZTsKKyAgICBidWlsZFN0ciArPSBjbVN0ckNhdCgnICcsIGJ1aWxkLlJ1bGUpOwogICB9CiAKICAgc3RkOjpzdHJpbmcgYXJndW1lbnRzOwpAQCAtMTgzLDE0ICsxOTEsMTQgQEAKIAogICAgIC8vIFdyaXRlIGV4cGxpY2l0IGRlcGVuZGVuY2llcy4KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBleHBsaWNpdERlcCA6IGJ1aWxkLkV4cGxpY2l0RGVwcykgewotICAgICAgYXJndW1lbnRzICs9ICIgIiArIEVuY29kZVBhdGgoZXhwbGljaXREZXApOworICAgICAgYXJndW1lbnRzICs9IGNtU3RyQ2F0KCcgJywgRW5jb2RlUGF0aChleHBsaWNpdERlcCkpOwogICAgIH0KIAogICAgIC8vIFdyaXRlIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KICAgICBpZiAoIWJ1aWxkLkltcGxpY2l0RGVwcy5lbXB0eSgpKSB7CiAgICAgICBhcmd1bWVudHMgKz0gIiB8IjsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGltcGxpY2l0RGVwIDogYnVpbGQuSW1wbGljaXREZXBzKSB7Ci0gICAgICAgIGFyZ3VtZW50cyArPSAiICIgKyBFbmNvZGVQYXRoKGltcGxpY2l0RGVwKTsKKyAgICAgICAgYXJndW1lbnRzICs9IGNtU3RyQ2F0KCcgJywgRW5jb2RlUGF0aChpbXBsaWNpdERlcCkpOwogICAgICAgfQogICAgIH0KIApAQCAtMTk4LDExICsyMDYsMTEgQEAKICAgICBpZiAoIWJ1aWxkLk9yZGVyT25seURlcHMuZW1wdHkoKSkgewogICAgICAgYXJndW1lbnRzICs9ICIgfHwiOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3JkZXJPbmx5RGVwIDogYnVpbGQuT3JkZXJPbmx5RGVwcykgewotICAgICAgICBhcmd1bWVudHMgKz0gIiAiICsgRW5jb2RlUGF0aChvcmRlck9ubHlEZXApOworICAgICAgICBhcmd1bWVudHMgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKG9yZGVyT25seURlcCkpOwogICAgICAgfQogICAgIH0KIAotICAgIGFyZ3VtZW50cyArPSAiXG4iOworICAgIGFyZ3VtZW50cyArPSAnXG4nOwogICB9CiAKICAgLy8gV3JpdGUgdGhlIHZhcmlhYmxlcyBib3VuZCB0byB0aGlzIGJ1aWxkIHN0YXRlbWVudC4KQEAgLTI0OCw4ICsyNTYsOCBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29tbWFuZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2NyaXB0aW9uLAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29tbWVudCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIHJlc3RhdCwKLSAgY29uc3QgY21OaW5qYURlcHMmIG91dHB1dHMsIGNvbnN0IGNtTmluamFEZXBzJiBleHBsaWNpdERlcHMsCi0gIGNvbnN0IGNtTmluamFEZXBzJiBvcmRlck9ubHlEZXBzKQorICBjb25zdCBjbU5pbmphRGVwcyYgb3V0cHV0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgY29uc3QgY21OaW5qYURlcHMmIGV4cGxpY2l0RGVwcywgY29uc3QgY21OaW5qYURlcHMmIG9yZGVyT25seURlcHMpCiB7CiAgIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRSdWxlKCk7CiAKQEAgLTI4Miw3ICsyOTAsMTEgQEAKICAgICBpZiAoIWRlcGZpbGUuZW1wdHkoKSkgewogICAgICAgdmFyc1siZGVwZmlsZSJdID0gZGVwZmlsZTsKICAgICB9Ci0gICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+QnVpbGRGaWxlU3RyZWFtLCBidWlsZCk7CisgICAgaWYgKGNvbmZpZy5lbXB0eSgpKSB7CisgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCksIGJ1aWxkKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKSwgYnVpbGQpOworICAgIH0KICAgfQogCiAgIGlmICh0aGlzLT5Db21wdXRpbmdVbmtub3duRGVwZW5kZW5jaWVzKSB7CkBAIC0yOTcsMjEgKzMwOSwyMiBAQAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpBZGRNYWNPU1hDb250ZW50UnVsZSgpCiB7CiAgIGNtTmluamFSdWxlIHJ1bGUoIkNPUFlfT1NYX0NPTlRFTlQiKTsKLSAgcnVsZS5Db21tYW5kID0gQ01ha2VDbWQoKSArICIgLUUgY29weSAkaW4gJG91dCI7CisgIHJ1bGUuQ29tbWFuZCA9IGNtU3RyQ2F0KENNYWtlQ21kKCksICIgLUUgY29weSAkaW4gJG91dCIpOwogICBydWxlLkRlc2NyaXB0aW9uID0gIkNvcHlpbmcgT1MgWCBDb250ZW50ICRvdXQiOwogICBydWxlLkNvbW1lbnQgPSAiUnVsZSBmb3IgY29weWluZyBPUyBYIGJ1bmRsZSBjb250ZW50IGZpbGUuIjsKICAgdGhpcy0+QWRkUnVsZShydWxlKTsKIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZU1hY09TWENvbnRlbnRCdWlsZChzdGQ6OnN0cmluZyBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIHRoaXMtPkFkZE1hY09TWENvbnRlbnRSdWxlKCk7CiAgIHsKICAgICBjbU5pbmphQnVpbGQgYnVpbGQoIkNPUFlfT1NYX0NPTlRFTlQiKTsKICAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayhzdGQ6Om1vdmUob3V0cHV0KSk7CiAgICAgYnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayhzdGQ6Om1vdmUoaW5wdXQpKTsKLSAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0sIGJ1aWxkKTsKKyAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShjb25maWcpLCBidWlsZCk7CiAgIH0KIH0KIApAQCAtMzIxLDIzICszMzQsMjQgQEAKICAgLy8gLS0gUGFyYW1ldGVyIGNoZWNrcwogICAvLyBNYWtlIHN1cmUgdGhlIHJ1bGUgaGFzIGEgbmFtZS4KICAgaWYgKHJ1bGUuTmFtZS5lbXB0eSgpKSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIG5hbWUgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgY2FsbGVkIHdpdGggY29tbWVudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihjbVN0ckNhdCgKKyAgICAgICJObyBuYW1lIGdpdmVuIGZvciBXcml0ZVJ1bGUhIGNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIsIHJ1bGUuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCiAgIC8vIE1ha2Ugc3VyZSBhIGNvbW1hbmQgaXMgZ2l2ZW4uCiAgIGlmIChydWxlLkNvbW1hbmQuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAotICAgICAgIk5vIGNvbW1hbmQgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgY2FsbGVkIHdpdGggY29tbWVudDogIiArIHJ1bGUuQ29tbWVudCk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoY21TdHJDYXQoCisgICAgICAiTm8gY29tbWFuZCBnaXZlbiBmb3IgV3JpdGVSdWxlISBjYWxsZWQgd2l0aCBjb21tZW50OiAiLCBydWxlLkNvbW1lbnQpKTsKICAgICByZXR1cm47CiAgIH0KIAogICAvLyBNYWtlIHN1cmUgcmVzcG9uc2UgZmlsZSBjb250ZW50IGlzIGdpdmVuCiAgIGlmICghcnVsZS5Sc3BGaWxlLmVtcHR5KCkgJiYgcnVsZS5Sc3BDb250ZW50LmVtcHR5KCkpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigicnNwZmlsZSBidXQgbm8gcnNwZmlsZV9jb250ZW50IGdpdmVuIGZvciBXcml0ZVJ1bGUhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGVkIHdpdGggY29tbWVudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCJyc3BmaWxlIGJ1dCBubyByc3BmaWxlX2NvbnRlbnQgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgIgorICAgICAgICAgICAgICAgImNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIsCisgICAgICAgICAgICAgICBydWxlLkNvbW1lbnQpKTsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMzc5LDkgKzM5Myw5IEBACiB7CiAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgbmFtZS4KICAgaWYgKG5hbWUuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBuYW1lIGdpdmVuIGZvciBXcml0ZVZhcmlhYmxlISBjYWxsZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGNvbW1lbnQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGNtU3RyQ2F0KCJObyBuYW1lIGdpdmVuIGZvciBXcml0ZVZhcmlhYmxlISBjYWxsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGNvbW1lbnQ6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCkBAIC00MjksOSArNDQzLDExIEBACiAKIC8vIFZpcnR1YWwgcHVibGljIG1ldGhvZHMuCiAKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQorc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICBjbU1ha2VmaWxlKiBtZikKIHsKLSAgcmV0dXJuIG5ldyBjbUxvY2FsTmluamFHZW5lcmF0b3IodGhpcywgbWYpOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUxvY2FsTmluamFHZW5lcmF0b3I+KHRoaXMsIG1mKSk7CiB9CiAKIGNvZGVjdnQ6OkVuY29kaW5nIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkdldE1ha2VmaWxlRW5jb2RpbmcoKSBjb25zdApAQCAtNDcwLDE0ICs0ODYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuc3RyKCkpOwogICAgIHJldHVybjsKICAgfQotICBpZiAoIXRoaXMtPk9wZW5CdWlsZEZpbGVTdHJlYW0oKSkgeworICBpZiAoIXRoaXMtPkluc3BlY3RDb25maWdUeXBlVmFyaWFibGVzKCkpIHsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCF0aGlzLT5PcGVuQnVpbGRGaWxlU3RyZWFtcygpKSB7CiAgICAgcmV0dXJuOwogICB9CiAgIGlmICghdGhpcy0+T3BlblJ1bGVzRmlsZVN0cmVhbSgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgdGhpcy0+VGFyZ2V0RGVwZW5kc0Nsb3N1cmVzLmNsZWFyKCk7CisgIGZvciAoYXV0byYgaXQgOiB0aGlzLT5Db25maWdzKSB7CisgICAgaXQuc2Vjb25kLlRhcmdldERlcGVuZHNDbG9zdXJlcy5jbGVhcigpOworICB9CiAKICAgdGhpcy0+SW5pdE91dHB1dFBhdGhQcmVmaXgoKTsKICAgdGhpcy0+VGFyZ2V0QWxsID0gdGhpcy0+TmluamFPdXRwdXRQYXRoKCJhbGwiKTsKQEAgLTQ5MywxOSArNTE0LDEwMSBAQAogICB0aGlzLT5jbUdsb2JhbEdlbmVyYXRvcjo6R2VuZXJhdGUoKTsKIAogICB0aGlzLT5Xcml0ZUFzc3VtZWRTb3VyY2VEZXBlbmRlbmNpZXMoKTsKLSAgdGhpcy0+V3JpdGVUYXJnZXRBbGlhc2VzKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0pOwotICB0aGlzLT5Xcml0ZUZvbGRlclRhcmdldHMoKnRoaXMtPkJ1aWxkRmlsZVN0cmVhbSk7Ci0gIHRoaXMtPldyaXRlVW5rbm93bkV4cGxpY2l0RGVwZW5kZW5jaWVzKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0pOwotICB0aGlzLT5Xcml0ZUJ1aWx0aW5UYXJnZXRzKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0pOworICB0aGlzLT5Xcml0ZVRhcmdldEFsaWFzZXMoKnRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSk7CisgIHRoaXMtPldyaXRlRm9sZGVyVGFyZ2V0cygqdGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpKTsKKyAgdGhpcy0+V3JpdGVVbmtub3duRXhwbGljaXREZXBlbmRlbmNpZXMoKnRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSk7CisgIHRoaXMtPldyaXRlQnVpbHRpblRhcmdldHMoKnRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSk7CiAKICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSkgewogICAgIHRoaXMtPlJ1bGVzRmlsZVN0cmVhbS0+c2V0c3RhdGUoc3RkOjppb3M6OmZhaWxiaXQpOwotICAgIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS0+c2V0c3RhdGUoc3RkOjppb3M6OmZhaWxiaXQpOworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKCkpIHsKKyAgICAgIHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyktPnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKKyAgICAgIHRoaXMtPkdldENvbmZpZ0ZpbGVTdHJlYW0oY29uZmlnKS0+c2V0c3RhdGUoc3RkOjppb3M6OmZhaWxiaXQpOworICAgIH0KKyAgICB0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCktPnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKICAgfQogCiAgIHRoaXMtPkNsb3NlQ29tcGlsZUNvbW1hbmRzU3RyZWFtKCk7CiAgIHRoaXMtPkNsb3NlUnVsZXNGaWxlU3RyZWFtKCk7Ci0gIHRoaXMtPkNsb3NlQnVpbGRGaWxlU3RyZWFtKCk7CisgIHRoaXMtPkNsb3NlQnVpbGRGaWxlU3RyZWFtcygpOworCisjaWZkZWYgX1dJTjMyCisgIC8vIFRoZSBuaW5qYSB0b29scyB3aWxsIG5vdCBiZSBhYmxlIHRvIHVwZGF0ZSBtZXRhZGF0YSBvbiBXaW5kb3dzCisgIC8vIHdoZW4gd2UgYXJlIHJlLWdlbmVyYXRpbmcgaW5zaWRlIGFuIGV4aXN0aW5nICduaW5qYScgaW52b2NhdGlvbgorICAvLyBiZWNhdXNlIHRoZSBvdXRlciB0b29sIGhhcyB0aGUgZmlsZXMgb3BlbiBmb3Igd3JpdGUuCisgIGlmICghdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRSZWdlbmVyYXRlRHVyaW5nQnVpbGQoKSkKKyNlbmRpZgorICB7CisgICAgdGhpcy0+Q2xlYW5NZXRhRGF0YSgpOworICB9Cit9CisKK3ZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6Q2xlYW5NZXRhRGF0YSgpCit7CisgIGF1dG8gcnVuX25pbmphX3Rvb2wgPSBbdGhpc10oc3RkOjp2ZWN0b3I8Y2hhciBjb25zdCo+IGNvbnN0JiBhcmdzKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbW1hbmQ7CisgICAgY29tbWFuZC5wdXNoX2JhY2sodGhpcy0+TmluamFDb21tYW5kKTsKKyAgICBjb21tYW5kLmVtcGxhY2VfYmFjaygiLUMiKTsKKyAgICBjb21tYW5kLmVtcGxhY2VfYmFjayh0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CisgICAgY29tbWFuZC5lbXBsYWNlX2JhY2soIi10Iik7CisgICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBhcmdzKSB7CisgICAgICBjb21tYW5kLmVtcGxhY2VfYmFjayhhcmcpOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBlcnJvcjsKKyAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OlJ1blNpbmdsZUNvbW1hbmQoY29tbWFuZCwgbnVsbHB0ciwgJmVycm9yLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpPVVRQVVRfTk9ORSkpIHsKKyAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJSdW5uaW5nXG4gJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4oY29tbWFuZCwgIicgJyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgd2l0aDpcbiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgfQorICB9OworCisgIC8vIENhbiB0aGUgdG9vbHMgYmVsb3cgZXhwZWN0ICdidWlsZC5uaW5qYScgdG8gYmUgbG9hZGFibGU/CisgIGJvb2wgY29uc3QgZXhwZWN0QnVpbGRNYW5pZmVzdCA9CisgICAgIXRoaXMtPklzTXVsdGlDb25maWcoKSAmJiB0aGlzLT5PdXRwdXRQYXRoUHJlZml4LmVtcHR5KCk7CisKKyAgLy8gU2tpcCBzb21lIG5pbmphIHRvb2xzIGlmIHRoZXkgbmVlZCAnYnVpbGQubmluamEnIGJ1dCBpdCBpcyBtaXNzaW5nLgorICBib29sIGNvbnN0IG1pc3NpbmdCdWlsZE1hbmlmZXN0ID0gZXhwZWN0QnVpbGRNYW5pZmVzdCAmJgorICAgICh0aGlzLT5OaW5qYVN1cHBvcnRzQ2xlYW5EZWFkVG9vbCB8fAorICAgICB0aGlzLT5OaW5qYVN1cHBvcnRzVW5jb25kaXRpb25hbFJlY29tcGFjdFRvb2wpICYmCisgICAgIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoImJ1aWxkLm5pbmphIik7CisKKyAgLy8gVGhlIGBjbGVhbmRlYWRgIHRvb2wgbmVlZHMgdG8ga25vdyBhYm91dCBhbGwgb3V0cHV0cyBpbiB0aGUgYnVpbGQgd2UganVzdAorICAvLyB3cm90ZSBvdXQuIE5pbmphLU11bHRpIGRvZXNuJ3QgaGF2ZSBhIHNpbmdsZSBgYnVpbGQubmluamFgIHdlIGNhbiB1c2UgdGhhdAorICAvLyBpcyB0aGUgdW5pb24gb2YgYWxsIGdlbmVyYXRlZCBjb25maWd1cmF0aW9ucywgc28gd2UgY2FuJ3QgcnVuIGl0IHJlbGlhYmx5CisgIC8vIGluIHRoYXQgY2FzZS4KKyAgaWYgKHRoaXMtPk5pbmphU3VwcG9ydHNDbGVhbkRlYWRUb29sICYmIGV4cGVjdEJ1aWxkTWFuaWZlc3QgJiYKKyAgICAgICFtaXNzaW5nQnVpbGRNYW5pZmVzdCkgeworICAgIHJ1bl9uaW5qYV90b29sKHsgImNsZWFuZGVhZCIgfSk7CisgIH0KKyAgLy8gVGhlIGByZWNvbXBhY3RgIHRvb2wgbG9hZHMgdGhlIG1hbmlmZXN0LiBBcyBhYm92ZSwgd2UgZG9uJ3QgaGF2ZSBhIHNpbmdsZQorICAvLyBgYnVpbGQubmluamFgIHRvIGxvYWQgZm9yIHRoaXMgaW4gTmluamEtTXVsdGkuIFRoaXMgbWF5IGJlIHJlbGF4ZWQgaW4gdGhlCisgIC8vIGZ1dHVyZSBwZW5kaW5nIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIGhvdyBOaW5qYSB3b3JrcyB1cHN0cmVhbQorICAvLyAobmluamEjMTcyMSkuCisgIGlmICh0aGlzLT5OaW5qYVN1cHBvcnRzVW5jb25kaXRpb25hbFJlY29tcGFjdFRvb2wgJiYgZXhwZWN0QnVpbGRNYW5pZmVzdCAmJgorICAgICAgIW1pc3NpbmdCdWlsZE1hbmlmZXN0KSB7CisgICAgcnVuX25pbmphX3Rvb2woeyAicmVjb21wYWN0IiB9KTsKKyAgfQorICBpZiAodGhpcy0+TmluamFTdXBwb3J0c1Jlc3RhdFRvb2wgJiYgdGhpcy0+T3V0cHV0UGF0aFByZWZpeC5lbXB0eSgpKSB7CisgICAgLy8gWFhYKG5pbmphKTogV2Ugb25seSBsaXN0IGBidWlsZC5uaW5qYWAgZW50cnkgZmlsZXMgaGVyZSBiZWNhdXNlIENNYWtlCisgICAgLy8gKmFsd2F5cyogcmV3cml0ZXMgdGhlc2UgZmlsZXMgb24gYSByZWNvbmZpZ3VyZS4gSWYgQ01ha2UgZXZlciBnZXRzCisgICAgLy8gc21hcnRlciBhYm91dCB0aGlzLCBhbGwgQ01ha2UtdGltZSBjcmVhdGVkL2VkaXRlZCBmaWxlcyBsaXN0ZWQgYXMKKyAgICAvLyBvdXRwdXRzIGZvciB0aGUgcmVjb25maWd1cmUgYnVpbGQgc3RhdGVtZW50IHdpbGwgbmVlZCB0byBiZSBsaXN0ZWQgaGVyZS4KKyAgICBjbU5pbmphRGVwcyBvdXRwdXRzOworICAgIHRoaXMtPkFkZFJlYnVpbGRNYW5pZmVzdE91dHB1dHMob3V0cHV0cyk7CisgICAgc3RkOjp2ZWN0b3I8Y29uc3QgY2hhcio+IGFyZ3M7CisgICAgYXJncy5yZXNlcnZlKG91dHB1dHMuc2l6ZSgpICsgMSk7CisgICAgYXJncy5wdXNoX2JhY2soInJlc3RhdCIpOworICAgIGZvciAoYXV0byBjb25zdCYgb3V0cHV0IDogb3V0cHV0cykgeworICAgICAgYXJncy5wdXNoX2JhY2sob3V0cHV0LmNfc3RyKCkpOworICAgIH0KKyAgICBydW5fbmluamFfdG9vbChhcmdzKTsKKyAgfQogfQogCiBib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkZpbmRNYWtlUHJvZ3JhbShjbU1ha2VmaWxlKiBtZikKQEAgLTUyNCwxMCArNjI3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Ok9VVFBVVF9OT05FKSkgewogICAgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICJSdW5uaW5nXG4gJyIgKyBjbUpvaW4oY29tbWFuZCwgIicgJyIpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJ1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgd2l0aDpcbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJSdW5uaW5nXG4gJyIsIGNtSm9pbihjb21tYW5kLCAiJyAnIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgd2l0aDpcbiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikpOwogICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01NjksNiArNjcyLDE2IEBACiAgICAgICB9CiAgICAgfQogICB9CisgIHRoaXMtPk5pbmphU3VwcG9ydHNDbGVhbkRlYWRUb29sID0gIWNtU3lzdGVtVG9vbHM6OlZlcnNpb25Db21wYXJlKAorICAgIGNtU3lzdGVtVG9vbHM6Ok9QX0xFU1MsIHRoaXMtPk5pbmphVmVyc2lvbi5jX3N0cigpLAorICAgIFJlcXVpcmVkTmluamFWZXJzaW9uRm9yQ2xlYW5EZWFkVG9vbCgpLmNfc3RyKCkpOworICB0aGlzLT5OaW5qYVN1cHBvcnRzVW5jb25kaXRpb25hbFJlY29tcGFjdFRvb2wgPQorICAgICFjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZSgKKyAgICAgIGNtU3lzdGVtVG9vbHM6Ok9QX0xFU1MsIHRoaXMtPk5pbmphVmVyc2lvbi5jX3N0cigpLAorICAgICAgUmVxdWlyZWROaW5qYVZlcnNpb25Gb3JVbmNvbmRpdGlvbmFsUmVjb21wYWN0VG9vbCgpLmNfc3RyKCkpOworICB0aGlzLT5OaW5qYVN1cHBvcnRzUmVzdGF0VG9vbCA9ICFjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZSgKKyAgICBjbVN5c3RlbVRvb2xzOjpPUF9MRVNTLCB0aGlzLT5OaW5qYVZlcnNpb24uY19zdHIoKSwKKyAgICBSZXF1aXJlZE5pbmphVmVyc2lvbkZvclJlc3RhdFRvb2woKS5jX3N0cigpKTsKIH0KIAogYm9vbCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDaGVja0xhbmd1YWdlcygKQEAgLTU3Nyw2ICs2OTAsMTcgQEAKICAgaWYgKGNtQ29udGFpbnMobGFuZ3VhZ2VzLCAiRm9ydHJhbiIpKSB7CiAgICAgcmV0dXJuIHRoaXMtPkNoZWNrRm9ydHJhbihtZik7CiAgIH0KKyAgaWYgKGNtQ29udGFpbnMobGFuZ3VhZ2VzLCAiU3dpZnQiKSkgeworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGFyY2hpdGVjdHVyZXMgPQorICAgICAgbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIpOworICAgIGlmIChhcmNoaXRlY3R1cmVzLmZpbmRfZmlyc3Rfb2YoJzsnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSB2YWx1ZXMgZm9yIENNQUtFX09TWF9BUkNISVRFQ1RVUkVTIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQgd2l0aCBTd2lmdCIpOworICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU5MCw3ICs3MTQsNyBAQAogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGUgPDwKICAgICAiVGhlIE5pbmphIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IEZvcnRyYW4gdXNpbmcgTmluamEgdmVyc2lvblxuIgotICAgICIgICIgKyB0aGlzLT5OaW5qYVZlcnNpb24gKyAiXG4iCisgICAgIiAgIiA8PCB0aGlzLT5OaW5qYVZlcnNpb24gPDwgIlxuIgogICAgICJkdWUgdG8gbGFjayBvZiByZXF1aXJlZCBmZWF0dXJlcy4gICIKICAgICAiS2l0d2FyZSBoYXMgaW1wbGVtZW50ZWQgdGhlIHJlcXVpcmVkIGZlYXR1cmVzIGFuZCB0aGV5IGhhdmUgYmVlbiAiCiAgICAgIm1lcmdlZCB0byB1cHN0cmVhbSBuaW5qYSBmb3IgaW5jbHVzaW9uIGluIE5pbmphIDEuMTAgYW5kIGhpZ2hlci4gICIKQEAgLTYwOSw2ICs3MzMsMTcgQEAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5hYmxlTGFuZ3VhZ2UoCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGFuZ3MsIGNtTWFrZWZpbGUqIG1mLCBib29sIG9wdGlvbmFsKQogeworICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgaWYgKCFtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyIpKSB7CisgICAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKAorICAgICAgICAiQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyIsICJEZWJ1ZztSZWxlYXNlO1JlbFdpdGhEZWJJbmZvIiwKKyAgICAgICAgIlNlbWljb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbiB0eXBlcywgb25seSAiCisgICAgICAgICJzdXBwb3J0cyBEZWJ1ZywgUmVsZWFzZSwgTWluU2l6ZVJlbCwgYW5kIFJlbFdpdGhEZWJJbmZvLCBhbnl0aGluZyAiCisgICAgICAgICJlbHNlIHdpbGwgYmUgaWdub3JlZCIsCisgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKKyAgICB9CisgIH0KKwogICB0aGlzLT5jbUdsb2JhbEdlbmVyYXRvcjo6RW5hYmxlTGFuZ3VhZ2UobGFuZ3MsIG1mLCBvcHRpb25hbCk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGwgOiBsYW5ncykgewogICAgIGlmIChsID09ICJOT05FIikgewpAQCAtNjUwLDcgKzc4NSw3IEBACiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpHZW5lcmF0ZUJ1aWxkQ29tbWFuZCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2VQcm9ncmFtLCBjb25zdCBzdGQ6OnN0cmluZyYgLypwcm9qZWN0TmFtZSovLAogICBjb25zdCBzdGQ6OnN0cmluZyYgLypwcm9qZWN0RGlyKi8sCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgdGFyZ2V0TmFtZXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIHRhcmdldE5hbWVzLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICBib29sIC8qZmFzdCovLCBpbnQgam9icywgYm9vbCB2ZXJib3NlLAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIG1ha2VPcHRpb25zKQogewpAQCAtNjY2LDYgKzgwMSw4IEBACiAgICAgbWFrZUNvbW1hbmQuQWRkKCItaiIsIHN0ZDo6dG9fc3RyaW5nKGpvYnMpKTsKICAgfQogCisgIHRoaXMtPkFwcGVuZE5pbmphRmlsZUFyZ3VtZW50KG1ha2VDb21tYW5kLCBjb25maWcpOworCiAgIG1ha2VDb21tYW5kLkFkZChtYWtlT3B0aW9ucy5iZWdpbigpLCBtYWtlT3B0aW9ucy5lbmQoKSk7CiAgIGZvciAoY29uc3QgYXV0byYgdG5hbWUgOiB0YXJnZXROYW1lcykgewogICAgIGlmICghdG5hbWUuZW1wdHkoKSkgewpAQCAtNzA3LDM1ICs4NDQsMjEgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0KSBjb25zdAogewogICAvLyBDb21wdXRlIGZ1bGwgcGF0aCB0byBvYmplY3QgZmlsZSBkaXJlY3RvcnkgZm9yIHRoaXMgdGFyZ2V0LgotICBzdGQ6OnN0cmluZyBkaXIgPQotICAgIGNtU3RyQ2F0KGd0LT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsCi0gICAgICAgICAgICAgZ3QtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkoZ3QpLCAnLycpOworICBzdGQ6OnN0cmluZyBkaXIgPSBjbVN0ckNhdChndC0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLCBndC0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeShndCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJywgdGhpcy0+R2V0Q01ha2VDRkdJbnREaXIoKSwgJy8nKTsKICAgZ3QtPk9iamVjdERpcmVjdG9yeSA9IGRpcjsKIH0KIAogLy8gUHJpdmF0ZSBtZXRob2RzCiAKLWJvb2wgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6T3BlbkJ1aWxkRmlsZVN0cmVhbSgpCitib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok9wZW5CdWlsZEZpbGVTdHJlYW1zKCkKIHsKLSAgLy8gQ29tcHV0ZSBOaW5qYSdzIGJ1aWxkIGZpbGUgcGF0aC4KLSAgc3RkOjpzdHJpbmcgYnVpbGRGaWxlUGF0aCA9Ci0gICAgY21TdHJDYXQodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCksICcvJywKLSAgICAgICAgICAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9CVUlMRF9GSUxFKTsKLQotICAvLyBHZXQgYSBzdHJlYW0gd2hlcmUgdG8gZ2VuZXJhdGUgdGhpbmdzLgotICBpZiAoIXRoaXMtPkJ1aWxkRmlsZVN0cmVhbSkgewotICAgIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbSA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KAotICAgICAgYnVpbGRGaWxlUGF0aCwgZmFsc2UsIHRoaXMtPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7Ci0gICAgaWYgKCEoKnRoaXMtPkJ1aWxkRmlsZVN0cmVhbSkpIHsKLSAgICAgIC8vIEFuIGVycm9yIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpZiBpdCBjYW5ub3QKLSAgICAgIC8vIG9wZW4gdGhlIGZpbGUuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICBpZiAoIXRoaXMtPk9wZW5GaWxlU3RyZWFtKHRoaXMtPkJ1aWxkRmlsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9CVUlMRF9GSUxFKSkgeworICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIC8vIFdyaXRlIHRoZSBkbyBub3QgZWRpdCBoZWFkZXIuCi0gIHRoaXMtPldyaXRlRGlzY2xhaW1lcigqdGhpcy0+QnVpbGRGaWxlU3RyZWFtKTsKLQogICAvLyBXcml0ZSBhIGNvbW1lbnQgYWJvdXQgdGhpcyBmaWxlLgogICAqdGhpcy0+QnVpbGRGaWxlU3RyZWFtCiAgICAgPDwgIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgYnVpbGQgc3RhdGVtZW50cyBkZXNjcmliaW5nIHRoZVxuIgpAQCAtNzQ0LDcgKzg2Nyw1MyBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDbG9zZUJ1aWxkRmlsZVN0cmVhbSgpCitib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok9wZW5GaWxlU3RyZWFtKAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPiYgc3RyZWFtLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK3sKKyAgLy8gR2V0IGEgc3RyZWFtIHdoZXJlIHRvIGdlbmVyYXRlIHRoaW5ncy4KKyAgaWYgKCFzdHJlYW0pIHsKKyAgICAvLyBDb21wdXRlIE5pbmphJ3MgYnVpbGQgZmlsZSBwYXRoLgorICAgIHN0ZDo6c3RyaW5nIHBhdGggPQorICAgICAgY21TdHJDYXQodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCksICcvJywgbmFtZSk7CisgICAgc3RyZWFtID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oCisgICAgICBwYXRoLCBmYWxzZSwgdGhpcy0+R2V0TWFrZWZpbGVFbmNvZGluZygpKTsKKyAgICBpZiAoISgqc3RyZWFtKSkgeworICAgICAgLy8gQW4gZXJyb3IgbWVzc2FnZSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGNhbm5vdAorICAgICAgLy8gb3BlbiB0aGUgZmlsZS4KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSB0aGUgZG8gbm90IGVkaXQgaGVhZGVyLgorICAgIHRoaXMtPldyaXRlRGlzY2xhaW1lcigqc3RyZWFtKTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCitjbTo6b3B0aW9uYWw8c3RkOjpzZXQ8c3RkOjpzdHJpbmc+PiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpMaXN0U3Vic2V0V2l0aEFsbCgKKyAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGwsIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgZGVmYXVsdHMsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaXRlbXMpCit7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiByZXN1bHQ7CisKKyAgZm9yIChhdXRvIGNvbnN0JiBpdGVtIDogaXRlbXMpIHsKKyAgICBpZiAoaXRlbSA9PSAiYWxsIikgeworICAgICAgaWYgKGl0ZW1zLnNpemUoKSA9PSAxKSB7CisgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRzOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGNtOjpudWxsb3B0OworICAgICAgfQorICAgIH0gZWxzZSBpZiAoYWxsLmNvdW50KGl0ZW0pKSB7CisgICAgICByZXN1bHQuaW5zZXJ0KGl0ZW0pOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gY206Om51bGxvcHQ7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGNtOjptYWtlX29wdGlvbmFsKHJlc3VsdCk7Cit9CisKK3ZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6Q2xvc2VCdWlsZEZpbGVTdHJlYW1zKCkKIHsKICAgaWYgKHRoaXMtPkJ1aWxkRmlsZVN0cmVhbSkgewogICAgIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5yZXNldCgpOwpAQCAtNzU1LDI1ICs5MjQsMTEgQEAKIAogYm9vbCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpPcGVuUnVsZXNGaWxlU3RyZWFtKCkKIHsKLSAgLy8gQ29tcHV0ZSBOaW5qYSdzIGJ1aWxkIGZpbGUgcGF0aC4KLSAgc3RkOjpzdHJpbmcgcnVsZXNGaWxlUGF0aCA9Ci0gICAgY21TdHJDYXQodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCksICcvJywKLSAgICAgICAgICAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9SVUxFU19GSUxFKTsKLQotICAvLyBHZXQgYSBzdHJlYW0gd2hlcmUgdG8gZ2VuZXJhdGUgdGhpbmdzLgotICBpZiAoIXRoaXMtPlJ1bGVzRmlsZVN0cmVhbSkgewotICAgIHRoaXMtPlJ1bGVzRmlsZVN0cmVhbSA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KAotICAgICAgcnVsZXNGaWxlUGF0aCwgZmFsc2UsIHRoaXMtPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7Ci0gICAgaWYgKCEoKnRoaXMtPlJ1bGVzRmlsZVN0cmVhbSkpIHsKLSAgICAgIC8vIEFuIGVycm9yIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpZiBpdCBjYW5ub3QKLSAgICAgIC8vIG9wZW4gdGhlIGZpbGUuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICBpZiAoIXRoaXMtPk9wZW5GaWxlU3RyZWFtKHRoaXMtPlJ1bGVzRmlsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9SVUxFU19GSUxFKSkgeworICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIC8vIFdyaXRlIHRoZSBkbyBub3QgZWRpdCBoZWFkZXIuCi0gIHRoaXMtPldyaXRlRGlzY2xhaW1lcigqdGhpcy0+UnVsZXNGaWxlU3RyZWFtKTsKLQogICAvLyBXcml0ZSBjb21tZW50IGFib3V0IHRoaXMgZmlsZS4KICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAqdGhpcy0+UnVsZXNGaWxlU3RyZWFtCkBAIC04MTksMTAgKzk3NCwxMCBAQAogICAgIHJldHVybiBmLT5zZWNvbmQ7CiAgIH0KIAotICBjbUxvY2FsTmluamFHZW5lcmF0b3IqIG5nID0KLSAgICBzdGF0aWNfY2FzdDxjbUxvY2FsTmluamFHZW5lcmF0b3IqPih0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF0pOwotICBzdGQ6OnN0cmluZyBjb25zdCYgYmluX2RpciA9IG5nLT5HZXRTdGF0ZSgpLT5HZXRCaW5hcnlEaXJlY3RvcnkoKTsKLSAgc3RkOjpzdHJpbmcgY29udlBhdGggPSBuZy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluX2RpciwgcGF0aCk7CisgIGNvbnN0IGF1dG8mIG5nID0KKyAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxOaW5qYUdlbmVyYXRvcj4odGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGJpbl9kaXIgPSBuZy5HZXRTdGF0ZSgpLT5HZXRCaW5hcnlEaXJlY3RvcnkoKTsKKyAgc3RkOjpzdHJpbmcgY29udlBhdGggPSBuZy5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5fZGlyLCBwYXRoKTsKICAgY29udlBhdGggPSB0aGlzLT5OaW5qYU91dHB1dFBhdGgoY29udlBhdGgpOwogI2lmZGVmIF9XSU4zMgogICBzdGQ6OnJlcGxhY2UoY29udlBhdGguYmVnaW4oKSwgY29udlBhdGguZW5kKCksICcvJywgJ1xcJyk7CkBAIC04MzEsOSArOTg2LDEwIEBACiAgICAgLmZpcnN0LT5zZWNvbmQ7CiB9CiAKLXZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QWRkQWRkaXRpb25hbENsZWFuRmlsZShzdGQ6OnN0cmluZyBmaWxlTmFtZSkKK3ZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QWRkQWRkaXRpb25hbENsZWFuRmlsZShzdGQ6OnN0cmluZyBmaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcy5lbXBsYWNlKHN0ZDo6bW92ZShmaWxlTmFtZSkpOworICB0aGlzLT5Db25maWdzW2NvbmZpZ10uQWRkaXRpb25hbENsZWFuRmlsZXMuZW1wbGFjZShzdGQ6Om1vdmUoZmlsZU5hbWUpKTsKIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpBZGRDWFhDb21waWxlQ29tbWFuZCgKQEAgLTg0Myw3ICs5OTksOCBAQAogICBzdGQ6OnN0cmluZyBidWlsZEZpbGVEaXIgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpOwogICBpZiAoIXRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSkgewotICAgIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPSBidWlsZEZpbGVEaXIgKyAiL2NvbXBpbGVfY29tbWFuZHMuanNvbiI7CisgICAgc3RkOjpzdHJpbmcgYnVpbGRGaWxlUGF0aCA9CisgICAgICBjbVN0ckNhdChidWlsZEZpbGVEaXIsICIvY29tcGlsZV9jb21tYW5kcy5qc29uIik7CiAgICAgaWYgKHRoaXMtPkNvbXB1dGluZ1Vua25vd25EZXBlbmRlbmNpZXMpIHsKICAgICAgIHRoaXMtPkNvbWJpbmVkQnVpbGRPdXRwdXRzLmluc2VydCgKICAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKCJjb21waWxlX2NvbW1hbmRzLmpzb24iKSk7CkBAIC04NTIsOSArMTAwOSw5IEBACiAgICAgLy8gR2V0IGEgc3RyZWFtIHdoZXJlIHRvIGdlbmVyYXRlIHRoaW5ncy4KICAgICB0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPQogICAgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oYnVpbGRGaWxlUGF0aCk7Ci0gICAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAiWyI7CisgICAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAiW1xuIjsKICAgfSBlbHNlIHsKLSAgICAqdGhpcy0+Q29tcGlsZUNvbW1hbmRzU3RyZWFtIDw8ICIsIiA8PCBzdGQ6OmVuZGw7CisgICAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAiLFxuIjsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIHNvdXJjZUZpbGVOYW1lID0gc291cmNlRmlsZTsKQEAgLTg2NCw3ICsxMDIxLDcgQEAKICAgfQogCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAiXG57XG4iCisgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIntcbiIKICAgICAgPDwgUiIoICAiZGlyZWN0b3J5IjogIikiCiAgICAgIDw8IGNtR2xvYmFsR2VuZXJhdG9yOjpFc2NhcGVKU09OKGJ1aWxkRmlsZURpcikgPDwgIlwiLFxuIgogICAgICA8PCBSIiggICJjb21tYW5kIjogIikiCkBAIC05MDEsMjMgKzEwNTgsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXNzdW1lIGRlcGVuZGVuY2llcyBmb3IgZ2VuZXJhdGVkIHNvdXJjZSBmaWxlLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypkZXBmaWxlKi8gIiIsIC8qam9iX3Bvb2wqLyAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnVzZXNfdGVybWluYWwqLyBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnJlc3RhdCovIHRydWUsIGNtTmluamFEZXBzKDEsIGFzZC5maXJzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypyZXN0YXQqLyB0cnVlLCBjbU5pbmphRGVwcygxLCBhc2QuZmlyc3QpLCAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcygpLCBvcmRlck9ubHlEZXBzKTsKICAgfQogfQogCi1zdGQ6OnN0cmluZyBPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCkKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCgKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgcmV0dXJuICJjbWFrZV9vYmplY3Rfb3JkZXJfZGVwZW5kc190YXJnZXRfIiArIHRhcmdldC0+R2V0TmFtZSgpOworICByZXR1cm4gY21TdHJDYXQoImNtYWtlX29iamVjdF9vcmRlcl9kZXBlbmRzX3RhcmdldF8iLCB0YXJnZXQtPkdldE5hbWUoKSwgJ18nLAorICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRUYXJnZXRPdXRwdXRzKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywKLSAgY21OaW5qYVRhcmdldERlcGVuZHMgZGVwZW5kcykKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21OaW5qYVRhcmdldERlcGVuZHMgZGVwZW5kcykKIHsKLSAgc3RkOjpzdHJpbmcgY29uZmlnTmFtZSA9Ci0gICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7Ci0KICAgLy8gZm9yIGZyYW1ld29ya3MsIHdlIHdhbnQgdGhlIHJlYWwgbmFtZSwgbm90IHNtcGxlIG5hbWUKICAgLy8gZnJhbWV3b3JrcyBhbHdheXMgYXBwZWFyIHZlcnNpb25lZCwgYW5kIHRoZSBidWlsZC5uaW5qYQogICAvLyB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvIG1hbmFnZSBzeW1ib2xpYyBsaW5rcyBpbnN0ZWFkCkBAIC05MjksMTkgKzEwODUsMTkgQEAKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOiB7CiAgICAgICBpZiAoZGVwZW5kcyA9PSBEZXBlbmRPblRhcmdldE9yZGVyaW5nKSB7Ci0gICAgICAgIG91dHB1dHMucHVzaF9iYWNrKE9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCh0YXJnZXQpKTsKKyAgICAgICAgb3V0cHV0cy5wdXNoX2JhY2soT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KHRhcmdldCwgY29uZmlnKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KICAgICAvLyBGQUxMVEhST1VHSAogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOiB7CiAgICAgICBvdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0LT5HZXRGdWxsUGF0aCgKLSAgICAgICAgY29uZmlnTmFtZSwgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsIHJlYWxuYW1lKSkpOworICAgICAgICBjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LCByZWFsbmFtZSkpKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlk6IHsKICAgICAgIGlmIChkZXBlbmRzID09IERlcGVuZE9uVGFyZ2V0T3JkZXJpbmcpIHsKLSAgICAgICAgb3V0cHV0cy5wdXNoX2JhY2soT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KHRhcmdldCkpOworICAgICAgICBvdXRwdXRzLnB1c2hfYmFjayhPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQodGFyZ2V0LCBjb25maWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtOTQ5LDkgKzExMDUsMTMgQEAKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDoKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWTogewogICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9Ci0gICAgICAgIHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpICsKLSAgICAgICAgc3RkOjpzdHJpbmcoIi8iKSArIHRhcmdldC0+R2V0TmFtZSgpOwotICAgICAgb3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+Q29udmVydFRvTmluamFQYXRoKHBhdGgpKTsKKyAgICAgICAgY21TdHJDYXQodGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICcvJywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCkpOworICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHBhdGgpOworICAgICAgaWYgKHRhcmdldC0+VGFyZ2V0LT5Jc1BlckNvbmZpZygpKSB7CisgICAgICAgIG91dHB1dCA9IHRoaXMtPkJ1aWxkQWxpYXMob3V0cHV0LCBjb25maWcpOworICAgICAgfQorICAgICAgb3V0cHV0cy5wdXNoX2JhY2sob3V0cHV0KTsKICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtOTYyLDE1ICsxMTIyLDE3IEBACiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QXBwZW5kVGFyZ2V0RGVwZW5kcygKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21OaW5qYURlcHMmIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLAogICBjbU5pbmphVGFyZ2V0RGVwZW5kcyBkZXBlbmRzKQogewogICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7CiAgICAgLy8gVGhlc2UgZGVwZW5kIG9ubHkgb24gb3RoZXIgQ01ha2UtcHJvdmlkZWQgdGFyZ2V0cywgZS5nLiAiYWxsIi4KLSAgICBmb3IgKEJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgdXRpbCA6IHRhcmdldC0+R2V0VXRpbGl0aWVzKCkpIHsKKyAgICBmb3IgKEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+IGNvbnN0JiB1dGlsIDoKKyAgICAgICAgIHRhcmdldC0+R2V0VXRpbGl0aWVzKCkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGQgPQotICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSArICIvIiArCi0gICAgICAgIHV0aWwuVmFsdWU7Ci0gICAgICBvdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoZCkpOworICAgICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLAorICAgICAgICAgICAgICAgICB1dGlsLlZhbHVlLmZpcnN0KTsKKyAgICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPkJ1aWxkQWxpYXModGhpcy0+Q29udmVydFRvTmluamFQYXRoKGQpLCBjb25maWcpKTsKICAgICB9CiAgIH0gZWxzZSB7CiAgICAgY21OaW5qYURlcHMgb3V0czsKQEAgLTk3OSwyOSArMTE0MSwzNiBAQAogICAgICAgaWYgKHRhcmdldERlcC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9Ci0gICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldERlcCwgb3V0cywgZGVwZW5kcyk7CisgICAgICBpZiAodGFyZ2V0RGVwLklzQ3Jvc3MoKSkgeworICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldERlcCwgb3V0cywgZmlsZUNvbmZpZywgZGVwZW5kcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldERlcCwgb3V0cywgY29uZmlnLCBkZXBlbmRzKTsKKyAgICAgIH0KICAgICB9CiAgICAgc3RkOjpzb3J0KG91dHMuYmVnaW4oKSwgb3V0cy5lbmQoKSk7Ci0gICAgY21BcHBlbmQob3V0cHV0cywgb3V0cyk7CisgICAgY206OmFwcGVuZChvdXRwdXRzLCBvdXRzKTsKICAgfQogfQogCiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKAotICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cykKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21OaW5qYURlcHMmIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtTmluamFPdXRzIG91dHM7Ci0gIHRoaXMtPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKHRhcmdldCwgb3V0cywgdHJ1ZSk7Ci0gIGNtQXBwZW5kKG91dHB1dHMsIG91dHMpOworICB0aGlzLT5BcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZSh0YXJnZXQsIG91dHMsIGNvbmZpZywgdHJ1ZSk7CisgIGNtOjphcHBlbmQob3V0cHV0cywgb3V0cyk7CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIGNtTmluamFPdXRzJiBvdXRwdXRzLCBib29sIG9taXRfc2VsZikKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21OaW5qYU91dHMmIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGJvb2wgb21pdF9zZWxmKQogewogCiAgIC8vIHRyeSB0byBsb2NhdGUgdGhlIHRhcmdldCBpbiB0aGUgY2FjaGUKLSAgYXV0byBmaW5kID0gdGhpcy0+VGFyZ2V0RGVwZW5kc0Nsb3N1cmVzLmxvd2VyX2JvdW5kKHRhcmdldCk7CisgIGF1dG8gZmluZCA9IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXREZXBlbmRzQ2xvc3VyZXMubG93ZXJfYm91bmQodGFyZ2V0KTsKIAotICBpZiAoZmluZCA9PSB0aGlzLT5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuZW5kKCkgfHwgZmluZC0+Zmlyc3QgIT0gdGFyZ2V0KSB7CisgIGlmIChmaW5kID09IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuZW5kKCkgfHwKKyAgICAgIGZpbmQtPmZpcnN0ICE9IHRhcmdldCkgewogICAgIC8vIFdlIG5vdyBjYWxjdWxhdGUgdGhlIGNsb3N1cmUgb3V0cHV0cyBieSBpbnNwZWN0aW5nIHRoZSBkZXBlbmRlbnQKICAgICAvLyB0YXJnZXRzIHJlY3Vyc2l2ZWx5LgogICAgIC8vIEZvciB0aGF0IHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIGxvY2FsIHJlc3VsdCBzZXQgdGhhdCBpcyBvbmx5CkBAIC0xMDExLDE1ICsxMTgwLDE2IEBACiAgICAgY21OaW5qYU91dHMgdGhpc19vdXRzOyAvLyB0aGlzIHdpbGwgYmUgdGhlIG5ldyBjYWNoZSBlbnRyeQogCiAgICAgZm9yIChhdXRvIGNvbnN0JiBkZXBfdGFyZ2V0IDogdGhpcy0+R2V0VGFyZ2V0RGlyZWN0RGVwZW5kcyh0YXJnZXQpKSB7Ci0gICAgICBpZiAoZGVwX3RhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICAgIGlmIChkZXBfdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSB8fAorICAgICAgICAgICh0aGlzLT5FbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkgJiYgIWRlcF90YXJnZXQuSXNDcm9zcygpKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAogICAgICAgLy8gQ29sbGVjdCB0aGUgZGVwZW5kZW50IHRhcmdldHMgZm9yIF90aGlzXyB0YXJnZXQKLSAgICAgIHRoaXMtPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKGRlcF90YXJnZXQsIHRoaXNfb3V0cywgZmFsc2UpOworICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoZGVwX3RhcmdldCwgdGhpc19vdXRzLCBjb25maWcsIGZhbHNlKTsKICAgICB9Ci0gICAgZmluZCA9IHRoaXMtPlRhcmdldERlcGVuZHNDbG9zdXJlcy5lbXBsYWNlX2hpbnQoZmluZCwgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZSh0aGlzX291dHMpKTsKKyAgICBmaW5kID0gdGhpcy0+Q29uZmlnc1tjb25maWddLlRhcmdldERlcGVuZHNDbG9zdXJlcy5lbXBsYWNlX2hpbnQoCisgICAgICBmaW5kLCB0YXJnZXQsIHN0ZDo6bW92ZSh0aGlzX291dHMpKTsKICAgfQogCiAgIC8vIG5vdyBmaWxsIHRoZSBvdXRwdXRzIG9mIHRoZSBmaW5hbCByZXN1bHQgZnJvbSB0aGUgbmV3bHkgZ2VuZXJhdGVkIGNhY2hlCkBAIC0xMDI5LDI5ICsxMTk5LDU2IEBACiAgIC8vIGZpbmFsbHkgZ2VuZXJhdGUgdGhlIG91dHB1dHMgb2YgdGhlIHRhcmdldCBpdHNlbGYsIGlmIGFwcGxpY2FibGUKICAgY21OaW5qYURlcHMgb3V0czsKICAgaWYgKCFvbWl0X3NlbGYpIHsKLSAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldCwgb3V0cyk7CisgICAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YXJnZXQsIG91dHMsIGNvbmZpZyk7CiAgIH0KICAgb3V0cHV0cy5pbnNlcnQob3V0cy5iZWdpbigpLCBvdXRzLmVuZCgpKTsKIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpBZGRUYXJnZXRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgYWxpYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIHN0ZDo6c3RyaW5nIGJ1aWxkQWxpYXMgPSB0aGlzLT5OaW5qYU91dHB1dFBhdGgoYWxpYXMpOworICBzdGQ6OnN0cmluZyBvdXRwdXRQYXRoID0gdGhpcy0+TmluamFPdXRwdXRQYXRoKGFsaWFzKTsKKyAgc3RkOjpzdHJpbmcgYnVpbGRBbGlhcyA9IHRoaXMtPkJ1aWxkQWxpYXMob3V0cHV0UGF0aCwgY29uZmlnKTsKICAgY21OaW5qYURlcHMgb3V0cHV0czsKLSAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YXJnZXQsIG91dHB1dHMpOwotICAvLyBNYXJrIHRoZSB0YXJnZXQncyBvdXRwdXRzIGFzIGFtYmlndW91cyB0byBlbnN1cmUgdGhhdCBubyBvdGhlciB0YXJnZXQgdXNlcwotICAvLyB0aGUgb3V0cHV0IGFzIGFuIGFsaWFzLgorICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldCwgb3V0cHV0cywgY29uZmlnKTsKKyAgLy8gTWFyayB0aGUgdGFyZ2V0J3Mgb3V0cHV0cyBhcyBhbWJpZ3VvdXMgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgdGFyZ2V0CisgIC8vIHVzZXMgdGhlIG91dHB1dCBhcyBhbiBhbGlhcy4KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0IDogb3V0cHV0cykgewotICAgIFRhcmdldEFsaWFzZXNbb3V0cHV0XSA9IG51bGxwdHI7CisgICAgdGhpcy0+VGFyZ2V0QWxpYXNlc1tvdXRwdXRdLkdlbmVyYXRvclRhcmdldCA9IG51bGxwdHI7CisgICAgdGhpcy0+RGVmYXVsdFRhcmdldEFsaWFzZXNbb3V0cHV0XS5HZW5lcmF0b3JUYXJnZXQgPSBudWxscHRyOworICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZzIgOgorICAgICAgICAgdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWcyXS5UYXJnZXRBbGlhc2VzW291dHB1dF0uR2VuZXJhdG9yVGFyZ2V0ID0gbnVsbHB0cjsKKyAgICB9CiAgIH0KIAogICAvLyBJbnNlcnQgdGhlIGFsaWFzIGludG8gdGhlIG1hcC4gIElmIHRoZSBhbGlhcyB3YXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZQogICAvLyBtYXAgYW5kIHJlZmVycmVkIHRvIGFub3RoZXIgdGFyZ2V0LCBtYXJrIGl0IGFzIGFtYmlndW91cy4KLSAgc3RkOjpwYWlyPFRhcmdldEFsaWFzTWFwOjppdGVyYXRvciwgYm9vbD4gbmV3QWxpYXMgPQotICAgIFRhcmdldEFsaWFzZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGJ1aWxkQWxpYXMsIHRhcmdldCkpOwotICBpZiAobmV3QWxpYXMuc2Vjb25kICYmIG5ld0FsaWFzLmZpcnN0LT5zZWNvbmQgIT0gdGFyZ2V0KSB7Ci0gICAgbmV3QWxpYXMuZmlyc3QtPnNlY29uZCA9IG51bGxwdHI7CisgIFRhcmdldEFsaWFzIHRhOworICB0YS5HZW5lcmF0b3JUYXJnZXQgPSB0YXJnZXQ7CisgIHRhLkNvbmZpZyA9IGNvbmZpZzsKKworICBhdXRvIG5ld0FsaWFzR2xvYmFsID0KKyAgICB0aGlzLT5UYXJnZXRBbGlhc2VzLmluc2VydChzdGQ6Om1ha2VfcGFpcihidWlsZEFsaWFzLCB0YSkpOworICBpZiAobmV3QWxpYXNHbG9iYWwuc2Vjb25kICYmCisgICAgICBuZXdBbGlhc0dsb2JhbC5maXJzdC0+c2Vjb25kLkdlbmVyYXRvclRhcmdldCAhPSB0YXJnZXQpIHsKKyAgICBuZXdBbGlhc0dsb2JhbC5maXJzdC0+c2Vjb25kLkdlbmVyYXRvclRhcmdldCA9IG51bGxwdHI7CisgIH0KKworICBhdXRvIG5ld0FsaWFzQ29uZmlnID0KKyAgICB0aGlzLT5Db25maWdzW2NvbmZpZ10uVGFyZ2V0QWxpYXNlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIob3V0cHV0UGF0aCwgdGEpKTsKKyAgaWYgKG5ld0FsaWFzQ29uZmlnLnNlY29uZCAmJgorICAgICAgbmV3QWxpYXNDb25maWcuZmlyc3QtPnNlY29uZC5HZW5lcmF0b3JUYXJnZXQgIT0gdGFyZ2V0KSB7CisgICAgbmV3QWxpYXNDb25maWcuZmlyc3QtPnNlY29uZC5HZW5lcmF0b3JUYXJnZXQgPSBudWxscHRyOworICB9CisgIGlmICh0aGlzLT5EZWZhdWx0Q29uZmlncy5jb3VudChjb25maWcpKSB7CisgICAgYXV0byBuZXdBbGlhc0RlZmF1bHRHbG9iYWwgPQorICAgICAgdGhpcy0+RGVmYXVsdFRhcmdldEFsaWFzZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG91dHB1dFBhdGgsIHRhKSk7CisgICAgaWYgKG5ld0FsaWFzRGVmYXVsdEdsb2JhbC5zZWNvbmQgJiYKKyAgICAgICAgbmV3QWxpYXNEZWZhdWx0R2xvYmFsLmZpcnN0LT5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0ICE9IHRhcmdldCkgeworICAgICAgbmV3QWxpYXNEZWZhdWx0R2xvYmFsLmZpcnN0LT5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0ID0gbnVsbHB0cjsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTA2MSwxMCArMTI1OCwxMCBAQAogICBvcyA8PCAiIyBUYXJnZXQgYWxpYXNlcy5cblxuIjsKIAogICBjbU5pbmphQnVpbGQgYnVpbGQoInBob255Iik7Ci0gIGJ1aWxkLk91dHB1dHMuZW1wbGFjZV9iYWNrKCIiKTsKLSAgZm9yIChhdXRvIGNvbnN0JiB0YSA6IFRhcmdldEFsaWFzZXMpIHsKKyAgYnVpbGQuT3V0cHV0cy5lbXBsYWNlX2JhY2soKTsKKyAgZm9yIChhdXRvIGNvbnN0JiB0YSA6IHRoaXMtPlRhcmdldEFsaWFzZXMpIHsKICAgICAvLyBEb24ndCB3cml0ZSBhbWJpZ3VvdXMgYWxpYXNlcy4KLSAgICBpZiAoIXRhLnNlY29uZCkgeworICAgIGlmICghdGEuc2Vjb25kLkdlbmVyYXRvclRhcmdldCkgewogICAgICAgY29udGludWU7CiAgICAgfQogCkBAIC0xMDc0LDEzICsxMjcxLDY5IEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICAvLyBPdXRwdXRzCi0gICAgYnVpbGQuT3V0cHV0c1swXSA9IHRhLmZpcnN0OwotICAgIC8vIEV4cGxpY2l0IGRlcGRlbmRlbmNpZXMKKyAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0YS5maXJzdDsKICAgICBidWlsZC5FeHBsaWNpdERlcHMuY2xlYXIoKTsKLSAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhLnNlY29uZCwgYnVpbGQuRXhwbGljaXREZXBzKTsKLSAgICAvLyBXcml0ZQotICAgIHRoaXMtPldyaXRlQnVpbGQob3MsIGJ1aWxkKTsKKyAgICBpZiAodGEuc2Vjb25kLkNvbmZpZyA9PSAiYWxsIikgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5Dcm9zc0NvbmZpZ3MpIHsKKyAgICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcywgY29uZmlnKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0LCBidWlsZC5FeHBsaWNpdERlcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhLnNlY29uZC5Db25maWcpOworICAgIH0KKyAgICB0aGlzLT5Xcml0ZUJ1aWxkKHRoaXMtPkVuYWJsZUNyb3NzQ29uZmlnQnVpbGQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICh0YS5zZWNvbmQuQ29uZmlnID09ICJhbGwiIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyb3NzQ29uZmlncy5jb3VudCh0YS5zZWNvbmQuQ29uZmlnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgPyBvcworICAgICAgICAgICAgICAgICAgICAgICA6ICp0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbSh0YS5zZWNvbmQuQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgIGJ1aWxkKTsKKyAgfQorCisgIGlmICh0aGlzLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXRHZW5lcmF0b3JDb25maWdzKCkpIHsKKyAgICAgIGZvciAoYXV0byBjb25zdCYgdGEgOiB0aGlzLT5Db25maWdzW2NvbmZpZ10uVGFyZ2V0QWxpYXNlcykgeworICAgICAgICAvLyBEb24ndCB3cml0ZSBhbWJpZ3VvdXMgYWxpYXNlcy4KKyAgICAgICAgaWYgKCF0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0KSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb24ndCB3cml0ZSBhbGlhcyBpZiB0aGVyZSBpcyBhIGFscmVhZHkgYSBjdXN0b20gY29tbWFuZCB3aXRoCisgICAgICAgIC8vIG1hdGNoaW5nIG91dHB1dAorICAgICAgICBpZiAodGhpcy0+SGFzQ3VzdG9tQ29tbWFuZE91dHB1dCh0YS5maXJzdCkpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRhLmZpcnN0OworICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMuY2xlYXIoKTsKKyAgICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcywgY29uZmlnKTsKKyAgICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0Q29uZmlnRmlsZVN0cmVhbShjb25maWcpLCBidWlsZCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCF0aGlzLT5EZWZhdWx0Q29uZmlncy5lbXB0eSgpKSB7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIHRhIDogdGhpcy0+RGVmYXVsdFRhcmdldEFsaWFzZXMpIHsKKyAgICAgICAgLy8gRG9uJ3Qgd3JpdGUgYW1iaWd1b3VzIGFsaWFzZXMuCisgICAgICAgIGlmICghdGEuc2Vjb25kLkdlbmVyYXRvclRhcmdldCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9uJ3Qgd3JpdGUgYWxpYXMgaWYgdGhlcmUgaXMgYSBhbHJlYWR5IGEgY3VzdG9tIGNvbW1hbmQgd2l0aAorICAgICAgICAvLyBtYXRjaGluZyBvdXRwdXQKKyAgICAgICAgaWYgKHRoaXMtPkhhc0N1c3RvbUNvbW1hbmRPdXRwdXQodGEuZmlyc3QpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0YS5maXJzdDsKKyAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLmNsZWFyKCk7CisgICAgICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+RGVmYXVsdENvbmZpZ3MpIHsKKyAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhLnNlY29uZC5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMsIGNvbmZpZyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0RGVmYXVsdEZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgICAgfQorICAgIH0KICAgfQogfQogCkBAIC0xMDk3LDI0ICsxMzUwLDcwIEBACiAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY3VycmVudEJpbmFyeURpciA9IGl0LmZpcnN0OwogICAgIERpcmVjdG9yeVRhcmdldCBjb25zdCYgZHQgPSBpdC5zZWNvbmQ7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7CisgICAgZHQuTEctPkdldE1ha2VmaWxlKCktPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MsIHRydWUpOworICAgIGlmIChjb25maWdzLmVtcHR5KCkpIHsKKyAgICAgIGNvbmZpZ3MuZW1wbGFjZV9iYWNrKCk7CisgICAgfQogCiAgICAgLy8gU2V0dXAgdGFyZ2V0Ci0gICAgYnVpbGQuQ29tbWVudCA9ICJGb2xkZXI6ICIgKyBjdXJyZW50QmluYXJ5RGlyOwotICAgIGJ1aWxkLk91dHB1dHMuZW1wbGFjZV9iYWNrKAotICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKGN1cnJlbnRCaW5hcnlEaXIgKyAiL2FsbCIpKTsKLSAgICBmb3IgKERpcmVjdG9yeVRhcmdldDo6VGFyZ2V0IGNvbnN0JiB0IDogZHQuVGFyZ2V0cykgewotICAgICAgaWYgKCF0LkV4Y2x1ZGVGcm9tQWxsKSB7Ci0gICAgICAgIHRoaXMtPkFwcGVuZFRhcmdldE91dHB1dHModC5HVCwgYnVpbGQuRXhwbGljaXREZXBzKTsKKyAgICBjbU5pbmphRGVwcyBjb25maWdEZXBzOworICAgIGJ1aWxkLkNvbW1lbnQgPSBjbVN0ckNhdCgiRm9sZGVyOiAiLCBjdXJyZW50QmluYXJ5RGlyKTsKKyAgICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygpOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGJ1aWxkRGlyQWxsVGFyZ2V0ID0KKyAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChjbVN0ckNhdChjdXJyZW50QmluYXJ5RGlyLCAiL2FsbCIpKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGhpcy0+QnVpbGRBbGlhcyhidWlsZERpckFsbFRhcmdldCwgY29uZmlnKTsKKyAgICAgIGNvbmZpZ0RlcHMuZW1wbGFjZV9iYWNrKGJ1aWxkLk91dHB1dHMuZnJvbnQoKSk7CisgICAgICBmb3IgKERpcmVjdG9yeVRhcmdldDo6VGFyZ2V0IGNvbnN0JiB0IDogZHQuVGFyZ2V0cykgeworICAgICAgICBpZiAoIXQuRXhjbHVkZUZyb21BbGwpIHsKKyAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHQuR1QsIGJ1aWxkLkV4cGxpY2l0RGVwcywgY29uZmlnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZm9yIChEaXJlY3RvcnlUYXJnZXQ6OkRpciBjb25zdCYgZCA6IGR0LkNoaWxkcmVuKSB7CisgICAgICAgIGlmICghZC5FeGNsdWRlRnJvbUFsbCkgeworICAgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5lbXBsYWNlX2JhY2sodGhpcy0+QnVpbGRBbGlhcygKKyAgICAgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChjbVN0ckNhdChkLlBhdGgsICIvYWxsIikpLCBjb25maWcpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gV3JpdGUgdGFyZ2V0CisgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKHRoaXMtPkVuYWJsZUNyb3NzQ29uZmlnQnVpbGQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3Jvc3NDb25maWdzLmNvdW50KGNvbmZpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAqdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQpOworICAgIH0KKworICAgIC8vIEFkZCBzaG9ydGN1dCB0YXJnZXQKKyAgICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzID0geyB0aGlzLT5CdWlsZEFsaWFzKGJ1aWxkRGlyQWxsVGFyZ2V0LCBjb25maWcpIH07CisgICAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IGJ1aWxkRGlyQWxsVGFyZ2V0OworICAgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRDb25maWdGaWxlU3RyZWFtKGNvbmZpZyksIGJ1aWxkKTsKKyAgICAgIH0KKworICAgICAgaWYgKCF0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZy5lbXB0eSgpKSB7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkRlZmF1bHRDb25maWdzKSB7CisgICAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjaygKKyAgICAgICAgICAgIHRoaXMtPkJ1aWxkQWxpYXMoYnVpbGREaXJBbGxUYXJnZXQsIGNvbmZpZykpOworICAgICAgICB9CisgICAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IGJ1aWxkRGlyQWxsVGFyZ2V0OworICAgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXREZWZhdWx0RmlsZVN0cmVhbSgpLCBidWlsZCk7CiAgICAgICB9CiAgICAgfQotICAgIGZvciAoRGlyZWN0b3J5VGFyZ2V0OjpEaXIgY29uc3QmIGQgOiBkdC5DaGlsZHJlbikgewotICAgICAgaWYgKCFkLkV4Y2x1ZGVGcm9tQWxsKSB7Ci0gICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5lbXBsYWNlX2JhY2soCi0gICAgICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKGQuUGF0aCArICIvYWxsIikpOworCisgICAgLy8gQWRkIHRhcmdldCBmb3IgYWxsIGNvbmZpZ3MKKyAgICBpZiAodGhpcy0+RW5hYmxlQ3Jvc3NDb25maWdCdWlsZCgpKSB7CisgICAgICBidWlsZC5FeHBsaWNpdERlcHMuY2xlYXIoKTsKKyAgICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+Q3Jvc3NDb25maWdzKSB7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2soCisgICAgICAgICAgdGhpcy0+QnVpbGRBbGlhcyhidWlsZERpckFsbFRhcmdldCwgY29uZmlnKSk7CiAgICAgICB9CisgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKGJ1aWxkRGlyQWxsVGFyZ2V0LCAiYWxsIik7CisgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKG9zLCBidWlsZCk7CiAgICAgfQotICAgIC8vIFdyaXRlIHRhcmdldAotICAgIHRoaXMtPldyaXRlQnVpbGQob3MsIGJ1aWxkKTsKICAgfQogfQogCkBAIC0xMTQ4LDcgKzE0NDcsNyBAQAogICAvLyBnZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBjbWFrZSBpdHNlbGYgaGFzIGdlbmVyYXRlZCBhcyBhCiAgIC8vIHByb2R1Y3Qgb2YgY29uZmlndXJhdGlvbi4KIAotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICAvLyBnZXQgdGhlIHZlY3RvciBvZiBmaWxlcyBjcmVhdGVkIGJ5IHRoaXMgbWFrZWZpbGUgYW5kIGNvbnZlcnQgdGhlbQogICAgIC8vIHRvIG5pbmphIHBhdGhzLCB3aGljaCBhcmUgYWxsIHJlbGF0aXZlIGluIHJlc3BlY3QgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeQogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUgOiBsZy0+R2V0TWFrZWZpbGUoKS0+R2V0T3V0cHV0RmlsZXMoKSkgewpAQCAtMTE2MSw4ICsxNDYwLDcgQEAKICAgICAgICAga25vd25EZXBlbmRlbmNpZXMuaW5zZXJ0KHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChqKSk7CiAgICAgICB9CiAgICAgfQotICAgIGZvciAoY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqIGxpIDoKLSAgICAgICAgIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRFdmFsdWF0aW9uRmlsZXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgbGkgOiBsZy0+R2V0TWFrZWZpbGUoKS0+R2V0RXZhbHVhdGlvbkZpbGVzKCkpIHsKICAgICAgIC8vIGdldCBhbGwgdGhlIGZpbGVzIGNyZWF0ZWQgYnkgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGFuZCBjb252ZXJ0IHRoZW0KICAgICAgIC8vIHRvIG5pbmphIHBhdGhzCiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBldmFsdWF0aW9uRmlsZSA6IGxpLT5HZXRGaWxlcygpKSB7CkBAIC0xMjQ3LDEwICsxNTQ1LDE3IEBACiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7CiAgIG9zIDw8ICIjIEJ1aWx0LWluIHRhcmdldHNcblxuIjsKIAotICB0aGlzLT5Xcml0ZVRhcmdldERlZmF1bHQob3MpOwogICB0aGlzLT5Xcml0ZVRhcmdldFJlYnVpbGRNYW5pZmVzdChvcyk7CiAgIHRoaXMtPldyaXRlVGFyZ2V0Q2xlYW4ob3MpOwogICB0aGlzLT5Xcml0ZVRhcmdldEhlbHAob3MpOworCisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKCkpIHsKKyAgICB0aGlzLT5Xcml0ZVRhcmdldERlZmF1bHQoKnRoaXMtPkdldENvbmZpZ0ZpbGVTdHJlYW0oY29uZmlnKSk7CisgIH0KKworICBpZiAoIXRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5Xcml0ZVRhcmdldERlZmF1bHQoKnRoaXMtPkdldERlZmF1bHRGaWxlU3RyZWFtKCkpOworICB9CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVUYXJnZXREZWZhdWx0KHN0ZDo6b3N0cmVhbSYgb3MpCkBAIC0xMjY4LDEyICsxNTczLDEyIEBACiAgIGlmICh0aGlzLT5HbG9iYWxTZXR0aW5nSXNPbigiQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OIikpIHsKICAgICByZXR1cm47CiAgIH0KLSAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOwogCiAgIHsKICAgICBjbU5pbmphUnVsZSBydWxlKCJSRVJVTl9DTUFLRSIpOwogICAgIHJ1bGUuQ29tbWFuZCA9Ci0gICAgICBjbVN0ckNhdChDTWFrZUNtZCgpLCAiIC1TIiwKKyAgICAgIGNtU3RyQ2F0KENNYWtlQ21kKCksICIgLS1yZWdlbmVyYXRlLWR1cmluZy1idWlsZCAtUyIsCiAgICAgICAgICAgICAgICBsZy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKSwKICAgICAgICAgICAgICAgICIgLUIiLApAQCAtMTI4Nyw5ICsxNTkyLDkgQEAKIAogICBjbU5pbmphQnVpbGQgcmVCdWlsZCgiUkVSVU5fQ01BS0UiKTsKICAgcmVCdWlsZC5Db21tZW50ID0gIlJlLXJ1biBDTWFrZSBpZiBhbnkgb2YgaXRzIGlucHV0cyBjaGFuZ2VkLiI7Ci0gIHJlQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+TmluamFPdXRwdXRQYXRoKE5JTkpBX0JVSUxEX0ZJTEUpKTsKKyAgdGhpcy0+QWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cyhyZUJ1aWxkLk91dHB1dHMpOwogCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGZpIDogbG9jYWxHZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKSB7CiAgICAgICByZUJ1aWxkLkltcGxpY2l0RGVwcy5wdXNoX2JhY2sodGhpcy0+Q29udmVydFRvTmluamFQYXRoKGZpKSk7CiAgICAgfQpAQCAtMTMxOCw3ICsxNjIzLDggQEAKIAogICAgIGNtTmluamFCdWlsZCBwaG9ueUJ1aWxkKCJwaG9ueSIpOwogICAgIHBob255QnVpbGQuQ29tbWVudCA9ICJQaG9ueSB0YXJnZXQgdG8gZm9yY2UgZ2xvYiB2ZXJpZmljYXRpb24gcnVuLiI7Ci0gICAgcGhvbnlCdWlsZC5PdXRwdXRzLnB1c2hfYmFjayhjbS0+R2V0R2xvYlZlcmlmeVNjcmlwdCgpICsgIl9mb3JjZSIpOworICAgIHBob255QnVpbGQuT3V0cHV0cy5wdXNoX2JhY2soCisgICAgICBjbVN0ckNhdChjbS0+R2V0R2xvYlZlcmlmeVNjcmlwdCgpLCAiX2ZvcmNlIikpOwogICAgIHRoaXMtPldyaXRlQnVpbGQob3MsIHBob255QnVpbGQpOwogCiAgICAgcmVCdWlsZC5WYXJpYWJsZXNbInJlc3RhdCJdID0gIjEiOwpAQCAtMTM3NiwxNCArMTY4MiwxNCBAQAogCiBzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDTWFrZUNtZCgpIGNvbnN0CiB7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuYXQoMCk7CisgIGNvbnN0IGF1dG8mIGxnZW4gPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuYXQoMCk7CiAgIHJldHVybiBsZ2VuLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKIH0KIAogc3RkOjpzdHJpbmcgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TmluamFDbWQoKSBjb25zdAogewotICBjbUxvY2FsR2VuZXJhdG9yKiBsZ2VuID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOworICBjb25zdCBhdXRvJiBsZ2VuID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOwogICBpZiAobGdlbiAhPSBudWxscHRyKSB7CiAgICAgcmV0dXJuIGxnZW4tPkNvbnZlcnRUb091dHB1dEZvcm1hdCh0aGlzLT5OaW5qYUNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwpAQCAtMTQxMywxMyArMTcxOSwyNyBAQAogCiBib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlVGFyZ2V0Q2xlYW5BZGRpdGlvbmFsKHN0ZDo6b3N0cmVhbSYgb3MpCiB7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnciA9IHRoaXMtPkxvY2FsR2VuZXJhdG9ycy5hdCgwKTsKKyAgY29uc3QgYXV0byYgbGdyID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzLmF0KDApOwogICBzdGQ6OnN0cmluZyBjbGVhblNjcmlwdFJlbCA9ICJDTWFrZUZpbGVzL2NsZWFuX2FkZGl0aW9uYWwuY21ha2UiOwogICBzdGQ6OnN0cmluZyBjbGVhblNjcmlwdEFicyA9CiAgICAgY21TdHJDYXQobGdyLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCBjbGVhblNjcmlwdFJlbCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOworICB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MsIHRydWUpOworICBpZiAoY29uZmlncy5lbXB0eSgpKSB7CisgICAgY29uZmlncy5lbXBsYWNlX2JhY2soKTsKKyAgfQogCiAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGZpbGVzIHRvIGNsZWFuCi0gIGlmICh0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcy5lbXB0eSgpKSB7CisgIGJvb2wgZW1wdHkgPSB0cnVlOworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICBhdXRvIGNvbnN0IGl0ID0gdGhpcy0+Q29uZmlncy5maW5kKGNvbmZpZyk7CisgICAgaWYgKGl0ICE9IHRoaXMtPkNvbmZpZ3MuZW5kKCkgJiYKKyAgICAgICAgIWl0LT5zZWNvbmQuQWRkaXRpb25hbENsZWFuRmlsZXMuZW1wdHkoKSkgeworICAgICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAoZW1wdHkpIHsKICAgICAvLyBSZW1vdmUgY21ha2UgY2xlYW4gc2NyaXB0IGZpbGUgaWYgaXQgZXhpc3RzCiAgICAgY21TeXN0ZW1Ub29sczo6UmVtb3ZlRmlsZShjbGVhblNjcmlwdEFicyk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQzMSwxNCArMTc1MSwyMyBAQAogICAgIGlmICghZm91dCkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmb3V0IDw8ICIjIEFkZGl0aW9uYWwgY2xlYW4gZmlsZXNcblxuIjsKLSAgICBmb3V0IDw8ICJmaWxlKFJFTU9WRV9SRUNVUlNFXG4iOwotICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFjZiA6IHRoaXMtPkFkZGl0aW9uYWxDbGVhbkZpbGVzKSB7Ci0gICAgICBmb3V0IDw8ICIgICIKLSAgICAgICAgICAgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKENvbnZlcnRUb05pbmphUGF0aChhY2YpKQotICAgICAgICAgICA8PCAnXG4nOworICAgIGZvdXQgPDwgIiMgQWRkaXRpb25hbCBjbGVhbiBmaWxlc1xuY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpXG4iOworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgICAgYXV0byBjb25zdCBpdCA9IHRoaXMtPkNvbmZpZ3MuZmluZChjb25maWcpOworICAgICAgaWYgKGl0ICE9IHRoaXMtPkNvbmZpZ3MuZW5kKCkgJiYKKyAgICAgICAgICAhaXQtPnNlY29uZC5BZGRpdGlvbmFsQ2xlYW5GaWxlcy5lbXB0eSgpKSB7CisgICAgICAgIGZvdXQgPDwgIlxuaWYoXCIke0NPTkZJR31cIiBTVFJFUVVBTCBcIlwiIE9SIFwiJHtDT05GSUd9XCIgU1RSRVFVQUwgXCIiCisgICAgICAgICAgICAgPDwgY29uZmlnIDw8ICJcIilcbiI7CisgICAgICAgIGZvdXQgPDwgIiAgZmlsZShSRU1PVkVfUkVDVVJTRVxuIjsKKyAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYWNmIDogaXQtPnNlY29uZC5BZGRpdGlvbmFsQ2xlYW5GaWxlcykgeworICAgICAgICAgIGZvdXQgPDwgIiAgIgorICAgICAgICAgICAgICAgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKENvbnZlcnRUb05pbmphUGF0aChhY2YpKQorICAgICAgICAgICAgICAgPDwgJ1xuJzsKKyAgICAgICAgfQorICAgICAgICBmb3V0IDw8ICIgIClcbiI7CisgICAgICAgIGZvdXQgPDwgImVuZGlmKClcbiI7CisgICAgICB9CiAgICAgfQotICAgIGZvdXQgPDwgIilcbiI7CiAgIH0KICAgLy8gUmVnaXN0ZXIgY2xlYW4gc2NyaXB0IGZpbGUKICAgbGdyLT5HZXRNYWtlZmlsZSgpLT5BZGRDTWFrZU91dHB1dEZpbGUoY2xlYW5TY3JpcHRBYnMpOwpAQCAtMTQ0Nyw3ICsxNzc2LDcgQEAKICAgewogICAgIGNtTmluamFSdWxlIHJ1bGUoIkNMRUFOX0FERElUSU9OQUwiKTsKICAgICBydWxlLkNvbW1hbmQgPSBjbVN0ckNhdCgKLSAgICAgIENNYWtlQ21kKCksICIgLVAgIiwKKyAgICAgIENNYWtlQ21kKCksICIgLURDT05GSUc9JENPTkZJRyAtUCAiLAogICAgICAgbGdyLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQodGhpcy0+TmluamFPdXRwdXRQYXRoKGNsZWFuU2NyaXB0UmVsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkpOwogICAgIHJ1bGUuRGVzY3JpcHRpb24gPSAiQ2xlYW5pbmcgYWRkaXRpb25hbCBmaWxlcy4uLiI7CkBAIC0xNDU5LDkgKzE3ODgsMTkgQEAKICAgewogICAgIGNtTmluamFCdWlsZCBidWlsZCgiQ0xFQU5fQURESVRJT05BTCIpOwogICAgIGJ1aWxkLkNvbW1lbnQgPSAiQ2xlYW4gYWRkaXRpb25hbCBmaWxlcy4iOwotICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKAotICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSkpOwotICAgIFdyaXRlQnVpbGQob3MsIGJ1aWxkKTsKKyAgICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygpOworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGhpcy0+QnVpbGRBbGlhcygKKyAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSksIGNvbmZpZyk7CisgICAgICBidWlsZC5WYXJpYWJsZXNbIkNPTkZJRyJdID0gY29uZmlnOworICAgICAgV3JpdGVCdWlsZChvcywgYnVpbGQpOworICAgIH0KKyAgICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPQorICAgICAgICB0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0QWRkaXRpb25hbENsZWFuVGFyZ2V0TmFtZSgpKTsKKyAgICAgIGJ1aWxkLlZhcmlhYmxlc1siQ09ORklHIl0gPSAiIjsKKyAgICAgIFdyaXRlQnVpbGQob3MsIGJ1aWxkKTsKKyAgICB9CiAgIH0KICAgLy8gUmV0dXJuIHN1Y2Nlc3MKICAgcmV0dXJuIHRydWU7CkBAIC0xNDc2LDIyICsxODE1LDExMyBAQAogICAvLyBXcml0ZSBydWxlCiAgIHsKICAgICBjbU5pbmphUnVsZSBydWxlKCJDTEVBTiIpOwotICAgIHJ1bGUuQ29tbWFuZCA9IE5pbmphQ21kKCkgKyAiIC10IGNsZWFuIjsKKyAgICBydWxlLkNvbW1hbmQgPSBjbVN0ckNhdChOaW5qYUNtZCgpLCAiICRGSUxFX0FSRyAtdCBjbGVhbiAkVEFSR0VUUyIpOwogICAgIHJ1bGUuRGVzY3JpcHRpb24gPSAiQ2xlYW5pbmcgYWxsIGJ1aWx0IGZpbGVzLi4uIjsKICAgICBydWxlLkNvbW1lbnQgPSAiUnVsZSBmb3IgY2xlYW5pbmcgYWxsIGJ1aWx0IGZpbGVzLiI7CiAgICAgV3JpdGVSdWxlKCp0aGlzLT5SdWxlc0ZpbGVTdHJlYW0sIHJ1bGUpOwogICB9CiAKKyAgYXV0byBjb25zdCBjb25maWdzID0gdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKKwogICAvLyBXcml0ZSBidWlsZAogICB7CiAgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJDTEVBTiIpOwogICAgIGJ1aWxkLkNvbW1lbnQgPSAiQ2xlYW4gYWxsIHRoZSBidWlsdCBmaWxlcy4iOwotICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRDbGVhblRhcmdldE5hbWUoKSkpOwotICAgIGlmIChhZGRpdGlvbmFsRmlsZXMpIHsKLSAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2soCi0gICAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRBZGRpdGlvbmFsQ2xlYW5UYXJnZXROYW1lKCkpKTsKKyAgICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygpOworCisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CisgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKAorICAgICAgICB0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0Q2xlYW5UYXJnZXROYW1lKCkpLCBjb25maWcpOworICAgICAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgICAgICBidWlsZC5WYXJpYWJsZXNbIlRBUkdFVFMiXSA9CisgICAgICAgICAgY21TdHJDYXQodGhpcy0+QnVpbGRBbGlhcyhHZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXROYW1lKCksIGNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgIiAiLCBHZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXROYW1lKCkpOworICAgICAgfQorICAgICAgYnVpbGQuRXhwbGljaXREZXBzLmNsZWFyKCk7CisgICAgICBpZiAoYWRkaXRpb25hbEZpbGVzKSB7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2sodGhpcy0+QnVpbGRBbGlhcygKKyAgICAgICAgICB0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0QWRkaXRpb25hbENsZWFuVGFyZ2V0TmFtZSgpKSwKKyAgICAgICAgICBjb25maWcpKTsKKyAgICAgIH0KKyAgICAgIGZvciAoYXV0byBjb25zdCYgZmlsZUNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgICAgaWYgKGZpbGVDb25maWcgIT0gY29uZmlnICYmICF0aGlzLT5FbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgICAgICAgYnVpbGQuVmFyaWFibGVzWyJGSUxFX0FSRyJdID0gY21TdHJDYXQoCisgICAgICAgICAgICAiLWYgIiwKKyAgICAgICAgICAgIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6R2V0TmluamFJbXBsRmlsZW5hbWUoZmlsZUNvbmZpZykpOworICAgICAgICB9CisgICAgICAgIHRoaXMtPldyaXRlQnVpbGQoKnRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpLCBidWlsZCk7CisgICAgICB9CiAgICAgfQorCisgICAgaWYgKHRoaXMtPkVuYWJsZUNyb3NzQ29uZmlnQnVpbGQoKSkgeworICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGhpcy0+QnVpbGRBbGlhcygKKyAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldENsZWFuVGFyZ2V0TmFtZSgpKSwgImFsbCIpOworICAgICAgYnVpbGQuRXhwbGljaXREZXBzLmNsZWFyKCk7CisKKyAgICAgIGlmIChhZGRpdGlvbmFsRmlsZXMpIHsKKyAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5Dcm9zc0NvbmZpZ3MpIHsKKyAgICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgICAgICB0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0QWRkaXRpb25hbENsZWFuVGFyZ2V0TmFtZSgpKSwKKyAgICAgICAgICAgIGNvbmZpZykpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBieXByb2R1Y3RzOworICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5Dcm9zc0NvbmZpZ3MpIHsKKyAgICAgICAgYnlwcm9kdWN0cy5wdXNoX2JhY2soCisgICAgICAgICAgdGhpcy0+QnVpbGRBbGlhcyhHZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXROYW1lKCksIGNvbmZpZykpOworICAgICAgfQorICAgICAgYnVpbGQuVmFyaWFibGVzWyJUQVJHRVRTIl0gPSBjbUpvaW4oYnlwcm9kdWN0cywgIiAiKTsKKworICAgICAgZm9yIChhdXRvIGNvbnN0JiBmaWxlQ29uZmlnIDogY29uZmlncykgeworICAgICAgICBidWlsZC5WYXJpYWJsZXNbIkZJTEVfQVJHIl0gPSBjbVN0ckNhdCgKKyAgICAgICAgICAiLWYgIiwKKyAgICAgICAgICBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldE5pbmphSW1wbEZpbGVuYW1lKGZpbGVDb25maWcpKTsKKyAgICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksIGJ1aWxkKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJwaG9ueSIpOworICAgIGJ1aWxkLk91dHB1dHMuZW1wbGFjZV9iYWNrKAorICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldENsZWFuVGFyZ2V0TmFtZSgpKSk7CisgICAgYnVpbGQuRXhwbGljaXREZXBzLmVtcGxhY2VfYmFjaygpOworCisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CisgICAgICBidWlsZC5FeHBsaWNpdERlcHMuZnJvbnQoKSA9IHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRDbGVhblRhcmdldE5hbWUoKSksIGNvbmZpZyk7CisgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRDb25maWdGaWxlU3RyZWFtKGNvbmZpZyksIGJ1aWxkKTsKKyAgICB9CisKKyAgICBpZiAoIXRoaXMtPkRlZmF1bHRDb25maWdzLmVtcHR5KCkpIHsKKyAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5EZWZhdWx0Q29uZmlncykgeworICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldENsZWFuVGFyZ2V0TmFtZSgpKSwgY29uZmlnKSk7CisgICAgICB9CisgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXREZWZhdWx0RmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgfQorICB9CisKKyAgLy8gV3JpdGUgYnlwcm9kdWN0cworICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJwaG9ueSIpOworICAgIGJ1aWxkLkNvbW1lbnQgPSAiQ2xlYW4gYnlwcm9kdWN0cy4iOworICAgIGJ1aWxkLk91dHB1dHMuZW1wbGFjZV9iYWNrKAorICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldE5hbWUoKSkpOworICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldDsKICAgICBXcml0ZUJ1aWxkKG9zLCBidWlsZCk7CisKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChHZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXROYW1lKCkpLCBjb25maWcpOworICAgICAgYnVpbGQuRXhwbGljaXREZXBzID0gdGhpcy0+Q29uZmlnc1tjb25maWddLkJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldDsKKyAgICAgIFdyaXRlQnVpbGQob3MsIGJ1aWxkKTsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTQ5OSw3ICsxOTI5LDcgQEAKIHsKICAgewogICAgIGNtTmluamFSdWxlIHJ1bGUoIkhFTFAiKTsKLSAgICBydWxlLkNvbW1hbmQgPSBOaW5qYUNtZCgpICsgIiAtdCB0YXJnZXRzIjsKKyAgICBydWxlLkNvbW1hbmQgPSBjbVN0ckNhdChOaW5qYUNtZCgpLCAiIC10IHRhcmdldHMiKTsKICAgICBydWxlLkRlc2NyaXB0aW9uID0gIkFsbCBwcmltYXJ5IHRhcmdldHMgYXZhaWxhYmxlOiI7CiAgICAgcnVsZS5Db21tZW50ID0gIlJ1bGUgZm9yIHByaW50aW5nIGFsbCBwcmltYXJ5IHRhcmdldHMgYXZhaWxhYmxlLiI7CiAgICAgV3JpdGVSdWxlKCp0aGlzLT5SdWxlc0ZpbGVTdHJlYW0sIHJ1bGUpOwpAQCAtMTUyNiw3ICsxOTU2LDcgQEAKICAgaWYgKCF0aGlzLT5IYXNPdXRwdXRQYXRoUHJlZml4KCkgfHwgY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkpIHsKICAgICByZXR1cm4gcGF0aDsKICAgfQotICByZXR1cm4gdGhpcy0+T3V0cHV0UGF0aFByZWZpeCArIHBhdGg7CisgIHJldHVybiBjbVN0ckNhdCh0aGlzLT5PdXRwdXRQYXRoUHJlZml4LCBwYXRoKTsKIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpTdHJpcE5pbmphT3V0cHV0UGF0aFByZWZpeEFzU3VmZml4KApAQCAtMTY1NCw3ICsyMDg0LDggQEAKICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWxhbmc9IikpIHsKICAgICAgIGFyZ19sYW5nID0gYXJnLnN1YnN0cig3KTsKICAgICB9IGVsc2UgewotICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIi1FIGNtYWtlX25pbmphX2RlcGVuZHMgdW5rbm93biBhcmd1bWVudDogIiArIGFyZyk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgICAgY21TdHJDYXQoIi1FIGNtYWtlX25pbmphX2RlcGVuZHMgdW5rbm93biBhcmd1bWVudDogIiwgYXJnKSk7CiAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIH0KQEAgLTE3MjUsNyArMjE1Niw4IEBACiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBkZGlmKGFyZ19kZGkpOwogICBkZGlmIDw8IGRkaTsKICAgaWYgKCFkZGlmKSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIi1FIGNtYWtlX25pbmphX2RlcGVuZHMgZmFpbGVkIHRvIHdyaXRlICIgKyBhcmdfZGRpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCItRSBjbWFrZV9uaW5qYV9kZXBlbmRzIGZhaWxlZCB0byB3cml0ZSAiLCBhcmdfZGRpKSk7CiAgICAgcmV0dXJuIDE7CiAgIH0KICAgcmV0dXJuIDA7CkBAIC0xNzcxLDcgKzIyMDMsOCBAQAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVmaW5lczsKICAgY21Gb3J0cmFuUGFyc2VyIHBhcnNlcihmYywgaW5jbHVkZXMsIGRlZmluZXMsIGZpbmZvKTsKICAgaWYgKCFjbUZvcnRyYW5QYXJzZXJfRmlsZVB1c2goJnBhcnNlciwgYXJnX3BwLmNfc3RyKCkpKSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIi1FIGNtYWtlX25pbmphX2RlcGVuZHMgZmFpbGVkIHRvIG9wZW4gIiArIGFyZ19wcCk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICBjbVN0ckNhdCgiLUUgY21ha2VfbmluamFfZGVwZW5kcyBmYWlsZWQgdG8gb3BlbiAiLCBhcmdfcHApKTsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogICBpZiAoY21Gb3J0cmFuX3l5cGFyc2UocGFyc2VyLlNjYW5uZXIpICE9IDApIHsKQEAgLTE4MDksMTEgKzIyNDIsOSBAQAogICAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldFJlbGF0aXZlUGF0aFRvcFNvdXJjZShkaXJfdG9wX3NyYy5jX3N0cigpKTsKICAgICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRSZWxhdGl2ZVBhdGhUb3BCaW5hcnkoZGlyX3RvcF9ibGQuY19zdHIoKSk7CiAgICAgYXV0byBtZmQgPSBjbTo6bWFrZV91bmlxdWU8Y21NYWtlZmlsZT4odGhpcywgc25hcHNob3QpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsTmluamFHZW5lcmF0b3I+IGxnZCgKLSAgICAgIHN0YXRpY19jYXN0PGNtTG9jYWxOaW5qYUdlbmVyYXRvcio+KAotICAgICAgICB0aGlzLT5DcmVhdGVMb2NhbEdlbmVyYXRvcihtZmQuZ2V0KCkpKSk7Ci0gICAgdGhpcy0+TWFrZWZpbGVzLnB1c2hfYmFjayhtZmQucmVsZWFzZSgpKTsKLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMucHVzaF9iYWNrKGxnZC5yZWxlYXNlKCkpOworICAgIGF1dG8gbGdkID0gdGhpcy0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IobWZkLmdldCgpKTsKKyAgICB0aGlzLT5NYWtlZmlsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShtZmQpKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShsZ2QpKTsKICAgfQogCiAgIHN0ZDo6dmVjdG9yPGNtRHluZGVwT2JqZWN0SW5mbz4gb2JqZWN0czsKQEAgLTE4NzYsNyArMjMwNyw3IEBACiAgIEpzb246OlZhbHVlIHRtID0gSnNvbjo6b2JqZWN0VmFsdWU7CiAgIGZvciAoY21EeW5kZXBPYmplY3RJbmZvIGNvbnN0JiBvYmplY3QgOiBvYmplY3RzKSB7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IG9iamVjdC5Qcm92aWRlcykgewotICAgICAgc3RkOjpzdHJpbmcgY29uc3QgbW9kID0gbW9kdWxlX2RpciArIHA7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCBtb2QgPSBjbVN0ckNhdChtb2R1bGVfZGlyLCBwKTsKICAgICAgIG1vZF9maWxlc1twXSA9IG1vZDsKICAgICAgIHRtW3BdID0gbW9kOwogICAgIH0KQEAgLTE5MTIsMTQgKzIzNDMsMTkgQEAKIAogICAvLyBTdG9yZSB0aGUgbWFwIG9mIG1vZHVsZXMgcHJvdmlkZWQgYnkgdGhpcyB0YXJnZXQgaW4gYSBmaWxlIGZvcgogICAvLyB1c2UgYnkgZGVwZW5kZW50cyB0aGF0IHJlZmVyZW5jZSB0aGlzIHRhcmdldCBpbiBsaW5rZWQtdGFyZ2V0LWRpcnMuCi0gIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldF9tb2RzX2ZpbGUgPQotICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChhcmdfZGQpICsgIi8iICsgYXJnX2xhbmcgKyAiTW9kdWxlcy5qc29uIjsKKyAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0X21vZHNfZmlsZSA9IGNtU3RyQ2F0KAorICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChhcmdfZGQpLCAnLycsIGFyZ19sYW5nLCAiTW9kdWxlcy5qc29uIik7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSB0bWYodGFyZ2V0X21vZHNfZmlsZSk7CiAgIHRtZiA8PCB0bTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkgY29uc3QKK3sKKyAgcmV0dXJuICF0aGlzLT5Dcm9zc0NvbmZpZ3MuZW1wdHkoKTsKK30KKwogaW50IGNtY21kX2NtYWtlX25pbmphX2R5bmRlcChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFyZ0JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhcmdFbmQpCiB7CkBAIC0xOTQxLDcgKzIzNzcsOCBAQAogICAgICAgICAgICAgICAgY21IYXNMaXRlcmFsU3VmZml4KGFyZywgIi5kZGkiKSkgewogICAgICAgYXJnX2RkaXMucHVzaF9iYWNrKGFyZyk7CiAgICAgfSBlbHNlIHsKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCItRSBjbWFrZV9uaW5qYV9keW5kZXAgdW5rbm93biBhcmd1bWVudDogIiArIGFyZyk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgICAgY21TdHJDYXQoIi1FIGNtYWtlX25pbmphX2R5bmRlcCB1bmtub3duIGFyZ3VtZW50OiAiLCBhcmcpKTsKICAgICAgIHJldHVybiAxOwogICAgIH0KICAgfQpAQCAtMTk3Nyw3ICsyNDE0LDcgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QgZGlyX3RvcF9zcmMgPSB0ZGlbImRpci10b3Atc3JjIl0uYXNTdHJpbmcoKTsKICAgc3RkOjpzdHJpbmcgbW9kdWxlX2RpciA9IHRkaVsibW9kdWxlLWRpciJdLmFzU3RyaW5nKCk7CiAgIGlmICghbW9kdWxlX2Rpci5lbXB0eSgpICYmICFjbUhhc0xpdGVyYWxTdWZmaXgobW9kdWxlX2RpciwgIi8iKSkgewotICAgIG1vZHVsZV9kaXIgKz0gIi8iOworICAgIG1vZHVsZV9kaXIgKz0gJy8nOwogICB9CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rZWRfdGFyZ2V0X2RpcnM7CiAgIEpzb246OlZhbHVlIGNvbnN0JiB0ZGlfbGlua2VkX3RhcmdldF9kaXJzID0gdGRpWyJsaW5rZWQtdGFyZ2V0LWRpcnMiXTsKQEAgLTE5OTAsMTMgKzI0MjcsMjY0IEBACiAgIGNtYWtlIGNtKGNtYWtlOjpSb2xlSW50ZXJuYWwsIGNtU3RhdGU6OlVua25vd24pOwogICBjbS5TZXRIb21lRGlyZWN0b3J5KGRpcl90b3Bfc3JjKTsKICAgY20uU2V0SG9tZU91dHB1dERpcmVjdG9yeShkaXJfdG9wX2JsZCk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbE5pbmphR2VuZXJhdG9yPiBnZ2QoCi0gICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxOaW5qYUdlbmVyYXRvcio+KGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcigiTmluamEiKSkpOworICBhdXRvIGdnZCA9IGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcigiTmluamEiKTsKICAgaWYgKCFnZ2QgfHwKLSAgICAgICFnZ2QtPldyaXRlRHluZGVwRmlsZShkaXJfdG9wX3NyYywgZGlyX3RvcF9ibGQsIGRpcl9jdXJfc3JjLCBkaXJfY3VyX2JsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZGQsIGFyZ19kZGlzLCBtb2R1bGVfZGlyLCBsaW5rZWRfdGFyZ2V0X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2xhbmcpKSB7CisgICAgICAhY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUdsb2JhbE5pbmphR2VuZXJhdG9yPihnZ2QpLldyaXRlRHluZGVwRmlsZSgKKyAgICAgICAgZGlyX3RvcF9zcmMsIGRpcl90b3BfYmxkLCBkaXJfY3VyX3NyYywgZGlyX2N1cl9ibGQsIGFyZ19kZCwgYXJnX2RkaXMsCisgICAgICAgIG1vZHVsZV9kaXIsIGxpbmtlZF90YXJnZXRfZGlycywgYXJnX2xhbmcpKSB7CiAgICAgcmV0dXJuIDE7CiAgIH0KICAgcmV0dXJuIDA7CiB9CisKK3ZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QXBwZW5kRGlyZWN0b3J5Rm9yQ29uZmlnKAorICBjb25zdCBzdGQ6OnN0cmluZyYgcHJlZml4LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICBjb25zdCBzdGQ6OnN0cmluZyYgc3VmZml4LCBzdGQ6OnN0cmluZyYgZGlyKQoreworICBpZiAoIWNvbmZpZy5lbXB0eSgpICYmIHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgIGRpciArPSBjbVN0ckNhdChwcmVmaXgsIGNvbmZpZywgc3VmZml4KTsKKyAgfQorfQorCitzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6R2V0Q3Jvc3NDb25maWdzKAorICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZykgY29uc3QKK3sKKyAgYXV0byByZXN1bHQgPSB0aGlzLT5Dcm9zc0NvbmZpZ3M7CisgIHJlc3VsdC5pbnNlcnQoZmlsZUNvbmZpZyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6TklOSkFfQ09NTU9OX0ZJTEUgPQorICAiQ01ha2VGaWxlcy9jb21tb24ubmluamEiOworY29uc3QgY2hhciogY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpOSU5KQV9GSUxFX0VYVEVOU0lPTiA9ICIubmluamEiOworCitjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OmNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcihjbWFrZSogY20pCisgIDogY21HbG9iYWxOaW5qYUdlbmVyYXRvcihjbSkKK3sKKyAgY20tPkdldFN0YXRlKCktPlNldElzR2VuZXJhdG9yTXVsdGlDb25maWcodHJ1ZSk7CisgIGNtLT5HZXRTdGF0ZSgpLT5TZXROaW5qYU11bHRpKHRydWUpOworfQorCit2b2lkIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6R2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpCit7CisgIGVudHJ5Lk5hbWUgPSBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldEFjdHVhbE5hbWUoKTsKKyAgZW50cnkuQnJpZWYgPSAiR2VuZXJhdGVzIGJ1aWxkLTxDb25maWc+Lm5pbmphIGZpbGVzLiI7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6RXhwYW5kQ0ZHSW50RGlyKAorICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAoreworICBzdGQ6OnN0cmluZyByZXN1bHQgPSBzdHI7CisgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcocmVzdWx0LCB0aGlzLT5HZXRDTWFrZUNGR0ludERpcigpLCBjb25maWcpOworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6T3BlbkJ1aWxkRmlsZVN0cmVhbXMoKQoreworICBpZiAoIXRoaXMtPk9wZW5GaWxlU3RyZWFtKHRoaXMtPkNvbW1vbkZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpOSU5KQV9DT01NT05fRklMRSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIXRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnLmVtcHR5KCkpIHsKKyAgICBpZiAoIXRoaXMtPk9wZW5GaWxlU3RyZWFtKHRoaXMtPkRlZmF1bHRGaWxlU3RyZWFtLCBOSU5KQV9CVUlMRF9GSUxFKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAqdGhpcy0+RGVmYXVsdEZpbGVTdHJlYW0KKyAgICAgIDw8ICIjIEJ1aWxkIHVzaW5nIHJ1bGVzIGZvciAnIiA8PCB0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZyA8PCAiJy5cblxuIgorICAgICAgPDwgImluY2x1ZGUgIiA8PCBHZXROaW5qYUltcGxGaWxlbmFtZSh0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZykgPDwgIlxuXG4iOworICB9CisKKyAgLy8gV3JpdGUgYSBjb21tZW50IGFib3V0IHRoaXMgZmlsZS4KKyAgKnRoaXMtPkNvbW1vbkZpbGVTdHJlYW0KKyAgICA8PCAiIyBUaGlzIGZpbGUgY29udGFpbnMgYnVpbGQgc3RhdGVtZW50cyBjb21tb24gdG8gYWxsICIKKyAgICAgICAiY29uZmlndXJhdGlvbnMuXG5cbiI7CisKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICAgIC8vIE9wZW4gaW1wbCBmaWxlLgorICAgIGlmICghdGhpcy0+T3BlbkZpbGVTdHJlYW0odGhpcy0+SW1wbEZpbGVTdHJlYW1zW2NvbmZpZ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXROaW5qYUltcGxGaWxlbmFtZShjb25maWcpKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIGEgY29tbWVudCBhYm91dCB0aGlzIGZpbGUuCisgICAgKnRoaXMtPkltcGxGaWxlU3RyZWFtc1tjb25maWddCisgICAgICA8PCAiIyBUaGlzIGZpbGUgY29udGFpbnMgYnVpbGQgc3RhdGVtZW50cyBzcGVjaWZpYyB0byB0aGUgXCIiIDw8IGNvbmZpZworICAgICAgPDwgIlwiXG4jIGNvbmZpZ3VyYXRpb24uXG5cbiI7CisKKyAgICAvLyBPcGVuIGNvbmZpZyBmaWxlLgorICAgIGlmICghdGhpcy0+T3BlbkZpbGVTdHJlYW0odGhpcy0+Q29uZmlnRmlsZVN0cmVhbXNbY29uZmlnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE5pbmphQ29uZmlnRmlsZW5hbWUoY29uZmlnKSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBhIGNvbW1lbnQgYWJvdXQgdGhpcyBmaWxlLgorICAgICp0aGlzLT5Db25maWdGaWxlU3RyZWFtc1tjb25maWddCisgICAgICA8PCAiIyBUaGlzIGZpbGUgY29udGFpbnMgYWxpYXNlcyBzcGVjaWZpYyB0byB0aGUgXCIiIDw8IGNvbmZpZworICAgICAgPDwgIlwiXG4jIGNvbmZpZ3VyYXRpb24uXG5cbiIKKyAgICAgIDw8ICJpbmNsdWRlICIgPDwgR2V0TmluamFJbXBsRmlsZW5hbWUoY29uZmlnKSA8PCAiXG5cbiI7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkNsb3NlQnVpbGRGaWxlU3RyZWFtcygpCit7CisgIGlmICh0aGlzLT5Db21tb25GaWxlU3RyZWFtKSB7CisgICAgdGhpcy0+Q29tbW9uRmlsZVN0cmVhbS5yZXNldCgpOworICB9IGVsc2UgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb21tb24gZmlsZSBzdHJlYW0gd2FzIG5vdCBvcGVuLiIpOworICB9CisKKyAgaWYgKHRoaXMtPkRlZmF1bHRGaWxlU3RyZWFtKSB7CisgICAgdGhpcy0+RGVmYXVsdEZpbGVTdHJlYW0ucmVzZXQoKTsKKyAgfSAvLyBObyBlcnJvciBpZiBpdCB3YXNuJ3Qgb3BlbgorCisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKCkpIHsKKyAgICBpZiAodGhpcy0+SW1wbEZpbGVTdHJlYW1zW2NvbmZpZ10pIHsKKyAgICAgIHRoaXMtPkltcGxGaWxlU3RyZWFtc1tjb25maWddLnJlc2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICBjbVN0ckNhdCgiSW1wbCBmaWxlIHN0cmVhbSBmb3IgXCIiLCBjb25maWcsICJcIiB3YXMgbm90IG9wZW4uIikpOworICAgIH0KKyAgICBpZiAodGhpcy0+Q29uZmlnRmlsZVN0cmVhbXNbY29uZmlnXSkgeworICAgICAgdGhpcy0+Q29uZmlnRmlsZVN0cmVhbXNbY29uZmlnXS5yZXNldCgpOworICAgIH0gZWxzZSB7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgICAgY21TdHJDYXQoIkNvbmZpZyBmaWxlIHN0cmVhbSBmb3IgXCIiLCBjb25maWcsICJcIiB3YXMgbm90IG9wZW4uIikpOworICAgIH0KKyAgfQorfQorCit2b2lkIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6QXBwZW5kTmluamFGaWxlQXJndW1lbnQoCisgIEdlbmVyYXRlZE1ha2VDb21tYW5kJiBjb21tYW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAoreworICBpZiAoIWNvbmZpZy5lbXB0eSgpKSB7CisgICAgY29tbWFuZC5BZGQoIi1mIik7CisgICAgY29tbWFuZC5BZGQoR2V0TmluamFDb25maWdGaWxlbmFtZShjb25maWcpKTsKKyAgfQorfQorCitzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldE5pbmphSW1wbEZpbGVuYW1lKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQoreworICByZXR1cm4gY21TdHJDYXQoIkNNYWtlRmlsZXMvaW1wbC0iLCBjb25maWcsCisgICAgICAgICAgICAgICAgICBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6Ok5JTkpBX0ZJTEVfRVhURU5TSU9OKTsKK30KKworc3RkOjpzdHJpbmcgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXROaW5qYUNvbmZpZ0ZpbGVuYW1lKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQoreworICByZXR1cm4gY21TdHJDYXQoImJ1aWxkLSIsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6TklOSkFfRklMRV9FWFRFTlNJT04pOworfQorCit2b2lkIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6QWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cygKKyAgY21OaW5qYURlcHMmIG91dHB1dHMpIGNvbnN0Cit7CisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aChHZXROaW5qYUltcGxGaWxlbmFtZShjb25maWcpKSk7CisgICAgb3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+TmluamFPdXRwdXRQYXRoKEdldE5pbmphQ29uZmlnRmlsZW5hbWUoY29uZmlnKSkpOworICB9CisgIGlmICghdGhpcy0+RGVmYXVsdEZpbGVDb25maWcuZW1wdHkoKSkgeworICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aChOSU5KQV9CVUlMRF9GSUxFKSk7CisgIH0KK30KKwordm9pZCBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldFF0QXV0b0dlbkNvbmZpZ3MoCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlncykgY29uc3QKK3sKKyAgYXV0byBjb25zdCBvbGRTaXplID0gY29uZmlncy5zaXplKCk7CisgIHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKKyAgaWYgKGNvbmZpZ3Muc2l6ZSgpID09IG9sZFNpemUpIHsKKyAgICBjb25maWdzLmVtcGxhY2VfYmFjaygpOworICB9Cit9CisKK2Jvb2wgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpJbnNwZWN0Q29uZmlnVHlwZVZhcmlhYmxlcygpCit7CisgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+TWFya0NsaUFzVXNlZCgiQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFIik7CisgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+TWFya0NsaUFzVXNlZCgiQ01BS0VfQ1JPU1NfQ09ORklHUyIpOworICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPk1hcmtDbGlBc1VzZWQoIkNNQUtFX0RFRkFVTFRfQ09ORklHUyIpOworICByZXR1cm4gdGhpcy0+UmVhZENhY2hlRW50cmllc0ZvckJ1aWxkKCp0aGlzLT5NYWtlZmlsZXMuZnJvbnQoKS0+R2V0U3RhdGUoKSk7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6R2V0RGVmYXVsdEJ1aWxkQ29uZmlnKCkgY29uc3QKK3sKKyAgcmV0dXJuICIiOworfQorCitib29sIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6UmVhZENhY2hlRW50cmllc0ZvckJ1aWxkKAorICBjb25zdCBjbVN0YXRlJiBzdGF0ZSkKK3sKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3NWZWM7CisgIGNtRXhwYW5kTGlzdChzdGF0ZS5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIiksCisgICAgICAgICAgICAgICBjb25maWdzVmVjKTsKKyAgaWYgKGNvbmZpZ3NWZWMuZW1wdHkoKSkgeworICAgIGNvbmZpZ3NWZWMuZW1wbGFjZV9iYWNrKCk7CisgIH0KKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbmZpZ3MoY29uZmlnc1ZlYy5jYmVnaW4oKSwgY29uZmlnc1ZlYy5jZW5kKCkpOworCisgIHRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnID0KKyAgICBzdGF0ZS5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUiKTsKKyAgaWYgKHRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZyA9IGNvbmZpZ3NWZWMuZnJvbnQoKTsKKyAgfQorICBpZiAoIWNvbmZpZ3MuY291bnQodGhpcy0+RGVmYXVsdEZpbGVDb25maWcpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKKyAgICBtc2cgPDwgIlRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSAiCisgICAgICAgIDw8ICJDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUgKCIgPDwgdGhpcy0+RGVmYXVsdEZpbGVDb25maWcKKyAgICAgICAgPDwgIikgaXMgbm90IHByZXNlbnQgaW4gQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyI7CisgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zdHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNyb3NzQ29uZmlnc1ZlYzsKKyAgY21FeHBhbmRMaXN0KHN0YXRlLkdldFNhZmVDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0NST1NTX0NPTkZJR1MiKSwKKyAgICAgICAgICAgICAgIGNyb3NzQ29uZmlnc1ZlYyk7CisgIGF1dG8gY3Jvc3NDb25maWdzID0gTGlzdFN1YnNldFdpdGhBbGwoY29uZmlncywgY29uZmlncywgY3Jvc3NDb25maWdzVmVjKTsKKyAgaWYgKCFjcm9zc0NvbmZpZ3MpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOworICAgIG1zZyA8PCAiQ01BS0VfQ1JPU1NfQ09ORklHUyBpcyBub3QgYSBzdWJzZXQgb2YgIgorICAgICAgICA8PCAiQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyI7CisgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zdHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHRoaXMtPkNyb3NzQ29uZmlncyA9ICpjcm9zc0NvbmZpZ3M7CisKKyAgYXV0byBkZWZhdWx0Q29uZmlnc1N0cmluZyA9CisgICAgc3RhdGUuR2V0U2FmZUNhY2hlRW50cnlWYWx1ZSgiQ01BS0VfREVGQVVMVF9DT05GSUdTIik7CisgIGlmIChkZWZhdWx0Q29uZmlnc1N0cmluZy5lbXB0eSgpKSB7CisgICAgZGVmYXVsdENvbmZpZ3NTdHJpbmcgPSB0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZzsKKyAgfQorICBpZiAoIWRlZmF1bHRDb25maWdzU3RyaW5nLmVtcHR5KCkgJiYKKyAgICAgIGRlZmF1bHRDb25maWdzU3RyaW5nICE9IHRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnICYmCisgICAgICAodGhpcy0+RGVmYXVsdEZpbGVDb25maWcuZW1wdHkoKSB8fCB0aGlzLT5Dcm9zc0NvbmZpZ3MuZW1wdHkoKSkpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOworICAgIG1zZyA8PCAiQ01BS0VfREVGQVVMVF9DT05GSUdTIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgIgorICAgICAgICA8PCAiQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFIG9yIENNQUtFX0NST1NTX0NPTkZJR1MiOworICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZhdWx0Q29uZmlnc1ZlYzsKKyAgY21FeHBhbmRMaXN0KGRlZmF1bHRDb25maWdzU3RyaW5nLCBkZWZhdWx0Q29uZmlnc1ZlYyk7CisgIGlmICghdGhpcy0+RGVmYXVsdEZpbGVDb25maWcuZW1wdHkoKSkgeworICAgIGF1dG8gZGVmYXVsdENvbmZpZ3MgPQorICAgICAgTGlzdFN1YnNldFdpdGhBbGwodGhpcy0+R2V0Q3Jvc3NDb25maWdzKHRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyb3NzQ29uZmlncywgZGVmYXVsdENvbmZpZ3NWZWMpOworICAgIGlmICghZGVmYXVsdENvbmZpZ3MpIHsKKyAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7CisgICAgICBtc2cgPDwgIkNNQUtFX0RFRkFVTFRfQ09ORklHUyBpcyBub3QgYSBzdWJzZXQgb2YgQ01BS0VfQ1JPU1NfQ09ORklHUyI7CisgICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuc3RyKCkpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB0aGlzLT5EZWZhdWx0Q29uZmlncyA9ICpkZWZhdWx0Q29uZmlnczsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbE5pbmphR2VuZXJhdG9yLmgKaW5kZXggMjQ0ZTlmZC4uNTY2OGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxOaW5qYUdlbmVyYXRvci5oCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9vcHRpb25hbD4KKwogI2luY2x1ZGUgImNtX2NvZGVjdnQuaHh4IgogCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCkBAIC0yMiw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5LmgiCiAjaW5jbHVkZSAiY21OaW5qYVR5cGVzLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogCiBjbGFzcyBjbUN1c3RvbUNvbW1hbmQ7CiBjbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKQEAgLTI5LDYgKzMyLDcgQEAKIGNsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CiBjbGFzcyBjbU1ha2VmaWxlOwogY2xhc3MgY21PdXRwdXRDb252ZXJ0ZXI7CitjbGFzcyBjbVN0YXRlOwogY2xhc3MgY21TdGF0ZURpcmVjdG9yeTsKIGNsYXNzIGNtYWtlOwogc3RydWN0IGNtRG9jdW1lbnRhdGlvbkVudHJ5OwpAQCAtNzMsMTAgKzc3LDEwIEBACiAgIHN0YXRpYyB2b2lkIFdyaXRlRGl2aWRlcihzdGQ6Om9zdHJlYW0mIG9zKTsKIAogICBzdGF0aWMgc3RkOjpzdHJpbmcgRW5jb2RlUnVsZU5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpOwotICBzdGF0aWMgc3RkOjpzdHJpbmcgRW5jb2RlTGl0ZXJhbChjb25zdCBzdGQ6OnN0cmluZyYgbGl0KTsKKyAgc3RkOjpzdHJpbmcgRW5jb2RlTGl0ZXJhbChjb25zdCBzdGQ6OnN0cmluZyYgbGl0KTsKICAgc3RkOjpzdHJpbmcgRW5jb2RlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCk7CiAKLSAgY21MaW5rTGluZUNvbXB1dGVyKiBDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgIGNtT3V0cHV0Q29udmVydGVyKiBvdXRwdXRDb252ZXJ0ZXIsCiAgICAgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgc3RhdGVEaXIpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xMTEsMTEgKzExNSwxMiBAQAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24sCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwb29sLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgcmVzdGF0LAotICAgIGNvbnN0IGNtTmluamFEZXBzJiBvdXRwdXRzLAorICAgIGNvbnN0IGNtTmluamFEZXBzJiBvdXRwdXRzLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgIGNvbnN0IGNtTmluamFEZXBzJiBleHBsaWNpdERlcHMgPSBjbU5pbmphRGVwcygpLAogICAgIGNvbnN0IGNtTmluamFEZXBzJiBvcmRlck9ubHlEZXBzID0gY21OaW5qYURlcHMoKSk7CiAKLSAgdm9pZCBXcml0ZU1hY09TWENvbnRlbnRCdWlsZChzdGQ6OnN0cmluZyBpbnB1dCwgc3RkOjpzdHJpbmcgb3V0cHV0KTsKKyAgdm9pZCBXcml0ZU1hY09TWENvbnRlbnRCdWlsZChzdGQ6OnN0cmluZyBpbnB1dCwgc3RkOjpzdHJpbmcgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIC8qKgogICAgKiBXcml0ZSBhIHJ1bGUgc3RhdGVtZW50IHRvIEBhIG9zLgpAQCAtMTUxLDEyICsxNTYsMTQgQEAKIHB1YmxpYzoKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcihjbWFrZSogY20pOwogCi0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbE5pbmphR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxOaW5qYUdlbmVyYXRvcj4oKSk7CiAgIH0KIAotICBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCiAgIHsKQEAgLTIwNCw3ICsyMTEsMjYgQEAKICAgfQogICBjb25zdCBjaGFyKiBHZXRDbGVhblRhcmdldE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiY2xlYW4iOyB9CiAKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXRCdWlsZEZpbGVTdHJlYW0oKSBjb25zdAorICBib29sIFN1cHBvcnRzQ3VzdG9tQ29tbWFuZERlcGZpbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgdmlydHVhbCBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldEltcGxGaWxlU3RyZWFtKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5nZXQoKTsKKyAgfQorCisgIHZpcnR1YWwgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXRDb25maWdGaWxlU3RyZWFtKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5nZXQoKTsKKyAgfQorCisgIHZpcnR1YWwgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXREZWZhdWx0RmlsZVN0cmVhbSgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gdGhpcy0+QnVpbGRGaWxlU3RyZWFtLmdldCgpOworICB9CisKKyAgdmlydHVhbCBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldENvbW1vbkZpbGVTdHJlYW0oKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5nZXQoKTsKICAgfQpAQCAtMjMxLDEyICsyNTcsMTcgQEAKICAgTWFwVG9OaW5qYVBhdGhJbXBsIE1hcFRvTmluamFQYXRoKCkgeyByZXR1cm4geyB0aGlzIH07IH0KIAogICAvLyAtLSBBZGRpdGlvbmFsIGNsZWFuIGZpbGVzCi0gIHZvaWQgQWRkQWRkaXRpb25hbENsZWFuRmlsZShzdGQ6OnN0cmluZyBmaWxlTmFtZSk7CisgIHZvaWQgQWRkQWRkaXRpb25hbENsZWFuRmlsZShzdGQ6OnN0cmluZyBmaWxlTmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIGNvbnN0IGNoYXIqIEdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSBjb25zdAogICB7CiAgICAgcmV0dXJuICJDTWFrZUZpbGVzL2NsZWFuLmFkZGl0aW9uYWwiOwogICB9CiAKKyAgc3RhdGljIGNvbnN0IGNoYXIqIEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldE5hbWUoKQorICB7CisgICAgcmV0dXJuICJDTWFrZUZpbGVzL2NtYWtlX2J5cHJvZHVjdHNfZm9yX2NsZWFuX3RhcmdldCI7CisgIH0KKwogICB2b2lkIEFkZENYWENvbXBpbGVDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlRmlsZSk7CiAKQEAgLTI2MCw5ICsyOTEsOSBAQAogCiAgIC8vLyBDYWxsZWQgd2hlbiB3ZSBoYXZlIHNlZW4gdGhlIGdpdmVuIGN1c3RvbSBjb21tYW5kLiAgUmV0dXJucyB0cnVlCiAgIC8vLyBpZiB3ZSBoYXMgc2VlbiBpdCBiZWZvcmUuCi0gIGJvb2wgU2VlbkN1c3RvbUNvbW1hbmQoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjYykKKyAgYm9vbCBTZWVuQ3VzdG9tQ29tbWFuZChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogICB7Ci0gICAgcmV0dXJuICF0aGlzLT5DdXN0b21Db21tYW5kcy5pbnNlcnQoY2MpLnNlY29uZDsKKyAgICByZXR1cm4gIXRoaXMtPkNvbmZpZ3NbY29uZmlnXS5DdXN0b21Db21tYW5kcy5pbnNlcnQoY2MpLnNlY29uZDsKICAgfQogCiAgIC8vLyBDYWxsZWQgd2hlbiB3ZSBoYXZlIHNlZW4gdGhlIGdpdmVuIGN1c3RvbSBjb21tYW5kIG91dHB1dC4KQEAgLTI4NCwyNSArMzE1LDQzIEBACiAgICAgQVNELmluc2VydChkZXBzLmJlZ2luKCksIGRlcHMuZW5kKCkpOwogICB9CiAKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIE9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCgKKyAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKwogICB2b2lkIEFwcGVuZFRhcmdldE91dHB1dHMoCiAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21OaW5qYURlcHMmIG91dHB1dHMsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKICAgICBjbU5pbmphVGFyZ2V0RGVwZW5kcyBkZXBlbmRzID0gRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CiAgIHZvaWQgQXBwZW5kVGFyZ2V0RGVwZW5kcygKICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKICAgICBjbU5pbmphVGFyZ2V0RGVwZW5kcyBkZXBlbmRzID0gRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CiAgIHZvaWQgQXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgb3V0cHV0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OaW5qYURlcHMmIG91dHB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIHZvaWQgQXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphT3V0cyYgb3V0cHV0cywgYm9vbCBvbWl0X3NlbGYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFPdXRzJiBvdXRwdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGJvb2wgb21pdF9zZWxmKTsKIAotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIEdldExvY2FsR2VuZXJhdG9ycygpIGNvbnN0CisgIHZvaWQgQXBwZW5kRGlyZWN0b3J5Rm9yQ29uZmlnKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWZmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkaXIpIG92ZXJyaWRlOworCisgIHZpcnR1YWwgdm9pZCBBcHBlbmROaW5qYUZpbGVBcmd1bWVudChHZW5lcmF0ZWRNYWtlQ29tbWFuZCYgLypjb21tYW5kKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykgY29uc3QKICAgewotICAgIHJldHVybiBMb2NhbEdlbmVyYXRvcnM7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgQWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cyhjbU5pbmphRGVwcyYgb3V0cHV0cykgY29uc3QKKyAgeworICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aChOSU5KQV9CVUlMRF9GSUxFKSk7CiAgIH0KIAogICBpbnQgR2V0UnVsZUNtZExlbmd0aChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgeyByZXR1cm4gUnVsZUNtZExlbmd0aFtuYW1lXTsgfQogCi0gIHZvaWQgQWRkVGFyZ2V0QWxpYXMoY29uc3Qgc3RkOjpzdHJpbmcmIGFsaWFzLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KTsKKyAgdm9pZCBBZGRUYXJnZXRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgYWxpYXMsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgdm9pZCBDb21wdXRlVGFyZ2V0T2JqZWN0RGlyZWN0b3J5KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTMxNiw2ICszNjUsMTIgQEAKICAgICByZXR1cm4gIjEuOSI7CiAgIH0KICAgc3RhdGljIHN0ZDo6c3RyaW5nIFJlcXVpcmVkTmluamFWZXJzaW9uRm9yRHluZGVwcygpIHsgcmV0dXJuICIxLjEwIjsgfQorICBzdGF0aWMgc3RkOjpzdHJpbmcgUmVxdWlyZWROaW5qYVZlcnNpb25Gb3JSZXN0YXRUb29sKCkgeyByZXR1cm4gIjEuMTAiOyB9CisgIHN0YXRpYyBzdGQ6OnN0cmluZyBSZXF1aXJlZE5pbmphVmVyc2lvbkZvclVuY29uZGl0aW9uYWxSZWNvbXBhY3RUb29sKCkKKyAgeworICAgIHJldHVybiAiMS4xMCI7CisgIH0KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIFJlcXVpcmVkTmluamFWZXJzaW9uRm9yQ2xlYW5EZWFkVG9vbCgpIHsgcmV0dXJuICIxLjEwIjsgfQogICBib29sIFN1cHBvcnRzQ29uc29sZVBvb2woKSBjb25zdDsKICAgYm9vbCBTdXBwb3J0c0ltcGxpY2l0T3V0cygpIGNvbnN0OwogICBib29sIFN1cHBvcnRzTWFuaWZlc3RSZXN0YXQoKSBjb25zdDsKQEAgLTMzNSwxMSArMzkwLDUyIEBACiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGlua2VkX3RhcmdldF9kaXJzLAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJnX2xhbmcpOwogCisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgQnVpbGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgYWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykgY29uc3QKKyAgeworICAgIHJldHVybiBhbGlhczsKKyAgfQorCisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgQ29uZmlnRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAorICB7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgY21OaW5qYURlcHMmIEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldCgpCisgIHsKKyAgICByZXR1cm4gdGhpcy0+Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0OworICB9CisKKyAgY21OaW5qYURlcHMmIEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQorICB7CisgICAgcmV0dXJuIHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5CeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQ7CisgIH0KKworICBib29sIEVuYWJsZUNyb3NzQ29uZmlnQnVpbGQoKSBjb25zdDsKKworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gR2V0Q3Jvc3NDb25maWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgIHZvaWQgR2VuZXJhdGUoKSBvdmVycmlkZTsKIAogICBib29sIENoZWNrQUxMT1dfRFVQTElDQVRFX0NVU1RPTV9UQVJHRVRTKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgIHZpcnR1YWwgYm9vbCBPcGVuQnVpbGRGaWxlU3RyZWFtcygpOworICB2aXJ0dWFsIHZvaWQgQ2xvc2VCdWlsZEZpbGVTdHJlYW1zKCk7CisKKyAgYm9vbCBPcGVuRmlsZVN0cmVhbShzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPiYgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKworICBzdGF0aWMgY206Om9wdGlvbmFsPHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPj4gTGlzdFN1YnNldFdpdGhBbGwoCisgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGwsIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgZGVmYXVsdHMsCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpdGVtcyk7CisKKyAgdmlydHVhbCBib29sIEluc3BlY3RDb25maWdUeXBlVmFyaWFibGVzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBDcm9zc0NvbmZpZ3M7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBEZWZhdWx0Q29uZmlnczsKKyAgc3RkOjpzdHJpbmcgRGVmYXVsdEZpbGVDb25maWc7CisKIHByaXZhdGU6CiAgIHN0ZDo6c3RyaW5nIEdldEVkaXRDYWNoZUNvbW1hbmQoKSBjb25zdCBvdmVycmlkZTsKICAgYm9vbCBGaW5kTWFrZVByb2dyYW0oY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwpAQCAtMzQ4LDEzICs0NDQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBtZikgY29uc3Qgb3ZlcnJpZGU7CiAgIGJvb2wgQ2hlY2tGb3J0cmFuKGNtTWFrZWZpbGUqIG1mKSBjb25zdDsKIAotICBib29sIE9wZW5CdWlsZEZpbGVTdHJlYW0oKTsKLSAgdm9pZCBDbG9zZUJ1aWxkRmlsZVN0cmVhbSgpOwotCiAgIHZvaWQgQ2xvc2VDb21waWxlQ29tbWFuZHNTdHJlYW0oKTsKIAogICBib29sIE9wZW5SdWxlc0ZpbGVTdHJlYW0oKTsKICAgdm9pZCBDbG9zZVJ1bGVzRmlsZVN0cmVhbSgpOworICB2b2lkIENsZWFuTWV0YURhdGEoKTsKIAogICAvLy8gV3JpdGUgdGhlIGNvbW1vbiBkaXNjbGFpbWVyIHRleHQgYXQgdGhlIHRvcCBvZiBlYWNoIGJ1aWxkIGZpbGUuCiAgIHZvaWQgV3JpdGVEaXNjbGFpbWVyKHN0ZDo6b3N0cmVhbSYgb3MpOwpAQCAtMzk1LDkgKzQ4OSw2IEBACiAKICAgYm9vbCBVc2luZ0dDQ09uV2luZG93cyA9IGZhbHNlOwogCi0gIC8vLyBUaGUgc2V0IG9mIGN1c3RvbSBjb21tYW5kcyB3ZSBoYXZlIHNlZW4uCi0gIHN0ZDo6c2V0PGNtQ3VzdG9tQ29tbWFuZCBjb25zdCo+IEN1c3RvbUNvbW1hbmRzOwotCiAgIC8vLyBUaGUgc2V0IG9mIGN1c3RvbSBjb21tYW5kIG91dHB1dHMgd2UgaGF2ZSBzZWVuLgogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gQ3VzdG9tQ29tbWFuZE91dHB1dHM7CiAKQEAgLTQxNiwxMCArNTA3LDE0IEBACiAgIC8vLyBUaGUgbWFwcGluZyBmcm9tIHNvdXJjZSBmaWxlIHRvIGFzc3VtZWQgZGVwZW5kZW5jaWVzLgogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+PiBBc3N1bWVkU291cmNlRGVwZW5kZW5jaWVzOwogCi0gIHVzaW5nIFRhcmdldEFsaWFzTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtR2VuZXJhdG9yVGFyZ2V0Kj47CisgIHN0cnVjdCBUYXJnZXRBbGlhcworICB7CisgICAgY21HZW5lcmF0b3JUYXJnZXQqIEdlbmVyYXRvclRhcmdldDsKKyAgICBzdGQ6OnN0cmluZyBDb25maWc7CisgIH07CisgIHVzaW5nIFRhcmdldEFsaWFzTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIFRhcmdldEFsaWFzPjsKICAgVGFyZ2V0QWxpYXNNYXAgVGFyZ2V0QWxpYXNlczsKLQotICBzdGQ6Om1hcDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCosIGNtTmluamFPdXRzPiBUYXJnZXREZXBlbmRzQ2xvc3VyZXM7CisgIFRhcmdldEFsaWFzTWFwIERlZmF1bHRUYXJnZXRBbGlhc2VzOwogCiAgIC8vLyB0aGUgbG9jYWwgY2FjaGUgZm9yIGNhbGxzIHRvIENvbnZlcnRUb05pbmphUGF0aAogICBtdXRhYmxlIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IENvbnZlcnRUb05pbmphUGF0aENhY2hlOwpAQCAtNDMxLDYgKzUyNiw5IEBACiAgIGJvb2wgTmluamFTdXBwb3J0c01hbmlmZXN0UmVzdGF0ID0gZmFsc2U7CiAgIGJvb2wgTmluamFTdXBwb3J0c011bHRpbGluZURlcGZpbGUgPSBmYWxzZTsKICAgYm9vbCBOaW5qYVN1cHBvcnRzRHluZGVwcyA9IGZhbHNlOworICBib29sIE5pbmphU3VwcG9ydHNSZXN0YXRUb29sID0gZmFsc2U7CisgIGJvb2wgTmluamFTdXBwb3J0c1VuY29uZGl0aW9uYWxSZWNvbXBhY3RUb29sID0gZmFsc2U7CisgIGJvb2wgTmluamFTdXBwb3J0c0NsZWFuRGVhZFRvb2wgPSBmYWxzZTsKIAogcHJpdmF0ZToKICAgdm9pZCBJbml0T3V0cHV0UGF0aFByZWZpeCgpOwpAQCAtNDM4LDcgKzUzNiwxMjUgQEAKICAgc3RkOjpzdHJpbmcgT3V0cHV0UGF0aFByZWZpeDsKICAgc3RkOjpzdHJpbmcgVGFyZ2V0QWxsOwogICBzdGQ6OnN0cmluZyBDTWFrZUNhY2hlRmlsZTsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEFkZGl0aW9uYWxDbGVhbkZpbGVzOworCisgIHN0cnVjdCBCeUNvbmZpZworICB7CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEFkZGl0aW9uYWxDbGVhbkZpbGVzOworCisgICAgLy8vIFRoZSBzZXQgb2YgY3VzdG9tIGNvbW1hbmRzIHdlIGhhdmUgc2Vlbi4KKyAgICBzdGQ6OnNldDxjbUN1c3RvbUNvbW1hbmQgY29uc3QqPiBDdXN0b21Db21tYW5kczsKKworICAgIHN0ZDo6bWFwPGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiwgY21OaW5qYU91dHM+IFRhcmdldERlcGVuZHNDbG9zdXJlczsKKworICAgIFRhcmdldEFsaWFzTWFwIFRhcmdldEFsaWFzZXM7CisKKyAgICBjbU5pbmphRGVwcyBCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQ7CisgIH07CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBCeUNvbmZpZz4gQ29uZmlnczsKKworICBjbU5pbmphRGVwcyBCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQ7Cit9OworCitjbGFzcyBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3IgOiBwdWJsaWMgY21HbG9iYWxOaW5qYUdlbmVyYXRvcgoreworcHVibGljOgorICAvLy8gVGhlIGRlZmF1bHQgbmFtZSBvZiBOaW5qYSdzIGNvbW1vbiBmaWxlLiBUeXBpY2FsbHk6IGNvbW1vbi5uaW5qYS4KKyAgc3RhdGljIGNvbnN0IGNoYXIqIE5JTkpBX0NPTU1PTl9GSUxFOworICAvLy8gVGhlIGRlZmF1bHQgZmlsZSBleHRlbnNpb24gdG8gdXNlIGZvciBwZXItY29uZmlnIE5pbmphIGZpbGVzLgorICBzdGF0aWMgY29uc3QgY2hhciogTklOSkFfRklMRV9FWFRFTlNJT047CisKKyAgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yKGNtYWtlKiBjbSk7CisgIGJvb2wgSXNNdWx0aUNvbmZpZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQorICB7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I+KCkpOworICB9CisKKyAgc3RhdGljIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpOworCisgIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgcmV0dXJuIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6R2V0QWN0dWFsTmFtZSgpOworICB9CisKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldEFjdHVhbE5hbWUoKSB7IHJldHVybiAiTmluamEgTXVsdGktQ29uZmlnIjsgfQorCisgIHN0ZDo6c3RyaW5nIEJ1aWxkQWxpYXMoY29uc3Qgc3RkOjpzdHJpbmcmIGFsaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICBpZiAoY29uZmlnLmVtcHR5KCkpIHsKKyAgICAgIHJldHVybiBhbGlhczsKKyAgICB9CisgICAgcmV0dXJuIGNtU3RyQ2F0KGFsaWFzLCAiOiIsIGNvbmZpZyk7CisgIH0KKworICBzdGQ6OnN0cmluZyBDb25maWdEaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmICghY29uZmlnLmVtcHR5KCkpIHsKKyAgICAgIHJldHVybiBjbVN0ckNhdCgnLycsIGNvbmZpZyk7CisgICAgfQorICAgIHJldHVybiAiIjsKKyAgfQorCisgIGNvbnN0IGNoYXIqIEdldENNYWtlQ0ZHSW50RGlyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIiR7Q09ORklHVVJBVElPTn0iOyB9CisKKyAgc3RkOjpzdHJpbmcgRXhwYW5kQ0ZHSW50RGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdCBvdmVycmlkZTsKKworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldEltcGxGaWxlU3RyZWFtKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gdGhpcy0+SW1wbEZpbGVTdHJlYW1zLmF0KGNvbmZpZykuZ2V0KCk7CisgIH0KKworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldENvbmZpZ0ZpbGVTdHJlYW0oCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIHJldHVybiB0aGlzLT5Db25maWdGaWxlU3RyZWFtcy5hdChjb25maWcpLmdldCgpOworICB9CisKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXREZWZhdWx0RmlsZVN0cmVhbSgpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gdGhpcy0+RGVmYXVsdEZpbGVTdHJlYW0uZ2V0KCk7CisgIH0KKworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldENvbW1vbkZpbGVTdHJlYW0oKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgcmV0dXJuIHRoaXMtPkNvbW1vbkZpbGVTdHJlYW0uZ2V0KCk7CisgIH0KKworICB2b2lkIEFwcGVuZE5pbmphRmlsZUFyZ3VtZW50KEdlbmVyYXRlZE1ha2VDb21tYW5kJiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0IG92ZXJyaWRlOworCisgIHN0YXRpYyBzdGQ6OnN0cmluZyBHZXROaW5qYUltcGxGaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldE5pbmphQ29uZmlnRmlsZW5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisKKyAgdm9pZCBBZGRSZWJ1aWxkTWFuaWZlc3RPdXRwdXRzKGNtTmluamFEZXBzJiBvdXRwdXRzKSBjb25zdCBvdmVycmlkZTsKKworICB2b2lkIEdldFF0QXV0b0dlbkNvbmZpZ3Moc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb25maWdzKSBjb25zdCBvdmVycmlkZTsKKworICBib29sIEluc3BlY3RDb25maWdUeXBlVmFyaWFibGVzKCkgb3ZlcnJpZGU7CisKKyAgc3RkOjpzdHJpbmcgR2V0RGVmYXVsdEJ1aWxkQ29uZmlnKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgYm9vbCBSZWFkQ2FjaGVFbnRyaWVzRm9yQnVpbGQoY29uc3QgY21TdGF0ZSYgc3RhdGUpIG92ZXJyaWRlOworCisgIGJvb2wgU3VwcG9ydHNEZWZhdWx0QnVpbGRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICBib29sIFN1cHBvcnRzQ3Jvc3NDb25maWdzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICBib29sIFN1cHBvcnRzRGVmYXVsdENvbmZpZ3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgYm9vbCBPcGVuQnVpbGRGaWxlU3RyZWFtcygpIG92ZXJyaWRlOworICB2b2lkIENsb3NlQnVpbGRGaWxlU3RyZWFtcygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4+CisgICAgSW1wbEZpbGVTdHJlYW1zOworICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4+CisgICAgQ29uZmlnRmlsZVN0cmVhbXM7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IENvbW1vbkZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IERlZmF1bHRGaWxlU3RyZWFtOwogfTsKIAogI2VuZGlmIC8vICEgY21HbG9iYWxOaW5qYUdlbmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CmluZGV4IDRjMmQ2OWYuLjU4Mjg3N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CkBAIC04LDggKzgsOSBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L21lbW9yeT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNlbHNlCiAgIHRoaXMtPlVzZUxpbmtTY3JpcHQgPSB0cnVlOwogI2VuZGlmCi0gIHRoaXMtPkNvbW1hbmREYXRhYmFzZSA9IG51bGxwdHI7CiAKICAgdGhpcy0+SW5jbHVkZURpcmVjdGl2ZSA9ICJpbmNsdWRlIjsKICAgdGhpcy0+RGVmaW5lV2luZG93c05VTEwgPSBmYWxzZTsKQEAgLTQ4LDYgKzQ4LDggQEAKICAgdGhpcy0+VW5peENEID0gdHJ1ZTsKIH0KIAorY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjp+Y21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKCkgPSBkZWZhdWx0OworCiB2b2lkIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6RW5hYmxlTGFuZ3VhZ2UoCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGFuZ3VhZ2VzLCBjbU1ha2VmaWxlKiBtZiwgYm9vbCBvcHRpb25hbCkKIHsKQEAgLTYxLDEwICs2MywxMSBAQAogfQogCiAvLyEgQ3JlYXRlIGEgbG9jYWwgZ2VuZXJhdG9yIGFwcHJvcHJpYXRlIHRvIHRoaXMgR2xvYmFsIEdlbmVyYXRvcgotY21Mb2NhbEdlbmVyYXRvciogY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKLSAgY21NYWtlZmlsZSogbWYpCitzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4KK2NtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpCiB7Ci0gIHJldHVybiBuZXcgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjModGhpcywgbWYpOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4odGhpcywgbWYpKTsKIH0KIAogdm9pZCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkdldERvY3VtZW50YXRpb24oCkBAIC0xNDQsMjEgKzE0NywyMCBAQAogICBmb3IgKGF1dG8mIHBtaSA6IHRoaXMtPlByb2dyZXNzTWFwKSB7CiAgICAgcG1pLnNlY29uZC5Xcml0ZVByb2dyZXNzVmFyaWFibGVzKHRvdGFsLCBjdXJyZW50KTsKICAgfQotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBzdGQ6OnN0cmluZyBtYXJrRmlsZU5hbWUgPQogICAgICAgY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzL3Byb2dyZXNzLm1hcmtzIik7CiAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG1hcmtGaWxlKG1hcmtGaWxlTmFtZSk7Ci0gICAgbWFya0ZpbGUgPDwgdGhpcy0+Q291bnRQcm9ncmVzc01hcmtzSW5BbGwobGcpIDw8ICJcbiI7CisgICAgbWFya0ZpbGUgPDwgdGhpcy0+Q291bnRQcm9ncmVzc01hcmtzSW5BbGwoKmxnKSA8PCAiXG4iOwogICB9CiAKICAgLy8gd3JpdGUgdGhlIG1haW4gbWFrZWZpbGUKICAgdGhpcy0+V3JpdGVNYWluTWFrZWZpbGUyKCk7CiAgIHRoaXMtPldyaXRlTWFpbkNNYWtlZmlsZSgpOwogCi0gIGlmICh0aGlzLT5Db21tYW5kRGF0YWJhc2UgIT0gbnVsbHB0cikgewotICAgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgc3RkOjplbmRsIDw8ICJdIjsKLSAgICBkZWxldGUgdGhpcy0+Q29tbWFuZERhdGFiYXNlOwotICAgIHRoaXMtPkNvbW1hbmREYXRhYmFzZSA9IG51bGxwdHI7CisgIGlmICh0aGlzLT5Db21tYW5kRGF0YWJhc2UpIHsKKyAgICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICJcbl0iOworICAgIHRoaXMtPkNvbW1hbmREYXRhYmFzZS5yZXNldCgpOwogICB9CiB9CiAKQEAgLTE2NiwyNiArMTY4LDI2IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VGaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgd29ya2luZ0RpcmVjdG9yeSwKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBpbGVDb21tYW5kKQogewotICBpZiAodGhpcy0+Q29tbWFuZERhdGFiYXNlID09IG51bGxwdHIpIHsKKyAgaWYgKCF0aGlzLT5Db21tYW5kRGF0YWJhc2UpIHsKICAgICBzdGQ6OnN0cmluZyBjb21tYW5kRGF0YWJhc2VOYW1lID0KICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpICsKICAgICAgICIvY29tcGlsZV9jb21tYW5kcy5qc29uIjsKLSAgICB0aGlzLT5Db21tYW5kRGF0YWJhc2UgPSBuZXcgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKGNvbW1hbmREYXRhYmFzZU5hbWUpOwotICAgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgIlsiIDw8IHN0ZDo6ZW5kbDsKKyAgICB0aGlzLT5Db21tYW5kRGF0YWJhc2UgPQorICAgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oY29tbWFuZERhdGFiYXNlTmFtZSk7CisgICAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAiW1xuIjsKICAgfSBlbHNlIHsKLSAgICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICIsIiA8PCBzdGQ6OmVuZGw7CisgICAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAiLFxuIjsKICAgfQotICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICJ7IiA8PCBzdGQ6OmVuZGwKKyAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAie1xuIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFIiKCAgImRpcmVjdG9yeSI6ICIpIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtR2xvYmFsR2VuZXJhdG9yOjpFc2NhcGVKU09OKHdvcmtpbmdEaXJlY3RvcnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiLCIgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFIiKCAgImNvbW1hbmQiOiAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjbUdsb2JhbEdlbmVyYXRvcjo6RXNjYXBlSlNPTihjb21waWxlQ29tbWFuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCIsIiA8PCBzdGQ6OmVuZGwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCIsXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUiIoICAiZmlsZSI6ICIpIgotICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtR2xvYmFsR2VuZXJhdG9yOjpFc2NhcGVKU09OKHNvdXJjZUZpbGUpIDw8ICJcIiIKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCAifSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgY21HbG9iYWxHZW5lcmF0b3I6OkVzY2FwZUpTT04oc291cmNlRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbn0iOwogfQogCiB2b2lkIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6V3JpdGVNYWluTWFrZWZpbGUyKCkKQEAgLTIwMywxMSArMjA1LDExIEBACiAgIH0KIAogICAvLyBnZXQgYSBsb2NhbCBnZW5lcmF0b3IgZm9yIHNvbWUgdXNlZnVsIG1ldGhvZHMKLSAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnID0KLSAgICBzdGF0aWNfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXSk7CisgIGF1dG8mIGxnID0gY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4oCisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKIAogICAvLyBXcml0ZSB0aGUgZG8gbm90IGVkaXQgaGVhZGVyLgotICBsZy0+V3JpdGVEaXNjbGFpbWVyKG1ha2VmaWxlU3RyZWFtKTsKKyAgbGcuV3JpdGVEaXNjbGFpbWVyKG1ha2VmaWxlU3RyZWFtKTsKIAogICAvLyBXcml0ZSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0YXJnZXQuICBUaGlzIG11c3QgYmUgdGhlIFZFUlkgZmlyc3QKICAgLy8gdGFyZ2V0IHNvIHRoYXQgbWFrZSB3aXRoIG5vIGFyZ3VtZW50cyB3aWxsIHJ1biBpdC4KQEAgLTIxNywxMCArMjE5LDEwIEBACiAgIGRlcGVuZHMuZW1wbGFjZV9iYWNrKCJhbGwiKTsKIAogICAvLyBXcml0ZSB0aGUgcnVsZS4KLSAgbGctPldyaXRlTWFrZVJ1bGUobWFrZWZpbGVTdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICJEZWZhdWx0IHRhcmdldCBleGVjdXRlZCB3aGVuIG5vIGFyZ3VtZW50cyBhcmUgIgotICAgICAgICAgICAgICAgICAgICAiZ2l2ZW4gdG8gbWFrZS4iLAotICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdF90YXJnZXQiLCBkZXBlbmRzLCBub19jb21tYW5kcywgdHJ1ZSk7CisgIGxnLldyaXRlTWFrZVJ1bGUobWFrZWZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIkRlZmF1bHQgdGFyZ2V0IGV4ZWN1dGVkIHdoZW4gbm8gYXJndW1lbnRzIGFyZSAiCisgICAgICAgICAgICAgICAgICAgImdpdmVuIHRvIG1ha2UuIiwKKyAgICAgICAgICAgICAgICAgICAiZGVmYXVsdF90YXJnZXQiLCBkZXBlbmRzLCBub19jb21tYW5kcywgdHJ1ZSk7CiAKICAgZGVwZW5kcy5jbGVhcigpOwogCkBAIC0yMzEsNyArMjMzLDcgQEAKICAgfQogCiAgIC8vIFdyaXRlIG91dCB0aGUgInNwZWNpYWwiIHN0dWZmCi0gIGxnLT5Xcml0ZVNwZWNpYWxUYXJnZXRzVG9wKG1ha2VmaWxlU3RyZWFtKTsKKyAgbGcuV3JpdGVTcGVjaWFsVGFyZ2V0c1RvcChtYWtlZmlsZVN0cmVhbSk7CiAKICAgLy8gV3JpdGUgdGhlIGRpcmVjdG9yeSBsZXZlbCBydWxlcy4KICAgZm9yIChhdXRvIGNvbnN0JiBpdCA6IHRoaXMtPkNvbXB1dGVEaXJlY3RvcnlUYXJnZXRzKCkpIHsKQEAgLTIzOSwxMyArMjQxLDE0IEBACiAgIH0KIAogICAvLyBXcml0ZSB0aGUgdGFyZ2V0IGNvbnZlbmllbmNlIHJ1bGVzCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIHRoaXMtPldyaXRlQ29udmVuaWVuY2VSdWxlczIoCi0gICAgICBtYWtlZmlsZVN0cmVhbSwgc3RhdGljX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqPihsb2NhbEdlbikpOworICAgICAgbWFrZWZpbGVTdHJlYW0sCisgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPihsb2NhbEdlbikpOwogICB9CiAKICAgLy8gV3JpdGUgc3BlY2lhbCBib3R0b20gdGFyZ2V0cwotICBsZy0+V3JpdGVTcGVjaWFsVGFyZ2V0c0JvdHRvbShtYWtlZmlsZVN0cmVhbSk7CisgIGxnLldyaXRlU3BlY2lhbFRhcmdldHNCb3R0b20obWFrZWZpbGVTdHJlYW0pOwogfQogCiB2b2lkIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6V3JpdGVNYWluQ01ha2VmaWxlKCkKQEAgLTI2OCwxMiArMjcxLDE0IEBACiAgIHN0ZDo6c3RyaW5nIG1ha2VmaWxlTmFtZSA9CiAgICAgY21TdHJDYXQodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCksICIvTWFrZWZpbGUiKTsKIAotICAvLyBnZXQgYSBsb2NhbCBnZW5lcmF0b3IgZm9yIHNvbWUgdXNlZnVsIG1ldGhvZHMKLSAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnID0KLSAgICBzdGF0aWNfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXSk7CisgIHsKKyAgICAvLyBnZXQgYSBsb2NhbCBnZW5lcmF0b3IgZm9yIHNvbWUgdXNlZnVsIG1ldGhvZHMKKyAgICBhdXRvJiBsZyA9IGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KAorICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKIAotICAvLyBXcml0ZSB0aGUgZG8gbm90IGVkaXQgaGVhZGVyLgotICBsZy0+V3JpdGVEaXNjbGFpbWVyKGNtYWtlZmlsZVN0cmVhbSk7CisgICAgLy8gV3JpdGUgdGhlIGRvIG5vdCBlZGl0IGhlYWRlci4KKyAgICBsZy5Xcml0ZURpc2NsYWltZXIoY21ha2VmaWxlU3RyZWFtKTsKKyAgfQogCiAgIC8vIFNhdmUgdGhlIGdlbmVyYXRvciBuYW1lCiAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiIyBUaGUgZ2VuZXJhdG9yIHVzZWQgaXM6XG4iCkBAIC0yODIsOSArMjg3LDkgQEAKIAogICAvLyBmb3IgZWFjaCBjbU1ha2VmaWxlIGdldCBpdHMgbGlzdCBvZiBkZXBlbmRlbmNpZXMKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxmaWxlczsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGZpbGVzIGNvbnRyaWJ1dGluZyB0byB0aGlzIGdlbmVyYXRpb24gc3RlcC4KLSAgICBjbUFwcGVuZChsZmlsZXMsIGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpLT5HZXRMaXN0RmlsZXMoKSk7CisgICAgY206OmFwcGVuZChsZmlsZXMsIGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpLT5HZXRMaXN0RmlsZXMoKSk7CiAgIH0KIAogICBjbWFrZSogY20gPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCk7CkBAIC0zMDAsNTkgKzMwNSw2MCBAQAogICBsZmlsZXMuZXJhc2UobmV3X2VuZCwgbGZpbGVzLmVuZCgpKTsKICNlbmRpZgogCi0gIC8vIHJlc2V0IGxnIHRvIHRoZSBmaXJzdCBtYWtlZmlsZQotICBsZyA9IHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4odGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKLQotICBzdGQ6OnN0cmluZyBjdXJyZW50QmluRGlyID0gbGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKLSAgLy8gU2F2ZSB0aGUgbGlzdCB0byB0aGUgY21ha2UgZmlsZS4KLSAgY21ha2VmaWxlU3RyZWFtCi0gICAgPDwgIiMgVGhlIHRvcCBsZXZlbCBNYWtlZmlsZSB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKLSAgICA8PCAic2V0KENNQUtFX01BS0VGSUxFX0RFUEVORFNcbiIKLSAgICA8PCAiICBcIkNNYWtlQ2FjaGUudHh0XCJcbiI7Ci0gIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGYgOiBsZmlsZXMpIHsKLSAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgXCIiCi0gICAgICAgICAgICAgICAgICAgIDw8IGxnLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBmKQotICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7Ci0gIH0KLSAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIClcblxuIjsKLQotICAvLyBCdWlsZCB0aGUgcGF0aCB0byB0aGUgY2FjaGUgY2hlY2sgZmlsZS4KLSAgc3RkOjpzdHJpbmcgY2hlY2sgPQotICAgIGNtU3RyQ2F0KHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLAotICAgICAgICAgICAgICIvQ01ha2VGaWxlcy9jbWFrZS5jaGVja19jYWNoZSIpOwotCi0gIC8vIFNldCB0aGUgY29ycmVzcG9uZGluZyBtYWtlZmlsZSBpbiB0aGUgY21ha2UgZmlsZS4KLSAgY21ha2VmaWxlU3RyZWFtIDw8ICIjIFRoZSBjb3JyZXNwb25kaW5nIG1ha2VmaWxlIGlzOlxuIgotICAgICAgICAgICAgICAgICAgPDwgInNldChDTUFLRV9NQUtFRklMRV9PVVRQVVRTXG4iCi0gICAgICAgICAgICAgICAgICA8PCAiICBcIiIKLSAgICAgICAgICAgICAgICAgIDw8IGxnLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VmaWxlTmFtZSkKLSAgICAgICAgICAgICAgICAgIDw8ICJcIlxuIgotICAgICAgICAgICAgICAgICAgPDwgIiAgXCIiCi0gICAgICAgICAgICAgICAgICA8PCBsZy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgY2hlY2spCi0gICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7Ci0gIGNtYWtlZmlsZVN0cmVhbSA8PCAiICApXG5cbiI7Ci0KLSAgY29uc3Qgc3RkOjpzdHJpbmcgYmluRGlyID0gbGctPkdldEJpbmFyeURpcmVjdG9yeSgpOwotCi0gIC8vIENNYWtlIG11c3QgcmVydW4gaWYgYSBieXByb2R1Y3QgaXMgbWlzc2luZy4KICAgewotICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiIyBCeXByb2R1Y3RzIG9mIENNYWtlIGdlbmVyYXRlIHN0ZXA6XG4iCi0gICAgICAgICAgICAgICAgICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfUFJPRFVDVFNcbiI7Ci0gICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3V0ZmlsZSA6IGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRPdXRwdXRGaWxlcygpKSB7CisgICAgLy8gcmVzZXQgbGcgdG8gdGhlIGZpcnN0IG1ha2VmaWxlCisgICAgY29uc3QgYXV0byYgbGcgPSBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPigKKyAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXSk7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgY3VycmVudEJpbkRpciA9IGxnLkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKKyAgICAvLyBTYXZlIHRoZSBsaXN0IHRvIHRoZSBjbWFrZSBmaWxlLgorICAgIGNtYWtlZmlsZVN0cmVhbQorICAgICAgPDwgIiMgVGhlIHRvcCBsZXZlbCBNYWtlZmlsZSB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyAgICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfREVQRU5EU1xuIgorICAgICAgPDwgIiAgXCJDTWFrZUNhY2hlLnR4dFwiXG4iOworICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGYgOiBsZmlsZXMpIHsKICAgICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICBcIiIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBsZy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCBvdXRmaWxlKQorICAgICAgICAgICAgICAgICAgICAgIDw8IGxnLk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGYpCiAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiXG4iOwogICAgIH0KKyAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgKVxuXG4iOwogCi0gICAgLy8gYWRkIGluIGFsbCB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGZpbGVzCisgICAgLy8gQnVpbGQgdGhlIHBhdGggdG8gdGhlIGNhY2hlIGNoZWNrIGZpbGUuCisgICAgc3RkOjpzdHJpbmcgY2hlY2sgPQorICAgICAgY21TdHJDYXQodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCksCisgICAgICAgICAgICAgICAiL0NNYWtlRmlsZXMvY21ha2UuY2hlY2tfY2FjaGUiKTsKKworICAgIC8vIFNldCB0aGUgY29ycmVzcG9uZGluZyBtYWtlZmlsZSBpbiB0aGUgY21ha2UgZmlsZS4KKyAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiMgVGhlIGNvcnJlc3BvbmRpbmcgbWFrZWZpbGUgaXM6XG4iCisgICAgICAgICAgICAgICAgICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfT1VUUFVUU1xuIgorICAgICAgICAgICAgICAgICAgICA8PCAiICBcIiIKKyAgICAgICAgICAgICAgICAgICAgPDwgbGcuTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZWZpbGVOYW1lKQorICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiIKKyAgICAgICAgICAgICAgICAgICAgPDwgIiAgXCIiCisgICAgICAgICAgICAgICAgICAgIDw8IGxnLk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGNoZWNrKQorICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7CisgICAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIClcblxuIjsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiaW5EaXIgPSBsZy5HZXRCaW5hcnlEaXJlY3RvcnkoKTsKKworICAgIC8vIENNYWtlIG11c3QgcmVydW4gaWYgYSBieXByb2R1Y3QgaXMgbWlzc2luZy4KKyAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiMgQnlwcm9kdWN0cyBvZiBDTWFrZSBnZW5lcmF0ZSBzdGVwOlxuIgorICAgICAgICAgICAgICAgICAgICA8PCAic2V0KENNQUtFX01BS0VGSUxFX1BST0RVQ1RTXG4iOworCisgICAgLy8gYWRkIGluIGFueSBieXByb2R1Y3RzIGFuZCBhbGwgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBmaWxlcwogICAgIHN0ZDo6c3RyaW5nIHRtcFN0cjsKLSAgICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgICBsZyA9IHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4obG9jYWxHZW4pOwotICAgICAgdG1wU3RyID0gY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRmaWxlIDoKKyAgICAgICAgICAgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCktPkdldE91dHB1dEZpbGVzKCkpIHsKKyAgICAgICAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIFwiIgorICAgICAgICAgICAgICAgICAgICAgICAgPDwgbGcuTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCBvdXRmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiXG4iOworICAgICAgfQorICAgICAgdG1wU3RyID0gY21TdHJDYXQobG9jYWxHZW4tPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICIvQ01ha2VGaWxlcy9DTWFrZURpcmVjdG9yeUluZm9ybWF0aW9uLmNtYWtlIik7CiAgICAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgXCIiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGJpbkRpciwgdG1wU3RyKQorICAgICAgICAgICAgICAgICAgICAgIDw8IGxvY2FsR2VuLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIHRtcFN0cikKICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7CiAgICAgfQogICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICApXG5cbiI7CkBAIC0zNjQsMjYgKzM3MCwyNCBAQAogCiB2b2lkIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6V3JpdGVNYWluQ01ha2VmaWxlTGFuZ3VhZ2VSdWxlcygKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbWFrZWZpbGVTdHJlYW0sCi0gIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgbEdlbmVyYXRvcnMpCisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPj4mIGxHZW5lcmF0b3JzKQogewotICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGc7Ci0KICAgLy8gbm93IGxpc3QgYWxsIHRoZSB0YXJnZXQgaW5mbyBmaWxlcwogICBjbWFrZWZpbGVTdHJlYW0gPDwgIiMgRGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBmb3IgYWxsIHRhcmdldHM6XG4iOwogICBjbWFrZWZpbGVTdHJlYW0gPDwgInNldChDTUFLRV9ERVBFTkRfSU5GT19GSUxFU1xuIjsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsR2VuZXJhdG9yIDogbEdlbmVyYXRvcnMpIHsKLSAgICBsZyA9IHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4obEdlbmVyYXRvcik7CisgIGZvciAoY29uc3QgYXV0byYgbEdlbmVyYXRvciA6IGxHZW5lcmF0b3JzKSB7CisgICAgY29uc3QgYXV0byYgbGcgPQorICAgICAgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4obEdlbmVyYXRvcik7CiAgICAgLy8gZm9yIGFsbCBvZiBvdXQgdGFyZ2V0cwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRndCA6IGxnLkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaWYgKCh0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHx8CiAgICAgICAgICAgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHx8CiAgICAgICAgICAgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHx8CiAgICAgICAgICAgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlkpIHx8CiAgICAgICAgICAgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHx8CiAgICAgICAgICAgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSkpIHsKLSAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gdGd0OwotICAgICAgICBzdGQ6OnN0cmluZyB0bmFtZSA9Ci0gICAgICAgICAgY21TdHJDYXQobGctPkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0KSwgIi9EZXBlbmRJbmZvLmNtYWtlIik7CisgICAgICAgIHN0ZDo6c3RyaW5nIHRuYW1lID0gY21TdHJDYXQobGcuR2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkodGd0LmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL0RlcGVuZEluZm8uY21ha2UiKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXModG5hbWUpOwogICAgICAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgXCIiIDw8IHRuYW1lIDw8ICJcIlxuIjsKICAgICAgIH0KQEAgLTQ4Nyw3ICs0OTEsNyBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZT4gbWZ1OwogICBjbU1ha2VmaWxlKiBtZjsKICAgaWYgKCF0aGlzLT5NYWtlZmlsZXMuZW1wdHkoKSkgewotICAgIG1mID0gdGhpcy0+TWFrZWZpbGVzWzBdOworICAgIG1mID0gdGhpcy0+TWFrZWZpbGVzWzBdLmdldCgpOwogICB9IGVsc2UgewogICAgIGNtU3RhdGVTbmFwc2hvdCBzbmFwc2hvdCA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEN1cnJlbnRTbmFwc2hvdCgpOwogICAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRTb3VyY2UoCkBAIC01NDUsMTEgKzU0OSwxMSBAQAogICB9CiAKICAgLy8gd3JpdGUgdGhlIHRhcmdldCBjb252ZW5pZW5jZSBydWxlcwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnID0KLSAgICAgIHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4obG9jYWxHZW4pOworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgYXV0byYgbGcgPQorICAgICAgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4obG9jYWxHZW4pOwogICAgIC8vIGZvciBlYWNoIHRhcmdldCBHZW5lcmF0ZSB0aGUgcnVsZSBmaWxlcyBmb3IgZWFjaCB0YXJnZXQuCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3RhcmdldCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0YXJnZXQgOiBsZy5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgcnVsZSB0d2ljZSAoZS5nLiB0d28gdGFyZ2V0cyB3aXRoIHRoZSBzYW1lCiAgICAgICAvLyBzaW1wbGUgbmFtZSkKICAgICAgIGludCB0eXBlID0gZ3RhcmdldC0+R2V0VHlwZSgpOwpAQCAtNTY0LDIzICs1NjgsMjMgQEAKICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgfHwKICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSkpIHsKICAgICAgICAgLy8gQWRkIGEgcnVsZSB0byBidWlsZCB0aGUgdGFyZ2V0IGJ5IG5hbWUuCi0gICAgICAgIGxnLT5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOworICAgICAgICBsZy5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOwogICAgICAgICBydWxlRmlsZVN0cmVhbSA8PCAiIyBUYXJnZXQgcnVsZXMgZm9yIHRhcmdldHMgbmFtZWQgIiA8PCBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcblxuIjsKIAogICAgICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KICAgICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgICAgc3RkOjpzdHJpbmcgdG1wID0gIkNNYWtlRmlsZXMvTWFrZWZpbGUyIjsKLSAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbCh0bXAsIG5hbWUpKTsKKyAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKGxnLkdldFJlY3Vyc2l2ZU1ha2VDYWxsKHRtcCwgbmFtZSkpOwogICAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAgICAgICAgIGlmIChyZWdlbmVyYXRlKSB7CiAgICAgICAgICAgZGVwZW5kcy5lbXBsYWNlX2JhY2soImNtYWtlX2NoZWNrX2J1aWxkX3N5c3RlbSIpOwogICAgICAgICB9Ci0gICAgICAgIGxnLT5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLCAiQnVpbGQgcnVsZSBmb3IgdGFyZ2V0LiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgICAgbGcuV3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkJ1aWxkIHJ1bGUgZm9yIHRhcmdldC4iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKIAogICAgICAgICAvLyBBZGQgYSBmYXN0IHJ1bGUgdG8gYnVpbGQgdGhlIHRhcmdldAotICAgICAgICBzdGQ6OnN0cmluZyBsb2NhbE5hbWUgPSBsZy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkoZ3RhcmdldCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGxvY2FsTmFtZSA9IGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpOwogICAgICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWU7CiAgICAgICAgIG1ha2VmaWxlTmFtZSA9IGNtU3RyQ2F0KGxvY2FsTmFtZSwgIi9idWlsZC5tYWtlIik7CiAgICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKQEAgLTU4OCwyMyArNTkyLDIzIEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIG1ha2VUYXJnZXROYW1lID0gY21TdHJDYXQobG9jYWxOYW1lLCAiL2J1aWxkIik7CiAgICAgICAgIGxvY2FsTmFtZSA9IGNtU3RyQ2F0KG5hbWUsICIvZmFzdCIpOwogICAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgICAgbGctPkdldFJlY3Vyc2l2ZU1ha2VDYWxsKG1ha2VmaWxlTmFtZSwgbWFrZVRhcmdldE5hbWUpKTsKLSAgICAgICAgbGctPldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sICJmYXN0IGJ1aWxkIHJ1bGUgZm9yIHRhcmdldC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUsIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgICAgICBsZy5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIG1ha2VUYXJnZXROYW1lKSk7CisgICAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sICJmYXN0IGJ1aWxkIHJ1bGUgZm9yIHRhcmdldC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogCiAgICAgICAgIC8vIEFkZCBhIGxvY2FsIG5hbWUgZm9yIHRoZSBydWxlIHRvIHJlbGluayB0aGUgdGFyZ2V0IGJlZm9yZQogICAgICAgICAvLyBpbnN0YWxsYXRpb24uCi0gICAgICAgIGlmIChndGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbChsZy0+R2V0Q29uZmlnTmFtZSgpKSkgewotICAgICAgICAgIG1ha2VUYXJnZXROYW1lID0KLSAgICAgICAgICAgIGNtU3RyQ2F0KGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KSwgIi9wcmVpbnN0YWxsIik7CisgICAgICAgIGlmIChndGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbChsZy5HZXRDb25maWdOYW1lKCkpKSB7CisgICAgICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdCgKKyAgICAgICAgICAgIGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpLCAiL3ByZWluc3RhbGwiKTsKICAgICAgICAgICBsb2NhbE5hbWUgPSBjbVN0ckNhdChuYW1lLCAiL3ByZWluc3RhbGwiKTsKICAgICAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAgICAgICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgICAgICBsZy0+R2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOwotICAgICAgICAgIGxnLT5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYW51YWwgcHJlLWluc3RhbGwgcmVsaW5rIHJ1bGUgZm9yIHRhcmdldC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOworICAgICAgICAgICAgbGcuR2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOworICAgICAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFudWFsIHByZS1pbnN0YWxsIHJlbGluayBydWxlIGZvciB0YXJnZXQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNjEyLDcgKzYxNiw3IEBACiB9CiAKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZUNvbnZlbmllbmNlUnVsZXMyKAotICBzdGQ6Om9zdHJlYW0mIHJ1bGVGaWxlU3RyZWFtLCBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGcpCisgIHN0ZDo6b3N0cmVhbSYgcnVsZUZpbGVTdHJlYW0sIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzJiBsZykKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb21tYW5kczsKQEAgLTYyNSw3ICs2MjksNyBAQAogICB9CiAKICAgLy8gZm9yIGVhY2ggdGFyZ2V0IEdlbmVyYXRlIHRoZSBydWxlIGZpbGVzIGZvciBlYWNoIHRhcmdldC4KLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3RhcmdldCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBndGFyZ2V0IDogbGcuR2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgaW50IHR5cGUgPSBndGFyZ2V0LT5HZXRUeXBlKCk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGd0YXJnZXQtPkdldE5hbWUoKTsKICAgICBpZiAoIW5hbWUuZW1wdHkoKSAmJgpAQCAtNjM3LDMxICs2NDEsMzEgQEAKICAgICAgICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSkpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWU7CiAgICAgICAvLyBBZGQgYSBydWxlIHRvIGJ1aWxkIHRoZSB0YXJnZXQgYnkgbmFtZS4KLSAgICAgIGxvY2FsTmFtZSA9IGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KTsKKyAgICAgIGxvY2FsTmFtZSA9IGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpOwogICAgICAgbWFrZWZpbGVOYW1lID0gY21TdHJDYXQobG9jYWxOYW1lLCAiL2J1aWxkLm1ha2UiKTsKIAotICAgICAgbGctPldyaXRlRGl2aWRlcihydWxlRmlsZVN0cmVhbSk7CisgICAgICBsZy5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOwogICAgICAgcnVsZUZpbGVTdHJlYW0gPDwgIiMgVGFyZ2V0IHJ1bGVzIGZvciB0YXJnZXQgIiA8PCBsb2NhbE5hbWUgPDwgIlxuXG4iOwogCiAgICAgICBjb21tYW5kcy5jbGVhcigpOwogICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdChsb2NhbE5hbWUsICIvZGVwZW5kIik7CiAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgIGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIG1ha2VUYXJnZXROYW1lKSk7CisgICAgICAgIGxnLkdldFJlY3Vyc2l2ZU1ha2VDYWxsKG1ha2VmaWxlTmFtZSwgbWFrZVRhcmdldE5hbWUpKTsKIAogICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdChsb2NhbE5hbWUsICIvYnVpbGQiKTsKICAgICAgIGNvbW1hbmRzLnB1c2hfYmFjaygKLSAgICAgICAgbGctPkdldFJlY3Vyc2l2ZU1ha2VDYWxsKG1ha2VmaWxlTmFtZSwgbWFrZVRhcmdldE5hbWUpKTsKKyAgICAgICAgbGcuR2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOwogCiAgICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KICAgICAgIGxvY2FsTmFtZSArPSAiL2FsbCI7CiAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAKICAgICAgIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpFY2hvUHJvZ3Jlc3MgcHJvZ3Jlc3M7Ci0gICAgICBwcm9ncmVzcy5EaXIgPSBjbVN0ckNhdChsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksICIvQ01ha2VGaWxlcyIpOworICAgICAgcHJvZ3Jlc3MuRGlyID0gY21TdHJDYXQobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCksICIvQ01ha2VGaWxlcyIpOwogICAgICAgewogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ3Jlc3NBcmc7CiAgICAgICAgIGNvbnN0IGNoYXIqIHNlcCA9ICIiOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgcHJvZ0ZpbGUgOiB0aGlzLT5Qcm9ncmVzc01hcFtndGFyZ2V0XS5NYXJrcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgcHJvZ0ZpbGUgOiB0aGlzLT5Qcm9ncmVzc01hcFtndGFyZ2V0LmdldCgpXS5NYXJrcykgewogICAgICAgICAgIHByb2dyZXNzQXJnIDw8IHNlcCA8PCBwcm9nRmlsZTsKICAgICAgICAgICBzZXAgPSAiLCI7CiAgICAgICAgIH0KQEAgLTY2OSwyMCArNjczLDIwIEBACiAgICAgICB9CiAKICAgICAgIGJvb2wgdGFyZ2V0TWVzc2FnZXMgPSB0cnVlOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIHRndE1zZyA9CisgICAgICBpZiAoY21Qcm9wIHRndE1zZyA9CiAgICAgICAgICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAogICAgICAgICAgICAgICAiVEFSR0VUX01FU1NBR0VTIikpIHsKLSAgICAgICAgdGFyZ2V0TWVzc2FnZXMgPSBjbUlzT24odGd0TXNnKTsKKyAgICAgICAgdGFyZ2V0TWVzc2FnZXMgPSBjbUlzT24oKnRndE1zZyk7CiAgICAgICB9CiAKICAgICAgIGlmICh0YXJnZXRNZXNzYWdlcykgewotICAgICAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgIkJ1aWx0IHRhcmdldCAiICsgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVjaG9Ob3JtYWwsICZwcm9ncmVzcyk7CisgICAgICAgIGxnLkFwcGVuZEVjaG8oY29tbWFuZHMsICJCdWlsdCB0YXJnZXQgIiArIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVjaG9Ob3JtYWwsICZwcm9ncmVzcyk7CiAgICAgICB9CiAKLSAgICAgIHRoaXMtPkFwcGVuZEdsb2JhbFRhcmdldERlcGVuZHMoZGVwZW5kcywgZ3RhcmdldCk7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkFsbCBCdWlsZCBydWxlIGZvciB0YXJnZXQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOworICAgICAgdGhpcy0+QXBwZW5kR2xvYmFsVGFyZ2V0RGVwZW5kcyhkZXBlbmRzLCBndGFyZ2V0LmdldCgpKTsKKyAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sICJBbGwgQnVpbGQgcnVsZSBmb3IgdGFyZ2V0LiIsIGxvY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogCiAgICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CkBAIC02OTIsMjIgKzY5NiwyMSBAQAogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOwogICAgICAgICAvLyAjIGluIHRhcmdldAotICAgICAgICBwcm9nQ21kIDw8IGxnLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzcy5EaXIpLAotICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgIHByb2dDbWQgPDwgbGcuQ29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzLkRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICAgICAgLy8KICAgICAgICAgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiBlbWl0dGVkOwotICAgICAgICBwcm9nQ21kIDw8ICIgIiA8PCB0aGlzLT5Db3VudFByb2dyZXNzTWFya3NJblRhcmdldChndGFyZ2V0LCBlbWl0dGVkKTsKKyAgICAgICAgcHJvZ0NtZCA8PCAiICIKKyAgICAgICAgICAgICAgICA8PCB0aGlzLT5Db3VudFByb2dyZXNzTWFya3NJblRhcmdldChndGFyZ2V0LmdldCgpLCBlbWl0dGVkKTsKICAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgdG1wID0gIkNNYWtlRmlsZXMvTWFrZWZpbGUyIjsKLSAgICAgIGNvbW1hbmRzLnB1c2hfYmFjayhsZy0+R2V0UmVjdXJzaXZlTWFrZUNhbGwodG1wLCBsb2NhbE5hbWUpKTsKKyAgICAgIGNvbW1hbmRzLnB1c2hfYmFjayhsZy5HZXRSZWN1cnNpdmVNYWtlQ2FsbCh0bXAsIGxvY2FsTmFtZSkpOwogICAgICAgewogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOyAvLyAjIDAKLSAgICAgICAgcHJvZ0NtZCA8PCBsZy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3MuRGlyKSwKLSAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICBwcm9nQ21kIDw8IGxnLkNvbnZlcnRUb091dHB1dEZvcm1hdChwcm9ncmVzcy5EaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgICAgIHByb2dDbWQgPDwgIiAwIjsKICAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICAgICAgfQpAQCAtNzE1LDM5ICs3MTgsMzkgQEAKICAgICAgIGlmIChyZWdlbmVyYXRlKSB7CiAgICAgICAgIGRlcGVuZHMuZW1wbGFjZV9iYWNrKCJjbWFrZV9jaGVja19idWlsZF9zeXN0ZW0iKTsKICAgICAgIH0KLSAgICAgIGxvY2FsTmFtZSA9IGNtU3RyQ2F0KGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KSwgIi9ydWxlIik7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBydWxlIGZvciBzdWJkaXIgaW52b2NhdGlvbiBmb3IgdGFyZ2V0LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUsIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgIGxvY2FsTmFtZSA9CisgICAgICAgIGNtU3RyQ2F0KGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpLCAiL3J1bGUiKTsKKyAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBydWxlIGZvciBzdWJkaXIgaW52b2NhdGlvbiBmb3IgdGFyZ2V0LiIsCisgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogCiAgICAgICAvLyBBZGQgYSB0YXJnZXQgd2l0aCB0aGUgY2Fub25pY2FsIG5hbWUgKG5vIHByZWZpeCwgc3VmZml4IG9yIHBhdGgpLgogICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgIGRlcGVuZHMucHVzaF9iYWNrKGxvY2FsTmFtZSk7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkNvbnZlbmllbmNlIG5hbWUgZm9yIHRhcmdldC4iLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOworICAgICAgbGcuV3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkNvbnZlbmllbmNlIG5hbWUgZm9yIHRhcmdldC4iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLCBjb21tYW5kcywgdHJ1ZSk7CiAKICAgICAgIC8vIEFkZCBydWxlcyB0byBwcmVwYXJlIHRoZSB0YXJnZXQgZm9yIGluc3RhbGxhdGlvbi4KLSAgICAgIGlmIChndGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbChsZy0+R2V0Q29uZmlnTmFtZSgpKSkgewotICAgICAgICBsb2NhbE5hbWUgPQotICAgICAgICAgIGNtU3RyQ2F0KGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KSwgIi9wcmVpbnN0YWxsIik7CisgICAgICBpZiAoZ3RhcmdldC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwobGcuR2V0Q29uZmlnTmFtZSgpKSkgeworICAgICAgICBsb2NhbE5hbWUgPSBjbVN0ckNhdChsZy5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0LmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9wcmVpbnN0YWxsIik7CiAgICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgICAgY29tbWFuZHMuY2xlYXIoKTsKLSAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIGxvY2FsTmFtZSkpOwotICAgICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZS1pbnN0YWxsIHJlbGluayBydWxlIGZvciB0YXJnZXQuIiwgbG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLCBjb21tYW5kcywgdHJ1ZSk7CisgICAgICAgIGNvbW1hbmRzLnB1c2hfYmFjayhsZy5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIGxvY2FsTmFtZSkpOworICAgICAgICBsZy5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLCAiUHJlLWluc3RhbGwgcmVsaW5rIHJ1bGUgZm9yIHRhcmdldC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogICAgICAgfQogCiAgICAgICAvLyBhZGQgdGhlIGNsZWFuIHJ1bGUKLSAgICAgIGxvY2FsTmFtZSA9IGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KTsKKyAgICAgIGxvY2FsTmFtZSA9IGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpOwogICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdChsb2NhbE5hbWUsICIvY2xlYW4iKTsKICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CiAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgIGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIG1ha2VUYXJnZXROYW1lKSk7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgImNsZWFuIHJ1bGUgZm9yIHRhcmdldC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVRhcmdldE5hbWUsIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgICAgbGcuR2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOworICAgICAgbGcuV3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgImNsZWFuIHJ1bGUgZm9yIHRhcmdldC4iLAorICAgICAgICAgICAgICAgICAgICAgICBtYWtlVGFyZ2V0TmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICB9CiAgIH0KQEAgLTc1OSw4ICs3NjIsOCBAQAogewogICB0aGlzLT5EaXJlY3RvcnlUYXJnZXRzTWFwLmNsZWFyKCk7CiAgIC8vIExvb3Agb3ZlciBhbGwgdGFyZ2V0cyBpbiBhbGwgbG9jYWwgZ2VuZXJhdG9ycy4KLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIGNtTG9jYWxHZW5lcmF0b3IqIHRsZyA9IGd0LT5HZXRMb2NhbEdlbmVyYXRvcigpOwogCiAgICAgICBpZiAoZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZIHx8CkBAIC03NzgsMTIgKzc4MSwxMyBAQAogICAgICAgICAvLyBUaGlzIGxvY2FsIGdlbmVyYXRvciBpbmNsdWRlcyB0aGUgdGFyZ2V0LgogICAgICAgICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+JiB0YXJnZXRTZXQgPQogICAgICAgICAgIHRoaXMtPkRpcmVjdG9yeVRhcmdldHNNYXBbY3NucF07Ci0gICAgICAgIHRhcmdldFNldC5pbnNlcnQoZ3QpOworICAgICAgICB0YXJnZXRTZXQuaW5zZXJ0KGd0LmdldCgpKTsKIAogICAgICAgICAvLyBBZGQgZGVwZW5kZW5jaWVzIG9mIHRoZSBpbmNsdWRlZCB0YXJnZXQuICBBbiBleGNsdWRlZAogICAgICAgICAvLyB0YXJnZXQgbWF5IHN0aWxsIGJlIGluY2x1ZGVkIGlmIGl0IGlzIGEgZGVwZW5kZW5jeSBvZiBhCiAgICAgICAgIC8vIG5vbi1leGNsdWRlZCB0YXJnZXQuCi0gICAgICAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIHRndGRlcCA6IHRoaXMtPkdldFRhcmdldERpcmVjdERlcGVuZHMoZ3QpKSB7CisgICAgICAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIHRndGRlcCA6CisgICAgICAgICAgICAgdGhpcy0+R2V0VGFyZ2V0RGlyZWN0RGVwZW5kcyhndC5nZXQoKSkpIHsKICAgICAgICAgICB0YXJnZXRTZXQuaW5zZXJ0KHRndGRlcCk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTgwOCwxMiArODEyLDEyIEBACiB9CiAKIHNpemVfdCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkNvdW50UHJvZ3Jlc3NNYXJrc0luQWxsKAotICBjbUxvY2FsR2VuZXJhdG9yKiBsZykKKyAgY29uc3QgY21Mb2NhbEdlbmVyYXRvciYgbGcpCiB7CiAgIHNpemVfdCBjb3VudCA9IDA7CiAgIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4gZW1pdHRlZDsKICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0IDoKLSAgICAgICB0aGlzLT5EaXJlY3RvcnlUYXJnZXRzTWFwW2xnLT5HZXRTdGF0ZVNuYXBzaG90KCldKSB7CisgICAgICAgdGhpcy0+RGlyZWN0b3J5VGFyZ2V0c01hcFtsZy5HZXRTdGF0ZVNuYXBzaG90KCldKSB7CiAgICAgY291bnQgKz0gdGhpcy0+Q291bnRQcm9ncmVzc01hcmtzSW5UYXJnZXQodGFyZ2V0LCBlbWl0dGVkKTsKICAgfQogICByZXR1cm4gY291bnQ7CkBAIC04ODUsMzMgKzg4OSw0OCBAQAogCiAgIC8vIEtlZXAgdHJhY2sgb2YgdGFyZ2V0cyBhbHJlYWR5IGxpc3RlZC4KICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGVtaXR0ZWRUYXJnZXRzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gdXRpbGl0eV90YXJnZXRzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZ2xvYmFsc190YXJnZXRzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gcHJvamVjdF90YXJnZXRzOwogCiAgIC8vIGZvciBlYWNoIGxvY2FsIGdlbmVyYXRvcgotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnMiA9Ci0gICAgICBzdGF0aWNfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KGxvY2FsR2VuKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICAgIGNvbnN0IGF1dG8mIGxnMiA9CisgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPihsb2NhbEdlbik7CiAgICAgLy8gZm9yIHRoZSBwYXNzZWQgaW4gbWFrZWZpbGUgb3IgaWYgdGhpcyBpcyB0aGUgdG9wIE1ha2VmaWxlIHdyaXB0ZSBvdXQKICAgICAvLyB0aGUgdGFyZ2V0cwotICAgIGlmIChsZzIgPT0gbGcgfHwgbGctPklzUm9vdE1ha2VmaWxlKCkpIHsKKyAgICBpZiAoJmxnMiA9PSBsZyB8fCBsZy0+SXNSb290TWFrZWZpbGUoKSkgewogICAgICAgLy8gZm9yIGVhY2ggdGFyZ2V0IEdlbmVyYXRlIHRoZSBydWxlIGZpbGVzIGZvciBlYWNoIHRhcmdldC4KLSAgICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGxnMi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IGxnMi5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgICAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUgPSB0YXJnZXQtPkdldFR5cGUoKTsKICAgICAgICAgaWYgKCh0eXBlID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgfHwKICAgICAgICAgICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHx8CiAgICAgICAgICAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB8fAogICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgfHwKLSAgICAgICAgICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHx8Ci0gICAgICAgICAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHx8Ci0gICAgICAgICAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKLSAgICAgICAgICBpZiAoZW1pdHRlZFRhcmdldHMuaW5zZXJ0KG5hbWUpLnNlY29uZCkgewotICAgICAgICAgICAgcGF0aCA9IGNtU3RyQ2F0KCIuLi4gIiwgbmFtZSk7Ci0gICAgICAgICAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgcGF0aCk7Ci0gICAgICAgICAgfQorICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkpIHsKKyAgICAgICAgICBwcm9qZWN0X3RhcmdldHMuaW5zZXJ0KHRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgICAgICAgIGdsb2JhbHNfdGFyZ2V0cy5pbnNlcnQodGFyZ2V0LT5HZXROYW1lKCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSB7CisgICAgICAgICAgdXRpbGl0eV90YXJnZXRzLmluc2VydCh0YXJnZXQtPkdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KKworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lIDogZ2xvYmFsc190YXJnZXRzKSB7CisgICAgcGF0aCA9IGNtU3RyQ2F0KCIuLi4gIiwgbmFtZSk7CisgICAgbGctPkFwcGVuZEVjaG8oY29tbWFuZHMsIHBhdGgpOworICB9CisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiB1dGlsaXR5X3RhcmdldHMpIHsKKyAgICBwYXRoID0gY21TdHJDYXQoIi4uLiAiLCBuYW1lKTsKKyAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgcGF0aCk7CisgIH0KKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IHByb2plY3RfdGFyZ2V0cykgeworICAgIHBhdGggPSBjbVN0ckNhdCgiLi4uICIsIG5hbWUpOworICAgIGxnLT5BcHBlbmRFY2hvKGNvbW1hbmRzLCBwYXRoKTsKKyAgfQorCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG8gOiBsZy0+R2V0TG9jYWxIZWxwKCkpIHsKICAgICBwYXRoID0gY21TdHJDYXQoIi4uLiAiLCBvKTsKICAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgcGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmggYi9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKaW5kZXggNzlkYjMwZS4uMTliMmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtNjEsMTIgKzYyLDE5IEBACiB7CiBwdWJsaWM6CiAgIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyhjbWFrZSogY20pOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCkKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQogICB7Ci0gICAgcmV0dXJuIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Ci0gICAgICBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KCk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KCkpOwogICB9CiAKKyAgfmNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMygpIG92ZXJyaWRlOworCisgIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyhjb25zdCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMmKSA9CisgICAgZGVsZXRlOworICBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMmIG9wZXJhdG9yPSgKKyAgICBjb25zdCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMmKSA9IGRlbGV0ZTsKKwogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgogICBzdGQ6OnN0cmluZyBHZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGUKICAgewpAQCAtODksNyArOTcsOCBAQAogICAvKiogR2V0IHRoZSBkb2N1bWVudGF0aW9uIGVudHJ5IGZvciB0aGlzIGdlbmVyYXRvci4gICovCiAgIHN0YXRpYyB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KTsKIAotICBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgLyoqCiAgICAqIFRyeSB0byBkZXRlcm1pbmUgc3lzdGVtIGluZm9ybWF0aW9uIHN1Y2ggYXMgc2hhcmVkIGxpYnJhcnkKQEAgLTEwNyw4ICsxMTYsOSBAQAogICAgKi8KICAgdm9pZCBHZW5lcmF0ZSgpIG92ZXJyaWRlOwogCi0gIHZvaWQgV3JpdGVNYWluQ01ha2VmaWxlTGFuZ3VhZ2VSdWxlcyhjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtYWtlZmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYpOworICB2b2lkIFdyaXRlTWFpbkNNYWtlZmlsZUxhbmd1YWdlUnVsZXMoCisgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbWFrZWZpbGVTdHJlYW0sCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+PiYpOwogCiAgIC8vIHdyaXRlIG91dCB0aGUgaGVscCBydWxlIGxpc3RpbmcgdGhlIHZhbGlkIHRhcmdldHMKICAgdm9pZCBXcml0ZUhlbHBSdWxlKHN0ZDo6b3N0cmVhbSYgcnVsZUZpbGVTdHJlYW0sCkBAIC0xNjEsNyArMTcxLDcgQEAKICAgdm9pZCBXcml0ZU1haW5DTWFrZWZpbGUoKTsKIAogICB2b2lkIFdyaXRlQ29udmVuaWVuY2VSdWxlczIoc3RkOjpvc3RyZWFtJiBydWxlRmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyYpOwogCiAgIHZvaWQgV3JpdGVEaXJlY3RvcnlSdWxlMihzdGQ6Om9zdHJlYW0mIHJ1bGVGaWxlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5VGFyZ2V0IGNvbnN0JiBkdCwgY29uc3QgY2hhciogcGFzcywKQEAgLTIyNyw5ICsyMzcsOSBAQAogICBzaXplX3QgQ291bnRQcm9ncmVzc01hcmtzSW5UYXJnZXQoCiAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+JiBlbWl0dGVkKTsKLSAgc2l6ZV90IENvdW50UHJvZ3Jlc3NNYXJrc0luQWxsKGNtTG9jYWxHZW5lcmF0b3IqIGxnKTsKKyAgc2l6ZV90IENvdW50UHJvZ3Jlc3NNYXJrc0luQWxsKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIENvbW1hbmREYXRhYmFzZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4gQ29tbWFuZERhdGFiYXNlOwogCiBwcml2YXRlOgogICBjb25zdCBjaGFyKiBHZXRCdWlsZElnbm9yZUVycm9yc0ZsYWcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiLWkiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHgKaW5kZXggZjY0NzJhYi4uNTE2NmRlNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmN4eApAQCAtNCw2ICs0LDggQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL0dsb2IuaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKQEAgLTE3LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtVmVyc2lvbi5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvU2xuRGF0YS5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmgiCkBAIC0yNiw2ICsyOSwxNiBAQAogc3RhdGljIGNvbnN0IGNoYXIgdnMxMGdlbmVyYXRvck5hbWVbXSA9ICJWaXN1YWwgU3R1ZGlvIDEwIDIwMTAiOwogc3RhdGljIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUlERUZsYWdUYWJsZT4+IGxvYWRlZEZsYWdKc29uRmlsZXM7CiAKK3N0YXRpYyB2b2lkIENvbnZlcnRUb1dpbmRvd3NTbGFzaGVzKHN0ZDo6c3RyaW5nJiBzKQoreworICAvLyBmaXJzdCBjb252ZXJ0IGFsbCBvZiB0aGUgc2xhc2hlcworICBmb3IgKGF1dG8mIGNoIDogcykgeworICAgIGlmIChjaCA9PSAnLycpIHsKKyAgICAgIGNoID0gJ1xcJzsKKyAgICB9CisgIH0KK30KKwogLy8gTWFwIGdlbmVyYXRvciBuYW1lIHdpdGhvdXQgeWVhciB0byBuYW1lIHdpdGggeWVhci4KIHN0YXRpYyBjb25zdCBjaGFyKiBjbVZTMTBHZW5OYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBzdGQ6OnN0cmluZyYgZ2VuTmFtZSkKIHsKQEAgLTQ1LDI3ICs1OCwzMCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBzdGQ6OnN0cmluZyBnZW5OYW1lOwogICAgIGNvbnN0IGNoYXIqIHAgPSBjbVZTMTBHZW5OYW1lKG5hbWUsIGdlbk5hbWUpOwogICAgIGlmICghcCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoISpwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9CiAgICAgaWYgKCpwKysgIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIldpbjY0IikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJ4NjQiKSk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIklBNjQiKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJJdGFuaXVtIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJJdGFuaXVtIikpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAKICAgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkgY29uc3Qgb3ZlcnJpZGUKQEAgLTEwNSw5ICsxMjEsMTAgQEAKICAgc3RkOjpzdHJpbmcgR2V0RGVmYXVsdFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXaW4zMiI7IH0KIH07CiAKLWNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCitzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PgorY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCiB7Ci0gIHJldHVybiBuZXcgRmFjdG9yeTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KG5ldyBGYWN0b3J5KTsKIH0KIAogY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6Y21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcigKQEAgLTE5Myw3ICsyMTAsNyBAQAogfQogCiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OlNldEdlbmVyYXRvclRvb2xzZXQoCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgY21NYWtlZmlsZSogbWYpCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgYm9vbCBidWlsZCwgY21NYWtlZmlsZSogbWYpCiB7CiAgIGlmICh0aGlzLT5TeXN0ZW1Jc1dpbmRvd3NDRSAmJiB0cy5lbXB0eSgpICYmCiAgICAgICB0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0LmVtcHR5KCkpIHsKQEAgLTIwOCw3ICsyMjUsMTEgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBpZiAoIXRoaXMtPkZpbmRWQ1RhcmdldHNQYXRoKG1mKSkgeworICBpZiAoYnVpbGQpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlmICh0aGlzLT5DdXN0b21WQ1RhcmdldHNQYXRoLmVtcHR5KCkgJiYgIXRoaXMtPkZpbmRWQ1RhcmdldHNQYXRoKG1mKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0yOTMsNyArMzE0LDcgQEAKICAgICAgIHZlcnNpb24uY2xlYXIoKTsKICAgICB9CiAKLSAgICBpZiAodmVyc2lvbi5maW5kKHRoaXMtPkdldFBsYXRmb3JtVG9vbHNldFN0cmluZygpKSAhPSAwKSB7CisgICAgaWYgKCFjbUhhc1ByZWZpeCh2ZXJzaW9uLCB0aGlzLT5HZXRQbGF0Zm9ybVRvb2xzZXRTdHJpbmcoKSkpIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwogICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgICAgZSA8PApAQCAtMzU1LDYgKzM3NiwxMSBAQAogICBpZiAoY29uc3QgY2hhciogY3VkYURpciA9IHRoaXMtPkdldFBsYXRmb3JtVG9vbHNldEN1ZGFDdXN0b21EaXIoKSkgewogICAgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREFfQ1VTVE9NX0RJUiIsIGN1ZGFEaXIpOwogICB9CisgIGlmIChjb25zdCBjaGFyKiB2Y1RhcmdldHNEaXIgPSB0aGlzLT5HZXRDdXN0b21WQ1RhcmdldHNQYXRoKCkpIHsKKyAgICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WQ1RBUkdFVFNfQ1VTVE9NX0RJUiIsCisgICAgICAgICAgICAgICAgICAgICAgdmNUYXJnZXRzRGlyKTsKKyAgfQorCiAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NDgsNiArNDc0LDExIEBACiAgICAgdGhpcy0+R2VuZXJhdG9yVG9vbHNldFZlcnNpb24gPSB2YWx1ZTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQorICBpZiAoa2V5ID09ICJWQ1RhcmdldHNQYXRoIikgeworICAgIHRoaXMtPkN1c3RvbVZDVGFyZ2V0c1BhdGggPSB2YWx1ZTsKKyAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2hlcyh0aGlzLT5DdXN0b21WQ1RhcmdldHNQYXRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTU1NiwxMCArNTg3LDExIEBACiB9CiAKIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi1jbUxvY2FsR2VuZXJhdG9yKiBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKLSAgY21NYWtlZmlsZSogbWYpCitzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4KK2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQogewotICByZXR1cm4gbmV3IGNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcih0aGlzLCBtZik7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4oCisgICAgY206Om1ha2VfdW5pcXVlPGNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcj4odGhpcywgbWYpKTsKIH0KIAogdm9pZCBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpHZW5lcmF0ZSgpCkBAIC01OTAsNyArNjIyLDcgQEAKICAgICAgICJUbyBhdm9pZCB0aGlzIHByb2JsZW0gQ01ha2UgbXVzdCB1c2UgYSBmdWxsIHBhdGggZm9yIHRoaXMgZmlsZSAiCiAgICAgICAid2hpY2ggdGhlbiB0cmlnZ2VycyB0aGUgVlMgMTAgcHJvcGVydHkgZGlhbG9nIGJ1Zy4iOwogICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICAgIGxnLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OldBUk5JTkcsIGUuc3RyKCkuY19zdHIoKSk7CisgICAgbGctPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6V0FSTklORywgZS5zdHIoKSk7CiAgIH0KIH0KIApAQCAtNjA5LDYgKzY0MSwxNCBAQAogICBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OkVuYWJsZUxhbmd1YWdlKGxhbmcsIG1mLCBvcHRpb25hbCk7CiB9CiAKK2NvbnN0IGNoYXIqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkdldEN1c3RvbVZDVGFyZ2V0c1BhdGgoKSBjb25zdAoreworICBpZiAodGhpcy0+Q3VzdG9tVkNUYXJnZXRzUGF0aC5lbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKyAgcmV0dXJuIHRoaXMtPkN1c3RvbVZDVGFyZ2V0c1BhdGguY19zdHIoKTsKK30KKwogY29uc3QgY2hhciogY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6R2V0UGxhdGZvcm1Ub29sc2V0KCkgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgY29uc3QmIHRvb2xzZXQgPSB0aGlzLT5HZXRQbGF0Zm9ybVRvb2xzZXRTdHJpbmcoKTsKQEAgLTgwMyw3ICs4NDMsNyBAQAogICAvLyBQcmVwYXJlIHRoZSB3b3JrIGRpcmVjdG9yeS4KICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHdkKSkgewogICAgIHN0ZDo6c3RyaW5nIGUgPSAiRmFpbGVkIHRvIG1ha2UgZGlyZWN0b3J5OlxuICAiICsgd2Q7Ci0gICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuY19zdHIoKSk7CisgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUpOwogICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC05MjQsNyArOTY0LDcgQEAKICAgICBpZiAocmV0ICE9IDApIHsKICAgICAgIGUgPDwgIkV4aXQgY29kZTogIiA8PCByZXQgPDwgIlxuIjsKICAgICB9Ci0gICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkuY19zdHIoKSk7CisgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOwogICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0xMDk4LDggKzExMzgsNyBAQAogICAvLyBIaWRlIHRoZW0gYXdheSB1bmRlciB0aGUgQ01ha2VGaWxlcyBkaXJlY3RvcnkuCiAgIHN0ZDo6c3RyaW5nIHJ1bGVEaXIgPSBjbVN0ckNhdCgKICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzLyIsCi0gICAgY21TeXN0ZW1Ub29sczo6Q29tcHV0ZVN0cmluZ01ENSgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChvdXRwdXQpLmNfc3RyKCkpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpDb21wdXRlU3RyaW5nTUQ1KGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChvdXRwdXQpKSk7CiAgIHN0ZDo6c3RyaW5nIHJ1bGVGaWxlID0KICAgICBjbVN0ckNhdChydWxlRGlyLCAnLycsIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShvdXRwdXQpLCAiLnJ1bGUiKTsKICAgcmV0dXJuIHJ1bGVGaWxlOwpAQCAtMTI5Myw3ICsxMzMyLDcgQEAKICAgICBlIDw8ICJKU09OIGZsYWcgdGFibGUgXCIiIDw8IGZpbGVuYW1lIDw8CiAgICAgICAiXCIgY291bGQgbm90IGJlIGxvYWRlZC5cbiI7CiAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCi0gICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkuY19zdHIoKSk7CisgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOwogICB9CiAgIHJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaAppbmRleCA1NmYxMTkzLi5mNjU5ZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmgKQEAgLTMsNiArMyw4IEBACiAjaWZuZGVmIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3JfaAogI2RlZmluZSBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvMTBUb29sc2V0T3B0aW9ucy5oIgogCkBAIC0xNCwxMyArMTYsMTQgQEAKIGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IgOiBwdWJsaWMgY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yCiB7CiBwdWJsaWM6Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKTsKIAogICBib29sIE1hdGNoZXNHZW5lcmF0b3JOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCBvdmVycmlkZTsKIAogICBib29sIFNldFN5c3RlbU5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIHMsIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKICAgYm9vbCBTZXRHZW5lcmF0b3JQbGF0Zm9ybShzdGQ6OnN0cmluZyBjb25zdCYgcCwgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwotICBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIGJvb2wgU2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGJvb2wgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgc3RkOjp2ZWN0b3I8R2VuZXJhdGVkTWFrZUNvbW1hbmQ+IEdlbmVyYXRlQnVpbGRDb21tYW5kKAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlUHJvZ3JhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb2plY3ROYW1lLApAQCAtMzAsNyArMzMsOCBAQAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCkpIG92ZXJyaWRlOwogCiAgIC8vISBjcmVhdGUgdGhlIGNvcnJlY3QgbG9jYWwgZ2VuZXJhdG9yCi0gIGNtTG9jYWxHZW5lcmF0b3IqIENyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogICAvKioKICAgICogVHJ5IHRvIGRldGVybWluZSBzeXN0ZW0gaW5mb3JtYXRpb24gc3VjaCBhcyBzaGFyZWQgbGlicmFyeQpAQCAtNDUsNiArNDksOSBAQAogICBib29sIElzTnNpZ2h0VGVncmEoKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgR2V0TnNpZ2h0VGVncmFWZXJzaW9uKCkgY29uc3Q7CiAKKyAgLyoqIFRoZSB2Y3RhcmdldHMgcGF0aCBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybS4gICovCisgIGNvbnN0IGNoYXIqIEdldEN1c3RvbVZDVGFyZ2V0c1BhdGgoKSBjb25zdDsKKwogICAvKiogVGhlIHRvb2xzZXQgbmFtZSBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybS4gICovCiAgIGNvbnN0IGNoYXIqIEdldFBsYXRmb3JtVG9vbHNldCgpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0UGxhdGZvcm1Ub29sc2V0U3RyaW5nKCkgY29uc3Q7CkBAIC0xNTcsNiArMTY0LDcgQEAKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yVG9vbHNldDsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yVG9vbHNldFZlcnNpb247CiAgIHN0ZDo6c3RyaW5nIEdlbmVyYXRvclRvb2xzZXRIb3N0QXJjaGl0ZWN0dXJlOworICBzdGQ6OnN0cmluZyBHZW5lcmF0b3JUb29sc2V0Q3VzdG9tVkNUYXJnZXRzRGlyOwogICBzdGQ6OnN0cmluZyBHZW5lcmF0b3JUb29sc2V0Q3VkYTsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yVG9vbHNldEN1ZGFDdXN0b21EaXI7CiAgIHN0ZDo6c3RyaW5nIERlZmF1bHRQbGF0Zm9ybVRvb2xzZXQ7CkBAIC0yMDksNiArMjE3LDcgQEAKIAogICBib29sIFBhcnNlR2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGNtTWFrZWZpbGUqIG1mKTsKIAorICBzdGQ6OnN0cmluZyBDdXN0b21WQ1RhcmdldHNQYXRoOwogICBzdGQ6OnN0cmluZyBWQ1RhcmdldHNQYXRoOwogICBib29sIEZpbmRWQ1RhcmdldHNQYXRoKGNtTWFrZWZpbGUqIG1mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuY3h4CmluZGV4IDRiNzRlZjEuLmEzODUzNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIKICNpbmNsdWRlICJjbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCIKQEAgLTI4LDM4ICszMCw0MSBAQAogICA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBzdGQ6OnN0cmluZyBnZW5OYW1lOwogICAgIGNvbnN0IGNoYXIqIHAgPSBjbVZTMTFHZW5OYW1lKG5hbWUsIGdlbk5hbWUpOwogICAgIGlmICghcCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoISpwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9CiAgICAgaWYgKCpwKysgIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIldpbjY0IikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJ4NjQiKSk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIkFSTSIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIkFSTSIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAiQVJNIikpOwogICAgIH0KIAogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBpbnN0YWxsZWRTREtzID0KICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3I6OkdldEluc3RhbGxlZFdpbmRvd3NDRVNES3MoKTsKIAogICAgIGlmIChpbnN0YWxsZWRTREtzLmZpbmQocCkgPT0gaW5zdGFsbGVkU0RLcy5lbmQoKSkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KIAotICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IqIHJldCA9Ci0gICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcihjbSwgbmFtZSwgcCk7CisgICAgYXV0byByZXQgPSBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcj4oCisgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcihjbSwgbmFtZSwgcCkpOwogICAgIHJldC0+V2luZG93c0NFVmVyc2lvbiA9ICI4LjAwIjsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KHN0ZDo6bW92ZShyZXQpKTsKICAgfQogCiAgIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpIGNvbnN0IG92ZXJyaWRlCkBAIC0xMTMsOSArMTE4LDEwIEBACiAgIHN0ZDo6c3RyaW5nIEdldERlZmF1bHRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2luMzIiOyB9CiB9OwogCi1jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4KK2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQogewotICByZXR1cm4gbmV3IEZhY3Rvcnk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PihuZXcgRmFjdG9yeSk7CiB9CiAKIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3I6OmNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuaAppbmRleCBmOGNjZTE4Li41ZjFmZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KIApAQCAtMjAsNyArMjEsNyBAQAogY2xhc3MgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvciA6IHB1YmxpYyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yCiB7CiBwdWJsaWM6Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKTsKIAogICBib29sIE1hdGNoZXNHZW5lcmF0b3JOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IuY3h4CmluZGV4IGQ5NzAyYzkuLjVhMjc5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvci5jeHgKQEAgLTI4LDI3ICsyOCwzMCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBzdGQ6OnN0cmluZyBnZW5OYW1lOwogICAgIGNvbnN0IGNoYXIqIHAgPSBjbVZTMTJHZW5OYW1lKG5hbWUsIGdlbk5hbWUpOwogICAgIGlmICghcCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoISpwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9CiAgICAgaWYgKCpwKysgIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIldpbjY0IikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJ4NjQiKSk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIkFSTSIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIkFSTSIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAiQVJNIikpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAKICAgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkgY29uc3Qgb3ZlcnJpZGUKQEAgLTg4LDkgKzkxLDEwIEBACiAgIHN0ZDo6c3RyaW5nIEdldERlZmF1bHRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2luMzIiOyB9CiB9OwogCi1jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4KK2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQogewotICByZXR1cm4gbmV3IEZhY3Rvcnk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PihuZXcgRmFjdG9yeSk7CiB9CiAKIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3I6OmNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IuaAppbmRleCA1M2I3MDkxLi5iZGQ0MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5oIgpAQCAtMTgsNyArMTksNyBAQAogY2xhc3MgY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvciA6IHB1YmxpYyBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yCiB7CiBwdWJsaWM6Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKTsKIAogICBib29sIE1hdGNoZXNHZW5lcmF0b3JOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuY3h4CmluZGV4IGNkNDg0NzQuLmY1NDliNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5jeHgKQEAgLTIsNyArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbS92ZWN0b3I+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTI4LDI3ICsyOSwzMCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBzdGQ6OnN0cmluZyBnZW5OYW1lOwogICAgIGNvbnN0IGNoYXIqIHAgPSBjbVZTMTRHZW5OYW1lKG5hbWUsIGdlbk5hbWUpOwogICAgIGlmICghcCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoISpwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9CiAgICAgaWYgKCpwKysgIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIldpbjY0IikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJ4NjQiKSk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIkFSTSIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIkFSTSIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAiQVJNIikpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAKICAgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkgY29uc3Qgb3ZlcnJpZGUKQEAgLTg4LDkgKzkyLDEwIEBACiAgIHN0ZDo6c3RyaW5nIEdldERlZmF1bHRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2luMzIiOyB9CiB9OwogCi1jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4KK2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQogewotICByZXR1cm4gbmV3IEZhY3Rvcnk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PihuZXcgRmFjdG9yeSk7CiB9CiAKIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3I6OmNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoCkBAIC0yOTksNyArMzA0LDcgQEAKIAogICAvLyBTa2lwIFNES3MgdGhhdCBkbyBub3QgY29udGFpbiA8dW0vd2luZG93cy5oPiBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQKICAgLy8gb25seSB0aGUgVUNSVCBNU0lzIHdlcmUgaW5zdGFsbGVkIGZvciB0aGVtLgotICBjbUVyYXNlSWYoc2RrcywgTm9XaW5kb3dzSCgpKTsKKyAgY206OmVyYXNlX2lmKHNka3MsIE5vV2luZG93c0goKSk7CiAKICAgLy8gT25seSB1c2UgdGhlIGZpbGVuYW1lLCB3aGljaCB3aWxsIGJlIHRoZSBTREsgdmVyc2lvbi4KICAgZm9yIChzdGQ6OnN0cmluZyYgaSA6IHNka3MpIHsKQEAgLTMwOSw3ICszMTQsNyBAQAogICAvLyBTa2lwIFNES3MgdGhhdCBjYW5ub3QgYmUgdXNlZCB3aXRoIG91ciB0b29sc2V0LgogICBzdGQ6OnN0cmluZyBtYXhWZXJzaW9uID0gdGhpcy0+R2V0V2luZG93czEwU0RLTWF4VmVyc2lvbigpOwogICBpZiAoIW1heFZlcnNpb24uZW1wdHkoKSkgewotICAgIGNtRXJhc2VJZihzZGtzLCBXaW5kb3dzU0RLVG9vUmVjZW50KG1heFZlcnNpb24pKTsKKyAgICBjbTo6ZXJhc2VfaWYoc2RrcywgV2luZG93c1NES1Rvb1JlY2VudChtYXhWZXJzaW9uKSk7CiAgIH0KIAogICAvLyBTb3J0IHRoZSByZXN1bHRzIHRvIG1ha2Ugc3VyZSB3ZSBzZWxlY3QgdGhlIG1vc3QgcmVjZW50IG9uZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5oCmluZGV4IDZlMTJkM2UuLmNjYzI5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmgiCkBAIC0xOCw3ICsxOSw3IEBACiBjbGFzcyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yIDogcHVibGljIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IKIHsKIHB1YmxpYzoKLSAgc3RhdGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogTmV3RmFjdG9yeSgpOworICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpOwogCiAgIGJvb2wgTWF0Y2hlc0dlbmVyYXRvck5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5jeHgKaW5kZXggZThlOWVjZS4uZDBhZWM2MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmN4eApAQCAtODcsNyArODcsNyBAQAogLy8gdGhlIGxpYnJhcmllcyBpdCB1c2VzIGFyZSBhbHNvIGRvbmUgaGVyZQogdm9pZCBjbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yOjpXcml0ZVByb2plY3Qoc3RkOjpvc3RyZWFtJiBmb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRzcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHQpCiB7CiAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgZm9ydHJhbiBidWlsZApAQCAtMTA5LDcgKzEwOSw3IEBACiAKICAgc3RkOjpzdHJpbmcgZ3VpZCA9IHRoaXMtPkdldEdVSUQoZHNwbmFtZSk7CiAgIGZvdXQgPDwgcHJvamVjdCA8PCBkc3BuYW1lIDw8ICJcIiwgXCIiIDw8IHRoaXMtPkNvbnZlcnRUb1NvbHV0aW9uUGF0aChkaXIpCi0gICAgICAgPDwgKGRpclswXSA/ICJcXCIgOiAiIikgPDwgZHNwbmFtZSA8PCBleHQgPDwgIlwiLCBcInsiIDw8IGd1aWQKKyAgICAgICA8PCAoIWRpci5lbXB0eSgpID8gIlxcIiA6ICIiKSA8PCBkc3BuYW1lIDw8IGV4dCA8PCAiXCIsIFwieyIgPDwgZ3VpZAogICAgICAgIDw8ICJ9XCJcbiI7CiAgIGZvdXQgPDwgIlx0UHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdFxuIjsKICAgdGhpcy0+V3JpdGVQcm9qZWN0RGVwZW5kcyhmb3V0LCBkc3BuYW1lLCBkaXIsIHQpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAvLyBOb3RlLCB0aGF0IGRlcGVuZGVuY2llcyBmcm9tIGV4ZWN1dGFibGVzIHRvCiAvLyB0aGUgbGlicmFyaWVzIGl0IHVzZXMgYXJlIGFsc28gZG9uZSBoZXJlCiB2b2lkIGNtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3I6OldyaXRlUHJvamVjdERlcGVuZHMoCi0gIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmLCBjb25zdCBjaGFyKiwKKyAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiwKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCkKIHsKICAgVlNEZXBlbmRTZXQgY29uc3QmIGRlcGVuZHMgPSB0aGlzLT5WU1RhcmdldERlcGVuZHNbdGFyZ2V0XTsKQEAgLTE1Niw4ICsxNTYsOSBAQAogLy8gV3JpdGUgYSBkc3AgZmlsZSBpbnRvIHRoZSBTTE4gZmlsZSwgTm90ZSwgdGhhdCBkZXBlbmRlbmNpZXMgZnJvbQogLy8gZXhlY3V0YWJsZXMgdG8gdGhlIGxpYnJhcmllcyBpdCB1c2VzIGFyZSBhbHNvIGRvbmUgaGVyZQogdm9pZCBjbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yOjpXcml0ZUV4dGVybmFsUHJvamVjdCgKLSAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogbG9jYXRpb24sCi0gIGNvbnN0IGNoYXIqIHR5cGVHdWlkLCBjb25zdCBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+JiBkZXBlbmRzKQorICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgbG9jYXRpb24sCisgIGNvbnN0IGNoYXIqIHR5cGVHdWlkLAorICBjb25zdCBzdGQ6OnNldDxCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+Pj4mIGRlcGVuZHMpCiB7CiAgIGZvdXQgPDwgIlByb2plY3QoXCJ7IgogICAgICAgIDw8ICh0eXBlR3VpZCA/IHR5cGVHdWlkIDogdGhpcy0+RXh0ZXJuYWxQcm9qZWN0VHlwZShsb2NhdGlvbikpCkBAIC0xNjksOCArMTcwLDggQEAKICAgLy8gcHJvamVjdCBpbnN0ZWFkIG9mIGluIHRoZSBnbG9iYWwgc2VjdGlvbgogICBpZiAoIWRlcGVuZHMuZW1wdHkoKSkgewogICAgIGZvdXQgPDwgIlx0UHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdFxuIjsKLSAgICBmb3IgKEJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgaXQgOiBkZXBlbmRzKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVwID0gaXQuVmFsdWU7CisgICAgZm9yIChCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PiBjb25zdCYgaXQgOiBkZXBlbmRzKSB7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVwID0gaXQuVmFsdWUuZmlyc3Q7CiAgICAgICBpZiAoIWRlcC5lbXB0eSgpKSB7CiAgICAgICAgIGZvdXQgPDwgIlx0XHR7IiA8PCB0aGlzLT5HZXRHVUlEKGRlcCkgPDwgIn0gPSB7IiA8PCB0aGlzLT5HZXRHVUlEKGRlcCkKICAgICAgICAgICAgICA8PCAifVxuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5oCmluZGV4IDg1NzU1YWYuLjdlYWRhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3IuaApAQCAtMjIsMTggKzIyLDIwIEBACiAgIHZpcnR1YWwgdm9pZCBXcml0ZVNvbHV0aW9uQ29uZmlndXJhdGlvbnMoCiAgICAgc3RkOjpvc3RyZWFtJiBmb3V0LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MpOwogICB2b2lkIFdyaXRlUHJvamVjdChzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdCkgb3ZlcnJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdCkgb3ZlcnJpZGU7CiAgIHZvaWQgV3JpdGVQcm9qZWN0RGVwZW5kcyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHQpIG92ZXJyaWRlOwogICB2b2lkIFdyaXRlUHJvamVjdENvbmZpZ3VyYXRpb25zKAogICAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCiAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzLAogICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgY29uZmlnc1BhcnRPZkRlZmF1bHRCdWlsZCwKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGxhdGZvcm1NYXBwaW5nID0gIiIpIG92ZXJyaWRlOwotICB2b2lkIFdyaXRlRXh0ZXJuYWxQcm9qZWN0KHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogdHlwZUd1aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8QlQ8c3RkOjpzdHJpbmc+PiYgZGVwZW5kcykgb3ZlcnJpZGU7CisgIHZvaWQgV3JpdGVFeHRlcm5hbFByb2plY3QoCisgICAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsCisgICAgY29uc3QgY2hhciogdHlwZUd1aWQsCisgICAgY29uc3Qgc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+JiBkZXBlbmRzKSBvdmVycmlkZTsKIAogICAvLyBGb2xkZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFZTIDcuMS4KICAgYm9vbCBVc2VGb2xkZXJQcm9wZXJ0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CmluZGV4IDQwYjIxNGMuLjlhOTkwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CkBAIC0yLDggKzIsMTAgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0xMjYsNyArMTI4LDcgQEAKICAgLy8gZG9lcyBub3Qga25vdyBhYm91dC4KICAgc3RkOjpzdHJpbmcgZXh0cmFQYXRoOwogICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RW52KCJDTUFLRV9NU1ZDSURFX1JVTl9QQVRIIiwgZXh0cmFQYXRoKSkgewotICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX01TVkNJREVfUlVOX1BBVEgiLCBleHRyYVBhdGguY19zdHIoKSwKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NU1ZDSURFX1JVTl9QQVRIIiwgZXh0cmFQYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlIENNQUtFX01TVkNJREVfUlVOX1BBVEgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVEFUSUMpOwogICB9CkBAIC0xODQsNyArMTg2LDcgQEAKIH0KIAogY29uc3QgY2hhciogY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpFeHRlcm5hbFByb2plY3RUeXBlKAotICBjb25zdCBjaGFyKiBsb2NhdGlvbikKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGxvY2F0aW9uKQogewogICBzdGQ6OnN0cmluZyBleHRlbnNpb24gPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24obG9jYXRpb24pOwogICBpZiAoZXh0ZW5zaW9uID09ICIudmJwcm9qIikgewpAQCAtMjYzLDEyICsyNjUsMTEgQEAKIH0KIAogLy8hIENyZWF0ZSBhIGxvY2FsIGdlbmVyYXRvciBhcHByb3ByaWF0ZSB0byB0aGlzIEdsb2JhbCBHZW5lcmF0b3IKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoCi0gIGNtTWFrZWZpbGUqIG1mKQorc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+CitjbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQogewotICBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvciogbGcgPQotICAgIG5ldyBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcih0aGlzLCBtZik7Ci0gIHJldHVybiBsZzsKKyAgYXV0byBsZyA9IGNtOjptYWtlX3VuaXF1ZTxjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcj4odGhpcywgbWYpOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+KHN0ZDo6bW92ZShsZykpOwogfQogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQpAQCAtMzAwLDcgKzMwMSw3IEBACiAgIGlmICghY21TeXN0ZW1Ub29sczo6R2V0RXJyb3JPY2N1cmVkRmxhZygpICYmCiAgICAgICAhdGhpcy0+TG9jYWxHZW5lcmF0b3JzLmVtcHR5KCkpIHsKICAgICB0aGlzLT5DYWxsVmlzdWFsU3R1ZGlvTWFjcm8oTWFjcm9SZWxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNMTkZpbGUodGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNMTkZpbGUodGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdLmdldCgpKSk7CiAgIH0KIH0KIApAQCAtMzQ1LDggKzM0Niw4IEBACiAgICAgaWYgKGV4cGF0aCkgewogICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGFsbENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MuYmVnaW4oKSwgY29uZmlncy5lbmQoKSk7CiAgICAgICBjb25zdCBjaGFyKiBtYXBwaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fTUFQUElORyIpOwotICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0Q29uZmlndXJhdGlvbnMoZm91dCwgdGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQsIGNvbmZpZ3MsIGFsbENvbmZpZ3VyYXRpb25zLAorICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0Q29uZmlndXJhdGlvbnMoZm91dCwgdGFyZ2V0LT5HZXROYW1lKCksICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLCBhbGxDb25maWd1cmF0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPyBtYXBwaW5nIDogIiIpOwogICAgIH0gZWxzZSB7CiAgICAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGNvbmZpZ3NQYXJ0T2ZEZWZhdWx0QnVpbGQgPQpAQCAtMzc5LDcgKzM4MCw3IEBACiAgICAgICBzdGQ6OnN0cmluZyBwcm9qZWN0ID0gdGFyZ2V0LT5HZXROYW1lKCk7CiAgICAgICBzdGQ6OnN0cmluZyBsb2NhdGlvbiA9IGV4cGF0aDsKIAotICAgICAgdGhpcy0+V3JpdGVFeHRlcm5hbFByb2plY3QoZm91dCwgcHJvamVjdC5jX3N0cigpLCBsb2NhdGlvbi5jX3N0cigpLAorICAgICAgdGhpcy0+V3JpdGVFeHRlcm5hbFByb2plY3QoZm91dCwgcHJvamVjdCwgbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJWU19QUk9KRUNUX1RZUEUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0VXRpbGl0aWVzKCkpOwogICAgICAgd3JpdHRlbiA9IHRydWU7CkBAIC0zODgsMTEgKzM4OSwxMSBAQAogICAgICAgaWYgKHZjcHJvak5hbWUpIHsKICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGRpciA9IGxnLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7Ci0gICAgICAgIGRpciA9IHJvb3QtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHJvb3RCaW5hcnlEaXIsIGRpci5jX3N0cigpKTsKKyAgICAgICAgZGlyID0gcm9vdC0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgocm9vdEJpbmFyeURpciwgZGlyKTsKICAgICAgICAgaWYgKGRpciA9PSAiLiIpIHsKICAgICAgICAgICBkaXIuY2xlYXIoKTsgLy8gbXNidWlsZCBjYW5ub3QgaGFuZGxlICIuXCIgcHJlZml4CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0KGZvdXQsIHZjcHJvak5hbWUsIGRpci5jX3N0cigpLCB0YXJnZXQpOworICAgICAgICB0aGlzLT5Xcml0ZVByb2plY3QoZm91dCwgdmNwcm9qTmFtZSwgZGlyLCB0YXJnZXQpOwogICAgICAgICB3cml0dGVuID0gdHJ1ZTsKICAgICAgIH0KICAgICB9CkBAIC00ODIsNyArNDgzLDcgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpDb252ZXJ0VG9Tb2x1dGlvblBhdGgoCi0gIGNvbnN0IGNoYXIqIHBhdGgpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKQogewogICAvLyBDb252ZXJ0IHRvIGJhY2tzbGFzaGVzLiAgRG8gbm90IHVzZSBDb252ZXJ0VG9PdXRwdXRQYXRoIGJlY2F1c2UKICAgLy8gd2Ugd2lsbCBhZGQgcXVvdGluZyBvdXJzZWx2ZXMsIGFuZCB3ZSBrbm93IHRoZXNlIHByb2plY3RzIGFsd2F5cwpAQCAtNTA0LDEzICs1MDUsMTMgQEAKICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BLZXlzID0KICAgICByb290LT5HZXRNYWtlZmlsZSgpLT5HZXRQcm9wZXJ0eUtleXMoKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXQgOiBwcm9wS2V5cykgewotICAgIGlmIChpdC5maW5kKCJWU19HTE9CQUxfU0VDVElPTl8iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChpdCwgIlZTX0dMT0JBTF9TRUNUSU9OXyIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBzZWN0aW9uVHlwZTsKICAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBpdC5zdWJzdHIoMTgpOwotICAgICAgaWYgKG5hbWUuZmluZCgiUFJFXyIpID09IDApIHsKKyAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobmFtZSwgIlBSRV8iKSkgewogICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoNCk7CiAgICAgICAgIHNlY3Rpb25UeXBlID0gInByZVNvbHV0aW9uIjsKLSAgICAgIH0gZWxzZSBpZiAobmFtZS5maW5kKCJQT1NUXyIpID09IDApIHsKKyAgICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KG5hbWUsICJQT1NUXyIpKSB7CiAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cig1KTsKICAgICAgICAgc2VjdGlvblR5cGUgPSAicG9zdFNvbHV0aW9uIjsKICAgICAgIH0gZWxzZQpAQCAtNjc1LDcgKzY3Niw4IEBACiAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBjb25maWdzKSB7CiAgICAgICAgICAgY29uc3QgY2hhciogcHJvcGVydHlWYWx1ZSA9CiAgICAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgIGlmIChjbUlzT24oY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKKyAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAmJgorICAgICAgICAgICAgICBjbUlzT24oY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLCB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCksIGkpKSkgewogICAgICAgICAgICAgYWN0aXZlQ29uZmlncy5pbnNlcnQoaSk7CiAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oCmluZGV4IDdhOWZjZWYuLjZjYzFjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgKQEAgLTMsNiArMyw4IEBACiAjaWZuZGVmIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcl9oCiAjZGVmaW5lIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcl9oCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkuaCIKICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5oIgogCkBAIC0yMCw3ICsyMiw4IEBACiAgIH5jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IoKTsKIAogICAvLyEgQ3JlYXRlIGEgbG9jYWwgZ2VuZXJhdG9yIGFwcHJvcHJpYXRlIHRvIHRoaXMgR2xvYmFsIEdlbmVyYXRvcgotICBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAgIEpzb246OlZhbHVlIEdldEpzb24oKSBjb25zdCBvdmVycmlkZTsKQEAgLTEwNywxNiArMTEwLDE3IEBACiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXREZXZFbnZDb21tYW5kKCk7CiAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgRmluZERldkVudkNvbW1hbmQoKTsKIAotICBzdGF0aWMgY29uc3QgY2hhciogRXh0ZXJuYWxQcm9qZWN0VHlwZShjb25zdCBjaGFyKiBsb2NhdGlvbik7CisgIHN0YXRpYyBjb25zdCBjaGFyKiBFeHRlcm5hbFByb2plY3RUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsb2NhdGlvbik7CiAKICAgdmlydHVhbCB2b2lkIE91dHB1dFNMTkZpbGUoY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBnZW5lcmF0b3JzKTsKICAgdmlydHVhbCB2b2lkIFdyaXRlU0xORmlsZShzdGQ6Om9zdHJlYW0mIGZvdXQsIGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBnZW5lcmF0b3JzKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBXcml0ZVByb2plY3Qoc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdCkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0KSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBXcml0ZVByb2plY3REZXBlbmRzKHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdCkgPSAwOwogICB2aXJ0dWFsIHZvaWQgV3JpdGVQcm9qZWN0Q29uZmlndXJhdGlvbnMoCiAgICAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKQEAgLTEzOCwxMCArMTQyLDExIEBACiAgICAgT3JkZXJlZFRhcmdldERlcGVuZFNldCBjb25zdCYgcHJvamVjdFRhcmdldHMpOwogCiAgIHZpcnR1YWwgdm9pZCBXcml0ZUV4dGVybmFsUHJvamVjdCgKLSAgICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBjaGFyKiBwYXRoLAotICAgIGNvbnN0IGNoYXIqIHR5cGVHdWlkLCBjb25zdCBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+JiBkZXBlbmRlbmNpZXMpID0gMDsKKyAgICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwKKyAgICBjb25zdCBjaGFyKiB0eXBlR3VpZCwKKyAgICBjb25zdCBzdGQ6OnNldDxCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+Pj4mIGRlcGVuZGVuY2llcykgPSAwOwogCi0gIHN0ZDo6c3RyaW5nIENvbnZlcnRUb1NvbHV0aW9uUGF0aChjb25zdCBjaGFyKiBwYXRoKTsKKyAgc3RkOjpzdHJpbmcgQ29udmVydFRvU29sdXRpb25QYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKTsKIAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gSXNQYXJ0T2ZEZWZhdWx0QnVpbGQoCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eAppbmRleCA4ZTYxMjViLi5mYTBlOTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eApAQCAtMiw2ICsyLDkgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L21lbW9yeT4KKwogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIKQEAgLTk2LDIxICs5OSwyMiBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiBjb25zdCYgZ2VuZXJhdG9ycyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yczsKLSAgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IqIGxnID0KLSAgICBzdGF0aWNfY2FzdDxjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcio+KGdlbmVyYXRvcnNbMF0pOwotICBjbU1ha2VmaWxlKiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4+IGNvbnN0JiBnZW5lcmF0b3JzID0KKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnM7CisgIGF1dG8mIGxnID0KKyAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yPihnZW5lcmF0b3JzWzBdKTsKIAogICBjb25zdCBjaGFyKiBub193b3JraW5nX2RpcmVjdG9yeSA9IG51bGxwdHI7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwZW5kczsKICAgY21DdXN0b21Db21tYW5kTGluZXMgbm9fY29tbWFuZHM7Ci0gIGNtVGFyZ2V0KiB0Z3QgPSBtZi0+QWRkVXRpbGl0eUNvbW1hbmQoCi0gICAgQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIGZhbHNlLAotICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLCBub19jb21tYW5kcyk7CisgIGNtVGFyZ2V0KiB0Z3QgPSBsZy5BZGRVdGlsaXR5Q29tbWFuZChDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VULCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCBub19ieXByb2R1Y3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fZGVwZW5kcywgbm9fY29tbWFuZHMpOwogCi0gIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IG5ldyBjbUdlbmVyYXRvclRhcmdldCh0Z3QsIGxnKTsKLSAgbGctPkFkZEdlbmVyYXRvclRhcmdldChndCk7CisgIGF1dG8gcHRyID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0Pih0Z3QsICZsZyk7CisgIGF1dG8gZ3QgPSBwdHIuZ2V0KCk7CisgIGxnLkFkZEdlbmVyYXRvclRhcmdldChzdGQ6Om1vdmUocHRyKSk7CiAKICAgLy8gT3JnYW5pemUgaW4gdGhlICJwcmVkZWZpbmVkIHRhcmdldHMiIGZvbGRlcjoKICAgLy8KQEAgLTEyOCw3ICsxMzIsNyBAQAogICAgICAgICAgICAgICAgc3RhbXBMaXN0KTsKICAgICBzdGQ6OnN0cmluZyBzdGFtcEZpbGU7CiAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZvdXQoc3RhbXBMaXN0RmlsZS5jX3N0cigpKTsKLSAgICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGdpIDogZ2VuZXJhdG9ycykgeworICAgIGZvciAoY29uc3QgYXV0byYgZ2kgOiBnZW5lcmF0b3JzKSB7CiAgICAgICBzdGFtcEZpbGUgPSBjbVN0ckNhdChnaS0+R2V0TWFrZWZpbGUoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9DTWFrZUZpbGVzL2dlbmVyYXRlLnN0YW1wIik7CiAgICAgICBmb3V0IDw8IHN0YW1wRmlsZSA8PCAiXG4iOwpAQCAtMTQxLDggKzE0NSw4IEBACiAgICAgLy8gQ29sbGVjdCB0aGUgaW5wdXQgZmlsZXMgdXNlZCB0byBnZW5lcmF0ZSBhbGwgdGFyZ2V0cyBpbiB0aGlzCiAgICAgLy8gcHJvamVjdC4KICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlzdEZpbGVzOwotICAgIGZvciAoY21Mb2NhbEdlbmVyYXRvciogZ2VuIDogZ2VuZXJhdG9ycykgewotICAgICAgY21BcHBlbmQobGlzdEZpbGVzLCBnZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgIGNtOjphcHBlbmQobGlzdEZpbGVzLCBnZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjdXN0b20gcHJlYnVpbGQgdGFyZ2V0IHRvIHJ1biB0aGUgVmVyaWZ5R2xvYnMgc2NyaXB0LgpAQCAtMTUzLDcgKzE1Nyw3IEBACiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYnlwcm9kdWN0czsKICAgICAgIGJ5cHJvZHVjdHMucHVzaF9iYWNrKGNtLT5HZXRHbG9iVmVyaWZ5U3RhbXAoKSk7CiAKLSAgICAgIG1mLT5BZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoCisgICAgICBsZy5BZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoCiAgICAgICAgIENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQsIGJ5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCiAgICAgICAgIHZlcmlmeUNvbW1hbmRMaW5lcywgY21DdXN0b21Db21tYW5kVHlwZTo6UFJFX0JVSUxELAogICAgICAgICAiQ2hlY2tpbmcgRmlsZSBHbG9icyIsIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCBmYWxzZSk7CkBAIC0xNzEsMTAgKzE3NSwxMCBAQAogICAgIGxpc3RGaWxlcy5lcmFzZShuZXdfZW5kLCBsaXN0RmlsZXMuZW5kKCkpOwogCiAgICAgLy8gQ3JlYXRlIGEgcnVsZSB0byByZS1ydW4gQ01ha2UuCi0gICAgc3RkOjpzdHJpbmcgYXJnUyA9IGNtU3RyQ2F0KCItUyIsIGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSk7Ci0gICAgc3RkOjpzdHJpbmcgYXJnQiA9IGNtU3RyQ2F0KCItQiIsIGxnLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgc3RkOjpzdHJpbmcgYXJnUyA9IGNtU3RyQ2F0KCItUyIsIGxnLkdldFNvdXJjZURpcmVjdG9yeSgpKTsKKyAgICBzdGQ6OnN0cmluZyBhcmdCID0gY21TdHJDYXQoIi1CIiwgbGcuR2V0QmluYXJ5RGlyZWN0b3J5KCkpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHNsbiA9Ci0gICAgICBsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCkgKyAiLyIgKyBsZy0+R2V0UHJvamVjdE5hbWUoKSArICIuc2xuIjsKKyAgICAgIGxnLkdldEJpbmFyeURpcmVjdG9yeSgpICsgIi8iICsgbGcuR2V0UHJvamVjdE5hbWUoKSArICIuc2xuIjsKICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMgPSBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSgKICAgICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksIGFyZ1MsIGFyZ0IsICItLWNoZWNrLXN0YW1wLWxpc3QiLAogICAgICAgICBzdGFtcExpc3QsICItLXZzLXNvbHV0aW9uLWZpbGUiLCBzbG4gfSk7CkBAIC0xODUsNyArMTg5LDcgQEAKICAgICAvLyAodGhpcyBjb3VsZCBiZSBhdm9pZGVkIHdpdGggcGVyLXRhcmdldCBzb3VyY2UgZmlsZXMpCiAgICAgc3RkOjpzdHJpbmcgbm9fbWFpbl9kZXBlbmRlbmN5OwogICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICAgIGlmIChjbVNvdXJjZUZpbGUqIGZpbGUgPSBtZi0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgIGlmIChjbVNvdXJjZUZpbGUqIGZpbGUgPSBsZy5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgICAgICAgc3RhbXBzLCBub19ieXByb2R1Y3RzLCBsaXN0RmlsZXMsIG5vX21haW5fZGVwZW5kZW5jeSwKICAgICAgICAgICBub19pbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsICJDaGVja2luZyBCdWlsZCBTeXN0ZW0iLAogICAgICAgICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCB0cnVlLCBmYWxzZSkpIHsKQEAgLTIwMywxMiArMjA3LDExIEBACiAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6QWRkRXh0cmFJREVUYXJnZXRzKCk7CiAgIGlmICh0aGlzLT5BZGRDaGVja1RhcmdldCgpKSB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRndHMgPQotICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0tPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgICAgIGNvbnN0IGF1dG8mIHRndHMgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0tPkdldEdlbmVyYXRvclRhcmdldHMoKTsKICAgICAgIC8vIEFsbCB0YXJnZXRzIGRlcGVuZCBvbiB0aGUgYnVpbGQtc3lzdGVtIGNoZWNrIHRhcmdldC4KLSAgICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRpIDogdGd0cykgeworICAgICAgZm9yIChjb25zdCBhdXRvJiB0aSA6IHRndHMpIHsKICAgICAgICAgaWYgKHRpLT5HZXROYW1lKCkgIT0gQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCkgewotICAgICAgICAgIHRpLT5UYXJnZXQtPkFkZFV0aWxpdHkoQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCk7CisgICAgICAgICAgdGktPlRhcmdldC0+QWRkVXRpbGl0eShDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VULCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0yNzIsMjMgKzI3NSwzMSBAQAogYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6Ok5lZWRzRGVwbG95KAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBjb25maWcpIGNvbnN0CiB7Ci0gIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0eXBlID0gdGFyZ2V0LkdldFR5cGUoKTsKLSAgYm9vbCBub0RlcGxveSA9IERlcGxveUluaGliaXRlZCh0YXJnZXQsIGNvbmZpZyk7Ci0gIHJldHVybiAhbm9EZXBsb3kgJiYKLSAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgfHwKLSAgICAgdHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSAmJgotICAgIHRoaXMtPlRhcmdldFN5c3RlbVN1cHBvcnRzRGVwbG95bWVudCgpOwotfQorICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgY29uc3QgdHlwZSA9IHRhcmdldC5HZXRUeXBlKCk7CisgIGlmICh0eXBlICE9IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSAmJgorICAgICAgdHlwZSAhPSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7CisgICAgLy8gZGVwbG95bWVudCBvbmx5IHZhbGlkIG9uIGV4ZWN1dGFibGVzIGFuZCBzaGFyZWQgbGlicmFyaWVzLgorICAgIHJldHVybiBmYWxzZTsKKyAgfQogCi1ib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvcjo6RGVwbG95SW5oaWJpdGVkKAotICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBjb25maWcpIGNvbnN0Ci17Ci0gIGJvb2wgclZhbCA9IGZhbHNlOwotICBpZiAoY29uc3QgY2hhciogcHJvcCA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiVlNfTk9fU09MVVRJT05fREVQTE9ZIikpIHsKLSAgICByVmFsID0gY21Jc09uKAorICBpZiAoY29uc3QgY2hhciogcHJvcCA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiVlNfU09MVVRJT05fREVQTE9ZIikpIHsKKyAgICAvLyBJZiBzZXQsIGl0IGRpY3RhdGVzIGJlaGF2aW9yCisgICAgcmV0dXJuIGNtSXNPbigKICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUocHJvcCwgdGFyZ2V0LkxvY2FsR2VuZXJhdG9yLCBjb25maWcpKTsKICAgfQotICByZXR1cm4gclZhbDsKKworICAvLyBUbyBiZSBkZXByZWNhdGVkLCBkaXNhYmxlIGRlcGxveW1lbnQgZXZlbiBpZiB0YXJnZXQgc3VwcG9ydHMgaXQuCisgIGlmIChjb25zdCBjaGFyKiBwcm9wID0gdGFyZ2V0LkdldFByb3BlcnR5KCJWU19OT19TT0xVVElPTl9ERVBMT1kiKSkgeworICAgIGlmIChjbUlzT24oY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShwcm9wLCB0YXJnZXQuTG9jYWxHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZykpKSB7CisgICAgICAvLyBJZiB0cnVlLCBhbHdheXMgZGlzYWJsZSBkZXBsb3ltZW50CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgLy8gTGVnYWN5IGJlaGF2aW9yLCBlbmFibGVkIGRlcGxveW1lbnQgYmFzZWQgb24gJ2hhcmQtY29kZWQnIHRhcmdldAorICAvLyBwbGF0Zm9ybXMuCisgIHJldHVybiB0aGlzLT5UYXJnZXRTeXN0ZW1TdXBwb3J0c0RlcGxveW1lbnQoKTsKIH0KIAogYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OlRhcmdldFN5c3RlbVN1cHBvcnRzRGVwbG95bWVudCgpIGNvbnN0CkBAIC0zMDQsNyArMzE1LDcgQEAKIH0KIAogdm9pZCBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OldyaXRlUHJvamVjdERlcGVuZHMoCi0gIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmLCBjb25zdCBjaGFyKiwKKyAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiwKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGd0KQogewogICBUYXJnZXREZXBlbmRTZXQgY29uc3QmIHVub3JkZXJlZCA9IHRoaXMtPkdldFRhcmdldERpcmVjdERlcGVuZHMoZ3QpOwpAQCAtMzIyLDkgKzMzMywxMCBAQAogICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewogICAvLyBMb29rIGZvciB1dGlsaXR5IGRlcGVuZGVuY2llcyB0aGF0IG1hZ2ljYWxseSBsaW5rLgotICBmb3IgKEJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgdWkgOiB0YXJnZXQtPkdldFV0aWxpdGllcygpKSB7CisgIGZvciAoQlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4gY29uc3QmIHVpIDogdGFyZ2V0LT5HZXRVdGlsaXRpZXMoKSkgewogICAgIGlmIChjbUdlbmVyYXRvclRhcmdldCogZGVwVGFyZ2V0ID0KLSAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSh1aS5WYWx1ZSkpIHsKKyAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSgKKyAgICAgICAgICAgIHVpLlZhbHVlLmZpcnN0KSkgewogICAgICAgaWYgKGRlcFRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKICAgICAgICAgICBkZXBUYXJnZXQtPkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKSkgewogICAgICAgICAvLyBUaGlzIHV0aWxpdHkgZGVwZW5kZW5jeSBuYW1lcyBhbiBleHRlcm5hbCAudmNwcm9qIHRhcmdldC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaAppbmRleCAzNTJiYzNjLi42Y2U2N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oCkBAIC01NywxMCArNTcsNiBAQAogICB2aXJ0dWFsIGJvb2wgTmVlZHNEZXBsb3koY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3Q7CiAKLSAgLyoqIFJldHVybnMgdHJ1ZSBpZiBkZXBsb3ltZW50IGhhcyBiZWVuIGRpc2FibGVkIGluIGNtYWtlIGZpbGUuICovCi0gIGJvb2wgRGVwbG95SW5oaWJpdGVkKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3Q7Ci0KICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN5c3RlbSBzdXBwb3J0IGRlYnVnZ2luZyBkZXBsb3ltZW50LiAqLwogICB2aXJ0dWFsIGJvb2wgVGFyZ2V0U3lzdGVtU3VwcG9ydHNEZXBsb3ltZW50KCkgY29uc3Q7CiAKQEAgLTc0LDcgKzcwLDcgQEAKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGxhdGZvcm1NYXBwaW5nID0gIiIpIG92ZXJyaWRlOwogICBib29sIENvbXB1dGVUYXJnZXREZXBlbmRzKCkgb3ZlcnJpZGU7CiAgIHZvaWQgV3JpdGVQcm9qZWN0RGVwZW5kcyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHQpIG92ZXJyaWRlOwogCiAgIGJvb2wgVXNlRm9sZGVyUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5jeHgKaW5kZXggNmU2MWQyNi4uOWY3M2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPHV0aWxpdHk+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtMTMsNDMgKzE1LDQ2IEBACiBjbGFzcyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3I6OkZhY3RvcnkgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgaWYgKHN0cm5jbXAobmFtZS5jX3N0cigpLCB2czlnZW5lcmF0b3JOYW1lLAogICAgICAgICAgICAgICAgIHNpemVvZih2czlnZW5lcmF0b3JOYW1lKSAtIDEpICE9IDApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiBwID0gbmFtZS5jX3N0cigpICsgc2l6ZW9mKHZzOWdlbmVyYXRvck5hbWUpIC0gMTsKICAgICBpZiAocFswXSA9PSAnXDAnKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgIiIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoY20sIG5hbWUsICIiKSk7CiAgICAgfQogCiAgICAgaWYgKHBbMF0gIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogCiAgICAgKytwOwogCiAgICAgaWYgKCFzdHJjbXAocCwgIklBNjQiKSkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoY20sIG5hbWUsICJJdGFuaXVtIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgIkl0YW5pdW0iKSk7CiAgICAgfQogCiAgICAgaWYgKCFzdHJjbXAocCwgIldpbjY0IikpIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yKGNtLCBuYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgIng2NCIpKTsKICAgICB9CiAKICAgICBjbVZpc3VhbFN0dWRpb1dDRVBsYXRmb3JtUGFyc2VyIHBhcnNlcihwKTsKICAgICBwYXJzZXIuUGFyc2VWZXJzaW9uKCI5LjAiKTsKICAgICBpZiAoIXBhcnNlci5Gb3VuZCgpKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogCi0gICAgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yKiByZXQgPQotICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgcCk7CisgICAgYXV0byByZXQgPSBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yPigKKyAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoY20sIG5hbWUsIHApKTsKICAgICByZXQtPldpbmRvd3NDRVZlcnNpb24gPSBwYXJzZXIuR2V0T1NWZXJzaW9uKCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihzdGQ6Om1vdmUocmV0KSk7CiAgIH0KIAogICB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KSBjb25zdCBvdmVycmlkZQpAQCAtMTAzLDkgKzEwOCwxMCBAQAogICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldpbjMyIjsgfQogfTsKIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4KK2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCiB7Ci0gIHJldHVybiBuZXcgRmFjdG9yeTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KG5ldyBGYWN0b3J5KTsKIH0KIAogY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yOjpjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yLmgKaW5kZXggN2JlYmZkNi4uNTMzMThhNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IuaApAQCAtMyw2ICszLDggQEAKICNpZm5kZWYgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yX2gKICNkZWZpbmUgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oIgogCiAvKiogXGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcgpAQCAtMTMsNyArMTUsNyBAQAogY2xhc3MgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yIDogcHVibGljIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvcgogewogcHVibGljOgotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCk7CisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCk7CiAKICAgLyoqCiAgICAqIFdoZXJlIGRvZXMgdGhpcyB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8gbG9vayBmb3IgbWFjcm9zIGZvciB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4CmluZGV4IGVkMGNiYTcuLjFlYzE1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KIAogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgorI2luY2x1ZGUgPGNtL21lbW9yeT4KIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIApAQCAtMTk2LDEyICsxOTcsMTIgQEAKICAgICBpZiAoIWdlbi5lbXB0eSgpKSB7CiAgICAgICAvLyBVc2Ugbm8gYWN0dWFsIGNvbW1hbmQgbGluZXMgc28gdGhhdCB0aGUgdGFyZ2V0IGl0c2VsZiBpcyBub3QKICAgICAgIC8vIGNvbnNpZGVyZWQgYWx3YXlzIG91dCBvZiBkYXRlLgotICAgICAgY21UYXJnZXQqIGFsbEJ1aWxkID0gZ2VuWzBdLT5HZXRNYWtlZmlsZSgpLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICAgICAgIkFMTF9CVUlMRCIsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0cnVlLCBub193b3JraW5nX2RpciwKLSAgICAgICAgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywgbm9fY29tbWFuZHMsIGZhbHNlLCAiQnVpbGQgYWxsIHByb2plY3RzIik7CisgICAgICBjbVRhcmdldCogYWxsQnVpbGQgPSBnZW5bMF0tPkFkZFV0aWxpdHlDb21tYW5kKAorICAgICAgICAiQUxMX0JVSUxEIiwgdHJ1ZSwgbm9fd29ya2luZ19kaXIsIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCisgICAgICAgIG5vX2NvbW1hbmRzLCBmYWxzZSwgIkJ1aWxkIGFsbCBwcm9qZWN0cyIpOwogCi0gICAgICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSBuZXcgY21HZW5lcmF0b3JUYXJnZXQoYWxsQnVpbGQsIGdlblswXSk7Ci0gICAgICBnZW5bMF0tPkFkZEdlbmVyYXRvclRhcmdldChndCk7CisgICAgICBnZW5bMF0tPkFkZEdlbmVyYXRvclRhcmdldCgKKyAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0PihhbGxCdWlsZCwgZ2VuWzBdKSk7CiAKICAgICAgIC8vCiAgICAgICAvLyBPcmdhbml6ZSBpbiB0aGUgInByZWRlZmluZWQgdGFyZ2V0cyIgZm9sZGVyOgpAQCAtMjEyLDEzICsyMTMsMTMgQEAKIAogICAgICAgLy8gTm93IG1ha2UgYWxsIHRhcmdldHMgZGVwZW5kIG9uIHRoZSBBTExfQlVJTEQgdGFyZ2V0CiAgICAgICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGkgOiBnZW4pIHsKLSAgICAgICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGd0IDogaS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGd0IDogaS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICAgICAgaWYgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCB8fAogICAgICAgICAgICAgICB0Z3QtPklzSW1wb3J0ZWQoKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmICghdGhpcy0+SXNFeGNsdWRlZChnZW5bMF0sIHRndCkpIHsKLSAgICAgICAgICAgIGFsbEJ1aWxkLT5BZGRVdGlsaXR5KHRndC0+R2V0TmFtZSgpKTsKKyAgICAgICAgICBpZiAoIXRoaXMtPklzRXhjbHVkZWQoZ2VuWzBdLCB0Z3QuZ2V0KCkpKSB7CisgICAgICAgICAgICBhbGxCdWlsZC0+QWRkVXRpbGl0eSh0Z3QtPkdldE5hbWUoKSwgZmFsc2UpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMzA3LDcgKzMwOCw3IEBACiAgIGlmICghZGlyLmVtcHR5KCkpIHsKICAgICBzdGQ6OnN0cmluZyBtYWNyb3NGaWxlID0gZGlyICsgIi9DTWFrZU1hY3Jvcy8iIENNQUtFX1ZTTUFDUk9TX0ZJTEVOQU1FOwogICAgIHN0ZDo6c3RyaW5nIG5leHRTdWJrZXlOYW1lOwotICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKG1hY3Jvc0ZpbGUuY19zdHIoKSkgJiYKKyAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhtYWNyb3NGaWxlKSAmJgogICAgICAgICBJc1Zpc3VhbFN0dWRpb01hY3Jvc0ZpbGVSZWdpc3RlcmVkKAogICAgICAgICAgIG1hY3Jvc0ZpbGUsIHRoaXMtPkdldFVzZXJNYWNyb3NSZWdLZXlCYXNlKCksIG5leHRTdWJrZXlOYW1lKSkgewogICAgICAgaWYgKG0gPT0gTWFjcm9SZWxvYWQpIHsKQEAgLTM4OSw4ICszOTAsOCBAQAogICB9CiAgIGZvciAoYXV0byBjb25zdCYgaXQgOiB0aGlzLT5Qcm9qZWN0TWFwKSB7CiAgICAgZm9yIChjb25zdCBjbUxvY2FsR2VuZXJhdG9yKiBpIDogaXQuc2Vjb25kKSB7Ci0gICAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0aSA6IGktPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewotICAgICAgICB0aGlzLT5Db21wdXRlVlNUYXJnZXREZXBlbmRzKHRpKTsKKyAgICAgIGZvciAoY29uc3QgYXV0byYgdGkgOiBpLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICAgICAgdGhpcy0+Q29tcHV0ZVZTVGFyZ2V0RGVwZW5kcyh0aS5nZXQoKSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC01OTIsNyArNTkzLDcgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZXBhdGg7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVwYXRobmFtZTsKICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZXBhdGhwYXRoOwotICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsbmFtZS5jX3N0cigpKSkgeworICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsbmFtZSkpIHsKICAgICAgICAgICBmaWxlbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsbmFtZSk7CiAgICAgICAgICAgZmlsZXBhdGggPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoZnVsbG5hbWUpOwogICAgICAgICAgIGZpbGVwYXRobmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlcGF0aCk7CkBAIC03OTksMTkgKzgwMCw5IEBACiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpUYXJnZXRJc0ZvcnRyYW5Pbmx5KAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogZ3QpCiB7Ci0gIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgZm9ydHJhbiBidWlsZAotICB7Ci0gICAgLy8gSXNzdWUgZGlhZ25vc3RpYyBpZiB0aGUgc291cmNlIGZpbGVzIGRlcGVuZCBvbiB0aGUgY29uZmlnLgotICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7Ci0gICAgaWYgKCFndC0+R2V0Q29uZmlnQ29tbW9uU291cmNlRmlsZXMoc291cmNlcykpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQogICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHNvdXJjZSBsYW5ndWFnZSwgRm9ydHJhbiBoYXMgdG8gYmUgdXNlZAogICAvLyBpbiBvcmRlciBmb3IgdGhlIHNvdXJjZXMgdG8gY29tcGlsZS4KLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGxhbmd1YWdlczsKLSAgZ3QtPkdldExhbmd1YWdlcyhsYW5ndWFnZXMsICIiKTsKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGxhbmd1YWdlcyA9IGd0LT5HZXRBbGxDb25maWdDb21waWxlTGFuZ3VhZ2VzKCk7CiAgIC8vIENvbnNpZGVyIGFuIGV4cGxpY2l0IGxpbmtlciBsYW5ndWFnZSBwcm9wZXJ0eSwgYnV0ICpub3QqIHRoZQogICAvLyBjb21wdXRlZCBsaW5rZXIgbGFuZ3VhZ2UgdGhhdCBtYXkgZGVwZW5kIG9uIGxpbmtlZCB0YXJnZXRzLgogICAvLyBUaGlzIGFsbG93cyB0aGUgcHJvamVjdCB0byBjb250cm9sIHRoZSBsYW5ndWFnZSBjaG9pY2UgaW4KQEAgLTkyNiw3ICs5MTcsNyBAQAogICAgICAgc3RkOjpzdHJpbmcgb2JqRmlsZSA9IGl0OwogICAgICAgLy8gcmVwbGFjZSAkKENvbmZpZ3VyYXRpb25OYW1lKSBpbiB0aGUgb2JqZWN0IG5hbWVzCiAgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKG9iakZpbGUsIHRoaXMtPkdldENNYWtlQ0ZHSW50RGlyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ05hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ05hbWUpOwogICAgICAgaWYgKGNtSGFzTGl0ZXJhbFN1ZmZpeChvYmpGaWxlLCAiLm9iaiIpKSB7CiAgICAgICAgIGZvdXQgPDwgb2JqRmlsZSA8PCAiXG4iOwogICAgICAgfQpAQCAtOTM5LDkgKzkzMCwxMCBAQAogCiAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lcyA9IGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKAogICAgIHsgY21ha2VDb21tYW5kLCAiLUUiLCAiX19jcmVhdGVfZGVmIiwgbWRpLT5EZWZGaWxlLCBvYmpzX2ZpbGUgfSk7Ci0gIGNtQ3VzdG9tQ29tbWFuZCBjb21tYW5kKGd0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCksIG91dHB1dHMsIGVtcHR5LCBlbXB0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZExpbmVzLCAiQXV0byBidWlsZCBkbGwgZXhwb3J0cyIsICIuIik7Ci0gIGNvbW1hbmRzLnB1c2hfYmFjayhjb21tYW5kKTsKKyAgY21DdXN0b21Db21tYW5kIGNvbW1hbmQob3V0cHV0cywgZW1wdHksIGVtcHR5LCBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGd0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldEJhY2t0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQXV0byBidWlsZCBkbGwgZXhwb3J0cyIsICIuIik7CisgIGNvbW1hbmRzLnB1c2hfYmFjayhzdGQ6Om1vdmUoY29tbWFuZCkpOwogfQogCiBzdGF0aWMgYm9vbCBPcGVuU29sdXRpb24oc3RkOjpzdHJpbmcgc2xuKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuaAppbmRleCA0ZjIwMDdmLi4yOWE1YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuaApAQCAtMTUwLDYgKzE1MCw4IEBACiAgIGJvb2wgT3Blbihjb25zdCBzdGQ6OnN0cmluZyYgYmluZGlyLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvamVjdE5hbWUsCiAgICAgICAgICAgICBib29sIGRyeVJ1bikgb3ZlcnJpZGU7CiAKKyAgYm9vbCBJc1Zpc3VhbFN0dWRpbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogcHJvdGVjdGVkOgogICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcihjbWFrZSogY20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwbGF0Zm9ybUluR2VuZXJhdG9yTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmN4eAppbmRleCBhMzcxNjMzLi4xM2FlMzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5jeHgKQEAgLTEyMSwzMCArMTIxLDMzIEBACiAgIDogcHVibGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeQogewogcHVibGljOgotICBjbUdsb2JhbEdlbmVyYXRvciogQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYWtlKiBjbSkgY29uc3Qgb3ZlcnJpZGUKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtYWtlKiBjbSkgY29uc3Qgb3ZlcnJpZGUKICAgewogICAgIHN0ZDo6c3RyaW5nIGdlbk5hbWU7CiAgICAgY29uc3QgY2hhciogcCA9IGNtVlMxNUdlbk5hbWUobmFtZSwgZ2VuTmFtZSk7CiAgICAgaWYgKCFwKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmICghKnApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IoCi0gICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE1LCBjbSwgZ2VuTmFtZSwgIiIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKKyAgICAgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNSwgY20sIGdlbk5hbWUsICIiKSk7CiAgICAgfQogICAgIGlmICgqcCsrICE9ICcgJykgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJXaW42NCIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IoCi0gICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE1LCBjbSwgZ2VuTmFtZSwgIng2NCIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKKyAgICAgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNSwgY20sIGdlbk5hbWUsICJ4NjQiKSk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIkFSTSIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IoCi0gICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE1LCBjbSwgZ2VuTmFtZSwgIkFSTSIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKKyAgICAgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNSwgY20sIGdlbk5hbWUsICJBUk0iKSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgIH0KIAogICB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KSBjb25zdCBvdmVycmlkZQpAQCAtMTg1LDEwICsxODgsMTAgQEAKICAgc3RkOjpzdHJpbmcgR2V0RGVmYXVsdFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXaW4zMiI7IH0KIH07CiAKLWNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSoKK3N0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+CiBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcjo6TmV3RmFjdG9yeTE1KCkKIHsKLSAgcmV0dXJuIG5ldyBGYWN0b3J5MTU7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PihuZXcgRmFjdG9yeTE1KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgdnMxNmdlbmVyYXRvck5hbWVbXSA9ICJWaXN1YWwgU3R1ZGlvIDE2IDIwMTkiOwpAQCAtMjEyLDE5ICsyMTUsMjAgQEAKICAgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgc3RkOjpzdHJpbmcgZ2VuTmFtZTsKICAgICBjb25zdCBjaGFyKiBwID0gY21WUzE2R2VuTmFtZShuYW1lLCBnZW5OYW1lKTsKICAgICBpZiAoIXApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAgICAgaWYgKCEqcCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKLSAgICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTYsIGNtLCBnZW5OYW1lLCAiIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAorICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE2LCBjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgfQogCiAgIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpIGNvbnN0IG92ZXJyaWRlCkBAIC0yNjUsMTAgKzI2OSwxMCBAQAogICB9CiB9OwogCi1jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqCitzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PgogY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkxNigpCiB7Ci0gIHJldHVybiBuZXcgRmFjdG9yeTE2OworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4obmV3IEZhY3RvcnkxNik7CiB9CiAKIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKaW5kZXggNDY2ODE2Yi4uYWJiNjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5oIgpAQCAtMTksOCArMjAsOCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yCiB7CiBwdWJsaWM6Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkxNSgpOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5MTYoKTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkxNSgpOworICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeTE2KCk7CiAKICAgYm9vbCBNYXRjaGVzR2VuZXJhdG9yTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvci5oCmluZGV4IDY0YWNlMTMuLmMwZGFmOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC0yNSw5ICsyNiwxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yKGNtYWtlKiBjbSk7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvcj4oKSk7CiAgIH0KICAgLy8hIEdldCB0aGUgbmFtZSBmb3IgdGhlIGdlbmVyYXRvci4KICAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5jeHgKaW5kZXggYWVlNDc1Yi4uMWMxYWFhZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsWENvZGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmN4eApAQCAtMiwxMyArMiwxNiBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HbG9iYWxYQ29kZUdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9tYW5pcD4KICNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCkBAIC0zMSw2ICszNCw3IEBACiAjaW5jbHVkZSAiY21Tb3VyY2VHcm91cC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21UYXJnZXQuaCIKICNpbmNsdWRlICJjbVhDb2RlMjFPYmplY3QuaCIKQEAgLTEyOSw4ICsxMzMsOCBAQAogY2xhc3MgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6RmFjdG9yeSA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZTsKIAogICB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KSBjb25zdCBvdmVycmlkZQogICB7CkBAIC0xNzksMTYgKzE4MywxNyBAQAogICBjbS0+R2V0U3RhdGUoKS0+U2V0SXNHZW5lcmF0b3JNdWx0aUNvbmZpZyh0cnVlKTsKIH0KIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKK3N0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQogewotICByZXR1cm4gbmV3IEZhY3Rvcnk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PihuZXcgRmFjdG9yeSk7CiB9CiAKLWNtR2xvYmFsR2VuZXJhdG9yKiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpGYWN0b3J5OjpDcmVhdGVHbG9iYWxHZW5lcmF0b3IoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+CitjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpGYWN0b3J5OjpDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdAogewogICBpZiAobmFtZSAhPSBHZXRBY3R1YWxOYW1lKCkpIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogICBjbVhjb2RlVmVyc2lvblBhcnNlciBwYXJzZXI7CkBAIC0yMjQsMTYgKzIyOSwxNyBAQAogICBpZiAodmVyc2lvbl9udW1iZXIgPCA1MCkgewogICAgIGNtLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgIlhjb2RlICIgKyB2ZXJzaW9uX3N0cmluZyArICIgbm90IHN1cHBvcnRlZC4iKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAKLSAgYXV0byBnZyA9IGNtOjptYWtlX3VuaXF1ZTxjbUdsb2JhbFhDb2RlR2VuZXJhdG9yPihjbSwgdmVyc2lvbl9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9udW1iZXIpOwotICByZXR1cm4gZ2cucmVsZWFzZSgpOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21HbG9iYWxYQ29kZUdlbmVyYXRvcj4oY20sIHZlcnNpb25fc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX251bWJlcikpOwogI2Vsc2UKICAgc3RkOjpjZXJyIDw8ICJDTWFrZSBzaG91bGQgYmUgYnVpbHQgd2l0aCBjbWFrZSB0byB1c2UgWGNvZGUsICIKICAgICAgICAgICAgICAgICJkZWZhdWx0IHRvIFhjb2RlIDEuNVxuIjsKLSAgcmV0dXJuIG5ldyBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yKGNtKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsWENvZGVHZW5lcmF0b3I+KGNtKSk7CiAjZW5kaWYKIH0KIApAQCAtMjY3LDcgKzI3Myw3IEBACiB9CiAKIGJvb2wgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6U2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBidWlsZCwgY21NYWtlZmlsZSogbWYpCiB7CiAgIGlmICh0cy5maW5kX2ZpcnN0X29mKCIsPSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CkBAIC0yODMsNiArMjg5LDkgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgdGhpcy0+R2VuZXJhdG9yVG9vbHNldCA9IHRzOworICBpZiAoYnVpbGQpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogICBpZiAoIXRoaXMtPkdlbmVyYXRvclRvb2xzZXQuZW1wdHkoKSkgewogICAgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9YQ09ERV9QTEFURk9STV9UT09MU0VUIiwgdGhpcy0+R2VuZXJhdG9yVG9vbHNldCk7CiAgIH0KQEAgLTM4OCw5ICszOTcsMTEgQEAKIH0KIAogLy8hIENyZWF0ZSBhIGxvY2FsIGdlbmVyYXRvciBhcHByb3ByaWF0ZSB0byB0aGlzIEdsb2JhbCBHZW5lcmF0b3IKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQorc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICBjbU1ha2VmaWxlKiBtZikKIHsKLSAgcmV0dXJuIG5ldyBjbUxvY2FsWENvZGVHZW5lcmF0b3IodGhpcywgbWYpOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUxvY2FsWENvZGVHZW5lcmF0b3I+KHRoaXMsIG1mKSk7CiB9CiAKIHZvaWQgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6QWRkRXh0cmFJREVUYXJnZXRzKCkKQEAgLTQwOSwxMCArNDIwLDEwIEBACiB7CiAgIHNpemVfdCBpbmRleCA9IDA7CiAgIGF1dG8gY29uc3QmIGxnZW5zID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGdlbiA6IGxnZW5zKSB7Ci0gICAgYXV0byBjb25zdCYgdGFyZ2V0cyA9IGxnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBndCA6IHRhcmdldHMpIHsKLSAgICAgIHRoaXMtPkNvbXB1dGVUYXJnZXRPcmRlcihndCwgaW5kZXgpOworICBmb3IgKGF1dG8gY29uc3QmIGxnZW4gOiBsZ2VucykgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZ2VuLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBndCA6IHRhcmdldHMpIHsKKyAgICAgIHRoaXMtPkNvbXB1dGVUYXJnZXRPcmRlcihndC5nZXQoKSwgaW5kZXgpOwogICAgIH0KICAgfQogICBhc3NlcnQoaW5kZXggPT0gdGhpcy0+VGFyZ2V0T3JkZXJJbmRleC5zaXplKCkpOwpAQCAtNDk2LDIwICs1MDcsMTYgQEAKIHZvaWQgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6QWRkRXh0cmFUYXJnZXRzKAogICBjbUxvY2FsR2VuZXJhdG9yKiByb290LCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIGdlbnMpCiB7Ci0gIGNtTWFrZWZpbGUqIG1mID0gcm9vdC0+R2V0TWFrZWZpbGUoKTsKLQogICBjb25zdCBjaGFyKiBub193b3JraW5nX2RpcmVjdG9yeSA9IG51bGxwdHI7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwZW5kczsKIAogICAvLyBBZGQgQUxMX0JVSUxECi0gIGNtVGFyZ2V0KiBhbGxidWlsZCA9IG1mLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICAiQUxMX0JVSUxEIiwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIHRydWUsIG5vX3dvcmtpbmdfZGlyZWN0b3J5LAotICAgIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCisgIGNtVGFyZ2V0KiBhbGxidWlsZCA9IHJvb3QtPkFkZFV0aWxpdHlDb21tYW5kKAorICAgICJBTExfQlVJTEQiLCB0cnVlLCBub193b3JraW5nX2RpcmVjdG9yeSwgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywKICAgICBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSh7ICJlY2hvIiwgIkJ1aWxkIGFsbCBwcm9qZWN0cyIgfSkpOwogCi0gIGNtR2VuZXJhdG9yVGFyZ2V0KiBhbGxCdWlsZEd0ID0gbmV3IGNtR2VuZXJhdG9yVGFyZ2V0KGFsbGJ1aWxkLCByb290KTsKLSAgcm9vdC0+QWRkR2VuZXJhdG9yVGFyZ2V0KGFsbEJ1aWxkR3QpOworICByb290LT5BZGRHZW5lcmF0b3JUYXJnZXQoY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0PihhbGxidWlsZCwgcm9vdCkpOwogCiAgIC8vIEFkZCBYQ09ERSBkZXBlbmQgaGVscGVyCiAgIHN0ZDo6c3RyaW5nIGRpciA9IHJvb3QtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKQEAgLTUyMCw1MiArNTI3LDUzIEBACiAgIC8vIEFkZCBaRVJPX0NIRUNLCiAgIGJvb2wgcmVnZW5lcmF0ZSA9ICF0aGlzLT5HbG9iYWxTZXR0aW5nSXNPbigiQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OIik7CiAgIGJvb2wgZ2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5ID0KLSAgICBtZi0+SXNPbigiQ01BS0VfWENPREVfR0VORVJBVEVfVE9QX0xFVkVMX1BST0pFQ1RfT05MWSIpOworICAgIHJvb3QtPkdldE1ha2VmaWxlKCktPklzT24oIkNNQUtFX1hDT0RFX0dFTkVSQVRFX1RPUF9MRVZFTF9QUk9KRUNUX09OTFkiKTsKICAgYm9vbCBpc1RvcExldmVsID0KICAgICAhcm9vdC0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldEJ1aWxkc3lzdGVtRGlyZWN0b3J5UGFyZW50KCkuSXNWYWxpZCgpOwotICBpZiAocmVnZW5lcmF0ZSAmJiAoaXNUb3BMZXZlbCB8fCAhZ2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5KSkgeworICBib29sIGlzR2VuZXJhdGVQcm9qZWN0ID0gaXNUb3BMZXZlbCB8fCAhZ2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5OworICBpZiAocmVnZW5lcmF0ZSAmJiBpc0dlbmVyYXRlUHJvamVjdCkgewogICAgIHRoaXMtPkNyZWF0ZVJlUnVuQ01ha2VGaWxlKHJvb3QsIGdlbnMpOwogICAgIHN0ZDo6c3RyaW5nIGZpbGUgPQogICAgICAgdGhpcy0+Q29udmVydFRvUmVsYXRpdmVGb3JNYWtlKHRoaXMtPkN1cnJlbnRSZVJ1bkNNYWtlTWFrZWZpbGUpOwogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoZmlsZSwgIlxcICIsICIgIik7Ci0gICAgY21UYXJnZXQqIGNoZWNrID0gbWYtPkFkZFV0aWxpdHlDb21tYW5kKAotICAgICAgQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIHRydWUsCi0gICAgICBub193b3JraW5nX2RpcmVjdG9yeSwgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywKLSAgICAgIGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKHsgIm1ha2UiLCAiLWYiLCBmaWxlIH0pKTsKKyAgICBjbVRhcmdldCogY2hlY2sgPQorICAgICAgcm9vdC0+QWRkVXRpbGl0eUNvbW1hbmQoQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoeyAibWFrZSIsICItZiIsIGZpbGUgfSkpOwogCi0gICAgY21HZW5lcmF0b3JUYXJnZXQqIGNoZWNrR3QgPSBuZXcgY21HZW5lcmF0b3JUYXJnZXQoY2hlY2ssIHJvb3QpOwotICAgIHJvb3QtPkFkZEdlbmVyYXRvclRhcmdldChjaGVja0d0KTsKKyAgICByb290LT5BZGRHZW5lcmF0b3JUYXJnZXQoY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0PihjaGVjaywgcm9vdCkpOwogICB9CiAKICAgLy8gbm93IG1ha2UgdGhlIGFsbGJ1aWxkIGRlcGVuZCBvbiBhbGwgdGhlIG5vbi11dGlsaXR5IHRhcmdldHMKICAgLy8gaW4gdGhlIHByb2plY3QKICAgZm9yIChhdXRvJiBnZW4gOiBnZW5zKSB7Ci0gICAgZm9yIChhdXRvIHRhcmdldCA6IGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAogICAgICAgaWYgKHJlZ2VuZXJhdGUgJiYKICAgICAgICAgICAodGFyZ2V0LT5HZXROYW1lKCkgIT0gQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCkpIHsKLSAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkoQ01BS0VfQ0hFQ0tfQlVJTERfU1lTVEVNX1RBUkdFVCk7CisgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQsIGZhbHNlKTsKICAgICAgIH0KIAogICAgICAgLy8gbWFrZSBhbGwgZXhlLCBzaGFyZWQgbGlicyBhbmQgbW9kdWxlcwogICAgICAgLy8gcnVuIHRoZSBkZXBlbmQgY2hlY2sgbWFrZWZpbGUgYXMgYSBwb3N0IGJ1aWxkIHJ1bGUKICAgICAgIC8vIHRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB3aGVuIHRoZSBuZXh0IHRhcmdldCBpcyBidWlsdAogICAgICAgLy8gdGhpbmdzIGFyZSB1cC10by1kYXRlCi0gICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgeworICAgICAgaWYgKGlzR2VuZXJhdGVQcm9qZWN0ICYmCisgICAgICAgICAgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgewogICAgICAgICBjb21tYW5kTGluZXMuZnJvbnQoKS5iYWNrKCkgPSAvLyBmaWxsIHBsYWNlaG9sZGVyCiAgICAgICAgICAgdGhpcy0+UG9zdEJ1aWxkTWFrZVRhcmdldCh0YXJnZXQtPkdldE5hbWUoKSwgIiQoQ09ORklHVVJBVElPTikiKTsKLSAgICAgICAgZ2VuLT5HZXRNYWtlZmlsZSgpLT5BZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoCisgICAgICAgIGdlbi0+QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAogICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLCBjb21tYW5kTGluZXMsCiAgICAgICAgICAgY21DdXN0b21Db21tYW5kVHlwZTo6UE9TVF9CVUlMRCwgIkRlcGVuZCBjaGVjayBmb3IgeGNvZGUiLAogICAgICAgICAgIGRpci5jX3N0cigpLCB0cnVlLCBmYWxzZSwgIiIsICIiLCBmYWxzZSwKICAgICAgICAgICBjbU9iamVjdExpYnJhcnlDb21tYW5kczo6QWNjZXB0KTsKICAgICAgIH0KIAotICAgICAgaWYgKCF0aGlzLT5Jc0V4Y2x1ZGVkKGdlbnNbMF0sIHRhcmdldCkpIHsKLSAgICAgICAgYWxsYnVpbGQtPkFkZFV0aWxpdHkodGFyZ2V0LT5HZXROYW1lKCkpOworICAgICAgaWYgKCF0aGlzLT5Jc0V4Y2x1ZGVkKGdlbnNbMF0sIHRhcmdldC5nZXQoKSkpIHsKKyAgICAgICAgYWxsYnVpbGQtPkFkZFV0aWxpdHkodGFyZ2V0LT5HZXROYW1lKCksIGZhbHNlKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTU3Niw3ICs1ODQsNyBAQAogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGZpbGVzOwogICBmb3IgKGF1dG8gZ2VuIDogZ2VucykgewotICAgIGNtQXBwZW5kKGxmaWxlcywgZ2VuLT5HZXRNYWtlZmlsZSgpLT5HZXRMaXN0RmlsZXMoKSk7CisgICAgY206OmFwcGVuZChsZmlsZXMsIGdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0TGlzdEZpbGVzKCkpOwogICB9CiAKICAgLy8gc29ydCB0aGUgYXJyYXkKQEAgLTYzNiw3ICs2NDQsOCBAQAogICAgICAgICAgICAgICAgICA8PCAiXG4iOwogfQogCi1zdGF0aWMgYm9vbCBvYmplY3RJZExlc3NUaGFuKGNtWENvZGVPYmplY3QqIGwsIGNtWENvZGVPYmplY3QqIHIpCitzdGF0aWMgYm9vbCBvYmplY3RJZExlc3NUaGFuKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0PiYgbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+JiByKQogewogICByZXR1cm4gbC0+R2V0SWQoKSA8IHItPkdldElkKCk7CiB9CkBAIC02NTAsOSArNjU5LDYgQEAKIHZvaWQgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q2xlYXJYQ29kZU9iamVjdHMoKQogewogICB0aGlzLT5UYXJnZXREb25lU2V0LmNsZWFyKCk7Ci0gIGZvciAoYXV0byYgb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7Ci0gICAgZGVsZXRlIG9iajsKLSAgfQogICB0aGlzLT5YQ29kZU9iamVjdHMuY2xlYXIoKTsKICAgdGhpcy0+WENvZGVPYmplY3RJRHMuY2xlYXIoKTsKICAgdGhpcy0+WENvZGVPYmplY3RNYXAuY2xlYXIoKTsKQEAgLTY2Miw3ICs2NjgsNyBAQAogICB0aGlzLT5GaWxlUmVmcy5jbGVhcigpOwogfQogCi12b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OmFkZE9iamVjdChjbVhDb2RlT2JqZWN0KiBvYmopCit2b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OmFkZE9iamVjdChzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4gb2JqKQogewogICBpZiAob2JqLT5HZXRUeXBlKCkgPT0gY21YQ29kZU9iamVjdDo6T0JKRUNUKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkID0gb2JqLT5HZXRJZCgpOwpAQCAtNjc3LDIyICs2ODMsMjQgQEAKICAgICB0aGlzLT5YQ29kZU9iamVjdElEcy5pbnNlcnQoaWQpOwogICB9CiAKLSAgdGhpcy0+WENvZGVPYmplY3RzLnB1c2hfYmFjayhvYmopOworICB0aGlzLT5YQ29kZU9iamVjdHMucHVzaF9iYWNrKHN0ZDo6bW92ZShvYmopKTsKIH0KIAogY21YQ29kZU9iamVjdCogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q3JlYXRlT2JqZWN0KAogICBjbVhDb2RlT2JqZWN0OjpQQlhUeXBlIHB0eXBlKQogewotICBjbVhDb2RlT2JqZWN0KiBvYmogPSBuZXcgY21YQ29kZTIxT2JqZWN0KHB0eXBlLCBjbVhDb2RlT2JqZWN0OjpPQkpFQ1QpOwotICB0aGlzLT5hZGRPYmplY3Qob2JqKTsKLSAgcmV0dXJuIG9iajsKKyAgYXV0byBvYmogPSBjbTo6bWFrZV91bmlxdWU8Y21YQ29kZTIxT2JqZWN0PihwdHlwZSwgY21YQ29kZU9iamVjdDo6T0JKRUNUKTsKKyAgYXV0byBwdHIgPSBvYmouZ2V0KCk7CisgIHRoaXMtPmFkZE9iamVjdChzdGQ6Om1vdmUob2JqKSk7CisgIHJldHVybiBwdHI7CiB9CiAKIGNtWENvZGVPYmplY3QqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpUeXBlIHR5cGUpCiB7Ci0gIGNtWENvZGVPYmplY3QqIG9iaiA9IG5ldyBjbVhDb2RlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok5vbmUsIHR5cGUpOwotICB0aGlzLT5hZGRPYmplY3Qob2JqKTsKLSAgcmV0dXJuIG9iajsKKyAgYXV0byBvYmogPSBjbTo6bWFrZV91bmlxdWU8Y21YQ29kZU9iamVjdD4oY21YQ29kZU9iamVjdDo6Tm9uZSwgdHlwZSk7CisgIGF1dG8gcHRyID0gb2JqLmdldCgpOworICB0aGlzLT5hZGRPYmplY3Qoc3RkOjptb3ZlKG9iaikpOworICByZXR1cm4gcHRyOwogfQogCiBjbVhDb2RlT2JqZWN0KiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpDcmVhdGVTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMpCkBAIC0xMDkzLDggKzExMDEsOCBAQAogICBjbUxvY2FsR2VuZXJhdG9yKiBnZW4sIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiYgdGFyZ2V0cykKIHsKICAgdGhpcy0+U2V0Q3VycmVudExvY2FsR2VuZXJhdG9yKGdlbik7Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gZ3RzID0KLSAgICB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiBndHM7CisgIGNtOjphcHBlbmQoZ3RzLCB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSk7CiAgIHN0ZDo6c29ydChndHMuYmVnaW4oKSwgZ3RzLmVuZCgpLAogICAgICAgICAgICAgW3RoaXNdKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBsLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogcikgewogICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+VGFyZ2V0T3JkZXJJbmRleFtsXSA8IHRoaXMtPlRhcmdldE9yZGVySW5kZXhbcl07CkBAIC0xMzY0LDExICsxMzcyLDExIEBACiAKIHZvaWQgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Rm9yY2VMaW5rZXJMYW5ndWFnZXMoKQogewotICBmb3IgKGF1dG8gbG9jYWxHZW5lcmF0b3IgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbmVyYXRvciA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIC8vIEFsbCB0YXJnZXRzIGRlcGVuZCBvbiB0aGUgYnVpbGQtc3lzdGVtIGNoZWNrIHRhcmdldC4KLSAgICBmb3IgKGF1dG8gdGd0IDogbG9jYWxHZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgdGd0IDogbG9jYWxHZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIGFsbCB0YXJnZXRzIGxpbmsgdXNpbmcgdGhlIHByb3BlciBsYW5ndWFnZS4KLSAgICAgIHRoaXMtPkZvcmNlTGlua2VyTGFuZ3VhZ2UodGd0KTsKKyAgICAgIHRoaXMtPkZvcmNlTGlua2VyTGFuZ3VhZ2UodGd0LmdldCgpKTsKICAgICB9CiAgIH0KIH0KQEAgLTE0NjAsMTIgKzE0NjgsMTIgQEAKICAgICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICItRSIsICJjbWFrZV9zeW1saW5rX2xpYnJhcnkiLAogICAgICAgICBzdHJfZmlsZSwgc3RyX3NvX2ZpbGUsIHN0cl9saW5rX2ZpbGUgfSk7CiAKLSAgICBjbUN1c3RvbUNvbW1hbmQgY29tbWFuZCh0aGlzLT5DdXJyZW50TWFrZWZpbGUsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCBjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNyZWF0aW5nIHN5bWxpbmtzIiwgIiIpOworICAgIGNtQ3VzdG9tQ29tbWFuZCBjb21tYW5kKAorICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLAorICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksIGNtZCwgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKSwKKyAgICAgICJDcmVhdGluZyBzeW1saW5rcyIsICIiKTsKIAotICAgIHBvc3RidWlsZC5wdXNoX2JhY2soY29tbWFuZCk7CisgICAgcG9zdGJ1aWxkLnB1c2hfYmFjayhzdGQ6Om1vdmUoY29tbWFuZCkpOwogICB9CiAKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gY2xhc3NlczsKQEAgLTIzNTMsOSArMjM2MSw2IEBACiAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiU0VDVE9SREVSX0ZMQUdTIiwgdGhpcy0+Q3JlYXRlU3RyaW5nKCIiKSk7CiAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiVVNFX0hFQURFUk1BUCIsIHRoaXMtPkNyZWF0ZVN0cmluZygiTk8iKSk7CiAgIGNtWENvZGVPYmplY3QqIGdyb3VwID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKLSAgZ3JvdXAtPkFkZE9iamVjdCh0aGlzLT5DcmVhdGVTdHJpbmcoIi1XbW9zdCIpKTsKLSAgZ3JvdXAtPkFkZE9iamVjdCh0aGlzLT5DcmVhdGVTdHJpbmcoIi1Xbm8tZm91ci1jaGFyLWNvbnN0YW50cyIpKTsKLSAgZ3JvdXAtPkFkZE9iamVjdCh0aGlzLT5DcmVhdGVTdHJpbmcoIi1Xbm8tdW5rbm93bi1wcmFnbWFzIikpOwogICBncm91cC0+QWRkT2JqZWN0KHRoaXMtPkNyZWF0ZVN0cmluZygiJChpbmhlcml0ZWQpIikpOwogICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIldBUk5JTkdfQ0ZMQUdTIiwgZ3JvdXApOwogCkBAIC0yMzY1LDggKzIzNzAsOSBAQAogICAgIGludCBtaW5vcjsKICAgICBpbnQgcGF0Y2g7CiAKLSAgICAvLyBWRVJTSU9OIC0+IGN1cnJlbnRfdmVyc2lvbgotICAgIGd0Z3QtPkdldFRhcmdldFZlcnNpb24oZmFsc2UsIG1ham9yLCBtaW5vciwgcGF0Y2gpOworICAgIC8vIE1BQ0hPX0NVUlJFTlRfVkVSU0lPTiBvciBWRVJTSU9OIC0+IGN1cnJlbnRfdmVyc2lvbgorICAgIGd0Z3QtPkdldFRhcmdldFZlcnNpb25GYWxsYmFjaygiTUFDSE9fQ1VSUkVOVF9WRVJTSU9OIiwgIlZFUlNJT04iLCBtYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3IsIHBhdGNoKTsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdjsKIAogICAgIC8vIFhjb2RlIGFsd2F5cyB3YW50cyBhdCBsZWFzdCAxLjAuMCBvciBub3RoaW5nCkBAIC0yMzc2LDggKzIzODIsOSBAQAogICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiRFlMSUJfQ1VSUkVOVF9WRVJTSU9OIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKHYuc3RyKCkpKTsKIAotICAgIC8vIFNPVkVSU0lPTiAtPiBjb21wYXRpYmlsaXR5X3ZlcnNpb24KLSAgICBndGd0LT5HZXRUYXJnZXRWZXJzaW9uKHRydWUsIG1ham9yLCBtaW5vciwgcGF0Y2gpOworICAgIC8vIE1BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTiBvciBTT1ZFUlNJT04gLT4gY29tcGF0aWJpbGl0eV92ZXJzaW9uCisgICAgZ3RndC0+R2V0VGFyZ2V0VmVyc2lvbkZhbGxiYWNrKCJNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04iLCAiU09WRVJTSU9OIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHZzbzsKIAogICAgIC8vIFhjb2RlIGFsd2F5cyB3YW50cyBhdCBsZWFzdCAxLjAuMCBvciBub3RoaW5nCkBAIC0yNDAxLDEyICsyNDA4LDEzIEBACiAgIC8vIENvbnZlcnQgIlhDT0RFX0FUVFJJQlVURV8qIiBwcm9wZXJ0aWVzIGRpcmVjdGx5LgogICB7CiAgICAgZm9yIChhdXRvIGNvbnN0JiBwcm9wIDogZ3RndC0+R2V0UHJvcGVydHlLZXlzKCkpIHsKLSAgICAgIGlmIChwcm9wLmZpbmQoIlhDT0RFX0FUVFJJQlVURV8iKSA9PSAwKSB7CisgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJYQ09ERV9BVFRSSUJVVEVfIikpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYXR0cmlidXRlID0gcHJvcC5zdWJzdHIoMTYpOwogICAgICAgICB0aGlzLT5GaWx0ZXJDb25maWd1cmF0aW9uQXR0cmlidXRlKGNvbmZpZ05hbWUsIGF0dHJpYnV0ZSk7CiAgICAgICAgIGlmICghYXR0cmlidXRlLmVtcHR5KCkpIHsKKyAgICAgICAgICBjb25zdCBjaGFyKiBwciA9IGd0Z3QtPkdldFByb3BlcnR5KHByb3ApOwogICAgICAgICAgIHN0ZDo6c3RyaW5nIHByb2Nlc3NlZCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgICBndGd0LT5HZXRQcm9wZXJ0eShwcm9wKSwgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKKyAgICAgICAgICAgIHByID8gcHIgOiAiIiwgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKICAgICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoYXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcocHJvY2Vzc2VkKSk7CiAgICAgICAgIH0KQEAgLTI4MzQsNyArMjg0Miw3IEBACiAgIGZvciAoYXV0byYgZ2VuZXJhdG9yIDogZ2VuZXJhdG9ycykgewogICAgIGNtTWFrZWZpbGUqIG1mID0gZ2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpOwogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlR3JvdXA+IHNvdXJjZUdyb3VwcyA9IG1mLT5HZXRTb3VyY2VHcm91cHMoKTsKLSAgICBmb3IgKGF1dG8gZ3RndCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBndGd0IDogZ2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIC8vIFNhbWUgc2tpcHBpbmcgbG9naWMgaGVyZSBhcyBpbiBDcmVhdGVYQ29kZVRhcmdldHMgc28gdGhhdCB3ZSBkbyBub3QKICAgICAgIC8vIGVuZCB1cCB3aXRoIChlbXB0eSBhbnlob3cpIFpFUk9fQ0hFQ0ssIGluc3RhbGwsIG9yIHRlc3Qgc291cmNlCiAgICAgICAvLyBncm91cHM6CkBAIC0yODQ5LDExICsyODU3LDEyIEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBhdXRvIGFkZFNvdXJjZVRvR3JvdXAgPSBbdGhpcywgbWYsIGd0Z3QsCisgICAgICBhdXRvIGFkZFNvdXJjZVRvR3JvdXAgPSBbdGhpcywgbWYsICZndGd0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2VHcm91cHNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBzb3VyY2UpIHsKICAgICAgICAgY21Tb3VyY2VHcm91cCogc291cmNlR3JvdXAgPSBtZi0+RmluZFNvdXJjZUdyb3VwKHNvdXJjZSwgc291cmNlR3JvdXBzKTsKLSAgICAgICAgY21YQ29kZU9iamVjdCogcGJ4Z3JvdXAgPSB0aGlzLT5DcmVhdGVPckdldFBCWEdyb3VwKGd0Z3QsIHNvdXJjZUdyb3VwKTsKLSAgICAgICAgc3RkOjpzdHJpbmcga2V5ID0gR2V0R3JvdXBNYXBLZXlGcm9tUGF0aChndGd0LCBzb3VyY2UpOworICAgICAgICBjbVhDb2RlT2JqZWN0KiBwYnhncm91cCA9CisgICAgICAgICAgdGhpcy0+Q3JlYXRlT3JHZXRQQlhHcm91cChndGd0LmdldCgpLCBzb3VyY2VHcm91cCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGtleSA9IEdldEdyb3VwTWFwS2V5RnJvbVBhdGgoZ3RndC5nZXQoKSwgc291cmNlKTsKICAgICAgICAgdGhpcy0+R3JvdXBNYXBba2V5XSA9IHBieGdyb3VwOwogICAgICAgfTsKIApAQCAtMjg3OSw3ICsyODg4LDcgQEAKIAogICAgICAgLy8gQWRkIHRoZSBJbmZvLnBsaXN0IHdlIGFyZSBhYm91dCB0byBnZW5lcmF0ZSBmb3IgYW4gQXBwIEJ1bmRsZS4KICAgICAgIGlmIChndGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX0JVTkRMRSIpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gdGhpcy0+Q29tcHV0ZUluZm9QTGlzdExvY2F0aW9uKGd0Z3QpOworICAgICAgICBzdGQ6OnN0cmluZyBwbGlzdCA9IHRoaXMtPkNvbXB1dGVJbmZvUExpc3RMb2NhdGlvbihndGd0LmdldCgpKTsKICAgICAgICAgY21Tb3VyY2VGaWxlKiBzZiA9IGd0Z3QtPk1ha2VmaWxlLT5HZXRPckNyZWF0ZVNvdXJjZSgKICAgICAgICAgICBwbGlzdCwgdHJ1ZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CiAgICAgICAgIGFkZFNvdXJjZVRvR3JvdXAoc2YtPlJlc29sdmVGdWxsUGF0aCgpKTsKQEAgLTMxMzUsMTIgKzMxNDQsMTIgQEAKICAgICAvLyBQdXQgdGhpcyBsYXN0IHNvIGl0IGNhbiBvdmVycmlkZSBleGlzdGluZyBzZXR0aW5ncwogICAgIC8vIENvbnZlcnQgIkNNQUtFX1hDT0RFX0FUVFJJQlVURV8qIiB2YXJpYWJsZXMgZGlyZWN0bHkuCiAgICAgZm9yIChjb25zdCBhdXRvJiB2YXIgOiB0aGlzLT5DdXJyZW50TWFrZWZpbGUtPkdldERlZmluaXRpb25zKCkpIHsKLSAgICAgIGlmICh2YXIuZmluZCgiQ01BS0VfWENPREVfQVRUUklCVVRFXyIpID09IDApIHsKKyAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgodmFyLCAiQ01BS0VfWENPREVfQVRUUklCVVRFXyIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGF0dHJpYnV0ZSA9IHZhci5zdWJzdHIoMjIpOwogICAgICAgICB0aGlzLT5GaWx0ZXJDb25maWd1cmF0aW9uQXR0cmlidXRlKGNvbmZpZy5maXJzdCwgYXR0cmlidXRlKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuZW1wdHkoKSkgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIHByb2Nlc3NlZCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgICB0aGlzLT5DdXJyZW50TWFrZWZpbGUtPkdldERlZmluaXRpb24odmFyKSwKKyAgICAgICAgICAgIHRoaXMtPkN1cnJlbnRNYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24odmFyKSwKICAgICAgICAgICAgIHRoaXMtPkN1cnJlbnRMb2NhbEdlbmVyYXRvciwgY29uZmlnLmZpcnN0KTsKICAgICAgICAgICBidWlsZFNldHRpbmdzRm9yQ2ZnLT5BZGRBdHRyaWJ1dGUoYXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcocHJvY2Vzc2VkKSk7CkBAIC0zMzg0LDcgKzMzOTMsNyBAQAogICAvLyBjb2xsZWN0IGFsbCB0ZXN0cyBmb3IgdGhlIHRhcmdldHMKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtWENvZGVTY2hlbWU6OlRlc3RPYmplY3RzPiB0ZXN0YWJsZXM7CiAKLSAgZm9yIChhdXRvIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgeworICBmb3IgKGNvbnN0IGF1dG8mIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgewogICAgIGlmIChvYmotPkdldFR5cGUoKSAhPSBjbVhDb2RlT2JqZWN0OjpPQkpFQ1QgfHwKICAgICAgICAgb2JqLT5HZXRJc0EoKSAhPSBjbVhDb2RlT2JqZWN0OjpQQlhOYXRpdmVUYXJnZXQpIHsKICAgICAgIGNvbnRpbnVlOwpAQCAtMzM5OSw3ICszNDA4LDcgQEAKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIHRlc3RhYmxlc1t0ZXN0ZWVdLnB1c2hfYmFjayhvYmopOworICAgIHRlc3RhYmxlc1t0ZXN0ZWVdLnB1c2hfYmFjayhvYmouZ2V0KCkpOwogICB9CiAKICAgLy8gZ2VuZXJhdGUgc2NoZW1lCkBAIC0zNDA4LDE0ICszNDE3LDE0IEBACiAgIC8vIFNpbmNlIHRoZSBsb3dlc3QgYXZhaWxhYmxlIFhjb2RlIHZlcnNpb24gZm9yIHRlc3Rpbmcgd2FzIDYuNCwKICAgLy8gSSdtIHNldHRpbmcgdGhpcyBhcyBhIGxpbWl0IHRoZW4KICAgaWYgKHRoaXMtPlhjb2RlVmVyc2lvbiA+PSA2NCkgewotICAgIGZvciAoYXV0byBvYmogOiB0aGlzLT5YQ29kZU9iamVjdHMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgewogICAgICAgaWYgKG9iai0+R2V0VHlwZSgpID09IGNtWENvZGVPYmplY3Q6Ok9CSkVDVCAmJgogICAgICAgICAgIChvYmotPkdldElzQSgpID09IGNtWENvZGVPYmplY3Q6OlBCWE5hdGl2ZVRhcmdldCB8fAogICAgICAgICAgICBvYmotPkdldElzQSgpID09IGNtWENvZGVPYmplY3Q6OlBCWEFnZ3JlZ2F0ZVRhcmdldCkgJiYKICAgICAgICAgICAocm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRJc0luVHJ5Q29tcGlsZSgpIHx8CiAgICAgICAgICAgIG9iai0+R2V0VGFyZ2V0KCktPkdldFByb3BlcnR5QXNCb29sKCJYQ09ERV9HRU5FUkFURV9TQ0hFTUUiKSkpIHsKICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUgPSBvYmotPkdldFRhcmdldCgpLT5HZXROYW1lKCk7Ci0gICAgICAgIGNtWENvZGVTY2hlbWUgc2NobShvYmosIHRlc3RhYmxlc1t0YXJnZXROYW1lXSwKKyAgICAgICAgY21YQ29kZVNjaGVtZSBzY2htKHJvb3QsIG9iai5nZXQoKSwgdGVzdGFibGVzW3RhcmdldE5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3VycmVudENvbmZpZ3VyYXRpb25UeXBlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlhjb2RlVmVyc2lvbik7CiAgICAgICAgIHNjaG0uV3JpdGVYQ29kZVNoYXJlZFNjaGVtZSh4Y1Byb2pEaXIsCkBAIC0zNjg3LDE1ICszNjk2LDE0IEBACiAKIGJvb2wgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6VXNlRWZmZWN0aXZlUGxhdGZvcm1OYW1lKGNtTWFrZWZpbGUqIG1mKSBjb25zdAogewotICBjb25zdCBjaGFyKiBlcG5WYWx1ZSA9Ci0gICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKLSAgICAgICJYQ09ERV9FTUlUX0VGRkVDVElWRV9QTEFURk9STV9OQU1FIik7CisgIGNtUHJvcCBlcG5WYWx1ZSA9IHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCisgICAgIlhDT0RFX0VNSVRfRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUiKTsKIAogICBpZiAoIWVwblZhbHVlKSB7CiAgICAgcmV0dXJuIG1mLT5QbGF0Zm9ybUlzQXBwbGVFbWJlZGRlZCgpOwogICB9CiAKLSAgcmV0dXJuIGNtSXNPbihlcG5WYWx1ZSk7CisgIHJldHVybiBjbUlzT24oKmVwblZhbHVlKTsKIH0KIAogYm9vbCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpTaG91bGRTdHJpcFJlc291cmNlUGF0aChjbU1ha2VmaWxlKikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5oCmluZGV4IGFmOTA1ZDAuLmUzODBmMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsWENvZGVHZW5lcmF0b3IuaApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtMzQsNyArMzUsMTEgQEAKIHB1YmxpYzoKICAgY21HbG9iYWxYQ29kZUdlbmVyYXRvcihjbWFrZSogY20sIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJzaW9uX3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbl9udW1iZXIpOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCk7CisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCk7CisKKyAgY21HbG9iYWxYQ29kZUdlbmVyYXRvcihjb25zdCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yJikgPSBkZWxldGU7CisgIGNvbnN0IGNtR2xvYmFsWENvZGVHZW5lcmF0b3ImIG9wZXJhdG9yPShjb25zdCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yJikgPQorICAgIGRlbGV0ZTsKIAogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgogICBzdGQ6OnN0cmluZyBHZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGUKQEAgLTQ3LDcgKzUyLDggQEAKICAgc3RhdGljIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpOwogCiAgIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi0gIGNtTG9jYWxHZW5lcmF0b3IqIENyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogICAvKioKICAgICogVHJ5IHRvIGRldGVybWluZSBzeXN0ZW0gaW5mb3JtYXRpb24gc3VjaCBhcyBzaGFyZWQgbGlicmFyeQpAQCAtMTAzLDcgKzEwOSw4IEBACiAKICAgYm9vbCBTaG91bGRTdHJpcFJlc291cmNlUGF0aChjbU1ha2VmaWxlKikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgYm9vbCBTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBib29sIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogICB2b2lkIEFwcGVuZEZsYWcoc3RkOjpzdHJpbmcmIGZsYWdzLCBzdGQ6OnN0cmluZyBjb25zdCYgZmxhZykgY29uc3Q7CiAKIHByb3RlY3RlZDoKQEAgLTI0Niw3ICsyNTMsNyBAQAogICB1bnNpZ25lZCBpbnQgWGNvZGVWZXJzaW9uOwogICBzdGQ6OnN0cmluZyBWZXJzaW9uU3RyaW5nOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gWENvZGVPYmplY3RJRHM7Ci0gIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBYQ29kZU9iamVjdHM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0Pj4gWENvZGVPYmplY3RzOwogICBjbVhDb2RlT2JqZWN0KiBSb290T2JqZWN0OwogCiBwcml2YXRlOgpAQCAtMjcwLDcgKzI3Nyw3IEBACiAgIHZvaWQgQ29tcHV0ZUFyY2hpdGVjdHVyZXMoY21NYWtlZmlsZSogbWYpOwogICB2b2lkIENvbXB1dGVPYmplY3REaXJBcmNoKGNtTWFrZWZpbGUqIG1mKTsKIAotICB2b2lkIGFkZE9iamVjdChjbVhDb2RlT2JqZWN0KiBvYmopOworICB2b2lkIGFkZE9iamVjdChzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4gb2JqKTsKICAgc3RkOjpzdHJpbmcgUG9zdEJ1aWxkTWFrZVRhcmdldChzdGQ6OnN0cmluZyBjb25zdCYgdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZ05hbWUpOwogICBjbVhDb2RlT2JqZWN0KiBNYWluR3JvdXBDaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdyYXBoQWRqYWNlbmN5TGlzdC5oIGIvU291cmNlL2NtR3JhcGhBZGphY2VuY3lMaXN0LmgKaW5kZXggNWVkNmFmNC4uNGUxZjEyOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR3JhcGhBZGphY2VuY3lMaXN0LmgKKysrIGIvU291cmNlL2NtR3JhcGhBZGphY2VuY3lMaXN0LmgKQEAgLTE4LDkgKzE4LDEwIEBACiBjbGFzcyBjbUdyYXBoRWRnZQogewogcHVibGljOgotICBjbUdyYXBoRWRnZShpbnQgbiwgYm9vbCBzLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQorICBjbUdyYXBoRWRnZShpbnQgbiwgYm9vbCBzLCBib29sIGMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpCiAgICAgOiBEZXN0KG4pCiAgICAgLCBTdHJvbmcocykKKyAgICAsIENyb3NzKGMpCiAgICAgLCBCYWNrdHJhY2Uoc3RkOjptb3ZlKGJ0KSkKICAgewogICB9CkBAIC0yOCwxMSArMjksMTQgQEAKIAogICBib29sIElzU3Ryb25nKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3Ryb25nOyB9CiAKKyAgYm9vbCBJc0Nyb3NzKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q3Jvc3M7IH0KKwogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBHZXRCYWNrdHJhY2UoKSBjb25zdCB7IHJldHVybiB0aGlzLT5CYWNrdHJhY2U7IH0KIAogcHJpdmF0ZToKICAgaW50IERlc3Q7CiAgIGJvb2wgU3Ryb25nOworICBib29sIENyb3NzOwogICBjbUxpc3RGaWxlQmFja3RyYWNlIEJhY2t0cmFjZTsKIH07CiBzdHJ1Y3QgY21HcmFwaEVkZ2VMaXN0IDogcHVibGljIHN0ZDo6dmVjdG9yPGNtR3JhcGhFZGdlPgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR3JhcGhWaXpXcml0ZXIuY3h4IGIvU291cmNlL2NtR3JhcGhWaXpXcml0ZXIuY3h4CmluZGV4IGUwZDU0NWQuLjBmY2RhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmN4eAorKysgYi9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5jeHgKQEAgLTIsMTc2ICsyLDE5MiBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HcmFwaFZpeldyaXRlci5oIgogCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjY3R5cGU+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21MaW5rSXRlbS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKLSNpbmNsdWRlICJjbVRhcmdldC5oIgogI2luY2x1ZGUgImNtYWtlLmgiCiAKIG5hbWVzcGFjZSB7Ci1lbnVtIExpbmtMaWJyYXJ5U2NvcGVUeXBlCi17Ci0gIExMVF9TQ09QRV9QVUJMSUMsCi0gIExMVF9TQ09QRV9QUklWQVRFLAotICBMTFRfU0NPUEVfSU5URVJGQUNFCi19OwogCi1jb25zdCBjaGFyKiBjb25zdCBHUkFQSFZJWl9QUklWQVRFX0VERUdFX1NUWUxFID0gImRhc2hlZCI7Ci1jb25zdCBjaGFyKiBjb25zdCBHUkFQSFZJWl9JTlRFUkZBQ0VfRURFR0VfU1RZTEUgPSAiZG90dGVkIjsKK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDID0gInNvbGlkIjsKK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX0VER0VfU1RZTEVfSU5URVJGQUNFID0gImRhc2hlZCI7CitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9FREdFX1NUWUxFX1BSSVZBVEUgPSAiZG90dGVkIjsKIAotc3RkOjpzdHJpbmcgZ2V0TGlua0xpYnJhcnlTdHlsZShjb25zdCBMaW5rTGlicmFyeVNjb3BlVHlwZSYgdHlwZSkKLXsKLSAgc3RkOjpzdHJpbmcgc3R5bGU7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTExUX1NDT1BFX1BSSVZBVEU6Ci0gICAgICBzdHlsZSA9ICJbc3R5bGUgPSAiICsgc3RkOjpzdHJpbmcoR1JBUEhWSVpfUFJJVkFURV9FREVHRV9TVFlMRSkgKyAiXSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIExMVF9TQ09QRV9JTlRFUkZBQ0U6Ci0gICAgICBzdHlsZSA9ICJbc3R5bGUgPSAiICsgc3RkOjpzdHJpbmcoR1JBUEhWSVpfSU5URVJGQUNFX0VERUdFX1NUWUxFKSArICJdIjsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gc3R5bGU7Ci19CitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9OT0RFX1NIQVBFX0VYRUNVVEFCTEUgPSAiZWdnIjsgLy8gZWdnLXhlY3V0YWJsZQogCi1jb25zdCBjaGFyKiBnZXRTaGFwZUZvclRhcmdldChjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQorLy8gTm9ybWFsIGxpYnJhcmllcy4KK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9TVEFUSUMgPSAib2N0YWdvbiI7CitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU0hBUkVEID0gImRvdWJsZW9jdGFnb24iOworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX01PRFVMRSA9ICJ0cmlwbGVvY3RhZ29uIjsKKworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX0lOVEVSRkFDRSA9ICJwZW50YWdvbiI7CitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfT0JKRUNUID0gImhleGFnb24iOworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1VOS05PV04gPSAic2VwdGFnb24iOworCitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9OT0RFX1NIQVBFX1VUSUxJVFkgPSAiYm94IjsKKworY29uc3QgY2hhciogZ2V0U2hhcGVGb3JUYXJnZXQoY29uc3QgY21MaW5rSXRlbSYgaXRlbSkKIHsKLSAgaWYgKCF0YXJnZXQpIHsKLSAgICByZXR1cm4gImVsbGlwc2UiOworICBpZiAoaXRlbS5UYXJnZXQgPT0gbnVsbHB0cikgeworICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfVU5LTk9XTjsKICAgfQogCi0gIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKKyAgc3dpdGNoIChpdGVtLlRhcmdldC0+R2V0VHlwZSgpKSB7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU6Ci0gICAgICByZXR1cm4gImhvdXNlIjsKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0VYRUNVVEFCTEU7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOgotICAgICAgcmV0dXJuICJkaWFtb25kIjsKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU1RBVElDOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKLSAgICAgIHJldHVybiAicG9seWdvbiI7CisgICAgICByZXR1cm4gR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1NIQVJFRDsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gIm9jdGFnb24iOworICAgICAgcmV0dXJuIEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9NT0RVTEU7CisgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZOgorICAgICAgcmV0dXJuIEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9PQkpFQ1Q7CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CisgICAgICByZXR1cm4gR1JBUEhWSVpfTk9ERV9TSEFQRV9VVElMSVRZOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWToKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfSU5URVJGQUNFOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVTktOT1dOX0xJQlJBUlk6CiAgICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOworICAgICAgcmV0dXJuIEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9VTktOT1dOOwogICB9Ci0KLSAgcmV0dXJuICJib3giOwotfQotCi1zdGQ6Om1hcDxzdGQ6OnN0cmluZywgTGlua0xpYnJhcnlTY29wZVR5cGU+IGdldFNjb3BlZExpbmtMaWJyYXJpZXNGcm9tVGFyZ2V0KAotICBjbVRhcmdldCogVGFyZ2V0LCBjb25zdCBjbUdsb2JhbEdlbmVyYXRvciogZ2xvYmFsR2VuZXJhdG9yKQotewotICBjaGFyIHNlcCA9ICc7JzsKLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIExpbmtMaWJyYXJ5U2NvcGVUeXBlPiB0b2tlbnM7Ci0gIHNpemVfdCBzdGFydCA9IDA7Ci0gIHNpemVfdCBlbmQgPSAwOwotCi0gIGNvbnN0IGNoYXIqIHBJbnRlcmZhY2VMaW5rTGlicmFyaWVzID0KLSAgICBUYXJnZXQtPkdldFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKTsKLSAgY29uc3QgY2hhciogcExpbmtMaWJyYXJpZXMgPSBUYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIpOwotCi0gIGlmICghcEludGVyZmFjZUxpbmtMaWJyYXJpZXMgJiYgIXBMaW5rTGlicmFyaWVzKSB7Ci0gICAgcmV0dXJuIHRva2VuczsgLy8gdGFyZ2V0IGlzIG5vdCBsaW5rZWQgYWdhaW5zdCBhbnkgb3RoZXIgbGlicmFyaWVzCi0gIH0KLQotICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgdG91Y2ggYSBudWxsLXB0cgotICBhdXRvIGludGVyZmFjZUxpbmtMaWJyYXJpZXMgPQotICAgIHN0ZDo6c3RyaW5nKHBJbnRlcmZhY2VMaW5rTGlicmFyaWVzID8gcEludGVyZmFjZUxpbmtMaWJyYXJpZXMgOiAiIik7Ci0gIGF1dG8gbGlua0xpYnJhcmllcyA9IHN0ZDo6c3RyaW5nKHBMaW5rTGlicmFyaWVzID8gcExpbmtMaWJyYXJpZXMgOiAiIik7Ci0KLSAgLy8gZmlyc3QgZXh0cmFjdCBpbnRlcmZhY2VMaW5rTGlicmFyaWVzCi0gIHdoaWxlIChzdGFydCA8IGludGVyZmFjZUxpbmtMaWJyYXJpZXMubGVuZ3RoKCkpIHsKLQotICAgIGlmICgoZW5kID0gaW50ZXJmYWNlTGlua0xpYnJhcmllcy5maW5kKHNlcCwgc3RhcnQpKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgZW5kID0gaW50ZXJmYWNlTGlua0xpYnJhcmllcy5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyBlbGVtZW50ID0gaW50ZXJmYWNlTGlua0xpYnJhcmllcy5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICBpZiAoZ2xvYmFsR2VuZXJhdG9yLT5Jc0FsaWFzKGVsZW1lbnQpKSB7Ci0gICAgICBjb25zdCBhdXRvIHRndCA9IGdsb2JhbEdlbmVyYXRvci0+RmluZFRhcmdldChlbGVtZW50KTsKLSAgICAgIGlmICh0Z3QpIHsKLSAgICAgICAgZWxlbWVudCA9IHRndC0+R2V0TmFtZSgpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdGQ6OnN0cmluZzo6bnBvcyA9PSBlbGVtZW50LmZpbmQoIiQ8TElOS19PTkxZOiIsIDApKSB7Ci0gICAgICAvLyB3ZSBhc3N1bWUgZmlyc3QsIHRoYXQgdGhpcyBsaWJyYXJ5IGlzIGFuIGludGVyZmFjZSBsaWJyYXJ5LgotICAgICAgLy8gaWYgd2UgZmluZCBpdCBhZ2FpbiBpbiB0aGUgbGlua2xpYnJhcmllcyBwcm9wZXJ0eSwgd2UgcHJvbW90ZSBpdCB0byBhbgotICAgICAgLy8gcHVibGljIGxpYnJhcnkuCi0gICAgICB0b2tlbnNbZWxlbWVudF0gPSBMTFRfU0NPUEVfSU5URVJGQUNFOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyB0aGlzIGlzIGFuIHByaXZhdGUgbGlua2VkIHN0YXRpYyBsaWJyYXJ5LgotICAgICAgLy8gd2UgdGFrZSBjYXJlIG9mIHRoaXMgY2FzZSBpbiB0aGUgc2Vjb25kIGl0ZXJhdG9yLgotICAgIH0KLSAgICBzdGFydCA9IGVuZCArIDE7Ci0gIH0KLQotICAvLyBzZWNvbmQgZXh0cmFjdCBsaW5rTGlicmFyaWVzCi0gIHN0YXJ0ID0gMDsKLSAgd2hpbGUgKHN0YXJ0IDwgbGlua0xpYnJhcmllcy5sZW5ndGgoKSkgewotCi0gICAgaWYgKChlbmQgPSBsaW5rTGlicmFyaWVzLmZpbmQoc2VwLCBzdGFydCkpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICBlbmQgPSBsaW5rTGlicmFyaWVzLmxlbmd0aCgpOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIGVsZW1lbnQgPSBsaW5rTGlicmFyaWVzLnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgIGlmIChnbG9iYWxHZW5lcmF0b3ItPklzQWxpYXMoZWxlbWVudCkpIHsKLSAgICAgIGNvbnN0IGF1dG8gdGd0ID0gZ2xvYmFsR2VuZXJhdG9yLT5GaW5kVGFyZ2V0KGVsZW1lbnQpOwotICAgICAgaWYgKHRndCkgewotICAgICAgICBlbGVtZW50ID0gdGd0LT5HZXROYW1lKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRva2Vucy5maW5kKGVsZW1lbnQpID09IHRva2Vucy5lbmQoKSkgewotICAgICAgLy8gdGhpcyBsaWJyYXJ5IGlzIG5vdCBmb3VuZCBpbiBpbnRlcmZhY2VMaW5rTGlicmFyaWVzIGJ1dCBpbgotICAgICAgLy8gbGlua0xpYnJhcmllcy4KLSAgICAgIC8vIHRoaXMgcmVzdWx0cyBpbiBhIHByaXZhdGUgbGlua2VkIGxpYnJhcnkuCi0gICAgICB0b2tlbnNbZWxlbWVudF0gPSBMTFRfU0NPUEVfUFJJVkFURTsKLSAgICB9IGVsc2UgaWYgKExMVF9TQ09QRV9JTlRFUkZBQ0UgPT0gdG9rZW5zW2VsZW1lbnRdKSB7Ci0gICAgICAvLyB0aGlzIGxpYnJhcnkgaXMgZm91bmQgaW4gaW50ZXJmYWNlTGlua0xpYnJhcmllcyBhbmQgbGlua0xpYnJhcmllcy4KLSAgICAgIC8vIHRoaXMgcmVzdWx0cyBpbiBhIHB1YmxpYyBsaW5rZWQgbGlicmFyeS4KLSAgICAgIHRva2Vuc1tlbGVtZW50XSA9IExMVF9TQ09QRV9QVUJMSUM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIHByaXZhdGUgYW5kIHB1YmxpYyBsaW5rZWQgbGlicmFyaWVzIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhbnltb3JlLgotICAgIH0KLQotICAgIHN0YXJ0ID0gZW5kICsgMTsKLSAgfQotCi0gIHJldHVybiB0b2tlbnM7CiB9CiB9CiAKLWNtR3JhcGhWaXpXcml0ZXI6OmNtR3JhcGhWaXpXcml0ZXIoY29uc3QgY21HbG9iYWxHZW5lcmF0b3IqIGdsb2JhbEdlbmVyYXRvcikKLSAgOiBHcmFwaFR5cGUoImRpZ3JhcGgiKQotICAsIEdyYXBoTmFtZSgiR0ciKQorY21HcmFwaFZpeldyaXRlcjo6Y21HcmFwaFZpeldyaXRlcihzdGQ6OnN0cmluZyBjb25zdCYgZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2xvYmFsR2VuZXJhdG9yKiBnbG9iYWxHZW5lcmF0b3IpCisgIDogRmlsZU5hbWUoZmlsZU5hbWUpCisgICwgR2xvYmFsRmlsZVN0cmVhbShmaWxlTmFtZSkKKyAgLCBHcmFwaE5hbWUoZ2xvYmFsR2VuZXJhdG9yLT5HZXRTYWZlR2xvYmFsU2V0dGluZygiQ01BS0VfUFJPSkVDVF9OQU1FIikpCiAgICwgR3JhcGhIZWFkZXIoIm5vZGUgW1xuICBmb250c2l6ZSA9IFwiMTJcIlxuXTsiKQogICAsIEdyYXBoTm9kZVByZWZpeCgibm9kZSIpCiAgICwgR2xvYmFsR2VuZXJhdG9yKGdsb2JhbEdlbmVyYXRvcikKLSAgLCBMb2NhbEdlbmVyYXRvcnMoZ2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkKKyAgLCBOZXh0Tm9kZUlkKDApCiAgICwgR2VuZXJhdGVGb3JFeGVjdXRhYmxlcyh0cnVlKQogICAsIEdlbmVyYXRlRm9yU3RhdGljTGlicyh0cnVlKQogICAsIEdlbmVyYXRlRm9yU2hhcmVkTGlicyh0cnVlKQogICAsIEdlbmVyYXRlRm9yTW9kdWxlTGlicyh0cnVlKQotICAsIEdlbmVyYXRlRm9ySW50ZXJmYWNlKHRydWUpCisgICwgR2VuZXJhdGVGb3JJbnRlcmZhY2VMaWJzKHRydWUpCisgICwgR2VuZXJhdGVGb3JPYmplY3RMaWJzKHRydWUpCisgICwgR2VuZXJhdGVGb3JVbmtub3duTGlicyh0cnVlKQorICAsIEdlbmVyYXRlRm9yQ3VzdG9tVGFyZ2V0cyhmYWxzZSkKICAgLCBHZW5lcmF0ZUZvckV4dGVybmFscyh0cnVlKQogICAsIEdlbmVyYXRlUGVyVGFyZ2V0KHRydWUpCiAgICwgR2VuZXJhdGVEZXBlbmRlcnModHJ1ZSkKLSAgLCBIYXZlVGFyZ2V0c0FuZExpYnMoZmFsc2UpCiB7CiB9CiAKK2NtR3JhcGhWaXpXcml0ZXI6On5jbUdyYXBoVml6V3JpdGVyKCkKK3sKKyAgdGhpcy0+V3JpdGVGb290ZXIodGhpcy0+R2xvYmFsRmlsZVN0cmVhbSk7CisKKyAgZm9yIChhdXRvJiBmaWxlU3RyZWFtIDogdGhpcy0+UGVyVGFyZ2V0RmlsZVN0cmVhbXMpIHsKKyAgICB0aGlzLT5Xcml0ZUZvb3RlcigqZmlsZVN0cmVhbS5zZWNvbmQpOworICB9CisKKyAgZm9yIChhdXRvJiBmaWxlU3RyZWFtIDogdGhpcy0+VGFyZ2V0RGVwZW5kZXJzRmlsZVN0cmVhbXMpIHsKKyAgICB0aGlzLT5Xcml0ZUZvb3RlcigqZmlsZVN0cmVhbS5zZWNvbmQpOworICB9Cit9CisKK3ZvaWQgY21HcmFwaFZpeldyaXRlcjo6VmlzaXRHcmFwaChzdGQ6OnN0cmluZyBjb25zdCYpCit7CisgIHRoaXMtPldyaXRlSGVhZGVyKEdsb2JhbEZpbGVTdHJlYW0sIHRoaXMtPkdyYXBoTmFtZSk7CisgIHRoaXMtPldyaXRlTGVnZW5kKEdsb2JhbEZpbGVTdHJlYW0pOworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6Ok9uSXRlbShjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKQoreworICBpZiAodGhpcy0+SXRlbUV4Y2x1ZGVkKGl0ZW0pKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgTm9kZU5hbWVzW2l0ZW0uQXNTdHIoKV0gPSBjbVN0ckNhdChHcmFwaE5vZGVQcmVmaXgsIE5leHROb2RlSWQpOworICArK05leHROb2RlSWQ7CisKKyAgdGhpcy0+V3JpdGVOb2RlKHRoaXMtPkdsb2JhbEZpbGVTdHJlYW0sIGl0ZW0pOworCisgIGlmICh0aGlzLT5HZW5lcmF0ZVBlclRhcmdldCkgeworICAgIHRoaXMtPkNyZWF0ZVRhcmdldEZpbGUodGhpcy0+UGVyVGFyZ2V0RmlsZVN0cmVhbXMsIGl0ZW0pOworICB9CisKKyAgaWYgKHRoaXMtPkdlbmVyYXRlRGVwZW5kZXJzKSB7CisgICAgdGhpcy0+Q3JlYXRlVGFyZ2V0RmlsZSh0aGlzLT5UYXJnZXREZXBlbmRlcnNGaWxlU3RyZWFtcywgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIuZGVwZW5kZXJzIik7CisgIH0KK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpDcmVhdGVUYXJnZXRGaWxlKEZpbGVTdHJlYW1NYXAmIGZpbGVTdHJlYW1NYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZU5hbWVTdWZmaXgpCit7CisgIGF1dG8gY29uc3QgcGF0aFNhZmVJdGVtTmFtZSA9IFBhdGhTYWZlU3RyaW5nKGl0ZW0uQXNTdHIoKSk7CisgIGF1dG8gY29uc3QgcGVyVGFyZ2V0RmlsZU5hbWUgPQorICAgIGNtU3RyQ2F0KHRoaXMtPkZpbGVOYW1lLCAnLicsIHBhdGhTYWZlSXRlbU5hbWUsIGZpbGVOYW1lU3VmZml4KTsKKyAgYXV0byBwZXJUYXJnZXRGaWxlU3RyZWFtID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPihwZXJUYXJnZXRGaWxlTmFtZSk7CisKKyAgdGhpcy0+V3JpdGVIZWFkZXIoKnBlclRhcmdldEZpbGVTdHJlYW0sIGl0ZW0uQXNTdHIoKSk7CisgIHRoaXMtPldyaXRlTm9kZSgqcGVyVGFyZ2V0RmlsZVN0cmVhbSwgaXRlbSk7CisKKyAgZmlsZVN0cmVhbU1hcC5lbXBsYWNlKGl0ZW0uQXNTdHIoKSwgc3RkOjptb3ZlKHBlclRhcmdldEZpbGVTdHJlYW0pKTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpPbkRpcmVjdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3lUeXBlIGR0KQoreworICB0aGlzLT5WaXNpdExpbmsoZGVwZW5kZXIsIGRlcGVuZGVlLCB0cnVlLCBHZXRFZGdlU3R5bGUoZHQpKTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpPbkluZGlyZWN0TGluayhjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWUpCit7CisgIHRoaXMtPlZpc2l0TGluayhkZXBlbmRlciwgZGVwZW5kZWUsIGZhbHNlKTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpWaXNpdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwgYm9vbCBpc0RpcmVjdExpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc2NvcGVUeXBlKQoreworICBpZiAodGhpcy0+SXRlbUV4Y2x1ZGVkKGRlcGVuZGVyKSB8fCB0aGlzLT5JdGVtRXhjbHVkZWQoZGVwZW5kZWUpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCFpc0RpcmVjdExpbmspIHsKKyAgICByZXR1cm47CisgIH0KKworICB0aGlzLT5Xcml0ZUNvbm5lY3Rpb24odGhpcy0+R2xvYmFsRmlsZVN0cmVhbSwgZGVwZW5kZXIsIGRlcGVuZGVlLCBzY29wZVR5cGUpOworCisgIGlmICh0aGlzLT5HZW5lcmF0ZVBlclRhcmdldCkgeworICAgIGF1dG8gZmlsZVN0cmVhbSA9IFBlclRhcmdldEZpbGVTdHJlYW1zW2RlcGVuZGVyLkFzU3RyKCldLmdldCgpOworICAgIHRoaXMtPldyaXRlTm9kZSgqZmlsZVN0cmVhbSwgZGVwZW5kZWUpOworICAgIHRoaXMtPldyaXRlQ29ubmVjdGlvbigqZmlsZVN0cmVhbSwgZGVwZW5kZXIsIGRlcGVuZGVlLCBzY29wZVR5cGUpOworICB9CisKKyAgaWYgKHRoaXMtPkdlbmVyYXRlRGVwZW5kZXJzKSB7CisgICAgYXV0byBmaWxlU3RyZWFtID0gVGFyZ2V0RGVwZW5kZXJzRmlsZVN0cmVhbXNbZGVwZW5kZWUuQXNTdHIoKV0uZ2V0KCk7CisgICAgdGhpcy0+V3JpdGVOb2RlKCpmaWxlU3RyZWFtLCBkZXBlbmRlcik7CisgICAgdGhpcy0+V3JpdGVDb25uZWN0aW9uKCpmaWxlU3RyZWFtLCBkZXBlbmRlciwgZGVwZW5kZWUsIHNjb3BlVHlwZSk7CisgIH0KK30KKwogdm9pZCBjbUdyYXBoVml6V3JpdGVyOjpSZWFkU2V0dGluZ3MoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR0aW5nc0ZpbGVOYW1lLAogICBjb25zdCBzdGQ6OnN0cmluZyYgZmFsbGJhY2tTZXR0aW5nc0ZpbGVOYW1lKQpAQCAtMjA4LDcgKzIyNCw2IEBACiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUgKGZhbHNlKQogCi0gIF9fc2V0X2lmX3NldCh0aGlzLT5HcmFwaFR5cGUsICJHUkFQSFZJWl9HUkFQSF9UWVBFIik7CiAgIF9fc2V0X2lmX3NldCh0aGlzLT5HcmFwaE5hbWUsICJHUkFQSFZJWl9HUkFQSF9OQU1FIik7CiAgIF9fc2V0X2lmX3NldCh0aGlzLT5HcmFwaEhlYWRlciwgIkdSQVBIVklaX0dSQVBIX0hFQURFUiIpOwogICBfX3NldF9pZl9zZXQodGhpcy0+R3JhcGhOb2RlUHJlZml4LCAiR1JBUEhWSVpfTk9ERV9QUkVGSVgiKTsKQEAgLTIyNSw3ICsyNDAsMTAgQEAKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JTdGF0aWNMaWJzLCAiR1JBUEhWSVpfU1RBVElDX0xJQlMiKTsKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JTaGFyZWRMaWJzLCAiR1JBUEhWSVpfU0hBUkVEX0xJQlMiKTsKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JNb2R1bGVMaWJzLCAiR1JBUEhWSVpfTU9EVUxFX0xJQlMiKTsKLSAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2UsICJHUkFQSFZJWl9JTlRFUkZBQ0UiKTsKKyAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2VMaWJzLCAiR1JBUEhWSVpfSU5URVJGQUNFX0xJQlMiKTsKKyAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JPYmplY3RMaWJzLCAiR1JBUEhWSVpfT0JKRUNUX0xJQlMiKTsKKyAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JVbmtub3duTGlicywgIkdSQVBIVklaX1VOS05PV05fTElCUyIpOworICBfX3NldF9ib29sX2lmX3NldCh0aGlzLT5HZW5lcmF0ZUZvckN1c3RvbVRhcmdldHMsICJHUkFQSFZJWl9DVVNUT01fVEFSR0VUUyIpOwogICBfX3NldF9ib29sX2lmX3NldCh0aGlzLT5HZW5lcmF0ZUZvckV4dGVybmFscywgIkdSQVBIVklaX0VYVEVSTkFMX0xJQlMiKTsKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVQZXJUYXJnZXQsICJHUkFQSFZJWl9HRU5FUkFURV9QRVJfVEFSR0VUIik7CiAgIF9fc2V0X2Jvb2xfaWZfc2V0KHRoaXMtPkdlbmVyYXRlRGVwZW5kZXJzLCAiR1JBUEhWSVpfR0VORVJBVEVfREVQRU5ERVJTIik7CkBAIC0yNDgsMzI5ICsyNjYsMTYyIEBACiAgIH0KIH0KIAotLy8gSXRlcmF0ZSBvdmVyIGFsbCB0YXJnZXRzIGFuZCB3cml0ZSBmb3IgZWFjaCBvbmUgYSBncmFwaCB3aGljaCBzaG93cwotLy8gd2hpY2ggb3RoZXIgdGFyZ2V0cyBkZXBlbmQgb24gaXQuCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlVGFyZ2V0RGVwZW5kZXJzRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKQordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZSgpCiB7Ci0gIGlmICghdGhpcy0+R2VuZXJhdGVEZXBlbmRlcnMpIHsKLSAgICByZXR1cm47Ci0gIH0KKyAgYXV0byBnZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKIAotICB0aGlzLT5Db2xsZWN0VGFyZ2V0c0FuZExpYnMoKTsKKyAgdGhpcy0+VmlzaXRHcmFwaChnZy0+R2V0TmFtZSgpKTsKIAotICBmb3IgKGF1dG8gY29uc3QmIHB0ciA6IHRoaXMtPlRhcmdldFB0cnMpIHsKLSAgICBpZiAocHRyLnNlY29uZCA9PSBudWxscHRyKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9CisgIC8vIFdlIHdhbnQgdG8gdHJhdmVyc2UgaW4gYSBkZXRlcm1pbmVkIG9yZGVyLCBzdWNoIHRoYXQgdGhlIG91dHB1dCBpcyBhbHdheXMKKyAgLy8gdGhlIHNhbWUgZm9yIGEgZ2l2ZW4gcHJvamVjdCAodGhpcyBtYWtlcyB0ZXN0cyByZXByb2R1Y2libGUsIGV0Yy4pCisgIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiwgY21HZW5lcmF0b3JUYXJnZXQ6OlN0cmljdFRhcmdldENvbXBhcmlzb24+CisgICAgc29ydGVkR2VuZXJhdG9yVGFyZ2V0czsKIAotICAgIGlmICghdGhpcy0+R2VuZXJhdGVGb3JUYXJnZXRUeXBlKHB0ci5zZWNvbmQtPkdldFR5cGUoKSkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIGN1cnJlbnRGaWxlbmFtZSA9Ci0gICAgICBjbVN0ckNhdChmaWxlTmFtZSwgJy4nLCBwdHIuZmlyc3QsICIuZGVwZW5kZXJzIik7Ci0KLSAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gc3RyKGN1cnJlbnRGaWxlbmFtZSk7Ci0gICAgaWYgKCFzdHIpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWRDb25uZWN0aW9uczsKLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWROb2RlczsKLQotICAgIHN0ZDo6Y291dCA8PCAiV3JpdGluZyAiIDw8IGN1cnJlbnRGaWxlbmFtZSA8PCAiLi4uIiA8PCBzdGQ6OmVuZGw7Ci0gICAgdGhpcy0+V3JpdGVIZWFkZXIoc3RyKTsKLQotICAgIHRoaXMtPldyaXRlRGVwZW5kZXJDb25uZWN0aW9ucyhwdHIuZmlyc3QsIGluc2VydGVkTm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0KLSAgICB0aGlzLT5Xcml0ZUZvb3RlcihzdHIpOwotICB9Ci19Ci0KLS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGFyZ2V0cyBhbmQgd3JpdGUgZm9yIGVhY2ggb25lIGEgZ3JhcGggd2hpY2ggc2hvd3MKLS8vIG9uIHdoaWNoIHRhcmdldHMgaXQgZGVwZW5kcy4KLXZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVQZXJUYXJnZXRGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCi17Ci0gIGlmICghdGhpcy0+R2VuZXJhdGVQZXJUYXJnZXQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0aGlzLT5Db2xsZWN0VGFyZ2V0c0FuZExpYnMoKTsKLQotICBmb3IgKGF1dG8gY29uc3QmIHB0ciA6IHRoaXMtPlRhcmdldFB0cnMpIHsKLSAgICBpZiAocHRyLnNlY29uZCA9PSBudWxscHRyKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRoaXMtPkdlbmVyYXRlRm9yVGFyZ2V0VHlwZShwdHIuc2Vjb25kLT5HZXRUeXBlKCkpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWRDb25uZWN0aW9uczsKLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWROb2RlczsKLQotICAgIHN0ZDo6c3RyaW5nIGN1cnJlbnRGaWxlbmFtZSA9IGNtU3RyQ2F0KGZpbGVOYW1lLCAnLicsIHB0ci5maXJzdCk7Ci0gICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIHN0cihjdXJyZW50RmlsZW5hbWUpOwotICAgIGlmICghc3RyKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RkOjpjb3V0IDw8ICJXcml0aW5nICIgPDwgY3VycmVudEZpbGVuYW1lIDw8ICIuLi4iIDw8IHN0ZDo6ZW5kbDsKLSAgICB0aGlzLT5Xcml0ZUhlYWRlcihzdHIpOwotCi0gICAgdGhpcy0+V3JpdGVDb25uZWN0aW9ucyhwdHIuZmlyc3QsIGluc2VydGVkTm9kZXMsIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gICAgdGhpcy0+V3JpdGVGb290ZXIoc3RyKTsKLSAgfQotfQotCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlR2xvYmFsRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCi17Ci0gIHRoaXMtPkNvbGxlY3RUYXJnZXRzQW5kTGlicygpOwotCi0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBzdHIoZmlsZU5hbWUpOwotICBpZiAoIXN0cikgewotICAgIHJldHVybjsKLSAgfQotICB0aGlzLT5Xcml0ZUhlYWRlcihzdHIpOwotCi0gIHN0ZDo6Y291dCA8PCAiV3JpdGluZyAiIDw8IGZpbGVOYW1lIDw8ICIuLi4iIDw8IHN0ZDo6ZW5kbDsKLQotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWRDb25uZWN0aW9uczsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGluc2VydGVkTm9kZXM7Ci0KLSAgZm9yIChhdXRvIGNvbnN0JiBwdHIgOiB0aGlzLT5UYXJnZXRQdHJzKSB7Ci0gICAgaWYgKHB0ci5zZWNvbmQgPT0gbnVsbHB0cikgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLT5HZW5lcmF0ZUZvclRhcmdldFR5cGUocHRyLnNlY29uZC0+R2V0VHlwZSgpKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgdGhpcy0+V3JpdGVDb25uZWN0aW9ucyhwdHIuZmlyc3QsIGluc2VydGVkTm9kZXMsIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gIH0KLSAgdGhpcy0+V3JpdGVGb290ZXIoc3RyKTsKLX0KLQotdm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZUhlYWRlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgc3RyIDw8IHRoaXMtPkdyYXBoVHlwZSA8PCAiIFwiIiA8PCB0aGlzLT5HcmFwaE5hbWUgPDwgIlwiIHsiIDw8IHN0ZDo6ZW5kbDsKLSAgc3RyIDw8IHRoaXMtPkdyYXBoSGVhZGVyIDw8IHN0ZDo6ZW5kbDsKLX0KLQotdm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZUZvb3RlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgc3RyIDw8ICJ9IiA8PCBzdGQ6OmVuZGw7Ci19Ci0KLXZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVDb25uZWN0aW9ucygKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpbnNlcnRlZENvbm5lY3Rpb25zLCBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgYXV0byB0YXJnZXRQdHJJdCA9IHRoaXMtPlRhcmdldFB0cnMuZmluZCh0YXJnZXROYW1lKTsKLQotICBpZiAodGFyZ2V0UHRySXQgPT0gdGhpcy0+VGFyZ2V0UHRycy5lbmQoKSkgLy8gbm90IGZvdW5kIGF0IGFsbAotICB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgdGhpcy0+V3JpdGVOb2RlKHRhcmdldE5hbWUsIHRhcmdldFB0ckl0LT5zZWNvbmQsIGluc2VydGVkTm9kZXMsIHN0cik7Ci0KLSAgaWYgKHRhcmdldFB0ckl0LT5zZWNvbmQgPT0gbnVsbHB0cikgLy8gaXQncyBhbiBleHRlcm5hbCBsaWJyYXJ5Ci0gIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBteU5vZGVOYW1lID0gdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlcy5maW5kKHRhcmdldE5hbWUpLT5zZWNvbmQ7Ci0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rTGlicmFyeVNjb3BlVHlwZT4gbGwgPQotICAgIGdldFNjb3BlZExpbmtMaWJyYXJpZXNGcm9tVGFyZ2V0KHRhcmdldFB0ckl0LT5zZWNvbmQtPlRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxHZW5lcmF0b3IpOwotCi0gIGZvciAoYXV0byBjb25zdCYgbGxpdCA6IGxsKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYk5hbWUgPSBsbGl0LmZpcnN0OwotICAgIGF1dG8gbGliTmFtZUl0ID0gdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlcy5maW5kKGxpYk5hbWUpOwotCi0gICAgLy8gY2FuIGhhcHBlbiBlLmcuIGlmIEdSQVBIVklaX1RBUkdFVF9JR05PUkVfUkVHRVggaXMgdXNlZAotICAgIGlmIChsaWJOYW1lSXQgPT0gdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlcy5lbmQoKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgY29ubmVjdGlvbk5hbWUgPSBjbVN0ckNhdChteU5vZGVOYW1lLCAnLScsIGxpYk5hbWVJdC0+c2Vjb25kKTsKLSAgICBpZiAoaW5zZXJ0ZWRDb25uZWN0aW9ucy5maW5kKGNvbm5lY3Rpb25OYW1lKSA9PQotICAgICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmVuZCgpKSB7Ci0gICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmluc2VydChjb25uZWN0aW9uTmFtZSk7Ci0gICAgICB0aGlzLT5Xcml0ZU5vZGUobGliTmFtZSwgdGhpcy0+VGFyZ2V0UHRycy5maW5kKGxpYk5hbWUpLT5zZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcywgc3RyKTsKLQotICAgICAgc3RyIDw8ICIgICAgXCIiIDw8IG15Tm9kZU5hbWUgPDwgIlwiIC0+IFwiIiA8PCBsaWJOYW1lSXQtPnNlY29uZCA8PCAiXCIiOwotCi0gICAgICBzdHIgPDwgZ2V0TGlua0xpYnJhcnlTdHlsZShsbGl0LnNlY29uZCk7Ci0KLSAgICAgIHN0ciA8PCAiIC8vICIgPDwgdGFyZ2V0TmFtZSA8PCAiIC0+ICIgPDwgbGliTmFtZSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB0aGlzLT5Xcml0ZUNvbm5lY3Rpb25zKGxpYk5hbWUsIGluc2VydGVkTm9kZXMsIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVEZXBlbmRlckNvbm5lY3Rpb25zKAotICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpbnNlcnRlZE5vZGVzLAotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGluc2VydGVkQ29ubmVjdGlvbnMsIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgc3RyKSBjb25zdAotewotICBhdXRvIHRhcmdldFB0ckl0ID0gdGhpcy0+VGFyZ2V0UHRycy5maW5kKHRhcmdldE5hbWUpOwotCi0gIGlmICh0YXJnZXRQdHJJdCA9PSB0aGlzLT5UYXJnZXRQdHJzLmVuZCgpKSAvLyBub3QgZm91bmQgYXQgYWxsCi0gIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0aGlzLT5Xcml0ZU5vZGUodGFyZ2V0TmFtZSwgdGFyZ2V0UHRySXQtPnNlY29uZCwgaW5zZXJ0ZWROb2Rlcywgc3RyKTsKLQotICBpZiAodGFyZ2V0UHRySXQtPnNlY29uZCA9PSBudWxscHRyKSAvLyBpdCdzIGFuIGV4dGVybmFsIGxpYnJhcnkKLSAgewotICAgIHJldHVybjsKLSAgfQotCi0gIHN0ZDo6c3RyaW5nIG15Tm9kZU5hbWUgPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmZpbmQodGFyZ2V0TmFtZSktPnNlY29uZDsKLQotICAvLyBub3cgc2VhcmNoIHdobyBsaW5rcyBhZ2FpbnN0IG1lCi0gIGZvciAoYXV0byBjb25zdCYgdHB0ciA6IHRoaXMtPlRhcmdldFB0cnMpIHsKLSAgICBpZiAodHB0ci5zZWNvbmQgPT0gbnVsbHB0cikgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLT5HZW5lcmF0ZUZvclRhcmdldFR5cGUodHB0ci5zZWNvbmQtPkdldFR5cGUoKSkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIE5vdyB3ZSBoYXZlIGEgdGFyZ2V0LCBjaGVjayB3aGV0aGVyIGl0IGxpbmtzIGFnYWluc3QgdGFyZ2V0TmFtZS4KLSAgICAvLyBJZiBzbywgZHJhdyBhIGNvbm5lY3Rpb24sIGFuZCB0aGVuIGNvbnRpbnVlIHdpdGggZGVwZW5kZXJzIG9uIHRoYXQgb25lLgotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rTGlicmFyeVNjb3BlVHlwZT4gbGwgPQotICAgICAgZ2V0U2NvcGVkTGlua0xpYnJhcmllc0Zyb21UYXJnZXQodHB0ci5zZWNvbmQtPlRhcmdldCwgR2xvYmFsR2VuZXJhdG9yKTsKLQotICAgIGZvciAoYXV0byBjb25zdCYgbGxpdCA6IGxsKSB7Ci0gICAgICBpZiAobGxpdC5maXJzdCA9PSB0YXJnZXROYW1lKSB7Ci0gICAgICAgIC8vIFNvIHRoaXMgdGFyZ2V0IGxpbmtzIGFnYWluc3QgdGFyZ2V0TmFtZS4KLSAgICAgICAgYXV0byBkZXBlbmRlck5vZGVOYW1lSXQgPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmZpbmQodHB0ci5maXJzdCk7Ci0KLSAgICAgICAgaWYgKGRlcGVuZGVyTm9kZU5hbWVJdCAhPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmVuZCgpKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgY29ubmVjdGlvbk5hbWUgPQotICAgICAgICAgICAgY21TdHJDYXQoZGVwZW5kZXJOb2RlTmFtZUl0LT5zZWNvbmQsICctJywgbXlOb2RlTmFtZSk7Ci0KLSAgICAgICAgICBpZiAoaW5zZXJ0ZWRDb25uZWN0aW9ucy5maW5kKGNvbm5lY3Rpb25OYW1lKSA9PQotICAgICAgICAgICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmluc2VydChjb25uZWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICB0aGlzLT5Xcml0ZU5vZGUodHB0ci5maXJzdCwgdHB0ci5zZWNvbmQsIGluc2VydGVkTm9kZXMsIHN0cik7Ci0KLSAgICAgICAgICAgIHN0ciA8PCAiICAgIFwiIiA8PCBkZXBlbmRlck5vZGVOYW1lSXQtPnNlY29uZCA8PCAiXCIgLT4gXCIiCi0gICAgICAgICAgICAgICAgPDwgbXlOb2RlTmFtZSA8PCAiXCIiOwotICAgICAgICAgICAgc3RyIDw8ICIgLy8gIiA8PCB0YXJnZXROYW1lIDw8ICIgLT4gIiA8PCB0cHRyLmZpcnN0IDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgICAgIHN0ciA8PCBnZXRMaW5rTGlicmFyeVN0eWxlKGxsaXQuc2Vjb25kKTsKLSAgICAgICAgICAgIHRoaXMtPldyaXRlRGVwZW5kZXJDb25uZWN0aW9ucyh0cHRyLmZpcnN0LCBpbnNlcnRlZE5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICAgIC8vIFJlc2VydmVkIHRhcmdldHMgaGF2ZSBpbmNvbnNpc3RlbnQgbmFtZXMgYWNyb3NzIHBsYXRmb3JtcyAoZS5nLiAnYWxsJworICAgICAgLy8gdnMuICdBTExfQlVJTEQnKSwgd2hpY2ggY2FuIGRpc3J1cHQgdGhlIHRyYXZlcnNhbCBvcmRlcmluZy4KKyAgICAgIC8vIFdlIGRvbid0IG5lZWQgb3Igd2FudCB0aGVtIGFueXdheS4KKyAgICAgIGlmICghY21HbG9iYWxHZW5lcmF0b3I6OklzUmVzZXJ2ZWRUYXJnZXQoZ3QtPkdldE5hbWUoKSkpIHsKKyAgICAgICAgc29ydGVkR2VuZXJhdG9yVGFyZ2V0cy5pbnNlcnQoZ3QuZ2V0KCkpOwogICAgICAgfQogICAgIH0KICAgfQotfQogCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTm9kZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGluc2VydGVkTm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgaWYgKGluc2VydGVkTm9kZXMuZmluZCh0YXJnZXROYW1lKSA9PSBpbnNlcnRlZE5vZGVzLmVuZCgpKSB7Ci0gICAgaW5zZXJ0ZWROb2Rlcy5pbnNlcnQodGFyZ2V0TmFtZSk7Ci0gICAgYXV0byBuYW1lSXQgPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmZpbmQodGFyZ2V0TmFtZSk7Ci0KLSAgICBzdHIgPDwgIiAgICBcIiIgPDwgbmFtZUl0LT5zZWNvbmQgPDwgIlwiIFsgbGFiZWw9XCIiIDw8IHRhcmdldE5hbWUKLSAgICAgICAgPDwgIlwiIHNoYXBlPVwiIiA8PCBnZXRTaGFwZUZvclRhcmdldCh0YXJnZXQpIDw8ICJcIl07IiA8PCBzdGQ6OmVuZGw7CisgIGZvciAoYXV0byBjb25zdCBndCA6IHNvcnRlZEdlbmVyYXRvclRhcmdldHMpIHsKKyAgICBhdXRvIGl0ZW0gPSBjbUxpbmtJdGVtKGd0LCBmYWxzZSwgZ3QtPkdldEJhY2t0cmFjZSgpKTsKKyAgICB0aGlzLT5WaXNpdEl0ZW0oaXRlbSk7CiAgIH0KIH0KIAotdm9pZCBjbUdyYXBoVml6V3JpdGVyOjpDb2xsZWN0VGFyZ2V0c0FuZExpYnMoKQordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZUhlYWRlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKLSAgaWYgKCF0aGlzLT5IYXZlVGFyZ2V0c0FuZExpYnMpIHsKLSAgICB0aGlzLT5IYXZlVGFyZ2V0c0FuZExpYnMgPSB0cnVlOwotICAgIGludCBjbnQgPSB0aGlzLT5Db2xsZWN0QWxsVGFyZ2V0cygpOwotICAgIGlmICh0aGlzLT5HZW5lcmF0ZUZvckV4dGVybmFscykgewotICAgICAgdGhpcy0+Q29sbGVjdEFsbEV4dGVybmFsTGlicyhjbnQpOwotICAgIH0KLSAgfQorICBhdXRvIGNvbnN0IGVzY2FwZWRHcmFwaE5hbWUgPSBFc2NhcGVGb3JEb3RGaWxlKG5hbWUpOworICBmcyA8PCAiZGlncmFwaCBcIiIgPDwgZXNjYXBlZEdyYXBoTmFtZSA8PCAiXCIge1xuIgorICAgICA8PCB0aGlzLT5HcmFwaEhlYWRlciA8PCAnXG4nOwogfQogCi1pbnQgY21HcmFwaFZpeldyaXRlcjo6Q29sbGVjdEFsbFRhcmdldHMoKQordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZUZvb3RlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzKQogewotICBpbnQgY250ID0gMDsKLSAgLy8gRmlyc3QgcGFzcyBnZXQgdGhlIGxpc3Qgb2YgYWxsIGNtYWtlIHRhcmdldHMKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFsVGFyZ2V0TmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpOwotICAgICAgaWYgKHRoaXMtPklnbm9yZVRoaXNUYXJnZXQocmVhbFRhcmdldE5hbWUpKSB7Ci0gICAgICAgIC8vIFNraXAgaWdub3JlZCB0YXJnZXRzCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgLy8gc3RkOjpjb3V0IDw8ICJGb3VuZCB0YXJnZXQ6ICIgPDwgdGl0LT5maXJzdCA8PCBzdGQ6OmVuZGw7Ci0gICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3N0cjsKLSAgICAgIG9zdHIgPDwgdGhpcy0+R3JhcGhOb2RlUHJlZml4IDw8IGNudCsrOwotICAgICAgdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlc1tyZWFsVGFyZ2V0TmFtZV0gPSBvc3RyLnN0cigpOwotICAgICAgdGhpcy0+VGFyZ2V0UHRyc1tyZWFsVGFyZ2V0TmFtZV0gPSB0YXJnZXQ7CisgIGZzIDw8ICJ9XG4iOworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTGVnZW5kKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpCit7CisgIC8vIE5vdGUgdGhhdCB0aGUgc3ViZ3JhcGggbmFtZSBtdXN0IHN0YXJ0IHdpdGggImNsdXN0ZXIiLCBhcyBkb25lIGhlcmUsIHRvCisgIC8vIG1ha2UgR3JhcGh2aXogbGF5b3V0IGVuZ2luZXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBrZWVwIHRoZSBub2RlcworICAvLyB0b2dldGhlci4KKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICBmcyA8PCAic3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7XG4iCisgICAgICAgICIgIGxhYmVsID0gXCJMZWdlbmRcIjtcbiIKKyAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBvZiB0aGUgYm94IHN1cnJvdW5kaW5nIHRoZSBsZWdlbmQuCisgICAgICAgICIgIGNvbG9yID0gYmxhY2s7XG4iCisgICAgICAgIC8vIFdlIHVzZSBpbnZpc2libGUgZWRnZXMganVzdCB0byBlbmZvcmNlIHRoZSBsYXlvdXQuCisgICAgICAgICIgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07XG4iCisgICAgICAgIC8vIE5vZGVzLgorICAgICAgICAiICBsZWdlbmROb2RlMCBbIGxhYmVsID0gXCJFeGVjdXRhYmxlXCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0VYRUNVVEFCTEUgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMSBbIGxhYmVsID0gXCJTdGF0aWMgTGlicmFyeVwiLCBzaGFwZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1NUQVRJQyA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSBcIlNoYXJlZCBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU0hBUkVEIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9IFwiTW9kdWxlIExpYnJhcnlcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9NT0RVTEUgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlNCBbIGxhYmVsID0gXCJJbnRlcmZhY2UgTGlicmFyeVwiLCBzaGFwZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX0lOVEVSRkFDRSA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSBcIk9iamVjdCBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfT0JKRUNUIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9IFwiVW5rbm93biBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfVU5LTk9XTiA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSBcIkN1c3RvbSBUYXJnZXRcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfVVRJTElUWSA8PCAiIF07XG4iCisgICAgICAgIC8vIEVkZ2VzLgorICAgICAgICAvLyBTb21lIG9mIHRob3NlIGFyZSBkdW1teSAoaW52aXNpYmxlKSBlZGdlcyB0byBlbmZvcmNlIGEgbGF5b3V0LgorICAgICAgICAiICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BVQkxJQyA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSAiCisgICAgIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSBcIkludGVyZmFjZVwiLCBzdHlsZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfRURHRV9TVFlMRV9JTlRFUkZBQ0UgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gXCJQcml2YXRlXCIsIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BSSVZBVEUgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BVQkxJQyA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3O1xuIgorICAgICAgICAifVxuIjsKKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTm9kZShjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgaXRlbSkKK3sKKyAgYXV0byBjb25zdCYgaXRlbU5hbWUgPSBpdGVtLkFzU3RyKCk7CisgIGF1dG8gY29uc3QmIG5vZGVOYW1lID0gdGhpcy0+Tm9kZU5hbWVzW2l0ZW1OYW1lXTsKKworICBhdXRvIGNvbnN0IGl0ZW1OYW1lV2l0aEFsaWFzZXMgPSBJdGVtTmFtZVdpdGhBbGlhc2VzKGl0ZW1OYW1lKTsKKyAgYXV0byBjb25zdCBlc2NhcGVkTGFiZWwgPSBFc2NhcGVGb3JEb3RGaWxlKGl0ZW1OYW1lV2l0aEFsaWFzZXMpOworCisgIGZzIDw8ICIgICAgXCIiIDw8IG5vZGVOYW1lIDw8ICJcIiBbIGxhYmVsID0gXCIiIDw8IGVzY2FwZWRMYWJlbAorICAgICA8PCAiXCIsIHNoYXBlID0gIiA8PCBnZXRTaGFwZUZvclRhcmdldChpdGVtKSA8PCAiIF07XG4iOworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlQ29ubmVjdGlvbihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBlZGdlU3R5bGUpCit7CisgIGF1dG8gY29uc3QmIGRlcGVuZGVyTmFtZSA9IGRlcGVuZGVyLkFzU3RyKCk7CisgIGF1dG8gY29uc3QmIGRlcGVuZGVlTmFtZSA9IGRlcGVuZGVlLkFzU3RyKCk7CisKKyAgZnMgPDwgIiAgICBcIiIgPDwgdGhpcy0+Tm9kZU5hbWVzW2RlcGVuZGVyTmFtZV0gPDwgIlwiIC0+IFwiIgorICAgICA8PCB0aGlzLT5Ob2RlTmFtZXNbZGVwZW5kZWVOYW1lXSA8PCAiXCIgIgorICAgICA8PCBlZGdlU3R5bGUKKyAgICAgPDwgIiAvLyAiIDw8IGRlcGVuZGVyTmFtZSA8PCAiIC0+ICIgPDwgZGVwZW5kZWVOYW1lIDw8ICdcbic7Cit9CisKK2Jvb2wgY21HcmFwaFZpeldyaXRlcjo6SXRlbUV4Y2x1ZGVkKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pCit7CisgIGF1dG8gY29uc3QgaXRlbU5hbWUgPSBpdGVtLkFzU3RyKCk7CisKKyAgaWYgKHRoaXMtPkl0ZW1OYW1lRmlsdGVyZWRPdXQoaXRlbU5hbWUpKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBpZiAoaXRlbS5UYXJnZXQgPT0gbnVsbHB0cikgeworICAgIHJldHVybiAhdGhpcy0+R2VuZXJhdGVGb3JFeHRlcm5hbHM7CisgIH0KKworICBpZiAoaXRlbS5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGl0ZW1OYW1lLCAiTmlnaHRseSIpIHx8CisgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChpdGVtTmFtZSwgIkNvbnRpbnVvdXMiKSB8fAorICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoaXRlbU5hbWUsICJFeHBlcmltZW50YWwiKSkgeworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIGNudDsKLX0KLQotaW50IGNtR3JhcGhWaXpXcml0ZXI6OkNvbGxlY3RBbGxFeHRlcm5hbExpYnMoaW50IGNudCkKLXsKLSAgLy8gT2ssIG5vdyBmaW5kIGFsbCB0aGUgc3R1ZmYgd2UgbGluayB0byB0aGF0IGlzIG5vdCBpbiBjbWFrZQotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYWxUYXJnZXROYW1lID0gdGFyZ2V0LT5HZXROYW1lKCk7Ci0gICAgICBpZiAodGhpcy0+SWdub3JlVGhpc1RhcmdldChyZWFsVGFyZ2V0TmFtZSkpIHsKLSAgICAgICAgLy8gU2tpcCBpZ25vcmVkIHRhcmdldHMKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBjb25zdCBjbVRhcmdldDo6TGlua0xpYnJhcnlWZWN0b3JUeXBlKiBsbCA9Ci0gICAgICAgICYodGFyZ2V0LT5UYXJnZXQtPkdldE9yaWdpbmFsTGlua0xpYnJhcmllcygpKTsKLSAgICAgIGZvciAoYXV0byBjb25zdCYgbGxpdCA6ICpsbCkgewotICAgICAgICBzdGQ6OnN0cmluZyBsaWJOYW1lID0gbGxpdC5maXJzdDsKLSAgICAgICAgaWYgKHRoaXMtPklnbm9yZVRoaXNUYXJnZXQobGliTmFtZSkpIHsKLSAgICAgICAgICAvLyBTa2lwIGlnbm9yZWQgdGFyZ2V0cwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEdsb2JhbEdlbmVyYXRvci0+SXNBbGlhcyhsaWJOYW1lKSkgewotICAgICAgICAgIGNvbnN0IGF1dG8gdGd0ID0gR2xvYmFsR2VuZXJhdG9yLT5GaW5kVGFyZ2V0KGxpYk5hbWUpOwotICAgICAgICAgIGlmICh0Z3QpIHsKLSAgICAgICAgICAgIGxpYk5hbWUgPSB0Z3QtPkdldE5hbWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHRhckl0ID0gdGhpcy0+VGFyZ2V0UHRycy5maW5kKGxpYk5hbWUpOwotICAgICAgICBpZiAodGFySXQgPT0gdGhpcy0+VGFyZ2V0UHRycy5lbmQoKSkgewotICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOwotICAgICAgICAgIG9zdHIgPDwgdGhpcy0+R3JhcGhOb2RlUHJlZml4IDw8IGNudCsrOwotICAgICAgICAgIHRoaXMtPlRhcmdldE5hbWVzTm9kZXNbbGliTmFtZV0gPSBvc3RyLnN0cigpOwotICAgICAgICAgIHRoaXMtPlRhcmdldFB0cnNbbGliTmFtZV0gPSBudWxscHRyOwotICAgICAgICAgIC8vIHN0ciA8PCAiICAgIFwiIiA8PCBvc3RyIDw8ICJcIiBbIGxhYmVsPVwiIiA8PCBsaWJOYW1lCi0gICAgICAgICAgLy8gPDwgICJcIiBzaGFwZT1cImVsbGlwc2VcIl07IiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9CisgIGlmIChpdGVtLlRhcmdldC0+SXNJbXBvcnRlZCgpICYmICF0aGlzLT5HZW5lcmF0ZUZvckV4dGVybmFscykgeworICAgIHJldHVybiB0cnVlOwogICB9Ci0gIHJldHVybiBjbnQ7CisKKyAgcmV0dXJuICF0aGlzLT5UYXJnZXRUeXBlRW5hYmxlZChpdGVtLlRhcmdldC0+R2V0VHlwZSgpKTsKIH0KIAotYm9vbCBjbUdyYXBoVml6V3JpdGVyOjpJZ25vcmVUaGlzVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQorYm9vbCBjbUdyYXBoVml6V3JpdGVyOjpJdGVtTmFtZUZpbHRlcmVkT3V0KHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtTmFtZSkKIHsKKyAgaWYgKGl0ZW1OYW1lID09ICI+IikgeworICAgIC8vIEZJWE1FOiB3aHkgZG8gd2UgZXZlbiByZWNlaXZlIHN1Y2ggYSB0YXJnZXQgaGVyZT8KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlmIChjbUdsb2JhbEdlbmVyYXRvcjo6SXNSZXNlcnZlZFRhcmdldChpdGVtTmFtZSkpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCiAgIGZvciAoY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdFeCA6IHRoaXMtPlRhcmdldHNUb0lnbm9yZVJlZ2V4KSB7CiAgICAgaWYgKHJlZ0V4LmlzX3ZhbGlkKCkpIHsKLSAgICAgIGlmIChyZWdFeC5maW5kKG5hbWUpKSB7CisgICAgICBpZiAocmVnRXguZmluZChpdGVtTmFtZSkpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgfQpAQCAtNTc5LDcgKzQzMCw3IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBjbUdyYXBoVml6V3JpdGVyOjpHZW5lcmF0ZUZvclRhcmdldFR5cGUoCitib29sIGNtR3JhcGhWaXpXcml0ZXI6OlRhcmdldFR5cGVFbmFibGVkKAogICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSkgY29uc3QKIHsKICAgc3dpdGNoICh0YXJnZXRUeXBlKSB7CkBAIC01OTIsOSArNDQzLDczIEBACiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgcmV0dXJuIHRoaXMtPkdlbmVyYXRlRm9yTW9kdWxlTGliczsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gdGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2U7CisgICAgICByZXR1cm4gdGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2VMaWJzOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKKyAgICAgIHJldHVybiB0aGlzLT5HZW5lcmF0ZUZvck9iamVjdExpYnM7CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVOS05PV05fTElCUkFSWToKKyAgICAgIHJldHVybiB0aGlzLT5HZW5lcmF0ZUZvclVua25vd25MaWJzOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgorICAgICAgcmV0dXJuIHRoaXMtPkdlbmVyYXRlRm9yQ3VzdG9tVGFyZ2V0czsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDoKKyAgICAgIC8vIEJ1aWx0LWluIHRhcmdldHMgbGlrZSBlZGl0X2NhY2hlLCBldGMuCisgICAgICAvLyBXZSBkb24ndCBuZWVkL3dhbnQgdGhvc2UgaW4gdGhlIGRvdCBmaWxlLgorICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQogICByZXR1cm4gZmFsc2U7CiB9CisKK3N0ZDo6c3RyaW5nIGNtR3JhcGhWaXpXcml0ZXI6Okl0ZW1OYW1lV2l0aEFsaWFzZXMoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtTmFtZSkgY29uc3QKK3sKKyAgYXV0byBuYW1lV2l0aEFsaWFzZXMgPSBpdGVtTmFtZTsKKworICBmb3IgKGF1dG8gY29uc3QmIGxnIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgeworICAgIGZvciAoYXV0byBjb25zdCYgYWxpYXNUYXJnZXRzIDogbGctPkdldE1ha2VmaWxlKCktPkdldEFsaWFzVGFyZ2V0cygpKSB7CisgICAgICBpZiAoYWxpYXNUYXJnZXRzLnNlY29uZCA9PSBpdGVtTmFtZSkgeworICAgICAgICBuYW1lV2l0aEFsaWFzZXMgKz0gIlxcbigiICsgYWxpYXNUYXJnZXRzLmZpcnN0ICsgIikiOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBuYW1lV2l0aEFsaWFzZXM7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR3JhcGhWaXpXcml0ZXI6OkdldEVkZ2VTdHlsZShEZXBlbmRlbmN5VHlwZSBkdCkKK3sKKyAgc3RkOjpzdHJpbmcgc3R5bGU7CisgIHN3aXRjaCAoZHQpIHsKKyAgICBjYXNlIERlcGVuZGVuY3lUeXBlOjpMaW5rUHJpdmF0ZToKKyAgICAgIHN0eWxlID0gIlsgc3R5bGUgPSAiICsgc3RkOjpzdHJpbmcoR1JBUEhWSVpfRURHRV9TVFlMRV9QUklWQVRFKSArICIgXSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIERlcGVuZGVuY3lUeXBlOjpMaW5rSW50ZXJmYWNlOgorICAgICAgc3R5bGUgPSAiWyBzdHlsZSA9ICIgKyBzdGQ6OnN0cmluZyhHUkFQSFZJWl9FREdFX1NUWUxFX0lOVEVSRkFDRSkgKyAiIF0iOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiBzdHlsZTsKK30KKworc3RkOjpzdHJpbmcgY21HcmFwaFZpeldyaXRlcjo6RXNjYXBlRm9yRG90RmlsZShzdGQ6OnN0cmluZyBjb25zdCYgc3RyKQoreworICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RXNjYXBlQ2hhcnMoc3RyLmRhdGEoKSwgIlwiIik7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR3JhcGhWaXpXcml0ZXI6OlBhdGhTYWZlU3RyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpCit7CisgIHN0ZDo6c3RyaW5nIHBhdGhTYWZlU3RyOworCisgIC8vIFdlJ2xsIG9ubHkga2VlcCBhbHBoYW51bWVyaWNhbCBjaGFyYWN0ZXJzLCBwbHVzIHRoZSBmb2xsb3dpbmcgb25lcyB0aGF0CisgIC8vIGFyZSBjb21tb24sIGFuZCBzYWZlIG9uIGFsbCBwbGF0Zm9ybXM6CisgIGF1dG8gY29uc3QgZXh0cmFfY2hhcnMgPSBzdGQ6OnNldDxjaGFyPnsgJy4nLCAnLScsICdfJyB9OworCisgIGZvciAoY2hhciBjIDogc3RyKSB7CisgICAgaWYgKHN0ZDo6aXNhbG51bShjKSB8fCBleHRyYV9jaGFycy5maW5kKGMpICE9IGV4dHJhX2NoYXJzLmNlbmQoKSkgeworICAgICAgcGF0aFNhZmVTdHIgKz0gYzsKKyAgICB9CisgIH0KKworICByZXR1cm4gcGF0aFNhZmVTdHI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5oIGIvU291cmNlL2NtR3JhcGhWaXpXcml0ZXIuaAppbmRleCA5YzMwNTFmLi41Nzg2NjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5oCisrKyBiL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmgKQEAgLTYsODcgKzYsMTA2IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKKyNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKKyNpbmNsdWRlICJjbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAKLWNsYXNzIGNtR2VuZXJhdGVkRmlsZVN0cmVhbTsKLWNsYXNzIGNtR2VuZXJhdG9yVGFyZ2V0OwotY2xhc3MgY21Mb2NhbEdlbmVyYXRvcjsKK2NsYXNzIGNtTGlua0l0ZW07CiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKIAogLyoqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB3cml0aW5nIGZpbGVzIGZvciBncmFwaHZpeiAoZG90KSBmb3IgZ3JhcGhzCiAgKiByZXByZXNlbnRpbmcgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0YXJnZXRzIGluIHRoZSBwcm9qZWN0LiAqLwotY2xhc3MgY21HcmFwaFZpeldyaXRlcgorY2xhc3MgY21HcmFwaFZpeldyaXRlciA6IHB1YmxpYyBjbUxpbmtJdGVtR3JhcGhWaXNpdG9yCiB7CiBwdWJsaWM6Ci0gIGNtR3JhcGhWaXpXcml0ZXIoY29uc3QgY21HbG9iYWxHZW5lcmF0b3IqIGdsb2JhbEdlbmVyYXRvcik7CisgIGNtR3JhcGhWaXpXcml0ZXIoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2xvYmFsR2VuZXJhdG9yKiBnbG9iYWxHZW5lcmF0b3IpOworICB+Y21HcmFwaFZpeldyaXRlcigpIG92ZXJyaWRlOworCisgIHZvaWQgVmlzaXRHcmFwaChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgb3ZlcnJpZGU7CisKKyAgdm9pZCBPbkl0ZW0oY21MaW5rSXRlbSBjb25zdCYgaXRlbSkgb3ZlcnJpZGU7CisKKyAgdm9pZCBPbkRpcmVjdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICBEZXBlbmRlbmN5VHlwZSBkdCkgb3ZlcnJpZGU7CisKKyAgdm9pZCBPbkluZGlyZWN0TGluayhjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSkgb3ZlcnJpZGU7CiAKICAgdm9pZCBSZWFkU2V0dGluZ3MoY29uc3Qgc3RkOjpzdHJpbmcmIHNldHRpbmdzRmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmYWxsYmFja1NldHRpbmdzRmlsZU5hbWUpOwogCi0gIHZvaWQgV3JpdGVQZXJUYXJnZXRGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpOwotICB2b2lkIFdyaXRlVGFyZ2V0RGVwZW5kZXJzRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKTsKKyAgdm9pZCBXcml0ZSgpOwogCi0gIHZvaWQgV3JpdGVHbG9iYWxGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7Citwcml2YXRlOgorICB1c2luZyBGaWxlU3RyZWFtTWFwID0KKyAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4+OwogCi1wcm90ZWN0ZWQ6Ci0gIHZvaWQgQ29sbGVjdFRhcmdldHNBbmRMaWJzKCk7CisgIHZvaWQgVmlzaXRMaW5rKGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVyLCBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwKKyAgICAgICAgICAgICAgICAgYm9vbCBpc0RpcmVjdExpbmssIHN0ZDo6c3RyaW5nIGNvbnN0JiBzY29wZVR5cGUgPSAiIik7CiAKLSAgaW50IENvbGxlY3RBbGxUYXJnZXRzKCk7CisgIHZvaWQgV3JpdGVIZWFkZXIoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBmcywgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpOwogCi0gIGludCBDb2xsZWN0QWxsRXh0ZXJuYWxMaWJzKGludCBjbnQpOworICB2b2lkIFdyaXRlRm9vdGVyKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpOwogCi0gIHZvaWQgV3JpdGVIZWFkZXIoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBzdHIpIGNvbnN0OworICB2b2lkIFdyaXRlTGVnZW5kKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpOwogCi0gIHZvaWQgV3JpdGVDb25uZWN0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWRDb25uZWN0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgc3RyKSBjb25zdDsKKyAgdm9pZCBXcml0ZU5vZGUoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBmcywgY21MaW5rSXRlbSBjb25zdCYgaXRlbSk7CiAKLSAgdm9pZCBXcml0ZURlcGVuZGVyQ29ubmVjdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpbnNlcnRlZENvbm5lY3Rpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3Q7CisgIHZvaWQgQ3JlYXRlVGFyZ2V0RmlsZShGaWxlU3RyZWFtTWFwJiBmaWxlU3RyZWFtTWFwLCBjbUxpbmtJdGVtIGNvbnN0JiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZU5hbWVTdWZmaXggPSAiIik7CiAKLSAgdm9pZCBXcml0ZU5vZGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgICAgICAgICAgICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBzdHIpIGNvbnN0OworICB2b2lkIFdyaXRlQ29ubmVjdGlvbihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlclRhcmdldE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlVGFyZ2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGVkZ2VTdHlsZSk7CiAKLSAgdm9pZCBXcml0ZUZvb3RlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3Q7CisgIGJvb2wgSXRlbUV4Y2x1ZGVkKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pOworICBib29sIEl0ZW1OYW1lRmlsdGVyZWRPdXQoc3RkOjpzdHJpbmcgY29uc3QmIGl0ZW1OYW1lKTsKKyAgYm9vbCBUYXJnZXRUeXBlRW5hYmxlZChjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSkgY29uc3Q7CiAKLSAgYm9vbCBJZ25vcmVUaGlzVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKyAgc3RkOjpzdHJpbmcgSXRlbU5hbWVXaXRoQWxpYXNlcyhzdGQ6OnN0cmluZyBjb25zdCYgaXRlbU5hbWUpIGNvbnN0OwogCi0gIGJvb2wgR2VuZXJhdGVGb3JUYXJnZXRUeXBlKGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKSBjb25zdDsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldEVkZ2VTdHlsZShEZXBlbmRlbmN5VHlwZSBkdCk7CiAKLSAgc3RkOjpzdHJpbmcgR3JhcGhUeXBlOworICBzdGF0aWMgc3RkOjpzdHJpbmcgRXNjYXBlRm9yRG90RmlsZShzdGQ6OnN0cmluZyBjb25zdCYgc3RyKTsKKworICBzdGF0aWMgc3RkOjpzdHJpbmcgUGF0aFNhZmVTdHJpbmcoc3RkOjpzdHJpbmcgY29uc3QmIHN0cik7CisKKyAgc3RkOjpzdHJpbmcgRmlsZU5hbWU7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBHbG9iYWxGaWxlU3RyZWFtOworICBGaWxlU3RyZWFtTWFwIFBlclRhcmdldEZpbGVTdHJlYW1zOworICBGaWxlU3RyZWFtTWFwIFRhcmdldERlcGVuZGVyc0ZpbGVTdHJlYW1zOworCiAgIHN0ZDo6c3RyaW5nIEdyYXBoTmFtZTsKICAgc3RkOjpzdHJpbmcgR3JhcGhIZWFkZXI7CiAgIHN0ZDo6c3RyaW5nIEdyYXBoTm9kZVByZWZpeDsKIAogICBzdGQ6OnZlY3RvcjxjbXN5czo6UmVndWxhckV4cHJlc3Npb24+IFRhcmdldHNUb0lnbm9yZVJlZ2V4OwogCi0gIGNvbnN0IGNtR2xvYmFsR2VuZXJhdG9yKiBHbG9iYWxHZW5lcmF0b3I7Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgTG9jYWxHZW5lcmF0b3JzOworICBjbUdsb2JhbEdlbmVyYXRvciBjb25zdCogR2xvYmFsR2VuZXJhdG9yOwogCi0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCo+IFRhcmdldFB0cnM7Ci0gIC8vIG1hcHMgZnJvbSB0aGUgYWN0dWFsIHRhcmdldCBuYW1lcyB0byBub2RlIG5hbWVzIGluIGRvdDoKLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBUYXJnZXROYW1lc05vZGVzOworICBpbnQgTmV4dE5vZGVJZDsKKyAgLy8gbWFwcyBmcm9tIHRoZSBhY3R1YWwgaXRlbSBuYW1lcyB0byBub2RlIG5hbWVzIGluIGRvdDoKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBOb2RlTmFtZXM7CiAKICAgYm9vbCBHZW5lcmF0ZUZvckV4ZWN1dGFibGVzOwogICBib29sIEdlbmVyYXRlRm9yU3RhdGljTGliczsKICAgYm9vbCBHZW5lcmF0ZUZvclNoYXJlZExpYnM7CiAgIGJvb2wgR2VuZXJhdGVGb3JNb2R1bGVMaWJzOwotICBib29sIEdlbmVyYXRlRm9ySW50ZXJmYWNlOworICBib29sIEdlbmVyYXRlRm9ySW50ZXJmYWNlTGliczsKKyAgYm9vbCBHZW5lcmF0ZUZvck9iamVjdExpYnM7CisgIGJvb2wgR2VuZXJhdGVGb3JVbmtub3duTGliczsKKyAgYm9vbCBHZW5lcmF0ZUZvckN1c3RvbVRhcmdldHM7CiAgIGJvb2wgR2VuZXJhdGVGb3JFeHRlcm5hbHM7CiAgIGJvb2wgR2VuZXJhdGVQZXJUYXJnZXQ7CiAgIGJvb2wgR2VuZXJhdGVEZXBlbmRlcnM7Ci0gIGJvb2wgSGF2ZVRhcmdldHNBbmRMaWJzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JREVPcHRpb25zLmN4eCBiL1NvdXJjZS9jbUlERU9wdGlvbnMuY3h4CmluZGV4IDcxMzI2ZDIuLmI1MzMxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUlERU9wdGlvbnMuY3h4CisrKyBiL1NvdXJjZS9jbUlERU9wdGlvbnMuY3h4CkBAIC00LDYgKzQsOCBAQAogCiAjaW5jbHVkZSA8aXRlcmF0b3I+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgImNtc3lzL1N0cmluZy5oIgpAQCAtMTczLDcgKzE3NSw3IEBACiB9CiB2b2lkIGNtSURFT3B0aW9uczo6QWRkRGVmaW5lcyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlZmluZXMpCiB7Ci0gIGNtQXBwZW5kKHRoaXMtPkRlZmluZXMsIGRlZmluZXMpOworICBjbTo6YXBwZW5kKHRoaXMtPkRlZmluZXMsIGRlZmluZXMpOwogfQogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNtSURFT3B0aW9uczo6R2V0RGVmaW5lcygpIGNvbnN0CkBAIC0xOTUsNyArMTk3LDcgQEAKIH0KIHZvaWQgY21JREVPcHRpb25zOjpBZGRJbmNsdWRlcyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGluY2x1ZGVzKQogewotICBjbUFwcGVuZCh0aGlzLT5JbmNsdWRlcywgaW5jbHVkZXMpOworICBjbTo6YXBwZW5kKHRoaXMtPkluY2x1ZGVzLCBpbmNsdWRlcyk7CiB9CiAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY21JREVPcHRpb25zOjpHZXRJbmNsdWRlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbmNsdWRlRGlyZWN0b3J5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21JbmNsdWRlRGlyZWN0b3J5Q29tbWFuZC5jeHgKaW5kZXggMTcwYWVhMS4uYjQwOGY3MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5jbHVkZURpcmVjdG9yeUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUluY2x1ZGVEaXJlY3RvcnlDb21tYW5kLmN4eApAQCAtNiw3ICs2LDggQEAKICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtNTgsOSArNTksOSBAQAogICAgIEdldEluY2x1ZGVzKG1mLCAqaSwgaW5jbHVkZXMpOwogCiAgICAgaWYgKGJlZm9yZSkgewotICAgICAgY21BcHBlbmQoYmVmb3JlSW5jbHVkZXMsIGluY2x1ZGVzKTsKKyAgICAgIGNtOjphcHBlbmQoYmVmb3JlSW5jbHVkZXMsIGluY2x1ZGVzKTsKICAgICB9IGVsc2UgewotICAgICAgY21BcHBlbmQoYWZ0ZXJJbmNsdWRlcywgaW5jbHVkZXMpOworICAgICAgY206OmFwcGVuZChhZnRlckluY2x1ZGVzLCBpbmNsdWRlcyk7CiAgICAgfQogICAgIGlmIChzeXN0ZW0pIHsKICAgICAgIHN5c3RlbUluY2x1ZGVzLmluc2VydChpbmNsdWRlcy5iZWdpbigpLCBpbmNsdWRlcy5lbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbmNsdWRlRXh0ZXJuYWxNU1Byb2plY3RDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUluY2x1ZGVFeHRlcm5hbE1TUHJvamVjdENvbW1hbmQuY3h4CmluZGV4IGZhMWU4YmMuLjViNTMyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluY2x1ZGVFeHRlcm5hbE1TUHJvamVjdENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUluY2x1ZGVFeHRlcm5hbE1TUHJvamVjdENvbW1hbmQuY3h4CkBAIC03NywyOCArNzcsMjcgQEAKIAogICAgIGlmICghY3VzdG9tR3VpZC5lbXB0eSgpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBndWlkVmFyaWFibGUgPSB1dGlsaXR5X25hbWUgKyAiX0dVSURfQ01BS0UiOwotICAgICAgbWYuR2V0Q01ha2VJbnN0YW5jZSgpLT5BZGRDYWNoZUVudHJ5KGd1aWRWYXJpYWJsZS5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUd1aWQuY19zdHIoKSwgIlN0b3JlZCBHVUlEIiwKKyAgICAgIG1mLkdldENNYWtlSW5zdGFuY2UoKS0+QWRkQ2FjaGVFbnRyeShndWlkVmFyaWFibGUsIGN1c3RvbUd1aWQuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RvcmVkIEdVSUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogICAgIH0KIAogICAgIC8vIENyZWF0ZSBhIHRhcmdldCBpbnN0YW5jZSBmb3IgdGhpcyB1dGlsaXR5LgotICAgIGNtVGFyZ2V0KiB0YXJnZXQgPQotICAgICAgbWYuQWRkTmV3VGFyZ2V0KGNtU3RhdGVFbnVtczo6VVRJTElUWSwgdXRpbGl0eV9uYW1lLmNfc3RyKCkpOworICAgIGNtVGFyZ2V0KiB0YXJnZXQgPSBtZi5BZGROZXdUYXJnZXQoY21TdGF0ZUVudW1zOjpVVElMSVRZLCB1dGlsaXR5X25hbWUpOwogICAgIGlmIChtZi5HZXRQcm9wZXJ0eUFzQm9vbCgiRVhDTFVERV9GUk9NX0FMTCIpKSB7CiAgICAgICB0YXJnZXQtPlNldFByb3BlcnR5KCJFWENMVURFX0ZST01fQUxMIiwgIlRSVUUiKTsKICAgICB9CiAKLSAgICB0YXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwgdXRpbGl0eV9uYW1lLmNfc3RyKCkpOwotICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIsIHBhdGguY19zdHIoKSk7CisgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIsIHV0aWxpdHlfbmFtZSk7CisgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIiwgcGF0aCk7CiAKICAgICBpZiAoIWN1c3RvbVR5cGUuZW1wdHkoKSkKLSAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIlZTX1BST0pFQ1RfVFlQRSIsIGN1c3RvbVR5cGUuY19zdHIoKSk7CisgICAgICB0YXJnZXQtPlNldFByb3BlcnR5KCJWU19QUk9KRUNUX1RZUEUiLCBjdXN0b21UeXBlKTsKICAgICBpZiAoIXBsYXRmb3JtTWFwcGluZy5lbXB0eSgpKQotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fTUFQUElORyIsIHBsYXRmb3JtTWFwcGluZy5jX3N0cigpKTsKKyAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIlZTX1BMQVRGT1JNX01BUFBJTkciLCBwbGF0Zm9ybU1hcHBpbmcpOwogCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZCA6IGRlcGVuZHMpIHsKLSAgICAgIHRhcmdldC0+QWRkVXRpbGl0eShkLmNfc3RyKCkpOworICAgICAgdGFyZ2V0LT5BZGRVdGlsaXR5KGQsIGZhbHNlKTsKICAgICB9CiAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbENvbW1hbmQuY3h4IGIvU291cmNlL2NtSW5zdGFsbENvbW1hbmQuY3h4CmluZGV4IGU1MTExOTYuLmQ2NjllZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZC5jeHgKQEAgLTg1LDcgKzg1LDcgQEAKICAgc3RkOjpzdHJpbmcgRGVmYXVsdENvbXBvbmVudE5hbWU7CiB9OwogCi1jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIENyZWF0ZUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoCitzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBDcmVhdGVJbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAogICBjbVRhcmdldCYgdGFyZ2V0LCBjb25zdCBjbUluc3RhbGxDb21tYW5kQXJndW1lbnRzJiBhcmdzLCBib29sIGltcExpYiwKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgYmFja3RyYWNlLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24sCiAgIGJvb2wgZm9yY2VPcHQgPSBmYWxzZSwgYm9vbCBuYW1lbGluayA9IGZhbHNlKQpAQCAtOTMsMTggKzkzLDE3IEBACiAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6TWVzc2FnZUxldmVsIG1lc3NhZ2UgPQogICAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6U2VsZWN0TWVzc2FnZUxldmVsKHRhcmdldC5HZXRNYWtlZmlsZSgpKTsKICAgdGFyZ2V0LlNldEhhdmVJbnN0YWxsUnVsZSh0cnVlKTsKLSAgY29uc3QgY2hhciogY29tcG9uZW50ID0gbmFtZWxpbmsgPyBhcmdzLkdldE5hbWVsaW5rQ29tcG9uZW50KCkuY19zdHIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFyZ3MuR2V0Q29tcG9uZW50KCkuY19zdHIoKTsKLSAgYXV0byBnID0gbmV3IGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcigKLSAgICB0YXJnZXQuR2V0TmFtZSgpLCBkZXN0aW5hdGlvbi5jX3N0cigpLCBpbXBMaWIsCi0gICAgYXJncy5HZXRQZXJtaXNzaW9ucygpLmNfc3RyKCksIGFyZ3MuR2V0Q29uZmlndXJhdGlvbnMoKSwgY29tcG9uZW50LAotICAgIG1lc3NhZ2UsIGFyZ3MuR2V0RXhjbHVkZUZyb21BbGwoKSwgYXJncy5HZXRPcHRpb25hbCgpIHx8IGZvcmNlT3B0LAotICAgIGJhY2t0cmFjZSk7Ci0gIHRhcmdldC5BZGRJbnN0YWxsR2VuZXJhdG9yKGcpOworICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcG9uZW50ID0KKyAgICBuYW1lbGluayA/IGFyZ3MuR2V0TmFtZWxpbmtDb21wb25lbnQoKSA6IGFyZ3MuR2V0Q29tcG9uZW50KCk7CisgIGF1dG8gZyA9IGNtOjptYWtlX3VuaXF1ZTxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+KAorICAgIHRhcmdldC5HZXROYW1lKCksIGRlc3RpbmF0aW9uLCBpbXBMaWIsIGFyZ3MuR2V0UGVybWlzc2lvbnMoKSwKKyAgICBhcmdzLkdldENvbmZpZ3VyYXRpb25zKCksIGNvbXBvbmVudCwgbWVzc2FnZSwgYXJncy5HZXRFeGNsdWRlRnJvbUFsbCgpLAorICAgIGFyZ3MuR2V0T3B0aW9uYWwoKSB8fCBmb3JjZU9wdCwgYmFja3RyYWNlKTsKKyAgdGFyZ2V0LkFkZEluc3RhbGxHZW5lcmF0b3IoZy5nZXQoKSk7CiAgIHJldHVybiBnOwogfQogCi1jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIENyZWF0ZUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoCitzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBDcmVhdGVJbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAogICBjbVRhcmdldCYgdGFyZ2V0LCBjb25zdCBjbUluc3RhbGxDb21tYW5kQXJndW1lbnRzJiBhcmdzLCBib29sIGltcExpYiwKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgYmFja3RyYWNlLCBib29sIGZvcmNlT3B0ID0gZmFsc2UsCiAgIGJvb2wgbmFtZWxpbmsgPSBmYWxzZSkKQEAgLTExNCwyMCArMTEzLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVsaW5rKTsKIH0KIAotY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IqIENyZWF0ZUluc3RhbGxGaWxlc0dlbmVyYXRvcigKK3N0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4gQ3JlYXRlSW5zdGFsbEZpbGVzR2VuZXJhdG9yKAogICBjbU1ha2VmaWxlKiBtZiwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhYnNGaWxlcywKICAgY29uc3QgY21JbnN0YWxsQ29tbWFuZEFyZ3VtZW50cyYgYXJncywgYm9vbCBwcm9ncmFtcywKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RpbmF0aW9uKQogewogICBjbUluc3RhbGxHZW5lcmF0b3I6Ok1lc3NhZ2VMZXZlbCBtZXNzYWdlID0KICAgICBjbUluc3RhbGxHZW5lcmF0b3I6OlNlbGVjdE1lc3NhZ2VMZXZlbChtZik7Ci0gIHJldHVybiBuZXcgY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IoCi0gICAgYWJzRmlsZXMsIGRlc3RpbmF0aW9uLmNfc3RyKCksIHByb2dyYW1zLCBhcmdzLkdldFBlcm1pc3Npb25zKCkuY19zdHIoKSwKLSAgICBhcmdzLkdldENvbmZpZ3VyYXRpb25zKCksIGFyZ3MuR2V0Q29tcG9uZW50KCkuY19zdHIoKSwgbWVzc2FnZSwKLSAgICBhcmdzLkdldEV4Y2x1ZGVGcm9tQWxsKCksIGFyZ3MuR2V0UmVuYW1lKCkuY19zdHIoKSwgYXJncy5HZXRPcHRpb25hbCgpKTsKKyAgcmV0dXJuIGNtOjptYWtlX3VuaXF1ZTxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4oCisgICAgYWJzRmlsZXMsIGRlc3RpbmF0aW9uLCBwcm9ncmFtcywgYXJncy5HZXRQZXJtaXNzaW9ucygpLAorICAgIGFyZ3MuR2V0Q29uZmlndXJhdGlvbnMoKSwgYXJncy5HZXRDb21wb25lbnQoKSwgbWVzc2FnZSwKKyAgICBhcmdzLkdldEV4Y2x1ZGVGcm9tQWxsKCksIGFyZ3MuR2V0UmVuYW1lKCksIGFyZ3MuR2V0T3B0aW9uYWwoKSk7CiB9CiAKLWNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKiBDcmVhdGVJbnN0YWxsRmlsZXNHZW5lcmF0b3IoCitzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3I+IENyZWF0ZUluc3RhbGxGaWxlc0dlbmVyYXRvcigKICAgY21NYWtlZmlsZSogbWYsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYWJzRmlsZXMsCiAgIGNvbnN0IGNtSW5zdGFsbENvbW1hbmRBcmd1bWVudHMmIGFyZ3MsIGJvb2wgcHJvZ3JhbXMpCiB7CkBAIC0xOTYsMTMgKzE5NSwxNSBAQAogICAgICAgICBzdGF0dXMuU2V0RXJyb3IoImdpdmVuIGEgZGlyZWN0b3J5IGFzIHZhbHVlIG9mIFNDUklQVCBhcmd1bWVudC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKG5ldyBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IoCi0gICAgICAgIHNjcmlwdC5jX3N0cigpLCBmYWxzZSwgY29tcG9uZW50LmNfc3RyKCksIGV4Y2x1ZGVfZnJvbV9hbGwpKTsKKyAgICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcigKKyAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcj4oc2NyaXB0LCBmYWxzZSwgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2Zyb21fYWxsKSk7CiAgICAgfSBlbHNlIGlmIChkb2luZ19jb2RlKSB7CiAgICAgICBkb2luZ19jb2RlID0gZmFsc2U7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29kZSA9IGFyZzsKLSAgICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihuZXcgY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yKAotICAgICAgICBjb2RlLmNfc3RyKCksIHRydWUsIGNvbXBvbmVudC5jX3N0cigpLCBleGNsdWRlX2Zyb21fYWxsKSk7CisgICAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IoCisgICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3I+KGNvZGUsIHRydWUsIGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9mcm9tX2FsbCkpOwogICAgIH0KICAgfQogCkBAIC00NDksMTYgKzQ1MCwxNiBAQAogICBmb3IgKGNtVGFyZ2V0KiB0aSA6IHRhcmdldHMpIHsKICAgICAvLyBIYW5kbGUgZWFjaCB0YXJnZXQgdHlwZS4KICAgICBjbVRhcmdldCYgdGFyZ2V0ID0gKnRpOwotICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogYXJjaGl2ZUdlbmVyYXRvciA9IG51bGxwdHI7Ci0gICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKiBsaWJyYXJ5R2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIG5hbWVsaW5rR2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIHJ1bnRpbWVHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogb2JqZWN0R2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIGZyYW1ld29ya0dlbmVyYXRvciA9IG51bGxwdHI7Ci0gICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKiBidW5kbGVHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKiBwcml2YXRlSGVhZGVyR2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxGaWxlc0dlbmVyYXRvciogcHVibGljSGVhZGVyR2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxGaWxlc0dlbmVyYXRvciogcmVzb3VyY2VHZW5lcmF0b3IgPSBudWxscHRyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IGFyY2hpdmVHZW5lcmF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcj4gbGlicmFyeUdlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBuYW1lbGlua0dlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBydW50aW1lR2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IG9iamVjdEdlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBmcmFtZXdvcmtHZW5lcmF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcj4gYnVuZGxlR2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4gcHJpdmF0ZUhlYWRlckdlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3I+IHB1YmxpY0hlYWRlckdlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3I+IHJlc291cmNlR2VuZXJhdG9yOwogCiAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIGRlZmF1bHQgZGVzdGluYXRpb25zIGZvciBQVUJMSUNfSEVBREVSIGFuZAogICAgIC8vIFBSSVZBVEVfSEVBREVSIGlmIGFueSBhcnRpZmFjdHMgYXJlIHNwZWNpZmllZC4KQEAgLTQ5MSw3ICs0OTIsNyBAQAogICAgICAgICAgICAgICB0YXJnZXQsIHJ1bnRpbWVBcmdzLCBmYWxzZSwgaGVscGVyLk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKSk7CiAgICAgICAgICAgICBhcnRpZmFjdHNTcGVjaWZpZWQgPSB0cnVlOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoKGFyY2hpdmVHZW5lcmF0b3IgPT0gbnVsbHB0cikgJiYgKHJ1bnRpbWVHZW5lcmF0b3IgPT0gbnVsbHB0cikpIHsKKyAgICAgICAgICBpZiAoIWFyY2hpdmVHZW5lcmF0b3IgJiYgIXJ1bnRpbWVHZW5lcmF0b3IpIHsKICAgICAgICAgICAgIGFyY2hpdmVHZW5lcmF0b3IgPSBDcmVhdGVJbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgICB0YXJnZXQsIGFyY2hpdmVBcmdzLCB0cnVlLCBoZWxwZXIuTWFrZWZpbGUtPkdldEJhY2t0cmFjZSgpLAogICAgICAgICAgICAgICBoZWxwZXIuR2V0QXJjaGl2ZURlc3RpbmF0aW9uKG51bGxwdHIpKTsKQEAgLTc0NCw0MyArNzQ1LDE4IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlJ3JlIGluc3RhbGxpbmcgYW55dGhpbmcgaW4gZWFjaCBjYXRlZ29yeQotICAgIGluc3RhbGxzQXJjaGl2ZSA9IGluc3RhbGxzQXJjaGl2ZSB8fCBhcmNoaXZlR2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNMaWJyYXJ5ID0gaW5zdGFsbHNMaWJyYXJ5IHx8IGxpYnJhcnlHZW5lcmF0b3IgIT0gbnVsbHB0cjsKLSAgICBpbnN0YWxsc05hbWVsaW5rID0gaW5zdGFsbHNOYW1lbGluayB8fCBuYW1lbGlua0dlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzUnVudGltZSA9IGluc3RhbGxzUnVudGltZSB8fCBydW50aW1lR2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNPYmplY3QgPSBpbnN0YWxsc09iamVjdCB8fCBvYmplY3RHZW5lcmF0b3IgIT0gbnVsbHB0cjsKLSAgICBpbnN0YWxsc0ZyYW1ld29yayA9IGluc3RhbGxzRnJhbWV3b3JrIHx8IGZyYW1ld29ya0dlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzQnVuZGxlID0gaW5zdGFsbHNCdW5kbGUgfHwgYnVuZGxlR2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNQcml2YXRlSGVhZGVyID0KLSAgICAgIGluc3RhbGxzUHJpdmF0ZUhlYWRlciB8fCBwcml2YXRlSGVhZGVyR2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNQdWJsaWNIZWFkZXIgPQotICAgICAgaW5zdGFsbHNQdWJsaWNIZWFkZXIgfHwgcHVibGljSGVhZGVyR2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNSZXNvdXJjZSA9IGluc3RhbGxzUmVzb3VyY2UgfHwgcmVzb3VyY2VHZW5lcmF0b3I7Ci0KLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IoYXJjaGl2ZUdlbmVyYXRvcik7Ci0gICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKGxpYnJhcnlHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihuYW1lbGlua0dlbmVyYXRvcik7Ci0gICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHJ1bnRpbWVHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihvYmplY3RHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihmcmFtZXdvcmtHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihidW5kbGVHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihwcml2YXRlSGVhZGVyR2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IocHVibGljSGVhZGVyR2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IocmVzb3VyY2VHZW5lcmF0b3IpOwotCiAgICAgLy8gQWRkIHRoaXMgaW5zdGFsbCBydWxlIHRvIGFuIGV4cG9ydCBpZiBvbmUgd2FzIHNwZWNpZmllZCBhbmQKICAgICAvLyB0aGlzIGlzIG5vdCBhIG5hbWVsaW5rLW9ubHkgcnVsZS4KICAgICBpZiAoIWV4cG9ydHMuZW1wdHkoKSAmJiAhbmFtZWxpbmtPbmx5KSB7CiAgICAgICBhdXRvIHRlID0gY206Om1ha2VfdW5pcXVlPGNtVGFyZ2V0RXhwb3J0PigpOwogICAgICAgdGUtPlRhcmdldE5hbWUgPSB0YXJnZXQuR2V0TmFtZSgpOwotICAgICAgdGUtPkFyY2hpdmVHZW5lcmF0b3IgPSBhcmNoaXZlR2VuZXJhdG9yOwotICAgICAgdGUtPkJ1bmRsZUdlbmVyYXRvciA9IGJ1bmRsZUdlbmVyYXRvcjsKLSAgICAgIHRlLT5GcmFtZXdvcmtHZW5lcmF0b3IgPSBmcmFtZXdvcmtHZW5lcmF0b3I7Ci0gICAgICB0ZS0+SGVhZGVyR2VuZXJhdG9yID0gcHVibGljSGVhZGVyR2VuZXJhdG9yOwotICAgICAgdGUtPkxpYnJhcnlHZW5lcmF0b3IgPSBsaWJyYXJ5R2VuZXJhdG9yOwotICAgICAgdGUtPlJ1bnRpbWVHZW5lcmF0b3IgPSBydW50aW1lR2VuZXJhdG9yOwotICAgICAgdGUtPk9iamVjdHNHZW5lcmF0b3IgPSBvYmplY3RHZW5lcmF0b3I7CisgICAgICB0ZS0+QXJjaGl2ZUdlbmVyYXRvciA9IGFyY2hpdmVHZW5lcmF0b3IuZ2V0KCk7CisgICAgICB0ZS0+QnVuZGxlR2VuZXJhdG9yID0gYnVuZGxlR2VuZXJhdG9yLmdldCgpOworICAgICAgdGUtPkZyYW1ld29ya0dlbmVyYXRvciA9IGZyYW1ld29ya0dlbmVyYXRvci5nZXQoKTsKKyAgICAgIHRlLT5IZWFkZXJHZW5lcmF0b3IgPSBwdWJsaWNIZWFkZXJHZW5lcmF0b3IuZ2V0KCk7CisgICAgICB0ZS0+TGlicmFyeUdlbmVyYXRvciA9IGxpYnJhcnlHZW5lcmF0b3IuZ2V0KCk7CisgICAgICB0ZS0+UnVudGltZUdlbmVyYXRvciA9IHJ1bnRpbWVHZW5lcmF0b3IuZ2V0KCk7CisgICAgICB0ZS0+T2JqZWN0c0dlbmVyYXRvciA9IG9iamVjdEdlbmVyYXRvci5nZXQoKTsKICAgICAgIHRlLT5JbnRlcmZhY2VJbmNsdWRlRGlyZWN0b3JpZXMgPQogICAgICAgICBjbUpvaW4oaW5jbHVkZXNBcmdzLkdldEluY2x1ZGVEaXJzKCksICI7Iik7CiAKQEAgLTc4OCw2ICs3NjQsMjkgQEAKICAgICAgICAgLT5HZXRFeHBvcnRTZXRzKClbZXhwb3J0c10KICAgICAgICAgLkFkZFRhcmdldEV4cG9ydChzdGQ6Om1vdmUodGUpKTsKICAgICB9CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgd2UncmUgaW5zdGFsbGluZyBhbnl0aGluZyBpbiBlYWNoIGNhdGVnb3J5CisgICAgaW5zdGFsbHNBcmNoaXZlID0gaW5zdGFsbHNBcmNoaXZlIHx8IGFyY2hpdmVHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNMaWJyYXJ5ID0gaW5zdGFsbHNMaWJyYXJ5IHx8IGxpYnJhcnlHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNOYW1lbGluayA9IGluc3RhbGxzTmFtZWxpbmsgfHwgbmFtZWxpbmtHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNSdW50aW1lID0gaW5zdGFsbHNSdW50aW1lIHx8IHJ1bnRpbWVHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNPYmplY3QgPSBpbnN0YWxsc09iamVjdCB8fCBvYmplY3RHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNGcmFtZXdvcmsgPSBpbnN0YWxsc0ZyYW1ld29yayB8fCBmcmFtZXdvcmtHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNCdW5kbGUgPSBpbnN0YWxsc0J1bmRsZSB8fCBidW5kbGVHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNQcml2YXRlSGVhZGVyID0gaW5zdGFsbHNQcml2YXRlSGVhZGVyIHx8IHByaXZhdGVIZWFkZXJHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNQdWJsaWNIZWFkZXIgPSBpbnN0YWxsc1B1YmxpY0hlYWRlciB8fCBwdWJsaWNIZWFkZXJHZW5lcmF0b3I7CisgICAgaW5zdGFsbHNSZXNvdXJjZSA9IGluc3RhbGxzUmVzb3VyY2UgfHwgcmVzb3VyY2VHZW5lcmF0b3I7CisKKyAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjptb3ZlKGFyY2hpdmVHZW5lcmF0b3IpKTsKKyAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjptb3ZlKGxpYnJhcnlHZW5lcmF0b3IpKTsKKyAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjptb3ZlKG5hbWVsaW5rR2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShydW50aW1lR2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShvYmplY3RHZW5lcmF0b3IpKTsKKyAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjptb3ZlKGZyYW1ld29ya0dlbmVyYXRvcikpOworICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihzdGQ6Om1vdmUoYnVuZGxlR2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShwcml2YXRlSGVhZGVyR2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShwdWJsaWNIZWFkZXJHZW5lcmF0b3IpKTsKKyAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjptb3ZlKHJlc291cmNlR2VuZXJhdG9yKSk7CiAgIH0KIAogICAvLyBUZWxsIHRoZSBnbG9iYWwgZ2VuZXJhdG9yIGFib3V0IGFueSBpbnN0YWxsYXRpb24gY29tcG9uZW50IG5hbWVzCkBAIC05NzUsNyArOTc0LDcgQEAKICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsID0gZmFsc2U7CiAgIGJvb2wgbWVzc2FnZV9uZXZlciA9IGZhbHNlOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlyczsKLSAgY29uc3QgY2hhciogZGVzdGluYXRpb24gPSBudWxscHRyOworICBjb25zdCBzdGQ6OnN0cmluZyogZGVzdGluYXRpb24gPSBudWxscHRyOwogICBzdGQ6OnN0cmluZyBwZXJtaXNzaW9uc19maWxlOwogICBzdGQ6OnN0cmluZyBwZXJtaXNzaW9uc19kaXI7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWd1cmF0aW9uczsKQEAgLTExMzQsNyArMTEzMyw3IEBACiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0NvbmZpZ3VyYXRpb25zKSB7CiAgICAgICBjb25maWd1cmF0aW9ucy5wdXNoX2JhY2soYXJnc1tpXSk7CiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0Rlc3RpbmF0aW9uKSB7Ci0gICAgICBkZXN0aW5hdGlvbiA9IGFyZ3NbaV0uY19zdHIoKTsKKyAgICAgIGRlc3RpbmF0aW9uID0gJmFyZ3NbaV07CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nVHlwZSkgewogICAgICAgaWYgKGFsbG93ZWRUeXBlcy5jb3VudChhcmdzW2ldKSA9PSAwKSB7CkBAIC0xMjIwLDcgKzEyMTksNyBAQAogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBkZXN0aW5hdGlvblN0ciA9IGhlbHBlci5HZXREZXN0aW5hdGlvbkZvclR5cGUobnVsbHB0ciwgdHlwZSk7Ci0gICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvblN0ci5jX3N0cigpOworICAgIGRlc3RpbmF0aW9uID0gJmRlc3RpbmF0aW9uU3RyOwogICB9IGVsc2UgaWYgKCF0eXBlLmVtcHR5KCkpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoYXJnc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBnaXZlbiBib3RoIFRZUEUgYW5kIERFU1RJTkFUSU9OICIKQEAgLTEyMzIsMTAgKzEyMzEsMTAgQEAKICAgICBjbUluc3RhbGxHZW5lcmF0b3I6OlNlbGVjdE1lc3NhZ2VMZXZlbChoZWxwZXIuTWFrZWZpbGUsIG1lc3NhZ2VfbmV2ZXIpOwogCiAgIC8vIENyZWF0ZSB0aGUgZGlyZWN0b3J5IGluc3RhbGwgZ2VuZXJhdG9yLgotICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IobmV3IGNtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvcigKLSAgICBkaXJzLCBkZXN0aW5hdGlvbiwgcGVybWlzc2lvbnNfZmlsZS5jX3N0cigpLCBwZXJtaXNzaW9uc19kaXIuY19zdHIoKSwKLSAgICBjb25maWd1cmF0aW9ucywgY29tcG9uZW50LmNfc3RyKCksIG1lc3NhZ2UsIGV4Y2x1ZGVfZnJvbV9hbGwsCi0gICAgbGl0ZXJhbF9hcmdzLmNfc3RyKCksIG9wdGlvbmFsKSk7CisgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yPigKKyAgICAgIGRpcnMsICpkZXN0aW5hdGlvbiwgcGVybWlzc2lvbnNfZmlsZSwgcGVybWlzc2lvbnNfZGlyLCBjb25maWd1cmF0aW9ucywKKyAgICAgIGNvbXBvbmVudCwgbWVzc2FnZSwgZXhjbHVkZV9mcm9tX2FsbCwgbGl0ZXJhbF9hcmdzLCBvcHRpb25hbCkpOwogCiAgIC8vIFRlbGwgdGhlIGdsb2JhbCBnZW5lcmF0b3IgYWJvdXQgYW55IGluc3RhbGxhdGlvbiBjb21wb25lbnQgbmFtZXMKICAgLy8gc3BlY2lmaWVkLgpAQCAtMTMyMywxMiArMTMyMiwxMSBAQAogICAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6U2VsZWN0TWVzc2FnZUxldmVsKGhlbHBlci5NYWtlZmlsZSk7CiAKICAgLy8gQ3JlYXRlIHRoZSBleHBvcnQgaW5zdGFsbCBnZW5lcmF0b3IuCi0gIGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvciogZXhwb3J0R2VuZXJhdG9yID0gbmV3IGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcigKLSAgICAmZXhwb3J0U2V0LCBpY2EuR2V0RGVzdGluYXRpb24oKS5jX3N0cigpLCBpY2EuR2V0UGVybWlzc2lvbnMoKS5jX3N0cigpLAotICAgIGljYS5HZXRDb25maWd1cmF0aW9ucygpLCBpY2EuR2V0Q29tcG9uZW50KCkuY19zdHIoKSwgbWVzc2FnZSwKLSAgICBpY2EuR2V0RXhjbHVkZUZyb21BbGwoKSwgZm5hbWUuY19zdHIoKSwgbmFtZV9zcGFjZS5jX3N0cigpLCBleHBvcnRPbGQsCi0gICAgdHJ1ZSk7Ci0gIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihleHBvcnRHZW5lcmF0b3IpOworICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IoCisgICAgY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcj4oCisgICAgICAmZXhwb3J0U2V0LCBpY2EuR2V0RGVzdGluYXRpb24oKSwgaWNhLkdldFBlcm1pc3Npb25zKCksCisgICAgICBpY2EuR2V0Q29uZmlndXJhdGlvbnMoKSwgaWNhLkdldENvbXBvbmVudCgpLCBtZXNzYWdlLAorICAgICAgaWNhLkdldEV4Y2x1ZGVGcm9tQWxsKCksIGZuYW1lLCBuYW1lX3NwYWNlLCBleHBvcnRPbGQsIHRydWUpKTsKIAogICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC0xNDM3LDEyICsxNDM1LDExIEBACiAgICAgY21JbnN0YWxsR2VuZXJhdG9yOjpTZWxlY3RNZXNzYWdlTGV2ZWwoaGVscGVyLk1ha2VmaWxlKTsKIAogICAvLyBDcmVhdGUgdGhlIGV4cG9ydCBpbnN0YWxsIGdlbmVyYXRvci4KLSAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKiBleHBvcnRHZW5lcmF0b3IgPSBuZXcgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKAotICAgICZleHBvcnRTZXQsIGljYS5HZXREZXN0aW5hdGlvbigpLmNfc3RyKCksIGljYS5HZXRQZXJtaXNzaW9ucygpLmNfc3RyKCksCi0gICAgaWNhLkdldENvbmZpZ3VyYXRpb25zKCksIGljYS5HZXRDb21wb25lbnQoKS5jX3N0cigpLCBtZXNzYWdlLAotICAgIGljYS5HZXRFeGNsdWRlRnJvbUFsbCgpLCBmbmFtZS5jX3N0cigpLCBuYW1lX3NwYWNlLmNfc3RyKCksIGV4cG9ydE9sZCwKLSAgICBmYWxzZSk7Ci0gIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihleHBvcnRHZW5lcmF0b3IpOworICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IoCisgICAgY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcj4oCisgICAgICAmZXhwb3J0U2V0LCBpY2EuR2V0RGVzdGluYXRpb24oKSwgaWNhLkdldFBlcm1pc3Npb25zKCksCisgICAgICBpY2EuR2V0Q29uZmlndXJhdGlvbnMoKSwgaWNhLkdldENvbXBvbmVudCgpLCBtZXNzYWdlLAorICAgICAgaWNhLkdldEV4Y2x1ZGVGcm9tQWxsKCksIGZuYW1lLCBuYW1lX3NwYWNlLCBleHBvcnRPbGQsIGZhbHNlKSk7CiAKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IuY3h4CmluZGV4IDI1OWM3ZjcuLjE3NWU3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IuY3h4CkBAIC0yLDYgKzIsOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsVHlwZS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKQEAgLTEwLDE4ICsxMiwxOCBAQAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yOjpjbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IoCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZGlycywgY29uc3QgY2hhciogZGVzdCwKLSAgY29uc3QgY2hhciogZmlsZV9wZXJtaXNzaW9ucywgY29uc3QgY2hhciogZGlyX3Blcm1pc3Npb25zLAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLCBjb25zdCBjaGFyKiBjb21wb25lbnQsCi0gIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsIGNvbnN0IGNoYXIqIGxpdGVyYWxfYXJncywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBkaXJzLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwKKyAgc3RkOjpzdHJpbmcgZmlsZV9wZXJtaXNzaW9ucywgc3RkOjpzdHJpbmcgZGlyX3Blcm1pc3Npb25zLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLCBzdGQ6OnN0cmluZyBjb25zdCYgY29tcG9uZW50LAorICBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBzdGQ6OnN0cmluZyBsaXRlcmFsX2FyZ3MsCiAgIGJvb2wgb3B0aW9uYWwpCiAgIDogY21JbnN0YWxsR2VuZXJhdG9yKGRlc3QsIGNvbmZpZ3VyYXRpb25zLCBjb21wb25lbnQsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZnJvbV9hbGwpCiAgICwgTG9jYWxHZW5lcmF0b3IobnVsbHB0cikKICAgLCBEaXJlY3RvcmllcyhkaXJzKQotICAsIEZpbGVQZXJtaXNzaW9ucyhmaWxlX3Blcm1pc3Npb25zKQotICAsIERpclBlcm1pc3Npb25zKGRpcl9wZXJtaXNzaW9ucykKLSAgLCBMaXRlcmFsQXJndW1lbnRzKGxpdGVyYWxfYXJncykKKyAgLCBGaWxlUGVybWlzc2lvbnMoc3RkOjptb3ZlKGZpbGVfcGVybWlzc2lvbnMpKQorICAsIERpclBlcm1pc3Npb25zKHN0ZDo6bW92ZShkaXJfcGVybWlzc2lvbnMpKQorICAsIExpdGVyYWxBcmd1bWVudHMoc3RkOjptb3ZlKGxpdGVyYWxfYXJncykpCiAgICwgT3B0aW9uYWwob3B0aW9uYWwpCiB7CiAgIC8vIFdlIG5lZWQgcGVyLWNvbmZpZyBhY3Rpb25zIGlmIGRlc3RpbmF0aW9uIGhhdmUgZ2VuZXJhdG9yIGV4cHJlc3Npb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvci5oIGIvU291cmNlL2NtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvci5oCmluZGV4IDg0YzA2OTQuLmJlYzg5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmgKQEAgLTIxLDEyICsyMSwxMyBAQAogewogcHVibGljOgogICBjbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3Ioc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBkaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGVzdCwgY29uc3QgY2hhciogZmlsZV9wZXJtaXNzaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRpcl9wZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZV9wZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGRpcl9wZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBjb25zdCBjaGFyKiBsaXRlcmFsX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG9wdGlvbmFsID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBsaXRlcmFsX2FyZ3MsIGJvb2wgb3B0aW9uYWwgPSBmYWxzZSk7CiAgIH5jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IoKSBvdmVycmlkZTsKIAogICBib29sIENvbXB1dGUoY21Mb2NhbEdlbmVyYXRvciogbGcpIG92ZXJyaWRlOwpAQCAtNDEsMTEgKzQyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50IGluZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGRpcnMpOwogICBjbUxvY2FsR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IERpcmVjdG9yaWVzOwotICBzdGQ6OnN0cmluZyBGaWxlUGVybWlzc2lvbnM7Ci0gIHN0ZDo6c3RyaW5nIERpclBlcm1pc3Npb25zOwotICBzdGQ6OnN0cmluZyBMaXRlcmFsQXJndW1lbnRzOwotICBib29sIE9wdGlvbmFsOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgRGlyZWN0b3JpZXM7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IEZpbGVQZXJtaXNzaW9uczsKKyAgc3RkOjpzdHJpbmcgY29uc3QgRGlyUGVybWlzc2lvbnM7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IExpdGVyYWxBcmd1bWVudHM7CisgIGJvb2wgY29uc3QgT3B0aW9uYWw7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5jeHgKaW5kZXggY2JhNjhiZS4uNmUzNTA4YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5jeHgKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAogIyAgaW5jbHVkZSAiY21FeHBvcnRJbnN0YWxsQW5kcm9pZE1LR2VuZXJhdG9yLmgiCiAjZW5kaWYKQEAgLTE4LDMzICsyMCwzMCBAQAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yOjpjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoCi0gIGNtRXhwb3J0U2V0KiBleHBvcnRTZXQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uLAotICBjb25zdCBjaGFyKiBmaWxlX3Blcm1pc3Npb25zLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAotICBjb25zdCBjaGFyKiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsCi0gIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBuYW1lX3NwYWNlLCBib29sIGV4cG9ydE9sZCwgYm9vbCBhbmRyb2lkKQorICBjbUV4cG9ydFNldCogZXhwb3J0U2V0LCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdGluYXRpb24sCisgIHN0ZDo6c3RyaW5nIGZpbGVfcGVybWlzc2lvbnMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsCisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lLCBzdGQ6OnN0cmluZyBuYW1lX3NwYWNlLCBib29sIGV4cG9ydE9sZCwgYm9vbCBhbmRyb2lkKQogICA6IGNtSW5zdGFsbEdlbmVyYXRvcihkZXN0aW5hdGlvbiwgY29uZmlndXJhdGlvbnMsIGNvbXBvbmVudCwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9mcm9tX2FsbCkKICAgLCBFeHBvcnRTZXQoZXhwb3J0U2V0KQotICAsIEZpbGVQZXJtaXNzaW9ucyhmaWxlX3Blcm1pc3Npb25zKQotICAsIEZpbGVOYW1lKGZpbGVuYW1lKQotICAsIE5hbWVzcGFjZShuYW1lX3NwYWNlKQorICAsIEZpbGVQZXJtaXNzaW9ucyhzdGQ6Om1vdmUoZmlsZV9wZXJtaXNzaW9ucykpCisgICwgRmlsZU5hbWUoc3RkOjptb3ZlKGZpbGVuYW1lKSkKKyAgLCBOYW1lc3BhY2Uoc3RkOjptb3ZlKG5hbWVfc3BhY2UpKQogICAsIEV4cG9ydE9sZChleHBvcnRPbGQpCiAgICwgTG9jYWxHZW5lcmF0b3IobnVsbHB0cikKIHsKICAgaWYgKGFuZHJvaWQpIHsKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCi0gICAgdGhpcy0+RUZHZW4gPSBuZXcgY21FeHBvcnRJbnN0YWxsQW5kcm9pZE1LR2VuZXJhdG9yKHRoaXMpOworICAgIHRoaXMtPkVGR2VuID0gY206Om1ha2VfdW5pcXVlPGNtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvcj4odGhpcyk7CiAjZW5kaWYKICAgfSBlbHNlIHsKLSAgICB0aGlzLT5FRkdlbiA9IG5ldyBjbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yKHRoaXMpOworICAgIHRoaXMtPkVGR2VuID0gY206Om1ha2VfdW5pcXVlPGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3I+KHRoaXMpOwogICB9CiAgIGV4cG9ydFNldC0+QWRkSW5zdGFsbGF0aW9uKHRoaXMpOwogfQogCi1jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3I6On5jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoKQotewotICBkZWxldGUgdGhpcy0+RUZHZW47Ci19CitjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3I6On5jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKIGJvb2wgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yOjpDb21wdXRlKGNtTG9jYWxHZW5lcmF0b3IqIGxnKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5oIGIvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5oCmluZGV4IGY0NDEyN2UuLjQzZGQwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yLmgKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtMjMsMTUgKzI0LDE5IEBACiBjbGFzcyBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IgOiBwdWJsaWMgY21JbnN0YWxsR2VuZXJhdG9yCiB7CiBwdWJsaWM6Ci0gIGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcihjbUV4cG9ydFNldCogZXhwb3J0U2V0LCBjb25zdCBjaGFyKiBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZV9wZXJtaXNzaW9ucywKKyAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKGNtRXhwb3J0U2V0KiBleHBvcnRTZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZV9wZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlndXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWVfc3BhY2UsIGJvb2wgZXhwb3J0T2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsIHN0ZDo6c3RyaW5nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZV9zcGFjZSwgYm9vbCBleHBvcnRPbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFuZHJvaWQpOworICBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoY29uc3QgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yJikgPSBkZWxldGU7CiAgIH5jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoKSBvdmVycmlkZTsKIAorICBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3ImIG9wZXJhdG9yPShjb25zdCBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3ImKSA9CisgICAgZGVsZXRlOworCiAgIGNtRXhwb3J0U2V0KiBHZXRFeHBvcnRTZXQoKSB7IHJldHVybiB0aGlzLT5FeHBvcnRTZXQ7IH0KIAogICBib29sIENvbXB1dGUoY21Mb2NhbEdlbmVyYXRvciogbGcpIG92ZXJyaWRlOwpAQCAtNTIsMTYgKzU3LDE2IEBACiAgIHZvaWQgQ29tcHV0ZVRlbXBEaXIoKTsKICAgc2l6ZV90IEdldE1heENvbmZpZ0xlbmd0aCgpIGNvbnN0OwogCi0gIGNtRXhwb3J0U2V0KiBFeHBvcnRTZXQ7Ci0gIHN0ZDo6c3RyaW5nIEZpbGVQZXJtaXNzaW9uczsKLSAgc3RkOjpzdHJpbmcgRmlsZU5hbWU7Ci0gIHN0ZDo6c3RyaW5nIE5hbWVzcGFjZTsKLSAgYm9vbCBFeHBvcnRPbGQ7CisgIGNtRXhwb3J0U2V0KiBjb25zdCBFeHBvcnRTZXQ7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IEZpbGVQZXJtaXNzaW9uczsKKyAgc3RkOjpzdHJpbmcgY29uc3QgRmlsZU5hbWU7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IE5hbWVzcGFjZTsKKyAgYm9vbCBjb25zdCBFeHBvcnRPbGQ7CiAgIGNtTG9jYWxHZW5lcmF0b3IqIExvY2FsR2VuZXJhdG9yOwogCiAgIHN0ZDo6c3RyaW5nIFRlbXBEaXI7CiAgIHN0ZDo6c3RyaW5nIE1haW5JbXBvcnRGaWxlOwotICBjbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yKiBFRkdlbjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3I+IEVGR2VuOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsRmlsZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxGaWxlc0NvbW1hbmQuY3h4CmluZGV4IGQ2MjM5NDMuLjNjNTlmMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxGaWxlc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxGaWxlc0NvbW1hbmQuY3h4CkBAIC0yLDE2ICsyLDIxIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUluc3RhbGxGaWxlc0NvbW1hbmQuaCIKIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUluc3RhbGxGaWxlc0dlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtSW5zdGFsbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAorY2xhc3MgY21MaXN0RmlsZUJhY2t0cmFjZTsKKwogc3RhdGljIHN0ZDo6c3RyaW5nIEZpbmRJbnN0YWxsU291cmNlKGNtTWFrZWZpbGUmIG1ha2VmaWxlLCBjb25zdCBjaGFyKiBuYW1lKTsKIHN0YXRpYyB2b2lkIENyZWF0ZUluc3RhbGxHZW5lcmF0b3IoY21NYWtlZmlsZSYgbWFrZWZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LApAQCAtNDMsOSArNDgsMTAgQEAKICAgICBDcmVhdGVJbnN0YWxsR2VuZXJhdG9yKG1mLCBkZXN0LCBmaWxlcyk7CiAgIH0gZWxzZSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbmFsQXJncyhhcmdzLmJlZ2luKCkgKyAxLCBhcmdzLmVuZCgpKTsKLSAgICBtZi5BZGRGaW5hbEFjdGlvbihbZGVzdCwgZmluYWxBcmdzXShjbU1ha2VmaWxlJiBtYWtlZmlsZSkgewotICAgICAgRmluYWxBY3Rpb24obWFrZWZpbGUsIGRlc3QsIGZpbmFsQXJncyk7Ci0gICAgfSk7CisgICAgbWYuQWRkR2VuZXJhdG9yQWN0aW9uKAorICAgICAgW2Rlc3QsIGZpbmFsQXJnc10oY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmKSB7CisgICAgICAgIEZpbmFsQWN0aW9uKCpsZy5HZXRNYWtlZmlsZSgpLCBkZXN0LCBmaW5hbEFyZ3MpOworICAgICAgfSk7CiAgIH0KIAogICBtZi5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkSW5zdGFsbENvbXBvbmVudCgKQEAgLTEwOSwxNyArMTE1LDE3IEBACiAgIH0KIAogICAvLyBVc2UgYSBmaWxlIGluc3RhbGwgZ2VuZXJhdG9yLgotICBjb25zdCBjaGFyKiBub19wZXJtaXNzaW9ucyA9ICIiOwotICBjb25zdCBjaGFyKiBub19yZW5hbWUgPSAiIjsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgbm9fcGVybWlzc2lvbnM7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX3JlbmFtZTsKICAgYm9vbCBub19leGNsdWRlX2Zyb21fYWxsID0gZmFsc2U7CiAgIHN0ZDo6c3RyaW5nIG5vX2NvbXBvbmVudCA9CiAgICAgbWFrZWZpbGUuR2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0lOU1RBTExfREVGQVVMVF9DT01QT05FTlRfTkFNRSIpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fY29uZmlndXJhdGlvbnM7CiAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6TWVzc2FnZUxldmVsIG1lc3NhZ2UgPQogICAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6U2VsZWN0TWVzc2FnZUxldmVsKCZtYWtlZmlsZSk7Ci0gIG1ha2VmaWxlLkFkZEluc3RhbGxHZW5lcmF0b3IobmV3IGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKAotICAgIGZpbGVzLCBkZXN0aW5hdGlvbi5jX3N0cigpLCBmYWxzZSwgbm9fcGVybWlzc2lvbnMsIG5vX2NvbmZpZ3VyYXRpb25zLAotICAgIG5vX2NvbXBvbmVudC5jX3N0cigpLCBtZXNzYWdlLCBub19leGNsdWRlX2Zyb21fYWxsLCBub19yZW5hbWUpKTsKKyAgbWFrZWZpbGUuQWRkSW5zdGFsbEdlbmVyYXRvcihjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3I+KAorICAgIGZpbGVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIG5vX3Blcm1pc3Npb25zLCBub19jb25maWd1cmF0aW9ucywgbm9fY29tcG9uZW50LAorICAgIG1lc3NhZ2UsIG5vX2V4Y2x1ZGVfZnJvbV9hbGwsIG5vX3JlbmFtZSkpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxGaWxlc0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuY3h4CmluZGV4IGY1YjY5YTUuLmFkMmY4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxGaWxlc0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmN4eApAQCAtMiw2ICsyLDggQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsVHlwZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtOSwxNiArMTEsMTcgQEAKIGNsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CiAKIGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yOjpjbUluc3RhbGxGaWxlc0dlbmVyYXRvcigKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBmaWxlcywgY29uc3QgY2hhciogZGVzdCwgYm9vbCBwcm9ncmFtcywKLSAgY29uc3QgY2hhciogZmlsZV9wZXJtaXNzaW9ucywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKLSAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLAotICBjb25zdCBjaGFyKiByZW5hbWUsIGJvb2wgb3B0aW9uYWwpCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsZXMsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LAorICBib29sIHByb2dyYW1zLCBzdGQ6OnN0cmluZyBmaWxlX3Blcm1pc3Npb25zLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLCBzdGQ6OnN0cmluZyBjb25zdCYgY29tcG9uZW50LAorICBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBzdGQ6OnN0cmluZyByZW5hbWUsCisgIGJvb2wgb3B0aW9uYWwpCiAgIDogY21JbnN0YWxsR2VuZXJhdG9yKGRlc3QsIGNvbmZpZ3VyYXRpb25zLCBjb21wb25lbnQsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZnJvbV9hbGwpCiAgICwgTG9jYWxHZW5lcmF0b3IobnVsbHB0cikKICAgLCBGaWxlcyhmaWxlcykKLSAgLCBGaWxlUGVybWlzc2lvbnMoZmlsZV9wZXJtaXNzaW9ucykKLSAgLCBSZW5hbWUocmVuYW1lKQorICAsIEZpbGVQZXJtaXNzaW9ucyhzdGQ6Om1vdmUoZmlsZV9wZXJtaXNzaW9ucykpCisgICwgUmVuYW1lKHN0ZDo6bW92ZShyZW5hbWUpKQogICAsIFByb2dyYW1zKHByb2dyYW1zKQogICAsIE9wdGlvbmFsKG9wdGlvbmFsKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuaAppbmRleCBhNjgwMDM3Li44MjY2NjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuaApAQCAtMjEsMTEgKzIxLDExIEBACiB7CiBwdWJsaWM6CiAgIGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlc3QsIGJvb2wgcHJvZ3JhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LCBib29sIHByb2dyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBmaWxlX3Blcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsIGNvbnN0IGNoYXIqIHJlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwgc3RkOjpzdHJpbmcgcmVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG9wdGlvbmFsID0gZmFsc2UpOwogICB+Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3IoKSBvdmVycmlkZTsKIApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGZpbGVzKTsKIAogICBjbUxvY2FsR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEZpbGVzOwotICBzdGQ6OnN0cmluZyBGaWxlUGVybWlzc2lvbnM7Ci0gIHN0ZDo6c3RyaW5nIFJlbmFtZTsKLSAgYm9vbCBQcm9ncmFtczsKLSAgYm9vbCBPcHRpb25hbDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0IEZpbGVzOworICBzdGQ6OnN0cmluZyBjb25zdCBGaWxlUGVybWlzc2lvbnM7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IFJlbmFtZTsKKyAgYm9vbCBjb25zdCBQcm9ncmFtczsKKyAgYm9vbCBjb25zdCBPcHRpb25hbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21JbnN0YWxsR2VuZXJhdG9yLmN4eAppbmRleCBlYzE3MzYxLi4wNjY1ODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsR2VuZXJhdG9yLmN4eApAQCAtMywxNiArMywxNyBAQAogI2luY2x1ZGUgImNtSW5zdGFsbEdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogY21JbnN0YWxsR2VuZXJhdG9yOjpjbUluc3RhbGxHZW5lcmF0b3IoCi0gIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAotICBjb25zdCBjaGFyKiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpCisgIHN0ZDo6c3RyaW5nIGRlc3RpbmF0aW9uLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAorICBzdGQ6OnN0cmluZyBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpCiAgIDogY21TY3JpcHRHZW5lcmF0b3IoIkNNQUtFX0lOU1RBTExfQ09ORklHX05BTUUiLCBjb25maWd1cmF0aW9ucykKLSAgLCBEZXN0aW5hdGlvbihkZXN0aW5hdGlvbiA/IGRlc3RpbmF0aW9uIDogIiIpCi0gICwgQ29tcG9uZW50KGNvbXBvbmVudCA/IGNvbXBvbmVudCA6ICIiKQorICAsIERlc3RpbmF0aW9uKHN0ZDo6bW92ZShkZXN0aW5hdGlvbikpCisgICwgQ29tcG9uZW50KHN0ZDo6bW92ZShjb21wb25lbnQpKQogICAsIE1lc3NhZ2UobWVzc2FnZSkKICAgLCBFeGNsdWRlRnJvbUFsbChleGNsdWRlX2Zyb21fYWxsKQogewpAQCAtMTM5LDggKzE0MCw4IEBACiAgIG9zIDw8ICIpXG4iOwogfQogCi1zdGQ6OnN0cmluZyBjbUluc3RhbGxHZW5lcmF0b3I6OkNyZWF0ZUNvbXBvbmVudFRlc3QoY29uc3QgY2hhciogY29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCkKK3N0ZDo6c3RyaW5nIGNtSW5zdGFsbEdlbmVyYXRvcjo6Q3JlYXRlQ29tcG9uZW50VGVzdCgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBvbmVudCwgYm9vbCBleGNsdWRlX2Zyb21fYWxsKQogewogICBzdGQ6OnN0cmluZyByZXN1bHQgPSBSIigieCR7Q01BS0VfSU5TVEFMTF9DT01QT05FTlR9eCIgU1RSRVFVQUwgIngpIjsKICAgcmVzdWx0ICs9IGNvbXBvbmVudDsKQEAgLTE1OCw3ICsxNTksNyBAQAogCiAgIC8vIEJlZ2luIHRoaXMgYmxvY2sgb2YgaW5zdGFsbGF0aW9uLgogICBzdGQ6OnN0cmluZyBjb21wb25lbnRfdGVzdCA9Ci0gICAgdGhpcy0+Q3JlYXRlQ29tcG9uZW50VGVzdCh0aGlzLT5Db21wb25lbnQuY19zdHIoKSwgdGhpcy0+RXhjbHVkZUZyb21BbGwpOworICAgIHRoaXMtPkNyZWF0ZUNvbXBvbmVudFRlc3QodGhpcy0+Q29tcG9uZW50LCB0aGlzLT5FeGNsdWRlRnJvbUFsbCk7CiAgIG9zIDw8IGluZGVudCA8PCAiaWYoIiA8PCBjb21wb25lbnRfdGVzdCA8PCAiKVxuIjsKIAogICAvLyBHZW5lcmF0ZSB0aGUgc2NyaXB0IHBvc3NpYmx5IHdpdGggcGVyLWNvbmZpZ3VyYXRpb24gY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUluc3RhbGxHZW5lcmF0b3IuaAppbmRleCAwMjQwMjdkLi5kNzg2ZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtSW5zdGFsbEdlbmVyYXRvci5oCkBAIC0zMCw5ICszMCw5IEBACiAgICAgTWVzc2FnZU5ldmVyCiAgIH07CiAKLSAgY21JbnN0YWxsR2VuZXJhdG9yKGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uLAorICBjbUluc3RhbGxHZW5lcmF0b3Ioc3RkOjpzdHJpbmcgZGVzdGluYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpOwogICB+Y21JbnN0YWxsR2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKQEAgLTY1LDE0ICs2NSwxNCBAQAogcHJvdGVjdGVkOgogICB2b2lkIEdlbmVyYXRlU2NyaXB0KHN0ZDo6b3N0cmVhbSYgb3MpIG92ZXJyaWRlOwogCi0gIHN0ZDo6c3RyaW5nIENyZWF0ZUNvbXBvbmVudFRlc3QoY29uc3QgY2hhciogY29tcG9uZW50LAorICBzdGQ6OnN0cmluZyBDcmVhdGVDb21wb25lbnRUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21wb25lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsKTsKIAogICAvLyBJbmZvcm1hdGlvbiBzaGFyZWQgYnkgbW9zdCBnZW5lcmF0b3IgdHlwZXMuCi0gIHN0ZDo6c3RyaW5nIERlc3RpbmF0aW9uOwotICBzdGQ6OnN0cmluZyBDb21wb25lbnQ7Ci0gIE1lc3NhZ2VMZXZlbCBNZXNzYWdlOwotICBib29sIEV4Y2x1ZGVGcm9tQWxsOworICBzdGQ6OnN0cmluZyBjb25zdCBEZXN0aW5hdGlvbjsKKyAgc3RkOjpzdHJpbmcgY29uc3QgQ29tcG9uZW50OworICBNZXNzYWdlTGV2ZWwgY29uc3QgTWVzc2FnZTsKKyAgYm9vbCBjb25zdCBFeGNsdWRlRnJvbUFsbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbFByb2dyYW1zQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21JbnN0YWxsUHJvZ3JhbXNDb21tYW5kLmN4eAppbmRleCA2YmI0NDA5Li5iZTA3ZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsUHJvZ3JhbXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsUHJvZ3JhbXNDb21tYW5kLmN4eApAQCAtMiwxNSArMiwyMCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21JbnN0YWxsUHJvZ3JhbXNDb21tYW5kLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUluc3RhbGxHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAorY2xhc3MgY21MaXN0RmlsZUJhY2t0cmFjZTsKKwogc3RhdGljIHZvaWQgRmluYWxBY3Rpb24oY21NYWtlZmlsZSYgbWFrZWZpbGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzKTsKIHN0YXRpYyBzdGQ6OnN0cmluZyBGaW5kSW5zdGFsbFNvdXJjZShjbU1ha2VmaWxlJiBtYWtlZmlsZSwgY29uc3QgY2hhciogbmFtZSk7CkBAIC0zMyw5ICszOCwxMCBAQAogCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0ID0gYXJnc1swXTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0IGZpbmFsQXJncyhhcmdzLmJlZ2luKCkgKyAxLCBhcmdzLmVuZCgpKTsKLSAgbWYuQWRkRmluYWxBY3Rpb24oW2Rlc3QsIGZpbmFsQXJnc10oY21NYWtlZmlsZSYgbWFrZWZpbGUpIHsKLSAgICBGaW5hbEFjdGlvbihtYWtlZmlsZSwgZGVzdCwgZmluYWxBcmdzKTsKLSAgfSk7CisgIG1mLkFkZEdlbmVyYXRvckFjdGlvbigKKyAgICBbZGVzdCwgZmluYWxBcmdzXShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYpIHsKKyAgICAgIEZpbmFsQWN0aW9uKCpsZy5HZXRNYWtlZmlsZSgpLCBkZXN0LCBmaW5hbEFyZ3MpOworICAgIH0pOwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODMsMTcgKzg5LDE3IEBACiAgIH0KIAogICAvLyBVc2UgYSBmaWxlIGluc3RhbGwgZ2VuZXJhdG9yLgotICBjb25zdCBjaGFyKiBub19wZXJtaXNzaW9ucyA9ICIiOwotICBjb25zdCBjaGFyKiBub19yZW5hbWUgPSAiIjsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgbm9fcGVybWlzc2lvbnM7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX3JlbmFtZTsKICAgYm9vbCBub19leGNsdWRlX2Zyb21fYWxsID0gZmFsc2U7CiAgIHN0ZDo6c3RyaW5nIG5vX2NvbXBvbmVudCA9CiAgICAgbWFrZWZpbGUuR2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0lOU1RBTExfREVGQVVMVF9DT01QT05FTlRfTkFNRSIpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fY29uZmlndXJhdGlvbnM7CiAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6TWVzc2FnZUxldmVsIG1lc3NhZ2UgPQogICAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6U2VsZWN0TWVzc2FnZUxldmVsKCZtYWtlZmlsZSk7Ci0gIG1ha2VmaWxlLkFkZEluc3RhbGxHZW5lcmF0b3IobmV3IGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKAotICAgIGZpbGVzLCBkZXN0aW5hdGlvbi5jX3N0cigpLCB0cnVlLCBub19wZXJtaXNzaW9ucywgbm9fY29uZmlndXJhdGlvbnMsCi0gICAgbm9fY29tcG9uZW50LmNfc3RyKCksIG1lc3NhZ2UsIG5vX2V4Y2x1ZGVfZnJvbV9hbGwsIG5vX3JlbmFtZSkpOworICBtYWtlZmlsZS5BZGRJbnN0YWxsR2VuZXJhdG9yKGNtOjptYWtlX3VuaXF1ZTxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4oCisgICAgZmlsZXMsIGRlc3RpbmF0aW9uLCB0cnVlLCBub19wZXJtaXNzaW9ucywgbm9fY29uZmlndXJhdGlvbnMsIG5vX2NvbXBvbmVudCwKKyAgICBtZXNzYWdlLCBub19leGNsdWRlX2Zyb21fYWxsLCBub19yZW5hbWUpKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IuY3h4CmluZGV4IGVhMjk0NTUuLjdjZGYzYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IuY3h4CkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgImNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgpAQCAtMTEsMTMgKzEyLDEyIEBACiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtU2NyaXB0R2VuZXJhdG9yLmgiCiAKLWNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcjo6Y21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yKGNvbnN0IGNoYXIqIHNjcmlwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCkKLSAgOiBjbUluc3RhbGxHZW5lcmF0b3IobnVsbHB0ciwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksIGNvbXBvbmVudCwKK2NtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcjo6Y21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yKAorICBzdGQ6OnN0cmluZyBzY3JpcHQsIGJvb2wgY29kZSwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwKKyAgYm9vbCBleGNsdWRlX2Zyb21fYWxsKQorICA6IGNtSW5zdGFsbEdlbmVyYXRvcigiIiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksIGNvbXBvbmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZURlZmF1bHQsIGV4Y2x1ZGVfZnJvbV9hbGwpCi0gICwgU2NyaXB0KHNjcmlwdCkKKyAgLCBTY3JpcHQoc3RkOjptb3ZlKHNjcmlwdCkpCiAgICwgQ29kZShjb2RlKQogICAsIEFsbG93R2VuZXgoZmFsc2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmgKaW5kZXggN2VmYTMyMS4uMGE5YzRiYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbFNjcmlwdEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IuaApAQCAtMTksOCArMTksOSBAQAogY2xhc3MgY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yIDogcHVibGljIGNtSW5zdGFsbEdlbmVyYXRvcgogewogcHVibGljOgotICBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IoY29uc3QgY2hhciogc2NyaXB0LCBib29sIGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnQsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCk7CisgIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcihzdGQ6OnN0cmluZyBzY3JpcHQsIGJvb2wgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpOwogICB+Y21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKICAgYm9vbCBDb21wdXRlKGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBvdmVycmlkZTsKQEAgLTMyLDggKzMzLDggQEAKICAgdm9pZCBBZGRTY3JpcHRJbnN0YWxsUnVsZShzdGQ6Om9zdHJlYW0mIG9zLCBJbmRlbnQgaW5kZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBzY3JpcHQpOwogCi0gIHN0ZDo6c3RyaW5nIFNjcmlwdDsKLSAgYm9vbCBDb2RlOworICBzdGQ6OnN0cmluZyBjb25zdCBTY3JpcHQ7CisgIGJvb2wgY29uc3QgQ29kZTsKICAgY21Mb2NhbEdlbmVyYXRvciogTG9jYWxHZW5lcmF0b3I7CiAgIGJvb2wgQWxsb3dHZW5leDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IuY3h4CmluZGV4IDhhMGZlZmEuLjEyYmM5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IuY3h4CkBAIC0yLDcgKzIsOSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKQEAgLTEyLDExICsxNCwxMSBAQAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yOjpjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IoCi0gIGNtTWFrZWZpbGUqIG1ha2VmaWxlLCBjb25zdCBjaGFyKiBiaW5hcnlEaXJlY3RvcnksIGJvb2wgZXhjbHVkZUZyb21BbGwpCi0gIDogY21JbnN0YWxsR2VuZXJhdG9yKG51bGxwdHIsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRGVmYXVsdCwgZXhjbHVkZUZyb21BbGwpCisgIGNtTWFrZWZpbGUqIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyBiaW5hcnlEaXJlY3RvcnksIGJvb2wgZXhjbHVkZUZyb21BbGwpCisgIDogY21JbnN0YWxsR2VuZXJhdG9yKCIiLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwgIiIsIE1lc3NhZ2VEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlRnJvbUFsbCkKICAgLCBNYWtlZmlsZShtYWtlZmlsZSkKLSAgLCBCaW5hcnlEaXJlY3RvcnkoYmluYXJ5RGlyZWN0b3J5KQorICAsIEJpbmFyeURpcmVjdG9yeShzdGQ6Om1vdmUoYmluYXJ5RGlyZWN0b3J5KSkKIHsKIH0KIApAQCAtMjQsNyArMjYsNyBAQAogCiBib29sIGNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvcjo6SGF2ZUluc3RhbGwoKQogewotICBmb3IgKGF1dG8gZ2VuZXJhdG9yIDogdGhpcy0+TWFrZWZpbGUtPkdldEluc3RhbGxHZW5lcmF0b3JzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBnZW5lcmF0b3IgOiB0aGlzLT5NYWtlZmlsZS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKSkgewogICAgIGlmIChnZW5lcmF0b3ItPkhhdmVJbnN0YWxsKCkpIHsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IuaAppbmRleCBiOTliZGQ1Li5mOWNkMGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvci5oCkBAIC0yMCw3ICsyMCw3IEBACiB7CiBwdWJsaWM6CiAgIGNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvcihjbU1ha2VmaWxlKiBtYWtlZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJpbmFyeURpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGJpbmFyeURpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZUZyb21BbGwpOwogICB+Y21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKQEAgLTMzLDggKzMzLDggQEAKIHByb3RlY3RlZDoKICAgdm9pZCBHZW5lcmF0ZVNjcmlwdChzdGQ6Om9zdHJlYW0mIG9zKSBvdmVycmlkZTsKIAotICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKLSAgc3RkOjpzdHJpbmcgQmluYXJ5RGlyZWN0b3J5OworICBjbU1ha2VmaWxlKiBjb25zdCBNYWtlZmlsZTsKKyAgc3RkOjpzdHJpbmcgY29uc3QgQmluYXJ5RGlyZWN0b3J5OwogICBjbUxvY2FsR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtSW5zdGFsbFRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggYWE5MmZhNy4uZTA1ZGFhOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbFRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbFRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTI1LDE1ICsyNSwxNSBAQAogI2luY2x1ZGUgImNtYWtlLmgiCiAKIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcjo6Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAotICBzdGQ6OnN0cmluZyB0YXJnZXROYW1lLCBjb25zdCBjaGFyKiBkZXN0LCBib29sIGltcGxpYiwKLSAgY29uc3QgY2hhciogZmlsZV9wZXJtaXNzaW9ucywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKLSAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLAorICBzdGQ6OnN0cmluZyB0YXJnZXROYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwgYm9vbCBpbXBsaWIsCisgIHN0ZDo6c3RyaW5nIGZpbGVfcGVybWlzc2lvbnMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsCiAgIGJvb2wgb3B0aW9uYWwsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYmFja3RyYWNlKQogICA6IGNtSW5zdGFsbEdlbmVyYXRvcihkZXN0LCBjb25maWd1cmF0aW9ucywgY29tcG9uZW50LCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2Zyb21fYWxsKQogICAsIFRhcmdldE5hbWUoc3RkOjptb3ZlKHRhcmdldE5hbWUpKQogICAsIFRhcmdldChudWxscHRyKQotICAsIEZpbGVQZXJtaXNzaW9ucyhmaWxlX3Blcm1pc3Npb25zKQorICAsIEZpbGVQZXJtaXNzaW9ucyhzdGQ6Om1vdmUoZmlsZV9wZXJtaXNzaW9ucykpCiAgICwgSW1wb3J0TGlicmFyeShpbXBsaWIpCiAgICwgT3B0aW9uYWwob3B0aW9uYWwpCiAgICwgQmFja3RyYWNlKHN0ZDo6bW92ZShiYWNrdHJhY2UpKQpAQCAtNTU0LDcgKzU1NCw4IEBACiAgICAgICAvLyBjb21wb25lbnRzIG9mIHRoZSBpbnN0YWxsX25hbWUgZmllbGQgdGhlbiB3ZSBuZWVkIHRvIGNyZWF0ZSBhCiAgICAgICAvLyBtYXBwaW5nIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgaW5zdGFsbGF0aW9uLgogICAgICAgc3RkOjpzdHJpbmcgZm9yX2J1aWxkID0gdGd0LT5HZXRJbnN0YWxsTmFtZURpckZvckJ1aWxkVHJlZShjb25maWcpOwotICAgICAgc3RkOjpzdHJpbmcgZm9yX2luc3RhbGwgPSB0Z3QtPkdldEluc3RhbGxOYW1lRGlyRm9ySW5zdGFsbFRyZWUoKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGZvcl9pbnN0YWxsID0gdGd0LT5HZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKAorICAgICAgICBjb25maWcsICIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIpOwogICAgICAgaWYgKGZvcl9idWlsZCAhPSBmb3JfaW5zdGFsbCkgewogICAgICAgICAvLyBUaGUgZGlyZWN0b3J5IHBvcnRpb25zIGRpZmZlci4gIEFwcGVuZCB0aGUgZmlsZW5hbWUgdG8KICAgICAgICAgLy8gY3JlYXRlIHRoZSBtYXBwaW5nLgpAQCAtNTc3LDcgKzU3OCw4IEBACiAgIGlmICh0aGlzLT5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7CiAgICAgc3RkOjpzdHJpbmcgZm9yX2J1aWxkID0KICAgICAgIHRoaXMtPlRhcmdldC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JCdWlsZFRyZWUoY29uZmlnKTsKLSAgICBzdGQ6OnN0cmluZyBmb3JfaW5zdGFsbCA9IHRoaXMtPlRhcmdldC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgpOworICAgIHN0ZDo6c3RyaW5nIGZvcl9pbnN0YWxsID0gdGhpcy0+VGFyZ2V0LT5HZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKAorICAgICAgY29uZmlnLCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iKTsKIAogICAgIGlmICh0aGlzLT5UYXJnZXQtPklzRnJhbWV3b3JrT25BcHBsZSgpICYmIGZvcl9pbnN0YWxsLmVtcHR5KCkpIHsKICAgICAgIC8vIEZyYW1ld29ya3Mgc2VlbSB0byBoYXZlIGFuIGlkIGNvcnJlc3BvbmRpbmcgdG8gdGhlaXIgb3duIGZ1bGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuaAppbmRleCA4NzMwNDU0Li5lMjEwMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtSW5zdGFsbFRhcmdldEdlbmVyYXRvci5oCkBAIC0yMywxMSArMjMsMTEgQEAKIHsKIHB1YmxpYzoKICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAotICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUsIGNvbnN0IGNoYXIqIGRlc3QsIGJvb2wgaW1wbGliLAotICAgIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywgY29uc3QgY2hhciogY29tcG9uZW50LAotICAgIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsIGJvb2wgb3B0aW9uYWwsCi0gICAgY21MaXN0RmlsZUJhY2t0cmFjZSBiYWNrdHJhY2UgPSBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOworICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0LCBib29sIGltcGxpYiwKKyAgICBzdGQ6OnN0cmluZyBmaWxlX3Blcm1pc3Npb25zLAorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwKKyAgICBib29sIG9wdGlvbmFsLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJhY2t0cmFjZSA9IGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CiAgIH5jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoKSBvdmVycmlkZTsKIAogICAvKiogU2VsZWN0IHRoZSBwb2xpY3kgZm9yIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcnkgbGlua2FibGUgbmFtZQpAQCAtMTA2LDEzICsxMDYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9EZXN0RGlyUGF0aCk7CiAgIHZvaWQgSXNzdWVDTVAwMDk1V2FybmluZyhjb25zdCBzdGQ6OnN0cmluZyYgdW5lc2NhcGVkUnBhdGgpOwogCi0gIHN0ZDo6c3RyaW5nIFRhcmdldE5hbWU7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IFRhcmdldE5hbWU7CiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBUYXJnZXQ7Ci0gIHN0ZDo6c3RyaW5nIEZpbGVQZXJtaXNzaW9uczsKKyAgc3RkOjpzdHJpbmcgY29uc3QgRmlsZVBlcm1pc3Npb25zOwogICBOYW1lbGlua01vZGVUeXBlIE5hbWVsaW5rTW9kZTsKLSAgYm9vbCBJbXBvcnRMaWJyYXJ5OwotICBib29sIE9wdGlvbmFsOwotICBjbUxpc3RGaWxlQmFja3RyYWNlIEJhY2t0cmFjZTsKKyAgYm9vbCBjb25zdCBJbXBvcnRMaWJyYXJ5OworICBib29sIGNvbnN0IE9wdGlvbmFsOworICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0IEJhY2t0cmFjZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5jeHggYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmN4eAppbmRleCBlYWJlNTkwLi4zMjM5NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmN4eApAQCAtNCw3ICs0LDYgQEAKIAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0xMiwxNyArMTEsMTEgQEAKIAogY21JbnN0YWxsZWRGaWxlOjpjbUluc3RhbGxlZEZpbGUoKSA9IGRlZmF1bHQ7CiAKLWNtSW5zdGFsbGVkRmlsZTo6fmNtSW5zdGFsbGVkRmlsZSgpCi17Ci0gIGRlbGV0ZSBOYW1lRXhwcmVzc2lvbjsKLX0KK2NtSW5zdGFsbGVkRmlsZTo6fmNtSW5zdGFsbGVkRmlsZSgpID0gZGVmYXVsdDsKIAogY21JbnN0YWxsZWRGaWxlOjpQcm9wZXJ0eTo6UHJvcGVydHkoKSA9IGRlZmF1bHQ7CiAKLWNtSW5zdGFsbGVkRmlsZTo6UHJvcGVydHk6On5Qcm9wZXJ0eSgpCi17Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPlZhbHVlRXhwcmVzc2lvbnMpOwotfQorY21JbnN0YWxsZWRGaWxlOjpQcm9wZXJ0eTo6flByb3BlcnR5KCkgPSBkZWZhdWx0OwogCiB2b2lkIGNtSW5zdGFsbGVkRmlsZTo6U2V0TmFtZShjbU1ha2VmaWxlKiBtZiwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCiB7CkBAIC0zMCw3ICsyMyw3IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZShiYWNrdHJhY2UpOwogCiAgIHRoaXMtPk5hbWUgPSBuYW1lOwotICB0aGlzLT5OYW1lRXhwcmVzc2lvbiA9IGdlLlBhcnNlKG5hbWUpLnJlbGVhc2UoKTsKKyAgdGhpcy0+TmFtZUV4cHJlc3Npb24gPSBnZS5QYXJzZShuYW1lKTsKIH0KIAogc3RkOjpzdHJpbmcgY29uc3QmIGNtSW5zdGFsbGVkRmlsZTo6R2V0TmFtZSgpIGNvbnN0CkBAIC00OSw3ICs0Miw4IEBACiB9CiAKIHZvaWQgY21JbnN0YWxsZWRGaWxlOjpTZXRQcm9wZXJ0eShjbU1ha2VmaWxlIGNvbnN0KiBtZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewogICB0aGlzLT5SZW1vdmVQcm9wZXJ0eShwcm9wKTsKICAgdGhpcy0+QXBwZW5kUHJvcGVydHkobWYsIHByb3AsIHZhbHVlKTsKQEAgLTU3LDEzICs1MSwxNCBAQAogCiB2b2lkIGNtSW5zdGFsbGVkRmlsZTo6QXBwZW5kUHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUsIGJvb2wgLyphc1N0cmluZyovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIC8qYXNTdHJpbmcqLykKIHsKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBiYWNrdHJhY2UgPSBtZi0+R2V0QmFja3RyYWNlKCk7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZShiYWNrdHJhY2UpOwogCiAgIFByb3BlcnR5JiBwcm9wZXJ0eSA9IHRoaXMtPlByb3BlcnRpZXNbcHJvcF07Ci0gIHByb3BlcnR5LlZhbHVlRXhwcmVzc2lvbnMucHVzaF9iYWNrKGdlLlBhcnNlKHZhbHVlKS5yZWxlYXNlKCkpOworICBwcm9wZXJ0eS5WYWx1ZUV4cHJlc3Npb25zLnB1c2hfYmFjayhnZS5QYXJzZSh2YWx1ZSkpOwogfQogCiBib29sIGNtSW5zdGFsbGVkRmlsZTo6SGFzUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CkBAIC04NCw3ICs3OSw3IEBACiAgIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgc3RkOjpzdHJpbmcgc2VwYXJhdG9yOwogCi0gIGZvciAoYXV0byB2ZSA6IHByb3BlcnR5LlZhbHVlRXhwcmVzc2lvbnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiB2ZSA6IHByb3BlcnR5LlZhbHVlRXhwcmVzc2lvbnMpIHsKICAgICBvdXRwdXQgKz0gc2VwYXJhdG9yOwogICAgIG91dHB1dCArPSB2ZS0+R2V0SW5wdXQoKTsKICAgICBzZXBhcmF0b3IgPSAiOyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmggYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmgKaW5kZXggZWU4MDllZS4uMDdmNzA4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxlZEZpbGUuaApAQCAtMjQsNyArMjQsNyBAQAogICB1c2luZyBDb21waWxlZEdlbmVyYXRvckV4cHJlc3Npb25QdHJUeXBlID0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+OwogCi0gIHVzaW5nIEV4cHJlc3Npb25WZWN0b3JUeXBlID0gc3RkOjp2ZWN0b3I8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24qPjsKKyAgdXNpbmcgRXhwcmVzc2lvblZlY3RvclR5cGUgPSBzdGQ6OnZlY3RvcjxDb21waWxlZEdlbmVyYXRvckV4cHJlc3Npb25QdHJUeXBlPjsKIAogICBzdHJ1Y3QgUHJvcGVydHkKICAgewpAQCAtNDksMTAgKzQ5LDEwIEBACiAgIHZvaWQgUmVtb3ZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOwogCiAgIHZvaWQgU2V0UHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwogCiAgIHZvaWQgQXBwZW5kUHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLCBib29sIGFzU3RyaW5nID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKIAogICBib29sIEhhc1Byb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKIApAQCAtNzMsNyArNzMsNyBAQAogCiBwcml2YXRlOgogICBzdGQ6OnN0cmluZyBOYW1lOwotICBjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbiogTmFtZUV4cHJlc3Npb24gPSBudWxscHRyOworICBDb21waWxlZEdlbmVyYXRvckV4cHJlc3Npb25QdHJUeXBlIE5hbWVFeHByZXNzaW9uOwogICBQcm9wZXJ0eU1hcFR5cGUgUHJvcGVydGllczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUpzb25PYmplY3RzLmN4eCBiL1NvdXJjZS9jbUpzb25PYmplY3RzLmN4eAppbmRleCBiMjNhYjQzLi45ZWNmMzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Kc29uT2JqZWN0cy5jeHgKKysrIGIvU291cmNlL2NtSnNvbk9iamVjdHMuY3h4CkBAIC04LDEzICs4LDE1IEBACiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCkBAIC00Myw3ICs0NSw3IEBACiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2V0Q29uZmlndXJhdGlvbnMoY29uc3QgY21ha2UqIGNtKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvbnM7Ci0gIGF1dG8gbWFrZWZpbGVzID0gY20tPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRNYWtlZmlsZXMoKTsKKyAgY29uc3QgYXV0byYgbWFrZWZpbGVzID0gY20tPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRNYWtlZmlsZXMoKTsKICAgaWYgKG1ha2VmaWxlcy5lbXB0eSgpKSB7CiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zOwogICB9CkBAIC04MiwxMyArODQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHRtcEZpbGVzKQogewogICBjb25zdCBzdGQ6OnN0cmluZyBjbWFrZVJvb3REaXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZVJvb3QoKSArICcvJzsKLSAgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+IGNvbnN0JiBtYWtlZmlsZXMgPSBnZy0+R2V0TWFrZWZpbGVzKCk7Ci0gIGZvciAoY21NYWtlZmlsZSBjb25zdCogbWYgOiBtYWtlZmlsZXMpIHsKKyAgYXV0byBjb25zdCYgbWFrZWZpbGVzID0gZ2ctPkdldE1ha2VmaWxlcygpOworICBmb3IgKGNvbnN0IGF1dG8mIG1mIDogbWFrZWZpbGVzKSB7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGYgOiBtZi0+R2V0TGlzdEZpbGVzKCkpIHsKIAogICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgc3RhcnRPZkZpbGUgPSBsZi5zdWJzdHIoMCwgY21ha2VSb290RGlyLnNpemUoKSk7CiAgICAgICBjb25zdCBib29sIGlzSW50ZXJuYWwgPSAoc3RhcnRPZkZpbGUgPT0gY21ha2VSb290RGlyKTsKLSAgICAgIGNvbnN0IGJvb2wgaXNUZW1wb3JhcnkgPSAhaXNJbnRlcm5hbCAmJiAobGYuZmluZChidWlsZERpciArICcvJykgPT0gMCk7CisgICAgICBjb25zdCBib29sIGlzVGVtcG9yYXJ5ID0KKyAgICAgICAgIWlzSW50ZXJuYWwgJiYgKGNtSGFzUHJlZml4KGxmLCBidWlsZERpciArICcvJykpOwogCiAgICAgICBzdGQ6OnN0cmluZyB0b0FkZCA9IGxmOwogICAgICAgaWYgKCFzb3VyY2VEaXIuZW1wdHkoKSkgewpAQCAtNDg1LDEwICs0ODgsMTAgQEAKICAgICByZXN1bHRba0hBU19JTlNUQUxMX1JVTEVdID0gdHJ1ZTsKIAogICAgIEpzb246OlZhbHVlIGluc3RhbGxQYXRocyA9IEpzb246OmFycmF5VmFsdWU7Ci0gICAgYXV0byB0YXJnZXRHZW5lcmF0b3JzID0gdGFyZ2V0LT5NYWtlZmlsZS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKTsKLSAgICBmb3IgKGF1dG8gaW5zdGFsbEdlbmVyYXRvciA6IHRhcmdldEdlbmVyYXRvcnMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RhbGxHZW5lcmF0b3IgOgorICAgICAgICAgdGFyZ2V0LT5NYWtlZmlsZS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKSkgewogICAgICAgYXV0byBpbnN0YWxsVGFyZ2V0R2VuZXJhdG9yID0KLSAgICAgICAgZHluYW1pY19jYXN0PGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcio+KGluc3RhbGxHZW5lcmF0b3IpOworICAgICAgICBkeW5hbWljX2Nhc3Q8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKj4oaW5zdGFsbEdlbmVyYXRvci5nZXQoKSk7CiAgICAgICBpZiAoaW5zdGFsbFRhcmdldEdlbmVyYXRvciAhPSBudWxscHRyICYmCiAgICAgICAgICAgaW5zdGFsbFRhcmdldEdlbmVyYXRvci0+R2V0VGFyZ2V0KCktPlRhcmdldCA9PSB0YXJnZXQtPlRhcmdldCkgewogICAgICAgICBhdXRvIGRlc3QgPSBpbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLT5HZXREZXN0aW5hdGlvbihjb25maWcpOwpAQCAtNjAxLDcgKzYwNCw3IEBACiAKICAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiB0YXJnZXRMaXN0OwogICBmb3IgKGF1dG8gY29uc3QmIGxnSXQgOiBnZW5lcmF0b3JzKSB7Ci0gICAgY21BcHBlbmQodGFyZ2V0TGlzdCwgbGdJdC0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKTsKKyAgICBjbTo6YXBwZW5kKHRhcmdldExpc3QsIGxnSXQtPkdldEdlbmVyYXRvclRhcmdldHMoKSk7CiAgIH0KICAgc3RkOjpzb3J0KHRhcmdldExpc3QuYmVnaW4oKSwgdGFyZ2V0TGlzdC5lbmQoKSk7CiAKQEAgLTY0MSw5ICs2NDQsOSBAQAogICAgIC8vIGFzc29jaWF0ZWQgZ2VuZXJhdG9ycy4KICAgICBib29sIGhhc0luc3RhbGxSdWxlID0gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvIGdlbmVyYXRvciA6IHByb2plY3RJdC5zZWNvbmQpIHsKLSAgICAgIGZvciAoY29uc3QgYXV0byBpbnN0YWxsR2VuIDoKKyAgICAgIGZvciAoY29uc3QgYXV0byYgaW5zdGFsbEdlbiA6CiAgICAgICAgICAgIGdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKSkgewotICAgICAgICBpZiAoIWR5bmFtaWNfY2FzdDxjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IqPihpbnN0YWxsR2VuKSkgeworICAgICAgICBpZiAoIWR5bmFtaWNfY2FzdDxjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IqPihpbnN0YWxsR2VuLmdldCgpKSkgewogICAgICAgICAgIGhhc0luc3RhbGxSdWxlID0gdHJ1ZTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0l0ZW0uY3h4IGIvU291cmNlL2NtTGlua0l0ZW0uY3h4CmluZGV4IDkxZWIxODMuLjRlNTBkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxpbmtJdGVtLmN4eAorKysgYi9Tb3VyY2UvY21MaW5rSXRlbS5jeHgKQEAgLTgsMTQgKzgsMTcgQEAKIAogY21MaW5rSXRlbTo6Y21MaW5rSXRlbSgpID0gZGVmYXVsdDsKIAotY21MaW5rSXRlbTo6Y21MaW5rSXRlbShzdGQ6OnN0cmluZyBuLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQorY21MaW5rSXRlbTo6Y21MaW5rSXRlbShzdGQ6OnN0cmluZyBuLCBib29sIGMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpCiAgIDogU3RyaW5nKHN0ZDo6bW92ZShuKSkKKyAgLCBDcm9zcyhjKQogICAsIEJhY2t0cmFjZShzdGQ6Om1vdmUoYnQpKQogewogfQogCi1jbUxpbmtJdGVtOjpjbUxpbmtJdGVtKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0LCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQorY21MaW5rSXRlbTo6Y21MaW5rSXRlbShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdCwgYm9vbCBjLAorICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQogICA6IFRhcmdldCh0KQorICAsIENyb3NzKGMpCiAgICwgQmFja3RyYWNlKHN0ZDo6bW92ZShidCkpCiB7CiB9CkBAIC0zOSwxMiArNDIsMTYgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgLy8gT3JkZXIgYW1vbmcgc3RyaW5ncy4KLSAgcmV0dXJuIGwuU3RyaW5nIDwgci5TdHJpbmc7CisgIGlmIChsLlN0cmluZyA8IHIuU3RyaW5nKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgLy8gT3JkZXIgYW1vbmcgY3Jvc3MtY29uZmlnLgorICByZXR1cm4gbC5Dcm9zcyA8IHIuQ3Jvc3M7CiB9CiAKIGJvb2wgb3BlcmF0b3I9PShjbUxpbmtJdGVtIGNvbnN0JiBsLCBjbUxpbmtJdGVtIGNvbnN0JiByKQogewotICByZXR1cm4gbC5UYXJnZXQgPT0gci5UYXJnZXQgJiYgbC5TdHJpbmcgPT0gci5TdHJpbmc7CisgIHJldHVybiBsLlRhcmdldCA9PSByLlRhcmdldCAmJiBsLlN0cmluZyA9PSByLlN0cmluZyAmJiBsLkNyb3NzID09IHIuQ3Jvc3M7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0l0ZW0uaCBiL1NvdXJjZS9jbUxpbmtJdGVtLmgKaW5kZXggMmQ5Mzc4Yi4uYWU4N2U0NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTGlua0l0ZW0uaAorKysgYi9Tb3VyY2UvY21MaW5rSXRlbS5oCkBAIC0yNCwxMCArMjQsMTEgQEAKIAogcHVibGljOgogICBjbUxpbmtJdGVtKCk7Ci0gIGNtTGlua0l0ZW0oc3RkOjpzdHJpbmcgcywgY21MaXN0RmlsZUJhY2t0cmFjZSBidCk7Ci0gIGNtTGlua0l0ZW0oY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHQsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpOworICBjbUxpbmtJdGVtKHN0ZDo6c3RyaW5nIHMsIGJvb2wgYywgY21MaXN0RmlsZUJhY2t0cmFjZSBidCk7CisgIGNtTGlua0l0ZW0oY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHQsIGJvb2wgYywgY21MaXN0RmlsZUJhY2t0cmFjZSBidCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBBc1N0cigpIGNvbnN0OwogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogVGFyZ2V0ID0gbnVsbHB0cjsKKyAgYm9vbCBDcm9zcyA9IGZhbHNlOwogICBjbUxpc3RGaWxlQmFja3RyYWNlIEJhY2t0cmFjZTsKICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNtTGlua0l0ZW0gY29uc3QmIGwsIGNtTGlua0l0ZW0gY29uc3QmIHIpOwogICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNtTGlua0l0ZW0gY29uc3QmIGwsIGNtTGlua0l0ZW0gY29uc3QmIHIpOwpAQCAtODAsNiArODEsOSBAQAogICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiBXcm9uZ0NvbmZpZ0xpYnJhcmllczsKIAogICBib29sIEltcGxlbWVudGF0aW9uSXNJbnRlcmZhY2UgPSBmYWxzZTsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBsaW5rIGxhbmd1YWdlIGdlbmV4LgorICBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IGZhbHNlOwogfTsKIAogc3RydWN0IGNtT3B0aW9uYWxMaW5rSW50ZXJmYWNlIDogcHVibGljIGNtTGlua0ludGVyZmFjZQpAQCAtOTksNiArMTAzLDkgQEAKIHsKICAgLy8gTGFuZ3VhZ2VzIHdob3NlIHJ1bnRpbWUgbGlicmFyaWVzIG11c3QgYmUgbGlua2VkLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGFuZ3VhZ2VzOworCisgIC8vIFdoZXRoZXIgdGhlIGxpc3QgZGVwZW5kcyBvbiBhIGxpbmsgbGFuZ3VhZ2UgZ2VuZXguCisgIGJvb2wgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiAvLyBDYWNoZSBsaW5rIGltcGxlbWVudGF0aW9uIGNvbXB1dGF0aW9uIGZyb20gZWFjaCBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0l0ZW1HcmFwaFZpc2l0b3IuY3h4IGIvU291cmNlL2NtTGlua0l0ZW1HcmFwaFZpc2l0b3IuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYzIzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21MaW5rSXRlbUdyYXBoVmlzaXRvci5jeHgKQEAgLTAsMCArMSwxNDIgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpbmNsdWRlICJjbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmgiCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgorI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKKyNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisKK3ZvaWQgY21MaW5rSXRlbUdyYXBoVmlzaXRvcjo6VmlzaXRJdGVtKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pCit7CisgIGlmICh0aGlzLT5JdGVtVmlzaXRlZChpdGVtKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHRoaXMtPk9uSXRlbShpdGVtKTsKKworICB0aGlzLT5WaXNpdExpbmtzKGl0ZW0sIGl0ZW0pOworfQorCit2b2lkIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OlZpc2l0TGlua3MoY21MaW5rSXRlbSBjb25zdCYgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiByb290SXRlbSkKK3sKKyAgaWYgKHRoaXMtPkxpbmtWaXNpdGVkKGl0ZW0sIHJvb3RJdGVtKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChpdGVtLlRhcmdldCA9PSBudWxscHRyKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBpdGVtLlRhcmdldC0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICAgIHRoaXMtPlZpc2l0TGlua3MoaXRlbSwgcm9vdEl0ZW0sIGNvbmZpZyk7CisgIH0KK30KKwordm9pZCBjbUxpbmtJdGVtR3JhcGhWaXNpdG9yOjpWaXNpdExpbmtzKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgcm9vdEl0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykKK3sKKyAgYXV0byBjb25zdCYgdGFyZ2V0ID0gKml0ZW0uVGFyZ2V0OworCisgIERlcGVuZGVuY3lNYXAgZGVwZW5kZW5jaWVzOworICBjbUxpbmtJdGVtR3JhcGhWaXNpdG9yOjpHZXREZXBlbmRlbmNpZXModGFyZ2V0LCBjb25maWcsIGRlcGVuZGVuY2llcyk7CisKKyAgZm9yIChhdXRvIGNvbnN0JiBkIDogZGVwZW5kZW5jaWVzKSB7CisgICAgYXV0byBjb25zdCYgZGVwZW5kZW5jeSA9IGQuc2Vjb25kOworICAgIGF1dG8gY29uc3QmIGRlcGVuZGVuY3lUeXBlID0gZGVwZW5kZW5jeS5maXJzdDsKKyAgICBhdXRvIGNvbnN0JiBkZXBlbmRlZSA9IGRlcGVuZGVuY3kuc2Vjb25kOworICAgIHRoaXMtPlZpc2l0SXRlbShkZXBlbmRlZSk7CisKKyAgICBpZiAodGhpcy0+TGlua1Zpc2l0ZWQoaXRlbSwgZGVwZW5kZWUpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICB0aGlzLT5PbkRpcmVjdExpbmsoaXRlbSwgZGVwZW5kZWUsIGRlcGVuZGVuY3lUeXBlKTsKKworICAgIGlmIChyb290SXRlbS5Bc1N0cigpICE9IGl0ZW0uQXNTdHIoKSkgeworICAgICAgdGhpcy0+T25JbmRpcmVjdExpbmsocm9vdEl0ZW0sIGRlcGVuZGVlKTsKKyAgICB9CisKKyAgICAvLyBWaXNpdCBhbGwgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgbGlua3MuCisgICAgdGhpcy0+VmlzaXRMaW5rcyhkZXBlbmRlZSwgZGVwZW5kZWUpOworICAgIHRoaXMtPlZpc2l0TGlua3MoZGVwZW5kZWUsIGl0ZW0pOworICAgIHRoaXMtPlZpc2l0TGlua3MoZGVwZW5kZWUsIHJvb3RJdGVtKTsKKyAgfQorfQorCitib29sIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6Okl0ZW1WaXNpdGVkKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pCit7CisgIGF1dG8mIGNvbGxlY3Rpb24gPSB0aGlzLT5WaXNpdGVkSXRlbXM7CisKKyAgYm9vbCBjb25zdCB2aXNpdGVkID0gY29sbGVjdGlvbi5maW5kKGl0ZW0uQXNTdHIoKSkgIT0gY29sbGVjdGlvbi5jZW5kKCk7CisKKyAgaWYgKCF2aXNpdGVkKSB7CisgICAgY29sbGVjdGlvbi5pbnNlcnQoaXRlbS5Bc1N0cigpKTsKKyAgfQorCisgIHJldHVybiB2aXNpdGVkOworfQorCitib29sIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OkxpbmtWaXNpdGVkKGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSkKK3sKKyAgYXV0byBjb25zdCBsaW5rID0gc3RkOjptYWtlX3BhaXI8PihkZXBlbmRlci5Bc1N0cigpLCBkZXBlbmRlZS5Bc1N0cigpKTsKKworICBib29sIGNvbnN0IGxpbmtWaXNpdGVkID0KKyAgICB0aGlzLT5WaXNpdGVkTGlua3MuZmluZChsaW5rKSAhPSB0aGlzLT5WaXNpdGVkTGlua3MuY2VuZCgpOworCisgIGlmICghbGlua1Zpc2l0ZWQpIHsKKyAgICB0aGlzLT5WaXNpdGVkTGlua3MuaW5zZXJ0KGxpbmspOworICB9CisKKyAgcmV0dXJuIGxpbmtWaXNpdGVkOworfQorCit2b2lkIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OkdldERlcGVuZGVuY2llcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCYgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3lNYXAmIGRlcGVuZGVuY2llcykKK3sKKyAgYXV0byBpbXBsZW1lbnRhdGlvbkxpYnJhcmllcyA9IHRhcmdldC5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKTsKKyAgaWYgKGltcGxlbWVudGF0aW9uTGlicmFyaWVzICE9IG51bGxwdHIpIHsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGxpYiA6IGltcGxlbWVudGF0aW9uTGlicmFyaWVzLT5MaWJyYXJpZXMpIHsKKyAgICAgIGF1dG8gY29uc3QmIG5hbWUgPSBsaWIuQXNTdHIoKTsKKyAgICAgIGRlcGVuZGVuY2llc1tuYW1lXSA9IERlcGVuZGVuY3koRGVwZW5kZW5jeVR5cGU6OkxpbmtQcml2YXRlLCBsaWIpOworICAgIH0KKyAgfQorCisgIGF1dG8gaW50ZXJmYWNlTGlicmFyaWVzID0KKyAgICB0YXJnZXQuR2V0TGlua0ludGVyZmFjZUxpYnJhcmllcyhjb25maWcsICZ0YXJnZXQsIHRydWUpOworICBpZiAoaW50ZXJmYWNlTGlicmFyaWVzICE9IG51bGxwdHIpIHsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGxpYiA6IGludGVyZmFjZUxpYnJhcmllcy0+TGlicmFyaWVzKSB7CisgICAgICBhdXRvIGNvbnN0JiBuYW1lID0gbGliLkFzU3RyKCk7CisgICAgICBpZiAoZGVwZW5kZW5jaWVzLmZpbmQobmFtZSkgIT0gZGVwZW5kZW5jaWVzLmNlbmQoKSkgeworICAgICAgICBkZXBlbmRlbmNpZXNbbmFtZV0gPSBEZXBlbmRlbmN5KERlcGVuZGVuY3lUeXBlOjpMaW5rUHVibGljLCBsaWIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVwZW5kZW5jaWVzW25hbWVdID0gRGVwZW5kZW5jeShEZXBlbmRlbmN5VHlwZTo6TGlua0ludGVyZmFjZSwgbGliKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+IG9iamVjdExpYnJhcmllczsKKyAgdGFyZ2V0LkdldE9iamVjdExpYnJhcmllc0NNUDAwMjYob2JqZWN0TGlicmFyaWVzKTsKKyAgZm9yIChhdXRvIGNvbnN0JiBsaWIgOiBvYmplY3RMaWJyYXJpZXMpIHsKKyAgICBhdXRvIGNvbnN0JiBuYW1lID0gbGliLT5HZXROYW1lKCk7CisgICAgaWYgKGRlcGVuZGVuY2llcy5maW5kKG5hbWUpID09IGRlcGVuZGVuY2llcy5jZW5kKCkpIHsKKyAgICAgIGF1dG8gb2JqZWN0SXRlbSA9IGNtTGlua0l0ZW0obGliLCBmYWxzZSwgbGliLT5HZXRCYWNrdHJhY2UoKSk7CisgICAgICBkZXBlbmRlbmNpZXNbbmFtZV0gPSBEZXBlbmRlbmN5KERlcGVuZGVuY3lUeXBlOjpPYmplY3QsIG9iamVjdEl0ZW0pOworICAgIH0KKyAgfQorCisgIGF1dG8gY29uc3QmIHV0aWxpdHlJdGVtcyA9IHRhcmdldC5HZXRVdGlsaXR5SXRlbXMoKTsKKyAgZm9yIChhdXRvIGNvbnN0JiBpdGVtIDogdXRpbGl0eUl0ZW1zKSB7CisgICAgYXV0byBjb25zdCYgbmFtZSA9IGl0ZW0uQXNTdHIoKTsKKyAgICBpZiAoZGVwZW5kZW5jaWVzLmZpbmQobmFtZSkgPT0gZGVwZW5kZW5jaWVzLmNlbmQoKSkgeworICAgICAgZGVwZW5kZW5jaWVzW25hbWVdID0gRGVwZW5kZW5jeShEZXBlbmRlbmN5VHlwZTo6VXRpbGl0eSwgaXRlbSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21MaW5rSXRlbUdyYXBoVmlzaXRvci5oIGIvU291cmNlL2NtTGlua0l0ZW1HcmFwaFZpc2l0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWRjNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtTGlua0l0ZW1HcmFwaFZpc2l0b3IuaApAQCAtMCwwICsxLDc1IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3JfaAorI2RlZmluZSBjbUxpbmtJdGVtR3JhcGhWaXNpdG9yX2gKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlICJjbUxpbmtJdGVtLmgiCisKK2NsYXNzIGNtR2VuZXJhdG9yVGFyZ2V0OworCisvKiogXGNsYXNzIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IKKyAqIFxicmllZiBWaXNpdHMgYSBncmFwaCBvZiBsaW5rZWQgaXRlbXMuCisgKgorICogQWxsb3dzIHRvIHZpc2l0IGl0ZW1zIGFuZCBkZXBlbmRlbmN5IGxpbmtzIChkaXJlY3QgYW5kIGluZGlyZWN0KSBiZXR3ZWVuCisgKiB0aG9zZSBpdGVtcy4KKyAqIFRoaXMgYWJzdHJhY3QgY2xhc3MgdGFrZXMgY2FyZSBvZiB0aGUgZ3JhcGggdHJhdmVyc2FsLCBtYWtpbmcgc3VyZSB0aGF0OgorICogICAtIGl0IHRlcm1pbmF0ZXMgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgY3ljbGVzOworICogICAtIGl0IHZpc2l0cyBldmVyeSBvYmplY3Qgb25jZSAoYW5kIG9ubHkgb25jZSk7CisgKiAgIC0gaXQgdmlzaXRzIHRoZSBvYmplY3RzIGluIHRoZSBzYW1lIG9yZGVyIGV2ZXJ5IHRpbWUuCisgKgorICogQ2hpbGRyZW4gY2xhc3NlcyBvbmx5IGhhdmUgdG8gaW1wbGVtZW50IE9uSXRlbSgpIGV0Yy4gdG8gaGFuZGxlIHdoYXRldmVyCisgKiBsb2dpYyB0aGV5IGNhcmUgYWJvdXQuCisgKi8KK2NsYXNzIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IKK3sKK3B1YmxpYzoKKyAgdmlydHVhbCB+Y21MaW5rSXRlbUdyYXBoVmlzaXRvcigpID0gZGVmYXVsdDsKKworICB2aXJ0dWFsIHZvaWQgVmlzaXRHcmFwaChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgPSAwOworCisgIHZvaWQgVmlzaXRJdGVtKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pOworCitwcm90ZWN0ZWQ6CisgIGVudW0gY2xhc3MgRGVwZW5kZW5jeVR5cGUKKyAgeworICAgIExpbmtJbnRlcmZhY2UsCisgICAgTGlua1B1YmxpYywKKyAgICBMaW5rUHJpdmF0ZSwKKyAgICBPYmplY3QsCisgICAgVXRpbGl0eQorICB9OworCisgIHZpcnR1YWwgdm9pZCBPbkl0ZW0oY21MaW5rSXRlbSBjb25zdCYgaXRlbSkgPSAwOworCisgIHZpcnR1YWwgdm9pZCBPbkRpcmVjdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWUsIERlcGVuZGVuY3lUeXBlIGR0KSA9IDA7CisKKyAgdmlydHVhbCB2b2lkIE9uSW5kaXJlY3RMaW5rKGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWUpID0gMDsKKworcHJpdmF0ZToKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IFZpc2l0ZWRJdGVtczsKKworICBzdGQ6OnNldDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPj4gVmlzaXRlZExpbmtzOworCisgIHZvaWQgVmlzaXRMaW5rcyhjbUxpbmtJdGVtIGNvbnN0JiBpdGVtLCBjbUxpbmtJdGVtIGNvbnN0JiByb290SXRlbSk7CisgIHZvaWQgVmlzaXRMaW5rcyhjbUxpbmtJdGVtIGNvbnN0JiBpdGVtLCBjbUxpbmtJdGVtIGNvbnN0JiByb290SXRlbSwKKyAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpOworCisgIHVzaW5nIERlcGVuZGVuY3kgPSBzdGQ6OnBhaXI8RGVwZW5kZW5jeVR5cGUsIGNtTGlua0l0ZW0+OworICB1c2luZyBEZXBlbmRlbmN5TWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIERlcGVuZGVuY3k+OworCisgIGJvb2wgSXRlbVZpc2l0ZWQoY21MaW5rSXRlbSBjb25zdCYgaXRlbSk7CisgIGJvb2wgTGlua1Zpc2l0ZWQoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlKTsKKworICBzdGF0aWMgdm9pZCBHZXREZXBlbmRlbmNpZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRlbmN5TWFwJiBkZXBlbmRlbmNpZXMpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21MaW5rTGlicmFyaWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21MaW5rTGlicmFyaWVzQ29tbWFuZC5jeHgKaW5kZXggY2I2M2NlYi4uMmI4ZjgzNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTGlua0xpYnJhcmllc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUxpbmtMaWJyYXJpZXNDb21tYW5kLmN4eApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgfQogICAgICAgbWYuQXBwZW5kUHJvcGVydHkoIkxJTktfTElCUkFSSUVTIiwgIm9wdGltaXplZCIpOwogICAgIH0KLSAgICBtZi5BcHBlbmRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiLCBpLT5jX3N0cigpKTsKKyAgICBtZi5BcHBlbmRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiLCAqaSk7CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpbmtMaW5lQ29tcHV0ZXIuY3h4IGIvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5jeHgKaW5kZXggM2ZjNDFjZi4uNDgwYzAwNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5jeHgKKysrIGIvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5jeHgKQEAgLTIyLDYgKzIyLDcgQEAKICAgLCBPdXRwdXRDb252ZXJ0ZXIob3V0cHV0Q29udmVydGVyKQogICAsIEZvclJlc3BvbnNlKGZhbHNlKQogICAsIFVzZVdhdGNvbVF1b3RlKGZhbHNlKQorICAsIFVzZU5pbmphTXVsdGkoZmFsc2UpCiAgICwgUmVsaW5rKGZhbHNlKQogewogfQpAQCAtMzMsNiArMzQsMTEgQEAKICAgdGhpcy0+VXNlV2F0Y29tUXVvdGUgPSB1c2VXYXRjb21RdW90ZTsKIH0KIAordm9pZCBjbUxpbmtMaW5lQ29tcHV0ZXI6OlNldFVzZU5pbmphTXVsdGkoYm9vbCB1c2VOaW5qYU11bHRpKQoreworICB0aGlzLT5Vc2VOaW5qYU11bHRpID0gdXNlTmluamFNdWx0aTsKK30KKwogdm9pZCBjbUxpbmtMaW5lQ29tcHV0ZXI6OlNldEZvclJlc3BvbnNlKGJvb2wgZm9yUmVzcG9uc2UpCiB7CiAgIHRoaXMtPkZvclJlc3BvbnNlID0gZm9yUmVzcG9uc2U7CkBAIC05MiwxMCArOTgsMTQgQEAKIAogc3RkOjpzdHJpbmcgY21MaW5rTGluZUNvbXB1dGVyOjpDb252ZXJ0VG9PdXRwdXRGb3JtYXQoc3RkOjpzdHJpbmcgY29uc3QmIGlucHV0KQogewotICBjbU91dHB1dENvbnZlcnRlcjo6T3V0cHV0Rm9ybWF0IHNoZWxsRm9ybWF0ID0gKHRoaXMtPkZvclJlc3BvbnNlKQotICAgID8gY21PdXRwdXRDb252ZXJ0ZXI6OlJFU1BPTlNFCi0gICAgOiAoKHRoaXMtPlVzZVdhdGNvbVF1b3RlKSA/IGNtT3V0cHV0Q29udmVydGVyOjpXQVRDT01RVU9URQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICBjbU91dHB1dENvbnZlcnRlcjo6T3V0cHV0Rm9ybWF0IHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMOworICBpZiAodGhpcy0+Rm9yUmVzcG9uc2UpIHsKKyAgICBzaGVsbEZvcm1hdCA9IGNtT3V0cHV0Q29udmVydGVyOjpSRVNQT05TRTsKKyAgfSBlbHNlIGlmICh0aGlzLT5Vc2VXYXRjb21RdW90ZSkgeworICAgIHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6OldBVENPTVFVT1RFOworICB9IGVsc2UgaWYgKHRoaXMtPlVzZU5pbmphTXVsdGkpIHsKKyAgICBzaGVsbEZvcm1hdCA9IGNtT3V0cHV0Q29udmVydGVyOjpOSU5KQU1VTFRJOworICB9CiAKICAgcmV0dXJuIHRoaXMtPk91dHB1dENvbnZlcnRlci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGlucHV0LCBzaGVsbEZvcm1hdCk7CiB9CkBAIC0xMDMsMTAgKzExMywxNCBAQAogc3RkOjpzdHJpbmcgY21MaW5rTGluZUNvbXB1dGVyOjpDb252ZXJ0VG9PdXRwdXRGb3JFeGlzdGluZygKICAgc3RkOjpzdHJpbmcgY29uc3QmIGlucHV0KQogewotICBjbU91dHB1dENvbnZlcnRlcjo6T3V0cHV0Rm9ybWF0IHNoZWxsRm9ybWF0ID0gKHRoaXMtPkZvclJlc3BvbnNlKQotICAgID8gY21PdXRwdXRDb252ZXJ0ZXI6OlJFU1BPTlNFCi0gICAgOiAoKHRoaXMtPlVzZVdhdGNvbVF1b3RlKSA/IGNtT3V0cHV0Q29udmVydGVyOjpXQVRDT01RVU9URQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICBjbU91dHB1dENvbnZlcnRlcjo6T3V0cHV0Rm9ybWF0IHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMOworICBpZiAodGhpcy0+Rm9yUmVzcG9uc2UpIHsKKyAgICBzaGVsbEZvcm1hdCA9IGNtT3V0cHV0Q29udmVydGVyOjpSRVNQT05TRTsKKyAgfSBlbHNlIGlmICh0aGlzLT5Vc2VXYXRjb21RdW90ZSkgeworICAgIHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6OldBVENPTVFVT1RFOworICB9IGVsc2UgaWYgKHRoaXMtPlVzZU5pbmphTXVsdGkpIHsKKyAgICBzaGVsbEZvcm1hdCA9IGNtT3V0cHV0Q29udmVydGVyOjpOSU5KQU1VTFRJOworICB9CiAKICAgcmV0dXJuIHRoaXMtPk91dHB1dENvbnZlcnRlci0+Q29udmVydFRvT3V0cHV0Rm9yRXhpc3RpbmcoaW5wdXQsIHNoZWxsRm9ybWF0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpbmtMaW5lQ29tcHV0ZXIuaCBiL1NvdXJjZS9jbUxpbmtMaW5lQ29tcHV0ZXIuaAppbmRleCBmNDI2OTc2Li5kZjQyNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaW5rTGluZUNvbXB1dGVyLmgKKysrIGIvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAgIGNtTGlua0xpbmVDb21wdXRlciYgb3BlcmF0b3I9KGNtTGlua0xpbmVDb21wdXRlciBjb25zdCYpID0gZGVsZXRlOwogCiAgIHZvaWQgU2V0VXNlV2F0Y29tUXVvdGUoYm9vbCB1c2VXYXRjb21RdW90ZSk7CisgIHZvaWQgU2V0VXNlTmluamFNdWx0aShib29sIHVzZU5pbmphTXVsdGkpOwogICB2b2lkIFNldEZvclJlc3BvbnNlKGJvb2wgZm9yUmVzcG9uc2UpOwogICB2b2lkIFNldFJlbGluayhib29sIHJlbGluayk7CiAKQEAgLTY5LDYgKzcwLDcgQEAKIAogICBib29sIEZvclJlc3BvbnNlOwogICBib29sIFVzZVdhdGNvbVF1b3RlOworICBib29sIFVzZU5pbmphTXVsdGk7CiAgIGJvb2wgUmVsaW5rOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlzdEZpbGVDYWNoZS5jeHggYi9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eAppbmRleCA0NzY3OWM5Li43ZWJiMDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eAorKysgYi9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eApAQCAtMjYsMTMgKzI2LDE1IEBACiBzdHJ1Y3QgY21MaXN0RmlsZVBhcnNlcgogewogICBjbUxpc3RGaWxlUGFyc2VyKGNtTGlzdEZpbGUqIGxmLCBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQsCi0gICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwgY29uc3QgY2hhciogZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpOwogICB+Y21MaXN0RmlsZVBhcnNlcigpOwogICBjbUxpc3RGaWxlUGFyc2VyKGNvbnN0IGNtTGlzdEZpbGVQYXJzZXImKSA9IGRlbGV0ZTsKICAgY21MaXN0RmlsZVBhcnNlciYgb3BlcmF0b3I9KGNvbnN0IGNtTGlzdEZpbGVQYXJzZXImKSA9IGRlbGV0ZTsKICAgdm9pZCBJc3N1ZUZpbGVPcGVuRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwogICB2b2lkIElzc3VlRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwotICBib29sIFBhcnNlRmlsZSgpOworICBib29sIFBhcnNlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSk7CisgIGJvb2wgUGFyc2VTdHJpbmcoY29uc3QgY2hhciogc3RyLCBjb25zdCBjaGFyKiB2aXJ0dWFsX2ZpbGVuYW1lKTsKKyAgYm9vbCBQYXJzZSgpOwogICBib29sIFBhcnNlRnVuY3Rpb24oY29uc3QgY2hhciogbmFtZSwgbG9uZyBsaW5lKTsKICAgYm9vbCBBZGRBcmd1bWVudChjbUxpc3RGaWxlTGV4ZXJfVG9rZW4qIHRva2VuLAogICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVBcmd1bWVudDo6RGVsaW1pdGVyIGRlbGltKTsKQEAgLTUxLDEyICs1MywxMSBAQAogfTsKIAogY21MaXN0RmlsZVBhcnNlcjo6Y21MaXN0RmlsZVBhcnNlcihjbUxpc3RGaWxlKiBsZiwgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlcikKICAgOiBMaXN0RmlsZShsZikKICAgLCBCYWNrdHJhY2Uoc3RkOjptb3ZlKGxmYnQpKQogICAsIE1lc3NlbmdlcihtZXNzZW5nZXIpCi0gICwgRmlsZU5hbWUoZmlsZW5hbWUpCisgICwgRmlsZU5hbWUobnVsbHB0cikKICAgLCBMZXhlcihjbUxpc3RGaWxlTGV4ZXJfTmV3KCkpCiB7CiB9CkBAIC04Myw4ICs4NCwxMCBAQAogICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOwogfQogCi1ib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlRmlsZSgpCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKIHsKKyAgdGhpcy0+RmlsZU5hbWUgPSBmaWxlbmFtZTsKKwogICAvLyBPcGVuIHRoZSBmaWxlLgogICBjbUxpc3RGaWxlTGV4ZXJfQk9NIGJvbTsKICAgaWYgKCFjbUxpc3RGaWxlTGV4ZXJfU2V0RmlsZU5hbWUodGhpcy0+TGV4ZXIsIHRoaXMtPkZpbGVOYW1lLCAmYm9tKSkgewpAQCAtMTA3LDYgKzExMCwyNCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIHJldHVybiBQYXJzZSgpOworfQorCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSkKK3sKKyAgdGhpcy0+RmlsZU5hbWUgPSB2aXJ0dWFsX2ZpbGVuYW1lOworCisgIGlmICghY21MaXN0RmlsZUxleGVyX1NldFN0cmluZyh0aGlzLT5MZXhlciwgc3RyKSkgeworICAgIHRoaXMtPklzc3VlRmlsZU9wZW5FcnJvcigiY21MaXN0RmlsZUNhY2hlOiBjYW5ub3QgYWxsb2NhdGUgYnVmZmVyLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiBQYXJzZSgpOworfQorCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlKCkKK3sKICAgLy8gVXNlIGEgc2ltcGxlIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlciB0byBwcm9jZXNzIHRoZSB0b2tlbgogICAvLyBzdHJlYW0uCiAgIGJvb2wgaGF2ZU5ld2xpbmUgPSB0cnVlOwpAQCAtMTU1LDggKzE3NiwyMiBAQAogICBib29sIHBhcnNlRXJyb3IgPSBmYWxzZTsKIAogICB7Ci0gICAgY21MaXN0RmlsZVBhcnNlciBwYXJzZXIodGhpcywgbGZidCwgbWVzc2VuZ2VyLCBmaWxlbmFtZSk7Ci0gICAgcGFyc2VFcnJvciA9ICFwYXJzZXIuUGFyc2VGaWxlKCk7CisgICAgY21MaXN0RmlsZVBhcnNlciBwYXJzZXIodGhpcywgbGZidCwgbWVzc2VuZ2VyKTsKKyAgICBwYXJzZUVycm9yID0gIXBhcnNlci5QYXJzZUZpbGUoZmlsZW5hbWUpOworICB9CisKKyAgcmV0dXJuICFwYXJzZUVycm9yOworfQorCitib29sIGNtTGlzdEZpbGU6OlBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkKK3sKKyAgYm9vbCBwYXJzZUVycm9yID0gZmFsc2U7CisKKyAgeworICAgIGNtTGlzdEZpbGVQYXJzZXIgcGFyc2VyKHRoaXMsIGxmYnQsIG1lc3Nlbmdlcik7CisgICAgcGFyc2VFcnJvciA9ICFwYXJzZXIuUGFyc2VTdHJpbmcoc3RyLCB2aXJ0dWFsX2ZpbGVuYW1lKTsKICAgfQogCiAgIHJldHVybiAhcGFyc2VFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpc3RGaWxlQ2FjaGUuaCBiL1NvdXJjZS9jbUxpc3RGaWxlQ2FjaGUuaAppbmRleCA5Y2FlODI3Li44OTkwMmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmgKKysrIGIvU291cmNlL2NtTGlzdEZpbGVDYWNoZS5oCkBAIC0xODQsNiArMTg0LDkgQEAKICAgYm9vbCBQYXJzZUZpbGUoY29uc3QgY2hhciogcGF0aCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgbGZidCk7CiAKKyAgYm9vbCBQYXJzZVN0cmluZyhjb25zdCBjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIHZpcnR1YWxfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgbGZidCk7CisKICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUZ1bmN0aW9uPiBGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2FkQ2FjaGVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUxvYWRDYWNoZUNvbW1hbmQuY3h4CmluZGV4IDExODRiY2IuLmQ0OWU3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvYWRDYWNoZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUxvYWRDYWNoZUNvbW1hbmQuY3h4CkBAIC0yNCwxMiArMjQsMjAgQEAKIHsKICAgaWYgKGFyZ3MuZW1wdHkoKSkgewogICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiBhcmdzWzFdID09ICJSRUFEX1dJVEhfUFJFRklYIikgewogICAgIHJldHVybiBSZWFkV2l0aFByZWZpeChhcmdzLCBzdGF0dXMpOwogICB9CiAKKyAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0V29ya2luZ01vZGUoKSA9PQorICAgICAgY21ha2U6OlNDUklQVF9NT0RFKSB7CisgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgIk9ubHkgbG9hZF9jYWNoZShSRUFEX1dJVEhfUFJFRklYKSBtYXkgYmUgdXNlZCBpbiBzY3JpcHQgbW9kZSIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIC8vIENhY2hlIGVudHJpZXMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUgaW1wb3J0IGxpc3QuCiAgIC8vIElmIHRoaXMgc2V0IGlzIGVtcHR5LCBhbGwgY2FjaGUgZW50cmllcyBhcmUgYnJvdWdodCBpbgogICAvLyBhbmQgdGhleSBjYW4gbm90IGJlIG92ZXJyaWRkZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2FkQ29tbWFuZENvbW1hbmQuY3h4IGIvU291cmNlL2NtTG9hZENvbW1hbmRDb21tYW5kLmN4eAppbmRleCAyM2FjZTY0Li41NzkwZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2FkQ29tbWFuZENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUxvYWRDb21tYW5kQ29tbWFuZC5jeHgKQEAgLTEsNSArMSwxNSBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8vIFBPU0lYIEFQSXMgYXJlIG5lZWRlZAorIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisvLyBGb3IgaXNhc2NpaQorIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNzAwCisjZW5kaWYKKwogI2luY2x1ZGUgImNtTG9hZENvbW1hbmRDb21tYW5kLmgiCiAKICNpbmNsdWRlIDxjc2lnbmFsPgpAQCAtMTQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNtQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtRHluYW1pY0xvYWRlci5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0yNSw2ICszNiw4IEBACiAjICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogZm9yIG1hbGxvYy9mcmVlIG9uIFFOWCAqLwogI2VuZGlmCiAKK2NsYXNzIGNtTGlzdEZpbGVCYWNrdHJhY2U7CisKIG5hbWVzcGFjZSB7CiAKIGNvbnN0IGNoYXIqIExhc3ROYW1lID0gbnVsbHB0cjsKQEAgLTE1OCw4ICsxNzEsMTAgQEAKICAgaWYgKHJlc3VsdCkgewogICAgIGlmICh0aGlzLT5JbXBsLT5GaW5hbFBhc3MpIHsKICAgICAgIGF1dG8gaW1wbCA9IHRoaXMtPkltcGw7Ci0gICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkRmluYWxBY3Rpb24oCi0gICAgICAgIFtpbXBsXShjbU1ha2VmaWxlJiBtYWtlZmlsZSkgeyBpbXBsLT5Eb0ZpbmFsUGFzcygmbWFrZWZpbGUpOyB9KTsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRHZW5lcmF0b3JBY3Rpb24oCisgICAgICAgIFtpbXBsXShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYpIHsKKyAgICAgICAgICBpbXBsLT5Eb0ZpbmFsUGFzcyhsZy5HZXRNYWtlZmlsZSgpKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5jeHgKaW5kZXggZjg2OTU1ZC4uMjc4ZWM4YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxDb21tb25HZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmN4eApAQCAtMTcsMTMgKzE3LDkgQEAKICAgOiBjbUxvY2FsR2VuZXJhdG9yKGdnLCBtZikKICAgLCBXb3JraW5nRGlyZWN0b3J5KHN0ZDo6bW92ZSh3ZCkpCiB7Ci0gIC8vIFN0b3JlIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZC4KLSAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIikpIHsKLSAgICAvLyBVc2UgdGhlIGJ1aWxkIHR5cGUgZ2l2ZW4gYnkgdGhlIHVzZXIuCi0gICAgdGhpcy0+Q29uZmlnTmFtZSA9IGNvbmZpZzsKLSAgfSBlbHNlIHsKLSAgICAvLyBObyBjb25maWd1cmF0aW9uIHR5cGUgZ2l2ZW4uCi0gICAgdGhpcy0+Q29uZmlnTmFtZS5jbGVhcigpOworICB0aGlzLT5NYWtlZmlsZS0+R2V0Q29uZmlndXJhdGlvbnModGhpcy0+Q29uZmlnTmFtZXMpOworICBpZiAodGhpcy0+Q29uZmlnTmFtZXMuZW1wdHkoKSkgeworICAgIHRoaXMtPkNvbmZpZ05hbWVzLmVtcGxhY2VfYmFjaygpOwogICB9CiB9CiAKQEAgLTU0LDYgKzUwLDE1IEBACiAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UmVxdWlyZWREZWZpbml0aW9uKCJDTUFLRV9Gb3J0cmFuX01PRERJUl9GTEFHIiksCiAgICAgICBtb2RfZGlyKTsKICAgICB0aGlzLT5BcHBlbmRGbGFncyhmbGFncywgbW9kZmxhZyk7CisgICAgLy8gU29tZSBjb21waWxlcnMgZG8gbm90IHNlYXJjaCB0aGVpciBvd24gbW9kdWxlIG91dHB1dCBkaXJlY3RvcnkKKyAgICAvLyBmb3IgdXNpbmcgb3RoZXIgbW9kdWxlcy4gIEFkZCBhbiBpbmNsdWRlIGRpcmVjdG9yeSBleHBsaWNpdGx5CisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggY29tcGlsZXJzIHRoYXQgZG8gc2VhcmNoIGl0LgorICAgIHN0ZDo6c3RyaW5nIGluY2ZsYWcgPQorICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9Gb3J0cmFuX01PRERJUl9JTkNMVURFX0ZMQUciKTsKKyAgICBpZiAoIWluY2ZsYWcuZW1wdHkoKSkgeworICAgICAgaW5jZmxhZyA9IGNtU3RyQ2F0KGluY2ZsYWcsIG1vZF9kaXIpOworICAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIGluY2ZsYWcpOworICAgIH0KICAgfQogCiAgIC8vIElmIHRoZXJlIGlzIGEgc2VwYXJhdGUgbW9kdWxlIHBhdGggZmxhZyB0aGVuIGR1cGxpY2F0ZSB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5oCmluZGV4IGVhZWY2YWIuLjM3OGNhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTG9jYWxDb21tb25HZW5lcmF0b3IuaApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogCkBAIC0yNSw3ICsyNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHdkKTsKICAgfmNtTG9jYWxDb21tb25HZW5lcmF0b3IoKSBvdmVycmlkZTsKIAotICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0Q29uZmlnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkNvbmZpZ05hbWU7IH0KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBHZXRDb25maWdOYW1lcygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gdGhpcy0+Q29uZmlnTmFtZXM7CisgIH0KIAogICBzdGQ6OnN0cmluZyBHZXRXb3JraW5nRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+V29ya2luZ0RpcmVjdG9yeTsgfQogCkBAIC0zOSw3ICs0Myw3IEBACiBwcm90ZWN0ZWQ6CiAgIHN0ZDo6c3RyaW5nIFdvcmtpbmdEaXJlY3Rvcnk7CiAKLSAgc3RkOjpzdHJpbmcgQ29uZmlnTmFtZTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbmZpZ05hbWVzOwogCiAgIGZyaWVuZCBjbGFzcyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5jeHgKaW5kZXggYWY5MmUxYi4uMGE3OGFmNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmN4eApAQCAtMiw2ICsyLDIyIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgpAQCAtNDAsMjAgKzU2LDYgQEAKICMgIGluY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KICNpZiBkZWZpbmVkKF9fSEFJS1VfXykKICMgIGluY2x1ZGUgPEZpbmREaXJlY3RvcnkuaD4KICMgIGluY2x1ZGUgPFN0b3JhZ2VEZWZzLmg+CkBAIC0xODEsMTEgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5MaW5rZXJTeXNyb290KTsKIH0KIAotY21Mb2NhbEdlbmVyYXRvcjo6fmNtTG9jYWxHZW5lcmF0b3IoKQotewotICBjbURlbGV0ZUFsbCh0aGlzLT5HZW5lcmF0b3JUYXJnZXRzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+T3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldHMpOwotfQorY21Mb2NhbEdlbmVyYXRvcjo6fmNtTG9jYWxHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlIHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCkgY29uc3QKQEAgLTI2Myw4ICsyNjEsOCBAQAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpUcmFjZURlcGVuZGVuY2llcygpCiB7CiAgIC8vIEdlbmVyYXRlIHRoZSBydWxlIGZpbGVzIGZvciBlYWNoIHRhcmdldC4KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICBjb25zdCBhdXRvJiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQpAQCAtMjkwLDIxICsyODgsMjMgQEAKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZvdXQoZmlsZSk7CiAgIGZvdXQuU2V0Q29weUlmRGlmZmVyZW50KHRydWUpOwogCi0gIGZvdXQgPDwgIiMgQ01ha2UgZ2VuZXJhdGVkIFRlc3RmaWxlIGZvciAiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIFNvdXJjZSBkaXJlY3Rvcnk6ICIKLSAgICAgICA8PCB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyBCdWlsZCBkaXJlY3Rvcnk6ICIKLSAgICAgICA8PCB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRCaW5hcnkoKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyAiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcmVsZXZhbnQgdGVzdGluZyBjb21tYW5kcyAiCi0gICAgICAgPDwgInJlcXVpcmVkIGZvciAiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIHRlc3RpbmcgdGhpcyBkaXJlY3RvcnkgYW5kIGxpc3RzIHN1YmRpcmVjdG9yaWVzIHRvICIKLSAgICAgICA8PCAiYmUgdGVzdGVkIGFzIHdlbGwuIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIiMgQ01ha2UgZ2VuZXJhdGVkIFRlc3RmaWxlIGZvciBcbiIKKyAgICAgICAgICAiIyBTb3VyY2UgZGlyZWN0b3J5OiAiCisgICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkKKyAgICAgICA8PCAiXG4iCisgICAgICAgICAgIiMgQnVpbGQgZGlyZWN0b3J5OiAiCisgICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50QmluYXJ5KCkKKyAgICAgICA8PCAiXG4iCisgICAgICAgICAgIiMgXG4iCisgICAgICAgICAgIiMgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSByZWxldmFudCB0ZXN0aW5nIGNvbW1hbmRzICIKKyAgICAgICAgICAicmVxdWlyZWQgZm9yIFxuIgorICAgICAgICAgICIjIHRlc3RpbmcgdGhpcyBkaXJlY3RvcnkgYW5kIGxpc3RzIHN1YmRpcmVjdG9yaWVzIHRvICIKKyAgICAgICAgICAiYmUgdGVzdGVkIGFzIHdlbGwuXG4iOwogCiAgIGNvbnN0IGNoYXIqIHRlc3RJbmNsdWRlRmlsZSA9CiAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJURVNUX0lOQ0xVREVfRklMRSIpOwogICBpZiAodGVzdEluY2x1ZGVGaWxlKSB7Ci0gICAgZm91dCA8PCAiaW5jbHVkZShcIiIgPDwgdGVzdEluY2x1ZGVGaWxlIDw8ICJcIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICJpbmNsdWRlKFwiIiA8PCB0ZXN0SW5jbHVkZUZpbGUgPDwgIlwiKVxuIjsKICAgfQogCiAgIGNvbnN0IGNoYXIqIHRlc3RJbmNsdWRlRmlsZXMgPQpAQCAtMzEyLDE0ICszMTIsMTIgQEAKICAgaWYgKHRlc3RJbmNsdWRlRmlsZXMpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZXNMaXN0ID0gY21FeHBhbmRlZExpc3QodGVzdEluY2x1ZGVGaWxlcyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGluY2x1ZGVzTGlzdCkgewotICAgICAgZm91dCA8PCAiaW5jbHVkZShcIiIgPDwgaSA8PCAiXCIpIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICJpbmNsdWRlKFwiIiA8PCBpIDw8ICJcIilcbiI7CiAgICAgfQogICB9CiAKICAgLy8gQXNrIGVhY2ggdGVzdCBnZW5lcmF0b3IgdG8gd3JpdGUgaXRzIGNvZGUuCi0gIHN0ZDo6dmVjdG9yPGNtVGVzdEdlbmVyYXRvcio+IGNvbnN0JiB0ZXN0ZXJzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0VGVzdEdlbmVyYXRvcnMoKTsKLSAgZm9yIChjbVRlc3RHZW5lcmF0b3IqIHRlc3RlciA6IHRlc3RlcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0ZXN0ZXIgOiB0aGlzLT5NYWtlZmlsZS0+R2V0VGVzdEdlbmVyYXRvcnMoKSkgewogICAgIHRlc3Rlci0+Q29tcHV0ZSh0aGlzKTsKICAgICB0ZXN0ZXItPkdlbmVyYXRlKGZvdXQsIGNvbmZpZywgY29uZmlndXJhdGlvblR5cGVzKTsKICAgfQpAQCAtMzMxLDcgKzMyOSw3IEBACiAgICAgc3RkOjpzdHJpbmcgb3V0UCA9IGkuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpOwogICAgIG91dFAgPSB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChwYXJlbnRCaW5EaXIsIG91dFApOwogICAgIG91dFAgPSBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2Uob3V0UCk7Ci0gICAgZm91dCA8PCAic3ViZGlycygiIDw8IG91dFAgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICJzdWJkaXJzKCIgPDwgb3V0UCA8PCAiKVxuIjsKICAgfQogCiAgIC8vIEFkZCBkaXJlY3RvcnkgbGFiZWxzIHByb3BlcnR5CkBAIC0zNTAsNyArMzQ4LDcgQEAKICAgICBpZiAoZGlyZWN0b3J5TGFiZWxzKSB7CiAgICAgICBmb3V0IDw8IGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZShkaXJlY3RvcnlMYWJlbHMpOwogICAgIH0KLSAgICBmb3V0IDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiKVxuIjsKICAgfQogfQogCkBAIC0zNjUsOSArMzYzLDcgQEAKIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpDcmVhdGVFdmFsdWF0aW9uRmlsZU91dHB1dHMoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykKIHsKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqPiBlZiA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldEV2YWx1YXRpb25GaWxlcygpOwotICBmb3IgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlKiBnZWVmIDogZWYpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBnZWVmIDogdGhpcy0+TWFrZWZpbGUtPkdldEV2YWx1YXRpb25GaWxlcygpKSB7CiAgICAgZ2VlZi0+Q3JlYXRlT3V0cHV0RmlsZSh0aGlzLCBjb25maWcpOwogICB9CiB9CkBAIC0zNzUsOCArMzcxLDcgQEAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6UHJvY2Vzc0V2YWx1YXRpb25GaWxlcygKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBnZW5lcmF0ZWRGaWxlcykKIHsKLSAgZm9yIChjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZSogZ2VlZiA6Ci0gICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldEV2YWx1YXRpb25GaWxlcygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ2VlZiA6IHRoaXMtPk1ha2VmaWxlLT5HZXRFdmFsdWF0aW9uRmlsZXMoKSkgewogICAgIGdlZWYtPkdlbmVyYXRlKHRoaXMpOwogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7CiAgICAgICByZXR1cm47CkBAIC0zOTUsNyArMzkwLDcgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjbUFwcGVuZChnZW5lcmF0ZWRGaWxlcywgZmlsZXMpOworICAgIGNtOjphcHBlbmQoZ2VuZXJhdGVkRmlsZXMsIGZpbGVzKTsKICAgICBzdGQ6OmlucGxhY2VfbWVyZ2UoZ2VuZXJhdGVkRmlsZXMuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkRmlsZXMuZW5kKCkgLSBmaWxlcy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZEZpbGVzLmVuZCgpKTsKQEAgLTQ3NCwxNiArNDY5LDE3IEBACiAgIGZvdXQuU2V0Q29weUlmRGlmZmVyZW50KHRydWUpOwogCiAgIC8vIFdyaXRlIHRoZSBoZWFkZXIuCisgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgZm91dCA8PCAiIyBJbnN0YWxsIHNjcmlwdCBmb3IgZGlyZWN0b3J5OiAiCi0gICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgc3RkOjplbmRsOwotICBmb3V0IDw8ICIjIFNldCB0aGUgaW5zdGFsbCBwcmVmaXgiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICJpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX1BSRUZJWCkiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIgIHNldChDTUFLRV9JTlNUQUxMX1BSRUZJWCBcIiIgPDwgcHJlZml4IDw8ICJcIikiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICJlbmRpZigpIiA8PCBzdGQ6OmVuZGwKKyAgICAgICA8PCB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKQorICAgICAgIDw8ICJcblxuIgorICAgICAgICAgICIjIFNldCB0aGUgaW5zdGFsbCBwcmVmaXhcbiIKKyAgICAgICAgICAiaWYoTk9UIERFRklORUQgQ01BS0VfSU5TVEFMTF9QUkVGSVgpXG4iCisgICAgICAgICAgIiAgc2V0KENNQUtFX0lOU1RBTExfUFJFRklYIFwiIiA8PCBwcmVmaXggPDwgIlwiKVxuIgorICAgICAgICAgICJlbmRpZigpXG4iCiAgICAgICAgPDwgUiIoc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi8kIiAiIiBDTUFLRV9JTlNUQUxMX1BSRUZJWCApIgotICAgICAgIDw8ICJcIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9XCIpIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgPDwgIlwiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH1cIilcblxuIjsKKyAgLyogY2xhbmctZm9ybWF0IG9uICovCiAKICAgLy8gV3JpdGUgc3VwcG9ydCBjb2RlIGZvciBnZW5lcmF0aW5nIHBlci1jb25maWd1cmF0aW9uIGluc3RhbGwgcnVsZXMuCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KQEAgLTU1OSwxOCArNTU1LDE3IEBACiAKICAgLy8gQXNrIGVhY2ggaW5zdGFsbCBnZW5lcmF0b3IgdG8gd3JpdGUgaXRzIGNvZGUuCiAgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBzdGF0dXMgPSB0aGlzLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA4Mik7Ci0gIHN0ZDo6dmVjdG9yPGNtSW5zdGFsbEdlbmVyYXRvcio+IGNvbnN0JiBpbnN0YWxsZXJzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKTsKKyAgYXV0byBjb25zdCYgaW5zdGFsbGVycyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpOwogICBib29sIGhhdmVTdWJkaXJlY3RvcnlJbnN0YWxsID0gZmFsc2U7CiAgIGJvb2wgaGF2ZUluc3RhbGxBZnRlclN1YmRpcmVjdG9yeSA9IGZhbHNlOwogICBpZiAoc3RhdHVzID09IGNtUG9saWNpZXM6OldBUk4pIHsKLSAgICBmb3IgKGNtSW5zdGFsbEdlbmVyYXRvciogaW5zdGFsbGVyIDogaW5zdGFsbGVycykgeworICAgIGZvciAoY29uc3QgYXV0byYgaW5zdGFsbGVyIDogaW5zdGFsbGVycykgewogICAgICAgaW5zdGFsbGVyLT5DaGVja0NNUDAwODIoaGF2ZVN1YmRpcmVjdG9yeUluc3RhbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlSW5zdGFsbEFmdGVyU3ViZGlyZWN0b3J5KTsKICAgICAgIGluc3RhbGxlci0+R2VuZXJhdGUoZm91dCwgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBmb3IgKGNtSW5zdGFsbEdlbmVyYXRvciogaW5zdGFsbGVyIDogaW5zdGFsbGVycykgeworICAgIGZvciAoY29uc3QgYXV0byYgaW5zdGFsbGVyIDogaW5zdGFsbGVycykgewogICAgICAgaW5zdGFsbGVyLT5HZW5lcmF0ZShmb3V0LCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAgICAgfQogICB9CkBAIC01OTksOCArNTk0LDcgQEAKICAgICAgICAgICBpZiAoIWMuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHlBc0Jvb2woIkVYQ0xVREVfRlJPTV9BTEwiKSkgewogICAgICAgICAgICAgc3RkOjpzdHJpbmcgb2RpciA9IGMuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpOwogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMob2Rpcik7Ci0gICAgICAgICAgICBmb3V0IDw8ICIgIGluY2x1ZGUoXCIiIDw8IG9kaXIgPDwgIi9jbWFrZV9pbnN0YWxsLmNtYWtlXCIpIgotICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICBmb3V0IDw8ICIgIGluY2x1ZGUoXCIiIDw8IG9kaXIgPDwgIi9jbWFrZV9pbnN0YWxsLmNtYWtlXCIpXG4iOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3V0IDw8ICJcbiI7CkBAIC02MzUsMTEgKzYyOSwxNCBAQAogICB9CiB9CiAKLXZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkKK3ZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkR2VuZXJhdG9yVGFyZ2V0KAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ+IGd0KQogewotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXRzLnB1c2hfYmFjayhndCk7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldFNlYXJjaEluZGV4LmVtcGxhY2UoZ3QtPkdldE5hbWUoKSwgZ3QpOwotICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkluZGV4R2VuZXJhdG9yVGFyZ2V0KGd0KTsKKyAgY21HZW5lcmF0b3JUYXJnZXQqIGd0X3B0ciA9IGd0LmdldCgpOworCisgIHRoaXMtPkdlbmVyYXRvclRhcmdldHMucHVzaF9iYWNrKHN0ZDo6bW92ZShndCkpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXRTZWFyY2hJbmRleC5lbXBsYWNlKGd0X3B0ci0+R2V0TmFtZSgpLCBndF9wdHIpOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkluZGV4R2VuZXJhdG9yVGFyZ2V0KGd0X3B0cik7CiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkSW1wb3J0ZWRHZW5lcmF0b3JUYXJnZXQoY21HZW5lcmF0b3JUYXJnZXQqIGd0KQpAQCAtNjQ4LDkgKzY0NSwxMCBAQAogICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkluZGV4R2VuZXJhdG9yVGFyZ2V0KGd0KTsKIH0KIAotdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkKK3ZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkT3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldCgKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0PiBndCkKIHsKLSAgdGhpcy0+T3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldHMucHVzaF9iYWNrKGd0KTsKKyAgdGhpcy0+T3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldHMucHVzaF9iYWNrKHN0ZDo6bW92ZShndCkpOwogfQogCiBjbUdlbmVyYXRvclRhcmdldCogY21Mb2NhbEdlbmVyYXRvcjo6RmluZExvY2FsTm9uQWxpYXNHZW5lcmF0b3JUYXJnZXQoCkBAIC02NzMsOCArNjcxLDggQEAKICAgfQogCiAgIC8vIEFkZCBvdXIgdGFyZ2V0cyB0byB0aGUgbWFuaWZlc3QgZm9yIGVhY2ggY29uZmlndXJhdGlvbi4KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICBjb25zdCBhdXRvJiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQpAQCAtNjk1LDE3ICs2OTMsMTggQEAKIAogICB1c2luZyBMYW5ndWFnZVBhaXIgPSBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjsKICAgc3RkOjp2ZWN0b3I8TGFuZ3VhZ2VQYWlyPiBwYWlyZWRMYW5ndWFnZXN7IHsgIk9CSkMiLCAiQyIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIk9CSkNYWCIsICJDWFgiIH0gfTsKLSAgc3RkOjpzZXQ8TGFuZ3VhZ2VQYWlyPiBvYmpjRW5hYmxlZExhbmd1YWdlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIk9CSkNYWCIsICJDWFgiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJDVURBIiwgIkNYWCIgfSB9OworICBzdGQ6OnNldDxMYW5ndWFnZVBhaXI+IGluZmVycmVkRW5hYmxlZExhbmd1YWdlczsKICAgZm9yIChhdXRvIGNvbnN0JiBsYW5nIDogcGFpcmVkTGFuZ3VhZ2VzKSB7CiAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRMYW5ndWFnZUVuYWJsZWQobGFuZy5maXJzdCkpIHsKLSAgICAgIG9iamNFbmFibGVkTGFuZ3VhZ2VzLmluc2VydChsYW5nKTsKKyAgICAgIGluZmVycmVkRW5hYmxlZExhbmd1YWdlcy5pbnNlcnQobGFuZyk7CiAgICAgfQogICB9CiAKICAgLy8gUHJvY2VzcyBjb21waWxlIGZlYXR1cmVzIG9mIGFsbCB0YXJnZXRzLgotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiBjb25maWdOYW1lcykgewogICAgICAgaWYgKCF0YXJnZXQtPkNvbXB1dGVDb21waWxlRmVhdHVyZXMoYykpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzM4LDEyICs3MzcsMTcgQEAKICAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZy5zZWNvbmQsIHByb3BlcnR5KSkpOwogICAgICAgICB9CiAgICAgICB9OwotICAgICAgZm9yIChhdXRvIGNvbnN0JiBsYW5nIDogb2JqY0VuYWJsZWRMYW5ndWFnZXMpIHsKKyAgICAgIGZvciAoYXV0byBjb25zdCYgbGFuZyA6IHBhaXJlZExhbmd1YWdlcykgewogICAgICAgICBpZiAoY29weVN0YW5kYXJkVG9PYmpMYW5nKGxhbmcpKSB7CiAgICAgICAgICAgY29weVByb3BlcnR5VG9PYmpMYW5nKGxhbmcsICJfU1RBTkRBUkRfUkVRVUlSRUQiKTsKICAgICAgICAgICBjb3B5UHJvcGVydHlUb09iakxhbmcobGFuZywgIl9FWFRFTlNJT05TIik7CiAgICAgICAgIH0KICAgICAgIH0KKyAgICAgIGlmIChjb25zdCBjaGFyKiBzdGFuZGFyZCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNVREFfU1RBTkRBUkQiKSkgeworICAgICAgICBpZiAoc3RkOjpzdHJpbmd7IHN0YW5kYXJkIH0gPT0gIjk4IikgeworICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIsICIwMyIpOworICAgICAgICB9CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTg3NSw3ICs4NzksNyBAQAogICBpZiAoKHNlcFswXSAhPSAnICcpICYmICFmbGFncy5lbXB0eSgpICYmIGZsYWdzLmJhY2soKSA9PSBzZXBbMF0pIHsKICAgICBmbGFncy5iYWNrKCkgPSAnICc7CiAgIH0KLSAgcmV0dXJuIGZsYWdzOworICByZXR1cm4gY21UcmltV2hpdGVzcGFjZShmbGFncyk7CiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkQ29tcGlsZU9wdGlvbnMoc3RkOjpzdHJpbmcmIGZsYWdzLApAQCAtOTQ3LDggKzk1MSw3IEBACiAgICAgICAgIDw8ICJcIi4gICIKICAgICAgICAgICAgIlRoaXMgaXMgbm90IHBlcm1pdHRlZC4gVGhlIENPTVBJTEVfRkVBVFVSRVMgbWF5IG5vdCBib3RoIGRlcGVuZCAiCiAgICAgICAgICAgICJvbiAiCi0gICAgICAgICAgICJhbmQgYmUgZGVwZW5kZWQgb24gYnkgdGhlIGxpbmsgaW1wbGVtZW50YXRpb24uIgotICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICJhbmQgYmUgZGVwZW5kZWQgb24gYnkgdGhlIGxpbmsgaW1wbGVtZW50YXRpb24uXG4iOwogICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTg4LDYgKzk5MSw5MSBAQAogICB9CiB9CiAKK2NtVGFyZ2V0KiBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsCisgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCisgIGJvb2wgdXNlc190ZXJtaW5hbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKKyAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMpCit7CisgIGNtVGFyZ2V0KiB0ID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1c3RvbUNvbW1hbmRUYXJnZXQoCisgICAgdGFyZ2V0LCBvYmpMaWJDb21tYW5kcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlKTsKKyAgaWYgKCF0KSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICBkZXRhaWw6OkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgICAqdGhpcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdCwgYnlwcm9kdWN0cywKKyAgICBkZXBlbmRzLCBjb21tYW5kTGluZXMsIHR5cGUsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIGVzY2FwZU9sZFN0eWxlLAorICAgIHVzZXNfdGVybWluYWwsIGRlcGZpbGUsIGpvYl9wb29sLCBjb21tYW5kX2V4cGFuZF9saXN0cyk7CisKKyAgcmV0dXJuIHQ7Cit9CisKK2NtU291cmNlRmlsZSogY21Mb2NhbEdlbmVyYXRvcjo6QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cHV0LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCisgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSwKKyAgYm9vbCBlc2NhcGVPbGRTdHlsZSwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAorICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKKyAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7CisgIHJldHVybiB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgeyBvdXRwdXQgfSwgbm9fYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBub19pbXBsaWNpdF9kZXBlbmRzLAorICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZ0RpciwgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsCisgICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKK30KKworY21Tb3VyY2VGaWxlKiBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCisgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKKyAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKKyAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAorICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCit7CisgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3V0cHV0LgorICBpZiAob3V0cHV0cy5lbXB0eSgpKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkF0dGVtcHQgdG8gYWRkIGEgY3VzdG9tIHJ1bGUgd2l0aCBubyBvdXRwdXQhIik7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICByZXR1cm4gZGV0YWlsOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgKnRoaXMsIHRoaXMtPkRpcmVjdG9yeUJhY2t0cmFjZSwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIG91dHB1dHMsCisgICAgYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsCisgICAgY29tbWVudCwgd29ya2luZ0RpciwgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsCisgICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKK30KKworY21UYXJnZXQqIGNtTG9jYWxHZW5lcmF0b3I6OkFkZFV0aWxpdHlDb21tYW5kKAorICBjb25zdCBzdGQ6OnN0cmluZyYgdXRpbGl0eU5hbWUsIGJvb2wgZXhjbHVkZUZyb21BbGwsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICBjb25zdCBjaGFyKiBjb21tZW50LCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKK3sKKyAgY21UYXJnZXQqIHRhcmdldCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkFkZE5ld1V0aWxpdHlUYXJnZXQodXRpbGl0eU5hbWUsIGV4Y2x1ZGVGcm9tQWxsKTsKKyAgdGFyZ2V0LT5TZXRJc0dlbmVyYXRvclByb3ZpZGVkKHRydWUpOworCisgIGlmIChjb21tYW5kTGluZXMuZW1wdHkoKSAmJiBkZXBlbmRzLmVtcHR5KCkpIHsKKyAgICByZXR1cm4gdGFyZ2V0OworICB9CisKKyAgZGV0YWlsOjpBZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAqdGhpcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdGFyZ2V0LAorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRVdGlsaXR5T3V0cHV0KHRhcmdldCksIHdvcmtpbmdEaXIsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsCisgICAgY29tbWFuZExpbmVzLCBlc2NhcGVPbGRTdHlsZSwgY29tbWVudCwgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgICAgam9iX3Bvb2wpOworCisgIHJldHVybiB0YXJnZXQ7Cit9CisKIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gY21Mb2NhbEdlbmVyYXRvcjo6R2V0SW5jbHVkZURpcmVjdG9yaWVzSW1wbGljaXQoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLCBib29sIHN0cmlwSW1wbGljaXREaXJzLApAQCAtMTA4NCw3ICsxMTcyLDcgQEAKICAgICB9CiAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW1wRGlyVmVjKSB7Ci0gICAgICBpZiAoaW1wbGljaXRTZXQuaW5zZXJ0KGNtU3lzdGVtVG9vbHM6OkdldFJlYWxQYXRoKGkpKS5zZWNvbmQpIHsKKyAgICAgIGlmIChpbXBsaWNpdFNldC5pbnNlcnQodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRSZWFsUGF0aChpKSkuc2Vjb25kKSB7CiAgICAgICAgIGltcGxpY2l0RGlycy5lbXBsYWNlX2JhY2soaSk7CiAgICAgICB9CiAgICAgfQpAQCAtMTA5NSw3ICsxMTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAmbGFuZ10oc3RkOjpzdHJpbmcgY29uc3QmIGRpcikgewogICAgIHJldHVybiAoCiAgICAgICAvLyBEbyBub3QgZXhjbHVkZSBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3QgaW4gYW4gZXhjbHVkZWQgc2V0LgotICAgICAgKCghY21Db250YWlucyhpbXBsaWNpdFNldCwgY21TeXN0ZW1Ub29sczo6R2V0UmVhbFBhdGgoZGlyKSkpICYmCisgICAgICAoKCFjbUNvbnRhaW5zKGltcGxpY2l0U2V0LCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFJlYWxQYXRoKGRpcikpKSAmJgogICAgICAgICghY21Db250YWlucyhpbXBsaWNpdEV4Y2x1ZGUsIGRpcikpKQogICAgICAgLy8gRG8gbm90IGV4Y2x1ZGUgZW50cmllcyBvZiB0aGUgQ1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgZXZlbiB0aG91Z2gKICAgICAgIC8vIHRoZXkgYXJlIGltcGxpY2l0bHkgc2VhcmNoZWQgYnkgdGhlIGNvbXBpbGVyLiAgVGhleSBhcmUgbWVhbnQgdG8gYmUKQEAgLTEzMDMsOCArMTM5MSw4IEBACiAgICAgICAgICAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogc291cmNlcykgewogICAgICAgICAgICAgaWYgKHNmLT5HZXRFeHRlbnNpb24oKSA9PSAiZGVmIikgewogICAgICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSBkZWZGbGFnOwotICAgICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCkpLCBTSEVMTCk7CisgICAgICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9CisgICAgICAgICAgICAgICAgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHNmLT5SZXNvbHZlRnVsbFBhdGgoKSwgU0hFTEwpOwogICAgICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAiICI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQpAQCAtMTY4NSwyMyArMTc3MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgLy8gT25seSBhZGQgbWFjT1Mgc3BlY2lmaWMgZmxhZ3Mgb24gRGFyd2luIHBsYXRmb3JtcyAobWFjT1MgYW5kIGlPUyk6CisgIC8vIE9ubHkgYWRkIEFwcGxlIHNwZWNpZmljIGZsYWdzIG9uIEFwcGxlIHBsYXRmb3JtcwogICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkFQUExFIikgJiYgdGhpcy0+RW1pdFVuaXZlcnNhbEJpbmFyeUZsYWdzKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyY2hzOwogICAgIHRhcmdldC0+R2V0QXBwbGVBcmNocyhjb25maWcsIGFyY2hzKTsKLSAgICBjb25zdCBjaGFyKiBzeXNyb290ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX09TWF9TWVNST09UIik7Ci0gICAgaWYgKHN5c3Jvb3QgJiYgc3lzcm9vdFswXSA9PSAnLycgJiYgIXN5c3Jvb3RbMV0pIHsKLSAgICAgIHN5c3Jvb3QgPSBudWxscHRyOwotICAgIH0KLSAgICBzdGQ6OnN0cmluZyBzeXNyb290RmxhZ1ZhciA9Ci0gICAgICBzdGQ6OnN0cmluZygiQ01BS0VfIikgKyBsYW5nICsgIl9TWVNST09UX0ZMQUciOwotICAgIGNvbnN0IGNoYXIqIHN5c3Jvb3RGbGFnID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oc3lzcm9vdEZsYWdWYXIpOwotICAgIGNvbnN0IGNoYXIqIGRlcGxveW1lbnRUYXJnZXQgPQotICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCIpOwotICAgIHN0ZDo6c3RyaW5nIGRlcGxveW1lbnRUYXJnZXRGbGFnVmFyID0KLSAgICAgIHN0ZDo6c3RyaW5nKCJDTUFLRV8iKSArIGxhbmcgKyAiX09TWF9ERVBMT1lNRU5UX1RBUkdFVF9GTEFHIjsKLSAgICBjb25zdCBjaGFyKiBkZXBsb3ltZW50VGFyZ2V0RmxhZyA9Ci0gICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihkZXBsb3ltZW50VGFyZ2V0RmxhZ1Zhcik7CiAgICAgaWYgKCFhcmNocy5lbXB0eSgpICYmICFsYW5nLmVtcHR5KCkgJiYKICAgICAgICAgKGxhbmdbMF0gPT0gJ0MnIHx8IGxhbmdbMF0gPT0gJ0YnIHx8IGxhbmdbMF0gPT0gJ08nKSkgewogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJjaCA6IGFyY2hzKSB7CkBAIC0xNzEwLDEzICsxNzg1LDQ0IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHN5c3Jvb3RGbGFnICYmICpzeXNyb290RmxhZyAmJiBzeXNyb290ICYmICpzeXNyb290KSB7Ci0gICAgICBmbGFncyArPSAiICI7Ci0gICAgICBmbGFncyArPSBzeXNyb290RmxhZzsKLSAgICAgIGZsYWdzICs9ICIgIjsKLSAgICAgIGZsYWdzICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChzeXNyb290LCBTSEVMTCk7CisgICAgY29uc3QgY2hhciogc3lzcm9vdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9PU1hfU1lTUk9PVCIpOworICAgIGlmIChzeXNyb290ICYmIHN5c3Jvb3RbMF0gPT0gJy8nICYmICFzeXNyb290WzFdKSB7CisgICAgICBzeXNyb290ID0gbnVsbHB0cjsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgc3lzcm9vdEZsYWdWYXIgPQorICAgICAgc3RkOjpzdHJpbmcoIkNNQUtFXyIpICsgbGFuZyArICJfU1lTUk9PVF9GTEFHIjsKKyAgICBjb25zdCBjaGFyKiBzeXNyb290RmxhZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN5c3Jvb3RGbGFnVmFyKTsKKyAgICBpZiAoc3lzcm9vdEZsYWcgJiYgKnN5c3Jvb3RGbGFnKSB7CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJjaF9zeXNyb290czsKKyAgICAgIGlmIChjb25zdCBjaGFyKiBhcmNoX3N5c3Jvb3RzX3N0ciA9CisgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUyIpKSB7CisgICAgICAgIGNtRXhwYW5kTGlzdChzdGQ6OnN0cmluZyhhcmNoX3N5c3Jvb3RzX3N0ciksIGFyY2hfc3lzcm9vdHMsIHRydWUpOworICAgICAgfQorICAgICAgaWYgKCFhcmNoX3N5c3Jvb3RzLmVtcHR5KCkpIHsKKyAgICAgICAgYXNzZXJ0KGFyY2hfc3lzcm9vdHMuc2l6ZSgpID09IGFyY2hzLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJjaHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICBpZiAoYXJjaF9zeXNyb290c1tpXS5lbXB0eSgpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZmxhZ3MgKz0gIiAtWGFyY2hfIiArIGFyY2hzW2ldICsgIiAiOworICAgICAgICAgIC8vIENvbWJpbmUgc3lzcm9vdCBmbGFnIGFuZCBwYXRoIHRvIHdvcmsgd2l0aCAtWGFyY2gKKyAgICAgICAgICBzdGQ6OnN0cmluZyBhcmNoX3N5c3Jvb3QgPSBzeXNyb290RmxhZyArIGFyY2hfc3lzcm9vdHNbaV07CisgICAgICAgICAgZmxhZ3MgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGFyY2hfc3lzcm9vdCwgU0hFTEwpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHN5c3Jvb3QgJiYgKnN5c3Jvb3QpIHsKKyAgICAgICAgZmxhZ3MgKz0gIiAiOworICAgICAgICBmbGFncyArPSBzeXNyb290RmxhZzsKKyAgICAgICAgZmxhZ3MgKz0gIiAiOworICAgICAgICBmbGFncyArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoc3lzcm9vdCwgU0hFTEwpOworICAgICAgfQogICAgIH0KIAorICAgIGNvbnN0IGNoYXIqIGRlcGxveW1lbnRUYXJnZXQgPQorICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCIpOworICAgIHN0ZDo6c3RyaW5nIGRlcGxveW1lbnRUYXJnZXRGbGFnVmFyID0KKyAgICAgIHN0ZDo6c3RyaW5nKCJDTUFLRV8iKSArIGxhbmcgKyAiX09TWF9ERVBMT1lNRU5UX1RBUkdFVF9GTEFHIjsKKyAgICBjb25zdCBjaGFyKiBkZXBsb3ltZW50VGFyZ2V0RmxhZyA9CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihkZXBsb3ltZW50VGFyZ2V0RmxhZ1Zhcik7CiAgICAgaWYgKGRlcGxveW1lbnRUYXJnZXRGbGFnICYmICpkZXBsb3ltZW50VGFyZ2V0RmxhZyAmJiBkZXBsb3ltZW50VGFyZ2V0ICYmCiAgICAgICAgICpkZXBsb3ltZW50VGFyZ2V0KSB7CiAgICAgICBmbGFncyArPSAiICI7CkBAIC0xODY0LDcgKzE5NzAsOCBAQAogICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgogICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVOS05PV05fTElCUkFSWToKLSAgICAgICAgZGVwID0gdGFyZ2V0LT5HZXRMb2NhdGlvbihjb25maWcpOworICAgICAgICBkZXAgPSB0YXJnZXQtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypyZWFsbmFtZT0qL3RydWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKICAgICAgICAgLy8gQW4gb2JqZWN0IGxpYnJhcnkgaGFzIG5vIHNpbmdsZSBmaWxlIG9uIHdoaWNoIHRvIGRlcGVuZC4KQEAgLTE4OTgsOCArMjAwNSwxNiBAQAogCiAgIC8vIFRyZWF0IHRoZSBuYW1lIGFzIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGluIHdoaWNoIGl0CiAgIC8vIHdhcyBnaXZlbi4KLSAgZGVwID0gY21TdHJDYXQodGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCksICcvJywKLSAgICAgICAgICAgICAgICAgaW5OYW1lKTsKKyAgZGVwID0gY21TdHJDYXQodGhpcy0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAnLycsIGluTmFtZSk7CisKKyAgLy8gSWYgdGhlIGluLXNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0LCBhc3N1bWUgaXQgaW5zdGVhZCBsaXZlcyBpbiB0aGUKKyAgLy8gYmluYXJ5IGRpcmVjdG9yeS4KKyAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGRlcCkpIHsKKyAgICBkZXAgPSBjbVN0ckNhdCh0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICcvJywgaW5OYW1lKTsKKyAgfQorCisgIGRlcCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoZGVwLCB0aGlzLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7CisKICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIwMDQsMTcgKzIxMTksMjIgQEAKICAgICBsYW5nU3RkTWFwWyJPQkpDIl0uZW1wbGFjZV9iYWNrKCI5OSIpOwogICAgIGxhbmdTdGRNYXBbIk9CSkMiXS5lbXBsYWNlX2JhY2soIjkwIik7CiAKKyAgICBsYW5nU3RkTWFwWyJDVURBIl0uZW1wbGFjZV9iYWNrKCIyMCIpOworICAgIGxhbmdTdGRNYXBbIkNVREEiXS5lbXBsYWNlX2JhY2soIjE3Iik7CiAgICAgbGFuZ1N0ZE1hcFsiQ1VEQSJdLmVtcGxhY2VfYmFjaygiMTQiKTsKICAgICBsYW5nU3RkTWFwWyJDVURBIl0uZW1wbGFjZV9iYWNrKCIxMSIpOwotICAgIGxhbmdTdGRNYXBbIkNVREEiXS5lbXBsYWNlX2JhY2soIjk4Iik7CisgICAgbGFuZ1N0ZE1hcFsiQ1VEQSJdLmVtcGxhY2VfYmFjaygiMDMiKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIHN0YW5kYXJkKHN0YW5kYXJkUHJvcCk7Ci0KKyAgaWYgKGxhbmcgPT0gIkNVREEiICYmIHN0YW5kYXJkID09ICI5OCIpIHsKKyAgICBzdGFuZGFyZCA9ICIwMyI7CisgIH0KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzdGRzID0gbGFuZ1N0ZE1hcFtsYW5nXTsKIAogICBhdXRvIHN0ZEl0ID0gc3RkOjpmaW5kKHN0ZHMuYmVnaW4oKSwgc3Rkcy5lbmQoKSwgc3RhbmRhcmQpOwogICBpZiAoc3RkSXQgPT0gc3Rkcy5lbmQoKSkgeworCiAgICAgc3RkOjpzdHJpbmcgZSA9CiAgICAgICBsYW5nICsgIl9TVEFOREFSRCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnIiArIHN0YW5kYXJkICsgIiciOwogICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZSgKQEAgLTIyNzcsNyArMjM5Nyw5IEBACiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkFwcGVuZEZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5ld0ZsYWdzKSBjb25zdAogewotICBpZiAoIW5ld0ZsYWdzLmVtcHR5KCkpIHsKKyAgYm9vbCBhbGxTcGFjZXMgPSBzdGQ6OmFsbF9vZihuZXdGbGFncy5iZWdpbigpLCBuZXdGbGFncy5lbmQoKSwgY21Jc1NwYWNlKTsKKworICBpZiAoIW5ld0ZsYWdzLmVtcHR5KCkgJiYgIWFsbFNwYWNlcykgewogICAgIGlmICghZmxhZ3MuZW1wdHkoKSkgewogICAgICAgZmxhZ3MgKz0gIiAiOwogICAgIH0KQEAgLTIyOTYsMTc0ICsyNDE4LDE3NSBAQAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBcHBlbmRGbGFnRXNjYXBlKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmF3RmxhZykgY29uc3QKIHsKLSAgdGhpcy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIHRoaXMtPkVzY2FwZUZvclNoZWxsKHJhd0ZsYWcpKTsKKyAgdGhpcy0+QXBwZW5kRmxhZ3MoCisgICAgZmxhZ3MsCisgICAgdGhpcy0+RXNjYXBlRm9yU2hlbGwocmF3RmxhZywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdGhpcy0+SXNOaW5qYU11bHRpKCkpKTsKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRQY2hEZXBlbmRlbmNpZXMoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKLSAgLy8gRklYTUU6IEhhbmRsZSBhbGwgY29uZmlndXJhdGlvbnMgaW4gbXVsdGktY29uZmlnIGdlbmVyYXRvcnMuCi0gIHN0ZDo6c3RyaW5nIGNvbmZpZzsKLSAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7Ci0gICAgY29uZmlnID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzTGlzdDsKKyAgc3RkOjpzdHJpbmcgY29uZmlnRGVmYXVsdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzTGlzdCk7CisgIGlmIChjb25maWdzTGlzdC5lbXB0eSgpKSB7CisgICAgY29uZmlnc0xpc3QucHVzaF9iYWNrKGNvbmZpZ0RlZmF1bHQpOwogICB9CiAKLSAgLy8gRklYTUU6IFJlZmFjdG9yIGNvbGxlY3Rpb24gb2Ygc291cmNlcyB0byBub3QgZXZhbHVhdGUgb2JqZWN0IGxpYnJhcmllcy4KLSAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKLSAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjb25maWcpOworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcgOiBjb25maWdzTGlzdCkgeworICAgIC8vIEZJWE1FOiBSZWZhY3RvciBjb2xsZWN0aW9uIG9mIHNvdXJjZXMgdG8gbm90IGV2YWx1YXRlIG9iamVjdCBsaWJyYXJpZXMuCisgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKKyAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIGNvbmZpZyk7CiAKLSAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbGFuZyA6IHsgIkMiLCAiQ1hYIiwgIk9CSkMiLCAiT0JKQ1hYIiB9KSB7Ci0gICAgYXV0byBsYW5nU291cmNlcyA9Ci0gICAgICBzdGQ6OmNvdW50X2lmKHNvdXJjZXMuYmVnaW4oKSwgc291cmNlcy5lbmQoKSwgW2xhbmddKGNtU291cmNlRmlsZSogc2YpIHsKLSAgICAgICAgcmV0dXJuIGxhbmcgPT0gc2YtPkdldExhbmd1YWdlKCkgJiYKLSAgICAgICAgICAhc2YtPkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpOwotICAgICAgfSk7Ci0gICAgaWYgKGxhbmdTb3VyY2VzID09IDApIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9IHRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZyk7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoSGVhZGVyID0gdGFyZ2V0LT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5nKTsKLQotICAgIGlmIChwY2hTb3VyY2UuZW1wdHkoKSB8fCBwY2hIZWFkZXIuZW1wdHkoKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRXh0ZW5zaW9uID0KLSAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOwotCi0gICAgaWYgKHBjaEV4dGVuc2lvbi5lbXB0eSgpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBwY2hSZXVzZUZyb20gPQotICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKTsKLQotICAgIGF1dG8gcGNoX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAotICAgICAgcGNoU291cmNlLCBmYWxzZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7Ci0KLSAgICBpZiAoIXRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1hjb2RlKCkpIHsKLSAgICAgIGlmICghcGNoUmV1c2VGcm9tKSB7Ci0gICAgICAgIHRhcmdldC0+QWRkU291cmNlKHBjaFNvdXJjZSwgdHJ1ZSk7CisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbGFuZyA6IHsgIkMiLCAiQ1hYIiwgIk9CSkMiLCAiT0JKQ1hYIiB9KSB7CisgICAgICBhdXRvIGxhbmdTb3VyY2VzID0gc3RkOjpjb3VudF9pZigKKyAgICAgICAgc291cmNlcy5iZWdpbigpLCBzb3VyY2VzLmVuZCgpLCBbbGFuZ10oY21Tb3VyY2VGaWxlKiBzZikgeworICAgICAgICAgIHJldHVybiBsYW5nID09IHNmLT5HZXRMYW5ndWFnZSgpICYmCisgICAgICAgICAgICAhc2YtPkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpOworICAgICAgICB9KTsKKyAgICAgIGlmIChsYW5nU291cmNlcyA9PSAwKSB7CisgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hGaWxlID0gdGFyZ2V0LT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZyk7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPSB0YXJnZXQtPkdldFBjaFNvdXJjZShjb25maWcsIGxhbmcpOworICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoSGVhZGVyID0gdGFyZ2V0LT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5nKTsKIAotICAgICAgLy8gRXhjbHVkZSB0aGUgcGNoIGZpbGVzIGZyb20gbGlua2luZwotICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9MSU5LX1BDSCIpKSB7CisgICAgICBpZiAocGNoU291cmNlLmVtcHR5KCkgfHwgcGNoSGVhZGVyLmVtcHR5KCkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEV4dGVuc2lvbiA9CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOworCisgICAgICBpZiAocGNoRXh0ZW5zaW9uLmVtcHR5KCkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNvbnN0IGNoYXIqIHBjaFJldXNlRnJvbSA9CisgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlBSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NIik7CisKKyAgICAgIGF1dG8gcGNoX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAorICAgICAgICBwY2hTb3VyY2UsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKKworICAgICAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNYY29kZSgpKSB7CiAgICAgICAgIGlmICghcGNoUmV1c2VGcm9tKSB7Ci0gICAgICAgICAgcGNoX3NmLT5TZXRQcm9wZXJ0eSgiT0JKRUNUX09VVFBVVFMiLCBwY2hGaWxlLmNfc3RyKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGF1dG8gcmV1c2VUYXJnZXQgPQotICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHBjaFJldXNlRnJvbSk7CisgICAgICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UocGNoU291cmNlLCB0cnVlKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QQ0hfQ09QWV9DT01QSUxFX1BEQiIpKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEZpbGUgPSB0YXJnZXQtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5nKTsKIAotICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGRiX3ByZWZpeCA9Ci0gICAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc011bHRpQ29uZmlnKCkKLSAgICAgICAgICAgICAgPyBjbVN0ckNhdCh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENNYWtlQ0ZHSW50RGlyKCksICIvIikKLSAgICAgICAgICAgICAgOiAiIjsKKyAgICAgICAgLy8gRXhjbHVkZSB0aGUgcGNoIGZpbGVzIGZyb20gbGlua2luZworICAgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX0xJTktfUENIIikpIHsKKyAgICAgICAgICBpZiAoIXBjaFJldXNlRnJvbSkgeworICAgICAgICAgICAgcGNoX3NmLT5TZXRQcm9wZXJ0eSgiT0JKRUNUX09VVFBVVFMiLCBwY2hGaWxlLmNfc3RyKCkpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJldXNlVGFyZ2V0ID0KKyAgICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHBjaFJldXNlRnJvbSk7CiAKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRhcmdldF9jb21waWxlX3BkYl9kaXIgPSBjbVN0ckNhdCgKLSAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICIvIiwKLSAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuZGlyLyIpOworICAgICAgICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QQ0hfQ09QWV9DT01QSUxFX1BEQiIpKSB7CiAKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvcHlfc2NyaXB0ID0KLSAgICAgICAgICAgICAgY21TdHJDYXQodGFyZ2V0X2NvbXBpbGVfcGRiX2RpciwgImNvcHlfaWRiX3BkYi5jbWFrZSIpOwotICAgICAgICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZpbGUoY29weV9zY3JpcHQpOworICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwZGJfcHJlZml4ID0KKyAgICAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpCisgICAgICAgICAgICAgICAgPyBjbVN0ckNhdCh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENNYWtlQ0ZHSW50RGlyKCksICIvIikKKyAgICAgICAgICAgICAgICA6ICIiOwogCi0gICAgICAgICAgICBmaWxlIDw8ICIjIENNYWtlIGdlbmVyYXRlZCBmaWxlXG4iOwotICAgICAgICAgICAgZm9yIChhdXRvIGV4dGVuc2lvbiA6IHsgIi5wZGIiLCAiLmlkYiIgfSkgewotICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmcm9tX2ZpbGUgPSBjbVN0ckNhdCgKLSAgICAgICAgICAgICAgICByZXVzZVRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAotICAgICAgICAgICAgICAgICIvIiwgcGNoUmV1c2VGcm9tLCAiLmRpci8ke1BEQl9QUkVGSVh9IiwgcGNoUmV1c2VGcm9tLAotICAgICAgICAgICAgICAgIGV4dGVuc2lvbik7Ci0KLSAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG9fZGlyID0gY21TdHJDYXQoCisgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRhcmdldF9jb21waWxlX3BkYl9kaXIgPSBjbVN0ckNhdCgKICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi8iLAotICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCAiLmRpci8ke1BEQl9QUkVGSVh9Iik7CisgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuZGlyLyIpOwogCi0gICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRvX2ZpbGUgPQotICAgICAgICAgICAgICAgIGNtU3RyQ2F0KHRvX2RpciwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOworICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb3B5X3NjcmlwdCA9CisgICAgICAgICAgICAgICAgY21TdHJDYXQodGFyZ2V0X2NvbXBpbGVfcGRiX2RpciwgImNvcHlfaWRiX3BkYi5jbWFrZSIpOworICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZmlsZShjb3B5X3NjcmlwdCk7CiAKLSAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZGVzdF9maWxlID0gdG9fZmlsZTsKKyAgICAgICAgICAgICAgZmlsZSA8PCAiIyBDTWFrZSBnZW5lcmF0ZWQgZmlsZVxuIjsKKyAgICAgICAgICAgICAgZm9yIChhdXRvIGV4dGVuc2lvbiA6IHsgIi5wZGIiLCAiLmlkYiIgfSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZyb21fZmlsZSA9CisgICAgICAgICAgICAgICAgICBjbVN0ckNhdChyZXVzZVRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiwgcGNoUmV1c2VGcm9tLCAiLmRpci8ke1BEQl9QUkVGSVh9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaFJldXNlRnJvbSwgZXh0ZW5zaW9uKTsKIAotICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwcmVmaXggPSB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiUFJFRklYIik7Ci0gICAgICAgICAgICAgIGlmICghcHJlZml4LmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBkZXN0X2ZpbGUgPSBjbVN0ckNhdCh0b19kaXIsIHByZWZpeCwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOwotICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG9fZGlyID0gY21TdHJDYXQoCisgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICIvIiwgdGFyZ2V0LT5HZXROYW1lKCksICIuZGlyLyR7UERCX1BSRUZJWH0iKTsKIAotICAgICAgICAgICAgICBmaWxlIDw8ICJpZiAoRVhJU1RTIFwiIiA8PCBmcm9tX2ZpbGUgPDwgIlwiIEFORCBcIiIgPDwgZnJvbV9maWxlCi0gICAgICAgICAgICAgICAgICAgPDwgIlwiIElTX05FV0VSX1RIQU4gXCIiIDw8IGRlc3RfZmlsZSA8PCAiXCIpXG4iOwotICAgICAgICAgICAgICBmaWxlIDw8ICIgIGZpbGUoQ09QWSBcIiIgPDwgZnJvbV9maWxlIDw8ICJcIiIKLSAgICAgICAgICAgICAgICAgICA8PCAiIERFU1RJTkFUSU9OIFwiIiA8PCB0b19kaXIgPDwgIlwiKVxuIjsKLSAgICAgICAgICAgICAgaWYgKCFwcmVmaXguZW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGZpbGUgPDwgIiAgZmlsZShSRU1PVkUgXCIiIDw8IGRlc3RfZmlsZSA8PCAiXCIpXG4iOwotICAgICAgICAgICAgICAgIGZpbGUgPDwgIiAgZmlsZShSRU5BTUUgXCIiIDw8IHRvX2ZpbGUgPDwgIlwiIFwiIiA8PCBkZXN0X2ZpbGUKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB0b19maWxlID0KKyAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KHRvX2RpciwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOworCisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZGVzdF9maWxlID0gdG9fZmlsZTsKKworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHByZWZpeCA9IHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJQUkVGSVgiKTsKKyAgICAgICAgICAgICAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICBkZXN0X2ZpbGUgPQorICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCh0b19kaXIsIHByZWZpeCwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZpbGUgPDwgImlmIChFWElTVFMgXCIiIDw8IGZyb21fZmlsZSA8PCAiXCIgQU5EIFwiIgorICAgICAgICAgICAgICAgICAgICAgPDwgZnJvbV9maWxlIDw8ICJcIiBJU19ORVdFUl9USEFOIFwiIiA8PCBkZXN0X2ZpbGUKICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIilcbiI7CisgICAgICAgICAgICAgICAgZmlsZSA8PCAiICBmaWxlKENPUFkgXCIiIDw8IGZyb21fZmlsZSA8PCAiXCIiCisgICAgICAgICAgICAgICAgICAgICA8PCAiIERFU1RJTkFUSU9OIFwiIiA8PCB0b19kaXIgPDwgIlwiKVxuIjsKKyAgICAgICAgICAgICAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICBmaWxlIDw8ICIgIGZpbGUoUkVNT1ZFIFwiIiA8PCBkZXN0X2ZpbGUgPDwgIlwiKVxuIjsKKyAgICAgICAgICAgICAgICAgIGZpbGUgPDwgIiAgZmlsZShSRU5BTUUgXCIiIDw8IHRvX2ZpbGUgPDwgIlwiIFwiIiA8PCBkZXN0X2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiKVxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmlsZSA8PCAiZW5kaWYoKVxuIjsKICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBmaWxlIDw8ICJlbmRpZigpXG4iOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXM7Ci0gICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lIGN1cnJlbnRMaW5lOwotICAgICAgICAgICAgY3VycmVudExpbmUucHVzaF9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lLnB1c2hfYmFjayhjbVN0ckNhdCgiLURQREJfUFJFRklYPSIsIHBkYl9wcmVmaXgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lLnB1c2hfYmFjaygiLVAiKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lLnB1c2hfYmFjayhjb3B5X3NjcmlwdCk7Ci0gICAgICAgICAgICBjb21tYW5kTGluZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShjdXJyZW50TGluZSkpOworICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMgPSBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSgKKyAgICAgICAgICAgICAgICB7IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLAorICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIi1EUERCX1BSRUZJWD0iLCBwZGJfcHJlZml4KSwgIi1QIiwgY29weV9zY3JpcHQgfSk7CiAKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBzOwotICAgICAgICAgICAgY29uc3QgY2hhciogbm9fbWVzc2FnZSA9ICIiOwotICAgICAgICAgICAgY29uc3QgY2hhciogbm9fY3VycmVudF9kaXIgPSBudWxscHRyOwotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7CisgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2RlcHM7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5vX21lc3NhZ2UgPSAiIjsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciogbm9fY3VycmVudF9kaXIgPSBudWxscHRyOworICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKIAotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHM7Ci0gICAgICAgICAgICBvdXRwdXRzLnB1c2hfYmFjayhjbVN0ckNhdCh0YXJnZXRfY29tcGlsZV9wZGJfZGlyLCBwZGJfcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNoUmV1c2VGcm9tLCAiLnBkYiIpKTsKKyAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHM7CisgICAgICAgICAgICAgIG91dHB1dHMucHVzaF9iYWNrKGNtU3RyQ2F0KHRhcmdldF9jb21waWxlX3BkYl9kaXIsIHBkYl9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaFJldXNlRnJvbSwgIi5wZGIiKSk7CiAKLSAgICAgICAgICAgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7Ci0gICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoCi0gICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksIG91dHB1dHMsIG5vX2RlcHMsIGNvbW1hbmRMaW5lcywKLSAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRUeXBlOjpQUkVfQlVJTEQsIG5vX21lc3NhZ2UsIG5vX2N1cnJlbnRfZGlyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUqIGNvcHlfcnVsZSA9Ci0gICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICAgICAgICAgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1Zpc3VhbFN0dWRpbygpKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAorICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksIG91dHB1dHMsIG5vX2RlcHMsIGNvbW1hbmRMaW5lcywKKyAgICAgICAgICAgICAgICAgIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9CVUlMRCwgbm9fbWVzc2FnZSwgbm9fY3VycmVudF9kaXIpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOworICAgICAgICAgICAgICAgIGNtU291cmNlRmlsZSogY29weV9ydWxlID0gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAogICAgICAgICAgICAgICAgICAgb3V0cHV0cywgbm9fYnlwcm9kdWN0cywgbm9fZGVwcywgbm9fbWFpbl9kZXBlbmRlbmN5LAogICAgICAgICAgICAgICAgICAgbm9faW1wbGljaXRfZGVwZW5kcywgY29tbWFuZExpbmVzLCBub19tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgbm9fY3VycmVudF9kaXIpOwogCi0gICAgICAgICAgICAgIGlmIChjb3B5X3J1bGUpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXQtPkFkZFNvdXJjZShjb3B5X3J1bGUtPlJlc29sdmVGdWxsUGF0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoY29weV9ydWxlKSB7CisgICAgICAgICAgICAgICAgICB0YXJnZXQtPkFkZFNvdXJjZShjb3B5X3J1bGUtPlJlc29sdmVGdWxsUGF0aCgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2NvbXBpbGVfcGRiX2Rpcik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2NvbXBpbGVfcGRiX2Rpci5jX3N0cigpKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHBjaFNvdXJjZU9iaiA9CisgICAgICAgICAgICAgIHJldXNlVGFyZ2V0LT5HZXRQY2hGaWxlT2JqZWN0KGNvbmZpZywgbGFuZyk7CisKKyAgICAgICAgICAgIC8vIExpbmsgdG8gdGhlIHBjaCBvYmplY3QgZmlsZQorICAgICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KAorICAgICAgICAgICAgICAiTElOS19GTEFHUyIsCisgICAgICAgICAgICAgIGNtU3RyQ2F0KCIgIiwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHBjaFNvdXJjZU9iaiwgU0hFTEwpKSwKKyAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgfQotCi0gICAgICAgICAgc3RkOjpzdHJpbmcgcGNoU291cmNlT2JqID0KLSAgICAgICAgICAgIHJldXNlVGFyZ2V0LT5HZXRQY2hGaWxlT2JqZWN0KGNvbmZpZywgbGFuZyk7Ci0KLSAgICAgICAgICAvLyBMaW5rIHRvIHRoZSBwY2ggb2JqZWN0IGZpbGUKLSAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+QXBwZW5kUHJvcGVydHkoCi0gICAgICAgICAgICAiTElOS19GTEFHUyIsCi0gICAgICAgICAgICBjbVN0ckNhdCgiICIsIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChwY2hTb3VyY2VPYmosIFNIRUxMKSkKLSAgICAgICAgICAgICAgLmNfc3RyKCksCi0gICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwY2hfc2YtPlNldFByb3BlcnR5KCJQQ0hfRVhURU5TSU9OIiwgcGNoRXh0ZW5zaW9uLmNfc3RyKCkpOwogICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwY2hfc2YtPlNldFByb3BlcnR5KCJQQ0hfRVhURU5TSU9OIiwgcGNoRXh0ZW5zaW9uLmNfc3RyKCkpOwotICAgICAgfQogCi0gICAgICAvLyBBZGQgcGNoSGVhZGVyIHRvIHNvdXJjZSBmaWxlcywgd2hpY2ggd2lsbAotICAgICAgLy8gYmUgZ3JvdXBlZCBhcyAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIKLSAgICAgIGF1dG8gcGNoSGVhZGVyX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAotICAgICAgICBwY2hIZWFkZXIsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgICAgIHN0ZDo6c3RyaW5nIGVycjsKLSAgICAgIHBjaEhlYWRlcl9zZi0+UmVzb2x2ZUZ1bGxQYXRoKCZlcnIpOwotICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UocGNoSGVhZGVyKTsKKyAgICAgICAgLy8gQWRkIHBjaEhlYWRlciB0byBzb3VyY2UgZmlsZXMsIHdoaWNoIHdpbGwKKyAgICAgICAgLy8gYmUgZ3JvdXBlZCBhcyAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIKKyAgICAgICAgYXV0byBwY2hIZWFkZXJfc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoCisgICAgICAgICAgcGNoSGVhZGVyLCBmYWxzZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGVycjsKKyAgICAgICAgcGNoSGVhZGVyX3NmLT5SZXNvbHZlRnVsbFBhdGgoJmVycik7CisgICAgICAgIHRhcmdldC0+QWRkU291cmNlKHBjaEhlYWRlcik7CisgICAgICB9CiAgICAgfQogICB9CiB9CkBAIC0yNTEzLDggKzI2MzYsNyBAQAogICAgICAgYmF0Y2hTaXplID0gZmlsdGVyZWRfc291cmNlcy5zaXplKCk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaXRlbXNMZWZ0ID0gZmlsdGVyZWRfc291cmNlcy5zaXplKCksIGNodW5rID0gYmF0Y2hTaXplLAotICAgICAgICAgICAgICAgIGJhdGNoID0gMDsKKyAgICBmb3IgKHNpemVfdCBpdGVtc0xlZnQgPSBmaWx0ZXJlZF9zb3VyY2VzLnNpemUoKSwgY2h1bmssIGJhdGNoID0gMDsKICAgICAgICAgIGl0ZW1zTGVmdCA+IDA7IGl0ZW1zTGVmdCAtPSBjaHVuaywgKytiYXRjaCkgewogCiAgICAgICBjaHVuayA9IHN0ZDo6bWluKGl0ZW1zTGVmdCwgYmF0Y2hTaXplKTsKQEAgLTI2MjYsMTEgKzI3NDgsMTEgQEAKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBcHBlbmRDb21waWxlT3B0aW9ucyhzdGQ6OnN0cmluZyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogb3B0aW9uc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3B0aW9uc19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWdleCkgY29uc3QKIHsKICAgLy8gU2hvcnQtY2lyY3VpdCBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucy4KLSAgaWYgKCFvcHRpb25zX2xpc3QpIHsKKyAgaWYgKG9wdGlvbnNfbGlzdC5lbXB0eSgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTI2ODQsMTEgKzI4MDYsMTEgQEAKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaW5jbHVkZXMsIGNvbnN0IGNoYXIqIGluY2x1ZGVzX2xpc3QsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaW5jbHVkZXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmNsdWRlc19saXN0LAogICBjb25zdCBjbVNvdXJjZUZpbGUmIHNvdXJjZUZpbGUpIGNvbnN0CiB7CiAgIC8vIFNob3J0LWNpcmN1aXQgaWYgdGhlcmUgYXJlIG5vIGluY2x1ZGVzLgotICBpZiAoIWluY2x1ZGVzX2xpc3QpIHsKKyAgaWYgKGluY2x1ZGVzX2xpc3QuZW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQogCkBAIC0yNzkxLDExICsyOTEzLDExIEBACiAgICAgICAvLyBjb21tYW5kIGxpbmUgd2l0aG91dCBhbnkgZXNjYXBlcy4gIEhvd2V2ZXIgd2Ugc3RpbGwgaGF2ZSB0bwogICAgICAgLy8gZ2V0IHRoZSAnJCcgYW5kICcjJyBjaGFyYWN0ZXJzIHRocm91Z2ggV01ha2UgYXMgJyQkJyBhbmQKICAgICAgIC8vICckIycuCi0gICAgICBmb3IgKGNvbnN0IGNoYXIqIGMgPSBkZWZpbmUuY19zdHIoKTsgKmM7ICsrYykgewotICAgICAgICBpZiAoKmMgPT0gJyQnIHx8ICpjID09ICcjJykgeworICAgICAgZm9yIChjaGFyIGMgOiBkZWZpbmUpIHsKKyAgICAgICAgaWYgKGMgPT0gJyQnIHx8IGMgPT0gJyMnKSB7CiAgICAgICAgICAgZGVmICs9ICckJzsKICAgICAgICAgfQotICAgICAgICBkZWYgKz0gKmM7CisgICAgICAgIGRlZiArPSBjOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAvLyBNYWtlIHRoZSBkZWZpbml0aW9uIGFwcGVhciBwcm9wZXJseSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVXNlCkBAIC0yODM5LDggKzI5NjEsOCBAQAogICB9CiAgIGNtU3RhdGVTbmFwc2hvdCBzbnAgPSB0aGlzLT5TdGF0ZVNuYXBzaG90OwogICB3aGlsZSAoc25wLklzVmFsaWQoKSkgewotICAgIGlmIChjb25zdCBjaGFyKiB2YWx1ZSA9IHNucC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShmZWF0dXJlTmFtZSkpIHsKLSAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gc25wLkdldERpcmVjdG9yeSgpLkdldFByb3BlcnR5KGZlYXR1cmVOYW1lKSkgeworICAgICAgcmV0dXJuIHZhbHVlLT5jX3N0cigpOwogICAgIH0KICAgICBzbnAgPSBzbnAuR2V0QnVpbGRzeXN0ZW1EaXJlY3RvcnlQYXJlbnQoKTsKICAgfQpAQCAtMjg4Miw3ICszMDA0LDcgQEAKIHsKIHB1YmxpYzoKICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yTG9jYWwoY21Mb2NhbEdlbmVyYXRvciogbGcsIHN0ZDo6c3RyaW5nIGNvbnN0JiB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXN0LCBib29sIGltcGxpYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRlc3QsIGJvb2wgaW1wbGliKQogICAgIDogY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAogICAgICAgICB0LCBkZXN0LCBpbXBsaWIsICIiLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwgIlVuc3BlY2lmaWVkIiwKICAgICAgICAgY21JbnN0YWxsR2VuZXJhdG9yOjpTZWxlY3RNZXNzYWdlTGV2ZWwobGctPkdldE1ha2VmaWxlKCkpLCBmYWxzZSwKQEAgLTI4OTgsMTUgKzMwMjAsMTUgQEAKIHsKICAgLy8gQ29udmVydCB0aGUgb2xkLXN0eWxlIGluc3RhbGwgc3BlY2lmaWNhdGlvbiBmcm9tIGVhY2ggdGFyZ2V0IHRvCiAgIC8vIGFuIGluc3RhbGwgZ2VuZXJhdG9yIGFuZCBydW4gaXQuCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRndHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIGwgOiB0Z3RzKSB7CisgIGNvbnN0IGF1dG8mIHRndHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIGZvciAoY29uc3QgYXV0byYgbCA6IHRndHMpIHsKICAgICBpZiAobC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIC8vIEluY2x1ZGUgdGhlIHVzZXItc3BlY2lmaWVkIHByZS1pbnN0YWxsIHNjcmlwdCBmb3IgdGhpcyB0YXJnZXQuCiAgICAgaWYgKGNvbnN0IGNoYXIqIHByZWluc3RhbGwgPSBsLT5HZXRQcm9wZXJ0eSgiUFJFX0lOU1RBTExfU0NSSVBUIikpIHsKLSAgICAgIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvciBnKHByZWluc3RhbGwsIGZhbHNlLCBudWxscHRyLCBmYWxzZSk7CisgICAgICBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IgZyhwcmVpbnN0YWxsLCBmYWxzZSwgIiIsIGZhbHNlKTsKICAgICAgIGcuR2VuZXJhdGUob3MsIGNvbmZpZywgY29uZmlndXJhdGlvblR5cGVzKTsKICAgICB9CiAKQEAgLTI5MjcsOCArMzA0OSw4IEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOiB7CiAgICAgICAgICAgLy8gVXNlIGEgdGFyZ2V0IGluc3RhbGwgZ2VuZXJhdG9yLgotICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcodGhpcywgbC0+R2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY19zdHIoKSwgZmFsc2UpOworICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcodGhpcywgbC0+R2V0TmFtZSgpLCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICBnLkdlbmVyYXRlKG9zLCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWTogewpAQCAtMjkzNiwxOSArMzA1OCwxOSBAQAogICAgICAgICAgIC8vIFNwZWNpYWwgY29kZSB0byBoYW5kbGUgRExMLiAgSW5zdGFsbCB0aGUgaW1wb3J0IGxpYnJhcnkKICAgICAgICAgICAvLyB0byB0aGUgbm9ybWFsIGRlc3RpbmF0aW9uIGFuZCB0aGUgRExMIHRvIHRoZSBydW50aW1lCiAgICAgICAgICAgLy8gZGVzdGluYXRpb24uCi0gICAgICAgICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yTG9jYWwgZzEodGhpcywgbC0+R2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmNfc3RyKCksIHRydWUpOworICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcxKHRoaXMsIGwtPkdldE5hbWUoKSwgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgZzEuR2VuZXJhdGUob3MsIGNvbmZpZywgY29uZmlndXJhdGlvblR5cGVzKTsKICAgICAgICAgICAvLyBXZSBhbHNvIHNraXAgb3ZlciB0aGUgbGVhZGluZyBzbGFzaCBnaXZlbiBieSB0aGUgdXNlci4KICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGwtPlRhcmdldC0+R2V0UnVudGltZUluc3RhbGxQYXRoKCkuc3Vic3RyKDEpOwogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbCBnMih0aGlzLCBsLT5HZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY19zdHIoKSwgZmFsc2UpOworICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcyKHRoaXMsIGwtPkdldE5hbWUoKSwgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICAgIGcyLkdlbmVyYXRlKG9zLCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAjZWxzZQogICAgICAgICAgIC8vIFVzZSBhIHRhcmdldCBpbnN0YWxsIGdlbmVyYXRvci4KLSAgICAgICAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbCBnKHRoaXMsIGwtPkdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmNfc3RyKCksIGZhbHNlKTsKKyAgICAgICAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbCBnKHRoaXMsIGwtPkdldE5hbWUoKSwgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgZy5HZW5lcmF0ZShvcywgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogI2VuZGlmCiAgICAgICAgIH0gYnJlYWs7CkBAIC0yOTU5LDcgKzMwODEsNyBAQAogCiAgICAgLy8gSW5jbHVkZSB0aGUgdXNlci1zcGVjaWZpZWQgcG9zdC1pbnN0YWxsIHNjcmlwdCBmb3IgdGhpcyB0YXJnZXQuCiAgICAgaWYgKGNvbnN0IGNoYXIqIHBvc3RpbnN0YWxsID0gbC0+R2V0UHJvcGVydHkoIlBPU1RfSU5TVEFMTF9TQ1JJUFQiKSkgewotICAgICAgY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yIGcocG9zdGluc3RhbGwsIGZhbHNlLCBudWxscHRyLCBmYWxzZSk7CisgICAgICBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IgZyhwb3N0aW5zdGFsbCwgZmFsc2UsICIiLCBmYWxzZSk7CiAgICAgICBnLkdlbmVyYXRlKG9zLCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAgICAgfQogICB9CkBAIC0zMTE1LDYgKzMyMzcsMTEgQEAKICAgcmV0dXJuIHRoaXMtPkdldFN0YXRlKCktPlVzZU5NYWtlKCk7CiB9CiAKK2Jvb2wgY21Mb2NhbEdlbmVyYXRvcjo6SXNOaW5qYU11bHRpKCkgY29uc3QKK3sKKyAgcmV0dXJuIHRoaXMtPkdldFN0YXRlKCktPlVzZU5pbmphTXVsdGkoKTsKK30KKwogc3RkOjpzdHJpbmcgY21Mb2NhbEdlbmVyYXRvcjo6R2V0T2JqZWN0RmlsZU5hbWVXaXRob3V0VGFyZ2V0KAogICBjb25zdCBjbVNvdXJjZUZpbGUmIHNvdXJjZSwgc3RkOjpzdHJpbmcgY29uc3QmIGRpcl9tYXgsCiAgIGJvb2wqIGhhc1NvdXJjZUV4dGVuc2lvbiwgY2hhciBjb25zdCogY3VzdG9tT3V0cHV0RXh0ZW5zaW9uKQpAQCAtMzQ0MywzICszNTcwLDI0NSBAQAogICBjbUxHSW5mb1Byb3AobWYsIHRhcmdldCwgIk1BQ09TWF9GUkFNRVdPUktfQlVORExFX1ZFUlNJT04iKTsKICAgbWYtPkNvbmZpZ3VyZUZpbGUoaW5GaWxlLCBmbmFtZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiB9CisKK25hbWVzcGFjZSB7Cit2b2lkIENyZWF0ZUdlbmVyYXRlZFNvdXJjZShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KQoreworICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKG91dHB1dCkgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAvLyBPdXRwdXRzIHdpdGhvdXQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGZyb20gdGhlIHByb2plY3QgYXJlIGFscmVhZHkKKyAgICAvLyBjcmVhdGVkIGFuZCBtYXJrZWQgYXMgZ2VuZXJhdGVkLiAgRG8gbm90IG1hcmsgdGhlbSBhZ2FpbiwgYmVjYXVzZQorICAgIC8vIG90aGVyIGNvbW1hbmRzIG1pZ2h0IGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHByb3BlcnR5LgorICAgIGlmIChvcmlnaW4gPT0gY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IpIHsKKyAgICAgIGxnLkdldE1ha2VmaWxlKCktPkdldE9yQ3JlYXRlR2VuZXJhdGVkU291cmNlKG91dHB1dCk7CisgICAgfQorICB9IGVsc2UgeworICAgIGxnLkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgIkdlbmVyYXRvciBleHByZXNzaW9ucyBpbiBjdXN0b20gY29tbWFuZCBvdXRwdXRzIGFyZSBub3QgaW1wbGVtZW50ZWQhIiwKKyAgICAgIGxmYnQpOworICB9Cit9CisKK3ZvaWQgQ3JlYXRlR2VuZXJhdGVkU291cmNlcyhjbUxvY2FsR2VuZXJhdG9yJiBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KQoreworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvIDogb3V0cHV0cykgeworICAgIENyZWF0ZUdlbmVyYXRlZFNvdXJjZShsZywgbywgb3JpZ2luLCBsZmJ0KTsKKyAgfQorfQorCitjbVNvdXJjZUZpbGUqIEFkZEN1c3RvbUNvbW1hbmQoCisgIGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLCBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LAorICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCisgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKKyAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQoreworICBjbU1ha2VmaWxlKiBtZiA9IGxnLkdldE1ha2VmaWxlKCk7CisKKyAgLy8gQ2hvb3NlIGEgc291cmNlIGZpbGUgb24gd2hpY2ggdG8gc3RvcmUgdGhlIGN1c3RvbSBjb21tYW5kLgorICBjbVNvdXJjZUZpbGUqIGZpbGUgPSBudWxscHRyOworICBpZiAoIWNvbW1hbmRMaW5lcy5lbXB0eSgpICYmICFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgeworICAgIC8vIFRoZSBtYWluIGRlcGVuZGVuY3kgd2FzIHNwZWNpZmllZC4gIFVzZSBpdCB1bmxlc3MgYSBkaWZmZXJlbnQKKyAgICAvLyBjdXN0b20gY29tbWFuZCBhbHJlYWR5IHVzZWQgaXQuCisgICAgZmlsZSA9IG1mLT5HZXRTb3VyY2UobWFpbl9kZXBlbmRlbmN5KTsKKyAgICBpZiAoZmlsZSAmJiBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCkgJiYgIXJlcGxhY2UpIHsKKyAgICAgIC8vIFRoZSBtYWluIGRlcGVuZGVuY3kgYWxyZWFkeSBoYXMgYSBjdXN0b20gY29tbWFuZC4KKyAgICAgIGlmIChjb21tYW5kTGluZXMgPT0gZmlsZS0+R2V0Q3VzdG9tQ29tbWFuZCgpLT5HZXRDb21tYW5kTGluZXMoKSkgeworICAgICAgICAvLyBUaGUgZXhpc3RpbmcgY3VzdG9tIGNvbW1hbmQgaXMgaWRlbnRpY2FsLiAgU2lsZW50bHkgaWdub3JlCisgICAgICAgIC8vIHRoZSBkdXBsaWNhdGUuCisgICAgICAgIHJldHVybiBmaWxlOworICAgICAgfQorICAgICAgLy8gVGhlIGV4aXN0aW5nIGN1c3RvbSBjb21tYW5kIGlzIGRpZmZlcmVudC4gIFdlIG5lZWQgdG8KKyAgICAgIC8vIGdlbmVyYXRlIGEgcnVsZSBmaWxlIGZvciB0aGlzIG5ldyBjb21tYW5kLgorICAgICAgZmlsZSA9IG51bGxwdHI7CisgICAgfSBlbHNlIGlmICghZmlsZSkgeworICAgICAgZmlsZSA9IG1mLT5DcmVhdGVTb3VyY2UobWFpbl9kZXBlbmRlbmN5KTsKKyAgICB9CisgIH0KKworICAvLyBHZW5lcmF0ZSBhIHJ1bGUgZmlsZSBpZiB0aGUgbWFpbiBkZXBlbmRlbmN5IGlzIG5vdCBhdmFpbGFibGUuCisgIGlmICghZmlsZSkgeworICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IGxnLkdldEdsb2JhbEdlbmVyYXRvcigpOworCisgICAgLy8gQ29uc3RydWN0IGEgcnVsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlyc3Qgb3V0cHV0IHByb2R1Y2VkLgorICAgIHN0ZDo6c3RyaW5nIG91dE5hbWUgPSBnZy0+R2VuZXJhdGVSdWxlRmlsZShvdXRwdXRzWzBdKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBydWxlIGZpbGUgYWxyZWFkeSBleGlzdHMuCisgICAgZmlsZSA9IG1mLT5HZXRTb3VyY2Uob3V0TmFtZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CisgICAgaWYgKGZpbGUgJiYgZmlsZS0+R2V0Q3VzdG9tQ29tbWFuZCgpICYmICFyZXBsYWNlKSB7CisgICAgICAvLyBUaGUgcnVsZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorICAgICAgaWYgKGNvbW1hbmRMaW5lcyAhPSBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCktPkdldENvbW1hbmRMaW5lcygpKSB7CisgICAgICAgIGxnLkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICBjbVN0ckNhdCgiQXR0ZW1wdCB0byBhZGQgYSBjdXN0b20gcnVsZSB0byBvdXRwdXRcbiAgIiwgb3V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAiXG53aGljaCBhbHJlYWR5IGhhcyBhIGN1c3RvbSBydWxlLiIpLAorICAgICAgICAgIGxmYnQpOworICAgICAgfQorICAgICAgcmV0dXJuIGZpbGU7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgY21Tb3VyY2VGaWxlIGZvciB0aGUgcnVsZSBmaWxlLgorICAgIGlmICghZmlsZSkgeworICAgICAgZmlsZSA9IG1mLT5DcmVhdGVTb3VyY2Uob3V0TmFtZSwgdHJ1ZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CisgICAgfQorICAgIGZpbGUtPlNldFByb3BlcnR5KCJfX0NNQUtFX1JVTEUiLCAiMSIpOworICB9CisKKyAgLy8gQXR0YWNoIHRoZSBjdXN0b20gY29tbWFuZCB0byB0aGUgZmlsZS4KKyAgaWYgKGZpbGUpIHsKKyAgICAvLyBDb25zdHJ1Y3QgYSBjb21wbGV0ZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kczIoZGVwZW5kcyk7CisgICAgaWYgKCFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgeworICAgICAgZGVwZW5kczIucHVzaF9iYWNrKG1haW5fZGVwZW5kZW5jeSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ3VzdG9tQ29tbWFuZD4gY2MgPSBjbTo6bWFrZV91bmlxdWU8Y21DdXN0b21Db21tYW5kPigKKyAgICAgIG91dHB1dHMsIGJ5cHJvZHVjdHMsIGRlcGVuZHMyLCBjb21tYW5kTGluZXMsIGxmYnQsIGNvbW1lbnQsIHdvcmtpbmdEaXIpOworICAgIGNjLT5TZXRFc2NhcGVPbGRTdHlsZShlc2NhcGVPbGRTdHlsZSk7CisgICAgY2MtPlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CisgICAgY2MtPlNldEltcGxpY2l0RGVwZW5kcyhpbXBsaWNpdF9kZXBlbmRzKTsKKyAgICBjYy0+U2V0VXNlc1Rlcm1pbmFsKHVzZXNfdGVybWluYWwpOworICAgIGNjLT5TZXRDb21tYW5kRXhwYW5kTGlzdHMoY29tbWFuZF9leHBhbmRfbGlzdHMpOworICAgIGNjLT5TZXREZXBmaWxlKGRlcGZpbGUpOworICAgIGNjLT5TZXRKb2JQb29sKGpvYl9wb29sKTsKKyAgICBmaWxlLT5TZXRDdXN0b21Db21tYW5kKHN0ZDo6bW92ZShjYykpOworCisgICAgbWYtPkFkZFNvdXJjZU91dHB1dHMoZmlsZSwgb3V0cHV0cywgYnlwcm9kdWN0cyk7CisgIH0KKyAgcmV0dXJuIGZpbGU7Cit9Cit9CisKK25hbWVzcGFjZSBkZXRhaWwgewordm9pZCBBZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoY21Mb2NhbEdlbmVyYXRvciYgbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwgY21UYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMpCit7CisgIGNtTWFrZWZpbGUqIG1mID0gbGcuR2V0TWFrZWZpbGUoKTsKKworICAvLyBBbHdheXMgY3JlYXRlIHRoZSBieXByb2R1Y3Qgc291cmNlcyBhbmQgbWFyayB0aGVtIGdlbmVyYXRlZC4KKyAgQ3JlYXRlR2VuZXJhdGVkU291cmNlcyhsZywgYnlwcm9kdWN0cywgb3JpZ2luLCBsZmJ0KTsKKworICAvLyBBZGQgdGhlIGNvbW1hbmQgdG8gdGhlIGFwcHJvcHJpYXRlIGJ1aWxkIHN0ZXAgZm9yIHRoZSB0YXJnZXQuCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19vdXRwdXQ7CisgIGNtQ3VzdG9tQ29tbWFuZCBjYyhub19vdXRwdXQsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywgbGZidCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQsIHdvcmtpbmdEaXIpOworICBjYy5TZXRFc2NhcGVPbGRTdHlsZShlc2NhcGVPbGRTdHlsZSk7CisgIGNjLlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CisgIGNjLlNldFVzZXNUZXJtaW5hbCh1c2VzX3Rlcm1pbmFsKTsKKyAgY2MuU2V0Q29tbWFuZEV4cGFuZExpc3RzKGNvbW1hbmRfZXhwYW5kX2xpc3RzKTsKKyAgY2MuU2V0RGVwZmlsZShkZXBmaWxlKTsKKyAgY2MuU2V0Sm9iUG9vbChqb2JfcG9vbCk7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgY21DdXN0b21Db21tYW5kVHlwZTo6UFJFX0JVSUxEOgorICAgICAgdGFyZ2V0LT5BZGRQcmVCdWlsZENvbW1hbmQoc3RkOjptb3ZlKGNjKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9MSU5LOgorICAgICAgdGFyZ2V0LT5BZGRQcmVMaW5rQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgY21DdXN0b21Db21tYW5kVHlwZTo6UE9TVF9CVUlMRDoKKyAgICAgIHRhcmdldC0+QWRkUG9zdEJ1aWxkQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgbWYtPkFkZFRhcmdldEJ5cHJvZHVjdHModGFyZ2V0LCBieXByb2R1Y3RzKTsKK30KKworY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgIGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICBjbUNvbW1hbmRPcmlnaW4gb3JpZ2luLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLCBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LAorICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCisgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKKyAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQoreworICAvLyBBbHdheXMgY3JlYXRlIHRoZSBvdXRwdXQgc291cmNlcyBhbmQgbWFyayB0aGVtIGdlbmVyYXRlZC4KKyAgQ3JlYXRlR2VuZXJhdGVkU291cmNlcyhsZywgb3V0cHV0cywgb3JpZ2luLCBsZmJ0KTsKKyAgQ3JlYXRlR2VuZXJhdGVkU291cmNlcyhsZywgYnlwcm9kdWN0cywgb3JpZ2luLCBsZmJ0KTsKKworICByZXR1cm4gQWRkQ3VzdG9tQ29tbWFuZCgKKyAgICBsZywgbGZidCwgb3V0cHV0cywgYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLAorICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZ0RpciwgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsCisgICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKK30KKwordm9pZCBBcHBlbmRDdXN0b21Db21tYW5kVG9PdXRwdXQoY21Mb2NhbEdlbmVyYXRvciYgbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpCit7CisgIC8vIExvb2t1cCBhbiBleGlzdGluZyBjb21tYW5kLgorICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IGxnLkdldE1ha2VmaWxlKCktPkdldFNvdXJjZUZpbGVXaXRoT3V0cHV0KG91dHB1dCkpIHsKKyAgICBpZiAoY21DdXN0b21Db21tYW5kKiBjYyA9IHNmLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKKyAgICAgIGNjLT5BcHBlbmRDb21tYW5kcyhjb21tYW5kTGluZXMpOworICAgICAgY2MtPkFwcGVuZERlcGVuZHMoZGVwZW5kcyk7CisgICAgICBjYy0+QXBwZW5kSW1wbGljaXREZXBlbmRzKGltcGxpY2l0X2RlcGVuZHMpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIC8vIE5vIGV4aXN0aW5nIGNvbW1hbmQgZm91bmQuCisgIGxnLkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKAorICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICBjbVN0ckNhdCgiQXR0ZW1wdCB0byBhcHBlbmQgdG8gb3V0cHV0XG4gICIsIG91dHB1dCwKKyAgICAgICAgICAgICAiXG53aGljaCBpcyBub3QgYWxyZWFkeSBhIGN1c3RvbSBjb21tYW5kIG91dHB1dC4iKSwKKyAgICBsZmJ0KTsKK30KKwordm9pZCBBZGRVdGlsaXR5Q29tbWFuZChjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCwKKyAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwgY21UYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21VdGlsaXR5T3V0cHV0JiBmb3JjZSwgY29uc3QgY2hhciogd29ya2luZ0RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXNjYXBlT2xkU3R5bGUsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQoreworICAvLyBBbHdheXMgY3JlYXRlIHRoZSBieXByb2R1Y3Qgc291cmNlcyBhbmQgbWFyayB0aGVtIGdlbmVyYXRlZC4KKyAgQ3JlYXRlR2VuZXJhdGVkU291cmNlKGxnLCBmb3JjZS5OYW1lLCBvcmlnaW4sIGxmYnQpOworICBDcmVhdGVHZW5lcmF0ZWRTb3VyY2VzKGxnLCBieXByb2R1Y3RzLCBvcmlnaW4sIGxmYnQpOworCisgIC8vIFVzZSBhbiBlbXB0eSBjb21tZW50IHRvIGF2b2lkIGdlbmVyYXRpb24gb2YgZGVmYXVsdCBjb21tZW50LgorICBpZiAoIWNvbW1lbnQpIHsKKyAgICBjb21tZW50ID0gIiI7CisgIH0KKworICBzdGQ6OnN0cmluZyBub19tYWluX2RlcGVuZGVuY3k7CisgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOworICBjbVNvdXJjZUZpbGUqIHJ1bGUgPSBBZGRDdXN0b21Db21tYW5kKAorICAgIGxnLCBsZmJ0LCB7IGZvcmNlLk5hbWUgfSwgYnlwcm9kdWN0cywgZGVwZW5kcywgbm9fbWFpbl9kZXBlbmRlbmN5LAorICAgIG5vX2ltcGxpY2l0X2RlcGVuZHMsIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZ0RpciwgLypyZXBsYWNlPSovZmFsc2UsCisgICAgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCAvKmRlcGZpbGU9Ki8iIiwKKyAgICBqb2JfcG9vbCk7CisgIGlmIChydWxlKSB7CisgICAgbGcuR2V0TWFrZWZpbGUoKS0+QWRkVGFyZ2V0Qnlwcm9kdWN0cyh0YXJnZXQsIGJ5cHJvZHVjdHMpOworICB9CisKKyAgaWYgKCFmb3JjZS5OYW1lQ01QMDA0OS5lbXB0eSgpKSB7CisgICAgdGFyZ2V0LT5BZGRTb3VyY2UoZm9yY2UuTmFtZUNNUDAwNDkpOworICB9Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5oIGIvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuaAppbmRleCAxMjM1OWRiLi44ODE5NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmgKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CkBAIC0xNCw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJjbV9rd2ltbC5oIgogCisjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kVHlwZXMuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKQEAgLTIyLDEzICsyNCwxNiBAQAogCiBjbGFzcyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb247CiBjbGFzcyBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3I7CitjbGFzcyBjbUN1c3RvbUNvbW1hbmRMaW5lczsKIGNsYXNzIGNtR2VuZXJhdG9yVGFyZ2V0OwogY2xhc3MgY21HbG9iYWxHZW5lcmF0b3I7CitjbGFzcyBjbUltcGxpY2l0RGVwZW5kc0xpc3Q7CiBjbGFzcyBjbUxpbmtMaW5lQ29tcHV0ZXI7CiBjbGFzcyBjbU1ha2VmaWxlOwogY2xhc3MgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjsKIGNsYXNzIGNtU291cmNlRmlsZTsKIGNsYXNzIGNtU3RhdGU7CitjbGFzcyBjbVRhcmdldDsKIGNsYXNzIGNtYWtlOwogCiAvKiogXGNsYXNzIGNtTG9jYWxHZW5lcmF0b3IKQEAgLTE0MywxNCArMTQ4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvclJlc3BvbnNlRmlsZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9ICIiKTsKIAotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiBHZXRHZW5lcmF0b3JUYXJnZXRzKCkgY29uc3QKKyAgdXNpbmcgR2VuZXJhdG9yVGFyZ2V0VmVjdG9yID0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ+PjsKKyAgY29uc3QgR2VuZXJhdG9yVGFyZ2V0VmVjdG9yJiBHZXRHZW5lcmF0b3JUYXJnZXRzKCkgY29uc3QKICAgewogICAgIHJldHVybiB0aGlzLT5HZW5lcmF0b3JUYXJnZXRzOwogICB9CiAKLSAgdm9pZCBBZGRHZW5lcmF0b3JUYXJnZXQoY21HZW5lcmF0b3JUYXJnZXQqIGd0KTsKKyAgdm9pZCBBZGRHZW5lcmF0b3JUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0PiBndCk7CiAgIHZvaWQgQWRkSW1wb3J0ZWRHZW5lcmF0b3JUYXJnZXQoY21HZW5lcmF0b3JUYXJnZXQqIGd0KTsKLSAgdm9pZCBBZGRPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCk7CisgIHZvaWQgQWRkT3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ+IGd0KTsKIAogICBjbUdlbmVyYXRvclRhcmdldCogRmluZExvY2FsTm9uQWxpYXNHZW5lcmF0b3JUYXJnZXQoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwpAQCAtMTYwLDE1ICsxNjcsOCBAQAogICAgKiBQcm9jZXNzIGEgbGlzdCBvZiBpbmNsdWRlIGRpcmVjdG9yaWVzCiAgICAqLwogICB2b2lkIEFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGluY2x1ZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmNsdWRlc19saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVNvdXJjZUZpbGUmIHNvdXJjZUZpbGUpIGNvbnN0OwotICB2b2lkIEFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGluY2x1ZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgaW5jbHVkZXNfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21Tb3VyY2VGaWxlJiBzb3VyY2VGaWxlKSBjb25zdAotICB7Ci0gICAgdGhpcy0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCBpbmNsdWRlc19saXN0LmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUpOwotICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtU291cmNlRmlsZSYgc291cmNlRmlsZSkgY29uc3Q7CiAgIHZvaWQgQXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaW5jbHVkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaW5jbHVkZXNfdmVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVNvdXJjZUZpbGUmIHNvdXJjZUZpbGUpIGNvbnN0OwpAQCAtMTg4LDE0ICsxODgsOSBAQAogICAgKiBFbmNvZGUgYSBsaXN0IG9mIGNvbXBpbGUgb3B0aW9ucyBmb3IgdGhlIGNvbXBpbGVyCiAgICAqIGNvbW1hbmQgbGluZS4KICAgICovCi0gIHZvaWQgQXBwZW5kQ29tcGlsZU9wdGlvbnMoc3RkOjpzdHJpbmcmIG9wdGlvbnMsIGNvbnN0IGNoYXIqIG9wdGlvbnNfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWdleCA9IG51bGxwdHIpIGNvbnN0OwogICB2b2lkIEFwcGVuZENvbXBpbGVPcHRpb25zKHN0ZDo6c3RyaW5nJiBvcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHRpb25zX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVnZXggPSBudWxscHRyKSBjb25zdAotICB7Ci0gICAgdGhpcy0+QXBwZW5kQ29tcGlsZU9wdGlvbnMob3B0aW9ucywgb3B0aW9uc19saXN0LmNfc3RyKCksIHJlZ2V4KTsKLSAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlZ2V4ID0gbnVsbHB0cikgY29uc3Q7CiAgIHZvaWQgQXBwZW5kQ29tcGlsZU9wdGlvbnMoc3RkOjpzdHJpbmcmIG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvcHRpb25zX3ZlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWdleCA9IG51bGxwdHIpIGNvbnN0OwpAQCAtMjkyLDYgKzI4Nyw1MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCisgIC8qKgorICAgKiBBZGQgYSBjdXN0b20gUFJFX0JVSUxELCBQUkVfTElOSywgb3IgUE9TVF9CVUlMRCBjb21tYW5kIHRvIGEgdGFyZ2V0LgorICAgKi8KKyAgY21UYXJnZXQqIEFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNtQ3VzdG9tQ29tbWFuZFR5cGUgdHlwZSwKKyAgICBjb25zdCBjaGFyKiBjb21tZW50LCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlID0gdHJ1ZSwKKyAgICBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyA9IGZhbHNlLAorICAgIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzID0gY21PYmplY3RMaWJyYXJ5Q29tbWFuZHM6OlJlamVjdCk7CisKKyAgLyoqCisgICAqIEFkZCBhIGN1c3RvbSBjb21tYW5kIHRvIGEgc291cmNlIGZpbGUuCisgICAqLworICBjbVNvdXJjZUZpbGUqIEFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cHV0LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKKyAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAorICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGVzY2FwZU9sZFN0eWxlID0gdHJ1ZSwKKyAgICBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyA9IGZhbHNlLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlID0gIiIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKyAgY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKKyAgICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCisgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKKyAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgYm9vbCB1c2VzX3Rlcm1pbmFsID0gZmFsc2UsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIik7CisKKyAgLyoqCisgICAqIEFkZCBhIHV0aWxpdHkgdG8gdGhlIGJ1aWxkLiAgQSB1dGlsaXR5IHRhcmdldCBpcyBhIGNvbW1hbmQgdGhhdCBpcyBydW4KKyAgICogZXZlcnkgdGltZSB0aGUgdGFyZ2V0IGlzIGJ1aWx0LgorICAgKi8KKyAgY21UYXJnZXQqIEFkZFV0aWxpdHlDb21tYW5kKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB1dGlsaXR5TmFtZSwgYm9vbCBleGNsdWRlRnJvbUFsbCwKKyAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAorICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQgPSBudWxscHRyLCBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwKKyAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKwogICBzdGQ6OnN0cmluZyBHZXRQcm9qZWN0TmFtZSgpIGNvbnN0OwogCiAgIC8qKiBDb21wdXRlIHRoZSBsYW5ndWFnZSB1c2VkIHRvIGNvbXBpbGUgdGhlIGdpdmVuIHNvdXJjZSBmaWxlLiAgKi8KQEAgLTQxNCw2ICs0NTQsNyBAQAogICBib29sIElzV2F0Y29tV01ha2UoKSBjb25zdDsKICAgYm9vbCBJc01pbkdXTWFrZSgpIGNvbnN0OwogICBib29sIElzTk1ha2UoKSBjb25zdDsKKyAgYm9vbCBJc05pbmphTXVsdGkoKSBjb25zdDsKIAogICB2b2lkIElzc3VlTWVzc2FnZShNZXNzYWdlVHlwZSB0LCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCkgY29uc3Q7CiAKQEAgLTQ2MSwxMSArNTAyLDExIEBACiAgIHVzaW5nIEdlbmVyYXRvclRhcmdldE1hcCA9CiAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBjbUdlbmVyYXRvclRhcmdldCo+OwogICBHZW5lcmF0b3JUYXJnZXRNYXAgR2VuZXJhdG9yVGFyZ2V0U2VhcmNoSW5kZXg7Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gR2VuZXJhdG9yVGFyZ2V0czsKKyAgR2VuZXJhdG9yVGFyZ2V0VmVjdG9yIEdlbmVyYXRvclRhcmdldHM7CiAKICAgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiBXYXJuQ01QMDA2MzsKICAgR2VuZXJhdG9yVGFyZ2V0TWFwIEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0czsKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiBPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0czsKKyAgR2VuZXJhdG9yVGFyZ2V0VmVjdG9yIE93bmVkSW1wb3J0ZWRHZW5lcmF0b3JUYXJnZXRzOwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IEFsaWFzVGFyZ2V0czsKIAogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IENvbXBpbGVyczsKQEAgLTQ5NCw0ICs1MzUsNDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIG1heF90b3RhbF9sZW4pOwogI2VuZGlmCiAKK25hbWVzcGFjZSBkZXRhaWwgewordm9pZCBBZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoY21Mb2NhbEdlbmVyYXRvciYgbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwgY21UYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMpOworCitjbVNvdXJjZUZpbGUqIEFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCisgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCisgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKKyAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKKyAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAorICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpOworCit2b2lkIEFwcGVuZEN1c3RvbUNvbW1hbmRUb091dHB1dChjbUxvY2FsR2VuZXJhdG9yJiBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcyk7CisKK3ZvaWQgQWRkVXRpbGl0eUNvbW1hbmQoY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCisgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGNtVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtVXRpbGl0eU91dHB1dCYgZm9yY2UsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGVzY2FwZU9sZFN0eWxlLCBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxHaHNNdWx0aUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21Mb2NhbEdoc011bHRpR2VuZXJhdG9yLmN4eAppbmRleCA0YjEwNzk4Li4wOThmYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbEdoc011bHRpR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Mb2NhbEdoc011bHRpR2VuZXJhdG9yLmN4eApAQCAtNSw2ICs1LDggQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCkBAIC01MCwxMCArNTIsMTEgQEAKIAogdm9pZCBjbUxvY2FsR2hzTXVsdGlHZW5lcmF0b3I6OkdlbmVyYXRlKCkKIHsKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiByZW1haW5pbmcgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gcmVtYWluaW5nOworICBjbTo6YXBwZW5kKHJlbWFpbmluZywgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKTsKICAgZm9yIChhdXRvJiB0IDogcmVtYWluaW5nKSB7CiAgICAgaWYgKHQpIHsKLSAgICAgIEdlbmVyYXRlVGFyZ2V0c0RlcHRoRmlyc3QodCwgcmVtYWluaW5nKTsKKyAgICAgIHRoaXMtPkdlbmVyYXRlVGFyZ2V0c0RlcHRoRmlyc3QodCwgcmVtYWluaW5nKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5jeHgKaW5kZXggMTM0YmJlMS4uZTYyMzcxZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5jeHgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisjaW5jbHVkZSAiY21UYXJnZXQuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCiBjbUxvY2FsTmluamFHZW5lcmF0b3I6OmNtTG9jYWxOaW5qYUdlbmVyYXRvcihjbUdsb2JhbEdlbmVyYXRvciogZ2csCkBAIC02MSw3ICs2MiwxMiBAQAogICAgIHRoaXMtPkhvbWVSZWxhdGl2ZU91dHB1dFBhdGguY2xlYXIoKTsKICAgfQogCi0gIHRoaXMtPldyaXRlUHJvY2Vzc2VkTWFrZWZpbGUodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkpOworICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSkgeworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+R2V0Q29uZmlnTmFtZXMoKSkgeworICAgICAgdGhpcy0+V3JpdGVQcm9jZXNzZWRNYWtlZmlsZSh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShjb25maWcpKTsKKyAgICB9CisgIH0KKyAgdGhpcy0+V3JpdGVQcm9jZXNzZWRNYWtlZmlsZSh0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOwogI2lmZGVmIE5JTkpBX0dFTl9WRVJCT1NFX0ZJTEVTCiAgIHRoaXMtPldyaXRlUHJvY2Vzc2VkTWFrZWZpbGUodGhpcy0+R2V0UnVsZXNGaWxlU3RyZWFtKCkpOwogI2VuZGlmCkBAIC04MiwxOCArODgsMjYgQEAKICAgICB9CiAgIH0KIAotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGF1dG8gdGcgPSBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpOZXcodGFyZ2V0KTsKKyAgICBhdXRvIHRnID0gY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TmV3KHRhcmdldC5nZXQoKSk7CiAgICAgaWYgKHRnKSB7Ci0gICAgICB0Zy0+R2VuZXJhdGUoKTsKKyAgICAgIGlmICh0YXJnZXQtPlRhcmdldC0+SXNQZXJDb25maWcoKSkgeworICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkdldENvbmZpZ05hbWVzKCkpIHsKKyAgICAgICAgICB0Zy0+R2VuZXJhdGUoY29uZmlnKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGctPkdlbmVyYXRlKCIiKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIAotICB0aGlzLT5Xcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoKTsKLSAgdGhpcy0+QWRkaXRpb25hbENsZWFuRmlsZXMoKTsKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5HZXRDb25maWdOYW1lcygpKSB7CisgICAgdGhpcy0+V3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnRzKGNvbmZpZyk7CisgICAgdGhpcy0+QWRkaXRpb25hbENsZWFuRmlsZXMoY29uZmlnKTsKKyAgfQogfQogCiAvLyBUT0RPOiBQaWNrZWQgdXAgZnJvbSBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy4gIFJlZmFjdG9yIGl0LgpAQCAtMTMwLDggKzE0NCw5IEBACiAgIGJvb2wgZm9yY2VGdWxsUGF0aHMpCiB7CiAgIGlmIChmb3JjZUZ1bGxQYXRocykgewotICAgIHJldHVybiB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCk7CisgICAgcmV0dXJuIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCwgdGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKSwKKyAgICAgIGZvcm1hdCk7CiAgIH0KICAgcmV0dXJuIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aCh0aGlzLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwgcGF0aCksCkBAIC0xNDAsOSArMTU1LDE1IEBACiAKIC8vIFByaXZhdGUgbWV0aG9kcy4KIAotY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkdldEJ1aWxkRmlsZVN0cmVhbSgpIGNvbnN0CitjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6R2V0SW1wbEZpbGVTdHJlYW0oCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+R2V0QnVpbGRGaWxlU3RyZWFtKCk7CisgIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKTsKK30KKworY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkdldENvbW1vbkZpbGVTdHJlYW0oKSBjb25zdAoreworICByZXR1cm4gKnRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkdldENvbW1vbkZpbGVTdHJlYW0oKTsKIH0KIAogY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkdldFJ1bGVzRmlsZVN0cmVhbSgpIGNvbnN0CkBAIC0xNjIsMTAgKzE4MywyMiBAQAogCiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVCdWlsZEZpbGVUb3AoKQogewotICAvLyBGb3IgdGhlIGJ1aWxkIGZpbGUuCi0gIHRoaXMtPldyaXRlUHJvamVjdEhlYWRlcih0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSk7Ci0gIHRoaXMtPldyaXRlTmluamFSZXF1aXJlZFZlcnNpb24odGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkpOwotICB0aGlzLT5Xcml0ZU5pbmphRmlsZXNJbmNsdXNpb24odGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkpOworICB0aGlzLT5Xcml0ZVByb2plY3RIZWFkZXIodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpKTsKKworICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSkgeworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+R2V0Q29uZmlnTmFtZXMoKSkgeworICAgICAgYXV0byYgc3RyZWFtID0gdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKTsKKyAgICAgIHRoaXMtPldyaXRlUHJvamVjdEhlYWRlcihzdHJlYW0pOworICAgICAgdGhpcy0+V3JpdGVOaW5qYVJlcXVpcmVkVmVyc2lvbihzdHJlYW0pOworICAgICAgdGhpcy0+V3JpdGVOaW5qYUNvbmZpZ3VyYXRpb25WYXJpYWJsZShzdHJlYW0sIGNvbmZpZyk7CisgICAgICB0aGlzLT5Xcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db25maWcoc3RyZWFtKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgdGhpcy0+V3JpdGVOaW5qYVJlcXVpcmVkVmVyc2lvbih0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOworICAgIHRoaXMtPldyaXRlTmluamFDb25maWd1cmF0aW9uVmFyaWFibGUodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZXMoKS5mcm9udCgpKTsKKyAgfQorICB0aGlzLT5Xcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db21tb24odGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpKTsKIAogICAvLyBGb3IgdGhlIHJ1bGUgZmlsZS4KICAgdGhpcy0+V3JpdGVQcm9qZWN0SGVhZGVyKHRoaXMtPkdldFJ1bGVzRmlsZVN0cmVhbSgpKTsKQEAgLTE3NCw4ICsyMDcsOCBAQAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlUHJvamVjdEhlYWRlcihzdGQ6Om9zdHJlYW0mIG9zKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwotICBvcyA8PCAiIyBQcm9qZWN0OiAiIDw8IHRoaXMtPkdldFByb2plY3ROYW1lKCkgPDwgc3RkOjplbmRsCi0gICAgIDw8ICIjIENvbmZpZ3VyYXRpb246ICIgPDwgdGhpcy0+Q29uZmlnTmFtZSA8PCBzdGQ6OmVuZGw7CisgIG9zIDw8ICIjIFByb2plY3Q6ICIgPDwgdGhpcy0+R2V0UHJvamVjdE5hbWUoKSA8PCAnXG4nCisgICAgIDw8ICIjIENvbmZpZ3VyYXRpb25zOiAiIDw8IGNtSm9pbih0aGlzLT5HZXRDb25maWdOYW1lcygpLCAiLCAiKSA8PCAnXG4nOwogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwogfQogCkBAIC0yMDIsMzEgKzIzNSwzNyBAQAogCiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlQ29tbWVudCgKICAgICBvcywgIk1pbmltYWwgdmVyc2lvbiBvZiBOaW5qYSByZXF1aXJlZCBieSB0aGlzIGZpbGUiKTsKLSAgb3MgPDwgIm5pbmphX3JlcXVpcmVkX3ZlcnNpb24gPSAiIDw8IHJlcXVpcmVkVmVyc2lvbiA8PCBzdGQ6OmVuZGwKLSAgICAgPDwgc3RkOjplbmRsOworICBvcyA8PCAibmluamFfcmVxdWlyZWRfdmVyc2lvbiA9ICIgPDwgcmVxdWlyZWRWZXJzaW9uIDw8ICJcblxuIjsKK30KKwordm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlTmluamFDb25maWd1cmF0aW9uVmFyaWFibGUoCisgIHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCit7CisgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlVmFyaWFibGUoCisgICAgb3MsICJDT05GSUdVUkFUSU9OIiwgY29uZmlnLAorICAgICJTZXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgY3VzdG9tIGNvbW1hbmRzLiIpOwogfQogCiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVQb29scyhzdGQ6Om9zdHJlYW0mIG9zKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwogCi0gIGNvbnN0IGNoYXIqIGpvYnBvb2xzID0KKyAgY21Qcm9wIGpvYnBvb2xzID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJKT0JfUE9PTFMiKTsKICAgaWYgKCFqb2Jwb29scykgewotICAgIGpvYnBvb2xzID0gdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfSk9CX1BPT0xTIik7CisgICAgam9icG9vbHMgPSB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXREZWYoIkNNQUtFX0pPQl9QT09MUyIpOwogICB9CiAgIGlmIChqb2Jwb29scykgewogICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlQ29tbWVudCgKICAgICAgIG9zLCAiUG9vbHMgZGVmaW5lZCBieSBnbG9iYWwgcHJvcGVydHkgSk9CX1BPT0xTIik7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBvb2xzID0gY21FeHBhbmRlZExpc3Qoam9icG9vbHMpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwb29scyA9IGNtRXhwYW5kZWRMaXN0KCpqb2Jwb29scyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcG9vbCA6IHBvb2xzKSB7CiAgICAgICBjb25zdCBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVxID0gcG9vbC5maW5kKCc9Jyk7CiAgICAgICB1bnNpZ25lZCBpbnQgam9iczsKICAgICAgIGlmIChlcSAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJgogICAgICAgICAgIHNzY2FuZihwb29sLmNfc3RyKCkgKyBlcSwgIj0ldSIsICZqb2JzKSA9PSAxKSB7Ci0gICAgICAgIG9zIDw8ICJwb29sICIgPDwgcG9vbC5zdWJzdHIoMCwgZXEpIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgb3MgPDwgIiAgZGVwdGggPSAiIDw8IGpvYnMgPDwgc3RkOjplbmRsOwotICAgICAgICBvcyA8PCBzdGQ6OmVuZGw7CisgICAgICAgIG9zIDw8ICJwb29sICIgPDwgcG9vbC5zdWJzdHIoMCwgZXEpIDw8ICJcbiAgZGVwdGggPSAiIDw8IGpvYnMKKyAgICAgICAgICAgPDwgIlxuXG4iOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkludmFsaWQgcG9vbCBkZWZpbmVkIGJ5IHByb3BlcnR5ICdKT0JfUE9PTFMnOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCk7CkBAIC0yMzUsMTEgKzI3NCwyMyBAQAogICB9CiB9CiAKLXZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZU5pbmphRmlsZXNJbmNsdXNpb24oc3RkOjpvc3RyZWFtJiBvcykKK3ZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db25maWcoc3RkOjpvc3RyZWFtJiBvcykKIHsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKLSAgb3MgPDwgIiMgSW5jbHVkZSBhdXhpbGlhcnkgZmlsZXMuXG4iCi0gICAgIDw8ICJcbiI7CisgIG9zIDw8ICIjIEluY2x1ZGUgYXV4aWxpYXJ5IGZpbGVzLlxuXG4iOworICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yKiBuZyA9IHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IG5pbmphQ29tbW9uRmlsZSA9CisgICAgbmctPk5pbmphT3V0cHV0UGF0aChjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6Ok5JTkpBX0NPTU1PTl9GSUxFKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QgY29tbW9uRmlsZVBhdGggPSBuZy0+RW5jb2RlUGF0aChuaW5qYUNvbW1vbkZpbGUpOworICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZUluY2x1ZGUob3MsIGNvbW1vbkZpbGVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluY2x1ZGUgY29tbW9uIGZpbGUuIik7CisgIG9zIDw8ICJcbiI7Cit9CisKK3ZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db21tb24oc3RkOjpvc3RyZWFtJiBvcykKK3sKKyAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKKyAgb3MgPDwgIiMgSW5jbHVkZSBhdXhpbGlhcnkgZmlsZXMuXG5cbiI7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIG5nID0gdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgbmluamFSdWxlc0ZpbGUgPQogICAgIG5nLT5OaW5qYU91dHB1dFBhdGgoY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfUlVMRVNfRklMRSk7CkBAIC0yNTIsMzYgKzMwMyw0MSBAQAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlUHJvY2Vzc2VkTWFrZWZpbGUoc3RkOjpvc3RyZWFtJiBvcykKIHsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKLSAgb3MgPDwgIiMgV3JpdGUgc3RhdGVtZW50cyBkZWNsYXJlZCBpbiBDTWFrZUxpc3RzLnR4dDoiIDw8IHN0ZDo6ZW5kbAorICBvcyA8PCAiIyBXcml0ZSBzdGF0ZW1lbnRzIGRlY2xhcmVkIGluIENNYWtlTGlzdHMudHh0OlxuIgogICAgICA8PCAiIyAiIDw8IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9DVVJSRU5UX0xJU1RfRklMRSIpCi0gICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgPDwgJ1xuJzsKICAgaWYgKHRoaXMtPklzUm9vdE1ha2VmaWxlKCkpIHsKLSAgICBvcyA8PCAiIyBXaGljaCBpcyB0aGUgcm9vdCBmaWxlLiIgPDwgc3RkOjplbmRsOworICAgIG9zIDw8ICIjIFdoaWNoIGlzIHRoZSByb290IGZpbGUuXG4iOwogICB9CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7Ci0gIG9zIDw8IHN0ZDo6ZW5kbDsKKyAgb3MgPDwgJ1xuJzsKIH0KIAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkFwcGVuZFRhcmdldE91dHB1dHMoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFEZXBzJiBvdXRwdXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OaW5qYURlcHMmIG91dHB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldCwgb3V0cHV0cyk7CisgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldE91dHB1dHModGFyZ2V0LCBvdXRwdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiB9CiAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRUYXJnZXREZXBlbmRzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgb3V0cHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMpCiB7Ci0gIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHModGFyZ2V0LCBvdXRwdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMpOworICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXREZXBlbmRzKHRhcmdldCwgb3V0cHV0cywgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcsIGRlcGVuZHMpOwogfQogCiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6QXBwZW5kQ3VzdG9tQ29tbWFuZERlcHMoCi0gIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnLCBjbU5pbmphRGVwcyYgbmluamFEZXBzKQorICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY29uc3QmIGNjZywgY21OaW5qYURlcHMmIG5pbmphRGVwcywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGNjZy5HZXREZXBlbmRzKCkpIHsKICAgICBzdGQ6OnN0cmluZyBkZXA7Ci0gICAgaWYgKHRoaXMtPkdldFJlYWxEZXBlbmRlbmN5KGksIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgZGVwKSkgeworICAgIGlmICh0aGlzLT5HZXRSZWFsRGVwZW5kZW5jeShpLCBjb25maWcsIGRlcCkpIHsKICAgICAgIG5pbmphRGVwcy5wdXNoX2JhY2soCiAgICAgICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkNvbnZlcnRUb05pbmphUGF0aChkZXApKTsKICAgICB9CkBAIC00MTYsNiArNDcyLDggQEAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRDdXN0b21Db21tYW5kTGluZXMoCiAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNtZExpbmVzKQogeworICBhdXRvKiBnZyA9IHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCk7CisKICAgaWYgKGNjZy5HZXROdW1iZXJPZkNvbW1hbmRzKCkgPiAwKSB7CiAgICAgc3RkOjpzdHJpbmcgd2QgPSBjY2cuR2V0V29ya2luZ0RpcmVjdG9yeSgpOwogICAgIGlmICh3ZC5lbXB0eSgpKSB7CkBAIC00MzcsOCArNDk1LDEwIEBACiAKICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBjY2cuR2V0TnVtYmVyT2ZDb21tYW5kcygpOyArK2kpIHsKICAgICBjbWRMaW5lcy5wdXNoX2JhY2sobGF1bmNoZXIgKwotICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoY2NnLkdldENvbW1hbmQoaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgIGNjZy5HZXRDb21tYW5kKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdnLT5Jc011bHRpQ29uZmlnKCkgPyBjbU91dHB1dENvbnZlcnRlcjo6TklOSkFNVUxUSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpKTsKIAogICAgIHN0ZDo6c3RyaW5nJiBjbWQgPSBjbWRMaW5lcy5iYWNrKCk7CiAgICAgY2NnLkFwcGVuZEFyZ3VtZW50cyhpLCBjbWQpOwpAQCAtNDQ2LDE0ICs1MDYsMTUgQEAKIH0KIAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlQ3VzdG9tQ29tbWFuZEJ1aWxkU3RhdGVtZW50KAotICBjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjLCBjb25zdCBjbU5pbmphRGVwcyYgb3JkZXJPbmx5RGVwcykKKyAgY21DdXN0b21Db21tYW5kIGNvbnN0KiBjYywgY29uc3QgY21OaW5qYURlcHMmIG9yZGVyT25seURlcHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIGdnID0gdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKTsKLSAgaWYgKGdnLT5TZWVuQ3VzdG9tQ29tbWFuZChjYykpIHsKKyAgaWYgKGdnLT5TZWVuQ3VzdG9tQ29tbWFuZChjYywgY29uZmlnKSkgewogICAgIHJldHVybjsKICAgfQogCi0gIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coKmNjLCB0aGlzLT5HZXRDb25maWdOYW1lKCksIHRoaXMpOworICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgY29uZmlnLCB0aGlzKTsKIAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMgPSBjY2cuR2V0T3V0cHV0cygpOwogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMgPSBjY2cuR2V0Qnlwcm9kdWN0cygpOwpAQCAtNDg0LDcgKzU0NSw3IEBACiAgIH0KIAogICBjbU5pbmphRGVwcyBuaW5qYURlcHM7Ci0gIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmREZXBzKGNjZywgbmluamFEZXBzKTsKKyAgdGhpcy0+QXBwZW5kQ3VzdG9tQ29tbWFuZERlcHMoY2NnLCBuaW5qYURlcHMsIGNvbmZpZyk7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtZExpbmVzOwogICB0aGlzLT5BcHBlbmRDdXN0b21Db21tYW5kTGluZXMoY2NnLCBjbWRMaW5lcyk7CkBAIC00OTUsNyArNTU2LDcgQEAKICAgICBidWlsZC5PdXRwdXRzID0gc3RkOjptb3ZlKG5pbmphT3V0cHV0cyk7CiAgICAgYnVpbGQuRXhwbGljaXREZXBzID0gc3RkOjptb3ZlKG5pbmphRGVwcyk7CiAgICAgYnVpbGQuT3JkZXJPbmx5RGVwcyA9IG9yZGVyT25seURlcHM7Ci0gICAgZ2ctPldyaXRlQnVpbGQodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCksIGJ1aWxkKTsKKyAgICBnZy0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShjb25maWcpLCBidWlsZCk7CiAgIH0gZWxzZSB7CiAgICAgc3RkOjpzdHJpbmcgY3VzdG9tU3RlcCA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShuaW5qYU91dHB1dHNbMF0pOwogICAgIC8vIEhhc2ggZnVsbCBwYXRoIHRvIG1ha2UgdW5pcXVlLgpAQCAtNTA3LDggKzU2OCw4IEBACiAgICAgICB0aGlzLT5CdWlsZENvbW1hbmRMaW5lKGNtZExpbmVzLCBjdXN0b21TdGVwKSwKICAgICAgIHRoaXMtPkNvbnN0cnVjdENvbW1lbnQoY2NnKSwgIkN1c3RvbSBjb21tYW5kIGZvciAiICsgbmluamFPdXRwdXRzWzBdLAogICAgICAgY2MtPkdldERlcGZpbGUoKSwgY2MtPkdldEpvYlBvb2woKSwgY2MtPkdldFVzZXNUZXJtaW5hbCgpLAotICAgICAgLypyZXN0YXQqLyAhc3ltYm9saWMgfHwgIWJ5cHJvZHVjdHMuZW1wdHkoKSwgbmluamFPdXRwdXRzLCBuaW5qYURlcHMsCi0gICAgICBvcmRlck9ubHlEZXBzKTsKKyAgICAgIC8qcmVzdGF0Ki8gIXN5bWJvbGljIHx8ICFieXByb2R1Y3RzLmVtcHR5KCksIG5pbmphT3V0cHV0cywgY29uZmlnLAorICAgICAgbmluamFEZXBzLCBvcmRlck9ubHlEZXBzKTsKICAgfQogfQogCkBAIC01MjQsNyArNTg1LDggQEAKICAgaW5zLmZpcnN0LT5zZWNvbmQuaW5zZXJ0KHRhcmdldCk7CiB9CiAKLXZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoKQordm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlQ3VzdG9tQ29tbWFuZEJ1aWxkU3RhdGVtZW50cygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgZm9yIChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGN1c3RvbUNvbW1hbmQgOiB0aGlzLT5DdXN0b21Db21tYW5kcykgewogICAgIGF1dG8gaSA9IHRoaXMtPkN1c3RvbUNvbW1hbmRUYXJnZXRzLmZpbmQoY3VzdG9tQ29tbWFuZCk7CkBAIC01NDIsMTUgKzYwNCwxNiBAQAogICAgIGF1dG8gaiA9IGktPnNlY29uZC5iZWdpbigpOwogICAgIGFzc2VydChqICE9IGktPnNlY29uZC5lbmQoKSk7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNjVGFyZ2V0RGVwczsKLSAgICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZSgqaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY1RhcmdldERlcHMpOworICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKAorICAgICAgKmosIGNjVGFyZ2V0RGVwcywgY29uZmlnKTsKICAgICBzdGQ6OnNvcnQoY2NUYXJnZXREZXBzLmJlZ2luKCksIGNjVGFyZ2V0RGVwcy5lbmQoKSk7CiAgICAgKytqOwogCiAgICAgZm9yICg7IGogIT0gaS0+c2Vjb25kLmVuZCgpOyArK2opIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBqRGVwczsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBzSW50ZXJzZWN0aW9uOwotICAgICAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoKmosIGpEZXBzKTsKKyAgICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKCpqLCBqRGVwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgICAgICBzdGQ6OnNvcnQoakRlcHMuYmVnaW4oKSwgakRlcHMuZW5kKCkpOwogICAgICAgc3RkOjpzZXRfaW50ZXJzZWN0aW9uKGNjVGFyZ2V0RGVwcy5iZWdpbigpLCBjY1RhcmdldERlcHMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgakRlcHMuYmVnaW4oKSwgakRlcHMuZW5kKCksCkBAIC01NTgsNyArNjIxLDcgQEAKICAgICAgIGNjVGFyZ2V0RGVwcyA9IGRlcHNJbnRlcnNlY3Rpb247CiAgICAgfQogCi0gICAgdGhpcy0+V3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnQoaS0+Zmlyc3QsIGNjVGFyZ2V0RGVwcyk7CisgICAgdGhpcy0+V3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnQoaS0+Zmlyc3QsIGNjVGFyZ2V0RGVwcywgY29uZmlnKTsKICAgfQogfQogCkBAIC01OTksMTUgKzY2MiwxMyBAQAogICByZXR1cm4gbGF1bmNoZXI7CiB9CiAKLXZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpBZGRpdGlvbmFsQ2xlYW5GaWxlcygpCit2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6QWRkaXRpb25hbENsZWFuRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgaWYgKGNvbnN0IGNoYXIqIHByb3BfdmFsdWUgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIkFERElUSU9OQUxfQ0xFQU5fRklMRVMiKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbGVhbkZpbGVzOwogICAgIHsKLSAgICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICAgICAgICAgICAgICAgICAgICAgcHJvcF92YWx1ZSwgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQlVJTERfVFlQRSIpKSwKKyAgICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKHByb3BfdmFsdWUsIHRoaXMsIGNvbmZpZyksCiAgICAgICAgICAgICAgICAgICAgY2xlYW5GaWxlcyk7CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPSB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CkBAIC02MTUsNyArNjc2LDcgQEAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjbGVhbkZpbGUgOiBjbGVhbkZpbGVzKSB7CiAgICAgICAvLyBTdXBwb3J0IHJlbGF0aXZlIHBhdGhzCiAgICAgICBnZy0+QWRkQWRkaXRpb25hbENsZWFuRmlsZSgKLSAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjbGVhbkZpbGUsIGJpbmFyeURpcikpOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNsZWFuRmlsZSwgYmluYXJ5RGlyKSwgY29uZmlnKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuaAppbmRleCBmNjQ1MzRjLi5lZjE2MGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbE5pbmphR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5oCkBAIC02NCw5ICs2NCwxMSBAQAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjdXN0b21TdGVwID0gc3RkOjpzdHJpbmcoKSwKICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0ID0gbnVsbHB0cikgY29uc3Q7CiAKLSAgdm9pZCBBcHBlbmRUYXJnZXRPdXRwdXRzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzKTsKKyAgdm9pZCBBcHBlbmRUYXJnZXRPdXRwdXRzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIHZvaWQgQXBwZW5kVGFyZ2V0RGVwZW5kcygKLSAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywKKyAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKICAgICBjbU5pbmphVGFyZ2V0RGVwZW5kcyBkZXBlbmRzID0gRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CiAKICAgdm9pZCBBZGRDdXN0b21Db21tYW5kVGFyZ2V0KGNtQ3VzdG9tQ29tbWFuZCBjb25zdCogY2MsCkBAIC03NCw3ICs3Niw4IEBACiAgIHZvaWQgQXBwZW5kQ3VzdG9tQ29tbWFuZExpbmVzKGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNtZExpbmVzKTsKICAgdm9pZCBBcHBlbmRDdXN0b21Db21tYW5kRGVwcyhjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY29uc3QmIGNjZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgbmluamFEZXBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgbmluamFEZXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiBwcm90ZWN0ZWQ6CiAgIHN0ZDo6c3RyaW5nIENvbnZlcnRUb0luY2x1ZGVSZWZlcmVuY2UoCkBAIC04MywyMCArODYsMjUgQEAKICAgICBib29sIGZvcmNlRnVsbFBhdGhzID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldEJ1aWxkRmlsZVN0cmVhbSgpIGNvbnN0OworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldEltcGxGaWxlU3RyZWFtKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldENvbW1vbkZpbGVTdHJlYW0oKSBjb25zdDsKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBHZXRSdWxlc0ZpbGVTdHJlYW0oKSBjb25zdDsKIAogICB2b2lkIFdyaXRlQnVpbGRGaWxlVG9wKCk7CiAgIHZvaWQgV3JpdGVQcm9qZWN0SGVhZGVyKHN0ZDo6b3N0cmVhbSYgb3MpOwogICB2b2lkIFdyaXRlTmluamFSZXF1aXJlZFZlcnNpb24oc3RkOjpvc3RyZWFtJiBvcyk7Ci0gIHZvaWQgV3JpdGVOaW5qYUZpbGVzSW5jbHVzaW9uKHN0ZDo6b3N0cmVhbSYgb3MpOworICB2b2lkIFdyaXRlTmluamFDb25maWd1cmF0aW9uVmFyaWFibGUoc3RkOjpvc3RyZWFtJiBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICB2b2lkIFdyaXRlTmluamFGaWxlc0luY2x1c2lvbkNvbmZpZyhzdGQ6Om9zdHJlYW0mIG9zKTsKKyAgdm9pZCBXcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db21tb24oc3RkOjpvc3RyZWFtJiBvcyk7CiAgIHZvaWQgV3JpdGVQcm9jZXNzZWRNYWtlZmlsZShzdGQ6Om9zdHJlYW0mIG9zKTsKICAgdm9pZCBXcml0ZVBvb2xzKHN0ZDo6b3N0cmVhbSYgb3MpOwogCiAgIHZvaWQgV3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnQoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbU5pbmphRGVwcyYgb3JkZXJPbmx5RGVwcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21OaW5qYURlcHMmIG9yZGVyT25seURlcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKLSAgdm9pZCBXcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoKTsKKyAgdm9pZCBXcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RkOjpzdHJpbmcgTWFrZUN1c3RvbUxhdW5jaGVyKGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnKTsKIApAQCAtMTA0LDcgKzExMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY3VzdG9tU3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQpIGNvbnN0OwogCi0gIHZvaWQgQWRkaXRpb25hbENsZWFuRmlsZXMoKTsKKyAgdm9pZCBBZGRpdGlvbmFsQ2xlYW5GaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAogICBzdGQ6OnN0cmluZyBIb21lUmVsYXRpdmVPdXRwdXRQYXRoOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4IGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmN4eAppbmRleCA5MTlmYjc0Li41OTNhNmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5jeHgKQEAgLTMsMTYgKzMsMTggQEAKICNpbmNsdWRlICJjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS92ZWN0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvVGVybWluYWwuaCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtRmlsZVRpbWVDYWNoZS5oIgpAQCAtMTA2LDYgKzEwOCwxMyBAQAogCiBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6fmNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKCkgPSBkZWZhdWx0OwogCitzdGQ6OnN0cmluZyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6R2V0Q29uZmlnTmFtZSgpIGNvbnN0Cit7CisgIGF1dG8gY29uc3QmIGNvbmZpZ05hbWVzID0gdGhpcy0+R2V0Q29uZmlnTmFtZXMoKTsKKyAgYXNzZXJ0KGNvbmZpZ05hbWVzLnNpemUoKSA9PSAxKTsKKyAgcmV0dXJuIGNvbmZpZ05hbWVzLmZyb250KCk7Cit9CisKIHZvaWQgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkdlbmVyYXRlKCkKIHsKICAgLy8gUmVjb3JkIHdoZXRoZXIgc29tZSBvcHRpb25zIGFyZSBlbmFibGVkIHRvIGF2b2lkIGNoZWNraW5nIG1hbnkKQEAgLTEyMSwxMiArMTMwLDEyIEBACiAgIC8vIEdlbmVyYXRlIHRoZSBydWxlIGZpbGVzIGZvciBlYWNoIHRhcmdldC4KICAgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBnZyA9CiAgICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4odGhpcy0+R2xvYmFsR2VuZXJhdG9yKTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcj4gdGcoCi0gICAgICBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpOZXcodGFyZ2V0KSk7CisgICAgICBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpOZXcodGFyZ2V0LmdldCgpKSk7CiAgICAgaWYgKHRnKSB7CiAgICAgICB0Zy0+V3JpdGVSdWxlRmlsZXMoKTsKICAgICAgIGdnLT5SZWNvcmRUYXJnZXRQcm9ncmVzcyh0Zy5nZXQoKSk7CkBAIC0xNTcsMTUgKzE2NiwxNSBAQAogdm9pZCBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6R2V0TG9jYWxPYmplY3RGaWxlcygKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIExvY2FsT2JqZWN0SW5mbz4mIGxvY2FsT2JqZWN0RmlsZXMpCiB7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIGd0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ3QgOiB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICBpZiAoZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gb2JqZWN0U291cmNlczsKLSAgICBndC0+R2V0T2JqZWN0U291cmNlcyhvYmplY3RTb3VyY2VzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICBndC0+R2V0T2JqZWN0U291cmNlcyhvYmplY3RTb3VyY2VzLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIC8vIENvbXB1dGUgZnVsbCBwYXRoIHRvIG9iamVjdCBmaWxlIGRpcmVjdG9yeSBmb3IgdGhpcyB0YXJnZXQuCiAgICAgc3RkOjpzdHJpbmcgZGlyID0gY21TdHJDYXQoZ3QtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLCB0aGlzLT5HZXRUYXJnZXREaXJlY3RvcnkoZ3QpLCAnLycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJywgdGhpcy0+R2V0VGFyZ2V0RGlyZWN0b3J5KGd0LmdldCgpKSwgJy8nKTsKICAgICAvLyBDb21wdXRlIHRoZSBuYW1lIG9mIGVhY2ggb2JqZWN0IGZpbGUuCiAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogb2JqZWN0U291cmNlcykgewogICAgICAgYm9vbCBoYXNTb3VyY2VFeHRlbnNpb24gPSB0cnVlOwpAQCAtMTc2LDcgKzE4NSw3IEBACiAgICAgICB9CiAgICAgICBMb2NhbE9iamVjdEluZm8mIGluZm8gPSBsb2NhbE9iamVjdEZpbGVzW29iamVjdE5hbWVdOwogICAgICAgaW5mby5IYXNTb3VyY2VFeHRlbnNpb24gPSBoYXNTb3VyY2VFeHRlbnNpb247Ci0gICAgICBpbmZvLmVtcGxhY2VfYmFjayhndCwgc2YtPkdldExhbmd1YWdlKCkpOworICAgICAgaW5mby5lbXBsYWNlX2JhY2soZ3QuZ2V0KCksIHNmLT5HZXRMYW5ndWFnZSgpKTsKICAgICB9CiAgIH0KIH0KQEAgLTM1Miw3ICszNjEsNyBAQAogICAvLyBmb3IgZWFjaCB0YXJnZXQgd2UganVzdCBwcm92aWRlIGEgcnVsZSB0byBjZCB1cCB0byB0aGUgdG9wIGFuZCBkbyBhIG1ha2UKICAgLy8gb24gdGhlIHRhcmdldAogICBzdGQ6OnN0cmluZyBsb2NhbE5hbWU7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgIGlmICgodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB8fAogICAgICAgICAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSkgfHwKICAgICAgICAgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHx8CkBAIC0zNjIsNyArMzcxLDggQEAKICAgICAgIGVtaXR0ZWQuaW5zZXJ0KHRhcmdldC0+R2V0TmFtZSgpKTsKIAogICAgICAgLy8gZm9yIHN1YmRpcnMgYWRkIGEgcnVsZSB0byBidWlsZCB0aGlzIHNwZWNpZmljIHRhcmdldCBieSBuYW1lLgotICAgICAgbG9jYWxOYW1lID0gY21TdHJDYXQodGhpcy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkodGFyZ2V0KSwgIi9ydWxlIik7CisgICAgICBsb2NhbE5hbWUgPQorICAgICAgICBjbVN0ckNhdCh0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQuZ2V0KCkpLCAiL3J1bGUiKTsKICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CiAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAKQEAgLTM4MywxMSArMzkzLDExIEBACiAgICAgICB9CiAKICAgICAgIC8vIEFkZCBhIGZhc3QgcnVsZSB0byBidWlsZCB0aGUgdGFyZ2V0Ci0gICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWUgPQotICAgICAgICBjbVN0ckNhdCh0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQpLCAiL2J1aWxkLm1ha2UiKTsKKyAgICAgIHN0ZDo6c3RyaW5nIG1ha2VmaWxlTmFtZSA9IGNtU3RyQ2F0KAorICAgICAgICB0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQuZ2V0KCkpLCAiL2J1aWxkLm1ha2UiKTsKICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbWFrZWZpbGUgbmFtZSBpcyBzdWl0YWJsZSBmb3IgYSBtYWtlZmlsZQogICAgICAgc3RkOjpzdHJpbmcgbWFrZVRhcmdldE5hbWUgPQotICAgICAgICBjbVN0ckNhdCh0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQpLCAiL2J1aWxkIik7CisgICAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KHRhcmdldC5nZXQoKSksICIvYnVpbGQiKTsKICAgICAgIGxvY2FsTmFtZSA9IGNtU3RyQ2F0KHRhcmdldC0+R2V0TmFtZSgpLCAiL2Zhc3QiKTsKICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CkBAIC00MDAsOSArNDEwLDkgQEAKIAogICAgICAgLy8gQWRkIGEgbG9jYWwgbmFtZSBmb3IgdGhlIHJ1bGUgdG8gcmVsaW5rIHRoZSB0YXJnZXQgYmVmb3JlCiAgICAgICAvLyBpbnN0YWxsYXRpb24uCi0gICAgICBpZiAodGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCh0aGlzLT5Db25maWdOYW1lKSkgewotICAgICAgICBtYWtlVGFyZ2V0TmFtZSA9Ci0gICAgICAgICAgY21TdHJDYXQodGhpcy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkodGFyZ2V0KSwgIi9wcmVpbnN0YWxsIik7CisgICAgICBpZiAodGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCh0aGlzLT5HZXRDb25maWdOYW1lKCkpKSB7CisgICAgICAgIG1ha2VUYXJnZXROYW1lID0gY21TdHJDYXQoCisgICAgICAgICAgdGhpcy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkodGFyZ2V0LmdldCgpKSwgIi9wcmVpbnN0YWxsIik7CiAgICAgICAgIGxvY2FsTmFtZSA9IGNtU3RyQ2F0KHRhcmdldC0+R2V0TmFtZSgpLCAiL3ByZWluc3RhbGwiKTsKICAgICAgICAgZGVwZW5kcy5jbGVhcigpOwogICAgICAgICBjb21tYW5kcy5jbGVhcigpOwpAQCAtNjEzLDggKzYyMyw3IEBACiAgICAgdGhpcy0+TWF5YmVDb252ZXJ0V2F0Y29tU2hlbGxDb21tYW5kKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKTsKICAgaWYgKGNtYWtlU2hlbGxDb21tYW5kLmVtcHR5KCkpIHsKICAgICBjbWFrZVNoZWxsQ29tbWFuZCA9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCkpLAotICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICB9CiAKICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwpAQCAtNjI4LDcgKzYzNyw3IEBACiAgICAgPDwgIiMgVGhlIGNvbW1hbmQgdG8gcmVtb3ZlIGEgZmlsZS5cbiIKICAgICA8PCAiUk0gPSAiCiAgICAgPDwgY21ha2VTaGVsbENvbW1hbmQKLSAgICA8PCAiIC1FIHJlbW92ZSAtZlxuIgorICAgIDw8ICIgLUUgcm0gLWZcbiIKICAgICA8PCAiXG4iOwogICBtYWtlZmlsZVN0cmVhbQogICAgIDw8ICIjIEVzY2FwaW5nIGZvciBzcGVjaWFsIGNoYXJhY3RlcnMuXG4iCkBAIC02MzgsMTYgKzY0NywxNCBAQAogICAgIDw8ICIjIFRoZSB0b3AtbGV2ZWwgc291cmNlIGRpcmVjdG9yeSBvbiB3aGljaCBDTWFrZSB3YXMgcnVuLlxuIgogICAgIDw8ICJDTUFLRV9TT1VSQ0VfRElSID0gIgogICAgIDw8IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodGhpcy0+R2V0U291cmNlRGlyZWN0b3J5KCkpLAotICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQorICAgICAgdGhpcy0+R2V0U291cmNlRGlyZWN0b3J5KCksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICA8PCAiXG4iCiAgICAgPDwgIlxuIjsKICAgbWFrZWZpbGVTdHJlYW0KICAgICA8PCAiIyBUaGUgdG9wLWxldmVsIGJ1aWxkIGRpcmVjdG9yeSBvbiB3aGljaCBDTWFrZSB3YXMgcnVuLlxuIgogICAgIDw8ICJDTUFLRV9CSU5BUllfRElSID0gIgogICAgIDw8IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodGhpcy0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpLAotICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQorICAgICAgdGhpcy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICA8PCAiXG4iCiAgICAgPDwgIlxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCkBAIC02NzMsOSArNjgwLDE1IEBACiAgIGlmICghdGhpcy0+SXNOTWFrZSgpICYmICF0aGlzLT5Jc1dhdGNvbVdNYWtlKCkgJiYKICAgICAgICF0aGlzLT5Cb3JsYW5kTWFrZUN1cmx5SGFjaykgewogICAgIC8vIHR1cm4gb2ZmIFJDUyBhbmQgU0NDUyBhdXRvbWF0aWMgc3R1ZmYgZnJvbSBnbWFrZQotICAgIG1ha2VmaWxlU3RyZWFtCi0gICAgICA8PCAiIyBSZW1vdmUgc29tZSBydWxlcyBmcm9tIGdtYWtlIHRoYXQgLlNVRkZJWEVTIGRvZXMgbm90IHJlbW92ZS5cbiIKLSAgICAgIDw8ICJTVUZGSVhFUyA9XG5cbiI7CisgICAgY29uc3RleHByIGNvbnN0IGNoYXIqIHZjc19ydWxlc1tdID0geworICAgICAgIiUsdiIsICJSQ1MvJSIsICJSQ1MvJSx2IiwgIlNDQ1Mvcy4lIiwgInMuJSIsCisgICAgfTsKKyAgICBmb3IgKGF1dG8gdmNzX3J1bGUgOiB2Y3NfcnVsZXMpIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2Y3NfZGVwZW5kOworICAgICAgdmNzX2RlcGVuZC5lbXBsYWNlX2JhY2sodmNzX3J1bGUpOworICAgICAgdGhpcy0+V3JpdGVNYWtlUnVsZShtYWtlZmlsZVN0cmVhbSwgIkRpc2FibGUgVkNTLWJhc2VkIGltcGxpY2l0IHJ1bGVzLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiwgdmNzX2RlcGVuZCwgbm9fY29tbWFuZHMsIGZhbHNlKTsKKyAgICB9CiAgIH0KICAgLy8gQWRkIGEgZmFrZSBzdWZmaXggdG8ga2VlcCBIUCBoYXBweS4gIE11c3QgYmUgbWF4IDMyIGNoYXJzIGZvciBTR0kgbWFrZS4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHM7CkBAIC04NTMsNyArODY2LDcgQEAKICAgLy8gQWRkIGEgZGVwZW5kZW5jeSBvbiB0aGUgcnVsZSBmaWxlIGl0c2VsZiB1bmxlc3MgYW4gb3B0aW9uIHRvIHNraXAKICAgLy8gaXQgaXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQgYnkgdGhlIHVzZXIgb3IgcHJvamVjdC4KICAgaWYgKCF0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfU0tJUF9SVUxFX0RFUEVOREVOQ1kiKSkgewotICAgIGNtQXBwZW5kKGRlcGVuZHMsIHJ1bGVGaWxlcyk7CisgICAgY206OmFwcGVuZChkZXBlbmRzLCBydWxlRmlsZXMpOwogICB9CiB9CiAKQEAgLTg2MSw3ICs4NzQsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsIGNvbnN0IHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4mIGNjcykKIHsKICAgZm9yIChjbUN1c3RvbUNvbW1hbmQgY29uc3QmIGNjIDogY2NzKSB7Ci0gICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZyhjYywgdGhpcy0+Q29uZmlnTmFtZSwgdGhpcyk7CisgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZyhjYywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCB0aGlzKTsKICAgICB0aGlzLT5BcHBlbmRDdXN0b21EZXBlbmQoZGVwZW5kcywgY2NnKTsKICAgfQogfQpAQCAtODcyLDcgKzg4NSw3IEBACiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBjY2cuR2V0RGVwZW5kcygpKSB7CiAgICAgLy8gTG9va3VwIHRoZSByZWFsIG5hbWUgb2YgdGhlIGRlcGVuZGVuY3kgaW4gY2FzZSBpdCBpcyBhIENNYWtlIHRhcmdldC4KICAgICBzdGQ6OnN0cmluZyBkZXA7Ci0gICAgaWYgKHRoaXMtPkdldFJlYWxEZXBlbmRlbmN5KGQsIHRoaXMtPkNvbmZpZ05hbWUsIGRlcCkpIHsKKyAgICBpZiAodGhpcy0+R2V0UmVhbERlcGVuZGVuY3koZCwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBkZXApKSB7CiAgICAgICBkZXBlbmRzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZGVwKSk7CiAgICAgfQogICB9CkBAIC04ODMsNyArODk2LDcgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIHJlbGF0aXZlKQogewogICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2MgOiBjY3MpIHsKLSAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNjLCB0aGlzLT5Db25maWdOYW1lLCB0aGlzKTsKKyAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNjLCB0aGlzLT5HZXRDb25maWdOYW1lKCksIHRoaXMpOwogICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmQoY29tbWFuZHMsIGNjZywgdGFyZ2V0LCByZWxhdGl2ZSwgdHJ1ZSk7CiAgIH0KIH0KQEAgLTk2Miw3ICs5NzUsOCBAQAogICAgICAgICAvLyBFeHBhbmQgcnVsZSB2YXJpYWJsZXMgcmVmZXJlbmNlZCBpbiB0aGUgZ2l2ZW4gbGF1bmNoZXIgY29tbWFuZC4KICAgICAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgICAgICB2YXJzLkNNVGFyZ2V0TmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpLmNfc3RyKCk7Ci0gICAgICAgIHZhcnMuQ01UYXJnZXRUeXBlID0gY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0LT5HZXRUeXBlKCkpOworICAgICAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9CisgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0LT5HZXRUeXBlKCkpLmNfc3RyKCk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzID0gY2NnLkdldE91dHB1dHMoKTsKICAgICAgICAgaWYgKCFvdXRwdXRzLmVtcHR5KCkpIHsKQEAgLTEwMjYsNyArMTA0MCw3IEBACiAgIHRoaXMtPkNyZWF0ZUNEQ29tbWFuZChjb21tYW5kczEsIGRpciwgcmVsYXRpdmUpOwogCiAgIC8vIHB1c2ggYmFjayB0aGUgY3VzdG9tIGNvbW1hbmRzCi0gIGNtQXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOworICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOwogfQogCiB2b2lkIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpBcHBlbmRDbGVhbkNvbW1hbmQoCkBAIC0xMDQxLDEwICsxMDU1LDkgQEAKICAgICBjbGVhbmZpbGUgKz0gZmlsZW5hbWU7CiAgIH0KICAgY2xlYW5maWxlICs9ICIuY21ha2UiOwotICBzdGQ6OnN0cmluZyBjbGVhbmZpbGVQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjbGVhbmZpbGUpOwotICBjbXN5czo6b2ZzdHJlYW0gZm91dChjbGVhbmZpbGVQYXRoLmNfc3RyKCkpOworICBjbXN5czo6b2ZzdHJlYW0gZm91dChjbGVhbmZpbGUuY19zdHIoKSk7CiAgIGlmICghZm91dCkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb3VsZCBub3QgY3JlYXRlICIgKyBjbGVhbmZpbGVQYXRoKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQ291bGQgbm90IGNyZWF0ZSAiICsgY2xlYW5maWxlKTsKICAgfQogICBpZiAoIWZpbGVzLmVtcHR5KCkpIHsKICAgICBmb3V0IDw8ICJmaWxlKFJFTU9WRV9SRUNVUlNFXG4iOwpAQCAtMTA5NywxOCArMTExMCwxNiBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGNtTG9jYWxHZW5lcmF0b3IqIHJvb3RMRyA9Ci0gICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldExvY2FsR2VuZXJhdG9ycygpLmF0KDApOworICBjb25zdCBhdXRvJiByb290TEcgPSB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TG9jYWxHZW5lcmF0b3JzKCkuYXQoMCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPSByb290TEctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKICAgc3RkOjpzdHJpbmcgY29uc3QmIGN1cnJlbnRCaW5hcnlEaXIgPSB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CiAgIHN0ZDo6c3RyaW5nIGNsZWFuZmlsZSA9CiAgICAgY21TdHJDYXQoY3VycmVudEJpbmFyeURpciwgIi9DTWFrZUZpbGVzL2NtYWtlX2RpcmVjdG9yeV9jbGVhbi5jbWFrZSIpOwogICAvLyBXcml0ZSBjbGVhbiBzY3JpcHQKICAgewotICAgIHN0ZDo6c3RyaW5nIGNsZWFuZmlsZVBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNsZWFuZmlsZSk7Ci0gICAgY21zeXM6Om9mc3RyZWFtIGZvdXQoY2xlYW5maWxlUGF0aC5jX3N0cigpKTsKKyAgICBjbXN5czo6b2ZzdHJlYW0gZm91dChjbGVhbmZpbGUuY19zdHIoKSk7CiAgICAgaWYgKCFmb3V0KSB7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQ291bGQgbm90IGNyZWF0ZSAiICsgY2xlYW5maWxlUGF0aCk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQ291bGQgbm90IGNyZWF0ZSAiICsgY2xlYW5maWxlKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm91dCA8PCAiZmlsZShSRU1PVkVfUkVDVVJTRVxuIjsKQEAgLTExNzksOSArMTE5MCw4IEBACiAgICAgICAgICAgICBjb2xvcl9uYW1lKTsKICAgICAgICAgICBpZiAocHJvZ3Jlc3MpIHsKICAgICAgICAgICAgIGNtZCArPSAiLS1wcm9ncmVzcy1kaXI9IjsKLSAgICAgICAgICAgIGNtZCArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3MtPkRpciksCi0gICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgICAgICBjbWQgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzLT5EaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgICAgICAgICBjbWQgKz0gIiAiOwogICAgICAgICAgICAgY21kICs9ICItLXByb2dyZXNzLW51bT0iOwogICAgICAgICAgICAgY21kICs9IHByb2dyZXNzLT5Bcmc7CkBAIC0xMzE2LDEwICsxMzI2LDkgQEAKICAgICBpbnQgcmVzdWx0OwogICAgIGlmICghZnRjLT5Db21wYXJlKGludGVybmFsRGVwZW5kRmlsZSwgdGd0SW5mbywgJnJlc3VsdCkgfHwgcmVzdWx0IDwgMCkgewogICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKLSAgICAgICAgbXNnIDw8ICJEZXBlbmRlZSBcIiIgPDwgdGd0SW5mbyA8PCAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIKLSAgICAgICAgICAgIDw8IGludGVybmFsRGVwZW5kRmlsZSA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChtc2cuc3RyKCkpOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQoY21TdHJDYXQoIkRlcGVuZGVlIFwiIiwgdGd0SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsRGVwZW5kRmlsZSwgIlwiLlxuIikpOwogICAgICAgfQogICAgICAgbmVlZFJlc2NhbkRlcGVuZEluZm8gPSB0cnVlOwogICAgIH0KQEAgLTEzMzYsMTAgKzEzNDUsOSBAQAogICAgIGlmICghZnRjLT5Db21wYXJlKGludGVybmFsRGVwZW5kRmlsZSwgZGlySW5mb0ZpbGUsICZyZXN1bHQpIHx8CiAgICAgICAgIHJlc3VsdCA8IDApIHsKICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICAgIG1zZyA8PCAiRGVwZW5kZWUgXCIiIDw8IGRpckluZm9GaWxlIDw8ICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgPDwgaW50ZXJuYWxEZXBlbmRGaWxlIDw8ICJcIi4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChjbVN0ckNhdCgiRGVwZW5kZWUgXCIiLCBkaXJJbmZvRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsRGVwZW5kRmlsZSwgIlwiLlxuIikpOwogICAgICAgfQogICAgICAgbmVlZFJlc2NhbkRpckluZm8gPSB0cnVlOwogICAgIH0KQEAgLTE1MDUsMTEgKzE1MTMsOSBAQAogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGRlcGVuZGVlKSAmJgogICAgICAgICAhY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhkZXBlbmRlcikpIHsKICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICAgIG1zZyA8PCAiRGVsZXRpbmcgcHJpbWFyeSBjdXN0b20gY29tbWFuZCBvdXRwdXQgXCIiIDw8IGRlcGVuZGVlCi0gICAgICAgICAgICA8PCAiXCIgYmVjYXVzZSBhbm90aGVyIG91dHB1dCBcIiIgPDwgZGVwZW5kZXIKLSAgICAgICAgICAgIDw8ICJcIiBkb2VzIG5vdCBleGlzdC4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChjbVN0ckNhdCgKKyAgICAgICAgICAiRGVsZXRpbmcgcHJpbWFyeSBjdXN0b20gY29tbWFuZCBvdXRwdXQgXCIiLCBkZXBlbmRlZSwKKyAgICAgICAgICAiXCIgYmVjYXVzZSBhbm90aGVyIG91dHB1dCBcIiIsIGRlcGVuZGVyLCAiXCIgZG9lcyBub3QgZXhpc3QuXG4iKSk7CiAgICAgICB9CiAgICAgICBjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGRlcGVuZGVlKTsKICAgICB9CkBAIC0xNTU1LDggKzE1NjEsOCBAQAogICB0aGlzLT5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOwogICBydWxlRmlsZVN0cmVhbSA8PCAiIyBUYXJnZXRzIHByb3ZpZGVkIGdsb2JhbGx5IGJ5IENNYWtlLlxuIgogICAgICAgICAgICAgICAgICA8PCAiXG4iOwotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA6IHRhcmdldHMpIHsKKyAgY29uc3QgYXV0byYgdGFyZ2V0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBndCA6IHRhcmdldHMpIHsKICAgICBpZiAoZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldFN0cmluZyA9CiAgICAgICAgICJTcGVjaWFsIHJ1bGUgZm9yIHRoZSB0YXJnZXQgIiArIGd0LT5HZXROYW1lKCk7CkBAIC0xNTY4LDggKzE1NzQsOCBAQAogICAgICAgICB0ZXh0ID0gIlJ1bm5pbmcgZXh0ZXJuYWwgY29tbWFuZCAuLi4iOwogICAgICAgfQogICAgICAgZGVwZW5kcy5yZXNlcnZlKGd0LT5HZXRVdGlsaXRpZXMoKS5zaXplKCkpOwotICAgICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHUgOiBndC0+R2V0VXRpbGl0aWVzKCkpIHsKLSAgICAgICAgZGVwZW5kcy5wdXNoX2JhY2sodS5WYWx1ZSk7CisgICAgICBmb3IgKEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+IGNvbnN0JiB1IDogZ3QtPkdldFV0aWxpdGllcygpKSB7CisgICAgICAgIGRlcGVuZHMucHVzaF9iYWNrKHUuVmFsdWUuZmlyc3QpOwogICAgICAgfQogICAgICAgdGhpcy0+QXBwZW5kRWNobyhjb21tYW5kcywgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVjaG9HbG9iYWwpOwpAQCAtMTU3NywxMCArMTU4MywxMCBAQAogICAgICAgLy8gR2xvYmFsIHRhcmdldHMgc3RvcmUgdGhlaXIgcnVsZXMgaW4gcHJlLSBhbmQgcG9zdC1idWlsZCBjb21tYW5kcy4KICAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbURlcGVuZHMoZGVwZW5kcywgZ3QtPkdldFByZUJ1aWxkQ29tbWFuZHMoKSk7CiAgICAgICB0aGlzLT5BcHBlbmRDdXN0b21EZXBlbmRzKGRlcGVuZHMsIGd0LT5HZXRQb3N0QnVpbGRDb21tYW5kcygpKTsKLSAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRzKGNvbW1hbmRzLCBndC0+R2V0UHJlQnVpbGRDb21tYW5kcygpLCBndCwKKyAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRzKGNvbW1hbmRzLCBndC0+R2V0UHJlQnVpbGRDb21tYW5kcygpLCBndC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gICAgICB0aGlzLT5BcHBlbmRDdXN0b21Db21tYW5kcyhjb21tYW5kcywgZ3QtPkdldFBvc3RCdWlsZENvbW1hbmRzKCksIGd0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRzKGNvbW1hbmRzLCBndC0+R2V0UG9zdEJ1aWxkQ29tbWFuZHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0LmdldCgpLCB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOwogICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSA9IGd0LT5HZXROYW1lKCk7CiAgICAgICB0aGlzLT5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLCB0YXJnZXRTdHJpbmcuY19zdHIoKSwgdGFyZ2V0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwpAQCAtMTYyMSwxNSArMTYyNywxNCBAQAogICB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHByb2dDbWQ7CiAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOwotICAgIHByb2dDbWQgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzc0RpciksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgcHJvZ0NtZCA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocHJvZ3Jlc3NEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKIAogICAgIHN0ZDo6c3RyaW5nIHByb2dyZXNzRmlsZSA9ICIvQ01ha2VGaWxlcy9wcm9ncmVzcy5tYXJrcyI7CiAgICAgc3RkOjpzdHJpbmcgcHJvZ3Jlc3NGaWxlTmFtZUZ1bGwgPSB0aGlzLT5Db252ZXJ0VG9GdWxsUGF0aChwcm9ncmVzc0ZpbGUpOwogICAgIHByb2dDbWQgPDwgIiAiCi0gICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3NGaWxlTmFtZUZ1bGwpLAotICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzRmlsZU5hbWVGdWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICB9CiAgIHN0ZDo6c3RyaW5nIG1mMkRpciA9ICJDTWFrZUZpbGVzL01ha2VmaWxlMiI7CkBAIC0xNjM5LDggKzE2NDQsOCBAQAogICB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHByb2dDbWQ7CiAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOyAvLyAjIDAKLSAgICBwcm9nQ21kIDw8IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3NEaXIpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgIHByb2dDbWQgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgcHJvZ0NtZCA8PCAiIDAiOwogICAgIGNvbW1hbmRzLnB1c2hfYmFjayhwcm9nQ21kLnN0cigpKTsKICAgfQpAQCAtMTc3Myw3ICsxNzc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGVzdERpcikKICAgewogICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSB0ZXN0IGRpcmVjdG9yeSAic3RhcnRzIHdpdGgiIHRoZSBiYXNlIGRpcmVjdG9yeToKLSAgICBpZiAodGVzdERpci5maW5kKGJhc2VEaXIpICE9IDApIHsKKyAgICBpZiAoIWNtSGFzUHJlZml4KHRlc3REaXIsIGJhc2VEaXIpKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIElmIGl0IGRvZXMsIHRoZW4gY2hlY2sgdGhhdCBpdCdzIGVpdGhlciB0aGUgc2FtZSBzdHJpbmcsIG9yIHRoYXQgdGhlCkBAIC0xODQzLDcgKzE4NDgsNyBAQAogCiAgICAgLy8gQnVpbGQgYSBsaXN0IG9mIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyBmb3IgdGhlIHRhcmdldC4KICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVmaW5lczsKLSAgICB0aGlzLT5HZXRUYXJnZXREZWZpbmVzKHRhcmdldCwgdGhpcy0+Q29uZmlnTmFtZSwgaW1wbGljaXRMYW5nLmZpcnN0LAorICAgIHRoaXMtPkdldFRhcmdldERlZmluZXModGFyZ2V0LCB0aGlzLT5HZXRDb25maWdOYW1lKCksIGltcGxpY2l0TGFuZy5maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMpOwogICAgIGlmICghZGVmaW5lcy5lbXB0eSgpKSB7CiAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCkBAIC0xODY3LDExICsxODcyLDExIEBACiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogCiAgICAgdGhpcy0+R2V0SW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCB0YXJnZXQsIGltcGxpY2l0TGFuZy5maXJzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgc3RkOjpzdHJpbmcgYmluYXJ5RGlyID0gdGhpcy0+R2V0U3RhdGUoKS0+R2V0QmluYXJ5RGlyZWN0b3J5KCk7CiAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9ERVBFTkRTX0lOX1BST0pFQ1RfT05MWSIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc291cmNlRGlyID0gdGhpcy0+R2V0U3RhdGUoKS0+R2V0U291cmNlRGlyZWN0b3J5KCk7Ci0gICAgICBjbUVyYXNlSWYoaW5jbHVkZXMsIDo6Tm90SW5Qcm9qZWN0RGlyKHNvdXJjZURpciwgYmluYXJ5RGlyKSk7CisgICAgICBjbTo6ZXJhc2VfaWYoaW5jbHVkZXMsIDo6Tm90SW5Qcm9qZWN0RGlyKHNvdXJjZURpciwgYmluYXJ5RGlyKSk7CiAgICAgfQogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGluY2x1ZGUgOiBpbmNsdWRlcykgewogICAgICAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIFwiIgpAQCAtMTk1NywyNSArMTk2MiwyNSBAQAogdm9pZCBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6V3JpdGVEaXZpZGVyKHN0ZDo6b3N0cmVhbSYgb3MpCiB7CiAgIG9zIDw8ICIjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0gICAgIDw8ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CisgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CiB9CiAKIHZvaWQgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OldyaXRlQ01ha2VBcmd1bWVudChzdGQ6Om9zdHJlYW0mIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHMpCiB7CiAgIC8vIFdyaXRlIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIHN0cmVhbSB3aXRoIGVzY2FwaW5nIHRvIGdldCBpdCBiYWNrCiAgIC8vIGludG8gQ01ha2UgdGhyb3VnaCB0aGUgbGV4aWNhbCBzY2FubmVyLgotICBvcyA8PCAiXCIiOwotICBmb3IgKGNvbnN0IGNoYXIqIGMgPSBzOyAqYzsgKytjKSB7Ci0gICAgaWYgKCpjID09ICdcXCcpIHsKKyAgb3MgPDwgJyInOworICBmb3IgKGNoYXIgYyA6IHMpIHsKKyAgICBpZiAoYyA9PSAnXFwnKSB7CiAgICAgICBvcyA8PCAiXFxcXCI7Ci0gICAgfSBlbHNlIGlmICgqYyA9PSAnIicpIHsKKyAgICB9IGVsc2UgaWYgKGMgPT0gJyInKSB7CiAgICAgICBvcyA8PCAiXFxcIiI7CiAgICAgfSBlbHNlIHsKLSAgICAgIG9zIDw8ICpjOworICAgICAgb3MgPDwgYzsKICAgICB9CiAgIH0KLSAgb3MgPDwgIlwiIjsKKyAgb3MgPDwgJyInOwogfQogCiBzdGQ6OnN0cmluZyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29udmVydFRvUXVvdGVkT3V0cHV0UGF0aCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKaW5kZXggZjEyYWU4Yi4uNjhlZWIyOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKKysrIGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKQEAgLTMzLDYgKzMzLDggQEAKICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMoY21HbG9iYWxHZW5lcmF0b3IqIGdnLCBjbU1ha2VmaWxlKiBtZik7CiAgIH5jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMygpIG92ZXJyaWRlOwogCisgIHN0ZDo6c3RyaW5nIEdldENvbmZpZ05hbWUoKSBjb25zdDsKKwogICB2b2lkIENvbXB1dGVIb21lUmVsYXRpdmVPdXRwdXRQYXRoKCkgb3ZlcnJpZGU7CiAKICAgLyoqCkBAIC03NSw3ICs3Nyw3IEBACiAgIHZvaWQgU2V0Qm9ybGFuZE1ha2VDdXJseUhhY2soYm9vbCBiKSB7IHRoaXMtPkJvcmxhbmRNYWtlQ3VybHlIYWNrID0gYjsgfQogCiAgIC8vIHVzZWQgaW4gd3JpdGluZyBvdXQgQ21ha2UgZmlsZXMgc3VjaCBhcyBXcml0ZURpcmVjdG9yeUluZm9ybWF0aW9uCi0gIHN0YXRpYyB2b2lkIFdyaXRlQ01ha2VBcmd1bWVudChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBjaGFyKiBzKTsKKyAgc3RhdGljIHZvaWQgV3JpdGVDTWFrZUFyZ3VtZW50KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzKTsKIAogICAvKiogY3JlYXRlcyB0aGUgY29tbW9uIGRpc2NsYWltZXIgdGV4dCBhdCB0aGUgdG9wIG9mIGVhY2ggbWFrZWZpbGUgKi8KICAgdm9pZCBXcml0ZURpc2NsYWltZXIoc3RkOjpvc3RyZWFtJiBvcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CmluZGV4IGYzZDgyOGIuLjAyZTJjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CkBAIC0yLDggKzIsMTEgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21fZXhwYXQuaCIKIAorI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTEwMSwxMCArMTA0LDExIEBACiAKIHZvaWQgY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpHZW5lcmF0ZSgpCiB7Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gcmVtYWluaW5nID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+IHJlbWFpbmluZzsKKyAgY206OmFwcGVuZChyZW1haW5pbmcsIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSk7CiAgIGZvciAoYXV0byYgdCA6IHJlbWFpbmluZykgewogICAgIGlmICh0KSB7Ci0gICAgICBHZW5lcmF0ZVRhcmdldHNEZXB0aEZpcnN0KHQsIHJlbWFpbmluZyk7CisgICAgICB0aGlzLT5HZW5lcmF0ZVRhcmdldHNEZXB0aEZpcnN0KHQsIHJlbWFpbmluZyk7CiAgICAgfQogICB9CiAgIHRoaXMtPldyaXRlU3RhbXBGaWxlcygpOwpAQCAtMTI0LDggKzEyOCw3IEBACiAgIHN0ZDo6c3RyaW5nIGd1aWRTdG9yZU5hbWUgPSBjbVN0ckNhdChuYW1lLCAiX0dVSURfQ01BS0UiKTsKICAgLy8gc2F2ZSB0aGUgR1VJRCBpbiB0aGUgY2FjaGUKICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDTWFrZUluc3RhbmNlKCktPkFkZENhY2hlRW50cnkoCi0gICAgZ3VpZFN0b3JlTmFtZS5jX3N0cigpLCBwYXJzZXIuR1VJRC5jX3N0cigpLCAiU3RvcmVkIEdVSUQiLAotICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOworICAgIGd1aWRTdG9yZU5hbWUsIHBhcnNlci5HVUlELmNfc3RyKCksICJTdG9yZWQgR1VJRCIsIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogfQogCiBjb25zdCBjaGFyKiBjbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OlJlcG9ydEVycm9yTGFiZWwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5jeHgKaW5kZXggZTc3MWE0YS4uMGMxZjBjYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CkBAIC0yLDYgKzIsOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogI2luY2x1ZGUgPGN0eXBlLmg+IC8vIGZvciBpc3NwYWNlCkBAIC0xOCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21YTUxQYXJzZXIuaCIKICNpbmNsdWRlICJjbWFrZS5oIgpAQCAtNTIsMjAgKzU1LDE3IEBACiBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IoCiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZywgY21NYWtlZmlsZSogbWYpCiAgIDogY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcihnZywgbWYpCisgICwgSW50ZXJuYWwoY206Om1ha2VfdW5pcXVlPGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9ySW50ZXJuYWxzPih0aGlzKSkKIHsKLSAgdGhpcy0+SW50ZXJuYWwgPSBuZXcgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3JJbnRlcm5hbHModGhpcyk7CiB9CiAKLWNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjp+Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IoKQotewotICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7Ci19CitjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6fmNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiB2b2lkIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpBZGRIZWxwZXJDb21tYW5kcygpCiB7CiAgIC8vIE5vdyBjcmVhdGUgR1VJRHMgZm9yIHRhcmdldHMKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGd0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogbCA6IHRndHMpIHsKKyAgY29uc3QgYXV0byYgdGd0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsIDogdGd0cykgewogICAgIGlmIChsLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQpAQCAtODksOCArODksOCBAQAogICAvLyBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMyBTZXJ2aWNlIFBhY2sgMSB3aWxsIG5vdCBydW4gcG9zdC1idWlsZAogICAvLyBjb21tYW5kcyBmb3IgdGFyZ2V0cyBpbiB3aGljaCBubyBzb3VyY2VzIGFyZSBidWlsdC4gIEFkZCBkdW1teQogICAvLyBydWxlcyB0byBmb3JjZSB0aGVzZSB0YXJnZXRzIHRvIGJ1aWxkLgotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0Z3RzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBsIDogdGd0cykgeworICBjb25zdCBhdXRvJiB0Z3RzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGF1dG8mIGwgOiB0Z3RzKSB7CiAgICAgaWYgKGwtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBlbmRzOwogICAgICAgY21DdXN0b21Db21tYW5kTGluZXMgZm9yY2VfY29tbWFuZHMgPQpAQCAtMTAyLDkgKzEwMiw5IEBACiAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVHZW5lcmF0ZWRTb3VyY2UoZm9yY2UpKSB7CiAgICAgICAgIHNmLT5TZXRQcm9wZXJ0eSgiU1lNQk9MSUMiLCAiMSIpOwogICAgICAgfQotICAgICAgaWYgKGNtU291cmNlRmlsZSogZmlsZSA9IHRoaXMtPk1ha2VmaWxlLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCi0gICAgICAgICAgICBmb3JjZS5jX3N0cigpLCBub19kZXBlbmRzLCBub19tYWluX2RlcGVuZGVuY3ksIGZvcmNlX2NvbW1hbmRzLCAiICIsCi0gICAgICAgICAgICAwLCB0cnVlKSkgeworICAgICAgaWYgKGNtU291cmNlRmlsZSogZmlsZSA9IHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICAgICAgICAgIGZvcmNlLCBub19kZXBlbmRzLCBub19tYWluX2RlcGVuZGVuY3ksIGZvcmNlX2NvbW1hbmRzLCAiICIsCisgICAgICAgICAgICBudWxscHRyLCB0cnVlKSkgewogICAgICAgICBsLT5BZGRTb3VyY2UoZmlsZS0+UmVzb2x2ZUZ1bGxQYXRoKCkpOwogICAgICAgfQogICAgIH0KQEAgLTEyNSwxNyArMTI1LDE3IEBACiAgIH0KIAogICAvLyBHZXQgdGhlIHNldCBvZiB0YXJnZXRzIGluIHRoaXMgZGlyZWN0b3J5LgotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0Z3RzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBjb25zdCBhdXRvJiB0Z3RzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwogCiAgIC8vIENyZWF0ZSB0aGUgcHJvamVjdCBmaWxlIGZvciBlYWNoIHRhcmdldC4KLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogbCA6IHRndHMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsIDogdGd0cykgewogICAgIGlmIChsLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQogICAgIC8vIElOQ0xVREVfRVhURVJOQUxfTVNQUk9KRUNUIGNvbW1hbmQgb25seSBhZmZlY3RzIHRoZSB3b3Jrc3BhY2UKICAgICAvLyBzbyBkb24ndCBidWlsZCBhIHByb2plY3RmaWxlIGZvciBpdAogICAgIGlmICghbC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpKSB7Ci0gICAgICB0aGlzLT5DcmVhdGVTaW5nbGVWQ1Byb2oobC0+R2V0TmFtZSgpLCBsKTsKKyAgICAgIHRoaXMtPkNyZWF0ZVNpbmdsZVZDUHJvaihsLT5HZXROYW1lKCksIGwuZ2V0KCkpOwogICAgIH0KICAgfQogfQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgIC8vIG91dCBvZiBkYXRlLgogICBzdGQ6OnN0cmluZyBzdGFtcE5hbWUgPQogICAgIGNtU3RyQ2F0KHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzIik7Ci0gIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3Rvcnkoc3RhbXBOYW1lLmNfc3RyKCkpOworICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHN0YW1wTmFtZSk7CiAgIHN0YW1wTmFtZSArPSAiL2dlbmVyYXRlLnN0YW1wIjsKICAgY21zeXM6Om9mc3RyZWFtIHN0YW1wKHN0YW1wTmFtZS5jX3N0cigpKTsKICAgc3RhbXAgPDwgIiMgQ01ha2UgZ2VuZXJhdGlvbiB0aW1lc3RhbXAgZmlsZSBmb3IgdGhpcyBkaXJlY3RvcnkuXG4iOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgIH0KIAogICAvLyBhZGQgdG8gdGhlIGxpc3Qgb2YgcHJvamVjdHMKLSAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwgbG5hbWUuY19zdHIoKSk7CisgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIsIGxuYW1lKTsKICAgLy8gY3JlYXRlIHRoZSBkc3AuY21ha2UgZmlsZQogICBzdGQ6OnN0cmluZyBmbmFtZTsKICAgZm5hbWUgPSBjbVN0ckNhdCh0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICcvJywgbG5hbWUpOwpAQCAtMjI2LDcgKzIyNiw2IEBACiAKICAgc3RkOjpzdHJpbmcgbWFrZWZpbGVJbiA9CiAgICAgY21TdHJDYXQodGhpcy0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAiL0NNYWtlTGlzdHMudHh0Iik7Ci0gIG1ha2VmaWxlSW4gPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKG1ha2VmaWxlSW4pOwogICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZShtYWtlZmlsZUluKSkgewogICAgIGlmIChmaWxlLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKICAgICAgIHJldHVybiBmaWxlOwpAQCAtMjU3LDEyICsyNTYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWNoZWNrLXN0YW1wLWZpbGUiLCBzdGFtcE5hbWUgfSk7CiAgIHN0ZDo6c3RyaW5nIGNvbW1lbnQgPSBjbVN0ckNhdCgiQnVpbGRpbmcgQ3VzdG9tIFJ1bGUgIiwgbWFrZWZpbGVJbik7CiAgIGNvbnN0IGNoYXIqIG5vX3dvcmtpbmdfZGlyZWN0b3J5ID0gbnVsbHB0cjsKLSAgc3RkOjpzdHJpbmcgZnVsbHBhdGhTdGFtcE5hbWUgPQotICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3RhbXBOYW1lLmNfc3RyKCkpOwotICB0aGlzLT5NYWtlZmlsZS0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIGZ1bGxwYXRoU3RhbXBOYW1lLCBsaXN0RmlsZXMsIG1ha2VmaWxlSW4sIGNvbW1hbmRMaW5lcywgY29tbWVudC5jX3N0cigpLAotICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCB0cnVlLCBmYWxzZSk7Ci0gIGlmIChjbVNvdXJjZUZpbGUqIGZpbGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKG1ha2VmaWxlSW4uY19zdHIoKSkpIHsKKyAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KHN0YW1wTmFtZSwgbGlzdEZpbGVzLCBtYWtlZmlsZUluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZExpbmVzLCBjb21tZW50LmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub193b3JraW5nX2RpcmVjdG9yeSwgdHJ1ZSwgZmFsc2UpOworICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZShtYWtlZmlsZUluKSkgewogICAgIC8vIEZpbmFsaXplIHRoZSBzb3VyY2UgZmlsZSBwYXRoIG5vdyBzaW5jZSB3ZSdyZSBhZGRpbmcgdGhpcyBhZnRlcgogICAgIC8vIHRoZSBnZW5lcmF0b3IgdmFsaWRhdGVkIGFsbCBwcm9qZWN0LW5hbWVkIHNvdXJjZXMuCiAgICAgZmlsZS0+UmVzb2x2ZUZ1bGxQYXRoKCk7CkBAIC0yNzksNyArMjc2LDcgQEAKIHsKICAgZm91dCA8PCAiXHQ8Q29uZmlndXJhdGlvbnM+XG4iOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7Ci0gICAgdGhpcy0+V3JpdGVDb25maWd1cmF0aW9uKGZvdXQsIGNvbmZpZy5jX3N0cigpLCBsaWJOYW1lLCB0YXJnZXQpOworICAgIHRoaXMtPldyaXRlQ29uZmlndXJhdGlvbihmb3V0LCBjb25maWcsIGxpYk5hbWUsIHRhcmdldCk7CiAgIH0KICAgZm91dCA8PCAiXHQ8L0NvbmZpZ3VyYXRpb25zPlxuIjsKIH0KQEAgLTU4MCw3ICs1NzcsNyBAQAogICAgICAgdGhpcy0+U3RyZWFtIDw8IHRoaXMtPkxHLT5Fc2NhcGVGb3JYTUwoIlxuIik7CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIHNjcmlwdCA9IHRoaXMtPkxHLT5Db25zdHJ1Y3RTY3JpcHQoY2NnKTsKLSAgICB0aGlzLT5TdHJlYW0gPDwgdGhpcy0+TEctPkVzY2FwZUZvclhNTChzY3JpcHQuY19zdHIoKSk7CisgICAgdGhpcy0+U3RyZWFtIDw8IHRoaXMtPkxHLT5Fc2NhcGVGb3JYTUwoc2NyaXB0KTsKICAgfQogCiBwcml2YXRlOgpAQCAtNzMzLDEzICs3MzAsMTMgQEAKICAgICAgIDogdGFyZ2V0LT5HZXREaXJlY3RvcnkoY29uZmlnTmFtZSk7CiAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgIGZvdXQgPDwgIlx0XHRcdE91dHB1dERpcmVjdG9yeT1cIiIKLSAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUob3V0RGlyLmNfc3RyKCkpIDw8ICJcIlxuIjsKKyAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUob3V0RGlyKSA8PCAiXCJcbiI7CiAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIH0KIAogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGZvdXQgPDwgIlx0XHRcdEludGVybWVkaWF0ZURpcmVjdG9yeT1cIiIKLSAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGludGVybWVkaWF0ZURpci5jX3N0cigpKQorICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoaW50ZXJtZWRpYXRlRGlyKQogICAgICAgIDw8ICJcIlxuIgogICAgICAgIDw8ICJcdFx0XHRDb25maWd1cmF0aW9uVHlwZT1cIiIgPDwgY29uZmlnVHlwZSA8PCAiXCJcbiIKICAgICAgICA8PCAiXHRcdFx0VXNlT2ZNRkM9XCIiIDw8IG1mY0ZsYWcgPDwgIlwiXG4iCkBAIC03ODgsOCArNzg1LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgbW9kRGlyID0gIi4iOwogICAgIH0KLSAgICBmb3V0IDw8ICJcdFx0XHRcdE1vZHVsZVBhdGg9XCIiCi0gICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKG1vZERpci5jX3N0cigpKQorICAgIGZvdXQgPDwgIlx0XHRcdFx0TW9kdWxlUGF0aD1cIiIgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChtb2REaXIpCiAgICAgICAgICA8PCAiXFwkKENvbmZpZ3VyYXRpb25OYW1lKVwiXG4iOwogICB9CiAgIHRhcmdldE9wdGlvbnMuT3V0cHV0QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcygKQEAgLTgwMiw3ICs3OTgsNyBAQAogICAgIHN0ZDo6c3RyaW5nIHBkYiA9IHRhcmdldC0+R2V0Q29tcGlsZVBEQlBhdGgoY29uZmlnTmFtZSk7CiAgICAgaWYgKCFwZGIuZW1wdHkoKSkgewogICAgICAgZm91dCA8PCAiXHRcdFx0XHRQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShwZGIuY19zdHIoKSkgPDwgIlwiXG4iOworICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHBkYikgPDwgIlwiXG4iOwogICAgIH0KICAgfQogICBmb3V0IDw8ICIvPlxuIjsgLy8gZW5kIG9mIDxUb29sIE5hbWU9VkNDTENvbXBpbGVyVG9vbApAQCAtODc5LDcgKzg3NSw3IEBACiAgICAgICBmb3V0IDw8ICJcblx0XHRcdFx0QWRkaXRpb25hbE1hbmlmZXN0RmlsZXM9XCIiOwogICAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG1hbmlmZXN0IDogbWFuaWZlc3Rfc3JjcykgewogICAgICAgICBzdGQ6OnN0cmluZyBtID0gbWFuaWZlc3QtPkdldEZ1bGxQYXRoKCk7Ci0gICAgICAgIGZvdXQgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChtLmNfc3RyKCkpIDw8ICI7IjsKKyAgICAgICAgZm91dCA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKG0pIDw8ICI7IjsKICAgICAgIH0KICAgICAgIGZvdXQgPDwgIlwiIjsKICAgICB9CkBAIC05NDYsNyArOTQyLDcgQEAKICAgfQogICBzdGQ6OnN0cmluZyBjb25maWdUeXBlVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnTmFtZSk7CiAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnc0NvbmZpZyA9IGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGNvbmZpZ1R5cGVVcHBlcik7Ci0gIHRhcmdldExpbmtGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkobGlua0ZsYWdzQ29uZmlnLmNfc3RyKCkpOworICB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KGxpbmtGbGFnc0NvbmZpZyk7CiAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKICAgICBleHRyYUxpbmtPcHRpb25zICs9ICIgIjsKICAgICBleHRyYUxpbmtPcHRpb25zICs9IHRhcmdldExpbmtGbGFnczsKQEAgLTk4NSw3ICs5ODEsNyBAQAogICAgICAgZm91dCA8PCAiXHRcdFx0PFRvb2xcbiIKICAgICAgICAgICAgPDwgIlx0XHRcdFx0TmFtZT1cIiIgPDwgdG9vbCA8PCAiXCJcbiI7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdE91dHB1dEZpbGU9XCIiCi0gICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUobGlicGF0aC5jX3N0cigpKSA8PCAiXCIvPlxuIjsKKyAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShsaWJwYXRoKSA8PCAiXCIvPlxuIjsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6IHsKQEAgLTEwMTUsNyArMTAxMSw3IEBACiAgICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0QWRkaXRpb25hbE9wdGlvbnM9XCIiIDw8IGxpYmZsYWdzIDw8ICJcIlxuIjsKICAgICAgIH0KICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0T3V0cHV0RmlsZT1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShsaWJwYXRoLmNfc3RyKCkpIDw8ICJcIi8+XG4iOworICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKGxpYnBhdGgpIDw8ICJcIi8+XG4iOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKQEAgLTEwNTcsNyArMTA1Myw3IEBACiAgICAgICB0ZW1wID0KICAgICAgICAgY21TdHJDYXQodGFyZ2V0LT5HZXREaXJlY3RvcnkoY29uZmlnTmFtZSksICcvJywgdGFyZ2V0TmFtZXMuT3V0cHV0KTsKICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0T3V0cHV0RmlsZT1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSh0ZW1wLmNfc3RyKCkpIDw8ICJcIlxuIjsKKyAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSh0ZW1wKSA8PCAiXCJcbiI7CiAgICAgICB0aGlzLT5Xcml0ZVRhcmdldFZlcnNpb25BdHRyaWJ1dGUoZm91dCwgdGFyZ2V0KTsKICAgICAgIGxpbmtPcHRpb25zLk91dHB1dEZsYWdNYXAoZm91dCwgNCk7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9XCIiOwpAQCAtMTA2Niw3ICsxMDYyLDcgQEAKICAgICAgIHRlbXAgPQogICAgICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldFBEQkRpcmVjdG9yeShjb25maWdOYW1lKSwgJy8nLCB0YXJnZXROYW1lcy5QREIpOwogICAgICAgZm91dCA8PCAiXHRcdFx0XHRQcm9ncmFtRGF0YWJhc2VGaWxlPVwiIgotICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHRlbXAuY19zdHIoKSkgPDwgIlwiXG4iOworICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHRlbXApIDw8ICJcIlxuIjsKICAgICAgIGlmICh0YXJnZXRPcHRpb25zLklzRGVidWcoKSkgewogICAgICAgICBmb3V0IDw8ICJcdFx0XHRcdEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj1cInRydWVcIlxuIjsKICAgICAgIH0KQEAgLTEwNzgsNyArMTA3NCw3IEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIHN0YWNrVmFyID0gY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9TVEFDS19TSVpFIik7Ci0gICAgICBjb25zdCBjaGFyKiBzdGFja1ZhbCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN0YWNrVmFyLmNfc3RyKCkpOworICAgICAgY29uc3QgY2hhciogc3RhY2tWYWwgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihzdGFja1Zhcik7CiAgICAgICBpZiAoc3RhY2tWYWwpIHsKICAgICAgICAgZm91dCA8PCAiXHRcdFx0XHRTdGFja1Jlc2VydmVTaXplPVwiIiA8PCBzdGFja1ZhbCA8PCAiXCJcbiI7CiAgICAgICB9CkBAIC0xMDg2LDcgKzEwODIsNyBAQAogICAgICAgICB0YXJnZXQtPkdldERpcmVjdG9yeShjb25maWdOYW1lLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCksCiAgICAgICAgICcvJywgdGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeSk7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdEltcG9ydExpYnJhcnk9XCIiCi0gICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcC5jX3N0cigpKSA8PCAiXCIiOworICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHRlbXApIDw8ICJcIiI7CiAgICAgICBpZiAodGhpcy0+Rm9ydHJhblByb2plY3QpIHsKICAgICAgICAgZm91dCA8PCAiXG5cdFx0XHRcdExpbmtETEw9XCJ0cnVlXCIiOwogICAgICAgfQpAQCAtMTEzMiwxNCArMTEyOCwxNCBAQAogICAgICAgdGVtcCA9CiAgICAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0RGlyZWN0b3J5KGNvbmZpZ05hbWUpLCAnLycsIHRhcmdldE5hbWVzLk91dHB1dCk7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdE91dHB1dEZpbGU9XCIiCi0gICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcC5jX3N0cigpKSA8PCAiXCJcbiI7CisgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcCkgPDwgIlwiXG4iOwogICAgICAgdGhpcy0+V3JpdGVUYXJnZXRWZXJzaW9uQXR0cmlidXRlKGZvdXQsIHRhcmdldCk7CiAgICAgICBsaW5rT3B0aW9ucy5PdXRwdXRGbGFnTWFwKGZvdXQsIDQpOwogICAgICAgZm91dCA8PCAiXHRcdFx0XHRBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPVwiIjsKICAgICAgIHRoaXMtPk91dHB1dExpYnJhcnlEaXJlY3Rvcmllcyhmb3V0LCBjbGkuR2V0RGlyZWN0b3JpZXMoKSk7CiAgICAgICBmb3V0IDw8ICJcIlxuIjsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKAotICAgICAgICB0YXJnZXQtPkdldFBEQkRpcmVjdG9yeShjb25maWdOYW1lKS5jX3N0cigpKTsKKyAgICAgICAgdGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkoY29uZmlnTmFtZSkpOwogICAgICAgZm91dCA8PCAiXHRcdFx0XHRQcm9ncmFtRGF0YWJhc2VGaWxlPVwiIiA8PCBwYXRoIDw8ICIvIgogICAgICAgICAgICA8PCB0YXJnZXROYW1lcy5QREIgPDwgIlwiXG4iOwogICAgICAgaWYgKHRhcmdldE9wdGlvbnMuSXNEZWJ1ZygpKSB7CkBAIC0xMTY3LDcgKzExNjMsNyBAQAogICAgICAgICAgICAgIDw8ICJcIlxuIjsKICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIHN0YWNrVmFyID0gY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9TVEFDS19TSVpFIik7Ci0gICAgICBjb25zdCBjaGFyKiBzdGFja1ZhbCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN0YWNrVmFyLmNfc3RyKCkpOworICAgICAgY29uc3QgY2hhciogc3RhY2tWYWwgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihzdGFja1Zhcik7CiAgICAgICBpZiAoc3RhY2tWYWwpIHsKICAgICAgICAgZm91dCA8PCAiXHRcdFx0XHRTdGFja1Jlc2VydmVTaXplPVwiIiA8PCBzdGFja1ZhbCA8PCAiXCIiOwogICAgICAgfQpAQCAtMTE3NSw3ICsxMTcxLDcgQEAKICAgICAgICAgdGFyZ2V0LT5HZXREaXJlY3RvcnkoY29uZmlnTmFtZSwgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpLAogICAgICAgICAnLycsIHRhcmdldE5hbWVzLkltcG9ydExpYnJhcnkpOwogICAgICAgZm91dCA8PCAiXHRcdFx0XHRJbXBvcnRMaWJyYXJ5PVwiIgotICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHRlbXAuY19zdHIoKSkgPDwgIlwiLz5cbiI7CisgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcCkgPDwgIlwiLz5cbiI7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CkBAIC0xMjU2LDggKzEyNTIsOCBAQAogICBmb3IgKGF1dG8gY29uc3QmIGxpYiA6IGxpYnMpIHsKICAgICBpZiAobGliLklzUGF0aCkgewogICAgICAgc3RkOjpzdHJpbmcgcmVsID0KLSAgICAgICAgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGxpYi5WYWx1ZS5WYWx1ZS5jX3N0cigpKTsKLSAgICAgIGZvdXQgPDwgbGctPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgocmVsLmNfc3RyKCkpIDw8ICIgIjsKKyAgICAgICAgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGxpYi5WYWx1ZS5WYWx1ZSk7CisgICAgICBmb3V0IDw8IGxnLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKHJlbCkgPDwgIiAiOwogICAgIH0gZWxzZSBpZiAoIWxpYi5UYXJnZXQgfHwKICAgICAgICAgICAgICAgIGxpYi5UYXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgICBmb3V0IDw8IGxpYi5WYWx1ZS5WYWx1ZSA8PCAiICI7CkBAIC0xMjgyLDcgKzEyNzgsNyBAQAogICAgIGlmICghb2JqLT5HZXRPYmplY3RMaWJyYXJ5KCkuZW1wdHkoKSkgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG9iakZpbGUgPSBvYmotPkdldEZ1bGxQYXRoKCk7CiAgICAgICBzdGQ6OnN0cmluZyByZWwgPSBsZy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgb2JqRmlsZSk7Ci0gICAgICBmb3V0IDw8IHNlcCA8PCBsZy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChyZWwuY19zdHIoKSk7CisgICAgICBmb3V0IDw8IHNlcCA8PCBsZy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChyZWwpOwogICAgICAgc2VwID0gIiAiOwogICAgIH0KICAgfQpAQCAtMTMwMyw5ICsxMjk5LDggQEAKICAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8gYSByZWxhdGl2ZSBwYXRoIHNwZWNpZmljYXRpb24gaWYgaXQgaXMgc2hvcnRlci4KLSAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgoZGlyLmNfc3RyKCkpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyByZWwgPQotICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBkaXIuY19zdHIoKSk7CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGRpcikpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIHJlbCA9IHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGRpcik7CiAgICAgICBpZiAocmVsLnNpemUoKSA8IGRpci5zaXplKCkpIHsKICAgICAgICAgZGlyID0gcmVsOwogICAgICAgfQpAQCAtMTMxNCw5ICsxMzA5LDggQEAKICAgICAvLyBGaXJzdCBzZWFyY2ggYSBjb25maWd1cmF0aW9uLXNwZWNpZmljIHN1YmRpcmVjdG9yeSBhbmQgdGhlbiB0aGUKICAgICAvLyBvcmlnaW5hbCBkaXJlY3RvcnkuCiAgICAgZm91dCA8PCBjb21tYQotICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aCgKLSAgICAgICAgICAgICAgKGRpciArICIvJChDb25maWd1cmF0aW9uTmFtZSkiKS5jX3N0cigpKQotICAgICAgICAgPDwgIiwiIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoZGlyLmNfc3RyKCkpOworICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChkaXIgKyAiLyQoQ29uZmlndXJhdGlvbk5hbWUpIikgPDwgIiwiCisgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGRpcik7CiAgICAgY29tbWEgPSAiLCI7CiAgIH0KIH0KQEAgLTEzMzcsNyArMTMzMSw3IEBACiAgIC8vIEFkZCBDTWFrZUxpc3RzLnR4dCBmaWxlIHdpdGggcnVsZSB0byByZS1ydW4gQ01ha2UgZm9yIHVzZXIgY29udmVuaWVuY2UuCiAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQgJiYKICAgICAgIHRhcmdldC0+R2V0TmFtZSgpICE9IENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQpIHsKLSAgICBpZiAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA9IHRoaXMtPkNyZWF0ZVZDUHJvakJ1aWxkUnVsZSgpKSB7CisgICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5DcmVhdGVWQ1Byb2pCdWlsZFJ1bGUoKSkgewogICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZSBhY3M7CiAgICAgICBhY3MuU291cmNlID0gc2Y7CiAgICAgICBhY3MuS2luZCA9IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kQ3VzdG9tQ29tbWFuZDsKQEAgLTE1MTUsMTYgKzE1MDksMTUgQEAKICAgICBpZiAoY29uc3QgY2hhciogZGVwcyA9IHNmLkdldFByb3BlcnR5KCJPQkpFQ1RfREVQRU5EUyIpKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kcyA9IGNtRXhwYW5kZWRMaXN0KGRlcHMpOwogICAgICAgY29uc3QgY2hhciogc2VwID0gIiI7Ci0gICAgICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6aXRlcmF0b3IgaiA9IGRlcGVuZHMuYmVnaW4oKTsKLSAgICAgICAgICAgaiAhPSBkZXBlbmRzLmVuZCgpOyArK2opIHsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGQgOiBkZXBlbmRzKSB7CiAgICAgICAgIGZjLkFkZGl0aW9uYWxEZXBzICs9IHNlcDsKLSAgICAgICAgZmMuQWRkaXRpb25hbERlcHMgKz0gbGctPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoai0+Y19zdHIoKSk7CisgICAgICAgIGZjLkFkZGl0aW9uYWxEZXBzICs9IGxnLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGQpOwogICAgICAgICBzZXAgPSAiOyI7CiAgICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSA9IGd0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcuY19zdHIoKSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSA9IGd0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcpOwogICAgIC8vIElmIEhFQURFUl9GSUxFX09OTFkgaXMgc2V0LCB3ZSBtdXN0IHN1cHByZXNzIHRoaXMgZ2VuZXJhdGlvbiBpbgogICAgIC8vIHRoZSBwcm9qZWN0IGZpbGUKICAgICBmYy5FeGNsdWRlZEZyb21CdWlsZCA9IHNmLkdldFByb3BlcnR5QXNCb29sKCJIRUFERVJfRklMRV9PTkxZIikgfHwKQEAgLTE2MjksNyArMTYyMiw3IEBACiAgICAgICBGQ0luZm8gZmNpbmZvKHRoaXMsIHRhcmdldCwgYWNzLCBjb25maWdzKTsKIAogICAgICAgZm91dCA8PCAiXHRcdFx0PEZpbGVcbiI7Ci0gICAgICBzdGQ6OnN0cmluZyBkID0gdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShzb3VyY2UuY19zdHIoKSk7CisgICAgICBzdGQ6OnN0cmluZyBkID0gdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShzb3VyY2UpOwogICAgICAgLy8gVGVsbCBNUy1EZXYgd2hhdCB0aGUgc291cmNlIGlzLiAgSWYgdGhlIGNvbXBpbGVyIGtub3dzIGhvdyB0bwogICAgICAgLy8gYnVpbGQgaXQsIHRoZW4gaXQgd2lsbC4KICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0UmVsYXRpdmVQYXRoPVwiIiA8PCBkIDw8ICJcIj5cbiI7CkBAIC0xNzU5LDIxICsxNzUyLDIxIEBACiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdFx0PFRvb2xcbiIKICAgICAgICAgICAgPDwgIlx0XHRcdFx0XHROYW1lPVwiIiA8PCBjb21waWxlVG9vbCA8PCAiXCJcbiIKICAgICAgICAgICAgPDwgIlx0XHRcdFx0XHRBZGRpdGlvbmFsT3B0aW9ucz1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+RXNjYXBlRm9yWE1MKGZjLkNvbXBpbGVGbGFncy5jX3N0cigpKSA8PCAiXCIvPlxuIjsKKyAgICAgICAgICAgPDwgdGhpcy0+RXNjYXBlRm9yWE1MKGZjLkNvbXBpbGVGbGFncykgPDwgIlwiLz5cbiI7CiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcgY29tbWVudCA9IHRoaXMtPkNvbnN0cnVjdENvbW1lbnQoY2NnKTsKICAgICBzdGQ6OnN0cmluZyBzY3JpcHQgPSB0aGlzLT5Db25zdHJ1Y3RTY3JpcHQoY2NnKTsKICAgICBpZiAodGhpcy0+Rm9ydHJhblByb2plY3QpIHsKLSAgICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoc2NyaXB0LCAiJChDb25maWd1cmF0aW9uKSIsIGNvbmZpZy5jX3N0cigpKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoc2NyaXB0LCAiJChDb25maWd1cmF0aW9uKSIsIGNvbmZpZyk7CiAgICAgfQogICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgICBmb3V0IDw8ICJcdFx0XHRcdFx0PFRvb2xcbiIKICAgICAgICAgIDw8ICJcdFx0XHRcdFx0TmFtZT1cIiIgPDwgY3VzdG9tVG9vbCA8PCAiXCJcbiIKICAgICAgICAgIDw8ICJcdFx0XHRcdFx0RGVzY3JpcHRpb249XCIiCi0gICAgICAgICA8PCB0aGlzLT5Fc2NhcGVGb3JYTUwoY29tbWVudC5jX3N0cigpKSA8PCAiXCJcbiIKKyAgICAgICAgIDw8IHRoaXMtPkVzY2FwZUZvclhNTChjb21tZW50KSA8PCAiXCJcbiIKICAgICAgICAgIDw8ICJcdFx0XHRcdFx0Q29tbWFuZExpbmU9XCIiCi0gICAgICAgICA8PCB0aGlzLT5Fc2NhcGVGb3JYTUwoc2NyaXB0LmNfc3RyKCkpIDw8ICJcIlxuIgorICAgICAgICAgPDwgdGhpcy0+RXNjYXBlRm9yWE1MKHNjcmlwdCkgPDwgIlwiXG4iCiAgICAgICAgICA8PCAiXHRcdFx0XHRcdEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9XCIiOwogICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgIGlmIChjY2cuR2V0RGVwZW5kcygpLmVtcHR5KCkpIHsKQEAgLTE3ODksOCArMTc4Miw4IEBACiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkIDogY2NnLkdldERlcGVuZHMoKSkgewogICAgICAgICAvLyBHZXQgdGhlIHJlYWwgbmFtZSBvZiB0aGUgZGVwZW5kZW5jeSBpbiBjYXNlIGl0IGlzIGEgQ01ha2UgdGFyZ2V0LgogICAgICAgICBzdGQ6OnN0cmluZyBkZXA7Ci0gICAgICAgIGlmICh0aGlzLT5HZXRSZWFsRGVwZW5kZW5jeShkLmNfc3RyKCksIGNvbmZpZy5jX3N0cigpLCBkZXApKSB7Ci0gICAgICAgICAgZm91dCA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGRlcC5jX3N0cigpKSA8PCAiOyI7CisgICAgICAgIGlmICh0aGlzLT5HZXRSZWFsRGVwZW5kZW5jeShkLCBjb25maWcsIGRlcCkpIHsKKyAgICAgICAgICBmb3V0IDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoZGVwKSA8PCAiOyI7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xODAyLDcgKzE3OTUsNyBAQAogICAgICAgLy8gV3JpdGUgYSBydWxlIGZvciB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGlzIGNvbW1hbmQuCiAgICAgICBjb25zdCBjaGFyKiBzZXAgPSAiIjsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCA6IGNjZy5HZXRPdXRwdXRzKCkpIHsKLSAgICAgICAgZm91dCA8PCBzZXAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShvdXRwdXQuY19zdHIoKSk7CisgICAgICAgIGZvdXQgPDwgc2VwIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUob3V0cHV0KTsKICAgICAgICAgc2VwID0gIjsiOwogICAgICAgfQogICAgIH0KQEAgLTE5NDgsNyArMTk0MSw3IEBACiAgIHRoaXMtPldyaXRlUHJvamVjdFNDQyhmb3V0LCB0YXJnZXQpOwogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGZvdXQ8PCAiXHRLZXl3b3JkPVwiIiA8PCBrZXl3b3JkIDw8ICJcIj5cbiIKLSAgICAgICA8PCAiXHRQcm9qZWN0R1VJRD1cInsiIDw8IGdnLT5HZXRHVUlEKGxpYk5hbWUuY19zdHIoKSkgPDwgIn1cIj5cbiIKKyAgICAgICA8PCAiXHRQcm9qZWN0R1VJRD1cInsiIDw8IGdnLT5HZXRHVUlEKGxpYk5hbWUpIDw8ICJ9XCI+XG4iCiAgICAgICAgPDwgIlx0PFBsYXRmb3Jtcz5cbiIKICAgICAgICA8PCAiXHRcdDxQbGF0Zm9ybVxuXHRcdFx0TmFtZT1cIiIgPDwgZ2ctPkdldFBsYXRmb3JtTmFtZSgpIDw8ICJcIi8+XG4iCiAgICAgICAgPDwgIlx0PC9QbGF0Zm9ybXM+XG4iOwpAQCAtMTk4Myw3ICsxOTc2LDcgQEAKICAgICBrZXl3b3JkID0gIldpbjMyUHJvaiI7CiAgIH0KICAgZm91dCA8PCAiXHROYW1lPVwiIiA8PCBwcm9qTGFiZWwgPDwgIlwiXG4iOwotICBmb3V0IDw8ICJcdFByb2plY3RHVUlEPVwieyIgPDwgZ2ctPkdldEdVSUQobGliTmFtZS5jX3N0cigpKSA8PCAifVwiXG4iOworICBmb3V0IDw8ICJcdFByb2plY3RHVUlEPVwieyIgPDwgZ2ctPkdldEdVSUQobGliTmFtZSkgPDwgIn1cIlxuIjsKICAgdGhpcy0+V3JpdGVQcm9qZWN0U0NDKGZvdXQsIHRhcmdldCk7CiAgIGlmIChjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0KICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTiIpKSB7CkBAIC0yMDE0LDcgKzIwMDcsNyBAQAogICBmb3V0IDw8ICJcdDxHbG9iYWxzPlxuIjsKIAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkgOiB0YXJnZXQtPkdldFByb3BlcnR5S2V5cygpKSB7Ci0gICAgaWYgKGtleS5maW5kKCJWU19HTE9CQUxfIikgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoa2V5LCAiVlNfR0xPQkFMXyIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBuYW1lID0ga2V5LnN1YnN0cigxMCk7CiAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkgewogICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCkBAIC0yMDM3LDcgKzIwMzAsNyBAQAogfQogCiBzdGQ6OnN0cmluZyBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Q29udmVydFRvWE1MT3V0cHV0UGF0aCgKLSAgY29uc3QgY2hhciogcGF0aCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpCiB7CiAgIHN0ZDo6c3RyaW5nIHJldCA9CiAgICAgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHBhdGgsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CkBAIC0yMDQ5LDcgKzIwNDIsNyBAQAogfQogCiBzdGQ6OnN0cmluZyBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSgKLSAgY29uc3QgY2hhciogcGF0aCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpCiB7CiAgIHN0ZDo6c3RyaW5nIHJldCA9CiAgICAgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHBhdGgsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CkBAIC0yMDYxLDcgKzIwNTQsNyBAQAogfQogCiB2b2lkIGNtVlM3R2VuZXJhdG9yT3B0aW9uczo6T3V0cHV0RmxhZyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGludCBpbmRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCkKIHsKICAgZm91dC5maWxsKCdcdCcpOwpAQCAtMjEzMCw4ICsyMTIzLDcgQEAKICAgc3RkOjpzdHJpbmcgZ3VpZFN0b3JlTmFtZSA9IGNtU3RyQ2F0KG5hbWUsICJfR1VJRF9DTUFLRSIpOwogICAvLyBzYXZlIHRoZSBHVUlEIGluIHRoZSBjYWNoZQogICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENNYWtlSW5zdGFuY2UoKS0+QWRkQ2FjaGVFbnRyeSgKLSAgICBndWlkU3RvcmVOYW1lLmNfc3RyKCksIHBhcnNlci5HVUlELmNfc3RyKCksICJTdG9yZWQgR1VJRCIsCi0gICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CisgICAgZ3VpZFN0b3JlTmFtZSwgcGFyc2VyLkdVSUQuY19zdHIoKSwgIlN0b3JlZCBHVUlEIiwgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpHZXRUYXJnZXREaXJlY3RvcnkoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oCmluZGV4IDY3MTc4M2YuLjhiOWI4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKQEAgLTMwLDcgKzMxLDcgQEAKICAgICA6IGNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucyhsZywgdG9vbCwgdGFibGUsIGV4dHJhVGFibGUpCiAgIHsKICAgfQotICB2b2lkIE91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiBmb3V0LCBpbnQgaW5kZW50LCBjb25zdCBjaGFyKiB0YWcsCisgIHZvaWQgT3V0cHV0RmxhZyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGludCBpbmRlbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YWcsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCkgb3ZlcnJpZGU7CiB9OwogCkBAIC00OCw2ICs0OSwxMCBAQAogCiAgIHZpcnR1YWwgfmNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKCk7CiAKKyAgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IoY29uc3QgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3ImKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3ImIG9wZXJhdG9yPSgKKyAgICBjb25zdCBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvciYpID0gZGVsZXRlOworCiAgIHZvaWQgQWRkSGVscGVyQ29tbWFuZHMoKSBvdmVycmlkZTsKIAogICAvKioKQEAgLTEwMSw4ICsxMDYsOCBAQAogICB2b2lkIFdyaXRlQ29uZmlndXJhdGlvbihzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGliTmFtZSwgY21HZW5lcmF0b3JUYXJnZXQqIHRndCk7CiAgIHN0ZDo6c3RyaW5nIEVzY2FwZUZvclhNTChjb25zdCBzdGQ6OnN0cmluZyYgcyk7Ci0gIHN0ZDo6c3RyaW5nIENvbnZlcnRUb1hNTE91dHB1dFBhdGgoY29uc3QgY2hhciogcGF0aCk7Ci0gIHN0ZDo6c3RyaW5nIENvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUoY29uc3QgY2hhciogcGF0aCk7CisgIHN0ZDo6c3RyaW5nIENvbnZlcnRUb1hNTE91dHB1dFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpOworICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKTsKICAgdm9pZCBPdXRwdXRUYXJnZXRSdWxlcyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYk5hbWUpOwpAQCAtMTQ0LDcgKzE0OSw3IEBACiAKICAgYm9vbCBGb3J0cmFuUHJvamVjdDsKICAgYm9vbCBXaW5kb3dzQ0VQcm9qZWN0OwotICBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvckludGVybmFscyogSW50ZXJuYWw7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvckludGVybmFscz4gSW50ZXJuYWw7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eAppbmRleCAzMzZlM2E1Li43MjY3OTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4CkBAIC0xMDQsOCArMTA0LDggQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2RlcGVuZHM7CiAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRzID0gY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoCiAgICAgeyBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgIi1FIiwgIm1ha2VfZGlyZWN0b3J5IiwgaW1wRGlyIH0pOwotICBwY2MucmVzZXQobmV3IGNtQ3VzdG9tQ29tbWFuZCgwLCBub19vdXRwdXQsIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLCAwLCAwKSk7CisgIHBjYy5yZXNldChuZXcgY21DdXN0b21Db21tYW5kKG5vX291dHB1dCwgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywgY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICBwY2MtPlNldEVzY2FwZU9sZFN0eWxlKGZhbHNlKTsKICAgcGNjLT5TZXRFc2NhcGVBbGxvd01ha2VWYXJzKHRydWUpOwogICByZXR1cm4gcGNjOwpAQCAtMTU0LDggKzE1NCw3IEBACiAgICAgc2NyaXB0ICs9IG5ld2xpbmU7CiAgICAgbmV3bGluZSA9IG5ld2xpbmVfdGV4dDsKICAgICBzY3JpcHQgKz0gImNkICI7Ci0gICAgc2NyaXB0ICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgod29ya2luZ0RpcmVjdG9yeSksIFNIRUxMKTsKKyAgICBzY3JpcHQgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHdvcmtpbmdEaXJlY3RvcnksIFNIRUxMKTsKICAgICBzY3JpcHQgKz0gY2hlY2tfZXJyb3I7CiAKICAgICAvLyBDaGFuZ2UgdGhlIHdvcmtpbmcgZHJpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFhDb2RlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsWENvZGVHZW5lcmF0b3IuY3h4CmluZGV4IDVhMDZkNGEuLmFjMGQzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsWENvZGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsWENvZGVHZW5lcmF0b3IuY3h4CkBAIC00MCw3ICs0MCw3IEBACiB7CiAgIGNtTG9jYWxHZW5lcmF0b3I6OkdlbmVyYXRlKCk7CiAKLSAgZm9yIChhdXRvIHRhcmdldCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgIHRhcmdldC0+SGFzTWFjT1NYUnBhdGhJbnN0YWxsTmFtZURpcigiIik7CiAgIH0KIH0KQEAgLTQ5LDcgKzQ5LDcgQEAKIHsKICAgY21Mb2NhbEdlbmVyYXRvcjo6R2VuZXJhdGVJbnN0YWxsUnVsZXMoKTsKIAotICBmb3IgKGF1dG8gdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgdGFyZ2V0LT5IYXNNYWNPU1hScGF0aEluc3RhbGxOYW1lRGlyKCIiKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFjaE8uY3h4IGIvU291cmNlL2NtTWFjaE8uY3h4CmluZGV4IDZjYmVkMzYuLjUzMTEyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1hY2hPLmN4eAorKysgYi9Tb3VyY2UvY21NYWNoTy5jeHgKQEAgLTc5LDE0ICs3OSwxNCBAQAogICAvLyBBIGxvYWRfY29tbWFuZCBhbmQgaXRzIGFzc29jaWF0ZWQgZGF0YQogICBzdHJ1Y3QgUmF3TG9hZENvbW1hbmQKICAgewotICAgIHVpbnQzMl90IHR5cGUoY29uc3QgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcyogbSkgY29uc3QKKyAgICB1aW50MzJfdCB0eXBlKGNvbnN0IGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHMmIG0pIGNvbnN0CiAgICAgewogICAgICAgaWYgKHRoaXMtPkxvYWRDb21tYW5kLnNpemUoKSA8IHNpemVvZihsb2FkX2NvbW1hbmQpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgICAgfQogICAgICAgY29uc3QgbG9hZF9jb21tYW5kKiBjbWQgPQogICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGxvYWRfY29tbWFuZCo+KCZ0aGlzLT5Mb2FkQ29tbWFuZFswXSk7Ci0gICAgICByZXR1cm4gbS0+c3dhcChjbWQtPmNtZCk7CisgICAgICByZXR1cm4gbS5zd2FwKGNtZC0+Y21kKTsKICAgICB9CiAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gTG9hZENvbW1hbmQ7CiAgIH07CkBAIC0xODYsOCArMTg2LDExIEBACiB7CiBwdWJsaWM6CiAgIGNtTWFjaE9JbnRlcm5hbChjb25zdCBjaGFyKiBmbmFtZSk7CisgIGNtTWFjaE9JbnRlcm5hbChjb25zdCBjbU1hY2hPSW50ZXJuYWwmKSA9IGRlbGV0ZTsKICAgfmNtTWFjaE9JbnRlcm5hbCgpOwogCisgIGNtTWFjaE9JbnRlcm5hbCYgb3BlcmF0b3I9KGNvbnN0IGNtTWFjaE9JbnRlcm5hbCYpID0gZGVsZXRlOworCiAgIC8vIHJlYWQgYSBNYWNoLU8gZmlsZQogICBib29sIHJlYWRfbWFjaF9vKHVpbnQzMl90IGZpbGVfb2Zmc2V0KTsKIApAQCAtMjAyLDcgKzIwNSw3IEBACiAgIHN0ZDo6c3RyaW5nIEVycm9yTWVzc2FnZTsKIAogICAvLyB0aGUgbGlzdCBvZiBNYWNoLU8ncwotICBzdGQ6OnZlY3RvcjxjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzKj4gTWFjaE9MaXN0OworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcz4+IE1hY2hPTGlzdDsKIH07CiAKIGNtTWFjaE9JbnRlcm5hbDo6Y21NYWNoT0ludGVybmFsKGNvbnN0IGNoYXIqIGZuYW1lKQpAQCAtMjYwLDEyICsyNjMsNyBAQAogICB9CiB9CiAKLWNtTWFjaE9JbnRlcm5hbDo6fmNtTWFjaE9JbnRlcm5hbCgpCi17Ci0gIGZvciAoYXV0byYgaSA6IHRoaXMtPk1hY2hPTGlzdCkgewotICAgIGRlbGV0ZSBpOwotICB9Ci19CitjbU1hY2hPSW50ZXJuYWw6On5jbU1hY2hPSW50ZXJuYWwoKSA9IGRlZmF1bHQ7CiAKIGJvb2wgY21NYWNoT0ludGVybmFsOjpyZWFkX21hY2hfbyh1aW50MzJfdCBmaWxlX29mZnNldCkKIHsKQEAgLTI4MCwyNSArMjc4LDI1IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcyogZiA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzPiBmOwogICBpZiAobWFnaWMgPT0gTUhfQ0lHQU0gfHwgbWFnaWMgPT0gTUhfTUFHSUMpIHsKICAgICBib29sIHN3YXAgPSBmYWxzZTsKICAgICBpZiAobWFnaWMgPT0gTUhfQ0lHQU0pIHsKICAgICAgIHN3YXAgPSB0cnVlOwogICAgIH0KLSAgICBmID0gbmV3IGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHNJbXBsPG1hY2hfaGVhZGVyPihzd2FwKTsKKyAgICBmID0gY206Om1ha2VfdW5pcXVlPGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHNJbXBsPG1hY2hfaGVhZGVyPj4oc3dhcCk7CiAgIH0gZWxzZSBpZiAobWFnaWMgPT0gTUhfQ0lHQU1fNjQgfHwgbWFnaWMgPT0gTUhfTUFHSUNfNjQpIHsKICAgICBib29sIHN3YXAgPSBmYWxzZTsKICAgICBpZiAobWFnaWMgPT0gTUhfQ0lHQU1fNjQpIHsKICAgICAgIHN3YXAgPSB0cnVlOwogICAgIH0KLSAgICBmID0gbmV3IGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHNJbXBsPG1hY2hfaGVhZGVyXzY0Pihzd2FwKTsKKyAgICBmID0KKyAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzSW1wbDxtYWNoX2hlYWRlcl82ND4+KHN3YXApOwogICB9CiAKICAgaWYgKGYgJiYgZi0+cmVhZF9tYWNoX28odGhpcy0+RmluKSkgewotICAgIHRoaXMtPk1hY2hPTGlzdC5wdXNoX2JhY2soZik7CisgICAgdGhpcy0+TWFjaE9MaXN0LnB1c2hfYmFjayhzdGQ6Om1vdmUoZikpOwogICB9IGVsc2UgewotICAgIGRlbGV0ZSBmOwogICAgIHRoaXMtPkVycm9yTWVzc2FnZSA9ICJGYWlsZWQgdG8gcmVhZCBNYWNoLU8gaGVhZGVyLiI7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0zMzMsMTEgKzMzMSwxMiBAQAogICB9CiAKICAgLy8gZ3JhYiB0aGUgZmlyc3QgTWFjaC1PIGFuZCBnZXQgdGhlIGluc3RhbGwgbmFtZSBmcm9tIHRoYXQgb25lCi0gIGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHMqIG1hY2hvID0gdGhpcy0+SW50ZXJuYWwtPk1hY2hPTGlzdFswXTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHM+JiBtYWNobyA9CisgICAgdGhpcy0+SW50ZXJuYWwtPk1hY2hPTGlzdFswXTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNoby0+bG9hZF9jb21tYW5kcygpLnNpemUoKTsgaSsrKSB7CiAgICAgY29uc3QgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kczo6UmF3TG9hZENvbW1hbmQmIGNtZCA9CiAgICAgICBtYWNoby0+bG9hZF9jb21tYW5kcygpW2ldOwotICAgIHVpbnQzMl90IGxjX2NtZCA9IGNtZC50eXBlKG1hY2hvKTsKKyAgICB1aW50MzJfdCBsY19jbWQgPSBjbWQudHlwZSgqbWFjaG8pOwogICAgIGlmIChsY19jbWQgPT0gTENfSURfRFlMSUIgfHwgbGNfY21kID09IExDX0xPQURfV0VBS19EWUxJQiB8fAogICAgICAgICBsY19jbWQgPT0gTENfTE9BRF9EWUxJQikgewogICAgICAgaWYgKHNpemVvZihkeWxpYl9jb21tYW5kKSA8IGNtZC5Mb2FkQ29tbWFuZC5zaXplKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1hY3JvQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21NYWNyb0NvbW1hbmQuY3h4CmluZGV4IGJhOTk0N2EuLjBiMGQ5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1hY3JvQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTWFjcm9Db21tYW5kLmN4eApAQCAtNywxMCArNywxMCBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtRnVuY3Rpb25CbG9ja2VyLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CiAgIGNtTWFrZWZpbGUmIG1mID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7Ci0gIG1mLkFwcGVuZFByb3BlcnR5KCJNQUNST1MiLCB0aGlzLT5BcmdzWzBdLmNfc3RyKCkpOworICBtZi5BcHBlbmRQcm9wZXJ0eSgiTUFDUk9TIiwgdGhpcy0+QXJnc1swXSk7CiAgIC8vIGNyZWF0ZSBhIG5ldyBjb21tYW5kIGFuZCBhZGQgaXQgdG8gY21ha2UKICAgY21NYWNyb0hlbHBlckNvbW1hbmQgZjsKICAgZi5BcmdzID0gdGhpcy0+QXJnczsKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAvLyBjcmVhdGUgYSBmdW5jdGlvbiBibG9ja2VyCiAgIHsKICAgICBhdXRvIGZiID0gY206Om1ha2VfdW5pcXVlPGNtTWFjcm9GdW5jdGlvbkJsb2NrZXI+KCk7Ci0gICAgY21BcHBlbmQoZmItPkFyZ3MsIGFyZ3MpOworICAgIGNtOjphcHBlbmQoZmItPkFyZ3MsIGFyZ3MpOwogICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZEZ1bmN0aW9uQmxvY2tlcihzdGQ6Om1vdmUoZmIpKTsKICAgfQogICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlLmN4eAppbmRleCBmMTQzZWY3Li44MTJmOTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWtlZmlsZS5jeHgKKysrIGIvU291cmNlL2NtTWFrZWZpbGUuY3h4CkBAIC0xNSwxMCArMTUsMTUgQEAKIAogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS9vcHRpb25hbD4KKyNpbmNsdWRlIDxjbS92ZWN0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCisjaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCiAjaW5jbHVkZSAiY21fc3lzX3N0YXQuaCIKIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgpAQCAtMjcsNiArMzIsNyBAQAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUV4cGFuZGVkQ29tbWFuZEFyZ3VtZW50LmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCisjaW5jbHVkZSAiY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUG9vbC5oIgogI2luY2x1ZGUgImNtRnVuY3Rpb25CbG9ja2VyLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCkBAIC0zNiw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY21JbnN0YWxsR2VuZXJhdG9yLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCkBAIC01NCw2ICs2MSw3IEBACiAjaW5jbHVkZSAiY21ha2UuaCIKIAogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKKyMgIGluY2x1ZGUgImNtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmgiCiAjICBpbmNsdWRlICJjbVZhcmlhYmxlV2F0Y2guaCIKICNlbmRpZgogCkBAIC0xMTcsMTUgKzEyNSw3IEBACiAjZW5kaWYKIH0KIAotY21NYWtlZmlsZTo6fmNtTWFrZWZpbGUoKQotewotICBjbURlbGV0ZUFsbCh0aGlzLT5JbnN0YWxsR2VuZXJhdG9ycyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPlRlc3RHZW5lcmF0b3JzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+U291cmNlRmlsZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5UZXN0cyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkltcG9ydGVkVGFyZ2V0c093bmVkKTsKLSAgY21EZWxldGVBbGwodGhpcy0+RXZhbHVhdGlvbkZpbGVzKTsKLX0KK2NtTWFrZWZpbGU6On5jbU1ha2VmaWxlKCkgPSBkZWZhdWx0OwogCiBjbURpcmVjdG9yeUlkIGNtTWFrZWZpbGU6OkdldERpcmVjdG9yeUlkKCkgY29uc3QKIHsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAvLyBJZiB3ZSBldmVyIG5lZWQgdG8gZXhwb3NlIHRoaXMgdG8gQ01ha2UgbGFuZ3VhZ2UgY29kZSB3ZSBzaG91bGQKICAgLy8gYWRkIGEgcmVhZC1vbmx5IHByb3BlcnR5IGluIGNtTWFrZWZpbGU6OkdldFByb3BlcnR5LgogICBjaGFyIGJ1ZlszMl07Ci0gIHNwcmludGYoYnVmLCAiPCVwPiIsCisgIHNwcmludGYoYnVmLCAiKCVwKSIsCiAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCo+KHRoaXMpKTsgLy8gY2FzdCBhdm9pZHMgZm9ybWF0IHdhcm5pbmcKICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1Zik7CiB9CkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgICAgIHRoaXMtPkV4ZWN1dGlvblN0YXR1c1N0YWNrLmJhY2soKS0+U2V0TmVzdGVkRXJyb3IoKTsKICAgICB9CiAgIH0KLSAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UodCwgdGV4dCwgdGhpcy0+R2V0QmFja3RyYWNlKCkpOworICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZSh0LCB0ZXh0LCB0aGlzLT5CYWNrdHJhY2UpOwogfQogCiBib29sIGNtTWFrZWZpbGU6OkNoZWNrQ01QMDAzNyhzdGQ6OnN0cmluZyBjb25zdCYgdGFyZ2V0TmFtZSwKQEAgLTMxMywyMSArMzEzLDU0IEBACiAgIH0KIAogICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICBtc2cgPDwgZnVsbF9wYXRoIDw8ICIoIiA8PCBsZmYuTGluZSA8PCAiKTogICI7Ci0gIG1zZyA8PCBsZmYuTmFtZS5PcmlnaW5hbCA8PCAiKCI7Ci0gIGJvb2wgZXhwYW5kID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRUcmFjZUV4cGFuZCgpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJnczsKICAgc3RkOjpzdHJpbmcgdGVtcDsKKyAgYm9vbCBleHBhbmQgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFRyYWNlRXhwYW5kKCk7CisKKyAgYXJncy5yZXNlcnZlKGxmZi5Bcmd1bWVudHMuc2l6ZSgpKTsKICAgZm9yIChjbUxpc3RGaWxlQXJndW1lbnQgY29uc3QmIGFyZyA6IGxmZi5Bcmd1bWVudHMpIHsKICAgICBpZiAoZXhwYW5kKSB7CiAgICAgICB0ZW1wID0gYXJnLlZhbHVlOwogICAgICAgdGhpcy0+RXhwYW5kVmFyaWFibGVzSW5TdHJpbmcodGVtcCk7Ci0gICAgICBtc2cgPDwgdGVtcDsKKyAgICAgIGFyZ3MucHVzaF9iYWNrKHRlbXApOwogICAgIH0gZWxzZSB7Ci0gICAgICBtc2cgPDwgYXJnLlZhbHVlOworICAgICAgYXJncy5wdXNoX2JhY2soYXJnLlZhbHVlKTsKICAgICB9Ci0gICAgbXNnIDw8ICIgIjsKICAgfQotICBtc2cgPDwgIikiOworCisgIHN3aXRjaCAodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRUcmFjZUZvcm1hdCgpKSB7CisgICAgY2FzZSBjbWFrZTo6VHJhY2VGb3JtYXQ6OlRSQUNFX0pTT05fVjE6IHsKKyNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCisgICAgICBKc29uOjpWYWx1ZSB2YWw7CisgICAgICBKc29uOjpTdHJlYW1Xcml0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgICBidWlsZGVyWyJpbmRlbnRhdGlvbiJdID0gIiI7CisgICAgICB2YWxbImZpbGUiXSA9IGZ1bGxfcGF0aDsKKyAgICAgIHZhbFsibGluZSJdID0gc3RhdGljX2Nhc3Q8SnNvbjo6VmFsdWU6OkludDY0PihsZmYuTGluZSk7CisgICAgICB2YWxbImNtZCJdID0gbGZmLk5hbWUuT3JpZ2luYWw7CisgICAgICB2YWxbImFyZ3MiXSA9IEpzb246OlZhbHVlKEpzb246OmFycmF5VmFsdWUpOworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJnIDogYXJncykgeworICAgICAgICB2YWxbImFyZ3MiXS5hcHBlbmQoYXJnKTsKKyAgICAgIH0KKyAgICAgIHZhbFsidGltZSJdID0gY21TeXN0ZW1Ub29sczo6R2V0VGltZSgpOworICAgICAgdmFsWyJmcmFtZSJdID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8SnNvbjo6VmFsdWU6OlVJbnQ2ND4odGhpcy0+RXhlY3V0aW9uU3RhdHVzU3RhY2suc2l6ZSgpKTsKKyAgICAgIG1zZyA8PCBKc29uOjp3cml0ZVN0cmluZyhidWlsZGVyLCB2YWwpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBjbWFrZTo6VHJhY2VGb3JtYXQ6OlRSQUNFX0hVTUFOOgorICAgICAgbXNnIDw8IGZ1bGxfcGF0aCA8PCAiKCIgPDwgbGZmLkxpbmUgPDwgIik6ICAiOworICAgICAgbXNnIDw8IGxmZi5OYW1lLk9yaWdpbmFsIDw8ICIoIjsKKworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJnIDogYXJncykgeworICAgICAgICBtc2cgPDwgYXJnIDw8ICIgIjsKKyAgICAgIH0KKyAgICAgIG1zZyA8PCAiKSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGNtYWtlOjpUcmFjZUZvcm1hdDo6VFJBQ0VfVU5ERUZJTkVEOgorICAgICAgbXNnIDw8ICJJTlRFUk5BTCBFUlJPUjogVHJhY2UgZm9ybWF0IGlzIFRSQUNFX1VOREVGSU5FRCI7CisgICAgICBicmVhazsKKyAgfQogCiAgIGF1dG8mIGYgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFRyYWNlRmlsZSgpOwogICBpZiAoZikgewpAQCAtMzQxLDE5ICszNzQsMzAgQEAKIGNsYXNzIGNtTWFrZWZpbGVDYWxsCiB7CiBwdWJsaWM6Ci0gIGNtTWFrZWZpbGVDYWxsKGNtTWFrZWZpbGUqIG1mLCBjbUNvbW1hbmRDb250ZXh0IGNvbnN0JiBjYywKKyAgY21NYWtlZmlsZUNhbGwoY21NYWtlZmlsZSogbWYsIGNtTGlzdEZpbGVGdW5jdGlvbiBjb25zdCYgbGZmLAogICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogICAgIDogTWFrZWZpbGUobWYpCiAgIHsKICAgICBjbUxpc3RGaWxlQ29udGV4dCBjb25zdCYgbGZjID0gY21MaXN0RmlsZUNvbnRleHQ6OkZyb21Db21tYW5kQ29udGV4dCgKLSAgICAgIGNjLCB0aGlzLT5NYWtlZmlsZS0+U3RhdGVTbmFwc2hvdC5HZXRFeGVjdXRpb25MaXN0RmlsZSgpKTsKKyAgICAgIGxmZiwgdGhpcy0+TWFrZWZpbGUtPlN0YXRlU25hcHNob3QuR2V0RXhlY3V0aW9uTGlzdEZpbGUoKSk7CiAgICAgdGhpcy0+TWFrZWZpbGUtPkJhY2t0cmFjZSA9IHRoaXMtPk1ha2VmaWxlLT5CYWNrdHJhY2UuUHVzaChsZmMpOwogICAgICsrdGhpcy0+TWFrZWZpbGUtPlJlY3Vyc2lvbkRlcHRoOwogICAgIHRoaXMtPk1ha2VmaWxlLT5FeGVjdXRpb25TdGF0dXNTdGFjay5wdXNoX2JhY2soJnN0YXR1cyk7CisjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc1Byb2ZpbGluZ0VuYWJsZWQoKSkgeworICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0UHJvZmlsaW5nT3V0cHV0KCkuU3RhcnRFbnRyeShsZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxmYyk7CisgICAgfQorI2VuZGlmCiAgIH0KIAogICB+Y21NYWtlZmlsZUNhbGwoKQogICB7CisjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc1Byb2ZpbGluZ0VuYWJsZWQoKSkgeworICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0UHJvZmlsaW5nT3V0cHV0KCkuU3RvcEVudHJ5KCk7CisgICAgfQorI2VuZGlmCiAgICAgdGhpcy0+TWFrZWZpbGUtPkV4ZWN1dGlvblN0YXR1c1N0YWNrLnBvcF9iYWNrKCk7CiAgICAgLS10aGlzLT5NYWtlZmlsZS0+UmVjdXJzaW9uRGVwdGg7CiAgICAgdGhpcy0+TWFrZWZpbGUtPkJhY2t0cmFjZSA9IHRoaXMtPk1ha2VmaWxlLT5CYWNrdHJhY2UuUG9wKCk7CkBAIC02NTMsNiArNjk3LDI3IEBACiAgIHJldHVybiB0cnVlOwogfQogCitib29sIGNtTWFrZWZpbGU6OlJlYWRMaXN0RmlsZUFzU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmlydHVhbEZpbGVOYW1lKQoreworICBzdGQ6OnN0cmluZyBmaWxlbmFtZXRvcmVhZCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgdmlydHVhbEZpbGVOYW1lLCB0aGlzLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOworCisgIExpc3RGaWxlU2NvcGUgc2NvcGUodGhpcywgZmlsZW5hbWV0b3JlYWQpOworCisgIGNtTGlzdEZpbGUgbGlzdEZpbGU7CisgIGlmICghbGlzdEZpbGUuUGFyc2VTdHJpbmcoY29udGVudC5jX3N0cigpLCB2aXJ0dWFsRmlsZU5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRNZXNzZW5nZXIoKSwgdGhpcy0+QmFja3RyYWNlKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHRoaXMtPlJlYWRMaXN0RmlsZShsaXN0RmlsZSwgZmlsZW5hbWV0b3JlYWQpOworICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RmF0YWxFcnJvck9jY3VyZWQoKSkgeworICAgIHNjb3BlLlF1aWV0KCk7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgY21NYWtlZmlsZTo6UmVhZExpc3RGaWxlKGNtTGlzdEZpbGUgY29uc3QmIGxpc3RGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVuYW1ldG9yZWFkKQogewpAQCAtNzM3LDE4ICs4MDIsMTkgQEAKICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjb25kaXRpb24sCiAgIGJvb2wgaW5wdXRJc0NvbnRlbnQpCiB7Ci0gIHRoaXMtPkV2YWx1YXRpb25GaWxlcy5wdXNoX2JhY2sobmV3IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlKAotICAgIGlucHV0RmlsZSwgc3RkOjptb3ZlKG91dHB1dE5hbWUpLCBzdGQ6Om1vdmUoY29uZGl0aW9uKSwgaW5wdXRJc0NvbnRlbnQsCi0gICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzApKSk7CisgIHRoaXMtPkV2YWx1YXRpb25GaWxlcy5wdXNoX2JhY2soCisgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlPigKKyAgICAgIGlucHV0RmlsZSwgc3RkOjptb3ZlKG91dHB1dE5hbWUpLCBzdGQ6Om1vdmUoY29uZGl0aW9uKSwgaW5wdXRJc0NvbnRlbnQsCisgICAgICB0aGlzLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA3MCkpKTsKIH0KIAotc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqPgorY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlPj4mCiBjbU1ha2VmaWxlOjpHZXRFdmFsdWF0aW9uRmlsZXMoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RXZhbHVhdGlvbkZpbGVzOwogfQogCi1zdGQ6OnZlY3RvcjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcio+CitzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I+PiBjb25zdCYKIGNtTWFrZWZpbGU6OkdldEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yczsKQEAgLTc1NywxNiArODIzLDIxIEBACiB2b2lkIGNtTWFrZWZpbGU6OlJlbW92ZUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvckNNUDAwMjQoCiAgIGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnZW4pCiB7Ci0gIGF1dG8gaXQgPSBzdGQ6OmZpbmQodGhpcy0+RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9ycy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZW5kKCksIGdlbik7CisgIGF1dG8gaXQgPQorICAgIHN0ZDo6ZmluZF9pZih0aGlzLT5FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZW5kKCksCisgICAgICAgICAgICAgICAgIFtnZW5dKHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4gY29uc3QmIHApIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5nZXQoKSA9PSBnZW47CisgICAgICAgICAgICAgICAgIH0pOwogICBpZiAoaXQgIT0gdGhpcy0+RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9ycy5lbmQoKSkgewogICAgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZXJhc2UoaXQpOwogICB9CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6QWRkRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnZW4pCit2b2lkIGNtTWFrZWZpbGU6OkFkZEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcigKKyAgc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPiBnZW4pCiB7Ci0gIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMucHVzaF9iYWNrKGdlbik7CisgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShnZW4pKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTc4MCwzOCArODUxLDQyIEBACiB9OwogfQogCi12b2lkIGNtTWFrZWZpbGU6OkFkZEZpbmFsQWN0aW9uKEZpbmFsQWN0aW9uIGFjdGlvbikKK3ZvaWQgY21NYWtlZmlsZTo6QWRkR2VuZXJhdG9yQWN0aW9uKEdlbmVyYXRvckFjdGlvbiBhY3Rpb24pCiB7Ci0gIHRoaXMtPkZpbmFsQWN0aW9ucy5wdXNoX2JhY2soc3RkOjptb3ZlKGFjdGlvbikpOworICBhc3NlcnQoIXRoaXMtPkdlbmVyYXRvckFjdGlvbnNJbnZva2VkKTsKKyAgdGhpcy0+R2VuZXJhdG9yQWN0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGFjdGlvbiksIHRoaXMtPkJhY2t0cmFjZSk7CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6RmluYWxQYXNzKCkKK3ZvaWQgY21NYWtlZmlsZTo6RG9HZW5lcmF0ZShjbUxvY2FsR2VuZXJhdG9yJiBsZykKIHsKICAgLy8gZG8gYWxsIHRoZSB2YXJpYWJsZSBleHBhbnNpb25zIGhlcmUKICAgdGhpcy0+RXhwYW5kVmFyaWFibGVzQ01QMDAxOSgpOwogCiAgIC8vIGdpdmUgYWxsIHRoZSBjb21tYW5kcyBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcKICAgLy8gYWZ0ZXIgdGhlIGZpbGUgaGFzIGJlZW4gcGFyc2VkIGJlZm9yZSBnZW5lcmF0aW9uCi0gIGZvciAoRmluYWxBY3Rpb24mIGFjdGlvbiA6IHRoaXMtPkZpbmFsQWN0aW9ucykgewotICAgIGFjdGlvbigqdGhpcyk7CisgIGZvciAoY29uc3QgQlQ8R2VuZXJhdG9yQWN0aW9uPiYgYWN0aW9uIDogdGhpcy0+R2VuZXJhdG9yQWN0aW9ucykgeworICAgIGFjdGlvbi5WYWx1ZShsZywgYWN0aW9uLkJhY2t0cmFjZSk7CiAgIH0KKyAgdGhpcy0+R2VuZXJhdG9yQWN0aW9uc0ludm9rZWQgPSB0cnVlOworICB0aGlzLT5EZWxheWVkT3V0cHV0RmlsZXMuY2xlYXIoKTsKKyAgdGhpcy0+RGVsYXllZE91dHB1dEZpbGVzSGF2ZUdlbmV4ID0gZmFsc2U7CiAKICAgLy8gZ28gdGhyb3VnaCBhbGwgY29uZmlndXJlZCBmaWxlcyBhbmQgc2VlIHdoaWNoIG9uZXMgc3RpbGwgZXhpc3QuCiAgIC8vIHdlIGRvbid0IHdhbnQgY21ha2UgdG8gcmUtcnVuIGlmIGEgY29uZmlndXJlZCBmaWxlIGlzIGNyZWF0ZWQgYW5kIGRlbGV0ZWQKICAgLy8gZHVyaW5nIHByb2Nlc3NpbmcgYXMgdGhhdCB3b3VsZCBtYWtlIGl0IGEgdHJhbnNpZW50IGZpbGUgdGhhdCBjYW4ndAogICAvLyBpbmZsdWVuY2UgdGhlIGJ1aWxkIHByb2Nlc3MKLSAgY21FcmFzZUlmKHRoaXMtPk91dHB1dEZpbGVzLCBmaWxlX25vdF9wZXJzaXN0ZW50KCkpOworICBjbTo6ZXJhc2VfaWYodGhpcy0+T3V0cHV0RmlsZXMsIGZpbGVfbm90X3BlcnNpc3RlbnQoKSk7CiAKICAgLy8gaWYgYSBjb25maWd1cmVkIGZpbGUgaXMgdXNlZCBhcyBpbnB1dCBmb3IgYW5vdGhlciBjb25maWd1cmVkIGZpbGUsCiAgIC8vIGFuZCB0aGVuIGRlbGV0ZWQgaXQgd2lsbCBzaG93IHVwIGluIHRoZSBpbnB1dCBsaXN0IGZpbGVzIHNvIHdlCiAgIC8vIG5lZWQgdG8gc2NhbiB0aG9zZSB0b28KLSAgY21FcmFzZUlmKHRoaXMtPkxpc3RGaWxlcywgZmlsZV9ub3RfcGVyc2lzdGVudCgpKTsKKyAgY206OmVyYXNlX2lmKHRoaXMtPkxpc3RGaWxlcywgZmlsZV9ub3RfcGVyc2lzdGVudCgpKTsKIH0KIAogLy8gR2VuZXJhdGUgdGhlIG91dHB1dCBmaWxlCi12b2lkIGNtTWFrZWZpbGU6OkNvbmZpZ3VyZUZpbmFsUGFzcygpCit2b2lkIGNtTWFrZWZpbGU6OkdlbmVyYXRlKGNtTG9jYWxHZW5lcmF0b3ImIGxnKQogewotICB0aGlzLT5GaW5hbFBhc3MoKTsKKyAgdGhpcy0+RG9HZW5lcmF0ZShsZyk7CiAgIGNvbnN0IGNoYXIqIG9sZFZhbHVlID0gdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQkFDS1dBUkRTX0NPTVBBVElCSUxJVFkiKTsKICAgaWYgKG9sZFZhbHVlICYmCiAgICAgICBjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZShjbVN5c3RlbVRvb2xzOjpPUF9MRVNTLCBvbGRWYWx1ZSwgIjIuNCIpKSB7CkBAIC04MjUsNiArOTAwLDM5IEBACiAgIH0KIH0KIAorbmFtZXNwYWNlIHsKKy8vIFRoZXJlIGFyZSBzdGlsbCB0b28gbWFueSBpbXBsaWNpdCBiYWNrdHJhY2VzIHRocm91Z2ggY21NYWtlZmlsZS4gIEFzIGEKKy8vIHdvcmthcm91bmQgd2UgcmVzZXQgdGhlIGJhY2t0cmFjZSB0ZW1wb3JhcmlseS4KK3N0cnVjdCBCYWNrdHJhY2VHdWFyZAoreworICBCYWNrdHJhY2VHdWFyZChjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LCBjbUxpc3RGaWxlQmFja3RyYWNlIGN1cnJlbnQpCisgICAgOiBCYWNrdHJhY2UobGZidCkKKyAgICAsIFByZXZpb3VzKGxmYnQpCisgIHsKKyAgICB0aGlzLT5CYWNrdHJhY2UgPSBzdGQ6Om1vdmUoY3VycmVudCk7CisgIH0KKworICB+QmFja3RyYWNlR3VhcmQoKSB7IHRoaXMtPkJhY2t0cmFjZSA9IHN0ZDo6bW92ZShQcmV2aW91cyk7IH0KKworcHJpdmF0ZToKKyAgY21MaXN0RmlsZUJhY2t0cmFjZSYgQmFja3RyYWNlOworICBjbUxpc3RGaWxlQmFja3RyYWNlIFByZXZpb3VzOworfTsKKworY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBNYWtlT3B0aW9uYWxTdHJpbmcoY29uc3QgY2hhciogc3RyKQoreworICBpZiAoc3RyKSB7CisgICAgcmV0dXJuIHN0cjsKKyAgfQorICByZXR1cm4gY206Om51bGxvcHQ7Cit9CisKK2NvbnN0IGNoYXIqIEdldENTdHJPck51bGwoY29uc3QgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiYgc3RyKQoreworICByZXR1cm4gc3RyID8gc3RyLT5jX3N0cigpIDogbnVsbHB0cjsKK30KK30KKwogYm9vbCBjbU1ha2VmaWxlOjpWYWxpZGF0ZUN1c3RvbUNvbW1hbmQoCiAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpIGNvbnN0CiB7CkBAIC04NDIsNyArOTUwLDggQEAKIH0KIAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkdldEN1c3RvbUNvbW1hbmRUYXJnZXQoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzKSBjb25zdAorICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LCBjbU9iamVjdExpYnJhcnlDb21tYW5kcyBvYmpMaWJDb21tYW5kcywKKyAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkgY29uc3QKIHsKICAgLy8gRmluZCB0aGUgdGFyZ2V0IHRvIHdoaWNoIHRvIGFkZCB0aGUgY3VzdG9tIGNvbW1hbmQuCiAgIGF1dG8gdGkgPSB0aGlzLT5UYXJnZXRzLmZpbmQodGFyZ2V0KTsKQEAgLTg3Niw3ICs5ODUsNyBAQAogICAgICAgICBlIDw8ICJObyBUQVJHRVQgJyIgPDwgdGFyZ2V0CiAgICAgICAgICAgPDwgIicgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGlzIGRpcmVjdG9yeS4iOwogICAgICAgfQotICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKG1lc3NhZ2VUeXBlLCBlLnN0cigpKTsKKyAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKG1lc3NhZ2VUeXBlLCBlLnN0cigpLCBsZmJ0KTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg4OSw3ICs5OTgsOCBAQAogICAgIGUgPDwgIlRhcmdldCBcIiIgPDwgdGFyZ2V0CiAgICAgICA8PCAiXCIgaXMgYW4gT0JKRUNUIGxpYnJhcnkgIgogICAgICAgICAgInRoYXQgbWF5IG5vdCBoYXZlIFBSRV9CVUlMRCwgUFJFX0xJTkssIG9yIFBPU1RfQlVJTEQgY29tbWFuZHMuIjsKLSAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZidCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KICAgaWYgKHQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CkBAIC04OTcsNyArMTAwNyw4IEBACiAgICAgZSA8PCAiVGFyZ2V0IFwiIiA8PCB0YXJnZXQKICAgICAgIDw8ICJcIiBpcyBhbiBJTlRFUkZBQ0UgbGlicmFyeSAiCiAgICAgICAgICAidGhhdCBtYXkgbm90IGhhdmUgUFJFX0JVSUxELCBQUkVfTElOSywgb3IgUE9TVF9CVUlMRCBjb21tYW5kcy4iOwotICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOworICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZmJ0KTsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCkBAIC05MTAsOSArMTAyMSwxMCBAQAogICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsCiAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCiAgIGJvb2wgdXNlc190ZXJtaW5hbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKLSAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMpCisgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMpCiB7Ci0gIGNtVGFyZ2V0KiB0ID0gdGhpcy0+R2V0Q3VzdG9tQ29tbWFuZFRhcmdldCh0YXJnZXQsIG9iakxpYkNvbW1hbmRzKTsKKyAgY21UYXJnZXQqIHQgPSB0aGlzLT5HZXRDdXN0b21Db21tYW5kVGFyZ2V0KAorICAgIHRhcmdldCwgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHM6OlJlamVjdCwgdGhpcy0+QmFja3RyYWNlKTsKIAogICAvLyBWYWxpZGF0ZSBjdXN0b20gY29tbWFuZHMuCiAgIGlmICghdCB8fCAhdGhpcy0+VmFsaWRhdGVDdXN0b21Db21tYW5kKGNvbW1hbmRMaW5lcykpIHsKQEAgLTkyMCwxNzUgKzEwMzIsODMgQEAKICAgfQogCiAgIC8vIEFsd2F5cyBjcmVhdGUgdGhlIGJ5cHJvZHVjdCBzb3VyY2VzIGFuZCBtYXJrIHRoZW0gZ2VuZXJhdGVkLgotICB0aGlzLT5DcmVhdGVHZW5lcmF0ZWRTb3VyY2VzKGJ5cHJvZHVjdHMpOworICB0aGlzLT5DcmVhdGVHZW5lcmF0ZWRCeXByb2R1Y3RzKGJ5cHJvZHVjdHMpOwogCi0gIHRoaXMtPkNvbW1pdEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKLSAgICB0LCBieXByb2R1Y3RzLCBkZXBlbmRzLCBjb21tYW5kTGluZXMsIHR5cGUsIGNvbW1lbnQsIHdvcmtpbmdEaXIsCi0gICAgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsIGRlcGZpbGUsIGpvYl9wb29sLCBjb21tYW5kX2V4cGFuZF9saXN0cyk7CisgIC8vIFN0cmluZ3MgY291bGQgYmUgbW92ZWQgaW50byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBDKysxNC4KKyAgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBjb21tZW50U3RyID0gTWFrZU9wdGlvbmFsU3RyaW5nKGNvbW1lbnQpOworICBjbTo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+IHdvcmtpbmdTdHIgPSBNYWtlT3B0aW9uYWxTdHJpbmcod29ya2luZ0Rpcik7CisKKyAgLy8gRGlzcGF0Y2ggY29tbWFuZCBjcmVhdGlvbiB0byBhbGxvdyBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgaW4gb3V0cHV0cy4KKyAgdGhpcy0+QWRkR2VuZXJhdG9yQWN0aW9uKFs9XShjbUxvY2FsR2VuZXJhdG9yJiBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSB7CisgICAgQmFja3RyYWNlR3VhcmQgZ3VhcmQodGhpcy0+QmFja3RyYWNlLCBsZmJ0KTsKKyAgICBkZXRhaWw6OkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgICAgIGxnLCBsZmJ0LCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsIHQsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywKKyAgICAgIHR5cGUsIEdldENTdHJPck51bGwoY29tbWVudFN0ciksIEdldENTdHJPck51bGwod29ya2luZ1N0ciksCisgICAgICBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwgZGVwZmlsZSwgam9iX3Bvb2wsIGNvbW1hbmRfZXhwYW5kX2xpc3RzKTsKKyAgfSk7CiAKICAgcmV0dXJuIHQ7CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6Q29tbWl0Q3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAotICBjbVRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKLSAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY21DdXN0b21Db21tYW5kVHlwZSB0eXBlLAotICBjb25zdCBjaGFyKiBjb21tZW50LCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlLAotICBib29sIHVzZXNfdGVybWluYWwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsCi0gIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMpCi17Ci0gIC8vIEFkZCB0aGUgY29tbWFuZCB0byB0aGUgYXBwcm9wcmlhdGUgYnVpbGQgc3RlcCBmb3IgdGhlIHRhcmdldC4KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX291dHB1dDsKLSAgY21DdXN0b21Db21tYW5kIGNjKHRoaXMsIG5vX291dHB1dCwgYnlwcm9kdWN0cywgZGVwZW5kcywgY29tbWFuZExpbmVzLAotICAgICAgICAgICAgICAgICAgICAgY29tbWVudCwgd29ya2luZ0Rpcik7Ci0gIGNjLlNldEVzY2FwZU9sZFN0eWxlKGVzY2FwZU9sZFN0eWxlKTsKLSAgY2MuU2V0RXNjYXBlQWxsb3dNYWtlVmFycyh0cnVlKTsKLSAgY2MuU2V0VXNlc1Rlcm1pbmFsKHVzZXNfdGVybWluYWwpOwotICBjYy5TZXRDb21tYW5kRXhwYW5kTGlzdHMoY29tbWFuZF9leHBhbmRfbGlzdHMpOwotICBjYy5TZXREZXBmaWxlKGRlcGZpbGUpOwotICBjYy5TZXRKb2JQb29sKGpvYl9wb29sKTsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBjbUN1c3RvbUNvbW1hbmRUeXBlOjpQUkVfQlVJTEQ6Ci0gICAgICB0YXJnZXQtPkFkZFByZUJ1aWxkQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgY21DdXN0b21Db21tYW5kVHlwZTo6UFJFX0xJTks6Ci0gICAgICB0YXJnZXQtPkFkZFByZUxpbmtDb21tYW5kKHN0ZDo6bW92ZShjYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBjbUN1c3RvbUNvbW1hbmRUeXBlOjpQT1NUX0JVSUxEOgotICAgICAgdGFyZ2V0LT5BZGRQb3N0QnVpbGRDb21tYW5kKHN0ZDo6bW92ZShjYykpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICB0aGlzLT5BZGRUYXJnZXRCeXByb2R1Y3RzKHRhcmdldCwgYnlwcm9kdWN0cyk7Ci19Ci0KLWNtU291cmNlRmlsZSogY21NYWtlZmlsZTo6QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAordm9pZCBjbU1ha2VmaWxlOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRwdXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywKLSAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLAotICBib29sIGVzY2FwZU9sZFN0eWxlLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsCisgIGNvbnN0IENvbW1hbmRTb3VyY2VDYWxsYmFjayYgY2FsbGJhY2ssIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKKyAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0czsKLSAgb3V0cHV0cy5wdXNoX2JhY2sob3V0cHV0KTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7CiAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICByZXR1cm4gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIG91dHB1dHMsIG5vX2J5cHJvZHVjdHMsIGRlcGVuZHMsIG1haW5fZGVwZW5kZW5jeSwgbm9faW1wbGljaXRfZGVwZW5kcywKLSAgICBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIHJlcGxhY2UsIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLAotICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBkZXBmaWxlLCBqb2JfcG9vbCk7CisgIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICB7IG91dHB1dCB9LCBub19ieXByb2R1Y3RzLCBkZXBlbmRzLCBtYWluX2RlcGVuZGVuY3ksIG5vX2ltcGxpY2l0X2RlcGVuZHMsCisgICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCBjYWxsYmFjaywgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsCisgICAgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKIH0KIAotY21Tb3VyY2VGaWxlKiBjbU1ha2VmaWxlOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCit2b2lkIGNtTWFrZWZpbGU6OkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKICAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAogICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAotICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCi0gIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKKyAgY29uc3QgY2hhciogd29ya2luZ0RpciwgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjaywgYm9vbCByZXBsYWNlLAorICBib29sIGVzY2FwZU9sZFN0eWxlLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCiB7CiAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3V0cHV0LgogICBpZiAob3V0cHV0cy5lbXB0eSgpKSB7CiAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkF0dGVtcHQgdG8gYWRkIGEgY3VzdG9tIHJ1bGUgd2l0aCBubyBvdXRwdXQhIik7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuOwogICB9CiAKICAgLy8gVmFsaWRhdGUgY3VzdG9tIGNvbW1hbmRzLgogICBpZiAoIXRoaXMtPlZhbGlkYXRlQ3VzdG9tQ29tbWFuZChjb21tYW5kTGluZXMpKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuOwogICB9CiAKICAgLy8gQWx3YXlzIGNyZWF0ZSB0aGUgb3V0cHV0IHNvdXJjZXMgYW5kIG1hcmsgdGhlbSBnZW5lcmF0ZWQuCi0gIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZFNvdXJjZXMob3V0cHV0cyk7Ci0gIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZFNvdXJjZXMoYnlwcm9kdWN0cyk7CisgIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZE91dHB1dHMob3V0cHV0cyk7CisgIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZEJ5cHJvZHVjdHMoYnlwcm9kdWN0cyk7CiAKLSAgcmV0dXJuIHRoaXMtPkNvbW1pdEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgICBvdXRwdXRzLCBieXByb2R1Y3RzLCBkZXBlbmRzLCBtYWluX2RlcGVuZGVuY3ksIGltcGxpY2l0X2RlcGVuZHMsCi0gICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCByZXBsYWNlLCBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwKLSAgICBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wpOwotfQorICAvLyBTdHJpbmdzIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggQysrMTQuCisgIGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gY29tbWVudFN0ciA9IE1ha2VPcHRpb25hbFN0cmluZyhjb21tZW50KTsKKyAgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiB3b3JraW5nU3RyID0gTWFrZU9wdGlvbmFsU3RyaW5nKHdvcmtpbmdEaXIpOwogCi1jbVNvdXJjZUZpbGUqIGNtTWFrZWZpbGU6OkNvbW1pdEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKLSAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAotICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAotICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCi0gIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKLXsKLSAgLy8gQ2hvb3NlIGEgc291cmNlIGZpbGUgb24gd2hpY2ggdG8gc3RvcmUgdGhlIGN1c3RvbSBjb21tYW5kLgotICBjbVNvdXJjZUZpbGUqIGZpbGUgPSBudWxscHRyOwotICBpZiAoIWNvbW1hbmRMaW5lcy5lbXB0eSgpICYmICFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgewotICAgIC8vIFRoZSBtYWluIGRlcGVuZGVuY3kgd2FzIHNwZWNpZmllZC4gIFVzZSBpdCB1bmxlc3MgYSBkaWZmZXJlbnQKLSAgICAvLyBjdXN0b20gY29tbWFuZCBhbHJlYWR5IHVzZWQgaXQuCi0gICAgZmlsZSA9IHRoaXMtPkdldFNvdXJjZShtYWluX2RlcGVuZGVuY3kpOwotICAgIGlmIChmaWxlICYmIGZpbGUtPkdldEN1c3RvbUNvbW1hbmQoKSAmJiAhcmVwbGFjZSkgewotICAgICAgLy8gVGhlIG1haW4gZGVwZW5kZW5jeSBhbHJlYWR5IGhhcyBhIGN1c3RvbSBjb21tYW5kLgotICAgICAgaWYgKGNvbW1hbmRMaW5lcyA9PSBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCktPkdldENvbW1hbmRMaW5lcygpKSB7Ci0gICAgICAgIC8vIFRoZSBleGlzdGluZyBjdXN0b20gY29tbWFuZCBpcyBpZGVudGljYWwuICBTaWxlbnRseSBpZ25vcmUKLSAgICAgICAgLy8gdGhlIGR1cGxpY2F0ZS4KLSAgICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgICB9Ci0gICAgICAvLyBUaGUgZXhpc3RpbmcgY3VzdG9tIGNvbW1hbmQgaXMgZGlmZmVyZW50LiAgV2UgbmVlZCB0bwotICAgICAgLy8gZ2VuZXJhdGUgYSBydWxlIGZpbGUgZm9yIHRoaXMgbmV3IGNvbW1hbmQuCi0gICAgICBmaWxlID0gbnVsbHB0cjsKLSAgICB9IGVsc2UgaWYgKCFmaWxlKSB7Ci0gICAgICBmaWxlID0gdGhpcy0+Q3JlYXRlU291cmNlKG1haW5fZGVwZW5kZW5jeSk7CisgIC8vIERpc3BhdGNoIGNvbW1hbmQgY3JlYXRpb24gdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dHMuCisgIHRoaXMtPkFkZEdlbmVyYXRvckFjdGlvbihbPV0oY21Mb2NhbEdlbmVyYXRvciYgbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkgeworICAgIEJhY2t0cmFjZUd1YXJkIGd1YXJkKHRoaXMtPkJhY2t0cmFjZSwgbGZidCk7CisgICAgY21Tb3VyY2VGaWxlKiBzZiA9IGRldGFpbDo6QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgICAgbGcsIGxmYnQsIGNtQ29tbWFuZE9yaWdpbjo6UHJvamVjdCwgb3V0cHV0cywgYnlwcm9kdWN0cywgZGVwZW5kcywKKyAgICAgIG1haW5fZGVwZW5kZW5jeSwgaW1wbGljaXRfZGVwZW5kcywgY29tbWFuZExpbmVzLAorICAgICAgR2V0Q1N0ck9yTnVsbChjb21tZW50U3RyKSwgR2V0Q1N0ck9yTnVsbCh3b3JraW5nU3RyKSwgcmVwbGFjZSwKKyAgICAgIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wpOworICAgIGlmIChjYWxsYmFjayAmJiBzZikgeworICAgICAgY2FsbGJhY2soc2YpOwogICAgIH0KLSAgfQotCi0gIC8vIEdlbmVyYXRlIGEgcnVsZSBmaWxlIGlmIHRoZSBtYWluIGRlcGVuZGVuY3kgaXMgbm90IGF2YWlsYWJsZS4KLSAgaWYgKCFmaWxlKSB7Ci0gICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7Ci0KLSAgICAvLyBDb25zdHJ1Y3QgYSBydWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBvdXRwdXQgcHJvZHVjZWQuCi0gICAgc3RkOjpzdHJpbmcgb3V0TmFtZSA9IGdnLT5HZW5lcmF0ZVJ1bGVGaWxlKG91dHB1dHNbMF0pOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHJ1bGUgZmlsZSBhbHJlYWR5IGV4aXN0cy4KLSAgICBmaWxlID0gdGhpcy0+R2V0U291cmNlKG91dE5hbWUsIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pOwotICAgIGlmIChmaWxlICYmIGZpbGUtPkdldEN1c3RvbUNvbW1hbmQoKSAmJiAhcmVwbGFjZSkgewotICAgICAgLy8gVGhlIHJ1bGUgZmlsZSBhbHJlYWR5IGV4aXN0cy4KLSAgICAgIGlmIChjb21tYW5kTGluZXMgIT0gZmlsZS0+R2V0Q3VzdG9tQ29tbWFuZCgpLT5HZXRDb21tYW5kTGluZXMoKSkgewotICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQXR0ZW1wdCB0byBhZGQgYSBjdXN0b20gcnVsZSB0byBvdXRwdXQgXCIiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0TmFtZSArICJcIiB3aGljaCBhbHJlYWR5IGhhcyBhIGN1c3RvbSBydWxlLiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgY21Tb3VyY2VGaWxlIGZvciB0aGUgcnVsZSBmaWxlLgotICAgIGlmICghZmlsZSkgewotICAgICAgZmlsZSA9Ci0gICAgICAgIHRoaXMtPkNyZWF0ZVNvdXJjZShvdXROYW1lLCB0cnVlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgICB9Ci0gICAgZmlsZS0+U2V0UHJvcGVydHkoIl9fQ01BS0VfUlVMRSIsICIxIik7Ci0gIH0KLQotICAvLyBBdHRhY2ggdGhlIGN1c3RvbSBjb21tYW5kIHRvIHRoZSBmaWxlLgotICBpZiAoZmlsZSkgewotICAgIC8vIENvbnN0cnVjdCBhIGNvbXBsZXRlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzMihkZXBlbmRzKTsKLSAgICBpZiAoIW1haW5fZGVwZW5kZW5jeS5lbXB0eSgpKSB7Ci0gICAgICBkZXBlbmRzMi5wdXNoX2JhY2sobWFpbl9kZXBlbmRlbmN5KTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21DdXN0b21Db21tYW5kPiBjYyA9IGNtOjptYWtlX3VuaXF1ZTxjbUN1c3RvbUNvbW1hbmQ+KAotICAgICAgdGhpcywgb3V0cHV0cywgYnlwcm9kdWN0cywgZGVwZW5kczIsIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZ0Rpcik7Ci0gICAgY2MtPlNldEVzY2FwZU9sZFN0eWxlKGVzY2FwZU9sZFN0eWxlKTsKLSAgICBjYy0+U2V0RXNjYXBlQWxsb3dNYWtlVmFycyh0cnVlKTsKLSAgICBjYy0+U2V0SW1wbGljaXREZXBlbmRzKGltcGxpY2l0X2RlcGVuZHMpOwotICAgIGNjLT5TZXRVc2VzVGVybWluYWwodXNlc190ZXJtaW5hbCk7Ci0gICAgY2MtPlNldENvbW1hbmRFeHBhbmRMaXN0cyhjb21tYW5kX2V4cGFuZF9saXN0cyk7Ci0gICAgY2MtPlNldERlcGZpbGUoZGVwZmlsZSk7Ci0gICAgY2MtPlNldEpvYlBvb2woam9iX3Bvb2wpOwotICAgIGZpbGUtPlNldEN1c3RvbUNvbW1hbmQoc3RkOjptb3ZlKGNjKSk7Ci0KLSAgICB0aGlzLT5BZGRTb3VyY2VPdXRwdXRzKGZpbGUsIG91dHB1dHMsIGJ5cHJvZHVjdHMpOwotICB9Ci0gIHJldHVybiBmaWxlOworICB9KTsKIH0KIAogdm9pZCBjbU1ha2VmaWxlOjpBZGRDdXN0b21Db21tYW5kT2xkU3R5bGUoCkBAIC0xMTM2LDExICsxMTU2LDggQEAKICAgaWYgKHNvdXJjZUZpbGVzLmZpbmQoc291cmNlKSkgewogICAgIC8vIFRoZSBzb3VyY2UgbG9va3MgbGlrZSBhIHJlYWwgZmlsZS4gIFVzZSBpdCBhcyB0aGUgbWFpbiBkZXBlbmRlbmN5LgogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCA6IG91dHB1dHMpIHsKLSAgICAgIGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCi0gICAgICAgIG91dHB1dCwgZGVwZW5kcywgc291cmNlLCBjb21tYW5kTGluZXMsIGNvbW1lbnQsIG51bGxwdHIpOwotICAgICAgaWYgKHNmKSB7Ci0gICAgICAgIGFkZFJ1bGVGaWxlVG9UYXJnZXQoc2YpOwotICAgICAgfQorICAgICAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KG91dHB1dCwgZGVwZW5kcywgc291cmNlLCBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCwgbnVsbHB0ciwgYWRkUnVsZUZpbGVUb1RhcmdldCk7CiAgICAgfQogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKQEAgLTExNDksMTEgKzExNjYsOSBAQAogCiAgICAgLy8gVGhlIHNvdXJjZSBtYXkgbm90IGJlIGEgcmVhbCBmaWxlLiAgRG8gbm90IHVzZSBhIG1haW4gZGVwZW5kZW5jeS4KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQgOiBvdXRwdXRzKSB7Ci0gICAgICBjbVNvdXJjZUZpbGUqIHNmID0gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgICAgICBvdXRwdXQsIGRlcGVuZHMyLCBub19tYWluX2RlcGVuZGVuY3ksIGNvbW1hbmRMaW5lcywgY29tbWVudCwgbnVsbHB0cik7Ci0gICAgICBpZiAoc2YpIHsKLSAgICAgICAgYWRkUnVsZUZpbGVUb1RhcmdldChzZik7Ci0gICAgICB9CisgICAgICB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQob3V0cHV0LCBkZXBlbmRzMiwgbm9fbWFpbl9kZXBlbmRlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlRmlsZVRvVGFyZ2V0KTsKICAgICB9CiAgIH0KIH0KQEAgLTExNzAsMjkgKzExODUsMTggQEAKIAogICAvLyBWYWxpZGF0ZSBjdXN0b20gY29tbWFuZHMuCiAgIGlmICh0aGlzLT5WYWxpZGF0ZUN1c3RvbUNvbW1hbmQoY29tbWFuZExpbmVzKSkgewotICAgIC8vIEFkZCBjb21tYW5kIGZhY3RvcnkgdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dC4KLSAgICB0aGlzLT5Db21taXRBcHBlbmRDdXN0b21Db21tYW5kVG9PdXRwdXQob3V0cHV0LCBkZXBlbmRzLCBpbXBsaWNpdF9kZXBlbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZXMpOworICAgIC8vIERpc3BhdGNoIGNvbW1hbmQgY3JlYXRpb24gdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dHMuCisgICAgdGhpcy0+QWRkR2VuZXJhdG9yQWN0aW9uKAorICAgICAgWz1dKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSB7CisgICAgICAgIEJhY2t0cmFjZUd1YXJkIGd1YXJkKHRoaXMtPkJhY2t0cmFjZSwgbGZidCk7CisgICAgICAgIGRldGFpbDo6QXBwZW5kQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KGxnLCBsZmJ0LCBvdXRwdXQsIGRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0X2RlcGVuZHMsIGNvbW1hbmRMaW5lcyk7CisgICAgICB9KTsKICAgfQogCiAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGNtTWFrZWZpbGU6OkNvbW1pdEFwcGVuZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAotICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCi0gIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpCi17Ci0gIC8vIExvb2t1cCBhbiBleGlzdGluZyBjb21tYW5kLgotICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IHRoaXMtPkdldFNvdXJjZUZpbGVXaXRoT3V0cHV0KG91dHB1dCkpIHsKLSAgICBpZiAoY21DdXN0b21Db21tYW5kKiBjYyA9IHNmLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKLSAgICAgIGNjLT5BcHBlbmRDb21tYW5kcyhjb21tYW5kTGluZXMpOwotICAgICAgY2MtPkFwcGVuZERlcGVuZHMoZGVwZW5kcyk7Ci0gICAgICBjYy0+QXBwZW5kSW1wbGljaXREZXBlbmRzKGltcGxpY2l0X2RlcGVuZHMpOwotICAgIH0KLSAgfQotfQotCiBjbVV0aWxpdHlPdXRwdXQgY21NYWtlZmlsZTo6R2V0VXRpbGl0eU91dHB1dChjbVRhcmdldCogdGFyZ2V0KQogewogICBzdGQ6OnN0cmluZyBmb3JjZSA9IGNtU3RyQ2F0KHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKQEAgLTEyMTUsMTUgKzEyMTksMTQgQEAKIH0KIAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkFkZFV0aWxpdHlDb21tYW5kKAotICBjb25zdCBzdGQ6OnN0cmluZyYgdXRpbGl0eU5hbWUsIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGJvb2wgZXhjbHVkZUZyb21BbGwsCi0gIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHV0aWxpdHlOYW1lLCBib29sIGV4Y2x1ZGVGcm9tQWxsLCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgY29uc3QgY2hhciogY29tbWVudCwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAogICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCiB7Ci0gIGNtVGFyZ2V0KiB0YXJnZXQgPQotICAgIHRoaXMtPkFkZE5ld1V0aWxpdHlUYXJnZXQodXRpbGl0eU5hbWUsIG9yaWdpbiwgZXhjbHVkZUZyb21BbGwpOworICBjbVRhcmdldCogdGFyZ2V0ID0gdGhpcy0+QWRkTmV3VXRpbGl0eVRhcmdldCh1dGlsaXR5TmFtZSwgZXhjbHVkZUZyb21BbGwpOwogCiAgIC8vIFZhbGlkYXRlIGN1c3RvbSBjb21tYW5kcy4KICAgaWYgKChjb21tYW5kTGluZXMuZW1wdHkoKSAmJiBkZXBlbmRzLmVtcHR5KCkpIHx8CkBAIC0xMjM2LDQ1ICsxMjM5LDI2IEBACiAgIHRoaXMtPkdldE9yQ3JlYXRlR2VuZXJhdGVkU291cmNlKGZvcmNlLk5hbWUpOwogCiAgIC8vIEFsd2F5cyBjcmVhdGUgdGhlIGJ5cHJvZHVjdCBzb3VyY2VzIGFuZCBtYXJrIHRoZW0gZ2VuZXJhdGVkLgotICB0aGlzLT5DcmVhdGVHZW5lcmF0ZWRTb3VyY2VzKGJ5cHJvZHVjdHMpOworICB0aGlzLT5DcmVhdGVHZW5lcmF0ZWRCeXByb2R1Y3RzKGJ5cHJvZHVjdHMpOwogCi0gIGlmICghY29tbWVudCkgewotICAgIC8vIFVzZSBhbiBlbXB0eSBjb21tZW50IHRvIGF2b2lkIGdlbmVyYXRpb24gb2YgZGVmYXVsdCBjb21tZW50LgotICAgIGNvbW1lbnQgPSAiIjsKLSAgfQorICAvLyBTdHJpbmdzIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggQysrMTQuCisgIGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gY29tbWVudFN0ciA9IE1ha2VPcHRpb25hbFN0cmluZyhjb21tZW50KTsKKyAgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiB3b3JraW5nU3RyID0gTWFrZU9wdGlvbmFsU3RyaW5nKHdvcmtpbmdEaXIpOwogCi0gIHRoaXMtPkNvbW1pdFV0aWxpdHlDb21tYW5kKHRhcmdldCwgZm9yY2UsIHdvcmtpbmdEaXJlY3RvcnksIGJ5cHJvZHVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywgZXNjYXBlT2xkU3R5bGUsIGNvbW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXNfdGVybWluYWwsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBqb2JfcG9vbCk7CisgIC8vIERpc3BhdGNoIGNvbW1hbmQgY3JlYXRpb24gdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dHMuCisgIHRoaXMtPkFkZEdlbmVyYXRvckFjdGlvbigKKyAgICBbPV0oY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpIHsKKyAgICAgIEJhY2t0cmFjZUd1YXJkIGd1YXJkKHRoaXMtPkJhY2t0cmFjZSwgbGZidCk7CisgICAgICBkZXRhaWw6OkFkZFV0aWxpdHlDb21tYW5kKGxnLCBsZmJ0LCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2UsIEdldENTdHJPck51bGwod29ya2luZ1N0ciksIGJ5cHJvZHVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywgZXNjYXBlT2xkU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENTdHJPck51bGwoY29tbWVudFN0ciksIHVzZXNfdGVybWluYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBqb2JfcG9vbCk7CisgICAgfSk7CiAKICAgcmV0dXJuIHRhcmdldDsKIH0KIAotdm9pZCBjbU1ha2VmaWxlOjpDb21taXRVdGlsaXR5Q29tbWFuZCgKLSAgY21UYXJnZXQqIHRhcmdldCwgY29uc3QgY21VdGlsaXR5T3V0cHV0JiBmb3JjZSwgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSwKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCi0gIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCi0gIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQotewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZm9yY2VkOwotICBmb3JjZWQucHVzaF9iYWNrKGZvcmNlLk5hbWUpOwotICBzdGQ6OnN0cmluZyBub19tYWluX2RlcGVuZGVuY3k7Ci0gIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICBib29sIG5vX3JlcGxhY2UgPSBmYWxzZTsKLSAgY21Tb3VyY2VGaWxlKiBzZiA9IHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgICBmb3JjZWQsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIG5vX21haW5fZGVwZW5kZW5jeSwgbm9faW1wbGljaXRfZGVwZW5kcywKLSAgICBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXJlY3RvcnksIG5vX3JlcGxhY2UsIGVzY2FwZU9sZFN0eWxlLAotICAgIHVzZXNfdGVybWluYWwsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCAvKmRlcGZpbGU9Ki8iIiwgam9iX3Bvb2wpOwotICBpZiAoIWZvcmNlLk5hbWVDTVAwMDQ5LmVtcHR5KCkpIHsKLSAgICB0YXJnZXQtPkFkZFNvdXJjZShmb3JjZS5OYW1lQ01QMDA0OSk7Ci0gIH0KLSAgaWYgKHNmKSB7Ci0gICAgdGhpcy0+QWRkVGFyZ2V0Qnlwcm9kdWN0cyh0YXJnZXQsIGJ5cHJvZHVjdHMpOwotICB9Ci19Ci0KIHN0YXRpYyB2b2lkIHNfQWRkRGVmaW5lRmxhZyhzdGQ6OnN0cmluZyBjb25zdCYgZmxhZywgc3RkOjpzdHJpbmcmIGRmbGFncykKIHsKICAgLy8gcmVtb3ZlIGFueSBcblxyCkBAIC0xMzQyLDI4ICsxMzI2LDI3IEBACiAKIHZvaWQgY21NYWtlZmlsZTo6QWRkQ29tcGlsZURlZmluaXRpb24oc3RkOjpzdHJpbmcgY29uc3QmIG9wdGlvbikKIHsKLSAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCBvcHRpb24uY19zdHIoKSk7CisgIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIiwgb3B0aW9uKTsKIH0KIAogdm9pZCBjbU1ha2VmaWxlOjpBZGRDb21waWxlT3B0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHRpb24pCiB7Ci0gIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX09QVElPTlMiLCBvcHRpb24uY19zdHIoKSk7CisgIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX09QVElPTlMiLCBvcHRpb24pOwogfQogCiB2b2lkIGNtTWFrZWZpbGU6OkFkZExpbmtPcHRpb24oc3RkOjpzdHJpbmcgY29uc3QmIG9wdGlvbikKIHsKLSAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkxJTktfT1BUSU9OUyIsIG9wdGlvbi5jX3N0cigpKTsKKyAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkxJTktfT1BUSU9OUyIsIG9wdGlvbik7CiB9CiAKIHZvaWQgY21NYWtlZmlsZTo6QWRkTGlua0RpcmVjdG9yeShzdGQ6OnN0cmluZyBjb25zdCYgZGlyZWN0b3J5LCBib29sIGJlZm9yZSkKIHsKLSAgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0ID0gdGhpcy0+R2V0QmFja3RyYWNlKCk7CiAgIGlmIChiZWZvcmUpIHsKLSAgICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLlByZXBlbmRMaW5rRGlyZWN0b3JpZXNFbnRyeShkaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZidCk7CisgICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5QcmVwZW5kTGlua0RpcmVjdG9yaWVzRW50cnkoCisgICAgICBkaXJlY3RvcnksIHRoaXMtPkJhY2t0cmFjZSk7CiAgIH0gZWxzZSB7Ci0gICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5BcHBlbmRMaW5rRGlyZWN0b3JpZXNFbnRyeShkaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZmJ0KTsKKyAgICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkFwcGVuZExpbmtEaXJlY3Rvcmllc0VudHJ5KAorICAgICAgZGlyZWN0b3J5LCB0aGlzLT5CYWNrdHJhY2UpOwogICB9CiB9CiAKQEAgLTE0NzYsNiArMTQ1OSwyMCBAQAogICB0aGlzLT5SZWN1cnNpb25EZXB0aCA9IHBhcmVudC0+UmVjdXJzaW9uRGVwdGg7CiB9CiAKK3ZvaWQgY21NYWtlZmlsZTo6QWRkSW5zdGFsbEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsR2VuZXJhdG9yPiBnKQoreworICBpZiAoZykgeworICAgIHRoaXMtPkluc3RhbGxHZW5lcmF0b3JzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZykpOworICB9Cit9CisKK3ZvaWQgY21NYWtlZmlsZTo6QWRkVGVzdEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Y21UZXN0R2VuZXJhdG9yPiBnKQoreworICBpZiAoZykgeworICAgIHRoaXMtPlRlc3RHZW5lcmF0b3JzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZykpOworICB9Cit9CisKIHZvaWQgY21NYWtlZmlsZTo6UHVzaEZ1bmN0aW9uU2NvcGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVBvbGljaWVzOjpQb2xpY3lNYXAmIHBtKQogewpAQCAtMTc3Niw4ICsxNzczLDEwIEBACiAKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShiaW5QYXRoKTsKIAotICBjbU1ha2VmaWxlKiBzdWJNZiA9IG5ldyBjbU1ha2VmaWxlKHRoaXMtPkdsb2JhbEdlbmVyYXRvciwgbmV3U25hcHNob3QpOwotICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkTWFrZWZpbGUoc3ViTWYpOworICBhdXRvIHN1Yk1mdSA9CisgICAgY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMtPkdsb2JhbEdlbmVyYXRvciwgbmV3U25hcHNob3QpOworICBhdXRvIHN1Yk1mID0gc3ViTWZ1LmdldCgpOworICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkTWFrZWZpbGUoc3RkOjptb3ZlKHN1Yk1mdSkpOwogCiAgIGlmIChleGNsdWRlRnJvbUFsbCkgewogICAgIHN1Yk1mLT5TZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIsICJUUlVFIik7CkBAIC0xNzg5LDggKzE3ODgsOCBAQAogICAgIHRoaXMtPlVuQ29uZmlndXJlZERpcmVjdG9yaWVzLnB1c2hfYmFjayhzdWJNZik7CiAgIH0KIAotICB0aGlzLT5BZGRJbnN0YWxsR2VuZXJhdG9yKG5ldyBjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IoCi0gICAgc3ViTWYsIGJpblBhdGguY19zdHIoKSwgZXhjbHVkZUZyb21BbGwpKTsKKyAgdGhpcy0+QWRkSW5zdGFsbEdlbmVyYXRvcihjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yPigKKyAgICBzdWJNZiwgYmluUGF0aCwgZXhjbHVkZUZyb21BbGwpKTsKIH0KIAogY29uc3Qgc3RkOjpzdHJpbmcmIGNtTWFrZWZpbGU6OkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSBjb25zdApAQCAtMTgyMCwyMCArMTgxOSwxOSBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IHRoaXMtPkdldEJhY2t0cmFjZSgpOwogICBzdGQ6OnN0cmluZyBlbnRyeVN0cmluZyA9IGNtSm9pbihpbmNzLCAiOyIpOwogICBpZiAoYmVmb3JlKSB7CiAgICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5QcmVwZW5kSW5jbHVkZURpcmVjdG9yaWVzRW50cnkoCi0gICAgICBlbnRyeVN0cmluZywgbGZidCk7CisgICAgICBlbnRyeVN0cmluZywgdGhpcy0+QmFja3RyYWNlKTsKICAgfSBlbHNlIHsKICAgICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkFwcGVuZEluY2x1ZGVEaXJlY3Rvcmllc0VudHJ5KAotICAgICAgZW50cnlTdHJpbmcsIGxmYnQpOworICAgICAgZW50cnlTdHJpbmcsIHRoaXMtPkJhY2t0cmFjZSk7CiAgIH0KIAogICAvLyBQcm9wZXJ0eSBvbiBlYWNoIHRhcmdldDoKICAgZm9yIChhdXRvJiB0YXJnZXQgOiB0aGlzLT5UYXJnZXRzKSB7CiAgICAgY21UYXJnZXQmIHQgPSB0YXJnZXQuc2Vjb25kOwotICAgIHQuSW5zZXJ0SW5jbHVkZShlbnRyeVN0cmluZywgbGZidCwgYmVmb3JlKTsKKyAgICB0Lkluc2VydEluY2x1ZGUoZW50cnlTdHJpbmcsIHRoaXMtPkJhY2t0cmFjZSwgYmVmb3JlKTsKICAgfQogfQogCkBAIC0yMDI3LDcgKzIwMjUsNyBAQAogICAgICAgdGFyZ2V0LkFkZExpbmtMaWJyYXJ5KCp0aGlzLCBsaWJyYXJ5TmFtZSwgbGliVHlwZSk7CiAgICAgICB0YXJnZXQuQXBwZW5kUHJvcGVydHkoCiAgICAgICAgICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLAotICAgICAgICB0YXJnZXQuR2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWJyYXJ5TmFtZSwgbGliVHlwZSkuY19zdHIoKSk7CisgICAgICAgIHRhcmdldC5HZXREZWJ1Z0dlbmVyYXRvckV4cHJlc3Npb25zKGxpYnJhcnlOYW1lLCBsaWJUeXBlKSk7CiAgICAgfQogICB9CiB9CkBAIC0yMDgwLDcgKzIwNzgsOCBAQAogewogICBhdXRvIGl0ID0KICAgICB0aGlzLT5UYXJnZXRzCi0gICAgICAuZW1wbGFjZShuYW1lLCBjbVRhcmdldChuYW1lLCB0eXBlLCBjbVRhcmdldDo6VmlzaWJpbGl0eU5vcm1hbCwgdGhpcykpCisgICAgICAuZW1wbGFjZShuYW1lLAorICAgICAgICAgICAgICAgY21UYXJnZXQobmFtZSwgdHlwZSwgY21UYXJnZXQ6OlZpc2liaWxpdHlOb3JtYWwsIHRoaXMsIHRydWUpKQogICAgICAgLmZpcnN0OwogICB0aGlzLT5PcmRlcmVkVGFyZ2V0cy5wdXNoX2JhY2soJml0LT5zZWNvbmQpOwogICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SW5kZXhUYXJnZXQoJml0LT5zZWNvbmQpOwpAQCAtMjA4OSwxMSArMjA4OCw5IEBACiB9CiAKIGNtVGFyZ2V0KiBjbU1ha2VmaWxlOjpBZGROZXdVdGlsaXR5VGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB1dGlsaXR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVGcm9tQWxsKQogewogICBjbVRhcmdldCogdGFyZ2V0ID0gdGhpcy0+QWRkTmV3VGFyZ2V0KGNtU3RhdGVFbnVtczo6VVRJTElUWSwgdXRpbGl0eU5hbWUpOwotICB0YXJnZXQtPlNldElzR2VuZXJhdG9yUHJvdmlkZWQob3JpZ2luID09IGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yKTsKICAgaWYgKGV4Y2x1ZGVGcm9tQWxsKSB7CiAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIsICJUUlVFIik7CiAgIH0KQEAgLTIxNTUsMTggKzIxNTIsMTggQEAKIAogICAvLyBMb29rIHRocm91Z2ggYWxsIHRoZSBzb3VyY2UgZmlsZXMgdGhhdCBoYXZlIGN1c3RvbSBjb21tYW5kcyBhbmQgc2VlIGlmIHRoZQogICAvLyBjdXN0b20gY29tbWFuZCBoYXMgdGhlIHBhc3NlZCBzb3VyY2UgZmlsZSBhcyBhbiBvdXRwdXQuCi0gIGZvciAoY21Tb3VyY2VGaWxlKiBzcmMgOiB0aGlzLT5Tb3VyY2VGaWxlcykgeworICBmb3IgKGNvbnN0IGF1dG8mIHNyYyA6IHRoaXMtPlNvdXJjZUZpbGVzKSB7CiAgICAgLy8gRG9lcyB0aGlzIHNvdXJjZSBmaWxlIGhhdmUgYSBjdXN0b20gY29tbWFuZD8KICAgICBpZiAoc3JjLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKICAgICAgIC8vIERvZXMgdGhlIG91dHB1dCBvZiB0aGUgY3VzdG9tIGNvbW1hbmQgbWF0Y2ggdGhlIHNvdXJjZSBmaWxlIG5hbWU/CiAgICAgICBpZiAoQW55T3V0cHV0TWF0Y2hlcyhuYW1lLCBzcmMtPkdldEN1c3RvbUNvbW1hbmQoKS0+R2V0T3V0cHV0cygpKSkgewogICAgICAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIG91dHB1dC4KLSAgICAgICAgcmV0dXJuIHNyYzsKKyAgICAgICAgcmV0dXJuIHNyYy5nZXQoKTsKICAgICAgIH0KICAgICAgIGlmIChraW5kID09IGNtU291cmNlT3V0cHV0S2luZDo6T3V0cHV0T3JCeXByb2R1Y3QpIHsKICAgICAgICAgaWYgKEFueU91dHB1dE1hdGNoZXMobmFtZSwgc3JjLT5HZXRDdXN0b21Db21tYW5kKCktPkdldEJ5cHJvZHVjdHMoKSkpIHsKICAgICAgICAgICAvLyBEbyBub3QgcmV0dXJuIHRoZSBzb3VyY2UgeWV0IGFzIHRoZXJlIG1pZ2h0IGJlIGEgbWF0Y2hpbmcgb3V0cHV0LgotICAgICAgICAgIGZhbGxiYWNrID0gc3JjOworICAgICAgICAgIGZhbGxiYWNrID0gc3JjLmdldCgpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMjIxMSw4ICsyMjA4LDggQEAKICAgICAgICghby0+c2Vjb25kLlNvdXJjZXMuU291cmNlSXNCeXByb2R1Y3QgfHwKICAgICAgICBraW5kID09IGNtU291cmNlT3V0cHV0S2luZDo6T3V0cHV0T3JCeXByb2R1Y3QpKSB7CiAgICAgLy8gU291cmNlIGZpbGUgY291bGQgYWxzbyBiZSBudWxsIHBvaW50ZXIgZm9yIGV4YW1wbGUgaWYgd2UgZm91bmQgdGhlCi0gICAgLy8gYnlwcm9kdWN0IG9mIGEgdXRpbGl0eSB0YXJnZXQgb3IgYSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxECi0gICAgLy8gY29tbWFuZCBvZiBhIHRhcmdldC4KKyAgICAvLyBieXByb2R1Y3Qgb2YgYSB1dGlsaXR5IHRhcmdldCwgYSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxECisgICAgLy8gY29tbWFuZCBvZiBhIHRhcmdldCwgb3IgYSBub3QgeWV0IGNyZWF0ZWQgY3VzdG9tIGNvbW1hbmQuCiAgICAgcmV0dXJuIG8tPnNlY29uZC5Tb3VyY2VzLlNvdXJjZTsKICAgfQogICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyMjAsMTIgKzIyMTcsMjAgQEAKIAogYm9vbCBjbU1ha2VmaWxlOjpNaWdodEhhdmVDdXN0b21Db21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAogewotICAvLyBUaGlzIHdpbGwgaGF2ZSB0byBiZSBjaGFuZ2VkIGZvciBkZWxheWluZyBjdXN0b20gY29tbWFuZCBjcmVhdGlvbiwgYmVjYXVzZQotICAvLyBHZXRTb3VyY2VGaWxlV2l0aE91dHB1dCByZXF1aXJlcyB0aGUgY29tbWFuZCB0byBiZSBhbHJlYWR5IGNyZWF0ZWQuCi0gIGlmIChjbVNvdXJjZUZpbGUqIHNmID0gdGhpcy0+R2V0U291cmNlRmlsZVdpdGhPdXRwdXQobmFtZSkpIHsKLSAgICBpZiAoc2YtPkdldEN1c3RvbUNvbW1hbmQoKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICBpZiAodGhpcy0+RGVsYXllZE91dHB1dEZpbGVzSGF2ZUdlbmV4IHx8CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobmFtZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAvLyBDb3VsZCBiZSBtb3JlIHJlc3RyaWN0aXZlLCBidXQgZm9yIG5vdyB3ZSBhc3N1bWUgdGhhdCB0aGVyZSBjb3VsZCBhbHdheXMKKyAgICAvLyBiZSBhIG1hdGNoIHdoZW4gZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGFyZSBpbnZvbHZlZC4KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICAvLyBBbHNvIHNlZSBMaW5lYXJHZXRTb3VyY2VGaWxlV2l0aE91dHB1dC4KKyAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChuYW1lKSkgeworICAgIHJldHVybiBBbnlPdXRwdXRNYXRjaGVzKG5hbWUsIHRoaXMtPkRlbGF5ZWRPdXRwdXRGaWxlcyk7CisgIH0KKyAgLy8gT3RoZXJ3aXNlIHdlIHVzZSBhbiBlZmZpY2llbnQgbG9va3VwIG1hcC4KKyAgYXV0byBvID0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZmluZChuYW1lKTsKKyAgaWYgKG8gIT0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZW5kKCkpIHsKKyAgICByZXR1cm4gby0+c2Vjb25kLlNvdXJjZU1pZ2h0QmVPdXRwdXQ7CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjI3OCw2ICsyMjgzLDcgQEAKICAgU291cmNlRW50cnkgZW50cnk7CiAgIGVudHJ5LlNvdXJjZXMuU291cmNlID0gc291cmNlOwogICBlbnRyeS5Tb3VyY2VzLlNvdXJjZUlzQnlwcm9kdWN0ID0gYnlwcm9kdWN0OworICBlbnRyeS5Tb3VyY2VNaWdodEJlT3V0cHV0ID0gIWJ5cHJvZHVjdDsKIAogICBhdXRvIHByID0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZW1wbGFjZShvdXRwdXQsIGVudHJ5KTsKICAgaWYgKCFwci5zZWNvbmQpIHsKQEAgLTIyODcsNiArMjI5Myw3IEBACiAgICAgICAgIChjdXJyZW50LlNvdXJjZXMuU291cmNlSXNCeXByb2R1Y3QgJiYgIWJ5cHJvZHVjdCkpIHsKICAgICAgIGN1cnJlbnQuU291cmNlcy5Tb3VyY2UgPSBzb3VyY2U7CiAgICAgICBjdXJyZW50LlNvdXJjZXMuU291cmNlSXNCeXByb2R1Y3QgPSBmYWxzZTsKKyAgICAgIGN1cnJlbnQuU291cmNlTWlnaHRCZU91dHB1dCA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIE11bHRpcGxlIGN1c3RvbSBjb21tYW5kcyBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dCBidXQgbWF5CiAgICAgICAvLyBiZSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBzb3VyY2UgZmlsZSAoTUFJTl9ERVBFTkRFTkNZKS4KQEAgLTI0NzgsNyArMjQ4NSw3IEBACiAgICAgICAgICAgPDwgIiAgIiA8PCBkaXJzIDw8ICJcbiI7CiAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgICAgfQotICAgICAgdC5TZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIsIGRpcnMuY19zdHIoKSk7CisgICAgICB0LlNldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIiwgZGlycyk7CiAgICAgfQogICB9CiAKQEAgLTI2MTUsNyArMjYyMiw3IEBACiAgIH07CiAKICAgZm9yIChhdXRvIGNvbnN0JiBlbnRyeSA6IHNka0RhdGFiYXNlKSB7Ci0gICAgaWYgKHNka1Jvb3QuZmluZChlbnRyeS5uYW1lKSA9PSAwIHx8CisgICAgaWYgKGNtSGFzUHJlZml4KHNka1Jvb3QsIGVudHJ5Lm5hbWUpIHx8CiAgICAgICAgIHNka1Jvb3QuZmluZChzdGQ6OnN0cmluZygiLyIpICsgZW50cnkubmFtZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgIHJldHVybiBlbnRyeS5zZGs7CiAgICAgfQpAQCAtMjczOSw3ICsyNzQ2LDcgQEAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbU1ha2VmaWxlOjpHZXREZWZpbml0aW9ucygpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXMgPSB0aGlzLT5TdGF0ZVNuYXBzaG90LkNsb3N1cmVLZXlzKCk7Ci0gIGNtQXBwZW5kKHJlcywgdGhpcy0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeUtleXMoKSk7CisgIGNtOjphcHBlbmQocmVzLCB0aGlzLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5S2V5cygpKTsKICAgc3RkOjpzb3J0KHJlcy5iZWdpbigpLCByZXMuZW5kKCkpOwogICByZXR1cm4gcmVzOwogfQpAQCAtMzA0MSw3ICszMDQ4LDkgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ0FDSEU6Ci0gICAgICAgICAgICAgIHZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShsb29rdXApOworICAgICAgICAgICAgICBpZiAoY21Qcm9wIHZhbHVlMiA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUobG9va3VwKSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUyLT5jX3N0cigpOworICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgICAvLyBHZXQgdGhlIHN0cmluZyB3ZSdyZSBtZWFudCB0byBhcHBlbmQgdG8uCkBAIC0zNTE0LDI0ICszNTIzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZCBraW5kKQogewotICBjbVNvdXJjZUZpbGUqIHNmID0gbmV3IGNtU291cmNlRmlsZSh0aGlzLCBzb3VyY2VOYW1lLCBraW5kKTsKKyAgYXV0byBzZiA9IGNtOjptYWtlX3VuaXF1ZTxjbVNvdXJjZUZpbGU+KHRoaXMsIHNvdXJjZU5hbWUsIGtpbmQpOwogICBpZiAoZ2VuZXJhdGVkKSB7CiAgICAgc2YtPlNldFByb3BlcnR5KCJHRU5FUkFURUQiLCAiMSIpOwogICB9Ci0gIHRoaXMtPlNvdXJjZUZpbGVzLnB1c2hfYmFjayhzZik7CiAKICAgYXV0byBuYW1lID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPlN0cmlwRXh0ZW5zaW9uKHNmLT5HZXRMb2NhdGlvbigpLkdldE5hbWUoKSk7CiAjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19BUFBMRV9fKQogICBuYW1lID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKG5hbWUpOwogI2VuZGlmCi0gIHRoaXMtPlNvdXJjZUZpbGVTZWFyY2hJbmRleFtuYW1lXS5wdXNoX2JhY2soc2YpOworICB0aGlzLT5Tb3VyY2VGaWxlU2VhcmNoSW5kZXhbbmFtZV0ucHVzaF9iYWNrKHNmLmdldCgpKTsKICAgLy8gZm9yICJLbm93biIgcGF0aHMgYWRkIGRpcmVjdCBsb29rdXAgKHVzZWQgZm9yIGZhc3RlciBsb29rdXAgaW4gR2V0U291cmNlKQogICBpZiAoa2luZCA9PSBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKSB7Ci0gICAgdGhpcy0+S25vd25GaWxlU2VhcmNoSW5kZXhbc291cmNlTmFtZV0gPSBzZjsKKyAgICB0aGlzLT5Lbm93bkZpbGVTZWFyY2hJbmRleFtzb3VyY2VOYW1lXSA9IHNmLmdldCgpOwogICB9CiAKLSAgcmV0dXJuIHNmOworICB0aGlzLT5Tb3VyY2VGaWxlcy5wdXNoX2JhY2soc3RkOjptb3ZlKHNmKSk7CisKKyAgcmV0dXJuIHRoaXMtPlNvdXJjZUZpbGVzLmJhY2soKS5nZXQoKTsKIH0KIAogY21Tb3VyY2VGaWxlKiBjbU1ha2VmaWxlOjpHZXRPckNyZWF0ZVNvdXJjZShjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlTmFtZSwKQEAgLTM1NTMsMTEgKzM1NjMsNDEgQEAKICAgcmV0dXJuIHNmOwogfQogCi12b2lkIGNtTWFrZWZpbGU6OkNyZWF0ZUdlbmVyYXRlZFNvdXJjZXMoCit2b2lkIGNtTWFrZWZpbGU6OkNyZWF0ZUdlbmVyYXRlZE91dHB1dHMoCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cykKIHsKLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0IDogb3V0cHV0cykgewotICAgIHRoaXMtPkdldE9yQ3JlYXRlR2VuZXJhdGVkU291cmNlKG91dHB1dCk7CisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG8gOiBvdXRwdXRzKSB7CisgICAgaWYgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChvKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgdGhpcy0+R2V0T3JDcmVhdGVHZW5lcmF0ZWRTb3VyY2Uobyk7CisgICAgICB0aGlzLT5BZGREZWxheWVkT3V0cHV0KG8pOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5EZWxheWVkT3V0cHV0RmlsZXNIYXZlR2VuZXggPSB0cnVlOworICAgIH0KKyAgfQorfQorCit2b2lkIGNtTWFrZWZpbGU6OkNyZWF0ZUdlbmVyYXRlZEJ5cHJvZHVjdHMoCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cykKK3sKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbyA6IGJ5cHJvZHVjdHMpIHsKKyAgICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKG8pID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICB0aGlzLT5HZXRPckNyZWF0ZUdlbmVyYXRlZFNvdXJjZShvKTsKKyAgICB9CisgIH0KK30KKwordm9pZCBjbU1ha2VmaWxlOjpBZGREZWxheWVkT3V0cHV0KHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQpCit7CisgIC8vIE5vdGUgdGhhdCB0aGlzIHZlY3RvciBtaWdodCBjb250YWluIHRoZSBvdXRwdXQgbmFtZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIKKyAgLy8gdGhhbiBpbiBzb3VyY2UgZmlsZSBpdGVyYXRpb24gb3JkZXIuCisgIHRoaXMtPkRlbGF5ZWRPdXRwdXRGaWxlcy5wdXNoX2JhY2sob3V0cHV0KTsKKworICBTb3VyY2VFbnRyeSBlbnRyeTsKKyAgZW50cnkuU291cmNlTWlnaHRCZU91dHB1dCA9IHRydWU7CisKKyAgYXV0byBwciA9IHRoaXMtPk91dHB1dFRvU291cmNlLmVtcGxhY2Uob3V0cHV0LCBlbnRyeSk7CisgIGlmICghcHIuc2Vjb25kKSB7CisgICAgcHIuZmlyc3QtPnNlY29uZC5Tb3VyY2VNaWdodEJlT3V0cHV0ID0gdHJ1ZTsKICAgfQogfQogCkBAIC0zNjMwLDggKzM2NzAsNyBAQAogICAvLyBiZSBydW4gdGhhdCB3YXkgYnV0IHRoZSBjbWFrZSBvYmplY3QgcmVxdWlyZXMgYSB2YWlsaWQgcGF0aAogICBjbWFrZSBjbShjbWFrZTo6Um9sZVByb2plY3QsIGNtU3RhdGU6OlByb2plY3QpOwogICBjbS5TZXRJc0luVHJ5Q29tcGlsZSh0cnVlKTsKLSAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0KLSAgICBjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE5hbWUoKSk7CisgIGF1dG8gZ2cgPSBjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE5hbWUoKSk7CiAgIGlmICghZ2cpIHsKICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OklOVEVSTkFMX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgICAiR2xvYmFsIGdlbmVyYXRvciAnIiArCkBAIC0zNjQyLDcgKzM2ODEsNyBAQAogICAgIHJldHVybiAxOwogICB9CiAgIGdnLT5SZWN1cnNpb25EZXB0aCA9IHRoaXMtPlJlY3Vyc2lvbkRlcHRoOwotICBjbS5TZXRHbG9iYWxHZW5lcmF0b3IoZ2cpOworICBjbS5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdnKSk7CiAKICAgLy8gZG8gYSBjb25maWd1cmUKICAgY20uU2V0SG9tZURpcmVjdG9yeShzcmNkaXIpOwpAQCAtMzY1MSw3ICszNjkwLDcgQEAKICAgY20uU2V0R2VuZXJhdG9yUGxhdGZvcm0odGhpcy0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIpKTsKICAgY20uU2V0R2VuZXJhdG9yVG9vbHNldCh0aGlzLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQiKSk7CiAgIGNtLkxvYWRDYWNoZSgpOwotICBpZiAoIWdnLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgaWYgKCFjbS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7CiAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZyA9CiAgICAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfVFJZX0NPTVBJTEVfQ09ORklHVVJBVElPTiIpKSB7CiAgICAgICAvLyBUZWxsIHRoZSBzaW5nbGUtY29uZmlndXJhdGlvbiBnZW5lcmF0b3Igd2hpY2ggb25lIHRvIHVzZS4KQEAgLTM2OTcsNyArMzczNiw4IEBACiAgICAgY20uU2V0Q2FjaGVBcmdzKCpjbWFrZUFyZ3MpOwogICB9CiAgIC8vIHRvIHNhdmUgdGltZSB3ZSBwYXNzIHRoZSBFbmFibGVMYW5ndWFnZSBpbmZvIGRpcmVjdGx5Ci0gIGdnLT5FbmFibGVMYW5ndWFnZXNGcm9tR2VuZXJhdG9yKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCB0aGlzKTsKKyAgY20uR2V0R2xvYmFsR2VuZXJhdG9yKCktPkVuYWJsZUxhbmd1YWdlc0Zyb21HZW5lcmF0b3IoCisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCksIHRoaXMpOwogICBpZiAodGhpcy0+SXNPbigiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX1dBUk5JTkdTIikpIHsKICAgICBjbS5BZGRDYWNoZUVudHJ5KCJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfV0FSTklOR1MiLCAiVFJVRSIsICIiLAogICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CkBAIC0zNzc3LDcgKzM4MTcsOCBAQAogfQogCiBzdGQ6OnN0cmluZyBjbU1ha2VmaWxlOjpHZXRNb2R1bGVzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBzeXN0ZW0pIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBzeXN0ZW0sIGJvb2wgZGVidWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGVidWdCdWZmZXIpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKIApAQCAtMzgwOCw2ICszODQ5LDkgQEAKICAgICAgICAgbW9kdWxlSW5DTWFrZU1vZHVsZVBhdGggPSBpdGVtcGw7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQorICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgIGRlYnVnQnVmZmVyID0gY21TdHJDYXQoZGVidWdCdWZmZXIsICIgICIsIGl0ZW1wbCwgIlxuIik7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTM4MTYsNiArMzg2MCw5IEBACiAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VSb290KCksICIvTW9kdWxlcy8iLCBmaWxlbmFtZSk7CiAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKG1vZHVsZUluQ01ha2VSb290KTsKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKG1vZHVsZUluQ01ha2VSb290KSkgeworICAgIGlmIChkZWJ1ZykgeworICAgICAgZGVidWdCdWZmZXIgPSBjbVN0ckNhdChkZWJ1Z0J1ZmZlciwgIiAgIiwgbW9kdWxlSW5DTWFrZVJvb3QsICJcbiIpOworICAgIH0KICAgICBtb2R1bGVJbkNNYWtlUm9vdC5jbGVhcigpOwogICB9CiAKQEAgLTQwMjksMTYgKzQwNzYsMTQgQEAKIAogdm9pZCBjbU1ha2VmaWxlOjpTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IHRoaXMtPkdldEJhY2t0cmFjZSgpOwotICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldFByb3BlcnR5KHByb3AsIHZhbHVlLCBsZmJ0KTsKKyAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgdGhpcy0+QmFja3RyYWNlKTsKIH0KIAotdm9pZCBjbU1ha2VmaWxlOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCit2b2lkIGNtTWFrZWZpbGU6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcpCiB7Ci0gIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IHRoaXMtPkdldEJhY2t0cmFjZSgpOwogICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkFwcGVuZFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZmJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwogfQogCiBjb25zdCBjaGFyKiBjbU1ha2VmaWxlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKQEAgLTQwNTcsMTIgKzQxMDIsMTQgQEAKICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CiAgIH0KIAotICByZXR1cm4gdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHJldFZhbCA9IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHkocHJvcCk7CisgIHJldHVybiByZXRWYWwgPyByZXRWYWwtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCiBjb25zdCBjaGFyKiBjbU1ha2VmaWxlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3QKIHsKLSAgcmV0dXJuIHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHkocHJvcCwgY2hhaW4pOworICBjbVByb3AgcmV0VmFsID0gdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShwcm9wLCBjaGFpbik7CisgIHJldHVybiByZXRWYWwgPyByZXRWYWwtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCiBib29sIGNtTWFrZWZpbGU6OkdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdApAQCAtNDA5MCw5ICs0MTM3LDEwIEBACiAgIGlmICh0ZXN0KSB7CiAgICAgcmV0dXJuIHRlc3Q7CiAgIH0KLSAgdGVzdCA9IG5ldyBjbVRlc3QodGhpcyk7Ci0gIHRlc3QtPlNldE5hbWUodGVzdE5hbWUpOwotICB0aGlzLT5UZXN0c1t0ZXN0TmFtZV0gPSB0ZXN0OworICBhdXRvIG5ld1Rlc3QgPSBjbTo6bWFrZV91bmlxdWU8Y21UZXN0Pih0aGlzKTsKKyAgdGVzdCA9IG5ld1Rlc3QuZ2V0KCk7CisgIG5ld1Rlc3QtPlNldE5hbWUodGVzdE5hbWUpOworICB0aGlzLT5UZXN0c1t0ZXN0TmFtZV0gPSBzdGQ6Om1vdmUobmV3VGVzdCk7CiAgIHJldHVybiB0ZXN0OwogfQogCkBAIC00MTAwLDcgKzQxNDgsNyBAQAogewogICBhdXRvIG1pID0gdGhpcy0+VGVzdHMuZmluZCh0ZXN0TmFtZSk7CiAgIGlmIChtaSAhPSB0aGlzLT5UZXN0cy5lbmQoKSkgewotICAgIHJldHVybiBtaS0+c2Vjb25kOworICAgIHJldHVybiBtaS0+c2Vjb25kLmdldCgpOwogICB9CiAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNDEwOCw3ICs0MTU2LDcgQEAKIHZvaWQgY21NYWtlZmlsZTo6R2V0VGVzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21UZXN0Kj4mIHRlc3RzKQogewotICBmb3IgKGF1dG8gZ2VuZXJhdG9yIDogdGhpcy0+R2V0VGVzdEdlbmVyYXRvcnMoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIGdlbmVyYXRvciA6IHRoaXMtPkdldFRlc3RHZW5lcmF0b3JzKCkpIHsKICAgICBpZiAoZ2VuZXJhdG9yLT5UZXN0c0ZvckNvbmZpZyhjb25maWcpKSB7CiAgICAgICB0ZXN0cy5wdXNoX2JhY2soZ2VuZXJhdG9yLT5HZXRUZXN0KCkpOwogICAgIH0KQEAgLTQyMTQsMTUgKzQyNjIsMTUgQEAKICAgICBuZXcgY21UYXJnZXQobmFtZSwgdHlwZSwKICAgICAgICAgICAgICAgICAgZ2xvYmFsID8gY21UYXJnZXQ6OlZpc2liaWxpdHlJbXBvcnRlZEdsb2JhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtVGFyZ2V0OjpWaXNpYmlsaXR5SW1wb3J0ZWQsCi0gICAgICAgICAgICAgICAgIHRoaXMpKTsKKyAgICAgICAgICAgICAgICAgdGhpcywgdHJ1ZSkpOwogCiAgIC8vIEFkZCB0byB0aGUgc2V0IG9mIGF2YWlsYWJsZSBpbXBvcnRlZCB0YXJnZXRzLgogICB0aGlzLT5JbXBvcnRlZFRhcmdldHNbbmFtZV0gPSB0YXJnZXQuZ2V0KCk7CiAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5JbmRleFRhcmdldCh0YXJnZXQuZ2V0KCkpOwogCiAgIC8vIFRyYW5zZmVyIG93bmVyc2hpcCB0byB0aGlzIGNtTWFrZWZpbGUgb2JqZWN0LgotICB0aGlzLT5JbXBvcnRlZFRhcmdldHNPd25lZC5wdXNoX2JhY2sodGFyZ2V0LmdldCgpKTsKLSAgcmV0dXJuIHRhcmdldC5yZWxlYXNlKCk7CisgIHRoaXMtPkltcG9ydGVkVGFyZ2V0c093bmVkLnB1c2hfYmFjayhzdGQ6Om1vdmUodGFyZ2V0KSk7CisgIHJldHVybiB0aGlzLT5JbXBvcnRlZFRhcmdldHNPd25lZC5iYWNrKCkuZ2V0KCk7CiB9CiAKIGNtVGFyZ2V0KiBjbU1ha2VmaWxlOjpGaW5kVGFyZ2V0VG9Vc2UoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCkBAIC00NDg3LDcgKzQ1MzUsNyBAQAogCiAgIC8vIERlcHJlY2F0ZSBvbGQgcG9saWNpZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCByZXF1aXJlIGEgbG90CiAgIC8vIG9mIGNvZGUgdG8gbWFpbnRhaW4gdGhlIG9sZCBiZWhhdmlvci4KLSAgaWYgKHN0YXR1cyA9PSBjbVBvbGljaWVzOjpPTEQgJiYgaWQgPD0gY21Qb2xpY2llczo6Q01QMDA2NyAmJgorICBpZiAoc3RhdHVzID09IGNtUG9saWNpZXM6Ok9MRCAmJiBpZCA8PSBjbVBvbGljaWVzOjpDTVAwMDcxICYmCiAgICAgICAhKHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SXNJblRyeUNvbXBpbGUoKSAmJgogICAgICAgICAoCiAgICAgICAgICAgLy8gUG9saWNpZXMgc2V0IGJ5IGNtQ29yZVRyeUNvbXBpbGU6OlRyeUNvbXBpbGVDb2RlLgpAQCAtNDU4NywxNyArNDYzNSwyMSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1hYX0ZFQVRVUkVTW10gPSB7IG51bGxwdHIgRk9SX0VBQ0hfQ1hYX0ZFQVRVUkUoCiAgIEZFQVRVUkVfU1RSSU5HKSB9OworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1VEQV9GRUFUVVJFU1tdID0geyBudWxscHRyIEZPUl9FQUNIX0NVREFfRkVBVFVSRSgKKyAgRkVBVFVSRV9TVFJJTkcpIH07CiAjdW5kZWYgRkVBVFVSRV9TVFJJTkcKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENfU1RBTkRBUkRTW10gPSB7ICI5MCIsICI5OSIsICIxMSIgfTsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDWFhfU1RBTkRBUkRTW10gPSB7ICI5OCIsICIxMSIsICIxNCIsICIxNyIsICIyMCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDVURBX1NUQU5EQVJEU1tdID0geyAiMDMiLCAiMTEiLCAiMTQiLCAiMTciLCAiMjAiIH07CiAKIGJvb2wgY21NYWtlZmlsZTo6QWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlKGNtVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKIHsKICAgaWYgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChmZWF0dXJlKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfRkVBVFVSRVMiLCBmZWF0dXJlLmNfc3RyKCkpOworICAgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfRkVBVFVSRVMiLCBmZWF0dXJlKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCkBAIC00NjI4LDExICs0NjgwLDE1IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eSgiQ09NUElMRV9GRUFUVVJFUyIsIGZlYXR1cmUuY19zdHIoKSk7CisgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfRkVBVFVSRVMiLCBmZWF0dXJlKTsKIAotICByZXR1cm4gbGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiT0JKQyIKLSAgICA/IHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q0ZlYXR1cmUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nLCBlcnJvcikKLSAgICA6IHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q3h4RmVhdHVyZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcsIGVycm9yKTsKKyAgaWYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIk9CSkMiKSB7CisgICAgcmV0dXJuIHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q0ZlYXR1cmUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nLCBlcnJvcik7CisgIH0KKyAgaWYgKGxhbmcgPT0gIkNVREEiKSB7CisgICAgcmV0dXJuIHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q3VkYUZlYXR1cmUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nLCBlcnJvcik7CisgIH0KKyAgcmV0dXJuIHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q3h4RmVhdHVyZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcsIGVycm9yKTsKIH0KIAogYm9vbCBjbU1ha2VmaWxlOjpDb21waWxlRmVhdHVyZUtub3duKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCkBAIC00NjU2LDYgKzQ3MTIsMTMgQEAKICAgICBsYW5nID0gIkNYWCI7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KKyAgYm9vbCBpc0N1ZGFGZWF0dXJlID0KKyAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDVURBX0ZFQVRVUkVTKSArIDEsIGNtOjpjZW5kKENVREFfRkVBVFVSRVMpLAorICAgICAgICAgICAgICAgICBjbVN0ckNtcChmZWF0dXJlKSkgIT0gY206OmNlbmQoQ1VEQV9GRUFUVVJFUyk7CisgIGlmIChpc0N1ZGFGZWF0dXJlKSB7CisgICAgbGFuZyA9ICJDVURBIjsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgaWYgKGVycm9yKSB7CiAgICAgZSA8PCAic3BlY2lmaWVkIjsKQEAgLTQ3MjQsOSArNDc4NywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSkgY29uc3QKIHsKLSAgcmV0dXJuIGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIk9CSkMiCi0gICAgPyB0aGlzLT5IYXZlQ1N0YW5kYXJkQXZhaWxhYmxlKHRhcmdldCwgZmVhdHVyZSwgbGFuZykKLSAgICA6IHRoaXMtPkhhdmVDeHhTdGFuZGFyZEF2YWlsYWJsZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcpOworICBpZiAobGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiT0JKQyIpIHsKKyAgICByZXR1cm4gdGhpcy0+SGF2ZUNTdGFuZGFyZEF2YWlsYWJsZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcpOworICB9CisgIGlmIChsYW5nID09ICJDVURBIikgeworICAgIHJldHVybiB0aGlzLT5IYXZlQ3VkYVN0YW5kYXJkQXZhaWxhYmxlKHRhcmdldCwgZmVhdHVyZSwgbGFuZyk7CisgIH0KKyAgcmV0dXJuIHRoaXMtPkhhdmVDeHhTdGFuZGFyZEF2YWlsYWJsZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcpOwogfQogCiBib29sIGNtTWFrZWZpbGU6OkhhdmVDU3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwKQEAgLTQ4MDksNiArNDg3NiwxNCBAQAogICAgIHJldHVybiBzdGQ6OmZpbmRfaWYocmhzSXQsIGNtOjpjZW5kKENfU1RBTkRBUkRTKSwgY21TdHJDbXAobGhzKSkgIT0KICAgICAgIGNtOjpjZW5kKENfU1RBTkRBUkRTKTsKICAgfQorICBpZiAobGFuZyA9PSAiQ1VEQSIpIHsKKyAgICBjb25zdCBjaGFyKiBjb25zdCogcmhzSXQgPSBzdGQ6OmZpbmRfaWYoCisgICAgICBjbTo6Y2JlZ2luKENVREFfU1RBTkRBUkRTKSwgY206OmNlbmQoQ1VEQV9TVEFOREFSRFMpLCBjbVN0ckNtcChyaHMpKTsKKworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYocmhzSXQsIGNtOjpjZW5kKENVREFfU1RBTkRBUkRTKSwgY21TdHJDbXAobGhzKSkgIT0KKyAgICAgIGNtOjpjZW5kKENVREFfU1RBTkRBUkRTKTsKKyAgfQorCiAgIGNvbnN0IGNoYXIqIGNvbnN0KiByaHNJdCA9IHN0ZDo6ZmluZF9pZigKICAgICBjbTo6Y2JlZ2luKENYWF9TVEFOREFSRFMpLCBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSwgY21TdHJDbXAocmhzKSk7CiAKQEAgLTQ5NTMsMjcgKzUwMjgsNiBAQAogICAgIH0KICAgfQogCi0gIGNvbnN0IGNoYXIqIGV4aXN0aW5nQ3VkYVN0YW5kYXJkID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIpOwotICBjb25zdCBjaGFyKiBjb25zdCogZXhpc3RpbmdDdWRhTGV2ZWwgPSBudWxscHRyOwotICBpZiAoZXhpc3RpbmdDdWRhU3RhbmRhcmQpIHsKLSAgICBleGlzdGluZ0N1ZGFMZXZlbCA9Ci0gICAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDWFhfU1RBTkRBUkRTKSwgY206OmNlbmQoQ1hYX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDdWRhU3RhbmRhcmQpKTsKLSAgICBpZiAoZXhpc3RpbmdDdWRhTGV2ZWwgPT0gY206OmNlbmQoQ1hYX1NUQU5EQVJEUykpIHsKLSAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgICAgZSA8PCAiVGhlIENVREFfU1RBTkRBUkQgcHJvcGVydHkgb24gdGFyZ2V0IFwiIiA8PCB0YXJnZXQtPkdldE5hbWUoKQotICAgICAgICA8PCAiXCIgY29udGFpbmVkIGFuIGludmFsaWQgdmFsdWU6IFwiIiA8PCBleGlzdGluZ0N1ZGFTdGFuZGFyZAotICAgICAgICA8PCAiXCIuIjsKLSAgICAgIGlmIChlcnJvcikgewotICAgICAgICAqZXJyb3IgPSBlLnN0cigpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0cigpLCB0aGlzLT5CYWNrdHJhY2UpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgY29uc3QgY2hhciogY29uc3QqIG5lZWRDeHhMZXZlbCA9CiAgICAgbmVlZEN4eDIwID8gJkNYWF9TVEFOREFSRFNbNF0KQEAgLTQ5OTAsMTEgKzUwNDQsMTY0IEBACiAgICAgaWYgKCFleGlzdGluZ0N4eExldmVsIHx8IGV4aXN0aW5nQ3h4TGV2ZWwgPCBuZWVkQ3h4TGV2ZWwpIHsKICAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpLCAqbmVlZEN4eExldmVsKTsKICAgICB9CisgIH0KIAorICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjbU1ha2VmaWxlOjpIYXZlQ3VkYVN0YW5kYXJkQXZhaWxhYmxlKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0Cit7CisgIGNvbnN0IGNoYXIqIGRlZmF1bHRDdWRhU3RhbmRhcmQgPQorICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKKyAgaWYgKCFkZWZhdWx0Q3VkYVN0YW5kYXJkKSB7CisgICAgdGhpcy0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OklOVEVSTkFMX0VSUk9SLAorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsCisgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgaXMgbm90IHNldC4gIENPTVBJTEVfRkVBVFVSRVMgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAibm90IGZ1bGx5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgY29tcGlsZXIuIikpOworICAgIC8vIFJldHVybiB0cnVlIHNvIHRoZSBjYWxsZXIgZG9lcyBub3QgdHJ5IHRvIGxvb2t1cCB0aGUgZGVmYXVsdCBzdGFuZGFyZC4KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZiAoc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1VEQV9TVEFOREFSRFMpLCBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUyksCisgICAgICAgICAgICAgICAgICAgY21TdHJDbXAoZGVmYXVsdEN1ZGFTdGFuZGFyZCkpID09CisgICAgICBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUykpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0KKyAgICAgIGNtU3RyQ2F0KCJUaGUgQ01BS0VfIiwgbGFuZywgIl9TVEFOREFSRF9ERUZBVUxUIHZhcmlhYmxlIGNvbnRhaW5zIGFuICIsCisgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZTogXCIiLCBkZWZhdWx0Q3VkYVN0YW5kYXJkLCAiXCIuIik7CisgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwgZSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBuZWVkQ3VkYTAzID0gZmFsc2U7CisgIGJvb2wgbmVlZEN1ZGExMSA9IGZhbHNlOworICBib29sIG5lZWRDdWRhMTQgPSBmYWxzZTsKKyAgYm9vbCBuZWVkQ3VkYTE3ID0gZmFsc2U7CisgIGJvb2wgbmVlZEN1ZGEyMCA9IGZhbHNlOworICB0aGlzLT5DaGVja05lZWRlZEN1ZGFMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQ3VkYTAzLCBuZWVkQ3VkYTExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkQ3VkYTE0LCBuZWVkQ3VkYTE3LCBuZWVkQ3VkYTIwKTsKKworICBjb25zdCBjaGFyKiBleGlzdGluZ0N1ZGFTdGFuZGFyZCA9CisgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOworICBpZiAoIWV4aXN0aW5nQ3VkYVN0YW5kYXJkKSB7CisgICAgZXhpc3RpbmdDdWRhU3RhbmRhcmQgPSBkZWZhdWx0Q3VkYVN0YW5kYXJkOworICB9CisKKyAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ3VkYUxldmVsID0KKyAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDVURBX1NUQU5EQVJEUyksIGNtOjpjZW5kKENVREFfU1RBTkRBUkRTKSwKKyAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDdWRhU3RhbmRhcmQpKTsKKyAgaWYgKGV4aXN0aW5nQ3VkYUxldmVsID09IGNtOjpjZW5kKENVREFfU1RBTkRBUkRTKSkgeworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGUgPSBjbVN0ckNhdCgKKyAgICAgICJUaGUgIiwgbGFuZywgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLCB0YXJnZXQtPkdldE5hbWUoKSwKKyAgICAgICJcIiBjb250YWluZWQgYW4gaW52YWxpZCB2YWx1ZTogXCIiLCBleGlzdGluZ0N1ZGFTdGFuZGFyZCwgIlwiLiIpOworICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgY29uc3QgY2hhciogY29uc3QqIG5lZWRDdWRhTGV2ZWwgPQorICAgIG5lZWRDdWRhMjAgPyAmQ1VEQV9TVEFOREFSRFNbNF0KKyAgICA6IG5lZWRDdWRhMTcgPyAmQ1VEQV9TVEFOREFSRFNbM10KKyAgICA6IG5lZWRDdWRhMTQgPyAmQ1VEQV9TVEFOREFSRFNbMl0KKyAgICA6IG5lZWRDdWRhMTEgPyAmQ1VEQV9TVEFOREFSRFNbMV0KKyAgICA6IG5lZWRDdWRhMDMgPyAmQ1VEQV9TVEFOREFSRFNbMF0KKyAgICA6IG51bGxwdHI7CisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisgIHJldHVybiAhbmVlZEN1ZGFMZXZlbCB8fCBuZWVkQ3VkYUxldmVsIDw9IGV4aXN0aW5nQ3VkYUxldmVsOworfQorCit2b2lkIGNtTWFrZWZpbGU6OkNoZWNrTmVlZGVkQ3VkYUxhbmd1YWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN1ZGEwMywgYm9vbCYgbmVlZEN1ZGExMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN1ZGExNCwgYm9vbCYgbmVlZEN1ZGExNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN1ZGEyMCkgY29uc3QKK3sKKyAgaWYgKGNvbnN0IGNoYXIqIHByb3BDdWRhMDMgPQorICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMDNfQ09NUElMRV9GRUFUVVJFUyIpKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDdWRhMDMpOworICAgIG5lZWRDdWRhMDMgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKKyAgfQorICBpZiAoY29uc3QgY2hhciogcHJvcEN1ZGExMSA9CisgICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIxMV9DT01QSUxFX0ZFQVRVUkVTIikpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEN1ZGExMSk7CisgICAgbmVlZEN1ZGExMSA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOworICB9CisgIGlmIChjb25zdCBjaGFyKiBwcm9wQ3VkYTE0ID0KKyAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjE0X0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQ3VkYTE0KTsKKyAgICBuZWVkQ3VkYTE0ID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7CisgIH0KKyAgaWYgKGNvbnN0IGNoYXIqIHByb3BDdWRhMTcgPQorICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMTdfQ09NUElMRV9GRUFUVVJFUyIpKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDdWRhMTcpOworICAgIG5lZWRDdWRhMTcgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKKyAgfQorICBpZiAoY29uc3QgY2hhciogcHJvcEN1ZGEyMCA9CisgICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIyMF9DT01QSUxFX0ZFQVRVUkVTIikpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEN1ZGEyMCk7CisgICAgbmVlZEN1ZGEyMCA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOworICB9Cit9CisKK2Jvb2wgY21NYWtlZmlsZTo6QWRkUmVxdWlyZWRUYXJnZXRDdWRhRmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKK3sKKyAgYm9vbCBuZWVkQ3VkYTAzID0gZmFsc2U7CisgIGJvb2wgbmVlZEN1ZGExMSA9IGZhbHNlOworICBib29sIG5lZWRDdWRhMTQgPSBmYWxzZTsKKyAgYm9vbCBuZWVkQ3VkYTE3ID0gZmFsc2U7CisgIGJvb2wgbmVlZEN1ZGEyMCA9IGZhbHNlOworCisgIHRoaXMtPkNoZWNrTmVlZGVkQ3VkYUxhbmd1YWdlKGZlYXR1cmUsIGxhbmcsIG5lZWRDdWRhMDMsIG5lZWRDdWRhMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDdWRhMTQsIG5lZWRDdWRhMTcsIG5lZWRDdWRhMjApOworCisgIGNvbnN0IGNoYXIqIGV4aXN0aW5nQ3VkYVN0YW5kYXJkID0KKyAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSk7CisgIGlmIChleGlzdGluZ0N1ZGFTdGFuZGFyZCA9PSBudWxscHRyKSB7CisgICAgY29uc3QgY2hhciogZGVmYXVsdEN1ZGFTdGFuZGFyZCA9CisgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7CisgICAgaWYgKGRlZmF1bHRDdWRhU3RhbmRhcmQgJiYgKmRlZmF1bHRDdWRhU3RhbmRhcmQpIHsKKyAgICAgIGV4aXN0aW5nQ3VkYVN0YW5kYXJkID0gZGVmYXVsdEN1ZGFTdGFuZGFyZDsKKyAgICB9CisgIH0KKyAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ3VkYUxldmVsID0gbnVsbHB0cjsKKyAgaWYgKGV4aXN0aW5nQ3VkYVN0YW5kYXJkKSB7CisgICAgZXhpc3RpbmdDdWRhTGV2ZWwgPQorICAgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1VEQV9TVEFOREFSRFMpLCBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUyksCisgICAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDdWRhU3RhbmRhcmQpKTsKKyAgICBpZiAoZXhpc3RpbmdDdWRhTGV2ZWwgPT0gY206OmNlbmQoQ1VEQV9TVEFOREFSRFMpKSB7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoCisgICAgICAgICJUaGUgIiwgbGFuZywgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLCB0YXJnZXQtPkdldE5hbWUoKSwKKyAgICAgICAgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsIGV4aXN0aW5nQ3VkYVN0YW5kYXJkLCAiXCIuIik7CisgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgKmVycm9yID0gZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QmFja3RyYWNlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIGNvbnN0IGNoYXIqIGNvbnN0KiBuZWVkQ3VkYUxldmVsID0KKyAgICBuZWVkQ3VkYTIwID8gJkNVREFfU1RBTkRBUkRTWzRdCisgICAgOiBuZWVkQ3VkYTE3ID8gJkNVREFfU1RBTkRBUkRTWzNdCisgICAgOiBuZWVkQ3VkYTE0ID8gJkNVREFfU1RBTkRBUkRTWzJdCisgICAgOiBuZWVkQ3VkYTExID8gJkNVREFfU1RBTkRBUkRTWzFdCisgICAgOiBuZWVkQ3VkYTAzID8gJkNVREFfU1RBTkRBUkRTWzBdCisgICAgOiBudWxscHRyOworICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworICBpZiAobmVlZEN1ZGFMZXZlbCkgewogICAgIC8vIEVuc3VyZSB0aGUgQ1VEQSBsYW5ndWFnZSBsZXZlbCBpcyBoaWdoIGVub3VnaCB0byBzdXBwb3J0Ci0gICAgLy8gdGhlIG5lZWRlZCBDKysgZmVhdHVyZXMuCi0gICAgaWYgKCFleGlzdGluZ0N1ZGFMZXZlbCB8fCBleGlzdGluZ0N1ZGFMZXZlbCA8IG5lZWRDeHhMZXZlbCkgewotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIsICpuZWVkQ3h4TGV2ZWwpOworICAgIC8vIHRoZSBuZWVkZWQgQ1VEQSBmZWF0dXJlcy4KKyAgICBpZiAoIWV4aXN0aW5nQ3VkYUxldmVsIHx8IGV4aXN0aW5nQ3VkYUxldmVsIDwgbmVlZEN1ZGFMZXZlbCkgeworICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIsICpuZWVkQ3VkYUxldmVsKTsKICAgICB9CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGUuaCBiL1NvdXJjZS9jbU1ha2VmaWxlLmgKaW5kZXggNmU1OTQ5NC4uZDYyODY4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGUuaAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZS5oCkBAIC00OSw2ICs0OSw3IEBACiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKIGNsYXNzIGNtSW1wbGljaXREZXBlbmRzTGlzdDsKIGNsYXNzIGNtSW5zdGFsbEdlbmVyYXRvcjsKK2NsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CiBjbGFzcyBjbU1lc3NlbmdlcjsKIGNsYXNzIGNtU291cmNlRmlsZTsKIGNsYXNzIGNtU3RhdGU7CkBAIC0xMTYsNiArMTE3LDkgQEAKIAogICBib29sIFJlYWRMaXN0RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwogCisgIGJvb2wgUmVhZExpc3RGaWxlQXNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZpcnR1YWxGaWxlTmFtZSk7CisKICAgYm9vbCBSZWFkRGVwZW5kZW50RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub1BvbGljeVNjb3BlID0gdHJ1ZSk7CiAKQEAgLTEzNCw3ICsxMzgsNyBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8Y21GdW5jdGlvbkJsb2NrZXI+IFJlbW92ZUZ1bmN0aW9uQmxvY2tlcigpOwogCiAgIC8qKgotICAgKiBUcnkgcnVubmluZyBjbWFrZSBhbmQgYnVpbGRpbmcgYSBmaWxlLiBUaGlzIGlzIHVzZWQgZm9yIGR5bmFsaWNhbGx5CisgICAqIFRyeSBydW5uaW5nIGNtYWtlIGFuZCBidWlsZGluZyBhIGZpbGUuIFRoaXMgaXMgdXNlZCBmb3IgZHluYW1pY2FsbHkKICAgICogbG9hZGVkIGNvbW1hbmRzLCBub3QgYXMgcGFydCBvZiB0aGUgdXN1YWwgYnVpbGQgcHJvY2Vzcy4KICAgICovCiAgIGludCBUcnlDb21waWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzcmNkaXIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBiaW5kaXIsCkBAIC0xNTEsNTQgKzE1NSw2NCBAQAogICBib29sIEVuZm9yY2VVbmlxdWVOYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyYgbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNDdXN0b20gPSBmYWxzZSkgY29uc3Q7CiAKLSAgdXNpbmcgRmluYWxBY3Rpb24gPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY21NYWtlZmlsZSYpPjsKKyAgdXNpbmcgR2VuZXJhdG9yQWN0aW9uID0KKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoY21Mb2NhbEdlbmVyYXRvciYsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmKT47CiAKICAgLyoqCi0gICAqIFJlZ2lzdGVyIGFuIGFjdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGR1cmluZyBGaW5hbFBhc3MKKyAgICogUmVnaXN0ZXIgYW4gYWN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgZHVyaW5nIEdlbmVyYXRlCiAgICAqLwotICB2b2lkIEFkZEZpbmFsQWN0aW9uKEZpbmFsQWN0aW9uIGFjdGlvbik7CisgIHZvaWQgQWRkR2VuZXJhdG9yQWN0aW9uKEdlbmVyYXRvckFjdGlvbiBhY3Rpb24pOwogCiAgIC8qKgotICAgKiBQZXJmb3JtIEZpbmFsUGFzcywgTGlicmFyeSBkZXBlbmRlbmN5IGFuYWx5c2lzIGV0YyBiZWZvcmUgb3V0cHV0IG9mIHRoZQotICAgKiBtYWtlZmlsZS4KKyAgICogUGVyZm9ybSBnZW5lcmF0ZSBhY3Rpb25zLCBMaWJyYXJ5IGRlcGVuZGVuY3kgYW5hbHlzaXMgZXRjIGJlZm9yZSBvdXRwdXQgb2YKKyAgICogdGhlIG1ha2VmaWxlLgogICAgKi8KLSAgdm9pZCBDb25maWd1cmVGaW5hbFBhc3MoKTsKLQotICAvKioKLSAgICogcnVuIGFsbCBGaW5hbEFjdGlvbnMuCi0gICAqLwotICB2b2lkIEZpbmFsUGFzcygpOworICB2b2lkIEdlbmVyYXRlKGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAogICAvKioKICAgICogR2V0IHRoZSB0YXJnZXQgZm9yIFBSRV9CVUlMRCwgUFJFX0xJTkssIG9yIFBPU1RfQlVJTEQgY29tbWFuZHMuCiAgICAqLwotICBjbVRhcmdldCogR2V0Q3VzdG9tQ29tbWFuZFRhcmdldCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LCBjbU9iamVjdExpYnJhcnlDb21tYW5kcyBvYmpMaWJDb21tYW5kcykgY29uc3Q7CisgIGNtVGFyZ2V0KiBHZXRDdXN0b21Db21tYW5kVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSBjb25zdDsKIAotICAvKiogQWRkIGEgY3VzdG9tIGNvbW1hbmQgdG8gdGhlIGJ1aWxkLiAgKi8KKyAgLyoqCisgICAqIERpc3BhdGNoIGFkZGluZyBhIGN1c3RvbSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxEIGNvbW1hbmQgdG8gYQorICAgKiB0YXJnZXQuCisgICAqLwogICBjbVRhcmdldCogQWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY21DdXN0b21Db21tYW5kVHlwZSB0eXBlLAogICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCi0gICAgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMgPSBjbU9iamVjdExpYnJhcnlDb21tYW5kczo6UmVqZWN0KTsKLSAgY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSk7CisKKyAgLyoqCisgICAqIENhbGxlZCBmb3IgZWFjaCBmaWxlIHdpdGggY3VzdG9tIGNvbW1hbmQuCisgICAqLworICB1c2luZyBDb21tYW5kU291cmNlQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY21Tb3VyY2VGaWxlKik+OworCisgIC8qKgorICAgKiBEaXNwYXRjaCBhZGRpbmcgYSBjdXN0b20gY29tbWFuZCB0byBhIHNvdXJjZSBmaWxlLgorICAgKi8KKyAgdm9pZCBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKLSAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjayA9IG51bGxwdHIsCisgICAgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIpOwotICBjbVNvdXJjZUZpbGUqIEFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgdm9pZCBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKICAgICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKLSAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjayA9IG51bGxwdHIsCisgICAgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIpOwogICB2b2lkIEFkZEN1c3RvbUNvbW1hbmRPbGRTdHlsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LApAQCAtMjQ0LDcgKzI1OCw3IEBACiAKICAgLyoqIENyZWF0ZSBhIHRhcmdldCBpbnN0YW5jZSBmb3IgdGhlIHV0aWxpdHkuICAqLwogICBjbVRhcmdldCogQWRkTmV3VXRpbGl0eVRhcmdldChjb25zdCBzdGQ6OnN0cmluZyYgdXRpbGl0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGJvb2wgZXhjbHVkZUZyb21BbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVGcm9tQWxsKTsKIAogICAvKioKICAgICogQWRkIGFuIGV4ZWN1dGFibGUgdG8gdGhlIGJ1aWxkLgpAQCAtMjU5LDEzICsyNzMsMTIgQEAKICAgY21VdGlsaXR5T3V0cHV0IEdldFV0aWxpdHlPdXRwdXQoY21UYXJnZXQqIHRhcmdldCk7CiAKICAgLyoqCi0gICAqIEFkZCBhIHV0aWxpdHkgdG8gdGhlIGJ1aWxkLiAgQSB1dGlsaXR5IHRhcmdldCBpcyBhIGNvbW1hbmQgdGhhdAotICAgKiBpcyBydW4gZXZlcnkgdGltZSB0aGUgdGFyZ2V0IGlzIGJ1aWx0LgorICAgKiBEaXNwYXRjaCBhZGRpbmcgYSB1dGlsaXR5IHRvIHRoZSBidWlsZC4gIEEgdXRpbGl0eSB0YXJnZXQgaXMgYSBjb21tYW5kCisgICAqIHRoYXQgaXMgcnVuIGV2ZXJ5IHRpbWUgdGhlIHRhcmdldCBpcyBidWlsdC4KICAgICovCiAgIGNtVGFyZ2V0KiBBZGRVdGlsaXR5Q29tbWFuZCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgdXRpbGl0eU5hbWUsIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sCi0gICAgYm9vbCBleGNsdWRlRnJvbUFsbCwgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSwKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHV0aWxpdHlOYW1lLCBib29sIGV4Y2x1ZGVGcm9tQWxsLAorICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCiAgICAgY29uc3QgY2hhciogY29tbWVudCA9IG51bGxwdHIsIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLApAQCAtMzA0LDYgKzMxNywxMiBAQAogICB2b2lkIEFkZENhY2hlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRvYywgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlID0gZmFsc2UpOworICB2b2lkIEFkZENhY2hlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkb2MsIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZSA9IGZhbHNlKQorICB7CisgICAgQWRkQ2FjaGVEZWZpbml0aW9uKG5hbWUsIHZhbHVlLmNfc3RyKCksIGRvYywgdHlwZSwgZm9yY2UpOworICB9CiAKICAgLyoqCiAgICAqIFJlbW92ZSBhIHZhcmlhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgYnVpbGQuICBUaGlzIGlzIG5vdCB2YWxpZApAQCAtNDA5LDkgKzQyOCw5IEBACiAgIHsKICAgICB0aGlzLT5Db21wbGFpbkZpbGVSZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ2V4OwogICB9Ci0gIGNvbnN0IGNoYXIqIEdldENvbXBsYWluUmVndWxhckV4cHJlc3Npb24oKSBjb25zdAorICBjb25zdCBzdGQ6OnN0cmluZyYgR2V0Q29tcGxhaW5SZWd1bGFyRXhwcmVzc2lvbigpIGNvbnN0CiAgIHsKLSAgICByZXR1cm4gdGhpcy0+Q29tcGxhaW5GaWxlUmVndWxhckV4cHJlc3Npb24uY19zdHIoKTsKKyAgICByZXR1cm4gdGhpcy0+Q29tcGxhaW5GaWxlUmVndWxhckV4cHJlc3Npb247CiAgIH0KIAogICAvLyAtLSBMaXN0IG9mIHRhcmdldHMKQEAgLTQyMSw3ICs0NDAsNyBAQAogICAvKiogR2V0IHRoZSB0YXJnZXQgbWFwIC0gY29uc3QgdmVyc2lvbiAqLwogICBjbVRhcmdldE1hcCBjb25zdCYgR2V0VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlRhcmdldHM7IH0KIAotICBjb25zdCBzdGQ6OnZlY3RvcjxjbVRhcmdldCo+JiBHZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpIGNvbnN0CisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVRhcmdldD4+JiBHZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+SW1wb3J0ZWRUYXJnZXRzT3duZWQ7CiAgIH0KQEAgLTcxNyw3ICs3MzYsNyBAQAogICAvKioKICAgICogR2V0IGFsbCB0aGUgc291cmNlIGZpbGVzIHRoaXMgbWFrZWZpbGUga25vd3MgYWJvdXQKICAgICovCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+JiBHZXRTb3VyY2VGaWxlcygpIGNvbnN0CisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVNvdXJjZUZpbGU+PiYgR2V0U291cmNlRmlsZXMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPlNvdXJjZUZpbGVzOwogICB9CkBAIC03NTYsMTQgKzc3NSwyNSBAQAogICBzdGQ6OnN0cmluZyBHZXRNb2R1bGVzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKICAgewogICAgIGJvb2wgc3lzdGVtOwotICAgIHJldHVybiB0aGlzLT5HZXRNb2R1bGVzRmlsZShuYW1lLCBzeXN0ZW0pOworICAgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyOworICAgIHJldHVybiB0aGlzLT5HZXRNb2R1bGVzRmlsZShuYW1lLCBzeXN0ZW0sIGZhbHNlLCBkZWJ1Z0J1ZmZlcik7CiAgIH0KIAotICBzdGQ6OnN0cmluZyBHZXRNb2R1bGVzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgYm9vbCYgc3lzdGVtKSBjb25zdDsKKyAgLyoqCisgICAqIFJldHVybiBhIGxvY2F0aW9uIG9mIGEgZmlsZSBpbiBjbWFrZSBvciBjdXN0b20gbW9kdWxlcyBkaXJlY3RvcnkKKyAgICovCisgIHN0ZDo6c3RyaW5nIEdldE1vZHVsZXNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBib29sJiBzeXN0ZW0pIGNvbnN0CisgIHsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlcjsKKyAgICByZXR1cm4gdGhpcy0+R2V0TW9kdWxlc0ZpbGUobmFtZSwgc3lzdGVtLCBmYWxzZSwgZGVidWdCdWZmZXIpOworICB9CisKKyAgc3RkOjpzdHJpbmcgR2V0TW9kdWxlc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGJvb2wmIHN5c3RlbSwgYm9vbCBkZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRlYnVnQnVmZmVyKSBjb25zdDsKIAogICAvLyEgU2V0L0dldCBhIHByb3BlcnR5IG9mIHRoaXMgZGlyZWN0b3J5CiAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwogICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAgIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBib29sIGNoYWluKSBjb25zdDsKQEAgLTc3MywyOCArODAzLDIyIEBACiAgIC8vISBJbml0aWFsaXplIGEgbWFrZWZpbGUgZnJvbSBpdHMgcGFyZW50CiAgIHZvaWQgSW5pdGlhbGl6ZUZyb21QYXJlbnQoY21NYWtlZmlsZSogcGFyZW50KTsKIAotICB2b2lkIEFkZEluc3RhbGxHZW5lcmF0b3IoY21JbnN0YWxsR2VuZXJhdG9yKiBnKQotICB7Ci0gICAgaWYgKGcpIHsKLSAgICAgIHRoaXMtPkluc3RhbGxHZW5lcmF0b3JzLnB1c2hfYmFjayhnKTsKLSAgICB9Ci0gIH0KLSAgc3RkOjp2ZWN0b3I8Y21JbnN0YWxsR2VuZXJhdG9yKj4mIEdldEluc3RhbGxHZW5lcmF0b3JzKCkKKyAgdm9pZCBBZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxHZW5lcmF0b3I+IGcpOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxHZW5lcmF0b3I+PiYgR2V0SW5zdGFsbEdlbmVyYXRvcnMoKQogICB7CiAgICAgcmV0dXJuIHRoaXMtPkluc3RhbGxHZW5lcmF0b3JzOwogICB9Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtSW5zdGFsbEdlbmVyYXRvcio+JiBHZXRJbnN0YWxsR2VuZXJhdG9ycygpIGNvbnN0CisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxHZW5lcmF0b3I+PiYKKyAgR2V0SW5zdGFsbEdlbmVyYXRvcnMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkluc3RhbGxHZW5lcmF0b3JzOwogICB9CiAKLSAgdm9pZCBBZGRUZXN0R2VuZXJhdG9yKGNtVGVzdEdlbmVyYXRvciogZykKLSAgewotICAgIGlmIChnKSB7Ci0gICAgICB0aGlzLT5UZXN0R2VuZXJhdG9ycy5wdXNoX2JhY2soZyk7Ci0gICAgfQotICB9Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtVGVzdEdlbmVyYXRvcio+JiBHZXRUZXN0R2VuZXJhdG9ycygpIGNvbnN0CisgIHZvaWQgQWRkVGVzdEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Y21UZXN0R2VuZXJhdG9yPiBnKTsKKworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21UZXN0R2VuZXJhdG9yPj4mIEdldFRlc3RHZW5lcmF0b3JzKCkKKyAgICBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPlRlc3RHZW5lcmF0b3JzOwogICB9CkBAIC05MjcsMTIgKzk1MSwxNCBAQAogICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gb3V0cHV0TmFtZSwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNvbmRpdGlvbiwKICAgICBib29sIGlucHV0SXNDb250ZW50KTsKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqPiBHZXRFdmFsdWF0aW9uRmlsZXMoKSBjb25zdDsKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlPj4mCisgIEdldEV2YWx1YXRpb25GaWxlcygpIGNvbnN0OwogCi0gIHN0ZDo6dmVjdG9yPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKj4gR2V0RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9ycygpCi0gICAgY29uc3Q7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4+IGNvbnN0JgorICBHZXRFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JzKCkgY29uc3Q7CiAgIHZvaWQgUmVtb3ZlRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yQ01QMDAyNChjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciogZ2VuKTsKLSAgdm9pZCBBZGRFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IoY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIGdlbik7CisgIHZvaWQgQWRkRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4gZ2VuKTsKIAogICAvLyBNYWludGFpbiBhIHN0YWNrIG9mIHBhY2thZ2Ugcm9vdHMgdG8gYWxsb3cgbmVzdGVkIFBBQ0tBR0VfUk9PVF9QQVRICiAgIC8vIHNlYXJjaGVzCkBAIC05NjIsOCArOTg4LDcgQEAKICAgdXNpbmcgVGFyZ2V0c1ZlYyA9IHN0ZDo6dmVjdG9yPGNtVGFyZ2V0Kj47CiAgIFRhcmdldHNWZWMgT3JkZXJlZFRhcmdldHM7CiAKLSAgdXNpbmcgU291cmNlRmlsZVZlYyA9IHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+OwotICBTb3VyY2VGaWxlVmVjIFNvdXJjZUZpbGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21Tb3VyY2VGaWxlPj4gU291cmNlRmlsZXM7CiAKICAgLy8gQmVjYXVzZSBjbVNvdXJjZUZpbGUgbmFtZXMgYXJlIGNvbXBhcmVkIGluIGEgZnV6enkgd2F5IChzZWUKICAgLy8gY21Tb3VyY2VGaWxlTG9jYXRpb246Ok1hdGNoKCkpIHdlIGNhbid0IGhhdmUgYSBzdHJhaWdodCBtYXBwaW5nIGZyb20KQEAgLTk3MSwxNCArOTk2LDE1IEBACiAgIC8vIE5hbWUgcG9ydGlvbiBvZiB0aGUgY21Tb3VyY2VGaWxlTG9jYXRpb24gYW5kIHRoZW4gY29tcGFyZSBvbiB0aGUgbGlzdCBvZgogICAvLyBjbVNvdXJjZUZpbGVzIHRoYXQgbWlnaHQgbWF0Y2ggdGhhdCBuYW1lLiAgTm90ZSB0aGF0IG9uIHBsYXRmb3JtcyB3aGljaAogICAvLyBoYXZlIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIHdlIHN0b3JlIHRoZSBrZXkgaW4gYWxsIGxvd2VyY2FzZS4KLSAgdXNpbmcgU291cmNlRmlsZU1hcCA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgU291cmNlRmlsZVZlYz47CisgIHVzaW5nIFNvdXJjZUZpbGVNYXAgPQorICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4+OwogICBTb3VyY2VGaWxlTWFwIFNvdXJjZUZpbGVTZWFyY2hJbmRleDsKIAogICAvLyBGb3IgIktub3duIiBwYXRocyB3ZSBjYW4gc3RvcmUgYSBkaXJlY3QgZmlsZW5hbWUgdG8gY21Tb3VyY2VGaWxlIG1hcAogICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGNtU291cmNlRmlsZSo+IEtub3duRmlsZVNlYXJjaEluZGV4OwogCiAgIC8vIFRlc3RzCi0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbVRlc3QqPiBUZXN0czsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxjbVRlc3Q+PiBUZXN0czsKIAogICAvLyBUaGUgc2V0IG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMgdGhhdCBhcmUgbWFya2VkIGFzIHN5c3RlbSBpbmNsdWRlCiAgIC8vIGRpcmVjdG9yaWVzLgpAQCAtOTg3LDggKzEwMTMsOCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGlzdEZpbGVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gT3V0cHV0RmlsZXM7CiAKLSAgc3RkOjp2ZWN0b3I8Y21JbnN0YWxsR2VuZXJhdG9yKj4gSW5zdGFsbEdlbmVyYXRvcnM7Ci0gIHN0ZDo6dmVjdG9yPGNtVGVzdEdlbmVyYXRvcio+IFRlc3RHZW5lcmF0b3JzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsR2VuZXJhdG9yPj4gSW5zdGFsbEdlbmVyYXRvcnM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVRlc3RHZW5lcmF0b3I+PiBUZXN0R2VuZXJhdG9yczsKIAogICBzdGQ6OnN0cmluZyBDb21wbGFpbkZpbGVSZWd1bGFyRXhwcmVzc2lvbjsKICAgc3RkOjpzdHJpbmcgRGVmaW5lRmxhZ3M7CkBAIC0xMDAxLDcgKzEwMjcsNiBAQAogICBzaXplX3QgT2JqZWN0TGlicmFyaWVzU291cmNlR3JvdXBJbmRleDsKICNlbmRpZgogCi0gIHN0ZDo6dmVjdG9yPEZpbmFsQWN0aW9uPiBGaW5hbEFjdGlvbnM7CiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBHbG9iYWxHZW5lcmF0b3I7CiAgIGJvb2wgSXNGdW5jdGlvbkJsb2NrZWQoY29uc3QgY21MaXN0RmlsZUZ1bmN0aW9uJiBsZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cyk7CkBAIC0xMDExLDYgKzEwMzYsOCBAQAogICBjbUxpc3RGaWxlQmFja3RyYWNlIEJhY2t0cmFjZTsKICAgaW50IFJlY3Vyc2lvbkRlcHRoOwogCisgIHZvaWQgRG9HZW5lcmF0ZShjbUxvY2FsR2VuZXJhdG9yJiBsZyk7CisKICAgdm9pZCBSZWFkTGlzdEZpbGUoY21MaXN0RmlsZSBjb25zdCYgbGlzdEZpbGUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZXRvcmVhZCk7CiAKQEAgLTEwMzYsMTUgKzEwNjMsMTcgQEAKICAgbXV0YWJsZSBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gY21OYW1lZEN1cmx5OwogCiAgIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiBVbkNvbmZpZ3VyZWREaXJlY3RvcmllczsKLSAgc3RkOjp2ZWN0b3I8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqPiBFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I+PgorICAgIEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnM7CiAKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqPiBFdmFsdWF0aW9uRmlsZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZT4+CisgICAgRXZhbHVhdGlvbkZpbGVzOwogCiAgIHN0ZDo6dmVjdG9yPGNtRXhlY3V0aW9uU3RhdHVzKj4gRXhlY3V0aW9uU3RhdHVzU3RhY2s7CiAgIGZyaWVuZCBjbGFzcyBjbU1ha2VmaWxlQ2FsbDsKICAgZnJpZW5kIGNsYXNzIGNtUGFyc2VGaWxlU2NvcGU7CiAKLSAgc3RkOjp2ZWN0b3I8Y21UYXJnZXQqPiBJbXBvcnRlZFRhcmdldHNPd25lZDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtVGFyZ2V0Pj4gSW1wb3J0ZWRUYXJnZXRzT3duZWQ7CiAgIHVzaW5nIFRhcmdldE1hcCA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgY21UYXJnZXQqPjsKICAgVGFyZ2V0TWFwIEltcG9ydGVkVGFyZ2V0czsKIApAQCAtMTA4MCwzOCArMTEwOSwxNSBAQAogCiAgIGJvb2wgVmFsaWRhdGVDdXN0b21Db21tYW5kKGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpIGNvbnN0OwogCi0gIHZvaWQgQ3JlYXRlR2VuZXJhdGVkU291cmNlcyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMpOworICB2b2lkIENyZWF0ZUdlbmVyYXRlZE91dHB1dHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzKTsKKyAgdm9pZCBDcmVhdGVHZW5lcmF0ZWRCeXByb2R1Y3RzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cyk7CiAKLSAgdm9pZCBDb21taXRDdXN0b21Db21tYW5kVG9UYXJnZXQoCi0gICAgY21UYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKLSAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsCi0gICAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKLSAgICBib29sIHVzZXNfdGVybWluYWwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyk7Ci0gIGNtU291cmNlRmlsZSogQ29tbWl0Q3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cywKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCi0gICAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAotICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCi0gICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAotICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKTsKLSAgdm9pZCBDb21taXRBcHBlbmRDdXN0b21Db21tYW5kVG9PdXRwdXQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAotICAgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKLSAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzKTsKKyAgc3RkOjp2ZWN0b3I8QlQ8R2VuZXJhdG9yQWN0aW9uPj4gR2VuZXJhdG9yQWN0aW9uczsKKyAgYm9vbCBHZW5lcmF0b3JBY3Rpb25zSW52b2tlZCA9IGZhbHNlOworICBib29sIERlbGF5ZWRPdXRwdXRGaWxlc0hhdmVHZW5leCA9IGZhbHNlOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRGVsYXllZE91dHB1dEZpbGVzOwogCi0gIHZvaWQgQ29tbWl0VXRpbGl0eUNvbW1hbmQoY21UYXJnZXQqIHRhcmdldCwgY29uc3QgY21VdGlsaXR5T3V0cHV0JiBmb3JjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVzY2FwZU9sZFN0eWxlLCBjb25zdCBjaGFyKiBjb21tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpOworICB2b2lkIEFkZERlbGF5ZWRPdXRwdXQoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCk7CiAKICAgLyoqCiAgICAqIFNlZSBMaW5lYXJHZXRTb3VyY2VGaWxlV2l0aE91dHB1dCBmb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbgpAQCAtMTEzMSw2ICsxMTM3LDcgQEAKICAgc3RydWN0IFNvdXJjZUVudHJ5CiAgIHsKICAgICBjbVNvdXJjZXNXaXRoT3V0cHV0IFNvdXJjZXM7CisgICAgYm9vbCBTb3VyY2VNaWdodEJlT3V0cHV0ID0gZmFsc2U7CiAgIH07CiAKICAgLy8gQSBtYXAgZm9yIGZhc3Qgb3V0cHV0IHRvIGlucHV0IGxvb2sgdXAuCkBAIC0xMTQ5LDExICsxMTU2LDE0IEBACiAgIGJvb2wgQWRkUmVxdWlyZWRUYXJnZXRDRmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yID0gbnVsbHB0cikgY29uc3Q7Ci0KICAgYm9vbCBBZGRSZXF1aXJlZFRhcmdldEN4eEZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IgPSBudWxscHRyKSBjb25zdDsKKyAgYm9vbCBBZGRSZXF1aXJlZFRhcmdldEN1ZGFGZWF0dXJlKGNtVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yID0gbnVsbHB0cikgY29uc3Q7CiAKICAgdm9pZCBDaGVja05lZWRlZENMYW5ndWFnZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgYm9vbCYgbmVlZEM5MCwKQEAgLTExNjIsNiArMTE3MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGJvb2wmIG5lZWRDeHg5OCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDeHgxMSwgYm9vbCYgbmVlZEN4eDE0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN4eDE3LCBib29sJiBuZWVkQ3h4MjApIGNvbnN0OworICB2b2lkIENoZWNrTmVlZGVkQ3VkYUxhbmd1YWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBib29sJiBuZWVkQ3VkYTAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDdWRhMTEsIGJvb2wmIG5lZWRDdWRhMTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN1ZGExNywgYm9vbCYgbmVlZEN1ZGEyMCkgY29uc3Q7CiAKICAgYm9vbCBIYXZlQ1N0YW5kYXJkQXZhaWxhYmxlKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKQEAgLTExNjksNiArMTE4Myw5IEBACiAgIGJvb2wgSGF2ZUN4eFN0YW5kYXJkQXZhaWxhYmxlKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CisgIGJvb2wgSGF2ZUN1ZGFTdGFuZGFyZEF2YWlsYWJsZShjbVRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CiAKICAgdm9pZCBDaGVja0ZvclVudXNlZFZhcmlhYmxlcygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTWFrZWZpbGVFeGVjdXRhYmxlVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCA0MDI2NWZmLi40ZmUxMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlRXhlY3V0YWJsZVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTksOCArOSw4IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCkBAIC0zNSwxMCArMzUsOSBAQAogewogICB0aGlzLT5DdXN0b21Db21tYW5kRHJpdmVyID0gT25EZXBlbmRzOwogICB0aGlzLT5UYXJnZXROYW1lcyA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeGVjdXRhYmxlTmFtZXModGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeGVjdXRhYmxlTmFtZXModGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAotICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3IgPQotICAgIGNtOjptYWtlX3VuaXF1ZTxjbU9TWEJ1bmRsZUdlbmVyYXRvcj4odGFyZ2V0LCB0aGlzLT5Db25maWdOYW1lKTsKKyAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yID0gY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQpOwogICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPlNldE1hY0NvbnRlbnRGb2xkZXJzKCZ0aGlzLT5NYWNDb250ZW50Rm9sZGVycyk7CiB9CiAKQEAgLTY0LDcgKzYzLDcgQEAKIAogICAvLyB3cml0ZSB0aGUgbGluayBydWxlcwogICB0aGlzLT5Xcml0ZUV4ZWN1dGFibGVSdWxlKGZhbHNlKTsKLSAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwodGhpcy0+Q29uZmlnTmFtZSkpIHsKKyAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSkgewogICAgIC8vIFdyaXRlIHJ1bGVzIHRvIGxpbmsgYW4gaW5zdGFsbGFibGUgdmVyc2lvbiBvZiB0aGUgdGFyZ2V0LgogICAgIHRoaXMtPldyaXRlRXhlY3V0YWJsZVJ1bGUodHJ1ZSk7CiAgIH0KQEAgLTg1LDcgKzg0LDcgQEAKIHsKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiAgIGNvbnN0IGJvb2wgcmVxdWlyZXNEZXZpY2VMaW5raW5nID0gcmVxdWlyZURldmljZUxpbmtpbmcoCi0gICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGlmICghcmVxdWlyZXNEZXZpY2VMaW5raW5nKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0xNDEsMTAgKzE0MCwxMCBAQAogCiAgIC8vIEFkZCBsYW5ndWFnZSBmZWF0dXJlIGZsYWdzLgogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCi0gICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEFyY2hpdGVjdHVyZUZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQXJjaGl0ZWN0dXJlRmxhZ3MoCisgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIC8vIEFkZCB0YXJnZXQtc3BlY2lmaWMgbGlua2VyIGZsYWdzLgogICB0aGlzLT5HZXRUYXJnZXRMaW5rRmxhZ3MobGlua0ZsYWdzLCBsaW5rTGFuZ3VhZ2UpOwpAQCAtMTk3LDYgKzE5Niw4IEBACiAgICAgdGhpcy0+Q3JlYXRlT2JqZWN0TGlzdHModXNlTGlua1NjcmlwdCwgZmFsc2UsIHVzZVJlc3BvbnNlRmlsZUZvck9iamVjdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRPYmpzLCBkZXBlbmRzLCB1c2VXYXRjb21RdW90ZSk7CiAKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgYWl4RXhwb3J0cyA9IHRoaXMtPkdldEFJWEV4cG9ydHModGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKwogICAgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXI6OlJ1bGVWYXJpYWJsZXMgdmFyczsKICAgICBzdGQ6OnN0cmluZyBvYmplY3REaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKTsKIApAQCAtMjEzLDEyICsyMTQsMTQgQEAKICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgdGFyZ2V0T3V0cHV0UmVhbCksCiAgICAgICBvdXRwdXQpOwogCi0gICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhDb21waWxlUERCID0gdGhpcy0+Q29tcHV0ZVRhcmdldENvbXBpbGVQREIoKTsKKyAgICBzdGQ6OnN0cmluZyB0YXJnZXRGdWxsUGF0aENvbXBpbGVQREIgPQorICAgICAgdGhpcy0+Q29tcHV0ZVRhcmdldENvbXBpbGVQREIodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRQYXRoQ29tcGlsZVBEQiA9CiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHRhcmdldEZ1bGxQYXRoQ29tcGlsZVBEQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKIAogICAgIHZhcnMuTGFuZ3VhZ2UgPSBsaW5rTGFuZ3VhZ2UuY19zdHIoKTsKKyAgICB2YXJzLkFJWEV4cG9ydHMgPSBhaXhFeHBvcnRzLmNfc3RyKCk7CiAgICAgdmFycy5PYmplY3RzID0gYnVpbGRPYmpzLmNfc3RyKCk7CiAgICAgdmFycy5PYmplY3REaXIgPSBvYmplY3REaXIuY19zdHIoKTsKICAgICB2YXJzLlRhcmdldCA9IHRhcmdldC5jX3N0cigpOwpAQCAtMjYzLDcgKzI2Niw3IEBACiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgY29tbWFuZHMxLCB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gIGNtQXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOworICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOwogICBjb21tYW5kczEuY2xlYXIoKTsKIAogICAvLyBXcml0ZSB0aGUgYnVpbGQgcnVsZS4KQEAgLTI4NywxMiArMjkwLDE0IEBACiAKICAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIHRvIGdlbmVyYXRlLgogICBjbUdlbmVyYXRvclRhcmdldDo6TmFtZXMgdGFyZ2V0TmFtZXMgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXhlY3V0YWJsZU5hbWVzKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXhlY3V0YWJsZU5hbWVzKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgLy8gQ29uc3RydWN0IHRoZSBmdWxsIHBhdGggdmVyc2lvbiBvZiB0aGUgbmFtZXMuCi0gIHN0ZDo6c3RyaW5nIG91dHBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKTsKKyAgc3RkOjpzdHJpbmcgb3V0cGF0aCA9CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SXNBcHBCdW5kbGVPbkFwcGxlKCkpIHsKLSAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUFwcEJ1bmRsZSh0YXJnZXROYW1lcy5PdXRwdXQsIG91dHBhdGgpOworICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlQXBwQnVuZGxlKHRhcmdldE5hbWVzLk91dHB1dCwgb3V0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICB9CiAgIG91dHBhdGggKz0gJy8nOwogICBzdGQ6OnN0cmluZyBvdXRwYXRoSW1wOwpAQCAtMzA4LDE4ICszMTMsMTggQEAKICAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KG91dHBhdGgpOwogICAgIGlmICghdGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CiAgICAgICBvdXRwYXRoSW1wID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkoCi0gICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIGNtU3RhdGVFbnVtczo6SW1wb3J0TGlicmFyeUFydGlmYWN0KTsKKyAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KG91dHBhdGhJbXApOwogICAgICAgb3V0cGF0aEltcCArPSAnLyc7CiAgICAgfQogICB9CiAKICAgc3RkOjpzdHJpbmcgY29tcGlsZVBkYk91dHB1dFBhdGggPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q29tcGlsZVBEQkRpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENvbXBpbGVQREJEaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShjb21waWxlUGRiT3V0cHV0UGF0aCk7CiAKICAgc3RkOjpzdHJpbmcgcGRiT3V0cHV0UGF0aCA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShwZGJPdXRwdXRQYXRoKTsKICAgcGRiT3V0cHV0UGF0aCArPSAnLyc7CiAKQEAgLTM0Nyw3ICszNTIsNyBAQAogCiAgIC8vIEdldCB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBsaW5raW5nIHRoaXMgZXhlY3V0YWJsZS4KICAgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGxpbmsgbGFuZ3VhZ2UuCiAgIGlmIChsaW5rTGFuZ3VhZ2UuZW1wdHkoKSkgewpAQCAtMzgwLDcgKzM4NSw3IEBACiAKICAgLy8gQWRkIGZsYWdzIHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlLgogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQ29uZmlnVmFyaWFibGVGbGFncygKLSAgICBsaW5rRmxhZ3MsICJDTUFLRV9FWEVfTElOS0VSX0ZMQUdTIiwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgbGlua0ZsYWdzLCAiQ01BS0VfRVhFX0xJTktFUl9GTEFHUyIsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIldJTjMyX0VYRUNVVEFCTEUiKSkgewogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncygKQEAgLTQwOSwyNSArNDE0LDI2IEBACiAKICAgLy8gQWRkIGxhbmd1YWdlIGZlYXR1cmUgZmxhZ3MuCiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZygKLSAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAotICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQXJjaGl0ZWN0dXJlRmxhZ3MoZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtMYW5ndWFnZSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRBcmNoaXRlY3R1cmVGbGFncygKKyAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgLy8gQWRkIHRhcmdldC1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MuCiAgIHRoaXMtPkdldFRhcmdldExpbmtGbGFncyhsaW5rRmxhZ3MsIGxpbmtMYW5ndWFnZSk7CiAKICAgewotICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIoCisgICAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlciA9CiAgICAgICB0aGlzLT5DcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKLSAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSkpOworICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKTsKIAotICAgIHRoaXMtPkFkZE1vZHVsZURlZmluaXRpb25GbGFnKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGxpbmtGbGFncyk7CisgICAgdGhpcy0+QWRkTW9kdWxlRGVmaW5pdGlvbkZsYWcobGlua0xpbmVDb21wdXRlci5nZXQoKSwgbGlua0ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIH0KIAotICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kSVBPTGlua2VyRmxhZ3MobGlua0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWdOYW1lLCBsaW5rTGFuZ3VhZ2UpOworICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kSVBPTGlua2VyRmxhZ3MoCisgICAgbGlua0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgbGlua0xhbmd1YWdlKTsKIAogICAvLyBDb25zdHJ1Y3QgYSBsaXN0IG9mIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4ZWN1dGFibGUgdGhhdAogICAvLyBtYXkgbmVlZCB0byBiZSBjbGVhbmVkLgpAQCAtNDUxLDcgKzQ1Nyw3IEBACiAgICAgICB0YXJnZXRGdWxsUGF0aEltcG9ydCkpOwogICAgIHN0ZDo6c3RyaW5nIGltcGxpYjsKICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRJbXBsaWJHTlV0b01TKAotICAgICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIHRhcmdldEZ1bGxQYXRoSW1wb3J0LCBpbXBsaWIpKSB7CisgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCB0YXJnZXRGdWxsUGF0aEltcG9ydCwgaW1wbGliKSkgewogICAgICAgZXhlQ2xlYW5GaWxlcy5wdXNoX2JhY2sodGhpcy0+TG9jYWxHZW5lcmF0b3ItPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKAogICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCBpbXBsaWIpKTsKICAgICB9CkBAIC00NzksNyArNDg1LDcgQEAKICAgLy8gQ29uc3RydWN0IHRoZSBtYWluIGxpbmsgcnVsZS4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlYWxfbGlua19jb21tYW5kczsKICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENyZWF0ZVJ1bGVWYXJpYWJsZSgKLSAgICBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgc3RkOjpzdHJpbmcgbGlua1J1bGUgPSB0aGlzLT5HZXRMaW5rUnVsZShsaW5rUnVsZVZhcik7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb21tYW5kczE7CiAgIGNtRXhwYW5kTGlzdChsaW5rUnVsZSwgcmVhbF9saW5rX2NvbW1hbmRzKTsKQEAgLTUwNiwxMCArNTEyLDEwIEBACiAgICAgLy8gU2V0IHBhdGggY29udmVyc2lvbiBmb3IgbGluayBzY3JpcHQgc2hlbGxzLgogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5TZXRMaW5rU2NyaXB0U2hlbGwodXNlTGlua1NjcmlwdCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBsaW5rTGluZUNvbXB1dGVyKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgICAgdGhpcy0+Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsCi0gICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CiAgICAgbGlua0xpbmVDb21wdXRlci0+U2V0Rm9yUmVzcG9uc2UodXNlUmVzcG9uc2VGaWxlRm9yTGlicyk7CiAgICAgbGlua0xpbmVDb21wdXRlci0+U2V0VXNlV2F0Y29tUXVvdGUodXNlV2F0Y29tUXVvdGUpOwogICAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFJlbGluayhyZWxpbmspOwpAQCAtNTM2LDEyICs1NDIsMTIgQEAKICAgICAvLyBtYXliZSBjcmVhdGUgLmRlZiBmaWxlIGZyb20gbGlzdCBvZiBvYmplY3RzCiAgICAgdGhpcy0+R2VuRGVmRmlsZShyZWFsX2xpbmtfY29tbWFuZHMpOwogCi0gICAgc3RkOjpzdHJpbmcgbWFuaWZlc3RzID0gdGhpcy0+R2V0TWFuaWZlc3RzKCk7CisgICAgc3RkOjpzdHJpbmcgbWFuaWZlc3RzID0gdGhpcy0+R2V0TWFuaWZlc3RzKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgICAgdmFycy5DTVRhcmdldE5hbWUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKS5jX3N0cigpOwogICAgIHZhcnMuQ01UYXJnZXRUeXBlID0KLSAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKTsKKyAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKS5jX3N0cigpOwogICAgIHZhcnMuTGFuZ3VhZ2UgPSBsaW5rTGFuZ3VhZ2UuY19zdHIoKTsKICAgICB2YXJzLk9iamVjdHMgPSBidWlsZE9ianMuY19zdHIoKTsKICAgICBzdGQ6OnN0cmluZyBvYmplY3REaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKTsKQEAgLTYyNyw3ICs2MzMsNyBAQAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgIGNvbW1hbmRzMSwgdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgY206OmFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKICAgY29tbWFuZHMxLmNsZWFyKCk7CiAKICAgLy8gQWRkIGEgcnVsZSB0byBjcmVhdGUgbmVjZXNzYXJ5IHN5bWxpbmtzIGZvciB0aGUgbGlicmFyeS4KQEAgLTYzOSw3ICs2NDUsNyBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgICBjb21tYW5kczEsIHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICAgIGNtQXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOworICAgIGNtOjphcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CiAgICAgY29tbWFuZHMxLmNsZWFyKCk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggNTRhNjYwNi4uNDQzNGYxZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC05LDggKzksOCBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgpAQCAtMzYsMTEgKzM2LDEwIEBACiAgIHRoaXMtPkN1c3RvbUNvbW1hbmREcml2ZXIgPSBPbkRlcGVuZHM7CiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgdGhpcy0+VGFyZ2V0TmFtZXMgPQotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaWJyYXJ5TmFtZXModGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpYnJhcnlOYW1lcyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICB9CiAKLSAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yID0KLSAgICBjbTo6bWFrZV91bmlxdWU8Y21PU1hCdW5kbGVHZW5lcmF0b3I+KHRhcmdldCwgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9IGNtOjptYWtlX3VuaXF1ZTxjbU9TWEJ1bmRsZUdlbmVyYXRvcj4odGFyZ2V0KTsKICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5TZXRNYWNDb250ZW50Rm9sZGVycygmdGhpcy0+TWFjQ29udGVudEZvbGRlcnMpOwogfQogCkBAIC02OSwxNCArNjgsMTYgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKICAgICAgIHRoaXMtPldyaXRlU2hhcmVkTGlicmFyeVJ1bGVzKGZhbHNlKTsKLSAgICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPk5lZWRSZWxpbmtCZWZvcmVJbnN0YWxsKHRoaXMtPkNvbmZpZ05hbWUpKSB7CisgICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCgKKyAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSkpIHsKICAgICAgICAgLy8gV3JpdGUgcnVsZXMgdG8gbGluayBhbiBpbnN0YWxsYWJsZSB2ZXJzaW9uIG9mIHRoZSB0YXJnZXQuCiAgICAgICAgIHRoaXMtPldyaXRlU2hhcmVkTGlicmFyeVJ1bGVzKHRydWUpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgdGhpcy0+V3JpdGVNb2R1bGVMaWJyYXJ5UnVsZXMoZmFsc2UpOwotICAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwodGhpcy0+Q29uZmlnTmFtZSkpIHsKKyAgICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPk5lZWRSZWxpbmtCZWZvcmVJbnN0YWxsKAorICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKSkgewogICAgICAgICAvLyBXcml0ZSBydWxlcyB0byBsaW5rIGFuIGluc3RhbGxhYmxlIHZlcnNpb24gb2YgdGhlIHRhcmdldC4KICAgICAgICAgdGhpcy0+V3JpdGVNb2R1bGVMaWJyYXJ5UnVsZXModHJ1ZSk7CiAgICAgICB9CkBAIC0xMjYsMjEgKzEyNywyMSBAQAogdm9pZCBjbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvcjo6V3JpdGVTdGF0aWNMaWJyYXJ5UnVsZXMoKQogewogICBjb25zdCBib29sIHJlcXVpcmVzRGV2aWNlTGlua2luZyA9IHJlcXVpcmVEZXZpY2VMaW5raW5nKAotICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICBpZiAocmVxdWlyZXNEZXZpY2VMaW5raW5nKSB7CiAgICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPSAiQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZIjsKICAgICB0aGlzLT5Xcml0ZURldmljZUxpYnJhcnlSdWxlcyhsaW5rUnVsZVZhciwgZmFsc2UpOwogICB9CiAKICAgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICBzdGQ6OnN0cmluZyBsaW5rUnVsZVZhciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q3JlYXRlUnVsZVZhcmlhYmxlKAotICAgIGxpbmtMYW5ndWFnZSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIHN0ZDo6c3RyaW5nIGV4dHJhRmxhZ3M7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0aWNMaWJyYXJ5RmxhZ3MoCi0gICAgZXh0cmFGbGFncywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKHRoaXMtPkNvbmZpZ05hbWUpLCBsaW5rTGFuZ3VhZ2UsCisgICAgZXh0cmFGbGFncywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKHRoaXMtPkdldENvbmZpZ05hbWUoKSksIGxpbmtMYW5ndWFnZSwKICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwogICB0aGlzLT5Xcml0ZUxpYnJhcnlSdWxlcyhsaW5rUnVsZVZhciwgZXh0cmFGbGFncywgZmFsc2UpOwogfQpAQCAtMTU0LDcgKzE1NSw3IEBACiAKICAgaWYgKCFyZWxpbmspIHsKICAgICBjb25zdCBib29sIHJlcXVpcmVzRGV2aWNlTGlua2luZyA9IHJlcXVpcmVEZXZpY2VMaW5raW5nKAotICAgICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICBpZiAocmVxdWlyZXNEZXZpY2VMaW5raW5nKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5rUnVsZVZhciA9ICJDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkiOwogICAgICAgdGhpcy0+V3JpdGVEZXZpY2VMaWJyYXJ5UnVsZXMobGlua1J1bGVWYXIsIHJlbGluayk7CkBAIC0xNjIsMjEgKzE2MywyMiBAQAogICB9CiAKICAgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZIik7CiAKICAgc3RkOjpzdHJpbmcgZXh0cmFGbGFnczsKICAgdGhpcy0+R2V0VGFyZ2V0TGlua0ZsYWdzKGV4dHJhRmxhZ3MsIGxpbmtMYW5ndWFnZSk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb25maWdWYXJpYWJsZUZsYWdzKAotICAgIGV4dHJhRmxhZ3MsICJDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTIiwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgZXh0cmFGbGFncywgIkNNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MiLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgIHRoaXMtPkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKLSAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpOwogCi0gIHRoaXMtPkFkZE1vZHVsZURlZmluaXRpb25GbGFnKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGV4dHJhRmxhZ3MpOworICB0aGlzLT5BZGRNb2R1bGVEZWZpbml0aW9uRmxhZyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBleHRyYUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJMSU5LX1dIQVRfWU9VX1VTRSIpKSB7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKGV4dHJhRmxhZ3MsICIgLVdsLC0tbm8tYXMtbmVlZGVkIik7CkBAIC0xODgsNyArMTkwLDcgQEAKIHsKICAgaWYgKCFyZWxpbmspIHsKICAgICBjb25zdCBib29sIHJlcXVpcmVzRGV2aWNlTGlua2luZyA9IHJlcXVpcmVEZXZpY2VMaW5raW5nKAotICAgICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICBpZiAocmVxdWlyZXNEZXZpY2VMaW5raW5nKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5rUnVsZVZhciA9ICJDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkiOwogICAgICAgdGhpcy0+V3JpdGVEZXZpY2VMaWJyYXJ5UnVsZXMobGlua1J1bGVWYXIsIHJlbGluayk7CkBAIC0xOTYsMjEgKzE5OCwyMiBAQAogICB9CiAKICAgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfQ1JFQVRFX1NIQVJFRF9NT0RVTEUiKTsKIAogICBzdGQ6OnN0cmluZyBleHRyYUZsYWdzOwogICB0aGlzLT5HZXRUYXJnZXRMaW5rRmxhZ3MoZXh0cmFGbGFncywgbGlua0xhbmd1YWdlKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENvbmZpZ1ZhcmlhYmxlRmxhZ3MoCi0gICAgZXh0cmFGbGFncywgIkNNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MiLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICBleHRyYUZsYWdzLCAiQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHUyIsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKLSAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlcigKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlciA9CiAgICAgdGhpcy0+Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAotICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSkpOworICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CiAKLSAgdGhpcy0+QWRkTW9kdWxlRGVmaW5pdGlvbkZsYWcobGlua0xpbmVDb21wdXRlci5nZXQoKSwgZXh0cmFGbGFncyk7CisgIHRoaXMtPkFkZE1vZHVsZURlZmluaXRpb25GbGFnKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGV4dHJhRmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgdGhpcy0+V3JpdGVMaWJyYXJ5UnVsZXMobGlua1J1bGVWYXIsIGV4dHJhRmxhZ3MsIHJlbGluayk7CiB9CkBAIC0yMTgsMTQgKzIyMSwxNCBAQAogdm9pZCBjbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvcjo6V3JpdGVGcmFtZXdvcmtSdWxlcyhib29sIHJlbGluaykKIHsKICAgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfQ1JFQVRFX01BQ09TWF9GUkFNRVdPUksiKTsKIAogICBzdGQ6OnN0cmluZyBleHRyYUZsYWdzOwogICB0aGlzLT5HZXRUYXJnZXRMaW5rRmxhZ3MoZXh0cmFGbGFncywgbGlua0xhbmd1YWdlKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENvbmZpZ1ZhcmlhYmxlRmxhZ3MoCi0gICAgZXh0cmFGbGFncywgIkNNQUtFX01BQ09TWF9GUkFNRVdPUktfTElOS0VSX0ZMQUdTIiwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgZXh0cmFGbGFncywgIkNNQUtFX01BQ09TWF9GUkFNRVdPUktfTElOS0VSX0ZMQUdTIiwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICB0aGlzLT5Xcml0ZUxpYnJhcnlSdWxlcyhsaW5rUnVsZVZhciwgZXh0cmFGbGFncywgcmVsaW5rKTsKIH0KQEAgLTMzMSw3ICszMzQsOCBAQAogICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCB0YXJnZXRPdXRwdXRSZWFsKSwKICAgICAgIG91dHB1dCk7CiAKLSAgICBzdGQ6OnN0cmluZyB0YXJnZXRGdWxsUGF0aENvbXBpbGVQREIgPSB0aGlzLT5Db21wdXRlVGFyZ2V0Q29tcGlsZVBEQigpOworICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoQ29tcGlsZVBEQiA9CisgICAgICB0aGlzLT5Db21wdXRlVGFyZ2V0Q29tcGlsZVBEQih0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIHN0ZDo6c3RyaW5nIHRhcmdldE91dFBhdGhDb21waWxlUERCID0KICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQodGFyZ2V0RnVsbFBhdGhDb21waWxlUERCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwpAQCAtMzQ3LDcgKzM1MSw3IEBACiAgICAgLy8gQWRkIGxhbmd1YWdlLXNwZWNpZmljIGZsYWdzLgogICAgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCi0gICAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICAgIGxhbmdGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgICB2YXJzLkxhbmd1YWdlQ29tcGlsZUZsYWdzID0gbGFuZ0ZsYWdzLmNfc3RyKCk7CiAKQEAgLTM5Myw3ICszOTcsNyBAQAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgIGNvbW1hbmRzMSwgdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgY206OmFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKICAgY29tbWFuZHMxLmNsZWFyKCk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgbGlzdCBvZiBvdXRwdXRzLgpAQCAtNDIwLDcgKzQyNCw3IEBACiAKICAgLy8gR2V0IHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGxpbmtpbmcgdGhpcyBsaWJyYXJ5LgogICBzdGQ6OnN0cmluZyBsaW5rTGFuZ3VhZ2UgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgbGluayBsYW5ndWFnZS4KICAgaWYgKGxpbmtMYW5ndWFnZS5lbXB0eSgpKSB7CkBAIC00MzksOCArNDQzLDggQEAKICAgLy8gQ3JlYXRlIHNldCBvZiBsaW5raW5nIGZsYWdzLgogICBzdGQ6OnN0cmluZyBsaW5rRmxhZ3M7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhsaW5rRmxhZ3MsIGV4dHJhRmxhZ3MpOwotICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kSVBPTGlua2VyRmxhZ3MobGlua0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWdOYW1lLCBsaW5rTGFuZ3VhZ2UpOworICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kSVBPTGlua2VyRmxhZ3MoCisgICAgbGlua0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgbGlua0xhbmd1YWdlKTsKIAogICAvLyBBZGQgT1NYIHZlcnNpb24gZmxhZ3MsIGlmIGFueS4KICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKQEAgLTQ1MCwyMCArNDU0LDIwIEBACiAgIH0KIAogICAvLyBDb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkuCi0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlicmFyeU5hbWVzKHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpYnJhcnlOYW1lcyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIC8vIENvbnN0cnVjdCB0aGUgZnVsbCBwYXRoIHZlcnNpb24gb2YgdGhlIG5hbWVzLgogICBzdGQ6OnN0cmluZyBvdXRwYXRoOwogICBzdGQ6OnN0cmluZyBvdXRwYXRoSW1wOwogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5Jc0ZyYW1ld29ya09uQXBwbGUoKSkgewotICAgIG91dHBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUZyYW1ld29yayh0aGlzLT5UYXJnZXROYW1lcy5PdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cGF0aCwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICBvdXRwYXRoICs9ICcvJzsKICAgfSBlbHNlIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPklzQ0ZCdW5kbGVPbkFwcGxlKCkpIHsKLSAgICBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7Ci0gICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5DcmVhdGVDRkJ1bmRsZSh0aGlzLT5UYXJnZXROYW1lcy5PdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwYXRoKTsKKyAgICBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUNGQnVuZGxlKHRoaXMtPlRhcmdldE5hbWVzLk91dHB1dCwgb3V0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgb3V0cGF0aCArPSAnLyc7CiAgIH0gZWxzZSBpZiAocmVsaW5rKSB7CiAgICAgb3V0cGF0aCA9IGNtU3RyQ2F0KHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCkBAIC00NzQsMjMgKzQ3OCwyMyBAQAogICAgICAgb3V0cGF0aEltcCA9IG91dHBhdGg7CiAgICAgfQogICB9IGVsc2UgewotICAgIG91dHBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KG91dHBhdGgpOwogICAgIG91dHBhdGggKz0gJy8nOwogICAgIGlmICghdGhpcy0+VGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CiAgICAgICBvdXRwYXRoSW1wID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkoCi0gICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIGNtU3RhdGVFbnVtczo6SW1wb3J0TGlicmFyeUFydGlmYWN0KTsKKyAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KG91dHBhdGhJbXApOwogICAgICAgb3V0cGF0aEltcCArPSAnLyc7CiAgICAgfQogICB9CiAKICAgc3RkOjpzdHJpbmcgY29tcGlsZVBkYk91dHB1dFBhdGggPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q29tcGlsZVBEQkRpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENvbXBpbGVQREJEaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShjb21waWxlUGRiT3V0cHV0UGF0aCk7CiAKICAgc3RkOjpzdHJpbmcgcGRiT3V0cHV0UGF0aCA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShwZGJPdXRwdXRQYXRoKTsKICAgcGRiT3V0cHV0UGF0aCArPSAiLyI7CiAKQEAgLTU2Nyw3ICs1NzEsNyBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgICBjb21tYW5kczEsIHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICAgIGNtQXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOworICAgIGNtOjphcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CiAgICAgY29tbWFuZHMxLmNsZWFyKCk7CiAgIH0KIApAQCAtNTg2LDcgKzU5MCw3IEBACiAgICAgICB0YXJnZXRGdWxsUGF0aEltcG9ydCkpOwogICAgIHN0ZDo6c3RyaW5nIGltcGxpYjsKICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRJbXBsaWJHTlV0b01TKAotICAgICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIHRhcmdldEZ1bGxQYXRoSW1wb3J0LCBpbXBsaWIpKSB7CisgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCB0YXJnZXRGdWxsUGF0aEltcG9ydCwgaW1wbGliKSkgewogICAgICAgbGliQ2xlYW5GaWxlcy5pbnNlcnQodGhpcy0+TG9jYWxHZW5lcmF0b3ItPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKAogICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCBpbXBsaWIpKTsKICAgICB9CkBAIC02MzgsNyArNjQyLDcgQEAKICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfQVJDSElWRV9DUkVBVEUiKTsKIAogICAgIGFyQ3JlYXRlVmFyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAotICAgICAgYXJDcmVhdGVWYXIsIGxpbmtMYW5ndWFnZSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICBhckNyZWF0ZVZhciwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgICAgaWYgKGNvbnN0IGNoYXIqIHJ1bGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihhckNyZWF0ZVZhcikpIHsKICAgICAgIGNtRXhwYW5kTGlzdChydWxlLCBhcmNoaXZlQ3JlYXRlQ29tbWFuZHMpOwpAQCAtNjQ3LDcgKzY1MSw3IEBACiAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX0FSQ0hJVkVfQVBQRU5EIik7CiAKICAgICBhckFwcGVuZFZhciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RmVhdHVyZVNwZWNpZmljTGlua1J1bGVWYXJpYWJsZSgKLSAgICAgIGFyQXBwZW5kVmFyLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgYXJBcHBlbmRWYXIsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAgIGlmIChjb25zdCBjaGFyKiBydWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oYXJBcHBlbmRWYXIpKSB7CiAgICAgICBjbUV4cGFuZExpc3QocnVsZSwgYXJjaGl2ZUFwcGVuZENvbW1hbmRzKTsKQEAgLTY1Niw3ICs2NjAsNyBAQAogICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9BUkNISVZFX0ZJTklTSCIpOwogCiAgICAgYXJGaW5pc2hWYXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEZlYXR1cmVTcGVjaWZpY0xpbmtSdWxlVmFyaWFibGUoCi0gICAgICBhckZpbmlzaFZhciwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICAgIGFyRmluaXNoVmFyLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgICBpZiAoY29uc3QgY2hhciogcnVsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGFyRmluaXNoVmFyKSkgewogICAgICAgY21FeHBhbmRMaXN0KHJ1bGUsIGFyY2hpdmVGaW5pc2hDb21tYW5kcyk7CkBAIC02OTYsMTAgKzcwMCwxMCBAQAogICAgIHN0ZDo6c3RyaW5nIGxpbmtMaWJzOwogICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB7CiAKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIoCisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBsaW5rTGluZUNvbXB1dGVyID0KICAgICAgICAgdGhpcy0+Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKLSAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKSk7CisgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CiAgICAgICBsaW5rTGluZUNvbXB1dGVyLT5TZXRGb3JSZXNwb25zZSh1c2VSZXNwb25zZUZpbGVGb3JMaWJzKTsKICAgICAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFVzZVdhdGNvbVF1b3RlKHVzZVdhdGNvbVF1b3RlKTsKICAgICAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFJlbGluayhyZWxpbmspOwpAQCAtNzIzLDEwICs3MjcsMTIgQEAKICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgIH0KIAorICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhaXhFeHBvcnRzID0gdGhpcy0+R2V0QUlYRXhwb3J0cyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOworCiAgICAgLy8gbWF5YmUgY3JlYXRlIC5kZWYgZmlsZSBmcm9tIGxpc3Qgb2Ygb2JqZWN0cwogICAgIHRoaXMtPkdlbkRlZkZpbGUocmVhbF9saW5rX2NvbW1hbmRzKTsKIAotICAgIHN0ZDo6c3RyaW5nIG1hbmlmZXN0cyA9IHRoaXMtPkdldE1hbmlmZXN0cygpOworICAgIHN0ZDo6c3RyaW5nIG1hbmlmZXN0cyA9IHRoaXMtPkdldE1hbmlmZXN0cyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgIHZhcnMuVGFyZ2V0UERCID0gdGFyZ2V0T3V0UGF0aFBEQi5jX3N0cigpOwpAQCAtNzUwLDggKzc1Niw5IEBACiAKICAgICB2YXJzLkNNVGFyZ2V0TmFtZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpLmNfc3RyKCk7CiAgICAgdmFycy5DTVRhcmdldFR5cGUgPQotICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkpOworICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkpLmNfc3RyKCk7CiAgICAgdmFycy5MYW5ndWFnZSA9IGxpbmtMYW5ndWFnZS5jX3N0cigpOworICAgIHZhcnMuQUlYRXhwb3J0cyA9IGFpeEV4cG9ydHMuY19zdHIoKTsKICAgICB2YXJzLk9iamVjdHMgPSBidWlsZE9ianMuY19zdHIoKTsKICAgICBzdGQ6OnN0cmluZyBvYmplY3REaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKTsKIApAQCAtNzcxLDcgKzc3OCw3IEBACiAgICAgdmFycy5UYXJnZXQgPSB0YXJnZXQuY19zdHIoKTsKICAgICB2YXJzLkxpbmtMaWJyYXJpZXMgPSBsaW5rTGlicy5jX3N0cigpOwogICAgIHZhcnMuT2JqZWN0c1F1b3RlZCA9IGJ1aWxkT2Jqcy5jX3N0cigpOwotICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkhhc1NPTmFtZSh0aGlzLT5Db25maWdOYW1lKSkgeworICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkhhc1NPTmFtZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpKSB7CiAgICAgICB2YXJzLlNPTmFtZUZsYWcgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U09OYW1lRmxhZyhsaW5rTGFuZ3VhZ2UpOwogICAgICAgdmFycy5UYXJnZXRTT05hbWUgPSB0aGlzLT5UYXJnZXROYW1lcy5TaGFyZWRPYmplY3QuY19zdHIoKTsKICAgICB9CkBAIC03ODMsOCArNzkwLDggQEAKICAgICBzdGQ6OnN0cmluZyBpbnN0YWxsX25hbWVfZGlyOwogICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7CiAgICAgICAvLyBHZXQgdGhlIGluc3RhbGxfbmFtZSBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCB0cmVlLgotICAgICAgaW5zdGFsbF9uYW1lX2RpciA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JCdWlsZFRyZWUodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICBpbnN0YWxsX25hbWVfZGlyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRJbnN0YWxsTmFtZURpckZvckJ1aWxkVHJlZSgKKyAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAgICAgLy8gU2V0IHRoZSBydWxlIHZhcmlhYmxlIHJlcGxhY2VtZW50IHZhbHVlLgogICAgICAgaWYgKGluc3RhbGxfbmFtZV9kaXIuZW1wdHkoKSkgewpAQCAtODAwLDEwICs4MDcsMTAgQEAKICAgICAvLyBBZGQgbGFuZ3VhZ2Utc3BlY2lmaWMgZmxhZ3MuCiAgICAgc3RkOjpzdHJpbmcgbGFuZ0ZsYWdzOwogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZygKLSAgICAgIGxhbmdGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgbGFuZ0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRBcmNoaXRlY3R1cmVGbGFncygKLSAgICAgIGxhbmdGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgbGFuZ0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAgIHZhcnMuTGFuZ3VhZ2VDb21waWxlRmxhZ3MgPSBsYW5nRmxhZ3MuY19zdHIoKTsKIApAQCAtOTAzLDcgKzkxMCw3IEBACiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgY29tbWFuZHMxLCB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gIGNtQXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOworICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOwogICBjb21tYW5kczEuY2xlYXIoKTsKIAogICAvLyBBZGQgYSBydWxlIHRvIGNyZWF0ZSBuZWNlc3Nhcnkgc3ltbGlua3MgZm9yIHRoZSBsaWJyYXJ5LgpAQCAtOTE3LDcgKzkyNCw3IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNyZWF0ZUNEQ29tbWFuZCgKICAgICAgIGNvbW1hbmRzMSwgdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gICAgY21BcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CisgICAgY206OmFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKICAgICBjb21tYW5kczEuY2xlYXIoKTsKICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuY3h4IGIvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY0ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmN4eApAQCAtMCwwICsxLDExNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2luY2x1ZGUgImNtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorI2luY2x1ZGUgImNtc3lzL1N5c3RlbUluZm9ybWF0aW9uLmh4eCIKKworI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgorCisjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgorCitjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YTo6Y21NYWtlZmlsZVByb2ZpbGluZ0RhdGEoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9maWxlU3RyZWFtKQoreworICBzdGQ6Omlvczo6b3Blbm1vZGUgb21vZGUgPSBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OnRydW5jOworICB0aGlzLT5Qcm9maWxlU3RyZWFtLm9wZW4ocHJvZmlsZVN0cmVhbS5jX3N0cigpLCBvbW9kZSk7CisgIEpzb246OlN0cmVhbVdyaXRlckJ1aWxkZXIgd2J1aWxkZXI7CisgIHRoaXMtPkpzb25Xcml0ZXIgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxKc29uOjpTdHJlYW1Xcml0ZXI+KHdidWlsZGVyLm5ld1N0cmVhbVdyaXRlcigpKTsKKyAgaWYgKCF0aGlzLT5Qcm9maWxlU3RyZWFtLmdvb2QoKSkgeworICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcihzdGQ6OnN0cmluZygiVW5hYmxlIHRvIG9wZW46ICIpICsgcHJvZmlsZVN0cmVhbSk7CisgIH0KKworICB0aGlzLT5Qcm9maWxlU3RyZWFtIDw8ICJbIjsKK307CisKK2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhOjp+Y21NYWtlZmlsZVByb2ZpbGluZ0RhdGEoKSBub2V4Y2VwdAoreworICBpZiAodGhpcy0+UHJvZmlsZVN0cmVhbS5nb29kKCkpIHsKKyAgICB0cnkgeworICAgICAgdGhpcy0+UHJvZmlsZVN0cmVhbSA8PCAiXSI7CisgICAgICB0aGlzLT5Qcm9maWxlU3RyZWFtLmNsb3NlKCk7CisgICAgfSBjYXRjaCAoLi4uKSB7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiRXJyb3Igd3JpdGluZyBwcm9maWxpbmcgb3V0cHV0ISIpOworICAgIH0KKyAgfQorfQorCit2b2lkIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhOjpTdGFydEVudHJ5KGNvbnN0IGNtTGlzdEZpbGVGdW5jdGlvbiYgbGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQ29udGV4dCBjb25zdCYgbGZjKQoreworICAvKiBEbyBub3QgdHJ5IGFnYWluIGlmIHdlIHByZXZpb3VzbHkgZmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dC4gKi8KKyAgaWYgKCF0aGlzLT5Qcm9maWxlU3RyZWFtLmdvb2QoKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHRyeSB7CisgICAgaWYgKHRoaXMtPlByb2ZpbGVTdHJlYW0udGVsbHAoKSA+IDEpIHsKKyAgICAgIHRoaXMtPlByb2ZpbGVTdHJlYW0gPDwgIiwiOworICAgIH0KKyAgICBjbXN5czo6U3lzdGVtSW5mb3JtYXRpb24gaW5mbzsKKyAgICBKc29uOjpWYWx1ZSB2OworICAgIHZbInBoIl0gPSAiQiI7CisgICAgdlsibmFtZSJdID0gbGZmLk5hbWUuT3JpZ2luYWw7CisgICAgdlsiY2F0Il0gPSAiY21ha2UiOworICAgIHZbInRzIl0gPSBKc29uOjpWYWx1ZTo6VUludDY0KAorICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oCisgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKSkKKyAgICAgICAgLmNvdW50KCkpOworICAgIHZbInBpZCJdID0gc3RhdGljX2Nhc3Q8aW50PihpbmZvLkdldFByb2Nlc3NJZCgpKTsKKyAgICB2WyJ0aWQiXSA9IDA7CisgICAgSnNvbjo6VmFsdWUgYXJnc1ZhbHVlOworICAgIGlmICghbGZmLkFyZ3VtZW50cy5lbXB0eSgpKSB7CisgICAgICBzdGQ6OnN0cmluZyBhcmdzOworICAgICAgZm9yIChjb25zdCBhdXRvJiBhIDogbGZmLkFyZ3VtZW50cykgeworICAgICAgICBhcmdzICs9IChhcmdzLmVtcHR5KCkgPyAiIiA6ICIgIikgKyBhLlZhbHVlOworICAgICAgfQorICAgICAgYXJnc1ZhbHVlWyJmdW5jdGlvbkFyZ3MiXSA9IGFyZ3M7CisgICAgfQorICAgIGFyZ3NWYWx1ZVsibG9jYXRpb24iXSA9IGxmYy5GaWxlUGF0aCArICI6IiArIHN0ZDo6dG9fc3RyaW5nKGxmYy5MaW5lKTsKKyAgICB2WyJhcmdzIl0gPSBhcmdzVmFsdWU7CisKKyAgICB0aGlzLT5Kc29uV3JpdGVyLT53cml0ZSh2LCAmdGhpcy0+UHJvZmlsZVN0cmVhbSk7CisgIH0gY2F0Y2ggKHN0ZDo6aW9zX2Jhc2U6OmZhaWx1cmUmIGZhaWwpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCJGYWlsZWQgdG8gd3JpdGUgdG8gcHJvZmlsaW5nIG91dHB1dDogIiwgZmFpbC53aGF0KCkpKTsKKyAgfSBjYXRjaCAoLi4uKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIHdyaXRpbmcgcHJvZmlsaW5nIG91dHB1dCEiKTsKKyAgfQorfQorCit2b2lkIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhOjpTdG9wRW50cnkoKQoreworICAvKiBEbyBub3QgdHJ5IGFnYWluIGlmIHdlIHByZXZpb3VzbHkgZmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dC4gKi8KKyAgaWYgKCF0aGlzLT5Qcm9maWxlU3RyZWFtLmdvb2QoKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHRyeSB7CisgICAgdGhpcy0+UHJvZmlsZVN0cmVhbSA8PCAiLCI7CisgICAgY21zeXM6OlN5c3RlbUluZm9ybWF0aW9uIGluZm87CisgICAgSnNvbjo6VmFsdWUgdjsKKyAgICB2WyJwaCJdID0gIkUiOworICAgIHZbInRzIl0gPSBKc29uOjpWYWx1ZTo6VUludDY0KAorICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oCisgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKSkKKyAgICAgICAgLmNvdW50KCkpOworICAgIHZbInBpZCJdID0gc3RhdGljX2Nhc3Q8aW50PihpbmZvLkdldFByb2Nlc3NJZCgpKTsKKyAgICB2WyJ0aWQiXSA9IDA7CisgICAgdGhpcy0+SnNvbldyaXRlci0+d3JpdGUodiwgJnRoaXMtPlByb2ZpbGVTdHJlYW0pOworICB9IGNhdGNoIChzdGQ6Omlvc19iYXNlOjpmYWlsdXJlJiBmYWlsKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICBjbVN0ckNhdCgiRmFpbGVkIHRvIHdyaXRlIHRvIHByb2ZpbGluZyBvdXRwdXQ6IiwgZmFpbC53aGF0KCkpKTsKKyAgfSBjYXRjaCAoLi4uKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIHdyaXRpbmcgcHJvZmlsaW5nIG91dHB1dCEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmggYi9Tb3VyY2UvY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFiZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmgKQEAgLTAsMCArMSwyOSBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YV9oCisjZGVmaW5lIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhX2gKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCisKK25hbWVzcGFjZSBKc29uIHsKK2NsYXNzIFN0cmVhbVdyaXRlcjsKK30KKworY2xhc3MgY21MaXN0RmlsZUNvbnRleHQ7CitzdHJ1Y3QgY21MaXN0RmlsZUZ1bmN0aW9uOworCitjbGFzcyBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YQoreworcHVibGljOgorICBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YShjb25zdCBzdGQ6OnN0cmluZyYpOworICB+Y21NYWtlZmlsZVByb2ZpbGluZ0RhdGEoKSBub2V4Y2VwdDsKKyAgdm9pZCBTdGFydEVudHJ5KGNvbnN0IGNtTGlzdEZpbGVGdW5jdGlvbiYgbGZmLCBjbUxpc3RGaWxlQ29udGV4dCBjb25zdCYgbGZjKTsKKyAgdm9pZCBTdG9wRW50cnkoKTsKKworcHJpdmF0ZToKKyAgY21zeXM6Om9mc3RyZWFtIFByb2ZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxKc29uOjpTdHJlYW1Xcml0ZXI+IEpzb25Xcml0ZXI7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggZGQ4YTM4OS4uNGZiODRlZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtMiwxMiArMiwxNCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmQuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuaCIKQEAgLTE1LDYgKzE3LDcgQEAKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgorI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIgogI2luY2x1ZGUgImNtTG9jYWxDb21tb25HZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTM1LDEyICszOCw3IEBACiAKIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OmNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKICAgOiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcih0YXJnZXQpCi0gICwgT1NYQnVuZGxlR2VuZXJhdG9yKG51bGxwdHIpCi0gICwgTWFjT1NYQ29udGVudEdlbmVyYXRvcihudWxscHRyKQogewotICB0aGlzLT5CdWlsZEZpbGVTdHJlYW0gPSBudWxscHRyOwotICB0aGlzLT5JbmZvRmlsZVN0cmVhbSA9IG51bGxwdHI7Ci0gIHRoaXMtPkZsYWdGaWxlU3RyZWFtID0gbnVsbHB0cjsKICAgdGhpcy0+Q3VzdG9tQ29tbWFuZERyaXZlciA9IE9uQnVpbGQ7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yID0KICAgICBzdGF0aWNfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSk7CkBAIC00OCwzNSArNDYsMzEgQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0R2xvYmFsR2VuZXJhdG9yKCkpOwogICBjbWFrZSogY20gPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENNYWtlSW5zdGFuY2UoKTsKICAgdGhpcy0+Tm9SdWxlTWVzc2FnZXMgPSBmYWxzZTsKLSAgaWYgKGNvbnN0IGNoYXIqIHJ1bGVTdGF0dXMgPQotICAgICAgICBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlJVTEVfTUVTU0FHRVMiKSkgewotICAgIHRoaXMtPk5vUnVsZU1lc3NhZ2VzID0gY21Jc09mZihydWxlU3RhdHVzKTsKKyAgaWYgKGNtUHJvcCBydWxlU3RhdHVzID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJSVUxFX01FU1NBR0VTIikpIHsKKyAgICB0aGlzLT5Ob1J1bGVNZXNzYWdlcyA9IGNtSXNPZmYoKnJ1bGVTdGF0dXMpOwogICB9Ci0gIE1hY09TWENvbnRlbnRHZW5lcmF0b3IgPSBuZXcgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUodGhpcyk7CisgIE1hY09TWENvbnRlbnRHZW5lcmF0b3IgPSBjbTo6bWFrZV91bmlxdWU8TWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGU+KHRoaXMpOwogfQogCi1jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjp+Y21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcigpCi17Ci0gIGRlbGV0ZSBNYWNPU1hDb250ZW50R2VuZXJhdG9yOwotfQorY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6fmNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKLWNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IqIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6Ok5ldygKK3N0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yPiBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpOZXcoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0Z3QpCiB7Ci0gIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yPiByZXN1bHQ7CiAKICAgc3dpdGNoICh0Z3QtPkdldFR5cGUoKSkgewogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgotICAgICAgcmVzdWx0ID0gbmV3IGNtTWFrZWZpbGVFeGVjdXRhYmxlVGFyZ2V0R2VuZXJhdG9yKHRndCk7CisgICAgICByZXN1bHQgPSBjbTo6bWFrZV91bmlxdWU8Y21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3I+KHRndCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlk6Ci0gICAgICByZXN1bHQgPSBuZXcgY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3IodGd0KTsKKyAgICAgIHJlc3VsdCA9IGNtOjptYWtlX3VuaXF1ZTxjbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvcj4odGd0KTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgotICAgICAgcmVzdWx0ID0gbmV3IGNtTWFrZWZpbGVVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yKHRndCk7CisgICAgICByZXN1bHQgPSBjbTo6bWFrZV91bmlxdWU8Y21NYWtlZmlsZVV0aWxpdHlUYXJnZXRHZW5lcmF0b3I+KHRndCk7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg1LDYgKzc5LDEzIEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0ZDo6c3RyaW5nIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkdldENvbmZpZ05hbWUoKQoreworICBhdXRvIGNvbnN0JiBjb25maWdOYW1lcyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lcygpOworICBhc3NlcnQoY29uZmlnTmFtZXMuc2l6ZSgpID09IDEpOworICByZXR1cm4gY29uZmlnTmFtZXMuZnJvbnQoKTsKK30KKwogdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpHZXRUYXJnZXRMaW5rRmxhZ3MoCiAgIHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSkKIHsKQEAgLTkyLDE3ICs5MywxOCBAQAogICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiTElOS19GTEFHUyIpKTsKIAogICBzdGQ6OnN0cmluZyBsaW5rRmxhZ3NDb25maWcgPQotICAgIGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSh0aGlzLT5Db25maWdOYW1lKSk7CisgICAgY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoCiAgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KGxpbmtGbGFnc0NvbmZpZykpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtPcHRpb25zKG9wdHMsIHRoaXMtPkNvbmZpZ05hbWUsIGxpbmtMYW5ndWFnZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua09wdGlvbnMob3B0cywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtMYW5ndWFnZSk7CiAgIC8vIExJTktfT1BUSU9OUyBhcmUgZXNjYXBlZC4KICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZENvbXBpbGVPcHRpb25zKGZsYWdzLCBvcHRzKTsKIAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kUG9zaXRpb25JbmRlcGVuZGVudExpbmtlckZsYWdzKAotICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIHRoaXMtPkNvbmZpZ05hbWUsIGxpbmtMYW5ndWFnZSk7CisgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBsaW5rTGFuZ3VhZ2UpOwogfQogCiB2b2lkIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkNyZWF0ZVJ1bGVGaWxlKCkKQEAgLTEyOCw5ICsxMzAsOSBAQAogCiAgIC8vIE9wZW4gdGhlIHJ1bGUgZmlsZS4gIFRoaXMgc2hvdWxkIGJlIGNvcHktaWYtZGlmZmVyZW50IGJlY2F1c2UgdGhlCiAgIC8vIHJ1bGVzIG1heSBkZXBlbmQgb24gdGhpcyBmaWxlIGl0c2VsZi4KLSAgdGhpcy0+QnVpbGRGaWxlU3RyZWFtID0KLSAgICBuZXcgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKHRoaXMtPkJ1aWxkRmlsZU5hbWVGdWxsLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGVFbmNvZGluZygpKTsKKyAgdGhpcy0+QnVpbGRGaWxlU3RyZWFtID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oCisgICAgdGhpcy0+QnVpbGRGaWxlTmFtZUZ1bGwsIGZhbHNlLAorICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGVFbmNvZGluZygpKTsKICAgaWYgKCF0aGlzLT5CdWlsZEZpbGVTdHJlYW0pIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTE1MiwxMiArMTU0LDEyIEBACiAKICAgLy8gRXZhbHVhdGVzIGdlbmVyYXRvciBleHByZXNzaW9ucyBhbmQgZXhwYW5kcyBwcm9wX3ZhbHVlCiAgIGF1dG8gZXZhbHVhdGVkRmlsZXMgPQotICAgIFt0aGlzXShjb25zdCBjaGFyKiBwcm9wX3ZhbHVlKSAtPiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4geworICAgIFt0aGlzXShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcF92YWx1ZSkgLT4gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXM7Ci0gICAgY21FeHBhbmRMaXN0KAotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShwcm9wX3ZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKLSAgICAgIGZpbGVzKTsKKyAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKKyAgICAgICAgICAgICAgICAgICBwcm9wX3ZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAorICAgICAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCksCisgICAgICAgICAgICAgICAgIGZpbGVzKTsKICAgICByZXR1cm4gZmlsZXM7CiAgIH07CiAKQEAgLTE4NywxMiArMTg5LDEzIEBACiAgIC8vIEZpcnN0IGdlbmVyYXRlIHRoZSBvYmplY3QgcnVsZSBmaWxlcy4gIFNhdmUgYSBsaXN0IG9mIGFsbCBvYmplY3QKICAgLy8gZmlsZXMgZm9yIHRoaXMgdGFyZ2V0LgogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBjdXN0b21Db21tYW5kczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDdXN0b21Db21tYW5kcyhjdXN0b21Db21tYW5kcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q3VzdG9tQ29tbWFuZHMoY3VzdG9tQ29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgc3RkOjpzdHJpbmcgY3VycmVudEJpbkRpciA9CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogY3VzdG9tQ29tbWFuZHMpIHsKLSAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpzZi0+R2V0Q3VzdG9tQ29tbWFuZCgpLCB0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IpOworICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coKnNmLT5HZXRDdXN0b21Db21tYW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCksIHRoaXMtPkxvY2FsR2VuZXJhdG9yKTsKICAgICB0aGlzLT5HZW5lcmF0ZUN1c3RvbVJ1bGVGaWxlKGNjZyk7CiAgICAgaWYgKGNsZWFuKSB7CiAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMgPSBjY2cuR2V0T3V0cHV0cygpOwpAQCAtMjE1LDEyICsyMTgsMTQgQEAKICAgICBzdGQ6OnZlY3RvcjxjbUN1c3RvbUNvbW1hbmQ+IGJ1aWxkRXZlbnRDb21tYW5kcyA9CiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByZUJ1aWxkQ29tbWFuZHMoKTsKIAotICAgIGNtQXBwZW5kKGJ1aWxkRXZlbnRDb21tYW5kcywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcmVMaW5rQ29tbWFuZHMoKSk7Ci0gICAgY21BcHBlbmQoYnVpbGRFdmVudENvbW1hbmRzLAotICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UG9zdEJ1aWxkQ29tbWFuZHMoKSk7CisgICAgY206OmFwcGVuZChidWlsZEV2ZW50Q29tbWFuZHMsCisgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByZUxpbmtDb21tYW5kcygpKTsKKyAgICBjbTo6YXBwZW5kKGJ1aWxkRXZlbnRDb21tYW5kcywKKyAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UG9zdEJ1aWxkQ29tbWFuZHMoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGJlIDogYnVpbGRFdmVudENvbW1hbmRzKSB7Ci0gICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgYmVnKGJlLCB0aGlzLT5Db25maWdOYW1lLCB0aGlzLT5Mb2NhbEdlbmVyYXRvcik7CisgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgYmVnKGJlLCB0aGlzLT5HZXRDb25maWdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yKTsKICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cyA9IGJlZy5HZXRCeXByb2R1Y3RzKCk7CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBieXByb2R1Y3QgOiBieXByb2R1Y3RzKSB7CiAgICAgICAgIHRoaXMtPkNsZWFuRmlsZXMuaW5zZXJ0KApAQCAtMjMwLDE3ICsyMzUsMTkgQEAKICAgICB9CiAgIH0KICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gaGVhZGVyU291cmNlczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRIZWFkZXJTb3VyY2VzKGhlYWRlclNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEhlYWRlclNvdXJjZXMoaGVhZGVyU291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+R2VuZXJhdGVNYWNPU1hDb250ZW50U3RhdGVtZW50cygKLSAgICBoZWFkZXJTb3VyY2VzLCB0aGlzLT5NYWNPU1hDb250ZW50R2VuZXJhdG9yKTsKKyAgICBoZWFkZXJTb3VyY2VzLCB0aGlzLT5NYWNPU1hDb250ZW50R2VuZXJhdG9yLmdldCgpLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBleHRyYVNvdXJjZXM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0cmFTb3VyY2VzKGV4dHJhU291cmNlcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0cmFTb3VyY2VzKGV4dHJhU291cmNlcywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5HZW5lcmF0ZU1hY09TWENvbnRlbnRTdGF0ZW1lbnRzKAotICAgIGV4dHJhU291cmNlcywgdGhpcy0+TWFjT1NYQ29udGVudEdlbmVyYXRvcik7CisgICAgZXh0cmFTb3VyY2VzLCB0aGlzLT5NYWNPU1hDb250ZW50R2VuZXJhdG9yLmdldCgpLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICBjb25zdCBjaGFyKiBwY2hFeHRlbnNpb24gPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9QQ0hfRVhURU5TSU9OIik7CiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGV4dGVybmFsT2JqZWN0czsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHRlcm5hbE9iamVjdHMoZXh0ZXJuYWxPYmplY3RzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHRlcm5hbE9iamVjdHMoZXh0ZXJuYWxPYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogc2YgOiBleHRlcm5hbE9iamVjdHMpIHsKICAgICBhdXRvIGNvbnN0JiBvYmplY3RGaWxlTmFtZSA9IHNmLT5HZXRGdWxsUGF0aCgpOwogICAgIGlmICghY21TeXN0ZW1Ub29sczo6U3RyaW5nRW5kc1dpdGgob2JqZWN0RmlsZU5hbWUsIHBjaEV4dGVuc2lvbikpIHsKQEAgLTI0OCw3ICsyNTUsOCBAQAogICAgIH0KICAgfQogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBvYmplY3RTb3VyY2VzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE9iamVjdFNvdXJjZXMob2JqZWN0U291cmNlcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0T2JqZWN0U291cmNlcyhvYmplY3RTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogb2JqZWN0U291cmNlcykgewogICAgIC8vIEdlbmVyYXRlIHRoaXMgb2JqZWN0IGZpbGUncyBydWxlIGZpbGUuCiAgICAgdGhpcy0+V3JpdGVPYmplY3RSdWxlRmlsZXMoKnNmKTsKQEAgLTI5MSwxNyArMjk5LDE2IEBACiAgICAgICBkZXBlbmRGaWxlTmFtZUZ1bGwsIGZhbHNlLCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CiAgICAgZGVwRmlsZVN0cmVhbSA8PCAiIyBFbXB0eSBkZXBlbmRlbmNpZXMgZmlsZSBmb3IgIgogICAgICAgICAgICAgICAgICAgPDwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkgPDwgIi5cbiIKLSAgICAgICAgICAgICAgICAgIDw8ICIjIFRoaXMgbWF5IGJlIHJlcGxhY2VkIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSBidWlsdC4iCi0gICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgICAgICA8PCAiIyBUaGlzIG1heSBiZSByZXBsYWNlZCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgYnVpbHQuXG4iOwogICB9CiAKICAgLy8gT3BlbiB0aGUgZmxhZ3MgZmlsZS4gIFRoaXMgc2hvdWxkIGJlIGNvcHktaWYtZGlmZmVyZW50IGJlY2F1c2UgdGhlCiAgIC8vIHJ1bGVzIG1heSBkZXBlbmQgb24gdGhpcyBmaWxlIGl0c2VsZi4KICAgdGhpcy0+RmxhZ0ZpbGVOYW1lRnVsbCA9CiAgICAgY21TdHJDYXQodGhpcy0+VGFyZ2V0QnVpbGREaXJlY3RvcnlGdWxsLCAiL2ZsYWdzLm1ha2UiKTsKLSAgdGhpcy0+RmxhZ0ZpbGVTdHJlYW0gPQotICAgIG5ldyBjbUdlbmVyYXRlZEZpbGVTdHJlYW0odGhpcy0+RmxhZ0ZpbGVOYW1lRnVsbCwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CisgIHRoaXMtPkZsYWdGaWxlU3RyZWFtID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oCisgICAgdGhpcy0+RmxhZ0ZpbGVOYW1lRnVsbCwgZmFsc2UsCisgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOwogICBpZiAoIXRoaXMtPkZsYWdGaWxlU3RyZWFtKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0zMzQsOSArMzQxLDkgQEAKICAgfQogCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlIDogbGFuZ3VhZ2VzKSB7Ci0gICAgc3RkOjpzdHJpbmcgZmxhZ3MgPSB0aGlzLT5HZXRGbGFncyhsYW5ndWFnZSk7Ci0gICAgc3RkOjpzdHJpbmcgZGVmaW5lcyA9IHRoaXMtPkdldERlZmluZXMobGFuZ3VhZ2UpOwotICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gdGhpcy0+R2V0SW5jbHVkZXMobGFuZ3VhZ2UpOworICAgIHN0ZDo6c3RyaW5nIGZsYWdzID0gdGhpcy0+R2V0RmxhZ3MobGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgc3RkOjpzdHJpbmcgZGVmaW5lcyA9IHRoaXMtPkdldERlZmluZXMobGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgc3RkOjpzdHJpbmcgaW5jbHVkZXMgPSB0aGlzLT5HZXRJbmNsdWRlcyhsYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgICAvLyBFc2NhcGUgY29tbWVudCBjaGFyYWN0ZXJzIHNvIHRoZXkgZG8gbm90IHRlcm1pbmF0ZSBhc3NpZ25tZW50LgogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoZmxhZ3MsICIjIiwgIlxcIyIpOwogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoZGVmaW5lcywgIiMiLCAiXFwjIik7CkBAIC0zNDgsNyArMzU1LDcgQEAKIH0KIAogdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZTo6b3BlcmF0b3IoKSgKLSAgY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UsIGNvbnN0IGNoYXIqIHBrZ2xvYykKKyAgY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UsIGNvbnN0IGNoYXIqIHBrZ2xvYywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgLy8gU2tpcCBPUyBYIGNvbnRlbnQgd2hlbiBub3QgYnVpbGRpbmcgYSBGcmFtZXdvcmsgb3IgQnVuZGxlLgogICBpZiAoIXRoaXMtPkdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPklzQnVuZGxlT25BcHBsZSgpKSB7CkBAIC0zNTYsNyArMzYzLDggQEAKICAgfQogCiAgIHN0ZDo6c3RyaW5nIG1hY2RpciA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KHBrZ2xvYyk7CisgICAgdGhpcy0+R2VuZXJhdG9yLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KHBrZ2xvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIAogICAvLyBHZXQgdGhlIGlucHV0IGZpbGUgbG9jYXRpb24uCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBpbnB1dCA9IHNvdXJjZS5HZXRGdWxsUGF0aCgpOwpAQCAtNDUxLDcgKzQ1OSw3IEBACiAgIC8vIGdlbmVyYXRlIHRoZSBkZXBlbmQgc2Nhbm5pbmcgcnVsZQogICB0aGlzLT5Xcml0ZU9iamVjdERlcGVuZFJ1bGVzKHNvdXJjZSwgZGVwZW5kcyk7CiAKLSAgc3RkOjpzdHJpbmcgY29uZmlnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldENvbmZpZ05hbWUoKTsKKyAgc3RkOjpzdHJpbmcgY29uZmlnID0gdGhpcy0+R2V0Q29uZmlnTmFtZSgpOwogICBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogCiAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgZGVwZW5kZW5jaWVzCkBAIC01OTMsMTYgKzYwMSwxNyBAQAogICB7CiAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhSZWFsOwogICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoUERCOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoQ29tcGlsZVBEQiA9IHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCk7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhDb21waWxlUERCID0KKyAgICAgIHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSB8fAogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgewogICAgICAgdGFyZ2V0RnVsbFBhdGhSZWFsID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGdWxsUGF0aCgKLSAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSwgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsIHRydWUpOwotICAgICAgdGFyZ2V0RnVsbFBhdGhQREIgPQotICAgICAgICBjbVN0ckNhdCh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQkRpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKSwgJy8nLAotICAgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQk5hbWUodGhpcy0+Q29uZmlnTmFtZSkpOworICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCksIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LCB0cnVlKTsKKyAgICAgIHRhcmdldEZ1bGxQYXRoUERCID0gY21TdHJDYXQoCisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCRGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSksICcvJywKKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJOYW1lKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOwogICAgIH0KIAogICAgIHRhcmdldE91dFBhdGhSZWFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKQEAgLTYyOCw3ICs2MzcsNyBAQAogICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKTsKICAgdmFycy5DTVRhcmdldFR5cGUgPQotICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKTsKKyAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkuY19zdHIoKTsKICAgdmFycy5MYW5ndWFnZSA9IGxhbmcuY19zdHIoKTsKICAgdmFycy5UYXJnZXQgPSB0YXJnZXRPdXRQYXRoUmVhbC5jX3N0cigpOwogICB2YXJzLlRhcmdldFBEQiA9IHRhcmdldE91dFBhdGhQREIuY19zdHIoKTsKQEAgLTcwNSwxNiArNzE0LDE4IEBACiAgICAgICAvLyBubyBsYXVuY2hlciBmb3IgQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMKICAgICAgIHJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLT5FeHBhbmRSdWxlVmFyaWFibGVzKHRoaXMtPkxvY2FsR2VuZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUNvbW1hbmQsIHZhcnMpOwotICAgICAgc3RkOjpzdHJpbmcgd29ya2luZ0RpcmVjdG9yeSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOworICAgICAgc3RkOjpzdHJpbmcgd29ya2luZ0RpcmVjdG9yeSA9CisgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CiAgICAgICBjb21waWxlQ29tbWFuZC5yZXBsYWNlKGNvbXBpbGVDb21tYW5kLmZpbmQobGFuZ0ZsYWdzKSwgbGFuZ0ZsYWdzLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0RmxhZ3MobGFuZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRGbGFncyhsYW5nLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpKTsKICAgICAgIHN0ZDo6c3RyaW5nIGxhbmdEZWZpbmVzID0gc3RkOjpzdHJpbmcoIiQoIikgKyBsYW5nICsgIl9ERUZJTkVTKSI7CiAgICAgICBjb21waWxlQ29tbWFuZC5yZXBsYWNlKGNvbXBpbGVDb21tYW5kLmZpbmQobGFuZ0RlZmluZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRGVmaW5lcy5zaXplKCksIHRoaXMtPkdldERlZmluZXMobGFuZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRGVmaW5lcy5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldERlZmluZXMobGFuZywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKSk7CiAgICAgICBzdGQ6OnN0cmluZyBsYW5nSW5jbHVkZXMgPSBzdGQ6OnN0cmluZygiJCgiKSArIGxhbmcgKyAiX0lOQ0xVREVTKSI7CiAgICAgICBjb21waWxlQ29tbWFuZC5yZXBsYWNlKGNvbXBpbGVDb21tYW5kLmZpbmQobGFuZ0luY2x1ZGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ0luY2x1ZGVzLnNpemUoKSwgdGhpcy0+R2V0SW5jbHVkZXMobGFuZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nSW5jbHVkZXMuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRJbmNsdWRlcyhsYW5nLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpKTsKIAogICAgICAgY29uc3QgY2hhciogZWxpbWluYXRlW10gPSB7CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TVEFSVF9URU1QX0ZJTEUiKSwKQEAgLTc2OSw3ICs3ODAsMTMgQEAKICAgICAgICAgfQogICAgICAgICBpZiAodGlkeSAmJiAqdGlkeSkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS10aWR5PSI7Ci0gICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKHRpZHkpOworICAgICAgICAgIGNvbnN0IGNoYXIqIGRyaXZlck1vZGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSIpOworICAgICAgICAgIGlmICghKGRyaXZlck1vZGUgJiYgKmRyaXZlck1vZGUpKSB7CisgICAgICAgICAgICBkcml2ZXJNb2RlID0gbGFuZyA9PSAiQyIgPyAiZ2NjIiA6ICJnKysiOworICAgICAgICAgIH0KKyAgICAgICAgICBydW5faXd5dSArPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoCisgICAgICAgICAgICBjbVN0ckNhdCh0aWR5LCAiOy0tZXh0cmEtYXJnLWJlZm9yZT0tLWRyaXZlci1tb2RlPSIsIGRyaXZlck1vZGUpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY3BwbGludCAmJiAqY3BwbGludCkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBsaW50PSI7CkBAIC04MjMsNyArODQwLDcgQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgICAgY29tcGlsZUNvbW1hbmRzLCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKLSAgICBjbUFwcGVuZChjb21tYW5kcywgY29tcGlsZUNvbW1hbmRzKTsKKyAgICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBjb21waWxlQ29tbWFuZHMpOwogICB9CiAKICAgLy8gQ2hlY2sgZm9yIGV4dHJhIG91dHB1dHMgY3JlYXRlZCBieSB0aGUgY29tcGlsYXRpb24uCkBAIC04ODIsNyArODk5LDcgQEAKICAgICAgICAgICBwcmVwcm9jZXNzQ29tbWFuZHMsCiAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICAgICAgICBjbUFwcGVuZChjb21tYW5kcywgcHJlcHJvY2Vzc0NvbW1hbmRzKTsKKyAgICAgICAgY206OmFwcGVuZChjb21tYW5kcywgcHJlcHJvY2Vzc0NvbW1hbmRzKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNtZCA9CiAgICAgICAgICAgY21TdHJDYXQoIiQoQ01BS0VfQ09NTUFORCkgLUUgY21ha2VfdW5pbXBsZW1lbnRlZF92YXJpYWJsZSAiLApAQCAtOTI2LDcgKzk0Myw3IEBACiAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgICAgICAgYXNzZW1ibHlDb21tYW5kcywgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICAgICAgICBjbUFwcGVuZChjb21tYW5kcywgYXNzZW1ibHlDb21tYW5kcyk7CisgICAgICAgIGNtOjphcHBlbmQoY29tbWFuZHMsIGFzc2VtYmx5Q29tbWFuZHMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RkOjpzdHJpbmcgY21kID0KICAgICAgICAgICBjbVN0ckNhdCgiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV91bmltcGxlbWVudGVkX3ZhcmlhYmxlICIsCkBAIC0xMDM2LDcgKzEwNTMsOCBAQAogICB0aGlzLT5JbmZvRmlsZU5hbWVGdWxsID0gY21TdHJDYXQoZGlyLCAiL0RlcGVuZEluZm8uY21ha2UiKTsKICAgdGhpcy0+SW5mb0ZpbGVOYW1lRnVsbCA9CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb0Z1bGxQYXRoKHRoaXMtPkluZm9GaWxlTmFtZUZ1bGwpOwotICB0aGlzLT5JbmZvRmlsZVN0cmVhbSA9IG5ldyBjbUdlbmVyYXRlZEZpbGVTdHJlYW0odGhpcy0+SW5mb0ZpbGVOYW1lRnVsbCk7CisgIHRoaXMtPkluZm9GaWxlU3RyZWFtID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPih0aGlzLT5JbmZvRmlsZU5hbWVGdWxsKTsKICAgaWYgKCF0aGlzLT5JbmZvRmlsZVN0cmVhbSkgewogICAgIHJldHVybjsKICAgfQpAQCAtMTA2OCw3ICsxMDg2LDggQEAKICAgICA8PCAiIyBUYXJnZXRzIHRvIHdoaWNoIHRoaXMgdGFyZ2V0IGxpbmtzLlxuIgogICAgIDw8ICJzZXQoQ01BS0VfVEFSR0VUX0xJTktFRF9JTkZPX0ZJTEVTXG4iOwogICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkaXJzID0gdGhpcy0+R2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlycyA9CisgICAgICB0aGlzLT5HZXRMaW5rZWRUYXJnZXREaXJlY3Rvcmllcyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBkaXJzKSB7CiAgICAgICAqdGhpcy0+SW5mb0ZpbGVTdHJlYW0gPDwgIiAgXCIiIDw8IGQgPDwgIi9EZXBlbmRJbmZvLmNtYWtlXCJcbiI7CiAgICAgfQpAQCAtMTEwOCw4ICsxMTI3LDcgQEAKICAgLy8gdHJhbnNsYXRpb24gdGFibGUgZm9yIHRoZSBkZXBlbmRlbmN5IHNjYW5uaW5nIHByb2Nlc3MuCiAgIGRlcENtZCA8PCAiY2QgIgogICAgICAgICAgPDwgKHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpKQogICAgICAgICAgPDwgIiAmJiAiOwogI2VuZGlmCkBAIC0xMTI1LDIzICsxMTQzLDE5IEBACiAgIGRlcENtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9kZXBlbmRzIFwiIgogICAgICAgICAgPDwgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXROYW1lKCkgPDwgIlwiICIKICAgICAgICAgIDw8IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFNvdXJjZURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFNvdXJjZURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCiAgICAgICAgICA8PCAiICIKICAgICAgICAgIDw8IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSksCisgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICAgICAgIDw8ICIgIgogICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpLAorICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICAgICAgIDw8ICIgIgogICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQogICAgICAgICAgPDwgIiAiCiAgICAgICAgICA8PCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KApAQCAtMTE3MSw5ICsxMTg1LDkgQEAKICAgICBzb3VyY2VzLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSk7CiAgIGZvciAoY21Tb3VyY2VGaWxlKiBzb3VyY2UgOiBzb3VyY2VzKSB7CiAgICAgaWYgKGNtQ3VzdG9tQ29tbWFuZCogY2MgPSBzb3VyY2UtPkdldEN1c3RvbUNvbW1hbmQoKSkgewotICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqY2MsIHRoaXMtPkNvbmZpZ05hbWUsCisgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcik7Ci0gICAgICBjbUFwcGVuZChkZXBlbmRzLCBjY2cuR2V0T3V0cHV0cygpKTsKKyAgICAgIGNtOjphcHBlbmQoZGVwZW5kcywgY2NnLkdldE91dHB1dHMoKSk7CiAgICAgfQogICB9CiB9CkBAIC0xMjI5LDggKzEyNDMsMTAgQEAKIAogICAvLyBTZXR1cCBpbXBsaWNpdCBkZXBlbmRlbmN5IHNjYW5uaW5nLgogICBmb3IgKGF1dG8gY29uc3QmIGlkaSA6IGNjZy5HZXRDQygpLkdldEltcGxpY2l0RGVwZW5kcygpKSB7Ci0gICAgc3RkOjpzdHJpbmcgb2JqRnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKG91dHB1dHNbMF0pOwotICAgIHN0ZDo6c3RyaW5nIHNyY0Z1bGxQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpZGkuc2Vjb25kKTsKKyAgICBzdGQ6OnN0cmluZyBvYmpGdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICBvdXRwdXRzWzBdLCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgICBzdGQ6OnN0cmluZyBzcmNGdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICBpZGkuc2Vjb25kLCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkSW1wbGljaXREZXBlbmRzKHRoaXMtPkdlbmVyYXRvclRhcmdldCwgaWRpLmZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqRnVsbFBhdGgsIHNyY0Z1bGxQYXRoKTsKICAgfQpAQCAtMTQxMCw3ICsxNDI2LDcgQEAKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGV4dHJhIGZpbGVzIGFyZSBidWlsdC4KLSAgICBjbUFwcGVuZChkZXBlbmRzLCB0aGlzLT5FeHRyYUZpbGVzKTsKKyAgICBjbTo6YXBwZW5kKGRlcGVuZHMsIHRoaXMtPkV4dHJhRmlsZXMpOwogICB9CiAKICAgLy8gV3JpdGUgdGhlIGRyaXZlciBydWxlLgpAQCAtMTQyOSwxMCArMTQ0NSwxMCBAQAogICB9CiAKICAgLy8gTG9vcCBvdmVyIGFsbCBsaWJyYXJ5IGRlcGVuZGVuY2llcy4KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNmZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCk7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjZmcgPSB0aGlzLT5HZXRDb25maWdOYW1lKCk7CiAgIGlmIChjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKGNmZykpIHsKLSAgICBjbUFwcGVuZChkZXBlbmRzLCBjbGktPkdldERlcGVuZHMoKSk7CisgICAgY206OmFwcGVuZChkZXBlbmRzLCBjbGktPkdldERlcGVuZHMoKSk7CiAgIH0KIH0KIApAQCAtMTQ0OCw3ICsxNDY0LDcgQEAKICAgfQogCiAgIC8vIEFkZCBkZXBlbmRlbmNpZXMgb24gdGhlIGV4dGVybmFsIG9iamVjdCBmaWxlcy4KLSAgY21BcHBlbmQoZGVwZW5kcywgdGhpcy0+RXh0ZXJuYWxPYmplY3RzKTsKKyAgY206OmFwcGVuZChkZXBlbmRzLCB0aGlzLT5FeHRlcm5hbE9iamVjdHMpOwogCiAgIC8vIEFkZCBhIGRlcGVuZGVuY3kgb24gdGhlIHJ1bGUgZmlsZSBpdHNlbGYuCiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRSdWxlRGVwZW5kKGRlcGVuZHMsCkBAIC0xNDc0LDEzICsxNDkwLDEzIEBACiAKICAgLy8gQWRkIGEgZGVwZW5kZW5jeSBvbiB1c2VyLXNwZWNpZmllZCBtYW5pZmVzdCBmaWxlcywgaWYgYW55LgogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBtYW5pZmVzdF9zcmNzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE1hbmlmZXN0cyhtYW5pZmVzdF9zcmNzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG1hbmlmZXN0X3NyYyA6IG1hbmlmZXN0X3NyY3MpIHsKICAgICBkZXBlbmRzLnB1c2hfYmFjayhtYW5pZmVzdF9zcmMtPkdldEZ1bGxQYXRoKCkpOwogICB9CiAKICAgLy8gQWRkIHVzZXItc3BlY2lmaWVkIGRlcGVuZGVuY2llcy4KLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rRGVwZW5kcyhkZXBlbmRzLCB0aGlzLT5Db25maWdOYW1lLAorICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtEZXBlbmRzKGRlcGVuZHMsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UpOwogfQogCkBAIC0xNDg4LDEwICsxNTA0LDExIEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rUnVsZVZhcikKIHsKICAgc3RkOjpzdHJpbmcgbGlua1J1bGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UmVxdWlyZWREZWZpbml0aW9uKGxpbmtSdWxlVmFyKTsKLSAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SGFzSW1wbGliR05VdG9NUyh0aGlzLT5Db25maWdOYW1lKSkgewotICAgIHN0ZDo6c3RyaW5nIHJ1bGVWYXIgPSBjbVN0ckNhdCgKLSAgICAgICJDTUFLRV8iLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpLAotICAgICAgIl9HTlV0b01TX1JVTEUiKTsKKyAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SGFzSW1wbGliR05VdG9NUyh0aGlzLT5HZXRDb25maWdOYW1lKCkpKSB7CisgICAgc3RkOjpzdHJpbmcgcnVsZVZhciA9CisgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwKKyAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSwKKyAgICAgICAgICAgICAgICJfR05VdG9NU19SVUxFIik7CiAgICAgaWYgKGNvbnN0IGNoYXIqIHJ1bGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihydWxlVmFyKSkgewogICAgICAgbGlua1J1bGUgKz0gcnVsZTsKICAgICB9CkBAIC0xNTAxLDkgKzE1MTgsOSBAQAogCiB2b2lkIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkNsb3NlRmlsZVN0cmVhbXMoKQogewotICBkZWxldGUgdGhpcy0+QnVpbGRGaWxlU3RyZWFtOwotICBkZWxldGUgdGhpcy0+SW5mb0ZpbGVTdHJlYW07Ci0gIGRlbGV0ZSB0aGlzLT5GbGFnRmlsZVN0cmVhbTsKKyAgdGhpcy0+QnVpbGRGaWxlU3RyZWFtLnJlc2V0KCk7CisgIHRoaXMtPkluZm9GaWxlU3RyZWFtLnJlc2V0KCk7CisgIHRoaXMtPkZsYWdGaWxlU3RyZWFtLnJlc2V0KCk7CiB9CiAKIHZvaWQgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6Q3JlYXRlTGlua1NjcmlwdCgKQEAgLTE2MTIsNyArMTYyOSw4IEBACiAgIHJldHVybiByZXNwb25zZUZpbGVOYW1lOwogfQogCi1jbUxpbmtMaW5lQ29tcHV0ZXIqIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCitzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPgorY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgc3RhdGVEaXIpCiB7CiAgIGlmICh0aGlzLT5NYWtlZmlsZS0+SXNPbigiTVNWQzYwIikpIHsKQEAgLTE2MzAsNyArMTY0OCw3IEBACiAgIHN0ZDo6c3RyaW5nIGZyYW1ld29ya1BhdGg7CiAgIHN0ZDo6c3RyaW5nIGxpbmtQYXRoOwogICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIHBjbGkgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5PdXRwdXRMaW5rTGlicmFyaWVzKHBjbGksIGxpbmtMaW5lQ29tcHV0ZXIsIGxpbmtMaWJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtQYXRoLCBsaW5rUGF0aCk7CiAgIGxpbmtMaWJzID0gZnJhbWV3b3JrUGF0aCArIGxpbmtQYXRoICsgbGlua0xpYnM7CkBAIC0xNjM4LDkgKzE2NTYsMTAgQEAKICAgaWYgKHVzZVJlc3BvbnNlRmlsZSAmJgogICAgICAgbGlua0xpYnMuZmluZF9maXJzdF9ub3Rfb2YoJyAnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIC8vIExvb2t1cCB0aGUgcmVzcG9uc2UgZmlsZSByZWZlcmVuY2UgZmxhZy4KLSAgICBzdGQ6OnN0cmluZyByZXNwb25zZUZsYWdWYXIgPSBjbVN0ckNhdCgKLSAgICAgICJDTUFLRV8iLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpLAotICAgICAgIl9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyIpOworICAgIHN0ZDo6c3RyaW5nIHJlc3BvbnNlRmxhZ1ZhciA9CisgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwKKyAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSwKKyAgICAgICAgICAgICAgICJfUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUciKTsKICAgICBjb25zdCBjaGFyKiByZXNwb25zZUZsYWcgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihyZXNwb25zZUZsYWdWYXIpOwogICAgIGlmICghcmVzcG9uc2VGbGFnKSB7CiAgICAgICByZXNwb25zZUZsYWcgPSAiQCI7CkBAIC0xNjc1LDkgKzE2OTQsMTAgQEAKICAgICB0aGlzLT5Xcml0ZU9iamVjdHNTdHJpbmdzKG9iamVjdF9zdHJpbmdzLCByZXNwb25zZUZpbGVMaW1pdCk7CiAKICAgICAvLyBMb29rdXAgdGhlIHJlc3BvbnNlIGZpbGUgcmVmZXJlbmNlIGZsYWcuCi0gICAgc3RkOjpzdHJpbmcgcmVzcG9uc2VGbGFnVmFyID0gY21TdHJDYXQoCi0gICAgICAiQ01BS0VfIiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKSwKLSAgICAgICJfUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUciKTsKKyAgICBzdGQ6OnN0cmluZyByZXNwb25zZUZsYWdWYXIgPQorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsCisgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSksCisgICAgICAgICAgICAgICAiX1JFU1BPTlNFX0ZJTEVfTElOS19GTEFHIik7CiAgICAgY29uc3QgY2hhciogcmVzcG9uc2VGbGFnID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24ocmVzcG9uc2VGbGFnVmFyKTsKICAgICBpZiAoIXJlc3BvbnNlRmxhZykgewogICAgICAgcmVzcG9uc2VGbGFnID0gIkAiOwpAQCAtMTcxNiw3ICsxNzM2LDggQEAKIH0KIAogdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpBZGRJbmNsdWRlRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKQogewogICBzdGQ6OnN0cmluZyByZXNwb25zZVZhciA9CiAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0lOQ0xVREVTIik7CkBAIC0xNzI0LDExICsxNzQ1LDExIEBACiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZywgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICBzdGQ6OnN0cmluZyBpbmNsdWRlRmxhZ3MgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SW5jbHVkZUZsYWdzKAogICAgIGluY2x1ZGVzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsIGZhbHNlLCB1c2VSZXNwb25zZUZpbGUsCi0gICAgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgaWYgKGluY2x1ZGVGbGFncy5lbXB0eSgpKSB7CiAgICAgcmV0dXJuOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuaAppbmRleCA3YjljN2E1Li5lYzZiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTM0LDEwICszNCwxNSBAQAogcHVibGljOgogICAvLyBjb25zdHJ1Y3RvciB0byBzZXQgdGhlIGl2YXJzCiAgIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CisgIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoY29uc3QgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCisgIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3ImIG9wZXJhdG9yPShjb25zdCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yJikgPQorICAgIGRlbGV0ZTsKKwogICAvLyBjb25zdHJ1Y3QgdXNpbmcgdGhpcyBmYWN0b3J5IGNhbGwKLSAgc3RhdGljIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IqIE5ldyhjbUdlbmVyYXRvclRhcmdldCogdGd0KTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yPiBOZXcoCisgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRndCk7CiAKICAgLyogdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgY2xhc3MuIFdyaXRlcyB0aGUgTWFrZWZpbGVzIGFzc29jaWF0ZWQKICAgICAgd2l0aCB0aGlzIHRhcmdldCAqLwpAQCAtNTIsNiArNTcsOCBAQAogCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBHZXRHZW5lcmF0b3JUYXJnZXQoKSB7IHJldHVybiB0aGlzLT5HZW5lcmF0b3JUYXJnZXQ7IH0KIAorICBzdGQ6OnN0cmluZyBHZXRDb25maWdOYW1lKCk7CisKIHByb3RlY3RlZDoKICAgdm9pZCBHZXRUYXJnZXRMaW5rRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLCBjb25zdCBzdGQ6OnN0cmluZyYgbGlua0xhbmd1YWdlKTsKIApAQCAtODEsNyArODgsOCBAQAogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIG9wZXJhdG9yKCkoY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UsIGNvbnN0IGNoYXIqIHBrZ2xvYykgb3ZlcnJpZGU7CisgICAgdm9pZCBvcGVyYXRvcigpKGNtU291cmNlRmlsZSBjb25zdCYgc291cmNlLCBjb25zdCBjaGFyKiBwa2dsb2MsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIG92ZXJyaWRlOwogCiAgIHByaXZhdGU6CiAgICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvciogR2VuZXJhdG9yOwpAQCAtMTM3LDcgKzE0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG1ha2VmaWxlX2NvbW1hbmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBtYWtlZmlsZV9kZXBlbmRzKTsKIAotICBjbUxpbmtMaW5lQ29tcHV0ZXIqIENyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IENyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgc3RhdGVEaXIpOwogCiAgIC8qKiBDcmVhdGUgYSByZXNwb25zZSBmaWxlIHdpdGggdGhlIGdpdmVuIHNldCBvZiBvcHRpb25zLiAgUmV0dXJucwpAQCAtMTYzLDcgKzE3MSw4IEBACiAgIC8qKiBBZGQgY29tbWFuZHMgZm9yIGdlbmVyYXRlIGRlZiBmaWxlcyAqLwogICB2b2lkIEdlbkRlZkZpbGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiByZWFsX2xpbmtfY29tbWFuZHMpOwogCi0gIHZvaWQgQWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpIG92ZXJyaWRlOworICB2b2lkIEFkZEluY2x1ZGVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBvdmVycmlkZTsKIAogICB2aXJ0dWFsIHZvaWQgQ2xvc2VGaWxlU3RyZWFtcygpOwogICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogTG9jYWxHZW5lcmF0b3I7CkBAIC0xOTEsMTEgKzIwMCwxMSBAQAogICBzdGQ6OnN0cmluZyBUYXJnZXRCdWlsZERpcmVjdG9yeUZ1bGw7CiAKICAgLy8gdGhlIHN0cmVhbSBmb3IgdGhlIGJ1aWxkIGZpbGUKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBCdWlsZEZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IEJ1aWxkRmlsZVN0cmVhbTsKIAogICAvLyB0aGUgc3RyZWFtIGZvciB0aGUgZmxhZyBmaWxlCiAgIHN0ZDo6c3RyaW5nIEZsYWdGaWxlTmFtZUZ1bGw7Ci0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogRmxhZ0ZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IEZsYWdGaWxlU3RyZWFtOwogICBjbGFzcyBTdHJpbmdMaXN0IDogcHVibGljIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPgogICB7CiAgIH07CkBAIC0yMDMsNyArMjEyLDcgQEAKIAogICAvLyB0aGUgc3RyZWFtIGZvciB0aGUgaW5mbyBmaWxlCiAgIHN0ZDo6c3RyaW5nIEluZm9GaWxlTmFtZUZ1bGw7Ci0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogSW5mb0ZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IEluZm9GaWxlU3RyZWFtOwogCiAgIC8vIGZpbGVzIHRvIGNsZWFuCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBDbGVhbkZpbGVzOwpAQCAtMjMyLDcgKzI0MSw3IEBACiAgIC8vIG1hY09TIGNvbnRlbnQgaW5mby4KICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IE1hY0NvbnRlbnRGb2xkZXJzOwogICBzdGQ6OnVuaXF1ZV9wdHI8Y21PU1hCdW5kbGVHZW5lcmF0b3I+IE9TWEJ1bmRsZUdlbmVyYXRvcjsKLSAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUqIE1hY09TWENvbnRlbnRHZW5lcmF0b3I7CisgIHN0ZDo6dW5pcXVlX3B0cjxNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZT4gTWFjT1NYQ29udGVudEdlbmVyYXRvcjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlVXRpbGl0eVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggMTYyNWU0Zi4uNmMxOGU0OCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGVVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC0yMiw4ICsyMiw3IEBACiAgIDogY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcih0YXJnZXQpCiB7CiAgIHRoaXMtPkN1c3RvbUNvbW1hbmREcml2ZXIgPSBPblV0aWxpdHk7Ci0gIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9Ci0gICAgY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3IgPSBjbTo6bWFrZV91bmlxdWU8Y21PU1hCdW5kbGVHZW5lcmF0b3I+KHRhcmdldCk7CiAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+U2V0TWFjQ29udGVudEZvbGRlcnMoJnRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFya0FzQWR2YW5jZWRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbU1hcmtBc0FkdmFuY2VkQ29tbWFuZC5jeHgKaW5kZXggY2E0NmUxNC4uNDUwNDNmYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFya0FzQWR2YW5jZWRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21NYXJrQXNBZHZhbmNlZENvbW1hbmQuY3h4CkBAIC00LDggKzQsMTEgQEAKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVBvbGljaWVzLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCkBAIC0yOCwxNCArMzEsNjMgQEAKICAgICB9CiAgICAgaSA9IDE7CiAgIH0KKworICBjbU1ha2VmaWxlJiBtZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOworICBjbVN0YXRlKiBzdGF0ZSA9IG1mLkdldFN0YXRlKCk7CisKICAgZm9yICg7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhcmlhYmxlID0gYXJnc1tpXTsKLSAgICBjbVN0YXRlKiBzdGF0ZSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFN0YXRlKCk7Ci0gICAgaWYgKCFzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHZhcmlhYmxlKSkgewotICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpLT5BZGRDYWNoZUVudHJ5KAotICAgICAgICB2YXJpYWJsZSwgbnVsbHB0ciwgbnVsbHB0ciwgY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEKTsKLSAgICAgIG92ZXJ3cml0ZSA9IHRydWU7CisKKyAgICBib29sIGlzc3VlTWVzc2FnZSA9IGZhbHNlOworICAgIGJvb2wgb2xkQmVoYXZpb3IgPSBmYWxzZTsKKyAgICBib29sIGlnbm9yZVZhcmlhYmxlID0gZmFsc2U7CisgICAgc3dpdGNoIChtZi5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwMikpIHsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKKyAgICAgICAgaWYgKG1mLlBvbGljeU9wdGlvbmFsV2FybmluZ0VuYWJsZWQoIkNNQUtFX1BPTElDWV9XQVJOSU5HX0NNUDAxMDIiKSkgeworICAgICAgICAgIGlmICghc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGlzc3VlTWVzc2FnZSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIENNX0ZBTExUSFJPVUdIOworICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6CisgICAgICAgIG9sZEJlaGF2aW9yID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGNtUG9saWNpZXM6Ok5FVzoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgorICAgICAgICBpZiAoIXN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodmFyaWFibGUpKSB7CisgICAgICAgICAgaWdub3JlVmFyaWFibGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBzaG91bGQgaXNzdWUgYSBtZXNzYWdlIGFib3V0IENNUDAxMDIKKyAgICBpZiAoaXNzdWVNZXNzYWdlKSB7CisgICAgICBzdGQ6OnN0cmluZyBlcnIgPSBjbVN0ckNhdCgKKyAgICAgICAgIlBvbGljeSBDTVAwMTAyIGlzIG5vdCBzZXQ6IFRoZSB2YXJpYWJsZSBuYW1lZCBcIiIsIHZhcmlhYmxlLAorICAgICAgICAiXCIgaXMgbm90IGluIHRoZSBjYWNoZS4gVGhpcyByZXN1bHRzIGluIGFuIGVtcHR5IGNhY2hlIGVudHJ5IHdoaWNoICIKKyAgICAgICAgImlzIG5vIGxvbmdlciBjcmVhdGVkIHdoZW4gcG9saWN5IENNUDAxMDIgaXMgc2V0IHRvIE5FVy4gUnVuIFwiY21ha2UgIgorICAgICAgICAiLS1oZWxwLXBvbGljeSBDTVAwMTAyXCIgZm9yIHBvbGljeSBkZXRhaWxzLiBVc2UgdGhlIGNtYWtlX3BvbGljeSAiCisgICAgICAgICJjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuIik7CisgICAgICBtZi5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLCBlcnIpOworICAgIH0KKworICAgIC8vIElmIGl0J3Mgbm90IGluIHRoZSBjYWNoZSBhbmQgd2UncmUgdXNpbmcgdGhlIG5ldyBiZWhhdmlvciwgbm90aGluZyB0bworICAgIC8vIHNlZSBoZXJlLgorICAgIGlmIChpZ25vcmVWYXJpYWJsZSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgd2Ugd2FudCB0aGUgb2xkIGJlaGF2aW9yIG9mIG1ha2luZyBhIGR1bW15IGNhY2hlIGVudHJ5LgorICAgIGlmIChvbGRCZWhhdmlvcikgeworICAgICAgaWYgKCFzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHZhcmlhYmxlKSkgeworICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCktPkFkZENhY2hlRW50cnkoCisgICAgICAgICAgdmFyaWFibGUsIG51bGxwdHIsIG51bGxwdHIsIGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRCk7CisgICAgICAgIG92ZXJ3cml0ZSA9IHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgbmVlZCBhIGNhY2hlIGVudHJ5IHRvIGRvIHRoaXMuCiAgICAgaWYgKCFzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHZhcmlhYmxlKSkgewogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiIpOwogICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWVzc2FnZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtTWVzc2FnZUNvbW1hbmQuY3h4CmluZGV4IDk2YTYzODYuLmJmODE4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1lc3NhZ2VDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21NZXNzYWdlQ29tbWFuZC5jeHgKQEAgLTMsNiArMywxMSBAQAogI2luY2x1ZGUgImNtTWVzc2FnZUNvbW1hbmQuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCisjaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtMTMsNiArMTgsNTUgQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAorbmFtZXNwYWNlIHsKKworZW51bSBjbGFzcyBDaGVja2luZ1R5cGUKK3sKKyAgVU5ERUZJTkVELAorICBDSEVDS19TVEFSVCwKKyAgQ0hFQ0tfUEFTUywKKyAgQ0hFQ0tfRkFJTAorfTsKKworc3RkOjpzdHJpbmcgSW5kZW50VGV4dChzdGQ6OnN0cmluZyB0ZXh0LCBjbU1ha2VmaWxlJiBtZikKK3sKKyAgYXV0byBpbmRlbnQgPQorICAgIGNtSm9pbihjbUV4cGFuZGVkTGlzdChtZi5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfTUVTU0FHRV9JTkRFTlQiKSksICIiKTsKKworICBjb25zdCBhdXRvIHNob3dDb250ZXh0ID0gbWYuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTaG93TG9nQ29udGV4dCgpIHx8CisgICAgbWYuSXNPbigiQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1ciKTsKKyAgaWYgKHNob3dDb250ZXh0KSB7CisgICAgYXV0byBjb250ZXh0ID0gY21Kb2luKAorICAgICAgY21FeHBhbmRlZExpc3QobWYuR2V0U2FmZURlZmluaXRpb24oIkNNQUtFX01FU1NBR0VfQ09OVEVYVCIpKSwgIi4iKTsKKyAgICBpZiAoIWNvbnRleHQuZW1wdHkoKSkgeworICAgICAgaW5kZW50Lmluc2VydCgwdSwgY21TdHJDYXQoIlsiX3MsIGNvbnRleHQsICJdICJfcykpOworICAgIH0KKyAgfQorCisgIGlmICghaW5kZW50LmVtcHR5KCkpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHRleHQsICJcbiIsICJcbiIgKyBpbmRlbnQpOworICAgIHRleHQuaW5zZXJ0KDB1LCBpbmRlbnQpOworICB9CisgIHJldHVybiB0ZXh0OworfQorCit2b2lkIFJlcG9ydENoZWNrUmVzdWx0KGNtOjpzdHJpbmdfdmlldyB3aGF0LCBzdGQ6OnN0cmluZyByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUmIG1mKQoreworICBpZiAobWYuR2V0Q01ha2VJbnN0YW5jZSgpLT5IYXNDaGVja0luUHJvZ3Jlc3MoKSkgeworICAgIGF1dG8gdGV4dCA9IG1mLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0VG9wQ2hlY2tJblByb2dyZXNzTWVzc2FnZSgpICsgIiAtICIgKworICAgICAgc3RkOjptb3ZlKHJlc3VsdCk7CisgICAgbWYuRGlzcGxheVN0YXR1cyhJbmRlbnRUZXh0KHN0ZDo6bW92ZSh0ZXh0KSwgbWYpLCAtMSk7CisgIH0gZWxzZSB7CisgICAgbWYuR2V0TWVzc2VuZ2VyKCktPkRpc3BsYXlNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLAorICAgICAgY21TdHJDYXQoIklnbm9yZWQgIl9zLCB3aGF0LCAiIHdpdGhvdXQgQ0hFQ0tfU1RBUlQiX3MpLAorICAgICAgbWYuR2V0QmFja3RyYWNlKCkpOworICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiAvLyBjbUxpYnJhcnlDb21tYW5kCiBib29sIGNtTWVzc2FnZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCkBAIC0yMSwxMSArNzUsMTUgQEAKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CisKKyAgYXV0byYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKwogICBhdXRvIGkgPSBhcmdzLmNiZWdpbigpOwogCiAgIGF1dG8gdHlwZSA9IE1lc3NhZ2VUeXBlOjpNRVNTQUdFOwogICBhdXRvIGZhdGFsID0gZmFsc2U7CiAgIGF1dG8gbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19VTkRFRklORUQ7CisgIGF1dG8gY2hlY2tpbmdUeXBlID0gQ2hlY2tpbmdUeXBlOjpVTkRFRklORUQ7CiAgIGlmICgqaSA9PSAiU0VORF9FUlJPUiIpIHsKICAgICB0eXBlID0gTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SOwogICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfRVJST1I7CkBAIC00MCwxOSArOTgsMzAgQEAKICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1dBUk5JTkc7CiAgICAgKytpOwogICB9IGVsc2UgaWYgKCppID09ICJBVVRIT1JfV0FSTklORyIpIHsKLSAgICBpZiAoc3RhdHVzLkdldE1ha2VmaWxlKCkuSXNTZXQoIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKSAmJgotICAgICAgICAhc3RhdHVzLkdldE1ha2VmaWxlKCkuSXNPbigiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX0VSUk9SUyIpKSB7CisgICAgaWYgKG1mLklzU2V0KCJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfRVJST1JTIikgJiYKKyAgICAgICAgIW1mLklzT24oIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKSkgewogICAgICAgZmF0YWwgPSB0cnVlOwogICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlOjpBVVRIT1JfRVJST1I7CiAgICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX0VSUk9SOwotICAgIH0gZWxzZSBpZiAoIXN0YXR1cy5HZXRNYWtlZmlsZSgpLklzT24oCi0gICAgICAgICAgICAgICAgICJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfV0FSTklOR1MiKSkgeworICAgIH0gZWxzZSBpZiAoIW1mLklzT24oIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyIpKSB7CiAgICAgICB0eXBlID0gTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HOwogICAgICAgbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19XQVJOSU5HOwogICAgIH0gZWxzZSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgKytpOworICB9IGVsc2UgaWYgKCppID09ICJDSEVDS19TVEFSVCIpIHsKKyAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1NUQVRVUzsKKyAgICBjaGVja2luZ1R5cGUgPSBDaGVja2luZ1R5cGU6OkNIRUNLX1NUQVJUOworICAgICsraTsKKyAgfSBlbHNlIGlmICgqaSA9PSAiQ0hFQ0tfUEFTUyIpIHsKKyAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1NUQVRVUzsKKyAgICBjaGVja2luZ1R5cGUgPSBDaGVja2luZ1R5cGU6OkNIRUNLX1BBU1M7CisgICAgKytpOworICB9IGVsc2UgaWYgKCppID09ICJDSEVDS19GQUlMIikgeworICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfU1RBVFVTOworICAgIGNoZWNraW5nVHlwZSA9IENoZWNraW5nVHlwZTo6Q0hFQ0tfRkFJTDsKKyAgICArK2k7CiAgIH0gZWxzZSBpZiAoKmkgPT0gIlNUQVRVUyIpIHsKICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1NUQVRVUzsKICAgICArK2k7CkBAIC02NiwxMiArMTM1LDEyIEBACiAgICAgbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19UUkFDRTsKICAgICArK2k7CiAgIH0gZWxzZSBpZiAoKmkgPT0gIkRFUFJFQ0FUSU9OIikgewotICAgIGlmIChzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc09uKCJDTUFLRV9FUlJPUl9ERVBSRUNBVEVEIikpIHsKKyAgICBpZiAobWYuSXNPbigiQ01BS0VfRVJST1JfREVQUkVDQVRFRCIpKSB7CiAgICAgICBmYXRhbCA9IHRydWU7CiAgICAgICB0eXBlID0gTWVzc2FnZVR5cGU6OkRFUFJFQ0FUSU9OX0VSUk9SOwogICAgICAgbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19FUlJPUjsKLSAgICB9IGVsc2UgaWYgKCFzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc1NldCgiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIikgfHwKLSAgICAgICAgICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzT24oIkNNQUtFX1dBUk5fREVQUkVDQVRFRCIpKSB7CisgICAgfSBlbHNlIGlmICghbWYuSXNTZXQoIkNNQUtFX1dBUk5fREVQUkVDQVRFRCIpIHx8CisgICAgICAgICAgICAgICBtZi5Jc09uKCJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKSkgewogICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlOjpERVBSRUNBVElPTl9XQVJOSU5HOwogICAgICAgbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19XQVJOSU5HOwogICAgIH0gZWxzZSB7CkBAIC04OSwxMCArMTU4LDE5IEBACiAgIGFzc2VydCgiTWVzc2FnZSBsb2cgbGV2ZWwgZXhwZWN0ZWQgdG8gYmUgc2V0IiAmJgogICAgICAgICAgbGV2ZWwgIT0gY21ha2U6OkxvZ0xldmVsOjpMT0dfVU5ERUZJTkVEKTsKIAotICBhdXRvIGRlc2lyZWRMZXZlbCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0TG9nTGV2ZWwoKTsKKyAgYXV0byBkZXNpcmVkTGV2ZWwgPSBtZi5HZXRDTWFrZUluc3RhbmNlKCktPkdldExvZ0xldmVsKCk7CiAgIGFzc2VydCgiRXhwZWN0ZWQgYSB2YWxpZCBsb2cgbGV2ZWwgaGVyZSIgJiYKICAgICAgICAgIGRlc2lyZWRMZXZlbCAhPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19VTkRFRklORUQpOwogCisgIC8vIENvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjYWNoZSB2YXJpYWJsZQorICBpZiAoIW1mLkdldENNYWtlSW5zdGFuY2UoKS0+V2FzTG9nTGV2ZWxTZXRWaWFDTEkoKSkgeworICAgIGNvbnN0IGF1dG8gZGVzaXJlZExldmVsRnJvbUNhY2hlID0KKyAgICAgIGNtYWtlOjpTdHJpbmdUb0xvZ0xldmVsKG1mLkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9NRVNTQUdFX0xPR19MRVZFTCIpKTsKKyAgICBpZiAoZGVzaXJlZExldmVsRnJvbUNhY2hlICE9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1VOREVGSU5FRCkgeworICAgICAgZGVzaXJlZExldmVsID0gZGVzaXJlZExldmVsRnJvbUNhY2hlOworICAgIH0KKyAgfQorCiAgIGlmIChkZXNpcmVkTGV2ZWwgPCBsZXZlbCkgewogICAgIC8vIFN1cHByZXNzIHRoZSBtZXNzYWdlCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDAsMzcgKzE3OCw0MiBAQAogCiAgIGF1dG8gbWVzc2FnZSA9IGNtSm9pbihjbU1ha2VSYW5nZShpLCBhcmdzLmNlbmQoKSksICIiKTsKIAotICBpZiAoY21ha2U6OkxvZ0xldmVsOjpMT0dfTk9USUNFIDw9IGxldmVsKSB7Ci0gICAgLy8gQ2hlY2sgaWYgYW55IGluZGVudGF0aW9uIGhhcyByZXF1ZXN0ZWQ6Ci0gICAgLy8gYENNQUtFX01FU1NBR0VfSU5ERU5UYCBpcyBhIGxpc3Qgb2YgInBhZGRpbmciIHBpZWNlcwotICAgIC8vIHRvIGJlIGpvaW5lZCBhbmQgcHJlcGVuZGVkIHRvIHRoZSBtZXNzYWdlIGxpbmVzLgotICAgIGF1dG8gaW5kZW50ID0gY21Kb2luKGNtRXhwYW5kZWRMaXN0KHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFNhZmVEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNNQUtFX01FU1NBR0VfSU5ERU5UIikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAgICAvLyBNYWtlIGV2ZXJ5IGxpbmUgb2YgdGhlIGBtZXNzYWdlYCBpbmRlbnRlZAotICAgIC8vIE5PVEUgQ2FuJ3QgcmV1c2UgYGNtRG9jdW1lbnRhdGlvbkZvcm1hdHRlcjo6UHJpbnRQcmVmb3JtYXR0ZWRgCi0gICAgLy8gaGVyZSBjdXogaXQgYXBwZW5kcyBgXG5gIHRvIHRoZSBFT00gOy0oCi0gICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhtZXNzYWdlLCAiXG4iLCAiXG4iICsgaW5kZW50KTsKLSAgICBtZXNzYWdlID0gaW5kZW50ICsgbWVzc2FnZTsKLSAgfQotCiAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIGNtYWtlOjpMb2dMZXZlbDo6TE9HX0VSUk9SOgogICAgIGNhc2UgY21ha2U6OkxvZ0xldmVsOjpMT0dfV0FSTklORzoKICAgICAgIC8vIHdlJ3ZlIG92ZXJyaWRkZW4gdGhlIG1lc3NhZ2UgdHlwZSwgYWJvdmUsIHNvIGRpc3BsYXkgaXQgZGlyZWN0bHkKLSAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldE1lc3NlbmdlcigpLT5EaXNwbGF5TWVzc2FnZSgKLSAgICAgICAgdHlwZSwgbWVzc2FnZSwgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0QmFja3RyYWNlKCkpOworICAgICAgbWYuR2V0TWVzc2VuZ2VyKCktPkRpc3BsYXlNZXNzYWdlKHR5cGUsIG1lc3NhZ2UsIG1mLkdldEJhY2t0cmFjZSgpKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19OT1RJQ0U6Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgY21TeXN0ZW1Ub29sczo6TWVzc2FnZShJbmRlbnRUZXh0KG1lc3NhZ2UsIG1mKSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgY21ha2U6OkxvZ0xldmVsOjpMT0dfU1RBVFVTOgorICAgICAgc3dpdGNoIChjaGVja2luZ1R5cGUpIHsKKyAgICAgICAgY2FzZSBDaGVja2luZ1R5cGU6OkNIRUNLX1NUQVJUOgorICAgICAgICAgIG1mLkRpc3BsYXlTdGF0dXMoSW5kZW50VGV4dChtZXNzYWdlLCBtZiksIC0xKTsKKyAgICAgICAgICBtZi5HZXRDTWFrZUluc3RhbmNlKCktPlB1c2hDaGVja0luUHJvZ3Jlc3NNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hlY2tpbmdUeXBlOjpDSEVDS19QQVNTOgorICAgICAgICAgIFJlcG9ydENoZWNrUmVzdWx0KCJDSEVDS19QQVNTIl9zLCBtZXNzYWdlLCBtZik7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGVja2luZ1R5cGU6OkNIRUNLX0ZBSUw6CisgICAgICAgICAgUmVwb3J0Q2hlY2tSZXN1bHQoIkNIRUNLX0ZBSUwiX3MsIG1lc3NhZ2UsIG1mKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIG1mLkRpc3BsYXlTdGF0dXMoSW5kZW50VGV4dChtZXNzYWdlLCBtZiksIC0xKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19WRVJCT1NFOgogICAgIGNhc2UgY21ha2U6OkxvZ0xldmVsOjpMT0dfREVCVUc6CiAgICAgY2FzZSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19UUkFDRToKLSAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkRpc3BsYXlTdGF0dXMobWVzc2FnZSwgLTEpOworICAgICAgbWYuRGlzcGxheVN0YXR1cyhJbmRlbnRUZXh0KG1lc3NhZ2UsIG1mKSwgLTEpOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IGE0NThjYWMuLjljNGZmODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTExLDggKzExLDggQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3ZlY3Rvcj4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgpAQCAtNDEsMzMgKzQxLDI1IEBACiBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yKAogICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogICA6IGNtTmluamFUYXJnZXRHZW5lcmF0b3IodGFyZ2V0KQotICAsIFRhcmdldExpbmtMYW5ndWFnZSgiIikKIHsKLSAgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlID0gdGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwotICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7Ci0gICAgdGhpcy0+VGFyZ2V0TmFtZXMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0RXhlY3V0YWJsZU5hbWVzKAotICAgICAgR2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q29uZmlnTmFtZSgpKTsKLSAgfSBlbHNlIHsKLSAgICB0aGlzLT5UYXJnZXROYW1lcyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRMaWJyYXJ5TmFtZXMoCi0gICAgICBHZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDb25maWdOYW1lKCkpOwotICB9Ci0KICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICAvLyBvbiBXaW5kb3dzIHRoZSBvdXRwdXQgZGlyIGlzIGFscmVhZHkgbmVlZGVkIGF0IGNvbXBpbGUgdGltZQogICAgIC8vIGVuc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cyAoT3V0RGlyIHRlc3QpCi0gICAgRW5zdXJlRGlyZWN0b3J5RXhpc3RzKHRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+R2V0Q29uZmlnTmFtZXMoKSkgeworICAgICAgRW5zdXJlRGlyZWN0b3J5RXhpc3RzKHRhcmdldC0+R2V0RGlyZWN0b3J5KGNvbmZpZykpOworICAgIH0KICAgfQogCi0gIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9Ci0gICAgY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9IGNtOjptYWtlX3VuaXF1ZTxjbU9TWEJ1bmRsZUdlbmVyYXRvcj4odGFyZ2V0KTsKICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5TZXRNYWNDb250ZW50Rm9sZGVycygmdGhpcy0+TWFjQ29udGVudEZvbGRlcnMpOwogfQogCiBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjp+Y21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAotdm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpHZW5lcmF0ZSgpCit2b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OkdlbmVyYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UuZW1wdHkoKSkgeworICBzdGQ6OnN0cmluZyBsYW5nID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcpOworICBpZiAodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZykuZW1wdHkoKSkgewogICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDTWFrZSBjYW4gbm90IGRldGVybWluZSBsaW5rZXIgbGFuZ3VhZ2UgZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpKTsKQEAgLTc1LDI1ICs2Nyw0OCBAQAogICB9CiAKICAgLy8gV3JpdGUgdGhlIHJ1bGVzIGZvciBlYWNoIGxhbmd1YWdlLgotICB0aGlzLT5Xcml0ZUxhbmd1YWdlc1J1bGVzKCk7CisgIHRoaXMtPldyaXRlTGFuZ3VhZ2VzUnVsZXMoY29uZmlnKTsKIAogICAvLyBXcml0ZSB0aGUgYnVpbGQgc3RhdGVtZW50cwotICB0aGlzLT5Xcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50cygpOworICBib29sIGZpcnN0Rm9yQ29uZmlnID0gdHJ1ZTsKKyAgZm9yIChhdXRvIGNvbnN0JiBmaWxlQ29uZmlnIDogdGhpcy0+R2V0Q29uZmlnTmFtZXMoKSkgeworICAgIGlmICghdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCkKKyAgICAgICAgICAgLT5HZXRDcm9zc0NvbmZpZ3MoZmlsZUNvbmZpZykKKyAgICAgICAgICAgLmNvdW50KGNvbmZpZykpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB0aGlzLT5Xcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50cyhjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKKyAgICBmaXJzdEZvckNvbmZpZyA9IGZhbHNlOworICB9CiAKICAgaWYgKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgewotICAgIHRoaXMtPldyaXRlT2JqZWN0TGliU3RhdGVtZW50KCk7CisgICAgdGhpcy0+V3JpdGVPYmplY3RMaWJTdGF0ZW1lbnQoY29uZmlnKTsKICAgfSBlbHNlIHsKLSAgICAvLyBJZiB0aGlzIHRhcmdldCBoYXMgY3VkYSBsYW5ndWFnZSBsaW5rIGlucHV0cywgYW5kIHdlIG5lZWQgdG8gZG8KLSAgICAvLyBkZXZpY2UgbGlua2luZwotICAgIHRoaXMtPldyaXRlRGV2aWNlTGlua1N0YXRlbWVudCgpOwotICAgIHRoaXMtPldyaXRlTGlua1N0YXRlbWVudCgpOworICAgIGZpcnN0Rm9yQ29uZmlnID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGVDb25maWcgOiB0aGlzLT5HZXRDb25maWdOYW1lcygpKSB7CisgICAgICBpZiAoIXRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpCisgICAgICAgICAgICAgLT5HZXRDcm9zc0NvbmZpZ3MoZmlsZUNvbmZpZykKKyAgICAgICAgICAgICAuY291bnQoY29uZmlnKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIC8vIElmIHRoaXMgdGFyZ2V0IGhhcyBjdWRhIGxhbmd1YWdlIGxpbmsgaW5wdXRzLCBhbmQgd2UgbmVlZCB0byBkbworICAgICAgLy8gZGV2aWNlIGxpbmtpbmcKKyAgICAgIHRoaXMtPldyaXRlRGV2aWNlTGlua1N0YXRlbWVudChjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKKyAgICAgIHRoaXMtPldyaXRlTGlua1N0YXRlbWVudChjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKKyAgICAgIGZpcnN0Rm9yQ29uZmlnID0gZmFsc2U7CisgICAgfQorICB9CisgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RW5hYmxlQ3Jvc3NDb25maWdCdWlsZCgpKSB7CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFRhcmdldEFsaWFzKAorICAgICAgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwgImFsbCIpOwogICB9CiAKICAgLy8gRmluZCBBRERJVElPTkFMX0NMRUFOX0ZJTEVTCi0gIHRoaXMtPkFkZGl0aW9uYWxDbGVhbkZpbGVzKCk7CisgIHRoaXMtPkFkZGl0aW9uYWxDbGVhbkZpbGVzKGNvbmZpZyk7CiB9CiAKLXZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVMYW5ndWFnZXNSdWxlcygpCit2b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OldyaXRlTGFuZ3VhZ2VzUnVsZXMoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAjaWZkZWYgTklOSkFfR0VOX1ZFUkJPU0VfRklMRVMKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKHRoaXMtPkdldFJ1bGVzRmlsZVN0cmVhbSgpKTsKQEAgLTEwNiw4ICsxMjEsNyBAQAogICAvLyBXcml0ZSBydWxlcyBmb3IgbGFuZ3VhZ2VzIGNvbXBpbGVkIGluIHRoaXMgdGFyZ2V0LgogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBzb3VyY2VGaWxlczsKLSAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE9iamVjdFNvdXJjZXMoCi0gICAgc291cmNlRmlsZXMsIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIikpOworICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0T2JqZWN0U291cmNlcyhzb3VyY2VGaWxlcywgY29uZmlnKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogc291cmNlRmlsZXMpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCBsYW5nID0gc2YtPkdldExhbmd1YWdlKCk7CiAgICAgaWYgKCFsYW5nLmVtcHR5KCkpIHsKQEAgLTExNSw3ICsxMjksNyBAQAogICAgIH0KICAgfQogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSA6IGxhbmd1YWdlcykgewotICAgIHRoaXMtPldyaXRlTGFuZ3VhZ2VSdWxlcyhsYW5ndWFnZSk7CisgICAgdGhpcy0+V3JpdGVMYW5ndWFnZVJ1bGVzKGxhbmd1YWdlLCBjb25maWcpOwogICB9CiB9CiAKQEAgLTEzOSwyMiArMTUzLDI4IEBACiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VMaW5rZXJSdWxlKCkgY29uc3QKK3N0ZDo6c3RyaW5nIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6Okxhbmd1YWdlTGlua2VyUnVsZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSArICJfIiArCi0gICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkgKwotICAgICJfTElOS0VSX18iICsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiXyIsCisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSksCisgICAgIl9MSU5LRVJfXyIsCiAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUoCi0gICAgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXROYW1lKCkpOworICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKSksCisgICAgIl8iLCBjb25maWcpOwogfQogCi1zdGQ6OnN0cmluZyBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZUxpbmtlckRldmljZVJ1bGUoKSBjb25zdAorc3RkOjpzdHJpbmcgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewotICByZXR1cm4gdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlICsgIl8iICsKLSAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0VHlwZSgpKSArCi0gICAgIl9ERVZJQ0VfTElOS0VSX18iICsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiXyIsCisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSksCisgICAgIl9ERVZJQ0VfTElOS0VSX18iLAogICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKAotICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpKTsKKyAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXROYW1lKCkpLAorICAgICJfIiwgY29uZmlnKTsKIH0KIAogc3RydWN0IGNtTmluamFSZW1vdmVOb09wQ29tbWFuZHMKQEAgLTE2NSwxNCArMTg1LDE2IEBACiAgIH0KIH07CiAKLXZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEZXZpY2VMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSkKK3ZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEZXZpY2VMaW5rUnVsZSgKKyAgYm9vbCB1c2VSZXNwb25zZUZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGNtTmluamFSdWxlIHJ1bGUodGhpcy0+TGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKCkpOworICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZShjb25maWcpKTsKICAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SGFzUnVsZShydWxlLk5hbWUpKSB7CiAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKS5jX3N0cigpOwogICAgIHZhcnMuQ01UYXJnZXRUeXBlID0KLSAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCkpOworICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkKKyAgICAgICAgLmNfc3RyKCk7CiAKICAgICB2YXJzLkxhbmd1YWdlID0gIkNVREEiOwogCkBAIC0yMzYsMzUgKzI1OCw0MCBAQAogICAgIH0KIAogICAgIC8vIElmIHRoZXJlIGlzIG5vIHJhbmxpYiB0aGUgY29tbWFuZCB3aWxsIGJlICI6Ii4gIFNraXAgaXQuCi0gICAgY21FcmFzZUlmKGxpbmtDbWRzLCBjbU5pbmphUmVtb3ZlTm9PcENvbW1hbmRzKCkpOworICAgIGNtOjplcmFzZV9pZihsaW5rQ21kcywgY21OaW5qYVJlbW92ZU5vT3BDb21tYW5kcygpKTsKIAogICAgIHJ1bGUuQ29tbWFuZCA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkJ1aWxkQ29tbWFuZExpbmUobGlua0NtZHMpOwogCiAgICAgLy8gV3JpdGUgdGhlIGxpbmtlciBydWxlIHdpdGggcmVzcG9uc2UgZmlsZSBpZiBuZWVkZWQuCi0gICAgcnVsZS5Db21tZW50ID0gY21TdHJDYXQoIlJ1bGUgZm9yIGxpbmtpbmcgIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCAnICcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0VmlzaWJsZVR5cGVOYW1lKCksICcuJyk7Ci0gICAgcnVsZS5EZXNjcmlwdGlvbiA9IGNtU3RyQ2F0KCJMaW5raW5nICIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgJyAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRWaXNpYmxlVHlwZU5hbWUoKSwgIiAkVEFSR0VUX0ZJTEUiKTsKKyAgICBydWxlLkNvbW1lbnQgPQorICAgICAgY21TdHJDYXQoIlJ1bGUgZm9yIGxpbmtpbmcgIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksICcgJywKKyAgICAgICAgICAgICAgIHRoaXMtPkdldFZpc2libGVUeXBlTmFtZSgpLCAnLicpOworICAgIHJ1bGUuRGVzY3JpcHRpb24gPQorICAgICAgY21TdHJDYXQoIkxpbmtpbmcgIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksICcgJywKKyAgICAgICAgICAgICAgIHRoaXMtPkdldFZpc2libGVUeXBlTmFtZSgpLCAiICRUQVJHRVRfRklMRSIpOwogICAgIHJ1bGUuUmVzdGF0ID0gIiRSRVNUQVQiOwogCiAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocnVsZSk7CiAgIH0KIH0KIAotdm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUxpbmtSdWxlKGJvb2wgdXNlUmVzcG9uc2VGaWxlKQordm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUxpbmtSdWxlKGJvb2wgdXNlUmVzcG9uc2VGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKTsKIAotICBzdGQ6OnN0cmluZyBsaW5rUnVsZU5hbWUgPSB0aGlzLT5MYW5ndWFnZUxpbmtlclJ1bGUoKTsKKyAgc3RkOjpzdHJpbmcgbGlua1J1bGVOYW1lID0gdGhpcy0+TGFuZ3VhZ2VMaW5rZXJSdWxlKGNvbmZpZyk7CiAgIGlmICghdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkhhc1J1bGUobGlua1J1bGVOYW1lKSkgewogICAgIGNtTmluamFSdWxlIHJ1bGUoc3RkOjptb3ZlKGxpbmtSdWxlTmFtZSkpOwogICAgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXI6OlJ1bGVWYXJpYWJsZXMgdmFyczsKICAgICB2YXJzLkNNVGFyZ2V0TmFtZSA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXROYW1lKCkuY19zdHIoKTsKLSAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldFR5cGUpOworICAgIHZhcnMuQ01UYXJnZXRUeXBlID0gY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0VHlwZSkuY19zdHIoKTsKIAotICAgIHZhcnMuTGFuZ3VhZ2UgPSB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UuY19zdHIoKTsKKyAgICBzdGQ6OnN0cmluZyBsYW5nID0gdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyk7CisgICAgdmFycy5MYW5ndWFnZSA9IGNvbmZpZy5jX3N0cigpOworICAgIHZhcnMuQUlYRXhwb3J0cyA9ICIkQUlYX0VYUE9SVFMiOwogCi0gICAgaWYgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSA9PSAiU3dpZnQiKSB7CisgICAgaWYgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpID09ICJTd2lmdCIpIHsKICAgICAgIHZhcnMuU3dpZnRMaWJyYXJ5TmFtZSA9ICIkU1dJRlRfTElCUkFSWV9OQU1FIjsKICAgICAgIHZhcnMuU3dpZnRNb2R1bGUgPSAiJFNXSUZUX01PRFVMRSI7CiAgICAgICB2YXJzLlN3aWZ0TW9kdWxlTmFtZSA9ICIkU1dJRlRfTU9EVUxFX05BTUUiOwpAQCAtMjc4LDcgKzMwNSw4IEBACiAKICAgICBzdGQ6OnN0cmluZyByZXNwb25zZUZsYWc7CiAKLSAgICBzdGQ6OnN0cmluZyBjbWFrZVZhckxhbmcgPSBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKTsKKyAgICBzdGQ6OnN0cmluZyBjbWFrZVZhckxhbmcgPQorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpKTsKIAogICAgIC8vIGJ1aWxkIHJlc3BvbnNlIGZpbGUgbmFtZQogICAgIHN0ZDo6c3RyaW5nIGNtYWtlTGlua1ZhciA9IGNtYWtlVmFyTGFuZyArICJfUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUciOwpAQCAtMzA0LDcgKzMzMiw3IEBACiAgICAgICAgIHJ1bGUuUnNwQ29udGVudCA9ICIkaW5fbmV3bGluZSI7CiAgICAgICB9CiAgICAgICBydWxlLlJzcENvbnRlbnQgKz0gIiAkTElOS19QQVRIICRMSU5LX0xJQlJBUklFUyI7Ci0gICAgICBpZiAodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlID09ICJTd2lmdCIpIHsKKyAgICAgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiU3dpZnQiKSB7CiAgICAgICAgIHZhcnMuU3dpZnRTb3VyY2VzID0gcmVzcG9uc2VGbGFnLmNfc3RyKCk7CiAgICAgICB9IGVsc2UgewogICAgICAgICB2YXJzLk9iamVjdHMgPSByZXNwb25zZUZsYWcuY19zdHIoKTsKQEAgLTM1OSw3ICszODcsNyBAQAogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q3JlYXRlUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIoKSk7CiAKICAgICAvLyBSdWxlIGZvciBsaW5raW5nIGxpYnJhcnkvZXhlY3V0YWJsZS4KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua0NtZHMgPSB0aGlzLT5Db21wdXRlTGlua0NtZCgpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rQ21kcyA9IHRoaXMtPkNvbXB1dGVMaW5rQ21kKGNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyYgbGlua0NtZCA6IGxpbmtDbWRzKSB7CiAgICAgICBsaW5rQ21kID0gY21TdHJDYXQobGF1bmNoZXIsIGxpbmtDbWQpOwogICAgICAgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXItPkV4cGFuZFJ1bGVWYXJpYWJsZXModGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwKQEAgLTM2NywyMiArMzk1LDI1IEBACiAgICAgfQogCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcmFubGliIHRoZSBjb21tYW5kIHdpbGwgYmUgIjoiLiAgU2tpcCBpdC4KLSAgICBjbUVyYXNlSWYobGlua0NtZHMsIGNtTmluamFSZW1vdmVOb09wQ29tbWFuZHMoKSk7CisgICAgY206OmVyYXNlX2lmKGxpbmtDbWRzLCBjbU5pbmphUmVtb3ZlTm9PcENvbW1hbmRzKCkpOwogCiAgICAgbGlua0NtZHMuaW5zZXJ0KGxpbmtDbWRzLmJlZ2luKCksICIkUFJFX0xJTksiKTsKICAgICBsaW5rQ21kcy5lbXBsYWNlX2JhY2soIiRQT1NUX0JVSUxEIik7CiAgICAgcnVsZS5Db21tYW5kID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+QnVpbGRDb21tYW5kTGluZShsaW5rQ21kcyk7CiAKICAgICAvLyBXcml0ZSB0aGUgbGlua2VyIHJ1bGUgd2l0aCByZXNwb25zZSBmaWxlIGlmIG5lZWRlZC4KLSAgICBydWxlLkNvbW1lbnQgPSBjbVN0ckNhdCgiUnVsZSBmb3IgbGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsICcgJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRWaXNpYmxlVHlwZU5hbWUoKSwgJy4nKTsKLSAgICBydWxlLkRlc2NyaXB0aW9uID0gY21TdHJDYXQoIkxpbmtpbmcgIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCAnICcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFZpc2libGVUeXBlTmFtZSgpLCAiICRUQVJHRVRfRklMRSIpOworICAgIHJ1bGUuQ29tbWVudCA9CisgICAgICBjbVN0ckNhdCgiUnVsZSBmb3IgbGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgJyAnLAorICAgICAgICAgICAgICAgdGhpcy0+R2V0VmlzaWJsZVR5cGVOYW1lKCksICcuJyk7CisgICAgcnVsZS5EZXNjcmlwdGlvbiA9CisgICAgICBjbVN0ckNhdCgiTGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgJyAnLAorICAgICAgICAgICAgICAgdGhpcy0+R2V0VmlzaWJsZVR5cGVOYW1lKCksICIgJFRBUkdFVF9GSUxFIik7CiAgICAgcnVsZS5SZXN0YXQgPSAiJFJFU1RBVCI7CiAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocnVsZSk7CiAgIH0KIAotICBpZiAodGhpcy0+VGFyZ2V0TmFtZXMuT3V0cHV0ICE9IHRoaXMtPlRhcmdldE5hbWVzLlJlYWwgJiYKKyAgYXV0byBjb25zdCB0Z3ROYW1lcyA9IHRoaXMtPlRhcmdldE5hbWVzKGNvbmZpZyk7CisgIGlmICh0Z3ROYW1lcy5PdXRwdXQgIT0gdGd0TmFtZXMuUmVhbCAmJgogICAgICAgIXRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5Jc0ZyYW1ld29ya09uQXBwbGUoKSkgewogICAgIHN0ZDo6c3RyaW5nIGNtYWtlQ29tbWFuZCA9CiAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCkBAIC00NDEsNyArNDcyLDggQEAKICAgcmV0dXJuIGxpbmtDbWRzOwogfQogCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6Q29tcHV0ZUxpbmtDbWQoKQorc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVMaW5rQ21kKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua0NtZHM7CiAgIGNtTWFrZWZpbGUqIG1mID0gdGhpcy0+R2V0TWFrZWZpbGUoKTsKQEAgLTQ1MCwxNCArNDgyLDE0IEBACiAgICAgLy8gdGhpcyBvY2N1cnMgd2hlbiB0aGluZ3MgbGlrZSBJUE8gaXMgZW5hYmxlZCwgYW5kIHdlIG5lZWQgdG8gdXNlIHRoZQogICAgIC8vIENNQUtFXzxsYW5nPl9DUkVBVEVfU1RBVElDX0xJQlJBUllfSVBPIGRlZmluZSBpbnN0ZWFkLgogICAgIHN0ZDo6c3RyaW5nIGxpbmtDbWRWYXIgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0Q3JlYXRlUnVsZVZhcmlhYmxlKAotICAgICAgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgICAgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksIGNvbmZpZyk7CiAgICAgY29uc3QgY2hhciogbGlua0NtZCA9IG1mLT5HZXREZWZpbml0aW9uKGxpbmtDbWRWYXIpOwogICAgIGlmIChsaW5rQ21kKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5rQ21kU3RyID0gbGlua0NtZDsKLSAgICAgIGlmICh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+SGFzSW1wbGliR05VdG9NUyh0aGlzLT5Db25maWdOYW1lKSkgewotICAgICAgICBzdGQ6OnN0cmluZyBydWxlVmFyID0gY21TdHJDYXQoCi0gICAgICAgICAgIkNNQUtFXyIsIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+Q29uZmlnTmFtZSksCi0gICAgICAgICAgIl9HTlV0b01TX1JVTEUiKTsKKyAgICAgIGlmICh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+SGFzSW1wbGliR05VdG9NUyhjb25maWcpKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHJ1bGVWYXIgPQorICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKGNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgIl9HTlV0b01TX1JVTEUiKTsKICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIHJ1bGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihydWxlVmFyKSkgewogICAgICAgICAgIGxpbmtDbWRTdHIgKz0gcnVsZTsKICAgICAgICAgfQpAQCAtNDY5LDkgKzUwMSw4IEBACiAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY21Mb2NhbEdlbmVyYXRvcjo6U0hFTEwpLAogICAgICAgICAgICIgLUUgX19ydW5fY29fY29tcGlsZSAtLWx3eXU9Iik7CiAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0JiBndCA9ICp0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKTsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY2ZnTmFtZSA9IHRoaXMtPkdldENvbmZpZ05hbWUoKTsKICAgICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0UmVhbCA9IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCgKLSAgICAgICAgICBndC5HZXRGdWxsUGF0aChjZmdOYW1lLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCwKKyAgICAgICAgICBndC5HZXRGdWxsUGF0aChjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qcmVhbG5hbWU9Ki90cnVlKSk7CiAgICAgICAgIGNtYWtlQ29tbWFuZCArPSB0YXJnZXRPdXRwdXRSZWFsOwogICAgICAgICBsaW5rQ21kcy5wdXNoX2JhY2soc3RkOjptb3ZlKGNtYWtlQ29tbWFuZCkpOwpAQCAtNDg2LDI1ICs1MTcsMjUgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgY21ha2VDb21tYW5kID0KICAgICAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCiAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKLSAgICAgICAgbGlua0NtZHMucHVzaF9iYWNrKGNtYWtlQ29tbWFuZCArICIgLUUgcmVtb3ZlICRUQVJHRVRfRklMRSIpOworICAgICAgICBsaW5rQ21kcy5wdXNoX2JhY2soY21ha2VDb21tYW5kICsgIiAtRSBybSAtZiAkVEFSR0VUX0ZJTEUiKTsKICAgICAgIH0KICAgICAgIC8vIFRPRE86IFVzZSBBUkNISVZFX0FQUEVORCBmb3IgYXJjaGl2ZXMgb3ZlciBhIGNlcnRhaW4gc2l6ZS4KICAgICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgbGlua0NtZFZhciA9Ci0gICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgIl9BUkNISVZFX0NSRUFURSIpOworICAgICAgICBzdGQ6OnN0cmluZyBsaW5rQ21kVmFyID0gY21TdHJDYXQoCisgICAgICAgICAgIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiX0FSQ0hJVkVfQ1JFQVRFIik7CiAKICAgICAgICAgbGlua0NtZFZhciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RmVhdHVyZVNwZWNpZmljTGlua1J1bGVWYXJpYWJsZSgKLSAgICAgICAgICBsaW5rQ21kVmFyLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICAgICAgbGlua0NtZFZhciwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksIGNvbmZpZyk7CiAKICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpbmtDbWQgPSBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKGxpbmtDbWRWYXIpOwogICAgICAgICBjbUV4cGFuZExpc3QobGlua0NtZCwgbGlua0NtZHMpOwogICAgICAgfQogICAgICAgewotICAgICAgICBzdGQ6OnN0cmluZyBsaW5rQ21kVmFyID0KLSAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCAiX0FSQ0hJVkVfRklOSVNIIik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtDbWRWYXIgPSBjbVN0ckNhdCgKKyAgICAgICAgICAiQ01BS0VfIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksICJfQVJDSElWRV9GSU5JU0giKTsKIAogICAgICAgICBsaW5rQ21kVmFyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAotICAgICAgICAgIGxpbmtDbWRWYXIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICAgICAgICBsaW5rQ21kVmFyLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgY29uZmlnKTsKIAogICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGlua0NtZCA9IG1mLT5HZXRSZXF1aXJlZERlZmluaXRpb24obGlua0NtZFZhcik7CiAgICAgICAgIGNtRXhwYW5kTGlzdChsaW5rQ21kLCBsaW5rQ21kcyk7CkBAIC01MjMsMTkgKzU1NCwyOCBAQAogICAgICAgICBsaW5rQ21kcy5wdXNoX2JhY2soY21ha2VDb21tYW5kICsgIiAtRSB0b3VjaCAkVEFSR0VUX0ZJTEUiKTsKICAgICAgIH0KICNlbmRpZgotICAgICAgcmV0dXJuIGxpbmtDbWRzOwotICAgIH0KKyAgICB9IGJyZWFrOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6CisgICAgICBicmVhazsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKKyAgICAgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiU3dpZnQiKSB7CisgICAgICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPklzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkpIHsKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmbGFncyA9CisgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0VYRV9FWFBPUlRTX1N3aWZ0X0ZMQUciKTsKKyAgICAgICAgICBjbUV4cGFuZExpc3QoZmxhZ3MsIGxpbmtDbWRzKTsKKyAgICAgICAgfQorICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgIGFzc2VydChmYWxzZSAmJiAiVW5leHBlY3RlZCB0YXJnZXQgdHlwZSIpOwogICB9Ci0gIHJldHVybiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKTsKKyAgcmV0dXJuIGxpbmtDbWRzOwogfQogCi12b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OldyaXRlRGV2aWNlTGlua1N0YXRlbWVudCgpCit2b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OldyaXRlRGV2aWNlTGlua1N0YXRlbWVudCgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsCisgIGJvb2wgZmlyc3RGb3JDb25maWcpCiB7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIGdsb2JhbEdlbiA9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpOwogICBpZiAoIWdsb2JhbEdlbi0+R2V0TGFuZ3VhZ2VFbmFibGVkKCJDVURBIikpIHsKQEAgLTU0NSw3ICs1ODUsNyBAQAogICBjbUdlbmVyYXRvclRhcmdldCogZ2VuVGFyZ2V0ID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCk7CiAKICAgYm9vbCByZXF1aXJlc0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKLSAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZyk7CiAgIGlmICghcmVxdWlyZXNEZXZpY2VMaW5raW5nKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC01NTgsMjQgKzU5OCw1MyBAQAogICBzdGQ6OnN0cmluZyBjb25zdCYgb2JqRXh0ID0KICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0NVREFfT1VUUFVUX0VYVEVOU0lPTiIpOwogCi0gIHN0ZDo6c3RyaW5nIGNvbnN0IGNmZ05hbWUgPSB0aGlzLT5HZXRDb25maWdOYW1lKCk7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldE91dHB1dFJlYWwgPSBDb252ZXJ0VG9OaW5qYVBhdGgoCi0gICAgZ2VuVGFyZ2V0LT5PYmplY3REaXJlY3RvcnkgKyAiY21ha2VfZGV2aWNlX2xpbmsiICsgb2JqRXh0KTsKKyAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0RGlyID0KKyAgICBjbVN0ckNhdCh0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRUYXJnZXREaXJlY3RvcnkoZ2VuVGFyZ2V0KSwKKyAgICAgICAgICAgICBnbG9iYWxHZW4tPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpLCAiLyIpOworICB0YXJnZXRPdXRwdXREaXIgPSBnbG9iYWxHZW4tPkV4cGFuZENGR0ludERpcih0YXJnZXRPdXRwdXREaXIsIGNvbmZpZyk7CiAKLSAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0T3V0cHV0SW1wbGliID0gQ29udmVydFRvTmluamFQYXRoKAotICAgIGdlblRhcmdldC0+R2V0RnVsbFBhdGgoY2ZnTmFtZSwgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpKTsKKyAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0UmVhbCA9CisgICAgQ29udmVydFRvTmluamFQYXRoKHRhcmdldE91dHB1dERpciArICJjbWFrZV9kZXZpY2VfbGluayIgKyBvYmpFeHQpOwogCisgIHN0ZDo6c3RyaW5nIHRhcmdldE91dHB1dEltcGxpYiA9IENvbnZlcnRUb05pbmphUGF0aCgKKyAgICBnZW5UYXJnZXQtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpKTsKKworICBpZiAoY29uZmlnICE9IGZpbGVDb25maWcpIHsKKyAgICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRwdXRGaWxlQ29uZmlnRGlyID0KKyAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFRhcmdldERpcmVjdG9yeShnZW5UYXJnZXQpLAorICAgICAgICAgICAgICAgZ2xvYmFsR2VuLT5Db25maWdEaXJlY3RvcnkoZmlsZUNvbmZpZyksICIvIik7CisgICAgdGFyZ2V0T3V0cHV0RmlsZUNvbmZpZ0RpciA9CisgICAgICBnbG9iYWxHZW4tPkV4cGFuZENGR0ludERpcih0YXJnZXRPdXRwdXREaXIsIGZpbGVDb25maWcpOworICAgIGlmICh0YXJnZXRPdXRwdXREaXIgPT0gdGFyZ2V0T3V0cHV0RmlsZUNvbmZpZ0RpcikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZ2VuVGFyZ2V0LT5HZXRGdWxsTmFtZShjb25maWcsIGNtU3RhdGVFbnVtczo6SW1wb3J0TGlicmFyeUFydGlmYWN0KQorICAgICAgICAgICAuZW1wdHkoKSAmJgorICAgICAgICAhZ2VuVGFyZ2V0CisgICAgICAgICAgIC0+R2V0RnVsbE5hbWUoZmlsZUNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpCisgICAgICAgICAgIC5lbXB0eSgpICYmCisgICAgICAgIHRhcmdldE91dHB1dEltcGxpYiA9PQorICAgICAgICAgIENvbnZlcnRUb05pbmphUGF0aChnZW5UYXJnZXQtPkdldEZ1bGxQYXRoKAorICAgICAgICAgICAgZmlsZUNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGlmIChmaXJzdEZvckNvbmZpZykgeworICAgIGdsb2JhbEdlbi0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZykucHVzaF9iYWNrKHRhcmdldE91dHB1dFJlYWwpOworICB9CiAgIHRoaXMtPkRldmljZUxpbmtPYmplY3QgPSB0YXJnZXRPdXRwdXRSZWFsOwogCiAgIC8vIFdyaXRlIGNvbW1lbnRzLgotICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkpOworICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpKTsKICAgY29uc3QgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBnZW5UYXJnZXQtPkdldFR5cGUoKTsKLSAgdGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkgPDwgIiMgRGV2aWNlIExpbmsgYnVpbGQgc3RhdGVtZW50cyBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0YXJnZXRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHRhcmdldCAiIDw8IHRoaXMtPkdldFRhcmdldE5hbWUoKSA8PCAiXG5cbiI7CisgIHRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSA8PCAiIyBEZXZpY2UgTGluayBidWlsZCBzdGF0ZW1lbnRzIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0YXJnZXRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiB0YXJnZXQgIiA8PCB0aGlzLT5HZXRUYXJnZXROYW1lKCkgPDwgIlxuXG4iOwogCiAgIC8vIENvbXB1dGUgdGhlIGNvbW1lbnQuCi0gIGNtTmluamFCdWlsZCBidWlsZCh0aGlzLT5MYW5ndWFnZUxpbmtlckRldmljZVJ1bGUoKSk7CisgIGNtTmluamFCdWlsZCBidWlsZCh0aGlzLT5MYW5ndWFnZUxpbmtlckRldmljZVJ1bGUoY29uZmlnKSk7CiAgIGJ1aWxkLkNvbW1lbnQgPQogICAgIGNtU3RyQ2F0KCJMaW5rIHRoZSAiLCB0aGlzLT5HZXRWaXNpYmxlVHlwZU5hbWUoKSwgJyAnLCB0YXJnZXRPdXRwdXRSZWFsKTsKIApAQCAtNTg0LDE0ICs2NTMsMTUgQEAKICAgLy8gQ29tcHV0ZSBvdXRwdXRzLgogICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0YXJnZXRPdXRwdXRSZWFsKTsKICAgLy8gQ29tcHV0ZSBzcGVjaWZpYyBsaWJyYXJpZXMgdG8gbGluayB3aXRoLgotICBidWlsZC5FeHBsaWNpdERlcHMgPSB0aGlzLT5HZXRPYmplY3RzKCk7Ci0gIGJ1aWxkLkltcGxpY2l0RGVwcyA9IHRoaXMtPkNvbXB1dGVMaW5rRGVwcyh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UpOworICBidWlsZC5FeHBsaWNpdERlcHMgPSB0aGlzLT5HZXRPYmplY3RzKGNvbmZpZyk7CisgIGJ1aWxkLkltcGxpY2l0RGVwcyA9CisgICAgdGhpcy0+Q29tcHV0ZUxpbmtEZXBzKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCBjb25maWcpOwogCiAgIHN0ZDo6c3RyaW5nIGZyYW1ld29ya1BhdGg7CiAgIHN0ZDo6c3RyaW5nIGxpbmtQYXRoOwogCi0gIHN0ZDo6c3RyaW5nIGNyZWF0ZVJ1bGUgPSBnZW5UYXJnZXQtPkdldENyZWF0ZVJ1bGVWYXJpYWJsZSgKLSAgICB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgIHN0ZDo6c3RyaW5nIGNyZWF0ZVJ1bGUgPQorICAgIGdlblRhcmdldC0+R2V0Q3JlYXRlUnVsZVZhcmlhYmxlKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCBjb25maWcpOwogICBjb25zdCBib29sIHVzZVdhdGNvbVF1b3RlID0KICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5Jc09uKGNyZWF0ZVJ1bGUgKyAiX1VTRV9XQVRDT01fUVVPVEUiKTsKICAgY21Mb2NhbE5pbmphR2VuZXJhdG9yJiBsb2NhbEdlbiA9ICp0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpOwpAQCAtNjA1LDE3ICs2NzUsMTcgQEAKICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSwKICAgICAgIGdsb2JhbEdlbikpOwogICBsaW5rTGluZUNvbXB1dGVyLT5TZXRVc2VXYXRjb21RdW90ZSh1c2VXYXRjb21RdW90ZSk7CisgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFVzZU5pbmphTXVsdGkoZ2xvYmFsR2VuLT5Jc011bHRpQ29uZmlnKCkpOwogCiAgIGxvY2FsR2VuLkdldFRhcmdldEZsYWdzKAotICAgIGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgdmFyc1siTElOS19MSUJSQVJJRVMiXSwKLSAgICB2YXJzWyJGTEFHUyJdLCB2YXJzWyJMSU5LX0ZMQUdTIl0sIGZyYW1ld29ya1BhdGgsIGxpbmtQYXRoLCBnZW5UYXJnZXQpOworICAgIGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGNvbmZpZywgdmFyc1siTElOS19MSUJSQVJJRVMiXSwgdmFyc1siRkxBR1MiXSwKKyAgICB2YXJzWyJMSU5LX0ZMQUdTIl0sIGZyYW1ld29ya1BhdGgsIGxpbmtQYXRoLCBnZW5UYXJnZXQpOwogCiAgIHRoaXMtPmFkZFBvb2xOaW5qYVZhcmlhYmxlKCJKT0JfUE9PTF9MSU5LIiwgZ2VuVGFyZ2V0LCB2YXJzKTsKIAotICB2YXJzWyJMSU5LX0ZMQUdTIl0gPQotICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZUxpdGVyYWwodmFyc1siTElOS19GTEFHUyJdKTsKKyAgdmFyc1siTElOS19GTEFHUyJdID0gZ2xvYmFsR2VuLT5FbmNvZGVMaXRlcmFsKHZhcnNbIkxJTktfRkxBR1MiXSk7CiAKLSAgdmFyc1siTUFOSUZFU1RTIl0gPSB0aGlzLT5HZXRNYW5pZmVzdHMoKTsKKyAgdmFyc1siTUFOSUZFU1RTIl0gPSB0aGlzLT5HZXRNYW5pZmVzdHMoY29uZmlnKTsKIAogICB2YXJzWyJMSU5LX1BBVEgiXSA9IGZyYW1ld29ya1BhdGggKyBsaW5rUGF0aDsKIApAQCAtNjI0LDI0ICs2OTQsMjUgQEAKICAgLy8gY29kZSBiZXR3ZWVuIHRoZSBNYWtlZmlsZSBleGVjdXRhYmxlIGFuZCBsaWJyYXJ5IGdlbmVyYXRvcnMuCiAgIGlmICh0YXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgewogICAgIHN0ZDo6c3RyaW5nIHQgPSB2YXJzWyJGTEFHUyJdOwotICAgIGxvY2FsR2VuLkFkZEFyY2hpdGVjdHVyZUZsYWdzKHQsIGdlblRhcmdldCwgY3VkYUxpbmtMYW5ndWFnZSwgY2ZnTmFtZSk7CisgICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ2VuVGFyZ2V0LCBjdWRhTGlua0xhbmd1YWdlLCBjb25maWcpOwogICAgIHZhcnNbIkZMQUdTIl0gPSB0OwogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIHQgPSB2YXJzWyJBUkNIX0ZMQUdTIl07Ci0gICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ2VuVGFyZ2V0LCBjdWRhTGlua0xhbmd1YWdlLCBjZmdOYW1lKTsKKyAgICBsb2NhbEdlbi5BZGRBcmNoaXRlY3R1cmVGbGFncyh0LCBnZW5UYXJnZXQsIGN1ZGFMaW5rTGFuZ3VhZ2UsIGNvbmZpZyk7CiAgICAgdmFyc1siQVJDSF9GTEFHUyJdID0gdDsKICAgICB0LmNsZWFyKCk7CiAgICAgbG9jYWxHZW4uQWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcodCwgZ2VuVGFyZ2V0LCBjdWRhTGlua0xhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZ05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgICAgdmFyc1siTEFOR1VBR0VfQ09NUElMRV9GTEFHUyJdID0gdDsKICAgfQotICBpZiAoZ2VuVGFyZ2V0LT5IYXNTT05hbWUoY2ZnTmFtZSkpIHsKKyAgYXV0byBjb25zdCB0Z3ROYW1lcyA9IHRoaXMtPlRhcmdldE5hbWVzKGNvbmZpZyk7CisgIGlmIChnZW5UYXJnZXQtPkhhc1NPTmFtZShjb25maWcpKSB7CiAgICAgdmFyc1siU09OQU1FX0ZMQUciXSA9Ci0gICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTT05hbWVGbGFnKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7Ci0gICAgdmFyc1siU09OQU1FIl0gPSB0aGlzLT5UYXJnZXROYW1lcy5TaGFyZWRPYmplY3Q7CisgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTT05hbWVGbGFnKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpKTsKKyAgICB2YXJzWyJTT05BTUUiXSA9IHRndE5hbWVzLlNoYXJlZE9iamVjdDsKICAgICBpZiAodGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpbnN0YWxsX2RpciA9Ci0gICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRJbnN0YWxsTmFtZURpckZvckJ1aWxkVHJlZShjZmdOYW1lKTsKKyAgICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldEluc3RhbGxOYW1lRGlyRm9yQnVpbGRUcmVlKGNvbmZpZyk7CiAgICAgICBpZiAoIWluc3RhbGxfZGlyLmVtcHR5KCkpIHsKICAgICAgICAgdmFyc1siSU5TVEFMTE5BTUVfRElSIl0gPSBsb2NhbEdlbi5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCiAgICAgICAgICAgaW5zdGFsbF9kaXIsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CkBAIC02NDksMjUgKzcyMCwyOCBAQAogICAgIH0KICAgfQogCi0gIGlmICghdGhpcy0+VGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CisgIGlmICghdGd0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgaW1wTGliUGF0aCA9IGxvY2FsR2VuLkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICAgIHRhcmdldE91dHB1dEltcGxpYiwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB2YXJzWyJUQVJHRVRfSU1QTElCIl0gPSBpbXBMaWJQYXRoOwogICAgIEVuc3VyZVBhcmVudERpcmVjdG9yeUV4aXN0cyhpbXBMaWJQYXRoKTsKICAgfQogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIG9ialBhdGggPSBHZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOworICBjb25zdCBzdGQ6OnN0cmluZyBvYmpQYXRoID0KKyAgICBjbVN0ckNhdChHZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0U3VwcG9ydERpcmVjdG9yeSgpLAorICAgICAgICAgICAgIGdsb2JhbEdlbi0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZykpOworCiAgIHZhcnNbIk9CSkVDVF9ESVIiXSA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgob2JqUGF0aCksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgIEVuc3VyZURpcmVjdG9yeUV4aXN0cyhvYmpQYXRoKTsKIAotICB0aGlzLT5TZXRNc3ZjVGFyZ2V0UGRiVmFyaWFibGUodmFycyk7CisgIHRoaXMtPlNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZSh2YXJzLCBjb25maWcpOwogCisgIHN0ZDo6c3RyaW5nJiBsaW5rTGlicmFyaWVzID0gdmFyc1siTElOS19MSUJSQVJJRVMiXTsKKyAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICBpZiAoZ2xvYmFsR2VuLT5Jc0dDQ09uV2luZG93cygpKSB7CiAgICAgLy8gYXIuZXhlIGNhbid0IGhhbmRsZSBiYWNrc2xhc2hlcyBpbiByc3AgZmlsZXMgKGltcGxpY2l0bHkgdXNlZCBieSBnY2MpCi0gICAgc3RkOjpzdHJpbmcmIGxpbmtMaWJyYXJpZXMgPSB2YXJzWyJMSU5LX0xJQlJBUklFUyJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rTGlicmFyaWVzLmJlZ2luKCksIGxpbmtMaWJyYXJpZXMuZW5kKCksICdcXCcsICcvJyk7Ci0gICAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rX3BhdGguYmVnaW4oKSwgbGlua19wYXRoLmVuZCgpLCAnXFwnLCAnLycpOwogICB9CiAKQEAgLTY3NSw2NSArNzQ5LDEwMCBAQAogICAvLyBkbyBub3QgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgZm9yY2VkIGEgcmVzcG9uc2UgZmlsZS4KICAgaW50IGNvbnN0IGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQgPQogICAgIHN0YXRpY19jYXN0PGludD4oY21TeXN0ZW1Ub29sczo6Q2FsY3VsYXRlQ29tbWFuZExpbmVMZW5ndGhMaW1pdCgpKSAtCi0gICAgZ2xvYmFsR2VuLT5HZXRSdWxlQ21kTGVuZ3RoKHRoaXMtPkxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZSgpKTsKKyAgICBnbG9iYWxHZW4tPkdldFJ1bGVDbWRMZW5ndGgodGhpcy0+TGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKGNvbmZpZykpOwogCiAgIGJ1aWxkLlJzcEZpbGUgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoc3RkOjpzdHJpbmcoIkNNYWtlRmlsZXMvIikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlblRhcmdldC0+R2V0TmFtZSgpICsgIi5yc3AiKTsKIAogICAvLyBHYXRoZXIgb3JkZXItb25seSBkZXBlbmRlbmNpZXMuCi0gIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHModGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuT3JkZXJPbmx5RGVwcyk7CisgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHMoCisgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksIGJ1aWxkLk9yZGVyT25seURlcHMsIGNvbmZpZywgY29uZmlnKTsKIAogICAvLyBXcml0ZSB0aGUgYnVpbGQgc3RhdGVtZW50IGZvciB0aGlzIHRhcmdldC4KICAgYm9vbCB1c2VkUmVzcG9uc2VGaWxlID0gZmFsc2U7Ci0gIGdsb2JhbEdlbi0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgYnVpbGQsCisgIGdsb2JhbEdlbi0+V3JpdGVCdWlsZCh0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCksIGJ1aWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZExpbmVMZW5ndGhMaW1pdCwgJnVzZWRSZXNwb25zZUZpbGUpOwotICB0aGlzLT5Xcml0ZURldmljZUxpbmtSdWxlKHVzZWRSZXNwb25zZUZpbGUpOworICB0aGlzLT5Xcml0ZURldmljZUxpbmtSdWxlKHVzZWRSZXNwb25zZUZpbGUsIGNvbmZpZyk7CiB9CiAKLXZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVMaW5rU3RhdGVtZW50KCkKK3ZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVMaW5rU3RhdGVtZW50KAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKKyAgYm9vbCBmaXJzdEZvckNvbmZpZykKIHsKICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5HZXRNYWtlZmlsZSgpOwogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yKiBnbG9iYWxHZW4gPSB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCk7CiAKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY2ZnTmFtZSA9IHRoaXMtPkdldENvbmZpZ05hbWUoKTsKLSAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0ID0gQ29udmVydFRvTmluamFQYXRoKGd0LT5HZXRGdWxsUGF0aChjZmdOYW1lKSk7CisgIHN0ZDo6c3RyaW5nIHRhcmdldE91dHB1dCA9IENvbnZlcnRUb05pbmphUGF0aChndC0+R2V0RnVsbFBhdGgoY29uZmlnKSk7CiAgIHN0ZDo6c3RyaW5nIHRhcmdldE91dHB1dFJlYWwgPSBDb252ZXJ0VG9OaW5qYVBhdGgoCi0gICAgZ3QtPkdldEZ1bGxQYXRoKGNmZ05hbWUsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LAorICAgIGd0LT5HZXRGdWxsUGF0aChjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LAogICAgICAgICAgICAgICAgICAgICAvKnJlYWxuYW1lPSovdHJ1ZSkpOwogICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRwdXRJbXBsaWIgPSBDb252ZXJ0VG9OaW5qYVBhdGgoCi0gICAgZ3QtPkdldEZ1bGxQYXRoKGNmZ05hbWUsIGNtU3RhdGVFbnVtczo6SW1wb3J0TGlicmFyeUFydGlmYWN0KSk7CisgICAgZ3QtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpKTsKIAorICBpZiAoY29uZmlnICE9IGZpbGVDb25maWcpIHsKKyAgICBpZiAodGFyZ2V0T3V0cHV0ID09IENvbnZlcnRUb05pbmphUGF0aChndC0+R2V0RnVsbFBhdGgoZmlsZUNvbmZpZykpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0YXJnZXRPdXRwdXRSZWFsID09CisgICAgICAgIENvbnZlcnRUb05pbmphUGF0aChndC0+R2V0RnVsbFBhdGgoZmlsZUNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnJlYWxuYW1lPSovdHJ1ZSkpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZ3QtPkdldEZ1bGxOYW1lKGNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpCisgICAgICAgICAgIC5lbXB0eSgpICYmCisgICAgICAgICFndC0+R2V0RnVsbE5hbWUoZmlsZUNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpCisgICAgICAgICAgIC5lbXB0eSgpICYmCisgICAgICAgIHRhcmdldE91dHB1dEltcGxpYiA9PQorICAgICAgICAgIENvbnZlcnRUb05pbmphUGF0aChndC0+R2V0RnVsbFBhdGgoCisgICAgICAgICAgICBmaWxlQ29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgYXV0byBjb25zdCB0Z3ROYW1lcyA9IHRoaXMtPlRhcmdldE5hbWVzKGNvbmZpZyk7CiAgIGlmIChndC0+SXNBcHBCdW5kbGVPbkFwcGxlKCkpIHsKICAgICAvLyBDcmVhdGUgdGhlIGFwcCBidW5kbGUKLSAgICBzdGQ6OnN0cmluZyBvdXRwYXRoID0gZ3QtPkdldERpcmVjdG9yeShjZmdOYW1lKTsKLSAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUFwcEJ1bmRsZSh0aGlzLT5UYXJnZXROYW1lcy5PdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cGF0aCk7CisgICAgc3RkOjpzdHJpbmcgb3V0cGF0aCA9IGd0LT5HZXREaXJlY3RvcnkoY29uZmlnKTsKKyAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUFwcEJ1bmRsZSh0Z3ROYW1lcy5PdXRwdXQsIG91dHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgb3V0cHV0IHBhdGgKLSAgICB0YXJnZXRPdXRwdXQgPSBjbVN0ckNhdChvdXRwYXRoLCAnLycsIHRoaXMtPlRhcmdldE5hbWVzLk91dHB1dCk7CisgICAgdGFyZ2V0T3V0cHV0ID0gY21TdHJDYXQob3V0cGF0aCwgJy8nLCB0Z3ROYW1lcy5PdXRwdXQpOwogICAgIHRhcmdldE91dHB1dCA9IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0YXJnZXRPdXRwdXQpOwotICAgIHRhcmdldE91dHB1dFJlYWwgPSBjbVN0ckNhdChvdXRwYXRoLCAnLycsIHRoaXMtPlRhcmdldE5hbWVzLlJlYWwpOworICAgIHRhcmdldE91dHB1dFJlYWwgPSBjbVN0ckNhdChvdXRwYXRoLCAnLycsIHRndE5hbWVzLlJlYWwpOwogICAgIHRhcmdldE91dHB1dFJlYWwgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0T3V0cHV0UmVhbCk7CiAgIH0gZWxzZSBpZiAoZ3QtPklzRnJhbWV3b3JrT25BcHBsZSgpKSB7CiAgICAgLy8gQ3JlYXRlIHRoZSBsaWJyYXJ5IGZyYW1ld29yay4KLSAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUZyYW1ld29yayh0aGlzLT5UYXJnZXROYW1lcy5PdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3QtPkdldERpcmVjdG9yeShjZmdOYW1lKSk7CisKKyAgICBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6U2tpcFBhcnRzIGJ1bmRsZVNraXBQYXJ0czsKKyAgICBpZiAoZ2xvYmFsR2VuLT5HZXROYW1lKCkgPT0gIk5pbmphIE11bHRpLUNvbmZpZyIpIHsKKyAgICAgIGNvbnN0IGF1dG8gcG9zdEZpeCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RmlsZVBvc3RmaXgoY29uZmlnKTsKKyAgICAgIC8vIFNraXAgY3JlYXRpbmcgSW5mby5wbGlzdCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucywgYW5kCisgICAgICAvLyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGhhcyBhIHBvc3RmaXguIFRoZSBub24tcG9zdGZpeCBjb25maWd1cmF0aW9uCisgICAgICAvLyBJbmZvLnBsaXN0IGNhbiBiZSB1c2VkIGJ5IGFsbCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMuCisgICAgICBpZiAoIXBvc3RGaXguZW1wdHkoKSkgeworICAgICAgICBidW5kbGVTa2lwUGFydHMuaW5mb1BsaXN0ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUZyYW1ld29yaygKKyAgICAgIHRndE5hbWVzLk91dHB1dCwgZ3QtPkdldERpcmVjdG9yeShjb25maWcpLCBjb25maWcsIGJ1bmRsZVNraXBQYXJ0cyk7CiAgIH0gZWxzZSBpZiAoZ3QtPklzQ0ZCdW5kbGVPbkFwcGxlKCkpIHsKICAgICAvLyBDcmVhdGUgdGhlIGNvcmUgZm91bmRhdGlvbiBidW5kbGUuCi0gICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5DcmVhdGVDRkJ1bmRsZSh0aGlzLT5UYXJnZXROYW1lcy5PdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndC0+R2V0RGlyZWN0b3J5KGNmZ05hbWUpKTsKKyAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUNGQnVuZGxlKHRndE5hbWVzLk91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0LT5HZXREaXJlY3RvcnkoY29uZmlnKSwgY29uZmlnKTsKICAgfQogCiAgIC8vIFdyaXRlIGNvbW1lbnRzLgotICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkpOworICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZykpOwogICBjb25zdCBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IGd0LT5HZXRUeXBlKCk7Ci0gIHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpCisgIHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpCiAgICAgPDwgIiMgTGluayBidWlsZCBzdGF0ZW1lbnRzIGZvciAiIDw8IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldFR5cGUpCiAgICAgPDwgIiB0YXJnZXQgIiA8PCB0aGlzLT5HZXRUYXJnZXROYW1lKCkgPDwgIlxuXG4iOwogCi0gIGNtTmluamFCdWlsZCBsaW5rQnVpbGQodGhpcy0+TGFuZ3VhZ2VMaW5rZXJSdWxlKCkpOworICBjbU5pbmphQnVpbGQgbGlua0J1aWxkKHRoaXMtPkxhbmd1YWdlTGlua2VyUnVsZShjb25maWcpKTsKICAgY21OaW5qYVZhcnMmIHZhcnMgPSBsaW5rQnVpbGQuVmFyaWFibGVzOwogCiAgIC8vIENvbXB1dGUgdGhlIGNvbW1lbnQuCkBAIC03NDIsMTEgKzg1MSwxNCBAQAogCiAgIC8vIENvbXB1dGUgb3V0cHV0cy4KICAgbGlua0J1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRhcmdldE91dHB1dFJlYWwpOworICBpZiAoZmlyc3RGb3JDb25maWcpIHsKKyAgICBnbG9iYWxHZW4tPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldChjb25maWcpLnB1c2hfYmFjayh0YXJnZXRPdXRwdXRSZWFsKTsKKyAgfQogCi0gIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UgPT0gIlN3aWZ0IikgewotICAgIHZhcnNbIlNXSUZUX0xJQlJBUllfTkFNRSJdID0gW3RoaXNdKCkgLT4gc3RkOjpzdHJpbmcgeworICBpZiAodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZykgPT0gIlN3aWZ0IikgeworICAgIHZhcnNbIlNXSUZUX0xJQlJBUllfTkFNRSJdID0gW3RoaXMsIGNvbmZpZ10oKSAtPiBzdGQ6OnN0cmluZyB7CiAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6TmFtZXMgdGFyZ2V0TmFtZXMgPQotICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TGlicmFyeU5hbWVzKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRMaWJyYXJ5TmFtZXMoY29uZmlnKTsKICAgICAgIHJldHVybiB0YXJnZXROYW1lcy5CYXNlOwogICAgIH0oKTsKIApAQCAtNzc2LDE4ICs4ODgsMTcgQEAKICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB9KHZhcnNbIlNXSUZUX01PRFVMRV9OQU1FIl0pOwogCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgbWFwID0gY21TdHJDYXQoZ3QtPkdldFN1cHBvcnREaXJlY3RvcnkoKSwgJy8nLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLCAib3V0cHV0LWZpbGUtbWFwLmpzb24iKTsKICAgICB2YXJzWyJTV0lGVF9PVVRQVVRfRklMRV9NQVAiXSA9CiAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChndC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvb3V0cHV0LWZpbGUtbWFwLmpzb24iKSwKLSAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKG1hcCksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAKLSAgICB2YXJzWyJTV0lGVF9TT1VSQ0VTIl0gPSBbdGhpc10oKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgdmFyc1siU1dJRlRfU09VUkNFUyJdID0gW3RoaXMsIGNvbmZpZ10oKSAtPiBzdGQ6OnN0cmluZyB7CiAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBzb3VyY2VzOwogICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gb3NzOwogCi0gICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0T2JqZWN0U291cmNlcyhzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRPYmplY3RTb3VyY2VzKHNvdXJjZXMsIGNvbmZpZyk7CiAgICAgICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBMb2NhbEdlbiA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNvdXJjZSA6IHNvdXJjZXMpIHsKICAgICAgICAgb3NzIDw8ICIgIgpAQCAtODAxLDI3ICs5MTIsMjggQEAKICAgICAvLyBTaW5jZSB3ZSBkbyBub3QgcGVyZm9ybSBvYmplY3QgYnVpbGRzLCBjb21wdXRlIHRoZQogICAgIC8vIGRlZmluZXMvZmxhZ3MvaW5jbHVkZXMgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIHBhc3NlZCBhbG9uZwogICAgIC8vIGFwcHJvcHJpYXRlbHkuCi0gICAgdmFyc1siREVGSU5FUyJdID0gdGhpcy0+R2V0RGVmaW5lcygiU3dpZnQiKTsKLSAgICB2YXJzWyJGTEFHUyJdID0gdGhpcy0+R2V0RmxhZ3MoIlN3aWZ0Iik7Ci0gICAgdmFyc1siSU5DTFVERVMiXSA9IHRoaXMtPkdldEluY2x1ZGVzKCJTd2lmdCIpOworICAgIHZhcnNbIkRFRklORVMiXSA9IHRoaXMtPkdldERlZmluZXMoIlN3aWZ0IiwgY29uZmlnKTsKKyAgICB2YXJzWyJGTEFHUyJdID0gdGhpcy0+R2V0RmxhZ3MoIlN3aWZ0IiwgY29uZmlnKTsKKyAgICB2YXJzWyJJTkNMVURFUyJdID0gdGhpcy0+R2V0SW5jbHVkZXMoIlN3aWZ0IiwgY29uZmlnKTsKICAgfQogCiAgIC8vIENvbXB1dGUgc3BlY2lmaWMgbGlicmFyaWVzIHRvIGxpbmsgd2l0aC4KLSAgaWYgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSA9PSAiU3dpZnQiKSB7CisgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiU3dpZnQiKSB7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gc291cmNlczsKLSAgICBndC0+R2V0T2JqZWN0U291cmNlcyhzb3VyY2VzLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgIGd0LT5HZXRPYmplY3RTb3VyY2VzKHNvdXJjZXMsIGNvbmZpZyk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzb3VyY2UgOiBzb3VyY2VzKSB7CiAgICAgICBsaW5rQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2soCi0gICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UpKSk7CisgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UsIGNvbmZpZykpKTsKICAgICAgIGxpbmtCdWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKAogICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0U291cmNlRmlsZVBhdGgoc291cmNlKSkpOwogICAgIH0KIAogICAgIGxpbmtCdWlsZC5PdXRwdXRzLnB1c2hfYmFjayh2YXJzWyJTV0lGVF9NT0RVTEUiXSk7CiAgIH0gZWxzZSB7Ci0gICAgbGlua0J1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkdldE9iamVjdHMoKTsKKyAgICBsaW5rQnVpbGQuRXhwbGljaXREZXBzID0gdGhpcy0+R2V0T2JqZWN0cyhjb25maWcpOwogICB9Ci0gIGxpbmtCdWlsZC5JbXBsaWNpdERlcHMgPSB0aGlzLT5Db21wdXRlTGlua0RlcHModGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKTsKKyAgbGlua0J1aWxkLkltcGxpY2l0RGVwcyA9CisgICAgdGhpcy0+Q29tcHV0ZUxpbmtEZXBzKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCBjb25maWcpOwogCiAgIGlmICghdGhpcy0+RGV2aWNlTGlua09iamVjdC5lbXB0eSgpKSB7CiAgICAgbGlua0J1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2sodGhpcy0+RGV2aWNlTGlua09iamVjdCk7CkBAIC04MzEsMzkgKzk0Myw0MiBAQAogICBzdGQ6OnN0cmluZyBsaW5rUGF0aDsKIAogICBzdGQ6OnN0cmluZyBjcmVhdGVSdWxlID0KLSAgICBndC0+R2V0Q3JlYXRlUnVsZVZhcmlhYmxlKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICBndC0+R2V0Q3JlYXRlUnVsZVZhcmlhYmxlKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCBjb25maWcpOwogICBib29sIHVzZVdhdGNvbVF1b3RlID0gbWYtPklzT24oY3JlYXRlUnVsZSArICJfVVNFX1dBVENPTV9RVU9URSIpOwogICBjbUxvY2FsTmluamFHZW5lcmF0b3ImIGxvY2FsR2VuID0gKnRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAKICAgdmFyc1siVEFSR0VUX0ZJTEUiXSA9CiAgICAgbG9jYWxHZW4uQ29udmVydFRvT3V0cHV0Rm9ybWF0KHRhcmdldE91dHB1dFJlYWwsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAKLSAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlcigKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlciA9CiAgICAgZ2xvYmFsR2VuLT5DcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwKLSAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSkpOworICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKTsKICAgbGlua0xpbmVDb21wdXRlci0+U2V0VXNlV2F0Y29tUXVvdGUodXNlV2F0Y29tUXVvdGUpOworICBsaW5rTGluZUNvbXB1dGVyLT5TZXRVc2VOaW5qYU11bHRpKGdsb2JhbEdlbi0+SXNNdWx0aUNvbmZpZygpKTsKIAotICBsb2NhbEdlbi5HZXRUYXJnZXRGbGFncyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCB0aGlzLT5HZXRDb25maWdOYW1lKCksCisgIGxvY2FsR2VuLkdldFRhcmdldEZsYWdzKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyc1siTElOS19MSUJSQVJJRVMiXSwgdmFyc1siRkxBR1MiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyc1siTElOS19GTEFHUyJdLCBmcmFtZXdvcmtQYXRoLCBsaW5rUGF0aCwgZ3QpOwogCiAgIC8vIEFkZCBPUyBYIHZlcnNpb24gZmxhZ3MsIGlmIGFueS4KICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlkpIHsKLSAgICB0aGlzLT5BcHBlbmRPU1hWZXJGbGFnKHZhcnNbIkxJTktfRkxBR1MiXSwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTVBBVElCSUxJVFkiLCB0cnVlKTsKLSAgICB0aGlzLT5BcHBlbmRPU1hWZXJGbGFnKHZhcnNbIkxJTktfRkxBR1MiXSwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNVUlJFTlQiLCBmYWxzZSk7CisgICAgdGhpcy0+QXBwZW5kT1NYVmVyRmxhZyh2YXJzWyJMSU5LX0ZMQUdTIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgIkNPTVBBVElCSUxJVFkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgdGhpcy0+QXBwZW5kT1NYVmVyRmxhZyh2YXJzWyJMSU5LX0ZMQUdTIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgIkNVUlJFTlQiLCBmYWxzZSk7CiAgIH0KIAogICB0aGlzLT5hZGRQb29sTmluamFWYXJpYWJsZSgiSk9CX1BPT0xfTElOSyIsIGd0LCB2YXJzKTsKIAotICB0aGlzLT5BZGRNb2R1bGVEZWZpbml0aW9uRmxhZyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCB2YXJzWyJMSU5LX0ZMQUdTIl0pOwotICB2YXJzWyJMSU5LX0ZMQUdTIl0gPQotICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZUxpdGVyYWwodmFyc1siTElOS19GTEFHUyJdKTsKKyAgdGhpcy0+QWRkTW9kdWxlRGVmaW5pdGlvbkZsYWcobGlua0xpbmVDb21wdXRlci5nZXQoKSwgdmFyc1siTElOS19GTEFHUyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworICB2YXJzWyJMSU5LX0ZMQUdTIl0gPSBnbG9iYWxHZW4tPkVuY29kZUxpdGVyYWwodmFyc1siTElOS19GTEFHUyJdKTsKIAotICB2YXJzWyJNQU5JRkVTVFMiXSA9IHRoaXMtPkdldE1hbmlmZXN0cygpOworICB2YXJzWyJNQU5JRkVTVFMiXSA9IHRoaXMtPkdldE1hbmlmZXN0cyhjb25maWcpOworICB2YXJzWyJBSVhfRVhQT1JUUyJdID0gdGhpcy0+R2V0QUlYRXhwb3J0cyhjb25maWcpOwogCiAgIHZhcnNbIkxJTktfUEFUSCJdID0gZnJhbWV3b3JrUGF0aCArIGxpbmtQYXRoOwogICBzdGQ6OnN0cmluZyBsd3l1RmxhZ3M7CkBAIC04NzYsMjMgKzk5MSwyNiBAQAogICAvLyBjb2RlIGJldHdlZW4gdGhlIE1ha2VmaWxlIGV4ZWN1dGFibGUgYW5kIGxpYnJhcnkgZ2VuZXJhdG9ycy4KICAgaWYgKHRhcmdldFR5cGUgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7CiAgICAgc3RkOjpzdHJpbmcgdCA9IHZhcnNbIkZMQUdTIl07Ci0gICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ3QsIFRhcmdldExpbmtMYW5ndWFnZSwgY2ZnTmFtZSk7CisgICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ3QsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgICAgdCArPSBsd3l1RmxhZ3M7CiAgICAgdmFyc1siRkxBR1MiXSA9IHQ7CiAgIH0gZWxzZSB7CiAgICAgc3RkOjpzdHJpbmcgdCA9IHZhcnNbIkFSQ0hfRkxBR1MiXTsKLSAgICBsb2NhbEdlbi5BZGRBcmNoaXRlY3R1cmVGbGFncyh0LCBndCwgVGFyZ2V0TGlua0xhbmd1YWdlLCBjZmdOYW1lKTsKKyAgICBsb2NhbEdlbi5BZGRBcmNoaXRlY3R1cmVGbGFncyh0LCBndCwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgICB2YXJzWyJBUkNIX0ZMQUdTIl0gPSB0OwogICAgIHQuY2xlYXIoKTsKICAgICB0ICs9IGx3eXVGbGFnczsKLSAgICBsb2NhbEdlbi5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZyh0LCBndCwgVGFyZ2V0TGlua0xhbmd1YWdlLCBjZmdOYW1lKTsKKyAgICBsb2NhbEdlbi5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZygKKyAgICAgIHQsIGd0LCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgY29uZmlnKTsKICAgICB2YXJzWyJMQU5HVUFHRV9DT01QSUxFX0ZMQUdTIl0gPSB0OwogICB9Ci0gIGlmIChndC0+SGFzU09OYW1lKGNmZ05hbWUpKSB7Ci0gICAgdmFyc1siU09OQU1FX0ZMQUciXSA9IG1mLT5HZXRTT05hbWVGbGFnKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7Ci0gICAgdmFyc1siU09OQU1FIl0gPSB0aGlzLT5UYXJnZXROYW1lcy5TaGFyZWRPYmplY3Q7CisgIGlmIChndC0+SGFzU09OYW1lKGNvbmZpZykpIHsKKyAgICB2YXJzWyJTT05BTUVfRkxBRyJdID0gbWYtPkdldFNPTmFtZUZsYWcodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZykpOworICAgIHZhcnNbIlNPTkFNRSJdID0gdGd0TmFtZXMuU2hhcmVkT2JqZWN0OwogICAgIGlmICh0YXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxfZGlyID0gZ3QtPkdldEluc3RhbGxOYW1lRGlyRm9yQnVpbGRUcmVlKGNmZ05hbWUpOworICAgICAgc3RkOjpzdHJpbmcgaW5zdGFsbF9kaXIgPSBndC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JCdWlsZFRyZWUoY29uZmlnKTsKICAgICAgIGlmICghaW5zdGFsbF9kaXIuZW1wdHkoKSkgewogICAgICAgICB2YXJzWyJJTlNUQUxMTkFNRV9ESVIiXSA9IGxvY2FsR2VuLkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICAgICAgICBpbnN0YWxsX2RpciwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKQEAgLTkwMiwxNyArMTAyMCwyMSBAQAogCiAgIGNtTmluamFEZXBzIGJ5cHJvZHVjdHM7CiAKLSAgaWYgKCF0aGlzLT5UYXJnZXROYW1lcy5JbXBvcnRMaWJyYXJ5LmVtcHR5KCkpIHsKKyAgaWYgKCF0Z3ROYW1lcy5JbXBvcnRMaWJyYXJ5LmVtcHR5KCkpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyBpbXBMaWJQYXRoID0gbG9jYWxHZW4uQ29udmVydFRvT3V0cHV0Rm9ybWF0KAogICAgICAgdGFyZ2V0T3V0cHV0SW1wbGliLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgIHZhcnNbIlRBUkdFVF9JTVBMSUIiXSA9IGltcExpYlBhdGg7CiAgICAgRW5zdXJlUGFyZW50RGlyZWN0b3J5RXhpc3RzKGltcExpYlBhdGgpOwotICAgIGlmIChndC0+SGFzSW1wb3J0TGlicmFyeShjZmdOYW1lKSkgeworICAgIGlmIChndC0+SGFzSW1wb3J0TGlicmFyeShjb25maWcpKSB7CiAgICAgICBieXByb2R1Y3RzLnB1c2hfYmFjayh0YXJnZXRPdXRwdXRJbXBsaWIpOworICAgICAgaWYgKGZpcnN0Rm9yQ29uZmlnKSB7CisgICAgICAgIGdsb2JhbEdlbi0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZykucHVzaF9iYWNrKAorICAgICAgICAgIHRhcmdldE91dHB1dEltcGxpYik7CisgICAgICB9CiAgICAgfQogICB9CiAKLSAgaWYgKCF0aGlzLT5TZXRNc3ZjVGFyZ2V0UGRiVmFyaWFibGUodmFycykpIHsKKyAgaWYgKCF0aGlzLT5TZXRNc3ZjVGFyZ2V0UGRiVmFyaWFibGUodmFycywgY29uZmlnKSkgewogICAgIC8vIEl0IGlzIGNvbW1vbiB0byBwbGFjZSBkZWJ1ZyBzeW1ib2xzIGF0IGEgc3BlY2lmaWMgcGxhY2UsCiAgICAgLy8gc28gd2UgbmVlZCBhIHBsYWluIHRhcmdldCBuYW1lIGluIHRoZSBydWxlIGF2YWlsYWJsZS4KICAgICBzdGQ6OnN0cmluZyBwcmVmaXg7CkBAIC05MjcsMTYgKzEwNDksMTcgQEAKICAgICB2YXJzWyJUQVJHRVRfUERCIl0gPSBiYXNlICsgc3VmZml4ICsgZGJnX3N1ZmZpeDsKICAgfQogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIG9ialBhdGggPSBndC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOworICBjb25zdCBzdGQ6OnN0cmluZyBvYmpQYXRoID0KKyAgICBjbVN0ckNhdChndC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpLCBnbG9iYWxHZW4tPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpKTsKICAgdmFyc1siT0JKRUNUX0RJUiJdID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAogICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChvYmpQYXRoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgRW5zdXJlRGlyZWN0b3J5RXhpc3RzKG9ialBhdGgpOwogCisgIHN0ZDo6c3RyaW5nJiBsaW5rTGlicmFyaWVzID0gdmFyc1siTElOS19MSUJSQVJJRVMiXTsKKyAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICBpZiAoZ2xvYmFsR2VuLT5Jc0dDQ09uV2luZG93cygpKSB7CiAgICAgLy8gYXIuZXhlIGNhbid0IGhhbmRsZSBiYWNrc2xhc2hlcyBpbiByc3AgZmlsZXMgKGltcGxpY2l0bHkgdXNlZCBieSBnY2MpCi0gICAgc3RkOjpzdHJpbmcmIGxpbmtMaWJyYXJpZXMgPSB2YXJzWyJMSU5LX0xJQlJBUklFUyJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rTGlicmFyaWVzLmJlZ2luKCksIGxpbmtMaWJyYXJpZXMuZW5kKCksICdcXCcsICcvJyk7Ci0gICAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rX3BhdGguYmVnaW4oKSwgbGlua19wYXRoLmVuZCgpLCAnXFwnLCAnLycpOwogICB9CiAKQEAgLTk0NywyMyArMTA3MCwzMCBAQAogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcmVMaW5rQ21kTGluZXM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwb3N0QnVpbGRDbWRMaW5lczsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBjbWRMaW5lTGlzdHNbM10gPSB7ICZwcmVMaW5rQ21kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlTGlua0NtZExpbmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvc3RCdWlsZENtZExpbmVzIH07CiAKLSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSAzOyArK2kpIHsKLSAgICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2MgOiAqY21kTGlzdHNbaV0pIHsKLSAgICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY2MsIGNmZ05hbWUsIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCkpOwotICAgICAgbG9jYWxHZW4uQXBwZW5kQ3VzdG9tQ29tbWFuZExpbmVzKGNjZywgKmNtZExpbmVMaXN0c1tpXSk7Ci0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNjQnlwcm9kdWN0cyA9IGNjZy5HZXRCeXByb2R1Y3RzKCk7Ci0gICAgICBzdGQ6OnRyYW5zZm9ybShjY0J5cHJvZHVjdHMuYmVnaW4oKSwgY2NCeXByb2R1Y3RzLmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGJ5cHJvZHVjdHMpLCBNYXBUb05pbmphUGF0aCgpKTsKKyAgaWYgKGNvbmZpZyA9PSBmaWxlQ29uZmlnKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBjbWRMaW5lTGlzdHNbM10gPSB7ICZwcmVMaW5rQ21kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVMaW5rQ21kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb3N0QnVpbGRDbWRMaW5lcyB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSAzOyArK2kpIHsKKyAgICAgIGZvciAoY21DdXN0b21Db21tYW5kIGNvbnN0JiBjYyA6ICpjbWRMaXN0c1tpXSkgeworICAgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNjLCBjb25maWcsIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCkpOworICAgICAgICBsb2NhbEdlbi5BcHBlbmRDdXN0b21Db21tYW5kTGluZXMoY2NnLCAqY21kTGluZUxpc3RzW2ldKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjY0J5cHJvZHVjdHMgPSBjY2cuR2V0Qnlwcm9kdWN0cygpOworICAgICAgICBzdGQ6OnRyYW5zZm9ybShjY0J5cHJvZHVjdHMuYmVnaW4oKSwgY2NCeXByb2R1Y3RzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoYnlwcm9kdWN0cyksIE1hcFRvTmluamFQYXRoKCkpOworICAgICAgICBzdGQ6OnRyYW5zZm9ybSgKKyAgICAgICAgICBjY0J5cHJvZHVjdHMuYmVnaW4oKSwgY2NCeXByb2R1Y3RzLmVuZCgpLAorICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihnbG9iYWxHZW4tPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldCgpKSwKKyAgICAgICAgICBNYXBUb05pbmphUGF0aCgpKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIAogICAvLyBtYXliZSBjcmVhdGUgLmRlZiBmaWxlIGZyb20gbGlzdCBvZiBvYmplY3RzCiAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNb2R1bGVEZWZpbml0aW9uSW5mbyBjb25zdCogbWRpID0KLSAgICBndC0+R2V0TW9kdWxlRGVmaW5pdGlvbkluZm8odGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICBndC0+R2V0TW9kdWxlRGVmaW5pdGlvbkluZm8oY29uZmlnKTsKICAgaWYgKG1kaSAmJiBtZGktPkRlZkZpbGVHZW5lcmF0ZWQpIHsKICAgICBzdGQ6OnN0cmluZyBjbWFrZUNvbW1hbmQgPQogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KApAQCAtOTg5LDcgKzExMTksNyBAQAogICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0KG9ial9saXN0X2ZpbGUpOwogCiAgICAgaWYgKG1kaS0+V2luZG93c0V4cG9ydEFsbFN5bWJvbHMpIHsKLSAgICAgIGNtTmluamFEZXBzIG9ianMgPSB0aGlzLT5HZXRPYmplY3RzKCk7CisgICAgICBjbU5pbmphRGVwcyBvYmpzID0gdGhpcy0+R2V0T2JqZWN0cyhjb25maWcpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb2JqIDogb2JqcykgewogICAgICAgICBpZiAoY21IYXNMaXRlcmFsU3VmZml4KG9iaiwgIi5vYmoiKSkgewogICAgICAgICAgIGZvdXQgPDwgb2JqIDw8ICJcbiI7CkBAIC0xMDI0LDcgKzExNTQsOCBAQAogICAgIHN5bWxpbmtWYXJzWyJQT1NUX0JVSUxEIl0gPSBwb3N0QnVpbGRDbWRMaW5lOwogICB9CiAKLSAgc3RkOjpzdHJpbmcgY21ha2VWYXJMYW5nID0gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7CisgIHN0ZDo6c3RyaW5nIGNtYWtlVmFyTGFuZyA9CisgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpKTsKIAogICAvLyBidWlsZCByZXNwb25zZSBmaWxlIG5hbWUKICAgc3RkOjpzdHJpbmcgY21ha2VMaW5rVmFyID0gY21ha2VWYXJMYW5nICsgIl9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyI7CkBAIC0xMDMyLDggKzExNjMsOCBAQAogICBjb25zdCBjaGFyKiBmbGFnID0gR2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihjbWFrZUxpbmtWYXIpOwogCiAgIGJvb2wgY29uc3QgbGFuZ19zdXBwb3J0c19yZXNwb25zZSA9Ci0gICAgISh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UgPT0gIlJDIiB8fAotICAgICAgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSA9PSAiQ1VEQSIgJiYgIWZsYWcpKTsKKyAgICAhKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpID09ICJSQyIgfHwKKyAgICAgICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiQ1VEQSIgJiYgIWZsYWcpKTsKICAgaW50IGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQgPSAtMTsKICAgaWYgKCFsYW5nX3N1cHBvcnRzX3Jlc3BvbnNlIHx8ICF0aGlzLT5Gb3JjZVJlc3BvbnNlRmlsZSgpKSB7CiAgICAgY29tbWFuZExpbmVMZW5ndGhMaW1pdCA9CkBAIC0xMDQ1LDE4ICsxMTc2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0LT5HZXROYW1lKCkgKyAiLnJzcCIpOwogCiAgIC8vIEdhdGhlciBvcmRlci1vbmx5IGRlcGVuZGVuY2llcy4KLSAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0RGVwZW5kcyhndCwgbGlua0J1aWxkLk9yZGVyT25seURlcHMpOworICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXREZXBlbmRzKGd0LCBsaW5rQnVpbGQuT3JkZXJPbmx5RGVwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsIGZpbGVDb25maWcpOwogCiAgIC8vIEFkZCBvcmRlci1vbmx5IGRlcGVuZGVuY2llcyBvbiB2ZXJzaW9uaW5nIHN5bWxpbmtzIG9mIHNoYXJlZCBsaWJzIHdlIGxpbmsuCiAgIGlmICghdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5Jc0RMTFBsYXRmb3JtKCkpIHsKICAgICBpZiAoY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBjbGkgPQotICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpIHsKKyAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbihjb25maWcpKSB7CiAgICAgICBmb3IgKGF1dG8gY29uc3QmIGl0ZW0gOiBjbGktPkdldEl0ZW1zKCkpIHsKICAgICAgICAgaWYgKGl0ZW0uVGFyZ2V0ICYmCiAgICAgICAgICAgICBpdGVtLlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgJiYKICAgICAgICAgICAgICFpdGVtLlRhcmdldC0+SXNGcmFtZXdvcmtPbkFwcGxlKCkpIHsKLSAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGliID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAotICAgICAgICAgICAgaXRlbS5UYXJnZXQtPkdldEZ1bGxQYXRoKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOworICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaWIgPQorICAgICAgICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKGl0ZW0uVGFyZ2V0LT5HZXRGdWxsUGF0aChjb25maWcpKTsKICAgICAgICAgICBpZiAoc3RkOjpmaW5kKGxpbmtCdWlsZC5JbXBsaWNpdERlcHMuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWlsZC5JbXBsaWNpdERlcHMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsaWIpID09IGxpbmtCdWlsZC5JbXBsaWNpdERlcHMuZW5kKCkpIHsKQEAgLTEwNzcsMjQgKzEyMDksMjcgQEAKIAogICAvLyBXcml0ZSB0aGUgYnVpbGQgc3RhdGVtZW50IGZvciB0aGlzIHRhcmdldC4KICAgYm9vbCB1c2VkUmVzcG9uc2VGaWxlID0gZmFsc2U7Ci0gIGdsb2JhbEdlbi0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgbGlua0J1aWxkLAorICBnbG9iYWxHZW4tPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksIGxpbmtCdWlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQsICZ1c2VkUmVzcG9uc2VGaWxlKTsKLSAgdGhpcy0+V3JpdGVMaW5rUnVsZSh1c2VkUmVzcG9uc2VGaWxlKTsKKyAgdGhpcy0+V3JpdGVMaW5rUnVsZSh1c2VkUmVzcG9uc2VGaWxlLCBjb25maWcpOwogCiAgIGlmIChzeW1saW5rTmVlZGVkKSB7CiAgICAgaWYgKHRhcmdldFR5cGUgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7CiAgICAgICBjbU5pbmphQnVpbGQgYnVpbGQoIkNNQUtFX1NZTUxJTktfRVhFQ1VUQUJMRSIpOwogICAgICAgYnVpbGQuQ29tbWVudCA9ICJDcmVhdGUgZXhlY3V0YWJsZSBzeW1saW5rICIgKyB0YXJnZXRPdXRwdXQ7CiAgICAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0YXJnZXRPdXRwdXQpOworICAgICAgaWYgKGZpcnN0Rm9yQ29uZmlnKSB7CisgICAgICAgIGdsb2JhbEdlbi0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZykucHVzaF9iYWNrKHRhcmdldE91dHB1dCk7CisgICAgICB9CiAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHRhcmdldE91dHB1dFJlYWwpOwogICAgICAgYnVpbGQuVmFyaWFibGVzID0gc3RkOjptb3ZlKHN5bWxpbmtWYXJzKTsKLSAgICAgIGdsb2JhbEdlbi0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgICAgZ2xvYmFsR2VuLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpLCBidWlsZCk7CiAgICAgfSBlbHNlIHsKICAgICAgIGNtTmluamFCdWlsZCBidWlsZCgiQ01BS0VfU1lNTElOS19MSUJSQVJZIik7CiAgICAgICBidWlsZC5Db21tZW50ID0gIkNyZWF0ZSBsaWJyYXJ5IHN5bWxpbmsgIiArIHRhcmdldE91dHB1dDsKIAogICAgICAgc3RkOjpzdHJpbmcgY29uc3Qgc29OYW1lID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAotICAgICAgICB0aGlzLT5HZXRUYXJnZXRGaWxlUGF0aCh0aGlzLT5UYXJnZXROYW1lcy5TaGFyZWRPYmplY3QpKTsKKyAgICAgICAgdGhpcy0+R2V0VGFyZ2V0RmlsZVBhdGgodGd0TmFtZXMuU2hhcmVkT2JqZWN0LCBjb25maWcpKTsKICAgICAgIC8vIElmIG9uZSBsaW5rIGhhcyB0byBiZSBjcmVhdGVkLgogICAgICAgaWYgKHRhcmdldE91dHB1dFJlYWwgPT0gc29OYW1lIHx8IHRhcmdldE91dHB1dCA9PSBzb05hbWUpIHsKICAgICAgICAgc3ltbGlua1ZhcnNbIlNPTkFNRSJdID0KQEAgLTExMDMsMzMgKzEyMzgsNTggQEAKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHN5bWxpbmtWYXJzWyJTT05BTUUiXS5jbGVhcigpOwogICAgICAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayhzb05hbWUpOworICAgICAgICBpZiAoZmlyc3RGb3JDb25maWcpIHsKKyAgICAgICAgICBnbG9iYWxHZW4tPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldChjb25maWcpLnB1c2hfYmFjayhzb05hbWUpOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0YXJnZXRPdXRwdXQpOworICAgICAgaWYgKGZpcnN0Rm9yQ29uZmlnKSB7CisgICAgICAgIGdsb2JhbEdlbi0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZykucHVzaF9iYWNrKHRhcmdldE91dHB1dCk7CisgICAgICB9CiAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHRhcmdldE91dHB1dFJlYWwpOwogICAgICAgYnVpbGQuVmFyaWFibGVzID0gc3RkOjptb3ZlKHN5bWxpbmtWYXJzKTsKIAotICAgICAgZ2xvYmFsR2VuLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgICBnbG9iYWxHZW4tPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksIGJ1aWxkKTsKICAgICB9CiAgIH0KIAogICAvLyBBZGQgYWxpYXNlcyBmb3IgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lLgotICBnbG9iYWxHZW4tPkFkZFRhcmdldEFsaWFzKHRoaXMtPlRhcmdldE5hbWVzLk91dHB1dCwgZ3QpOwotICBnbG9iYWxHZW4tPkFkZFRhcmdldEFsaWFzKHRoaXMtPkdldFRhcmdldE5hbWUoKSwgZ3QpOworICBnbG9iYWxHZW4tPkFkZFRhcmdldEFsaWFzKHRndE5hbWVzLk91dHB1dCwgZ3QsIGNvbmZpZyk7CisgIGdsb2JhbEdlbi0+QWRkVGFyZ2V0QWxpYXModGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCBndCwgY29uZmlnKTsKIH0KIAotdm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZU9iamVjdExpYlN0YXRlbWVudCgpCit2b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OldyaXRlT2JqZWN0TGliU3RhdGVtZW50KAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICAvLyBXcml0ZSBhIHBob255IG91dHB1dCB0aGF0IGRlcGVuZHMgb24gYWxsIG9iamVjdCBmaWxlcy4KICAgewogICAgIGNtTmluamFCdWlsZCBidWlsZCgicGhvbnkiKTsKICAgICBidWlsZC5Db21tZW50ID0gIk9iamVjdCBsaWJyYXJ5ICIgKyB0aGlzLT5HZXRUYXJnZXROYW1lKCk7CiAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLk91dHB1dHMpOwotICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkdldE9iamVjdHMoKTsKLSAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuT3V0cHV0cywgY29uZmlnKTsKKyAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXRPdXRwdXRzKAorICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksCisgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZyksIGNvbmZpZyk7CisgICAgYnVpbGQuRXhwbGljaXREZXBzID0gdGhpcy0+R2V0T2JqZWN0cyhjb25maWcpOworICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSwgYnVpbGQpOwogICB9CiAKICAgLy8gQWRkIGFsaWFzZXMgZm9yIHRoZSB0YXJnZXQgbmFtZS4KLSAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFRhcmdldEFsaWFzKHRoaXMtPkdldFRhcmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpKTsKKyAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFRhcmdldEFsaWFzKAorICAgIHRoaXMtPkdldFRhcmdldE5hbWUoKSwgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksIGNvbmZpZyk7Cit9CisKK2NtR2VuZXJhdG9yVGFyZ2V0OjpOYW1lcyBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpUYXJnZXROYW1lcygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgeworICAgIHJldHVybiB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4ZWN1dGFibGVOYW1lcyhjb25maWcpOworICB9CisgIHJldHVybiB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpYnJhcnlOYW1lcyhjb25maWcpOworfQorCitzdGQ6OnN0cmluZyBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpUYXJnZXRMaW5rTGFuZ3VhZ2UoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKGNvbmZpZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuaAppbmRleCBlYmMxMjY4Li45ZGU5OWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTE3LDMwICsxNywzMyBAQAogICBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpOwogICB+Y21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCi0gIHZvaWQgR2VuZXJhdGUoKSBvdmVycmlkZTsKKyAgdm9pZCBHZW5lcmF0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VMaW5rZXJSdWxlKCkgY29uc3Q7Ci0gIHN0ZDo6c3RyaW5nIExhbmd1YWdlTGlua2VyRGV2aWNlUnVsZSgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBMYW5ndWFnZUxpbmtlclJ1bGUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIExhbmd1YWdlTGlua2VyRGV2aWNlUnVsZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICBjb25zdCBjaGFyKiBHZXRWaXNpYmxlVHlwZU5hbWUoKSBjb25zdDsKLSAgdm9pZCBXcml0ZUxhbmd1YWdlc1J1bGVzKCk7CisgIHZvaWQgV3JpdGVMYW5ndWFnZXNSdWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAotICB2b2lkIFdyaXRlTGlua1J1bGUoYm9vbCB1c2VSZXNwb25zZUZpbGUpOwotICB2b2lkIFdyaXRlRGV2aWNlTGlua1J1bGUoYm9vbCB1c2VSZXNwb25zZUZpbGUpOworICB2b2lkIFdyaXRlTGlua1J1bGUoYm9vbCB1c2VSZXNwb25zZUZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICB2b2lkIFdyaXRlRGV2aWNlTGlua1J1bGUoYm9vbCB1c2VSZXNwb25zZUZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCi0gIHZvaWQgV3JpdGVMaW5rU3RhdGVtZW50KCk7Ci0gIHZvaWQgV3JpdGVEZXZpY2VMaW5rU3RhdGVtZW50KCk7CisgIHZvaWQgV3JpdGVMaW5rU3RhdGVtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLCBib29sIGZpcnN0Rm9yQ29uZmlnKTsKKyAgdm9pZCBXcml0ZURldmljZUxpbmtTdGF0ZW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RGb3JDb25maWcpOwogCi0gIHZvaWQgV3JpdGVPYmplY3RMaWJTdGF0ZW1lbnQoKTsKKyAgdm9pZCBXcml0ZU9iamVjdExpYlN0YXRlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29tcHV0ZUxpbmtDbWQoKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbXB1dGVMaW5rQ21kKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29tcHV0ZURldmljZUxpbmtDbWQoKTsKIAogcHJpdmF0ZToKICAgLy8gVGFyZ2V0IG5hbWUgaW5mby4KLSAgY21HZW5lcmF0b3JUYXJnZXQ6Ok5hbWVzIFRhcmdldE5hbWVzOwotICBzdGQ6OnN0cmluZyBUYXJnZXRMaW5rTGFuZ3VhZ2U7CisgIGNtR2VuZXJhdG9yVGFyZ2V0OjpOYW1lcyBUYXJnZXROYW1lcyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgVGFyZ2V0TGlua0xhbmd1YWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBEZXZpY2VMaW5rT2JqZWN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDBhYWI5MTIuLjg4MzNmYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTEwLDExICsxMCwxMSBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgogI2luY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKQEAgLTU4LDE5ICs1OCwyNyBAQAogCiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpjbU5pbmphVGFyZ2V0R2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiAgIDogY21Db21tb25UYXJnZXRHZW5lcmF0b3IodGFyZ2V0KQotICAsIE1hY09TWENvbnRlbnRHZW5lcmF0b3IobnVsbHB0cikKICAgLCBPU1hCdW5kbGVHZW5lcmF0b3IobnVsbHB0cikKICAgLCBMb2NhbEdlbmVyYXRvcigKICAgICAgIHN0YXRpY19jYXN0PGNtTG9jYWxOaW5qYUdlbmVyYXRvcio+KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSkpCiB7Ci0gIE1hY09TWENvbnRlbnRHZW5lcmF0b3IgPSBjbTo6bWFrZV91bmlxdWU8TWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGU+KHRoaXMpOworICBmb3IgKGF1dG8gY29uc3QmIGZpbGVDb25maWcgOiB0YXJnZXQtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCkpIHsKKyAgICB0aGlzLT5Db25maWdzW2ZpbGVDb25maWddLk1hY09TWENvbnRlbnRHZW5lcmF0b3IgPQorICAgICAgY206Om1ha2VfdW5pcXVlPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPih0aGlzLCBmaWxlQ29uZmlnKTsKKyAgfQogfQogCiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjp+Y21OaW5qYVRhcmdldEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAotY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRCdWlsZEZpbGVTdHJlYW0oKSBjb25zdAorY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRJbXBsRmlsZVN0cmVhbSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuICp0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0QnVpbGRGaWxlU3RyZWFtKCk7CisgIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyk7Cit9CisKK2NtR2VuZXJhdGVkRmlsZVN0cmVhbSYgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0Q29tbW9uRmlsZVN0cmVhbSgpIGNvbnN0Cit7CisgIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldENvbW1vbkZpbGVTdHJlYW0oKTsKIH0KIAogY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRSdWxlc0ZpbGVTdHJlYW0oKSBjb25zdApAQCAtODQsMTcgKzkyLDIxIEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Okxhbmd1YWdlQ29tcGlsZXJSdWxlKAotICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgY29uc3QKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiBsYW5nICsgIl9DT01QSUxFUl9fIiArCi0gICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpOworICByZXR1cm4gY21TdHJDYXQoCisgICAgbGFuZywgIl9DT01QSUxFUl9fIiwKKyAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSksCisgICAgJ18nLCBjb25maWcpOwogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZVByZXByb2Nlc3NSdWxlKAotICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3QKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiBsYW5nICsgIl9QUkVQUk9DRVNTX18iICsKLSAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSk7CisgIHJldHVybiBjbVN0ckNhdCgKKyAgICBsYW5nLCAiX1BSRVBST0NFU1NfXyIsCisgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpLAorICAgICdfJywgY29uZmlnKTsKIH0KIAogYm9vbCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpOZWVkRXhwbGljaXRQcmVwcm9jZXNzaW5nKApAQCAtMTE3LDEwICsxMjksMTIgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VEeW5kZXBSdWxlKAotICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgY29uc3QKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiBsYW5nICsgIl9EWU5ERVBfXyIgKwotICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpKTsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIGxhbmcsICJfRFlOREVQX18iLAorICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpKSwKKyAgICAnXycsIGNvbmZpZyk7CiB9CiAKIGJvb2wgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TmVlZER5bmRlcChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3QKQEAgLTEyOCw5ICsxNDIsMTEgQEAKICAgcmV0dXJuIGxhbmcgPT0gIkZvcnRyYW4iOwogfQogCi1zdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoKQorc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICByZXR1cm4gImNtYWtlX29iamVjdF9vcmRlcl9kZXBlbmRzX3RhcmdldF8iICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpOworICByZXR1cm4gY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KAorICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgY29uZmlnKTsKIH0KIAogLy8gVE9ETzogTW9zdCBvZiB0aGUgY29kZSBpcyBwaWNrZWQgdXAgZnJvbQpAQCAtMTM4LDEwICsxNTQsMTAgQEAKIC8vIHZvaWQgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6V3JpdGVUYXJnZXRMYW5ndWFnZUZsYWdzKCkKIC8vIFJlZmFjdG9yIGl0Lgogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6Q29tcHV0ZUZsYWdzRm9yT2JqZWN0KAotICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBzdGQ6OnN0cmluZyBmbGFncyA9IHRoaXMtPkdldEZsYWdzKGxhbmd1YWdlKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY29uZmlnTmFtZSA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCk7CisgIHN0ZDo6c3RyaW5nIGZsYWdzID0gdGhpcy0+R2V0RmxhZ3MobGFuZ3VhZ2UsIGNvbmZpZyk7CiAKICAgLy8gQWRkIEZvcnRyYW4gZm9ybWF0IGZsYWdzLgogICBpZiAobGFuZ3VhZ2UgPT0gIkZvcnRyYW4iKSB7CkBAIC0xNTAsNyArMTY2LDcgQEAKIAogICAvLyBBZGQgc291cmNlIGZpbGUgc3BlY2lmaWMgZmxhZ3MuCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyIGdlbmV4SW50ZXJwcmV0ZXIoCi0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfRkxBR1MoIkNPTVBJTEVfRkxBR1MiKTsKICAgaWYgKGNvbnN0IGNoYXIqIGNmbGFncyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9GTEFHUykpIHsKQEAgLTE2NiwxNiArMTgyLDE2IEBACiAKICAgLy8gQWRkIHByZWNvbXBpbGUgaGVhZGVycyBjb21waWxlIG9wdGlvbnMuCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnTmFtZSwgbGFuZ3VhZ2UpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZ3VhZ2UpOwogCiAgIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKICAgICBzdGQ6OnN0cmluZyBwY2hPcHRpb25zOwogICAgIGlmIChzb3VyY2UtPkdldEZ1bGxQYXRoKCkgPT0gcGNoU291cmNlKSB7Ci0gICAgICBwY2hPcHRpb25zID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucygKLSAgICAgICAgY29uZmlnTmFtZSwgbGFuZ3VhZ2UpOworICAgICAgcGNoT3B0aW9ucyA9CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoY29uZmlnLCBsYW5ndWFnZSk7CiAgICAgfSBlbHNlIHsKICAgICAgIHBjaE9wdGlvbnMgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFVzZUNvbXBpbGVPcHRpb25zKGNvbmZpZ05hbWUsIGxhbmd1YWdlKTsKKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hVc2VDb21waWxlT3B0aW9ucyhjb25maWcsIGxhbmd1YWdlKTsKICAgICB9CiAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kQ29tcGlsZU9wdGlvbnMoCkBAIC0xODYsMTYgKzIwMiwxNyBAQAogfQogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkFkZEluY2x1ZGVGbGFncyhzdGQ6OnN0cmluZyYgbGFuZ3VhZ2VGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLCBjb25maWcpOwogICAvLyBBZGQgaW5jbHVkZSBkaXJlY3RvcnkgZmxhZ3MuCiAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVGbGFncyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRJbmNsdWRlRmxhZ3MoCiAgICAgaW5jbHVkZXMsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UsCiAgICAgbGFuZ3VhZ2UgPT0gIlJDIiwgLy8gZnVsbCBpbmNsdWRlIHBhdGhzIGZvciBSQyBuZWVkZWQgYnkgY21jbGRlcHMKLSAgICBmYWxzZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICBmYWxzZSwgY29uZmlnKTsKICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc0dDQ09uV2luZG93cygpKSB7CiAgICAgc3RkOjpyZXBsYWNlKGluY2x1ZGVGbGFncy5iZWdpbigpLCBpbmNsdWRlRmxhZ3MuZW5kKCksICdcXCcsICcvJyk7CiAgIH0KQEAgLTIwNSw4ICsyMjIsOCBAQAogCiBib29sIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok5lZWREZXBUeXBlTVNWQyhjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGRlcHR5cGUgPQotICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9OSU5KQV9ERVBUWVBFXyIgKyBsYW5nKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGRlcHR5cGUgPSB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigKKyAgICBjbVN0ckNhdCgiQ01BS0VfTklOSkFfREVQVFlQRV8iLCBsYW5nKSk7CiAgIGlmIChkZXB0eXBlID09ICJtc3ZjIikgewogICAgIHJldHVybiB0cnVlOwogICB9CkBAIC0yMzIsMTMgKzI0OSwxOCBAQAogLy8gVE9ETzogUmVmYWN0b3Igd2l0aAogLy8gdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVRhcmdldExhbmd1YWdlRmxhZ3MoKS4KIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVEZWZpbmVzKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGRlZmluZXM7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbmZpZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCk7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyIGdlbmV4SW50ZXJwcmV0ZXIoCiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5ndWFnZSk7CiAKKyAgLy8gU2VyaW91c2x5Pz8KKyAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICBkZWZpbmVzLmluc2VydChjbVN0ckNhdCgiQ01BS0VfSU5URElSPVwiIiwgY29uZmlnLCAnIicpKTsKKyAgfQorCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfREVGSU5JVElPTlMoIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKICAgaWYgKGNvbnN0IGNoYXIqIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRGVmaW5lcygKQEAgLTI1MywxNyArMjc1LDE3IEBACiAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbmZpZ19jb21waWxlX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIGRlZmluZXNTdHJpbmcgPSB0aGlzLT5HZXREZWZpbmVzKGxhbmd1YWdlKTsKKyAgc3RkOjpzdHJpbmcgZGVmaW5lc1N0cmluZyA9IHRoaXMtPkdldERlZmluZXMobGFuZ3VhZ2UsIGNvbmZpZyk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Kb2luRGVmaW5lcyhkZWZpbmVzLCBkZWZpbmVzU3RyaW5nLCBsYW5ndWFnZSk7CiAKICAgcmV0dXJuIGRlZmluZXNTdHJpbmc7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVJbmNsdWRlcygKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSkKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwotICBjb25zdCBzdGQ6OnN0cmluZyBjb25maWcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q29uZmlnTmFtZSgpOwogICBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlciBnZW5leEludGVycHJldGVyKAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOwogCkBAIC0yNzcsMTMgKzI5OSwxMyBAQAogICBzdGQ6OnN0cmluZyBpbmNsdWRlc1N0cmluZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRJbmNsdWRlRmxhZ3MoCiAgICAgaW5jbHVkZXMsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UsIHRydWUsIGZhbHNlLCBjb25maWcpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoaW5jbHVkZXNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRJbmNsdWRlcyhsYW5ndWFnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0SW5jbHVkZXMobGFuZ3VhZ2UsIGNvbmZpZykpOwogCiAgIHJldHVybiBpbmNsdWRlc1N0cmluZzsKIH0KIAogY21OaW5qYURlcHMgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6Q29tcHV0ZUxpbmtEZXBzKAotICBjb25zdCBzdGQ6OnN0cmluZyYgbGlua0xhbmd1YWdlKSBjb25zdAorICBjb25zdCBzdGQ6OnN0cmluZyYgbGlua0xhbmd1YWdlLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewogICAvLyBTdGF0aWMgbGlicmFyaWVzIG5ldmVyIGRlcGVuZCBvbiBvdGhlciB0YXJnZXRzIGZvciBsaW5raW5nLgogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSB8fApAQCAtMjkyLDcgKzMxNCw3IEBACiAgIH0KIAogICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rSW5mb3JtYXRpb24odGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbihjb25maWcpOwogICBpZiAoIWNsaSkgewogICAgIHJldHVybiBjbU5pbmphRGVwcygpOwogICB9CkBAIC0zMDMsOCArMzI1LDcgQEAKIAogICAvLyBBZGQgYSBkZXBlbmRlbmN5IG9uIHRoZSBsaW5rIGRlZmluaXRpb25zIGZpbGUsIGlmIGFueS4KICAgaWYgKGNtR2VuZXJhdG9yVGFyZ2V0OjpNb2R1bGVEZWZpbml0aW9uSW5mbyBjb25zdCogbWRpID0KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNb2R1bGVEZWZpbml0aW9uSW5mbygKLSAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpKSB7CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TW9kdWxlRGVmaW5pdGlvbkluZm8oY29uZmlnKSkgewogICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzcmMgOiBtZGktPlNvdXJjZXMpIHsKICAgICAgIHJlc3VsdC5wdXNoX2JhY2sodGhpcy0+Q29udmVydFRvTmluamFQYXRoKHNyYy0+R2V0RnVsbFBhdGgoKSkpOwogICAgIH0KQEAgLTMxMiwxNSArMzMzLDE0IEBACiAKICAgLy8gQWRkIGEgZGVwZW5kZW5jeSBvbiB1c2VyLXNwZWNpZmllZCBtYW5pZmVzdCBmaWxlcywgaWYgYW55LgogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBtYW5pZmVzdF9zcmNzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE1hbmlmZXN0cyhtYW5pZmVzdF9zcmNzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgY29uZmlnKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG1hbmlmZXN0X3NyYyA6IG1hbmlmZXN0X3NyY3MpIHsKICAgICByZXN1bHQucHVzaF9iYWNrKHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChtYW5pZmVzdF9zcmMtPkdldEZ1bGxQYXRoKCkpKTsKICAgfQogCiAgIC8vIEFkZCB1c2VyLXNwZWNpZmllZCBkZXBlbmRlbmNpZXMuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rRGVwczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rRGVwZW5kcyhsaW5rRGVwcywgdGhpcy0+Q29uZmlnTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtEZXBlbmRzKGxpbmtEZXBzLCBjb25maWcsIGxpbmtMYW5ndWFnZSk7CiAgIHN0ZDo6dHJhbnNmb3JtKGxpbmtEZXBzLmJlZ2luKCksIGxpbmtEZXBzLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIocmVzdWx0KSwKICAgICAgICAgICAgICAgICAgTWFwVG9OaW5qYVBhdGgoKSk7CiAKQEAgLTMzNCwyMSArMzU0LDIxIEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkdldE9iamVjdEZpbGVQYXRoKAotICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkgY29uc3QKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SG9tZVJlbGF0aXZlT3V0cHV0UGF0aCgpOwogICBpZiAoIXBhdGguZW1wdHkoKSkgewotICAgIHBhdGggKz0gIi8iOworICAgIHBhdGggKz0gJy8nOwogICB9CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvYmplY3ROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPYmplY3ROYW1lKHNvdXJjZSk7Ci0gIHBhdGggKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwotICBwYXRoICs9ICIvIjsKLSAgcGF0aCArPSBvYmplY3ROYW1lOworICBwYXRoICs9IGNtU3RyQ2F0KAorICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZyksICcvJywgb2JqZWN0TmFtZSk7CiAgIHJldHVybiBwYXRoOwogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRQcmVwcm9jZXNzZWRGaWxlUGF0aCgKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UpIGNvbnN0CisgIGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewogICAvLyBDaG9vc2UgYW4gZXh0ZW5zaW9uIHRvIGNvbXBpbGUgYWxyZWFkeS1wcmVwcm9jZXNzZWQgc291cmNlLgogICBzdGQ6OnN0cmluZyBwcEV4dCA9IHNvdXJjZS0+R2V0RXh0ZW5zaW9uKCk7CkBAIC0zNzEsNTcgKzM5MSw1NyBAQAogICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRMYW5ndWFnZU91dHB1dEV4dGVuc2lvbigqc291cmNlKTsKICAgYXNzZXJ0KG9iak5hbWUuc2l6ZSgpID49IG9iakV4dC5zaXplKCkpOwogICBzdGQ6OnN0cmluZyBjb25zdCBwcE5hbWUgPQotICAgIG9iak5hbWUuc3Vic3RyKDAsIG9iak5hbWUuc2l6ZSgpIC0gb2JqRXh0LnNpemUoKSkgKyAiLXBwLiIgKyBwcEV4dDsKKyAgICBjbVN0ckNhdChvYmpOYW1lLnN1YnN0cigwLCBvYmpOYW1lLnNpemUoKSAtIG9iakV4dC5zaXplKCkpLCAiLXBwLiIsIHBwRXh0KTsKIAogICBzdGQ6OnN0cmluZyBwYXRoID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEhvbWVSZWxhdGl2ZU91dHB1dFBhdGgoKTsKICAgaWYgKCFwYXRoLmVtcHR5KCkpIHsKLSAgICBwYXRoICs9ICIvIjsKKyAgICBwYXRoICs9ICcvJzsKICAgfQotICBwYXRoICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKLSAgcGF0aCArPSAiLyI7Ci0gIHBhdGggKz0gcHBOYW1lOworICBwYXRoICs9CisgICAgY21TdHJDYXQodGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpLAorICAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Db25maWdEaXJlY3RvcnkoY29uZmlnKSwgJy8nLCBwcE5hbWUpOwogICByZXR1cm4gcGF0aDsKIH0KIAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0RHluZGVwRmlsZVBhdGgoCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdAorICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRIb21lUmVsYXRpdmVPdXRwdXRQYXRoKCk7CiAgIGlmICghcGF0aC5lbXB0eSgpKSB7Ci0gICAgcGF0aCArPSAiLyI7CisgICAgcGF0aCArPSAnLyc7CiAgIH0KLSAgcGF0aCArPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCk7Ci0gIHBhdGggKz0gIi8iOwotICBwYXRoICs9IGxhbmc7Ci0gIHBhdGggKz0gIi5kZCI7CisgIHBhdGggKz0gY21TdHJDYXQoCisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpLAorICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Db25maWdEaXJlY3RvcnkoY29uZmlnKSwgJy8nLCBsYW5nLCAiLmRkIik7CiAgIHJldHVybiBwYXRoOwogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRUYXJnZXREZXBlbmRJbmZvUGF0aCgKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewogICBzdGQ6OnN0cmluZyBwYXRoID0KICAgICBjbVN0ckNhdCh0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsCiAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpLAotICAgICAgICAgICAgICcvJywgbGFuZywgIkRlcGVuZEluZm8uanNvbiIpOworICAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Db25maWdEaXJlY3RvcnkoY29uZmlnKSwgJy8nLCBsYW5nLAorICAgICAgICAgICAgICJEZXBlbmRJbmZvLmpzb24iKTsKICAgcmV0dXJuIHBhdGg7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkdldFRhcmdldE91dHB1dERpcigpIGNvbnN0CitzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRUYXJnZXRPdXRwdXREaXIoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHN0ZDo6c3RyaW5nIGRpciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgIHN0ZDo6c3RyaW5nIGRpciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KGNvbmZpZyk7CiAgIHJldHVybiBDb252ZXJ0VG9OaW5qYVBhdGgoZGlyKTsKIH0KIAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0VGFyZ2V0RmlsZVBhdGgoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAorICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPkdldFRhcmdldE91dHB1dERpcigpOworICBzdGQ6OnN0cmluZyBwYXRoID0gdGhpcy0+R2V0VGFyZ2V0T3V0cHV0RGlyKGNvbmZpZyk7CiAgIGlmIChwYXRoLmVtcHR5KCkgfHwgcGF0aCA9PSAiLiIpIHsKICAgICByZXR1cm4gbmFtZTsKICAgfQotICBwYXRoICs9ICIvIjsKLSAgcGF0aCArPSBuYW1lOworICBwYXRoICs9IGNtU3RyQ2F0KCcvJywgbmFtZSk7CiAgIHJldHVybiBwYXRoOwogfQogCkBAIC00MzAsMjEgKzQ1MCwyMSBAQAogICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCk7CiB9CiAKLWJvb2wgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6U2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKGNtTmluamFWYXJzJiB2YXJzKSBjb25zdAorYm9vbCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpTZXRNc3ZjVGFyZ2V0UGRiVmFyaWFibGUoCisgIGNtTmluamFWYXJzJiB2YXJzLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewogICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkdldE1ha2VmaWxlKCk7CiAgIGlmIChtZi0+R2V0RGVmaW5pdGlvbigiTVNWQ19DX0FSQ0hJVEVDVFVSRV9JRCIpIHx8CiAgICAgICBtZi0+R2V0RGVmaW5pdGlvbigiTVNWQ19DWFhfQVJDSElURUNUVVJFX0lEIikgfHwKICAgICAgIG1mLT5HZXREZWZpbml0aW9uKCJNU1ZDX0NVREFfQVJDSElURUNUVVJFX0lEIikpIHsKICAgICBzdGQ6OnN0cmluZyBwZGJQYXRoOwotICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVQZGJQYXRoID0gdGhpcy0+Q29tcHV0ZVRhcmdldENvbXBpbGVQREIoKTsKKyAgICBzdGQ6OnN0cmluZyBjb21waWxlUGRiUGF0aCA9IHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKGNvbmZpZyk7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSB8fAogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgewotICAgICAgcGRiUGF0aCA9IGNtU3RyQ2F0KAotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQkRpcmVjdG9yeSh0aGlzLT5HZXRDb25maWdOYW1lKCkpLCAnLycsCi0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCTmFtZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpKTsKKyAgICAgIHBkYlBhdGggPSBjbVN0ckNhdCh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQkRpcmVjdG9yeShjb25maWcpLCAnLycsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJOYW1lKGNvbmZpZykpOwogICAgIH0KIAogICAgIHZhcnNbIlRBUkdFVF9QREIiXSA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKQEAgLTQ2MCwyMCArNDgwLDIyIEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUxhbmd1YWdlUnVsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQordm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUxhbmd1YWdlUnVsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICNpZmRlZiBOSU5KQV9HRU5fVkVSQk9TRV9GSUxFUwogICB0aGlzLT5HZXRSdWxlc0ZpbGVTdHJlYW0oKSA8PCAiIyBSdWxlcyBmb3IgbGFuZ3VhZ2UgIiA8PCBsYW5ndWFnZSA8PCAiXG5cbiI7CiAjZW5kaWYKLSAgdGhpcy0+V3JpdGVDb21waWxlUnVsZShsYW5ndWFnZSk7CisgIHRoaXMtPldyaXRlQ29tcGlsZVJ1bGUobGFuZ3VhZ2UsIGNvbmZpZyk7CiB9CiAKLXZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVDb21waWxlUnVsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykKK3ZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVDb21waWxlUnVsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKS5jX3N0cigpOwogICB2YXJzLkNNVGFyZ2V0VHlwZSA9Ci0gICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSk7CisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkuY19zdHIoKTsKICAgdmFycy5MYW5ndWFnZSA9IGxhbmcuY19zdHIoKTsKICAgdmFycy5Tb3VyY2UgPSAiJGluIjsKICAgdmFycy5PYmplY3QgPSAiJG91dCI7CkBAIC00OTgsNyArNTIwLDcgQEAKICAgYm9vbCBjb25zdCBsYW5nX3N1cHBvcnRzX3Jlc3BvbnNlID0gbGFuZyAhPSAiUkMiOwogICBpZiAobGFuZ19zdXBwb3J0c19yZXNwb25zZSAmJiB0aGlzLT5Gb3JjZVJlc3BvbnNlRmlsZSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QgcmVzcG9uc2VGbGFnVmFyID0KLSAgICAgICJDTUFLRV8iICsgbGFuZyArICJfUkVTUE9OU0VfRklMRV9GTEFHIjsKKyAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1JFU1BPTlNFX0ZJTEVfRkxBRyIpOwogICAgIHJlc3BvbnNlRmxhZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihyZXNwb25zZUZsYWdWYXIpOwogICAgIGlmIChyZXNwb25zZUZsYWcuZW1wdHkoKSAmJiBsYW5nICE9ICJDVURBIikgewogICAgICAgcmVzcG9uc2VGbGFnID0gIkAiOwpAQCAtNTA5LDcgKzUzMSw3IEBACiAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q3JlYXRlUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIoKSk7CiAKICAgc3RkOjpzdHJpbmcgY29uc3QgdGRpID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgIENvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRUYXJnZXREZXBlbmRJbmZvUGF0aChsYW5nKSksCisgICAgQ29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldFRhcmdldERlcGVuZEluZm9QYXRoKGxhbmcsIGNvbmZpZykpLAogICAgIGNtTG9jYWxHZW5lcmF0b3I6OlNIRUxMKTsKIAogICBzdGQ6OnN0cmluZyBsYXVuY2hlcjsKQEAgLTUyNCw3ICs1NDYsNyBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksIGNtTG9jYWxHZW5lcmF0b3I6OlNIRUxMKTsKIAogICBpZiAoZXhwbGljaXRQUCkgewotICAgIGNtTmluamFSdWxlIHJ1bGUodGhpcy0+TGFuZ3VhZ2VQcmVwcm9jZXNzUnVsZShsYW5nKSk7CisgICAgY21OaW5qYVJ1bGUgcnVsZSh0aGlzLT5MYW5ndWFnZVByZXByb2Nlc3NSdWxlKGxhbmcsIGNvbmZpZykpOwogICAgIC8vIEV4cGxpY2l0IHByZXByb2Nlc3NpbmcgYWx3YXlzIHVzZXMgYSBkZXBmaWxlLgogICAgIHJ1bGUuRGVwVHlwZSA9ICIiOyAvLyBubyBkZXBzPSBmb3IgbXVsdGlwbGUgb3V0cHV0cwogICAgIHJ1bGUuRGVwRmlsZSA9ICIkREVQX0ZJTEUiOwpAQCAtNTYzLDcgKzU4NSw3IEBACiAgICAgICBydWxlLlJzcEZpbGUgPSAiJFJTUF9GSUxFIjsKICAgICAgIHJ1bGUuUnNwQ29udGVudCA9CiAgICAgICAgIGNtU3RyQ2F0KCcgJywgcHBWYXJzLkRlZmluZXMsICcgJywgcHBWYXJzLkluY2x1ZGVzLCAnICcsIHBwRmxhZ3MpOwotICAgICAgcHBGbGFncyA9IHJlc3BvbnNlRmxhZyArIHJ1bGUuUnNwRmlsZTsKKyAgICAgIHBwRmxhZ3MgPSBjbVN0ckNhdChyZXNwb25zZUZsYWcsIHJ1bGUuUnNwRmlsZSk7CiAgICAgICBwcFZhcnMuRGVmaW5lcyA9ICIiOwogICAgICAgcHBWYXJzLkluY2x1ZGVzID0gIiI7CiAgICAgfQpAQCAtNjA0LDcgKzYyNiw3IEBACiAKICAgaWYgKG5lZWREeW5kZXApIHsKICAgICAvLyBXcml0ZSB0aGUgcnVsZSBmb3IgbmluamEgZHluZGVwIGZpbGUgZ2VuZXJhdGlvbi4KLSAgICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlRHluZGVwUnVsZShsYW5nKSk7CisgICAgY21OaW5qYVJ1bGUgcnVsZSh0aGlzLT5MYW5ndWFnZUR5bmRlcFJ1bGUobGFuZywgY29uZmlnKSk7CiAgICAgLy8gQ29tbWFuZCBsaW5lIGxlbmd0aCBpcyBhbG1vc3QgYWx3YXlzIGxpbWl0ZWQgLT4gdXNlIHJlc3BvbnNlIGZpbGUgZm9yCiAgICAgLy8gZHluZGVwIHJ1bGVzCiAgICAgcnVsZS5Sc3BGaWxlID0gIiRvdXQucnNwIjsKQEAgLTYyOCwxMyArNjUwLDEzIEBACiAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocnVsZSk7CiAgIH0KIAotICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlQ29tcGlsZXJSdWxlKGxhbmcpKTsKKyAgY21OaW5qYVJ1bGUgcnVsZSh0aGlzLT5MYW5ndWFnZUNvbXBpbGVyUnVsZShsYW5nLCBjb25maWcpKTsKICAgLy8gSWYgdXNpbmcgYSByZXNwb25zZSBmaWxlLCBtb3ZlIGRlZmluZXMsIGluY2x1ZGVzLCBhbmQgZmxhZ3MgaW50byBpdC4KICAgaWYgKCFyZXNwb25zZUZsYWcuZW1wdHkoKSkgewogICAgIHJ1bGUuUnNwRmlsZSA9ICIkUlNQX0ZJTEUiOwogICAgIHJ1bGUuUnNwQ29udGVudCA9CiAgICAgICBjbVN0ckNhdCgnICcsIHZhcnMuRGVmaW5lcywgJyAnLCB2YXJzLkluY2x1ZGVzLCAnICcsIGZsYWdzKTsKLSAgICBmbGFncyA9IHJlc3BvbnNlRmxhZyArIHJ1bGUuUnNwRmlsZTsKKyAgICBmbGFncyA9IGNtU3RyQ2F0KHJlc3BvbnNlRmxhZywgcnVsZS5Sc3BGaWxlKTsKICAgICB2YXJzLkRlZmluZXMgPSAiIjsKICAgICB2YXJzLkluY2x1ZGVzID0gIiI7CiAgIH0KQEAgLTY0Nyw3ICs2NjksNyBAQAogICAgIHJ1bGUuRGVwVHlwZSA9ICJtc3ZjIjsKICAgICBydWxlLkRlcEZpbGUuY2xlYXIoKTsKICAgICBmbGFncyArPSAiIC9zaG93SW5jbHVkZXMiOwotICB9IGVsc2UgaWYgKG1mLT5Jc09uKCJDTUFLRV9OSU5KQV9DTUNMREVQU18iICsgbGFuZykpIHsKKyAgfSBlbHNlIGlmIChtZi0+SXNPbihjbVN0ckNhdCgiQ01BS0VfTklOSkFfQ01DTERFUFNfIiwgbGFuZykpKSB7CiAgICAgLy8gRm9yIHRoZSBNUyByZXNvdXJjZSBjb21waWxlciB3ZSBuZWVkIGNtY2xkZXBzLCBidXQgc2tpcCBkZXBlbmRlbmNpZXMKICAgICAvLyBmb3Igc291cmNlLWZpbGUgdHJ5X2NvbXBpbGUgY2FzZXMgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZnJlc2guCiAgICAgaWYgKCFtZi0+R2V0SXNTb3VyY2VGaWxlVHJ5Q29tcGlsZSgpKSB7CkBAIC02NjQsMTQgKzY4NiwxNCBAQAogICB9IGVsc2UgewogICAgIHJ1bGUuRGVwVHlwZSA9ICJnY2MiOwogICAgIHJ1bGUuRGVwRmlsZSA9ICIkREVQX0ZJTEUiOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZsYWdzTmFtZSA9ICJDTUFLRV9ERVBGSUxFX0ZMQUdTXyIgKyBsYW5nOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZsYWdzTmFtZSA9IGNtU3RyQ2F0KCJDTUFLRV9ERVBGSUxFX0ZMQUdTXyIsIGxhbmcpOwogICAgIHN0ZDo6c3RyaW5nIGRlcGZpbGVGbGFncyA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbihmbGFnc05hbWUpOwogICAgIGlmICghZGVwZmlsZUZsYWdzLmVtcHR5KCkpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoZGVwZmlsZUZsYWdzLCAiPERFUEZJTEU+IiwgIiRERVBfRklMRSIpOwogICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhkZXBmaWxlRmxhZ3MsICI8T0JKRUNUPiIsICIkb3V0Iik7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGRlcGZpbGVGbGFncywgIjxDTUFLRV9DX0NPTVBJTEVSPiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9DX0NPTVBJTEVSIikpOwotICAgICAgZmxhZ3MgKz0gIiAiICsgZGVwZmlsZUZsYWdzOworICAgICAgZmxhZ3MgKz0gY21TdHJDYXQoJyAnLCBkZXBmaWxlRmxhZ3MpOwogICAgIH0KICAgfQogCkBAIC02OTQsNyArNzE2LDcgQEAKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGlsZUNtZCA9IG1mLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwogICB9IGVsc2UgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNtZFZhciA9ICJDTUFLRV8iICsgbGFuZyArICJfQ09NUElMRV9PQkpFQ1QiOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNtZFZhciA9IGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0NPTVBJTEVfT0JKRUNUIik7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBpbGVDbWQgPSBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKGNtZFZhcik7CiAgICAgY21FeHBhbmRMaXN0KGNvbXBpbGVDbWQsIGNvbXBpbGVDbWRzKTsKICAgfQpAQCAtNzA0LDcgKzcyNiw3IEBACiAgIGlmICghY29tcGlsZUNtZHMuZW1wdHkoKSAmJgogICAgICAgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIkNYWCIgfHwgbGFuZyA9PSAiRm9ydHJhbiIgfHwgbGFuZyA9PSAiQ1VEQSIgfHwKICAgICAgICBsYW5nID09ICJPQkpDIiB8fCBsYW5nID09ICJPQkpDWFgiKSkgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNsYXVuY2hlcl9wcm9wID0gbGFuZyArICJfQ09NUElMRVJfTEFVTkNIRVIiOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNsYXVuY2hlcl9wcm9wID0gY21TdHJDYXQobGFuZywgIl9DT01QSUxFUl9MQVVOQ0hFUiIpOwogICAgIGNvbnN0IGNoYXIqIGNsYXVuY2hlciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY2xhdW5jaGVyX3Byb3ApOwogICAgIGlmIChjbGF1bmNoZXIgJiYgKmNsYXVuY2hlcikgewogICAgICAgY29tcGlsZXJMYXVuY2hlciA9IGNsYXVuY2hlcjsKQEAgLTcxMywxMyArNzM1LDEzIEBACiAKICAgLy8gTWF5YmUgaW5zZXJ0IGFuIGluY2x1ZGUtd2hhdC15b3UtdXNlIHJ1bm5lci4KICAgaWYgKCFjb21waWxlQ21kcy5lbXB0eSgpICYmIChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiKSkgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGl3eXVfcHJvcCA9IGxhbmcgKyAiX0lOQ0xVREVfV0hBVF9ZT1VfVVNFIjsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBpd3l1X3Byb3AgPSBjbVN0ckNhdChsYW5nLCAiX0lOQ0xVREVfV0hBVF9ZT1VfVVNFIik7CiAgICAgY29uc3QgY2hhciogaXd5dSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoaXd5dV9wcm9wKTsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCB0aWR5X3Byb3AgPSBsYW5nICsgIl9DTEFOR19USURZIjsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCB0aWR5X3Byb3AgPSBjbVN0ckNhdChsYW5nLCAiX0NMQU5HX1RJRFkiKTsKICAgICBjb25zdCBjaGFyKiB0aWR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSh0aWR5X3Byb3ApOwotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGxhbmcgKyAiX0NQUExJTlQiOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGNtU3RyQ2F0KGxhbmcsICJfQ1BQTElOVCIpOwogICAgIGNvbnN0IGNoYXIqIGNwcGxpbnQgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNwcGxpbnRfcHJvcCk7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgY3BwY2hlY2tfcHJvcCA9IGxhbmcgKyAiX0NQUENIRUNLIjsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBjcHBjaGVja19wcm9wID0gY21TdHJDYXQobGFuZywgIl9DUFBDSEVDSyIpOwogICAgIGNvbnN0IGNoYXIqIGNwcGNoZWNrID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBjaGVja19wcm9wKTsKICAgICBpZiAoKGl3eXUgJiYgKml3eXUpIHx8ICh0aWR5ICYmICp0aWR5KSB8fCAoY3BwbGludCAmJiAqY3BwbGludCkgfHwKICAgICAgICAgKGNwcGNoZWNrICYmICpjcHBjaGVjaykpIHsKQEAgLTcyNywyNSArNzQ5LDMyIEBACiAgICAgICBpZiAoIWNvbXBpbGVyTGF1bmNoZXIuZW1wdHkoKSkgewogICAgICAgICAvLyBJbiBfX3J1bl9jb19jb21waWxlIGNhc2UgdGhlIGxhdW5jaGVyIGNvbW1hbmQgaXMgc3VwcGxpZWQKICAgICAgICAgLy8gdmlhIC0tbGF1bmNoZXI9PG1heWJlLWxpc3Q+IGFuZCBjb25zdW1lZAotICAgICAgICBydW5faXd5dSArPSAiIC0tbGF1bmNoZXI9IjsKLSAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKGNvbXBpbGVyTGF1bmNoZXIpOworICAgICAgICBydW5faXd5dSArPQorICAgICAgICAgIGNtU3RyQ2F0KCIgLS1sYXVuY2hlcj0iLAorICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbChjb21waWxlckxhdW5jaGVyKSk7CiAgICAgICAgIGNvbXBpbGVyTGF1bmNoZXIuY2xlYXIoKTsKICAgICAgIH0KICAgICAgIGlmIChpd3l1ICYmICppd3l1KSB7Ci0gICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1pd3l1PSI7Ci0gICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKGl3eXUpOworICAgICAgICBydW5faXd5dSArPSBjbVN0ckNhdCgiIC0taXd5dT0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChpd3l1KSk7CiAgICAgICB9CiAgICAgICBpZiAodGlkeSAmJiAqdGlkeSkgewogICAgICAgICBydW5faXd5dSArPSAiIC0tdGlkeT0iOwotICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbCh0aWR5KTsKKyAgICAgICAgY29uc3QgY2hhciogZHJpdmVyTW9kZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAorICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0NMQU5HX1RJRFlfRFJJVkVSX01PREUiKSk7CisgICAgICAgIGlmICghKGRyaXZlck1vZGUgJiYgKmRyaXZlck1vZGUpKSB7CisgICAgICAgICAgZHJpdmVyTW9kZSA9IGxhbmcgPT0gIkMiID8gImdjYyIgOiAiZysrIjsKKyAgICAgICAgfQorICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbCgKKyAgICAgICAgICBjbVN0ckNhdCh0aWR5LCAiOy0tZXh0cmEtYXJnLWJlZm9yZT0tLWRyaXZlci1tb2RlPSIsIGRyaXZlck1vZGUpKTsKICAgICAgIH0KICAgICAgIGlmIChjcHBsaW50ICYmICpjcHBsaW50KSB7Ci0gICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBsaW50PSI7Ci0gICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKGNwcGxpbnQpOworICAgICAgICBydW5faXd5dSArPSBjbVN0ckNhdCgKKyAgICAgICAgICAiIC0tY3BwbGludD0iLCB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChjcHBsaW50KSk7CiAgICAgICB9CiAgICAgICBpZiAoY3BwY2hlY2sgJiYgKmNwcGNoZWNrKSB7Ci0gICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBjaGVjaz0iOwotICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChjcHBjaGVjayk7CisgICAgICAgIHJ1bl9pd3l1ICs9IGNtU3RyQ2F0KAorICAgICAgICAgICIgLS1jcHBjaGVjaz0iLCB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChjcHBjaGVjaykpOwogICAgICAgfQogICAgICAgaWYgKCh0aWR5ICYmICp0aWR5KSB8fCAoY3BwbGludCAmJiAqY3BwbGludCkgfHwKICAgICAgICAgICAoY3BwY2hlY2sgJiYgKmNwcGNoZWNrKSkgewpAQCAtNzY3LDcgKzc5Niw3IEBACiAgICAgICAgIGkgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoaSk7CiAgICAgICB9CiAgICAgfQotICAgIGNvbXBpbGVDbWRzLmZyb250KCkuaW5zZXJ0KDAsIGNtSm9pbihhcmdzLCAiICIpICsgIiAiKTsKKyAgICBjb21waWxlQ21kcy5mcm9udCgpLmluc2VydCgwLCBjbVN0ckNhdChjbUpvaW4oYXJncywgIiAiKSwgJyAnKSk7CiAgIH0KIAogICBpZiAoIWNvbXBpbGVDbWRzLmVtcHR5KCkpIHsKQEAgLTc4OCw3MCArODE3LDc1IEBACiAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRSdWxlKHJ1bGUpOwogfQogCi12b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OldyaXRlT2JqZWN0QnVpbGRTdGF0ZW1lbnRzKCkKK3ZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudHMoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLAorICBib29sIGZpcnN0Rm9yQ29uZmlnKQogewogICAvLyBXcml0ZSBjb21tZW50cy4KLSAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpKTsKLSAgdGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkKKyAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpKTsKKyAgdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZykKICAgICA8PCAiIyBPYmplY3QgYnVpbGQgc3RhdGVtZW50cyBmb3IgIgogICAgIDw8IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCkpCiAgICAgPDwgIiB0YXJnZXQgIiA8PCB0aGlzLT5HZXRUYXJnZXROYW1lKCkgPDwgIlxuXG4iOwogCiAgIHsKICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBjdXN0b21Db21tYW5kczsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEN1c3RvbUNvbW1hbmRzKGN1c3RvbUNvbW1hbmRzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEN1c3RvbUNvbW1hbmRzKGN1c3RvbUNvbW1hbmRzLCBjb25maWcpOwogICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA6IGN1c3RvbUNvbW1hbmRzKSB7CiAgICAgICBjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjID0gc2YtPkdldEN1c3RvbUNvbW1hbmQoKTsKICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFkZEN1c3RvbUNvbW1hbmRUYXJnZXQoCiAgICAgICAgIGNjLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSk7CiAgICAgICAvLyBSZWNvcmQgdGhlIGN1c3RvbSBjb21tYW5kcyBmb3IgdGhpcyB0YXJnZXQuIFRoZSBjb250YWluZXIgaXMgdXNlZAogICAgICAgLy8gaW4gV3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudCB3aGVuIGNhbGxlZCBpbiBhIGxvb3AgYmVsb3cuCi0gICAgICB0aGlzLT5DdXN0b21Db21tYW5kcy5wdXNoX2JhY2soY2MpOworICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLkN1c3RvbUNvbW1hbmRzLnB1c2hfYmFjayhjYyk7CiAgICAgfQogICB9CiAgIHsKICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBoZWFkZXJTb3VyY2VzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0SGVhZGVyU291cmNlcyhoZWFkZXJTb3VyY2VzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEhlYWRlclNvdXJjZXMoaGVhZGVyU291cmNlcywgY29uZmlnKTsKICAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCi0gICAgICBoZWFkZXJTb3VyY2VzLCB0aGlzLT5NYWNPU1hDb250ZW50R2VuZXJhdG9yLmdldCgpKTsKKyAgICAgIGhlYWRlclNvdXJjZXMsIHRoaXMtPkNvbmZpZ3NbZmlsZUNvbmZpZ10uTWFjT1NYQ29udGVudEdlbmVyYXRvci5nZXQoKSwKKyAgICAgIGNvbmZpZyk7CiAgIH0KICAgewogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGV4dHJhU291cmNlczsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4dHJhU291cmNlcyhleHRyYVNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0cmFTb3VyY2VzKGV4dHJhU291cmNlcywgY29uZmlnKTsKICAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCi0gICAgICBleHRyYVNvdXJjZXMsIHRoaXMtPk1hY09TWENvbnRlbnRHZW5lcmF0b3IuZ2V0KCkpOworICAgICAgZXh0cmFTb3VyY2VzLCB0aGlzLT5Db25maWdzW2ZpbGVDb25maWddLk1hY09TWENvbnRlbnRHZW5lcmF0b3IuZ2V0KCksCisgICAgICBjb25maWcpOwogICB9Ci0gIHsKKyAgaWYgKGZpcnN0Rm9yQ29uZmlnKSB7CiAgICAgY29uc3QgY2hhciogcGNoRXh0ZW5zaW9uID0KICAgICAgIEdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oIkNNQUtFX1BDSF9FWFRFTlNJT04iKTsKIAogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGV4dGVybmFsT2JqZWN0czsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4dGVybmFsT2JqZWN0cyhleHRlcm5hbE9iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHRlcm5hbE9iamVjdHMoZXh0ZXJuYWxPYmplY3RzLCBjb25maWcpOwogICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA6IGV4dGVybmFsT2JqZWN0cykgewotICAgICAgY29uc3QgYXV0byBvYmplY3RGaWxlTmFtZSA9IHRoaXMtPkdldFNvdXJjZUZpbGVQYXRoKHNmKTsKKyAgICAgIGF1dG8gb2JqZWN0RmlsZU5hbWUgPSB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RXhwYW5kQ0ZHSW50RGlyKAorICAgICAgICB0aGlzLT5HZXRTb3VyY2VGaWxlUGF0aChzZiksIGNvbmZpZyk7CiAgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OlN0cmluZ0VuZHNXaXRoKG9iamVjdEZpbGVOYW1lLCBwY2hFeHRlbnNpb24pKSB7Ci0gICAgICAgIHRoaXMtPk9iamVjdHMucHVzaF9iYWNrKG9iamVjdEZpbGVOYW1lKTsKKyAgICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLk9iamVjdHMucHVzaF9iYWNrKG9iamVjdEZpbGVOYW1lKTsKICAgICAgIH0KICAgICB9CiAgIH0KIAogICB7CiAgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJwaG9ueSIpOwotICAgIGJ1aWxkLkNvbW1lbnQgPSAiT3JkZXItb25seSBwaG9ueSB0YXJnZXQgZm9yICIgKyB0aGlzLT5HZXRUYXJnZXROYW1lKCk7Ci0gICAgYnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KCkpOworICAgIGJ1aWxkLkNvbW1lbnQgPQorICAgICAgY21TdHJDYXQoIk9yZGVyLW9ubHkgcGhvbnkgdGFyZ2V0IGZvciAiLCB0aGlzLT5HZXRUYXJnZXROYW1lKCkpOworICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldChjb25maWcpKTsKIAogICAgIGNtTmluamFEZXBzJiBvcmRlck9ubHlEZXBzID0gYnVpbGQuT3JkZXJPbmx5RGVwczsKICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXREZXBlbmRzKAotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBvcmRlck9ubHlEZXBzLCBEZXBlbmRPblRhcmdldE9yZGVyaW5nKTsKKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgb3JkZXJPbmx5RGVwcywgY29uZmlnLCBmaWxlQ29uZmlnLAorICAgICAgRGVwZW5kT25UYXJnZXRPcmRlcmluZyk7CiAKICAgICAvLyBBZGQgb3JkZXItb25seSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQuCi0gICAgY21BcHBlbmQob3JkZXJPbmx5RGVwcywgdGhpcy0+RXh0cmFGaWxlcyk7CisgICAgY206OmFwcGVuZChvcmRlck9ubHlEZXBzLCB0aGlzLT5Db25maWdzW2NvbmZpZ10uRXh0cmFGaWxlcyk7CiAKICAgICAvLyBBZGQgb3JkZXItb25seSBkZXBlbmRlbmNpZXMgb24gY3VzdG9tIGNvbW1hbmQgb3V0cHV0cy4KLSAgICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCogY2MgOiB0aGlzLT5DdXN0b21Db21tYW5kcykgewotICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqY2MsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSk7CisgICAgZm9yIChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjIDogdGhpcy0+Q29uZmlnc1tjb25maWddLkN1c3RvbUNvbW1hbmRzKSB7CisgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgY29uZmlnLCB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpKTsKICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY2NvdXRwdXRzID0gY2NnLkdldE91dHB1dHMoKTsKICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY2NieXByb2R1Y3RzID0gY2NnLkdldEJ5cHJvZHVjdHMoKTsKICAgICAgIHN0ZDo6dHJhbnNmb3JtKGNjb3V0cHV0cy5iZWdpbigpLCBjY291dHB1dHMuZW5kKCksCkBAIC04NzcsMjYgKzkxMSwyNyBAQAogICAgICAgb3JkZXJPbmx5RGVwcy5wdXNoX2JhY2sodGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRndERpcikpOwogICAgIH0KIAotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQpOwogICB9CiAKICAgewogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IG9iamVjdFNvdXJjZXM7Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPYmplY3RTb3VyY2VzKG9iamVjdFNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0T2JqZWN0U291cmNlcyhvYmplY3RTb3VyY2VzLCBjb25maWcpOwogICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA6IG9iamVjdFNvdXJjZXMpIHsKLSAgICAgIHRoaXMtPldyaXRlT2JqZWN0QnVpbGRTdGF0ZW1lbnQoc2YpOworICAgICAgdGhpcy0+V3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudChzZiwgY29uZmlnLCBmaWxlQ29uZmlnLCBmaXJzdEZvckNvbmZpZyk7CiAgICAgfQogICB9CiAKLSAgZm9yIChhdXRvIGNvbnN0JiBsYW5nRERJRmlsZXMgOiB0aGlzLT5ERElGaWxlcykgeworICBmb3IgKGF1dG8gY29uc3QmIGxhbmdERElGaWxlcyA6IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5ERElGaWxlcykgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSA9IGxhbmdERElGaWxlcy5maXJzdDsKICAgICBjbU5pbmphRGVwcyBjb25zdCYgZGRpRmlsZXMgPSBsYW5nRERJRmlsZXMuc2Vjb25kOwogCi0gICAgY21OaW5qYUJ1aWxkIGJ1aWxkKHRoaXMtPkxhbmd1YWdlRHluZGVwUnVsZShsYW5ndWFnZSkpOwotICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRoaXMtPkdldER5bmRlcEZpbGVQYXRoKGxhbmd1YWdlKSk7CisgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKHRoaXMtPkxhbmd1YWdlRHluZGVwUnVsZShsYW5ndWFnZSwgY29uZmlnKSk7CisgICAgYnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+R2V0RHluZGVwRmlsZVBhdGgobGFuZ3VhZ2UsIGNvbmZpZykpOwogICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IGRkaUZpbGVzOwogCi0gICAgdGhpcy0+V3JpdGVUYXJnZXREZXBlbmRJbmZvKGxhbmd1YWdlKTsKKyAgICB0aGlzLT5Xcml0ZVRhcmdldERlcGVuZEluZm8obGFuZ3VhZ2UsIGNvbmZpZyk7CiAKICAgICAvLyBNYWtlIHN1cmUgZHluZGVwIGZpbGVzIGZvciBhbGwgb3VyIGRlcGVuZGVuY2llcyBoYXZlIGFscmVhZHkKICAgICAvLyBiZWVuIGdlbmVyYXRlZCBzbyB0aGF0IHRoZSAnPExBTkc+TW9kdWxlcy5qc29uJyBmaWxlcyB0aGV5CkBAIC05MDcsNTMgKzk0Miw1OSBAQAogICAgIC8vIHJlZmFjdG9yaW5nIHRoZSBOaW5qYSBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgdGFyZ2V0cyBpbgogICAgIC8vIGRlcGVuZGVuY3kgb3JkZXIgc28gdGhhdCB3ZSBjYW4gY29sbGVjdCB0aGUgbmVlZGVkIGluZm9ybWF0aW9uLgogICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHMoCi0gICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGJ1aWxkLk9yZGVyT25seURlcHMsIERlcGVuZE9uVGFyZ2V0QXJ0aWZhY3QpOworICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBidWlsZC5PcmRlck9ubHlEZXBzLCBjb25maWcsIGZpbGVDb25maWcsCisgICAgICBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKIAotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQpOwogICB9CiAKLSAgdGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkgPDwgIlxuIjsKKyAgdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZykgPDwgIlxuIjsKIAotICBpZiAoIXRoaXMtPlN3aWZ0T3V0cHV0TWFwLmVtcHR5KCkpIHsKKyAgaWYgKCF0aGlzLT5Db25maWdzW2NvbmZpZ10uU3dpZnRPdXRwdXRNYXAuZW1wdHkoKSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG1hcEZpbGVQYXRoID0KLSAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpICsgIi9vdXRwdXQtZmlsZS1tYXAuanNvbiI7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0U3dpZnREZXBzUGF0aCA9IFt0aGlzXSgpIC0+IHN0ZDo6c3RyaW5nIHsKKyAgICAgIGNtU3RyQ2F0KHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpLCAnLycsIGNvbmZpZywgJy8nLAorICAgICAgICAgICAgICAgIm91dHB1dC1maWxlLW1hcC5qc29uIik7CisgICAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0U3dpZnREZXBzUGF0aCA9IFt0aGlzLCBjb25maWddKCkgLT4gc3RkOjpzdHJpbmcgewogICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldDsKICAgICAgIGlmIChjb25zdCBjaGFyKiBuYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUiKSkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0LT5HZXRTdXBwb3J0RGlyZWN0b3J5KCkgKyAiLyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSArICIuc3dpZnRkZXBzIik7CisgICAgICByZXR1cm4gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAorICAgICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSwgJy8nLCBjb25maWcsICcvJywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuc3dpZnRkZXBzIikpOwogICAgIH0oKTsKIAogICAgIC8vIGJ1aWxkIHRoZSBnbG9iYWwgdGFyZ2V0IGRlcGVuZGVuY2llcwogICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC9ibG9iL21hc3Rlci9kb2NzL0RyaXZlci5tZCNvdXRwdXQtZmlsZS1tYXBzCiAgICAgSnNvbjo6VmFsdWUgZGVwcyhKc29uOjpvYmplY3RWYWx1ZSk7CiAgICAgZGVwc1sic3dpZnQtZGVwZW5kZW5jaWVzIl0gPSB0YXJnZXRTd2lmdERlcHNQYXRoOwotICAgIHRoaXMtPlN3aWZ0T3V0cHV0TWFwWyIiXSA9IGRlcHM7CisgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLlN3aWZ0T3V0cHV0TWFwWyIiXSA9IGRlcHM7CiAKICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0cHV0KG1hcEZpbGVQYXRoKTsKLSAgICBvdXRwdXQgPDwgdGhpcy0+U3dpZnRPdXRwdXRNYXA7CisgICAgb3V0cHV0IDw8IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5Td2lmdE91dHB1dE1hcDsKICAgfQogfQogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OldyaXRlT2JqZWN0QnVpbGRTdGF0ZW1lbnQoCi0gIGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKQorICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsIGJvb2wgZmlyc3RGb3JDb25maWcpCiB7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IGxhbmd1YWdlID0gc291cmNlLT5HZXRMYW5ndWFnZSgpOwogICBzdGQ6OnN0cmluZyBjb25zdCBzb3VyY2VGaWxlTmFtZSA9CiAgICAgbGFuZ3VhZ2UgPT0gIlJDIiA/IHNvdXJjZS0+R2V0RnVsbFBhdGgoKSA6IHRoaXMtPkdldFNvdXJjZUZpbGVQYXRoKHNvdXJjZSk7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0IG9iamVjdERpciA9Ci0gICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpKTsKKyAgc3RkOjpzdHJpbmcgY29uc3Qgb2JqZWN0RGlyID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAorICAgIGNtU3RyQ2F0KHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpLAorICAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Db25maWdEaXJlY3RvcnkoY29uZmlnKSkpOwogICBzdGQ6OnN0cmluZyBjb25zdCBvYmplY3RGaWxlTmFtZSA9Ci0gICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldE9iamVjdEZpbGVQYXRoKHNvdXJjZSkpOworICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UsIGNvbmZpZykpOwogICBzdGQ6OnN0cmluZyBjb25zdCBvYmplY3RGaWxlRGlyID0KICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgob2JqZWN0RmlsZU5hbWUpOwogCiAgIHN0ZDo6c3RyaW5nIGNtYWtlVmFyTGFuZyA9IGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5ndWFnZSk7CiAKICAgLy8gYnVpbGQgcmVzcG9uc2UgZmlsZSBuYW1lCi0gIHN0ZDo6c3RyaW5nIGNtYWtlTGlua1ZhciA9IGNtYWtlVmFyTGFuZyArICJfUkVTUE9OU0VfRklMRV9GTEFHIjsKKyAgc3RkOjpzdHJpbmcgY21ha2VMaW5rVmFyID0gY21TdHJDYXQoY21ha2VWYXJMYW5nLCAiX1JFU1BPTlNFX0ZJTEVfRkxBRyIpOwogCiAgIGNvbnN0IGNoYXIqIGZsYWcgPSBHZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKGNtYWtlTGlua1Zhcik7CiAKQEAgLTk2MiwxMSArMTAwMywxMSBAQAogICBpbnQgY29uc3QgY29tbWFuZExpbmVMZW5ndGhMaW1pdCA9CiAgICAgKChsYW5nX3N1cHBvcnRzX3Jlc3BvbnNlICYmIHRoaXMtPkZvcmNlUmVzcG9uc2VGaWxlKCkpKSA/IC0xIDogMDsKIAotICBjbU5pbmphQnVpbGQgb2JqQnVpbGQodGhpcy0+TGFuZ3VhZ2VDb21waWxlclJ1bGUobGFuZ3VhZ2UpKTsKKyAgY21OaW5qYUJ1aWxkIG9iakJ1aWxkKHRoaXMtPkxhbmd1YWdlQ29tcGlsZXJSdWxlKGxhbmd1YWdlLCBjb25maWcpKTsKICAgY21OaW5qYVZhcnMmIHZhcnMgPSBvYmpCdWlsZC5WYXJpYWJsZXM7Ci0gIHZhcnNbIkZMQUdTIl0gPSB0aGlzLT5Db21wdXRlRmxhZ3NGb3JPYmplY3Qoc291cmNlLCBsYW5ndWFnZSk7Ci0gIHZhcnNbIkRFRklORVMiXSA9IHRoaXMtPkNvbXB1dGVEZWZpbmVzKHNvdXJjZSwgbGFuZ3VhZ2UpOwotICB2YXJzWyJJTkNMVURFUyJdID0gdGhpcy0+Q29tcHV0ZUluY2x1ZGVzKHNvdXJjZSwgbGFuZ3VhZ2UpOworICB2YXJzWyJGTEFHUyJdID0gdGhpcy0+Q29tcHV0ZUZsYWdzRm9yT2JqZWN0KHNvdXJjZSwgbGFuZ3VhZ2UsIGNvbmZpZyk7CisgIHZhcnNbIkRFRklORVMiXSA9IHRoaXMtPkNvbXB1dGVEZWZpbmVzKHNvdXJjZSwgbGFuZ3VhZ2UsIGNvbmZpZyk7CisgIHZhcnNbIklOQ0xVREVTIl0gPSB0aGlzLT5Db21wdXRlSW5jbHVkZXMoc291cmNlLCBsYW5ndWFnZSwgY29uZmlnKTsKIAogICBpZiAoIXRoaXMtPk5lZWREZXBUeXBlTVNWQyhsYW5ndWFnZSkpIHsKICAgICBib29sIHJlcGxhY2VFeHQoZmFsc2UpOwpAQCAtOTc4LDE0ICsxMDE5LDE1IEBACiAgICAgaWYgKCFyZXBsYWNlRXh0KSB7CiAgICAgICAvLyB1c2Ugb3JpZ2luYWwgY29kZQogICAgICAgdmFyc1siREVQX0ZJTEUiXSA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgb2JqZWN0RmlsZU5hbWUgKyAiLmQiLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICBjbVN0ckNhdChvYmplY3RGaWxlTmFtZSwgIi5kIiksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIFJlcGxhY2UgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIGV4dGVuc2lvbiB3aXRoIHRoZQogICAgICAgLy8gZGVwZW5kIGZpbGUgZXh0ZW5zaW9uLgotICAgICAgc3RkOjpzdHJpbmcgZGVwZW5kRmlsZU5hbWUgPQotICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG9iamVjdEZpbGVOYW1lKSArICIuZCI7CisgICAgICBzdGQ6OnN0cmluZyBkZXBlbmRGaWxlTmFtZSA9IGNtU3RyQ2F0KAorICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG9iamVjdEZpbGVOYW1lKSwgIi5kIik7CiAgICAgICB2YXJzWyJERVBfRklMRSJdID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICBvYmplY3RGaWxlRGlyICsgIi8iICsgZGVwZW5kRmlsZU5hbWUsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgIGNtU3RyQ2F0KG9iamVjdEZpbGVEaXIsICcvJywgZGVwZW5kRmlsZU5hbWUpLAorICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgIH0KICAgfQogCkBAIC05OTQsMTEgKzEwMzYsMTMgQEAKICAgICB2YXJzWyJGTEFHUyJdLCB2YXJzWyJERUZJTkVTIl0sIHZhcnNbIklOQ0xVREVTIl0pOwogCiAgIG9iakJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKG9iamVjdEZpbGVOYW1lKTsKLSAgY29uc3QgY2hhciogcGNoRXh0ZW5zaW9uID0KLSAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKCJDTUFLRV9QQ0hfRVhURU5TSU9OIik7Ci0gIGlmICghY21TeXN0ZW1Ub29sczo6U3RyaW5nRW5kc1dpdGgob2JqZWN0RmlsZU5hbWUsIHBjaEV4dGVuc2lvbikpIHsKLSAgICAvLyBBZGQgdGhpcyBvYmplY3QgdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzLgotICAgIHRoaXMtPk9iamVjdHMucHVzaF9iYWNrKG9iamVjdEZpbGVOYW1lKTsKKyAgaWYgKGZpcnN0Rm9yQ29uZmlnKSB7CisgICAgY29uc3QgY2hhciogcGNoRXh0ZW5zaW9uID0KKyAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oIkNNQUtFX1BDSF9FWFRFTlNJT04iKTsKKyAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OlN0cmluZ0VuZHNXaXRoKG9iamVjdEZpbGVOYW1lLCBwY2hFeHRlbnNpb24pKSB7CisgICAgICAvLyBBZGQgdGhpcyBvYmplY3QgdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzLgorICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLk9iamVjdHMucHVzaF9iYWNrKG9iamVjdEZpbGVOYW1lKTsKKyAgICB9CiAgIH0KIAogICBvYmpCdWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHNvdXJjZUZpbGVOYW1lKTsKQEAgLTEwMDcsMTMgKzEwNTEsMTEgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcExpc3Q7CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFNvdXJjZSh0aGlzLT5HZXRDb25maWdOYW1lKCksIGxhbmd1YWdlKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFNvdXJjZShjb25maWcsIGxhbmd1YWdlKTsKICAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSAmJiAhc291cmNlLT5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgewotICAgIGRlcExpc3QucHVzaF9iYWNrKAotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hIZWFkZXIodGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBsYW5ndWFnZSkpOworICAgIGRlcExpc3QucHVzaF9iYWNrKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UpKTsKICAgICBpZiAoc291cmNlLT5HZXRGdWxsUGF0aCgpICE9IHBjaFNvdXJjZSkgewotICAgICAgZGVwTGlzdC5wdXNoX2JhY2soCi0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoRmlsZSh0aGlzLT5HZXRDb25maWdOYW1lKCksIGxhbmd1YWdlKSk7CisgICAgICBkZXBMaXN0LnB1c2hfYmFjayh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSkpOwogICAgIH0KICAgfQogCkBAIC0xMDM0LDcgKzEwNzYsNyBAQAogICAgICAgICAgICAgICAgICAgIE1hcFRvTmluamFQYXRoKCkpOwogICB9CiAKLSAgb2JqQnVpbGQuT3JkZXJPbmx5RGVwcy5wdXNoX2JhY2sodGhpcy0+T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KCkpOworICBvYmpCdWlsZC5PcmRlck9ubHlEZXBzLnB1c2hfYmFjayh0aGlzLT5PcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoY29uZmlnKSk7CiAKICAgLy8gSWYgdGhlIHNvdXJjZSBmaWxlIGlzIEdFTkVSQVRFRCBhbmQgZG9lcyBub3QgaGF2ZSBhIGN1c3RvbSBjb21tYW5kCiAgIC8vIChlaXRoZXIgYXR0YWNoZWQgdG8gdGhpcyBzb3VyY2UgZmlsZSBvciBhbm90aGVyIG9uZSksIGFzc3VtZSB0aGF0IG9uZSBvZgpAQCAtMTA1NCwxMyArMTA5NiwxMyBAQAogICAvLyBGb3Igc29tZSBjYXNlcyB3ZSBkbyBhbiBleHBsaWNpdCBwcmVwcm9jZXNzb3IgaW52b2NhdGlvbi4KICAgYm9vbCBjb25zdCBleHBsaWNpdFBQID0gdGhpcy0+TmVlZEV4cGxpY2l0UHJlcHJvY2Vzc2luZyhsYW5ndWFnZSk7CiAgIGlmIChleHBsaWNpdFBQKSB7Ci0gICAgY21OaW5qYUJ1aWxkIHBwQnVpbGQodGhpcy0+TGFuZ3VhZ2VQcmVwcm9jZXNzUnVsZShsYW5ndWFnZSkpOworICAgIGNtTmluamFCdWlsZCBwcEJ1aWxkKHRoaXMtPkxhbmd1YWdlUHJlcHJvY2Vzc1J1bGUobGFuZ3VhZ2UsIGNvbmZpZykpOwogCiAgICAgc3RkOjpzdHJpbmcgY29uc3QgcHBGaWxlTmFtZSA9Ci0gICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0UHJlcHJvY2Vzc2VkRmlsZVBhdGgoc291cmNlKSk7CisgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0UHJlcHJvY2Vzc2VkRmlsZVBhdGgoc291cmNlLCBjb25maWcpKTsKICAgICBwcEJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHBwRmlsZU5hbWUpOwogCi0gICAgcHBCdWlsZC5Sc3BGaWxlID0gcHBGaWxlTmFtZSArICIucnNwIjsKKyAgICBwcEJ1aWxkLlJzcEZpbGUgPSBjbVN0ckNhdChwcEZpbGVOYW1lLCAiLnJzcCIpOwogCiAgICAgYm9vbCBjb25zdCBjb21waWxlUFAgPSB0aGlzLT5Vc2VQcmVwcm9jZXNzZWRTb3VyY2UobGFuZ3VhZ2UpOwogICAgIGJvb2wgY29uc3QgY29tcGlsZVBQV2l0aERlZmluZXMgPQpAQCAtMTA4OSw3ICsxMTMxLDcgQEAKICAgICAgIC8vIEluIGNhc2UgY29tcGlsYXRpb24gcmVxdWlyZXMgZmxhZ3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGgKICAgICAgIC8vIHByZXByb2Nlc3NpbmcsIGluY2x1ZGUgdGhlbSBoZXJlLgogICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHBvc3RGbGFnID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAotICAgICAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsgIl9QT1NUUFJPQ0VTU19GTEFHIik7CisgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5ndWFnZSwgIl9QT1NUUFJPQ0VTU19GTEFHIikpOwogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKHZhcnNbIkZMQUdTIl0sIHBvc3RGbGFnKTsKICAgICB9CiAKQEAgLTExMTUsMTUgKzExNTcsMTUgQEAKIAogICAgICAgc3RkOjpzdHJpbmcgc291cmNlRGlyZWN0b3J5RmxhZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRJbmNsdWRlRmxhZ3MoCiAgICAgICAgIHNvdXJjZURpcmVjdG9yeSwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5ndWFnZSwgZmFsc2UsIGZhbHNlLAotICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgICAgICBjb25maWcpOwogCi0gICAgICB2YXJzWyJJTkNMVURFUyJdID0gc291cmNlRGlyZWN0b3J5RmxhZyArICIgIiArIHZhcnNbIklOQ0xVREVTIl07CisgICAgICB2YXJzWyJJTkNMVURFUyJdID0gY21TdHJDYXQoc291cmNlRGlyZWN0b3J5RmxhZywgJyAnLCB2YXJzWyJJTkNMVURFUyJdKTsKICAgICB9CiAKICAgICAvLyBFeHBsaWNpdCBwcmVwcm9jZXNzaW5nIGFsd2F5cyB1c2VzIGEgZGVwZmlsZS4KICAgICBwcEJ1aWxkLlZhcmlhYmxlc1siREVQX0ZJTEUiXSA9CiAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgIG9iamVjdEZpbGVOYW1lICsgIi5wcC5kIiwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgICAgY21TdHJDYXQob2JqZWN0RmlsZU5hbWUsICIucHAuZCIpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgIGlmIChjb21waWxlUFApIHsKICAgICAgIC8vIFRoZSBhY3R1YWwgY29tcGlsYXRpb24gZG9lcyBub3QgbmVlZCBhIGRlcGZpbGUgYmVjYXVzZSBpdAogICAgICAgLy8gZGVwZW5kcyBvbiB0aGUgYWxyZWFkeS1wcmVwcm9jZXNzZWQgc291cmNlLgpAQCAtMTEzNiwyMCArMTE3OCwyMiBAQAogICAgICAgcHBCdWlsZC5WYXJpYWJsZXNbIk9CSl9GSUxFIl0gPSBvYmplY3RGaWxlTmFtZTsKIAogICAgICAgLy8gVGVsbCBkZXBlbmRlbmN5IHNjYW5uZXIgd2hlcmUgdG8gc3RvcmUgZHluZGVwIGludGVybWVkaWF0ZSByZXN1bHRzLgotICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGRpRmlsZSA9IG9iamVjdEZpbGVOYW1lICsgIi5kZGkiOworICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGRpRmlsZSA9IGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLmRkaSIpOwogICAgICAgcHBCdWlsZC5WYXJpYWJsZXNbIkRZTkRFUF9JTlRFUk1FRElBVEVfRklMRSJdID0gZGRpRmlsZTsKICAgICAgIHBwQnVpbGQuSW1wbGljaXRPdXRzLnB1c2hfYmFjayhkZGlGaWxlKTsKLSAgICAgIHRoaXMtPkRESUZpbGVzW2xhbmd1YWdlXS5wdXNoX2JhY2soZGRpRmlsZSk7CisgICAgICBpZiAoZmlyc3RGb3JDb25maWcpIHsKKyAgICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLkRESUZpbGVzW2xhbmd1YWdlXS5wdXNoX2JhY2soZGRpRmlsZSk7CisgICAgICB9CiAgICAgfQogCiAgICAgdGhpcy0+YWRkUG9vbE5pbmphVmFyaWFibGUoIkpPQl9QT09MX0NPTVBJTEUiLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcEJ1aWxkLlZhcmlhYmxlcyk7CiAKLSAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgcHBCdWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZUxlbmd0aExpbWl0KTsKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcEJ1aWxkLCBjb21tYW5kTGluZUxlbmd0aExpbWl0KTsKICAgfQogICBpZiAobmVlZER5bmRlcCkgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGR5bmRlcCA9IHRoaXMtPkdldER5bmRlcEZpbGVQYXRoKGxhbmd1YWdlKTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBkeW5kZXAgPSB0aGlzLT5HZXREeW5kZXBGaWxlUGF0aChsYW5ndWFnZSwgY29uZmlnKTsKICAgICBvYmpCdWlsZC5PcmRlck9ubHlEZXBzLnB1c2hfYmFjayhkeW5kZXApOwogICAgIHZhcnNbImR5bmRlcCJdID0gZHluZGVwOwogICB9CkBAIC0xMTY0LDE0ICsxMjA4LDIxIEBACiAgIHRoaXMtPmFkZFBvb2xOaW5qYVZhcmlhYmxlKCJKT0JfUE9PTF9DT01QSUxFIiwgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpOwogCi0gIHRoaXMtPlNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZSh2YXJzKTsKKyAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSAmJiAhc291cmNlLT5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgeworICAgIGlmIChzb3VyY2UtPkdldEZ1bGxQYXRoKCkgPT0gcGNoU291cmNlKSB7CisgICAgICB0aGlzLT5hZGRQb29sTmluamFWYXJpYWJsZSgiSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksIHZhcnMpOworICAgIH0KKyAgfQogCi0gIG9iakJ1aWxkLlJzcEZpbGUgPSBvYmplY3RGaWxlTmFtZSArICIucnNwIjsKKyAgdGhpcy0+U2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKHZhcnMsIGNvbmZpZyk7CisKKyAgb2JqQnVpbGQuUnNwRmlsZSA9IGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLnJzcCIpOwogCiAgIGlmIChsYW5ndWFnZSA9PSAiU3dpZnQiKSB7Ci0gICAgdGhpcy0+RW1pdFN3aWZ0RGVwZW5kZW5jeUluZm8oc291cmNlKTsKKyAgICB0aGlzLT5FbWl0U3dpZnREZXBlbmRlbmN5SW5mbyhzb3VyY2UsIGNvbmZpZyk7CiAgIH0gZWxzZSB7Ci0gICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCksCisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqQnVpbGQsIGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQpOwogICB9CiAKQEAgLTExODIsMTYgKzEyMzMsMTggQEAKICAgICBzdGQ6OnRyYW5zZm9ybShidWlsZC5PdXRwdXRzLmJlZ2luKCksIGJ1aWxkLk91dHB1dHMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgYnVpbGQuT3V0cHV0cy5iZWdpbigpLCBNYXBUb05pbmphUGF0aCgpKTsKICAgICBidWlsZC5FeHBsaWNpdERlcHMgPSBvYmpCdWlsZC5PdXRwdXRzOwotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQpOwogICB9CiB9CiAKLXZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVUYXJnZXREZXBlbmRJbmZvKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKQordm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVRhcmdldERlcGVuZEluZm8oc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBKc29uOjpWYWx1ZSB0ZGkoSnNvbjo6b2JqZWN0VmFsdWUpOwogICB0ZGlbImxhbmd1YWdlIl0gPSBsYW5nOwotICB0ZGlbImNvbXBpbGVyLWlkIl0gPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX0NPTVBJTEVSX0lEIik7CisgIHRkaVsiY29tcGlsZXItaWQiXSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKKyAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9DT01QSUxFUl9JRCIpKTsKIAogICBpZiAobGFuZyA9PSAiRm9ydHJhbiIpIHsKICAgICBzdGQ6OnN0cmluZyBtb2RfZGlyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGb3J0cmFuTW9kdWxlRGlyZWN0b3J5KApAQCAtMTIxNCw3ICsxMjY3LDcgQEAKICAgSnNvbjo6VmFsdWUmIHRkaV9pbmNsdWRlX2RpcnMgPSB0ZGlbImluY2x1ZGUtZGlycyJdID0gSnNvbjo6YXJyYXlWYWx1ZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nLCBjb25maWcpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5jbHVkZXMpIHsKICAgICAvLyBDb252ZXJ0IHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIHRoZSBzYW1lIHdheSB3ZSBkbyBmb3IgLUkgZmxhZ3MuCiAgICAgLy8gU2VlIHVwc3RyZWFtIG5pbmphIGlzc3VlIDEyNTEuCkBAIC0xMjIzLDQ4ICsxMjc2LDQ5IEBACiAKICAgSnNvbjo6VmFsdWUmIHRkaV9saW5rZWRfdGFyZ2V0X2RpcnMgPSB0ZGlbImxpbmtlZC10YXJnZXQtZGlycyJdID0KICAgICBKc29uOjphcnJheVZhbHVlOwotICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsIDogdGhpcy0+R2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoKSkgeworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsIDogdGhpcy0+R2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoY29uZmlnKSkgewogICAgIHRkaV9saW5rZWRfdGFyZ2V0X2RpcnMuYXBwZW5kKGwpOwogICB9CiAKLSAgc3RkOjpzdHJpbmcgY29uc3QgdGRpbiA9IHRoaXMtPkdldFRhcmdldERlcGVuZEluZm9QYXRoKGxhbmcpOworICBzdGQ6OnN0cmluZyBjb25zdCB0ZGluID0gdGhpcy0+R2V0VGFyZ2V0RGVwZW5kSW5mb1BhdGgobGFuZywgY29uZmlnKTsKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIHRkaWYodGRpbik7CiAgIHRkaWYgPDwgdGRpOwogfQogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkVtaXRTd2lmdERlcGVuZGVuY3lJbmZvKAotICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHNvdXJjZUZpbGVQYXRoID0KICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0U291cmNlRmlsZVBhdGgoc291cmNlKSk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IG9iamVjdEZpbGVQYXRoID0KLSAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0T2JqZWN0RmlsZVBhdGgoc291cmNlKSk7CisgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldE9iamVjdEZpbGVQYXRoKHNvdXJjZSwgY29uZmlnKSk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHN3aWZ0RGVwc1BhdGggPSBbc291cmNlLCBvYmplY3RGaWxlUGF0aF0oKSAtPiBzdGQ6OnN0cmluZyB7CiAgICAgaWYgKGNvbnN0IGNoYXIqIG5hbWUgPSBzb3VyY2UtPkdldFByb3BlcnR5KCJTd2lmdF9ERVBFTkRFTkNJRVNfRklMRSIpKSB7CiAgICAgICByZXR1cm4gbmFtZTsKICAgICB9Ci0gICAgcmV0dXJuIG9iamVjdEZpbGVQYXRoICsgIi5zd2lmdGRlcHMiOworICAgIHJldHVybiBjbVN0ckNhdChvYmplY3RGaWxlUGF0aCwgIi5zd2lmdGRlcHMiKTsKICAgfSgpOwogICBzdGQ6OnN0cmluZyBjb25zdCBzd2lmdERpYVBhdGggPSBbc291cmNlLCBvYmplY3RGaWxlUGF0aF0oKSAtPiBzdGQ6OnN0cmluZyB7CiAgICAgaWYgKGNvbnN0IGNoYXIqIG5hbWUgPSBzb3VyY2UtPkdldFByb3BlcnR5KCJTd2lmdF9ESUFHTk9TVElDU19GSUxFIikpIHsKICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0RmlsZVBhdGggKyAiLmRpYSI7CisgICAgcmV0dXJuIGNtU3RyQ2F0KG9iamVjdEZpbGVQYXRoLCAiLmRpYSIpOwogICB9KCk7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0IG1ha2VEZXBzUGF0aCA9IFt0aGlzLCBzb3VyY2VdKCkgLT4gc3RkOjpzdHJpbmcgeworICBzdGQ6OnN0cmluZyBjb25zdCBtYWtlRGVwc1BhdGggPSBbdGhpcywgc291cmNlLCBjb25maWddKCkgLT4gc3RkOjpzdHJpbmcgewogICAgIGNtTG9jYWxOaW5qYUdlbmVyYXRvciBjb25zdCogbG9jYWwgPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG9iamVjdEZpbGVOYW1lID0KLSAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UpKTsKKyAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UsIGNvbmZpZykpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG9iamVjdEZpbGVEaXIgPQogICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKG9iamVjdEZpbGVOYW1lKTsKIAogICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfU3dpZnRfREVQRkxFX0VYVE5TSU9OX1JFUExBQ0UiKSkgewotICAgICAgc3RkOjpzdHJpbmcgZGVwZW5kRmlsZU5hbWUgPQotICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG9iamVjdEZpbGVOYW1lKSArICIuZCI7Ci0gICAgICByZXR1cm4gbG9jYWwtPkNvbnZlcnRUb091dHB1dEZvcm1hdChvYmplY3RGaWxlRGlyICsgIi8iICsgZGVwZW5kRmlsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgc3RkOjpzdHJpbmcgZGVwZW5kRmlsZU5hbWUgPSBjbVN0ckNhdCgKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVXaXRob3V0TGFzdEV4dGVuc2lvbihvYmplY3RGaWxlTmFtZSksICIuZCIpOworICAgICAgcmV0dXJuIGxvY2FsLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCisgICAgICAgIGNtU3RyQ2F0KG9iamVjdEZpbGVEaXIsICcvJywgZGVwZW5kRmlsZU5hbWUpLAorICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgIH0KLSAgICByZXR1cm4gbG9jYWwtPkNvbnZlcnRUb091dHB1dEZvcm1hdChvYmplY3RGaWxlTmFtZSArICIuZCIsCisgICAgcmV0dXJuIGxvY2FsLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoY21TdHJDYXQob2JqZWN0RmlsZU5hbWUsICIuZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgIH0oKTsKIApAQCAtMTI3NSw3ICsxMzI5LDcgQEAKICAgZW50cnlbImRlcGVuZGVuY2llcyJdID0gbWFrZURlcHNQYXRoOwogICBlbnRyeVsic3dpZnQtZGVwZW5kZW5jaWVzIl0gPSBzd2lmdERlcHNQYXRoOwogICBlbnRyeVsiZGlhZ25vc3RpY3MiXSA9IHN3aWZ0RGlhUGF0aDsKLSAgU3dpZnRPdXRwdXRNYXBbc291cmNlRmlsZVBhdGhdID0gZW50cnk7CisgIHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5Td2lmdE91dHB1dE1hcFtzb3VyY2VGaWxlUGF0aF0gPSBlbnRyeTsKIH0KIAogdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpFeHBvcnRPYmplY3RDb21waWxlQ29tbWFuZCgKQEAgLTEzMjksNyArMTM4Myw3IEBACiAgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwogICB9IGVsc2UgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNtZFZhciA9ICJDTUFLRV8iICsgbGFuZ3VhZ2UgKyAiX0NPTVBJTEVfT0JKRUNUIjsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBjbWRWYXIgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PQkpFQ1QiKTsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGlsZUNtZCA9CiAgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwpAQCAtMTM1MCwyNyArMTQwNCwzNCBAQAogICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkQ1hYQ29tcGlsZUNvbW1hbmQoY21kTGluZSwgc291cmNlRmlsZU5hbWUpOwogfQogCi12b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkFkZGl0aW9uYWxDbGVhbkZpbGVzKCkKK3ZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6QWRkaXRpb25hbENsZWFuRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgaWYgKGNvbnN0IGNoYXIqIHByb3BfdmFsdWUgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBRERJVElPTkFMX0NMRUFOX0ZJTEVTIikpIHsKICAgICBjbUxvY2FsTmluamFHZW5lcmF0b3IqIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3I7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNsZWFuRmlsZXM7Ci0gICAgY21FeHBhbmRMaXN0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgICAgICAgICAgcHJvcF92YWx1ZSwgbGcsCi0gICAgICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIiksCi0gICAgICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKKyAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShwcm9wX3ZhbHVlLCBsZywgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCksCiAgICAgICAgICAgICAgICAgIGNsZWFuRmlsZXMpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPSBsZy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIGdnID0gbGctPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY2xlYW5GaWxlIDogY2xlYW5GaWxlcykgewogICAgICAgLy8gU3VwcG9ydCByZWxhdGl2ZSBwYXRocwogICAgICAgZ2ctPkFkZEFkZGl0aW9uYWxDbGVhbkZpbGUoCi0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY2xlYW5GaWxlLCBiaW5hcnlEaXIpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjbGVhbkZpbGUsIGJpbmFyeURpciksIGNvbmZpZyk7CiAgICAgfQogICB9CiB9CiAKK2NtTmluamFEZXBzIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkdldE9iamVjdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgYXV0byBjb25zdCBpdCA9IHRoaXMtPkNvbmZpZ3MuZmluZChjb25maWcpOworICBpZiAoaXQgIT0gdGhpcy0+Q29uZmlncy5lbmQoKSkgeworICAgIHJldHVybiBpdC0+c2Vjb25kLk9iamVjdHM7CisgIH0KKyAgcmV0dXJuIHt9OworfQorCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkVuc3VyZURpcmVjdG9yeUV4aXN0cygKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpIGNvbnN0CiB7CkBAIC0xMzkzLDcgKzE0NTQsNyBAQAogfQogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlOjpvcGVyYXRvcigpKAotICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jKQorICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICAvLyBTa2lwIE9TIFggY29udGVudCB3aGVuIG5vdCBidWlsZGluZyBhIEZyYW1ld29yayBvciBCdW5kbGUuCiAgIGlmICghdGhpcy0+R2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+SXNCdW5kbGVPbkFwcGxlKCkpIHsKQEAgLTE0MDEsNyArMTQ2MiwxOCBAQAogICB9CiAKICAgc3RkOjpzdHJpbmcgbWFjZGlyID0KLSAgICB0aGlzLT5HZW5lcmF0b3ItPk9TWEJ1bmRsZUdlbmVyYXRvci0+SW5pdE1hY09TWENvbnRlbnREaXJlY3RvcnkocGtnbG9jKTsKKyAgICB0aGlzLT5HZW5lcmF0b3ItPk9TWEJ1bmRsZUdlbmVyYXRvci0+SW5pdE1hY09TWENvbnRlbnREaXJlY3RvcnkocGtnbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworCisgIC8vIFJlamVjdCBmaWxlcyB0aGF0IGNvbGxpZGUgd2l0aCBmaWxlcyBmcm9tIHRoZSBOaW5qYSBmaWxlJ3MgbmF0aXZlIGNvbmZpZy4KKyAgaWYgKGNvbmZpZyAhPSB0aGlzLT5GaWxlQ29uZmlnKSB7CisgICAgc3RkOjpzdHJpbmcgbmF0aXZlTWFjZGlyID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvci0+T1NYQnVuZGxlR2VuZXJhdG9yLT5Jbml0TWFjT1NYQ29udGVudERpcmVjdG9yeSgKKyAgICAgICAgcGtnbG9jLCB0aGlzLT5GaWxlQ29uZmlnKTsKKyAgICBpZiAobWFjZGlyID09IG5hdGl2ZU1hY2RpcikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQogCiAgIC8vIEdldCB0aGUgaW5wdXQgZmlsZSBsb2NhdGlvbi4KICAgc3RkOjpzdHJpbmcgaW5wdXQgPSBzb3VyY2UuR2V0RnVsbFBhdGgoKTsKQEAgLTE0MTMsMTEgKzE0ODUsMTEgQEAKICAgb3V0cHV0ID0gdGhpcy0+R2VuZXJhdG9yLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvTmluamFQYXRoKG91dHB1dCk7CiAKICAgLy8gV3JpdGUgYSBidWlsZCBzdGF0ZW1lbnQgdG8gY29weSB0aGUgY29udGVudCBpbnRvIHRoZSBidW5kbGUuCi0gIHRoaXMtPkdlbmVyYXRvci0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlTWFjT1NYQ29udGVudEJ1aWxkKGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworICB0aGlzLT5HZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZU1hY09TWENvbnRlbnRCdWlsZCgKKyAgICBpbnB1dCwgb3V0cHV0LCB0aGlzLT5GaWxlQ29uZmlnKTsKIAogICAvLyBBZGQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSB0YXJnZXQgc28gdGhhdCBpdCBnZXRzIGNhbGxlZC4KLSAgdGhpcy0+R2VuZXJhdG9yLT5FeHRyYUZpbGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUob3V0cHV0KSk7CisgIHRoaXMtPkdlbmVyYXRvci0+Q29uZmlnc1tjb25maWddLkV4dHJhRmlsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShvdXRwdXQpKTsKIH0KIAogdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjphZGRQb29sTmluamFWYXJpYWJsZSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5oCmluZGV4IDQ2MjdiY2QuLjg2NzhkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuaApAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKQEAgLTM4LDE2ICszOSwxNyBAQAogICAvLy8gRGVzdHJ1Y3Rvci4KICAgfmNtTmluamFUYXJnZXRHZW5lcmF0b3IoKSBvdmVycmlkZTsKIAotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGUoKSA9IDA7CisgIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSA9IDA7CiAKICAgc3RkOjpzdHJpbmcgR2V0VGFyZ2V0TmFtZSgpIGNvbnN0OwogCiAgIGJvb2wgTmVlZERlcFR5cGVNU1ZDKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICBib29sIFNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZShjbU5pbmphVmFycyYpIGNvbnN0OworICBib29sIFNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZShjbU5pbmphVmFycyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCi0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgR2V0QnVpbGRGaWxlU3RyZWFtKCkgY29uc3Q7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgR2V0SW1wbEZpbGVTdHJlYW0oY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgR2V0Q29tbW9uRmlsZVN0cmVhbSgpIGNvbnN0OwogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldFJ1bGVzRmlsZVN0cmVhbSgpIGNvbnN0OwogCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBHZXRHZW5lcmF0b3JUYXJnZXQoKSBjb25zdApAQCAtNjQsMTUgKzY2LDE4IEBACiAKICAgY21NYWtlZmlsZSogR2V0TWFrZWZpbGUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5NYWtlZmlsZTsgfQogCi0gIHN0ZDo6c3RyaW5nIExhbmd1YWdlQ29tcGlsZXJSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKSBjb25zdDsKLSAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VQcmVwcm9jZXNzUnVsZShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIExhbmd1YWdlQ29tcGlsZXJSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VQcmVwcm9jZXNzUnVsZShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKICAgYm9vbCBOZWVkRXhwbGljaXRQcmVwcm9jZXNzaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKLSAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VEeW5kZXBSdWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VEeW5kZXBSdWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIGJvb2wgTmVlZER5bmRlcChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CiAgIGJvb2wgVXNlUHJlcHJvY2Vzc2VkU291cmNlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKICAgYm9vbCBDb21waWxlUHJlcHJvY2Vzc2VkU291cmNlV2l0aERlZmluZXMoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OwogCi0gIHN0ZDo6c3RyaW5nIE9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCgpOworICBzdGQ6OnN0cmluZyBPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RkOjpzdHJpbmcgQ29tcHV0ZU9yZGVyRGVwZW5kc0ZvclRhcmdldCgpOwogCkBAIC04MiwxNSArODcsMTkgQEAKICAgICogICAgICAgYnkgTGFuZ3VhZ2VGbGFnc1Zhck5hbWUoKS4KICAgICovCiAgIHN0ZDo6c3RyaW5nIENvbXB1dGVGbGFnc0Zvck9iamVjdChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAotICB2b2lkIEFkZEluY2x1ZGVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBvdmVycmlkZTsKKyAgdm9pZCBBZGRJbmNsdWRlRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLCBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgb3ZlcnJpZGU7CiAKICAgc3RkOjpzdHJpbmcgQ29tcHV0ZURlZmluZXMoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RkOjpzdHJpbmcgQ29tcHV0ZUluY2x1ZGVzKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIHN0ZDo6c3RyaW5nIENvbnZlcnRUb05pbmphUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkgY29uc3QKICAgewpAQCAtMTAyLDM2ICsxMTEsNTEgQEAKICAgfQogCiAgIC8vLyBAcmV0dXJuIHRoZSBsaXN0IG9mIGxpbmsgZGVwZW5kZW5jeSBmb3IgdGhlIGdpdmVuIHRhcmdldCBAYSB0YXJnZXQuCi0gIGNtTmluamFEZXBzIENvbXB1dGVMaW5rRGVwcyhjb25zdCBzdGQ6OnN0cmluZyYgbGlua0xhbmd1YWdlKSBjb25zdDsKKyAgY21OaW5qYURlcHMgQ29tcHV0ZUxpbmtEZXBzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rTGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLy8gQHJldHVybiB0aGUgc291cmNlIGZpbGUgcGF0aCBmb3IgdGhlIGdpdmVuIEBhIHNvdXJjZS4KICAgc3RkOjpzdHJpbmcgR2V0U291cmNlRmlsZVBhdGgoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UpIGNvbnN0OwogCiAgIC8vLyBAcmV0dXJuIHRoZSBvYmplY3QgZmlsZSBwYXRoIGZvciB0aGUgZ2l2ZW4gQGEgc291cmNlLgotICBzdGQ6OnN0cmluZyBHZXRPYmplY3RGaWxlUGF0aChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldE9iamVjdEZpbGVQYXRoKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLy8gQHJldHVybiB0aGUgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlIHBhdGggZm9yIHRoZSBnaXZlbiBAYSBzb3VyY2UuCi0gIHN0ZDo6c3RyaW5nIEdldFByZXByb2Nlc3NlZEZpbGVQYXRoKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0UHJlcHJvY2Vzc2VkRmlsZVBhdGgoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8vLyBAcmV0dXJuIHRoZSBkeW5kZXAgZmlsZSBwYXRoIGZvciB0aGlzIHRhcmdldC4KLSAgc3RkOjpzdHJpbmcgR2V0RHluZGVwRmlsZVBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXREeW5kZXBGaWxlUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgLy8vIEByZXR1cm4gdGhlIHRhcmdldCBkZXBlbmRlbmN5IHNjYW5uZXIgaW5mbyBmaWxlIHBhdGgKLSAgc3RkOjpzdHJpbmcgR2V0VGFyZ2V0RGVwZW5kSW5mb1BhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRUYXJnZXREZXBlbmRJbmZvUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgLy8vIEByZXR1cm4gdGhlIGZpbGUgcGF0aCB3aGVyZSB0aGUgdGFyZ2V0IG5hbWVkIEBhIG5hbWUgaXMgZ2VuZXJhdGVkLgotICBzdGQ6OnN0cmluZyBHZXRUYXJnZXRGaWxlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldFRhcmdldEZpbGVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLy8gQHJldHVybiB0aGUgb3V0cHV0IHBhdGggZm9yIHRoZSB0YXJnZXQuCi0gIHZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0VGFyZ2V0T3V0cHV0RGlyKCkgY29uc3Q7CisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0VGFyZ2V0T3V0cHV0RGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCi0gIHZvaWQgV3JpdGVMYW5ndWFnZVJ1bGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7Ci0gIHZvaWQgV3JpdGVDb21waWxlUnVsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpOwotICB2b2lkIFdyaXRlT2JqZWN0QnVpbGRTdGF0ZW1lbnRzKCk7Ci0gIHZvaWQgV3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSk7Ci0gIHZvaWQgV3JpdGVUYXJnZXREZXBlbmRJbmZvKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKTsKKyAgdm9pZCBXcml0ZUxhbmd1YWdlUnVsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgdm9pZCBXcml0ZUNvbXBpbGVSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICB2b2lkIFdyaXRlT2JqZWN0QnVpbGRTdGF0ZW1lbnRzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdEZvckNvbmZpZyk7CisgIHZvaWQgV3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RGb3JDb25maWcpOworICB2b2lkIFdyaXRlVGFyZ2V0RGVwZW5kSW5mbyhzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKLSAgdm9pZCBFbWl0U3dpZnREZXBlbmRlbmN5SW5mbyhjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSk7CisgIHZvaWQgRW1pdFN3aWZ0RGVwZW5kZW5jeUluZm8oY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgdm9pZCBFeHBvcnRPYmplY3RDb21waWxlQ29tbWFuZCgKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UsIHN0ZDo6c3RyaW5nIGNvbnN0JiBzb3VyY2VGaWxlTmFtZSwKQEAgLTEzOSw5ICsxNjMsOSBAQAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvYmplY3RGaWxlRGlyLCBzdGQ6OnN0cmluZyBjb25zdCYgZmxhZ3MsCiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRlZmluZXMsIHN0ZDo6c3RyaW5nIGNvbnN0JiBpbmNsdWRlcyk7CiAKLSAgdm9pZCBBZGRpdGlvbmFsQ2xlYW5GaWxlcygpOworICB2b2lkIEFkZGl0aW9uYWxDbGVhbkZpbGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCi0gIGNtTmluamFEZXBzIEdldE9iamVjdHMoKSBjb25zdCB7IHJldHVybiB0aGlzLT5PYmplY3RzOyB9CisgIGNtTmluamFEZXBzIEdldE9iamVjdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgdm9pZCBFbnN1cmVEaXJlY3RvcnlFeGlzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcikgY29uc3Q7CiAgIHZvaWQgRW5zdXJlUGFyZW50RGlyZWN0b3J5RXhpc3RzKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKSBjb25zdDsKQEAgLTE1MCwxOSArMTc0LDIyIEBACiAgIHN0cnVjdCBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZQogICAgIDogY21PU1hCdW5kbGVHZW5lcmF0b3I6Ok1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlCiAgIHsKLSAgICBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZShjbU5pbmphVGFyZ2V0R2VuZXJhdG9yKiBnKQorICAgIE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlKGNtTmluamFUYXJnZXRHZW5lcmF0b3IqIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZUNvbmZpZykKICAgICAgIDogR2VuZXJhdG9yKGcpCisgICAgICAsIEZpbGVDb25maWcoc3RkOjptb3ZlKGZpbGVDb25maWcpKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIG9wZXJhdG9yKCkoY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UsIGNvbnN0IGNoYXIqIHBrZ2xvYykgb3ZlcnJpZGU7CisgICAgdm9pZCBvcGVyYXRvcigpKGNtU291cmNlRmlsZSBjb25zdCYgc291cmNlLCBjb25zdCBjaGFyKiBwa2dsb2MsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIG92ZXJyaWRlOwogCiAgIHByaXZhdGU6CiAgICAgY21OaW5qYVRhcmdldEdlbmVyYXRvciogR2VuZXJhdG9yOworICAgIHN0ZDo6c3RyaW5nIEZpbGVDb25maWc7CiAgIH07CiAgIGZyaWVuZCBzdHJ1Y3QgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGU7CiAKLSAgc3RkOjp1bmlxdWVfcHRyPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPiBNYWNPU1hDb250ZW50R2VuZXJhdG9yOwogICAvLyBQcm9wZXJseSBpbml0aWFsaXplZCBieSBzdWItY2xhc3Nlcy4KICAgc3RkOjp1bmlxdWVfcHRyPGNtT1NYQnVuZGxlR2VuZXJhdG9yPiBPU1hCdW5kbGVHZW5lcmF0b3I7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBNYWNDb250ZW50Rm9sZGVyczsKQEAgLTE3NCwxNCArMjAxLDIxIEBACiAKIHByaXZhdGU6CiAgIGNtTG9jYWxOaW5qYUdlbmVyYXRvciogTG9jYWxHZW5lcmF0b3I7Ci0gIC8vLyBMaXN0IG9mIG9iamVjdCBmaWxlcyBmb3IgdGhpcyB0YXJnZXQuCi0gIGNtTmluamFEZXBzIE9iamVjdHM7Ci0gIC8vIEZvcnRyYW4gU3VwcG9ydAotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21OaW5qYURlcHM+IERESUZpbGVzOwotICAvLyBTd2lmdCBTdXBwb3J0Ci0gIEpzb246OlZhbHVlIFN3aWZ0T3V0cHV0TWFwOwotICBzdGQ6OnZlY3RvcjxjbUN1c3RvbUNvbW1hbmQgY29uc3QqPiBDdXN0b21Db21tYW5kczsKLSAgY21OaW5qYURlcHMgRXh0cmFGaWxlczsKKworICBzdHJ1Y3QgQnlDb25maWcKKyAgeworICAgIC8vLyBMaXN0IG9mIG9iamVjdCBmaWxlcyBmb3IgdGhpcyB0YXJnZXQuCisgICAgY21OaW5qYURlcHMgT2JqZWN0czsKKyAgICAvLyBGb3J0cmFuIFN1cHBvcnQKKyAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21OaW5qYURlcHM+IERESUZpbGVzOworICAgIC8vIFN3aWZ0IFN1cHBvcnQKKyAgICBKc29uOjpWYWx1ZSBTd2lmdE91dHB1dE1hcDsKKyAgICBzdGQ6OnZlY3RvcjxjbUN1c3RvbUNvbW1hbmQgY29uc3QqPiBDdXN0b21Db21tYW5kczsKKyAgICBjbU5pbmphRGVwcyBFeHRyYUZpbGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZT4gTWFjT1NYQ29udGVudEdlbmVyYXRvcjsKKyAgfTsKKworICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgQnlDb25maWc+IENvbmZpZ3M7CiB9OwogCiAjZW5kaWYgLy8gISBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDUyNTkwMzcuLmE0MmQ2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtMTUsMTMgKzE1LDEzIEBACiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbE5pbmphR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Mb2NhbE5pbmphR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTmluamFUeXBlcy5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgorI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAKIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yOjpjbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvcigKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKQEAgLTMxLDE0ICszMSwxOCBAQAogCiBjbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvcjo6fmNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCi12b2lkIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yOjpHZW5lcmF0ZSgpCit2b2lkIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yOjpHZW5lcmF0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yKiBnZyA9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpOwogICBjbUxvY2FsTmluamFHZW5lcmF0b3IqIGxnID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKTsKICAgY21HZW5lcmF0b3JUYXJnZXQqIGdlblRhcmdldCA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpOwogCisgIHN0ZDo6c3RyaW5nIGNvbmZpZ0RpcjsKKyAgaWYgKGdlblRhcmdldC0+VGFyZ2V0LT5Jc1BlckNvbmZpZygpKSB7CisgICAgY29uZmlnRGlyID0gZ2ctPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpOworICB9CiAgIHN0ZDo6c3RyaW5nIHV0aWxDb21tYW5kTmFtZSA9Ci0gICAgY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzLyIsCisgICAgY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzIiwgY29uZmlnRGlyLCAiLyIsCiAgICAgICAgICAgICAgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCAiLnV0aWwiKTsKICAgdXRpbENvbW1hbmROYW1lID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHV0aWxDb21tYW5kTmFtZSk7CiAKQEAgLTU1LDggKzU5LDggQEAKIAogICAgIGZvciAoc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBjb25zdCogY21kTGlzdCA6IGNtZExpc3RzKSB7CiAgICAgICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2kgOiAqY21kTGlzdCkgewotICAgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNpLCB0aGlzLT5HZXRDb25maWdOYW1lKCksIGxnKTsKLSAgICAgICAgbGctPkFwcGVuZEN1c3RvbUNvbW1hbmREZXBzKGNjZywgZGVwcyk7CisgICAgICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY2ksIGNvbmZpZywgbGcpOworICAgICAgICBsZy0+QXBwZW5kQ3VzdG9tQ29tbWFuZERlcHMoY2NnLCBkZXBzLCBjb25maWcpOwogICAgICAgICBsZy0+QXBwZW5kQ3VzdG9tQ29tbWFuZExpbmVzKGNjZywgY29tbWFuZHMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNjQnlwcm9kdWN0cyA9IGNjZy5HZXRCeXByb2R1Y3RzKCk7CiAgICAgICAgIHN0ZDo6dHJhbnNmb3JtKGNjQnlwcm9kdWN0cy5iZWdpbigpLCBjY0J5cHJvZHVjdHMuZW5kKCksCkBAIC02OSwxMyArNzMsMTEgQEAKICAgfQogCiAgIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnID0KLSAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKICAgICBnZW5UYXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIGNvbmZpZyk7CiAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSA6IHNvdXJjZXMpIHsKICAgICAgIGlmIChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjID0gc291cmNlLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKLSAgICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqY2MsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgbGcpOworICAgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgY29uZmlnLCBsZyk7CiAgICAgICAgIGxnLT5BZGRDdXN0b21Db21tYW5kVGFyZ2V0KGNjLCBnZW5UYXJnZXQpOwogCiAgICAgICAgIC8vIERlcGVuZCBvbiBhbGwgY3VzdG9tIGNvbW1hbmQgb3V0cHV0cy4KQEAgLTg5LDEzICs5MSwyMSBAQAogICAgIH0KICAgfQogCi0gIGxnLT5BcHBlbmRUYXJnZXRPdXRwdXRzKGdlblRhcmdldCwgcGhvbnlCdWlsZC5PdXRwdXRzKTsKLSAgbGctPkFwcGVuZFRhcmdldERlcGVuZHMoZ2VuVGFyZ2V0LCBkZXBzKTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0Q29uZmlnOworICBpZiAoZ2VuVGFyZ2V0LT5UYXJnZXQtPklzUGVyQ29uZmlnKCkpIHsKKyAgICBvdXRwdXRDb25maWcgPSBjb25maWc7CisgIH0KKyAgbGctPkFwcGVuZFRhcmdldE91dHB1dHMoZ2VuVGFyZ2V0LCBwaG9ueUJ1aWxkLk91dHB1dHMsIG91dHB1dENvbmZpZyk7CisgIGlmIChnZW5UYXJnZXQtPlRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgIGxnLT5BcHBlbmRUYXJnZXRPdXRwdXRzKGdlblRhcmdldCwgZ2ctPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CisgIH0KKyAgbGctPkFwcGVuZFRhcmdldERlcGVuZHMoZ2VuVGFyZ2V0LCBkZXBzLCBjb25maWcsIGNvbmZpZyk7CiAKICAgaWYgKGNvbW1hbmRzLmVtcHR5KCkpIHsKICAgICBwaG9ueUJ1aWxkLkNvbW1lbnQgPSAiVXRpbGl0eSBjb21tYW5kIGZvciAiICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpOwogICAgIHBob255QnVpbGQuRXhwbGljaXREZXBzID0gc3RkOjptb3ZlKGRlcHMpOwotICAgIGdnLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBwaG9ueUJ1aWxkKTsKKyAgICBnZy0+V3JpdGVCdWlsZCh0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCksIHBob255QnVpbGQpOwogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPQogICAgICAgbGctPkJ1aWxkQ29tbWFuZExpbmUoY29tbWFuZHMsICJ1dGlsaXR5IiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKQEAgLTExOCw2ICsxMjgsNyBAQAogICAgICAgbGctPkNvbnZlcnRUb091dHB1dEZvcm1hdChsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkpOwogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoY29tbWFuZCwgIiQoQVJHUykiLCAiIik7CisgICAgY29tbWFuZCA9IGdnLT5FeHBhbmRDRkdJbnREaXIoY29tbWFuZCwgY29uZmlnKTsKIAogICAgIGlmIChjb21tYW5kLmZpbmQoJyQnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgcmV0dXJuOwpAQCAtMTI3LDIyICsxMzgsMzIgQEAKICAgICAgIGdnLT5TZWVuQ3VzdG9tQ29tbWFuZE91dHB1dCh1dGlsX291dHB1dCk7CiAgICAgfQogCisgICAgc3RkOjpzdHJpbmcgY2NDb25maWc7CisgICAgaWYgKGdlblRhcmdldC0+VGFyZ2V0LT5Jc1BlckNvbmZpZygpICYmCisgICAgICAgIGdlblRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgICAgY2NDb25maWcgPSBjb25maWc7CisgICAgfQogICAgIGdnLT5Xcml0ZUN1c3RvbUNvbW1hbmRCdWlsZChjb21tYW5kLCBkZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXRpbGl0eSBjb21tYW5kIGZvciAiICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmRlcGZpbGUqLyAiIiwgLypqb2JfcG9vbCovICIiLCB1c2VzX3Rlcm1pbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnJlc3RhdCovIHRydWUsIHV0aWxfb3V0cHV0cywgZGVwcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qcmVzdGF0Ki8gdHJ1ZSwgdXRpbF9vdXRwdXRzLCBjY0NvbmZpZywgZGVwcyk7CiAKICAgICBwaG9ueUJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2sodXRpbENvbW1hbmROYW1lKTsKLSAgICBnZy0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgcGhvbnlCdWlsZCk7CisgICAgZ2ctPldyaXRlQnVpbGQodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpLCBwaG9ueUJ1aWxkKTsKICAgfQogCiAgIC8vIEZpbmQgQURESVRJT05BTF9DTEVBTl9GSUxFUwotICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcygpOworICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcyhjb25maWcpOwogCiAgIC8vIEFkZCBhbiBhbGlhcyBmb3IgdGhlIGxvZ2ljYWwgdGFyZ2V0IG5hbWUgcmVnYXJkbGVzcyBvZiB3aGF0IGRpcmVjdG9yeQogICAvLyBjb250YWlucyBpdC4gIFNraXAgdGhpcyBmb3IgR0xPQkFMX1RBUkdFVCBiZWNhdXNlIHRoZXkgYXJlIG1lYW50IHRvCiAgIC8vIGJlIHBlci1kaXJlY3RvcnkgYW5kIGhhdmUgb25lIGF0IHRoZSB0b3AtbGV2ZWwgYW55d2F5LgogICBpZiAoZ2VuVGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7Ci0gICAgZ2ctPkFkZFRhcmdldEFsaWFzKHRoaXMtPkdldFRhcmdldE5hbWUoKSwgZ2VuVGFyZ2V0KTsKKyAgICBnZy0+QWRkVGFyZ2V0QWxpYXModGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCBnZW5UYXJnZXQsIGNvbmZpZyk7CisgIH0gZWxzZSBpZiAoZ2ctPklzTXVsdGlDb25maWcoKSAmJiBnZW5UYXJnZXQtPlRhcmdldC0+SXNQZXJDb25maWcoKSkgeworICAgIGNtTmluamFCdWlsZCBwaG9ueUFsaWFzKCJwaG9ueSIpOworICAgIGdnLT5BcHBlbmRUYXJnZXRPdXRwdXRzKGdlblRhcmdldCwgcGhvbnlBbGlhcy5PdXRwdXRzLCAiIik7CisgICAgcGhvbnlBbGlhcy5FeHBsaWNpdERlcHMgPSBwaG9ueUJ1aWxkLk91dHB1dHM7CisgICAgZ2ctPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKSwgcGhvbnlBbGlhcyk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmgKaW5kZXggMDFjYzQ1OS4uY2EzZjBhNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTUsNiArNSw4IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCisjaW5jbHVkZSA8c3RyaW5nPgorCiAjaW5jbHVkZSAiY21OaW5qYVRhcmdldEdlbmVyYXRvci5oIgogCiBjbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKQEAgLTE1LDcgKzE3LDcgQEAKICAgY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CiAgIH5jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCi0gIHZvaWQgR2VuZXJhdGUoKSBvdmVycmlkZTsKKyAgdm9pZCBHZW5lcmF0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBvdmVycmlkZTsKIH07CiAKICNlbmRpZiAvLyAhIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuY3h4CmluZGV4IGE2ZjRlNTEuLjdlZWE0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmN4eApAQCAtMyw3ICszLDYgQEAKICNpbmNsdWRlICJjbU9TWEJ1bmRsZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCkBAIC0xNSwxMiArMTQsMTAgQEAKIAogY2xhc3MgY21Tb3VyY2VGaWxlOwogCi1jbU9TWEJ1bmRsZUdlbmVyYXRvcjo6Y21PU1hCdW5kbGVHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25maWdOYW1lKQorY21PU1hCdW5kbGVHZW5lcmF0b3I6OmNtT1NYQnVuZGxlR2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiAgIDogR1QodGFyZ2V0KQogICAsIE1ha2VmaWxlKHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpKQogICAsIExvY2FsR2VuZXJhdG9yKHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSkKLSAgLCBDb25maWdOYW1lKHN0ZDo6bW92ZShjb25maWdOYW1lKSkKICAgLCBNYWNDb250ZW50Rm9sZGVycyhudWxscHRyKQogewogICBpZiAodGhpcy0+TXVzdFNraXAoKSkgewpAQCAtMzQsMzQgKzMxLDM0IEBACiB9CiAKIHZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUFwcEJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgb3V0cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgb3V0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBpZiAodGhpcy0+TXVzdFNraXAoKSkgewogICAgIHJldHVybjsKICAgfQogCiAgIC8vIENvbXB1dGUgYnVuZGxlIGRpcmVjdG9yeSBuYW1lcy4KLSAgc3RkOjpzdHJpbmcgb3V0ID0KLSAgICBjbVN0ckNhdChvdXRwYXRoLCAnLycsCi0gICAgICAgICAgICAgdGhpcy0+R1QtPkdldEFwcEJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OkZ1bGxMZXZlbCkpOworICBzdGQ6OnN0cmluZyBvdXQgPSBjbVN0ckNhdCgKKyAgICBvdXRwYXRoLCAnLycsCisgICAgdGhpcy0+R1QtPkdldEFwcEJ1bmRsZURpcmVjdG9yeShjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0OjpGdWxsTGV2ZWwpKTsKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShvdXQpOwogICB0aGlzLT5NYWtlZmlsZS0+QWRkQ01ha2VPdXRwdXRGaWxlKG91dCk7CiAKICAgLy8gQ29uZmlndXJlIHRoZSBJbmZvLnBsaXN0IGZpbGUuICBOb3RlIHRoYXQgaXQgbmVlZHMgdGhlIGV4ZWN1dGFibGUgbmFtZQogICAvLyB0byBiZSBzZXQuCi0gIHN0ZDo6c3RyaW5nIHBsaXN0ID0KLSAgICBjbVN0ckNhdChvdXRwYXRoLCAnLycsCi0gICAgICAgICAgICAgdGhpcy0+R1QtPkdldEFwcEJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbnRlbnRMZXZlbCksCi0gICAgICAgICAgICAgIi9JbmZvLnBsaXN0Iik7CisgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gY21TdHJDYXQoCisgICAgb3V0cGF0aCwgJy8nLAorICAgIHRoaXMtPkdULT5HZXRBcHBCdW5kbGVEaXJlY3RvcnkoY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldDo6Q29udGVudExldmVsKSwKKyAgICAiL0luZm8ucGxpc3QiKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdlbmVyYXRlQXBwbGVJbmZvUExpc3QodGhpcy0+R1QsIHRhcmdldE5hbWUsIHBsaXN0KTsKICAgdGhpcy0+TWFrZWZpbGUtPkFkZENNYWtlT3V0cHV0RmlsZShwbGlzdCk7CiAgIG91dHBhdGggPSBvdXQ7CiB9CiAKLXZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUZyYW1ld29yayhjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cGF0aCkKK3ZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUZyYW1ld29yaygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRwYXRoLAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6U2tpcFBhcnRzJiBza2lwUGFydHMpCiB7CiAgIGlmICh0aGlzLT5NdXN0U2tpcCgpKSB7CiAgICAgcmV0dXJuOwpAQCAtNzAsMjggKzY3LDI4IEBACiAgIGFzc2VydCh0aGlzLT5NYWNDb250ZW50Rm9sZGVycyk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIHRvcC1sZXZlbCBmb28uZnJhbWV3b3JrIGRpcmVjdG9yeS4KLSAgc3RkOjpzdHJpbmcgY29udGVudGRpciA9Ci0gICAgY21TdHJDYXQob3V0cGF0aCwgJy8nLAotICAgICAgICAgICAgIHRoaXMtPkdULT5HZXRGcmFtZXdvcmtEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb250ZW50TGV2ZWwpLAotICAgICAgICAgICAgICcvJyk7CisgIHN0ZDo6c3RyaW5nIGNvbnRlbnRkaXIgPSBjbVN0ckNhdCgKKyAgICBvdXRwYXRoLCAnLycsCisgICAgdGhpcy0+R1QtPkdldEZyYW1ld29ya0RpcmVjdG9yeShjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb250ZW50TGV2ZWwpLAorICAgICcvJyk7CiAKICAgc3RkOjpzdHJpbmcgbmV3b3V0cGF0aCA9IG91dHBhdGggKyAiLyIgKwotICAgIHRoaXMtPkdULT5HZXRGcmFtZXdvcmtEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpGdWxsTGV2ZWwpOworICAgIHRoaXMtPkdULT5HZXRGcmFtZXdvcmtEaXJlY3RvcnkoY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldDo6RnVsbExldmVsKTsKIAogICBzdGQ6OnN0cmluZyBmcmFtZXdvcmtWZXJzaW9uID0gdGhpcy0+R1QtPkdldEZyYW1ld29ya1ZlcnNpb24oKTsKIAotICAvLyBDb25maWd1cmUgdGhlIEluZm8ucGxpc3QgZmlsZQotICBzdGQ6OnN0cmluZyBwbGlzdCA9IG5ld291dHBhdGg7Ci0gIGlmICghdGhpcy0+TWFrZWZpbGUtPlBsYXRmb3JtSXNBcHBsZUVtYmVkZGVkKCkpIHsKLSAgICAvLyBQdXQgdGhlIEluZm8ucGxpc3QgZmlsZSBpbnRvIHRoZSBSZXNvdXJjZXMgZGlyZWN0b3J5LgotICAgIHRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzLT5pbnNlcnQoIlJlc291cmNlcyIpOwotICAgIHBsaXN0ICs9ICIvUmVzb3VyY2VzIjsKLSAgfQotICBwbGlzdCArPSAiL0luZm8ucGxpc3QiOwogICBzdGQ6OnN0cmluZyBuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKHRhcmdldE5hbWUpOwotICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2VuZXJhdGVGcmFtZXdvcmtJbmZvUExpc3QodGhpcy0+R1QsIG5hbWUsIHBsaXN0KTsKKyAgaWYgKCFza2lwUGFydHMuaW5mb1BsaXN0KSB7CisgICAgLy8gQ29uZmlndXJlIHRoZSBJbmZvLnBsaXN0IGZpbGUKKyAgICBzdGQ6OnN0cmluZyBwbGlzdCA9IG5ld291dHBhdGg7CisgICAgaWYgKCF0aGlzLT5NYWtlZmlsZS0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKSkgeworICAgICAgLy8gUHV0IHRoZSBJbmZvLnBsaXN0IGZpbGUgaW50byB0aGUgUmVzb3VyY2VzIGRpcmVjdG9yeS4KKyAgICAgIHRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzLT5pbnNlcnQoIlJlc291cmNlcyIpOworICAgICAgcGxpc3QgKz0gIi9SZXNvdXJjZXMiOworICAgIH0KKyAgICBwbGlzdCArPSAiL0luZm8ucGxpc3QiOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZW5lcmF0ZUZyYW1ld29ya0luZm9QTGlzdCh0aGlzLT5HVCwgbmFtZSwgcGxpc3QpOworICB9CiAKICAgLy8gR2VuZXJhdGUgVmVyc2lvbnMgZGlyZWN0b3J5IG9ubHkgZm9yIE1hY09TWCBmcmFtZXdvcmtzCiAgIGlmICh0aGlzLT5NYWtlZmlsZS0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKSkgewpAQCAtMTU2LDI3ICsxNTMsMjYgQEAKIH0KIAogdm9pZCBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6Q3JlYXRlQ0ZCdW5kbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgaWYgKHRoaXMtPk11c3RTa2lwKCkpIHsKICAgICByZXR1cm47CiAgIH0KIAogICAvLyBDb21wdXRlIGJ1bmRsZSBkaXJlY3RvcnkgbmFtZXMuCi0gIHN0ZDo6c3RyaW5nIG91dCA9Ci0gICAgY21TdHJDYXQocm9vdCwgJy8nLAotICAgICAgICAgICAgIHRoaXMtPkdULT5HZXRDRkJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6RnVsbExldmVsKSk7CisgIHN0ZDo6c3RyaW5nIG91dCA9IGNtU3RyQ2F0KAorICAgIHJvb3QsICcvJywKKyAgICB0aGlzLT5HVC0+R2V0Q0ZCdW5kbGVEaXJlY3RvcnkoY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldDo6RnVsbExldmVsKSk7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3Rvcnkob3V0KTsKICAgdGhpcy0+TWFrZWZpbGUtPkFkZENNYWtlT3V0cHV0RmlsZShvdXQpOwogCiAgIC8vIENvbmZpZ3VyZSB0aGUgSW5mby5wbGlzdCBmaWxlLiAgTm90ZSB0aGF0IGl0IG5lZWRzIHRoZSBleGVjdXRhYmxlIG5hbWUKICAgLy8gdG8gYmUgc2V0LgotICBzdGQ6OnN0cmluZyBwbGlzdCA9Ci0gICAgY21TdHJDYXQocm9vdCwgJy8nLAotICAgICAgICAgICAgIHRoaXMtPkdULT5HZXRDRkJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6Q29udGVudExldmVsKSwKLSAgICAgICAgICAgICAiL0luZm8ucGxpc3QiKTsKKyAgc3RkOjpzdHJpbmcgcGxpc3QgPSBjbVN0ckNhdCgKKyAgICByb290LCAnLycsCisgICAgdGhpcy0+R1QtPkdldENGQnVuZGxlRGlyZWN0b3J5KGNvbmZpZywgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbnRlbnRMZXZlbCksCisgICAgIi9JbmZvLnBsaXN0Iik7CiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUodGFyZ2V0TmFtZSk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZW5lcmF0ZUFwcGxlSW5mb1BMaXN0KHRoaXMtPkdULCBuYW1lLCBwbGlzdCk7CiAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDTWFrZU91dHB1dEZpbGUocGxpc3QpOwpAQCAtMTg0LDcgKzE4MCw3IEBACiAKIHZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGNvbnN0JiBzb3VyY2VzLAotICBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZSogZ2VuZXJhdG9yKQorICBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZSogZ2VuZXJhdG9yLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBpZiAodGhpcy0+TXVzdFNraXAoKSkgewogICAgIHJldHVybjsKQEAgLTE5NCwyMCArMTkwLDE5IEBACiAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUZpbGVGbGFncyB0c0ZsYWdzID0KICAgICAgIHRoaXMtPkdULT5HZXRUYXJnZXRTb3VyY2VGaWxlRmxhZ3Moc291cmNlKTsKICAgICBpZiAodHNGbGFncy5UeXBlICE9IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlVHlwZU5vcm1hbCkgewotICAgICAgKCpnZW5lcmF0b3IpKCpzb3VyY2UsIHRzRmxhZ3MuTWFjRm9sZGVyKTsKKyAgICAgICgqZ2VuZXJhdG9yKSgqc291cmNlLCB0c0ZsYWdzLk1hY0ZvbGRlciwgY29uZmlnKTsKICAgICB9CiAgIH0KIH0KIAogc3RkOjpzdHJpbmcgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KAotICBjb25zdCBjaGFyKiBwa2dsb2MpCisgIGNvbnN0IGNoYXIqIHBrZ2xvYywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgLy8gQ29uc3RydWN0IHRoZSBmdWxsIHBhdGggdG8gdGhlIGNvbnRlbnQgc3ViZGlyZWN0b3J5LgogCi0gIHN0ZDo6c3RyaW5nIG1hY2RpciA9Ci0gICAgY21TdHJDYXQodGhpcy0+R1QtPkdldE1hY0NvbnRlbnREaXJlY3RvcnkoCi0gICAgICAgICAgICAgICB0aGlzLT5Db25maWdOYW1lLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCksCi0gICAgICAgICAgICAgJy8nLCBwa2dsb2MpOworICBzdGQ6OnN0cmluZyBtYWNkaXIgPSBjbVN0ckNhdCh0aGlzLT5HVC0+R2V0TWFjQ29udGVudERpcmVjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLCBwa2dsb2MpOwogICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KG1hY2Rpcik7CiAKICAgLy8gUmVjb3JkIHVzZSBvZiB0aGlzIGNvbnRlbnQgbG9jYXRpb24uICBPbmx5IHRoZSBmaXJzdCBsZXZlbApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuaAppbmRleCAzZGVhNmNjLi41YmYxZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuaApAQCAtMTcsMjkgKzE3LDQzIEBACiBjbGFzcyBjbU9TWEJ1bmRsZUdlbmVyYXRvcgogewogcHVibGljOgotICBjbU9TWEJ1bmRsZUdlbmVyYXRvcihjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBzdGQ6OnN0cmluZyBjb25maWdOYW1lKTsKKyAgY21PU1hCdW5kbGVHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CisKKyAgc3RydWN0IFNraXBQYXJ0cworICB7CisgICAgU2tpcFBhcnRzKCkKKyAgICAgIDogaW5mb1BsaXN0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgYm9vbCBpbmZvUGxpc3Q7IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWRlZmF1bHQtbWVtYmVyLWluaXQpCisgIH07CiAKICAgLy8gY3JlYXRlIGFuIGFwcCBidW5kbGUgYXQgYSBnaXZlbiByb290LCBhbmQgcmV0dXJuCiAgIC8vIHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBidW5kbGUgdGhhdCBjb250YWlucyB0aGUgZXhlY3V0YWJsZQotICB2b2lkIENyZWF0ZUFwcEJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgc3RkOjpzdHJpbmcmIHJvb3QpOworICB2b2lkIENyZWF0ZUFwcEJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgc3RkOjpzdHJpbmcmIHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIC8vIGNyZWF0ZSBhIGZyYW1ld29yayBhdCBhIGdpdmVuIHJvb3QKLSAgdm9pZCBDcmVhdGVGcmFtZXdvcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290KTsKKyAgdm9pZCBDcmVhdGVGcmFtZXdvcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa2lwUGFydHMmIHNraXBQYXJ0cyA9IFNraXBQYXJ0cygpKTsKIAogICAvLyBjcmVhdGUgYSBjZiBidW5kbGUgYXQgYSBnaXZlbiByb290Ci0gIHZvaWQgQ3JlYXRlQ0ZCdW5kbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290KTsKKyAgdm9pZCBDcmVhdGVDRkJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RydWN0IE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlCiAgIHsKICAgICB2aXJ0dWFsIH5NYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZSgpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwa2dsb2MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpID0gMDsKICAgfTsKIAogICB2b2lkIEdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gY29uc3QmIHNvdXJjZXMsCi0gICAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUqIGdlbmVyYXRvcik7Ci0gIHN0ZDo6c3RyaW5nIEluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KGNvbnN0IGNoYXIqIHBrZ2xvYyk7CisgICAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUqIGdlbmVyYXRvciwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHN0ZDo6c3RyaW5nIEluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KGNvbnN0IGNoYXIqIHBrZ2xvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgdm9pZCBTZXRNYWNDb250ZW50Rm9sZGVycyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4qIG1hY0NvbnRlbnRGb2xkZXJzKQogICB7CkBAIC01Myw3ICs2Nyw2IEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBHVDsKICAgY21NYWtlZmlsZSogTWFrZWZpbGU7CiAgIGNtTG9jYWxHZW5lcmF0b3IqIExvY2FsR2VuZXJhdG9yOwotICBzdGQ6OnN0cmluZyBDb25maWdOYW1lOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4qIE1hY0NvbnRlbnRGb2xkZXJzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3B0aW9uQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21PcHRpb25Db21tYW5kLmN4eAppbmRleCAyMmU1OWFjLi5hOWFkZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PcHRpb25Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21PcHRpb25Db21tYW5kLmN4eApAQCAtNTIsNyArNTIsNyBAQAogICAvLyBTZWUgaWYgYSBjYWNoZSB2YXJpYWJsZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAvLyBJZiBzbyBqdXN0IG1ha2Ugc3VyZSB0aGUgZG9jIHN0YXRlIGlzIGNvcnJlY3QKICAgY21TdGF0ZSogc3RhdGUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRTdGF0ZSgpOwotICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShhcmdzWzBdKTsKKyAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGFyZ3NbMF0pOwogICBpZiAoZXhpc3RpbmdWYWx1ZSAmJgogICAgICAgKHN0YXRlLT5HZXRDYWNoZUVudHJ5VHlwZShhcmdzWzBdKSAhPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpKSB7CiAgICAgc3RhdGUtPlNldENhY2hlRW50cnlQcm9wZXJ0eShhcmdzWzBdLCAiSEVMUFNUUklORyIsIGFyZ3NbMV0pOwpAQCAtNjAsNyArNjAsNyBAQAogICB9CiAKICAgLy8gTm90aGluZyBpbiB0aGUgY2FjaGUgc28gYWRkIGl0Ci0gIHN0ZDo6c3RyaW5nIGluaXRpYWxWYWx1ZSA9IGV4aXN0aW5nVmFsdWUgPyBleGlzdGluZ1ZhbHVlIDogIk9mZiI7CisgIHN0ZDo6c3RyaW5nIGluaXRpYWxWYWx1ZSA9IGV4aXN0aW5nVmFsdWUgPyAqZXhpc3RpbmdWYWx1ZSA6ICJPZmYiOwogICBpZiAoYXJncy5zaXplKCkgPT0gMykgewogICAgIGluaXRpYWxWYWx1ZSA9IGFyZ3NbMl07CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9yZGVyRGlyZWN0b3JpZXMuY3h4IGIvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5jeHgKaW5kZXggMDczMjIyYy4uMDM2OWFmMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5jeHgKKysrIGIvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5jeHgKQEAgLTgsNyArOCw5IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKQEAgLTI0OCwxMSArMjUwLDcgQEAKICAgdGhpcy0+Q29tcHV0ZWQgPSBmYWxzZTsKIH0KIAotY21PcmRlckRpcmVjdG9yaWVzOjp+Y21PcmRlckRpcmVjdG9yaWVzKCkKLXsKLSAgY21EZWxldGVBbGwodGhpcy0+Q29uc3RyYWludEVudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5JbXBsaWNpdERpckVudHJpZXMpOwotfQorY21PcmRlckRpcmVjdG9yaWVzOjp+Y21PcmRlckRpcmVjdG9yaWVzKCkgPSBkZWZhdWx0OwogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNtT3JkZXJEaXJlY3Rvcmllczo6R2V0T3JkZXJlZERpcmVjdG9yaWVzKCkKIHsKQEAgLTI4NiwxNCArMjg0LDE2IEBACiAKICAgICAgIGlmICh0aGlzLT5Jc0ltcGxpY2l0RGlyZWN0b3J5KGRpcikpIHsKICAgICAgICAgdGhpcy0+SW1wbGljaXREaXJFbnRyaWVzLnB1c2hfYmFjaygKLSAgICAgICAgICBuZXcgY21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludFNPTmFtZSh0aGlzLCBmdWxsUGF0aCwgc29uYW1lKSk7CisgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtT3JkZXJEaXJlY3Rvcmllc0NvbnN0cmFpbnRTT05hbWU+KHRoaXMsIGZ1bGxQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb25hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCB0aGUgcnVudGltZSBpbmZvcm1hdGlvbiBlbnRyeSBmb3IgdGhpcyBsaWJyYXJ5LgogICAgIHRoaXMtPkNvbnN0cmFpbnRFbnRyaWVzLnB1c2hfYmFjaygKLSAgICAgIG5ldyBjbU9yZGVyRGlyZWN0b3JpZXNDb25zdHJhaW50U09OYW1lKHRoaXMsIGZ1bGxQYXRoLCBzb25hbWUpKTsKKyAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbU9yZGVyRGlyZWN0b3JpZXNDb25zdHJhaW50U09OYW1lPih0aGlzLCBmdWxsUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb25hbWUpKTsKICAgfSBlbHNlIHsKICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHNhbWUgbGlicmFyeSBpcyBsaW5rZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgLy8gSW4gdGhhdCBjYXNlIHRoZSBydW50aW1lIGluZm9ybWF0aW9uIGNoZWNrIG5lZWQgYmUgZG9uZSBvbmx5CkBAIC0zMTQsMjcgKzMxNCwyOCBAQAogICAgICAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZ1bGxQYXRoKTsKICAgICAgIGlmICh0aGlzLT5Jc0ltcGxpY2l0RGlyZWN0b3J5KGRpcikpIHsKICAgICAgICAgdGhpcy0+SW1wbGljaXREaXJFbnRyaWVzLnB1c2hfYmFjaygKLSAgICAgICAgICBuZXcgY21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludExpYnJhcnkodGhpcywgZnVsbFBhdGgpKTsKKyAgICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludExpYnJhcnk+KHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGF0aCkpOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBsaW5rIGxpYnJhcnkgZW50cnkuCiAgICAgdGhpcy0+Q29uc3RyYWludEVudHJpZXMucHVzaF9iYWNrKAotICAgICAgbmV3IGNtT3JkZXJEaXJlY3Rvcmllc0NvbnN0cmFpbnRMaWJyYXJ5KHRoaXMsIGZ1bGxQYXRoKSk7CisgICAgICBjbTo6bWFrZV91bmlxdWU8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludExpYnJhcnk+KHRoaXMsIGZ1bGxQYXRoKSk7CiAgIH0KIH0KIAogdm9pZCBjbU9yZGVyRGlyZWN0b3JpZXM6OkFkZFVzZXJEaXJlY3RvcmllcygKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBleHRyYSkKIHsKLSAgY21BcHBlbmQodGhpcy0+VXNlckRpcmVjdG9yaWVzLCBleHRyYSk7CisgIGNtOjphcHBlbmQodGhpcy0+VXNlckRpcmVjdG9yaWVzLCBleHRyYSk7CiB9CiAKIHZvaWQgY21PcmRlckRpcmVjdG9yaWVzOjpBZGRMYW5ndWFnZURpcmVjdG9yaWVzKAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGRpcnMpCiB7Ci0gIGNtQXBwZW5kKHRoaXMtPkxhbmd1YWdlRGlyZWN0b3JpZXMsIGRpcnMpOworICBjbTo6YXBwZW5kKHRoaXMtPkxhbmd1YWdlRGlyZWN0b3JpZXMsIGRpcnMpOwogfQogCiB2b2lkIGNtT3JkZXJEaXJlY3Rvcmllczo6U2V0SW1wbGljaXREaXJlY3RvcmllcygKQEAgLTM2OSw3ICszNzAsNyBAQAogICB0aGlzLT5BZGRPcmlnaW5hbERpcmVjdG9yaWVzKHRoaXMtPlVzZXJEaXJlY3Rvcmllcyk7CiAKICAgLy8gQWRkIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgY29uc3RyYWludHMuCi0gIGZvciAoY21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludCogZW50cnkgOiB0aGlzLT5Db25zdHJhaW50RW50cmllcykgeworICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdGhpcy0+Q29uc3RyYWludEVudHJpZXMpIHsKICAgICBlbnRyeS0+QWRkRGlyZWN0b3J5KCk7CiAgIH0KIApAQCAtNDU0LDcgKzQ1NSw3IEBACiAgIC8vIENoZWNrIGZvciBpdGVtcyBpbiBpbXBsaWNpdCBsaW5rIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBjb25mbGljdHMKICAgLy8gaW4gdGhlIGV4cGxpY2l0IGRpcmVjdG9yaWVzLgogICBzdGQ6Om9zdHJpbmdzdHJlYW0gY29uZmxpY3RzOwotICBmb3IgKGNtT3JkZXJEaXJlY3Rvcmllc0NvbnN0cmFpbnQqIGVudHJ5IDogdGhpcy0+SW1wbGljaXREaXJFbnRyaWVzKSB7CisgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB0aGlzLT5JbXBsaWNpdERpckVudHJpZXMpIHsKICAgICBlbnRyeS0+RmluZEltcGxpY2l0Q29uZmxpY3RzKGNvbmZsaWN0cyk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5oIGIvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5oCmluZGV4IDIzYzUxNDUuLjhjZTUzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU9yZGVyRGlyZWN0b3JpZXMuaAorKysgYi9Tb3VyY2UvY21PcmRlckRpcmVjdG9yaWVzLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtNDYsOCArNDcsOSBAQAogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBPcmRlcmVkRGlyZWN0b3JpZXM7CiAKLSAgc3RkOjp2ZWN0b3I8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludCo+IENvbnN0cmFpbnRFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxjbU9yZGVyRGlyZWN0b3JpZXNDb25zdHJhaW50Kj4gSW1wbGljaXREaXJFbnRyaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludD4+IENvbnN0cmFpbnRFbnRyaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludD4+CisgICAgSW1wbGljaXREaXJFbnRyaWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gVXNlckRpcmVjdG9yaWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGFuZ3VhZ2VEaXJlY3RvcmllczsKICAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIFJlbW92ZUxpYnJhcnlFeHRlbnNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuY3h4IGIvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmN4eAppbmRleCBlNjAyYTZkLi4xYzZmYWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuY3h4CisrKyBiL1NvdXJjZS9jbU91dHB1dENvbnZlcnRlci5jeHgKQEAgLTQzLDkgKzQzLDEwIEBACiB7CiAgIHN0ZDo6c3RyaW5nIHJlc3VsdChzb3VyY2UpOwogICAvLyBDb252ZXJ0IGl0IHRvIGFuIG91dHB1dCBwYXRoLgotICBpZiAob3V0cHV0ID09IFNIRUxMIHx8IG91dHB1dCA9PSBXQVRDT01RVU9URSkgeworICBpZiAob3V0cHV0ID09IFNIRUxMIHx8IG91dHB1dCA9PSBXQVRDT01RVU9URSB8fCBvdXRwdXQgPT0gTklOSkFNVUxUSSkgewogICAgIHJlc3VsdCA9IHRoaXMtPkNvbnZlcnREaXJlY3RvcnlTZXBhcmF0b3JzRm9yU2hlbGwoc291cmNlKTsKLSAgICByZXN1bHQgPSB0aGlzLT5Fc2NhcGVGb3JTaGVsbChyZXN1bHQsIHRydWUsIGZhbHNlLCBvdXRwdXQgPT0gV0FUQ09NUVVPVEUpOworICAgIHJlc3VsdCA9IHRoaXMtPkVzY2FwZUZvclNoZWxsKHJlc3VsdCwgdHJ1ZSwgZmFsc2UsIG91dHB1dCA9PSBXQVRDT01RVU9URSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPT0gTklOSkFNVUxUSSk7CiAgIH0gZWxzZSBpZiAob3V0cHV0ID09IFJFU1BPTlNFKSB7CiAgICAgcmVzdWx0ID0gdGhpcy0+RXNjYXBlRm9yU2hlbGwocmVzdWx0LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgfQpAQCAtNzksOSArODAsOSBAQAogICByZXR1cm4gKHNoZWxsT3BlcmF0b3JzLmNvdW50KHN0cikgIT0gMCk7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JTaGVsbChjbTo6c3RyaW5nX3ZpZXcgc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWFrZVZhcnMsIGJvb2wgZm9yRWNobywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZVdhdGNvbVF1b3RlKSBjb25zdAorc3RkOjpzdHJpbmcgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvclNoZWxsKAorICBjbTo6c3RyaW5nX3ZpZXcgc3RyLCBib29sIG1ha2VWYXJzLCBib29sIGZvckVjaG8sIGJvb2wgdXNlV2F0Y29tUXVvdGUsCisgIGJvb2wgdW5lc2NhcGVOaW5qYUNvbmZpZ3VyYXRpb24pIGNvbnN0CiB7CiAgIC8vIERvIG5vdCBlc2NhcGUgc2hlbGwgb3BlcmF0b3JzLgogICBpZiAoY21PdXRwdXRDb252ZXJ0ZXJJc1NoZWxsT3BlcmF0b3Ioc3RyKSkgewpAQCAtOTUsNiArOTYsOSBAQAogICB9IGVsc2UgaWYgKCF0aGlzLT5MaW5rU2NyaXB0U2hlbGwpIHsKICAgICBmbGFncyB8PSBTaGVsbF9GbGFnX01ha2U7CiAgIH0KKyAgaWYgKHVuZXNjYXBlTmluamFDb25maWd1cmF0aW9uKSB7CisgICAgZmxhZ3MgfD0gU2hlbGxfRmxhZ19VbmVzY2FwZU5pbmphQ29uZmlndXJhdGlvbjsKKyAgfQogICBpZiAobWFrZVZhcnMpIHsKICAgICBmbGFncyB8PSBTaGVsbF9GbGFnX0FsbG93TWFrZVZhcmlhYmxlczsKICAgfQpAQCAtNTExLDUgKzUxNSwxNCBAQAogICAgIH0KICAgfQogCisgIGlmIChmbGFncyAmIFNoZWxsX0ZsYWdfVW5lc2NhcGVOaW5qYUNvbmZpZ3VyYXRpb24pIHsKKyAgICBzdGQ6OnN0cmluZyBuaW5qYUNvbmZpZ1JlcGxhY2U7CisgICAgaWYgKGZsYWdzICYgU2hlbGxfRmxhZ19Jc1VuaXgpIHsKKyAgICAgIG5pbmphQ29uZmlnUmVwbGFjZSArPSAnXFwnOworICAgIH0KKyAgICBuaW5qYUNvbmZpZ1JlcGxhY2UgKz0gIiQke0NPTkZJR1VSQVRJT059IjsKKyAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKG91dCwgbmluamFDb25maWdSZXBsYWNlLCAiJHtDT05GSUdVUkFUSU9OfSIpOworICB9CisKICAgcmV0dXJuIG91dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU91dHB1dENvbnZlcnRlci5oIGIvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmgKaW5kZXggMzQ5YTA2OS4uNjU4M2FiNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmgKKysrIGIvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKICAgewogICAgIFNIRUxMLAogICAgIFdBVENPTVFVT1RFLAorICAgIE5JTkpBTVVMVEksCiAgICAgUkVTUE9OU0UKICAgfTsKICAgc3RkOjpzdHJpbmcgQ29udmVydFRvT3V0cHV0Rm9ybWF0KGNtOjpzdHJpbmdfdmlldyBzb3VyY2UsCkBAIC03MCwxMiArNzEsMTQgQEAKICAgICAvKiogVGhlIHRhcmdldCBzaGVsbCBxdW90aW5nIHVzZXMgZXh0cmEgc2luZ2xlIFF1b3RlcyBmb3IgV2F0Y29tIHRvb2xzLiAgKi8KICAgICBTaGVsbF9GbGFnX1dhdGNvbVF1b3RlID0gKDEgPDwgNyksCiAKLSAgICBTaGVsbF9GbGFnX0lzVW5peCA9ICgxIDw8IDgpCisgICAgU2hlbGxfRmxhZ19Jc1VuaXggPSAoMSA8PCA4KSwKKworICAgIFNoZWxsX0ZsYWdfVW5lc2NhcGVOaW5qYUNvbmZpZ3VyYXRpb24gPSAoMSA8PCA5KSwKICAgfTsKIAogICBzdGQ6OnN0cmluZyBFc2NhcGVGb3JTaGVsbChjbTo6c3RyaW5nX3ZpZXcgc3RyLCBib29sIG1ha2VWYXJzID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yRWNobyA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZVdhdGNvbVF1b3RlID0gZmFsc2UpIGNvbnN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvckVjaG8gPSBmYWxzZSwgYm9vbCB1c2VXYXRjb21RdW90ZSA9IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuZXNjYXBlTmluamFDb25maWd1cmF0aW9uID0gZmFsc2UpIGNvbnN0OwogCiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBFc2NhcGVGb3JDTWFrZShjbTo6c3RyaW5nX3ZpZXcgc3RyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3V0cHV0UmVxdWlyZWRGaWxlc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtT3V0cHV0UmVxdWlyZWRGaWxlc0NvbW1hbmQuY3h4CmluZGV4IGUwOTNiZTAuLjE0N2Y5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU91dHB1dFJlcXVpcmVkRmlsZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21PdXRwdXRSZXF1aXJlZEZpbGVzQ29tbWFuZC5jeHgKQEAgLTcsMTAgKzcsMTEgQEAKICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtOTQsNyArOTUsNyBAQAogICAvKioKICAgICogRGVzdHJ1Y3Rvci4KICAgICovCi0gIH5jbUxCRGVwZW5kKCkgeyBjbURlbGV0ZUFsbCh0aGlzLT5EZXBlbmRJbmZvcm1hdGlvbk1hcCk7IH0KKyAgfmNtTEJEZXBlbmQoKSA9IGRlZmF1bHQ7CiAKICAgY21MQkRlcGVuZChjb25zdCBjbUxCRGVwZW5kJikgPSBkZWxldGU7CiAgIGNtTEJEZXBlbmQmIG9wZXJhdG9yPShjb25zdCBjbUxCRGVwZW5kJikgPSBkZWxldGU7CkBAIC0xNTIsOSArMTUzLDkgQEAKICAgICogR2VuZXJhdGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgZmlsZSBnaXZlbi4gIFJldHVybnMgYSBwb2ludGVyIHRvCiAgICAqIHRoZSBjbURlcGVuZEluZm9ybWF0aW9uIG9iamVjdCBmb3IgdGhlIGZpbGUuCiAgICAqLwotICBjb25zdCBjbURlcGVuZEluZm9ybWF0aW9uKiBGaW5kRGVwZW5kZW5jaWVzKGNvbnN0IGNoYXIqIGZpbGUpCisgIGNvbnN0IGNtRGVwZW5kSW5mb3JtYXRpb24qIEZpbmREZXBlbmRlbmNpZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGUpCiAgIHsKLSAgICBjbURlcGVuZEluZm9ybWF0aW9uKiBpbmZvID0gdGhpcy0+R2V0RGVwZW5kSW5mb3JtYXRpb24oZmlsZSwgbnVsbHB0cik7CisgICAgY21EZXBlbmRJbmZvcm1hdGlvbiogaW5mbyA9IHRoaXMtPkdldERlcGVuZEluZm9ybWF0aW9uKGZpbGUsICIiKTsKICAgICB0aGlzLT5HZW5lcmF0ZURlcGVuZEluZm9ybWF0aW9uKGluZm8pOwogICAgIHJldHVybiBpbmZvOwogICB9CkBAIC0yMDMsNyArMjA0LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFkZCB0aGlzIGZpbGUgYW5kIGFsbCBpdHMgZGVwZW5kZW5jaWVzLgotICAgICAgICB0aGlzLT5BZGREZXBlbmRlbmN5KGluZm8sIGluY2x1ZGVGaWxlLmNfc3RyKCkpOworICAgICAgICB0aGlzLT5BZGREZXBlbmRlbmN5KGluZm8sIGluY2x1ZGVGaWxlKTsKICAgICAgICAgLy8vIGFkZCB0aGUgY3h4IGZpbGUgaWYgaXQgZXhpc3RzCiAgICAgICAgIHN0ZDo6c3RyaW5nIGN4eEZpbGUgPSBpbmNsdWRlRmlsZTsKICAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBjeHhGaWxlLnJmaW5kKCcuJyk7CkBAIC0yNTQsNyArMjU1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICB0aGlzLT5BZGREZXBlbmRlbmN5KGluZm8sIGN4eEZpbGUuY19zdHIoKSk7CisgICAgICAgICAgICB0aGlzLT5BZGREZXBlbmRlbmN5KGluZm8sIGN4eEZpbGUpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMjY0LDEwICsyNjUsMTAgQEAKICAgLyoqCiAgICAqIEFkZCBhIGRlcGVuZGVuY3kuICBQb3NzaWJseSB3YWxrIGl0IGZvciBtb3JlIGRlcGVuZGVuY2llcy4KICAgICovCi0gIHZvaWQgQWRkRGVwZW5kZW5jeShjbURlcGVuZEluZm9ybWF0aW9uKiBpbmZvLCBjb25zdCBjaGFyKiBmaWxlKQorICB2b2lkIEFkZERlcGVuZGVuY3koY21EZXBlbmRJbmZvcm1hdGlvbiogaW5mbywgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGUpCiAgIHsKICAgICBjbURlcGVuZEluZm9ybWF0aW9uKiBkZXBlbmRJbmZvID0KLSAgICAgIHRoaXMtPkdldERlcGVuZEluZm9ybWF0aW9uKGZpbGUsIGluZm8tPlBhdGhPbmx5LmNfc3RyKCkpOworICAgICAgdGhpcy0+R2V0RGVwZW5kSW5mb3JtYXRpb24oZmlsZSwgaW5mby0+UGF0aE9ubHkpOwogICAgIHRoaXMtPkdlbmVyYXRlRGVwZW5kSW5mb3JtYXRpb24oZGVwZW5kSW5mbyk7CiAgICAgaW5mby0+QWRkRGVwZW5kZW5jaWVzKGRlcGVuZEluZm8pOwogICB9CkBAIC0zMTMsNyArMzE0LDcgQEAKICAgICAgICAgLy8gRGVwZW5kZW5jeSBoaW50cyBoYXZlIGJlZW4gZ2l2ZW4uICBVc2UgdGhlbSB0byBiZWdpbiB0aGUKICAgICAgICAgLy8gcmVjdXJzaW9uLgogICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogY0ZpbGUuR2V0RGVwZW5kcygpKSB7Ci0gICAgICAgICAgdGhpcy0+QWRkRGVwZW5kZW5jeShpbmZvLCBmaWxlLmNfc3RyKCkpOworICAgICAgICAgIHRoaXMtPkFkZERlcGVuZGVuY3koaW5mbywgZmlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGb3VuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLiAgV2UgYXJlIGRvbmUuCkBAIC0zNjEsOCArMzYyLDggQEAKICAgICogR2V0IGFuIGluc3RhbmNlIG9mIGNtRGVwZW5kSW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZmlsZQogICAgKiBuYW1lLgogICAgKi8KLSAgY21EZXBlbmRJbmZvcm1hdGlvbiogR2V0RGVwZW5kSW5mb3JtYXRpb24oY29uc3QgY2hhciogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFQYXRoKQorICBjbURlcGVuZEluZm9ybWF0aW9uKiBHZXREZXBlbmRJbmZvcm1hdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJhUGF0aCkKICAgewogICAgIC8vIEdldCB0aGUgZnVsbCBwYXRoIGZvciB0aGUgZmlsZSBzbyB0aGF0IGxvb2t1cCBpcyB1bmFtYmlndW91cy4KICAgICBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IHRoaXMtPkZ1bGxQYXRoKGZpbGUsIGV4dHJhUGF0aCk7CkBAIC0zNzEsMTUgKzM3MiwxNiBAQAogICAgIGF1dG8gcmVzdWx0ID0gdGhpcy0+RGVwZW5kSW5mb3JtYXRpb25NYXAuZmluZChmdWxsUGF0aCk7CiAgICAgaWYgKHJlc3VsdCAhPSB0aGlzLT5EZXBlbmRJbmZvcm1hdGlvbk1hcC5lbmQoKSkgewogICAgICAgLy8gRm91bmQgYW4gaW5zdGFuY2UsIHJldHVybiBpdC4KLSAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5nZXQoKTsKICAgICB9CiAgICAgLy8gRGlkbid0IGZpbmQgYW4gaW5zdGFuY2UuICBDcmVhdGUgYSBuZXcgb25lIGFuZCBzYXZlIGl0LgotICAgIGNtRGVwZW5kSW5mb3JtYXRpb24qIGluZm8gPSBuZXcgY21EZXBlbmRJbmZvcm1hdGlvbjsKKyAgICBhdXRvIGluZm8gPSBjbTo6bWFrZV91bmlxdWU8Y21EZXBlbmRJbmZvcm1hdGlvbj4oKTsKKyAgICBhdXRvIHB0ciA9IGluZm8uZ2V0KCk7CiAgICAgaW5mby0+RnVsbFBhdGggPSBmdWxsUGF0aDsKICAgICBpbmZvLT5QYXRoT25seSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChmdWxsUGF0aCk7CiAgICAgaW5mby0+SW5jbHVkZU5hbWUgPSBmaWxlOwotICAgIHRoaXMtPkRlcGVuZEluZm9ybWF0aW9uTWFwW2Z1bGxQYXRoXSA9IGluZm87Ci0gICAgcmV0dXJuIGluZm87CisgICAgdGhpcy0+RGVwZW5kSW5mb3JtYXRpb25NYXBbZnVsbFBhdGhdID0gc3RkOjptb3ZlKGluZm8pOworICAgIHJldHVybiBwdHI7CiAgIH0KIAogICAvKioKQEAgLTM4NywxNCArMzg5LDkgQEAKICAgICogVGhpcyB1c2VzIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgogICAgKiBUT0RPOiBDYWNoZSBwYXRoIGNvbnZlcnNpb25zIHRvIHJlZHVjZSBGaWxlRXhpc3RzIGNhbGxzLgogICAgKi8KLSAgc3RkOjpzdHJpbmcgRnVsbFBhdGgoY29uc3QgY2hhciogZm5hbWUsIGNvbnN0IGNoYXIqIGV4dHJhUGF0aCkKKyAgc3RkOjpzdHJpbmcgRnVsbFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmFQYXRoKQogICB7Ci0gICAgRGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwVHlwZTo6aXRlcmF0b3IgbTsKLSAgICBpZiAoZXh0cmFQYXRoKSB7Ci0gICAgICBtID0gdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwLmZpbmQoZXh0cmFQYXRoKTsKLSAgICB9IGVsc2UgewotICAgICAgbSA9IHRoaXMtPkRpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcC5maW5kKCIiKTsKLSAgICB9CisgICAgYXV0byBtID0gdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwLmZpbmQoZXh0cmFQYXRoKTsKIAogICAgIGlmIChtICE9IHRoaXMtPkRpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcC5lbmQoKSkgewogICAgICAgRmlsZVRvUGF0aE1hcFR5cGUmIG1hcCA9IG0tPnNlY29uZDsKQEAgLTQwNiw3ICs0MDMsNyBAQAogCiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZm5hbWUsIHRydWUpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBmcCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoZm5hbWUpOwotICAgICAgdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwW2V4dHJhUGF0aCA/IGV4dHJhUGF0aCA6ICIiXVtmbmFtZV0gPSBmcDsKKyAgICAgIHRoaXMtPkRpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcFtleHRyYVBhdGhdW2ZuYW1lXSA9IGZwOwogICAgICAgcmV0dXJuIGZwOwogICAgIH0KIApAQCAtNDE4LDEyICs0MTUsMTIgQEAKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHBhdGgsIHRydWUpICYmCiAgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShwYXRoKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBmcCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7Ci0gICAgICAgIHRoaXMtPkRpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcFtleHRyYVBhdGggPyBleHRyYVBhdGggOiAiIl1bZm5hbWVdID0gZnA7CisgICAgICAgIHRoaXMtPkRpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcFtleHRyYVBhdGhdW2ZuYW1lXSA9IGZwOwogICAgICAgICByZXR1cm4gZnA7CiAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4dHJhUGF0aCkgeworICAgIGlmICghZXh0cmFQYXRoLmVtcHR5KCkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBleHRyYVBhdGg7CiAgICAgICBpZiAoIXBhdGguZW1wdHkoKSAmJiBwYXRoLmJhY2soKSAhPSAnLycpIHsKICAgICAgICAgcGF0aCA9IHBhdGggKyAiLyI7CkBAIC00MzgsNyArNDM1LDcgQEAKICAgICB9CiAKICAgICAvLyBDb3VsZG4ndCBmaW5kIHRoZSBmaWxlLgotICAgIHJldHVybiBzdGQ6OnN0cmluZyhmbmFtZSk7CisgICAgcmV0dXJuIGZuYW1lOwogICB9CiAKICAgY21NYWtlZmlsZSogTWFrZWZpbGU7CkBAIC00NDksNyArNDQ2LDggQEAKICAgdXNpbmcgRmlsZVRvUGF0aE1hcFR5cGUgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OwogICB1c2luZyBEaXJlY3RvcnlUb0ZpbGVUb1BhdGhNYXBUeXBlID0KICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgRmlsZVRvUGF0aE1hcFR5cGU+OwotICB1c2luZyBEZXBlbmRJbmZvcm1hdGlvbk1hcFR5cGUgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21EZXBlbmRJbmZvcm1hdGlvbio+OworICB1c2luZyBEZXBlbmRJbmZvcm1hdGlvbk1hcFR5cGUgPQorICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Y21EZXBlbmRJbmZvcm1hdGlvbj4+OwogICBEZXBlbmRJbmZvcm1hdGlvbk1hcFR5cGUgRGVwZW5kSW5mb3JtYXRpb25NYXA7CiAgIERpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcFR5cGUgRGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwOwogfTsKQEAgLTQ3Niw3ICs0NzQsNyBAQAogICBtZC5TZXRNYWtlZmlsZSgmc3RhdHVzLkdldE1ha2VmaWxlKCkpOwogICBtZC5BZGRTZWFyY2hQYXRoKHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CiAgIC8vIGZpbmQgdGhlIGRlcGVuZHMgZm9yIGEgZmlsZQotICBjb25zdCBjbURlcGVuZEluZm9ybWF0aW9uKiBpbmZvID0gbWQuRmluZERlcGVuZGVuY2llcyhmaWxlLmNfc3RyKCkpOworICBjb25zdCBjbURlcGVuZEluZm9ybWF0aW9uKiBpbmZvID0gbWQuRmluZERlcGVuZGVuY2llcyhmaWxlKTsKICAgaWYgKGluZm8pIHsKICAgICAvLyB3cml0ZSB0aGVtIG91dAogICAgIEZJTEUqIGZvdXQgPSBjbXN5czo6U3lzdGVtVG9vbHM6OkZvcGVuKG91dHB1dEZpbGUsICJ3Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Qb2xpY2llcy5oIGIvU291cmNlL2NtUG9saWNpZXMuaAppbmRleCA5MmM4MGJiLi5kM2RhYWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qb2xpY2llcy5oCisrKyBiL1NvdXJjZS9jbVBvbGljaWVzLmgKQEAgLTI5MCw3ICsyOTAsMjUgQEAKICAgU0VMRUNUKFBPTElDWSwgQ01QMDA5NywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICJFeHRlcm5hbFByb2plY3RfQWRkIHdpdGggR0lUX1NVQk1PRFVMRVMgXCJcIiBpbml0aWFsaXplcyBubyAiICAgICAgIFwKICAgICAgICAgICJzdWJtb2R1bGVzLiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIDMsIDE2LCAwLCBjbVBvbGljaWVzOjpXQVJOKQorICAgICAgICAgMywgMTYsIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTRUxFQ1QoUE9MSUNZLCBDTVAwMDk4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIkZpbmRGTEVYIHJ1bnMgZmxleCBpbiBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVIgd2hlbiBleGVjdXRpbmcuIiwgMywgXAorICAgICAgICAgMTcsIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTRUxFQ1QoUE9MSUNZLCBDTVAwMDk5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIkxpbmsgcHJvcGVydGllcyBhcmUgdHJhbnNpdGl2ZSBvdmVyIHByaXZhdGUgZGVwZW5kZW5jeSBvbiBzdGF0aWMgIiAgXAorICAgICAgICAgImxpYnJhcmllcy4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgMywgMTcsIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTRUxFQ1QoUE9MSUNZLCBDTVAwMTAwLCAiTGV0IEFVVE9NT0MgYW5kIEFVVE9VSUMgcHJvY2VzcyAuaGggZmlsZXMuIiwgMywgICAgXAorICAgICAgICAgMTcsIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTRUxFQ1QoUE9MSUNZLCBDTVAwMTAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgInRhcmdldF9jb21waWxlX29wdGlvbnMgaG9ub3JzIEJFRk9SRSBrZXl3b3JkIGluIGFsbCBzY29wZXMuIiwgMywgICAgXAorICAgICAgICAgMTcsIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTRUxFQ1QoUE9MSUNZLCBDTVAwMTAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIm1hcmtfYXNfYWR2YW5jZWQoKSBkb2VzIG5vdGhpbmcgaWYgYSBjYWNoZSBlbnRyeSBkb2VzIG5vdCBleGlzdC4iLCAgXAorICAgICAgICAgMywgMTcsIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTRUxFQ1QoUE9MSUNZLCBDTVAwMTAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIm11bHRpcGxlIGV4cG9ydCgpIHdpdGggc2FtZSBGSUxFIHdpdGhvdXQgQVBQRU5EIGlzIG5vdCBhbGxvd2VkLiIsICAgXAorICAgICAgICAgMywgMTgsIDAsIGNtUG9saWNpZXM6OldBUk4pCiAKICNkZWZpbmUgQ01fU0VMRUNUX0lEKEYsIEExLCBBMiwgQTMsIEE0LCBBNSwgQTYpIEYoQTEpCiAjZGVmaW5lIENNX0ZPUl9FQUNIX1BPTElDWV9JRChQT0xJQ1kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMTksNyArMzM3LDggQEAKICAgRihDTVAwMDc2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRihDTVAwMDgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRihDTVAwMDgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRihDTVAwMDk1KQorICBGKENNUDAwOTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGKENNUDAwOTkpCiAKIC8qKiBcY2xhc3MgY21Qb2xpY2llcwogICogXGJyaWVmIEhhbmRsZXMgY2hhbmdlcyBpbiBDTWFrZSBiZWhhdmlvciBhbmQgcG9saWNpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb2Nlc3NPdXRwdXQuY3h4IGIvU291cmNlL2NtUHJvY2Vzc091dHB1dC5jeHgKaW5kZXggZTgwZWE1Yy4uMGZiNGZmNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvY2Vzc091dHB1dC5jeHgKKysrIGIvU291cmNlL2NtUHJvY2Vzc091dHB1dC5jeHgKQEAgLTQsNyArNCwxMCBAQAogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgogCiAjaWYgZGVmaW5lZChfV0lOMzIpCisjICBpbmNsdWRlIDxjbS9tZW1vcnk+CisKICMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKwogdW5zaWduZWQgaW50IGNtUHJvY2Vzc091dHB1dDo6ZGVmYXVsdENvZGVwYWdlID0KICAgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRTsKICNlbmRpZgpAQCAtMTQzLDkgKzE0Niw5IEBACiAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICBjb25zdCBpbnQgd2xlbmd0aCA9CiAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlcGFnZSwgMCwgcmF3LmNfc3RyKCksIGludChyYXcuc2l6ZSgpKSwgTlVMTCwgMCk7Ci0gIHdjaGFyX3QqIHdkYXRhID0gbmV3IHdjaGFyX3Rbd2xlbmd0aF07Ci0gIGludCByID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlcGFnZSwgMCwgcmF3LmNfc3RyKCksIGludChyYXcuc2l6ZSgpKSwgd2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bGVuZ3RoKTsKKyAgYXV0byB3ZGF0YSA9IGNtOjptYWtlX3VuaXF1ZTx3Y2hhcl90W10+KHdsZW5ndGgpOworICBpbnQgciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoY29kZXBhZ2UsIDAsIHJhdy5jX3N0cigpLCBpbnQocmF3LnNpemUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZGF0YS5nZXQoKSwgd2xlbmd0aCk7CiAgIGlmIChyID4gMCkgewogICAgIGlmIChsYXN0Q2hhcikgewogICAgICAgKmxhc3RDaGFyID0gMDsKQEAgLTE1NCwxOCArMTU3LDE2IEBACiAgICAgICAgICpsYXN0Q2hhciA9IHdkYXRhW3dsZW5ndGggLSAxXTsKICAgICAgIH0KICAgICB9Ci0gICAgaW50IGxlbmd0aCA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoZGVmYXVsdENvZGVwYWdlLCAwLCB3ZGF0YSwgd2xlbmd0aCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCBOVUxMKTsKLSAgICBjaGFyKiBkYXRhID0gbmV3IGNoYXJbbGVuZ3RoXTsKLSAgICByID0gV2lkZUNoYXJUb011bHRpQnl0ZShkZWZhdWx0Q29kZXBhZ2UsIDAsIHdkYXRhLCB3bGVuZ3RoLCBkYXRhLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgaW50IGxlbmd0aCA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoZGVmYXVsdENvZGVwYWdlLCAwLCB3ZGF0YS5nZXQoKSwgd2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKyAgICBhdXRvIGRhdGEgPSBjbTo6bWFrZV91bmlxdWU8Y2hhcltdPihsZW5ndGgpOworICAgIHIgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGRlZmF1bHRDb2RlcGFnZSwgMCwgd2RhdGEuZ2V0KCksIHdsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXQoKSwgbGVuZ3RoLCBOVUxMLCBOVUxMKTsKICAgICBpZiAociA+IDApIHsKLSAgICAgIGRlY29kZWQgPSBzdGQ6OnN0cmluZyhkYXRhLCBsZW5ndGgpOworICAgICAgZGVjb2RlZCA9IHN0ZDo6c3RyaW5nKGRhdGEuZ2V0KCksIGxlbmd0aCk7CiAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICB9Ci0gICAgZGVsZXRlW10gZGF0YTsKICAgfQotICBkZWxldGVbXSB3ZGF0YTsKICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb2plY3RDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVByb2plY3RDb21tYW5kLmN4eAppbmRleCA3YmI1MjA5Li4yZWM2NmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9qZWN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtUHJvamVjdENvbW1hbmQuY3h4CkBAIC0zOSwxMyArMzksMTggQEAKIAogICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvamVjdE5hbWUgPSBhcmdzWzBdOwogCisgIGlmICghSW5jbHVkZUJ5VmFyaWFibGUoc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDTUFLRV9QUk9KRUNUXyIgKyBwcm9qZWN0TmFtZSArICJfSU5DTFVERV9CRUZPUkUiKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG1mLlNldFByb2plY3ROYW1lKHByb2plY3ROYW1lKTsKIAogICBtZi5BZGRDYWNoZURlZmluaXRpb24ocHJvamVjdE5hbWUgKyAiX0JJTkFSWV9ESVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgbWYuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBtZi5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsdWUgQ29tcHV0ZWQgYnkgQ01ha2UiLCBjbVN0YXRlRW51bXM6OlNUQVRJQyk7CiAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihwcm9qZWN0TmFtZSArICJfU09VUkNFX0RJUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZi5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1mLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZSBDb21wdXRlZCBieSBDTWFrZSIsIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKIAogICBtZi5BZGREZWZpbml0aW9uKCJQUk9KRUNUX0JJTkFSWV9ESVIiLCBtZi5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOwpAQCAtNjEsNyArNjYsNyBAQAogICAvLyB3aWxsIHdvcmsuCiAgIGlmICghbWYuR2V0RGVmaW5pdGlvbigiQ01BS0VfUFJPSkVDVF9OQU1FIikgfHwgbWYuSXNSb290TWFrZWZpbGUoKSkgewogICAgIG1mLkFkZERlZmluaXRpb24oIkNNQUtFX1BST0pFQ1RfTkFNRSIsIHByb2plY3ROYW1lKTsKLSAgICBtZi5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX1BST0pFQ1RfTkFNRSIsIHByb2plY3ROYW1lLmNfc3RyKCksCisgICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9QUk9KRUNUX05BTUUiLCBwcm9qZWN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbHVlIENvbXB1dGVkIGJ5IENNYWtlIiwgY21TdGF0ZUVudW1zOjpTVEFUSUMpOwogICB9CiAKQEAgLTM3NCw3ICszNzksNyBAQAogICAvLyBDTWFrZUxpc3RzLnR4dCBmaWxlLCB0aGVuIGdvIHdpdGggdGhlIGxhc3Qgb25lLgogICBpZiAoIW1mLkdldERlZmluaXRpb24obmFtZSkgfHwgbWYuSXNSb290TWFrZWZpbGUoKSkgewogICAgIG1mLkFkZERlZmluaXRpb24obmFtZSwgdmFsdWUpOwotICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihuYW1lLCB2YWx1ZS5jX3N0cigpLCAiVmFsdWUgQ29tcHV0ZWQgYnkgQ01ha2UiLAorICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihuYW1lLCB2YWx1ZSwgIlZhbHVlIENvbXB1dGVkIGJ5IENNYWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVEFUSUMpOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uY3h4IGIvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uLmN4eAppbmRleCA2YTMxNzRjLi5jOGVmYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uY3h4CisrKyBiL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbi5jeHgKQEAgLTIsMTkgKzIsMTcgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtUHJvcGVydHlEZWZpbml0aW9uLmgiCiAKLXZvaWQgY21Qcm9wZXJ0eURlZmluaXRpb246OkRlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc2hvcnREZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bGxEZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW4pCisjaW5jbHVkZSA8dXRpbGl0eT4KKworY21Qcm9wZXJ0eURlZmluaXRpb246OmNtUHJvcGVydHlEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZnVsbERlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW4pCisgIDogTmFtZShzdGQ6Om1vdmUobmFtZSkpCisgICwgU2hvcnREZXNjcmlwdGlvbihzdGQ6Om1vdmUoc2hvcnREZXNjcmlwdGlvbikpCisgICwgRnVsbERlc2NyaXB0aW9uKHN0ZDo6bW92ZShmdWxsRGVzY3JpcHRpb24pKQorICAsIFNjb3BlKHNjb3BlKQorICAsIENoYWluZWQoY2hhaW4pCiB7Ci0gIHRoaXMtPk5hbWUgPSBuYW1lOwotICB0aGlzLT5TY29wZSA9IHNjb3BlOwotICB0aGlzLT5DaGFpbmVkID0gY2hhaW47Ci0gIGlmIChzaG9ydERlc2NyaXB0aW9uKSB7Ci0gICAgdGhpcy0+U2hvcnREZXNjcmlwdGlvbiA9IHNob3J0RGVzY3JpcHRpb247Ci0gIH0KLSAgaWYgKGZ1bGxEZXNjcmlwdGlvbikgewotICAgIHRoaXMtPkZ1bGxEZXNjcmlwdGlvbiA9IGZ1bGxEZXNjcmlwdGlvbjsKLSAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uLmggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaAppbmRleCAwZDY4YzMyLi5kMmU0NDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaApAQCAtMjEsMTMgKzIxLDEwIEBACiBjbGFzcyBjbVByb3BlcnR5RGVmaW5pdGlvbgogewogcHVibGljOgotICAvLy8gRGVmaW5lIHRoaXMgcHJvcGVydHkKLSAgdm9pZCBEZWZpbmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluZWQpOwotCi0gIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yCi0gIGNtUHJvcGVydHlEZWZpbml0aW9uKCkgeyB0aGlzLT5DaGFpbmVkID0gZmFsc2U7IH0KKyAgLy8vIENvbnN0cnVjdG9yCisgIGNtUHJvcGVydHlEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgU2hvcnREZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluZWQgPSBmYWxzZSk7CiAKICAgLy8vIElzIHRoZSBwcm9wZXJ0eSBjaGFpbmVkPwogICBib29sIElzQ2hhaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkNoYWluZWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuY3h4CmluZGV4IGY3NTJlZDcuLjYxNGQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5jeHgKKysrIGIvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uTWFwLmN4eApAQCAtMiwyMCArMiwyMCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuaCIKIAorI2luY2x1ZGUgPHR1cGxlPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLXZvaWQgY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OkRlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogU2hvcnREZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW4pCit2b2lkIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwOjpEZWZpbmVQcm9wZXJ0eSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBGdWxsRGVzY3JpcHRpb24sCisgIGJvb2wgY2hhaW4pCiB7CiAgIGF1dG8gaXQgPSB0aGlzLT5maW5kKG5hbWUpOwotICBjbVByb3BlcnR5RGVmaW5pdGlvbiogcHJvcDsKICAgaWYgKGl0ID09IHRoaXMtPmVuZCgpKSB7Ci0gICAgcHJvcCA9ICYoKnRoaXMpW25hbWVdOwotICAgIHByb3AtPkRlZmluZVByb3BlcnR5KG5hbWUsIHNjb3BlLCBTaG9ydERlc2NyaXB0aW9uLCBGdWxsRGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhaW4pOworICAgIC8vIHRyeV9lbXBsYWNlKCkgc2luY2UgQysrMTcKKyAgICB0aGlzLT5lbXBsYWNlKHN0ZDo6cGllY2V3aXNlX2NvbnN0cnVjdCwgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKG5hbWUpLAorICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKG5hbWUsIHNjb3BlLCBTaG9ydERlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bGxEZXNjcmlwdGlvbiwgY2hhaW4pKTsKICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuaCBiL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5oCmluZGV4IDhlYzc5MTAuLjJhZTZlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5oCisrKyBiL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5oCkBAIC0xNyw4ICsxNyw4IEBACiBwdWJsaWM6CiAgIC8vIGRlZmluZSB0aGUgcHJvcGVydHkKICAgdm9pZCBEZWZpbmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluKTsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgU2hvcnREZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluKTsKIAogICAvLyBoYXMgYSBuYW1lZCBwcm9wZXJ0eSBiZWVuIGRlZmluZWQKICAgYm9vbCBJc1Byb3BlcnR5RGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5jeHgKaW5kZXggYTNkNDk0Ni4uZjIyZjM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHlNYXAuY3h4CisrKyBiL1NvdXJjZS9jbVByb3BlcnR5TWFwLmN4eApAQCAtMjAsMTEgKzIwLDExIEBACiAgIE1hcF9bbmFtZV0gPSB2YWx1ZTsKIH0KIAotdm9pZCBjbVByb3BlcnR5TWFwOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCit2b2lkIGNtUHJvcGVydHlNYXA6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcpCiB7CiAgIC8vIFNraXAgaWYgbm90aGluZyB0byBhcHBlbmQuCi0gIGlmICghdmFsdWUgfHwgISp2YWx1ZSkgeworICBpZiAodmFsdWUuZW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQogCkBAIC00MiwxMyArNDIsMTEgQEAKICAgTWFwXy5lcmFzZShuYW1lKTsKIH0KIAotY29uc3QgY2hhciogY21Qcm9wZXJ0eU1hcDo6R2V0UHJvcGVydHlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKK2NtUHJvcCBjbVByb3BlcnR5TWFwOjpHZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAogewotICB7Ci0gICAgYXV0byBpdCA9IE1hcF8uZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gTWFwXy5lbmQoKSkgewotICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuY19zdHIoKTsKLSAgICB9CisgIGF1dG8gaXQgPSBNYXBfLmZpbmQobmFtZSk7CisgIGlmIChpdCAhPSBNYXBfLmVuZCgpKSB7CisgICAgcmV0dXJuICZpdC0+c2Vjb25kOwogICB9CiAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHlNYXAuaCBiL1NvdXJjZS9jbVByb3BlcnR5TWFwLmgKaW5kZXggOWFlZDM0OS4uNDBhYzM1NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHlNYXAuaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKK3VzaW5nIGNtUHJvcCA9IGNvbnN0IHN0ZDo6c3RyaW5nKjsKKwogLyoqIFxjbGFzcyBjbVByb3BlcnR5TWFwCiAgKiBcYnJpZWYgU3RyaW5nIHByb3BlcnR5IG1hcC4KICAqLwpAQCAtMjcsMTEgKzI5LDExIEBACiAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKIAogICAvLyEgQXBwZW5kIHRvIHRoZSBwcm9wZXJ0eSB2YWx1ZQotICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSwKKyAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CiAKICAgLy8hIEdldCB0aGUgcHJvcGVydHkgdmFsdWUKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKIAogICAvLyEgUmVtb3ZlIHRoZSBwcm9wZXJ0eSBAYSBuYW1lIGZyb20gdGhlIG1hcAogICB2b2lkIFJlbW92ZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVF0QXV0b0dlbi5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW4uY3h4CmluZGV4IGViN2M5MDAuLmQ1ODkxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b0dlbi5jeHgKKysrIGIvU291cmNlL2NtUXRBdXRvR2VuLmN4eApAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKQEAgLTY3LDcgKzY5LDcgQEAKICAgICB9CiAgIH0KICAgLy8gQXBwZW5kIG9wdGlvbnMKLSAgY21BcHBlbmQoYmFzZU9wdHMsIGV4dHJhT3B0cyk7CisgIGNtOjphcHBlbmQoYmFzZU9wdHMsIGV4dHJhT3B0cyk7CiB9CiAKIC8vIC0gQ2xhc3MgZGVmaW5pdGlvbnMKQEAgLTMyOCw3ICszMzAsNyBAQAogICAgIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbWQ7CiAgICAgICBjbWQuZW1wbGFjZV9iYWNrKHRoaXMtPlJjY0V4Y3V0YWJsZV8pOwotICAgICAgY21BcHBlbmQoY21kLCB0aGlzLT5MaXN0T3B0aW9uc18pOworICAgICAgY206OmFwcGVuZChjbWQsIHRoaXMtPkxpc3RPcHRpb25zXyk7CiAgICAgICBjbWQuZW1wbGFjZV9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShxcmNGaWxlKSk7CiAKICAgICAgIC8vIExvZyBjb21tYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5jeHgKaW5kZXggZWY2Yjg4Ni4uMThiMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmN4eApAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgotI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZFR5cGVzLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgpAQCAtNDEsOSArNDAsOSBAQAogfQogCiBjbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyOjpjbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyKAotICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4gY29uc3QmIGxvY2FsR2VuZXJhdG9ycykKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+PiBjb25zdCYgbG9jYWxHZW5lcmF0b3JzKQogewotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogbG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiBsb2NhbEdlbmVyYXRvcnMpIHsKICAgICAvLyBEZXRlY3QgZ2xvYmFsIGF1dG9nZW4gYW5kIGF1dG9yY2MgdGFyZ2V0IG5hbWVzCiAgICAgYm9vbCBnbG9iYWxBdXRvR2VuVGFyZ2V0ID0gZmFsc2U7CiAgICAgYm9vbCBnbG9iYWxBdXRvUmNjVGFyZ2V0ID0gZmFsc2U7CkBAIC01Niw3ICs1NSw3IEBACiAgICAgICAgIGlmICh0YXJnZXROYW1lLmVtcHR5KCkpIHsKICAgICAgICAgICB0YXJnZXROYW1lID0gImF1dG9nZW4iOwogICAgICAgICB9Ci0gICAgICAgIEdsb2JhbEF1dG9HZW5UYXJnZXRzXy5lbXBsYWNlKGxvY2FsR2VuLCBzdGQ6Om1vdmUodGFyZ2V0TmFtZSkpOworICAgICAgICBHbG9iYWxBdXRvR2VuVGFyZ2V0c18uZW1wbGFjZShsb2NhbEdlbi5nZXQoKSwgc3RkOjptb3ZlKHRhcmdldE5hbWUpKTsKICAgICAgICAgZ2xvYmFsQXV0b0dlblRhcmdldCA9IHRydWU7CiAgICAgICB9CiAKQEAgLTY3LDEzICs2NiwxMyBAQAogICAgICAgICBpZiAodGFyZ2V0TmFtZS5lbXB0eSgpKSB7CiAgICAgICAgICAgdGFyZ2V0TmFtZSA9ICJhdXRvcmNjIjsKICAgICAgICAgfQotICAgICAgICBHbG9iYWxBdXRvUmNjVGFyZ2V0c18uZW1wbGFjZShsb2NhbEdlbiwgc3RkOjptb3ZlKHRhcmdldE5hbWUpKTsKKyAgICAgICAgR2xvYmFsQXV0b1JjY1RhcmdldHNfLmVtcGxhY2UobG9jYWxHZW4uZ2V0KCksIHN0ZDo6bW92ZSh0YXJnZXROYW1lKSk7CiAgICAgICAgIGdsb2JhbEF1dG9SY2NUYXJnZXQgPSB0cnVlOwogICAgICAgfQogICAgIH0KIAogICAgIC8vIEZpbmQgdGFyZ2V0cyB0aGF0IHJlcXVpcmUgQVVUT01PQy9VSUMvUkNDIHByb2Nlc3NpbmcKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICAvLyBQcm9jZXNzIG9ubHkgY2VydGFpbiB0YXJnZXQgdHlwZXMKICAgICAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU6CkBAIC0xMDQsNyArMTAzLDcgQEAKICAgICAgICAgICB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eShrdygpLkFVVE9SQ0NfRVhFQ1VUQUJMRSk7CiAKICAgICAgICAgLy8gV2Ugc3VwcG9ydCBRdDQsIFF0NSBhbmQgUXQ2Ci0gICAgICAgIGF1dG8gcXRWZXJzaW9uID0gY21RdEF1dG9HZW5Jbml0aWFsaXplcjo6R2V0UXRWZXJzaW9uKHRhcmdldCk7CisgICAgICAgIGF1dG8gcXRWZXJzaW9uID0gY21RdEF1dG9HZW5Jbml0aWFsaXplcjo6R2V0UXRWZXJzaW9uKHRhcmdldC5nZXQoKSk7CiAgICAgICAgIGJvb2wgY29uc3QgdmFsaWRRdCA9IChxdFZlcnNpb24uZmlyc3QuTWFqb3IgPT0gNCkgfHwKICAgICAgICAgICAocXRWZXJzaW9uLmZpcnN0Lk1ham9yID09IDUpIHx8IChxdFZlcnNpb24uZmlyc3QuTWFqb3IgPT0gNik7CiAKQEAgLTEzNSw4ICsxMzQsOCBAQAogICAgICAgICBpZiAobW9jSXNWYWxpZCB8fCB1aWNJc1ZhbGlkIHx8IHJjY0lzVmFsaWQpIHsKICAgICAgICAgICAvLyBDcmVhdGUgYXV0b2dlbiB0YXJnZXQgaW5pdGlhbGl6ZXIKICAgICAgICAgICBJbml0aWFsaXplcnNfLmVtcGxhY2VfYmFjayhjbTo6bWFrZV91bmlxdWU8Y21RdEF1dG9HZW5Jbml0aWFsaXplcj4oCi0gICAgICAgICAgICB0aGlzLCB0YXJnZXQsIHF0VmVyc2lvbi5maXJzdCwgbW9jSXNWYWxpZCwgdWljSXNWYWxpZCwgcmNjSXNWYWxpZCwKLSAgICAgICAgICAgIGdsb2JhbEF1dG9HZW5UYXJnZXQsIGdsb2JhbEF1dG9SY2NUYXJnZXQpKTsKKyAgICAgICAgICAgIHRoaXMsIHRhcmdldC5nZXQoKSwgcXRWZXJzaW9uLmZpcnN0LCBtb2NJc1ZhbGlkLCB1aWNJc1ZhbGlkLAorICAgICAgICAgICAgcmNjSXNWYWxpZCwgZ2xvYmFsQXV0b0dlblRhcmdldCwgZ2xvYmFsQXV0b1JjY1RhcmdldCkpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMTU0LDIwICsxNTMsMjEgQEAKICAgICBjbU1ha2VmaWxlKiBtYWtlZmlsZSA9IGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpOwogCiAgICAgLy8gQ3JlYXRlIHV0aWxpdHkgdGFyZ2V0Ci0gICAgY21UYXJnZXQqIHRhcmdldCA9IG1ha2VmaWxlLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICAgIG5hbWUsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0cnVlLAotICAgICAgbWFrZWZpbGUtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKS5jX3N0cigpIC8qd29yayBkaXIqLywKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpIC8qb3V0cHV0Ki8sCi0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSAvKmRlcGVuZHMqLywgY21DdXN0b21Db21tYW5kTGluZXMoKSwgZmFsc2UsCi0gICAgICBjb21tZW50LmNfc3RyKCkpOwotICAgIGxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQobmV3IGNtR2VuZXJhdG9yVGFyZ2V0KHRhcmdldCwgbG9jYWxHZW4pKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwZW5kczsKKyAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBub19jb21tYW5kczsKKyAgICBjbVRhcmdldCogdGFyZ2V0ID0gbG9jYWxHZW4tPkFkZFV0aWxpdHlDb21tYW5kKAorICAgICAgbmFtZSwgdHJ1ZSwgbWFrZWZpbGUtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKS5jX3N0cigpLCBub19ieXByb2R1Y3RzLAorICAgICAgbm9fZGVwZW5kcywgbm9fY29tbWFuZHMsIGZhbHNlLCBjb21tZW50LmNfc3RyKCkpOworICAgIGxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQoCisgICAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0b3JUYXJnZXQ+KHRhcmdldCwgbG9jYWxHZW4pKTsKIAogICAgIC8vIFNldCBGT0xERVIgcHJvcGVydHkgaW4gdGhlIHRhcmdldAogICAgIHsKLSAgICAgIGNoYXIgY29uc3QqIGZvbGRlciA9CisgICAgICBjbVByb3AgZm9sZGVyID0KICAgICAgICAgbWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJBVVRPR0VOX1RBUkdFVFNfRk9MREVSIik7CiAgICAgICBpZiAoZm9sZGVyICE9IG51bGxwdHIpIHsKLSAgICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgZm9sZGVyKTsKKyAgICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgKmZvbGRlcik7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0xODAsNyArMTgwLDcgQEAKICAgaWYgKGl0ICE9IEdsb2JhbEF1dG9HZW5UYXJnZXRzXy5lbmQoKSkgewogICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgPSBsb2NhbEdlbi0+RmluZEdlbmVyYXRvclRhcmdldFRvVXNlKGl0LT5zZWNvbmQpOwogICAgIGlmICh0YXJnZXQgIT0gbnVsbHB0cikgewotICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGFyZ2V0TmFtZSwgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCkpOworICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGFyZ2V0TmFtZSwgZmFsc2UsIGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpKTsKICAgICB9CiAgIH0KIH0KQEAgLTE5Miw3ICsxOTIsNyBAQAogICBpZiAoaXQgIT0gR2xvYmFsQXV0b1JjY1RhcmdldHNfLmVuZCgpKSB7CiAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA9IGxvY2FsR2VuLT5GaW5kR2VuZXJhdG9yVGFyZ2V0VG9Vc2UoaXQtPnNlY29uZCk7CiAgICAgaWYgKHRhcmdldCAhPSBudWxscHRyKSB7Ci0gICAgICB0YXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0YXJnZXROYW1lLCBsb2NhbEdlbi0+R2V0TWFrZWZpbGUoKSk7CisgICAgICB0YXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0YXJnZXROYW1lLCBmYWxzZSwgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCkpOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuaCBiL1NvdXJjZS9jbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmgKaW5kZXggODA2NzI1YS4uMmY2ZTU4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5oCkBAIC00OCw3ICs0OCw3IEBACiAKIHB1YmxpYzoKICAgY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplcigKLSAgICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4gY29uc3QmIGxvY2FsR2VuZXJhdG9ycyk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+PiBjb25zdCYgbG9jYWxHZW5lcmF0b3JzKTsKICAgfmNtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIoKTsKIAogICBLZXl3b3JkcyBjb25zdCYga3coKSBjb25zdCB7IHJldHVybiBLZXl3b3Jkc187IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5jeHgKaW5kZXggNWViMDRmNy4uZGRkYmEwYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbkluaXRpYWxpemVyLmN4eApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCi0jaW5jbHVkZSAiY21DdXN0b21Db21tYW5kVHlwZXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtMzQwLDM5ICszMzksNTYgQEAKIAogICAvLyBUYXJnZXRzIEZPTERFUgogICB7Ci0gICAgY29uc3QgY2hhciogZm9sZGVyID0KKyAgICBjbVByb3AgcHJvcCA9CiAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkFVVE9NT0NfVEFSR0VUU19GT0xERVIiKTsKLSAgICBpZiAoZm9sZGVyID09IG51bGxwdHIpIHsKLSAgICAgIGZvbGRlciA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKKyAgICBpZiAocHJvcCA9PSBudWxscHRyKSB7CisgICAgICBwcm9wID0gdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAogICAgICAgICAiQVVUT0dFTl9UQVJHRVRTX0ZPTERFUiIpOwogICAgIH0KKyAgICBjb25zdCBjaGFyKiBmb2xkZXI7CiAgICAgLy8gSW5oZXJpdCBGT0xERVIgcHJvcGVydHkgZnJvbSB0YXJnZXQgKCMxMzY4OCkKLSAgICBpZiAoZm9sZGVyID09IG51bGxwdHIpIHsKKyAgICBpZiAocHJvcCA9PSBudWxscHRyKSB7CiAgICAgICBmb2xkZXIgPSB0aGlzLT5HZW5UYXJnZXQtPkdldFByb3BlcnR5KCJGT0xERVIiKTsKKyAgICB9IGVsc2UgeworICAgICAgZm9sZGVyID0gcHJvcC0+Y19zdHIoKTsKICAgICB9CiAgICAgaWYgKGZvbGRlciAhPSBudWxscHRyKSB7CiAgICAgICB0aGlzLT5UYXJnZXRzRm9sZGVyID0gZm9sZGVyOwogICAgIH0KICAgfQogCi0gIC8vIENoZWNrIHN0YXR1cyBvZiBwb2xpY3kgQ01QMDA3MQotICB7Ci0gICAgY21Qb2xpY2llczo6UG9saWN5U3RhdHVzIGNvbnN0IENNUDAwNzFfc3RhdHVzID0KLSAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA3MSk7Ci0gICAgc3dpdGNoIChDTVAwMDcxX3N0YXR1cykgewotICAgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgotICAgICAgICB0aGlzLT5DTVAwMDcxV2FybiA9IHRydWU7Ci0gICAgICAgIENNX0ZBTExUSFJPVUdIOwotICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6Ci0gICAgICAgIC8vIElnbm9yZSBHRU5FUkFURUQgZmlsZQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgotICAgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6Ci0gICAgICAgIC8vIFByb2Nlc3MgR0VORVJBVEVEIGZpbGUKLSAgICAgICAgdGhpcy0+Q01QMDA3MUFjY2VwdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgLy8gQ2hlY2sgc3RhdHVzIG9mIHBvbGljeSBDTVAwMDcxIHJlZ2FyZGluZyBoYW5kbGluZyBvZiBHRU5FUkFURUQgZmlsZXMKKyAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzEpKSB7CisgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgorICAgICAgLy8gSWdub3JlIEdFTkVSQVRFRCBmaWxlcyBidXQgd2FybgorICAgICAgdGhpcy0+Q01QMDA3MVdhcm4gPSB0cnVlOworICAgICAgQ01fRkFMTFRIUk9VR0g7CisgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6CisgICAgICAvLyBJZ25vcmUgR0VORVJBVEVEIGZpbGVzCisgICAgICBicmVhazsKKyAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0lGX1VTRUQ6CisgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9BTFdBWVM6CisgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6CisgICAgICAvLyBQcm9jZXNzIEdFTkVSQVRFRCBmaWxlcworICAgICAgdGhpcy0+Q01QMDA3MUFjY2VwdCA9IHRydWU7CisgICAgICBicmVhazsKKyAgfQorCisgIC8vIENoZWNrIHN0YXR1cyBvZiBwb2xpY3kgQ01QMDEwMCByZWdhcmRpbmcgaGFuZGxpbmcgb2YgLmhoIGhlYWRlcnMKKyAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAxMDApKSB7CisgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgorICAgICAgLy8gSWdub3JlIGJ1dCAuaGggZmlsZXMgYnV0IHdhcm4KKyAgICAgIHRoaXMtPkNNUDAxMDBXYXJuID0gdHJ1ZTsKKyAgICAgIENNX0ZBTExUSFJPVUdIOworICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgLy8gSWdub3JlIC5oaCBmaWxlcworICAgICAgYnJlYWs7CisgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9JRl9VU0VEOgorICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgorICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgLy8gUHJvY2VzcyAuaGggZmlsZQorICAgICAgdGhpcy0+Q01QMDEwMEFjY2VwdCA9IHRydWU7CisgICAgICBicmVhazsKICAgfQogCiAgIC8vIENvbW1vbiBkaXJlY3RvcmllcwpAQCAtNzM0LDE1ICs3NTAsMjYgQEAKICAgICByZXR1cm4gbXVmOwogICB9OwogCi0gIGF1dG8gYWRkTVVGaWxlID0gWyZdKE1VRmlsZUhhbmRsZSYmIG11ZiwgYm9vbCBpc0hlYWRlcikgeworICBhdXRvIGFkZE1VSGVhZGVyID0gW3RoaXNdKE1VRmlsZUhhbmRsZSYmIG11ZiwgY206OnN0cmluZ192aWV3IGV4dGVuc2lvbikgeworICAgIGNtU291cmNlRmlsZSogc2YgPSBtdWYtPlNGOworICAgIGNvbnN0IGJvb2wgbXVJdCA9IChtdWYtPk1vY0l0IHx8IG11Zi0+VWljSXQpOworICAgIGlmICh0aGlzLT5DTVAwMTAwQWNjZXB0IHx8IChleHRlbnNpb24gIT0gImhoIikpIHsKKyAgICAgIC8vIEFjY2VwdAorICAgICAgaWYgKG11SXQgJiYgbXVmLT5HZW5lcmF0ZWQpIHsKKyAgICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5GaWxlc0dlbmVyYXRlZC5lbXBsYWNlX2JhY2sobXVmLmdldCgpKTsKKyAgICAgIH0KKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycy5lbXBsYWNlKHNmLCBzdGQ6Om1vdmUobXVmKSk7CisgICAgfSBlbHNlIGlmIChtdUl0ICYmIHRoaXMtPkNNUDAxMDBXYXJuKSB7CisgICAgICAvLyBTdG9yZSBmaWxlIGZvciB3YXJuaW5nIG1lc3NhZ2UKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuQ01QMDEwMEhlYWRlcnNXYXJuLnB1c2hfYmFjayhzZik7CisgICAgfQorICB9OworCisgIGF1dG8gYWRkTVVTb3VyY2UgPSBbdGhpc10oTVVGaWxlSGFuZGxlJiYgbXVmKSB7CiAgICAgaWYgKChtdWYtPk1vY0l0IHx8IG11Zi0+VWljSXQpICYmIG11Zi0+R2VuZXJhdGVkKSB7CiAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkZpbGVzR2VuZXJhdGVkLmVtcGxhY2VfYmFjayhtdWYuZ2V0KCkpOwogICAgIH0KLSAgICBpZiAoaXNIZWFkZXIpIHsKLSAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycy5lbXBsYWNlKG11Zi0+U0YsIHN0ZDo6bW92ZShtdWYpKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5Tb3VyY2VzLmVtcGxhY2UobXVmLT5TRiwgc3RkOjptb3ZlKG11ZikpOwotICAgIH0KKyAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LlNvdXJjZXMuZW1wbGFjZShtdWYtPlNGLCBzdGQ6Om1vdmUobXVmKSk7CiAgIH07CiAKICAgLy8gU2NhbiB0aHJvdWdoIHRhcmdldCBmaWxlcwpAQCAtNzY0LDExICs3OTEsMTAgQEAKIAogICAgICAgLy8gUmVnaXN0ZXIgZmlsZXMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgYnkgbW9jIG9yIHVpYwogICAgICAgaWYgKHRoaXMtPk1vY09yVWljRW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgYSBwb2xpY3kgdG8gaW5jbHVkZSAuaGggZmlsZXMuCi0gICAgICAgIGlmIChjbS0+SXNIZWFkZXJFeHRlbnNpb24oZXh0TG93ZXIpICYmIGV4dExvd2VyICE9ICJoaCIpIHsKLSAgICAgICAgICBhZGRNVUZpbGUobWFrZU1VRmlsZShzZiwgZnVsbFBhdGgsIHRydWUpLCB0cnVlKTsKKyAgICAgICAgaWYgKGNtLT5Jc0hlYWRlckV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgICBhZGRNVUhlYWRlcihtYWtlTVVGaWxlKHNmLCBmdWxsUGF0aCwgdHJ1ZSksIGV4dExvd2VyKTsKICAgICAgICAgfSBlbHNlIGlmIChjbS0+SXNTb3VyY2VFeHRlbnNpb24oZXh0TG93ZXIpKSB7Ci0gICAgICAgICAgYWRkTVVGaWxlKG1ha2VNVUZpbGUoc2YsIGZ1bGxQYXRoLCB0cnVlKSwgZmFsc2UpOworICAgICAgICAgIGFkZE1VU291cmNlKG1ha2VNVUZpbGUoc2YsIGZ1bGxQYXRoLCB0cnVlKSk7CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtODAyLDggKzgyOCw2IEBACiAKICAgLy8gRm9yIHNvdXJjZSBmaWxlcyBmaW5kIGFkZGl0aW9uYWwgaGVhZGVycyBhbmQgcHJpdmF0ZSBoZWFkZXJzCiAgIGlmICh0aGlzLT5Nb2NPclVpY0VuYWJsZWQoKSkgewotICAgIHN0ZDo6dmVjdG9yPE1VRmlsZUhhbmRsZT4gZXh0cmFIZWFkZXJzOwotICAgIGV4dHJhSGVhZGVycy5yZXNlcnZlKHRoaXMtPkF1dG9nZW5UYXJnZXQuU291cmNlcy5zaXplKCkgKiAyKTsKICAgICAvLyBIZWFkZXIgc2VhcmNoIHN1ZmZpeGVzIGFuZCBleHRlbnNpb25zCiAgICAgc3RhdGljIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjbTo6c3RyaW5nX3ZpZXc+IGNvbnN0IHN1ZmZpeGVzeyAiIiwgIl9wIiB9OwogICAgIGF1dG8gY29uc3QmIGV4dHMgPSBjbS0+R2V0SGVhZGVyRXh0ZW5zaW9ucygpOwpAQCAtODQ4LDE2ICs4NzIsMTIgQEAKICAgICAgICAgICAgICAgaWYgKCFtdWYuVWljSXQpIHsKICAgICAgICAgICAgICAgICBlTXVmLT5VaWNJdCA9IGZhbHNlOwogICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGV4dHJhSGVhZGVycy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGVNdWYpKTsKKyAgICAgICAgICAgICAgYWRkTVVIZWFkZXIoc3RkOjptb3ZlKGVNdWYpLCBleHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICAvLyBNb3ZlIGdlbmVyYXRlZCBmaWxlcyB0byBtYWluIGhlYWRlcnMgbGlzdAotICAgIGZvciAoYXV0byYgZU11ZiA6IGV4dHJhSGVhZGVycykgewotICAgICAgYWRkTVVGaWxlKHN0ZDo6bW92ZShlTXVmKSwgdHJ1ZSk7Ci0gICAgfQogICB9CiAKICAgLy8gU2NhbiB0aHJvdWdoIGFsbCBzb3VyY2UgZmlsZXMgaW4gdGhlIG1ha2VmaWxlIHRvIGV4dHJhY3QgbW9jIGFuZCB1aWMKQEAgLTg2NSw3ICs4ODUsNyBAQAogICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgdGhlaXIgZmlsZSBuYW1lcyBtaWdodCBiZSBkaXNjb3ZlcmVkIGZyb20gc291cmNlIGZpbGVzCiAgIC8vIGF0IGdlbmVyYXRpb24gdGltZS4KICAgaWYgKHRoaXMtPk1vY09yVWljRW5hYmxlZCgpKSB7Ci0gICAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUZpbGVzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNmIDogdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUZpbGVzKCkpIHsKICAgICAgIC8vIHNmLT5HZXRFeHRlbnNpb24oKSBpcyBvbmx5IHZhbGlkIGFmdGVyIHNmLT5SZXNvbHZlRnVsbFBhdGgoKSAuLi4KICAgICAgIC8vIFNpbmNlIHdlJ3JlIGl0ZXJhdGluZyBvdmVyIHNvdXJjZSBmaWxlcyB0aGF0IG1pZ2h0IGJlIG5vdCBpbiB0aGUKICAgICAgIC8vIHRhcmdldCB3ZSBuZWVkIHRvIGNoZWNrIGZvciBwYXRoIGVycm9ycyAobm90IGV4aXN0aW5nIGZpbGVzKS4KQEAgLTg3NywxOSArODk3LDE4IEBACiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0TG93ZXIgPQogICAgICAgICBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc2YtPkdldEV4dGVuc2lvbigpKTsKIAotICAgICAgLy8gRklYTUU6IEFkZCBhIHBvbGljeSB0byBpbmNsdWRlIC5oaCBmaWxlcy4KLSAgICAgIGlmIChjbS0+SXNIZWFkZXJFeHRlbnNpb24oZXh0TG93ZXIpICYmIGV4dExvd2VyICE9ICJoaCIpIHsKLSAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycywgc2YpKSB7Ci0gICAgICAgICAgYXV0byBtdWYgPSBtYWtlTVVGaWxlKHNmLCBmdWxsUGF0aCwgZmFsc2UpOworICAgICAgaWYgKGNtLT5Jc0hlYWRlckV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycywgc2YuZ2V0KCkpKSB7CisgICAgICAgICAgYXV0byBtdWYgPSBtYWtlTVVGaWxlKHNmLmdldCgpLCBmdWxsUGF0aCwgZmFsc2UpOwogICAgICAgICAgIGlmIChtdWYtPlNraXBNb2MgfHwgbXVmLT5Ta2lwVWljKSB7Ci0gICAgICAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkhlYWRlcnMuZW1wbGFjZShzZiwgc3RkOjptb3ZlKG11ZikpOworICAgICAgICAgICAgYWRkTVVIZWFkZXIoc3RkOjptb3ZlKG11ZiksIGV4dExvd2VyKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSBpZiAoY20tPklzU291cmNlRXh0ZW5zaW9uKGV4dExvd2VyKSkgewotICAgICAgICBpZiAoIWNtQ29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLCBzZikpIHsKLSAgICAgICAgICBhdXRvIG11ZiA9IG1ha2VNVUZpbGUoc2YsIGZ1bGxQYXRoLCBmYWxzZSk7CisgICAgICAgIGlmICghY21Db250YWlucyh0aGlzLT5BdXRvZ2VuVGFyZ2V0LlNvdXJjZXMsIHNmLmdldCgpKSkgeworICAgICAgICAgIGF1dG8gbXVmID0gbWFrZU1VRmlsZShzZi5nZXQoKSwgZnVsbFBhdGgsIGZhbHNlKTsKICAgICAgICAgICBpZiAobXVmLT5Ta2lwTW9jIHx8IG11Zi0+U2tpcFVpYykgewotICAgICAgICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5Tb3VyY2VzLmVtcGxhY2Uoc2YsIHN0ZDo6bW92ZShtdWYpKTsKKyAgICAgICAgICAgIGFkZE1VU291cmNlKHN0ZDo6bW92ZShtdWYpKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSBpZiAodGhpcy0+VWljLkVuYWJsZWQgJiYgKGV4dExvd2VyID09IGt3LnVpKSkgewpAQCAtOTQ3LDYgKzk2NiwzNSBAQAogICAgIH0KICAgfQogCisgIC8vIEdlbmVyYXRlIENNUDAxMDAgd2FybmluZworICBpZiAodGhpcy0+TW9jT3JVaWNFbmFibGVkKCkgJiYKKyAgICAgICF0aGlzLT5BdXRvZ2VuVGFyZ2V0LkNNUDAxMDBIZWFkZXJzV2Fybi5lbXB0eSgpKSB7CisgICAgY206OnN0cmluZ192aWV3IHByb3BlcnR5OworICAgIGlmICh0aGlzLT5Nb2MuRW5hYmxlZCAmJiB0aGlzLT5VaWMuRW5hYmxlZCkgeworICAgICAgcHJvcGVydHkgPSAiU0tJUF9BVVRPR0VOIjsKKyAgICB9IGVsc2UgaWYgKHRoaXMtPk1vYy5FbmFibGVkKSB7CisgICAgICBwcm9wZXJ0eSA9ICJTS0lQX0FVVE9NT0MiOworICAgIH0gZWxzZSBpZiAodGhpcy0+VWljLkVuYWJsZWQpIHsKKyAgICAgIHByb3BlcnR5ID0gIlNLSVBfQVVUT1VJQyI7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIGZpbGVzOworICAgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IHRoaXMtPkF1dG9nZW5UYXJnZXQuQ01QMDEwMEhlYWRlcnNXYXJuKSB7CisgICAgICBmaWxlcyArPSBjbVN0ckNhdCgiICAiLCBRdW90ZWQoc2YtPkdldEZ1bGxQYXRoKCkpLCAnXG4nKTsKKyAgICB9CisgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgIE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywKKyAgICAgIGNtU3RyQ2F0KAorICAgICAgICBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAxMDApLCAnXG4nLAorICAgICAgICAiRm9yIGNvbXBhdGliaWxpdHksIENNYWtlIGlzIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGZpbGUocyk6XG4iLCBmaWxlcywKKyAgICAgICAgImZyb20gcHJvY2Vzc2luZyBieSAiLAorICAgICAgICBjbVF0QXV0b0dlbjo6VG9vbHModGhpcy0+TW9jLkVuYWJsZWQsIHRoaXMtPlVpYy5FbmFibGVkLCBmYWxzZSksCisgICAgICAgICIuICBJZiBhbnkgb2YgdGhlIGZpbGVzIHNob3VsZCBiZSBwcm9jZXNzZWQsIHNldCBDTVAwMTAwIHRvIE5FVy4gICIKKyAgICAgICAgIklmIGFueSBvZiB0aGUgZmlsZXMgc2hvdWxkIG5vdCBiZSBwcm9jZXNzZWQsICIKKyAgICAgICAgImV4cGxpY2l0bHkgZXhjbHVkZSB0aGVtIGJ5IHNldHRpbmcgdGhlIHNvdXJjZSBmaWxlIHByb3BlcnR5ICIsCisgICAgICAgIHByb3BlcnR5LCAiOlxuICBzZXRfcHJvcGVydHkoU09VUkNFIGZpbGUuaGggUFJPUEVSVFkgIiwgcHJvcGVydHksCisgICAgICAgICIgT04pXG4iKSk7CisgIH0KKwogICAvLyBQcm9jZXNzIHFyYyBmaWxlcwogICBpZiAoIXRoaXMtPlJjYy5RcmNzLmVtcHR5KCkpIHsKICAgICBjb25zdCBib29sIG1vZGVyblF0ID0gKHRoaXMtPlF0VmVyc2lvbi5NYWpvciA+PSA1KTsKQEAgLTEwNDUsOSArMTA5MywxNiBAQAogICB9CiAKICAgLy8gQ29tcG9zZSBjb21tYW5kIGxpbmVzCi0gIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lcyA9IGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKAotICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICItRSIsICJjbWFrZV9hdXRvZ2VuIiwKLSAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuSW5mb0ZpbGUsICIkPENPTkZJR1VSQVRJT04+IiB9KTsKKyAgLy8gVE9ETzogUmVmYWN0b3IgYXV0b2dlbiB0byBvdXRwdXQgYSBwZXItY29uZmlnIG1vY3NfY29tcGlsYXRpb24uY3BwIGluc3RlYWQKKyAgLy8gb2YgZmlkZGxpbmcgd2l0aCB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKKyAgdGhpcy0+R2xvYmFsR2VuLT5HZXRRdEF1dG9HZW5Db25maWdzKGNvbmZpZ3MpOworICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXM7CisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgIGNvbW1hbmRMaW5lcy5wdXNoX2JhY2soY21NYWtlQ29tbWFuZExpbmUoCisgICAgICB7IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCAiLUUiLCAiY21ha2VfYXV0b2dlbiIsCisgICAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuSW5mb0ZpbGUsIGNvbmZpZyB9KSk7CisgIH0KIAogICAvLyBVc2UgUFJFX0JVSUxEIG9uIGRlbWFuZAogICBib29sIHVzZVBSRV9CVUlMRCA9IGZhbHNlOwpAQCAtMTA3Myw3ICsxMTI4LDcgQEAKICAgaWYgKHVzZVBSRV9CVUlMRCkgewogICAgIC8vIEFkZCBhZGRpdGlvbmFsIGF1dG9nZW4gdGFyZ2V0IGRlcGVuZGVuY2llcyB0byBvcmlnaW4gdGFyZ2V0CiAgICAgZm9yIChjbVRhcmdldCogZGVwVGFyZ2V0IDogdGhpcy0+QXV0b2dlblRhcmdldC5EZXBlbmRUYXJnZXRzKSB7Ci0gICAgICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eShkZXBUYXJnZXQtPkdldE5hbWUoKSwKKyAgICAgIHRoaXMtPkdlblRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KGRlcFRhcmdldC0+R2V0TmFtZSgpLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlKTsKICAgICB9CiAKQEAgLTEwODQsOCArMTEzOSw4IEBACiAgICAgLy8gUFJFX0JVSUxEIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBkZXBlbmRlbmNpZXMhCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX291dHB1dDsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwczsKLSAgICBjbUN1c3RvbUNvbW1hbmQgY2ModGhpcy0+TWFrZWZpbGUsIG5vX291dHB1dCwgYXV0b2dlblByb3ZpZGVzLCBub19kZXBzLAotICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZXMsIGF1dG9nZW5Db21tZW50LmNfc3RyKCksCisgICAgY21DdXN0b21Db21tYW5kIGNjKG5vX291dHB1dCwgYXV0b2dlblByb3ZpZGVzLCBub19kZXBzLCBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKSwgYXV0b2dlbkNvbW1lbnQuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlyLldvcmsuY19zdHIoKSk7CiAgICAgY2MuU2V0RXNjYXBlT2xkU3R5bGUoZmFsc2UpOwogICAgIGNjLlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CkBAIC0xMTE5LDM1ICsxMTc0LDgzIEBACiAgICAgICB9CiAgICAgfQogCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZGVuY2llcygKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwZW5kRmlsZXMuYmVnaW4oKSwKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwZW5kRmlsZXMuZW5kKCkpOworCisgICAgY29uc3QgYm9vbCB1c2VOaW5qYURlcGZpbGUgPSB0aGlzLT5RdFZlcnNpb24gPj0gSW50ZWdlclZlcnNpb24oNSwgMTUpICYmCisgICAgICB0aGlzLT5HbG9iYWxHZW4tPkdldE5hbWUoKS5maW5kKCJOaW5qYSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgIGlmICh1c2VOaW5qYURlcGZpbGUpIHsKKyAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBjb21tYW5kIHRoYXQgZ2VuZXJhdGVzIGEgdGltZXN0YW1wIGZpbGUgYW5kCisgICAgICAvLyBoYXMgYSBkZXBmaWxlIGFzc2lnbmVkLiBUaGUgZGVwZmlsZSBpcyBjcmVhdGVkIGJ5IEpvYkRlcEZpbGVzTWVyZ2VULgorCisgICAgICAvLyBBZGQgYWRkaXRpb25hbCBhdXRvZ2VuIHRhcmdldCBkZXBlbmRlbmNpZXMKKyAgICAgIGZvciAoY29uc3QgY21UYXJnZXQqIHQgOiB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZFRhcmdldHMpIHsKKyAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2hfYmFjayh0LT5HZXROYW1lKCkpOworICAgICAgfQorICAgICAgY29uc3QgY2hhciB0aW1lc3RhbXBGaWxlTmFtZVtdID0gInRpbWVzdGFtcCI7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvdXRwdXRGaWxlID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+RGlyLkJ1aWxkLCAiLyIsIHRpbWVzdGFtcEZpbGVOYW1lKTsKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZSA9IGNtU3RyQ2F0KHRoaXMtPkRpci5CdWlsZCwgIi9kZXBzIik7CisgICAgICBhdXRvIHJlbGF0aXZlQmluYXJ5RGlyID0gY21TeXN0ZW1Ub29sczo6UmVsYXRpdmVQYXRoKAorICAgICAgICB0aGlzLT5Mb2NhbEdlbi0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCisgICAgICAgIHRoaXMtPkxvY2FsR2VuLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOworICAgICAgaWYgKCFyZWxhdGl2ZUJpbmFyeURpci5lbXB0eSgpKSB7CisgICAgICAgIHJlbGF0aXZlQmluYXJ5RGlyID0gY21TdHJDYXQocmVsYXRpdmVCaW5hcnlEaXIsICIvIik7CisgICAgICB9CisgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcEZpbGVSdWxlTmFtZSA9CisgICAgICAgIGNtU3RyQ2F0KHJlbGF0aXZlQmluYXJ5RGlyLCB0aGlzLT5HZW5UYXJnZXQtPkdldE5hbWUoKSwgIl9hdXRvZ2VuLyIsCisgICAgICAgICAgICAgICAgIHRpbWVzdGFtcEZpbGVOYW1lKTsKKyAgICAgIGNvbW1hbmRMaW5lcy5wdXNoX2JhY2soY21NYWtlQ29tbWFuZExpbmUoCisgICAgICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICItRSIsICJ0b3VjaCIsIG91dHB1dEZpbGUgfSkpOworCisgICAgICB0aGlzLT5BZGRHZW5lcmF0ZWRTb3VyY2Uob3V0cHV0RmlsZSwgdGhpcy0+TW9jKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKKyAgICAgIHRoaXMtPkxvY2FsR2VuLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgICAgIG91dHB1dEZpbGUsIGRlcGVuZGVuY2llcywgbm9fbWFpbl9kZXBlbmRlbmN5LCBjb21tYW5kTGluZXMsCisgICAgICAgIGF1dG9nZW5Db21tZW50LmNfc3RyKCksIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIC8qcmVwbGFjZT0qL2ZhbHNlLAorICAgICAgICAvKmVzY2FwZU9sZFN0eWxlPSovZmFsc2UsCisgICAgICAgIC8qdXNlc190ZXJtaW5hbD0qL2ZhbHNlLAorICAgICAgICAvKmNvbW1hbmRfZXhwYW5kX2xpc3RzPSovZmFsc2UsIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZSk7CisKKyAgICAgIC8vIEFsdGVyIHZhcmlhYmxlcyBmb3IgdGhlIGF1dG9nZW4gdGFyZ2V0IHdoaWNoIG5vdyBtZXJlbHkgd3JhcHMgdGhlCisgICAgICAvLyBjdXN0b20gY29tbWFuZAorICAgICAgZGVwZW5kZW5jaWVzLmNsZWFyKCk7CisgICAgICBkZXBlbmRlbmNpZXMucHVzaF9iYWNrKG91dHB1dEZpbGUpOworICAgICAgY29tbWFuZExpbmVzLmNsZWFyKCk7CisgICAgICBhdXRvZ2VuQ29tbWVudC5jbGVhcigpOworICAgIH0KKwogICAgIC8vIENyZWF0ZSBhdXRvZ2VuIHRhcmdldAotICAgIGNtVGFyZ2V0KiBhdXRvZ2VuVGFyZ2V0ID0gdGhpcy0+TWFrZWZpbGUtPkFkZFV0aWxpdHlDb21tYW5kKAotICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5OYW1lLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdHJ1ZSwKLSAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIC8qYnlwcm9kdWN0cz0qL2F1dG9nZW5Qcm92aWRlcywKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPih0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZEZpbGVzLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5EZXBlbmRGaWxlcy5lbmQoKSksCi0gICAgICBjb21tYW5kTGluZXMsIGZhbHNlLCBhdXRvZ2VuQ29tbWVudC5jX3N0cigpKTsKKyAgICBjbVRhcmdldCogYXV0b2dlblRhcmdldCA9IHRoaXMtPkxvY2FsR2VuLT5BZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuTmFtZSwgdHJ1ZSwgdGhpcy0+RGlyLldvcmsuY19zdHIoKSwKKyAgICAgIC8qYnlwcm9kdWN0cz0qL2F1dG9nZW5Qcm92aWRlcywKKyAgICAgIC8qZGVwZW5kcz0qL2RlcGVuZGVuY2llcywgY29tbWFuZExpbmVzLCBmYWxzZSwgYXV0b2dlbkNvbW1lbnQuY19zdHIoKSk7CiAgICAgLy8gQ3JlYXRlIGF1dG9nZW4gZ2VuZXJhdG9yIHRhcmdldAogICAgIHRoaXMtPkxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQoCi0gICAgICBuZXcgY21HZW5lcmF0b3JUYXJnZXQoYXV0b2dlblRhcmdldCwgdGhpcy0+TG9jYWxHZW4pKTsKKyAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvclRhcmdldD4oYXV0b2dlblRhcmdldCwgdGhpcy0+TG9jYWxHZW4pKTsKIAogICAgIC8vIEZvcndhcmQgb3JpZ2luIHV0aWxpdGllcyB0byBhdXRvZ2VuIHRhcmdldAogICAgIGlmICh0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZE9yaWdpbikgewotICAgICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGRlcE5hbWUgOiB0aGlzLT5HZW5UYXJnZXQtPkdldFV0aWxpdGllcygpKSB7Ci0gICAgICAgIGF1dG9nZW5UYXJnZXQtPkFkZFV0aWxpdHkoZGVwTmFtZS5WYWx1ZSwgdGhpcy0+TWFrZWZpbGUpOworICAgICAgZm9yIChCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PiBjb25zdCYgZGVwTmFtZSA6CisgICAgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0VXRpbGl0aWVzKCkpIHsKKyAgICAgICAgYXV0b2dlblRhcmdldC0+QWRkVXRpbGl0eShkZXBOYW1lLlZhbHVlLmZpcnN0LCBmYWxzZSwgdGhpcy0+TWFrZWZpbGUpOwogICAgICAgfQogICAgIH0KLSAgICAvLyBBZGQgYWRkaXRpb25hbCBhdXRvZ2VuIHRhcmdldCBkZXBlbmRlbmNpZXMgdG8gYXV0b2dlbiB0YXJnZXQKLSAgICBmb3IgKGNtVGFyZ2V0KiBkZXBUYXJnZXQgOiB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZFRhcmdldHMpIHsKLSAgICAgIGF1dG9nZW5UYXJnZXQtPkFkZFV0aWxpdHkoZGVwVGFyZ2V0LT5HZXROYW1lKCksIHRoaXMtPk1ha2VmaWxlKTsKKyAgICBpZiAoIXVzZU5pbmphRGVwZmlsZSkgeworICAgICAgLy8gQWRkIGFkZGl0aW9uYWwgYXV0b2dlbiB0YXJnZXQgZGVwZW5kZW5jaWVzIHRvIGF1dG9nZW4gdGFyZ2V0CisgICAgICBmb3IgKGNtVGFyZ2V0KiBkZXBUYXJnZXQgOiB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZFRhcmdldHMpIHsKKyAgICAgICAgYXV0b2dlblRhcmdldC0+QWRkVXRpbGl0eShkZXBUYXJnZXQtPkdldE5hbWUoKSwgZmFsc2UsIHRoaXMtPk1ha2VmaWxlKTsKKyAgICAgIH0KICAgICB9CiAKICAgICAvLyBTZXQgRk9MREVSIHByb3BlcnR5IGluIGF1dG9nZW4gdGFyZ2V0CiAgICAgaWYgKCF0aGlzLT5UYXJnZXRzRm9sZGVyLmVtcHR5KCkpIHsKLSAgICAgIGF1dG9nZW5UYXJnZXQtPlNldFByb3BlcnR5KCJGT0xERVIiLCB0aGlzLT5UYXJnZXRzRm9sZGVyLmNfc3RyKCkpOworICAgICAgYXV0b2dlblRhcmdldC0+U2V0UHJvcGVydHkoIkZPTERFUiIsIHRoaXMtPlRhcmdldHNGb2xkZXIpOwogICAgIH0KIAogICAgIC8vIEFkZCBhdXRvZ2VuIHRhcmdldCB0byB0aGUgb3JpZ2luIHRhcmdldCBkZXBlbmRlbmNpZXMKLSAgICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0aGlzLT5BdXRvZ2VuVGFyZ2V0Lk5hbWUsCisgICAgdGhpcy0+R2VuVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGhpcy0+QXV0b2dlblRhcmdldC5OYW1lLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZSk7CiAKICAgICAvLyBBZGQgYXV0b2dlbiB0YXJnZXQgdG8gdGhlIGdsb2JhbCBhdXRvZ2VuIHRhcmdldCBkZXBlbmRlbmNpZXMKQEAgLTEyMDUsMjUgKzEzMDgsMjUgQEAKICAgICAgICAgICBjY05hbWUgKz0gY21TdHJDYXQoJ18nLCBxcmMuUXJjUGF0aENoZWNrc3VtKTsKICAgICAgICAgfQogCi0gICAgICAgIGNtVGFyZ2V0KiBhdXRvUmNjVGFyZ2V0ID0gdGhpcy0+TWFrZWZpbGUtPkFkZFV0aWxpdHlDb21tYW5kKAotICAgICAgICAgIGNjTmFtZSwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIHRydWUsIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksCi0gICAgICAgICAgY2NPdXRwdXQsIGNjRGVwZW5kcywgY29tbWFuZExpbmVzLCBmYWxzZSwgY2NDb21tZW50LmNfc3RyKCkpOworICAgICAgICBjbVRhcmdldCogYXV0b1JjY1RhcmdldCA9IHRoaXMtPkxvY2FsR2VuLT5BZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAgICAgICBjY05hbWUsIHRydWUsIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIGNjT3V0cHV0LCBjY0RlcGVuZHMsCisgICAgICAgICAgY29tbWFuZExpbmVzLCBmYWxzZSwgY2NDb21tZW50LmNfc3RyKCkpOwogCiAgICAgICAgIC8vIENyZWF0ZSBhdXRvZ2VuIGdlbmVyYXRvciB0YXJnZXQKICAgICAgICAgdGhpcy0+TG9jYWxHZW4tPkFkZEdlbmVyYXRvclRhcmdldCgKLSAgICAgICAgICBuZXcgY21HZW5lcmF0b3JUYXJnZXQoYXV0b1JjY1RhcmdldCwgdGhpcy0+TG9jYWxHZW4pKTsKKyAgICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0b3JUYXJnZXQ+KGF1dG9SY2NUYXJnZXQsIHRoaXMtPkxvY2FsR2VuKSk7CiAKICAgICAgICAgLy8gU2V0IEZPTERFUiBwcm9wZXJ0eSBpbiBhdXRvZ2VuIHRhcmdldAogICAgICAgICBpZiAoIXRoaXMtPlRhcmdldHNGb2xkZXIuZW1wdHkoKSkgewotICAgICAgICAgIGF1dG9SY2NUYXJnZXQtPlNldFByb3BlcnR5KCJGT0xERVIiLCB0aGlzLT5UYXJnZXRzRm9sZGVyLmNfc3RyKCkpOworICAgICAgICAgIGF1dG9SY2NUYXJnZXQtPlNldFByb3BlcnR5KCJGT0xERVIiLCB0aGlzLT5UYXJnZXRzRm9sZGVyKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRoaXMtPlJjYy5FeGVjdXRhYmxlVGFyZ2V0TmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgYXV0b1JjY1RhcmdldC0+QWRkVXRpbGl0eSh0aGlzLT5SY2MuRXhlY3V0YWJsZVRhcmdldE5hbWUsCisgICAgICAgICAgYXV0b1JjY1RhcmdldC0+QWRkVXRpbGl0eSh0aGlzLT5SY2MuRXhlY3V0YWJsZVRhcmdldE5hbWUsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICAvLyBBZGQgYXV0b2dlbiB0YXJnZXQgdG8gdGhlIG9yaWdpbiB0YXJnZXQgZGVwZW5kZW5jaWVzCi0gICAgICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eShjY05hbWUsIHRoaXMtPk1ha2VmaWxlKTsKKyAgICAgIHRoaXMtPkdlblRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KGNjTmFtZSwgZmFsc2UsIHRoaXMtPk1ha2VmaWxlKTsKIAogICAgICAgLy8gQWRkIGF1dG9nZW4gdGFyZ2V0IHRvIHRoZSBnbG9iYWwgYXV0b2dlbiB0YXJnZXQgZGVwZW5kZW5jaWVzCiAgICAgICBpZiAodGhpcy0+UmNjLkdsb2JhbFRhcmdldCkgewpAQCAtMTI0NCw3ICsxMzQ3LDcgQEAKICAgICAgICAgfQogICAgICAgICBzdGQ6OnN0cmluZyBub19tYWluX2RlcGVuZGVuY3k7CiAgICAgICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgICAgICB0aGlzLT5Mb2NhbEdlbi0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAogICAgICAgICAgIGNjT3V0cHV0LCBjY0J5cHJvZHVjdHMsIGNjRGVwZW5kcywgbm9fbWFpbl9kZXBlbmRlbmN5LAogICAgICAgICAgIG5vX2ltcGxpY2l0X2RlcGVuZHMsIGNvbW1hbmRMaW5lcywgY2NDb21tZW50LmNfc3RyKCksCiAgICAgICAgICAgdGhpcy0+RGlyLldvcmsuY19zdHIoKSk7CkBAIC0xMzU2LDEyICsxNDU5LDE1IEBACiAgIGluZm8uU2V0Q29uZmlnKCJJTkNMVURFX0RJUiIsIHRoaXMtPkRpci5JbmNsdWRlKTsKIAogICBpbmZvLlNldFVJbnQoIlFUX1ZFUlNJT05fTUFKT1IiLCB0aGlzLT5RdFZlcnNpb24uTWFqb3IpOworICBpbmZvLlNldFVJbnQoIlFUX1ZFUlNJT05fTUlOT1IiLCB0aGlzLT5RdFZlcnNpb24uTWlub3IpOwogICBpbmZvLlNldCgiUVRfTU9DX0VYRUNVVEFCTEUiLCB0aGlzLT5Nb2MuRXhlY3V0YWJsZSk7CiAgIGluZm8uU2V0KCJRVF9VSUNfRVhFQ1VUQUJMRSIsIHRoaXMtPlVpYy5FeGVjdXRhYmxlKTsKIAogICBpbmZvLlNldCgiQ01BS0VfRVhFQ1VUQUJMRSIsIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKTsKICAgaW5mby5TZXRDb25maWcoIlNFVFRJTkdTX0ZJTEUiLCB0aGlzLT5BdXRvZ2VuVGFyZ2V0LlNldHRpbmdzRmlsZSk7CiAgIGluZm8uU2V0Q29uZmlnKCJQQVJTRV9DQUNIRV9GSUxFIiwgdGhpcy0+QXV0b2dlblRhcmdldC5QYXJzZUNhY2hlRmlsZSk7CisgIGluZm8uU2V0KCJERVBfRklMRSIsIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZSk7CisgIGluZm8uU2V0KCJERVBfRklMRV9SVUxFX05BTUUiLCB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcEZpbGVSdWxlTmFtZSk7CiAgIGluZm8uU2V0QXJyYXkoIkhFQURFUl9FWFRFTlNJT05TIiwKICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIZWFkZXJFeHRlbnNpb25zKCkpOwogICBpbmZvLlNldEFycmF5QXJyYXkoCkBAIC0xNTAxLDEwICsxNjA3LDkgQEAKICAgICAgICAgY21TdHJDYXQoZ2VuTmFtZVVwcGVyLCAiX1NPVVJDRV9HUk9VUCIpLCAiQVVUT0dFTl9TT1VSQ0VfR1JPVVAiCiAgICAgICB9OwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCA6IHByb3BzKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHByb3BOYW1lID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcCk7Ci0gICAgICAgIGlmICgocHJvcE5hbWUgIT0gbnVsbHB0cikgJiYgKCpwcm9wTmFtZSAhPSAnXDAnKSkgewotICAgICAgICAgIGdyb3VwTmFtZSA9IHByb3BOYW1lOworICAgICAgICBjbVByb3AgcHJvcE5hbWUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcCk7CisgICAgICAgIGlmIChwcm9wTmFtZSAmJiAhcHJvcE5hbWUtPmVtcHR5KCkpIHsKKyAgICAgICAgICBncm91cE5hbWUgPSAqcHJvcE5hbWU7CiAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTI4LDggKzE2MzMsOCBAQAogCiB2b2lkIGNtUXRBdXRvR2VuSW5pdGlhbGl6ZXI6OkFkZENsZWFuRmlsZShzdGQ6OnN0cmluZyBjb25zdCYgZmlsZU5hbWUpCiB7Ci0gIHRoaXMtPkdlblRhcmdldC0+VGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eSgiQURESVRJT05BTF9DTEVBTl9GSUxFUyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZS5jX3N0cigpLCBmYWxzZSk7CisgIHRoaXMtPkdlblRhcmdldC0+VGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eSgiQURESVRJT05BTF9DTEVBTl9GSUxFUyIsIGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogfQogCiB2b2lkIGNtUXRBdXRvR2VuSW5pdGlhbGl6ZXI6OkNvbmZpZ0ZpbGVOYW1lcyhDb25maWdTdHJpbmcmIGNvbmZpZ1N0cmluZywKQEAgLTE2MzIsMjEgKzE3MzcsMzkgQEAKICAgaWYgKCFtdWYuTW9jSXQpIHsKICAgICByZXR1cm4gcmVzOwogICB9Ci0gIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCBiYXNlUGF0aCA9Ci0gICAgICBjbVN0ckNhdCh0aGlzLT5QYXRoQ2hlY2tTdW0uZ2V0UGFydChtdWYuRnVsbFBhdGgpLCAiL21vY18iLAotICAgICAgICAgICAgICAgRmlsZU5hbWVXaXRob3V0TGFzdEV4dGVuc2lvbihtdWYuRnVsbFBhdGgpKTsKLSAgICBzdGQ6OnN0cmluZyBzdWZmaXg7Ci0gICAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG51bV90cmllc19tYXggPSAyNTY7Ci0gICAgZm9yIChzdGQ6OnNpemVfdCBpaSA9IDA7IGlpICE9IG51bV90cmllc19tYXg7ICsraWkpIHsKLSAgICAgIHJlcyA9IGNtU3RyQ2F0KGJhc2VQYXRoLCBzdWZmaXgsICIuY3BwIik7Ci0gICAgICBpZiAodGhpcy0+TW9jLkVtaXR0ZWRCdWlsZFBhdGhzLmVtcGxhY2UocmVzKS5zZWNvbmQpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAvLyBDb21wdXRlIG5ldyBzdWZmaXgKLSAgICAgIHN1ZmZpeCA9IGNtU3RyQ2F0KCdfJywgaWkgKyAxKTsKKworICBzdGQ6OnN0cmluZyBiYXNlUGF0aCA9CisgICAgY21TdHJDYXQodGhpcy0+UGF0aENoZWNrU3VtLmdldFBhcnQobXVmLkZ1bGxQYXRoKSwgIi9tb2NfIiwKKyAgICAgICAgICAgICBGaWxlTmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG11Zi5GdWxsUGF0aCkpOworCisgIHJlcyA9IGNtU3RyQ2F0KGJhc2VQYXRoLCAiLmNwcCIpOworICBpZiAodGhpcy0+TW9jLkVtaXR0ZWRCdWlsZFBhdGhzLmVtcGxhY2UocmVzKS5zZWNvbmQpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLy8gRmlsZSBuYW1lIGFscmVhZHkgZW1pdHRlZC4KKyAgLy8gVHJ5IGFwcGVuZGluZyB0aGUgaGVhZGVyIHN1ZmZpeCB0byB0aGUgYmFzZSBwYXRoLgorICBiYXNlUGF0aCA9IGNtU3RyQ2F0KGJhc2VQYXRoLCAnXycsIG11Zi5TRi0+R2V0RXh0ZW5zaW9uKCkpOworICByZXMgPSBjbVN0ckNhdChiYXNlUGF0aCwgIi5jcHAiKTsKKyAgaWYgKHRoaXMtPk1vYy5FbWl0dGVkQnVpbGRQYXRocy5lbXBsYWNlKHJlcykuc2Vjb25kKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8vIEZpbGUgbmFtZSB3aXRoIGhlYWRlciBleHRlbnNpb24gYWxyZWFkeSBlbWl0dGVkLgorICAvLyBUcnkgYWRkaW5nIGEgbnVtYmVyIHRvIHRoZSBiYXNlIHBhdGguCisgIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBudW1iZXJfYmVnaW4gPSAyOworICBjb25zdGV4cHIgc3RkOjpzaXplX3QgbnVtYmVyX2VuZCA9IDI1NjsKKyAgZm9yIChzdGQ6OnNpemVfdCBpaSA9IG51bWJlcl9iZWdpbjsgaWkgIT0gbnVtYmVyX2VuZDsgKytpaSkgeworICAgIHJlcyA9IGNtU3RyQ2F0KGJhc2VQYXRoLCAnXycsIGlpLCAiLmNwcCIpOworICAgIGlmICh0aGlzLT5Nb2MuRW1pdHRlZEJ1aWxkUGF0aHMuZW1wbGFjZShyZXMpLnNlY29uZCkgeworICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAgIH0KKworICAvLyBPdXRwdXQgZmlsZSBuYW1lIGNvbmZsaWN0ICh1bmxpa2VseSwgYnV0IHN0aWxsLi4uKQorICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICBjbVN0ckNhdCgibW9jIG91dHB1dCBmaWxlIG5hbWUgY29uZmxpY3QgZm9yICIsIG11Zi5GdWxsUGF0aCkpOworCiAgIHJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVF0QXV0b0dlbkluaXRpYWxpemVyLmggYi9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5oCmluZGV4IGQ1NTI1OWMuLjQ4ZWMxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b0dlbkluaXRpYWxpemVyLmgKKysrIGIvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuaApAQCAtMTYwLDYgKzE2MCw4IEBACiAgIGJvb2wgTXVsdGlDb25maWcgPSBmYWxzZTsKICAgYm9vbCBDTVAwMDcxQWNjZXB0ID0gZmFsc2U7CiAgIGJvb2wgQ01QMDA3MVdhcm4gPSBmYWxzZTsKKyAgYm9vbCBDTVAwMTAwQWNjZXB0ID0gZmFsc2U7CisgIGJvb2wgQ01QMDEwMFdhcm4gPSBmYWxzZTsKICAgc3RkOjpzdHJpbmcgQ29uZmlnRGVmYXVsdDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbmZpZ3NMaXN0OwogICBzdGQ6OnN0cmluZyBUYXJnZXRzRm9sZGVyOwpAQCAtMTg5LDEwICsxOTEsMTMgQEAKICAgICBib29sIERlcGVuZE9yaWdpbiA9IGZhbHNlOwogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBEZXBlbmRGaWxlczsKICAgICBzdGQ6OnNldDxjbVRhcmdldCo+IERlcGVuZFRhcmdldHM7CisgICAgc3RkOjpzdHJpbmcgRGVwRmlsZTsKKyAgICBzdGQ6OnN0cmluZyBEZXBGaWxlUnVsZU5hbWU7CiAgICAgLy8gU291cmNlcyB0byBwcm9jZXNzCiAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNtU291cmNlRmlsZSosIE1VRmlsZUhhbmRsZT4gSGVhZGVyczsKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y21Tb3VyY2VGaWxlKiwgTVVGaWxlSGFuZGxlPiBTb3VyY2VzOwogICAgIHN0ZDo6dmVjdG9yPE1VRmlsZSo+IEZpbGVzR2VuZXJhdGVkOworICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IENNUDAxMDBIZWFkZXJzV2FybjsKICAgfSBBdXRvZ2VuVGFyZ2V0OwogCiAgIC8qKiBtb2MgdmFyaWFibGVzLiAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVF0QXV0b01vY1VpYy5jeHggYi9Tb3VyY2UvY21RdEF1dG9Nb2NVaWMuY3h4CmluZGV4IGY4Yjg5ODEuLjM2ZGQ2MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b01vY1VpYy5jeHgKKysrIGIvU291cmNlL2NtUXRBdXRvTW9jVWljLmN4eApAQCAtMTYsMTUgKzE2LDE3IEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCiAjaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DcnlwdG9IYXNoLmgiCiAjaW5jbHVkZSAiY21GaWxlVGltZS5oIgorI2luY2x1ZGUgImNtR2NjRGVwZmlsZVJlYWRlci5oIgorI2luY2x1ZGUgImNtR2NjRGVwZmlsZVJlYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21RdEF1dG9HZW4uaCIKICNpbmNsdWRlICJjbVF0QXV0b0dlbmVyYXRvci5oIgpAQCAtMTcwLDcgKzE3Miw3IEBACiAgICAgLy8gLS0gQXR0cmlidXRlcwogICAgIC8vIC0gQ29uZmlnCiAgICAgYm9vbCBNdWx0aUNvbmZpZyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGludCBRdFZlcnNpb25NYWpvciA9IDQ7CisgICAgSW50ZWdlclZlcnNpb24gUXRWZXJzaW9uID0geyA0LCAwIH07CiAgICAgdW5zaWduZWQgaW50IFRocmVhZENvdW50ID0gMDsKICAgICAvLyAtIERpcmVjdG9yaWVzCiAgICAgc3RkOjpzdHJpbmcgQXV0b2dlbkJ1aWxkRGlyOwpAQCAtMTc5LDYgKzE4MSw4IEBACiAgICAgc3RkOjpzdHJpbmcgQ01ha2VFeGVjdXRhYmxlOwogICAgIGNtRmlsZVRpbWUgQ01ha2VFeGVjdXRhYmxlVGltZTsKICAgICBzdGQ6OnN0cmluZyBQYXJzZUNhY2hlRmlsZTsKKyAgICBzdGQ6OnN0cmluZyBEZXBGaWxlOworICAgIHN0ZDo6c3RyaW5nIERlcEZpbGVSdWxlTmFtZTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gSGVhZGVyRXh0ZW5zaW9uczsKICAgfTsKIApAQCAtMjE2LDYgKzIyMCw3IEBACiAgICAgYm9vbCBTZXR0aW5nc0NoYW5nZWQgPSBmYWxzZTsKICAgICBib29sIFJlbGF4ZWRNb2RlID0gZmFsc2U7CiAgICAgYm9vbCBQYXRoUHJlZml4ID0gZmFsc2U7CisgICAgYm9vbCBDYW5PdXRwdXREZXBlbmRlbmNpZXMgPSBmYWxzZTsKICAgICBjbUZpbGVUaW1lIEV4ZWN1dGFibGVUaW1lOwogICAgIHN0ZDo6c3RyaW5nIEV4ZWN1dGFibGU7CiAgICAgc3RkOjpzdHJpbmcgQ29tcEZpbGVBYnM7CkBAIC00ODUsOCArNDkwLDE3IEBACiAgIGNsYXNzIEpvYkNvbXBpbGVNb2NUIDogcHVibGljIEpvYkNvbXBpbGVUCiAgIHsKICAgcHVibGljOgotICAgIHVzaW5nIEpvYkNvbXBpbGVUOjpKb2JDb21waWxlVDsKKyAgICBKb2JDb21waWxlTW9jVChNYXBwaW5nSGFuZGxlVCB1aWNNYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnN0cmluZz4gcmVhc29uLAorICAgICAgICAgICAgICAgICAgIFBhcnNlQ2FjaGVUOjpGaWxlSGFuZGxlVCBjYWNoZUVudHJ5KQorICAgICAgOiBKb2JDb21waWxlVChzdGQ6Om1vdmUodWljTWFwcGluZyksIHN0ZDo6bW92ZShyZWFzb24pKQorICAgICAgLCBDYWNoZUVudHJ5KHN0ZDo6bW92ZShjYWNoZUVudHJ5KSkKKyAgICB7CisgICAgfQogICAgIHZvaWQgUHJvY2VzcygpIG92ZXJyaWRlOworCisgIHByb3RlY3RlZDoKKyAgICBQYXJzZUNhY2hlVDo6RmlsZUhhbmRsZVQgQ2FjaGVFbnRyeTsKICAgfTsKIAogICAvKiogdWljIGNvbXBpbGVzIGEgZmlsZS4gICovCkBAIC01MDQsNiArNTE4LDEyIEBACiAgICAgdm9pZCBQcm9jZXNzKCkgb3ZlcnJpZGU7CiAgIH07CiAKKyAgY2xhc3MgSm9iRGVwRmlsZXNNZXJnZVQgOiBwdWJsaWMgSm9iRmVuY2VUCisgIHsKKyAgcHJpdmF0ZToKKyAgICB2b2lkIFByb2Nlc3MoKSBvdmVycmlkZTsKKyAgfTsKKwogICAvKiogQGJyaWVmIFRoZSBsYXN0IGpvYi4gICovCiAgIGNsYXNzIEpvYkZpbmlzaFQgOiBwdWJsaWMgSm9iRmVuY2VUCiAgIHsKQEAgLTU0Niw2ICs1NjYsOSBAQAogICB2b2lkIEFib3J0KGJvb2wgZXJyb3IpOwogICAvLyAtLSBHZW5lcmF0aW9uCiAgIGJvb2wgQ3JlYXRlRGlyZWN0b3JpZXMoKTsKKyAgLy8gLS0gU3VwcG9ydCBmb3IgZGVwZmlsZXMKKyAgc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRlbmNpZXNGcm9tRGVwRmlsZSgKKyAgICBjb25zdCBjaGFyKiBmaWxlUGF0aCk7CiAKIHByaXZhdGU6CiAgIC8vIC0tIFNldHRpbmdzCkBAIC02NzcsMjcgKzcwMCwyNyBAQAogICBpZiAoIW9mcykgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBvZnMgPDwgIiMgR2VuZXJhdGVkIGJ5IENNYWtlLiBDaGFuZ2VzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uIiA8PCBzdGQ6OmVuZGw7CisgIG9mcyA8PCAiIyBHZW5lcmF0ZWQgYnkgQ01ha2UuIENoYW5nZXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiI7CiAgIGZvciAoYXV0byBjb25zdCYgcGFpciA6IE1hcF8pIHsKLSAgICBvZnMgPDwgcGFpci5maXJzdCA8PCBzdGQ6OmVuZGw7CisgICAgb2ZzIDw8IHBhaXIuZmlyc3QgPDwgJ1xuJzsKICAgICBGaWxlVCBjb25zdCYgZmlsZSA9ICpwYWlyLnNlY29uZDsKICAgICBpZiAoIWZpbGUuTW9jLk1hY3JvLmVtcHR5KCkpIHsKLSAgICAgIG9mcyA8PCAiIG1tYzoiIDw8IGZpbGUuTW9jLk1hY3JvIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIG9mcyA8PCAiIG1tYzoiIDw8IGZpbGUuTW9jLk1hY3JvIDw8ICdcbic7CiAgICAgfQogICAgIGZvciAoSW5jbHVkZUtleVQgY29uc3QmIGl0ZW0gOiBmaWxlLk1vYy5JbmNsdWRlLlVuZGVyc2NvcmUpIHsKLSAgICAgIG9mcyA8PCAiIG1pdToiIDw8IGl0ZW0uS2V5IDw8IHN0ZDo6ZW5kbDsKKyAgICAgIG9mcyA8PCAiIG1pdToiIDw8IGl0ZW0uS2V5IDw8ICdcbic7CiAgICAgfQogICAgIGZvciAoSW5jbHVkZUtleVQgY29uc3QmIGl0ZW0gOiBmaWxlLk1vYy5JbmNsdWRlLkRvdCkgewotICAgICAgb2ZzIDw8ICIgbWlkOiIgPDwgaXRlbS5LZXkgPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgbWlkOiIgPDwgaXRlbS5LZXkgPDwgJ1xuJzsKICAgICB9CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXRlbSA6IGZpbGUuTW9jLkRlcGVuZHMpIHsKLSAgICAgIG9mcyA8PCAiIG1kcDoiIDw8IGl0ZW0gPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgbWRwOiIgPDwgaXRlbSA8PCAnXG4nOwogICAgIH0KICAgICBmb3IgKEluY2x1ZGVLZXlUIGNvbnN0JiBpdGVtIDogZmlsZS5VaWMuSW5jbHVkZSkgewotICAgICAgb2ZzIDw8ICIgdWljOiIgPDwgaXRlbS5LZXkgPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgdWljOiIgPDwgaXRlbS5LZXkgPDwgJ1xuJzsKICAgICB9CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXRlbSA6IGZpbGUuVWljLkRlcGVuZHMpIHsKLSAgICAgIG9mcyA8PCAiIHVkcDoiIDw8IGl0ZW0gPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgdWRwOiIgPDwgaXRlbSA8PCAnXG4nOwogICAgIH0KICAgfQogICByZXR1cm4gb2ZzLkNsb3NlKCk7CkBAIC04MDgsOSArODMxLDkgQEAKICAgICAgIC8vIENvbXBvc2UgY29tbWFuZAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtZCA9IE1vY0NvbnN0KCkuUHJlZGVmc0NtZDsKICAgICAgIC8vIEFkZCBkZWZpbml0aW9ucwotICAgICAgY21BcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNEZWZpbml0aW9ucyk7CisgICAgICBjbTo6YXBwZW5kKGNtZCwgTW9jQ29uc3QoKS5PcHRpb25zRGVmaW5pdGlvbnMpOwogICAgICAgLy8gQWRkIGluY2x1ZGVzCi0gICAgICBjbUFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0luY2x1ZGVzKTsKKyAgICAgIGNtOjphcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNJbmNsdWRlcyk7CiAgICAgICAvLyBFeGVjdXRlIGNvbW1hbmQKICAgICAgIGlmICghUnVuUHJvY2VzcyhHZW5UOjpNT0MsIHJlc3VsdCwgY21kLCByZWFzb24uZ2V0KCkpKSB7CiAgICAgICAgIExvZ0NvbW1hbmRFcnJvcihHZW5UOjpNT0MsCkBAIC05NTEsNyArOTc0LDcgQEAKIAogdm9pZCBjbVF0QXV0b01vY1VpY1Q6OkpvYlBhcnNlVDo6TW9jRGVwZW5kZWNpZXMoKQogewotICBpZiAoTW9jQ29uc3QoKS5EZXBlbmRGaWx0ZXJzLmVtcHR5KCkpIHsKKyAgaWYgKE1vY0NvbnN0KCkuRGVwZW5kRmlsdGVycy5lbXB0eSgpIHx8IE1vY0NvbnN0KCkuQ2FuT3V0cHV0RGVwZW5kZW5jaWVzKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTE2NzQsOCArMTY5NywxMyBAQAogICBpZiAoUHJvYmUoKm1hcHBpbmcsIHJlYXNvbi5nZXQoKSkpIHsKICAgICAvLyBSZWdpc3RlciB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgY3JlYXRpb24KICAgICBNb2NFdmFsKCkuT3V0cHV0RGlycy5lbXBsYWNlKGNtUXRBdXRvR2VuOjpQYXJlbnREaXIobWFwcGluZy0+T3V0cHV0RmlsZSkpOworICAgIC8vIEZldGNoIHRoZSBjYWNoZSBlbnRyeSBmb3IgdGhlIHNvdXJjZSBmaWxlCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZUZpbGUgPSBtYXBwaW5nLT5Tb3VyY2VGaWxlLT5GaWxlTmFtZTsKKyAgICBQYXJzZUNhY2hlVDo6R2V0T3JJbnNlcnRUIGNhY2hlRW50cnkgPQorICAgICAgQmFzZUV2YWwoKS5QYXJzZUNhY2hlLkdldE9ySW5zZXJ0KHNvdXJjZUZpbGUpOwogICAgIC8vIEFkZCBtb2Mgam9iCi0gICAgR2VuKCktPldvcmtlclBvb2woKS5FbXBsYWNlSm9iPEpvYkNvbXBpbGVNb2NUPihtYXBwaW5nLCBzdGQ6Om1vdmUocmVhc29uKSk7CisgICAgR2VuKCktPldvcmtlclBvb2woKS5FbXBsYWNlSm9iPEpvYkNvbXBpbGVNb2NUPigKKyAgICAgIG1hcHBpbmcsIHN0ZDo6bW92ZShyZWFzb24pLCBzdGQ6Om1vdmUoY2FjaGVFbnRyeS5maXJzdCkpOwogICAgIC8vIENoZWNrIGlmIGEgbW9jIGpvYiBmb3IgYSBtb2NzX2NvbXBpbGF0aW9uLmNwcCBlbnRyeSB3YXMgZ2VuZXJhdGVkCiAgICAgaWYgKGNvbXBGaWxlKSB7CiAgICAgICBNb2NFdmFsKCkuQ29tcFVwZGF0ZWQgPSB0cnVlOwpAQCAtMTc3OSw2ICsxODA3LDE0IEBACiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBzb3VyY2VEaXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBpbmNsdWRlU3RyaW5nKSBjb25zdAogewogICB1c2luZyBSZXNQYWlyID0gc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBjbUZpbGVUaW1lPjsKKyAgLy8gbW9jJ3MgZGVwZW5kZW5jeSBmaWxlIGNvbnRhaW5zIGFic29sdXRlIHBhdGhzCisgIGlmIChNb2NDb25zdCgpLkNhbk91dHB1dERlcGVuZGVuY2llcykgeworICAgIFJlc1BhaXIgcmVzeyBpbmNsdWRlU3RyaW5nLCB7fSB9OworICAgIGlmIChyZXMuc2Vjb25kLkxvYWQocmVzLmZpcnN0KSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcmV0dXJuIHt9OworICB9CiAgIC8vIFNlYXJjaCBpbiB2aWNpbml0eSBvZiB0aGUgc291cmNlCiAgIHsKICAgICBSZXNQYWlyIHJlc3sgc291cmNlRGlyICsgaW5jbHVkZVN0cmluZywge30gfTsKQEAgLTE4OTgsNiArMTkzNCwxMSBAQAogICAgIEdlbigpLT5Xb3JrZXJQb29sKCkuRW1wbGFjZUpvYjxKb2JNb2NzQ29tcGlsYXRpb25UPigpOwogICB9CiAKKyAgaWYgKCFCYXNlQ29uc3QoKS5EZXBGaWxlLmVtcHR5KCkpIHsKKyAgICAvLyBBZGQgam9iIHRvIG1lcmdlIGRlcCBmaWxlcworICAgIEdlbigpLT5Xb3JrZXJQb29sKCkuRW1wbGFjZUpvYjxKb2JEZXBGaWxlc01lcmdlVD4oKTsKKyAgfQorCiAgIC8vIEFkZCBmaW5pc2ggam9iCiAgIEdlbigpLT5Xb3JrZXJQb29sKCkuRW1wbGFjZUpvYjxKb2JGaW5pc2hUPigpOwogfQpAQCAtMTkxNiw5ICsxOTU3LDkgQEAKICAgICAgICAgICAgICAgICBNb2NDb25zdCgpLk9wdGlvbnNFeHRyYS5zaXplKCkgKyAxNik7CiAgICAgY21kLnB1c2hfYmFjayhNb2NDb25zdCgpLkV4ZWN1dGFibGUpOwogICAgIC8vIEFkZCBkZWZpbml0aW9ucwotICAgIGNtQXBwZW5kKGNtZCwgTW9jQ29uc3QoKS5PcHRpb25zRGVmaW5pdGlvbnMpOworICAgIGNtOjphcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNEZWZpbml0aW9ucyk7CiAgICAgLy8gQWRkIGluY2x1ZGVzCi0gICAgY21BcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNJbmNsdWRlcyk7CisgICAgY206OmFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0luY2x1ZGVzKTsKICAgICAvLyBBZGQgcHJlZGVmcyBpbmNsdWRlCiAgICAgaWYgKCFNb2NDb25zdCgpLlByZWRlZnNGaWxlQWJzLmVtcHR5KCkpIHsKICAgICAgIGNtZC5lbXBsYWNlX2JhY2soIi0taW5jbHVkZSIpOwpAQCAtMTk0Niw3ICsxOTg3LDEwIEBACiAgICAgICB9CiAgICAgfQogICAgIC8vIEFkZCBleHRyYSBvcHRpb25zCi0gICAgY21BcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNFeHRyYSk7CisgICAgY206OmFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0V4dHJhKTsKKyAgICBpZiAoTW9jQ29uc3QoKS5DYW5PdXRwdXREZXBlbmRlbmNpZXMpIHsKKyAgICAgIGNtZC5lbXBsYWNlX2JhY2soIi0tb3V0cHV0LWRlcC1maWxlIik7CisgICAgfQogICAgIC8vIEFkZCBvdXRwdXQgZmlsZQogICAgIGNtZC5lbXBsYWNlX2JhY2soIi1vIik7CiAgICAgY21kLnB1c2hfYmFjayhvdXRwdXRGaWxlKTsKQEAgLTE5NTYsMTIgKzIwMDAsNyBAQAogCiAgIC8vIEV4ZWN1dGUgbW9jIGNvbW1hbmQKICAgY21Xb3JrZXJQb29sOjpQcm9jZXNzUmVzdWx0VCByZXN1bHQ7Ci0gIGlmIChSdW5Qcm9jZXNzKEdlblQ6Ok1PQywgcmVzdWx0LCBjbWQsIFJlYXNvbi5nZXQoKSkpIHsKLSAgICAvLyBNb2MgY29tbWFuZCBzdWNjZXNzLiBQcmludCBtb2Mgb3V0cHV0LgotICAgIGlmICghcmVzdWx0LlN0ZE91dC5lbXB0eSgpKSB7Ci0gICAgICBMb2coKS5JbmZvKEdlblQ6Ok1PQywgcmVzdWx0LlN0ZE91dCk7Ci0gICAgfQotICB9IGVsc2UgeworICBpZiAoIVJ1blByb2Nlc3MoR2VuVDo6TU9DLCByZXN1bHQsIGNtZCwgUmVhc29uLmdldCgpKSkgewogICAgIC8vIE1vYyBjb21tYW5kIGZhaWxlZAogICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVyczsKICAgICBpZiAoIU1hcHBpbmctPkluY2x1ZGVyRmlsZXMuZW1wdHkoKSkgewpAQCAtMTk3Niw2ICsyMDE1LDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQYXRoKG91dHB1dEZpbGUpLCAnXG4nLCBpbmNsdWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5FcnJvck1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICBjbWQsIHJlc3VsdC5TdGRPdXQpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIE1vYyBjb21tYW5kIHN1Y2Nlc3MuIFByaW50IG1vYyBvdXRwdXQuCisgIGlmICghcmVzdWx0LlN0ZE91dC5lbXB0eSgpKSB7CisgICAgTG9nKCkuSW5mbyhHZW5UOjpNT0MsIHJlc3VsdC5TdGRPdXQpOworICB9CisKKyAgLy8gRXh0cmFjdCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgZGVwIGZpbGUgbW9jIGdlbmVyYXRlZCBmb3IgdXMKKyAgaWYgKE1vY0NvbnN0KCkuQ2FuT3V0cHV0RGVwZW5kZW5jaWVzKSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZGVwZmlsZSA9IG91dHB1dEZpbGUgKyAiLmQiOworICAgIGlmIChMb2coKS5WZXJib3NlKCkpIHsKKyAgICAgIExvZygpLkluZm8oR2VuVDo6TU9DLAorICAgICAgICAgICAgICAgICAiUmVhZGluZyBkZXBlbmRlbmNpZXMgZnJvbSAiICsgTWVzc2FnZVBhdGgoZGVwZmlsZSkpOworICAgIH0KKyAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGVwZmlsZSkpIHsKKyAgICAgIExvZygpLldhcm5pbmcoR2VuVDo6TU9DLAorICAgICAgICAgICAgICAgICAgICAiRGVwZW5kZW5jeSBmaWxlICIgKyBNZXNzYWdlUGF0aChkZXBmaWxlKSArCisgICAgICAgICAgICAgICAgICAgICAgIiBkb2VzIG5vdCBleGlzdC4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ2FjaGVFbnRyeS0+TW9jLkRlcGVuZHMgPSBkZXBlbmRlbmNpZXNGcm9tRGVwRmlsZShkZXBmaWxlLmNfc3RyKCkpOwogICB9CiB9CiAKQEAgLTE5OTIsOSArMjA1Myw5IEBACiAgICAgYXV0byBvcHRpb25JdCA9IFVpY0NvbnN0KCkuVWlGaWxlcy5maW5kKHNvdXJjZUZpbGUpOwogICAgIGlmIChvcHRpb25JdCAhPSBVaWNDb25zdCgpLlVpRmlsZXMuZW5kKCkpIHsKICAgICAgIFVpY01lcmdlT3B0aW9ucyhhbGxPcHRzLCBvcHRpb25JdC0+c2Vjb25kLk9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgKEJhc2VDb25zdCgpLlF0VmVyc2lvbk1ham9yID09IDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAoQmFzZUNvbnN0KCkuUXRWZXJzaW9uLk1ham9yID09IDUpKTsKICAgICB9Ci0gICAgY21BcHBlbmQoY21kLCBhbGxPcHRzKTsKKyAgICBjbTo6YXBwZW5kKGNtZCwgYWxsT3B0cyk7CiAgIH0KICAgY21kLmVtcGxhY2VfYmFjaygiLW8iKTsKICAgY21kLmVtcGxhY2VfYmFjayhvdXRwdXRGaWxlKTsKQEAgLTIwNjcsNiArMjEyOCwxMDUgQEAKICAgfQogfQogCisvKgorICogRXNjYXBlcyBwYXRocyBmb3IgTmluamEgZGVwZmlsZXMuCisgKiBUaGlzIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gb2Ygd2hhdCBtb2MgZG9lcyB3aGVuIHdyaXRpbmcgZGVwZmlsZXMuCisgKi8KK3N0ZDo6c3RyaW5nIGVzY2FwZURlcGVuZGVuY3lQYXRoKGNtOjpzdHJpbmdfdmlldyBwYXRoKQoreworICBzdGQ6OnN0cmluZyBlc2NhcGVkUGF0aDsKKyAgZXNjYXBlZFBhdGgucmVzZXJ2ZShwYXRoLnNpemUoKSk7CisgIGNvbnN0IHNpemVfdCBzID0gcGF0aC5zaXplKCk7CisgIGludCBiYWNrc2xhc2hDb3VudCA9IDA7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgczsgKytpKSB7CisgICAgaWYgKHBhdGhbaV0gPT0gJ1xcJykgeworICAgICAgKytiYWNrc2xhc2hDb3VudDsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHBhdGhbaV0gPT0gJyQnKSB7CisgICAgICAgIGVzY2FwZWRQYXRoLnB1c2hfYmFjaygnJCcpOworICAgICAgfSBlbHNlIGlmIChwYXRoW2ldID09ICcjJykgeworICAgICAgICBlc2NhcGVkUGF0aC5wdXNoX2JhY2soJ1xcJyk7CisgICAgICB9IGVsc2UgaWYgKHBhdGhbaV0gPT0gJyAnKSB7CisgICAgICAgIC8vIERvdWJsZSB0aGUgYW1vdW50IG9mIHdyaXR0ZW4gYmFja3NsYXNoZXMsCisgICAgICAgIC8vIGFuZCBhZGQgb25lIG1vcmUgdG8gZXNjYXBlIHRoZSBzcGFjZS4KKyAgICAgICAgd2hpbGUgKGJhY2tzbGFzaENvdW50LS0gPj0gMCkgeworICAgICAgICAgIGVzY2FwZWRQYXRoLnB1c2hfYmFjaygnXFwnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYmFja3NsYXNoQ291bnQgPSAwOworICAgIH0KKyAgICBlc2NhcGVkUGF0aC5wdXNoX2JhY2socGF0aFtpXSk7CisgIH0KKyAgcmV0dXJuIGVzY2FwZWRQYXRoOworfQorCit2b2lkIGNtUXRBdXRvTW9jVWljVDo6Sm9iRGVwRmlsZXNNZXJnZVQ6OlByb2Nlc3MoKQoreworICBpZiAoTG9nKCkuVmVyYm9zZSgpKSB7CisgICAgTG9nKCkuSW5mbyhHZW5UOjpNT0MsICJNZXJnaW5nIE1PQyBkZXBlbmRlbmNpZXMiKTsKKyAgfQorICBhdXRvIHByb2Nlc3NEZXBGaWxlID0KKyAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgbW9jT3V0cHV0RmlsZSkgLT4gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHsKKyAgICBzdGQ6OnN0cmluZyBmID0gbW9jT3V0cHV0RmlsZSArICIuZCI7CisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGYpKSB7CisgICAgICByZXR1cm4ge307CisgICAgfQorICAgIHJldHVybiBkZXBlbmRlbmNpZXNGcm9tRGVwRmlsZShmLmNfc3RyKCkpOworICB9OworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRlbmNpZXM7CisgIFBhcnNlQ2FjaGVUJiBwYXJzZUNhY2hlID0gQmFzZUV2YWwoKS5QYXJzZUNhY2hlOworICBhdXRvIHByb2Nlc3NNYXBwaW5nRW50cnkgPSBbJl0oY29uc3QgTWFwcGluZ01hcFQ6OnZhbHVlX3R5cGUmIG0pIHsKKyAgICBhdXRvIGNhY2hlRW50cnkgPSBwYXJzZUNhY2hlLkdldE9ySW5zZXJ0KG0uZmlyc3QpOworICAgIGlmIChjYWNoZUVudHJ5LmZpcnN0LT5Nb2MuRGVwZW5kcy5lbXB0eSgpKSB7CisgICAgICBjYWNoZUVudHJ5LmZpcnN0LT5Nb2MuRGVwZW5kcyA9IHByb2Nlc3NEZXBGaWxlKG0uc2Vjb25kLT5PdXRwdXRGaWxlKTsKKyAgICB9CisgICAgZGVwZW5kZW5jaWVzLmluc2VydChkZXBlbmRlbmNpZXMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5LmZpcnN0LT5Nb2MuRGVwZW5kcy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVFbnRyeS5maXJzdC0+TW9jLkRlcGVuZHMuZW5kKCkpOworICB9OworCisgIHN0ZDo6Zm9yX2VhY2goTW9jRXZhbCgpLkhlYWRlck1hcHBpbmdzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgTW9jRXZhbCgpLkhlYWRlck1hcHBpbmdzLmVuZCgpLCBwcm9jZXNzTWFwcGluZ0VudHJ5KTsKKyAgc3RkOjpmb3JfZWFjaChNb2NFdmFsKCkuU291cmNlTWFwcGluZ3MuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICBNb2NFdmFsKCkuU291cmNlTWFwcGluZ3MuZW5kKCksIHByb2Nlc3NNYXBwaW5nRW50cnkpOworCisgIC8vIFJlbW92ZSBkdXBsaWNhdGVzIHRvIG1ha2UgdGhlIGRlcGZpbGUgc21hbGxlcgorICBzdGQ6OnNvcnQoZGVwZW5kZW5jaWVzLmJlZ2luKCksIGRlcGVuZGVuY2llcy5lbmQoKSk7CisgIGRlcGVuZGVuY2llcy5lcmFzZShzdGQ6OnVuaXF1ZShkZXBlbmRlbmNpZXMuYmVnaW4oKSwgZGVwZW5kZW5jaWVzLmVuZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5lbmQoKSk7CisKKyAgLy8gQWRkIGZvcm0gZmlsZXMKKyAgZm9yIChjb25zdCBhdXRvJiB1aWYgOiBVaWNFdmFsKCkuVWlGaWxlcykgeworICAgIGRlcGVuZGVuY2llcy5wdXNoX2JhY2sodWlmLmZpcnN0KTsKKyAgfQorCisgIC8vIFdyaXRlIHRoZSBmaWxlCisgIGNtc3lzOjpvZnN0cmVhbSBvZnM7CisgIG9mcy5vcGVuKEJhc2VDb25zdCgpLkRlcEZpbGUuY19zdHIoKSwKKyAgICAgICAgICAgKHN0ZDo6aW9zOjpvdXQgfCBzdGQ6Omlvczo6YmluYXJ5IHwgc3RkOjppb3M6OnRydW5jKSk7CisgIGlmICghb2ZzKSB7CisgICAgTG9nRXJyb3IoR2VuVDo6R0VOLAorICAgICAgICAgICAgIGNtU3RyQ2F0KCJDYW5ub3Qgb3BlbiAiLCBNZXNzYWdlUGF0aChCYXNlQ29uc3QoKS5EZXBGaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAiIGZvciB3cml0aW5nLiIpKTsKKyAgICByZXR1cm47CisgIH0KKyAgb2ZzIDw8IEJhc2VDb25zdCgpLkRlcEZpbGVSdWxlTmFtZSA8PCAiOiBcXFxuIjsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSA6IGRlcGVuZGVuY2llcykgeworICAgIG9mcyA8PCAnXHQnIDw8IGVzY2FwZURlcGVuZGVuY3lQYXRoKGZpbGUpIDw8ICIgXFxcbiI7CisgICAgaWYgKCFvZnMuZ29vZCgpKSB7CisgICAgICBMb2dFcnJvcihHZW5UOjpHRU4sCisgICAgICAgICAgICAgICBjbVN0ckNhdCgiV3JpdGluZyBkZXBmaWxlIiwgTWVzc2FnZVBhdGgoQmFzZUNvbnN0KCkuRGVwRmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZC4iKSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgLy8gQWRkIHRoZSBDTWFrZSBleGVjdXRhYmxlIHRvIHJlLW5ldyBjYWNoZSBkYXRhIGlmIG5lY2Vzc2FyeS4KKyAgLy8gQWxzbywgdGhpcyBpcyB0aGUgbGFzdCBlbnRyeSwgc28gZG9uJ3QgYWRkIGEgYmFja3NsYXNoLgorICBvZnMgPDwgJ1x0JyA8PCBlc2NhcGVEZXBlbmRlbmN5UGF0aChCYXNlQ29uc3QoKS5DTWFrZUV4ZWN1dGFibGUpIDw8ICdcbic7Cit9CisKIHZvaWQgY21RdEF1dG9Nb2NVaWNUOjpKb2JGaW5pc2hUOjpQcm9jZXNzKCkKIHsKICAgR2VuKCktPkFib3J0U3VjY2VzcygpOwpAQCAtMjA4Miw3ICsyMjQyLDggQEAKIHsKICAgLy8gLS0gUmVxdWlyZWQgc2V0dGluZ3MKICAgaWYgKCFpbmZvLkdldEJvb2woIk1VTFRJX0NPTkZJRyIsIEJhc2VDb25zdF8uTXVsdGlDb25maWcsIHRydWUpIHx8Ci0gICAgICAhaW5mby5HZXRVSW50KCJRVF9WRVJTSU9OX01BSk9SIiwgQmFzZUNvbnN0Xy5RdFZlcnNpb25NYWpvciwgdHJ1ZSkgfHwKKyAgICAgICFpbmZvLkdldFVJbnQoIlFUX1ZFUlNJT05fTUFKT1IiLCBCYXNlQ29uc3RfLlF0VmVyc2lvbi5NYWpvciwgdHJ1ZSkgfHwKKyAgICAgICFpbmZvLkdldFVJbnQoIlFUX1ZFUlNJT05fTUlOT1IiLCBCYXNlQ29uc3RfLlF0VmVyc2lvbi5NaW5vciwgdHJ1ZSkgfHwKICAgICAgICFpbmZvLkdldFVJbnQoIlBBUkFMTEVMIiwgQmFzZUNvbnN0Xy5UaHJlYWRDb3VudCwgZmFsc2UpIHx8CiAgICAgICAhaW5mby5HZXRTdHJpbmcoIkJVSUxEX0RJUiIsIEJhc2VDb25zdF8uQXV0b2dlbkJ1aWxkRGlyLCB0cnVlKSB8fAogICAgICAgIWluZm8uR2V0U3RyaW5nQ29uZmlnKCJJTkNMVURFX0RJUiIsIEJhc2VDb25zdF8uQXV0b2dlbkluY2x1ZGVEaXIsCkBAIC0yMDkwLDYgKzIyNTEsOSBAQAogICAgICAgIWluZm8uR2V0U3RyaW5nKCJDTUFLRV9FWEVDVVRBQkxFIiwgQmFzZUNvbnN0Xy5DTWFrZUV4ZWN1dGFibGUsIHRydWUpIHx8CiAgICAgICAhaW5mby5HZXRTdHJpbmdDb25maWcoIlBBUlNFX0NBQ0hFX0ZJTEUiLCBCYXNlQ29uc3RfLlBhcnNlQ2FjaGVGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpIHx8CisgICAgICAhaW5mby5HZXRTdHJpbmcoIkRFUF9GSUxFIiwgQmFzZUNvbnN0Xy5EZXBGaWxlLCBmYWxzZSkgfHwKKyAgICAgICFpbmZvLkdldFN0cmluZygiREVQX0ZJTEVfUlVMRV9OQU1FIiwgQmFzZUNvbnN0Xy5EZXBGaWxlUnVsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpIHx8CiAgICAgICAhaW5mby5HZXRTdHJpbmdDb25maWcoIlNFVFRJTkdTX0ZJTEUiLCBTZXR0aW5nc0ZpbGVfLCB0cnVlKSB8fAogICAgICAgIWluZm8uR2V0QXJyYXkoIkhFQURFUl9FWFRFTlNJT05TIiwgQmFzZUNvbnN0Xy5IZWFkZXJFeHRlbnNpb25zLCB0cnVlKSB8fAogICAgICAgIWluZm8uR2V0U3RyaW5nKCJRVF9NT0NfRVhFQ1VUQUJMRSIsIE1vY0NvbnN0Xy5FeGVjdXRhYmxlLCBmYWxzZSkgfHwKQEAgLTIxNDMsOCArMjMwNywxMCBAQAogICAgICAgTW9jQ29uc3RfLk1hY3JvRmlsdGVycy5lbXBsYWNlX2JhY2soCiAgICAgICAgIGl0ZW0sICgiW1xuXVsgXHRdKns/WyBcdF0qIiArIGl0ZW0pLmFwcGVuZCgiW15hLXpBLVowLTlfXSIpKTsKICAgICB9Ci0gICAgLy8gRGVwZW5kZW5jeSBmaWx0ZXJzCi0gICAgeworICAgIC8vIENhbiBtb2Mgb3V0cHV0IGRlcGVuZGVuY2llcyBvciBkbyB3ZSBuZWVkIHRvIHNldHVwIGRlcGVuZGVuY3kgZmlsdGVycz8KKyAgICBpZiAoQmFzZUNvbnN0Xy5RdFZlcnNpb24gPj0gSW50ZWdlclZlcnNpb24oNSwgMTUpKSB7CisgICAgICBNb2NDb25zdF8uQ2FuT3V0cHV0RGVwZW5kZW5jaWVzID0gdHJ1ZTsKKyAgICB9IGVsc2UgewogICAgICAgSnNvbjo6VmFsdWUgY29uc3QmIHZhbCA9IGluZm8uR2V0VmFsdWUoIk1PQ19ERVBFTkRfRklMVEVSUyIpOwogICAgICAgaWYgKCF2YWwuaXNBcnJheSgpKSB7CiAgICAgICAgIHJldHVybiBpbmZvLkxvZ0Vycm9yKCJNT0NfREVQRU5EX0ZJTFRFUlMgSlNPTiB2YWx1ZSBpcyBub3QgYW4gYXJyYXkuIik7CkBAIC0yNjYwLDYgKzI4MjYsMTkgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbVF0QXV0b01vY1VpY1Q6OmRlcGVuZGVuY2llc0Zyb21EZXBGaWxlKAorICBjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyAgY21HY2NEZXBmaWxlQ29udGVudCBjb250ZW50ID0gY21SZWFkR2NjRGVwZmlsZShmaWxlUGF0aCk7CisgIGlmIChjb250ZW50LmVtcHR5KCkpIHsKKyAgICByZXR1cm4ge307CisgIH0KKworICAvLyBNb2Mgb3V0cHV0cyBhIGRlcGZpbGUgd2l0aCBleGFjdGx5IG9uZSBydWxlLgorICAvLyBEaXNjYXJkIHRoZSBydWxlIGFuZCByZXR1cm4gdGhlIGRlcGVuZGVuY2llcy4KKyAgcmV0dXJuIGNvbnRlbnQuZnJvbnQoKS5wYXRoczsKK30KKwogdm9pZCBjbVF0QXV0b01vY1VpY1Q6OkFib3J0KGJvb2wgZXJyb3IpCiB7CiAgIGlmIChlcnJvcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvUmNjLmN4eCBiL1NvdXJjZS9jbVF0QXV0b1JjYy5jeHgKaW5kZXggM2FmODFhZC4uMDhlYjRiNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvUmNjLmN4eAorKysgYi9Tb3VyY2UvY21RdEF1dG9SY2MuY3h4CkBAIC02LDcgKzYsOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUNyeXB0b0hhc2guaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21GaWxlTG9jay5oIgpAQCAtNDA1LDcgKzQwNiw3IEBACiAgIC8vIENvbXBvc2UgcmNjIGNvbW1hbmQKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtZDsKICAgY21kLnB1c2hfYmFjayhSY2NFeGVjdXRhYmxlXyk7Ci0gIGNtQXBwZW5kKGNtZCwgT3B0aW9uc18pOworICBjbTo6YXBwZW5kKGNtZCwgT3B0aW9uc18pOwogICBjbWQuZW1wbGFjZV9iYWNrKCItbyIpOwogICBjbWQucHVzaF9iYWNrKFJjY0ZpbGVPdXRwdXRfKTsKICAgY21kLnB1c2hfYmFjayhRcmNGaWxlXyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21SU1QuY3h4IGIvU291cmNlL2NtUlNULmN4eAppbmRleCA3ZjRhYmY5Li5jMzlkMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21SU1QuY3h4CisrKyBiL1NvdXJjZS9jbVJTVC5jeHgKQEAgLTg5LDcgKzg5LDggQEAKICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUobGluZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAobGluZVswXSAhPSAnIycpIHsKLSAgICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZShsaW5lLnN1YnN0cigwLCBwb3MpKTsKKyAgICAgICAgICBsaW5lLnJlc2l6ZShwb3MpOworICAgICAgICAgIHRoaXMtPlByb2Nlc3NMaW5lKGxpbmUpOwogICAgICAgICB9CiAgICAgICAgIHJzdC5jbGVhcigpOwogICAgICAgICB0aGlzLT5SZXNldCgpOwpAQCAtMTAyLDggKzEwMyw5IEBACiAgICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUoIiIpOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lLnN1YnN0cigwLCAyKSA9PSAiIyAiKSB7Ci0gICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUobGluZS5zdWJzdHIoMikpOworICAgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpbmUsICIjICIpKSB7CisgICAgICAgICAgbGluZS5lcmFzZSgwLCAyKTsKKyAgICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZShsaW5lKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICByc3QuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmN4eCBiL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmN4eAppbmRleCAwYTFkMTA5Li4yNTQxMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5jeHgKKysrIGIvU291cmNlL2NtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuY3h4CkBAIC04NSw2ICs4NSwxMSBAQAogICAgICAgcmV0dXJuIHJlcGxhY2VWYWx1ZXMuT2JqZWN0c1F1b3RlZDsKICAgICB9CiAgIH0KKyAgaWYgKHJlcGxhY2VWYWx1ZXMuQUlYRXhwb3J0cykgeworICAgIGlmICh2YXJpYWJsZSA9PSAiQUlYX0VYUE9SVFMiKSB7CisgICAgICByZXR1cm4gcmVwbGFjZVZhbHVlcy5BSVhFeHBvcnRzOworICAgIH0KKyAgfQogICBpZiAocmVwbGFjZVZhbHVlcy5EZWZpbmVzICYmIHZhcmlhYmxlID09ICJERUZJTkVTIikgewogICAgIHJldHVybiByZXBsYWNlVmFsdWVzLkRlZmluZXM7CiAgIH0KQEAgLTIzMSw4ICsyMzYsNyBAQAogICB9CiAgIGlmICh2YXJpYWJsZSA9PSAiQ01BS0VfQ09NTUFORCIpIHsKICAgICByZXR1cm4gb3V0cHV0Q29udmVydGVyLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKSwKLSAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgfQogCiAgIGF1dG8gY29tcEl0ID0gdGhpcy0+Q29tcGlsZXJzLmZpbmQodmFyaWFibGUpOwpAQCAtMzI5LDcgKzMzMywxNyBAQAogICAgICAgc3RkOjpzdHJpbmcgcmVwbGFjZSA9CiAgICAgICAgIHRoaXMtPkV4cGFuZFJ1bGVWYXJpYWJsZShvdXRwdXRDb252ZXJ0ZXIsIHZhciwgcmVwbGFjZVZhbHVlcyk7CiAgICAgICBleHBhbmRlZElucHV0ICs9IHMuc3Vic3RyKHBvcywgc3RhcnQgLSBwb3MpOworCisgICAgICAvLyBQcmV2ZW50IGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgaW4gdGhlIG91dHB1dCBpZiB0aGUgcnVsZSB2YXJpYWJsZQorICAgICAgLy8gZXhwYW5kcyB0byBhbiBlbXB0eSBzdHJpbmcuCisgICAgICBib29sIGNvbnNlY3V0aXZlID0gcmVwbGFjZS5lbXB0eSgpICYmIHN0YXJ0ID4gMCAmJiBzW3N0YXJ0IC0gMV0gPT0gJyAnICYmCisgICAgICAgIGVuZCArIDEgPCBzLnNpemUoKSAmJiBzW2VuZCArIDFdID09ICcgJzsKKyAgICAgIGlmIChjb25zZWN1dGl2ZSkgeworICAgICAgICBleHBhbmRlZElucHV0LnBvcF9iYWNrKCk7CisgICAgICB9CisKICAgICAgIGV4cGFuZGVkSW5wdXQgKz0gcmVwbGFjZTsKKwogICAgICAgLy8gbW92ZSB0byBuZXh0IG9uZQogICAgICAgc3RhcnQgPSBzLmZpbmQoJzwnLCBzdGFydCArIHZhci5zaXplKCkgKyAyKTsKICAgICAgIHBvcyA9IGVuZCArIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5oIGIvU291cmNlL2NtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaAppbmRleCA4ZjM2MTk2Li4wOWU4YTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5oCisrKyBiL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgKQEAgLTM2LDYgKzM2LDcgQEAKICAgICBjb25zdCBjaGFyKiBUYXJnZXRWZXJzaW9uTWFqb3I7CiAgICAgY29uc3QgY2hhciogVGFyZ2V0VmVyc2lvbk1pbm9yOwogICAgIGNvbnN0IGNoYXIqIExhbmd1YWdlOworICAgIGNvbnN0IGNoYXIqIEFJWEV4cG9ydHM7CiAgICAgY29uc3QgY2hhciogT2JqZWN0czsKICAgICBjb25zdCBjaGFyKiBUYXJnZXQ7CiAgICAgY29uc3QgY2hhciogTGlua0xpYnJhcmllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5jeHggYi9Tb3VyY2UvY21SdW50aW1lRGVwZW5kZW5jeUFyY2hpdmUuY3h4CmluZGV4IDdhOTg3YzIuLjM0YjMxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5jeHgKKysrIGIvU291cmNlL2NtUnVudGltZURlcGVuZGVuY3lBcmNoaXZlLmN4eApAQCAtMzksNyArMzksNyBAQAogICBzdGQ6OnN0cmluZyB2c2xvYzsKICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogIyAgaWZuZGVmIENNQUtFX0JPT1RTVFJBUAotICBpZiAoZ2ctPkdldE5hbWUoKS5maW5kKHByZWZpeCkgPT0gMCkgeworICBpZiAoY21IYXNQcmVmaXgoZ2ctPkdldE5hbWUoKSwgcHJlZml4KSkgewogICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKiB2c2dlbiA9CiAgICAgICBzdGF0aWNfY2FzdDxjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcio+KGdnKTsKICAgICBpZiAodnNnZW4tPkdldFZTSW5zdGFuY2UodnNsb2MpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TY3JpcHRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbVNjcmlwdEdlbmVyYXRvci5oCmluZGV4IGM4YmIxYWIuLjdkNjc2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNjcmlwdEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbVNjcmlwdEdlbmVyYXRvci5oCkBAIC03MSw3ICs3MSw3IEBACiAKICAgc3RkOjpzdHJpbmcgQ3JlYXRlQ29uZmlnVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKICAgc3RkOjpzdHJpbmcgQ3JlYXRlQ29uZmlnVGVzdChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MpOwotICBzdGQ6OnN0cmluZyBDcmVhdGVDb21wb25lbnRUZXN0KGNvbnN0IGNoYXIqIGNvbXBvbmVudCk7CisgIHN0ZDo6c3RyaW5nIENyZWF0ZUNvbXBvbmVudFRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBvbmVudCk7CiAKICAgLy8gSW5mb3JtYXRpb24gc2hhcmVkIGJ5IG1vc3QgZ2VuZXJhdG9yIHR5cGVzLgogICBzdGQ6OnN0cmluZyBSdW50aW1lQ29uZmlnVmFyaWFibGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZWFyY2hQYXRoLmN4eCBiL1NvdXJjZS9jbVNlYXJjaFBhdGguY3h4CmluZGV4IGQxNWNlNTcuLjc2NmQzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNlYXJjaFBhdGguY3h4CisrKyBiL1NvdXJjZS9jbVNlYXJjaFBhdGguY3h4CkBAIC0xODEsNyArMTgxLDEzIEBACiAgICAgICBjb25zdCBjaGFyKiBhcmNoID0KICAgICAgICAgdGhpcy0+RkMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSIpOwogICAgICAgaWYgKGFyY2ggJiYgKmFyY2gpIHsKLSAgICAgICAgdGhpcy0+QWRkUGF0aEludGVybmFsKGRpciArIHN1YmRpciArICIvIiArIGFyY2gsIGJhc2UpOworICAgICAgICBpZiAodGhpcy0+RkMtPk1ha2VmaWxlLT5Jc0RlZmluaXRpb25TZXQoIkNNQUtFX1NZU1JPT1QiKSAmJgorICAgICAgICAgICAgdGhpcy0+RkMtPk1ha2VmaWxlLT5Jc0RlZmluaXRpb25TZXQoCisgICAgICAgICAgICAgICJDTUFLRV9QUkVGSVhfTElCUkFSWV9BUkNISVRFQ1RVUkUiKSkgeworICAgICAgICAgIHRoaXMtPkFkZFBhdGhJbnRlcm5hbChjbVN0ckNhdCgnLycsIGFyY2gsIGRpciwgc3ViZGlyKSwgYmFzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy0+QWRkUGF0aEludGVybmFsKGNtU3RyQ2F0KGRpciwgc3ViZGlyLCAnLycsIGFyY2gpLCBiYXNlKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICBzdGQ6OnN0cmluZyBhZGQgPSBkaXIgKyBzdWJkaXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZWFyY2hQYXRoLmggYi9Tb3VyY2UvY21TZWFyY2hQYXRoLmgKaW5kZXggMmE1NzZlZC4uM2VjYzczYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2VhcmNoUGF0aC5oCisrKyBiL1NvdXJjZS9jbVNlYXJjaFBhdGguaApAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtMjcsNiArMjgsNyBAQAogICB+Y21TZWFyY2hQYXRoKCk7CiAKICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBHZXRQYXRocygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlBhdGhzOyB9CisgIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5QYXRocy5zaXplKCk7IH0KIAogICB2b2lkIEV4dHJhY3RXaXRob3V0KGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaWdub3JlLAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0UGF0aHMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXJ2ZXIuY3h4IGIvU291cmNlL2NtU2VydmVyLmN4eAppbmRleCAzYjJlNWYzLi40MzRmYjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVNlcnZlci5jeHgKQEAgLTU5LDE2ICs1OSwxMiBAQAogICAsIFN1cHBvcnRFeHBlcmltZW50YWwoc3VwcG9ydEV4cGVyaW1lbnRhbCkKIHsKICAgLy8gUmVnaXN0ZXIgc3VwcG9ydGVkIHByb3RvY29sczoKLSAgdGhpcy0+UmVnaXN0ZXJQcm90b2NvbChuZXcgY21TZXJ2ZXJQcm90b2NvbDEpOworICB0aGlzLT5SZWdpc3RlclByb3RvY29sKGNtOjptYWtlX3VuaXF1ZTxjbVNlcnZlclByb3RvY29sMT4oKSk7CiB9CiAKIGNtU2VydmVyOjp+Y21TZXJ2ZXIoKQogewogICBDbG9zZSgpOwotCi0gIGZvciAoY21TZXJ2ZXJQcm90b2NvbCogcCA6IHRoaXMtPlN1cHBvcnRlZFByb3RvY29scykgewotICAgIGRlbGV0ZSBwOwotICB9CiB9CiAKIHZvaWQgY21TZXJ2ZXI6OlByb2Nlc3NSZXF1ZXN0KGNtQ29ubmVjdGlvbiogY29ubmVjdGlvbiwKQEAgLTExNywyMiArMTEzLDIyIEBACiAgIH0KIH0KIAotdm9pZCBjbVNlcnZlcjo6UmVnaXN0ZXJQcm90b2NvbChjbVNlcnZlclByb3RvY29sKiBwcm90b2NvbCkKK3ZvaWQgY21TZXJ2ZXI6OlJlZ2lzdGVyUHJvdG9jb2woc3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+IHByb3RvY29sKQogewogICBpZiAocHJvdG9jb2wtPklzRXhwZXJpbWVudGFsKCkgJiYgIXRoaXMtPlN1cHBvcnRFeHBlcmltZW50YWwpIHsKLSAgICBkZWxldGUgcHJvdG9jb2w7CisgICAgcHJvdG9jb2wucmVzZXQoKTsKICAgICByZXR1cm47CiAgIH0KICAgYXV0byB2ZXJzaW9uID0gcHJvdG9jb2wtPlByb3RvY29sVmVyc2lvbigpOwogICBhc3NlcnQodmVyc2lvbi5maXJzdCA+PSAwKTsKICAgYXNzZXJ0KHZlcnNpb24uc2Vjb25kID49IDApOwotICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbdmVyc2lvbl0oY21TZXJ2ZXJQcm90b2NvbCogcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAtPlByb3RvY29sVmVyc2lvbigpID09IHZlcnNpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYoCisgICAgdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLmJlZ2luKCksIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5lbmQoKSwKKyAgICBbdmVyc2lvbl0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+JiBwKSB7CisgICAgICByZXR1cm4gcC0+UHJvdG9jb2xWZXJzaW9uKCkgPT0gdmVyc2lvbjsKKyAgICB9KTsKICAgaWYgKGl0ID09IHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5lbmQoKSkgewotICAgIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5wdXNoX2JhY2socHJvdG9jb2wpOworICAgIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5wdXNoX2JhY2soc3RkOjptb3ZlKHByb3RvY29sKSk7CiAgIH0KIH0KIApAQCAtMjk3LDE5ICsyOTMsMjAgQEAKIH0KIAogY21TZXJ2ZXJQcm90b2NvbCogY21TZXJ2ZXI6OkZpbmRNYXRjaGluZ1Byb3RvY29sKAotICBjb25zdCBzdGQ6OnZlY3RvcjxjbVNlcnZlclByb3RvY29sKj4mIHByb3RvY29scywgaW50IG1ham9yLCBpbnQgbWlub3IpCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVNlcnZlclByb3RvY29sPj4mIHByb3RvY29scywgaW50IG1ham9yLAorICBpbnQgbWlub3IpCiB7CiAgIGNtU2VydmVyUHJvdG9jb2wqIGJlc3RNYXRjaCA9IG51bGxwdHI7Ci0gIGZvciAoYXV0byBwcm90b2NvbCA6IHByb3RvY29scykgeworICBmb3IgKGNvbnN0IGF1dG8mIHByb3RvY29sIDogcHJvdG9jb2xzKSB7CiAgICAgYXV0byB2ZXJzaW9uID0gcHJvdG9jb2wtPlByb3RvY29sVmVyc2lvbigpOwogICAgIGlmIChtYWpvciAhPSB2ZXJzaW9uLmZpcnN0KSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgaWYgKG1pbm9yID09IHZlcnNpb24uc2Vjb25kKSB7Ci0gICAgICByZXR1cm4gcHJvdG9jb2w7CisgICAgICByZXR1cm4gcHJvdG9jb2wuZ2V0KCk7CiAgICAgfQogICAgIGlmICghYmVzdE1hdGNoIHx8IGJlc3RNYXRjaC0+UHJvdG9jb2xWZXJzaW9uKCkuc2Vjb25kIDwgdmVyc2lvbi5zZWNvbmQpIHsKLSAgICAgIGJlc3RNYXRjaCA9IHByb3RvY29sOworICAgICAgYmVzdE1hdGNoID0gcHJvdG9jb2wuZ2V0KCk7CiAgICAgfQogICB9CiAgIHJldHVybiBtaW5vciA8IDAgPyBiZXN0TWF0Y2ggOiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2VydmVyLmggYi9Tb3VyY2UvY21TZXJ2ZXIuaAppbmRleCAzZDcwMjdiLi5lYzQwNzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXIuaAorKysgYi9Tb3VyY2UvY21TZXJ2ZXIuaApAQCAtMTAzLDcgKzEwMyw3IEBACiAgIGNtRmlsZU1vbml0b3IqIEZpbGVNb25pdG9yKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gIHZvaWQgUmVnaXN0ZXJQcm90b2NvbChjbVNlcnZlclByb3RvY29sKiBwcm90b2NvbCk7CisgIHZvaWQgUmVnaXN0ZXJQcm90b2NvbChzdGQ6OnVuaXF1ZV9wdHI8Y21TZXJ2ZXJQcm90b2NvbD4gcHJvdG9jb2wpOwogCiAgIC8vIENhbGxiYWNrcyBmcm9tIGNtU2VydmVyQ29ubmVjdGlvbjoKIApAQCAtMTQ5LDEyICsxNDksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVidWdJbmZvKiBkZWJ1ZykgY29uc3Q7CiAKICAgc3RhdGljIGNtU2VydmVyUHJvdG9jb2wqIEZpbmRNYXRjaGluZ1Byb3RvY29sKAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtU2VydmVyUHJvdG9jb2wqPiYgcHJvdG9jb2xzLCBpbnQgbWFqb3IsIGludCBtaW5vcik7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+PiYgcHJvdG9jb2xzLCBpbnQgbWFqb3IsCisgICAgaW50IG1pbm9yKTsKIAogICBjb25zdCBib29sIFN1cHBvcnRFeHBlcmltZW50YWw7CiAKICAgY21TZXJ2ZXJQcm90b2NvbCogUHJvdG9jb2wgPSBudWxscHRyOwotICBzdGQ6OnZlY3RvcjxjbVNlcnZlclByb3RvY29sKj4gU3VwcG9ydGVkUHJvdG9jb2xzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21TZXJ2ZXJQcm90b2NvbD4+IFN1cHBvcnRlZFByb3RvY29sczsKIAogICBmcmllbmQgY2xhc3MgY21TZXJ2ZXJQcm90b2NvbDsKICAgZnJpZW5kIGNsYXNzIGNtU2VydmVyUmVxdWVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNlcnZlclByb3RvY29sLmN4eCBiL1NvdXJjZS9jbVNlcnZlclByb3RvY29sLmN4eAppbmRleCA1NjAwM2RmLi5jNWYzNDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5jeHgKKysrIGIvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuY3h4CkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yTWVzc2FnZSkKIHsKICAgY29uc3Qgc3RkOjpzdHJpbmcgY2FjaGVkVmFsdWUgPQotICAgIHN0ZDo6c3RyaW5nKHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIikpOworICAgICpzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9IT01FX0RJUkVDVE9SWSIpOwogICBpZiAodmFsdWUuZW1wdHkoKSkgewogICAgIHZhbHVlID0gY2FjaGVkVmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDUsOSArMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlEZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7Ci0gIGNvbnN0IGNoYXIqIGVudHJ5ID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOwotICBjb25zdCBzdGQ6OnN0cmluZyBjYWNoZWRWYWx1ZSA9Ci0gICAgZW50cnkgPT0gbnVsbHB0ciA/IHN0ZDo6c3RyaW5nKCkgOiBzdGQ6OnN0cmluZyhlbnRyeSk7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGNhY2hlZFZhbHVlID0gc3RhdGUtPkdldFNhZmVDYWNoZUVudHJ5VmFsdWUoa2V5KTsKICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICB2YWx1ZSA9IGNhY2hlZFZhbHVlOwogICB9CkBAIC00NTIsNyArNDUwLDcgQEAKICAgICBib29sIGhhdmVQcm9wZXJ0aWVzID0gZmFsc2U7CiAgICAgZm9yIChhdXRvIGNvbnN0JiBwcm9wIDogc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eUxpc3Qoa2V5KSkgewogICAgICAgaGF2ZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgcHJvcHNbcHJvcF0gPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcCk7CisgICAgICBwcm9wc1twcm9wXSA9ICpzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcCk7CiAgICAgfQogICAgIGlmIChoYXZlUHJvcGVydGllcykgewogICAgICAgZW50cnlba1BST1BFUlRJRVNfS0VZXSA9IHByb3BzOwpAQCAtNzQ0LDcgKzc0Miw3IEBACiAgIGNtLT5TZXRIb21lRGlyZWN0b3J5KFNvdXJjZURpcmVjdG9yeSk7CiAgIGNtLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KEJ1aWxkRGlyZWN0b3J5KTsKIAotICBjbUdsb2JhbEdlbmVyYXRvciogZ2cgPSBjbS0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKGZ1bGxHZW5lcmF0b3JOYW1lKTsKKyAgYXV0byBnZyA9IGNtLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZnVsbEdlbmVyYXRvck5hbWUpOwogICBpZiAoIWdnKSB7CiAgICAgc2V0RXJyb3JNZXNzYWdlKAogICAgICAgZXJyb3JNZXNzYWdlLApAQCAtNzUzLDcgKzc1MSw3IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgY20tPlNldEdsb2JhbEdlbmVyYXRvcihnZyk7CisgIGNtLT5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdnKSk7CiAKICAgY20tPlNldEdlbmVyYXRvclRvb2xzZXQoVG9vbHNldCk7CiAgIGNtLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybShQbGF0Zm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVNldENvbW1hbmQuY3h4CmluZGV4IDhjM2E0Y2IuLjVjNTU0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNldENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldENvbW1hbmQuY3h4CkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICBpZiAoY2FjaGUpIHsKICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGNhY2hlU3RhcnQgPSBhcmdzLnNpemUoKSAtIDMgLSAoZm9yY2UgPyAxIDogMCk7Ci0gICAgaWYgKCFjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKGFyZ3NbY2FjaGVTdGFydCArIDFdLmNfc3RyKCksIHR5cGUpKSB7CisgICAgaWYgKCFjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKGFyZ3NbY2FjaGVTdGFydCArIDFdLCB0eXBlKSkgewogICAgICAgc3RkOjpzdHJpbmcgbSA9ICJpbXBsaWNpdGx5IGNvbnZlcnRpbmcgJyIgKyBhcmdzW2NhY2hlU3RhcnQgKyAxXSArCiAgICAgICAgICInIHRvICdTVFJJTkcnIHR5cGUuIjsKICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIG0pOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAKICAgLy8gc2VlIGlmIHRoaXMgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUKICAgY21TdGF0ZSogc3RhdGUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRTdGF0ZSgpOwotICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh2YXJpYWJsZSk7CisgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh2YXJpYWJsZSk7CiAgIGlmIChleGlzdGluZ1ZhbHVlICYmCiAgICAgICAoc3RhdGUtPkdldENhY2hlRW50cnlUeXBlKHZhcmlhYmxlKSAhPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpKSB7CiAgICAgLy8gaWYgdGhlIHNldCBpcyB0cnlpbmcgdG8gQ0FDSEUgdGhlIHZhbHVlIGJ1dCB0aGUgdmFsdWUKQEAgLTE0OSw4ICsxNDksOCBAQAogCiAgIC8vIGlmIGl0IGlzIG1lYW50IHRvIGJlIGluIHRoZSBjYWNoZSB0aGVuIGRlZmluZSBpdCBpbiB0aGUgY2FjaGUKICAgaWYgKGNhY2hlKSB7Ci0gICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKHZhcmlhYmxlLCB2YWx1ZS5jX3N0cigpLCBkb2NzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGZvcmNlKTsKKyAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24odmFyaWFibGUsIHZhbHVlLCBkb2NzdHJpbmcsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlKTsKICAgfSBlbHNlIHsKICAgICAvLyBhZGQgdGhlIGRlZmluaXRpb24KICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGREZWZpbml0aW9uKHZhcmlhYmxlLCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtU2V0UHJvcGVydHlDb21tYW5kLmN4eAppbmRleCAxMTJkODMyLi40ZGJiYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTE5NCw5ICsxOTQsOCBAQAogYm9vbCBIYW5kbGVHbG9iYWxNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICBpZiAoIW5hbWVzLmVtcHR5KCkpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImdpdmVuIG5hbWVzIGZvciBHTE9CQUwgc2NvcGUuIik7CkBAIC0yMDUsMTQgKzIwNCwxNCBAQAogCiAgIC8vIFNldCBvciBhcHBlbmQgdGhlIHByb3BlcnR5LgogICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7Ci0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwotICBpZiAocmVtb3ZlKSB7Ci0gICAgdmFsdWUgPSBudWxscHRyOwotICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgY20tPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUgPyB2YWx1ZSA6ICIiLCBhcHBlbmRBc1N0cmluZyk7CisgICAgY20tPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcpOwogICB9IGVsc2UgewotICAgIGNtLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBpZiAocmVtb3ZlKSB7CisgICAgICBjbS0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgY20tPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZS5jX3N0cigpKTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTIyMSw5ICsyMjAsOCBAQAogYm9vbCBIYW5kbGVEaXJlY3RvcnlNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICBpZiAobmFtZXMuc2l6ZSgpID4gMSkgewogICAgIHN0YXR1cy5TZXRFcnJvcigiYWxsb3dzIGF0IG1vc3Qgb25lIG5hbWUgZm9yIERJUkVDVE9SWSBzY29wZS4iKTsKQEAgLTIzNywxNCArMjM1LDggQEAKICAgaWYgKCFuYW1lcy5lbXB0eSgpKSB7CiAgICAgLy8gQ29uc3RydWN0IHRoZSBkaXJlY3RvcnkgbmFtZS4gIEludGVycHJldCByZWxhdGl2ZSBwYXRocyB3aXRoCiAgICAgLy8gcmVzcGVjdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgc3RkOjpzdHJpbmcgZGlyID0gKm5hbWVzLmJlZ2luKCk7Ci0gICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChkaXIpKSB7Ci0gICAgICBkaXIgPSBjbVN0ckNhdChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywKLSAgICAgICAgICAgICAgICAgICAgICpuYW1lcy5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9jYWwgZ2VuZXJhdG9ycyBhcmUgYXNzb2NpYXRlZCB3aXRoIGNvbGxhcHNlZCBwYXRocy4KLSAgICBkaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGRpcik7CisgICAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICpuYW1lcy5iZWdpbigpLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgICAgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZE1ha2VmaWxlKGRpcik7CiAgICAgaWYgKCFtZikgewpAQCAtMjU4LDE0ICsyNTAsMTQgQEAKICAgfQogCiAgIC8vIFNldCBvciBhcHBlbmQgdGhlIHByb3BlcnR5LgotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUuY19zdHIoKTsKLSAgaWYgKHJlbW92ZSkgewotICAgIHZhbHVlID0gbnVsbHB0cjsKLSAgfQogICBpZiAoYXBwZW5kTW9kZSkgewotICAgIG1mLT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlID8gdmFsdWUgOiAiIiwgYXBwZW5kQXNTdHJpbmcpOworICAgIG1mLT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKICAgfSBlbHNlIHsKLSAgICBtZi0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgaWYgKHJlbW92ZSkgeworICAgICAgbWYtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIG1mLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUuY19zdHIoKSk7CisgICAgfQogICB9CiAKICAgcmV0dXJuIHRydWU7CkBAIC0yNzQsOSArMjY2LDggQEAKIGJvb2wgSGFuZGxlVGFyZ2V0TW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLCBjb25zdCBib29sIGFwcGVuZE1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG5hbWVzKSB7CiAgICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzQWxpYXMobmFtZSkpIHsKQEAgLTMwMCwxOCArMjkxLDE4IEBACiAKIGJvb2wgSGFuZGxlVGFyZ2V0KGNtVGFyZ2V0KiB0YXJnZXQsIGNtTWFrZWZpbGUmIG1ha2VmaWxlLAogICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLAotICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcHBlbmRNb2RlLCBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgLy8gU2V0IG9yIGFwcGVuZCB0aGUgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwotICBpZiAocmVtb3ZlKSB7Ci0gICAgdmFsdWUgPSBudWxscHRyOwotICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhcHBlbmRBc1N0cmluZyk7CisgICAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKICAgfSBlbHNlIHsKLSAgICB0YXJnZXQtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUpOworICAgIH0KICAgfQogCiAgIC8vIENoZWNrIHRoZSByZXN1bHRpbmcgdmFsdWUuCkBAIC0zMjMsOSArMzE0LDggQEAKIGJvb2wgSGFuZGxlU291cmNlTW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLCBjb25zdCBib29sIGFwcGVuZE1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG5hbWVzKSB7CiAgICAgLy8gR2V0IHRoZSBzb3VyY2UgZmlsZS4KQEAgLTM0NCwyOCArMzM0LDI2IEBACiB9CiAKIGJvb2wgSGFuZGxlU291cmNlKGNtU291cmNlRmlsZSogc2YsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgY29uc3QgYm9vbCBhcHBlbmRBc1N0cmluZywKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgIGJvb2wgYXBwZW5kTW9kZSwgYm9vbCByZW1vdmUpCiB7CiAgIC8vIFNldCBvciBhcHBlbmQgdGhlIHByb3BlcnR5LgotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUuY19zdHIoKTsKLSAgaWYgKHJlbW92ZSkgewotICAgIHZhbHVlID0gbnVsbHB0cjsKLSAgfQotCiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgc2YtPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKKyAgICBzZi0+QXBwZW5kUHJvcGVydHkocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLCBhcHBlbmRBc1N0cmluZyk7CiAgIH0gZWxzZSB7Ci0gICAgc2YtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIHNmLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG51bGxwdHIpOworICAgIH0gZWxzZSB7CisgICAgICBzZi0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLmNfc3RyKCkpOworICAgIH0KICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBIYW5kbGVUZXN0TW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIG5hbWVzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcHBlbmRBc1N0cmluZywgY29uc3QgYm9vbCBhcHBlbmRNb2RlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwZW5kTW9kZSwgYm9vbCByZW1vdmUpCiB7CiAgIC8vIExvb2sgZm9yIHRlc3RzIHdpdGggYWxsIG5hbWVzIGdpdmVuLgogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIG5leHQ7CkBAIC0zOTYsMTggKzM4NCwxOCBAQAogfQogCiBib29sIEhhbmRsZVRlc3QoY21UZXN0KiB0ZXN0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLAotICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgLy8gU2V0IG9yIGFwcGVuZCB0aGUgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwotICBpZiAocmVtb3ZlKSB7Ci0gICAgdmFsdWUgPSBudWxscHRyOwotICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgdGVzdC0+QXBwZW5kUHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXBwZW5kQXNTdHJpbmcpOworICAgIHRlc3QtPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcpOwogICB9IGVsc2UgewotICAgIHRlc3QtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIHRlc3QtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3QtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZS5jX3N0cigpKTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTQxNiw5ICs0MDQsOCBAQAogYm9vbCBIYW5kbGVDYWNoZU1vZGUoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLCBjb25zdCBib29sIGFwcGVuZE1vZGUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQURWQU5DRUQiKSB7CiAgICAgaWYgKCFyZW1vdmUgJiYgIWNtSXNPbihwcm9wZXJ0eVZhbHVlKSAmJiAhY21Jc09mZihwcm9wZXJ0eVZhbHVlKSkgewpAQCAtNDQ1LDcgKzQzMiw3IEBACiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiBuYW1lcykgewogICAgIC8vIEdldCB0aGUgc291cmNlIGZpbGUuCiAgICAgY21ha2UqIGNtID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpOwotICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPSBjbS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKG5hbWUpOworICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gY20tPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShuYW1lKTsKICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewogICAgICAgaWYgKCFIYW5kbGVDYWNoZUVudHJ5KG5hbWUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcsIGFwcGVuZE1vZGUsCkBAIC00NjMsMjEgKzQ1MCwxOSBAQAogCiBib29sIEhhbmRsZUNhY2hlRW50cnkoc3RkOjpzdHJpbmcgY29uc3QmIGNhY2hlS2V5LCBjb25zdCBjbU1ha2VmaWxlJiBtYWtlZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICAvLyBTZXQgb3IgYXBwZW5kIHRoZSBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmNfc3RyKCk7CiAgIGNtU3RhdGUqIHN0YXRlID0gbWFrZWZpbGUuR2V0U3RhdGUoKTsKICAgaWYgKHJlbW92ZSkgewogICAgIHN0YXRlLT5SZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoY2FjaGVLZXksIHByb3BlcnR5TmFtZSk7CiAgIH0KICAgaWYgKGFwcGVuZE1vZGUpIHsKLSAgICBzdGF0ZS0+QXBwZW5kQ2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLAorICAgIHN0YXRlLT5BcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoY2FjaGVLZXksIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEFzU3RyaW5nKTsKICAgfSBlbHNlIHsKLSAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUpOwogICB9CiAKICAgcmV0dXJuIHRydWU7CkBAIC00ODYsOSArNDcxLDggQEAKIGJvb2wgSGFuZGxlSW5zdGFsbE1vZGUoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7CiAKQEAgLTUxMCwxNyArNDk0LDE3IEBACiAKIGJvb2wgSGFuZGxlSW5zdGFsbChjbUluc3RhbGxlZEZpbGUqIGZpbGUsIGNtTWFrZWZpbGUmIG1ha2VmaWxlLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcHBlbmRNb2RlLCBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICAvLyBTZXQgb3IgYXBwZW5kIHRoZSBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmNfc3RyKCk7CiAgIGlmIChyZW1vdmUpIHsKICAgICBmaWxlLT5SZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICB9IGVsc2UgaWYgKGFwcGVuZE1vZGUpIHsKLSAgICBmaWxlLT5BcHBlbmRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKKyAgICBmaWxlLT5BcHBlbmRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZyk7CiAgIH0gZWxzZSB7Ci0gICAgZmlsZS0+U2V0UHJvcGVydHkoJm1ha2VmaWxlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBmaWxlLT5TZXRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggOGQ5MTdkYi4uY2QwZmE0MCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0VGFyZ2V0UHJvcGVydGllc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldFRhcmdldFByb3BlcnRpZXNDb21tYW5kLmN4eApAQCAtNCw3ICs0LDggQEAKIAogI2luY2x1ZGUgPGl0ZXJhdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0zMyw3ICszNCw3IEBACiAgICAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICAgIGNtQXBwZW5kKHByb3BlcnR5UGFpcnMsIGosIGFyZ3MuZW5kKCkpOworICAgICAgY206OmFwcGVuZChwcm9wZXJ0eVBhaXJzLCBqLCBhcmdzLmVuZCgpKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBudW1GaWxlcysrOwpAQCAtNzAsNyArNzEsNyBAQAogICAgIC8vIG5vdyBsb29wIHRocm91Z2ggYWxsIHRoZSBwcm9wcyBhbmQgc2V0IHRoZW0KICAgICB1bnNpZ25lZCBpbnQgazsKICAgICBmb3IgKGsgPSAwOyBrIDwgcHJvcGVydHlQYWlycy5zaXplKCk7IGsgPSBrICsgMikgewotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShwcm9wZXJ0eVBhaXJzW2tdLCBwcm9wZXJ0eVBhaXJzW2sgKyAxXS5jX3N0cigpKTsKKyAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkocHJvcGVydHlQYWlyc1trXSwgcHJvcGVydHlQYWlyc1trICsgMV0pOwogICAgICAgdGFyZ2V0LT5DaGVja1Byb3BlcnR5KHByb3BlcnR5UGFpcnNba10sIG1mKTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNldFRlc3RzUHJvcGVydGllc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggZGU2MWVkYS4uMmU3YWVjYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKQEAgLTQsNyArNCw4IEBACiAKICNpbmNsdWRlIDxpdGVyYXRvcj4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMzYsNyArMzcsNyBAQAogICAgICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBjbUFwcGVuZChwcm9wZXJ0eVBhaXJzLCBqLCBhcmdzLmVuZCgpKTsKKyAgICAgIGNtOjphcHBlbmQocHJvcGVydHlQYWlycywgaiwgYXJncy5lbmQoKSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgbnVtRmlsZXMrKzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNpdGVOYW1lQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TaXRlTmFtZUNvbW1hbmQuY3h4CmluZGV4IGQ0N2YxMjEuLmIyZDkwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNpdGVOYW1lQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU2l0ZU5hbWVDb21tYW5kLmN4eApAQCAtNzIsOCArNzIsNyBAQAogICB9CiAjZW5kaWYKICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgIGFyZ3NbMF0sIHNpdGVOYW1lLmNfc3RyKCksCi0gICAgIk5hbWUgb2YgdGhlIGNvbXB1dGVyL3NpdGUgd2hlcmUgY29tcGlsZSBpcyBiZWluZyBydW4iLAorICAgIGFyZ3NbMF0sIHNpdGVOYW1lLCAiTmFtZSBvZiB0aGUgY29tcHV0ZXIvc2l0ZSB3aGVyZSBjb21waWxlIGlzIGJlaW5nIHJ1biIsCiAgICAgY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogCiAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlRmlsZS5jeHggYi9Tb3VyY2UvY21Tb3VyY2VGaWxlLmN4eAppbmRleCAyYTM0NWViLi41ZGM4YjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Tb3VyY2VGaWxlLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VGaWxlLmN4eApAQCAtMTI4LDcgKzEyOCw3IEBACiAgIC8vIFRoZSBmaWxlIGlzIG5vdCBnZW5lcmF0ZWQuICBJdCBtdXN0IGV4aXN0IG9uIGRpc2suCiAgIGNtTWFrZWZpbGUgY29uc3QqIG1ha2VmaWxlID0gdGhpcy0+TG9jYXRpb24uR2V0TWFrZWZpbGUoKTsKICAgLy8gTG9jYXRpb24gcGF0aAotICBzdGQ6OnN0cmluZyBjb25zdCBsUGF0aCA9IHRoaXMtPkxvY2F0aW9uLkdldEZ1bGxQYXRoKCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsUGF0aCA9IHRoaXMtPkxvY2F0aW9uLkdldEZ1bGxQYXRoKCk7CiAgIC8vIExpc3Qgb2YgZXh0ZW5zaW9uIGxpc3RzCiAgIHN0ZDo6YXJyYXk8c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0KiwgMj4gY29uc3QgZXh0c0xpc3RzID0gewogICAgIHsgJm1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFNvdXJjZUV4dGVuc2lvbnMoKSwKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIFRyeSBmdWxsIHBhdGggd2l0aCBleHRlbnNpb24KLSAgICBmb3IgKGF1dG8gZXh0cyA6IGV4dHNMaXN0cykgeworICAgIGZvciAoYXV0byYgZXh0cyA6IGV4dHNMaXN0cykgewogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZXh0IDogKmV4dHMpIHsKICAgICAgICAgaWYgKCFleHQuZW1wdHkoKSkgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dFBhdGggPSBjbVN0ckNhdChmdWxsUGF0aCwgJy4nLCBleHQpOwpAQCAtMjYwLDIxICsyNjAsMjEgQEAKICAgfQogfQogCi12b2lkIGNtU291cmNlRmlsZTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCit2b2lkIGNtU291cmNlRmlsZTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBib29sIGFzU3RyaW5nKQogewogICBpZiAocHJvcCA9PSBwcm9wSU5DTFVERV9ESVJFQ1RPUklFUykgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IHRoaXMtPkxvY2F0aW9uLkdldE1ha2VmaWxlKCktPkdldEJhY2t0cmFjZSgpOwogICAgICAgdGhpcy0+SW5jbHVkZURpcmVjdG9yaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSwgbGZidCk7CiAgICAgfQogICB9IGVsc2UgaWYgKHByb3AgPT0gcHJvcENPTVBJTEVfT1BUSU9OUykgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IHRoaXMtPkxvY2F0aW9uLkdldE1ha2VmaWxlKCktPkdldEJhY2t0cmFjZSgpOwogICAgICAgdGhpcy0+Q29tcGlsZU9wdGlvbnMuZW1wbGFjZV9iYWNrKHZhbHVlLCBsZmJ0KTsKICAgICB9CiAgIH0gZWxzZSBpZiAocHJvcCA9PSBwcm9wQ09NUElMRV9ERUZJTklUSU9OUykgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IHRoaXMtPkxvY2F0aW9uLkdldE1ha2VmaWxlKCktPkdldEJhY2t0cmFjZSgpOwogICAgICAgdGhpcy0+Q29tcGlsZURlZmluaXRpb25zLmVtcGxhY2VfYmFjayh2YWx1ZSwgbGZidCk7CiAgICAgfQpAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOwogICB9CiAKLSAgY29uc3QgY2hhciogcmV0VmFsID0gdGhpcy0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICBjbVByb3AgcmV0VmFsID0gdGhpcy0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICBpZiAoIXJldFZhbCkgewogICAgIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gdGhpcy0+TG9jYXRpb24uR2V0TWFrZWZpbGUoKTsKICAgICBjb25zdCBib29sIGNoYWluID0KQEAgLTM2OSw5ICszNjksMTAgQEAKICAgICBpZiAoY2hhaW4pIHsKICAgICAgIHJldHVybiBtZi0+R2V0UHJvcGVydHkocHJvcCwgY2hhaW4pOwogICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCi0gIHJldHVybiByZXRWYWw7CisgIHJldHVybiByZXRWYWwtPmNfc3RyKCk7CiB9CiAKIGNvbnN0IGNoYXIqIGNtU291cmNlRmlsZTo6R2V0U2FmZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlRmlsZS5oIGIvU291cmNlL2NtU291cmNlRmlsZS5oCmluZGV4IDgyYTM2MjUuLmUyMjgyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNvdXJjZUZpbGUuaAorKysgYi9Tb3VyY2UvY21Tb3VyY2VGaWxlLmgKQEAgLTQyLDcgKzQyLDcgQEAKIAogICAvLyEgU2V0L0dldCBhIHByb3BlcnR5IG9mIHRoaXMgc291cmNlIGZpbGUKICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKKyAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CiAgIC8vISBNaWdodCByZXR1cm4gYSBudWxscHRyIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3Qgc2V0IG9yIGludmFsaWQKICAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwpAQCAtMTU0LDkgKzE1NCw4IEBACiAjZGVmaW5lIENNX0hFQURFUl9SRUdFWCAiXFwuKGh8aGh8aFxcK1xcK3xobXxocHB8aHh4fGlufHR4eHxpbmwpJCIKIAogI2RlZmluZSBDTV9TT1VSQ0VfUkVHRVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiXFwuKEN8TXxjfGNcXCtcXCt8Y2N8Y3BwfGN4eHxjdXxmfGY5MHxmb3J8ZnBwfGZ0bnxtfG1tfHJjfGRlZnxyfG9kbHxpZGx8IiAgXAotICAiaHBqIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAifGJhdCkkIgorICAiXFwuKEN8RnxNfGN8Y1xcK1xcK3xjY3xjcHB8Y3h4fGN1fGZ8ZjkwfGZvcnxmcHB8ZnRufG18bW18IiAgICAgICAgICAgICAgICAgXAorICAicmN8ZGVmfHJ8b2RsfGlkbHxocGp8YmF0KSQiCiAKICNkZWZpbmUgQ01fUENIX1JFR0VYICJjbWFrZV9wY2hcXC4oaHxoeHgpJCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlRmlsZUxvY2F0aW9uLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUZpbGVMb2NhdGlvbi5jeHgKaW5kZXggZGY3MDJiMC4uZTg1MmMwNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlRmlsZUxvY2F0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VGaWxlTG9jYXRpb24uY3h4CkBAIC00LDYgKzQsOCBAQAogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgpAQCAtMzEsNyArMzMsOCBAQAogICB0aGlzLT5BbWJpZ3VvdXNFeHRlbnNpb24gPSB0cnVlOwogICB0aGlzLT5EaXJlY3RvcnkgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgobmFtZSk7CiAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aCh0aGlzLT5EaXJlY3RvcnkpKSB7Ci0gICAgdGhpcy0+RGlyZWN0b3J5ID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5EaXJlY3RvcnkpOworICAgIHRoaXMtPkRpcmVjdG9yeSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICB0aGlzLT5EaXJlY3RvcnksIG1mLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCkpOwogICB9CiAgIHRoaXMtPk5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUobmFtZSk7CiAgIGlmIChraW5kID09IGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pIHsKQEAgLTE1MSw3ICsxNTQsNyBAQAogCiAgIC8vIE9ubHkgYSBmaXhlZCBzZXQgb2YgZXh0ZW5zaW9ucyB3aWxsIGJlIHRyaWVkIHRvIG1hdGNoIGEgZmlsZSBvbgogICAvLyBkaXNrLiAgT25lIG9mIHRoZXNlIG11c3QgbWF0Y2ggaWYgbG9jIHJlZmVycyB0byB0aGlzIHNvdXJjZSBmaWxlLgotICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0ID0gdGhpcy0+TmFtZS5zdWJzdHIobG9jLk5hbWUuc2l6ZSgpICsgMSk7CisgIGF1dG8gZXh0ID0gY206OnN0cmluZ192aWV3KHRoaXMtPk5hbWUpLnN1YnN0cihsb2MuTmFtZS5zaXplKCkgKyAxKTsKICAgY21NYWtlZmlsZSBjb25zdCogbWYgPSB0aGlzLT5NYWtlZmlsZTsKICAgYXV0byBjbSA9IG1mLT5HZXRDTWFrZUluc3RhbmNlKCk7CiAgIHJldHVybiBjbS0+SXNTb3VyY2VFeHRlbnNpb24oZXh0KSB8fCBjbS0+SXNIZWFkZXJFeHRlbnNpb24oZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eAppbmRleCA4YzNlYzlmLi4xNTUwNjhjYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlR3JvdXAuY3h4CisrKyBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eApAQCAtNCw2ICs0LDggQEAKIAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKIAogY2xhc3MgY21Tb3VyY2VHcm91cEludGVybmFscwpAQCAtMTYsNyArMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXJlbnROYW1lKQogICA6IE5hbWUoc3RkOjptb3ZlKG5hbWUpKQogewotICB0aGlzLT5JbnRlcm5hbCA9IG5ldyBjbVNvdXJjZUdyb3VwSW50ZXJuYWxzOworICB0aGlzLT5JbnRlcm5hbCA9IGNtOjptYWtlX3VuaXF1ZTxjbVNvdXJjZUdyb3VwSW50ZXJuYWxzPigpOwogICB0aGlzLT5TZXRHcm91cFJlZ2V4KHJlZ2V4KTsKICAgaWYgKHBhcmVudE5hbWUpIHsKICAgICB0aGlzLT5GdWxsTmFtZSA9IGNtU3RyQ2F0KHBhcmVudE5hbWUsICdcXCcpOwpAQCAtMjQsMTAgKzI2LDcgQEAKICAgdGhpcy0+RnVsbE5hbWUgKz0gdGhpcy0+TmFtZTsKIH0KIAotY21Tb3VyY2VHcm91cDo6fmNtU291cmNlR3JvdXAoKQotewotICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7Ci19CitjbVNvdXJjZUdyb3VwOjp+Y21Tb3VyY2VHcm91cCgpID0gZGVmYXVsdDsKIAogY21Tb3VyY2VHcm91cDo6Y21Tb3VyY2VHcm91cChjbVNvdXJjZUdyb3VwIGNvbnN0JiByKQogewpAQCAtMzYsNyArMzUsNyBAQAogICB0aGlzLT5Hcm91cFJlZ2V4ID0gci5Hcm91cFJlZ2V4OwogICB0aGlzLT5Hcm91cEZpbGVzID0gci5Hcm91cEZpbGVzOwogICB0aGlzLT5Tb3VyY2VGaWxlcyA9IHIuU291cmNlRmlsZXM7Ci0gIHRoaXMtPkludGVybmFsID0gbmV3IGNtU291cmNlR3JvdXBJbnRlcm5hbHMoKnIuSW50ZXJuYWwpOworICB0aGlzLT5JbnRlcm5hbCA9IGNtOjptYWtlX3VuaXF1ZTxjbVNvdXJjZUdyb3VwSW50ZXJuYWxzPigqci5JbnRlcm5hbCk7CiB9CiAKIGNtU291cmNlR3JvdXAmIGNtU291cmNlR3JvdXA6Om9wZXJhdG9yPShjbVNvdXJjZUdyb3VwIGNvbnN0JiByKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlR3JvdXAuaCBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmgKaW5kZXggNTgxZGM1ZC4uNjIzY2RlZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlR3JvdXAuaAorKysgYi9Tb3VyY2UvY21Tb3VyY2VHcm91cC5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTEyMiw3ICsxMjMsNyBAQAogICAgKi8KICAgc3RkOjp2ZWN0b3I8Y29uc3QgY21Tb3VyY2VGaWxlKj4gU291cmNlRmlsZXM7CiAKLSAgY21Tb3VyY2VHcm91cEludGVybmFscyogSW50ZXJuYWw7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbVNvdXJjZUdyb3VwSW50ZXJuYWxzPiBJbnRlcm5hbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlR3JvdXBDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwQ29tbWFuZC5jeHgKaW5kZXggY2M2Mjk1Mi4uODM1MDQxMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlR3JvdXBDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VHcm91cENvbW1hbmQuY3h4CkBAIC0zMCwxOCArMzAsNiBAQAogICByZXR1cm4gY21Ub2tlbml6ZShwYXRoLCAiXFwvIik7CiB9CiAKLXN0ZDo6c3RyaW5nIGdldEZ1bGxGaWxlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgY3VycmVudFBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpCi17Ci0gIHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0gcGF0aDsKLQotICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhdGgpKSB7Ci0gICAgZnVsbFBhdGggPSBjbVN0ckNhdChjdXJyZW50UGF0aCwgJy8nLCBwYXRoKTsKLSAgfQotCi0gIHJldHVybiBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGZ1bGxQYXRoKTsKLX0KLQogc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGdldFNvdXJjZUdyb3VwRmlsZXNQYXRocygKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJvb3QsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmlsZXMpCiB7CkBAIC0xMjQsNyArMTEyLDggQEAKICAgICAgICAgZXJyb3JNc2cgPSAiQ291bGQgbm90IGNyZWF0ZSBzb3VyY2UgZ3JvdXAgZm9yIGZpbGU6ICIgKyBzZ0ZpbGVzUGF0aDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZnVsbFBhdGggPSBnZXRGdWxsRmlsZVBhdGgocm9vdCwgc2dGaWxlc1BhdGgpOworICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZnVsbFBhdGggPQorICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNnRmlsZXNQYXRoLCByb290KTsKICAgICAgIHNnLT5BZGRHcm91cEZpbGUoZnVsbFBhdGgpOwogICAgIH0KICAgfQpAQCAtMjU1LDEwICsyNDQsOCBAQAogICAgICAgcGFyc2VkQXJndW1lbnRzW2tGaWxlc09wdGlvbk5hbWVdOwogICAgIGZvciAoYXV0byBjb25zdCYgZmlsZXNBcmcgOiBmaWxlc0FyZ3VtZW50cykgewogICAgICAgc3RkOjpzdHJpbmcgc3JjID0gZmlsZXNBcmc7Ci0gICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHNyYykpIHsKLSAgICAgICAgc3JjID0gY21TdHJDYXQobWYuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAnLycsIGZpbGVzQXJnKTsKLSAgICAgIH0KLSAgICAgIHNyYyA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3JjKTsKKyAgICAgIHNyYyA9CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3JjLCBtZi5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogICAgICAgc2ctPkFkZEdyb3VwRmlsZShzcmMpOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhbmRhcmRMZXhlci5oIGIvU291cmNlL2NtU3RhbmRhcmRMZXhlci5oCmluZGV4IDEzZjc2MjIuLjU1ZDIzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0YW5kYXJkTGV4ZXIuaAorKysgYi9Tb3VyY2UvY21TdGFuZGFyZExleGVyLmgKQEAgLTMsNiArMywxOSBAQAogI2lmbmRlZiBjbVN0YW5kYXJkTGV4ZXJfaAogI2RlZmluZSBjbVN0YW5kYXJkTGV4ZXJfaAogCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8qIFBPU0lYIEFQSXMgYXJlIG5lZWRlZCAqLworIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fc3VuKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKy8qIEMgc291cmNlczogZm9yIGZpbGVubyBhbmQgc3RyZHVwICovCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKyNlbmRpZgorI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKy8qIEZvciBpc2FzY2lpICovCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA3MDAKKyNlbmRpZgorCiAjaW5jbHVkZSAiY21zeXMvQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKIC8qIERpc2FibGUgc29tZSB3YXJuaW5ncy4gICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdGF0ZS5jeHggYi9Tb3VyY2UvY21TdGF0ZS5jeHgKaW5kZXggZjliNWVkMS4uNWExMTNkZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGUuY3h4CisrKyBiL1NvdXJjZS9jbVN0YXRlLmN4eApAQCAtMyw5ICszLDkgQEAKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KQEAgLTM0LDY5ICszNCw4NCBAQAogCiBjbVN0YXRlOjp+Y21TdGF0ZSgpID0gZGVmYXVsdDsKIAotY29uc3QgY2hhciogY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpCitjb25zdCBzdGQ6OnN0cmluZyYgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoCisgIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQogeworI2RlZmluZSBNQUtFX1NUQVRJQ19QUk9QKFBST1ApIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBwcm9wIyNQUk9QID0gI1BST1AKKyAgTUFLRV9TVEFUSUNfUFJPUChTVEFUSUNfTElCUkFSWSk7CisgIE1BS0VfU1RBVElDX1BST1AoTU9EVUxFX0xJQlJBUlkpOworICBNQUtFX1NUQVRJQ19QUk9QKFNIQVJFRF9MSUJSQVJZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChPQkpFQ1RfTElCUkFSWSk7CisgIE1BS0VfU1RBVElDX1BST1AoRVhFQ1VUQUJMRSk7CisgIE1BS0VfU1RBVElDX1BST1AoVVRJTElUWSk7CisgIE1BS0VfU1RBVElDX1BST1AoR0xPQkFMX1RBUkdFVCk7CisgIE1BS0VfU1RBVElDX1BST1AoSU5URVJGQUNFX0xJQlJBUlkpOworICBNQUtFX1NUQVRJQ19QUk9QKFVOS05PV05fTElCUkFSWSk7CisgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBwcm9wRW1wdHk7CisjdW5kZWYgTUFLRV9TVEFUSUNfUFJPUAorCiAgIHN3aXRjaCAodGFyZ2V0VHlwZSkgewogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKLSAgICAgIHJldHVybiAiU1RBVElDX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BTVEFUSUNfTElCUkFSWTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gIk1PRFVMRV9MSUJSQVJZIjsKKyAgICAgIHJldHVybiBwcm9wTU9EVUxFX0xJQlJBUlk7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgotICAgICAgcmV0dXJuICJTSEFSRURfTElCUkFSWSI7CisgICAgICByZXR1cm4gcHJvcFNIQVJFRF9MSUJSQVJZOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKLSAgICAgIHJldHVybiAiT0JKRUNUX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BPQkpFQ1RfTElCUkFSWTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKLSAgICAgIHJldHVybiAiRVhFQ1VUQUJMRSI7CisgICAgICByZXR1cm4gcHJvcEVYRUNVVEFCTEU7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6Ci0gICAgICByZXR1cm4gIlVUSUxJVFkiOworICAgICAgcmV0dXJuIHByb3BVVElMSVRZOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUOgotICAgICAgcmV0dXJuICJHTE9CQUxfVEFSR0VUIjsKKyAgICAgIHJldHVybiBwcm9wR0xPQkFMX1RBUkdFVDsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gIklOVEVSRkFDRV9MSUJSQVJZIjsKKyAgICAgIHJldHVybiBwcm9wSU5URVJGQUNFX0xJQlJBUlk7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVOS05PV05fTElCUkFSWToKLSAgICAgIHJldHVybiAiVU5LTk9XTl9MSUJSQVJZIjsKKyAgICAgIHJldHVybiBwcm9wVU5LTk9XTl9MSUJSQVJZOwogICB9CiAgIGFzc2VydChmYWxzZSAmJiAiVW5leHBlY3RlZCB0YXJnZXQgdHlwZSIpOwotICByZXR1cm4gbnVsbHB0cjsKKyAgcmV0dXJuIHByb3BFbXB0eTsKIH0KIAotY29uc3QgY2hhciogY21DYWNoZUVudHJ5VHlwZXNbXSA9IHsgIkJPT0wiLCAgICAgICAgICAiUEFUSCIsICAgICAiRklMRVBBVEgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNUUklORyIsICAgICAgICAiSU5URVJOQUwiLCAiU1RBVElDIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklOSVRJQUxJWkVEIiwgbnVsbHB0ciB9Oworc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsIDc+IGNtQ2FjaGVFbnRyeVR5cGVzID0geworICB7ICJCT09MIiwgIlBBVEgiLCAiRklMRVBBVEgiLCAiU1RSSU5HIiwgIklOVEVSTkFMIiwgIlNUQVRJQyIsCisgICAgIlVOSU5JVElBTElaRUQiIH0KK307CiAKLWNvbnN0IGNoYXIqIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcoY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlKQorY29uc3Qgc3RkOjpzdHJpbmcmIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcoCisgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdHlwZSkKIHsKLSAgaWYgKHR5cGUgPiA2KSB7Ci0gICAgcmV0dXJuIGNtQ2FjaGVFbnRyeVR5cGVzWzZdOworICBpZiAodHlwZSA8IGNtU3RhdGVFbnVtczo6Qk9PTCB8fCB0eXBlID4gY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEKSB7CisgICAgdHlwZSA9IGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRDsKICAgfQogICByZXR1cm4gY21DYWNoZUVudHJ5VHlwZXNbdHlwZV07CiB9CiAKLWNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBjaGFyKiBzKQorY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKAorICBjb25zdCBzdGQ6OnN0cmluZyYgcykKIHsKICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlID0gY21TdGF0ZUVudW1zOjpTVFJJTkc7CiAgIFN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUocywgdHlwZSk7CiAgIHJldHVybiB0eXBlOwogfQogCi1ib29sIGNtU3RhdGU6OlN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoY29uc3QgY2hhciogcywKK2Jvb2wgY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlJiB0eXBlKQogewotICBpbnQgaSA9IDA7Ci0gIHdoaWxlIChjbUNhY2hlRW50cnlUeXBlc1tpXSkgewotICAgIGlmIChzdHJjbXAocywgY21DYWNoZUVudHJ5VHlwZXNbaV0pID09IDApIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbUNhY2hlRW50cnlUeXBlcy5zaXplKCk7ICsraSkgeworICAgIGlmIChzID09IGNtQ2FjaGVFbnRyeVR5cGVzW2ldKSB7CiAgICAgICB0eXBlID0gc3RhdGljX2Nhc3Q8Y21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZT4oaSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgKytpOwogICB9CiAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBjbVN0YXRlOjpJc0NhY2hlRW50cnlUeXBlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpCiB7Ci0gIGZvciAoaW50IGkgPSAwOyBjbUNhY2hlRW50cnlUeXBlc1tpXTsgKytpKSB7Ci0gICAgaWYgKGtleSA9PSBjbUNhY2hlRW50cnlUeXBlc1tpXSkgeworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBpIDogY21DYWNoZUVudHJ5VHlwZXMpIHsKKyAgICBpZiAoa2V5ID09IGkpIHsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgfQpAQCAtMTMxLDEzICsxNDYsMjIgQEAKICAgcmV0dXJuIGRlZmluaXRpb25zOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKK2NtUHJvcCBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKIHsKICAgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnkqIGUgPSB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlRW50cnkoa2V5KTsKICAgaWYgKCFlKSB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KLSAgcmV0dXJuIGUtPlZhbHVlLmNfc3RyKCk7CisgIHJldHVybiAmZS0+VmFsdWU7Cit9CisKK3N0ZDo6c3RyaW5nIGNtU3RhdGU6OkdldFNhZmVDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKK3sKKyAgY21Qcm9wIHZhbCA9IHRoaXMtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOworICBpZiAodmFsKSB7CisgICAgcmV0dXJuICp2YWw7CisgIH0KKyAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiB9CiAKIGNvbnN0IHN0ZDo6c3RyaW5nKiBjbVN0YXRlOjpHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoCkBAIC0xNDksOCArMTczLDcgQEAKIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeVR5cGUoCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0CiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOworICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpOwogICByZXR1cm4gaXQuR2V0VHlwZSgpOwogfQogCkBAIC0xNjQsOCArMTg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOworICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpOwogICBpdC5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlLmNfc3RyKCkpOwogfQogCkBAIC0xNzMsMjQgKzE5NSwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2YWx1ZSkKIHsKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPQotICAgIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSk7CisgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7CiAgIGl0LlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOwogfQogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeVByb3BlcnR5TGlzdCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKIHsKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPQotICAgIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSk7CisgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7CiAgIHJldHVybiBpdC5HZXRQcm9wZXJ0eUxpc3QoKTsKIH0KIAotY29uc3QgY2hhciogY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BlcnR5TmFtZSkKK2NtUHJvcCBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BlcnR5TmFtZSkKIHsKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPQotICAgIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSk7CisgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7CiAgIGlmICghaXQuUHJvcGVydHlFeGlzdHMocHJvcGVydHlOYW1lKSkgewogICAgIHJldHVybiBudWxscHRyOwogICB9CkBAIC0yMDAsOCArMjE5LDggQEAKIGJvb2wgY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKQogewotICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKQotICAgIC5HZXRQcm9wZXJ0eUFzQm9vbChwcm9wZXJ0eU5hbWUpOworICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuR2V0UHJvcGVydHlBc0Jvb2woCisgICAgcHJvcGVydHlOYW1lKTsKIH0KIAogdm9pZCBjbVN0YXRlOjpBZGRDYWNoZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlLApAQCAtMjUzLDE1ICsyNzIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZykKIHsKLSAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKQotICAgIC5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUuY19zdHIoKSwgYXNTdHJpbmcpOworICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzU3RyaW5nKTsKIH0KIAogdm9pZCBjbVN0YXRlOjpSZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkKLSAgICAuU2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKKyAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuU2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKIH0KIAogY21TdGF0ZVNuYXBzaG90IGNtU3RhdGU6OlJlc2V0KCkKQEAgLTMzMCw4ICszNDgsOCBAQAogCiB2b2lkIGNtU3RhdGU6OkRlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgU2hvcnREZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbmVkKQogewogICB0aGlzLT5Qcm9wZXJ0eURlZmluaXRpb25zW3Njb3BlXS5EZWZpbmVQcm9wZXJ0eSgKICAgICBuYW1lLCBzY29wZSwgU2hvcnREZXNjcmlwdGlvbiwgRnVsbERlc2NyaXB0aW9uLCBjaGFpbmVkKTsKQEAgLTU2MiwxMyArNTgwLDEzIEBACiAgIHRoaXMtPkdsb2JhbFByb3BlcnRpZXMuU2V0UHJvcGVydHkocHJvcCwgdmFsdWUpOwogfQogCi12b2lkIGNtU3RhdGU6OkFwcGVuZEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZykKK3ZvaWQgY21TdGF0ZTo6QXBwZW5kR2xvYmFsUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZykKIHsKICAgdGhpcy0+R2xvYmFsUHJvcGVydGllcy5BcHBlbmRQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgYXNTdHJpbmcpOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkKK2NtUHJvcCBjbVN0YXRlOjpHZXRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkKIHsKICAgaWYgKHByb3AgPT0gIkNBQ0hFX1ZBUklBQkxFUyIpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY2FjaGVLZXlzID0gdGhpcy0+R2V0Q2FjaGVFbnRyeUtleXMoKTsKQEAgLTU5MiwyOCArNjEwLDQ5IEBACiAgIH0KICNkZWZpbmUgU1RSSU5HX0xJU1RfRUxFTUVOVChGKSAiOyIgI0YKICAgaWYgKHByb3AgPT0gIkNNQUtFX0NfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQzkwX0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQzkwX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0M5MF9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DOTlfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DOTlfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQzk5X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0MxMV9LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0MxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DMTFfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQ1hYX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NYWF9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DWFg5OF9LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0NYWDk4X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NYWDk4X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0NYWDExX0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQ1hYMTFfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ1hYMTFfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQ1hYMTRfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DWFgxNF9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DWFgxNF9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OworICB9CisgIGlmIChwcm9wID09ICJDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTIikgeworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DVURBX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KIAogI3VuZGVmIFNUUklOR19MSVNUX0VMRU1FTlQKQEAgLTYyMiw3ICs2NjEsOCBAQAogCiBib29sIGNtU3RhdGU6OkdldEdsb2JhbFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQogewotICByZXR1cm4gY21Jc09uKHRoaXMtPkdldEdsb2JhbFByb3BlcnR5KHByb3ApKTsKKyAgY21Qcm9wIHAgPSB0aGlzLT5HZXRHbG9iYWxQcm9wZXJ0eShwcm9wKTsKKyAgcmV0dXJuIHAgJiYgY21Jc09uKCpwKTsKIH0KIAogdm9pZCBjbVN0YXRlOjpTZXRTb3VyY2VEaXJlY3Rvcnkoc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZURpcmVjdG9yeSkKQEAgLTcxMiw2ICs3NTIsMTYgQEAKICAgcmV0dXJuIHRoaXMtPk1TWVNTaGVsbDsKIH0KIAordm9pZCBjbVN0YXRlOjpTZXROaW5qYU11bHRpKGJvb2wgbmluamFNdWx0aSkKK3sKKyAgdGhpcy0+TmluamFNdWx0aSA9IG5pbmphTXVsdGk7Cit9CisKK2Jvb2wgY21TdGF0ZTo6VXNlTmluamFNdWx0aSgpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5OaW5qYU11bHRpOworfQorCiB1bnNpZ25lZCBpbnQgY21TdGF0ZTo6R2V0Q2FjaGVNYWpvclZlcnNpb24oKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZU1ham9yVmVyc2lvbigpOwpAQCAtOTkzLDEyICsxMDQzLDEyIEBACiAgIGJvb2wgZmxhZyA9IGZhbHNlOwogICBpZiAocmVnUXVvdGVkLmZpbmQoZW50cnkpKSB7CiAgICAgdmFyID0gcmVnUXVvdGVkLm1hdGNoKDEpOwotICAgIHR5cGUgPSBjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKHJlZ1F1b3RlZC5tYXRjaCgyKS5jX3N0cigpKTsKKyAgICB0eXBlID0gY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZShyZWdRdW90ZWQubWF0Y2goMikpOwogICAgIHZhbHVlID0gcmVnUXVvdGVkLm1hdGNoKDMpOwogICAgIGZsYWcgPSB0cnVlOwogICB9IGVsc2UgaWYgKHJlZy5maW5kKGVudHJ5KSkgewogICAgIHZhciA9IHJlZy5tYXRjaCgxKTsKLSAgICB0eXBlID0gY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZShyZWcubWF0Y2goMikuY19zdHIoKSk7CisgICAgdHlwZSA9IGNtU3RhdGU6OlN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUocmVnLm1hdGNoKDIpKTsKICAgICB2YWx1ZSA9IHJlZy5tYXRjaCgzKTsKICAgICBmbGFnID0gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhdGUuaCBiL1NvdXJjZS9jbVN0YXRlLmgKaW5kZXggYTdjYTAxNS4uZTNmYmZkYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGUuaAorKysgYi9Tb3VyY2UvY21TdGF0ZS5oCkBAIC0zMCw2ICszMCw4IEBACiBjbGFzcyBjbU1lc3NlbmdlcjsKIGNsYXNzIGNtRXhlY3V0aW9uU3RhdHVzOwogCit1c2luZyBjbVByb3AgPSBjb25zdCBzdGQ6OnN0cmluZyo7CisKIGNsYXNzIGNtU3RhdGUKIHsKICAgZnJpZW5kIGNsYXNzIGNtU3RhdGVTbmFwc2hvdDsKQEAgLTUxLDcgKzUzLDggQEAKICAgICBDUGFjaywKICAgfTsKIAotICBzdGF0aWMgY29uc3QgY2hhciogR2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpOworICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIEdldFRhcmdldFR5cGVOYW1lKAorICAgIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKTsKIAogICBjbVN0YXRlU25hcHNob3QgQ3JlYXRlQmFzZVNuYXBzaG90KCk7CiAgIGNtU3RhdGVTbmFwc2hvdCBDcmVhdGVCdWlsZHN5c3RlbURpcmVjdG9yeVNuYXBzaG90KApAQCAtNzAsMTAgKzczLDEyIEBACiAgICAgY21TdGF0ZVNuYXBzaG90IGNvbnN0JiBvcmlnaW5TbmFwc2hvdCk7CiAgIGNtU3RhdGVTbmFwc2hvdCBQb3AoY21TdGF0ZVNuYXBzaG90IGNvbnN0JiBvcmlnaW5TbmFwc2hvdCk7CiAKLSAgc3RhdGljIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgU3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBjaGFyKik7Ci0gIHN0YXRpYyBib29sIFN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoY29uc3QgY2hhciosCisgIHN0YXRpYyBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIFN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmKTsKKyAgc3RhdGljIGJvb2wgU3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSYgdHlwZSk7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUpOworICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIENhY2hlRW50cnlUeXBlVG9TdHJpbmcoCisgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSk7CiAgIHN0YXRpYyBib29sIElzQ2FjaGVFbnRyeVR5cGUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSk7CiAKICAgYm9vbCBMb2FkQ2FjaGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsIGJvb2wgaW50ZXJuYWwsCkBAIC04NSw3ICs5MCw4IEBACiAgIGJvb2wgRGVsZXRlQ2FjaGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRDYWNoZUVudHJ5S2V5cygpIGNvbnN0OwotICBjb25zdCBjaGFyKiBHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3Q7CisgIGNtUHJvcCBHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldFNhZmVDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3Q7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3Q7CiAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgR2V0Q2FjaGVFbnRyeVR5cGUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3Q7CiAgIHZvaWQgU2V0Q2FjaGVFbnRyeVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSk7CkBAIC05OSw4ICsxMDUsOCBAQAogICB2b2lkIFNldENhY2hlRW50cnlCb29sUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUsIGJvb2wgdmFsdWUpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q2FjaGVFbnRyeVByb3BlcnR5TGlzdChzdGQ6OnN0cmluZyBjb25zdCYga2V5KTsKLSAgY29uc3QgY2hhciogR2V0Q2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKTsKKyAgY21Qcm9wIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpOwogICBib29sIEdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKTsKICAgdm9pZCBBcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKQEAgLTExOCw4ICsxMjQsOCBAQAogICBjbVN0YXRlU25hcHNob3QgUmVzZXQoKTsKICAgLy8gRGVmaW5lIGEgcHJvcGVydHkKICAgdm9pZCBEZWZpbmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBTaG9ydERlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBGdWxsRGVzY3JpcHRpb24sIGJvb2wgY2hhaW4gPSBmYWxzZSk7CiAKICAgLy8gZ2V0IHByb3BlcnR5IGRlZmluaXRpb24KICAgY21Qcm9wZXJ0eURlZmluaXRpb24gY29uc3QqIEdldFByb3BlcnR5RGVmaW5pdGlvbigKQEAgLTE2Niw5ICsxNzIsOSBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q29tbWFuZE5hbWVzKCkgY29uc3Q7CiAKICAgdm9pZCBTZXRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIEFwcGVuZEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKKyAgdm9pZCBBcHBlbmRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7Ci0gIGNvbnN0IGNoYXIqIEdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKTsKKyAgY21Qcm9wIEdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKTsKICAgYm9vbCBHZXRHbG9iYWxQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CiAKICAgc3RkOjpzdHJpbmcgY29uc3QmIEdldFNvdXJjZURpcmVjdG9yeSgpIGNvbnN0OwpAQCAtMTkwLDYgKzE5Niw4IEBACiAgIGJvb2wgVXNlTk1ha2UoKSBjb25zdDsKICAgdm9pZCBTZXRNU1lTU2hlbGwoYm9vbCBtU1lTU2hlbGwpOwogICBib29sIFVzZU1TWVNTaGVsbCgpIGNvbnN0OworICB2b2lkIFNldE5pbmphTXVsdGkoYm9vbCBuaW5qYU11bHRpKTsKKyAgYm9vbCBVc2VOaW5qYU11bHRpKCkgY29uc3Q7CiAKICAgdW5zaWduZWQgaW50IEdldENhY2hlTWFqb3JWZXJzaW9uKCkgY29uc3Q7CiAgIHVuc2lnbmVkIGludCBHZXRDYWNoZU1pbm9yVmVyc2lvbigpIGNvbnN0OwpAQCAtMjQ1LDYgKzI1Myw3IEBACiAgIGJvb2wgTWluR1dNYWtlID0gZmFsc2U7CiAgIGJvb2wgTk1ha2UgPSBmYWxzZTsKICAgYm9vbCBNU1lTU2hlbGwgPSBmYWxzZTsKKyAgYm9vbCBOaW5qYU11bHRpID0gZmFsc2U7CiAgIE1vZGUgQ3VycmVudE1vZGUgPSBVbmtub3duOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuY3h4IGIvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuY3h4CmluZGV4IDEyNjJmNTMuLmE0ZmU2NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmN4eAorKysgYi9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5jeHgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8Y20vaXRlcmF0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgpAQCAtNTIwLDcgKzUyMSw3IEBACiB9CiAKIHZvaWQgY21TdGF0ZURpcmVjdG9yeTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLCBib29sIGFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGxmYnQpCiB7CiAgIGlmIChwcm9wID09ICJJTkNMVURFX0RJUkVDVE9SSUVTIikgewpAQCAtNTQ3LDMyICs1NDgsMzEgQEAKICAgdGhpcy0+RGlyZWN0b3J5U3RhdGUtPlByb3BlcnRpZXMuQXBwZW5kUHJvcGVydHkocHJvcCwgdmFsdWUsIGFzU3RyaW5nKTsKIH0KIAotY29uc3QgY2hhciogY21TdGF0ZURpcmVjdG9yeTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitjbVByb3AgY21TdGF0ZURpcmVjdG9yeTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CiB7CiAgIGNvbnN0IGJvb2wgY2hhaW4gPQogICAgIHRoaXMtPlNuYXBzaG90Xy5TdGF0ZS0+SXNQcm9wZXJ0eUNoYWluZWQocHJvcCwgY21Qcm9wZXJ0eTo6RElSRUNUT1JZKTsKICAgcmV0dXJuIHRoaXMtPkdldFByb3BlcnR5KHByb3AsIGNoYWluKTsKIH0KIAotY29uc3QgY2hhciogY21TdGF0ZURpcmVjdG9yeTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNoYWluKSBjb25zdAorY21Qcm9wIGNtU3RhdGVEaXJlY3Rvcnk6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBib29sIGNoYWluKSBjb25zdAogewogICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICBvdXRwdXQuY2xlYXIoKTsKICAgaWYgKHByb3AgPT0gIlBBUkVOVF9ESVJFQ1RPUlkiKSB7CiAgICAgY21TdGF0ZVNuYXBzaG90IHBhcmVudCA9IHRoaXMtPlNuYXBzaG90Xy5HZXRCdWlsZHN5c3RlbURpcmVjdG9yeVBhcmVudCgpOwogICAgIGlmIChwYXJlbnQuSXNWYWxpZCgpKSB7Ci0gICAgICByZXR1cm4gcGFyZW50LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKS5jX3N0cigpOworICAgICAgcmV0dXJuICZwYXJlbnQuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudFNvdXJjZSgpOwogICAgIH0KLSAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0ga0JJTkFSWV9ESVIpIHsKICAgICBvdXRwdXQgPSB0aGlzLT5HZXRDdXJyZW50QmluYXJ5KCk7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09IGtTT1VSQ0VfRElSKSB7CiAgICAgb3V0cHV0ID0gdGhpcy0+R2V0Q3VycmVudFNvdXJjZSgpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSBrU1VCRElSRUNUT1JJRVMpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY2hpbGRfZGlyczsKQEAgLTU4MywxMSArNTgzLDExIEBACiAgICAgICBjaGlsZF9kaXJzLnB1c2hfYmFjayhjaS5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkpOwogICAgIH0KICAgICBvdXRwdXQgPSBjbUpvaW4oY2hpbGRfZGlycywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0ga0JVSUxEU1lTVEVNX1RBUkdFVFMpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+RGlyZWN0b3J5U3RhdGUtPk5vcm1hbFRhcmdldE5hbWVzLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogCiAgIGlmIChwcm9wID09ICJMSVNURklMRV9TVEFDSyIpIHsKQEAgLTU5OSw0MSArNTk5LDQxIEBACiAgICAgfQogICAgIHN0ZDo6cmV2ZXJzZShsaXN0RmlsZXMuYmVnaW4oKSwgbGlzdEZpbGVzLmVuZCgpKTsKICAgICBvdXRwdXQgPSBjbUpvaW4obGlzdEZpbGVzLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ0FDSEVfVkFSSUFCTEVTIikgewogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5TbmFwc2hvdF8uU3RhdGUtPkdldENhY2hlRW50cnlLZXlzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJWQVJJQUJMRVMiKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlcyA9IHRoaXMtPlNuYXBzaG90Xy5DbG9zdXJlS2V5cygpOwotICAgIGNtQXBwZW5kKHJlcywgdGhpcy0+U25hcHNob3RfLlN0YXRlLT5HZXRDYWNoZUVudHJ5S2V5cygpKTsKKyAgICBjbTo6YXBwZW5kKHJlcywgdGhpcy0+U25hcHNob3RfLlN0YXRlLT5HZXRDYWNoZUVudHJ5S2V5cygpKTsKICAgICBzdGQ6OnNvcnQocmVzLmJlZ2luKCksIHJlcy5lbmQoKSk7CiAgICAgb3V0cHV0ID0gY21Kb2luKHJlcywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIklOQ0xVREVfRElSRUNUT1JJRVMiKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkdldEluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMoKSwgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNPTVBJTEVfT1BUSU9OUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+R2V0Q29tcGlsZU9wdGlvbnNFbnRyaWVzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJDT01QSUxFX0RFRklOSVRJT05TIikgewogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5HZXRDb21waWxlRGVmaW5pdGlvbnNFbnRyaWVzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJMSU5LX09QVElPTlMiKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkdldExpbmtPcHRpb25zRW50cmllcygpLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSAiTElOS19ESVJFQ1RPUklFUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+R2V0TGlua0RpcmVjdG9yaWVzRW50cmllcygpLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHJldFZhbCA9IHRoaXMtPkRpcmVjdG9yeVN0YXRlLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSB0aGlzLT5EaXJlY3RvcnlTdGF0ZS0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICBpZiAoIXJldFZhbCAmJiBjaGFpbikgewogICAgIGNtU3RhdGVTbmFwc2hvdCBwYXJlbnRTbmFwc2hvdCA9CiAgICAgICB0aGlzLT5TbmFwc2hvdF8uR2V0QnVpbGRzeXN0ZW1EaXJlY3RvcnlQYXJlbnQoKTsKQEAgLTY0OCw3ICs2NDgsOCBAQAogCiBib29sIGNtU3RhdGVEaXJlY3Rvcnk6OkdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAogewotICByZXR1cm4gY21Jc09uKHRoaXMtPkdldFByb3BlcnR5KHByb3ApKTsKKyAgY21Qcm9wIHAgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgcmV0dXJuIHAgJiYgY21Jc09uKCpwKTsKIH0KIAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtU3RhdGVEaXJlY3Rvcnk6OkdldFByb3BlcnR5S2V5cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5oIGIvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuaAppbmRleCBmZTE1NTYzLi44MTQ0MTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5oCisrKyBiL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKIAordXNpbmcgY21Qcm9wID0gY29uc3Qgc3RkOjpzdHJpbmcqOworCiBjbGFzcyBjbVN0YXRlRGlyZWN0b3J5CiB7CiAgIGNtU3RhdGVEaXJlY3RvcnkoCkBAIC04NCwxMCArODYsMTAgQEAKIAogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nLCBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3Q7CiAgIGJvb2wgR2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0UHJvcGVydHlLZXlzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuY3h4IGIvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5jeHgKaW5kZXggNjQ1OTA3Yy4uZDc5ZGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5jeHgKKysrIGIvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5jeHgKQEAgLTMxNSwxMCArMzE1LDE0IEBACiAgIHRoaXMtPlNldERlZmluaXRpb24oIlVOSVgiLCAiMSIpOwogICB0aGlzLT5TZXREZWZpbml0aW9uKCJDTUFLRV9IT1NUX1VOSVgiLCAiMSIpOwogCisjICBpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorICB0aGlzLT5TZXREZWZpbml0aW9uKCJDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIiwgIkFuZHJvaWQiKTsKKyMgIGVsc2UKICAgc3RydWN0IHV0c25hbWUgdXRzX25hbWU7CiAgIGlmICh1bmFtZSgmdXRzX25hbWUpID49IDApIHsKICAgICB0aGlzLT5TZXREZWZpbml0aW9uKCJDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIiwgdXRzX25hbWUuc3lzbmFtZSk7CiAgIH0KKyMgIGVuZGlmCiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCiAgIHN0ZDo6c3RyaW5nIGxlZ2FjeTsKQEAgLTQwNywxMSArNDExLDEyIEBACiAgICAgdGhpcy0+UG9zaXRpb24tPkJ1aWxkU3lzdGVtRGlyZWN0b3J5LT5MaW5rRGlyZWN0b3JpZXNCYWNrdHJhY2VzLAogICAgIHRoaXMtPlBvc2l0aW9uLT5MaW5rRGlyZWN0b3JpZXNQb3NpdGlvbik7CiAKLSAgY29uc3QgY2hhciogaW5jbHVkZV9yZWdleCA9CisgIGNtUHJvcCBpbmNsdWRlX3JlZ2V4ID0KICAgICBwYXJlbnQtPkJ1aWxkU3lzdGVtRGlyZWN0b3J5LT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUoCiAgICAgICAiSU5DTFVERV9SRUdVTEFSX0VYUFJFU1NJT04iKTsKICAgdGhpcy0+UG9zaXRpb24tPkJ1aWxkU3lzdGVtRGlyZWN0b3J5LT5Qcm9wZXJ0aWVzLlNldFByb3BlcnR5KAotICAgICJJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTiIsIGluY2x1ZGVfcmVnZXgpOworICAgICJJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTiIsCisgICAgaW5jbHVkZV9yZWdleCA/IGluY2x1ZGVfcmVnZXgtPmNfc3RyKCkgOiBudWxscHRyKTsKIH0KIAogY21TdGF0ZSogY21TdGF0ZVNuYXBzaG90OjpHZXRTdGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdHJpbmcuaHh4IGIvU291cmNlL2NtU3RyaW5nLmh4eAppbmRleCAwNzNmNGM5Li45ZTkxOTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdHJpbmcuaHh4CisrKyBiL1NvdXJjZS9jbVN0cmluZy5oeHgKQEAgLTg4LDE4ICs4OCw2IEBACiB9OwogCiB0ZW1wbGF0ZSA8Pgotc3RydWN0IEludG9TdHJpbmc8c3RyaW5nX3ZpZXc+IDogc3RkOjp0cnVlX3R5cGUKLXsKLSAgc3RhdGljIHN0ZDo6c3RyaW5nIGludG9fc3RyaW5nKHN0cmluZ192aWV3IHMpIHsgcmV0dXJuIHN0ZDo6c3RyaW5nKHMpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludG9TdHJpbmc8c3RhdGljX3N0cmluZ192aWV3PiA6IHN0ZDo6dHJ1ZV90eXBlCi17Ci0gIHN0YXRpYyBzdHJpbmdfdmlldyBpbnRvX3N0cmluZyhzdGF0aWNfc3RyaW5nX3ZpZXcgcykgeyByZXR1cm4gczsgfQotfTsKLQotdGVtcGxhdGUgPD4KIHN0cnVjdCBJbnRvU3RyaW5nPGNoYXI+IDogc3RkOjp0cnVlX3R5cGUKIHsKICAgc3RhdGljIHN0ZDo6c3RyaW5nIGludG9fc3RyaW5nKGNoYXIgY29uc3QmIGMpIHsgcmV0dXJuIHN0ZDo6c3RyaW5nKDEsIGMpOyB9CkBAIC0yMzksNiArMjI3LDI1IEBACiAgIHsKICAgfQogCisgIC8qKgorICAgKiBDb25zdHJ1Y3QgdmlhIHN0YXRpY19zdHJpbmdfdmlldyBjb25zdHJ1Y3Rvci4KKyAgICogZXhwbGljaXQgaXMgcmVxdWlyZWQgdG8gYXZvaWQgYW1iaWd1b3VzIG92ZXJsb2FkZWQgb3BlcmF0b3JzIChpLmUgPT0sCisgICAqIGV0Yy4uLikgd2l0aCB0aGUgb25lcyBwcm92aWRlZCBieSBzdHJpbmdfdmlldy4KKyAgICovCisgIGV4cGxpY2l0IFN0cmluZyhzdGF0aWNfc3RyaW5nX3ZpZXcgcykKKyAgICA6IFN0cmluZyhzLCBQcml2YXRlKCkpCisgIHsKKyAgfQorICAvKioKKyAgICogQ29uc3RydWN0IHZpYSBzdHJpbmdfdmlldyBjb25zdHJ1Y3Rvci4KKyAgICogZXhwbGljaXQgaXMgcmVxdWlyZWQgdG8gYXZvaWQgYW1iaWd1b3VzIG92ZXJsb2FkZWQgb3BlcmF0b3JzIChpLmUgPT0sCisgICAqIGV0Yy4uLikgd2l0aCB0aGUgb25lcyBwcm92aWRlZCBieSBzdHJpbmdfdmlldy4KKyAgICovCisgIGV4cGxpY2l0IFN0cmluZyhzdHJpbmdfdmlldyBzKQorICAgIDogU3RyaW5nKHN0ZDo6c3RyaW5nKHMpLCBQcml2YXRlKCkpCisgIHsKKyAgfQorCiAgIC8qKiBDb25zdHJ1Y3QgdmlhIHN0ZDo6c3RyaW5nIGluaXRpYWxpemVyIGxpc3QgY29uc3RydWN0b3IuICAqLwogICBTdHJpbmcoc3RkOjppbml0aWFsaXplcl9saXN0PGNoYXI+IGlsKQogICAgIDogU3RyaW5nKHN0ZDo6c3RyaW5nKGlsKSkKQEAgLTMwNiw2ICszMTMsMTcgQEAKICAgICAgIFRoaXMgc2hhcmVzIG93bmVyc2hpcCBvZiB0aGUgb3RoZXIgc3RyaW5nJ3MgYnVmZmVyLiAgKi8KICAgU3RyaW5nJiBvcGVyYXRvcj0oU3RyaW5nIGNvbnN0Jikgbm9leGNlcHQgPSBkZWZhdWx0OwogCisgIFN0cmluZyYgb3BlcmF0b3I9KHN0YXRpY19zdHJpbmdfdmlldyBzKQorICB7CisgICAgKnRoaXMgPSBTdHJpbmcocyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIFN0cmluZyYgb3BlcmF0b3I9KHN0cmluZ192aWV3IHMpCisgIHsKKyAgICAqdGhpcyA9IFN0cmluZyhzKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKwogICAvKiogQXNzaWduIGZyb20gYW55IHR5cGUgaW1wbGVtZW50aW5nIHRoZSBJbnRvU3RyaW5nIHRyYWl0LiAgKi8KICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgIHR5cGVuYW1lIC8vIE5PTElOVCgqKQpAQCAtMzI4LDYgKzM0Niw3IEBACiAKICAgLyoqIFJldHVybiBhIHZpZXcgb2YgdGhlIHN0cmluZy4gICovCiAgIHN0cmluZ192aWV3IHZpZXcoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiB2aWV3XzsgfQorICBvcGVyYXRvciBzdHJpbmdfdmlldygpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHRoaXMtPnZpZXcoKTsgfQogCiAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW5zdGFuY2UgaXMgYW4gZW1wdHkgc3RyaW5nbiBvciBudWxsIHN0cmluZy4gICovCiAgIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiB2aWV3Xy5lbXB0eSgpOyB9CkBAIC02MzgsNTggKzY1NywxNTUgQEAKICAgc3RyaW5nX3ZpZXcgdmlld187CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTCwgdHlwZW5hbWUgUj4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEFzU3RyaW5nVmlldzxMPjo6dmFsdWUgJiYgQXNTdHJpbmdWaWV3PFI+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+Ojp0eXBlCi1vcGVyYXRvcj09KEwmJiBsLCBSJiYgcikKKy8qKgorICogVHJhaXQgZm9yIGNvbXBhcmFibGUgdHlwZXMuCisgKi8KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IElzQ29tcGFyYWJsZSA6IHN0ZDo6ZmFsc2VfdHlwZQogewotICByZXR1cm4gKEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpID09Ci0gICAgICAgICAgQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSkpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSXNDb21wYXJhYmxlPFQmPiA6IElzQ29tcGFyYWJsZTxUPgoreworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSXNDb21wYXJhYmxlPFQgY29uc3Q+IDogSXNDb21wYXJhYmxlPFQ+Cit7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBJc0NvbXBhcmFibGU8VCBjb25zdCo+IDogSXNDb21wYXJhYmxlPFQqPgoreworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgTj4KK3N0cnVjdCBJc0NvbXBhcmFibGU8VCBjb25zdFtOXT4gOiBJc0NvbXBhcmFibGU8VFtOXT4KK3sKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSXNDb21wYXJhYmxlPGNoYXIqPiA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworCit0ZW1wbGF0ZSA8c3RkOjpzdHJpbmc6OnNpemVfdHlwZSBOPgorc3RydWN0IElzQ29tcGFyYWJsZTxjaGFyW05dPiA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IElzQ29tcGFyYWJsZTxzdGQ6OnN0cmluZz4gOiBzdGQ6OnRydWVfdHlwZQoreworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJc0NvbXBhcmFibGU8Y2hhcj4gOiBzdGQ6OnRydWVfdHlwZQoreworfTsKKworLyoqIGNvbXBhcmlzb24gb3BlcmF0b3JzICovCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYgbCwgY29uc3QgU3RyaW5nJiByKQoreworICByZXR1cm4gbC52aWV3KCkgPT0gci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxMPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yPT0oCisgIEwmJiBsLCBjb25zdCBTdHJpbmcmIHIpCit7CisgIHJldHVybiBBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA9PSByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBSPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPFI+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I9PSgKKyAgY29uc3QgU3RyaW5nJiBsLCBSJiYgcikKK3sKKyAgcmV0dXJuIGwudmlldygpID09IEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTCwgdHlwZW5hbWUgUj4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEFzU3RyaW5nVmlldzxMPjo6dmFsdWUgJiYgQXNTdHJpbmdWaWV3PFI+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+Ojp0eXBlCi1vcGVyYXRvciE9KEwmJiBsLCBSJiYgcikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBsLCBjb25zdCBTdHJpbmcmIHIpCiB7Ci0gIHJldHVybiAoQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgIT0KLSAgICAgICAgICBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKSk7CisgIHJldHVybiBsLnZpZXcoKSAhPSByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBMPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPEw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3IhPSgKKyAgTCYmIGwsIGNvbnN0IFN0cmluZyYgcikKK3sKKyAgcmV0dXJuIEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpICE9IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFI+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8Uj46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvciE9KAorICBjb25zdCBTdHJpbmcmIGwsIFImJiByKQoreworICByZXR1cm4gbC52aWV3KCkgIT0gQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMLCB0eXBlbmFtZSBSPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QXNTdHJpbmdWaWV3PEw+Ojp2YWx1ZSAmJiBBc1N0cmluZ1ZpZXc8Uj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD46OnR5cGUKLW9wZXJhdG9yPChMJiYgbCwgUiYmIHIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3RyaW5nJiBsLCBjb25zdCBTdHJpbmcmIHIpCiB7Ci0gIHJldHVybiAoQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgPAotICAgICAgICAgIEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpKTsKKyAgcmV0dXJuIGwudmlldygpIDwgci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxMPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yPCgKKyAgTCYmIGwsIGNvbnN0IFN0cmluZyYgcikKK3sKKyAgcmV0dXJuIEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpIDwgci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxSPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yPCgKKyAgY29uc3QgU3RyaW5nJiBsLCBSJiYgcikKK3sKKyAgcmV0dXJuIGwudmlldygpIDwgQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMLCB0eXBlbmFtZSBSPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QXNTdHJpbmdWaWV3PEw+Ojp2YWx1ZSAmJiBBc1N0cmluZ1ZpZXc8Uj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD46OnR5cGUKLW9wZXJhdG9yPD0oTCYmIGwsIFImJiByKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBTdHJpbmcmIGwsIGNvbnN0IFN0cmluZyYgcikKIHsKLSAgcmV0dXJuIChBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA8PQotICAgICAgICAgIEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpKTsKKyAgcmV0dXJuIGwudmlldygpIDw9IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEw+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8TD46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvcjw9KAorICBMJiYgbCwgY29uc3QgU3RyaW5nJiByKQoreworICByZXR1cm4gQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgPD0gci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxSPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yPD0oCisgIGNvbnN0IFN0cmluZyYgbCwgUiYmIHIpCit7CisgIHJldHVybiBsLnZpZXcoKSA8PSBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEwsIHR5cGVuYW1lIFI+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxBc1N0cmluZ1ZpZXc8TD46OnZhbHVlICYmIEFzU3RyaW5nVmlldzxSPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sPjo6dHlwZQotb3BlcmF0b3I+KEwmJiBsLCBSJiYgcikKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBTdHJpbmcmIGwsIGNvbnN0IFN0cmluZyYgcikKIHsKLSAgcmV0dXJuIChBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA+Ci0gICAgICAgICAgQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSkpOworICByZXR1cm4gbC52aWV3KCkgPiByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBMPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPEw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I+KAorICBMJiYgbCwgY29uc3QgU3RyaW5nJiByKQoreworICByZXR1cm4gQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgPiByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBSPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPFI+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I+KAorICBjb25zdCBTdHJpbmcmIGwsIFImJiByKQoreworICByZXR1cm4gbC52aWV3KCkgPiBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEwsIHR5cGVuYW1lIFI+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxBc1N0cmluZ1ZpZXc8TD46OnZhbHVlICYmIEFzU3RyaW5nVmlldzxSPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sPjo6dHlwZQotb3BlcmF0b3I+PShMJiYgbCwgUiYmIHIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFN0cmluZyYgbCwgY29uc3QgU3RyaW5nJiByKQogewotICByZXR1cm4gKEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpID49Ci0gICAgICAgICAgQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSkpOworICByZXR1cm4gbC52aWV3KCkgPj0gci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxMPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yPj0oCisgIEwmJiBsLCBjb25zdCBTdHJpbmcmIHIpCit7CisgIHJldHVybiBBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA+PSByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBSPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPFI+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I+PSgKKyAgY29uc3QgU3RyaW5nJiBsLCBSJiYgcikKK3sKKyAgcmV0dXJuIGwudmlldygpID49IEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpOwogfQogCiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgU3RyaW5nIGNvbnN0JiBzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0cmluZ0NvbW1hbmQuY3h4IGIvU291cmNlL2NtU3RyaW5nQ29tbWFuZC5jeHgKaW5kZXggOTIxMjE5NS4uNzY2MjIwNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RyaW5nQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU3RyaW5nQ29tbWFuZC5jeHgKQEAgLTEyNCw2ICsxMjQsMjcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSGFuZGxlSGV4Q29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKK3sKKyAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGF1dG8gY29uc3QmIGluc3RyID0gYXJnc1sxXTsKKyAgYXV0byBjb25zdCYgb3V0dmFyID0gYXJnc1syXTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0KGluc3RyLnNpemUoKSAqIDIsICcgJyk7CisKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBoZXhJbmRleCA9IDA7CisgIGZvciAoYXV0byBjb25zdCYgYyA6IGluc3RyKSB7CisgICAgc3ByaW50Zigmb3V0cHV0W2hleEluZGV4XSwgIiUuMngiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSAmIDB4RkYpOworICAgIGhleEluZGV4ICs9IDI7CisgIH0KKworICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGREZWZpbml0aW9uKG91dHZhciwgb3V0cHV0KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSGFuZGxlQ29uZmlndXJlQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKIHsKQEAgLTkzNiw2ICs5NTcsNyBAQAogICAgIHsgIlRPVVBQRVIiX3MsIEhhbmRsZVRvVXBwZXJDb21tYW5kIH0sCiAgICAgeyAiQ09NUEFSRSJfcywgSGFuZGxlQ29tcGFyZUNvbW1hbmQgfSwKICAgICB7ICJBU0NJSSJfcywgSGFuZGxlQXNjaWlDb21tYW5kIH0sCisgICAgeyAiSEVYIl9zLCBIYW5kbGVIZXhDb21tYW5kIH0sCiAgICAgeyAiQ09ORklHVVJFIl9zLCBIYW5kbGVDb25maWd1cmVDb21tYW5kIH0sCiAgICAgeyAiTEVOR1RIIl9zLCBIYW5kbGVMZW5ndGhDb21tYW5kIH0sCiAgICAgeyAiQVBQRU5EIl9zLCBIYW5kbGVBcHBlbmRDb21tYW5kIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHggYi9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHgKaW5kZXggYzRhNDIyMC4uZDI5MGMwYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3lzdGVtVG9vbHMuY3h4CisrKyBiL1NvdXJjZS9jbVN5c3RlbVRvb2xzLmN4eApAQCAtMSwxMCArMSwyMSBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8vIFBPU0lYIEFQSXMgYXJlIG5lZWRlZAorIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisvLyBGb3IgaXNhc2NpaQorIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNzAwCisjZW5kaWYKKwogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtX3V2LmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzT3V0cHV0LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgpAQCAtMjQsNiArMzUsOSBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyMgICAgaW5jbHVkZSA8Y20vbWVtb3J5PgorIyAgZW5kaWYKICMgIGluY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgogI2VuZGlmCiAKQEAgLTM2MCw3ICszNzQsNyBAQAogI2Vsc2UKICAgICAgICAgY21TeXN0ZW1Ub29sczo6UGFyc2VVbml4Q29tbWFuZExpbmUobGluZS5jX3N0cigpLCBhcmdzMik7CiAjZW5kaWYKLSAgICAgICAgY21BcHBlbmQoYXJnX2Z1bGwsIGFyZ3MyKTsKKyAgICAgICAgY206OmFwcGVuZChhcmdfZnVsbCwgYXJnczIpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBhcmdfZnVsbC5wdXNoX2JhY2soYXJnKTsKQEAgLTU4NSw3ICs1OTksNyBAQAogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChzdHJkYXRhKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2FwdHVyZVN0ZE91dCkgewotICAgICAgICAgIGNtQXBwZW5kKHRlbXBTdGRPdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgICAgIGNtOjphcHBlbmQodGVtcFN0ZE91dCwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSBpZiAocGlwZSA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERFUlIpIHsKICAgICAgICAgaWYgKG91dHB1dGZsYWcgIT0gT1VUUFVUX05PTkUpIHsKQEAgLTU5Myw3ICs2MDcsNyBAQAogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZGVycihzdHJkYXRhKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2FwdHVyZVN0ZEVycikgewotICAgICAgICAgIGNtQXBwZW5kKHRlbXBTdGRFcnIsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgICAgIGNtOjphcHBlbmQodGVtcFN0ZEVyciwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC04MTQsNiArODI4LDggQEAKICMgIGVsc2UKICAgX2Ztb2RlID0gX09fVEVYVDsKICMgIGVuZGlmCisgIC8vIFJlcGxhY2UgbGlidXYncyByZXBvcnQgaGFuZGxlciB3aXRoIG91ciBvd24gdG8gc3VwcHJlc3MgcG9wdXBzLgorICBjbVN5c3RlbVRvb2xzOjpFbmFibGVNU1ZDRGVidWdIb29rKCk7CiAjZW5kaWYKIH0KIApAQCAtOTA1LDcgKzkyMSw2IEBACiAgIHN0ZDo6c3RyaW5nIHRodW1icHJpbnQ7CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApICYmIGRlZmluZWQoX1dJTjMyKQotICBCWVRFKiBjZXJ0RGF0YSA9IE5VTEw7CiAgIENSWVBUX0lOVEVHRVJfQkxPQiBjcnlwdEJsb2I7CiAgIEhDRVJUU1RPUkUgY2VydFN0b3JlID0gTlVMTDsKICAgUENDRVJUX0NPTlRFWFQgY2VydENvbnRleHQgPSBOVUxMOwpAQCAtOTE3LDEyICs5MzIsMTIgQEAKICAgaWYgKGNlcnRGaWxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFICYmIGNlcnRGaWxlICE9IE5VTEwpIHsKICAgICBEV09SRCBmaWxlU2l6ZSA9IEdldEZpbGVTaXplKGNlcnRGaWxlLCBOVUxMKTsKICAgICBpZiAoZmlsZVNpemUgIT0gSU5WQUxJRF9GSUxFX1NJWkUpIHsKLSAgICAgIGNlcnREYXRhID0gbmV3IEJZVEVbZmlsZVNpemVdOworICAgICAgYXV0byBjZXJ0RGF0YSA9IGNtOjptYWtlX3VuaXF1ZTxCWVRFW10+KGZpbGVTaXplKTsKICAgICAgIGlmIChjZXJ0RGF0YSAhPSBOVUxMKSB7CiAgICAgICAgIERXT1JEIGR3UmVhZCA9IDA7Ci0gICAgICAgIGlmIChSZWFkRmlsZShjZXJ0RmlsZSwgY2VydERhdGEsIGZpbGVTaXplLCAmZHdSZWFkLCBOVUxMKSkgeworICAgICAgICBpZiAoUmVhZEZpbGUoY2VydEZpbGUsIGNlcnREYXRhLmdldCgpLCBmaWxlU2l6ZSwgJmR3UmVhZCwgTlVMTCkpIHsKICAgICAgICAgICBjcnlwdEJsb2IuY2JEYXRhID0gZmlsZVNpemU7Ci0gICAgICAgICAgY3J5cHRCbG9iLnBiRGF0YSA9IGNlcnREYXRhOworICAgICAgICAgIGNyeXB0QmxvYi5wYkRhdGEgPSBjZXJ0RGF0YS5nZXQoKTsKIAogICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBjZXJ0CiAgICAgICAgICAgaWYgKFBGWElzUEZYQmxvYigmY3J5cHRCbG9iKSkgewpAQCAtOTU4LDcgKzk3Myw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZVtdIGNlcnREYXRhOwogICAgICAgfQogICAgIH0KICAgICBDbG9zZUhhbmRsZShjZXJ0RmlsZSk7CkBAIC0xMDUxLDggKzEwNjUsNyBAQAogICAgICAgICBpZiAodHlwZSA8IDAgJiYgIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShmbmFtZSkpIHsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2ZuYW1lLnNpemUoKSA+PSBwcGF0aC5zaXplKCkgJiYKLSAgICAgICAgICAgIHNmbmFtZS5zdWJzdHIoMCwgcHBhdGguc2l6ZSgpKSA9PSBwcGF0aCkgeworICAgICAgICBpZiAoY21IYXNQcmVmaXgoc2ZuYW1lLCBwcGF0aCkpIHsKICAgICAgICAgICBmaWxlcy5wdXNoX2JhY2soZm5hbWUpOwogICAgICAgICAgIHJlcyA9IHRydWU7CiAgICAgICAgIH0KQEAgLTE3MTAsMjYgKzE3MjMsMjYgQEAKICAgICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEsIDEpOwogICAgICAgLy8gQXBwZW5kIHRvIHRoZSBzdGRvdXQgYnVmZmVyLgogICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj46OnNpemVfdHlwZSBzaXplID0gb3V0LnNpemUoKTsKLSAgICAgIGNtQXBwZW5kKG91dCwgc3RyZGF0YSk7CisgICAgICBjbTo6YXBwZW5kKG91dCwgc3RyZGF0YSk7CiAgICAgICBvdXRpdGVyID0gb3V0LmJlZ2luKCkgKyBzaXplOwogICAgIH0gZWxzZSBpZiAocGlwZSA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERFUlIpIHsKICAgICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEsIDIpOwogICAgICAgLy8gQXBwZW5kIHRvIHRoZSBzdGRlcnIgYnVmZmVyLgogICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj46OnNpemVfdHlwZSBzaXplID0gZXJyLnNpemUoKTsKLSAgICAgIGNtQXBwZW5kKGVyciwgc3RyZGF0YSk7CisgICAgICBjbTo6YXBwZW5kKGVyciwgc3RyZGF0YSk7CiAgICAgICBlcnJpdGVyID0gZXJyLmJlZ2luKCkgKyBzaXplOwogICAgIH0gZWxzZSBpZiAocGlwZSA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9Ob25lKSB7CiAgICAgICAvLyBCb3RoIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIGhhdmUgYnJva2VuLiAgUmV0dXJuIGxlZnRvdmVyIGRhdGEuCiAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMSk7CiAgICAgICBpZiAoIXN0cmRhdGEuZW1wdHkoKSkgewogICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPjo6c2l6ZV90eXBlIHNpemUgPSBvdXQuc2l6ZSgpOwotICAgICAgICBjbUFwcGVuZChvdXQsIHN0cmRhdGEpOworICAgICAgICBjbTo6YXBwZW5kKG91dCwgc3RyZGF0YSk7CiAgICAgICAgIG91dGl0ZXIgPSBvdXQuYmVnaW4oKSArIHNpemU7CiAgICAgICB9CiAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMik7CiAgICAgICBpZiAoIXN0cmRhdGEuZW1wdHkoKSkgewogICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPjo6c2l6ZV90eXBlIHNpemUgPSBlcnIuc2l6ZSgpOwotICAgICAgICBjbUFwcGVuZChlcnIsIHN0cmRhdGEpOworICAgICAgICBjbTo6YXBwZW5kKGVyciwgc3RyZGF0YSk7CiAgICAgICAgIGVycml0ZXIgPSBlcnIuYmVnaW4oKSArIHNpemU7CiAgICAgICB9CiAgICAgICBpZiAoIW91dC5lbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXQuY3h4IGIvU291cmNlL2NtVGFyZ2V0LmN4eAppbmRleCA4MDk4NmZjLi45M2MxNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXQuY3h4CisrKyBiL1NvdXJjZS9jbVRhcmdldC5jeHgKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIApAQCAtMzgsMTMgKzM5LDEzIEBACiAjaW5jbHVkZSAiY21ha2UuaCIKIAogdGVtcGxhdGUgPD4KLWNvbnN0IGNoYXIqIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6Q29tcHV0ZUxvY2F0aW9uRm9yQnVpbGQ8Y21UYXJnZXQ+KAorY29uc3Qgc3RkOjpzdHJpbmcmIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6Q29tcHV0ZUxvY2F0aW9uRm9yQnVpbGQ8Y21UYXJnZXQ+KAogICBjbVRhcmdldCBjb25zdCogdGd0KQogewogICBzdGF0aWMgc3RkOjpzdHJpbmcgbG9jOwogICBpZiAodGd0LT5Jc0ltcG9ydGVkKCkpIHsKICAgICBsb2MgPSB0Z3QtPkltcG9ydGVkR2V0RnVsbFBhdGgoIiIsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KTsKLSAgICByZXR1cm4gbG9jLmNfc3RyKCk7CisgICAgcmV0dXJuIGxvYzsKICAgfQogCiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IHRndC0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7CkBAIC01MywxOCArNTQsMTggQEAKICAgfQogICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSBnZy0+RmluZEdlbmVyYXRvclRhcmdldCh0Z3QtPkdldE5hbWUoKSk7CiAgIGxvYyA9IGd0LT5HZXRMb2NhdGlvbkZvckJ1aWxkKCk7Ci0gIHJldHVybiBsb2MuY19zdHIoKTsKKyAgcmV0dXJuIGxvYzsKIH0KIAogdGVtcGxhdGUgPD4KLWNvbnN0IGNoYXIqIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6Q29tcHV0ZUxvY2F0aW9uPGNtVGFyZ2V0PigKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkNvbXB1dGVMb2NhdGlvbjxjbVRhcmdldD4oCiAgIGNtVGFyZ2V0IGNvbnN0KiB0Z3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBsb2M7CiAgIGlmICh0Z3QtPklzSW1wb3J0ZWQoKSkgewogICAgIGxvYyA9CiAgICAgICB0Z3QtPkltcG9ydGVkR2V0RnVsbFBhdGgoY29uZmlnLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCk7Ci0gICAgcmV0dXJuIGxvYy5jX3N0cigpOworICAgIHJldHVybiBsb2M7CiAgIH0KIAogICBjbUdsb2JhbEdlbmVyYXRvciogZ2cgPSB0Z3QtPkdldEdsb2JhbEdlbmVyYXRvcigpOwpAQCAtNzMsMTEgKzc0LDExIEBACiAgIH0KICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gZ2ctPkZpbmRHZW5lcmF0b3JUYXJnZXQodGd0LT5HZXROYW1lKCkpOwogICBsb2MgPSBndC0+R2V0RnVsbFBhdGgoY29uZmlnLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCk7Ci0gIHJldHVybiBsb2MuY19zdHIoKTsKKyAgcmV0dXJuIGxvYzsKIH0KIAogdGVtcGxhdGUgPD4KLWNvbnN0IGNoYXIqIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0U291cmNlczxjbVRhcmdldD4oCitjbVByb3AgY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpHZXRTb3VyY2VzPGNtVGFyZ2V0PigKICAgY21UYXJnZXQgY29uc3QqIHRndCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkKIHsKQEAgLTE1NSw3ICsxNTYsNyBAQAogICB9CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBzcmNzOwogICBzcmNzID0gc3Muc3RyKCk7Ci0gIHJldHVybiBzcmNzLmNfc3RyKCk7CisgIHJldHVybiAmc3JjczsKIH0KIAogY2xhc3MgY21UYXJnZXRJbnRlcm5hbHMKQEAgLTE3Niw3ICsxNzcsOCBAQAogICBib29sIElzSW1wb3J0ZWRUYXJnZXQ7CiAgIGJvb2wgSW1wb3J0ZWRHbG9iYWxseVZpc2libGU7CiAgIGJvb2wgQnVpbGRJbnRlcmZhY2VJbmNsdWRlc0FwcGVuZGVkOwotICBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+IFV0aWxpdGllczsKKyAgYm9vbCBQZXJDb25maWc7CisgIHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiBVdGlsaXRpZXM7CiAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gUHJlQnVpbGRDb21tYW5kczsKICAgc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBQcmVMaW5rQ29tbWFuZHM7CiAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gUG9zdEJ1aWxkQ29tbWFuZHM7CkBAIC0yMTMsNyArMjE1LDcgQEAKIH07CiAKIGNtVGFyZ2V0OjpjbVRhcmdldChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgVmlzaWJpbGl0eSB2aXMsIGNtTWFrZWZpbGUqIG1mKQorICAgICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZiwgYm9vbCBwZXJDb25maWcpCiAgIDogaW1wbChjbTo6bWFrZV91bmlxdWU8Y21UYXJnZXRJbnRlcm5hbHM+KCkpCiB7CiAgIGFzc2VydChtZik7CkBAIC0yMjksNiArMjMxLDcgQEAKICAgICAodmlzID09IFZpc2liaWxpdHlJbXBvcnRlZCB8fCB2aXMgPT0gVmlzaWJpbGl0eUltcG9ydGVkR2xvYmFsbHkpOwogICBpbXBsLT5JbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSA9IHZpcyA9PSBWaXNpYmlsaXR5SW1wb3J0ZWRHbG9iYWxseTsKICAgaW1wbC0+QnVpbGRJbnRlcmZhY2VJbmNsdWRlc0FwcGVuZGVkID0gZmFsc2U7CisgIGltcGwtPlBlckNvbmZpZyA9IHBlckNvbmZpZzsKIAogICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBETEwgcGxhdGZvcm0uCiAgIGltcGwtPklzRExMUGxhdGZvcm0gPQpAQCAtMjk3LDYgKzMwMCw3IEBACiAgICAgaW5pdFByb3AoIlBEQl9PVVRQVVRfRElSRUNUT1JZIik7CiAgICAgaW5pdFByb3AoIkNPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkiKTsKICAgICBpbml0UHJvcCgiRlJBTUVXT1JLIik7CisgICAgaW5pdFByb3AoIkZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWCIpOwogICAgIGluaXRQcm9wKCJGb3J0cmFuX0ZPUk1BVCIpOwogICAgIGluaXRQcm9wKCJGb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkiKTsKICAgICBpbml0UHJvcCgiRm9ydHJhbl9DT01QSUxFUl9MQVVOQ0hFUiIpOwpAQCAtMzU1LDE1ICszNTksMTYgQEAKICAgICBpbml0UHJvcCgiQ1VEQV9DT01QSUxFUl9MQVVOQ0hFUiIpOwogICAgIGluaXRQcm9wKCJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiIpOwogICAgIGluaXRQcm9wKCJDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMiKTsKKyAgICBpbml0UHJvcCgiQ1VEQV9SVU5USU1FX0xJQlJBUlkiKTsKICAgICBpbml0UHJvcCgiTElOS19TRUFSQ0hfU1RBUlRfU1RBVElDIik7CiAgICAgaW5pdFByb3AoIkxJTktfU0VBUkNIX0VORF9TVEFUSUMiKTsKLSAgICBpbml0UHJvcCgiRk9MREVSIik7CiAgICAgaW5pdFByb3AoIlN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04iKTsKICAgICBpbml0UHJvcCgiU3dpZnRfTU9EVUxFX0RJUkVDVE9SWSIpOwogICAgIGluaXRQcm9wKCJWU19KVVNUX01ZX0NPREVfREVCVUdHSU5HIik7CiAgICAgaW5pdFByb3AoIkRJU0FCTEVfUFJFQ09NUElMRV9IRUFERVJTIik7CiAgICAgaW5pdFByb3AoIlVOSVRZX0JVSUxEIik7CiAgICAgaW5pdFByb3BWYWx1ZSgiVU5JVFlfQlVJTERfQkFUQ0hfU0laRSIsICI4Iik7CisgICAgaW5pdFByb3BWYWx1ZSgiUENIX1dBUk5fSU5WQUxJRCIsICJPTiIpOwogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNYY29kZSgpKSB7CiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSIik7CkBAIC0zNzMsNiArMzc4LDcgQEAKICAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QIik7CiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSIik7CiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AiKTsKKyAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkiKTsKICAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSIik7CiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUCIpOwogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUiKTsKQEAgLTM4MiwxMSArMzg4LDE0IEBACiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX01BTExPQ19TVEFDSyIpOwogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UiKTsKICAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTIik7CisgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX0VOVklST05NRU5UIik7CiAgICAgfQogI2VuZGlmCiAgIH0KIAogICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICBpbml0UHJvcCgiRk9MREVSIik7CisKICAgICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzWGNvZGUoKSkgewogICAgICAgaW5pdFByb3AoIlhDT0RFX0dFTkVSQVRFX1NDSEVNRSIpOwogICAgIH0KQEAgLTQyOCw2ICs0MzcsMTMgQEAKICAgICAgICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnTmFtZSksICJfUE9TVEZJWCIpOwogICAgICAgICBpbml0UHJvcChwcm9wZXJ0eSk7CiAgICAgICB9CisKKyAgICAgIGlmIChpbXBsLT5UYXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKKyAgICAgICAgICBpbXBsLT5UYXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgcHJvcGVydHkgPSBjbVN0ckNhdCgiRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZ05hbWUpKTsKKyAgICAgICAgaW5pdFByb3AocHJvcGVydHkpOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC00MzcsMzAgKzQ1MywzMCBAQAogICBpZiAoIXRoaXMtPklzSW1wb3J0ZWQoKSkgewogICAgIC8vIEluaXRpYWxpemUgdGhlIElOQ0xVREVfRElSRUNUT1JJRVMgcHJvcGVydHkgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUKICAgICAvLyBvZiB0aGUgc2FtZSBkaXJlY3RvcnkgcHJvcGVydHk6Ci0gICAgY21BcHBlbmQoaW1wbC0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcywKLSAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcygpKTsKLSAgICBjbUFwcGVuZChpbXBsLT5JbmNsdWRlRGlyZWN0b3JpZXNCYWNrdHJhY2VzLAotICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRJbmNsdWRlRGlyZWN0b3JpZXNCYWNrdHJhY2VzKCkpOworICAgIGNtOjphcHBlbmQoaW1wbC0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcywKKyAgICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRJbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzKCkpOworICAgIGNtOjphcHBlbmQoaW1wbC0+SW5jbHVkZURpcmVjdG9yaWVzQmFja3RyYWNlcywKKyAgICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRJbmNsdWRlRGlyZWN0b3JpZXNCYWNrdHJhY2VzKCkpOwogCiAgICAgewogICAgICAgYXV0byBjb25zdCYgc3lzSW5jID0gaW1wbC0+TWFrZWZpbGUtPkdldFN5c3RlbUluY2x1ZGVEaXJlY3RvcmllcygpOwogICAgICAgaW1wbC0+U3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzLmluc2VydChzeXNJbmMuYmVnaW4oKSwgc3lzSW5jLmVuZCgpKTsKICAgICB9CiAKLSAgICBjbUFwcGVuZChpbXBsLT5Db21waWxlT3B0aW9uc0VudHJpZXMsCi0gICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldENvbXBpbGVPcHRpb25zRW50cmllcygpKTsKLSAgICBjbUFwcGVuZChpbXBsLT5Db21waWxlT3B0aW9uc0JhY2t0cmFjZXMsCi0gICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldENvbXBpbGVPcHRpb25zQmFja3RyYWNlcygpKTsKKyAgICBjbTo6YXBwZW5kKGltcGwtPkNvbXBpbGVPcHRpb25zRW50cmllcywKKyAgICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRDb21waWxlT3B0aW9uc0VudHJpZXMoKSk7CisgICAgY206OmFwcGVuZChpbXBsLT5Db21waWxlT3B0aW9uc0JhY2t0cmFjZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0Q29tcGlsZU9wdGlvbnNCYWNrdHJhY2VzKCkpOwogCi0gICAgY21BcHBlbmQoaW1wbC0+TGlua09wdGlvbnNFbnRyaWVzLAotICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRMaW5rT3B0aW9uc0VudHJpZXMoKSk7Ci0gICAgY21BcHBlbmQoaW1wbC0+TGlua09wdGlvbnNCYWNrdHJhY2VzLAotICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRMaW5rT3B0aW9uc0JhY2t0cmFjZXMoKSk7CisgICAgY206OmFwcGVuZChpbXBsLT5MaW5rT3B0aW9uc0VudHJpZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0TGlua09wdGlvbnNFbnRyaWVzKCkpOworICAgIGNtOjphcHBlbmQoaW1wbC0+TGlua09wdGlvbnNCYWNrdHJhY2VzLAorICAgICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldExpbmtPcHRpb25zQmFja3RyYWNlcygpKTsKIAotICAgIGNtQXBwZW5kKGltcGwtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMsCi0gICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldExpbmtEaXJlY3Rvcmllc0VudHJpZXMoKSk7Ci0gICAgY21BcHBlbmQoaW1wbC0+TGlua0RpcmVjdG9yaWVzQmFja3RyYWNlcywKLSAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0TGlua0RpcmVjdG9yaWVzQmFja3RyYWNlcygpKTsKKyAgICBjbTo6YXBwZW5kKGltcGwtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0TGlua0RpcmVjdG9yaWVzRW50cmllcygpKTsKKyAgICBjbTo6YXBwZW5kKGltcGwtPkxpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0TGlua0RpcmVjdG9yaWVzQmFja3RyYWNlcygpKTsKICAgfQogCiAgIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSAmJgpAQCAtNDg0LDYgKzUwMCw3IEBACiAgIH0KICAgaWYgKGltcGwtPlRhcmdldFR5cGUgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSB8fAogICAgICAgaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKKyAgICBpbml0UHJvcCgiQUlYX0VYUE9SVF9BTExfU1lNQk9MUyIpOwogICAgIGluaXRQcm9wKCJXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUyIpOwogICB9CiAKQEAgLTUwNywxNCArNTI0LDE1IEBACiAgICAgICB0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSB7CiAgICAgaW5pdFByb3AoIkpPQl9QT09MX0NPTVBJTEUiKTsKICAgICBpbml0UHJvcCgiSk9CX1BPT0xfTElOSyIpOworICAgIGluaXRQcm9wKCJKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUiIpOwogICB9CiAKICAgaWYgKGltcGwtPlRhcmdldFR5cGUgPD0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSB7CisgICAgaW5pdFByb3AoIkRPVE5FVF9UQVJHRVRfRlJBTUVXT1JLIik7CiAgICAgaW5pdFByb3AoIkRPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04iKTsKICAgfQogCi0gIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSAmJgotICAgICAgdGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6VVRJTElUWSkgeworICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKIAogICAgIC8vIGNoZWNrIGZvciAiQ01BS0VfVlNfR0xPQkFMUyIgdmFyaWFibGUgYW5kIHNldCB1cCB0YXJnZXQgcHJvcGVydGllcwogICAgIC8vIGlmIGFueQpAQCAtNTc0LDEzICs1OTIsMTQgQEAKICAgcmV0dXJuIGltcGwtPk1ha2VmaWxlLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKIH0KIAotdm9pZCBjbVRhcmdldDo6QWRkVXRpbGl0eShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21NYWtlZmlsZSogbWYpCit2b2lkIGNtVGFyZ2V0OjpBZGRVdGlsaXR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBib29sIGNyb3NzLCBjbU1ha2VmaWxlKiBtZikKIHsKLSAgaW1wbC0+VXRpbGl0aWVzLmluc2VydCgKLSAgICBCVDxzdGQ6OnN0cmluZz4obmFtZSwgbWYgPyBtZi0+R2V0QmFja3RyYWNlKCkgOiBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKyAgaW1wbC0+VXRpbGl0aWVzLmluc2VydChCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PigKKyAgICB7IG5hbWUsIGNyb3NzIH0sIG1mID8gbWYtPkdldEJhY2t0cmFjZSgpIDogY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7CiB9CiAKLXN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4gY29uc3QmIGNtVGFyZ2V0OjpHZXRVdGlsaXRpZXMoKSBjb25zdAorc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+IGNvbnN0JiBjbVRhcmdldDo6R2V0VXRpbGl0aWVzKCkKKyAgY29uc3QKIHsKICAgcmV0dXJuIGltcGwtPlV0aWxpdGllczsKIH0KQEAgLTg3MCw3ICs4ODksNyBAQAogICAgICAgY21MaXN0RmlsZUNvbnRleHQgbGZjID0gY21kLnNlY29uZDsKICAgICAgIGxmYy5GaWxlUGF0aCA9IGNtRGlyLkNvbnZlcnRUb1JlbFBhdGhJZk5vdENvbnRhaW5lZCgKICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldFNvdXJjZURpcmVjdG9yeSgpLCBsZmMuRmlsZVBhdGgpOwotICAgICAgcyA8PCAiICogIiA8PCBsZmMgPDwgc3RkOjplbmRsOworICAgICAgcyA8PCAiICogIiA8PCBsZmMgPDwgJ1xuJzsKICAgICB9CiAgIH0KIH0KQEAgLTkzMiwxNCArOTUxLDcgQEAKICAgcmV0dXJuIGltcGwtPk9yaWdpbmFsTGlua0xpYnJhcmllczsKIH0KIAotdm9pZCBjbVRhcmdldDo6QWRkTGlua0xpYnJhcnkoY21NYWtlZmlsZSYgbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpCi17Ci0gIHRoaXMtPkFkZExpbmtMaWJyYXJ5KG1mLCBsaWIsIGxpYiwgbGx0KTsKLX0KLQogdm9pZCBjbVRhcmdldDo6QWRkTGlua0xpYnJhcnkoY21NYWtlZmlsZSYgbWYsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGliUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0KQogewogICBjbVRhcmdldCogdGd0ID0gbWYuRmluZFRhcmdldFRvVXNlKGxpYik7CkBAIC05NDgsMTQgKzk2MCwxMyBAQAogCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbGliTmFtZSA9CiAgICAgICAoaXNOb25JbXBvcnRlZFRhcmdldCAmJiBsbHQgIT0gR0VORVJBTF9MaWJyYXJ5VHlwZSkKLSAgICAgID8gdGFyZ2V0TmFtZUdlbmV4KGxpYlJlZikKLSAgICAgIDogbGliUmVmOwotICAgIHRoaXMtPkFwcGVuZFByb3BlcnR5KAotICAgICAgIkxJTktfTElCUkFSSUVTIiwKLSAgICAgIHRoaXMtPkdldERlYnVnR2VuZXJhdG9yRXhwcmVzc2lvbnMobGliTmFtZSwgbGx0KS5jX3N0cigpKTsKKyAgICAgID8gdGFyZ2V0TmFtZUdlbmV4KGxpYikKKyAgICAgIDogbGliOworICAgIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWJOYW1lLCBsbHQpKTsKICAgfQogCi0gIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobGliKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBsaWIgIT0gbGliUmVmIHx8CisgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobGliKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fAogICAgICAgKHRndCAmJgogICAgICAgICh0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZIHx8CiAgICAgICAgIHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpKSB8fApAQCAtOTk3LDcgKzEwMDgsNyBAQAogICAgIGRlcGVuZGVuY2llcyArPSAiOyI7CiAgICAgZGVwZW5kZW5jaWVzICs9IGxpYjsKICAgICBkZXBlbmRlbmNpZXMgKz0gIjsiOwotICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbih0YXJnZXRFbnRyeSwgZGVwZW5kZW5jaWVzLmNfc3RyKCksCisgICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKHRhcmdldEVudHJ5LCBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXBlbmRlbmNpZXMgZm9yIHRoZSB0YXJnZXQiLCBjbVN0YXRlRW51bXM6OlNUQVRJQyk7CiAgIH0KIH0KQEAgLTEyODYsMjAgKzEyOTcsMjAgQEAKIAogICAgIGltcGwtPlByb3BlcnRpZXMuU2V0UHJvcGVydHkocHJvcCwgcmV1c2VkRnJvbS5jX3N0cigpKTsKIAotICAgIHJldXNlZFRhcmdldC0+U2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX05BTUUiLCByZXVzZWRGcm9tLmNfc3RyKCkpOworICAgIHJldXNlZFRhcmdldC0+U2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX05BTUUiLCByZXVzZWRGcm9tKTsKICAgICByZXVzZWRUYXJnZXQtPlNldFByb3BlcnR5KCJDT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KHJldXNlZEZyb20sICIuZGlyLyIpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQocmV1c2VkRnJvbSwgIi5kaXIvIikpOwogCiAgICAgdGhpcy0+U2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX05BTUUiLAogICAgICAgICAgICAgICAgICAgICAgIHJldXNlZFRhcmdldC0+R2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX05BTUUiKSk7Ci0gICAgdGhpcy0+QWRkVXRpbGl0eShyZXVzZWRGcm9tLCBpbXBsLT5NYWtlZmlsZSk7CisgICAgdGhpcy0+QWRkVXRpbGl0eShyZXVzZWRGcm9tLCBmYWxzZSwgaW1wbC0+TWFrZWZpbGUpOwogICB9IGVsc2UgewogICAgIGltcGwtPlByb3BlcnRpZXMuU2V0UHJvcGVydHkocHJvcCwgdmFsdWUpOwogICB9CiB9CiAKLXZvaWQgY21UYXJnZXQ6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCit2b2lkIGNtVGFyZ2V0OjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZykKIHsKICAgaWYgKCFjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OlBhc3Nlc1doaXRlbGlzdCgKICAgICAgICAgdGhpcy0+R2V0VHlwZSgpLCBwcm9wLCBpbXBsLT5NYWtlZmlsZS0+R2V0TWVzc2VuZ2VyKCksCkBAIC0xMzM0LDM3ICsxMzQ1LDM3IEBACiAgICAgcmV0dXJuOwogICB9CiAgIGlmIChwcm9wID09ICJJTkNMVURFX0RJUkVDVE9SSUVTIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGltcGwtPkluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIGltcGwtPkluY2x1ZGVEaXJlY3Rvcmllc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09ICJDT01QSUxFX09QVElPTlMiKSB7Ci0gICAgaWYgKHZhbHVlICYmICp2YWx1ZSkgeworICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewogICAgICAgaW1wbC0+Q29tcGlsZU9wdGlvbnNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5Db21waWxlT3B0aW9uc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09ICJDT01QSUxFX0ZFQVRVUkVTIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGltcGwtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIGltcGwtPkNvbXBpbGVGZWF0dXJlc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09ICJDT01QSUxFX0RFRklOSVRJT05TIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGltcGwtPkNvbXBpbGVEZWZpbml0aW9uc0VudHJpZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIGltcGwtPkNvbXBpbGVEZWZpbml0aW9uc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09ICJMSU5LX09QVElPTlMiKSB7Ci0gICAgaWYgKHZhbHVlICYmICp2YWx1ZSkgeworICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewogICAgICAgaW1wbC0+TGlua09wdGlvbnNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5MaW5rT3B0aW9uc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09ICJMSU5LX0RJUkVDVE9SSUVTIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGltcGwtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIGltcGwtPkxpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwpAQCAtMTM3OCwxMyArMTM4OSwxMyBAQAogICAgICAgaW1wbC0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOwogICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBpbXBsLT5QcmVjb21waWxlSGVhZGVyc0VudHJpZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIGltcGwtPlByZWNvbXBpbGVIZWFkZXJzQmFja3RyYWNlcy5wdXNoX2JhY2sobGZidCk7CiAgICAgfQogICB9IGVsc2UgaWYgKHByb3AgPT0gIkxJTktfTElCUkFSSUVTIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCA9IGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIGltcGwtPkxpbmtJbXBsZW1lbnRhdGlvblByb3BlcnR5RW50cmllcy5lbXBsYWNlX2JhY2sodmFsdWUpOwogICAgICAgaW1wbC0+TGlua0ltcGxlbWVudGF0aW9uUHJvcGVydHlCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKQEAgLTE0MjMsNyArMTQzNCw3IEBACiAgICAgZGlycyArPSBpbXBsLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwogICAgIGlmICghZGlycy5lbXB0eSgpKSB7CiAgICAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIkPEJVSUxEX0lOVEVSRkFDRToiICsgZGlycyArICI+IikuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiQ8QlVJTERfSU5URVJGQUNFOiIgKyBkaXJzICsgIj4iKSk7CiAgICAgfQogICB9CiB9CkBAIC0xNTU4LDggKzE1NjksMTIgQEAKIHN0YXRpYyB2b2lkIGNtVGFyZ2V0Q2hlY2tJTVBPUlRFRF9HTE9CQUwoY29uc3QgY21UYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogY29udGV4dCkKIHsKLSAgc3RkOjp2ZWN0b3I8Y21UYXJnZXQqPiB0YXJnZXRzID0gY29udGV4dC0+R2V0T3duZWRJbXBvcnRlZFRhcmdldHMoKTsKLSAgYXV0byBpdCA9IHN0ZDo6ZmluZCh0YXJnZXRzLmJlZ2luKCksIHRhcmdldHMuZW5kKCksIHRhcmdldCk7CisgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBjb250ZXh0LT5HZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpOworICBhdXRvIGl0ID0KKyAgICBzdGQ6OmZpbmRfaWYodGFyZ2V0cy5iZWdpbigpLCB0YXJnZXRzLmVuZCgpLAorICAgICAgICAgICAgICAgICBbJl0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPGNtVGFyZ2V0PiYgaW1wb3J0VGFyZ2V0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID09IGltcG9ydFRhcmdldC5nZXQoKTsKKyAgICAgICAgICAgICAgICAgfSk7CiAgIGlmIChpdCA9PSB0YXJnZXRzLmVuZCgpKSB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgZSA8PCAiQXR0ZW1wdCB0byBwcm9tb3RlIGltcG9ydGVkIHRhcmdldCBcIiIgPDwgdGFyZ2V0LT5HZXROYW1lKCkKQEAgLTE1OTksNyArMTYxNCw5IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KSBjb25zdAogewotICByZXR1cm4gY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpHZXRQcm9wZXJ0eSh0aGlzLCBwcm9wLCBtZXNzZW5nZXIsIGNvbnRleHQpOworICBjbVByb3AgcmV0VmFsID0KKyAgICBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFByb3BlcnR5KHRoaXMsIHByb3AsIG1lc3NlbmdlciwgY29udGV4dCk7CisgIHJldHVybiByZXRWYWwgPyByZXRWYWwtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCiBjb25zdCBjaGFyKiBjbVRhcmdldDo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CkBAIC0xNjUyLDcgKzE2NjksNyBAQAogICAgIH0KICAgICAvLyB0aGUgdHlwZSBwcm9wZXJ0eSByZXR1cm5zIHdoYXQgdHlwZSB0aGUgdGFyZ2V0IGlzCiAgICAgaWYgKHByb3AgPT0gcHJvcFRZUEUpIHsKLSAgICAgIHJldHVybiBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZXRUeXBlKCkpOworICAgICAgcmV0dXJuIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldFR5cGUoKSkuY19zdHIoKTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcElOQ0xVREVfRElSRUNUT1JJRVMpIHsKICAgICAgIGlmIChpbXBsLT5JbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzLmVtcHR5KCkpIHsKQEAgLTE3MTUsNyArMTczMiwxNCBAQAogICAgICAgfQogCiAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwotICAgICAgb3V0cHV0ID0gY21Kb2luKGltcGwtPlV0aWxpdGllcywgIjsiKTsKKyAgICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdXRpbGl0aWVzOworICAgICAgdXRpbGl0aWVzLnJlc2l6ZShpbXBsLT5VdGlsaXRpZXMuc2l6ZSgpKTsKKyAgICAgIHN0ZDo6dHJhbnNmb3JtKAorICAgICAgICBpbXBsLT5VdGlsaXRpZXMuY2JlZ2luKCksIGltcGwtPlV0aWxpdGllcy5jZW5kKCksIHV0aWxpdGllcy5iZWdpbigpLAorICAgICAgICBbXShjb25zdCBCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PiYgaXRlbSkgLT4gc3RkOjpzdHJpbmcgeworICAgICAgICAgIHJldHVybiBpdGVtLlZhbHVlLmZpcnN0OworICAgICAgICB9KTsKKyAgICAgIG91dHB1dCA9IGNtSm9pbih1dGlsaXRpZXMsICI7Iik7CiAgICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BQUkVDT01QSUxFX0hFQURFUlMpIHsKQEAgLTE3NTAsMTYgKzE3NzQsMjAgQEAKICAgICB9CiAgIH0KIAotICBjb25zdCBjaGFyKiByZXRWYWwgPSBpbXBsLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSBpbXBsLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgIGlmICghcmV0VmFsKSB7CiAgICAgY29uc3QgYm9vbCBjaGFpbiA9CiAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+SXNQcm9wZXJ0eUNoYWluZWQocHJvcCwgY21Qcm9wZXJ0eTo6VEFSR0VUKTsKICAgICBpZiAoY2hhaW4pIHsKLSAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLkdldFByb3BlcnR5KAorICAgICAgcmV0VmFsID0gaW1wbC0+TWFrZWZpbGUtPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eSgKICAgICAgICAgcHJvcCwgY2hhaW4pOworICAgICAgaWYgKHJldFZhbCkgeworICAgICAgICByZXR1cm4gcmV0VmFsLT5jX3N0cigpOworICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKICAgfQotICByZXR1cm4gcmV0VmFsOworICByZXR1cm4gcmV0VmFsLT5jX3N0cigpOwogfQogCiBjb25zdCBjaGFyKiBjbVRhcmdldDo6R2V0U2FmZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdApAQCAtMTgwMSw2ICsxODI5LDExIEBACiAgIHJldHVybiBpbXBsLT5JbXBvcnRlZEdsb2JhbGx5VmlzaWJsZTsKIH0KIAorYm9vbCBjbVRhcmdldDo6SXNQZXJDb25maWcoKSBjb25zdAoreworICByZXR1cm4gaW1wbC0+UGVyQ29uZmlnOworfQorCiBjb25zdCBjaGFyKiBjbVRhcmdldDo6R2V0U3VmZml4VmFyaWFibGVJbnRlcm5hbCgKICAgY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QpIGNvbnN0CiB7CkBAIC0xOTAyLDcgKzE5MzUsNyBAQAogICBzdGQ6OnN0cmluZyBzdWZmaXg7CiAKICAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZICYmCi0gICAgICB0aGlzLT5HZXRNYXBwZWRDb25maWcoZGVzaXJlZF9jb25maWcsICZsb2MsICZpbXAsIHN1ZmZpeCkpIHsKKyAgICAgIHRoaXMtPkdldE1hcHBlZENvbmZpZyhkZXNpcmVkX2NvbmZpZywgbG9jLCBpbXAsIHN1ZmZpeCkpIHsKICAgICBzd2l0Y2ggKGFydGlmYWN0KSB7CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0OgogICAgICAgICBpZiAobG9jKSB7CkBAIC0xOTcyLDcgKzIwMDUsNyBAQAogfQogCiBib29sIGNtVGFyZ2V0OjpHZXRNYXBwZWRDb25maWcoc3RkOjpzdHJpbmcgY29uc3QmIGRlc2lyZWRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBsb2MsIGNvbnN0IGNoYXIqKiBpbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciomIGxvYywgY29uc3QgY2hhciomIGltcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgc3VmZml4KSBjb25zdAogewogICBzdGQ6OnN0cmluZyBjb25maWdfdXBwZXI7CkBAIC0yMDEwLDMwICsyMDQzLDMwIEBACiAKICAgLy8gSWYgYSBtYXBwaW5nIHdhcyBmb3VuZCwgY2hlY2sgaXRzIGNvbmZpZ3VyYXRpb25zLgogICBmb3IgKGF1dG8gbWNpID0gbWFwcGVkQ29uZmlncy5iZWdpbigpOwotICAgICAgICEqbG9jICYmICEqaW1wICYmIG1jaSAhPSBtYXBwZWRDb25maWdzLmVuZCgpOyArK21jaSkgeworICAgICAgICFsb2MgJiYgIWltcCAmJiBtY2kgIT0gbWFwcGVkQ29uZmlncy5lbmQoKTsgKyttY2kpIHsKICAgICAvLyBMb29rIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCiAgICAgaWYgKG1jaS0+ZW1wdHkoKSkgewogICAgICAgLy8gQW4gZW1wdHkgc3RyaW5nIGluIHRoZSBtYXBwaW5nIGhhcyBhIHNwZWNpYWwgbWVhbmluZzoKICAgICAgIC8vIGxvb2sgdXAgdGhlIGNvbmZpZy1sZXNzIHByb3BlcnRpZXMuCi0gICAgICAqbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcEJhc2UpOworICAgICAgbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcEJhc2UpOwogICAgICAgaWYgKGFsbG93SW1wKSB7Ci0gICAgICAgICppbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIik7CisgICAgICAgIGltcCA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9JTVBMSUIiKTsKICAgICAgIH0KICAgICAgIC8vIElmIGl0IHdhcyBmb3VuZCwgc2V0IHRoZSBzdWZmaXguCi0gICAgICBpZiAoKmxvYyB8fCAqaW1wKSB7CisgICAgICBpZiAobG9jIHx8IGltcCkgewogICAgICAgICBzdWZmaXguY2xlYXIoKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgc3RkOjpzdHJpbmcgbWNVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSgqbWNpKTsKICAgICAgIHN0ZDo6c3RyaW5nIGxvY1Byb3AgPSBjbVN0ckNhdChsb2NQcm9wQmFzZSwgJ18nLCBtY1VwcGVyKTsKLSAgICAgICpsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wKTsKKyAgICAgIGxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOwogICAgICAgaWYgKGFsbG93SW1wKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGltcFByb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfSU1QTElCXyIsIG1jVXBwZXIpOwotICAgICAgICAqaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CisgICAgICAgIGltcCA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApOwogICAgICAgfQogCiAgICAgICAvLyBJZiBpdCB3YXMgZm91bmQsIHVzZSBpdCBmb3IgYWxsIHByb3BlcnRpZXMgYmVsb3cuCi0gICAgICBpZiAoKmxvYyB8fCAqaW1wKSB7CisgICAgICBpZiAobG9jIHx8IGltcCkgewogICAgICAgICBzdWZmaXggPSBjbVN0ckNhdCgnXycsIG1jVXBwZXIpOwogICAgICAgfQogICAgIH0KQEAgLTIwNDIsNTkgKzIwNzUsNTkgQEAKICAgLy8gSWYgd2UgbmVlZGVkIHRvIGZpbmQgb25lIG9mIHRoZSBtYXBwZWQgY29uZmlndXJhdGlvbnMgYnV0IGRpZCBub3QKICAgLy8gdGhlbiB0aGUgdGFyZ2V0IGxvY2F0aW9uIGlzIG5vdCBmb3VuZC4gIFRoZSBwcm9qZWN0IGRvZXMgbm90IHdhbnQKICAgLy8gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24uCi0gIGlmICghbWFwcGVkQ29uZmlncy5lbXB0eSgpICYmICEqbG9jICYmICEqaW1wKSB7CisgIGlmICghbWFwcGVkQ29uZmlncy5lbXB0eSgpICYmICFsb2MgJiYgIWltcCkgewogICAgIC8vIEludGVyZmFjZSBsaWJyYXJpZXMgYXJlIGFsd2F5cyBhdmFpbGFibGUgYmVjYXVzZSB0aGVpcgotICAgIC8vIGxpYnJhcnkgbmFtZSBpcyBvcHRpb25hbCBzbyBpdCBpcyBva2F5IHRvIGxlYXZlICpsb2MgZW1wdHkuCisgICAgLy8gbGlicmFyeSBuYW1lIGlzIG9wdGlvbmFsIHNvIGl0IGlzIG9rYXkgdG8gbGVhdmUgbG9jIGVtcHR5LgogICAgIHJldHVybiB0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWTsKICAgfQogCiAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBmb3VuZCBpdCB0aGVuIHRoZXJlIGFyZSBubyBtYXBwZWQKICAgLy8gY29uZmlndXJhdGlvbnMuICBMb29rIGZvciBhbiBleGFjdC1tYXRjaC4KLSAgaWYgKCEqbG9jICYmICEqaW1wKSB7CisgIGlmICghbG9jICYmICFpbXApIHsKICAgICBzdGQ6OnN0cmluZyBsb2NQcm9wID0gY21TdHJDYXQobG9jUHJvcEJhc2UsIHN1ZmZpeCk7Ci0gICAgKmxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOworICAgIGxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOwogICAgIGlmIChhbGxvd0ltcCkgewogICAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9JTVBMSUIiLCBzdWZmaXgpOwotICAgICAgKmltcCA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApOworICAgICAgaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CiAgICAgfQogICB9CiAKICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlcmUgYXJlIG5vIG1hcHBlZAogICAvLyBjb25maWd1cmF0aW9ucyBhbmQgbm8gZXhhY3QgbWF0Y2guCi0gIGlmICghKmxvYyAmJiAhKmltcCkgeworICBpZiAoIWxvYyAmJiAhaW1wKSB7CiAgICAgLy8gVGhlIHN1ZmZpeCBjb21wdXRlZCBhYm92ZSBpcyBub3QgdXNlZnVsLgogICAgIHN1ZmZpeC5jbGVhcigpOwogCiAgICAgLy8gTG9vayBmb3IgYSBjb25maWd1cmF0aW9uLWxlc3MgbG9jYXRpb24uICBUaGlzIG1heSBiZSBzZXQgYnkKICAgICAvLyBtYW51YWxseS13cml0dGVuIGNvZGUuCi0gICAgKmxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3BCYXNlKTsKKyAgICBsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wQmFzZSk7CiAgICAgaWYgKGFsbG93SW1wKSB7Ci0gICAgICAqaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0lNUExJQiIpOworICAgICAgaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0lNUExJQiIpOwogICAgIH0KICAgfQogCiAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBmb3VuZCBpdCB0aGVuIHRoZSBwcm9qZWN0IGlzIHdpbGxpbmcgdG8gdHJ5CiAgIC8vIGFueSBhdmFpbGFibGUgY29uZmlndXJhdGlvbi4KLSAgaWYgKCEqbG9jICYmICEqaW1wKSB7CisgIGlmICghbG9jICYmICFpbXApIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXZhaWxhYmxlQ29uZmlnczsKICAgICBpZiAoY29uc3QgY2hhciogaWNvbmZpZ3MgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfQ09ORklHVVJBVElPTlMiKSkgewogICAgICAgY21FeHBhbmRMaXN0KGljb25maWdzLCBhdmFpbGFibGVDb25maWdzKTsKICAgICB9CiAgICAgZm9yIChhdXRvIGFjaSA9IGF2YWlsYWJsZUNvbmZpZ3MuYmVnaW4oKTsKLSAgICAgICAgICEqbG9jICYmICEqaW1wICYmIGFjaSAhPSBhdmFpbGFibGVDb25maWdzLmVuZCgpOyArK2FjaSkgeworICAgICAgICAgIWxvYyAmJiAhaW1wICYmIGFjaSAhPSBhdmFpbGFibGVDb25maWdzLmVuZCgpOyArK2FjaSkgewogICAgICAgc3VmZml4ID0gY21TdHJDYXQoJ18nLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoKmFjaSkpOwogICAgICAgc3RkOjpzdHJpbmcgbG9jUHJvcCA9IGNtU3RyQ2F0KGxvY1Byb3BCYXNlLCBzdWZmaXgpOwotICAgICAgKmxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOworICAgICAgbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CiAgICAgICBpZiAoYWxsb3dJbXApIHsKICAgICAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9JTVBMSUIiLCBzdWZmaXgpOwotICAgICAgICAqaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CisgICAgICAgIGltcCA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApOwogICAgICAgfQogICAgIH0KICAgfQogICAvLyBJZiB3ZSBoYXZlIG5vdCB5ZXQgZm91bmQgaXQgdGhlbiB0aGUgdGFyZ2V0IGxvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGUuCi0gIGlmICghKmxvYyAmJiAhKmltcCkgeworICBpZiAoIWxvYyAmJiAhaW1wKSB7CiAgICAgLy8gSW50ZXJmYWNlIGxpYnJhcmllcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBiZWNhdXNlIHRoZWlyCi0gICAgLy8gbGlicmFyeSBuYW1lIGlzIG9wdGlvbmFsIHNvIGl0IGlzIG9rYXkgdG8gbGVhdmUgKmxvYyBlbXB0eS4KKyAgICAvLyBsaWJyYXJ5IG5hbWUgaXMgb3B0aW9uYWwgc28gaXQgaXMgb2theSB0byBsZWF2ZSBsb2MgZW1wdHkuCiAgICAgcmV0dXJuIHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldC5oIGIvU291cmNlL2NtVGFyZ2V0LmgKaW5kZXggNjVhMWNlMy4uNDYzYjIzNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0LmgKKysrIGIvU291cmNlL2NtVGFyZ2V0LmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgfTsKIAogICBjbVRhcmdldChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUsCi0gICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZik7CisgICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZiwgYm9vbCBwZXJDb25maWcpOwogCiAgIGNtVGFyZ2V0KGNtVGFyZ2V0IGNvbnN0JikgPSBkZWxldGU7CiAgIGNtVGFyZ2V0KGNtVGFyZ2V0JiYpIG5vZXhjZXB0OwpAQCAtMTEwLDEwICsxMTAsOCBAQAogICAvLyEgQ2xlYXIgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gcmVjb3JkZWQgZm9yIHRoaXMgdGFyZ2V0LCBpZiBhbnkuCiAgIHZvaWQgQ2xlYXJEZXBlbmRlbmN5SW5mb3JtYXRpb24oY21NYWtlZmlsZSYgbWYpOwogCi0gIHZvaWQgQWRkTGlua0xpYnJhcnkoY21NYWtlZmlsZSYgbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWIsCi0gICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0KTsKICAgdm9pZCBBZGRMaW5rTGlicmFyeShjbU1ha2VmaWxlJiBtZiwgc3RkOjpzdHJpbmcgY29uc3QmIGxpYiwKLSAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGliUmVmLCBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpOworICAgICAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0TGlua0xpYnJhcnlUeXBlIGxsdCk7CiAKICAgZW51bSBUTExTaWduYXR1cmUKICAgewpAQCAtMTU4LDEzICsxNTYsMTggQEAKICAgICogbmFtZSBhcyB3b3VsZCBiZSBzcGVjaWZpZWQgdG8gdGhlIEFERF9FWEVDVVRBQkxFIG9yIFVUSUxJVFlfU09VUkNFCiAgICAqIGNvbW1hbmRzLiBJdCBpcyBub3QgYSBmdWxsIHBhdGggbm9yIGRvZXMgaXQgaGF2ZSBhbiBleHRlbnNpb24uCiAgICAqLwotICB2b2lkIEFkZFV0aWxpdHkoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGNtTWFrZWZpbGUqIG1mID0gbnVsbHB0cik7CisgIHZvaWQgQWRkVXRpbGl0eShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgYm9vbCBjcm9zcywKKyAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mID0gbnVsbHB0cik7CiAgIC8vISBHZXQgdGhlIHV0aWxpdGllcyB1c2VkIGJ5IHRoaXMgdGFyZ2V0Ci0gIHN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4gY29uc3QmIEdldFV0aWxpdGllcygpIGNvbnN0OworICBzdGQ6OnNldDxCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+Pj4gY29uc3QmIEdldFV0aWxpdGllcygpIGNvbnN0OwogCiAgIC8vISBTZXQvR2V0IGEgcHJvcGVydHkgb2YgdGhpcyB0YXJnZXQgZmlsZQogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAorICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCisgIHsKKyAgICBTZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZS5jX3N0cigpKTsKKyAgfQorICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKICAgLy8hIE1pZ2h0IHJldHVybiBhIG51bGxwdHIgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQgb3IgaW52YWxpZAogICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CkBAIC0xODYsOSArMTg5LDEwIEBACiAKICAgYm9vbCBJc0ltcG9ydGVkKCkgY29uc3Q7CiAgIGJvb2wgSXNJbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSgpIGNvbnN0OworICBib29sIElzUGVyQ29uZmlnKCkgY29uc3Q7CiAKLSAgYm9vbCBHZXRNYXBwZWRDb25maWcoc3RkOjpzdHJpbmcgY29uc3QmIGRlc2lyZWRfY29uZmlnLCBjb25zdCBjaGFyKiogbG9jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogaW1wLCBzdGQ6OnN0cmluZyYgc3VmZml4KSBjb25zdDsKKyAgYm9vbCBHZXRNYXBwZWRDb25maWcoc3RkOjpzdHJpbmcgY29uc3QmIGRlc2lyZWRfY29uZmlnLCBjb25zdCBjaGFyKiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiYgaW1wLCBzdGQ6OnN0cmluZyYgc3VmZml4KSBjb25zdDsKIAogICAvLyEgUmV0dXJuIHdoZXRoZXIgdGhpcyB0YXJnZXQgaXMgYW4gZXhlY3V0YWJsZSB3aXRoIHN5bWJvbCBleHBvcnRzIGVuYWJsZWQuCiAgIGJvb2wgSXNFeGVjdXRhYmxlV2l0aEV4cG9ydHMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldENvbXBpbGVEZWZpbml0aW9uc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0Q29tcGlsZURlZmluaXRpb25zQ29tbWFuZC5jeHgKaW5kZXggZWRlZTE2Ny4uYjU2YjI0NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZURlZmluaXRpb25zQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0Q29tcGlsZURlZmluaXRpb25zQ29tbWFuZC5jeHgKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypwcmVwZW5kKi8sIGJvb2wgLypzeXN0ZW0qLykgb3ZlcnJpZGUKICAgewotICAgIHRndC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCB0aGlzLT5Kb2luKGNvbnRlbnQpLmNfc3RyKCkpOworICAgIHRndC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCB0aGlzLT5Kb2luKGNvbnRlbnQpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gU3VjY2Vzc2Z1bGx5IGhhbmRsZWQuCiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZU9wdGlvbnNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVRhcmdldENvbXBpbGVPcHRpb25zQ29tbWFuZC5jeHgKaW5kZXggZTM5YjcyNi4uZGVlMmMxMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZU9wdGlvbnNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRDb21waWxlT3B0aW9uc0NvbW1hbmQuY3h4CkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21UYXJnZXRQcm9wQ29tbWFuZEJhc2UuaCIKQEAgLTI3LDEwICsyOCwxNiBAQAogCiAgIGJvb2wgSGFuZGxlRGlyZWN0Q29udGVudChjbVRhcmdldCogdGd0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKnByZXBlbmQqLywgYm9vbCAvKnN5c3RlbSovKSBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVwZW5kLCBib29sIC8qc3lzdGVtKi8pIG92ZXJyaWRlCiAgIHsKKyAgICBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgcG9saWN5U3RhdHVzID0KKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwMSk7CisgICAgaWYgKHBvbGljeVN0YXR1cyA9PSBjbVBvbGljaWVzOjpPTEQgfHwgcG9saWN5U3RhdHVzID09IGNtUG9saWNpZXM6OldBUk4pIHsKKyAgICAgIHByZXBlbmQgPSBmYWxzZTsKKyAgICB9CisKICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7Ci0gICAgdGd0LT5JbnNlcnRDb21waWxlT3B0aW9uKHRoaXMtPkpvaW4oY29udGVudCksIGxmYnQpOworICAgIHRndC0+SW5zZXJ0Q29tcGlsZU9wdGlvbih0aGlzLT5Kb2luKGNvbnRlbnQpLCBsZmJ0LCBwcmVwZW5kKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gU3VjY2Vzc2Z1bGx5IGhhbmRsZWQuCiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0RGVwZW5kLmggYi9Tb3VyY2UvY21UYXJnZXREZXBlbmQuaAppbmRleCA0Y2E3OGZhLi41NDUyY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXREZXBlbmQuaAorKysgYi9Tb3VyY2UvY21UYXJnZXREZXBlbmQuaApAQCAtMTksNiArMTksNyBAQAogICAvLyBtdXRhYmxlIG1lbWJlcnMgdG8gYWNoaWV2ZSBhIG1hcCB3aXRoIHNldCBzeW50YXguCiAgIG11dGFibGUgYm9vbCBMaW5rOwogICBtdXRhYmxlIGJvb2wgVXRpbDsKKyAgbXV0YWJsZSBib29sIENyb3NzOwogICBtdXRhYmxlIGNtTGlzdEZpbGVCYWNrdHJhY2UgQmFja3RyYWNlOwogCiBwdWJsaWM6CkBAIC0yNiw2ICsyNyw3IEBACiAgICAgOiBUYXJnZXQodCkKICAgICAsIExpbmsoZmFsc2UpCiAgICAgLCBVdGlsKGZhbHNlKQorICAgICwgQ3Jvc3MoZmFsc2UpCiAgIHsKICAgfQogICBvcGVyYXRvciBjbUdlbmVyYXRvclRhcmdldCBjb25zdCooKSBjb25zdCB7IHJldHVybiB0aGlzLT5UYXJnZXQ7IH0KQEAgLTQzLDEyICs0NSwxNCBAQAogICAgICAgdGhpcy0+TGluayA9IHRydWU7CiAgICAgfQogICB9CisgIHZvaWQgU2V0Q3Jvc3MoYm9vbCBjcm9zcykgY29uc3QgeyB0aGlzLT5Dcm9zcyA9IGNyb3NzOyB9CiAgIHZvaWQgU2V0QmFja3RyYWNlKGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0KSBjb25zdAogICB7CiAgICAgdGhpcy0+QmFja3RyYWNlID0gYnQ7CiAgIH0KICAgYm9vbCBJc0xpbmsoKSBjb25zdCB7IHJldHVybiB0aGlzLT5MaW5rOyB9CiAgIGJvb2wgSXNVdGlsKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VXRpbDsgfQorICBib29sIElzQ3Jvc3MoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Dcm9zczsgfQogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBHZXRCYWNrdHJhY2UoKSBjb25zdCB7IHJldHVybiB0aGlzLT5CYWNrdHJhY2U7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldEluY2x1ZGVEaXJlY3Rvcmllc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0SW5jbHVkZURpcmVjdG9yaWVzQ29tbWFuZC5jeHgKaW5kZXggOTViNjlmMy4uMzU2MzViOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0SW5jbHVkZURpcmVjdG9yaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0SW5jbHVkZURpcmVjdG9yaWVzQ29tbWFuZC5jeHgKQEAgLTg4LDggKzg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKTsKICAgaWYgKHN5c3RlbSkgewogICAgIHN0ZDo6c3RyaW5nIGpvaW5lZCA9IHRoaXMtPkpvaW4oY29udGVudCk7Ci0gICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5lZC5jX3N0cigpKTsKKyAgICB0Z3QtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMiLCBqb2luZWQpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldExpbmtMaWJyYXJpZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVRhcmdldExpbmtMaWJyYXJpZXNDb21tYW5kLmN4eAppbmRleCAwZDIzODNhLi5kZjc1MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRMaW5rTGlicmFyaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0TGlua0xpYnJhcmllc0NvbW1hbmQuY3h4CkBAIC0zLDcgKzMsMTAgQEAKICNpbmNsdWRlICJjbVRhcmdldExpbmtMaWJyYXJpZXNDb21tYW5kLmgiCiAKICNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCkBAIC0zNCwxNSArMzcsMzAgQEAKIAogY29uc3QgY2hhciogTGlua0xpYnJhcnlUeXBlTmFtZXNbM10gPSB7ICJnZW5lcmFsIiwgImRlYnVnIiwgIm9wdGltaXplZCIgfTsKIAorc3RydWN0IFRMTAoreworICBjbU1ha2VmaWxlJiBNYWtlZmlsZTsKKyAgY21UYXJnZXQqIFRhcmdldDsKKyAgYm9vbCBXYXJuUmVtb3RlSW50ZXJmYWNlID0gZmFsc2U7CisgIGJvb2wgUmVqZWN0UmVtb3RlTGlua2luZyA9IGZhbHNlOworICBib29sIEVuY29kZVJlbW90ZVJlZmVyZW5jZSA9IGZhbHNlOworICBzdGQ6OnN0cmluZyBEaXJlY3RvcnlJZDsKKyAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiBQcm9wczsKKworICBUTEwoY21NYWtlZmlsZSYgbWYsIGNtVGFyZ2V0KiB0YXJnZXQpOworICB+VExMKCk7CisKKyAgYm9vbCBIYW5kbGVMaWJyYXJ5KFByb2Nlc3NpbmdTdGF0ZSBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYiwgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0KTsKKyAgdm9pZCBBcHBlbmRQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKTsKKyAgdm9pZCBBZmZlY3RzUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIHByb3ApOworfTsKKwogfSAvLyBuYW1lc3BhY2UKIAogc3RhdGljIHZvaWQgTGlua0xpYnJhcnlUeXBlU3BlY2lmaWVyV2FybmluZyhjbU1ha2VmaWxlJiBtZiwgaW50IGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByaWdodCk7CiAKLXN0YXRpYyBib29sIEhhbmRsZUxpYnJhcnkoY21NYWtlZmlsZSYgbWYsIGNtVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NpbmdTdGF0ZSBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGliLCBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpOwotCiBib29sIGNtVGFyZ2V0TGlua0xpYnJhcmllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CkBAIC02NCwxMSArODIsOSBAQAogICBjbVRhcmdldCogdGFyZ2V0ID0KICAgICBtZi5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kVGFyZ2V0KGFyZ3NbMF0pOwogICBpZiAoIXRhcmdldCkgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtVGFyZ2V0Kj4mIGltcG9ydGVkVGFyZ2V0cyA9Ci0gICAgICBtZi5HZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpOwotICAgIGZvciAoY21UYXJnZXQqIGltcG9ydGVkVGFyZ2V0IDogaW1wb3J0ZWRUYXJnZXRzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBpbXBvcnRlZFRhcmdldCA6IG1mLkdldE93bmVkSW1wb3J0ZWRUYXJnZXRzKCkpIHsKICAgICAgIGlmIChpbXBvcnRlZFRhcmdldC0+R2V0TmFtZSgpID09IGFyZ3NbMF0pIHsKLSAgICAgICAgdGFyZ2V0ID0gaW1wb3J0ZWRUYXJnZXQ7CisgICAgICAgIHRhcmdldCA9IGltcG9ydGVkVGFyZ2V0LmdldCgpOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CkBAIC0xNDksNiArMTY1LDggQEAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCisgIFRMTCB0bGwobWYsIHRhcmdldCk7CisKICAgLy8gS2VlcCB0cmFjayBvZiBsaW5rIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVycy4KICAgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0ID0gR0VORVJBTF9MaWJyYXJ5VHlwZTsKICAgYm9vbCBoYXZlTExUID0gZmFsc2U7CkBAIC0yNDcsNyArMjY1LDcgQEAKICAgICB9IGVsc2UgaWYgKGhhdmVMTFQpIHsKICAgICAgIC8vIFRoZSBsaW5rIHR5cGUgd2FzIHNwZWNpZmllZCBieSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCiAgICAgICBoYXZlTExUID0gZmFsc2U7Ci0gICAgICBpZiAoIUhhbmRsZUxpYnJhcnkobWYsIHRhcmdldCwgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSwgYXJnc1tpXSwgbGx0KSkgeworICAgICAgaWYgKCF0bGwuSGFuZGxlTGlicmFyeShjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLCBhcmdzW2ldLCBsbHQpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjY4LDcgKzI4Niw3IEBACiAgICAgICAgICAgbGx0ID0gT1BUSU1JWkVEX0xpYnJhcnlUeXBlOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZiAoIUhhbmRsZUxpYnJhcnkobWYsIHRhcmdldCwgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSwgYXJnc1tpXSwgbGx0KSkgeworICAgICAgaWYgKCF0bGwuSGFuZGxlTGlicmFyeShjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLCBhcmdzW2ldLCBsbHQpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9CkBAIC0zMTEsMjEgKzMyOSw0OCBAQAogICAgICAgIlwiIGluc3RlYWQgb2YgYSBsaWJyYXJ5IG5hbWUuICBUaGUgZmlyc3Qgc3BlY2lmaWVyIHdpbGwgYmUgaWdub3JlZC4iKSk7CiB9CiAKLXN0YXRpYyBib29sIEhhbmRsZUxpYnJhcnkoY21NYWtlZmlsZSYgbWYsIGNtVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NpbmdTdGF0ZSBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGliLCBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpCituYW1lc3BhY2UgeworCitUTEw6OlRMTChjbU1ha2VmaWxlJiBtZiwgY21UYXJnZXQqIHRhcmdldCkKKyAgOiBNYWtlZmlsZShtZikKKyAgLCBUYXJnZXQodGFyZ2V0KQogewotICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSAmJgorICBpZiAoJnRoaXMtPk1ha2VmaWxlICE9IHRoaXMtPlRhcmdldC0+R2V0TWFrZWZpbGUoKSkgeworICAgIC8vIFRoZSBMSFMgdGFyZ2V0IHdhcyBjcmVhdGVkIGluIGFub3RoZXIgZGlyZWN0b3J5LgorICAgIHN3aXRjaCAodGhpcy0+TWFrZWZpbGUuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzkpKSB7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46CisgICAgICAgIHRoaXMtPldhcm5SZW1vdGVJbnRlcmZhY2UgPSB0cnVlOworICAgICAgICBDTV9GQUxMVEhST1VHSDsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICB0aGlzLT5SZWplY3RSZW1vdGVMaW5raW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0FMV0FZUzoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgICB0aGlzLT5FbmNvZGVSZW1vdGVSZWZlcmVuY2UgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKHRoaXMtPkVuY29kZVJlbW90ZVJlZmVyZW5jZSkgeworICAgIGNtRGlyZWN0b3J5SWQgY29uc3QgZGlySWQgPSB0aGlzLT5NYWtlZmlsZS5HZXREaXJlY3RvcnlJZCgpOworICAgIHRoaXMtPkRpcmVjdG9yeUlkID0gY21TdHJDYXQoQ01BS0VfRElSRUNUT1JZX0lEX1NFUCwgZGlySWQuU3RyaW5nKTsKKyAgfQorfQorCitib29sIFRMTDo6SGFuZGxlTGlicmFyeShQcm9jZXNzaW5nU3RhdGUgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWIsIGNtVGFyZ2V0TGlua0xpYnJhcnlUeXBlIGxsdCkKK3sKKyAgaWYgKHRoaXMtPlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKICAgICAgIGN1cnJlbnRQcm9jZXNzaW5nU3RhdGUgIT0gUHJvY2Vzc2luZ0tleXdvcmRMaW5rSW50ZXJmYWNlKSB7Ci0gICAgbWYuSXNzdWVNZXNzYWdlKAorICAgIHRoaXMtPk1ha2VmaWxlLklzc3VlTWVzc2FnZSgKICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICJJTlRFUkZBQ0UgbGlicmFyeSBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIElOVEVSRkFDRSBrZXl3b3JkIG9mICIKICAgICAgICJ0YXJnZXRfbGlua19saWJyYXJpZXMiKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgaWYgKHRhcmdldC0+SXNJbXBvcnRlZCgpICYmCisgIGlmICh0aGlzLT5UYXJnZXQtPklzSW1wb3J0ZWQoKSAmJgogICAgICAgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSAhPSBQcm9jZXNzaW5nS2V5d29yZExpbmtJbnRlcmZhY2UpIHsKLSAgICBtZi5Jc3N1ZU1lc3NhZ2UoCisgICAgdGhpcy0+TWFrZWZpbGUuSXNzdWVNZXNzYWdlKAogICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgIklNUE9SVEVEIGxpYnJhcnkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBJTlRFUkZBQ0Uga2V5d29yZCBvZiAiCiAgICAgICAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIik7CkBAIC0zNDAsMTEgKzM4NSwxMiBAQAogICAgICBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlID09IFByb2Nlc3NpbmdLZXl3b3JkTGlua0ludGVyZmFjZSkKICAgICA/IGNtVGFyZ2V0OjpLZXl3b3JkVExMU2lnbmF0dXJlCiAgICAgOiBjbVRhcmdldDo6UGxhaW5UTExTaWduYXR1cmU7Ci0gIGlmICghdGFyZ2V0LT5QdXNoVExMQ29tbWFuZFRyYWNlKHNpZywgbWYuR2V0RXhlY3V0aW9uQ29udGV4dCgpKSkgeworICBpZiAoIXRoaXMtPlRhcmdldC0+UHVzaFRMTENvbW1hbmRUcmFjZSgKKyAgICAgICAgc2lnLCB0aGlzLT5NYWtlZmlsZS5HZXRFeGVjdXRpb25Db250ZXh0KCkpKSB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgY29uc3QgY2hhciogbW9kYWwgPSBudWxscHRyOwogICAgIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HOwotICAgIHN3aXRjaCAobWYuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwMjMpKSB7CisgICAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDAyMykpIHsKICAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKICAgICAgICAgZSA8PCBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAwMjMpIDw8ICJcbiI7CiAgICAgICAgIG1vZGFsID0gInNob3VsZCI7CkBAIC0zNjUsNzMgKzQxMSwzOCBAQAogICAgICAgZSA8PCAiVGhlICIgPDwgZXhpc3RpbmdTaWcKICAgICAgICAgPDwgIiBzaWduYXR1cmUgZm9yIHRhcmdldF9saW5rX2xpYnJhcmllcyBoYXMgIgogICAgICAgICAgICAiYWxyZWFkeSBiZWVuIHVzZWQgd2l0aCB0aGUgdGFyZ2V0IFwiIgotICAgICAgICA8PCB0YXJnZXQtPkdldE5hbWUoKQorICAgICAgICA8PCB0aGlzLT5UYXJnZXQtPkdldE5hbWUoKQogICAgICAgICA8PCAiXCIuICBBbGwgdXNlcyBvZiB0YXJnZXRfbGlua19saWJyYXJpZXMgd2l0aCBhIHRhcmdldCAiIDw8IG1vZGFsCiAgICAgICAgIDw8ICIgYmUgZWl0aGVyIGFsbC1rZXl3b3JkIG9yIGFsbC1wbGFpbi5cbiI7Ci0gICAgICB0YXJnZXQtPkdldFRsbFNpZ25hdHVyZVRyYWNlcyhlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnID09IGNtVGFyZ2V0OjpLZXl3b3JkVExMU2lnbmF0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY21UYXJnZXQ6OlBsYWluVExMU2lnbmF0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY21UYXJnZXQ6OktleXdvcmRUTExTaWduYXR1cmUpOwotICAgICAgbWYuSXNzdWVNZXNzYWdlKG1lc3NhZ2VUeXBlLCBlLnN0cigpKTsKKyAgICAgIHRoaXMtPlRhcmdldC0+R2V0VGxsU2lnbmF0dXJlVHJhY2VzKGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcgPT0gY21UYXJnZXQ6OktleXdvcmRUTExTaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjbVRhcmdldDo6UGxhaW5UTExTaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbVRhcmdldDo6S2V5d29yZFRMTFNpZ25hdHVyZSk7CisgICAgICB0aGlzLT5NYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UobWVzc2FnZVR5cGUsIGUuc3RyKCkpOwogICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUikgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgYm9vbCB3YXJuUmVtb3RlSW50ZXJmYWNlID0gZmFsc2U7Ci0gIGJvb2wgcmVqZWN0UmVtb3RlTGlua2luZyA9IGZhbHNlOwotICBib29sIGVuY29kZVJlbW90ZVJlZmVyZW5jZSA9IGZhbHNlOwotICBpZiAoJm1mICE9IHRhcmdldC0+R2V0TWFrZWZpbGUoKSkgewotICAgIC8vIFRoZSBMSFMgdGFyZ2V0IHdhcyBjcmVhdGVkIGluIGFub3RoZXIgZGlyZWN0b3J5LgotICAgIHN3aXRjaCAobWYuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzkpKSB7Ci0gICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46Ci0gICAgICAgIHdhcm5SZW1vdGVJbnRlcmZhY2UgPSB0cnVlOwotICAgICAgICBDTV9GQUxMVEhST1VHSDsKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgotICAgICAgICByZWplY3RSZW1vdGVMaW5raW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0FMV0FZUzoKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgotICAgICAgICBlbmNvZGVSZW1vdGVSZWZlcmVuY2UgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBsaWJSZWY7Ci0gIGlmIChlbmNvZGVSZW1vdGVSZWZlcmVuY2UgJiYgIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGxpYikpIHsKLSAgICAvLyBUaGlzIGlzIGEgbGlicmFyeSBuYW1lIGFkZGVkIGJ5IGEgY2FsbGVyIHRoYXQgaXMgbm90IGluIHRoZQotICAgIC8vIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSB0YXJnZXQgd2FzIGNyZWF0ZWQuICBBZGQgYSBzdWZmaXggdG8KLSAgICAvLyB0aGUgbmFtZSB0byB0ZWxsIFJlc29sdmVMaW5rSXRlbSB0byBsb29rIHVwIHRoZSBuYW1lIGluIHRoZQotICAgIC8vIGNhbGxlcidzIGRpcmVjdG9yeS4KLSAgICBjbURpcmVjdG9yeUlkIGNvbnN0IGRpcklkID0gbWYuR2V0RGlyZWN0b3J5SWQoKTsKLSAgICBsaWJSZWYgPSBsaWIgKyBDTUFLRV9ESVJFQ1RPUllfSURfU0VQICsgZGlySWQuU3RyaW5nOwotICB9IGVsc2UgewotICAgIC8vIFRoaXMgaXMgYW4gYWJzb2x1dGUgcGF0aCBvciBhIGxpYnJhcnkgbmFtZSBhZGRlZCBieSBhIGNhbGxlcgotICAgIC8vIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgdGFyZ2V0IHdhcyBjcmVhdGVkLiAgV2UgY2FuIHVzZQotICAgIC8vIHRoZSBvcmlnaW5hbCBuYW1lIGRpcmVjdGx5LgotICAgIGxpYlJlZiA9IGxpYjsKLSAgfQotCiAgIC8vIEhhbmRsZSBub3JtYWwgY2FzZSB3aGVyZSB0aGUgY29tbWFuZCB3YXMgY2FsbGVkIHdpdGggYW5vdGhlciBrZXl3b3JkIHRoYW4KICAgLy8gSU5URVJGQUNFIC8gTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIG9yIG5vbmUgYXQgYWxsLiAoVGhlICJMSU5LX0xJQlJBUklFUyIKICAgLy8gcHJvcGVydHkgb2YgdGhlIHRhcmdldCBvbiB0aGUgTEhTIHNoYWxsIGJlIHBvcHVsYXRlZC4pCiAgIGlmIChjdXJyZW50UHJvY2Vzc2luZ1N0YXRlICE9IFByb2Nlc3NpbmdLZXl3b3JkTGlua0ludGVyZmFjZSAmJgogICAgICAgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSAhPSBQcm9jZXNzaW5nUGxhaW5MaW5rSW50ZXJmYWNlKSB7CiAKLSAgICBpZiAocmVqZWN0UmVtb3RlTGlua2luZykgewotICAgICAgbWYuSXNzdWVNZXNzYWdlKAorICAgIGlmICh0aGlzLT5SZWplY3RSZW1vdGVMaW5raW5nKSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICAgY21TdHJDYXQoIkF0dGVtcHQgdG8gYWRkIGxpbmsgbGlicmFyeSBcIiIsIGxpYiwgIlwiIHRvIHRhcmdldCBcIiIsCi0gICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICB0aGlzLT5UYXJnZXQtPkdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgIlwiIHdoaWNoIGlzIG5vdCBidWlsdCBpbiB0aGlzICIKICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeS5cblRoaXMgaXMgYWxsb3dlZCBvbmx5IHdoZW4gcG9saWN5IENNUDAwNzkgIgogICAgICAgICAgICAgICAgICAiaXMgc2V0IHRvIE5FVy4iKSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY21UYXJnZXQqIHRndCA9IG1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kVGFyZ2V0KGxpYik7CisgICAgY21UYXJnZXQqIHRndCA9IHRoaXMtPk1ha2VmaWxlLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kVGFyZ2V0KGxpYik7CiAKICAgICBpZiAodGd0ICYmICh0Z3QtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSAmJgogICAgICAgICAodGd0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgJiYKQEAgLTQzOSw3ICs0NTAsNyBAQAogICAgICAgICAodGd0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgJiYKICAgICAgICAgKHRndC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpICYmCiAgICAgICAgICF0Z3QtPklzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkpIHsKLSAgICAgIG1mLklzc3VlTWVzc2FnZSgKKyAgICAgIHRoaXMtPk1ha2VmaWxlLklzc3VlTWVzc2FnZSgKICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgICBjbVN0ckNhdCgKICAgICAgICAgICAiVGFyZ2V0IFwiIiwgbGliLCAiXCIgb2YgdHlwZSAiLApAQCAtNDQ5LDE1ICs0NjAsMTYgQEAKICAgICAgICAgICAiZXhlY3V0YWJsZXMgd2l0aCB0aGUgRU5BQkxFX0VYUE9SVFMgcHJvcGVydHkgc2V0LiIpKTsKICAgICB9CiAKLSAgICB0YXJnZXQtPkFkZExpbmtMaWJyYXJ5KG1mLCBsaWIsIGxpYlJlZiwgbGx0KTsKKyAgICB0aGlzLT5BZmZlY3RzUHJvcGVydHkoIkxJTktfTElCUkFSSUVTIik7CisgICAgdGhpcy0+VGFyZ2V0LT5BZGRMaW5rTGlicmFyeSh0aGlzLT5NYWtlZmlsZSwgbGliLCBsbHQpOwogICB9CiAKLSAgaWYgKHdhcm5SZW1vdGVJbnRlcmZhY2UpIHsKLSAgICBtZi5Jc3N1ZU1lc3NhZ2UoCisgIGlmICh0aGlzLT5XYXJuUmVtb3RlSW50ZXJmYWNlKSB7CisgICAgdGhpcy0+TWFrZWZpbGUuSXNzdWVNZXNzYWdlKAogICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLAogICAgICAgY21TdHJDYXQoCiAgICAgICAgIGNtUG9saWNpZXM6OkdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6Q01QMDA3OSksICJcblRhcmdldFxuICAiLAotICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwKKyAgICAgICAgdGhpcy0+VGFyZ2V0LT5HZXROYW1lKCksCiAgICAgICAgICJcbmlzIG5vdCBjcmVhdGVkIGluIHRoaXMgIgogICAgICAgICAiZGlyZWN0b3J5LiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBDTWFrZSwgbGluayAiCiAgICAgICAgICJsaWJyYXJ5XG4gICIsCkBAIC00NzIsMTUgKzQ4NCwxNSBAQAogICAvLyBTVEFUSUMgbGlicmFyeS4pCiAgIGlmIChjdXJyZW50UHJvY2Vzc2luZ1N0YXRlID09IFByb2Nlc3NpbmdLZXl3b3JkUHJpdmF0ZUludGVyZmFjZSB8fAogICAgICAgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSA9PSBQcm9jZXNzaW5nUGxhaW5Qcml2YXRlSW50ZXJmYWNlKSB7Ci0gICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkgfHwKLSAgICAgICAgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgeworICAgIGlmICh0aGlzLT5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CisgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ0xpYiA9Ci0gICAgICAgIHRhcmdldC0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWJSZWYsIGxsdCk7CisgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWIsIGxsdCk7CiAgICAgICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZShsaWIpIHx8CiAgICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGxpYikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgICAgY29uZmlnTGliID0gIiQ8TElOS19PTkxZOiIgKyBjb25maWdMaWIgKyAiPiI7CiAgICAgICB9Ci0gICAgICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLCBjb25maWdMaWIuY19zdHIoKSk7CisgICAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIiwgY29uZmlnTGliKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KQEAgLTQ4OCw5ICs1MDAsOCBAQAogICAvLyBIYW5kbGUgZ2VuZXJhbCBjYXNlIHdoZXJlIHRoZSBjb21tYW5kIHdhcyBjYWxsZWQgd2l0aCBhbm90aGVyIGtleXdvcmQgdGhhbgogICAvLyBQUklWQVRFIC8gTElOS19QUklWQVRFIG9yIG5vbmUgYXQgYWxsLiAoVGhlICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiCiAgIC8vIHByb3BlcnR5IG9mIHRoZSB0YXJnZXQgb24gdGhlIExIUyBzaGFsbCBiZSBwb3B1bGF0ZWQuKQotICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KAotICAgICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLAotICAgIHRhcmdldC0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWJSZWYsIGxsdCkuY19zdHIoKSk7CisgIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5UYXJnZXQtPkdldERlYnVnR2VuZXJhdG9yRXhwcmVzc2lvbnMobGliLCBsbHQpKTsKIAogICAvLyBTdG9wIHByb2Nlc3NpbmcgaWYgY2FsbGVkIHdpdGhvdXQgYW55IGtleXdvcmQuCiAgIGlmIChjdXJyZW50UHJvY2Vzc2luZ1N0YXRlID09IFByb2Nlc3NpbmdMaW5rTGlicmFyaWVzKSB7CkBAIC00OTgsMTMgKzUwOSwxMyBAQAogICB9CiAgIC8vIFN0b3AgcHJvY2Vzc2luZyBpZiBwb2xpY3kgQ01QMDAyMiBpcyBzZXQgdG8gTkVXLgogICBjb25zdCBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgcG9saWN5MjJTdGF0dXMgPQotICAgIHRhcmdldC0+R2V0UG9saWN5U3RhdHVzQ01QMDAyMigpOworICAgIHRoaXMtPlRhcmdldC0+R2V0UG9saWN5U3RhdHVzQ01QMDAyMigpOwogICBpZiAocG9saWN5MjJTdGF0dXMgIT0gY21Qb2xpY2llczo6T0xEICYmCiAgICAgICBwb2xpY3kyMlN0YXR1cyAhPSBjbVBvbGljaWVzOjpXQVJOKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgLy8gU3RvcCBwcm9jZXNzaW5nIGlmIGNhbGxlZCB3aXRoIGFuIElOVEVSRkFDRSBsaWJyYXJ5IG9uIHRoZSBMSFMuCi0gIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICh0aGlzLT5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtNTE0LDcgKzUyNSw3IEBACiAgIHsKICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgY29uc2lkZXJlZCB0byBiZSBERUJVRy4KICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVidWdDb25maWdzID0KLSAgICAgIG1mLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0RGVidWdDb25maWdzKCk7CisgICAgICB0aGlzLT5NYWtlZmlsZS5HZXRDTWFrZUluc3RhbmNlKCktPkdldERlYnVnQ29uZmlncygpOwogICAgIHN0ZDo6c3RyaW5nIHByb3A7CiAKICAgICAvLyBJbmNsdWRlIHRoaXMgbGlicmFyeSBpbiB0aGUgbGluayBpbnRlcmZhY2UgZm9yIHRoZSB0YXJnZXQuCkBAIC01MjIsMjIgKzUzMyw0OSBAQAogICAgICAgLy8gUHV0IGluIHRoZSBERUJVRyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMuCiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkYyA6IGRlYnVnQ29uZmlncykgewogICAgICAgICBwcm9wID0gY21TdHJDYXQoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFU18iLCBkYyk7Ci0gICAgICAgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkocHJvcCwgbGliUmVmLmNfc3RyKCkpOworICAgICAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eShwcm9wLCBsaWIpOwogICAgICAgfQogICAgIH0KICAgICBpZiAobGx0ID09IE9QVElNSVpFRF9MaWJyYXJ5VHlwZSB8fCBsbHQgPT0gR0VORVJBTF9MaWJyYXJ5VHlwZSkgewogICAgICAgLy8gUHV0IGluIHRoZSBub24tREVCVUcgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzLgotICAgICAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eSgiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIiwgbGliUmVmLmNfc3RyKCkpOworICAgICAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyIsIGxpYik7CiAKICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgREVCVUcgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIGV4aXN0IHNvIHRoYXQgdGhlCiAgICAgICAvLyBnZW5lcmFsIG9uZSB3aWxsIG5vdCBiZSB1c2VkIGFzIGEgZmFsbC1iYWNrLgogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZGMgOiBkZWJ1Z0NvbmZpZ3MpIHsKICAgICAgICAgcHJvcCA9IGNtU3RyQ2F0KCJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVNfIiwgZGMpOwotICAgICAgICBpZiAoIXRhcmdldC0+R2V0UHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICB0YXJnZXQtPlNldFByb3BlcnR5KHByb3AsICIiKTsKKyAgICAgICAgaWYgKCF0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgICAgICAgdGhpcy0+VGFyZ2V0LT5TZXRQcm9wZXJ0eShwcm9wLCAiIik7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CisKK3ZvaWQgVExMOjpBcHBlbmRQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKQoreworICB0aGlzLT5BZmZlY3RzUHJvcGVydHkocHJvcCk7CisgIHRoaXMtPlRhcmdldC0+QXBwZW5kUHJvcGVydHkocHJvcCwgdmFsdWUpOworfQorCit2b2lkIFRMTDo6QWZmZWN0c1Byb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wKQoreworICBpZiAoIXRoaXMtPkVuY29kZVJlbW90ZVJlZmVyZW5jZSkgeworICAgIHJldHVybjsKKyAgfQorICAvLyBBZGQgYSB3cmFwcGVyIHRvIHRoZSBleHByZXNzaW9uIHRvIHRlbGwgTG9va3VwTGlua0l0ZW1zIHRvIGxvb2sgdXAKKyAgLy8gbmFtZXMgaW4gdGhlIGNhbGxlcidzIGRpcmVjdG9yeS4KKyAgaWYgKHRoaXMtPlByb3BzLmluc2VydChwcm9wKS5zZWNvbmQpIHsKKyAgICB0aGlzLT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KHByb3AsIHRoaXMtPkRpcmVjdG9yeUlkKTsKKyAgfQorfQorCitUTEw6On5UTEwoKQoreworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wIDogdGhpcy0+UHJvcHMpIHsKKyAgICB0aGlzLT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KHByb3AsIENNQUtFX0RJUkVDVE9SWV9JRF9TRVApOworICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXRQcmVjb21waWxlSGVhZGVyc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0UHJlY29tcGlsZUhlYWRlcnNDb21tYW5kLmN4eAppbmRleCBjNmUyZTVjLi4wNjcwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRQcmVjb21waWxlSGVhZGVyc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVRhcmdldFByZWNvbXBpbGVIZWFkZXJzQ29tbWFuZC5jeHgKQEAgLTQ3LDkgKzQ3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypwcmVwZW5kKi8sIGJvb2wgLypzeXN0ZW0qLykgb3ZlcnJpZGUKICAgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiYXNlID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKTsKLSAgICB0Z3QtPkFwcGVuZFByb3BlcnR5KAotICAgICAgIlBSRUNPTVBJTEVfSEVBREVSUyIsCi0gICAgICB0aGlzLT5Kb2luKENvbnZlcnRUb0Fic29sdXRlQ29udGVudChjb250ZW50LCBiYXNlKSkuY19zdHIoKSk7CisgICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkpvaW4oQ29udmVydFRvQWJzb2x1dGVDb250ZW50KGNvbnRlbnQsIGJhc2UpKSk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0UHJvcENvbW1hbmRCYXNlLmN4eCBiL1NvdXJjZS9jbVRhcmdldFByb3BDb21tYW5kQmFzZS5jeHgKaW5kZXggYmJjMWUxNi4uMGRlOGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0UHJvcENvbW1hbmRCYXNlLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRQcm9wQ29tbWFuZEJhc2UuY3h4CkBAIC04NCw5ICs4NCw3IEBACiAgICAgfQogICAgICsrYXJnSW5kZXg7CiAKLSAgICB0aGlzLT5UYXJnZXQtPlNldFByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ0luZGV4XS5jX3N0cigpKTsKLQorICAgIHRoaXMtPlRhcmdldC0+U2V0UHJvcGVydHkoIlBSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NIiwgYXJnc1thcmdJbmRleF0pOwogICAgICsrYXJnSW5kZXg7CiAgIH0KIApAQCAtMTYyLDkgKzE2MCw4IEBACiAgICAgY29uc3QgY2hhciogcHJvcFZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG90YWxDb250ZW50ID0gdGhpcy0+Sm9pbihjb250ZW50KSArCiAgICAgICAocHJvcFZhbHVlID8gc3RkOjpzdHJpbmcoIjsiKSArIHByb3BWYWx1ZSA6IHN0ZDo6c3RyaW5nKCkpOwotICAgIHRndC0+U2V0UHJvcGVydHkocHJvcE5hbWUsIHRvdGFsQ29udGVudC5jX3N0cigpKTsKKyAgICB0Z3QtPlNldFByb3BlcnR5KHByb3BOYW1lLCB0b3RhbENvbnRlbnQpOwogICB9IGVsc2UgewotICAgIHRndC0+QXBwZW5kUHJvcGVydHkoIklOVEVSRkFDRV8iICsgdGhpcy0+UHJvcGVydHksCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Kb2luKGNvbnRlbnQpLmNfc3RyKCkpOworICAgIHRndC0+QXBwZW5kUHJvcGVydHkoIklOVEVSRkFDRV8iICsgdGhpcy0+UHJvcGVydHksIHRoaXMtPkpvaW4oY29udGVudCkpOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyLmN4eCBiL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuY3h4CmluZGV4IGJhYWI4ZGEuLmYzNzk5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuY3h4CkBAIC02Miw2ICs2Miw3IEBACiAgICAgIkNPTVBBVElCTEVfSU5URVJGQUNFX05VTUJFUl9NQVgiLAogICAgICJDT01QQVRJQkxFX0lOVEVSRkFDRV9OVU1CRVJfTUlOIiwKICAgICAiQ09NUEFUSUJMRV9JTlRFUkZBQ0VfU1RSSU5HIiwKKyAgICAiREVQUkVDQVRJT04iLAogICAgICJFWFBPUlRfTkFNRSIsCiAgICAgIkVYUE9SVF9QUk9QRVJUSUVTIiwKICAgICAiSU1QT1JURUQiLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5oIGIvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5oCmluZGV4IDNiMTFhY2QuLjUzODdlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuaAorKysgYi9Tb3VyY2UvY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyLmgKQEAgLTE0LDE1ICsxNCwxNyBAQAogCiBjbGFzcyBjbU1lc3NlbmdlcjsKIAordXNpbmcgY21Qcm9wID0gY29uc3Qgc3RkOjpzdHJpbmcqOworCiBjbGFzcyBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIKIHsKIHB1YmxpYzoKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldD4KLSAgc3RhdGljIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KFRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KQorICBzdGF0aWMgY21Qcm9wIEdldFByb3BlcnR5KFRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpCiAgIHsKLSAgICBpZiAoY29uc3QgY2hhciogbG9jID0gR2V0TG9jYXRpb24odGd0LCBwcm9wLCBtZXNzZW5nZXIsIGNvbnRleHQpKSB7CisgICAgaWYgKGNtUHJvcCBsb2MgPSBHZXRMb2NhdGlvbih0Z3QsIHByb3AsIG1lc3NlbmdlciwgY29udGV4dCkpIHsKICAgICAgIHJldHVybiBsb2M7CiAgICAgfQogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7CkBAIC00NiwxNSArNDgsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KTsKIAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0PgotICBzdGF0aWMgY29uc3QgY2hhciogQ29tcHV0ZUxvY2F0aW9uRm9yQnVpbGQoVGFyZ2V0IGNvbnN0KiB0Z3QpOworICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIENvbXB1dGVMb2NhdGlvbkZvckJ1aWxkKFRhcmdldCBjb25zdCogdGd0KTsKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldD4KLSAgc3RhdGljIGNvbnN0IGNoYXIqIENvbXB1dGVMb2NhdGlvbihUYXJnZXQgY29uc3QqIHRndCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nJiBDb21wdXRlTG9jYXRpb24oVGFyZ2V0IGNvbnN0KiB0Z3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpOwogCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQ+Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBHZXRMb2NhdGlvbihUYXJnZXQgY29uc3QqIHRndCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkKKyAgc3RhdGljIGNtUHJvcCBHZXRMb2NhdGlvbihUYXJnZXQgY29uc3QqIHRndCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KQogCiAgIHsKICAgICAvLyBXYXRjaCBmb3Igc3BlY2lhbCAiY29tcHV0ZWQiIHByb3BlcnRpZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uCkBAIC03MSw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KSkgewogICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDb21wdXRlTG9jYXRpb25Gb3JCdWlsZCh0Z3QpOworICAgICAgICByZXR1cm4gJkNvbXB1dGVMb2NhdGlvbkZvckJ1aWxkKHRndCk7CiAgICAgICB9CiAKICAgICAgIC8vIFN1cHBvcnQgIkxPQ0FUSU9OXzxDT05GSUc+Ii4KQEAgLTgyLDcgKzg0LDcgQEAKICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBzdGQ6OnN0cmluZyBjb25maWdOYW1lID0gcHJvcC5zdWJzdHIoOSk7Ci0gICAgICAgIHJldHVybiBDb21wdXRlTG9jYXRpb24odGd0LCBjb25maWdOYW1lKTsKKyAgICAgICAgcmV0dXJuICZDb21wdXRlTG9jYXRpb24odGd0LCBjb25maWdOYW1lKTsKICAgICAgIH0KIAogICAgICAgLy8gU3VwcG9ydCAiPENPTkZJRz5fTE9DQVRJT04iLgpAQCAtOTUsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KSkgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDb21wdXRlTG9jYXRpb24odGd0LCBjb25maWdOYW1lKTsKKyAgICAgICAgICByZXR1cm4gJkNvbXB1dGVMb2NhdGlvbih0Z3QsIGNvbmZpZ05hbWUpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMTAzLDggKzEwNSw4IEBACiAgIH0KIAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0PgotICBzdGF0aWMgY29uc3QgY2hhciogR2V0U291cmNlcyhUYXJnZXQgY29uc3QqIHRndCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCk7CisgIHN0YXRpYyBjbVByb3AgR2V0U291cmNlcyhUYXJnZXQgY29uc3QqIHRndCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXRTb3VyY2VzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21UYXJnZXRTb3VyY2VzQ29tbWFuZC5jeHgKaW5kZXggYzJlMGIyOC4uYTFmYmM5YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0U291cmNlc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVRhcmdldFNvdXJjZXNDb21tYW5kLmN4eApAQCAtNDMsOCArNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKnByZXBlbmQqLywgYm9vbCAvKnN5c3RlbSovKSBvdmVycmlkZQogICB7CiAgICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgKLSAgICAgICJTT1VSQ0VTIiwKLSAgICAgIHRoaXMtPkpvaW4oQ29udmVydFRvQWJzb2x1dGVDb250ZW50KHRndCwgY29udGVudCwgZmFsc2UpKS5jX3N0cigpKTsKKyAgICAgICJTT1VSQ0VTIiwgdGhpcy0+Sm9pbihDb252ZXJ0VG9BYnNvbHV0ZUNvbnRlbnQodGd0LCBjb250ZW50LCBmYWxzZSkpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gU3VjY2Vzc2Z1bGx5IGhhbmRsZWQuCiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGVzdC5jeHggYi9Tb3VyY2UvY21UZXN0LmN4eAppbmRleCBkNWM2MWMxLi41NmM0NDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UZXN0LmN4eAorKysgYi9Tb3VyY2UvY21UZXN0LmN4eApAQCAtMzQsMTUgKzM0LDE2IEBACiAKIGNvbnN0IGNoYXIqIGNtVGVzdDo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIHJldFZhbCA9IHRoaXMtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKKyAgY21Qcm9wIHJldFZhbCA9IHRoaXMtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKICAgaWYgKCFyZXRWYWwpIHsKICAgICBjb25zdCBib29sIGNoYWluID0KICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5Jc1Byb3BlcnR5Q2hhaW5lZChwcm9wLCBjbVByb3BlcnR5OjpURVNUKTsKICAgICBpZiAoY2hhaW4pIHsKICAgICAgIHJldHVybiB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkocHJvcCwgY2hhaW4pOwogICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKICAgfQotICByZXR1cm4gcmV0VmFsOworICByZXR1cm4gcmV0VmFsLT5jX3N0cigpOwogfQogCiBib29sIGNtVGVzdDo6R2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CkBAIC01NSw3ICs1Niw3IEBACiAgIHRoaXMtPlByb3BlcnRpZXMuU2V0UHJvcGVydHkocHJvcCwgdmFsdWUpOwogfQogCi12b2lkIGNtVGVzdDo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAordm9pZCBjbVRlc3Q6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZykKIHsKICAgdGhpcy0+UHJvcGVydGllcy5BcHBlbmRQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgYXNTdHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGVzdC5oIGIvU291cmNlL2NtVGVzdC5oCmluZGV4IGRkMjQ2YzQuLjcyZDRlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRlc3QuaAorKysgYi9Tb3VyY2UvY21UZXN0LmgKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAvLyEgU2V0L0dldCBhIHByb3BlcnR5IG9mIHRoaXMgc291cmNlIGZpbGUKICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKKyAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CiAgIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UZXN0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4CmluZGV4IDMzM2Q0ZDUuLjExNDJkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4CkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgICAgIGdlLlBhcnNlKGkuc2Vjb25kKS0+RXZhbHVhdGUodGhpcy0+TEcsIGNvbmZpZykpOwogICB9CiAgIHRoaXMtPkdlbmVyYXRlSW50ZXJuYWxQcm9wZXJ0aWVzKG9zKTsKLSAgb3MgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgb3MgPDwgIilcbiI7CiB9CiAKIHZvaWQgY21UZXN0R2VuZXJhdG9yOjpHZW5lcmF0ZVNjcmlwdE5vQ29uZmlnKHN0ZDo6b3N0cmVhbSYgb3MsIEluZGVudCBpbmRlbnQpCkBAIC0xNzYsOSArMTc2LDkgQEAKICAgICAgIH0KICAgICAgIGZvdXQgPDwgYzsKICAgICB9Ci0gICAgZm91dCA8PCAiXCIiOworICAgIGZvdXQgPDwgJyInOwogICB9Ci0gIGZvdXQgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiKVxuIjsKIAogICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgdGhlIHRlc3QuCiAgIGZvdXQgPDwgaW5kZW50IDw8ICJzZXRfdGVzdHNfcHJvcGVydGllcygiIDw8IHRoaXMtPlRlc3QtPkdldE5hbWUoKQpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgICA8PCBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UoaS5zZWNvbmQpOwogICB9CiAgIHRoaXMtPkdlbmVyYXRlSW50ZXJuYWxQcm9wZXJ0aWVzKGZvdXQpOwotICBmb3V0IDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIilcbiI7CiB9CiAKIHZvaWQgY21UZXN0R2VuZXJhdG9yOjpHZW5lcmF0ZUludGVybmFsUHJvcGVydGllcyhzdGQ6Om9zdHJlYW0mIG9zKQpAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgcHJlcGVuZFRyaXBsZVNlcGFyYXRvciA9IHRydWU7CiAgIH0KIAotICBvcyA8PCAiXCIiOworICBvcyA8PCAnIic7CiB9CiAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbVRlc3RHZW5lcmF0b3I6OkV2YWx1YXRlQ29tbWFuZExpbmVBcmd1bWVudHMoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UaW1lc3RhbXAuY3h4IGIvU291cmNlL2NtVGltZXN0YW1wLmN4eAppbmRleCAzOTBmZDE2Li4xM2Y3M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UaW1lc3RhbXAuY3h4CisrKyBiL1NvdXJjZS9jbVRpbWVzdGFtcC5jeHgKQEAgLTEsNSArMSwxNSBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8vIFBPU0lYIEFQSXMgYXJlIG5lZWRlZAorIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisvLyBGb3IgaXNhc2NpaQorIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNzAwCisjZW5kaWYKKwogI2luY2x1ZGUgImNtVGltZXN0YW1wLmgiCiAKICNpbmNsdWRlIDxjc3RkbGliPgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVHJ5UnVuQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21UcnlSdW5Db21tYW5kLmN4eAppbmRleCAwZThlOTg2Li4zMjliM2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UcnlSdW5Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21UcnlSdW5Db21tYW5kLmN4eApAQCAtMjQyLDggKzI0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LmNfc3RyKCksIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKIAogICAgIGNtU3RhdGUqIHN0YXRlID0gdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCk7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9Ci0gICAgICBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlJ1blJlc3VsdFZhcmlhYmxlKTsKKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodGhpcy0+UnVuUmVzdWx0VmFyaWFibGUpOwogICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KHRoaXMtPlJ1blJlc3VsdFZhcmlhYmxlLCAiQURWQU5DRUQiLCAiMSIpOwogICAgIH0KQEAgLTI2NSw3ICsyNjQsNyBAQAogICAgICAgICBpbnRlcm5hbFJ1bk91dHB1dE5hbWUsICJQTEVBU0VfRklMTF9PVVQtTk9URk9VTkQiLCBjb21tZW50LmNfc3RyKCksCiAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgICAgIGNtU3RhdGUqIHN0YXRlID0gdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCk7Ci0gICAgICBjb25zdCBjaGFyKiBleGlzdGluZyA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoaW50ZXJuYWxSdW5PdXRwdXROYW1lKTsKKyAgICAgIGNtUHJvcCBleGlzdGluZyA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoaW50ZXJuYWxSdW5PdXRwdXROYW1lKTsKICAgICAgIGlmIChleGlzdGluZykgewogICAgICAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KGludGVybmFsUnVuT3V0cHV0TmFtZSwgIkFEVkFOQ0VEIiwgIjEiKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVV0aWxpdHlTb3VyY2VDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVV0aWxpdHlTb3VyY2VDb21tYW5kLmN4eAppbmRleCBhNDMxNjVjLi41ODY1YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21VdGlsaXR5U291cmNlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVXRpbGl0eVNvdXJjZUNvbW1hbmQuY3h4CkBAIC0xMDIsMTUgKzEwMiwxNSBAQAogICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHV0aWxpdHlFeGVjdXRhYmxlLCAiLy4vIiwgIi8iKTsKIAogICAvLyBFbnRlciB0aGUgdmFsdWUgaW50byB0aGUgY2FjaGUuCi0gIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZENhY2hlRGVmaW5pdGlvbigKLSAgICBjYWNoZUVudHJ5LCB1dGlsaXR5RXhlY3V0YWJsZS5jX3N0cigpLCAiUGF0aCB0byBhbiBpbnRlcm5hbCBwcm9ncmFtLiIsCi0gICAgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CisgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZENhY2hlRGVmaW5pdGlvbihjYWNoZUVudHJ5LCB1dGlsaXR5RXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXRoIHRvIGFuIGludGVybmFsIHByb2dyYW0uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6RklMRVBBVEgpOwogICAvLyBhZGQgYSB2YWx1ZSBpbnRvIHRoZSBjYWNoZSB0aGF0IG1hcHMgZnJvbSB0aGUKICAgLy8gZnVsbCBwYXRoIHRvIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0CiAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHV0aWxpdHlFeGVjdXRhYmxlKTsKLSAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgIHV0aWxpdHlFeGVjdXRhYmxlLCB1dGlsaXR5TmFtZS5jX3N0cigpLCAiRXhlY3V0YWJsZSB0byBwcm9qZWN0IG5hbWUuIiwKLSAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKHV0aWxpdHlFeGVjdXRhYmxlLCB1dGlsaXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGVjdXRhYmxlIHRvIHByb2plY3QgbmFtZS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiAKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoLmN4eCBiL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guY3h4CmluZGV4IDQ5OTVkYTkuLjM1ZTFjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guY3h4CisrKyBiL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guY3h4CkBAIC0yLDE5ICsyLDE5IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVZhcmlhYmxlV2F0Y2guaCIKIAorI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGNtVmFyaWFibGVXYXRjaEFjY2Vzc1N0cmluZ3NbXSA9IHsKLSAgIlJFQURfQUNDRVNTIiwgICAgICJVTktOT1dOX1JFQURfQUNDRVNTIiwgIlVOS05PV05fREVGSU5FRF9BQ0NFU1MiLAotICAiTU9ESUZJRURfQUNDRVNTIiwgIlJFTU9WRURfQUNDRVNTIiwgICAgICAiTk9fQUNDRVNTIgotfTsKLQotY29uc3QgY2hhciogY21WYXJpYWJsZVdhdGNoOjpHZXRBY2Nlc3NBc1N0cmluZyhpbnQgYWNjZXNzX3R5cGUpCitjb25zdCBzdGQ6OnN0cmluZyYgY21WYXJpYWJsZVdhdGNoOjpHZXRBY2Nlc3NBc1N0cmluZyhpbnQgYWNjZXNzX3R5cGUpCiB7CisgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHN0ZDo6c3RyaW5nLCA2PiBjbVZhcmlhYmxlV2F0Y2hBY2Nlc3NTdHJpbmdzID0geworICAgIHsgIlJFQURfQUNDRVNTIiwgIlVOS05PV05fUkVBRF9BQ0NFU1MiLCAiVU5LTk9XTl9ERUZJTkVEX0FDQ0VTUyIsCisgICAgICAiTU9ESUZJRURfQUNDRVNTIiwgIlJFTU9WRURfQUNDRVNTIiwgIk5PX0FDQ0VTUyIgfQorICB9OwogICBpZiAoYWNjZXNzX3R5cGUgPCAwIHx8IGFjY2Vzc190eXBlID49IGNtVmFyaWFibGVXYXRjaDo6Tk9fQUNDRVNTKSB7Ci0gICAgcmV0dXJuICJOT19BQ0NFU1MiOworICAgIGFjY2Vzc190eXBlID0gY21WYXJpYWJsZVdhdGNoOjpOT19BQ0NFU1M7CiAgIH0KICAgcmV0dXJuIGNtVmFyaWFibGVXYXRjaEFjY2Vzc1N0cmluZ3NbYWNjZXNzX3R5cGVdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmFyaWFibGVXYXRjaC5oIGIvU291cmNlL2NtVmFyaWFibGVXYXRjaC5oCmluZGV4IGU0YjNiN2MuLjZjNDE4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guaAorKysgYi9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICovCiAgIGVudW0KICAgewotICAgIFZBUklBQkxFX1JFQURfQUNDRVNTID0gMCwKKyAgICBWQVJJQUJMRV9SRUFEX0FDQ0VTUywKICAgICBVTktOT1dOX1ZBUklBQkxFX1JFQURfQUNDRVNTLAogICAgIFVOS05PV05fVkFSSUFCTEVfREVGSU5FRF9BQ0NFU1MsCiAgICAgVkFSSUFCTEVfTU9ESUZJRURfQUNDRVNTLApAQCAtNTcsNyArNTcsNyBAQAogICAvKioKICAgICogUmV0dXJuIHRoZSBhY2Nlc3MgYXMgc3RyaW5nCiAgICAqLwotICBzdGF0aWMgY29uc3QgY2hhciogR2V0QWNjZXNzQXNTdHJpbmcoaW50IGFjY2Vzc190eXBlKTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRBY2Nlc3NBc1N0cmluZyhpbnQgYWNjZXNzX3R5cGUpOwogCiBwcm90ZWN0ZWQ6CiAgIHN0cnVjdCBQYWlyCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoQ29tbWFuZC5jeHgKaW5kZXggZjJjOGYzYy4uMzViOWExZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmFyaWFibGVXYXRjaENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2hDb21tYW5kLmN4eApAQCAtMiw2ICsyLDcgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtVmFyaWFibGVXYXRjaENvbW1hbmQuaCIKIAorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIApAQCAtMTQsMTcgKzE1LDE5IEBACiAjaW5jbHVkZSAiY21WYXJpYWJsZVdhdGNoLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAorY2xhc3MgY21Mb2NhbEdlbmVyYXRvcjsKKworbmFtZXNwYWNlIHsKIHN0cnVjdCBjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEKIHsKICAgYm9vbCBJbkNhbGxiYWNrOwogICBzdGQ6OnN0cmluZyBDb21tYW5kOwogfTsKIAotc3RhdGljIHZvaWQgY21WYXJpYWJsZVdhdGNoQ29tbWFuZFZhcmlhYmxlQWNjZXNzZWQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjY2Vzc190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2xpZW50X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuZXdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTWFrZWZpbGUqIG1mKQordm9pZCBjbVZhcmlhYmxlV2F0Y2hDb21tYW5kVmFyaWFibGVBY2Nlc3NlZChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY2Nlc3NfdHlwZSwgdm9pZCogY2xpZW50X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5ld1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbU1ha2VmaWxlKiBtZikKIHsKICAgY21WYXJpYWJsZVdhdGNoQ2FsbGJhY2tEYXRhKiBkYXRhID0KICAgICBzdGF0aWNfY2FzdDxjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEqPihjbGllbnRfZGF0YSk7CkBAIC0zNCw0MCArMzcsMzUgQEAKICAgfQogICBkYXRhLT5JbkNhbGxiYWNrID0gdHJ1ZTsKIAotICBjbUxpc3RGaWxlRnVuY3Rpb24gbmV3TEZGOwotICBjbUxpc3RGaWxlQXJndW1lbnQgYXJnOwotICBib29sIHByb2Nlc3NlZCA9IGZhbHNlOwotICBjb25zdCBjaGFyKiBhY2Nlc3NTdHJpbmcgPSBjbVZhcmlhYmxlV2F0Y2g6OkdldEFjY2Vzc0FzU3RyaW5nKGFjY2Vzc190eXBlKTsKLSAgY29uc3QgY2hhciogY3VycmVudExpc3RGaWxlID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NVUlJFTlRfTElTVF9GSUxFIik7CisgIGF1dG8gYWNjZXNzU3RyaW5nID0gY21WYXJpYWJsZVdhdGNoOjpHZXRBY2Nlc3NBc1N0cmluZyhhY2Nlc3NfdHlwZSk7CiAKICAgLy8vIFVsdHJhIGJhZCEhCiAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gY29uc3RfY2FzdDxjbU1ha2VmaWxlKj4obWYpOwogCiAgIHN0ZDo6c3RyaW5nIHN0YWNrID0gbWFrZWZpbGUtPkdldFByb3BlcnR5KCJMSVNURklMRV9TVEFDSyIpOwogICBpZiAoIWRhdGEtPkNvbW1hbmQuZW1wdHkoKSkgewotICAgIG5ld0xGRi5Bcmd1bWVudHMuY2xlYXIoKTsKLSAgICBuZXdMRkYuQXJndW1lbnRzLmVtcGxhY2VfYmFjayh2YXJpYWJsZSwgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsIDk5OTkpOwotICAgIG5ld0xGRi5Bcmd1bWVudHMuZW1wbGFjZV9iYWNrKGFjY2Vzc1N0cmluZywgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OSk7Ci0gICAgbmV3TEZGLkFyZ3VtZW50cy5lbXBsYWNlX2JhY2sobmV3VmFsdWUgPyBuZXdWYWx1ZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVBcmd1bWVudDo6UXVvdGVkLCA5OTk5KTsKLSAgICBuZXdMRkYuQXJndW1lbnRzLmVtcGxhY2VfYmFjayhjdXJyZW50TGlzdEZpbGUsIGNtTGlzdEZpbGVBcmd1bWVudDo6UXVvdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTkpOwotICAgIG5ld0xGRi5Bcmd1bWVudHMuZW1wbGFjZV9iYWNrKHN0YWNrLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwgOTk5OSk7CisgICAgY21MaXN0RmlsZUZ1bmN0aW9uIG5ld0xGRjsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBjdXJyZW50TGlzdEZpbGUgPQorICAgICAgbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NVUlJFTlRfTElTVF9GSUxFIik7CisgICAgY29uc3QgYXV0byBmYWtlTGluZU5vID0KKyAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUoY21MaXN0RmlsZUFyZ3VtZW50OjpMaW5lKT46Om1heCgpOworICAgIG5ld0xGRi5Bcmd1bWVudHMgPSB7CisgICAgICB7IHZhcmlhYmxlLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwgZmFrZUxpbmVObyB9LAorICAgICAgeyBhY2Nlc3NTdHJpbmcsIGNtTGlzdEZpbGVBcmd1bWVudDo6UXVvdGVkLCBmYWtlTGluZU5vIH0sCisgICAgICB7IG5ld1ZhbHVlID8gbmV3VmFsdWUgOiAiIiwgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsIGZha2VMaW5lTm8gfSwKKyAgICAgIHsgY3VycmVudExpc3RGaWxlLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwgZmFrZUxpbmVObyB9LAorICAgICAgeyBzdGFjaywgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsIGZha2VMaW5lTm8gfQorICAgIH07CiAgICAgbmV3TEZGLk5hbWUgPSBkYXRhLT5Db21tYW5kOwotICAgIG5ld0xGRi5MaW5lID0gOTk5OTsKKyAgICBuZXdMRkYuTGluZSA9IGZha2VMaW5lTm87CiAgICAgY21FeGVjdXRpb25TdGF0dXMgc3RhdHVzKCptYWtlZmlsZSk7CiAgICAgaWYgKCFtYWtlZmlsZS0+RXhlY3V0ZUNvbW1hbmQobmV3TEZGLCBzdGF0dXMpKSB7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKICAgICAgICAgY21TdHJDYXQoIkVycm9yIGluIGNtYWtlIGNvZGUgYXRcblVua25vd246MDpcbkEgY29tbWFuZCBmYWlsZWQgIgogICAgICAgICAgICAgICAgICAiZHVyaW5nIHRoZSBpbnZvY2F0aW9uIG9mIGNhbGxiYWNrIFwiIiwKICAgICAgICAgICAgICAgICAgZGF0YS0+Q29tbWFuZCwgIlwiLiIpKTsKLSAgICAgIGRhdGEtPkluQ2FsbGJhY2sgPSBmYWxzZTsKLSAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHJvY2Vzc2VkID0gdHJ1ZTsKLSAgfQotICBpZiAoIXByb2Nlc3NlZCkgeworICB9IGVsc2UgewogICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCiAgICAgICBNZXNzYWdlVHlwZTo6TE9HLAogICAgICAgY21TdHJDYXQoIlZhcmlhYmxlIFwiIiwgdmFyaWFibGUsICJcIiB3YXMgYWNjZXNzZWQgdXNpbmcgIiwgYWNjZXNzU3RyaW5nLApAQCAtNzcsNyArNzUsNyBAQAogICBkYXRhLT5JbkNhbGxiYWNrID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGRlbGV0ZVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEodm9pZCogY2xpZW50X2RhdGEpCit2b2lkIGRlbGV0ZVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEodm9pZCogY2xpZW50X2RhdGEpCiB7CiAgIGNtVmFyaWFibGVXYXRjaENhbGxiYWNrRGF0YSogZGF0YSA9CiAgICAgc3RhdGljX2Nhc3Q8Y21WYXJpYWJsZVdhdGNoQ2FsbGJhY2tEYXRhKj4oY2xpZW50X2RhdGEpOwpAQCAtOTEsMTggKzg5LDE4IEBACiBwdWJsaWM6CiAgIC8qIE5PTElOVE5FWFRMSU5FKHBlcmZvcm1hbmNlLXVubmVjZXNzYXJ5LXZhbHVlLXBhcmFtKSAqLwogICBGaW5hbEFjdGlvbihjbU1ha2VmaWxlKiBtYWtlZmlsZSwgc3RkOjpzdHJpbmcgdmFyaWFibGUpCi0gICAgOiBBY3Rpb24oc3RkOjptYWtlX3NoYXJlZDxJbXBsPihtYWtlZmlsZSwgc3RkOjptb3ZlKHZhcmlhYmxlKSkpCisgICAgOiBBY3Rpb257IHN0ZDo6bWFrZV9zaGFyZWQ8SW1wbD4obWFrZWZpbGUsIHN0ZDo6bW92ZSh2YXJpYWJsZSkpIH0KICAgewogICB9CiAKLSAgdm9pZCBvcGVyYXRvcigpKGNtTWFrZWZpbGUmKSBjb25zdCB7fQorICB2b2lkIG9wZXJhdG9yKCkoY21Mb2NhbEdlbmVyYXRvciYsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmKSBjb25zdCB7fQogCiBwcml2YXRlOgogICBzdHJ1Y3QgSW1wbAogICB7CiAgICAgSW1wbChjbU1ha2VmaWxlKiBtYWtlZmlsZSwgc3RkOjpzdHJpbmcgdmFyaWFibGUpCi0gICAgICA6IE1ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgLCBWYXJpYWJsZShzdGQ6Om1vdmUodmFyaWFibGUpKQorICAgICAgOiBNYWtlZmlsZXsgbWFrZWZpbGUgfQorICAgICAgLCBWYXJpYWJsZXsgc3RkOjptb3ZlKHZhcmlhYmxlKSB9CiAgICAgewogICAgIH0KIApAQCAtMTEyLDEyICsxMTAsMTMgQEAKICAgICAgICAgdGhpcy0+VmFyaWFibGUsIGNtVmFyaWFibGVXYXRjaENvbW1hbmRWYXJpYWJsZUFjY2Vzc2VkKTsKICAgICB9CiAKLSAgICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKLSAgICBzdGQ6OnN0cmluZyBWYXJpYWJsZTsKKyAgICBjbU1ha2VmaWxlKiBjb25zdCBNYWtlZmlsZTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBWYXJpYWJsZTsKICAgfTsKIAogICBzdGQ6OnNoYXJlZF9wdHI8SW1wbCBjb25zdD4gQWN0aW9uOwogfTsKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBib29sIGNtVmFyaWFibGVXYXRjaENvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCkBAIC0xMzYsMTAgKzEzNSwxMCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNtVmFyaWFibGVXYXRjaENhbGxiYWNrRGF0YSogZGF0YSA9IG5ldyBjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGE7CisgIGF1dG8qIGNvbnN0IGRhdGEgPSBuZXcgY21WYXJpYWJsZVdhdGNoQ2FsbGJhY2tEYXRhOwogCiAgIGRhdGEtPkluQ2FsbGJhY2sgPSBmYWxzZTsKLSAgZGF0YS0+Q29tbWFuZCA9IGNvbW1hbmQ7CisgIGRhdGEtPkNvbW1hbmQgPSBzdGQ6Om1vdmUoY29tbWFuZCk7CiAKICAgaWYgKCFzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCktPkdldFZhcmlhYmxlV2F0Y2goKS0+QWRkV2F0Y2goCiAgICAgICAgIHZhcmlhYmxlLCBjbVZhcmlhYmxlV2F0Y2hDb21tYW5kVmFyaWFibGVBY2Nlc3NlZCwgZGF0YSwKQEAgLTE0OCw3ICsxNDcsNyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZEZpbmFsQWN0aW9uKAotICAgIEZpbmFsQWN0aW9uKCZzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUpKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkR2VuZXJhdG9yQWN0aW9uKAorICAgIEZpbmFsQWN0aW9ueyAmc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlIH0pOwogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCBmMjIwZWE1Li5hYmM4YjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC02LDYgKzYsOCBAQAogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbS92ZWN0b3I+CiAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKQEAgLTIxLDYgKzIzLDcgQEAKICNpbmNsdWRlICJjbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucy5oIgogCkBAIC01Miw3ICs1NSw3IEBACiAgIGJvb2wgSGFzQ29udGVudCA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBUYWc7CiAKLSAgRWxlbShzdGQ6Om9zdHJlYW0mIHMsIGNvbnN0IGNoYXIqIHRhZykKKyAgRWxlbShzdGQ6Om9zdHJlYW0mIHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YWcpCiAgICAgOiBTKHMpCiAgICAgLCBJbmRlbnQoMCkKICAgICAsIFRhZyh0YWcpCkBAIC02MCwxMCArNjMsMTAgQEAKICAgICB0aGlzLT5TdGFydEVsZW1lbnQoKTsKICAgfQogICBFbGVtKGNvbnN0IEVsZW0mKSA9IGRlbGV0ZTsKLSAgRWxlbShFbGVtJiBwYXIsIGNvbnN0IGNoYXIqIHRhZykKKyAgRWxlbShFbGVtJiBwYXIsIGNtOjpzdHJpbmdfdmlldyB0YWcpCiAgICAgOiBTKHBhci5TKQogICAgICwgSW5kZW50KHBhci5JbmRlbnQgKyAxKQotICAgICwgVGFnKHRhZykKKyAgICAsIFRhZyhzdGQ6OnN0cmluZyh0YWcpKQogICB7CiAgICAgcGFyLlNldEhhc0VsZW1lbnRzKCk7CiAgICAgdGhpcy0+U3RhcnRFbGVtZW50KCk7CkBAIC03MSwyOCArNzQsMjggQEAKICAgdm9pZCBTZXRIYXNFbGVtZW50cygpCiAgIHsKICAgICBpZiAoIUhhc0VsZW1lbnRzKSB7Ci0gICAgICB0aGlzLT5TIDw8ICI+XG4iOworICAgICAgdGhpcy0+UyA8PCAiPiI7CiAgICAgICBIYXNFbGVtZW50cyA9IHRydWU7CiAgICAgfQogICB9CiAgIHN0ZDo6b3N0cmVhbSYgV3JpdGVTdHJpbmcoY29uc3QgY2hhciogbGluZSk7CiAgIHZvaWQgU3RhcnRFbGVtZW50KCkgeyB0aGlzLT5Xcml0ZVN0cmluZygiPCIpIDw8IHRoaXMtPlRhZzsgfQotICB2b2lkIEVsZW1lbnQoY29uc3QgY2hhciogdGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsKQorICB2b2lkIEVsZW1lbnQoY206OnN0cmluZ192aWV3IHRhZywgc3RkOjpzdHJpbmcgdmFsKQogICB7Ci0gICAgRWxlbSgqdGhpcywgdGFnKS5Db250ZW50KHZhbCk7CisgICAgRWxlbSgqdGhpcywgdGFnKS5Db250ZW50KHN0ZDo6bW92ZSh2YWwpKTsKICAgfQotICBFbGVtJiBBdHRyaWJ1dGUoY29uc3QgY2hhciogYW4sIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdikKKyAgRWxlbSYgQXR0cmlidXRlKGNvbnN0IGNoYXIqIGFuLCBzdGQ6OnN0cmluZyBhdikKICAgewotICAgIHRoaXMtPlMgPDwgIiAiIDw8IGFuIDw8ICI9XCIiIDw8IGNtVlMxMEVzY2FwZUF0dHIoYXYpIDw8ICJcIiI7CisgICAgdGhpcy0+UyA8PCAiICIgPDwgYW4gPDwgIj1cIiIgPDwgY21WUzEwRXNjYXBlQXR0cihzdGQ6Om1vdmUoYXYpKSA8PCAiXCIiOwogICAgIHJldHVybiAqdGhpczsKICAgfQotICB2b2lkIENvbnRlbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbCkKKyAgdm9pZCBDb250ZW50KHN0ZDo6c3RyaW5nIHZhbCkKICAgewogICAgIGlmICghdGhpcy0+SGFzQ29udGVudCkgewogICAgICAgdGhpcy0+UyA8PCAiPiI7CiAgICAgICB0aGlzLT5IYXNDb250ZW50ID0gdHJ1ZTsKICAgICB9Ci0gICAgdGhpcy0+UyA8PCBjbVZTMTBFc2NhcGVYTUwodmFsKTsKKyAgICB0aGlzLT5TIDw8IGNtVlMxMEVzY2FwZVhNTChzdGQ6Om1vdmUodmFsKSk7CiAgIH0KICAgfkVsZW0oKQogICB7CkBAIC0xMDMsMTkgKzEwNiwxNCBAQAogCiAgICAgaWYgKEhhc0VsZW1lbnRzKSB7CiAgICAgICB0aGlzLT5Xcml0ZVN0cmluZygiPC8iKSA8PCB0aGlzLT5UYWcgPDwgIj4iOwotICAgICAgaWYgKHRoaXMtPkluZGVudCA+IDApIHsKLSAgICAgICAgdGhpcy0+UyA8PCAnXG4nOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkb24ndCBwcmludCBFT0wgYXQgRU9GCi0gICAgICB9CiAgICAgfSBlbHNlIGlmIChIYXNDb250ZW50KSB7Ci0gICAgICB0aGlzLT5TIDw8ICI8LyIgPDwgdGhpcy0+VGFnIDw8ICI+XG4iOworICAgICAgdGhpcy0+UyA8PCAiPC8iIDw8IHRoaXMtPlRhZyA8PCAiPiI7CiAgICAgfSBlbHNlIHsKLSAgICAgIHRoaXMtPlMgPDwgIiAvPlxuIjsKKyAgICAgIHRoaXMtPlMgPDwgIiAvPiI7CiAgICAgfQogICB9CiAKLSAgdm9pZCBXcml0ZVBsYXRmb3JtQ29uZmlnVGFnKGNvbnN0IGNoYXIqIHRhZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmQsCisgIHZvaWQgV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZyhjb25zdCBzdGQ6OnN0cmluZyYgdGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50KTsKIH07CiAKQEAgLTEzMSw4ICsxMjksOCBAQAogICB7CiAgIH0KIAotICB2b2lkIE91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiAvKmZvdXQqLywgaW50IC8qaW5kZW50Ki8sIGNvbnN0IGNoYXIqIHRhZywKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50KSBvdmVycmlkZQorICB2b2lkIE91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiAvKmZvdXQqLywgaW50IC8qaW5kZW50Ki8sCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCkgb3ZlcnJpZGUKICAgewogICAgIGlmICghdGhpcy0+R2V0Q29uZmlndXJhdGlvbigpLmVtcHR5KCkpIHsKICAgICAgIC8vIGlmIHRoZXJlIGFyZSBjb25maWd1cmF0aW9uIHNwZWNpZmljIGZsYWdzLCB0aGVuCkBAIC0yNzQsNyArMjcyLDcgQEAKIH0KIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpFbGVtOjpXcml0ZVBsYXRmb3JtQ29uZmlnVGFnKAotICBjb25zdCBjaGFyKiB0YWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25kLCBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50KQogewogICBFbGVtKCp0aGlzLCB0YWcpLkF0dHJpYnV0ZSgiQ29uZGl0aW9uIiwgY29uZCkuQ29udGVudChjb250ZW50KTsKIH0KQEAgLTI4Miw2ICsyODAsNyBAQAogc3RkOjpvc3RyZWFtJiBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpFbGVtOjpXcml0ZVN0cmluZygKICAgY29uc3QgY2hhciogbGluZSkKIHsKKyAgdGhpcy0+UyA8PCAnXG4nOwogICB0aGlzLT5TLmZpbGwoJyAnKTsKICAgdGhpcy0+Uy53aWR0aCh0aGlzLT5JbmRlbnQgKiAyKTsKICAgLy8gd3JpdGUgYW4gZW1wdHkgc3RyaW5nIHRvIGdldCB0aGUgZmlsbCBsZXZlbCBpbmRlbnQgdG8gcHJpbnQKQEAgLTMzNCw5ICszMzMsOSBAQAogICB9CiAgIC8vIFRlbGwgdGhlIGdsb2JhbCBnZW5lcmF0b3IgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgZmlsZQogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk5hbWUpOwogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUVfRVhUIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RGaWxlRXh0ZW5zaW9uLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdEZpbGVFeHRlbnNpb24pOwogICB0aGlzLT5Eb3ROZXRIaW50UmVmZXJlbmNlcy5jbGVhcigpOwogICB0aGlzLT5BZGRpdGlvbmFsVXNpbmdEaXJlY3Rvcmllcy5jbGVhcigpOwogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPD0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgewpAQCAtMzc2LDggKzM3NSw3IEBACiAgIGNoYXIgbWFnaWNbXSA9IHsgY2hhcigweEVGKSwgY2hhcigweEJCKSwgY2hhcigweEJGKSB9OwogICBCdWlsZEZpbGVTdHJlYW0ud3JpdGUobWFnaWMsIDMpOwogICBCdWlsZEZpbGVTdHJlYW0gPDwgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIKLSAgICAgICAgICAgICAgICAgIDw8IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+RW5jb2RpbmcoKSA8PCAiXCI/PiIKLSAgICAgICAgICAgICAgICAgIDw8ICJcbiI7CisgICAgICAgICAgICAgICAgICA8PCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkVuY29kaW5nKCkgPDwgIlwiPz4iOwogICB7CiAgICAgRWxlbSBlMChCdWlsZEZpbGVTdHJlYW0sICJQcm9qZWN0Iik7CiAgICAgZTAuQXR0cmlidXRlKCJEZWZhdWx0VGFyZ2V0cyIsICJCdWlsZCIpOwpAQCAtNDg4LDIzICs0ODYsMzMgQEAKICAgICAgIH0KICAgICAgIGUxLkVsZW1lbnQoIlByb2plY3ROYW1lIiwgcHJvakxhYmVsKTsKICAgICAgIHsKLSAgICAgICAgLy8gVE9ETzogYWRkIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIFZTXyogcHJvcGVydHk/Ci0gICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldEZyYW1ld29ya1ZlcnNpb24gPQotICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCi0gICAgICAgICAgICAiVlNfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTiIpOwotICAgICAgICBpZiAoIXRhcmdldEZyYW1ld29ya1ZlcnNpb24pIHsKLSAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKLSAgICAgICAgICAgICJET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXdvcmtWZXJzaW9uICYmIHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJgotICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c0NFKCkgJiYKLSAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0VmVyc2lvbigpID09Ci0gICAgICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEyKSB7Ci0gICAgICAgICAgLy8gVlMxMiAuTkVUQ0YgZGVmYXVsdCB0byAuTkVUIGZyYW1ld29yayAzLjkKLSAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0gInYzLjkiOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0YXJnZXRGcmFtZXdvcmtWZXJzaW9uKSB7Ci0gICAgICAgICAgZTEuRWxlbWVudCgiVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiIsIHRhcmdldEZyYW1ld29ya1ZlcnNpb24pOworICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmsgPQorICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkRPVE5FVF9UQVJHRVRfRlJBTUVXT1JLIik7CisgICAgICAgIGlmICh0YXJnZXRGcmFtZXdvcmspIHsKKyAgICAgICAgICBpZiAoc3RkOjpzdHJjaHIodGFyZ2V0RnJhbWV3b3JrLCAnOycpICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29ya3MiLCB0YXJnZXRGcmFtZXdvcmspOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmsiLCB0YXJnZXRGcmFtZXdvcmspOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBUT0RPOiBhZGQgZGVwcmVjYXRpb24gd2FybmluZyBmb3IgVlNfKiBwcm9wZXJ0eT8KKyAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0KKyAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCisgICAgICAgICAgICAgICJWU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OIik7CisgICAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXdvcmtWZXJzaW9uKSB7CisgICAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgIkRPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04iKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXdvcmtWZXJzaW9uICYmIHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJgorICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzQ0UoKSAmJgorICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFZlcnNpb24oKSA9PQorICAgICAgICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEyKSB7CisgICAgICAgICAgICAvLyBWUzEyIC5ORVRDRiBkZWZhdWx0IHRvIC5ORVQgZnJhbWV3b3JrIDMuOQorICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA9ICJ2My45IjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRhcmdldEZyYW1ld29ya1ZlcnNpb24pIHsKKyAgICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29ya1ZlcnNpb24iLCB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IHZjeHByb2ogJiYKICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NDRSgpKSB7CkBAIC01NDMsMTIgKzU1MSwxOCBAQAogICAgICAgICBlMS5FbGVtZW50KCJWQ1Byb2plY3RVcGdyYWRlck9iamVjdE5hbWUiLCAiTm9VcGdyYWRlIik7CiAgICAgICB9CiAKKyAgICAgIGlmIChjb25zdCBjaGFyKiB2Y1RhcmdldHNQYXRoID0KKyAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q3VzdG9tVkNUYXJnZXRzUGF0aCgpKSB7CisgICAgICAgIGUxLkVsZW1lbnQoIlZDVGFyZ2V0c1BhdGgiLCB2Y1RhcmdldHNQYXRoKTsKKyAgICAgIH0KKwogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleXMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5S2V5cygpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYga2V5SXQgOiBrZXlzKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcmVmaXggPSAiVlNfR0xPQkFMXyI7Ci0gICAgICAgIGlmIChrZXlJdC5maW5kKHByZWZpeCkgIT0gMCkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBwcmVmaXggPSAiVlNfR0xPQkFMXyI7CisgICAgICAgIGlmICghY21IYXNQcmVmaXgoa2V5SXQsIHByZWZpeCkpCiAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGdsb2JhbEtleSA9IGtleUl0LnN1YnN0cihzdHJsZW4ocHJlZml4KSk7CisgICAgICAgIGNtOjpzdHJpbmdfdmlldyBnbG9iYWxLZXkgPQorICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhrZXlJdCkuc3Vic3RyKHByZWZpeC5sZW5ndGgoKSk7CiAgICAgICAgIC8vIFNraXAgaW52YWxpZCBvciBzZXBhcmF0ZWx5LWhhbmRsZWQgcHJvcGVydGllcy4KICAgICAgICAgaWYgKGdsb2JhbEtleS5lbXB0eSgpIHx8IGdsb2JhbEtleSA9PSAiUFJPSkVDVF9UWVBFUyIgfHwKICAgICAgICAgICAgIGdsb2JhbEtleSA9PSAiUk9PVE5BTUVTUEFDRSIgfHwgZ2xvYmFsS2V5ID09ICJLRVlXT1JEIikgewpAQCAtNTU3LDcgKzU3MSw3IEBACiAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShrZXlJdCk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGUxLkVsZW1lbnQoZ2xvYmFsS2V5LmNfc3RyKCksIHZhbHVlKTsKKyAgICAgICAgZTEuRWxlbWVudChnbG9iYWxLZXksIHZhbHVlKTsKICAgICAgIH0KIAogICAgICAgaWYgKHRoaXMtPk1hbmFnZWQpIHsKQEAgLTY3Niw2ICs2OTAsOCBAQAogCiAgICAgICB0aGlzLT5Xcml0ZVBsYXRmb3JtRXh0ZW5zaW9ucyhlMSk7CiAgICAgfQorCisgICAgdGhpcy0+V3JpdGVEb3ROZXREb2N1bWVudGF0aW9uRmlsZShlMCk7CiAgICAgRWxlbShlMCwgIlByb3BlcnR5R3JvdXAiKS5BdHRyaWJ1dGUoIkxhYmVsIiwgIlVzZXJNYWNyb3MiKTsKICAgICB0aGlzLT5Xcml0ZVdpblJUUGFja2FnZUNlcnRpZmljYXRlS2V5RmlsZShlMCk7CiAgICAgdGhpcy0+V3JpdGVQYXRoQW5kSW5jcmVtZW50YWxMaW5rT3B0aW9ucyhlMCk7CkBAIC03NzcsMjEgKzc5MywxNCBAQAogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJpIDogcGFja2FnZVJlZmVyZW5jZXMpIHsKICAgICAgIHNpemVfdCB2ZXJzaW9uSW5kZXggPSByaS5maW5kX2xhc3Rfb2YoJ18nKTsKICAgICAgIGlmICh2ZXJzaW9uSW5kZXggIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgV3JpdGVQYWNrYWdlUmVmZXJlbmNlKGUxLCByaS5zdWJzdHIoMCwgdmVyc2lvbkluZGV4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpLnN1YnN0cih2ZXJzaW9uSW5kZXggKyAxKSk7CisgICAgICAgIEVsZW0gZTIoZTEsICJQYWNrYWdlUmVmZXJlbmNlIik7CisgICAgICAgIGUyLkF0dHJpYnV0ZSgiSW5jbHVkZSIsIHJpLnN1YnN0cigwLCB2ZXJzaW9uSW5kZXgpKTsKKyAgICAgICAgZTIuQXR0cmlidXRlKCJWZXJzaW9uIiwgcmkuc3Vic3RyKHZlcnNpb25JbmRleCArIDEpKTsKICAgICAgIH0KICAgICB9CiAgIH0KIH0KIAotdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVBhY2thZ2VSZWZlcmVuY2UoCi0gIEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgcmVmLCBzdGQ6OnN0cmluZyBjb25zdCYgdmVyc2lvbikKLXsKLSAgRWxlbSBlMihlMSwgIlBhY2thZ2VSZWZlcmVuY2UiKTsKLSAgZTIuQXR0cmlidXRlKCJJbmNsdWRlIiwgcmVmKTsKLSAgZTIuQXR0cmlidXRlKCJWZXJzaW9uIiwgdmVyc2lvbik7Ci19Ci0KIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEb3ROZXRSZWZlcmVuY2VzKEVsZW0mIGUwKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVmZXJlbmNlczsKQEAgLTgwMSwxNyArODEwLDE1IEBACiAgIH0KICAgY21Qcm9wZXJ0eU1hcCBjb25zdCYgcHJvcHMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+R2V0UHJvcGVydGllcygpOwogICBmb3IgKGF1dG8gY29uc3QmIGkgOiBwcm9wcy5HZXRMaXN0KCkpIHsKLSAgICBpZiAoaS5maXJzdC5maW5kKCJWU19ET1RORVRfUkVGRVJFTkNFXyIpID09IDApIHsKLSAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBpLmZpcnN0LnN1YnN0cigyMCk7Ci0gICAgICBpZiAoIW5hbWUuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OnN0cmluZyBwYXRoID0gaS5zZWNvbmQ7Ci0gICAgICAgIGlmICghY21zeXM6OlN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChwYXRoKSkgewotICAgICAgICAgIHBhdGggPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpICsgIi8iICsgcGF0aDsKLSAgICAgICAgfQotICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocGF0aCk7Ci0gICAgICAgIHRoaXMtPkRvdE5ldEhpbnRSZWZlcmVuY2VzWyIiXS5wdXNoX2JhY2soCi0gICAgICAgICAgRG90TmV0SGludFJlZmVyZW5jZShuYW1lLCBwYXRoKSk7CisgICAgc3RhdGljIGNvbnN0IGNtOjpzdHJpbmdfdmlldyB2c0RuUmVmID0gIlZTX0RPVE5FVF9SRUZFUkVOQ0VfIjsKKyAgICBpZiAoY21IYXNQcmVmaXgoaS5maXJzdCwgdnNEblJlZikpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBpLnNlY29uZDsKKyAgICAgIGlmICghY21zeXM6OlN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChwYXRoKSkgeworICAgICAgICBwYXRoID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSArICIvIiArIHBhdGg7CiAgICAgICB9CisgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocGF0aCk7CisgICAgICB0aGlzLT5Eb3ROZXRIaW50UmVmZXJlbmNlc1siIl0uZW1wbGFjZV9iYWNrKAorICAgICAgICBEb3ROZXRIaW50UmVmZXJlbmNlKGkuZmlyc3Quc3Vic3RyKHZzRG5SZWYubGVuZ3RoKCkpLCBwYXRoKSk7CiAgICAgfQogICB9CiAgIGlmICghcmVmZXJlbmNlcy5lbXB0eSgpIHx8ICF0aGlzLT5Eb3ROZXRIaW50UmVmZXJlbmNlcy5lbXB0eSgpKSB7CkBAIC04MjQsNyArODMxLDcgQEAKICAgICAgICAgICBjbXN5czo6U3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lV2l0aG91dExhc3RFeHRlbnNpb24ocmkpOwogICAgICAgICBzdGQ6OnN0cmluZyBwYXRoID0gcmk7CiAgICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChwYXRoKTsKLSAgICAgICAgdGhpcy0+RG90TmV0SGludFJlZmVyZW5jZXNbIiJdLnB1c2hfYmFjaygKKyAgICAgICAgdGhpcy0+RG90TmV0SGludFJlZmVyZW5jZXNbIiJdLmVtcGxhY2VfYmFjaygKICAgICAgICAgICBEb3ROZXRIaW50UmVmZXJlbmNlKG5hbWUsIHBhdGgpKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHRoaXMtPldyaXRlRG90TmV0UmVmZXJlbmNlKGUxLCByaSwgIiIsICIiKTsKQEAgLTg5NywxNiArOTA0LDI0IEBACiAgIEN1c3RvbVRhZ3MgdGFnczsKICAgY21Qcm9wZXJ0eU1hcCBjb25zdCYgcHJvcHMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+R2V0UHJvcGVydGllcygpOwogICBmb3IgKGNvbnN0IGF1dG8mIGkgOiBwcm9wcy5HZXRMaXN0KCkpIHsKLSAgICBpZiAoaS5maXJzdC5maW5kKHJlZlByb3BGdWxsUHJlZml4KSA9PSAwKSB7Ci0gICAgICBzdGQ6OnN0cmluZyByZWZUYWcgPSBpLmZpcnN0LnN1YnN0cihyZWZQcm9wRnVsbFByZWZpeC5sZW5ndGgoKSk7Ci0gICAgICBzdGQ6OnN0cmluZyByZWZWYWwgPSBpLnNlY29uZDsKLSAgICAgIGlmICghcmVmVGFnLmVtcHR5KCkgJiYgIXJlZlZhbC5lbXB0eSgpKSB7Ci0gICAgICAgIHRhZ3NbcmVmVGFnXSA9IHJlZlZhbDsKLSAgICAgIH0KKyAgICBpZiAoY21IYXNQcmVmaXgoaS5maXJzdCwgcmVmUHJvcEZ1bGxQcmVmaXgpICYmICFpLnNlY29uZC5lbXB0eSgpKSB7CisgICAgICB0YWdzW2kuZmlyc3Quc3Vic3RyKHJlZlByb3BGdWxsUHJlZml4Lmxlbmd0aCgpKV0gPSBpLnNlY29uZDsKICAgICB9CiAgIH0KICAgZm9yIChhdXRvIGNvbnN0JiB0YWcgOiB0YWdzKSB7Ci0gICAgZTIuRWxlbWVudCh0YWcuZmlyc3QuY19zdHIoKSwgdGFnLnNlY29uZCk7CisgICAgZTIuRWxlbWVudCh0YWcuZmlyc3QsIHRhZy5zZWNvbmQpOworICB9Cit9CisKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEb3ROZXREb2N1bWVudGF0aW9uRmlsZShFbGVtJiBlMCkKK3sKKyAgc3RkOjpzdHJpbmcgY29uc3QgZG9jdW1lbnRhdGlvbkZpbGUgPQorICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJWU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFIik7CisKKyAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhZG9jdW1lbnRhdGlvbkZpbGUuZW1wdHkoKSkgeworICAgIEVsZW0gZTEoZTAsICJQcm9wZXJ0eUdyb3VwIik7CisgICAgRWxlbSBlMihlMSwgIkRvY3VtZW50YXRpb25GaWxlIik7CisgICAgZTIuQ29udGVudChkb2N1bWVudGF0aW9uRmlsZSk7CiAgIH0KIH0KIApAQCAtOTI3LDcgKzk0Miw3IEBACiAgICAgICAgIC8vIHN1YmRpcmVjdG9yeQogICAgICAgICAvLyBvZiB0aGUgLmNzcHJvaiBmaWxlLCB3ZSBoYXZlIHRvIHVzZSByZWxhdGl2ZSBwYXRobmFtZXMsIG90aGVyd2lzZQogICAgICAgICAvLyB2aXN1YWwgc3R1ZGlvIGRvZXMgbm90IHNob3cgdGhlIGZpbGUgaW4gdGhlIElERS4gU29ycnkuCi0gICAgICAgIGlmIChvYmouZmluZChzcmNEaXIpID09IDApIHsKKyAgICAgICAgaWYgKGNtSGFzUHJlZml4KG9iaiwgc3JjRGlyKSkgewogICAgICAgICAgIG9iaiA9IHRoaXMtPkNvbnZlcnRQYXRoKG9iaiwgdHJ1ZSk7CiAgICAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKG9iaik7CiAgICAgICAgICAgdXNlUmVsYXRpdmVQYXRoID0gdHJ1ZTsKQEAgLTk1NiwxNyArOTcxLDExIEBACiAgICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSB3YXMgTk9UIGFkZGVkIHVzaW5nIGEgcmVsYXRpdmUgcGF0aCAod2hpY2ggc2hvdWxkCiAgICAgICAgIC8vIGJlIHRoZSBkZWZhdWx0KSwgd2UgaGF2ZSB0byBwcm92aWRlIGEgbGluayBoZXJlCiAgICAgICAgIGlmICghdXNlUmVsYXRpdmVQYXRoKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgbGluazsKLSAgICAgICAgICBpZiAob2JqLmZpbmQoc3JjRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgICBsaW5rID0gb2JqLnN1YnN0cihzcmNEaXIubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG9iai5maW5kKGJpbkRpcikgPT0gMCkgewotICAgICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoYmluRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyBsaW5rID0gdGhpcy0+R2V0Q1NoYXJwU291cmNlTGluayhvaSk7CisgICAgICAgICAgaWYgKGxpbmsuZW1wdHkoKSkgewogICAgICAgICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG9iaik7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmICghbGluay5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBlMi5FbGVtZW50KCJMaW5rIiwgbGluayk7Ci0gICAgICAgICAgfQorICAgICAgICAgIGUyLkVsZW1lbnQoIkxpbmsiLCBsaW5rKTsKICAgICAgICAgfQogICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGdlbmVyYXRlZCByZXNvdXJjZSBmcm9tIGEgLkRlc2lnbmVyLmNzIGZpbGUKICAgICAgICAgc3RkOjpzdHJpbmcgZGVzaWduZXJSZXNvdXJjZSA9CkBAIC05ODAsMTAgKzk4OSwxMCBAQAogICAgICAgICAgIH0KICAgICAgICAgICBpZiAoIWdlbmVyYXRvci5lbXB0eSgpKSB7CiAgICAgICAgICAgICBlMi5FbGVtZW50KCJHZW5lcmF0b3IiLCBnZW5lcmF0b3IpOwotICAgICAgICAgICAgaWYgKGRlc2lnbmVyUmVzb3VyY2UuZmluZChzcmNEaXIpID09IDApIHsKLSAgICAgICAgICAgICAgZGVzaWduZXJSZXNvdXJjZSA9IGRlc2lnbmVyUmVzb3VyY2Uuc3Vic3RyKHNyY0Rpci5sZW5ndGgoKSArIDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNpZ25lclJlc291cmNlLmZpbmQoYmluRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgIGRlc2lnbmVyUmVzb3VyY2UgPSBkZXNpZ25lclJlc291cmNlLnN1YnN0cihiaW5EaXIubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgIGlmIChjbUhhc1ByZWZpeChkZXNpZ25lclJlc291cmNlLCBzcmNEaXIpKSB7CisgICAgICAgICAgICAgIGRlc2lnbmVyUmVzb3VyY2UuZXJhc2UoMCwgc3JjRGlyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY21IYXNQcmVmaXgoZGVzaWduZXJSZXNvdXJjZSwgYmluRGlyKSkgeworICAgICAgICAgICAgICBkZXNpZ25lclJlc291cmNlLmVyYXNlKDAsIGJpbkRpci5sZW5ndGgoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBkZXNpZ25lclJlc291cmNlID0KICAgICAgICAgICAgICAgICBjbXN5czo6U3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShkZXNpZ25lclJlc291cmNlKTsKQEAgLTk5NCwxMyArMTAwMywxNCBAQAogICAgICAgICB9CiAgICAgICAgIGNvbnN0IGNtUHJvcGVydHlNYXAmIHByb3BzID0gb2ktPkdldFByb3BlcnRpZXMoKTsKICAgICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgcCA6IHByb3BzLkdldEtleXMoKSkgewotICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBwcm9wTmFtZVByZWZpeCA9ICJWU19DU0hBUlBfIjsKLSAgICAgICAgICBpZiAocC5maW5kKHByb3BOYW1lUHJlZml4KSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0YWdOYW1lID0gcC5zdWJzdHIocHJvcE5hbWVQcmVmaXgubGVuZ3RoKCkpOworICAgICAgICAgIHN0YXRpYyBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgcHJvcE5hbWVQcmVmaXggPSAiVlNfQ1NIQVJQXyI7CisgICAgICAgICAgaWYgKGNtSGFzUHJlZml4KHAsIHByb3BOYW1lUHJlZml4KSkgeworICAgICAgICAgICAgY206OnN0cmluZ192aWV3IHRhZ05hbWUgPQorICAgICAgICAgICAgICBjbTo6c3RyaW5nX3ZpZXcocCkuc3Vic3RyKHByb3BOYW1lUHJlZml4Lmxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdGFnTmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gcHJvcHMuR2V0UHJvcGVydHlWYWx1ZShwKTsKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlID0gKnByb3BzLkdldFByb3BlcnR5VmFsdWUocCk7CiAgICAgICAgICAgICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGUyLkVsZW1lbnQodGFnTmFtZS5jX3N0cigpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgZTIuRWxlbWVudCh0YWdOYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICB9CkBAIC0xMDI5LDI1ICsxMDM5LDYgQEAKICAgICAgIEVsZW0gZTIoZTEsIHhhbWxUeXBlKTsKICAgICAgIHRoaXMtPldyaXRlU291cmNlKGUyLCBvaSk7CiAgICAgICBlMi5TZXRIYXNFbGVtZW50cygpOwotICAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhdGhpcy0+SW5Tb3VyY2VCdWlsZCkgewotICAgICAgICAvLyBhZGQgPExpbms+IHRhZyB0byB3cml0dGVuIFhBTUwgc291cmNlIGlmIG5lY2Vzc2FyeQotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3JjRGlyID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmluRGlyID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotICAgICAgICBzdGQ6OnN0cmluZyBsaW5rOwotICAgICAgICBpZiAob2JqLmZpbmQoc3JjRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoc3JjRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqLmZpbmQoYmluRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoYmluRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsaW5rLmVtcHR5KCkpIHsKLSAgICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7Ci0gICAgICAgICAgZTIuRWxlbWVudCgiTGluayIsIGxpbmspOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgICBlMi5FbGVtZW50KCJTdWJUeXBlIiwgIkRlc2lnbmVyIik7CiAgICAgfQogICB9CkBAIC0xNDE3LDEzICsxNDA4LDggQEAKICAgfSBlbHNlIHsKICAgICBFbGVtIGUxKGUwLCAiSXRlbUdyb3VwIik7CiAgICAgRWxlbSBlMihlMSwgIk5vbmUiKTsKLSAgICBzdGQ6OnN0cmluZyBsaW5rOwotICAgIHRoaXMtPkdldENTaGFycFNvdXJjZUxpbmsoc291cmNlLCBsaW5rKTsKICAgICB0aGlzLT5Xcml0ZVNvdXJjZShlMiwgc291cmNlKTsKICAgICBlMi5TZXRIYXNFbGVtZW50cygpOwotICAgIGlmICghbGluay5lbXB0eSgpKSB7Ci0gICAgICBlMi5FbGVtZW50KCJMaW5rIiwgbGluayk7Ci0gICAgfQogICB9CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgewogICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY29tbWFuZCwgYywgbGcpOwpAQCAtMTU5OCw4ICsxNTg0LDcgQEAKICAgZm91dC53cml0ZShtYWdpYywgMyk7CiAKICAgZm91dCA8PCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIgotICAgICAgIDw8IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+RW5jb2RpbmcoKSA8PCAiXCI/PiIKLSAgICAgICA8PCAiXG4iOworICAgICAgIDw8IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+RW5jb2RpbmcoKSA8PCAiXCI/PiI7CiAgIHsKICAgICBFbGVtIGUwKGZvdXQsICJQcm9qZWN0Iik7CiAgICAgZTAuQXR0cmlidXRlKCJUb29sc1ZlcnNpb24iLCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFRvb2xzVmVyc2lvbigpKTsKQEAgLTE3MzgsNyArMTcyMyw3IEBACiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZpbHRlciA9IHNvdXJjZUdyb3VwLT5HZXRGdWxsTmFtZSgpOwogICAgIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5Db252ZXJ0UGF0aChzb3VyY2UsIHMuUmVsYXRpdmVQYXRoKTsKICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocGF0aCk7Ci0gICAgRWxlbSBlMihlMSwgbmFtZS5jX3N0cigpKTsKKyAgICBFbGVtIGUyKGUxLCBuYW1lKTsKICAgICBlMi5BdHRyaWJ1dGUoIkluY2x1ZGUiLCBwYXRoKTsKICAgICBpZiAoIWZpbHRlci5lbXB0eSgpKSB7CiAgICAgICBlMi5FbGVtZW50KCJGaWx0ZXIiLCBmaWx0ZXIpOwpAQCAtMTc1NSwyNSArMTc0MCw3MCBAQAogICBpZiAodGhpcy0+SXNSZXN4SGVhZGVyKGZpbGVOYW1lKSkgewogICAgIGUyLkVsZW1lbnQoIkZpbGVUeXBlIiwgIkNwcEZvcm0iKTsKICAgfSBlbHNlIGlmICh0aGlzLT5Jc1hhbWxIZWFkZXIoZmlsZU5hbWUpKSB7Ci0gICAgc3RkOjpzdHJpbmcgeGFtbEZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmZpbmRfbGFzdF9vZigiLiIpKTsKLSAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwgeGFtbEZpbGVOYW1lKTsKKyAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwKKyAgICAgICAgICAgICAgIGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5maW5kX2xhc3Rfb2YoIi4iKSkpOwogICB9CiB9CiAKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6UGFyc2VTZXR0aW5nc1Byb3BlcnR5KAorICBjb25zdCBjaGFyKiBzZXR0aW5nc1Byb3BlcnR5VmFsdWUsIENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncykKK3sKKyAgaWYgKHNldHRpbmdzUHJvcGVydHlWYWx1ZSkgeworICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0KKyAgICAgIGdlLlBhcnNlKHNldHRpbmdzUHJvcGVydHlWYWx1ZSk7CisKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgc3RkOjpzdHJpbmcgZXZhbHVhdGVkID0gY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNldHRpbmdzID0gY21FeHBhbmRlZExpc3QoZXZhbHVhdGVkKTsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHNldHRpbmcgOiBzZXR0aW5ncykgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGFzc2lnbm1lbnQgPSBzZXR0aW5nLmZpbmQoJz0nKTsKKyAgICAgICAgaWYgKGFzc2lnbm1lbnQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwcm9wTmFtZSA9IHNldHRpbmcuc3Vic3RyKDAsIGFzc2lnbm1lbnQpOworICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BWYWx1ZSA9IHNldHRpbmcuc3Vic3RyKGFzc2lnbm1lbnQgKyAxKTsKKworICAgICAgICAgIGlmICghcHJvcFZhbHVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworYm9vbCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpQcm9wZXJ0eUlzU2FtZUluQWxsQ29uZmlncygKKyAgY29uc3QgQ29uZmlnVG9TZXR0aW5ncyYgdG9vbFNldHRpbmdzLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcE5hbWUpCit7CisgIHN0ZDo6c3RyaW5nIGZpcnN0UHJvcFZhbHVlID0gIiI7CisgIGZvciAoY29uc3QgYXV0byYgY29uZmlnVG9TZXR0aW5ncyA6IHRvb2xTZXR0aW5ncykgeworICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzZXR0aW5ncyA9CisgICAgICBjb25maWdUb1NldHRpbmdzLnNlY29uZDsKKworICAgIGlmIChmaXJzdFByb3BWYWx1ZS5lbXB0eSgpKSB7CisgICAgICBpZiAoc2V0dGluZ3MuZmluZChwcm9wTmFtZSkgIT0gc2V0dGluZ3MuZW5kKCkpIHsKKyAgICAgICAgZmlyc3RQcm9wVmFsdWUgPSBzZXR0aW5ncy5maW5kKHByb3BOYW1lKS0+c2Vjb25kOworICAgICAgfQorICAgIH0KKworICAgIGlmIChzZXR0aW5ncy5maW5kKHByb3BOYW1lKSA9PSBzZXR0aW5ncy5lbmQoKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXR0aW5ncy5maW5kKHByb3BOYW1lKS0+c2Vjb25kICE9IGZpcnN0UHJvcFZhbHVlKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVFeHRyYVNvdXJjZShFbGVtJiBlMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUgY29uc3QqIHNmKQogewogICBib29sIHRvb2xIYXNTZXR0aW5ncyA9IGZhbHNlOwogICBjb25zdCBjaGFyKiB0b29sID0gIk5vbmUiOwotICBzdGQ6OnN0cmluZyBzaGFkZXJUeXBlOwotICBzdGQ6OnN0cmluZyBzaGFkZXJFbnRyeVBvaW50OwotICBzdGQ6OnN0cmluZyBzaGFkZXJNb2RlbDsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyQWRkaXRpb25hbEZsYWdzOwotICBzdGQ6OnN0cmluZyBzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9uczsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyRW5hYmxlRGVidWc7Ci0gIHN0ZDo6c3RyaW5nIHNoYWRlck9iamVjdEZpbGVOYW1lOwotICBzdGQ6OnN0cmluZyBvdXRwdXRIZWFkZXJGaWxlOwotICBzdGQ6OnN0cmluZyB2YXJpYWJsZU5hbWU7CiAgIHN0ZDo6c3RyaW5nIHNldHRpbmdzR2VuZXJhdG9yOwogICBzdGQ6OnN0cmluZyBzZXR0aW5nc0xhc3RHZW5PdXRwdXQ7CiAgIHN0ZDo6c3RyaW5nIHNvdXJjZUxpbms7CkBAIC0xNzgxLDc2ICsxODExLDg0IEBACiAgIHN0ZDo6c3RyaW5nIGNvcHlUb091dERpcjsKICAgc3RkOjpzdHJpbmcgaW5jbHVkZUluVnNpeDsKICAgc3RkOjpzdHJpbmcgZXh0ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHNmLT5HZXRFeHRlbnNpb24oKSk7Ci0gIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2opIHsKLSAgICAvLyBFVkVSWSBleHRyYSBzb3VyY2UgZmlsZSBtdXN0IGhhdmUgYSA8TGluaz4sIG90aGVyd2lzZSBpdCBtaWdodCBub3QKLSAgICAvLyBiZSB2aXNpYmxlIGluIFZpc3VhbCBTdHVkaW8gYXQgYWxsLiBUaGUgcGF0aCByZWxhdGl2ZSB0byBjdXJyZW50Ci0gICAgLy8gc291cmNlLSBvciBiaW5hcnktZGlyIGlzIHVzZWQgd2l0aGluIHRoZSBsaW5rLCBpZiB0aGUgZmlsZSBpcwotICAgIC8vIGluIG5vbmUgb2YgdGhlc2UgcGF0aHMsIGl0IGlzIGFkZGVkIHdpdGggdGhlIHBsYWluIGZpbGVuYW1lIHdpdGhvdXQKLSAgICAvLyBhbnkgcGF0aC4gVGhpcyBtZWFucyB0aGUgZmlsZSB3aWxsIHNob3cgdXAgYXQgcm9vdC1sZXZlbCBvZiB0aGUgY3Nwcm9qCi0gICAgLy8gKHdoZXJlIENNYWtlTGlzdHMudHh0IGV0Yy4gYXJlKS4KLSAgICBpZiAoIXRoaXMtPkluU291cmNlQnVpbGQpIHsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7Ci0gICAgICBzdGQ6OnN0cmluZyBmdWxsRmlsZU5hbWUgPSBzZi0+R2V0RnVsbFBhdGgoKTsKLSAgICAgIHN0ZDo6c3RyaW5nIHNyY0RpciA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7Ci0gICAgICBzdGQ6OnN0cmluZyBiaW5EaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotICAgICAgaWYgKGZ1bGxGaWxlTmFtZS5maW5kKGJpbkRpcikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgc291cmNlTGluay5jbGVhcigpOwotICAgICAgfSBlbHNlIGlmIChmdWxsRmlsZU5hbWUuZmluZChzcmNEaXIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHNvdXJjZUxpbmsgPSBmdWxsRmlsZU5hbWUuc3Vic3RyKHNyY0Rpci5sZW5ndGgoKSArIDEpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gZmFsbGJhY2s6IGFkZCBwbGFpbiBmaWxlbmFtZSB3aXRob3V0IGFueSBwYXRoCi0gICAgICAgIHNvdXJjZUxpbmsgPSBjbXN5czo6U3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsRmlsZU5hbWUpOwotICAgICAgfQotICAgICAgaWYgKCFzb3VyY2VMaW5rLmVtcHR5KCkpIHsKLSAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHNvdXJjZUxpbmspOwotICAgICAgfQotICAgIH0KKyAgQ29uZmlnVG9TZXR0aW5ncyB0b29sU2V0dGluZ3M7CisgIGZvciAoY29uc3QgYXV0byYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICB0b29sU2V0dGluZ3NbY29uZmlnXTsKKyAgfQorCisgIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2ogJiYgIXRoaXMtPkluU291cmNlQnVpbGQpIHsKKyAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOwogICB9CiAgIGlmIChleHQgPT0gImhsc2wiKSB7CiAgICAgdG9vbCA9ICJGWENvbXBpbGUiOwogICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHR5cGUgb2Ygc2hhZGVyIGNvbXBpbGVyIHRvIHVzZS4KICAgICBpZiAoY29uc3QgY2hhciogc3QgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9UWVBFIikpIHsKLSAgICAgIHNoYWRlclR5cGUgPSBzdDsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiU2hhZGVyVHlwZSJdID0gc3Q7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggZW50cnkgcG9pbnQgdG8gdXNlIGlmIGFueQogICAgIGlmIChjb25zdCBjaGFyKiBzZSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0VOVFJZUE9JTlQiKSkgewotICAgICAgc2hhZGVyRW50cnlQb2ludCA9IHNlOwotICAgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJFbnRyeVBvaW50TmFtZSJdID0gc2U7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggc2hhZGVyIG1vZGVsIHRvIHVzZSBpZiBhbnkKICAgICBpZiAoY29uc3QgY2hhciogc20gPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9NT0RFTCIpKSB7Ci0gICAgICBzaGFkZXJNb2RlbCA9IHNtOwotICAgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJTaGFkZXJNb2RlbCJdID0gc207CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggb3V0cHV0IGhlYWRlciBmaWxlIHRvIHVzZSBpZiBhbnkKICAgICBpZiAoY29uc3QgY2hhciogb2hmID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfT1VUUFVUX0hFQURFUl9GSUxFIikpIHsKLSAgICAgIG91dHB1dEhlYWRlckZpbGUgPSBvaGY7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIkhlYWRlckZpbGVPdXRwdXQiXSA9IG9oZjsKKyAgICAgIH0KICAgICB9CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2YXJpYWJsZSBuYW1lIHRvIHVzZSBpZiBhbnkKICAgICBpZiAoY29uc3QgY2hhciogdm4gPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9WQVJJQUJMRV9OQU1FIikpIHsKLSAgICAgIHZhcmlhYmxlTmFtZSA9IHZuOwotICAgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJWYXJpYWJsZU5hbWUiXSA9IHZuOworICAgICAgfQogICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGFkZGl0aW9uYWwgZmxhZ3MgdG8gdXNlCiAgICAgaWYgKGNvbnN0IGNoYXIqIHNhZiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0ZMQUdTIikpIHsKLSAgICAgIHNoYWRlckFkZGl0aW9uYWxGbGFncyA9IHNhZjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiQWRkaXRpb25hbE9wdGlvbnMiXSA9IHNhZjsKKyAgICAgIH0KICAgICB9CiAgICAgLy8gRmlndXJlIG91dCBpZiBkZWJ1ZyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZ2VuZXJhdGVkCiAgICAgaWYgKGNvbnN0IGNoYXIqIHNlZCA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0VOQUJMRV9ERUJVRyIpKSB7Ci0gICAgICBzaGFkZXJFbmFibGVEZWJ1ZyA9IHNlZDsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9IGdlLlBhcnNlKHNlZCk7CisKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZCA9IGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICAgICAgaWYgKCFldmFsdWF0ZWQuZW1wdHkoKSkgeworICAgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJFbmFibGVEZWJ1Z2dpbmdJbmZvcm1hdGlvbiJdID0KKyAgICAgICAgICAgIGNtSXNPbihldmFsdWF0ZWQpID8gInRydWUiIDogImZhbHNlIjsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIGRpc2FibGVkCiAgICAgaWYgKGNvbnN0IGNoYXIqIHNkbyA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUyIpKSB7Ci0gICAgICBzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9ucyA9IHNkbzsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9IGdlLlBhcnNlKHNkbyk7CisKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZCA9IGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICAgICAgaWYgKCFldmFsdWF0ZWQuZW1wdHkoKSkgeworICAgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJEaXNhYmxlT3B0aW1pemF0aW9ucyJdID0KKyAgICAgICAgICAgIGNtSXNPbihldmFsdWF0ZWQpID8gInRydWUiIDogImZhbHNlIjsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KICAgICBpZiAoY29uc3QgY2hhciogc29mbiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX09CSkVDVF9GSUxFX05BTUUiKSkgewotICAgICAgc2hhZGVyT2JqZWN0RmlsZU5hbWUgPSBzb2ZuOwotICAgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJPYmplY3RGaWxlT3V0cHV0Il0gPSBzb2ZuOworICAgICAgfQogICAgIH0KICAgfSBlbHNlIGlmIChleHQgPT0gImpwZyIgfHwgZXh0ID09ICJwbmciKSB7CiAgICAgdG9vbCA9ICJJbWFnZSI7CkBAIC0xOTIwLDExICsxOTU4LDU1IEBACiAgICAgfQogICB9CiAKKyAgaWYgKFBhcnNlZFRvb2xUYXJnZXRTZXR0aW5ncy5maW5kKHRvb2wpID09IFBhcnNlZFRvb2xUYXJnZXRTZXR0aW5ncy5lbmQoKSkgeworICAgIGNvbnN0IGNoYXIqIHRvb2xUYXJnZXRQcm9wZXJ0eSA9CisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NPVVJDRV9TRVRUSU5HU18iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh0b29sKSk7CisgICAgQ29uZmlnVG9TZXR0aW5ncyB0b29sVGFyZ2V0U2V0dGluZ3M7CisgICAgUGFyc2VTZXR0aW5nc1Byb3BlcnR5KHRvb2xUYXJnZXRQcm9wZXJ0eSwgdG9vbFRhcmdldFNldHRpbmdzKTsKKworICAgIFBhcnNlZFRvb2xUYXJnZXRTZXR0aW5nc1t0b29sXSA9IHRvb2xUYXJnZXRTZXR0aW5nczsKKyAgfQorCisgIGZvciAoY29uc3QgYXV0byYgY29uZmlnVG9TZXR0aW5nIDogUGFyc2VkVG9vbFRhcmdldFNldHRpbmdzW3Rvb2xdKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXR0aW5nIDogY29uZmlnVG9TZXR0aW5nLnNlY29uZCkgeworICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ1RvU2V0dGluZy5maXJzdF1bc2V0dGluZy5maXJzdF0gPSBzZXR0aW5nLnNlY29uZDsKKyAgICB9CisgIH0KKworICBQYXJzZVNldHRpbmdzUHJvcGVydHkoc2YtPkdldFByb3BlcnR5KCJWU19TRVRUSU5HUyIpLCB0b29sU2V0dGluZ3MpOworCisgIGlmICghdG9vbFNldHRpbmdzLmVtcHR5KCkpIHsKKyAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICB9CisKICAgRWxlbSBlMihlMSwgdG9vbCk7CiAgIHRoaXMtPldyaXRlU291cmNlKGUyLCBzZik7CiAgIGlmICh0b29sSGFzU2V0dGluZ3MpIHsKICAgICBlMi5TZXRIYXNFbGVtZW50cygpOwogCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHdyaXR0ZW5TZXR0aW5nczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbmZpZ1NldHRpbmdzIDogdG9vbFNldHRpbmdzKSB7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNldHRpbmcgOiBjb25maWdTZXR0aW5ncy5zZWNvbmQpIHsKKworICAgICAgICBpZiAoc3RkOjpmaW5kKHdyaXR0ZW5TZXR0aW5ncy5iZWdpbigpLCB3cml0dGVuU2V0dGluZ3MuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5maXJzdCkgIT0gd3JpdHRlblNldHRpbmdzLmVuZCgpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHJvcGVydHlJc1NhbWVJbkFsbENvbmZpZ3ModG9vbFNldHRpbmdzLCBzZXR0aW5nLmZpcnN0KSkgeworICAgICAgICAgIGUyLkVsZW1lbnQoc2V0dGluZy5maXJzdCwgc2V0dGluZy5zZWNvbmQpOworICAgICAgICAgIHdyaXR0ZW5TZXR0aW5ncy5wdXNoX2JhY2soc2V0dGluZy5maXJzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZTIuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZyhzZXR0aW5nLmZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09JyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdTZXR0aW5ncy5maXJzdCArICJ8IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBsYXRmb3JtICsgIiciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5zZWNvbmQpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFkZXBsb3lDb250ZW50LmVtcHR5KCkpIHsKICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0KQEAgLTE5NTAsODIgKzIwMzIsMTMgQEAKICAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICBpZiAoIXNoYWRlclR5cGUuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiU2hhZGVyVHlwZSIsIHNoYWRlclR5cGUpOwotICAgIH0KLSAgICBpZiAoIXNoYWRlckVudHJ5UG9pbnQuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiRW50cnlQb2ludE5hbWUiLCBzaGFkZXJFbnRyeVBvaW50KTsKLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJNb2RlbC5lbXB0eSgpKSB7Ci0gICAgICBlMi5FbGVtZW50KCJTaGFkZXJNb2RlbCIsIHNoYWRlck1vZGVsKTsKLSAgICB9Ci0gICAgaWYgKCFvdXRwdXRIZWFkZXJGaWxlLmVtcHR5KCkpIHsKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHRoaXMtPkNvbmZpZ3VyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGUyLldyaXRlUGxhdGZvcm1Db25maWdUYWcoIkhlYWRlckZpbGVPdXRwdXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSciICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ3VyYXRpb25zW2ldICsgInwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBsYXRmb3JtICsgIiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEhlYWRlckZpbGUpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIXZhcmlhYmxlTmFtZS5lbXB0eSgpKSB7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSB0aGlzLT5Db25maWd1cmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBlMi5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKCJWYXJpYWJsZU5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSciICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ3VyYXRpb25zW2ldICsgInwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBsYXRmb3JtICsgIiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghc2hhZGVyRW5hYmxlRGVidWcuZW1wdHkoKSkgewotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPQotICAgICAgICBnZS5QYXJzZShzaGFkZXJFbmFibGVEZWJ1Zyk7CiAKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHRoaXMtPkNvbmZpZ3VyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmFibGVEZWJ1ZyA9Ci0gICAgICAgICAgY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlndXJhdGlvbnNbaV0pOwotICAgICAgICBpZiAoIWVuYWJsZURlYnVnLmVtcHR5KCkpIHsKLSAgICAgICAgICBlMi5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKCJFbmFibGVEZWJ1Z2dpbmdJbmZvcm1hdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ3VyYXRpb25zW2ldICsgInwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UGxhdGZvcm0gKyAiJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUlzT24oZW5hYmxlRGVidWcpID8gInRydWUiIDogImZhbHNlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9ucy5lbXB0eSgpKSB7Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7Ci0gICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9Ci0gICAgICAgIGdlLlBhcnNlKHNoYWRlckRpc2FibGVPcHRpbWl6YXRpb25zKTsKLQotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gdGhpcy0+Q29uZmlndXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRpc2FibGVPcHRpbWl6YXRpb25zID0KLSAgICAgICAgICBjZ2UtPkV2YWx1YXRlKHRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSk7Ci0gICAgICAgIGlmICghZGlzYWJsZU9wdGltaXphdGlvbnMuZW1wdHkoKSkgewotICAgICAgICAgIGUyLldyaXRlUGxhdGZvcm1Db25maWdUYWcoCi0gICAgICAgICAgICAiRGlzYWJsZU9wdGltaXphdGlvbnMiLAotICAgICAgICAgICAgIickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09JyIgKyB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArCi0gICAgICAgICAgICAgICJ8IiArIHRoaXMtPlBsYXRmb3JtICsgIiciLAotICAgICAgICAgICAgKGNtSXNPbihkaXNhYmxlT3B0aW1pemF0aW9ucykgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJPYmplY3RGaWxlTmFtZS5lbXB0eSgpKSB7Ci0gICAgICBlMi5FbGVtZW50KCJPYmplY3RGaWxlT3V0cHV0Iiwgc2hhZGVyT2JqZWN0RmlsZU5hbWUpOwotICAgIH0KLSAgICBpZiAoIXNoYWRlckFkZGl0aW9uYWxGbGFncy5lbXB0eSgpKSB7Ci0gICAgICBlMi5FbGVtZW50KCJBZGRpdGlvbmFsT3B0aW9ucyIsIHNoYWRlckFkZGl0aW9uYWxGbGFncyk7Ci0gICAgfQogICAgIGlmICghc2V0dGluZ3NHZW5lcmF0b3IuZW1wdHkoKSkgewogICAgICAgZTIuRWxlbWVudCgiR2VuZXJhdG9yIiwgc2V0dGluZ3NHZW5lcmF0b3IpOwogICAgIH0KICAgICBpZiAoIXNldHRpbmdzTGFzdEdlbk91dHB1dC5lbXB0eSgpKSB7CiAgICAgICBlMi5FbGVtZW50KCJMYXN0R2VuT3V0cHV0Iiwgc2V0dGluZ3NMYXN0R2VuT3V0cHV0KTsKICAgICB9Ci0gICAgaWYgKCFzb3VyY2VMaW5rLmVtcHR5KCkpIHsKLSAgICAgIGUyLkVsZW1lbnQoIkxpbmsiLCBzb3VyY2VMaW5rKTsKLSAgICB9CiAgICAgaWYgKCFzdWJUeXBlLmVtcHR5KCkpIHsKICAgICAgIGUyLkVsZW1lbnQoIlN1YlR5cGUiLCBzdWJUeXBlKTsKICAgICB9CkBAIC0yMDc4LDYgKzIwOTEsMjAgQEAKICAgQ29udmVydFRvV2luZG93c1NsYXNoKHNvdXJjZUZpbGUpOwogICBlMi5BdHRyaWJ1dGUoIkluY2x1ZGUiLCBzb3VyY2VGaWxlKTsKIAorICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qICYmICF0aGlzLT5JblNvdXJjZUJ1aWxkKSB7CisgICAgLy8gRm9yIG91dCBvZiBzb3VyY2UgcHJvamVjdHMgd2UgaGF2ZSB0byBwcm92aWRlIGEgbGluayAoaWYgbm90IHNwZWNpZmllZAorICAgIC8vIHZpYSBwcm9wZXJ0eSkgZm9yIGV2ZXJ5IHNvdXJjZSBmaWxlIChiZXNpZGVzIC5jcyBmaWxlcykgb3RoZXJ3aXNlIHRoZXkKKyAgICAvLyB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIFZTIGF0IGFsbC4KKyAgICAvLyBGaXJzdCB3ZSBjaGVjayBpZiB0aGUgZmlsZSBpcyBpbiBhIHNvdXJjZSBncm91cCwgdGhlbiB3ZSBjaGVjayBpZiB0aGUKKyAgICAvLyBmaWxlIHBhdGggaXMgcmVsYXRpdmUgdG8gY3VycmVudCBzb3VyY2UtIG9yIGJpbmFyeS1kaXIsIG90aGVyd2lzZSBpdCBpcworICAgIC8vIGFkZGVkIHdpdGggdGhlIHBsYWluIGZpbGVuYW1lIHdpdGhvdXQgYW55IHBhdGguIFRoaXMgbWVhbnMgdGhlIGZpbGUgd2lsbAorICAgIC8vIHNob3cgdXAgYXQgcm9vdC1sZXZlbCBvZiB0aGUgY3Nwcm9qICh3aGVyZSBDTWFrZUxpc3RzLnR4dCBldGMuIGFyZSkuCisgICAgc3RkOjpzdHJpbmcgbGluayA9IHRoaXMtPkdldENTaGFycFNvdXJjZUxpbmsoc2YpOworICAgIGlmIChsaW5rLmVtcHR5KCkpCisgICAgICBsaW5rID0gY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoc2YtPkdldEZ1bGxQYXRoKCkpOworICAgIGUyLkVsZW1lbnQoIkxpbmsiLCBsaW5rKTsKKyAgfQorCiAgIFRvb2xTb3VyY2UgdG9vbFNvdXJjZSA9IHsgc2YsIGZvcmNlUmVsYXRpdmUgfTsKICAgdGhpcy0+VG9vbHNbZTIuVGFnXS5wdXNoX2JhY2sodG9vbFNvdXJjZSk7CiB9CkBAIC0yNDMwLDE5ICsyNDU3LDEzIEBACiAgIH0KICAgaWYgKHRoaXMtPklzWGFtbFNvdXJjZShzb3VyY2UtPkdldEZ1bGxQYXRoKCkpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lID0gc291cmNlLT5HZXRGdWxsUGF0aCgpOwotICAgIHN0ZDo6c3RyaW5nIHhhbWxGaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5maW5kX2xhc3Rfb2YoIi4iKSk7Ci0gICAgZTIuRWxlbWVudCgiRGVwZW5kZW50VXBvbiIsIHhhbWxGaWxlTmFtZSk7CisgICAgZTIuRWxlbWVudCgiRGVwZW5kZW50VXBvbiIsCisgICAgICAgICAgICAgICBmaWxlTmFtZS5zdWJzdHIoMCwgZmlsZU5hbWUuZmluZF9sYXN0X29mKCIuIikpKTsKICAgfQogICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qKSB7CiAgICAgc3RkOjpzdHJpbmcgZiA9IHNvdXJjZS0+R2V0RnVsbFBhdGgoKTsKICAgICB1c2luZyBDc1Byb3BNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OwogICAgIENzUHJvcE1hcCBzb3VyY2VGaWxlVGFnczsKLSAgICAvLyBzZXQgPExpbms+IHRhZyBpZiBuZWNlc3NhcnkKLSAgICBzdGQ6OnN0cmluZyBsaW5rOwotICAgIHRoaXMtPkdldENTaGFycFNvdXJjZUxpbmsoc291cmNlLCBsaW5rKTsKLSAgICBpZiAoIWxpbmsuZW1wdHkoKSkgewotICAgICAgc291cmNlRmlsZVRhZ3NbIkxpbmsiXSA9IGxpbms7Ci0gICAgfQogICAgIHRoaXMtPkdldENTaGFycFNvdXJjZVByb3BlcnRpZXMoJnNmLCBzb3VyY2VGaWxlVGFncyk7CiAgICAgLy8gd3JpdGUgc291cmNlIGZpbGUgc3BlY2lmaWMgdGFncwogICAgIGlmICghc291cmNlRmlsZVRhZ3MuZW1wdHkoKSkgewpAQCAtMjYyNCw5ICsyNjQ1LDkgQEAKIAogICAvLyBTb21lIGxpbmsgb3B0aW9ucyBiZWxvbmcgaGVyZS4gIFVzZSB0aGVtIG5vdyBhbmQgcmVtb3ZlIHRoZW0gc28gdGhhdAogICAvLyBXcml0ZUxpbmtPcHRpb25zIGRvZXMgbm90IHVzZSB0aGVtLgotICBjb25zdCBjaGFyKiBmbGFnc1tdID0geyAiTGlua0RlbGF5U2lnbiIsICJMaW5rS2V5RmlsZSIsIDAgfTsKLSAgZm9yIChjb25zdCBjaGFyKiogZiA9IGZsYWdzOyAqZjsgKytmKSB7Ci0gICAgY29uc3QgY2hhciogZmxhZyA9ICpmOworICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZsYWdzeyAiTGlua0RlbGF5U2lnbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaW5rS2V5RmlsZSIgfTsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZmxhZyA6IGZsYWdzKSB7CiAgICAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gbGlua09wdGlvbnMuR2V0RmxhZyhmbGFnKSkgewogICAgICAgZTEuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZyhmbGFnLCBjb25kLCB2YWx1ZSk7CiAgICAgICBsaW5rT3B0aW9ucy5SZW1vdmVGbGFnKGZsYWcpOwpAQCAtMjc5MCw2ICsyODExLDkgQEAKICAgICBjYXNlIGNzcHJvajoKICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q29tcGlsZURlZmluaXRpb25zKHRhcmdldERlZmluZXMsIGNvbmZpZ05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ1NoYXJwIik7CisgICAgICBjbTo6ZXJhc2VfaWYodGFyZ2V0RGVmaW5lcywgW10oc3RkOjpzdHJpbmcgY29uc3QmIGRlZikgeworICAgICAgICByZXR1cm4gZGVmLmZpbmQoJz0nKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgIH0pOwogICAgICAgYnJlYWs7CiAgIH0KICAgY2xPcHRpb25zLkFkZERlZmluZXModGFyZ2V0RGVmaW5lcyk7CkBAIC0yODE4LDEwICsyODQyLDggQEAKICAgfQogCiAgIGlmICh0aGlzLT5NU1Rvb2xzKSB7Ci0gICAgLy8gSWYgd2UgaGF2ZSB0aGUgVlNfV0lOUlRfQ09NUE9ORU5UIG9yIENNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQKLSAgICAvLyBzZXQgdGhlbiBmb3JjZSBDb21waWxlIGFzIFdpblJULgotICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJWU19XSU5SVF9DT01QT05FTlQiKSB8fAotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfVlNfV0lOUlRfQllfREVGQVVMVCIpKSB7CisgICAgLy8gSWYgd2UgaGF2ZSB0aGUgVlNfV0lOUlRfQ09NUE9ORU5UIHNldCB0aGVuIGZvcmNlIENvbXBpbGUgYXMgV2luUlQKKyAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiVlNfV0lOUlRfQ09NUE9ORU5UIikpIHsKICAgICAgIGNsT3B0aW9ucy5BZGRGbGFnKCJDb21waWxlQXNXaW5SVCIsICJ0cnVlIik7CiAgICAgICAvLyBGb3IgV2luUlQgY29tcG9uZW50cywgYWRkIHRoZSBfV0lOUlRfRExMIGRlZmluZSB0byBwcm9kdWNlIGEgbGliCiAgICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSB8fApAQCAtMjgyOSw3ICsyODUxLDggQEAKICAgICAgICAgY2xPcHRpb25zLkFkZERlZmluZSgiX1dJTlJUX0RMTCIpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1N0b3JlKCkgfHwKLSAgICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NQaG9uZSgpKSB7CisgICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzUGhvbmUoKSB8fAorICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQiKSkgewogICAgICAgaWYgKCFjbE9wdGlvbnMuSXNXaW5SdCgpKSB7CiAgICAgICAgIGNsT3B0aW9ucy5BZGRGbGFnKCJDb21waWxlQXNXaW5SVCIsICJmYWxzZSIpOwogICAgICAgfQpAQCAtMzYyNiwxOCArMzY0OSw3IEBACiAgIHRoaXMtPkFkZExpYnJhcmllcyhjbGksIGxpYlZlYywgdnNUYXJnZXRWZWMsIGNvbmZpZyk7CiAgIGlmIChjbUNvbnRhaW5zKGxpbmtDbG9zdXJlLT5MYW5ndWFnZXMsICJDVURBIikgJiYKICAgICAgIHRoaXMtPkN1ZGFPcHRpb25zW2NvbmZpZ10gIT0gbnVsbHB0cikgewotICAgIHN3aXRjaCAodGhpcy0+Q3VkYU9wdGlvbnNbY29uZmlnXS0+R2V0Q3VkYVJ1bnRpbWUoKSkgewotICAgICAgY2FzZSBjbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnM6OkN1ZGFSdW50aW1lU3RhdGljOgotICAgICAgICBsaWJWZWMucHVzaF9iYWNrKCJjdWRhZGV2cnQubGliIik7Ci0gICAgICAgIGxpYlZlYy5wdXNoX2JhY2soImN1ZGFydF9zdGF0aWMubGliIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBjbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnM6OkN1ZGFSdW50aW1lU2hhcmVkOgotICAgICAgICBsaWJWZWMucHVzaF9iYWNrKCJjdWRhZGV2cnQubGliIik7Ci0gICAgICAgIGxpYlZlYy5wdXNoX2JhY2soImN1ZGFydC5saWIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6Q3VkYVJ1bnRpbWVOb25lOgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgdGhpcy0+Q3VkYU9wdGlvbnNbY29uZmlnXS0+Rml4Q3VkYVJ1bnRpbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKICAgfQogICBzdGQ6OnN0cmluZyBzdGFuZGFyZExpYnNWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfU1RBTkRBUkRfTElCUkFSSUVTIik7CkBAIC00MDI3LDggKzQwMzksOCBAQAogfQogCiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlRXZlbnQoCi0gIEVsZW0mIGUxLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OnZlY3RvcjxjbUN1c3RvbUNvbW1hbmQ+IGNvbnN0JiBjb21tYW5kcywKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZ05hbWUpCisgIEVsZW0mIGUxLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBjb25zdCYgY29tbWFuZHMsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWdOYW1lKQogewogICBpZiAoY29tbWFuZHMuZW1wdHkoKSkgewogICAgIHJldHVybjsKQEAgLTQxMDAsNiArNDExMiw5IEBACiAgICAgZTIuRWxlbWVudCgiUHJvamVjdCIsICJ7IiArIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0R1VJRChuYW1lKSArICJ9Iik7CiAgICAgZTIuRWxlbWVudCgiTmFtZSIsIG5hbWUpOwogICAgIHRoaXMtPldyaXRlRG90TmV0UmVmZXJlbmNlQ3VzdG9tVGFncyhlMiwgbmFtZSk7CisgICAgaWYgKGR0LT5Jc0NTaGFycE9ubHkoKSB8fCBjbUhhc0xpdGVyYWxTdWZmaXgocGF0aCwgImNzcHJvaiIpKSB7CisgICAgICBlMi5FbGVtZW50KCJTa2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcyIsICJ0cnVlIik7CisgICAgfQogCiAgICAgLy8gRG9uJ3QgcmVmZXJlbmNlIHRhcmdldHMgdGhhdCBkb24ndCBwcm9kdWNlIGFueSBvdXRwdXQuCiAgICAgaWYgKGR0LT5HZXRNYW5hZ2VkVHlwZSgiIikgPT0gY21HZW5lcmF0b3JUYXJnZXQ6Ok1hbmFnZWRUeXBlOjpVbmRlZmluZWQpIHsKQEAgLTQ4MjcsMTEgKzQ4NDIsMTEgQEAKICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaikgewogICAgIGNvbnN0IGNtUHJvcGVydHlNYXAmIHByb3BzID0gc2YtPkdldFByb3BlcnRpZXMoKTsKICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBwIDogcHJvcHMuR2V0S2V5cygpKSB7Ci0gICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgcHJvcE5hbWVQcmVmaXggPSAiVlNfQ1NIQVJQXyI7Ci0gICAgICBpZiAocC5maW5kKHByb3BOYW1lUHJlZml4KSA9PSAwKSB7CisgICAgICBzdGF0aWMgY29uc3QgY206OnN0cmluZ192aWV3IHByb3BOYW1lUHJlZml4ID0gIlZTX0NTSEFSUF8iOworICAgICAgaWYgKGNtSGFzUHJlZml4KHAsIHByb3BOYW1lUHJlZml4KSkgewogICAgICAgICBzdGQ6OnN0cmluZyB0YWdOYW1lID0gcC5zdWJzdHIocHJvcE5hbWVQcmVmaXgubGVuZ3RoKCkpOwogICAgICAgICBpZiAoIXRhZ05hbWUuZW1wdHkoKSkgewotICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHZhbCA9IHByb3BzLkdldFByb3BlcnR5VmFsdWUocCk7CisgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbCA9ICpwcm9wcy5HZXRQcm9wZXJ0eVZhbHVlKHApOwogICAgICAgICAgIGlmICghdmFsLmVtcHR5KCkpIHsKICAgICAgICAgICAgIHRhZ3NbdGFnTmFtZV0gPSB2YWw7CiAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQ4NDcsMjggKzQ4NjIsMzggQEAKICAgRWxlbSYgZTIsIGNvbnN0IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4mIHRhZ3MpCiB7CiAgIGZvciAoY29uc3QgYXV0byYgaSA6IHRhZ3MpIHsKLSAgICBlMi5FbGVtZW50KGkuZmlyc3QuY19zdHIoKSwgaS5zZWNvbmQpOworICAgIGUyLkVsZW1lbnQoaS5maXJzdCwgaS5zZWNvbmQpOwogICB9CiB9CiAKLXZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6R2V0Q1NoYXJwU291cmNlTGluaygKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiwgc3RkOjpzdHJpbmcmIGxpbmspCitzdGQ6OnN0cmluZyBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpHZXRDU2hhcnBTb3VyY2VMaW5rKAorICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkKIHsKLSAgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZUZpbGVQYXRoID0gc2YtPkdldEZ1bGxQYXRoKCk7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPSBMb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotCi0gIGlmICghY21TeXN0ZW1Ub29sczo6SXNTdWJEaXJlY3Rvcnkoc291cmNlRmlsZVBhdGgsIGJpbmFyeURpcikpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyaXBGcm9tUGF0aCA9Ci0gICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgIGlmIChzb3VyY2VGaWxlUGF0aC5maW5kKHN0cmlwRnJvbVBhdGgpID09IDApIHsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBsID0gc2YtPkdldFByb3BlcnR5KCJWU19DU0hBUlBfTGluayIpKSB7Ci0gICAgICAgIGxpbmsgPSBsOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGluayA9IHNvdXJjZUZpbGVQYXRoLnN1YnN0cihzdHJpcEZyb21QYXRoLmxlbmd0aCgpICsgMSk7Ci0gICAgICB9Ci0gICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7Ci0gICAgfQorICAvLyBGb3Igb3V0IG9mIHNvdXJjZSBmaWxlcywgd2UgZmlyc3QgY2hlY2sgaWYgYSBtYXRjaGluZyBzb3VyY2UgZ3JvdXAKKyAgLy8gZm9yIHRoaXMgZmlsZSBleGlzdHMsIG90aGVyd2lzZSB3ZSBjaGVjayBpZiB0aGUgcGF0aCByZWxhdGl2ZSB0byBjdXJyZW50CisgIC8vIHNvdXJjZS0gb3IgYmluYXJ5LWRpciBpcyB1c2VkIHdpdGhpbiB0aGUgbGluayBhbmQgcmV0dXJuIHRoYXQKKyAgc3RkOjpzdHJpbmcgbGluazsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGZ1bGxGaWxlTmFtZSA9IHNvdXJjZS0+R2V0RnVsbFBhdGgoKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHNyY0RpciA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5EaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOworICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gY29weSB0aGUgc291cmNlIGdyb3VwcywgYmVjYXVzZQorICAvLyBGaW5kU291cmNlR3JvdXAgdXNlcyBhIHJlZ2V4IHdoaWNoIGlzIG1vZGlmeWluZyB0aGUgZ3JvdXAKKyAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VHcm91cD4gc291cmNlR3JvdXBzID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUdyb3VwcygpOworICBjbVNvdXJjZUdyb3VwKiBzb3VyY2VHcm91cCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkZpbmRTb3VyY2VHcm91cChmdWxsRmlsZU5hbWUsIHNvdXJjZUdyb3Vwcyk7CisgIGlmIChzb3VyY2VHcm91cCAmJiAhc291cmNlR3JvdXAtPkdldEZ1bGxOYW1lKCkuZW1wdHkoKSkgeworICAgIGxpbmsgPSBzb3VyY2VHcm91cC0+R2V0RnVsbE5hbWUoKSArICIvIiArCisgICAgICBjbXN5czo6U3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsRmlsZU5hbWUpOworICB9IGVsc2UgaWYgKGNtSGFzUHJlZml4KGZ1bGxGaWxlTmFtZSwgc3JjRGlyKSkgeworICAgIGxpbmsgPSBmdWxsRmlsZU5hbWUuc3Vic3RyKHNyY0Rpci5sZW5ndGgoKSArIDEpOworICB9IGVsc2UgaWYgKGNtSGFzUHJlZml4KGZ1bGxGaWxlTmFtZSwgYmluRGlyKSkgeworICAgIGxpbmsgPSBmdWxsRmlsZU5hbWUuc3Vic3RyKGJpbkRpci5sZW5ndGgoKSArIDEpOworICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGwgPSBzb3VyY2UtPkdldFByb3BlcnR5KCJWU19DU0hBUlBfTGluayIpKSB7CisgICAgbGluayA9IGw7CiAgIH0KKworICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7CisgIHJldHVybiBsaW5rOwogfQogCiBzdGQ6OnN0cmluZyBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpHZXRDTWFrZUZpbGVQYXRoKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmgKaW5kZXggYTE4YTMzZC4uZTU4OGRlOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKIGNsYXNzIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjsKQEAgLTczLDEyICs3NCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IGNvbnN0JiBleGNsdWRlX2NvbmZpZ3MpOwogICB2b2lkIFdyaXRlQWxsU291cmNlcyhFbGVtJiBlMCk7CiAgIHZvaWQgV3JpdGVQYWNrYWdlUmVmZXJlbmNlcyhFbGVtJiBlMCk7Ci0gIHZvaWQgV3JpdGVQYWNrYWdlUmVmZXJlbmNlKEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmVyc2lvbik7CiAgIHZvaWQgV3JpdGVEb3ROZXRSZWZlcmVuY2VzKEVsZW0mIGUwKTsKICAgdm9pZCBXcml0ZURvdE5ldFJlZmVyZW5jZShFbGVtJiBlMSwgc3RkOjpzdHJpbmcgY29uc3QmIHJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgaGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKKyAgdm9pZCBXcml0ZURvdE5ldERvY3VtZW50YXRpb25GaWxlKEVsZW0mIGUwKTsKICAgdm9pZCBXcml0ZUltcG9ydHMoRWxlbSYgZTApOwogICB2b2lkIFdyaXRlRG90TmV0UmVmZXJlbmNlQ3VzdG9tVGFncyhFbGVtJiBlMiwgc3RkOjpzdHJpbmcgY29uc3QmIHJlZik7CiAgIHZvaWQgV3JpdGVFbWJlZGRlZFJlc291cmNlR3JvdXAoRWxlbSYgZTApOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgIHZvaWQgV3JpdGVMaWJPcHRpb25zKEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKICAgdm9pZCBXcml0ZU1hbmlmZXN0T3B0aW9ucyhFbGVtJiBlMSwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CiAgIHZvaWQgV3JpdGVFdmVudHMoRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWdOYW1lKTsKLSAgdm9pZCBXcml0ZUV2ZW50KEVsZW0mIGUxLCBjb25zdCBjaGFyKiBuYW1lLAorICB2b2lkIFdyaXRlRXZlbnQoRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAogICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBjb25zdCYgY29tbWFuZHMsCiAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnTmFtZSk7CiAgIHZvaWQgV3JpdGVHcm91cFNvdXJjZXMoRWxlbSYgZTAsIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLApAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiB0YWdzKTsKICAgdm9pZCBXcml0ZUNTaGFycFNvdXJjZVByb3BlcnRpZXMoCiAgICAgRWxlbSYgZTIsIGNvbnN0IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4mIHRhZ3MpOwotICB2b2lkIEdldENTaGFycFNvdXJjZUxpbmsoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiwgc3RkOjpzdHJpbmcmIGxpbmspOworICBzdGQ6OnN0cmluZyBHZXRDU2hhcnBTb3VyY2VMaW5rKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKTsKIAogcHJpdmF0ZToKICAgZnJpZW5kIGNsYXNzIGNtVlMxMEdlbmVyYXRvck9wdGlvbnM7CkBAIC0yMzUsNiArMjM1LDE1IEBACiAKICAgdXNpbmcgVG9vbFNvdXJjZU1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUb29sU291cmNlcz47CiAgIFRvb2xTb3VyY2VNYXAgVG9vbHM7CisKKyAgdXNpbmcgQ29uZmlnVG9TZXR0aW5ncyA9CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPj47CisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgQ29uZmlnVG9TZXR0aW5ncz4gUGFyc2VkVG9vbFRhcmdldFNldHRpbmdzOworICBib29sIFByb3BlcnR5SXNTYW1lSW5BbGxDb25maWdzKGNvbnN0IENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcE5hbWUpOworICB2b2lkIFBhcnNlU2V0dGluZ3NQcm9wZXJ0eShjb25zdCBjaGFyKiBzZXR0aW5nc1Byb3BlcnR5VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncyk7CiAgIHN0ZDo6c3RyaW5nIEdldENNYWtlRmlsZVBhdGgoY29uc3QgY2hhciogbmFtZSkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuY3h4CmluZGV4IDExMzlhYTkuLjQwMDRiNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuY3h4CisrKyBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuY3h4CkBAIC0zLDYgKzMsOCBAQAogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgogCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUxvY2FsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0xNDksMjUgKzE1MSwzMyBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6Q3VkYVJ1bnRpbWUKLWNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6R2V0Q3VkYVJ1bnRpbWUoKSBjb25zdAordm9pZCBjbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnM6OkZpeEN1ZGFSdW50aW1lKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiB7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBGbGFnVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpID0KICAgICB0aGlzLT5GbGFnTWFwLmZpbmQoIkN1ZGFSdW50aW1lIik7Ci0gIGlmIChpICE9IHRoaXMtPkZsYWdNYXAuZW5kKCkgJiYgaS0+c2Vjb25kLnNpemUoKSA9PSAxKSB7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QmIGN1ZGFSdW50aW1lID0gaS0+c2Vjb25kWzBdOwotICAgIGlmIChjdWRhUnVudGltZSA9PSAiU3RhdGljIikgewotICAgICAgcmV0dXJuIEN1ZGFSdW50aW1lU3RhdGljOwotICAgIH0KLSAgICBpZiAoY3VkYVJ1bnRpbWUgPT0gIlNoYXJlZCIpIHsKLSAgICAgIHJldHVybiBDdWRhUnVudGltZVNoYXJlZDsKLSAgICB9Ci0gICAgaWYgKGN1ZGFSdW50aW1lID09ICJOb25lIikgewotICAgICAgcmV0dXJuIEN1ZGFSdW50aW1lTm9uZTsKKyAgaWYgKGkgPT0gdGhpcy0+RmxhZ01hcC5lbmQoKSkgeworICAgIC8vIFVzZXIgZGlkbid0IHByb3ZpZGUgYW0gb3ZlcnJpZGUgc28gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZQorICAgIGNvbnN0IGNoYXIqIHJ1bnRpbWVMaWJyYXJ5VmFsdWUgPQorICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1VEQV9SVU5USU1FX0xJQlJBUlkiKTsKKyAgICBpZiAocnVudGltZUxpYnJhcnlWYWx1ZSkgeworICAgICAgc3RkOjpzdHJpbmcgY3VkYVJ1bnRpbWUgPQorICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKKyAgICAgICAgICBydW50aW1lTGlicmFyeVZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlndXJhdGlvbiwKKyAgICAgICAgICB0YXJnZXQpKTsKKyAgICAgIGlmIChjdWRhUnVudGltZSA9PSAiU1RBVElDIikgeworICAgICAgICB0aGlzLT5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJTdGF0aWMiKTsKKyAgICAgIH0KKyAgICAgIGlmIChjdWRhUnVudGltZSA9PSAiU0hBUkVEIikgeworICAgICAgICB0aGlzLT5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJTaGFyZWQiKTsKKyAgICAgIH0KKyAgICAgIGlmIChjdWRhUnVudGltZSA9PSAiTk9ORSIpIHsKKyAgICAgICAgdGhpcy0+QWRkRmxhZygiQ3VkYVJ1bnRpbWUiLCAiTm9uZSIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvLyBudmNjIGRlZmF1bHQgaXMgc3RhdGljCisgICAgICB0aGlzLT5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJTdGF0aWMiKTsKICAgICB9CiAgIH0KLSAgLy8gbnZjYyBkZWZhdWx0IGlzIHN0YXRpYwotICByZXR1cm4gQ3VkYVJ1bnRpbWVTdGF0aWM7CiB9CiAKIHZvaWQgY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zOjpGaXhDdWRhQ29kZUdlbmVyYXRpb24oKQpAQCAtNDMxLDcgKzQ0MSw3IEBACiAgIGlmICh0aGlzLT5EZWZpbmVzLmVtcHR5KCkpIHsKICAgICByZXR1cm47CiAgIH0KLSAgY29uc3QgY2hhciogdGFnID0gIlByZXByb2Nlc3NvckRlZmluaXRpb25zIjsKKyAgc3RkOjpzdHJpbmcgdGFnID0gIlByZXByb2Nlc3NvckRlZmluaXRpb25zIjsKICAgaWYgKGxhbmcgPT0gIkNVREEiKSB7CiAgICAgdGFnID0gIkRlZmluZXMiOwogICB9CkBAIC00NzMsNyArNDgzLDcgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBjb25zdCBjaGFyKiB0YWcgPSAiQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyI7CisgIHN0ZDo6c3RyaW5nIHRhZyA9ICJBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIjsKICAgaWYgKGxhbmcgPT0gIkNVREEiKSB7CiAgICAgdGFnID0gIkluY2x1ZGUiOwogICB9IGVsc2UgaWYgKGxhbmcgPT0gIkFTTV9NQVNNIiB8fCBsYW5nID09ICJBU01fTkFTTSIpIHsKQEAgLTUyOCw2ICs1MzgsNiBAQAogICAgICAgc2VwID0gIjsiOwogICAgIH0KIAotICAgIHRoaXMtPk91dHB1dEZsYWcoZm91dCwgaW5kZW50LCBtLmZpcnN0LmNfc3RyKCksIG9zcy5zdHIoKSk7CisgICAgdGhpcy0+T3V0cHV0RmxhZyhmb3V0LCBpbmRlbnQsIG0uZmlyc3QsIG9zcy5zdHIoKSk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuaCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuaAppbmRleCA1NjA1OTNlLi5iMzM1Njk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmgKKysrIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAiY21JREVPcHRpb25zLmgiCiAKIGNsYXNzIGNtTG9jYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I7CitjbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKIAogdXNpbmcgY21WUzdGbGFnVGFibGUgPSBjbUlERUZsYWdUYWJsZTsKIApAQCAtNjEsMTUgKzYyLDggQEAKICAgYm9vbCBVc2luZ1VuaWNvZGUoKSBjb25zdDsKICAgYm9vbCBVc2luZ1NCQ1MoKSBjb25zdDsKIAotICBlbnVtIEN1ZGFSdW50aW1lCi0gIHsKLSAgICBDdWRhUnVudGltZVN0YXRpYywKLSAgICBDdWRhUnVudGltZVNoYXJlZCwKLSAgICBDdWRhUnVudGltZU5vbmUKLSAgfTsKLSAgQ3VkYVJ1bnRpbWUgR2V0Q3VkYVJ1bnRpbWUoKSBjb25zdDsKLQogICB2b2lkIEZpeEN1ZGFDb2RlR2VuZXJhdGlvbigpOworICB2b2lkIEZpeEN1ZGFSdW50aW1lKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpOwogCiAgIHZvaWQgRml4TWFuaWZlc3RVQUNGbGFncygpOwogCkBAIC04Niw3ICs4MCw4IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRDb25maWd1cmF0aW9uKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIE91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiBmb3V0LCBpbnQgaW5kZW50LCBjb25zdCBjaGFyKiB0YWcsCisgIHZpcnR1YWwgdm9pZCBPdXRwdXRGbGFnKHN0ZDo6b3N0cmVhbSYgZm91dCwgaW50IGluZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpID0gMDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpb1NsblBhcnNlci5jeHggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuY3h4CmluZGV4IDQ1MzNlOWIuLmQ3ODIyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpb1NsblBhcnNlci5jeHgKKysrIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmN4eApAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUmIHN0YXRlKQogewogICBzaXplX3QgaWR4RXF1YWxTaWduID0gbGluZS5maW5kKCc9Jyk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBmdWxsVGFnID0gbGluZS5zdWJzdHIoMCwgaWR4RXF1YWxTaWduKTsKKyAgYXV0byBmdWxsVGFnID0gY206OnN0cmluZ192aWV3KGxpbmUpLnN1YnN0cigwLCBpZHhFcXVhbFNpZ24pOwogICBpZiAoIXRoaXMtPlBhcnNlVGFnKGZ1bGxUYWcsIHBhcnNlZExpbmUsIHN0YXRlKSkKICAgICByZXR1cm4gZmFsc2U7CiAgIGlmIChpZHhFcXVhbFNpZ24gIT0gbGluZS5ucG9zKSB7CkBAIC01NjAsNyArNTYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUmIHN0YXRlKQogewogICBzaXplX3QgaWR4RXF1YWxTaWduID0gbGluZS5maW5kKCc9Jyk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBmdWxsVGFnID0gbGluZS5zdWJzdHIoMCwgaWR4RXF1YWxTaWduKTsKKyAgYXV0byBmdWxsVGFnID0gY206OnN0cmluZ192aWV3KGxpbmUpLnN1YnN0cigwLCBpZHhFcXVhbFNpZ24pOwogICBpZiAoIXRoaXMtPlBhcnNlVGFnKGZ1bGxUYWcsIHBhcnNlZExpbmUsIHN0YXRlKSkKICAgICByZXR1cm4gZmFsc2U7CiAgIGlmIChpZHhFcXVhbFNpZ24gIT0gbGluZS5ucG9zKSB7CkBAIC01ODYsMTcgKzU4NiwxNyBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBjbVZpc3VhbFN0dWRpb1NsblBhcnNlcjo6UGFyc2VUYWcoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxUYWcsCitib29sIGNtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyOjpQYXJzZVRhZyhjbTo6c3RyaW5nX3ZpZXcgZnVsbFRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlZExpbmUmIHBhcnNlZExpbmUsIFN0YXRlJiBzdGF0ZSkKIHsKICAgc2l6ZV90IGlkeExlZnRQYXJlbiA9IGZ1bGxUYWcuZmluZCgnKCcpOwotICBpZiAoaWR4TGVmdFBhcmVuID09IGZ1bGxUYWcubnBvcykgeworICBpZiAoaWR4TGVmdFBhcmVuID09IGNtOjpzdHJpbmdfdmlldzo6bnBvcykgewogICAgIHBhcnNlZExpbmUuU2V0VGFnKGNtVHJpbVdoaXRlc3BhY2UoZnVsbFRhZykpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAgIHBhcnNlZExpbmUuU2V0VGFnKGNtVHJpbVdoaXRlc3BhY2UoZnVsbFRhZy5zdWJzdHIoMCwgaWR4TGVmdFBhcmVuKSkpOwogICBzaXplX3QgaWR4UmlnaHRQYXJlbiA9IGZ1bGxUYWcucmZpbmQoJyknKTsKLSAgaWYgKGlkeFJpZ2h0UGFyZW4gPT0gZnVsbFRhZy5ucG9zKSB7CisgIGlmIChpZHhSaWdodFBhcmVuID09IGNtOjpzdHJpbmdfdmlldzo6bnBvcykgewogICAgIHRoaXMtPkxhc3RSZXN1bHQuU2V0RXJyb3IoUmVzdWx0RXJyb3JJbnB1dFN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLkdldEN1cnJlbnRMaW5lKCkpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpb1NsblBhcnNlci5oIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmgKaW5kZXggNmMwNTYzMy4uNDU1N2NkYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmgKKysrIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmgKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8aW9zZndkPgogI2luY2x1ZGUgPHN0cmluZz4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKIGNsYXNzIGNtU2xuRGF0YTsKQEAgLTk3LDggKzk5LDcgQEAKICAgYm9vbCBQYXJzZUtleVZhbHVlUGFpcihjb25zdCBzdGQ6OnN0cmluZyYgbGluZSwgUGFyc2VkTGluZSYgcGFyc2VkTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpOwogCi0gIGJvb2wgUGFyc2VUYWcoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxUYWcsIFBhcnNlZExpbmUmIHBhcnNlZExpbmUsCi0gICAgICAgICAgICAgICAgU3RhdGUmIHN0YXRlKTsKKyAgYm9vbCBQYXJzZVRhZyhjbTo6c3RyaW5nX3ZpZXcgZnVsbFRhZywgUGFyc2VkTGluZSYgcGFyc2VkTGluZSwgU3RhdGUmIHN0YXRlKTsKIAogICBib29sIFBhcnNlVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBQYXJzZWRMaW5lJiBwYXJzZWRMaW5lKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Xcml0ZUZpbGVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVdyaXRlRmlsZUNvbW1hbmQuY3h4CmluZGV4IDM0ZTIxYjIuLjY2NmJhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdyaXRlRmlsZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVdyaXRlRmlsZUNvbW1hbmQuY3h4CkBAIC03Miw3ICs3Miw3IEBACiAgICAgc3RhdHVzLlNldEVycm9yKGVycm9yKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgZmlsZSA8PCBtZXNzYWdlIDw8IHN0ZDo6ZW5kbDsKKyAgZmlsZSA8PCBtZXNzYWdlIDw8ICdcbic7CiAgIGZpbGUuY2xvc2UoKTsKICAgaWYgKG1vZGUgJiYgIXdyaXRhYmxlKSB7CiAgICAgY21TeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnMoZmlsZU5hbWUuY19zdHIoKSwgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YQ29kZTIxT2JqZWN0LmN4eCBiL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuY3h4CmluZGV4IGE5YmIyZWYuLjZiMTMzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuY3h4CisrKyBiL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuY3h4CkBAIC0zMCwxMSArMzAsMTIgQEAKICAgb3V0IDw8ICIgKi8iOwogfQogCi12b2lkIGNtWENvZGUyMU9iamVjdDo6UHJpbnRMaXN0KHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBjb25zdCYgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiBvdXQsIFBCWFR5cGUgdCkKK3ZvaWQgY21YQ29kZTIxT2JqZWN0OjpQcmludExpc3QoCisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0Pj4gY29uc3QmIHYsIHN0ZDo6b3N0cmVhbSYgb3V0LAorICBQQlhUeXBlIHQpCiB7CiAgIGJvb2wgaGFzT25lID0gZmFsc2U7Ci0gIGZvciAoYXV0byBvYmogOiB2KSB7CisgIGZvciAoY29uc3QgYXV0byYgb2JqIDogdikgewogICAgIGlmIChvYmotPkdldFR5cGUoKSA9PSBPQkpFQ1QgJiYgb2JqLT5HZXRJc0EoKSA9PSB0KSB7CiAgICAgICBoYXNPbmUgPSB0cnVlOwogICAgICAgYnJlYWs7CkBAIC00NCw3ICs0NSw3IEBACiAgICAgcmV0dXJuOwogICB9CiAgIG91dCA8PCAiXG4vKiBCZWdpbiAiIDw8IFBCWFR5cGVOYW1lc1t0XSA8PCAiIHNlY3Rpb24gKi9cbiI7Ci0gIGZvciAoYXV0byBvYmogOiB2KSB7CisgIGZvciAoY29uc3QgYXV0byYgb2JqIDogdikgewogICAgIGlmIChvYmotPkdldFR5cGUoKSA9PSBPQkpFQ1QgJiYgb2JqLT5HZXRJc0EoKSA9PSB0KSB7CiAgICAgICBvYmotPlByaW50KG91dCk7CiAgICAgfQpAQCAtNTIsOCArNTMsOCBAQAogICBvdXQgPDwgIi8qIEVuZCAiIDw8IFBCWFR5cGVOYW1lc1t0XSA8PCAiIHNlY3Rpb24gKi9cbiI7CiB9CiAKLXZvaWQgY21YQ29kZTIxT2JqZWN0OjpQcmludExpc3Qoc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IGNvbnN0JiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCkKK3ZvaWQgY21YQ29kZTIxT2JqZWN0OjpQcmludExpc3QoCisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0Pj4gY29uc3QmIHYsIHN0ZDo6b3N0cmVhbSYgb3V0KQogewogICBjbVhDb2RlT2JqZWN0OjpJbmRlbnQoMSwgb3V0KTsKICAgb3V0IDw8ICJvYmplY3RzID0ge1xuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuaCBiL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuaAppbmRleCA4ZTRiODBmLi43NmZhZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21YQ29kZTIxT2JqZWN0LmgKKysrIGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtWENvZGVPYmplY3QuaCIKQEAgLTE1LDggKzE2LDkgQEAKIHB1YmxpYzoKICAgY21YQ29kZTIxT2JqZWN0KFBCWFR5cGUgcHR5cGUsIFR5cGUgdHlwZSk7CiAgIHZvaWQgUHJpbnRDb21tZW50KHN0ZDo6b3N0cmVhbSYpIG92ZXJyaWRlOwotICBzdGF0aWMgdm9pZCBQcmludExpc3Qoc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IGNvbnN0Jiwgc3RkOjpvc3RyZWFtJiBvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQQlhUeXBlIHQpOwotICBzdGF0aWMgdm9pZCBQcmludExpc3Qoc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IGNvbnN0Jiwgc3RkOjpvc3RyZWFtJiBvdXQpOworICBzdGF0aWMgdm9pZCBQcmludExpc3Qoc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCwgUEJYVHlwZSB0KTsKKyAgc3RhdGljIHZvaWQgUHJpbnRMaXN0KHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0Pj4gY29uc3QmLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiBvdXQpOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtWENvZGVTY2hlbWUuY3h4IGIvU291cmNlL2NtWENvZGVTY2hlbWUuY3h4CmluZGV4IGFmYzk1ZjUuLmIzNGMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmN4eAorKysgYi9Tb3VyY2UvY21YQ29kZVNjaGVtZS5jeHgKQEAgLTgsMTMgKzgsMTYgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbVhNTFNhZmUuaCIKIAotY21YQ29kZVNjaGVtZTo6Y21YQ29kZVNjaGVtZShjbVhDb2RlT2JqZWN0KiB4Y09iaiwgVGVzdE9iamVjdHMgdGVzdHMsCitjbVhDb2RlU2NoZW1lOjpjbVhDb2RlU2NoZW1lKGNtTG9jYWxHZW5lcmF0b3IqIGxnLCBjbVhDb2RlT2JqZWN0KiB4Y09iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdE9iamVjdHMgdGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlnTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhjVmVyc2lvbikKLSAgOiBUYXJnZXQoeGNPYmopCisgIDogTG9jYWxHZW5lcmF0b3IobGcpCisgICwgVGFyZ2V0KHhjT2JqKQogICAsIFRlc3RzKHN0ZDo6bW92ZSh0ZXN0cykpCiAgICwgVGFyZ2V0TmFtZSh4Y09iai0+R2V0VGFyZ2V0KCktPkdldE5hbWUoKSkKICAgLCBDb25maWdMaXN0KGNvbmZpZ0xpc3QpCkBAIC0xMzUsNyArMTM4LDggQEAKICAgeG91dC5BdHRyaWJ1dGUoInNlbGVjdGVkTGF1bmNoZXJJZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5MYXVuY2hlci5MTERCIik7CiAgIHhvdXQuQXR0cmlidXRlKCJsYXVuY2hTdHlsZSIsICIwIik7Ci0gIHhvdXQuQXR0cmlidXRlKCJ1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5IiwgIk5PIik7CisgIFdyaXRlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSh4b3V0LCBjb25maWd1cmF0aW9uKTsKKwogICB4b3V0LkF0dHJpYnV0ZSgiaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoIiwgIk5PIik7CiAgIFdyaXRlTGF1bmNoQWN0aW9uQm9vbGVhbkF0dHJpYnV0ZSh4b3V0LCAiZGVidWdEb2N1bWVudFZlcnNpb25pbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlhDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HIiwKQEAgLTM1NSw3ICszNTksNyBAQAogICB4b3V0LkF0dHJpYnV0ZSgiYnVpbGRDb25maWd1cmF0aW9uIiwgY29uZmlndXJhdGlvbik7CiAgIHhvdXQuQXR0cmlidXRlKCJzaG91bGRVc2VMYXVuY2hTY2hlbWVBcmdzRW52IiwgIllFUyIpOwogICB4b3V0LkF0dHJpYnV0ZSgic2F2ZWRUb29sSWRlbnRpZmllciIsICIiKTsKLSAgeG91dC5BdHRyaWJ1dGUoInVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkiLCAiTk8iKTsKKyAgV3JpdGVDdXN0b21Xb3JraW5nRGlyZWN0b3J5KHhvdXQsIGNvbmZpZ3VyYXRpb24pOwogICBXcml0ZUxhdW5jaEFjdGlvbkJvb2xlYW5BdHRyaWJ1dGUoeG91dCwgImRlYnVnRG9jdW1lbnRWZXJzaW9uaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKQEAgLTM5NSw2ICszOTksMjIgQEAKICAgeG91dC5FbmRFbGVtZW50KCk7CiB9CiAKK3ZvaWQgY21YQ29kZVNjaGVtZTo6V3JpdGVDdXN0b21Xb3JraW5nRGlyZWN0b3J5KAorICBjbVhNTFdyaXRlciYgeG91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZ3VyYXRpb24pCit7CisgIHN0ZDo6c3RyaW5nIHByb3BlcnR5VmFsdWUgPSB0aGlzLT5UYXJnZXQtPkdldFRhcmdldCgpLT5HZXRTYWZlUHJvcGVydHkoCisgICAgIlhDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWSIpOworICBpZiAocHJvcGVydHlWYWx1ZS5lbXB0eSgpKSB7CisgICAgeG91dC5BdHRyaWJ1dGUoInVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkiLCAiTk8iKTsKKyAgfSBlbHNlIHsKKyAgICB4b3V0LkF0dHJpYnV0ZSgidXNlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSIsICJZRVMiKTsKKworICAgIGF1dG8gY3VzdG9tV29ya2luZ0RpcmVjdG9yeSA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCisgICAgICBwcm9wZXJ0eVZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlndXJhdGlvbik7CisgICAgeG91dC5BdHRyaWJ1dGUoImN1c3RvbVdvcmtpbmdEaXJlY3RvcnkiLCBjdXN0b21Xb3JraW5nRGlyZWN0b3J5KTsKKyAgfQorfQorCiBzdGQ6OnN0cmluZyBjbVhDb2RlU2NoZW1lOjpXcml0ZVZlcnNpb25TdHJpbmcoKQogewogICBzdGQ6Om9zdHJpbmdzdHJlYW0gdjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmggYi9Tb3VyY2UvY21YQ29kZVNjaGVtZS5oCmluZGV4IGRmZjVlMzUuLmRhNDA4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmgKKysrIGIvU291cmNlL2NtWENvZGVTY2hlbWUuaApAQCAtMjAsNyArMjAsNyBAQAogcHVibGljOgogICB1c2luZyBUZXN0T2JqZWN0cyA9IHN0ZDo6dmVjdG9yPGNvbnN0IGNtWENvZGVPYmplY3QqPjsKIAotICBjbVhDb2RlU2NoZW1lKGNtWENvZGVPYmplY3QqIHhjT2JqLCBUZXN0T2JqZWN0cyB0ZXN0cywKKyAgY21YQ29kZVNjaGVtZShjbUxvY2FsR2VuZXJhdG9yKiBsZywgY21YQ29kZU9iamVjdCogeGNPYmosIFRlc3RPYmplY3RzIHRlc3RzLAogICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlnTGlzdCwKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeGNWZXJzaW9uKTsKIApAQCAtMjgsNiArMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRhaW5lcik7CiAKIHByaXZhdGU6CisgIGNtTG9jYWxHZW5lcmF0b3IqIGNvbnN0IExvY2FsR2VuZXJhdG9yOwogICBjb25zdCBjbVhDb2RlT2JqZWN0KiBjb25zdCBUYXJnZXQ7CiAgIGNvbnN0IFRlc3RPYmplY3RzIFRlc3RzOwogICBjb25zdCBzdGQ6OnN0cmluZyYgVGFyZ2V0TmFtZTsKQEAgLTYzLDYgKzY0LDkgQEAKICAgdm9pZCBXcml0ZUJ1aWxkYWJsZVJlZmVyZW5jZShjbVhNTFdyaXRlciYgeG91dCwgY29uc3QgY21YQ29kZU9iamVjdCogeGNPYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRhaW5lcik7CiAKKyAgdm9pZCBXcml0ZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkoY21YTUxXcml0ZXImIHhvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWd1cmF0aW9uKTsKKwogICBzdGQ6OnN0cmluZyBXcml0ZVZlcnNpb25TdHJpbmcoKTsKICAgc3RkOjpzdHJpbmcgRmluZENvbmZpZ3VyYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21fZ2V0X2RhdGUuYyBiL1NvdXJjZS9jbV9nZXRfZGF0ZS5jCmluZGV4IDRiZWY4MDMuLjQ5ZjU1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbV9nZXRfZGF0ZS5jCisrKyBiL1NvdXJjZS9jbV9nZXRfZGF0ZS5jCkBAIC0yLDYgKzIsMTAgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtX2dldF9kYXRlLmgiCiAKKy8vIEZJWE1FOiBUaGlzIHN1cHByZXNzZXMgdXNlIG9mIGxvY2FsdGltZV9yIGJlY2F1c2UgYXJjaGl2ZV9nZXRkYXRlLmMKKy8vIGRlcGVuZHMgdGhlIHJlc3Qgb2YgbGliYXJjaGl2ZSdzIGNoZWNrcyBmb3IgdGhhdC4KKyNkZWZpbmUgQ01fR0VUX0RBVEUKKwogI2RlZmluZSBfX2FyY2hpdmVfZ2V0X2RhdGUgY21fZ2V0X2RhdGUKIAogI2luY2x1ZGUgIi4uL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS5jeHggYi9Tb3VyY2UvY21ha2UuY3h4CmluZGV4IGY2M2EyNjQuLjJlYzg5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS5jeHgKKysrIGIvU291cmNlL2NtYWtlLmN4eApAQCAtMiwxMiArMiwyOSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21ha2UuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KKwogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoQ01BS0VfQk9PVF9NSU5HVykKICMgIGluY2x1ZGUgPGNtL2l0ZXJhdG9yPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKKyNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCisKKyNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgogI2luY2x1ZGUgImNtX3N5c19zdGF0LmgiCiAKICNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKQEAgLTI0LDYgKzQxLDkgQEAKICNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyMgIGluY2x1ZGUgImNtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmgiCisjZW5kaWYKICNpbmNsdWRlICJjbU1lc3Nlbmdlci5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlRGlyZWN0b3J5LmgiCkBAIC01Niw2ICs3Niw4IEBACiAvLyBpbmNsdWRlIHRoZSBnZW5lcmF0b3IKICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICMgIGlmICFkZWZpbmVkKENNQUtFX0JPT1RfTUlOR1cpCisjICAgIGluY2x1ZGUgPGNtZXh0L21lbW9yeT4KKwogIyAgICBpbmNsdWRlICJjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5oIgogIyAgICBpbmNsdWRlICJjbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmgiCiAjICAgIGluY2x1ZGUgImNtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvci5oIgpAQCAtMTA2LDE5ICsxMjgsNiBAQAogIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKLSNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKLSNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCi0KIG5hbWVzcGFjZSB7CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCkBAIC0yMDEsMTQgKzIxMCw3IEBACiAgIH0KIH0KIAotY21ha2U6On5jbWFrZSgpCi17Ci0gIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKLSAgICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IG51bGxwdHI7Ci0gIH0KLSAgY21EZWxldGVBbGwodGhpcy0+R2VuZXJhdG9ycyk7Ci19CitjbWFrZTo6fmNtYWtlKCkgPSBkZWZhdWx0OwogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogSnNvbjo6VmFsdWUgY21ha2U6OlJlcG9ydFZlcnNpb25Kc29uKCkgY29uc3QKQEAgLTI5MSw3ICsyOTMsNyBAQAogICBib29sIGZpbmRQYWNrYWdlTW9kZSA9IGZhbHNlOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAoYXJnLmZpbmQoIi1EIiwgMCkgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUQiKSkgewogICAgICAgc3RkOjpzdHJpbmcgZW50cnkgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKGVudHJ5LmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtMzMwLDkgKzMzMiw4IEBACiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9IGVsc2UgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIlBhcnNlIGVycm9yIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudDogIiA8PCBhcmcgPDwgIlxuIgotICAgICAgICAgICAgICAgICAgPDwgIlNob3VsZCBiZTogVkFSOnR5cGU9dmFsdWVcbiI7Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBjbWFrZSBzY3JpcHQgcHJvdmlkZWQuIik7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJQYXJzZSBlcnJvciBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnQ6ICIgKyBhcmcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsgIlNob3VsZCBiZTogVkFSOnR5cGU9dmFsdWVcbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLVciKSkgewpAQCAtMzgxLDcgKzM4Miw3IEBACiAgICAgICAgIC8vIC1Xbm8tZXJyb3I9PG5hbWU+CiAgICAgICAgIHRoaXMtPkRpYWdMZXZlbHNbbmFtZV0gPSBzdGQ6Om1pbih0aGlzLT5EaWFnTGV2ZWxzW25hbWVdLCBESUFHX1dBUk4pOwogICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1VIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1VIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGVudHJ5UGF0dGVybiA9IGFyZy5zdWJzdHIoMik7CiAgICAgICBpZiAoZW50cnlQYXR0ZXJuLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtMzkzLDcgKzM5NCw3IEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdleCgKLSAgICAgICAgY21zeXM6Okdsb2I6OlBhdHRlcm5Ub1JlZ2V4KGVudHJ5UGF0dGVybiwgdHJ1ZSwgdHJ1ZSkuY19zdHIoKSk7CisgICAgICAgIGNtc3lzOjpHbG9iOjpQYXR0ZXJuVG9SZWdleChlbnRyeVBhdHRlcm4sIHRydWUsIHRydWUpKTsKICAgICAgIC8vIGdvIHRocm91Z2ggYWxsIGNhY2hlIGVudHJpZXMgYW5kIGNvbGxlY3QgdGhlIHZhcnMgd2hpY2ggd2lsbCBiZQogICAgICAgLy8gcmVtb3ZlZAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVudHJpZXNUb0RlbGV0ZTsKQEAgLTQxMSw3ICs0MTIsNyBAQAogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY3VycmVudEVudHJ5IDogZW50cmllc1RvRGVsZXRlKSB7CiAgICAgICAgIHRoaXMtPlN0YXRlLT5SZW1vdmVDYWNoZUVudHJ5KGN1cnJlbnRFbnRyeSk7CiAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLUMiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUMiKSkgewogICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGFyZy5zdWJzdHIoMik7CiAgICAgICBpZiAocGF0aC5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTQyMiwxMSArNDIzLDExIEBACiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBzdGQ6OmNvdXQgPDwgImxvYWRpbmcgaW5pdGlhbCBjYWNoZSBmaWxlICIgPDwgcGF0aCA8PCAiXG4iOworICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KCJsb2FkaW5nIGluaXRpYWwgY2FjaGUgZmlsZSAiICsgcGF0aCArICJcbiIpOwogICAgICAgLy8gUmVzb2x2ZSBzY3JpcHQgcGF0aCBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lIHJlbGF0aXZlIHRvICRQV0QuCiAgICAgICBwYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoKTsKICAgICAgIHRoaXMtPlJlYWRMaXN0RmlsZShhcmdzLCBwYXRoKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItUCIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItUCIpKSB7CiAgICAgICBpKys7CiAgICAgICBpZiAoaSA+PSBhcmdzLnNpemUoKSkgewogICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiLVAgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGZpbGUgbmFtZS4iKTsKQEAgLTQ0NSw3ICs0NDYsNyBAQAogICAgICAgdGhpcy0+U2V0SG9tZU91dHB1dERpcmVjdG9yeSgKICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKSk7CiAgICAgICB0aGlzLT5SZWFkTGlzdEZpbGUoYXJncywgcGF0aCk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1maW5kLXBhY2thZ2UiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1maW5kLXBhY2thZ2UiKSkgewogICAgICAgZmluZFBhY2thZ2VNb2RlID0gdHJ1ZTsKICAgICB9CiAgIH0KQEAgLTQ2MiwxMiArNDYzLDEyIEBACiB7CiAgIC8vIGlmIGEgZ2VuZXJhdG9yIHdhcyBub3QgeWV0IGNyZWF0ZWQsIHRlbXBvcmFyaWx5IGNyZWF0ZSBvbmUKICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7Ci0gIGJvb2wgY3JlYXRlZCA9IGZhbHNlOwogCiAgIC8vIGlmIGEgZ2VuZXJhdG9yIHdhcyBub3Qgc3BlY2lmaWVkIHVzZSBhIGdlbmVyaWMgb25lCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2VuOwogICBpZiAoIWdnKSB7Ci0gICAgZ2cgPSBuZXcgY21HbG9iYWxHZW5lcmF0b3IodGhpcyk7Ci0gICAgY3JlYXRlZCA9IHRydWU7CisgICAgZ2VuID0gY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsR2VuZXJhdG9yPih0aGlzKTsKKyAgICBnZyA9IGdlbi5nZXQoKTsKICAgfQogCiAgIC8vIHJlYWQgaW4gdGhlIGxpc3QgZmlsZSB0byBmaWxsIHRoZSBjYWNoZQpAQCAtNDg5LDExICs0OTAsNiBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIHByb2Nlc3NpbmcgZmlsZTogIiArIHBhdGgpOwogICAgIH0KICAgfQotCi0gIC8vIGZyZWUgZ2VuZXJpYyBvbmUgaWYgZ2VuZXJhdGVkCi0gIGlmIChjcmVhdGVkKSB7Ci0gICAgZGVsZXRlIGdnOwotICB9CiB9CiAKIGJvb2wgY21ha2U6OkZpbmRQYWNrYWdlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncykKQEAgLTUwMSw5ICs0OTcsNyBAQAogICB0aGlzLT5TZXRIb21lRGlyZWN0b3J5KGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkpOwogICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkpOwogCi0gIC8vIGlmIGEgZ2VuZXJhdG9yIHdhcyBub3QgeWV0IGNyZWF0ZWQsIHRlbXBvcmFyaWx5IGNyZWF0ZSBvbmUKLSAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gbmV3IGNtR2xvYmFsR2VuZXJhdG9yKHRoaXMpOwotICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoZ2cpOworICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsR2VuZXJhdG9yPih0aGlzKSk7CiAKICAgY21TdGF0ZVNuYXBzaG90IHNuYXBzaG90ID0gdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCk7CiAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRCaW5hcnkoCkBAIC01MTIsOCArNTA2LDkgQEAKICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpKTsKICAgLy8gcmVhZCBpbiB0aGUgbGlzdCBmaWxlIHRvIGZpbGwgdGhlIGNhY2hlCiAgIHNuYXBzaG90LlNldERlZmF1bHREZWZpbml0aW9ucygpOwotICBjbU1ha2VmaWxlKiBtZiA9IG5ldyBjbU1ha2VmaWxlKGdnLCBzbmFwc2hvdCk7Ci0gIGdnLT5BZGRNYWtlZmlsZShtZik7CisgIGF1dG8gbWZ1ID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCBzbmFwc2hvdCk7CisgIGNtTWFrZWZpbGUqIG1mID0gbWZ1LmdldCgpOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkFkZE1ha2VmaWxlKHN0ZDo6bW92ZShtZnUpKTsKIAogICBtZi0+U2V0QXJnY0FyZ3YoYXJncyk7CiAKQEAgLTUzMCwyNiArNTI1LDI2IEBACiAgICAgaWYgKCFxdWlldCkgewogICAgICAgcHJpbnRmKCIlcyBub3QgZm91bmQuXG4iLCBwYWNrYWdlTmFtZS5jX3N0cigpKTsKICAgICB9Ci0gIH0gZWxzZSBpZiAobW9kZSA9PSAiRVhJU1QiKSB7CisgIH0gZWxzZSBpZiAobW9kZSA9PSAiRVhJU1QiX3MpIHsKICAgICBpZiAoIXF1aWV0KSB7CiAgICAgICBwcmludGYoIiVzIGZvdW5kLlxuIiwgcGFja2FnZU5hbWUuY19zdHIoKSk7CiAgICAgfQotICB9IGVsc2UgaWYgKG1vZGUgPT0gIkNPTVBJTEUiKSB7CisgIH0gZWxzZSBpZiAobW9kZSA9PSAiQ09NUElMRSJfcykgewogICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKCJQQUNLQUdFX0lOQ0xVREVfRElSUyIpOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlRGlycyA9IGNtRXhwYW5kZWRMaXN0KGluY2x1ZGVzKTsKIAotICAgIGdnLT5DcmVhdGVHZW5lcmF0aW9uT2JqZWN0cygpOwotICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gZ2ctPkxvY2FsR2VuZXJhdG9yc1swXTsKKyAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkNyZWF0ZUdlbmVyYXRpb25PYmplY3RzKCk7CisgICAgY29uc3QgYXV0byYgbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkxvY2FsR2VuZXJhdG9yc1swXTsKICAgICBzdGQ6OnN0cmluZyBpbmNsdWRlRmxhZ3MgPQogICAgICAgbGctPkdldEluY2x1ZGVGbGFncyhpbmNsdWRlRGlycywgbnVsbHB0ciwgbGFuZ3VhZ2UpOwogCiAgICAgc3RkOjpzdHJpbmcgZGVmaW5pdGlvbnMgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIlBBQ0tBR0VfREVGSU5JVElPTlMiKTsKICAgICBwcmludGYoIiVzICVzXG4iLCBpbmNsdWRlRmxhZ3MuY19zdHIoKSwgZGVmaW5pdGlvbnMuY19zdHIoKSk7Ci0gIH0gZWxzZSBpZiAobW9kZSA9PSAiTElOSyIpIHsKKyAgfSBlbHNlIGlmIChtb2RlID09ICJMSU5LIl9zKSB7CiAgICAgY29uc3QgY2hhciogdGFyZ2V0TmFtZSA9ICJkdW1teSI7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNyY3M7CiAgICAgY21UYXJnZXQqIHRndCA9IG1mLT5BZGRFeGVjdXRhYmxlKHRhcmdldE5hbWUsIHNyY3MsIHRydWUpOwotICAgIHRndC0+U2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIsIGxhbmd1YWdlLmNfc3RyKCkpOworICAgIHRndC0+U2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIsIGxhbmd1YWdlKTsKIAogICAgIHN0ZDo6c3RyaW5nIGxpYnMgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIlBBQ0tBR0VfTElCUkFSSUVTIik7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpYkxpc3QgPSBjbUV4cGFuZGVkTGlzdChsaWJzKTsKQEAgLTU2NSw4ICs1NjAsOSBAQAogICAgIHN0ZDo6c3RyaW5nIGxpbmtQYXRoOwogICAgIHN0ZDo6c3RyaW5nIGZsYWdzOwogICAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnczsKLSAgICBnZy0+Q3JlYXRlR2VuZXJhdGlvbk9iamVjdHMoKTsKLSAgICBjbUdlbmVyYXRvclRhcmdldCogZ3RndCA9IGdnLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHRndC0+R2V0TmFtZSgpKTsKKyAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkNyZWF0ZUdlbmVyYXRpb25PYmplY3RzKCk7CisgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0Z3QgPQorICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHRndC0+R2V0TmFtZSgpKTsKICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IGd0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgY21MaW5rTGluZUNvbXB1dGVyIGxpbmtMaW5lQ29tcHV0ZXIobGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGctPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CkBAIC01ODYsMTAgKzU4Miw2IEBACiAgICAgICAgICAgfSovCiAgIH0KIAotICAvLyBmcmVlIGdlbmVyaWMgb25lIGlmIGdlbmVyYXRlZAotICAvLyAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKDApOyAvLyBzZXR0aW5nIDAtcG9pbnRlciBpcyBub3QgcG9zc2libGUKLSAgLy8gIGRlbGV0ZSBnZzsgLy8gdGhpcyBjcmFzaGVzIGluc2lkZSB0aGUgY21ha2UgaW5zdGFuY2UKLQogICByZXR1cm4gcGFja2FnZUZvdW5kOwogfQogCkBAIC02MjYsOSArNjE4LDEzIEBACiB7CiAgIGJvb2wgaGF2ZVRvb2xzZXQgPSBmYWxzZTsKICAgYm9vbCBoYXZlUGxhdGZvcm0gPSBmYWxzZTsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIHN0ZDo6c3RyaW5nIHByb2ZpbGluZ0Zvcm1hdDsKKyAgc3RkOjpzdHJpbmcgcHJvZmlsaW5nT3V0cHV0OworI2VuZGlmCiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgPSBhcmdzW2ldOwotICAgIGlmIChhcmcuZmluZCgiLUgiLCAwKSA9PSAwIHx8IGFyZy5maW5kKCItUyIsIDApID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1IIikgfHwgY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1TIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC02NDYsOSArNjQyLDkgQEAKICAgICAgIHBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHBhdGgpOwogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMocGF0aCk7CiAgICAgICB0aGlzLT5TZXRIb21lRGlyZWN0b3J5KHBhdGgpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1PIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1PIikpIHsKICAgICAgIC8vIFRoZXJlIGlzIG5vIGxvY2FsIGdlbmVyYXRlIGFueW1vcmUuICBJZ25vcmUgLU8gb3B0aW9uLgotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1CIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1CIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC02NjcsNTIgKzY2Myw1NCBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMocGF0aCk7CiAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KHBhdGgpOwogICAgIH0gZWxzZSBpZiAoKGkgPCBhcmdzLnNpemUoKSAtIDIpICYmCi0gICAgICAgICAgICAgICAoYXJnLmZpbmQoIi0tY2hlY2stYnVpbGQtc3lzdGVtIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLWJ1aWxkLXN5c3RlbSIpKSB7CiAgICAgICB0aGlzLT5DaGVja0J1aWxkU3lzdGVtQXJndW1lbnQgPSBhcmdzWysraV07CiAgICAgICB0aGlzLT5DbGVhckJ1aWxkU3lzdGVtID0gKGF0b2koYXJnc1srK2ldLmNfc3RyKCkpID4gMCk7CiAgICAgfSBlbHNlIGlmICgoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgJiYKLSAgICAgICAgICAgICAgIChhcmcuZmluZCgiLS1jaGVjay1zdGFtcC1maWxlIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN0YW1wLWZpbGUiKSkgewogICAgICAgdGhpcy0+Q2hlY2tTdGFtcEZpbGUgPSBhcmdzWysraV07CiAgICAgfSBlbHNlIGlmICgoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgJiYKLSAgICAgICAgICAgICAgIChhcmcuZmluZCgiLS1jaGVjay1zdGFtcC1saXN0IiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN0YW1wLWxpc3QiKSkgewogICAgICAgdGhpcy0+Q2hlY2tTdGFtcExpc3QgPSBhcmdzWysraV07CisgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tcmVnZW5lcmF0ZS1kdXJpbmctYnVpbGQiX3MpIHsKKyAgICAgIHRoaXMtPlJlZ2VuZXJhdGVEdXJpbmdCdWlsZCA9IHRydWU7CiAgICAgfQogI2lmIGRlZmluZWQoQ01BS0VfSEFWRV9WU19HRU5FUkFUT1JTKQogICAgIGVsc2UgaWYgKChpIDwgYXJncy5zaXplKCkgLSAxKSAmJgotICAgICAgICAgICAgIChhcmcuZmluZCgiLS12cy1zb2x1dGlvbi1maWxlIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS12cy1zb2x1dGlvbi1maWxlIikpIHsKICAgICAgIHRoaXMtPlZTU29sdXRpb25GaWxlID0gYXJnc1srK2ldOwogICAgIH0KICNlbmRpZgotICAgIGVsc2UgaWYgKGFyZy5maW5kKCItRCIsIDApID09IDApIHsKKyAgICBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUQiKSkgewogICAgICAgLy8gc2tpcCBmb3Igbm93CiAgICAgICAvLyBpbiBjYXNlICctRCB2YXI9dmFsJyBpcyBnaXZlbiwgYWxzbyBza2lwIHRoZSBuZXh0CiAgICAgICAvLyBpbiBjYXNlICctRHZhcj12YWwnIGlzIGdpdmVuLCBkb24ndCBza2lwIHRoZSBuZXh0CiAgICAgICBpZiAoYXJnLnNpemUoKSA9PSAyKSB7CiAgICAgICAgICsraTsKICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItVSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItVSIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKICAgICAgIC8vIGluIGNhc2UgJy1VIHZhcicgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAogICAgICAgLy8gaW4gY2FzZSAnLVV2YXInIGlzIGdpdmVuLCBkb24ndCBza2lwIHRoZSBuZXh0CiAgICAgICBpZiAoYXJnLnNpemUoKSA9PSAyKSB7CiAgICAgICAgICsraTsKICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItQyIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItQyIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKICAgICAgIC8vIGluIGNhc2UgJy1DIHBhdGgnIGlzIGdpdmVuLCBhbHNvIHNraXAgdGhlIG5leHQKICAgICAgIC8vIGluIGNhc2UgJy1DcGF0aCcgaXMgZ2l2ZW4sIGRvbid0IHNraXAgdGhlIG5leHQKICAgICAgIGlmIChhcmcuc2l6ZSgpID09IDIpIHsKICAgICAgICAgKytpOwogICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1QIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1QIikpIHsKICAgICAgIC8vIHNraXAgZm9yIG5vdwogICAgICAgaSsrOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tZmluZC1wYWNrYWdlIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZmluZC1wYWNrYWdlIikpIHsKICAgICAgIC8vIHNraXAgZm9yIG5vdwogICAgICAgaSsrOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1XIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1XIikpIHsKICAgICAgIC8vIHNraXAgZm9yIG5vdwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tZ3JhcGh2aXo9IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZ3JhcGh2aXo9IikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKHN0cmxlbigiLS1ncmFwaHZpej0iKSk7CiAgICAgICBwYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHBhdGgpOwpAQCAtNzIxLDEzICs3MTksMTMgQEAKICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIGZpbGUgc3BlY2lmaWVkIGZvciAtLWdyYXBodml6Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWRlYnVnLXRyeWNvbXBpbGUiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1kZWJ1Zy10cnljb21waWxlIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiZGVidWcgdHJ5Y29tcGlsZSBvblxuIjsKICAgICAgIHRoaXMtPkRlYnVnVHJ5Q29tcGlsZU9uKCk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1kZWJ1Zy1vdXRwdXQiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1kZWJ1Zy1vdXRwdXQiKSkgewogICAgICAgc3RkOjpjb3V0IDw8ICJSdW5uaW5nIHdpdGggZGVidWcgb3V0cHV0IG9uLlxuIjsKICAgICAgIHRoaXMtPlNldERlYnVnT3V0cHV0T24odHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1sb2ctbGV2ZWw9IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tbG9nLWxldmVsPSIpKSB7CiAgICAgICBjb25zdCBhdXRvIGxvZ0xldmVsID0KICAgICAgICAgU3RyaW5nVG9Mb2dMZXZlbChhcmcuc3Vic3RyKHNpemVvZigiLS1sb2ctbGV2ZWw9IikgLSAxKSk7CiAgICAgICBpZiAobG9nTGV2ZWwgPT0gTG9nTGV2ZWw6OkxPR19VTkRFRklORUQpIHsKQEAgLTczNSw3ICs3MzMsOCBAQAogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICB0aGlzLT5TZXRMb2dMZXZlbChsb2dMZXZlbCk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1sb2dsZXZlbD0iLCAwKSA9PSAwKSB7CisgICAgICB0aGlzLT5Mb2dMZXZlbFdhc1NldFZpYUNMSSA9IHRydWU7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1sb2dsZXZlbD0iKSkgewogICAgICAgLy8gVGhpcyBpcyBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFRoaXMgb3B0aW9uIG9ubHkKICAgICAgIC8vIGFwcGVhcmVkIGluIHRoZSAzLjE1LnggcmVsZWFzZSBzZXJpZXMgYW5kIHdhcyByZW5hbWVkIHRvCiAgICAgICAvLyAtLWxvZy1sZXZlbCBpbiAzLjE2LjAKQEAgLTc0NiwzOSArNzQ1LDU1IEBACiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHRoaXMtPlNldExvZ0xldmVsKGxvZ0xldmVsKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLXRyYWNlLWV4cGFuZCIsIDApID09IDApIHsKKyAgICAgIHRoaXMtPkxvZ0xldmVsV2FzU2V0VmlhQ0xJID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1sb2ctY29udGV4dCJfcykgeworICAgICAgdGhpcy0+U2V0U2hvd0xvZ0NvbnRleHQodHJ1ZSk7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1kZWJ1Zy1maW5kIikpIHsKKyAgICAgIHN0ZDo6Y291dCA8PCAiUnVubmluZyB3aXRoIGRlYnVnIG91dHB1dCBvbiBmb3IgdGhlIGBmaW5kYCBjb21tYW5kcy5cbiI7CisgICAgICB0aGlzLT5TZXREZWJ1Z0ZpbmRPdXRwdXRPbih0cnVlKTsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXRyYWNlLWV4cGFuZCIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIlJ1bm5pbmcgd2l0aCBleHBhbmRlZCB0cmFjZSBvdXRwdXQgb24uXG4iOwogICAgICAgdGhpcy0+U2V0VHJhY2UodHJ1ZSk7CiAgICAgICB0aGlzLT5TZXRUcmFjZUV4cGFuZCh0cnVlKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLXRyYWNlLXNvdXJjZT0iLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZS1mb3JtYXQ9IikpIHsKKyAgICAgIHRoaXMtPlNldFRyYWNlKHRydWUpOworICAgICAgY29uc3QgYXV0byB0cmFjZUZvcm1hdCA9CisgICAgICAgIFN0cmluZ1RvVHJhY2VGb3JtYXQoYXJnLnN1YnN0cihzdHJsZW4oIi0tdHJhY2UtZm9ybWF0PSIpKSk7CisgICAgICBpZiAodHJhY2VGb3JtYXQgPT0gVHJhY2VGb3JtYXQ6OlRSQUNFX1VOREVGSU5FRCkgeworICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiSW52YWxpZCBmb3JtYXQgc3BlY2lmaWVkIGZvciAtLXRyYWNlLWZvcm1hdC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsaWQgZm9ybWF0cyBhcmUgaHVtYW4sIGpzb24tdjEuIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMtPlNldFRyYWNlRm9ybWF0KHRyYWNlRm9ybWF0KTsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXRyYWNlLXNvdXJjZT0iKSkgewogICAgICAgc3RkOjpzdHJpbmcgZmlsZSA9IGFyZy5zdWJzdHIoc3RybGVuKCItLXRyYWNlLXNvdXJjZT0iKSk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhmaWxlKTsKICAgICAgIHRoaXMtPkFkZFRyYWNlU291cmNlKGZpbGUpOwogICAgICAgdGhpcy0+U2V0VHJhY2UodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZS1yZWRpcmVjdD0iLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZS1yZWRpcmVjdD0iKSkgewogICAgICAgc3RkOjpzdHJpbmcgZmlsZSA9IGFyZy5zdWJzdHIoc3RybGVuKCItLXRyYWNlLXJlZGlyZWN0PSIpKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGZpbGUpOwogICAgICAgdGhpcy0+U2V0VHJhY2VGaWxlKGZpbGUpOwogICAgICAgdGhpcy0+U2V0VHJhY2UodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXRyYWNlIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiUnVubmluZyB3aXRoIHRyYWNlIG91dHB1dCBvbi5cbiI7CiAgICAgICB0aGlzLT5TZXRUcmFjZSh0cnVlKTsKICAgICAgIHRoaXMtPlNldFRyYWNlRXhwYW5kKGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLXdhcm4tdW5pbml0aWFsaXplZCIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXdhcm4tdW5pbml0aWFsaXplZCIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIldhcm4gYWJvdXQgdW5pbml0aWFsaXplZCB2YWx1ZXMuXG4iOwogICAgICAgdGhpcy0+U2V0V2FyblVuaW5pdGlhbGl6ZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS13YXJuLXVudXNlZC12YXJzIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0td2Fybi11bnVzZWQtdmFycyIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIkZpbmRpbmcgdW51c2VkIHZhcmlhYmxlcy5cbiI7CiAgICAgICB0aGlzLT5TZXRXYXJuVW51c2VkKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tbm8td2Fybi11bnVzZWQtY2xpIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tbm8td2Fybi11bnVzZWQtY2xpIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiTm90IHNlYXJjaGluZyBmb3IgdW51c2VkIHZhcmlhYmxlcyBnaXZlbiBvbiB0aGUgIgogICAgICAgICAgICAgICAgIDw8ICJjb21tYW5kIGxpbmUuXG4iOwogICAgICAgdGhpcy0+U2V0V2FyblVudXNlZENsaShmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1jaGVjay1zeXN0ZW0tdmFycyIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN5c3RlbS12YXJzIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiQWxzbyBjaGVjayBzeXN0ZW0gZmlsZXMgd2hlbiB3YXJuaW5nIGFib3V0IHVudXNlZCBhbmQgIgogICAgICAgICAgICAgICAgIDw8ICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiI7CiAgICAgICB0aGlzLT5TZXRDaGVja1N5c3RlbVZhcnModHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLUEiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUEiKSkgewogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtNzk0LDcgKzgwOSw3IEBACiAgICAgICB9CiAgICAgICB0aGlzLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybSh2YWx1ZSk7CiAgICAgICBoYXZlUGxhdGZvcm0gPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1UIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1UIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cigyKTsKICAgICAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTgxMCw3ICs4MjUsNyBAQAogICAgICAgfQogICAgICAgdGhpcy0+U2V0R2VuZXJhdG9yVG9vbHNldCh2YWx1ZSk7CiAgICAgICBoYXZlVG9vbHNldCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLUciLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUciKSkgewogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtODIxLDcgKzgzNiw3IEBACiAgICAgICAgIH0KICAgICAgICAgdmFsdWUgPSBhcmdzW2ldOwogICAgICAgfQotICAgICAgY21HbG9iYWxHZW5lcmF0b3IqIGdlbiA9IHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcih2YWx1ZSk7CisgICAgICBhdXRvIGdlbiA9IHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcih2YWx1ZSk7CiAgICAgICBpZiAoIWdlbikgewogICAgICAgICBzdGQ6OnN0cmluZyBrZGV2RXJyb3I7CiAgICAgICAgIGlmICh2YWx1ZS5maW5kKCJLRGV2ZWxvcDMiLCAwKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewpAQCAtODMzLDcgKzg0OCwyMSBAQAogICAgICAgICB0aGlzLT5QcmludEdlbmVyYXRvckxpc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQotICAgICAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKGdlbik7CisgICAgICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbikpOworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXByb2ZpbGluZy1mb3JtYXQiKSkgeworICAgICAgcHJvZmlsaW5nRm9ybWF0ID0gYXJnLnN1YnN0cihzdHJsZW4oIi0tcHJvZmlsaW5nLWZvcm1hdD0iKSk7CisgICAgICBpZiAocHJvZmlsaW5nRm9ybWF0LmVtcHR5KCkpIHsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCIpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tcHJvZmlsaW5nLW91dHB1dCIpKSB7CisgICAgICBwcm9maWxpbmdPdXRwdXQgPSBhcmcuc3Vic3RyKHN0cmxlbigiLS1wcm9maWxpbmctb3V0cHV0PSIpKTsKKyAgICAgIHByb2ZpbGluZ091dHB1dCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZmlsaW5nT3V0cHV0KTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHByb2ZpbGluZ091dHB1dCk7CisgICAgICBpZiAocHJvZmlsaW5nT3V0cHV0LmVtcHR5KCkpIHsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIHBhdGggc3BlY2lmaWVkIGZvciAtLXByb2ZpbGluZy1vdXRwdXQiKTsKKyAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgICAvLyBubyBvcHRpb24gYXNzdW1lIGl0IGlzIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2Ugb3IgYW4gZXhpc3RpbmcgYnVpbGQKICAgICBlbHNlIHsKQEAgLTg1MSw2ICs4ODAsMjkgQEAKICAgICB9CiAgIH0KIAorI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgaWYgKCFwcm9maWxpbmdPdXRwdXQuZW1wdHkoKSB8fCAhcHJvZmlsaW5nRm9ybWF0LmVtcHR5KCkpIHsKKyAgICBpZiAocHJvZmlsaW5nT3V0cHV0LmVtcHR5KCkpIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICAiLS1wcm9maWxpbmctZm9ybWF0IHNwZWNpZmllZCBidXQgbm8gLS1wcm9maWxpbmctb3V0cHV0ISIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocHJvZmlsaW5nRm9ybWF0ID09ICJnb29nbGUtdHJhY2UiX3MpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRoaXMtPlByb2ZpbGluZ091dHB1dCA9CisgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhPihwcm9maWxpbmdPdXRwdXQpOworICAgICAgfSBjYXRjaCAoc3RkOjpydW50aW1lX2Vycm9yJiBlKSB7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICAgIGNtU3RyQ2F0KCJDb3VsZCBub3Qgc3RhcnQgcHJvZmlsaW5nOiAiLCBlLndoYXQoKSkpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorI2VuZGlmCisKICAgY29uc3QgYm9vbCBoYXZlU291cmNlRGlyID0gIXRoaXMtPkdldEhvbWVEaXJlY3RvcnkoKS5lbXB0eSgpOwogICBjb25zdCBib29sIGhhdmVCaW5hcnlEaXIgPSAhdGhpcy0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLmVtcHR5KCk7CiAKQEAgLTg5MCw2ICs5NDIsMjMgQEAKICAgcmV0dXJuIChpdCAhPSBsZXZlbHMuY2VuZCgpKSA/IGl0LT5zZWNvbmQgOiBMb2dMZXZlbDo6TE9HX1VOREVGSU5FRDsKIH0KIAorY21ha2U6OlRyYWNlRm9ybWF0IGNtYWtlOjpTdHJpbmdUb1RyYWNlRm9ybWF0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0cmFjZVN0cikKK3sKKyAgdXNpbmcgVHJhY2VQYWlyID0gc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBUcmFjZUZvcm1hdD47CisgIHN0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxUcmFjZVBhaXI+IGxldmVscyA9IHsKKyAgICB7ICJodW1hbiIsIFRyYWNlRm9ybWF0OjpUUkFDRV9IVU1BTiB9LAorICAgIHsgImpzb24tdjEiLCBUcmFjZUZvcm1hdDo6VFJBQ0VfSlNPTl9WMSB9LAorICB9OworCisgIGNvbnN0IGF1dG8gdHJhY2VTdHJMb3dDYXNlID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHRyYWNlU3RyKTsKKworICBjb25zdCBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKGxldmVscy5jYmVnaW4oKSwgbGV2ZWxzLmNlbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJnRyYWNlU3RyTG93Q2FzZV0oY29uc3QgVHJhY2VQYWlyJiBwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5maXJzdCA9PSB0cmFjZVN0ckxvd0Nhc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgIHJldHVybiAoaXQgIT0gbGV2ZWxzLmNlbmQoKSkgPyBpdC0+c2Vjb25kIDogVHJhY2VGb3JtYXQ6OlRSQUNFX1VOREVGSU5FRDsKK30KKwogdm9pZCBjbWFrZTo6U2V0VHJhY2VGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKQogewogICB0aGlzLT5UcmFjZUZpbGUuY2xvc2UoKTsKQEAgLTkwNCw2ICs5NzMsNDggQEAKICAgc3RkOjpjb3V0IDw8ICJUcmFjZSB3aWxsIGJlIHdyaXR0ZW4gdG8gIiA8PCBmaWxlIDw8ICJcbiI7CiB9CiAKK3ZvaWQgY21ha2U6OlByaW50VHJhY2VGb3JtYXRWZXJzaW9uKCkKK3sKKyAgaWYgKCF0aGlzLT5HZXRUcmFjZSgpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RkOjpzdHJpbmcgbXNnOworCisgIHN3aXRjaCAodGhpcy0+R2V0VHJhY2VGb3JtYXQoKSkgeworICAgIGNhc2UgVHJhY2VGb3JtYXQ6OlRSQUNFX0pTT05fVjE6IHsKKyNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCisgICAgICBKc29uOjpWYWx1ZSB2YWw7CisgICAgICBKc29uOjpWYWx1ZSB2ZXJzaW9uOworICAgICAgSnNvbjo6U3RyZWFtV3JpdGVyQnVpbGRlciBidWlsZGVyOworICAgICAgYnVpbGRlclsiaW5kZW50YXRpb24iXSA9ICIiOworICAgICAgdmVyc2lvblsibWFqb3IiXSA9IDE7CisgICAgICB2ZXJzaW9uWyJtaW5vciJdID0gMDsKKyAgICAgIHZhbFsidmVyc2lvbiJdID0gdmVyc2lvbjsKKyAgICAgIG1zZyA9IEpzb246OndyaXRlU3RyaW5nKGJ1aWxkZXIsIHZhbCk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFRyYWNlRm9ybWF0OjpUUkFDRV9IVU1BTjoKKyAgICAgIG1zZyA9ICIiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmFjZUZvcm1hdDo6VFJBQ0VfVU5ERUZJTkVEOgorICAgICAgbXNnID0gIklOVEVSTkFMIEVSUk9SOiBUcmFjZSBmb3JtYXQgaXMgVFJBQ0VfVU5ERUZJTkVEIjsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKG1zZy5lbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgYXV0byYgZiA9IHRoaXMtPkdldFRyYWNlRmlsZSgpOworICBpZiAoZikgeworICAgIGYgPDwgbXNnIDw8ICdcbic7CisgIH0gZWxzZSB7CisgICAgY21TeXN0ZW1Ub29sczo6TWVzc2FnZShtc2cpOworICB9Cit9CisKIHZvaWQgY21ha2U6OlNldERpcmVjdG9yaWVzRnJvbUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGFyZykKIHsKICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IHJlZmVycyB0byBhIENNYWtlQ2FjaGUudHh0IG9yCkBAIC05MjcsOSArMTAzOCw5IEBACiAgICAgc3RkOjpzdHJpbmcgZnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGFyZyk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsUGF0aCk7CiAgICAgbmFtZSA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShuYW1lKTsKLSAgICBpZiAobmFtZSA9PSAiY21ha2VjYWNoZS50eHQiKSB7CisgICAgaWYgKG5hbWUgPT0gImNtYWtlY2FjaGUudHh0Il9zKSB7CiAgICAgICBjYWNoZVBhdGggPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoZnVsbFBhdGgpOwotICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiY21ha2VsaXN0cy50eHQiKSB7CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJjbWFrZWxpc3RzLnR4dCJfcykgewogICAgICAgbGlzdFBhdGggPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoZnVsbFBhdGgpOwogICAgIH0KICAgfSBlbHNlIHsKQEAgLTkzOCw3ICsxMDQ5LDcgQEAKICAgICBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoYXJnKTsKICAgICBzdGQ6OnN0cmluZyBuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZ1bGxQYXRoKTsKICAgICBuYW1lID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKG5hbWUpOwotICAgIGlmIChuYW1lID09ICJjbWFrZWNhY2hlLnR4dCIgfHwgbmFtZSA9PSAiY21ha2VsaXN0cy50eHQiKSB7CisgICAgaWYgKG5hbWUgPT0gImNtYWtlY2FjaGUudHh0Il9zIHx8IG5hbWUgPT0gImNtYWtlbGlzdHMudHh0Il9zKSB7CiAgICAgICBhcmdJc0ZpbGUgPSB0cnVlOwogICAgICAgbGlzdFBhdGggPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoZnVsbFBhdGgpOwogICAgIH0gZWxzZSB7CkBAIC05NDksMTEgKzEwNjAsMTEgQEAKICAgLy8gSWYgdGhlcmUgaXMgYSBDTWFrZUNhY2hlLnR4dCBmaWxlLCB1c2UgaXRzIHNldHRpbmdzLgogICBpZiAoIWNhY2hlUGF0aC5lbXB0eSgpKSB7CiAgICAgaWYgKHRoaXMtPkxvYWRDYWNoZShjYWNoZVBhdGgpKSB7Ci0gICAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KKyAgICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0KICAgICAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfSE9NRV9ESVJFQ1RPUlkiKTsKICAgICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICAgIHRoaXMtPlNldEhvbWVPdXRwdXREaXJlY3RvcnkoY2FjaGVQYXRoKTsKLSAgICAgICAgdGhpcy0+U2V0SG9tZURpcmVjdG9yeShleGlzdGluZ1ZhbHVlKTsKKyAgICAgICAgdGhpcy0+U2V0SG9tZURpcmVjdG9yeSgqZXhpc3RpbmdWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICB9CkBAIC0xMDQyLDExICsxMTUzLDExIEBACiB2b2lkIGNtYWtlOjpHZXRSZWdpc3RlcmVkR2VuZXJhdG9ycyhzdGQ6OnZlY3RvcjxHZW5lcmF0b3JJbmZvPiYgZ2VuZXJhdG9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZU5hbWVzV2l0aFBsYXRmb3JtKSBjb25zdAogewotICBmb3IgKGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogZ2VuIDogdGhpcy0+R2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGdlbiA6IHRoaXMtPkdlbmVyYXRvcnMpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbmFtZXMgPSBnZW4tPkdldEdlbmVyYXRvck5hbWVzKCk7CiAKICAgICBpZiAoaW5jbHVkZU5hbWVzV2l0aFBsYXRmb3JtKSB7Ci0gICAgICBjbUFwcGVuZChuYW1lcywgZ2VuLT5HZXRHZW5lcmF0b3JOYW1lc1dpdGhQbGF0Zm9ybSgpKTsKKyAgICAgIGNtOjphcHBlbmQobmFtZXMsIGdlbi0+R2V0R2VuZXJhdG9yTmFtZXNXaXRoUGxhdGZvcm0oKSk7CiAgICAgfQogCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG5hbWVzKSB7CkBAIC0xMDkxLDcgKzEyMDIsOCBAQAogICB9CiB9CiAKLXN0YXRpYyBzdGQ6OnBhaXI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvciosIHN0ZDo6c3RyaW5nPgorc3RhdGljIHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4sCisgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nPgogY3JlYXRlRXh0cmFHZW5lcmF0b3IoCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3JGYWN0b3J5Kj4mIGluLAogICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKQEAgLTExMTQsMTUgKzEyMjYsMTcgQEAKICAgcmV0dXJuIHsgbnVsbHB0ciwgbmFtZSB9OwogfQogCi1jbUdsb2JhbEdlbmVyYXRvciogY21ha2U6OkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgZ25hbWUpCitzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IGNtYWtlOjpDcmVhdGVHbG9iYWxHZW5lcmF0b3IoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBnbmFtZSkKIHsKLSAgc3RkOjpwYWlyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqLCBzdGQ6OnN0cmluZz4gZXh0cmEgPQotICAgIGNyZWF0ZUV4dHJhR2VuZXJhdG9yKHRoaXMtPkV4dHJhR2VuZXJhdG9ycywgZ25hbWUpOwotICBjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKiBleHRyYUdlbmVyYXRvciA9IGV4dHJhLmZpcnN0OwotICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lID0gZXh0cmEuc2Vjb25kOworICBzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I+LCBzdGQ6OnN0cmluZz4KKyAgICBleHRyYSA9IGNyZWF0ZUV4dHJhR2VuZXJhdG9yKHRoaXMtPkV4dHJhR2VuZXJhdG9ycywgZ25hbWUpOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4mIGV4dHJhR2VuZXJhdG9yID0KKyAgICBleHRyYS5maXJzdDsKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUgPSBleHRyYS5zZWNvbmQ7CiAKLSAgY21HbG9iYWxHZW5lcmF0b3IqIGdlbmVyYXRvciA9IG51bGxwdHI7Ci0gIGZvciAoY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBnIDogdGhpcy0+R2VuZXJhdG9ycykgeworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IGdlbmVyYXRvcjsKKyAgZm9yIChjb25zdCBhdXRvJiBnIDogdGhpcy0+R2VuZXJhdG9ycykgewogICAgIGdlbmVyYXRvciA9IGctPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihuYW1lLCB0aGlzKTsKICAgICBpZiAoZ2VuZXJhdG9yKSB7CiAgICAgICBicmVhazsKQEAgLTExMzAsOSArMTI0NCw3IEBACiAgIH0KIAogICBpZiAoZ2VuZXJhdG9yKSB7Ci0gICAgZ2VuZXJhdG9yLT5TZXRFeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcihleHRyYUdlbmVyYXRvcik7Ci0gIH0gZWxzZSB7Ci0gICAgZGVsZXRlIGV4dHJhR2VuZXJhdG9yOworICAgIGdlbmVyYXRvci0+U2V0RXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3Ioc3RkOjptb3ZlKGV4dHJhR2VuZXJhdG9yKSk7CiAgIH0KIAogICByZXR1cm4gZ2VuZXJhdG9yOwpAQCAtMTE4NCwxNSArMTI5NiwxMyBAQAogICByZXR1cm4gY2FjaGVQYXRoOwogfQogCi12b2lkIGNtYWtlOjpTZXRHbG9iYWxHZW5lcmF0b3IoY21HbG9iYWxHZW5lcmF0b3IqIGdnKQordm9pZCBjbWFrZTo6U2V0R2xvYmFsR2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2cpCiB7CiAgIGlmICghZ2cpIHsKICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiRXJyb3IgU2V0R2xvYmFsR2VuZXJhdG9yIGNhbGxlZCB3aXRoIG51bGwiKTsKICAgICByZXR1cm47CiAgIH0KLSAgLy8gZGVsZXRlIHRoZSBvbGQgZ2VuZXJhdG9yCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKLSAgICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwogICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBDWFggYW5kIENDCiAgICAgLy8gUmVzdG9yZSBDQwogICAgIHN0ZDo6c3RyaW5nIGVudiA9ICJDQz0iOwpAQCAtMTIwOCw3ICsxMzE4LDcgQEAKICAgfQogCiAgIC8vIHNldCB0aGUgbmV3Ci0gIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IGdnOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IgPSBzdGQ6Om1vdmUoZ2cpOwogCiAgIC8vIHNldCB0aGUgZ2xvYmFsIGZsYWcgZm9yIHVuaXggc3R5bGUgcGF0aHMgb24gY21TeXN0ZW1Ub29scyBhcyBzb29uIGFzCiAgIC8vIHRoZSBnZW5lcmF0b3IgaXMgc2V0LiAgVGhpcyBhbGxvd3MgZ21ha2UgdG8gYmUgdXNlZCBvbiB3aW5kb3dzLgpAQCAtMTI5NywxMiArMTQwNywxMiBAQAogICAgIGkrKzsKICAgICBzYXZlLnZhbHVlID0gKmk7CiAgICAgd2FybmluZyA8PCAqaSA8PCAiXG4iOwotICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHNhdmUua2V5KTsKKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoc2F2ZS5rZXkpOwogICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICBzYXZlLnR5cGUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVR5cGUoc2F2ZS5rZXkpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGhlbHAgPQorICAgICAgaWYgKGNtUHJvcCBoZWxwID0KICAgICAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoc2F2ZS5rZXksICJIRUxQU1RSSU5HIikpIHsKLSAgICAgICAgc2F2ZS5oZWxwID0gaGVscDsKKyAgICAgICAgc2F2ZS5oZWxwID0gKmhlbHA7CiAgICAgICB9CiAgICAgfQogICAgIHNhdmVkLnB1c2hfYmFjayhzdGQ6Om1vdmUoc2F2ZSkpOwpAQCAtMTM0Nyw5ICsxNDU3LDkgQEAKICAgaWYgKHRoaXMtPkRpYWdMZXZlbHMuY291bnQoImRldiIpID09IDEpIHsKICAgICBib29sIHNldERlcHJlY2F0ZWRWYXJpYWJsZXMgPSBmYWxzZTsKIAotICAgIGNvbnN0IGNoYXIqIGNhY2hlZFdhcm5EZXByZWNhdGVkID0KKyAgICBjbVByb3AgY2FjaGVkV2FybkRlcHJlY2F0ZWQgPQogICAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIik7Ci0gICAgY29uc3QgY2hhciogY2FjaGVkRXJyb3JEZXByZWNhdGVkID0KKyAgICBjbVByb3AgY2FjaGVkRXJyb3JEZXByZWNhdGVkID0KICAgICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0VSUk9SX0RFUFJFQ0FURUQiKTsKIAogICAgIC8vIGRvbid0IG92ZXJ3cml0ZSBkZXByZWNhdGVkIHdhcm5pbmcgc2V0dGluZyBmcm9tIGEgcHJldmlvdXMgaW52b2NhdGlvbgpAQCAtMTM4OCwyMyArMTQ5OCwyMyBAQAogICAvLyBDYWNoZSB2YXJpYWJsZXMgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHNldCBieSBhIHByZXZpb3VzIGludm9jYXRpb24sCiAgIC8vIHNvIHdlIGNhbm5vdCByZWx5IG9uIGNvbW1hbmQgbGluZSBvcHRpb25zIGFsb25lLiBBbHdheXMgZW5zdXJlIG91cgogICAvLyBtZXNzZW5nZXIgaXMgaW4gc3luYyB3aXRoIHRoZSBjYWNoZS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKTsKLSAgdGhpcy0+TWVzc2VuZ2VyLT5TZXRTdXBwcmVzc0RlcHJlY2F0ZWRXYXJuaW5ncyh2YWx1ZSAmJiBjbUlzT2ZmKHZhbHVlKSk7CisgIGNtUHJvcCB2YWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1dBUk5fREVQUkVDQVRFRCIpOworICB0aGlzLT5NZXNzZW5nZXItPlNldFN1cHByZXNzRGVwcmVjYXRlZFdhcm5pbmdzKHZhbHVlICYmIGNtSXNPZmYoKnZhbHVlKSk7CiAKICAgdmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9FUlJPUl9ERVBSRUNBVEVEIik7Ci0gIHRoaXMtPk1lc3Nlbmdlci0+U2V0RGVwcmVjYXRlZFdhcm5pbmdzQXNFcnJvcnMoY21Jc09uKHZhbHVlKSk7CisgIHRoaXMtPk1lc3Nlbmdlci0+U2V0RGVwcmVjYXRlZFdhcm5pbmdzQXNFcnJvcnModmFsdWUgJiYgY21Jc09uKCp2YWx1ZSkpOwogCiAgIHZhbHVlID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX1dBUk5JTkdTIik7Ci0gIHRoaXMtPk1lc3Nlbmdlci0+U2V0U3VwcHJlc3NEZXZXYXJuaW5ncyhjbUlzT24odmFsdWUpKTsKKyAgdGhpcy0+TWVzc2VuZ2VyLT5TZXRTdXBwcmVzc0Rldldhcm5pbmdzKHZhbHVlICYmIGNtSXNPbigqdmFsdWUpKTsKIAogICB2YWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKTsKLSAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXZXYXJuaW5nc0FzRXJyb3JzKHZhbHVlICYmIGNtSXNPZmYodmFsdWUpKTsKKyAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXZXYXJuaW5nc0FzRXJyb3JzKHZhbHVlICYmIGNtSXNPZmYoKnZhbHVlKSk7CiAKICAgaW50IHJldCA9IHRoaXMtPkFjdHVhbENvbmZpZ3VyZSgpOwotICBjb25zdCBjaGFyKiBkZWxDYWNoZVZhcnMgPQorICBjbVByb3AgZGVsQ2FjaGVWYXJzID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0R2xvYmFsUHJvcGVydHkoIl9fQ01BS0VfREVMRVRFX0NBQ0hFX0NIQU5HRV9WQVJTXyIpOwotICBpZiAoZGVsQ2FjaGVWYXJzICYmIGRlbENhY2hlVmFyc1swXSAhPSAwKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkhhbmRsZURlbGV0ZUNhY2hlVmFyaWFibGVzKGRlbENhY2hlVmFycyk7CisgIGlmIChkZWxDYWNoZVZhcnMgJiYgIWRlbENhY2hlVmFycy0+ZW1wdHkoKSkgeworICAgIHJldHVybiB0aGlzLT5IYW5kbGVEZWxldGVDYWNoZVZhcmlhYmxlcygqZGVsQ2FjaGVWYXJzKTsKICAgfQogICByZXR1cm4gcmV0OwogfQpAQCAtMTU3MSw3ICsxNjgxLDcgQEAKICAgICB9CiAgIH0KIAotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGVzKClbMF07CisgIGF1dG8mIG1mID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZXMoKVswXTsKICAgaWYgKG1mLT5Jc09uKCJDVEVTVF9VU0VfTEFVTkNIRVJTIikgJiYKICAgICAgICF0aGlzLT5TdGF0ZS0+R2V0R2xvYmFsUHJvcGVydHkoIlJVTEVfTEFVTkNIX0NPTVBJTEUiKSkgewogICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKApAQCAtMTU5MiwxMyArMTcwMiwxMiBAQAogc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBjbWFrZTo6RXZhbHVhdGVEZWZhdWx0R2xvYmFsR2VuZXJhdG9yKCkKIHsKICAgaWYgKCF0aGlzLT5FbnZpcm9ubWVudEdlbmVyYXRvci5lbXB0eSgpKSB7Ci0gICAgY21HbG9iYWxHZW5lcmF0b3IqIGdlbiA9Ci0gICAgICB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodGhpcy0+RW52aXJvbm1lbnRHZW5lcmF0b3IpOworICAgIGF1dG8gZ2VuID0gdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKHRoaXMtPkVudmlyb25tZW50R2VuZXJhdG9yKTsKICAgICBpZiAoIWdlbikgewogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNNQUtFX0dFTkVSQVRPUiB3YXMgc2V0IGJ1dCB0aGUgc3BlY2lmaWVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0b3IgZG9lc24ndCBleGlzdC4gVXNpbmcgQ01ha2UgZGVmYXVsdC4iKTsKICAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oZ2VuKTsKKyAgICAgIHJldHVybiBnZW47CiAgICAgfQogICB9CiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKENNQUtFX0JPT1RfTUlOR1cpCkBAIC0xNjQ4LDEzICsxNzU3LDE0IEBACiAgICAgICB9CiAgICAgfQogICB9Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZm91bmQpOworICBhdXRvIGdlbiA9IHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihmb3VuZCk7CiAgIGlmICghZ2VuKSB7Ci0gICAgZ2VuID0gbmV3IGNtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvcih0aGlzKTsKKyAgICBnZW4gPSBjbTo6bWFrZV91bmlxdWU8Y21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yPih0aGlzKTsKICAgfQotICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihnZW4pOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihzdGQ6Om1vdmUoZ2VuKSk7CiAjZWxzZQotICByZXR1cm4gY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4odGhpcyk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KHRoaXMpKTsKICNlbmRpZgogfQogCkBAIC0xNjY1LDcgKzE3NzUsNyBAQAogICAvLyBUaGlzIHByaW50IGNvdWxkIGJlIHVuaWZpZWQgZm9yIGFsbCBwbGF0Zm9ybXMKICAgc3RkOjpjb3V0IDw8ICItLSBCdWlsZGluZyBmb3I6ICIgPDwgZ2VuLT5HZXROYW1lKCkgPDwgIlxuIjsKICNlbmRpZgotICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoZ2VuLnJlbGVhc2UoKSk7CisgIHRoaXMtPlNldEdsb2JhbEdlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuKSk7CiB9CiAKIHZvaWQgY21ha2U6OlByZUxvYWRDTWFrZUZpbGVzKCkKQEAgLTE2OTYsNiArMTgwNiwxMSBAQAogICAgIHJldHVybiAtMTsKICAgfQogCisgIC8vIExvZyB0aGUgdHJhY2UgZm9ybWF0IHZlcnNpb24gdG8gdGhlIGRlc2lyZWQgb3V0cHV0CisgIGlmICh0aGlzLT5HZXRUcmFjZSgpKSB7CisgICAgdGhpcy0+UHJpbnRUcmFjZUZvcm1hdFZlcnNpb24oKTsKKyAgfQorCiAgIC8vIElmIHdlIGFyZSBnaXZlbiBhIHN0YW1wIGxpc3QgZmlsZSBjaGVjayBpZiBpdCBpcyByZWFsbHkgb3V0IG9mIGRhdGUuCiAgIGlmICghdGhpcy0+Q2hlY2tTdGFtcExpc3QuZW1wdHkoKSAmJgogICAgICAgY21ha2VDaGVja1N0YW1wTGlzdCh0aGlzLT5DaGVja1N0YW1wTGlzdCkpIHsKQEAgLTE3NjMsMTAgKzE4NzgsMTEgQEAKICAgICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UoIkNNYWtlIENvbmZpZ3VyZSBzdGVwIGZhaWxlZC4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWxkIGZpbGVzIGNhbm5vdCBiZSByZWdlbmVyYXRlZCBjb3JyZWN0bHkuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0aW5nIHRvIHN0b3AgSURFIGJ1aWxkLiIpOwotICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IqIGdnID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IqPih0aGlzLT5HbG9iYWxHZW5lcmF0b3IpOwotICAgICAgZ2ctPkNhbGxWaXN1YWxTdHVkaW9NYWNybyhjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6TWFjcm9TdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5WU1NvbHV0aW9uRmlsZSk7CisgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvciYgZ2cgPQorICAgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yPigKKyAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IpOworICAgICAgZ2cuQ2FsbFZpc3VhbFN0dWRpb01hY3JvKGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpNYWNyb1N0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VlNTb2x1dGlvbkZpbGUpOwogICAgIH0KICNlbmRpZgogICAgIHJldHVybiByZXQ7CkBAIC0xODIxLDEzICsxOTM3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUodHlwZSkpOwogICB0aGlzLT5VbndhdGNoVW51c2VkQ2xpKGtleSk7CiAKLSAgaWYgKGtleSA9PSAiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIikgeworICBpZiAoa2V5ID09ICJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiX3MpIHsKICAgICB0aGlzLT5NZXNzZW5nZXItPlNldFN1cHByZXNzRGVwcmVjYXRlZFdhcm5pbmdzKHZhbHVlICYmIGNtSXNPZmYodmFsdWUpKTsKLSAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX0VSUk9SX0RFUFJFQ0FURUQiKSB7CisgIH0gZWxzZSBpZiAoa2V5ID09ICJDTUFLRV9FUlJPUl9ERVBSRUNBVEVEIl9zKSB7CiAgICAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXByZWNhdGVkV2FybmluZ3NBc0Vycm9ycyhjbUlzT24odmFsdWUpKTsKLSAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyIpIHsKKyAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyJfcykgewogICAgIHRoaXMtPk1lc3Nlbmdlci0+U2V0U3VwcHJlc3NEZXZXYXJuaW5ncyhjbUlzT24odmFsdWUpKTsKLSAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKSB7CisgIH0gZWxzZSBpZiAoa2V5ID09ICJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfRVJST1JTIl9zKSB7CiAgICAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXZXYXJuaW5nc0FzRXJyb3JzKHZhbHVlICYmIGNtSXNPZmYodmFsdWUpKTsKICAgfQogfQpAQCAtMTg2Myw5ICsxOTc5LDEwIEBACiB7CiAgIGF1dG8gZG90cG9zID0gZmlsZS5yZmluZCgnLicpOwogICBpZiAoZG90cG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgYXV0byBleHQgPSBmaWxlLnN1YnN0cihkb3Rwb3MgKyAxKTsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0FQUExFX18pCi0gICAgZXh0ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKGV4dCk7CisgICAgYXV0byBleHQgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoZmlsZS5zdWJzdHIoZG90cG9zICsgMSkpOworI2Vsc2UKKyAgICBhdXRvIGV4dCA9IGNtOjpzdHJpbmdfdmlldyhmaWxlKS5zdWJzdHIoZG90cG9zICsgMSk7CiAjZW5kaWYKICAgICBpZiAodGhpcy0+SXNTb3VyY2VFeHRlbnNpb24oZXh0KSB8fCB0aGlzLT5Jc0hlYWRlckV4dGVuc2lvbihleHQpKSB7CiAgICAgICByZXR1cm4gZmlsZS5zdWJzdHIoMCwgZG90cG9zKTsKQEAgLTE5MTYsNiArMjAzMyw3IEBACiAgIHRoaXMtPkdlbmVyYXRvcnMucHVzaF9iYWNrKGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKSk7CiAjICBlbmRpZgogICB0aGlzLT5HZW5lcmF0b3JzLnB1c2hfYmFjayhjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkpOworICB0aGlzLT5HZW5lcmF0b3JzLnB1c2hfYmFjayhjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKSk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENNQUtFX1VTRV9XTUFLRSkKICAgdGhpcy0+R2VuZXJhdG9ycy5wdXNoX2JhY2soY21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpKTsKQEAgLTIwMjEsNyArMjEzOSw3IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nIGRlZmF1bHROYW1lID0gZGVmYXVsdEdlbmVyYXRvci0+R2V0TmFtZSgpOwogICBib29sIGZvdW5kRGVmYXVsdE9uZSA9IGZhbHNlOwogCi0gIGZvciAoY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBnIDogdGhpcy0+R2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGcgOiB0aGlzLT5HZW5lcmF0b3JzKSB7CiAgICAgY21Eb2N1bWVudGF0aW9uRW50cnkgZTsKICAgICBnLT5HZXREb2N1bWVudGF0aW9uKGUpOwogICAgIGlmICghZm91bmREZWZhdWx0T25lICYmIGNtSGFzUHJlZml4KGUuTmFtZSwgZGVmYXVsdE5hbWUpKSB7CkBAIC0yMTYxLDEyICsyMjc5LDEyIEBACiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIHRoZSBnZW5lcmF0b3IgYW5kIHVzZSBpdCB0byBjbGVhciB0aGUgZGVwZW5kZW5jaWVzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2dkKAotICAgICAgdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKGdlbk5hbWUpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IGdnZCA9CisgICAgICB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZ2VuTmFtZSk7CiAgICAgaWYgKGdnZCkgewogICAgICAgY20uR2V0Q3VycmVudFNuYXBzaG90KCkuU2V0RGVmYXVsdERlZmluaXRpb25zKCk7CiAgICAgICBjbU1ha2VmaWxlIG1mZChnZ2QuZ2V0KCksIGNtLkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBsZ2QoZ2dkLT5DcmVhdGVMb2NhbEdlbmVyYXRvcigmbWZkKSk7CisgICAgICBhdXRvIGxnZCA9IGdnZC0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IoJm1mZCk7CiAgICAgICBsZ2QtPkNsZWFyRGVwZW5kZW5jaWVzKCZtZmQsIHZlcmJvc2UpOwogICAgIH0KICAgfQpAQCAtMjI4Nyw3ICsyNDA1LDcgQEAKIHZvaWQgY21ha2U6OkdlbmVyYXRlR3JhcGhWaXooY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKSBjb25zdAogewogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKLSAgY21HcmFwaFZpeldyaXRlciBndldyaXRlcih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKSk7CisgIGNtR3JhcGhWaXpXcml0ZXIgZ3ZXcml0ZXIoZmlsZU5hbWUsIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpKTsKIAogICBzdGQ6OnN0cmluZyBzZXR0aW5nc0ZpbGUgPQogICAgIGNtU3RyQ2F0KHRoaXMtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSwgIi9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZSIpOwpAQCAtMjI5NSw5ICsyNDEzLDggQEAKICAgICBjbVN0ckNhdCh0aGlzLT5HZXRIb21lRGlyZWN0b3J5KCksICIvQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2UiKTsKIAogICBndldyaXRlci5SZWFkU2V0dGluZ3Moc2V0dGluZ3NGaWxlLCBmYWxsYmFja1NldHRpbmdzRmlsZSk7Ci0gIGd2V3JpdGVyLldyaXRlUGVyVGFyZ2V0RmlsZXMoZmlsZU5hbWUpOwotICBndldyaXRlci5Xcml0ZVRhcmdldERlcGVuZGVyc0ZpbGVzKGZpbGVOYW1lKTsKLSAgZ3ZXcml0ZXIuV3JpdGVHbG9iYWxGaWxlKGZpbGVOYW1lKTsKKworICBndldyaXRlci5Xcml0ZSgpOwogCiAjZW5kaWYKIH0KQEAgLTIzMDcsMTMgKzI0MjQsMTMgQEAKICAgdGhpcy0+U3RhdGUtPlNldEdsb2JhbFByb3BlcnR5KHByb3AsIHZhbHVlKTsKIH0KIAotdm9pZCBjbWFrZTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAordm9pZCBjbWFrZTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCiB7CiAgIHRoaXMtPlN0YXRlLT5BcHBlbmRHbG9iYWxQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgYXNTdHJpbmcpOwogfQogCi1jb25zdCBjaGFyKiBjbWFrZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApCitjbVByb3AgY21ha2U6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQogewogICByZXR1cm4gdGhpcy0+U3RhdGUtPkdldEdsb2JhbFByb3BlcnR5KHByb3ApOwogfQpAQCAtMjM2NSw3ICsyNDgyLDcgQEAKICAgYm9vbCB3cml0ZVRvU3Rkb3V0ID0gdHJ1ZTsKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFyZyA9IGFyZ3NbaV07Ci0gICAgaWYgKGFyZy5maW5kKCItRyIsIDApID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1HIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cigyKTsKICAgICAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTIzNzYsMTIgKzI0OTMsMTIgQEAKICAgICAgICAgfQogICAgICAgICB2YWx1ZSA9IGFyZ3NbaV07CiAgICAgICB9Ci0gICAgICBjbUdsb2JhbEdlbmVyYXRvciogZ2VuID0gdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKHZhbHVlKTsKKyAgICAgIGF1dG8gZ2VuID0gdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKHZhbHVlKTsKICAgICAgIGlmICghZ2VuKSB7CiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb3VsZCBub3QgY3JlYXRlIG5hbWVkIGdlbmVyYXRvciAiICsgdmFsdWUpOwogICAgICAgICB0aGlzLT5QcmludEdlbmVyYXRvckxpc3QoKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMtPlNldEdsb2JhbEdlbmVyYXRvcihnZW4pOworICAgICAgICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbikpOwogICAgICAgfQogICAgIH0KICAgICAvLyBubyBvcHRpb24gYXNzdW1lIGl0IGlzIHRoZSBvdXRwdXQgZmlsZQpAQCAtMjU1NCwxMCArMjY3MSwxMCBAQAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtYWtlOjpHZXREZWJ1Z0NvbmZpZ3MoKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19saXN0ID0KKyAgaWYgKGNtUHJvcCBjb25maWdfbGlzdCA9CiAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRHbG9iYWxQcm9wZXJ0eSgiREVCVUdfQ09ORklHVVJBVElPTlMiKSkgewogICAgIC8vIEV4cGFuZCB0aGUgc3BlY2lmaWVkIGxpc3QgYW5kIGNvbnZlcnQgdG8gdXBwZXItY2FzZS4KLSAgICBjbUV4cGFuZExpc3QoY29uZmlnX2xpc3QsIGNvbmZpZ3MpOworICAgIGNtRXhwYW5kTGlzdCgqY29uZmlnX2xpc3QsIGNvbmZpZ3MpOwogICAgIHN0ZDo6dHJhbnNmb3JtKGNvbmZpZ3MuYmVnaW4oKSwgY29uZmlncy5lbmQoKSwgY29uZmlncy5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSk7CiAgIH0KQEAgLTI1ODcsNDggKzI3MDQsNTggQEAKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBub3QgbG9hZCBjYWNoZVxuIjsKICAgICByZXR1cm4gMTsKICAgfQotICBjb25zdCBjaGFyKiBjYWNoZWRHZW5lcmF0b3IgPQotICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOworICBjbVByb3AgY2FjaGVkR2VuZXJhdG9yID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CiAgIGlmICghY2FjaGVkR2VuZXJhdG9yKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgbm90IGZpbmQgQ01BS0VfR0VORVJBVE9SIGluIENhY2hlXG4iOwogICAgIHJldHVybiAxOwogICB9Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoY2FjaGVkR2VuZXJhdG9yKTsKKyAgYXV0byBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoKmNhY2hlZEdlbmVyYXRvcik7CiAgIGlmICghZ2VuKSB7Ci0gICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgY3JlYXRlIENNQUtFX0dFTkVSQVRPUiBcIiIgPDwgY2FjaGVkR2VuZXJhdG9yCisgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgY3JlYXRlIENNQUtFX0dFTkVSQVRPUiBcIiIgPDwgKmNhY2hlZEdlbmVyYXRvcgogICAgICAgICAgICAgICA8PCAiXCJcbiI7CiAgICAgcmV0dXJuIDE7CiAgIH0KLSAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKGdlbik7Ci0gIGNvbnN0IGNoYXIqIGNhY2hlZEdlbmVyYXRvckluc3RhbmNlID0KKyAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKHN0ZDo6bW92ZShnZW4pKTsKKyAgY21Qcm9wIGNhY2hlZEdlbmVyYXRvckluc3RhbmNlID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UiKTsKICAgaWYgKGNhY2hlZEdlbmVyYXRvckluc3RhbmNlKSB7Ci0gICAgY21NYWtlZmlsZSBtZihnZW4sIHRoaXMtPkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKLSAgICBpZiAoIWdlbi0+U2V0R2VuZXJhdG9ySW5zdGFuY2UoY2FjaGVkR2VuZXJhdG9ySW5zdGFuY2UsICZtZikpIHsKKyAgICBjbU1ha2VmaWxlIG1mKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCB0aGlzLT5HZXRDdXJyZW50U25hcHNob3QoKSk7CisgICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlNldEdlbmVyYXRvckluc3RhbmNlKCpjYWNoZWRHZW5lcmF0b3JJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1mKSkgewogICAgICAgcmV0dXJuIDE7CiAgICAgfQogICB9Ci0gIGNvbnN0IGNoYXIqIGNhY2hlZEdlbmVyYXRvclBsYXRmb3JtID0KKyAgY21Qcm9wIGNhY2hlZEdlbmVyYXRvclBsYXRmb3JtID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iKTsKICAgaWYgKGNhY2hlZEdlbmVyYXRvclBsYXRmb3JtKSB7Ci0gICAgY21NYWtlZmlsZSBtZihnZW4sIHRoaXMtPkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKLSAgICBpZiAoIWdlbi0+U2V0R2VuZXJhdG9yUGxhdGZvcm0oY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0sICZtZikpIHsKKyAgICBjbU1ha2VmaWxlIG1mKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCB0aGlzLT5HZXRDdXJyZW50U25hcHNob3QoKSk7CisgICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlNldEdlbmVyYXRvclBsYXRmb3JtKCpjYWNoZWRHZW5lcmF0b3JQbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1mKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIGNtUHJvcCBjYWNoZWRHZW5lcmF0b3JUb29sc2V0ID0KKyAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIpOworICBpZiAoY2FjaGVkR2VuZXJhdG9yVG9vbHNldCkgeworICAgIGNtTWFrZWZpbGUgbWYodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCksIHRoaXMtPkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKKyAgICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+U2V0R2VuZXJhdG9yVG9vbHNldCgqY2FjaGVkR2VuZXJhdG9yVG9vbHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAmbWYpKSB7CiAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIH0KICAgc3RkOjpzdHJpbmcgb3V0cHV0OwogICBzdGQ6OnN0cmluZyBwcm9qTmFtZTsKLSAgY29uc3QgY2hhciogY2FjaGVkUHJvamVjdE5hbWUgPQorICBjbVByb3AgY2FjaGVkUHJvamVjdE5hbWUgPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1BST0pFQ1RfTkFNRSIpOwogICBpZiAoIWNhY2hlZFByb2plY3ROYW1lKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgbm90IGZpbmQgQ01BS0VfUFJPSkVDVF9OQU1FIGluIENhY2hlXG4iOwogICAgIHJldHVybiAxOwogICB9Ci0gIHByb2pOYW1lID0gY2FjaGVkUHJvamVjdE5hbWU7CisgIHByb2pOYW1lID0gKmNhY2hlZFByb2plY3ROYW1lOwogCi0gIGNvbnN0IGNoYXIqIGNhY2hlZFZlcmJvc2UgPQorICBjbVByb3AgY2FjaGVkVmVyYm9zZSA9CiAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfVkVSQk9TRV9NQUtFRklMRSIpOwotICBpZiAoY21Jc09uKGNhY2hlZFZlcmJvc2UpKSB7CisgIGlmIChjYWNoZWRWZXJib3NlICYmIGNtSXNPbigqY2FjaGVkVmVyYm9zZSkpIHsKICAgICB2ZXJib3NlID0gdHJ1ZTsKICAgfQogCkBAIC0yNjg3LDEwICsyODE0LDE1IEBACiAgIH0KICNlbmRpZgogCi0gIGdlbi0+UHJpbnRCdWlsZENvbW1hbmRBZHZpY2Uoc3RkOjpjZXJyLCBqb2JzKTsKLSAgcmV0dXJuIGdlbi0+QnVpbGQoam9icywgIiIsIGRpciwgcHJvak5hbWUsIHRhcmdldHMsIG91dHB1dCwgIiIsIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgY2xlYW4sIGZhbHNlLCB2ZXJib3NlLCBjbUR1cmF0aW9uOjp6ZXJvKCksCi0gICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Ok9VVFBVVF9QQVNTVEhST1VHSCwgbmF0aXZlT3B0aW9ucyk7CisgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5SZWFkQ2FjaGVFbnRyaWVzRm9yQnVpbGQoKnRoaXMtPlN0YXRlKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5QcmludEJ1aWxkQ29tbWFuZEFkdmljZShzdGQ6OmNlcnIsIGpvYnMpOworICByZXR1cm4gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5CdWlsZCgKKyAgICBqb2JzLCAiIiwgZGlyLCBwcm9qTmFtZSwgdGFyZ2V0cywgb3V0cHV0LCAiIiwgY29uZmlnLCBjbGVhbiwgZmFsc2UsCisgICAgdmVyYm9zZSwgY21EdXJhdGlvbjo6emVybygpLCBjbVN5c3RlbVRvb2xzOjpPVVRQVVRfUEFTU1RIUk9VR0gsCisgICAgbmF0aXZlT3B0aW9ucyk7CiB9CiAKIGJvb2wgY21ha2U6Ok9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgYm9vbCBkcnlSdW4pCkBAIC0yNzA3LDcgKzI4MzksNyBAQAogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBsb2FkIGNhY2hlXG4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBjb25zdCBjaGFyKiBnZW5OYW1lID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CisgIGNtUHJvcCBnZW5OYW1lID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CiAgIGlmICghZ2VuTmFtZSkgewogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBmaW5kIENNQUtFX0dFTkVSQVRPUiBpbiBDYWNoZVxuIjsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzE2LDI0ICsyODQ4LDI0IEBACiAgICAgdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfRVhUUkFfR0VORVJBVE9SIik7CiAgIHN0ZDo6c3RyaW5nIGZ1bGxOYW1lID0KICAgICBjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yOjpDcmVhdGVGdWxsR2VuZXJhdG9yTmFtZSgKLSAgICAgIGdlbk5hbWUsIGV4dHJhR2VuTmFtZSA/ICpleHRyYUdlbk5hbWUgOiAiIik7CisgICAgICAqZ2VuTmFtZSwgZXh0cmFHZW5OYW1lID8gKmV4dHJhR2VuTmFtZSA6ICIiKTsKIAotICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IGdlbigKLSAgICB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZnVsbE5hbWUpKTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBnZW4gPQorICAgIHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihmdWxsTmFtZSk7CiAgIGlmICghZ2VuKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgY3JlYXRlIENNQUtFX0dFTkVSQVRPUiBcIiIgPDwgZnVsbE5hbWUKICAgICAgICAgICAgICAgPDwgIlwiXG4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIGNhY2hlZFByb2plY3ROYW1lID0KKyAgY21Qcm9wIGNhY2hlZFByb2plY3ROYW1lID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9QUk9KRUNUX05BTUUiKTsKICAgaWYgKCFjYWNoZWRQcm9qZWN0TmFtZSkgewogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBmaW5kIENNQUtFX1BST0pFQ1RfTkFNRSBpbiBDYWNoZVxuIjsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICByZXR1cm4gZ2VuLT5PcGVuKGRpciwgY2FjaGVkUHJvamVjdE5hbWUsIGRyeVJ1bik7CisgIHJldHVybiBnZW4tPk9wZW4oZGlyLCAqY2FjaGVkUHJvamVjdE5hbWUsIGRyeVJ1bik7CiB9CiAKIHZvaWQgY21ha2U6OldhdGNoVW51c2VkQ2xpKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXIpCkBAIC0yODY3LDMgKzI5OTksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCBmdW5jdGlvbnMuIiwKICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKIH0KKworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKK2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhJiBjbWFrZTo6R2V0UHJvZmlsaW5nT3V0cHV0KCkKK3sKKyAgcmV0dXJuICoodGhpcy0+UHJvZmlsaW5nT3V0cHV0KTsKK30KKworYm9vbCBjbWFrZTo6SXNQcm9maWxpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHRoaXMtPlByb2ZpbGluZ091dHB1dCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS5oIGIvU291cmNlL2NtYWtlLmgKaW5kZXggNjg3YzEwNS4uY2ZjZDI2NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlLmgKKysrIGIvU291cmNlL2NtYWtlLmgKQEAgLTUsMTQgKzUsMTkgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RhY2s+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtSW5zdGFsbGVkRmlsZS5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgpAQCAtMzEsNiArMzYsOSBAQAogY2xhc3MgY21HbG9iYWxHZW5lcmF0b3I7CiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk7CiBjbGFzcyBjbU1ha2VmaWxlOworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKK2NsYXNzIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhOworI2VuZGlmCiBjbGFzcyBjbU1lc3NlbmdlcjsKIGNsYXNzIGNtVmFyaWFibGVXYXRjaDsKIHN0cnVjdCBjbURvY3VtZW50YXRpb25FbnRyeTsKQEAgLTExMCw2ICsxMTgsMTQgQEAKICAgICBMT0dfVFJBQ0UKICAgfTsKIAorICAvKiogXGJyaWVmIERlZmluZSBzdXBwb3J0ZWQgdHJhY2UgZm9ybWF0cyAqKi8KKyAgZW51bSBUcmFjZUZvcm1hdAorICB7CisgICAgVFJBQ0VfVU5ERUZJTkVELAorICAgIFRSQUNFX0hVTUFOLAorICAgIFRSQUNFX0pTT05fVjEsCisgIH07CisKICAgc3RydWN0IEdlbmVyYXRvckluZm8KICAgewogICAgIHN0ZDo6c3RyaW5nIG5hbWU7CkBAIC0xMjQsMTMgKzE0MCwxMyBAQAogCiAgIHN0cnVjdCBGaWxlRXh0ZW5zaW9ucwogICB7Ci0gICAgYm9vbCBUZXN0KHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQpIGNvbnN0CisgICAgYm9vbCBUZXN0KGNtOjpzdHJpbmdfdmlldyBleHQpIGNvbnN0CiAgICAgewogICAgICAgcmV0dXJuICh0aGlzLT51bm9yZGVyZWQuZmluZChleHQpICE9IHRoaXMtPnVub3JkZXJlZC5lbmQoKSk7CiAgICAgfQogCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9yZGVyZWQ7Ci0gICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiB1bm9yZGVyZWQ7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNtOjpzdHJpbmdfdmlldz4gdW5vcmRlcmVkOwogICB9OwogCiAgIHVzaW5nIEluc3RhbGxlZEZpbGVzTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtSW5zdGFsbGVkRmlsZT47CkBAIC0yMDIsMjEgKzIxOCwyNSBAQAogICB2b2lkIFByZUxvYWRDTWFrZUZpbGVzKCk7CiAKICAgLy8hIENyZWF0ZSBhIEdsb2JhbEdlbmVyYXRvcgotICBjbUdsb2JhbEdlbmVyYXRvciogQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogCiAgIC8vISBSZXR1cm4gdGhlIGdsb2JhbCBnZW5lcmF0b3IgYXNzaWduZWQgdG8gdGhpcyBpbnN0YW5jZSBvZiBjbWFrZQotICBjbUdsb2JhbEdlbmVyYXRvciogR2V0R2xvYmFsR2VuZXJhdG9yKCkgeyByZXR1cm4gdGhpcy0+R2xvYmFsR2VuZXJhdG9yOyB9CisgIGNtR2xvYmFsR2VuZXJhdG9yKiBHZXRHbG9iYWxHZW5lcmF0b3IoKQorICB7CisgICAgcmV0dXJuIHRoaXMtPkdsb2JhbEdlbmVyYXRvci5nZXQoKTsKKyAgfQogICAvLyEgUmV0dXJuIHRoZSBnbG9iYWwgZ2VuZXJhdG9yIGFzc2lnbmVkIHRvIHRoaXMgaW5zdGFuY2Ugb2YgY21ha2UsIGNvbnN0CiAgIGNvbnN0IGNtR2xvYmFsR2VuZXJhdG9yKiBHZXRHbG9iYWxHZW5lcmF0b3IoKSBjb25zdAogICB7Ci0gICAgcmV0dXJuIHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKKyAgICByZXR1cm4gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLmdldCgpOwogICB9CiAKICAgLy8hIFJldHVybiB0aGUgZnVsbCBwYXRoIHRvIHdoZXJlIHRoZSBDTWFrZUNhY2hlLnR4dCBmaWxlIHNob3VsZCBiZS4KICAgc3RhdGljIHN0ZDo6c3RyaW5nIEZpbmRDYWNoZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGJpbmFyeURpcik7CiAKICAgLy8hIFJldHVybiB0aGUgZ2xvYmFsIGdlbmVyYXRvciBhc3NpZ25lZCB0byB0aGlzIGluc3RhbmNlIG9mIGNtYWtlCi0gIHZvaWQgU2V0R2xvYmFsR2VuZXJhdG9yKGNtR2xvYmFsR2VuZXJhdG9yKik7CisgIHZvaWQgU2V0R2xvYmFsR2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4pOwogCiAgIC8vISBHZXQgdGhlIG5hbWVzIG9mIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgZ2VuZXJhdG9ycwogICB2b2lkIEdldFJlZ2lzdGVyZWRHZW5lcmF0b3JzKHN0ZDo6dmVjdG9yPEdlbmVyYXRvckluZm8+JiBnZW5lcmF0b3JzLApAQCAtMjQ4LDcgKzI2OCw3IEBACiAgICAgcmV0dXJuIHRoaXMtPlNvdXJjZUZpbGVFeHRlbnNpb25zLm9yZGVyZWQ7CiAgIH0KIAotICBib29sIElzU291cmNlRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHQpIGNvbnN0CisgIGJvb2wgSXNTb3VyY2VFeHRlbnNpb24oY206OnN0cmluZ192aWV3IGV4dCkgY29uc3QKICAgewogICAgIHJldHVybiB0aGlzLT5Tb3VyY2VGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCk7CiAgIH0KQEAgLTI1OCw3ICsyNzgsNyBAQAogICAgIHJldHVybiB0aGlzLT5IZWFkZXJGaWxlRXh0ZW5zaW9ucy5vcmRlcmVkOwogICB9CiAKLSAgYm9vbCBJc0hlYWRlckV4dGVuc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZXh0KSBjb25zdAorICBib29sIElzSGVhZGVyRXh0ZW5zaW9uKGNtOjpzdHJpbmdfdmlldyBleHQpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+SGVhZGVyRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpOwogICB9CkBAIC0yNjgsNyArMjg4LDcgQEAKICAgICByZXR1cm4gdGhpcy0+Q3VkYUZpbGVFeHRlbnNpb25zLm9yZGVyZWQ7CiAgIH0KIAotICBib29sIElzQ3VkYUV4dGVuc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZXh0KSBjb25zdAorICBib29sIElzQ3VkYUV4dGVuc2lvbihjbTo6c3RyaW5nX3ZpZXcgZXh0KSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkN1ZGFGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCk7CiAgIH0KQEAgLTI3OCw3ICsyOTgsNyBAQAogICAgIHJldHVybiB0aGlzLT5Gb3J0cmFuRmlsZUV4dGVuc2lvbnMub3JkZXJlZDsKICAgfQogCi0gIGJvb2wgSXNGb3J0cmFuRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHQpIGNvbnN0CisgIGJvb2wgSXNGb3J0cmFuRXh0ZW5zaW9uKGNtOjpzdHJpbmdfdmlldyBleHQpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+Rm9ydHJhbkZpbGVFeHRlbnNpb25zLlRlc3QoZXh0KTsKICAgfQpAQCAtMzQ0LDkgKzM2NCw5IEBACiAKICAgLy8hIFNldC9HZXQgYSBwcm9wZXJ0eSBvZiB0aGlzIHRhcmdldCBmaWxlCiAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CiAgIGJvb2wgR2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOwogCiAgIC8vISBHZXQgb3IgY3JlYXRlIGFuIGNtSW5zdGFsbGVkRmlsZSBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdApAQCAtMzgwLDIwICs0MDAsNTIgQEAKICAgICovCiAgIGNtRmlsZVRpbWVDYWNoZSogR2V0RmlsZVRpbWVDYWNoZSgpIHsgcmV0dXJuIHRoaXMtPkZpbGVUaW1lQ2FjaGUuZ2V0KCk7IH0KIAorICBib29sIFdhc0xvZ0xldmVsU2V0VmlhQ0xJKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+TG9nTGV2ZWxXYXNTZXRWaWFDTEk7IH0KKwogICAvLyEgR2V0IHRoZSBzZWxlY3RlZCBsb2cgbGV2ZWwgZm9yIGBtZXNzYWdlKClgIGNvbW1hbmRzIGR1cmluZyB0aGUgY21ha2UgcnVuLgogICBMb2dMZXZlbCBHZXRMb2dMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPk1lc3NhZ2VMb2dMZXZlbDsgfQogICB2b2lkIFNldExvZ0xldmVsKExvZ0xldmVsIGxldmVsKSB7IHRoaXMtPk1lc3NhZ2VMb2dMZXZlbCA9IGxldmVsOyB9CiAgIHN0YXRpYyBMb2dMZXZlbCBTdHJpbmdUb0xvZ0xldmVsKGNvbnN0IHN0ZDo6c3RyaW5nJiBsZXZlbFN0cik7CisgIHN0YXRpYyBUcmFjZUZvcm1hdCBTdHJpbmdUb1RyYWNlRm9ybWF0KGNvbnN0IHN0ZDo6c3RyaW5nJiBsZXZlbFN0cik7CisKKyAgYm9vbCBIYXNDaGVja0luUHJvZ3Jlc3MoKSBjb25zdAorICB7CisgICAgcmV0dXJuICF0aGlzLT5DaGVja0luUHJvZ3Jlc3NNZXNzYWdlcy5lbXB0eSgpOworICB9CisgIHN0ZDo6c2l6ZV90IEdldENoZWNrSW5Qcm9ncmVzc1NpemUoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLnNpemUoKTsKKyAgfQorICBzdGQ6OnN0cmluZyBHZXRUb3BDaGVja0luUHJvZ3Jlc3NNZXNzYWdlKCkKKyAgeworICAgIGF1dG8gbWVzc2FnZSA9IHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLnRvcCgpOworICAgIHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLnBvcCgpOworICAgIHJldHVybiBtZXNzYWdlOworICB9CisgIHZvaWQgUHVzaENoZWNrSW5Qcm9ncmVzc01lc3NhZ2Uoc3RkOjpzdHJpbmcgbWVzc2FnZSkKKyAgeworICAgIHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLmVtcGxhY2Uoc3RkOjptb3ZlKG1lc3NhZ2UpKTsKKyAgfQorCisgIC8vISBTaG91bGQgYG1lc3NhZ2VgIGNvbW1hbmQgZGlzcGxheSBjb250ZXh0LgorICBib29sIEdldFNob3dMb2dDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+TG9nQ29udGV4dDsgfQorICB2b2lkIFNldFNob3dMb2dDb250ZXh0KGJvb2wgYikgeyB0aGlzLT5Mb2dDb250ZXh0ID0gYjsgfQogCiAgIC8vISBEbyB3ZSB3YW50IGRlYnVnIG91dHB1dCBkdXJpbmcgdGhlIGNtYWtlIHJ1bi4KICAgYm9vbCBHZXREZWJ1Z091dHB1dCgpIHsgcmV0dXJuIHRoaXMtPkRlYnVnT3V0cHV0OyB9CiAgIHZvaWQgU2V0RGVidWdPdXRwdXRPbihib29sIGIpIHsgdGhpcy0+RGVidWdPdXRwdXQgPSBiOyB9CiAKKyAgLy8hIERvIHdlIHdhbnQgZGVidWcgb3V0cHV0IGZyb20gdGhlIGZpbmQgY29tbWFuZHMgZHVyaW5nIHRoZSBjbWFrZSBydW4uCisgIGJvb2wgR2V0RGVidWdGaW5kT3V0cHV0KCkgeyByZXR1cm4gdGhpcy0+RGVidWdGaW5kT3V0cHV0OyB9CisgIHZvaWQgU2V0RGVidWdGaW5kT3V0cHV0T24oYm9vbCBiKSB7IHRoaXMtPkRlYnVnRmluZE91dHB1dCA9IGI7IH0KKwogICAvLyEgRG8gd2Ugd2FudCB0cmFjZSBvdXRwdXQgZHVyaW5nIHRoZSBjbWFrZSBydW4uCi0gIGJvb2wgR2V0VHJhY2UoKSB7IHJldHVybiB0aGlzLT5UcmFjZTsgfQorICBib29sIEdldFRyYWNlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHJhY2U7IH0KICAgdm9pZCBTZXRUcmFjZShib29sIGIpIHsgdGhpcy0+VHJhY2UgPSBiOyB9Ci0gIGJvb2wgR2V0VHJhY2VFeHBhbmQoKSB7IHJldHVybiB0aGlzLT5UcmFjZUV4cGFuZDsgfQorICBib29sIEdldFRyYWNlRXhwYW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHJhY2VFeHBhbmQ7IH0KICAgdm9pZCBTZXRUcmFjZUV4cGFuZChib29sIGIpIHsgdGhpcy0+VHJhY2VFeHBhbmQgPSBiOyB9CisgIFRyYWNlRm9ybWF0IEdldFRyYWNlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHJhY2VGb3JtYXRWYXI7IH0KKyAgdm9pZCBTZXRUcmFjZUZvcm1hdChUcmFjZUZvcm1hdCBmKSB7IHRoaXMtPlRyYWNlRm9ybWF0VmFyID0gZjsgfQogICB2b2lkIEFkZFRyYWNlU291cmNlKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlKQogICB7CiAgICAgdGhpcy0+VHJhY2VPbmx5VGhpc1NvdXJjZXMucHVzaF9iYWNrKGZpbGUpOwpAQCAtNDA0LDYgKzQ1Niw3IEBACiAgIH0KICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBHZXRUcmFjZUZpbGUoKSB7IHJldHVybiB0aGlzLT5UcmFjZUZpbGU7IH0KICAgdm9pZCBTZXRUcmFjZUZpbGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUpOworICB2b2lkIFByaW50VHJhY2VGb3JtYXRWZXJzaW9uKCk7CiAKICAgYm9vbCBHZXRXYXJuVW5pbml0aWFsaXplZCgpIHsgcmV0dXJuIHRoaXMtPldhcm5VbmluaXRpYWxpemVkOyB9CiAgIHZvaWQgU2V0V2FyblVuaW5pdGlhbGl6ZWQoYm9vbCBiKSB7IHRoaXMtPldhcm5VbmluaXRpYWxpemVkID0gYjsgfQpAQCAtNDk5LDExICs1NTIsMTkgQEAKICAgfQogICBjbVN0YXRlU25hcHNob3QgR2V0Q3VycmVudFNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q3VycmVudFNuYXBzaG90OyB9CiAKKyAgYm9vbCBHZXRSZWdlbmVyYXRlRHVyaW5nQnVpbGQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5SZWdlbmVyYXRlRHVyaW5nQnVpbGQ7IH0KKworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEmIEdldFByb2ZpbGluZ091dHB1dCgpOworICBib29sIElzUHJvZmlsaW5nRW5hYmxlZCgpIGNvbnN0OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgdm9pZCBSdW5DaGVja0ZvclVudXNlZFZhcmlhYmxlcygpOwogICBpbnQgSGFuZGxlRGVsZXRlQ2FjaGVWYXJpYWJsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcik7CiAKLSAgdXNpbmcgUmVnaXN0ZXJlZEdlbmVyYXRvcnNWZWN0b3IgPSBzdGQ6OnZlY3RvcjxjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqPjsKKyAgdXNpbmcgUmVnaXN0ZXJlZEdlbmVyYXRvcnNWZWN0b3IgPQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+PjsKICAgUmVnaXN0ZXJlZEdlbmVyYXRvcnNWZWN0b3IgR2VuZXJhdG9yczsKICAgdXNpbmcgUmVnaXN0ZXJlZEV4dHJhR2VuZXJhdG9yc1ZlY3RvciA9CiAgICAgc3RkOjp2ZWN0b3I8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvckZhY3RvcnkqPjsKQEAgLTUxMyw3ICs1NzQsNiBAQAogICB2b2lkIEFkZERlZmF1bHRHZW5lcmF0b3JzKCk7CiAgIHZvaWQgQWRkRGVmYXVsdEV4dHJhR2VuZXJhdG9ycygpOwogCi0gIGNtR2xvYmFsR2VuZXJhdG9yKiBHbG9iYWxHZW5lcmF0b3IgPSBudWxscHRyOwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgRGlhZ0xldmVsPiBEaWFnTGV2ZWxzOwogICBzdGQ6OnN0cmluZyBHZW5lcmF0b3JJbnN0YW5jZTsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yUGxhdGZvcm07CkBAIC01NDksOCArNjA5LDEwIEBACiAgIFByb2dyZXNzQ2FsbGJhY2tUeXBlIFByb2dyZXNzQ2FsbGJhY2s7CiAgIFdvcmtpbmdNb2RlIEN1cnJlbnRXb3JraW5nTW9kZSA9IE5PUk1BTF9NT0RFOwogICBib29sIERlYnVnT3V0cHV0ID0gZmFsc2U7CisgIGJvb2wgRGVidWdGaW5kT3V0cHV0ID0gZmFsc2U7CiAgIGJvb2wgVHJhY2UgPSBmYWxzZTsKICAgYm9vbCBUcmFjZUV4cGFuZCA9IGZhbHNlOworICBUcmFjZUZvcm1hdCBUcmFjZUZvcm1hdFZhciA9IFRSQUNFX0hVTUFOOwogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gVHJhY2VGaWxlOwogICBib29sIFdhcm5VbmluaXRpYWxpemVkID0gZmFsc2U7CiAgIGJvb2wgV2FyblVudXNlZCA9IGZhbHNlOwpAQCAtNTcxLDYgKzYzMyw3IEBACiAgIEZpbGVFeHRlbnNpb25zIEZvcnRyYW5GaWxlRXh0ZW5zaW9uczsKICAgYm9vbCBDbGVhckJ1aWxkU3lzdGVtID0gZmFsc2U7CiAgIGJvb2wgRGVidWdUcnlDb21waWxlID0gZmFsc2U7CisgIGJvb2wgUmVnZW5lcmF0ZUR1cmluZ0J1aWxkID0gZmFsc2U7CiAgIHN0ZDo6dW5pcXVlX3B0cjxjbUZpbGVUaW1lQ2FjaGU+IEZpbGVUaW1lQ2FjaGU7CiAgIHN0ZDo6c3RyaW5nIEdyYXBoVml6RmlsZTsKICAgSW5zdGFsbGVkRmlsZXNNYXAgSW5zdGFsbGVkRmlsZXM7CkBAIC01ODcsNiArNjUwLDEyIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBUcmFjZU9ubHlUaGlzU291cmNlczsKIAogICBMb2dMZXZlbCBNZXNzYWdlTG9nTGV2ZWwgPSBMb2dMZXZlbDo6TE9HX1NUQVRVUzsKKyAgYm9vbCBMb2dMZXZlbFdhc1NldFZpYUNMSSA9IGZhbHNlOworICBib29sIExvZ0NvbnRleHQgPSBmYWxzZTsKKworICBzdGQ6OnN0YWNrPHN0ZDo6c3RyaW5nPiBDaGVja0luUHJvZ3Jlc3NNZXNzYWdlczsKKworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IEdsb2JhbEdlbmVyYXRvcjsKIAogICB2b2lkIFVwZGF0ZUNvbnZlcnNpb25QYXRoVGFibGUoKTsKIApAQCAtNTk4LDYgKzY2NywxMCBAQAogCiAgIHZvaWQgQXBwZW5kR2xvYmFsR2VuZXJhdG9yc0RvY3VtZW50YXRpb24oc3RkOjp2ZWN0b3I8Y21Eb2N1bWVudGF0aW9uRW50cnk+Jik7CiAgIHZvaWQgQXBwZW5kRXh0cmFHZW5lcmF0b3JzRG9jdW1lbnRhdGlvbihzdGQ6OnZlY3RvcjxjbURvY3VtZW50YXRpb25FbnRyeT4mKTsKKworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhPiBQcm9maWxpbmdPdXRwdXQ7CisjZW5kaWYKIH07CiAKICNkZWZpbmUgQ01BS0VfU1RBTkRBUkRfT1BUSU9OU19UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTcxNCw0ICs3ODcsMTEgQEAKICAgRk9SX0VBQ0hfQ1hYMTFfRkVBVFVSRShGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRk9SX0VBQ0hfQ1hYMTRfRkVBVFVSRShGKQogCisjZGVmaW5lIEZPUl9FQUNIX0NVREFfRkVBVFVSRShGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMjApCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlbWFpbi5jeHggYi9Tb3VyY2UvY21ha2VtYWluLmN4eAppbmRleCA2ZDNlNmVlLi44NGQwNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2VtYWluLmN4eAorKysgYi9Tb3VyY2UvY21ha2VtYWluLmN4eApAQCAtMSw3ICsxLDE2IEBACiAvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjbGltaXRzPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0yNCwxNCArMzMsNiBAQAogIyAgaW5jbHVkZSAiY21zeXMvQ29uc29sZUJ1Zi5oeHgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y2N0eXBlPgotI2luY2x1ZGUgPGNsaW1pdHM+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCiBuYW1lc3BhY2UgewogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKIGNvbnN0IGNoYXIqIGNtRG9jdW1lbnRhdGlvbk5hbWVbXVsyXSA9IHsKQEAgLTczLDEyICs3NCwxNSBAQAogICB7ICItLWxvZy1sZXZlbD08RVJST1J8V0FSTklOR3xOT1RJQ0V8U1RBVFVTfFZFUkJPU0V8REVCVUd8VFJBQ0U+IiwKICAgICAiU2V0IHRoZSB2ZXJib3NpdHkgb2YgbWVzc2FnZXMgZnJvbSBDTWFrZSBmaWxlcy4gIgogICAgICItLWxvZ2xldmVsIGlzIGFsc28gYWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucy4iIH0sCisgIHsgIi0tbG9nLWNvbnRleHQiLCAiUHJlcGVuZCBsb2cgbWVzc2FnZXMgd2l0aCBjb250ZXh0LCBpZiBnaXZlbiIgfSwKICAgeyAiLS1kZWJ1Zy10cnljb21waWxlIiwKICAgICAiRG8gbm90IGRlbGV0ZSB0aGUgdHJ5X2NvbXBpbGUgYnVpbGQgdHJlZS4gT25seSAiCiAgICAgInVzZWZ1bCBvbiBvbmUgdHJ5X2NvbXBpbGUgYXQgYSB0aW1lLiIgfSwKICAgeyAiLS1kZWJ1Zy1vdXRwdXQiLCAiUHV0IGNtYWtlIGluIGEgZGVidWcgbW9kZS4iIH0sCisgIHsgIi0tZGVidWctZmluZCIsICJQdXQgY21ha2UgZmluZCBpbiBhIGRlYnVnIG1vZGUuIiB9LAogICB7ICItLXRyYWNlIiwgIlB1dCBjbWFrZSBpbiB0cmFjZSBtb2RlLiIgfSwKICAgeyAiLS10cmFjZS1leHBhbmQiLCAiUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUgd2l0aCB2YXJpYWJsZSBleHBhbnNpb24uIiB9LAorICB7ICItLXRyYWNlLWZvcm1hdD08aHVtYW58anNvbi12MT4iLCAiU2V0IHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSB0cmFjZS4iIH0sCiAgIHsgIi0tdHJhY2Utc291cmNlPTxmaWxlPiIsCiAgICAgIlRyYWNlIG9ubHkgdGhpcyBDTWFrZSBmaWxlL21vZHVsZS4gTXVsdGlwbGUgb3B0aW9ucyBhbGxvd2VkLiIgfSwKICAgeyAiLS10cmFjZS1yZWRpcmVjdD08ZmlsZT4iLApAQCAtODksNiArOTMsMTIgQEAKICAgeyAiLS1jaGVjay1zeXN0ZW0tdmFycyIsCiAgICAgIkZpbmQgcHJvYmxlbXMgd2l0aCB2YXJpYWJsZSB1c2FnZSBpbiBzeXN0ZW0gIgogICAgICJmaWxlcy4iIH0sCisjICBpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIHsgIi0tcHJvZmlsaW5nLWZvcm1hdD08Zm10PiIsICJPdXRwdXQgZGF0YSBmb3IgcHJvZmlsaW5nIENNYWtlIHNjcmlwdHMuIiB9LAorICB7ICItLXByb2ZpbGluZy1vdXRwdXQ9PGZpbGU+IiwKKyAgICAiU2VsZWN0IGFuIG91dHB1dCBwYXRoIGZvciB0aGUgcHJvZmlsaW5nIGRhdGEgZW5hYmxlZCB0aHJvdWdoICIKKyAgICAiLS1wcm9maWxpbmctZm9ybWF0LiIgfSwKKyMgIGVuZGlmCiAgIHsgbnVsbHB0ciwgbnVsbHB0ciB9CiB9OwogCkBAIC05OSw3ICsxMDksNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJnczsKICAgYXJncy5yZXNlcnZlKGFjIC0gMSk7CiAgIGFyZ3MuZW1wbGFjZV9iYWNrKGF2WzBdKTsKLSAgY21BcHBlbmQoYXJncywgYXYgKyAyLCBhdiArIGFjKTsKKyAgY206OmFwcGVuZChhcmdzLCBhdiArIDIsIGF2ICsgYWMpOwogICByZXR1cm4gY21jbWQ6OkV4ZWN1dGVDTWFrZUNvbW1hbmQoYXJncyk7CiB9CiAKQEAgLTI4MiwxNiArMjkyLDE2IEBACiAgICAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHQgPSBjbS5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VHlwZShrKTsKICAgICAgIGlmICh0ICE9IGNtU3RhdGVFbnVtczo6SU5URVJOQUwgJiYgdCAhPSBjbVN0YXRlRW51bXM6OlNUQVRJQyAmJgogICAgICAgICAgIHQgIT0gY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGFkdmFuY2VkUHJvcCA9CisgICAgICAgIGNtUHJvcCBhZHZhbmNlZFByb3AgPQogICAgICAgICAgIGNtLkdldFN0YXRlKCktPkdldENhY2hlRW50cnlQcm9wZXJ0eShrLCAiQURWQU5DRUQiKTsKICAgICAgICAgaWYgKGxpc3RfYWxsX2NhY2hlZCB8fCAhYWR2YW5jZWRQcm9wKSB7CiAgICAgICAgICAgaWYgKGxpc3RfaGVscCkgewotICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIvLyAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgY20uR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGssICJIRUxQU1RSSU5HIikKLSAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICBjbVByb3AgaGVscCA9CisgICAgICAgICAgICAgIGNtLkdldFN0YXRlKCktPkdldENhY2hlRW50cnlQcm9wZXJ0eShrLCAiSEVMUFNUUklORyIpOworICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIvLyAiIDw8IChoZWxwID8gKmhlbHAgOiAiIikgPDwgc3RkOjplbmRsOwogICAgICAgICAgIH0KICAgICAgICAgICBzdGQ6OmNvdXQgPDwgayA8PCAiOiIgPDwgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyh0KSA8PCAiPSIKLSAgICAgICAgICAgICAgICAgICAgPDwgY20uR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGspIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICAgICAgICAgPDwgY20uR2V0U3RhdGUoKS0+R2V0U2FmZUNhY2hlRW50cnlWYWx1ZShrKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgaWYgKGxpc3RfaGVscCkgewogICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICB9CkBAIC0zNDYsNyArMzU2LDcgQEAKICNlbHNlCiAgIGludCBqb2JzID0gY21ha2U6Ok5PX0JVSUxEX1BBUkFMTEVMX0xFVkVMOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdGFyZ2V0czsKLSAgc3RkOjpzdHJpbmcgY29uZmlnID0gIkRlYnVnIjsKKyAgc3RkOjpzdHJpbmcgY29uZmlnOwogICBzdGQ6OnN0cmluZyBkaXI7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBuYXRpdmVPcHRpb25zOwogICBib29sIGNsZWFuRmlyc3QgPSBmYWxzZTsKQEAgLTY4Miw3ICs2OTIsNiBAQAogICBhYyA9IGFyZ3MuYXJnYygpOwogICBhdiA9IGFyZ3MuYXJndigpOwogCi0gIGNtU3lzdGVtVG9vbHM6OkVuYWJsZU1TVkNEZWJ1Z0hvb2soKTsKICAgY21TeXN0ZW1Ub29sczo6SW5pdGlhbGl6ZUxpYlVWKCk7CiAgIGNtU3lzdGVtVG9vbHM6OkZpbmRDTWFrZVJlc291cmNlcyhhdlswXSk7CiAgIGlmIChhYyA+IDEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWNsZGVwcy5jeHggYi9Tb3VyY2UvY21jbGRlcHMuY3h4CmluZGV4IGNhZjY0NTMuLjVjMjdhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWNsZGVwcy5jeHgKKysrIGIvU291cmNlL2NtY2xkZXBzLmN4eApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgogCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiAvLyBXZSBkb24ndCB3YW50IGFueSB3aWxkY2FyZCBleHBhbnNpb24uCkBAIC02Myw3ICs2NCw3IEBACiAgICAgICAgIG1zZyk7CiB9CiAKLXN0YXRpYyBzdGQ6OnN0cmluZyB0cmltTGVhZGluZ1NwYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjbWRsaW5lKQorc3RhdGljIGNtOjpzdHJpbmdfdmlldyB0cmltTGVhZGluZ1NwYWNlKGNtOjpzdHJpbmdfdmlldyBjbWRsaW5lKQogewogICBpbnQgaSA9IDA7CiAgIGZvciAoOyBjbWRsaW5lW2ldID09ICcgJzsgKytpKQpAQCAtODEsMzQgKzgyLDMwIEBACiAgIH0KIH0KIAotYm9vbCBzdGFydHNXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIGNvbnN0IHN0ZDo6c3RyaW5nJiB3aGF0KQotewotICByZXR1cm4gc3RyLmNvbXBhcmUoMCwgd2hhdC5zaXplKCksIHdoYXQpID09IDA7Ci19Ci0KIC8vIFN0cmlwcyBvbmUgYXJndW1lbnQgZnJvbSB0aGUgY21kbGluZSBhbmQgcmV0dXJucyBpdC4gInN1cnJvdW5kaW5nIHF1b3RlcyIKIC8vIGFyZSByZW1vdmVkIGZyb20gdGhlIGFyZ3VtZW50IGlmIHRoZXJlIHdlcmUgYW55Lgogc3RhdGljIHN0ZDo6c3RyaW5nIGdldEFyZyhzdGQ6OnN0cmluZyYgY21kbGluZSkKIHsKLSAgc3RkOjpzdHJpbmcgcmV0OwogICBib29sIGluX3F1b3RlZCA9IGZhbHNlOwogICB1bnNpZ25lZCBpbnQgaSA9IDA7CiAKLSAgY21kbGluZSA9IHRyaW1MZWFkaW5nU3BhY2UoY21kbGluZSk7CisgIGNtOjpzdHJpbmdfdmlldyBjbWR2aWV3ID0gdHJpbUxlYWRpbmdTcGFjZShjbWRsaW5lKTsKKyAgc2l6ZV90IHNwYWNlQ250ID0gY21kbGluZS5zaXplKCkgLSBjbWR2aWV3LnNpemUoKTsKIAogICBmb3IgKDs7ICsraSkgewotICAgIGlmIChpID49IGNtZGxpbmUuc2l6ZSgpKQorICAgIGlmIChpID49IGNtZHZpZXcuc2l6ZSgpKQogICAgICAgdXNhZ2UoIkNvdWxkbid0IHBhcnNlIGFyZ3VtZW50cy4iKTsKLSAgICBpZiAoIWluX3F1b3RlZCAmJiBjbWRsaW5lW2ldID09ICcgJykKKyAgICBpZiAoIWluX3F1b3RlZCAmJiBjbWR2aWV3W2ldID09ICcgJykKICAgICAgIGJyZWFrOyAvLyAiYSBiIiAieCB5IgotICAgIGlmIChjbWRsaW5lW2ldID09ICciJykKKyAgICBpZiAoY21kdmlld1tpXSA9PSAnIicpCiAgICAgICBpbl9xdW90ZWQgPSAhaW5fcXVvdGVkOwogICB9CiAKLSAgcmV0ID0gY21kbGluZS5zdWJzdHIoMCwgaSk7Ci0gIGlmIChyZXRbMF0gPT0gJyInICYmIHJldFtpIC0gMV0gPT0gJyInKQotICAgIHJldCA9IHJldC5zdWJzdHIoMSwgcmV0LnNpemUoKSAtIDIpOwotICBjbWRsaW5lID0gY21kbGluZS5zdWJzdHIoaSk7CisgIGNtZHZpZXcgPSBjbWR2aWV3LnN1YnN0cigwLCBpKTsKKyAgaWYgKGNtZHZpZXdbMF0gPT0gJyInICYmIGNtZHZpZXdbaSAtIDFdID09ICciJykKKyAgICBjbWR2aWV3ID0gY21kdmlldy5zdWJzdHIoMSwgaSAtIDIpOworICBzdGQ6OnN0cmluZyByZXQoY21kdmlldyk7CisgIGNtZGxpbmUuZXJhc2UoMCwgc3BhY2VDbnQgKyBpKTsKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTI3LDcgKzEyNCw3IEBACiAgIHByZWZpeCA9IGdldEFyZyhjbWRsaW5lKTsKICAgY2xwYXRoID0gZ2V0QXJnKGNtZGxpbmUpOwogICBiaW5wYXRoID0gZ2V0QXJnKGNtZGxpbmUpOwotICByZXN0ID0gdHJpbUxlYWRpbmdTcGFjZShjbWRsaW5lKTsKKyAgcmVzdCA9IHN0ZDo6c3RyaW5nKHRyaW1MZWFkaW5nU3BhY2UoY21kbGluZSkpOwogfQogCiAvLyBOb3QgYWxsIGJhY2tzbGFzaGVzIG5lZWQgdG8gYmUgZXNjYXBlZCBpbiBhIGRlcGZpbGUsIGJ1dCBpdCdzIGVhc2llciB0aGF0CkBAIC0xNjksOCArMTY2LDggQEAKICAgICAvLyBidWlsZC5uaW5qYSBmaWxlLiAgVGhlcmVmb3JlIHdlIG5lZWQgdG8gY2Fub25pY2FsaXplIHRoZSBwYXRoIHRvIHVzZQogICAgIC8vIGJhY2t3YXJkIHNsYXNoZXMgYW5kIHJlbGF0aXZpemUgdGhlIHBhdGggdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KICAgICByZXBsYWNlQWxsKHRtcCwgIi8iLCAiXFwiKTsKLSAgICBpZiAoc3RhcnRzV2l0aCh0bXAsIGN3ZCkpCi0gICAgICB0bXAgPSB0bXAuc3Vic3RyKGN3ZC5zaXplKCkpOworICAgIGlmIChjbUhhc1ByZWZpeCh0bXAsIGN3ZCkpCisgICAgICB0bXAuZXJhc2UoMCwgY3dkLnNpemUoKSk7CiAgICAgZXNjYXBlUGF0aCh0bXApOwogICAgIGZwcmludGYob3V0LCAiJXMgXFxcbiIsIHRtcC5jX3N0cigpKTsKICAgfQpAQCAtMTk0LDcgKzE5MSw3IEBACiAgIHJldHVybiByZXBsYWNlZC5yZXBsYWNlKHBvcywgd2hhdC5zaXplKCksIHJlcGxhY2VtZW50KTsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBzcmNmaWxlbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGRmaWxlLAorc3RhdGljIGludCBwcm9jZXNzKGNtOjpzdHJpbmdfdmlldyBzcmNmaWxlbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGRmaWxlLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvYmpmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJlZml4LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjbWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIgPSAiIiwKICAgICAgICAgICAgICAgICAgICBib29sIHF1aWV0ID0gZmFsc2UpCkBAIC0yMjEsMTMgKzIxOCwxNCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZXM7CiAgIGJvb2wgaXNGaXJzdExpbmUgPSB0cnVlOyAvLyBjbCBwcmludHMgYWx3YXlzIGZpcnN0IHRoZSBzb3VyY2UgZmlsZW5hbWUKICAgd2hpbGUgKHN0ZDo6Z2V0bGluZShzcywgbGluZSkpIHsKLSAgICBpZiAoc3RhcnRzV2l0aChsaW5lLCBwcmVmaXgpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBpbmMgPSB0cmltTGVhZGluZ1NwYWNlKGxpbmUuc3Vic3RyKHByZWZpeC5zaXplKCkpLmNfc3RyKCkpOworICAgIGNtOjpzdHJpbmdfdmlldyBpbmMobGluZSk7CisgICAgaWYgKGNtSGFzUHJlZml4KGluYywgcHJlZml4KSkgeworICAgICAgaW5jID0gdHJpbUxlYWRpbmdTcGFjZShpbmMuc3Vic3RyKHByZWZpeC5zaXplKCkpKTsKICAgICAgIGlmIChpbmMuYmFjaygpID09ICdccicpIC8vIGJsZWNoLCBzdHVwaWQgXHJcbgogICAgICAgICBpbmMgPSBpbmMuc3Vic3RyKDAsIGluYy5zaXplKCkgLSAxKTsKLSAgICAgIGluY2x1ZGVzLnB1c2hfYmFjayhpbmMpOworICAgICAgaW5jbHVkZXMuZW1wbGFjZV9iYWNrKHN0ZDo6c3RyaW5nKGluYykpOwogICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIWlzRmlyc3RMaW5lIHx8ICFzdGFydHNXaXRoKGxpbmUsIHNyY2ZpbGVuYW1lKSkgeworICAgICAgaWYgKCFpc0ZpcnN0TGluZSB8fCAhY21IYXNQcmVmaXgoaW5jLCBzcmNmaWxlbmFtZSkpIHsKICAgICAgICAgaWYgKCFxdWlldCB8fCBleGl0X2NvZGUgIT0gMCkgewogICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIGxpbmUuY19zdHIoKSk7CiAgICAgICAgIH0KQEAgLTI1OCwxNCArMjU2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgY2wsIGJpbnBhdGgsIHJlc3QpOwogCiAgIC8vIG5lZWRlZCB0byBzdXBwcmVzcyBmaWxlbmFtZSBvdXRwdXQgb2YgbXN2YyB0b29scwotICBzdGQ6OnN0cmluZyBzcmNmaWxlbmFtZTsKLSAgewotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gc3JjZmlsZS5yZmluZCgnXFwnKTsKLSAgICBpZiAocG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICBzcmNmaWxlbmFtZSA9IHNyY2ZpbGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNyY2ZpbGVuYW1lID0gc3JjZmlsZS5zdWJzdHIocG9zICsgMSk7Ci0gICAgfQorICBjbTo6c3RyaW5nX3ZpZXcgc3JjZmlsZW5hbWUoc3JjZmlsZSk7CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gc3JjZmlsZS5yZmluZCgnXFwnKTsKKyAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIHNyY2ZpbGVuYW1lID0gc3JjZmlsZW5hbWUuc3Vic3RyKHBvcyArIDEpOwogICB9CiAKICAgc3RkOjpzdHJpbmcgbm9sID0gIiAvbm9sb2dvICI7CkBAIC0yODYsNyArMjgwLDcgQEAKICAgICAvLyBjYWxsIGNsIGluIG9iamVjdCBkaXIgc28gdGhlIC5pIGlzIGdlbmVyYXRlZCB0aGVyZQogICAgIHN0ZDo6c3RyaW5nIG9iamRpcjsKICAgICB7Ci0gICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IG9iamZpbGUucmZpbmQoIlxcIik7CisgICAgICBwb3MgPSBvYmpmaWxlLnJmaW5kKCJcXCIpOwogICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgICBvYmpkaXIgPSBvYmpmaWxlLnN1YnN0cigwLCBwb3MpOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtY21kLmN4eCBiL1NvdXJjZS9jbWNtZC5jeHgKaW5kZXggZDA1ZTNjOC4uMThhMjEwOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtY21kLmN4eAorKysgYi9Tb3VyY2UvY21jbWQuY3h4CkBAIC0yLDYgKzIsMTIgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtY21kLmgiCiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiY21fdXYuaCIKKwogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtMTUsMjIgKzIxLDIyIEBACiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgorI2luY2x1ZGUgImNtVVZQcm9jZXNzQ2hhaW4uaCIKICNpbmNsdWRlICJjbVV0aWxzLmh4eCIKICNpbmNsdWRlICJjbVZlcnNpb24uaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogIyAgaW5jbHVkZSAiY21EZXBlbmRzRm9ydHJhbi5oIiAvLyBGb3IgLUUgY21ha2VfY29weV9mOTBfbW9kIGNhbGxiYWNrLgorIyAgaW5jbHVkZSAiY21GaWxlVGltZS5oIgogIyAgaW5jbHVkZSAiY21TZXJ2ZXIuaCIKICMgIGluY2x1ZGUgImNtU2VydmVyQ29ubmVjdGlvbi5oIgorCisjICBpbmNsdWRlICJiaW5kZXhwbGliLmgiCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkgJiYgZGVmaW5lZChfV0lOMzIpCiAjICBpbmNsdWRlICJjbXN5cy9Db25zb2xlQnVmLmh4eCIKLQotIyAgaW5jbHVkZSAiY21GaWxlVGltZS5oIgotCi0jICBpbmNsdWRlICJiaW5kZXhwbGliLmgiCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkgJiYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCkBAIC0xMDcsMTAgKzExMywxMiBAQAogICAgIDw8ICIgIHNoYTM4NHN1bSA8ZmlsZT4uLi4gICAgICAgLSBjcmVhdGUgU0hBMzg0IGNoZWNrc3VtIG9mIGZpbGVzXG4iCiAgICAgPDwgIiAgc2hhNTEyc3VtIDxmaWxlPi4uLiAgICAgICAtIGNyZWF0ZSBTSEE1MTIgY2hlY2tzdW0gb2YgZmlsZXNcbiIKICAgICA8PCAiICByZW1vdmUgWy1mXSA8ZmlsZT4uLi4gICAgIC0gcmVtb3ZlIHRoZSBmaWxlKHMpLCB1c2UgLWYgdG8gZm9yY2UgIgotICAgICAgICJpdFxuIgotICAgIDw8ICIgIHJlbW92ZV9kaXJlY3RvcnkgPGRpcj4uLi4gLSByZW1vdmUgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIGNvbnRlbnRzXG4iCisgICAgICAgIml0IChkZXByZWNhdGVkOiB1c2Ugcm0gaW5zdGVhZClcbiIKKyAgICA8PCAiICByZW1vdmVfZGlyZWN0b3J5IDxkaXI+Li4uIC0gcmVtb3ZlIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cyAoZGVwcmVjYXRlZDogdXNlIHJtIGluc3RlYWQpXG4iCiAgICAgPDwgIiAgcmVuYW1lIG9sZG5hbWUgbmV3bmFtZSAgICAtIHJlbmFtZSBhIGZpbGUgb3IgZGlyZWN0b3J5ICIKICAgICAgICAiKG9uIG9uZSB2b2x1bWUpXG4iCisgICAgPDwgIiAgcm0gWy1yUmZdIDxmaWxlL2Rpcj4uLi4gICAgLSByZW1vdmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMsIHVzZSAtZiB0byAiCisgICAgICAgImZvcmNlIGl0LCByIG9yIFIgdG8gcmVtb3ZlIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cyByZWN1cnNpdmVseVxuIgogICAgIDw8ICIgIHNlcnZlciAgICAgICAgICAgICAgICAgICAgLSBzdGFydCBjbWFrZSBpbiBzZXJ2ZXIgbW9kZVxuIgogICAgIDw8ICIgIHNsZWVwIDxudW1iZXI+Li4uICAgICAgICAgLSBzbGVlcCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHNcbiIKICAgICA8PCAiICB0YXIgW2N4dF1bdmZdW3pqSl0gZmlsZS50YXIgW2ZpbGUvZGlyMSBmaWxlL2RpcjIgLi4uXVxuIgpAQCAtMTcyLDYgKzE4MCwyNCBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgY21SZW1vdmVEaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgYm9vbCByZWN1cnNpdmUgPSB0cnVlKQoreworICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzU3ltbGluayhkaXIpKSB7CisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGRpcikpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3IgcmVtb3ZpbmcgZGlyZWN0b3J5IHN5bWxpbmsgXCIiIDw8IGRpciA8PCAiXCIuXG4iOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfSBlbHNlIGlmICghcmVjdXJzaXZlKSB7CisgICAgc3RkOjpjZXJyIDw8ICJFcnJvciByZW1vdmluZyBkaXJlY3RvcnkgXCIiIDw8IGRpcgorICAgICAgICAgICAgICA8PCAiXCIgd2l0aG91dCByZWN1cnNpdmUgb3B0aW9uLlxuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0gZWxzZSBpZiAoIWNtU3lzdGVtVG9vbHM6OlJlbW92ZUFEaXJlY3RvcnkoZGlyKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3IgcmVtb3ZpbmcgZGlyZWN0b3J5IFwiIiA8PCBkaXIgPDwgIlwiLlxuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgSGFuZGxlSVdZVShjb25zdCBzdGQ6OnN0cmluZyYgcnVuQ21kLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKiBzb3VyY2VGaWxlICovLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3JpZ19jbWQpCkBAIC0xNzksNyArMjA1LDcgQEAKICAgLy8gQ29uc3RydWN0IHRoZSBpd3l1IGNvbW1hbmQgbGluZSBieSB0YWtpbmcgd2hhdCB3YXMgZ2l2ZW4KICAgLy8gYW5kIGFkZGluZyBhbGwgdGhlIGFyZ3VtZW50cyB3ZSBnaXZlIHRvIHRoZSBjb21waWxlci4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGl3eXVfY21kID0gY21FeHBhbmRlZExpc3QocnVuQ21kLCB0cnVlKTsKLSAgY21BcHBlbmQoaXd5dV9jbWQsIG9yaWdfY21kLmJlZ2luKCkgKyAxLCBvcmlnX2NtZC5lbmQoKSk7CisgIGNtOjphcHBlbmQoaXd5dV9jbWQsIG9yaWdfY21kLmJlZ2luKCkgKyAxLCBvcmlnX2NtZC5lbmQoKSk7CiAgIC8vIFJ1biB0aGUgaXd5dSBjb21tYW5kIGxpbmUuICBDYXB0dXJlIGl0cyBzdGRlcnIgYW5kIGhpZGUgaXRzIHN0ZG91dC4KICAgLy8gSWdub3JlIGl0cyByZXR1cm4gY29kZSBiZWNhdXNlIHRoZSB0b29sIGFsd2F5cyByZXR1cm5zIG5vbi16ZXJvLgogICBzdGQ6OnN0cmluZyBzdGRFcnI7CkBAIC0yMTAsNyArMjM2LDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRpZHlfY21kID0gY21FeHBhbmRlZExpc3QocnVuQ21kLCB0cnVlKTsKICAgdGlkeV9jbWQucHVzaF9iYWNrKHNvdXJjZUZpbGUpOwogICB0aWR5X2NtZC5lbXBsYWNlX2JhY2soIi0tIik7Ci0gIGNtQXBwZW5kKHRpZHlfY21kLCBvcmlnX2NtZCk7CisgIGNtOjphcHBlbmQodGlkeV9jbWQsIG9yaWdfY21kKTsKIAogICAvLyBSdW4gdGhlIHRpZHkgY29tbWFuZCBsaW5lLiAgQ2FwdHVyZSBpdHMgc3Rkb3V0IGFuZCBoaWRlIGl0cyBzdGRlcnIuCiAgIHN0ZDo6c3RyaW5nIHN0ZE91dDsKQEAgLTU2MSwxMSArNTg3LDExIEBACiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQotICAgIGVsc2UgaWYgKGFyZ3NbMV0gPT0gIl9fY3JlYXRlX2RlZiIpIHsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgICAgaWYgKGFyZ3NbMV0gPT0gIl9fY3JlYXRlX2RlZiIpIHsKICAgICAgIGlmIChhcmdzLnNpemUoKSA8IDQpIHsKICAgICAgICAgc3RkOjpjZXJyIDw8ICJfX2NyZWF0ZV9kZWYgVXNhZ2U6IC1FIF9fY3JlYXRlX2RlZiBvdXRmaWxlLmRlZiAiCi0gICAgICAgICAgICAgICAgICAgICAib2JqbGlzdGZpbGUgWy1ubT1ubS1wYXRoXVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICJvYmpsaXN0ZmlsZSBbLS1ubT1ubS1wYXRoXVxuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBjbXN5czo6aWZzdHJlYW0gZmluKGFyZ3NbM10uY19zdHIoKSwgc3RkOjppb3M6OmluIHwgc3RkOjppb3M6OmJpbmFyeSk7CkBAIC01OTIsNyArNjE4LDcgQEAKICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgfQotICAgICAgRklMRSogZm91dCA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6Rm9wZW4oYXJnc1syXS5jX3N0cigpLCAidysiKTsKKyAgICAgIEZJTEUqIGZvdXQgPSBjbXN5czo6U3lzdGVtVG9vbHM6OkZvcGVuKGFyZ3NbMl0sICJ3KyIpOwogICAgICAgaWYgKCFmb3V0KSB7CiAgICAgICAgIHN0ZDo6Y2VyciA8PCAiY291bGQgbm90IG9wZW4gb3V0cHV0IC5kZWYgZmlsZTogIiA8PCBhcmdzWzJdLmNfc3RyKCkKICAgICAgICAgICAgICAgICAgIDw8ICJcbiI7CkBAIC02NTIsNyArNjc4LDcgQEAKICAgICAgICAgfSBlbHNlIGlmICghYS5lbXB0eSgpICYmIGFbMF0gPT0gJy0nKSB7CiAgICAgICAgICAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGNvbW1hbmQgbmFtZXMgY2Fubm90IHN0YXJ0IGluICctJywKICAgICAgICAgICAvLyBzbyB0aGlzIG11c3QgYmUgYW4gdW5rbm93biBvcHRpb24uCi0gICAgICAgICAgc3RkOjpjZXJyIDw8ICJjbWFrZSAtRSBlbnY6IHVua25vd24gb3B0aW9uICciIDw8IGEgPDwgIiciCisgICAgICAgICAgc3RkOjpjZXJyIDw8ICJjbWFrZSAtRSBlbnY6IHVua25vd24gb3B0aW9uICciIDw8IGEgPDwgJ1wnJwogICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0gZWxzZSBpZiAoYS5maW5kKCc9JykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKQEAgLTcwNiwxNCArNzMyLDcgQEAKICAgICAgIGJvb2wgcmV0dXJuX3ZhbHVlID0gZmFsc2U7CiAgICAgICBmb3IgKGF1dG8gY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKGFyZ3MpLmFkdmFuY2UoMikpIHsKICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShhcmcpKSB7Ci0gICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsoYXJnKSkgewotICAgICAgICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGFyZykpIHsKLSAgICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJFcnJvciByZW1vdmluZyBkaXJlY3Rvcnkgc3ltbGluayBcIiIgPDwgYXJnCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCIuXG4iOwotICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSBpZiAoIWNtU3lzdGVtVG9vbHM6OlJlbW92ZUFEaXJlY3RvcnkoYXJnKSkgewotICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJFcnJvciByZW1vdmluZyBkaXJlY3RvcnkgXCIiIDw8IGFyZyA8PCAiXCIuXG4iOworICAgICAgICAgIGlmICghY21SZW1vdmVEaXJlY3RvcnkoYXJnKSkgewogICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gdHJ1ZTsKICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTczOSw2ICs3NTgsNjUgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIC8vIFJlbW92ZSBkaXJlY3RvcmllcyBvciBmaWxlcyB3aXRoIHJtCisgICAgaWYgKGFyZ3NbMV0gPT0gInJtIiAmJiBhcmdzLnNpemUoKSA+IDIpIHsKKyAgICAgIC8vIElmIGFuIGVycm9yIG9jY3Vycywgd2Ugd2FudCB0byBjb250aW51ZSByZW1vdmluZyB0aGUgcmVtYWluaW5nCisgICAgICAvLyBmaWxlcy9kaXJlY3Rvcmllcy4KKyAgICAgIGludCByZXR1cm5fdmFsdWUgPSAwOworICAgICAgYm9vbCBmb3JjZSA9IGZhbHNlOworICAgICAgYm9vbCByZWN1cnNpdmUgPSBmYWxzZTsKKyAgICAgIGJvb2wgZG9pbmdfb3B0aW9ucyA9IHRydWU7CisgICAgICBib29sIGF0X2xlYXN0X29uZV9maWxlID0gZmFsc2U7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKGFyZ3MpLmFkdmFuY2UoMikpIHsKKyAgICAgICAgaWYgKGRvaW5nX29wdGlvbnMgJiYgY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0iKSkgeworICAgICAgICAgIGlmIChhcmcgPT0gIi0tIikgeworICAgICAgICAgICAgZG9pbmdfb3B0aW9ucyA9IGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJnLmZpbmQoJ2YnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgZm9yY2UgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJnLmZpbmRfZmlyc3Rfb2YoInJSIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChhcmcuZmluZF9maXJzdF9ub3Rfb2YoIi1mclIiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIlVua25vd24gLUUgcm0gYXJndW1lbnQ6ICIgKyBhcmcpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChhcmcuZW1wdHkoKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGF0X2xlYXN0X29uZV9maWxlID0gdHJ1ZTsKKyAgICAgICAgICAvLyBDb21wbGFpbiBpZiB0aGUgLWYgb3B0aW9uIHdhcyBub3QgZ2l2ZW4gYW5kCisgICAgICAgICAgLy8gZWl0aGVyIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IKKyAgICAgICAgICAvLyBmaWxlIGNvdWxkIG5vdCBiZSByZW1vdmVkIGFuZCBzdGlsbCBleGlzdHMKKyAgICAgICAgICBib29sIGZpbGVfZXhpc3RzX29yX2ZvcmNlZF9yZW1vdmUgPSBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGFyZykgfHwKKyAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsoYXJnKSB8fCBmb3JjZTsKKyAgICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KGFyZykpIHsKKyAgICAgICAgICAgIGlmICghY21SZW1vdmVEaXJlY3RvcnkoYXJnLCByZWN1cnNpdmUpKSB7CisgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmICgoIWZpbGVfZXhpc3RzX29yX2ZvcmNlZF9yZW1vdmUpIHx8CisgICAgICAgICAgICAgICAgICAgICAoIWNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoYXJnKSAmJgorICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoYXJnKSkpIHsKKyAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHNfb3JfZm9yY2VkX3JlbW92ZSkgeworICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgICAgICAgICAgICAiRmlsZSB0byByZW1vdmUgZG9lcyBub3QgZXhpc3QgYW5kIGZvcmNlIGlzIG5vdCBzZXQ6ICIgKyBhcmcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkZpbGUgY2FuJ3QgYmUgcmVtb3ZlZCBhbmQgc3RpbGwgZXhpc3Q6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmICghYXRfbGVhc3Rfb25lX2ZpbGUpIHsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk1pc3NpbmcgZmlsZS9kaXJlY3RvcnkgdG8gcmVtb3ZlIik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICB9CisKICAgICAvLyBUb3VjaCBmaWxlCiAgICAgaWYgKGFyZ3NbMV0gPT0gInRvdWNoIiAmJiBhcmdzLnNpemUoKSA+IDIpIHsKICAgICAgIGZvciAoYXV0byBjb25zdCYgYXJnIDogY21NYWtlUmFuZ2UoYXJncykuYWR2YW5jZSgyKSkgewpAQCAtOTc2LDggKzEwNTQsNyBAQAogICAgICAgICBob21lT3V0RGlyID0gYXJnc1s1XTsKICAgICAgICAgc3RhcnRPdXREaXIgPSBhcmdzWzZdOwogICAgICAgICBkZXBJbmZvID0gYXJnc1s3XTsKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDkgJiYgYXJnc1s4XS5sZW5ndGgoKSA+PSA4ICYmCi0gICAgICAgICAgICBhcmdzWzhdLnN1YnN0cigwLCA4KSA9PSAiLS1jb2xvcj0iKSB7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA5ICYmIGNtSGFzTGl0ZXJhbFByZWZpeChhcmdzWzhdLCAiLS1jb2xvcj0iKSkgewogICAgICAgICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIGJhc2VkIG9uIHRoZSBzd2l0Y2ggdmFsdWUuCiAgICAgICAgICAgY29sb3IgPSAoYXJnc1s4XS5zaXplKCkgPT0gOCB8fCBjbUlzT24oYXJnc1s4XS5zdWJzdHIoOCkpKTsKICAgICAgICAgfQpAQCAtMTAwNywxMyArMTA4NCwxMyBAQAogICAgICAgY20uU2V0SG9tZURpcmVjdG9yeShob21lRGlyKTsKICAgICAgIGNtLlNldEhvbWVPdXRwdXREaXJlY3RvcnkoaG9tZU91dERpcik7CiAgICAgICBjbS5HZXRDdXJyZW50U25hcHNob3QoKS5TZXREZWZhdWx0RGVmaW5pdGlvbnMoKTsKLSAgICAgIGlmIChjbUdsb2JhbEdlbmVyYXRvciogZ2dkID0gY20uQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKGdlbikpIHsKLSAgICAgICAgY20uU2V0R2xvYmFsR2VuZXJhdG9yKGdnZCk7CisgICAgICBpZiAoYXV0byBnZ2QgPSBjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZ2VuKSkgeworICAgICAgICBjbS5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdnZCkpOwogICAgICAgICBjbVN0YXRlU25hcHNob3Qgc25hcHNob3QgPSBjbS5HZXRDdXJyZW50U25hcHNob3QoKTsKICAgICAgICAgc25hcHNob3QuR2V0RGlyZWN0b3J5KCkuU2V0Q3VycmVudEJpbmFyeShzdGFydE91dERpcik7CiAgICAgICAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRTb3VyY2Uoc3RhcnREaXIpOwotICAgICAgICBjbU1ha2VmaWxlIG1mKGdnZCwgc25hcHNob3QpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4gbGdkKGdnZC0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IoJm1mKSk7CisgICAgICAgIGNtTWFrZWZpbGUgbWYoY20uR2V0R2xvYmFsR2VuZXJhdG9yKCksIHNuYXBzaG90KTsKKyAgICAgICAgYXV0byBsZ2QgPSBjbS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IoJm1mKTsKIAogICAgICAgICAvLyBBY3R1YWxseSBzY2FuIGRlcGVuZGVuY2llcy4KICAgICAgICAgcmV0dXJuIGxnZC0+VXBkYXRlRGVwZW5kZW5jaWVzKGRlcEluZm8sIHZlcmJvc2UsIGNvbG9yKSA/IDAgOiAyOwpAQCAtMTA1Niw2ICsxMTMzLDEwIEBACiAgICAgICByZXR1cm4gY21jbWQ6OlZpc3VhbFN0dWRpb0xpbmsoYXJncywgMik7CiAgICAgfQogCisgICAgaWYgKGFyZ3NbMV0gPT0gImNtYWtlX2xsdm1fcmMiKSB7CisgICAgICByZXR1cm4gY21jbWQ6OlJ1bkxMVk1SQyhhcmdzKTsKKyAgICB9CisKICAgICAvLyBJbnRlcm5hbCBDTWFrZSBjb2xvciBtYWtlZmlsZSBzdXBwb3J0LgogICAgIGlmIChhcmdzWzFdID09ICJjbWFrZV9lY2hvX2NvbG9yIikgewogICAgICAgcmV0dXJuIGNtY21kOjpFeGVjdXRlRWNob0NvbG9yKGFyZ3MpOwpAQCAtMTIyMiw3ICsxMzAzLDcgQEAKICAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tZGVidWciKSB7CiAgICAgICAgICAgcGlwZS5jbGVhcigpOwogICAgICAgICAgIGlzRGVidWcgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGFyZy5zdWJzdHIoMCwgcGlwZVByZWZpeC5zaXplKCkpID09IHBpcGVQcmVmaXgpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChhcmcsIHBpcGVQcmVmaXgpKSB7CiAgICAgICAgICAgaXNEZWJ1ZyA9IGZhbHNlOwogICAgICAgICAgIHBpcGUgPSBhcmcuc3Vic3RyKHBpcGVQcmVmaXguc2l6ZSgpKTsKICAgICAgICAgICBpZiAocGlwZS5lbXB0eSgpKSB7CkBAIC0xNDI5LDcgKzE1MTAsNyBAQAogICBib29sIG5ld2xpbmUgPSB0cnVlOwogICBzdGQ6OnN0cmluZyBwcm9ncmVzc0RpcjsKICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDIpKSB7Ci0gICAgaWYgKGFyZy5maW5kKCItLXN3aXRjaD0iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXN3aXRjaD0iKSkgewogICAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgY29sb3IgYmFzZWQgb24gdGhlIHN3aXRjaCB2YWx1ZS4KICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cig5KTsKICAgICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewpAQCAtMTQ4NCw3ICsxNTY1LDcgQEAKICAgLy8gICBhcmdzWzNdID09IC0tdmVyYm9zZT0/CiAgIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICBpZiAoYXJncy5zaXplKCkgPj0gNCkgewotICAgIGlmIChhcmdzWzNdLmZpbmQoIi0tdmVyYm9zZT0iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmdzWzNdLCAiLS12ZXJib3NlPSIpKSB7CiAgICAgICBpZiAoIWNtSXNPZmYoYXJnc1szXS5zdWJzdHIoMTApKSkgewogICAgICAgICB2ZXJib3NlID0gdHJ1ZTsKICAgICAgIH0KQEAgLTE1NzIsMTEgKzE2NTMsMTMgQEAKICAgY21WaXN1YWxTdHVkaW9XQ0VQbGF0Zm9ybVBhcnNlciBwYXJzZXIobmFtZS5jX3N0cigpKTsKICAgcGFyc2VyLlBhcnNlVmVyc2lvbih2ZXJzaW9uKTsKICAgaWYgKHBhcnNlci5Gb3VuZCgpKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJAZWNobyBvZmYiIDw8IHN0ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgImVjaG8gRW52aXJvbm1lbnQgU2VsZWN0aW9uOiAiIDw8IG5hbWUgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IFBBVEg9IiA8PCBwYXJzZXIuR2V0UGF0aERpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IElOQ0xVREU9IiA8PCBwYXJzZXIuR2V0SW5jbHVkZURpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IExJQj0iIDw8IHBhcnNlci5HZXRMaWJyYXJ5RGlyZWN0b3JpZXMoKSA8PCBzdGQ6OmVuZGw7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIHN0ZDo6Y291dCA8PCAiQGVjaG8gb2ZmXG4iCisgICAgICAgICAgICAgICAgICJlY2hvIEVudmlyb25tZW50IFNlbGVjdGlvbjogIiA8PCBuYW1lIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBQQVRIPSIgPDwgcGFyc2VyLkdldFBhdGhEaXJlY3RvcmllcygpIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBJTkNMVURFPSIgPDwgcGFyc2VyLkdldEluY2x1ZGVEaXJlY3RvcmllcygpIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBMSUI9IiA8PCBwYXJzZXIuR2V0TGlicmFyeURpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgIHJldHVybiAwOwogICB9CiAjZWxzZQpAQCAtMTU4Nyw2ICsxNjcwLDExNyBAQAogICByZXR1cm4gLTE7CiB9CiAKK2ludCBjbWNtZDo6UnVuUHJlcHJvY2Vzc29yKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcm1lZGlhdGVfZmlsZSkKK3sKKworICBjbVVWUHJvY2Vzc0NoYWluQnVpbGRlciBidWlsZGVyOworCisgIHV2X2ZzX3QgZnNfcmVxOworICBpbnQgcHJlcHJvY2Vzc2VkRmlsZSA9CisgICAgdXZfZnNfb3BlbihudWxscHRyLCAmZnNfcmVxLCBpbnRlcm1lZGlhdGVfZmlsZS5jX3N0cigpLCBPX0NSRUFUIHwgT19SRFdSLAorICAgICAgICAgICAgICAgMDY0NCwgbnVsbHB0cik7CisgIHV2X2ZzX3JlcV9jbGVhbnVwKCZmc19yZXEpOworCisgIGJ1aWxkZXIKKyAgICAuU2V0RXh0ZXJuYWxTdHJlYW0oY21VVlByb2Nlc3NDaGFpbkJ1aWxkZXI6OlN0cmVhbV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3NlZEZpbGUpCisgICAgLlNldEJ1aWx0aW5TdHJlYW0oY21VVlByb2Nlc3NDaGFpbkJ1aWxkZXI6OlN0cmVhbV9FUlJPUikKKyAgICAuQWRkQ29tbWFuZChjb21tYW5kKTsKKyAgYXV0byBwcm9jZXNzID0gYnVpbGRlci5TdGFydCgpOworICBpZiAoIXByb2Nlc3MuVmFsaWQoKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIHN0YXJ0IHByZXByb2Nlc3Nvci4iOworICAgIHJldHVybiAxOworICB9CisgIGlmICghcHJvY2Vzcy5XYWl0KCkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byB3YWl0IGZvciBwcmVwcm9jZXNzb3IiOworICAgIHJldHVybiAxOworICB9CisgIGF1dG8gc3RhdHVzID0gcHJvY2Vzcy5HZXRTdGF0dXMoKTsKKyAgaWYgKCFzdGF0dXNbMF0gfHwgc3RhdHVzWzBdLT5FeGl0U3RhdHVzICE9IDApIHsKKyAgICBhdXRvIGVycm9yU3RyZWFtID0gcHJvY2Vzcy5FcnJvclN0cmVhbSgpOworICAgIGlmIChlcnJvclN0cmVhbSkgeworICAgICAgc3RkOjpjZXJyIDw8IGVycm9yU3RyZWFtLT5yZGJ1ZigpOworICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjbWNtZDo6UnVuTExWTVJDKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncykKK3sKKyAgLy8gVGhlIGFyZ3VtZW50cyBhcmUKKyAgLy8gICBhcmdzWzBdID09IDxjbWFrZS1leGVjdXRhYmxlPgorICAvLyAgIGFyZ3NbMV0gPT0gY21ha2VfbGx2bV9yYworICAvLyAgIGFyZ3NbMl0gPT0gaW50ZXJtZWRpYXRlX2ZpbGUKKyAgLy8gICBhcmdzWzMuLm5dID09IHByZXByb2Nlc3MrYXJncworICAvLyAgIGFyZ3NbbisxXSA9PSAtLQorICAvLyAgIGFyZ3NbbisyLi4uXSA9PSBsbHZtLXJjK2FyZ3MKKyAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykgeworICAgIHN0ZDo6Y2VyciA8PCAiSW52YWxpZCBjbWFrZV9sbHZtX3JjIGFyZ3VtZW50cyI7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGludGVybWVkaWF0ZV9maWxlID0gYXJnc1syXTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByZXByb2Nlc3M7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXNvdXJjZV9jb21waWxlOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHBBcmdUZ3QgPSAmcHJlcHJvY2VzczsKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJnIDogY21NYWtlUmFuZ2UoYXJncykuYWR2YW5jZSgzKSkgeworICAgIGlmIChhcmcgPT0gIi0tIikgeworICAgICAgcEFyZ1RndCA9ICZyZXNvdXJjZV9jb21waWxlOworICAgIH0gZWxzZSB7CisgICAgICBwQXJnVGd0LT5wdXNoX2JhY2soYXJnKTsKKyAgICB9CisgIH0KKyAgaWYgKHByZXByb2Nlc3MuZW1wdHkoKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRW1wdHkgcHJlcHJvY2Vzc2luZyBjb21tYW5kIjsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiAocmVzb3VyY2VfY29tcGlsZS5lbXB0eSgpKSB7CisgICAgc3RkOjpjZXJyIDw8ICJFbXB0eSByZXNvdXJjZSBjb21waWxhdGlvbiBjb21tYW5kIjsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGF1dG8gcmVzdWx0ID0gUnVuUHJlcHJvY2Vzc29yKHByZXByb2Nlc3MsIGludGVybWVkaWF0ZV9maWxlKTsKKyAgaWYgKHJlc3VsdCAhPSAwKSB7CisKKyAgICBjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGludGVybWVkaWF0ZV9maWxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGNtVVZQcm9jZXNzQ2hhaW5CdWlsZGVyIGJ1aWxkZXI7CisKKyAgYnVpbGRlci5TZXRCdWlsdGluU3RyZWFtKGNtVVZQcm9jZXNzQ2hhaW5CdWlsZGVyOjpTdHJlYW1fT1VUUFVUKQorICAgIC5TZXRCdWlsdGluU3RyZWFtKGNtVVZQcm9jZXNzQ2hhaW5CdWlsZGVyOjpTdHJlYW1fRVJST1IpCisgICAgLkFkZENvbW1hbmQocmVzb3VyY2VfY29tcGlsZSk7CisgIGF1dG8gcHJvY2VzcyA9IGJ1aWxkZXIuU3RhcnQoKTsKKyAgcmVzdWx0ID0gMDsKKyAgaWYgKCFwcm9jZXNzLlZhbGlkKCkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBzdGFydCByZXNvdXJjZSBjb21waWxlci4iOworICAgIHJlc3VsdCA9IDE7CisgIH0gZWxzZSB7CisgICAgaWYgKCFwcm9jZXNzLldhaXQoKSkgeworICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gd2FpdCBmb3IgcmVzb3VyY2UgY29tcGlsZXIiOworICAgICAgcmVzdWx0ID0gMTsKKyAgICB9CisgIH0KKworICBjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGludGVybWVkaWF0ZV9maWxlKTsKKyAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBhdXRvIHN0YXR1cyA9IHByb2Nlc3MuR2V0U3RhdHVzKCk7CisgIGlmICghc3RhdHVzWzBdIHx8IHN0YXR1c1swXS0+RXhpdFN0YXR1cyAhPSAwKSB7CisgICAgYXV0byBlcnJvclN0cmVhbSA9IHByb2Nlc3MuRXJyb3JTdHJlYW0oKTsKKyAgICBpZiAoZXJyb3JTdHJlYW0pIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBlcnJvclN0cmVhbS0+cmRidWYoKTsKKyAgICB9CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKwogY2xhc3MgY21WU0xpbmsKIHsKICAgaW50IFR5cGU7CkBAIC0xNjQyLDcgKzE4MzYsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwYW5kZWRBcmdzOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogYXJncykgewogICAgIC8vIGNoZWNrIGZvciBubWFrZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICBpZiAoaVswXSA9PSAnQCcgJiYgaS5maW5kKCJAQ01ha2VGaWxlcyIpICE9IDApIHsKKyAgICBpZiAoaVswXSA9PSAnQCcgJiYgIWNtSGFzTGl0ZXJhbFByZWZpeChpLCAiQENNYWtlRmlsZXMiKSkgewogICAgICAgY21zeXM6Omlmc3RyZWFtIGZpbihpLnN1YnN0cigxKS5jX3N0cigpKTsKICAgICAgIHN0ZDo6c3RyaW5nIGxpbmU7CiAgICAgICB3aGlsZSAoY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0oZmluLCBsaW5lKSkgewpAQCAtMTk1Niw3ICsyMTUwLDcgQEAKICAgaWYgKHRoaXMtPkxpbmtHZW5lcmF0ZXNNYW5pZmVzdCkgewogICAgIG10Q29tbWFuZC5wdXNoX2JhY2sodGhpcy0+TGlua2VyTWFuaWZlc3RGaWxlKTsKICAgfQotICBjbUFwcGVuZChtdENvbW1hbmQsIHRoaXMtPlVzZXJNYW5pZmVzdHMpOworICBjbTo6YXBwZW5kKG10Q29tbWFuZCwgdGhpcy0+VXNlck1hbmlmZXN0cyk7CiAgIG10Q29tbWFuZC5wdXNoX2JhY2sob3V0KTsKICAgaWYgKG5vdGlmeSkgewogICAgIC8vIEFkZCBhbiB1bmRvY3VtZW50ZWQgb3B0aW9uIHRoYXQgZW5hYmxlcyBhIHNwZWNpYWwgcmV0dXJuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21jbWQuaCBiL1NvdXJjZS9jbWNtZC5oCmluZGV4IDE3ZjJmOWEuLjViNmM4MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWNtZC5oCisrKyBiL1NvdXJjZS9jbWNtZC5oCkBAIC0zMSw2ICszMSw5IEBACiAgIHN0YXRpYyBpbnQgRXhlY3V0ZUxpbmtTY3JpcHQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzKTsKICAgc3RhdGljIGludCBXaW5kb3dzQ0VFbnZpcm9ubWVudChjb25zdCBjaGFyKiB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKyAgc3RhdGljIGludCBSdW5QcmVwcm9jZXNzb3IoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJtZWRpYXRlX2ZpbGUpOworICBzdGF0aWMgaW50IFJ1bkxMVk1SQyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MpOwogICBzdGF0aWMgaW50IFZpc3VhbFN0dWRpb0xpbmsoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLCBpbnQgdHlwZSk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY3Rlc3QuY3h4IGIvU291cmNlL2N0ZXN0LmN4eAppbmRleCAwZDY1OTAyLi5mYmRmNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY3Rlc3QuY3h4CisrKyBiL1NvdXJjZS9jdGVzdC5jeHgKQEAgLTk4LDkgKzk4LDEyIEBACiAgICAgIlJ1biBhIHNwZWNpZmljIG51bWJlciBvZiB0ZXN0cyBieSBudW1iZXIuIiB9LAogICB7ICItVSwgLS11bmlvbiIsICJUYWtlIHRoZSBVbmlvbiBvZiAtSSBhbmQgLVIiIH0sCiAgIHsgIi0tcmVydW4tZmFpbGVkIiwgIlJ1biBvbmx5IHRoZSB0ZXN0cyB0aGF0IGZhaWxlZCBwcmV2aW91c2x5IiB9LAotICB7ICItLXJlcGVhdC11bnRpbC1mYWlsIDxuPiIsCi0gICAgIlJlcXVpcmUgZWFjaCB0ZXN0IHRvIHJ1biA8bj4gIgotICAgICJ0aW1lcyB3aXRob3V0IGZhaWxpbmcgaW4gb3JkZXIgdG8gcGFzcyIgfSwKKyAgeyAiLS1yZXBlYXQgdW50aWwtZmFpbDo8bj4sIC0tcmVwZWF0LXVudGlsLWZhaWwgPG4+IiwKKyAgICAiUmVxdWlyZSBlYWNoIHRlc3QgdG8gcnVuIDxuPiB0aW1lcyB3aXRob3V0IGZhaWxpbmcgaW4gb3JkZXIgdG8gcGFzcyIgfSwKKyAgeyAiLS1yZXBlYXQgdW50aWwtcGFzczo8bj4iLAorICAgICJBbGxvdyBlYWNoIHRlc3QgdG8gcnVuIHVwIHRvIDxuPiB0aW1lcyBpbiBvcmRlciB0byBwYXNzIiB9LAorICB7ICItLXJlcGVhdCBhZnRlci10aW1lb3V0OjxuPiIsCisgICAgIkFsbG93IGVhY2ggdGVzdCB0byBydW4gdXAgdG8gPG4+IHRpbWVzIGlmIGl0IHRpbWVzIG91dCIgfSwKICAgeyAiLS1tYXgtd2lkdGggPHdpZHRoPiIsICJTZXQgdGhlIG1heCB3aWR0aCBmb3IgYSB0ZXN0IG5hbWUgdG8gb3V0cHV0IiB9LAogICB7ICItLWludGVyYWN0aXZlLWRlYnVnLW1vZGUgWzB8MV0iLCAiU2V0IHRoZSBpbnRlcmFjdGl2ZSBtb2RlIHRvIDAgb3IgMS4iIH0sCiAgIHsgIi0tcmVzb3VyY2Utc3BlYy1maWxlIDxmaWxlPiIsICJTZXQgdGhlIHJlc291cmNlIHNwZWMgZmlsZSB0byB1c2UuIiB9LApAQCAtMTQxLDYgKzE0NCw4IEBACiAgIHsgIi0taHR0cDEuMCIsICJTdWJtaXQgdXNpbmcgSFRUUCAxLjAuIiB9LAogICB7ICItLW5vLWNvbXByZXNzLW91dHB1dCIsICJEbyBub3QgY29tcHJlc3MgdGVzdCBvdXRwdXQgd2hlbiBzdWJtaXR0aW5nLiIgfSwKICAgeyAiLS1wcmludC1sYWJlbHMiLCAiUHJpbnQgYWxsIGF2YWlsYWJsZSB0ZXN0IGxhYmVscy4iIH0sCisgIHsgIi0tbm8tdGVzdHM9PFtlcnJvcnxpZ25vcmVdPiIsCisgICAgIlJlZ2FyZCBubyB0ZXN0cyBmb3VuZCBlaXRoZXIgYXMgJ2Vycm9yJyBvciAnaWdub3JlJyBpdC4iIH0sCiAgIHsgbnVsbHB0ciwgbnVsbHB0ciB9CiB9OwogCkBAIC0xNjEsNyArMTY2LDYgQEAKICAgYXJndiA9IGVuY29kaW5nX2FyZ3MuYXJndigpOwogCiAgIGNtU3lzdGVtVG9vbHM6OkRvTm90SW5oZXJpdFN0ZFBpcGVzKCk7Ci0gIGNtU3lzdGVtVG9vbHM6OkVuYWJsZU1TVkNEZWJ1Z0hvb2soKTsKICAgY21TeXN0ZW1Ub29sczo6SW5pdGlhbGl6ZUxpYlVWKCk7CiAgIGNtU3lzdGVtVG9vbHM6OkZpbmRDTWFrZVJlc291cmNlcyhhcmd2WzBdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL2t3c3lzL0NNYWtlTGlzdHMudHh0CmluZGV4IDA5YmNkYjkuLjVkZTI3NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uva3dzeXMvQ01ha2VMaXN0cy50eHQKQEAgLTExLDkgKzExLDkgQEAKICMgYmUgdXNlZC4gIEFsbCBjbGFzc2VzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVGhlIENNYWtlIGxpc3RmaWxlCiAjIGFib3ZlIHRoaXMgb25lIGNvbmZpZ3VyZXMgdGhlIGxpYnJhcnkgYXMgZm9sbG93czoKICMKLSMgIFNFVChLV1NZU19OQU1FU1BBQ0UgZm9vc3lzKQotIyAgU0VUKEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkgICAgIyBFbmFibGUgRGlyZWN0b3J5IGNsYXNzLgotIyAgU1VCRElSUyhrd3N5cykKKyMgIHNldChLV1NZU19OQU1FU1BBQ0UgZm9vc3lzKQorIyAgc2V0KEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkgICAgIyBFbmFibGUgRGlyZWN0b3J5IGNsYXNzLgorIyAgYWRkX3N1YmRpcmVjdG9yeShrd3N5cykKICMKICMgT3B0aW9uYWwgc2V0dGluZ3MgYXJlIGFzIGZvbGxvd3M6CiAjCkBAIC0zOSw4ICszOSw4IEBACiAjCiAjICAgIEV4YW1wbGU6CiAjCi0jICAgICAgU0VUKEtXU1lTX0hFQURFUl9ST09UICR7UFJPSkVDVF9CSU5BUllfRElSfSkKLSMgICAgICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7UFJPSkVDVF9CSU5BUllfRElSfSkKKyMgICAgICBzZXQoS1dTWVNfSEVBREVSX1JPT1QgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQorIyAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQogIwogIyAgS1dTWVNfQ1hYX1NUQU5EQVJEICAgICAgICAgPSBBIHZhbHVlIGZvciBDTUFLRV9DWFhfU1RBTkRBUkQgd2l0aGluIEtXU3lzLgogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gZW1wdHkgc3RyaW5nIHRvIHVzZSBubyBkZWZhdWx0IHZhbHVlLgpAQCAtNjUsMTEgKzY1LDExIEBACiAjCiAjICAgIEV4YW1wbGU6CiAjCi0jICAgICAgU0VUKEtXU1lTX0lOU1RBTExfQklOX0RJUiBiaW4pCi0jICAgICAgU0VUKEtXU1lTX0lOU1RBTExfTElCX0RJUiBsaWIpCi0jICAgICAgU0VUKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIgaW5jbHVkZSkKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FIFJ1bnRpbWUpCi0jICAgICAgU0VUKEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlQgRGV2ZWxvcG1lbnQpCisjICAgICAgc2V0KEtXU1lTX0lOU1RBTExfQklOX0RJUiBiaW4pCisjICAgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCX0RJUiBsaWIpCisjICAgICAgc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIgaW5jbHVkZSkKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FIFJ1bnRpbWUpCisjICAgICAgc2V0KEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlQgRGV2ZWxvcG1lbnQpCiAKICMgT25jZSBjb25maWd1cmVkLCBrd3N5cyBzaG91bGQgYmUgdXNlZCBhcyBmb2xsb3dzIGZyb20gQyBvciBDKysgY29kZToKICMKQEAgLTg2LDMzICs4NiwzMyBAQAogIyBhbnkgb3V0c2lkZSBtYWlsaW5nIGxpc3QgYW5kIG5vIGRvY3VtZW50YXRpb24gb2YgdGhlIGNoYW5nZSB3aWxsIGJlCiAjIHdyaXR0ZW4uCiAKLUNNQUtFX01JTklNVU1fUkVRVUlSRUQoVkVSU0lPTiAzLjEgRkFUQUxfRVJST1IpCi1GT1JFQUNIKHAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEgRkFUQUxfRVJST1IpCitmb3JlYWNoKHAKICAgICBDTVAwMDU2ICMgQ01ha2UgMy4yLCBIb25vciBsaW5rIGZsYWdzIGluIHRyeV9jb21waWxlKCkgc291cmNlLWZpbGUgc2lnbmF0dXJlLgogICAgIENNUDAwNjMgIyBDTWFrZSAzLjMsIEhvbm9yIHZpc2liaWxpdHkgcHJvcGVydGllcyBmb3IgYWxsIHRhcmdldCB0eXBlcy4KICAgICBDTVAwMDY3ICMgQ01ha2UgMy44LCBIb25vciBsYW5ndWFnZSBzdGFuZGFyZCBpbiB0cnlfY29tcGlsZSBzb3VyY2UtZmlsZSBzaWduYXR1cmUuCiAgICAgQ01QMDA2OSAjIENNYWtlIDMuOSwgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTiBpcyBlbmZvcmNlZCB3aGVuIGVuYWJsZWQuCiAgICAgKQotICBJRihQT0xJQ1kgJHtwfSkKLSAgICBDTUFLRV9QT0xJQ1koU0VUICR7cH0gTkVXKQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgaWYoUE9MSUNZICR7cH0pCisgICAgY21ha2VfcG9saWN5KFNFVCAke3B9IE5FVykKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBJZiBhIG5hbWVzcGFjZSBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgImt3c3lzIiBhbmQgZW5hYmxlIHRlc3RpbmcuCiAjIFRoaXMgc2hvdWxkIGJlIHRoZSBjYXNlIG9ubHkgd2hlbiBrd3N5cyBpcyBub3QgaW5jbHVkZWQgaW5zaWRlCiAjIGFub3RoZXIgcHJvamVjdCBhbmQgaXMgYmVpbmcgdGVzdGVkLgotSUYoTk9UIEtXU1lTX05BTUVTUEFDRSkKLSAgU0VUKEtXU1lTX05BTUVTUEFDRSAia3dzeXMiKQotICBTRVQoS1dTWVNfU1RBTkRBTE9ORSAxKQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX05BTUVTUEFDRSkKKyAgc2V0KEtXU1lTX05BTUVTUEFDRSAia3dzeXMiKQorICBzZXQoS1dTWVNfU1RBTkRBTE9ORSAxKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIHByb2plY3QgbmFtZSBpcyB0aGF0IG9mIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotUFJPSkVDVCgke0tXU1lTX05BTUVTUEFDRX0pCitwcm9qZWN0KCR7S1dTWVNfTkFNRVNQQUNFfSkKIAogIyBUZWxsIENNYWtlIGhvdyB0byBmb2xsb3cgZGVwZW5kZW5jaWVzIG9mIHNvdXJjZXMgaW4gdGhpcyBkaXJlY3RvcnkuCi1TRVRfUFJPUEVSVFkoRElSRUNUT1JZCitzZXRfcHJvcGVydHkoRElSRUNUT1JZCiAgIFBST1BFUlRZIElNUExJQ0lUX0RFUEVORFNfSU5DTFVERV9UUkFOU0ZPUk0KICAgIktXU1lTX0hFQURFUiglKT08JHtLV1NZU19OQU1FU1BBQ0V9LyU+IgogICApCkBAIC0xMzEsMjI5ICsxMzEsMjI5IEBACiBlbmRpZigpCiAKICMgU2VsZWN0IGxpYnJhcnkgY29tcG9uZW50cy4KLUlGKEtXU1lTX1NUQU5EQUxPTkUgT1IgQ01ha2VfU09VUkNFX0RJUikKLSAgU0VUKEtXU1lTX0VOQUJMRV9DIDEpCitpZihLV1NZU19TVEFOREFMT05FIE9SIENNYWtlX1NPVVJDRV9ESVIpCisgIHNldChLV1NZU19FTkFCTEVfQyAxKQogICAjIEVuYWJsZSBhbGwgY29tcG9uZW50cy4KLSAgU0VUKEtXU1lTX1VTRV9CYXNlNjQgMSkKLSAgU0VUKEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkKLSAgU0VUKEtXU1lTX1VTRV9EeW5hbWljTG9hZGVyIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLSAgU0VUKEtXU1lTX1VTRV9HbG9iIDEpCi0gIFNFVChLV1NZU19VU0VfTUQ1IDEpCi0gIFNFVChLV1NZU19VU0VfUHJvY2VzcyAxKQotICBTRVQoS1dTWVNfVVNFX1JlZ3VsYXJFeHByZXNzaW9uIDEpCi0gIFNFVChLV1NZU19VU0VfU3lzdGVtIDEpCi0gIFNFVChLV1NZU19VU0VfU3lzdGVtVG9vbHMgMSkKLSAgU0VUKEtXU1lTX1VTRV9Db21tYW5kTGluZUFyZ3VtZW50cyAxKQotICBTRVQoS1dTWVNfVVNFX1Rlcm1pbmFsIDEpCi0gIFNFVChLV1NZU19VU0VfSU9TdHJlYW0gMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfU3RyaW5nIDEpCi0gIFNFVChLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24gMSkKLSAgU0VUKEtXU1lTX1VTRV9Db25zb2xlQnVmIDEpCi1FTkRJRigpCisgIHNldChLV1NZU19VU0VfQmFzZTY0IDEpCisgIHNldChLV1NZU19VU0VfRGlyZWN0b3J5IDEpCisgIHNldChLV1NZU19VU0VfRHluYW1pY0xvYWRlciAxKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCisgIHNldChLV1NZU19VU0VfR2xvYiAxKQorICBzZXQoS1dTWVNfVVNFX01ENSAxKQorICBzZXQoS1dTWVNfVVNFX1Byb2Nlc3MgMSkKKyAgc2V0KEtXU1lTX1VTRV9SZWd1bGFyRXhwcmVzc2lvbiAxKQorICBzZXQoS1dTWVNfVVNFX1N5c3RlbSAxKQorICBzZXQoS1dTWVNfVVNFX1N5c3RlbVRvb2xzIDEpCisgIHNldChLV1NZU19VU0VfQ29tbWFuZExpbmVBcmd1bWVudHMgMSkKKyAgc2V0KEtXU1lTX1VTRV9UZXJtaW5hbCAxKQorICBzZXQoS1dTWVNfVVNFX0lPU3RyZWFtIDEpCisgIHNldChLV1NZU19VU0VfRlN0cmVhbSAxKQorICBzZXQoS1dTWVNfVVNFX1N0cmluZyAxKQorICBzZXQoS1dTWVNfVVNFX1N5c3RlbUluZm9ybWF0aW9uIDEpCisgIHNldChLV1NZU19VU0VfQ29uc29sZUJ1ZiAxKQorZW5kaWYoKQogCiAjIEVuZm9yY2UgY29tcG9uZW50IGRlcGVuZGVuY2llcy4KLUlGKEtXU1lTX1VTRV9TeXN0ZW1Ub29scykKLSAgU0VUKEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9HbG9iKQotICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQotICBTRVQoS1dTWVNfVVNFX1N5c3RlbVRvb2xzIDEpCi0gIFNFVChLV1NZU19VU0VfUmVndWxhckV4cHJlc3Npb24gMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQotICBTRVQoS1dTWVNfVVNFX1N5c3RlbSAxKQotICBTRVQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCi1FTkRJRigpCi1JRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gIFNFVChLV1NZU19VU0VfUHJvY2VzcyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX1N5c3RlbSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX0RpcmVjdG9yeSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9GU3RyZWFtKQotICBTRVQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCi1FTkRJRigpCi1JRihLV1NZU19VU0VfQ29uc29sZUJ1ZikKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQoraWYoS1dTWVNfVVNFX1N5c3RlbVRvb2xzKQorICBzZXQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQorICBzZXQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX0dsb2IpCisgIHNldChLV1NZU19VU0VfRGlyZWN0b3J5IDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtVG9vbHMgMSkKKyAgc2V0KEtXU1lTX1VTRV9SZWd1bGFyRXhwcmVzc2lvbiAxKQorICBzZXQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCisgIHNldChLV1NZU19VU0VfU3lzdGVtIDEpCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKK2VuZGlmKCkKK2lmKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKKyAgc2V0KEtXU1lTX1VTRV9Qcm9jZXNzIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfU3lzdGVtKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfRGlyZWN0b3J5KQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX0ZTdHJlYW0pCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKK2VuZGlmKCkKK2lmKEtXU1lTX1VTRV9Db25zb2xlQnVmKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCiAKICMgU3BlY2lmeSBkZWZhdWx0IDggYml0IGVuY29kaW5nIGZvciBXaW5kb3dzCi1JRihOT1QgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRSkKLSAgU0VUKEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UgQ1BfQUNQKQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UpCisgIHNldChLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFIENQX0FDUCkKK2VuZGlmKCkKIAogIyBFbmFibGUgdGVzdGluZyBpZiBidWlsZGluZyBzdGFuZGFsb25lLgotSUYoS1dTWVNfU1RBTkRBTE9ORSkKLSAgSU5DTFVERShEYXJ0KQotICBNQVJLX0FTX0FEVkFOQ0VEKEJVSUxEX1RFU1RJTkcgREFSVF9ST09UIFRDTF9UQ0xTSCkKLSAgSUYoQlVJTERfVEVTVElORykKLSAgICBFTkFCTEVfVEVTVElORygpCi0gIEVORElGKCkKLUVORElGKCkKK2lmKEtXU1lTX1NUQU5EQUxPTkUpCisgIGluY2x1ZGUoRGFydCkKKyAgbWFya19hc19hZHZhbmNlZChCVUlMRF9URVNUSU5HIERBUlRfUk9PVCBUQ0xfVENMU0gpCisgIGlmKEJVSUxEX1RFU1RJTkcpCisgICAgZW5hYmxlX3Rlc3RpbmcoKQorICBlbmRpZigpCitlbmRpZigpCiAKICMgQ2hvb3NlIGRlZmF1bHQgc2hhcmVkL3N0YXRpYyBidWlsZCBpZiBub3Qgc3BlY2lmaWVkLgotSUYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfU0hBUkVEKQotICBTRVQoS1dTWVNfQlVJTERfU0hBUkVEICR7QlVJTERfU0hBUkVEX0xJQlN9KQotRU5ESUYoKQoraWYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfU0hBUkVEKQorICBzZXQoS1dTWVNfQlVJTERfU0hBUkVEICR7QlVJTERfU0hBUkVEX0xJQlN9KQorZW5kaWYoKQogCiAjIEluY2x1ZGUgaGVscGVyIG1hY3Jvcy4KLUlOQ0xVREUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSkKLUlOQ0xVREUoQ2hlY2tUeXBlU2l6ZSkKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSkKK2luY2x1ZGUoQ2hlY2tUeXBlU2l6ZSkKIAogIyBEbyBmdWxsIGRlcGVuZGVuY3kgaGVhZGVycy4KLUlOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OKCJeLiokIikKK2luY2x1ZGVfcmVndWxhcl9leHByZXNzaW9uKCJeLiokIikKIAogIyBVc2UgbmV3IEtXU1lTX0lOU1RBTExfKl9ESVIgdmFyaWFibGUgbmFtZXMgdG8gY29udHJvbCBpbnN0YWxsYXRpb24uCiAjIFRha2UgZGVmYXVsdHMgZnJvbSB0aGUgb2xkIG5hbWVzLiAgTm90ZSB0aGF0IHRoZXJlIHdhcyBubyBvbGQgbmFtZQogIyBmb3IgdGhlIGJpbiBkaXIsIHNvIHdlIHRha2UgdGhlIG9sZCBsaWIgZGlyIG5hbWUgc28gRExMcyB3aWxsIGJlCiAjIGluc3RhbGxlZCBpbiBhIGNvbXBhdGlibGUgd2F5IGZvciBvbGQgY29kZS4KLUlGKE5PVCBLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIKK2lmKE5PVCBLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIKICAgICAiJHtLV1NZU19IRUFERVJfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKLUlGKE5PVCBLV1NZU19JTlNUQUxMX0xJQl9ESVIpCi0gIFNUUklORyhSRUdFWCBSRVBMQUNFICJeLyIgIiIgS1dTWVNfSU5TVEFMTF9MSUJfRElSCitlbmRpZigpCitpZihOT1QgS1dTWVNfSU5TVEFMTF9MSUJfRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfTElCX0RJUgogICAgICIke0tXU1lTX0xJQlJBUllfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKLUlGKE5PVCBLV1NZU19JTlNUQUxMX0JJTl9ESVIpCi0gIFNUUklORyhSRUdFWCBSRVBMQUNFICJeLyIgIiIgS1dTWVNfSU5TVEFMTF9CSU5fRElSCitlbmRpZigpCitpZihOT1QgS1dTWVNfSU5TVEFMTF9CSU5fRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfQklOX0RJUgogICAgICIke0tXU1lTX0xJQlJBUllfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKK2VuZGlmKCkKIAogIyBTZXR1cCBoZWFkZXIgaW5zdGFsbCBydWxlcy4KLVNFVChLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OUykKLUlGKEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlQpCi0gIFNFVChLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OUyAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TfQorc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TKQoraWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX09QVElPTlN9CiAgICAgQ09NUE9ORU5UICR7S1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVH0KICAgICApCi1FTkRJRigpCitlbmRpZigpCiAKICMgU2V0dXAgbGlicmFyeSBpbnN0YWxsIHJ1bGVzLgotU0VUKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQotU0VUKEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKLUlGKEtXU1lTX0lOU1RBTExfTElCX0RJUikKLSAgSUYoS1dTWVNfSU5TVEFMTF9FWFBPUlRfTkFNRSkKLSAgICBMSVNUKEFQUEVORCBLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSBFWFBPUlQgJHtLV1NZU19JTlNUQUxMX0VYUE9SVF9OQU1FfSkKLSAgRU5ESUYoKQorc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQorc2V0KEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKK2lmKEtXU1lTX0lOU1RBTExfTElCX0RJUikKKyAgaWYoS1dTWVNfSU5TVEFMTF9FWFBPUlRfTkFNRSkKKyAgICBsaXN0KEFQUEVORCBLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSBFWFBPUlQgJHtLV1NZU19JTlNUQUxMX0VYUE9SVF9OQU1FfSkKKyAgZW5kaWYoKQogICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IHRvIHRoZSBsaWIgZGlyZWN0b3J5LgotICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KKyAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgTElCUkFSWSBERVNUSU5BVElPTiAke0tXU1lTX0lOU1RBTExfTElCX0RJUn0gTkFNRUxJTktfU0tJUAogICAgICkKICAgIyBBc3NpZ24gdGhlIHNoYXJlZCBsaWJyYXJ5IHRvIHRoZSBydW50aW1lIGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfQlVJTERfU0hBUkVEKQotICAgIFNFVChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CisgIGVuZGlmKCkKKyAgaWYoS1dTWVNfQlVJTERfU0hBUkVEKQorICAgIHNldChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CiAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9MSUJfRElSfSBOQU1FTElOS19PTkxZCiAgICAgICApCiAgICAgIyBBc3NpZ24gdGhlIG5hbWVsaW5rIHRvIHRoZSBkZXZlbG9wbWVudCBjb21wb25lbnQuCi0gICAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKLSAgICAgIFNFVChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CisgICAgaWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgICAgIHNldChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CiAgICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlR9CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAogICAjIEluc3RhbGwgdGhlIGFyY2hpdmUgdG8gdGhlIGxpYiBkaXJlY3RvcnkuCi0gIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KICAgICBBUkNISVZFIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9MSUJfRElSfQogICAgICkKICAgIyBBc3NpZ24gdGhlIGFyY2hpdmUgdG8gdGhlIGRldmVsb3BtZW50IGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKLSAgICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KKyAgaWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlR9CiAgICAgICApCi0gIEVORElGKCkKLUVORElGKCkKLUlGKEtXU1lTX0lOU1RBTExfQklOX0RJUikKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoS1dTWVNfSU5TVEFMTF9CSU5fRElSKQogICAjIEluc3RhbGwgdGhlIHJ1bnRpbWUgbGlicmFyeSB0byB0aGUgYmluIGRpcmVjdG9yeS4KLSAgU0VUKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CisgIHNldChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQogICAgIFJVTlRJTUUgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0JJTl9ESVJ9CiAgICAgKQogICAjIEFzc2lnbiB0aGUgcnVudGltZSBsaWJyYXJ5IHRvIHRoZSBydW50aW1lIGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKLUVORElGKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIERvIG5vdCBzdXBwb3J0IG9sZCBLV1NZU18qYV9JTlNUQUxMX0RJUiB2YXJpYWJsZSBuYW1lcy4KLVNFVChLV1NZU19IRUFERVJfSU5TVEFMTF9ESVIpCi1TRVQoS1dTWVNfTElCUkFSWV9JTlNUQUxMX0RJUikKK3NldChLV1NZU19IRUFERVJfSU5TVEFMTF9ESVIpCitzZXQoS1dTWVNfTElCUkFSWV9JTlNUQUxMX0RJUikKIAogIyBHZW5lcmF0ZWQgc291cmNlIGZpbGVzIHdpbGwgbmVlZCB0aGlzIGhlYWRlci4KLVNUUklORyhDT01QQVJFIEVRVUFMICIke1BST0pFQ1RfU09VUkNFX0RJUn0iICIke1BST0pFQ1RfQklOQVJZX0RJUn0iCitzdHJpbmcoQ09NUEFSRSBFUVVBTCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9IiAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IgogICBLV1NZU19JTl9TT1VSQ0VfQlVJTEQpCi1JRihOT1QgS1dTWVNfSU5fU09VUkNFX0JVSUxEKQotICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXNQcml2YXRlLmgKK2lmKE5PVCBLV1NZU19JTl9TT1VSQ0VfQlVJTEQpCisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5c1ByaXZhdGUuaAogICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9rd3N5c1ByaXZhdGUuaCBDT1BZT05MWSBJTU1FRElBVEUpCi1FTkRJRigpCitlbmRpZigpCiAKICMgU2VsZWN0IHBsdWdpbiBtb2R1bGUgZmlsZSBuYW1lIGNvbnZlbnRpb24uCi1JRihOT1QgS1dTWVNfRHluYW1pY0xvYWRlcl9QUkVGSVgpCi0gIFNFVChLV1NZU19EeW5hbWljTG9hZGVyX1BSRUZJWCAke0NNQUtFX1NIQVJFRF9NT0RVTEVfUFJFRklYfSkKLUVORElGKCkKLUlGKE5PVCBLV1NZU19EeW5hbWljTG9hZGVyX1NVRkZJWCkKLSAgU0VUKEtXU1lTX0R5bmFtaWNMb2FkZXJfU1VGRklYICR7Q01BS0VfU0hBUkVEX01PRFVMRV9TVUZGSVh9KQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX0R5bmFtaWNMb2FkZXJfUFJFRklYKQorICBzZXQoS1dTWVNfRHluYW1pY0xvYWRlcl9QUkVGSVggJHtDTUFLRV9TSEFSRURfTU9EVUxFX1BSRUZJWH0pCitlbmRpZigpCitpZihOT1QgS1dTWVNfRHluYW1pY0xvYWRlcl9TVUZGSVgpCisgIHNldChLV1NZU19EeW5hbWljTG9hZGVyX1NVRkZJWCAke0NNQUtFX1NIQVJFRF9NT0RVTEVfU1VGRklYfSkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFdlIHJlcXVpcmUgQU5TSSBzdXBwb3J0IGZyb20gdGhlIEMgY29tcGlsZXIuICBBZGQgYW55IG5lZWRlZCBmbGFncy4KLUlGKENNQUtFX0FOU0lfQ0ZMQUdTKQotICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAke0NNQUtFX0FOU0lfQ0ZMQUdTfSIpCi1FTkRJRigpCitpZihDTUFLRV9BTlNJX0NGTEFHUykKKyAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gJHtDTUFLRV9BTlNJX0NGTEFHU30iKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQWRqdXN0IGNvbXBpbGVyIGZsYWdzIGZvciBzb21lIHBsYXRmb3Jtcy4KLUlGKE5PVCBDTUFLRV9DT01QSUxFUl9JU19HTlVDWFgpCi0gIElGKENNQUtFX1NZU1RFTSBNQVRDSEVTICJPU0YxLVYuKiIpCi0gICAgU1RSSU5HKFJFR0VYIE1BVENIICItdGltcGxpY2l0X2xvY2FsIgoraWYoTk9UIENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCkKKyAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIk9TRjEtVi4qIikKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIi10aW1wbGljaXRfbG9jYWwiCiAgICAgICBLV1NZU19DWFhfRkxBR1NfSEFWRV9JTVBMSUNJVF9MT0NBTCAiJHtDTUFLRV9DWFhfRkxBR1N9IikKLSAgICBTVFJJTkcoUkVHRVggTUFUQ0ggIi1ub19pbXBsaWNpdF9pbmNsdWRlIgorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiLW5vX2ltcGxpY2l0X2luY2x1ZGUiCiAgICAgICBLV1NZU19DWFhfRkxBR1NfSEFWRV9OT19JTVBMSUNJVF9JTkNMVURFICIke0NNQUtFX0NYWF9GTEFHU30iKQotICAgIElGKE5PVCBLV1NZU19DWFhfRkxBR1NfSEFWRV9JTVBMSUNJVF9MT0NBTCkKLSAgICAgIFNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtdGltcGxpY2l0X2xvY2FsIikKLSAgICBFTkRJRigpCi0gICAgSUYoTk9UIEtXU1lTX0NYWF9GTEFHU19IQVZFX05PX0lNUExJQ0lUX0lOQ0xVREUpCi0gICAgICBTRVQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLW5vX2ltcGxpY2l0X2luY2x1ZGUiKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihDTUFLRV9TWVNURU0gTUFUQ0hFUyAiSFAtVVgiKQotICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHUyAiK3AiKQotICAgIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJIUCIpCisgICAgaWYoTk9UIEtXU1lTX0NYWF9GTEFHU19IQVZFX0lNUExJQ0lUX0xPQ0FMKQorICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC10aW1wbGljaXRfbG9jYWwiKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgS1dTWVNfQ1hYX0ZMQUdTX0hBVkVfTk9fSU1QTElDSVRfSU5DTFVERSkKKyAgICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtbm9faW1wbGljaXRfaW5jbHVkZSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCisgICAgc2V0KEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTICIrcCIpCisgICAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkhQIikKICAgICAgICMgaXQgaXMga25vd24gdGhhdCB2ZXJzaW9uIDMuODUgZmFpbHMgYW5kIDYuMjUgd29ya3Mgd2l0aG91dCB0aGVzZSBmbGFncwotICAgICAgSUYoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQpCisgICAgICBpZihDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNCkKICAgICAgICAgIyB1c2UgbmV3IEMrKyBsaWJyYXJ5IGFuZCBpbXByb3ZlZCB0ZW1wbGF0ZSBzdXBwb3J0Ci0gICAgICAgIFNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtQUEgK2hweHN0ZDk4IikKLSAgICAgIEVORElGKCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKLUlGKEtXU1lTX1NUQU5EQUxPTkUpCi0gIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCBTdW5Qcm8pCi0gICAgSUYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA1LjEzKQotICAgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1zdGQ9YysrMDMiKQotICAgIEVMU0UoKQotICAgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1saWJyYXJ5PXN0bHBvcnQ0IikKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1BQSAraHB4c3RkOTgiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIFNUUkVRVUFMIFN1blBybykKKyAgICBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDUuMTMpCisgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLXN0ZD1jKyswMyIpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLWxpYnJhcnk9c3RscG9ydDQiKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29uZmlndXJlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGhlYWRlciB3cmFwcGVycyBiYXNlZCBvbiBjb21waWxlcidzCkBAIC0zNjUsNzUgKzM2NSw3NSBAQAogICAiQ2hlY2tpbmcgd2hldGhlciBDKysgY29tcGlsZXIgaGFzICdsb25nIGxvbmcnIiBESVJFQ1QpCiBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX19fSU5UNjQKICAgIkNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhcyAnX19pbnQ2NCciIERJUkVDVCkKLUlGKEtXU1lTX0NYWF9IQVNfX19JTlQ2NCkKK2lmKEtXU1lTX0NYWF9IQVNfX19JTlQ2NCkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX1NBTUVfTE9OR19BTkRfX19JTlQ2NAogICAgICJDaGVja2luZyB3aGV0aGVyIGxvbmcgYW5kIF9faW50NjQgYXJlIHRoZSBzYW1lIHR5cGUiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19MT05HX0xPTkcpCisgIGlmKEtXU1lTX0NYWF9IQVNfTE9OR19MT05HKQogICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9TQU1FX0xPTkdfTE9OR19BTkRfX19JTlQ2NAogICAgICAgIkNoZWNraW5nIHdoZXRoZXIgbG9uZyBsb25nIGFuZCBfX2ludDY0IGFyZSB0aGUgc2FtZSB0eXBlIiBESVJFQ1QpCi0gIEVORElGKCkKLUVORElGKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIEVuYWJsZSB0aGUgImxvbmcgbG9uZyIgdHlwZSBpZiBpdCBpcyBhdmFpbGFibGUuICBJdCBpcyBzdGFuZGFyZCBpbgogIyBDOTkgYW5kIEMrKzAzIGJ1dCBub3QgaW4gZWFybGllciBzdGFuZGFyZHMuCi1JRihLV1NZU19DWFhfSEFTX0xPTkdfTE9ORykKLSAgU0VUKEtXU1lTX1VTRV9MT05HX0xPTkcgMSkKLUVMU0UoKQotICBTRVQoS1dTWVNfVVNFX0xPTkdfTE9ORyAwKQotRU5ESUYoKQoraWYoS1dTWVNfQ1hYX0hBU19MT05HX0xPTkcpCisgIHNldChLV1NZU19VU0VfTE9OR19MT05HIDEpCitlbHNlKCkKKyAgc2V0KEtXU1lTX1VTRV9MT05HX0xPTkcgMCkKK2VuZGlmKCkKIAogIyBFbmFibGUgdGhlICJfX2ludDY0IiB0eXBlIGlmIGl0IGlzIGF2YWlsYWJsZSBhbmQgdW5pcXVlLiAgSXQgaXMgbm90CiAjIHN0YW5kYXJkLgotU0VUKEtXU1lTX1VTRV9fX0lOVDY0IDApCi1JRihLV1NZU19DWFhfSEFTX19fSU5UNjQpCi0gIElGKE5PVCBLV1NZU19DWFhfU0FNRV9MT05HX0FORF9fX0lOVDY0KQotICAgIElGKE5PVCBLV1NZU19DWFhfU0FNRV9MT05HX0xPTkdfQU5EX19fSU5UNjQpCi0gICAgICBTRVQoS1dTWVNfVVNFX19fSU5UNjQgMSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKK3NldChLV1NZU19VU0VfX19JTlQ2NCAwKQoraWYoS1dTWVNfQ1hYX0hBU19fX0lOVDY0KQorICBpZihOT1QgS1dTWVNfQ1hYX1NBTUVfTE9OR19BTkRfX19JTlQ2NCkKKyAgICBpZihOT1QgS1dTWVNfQ1hYX1NBTUVfTE9OR19MT05HX0FORF9fX0lOVDY0KQorICAgICAgc2V0KEtXU1lTX1VTRV9fX0lOVDY0IDEpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9FbmNvZGluZykKK2lmKEtXU1lTX1VTRV9FbmNvZGluZykKICAgIyBMb29rIGZvciB0eXBlIHNpemUgaGVscGVyIG1hY3Jvcy4KICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfU1RMX0hBU19XU1RSSU5HCiAgICAgIkNoZWNraW5nIHdoZXRoZXIgd3N0cmluZyBpcyBhdmFpbGFibGUiIERJUkVDVCkKLUVORElGKCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0lPU3RyZWFtKQoraWYoS1dTWVNfVVNFX0lPU3RyZWFtKQogICAjIERldGVybWluZSB3aGV0aGVyIGlvc3RyZWFtcyBzdXBwb3J0IGxvbmcgbG9uZy4KLSAgSUYoS1dTWVNfQ1hYX0hBU19MT05HX0xPTkcpCisgIGlmKEtXU1lTX0NYWF9IQVNfTE9OR19MT05HKQogICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcKICAgICAgICJDaGVja2luZyBpZiBpc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZyIgRElSRUNUKQogICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcKICAgICAgICJDaGVja2luZyBpZiBvc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZyIgRElSRUNUKQotICBFTFNFKCkKLSAgICBTRVQoS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORyAwKQotICAgIFNFVChLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HIDApCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19fX0lOVDY0KQorICBlbHNlKCkKKyAgICBzZXQoS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORyAwKQorICAgIHNldChLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HIDApCisgIGVuZGlmKCkKKyAgaWYoS1dTWVNfQ1hYX0hBU19fX0lOVDY0KQogICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0CiAgICAgICAiQ2hlY2tpbmcgaWYgaXN0cmVhbSBzdXBwb3J0cyBfX2ludDY0IiBESVJFQ1QpCiAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQKICAgICAgICJDaGVja2luZyBpZiBvc3RyZWFtIHN1cHBvcnRzIF9faW50NjQiIERJUkVDVCkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0IDApCi0gICAgU0VUKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9fX0lOVDY0IDApCi0gIEVORElGKCkKLUVORElGKCkKKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0IDApCisgICAgc2V0KEtXU1lTX0lPU19IQVNfT1NUUkVBTV9fX0lOVDY0IDApCisgIGVuZGlmKCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfTkFNRVNQQUNFIE1BVENIRVMgIl5rd3N5cyQiKQotICBTRVQoS1dTWVNfTkFNRV9JU19LV1NZUyAxKQotRUxTRSgpCi0gIFNFVChLV1NZU19OQU1FX0lTX0tXU1lTIDApCi1FTkRJRigpCitpZihLV1NZU19OQU1FU1BBQ0UgTUFUQ0hFUyAiXmt3c3lzJCIpCisgIHNldChLV1NZU19OQU1FX0lTX0tXU1lTIDEpCitlbHNlKCkKKyAgc2V0KEtXU1lTX05BTUVfSVNfS1dTWVMgMCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfQlVJTERfU0hBUkVEKQotICBTRVQoS1dTWVNfQlVJTERfU0hBUkVEIDEpCi0gIFNFVChLV1NZU19MSUJSQVJZX1RZUEUgU0hBUkVEKQotRUxTRSgpCi0gIFNFVChLV1NZU19CVUlMRF9TSEFSRUQgMCkKLSAgU0VUKEtXU1lTX0xJQlJBUllfVFlQRSBTVEFUSUMpCi1FTkRJRigpCitpZihLV1NZU19CVUlMRF9TSEFSRUQpCisgIHNldChLV1NZU19CVUlMRF9TSEFSRUQgMSkKKyAgc2V0KEtXU1lTX0xJQlJBUllfVFlQRSBTSEFSRUQpCitlbHNlKCkKKyAgc2V0KEtXU1lTX0JVSUxEX1NIQVJFRCAwKQorICBzZXQoS1dTWVNfTElCUkFSWV9UWVBFIFNUQVRJQykKK2VuZGlmKCkKIAogaWYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfUElDKQogICBzZXQoS1dTWVNfQlVJTERfUElDIDApCkBAIC00NDYsMzIgKzQ0NiwzMiBAQAogICAiQ2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhcyBwdHJkaWZmX3QgaW4gc3RkZGVmLmgiIERJUkVDVCkKIEtXU1lTX1BMQVRGT1JNX0NfVEVTVChLV1NZU19DX0hBU19TU0laRV9UCiAgICJDaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFzIHNzaXplX3QgaW4gdW5pc3RkLmgiIERJUkVDVCkKLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCiAgIEtXU1lTX1BMQVRGT1JNX0NfVEVTVChLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQwogICAgICJDaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFzIGNsb2NrX2dldHRpbWUiIERJUkVDVCkKLUVORElGKCkKK2VuZGlmKCkKIAotU0VUX1NPVVJDRV9GSUxFU19QUk9QRVJUSUVTKFByb2Nlc3NVTklYLmMgU3lzdGVtLmMgUFJPUEVSVElFUworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKFByb2Nlc3NVTklYLmMgU3lzdGVtLmMgUFJPUEVSVElFUwogICBDT01QSUxFX0ZMQUdTICItREtXU1lTX0NfSEFTX1BUUkRJRkZfVD0ke0tXU1lTX0NfSEFTX1BUUkRJRkZfVH0gLURLV1NZU19DX0hBU19TU0laRV9UPSR7S1dTWVNfQ19IQVNfU1NJWkVfVH0gLURLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQz0ke0tXU1lTX0NfSEFTX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDfSIKICAgKQogCi1JRihERUZJTkVEIEtXU1lTX1BST0NFU1NfVVNFX1NFTEVDVCkKLSAgR0VUX1BST1BFUlRZKFByb2Nlc3NVTklYX0ZMQUdTIFNPVVJDRSBQcm9jZXNzVU5JWC5jIFBST1BFUlRZIENPTVBJTEVfRkxBR1MpCi0gIFNFVF9QUk9QRVJUWShTT1VSQ0UgUHJvY2Vzc1VOSVguYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke1Byb2Nlc3NVTklYX0ZMQUdTfSAtREtXU1lTUEVfVVNFX1NFTEVDVD0ke0tXU1lTUEVfVVNFX1NFTEVDVH0iKQotRU5ESUYoKQoraWYoREVGSU5FRCBLV1NZU19QUk9DRVNTX1VTRV9TRUxFQ1QpCisgIGdldF9wcm9wZXJ0eShQcm9jZXNzVU5JWF9GTEFHUyBTT1VSQ0UgUHJvY2Vzc1VOSVguYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTKQorICBzZXRfcHJvcGVydHkoU09VUkNFIFByb2Nlc3NVTklYLmMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHtQcm9jZXNzVU5JWF9GTEFHU30gLURLV1NZU1BFX1VTRV9TRUxFQ1Q9JHtLV1NZU1BFX1VTRV9TRUxFQ1R9IikKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCi0gIEdFVF9QUk9QRVJUWShLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUyBHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTKQotICBJRihLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUykKLSAgICBTRVQoS1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlMgMSkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTIDApCi0gIEVORElGKCkKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBEeW5hbWljTG9hZGVyLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgIGdldF9wcm9wZXJ0eShLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUyBHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTKQorICBpZihLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUykKKyAgICBzZXQoS1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlMgMSkKKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTIDApCisgIGVuZGlmKCkKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBEeW5hbWljTG9hZGVyLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgIEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTPSR7S1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlN9KQotRU5ESUYoKQorZW5kaWYoKQogCi1JRihLV1NZU19VU0VfU3lzdGVtVG9vbHMpCitpZihLV1NZU19VU0VfU3lzdGVtVG9vbHMpCiAgIGlmIChOT1QgREVGSU5FRCBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQKQogICAgIHNldChLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQIDEpCiAgIGVuZGlmICgpCkBAIC00OTQsNyArNDk0LDcgQEAKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgc3RydWN0IHN0YXQgaGFzIHN0X210aW0gbWVtYmVyIiBESVJFQ1QpCiAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNRVNQRUMKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgc3RydWN0IHN0YXQgaGFzIHN0X210aW1lc3BlYyBtZW1iZXIiIERJUkVDVCkKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKICAgICBLV1NZU19DWFhfSEFTX1NFVEVOVj0ke0tXU1lTX0NYWF9IQVNfU0VURU5WfQogICAgIEtXU1lTX0NYWF9IQVNfVU5TRVRFTlY9JHtLV1NZU19DWFhfSEFTX1VOU0VURU5WfQogICAgIEtXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSD0ke0tXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSH0KQEAgLTUwMyw2MjMgKzUwMyw2MjMgQEAKICAgICBLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTT0ke0tXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNfQogICAgIEtXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNRVNQRUM9JHtLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTUVTUEVDfQogICAgICkKLSAgSUYoTk9UIFdJTjMyKQotICAgIElGKEtXU1lTX1NUQU5EQUxPTkUpCi0gICAgICBPUFRJT04oS1dTWVNfU1lTVEVNVE9PTFNfU1VQUE9SVF9XSU5ET1dTX1NMQVNIRVMgIklmIHRydWUsIFdpbmRvd3MgcGF0aHMgd2lsbCBiZSBzdXBwb3J0ZWQgb24gVW5peCBhcyB3ZWxsIiBPTikKLSAgICBFTkRJRigpCi0gICAgSUYoS1dTWVNfU1lTVEVNVE9PTFNfU1VQUE9SVF9XSU5ET1dTX1NMQVNIRVMpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbVRvb2xzLmN4eCB0ZXN0U3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIGlmKE5PVCBXSU4zMikKKyAgICBpZihLV1NZU19TVEFOREFMT05FKQorICAgICAgb3B0aW9uKEtXU1lTX1NZU1RFTVRPT0xTX1NVUFBPUlRfV0lORE9XU19TTEFTSEVTICJJZiB0cnVlLCBXaW5kb3dzIHBhdGhzIHdpbGwgYmUgc3VwcG9ydGVkIG9uIFVuaXggYXMgd2VsbCIgT04pCisgICAgZW5kaWYoKQorICAgIGlmKEtXU1lTX1NZU1RFTVRPT0xTX1NVUFBPUlRfV0lORE9XU19TTEFTSEVTKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggdGVzdFN5c3RlbVRvb2xzLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgICAgICBLV1NZU19TWVNURU1UT09MU19TVVBQT1JUX1dJTkRPV1NfU0xBU0hFUwogICAgICAgICApCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBEaXNhYmxlIGdldHB3bmFtIGZvciBzdGF0aWMgbGludXggYnVpbGRzIHNpbmNlIGl0IGRlcGVuZHMgb24gc2hhcmVkIGdsaWJjCi0gIEdFVF9QUk9QRVJUWShTSEFSRURfTElCU19TVVBQT1JURUQgR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUykKLSAgSUYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiIEFORCBOT1QgU0hBUkVEX0xJQlNfU1VQUE9SVEVEKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIGdldF9wcm9wZXJ0eShTSEFSRURfTElCU19TVVBQT1JURUQgR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUykKKyAgaWYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiIEFORCBOT1QgU0hBUkVEX0xJQlNfU1VQUE9SVEVEKQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCiAgICAgICBIQVZFX0dFVFBXTkFNPTAKICAgICAgICkKLSAgRU5ESUYoKQotRU5ESUYoKQorICBlbmRpZigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCitpZihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgIENPTVBJTEVfREVGSU5JVElPTlMgU0laRU9GX1ZPSURfUD0ke0NNQUtFX1NJWkVPRl9WT0lEX1B9KQotICBJRihOT1QgQ1lHV0lOKQotICAgIElOQ0xVREUoQ2hlY2tJbmNsdWRlRmlsZXMpCisgIGlmKE5PVCBDWUdXSU4pCisgICAgaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlcykKICAgICBDSEVDS19JTkNMVURFX0ZJTEVTKCJzeXMvdHlwZXMuaDtpZmFkZHJzLmgiIEtXU1lTX1NZU19IQVNfSUZBRERSU19IKQotICAgIElGKEtXU1lTX1NZU19IQVNfSUZBRERSU19IKQotICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgaWYoS1dTWVNfU1lTX0hBU19JRkFERFJTX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX0lGQUREUlNfSD0xKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihXSU4zMikKLSAgICBJTkNMVURFKENoZWNrU3ltYm9sRXhpc3RzKQotICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgUHNhcGkpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKFdJTjMyKQorICAgIGluY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCisgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBwc2FwaSkKICAgICBDSEVDS19TWU1CT0xfRVhJU1RTKEdldFByb2Nlc3NNZW1vcnlJbmZvICJ3aW5kb3dzLmg7cHNhcGkuaCIgS1dTWVNfU1lTX0hBU19QU0FQSSkKLSAgICBVTlNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCi0gICAgSUYoS1dTWVNfU1lTX0hBU19QU0FQSSkKLSAgICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgIHVuc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKyAgICBpZihLV1NZU19TWVNfSEFTX1BTQVBJKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfU1lTX0hBU19QU0FQST0xKQotICAgICAgSUYoTVNWQzcwIE9SIE1TVkM3MSkKKyAgICAgIGlmKE1TVkM3MCBPUiBNU1ZDNzEpCiAgICAgICAgICMgU3VwcHJlc3MgTE5LNDA4OTogYWxsIHJlZmVyZW5jZXMgdG8gJ1BTQVBJLkRMTCcgZGlzY2FyZGVkIGJ5IC9PUFQ6UkVGCi0gICAgICAgIFNFVChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9JR05PUkU6NDA4OSIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCisgICAgICAgIHNldChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9JR05PUkU6NDA4OSIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCiAgICAgQ0hFQ0tfSU5DTFVERV9GSUxFUygic3lzL21wY3RsLmgiIEtXU1lTX1NZU19IQVNfTVBDVExfSCkKLSAgICBJRihLV1NZU19TWVNfSEFTX01QQ1RMX0gpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19TWVNfSEFTX01QQ1RMX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX01QQ1RMX0g9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLSAgSUYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkJTRCIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJCU0QiKQogICAgIENIRUNLX0lOQ0xVREVfRklMRVMoIm1hY2hpbmUvY3B1LmgiIEtXU1lTX1NZU19IQVNfTUFDSElORV9DUFVfSCkKLSAgICBJRihLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0gpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0g9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19STElNSVQ2NAogICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgcmxpbWl0NjQiIERJUkVDVCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVMpCi0gIElGKEtXU1lTX0NYWF9IQVNfUkxJTUlUNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTKQorICBpZihLV1NZU19DWFhfSEFTX1JMSU1JVDY0KQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX1JMSU1JVDY0PTEpCi0gIEVORElGKCkKKyAgZW5kaWYoKQogICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0FUT0wKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgaGFzIGF0b2wiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19BVE9MKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICBpZihLV1NZU19DWFhfSEFTX0FUT0wpCisgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX0NYWF9IQVNfQVRPTD0xKQotICBFTkRJRigpCisgIGVuZGlmKCkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19BVE9MTAogICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgYXRvbGwiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19BVE9MTCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgaWYoS1dTWVNfQ1hYX0hBU19BVE9MTCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19BVE9MTD0xKQotICBFTkRJRigpCisgIGVuZGlmKCkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19fQVRPSTY0CiAgICAgIkNoZWNraW5nIHdoZXRoZXIgQ1hYIGNvbXBpbGVyIGhhcyBfYXRvaTY0IiBESVJFQ1QpCi0gIElGKEtXU1lTX0NYWF9IQVNfX0FUT0k2NCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgaWYoS1dTWVNfQ1hYX0hBU19fQVRPSTY0KQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX19BVE9JNjQ9MSkKLSAgRU5ESUYoKQotICBJRihVTklYKQotICAgIElOQ0xVREUoQ2hlY2tJbmNsdWRlRmlsZUNYWCkKKyAgZW5kaWYoKQorICBpZihVTklYKQorICAgIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZUNYWCkKICAgICAjIGNoZWNrIGZvciBzaW1wbGUgc3RhY2sgdHJhY2UKICAgICAjIHVzdWFsbHkgaXQncyBpbiBsaWJjIGJ1dCBvbiBGcmVlQlNECiAgICAgIyBpdCdzIGluIGxpYmV4ZWNpbmZvCi0gICAgRklORF9MSUJSQVJZKEVYRUNJTkZPX0xJQiAiZXhlY2luZm8iKQotICAgIE1BUktfQVNfQURWQU5DRUQoRVhFQ0lORk9fTElCKQotICAgIElGIChOT1QgRVhFQ0lORk9fTElCKQotICAgICAgU0VUKEVYRUNJTkZPX0xJQiAiIikKLSAgICBFTkRJRigpCisgICAgZmluZF9saWJyYXJ5KEVYRUNJTkZPX0xJQiAiZXhlY2luZm8iKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoRVhFQ0lORk9fTElCKQorICAgIGlmIChOT1QgRVhFQ0lORk9fTElCKQorICAgICAgc2V0KEVYRUNJTkZPX0xJQiAiIikKKyAgICBlbmRpZigpCiAgICAgQ0hFQ0tfSU5DTFVERV9GSUxFX0NYWCgiZXhlY2luZm8uaCIgS1dTWVNfQ1hYX0hBU19FWEVDSU5GT0gpCi0gICAgSUYgKEtXU1lTX0NYWF9IQVNfRVhFQ0lORk9IKQorICAgIGlmIChLV1NZU19DWFhfSEFTX0VYRUNJTkZPSCkKICAgICAgICMgd2UgaGF2ZSB0aGUgYmFja3RyYWNlIGhlYWRlciBjaGVjayBpZiBpdAogICAgICAgIyBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgY29tcGlsZXIKLSAgICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0VYRUNJTkZPX0xJQn0pCisgICAgICBzZXQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMgJHtFWEVDSU5GT19MSUJ9KQogICAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19CQUNLVFJBQ0UKICAgICAgICAgICJDaGVja2luZyB3aGV0aGVyIGJhY2t0cmFjZSB3b3JrcyB3aXRoIHRoaXMgQysrIGNvbXBpbGVyIiBESVJFQ1QpCi0gICAgICBTRVQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMpCi0gICAgICBJRiAoS1dTWVNfQ1hYX0hBU19CQUNLVFJBQ0UpCisgICAgICBzZXQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMpCisgICAgICBpZiAoS1dTWVNfQ1hYX0hBU19CQUNLVFJBQ0UpCiAgICAgICAgICMgYmFja3RyYWNlIGlzIHN1cHBvcnRlZCBieSB0aGlzIHN5c3RlbSBhbmQgY29tcGlsZXIuCiAgICAgICAgICMgbm93IGNoZWNrIGZvciB0aGUgbW9yZSBhZHZhbmNlZCBjYXBhYmlsaXRpZXMuCi0gICAgICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX1NZU1RFTUlORk9STUFUSU9OX0hBU19CQUNLVFJBQ0U9MSkKICAgICAgICAgIyBjaGVjayBmb3Igc3ltYm9sIGxvb2t1cCB1c2luZyBkbGFkZHIKICAgICAgICAgQ0hFQ0tfSU5DTFVERV9GSUxFX0NYWCgiZGxmY24uaCIgS1dTWVNfQ1hYX0hBU19ETEZDTkgpCi0gICAgICAgIElGIChLV1NZU19DWFhfSEFTX0RMRkNOSCkKKyAgICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfRExGQ05IKQogICAgICAgICAgICMgd2UgaGF2ZSBzeW1ib2wgbG9va3VwIGxpYnJhcmllcyBhbmQgaGVhZGVycwogICAgICAgICAgICMgY2hlY2sgaWYgdGhleSBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgY29tcGlsZXIKLSAgICAgICAgICBTRVQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMgJHtDTUFLRV9ETF9MSUJTfSkKKyAgICAgICAgICBzZXQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMgJHtDTUFLRV9ETF9MSUJTfSkKICAgICAgICAgICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfRExBRERSCiAgICAgICAgICAgICAiQ2hlY2tpbmcgd2hldGhlciBkbGFkZHIgd29ya3Mgd2l0aCB0aGlzIEMrKyBjb21waWxlciIgRElSRUNUKQotICAgICAgICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUykKLSAgICAgICAgICBJRiAoS1dTWVNfQ1hYX0hBU19ETEFERFIpCisgICAgICAgICAgc2V0KEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTKQorICAgICAgICAgIGlmIChLV1NZU19DWFhfSEFTX0RMQUREUikKICAgICAgICAgICAgICMgc3ltYm9sIGxvb2t1cCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBzeXN0ZW0KICAgICAgICAgICAgICMgYW5kIGNvbXBpbGVyLgotICAgICAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNURU1JTkZPUk1BVElPTl9IQVNfU1lNQk9MX0xPT0tVUD0xKQotICAgICAgICAgIEVORElGKCkKLSAgICAgICAgRU5ESUYoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQogICAgICAgICAjIGMrKyBkZW1hbmdsaW5nIHN1cHBvcnQKICAgICAgICAgIyBjaGVjayBmb3IgY3h4YWJpIGhlYWRlcnMKICAgICAgICAgQ0hFQ0tfSU5DTFVERV9GSUxFX0NYWCgiY3h4YWJpLmgiIEtXU1lTX0NYWF9IQVNfQ1hYQUJJSCkKLSAgICAgICAgSUYgKEtXU1lTX0NYWF9IQVNfQ1hYQUJJSCkKKyAgICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfQ1hYQUJJSCkKICAgICAgICAgICAjIGNoZWNrIGlmIGN4eGFiaSBjYW4gYmUgdXNlZCB3aXRoIHRoaXMKICAgICAgICAgICAjIHN5c3RlbSBhbmQgY29tcGlsZXIuCiAgICAgICAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19DWFhBQkkKICAgICAgICAgICAgICJDaGVja2luZyB3aGV0aGVyIGN4eGFiaSB3b3JrcyB3aXRoIHRoaXMgQysrIGNvbXBpbGVyIiBESVJFQ1QpCi0gICAgICAgICAgSUYgKEtXU1lTX0NYWF9IQVNfQ1hYQUJJKQorICAgICAgICAgIGlmIChLV1NZU19DWFhfSEFTX0NYWEFCSSkKICAgICAgICAgICAgICMgYysrIGRlbWFuZ2xlIHVzaW5nIGN4eGFiaSBpcyBzdXBwb3J0ZWQgd2l0aAogICAgICAgICAgICAgIyB0aGlzIHN5c3RlbSBhbmQgY29tcGlsZXIKLSAgICAgICAgICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgICAgICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX0NQUF9ERU1BTkdMRT0xKQotICAgICAgICAgIEVORElGKCkKLSAgICAgICAgRU5ESUYoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQogICAgICAgICAjIGJhc2ljIGJhY2t0cmFjZSB3b3JrcyBiZXR0ZXIgd2l0aCByZWxlYXNlIGJ1aWxkCiAgICAgICAgICMgZG9uJ3QgYm90aGVyIHdpdGggYWR2YW5jZWQgZmVhdHVyZXMgZm9yIHJlbGVhc2UKLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlNfREVCVUcgS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX0RFQlVHX0JVSUxEPTEpCi0gICAgICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TX1JFTFdJVEhERUJJTkZPIEtXU1lTX1NZU1RFTUlORk9STUFUSU9OX0hBU19ERUJVR19CVUlMRD0xKQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihCT1JMQU5EKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorICBpZihCT1JMQU5EKQogICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU00KICAgICAgICJDaGVja2luZyB3aGV0aGVyIEJvcmxhbmQgQ1hYIGNvbXBpbGVyIHN1cHBvcnRzIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMiIERJUkVDVCkKLSAgICBJRihLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNKQotICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgaWYoS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTSkKKyAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU009MSkKICAgICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU01fQ1BVSUQKICAgICAgICAgIkNoZWNraW5nIHdoZXRoZXIgQm9ybGFuZCBDWFggY29tcGlsZXIgc3VwcG9ydHMgQ1BVSUQgYXNzZW1ibGVyIGluc3RydWN0aW9uIiBESVJFQ1QpCi0gICAgICBJRihLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlEKQotICAgICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICAgIGlmKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU01fQ1BVSUQpCisgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTV9DUFVJRD0xKQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihLV1NZU19VU0VfX19JTlQ2NCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorICBpZihLV1NZU19VU0VfX19JTlQ2NCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19VU0VfX19JTlQ2ND0xKQotICBFTkRJRigpCi0gIElGKEtXU1lTX1VTRV9MT05HX0xPTkcpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgZW5kaWYoKQorICBpZihLV1NZU19VU0VfTE9OR19MT05HKQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IHRlc3RTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX1VTRV9MT05HX0xPTkc9MSkKLSAgRU5ESUYoKQotICBJRihLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IHRlc3RTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgIGVuZGlmKCkKKyAgaWYoS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORykKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HPTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgZW5kaWYoKQorICBpZihLV1NZU19JT1NfSEFTX09TVFJFQU1fX19JTlQ2NCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19JT1NfSEFTX09TVFJFQU1fX19JTlQ2ND0xKQotICBFTkRJRigpCi0gIElGKEtXU1lTX0JVSUxEX1NIQVJFRCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgZW5kaWYoKQorICBpZihLV1NZU19CVUlMRF9TSEFSRUQpCisgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX0JVSUxEX1NIQVJFRD0xKQotICBFTkRJRigpCisgIGVuZGlmKCkKIAotICBJRihVTklYIEFORCBOT1QgQ1lHV0lOKQorICBpZihVTklYIEFORCBOT1QgQ1lHV0lOKQogICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfR0VUTE9BREFWRwogICAgICAgIkNoZWNraW5nIHdoZXRoZXIgQ1hYIGNvbXBpbGVyIGhhcyBnZXRsb2FkYXZnIiBESVJFQ1QpCi0gICAgSUYoS1dTWVNfQ1hYX0hBU19HRVRMT0FEQVZHKQotICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgaWYoS1dTWVNfQ1hYX0hBU19HRVRMT0FEQVZHKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19HRVRMT0FEQVZHPTEpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9GU3RyZWFtKQoraWYoS1dTWVNfVVNFX0ZTdHJlYW0pCiAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfRVhUX1NURElPX0ZJTEVCVUZfSAogICAgICJDaGVja2luZyB3aGV0aGVyIDxleHQvc3RkaW9fZmlsZWJ1Zi5oPiBpcyBhdmFpbGFibGUiIERJUkVDVCkKLUVORElGKCkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENob29zZSBhIGRpcmVjdG9yeSBmb3IgdGhlIGdlbmVyYXRlZCBoZWFkZXJzLgotSUYoTk9UIEtXU1lTX0hFQURFUl9ST09UKQotICBTRVQoS1dTWVNfSEVBREVSX1JPT1QgIiR7UFJPSkVDVF9CSU5BUllfRElSfSIpCi1FTkRJRigpCi1TRVQoS1dTWVNfSEVBREVSX0RJUiAiJHtLV1NZU19IRUFERVJfUk9PVH0vJHtLV1NZU19OQU1FU1BBQ0V9IikKLUlOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19IRUFERVJfUk9PVH0pCitpZihOT1QgS1dTWVNfSEVBREVSX1JPT1QpCisgIHNldChLV1NZU19IRUFERVJfUk9PVCAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKK2VuZGlmKCkKK3NldChLV1NZU19IRUFERVJfRElSICIke0tXU1lTX0hFQURFUl9ST09UfS8ke0tXU1lTX05BTUVTUEFDRX0iKQoraW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX0hFQURFUl9ST09UfSkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JRihLV1NZU19JTlNUQUxMX0RPQ19ESVIpCitpZihLV1NZU19JTlNUQUxMX0RPQ19ESVIpCiAgICMgQXNzaWduIHRoZSBsaWNlbnNlIHRvIHRoZSBydW50aW1lIGNvbXBvbmVudCBzaW5jZSBpdCBtdXN0IGJlCiAgICMgZGlzdHJpYnV0ZWQgd2l0aCBiaW5hcnkgZm9ybXMgb2YgdGhpcyBzb2Z0d2FyZS4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQ0VOU0VfT1BUSU9OUyAke0tXU1lTX0lOU1RBTExfTElDRU5TRV9PUFRJT05TfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElDRU5TRV9PUFRJT05TICR7S1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlN9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKKyAgZW5kaWYoKQogCiAgICMgSW5zdGFsbCB0aGUgbGljZW5zZSB1bmRlciB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuCi0gIElOU1RBTEwoRklMRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NvcHlyaWdodC50eHQKKyAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ29weXJpZ2h0LnR4dAogICAgIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9ET0NfRElSfS8ke0tXU1lTX05BTUVTUEFDRX0KICAgICAke0tXU1lTX0lOU1RBTExfTElDRU5TRV9PUFRJT05TfSkKLUVORElGKCkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEJ1aWxkIGEgbGlzdCBvZiBjbGFzc2VzIGFuZCBoZWFkZXJzIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoZQogIyBzZWxlY3RlZCBjb21wb25lbnRzLiAgSW5pdGlhbGl6ZSB3aXRoIHJlcXVpcmVkIGNvbXBvbmVudHMuCi1TRVQoS1dTWVNfQ0xBU1NFUykKLVNFVChLV1NZU19IX0ZJTEVTIENvbmZpZ3VyZSBTaGFyZWRGb3J3YXJkKQotU0VUKEtXU1lTX0hYWF9GSUxFUyBDb25maWd1cmUgU3RyaW5nKQorc2V0KEtXU1lTX0NMQVNTRVMpCitzZXQoS1dTWVNfSF9GSUxFUyBDb25maWd1cmUgU2hhcmVkRm9yd2FyZCkKK3NldChLV1NZU19IWFhfRklMRVMgQ29uZmlndXJlIFN0cmluZykKIAotSUYoTk9UIENNYWtlX1NPVVJDRV9ESVIpCi0gIFNFVChLV1NZU19IWFhfRklMRVMgJHtLV1NZU19IWFhfRklMRVN9CitpZihOT1QgQ01ha2VfU09VUkNFX0RJUikKKyAgc2V0KEtXU1lTX0hYWF9GSUxFUyAke0tXU1lTX0hYWF9GSUxFU30KICAgICBoYXNodGFibGUgaGFzaF9mdW4gaGFzaF9tYXAgaGFzaF9zZXQKICAgICApCi1FTkRJRigpCitlbmRpZigpCiAKICMgQWRkIHNlbGVjdGVkIEMrKyBjbGFzc2VzLgotU0VUKGNwcGNsYXNzZXMKK3NldChjcHBjbGFzc2VzCiAgIERpcmVjdG9yeSBEeW5hbWljTG9hZGVyIEVuY29kaW5nIEdsb2IgUmVndWxhckV4cHJlc3Npb24gU3lzdGVtVG9vbHMKICAgQ29tbWFuZExpbmVBcmd1bWVudHMgSU9TdHJlYW0gRlN0cmVhbSBTeXN0ZW1JbmZvcm1hdGlvbiBDb25zb2xlQnVmCiAgICkKLUZPUkVBQ0goY3BwICR7Y3BwY2xhc3Nlc30pCi0gIElGKEtXU1lTX1VTRV8ke2NwcH0pCitmb3JlYWNoKGNwcCAke2NwcGNsYXNzZXN9KQorICBpZihLV1NZU19VU0VfJHtjcHB9KQogICAgICMgVXNlIHRoZSBjb3JyZXNwb25kaW5nIGNsYXNzLgotICAgIFNFVChLV1NZU19DTEFTU0VTICR7S1dTWVNfQ0xBU1NFU30gJHtjcHB9KQorICAgIHNldChLV1NZU19DTEFTU0VTICR7S1dTWVNfQ0xBU1NFU30gJHtjcHB9KQogCiAgICAgIyBMb2FkIGNvbXBvbmVudC1zcGVjaWZpYyBDTWFrZSBjb2RlLgotICAgIElGKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2NwcH0uY21ha2UpCi0gICAgICBJTkNMVURFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5cyR7Y3BwfS5jbWFrZSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICAgIGlmKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2NwcH0uY21ha2UpCisgICAgICBpbmNsdWRlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5cyR7Y3BwfS5jbWFrZSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQogCiAjIEFkZCBzZWxlY3RlZCBDIGNvbXBvbmVudHMuCi1GT1JFQUNIKGMKK2ZvcmVhY2goYwogICAgIFByb2Nlc3MgQmFzZTY0IEVuY29kaW5nIE1ENSBUZXJtaW5hbCBTeXN0ZW0gU3RyaW5nCiAgICAgKQotICBJRihLV1NZU19VU0VfJHtjfSkKKyAgaWYoS1dTWVNfVVNFXyR7Y30pCiAgICAgIyBVc2UgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUuCi0gICAgU0VUKEtXU1lTX0hfRklMRVMgJHtLV1NZU19IX0ZJTEVTfSAke2N9KQorICAgIHNldChLV1NZU19IX0ZJTEVTICR7S1dTWVNfSF9GSUxFU30gJHtjfSkKIAogICAgICMgTG9hZCBjb21wb25lbnQtc3BlY2lmaWMgQ01ha2UgY29kZS4KLSAgICBJRihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjfS5jbWFrZSkKLSAgICAgIElOQ0xVREUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjfS5jbWFrZSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICAgIGlmKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2N9LmNtYWtlKQorICAgICAgaW5jbHVkZSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2N9LmNtYWtlKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBCdWlsZCBhIGxpc3Qgb2Ygc291cmNlcyBmb3IgdGhlIGxpYnJhcnkgYmFzZWQgb24gY29tcG9uZW50cyB0aGF0IGFyZQogIyBpbmNsdWRlZC4KLVNFVChLV1NZU19DX1NSQ1MpCi1TRVQoS1dTWVNfQ1hYX1NSQ1MpCitzZXQoS1dTWVNfQ19TUkNTKQorc2V0KEtXU1lTX0NYWF9TUkNTKQogCiAjIEFkZCB0aGUgcHJvcGVyIHNvdXJjZXMgZm9yIHRoaXMgcGxhdGZvcm0ncyBQcm9jZXNzIGltcGxlbWVudGF0aW9uLgotSUYoS1dTWVNfVVNFX1Byb2Nlc3MpCi0gIElGKE5PVCBVTklYKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCisgIGlmKE5PVCBVTklYKQogICAgICMgVXNlIHRoZSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgotICAgIFNFVChLV1NZU19DX1NSQ1MgJHtLV1NZU19DX1NSQ1N9IFByb2Nlc3NXaW4zMi5jKQotICBFTFNFKCkKKyAgICBzZXQoS1dTWVNfQ19TUkNTICR7S1dTWVNfQ19TUkNTfSBQcm9jZXNzV2luMzIuYykKKyAgZWxzZSgpCiAgICAgIyBVc2UgdGhlIFVOSVggaW1wbGVtZW50YXRpb24uCi0gICAgU0VUKEtXU1lTX0NfU1JDUyAke0tXU1lTX0NfU1JDU30gUHJvY2Vzc1VOSVguYykKLSAgRU5ESUYoKQotRU5ESUYoKQorICAgIHNldChLV1NZU19DX1NSQ1MgJHtLV1NZU19DX1NSQ1N9IFByb2Nlc3NVTklYLmMpCisgIGVuZGlmKCkKK2VuZGlmKCkKIAogIyBBZGQgc2VsZWN0ZWQgQyBzb3VyY2VzLgotRk9SRUFDSChjIEJhc2U2NCBFbmNvZGluZyBNRDUgVGVybWluYWwgU3lzdGVtIFN0cmluZykKLSAgSUYoS1dTWVNfVVNFXyR7Y30pCi0gICAgSUYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Qy5jKQotICAgICAgTElTVChBUFBFTkQgS1dTWVNfQ19TUkNTICR7Y31DLmMpCi0gICAgRUxTRSgpCi0gICAgICBMSVNUKEFQUEVORCBLV1NZU19DX1NSQ1MgJHtjfS5jKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotRU5ERk9SRUFDSCgpCitmb3JlYWNoKGMgQmFzZTY0IEVuY29kaW5nIE1ENSBUZXJtaW5hbCBTeXN0ZW0gU3RyaW5nKQorICBpZihLV1NZU19VU0VfJHtjfSkKKyAgICBpZihFWElTVFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7Y31DLmMpCisgICAgICBsaXN0KEFQUEVORCBLV1NZU19DX1NSQ1MgJHtjfUMuYykKKyAgICBlbHNlKCkKKyAgICAgIGxpc3QoQVBQRU5EIEtXU1lTX0NfU1JDUyAke2N9LmMpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIyBDb25maWd1cmUgaGVhZGVycyBvZiBDKysgY2xhc3NlcyBhbmQgY29uc3RydWN0IHRoZSBsaXN0IG9mIHNvdXJjZXMuCi1GT1JFQUNIKGMgJHtLV1NZU19DTEFTU0VTfSkKK2ZvcmVhY2goYyAke0tXU1lTX0NMQVNTRVN9KQogICAjIEFkZCB0aGlzIHNvdXJjZSB0byB0aGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgZm9yIHRoZSBsaWJyYXJ5LgotICBJRihFWElTVFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7Y31DWFguY3h4KQotICAgIExJU1QoQVBQRU5EIEtXU1lTX0NYWF9TUkNTICR7Y31DWFguY3h4KQotICBFTFNFSUYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9LmN4eCkKLSAgICBMSVNUKEFQUEVORCBLV1NZU19DWFhfU1JDUyAke2N9LmN4eCkKLSAgRU5ESUYoKQorICBpZihFWElTVFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7Y31DWFguY3h4KQorICAgIGxpc3QoQVBQRU5EIEtXU1lTX0NYWF9TUkNTICR7Y31DWFguY3h4KQorICBlbHNlaWYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9LmN4eCkKKyAgICBsaXN0KEFQUEVORCBLV1NZU19DWFhfU1JDUyAke2N9LmN4eCkKKyAgZW5kaWYoKQogCiAgICMgQ29uZmlndXJlIHRoZSBoZWFkZXIgZm9yIHRoaXMgY2xhc3MuCi0gIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2N9Lmh4eC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7Y30uaHh4CisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2N9Lmh4eC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7Y30uaHh4CiAgICAgICAgICAgICAgICAgIEBPTkxZIElNTUVESUFURSkKLSAgU0VUKEtXU1lTX0NYWF9TUkNTICR7S1dTWVNfQ1hYX1NSQ1N9ICR7S1dTWVNfSEVBREVSX0RJUn0vJHtjfS5oeHgpCisgIHNldChLV1NZU19DWFhfU1JDUyAke0tXU1lTX0NYWF9TUkNTfSAke0tXU1lTX0hFQURFUl9ESVJ9LyR7Y30uaHh4KQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgaGVhZGVyLgotICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgIElOU1RBTEwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eAorICBpZihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICAgIGluc3RhbGwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eAogICAgICAgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSfS8ke0tXU1lTX05BTUVTUEFDRX0KICAgICAgICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX09QVElPTlN9KQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMgQ29uZmlndXJlIEMgaGVhZGVycy4KLUZPUkVBQ0goaCAke0tXU1lTX0hfRklMRVN9KQorZm9yZWFjaChoICR7S1dTWVNfSF9GSUxFU30pCiAgICMgQ29uZmlndXJlIHRoZSBoZWFkZXIgaW50byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgotICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtofS5oLmluICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oCisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2h9LmguaW4gJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgKICAgICAgICAgICAgICAgICAgQE9OTFkgSU1NRURJQVRFKQotICBTRVQoS1dTWVNfQ19TUkNTICR7S1dTWVNfQ19TUkNTfSAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaCkKKyAgc2V0KEtXU1lTX0NfU1JDUyAke0tXU1lTX0NfU1JDU30gJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgpCiAKICAgIyBDcmVhdGUgYW4gaW5zdGFsbCB0YXJnZXQgZm9yIHRoZSBoZWFkZXIuCi0gIElGKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCi0gICAgSU5TVEFMTChGSUxFUyAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaAorICBpZihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICAgIGluc3RhbGwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgKICAgICAgIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9CiAgICAgICAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TfSkKLSAgRU5ESUYoKQotRU5ERk9SRUFDSCgpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQogCiAjIENvbmZpZ3VyZSBvdGhlciBDKysgaGVhZGVycy4KLUZPUkVBQ0goaCAke0tXU1lTX0hYWF9GSUxFU30pCitmb3JlYWNoKGggJHtLV1NZU19IWFhfRklMRVN9KQogICAjIENvbmZpZ3VyZSB0aGUgaGVhZGVyIGludG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4KLSAgQ09ORklHVVJFX0ZJTEUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9LyR7aH0uaHh4LmluICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oeHgKKyAgY29uZmlndXJlX2ZpbGUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9LyR7aH0uaHh4LmluICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oeHgKICAgICAgICAgICAgICAgICAgQE9OTFkgSU1NRURJQVRFKQotICBTRVQoS1dTWVNfQ1hYX1NSQ1MgJHtLV1NZU19DWFhfU1JDU30gJHtLV1NZU19IRUFERVJfRElSfS8ke2h9Lmh4eCkKKyAgc2V0KEtXU1lTX0NYWF9TUkNTICR7S1dTWVNfQ1hYX1NSQ1N9ICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oeHgpCiAKICAgIyBDcmVhdGUgYW4gaW5zdGFsbCB0YXJnZXQgZm9yIHRoZSBoZWFkZXIuCi0gIElGKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCi0gICAgSU5TVEFMTChGSUxFUyAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4CisgIGlmKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCisgICAgaW5zdGFsbChGSUxFUyAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4CiAgICAgICBERVNUSU5BVElPTiAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfQogICAgICAgJHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OU30pCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEFkZCB0aGUgbGlicmFyeSB3aXRoIHRoZSBjb25maWd1cmVkIG5hbWUgYW5kIGxpc3Qgb2Ygc291cmNlcy4KLUlGKEtXU1lTX0NfU1JDUyBPUiBLV1NZU19DWFhfU1JDUykKLSAgSUYoS1dTWVNfU1BMSVRfT0JKRUNUU19GUk9NX0lOVEVSRkFDRSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX0pCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9PQkpFQ1QgJHtLV1NZU19OQU1FU1BBQ0V9X29iamVjdHMpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9MSU5LICR7S1dTWVNfTkFNRVNQQUNFfV9wcml2YXRlKQotICAgIFNFVChLV1NZU19UQVJHRVRfSU5TVEFMTCAke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfVEFSR0VUX0xJTkt9KQotICAgIFNFVChLV1NZU19MSU5LX0RFUEVOREVOQ1kgSU5URVJGQUNFKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX09CSkVDVH0gT0JKRUNUCitpZihLV1NZU19DX1NSQ1MgT1IgS1dTWVNfQ1hYX1NSQ1MpCisgIGlmKEtXU1lTX1NQTElUX09CSkVDVFNfRlJPTV9JTlRFUkZBQ0UpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9KQorICAgIHNldChLV1NZU19UQVJHRVRfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9vYmplY3RzKQorICAgIHNldChLV1NZU19UQVJHRVRfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fcHJpdmF0ZSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0lOU1RBTEwgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX1RBUkdFVF9MSU5LfSkKKyAgICBzZXQoS1dTWVNfTElOS19ERVBFTkRFTkNZIElOVEVSRkFDRSkKKyAgICBhZGRfbGlicmFyeSgke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IE9CSkVDVAogICAgICAgJHtLV1NZU19DX1NSQ1N9ICR7S1dTWVNfQ1hYX1NSQ1N9KQotICAgIElGKEtXU1lTX0JVSUxEX1NIQVJFRCBPUiBLV1NZU19CVUlMRF9QSUMpCi0gICAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfVEFSR0VUX09CSkVDVH0gUFJPUEVSVFkKKyAgICBpZihLV1NZU19CVUlMRF9TSEFSRUQgT1IgS1dTWVNfQlVJTERfUElDKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBST1BFUlRZCiAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgVFJVRSkKLSAgICBFTkRJRigpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBJTlRFUkZBQ0UpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFKQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX1RBUkdFVF9MSU5LfSBJTlRFUkZBQ0UKKyAgICBlbmRpZigpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBJTlRFUkZBQ0UpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9MSU5LfSBJTlRFUkZBQ0UKICAgICAgICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0pCi0gICAgVEFSR0VUX1NPVVJDRVMoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFCisgICAgdGFyZ2V0X3NvdXJjZXMoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFCiAgICAgICAkPFRBUkdFVF9PQkpFQ1RTOiR7S1dTWVNfVEFSR0VUX09CSkVDVH0+KQogICAgIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKCR7S1dTWVNfVEFSR0VUX09CSkVDVH0gUFJJVkFURSAke0tXU1lTX0NYWF9DT01QSUxFX0ZFQVRVUkVTfSkKICAgICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRSAke0tXU1lTX0NYWF9DT01QSUxFX0ZFQVRVUkVTfSkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9KQotICAgIFNFVChLV1NZU19UQVJHRVRfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9KQorICBlbHNlKCkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX0pCisgICAgc2V0KEtXU1lTX1RBUkdFVF9PQkpFQ1QgJHtLV1NZU19OQU1FU1BBQ0V9KQorICAgIHNldChLV1NZU19UQVJHRVRfTElOSyAke0tXU1lTX05BTUVTUEFDRX0pCiAgICAgc2V0KEtXU1lTX1RBUkdFVF9JTlNUQUxMICR7S1dTWVNfVEFSR0VUX0xJTkt9KQotICAgIFNFVChLV1NZU19MSU5LX0RFUEVOREVOQ1kgUFVCTElDKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSUJSQVJZX1RZUEV9CisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBQVUJMSUMpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJQlJBUllfVFlQRX0KICAgICAgICR7S1dTWVNfQ19TUkNTfSAke0tXU1lTX0NYWF9TUkNTfSkKICAgICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IFBVQkxJQyAke0tXU1lTX0NYWF9DT01QSUxFX0ZFQVRVUkVTfSkKLSAgRU5ESUYoKQorICBlbmRpZigpCiAgIGlmIChLV1NZU19BTElBU19UQVJHRVQpCiAgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19BTElBU19UQVJHRVR9IEFMSUFTICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0pCiAgIGVuZGlmICgpCi0gIFNFVF9UQVJHRVRfUFJPUEVSVElFUygke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBST1BFUlRJRVMKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7S1dTWVNfVEFSR0VUX09CSkVDVH0gUFJPUEVSVElFUwogICAgIENfQ0xBTkdfVElEWSAiIgogICAgIENYWF9DTEFOR19USURZICIiCiAgICAgQ19JTkNMVURFX1dIQVRfWU9VX1VTRSAiIgogICAgIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIgogICAgIExBQkVMUyAiJHtLV1NZU19MQUJFTFNfTElCfSIpCi0gIElGKEtXU1lTX1VTRV9EeW5hbWljTG9hZGVyKQotICAgIElGKFVOSVgpCi0gICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KKyAgaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgICAgaWYoVU5JWCkKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQogICAgICAgICAke0NNQUtFX0RMX0xJQlN9KQotICAgIEVORElGKCkKLSAgRU5ESUYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogCi0gIElGKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKLSAgICBJRihXSU4zMikKLSAgICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfSB3czJfMzIpCisgIGlmKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKKyAgICBpZihXSU4zMikKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfSB3czJfMzIpCiAgICAgICAjIGxpbmsgaW4gZGJnaGVscC5kbGwgZm9yIHN5bWJvbCBsb29rdXAgaWYgTVNWQyAxODAwIG9yIGxhdGVyCiAgICAgICAjIE5vdGUgdGhhdCB0aGUgZGJnaGVscCBydW50aW1lIGlzIHBhcnQgb2YgTVMgV2luZG93cyBPUwotICAgICAgSUYoTVNWQ19WRVJTSU9OIEFORCBOT1QgTVNWQ19WRVJTSU9OIFZFUlNJT05fTEVTUyAxODAwKQotICAgICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gZGJnaGVscCkKLSAgICAgIEVORElGKCkKLSAgICAgIElGKEtXU1lTX1NZU19IQVNfUFNBUEkpCi0gICAgICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQotICAgICAgICAgIFBzYXBpKQotICAgICAgRU5ESUYoKQotICAgIEVMU0VJRihVTklYKQotICAgICAgSUYgKEVYRUNJTkZPX0xJQiBBTkQgS1dTWVNfQ1hYX0hBU19CQUNLVFJBQ0UpCisgICAgICBpZihNU1ZDX1ZFUlNJT04gQU5EIE5PVCBNU1ZDX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE4MDApCisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfSBkYmdoZWxwKQorICAgICAgZW5kaWYoKQorICAgICAgaWYoS1dTWVNfU1lTX0hBU19QU0FQSSkKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICAgICAgcHNhcGkpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKFVOSVgpCisgICAgICBpZiAoRVhFQ0lORk9fTElCIEFORCBLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRSkKICAgICAgICAgIyBiYWNrdHJhY2Ugb24gRnJlZUJTRCBpcyBub3QgaW4gbGliYwotICAgICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CiAgICAgICAgICAgJHtFWEVDSU5GT19MSUJ9KQotICAgICAgRU5ESUYoKQotICAgICAgSUYgKEtXU1lTX0NYWF9IQVNfRExBRERSKQorICAgICAgZW5kaWYoKQorICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfRExBRERSKQogICAgICAgICAjIGZvciBzeW1ib2wgbG9va3VwIHVzaW5nIGRsYWRkcgotICAgICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CiAgICAgICAgICAgJHtDTUFLRV9ETF9MSUJTfSkKLSAgICAgIEVORElGKCkKLSAgICAgIElGIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiU3VuT1MiKQotICAgICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiU3VuT1MiKQorICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KICAgICAgICAgICBzb2NrZXQpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBBcHBseSB1c2VyLWRlZmluZWQgdGFyZ2V0IHByb3BlcnRpZXMgdG8gdGhlIGxpYnJhcnkuCi0gIElGKEtXU1lTX1BST1BFUlRJRVNfQ1hYKQotICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IFBST1BFUlRJRVMKKyAgaWYoS1dTWVNfUFJPUEVSVElFU19DWFgpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gUFJPUEVSVElFUwogICAgICAgJHtLV1NZU19QUk9QRVJUSUVTX0NYWH0pCi0gIEVORElGKCkKKyAgZW5kaWYoKQogCiAgICMgU2V0IHVwIGluY2x1ZGUgdXNhZ2UgcmVxdWlyZW1lbnQKLSAgSUYoQ09NTUFORCBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUykKLSAgICBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQorICBpZihDT01NQU5EIFRBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFCiAgICAgICAkPEJVSUxEX0lOVEVSRkFDRToke0tXU1lTX0hFQURFUl9ST09UfT4pCi0gICAgSUYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKLSAgICAgIFRBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFCisgICAgaWYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKKyAgICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFCiAgICAgICAgICQ8SU5TVEFMTF9JTlRFUkZBQ0U6JHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSfT4pCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBDcmVhdGUgYW4gaW5zdGFsbCB0YXJnZXQgZm9yIHRoZSBsaWJyYXJ5LgotICBJRihLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSkKLSAgICBJTlNUQUxMKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfSU5TVEFMTH0gJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0pCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfSU5TVEFMTF9OQU1FTElOS19SVUxFKQotICAgIElOU1RBTEwoVEFSR0VUUyAke0tXU1lTX1RBUkdFVF9JTlNUQUxMfSAke0tXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRX0pCi0gIEVORElGKCkKLUVORElGKCkKKyAgaWYoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUpCisgICAgaW5zdGFsbChUQVJHRVRTICR7S1dTWVNfVEFSR0VUX0lOU1RBTEx9ICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9KQorICBlbmRpZigpCisgIGlmKEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKKyAgICBpbnN0YWxsKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfSU5TVEFMTH0gJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9KQorICBlbmRpZigpCitlbmRpZigpCiAKICMgQWRkIGEgQy1vbmx5IGxpYnJhcnkgaWYgcmVxdWVzdGVkLgotSUYoS1dTWVNfRU5BQkxFX0MgQU5EIEtXU1lTX0NfU1JDUykKLSBJRihLV1NZU19TUExJVF9PQkpFQ1RTX0ZST01fSU5URVJGQUNFKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9X2MpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9DX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX1fY19vYmplY3RzKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19MSU5LICR7S1dTWVNfTkFNRVNQQUNFfV9jX3ByaXZhdGUpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9DX0lOU1RBTEwKK2lmKEtXU1lTX0VOQUJMRV9DIEFORCBLV1NZU19DX1NSQ1MpCisgaWYoS1dTWVNfU1BMSVRfT0JKRUNUU19GUk9NX0lOVEVSRkFDRSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfV9jKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19PQkpFQ1QgJHtLV1NZU19OQU1FU1BBQ0V9X2Nfb2JqZWN0cykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fY19wcml2YXRlKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19JTlNUQUxMCiAgICAgICAke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gJHtLV1NZU19UQVJHRVRfQ19MSU5LfSkKLSAgICBTRVQoS1dTWVNfTElOS19ERVBFTkRFTkNZIElOVEVSRkFDRSkKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gT0JKRUNUICR7S1dTWVNfQ19TUkNTfSkKLSAgICBJRihLV1NZU19CVUlMRF9TSEFSRUQgT1IgS1dTWVNfQlVJTERfUElDKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCAke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gUFJPUEVSVFkKKyAgICBzZXQoS1dTWVNfTElOS19ERVBFTkRFTkNZIElOVEVSRkFDRSkKKyAgICBhZGRfbGlicmFyeSgke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gT0JKRUNUICR7S1dTWVNfQ19TUkNTfSkKKyAgICBpZihLV1NZU19CVUlMRF9TSEFSRUQgT1IgS1dTWVNfQlVJTERfUElDKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gUFJPUEVSVFkKICAgICAgICAgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBUUlVFKQotICAgIEVORElGKCkKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gSU5URVJGQUNFKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0NfTElOS30gSU5URVJGQUNFKQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRQorICAgIGVuZGlmKCkKKyAgICBhZGRfbGlicmFyeSgke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gSU5URVJGQUNFKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0NfTElOS30gSU5URVJGQUNFKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRQogICAgICAgJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9KQotICAgIFRBUkdFVF9TT1VSQ0VTKCR7S1dTWVNfVEFSR0VUX0NfTElOS30gSU5URVJGQUNFCisgICAgdGFyZ2V0X3NvdXJjZXMoJHtLV1NZU19UQVJHRVRfQ19MSU5LfSBJTlRFUkZBQ0UKICAgICAgICQ8VEFSR0VUX09CSkVDVFM6JHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9PikKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX1fYykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9jKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19MSU5LICR7S1dTWVNfTkFNRVNQQUNFfV9jKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19JTlNUQUxMICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCi0gICAgU0VUKEtXU1lTX0xJTktfREVQRU5ERU5DWSBQVUJMSUMpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9ICR7S1dTWVNfTElCUkFSWV9UWVBFfQorICBlbHNlKCkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfV9jKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19PQkpFQ1QgJHtLV1NZU19OQU1FU1BBQ0V9X2MpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9X2MpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0lOU1RBTEwgJHtLV1NZU19UQVJHRVRfQ19MSU5LfSkKKyAgICBzZXQoS1dTWVNfTElOS19ERVBFTkRFTkNZIFBVQkxJQykKKyAgICBhZGRfbGlicmFyeSgke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gJHtLV1NZU19MSUJSQVJZX1RZUEV9CiAgICAgICAke0tXU1lTX0NfU1JDU30pCi0gIEVORElGKCkKLSAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKCR7S1dTWVNfVEFSR0VUX0NfT0JKRUNUfSBQUk9QRVJUSUVTCisgIGVuZGlmKCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7S1dTWVNfVEFSR0VUX0NfT0JKRUNUfSBQUk9QRVJUSUVTCiAgICAgTEFCRUxTICIke0tXU1lTX0xBQkVMU19MSUJ9IikKIAogICAjIEFwcGx5IHVzZXItZGVmaW5lZCB0YXJnZXQgcHJvcGVydGllcyB0byB0aGUgbGlicmFyeS4KLSAgSUYoS1dTWVNfUFJPUEVSVElFU19DKQotICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gUFJPUEVSVElFUworICBpZihLV1NZU19QUk9QRVJUSUVTX0MpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSBQUk9QRVJUSUVTCiAgICAgICAke0tXU1lTX1BST1BFUlRJRVNfQ30pCi0gIEVORElGKCkKKyAgZW5kaWYoKQogCiAgICMgU2V0IHVwIGluY2x1ZGUgdXNhZ2UgcmVxdWlyZW1lbnQKLSAgSUYoQ09NTUFORCBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUykKLSAgICBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gSU5URVJGQUNFCisgIGlmKENPTU1BTkQgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRQogICAgICAgJDxCVUlMRF9JTlRFUkZBQ0U6JHtLV1NZU19IRUFERVJfUk9PVH0+KQotICAgIElGKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCi0gICAgICBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gSU5URVJGQUNFCisgICAgaWYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKKyAgICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSBJTlRFUkZBQ0UKICAgICAgICAgJDxJTlNUQUxMX0lOVEVSRkFDRToke0tXU1lTX0lOU1RBTExfSU5DTFVERV9ESVJ9PikKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAogICAjIENyZWF0ZSBhbiBpbnN0YWxsIHRhcmdldCBmb3IgdGhlIGxpYnJhcnkuCi0gIElGKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQotICAgIElOU1RBTEwoVEFSR0VUUyAke0tXU1lTX1RBUkdFVF9DX0lOU1RBTEx9KQotICBFTkRJRigpCi1FTkRJRigpCisgIGlmKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQorICAgIGluc3RhbGwoVEFSR0VUUyAke0tXU1lTX1RBUkdFVF9DX0lOU1RBTEx9KQorICBlbmRpZigpCitlbmRpZigpCiAKICMgRm9yIGJ1aWxkaW5nIGt3c3lzIGl0c2VsZiwgd2UgdXNlIGEgbWFjcm8gZGVmaW5lZCBvbiB0aGUgY29tbWFuZAogIyBsaW5lIHRvIGNvbmZpZ3VyZSB0aGUgbmFtZXNwYWNlIGluIHRoZSBDIGFuZCBDKysgc291cmNlIGZpbGVzLgotQUREX0RFRklOSVRJT05TKCItREtXU1lTX05BTUVTUEFDRT0ke0tXU1lTX05BTUVTUEFDRX0iKQorYWRkX2RlZmluaXRpb25zKCItREtXU1lTX05BTUVTUEFDRT0ke0tXU1lTX05BTUVTUEFDRX0iKQogCiAjIERpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9yIHN0YW5kYXJkIEMgZnVuY3Rpb25zLgotSUYoTVNWQyBPUiAoV0lOMzIgQU5EIChDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJJbnRlbCIgT1IKK2lmKE1TVkMgT1IgKFdJTjMyIEFORCAoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiSW50ZWwiIE9SCiAgICAoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiQ2xhbmciIEFORCBDTUFLRV9DWFhfU0lNVUxBVEVfSUQgU1RSRVFVQUwgIk1TVkMiKSkpKQotICBBRERfREVGSU5JVElPTlMoCisgIGFkZF9kZWZpbml0aW9ucygKICAgICAtRF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKICAgICAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURQogICAgIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKICAgICAtRF9TQ0xfU0VDVVJFX05PX0RFUFJFQ0FURQogICAgICkKLUVORElGKCkKK2VuZGlmKCkKIAotSUYoV0lOMzIpCitpZihXSU4zMikKICAgIyBIZWxwIGVuZm9yY2UgdGhlIHVzZSBvZiB3aWRlIFdpbmRvd3MgYXBpcy4KLSAgQUREX0RFRklOSVRJT05TKC1EVU5JQ09ERSAtRF9VTklDT0RFKQotRU5ESUYoKQorICBhZGRfZGVmaW5pdGlvbnMoLURVTklDT0RFIC1EX1VOSUNPREUpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9TdHJpbmcpCitpZihLV1NZU19VU0VfU3RyaW5nKQogICAjIEFjdGl2YXRlIGNvZGUgaW4gIlN0cmluZy5jIi4gIFNlZSB0aGUgY29tbWVudCBpbiB0aGUgc291cmNlLgotICBTRVRfU09VUkNFX0ZJTEVTX1BST1BFUlRJRVMoU3RyaW5nLmMgUFJPUEVSVElFUworICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoU3RyaW5nLmMgUFJPUEVSVElFUwogICAgIENPTVBJTEVfRkxBR1MgIi1ES1dTWVNfU1RSSU5HX0MiKQotRU5ESUYoKQorZW5kaWYoKQogCi1JRihLV1NZU19VU0VfRW5jb2RpbmcpCitpZihLV1NZU19VU0VfRW5jb2RpbmcpCiAgICMgU2V0IGRlZmF1bHQgOCBiaXQgZW5jb2RpbmcgaW4gIkVuZGNvZGluZ0MuYyIuCi0gIFNFVF9QUk9QRVJUWShTT1VSQ0UgRW5jb2RpbmdDLmMgRW5jb2RpbmdDWFguY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgRW5jb2RpbmdDLmMgRW5jb2RpbmdDWFguY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCiAgICAgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRT0ke0tXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0V9KQotRU5ESUYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU2V0dXAgdGVzdGluZyBpZiBub3QgYmVpbmcgYnVpbHQgYXMgcGFydCBvZiBhbm90aGVyIHByb2plY3QuCi1JRihLV1NZU19TVEFOREFMT05FIE9SIENNYWtlX1NPVVJDRV9ESVIpCi0gIElGKEJVSUxEX1RFU1RJTkcpCitpZihLV1NZU19TVEFOREFMT05FIE9SIENNYWtlX1NPVVJDRV9ESVIpCisgIGlmKEJVSUxEX1RFU1RJTkcpCiAgICAgIyBDb21wdXRlIHRoZSBsb2NhdGlvbiBvZiBleGVjdXRhYmxlcy4KLSAgICBTRVQoRVhFQ19ESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIpCi0gICAgSUYoRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCkKLSAgICAgIFNFVChFWEVDX0RJUiAiJHtFWEVDVVRBQkxFX09VVFBVVF9QQVRIfSIpCi0gICAgRU5ESUYoKQorICAgIHNldChFWEVDX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKKyAgICBpZihDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkpCisgICAgICBzZXQoRVhFQ19ESVIgIiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSIpCisgICAgZW5kaWYoKQogCiAgICAgIyBDIHRlc3RzCi0gICAgU0VUKEtXU1lTX0NfVEVTVFMKKyAgICBzZXQoS1dTWVNfQ19URVNUUwogICAgICAgdGVzdEVuY29kZS5jCiAgICAgICB0ZXN0VGVybWluYWwuYwogICAgICAgKQotICAgIElGKEtXU1lTX1NUQU5EQUxPTkUpCi0gICAgICBTRVQoS1dTWVNfQ19URVNUUyAke0tXU1lTX0NfVEVTVFN9IHRlc3RGYWlsLmMpCi0gICAgRU5ESUYoKQotICAgIENSRUFURV9URVNUX1NPVVJDRUxJU1QoCisgICAgaWYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgICAgIHNldChLV1NZU19DX1RFU1RTICR7S1dTWVNfQ19URVNUU30gdGVzdEZhaWwuYykKKyAgICBlbmRpZigpCisgICAgY3JlYXRlX3Rlc3Rfc291cmNlbGlzdCgKICAgICAgIEtXU1lTX0NfVEVTVF9TUkNTICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQy5jCiAgICAgICAke0tXU1lTX0NfVEVTVFN9CiAgICAgICApCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7S1dTWVNfQ19URVNUX1NSQ1N9KQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDIFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0c0MgJHtLV1NZU19UQVJHRVRfQ19MSU5LfSkKLSAgICBGT1JFQUNIKHRlc3RmaWxlICR7S1dTWVNfQ19URVNUU30pCisgICAgYWRkX2V4ZWN1dGFibGUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7S1dTWVNfQ19URVNUX1NSQ1N9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDIFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX05BTUVTUEFDRX1UZXN0c0MgJHtLV1NZU19UQVJHRVRfQ19MSU5LfSkKKyAgICBmb3JlYWNoKHRlc3RmaWxlICR7S1dTWVNfQ19URVNUU30pCiAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHRlc3QgIiR7dGVzdGZpbGV9IiBOQU1FX1dFKQotICAgICAgQUREX1RFU1Qoa3dzeXMuJHt0ZXN0fSAke0VYRUNfRElSfS8ke0tXU1lTX05BTUVTUEFDRX1UZXN0c0MgJHt0ZXN0fSAke0tXU1lTX1RFU1RfQVJHU18ke3Rlc3R9fSkKLSAgICAgIFNFVF9QUk9QRVJUWShURVNUIGt3c3lzLiR7dGVzdH0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQotICAgIEVOREZPUkVBQ0goKQorICAgICAgYWRkX3Rlc3Qoa3dzeXMuJHt0ZXN0fSAke0VYRUNfRElSfS8ke0tXU1lTX05BTUVTUEFDRX1UZXN0c0MgJHt0ZXN0fSAke0tXU1lTX1RFU1RfQVJHU18ke3Rlc3R9fSkKKyAgICAgIHNldF9wcm9wZXJ0eShURVNUIGt3c3lzLiR7dGVzdH0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgIGVuZGZvcmVhY2goKQogCiAgICAgIyBDKysgdGVzdHMKLSAgICBJRihOT1QgV0FUQ09NIEFORCBOT1QgQ01ha2VfU09VUkNFX0RJUikKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMKKyAgICBpZihOT1QgV0FUQ09NIEFORCBOT1QgQ01ha2VfU09VUkNFX0RJUikKKyAgICAgIHNldChLV1NZU19DWFhfVEVTVFMKICAgICAgICAgdGVzdEhhc2hTVEwuY3h4CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gICAgU0VUKEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KKyAgICBlbmRpZigpCisgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgIHRlc3RDb25maWd1cmUuY3h4CiAgICAgICB0ZXN0U3lzdGVtVG9vbHMuY3h4CiAgICAgICB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4CiAgICAgICB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eAogICAgICAgdGVzdERpcmVjdG9yeS5jeHgKICAgICAgICkKLSAgICBJRihLV1NZU19TVExfSEFTX1dTVFJJTkcpCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfQorICAgIGlmKEtXU1lTX1NUTF9IQVNfV1NUUklORykKKyAgICAgIHNldChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CiAgICAgICAgIHRlc3RFbmNvZGluZy5jeHgKICAgICAgICAgKQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfRlN0cmVhbSkKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CisgICAgZW5kaWYoKQorICAgIGlmKEtXU1lTX1VTRV9GU3RyZWFtKQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgICAgdGVzdEZTdHJlYW0uY3h4CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gICAgSUYoS1dTWVNfVVNFX0NvbnNvbGVCdWYpCi0gICAgICBBRERfRVhFQ1VUQUJMRSh0ZXN0Q29uc29sZUJ1ZkNoaWxkIHRlc3RDb25zb2xlQnVmQ2hpbGQuY3h4KQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDWFhfQ0xBTkdfVElEWSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKLSAgICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUyh0ZXN0Q29uc29sZUJ1ZkNoaWxkICR7S1dTWVNfVEFSR0VUX0xJTkt9KQotICAgICAgU0VUKEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX0NvbnNvbGVCdWYpCisgICAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0Q29uc29sZUJ1ZkNoaWxkIHRlc3RDb25zb2xlQnVmQ2hpbGQuY3h4KQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDWFhfQ0xBTkdfVElEWSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0Q29uc29sZUJ1ZkNoaWxkICR7S1dTWVNfVEFSR0VUX0xJTkt9KQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgICAgdGVzdENvbnNvbGVCdWYuY3h4CiAgICAgICAgICkKLSAgICAgIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTVNWQyIgQU5ECisgICAgICBpZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk1TVkMiIEFORAogICAgICAgICAgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSICIxOS4wLjIzNTA2IikKICAgICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSB0ZXN0Q29uc29sZUJ1Zi5jeHggdGVzdENvbnNvbGVCdWZDaGlsZC5jeHggUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAvdXRmLTgpCi0gICAgICBFTkRJRigpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIHRlc3RDb25zb2xlQnVmLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworICAgICAgZW5kaWYoKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSB0ZXN0Q29uc29sZUJ1Zi5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKICAgICAgICAgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRT0ke0tXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0V9KQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfSB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4KQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9IHRlc3REeW5hbWljTG9hZGVyLmN4eCkKKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX1N5c3RlbUluZm9ybWF0aW9uKQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30gdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCkKKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgICAgICBzZXQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfSB0ZXN0RHluYW1pY0xvYWRlci5jeHgpCiAgICAgICAjIElmIGt3c3lzIGNvbnRhaW5zIHRoZSBEeW5hbWljTG9hZGVyLCBuZWVkIGV4dHJhIGxpYnJhcnkKLSAgICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkIE1PRFVMRSB0ZXN0RHlubG9hZC5jKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfTElCfSkKLSAgICAgIEFERF9ERVBFTkRFTkNJRVMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdER5bmxvYWQgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSkKKyAgICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkIE1PRFVMRSB0ZXN0RHlubG9hZC5jKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfTElCfSkKKyAgICAgIGFkZF9kZXBlbmRlbmNpZXMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdER5bmxvYWQgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSkKIAogICAgICAgaWYgKFdJTjMyKQogICAgICAgICAjIFdpbmRvd3MgdGVzdHMgc3VwcG9ydGVkIGZsYWdzLgpAQCAtMTEzNCwzMyArMTEzNCwzMyBAQAogICAgICAgICBhZGRfZGVwZW5kZW5jaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkVXNlICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0pCiAgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZFVzZSBQUklWQVRFICR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkSW1wbCkKICAgICAgIGVuZGlmICgpCi0gICAgRU5ESUYoKQotICAgIENSRUFURV9URVNUX1NPVVJDRUxJU1QoCisgICAgZW5kaWYoKQorICAgIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QoCiAgICAgICBLV1NZU19DWFhfVEVTVF9TUkNTICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4LmN4eAogICAgICAgJHtLV1NZU19DWFhfVEVTVFN9CiAgICAgICApCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggJHtLV1NZU19DWFhfVEVTVF9TUkNTfSkKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENYWF9DTEFOR19USURZICIiKQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ19JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke0tXU1lTX1RBUkdFVF9MSU5LfSkKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke0tXU1lTX0NYWF9URVNUX1NSQ1N9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ19DTEFOR19USURZICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ1hYX0NMQU5HX1RJRFkgIiIpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ1hYX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4ICR7S1dTWVNfVEFSR0VUX0xJTkt9KQogCi0gICAgU0VUKFRFU1RfU1lTVEVNVE9PTFNfU09VUkNFX0RJUiAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKLSAgICBTRVQoVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQotICAgIENPTkZJR1VSRV9GSUxFKAorICAgIHNldChURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIpCisgICAgc2V0KFRFU1RfU1lTVEVNVE9PTFNfQklOQVJZX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKKyAgICBjb25maWd1cmVfZmlsZSgKICAgICAgICR7UFJPSkVDVF9TT1VSQ0VfRElSfS90ZXN0U3lzdGVtVG9vbHMuaC5pbgogICAgICAgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3Rlc3RTeXN0ZW1Ub29scy5oKQotICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQogCi0gICAgSUYoQ1RFU1RfVEVTVF9LV1NZUykKLSAgICAgIENPTkZJR1VSRV9GSUxFKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vRXh0cmFUZXN0LmNtYWtlLmluIgorICAgIGlmKENURVNUX1RFU1RfS1dTWVMpCisgICAgICBjb25maWd1cmVfZmlsZSgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0V4dHJhVGVzdC5jbWFrZS5pbiIKICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9FeHRyYVRlc3QuY21ha2UiKQotICAgICAgU0VUX0RJUkVDVE9SWV9QUk9QRVJUSUVTKFBST1BFUlRJRVMgVEVTVF9JTkNMVURFX0ZJTEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9FeHRyYVRlc3QuY21ha2UiKQotICAgIEVORElGKCkKKyAgICAgIHNldF9kaXJlY3RvcnlfcHJvcGVydGllcyhQUk9QRVJUSUVTIFRFU1RfSU5DTFVERV9GSUxFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRXh0cmFUZXN0LmNtYWtlIikKKyAgICBlbmRpZigpCiAKLSAgICBTRVQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cworICAgIHNldChLV1NZU19URVNUX0FSR1NfdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzCiAgICAgICAtLWFub3RoZXItYm9vbC12YXJpYWJsZQogICAgICAgLS1sb25nMz1vcHQKICAgICAgIC0tc2V0LWJvb2wtYXJnMQpAQCAtMTE3OSw3ICsxMTc5LDcgQEAKICAgICAgIC1DPXRlc3QKICAgICAgIC0tbG9uZzIgaGVsbG8KICAgICAgICkKLSAgICBTRVQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEKKyAgICBzZXQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEKICAgICAgIC0taWdub3JlZAogICAgICAgLW4gMjQKICAgICAgIC0tc2Vjb25kLWlnbm9yZWQKQEAgLTExODgsNzMgKzExODgsNzMgQEAKICAgICAgIC1wCiAgICAgICBzb21lIGp1bmsgYXQgdGhlIGVuZAogICAgICAgKQotICAgIEZPUkVBQ0godGVzdGZpbGUgJHtLV1NZU19DWFhfVEVTVFN9KQorICAgIGZvcmVhY2godGVzdGZpbGUgJHtLV1NZU19DWFhfVEVTVFN9KQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0ICIke3Rlc3RmaWxlfSIgTkFNRV9XRSkKLSAgICAgIEFERF9URVNUKGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggJHt0ZXN0fSAke0tXU1lTX1RFU1RfQVJHU18ke3Rlc3R9fSkKLSAgICAgIFNFVF9QUk9QRVJUWShURVNUIGt3c3lzLiR7dGVzdH0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQotICAgIEVOREZPUkVBQ0goKQorICAgICAgYWRkX3Rlc3Qoa3dzeXMuJHt0ZXN0fSAke0VYRUNfRElSfS8ke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke3Rlc3R9ICR7S1dTWVNfVEVTVF9BUkdTXyR7dGVzdH19KQorICAgICAgc2V0X3Byb3BlcnR5KFRFU1Qga3dzeXMuJHt0ZXN0fSBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfVEVTVH0pCisgICAgZW5kZm9yZWFjaCgpCiAKICAgICAjIFByb2Nlc3MgdGVzdHMuCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgdGVzdFByb2Nlc3MuYykKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzIFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0UHJvY2VzcyAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIElGKE5PVCBDWUdXSU4pCi0gICAgICBTRVQoS1dTWVNfVEVTVF9QUk9DRVNTXzcgNykKLSAgICBFTkRJRigpCi0gICAgRk9SRUFDSChuIDEgMiAzIDQgNSA2ICR7S1dTWVNfVEVTVF9QUk9DRVNTXzd9IDkgMTApCi0gICAgICBBRERfVEVTVChrd3N5cy50ZXN0UHJvY2Vzcy0ke259ICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzICR7bn0pCi0gICAgICBTRVRfUFJPUEVSVFkoVEVTVCBrd3N5cy50ZXN0UHJvY2Vzcy0ke259IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKLSAgICAgIFNFVF9URVNUU19QUk9QRVJUSUVTKGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gUFJPUEVSVElFUyBUSU1FT1VUIDEyMCkKLSAgICBFTkRGT1JFQUNIKCkKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0UHJvY2VzcyB0ZXN0UHJvY2Vzcy5jKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgaWYoTk9UIENZR1dJTikKKyAgICAgIHNldChLV1NZU19URVNUX1BST0NFU1NfNyA3KQorICAgIGVuZGlmKCkKKyAgICBmb3JlYWNoKG4gMSAyIDMgNCA1IDYgJHtLV1NZU19URVNUX1BST0NFU1NfN30gOSAxMCkKKyAgICAgIGFkZF90ZXN0KGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgJHtufSkKKyAgICAgIHNldF9wcm9wZXJ0eShURVNUIGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoa3dzeXMudGVzdFByb2Nlc3MtJHtufSBQUk9QRVJUSUVTIFRJTUVPVVQgMTIwKQorICAgIGVuZGZvcmVhY2goKQogCi0gICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiIpCisgICAgc2V0KHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiIpCiAgICAgIyBTb21lIEFwcGxlIGNvbXBpbGVycyBwcm9kdWNlIGJhZCBvcHRpbWl6YXRpb25zIGluIHRoaXMgc291cmNlLgotICAgIElGKEFQUExFIEFORCBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl4oR05VfExMVk0pJCIpCi0gICAgICBTRVQodGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSAtTzAiKQotICAgIEVMU0VJRihDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJYTCIpCisgICAgaWYoQVBQTEUgQU5EIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXihHTlV8TExWTSkkIikKKyAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1PMCIpCisgICAgZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIikKICAgICAgICMgVGVsbCBJQk0gWEwgbm90IHRvIHdhcm4gYWJvdXQgb3VyIHRlc3QgaW5maW5pdGUgbG9vcAotICAgICAgSUYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4LipwcGM2NGxlIgorICAgICAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4LipwcGM2NGxlIgogICAgICAgICAgQU5EIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjE2LjEuMCIKICAgICAgICAgIEFORCBOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiMTMuMS4xIikKICAgICAgICAgIyB2MTMuMS5bMS02XSBvbiBMaW51eCBwcGM2NGxlIGlzIGNsYW5nIGJhc2VkIGFuZCBkb2VzIG5vdCBhY2NlcHQKICAgICAgICAgIyB0aGUgLXFzdXBwcmVzcyBvcHRpb24sIHNvIGp1c3Qgc3VwcHJlc3MgYWxsIHdhcm5pbmdzLgotICAgICAgICBTRVQodGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSAtdyIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLXFzdXBwcmVzcz0xNTAwLTAxMCIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICAgIElGKENNQUtFX0NfRkxBR1MgTUFUQ0hFUyAiLWZzYW5pdGl6ZT0iKQotICAgICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLURDUkFTSF9VU0lOR19BQk9SVCIpCi0gICAgRU5ESUYoKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgdGVzdFByb2Nlc3MuYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IikKKyAgICAgICAgc2V0KHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLXciKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1xc3VwcHJlc3M9MTUwMC0wMTAiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgICBpZihDTUFLRV9DX0ZMQUdTIE1BVENIRVMgIi1mc2FuaXRpemU9IikKKyAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1EQ1JBU0hfVVNJTkdfQUJPUlQiKQorICAgIGVuZGlmKCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIHRlc3RQcm9jZXNzLmMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSIpCiAKICAgICAjIFRlc3QgU2hhcmVkRm9yd2FyZAotICAgIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS90ZXN0U2hhcmVkRm9yd2FyZC5jLmluCisgICAgY29uZmlndXJlX2ZpbGUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3Rlc3RTaGFyZWRGb3J3YXJkLmMuaW4KICAgICAgICAgICAgICAgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vdGVzdFNoYXJlZEZvcndhcmQuYyBAT05MWSBJTU1FRElBVEUpCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZAogICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS90ZXN0U2hhcmVkRm9yd2FyZC5jKQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCi0gICAgQUREX0RFUEVOREVOQ0lFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIEFERF9URVNUKGt3c3lzLnRlc3RTaGFyZWRGb3J3YXJkICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RTaGFyZWRGb3J3YXJkIDEpCi0gICAgU0VUX1BST1BFUlRZKFRFU1Qga3dzeXMudGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgYWRkX2RlcGVuZGVuY2llcygke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQorICAgIGFkZF90ZXN0KGt3c3lzLnRlc3RTaGFyZWRGb3J3YXJkICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RTaGFyZWRGb3J3YXJkIDEpCisgICAgc2V0X3Byb3BlcnR5KFRFU1Qga3dzeXMudGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQogCiAgICAgIyBDb25maWd1cmUgc29tZSB0ZXN0IHByb3BlcnRpZXMuCi0gICAgSUYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgICBpZihLV1NZU19TVEFOREFMT05FKQogICAgICAgIyBXZSBleHBlY3QgdGVzdCB0byBmYWlsCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKLSAgICAgIEdFVF9URVNUX1BST1BFUlRZKGt3c3lzLnRlc3RGYWlsIFdJTExfRkFJTCB3ZnYpCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIE1FQVNVUkVNRU5UICJTb21lIEtleT1Tb21lIFZhbHVlIikKLSAgICAgIE1FU1NBR0UoU1RBVFVTICJHRVRfVEVTVF9QUk9QRVJUWSByZXR1cm5lZDogJHt3ZnZ9IikKLSAgICBFTkRJRigpCisgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKKyAgICAgIGdldF90ZXN0X3Byb3BlcnR5KGt3c3lzLnRlc3RGYWlsIFdJTExfRkFJTCB3ZnYpCisgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIE1FQVNVUkVNRU5UICJTb21lIEtleT1Tb21lIFZhbHVlIikKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJHRVRfVEVTVF9QUk9QRVJUWSByZXR1cm5lZDogJHt3ZnZ9IikKKyAgICBlbmRpZigpCiAKICAgICAjIFNldCB1cCBjdGVzdCBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlLgotICAgIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9DVGVzdEN1c3RvbS5jbWFrZS5pbgorICAgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9DVGVzdEN1c3RvbS5jbWFrZS5pbgogICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9DVGVzdEN1c3RvbS5jbWFrZSBAT05MWSkKIAogICAgICMgU3VwcHJlc3Mga25vd24gY29uc2lzdGVudCBmYWlsdXJlcyBvbiBidWdneSBzeXN0ZW1zLgotICAgIElGKEtXU1lTX1RFU1RfQk9HVVNfRkFJTFVSRVMpCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUygke0tXU1lTX1RFU1RfQk9HVVNfRkFJTFVSRVN9IFBST1BFUlRJRVMgV0lMTF9GQUlMIE9OKQotICAgIEVORElGKCkKKyAgICBpZihLV1NZU19URVNUX0JPR1VTX0ZBSUxVUkVTKQorICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoJHtLV1NZU19URVNUX0JPR1VTX0ZBSUxVUkVTfSBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKKyAgICBlbmRpZigpCiAKLSAgRU5ESUYoKQotRU5ESUYoKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ1Rlc3RDdXN0b20uY21ha2UuaW4gYi9Tb3VyY2Uva3dzeXMvQ1Rlc3RDdXN0b20uY21ha2UuaW4KaW5kZXggNzYwMjIxYi4uYzA3ZjBmMyAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0NUZXN0Q3VzdG9tLmNtYWtlLmluCisrKyBiL1NvdXJjZS9rd3N5cy9DVGVzdEN1c3RvbS5jbWFrZS5pbgpAQCAtMTIsMyArMTIsNyBAQAogbGlzdChBUFBFTkQgQ1RFU1RfQ1VTVE9NX01FTUNIRUNLX0lHTk9SRQogICBrd3N5cy50ZXN0UHJvY2Vzcy0xMAogICApCisKK2xpc3QoQVBQRU5EIENURVNUX0NVU1RPTV9XQVJOSU5HX0VYQ0VQVElPTgorICAiTElDRU5TRSBXQVJOSU5HIgorICApCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ29tbWFuZExpbmVBcmd1bWVudHMuY3h4IGIvU291cmNlL2t3c3lzL0NvbW1hbmRMaW5lQXJndW1lbnRzLmN4eAppbmRleCAzZmQxOTU1Li5hMmVkODc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvQ29tbWFuZExpbmVBcmd1bWVudHMuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9Db21tYW5kTGluZUFyZ3VtZW50cy5jeHgKQEAgLTY2LDI2ICs2NiwyMSBAQAogY2xhc3MgQ29tbWFuZExpbmVBcmd1bWVudHNJbnRlcm5hbAogewogcHVibGljOgotICBDb21tYW5kTGluZUFyZ3VtZW50c0ludGVybmFsKCkKLSAgICA6IFVua25vd25Bcmd1bWVudENhbGxiYWNreyBudWxscHRyIH0KLSAgICAsIENsaWVudERhdGF7IG51bGxwdHIgfQotICAgICwgTGFzdEFyZ3VtZW50eyAwIH0KLSAgewotICB9CisgIENvbW1hbmRMaW5lQXJndW1lbnRzSW50ZXJuYWwoKSA9IGRlZmF1bHQ7CiAKLSAgdHlwZWRlZiBDb21tYW5kTGluZUFyZ3VtZW50c1ZlY3Rvck9mU3RyaW5ncyBWZWN0b3JPZlN0cmluZ3M7Ci0gIHR5cGVkZWYgQ29tbWFuZExpbmVBcmd1bWVudHNNYXBPZlN0cnVjcyBDYWxsYmFja3NNYXA7Ci0gIHR5cGVkZWYga3dzeXM6OlN0cmluZyBTdHJpbmc7Ci0gIHR5cGVkZWYgQ29tbWFuZExpbmVBcmd1bWVudHNTZXRPZlN0cmluZ3MgU2V0T2ZTdHJpbmdzOworICB1c2luZyBWZWN0b3JPZlN0cmluZ3MgPSBDb21tYW5kTGluZUFyZ3VtZW50c1ZlY3Rvck9mU3RyaW5nczsKKyAgdXNpbmcgQ2FsbGJhY2tzTWFwID0gQ29tbWFuZExpbmVBcmd1bWVudHNNYXBPZlN0cnVjczsKKyAgdXNpbmcgU3RyaW5nID0ga3dzeXM6OlN0cmluZzsKKyAgdXNpbmcgU2V0T2ZTdHJpbmdzID0gQ29tbWFuZExpbmVBcmd1bWVudHNTZXRPZlN0cmluZ3M7CiAKICAgVmVjdG9yT2ZTdHJpbmdzIEFyZ3Y7CiAgIFN0cmluZyBBcmd2MDsKICAgQ2FsbGJhY2tzTWFwIENhbGxiYWNrczsKIAotICBDb21tYW5kTGluZUFyZ3VtZW50czo6RXJyb3JDYWxsYmFja1R5cGUgVW5rbm93bkFyZ3VtZW50Q2FsbGJhY2s7Ci0gIHZvaWQqIENsaWVudERhdGE7CisgIENvbW1hbmRMaW5lQXJndW1lbnRzOjpFcnJvckNhbGxiYWNrVHlwZSBVbmtub3duQXJndW1lbnRDYWxsYmFja3sgbnVsbHB0ciB9OworICB2b2lkKiBDbGllbnREYXRheyBudWxscHRyIH07CiAKLSAgVmVjdG9yT2ZTdHJpbmdzOjpzaXplX3R5cGUgTGFzdEFyZ3VtZW50OworICBWZWN0b3JPZlN0cmluZ3M6OnNpemVfdHlwZSBMYXN0QXJndW1lbnR7IDAgfTsKIAogICBWZWN0b3JPZlN0cmluZ3MgVW51c2VkQXJndW1lbnRzOwogfTsKQEAgLTQyNCw4ICs0MTksNyBAQAogCiBjb25zdCBjaGFyKiBDb21tYW5kTGluZUFyZ3VtZW50czo6R2V0SGVscChjb25zdCBjaGFyKiBhcmcpCiB7Ci0gIENvbW1hbmRMaW5lQXJndW1lbnRzOjpJbnRlcm5hbDo6Q2FsbGJhY2tzTWFwOjppdGVyYXRvciBpdCA9Ci0gICAgdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChhcmcpOworICBhdXRvIGl0ID0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChhcmcpOwogICBpZiAoaXQgPT0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZW5kKCkpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQpAQCAtNDM0LDggKzQyOCw3IEBACiAgIC8vIG9uZSBwb2ludCB0byBpZiB0aGlzIG9uZSBpcyBwb2ludGluZyB0byBhbm90aGVyIGFyZ3VtZW50LgogICBDb21tYW5kTGluZUFyZ3VtZW50c0NhbGxiYWNrU3RydWN0dXJlKiBjcyA9ICYoaXQtPnNlY29uZCk7CiAgIGZvciAoOzspIHsKLSAgICBDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OkNhbGxiYWNrc01hcDo6aXRlcmF0b3IgaGl0ID0KLSAgICAgIHRoaXMtPkludGVybmFscy0+Q2FsbGJhY2tzLmZpbmQoY3MtPkhlbHApOworICAgIGF1dG8gaGl0ID0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChjcy0+SGVscCk7CiAgICAgaWYgKGhpdCA9PSB0aGlzLT5JbnRlcm5hbHMtPkNhbGxiYWNrcy5lbmQoKSkgewogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDcwLDkgKzQ2Myw4IEBACiAgIC8vIENvbGxhcHNlIGFsbCBhcmd1bWVudHMgaW50byB0aGUgbWFwIG9mIHZlY3RvcnMgb2YgYWxsIGFyZ3VtZW50cyB0aGF0IGRvCiAgIC8vIHRoZSBzYW1lIHRoaW5nLgogICBDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OkNhbGxiYWNrc01hcDo6aXRlcmF0b3IgaXQ7Ci0gIHR5cGVkZWYgc3RkOjptYXA8Q29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgQ29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTZXRPZlN0cmluZ3M+Ci0gICAgTWFwQXJnczsKKyAgdXNpbmcgTWFwQXJncyA9IHN0ZDo6bWFwPENvbW1hbmRMaW5lQXJndW1lbnRzOjpJbnRlcm5hbDo6U3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTZXRPZlN0cmluZ3M+OwogICBNYXBBcmdzIG1wOwogICBNYXBBcmdzOjppdGVyYXRvciBtcGl0LCBzbXBpdDsKICAgZm9yIChpdCA9IHRoaXMtPkludGVybmFscy0+Q2FsbGJhY2tzLmJlZ2luKCk7CkBAIC03MDksNyArNzAxLDcgQEAKICAgaWYgKGNzLT5DYWxsYmFjaykgewogICAgIGlmICghY3MtPkNhbGxiYWNrKGNzLT5Bcmd1bWVudCwgdmFsdWUsIGNzLT5DYWxsRGF0YSkpIHsKICAgICAgIHRoaXMtPkludGVybmFscy0+TGFzdEFyZ3VtZW50LS07Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KICAgQ29tbWFuZExpbmVBcmd1bWVudHNfREVCVUcoIlNldCBhcmd1bWVudDogIiA8PCBjcy0+QXJndW1lbnQgPDwgIiB0byAiCkBAIC03NTksMTAgKzc1MSwxMCBAQAogICAgICAgICBzdGQ6OmNlcnIgPDwgIkdvdCB1bmtub3duIHZhcmlhYmxlIHR5cGU6IFwiIiA8PCBjcy0+VmFyaWFibGVUeXBlCiAgICAgICAgICAgICAgICAgICA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgdGhpcy0+SW50ZXJuYWxzLT5MYXN0QXJndW1lbnQtLTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KLSAgcmV0dXJuIDE7CisgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuY3h4IGIvU291cmNlL2t3c3lzL0RpcmVjdG9yeS5jeHgKaW5kZXggZTM3OTE4Mi4uZDY0MDk0OCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0RpcmVjdG9yeS5jeHgKKysrIGIvU291cmNlL2t3c3lzL0RpcmVjdG9yeS5jeHgKQEAgLTM1LDYgKzM1LDE4IEBACiAgIHRoaXMtPkludGVybmFsID0gbmV3IERpcmVjdG9yeUludGVybmFsczsKIH0KIAorRGlyZWN0b3J5OjpEaXJlY3RvcnkoRGlyZWN0b3J5JiYgb3RoZXIpCit7CisgIHRoaXMtPkludGVybmFsID0gb3RoZXIuSW50ZXJuYWw7CisgIG90aGVyLkludGVybmFsID0gbnVsbHB0cjsKK30KKworRGlyZWN0b3J5JiBEaXJlY3Rvcnk6Om9wZXJhdG9yPShEaXJlY3RvcnkmJiBvdGhlcikKK3sKKyAgc3RkOjpzd2FwKHRoaXMtPkludGVybmFsLCBvdGhlci5JbnRlcm5hbCk7CisgIHJldHVybiAqdGhpczsKK30KKwogRGlyZWN0b3J5Ojp+RGlyZWN0b3J5KCkKIHsKICAgZGVsZXRlIHRoaXMtPkludGVybmFsOwpAQCAtMjA0LDE1ICsyMTYsMTUgQEAKICAgRElSKiBkaXIgPSBvcGVuZGlyKG5hbWUuY19zdHIoKSk7CiAKICAgaWYgKCFkaXIpIHsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBmb3IgKGt3c3lzX2RpcmVudCogZCA9IHJlYWRkaXIoZGlyKTsgZDsgZCA9IHJlYWRkaXIoZGlyKSkgewotICAgIHRoaXMtPkludGVybmFsLT5GaWxlcy5wdXNoX2JhY2soZC0+ZF9uYW1lKTsKKyAgICB0aGlzLT5JbnRlcm5hbC0+RmlsZXMuZW1wbGFjZV9iYWNrKGQtPmRfbmFtZSk7CiAgIH0KICAgdGhpcy0+SW50ZXJuYWwtPlBhdGggPSBuYW1lOwogICBjbG9zZWRpcihkaXIpOwotICByZXR1cm4gMTsKKyAgcmV0dXJuIHRydWU7CiB9CiAKIHVuc2lnbmVkIGxvbmcgRGlyZWN0b3J5OjpHZXROdW1iZXJPZkZpbGVzSW5EaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5Lmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuaHh4LmluCmluZGV4IGFkOGM1MWIuLjliMGY0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuaHh4LmluCkBAIC0yMyw2ICsyMywxMSBAQAogewogcHVibGljOgogICBEaXJlY3RvcnkoKTsKKyAgRGlyZWN0b3J5KERpcmVjdG9yeSYmIG90aGVyKTsKKyAgRGlyZWN0b3J5KGNvbnN0IERpcmVjdG9yeSYpID0gZGVsZXRlOworICBEaXJlY3RvcnkmIG9wZXJhdG9yPShjb25zdCBEaXJlY3RvcnkmKSA9IGRlbGV0ZTsKKyAgRGlyZWN0b3J5JiBvcGVyYXRvcj0oRGlyZWN0b3J5JiYgb3RoZXIpOworICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGlyZWN0b3J5JikgPSBkZWxldGU7CiAgIH5EaXJlY3RvcnkoKTsKIAogICAvKioKQEAgLTYyLDEwICs2Nyw3IEBACiBwcml2YXRlOgogICAvLyBQcml2YXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCiAgIERpcmVjdG9yeUludGVybmFscyogSW50ZXJuYWw7Ci0KLSAgRGlyZWN0b3J5KGNvbnN0IERpcmVjdG9yeSYpOyAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgRGlyZWN0b3J5Jik7IC8vIE5vdCBpbXBsZW1lbnRlZC4KLX07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBDbGFzczogRGlyZWN0b3J5Cit9OyAvLyBFbmQgQ2xhc3M6IERpcmVjdG9yeQogCiB9IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRW5jb2RpbmcuaHh4LmluIGIvU291cmNlL2t3c3lzL0VuY29kaW5nLmh4eC5pbgppbmRleCBiMDY3NTIxLi43NWEyZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRW5jb2RpbmcuaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9FbmNvZGluZy5oeHguaW4KQEAgLTY4LDYgKzY4LDggQEAKICAgICogYWJzb2x1dGUgcGF0aHMgd2l0aCBXaW5kb3dzLXN0eWxlIGJhY2tzbGFzaGVzLgogICAgKiovCiAgIHN0YXRpYyBzdGQ6OndzdHJpbmcgVG9XaW5kb3dzRXh0ZW5kZWRQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0Jik7CisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgVG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGNvbnN0IGNoYXIqIHNvdXJjZSk7CisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgVG9XaW5kb3dzRXh0ZW5kZWRQYXRoKHN0ZDo6d3N0cmluZyBjb25zdCYgd3NvdXJjZSk7CiAjICBlbmRpZgogCiAjZW5kaWYgLy8gQEtXU1lTX05BTUVTUEFDRUBfU1RMX0hBU19XU1RSSU5HCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRW5jb2RpbmdDWFguY3h4IGIvU291cmNlL2t3c3lzL0VuY29kaW5nQ1hYLmN4eAppbmRleCA0NTkzYzkyLi41Y2FkOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRW5jb2RpbmdDWFguY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9FbmNvZGluZ0NYWC5jeHgKQEAgLTIyMSw4ICsyMjEsMTggQEAKIC8vIENvbnZlcnQgbG9jYWwgcGF0aHMgdG8gVU5DIHN0eWxlIHBhdGhzCiBzdGQ6OndzdHJpbmcgRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgc291cmNlKQogewotICBzdGQ6OndzdHJpbmcgd3NvdXJjZSA9IEVuY29kaW5nOjpUb1dpZGUoc291cmNlKTsKKyAgcmV0dXJuIFRvV2luZG93c0V4dGVuZGVkUGF0aChUb1dpZGUoc291cmNlKSk7Cit9CiAKKy8vIENvbnZlcnQgbG9jYWwgcGF0aHMgdG8gVU5DIHN0eWxlIHBhdGhzCitzdGQ6OndzdHJpbmcgRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChjb25zdCBjaGFyKiBzb3VyY2UpCit7CisgIHJldHVybiBUb1dpbmRvd3NFeHRlbmRlZFBhdGgoVG9XaWRlKHNvdXJjZSkpOworfQorCisvLyBDb252ZXJ0IGxvY2FsIHBhdGhzIHRvIFVOQyBzdHlsZSBwYXRocworc3RkOjp3c3RyaW5nIEVuY29kaW5nOjpUb1dpbmRvd3NFeHRlbmRlZFBhdGgoc3RkOjp3c3RyaW5nIGNvbnN0JiB3c291cmNlKQorewogICAvLyBSZXNvbHZlIGFueSByZWxhdGl2ZSBwYXRocwogICBEV09SRCB3ZnVsbF9sZW47CiAKQEAgLTI2OSw3ICsyNzksNyBAQAogCiAgIC8vIElmIHRoaXMgY2FzZSBoYXMgYmVlbiByZWFjaGVkLCB0aGVuIHRoZSBwYXRoIGlzIGludmFsaWQuICBMZWF2ZSBpdAogICAvLyB1bmNoYW5nZWQKLSAgcmV0dXJuIEVuY29kaW5nOjpUb1dpZGUoc291cmNlKTsKKyAgcmV0dXJuIHdzb3VyY2U7CiB9CiAjICBlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRXh0cmFUZXN0LmNtYWtlLmluIGIvU291cmNlL2t3c3lzL0V4dHJhVGVzdC5jbWFrZS5pbgppbmRleCBlOGMwYTFjLi40Y2VjOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRXh0cmFUZXN0LmNtYWtlLmluCisrKyBiL1NvdXJjZS9rd3N5cy9FeHRyYVRlc3QuY21ha2UuaW4KQEAgLTEgKzEgQEAKLU1FU1NBR0UoIioqKiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IG1lc3NhZ2UgaW5zaWRlIGEgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGluIERhcnRUZXN0ZmlsZS50eHQgKioqIikKK21lc3NhZ2UoIioqKiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IG1lc3NhZ2UgaW5zaWRlIGEgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGluIERhcnRUZXN0ZmlsZS50eHQgKioqIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9GU3RyZWFtLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9GU3RyZWFtLmh4eC5pbgppbmRleCBkNzliYmRmLi5iNDI0NDg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRlN0cmVhbS5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL0ZTdHJlYW0uaHh4LmluCkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgYm9vbCBfb3BlbihjaGFyIGNvbnN0KiBmaWxlX25hbWUsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCiAgIHsKLSAgICBpZiAoaXNfb3BlbigpIHx8IGZpbGVfKSB7CisgICAgaWYgKF9pc19vcGVuKCkgfHwgZmlsZV8pIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjICBpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgIH0KIAotICBib29sIGlzX29wZW4oKQorICBib29sIF9pc19vcGVuKCkKICAgewogICAgIGlmICghYnVmXykgewogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgcmV0dXJuIGJ1Zl8tPmlzX29wZW4oKTsKICAgfQogCi0gIGJvb2wgaXNfb3BlbigpIGNvbnN0CisgIGJvb2wgX2lzX29wZW4oKSBjb25zdAogICB7CiAgICAgaWYgKCFidWZfKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTgsOSArMTk4LDExIEBACiAgICAgdGhpcy0+X3NldF9zdGF0ZSh0aGlzLT5fb3BlbihmaWxlX25hbWUsIG1vZGUpLCB0aGlzLCB0aGlzKTsKICAgfQogCisgIGJvb2wgaXNfb3BlbigpIHsgcmV0dXJuIHRoaXMtPl9pc19vcGVuKCk7IH0KKwogICB2b2lkIGNsb3NlKCkgeyB0aGlzLT5fc2V0X3N0YXRlKHRoaXMtPl9jbG9zZSgpLCB0aGlzLCB0aGlzKTsgfQogCi0gIHVzaW5nIGJhc2ljX2VmaWxlYnVmPENoYXJUeXBlLCBUcmFpdHM+Ojppc19vcGVuOworICB1c2luZyBiYXNpY19lZmlsZWJ1ZjxDaGFyVHlwZSwgVHJhaXRzPjo6X2lzX29wZW47CiAKICAgaW50ZXJuYWxfYnVmZmVyX3R5cGUqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+YnVmXzsgfQogCkBAIC0yMTIsNyArMjE0LDcgQEAKICAgOiBwdWJsaWMgc3RkOjpiYXNpY19vc3RyZWFtPENoYXJUeXBlLCBUcmFpdHM+CiAgICwgcHVibGljIGJhc2ljX2VmaWxlYnVmPENoYXJUeXBlLCBUcmFpdHM+CiB7Ci0gIHVzaW5nIGJhc2ljX2VmaWxlYnVmPENoYXJUeXBlLCBUcmFpdHM+Ojppc19vcGVuOworICB1c2luZyBiYXNpY19lZmlsZWJ1ZjxDaGFyVHlwZSwgVHJhaXRzPjo6X2lzX29wZW47CiAKIHB1YmxpYzoKICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNpY19lZmlsZWJ1ZjxDaGFyVHlwZSwgVHJhaXRzPjo6aW50ZXJuYWxfYnVmZmVyX3R5cGUKQEAgLTI0Miw2ICsyNDQsOCBAQAogCiAgIHZvaWQgY2xvc2UoKSB7IHRoaXMtPl9zZXRfc3RhdGUodGhpcy0+X2Nsb3NlKCksIHRoaXMsIHRoaXMpOyB9CiAKKyAgYm9vbCBpc19vcGVuKCkgeyByZXR1cm4gdGhpcy0+X2lzX29wZW4oKTsgfQorCiAgIGludGVybmFsX2J1ZmZlcl90eXBlKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmJ1Zl87IH0KIAogICB+YmFzaWNfb2ZzdHJlYW0oKSBAS1dTWVNfTkFNRVNQQUNFQF9GU3RyZWFtX05PRVhDRVBUIHsgY2xvc2UoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0dsb2IuY3h4IGIvU291cmNlL2t3c3lzL0dsb2IuY3h4CmluZGV4IDM0YmIwZDAuLjhlMzBmOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9HbG9iLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvR2xvYi5jeHgKQEAgLTM4NSwxMCArMzg1LDkgQEAKICAgfQogCiAgIGlmIChza2lwID4gMCkgewotICAgIGV4cHIgPSBleHByLnN1YnN0cihza2lwKTsKKyAgICBleHByLmVyYXNlKDAsIHNraXApOwogICB9CiAKLSAgY2V4cHIgPSAiIjsKICAgZm9yIChjYyA9IDA7IGNjIDwgZXhwci5zaXplKCk7IGNjKyspIHsKICAgICBpbnQgY2ggPSBleHByW2NjXTsKICAgICBpZiAoY2ggPT0gJy8nKSB7CkBAIC00MTUsOCArNDE0LDcgQEAKIAogdm9pZCBHbG9iOjpBZGRFeHByZXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHByKQogewotICB0aGlzLT5JbnRlcm5hbHMtPkV4cHJlc3Npb25zLnB1c2hfYmFjaygKLSAgICBrd3N5czo6UmVndWxhckV4cHJlc3Npb24odGhpcy0+UGF0dGVyblRvUmVnZXgoZXhwcikpKTsKKyAgdGhpcy0+SW50ZXJuYWxzLT5FeHByZXNzaW9ucy5lbXBsYWNlX2JhY2sodGhpcy0+UGF0dGVyblRvUmVnZXgoZXhwcikpOwogfQogCiB2b2lkIEdsb2I6OlNldFJlbGF0aXZlKGNvbnN0IGNoYXIqIGRpcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzLmguaW4gYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzcy5oLmluCmluZGV4IDczZWE5ZGIuLjlmMjE2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzLmguaW4KKysrIGIvU291cmNlL2t3c3lzL1Byb2Nlc3MuaC5pbgpAQCAtMTgwLDggKzE4MCw4IEBACiAgKiB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgd2lsbCBiZSBjbG9zZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGFuZCB0aGUKICAqIHJlYWQgZW5kIHdpbGwgYmUgY2xvc2VkIGluIHRoZSBjaGlsZCBwcm9jZXNzLgogICovCi1rd3N5c0VYUE9SVCB2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwaXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NfUGlwZV9IYW5kbGUgcFsyXSk7Citrd3N5c0VYUE9SVCB2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKAorICBrd3N5c1Byb2Nlc3MqIGNwLCBpbnQgcGlwZSwgY29uc3Qga3dzeXNQcm9jZXNzX1BpcGVfSGFuZGxlIHBbMl0pOwogCiAvKioKICAqIEdldC9TZXQgYSBwb3NzaWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpb24uICBQb3NzaWJsZSBvcHRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzVU5JWC5jIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMKaW5kZXggZjY1NjkwYi4uNWZkZTBiMCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMKKysrIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMKQEAgLTE1MiwxMCArMTUyLDExIEBACiBzdGF0aWMgdm9pZCBrd3N5c1Byb2Nlc3NEZXN0cm95KGt3c3lzUHJvY2VzcyogY3ApOwogc3RhdGljIGludCBrd3N5c1Byb2Nlc3NTZXR1cE91dHB1dFBpcGVGaWxlKGludCogcCwgY29uc3QgY2hhciogbmFtZSk7CiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc1NldHVwT3V0cHV0UGlwZU5hdGl2ZShpbnQqIHAsIGludCBkZXNbMl0pOwotc3RhdGljIGludCBrd3N5c1Byb2Nlc3NHZXRUaW1lb3V0VGltZShrd3N5c1Byb2Nlc3MqIGNwLCBkb3VibGUqIHVzZXJUaW1lb3V0LAorc3RhdGljIGludCBrd3N5c1Byb2Nlc3NHZXRUaW1lb3V0VGltZShrd3N5c1Byb2Nlc3MqIGNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIHVzZXJUaW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NUaW1lKiB0aW1lb3V0VGltZSk7CiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRMZWZ0KGt3c3lzUHJvY2Vzc1RpbWUqIHRpbWVvdXRUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIHVzZXJUaW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIHVzZXJUaW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NUaW1lTmF0aXZlKiB0aW1lb3V0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgemVyb0lzRXhwaXJlZCk7CiBzdGF0aWMga3dzeXNQcm9jZXNzVGltZSBrd3N5c1Byb2Nlc3NUaW1lR2V0Q3VycmVudCh2b2lkKTsKQEAgLTU3MSw3ICs1NzIsNyBAQAogICB9CiB9CiAKLXZvaWQga3dzeXNQcm9jZXNzX1NldFBpcGVOYXRpdmUoa3dzeXNQcm9jZXNzKiBjcCwgaW50IHByUGlwZSwgaW50IHBbMl0pCit2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwclBpcGUsIGNvbnN0IGludCBwWzJdKQogewogICBpbnQqIHBQaXBlTmF0aXZlID0gMDsKIApAQCAtMTk1OSw3ICsxOTYwLDggQEAKIAogLyogR2V0IHRoZSB0aW1lIGF0IHdoaWNoIGVpdGhlciB0aGUgcHJvY2VzcyBvciB1c2VyIHRpbWVvdXQgd2lsbAogICAgZXhwaXJlLiAgUmV0dXJucyAxIGlmIHRoZSB1c2VyIHRpbWVvdXQgaXMgZmlyc3QsIGFuZCAwIG90aGVyd2lzZS4gICovCi1zdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRUaW1lKGt3c3lzUHJvY2VzcyogY3AsIGRvdWJsZSogdXNlclRpbWVvdXQsCitzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRUaW1lKGt3c3lzUHJvY2VzcyogY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSogdXNlclRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc1RpbWUqIHRpbWVvdXRUaW1lKQogewogICAvKiBUaGUgZmlyc3QgdGltZSB0aGlzIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHRpbWUgYXQKQEAgLTE5OTEsNyArMTk5Myw3IEBACiAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aW1lIGJlZm9yZSB0aGUgZ2l2ZW4gdGltZW91dCB0aW1lIGFycml2ZXMuCiAgICBSZXR1cm5zIDEgaWYgdGhlIHRpbWUgaGFzIGFscmVhZHkgYXJyaXZlZCwgYW5kIDAgb3RoZXJ3aXNlLiAgKi8KIHN0YXRpYyBpbnQga3dzeXNQcm9jZXNzR2V0VGltZW91dExlZnQoa3dzeXNQcm9jZXNzVGltZSogdGltZW91dFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogdXNlclRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSogdXNlclRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc1RpbWVOYXRpdmUqIHRpbWVvdXRMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB6ZXJvSXNFeHBpcmVkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1Byb2Nlc3NXaW4zMi5jIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NXaW4zMi5jCmluZGV4IDY4YzUyMTguLjU2YmJkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzV2luMzIuYworKysgYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzc1dpbjMyLmMKQEAgLTc2MSw3ICs3NjEsNyBAQAogICB9CiB9CiAKLXZvaWQga3dzeXNQcm9jZXNzX1NldFBpcGVOYXRpdmUoa3dzeXNQcm9jZXNzKiBjcCwgaW50IHBpcGUsIEhBTkRMRSBwWzJdKQordm9pZCBrd3N5c1Byb2Nlc3NfU2V0UGlwZU5hdGl2ZShrd3N5c1Byb2Nlc3MqIGNwLCBpbnQgcGlwZSwgY29uc3QgSEFORExFIHBbMl0pCiB7CiAgIEhBTkRMRSogcFBpcGVOYXRpdmUgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uaHh4LmluIGIvU291cmNlL2t3c3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eC5pbgppbmRleCBkZjdlYjQ1Li5kMTFkYjg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHguaW4KQEAgLTY2LDE2ICs2NiwyNyBAQAogICBjb25zdCBjaGFyKiBzZWFyY2hzdHJpbmc7CiB9OwogCisjaWZkZWYgX01TQ19WRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBpZiBfTVNDX1ZFUiA8IDE5MDAKKyMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQzNTEpIC8qIG5ldyBiZWhhdmlvciAqLworIyAgZW5kaWYKKyNlbmRpZgorCiAvKioKICAqIFxicmllZiBDcmVhdGVzIGFuIGludmFsaWQgbWF0Y2ggb2JqZWN0CiAgKi8KIGlubGluZSBSZWd1bGFyRXhwcmVzc2lvbk1hdGNoOjpSZWd1bGFyRXhwcmVzc2lvbk1hdGNoKCkKKyAgOiBzdGFydHB7fQorICAsIGVuZHB7fQorICAsIHNlYXJjaHN0cmluZ3t9CiB7Ci0gIHN0YXJ0cFswXSA9IG51bGxwdHI7Ci0gIGVuZHBbMF0gPSBudWxscHRyOwotICBzZWFyY2hzdHJpbmcgPSBudWxscHRyOwogfQogCisjaWZkZWYgX01TQ19WRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorCiAvKioKICAqIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hdGNoIHBvaW50ZXJzIGFyZSB2YWxpZAogICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvU3lzdGVtLmMgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtLmMKaW5kZXggZDQzY2M2Zi4uZGJmZDJmZCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbS5jCisrKyBiL1NvdXJjZS9rd3N5cy9TeXN0ZW0uYwpAQCAtMjIsNyArMjIsNyBAQAogdHlwZWRlZiBpbnQga3dzeXNTeXN0ZW1fcHRyZGlmZl90OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQga3dzeXNTeXN0ZW1fX0FwcGVuZEJ5dGUoY2hhciogbG9jYWwsIGNoYXIqKiBiZWdpbiwgY2hhcioqIGVuZCwKK3N0YXRpYyBpbnQga3dzeXNTeXN0ZW1fX0FwcGVuZEJ5dGUoY29uc3QgY2hhciogbG9jYWwsIGNoYXIqKiBiZWdpbiwgY2hhcioqIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzaXplLCBjaGFyIGMpCiB7CiAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY2hhcmFjdGVyLiAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5jeHggYi9Tb3VyY2Uva3dzeXMvU3lzdGVtSW5mb3JtYXRpb24uY3h4CmluZGV4IDZlYzZlNDguLjk1YjA2ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5jeHgKKysrIGIvU291cmNlL2t3c3lzL1N5c3RlbUluZm9ybWF0aW9uLmN4eApAQCAtMTMyLDcgKzEzMiw3IEBACiAjICAgIGVuZGlmCiAjICBlbmRpZgogIyAgaWYgZGVmaW5lZChLV1NZU19DWFhfSEFTX1JMSU1JVDY0KQotdHlwZWRlZiBzdHJ1Y3QgcmxpbWl0NjQgUmVzb3VyY2VMaW1pdFR5cGU7Cit1c2luZyBSZXNvdXJjZUxpbWl0VHlwZSA9IHN0cnVjdCBybGltaXQ2NDsKICMgICAgZGVmaW5lIEdldFJlc291cmNlTGltaXQgZ2V0cmxpbWl0NjQKICMgIGVsc2UKIHR5cGVkZWYgc3RydWN0IHJsaW1pdCBSZXNvdXJjZUxpbWl0VHlwZTsKQEAgLTMwMywzNCArMzAzLDM0IEBACiB9CiAKIGV4dGVybiAiQyIgewotdHlwZWRlZiB2b2lkICgqU2lnQWN0aW9uKShpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKK3VzaW5nIFNpZ0FjdGlvbiA9IHZvaWQgKCopKGludCwgc2lnaW5mb190Kiwgdm9pZCopOwogfQogCiAvLyAgRGVmaW5lIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb24gY2xhc3MKLXR5cGVkZWYgdm9pZCAoKkRFTEFZX0ZVTkMpKHVuc2lnbmVkIGludCB1aU1TKTsKK3VzaW5nIERFTEFZX0ZVTkMgPSB2b2lkICgqKSh1bnNpZ25lZCBpbnQpOwogCiBjbGFzcyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uCiB7CiBwdWJsaWM6Ci0gIHR5cGVkZWYgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIExvbmdMb25nOworICB1c2luZyBMb25nTG9uZyA9IFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZzsKICAgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbigpOwotICB+U3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbigpOworICB+U3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbigpID0gZGVmYXVsdDsKIAotICBjb25zdCBjaGFyKiBHZXRWZW5kb3JTdHJpbmcoKTsKKyAgY29uc3QgY2hhciogR2V0VmVuZG9yU3RyaW5nKCkgY29uc3Q7CiAgIGNvbnN0IGNoYXIqIEdldFZlbmRvcklEKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldFR5cGVJRCgpOwotICBzdGQ6OnN0cmluZyBHZXRGYW1pbHlJRCgpOwotICBzdGQ6OnN0cmluZyBHZXRNb2RlbElEKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldE1vZGVsTmFtZSgpOwotICBzdGQ6OnN0cmluZyBHZXRTdGVwcGluZ0NvZGUoKTsKLSAgY29uc3QgY2hhciogR2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCk7Ci0gIGNvbnN0IGNoYXIqIEdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpOwotICBpbnQgR2V0UHJvY2Vzc29yQ2FjaGVTaXplKCk7Ci0gIHVuc2lnbmVkIGludCBHZXRMb2dpY2FsUHJvY2Vzc29yc1BlclBoeXNpY2FsKCk7Ci0gIGZsb2F0IEdldFByb2Nlc3NvckNsb2NrRnJlcXVlbmN5KCk7Ci0gIGludCBHZXRQcm9jZXNzb3JBUElDSUQoKTsKLSAgaW50IEdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQpOwotICBib29sIERvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCk7CisgIHN0ZDo6c3RyaW5nIEdldFR5cGVJRCgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRGYW1pbHlJRCgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRNb2RlbElEKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldE1vZGVsTmFtZSgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRTdGVwcGluZ0NvZGUoKSBjb25zdDsKKyAgY29uc3QgY2hhciogR2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCkgY29uc3Q7CisgIGNvbnN0IGNoYXIqIEdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpIGNvbnN0OworICBpbnQgR2V0UHJvY2Vzc29yQ2FjaGVTaXplKCkgY29uc3Q7CisgIHVuc2lnbmVkIGludCBHZXRMb2dpY2FsUHJvY2Vzc29yc1BlclBoeXNpY2FsKCkgY29uc3Q7CisgIGZsb2F0IEdldFByb2Nlc3NvckNsb2NrRnJlcXVlbmN5KCkgY29uc3Q7CisgIGludCBHZXRQcm9jZXNzb3JBUElDSUQoKSBjb25zdDsKKyAgaW50IEdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQpIGNvbnN0OworICBib29sIERvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCkgY29uc3Q7CiAKICAgY29uc3QgY2hhciogR2V0T1NOYW1lKCk7CiAgIGNvbnN0IGNoYXIqIEdldEhvc3RuYW1lKCk7CkBAIC0zMzksMjQgKzMzOSwyNCBAQAogICBjb25zdCBjaGFyKiBHZXRPU1ZlcnNpb24oKTsKICAgY29uc3QgY2hhciogR2V0T1NQbGF0Zm9ybSgpOwogCi0gIGJvb2wgSXM2NEJpdHMoKTsKKyAgYm9vbCBJczY0Qml0cygpIGNvbnN0OwogCi0gIHVuc2lnbmVkIGludCBHZXROdW1iZXJPZkxvZ2ljYWxDUFUoKTsgLy8gcGVyIHBoeXNpY2FsIGNwdQotICB1bnNpZ25lZCBpbnQgR2V0TnVtYmVyT2ZQaHlzaWNhbENQVSgpOworICB1bnNpZ25lZCBpbnQgR2V0TnVtYmVyT2ZMb2dpY2FsQ1BVKCkgY29uc3Q7IC8vIHBlciBwaHlzaWNhbCBjcHUKKyAgdW5zaWduZWQgaW50IEdldE51bWJlck9mUGh5c2ljYWxDUFUoKSBjb25zdDsKIAogICBib29sIERvZXNDUFVTdXBwb3J0Q1BVSUQoKTsKIAogICAvLyBSZXRyaWV2ZSBtZW1vcnkgaW5mb3JtYXRpb24gaW4gTWlCLgotICBzaXplX3QgR2V0VG90YWxWaXJ0dWFsTWVtb3J5KCk7Ci0gIHNpemVfdCBHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCk7Ci0gIHNpemVfdCBHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCk7Ci0gIHNpemVfdCBHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpOworICBzaXplX3QgR2V0VG90YWxWaXJ0dWFsTWVtb3J5KCkgY29uc3Q7CisgIHNpemVfdCBHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCkgY29uc3Q7CisgIHNpemVfdCBHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCkgY29uc3Q7CisgIHNpemVfdCBHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpIGNvbnN0OwogCiAgIExvbmdMb25nIEdldFByb2Nlc3NJZCgpOwogCiAgIC8vIFJldHJpZXZlIG1lbW9yeSBpbmZvcm1hdGlvbiBpbiBLaUIuCiAgIExvbmdMb25nIEdldEhvc3RNZW1vcnlUb3RhbCgpOwotICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGNvbnN0IGNoYXIqIGVudlZhck5hbWUpOworICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGNvbnN0IGNoYXIqIGhvc3RMaW1pdEVudlZhck5hbWUpOwogICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5VXNlZCgpOwogCiAgIExvbmdMb25nIEdldFByb2NNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSwKQEAgLTM3Nyw2MCArMzc3LDEwMyBAQAogICB2b2lkIFJ1bk1lbW9yeUNoZWNrKCk7CiAKIHB1YmxpYzoKLSAgdHlwZWRlZiBzdHJ1Y3QgdGFnSUQKKyAgdXNpbmcgSUQgPSBzdHJ1Y3QgdGFnSUQKKwogICB7CisKICAgICBpbnQgVHlwZTsKKwogICAgIGludCBGYW1pbHk7CisKICAgICBpbnQgTW9kZWw7CisKICAgICBpbnQgUmV2aXNpb247CisKICAgICBpbnQgRXh0ZW5kZWRGYW1pbHk7CisKICAgICBpbnQgRXh0ZW5kZWRNb2RlbDsKKwogICAgIHN0ZDo6c3RyaW5nIFByb2Nlc3Nvck5hbWU7CisKICAgICBzdGQ6OnN0cmluZyBWZW5kb3I7CisKICAgICBzdGQ6OnN0cmluZyBTZXJpYWxOdW1iZXI7CisKICAgICBzdGQ6OnN0cmluZyBNb2RlbE5hbWU7Ci0gIH0gSUQ7CisgIH07CiAKLSAgdHlwZWRlZiBzdHJ1Y3QgdGFnQ1BVUG93ZXJNYW5hZ2VtZW50CisgIHVzaW5nIENQVVBvd2VyTWFuYWdlbWVudCA9IHN0cnVjdCB0YWdDUFVQb3dlck1hbmFnZW1lbnQKKwogICB7CisKICAgICBib29sIEhhc1ZvbHRhZ2VJRDsKKwogICAgIGJvb2wgSGFzRnJlcXVlbmN5SUQ7CisKICAgICBib29sIEhhc1RlbXBTZW5zZURpb2RlOwotICB9IENQVVBvd2VyTWFuYWdlbWVudDsKKyAgfTsKIAotICB0eXBlZGVmIHN0cnVjdCB0YWdDUFVFeHRlbmRlZEZlYXR1cmVzCisgIHVzaW5nIENQVUV4dGVuZGVkRmVhdHVyZXMgPSBzdHJ1Y3QgdGFnQ1BVRXh0ZW5kZWRGZWF0dXJlcworCiAgIHsKKwogICAgIGJvb2wgSGFzM0ROb3c7Ci0gICAgYm9vbCBIYXMzRE5vd1BsdXM7Ci0gICAgYm9vbCBTdXBwb3J0c01QOwotICAgIGJvb2wgSGFzTU1YUGx1czsKLSAgICBib29sIEhhc1NTRU1NWDsKLSAgICB1bnNpZ25lZCBpbnQgTG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbDsKLSAgICBpbnQgQVBJQ19JRDsKLSAgICBDUFVQb3dlck1hbmFnZW1lbnQgUG93ZXJNYW5hZ2VtZW50OwotICB9IENQVUV4dGVuZGVkRmVhdHVyZXM7CiAKLSAgdHlwZWRlZiBzdHJ1Y3QgQ1BVdGFnRmVhdHVyZXMKKyAgICBib29sIEhhczNETm93UGx1czsKKworICAgIGJvb2wgU3VwcG9ydHNNUDsKKworICAgIGJvb2wgSGFzTU1YUGx1czsKKworICAgIGJvb2wgSGFzU1NFTU1YOworCisgICAgdW5zaWduZWQgaW50IExvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWw7CisKKyAgICBpbnQgQVBJQ19JRDsKKworICAgIENQVVBvd2VyTWFuYWdlbWVudCBQb3dlck1hbmFnZW1lbnQ7CisgIH07CisKKyAgdXNpbmcgQ1BVRmVhdHVyZXMgPSBzdHJ1Y3QgQ1BVdGFnRmVhdHVyZXMKKwogICB7CisKICAgICBib29sIEhhc0ZQVTsKKwogICAgIGJvb2wgSGFzVFNDOworCiAgICAgYm9vbCBIYXNNTVg7CisKICAgICBib29sIEhhc1NTRTsKKwogICAgIGJvb2wgSGFzU1NFRlA7CisKICAgICBib29sIEhhc1NTRTI7CisKICAgICBib29sIEhhc0lBNjQ7CisKICAgICBib29sIEhhc0FQSUM7CisKICAgICBib29sIEhhc0NNT1Y7CisKICAgICBib29sIEhhc01UUlI7CisKICAgICBib29sIEhhc0FDUEk7CisKICAgICBib29sIEhhc1NlcmlhbDsKKwogICAgIGJvb2wgSGFzVGhlcm1hbDsKKwogICAgIGludCBDUFVTcGVlZDsKKwogICAgIGludCBMMUNhY2hlU2l6ZTsKKwogICAgIGludCBMMkNhY2hlU2l6ZTsKKwogICAgIGludCBMM0NhY2hlU2l6ZTsKKwogICAgIENQVUV4dGVuZGVkRmVhdHVyZXMgRXh0ZW5kZWRGZWF0dXJlczsKLSAgfSBDUFVGZWF0dXJlczsKKyAgfTsKIAogICBlbnVtIE1hbnVmYWN0dXJlcgogICB7CkBAIC00NzYsNyArNTE5LDcgQEAKIAogICB2b2lkIENQVUNvdW50V2luZG93cygpOyAgICAvLyBGb3Igd2luZG93cwogICB1bnNpZ25lZCBjaGFyIEdldEFQSUNJZCgpOyAvLyBGb3Igd2luZG93cwotICBib29sIElzU01UU3VwcG9ydGVkKCk7CisgIGJvb2wgSXNTTVRTdXBwb3J0ZWQoKSBjb25zdDsKICAgc3RhdGljIExvbmdMb25nIEdldEN5Y2xlc0RpZmZlcmVuY2UoREVMQVlfRlVOQywgdW5zaWduZWQgaW50KTsgLy8gRm9yIHdpbmRvd3MKIAogICAvLyBGb3IgTGludXggYW5kIEN5Z3dpbiwgL3Byb2MvY3B1aW5mbyBmb3JtYXRzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQKQEAgLTg4NSw3ICs5MjgsNyBAQAogICAgICAgICAqcEJ1ZiA9ICdcMCc7CiAgICAgICBwQnVmICs9IDE7CiAgICAgfQotICAgIGxpbmVzLnB1c2hfYmFjayhidWYpOworICAgIGxpbmVzLmVtcGxhY2VfYmFjayhidWYpOwogICAgICsrblJlYWQ7CiAgIH0KICAgaWYgKGZlcnJvcihmaWxlKSkgewpAQCAtODk5LDcgKzk0Miw3IEBACiBpbnQgTG9hZExpbmVzKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGxpbmVzKQogewogICBGSUxFKiBmaWxlID0gZm9wZW4oZmlsZU5hbWUsICJyIik7Ci0gIGlmIChmaWxlID09IDApIHsKKyAgaWYgKGZpbGUgPT0gbnVsbHB0cikgewogICAgIHJldHVybiAwOwogICB9CiAgIGludCBuUmVhZCA9IExvYWRMaW5lcyhmaWxlLCBsaW5lcyk7CkBAIC0xMzI0LDcgKzEzNjcsNyBAQAogICBpZiAoIXRoaXMtPlJlcG9ydFBhdGgpIHsKICAgICBzaXplX3QgYXQgPSBmaWxlLnJmaW5kKCIvIik7CiAgICAgaWYgKGF0ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICBmaWxlID0gZmlsZS5zdWJzdHIoYXQgKyAxKTsKKyAgICAgIGZpbGUuZXJhc2UoMCwgYXQgKyAxKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIGZpbGU7CkBAIC0xNDY0LDEwICsxNTA3LDYgQEAKICAgdGhpcy0+T1NJczY0Qml0ID0gKHNpemVvZih2b2lkKikgPT0gOCk7CiB9CiAKLVN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246On5TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uKCkKLXsKLX0KLQogdm9pZCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpSdW5DUFVDaGVjaygpCiB7CiAjaWZkZWYgX1dJTjMyCkBAIC0xNTY0LDcgKzE2MDMsNyBAQAogfQogCiAvKiogR2V0IHRoZSB2ZW5kb3Igc3RyaW5nICovCi1jb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRWZW5kb3JTdHJpbmcoKQorY29uc3QgY2hhciogU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VmVuZG9yU3RyaW5nKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNoaXBJRC5WZW5kb3IuY19zdHIoKTsKIH0KQEAgLTE3NjAsNyArMTc5OSw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIHR5cGUgSUQgb2YgdGhlIENQVSAqLwotc3RkOjpzdHJpbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VHlwZUlEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFR5cGVJRCgpIGNvbnN0CiB7CiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHI7CiAgIHN0ciA8PCB0aGlzLT5DaGlwSUQuVHlwZTsKQEAgLTE3NjgsNyArMTgwNyw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIGZhbWlseSBvZiB0aGUgQ1BVIHByZXNlbnQgKi8KLXN0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEZhbWlseUlEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEZhbWlseUlEKCkgY29uc3QKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgc3RyIDw8IHRoaXMtPkNoaXBJRC5GYW1pbHk7CkBAIC0xNzc2LDcgKzE4MTUsNyBAQAogfQogCiAvLyBSZXR1cm4gdGhlIG1vZGVsIG9mIENQVSBwcmVzZW50ICovCi1zdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRNb2RlbElEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE1vZGVsSUQoKSBjb25zdAogewogICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyOwogICBzdHIgPDwgdGhpcy0+Q2hpcElELk1vZGVsOwpAQCAtMTc4NCwxMyArMTgyMywxMyBAQAogfQogCiAvLyBSZXR1cm4gdGhlIG1vZGVsIG5hbWUgb2YgQ1BVIHByZXNlbnQgKi8KLXN0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE1vZGVsTmFtZSgpCitzdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRNb2RlbE5hbWUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2hpcElELk1vZGVsTmFtZTsKIH0KIAogLyoqIFJldHVybiB0aGUgc3RlcHBpbmcgY29kZSBvZiB0aGUgQ1BVIHByZXNlbnQuICovCi1zdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRTdGVwcGluZ0NvZGUoKQorc3RkOjpzdHJpbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0U3RlcHBpbmdDb2RlKCkgY29uc3QKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgc3RyIDw8IHRoaXMtPkNoaXBJRC5SZXZpc2lvbjsKQEAgLTE3OTgsNDQgKzE4MzcsNDYgQEAKIH0KIAogLyoqIFJldHVybiB0aGUgc3RlcHBpbmcgY29kZSBvZiB0aGUgQ1BVIHByZXNlbnQuICovCi1jb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRFeHRlbmRlZFByb2Nlc3Nvck5hbWUoKQorY29uc3QgY2hhciogU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNoaXBJRC5Qcm9jZXNzb3JOYW1lLmNfc3RyKCk7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIHByb2Nlc3NvcgogICogIGluIGhleGFkZWNpbWFsOiB4eHh4LXh4eHgteHh4eC14eHh4LXh4eHgteHh4eC4gKi8KLWNvbnN0IGNoYXIqIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpCitjb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JTZXJpYWxOdW1iZXIoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2hpcElELlNlcmlhbE51bWJlci5jX3N0cigpOwogfQogCiAvKiogUmV0dXJuIHRoZSBsb2dpY2FsIHByb2Nlc3NvcnMgcGVyIHBoeXNpY2FsICovCiB1bnNpZ25lZCBpbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0TG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbCgpCisgIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5GZWF0dXJlcy5FeHRlbmRlZEZlYXR1cmVzLkxvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWw7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIHByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3kuICovCi1mbG9hdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDbG9ja0ZyZXF1ZW5jeSgpCitmbG9hdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDbG9ja0ZyZXF1ZW5jeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5DUFVTcGVlZEluTUh6OwogfQogCiAvKiogIFJldHVybiB0aGUgQVBJQyBJRC4gKi8KLWludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JBUElDSUQoKQoraW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckFQSUNJRCgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5GZWF0dXJlcy5FeHRlbmRlZEZlYXR1cmVzLkFQSUNfSUQ7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIEwxIGNhY2hlIHNpemUuICovCi1pbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY2Vzc29yQ2FjaGVTaXplKCkKK2ludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDYWNoZVNpemUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RmVhdHVyZXMuTDFDYWNoZVNpemU7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIGNob3NlbiBjYWNoZSBzaXplLiAqLwotaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQgZHdDYWNoZUlEKQoraW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckNhY2hlWFNpemUoCisgIGxvbmcgaW50IGR3Q2FjaGVJRCkgY29uc3QKIHsKICAgc3dpdGNoIChkd0NhY2hlSUQpIHsKICAgICBjYXNlIFN5c3RlbUluZm9ybWF0aW9uOjpDUFVfRkVBVFVSRV9MMUNBQ0hFOgpAQCAtMTg0OCw3ICsxODg5LDggQEAKICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkRvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCBkd0ZlYXR1cmUpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkRvZXNDUFVTdXBwb3J0RmVhdHVyZSgKKyAgbG9uZyBpbnQgZHdGZWF0dXJlKSBjb25zdAogewogICBib29sIGJIYXNGZWF0dXJlID0gZmFsc2U7CiAKQEAgLTIxMjgsNyArMjE3MCw3IEBACiAgICAgdGhpcy0+Q2hpcE1hbnVmYWN0dXJlciA9IEhQOyAvLyBIZXdsZXR0LVBhY2thcmQKICAgZWxzZSBpZiAodGhpcy0+Q2hpcElELlZlbmRvciA9PSAiTW90b3JvbGEiKQogICAgIHRoaXMtPkNoaXBNYW51ZmFjdHVyZXIgPSBNb3Rvcm9sYTsgLy8gTW90b3JvbGEgTWljcm9lbGVjdHJvbmljcwotICBlbHNlIGlmIChmYW1pbHkuc3Vic3RyKDAsIDcpID09ICJQQS1SSVNDIikKKyAgZWxzZSBpZiAoZmFtaWx5LmNvbXBhcmUoMCwgNywgIlBBLVJJU0MiKSA9PSAwKQogICAgIHRoaXMtPkNoaXBNYW51ZmFjdHVyZXIgPSBIUDsgLy8gSGV3bGV0dC1QYWNrYXJkCiAgIGVsc2UKICAgICB0aGlzLT5DaGlwTWFudWZhY3R1cmVyID0gVW5rbm93bk1hbnVmYWN0dXJlcjsgLy8gVW5rbm93biBtYW51ZmFjdHVyZXIKQEAgLTI4NDMsNyArMjg4NSw3IEBACiAgIC8vIHBvc3QtcHJvY2VzcyB0aGUgbmFtZS4KICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIiAiKTsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHN0ciA9IHN0ci5zdWJzdHIocG9zKTsKKyAgICBzdHIuZXJhc2UoMCwgcG9zKTsKICAgfQogfQogI2VuZGlmCkBAIC0zMzU4LDcgKzM0MDAsOSBAQAogICAgICAgICAgIHJldHVybiB0aGlzLT5FeHRyYWN0VmFsdWVGcm9tQ3B1SW5mb0ZpbGUoYnVmZmVyLCB3b3JkLCBwb3MyKTsKICAgICAgICAgfQogICAgICAgfQotICAgICAgcmV0dXJuIGJ1ZmZlci5zdWJzdHIocG9zICsgMiwgcG9zMiAtIHBvcyAtIDIpOworICAgICAgYnVmZmVyLmVyYXNlKDAsIHBvcyArIDIpOworICAgICAgYnVmZmVyLnJlc2l6ZShwb3MyIC0gcG9zIC0gMik7CisgICAgICByZXR1cm4gYnVmZmVyOwogICAgIH0KICAgfQogICB0aGlzLT5DdXJyZW50UG9zaXRpb25JbkZpbGUgPSBzdGQ6OnN0cmluZzo6bnBvczsKQEAgLTM0MDksNyArMzQ1Myw3IEBACiAgIC8vIFdlIHdhbnQgdG8gcmVjb3JkIHRoZSB0b3RhbCBudW1iZXIgb2YgY29yZXMgaW4gdGhpcy0+TnVtYmVyT2ZQaHlzaWNhbENQVQogICAvLyAoY2hlY2tpbmcgb25seSB0aGUgZmlyc3QgcHJvYykKICAgc3RkOjpzdHJpbmcgQ29yZXMgPSB0aGlzLT5FeHRyYWN0VmFsdWVGcm9tQ3B1SW5mb0ZpbGUoYnVmZmVyLCAiY3B1IGNvcmVzIik7Ci0gIHVuc2lnbmVkIGludCBOdW1iZXJPZkNvcmVzUGVyU29ja2V0ID0gKHVuc2lnbmVkIGludClhdG9pKENvcmVzLmNfc3RyKCkpOworICBhdXRvIE51bWJlck9mQ29yZXNQZXJTb2NrZXQgPSAodW5zaWduZWQgaW50KWF0b2koQ29yZXMuY19zdHIoKSk7CiAgIE51bWJlck9mQ29yZXNQZXJTb2NrZXQgPSBzdGQ6Om1heChOdW1iZXJPZkNvcmVzUGVyU29ja2V0LCAxdSk7CiAgIHRoaXMtPk51bWJlck9mUGh5c2ljYWxDUFUgPQogICAgIE51bWJlck9mQ29yZXNQZXJTb2NrZXQgKiAodW5zaWduZWQgaW50KU51bWJlck9mU29ja2V0czsKQEAgLTM0NDEsNyArMzQ4NSw3IEBACiAgICAgLy8gTGludXggU3BhcmM6IENQVSBzcGVlZCBpcyBpbiBIeiBhbmQgZW5jb2RlZCBpbiBoZXhhZGVjaW1hbAogICAgIENQVVNwZWVkID0gdGhpcy0+RXh0cmFjdFZhbHVlRnJvbUNwdUluZm9GaWxlKGJ1ZmZlciwgIkNwdTBDbGtUY2siKTsKICAgICB0aGlzLT5DUFVTcGVlZEluTUh6ID0KLSAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihzdHJ0b3VsbChDUFVTcGVlZC5jX3N0cigpLCAwLCAxNikpIC8gMTAwMDAwMC4wZjsKKyAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihzdHJ0b3VsbChDUFVTcGVlZC5jX3N0cigpLCBudWxscHRyLCAxNikpIC8gMTAwMDAwMC4wZjsKICAgfQogI2VuZGlmCiAKQEAgLTM1MDIsMTMgKzM1NDYsMTIgQEAKICAgY2FjaGVuYW1lLnB1c2hfYmFjaygiRC1jYWNoZSIpOyAgICAvLyBlLmcuIFBBLVJJU0MKIAogICB0aGlzLT5GZWF0dXJlcy5MMUNhY2hlU2l6ZSA9IDA7Ci0gIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjYWNoZW5hbWUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgc3RkOjpzdHJpbmcgY2FjaGVTaXplID0KLSAgICAgIHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsIGNhY2hlbmFtZVtpbmRleF0pOworICBmb3IgKGF1dG8mIGluZGV4IDogY2FjaGVuYW1lKSB7CisgICAgc3RkOjpzdHJpbmcgY2FjaGVTaXplID0gdGhpcy0+RXh0cmFjdFZhbHVlRnJvbUNwdUluZm9GaWxlKGJ1ZmZlciwgaW5kZXgpOwogICAgIGlmICghY2FjaGVTaXplLmVtcHR5KCkpIHsKICAgICAgIHBvcyA9IGNhY2hlU2l6ZS5maW5kKCIgS0IiKTsKICAgICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgY2FjaGVTaXplID0gY2FjaGVTaXplLnN1YnN0cigwLCBwb3MpOworICAgICAgICBjYWNoZVNpemUucmVzaXplKHBvcyk7CiAgICAgICB9CiAgICAgICB0aGlzLT5GZWF0dXJlcy5MMUNhY2hlU2l6ZSArPSBhdG9pKGNhY2hlU2l6ZS5jX3N0cigpKTsKICAgICB9CkBAIC00MjQ5LDI0ICs0MjkyLDI0IEBACiB9CiAKIC8qKiAqLwotc2l6ZV90IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFRvdGFsVmlydHVhbE1lbW9yeSgpCitzaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VG90YWxWaXJ0dWFsTWVtb3J5KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPlRvdGFsVmlydHVhbE1lbW9yeTsKIH0KIAogLyoqICovCi1zaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0QXZhaWxhYmxlVmlydHVhbE1lbW9yeSgpCitzaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0QXZhaWxhYmxlVmlydHVhbE1lbW9yeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5BdmFpbGFibGVWaXJ0dWFsTWVtb3J5OwogfQogCi1zaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VG90YWxQaHlzaWNhbE1lbW9yeSgpCitzaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VG90YWxQaHlzaWNhbE1lbW9yeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5Ub3RhbFBoeXNpY2FsTWVtb3J5OwogfQogCiAvKiogKi8KLXNpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpCitzaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0QXZhaWxhYmxlUGh5c2ljYWxNZW1vcnkoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+QXZhaWxhYmxlUGh5c2ljYWxNZW1vcnk7CiB9CkBAIC00MzUwLDcgKzQzOTMsNyBAQAogfQogCiAvKiogV29ya3Mgb25seSBmb3Igd2luZG93cyAqLwotYm9vbCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpJc1NNVFN1cHBvcnRlZCgpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OklzU01UU3VwcG9ydGVkKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkZlYXR1cmVzLkV4dGVuZGVkRmVhdHVyZXMuTG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbCA+IDE7CiB9CkBAIC00NDMyLDEzICs0NDc1LDEzIEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsb2dpY2FsIENQVXMgb24gdGhlIHN5c3RlbSAqLwotdW5zaWduZWQgaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE51bWJlck9mTG9naWNhbENQVSgpCit1bnNpZ25lZCBpbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0TnVtYmVyT2ZMb2dpY2FsQ1BVKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPk51bWJlck9mTG9naWNhbENQVTsKIH0KIAogLyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIENQVXMgb24gdGhlIHN5c3RlbSAqLwotdW5zaWduZWQgaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE51bWJlck9mUGh5c2ljYWxDUFUoKQordW5zaWduZWQgaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE51bWJlck9mUGh5c2ljYWxDUFUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+TnVtYmVyT2ZQaHlzaWNhbENQVTsKIH0KQEAgLTQ3MzMsMTQgKzQ3NzYsMTUgQEAKICAgICB9CiAgICAgcG9zID0gY29tbWFuZC5maW5kKCcgJywgcG9zICsgMSk7CiAgIH0KLSAgYXJnc19zdHJpbmcucHVzaF9iYWNrKGNvbW1hbmQuc3Vic3RyKHN0YXJ0ICsgMSwgY29tbWFuZC5zaXplKCkgLSBzdGFydCAtIDEpKTsKKyAgY29tbWFuZC5lcmFzZSgwLCBzdGFydCArIDEpOworICBhcmdzX3N0cmluZy5wdXNoX2JhY2soY29tbWFuZCk7CiAKICAgc3RkOjp2ZWN0b3I8Y29uc3QgY2hhcio+IGFyZ3M7CiAgIGFyZ3MucmVzZXJ2ZSgzICsgYXJnc19zdHJpbmcuc2l6ZSgpKTsKICAgYXJncy5wdXNoX2JhY2soImtzdGF0Iik7CiAgIGFyZ3MucHVzaF9iYWNrKCItcCIpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Nfc3RyaW5nLnNpemUoKTsgKytpKSB7Ci0gICAgYXJncy5wdXNoX2JhY2soYXJnc19zdHJpbmdbaV0uY19zdHIoKSk7CisgIGZvciAoYXV0byYgaSA6IGFyZ3Nfc3RyaW5nKSB7CisgICAgYXJncy5wdXNoX2JhY2soaS5jX3N0cigpKTsKICAgfQogICBhcmdzLnB1c2hfYmFjayhudWxscHRyKTsKIApAQCAtNDkyMiw3ICs0OTY2LDkgQEAKICAgd2hpbGUgKGJ1ZmZlcltwb3NdID09ICcgJykKICAgICBwb3MrKzsKIAotICB0aGlzLT5Ub3RhbFBoeXNpY2FsTWVtb3J5ID0gYXRvaShidWZmZXIuc3Vic3RyKHBvcywgcG9zMiAtIHBvcykuY19zdHIoKSk7CisgIGJ1ZmZlci5lcmFzZSgwLCBwb3MpOworICBidWZmZXIucmVzaXplKHBvczIpOworICB0aGlzLT5Ub3RhbFBoeXNpY2FsTWVtb3J5ID0gYXRvaShidWZmZXIuY19zdHIoKSk7CiAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgIHJldHVybiBmYWxzZTsKQEAgLTU0NTksNyArNTUwNSw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWFjaGluZSBpcyA2NCBiaXRzICovCi1ib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OklzNjRCaXRzKCkKK2Jvb2wgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6SXM2NEJpdHMoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+T1NJczY0Qml0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmN4eCBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5jeHgKaW5kZXggY2U0ZDZlZi4uZTA3M2NiZiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtVG9vbHMuY3h4CkBAIC0xMjMsOSArMTIzLDkgQEAKIAogI2RlZmluZSBWVEtfVVJMX1BST1RPQ09MX1JFR0VYICIoW2EtekEtWjAtOV0qKTovLyguKikiCiAjZGVmaW5lIFZUS19VUkxfUkVHRVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICIoW2EtekEtWjAtOV0qKTovLygoW0EtWmEtejAtOV0rKSg6KFteOkBdKykpP0ApPyhbXjpAL10rKSg6KFswLTldKykpPy8iICAgICBcCisgICIoW2EtekEtWjAtOV0qKTovLygoW0EtWmEtejAtOV0rKSg6KFteOkBdKykpP0ApPyhbXjpAL10qKSg6KFswLTldKykpPy8iICAgICBcCiAgICIoLispPyIKLQorI2RlZmluZSBWVEtfVVJMX0JZVEVfUkVHRVggIiVbMC05YS1mQS1GXVswLTlhLWZBLUZdIgogI2lmZGVmIF9NU0NfVkVSCiAjICBpbmNsdWRlIDxzeXMvdXRpbWUuaD4KICNlbHNlCkBAIC0yMjEsMTEgKzIyMSwxNyBAQAogCiAjaWZkZWYgS1dTWVNfV0lORE9XU19ESVJTCiAjICBpbmNsdWRlIDx3Y3R5cGUuaD4KKyMgIGlmZGVmIF9NU0NfVkVSCit0eXBlZGVmIEtXU1lTX05BTUVTUEFDRTo6U3lzdGVtVG9vbHM6Om1vZGVfdCBtb2RlX3Q7CisjICBlbmRpZgogCi1pbmxpbmUgaW50IE1rZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIpCitpbmxpbmUgaW50IE1rZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIsIGNvbnN0IG1vZGVfdCogbW9kZSkKIHsKLSAgcmV0dXJuIF93bWtkaXIoCi0gICAgS1dTWVNfTkFNRVNQQUNFOjpFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGRpcikuY19zdHIoKSk7CisgIGludCByZXQgPQorICAgIF93bWtkaXIoS1dTWVNfTkFNRVNQQUNFOjpFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGRpcikuY19zdHIoKSk7CisgIGlmIChyZXQgPT0gMCAmJiBtb2RlKQorICAgIEtXU1lTX05BTUVTUEFDRTo6U3lzdGVtVG9vbHM6OlNldFBlcm1pc3Npb25zKGRpciwgKm1vZGUpOworICByZXR1cm4gcmV0OwogfQogaW5saW5lIGludCBSbWRpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyKQogewpAQCAtMjk1LDkgKzMwMSw5IEBACiAKICMgIGluY2x1ZGUgPGZjbnRsLmg+CiAjICBpbmNsdWRlIDx1bmlzdGQuaD4KLWlubGluZSBpbnQgTWtkaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcikKK2lubGluZSBpbnQgTWtkaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgY29uc3QgbW9kZV90KiBtb2RlKQogewotICByZXR1cm4gbWtkaXIoZGlyLmNfc3RyKCksIDAwNzc3KTsKKyAgcmV0dXJuIG1rZGlyKGRpci5jX3N0cigpLCBtb2RlID8gKm1vZGUgOiAwMDc3Nyk7CiB9CiBpbmxpbmUgaW50IFJtZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIpCiB7CkBAIC0zNTAsNyArMzU2LDcgQEAKIAogbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRSB7CiAKLWRvdWJsZSBTeXN0ZW1Ub29sczo6R2V0VGltZSh2b2lkKQorZG91YmxlIFN5c3RlbVRvb2xzOjpHZXRUaW1lKCkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICAgRklMRVRJTUUgZnQ7CkBAIC0zNjgsNyArMzc0LDcgQEAKICNpZiBkZWZpbmVkKF9XSU4zMikKIHR5cGVkZWYgd2NoYXJfdCBlbnZjaGFyOwogI2Vsc2UKLXR5cGVkZWYgY2hhciBlbnZjaGFyOwordXNpbmcgZW52Y2hhciA9IGNoYXI7CiAjZW5kaWYKIAogLyogT3JkZXIgYnkgZW52aXJvbm1lbnQga2V5IG9ubHkgKFZBUiBmcm9tIFZBUj1WQUxVRSkuICAqLwpAQCAtNDIxLDcgKzQyNyw3IEBACiAgIGNvbnN0IGVudmNoYXIqIFJlbGVhc2UoY29uc3QgZW52Y2hhciogZW52KQogICB7CiAgICAgY29uc3QgZW52Y2hhciogb2xkID0gbnVsbHB0cjsKLSAgICBpdGVyYXRvciBpID0gdGhpcy0+ZmluZChlbnYpOworICAgIGF1dG8gaSA9IHRoaXMtPmZpbmQoZW52KTsKICAgICBpZiAoaSAhPSB0aGlzLT5lbmQoKSkgewogICAgICAgb2xkID0gKmk7CiAgICAgICB0aGlzLT5lcmFzZShpKTsKQEAgLTQ1Miw3ICs0NTgsNyBAQAogY2xhc3MgU3lzdGVtVG9vbHNTdGF0aWMKIHsKIHB1YmxpYzoKLSAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IFN0cmluZ01hcDsKKyAgdXNpbmcgU3RyaW5nTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjsKICNpZiBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQCiAgIC8qKgogICAgKiBQYXRoIHRyYW5zbGF0aW9uIHRhYmxlIGZyb20gZGlyIHRvIHJlZmRpcgpAQCAtNDg4LDcgKzQ5NCw3IEBACiAgICAqLwogICBzdGF0aWMgc3RkOjpzdHJpbmcgRmluZE5hbWUoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXRoID0gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB1c2VyUGF0aHMgPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwKICAgICBib29sIG5vX3N5c3RlbV9wYXRoID0gZmFsc2UpOwogfTsKIApAQCAtNjEzLDggKzYxOSw3IEBACiAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAgIH0KLSAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIGkgPSBwYXRoLmJlZ2luKCkgKyBvbGRfc2l6ZTsKLSAgICAgICBpICE9IHBhdGguZW5kKCk7ICsraSkgeworICBmb3IgKGF1dG8gaSA9IHBhdGguYmVnaW4oKSArIG9sZF9zaXplOyBpICE9IHBhdGguZW5kKCk7ICsraSkgewogICAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcygqaSk7CiAgIH0KIH0KQEAgLTkxMywxNiArOTE4LDE3IEBACiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gMDsKICAgc3RkOjpzdHJpbmcgdG9wZGlyOwogICB3aGlsZSAoKHBvcyA9IGRpci5maW5kKCcvJywgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICB0b3BkaXIgPSBkaXIuc3Vic3RyKDAsIHBvcyk7CisgICAgLy8gYWxsIHVuZGVybHlpbmcgZnVuY3Rpb25zIHVzZSBDIHN0cmluZ3MsIHNvIHRlbXBvcmFyaWx5CisgICAgLy8gZW5kIHRoZSBzdHJpbmcgaGVyZQorICAgIGRpcltwb3NdID0gJ1wwJzsKIAotICAgIGlmIChNa2Rpcih0b3BkaXIpID09IDAgJiYgbW9kZSAhPSBudWxscHRyKSB7Ci0gICAgICBTeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnModG9wZGlyLCAqbW9kZSk7Ci0gICAgfQorICAgIE1rZGlyKGRpciwgbW9kZSk7CisgICAgZGlyW3Bvc10gPSAnLyc7CiAKICAgICArK3BvczsKICAgfQogICB0b3BkaXIgPSBkaXI7Ci0gIGlmIChNa2Rpcih0b3BkaXIpICE9IDApIHsKKyAgaWYgKE1rZGlyKHRvcGRpciwgbW9kZSkgIT0gMCkgewogICAgIC8vIFRoZXJlIGlzIGEgYnVnIGluIHRoZSBCb3JsYW5kIFJ1biB0aW1lIGxpYnJhcnkgd2hpY2ggbWFrZXMgTUtESVIKICAgICAvLyByZXR1cm4gRUFDQ0VTIHdoZW4gaXQgc2hvdWxkIHJldHVybiBFRVhJU1RTCiAgICAgLy8gaWYgaXQgaXMgc29tZSBvdGhlciBlcnJvciBiZXNpZGVzIGRpcmVjdG9yeSBleGlzdHMKQEAgLTkzNCw4ICs5NDAsNiBAQAogICAgICkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgfSBlbHNlIGlmIChtb2RlICE9IG51bGxwdHIpIHsKLSAgICBTeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnModG9wZGlyLCAqbW9kZSk7CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTEsMzggKzEwMTUsNDAgQEAKICMgICAgZGVmaW5lIEtXU1lTX1NUX0tFWV9XT1c2NF82NEtFWSAweDAxMDAKICMgIGVuZGlmCiAKLXN0YXRpYyBib29sIFN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShjb25zdCBzdGQ6OnN0cmluZyYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhLRVkmIHByaW1hcnlLZXksIHN0ZDo6c3RyaW5nJiBzZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHZhbHVlbmFtZSkKK3N0YXRpYyBib29sIGhhc1ByZWZpeChjb25zdCBzdGQ6OnN0cmluZyYgcywgY29uc3QgY2hhciogcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MpCiB7Ci0gIHN0ZDo6c3RyaW5nIHByaW1hcnkgPSBrZXk7CisgIHNpemVfdCBwbGVuID0gc3RybGVuKHBhdHRlcm4pOworICBpZiAoc3BvcyAhPSBwbGVuKQorICAgIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIHMuY29tcGFyZSgwLCBwbGVuLCBwYXR0ZXJuKSA9PSAwOworfQogCi0gIHNpemVfdCBzdGFydCA9IHByaW1hcnkuZmluZCgnXFwnKTsKK3N0YXRpYyBib29sIFN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShjb25zdCBzdGQ6OnN0cmluZyYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhLRVkmIHByaW1hcnlLZXksIHN0ZDo6d3N0cmluZyYgc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiB2YWx1ZW5hbWUpCit7CisgIHNpemVfdCBzdGFydCA9IGtleS5maW5kKCdcXCcpOwogICBpZiAoc3RhcnQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBzaXplX3QgdmFsdWVuYW1lcG9zID0gcHJpbWFyeS5maW5kKCc7Jyk7Ci0gIGlmICh2YWx1ZW5hbWVwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICB2YWx1ZW5hbWUgPSBwcmltYXJ5LnN1YnN0cih2YWx1ZW5hbWVwb3MgKyAxKTsKKyAgc2l6ZV90IHZhbHVlbmFtZXBvcyA9IGtleS5maW5kKCc7Jyk7CisgIGlmICh2YWx1ZW5hbWVwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgdmFsdWVuYW1lKSB7CisgICAgKnZhbHVlbmFtZSA9IGtleS5zdWJzdHIodmFsdWVuYW1lcG9zICsgMSk7CiAgIH0KIAotICBzZWNvbmQgPSBwcmltYXJ5LnN1YnN0cihzdGFydCArIDEsIHZhbHVlbmFtZXBvcyAtIHN0YXJ0IC0gMSk7Ci0gIHByaW1hcnkgPSBwcmltYXJ5LnN1YnN0cigwLCBzdGFydCk7CisgIHNlY29uZCA9IEVuY29kaW5nOjpUb1dpZGUoa2V5LnN1YnN0cihzdGFydCArIDEsIHZhbHVlbmFtZXBvcyAtIHN0YXJ0IC0gMSkpOwogCi0gIGlmIChwcmltYXJ5ID09ICJIS0VZX0NVUlJFTlRfVVNFUiIpIHsKKyAgaWYgKGhhc1ByZWZpeChrZXksICJIS0VZX0NVUlJFTlRfVVNFUiIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgfQotICBpZiAocHJpbWFyeSA9PSAiSEtFWV9DVVJSRU5UX0NPTkZJRyIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9DVVJSRU5UX0NPTkZJRyIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfQ09ORklHOwotICB9Ci0gIGlmIChwcmltYXJ5ID09ICJIS0VZX0NMQVNTRVNfUk9PVCIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9DTEFTU0VTX1JPT1QiLCBzdGFydCkpIHsKICAgICBwcmltYXJ5S2V5ID0gSEtFWV9DTEFTU0VTX1JPT1Q7Ci0gIH0KLSAgaWYgKHByaW1hcnkgPT0gIkhLRVlfTE9DQUxfTUFDSElORSIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9MT0NBTF9NQUNISU5FIiwgc3RhcnQpKSB7CiAgICAgcHJpbWFyeUtleSA9IEhLRVlfTE9DQUxfTUFDSElORTsKLSAgfQotICBpZiAocHJpbWFyeSA9PSAiSEtFWV9VU0VSUyIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9VU0VSUyIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX1VTRVJTOwogICB9CiAKQEAgLTEwNzQsMTQgKzEwODAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlXT1c2NCB2aWV3KQogewogICBIS0VZIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgc3RkOjpzdHJpbmcgc2Vjb25kOwotICBzdGQ6OnN0cmluZyB2YWx1ZW5hbWU7Ci0gIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCB2YWx1ZW5hbWUpKSB7CisgIHN0ZDo6d3N0cmluZyBzZWNvbmQ7CisgIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCBudWxscHRyKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIEhLRVkgaEtleTsKLSAgaWYgKFJlZ09wZW5LZXlFeFcocHJpbWFyeUtleSwgRW5jb2Rpbmc6OlRvV2lkZShzZWNvbmQpLmNfc3RyKCksIDAsCisgIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIHNlY29uZC5jX3N0cigpLCAwLAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Ub29sc01ha2VSZWdpc3RyeU1vZGUoS0VZX1JFQUQsIHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAmaEtleSkgIT0gRVJST1JfU1VDQ0VTUykgewogICAgIHJldHVybiBmYWxzZTsKQEAgLTExMjEsMTQgKzExMjYsMTQgQEAKIHsKICAgYm9vbCB2YWx1ZXNldCA9IGZhbHNlOwogICBIS0VZIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgc3RkOjpzdHJpbmcgc2Vjb25kOworICBzdGQ6OndzdHJpbmcgc2Vjb25kOwogICBzdGQ6OnN0cmluZyB2YWx1ZW5hbWU7Ci0gIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCB2YWx1ZW5hbWUpKSB7CisgIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCAmdmFsdWVuYW1lKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIEhLRVkgaEtleTsKLSAgaWYgKFJlZ09wZW5LZXlFeFcocHJpbWFyeUtleSwgRW5jb2Rpbmc6OlRvV2lkZShzZWNvbmQpLmNfc3RyKCksIDAsCisgIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIHNlY29uZC5jX3N0cigpLCAwLAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Ub29sc01ha2VSZWdpc3RyeU1vZGUoS0VZX1JFQUQsIHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAmaEtleSkgIT0gRVJST1JfU1VDQ0VTUykgewogICAgIHJldHVybiBmYWxzZTsKQEAgLTExNzUsMTYgKzExODAsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIEtleVdPVzY0IHZpZXcpCiB7CiAgIEhLRVkgcHJpbWFyeUtleSA9IEhLRVlfQ1VSUkVOVF9VU0VSOwotICBzdGQ6OnN0cmluZyBzZWNvbmQ7CisgIHN0ZDo6d3N0cmluZyBzZWNvbmQ7CiAgIHN0ZDo6c3RyaW5nIHZhbHVlbmFtZTsKLSAgaWYgKCFTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoa2V5LCBwcmltYXJ5S2V5LCBzZWNvbmQsIHZhbHVlbmFtZSkpIHsKKyAgaWYgKCFTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoa2V5LCBwcmltYXJ5S2V5LCBzZWNvbmQsICZ2YWx1ZW5hbWUpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgSEtFWSBoS2V5OwogICBEV09SRCBkd0R1bW15OwogICB3Y2hhcl90IGxwQ2xhc3NbXSA9IEwiIjsKLSAgaWYgKFJlZ0NyZWF0ZUtleUV4VyhwcmltYXJ5S2V5LCBFbmNvZGluZzo6VG9XaWRlKHNlY29uZCkuY19zdHIoKSwgMCwgbHBDbGFzcywKKyAgaWYgKFJlZ0NyZWF0ZUtleUV4VyhwcmltYXJ5S2V5LCBzZWNvbmQuY19zdHIoKSwgMCwgbHBDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Ub29sc01ha2VSZWdpc3RyeU1vZGUoS0VZX1dSSVRFLCB2aWV3KSwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAmaEtleSwgJmR3RHVtbXkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKQEAgLTEyMTksMTQgKzEyMjQsMTQgQEAKIGJvb2wgU3lzdGVtVG9vbHM6OkRlbGV0ZVJlZ2lzdHJ5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgS2V5V09XNjQgdmlldykKIHsKICAgSEtFWSBwcmltYXJ5S2V5ID0gSEtFWV9DVVJSRU5UX1VTRVI7Ci0gIHN0ZDo6c3RyaW5nIHNlY29uZDsKKyAgc3RkOjp3c3RyaW5nIHNlY29uZDsKICAgc3RkOjpzdHJpbmcgdmFsdWVuYW1lOwotICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgdmFsdWVuYW1lKSkgeworICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgJnZhbHVlbmFtZSkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBIS0VZIGhLZXk7Ci0gIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIEVuY29kaW5nOjpUb1dpZGUoc2Vjb25kKS5jX3N0cigpLCAwLAorICBpZiAoUmVnT3BlbktleUV4VyhwcmltYXJ5S2V5LCBzZWNvbmQuY19zdHIoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVG9vbHNNYWtlUmVnaXN0cnlNb2RlKEtFWV9XUklURSwgdmlldyksCiAgICAgICAgICAgICAgICAgICAgICZoS2V5KSAhPSBFUlJPUl9TVUNDRVNTKSB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg1OCw3ICsxODYzLDcgQEAKIC8vIFJldHVybiBhIGNyb3BwZWQgc3RyaW5nCiBzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q3JvcFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgcywgc2l6ZV90IG1heF9sZW4pCiB7Ci0gIGlmICghcy5zaXplKCkgfHwgbWF4X2xlbiA9PSAwIHx8IG1heF9sZW4gPj0gcy5zaXplKCkpIHsKKyAgaWYgKHMuZW1wdHkoKSB8fCBtYXhfbGVuID09IDAgfHwgbWF4X2xlbiA+PSBzLnNpemUoKSkgewogICAgIHJldHVybiBzOwogICB9CiAKQEAgLTE4NjcsNyArMTg3Miw3IEBACiAKICAgc2l6ZV90IG1pZGRsZSA9IG1heF9sZW4gLyAyOwogCi0gIG4gKz0gcy5zdWJzdHIoMCwgbWlkZGxlKTsKKyAgbi5hc3NpZ24ocywgMCwgbWlkZGxlKTsKICAgbiArPSBzLnN1YnN0cihzLnNpemUoKSAtIChtYXhfbGVuIC0gbWlkZGxlKSk7CiAKICAgaWYgKG1heF9sZW4gPiAyKSB7CkBAIC0xODkzLDcgKzE4OTgsNyBAQAogICB9CiAgIGlmIChpc1BhdGggJiYgcGF0aFswXSA9PSAnLycpIHsKICAgICBwYXRoLmVyYXNlKHBhdGguYmVnaW4oKSk7Ci0gICAgcGF0aHMucHVzaF9iYWNrKCIvIik7CisgICAgcGF0aHMuZW1wbGFjZV9iYWNrKCIvIik7CiAgIH0KICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MxID0gMDsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MyID0gcGF0aC5maW5kKHNlcCwgcG9zMSArIDEpOwpAQCAtMjA2NSw4ICsyMDcwLDEwIEBACiAjaWZkZWYgSEFWRV9HRVRQV05BTQogICBlbHNlIGlmIChwYXRoQ1N0cmluZ1swXSA9PSAnficpIHsKICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGlkeCA9IHBhdGguZmluZF9maXJzdF9vZigiL1wwIik7Ci0gICAgc3RkOjpzdHJpbmcgdXNlciA9IHBhdGguc3Vic3RyKDEsIGlkeCAtIDEpOwotICAgIHBhc3N3ZCogcHcgPSBnZXRwd25hbSh1c2VyLmNfc3RyKCkpOworICAgIGNoYXIgb2xkY2ggPSBwYXRoW2lkeF07CisgICAgcGF0aFtpZHhdID0gJ1wwJzsKKyAgICBwYXNzd2QqIHB3ID0gZ2V0cHduYW0ocGF0aC5jX3N0cigpICsgMSk7CisgICAgcGF0aFtpZHhdID0gb2xkY2g7CiAgICAgaWYgKHB3KSB7CiAgICAgICBwYXRoLnJlcGxhY2UoMCwgaWR4LCBwdy0+cHdfZGlyKTsKICAgICB9CkBAIC0yMTg2LDEyICsyMTkzLDE1IEBACiAgIC8vIEZpbGVzRGlmZmVyIGRvZXMgbm90IGhhbmRsZSBmaWxlIHRvIGRpcmVjdG9yeSBjb21wYXJlCiAgIGlmIChTeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KGRlc3RpbmF0aW9uKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5ld19kZXN0aW5hdGlvbiA9IEZpbGVJbkRpcihzb3VyY2UsIGRlc3RpbmF0aW9uKTsKLSAgICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvcHlGaWxlSWZEaWZmZXJlbnQoc291cmNlLCBuZXdfZGVzdGluYXRpb24pOwotICB9Ci0gIC8vIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGZpbGVzIHNvIGRvIGEgY29weSBpZiB0aGV5Ci0gIC8vIGFyZSBkaWZmZXJlbnQKLSAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlc0RpZmZlcihzb3VyY2UsIGRlc3RpbmF0aW9uKSkgewotICAgIHJldHVybiBTeXN0ZW1Ub29sczo6Q29weUZpbGVBbHdheXMoc291cmNlLCBkZXN0aW5hdGlvbik7CisgICAgaWYgKCFTeXN0ZW1Ub29sczo6Q29tcGFyZVBhdGgobmV3X2Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbikpIHsKKyAgICAgIHJldHVybiBTeXN0ZW1Ub29sczo6Q29weUZpbGVJZkRpZmZlcmVudChzb3VyY2UsIG5ld19kZXN0aW5hdGlvbik7CisgICAgfQorICB9IGVsc2UgeworICAgIC8vIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGZpbGVzIHNvIGRvIGEgY29weSBpZiB0aGV5CisgICAgLy8gYXJlIGRpZmZlcmVudAorICAgIGlmIChTeXN0ZW1Ub29sczo6RmlsZXNEaWZmZXIoc291cmNlLCBkZXN0aW5hdGlvbikpIHsKKyAgICAgIHJldHVybiBTeXN0ZW1Ub29sczo6Q29weUZpbGVBbHdheXMoc291cmNlLCBkZXN0aW5hdGlvbik7CisgICAgfQogICB9CiAgIC8vIGF0IHRoaXMgcG9pbnQgdGhlIGZpbGVzIG11c3QgYmUgdGhlIHNhbWUgc28gcmV0dXJuIHRydWUKICAgcmV0dXJuIHRydWU7CkBAIC0yMzI2LDE0ICsyMzM2LDggQEAKIHN0YXRpYyBib29sIENvcHlGaWxlQ29udGVudEJsb2Nrd2lzZShjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXN0aW5hdGlvbikKIHsKLS8vIE9wZW4gZmlsZXMKLSNpZiBkZWZpbmVkKF9XSU4zMikKLSAga3dzeXM6Omlmc3RyZWFtIGZpbigKLSAgICBFbmNvZGluZzo6VG9OYXJyb3coRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChzb3VyY2UpKS5jX3N0cigpLAotICAgIHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpiaW5hcnkpOwotI2Vsc2UKKyAgLy8gT3BlbiBmaWxlcwogICBrd3N5czo6aWZzdHJlYW0gZmluKHNvdXJjZS5jX3N0cigpLCBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6YmluYXJ5KTsKLSNlbmRpZgogICBpZiAoIWZpbikgewogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtMjM0NCwxNCArMjM0OCw4IEBACiAgIC8vIHRoYXQgZG8gbm90IGFsbG93IGZpbGUgcmVtb3ZhbCBjYW4gYmUgbW9kaWZpZWQuCiAgIFN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGRlc3RpbmF0aW9uKTsKIAotI2lmIGRlZmluZWQoX1dJTjMyKQotICBrd3N5czo6b2ZzdHJlYW0gZm91dCgKLSAgICBFbmNvZGluZzo6VG9OYXJyb3coRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChkZXN0aW5hdGlvbikpLmNfc3RyKCksCi0gICAgc3RkOjppb3M6Om91dCB8IHN0ZDo6aW9zOjp0cnVuYyB8IHN0ZDo6aW9zOjpiaW5hcnkpOwotI2Vsc2UKICAga3dzeXM6Om9mc3RyZWFtIGZvdXQoZGVzdGluYXRpb24uY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppb3M6Om91dCB8IHN0ZDo6aW9zOjp0cnVuYyB8IHN0ZDo6aW9zOjpiaW5hcnkpOwotI2VuZGlmCiAgIGlmICghZm91dCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtMzE0MSwxNyArMzEzOSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGlyLCBzdGQ6OnN0cmluZyYgZmlsZSwgYm9vbCkKIHsKICAgZGlyID0gaW5fbmFtZTsKLSAgZmlsZSA9ICIiOworICBmaWxlLmNsZWFyKCk7CiAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhkaXIpOwogCiAgIGlmICghU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShkaXIpKSB7CiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzbGFzaFBvcyA9IGRpci5yZmluZCgiLyIpOwogICAgIGlmIChzbGFzaFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgZmlsZSA9IGRpci5zdWJzdHIoc2xhc2hQb3MgKyAxKTsKLSAgICAgIGRpciA9IGRpci5zdWJzdHIoMCwgc2xhc2hQb3MpOworICAgICAgZGlyLnJlc2l6ZShzbGFzaFBvcyk7CiAgICAgfSBlbHNlIHsKICAgICAgIGZpbGUgPSBkaXI7Ci0gICAgICBkaXIgPSAiIjsKKyAgICAgIGRpci5jbGVhcigpOwogICAgIH0KICAgfQogICBpZiAoIShkaXIuZW1wdHkoKSkgJiYgIVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZGlyKSkgewpAQCAtMzI3OCw3ICszMjc2LDcgQEAKICAgLy8gTm93IGNvbnZlcnQgYW55IHBhdGggZm91bmQgaW4gdGhlIHRhYmxlIGJhY2sgdG8gdGhlIG9uZSBkZXNpcmVkOgogICBmb3IgKGF1dG8gY29uc3QmIHBhaXIgOiBTeXN0ZW1Ub29sczo6U3RhdGljcy0+VHJhbnNsYXRpb25NYXApIHsKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG9mIHRoZSBwYXRoIGlzIGEgc3Vic3RyaW5nIG9mIHRoZSBvdGhlciBwYXRoCi0gICAgaWYgKHBhdGguZmluZChwYWlyLmZpcnN0KSA9PSAwKSB7CisgICAgaWYgKHBhdGguY29tcGFyZSgwLCBwYWlyLmZpcnN0LnNpemUoKSwgcGFpci5maXJzdCkgPT0gMCkgewogICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgwLCBwYWlyLmZpcnN0LnNpemUoKSwgcGFpci5zZWNvbmQpOwogICAgIH0KICAgfQpAQCAtMzU1MCw3ICszNTQ4LDcgQEAKICAgICAvLyBFeHBhbmQgaG9tZSBkaXJlY3RvcnkgcmVmZXJlbmNlcyBpZiByZXF1ZXN0ZWQuCiAgICAgaWYgKGV4cGFuZF9ob21lX2RpciAmJiAhcm9vdC5lbXB0eSgpICYmIHJvb3RbMF0gPT0gJ34nKSB7CiAgICAgICBzdGQ6OnN0cmluZyBob21lZGlyOwotICAgICAgcm9vdCA9IHJvb3Quc3Vic3RyKDAsIHJvb3Quc2l6ZSgpIC0gMSk7CisgICAgICByb290LnJlc2l6ZShyb290LnNpemUoKSAtIDEpOwogICAgICAgaWYgKHJvb3Quc2l6ZSgpID09IDEpIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICAgICAgICAgaWYgKCFTeXN0ZW1Ub29sczo6R2V0RW52KCJVU0VSUFJPRklMRSIsIGhvbWVkaXIpKQpAQCAtMzU4MCwxNCArMzU3OCwxNCBAQAogICBmb3IgKDsgKmxhc3Q7ICsrbGFzdCkgewogICAgIGlmICgqbGFzdCA9PSAnLycgfHwgKmxhc3QgPT0gJ1xcJykgewogICAgICAgLy8gRW5kIG9mIGEgY29tcG9uZW50LiAgU2F2ZSBpdC4KLSAgICAgIGNvbXBvbmVudHMucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKGZpcnN0LCBsYXN0KSk7CisgICAgICBjb21wb25lbnRzLmVtcGxhY2VfYmFjayhmaXJzdCwgbGFzdCk7CiAgICAgICBmaXJzdCA9IGxhc3QgKyAxOwogICAgIH0KICAgfQogCiAgIC8vIFNhdmUgdGhlIGxhc3QgY29tcG9uZW50IHVubGVzcyB0aGVyZSB3ZXJlIG5vIGNvbXBvbmVudHMuCiAgIGlmIChsYXN0ICE9IGMpIHsKLSAgICBjb21wb25lbnRzLnB1c2hfYmFjayhzdGQ6OnN0cmluZyhmaXJzdCwgbGFzdCkpOworICAgIGNvbXBvbmVudHMuZW1wbGFjZV9iYWNrKGZpcnN0LCBsYXN0KTsKICAgfQogfQogCkBAIC0zNjAzLDcgKzM2MDEsNyBAQAogICAvLyBDb25zdHJ1Y3QgcmVzdWx0IGluIGEgc2luZ2xlIHN0cmluZy4KICAgc3RkOjpzdHJpbmcgcmVzdWx0OwogICBzaXplX3QgbGVuID0gMDsKLSAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBmaXJzdDsgaSAhPSBsYXN0OyArK2kpIHsKKyAgZm9yIChhdXRvIGkgPSBmaXJzdDsgaSAhPSBsYXN0OyArK2kpIHsKICAgICBsZW4gKz0gMSArIGktPnNpemUoKTsKICAgfQogICByZXN1bHQucmVzZXJ2ZShsZW4pOwpAQCAtMzY5NSwxOCArMzY5MywxOSBAQAogICBTeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZm4pOwogCiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc2xhc2hfcG9zID0gZm4ucmZpbmQoIi8iKTsKLSAgaWYgKHNsYXNoX3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHN0ZDo6c3RyaW5nIHJldCA9IGZuLnN1YnN0cigwLCBzbGFzaF9wb3MpOwotICAgIGlmIChyZXQuc2l6ZSgpID09IDIgJiYgcmV0WzFdID09ICc6JykgewotICAgICAgcmV0dXJuIHJldCArICcvJzsKLSAgICB9Ci0gICAgaWYgKHJldC5lbXB0eSgpKSB7Ci0gICAgICByZXR1cm4gIi8iOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9IGVsc2UgeworICBpZiAoc2xhc2hfcG9zID09IDApIHsKKyAgICByZXR1cm4gIi8iOworICB9CisgIGlmIChzbGFzaF9wb3MgPT0gMiAmJiBmblsxXSA9PSAnOicpIHsKKyAgICAvLyBrZWVwIHRoZSAvIGFmdGVyIGEgZHJpdmUgbGV0dGVyCisgICAgZm4ucmVzaXplKDMpOworICAgIHJldHVybiBmbjsKKyAgfQorICBpZiAoc2xhc2hfcG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcmV0dXJuICIiOwogICB9CisgIGZuLnJlc2l6ZShzbGFzaF9wb3MpOworICByZXR1cm4gZm47CiB9CiAKIC8qKgpAQCAtMzczNiw3ICszNzM1LDggQEAKICAgc3RkOjpzdHJpbmcgbmFtZSA9IFN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZW5hbWUpOwogICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGRvdF9wb3MgPSBuYW1lLmZpbmQoJy4nKTsKICAgaWYgKGRvdF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gbmFtZS5zdWJzdHIoZG90X3Bvcyk7CisgICAgbmFtZS5lcmFzZSgwLCBkb3RfcG9zKTsKKyAgICByZXR1cm4gbmFtZTsKICAgfSBlbHNlIHsKICAgICByZXR1cm4gIiI7CiAgIH0KQEAgLTM3NTEsNyArMzc1MSw4IEBACiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZpbGVuYW1lKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3RfcG9zID0gbmFtZS5yZmluZCgnLicpOwogICBpZiAoZG90X3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHJldHVybiBuYW1lLnN1YnN0cihkb3RfcG9zKTsKKyAgICBuYW1lLmVyYXNlKDAsIGRvdF9wb3MpOworICAgIHJldHVybiBuYW1lOwogICB9IGVsc2UgewogICAgIHJldHVybiAiIjsKICAgfQpAQCAtMzc2NywxMCArMzc2OCw5IEBACiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZpbGVuYW1lKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3RfcG9zID0gbmFtZS5maW5kKCcuJyk7CiAgIGlmIChkb3RfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIGRvdF9wb3MpOwotICB9IGVsc2UgewotICAgIHJldHVybiBuYW1lOworICAgIG5hbWUucmVzaXplKGRvdF9wb3MpOwogICB9CisgIHJldHVybiBuYW1lOwogfQogCiAvKioKQEAgLTM3ODQsMTAgKzM3ODQsOSBAQAogICBzdGQ6OnN0cmluZyBuYW1lID0gU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlbmFtZSk7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZG90X3BvcyA9IG5hbWUucmZpbmQoJy4nKTsKICAgaWYgKGRvdF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgZG90X3Bvcyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgbmFtZS5yZXNpemUoZG90X3Bvcyk7CiAgIH0KKyAgcmV0dXJuIG5hbWU7CiB9CiAKIGJvb2wgU3lzdGVtVG9vbHM6OkZpbGVIYXNTaWduYXR1cmUoY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSwKQEAgLTM4MzcsNyArMzgzNiw3IEBACiAKICAgLy8gQWxsb2NhdGUgYnVmZmVyIGFuZCByZWFkIGJ5dGVzCiAKLSAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNoYXJbbGVuZ3RoXTsKKyAgYXV0byogYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNoYXJbbGVuZ3RoXTsKICAgc2l6ZV90IHJlYWRfbGVuZ3RoID0gZnJlYWQoYnVmZmVyLCAxLCBsZW5ndGgsIGZwKTsKICAgZmNsb3NlKGZwKTsKICAgaWYgKHJlYWRfbGVuZ3RoID09IDApIHsKQEAgLTQwMDksNyArNDAwOCw4IEBACiAKICAgLy8gaWYgdGhlIHBhdGggcGFzc2VkIGluIGhhcyBxdW90ZXMgYXJvdW5kIGl0LCBmaXJzdCByZW1vdmUgdGhlIHF1b3RlcwogICBpZiAoIXBhdGguZW1wdHkoKSAmJiBwYXRoWzBdID09ICciJyAmJiBwYXRoLmJhY2soKSA9PSAnIicpIHsKLSAgICB0ZW1wUGF0aCA9IHBhdGguc3Vic3RyKDEsIHBhdGgubGVuZ3RoKCkgLSAyKTsKKyAgICB0ZW1wUGF0aC5yZXNpemUocGF0aC5sZW5ndGgoKSAtIDEpOworICAgIHRlbXBQYXRoLmVyYXNlKDAsIDEpOwogICB9CiAKICAgc3RkOjp3c3RyaW5nIHd0ZW1wUGF0aCA9IEVuY29kaW5nOjpUb1dpZGUodGVtcFBhdGgpOwpAQCAtNDIyOCw4ICs0MjI4LDggQEAKICAgaWYgKHN1YmRpcltleHBlY3RlZFNsYXNoUG9zaXRpb25dICE9ICcvJykgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBzdGQ6OnN0cmluZyBzID0gc3ViZGlyLnN1YnN0cigwLCBkaXIuc2l6ZSgpKTsKLSAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb21wYXJlUGF0aChzLCBkaXIpOworICBzdWJkaXIucmVzaXplKGRpci5zaXplKCkpOworICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvbXBhcmVQYXRoKHN1YmRpciwgZGlyKTsKIH0KIAogdm9pZCBTeXN0ZW1Ub29sczo6RGVsYXkodW5zaWduZWQgaW50IG1zZWMpCkBAIC00NTI1LDcgKzQ1MjUsNyBAQAogCiBib29sIFN5c3RlbVRvb2xzOjpQYXJzZVVSTFByb3RvY29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRhdGFnbG9tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWdsb20sIGJvb2wgZGVjb2RlKQogewogICAvLyBtYXRjaCAwIGVudGlyZSB1cmwKICAgLy8gbWF0Y2ggMSBwcm90b2NvbApAQCAtNDUzOCwxMyArNDUzOCwxNyBAQAogICBwcm90b2NvbCA9IHVybFJlLm1hdGNoKDEpOwogICBkYXRhZ2xvbSA9IHVybFJlLm1hdGNoKDIpOwogCisgIGlmIChkZWNvZGUpIHsKKyAgICBkYXRhZ2xvbSA9IERlY29kZVVSTChkYXRhZ2xvbSk7CisgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTeXN0ZW1Ub29sczo6UGFyc2VVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIFVSTCwgc3RkOjpzdHJpbmcmIHByb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OnN0cmluZyYgcGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgaG9zdG5hbWUsIHN0ZDo6c3RyaW5nJiBkYXRhcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhYmFzZSwgYm9vbCBkZWNvZGUpCiB7CiAgIGt3c3lzOjpSZWd1bGFyRXhwcmVzc2lvbiB1cmxSZShWVEtfVVJMX1JFR0VYKTsKICAgaWYgKCF1cmxSZS5maW5kKFVSTCkpCkBAIC00NTY4LDkgKzQ1NzIsMzUgQEAKICAgZGF0YXBvcnQgPSB1cmxSZS5tYXRjaCg4KTsKICAgZGF0YWJhc2UgPSB1cmxSZS5tYXRjaCg5KTsKIAorICBpZiAoZGVjb2RlKSB7CisgICAgdXNlcm5hbWUgPSBEZWNvZGVVUkwodXNlcm5hbWUpOworICAgIHBhc3N3b3JkID0gRGVjb2RlVVJMKHBhc3N3b3JkKTsKKyAgICBob3N0bmFtZSA9IERlY29kZVVSTChob3N0bmFtZSk7CisgICAgZGF0YXBvcnQgPSBEZWNvZGVVUkwoZGF0YXBvcnQpOworICAgIGRhdGFiYXNlID0gRGVjb2RlVVJMKGRhdGFiYXNlKTsKKyAgfQorCiAgIHJldHVybiB0cnVlOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6RGVjb2RlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpCit7CisgIGt3c3lzOjpSZWd1bGFyRXhwcmVzc2lvbiB1cmxCeXRlUmUoVlRLX1VSTF9CWVRFX1JFR0VYKTsKKyAgc3RkOjpzdHJpbmcgcmV0OworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVybC5sZW5ndGgoKTsgaSsrKSB7CisgICAgaWYgKHVybEJ5dGVSZS5maW5kKHVybC5zdWJzdHIoaSwgMykpKSB7CisgICAgICBjaGFyIGJ5dGVzW10gPSB7IHVybFtpICsgMV0sIHVybFtpICsgMl0sICdcMCcgfTsKKyAgICAgIHJldCArPSBzdGF0aWNfY2FzdDxjaGFyPihzdHJ0b3VsKGJ5dGVzLCBudWxscHRyLCAxNikpOworICAgICAgaSArPSAyOworICAgIH0gZWxzZSB7CisgICAgICByZXQgKz0gdXJsW2ldOworICAgIH0KKyAgfQorICByZXR1cm4gcmV0OworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBUaGVzZSBtdXN0IE5PVCBiZSBpbml0aWFsaXplZC4gIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gdG8gemVybyBpcwogLy8gbmVjZXNzYXJ5Lgogc3RhdGljIHVuc2lnbmVkIGludCBTeXN0ZW1Ub29sc01hbmFnZXJDb3VudDsKQEAgLTQ2NzgsOCArNDcwOCwxMiBAQAogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiBuYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFIHsKIAotc3RhdGljIGludCBTeXN0ZW1Ub29sc0RlYnVnUmVwb3J0KGludCwgY2hhciogbWVzc2FnZSwgaW50KikKK3N0YXRpYyBpbnQgU3lzdGVtVG9vbHNEZWJ1Z1JlcG9ydChpbnQsIGNoYXIqIG1lc3NhZ2UsIGludCogcmV0KQogeworICBpZiAocmV0KSB7CisgICAgLy8gUHJldGVuZCB1c2VyIGNsaWNrZWQgb24gUmV0cnkgYnV0dG9uIGluIHBvcHVwLgorICAgICpyZXQgPSAxOworICB9CiAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBtZXNzYWdlKTsKICAgZmZsdXNoKHN0ZGVycik7CiAgIHJldHVybiAxOyAvLyBubyBmdXJ0aGVyIHJlcG9ydGluZyByZXF1aXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5oeHguaW4KaW5kZXggYzRhYjlkNC4uZDRhOTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmh4eC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtVG9vbHMuaHh4LmluCkBAIC05MzUsMjIgKzkzNSwzMiBAQAogICAgKiBQYXJzZSBhIGNoYXJhY3RlciBzdHJpbmcgOgogICAgKiAgICAgICBwcm90b2NvbDovL2RhdGFnbG9tCiAgICAqIGFuZCBmaWxsIHByb3RvY29sIGFzIGFwcHJvcHJpYXRlLgorICAgKiBkZWNvZGUgdGhlIGRhdGFnbG9tIHVzaW5nIERlY29kZVVSTCBpZiBzZXQgdG8gdHJ1ZS4KICAgICogUmV0dXJuIGZhbHNlIGlmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSB0aGUgcmVxdWlyZWQgZm9ybSwgdHJ1ZSBvdGhlcndpc2UuCiAgICAqLwogICBzdGF0aWMgYm9vbCBQYXJzZVVSTFByb3RvY29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWdsb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhZ2xvbSwgYm9vbCBkZWNvZGUgPSBmYWxzZSk7CiAKICAgLyoqCiAgICAqIFBhcnNlIGEgc3RyaW5nIChhIFVSTCB3aXRob3V0IHByb3RvY29sIHByZWZpeCkgd2l0aCB0aGUgZm9ybToKICAgICogIHByb3RvY29sOi8vW1t1c2VybmFtZVsnOidwYXNzd29yZF0nQCddaG9zdG5hbWVbJzonZGF0YXBvcnRdXScvJ1tkYXRhcGF0aF0KICAgICogYW5kIGZpbGwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsIGRhdGFwb3J0LCBhbmQgZGF0YXBhdGgKICAgICogd2hlbiB2YWx1ZXMgYXJlIGZvdW5kLgorICAgKiBkZWNvZGUgYWxsIHN0cmluZyBleGNlcHQgdGhlIHByb3RvY29sIHVzaW5nIERlY29kZVVybCBpZiBzZXQgdG8gdHJ1ZS4KICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBtYXRjaGVzIHRoZSBmb3JtYXQ7IGZhbHNlIG90aGVyd2lzZS4KICAgICovCiAgIHN0YXRpYyBib29sIFBhcnNlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OnN0cmluZyYgcGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBob3N0bmFtZSwgc3RkOjpzdHJpbmcmIGRhdGFwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YXBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YXBhdGgsIGJvb2wgZGVjb2RlID0gZmFsc2UpOworCisgIC8qKgorICAgKiBEZWNvZGUgdGhlIHBlcmNlbnQtZW5jb2RlZCBzdHJpbmcgZnJvbSBhbiBVUkwgb3IgYW4gVVJJCisgICAqIGludG8gdGhlaXIgY29ycmVjdCBjaGFyIHZhbHVlcy4KKyAgICogRG9lcyBub3QgcGVyZm9ybSBhbnkgb3RoZXIgc29ydCBvZiB2YWxpZGF0aW9uLgorICAgKiBSZXR1cm4gdGhlIGRlY29kZWQgc3RyaW5nCisgICAqLworICBzdGF0aWMgc3RkOjpzdHJpbmcgRGVjb2RlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpOwogCiBwcml2YXRlOgogICAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9UZXJtaW5hbC5jIGIvU291cmNlL2t3c3lzL1Rlcm1pbmFsLmMKaW5kZXggNGRkMjQ2MS4uNGQxYjQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1Rlcm1pbmFsLmMKKysrIGIvU291cmNlL2t3c3lzL1Rlcm1pbmFsLmMKQEAgLTE0Niw2ICsxNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JlZW4tYmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NyZWVuLXciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JlZW4ubGludXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdC0yNTZjb2xvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRtdXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0bXV4LTI1NmNvbG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidnQxMDAiLApAQCAtMTcyLDYgKzE3MywxNCBAQAogICAgIH0KICAgfQogCisgIC8qIEdOVSBtYWtlIDQuMSsgbWF5IHRlbGwgdXMgdGhhdCBpdHMgb3V0cHV0IGlzIGRlc3RpbmVkIGZvciBhIFRUWS4gKi8KKyAgeworICAgIGNvbnN0IGNoYXIqIHRlcm1vdXQgPSBnZXRlbnYoIk1BS0VfVEVSTU9VVCIpOworICAgIGlmICh0ZXJtb3V0ICYmICp0ZXJtb3V0ICE9ICdcMCcpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCiAgIC8qIElmIHJ1bm5pbmcgaW5zaWRlIGVtYWNzIHRoZSB0ZXJtaW5hbCBpcyBub3QgVlQxMDAuICBTb21lIGVtYWNzCiAgICAgIHNlZW0gdG8gY2xhaW0gdGhlIFRFUk0gaXMgeHRlcm0gZXZlbiB0aG91Z2ggdGhleSBkbyBub3Qgc3VwcG9ydAogICAgICBWVDEwMCBlc2NhcGVzLiAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHMuY21ha2UgYi9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzLmNtYWtlCmluZGV4IDI4ZDNmNjguLjg5YmU0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHMuY21ha2UKKysrIGIvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZQpAQCAtMSwxODUgKzEsMTg1IEBACiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcja3dzeXMgZm9yIGRldGFpbHMuCiAKLVNFVChLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfQyBrd3N5c1BsYXRmb3JtVGVzdHNDLmMpCi1TRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFX0NYWCBrd3N5c1BsYXRmb3JtVGVzdHNDWFguY3h4KQorc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV9DIGt3c3lzUGxhdGZvcm1UZXN0c0MuYykKK3NldChLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfQ1hYIGt3c3lzUGxhdGZvcm1UZXN0c0NYWC5jeHgpCiAKLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX1RFU1QgbGFuZyB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQotICBJRihOT1QgREVGSU5FRCAke3Zhcn1fQ09NUElMRUQpCi0gICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKK21hY3JvKEtXU1lTX1BMQVRGT1JNX1RFU1QgbGFuZyB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQorICBpZihOT1QgREVGSU5FRCAke3Zhcn1fQ09NUElMRUQpCisgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKICAgICBzZXQobWF5YmVfY3h4X3N0YW5kYXJkICIiKQogICAgIGlmKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuOCBBTkQgQ01BS0VfQ1hYX1NUQU5EQVJEKQogICAgICAgc2V0KG1heWJlX2N4eF9zdGFuZGFyZCAiLURDTUFLRV9DWFhfU1RBTkRBUkQ9JHtDTUFLRV9DWFhfU1RBTkRBUkR9IikKICAgICBlbmRpZigpCi0gICAgVFJZX0NPTVBJTEUoJHt2YXJ9X0NPTVBJTEVECisgICAgdHJ5X2NvbXBpbGUoJHt2YXJ9X0NPTVBJTEVECiAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0tXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV8ke2xhbmd9fQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAtRFRFU1RfJHt2YXJ9ICR7S1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTfSAke0tXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1N9CiAgICAgICBDTUFLRV9GTEFHUyAiLURMSU5LX0xJQlJBUklFUzpTVFJJTkc9JHtLV1NZU19QTEFURk9STV9URVNUX0xJTktfTElCUkFSSUVTfSIKICAgICAgICAgICAgICAgICAgICR7bWF5YmVfY3h4X3N0YW5kYXJkfQogICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBGSUxFKEFQUEVORAorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgRUxTRSgpCi0gICAgICBGSUxFKEFQUEVORAorICAgIGVsc2UoKQorICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiJHtkZXNjcmlwdGlvbn0gZmFpbGVkIHRvIGNvbXBpbGUgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgIEVORElGKCkKLSAgICBJRigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCi0gICAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKLSAgICAgIEVMU0UoKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQotICAgICAgRU5ESUYoKQotICAgIEVMU0UoKQotICAgICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQotICAgICAgRUxTRSgpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKLSAgICAgIEVORElGKCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLSAgSUYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIFNFVCgke3Zhcn0gMCkKLSAgICBFTFNFKCkKLSAgICAgIFNFVCgke3Zhcn0gMSkKLSAgICBFTkRJRigpCi0gIEVMU0UoKQotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIFNFVCgke3Zhcn0gMSkKLSAgICBFTFNFKCkKLSAgICAgIFNFVCgke3Zhcn0gMCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORE1BQ1JPKCkKKyAgICBlbmRpZigpCisgICAgaWYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQorICAgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCisgICAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBzZXQoJHt2YXJ9IDApCisgICAgZWxzZSgpCisgICAgICBzZXQoJHt2YXJ9IDEpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBzZXQoJHt2YXJ9IDEpCisgICAgZWxzZSgpCisgICAgICBzZXQoJHt2YXJ9IDApCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRtYWNybygpCiAKLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX1RFU1RfUlVOIGxhbmcgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKLSAgSUYoTk9UIERFRklORUQgJHt2YXJ9KQotICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCi0gICAgVFJZX1JVTigke3Zhcn0gJHt2YXJ9X0NPTVBJTEVECittYWNybyhLV1NZU19QTEFURk9STV9URVNUX1JVTiBsYW5nIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCisgIGlmKE5PVCBERUZJTkVEICR7dmFyfSkKKyAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0iKQorICAgIHRyeV9ydW4oJHt2YXJ9ICR7dmFyfV9DT01QSUxFRAogICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfJHtsYW5nfX0KICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgLURURVNUXyR7dmFyfSAke0tXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FU30gJHtLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTfQogICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKIAogICAgICMgTm90ZSB0aGF0ICR7dmFyfSB3aWxsIGJlIGEgMCByZXR1cm4gdmFsdWUgb24gc3VjY2Vzcy4KLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBJRigke3Zhcn0pCi0gICAgICAgIEZJTEUoQVBQRU5ECisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgaWYoJHt2YXJ9KQorICAgICAgICBmaWxlKEFQUEVORAogICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgICAiJHtkZXNjcmlwdGlvbn0gY29tcGlsZWQgYnV0IGZhaWxlZCB0byBydW4gd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgICAgRUxTRSgpCi0gICAgICAgIEZJTEUoQVBQRU5ECisgICAgICBlbHNlKCkKKyAgICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBjb21waWxlZCBhbmQgcmFuIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICAgIEVORElGKCkKLSAgICBFTFNFKCkKLSAgICAgIEZJTEUoQVBQRU5ECisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBmaWxlKEFQUEVORAogICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBmYWlsZWQgdG8gY29tcGlsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBTRVQoJHt2YXJ9IC0xIENBQ0hFIElOVEVSTkFMICIke2Rlc2NyaXB0aW9ufSBmYWlsZWQgdG8gY29tcGlsZS4iKQotICAgIEVORElGKCkKKyAgICAgIHNldCgke3Zhcn0gLTEgQ0FDSEUgSU5URVJOQUwgIiR7ZGVzY3JpcHRpb259IGZhaWxlZCB0byBjb21waWxlLiIpCisgICAgZW5kaWYoKQogCi0gICAgSUYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQotICAgICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgICBJRigke3Zhcn0pCi0gICAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKLSAgICAgICAgRUxTRSgpCi0gICAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQotICAgICAgICBFTkRJRigpCi0gICAgICBFTFNFKCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gZmFpbGVkIHRvIGNvbXBpbGUiKQotICAgICAgRU5ESUYoKQotICAgIEVMU0UoKQotICAgICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgICBJRigke3Zhcn0pCi0gICAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQotICAgICAgICBFTFNFKCkKLSAgICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQotICAgICAgICBFTkRJRigpCi0gICAgICBFTFNFKCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gZmFpbGVkIHRvIGNvbXBpbGUiKQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQorICAgIGlmKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKKyAgICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgICAgaWYoJHt2YXJ9KQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZWxzZSgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGZhaWxlZCB0byBjb21waWxlIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgICAgaWYoJHt2YXJ9KQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZWxzZSgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGZhaWxlZCB0byBjb21waWxlIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAotICBJRigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgSUYoJHt2YXJ9KQotICAgICAgICBTRVQoJHt2YXJ9IDEpCi0gICAgICBFTFNFKCkKLSAgICAgICAgU0VUKCR7dmFyfSAwKQotICAgICAgRU5ESUYoKQotICAgIEVMU0UoKQotICAgICAgU0VUKCR7dmFyfSAxKQotICAgIEVORElGKCkKLSAgRUxTRSgpCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgSUYoJHt2YXJ9KQotICAgICAgICBTRVQoJHt2YXJ9IDApCi0gICAgICBFTFNFKCkKLSAgICAgICAgU0VUKCR7dmFyfSAxKQotICAgICAgRU5ESUYoKQotICAgIEVMU0UoKQotICAgICAgU0VUKCR7dmFyfSAwKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotRU5ETUFDUk8oKQorICBpZigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgaWYoJHt2YXJ9KQorICAgICAgICBzZXQoJHt2YXJ9IDEpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KCR7dmFyfSAwKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgc2V0KCR7dmFyfSAxKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgaWYoJHt2YXJ9KQorICAgICAgICBzZXQoJHt2YXJ9IDApCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KCR7dmFyfSAxKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgc2V0KCR7dmFyfSAwKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQogCi1NQUNSTyhLV1NZU19QTEFURk9STV9DX1RFU1QgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9ERUZJTkVTfSkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfRVhUUkFfRkxBR1N9KQorbWFjcm8oS1dTWVNfUExBVEZPUk1fQ19URVNUIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfREVGSU5FU30pCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0VYVFJBX0ZMQUdTfSkKICAgS1dTWVNfUExBVEZPUk1fVEVTVChDICIke3Zhcn0iICIke2Rlc2NyaXB0aW9ufSIgIiR7aW52ZXJ0fSIpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQotRU5ETUFDUk8oKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKK2VuZG1hY3JvKCkKIAotTUFDUk8oS1dTWVNfUExBVEZPUk1fQ19URVNUX1JVTiB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0RFRklORVN9KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9FWFRSQV9GTEFHU30pCittYWNybyhLV1NZU19QTEFURk9STV9DX1RFU1RfUlVOIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfREVGSU5FU30pCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0VYVFJBX0ZMQUdTfSkKICAgS1dTWVNfUExBVEZPUk1fVEVTVF9SVU4oQyAiJHt2YXJ9IiAiJHtkZXNjcmlwdGlvbn0iICIke2ludmVydH0iKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKLUVORE1BQ1JPKCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCitlbmRtYWNybygpCiAKLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTfSkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHU30pCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0xJTktfTElCUkFSSUVTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVN9KQorbWFjcm8oS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVN9KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTfSkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfTElOS19MSUJSQVJJRVMgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFU30pCiAgIEtXU1lTX1BMQVRGT1JNX1RFU1QoQ1hYICIke3Zhcn0iICIke2Rlc2NyaXB0aW9ufSIgIiR7aW52ZXJ0fSIpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9MSU5LX0xJQlJBUklFUykKLUVORE1BQ1JPKCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0xJTktfTElCUkFSSUVTKQorZW5kbWFjcm8oKQogCi1NQUNSTyhLV1NZU19QTEFURk9STV9DWFhfVEVTVF9SVU4gdmFyIGRlc2NyaXB0aW9uIGludmVydCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVN9KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTfSkKK21hY3JvKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX1JVTiB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfREVGSU5FU30pCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfRVhUUkFfRkxBR1N9KQogICBLV1NZU19QTEFURk9STV9URVNUX1JVTihDWFggIiR7dmFyfSIgIiR7ZGVzY3JpcHRpb259IiAiJHtpbnZlcnR9IikKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCi1FTkRNQUNSTygpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQorZW5kbWFjcm8oKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgS1dTWVNfUExBVEZPUk1fSU5GT19URVNUKGxhbmcgdmFyIGRlc2NyaXB0aW9uKQogIwogIyBDb21waWxlIHRlc3QgbmFtZWQgYnkgJHt2YXJ9IGFuZCBzdG9yZSBJTkZPIHN0cmluZ3MgZXh0cmFjdGVkIGZyb20gYmluYXJ5LgotTUFDUk8oS1dTWVNfUExBVEZPUk1fSU5GT19URVNUIGxhbmcgdmFyIGRlc2NyaXB0aW9uKQorbWFjcm8oS1dTWVNfUExBVEZPUk1fSU5GT19URVNUIGxhbmcgdmFyIGRlc2NyaXB0aW9uKQogICAjIFdlIGNhbiBpbXBsZW1lbnQgdGhpcyBtYWNybyBvbiBDTWFrZSAyLjYgYW5kIGFib3ZlLgotICBJRigiJHtDTUFLRV9NQUpPUl9WRVJTSU9OfS4ke0NNQUtFX01JTk9SX1ZFUlNJT059IiBMRVNTIDIuNikKLSAgICBTRVQoJHt2YXJ9ICIiKQotICBFTFNFKCkKKyAgaWYoIiR7Q01BS0VfTUFKT1JfVkVSU0lPTn0uJHtDTUFLRV9NSU5PUl9WRVJTSU9OfSIgTEVTUyAyLjYpCisgICAgc2V0KCR7dmFyfSAiIikKKyAgZWxzZSgpCiAgICAgIyBDaG9vc2UgYSBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdCBiaW5hcnkuCi0gICAgU0VUKEtXU1lTX1BMQVRGT1JNX0lORk9fRklMRQorICAgIHNldChLV1NZU19QTEFURk9STV9JTkZPX0ZJTEUKICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vJHt2YXJ9LmJpbikKIAogICAgICMgQ29tcGlsZSB0aGUgdGVzdCBiaW5hcnkuCi0gICAgSUYoTk9UIEVYSVNUUyAke0tXU1lTX1BMQVRGT1JNX0lORk9fRklMRX0pCi0gICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0iKQotICAgICAgVFJZX0NPTVBJTEUoJHt2YXJ9X0NPTVBJTEVECisgICAgaWYoTk9UIEVYSVNUUyAke0tXU1lTX1BMQVRGT1JNX0lORk9fRklMRX0pCisgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0iKQorICAgICAgdHJ5X2NvbXBpbGUoJHt2YXJ9X0NPTVBJTEVECiAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQogICAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfJHtsYW5nfX0KICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAtRFRFU1RfJHt2YXJ9CkBAIC0xODgsMjkgKzE4OCwyOSBAQAogICAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCiAgICAgICAgIENPUFlfRklMRSAke0tXU1lTX1BMQVRGT1JNX0lORk9fRklMRX0KICAgICAgICAgKQotICAgICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgICBGSUxFKEFQUEVORAorICAgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgICBmaWxlKEFQUEVORAogICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGNvbXBpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICAgIEVMU0UoKQotICAgICAgICBGSUxFKEFQUEVORAorICAgICAgZWxzZSgpCisgICAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBmYWlsZWQgdG8gY29tcGlsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBFTkRJRigpCi0gICAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGNvbXBpbGVkIikKLSAgICAgIEVMU0UoKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBmYWlsZWQiKQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gY29tcGlsZWQiKQorICAgICAgZWxzZSgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGZhaWxlZCIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQogCiAgICAgIyBQYXJzZSBpbmZvIHN0cmluZ3Mgb3V0IG9mIHRoZSBjb21waWxlZCBiaW5hcnkuCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgRklMRShTVFJJTkdTICR7S1dTWVNfUExBVEZPUk1fSU5GT19GSUxFfSAke3Zhcn0gUkVHRVggIklORk86W0EtWmEtejAtOV0rXFxbW15dXSpcXF0iKQotICAgIEVMU0UoKQotICAgICAgU0VUKCR7dmFyfSAiIikKLSAgICBFTkRJRigpCisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgZmlsZShTVFJJTkdTICR7S1dTWVNfUExBVEZPUk1fSU5GT19GSUxFfSAke3Zhcn0gUkVHRVggIklORk86W0EtWmEtejAtOV0rXFxbW15dXSpcXF0iKQorICAgIGVsc2UoKQorICAgICAgc2V0KCR7dmFyfSAiIikKKyAgICBlbmRpZigpCiAKLSAgICBTRVQoS1dTWVNfUExBVEZPUk1fSU5GT19GSUxFKQotICBFTkRJRigpCi1FTkRNQUNSTygpCisgICAgc2V0KEtXU1lTX1BMQVRGT1JNX0lORk9fRklMRSkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cy5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzLmN4eAppbmRleCAxNzc4YTliLi43OWViZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzLmN4eApAQCAtOTgsNyArOTgsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3RsX3N0cmluZ3NfYXJndW1lbnQ7CiAgIHN0ZDo6c3RyaW5nIHZhbGlkX3N0bF9zdHJpbmdzW10gPSB7ICJrZW4iLCAiYnJhZCIsICJiaWxsIiwgImFuZHkiIH07CiAKLSAgdHlwZWRlZiBrd3N5czo6Q29tbWFuZExpbmVBcmd1bWVudHMgYXJnVDsKKyAgdXNpbmcgYXJnVCA9IGt3c3lzOjpDb21tYW5kTGluZUFyZ3VtZW50czsKIAogICBhcmcuQWRkQXJndW1lbnQoIi0tc29tZS1pbnQtdmFyaWFibGUiLCBhcmdUOjpTUEFDRV9BUkdVTUVOVCwKICAgICAgICAgICAgICAgICAgICZzb21lX2ludF92YXJpYWJsZSwgIlNldCBzb21lIHJhbmRvbSBpbnQgdmFyaWFibGUiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eAppbmRleCA2NDU2MWIxLi5jYmMzMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzMS5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEuY3h4CkBAIC0yNSw3ICsyNSw3IEBACiAgIHN0ZDo6c3RyaW5nIHA7CiAgIGludCByZXMgPSAwOwogCi0gIHR5cGVkZWYga3dzeXM6OkNvbW1hbmRMaW5lQXJndW1lbnRzIGFyZ1Q7CisgIHVzaW5nIGFyZ1QgPSBrd3N5czo6Q29tbWFuZExpbmVBcmd1bWVudHM7CiAgIGFyZy5BZGRBcmd1bWVudCgiLW4iLCBhcmdUOjpTUEFDRV9BUkdVTUVOVCwgJm4sICJBcmd1bWVudCBOIik7CiAgIGFyZy5BZGRBcmd1bWVudCgiLW0iLCBhcmdUOjpFUVVBTF9BUkdVTUVOVCwgJm0sICJBcmd1bWVudCBNIik7CiAgIGFyZy5BZGRCb29sZWFuQXJndW1lbnQoIi1wIiwgJnAsICJBcmd1bWVudCBQIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdER5bmFtaWNMb2FkZXIuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3REeW5hbWljTG9hZGVyLmN4eAppbmRleCAyNDIxYWMwLi43MDNhZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdER5bmFtaWNMb2FkZXIuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0RHluYW1pY0xvYWRlci5jeHgKQEAgLTI1LDcgKzI1LDcgQEAKIHsKICAgLy8gQ29uc3RydWN0IHByb3BlciBuYW1lIG9mIGxpYgogICBzdGQ6OnN0cmluZyBzbG5hbWU7Ci0gIHNsbmFtZSA9IEVYRUNVVEFCTEVfT1VUUFVUX1BBVEg7CisgIHNsbmFtZSA9IFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWTsKICAgaWYgKHN1YmRpcikgewogICAgIHNsbmFtZSArPSAiLyI7CiAgICAgc2xuYW1lICs9IHN1YmRpcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0RW5jb2RpbmcuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHgKaW5kZXggOTg4Njk3Yi4uZDY3MmFlZCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHgKQEAgLTg1LDcgKzg1LDcgQEAKICAgc3RkOjp3c3RyaW5nIHdzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvV2lkZShjc3RyKTsKIAogICB3c3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb1dpZGUobnVsbHB0cik7Ci0gIGlmICh3c3RyICE9IEwiIikgeworICBpZiAoIXdzdHIuZW1wdHkoKSkgewogICAgIGNvbnN0IHdjaGFyX3QqIHdjc3RyID0gd3N0ci5jX3N0cigpOwogICAgIHN0ZDo6Y291dCA8PCAiVG9XaWRlKE5VTEwpIHJldHVybmVkIjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdzdHIuc2l6ZSgpOyBpKyspIHsKQEAgLTk1LDcgKzk1LDcgQEAKICAgICByZXQrKzsKICAgfQogICB3c3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb1dpZGUoIiIpOwotICBpZiAod3N0ciAhPSBMIiIpIHsKKyAgaWYgKCF3c3RyLmVtcHR5KCkpIHsKICAgICBjb25zdCB3Y2hhcl90KiB3Y3N0ciA9IHdzdHIuY19zdHIoKTsKICAgICBzdGQ6OmNvdXQgPDwgIlRvV2lkZShcIlwiKSByZXR1cm5lZCI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3c3RyLnNpemUoKTsgaSsrKSB7CkBAIC0xMTMsMTMgKzExMywxMyBAQAogI2VuZGlmCiAKICAgc3RkOjpzdHJpbmcgc3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb05hcnJvdyhudWxscHRyKTsKLSAgaWYgKHN0ciAhPSAiIikgeworICBpZiAoIXN0ci5lbXB0eSgpKSB7CiAgICAgc3RkOjpjb3V0IDw8ICJUb05hcnJvdyhOVUxMKSByZXR1cm5lZCAiIDw8IHN0ciA8PCBzdGQ6OmVuZGw7CiAgICAgcmV0Kys7CiAgIH0KIAogICBzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvTmFycm93KEwiIik7Ci0gIGlmICh3c3RyICE9IEwiIikgeworICBpZiAoIXdzdHIuZW1wdHkoKSkgewogICAgIHN0ZDo6Y291dCA8PCAiVG9OYXJyb3coXCJcIikgcmV0dXJuZWQgIiA8PCBzdHIgPDwgc3RkOjplbmRsOwogICAgIHJldCsrOwogICB9CkBAIC0xNDAsMTQgKzE0MCwxMyBAQAogICBzdHJpbmdzLnB1c2hfYmFjayhzdGQ6OnN0cmluZygiayIpICsgJ1wwJyArICdcMCcpOwogICBzdHJpbmdzLnB1c2hfYmFjayhzdGQ6OnN0cmluZygiXDBcMFwwXDAiLCA0KSArICJsbW4iICsKICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoIlwwXDBcMFwwIiwgNCkpOwotICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBzdHJpbmdzLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gc3RyaW5ncy5lbmQoKTsgKytpdCkgewotICAgIHN0ZDo6d3N0cmluZyB3c3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb1dpZGUoKml0KTsKKyAgZm9yIChhdXRvJiBzdHJpbmcgOiBzdHJpbmdzKSB7CisgICAgc3RkOjp3c3RyaW5nIHdzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvV2lkZShzdHJpbmcpOwogICAgIHN0ZDo6c3RyaW5nIHN0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9OYXJyb3cod3N0cik7Ci0gICAgc3RkOjpzdHJpbmcgcygqaXQpOworICAgIHN0ZDo6c3RyaW5nIHMoc3RyaW5nKTsKICAgICBzdGQ6OnJlcGxhY2Uocy5iZWdpbigpLCBzLmVuZCgpLCAnXDAnLCAnICcpOwotICAgIHN0ZDo6Y291dCA8PCAiJyIgPDwgcyA8PCAiJyAoIiA8PCBpdC0+c2l6ZSgpIDw8ICIpIiA8PCBzdGQ6OmVuZGw7Ci0gICAgaWYgKHN0ciAhPSAqaXQpIHsKKyAgICBzdGQ6OmNvdXQgPDwgIiciIDw8IHMgPDwgIicgKCIgPDwgc3RyaW5nLnNpemUoKSA8PCAiKSIgPDwgc3RkOjplbmRsOworICAgIGlmIChzdHIgIT0gc3RyaW5nKSB7CiAgICAgICBzdGQ6OnJlcGxhY2Uoc3RyLmJlZ2luKCksIHN0ci5lbmQoKSwgJ1wwJywgJyAnKTsKICAgICAgIHN0ZDo6Y291dCA8PCAic3RyaW5nIHdpdGggbnVsbCB3YXMgZGlmZmVyZW50OiAnIiA8PCBzdHIgPDwgIicgKCIKICAgICAgICAgICAgICAgICA8PCBzdHIuc2l6ZSgpIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdEhhc2hTVEwuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3RIYXNoU1RMLmN4eAppbmRleCA0ZWQyZjg5Li4xOGNhZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdEhhc2hTVEwuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0SGFzaFNUTC5jeHgKQEAgLTI3LDMwICsyNywzMCBAQAogCiBzdGF0aWMgYm9vbCB0ZXN0X2hhc2hfbWFwKCkKIHsKLSAgdHlwZWRlZiBrd3N5czo6aGFzaF9tYXA8Y29uc3QgY2hhciosIGludD4gbXR5cGU7CisgIHVzaW5nIG10eXBlID0ga3dzeXM6Omhhc2hfbWFwPGNvbnN0IGNoYXIqLCBpbnQ+OwogICBtdHlwZSBtOwogICBjb25zdCBjaGFyKiBrZXlzW10gPSB7ICJoZWxsbyIsICJ3b3JsZCIgfTsKICAgbVtrZXlzWzBdXSA9IDE7CiAgIG0uaW5zZXJ0KG10eXBlOjp2YWx1ZV90eXBlKGtleXNbMV0sIDIpKTsKICAgaW50IHN1bSA9IDA7Ci0gIGZvciAobXR5cGU6Oml0ZXJhdG9yIG1pID0gbS5iZWdpbigpOyBtaSAhPSBtLmVuZCgpOyArK21pKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJGb3VuZCBlbnRyeSBbIiA8PCBtaS0+Zmlyc3QgPDwgIiwiIDw8IG1pLT5zZWNvbmQgPDwgIl0iCisgIGZvciAoYXV0byYgbWkgOiBtKSB7CisgICAgc3RkOjpjb3V0IDw8ICJGb3VuZCBlbnRyeSBbIiA8PCBtaS5maXJzdCA8PCAiLCIgPDwgbWkuc2Vjb25kIDw8ICJdIgogICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgc3VtICs9IG1pLT5zZWNvbmQ7CisgICAgc3VtICs9IG1pLnNlY29uZDsKICAgfQogICByZXR1cm4gc3VtID09IDM7CiB9CiAKIHN0YXRpYyBib29sIHRlc3RfaGFzaF9zZXQoKQogewotICB0eXBlZGVmIGt3c3lzOjpoYXNoX3NldDxpbnQ+IHN0eXBlOworICB1c2luZyBzdHlwZSA9IGt3c3lzOjpoYXNoX3NldDxpbnQ+OwogICBzdHlwZSBzOwogICBzLmluc2VydCgxKTsKICAgcy5pbnNlcnQoMik7CiAgIGludCBzdW0gPSAwOwotICBmb3IgKHN0eXBlOjppdGVyYXRvciBzaSA9IHMuYmVnaW4oKTsgc2kgIT0gcy5lbmQoKTsgKytzaSkgewotICAgIHN0ZDo6Y291dCA8PCAiRm91bmQgZW50cnkgWyIgPDwgKnNpIDw8ICJdIiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3VtICs9ICpzaTsKKyAgZm9yIChpbnQgc2kgOiBzKSB7CisgICAgc3RkOjpjb3V0IDw8ICJGb3VuZCBlbnRyeSBbIiA8PCBzaSA8PCAiXSIgPDwgc3RkOjplbmRsOworICAgIHN1bSArPSBzaTsKICAgfQogICByZXR1cm4gc3VtID09IDM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuY3h4CmluZGV4IDFmM2ExNWIuLjY3MGU4ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuY3h4CkBAIC03MjEsOCArNzIxLDcgQEAKIHsKICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CiAgIHNzIDw8ICJ2ZWN0b3IoIjsKLSAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSB2ZWMuYmVnaW4oKTsKLSAgICAgICBpICE9IHZlYy5lbmQoKTsgKytpKSB7CisgIGZvciAoYXV0byBpID0gdmVjLmJlZ2luKCk7IGkgIT0gdmVjLmVuZCgpOyArK2kpIHsKICAgICBpZiAoaSAhPSB2ZWMuYmVnaW4oKSkgewogICAgICAgc3MgPDwgIiwgIjsKICAgICB9CkBAIC03NDMsMTYgKzc0MiwxNiBAQAogICBjb25zdCBjaGFyKiByZWdpc3RyeVBhdGggPSAiW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXE15QXBwOyBNeUtleV0iOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcmlnaW5hbFBhdGhzOwotICBvcmlnaW5hbFBhdGhzLnB1c2hfYmFjayhyZWdpc3RyeVBhdGgpOworICBvcmlnaW5hbFBhdGhzLmVtcGxhY2VfYmFjayhyZWdpc3RyeVBhdGgpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBlY3RlZFBhdGhzOwotICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjayhyZWdpc3RyeVBhdGgpOworICBleHBlY3RlZFBhdGhzLmVtcGxhY2VfYmFjayhyZWdpc3RyeVBhdGgpOwogI2lmZGVmIF9XSU4zMgogICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjaygiQzovU29tZXdoZXJlL3NvbWV0aGluZyIpOwogICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjaygiRDovVGVtcCIpOwogI2Vsc2UKLSAgZXhwZWN0ZWRQYXRocy5wdXNoX2JhY2soIi9Tb21ld2hlcmUvc29tZXRoaW5nIik7Ci0gIGV4cGVjdGVkUGF0aHMucHVzaF9iYWNrKCIvdG1wIik7CisgIGV4cGVjdGVkUGF0aHMuZW1wbGFjZV9iYWNrKCIvU29tZXdoZXJlL3NvbWV0aGluZyIpOworICBleHBlY3RlZFBhdGhzLmVtcGxhY2VfYmFjaygiL3RtcCIpOwogI2VuZGlmCiAKICAgYm9vbCByZXMgPSB0cnVlOwpAQCAtODE3LDcgKzgxNiw3IEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VhcmNoUGF0aHM7Ci0gIHNlYXJjaFBhdGhzLnB1c2hfYmFjayhURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVIpOworICBzZWFyY2hQYXRocy5lbXBsYWNlX2JhY2soVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSKTsKICAgaWYgKGt3c3lzOjpTeXN0ZW1Ub29sczo6RmluZEZpbGUodGVzdEZpbmRGaWxlTmFtZSwgc2VhcmNoUGF0aHMsIHRydWUpCiAgICAgICAgIC5lbXB0eSgpKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJQcm9ibGVtIHdpdGggRmluZEZpbGUgd2l0aG91dCBzeXN0ZW0gcGF0aHMgZm9yOiAiCkBAIC0xMDc0LDYgKzEwNzMsNDMgQEAKICAgICB9CiAgIH0KIAorICBpZiAoIWt3c3lzOjpTeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeSgiZGlyX2EiKSB8fAorICAgICAgIWt3c3lzOjpTeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeSgiZGlyX2IiKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmICgha3dzeXM6OlN5c3RlbVRvb2xzOjpDb3B5RmlsZUlmRGlmZmVyZW50KCJkaXJfYS8iLCAiZGlyX2IiKSkgeworICAgIHJldCA9IGZhbHNlOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgQ2hlY2tVUkxQYXJzaW5nKCkKK3sKKyAgYm9vbCByZXQgPSB0cnVlOworICBzdGQ6OnN0cmluZyB1cmwgPSAiaHR0cDovL3VzZXI6cHdAaG9zdG5hbWU6NDIvZnVsbC91cmwuY29tIjsKKworICBzdGQ6OnN0cmluZyBwcm90b2NvbCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBob3N0bmFtZSwgZGF0YXBvcnQsIGRhdGFiYXNlOworICBrd3N5czo6U3lzdGVtVG9vbHM6OlBhcnNlVVJMKHVybCwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXBvcnQsIGRhdGFiYXNlKTsKKyAgaWYgKHByb3RvY29sICE9ICJodHRwIiB8fCB1c2VybmFtZSAhPSAidXNlciIgfHwgcGFzc3dvcmQgIT0gInB3IiB8fAorICAgICAgaG9zdG5hbWUgIT0gImhvc3RuYW1lIiB8fCBkYXRhcG9ydCAhPSAiNDIiIHx8CisgICAgICBkYXRhYmFzZSAhPSAiZnVsbC91cmwuY29tIikgeworICAgIHN0ZDo6Y2VyciA8PCAiSW5jb3JyZWN0IFVSTCBwYXJzaW5nIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0ID0gZmFsc2U7CisgIH0KKworICBzdGQ6OnN0cmluZyB1cmkgPQorICAgICJmaWxlOi8vaG9zdG5hbWUvcGF0aC90by8iCisgICAgImElMjBmaWxlJTIwd2l0aCUyMHN0ciVDMyVBMG5nJUMzJUE4JTIwY2glNDByJTIwYW5kJTIwcyVDMiVCNWFjZXMiOworICBrd3N5czo6U3lzdGVtVG9vbHM6OlBhcnNlVVJMKHVyaSwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXBvcnQsIGRhdGFiYXNlLCB0cnVlKTsKKyAgaWYgKHByb3RvY29sICE9ICJmaWxlIiB8fCBob3N0bmFtZSAhPSAiaG9zdG5hbWUiIHx8CisgICAgICBkYXRhYmFzZSAhPSAicGF0aC90by9hIGZpbGUgd2l0aCBzdHLDoG5nw6ggY2hAciBhbmQgc8K1YWNlcyIpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkluY29ycmVjdCBVUkwgcGFyc2luZyBvciBkZWNvZGluZyIgPDwgc3RkOjplbmRsOworICAgIHJldCA9IGZhbHNlOworICB9CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTExMjQsNSArMTE2MCw3IEBACiAKICAgcmVzICY9IENoZWNrQ29weUZpbGVJZkRpZmZlcmVudCgpOwogCisgIHJlcyAmPSBDaGVja1VSTFBhcnNpbmcoKTsKKwogICByZXR1cm4gcmVzID8gMCA6IDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmguaW4gYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmguaW4KaW5kZXggMDIyZTM2ZS4uZTRiODlhNyAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5oLmluCisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuaC5pbgpAQCAtMyw3ICszLDcgQEAKICNpZm5kZWYgQEtXU1lTX05BTUVTUEFDRUBfdGVzdFN5c3RlbXRvb2xzX2gKICNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfdGVzdFN5c3RlbXRvb2xzX2gKIAotI2RlZmluZSBFWEVDVVRBQkxFX09VVFBVVF9QQVRIICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQCIKKyNkZWZpbmUgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQCIKIAogI2RlZmluZSBURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVIgIkBURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVJAIgogI2RlZmluZSBURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVIgIkBURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVJAIgpkaWZmIC0tZ2l0IGEvVGVtcGxhdGVzL01TQnVpbGQvRmxhZ1RhYmxlcy92MTBfQ3VkYS5qc29uIGIvVGVtcGxhdGVzL01TQnVpbGQvRmxhZ1RhYmxlcy92MTBfQ3VkYS5qc29uCmluZGV4IDE4MzFiOGEuLmIzMjMwYWMgMTAwNjQ0Ci0tLSBhL1RlbXBsYXRlcy9NU0J1aWxkL0ZsYWdUYWJsZXMvdjEwX0N1ZGEuanNvbgorKysgYi9UZW1wbGF0ZXMvTVNCdWlsZC9GbGFnVGFibGVzL3YxMF9DdWRhLmpzb24KQEAgLTIwLDYgKzIwLDI2IEBACiAgICAgXQogICB9LAogICB7CisgICAgIm5hbWUiOiAgIkFkZGl0aW9uYWxDb21waWxlck9wdGlvbnMiLAorICAgICJzd2l0Y2giOiAiLWNvbXBpbGVyLW9wdGlvbnM9IiwKKyAgICAiY29tbWVudCI6ICJIb3N0IGNvbXBpbGVyIG9wdGlvbnMiLAorICAgICJ2YWx1ZSI6ICIiLAorICAgICJmbGFncyI6IFsKKyAgICAgICJVc2VyVmFsdWUiLAorICAgICAgIlNwYWNlQXBwZW5kYWJsZSIKKyAgICBdCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICAiQWRkaXRpb25hbENvbXBpbGVyT3B0aW9ucyIsCisgICAgInN3aXRjaCI6ICItY29tcGlsZXItb3B0aW9ucyIsCisgICAgImNvbW1lbnQiOiAiSG9zdCBjb21waWxlciBvcHRpb25zIiwKKyAgICAidmFsdWUiOiAiIiwKKyAgICAiZmxhZ3MiOiBbCisgICAgICAiVXNlckZvbGxvd2luZyIsCisgICAgICAiU3BhY2VBcHBlbmRhYmxlIgorICAgIF0KKyAgfSwKKyAgewogICAgICJuYW1lIjogICJDdWRhUnVudGltZSIsCiAgICAgInN3aXRjaCI6ICJjdWRhcnQ9bm9uZSIsCiAgICAgImNvbW1lbnQiOiAiTm8gQ1VEQSBydW50aW1lIGxpYnJhcnkiLApkaWZmIC0tZ2l0IGEvVGVzdHMvQXNzZW1ibGVyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQXNzZW1ibGVyL0NNYWtlTGlzdHMudHh0CmluZGV4IDIxYjI2NWMuLmEzYzk5NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0Fzc2VtYmxlci9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Bc3NlbWJsZXIvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkIChWRVJTSU9OIDIuNikKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQgKFZFUlNJT04gMy44KQogcHJvamVjdChBc3NlbWJsZXIgQykKIG1lc3NhZ2UoIkNURVNUX0ZVTExfT1VUUFVUICIpCiBzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSAxKQpAQCAtMjIsNyArMjIsMTEgQEAKICAgICBzZXQoU1JDUyBtYWluLnMpCiAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgT1VUUFVUIG1haW4ucwotICAgICAgQ09NTUFORCAke0NNQUtFX0NfQ09NUElMRVJ9ICR7Q19GTEFHU30gLVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L21haW4uYyAtbyBtYWluLnMKKyAgICAgIENPTU1BTkQgJHtDTUFLRV9DX0NPTVBJTEVSfSAke0NfRkxBR1N9CisgICAgICAgICIkPCQ8Q09ORklHOkRlYnVnPjoke0NNQUtFX0NfQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWREZWJ1Z0RMTH0+IgorICAgICAgICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OiR7Q01BS0VfQ19DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZERMTH0+IgorICAgICAgICAtUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFpbi5jIC1vIG1haW4ucworICAgICAgQ09NTUFORF9FWFBBTkRfTElTVFMKICAgICAgIERFUEVORFMgbWFpbi5jCiAgICAgICBWRVJCQVRJTQogICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQnVpbGREZXBlbmRzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQnVpbGREZXBlbmRzL0NNYWtlTGlzdHMudHh0CmluZGV4IGMxYWQxN2MuLjVkZGFlODMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0J1aWxkRGVwZW5kcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9CdWlsZERlcGVuZHMvQ01ha2VMaXN0cy50eHQKQEAgLTM2OCw2ICszNjgsMjggQEAKICAgJHtURVNUX0xJTktfREVQRU5EU30KICIpCiAgIGVuZGlmKCkKKworICBzZXQobGlua2RlcDMgJHtCdWlsZERlcGVuZHNfQklOQVJZX0RJUn0vUHJvamVjdC9saW5rZGVwMyR7Q01BS0VfRVhFQ1VUQUJMRV9TVUZGSVh9KQorICBpZigke2xpbmtkZXAzfSBJU19ORVdFUl9USEFOICR7VEVTVF9MSU5LX0RFUEVORFN9KQorICAgIG1lc3NhZ2UoIiQ8TElOS19MQU5HVUFHRT4gaW4gTElOS19ERVBFTkRTIHdvcmtlZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiJDxMSU5LX0xBTkdVQUdFPiBpbiBMSU5LX0RFUEVORFMgZmFpbGVkLiAgRXhlY3V0YWJsZQorICAke2xpbmtkZXAzfQoraXMgbm90IG5ld2VyIHRoYW4gZGVwZW5kZW5jeQorICAke1RFU1RfTElOS19ERVBFTkRTfQorIikKKyAgZW5kaWYoKQorCisgIHNldChsaW5rZGVwNCAke0J1aWxkRGVwZW5kc19CSU5BUllfRElSfS9Qcm9qZWN0L2xpbmtkZXA0JHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0pCisgIGlmKCR7bGlua2RlcDR9IElTX05FV0VSX1RIQU4gJHtURVNUX0xJTktfREVQRU5EU30pCisgICAgbWVzc2FnZSgiJDxMSU5LX0xBTkdVQUdFPiBpbiBJTlRFUkZBQ0VfTElOS19ERVBFTkRTIHdvcmtlZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiJDxMSU5LX0xBTkdVQUdFPiBpbiBJTlRFUkZBQ0VfTElOS19ERVBFTkRTIGZhaWxlZC4gIEV4ZWN1dGFibGUKKyAgJHtsaW5rZGVwNH0KK2lzIG5vdCBuZXdlciB0aGFuIGRlcGVuZGVuY3kKKyAgJHtURVNUX0xJTktfREVQRU5EU30KKyIpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoRVhJU1RTICIke2xpbmtfZGVwZW5kc19ub19zaGFyZWRfY2hlY2tfdHh0fSIpCmRpZmYgLS1naXQgYS9UZXN0cy9CdWlsZERlcGVuZHMvUHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDgzMzg4MDAuLjgzNTgzYzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0CkBAIC0xMTgsNiArMTE4LDE0IEBACiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgZm9vX2ludGVyZmFjZSBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19ERVBFTkRTICQ8MToke1RFU1RfTElOS19ERVBFTkRTfT4pCiAgIGFkZF9leGVjdXRhYmxlKGxpbmtkZXAyIGxpbmtkZXAuY3h4KQogICB0YXJnZXRfbGlua19saWJyYXJpZXMobGlua2RlcDIgUFJJVkFURSBmb29faW50ZXJmYWNlKQorCisgIGFkZF9leGVjdXRhYmxlKGxpbmtkZXAzIGxpbmtkZXAuY3h4KQorICBzZXRfcHJvcGVydHkoVEFSR0VUIGxpbmtkZXAzIFBST1BFUlRZIExJTktfREVQRU5EUyAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7VEVTVF9MSU5LX0RFUEVORFN9PikKKworICBhZGRfbGlicmFyeShmb29faW50ZXJmYWNlMiBJTlRFUkZBQ0UpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgZm9vX2ludGVyZmFjZTIgUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfREVQRU5EUyAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7VEVTVF9MSU5LX0RFUEVORFN9PikKKyAgYWRkX2V4ZWN1dGFibGUobGlua2RlcDQgbGlua2RlcC5jeHgpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsaW5rZGVwNCBQUklWQVRFIGZvb19pbnRlcmZhY2UyKQogZW5kaWYoKQogCiBhZGRfbGlicmFyeShsaW5rX2RlcGVuZHNfbm9fc2hhcmVkX2xpYiBTSEFSRUQgbGlua19kZXBlbmRzX25vX3NoYXJlZF9saWIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ0ZCdW5kbGVUZXN0L1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL0NGQnVuZGxlVGVzdC9WZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggZTYzN2JiMS4uYWMxNGU1ZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ0ZCdW5kbGVUZXN0L1ZlcmlmeVJlc3VsdC5jbWFrZQorKysgYi9UZXN0cy9DRkJ1bmRsZVRlc3QvVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0xNCw3ICsxNCw3IEBACiBtZXNzYWdlKFNUQVRVUyAiZGlyPScke2Rpcn0nIikKIG1lc3NhZ2UoU1RBVFVTICJnZW49JyR7Z2VufSciKQogCi1pZihnZW4gU1RSRVFVQUwgIlhjb2RlIikKK2lmKGdlbiBNQVRDSEVTICJeKFhjb2RlJHxOaW5qYSBNdWx0aS1Db25maWckKSIpCiAgIHNldChleHBlY3RlZF9maWxlbmFtZSAiJHtkaXJ9LyR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfS9DRkJ1bmRsZVRlc3QucGx1Z2luL0NvbnRlbnRzL01hY09TL0NGQnVuZGxlVGVzdCIpCiBlbHNlKCkKICAgc2V0KGV4cGVjdGVkX2ZpbGVuYW1lICIke2Rpcn0vQ0ZCdW5kbGVUZXN0LnBsdWdpbi9Db250ZW50cy9NYWNPUy9DRkJ1bmRsZVRlc3QiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VDb21tYW5kcy90YXJnZXRfbGlua19saWJyYXJpZXMvU3ViRGlyQi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlQ29tbWFuZHMvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1N1YkRpckIvQ01ha2VMaXN0cy50eHQKaW5kZXggN2M5MThlNi4uMDZkMTExMSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VDb21tYW5kcy90YXJnZXRfbGlua19saWJyYXJpZXMvU3ViRGlyQi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZUNvbW1hbmRzL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdWJEaXJCL0NNYWtlTGlzdHMudHh0CkBAIC0yLDcgKzIsMTEgQEAKIAogIyBMaW5rIHRvIGEgdGFyZ2V0IGltcG9ydGVkIGluIHRoaXMgZGlyZWN0b3J5IHRoYXQgd291bGQgbm90IG5vcm1hbGx5CiAjIGJlIHZpc2libGUgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBUb3BEaXIgaXMgZGVmaW5lZC4KLXRhcmdldF9saW5rX2xpYnJhcmllcyhUb3BEaXIgUFVCTElDIFNhbWVOYW1lSW1wb3J0ZWQpCit0YXJnZXRfbGlua19saWJyYXJpZXMoVG9wRGlyIFBVQkxJQyBkZWJ1ZyBTYW1lTmFtZUltcG9ydGVkIG9wdGltaXplZCBTYW1lTmFtZUltcG9ydGVkKQorCisjIExpbmsgdG8gYSBsaXN0IG9mIHRhcmdldHMgaW1wb3J0ZWQgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCB3b3VsZCBub3QKKyMgbm9ybWFsbHkgYmUgdmlzaWJsZSB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIFRvcERpciBpcyBkZWZpbmVkLgordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRvcERpciBQVUJMSUMgIiQ8MTpTYW1lTmFtZUltcG9ydGVkO1NhbWVOYW1lSW1wb3J0ZWQ+IikKIAogIyBMaW5rIFN1YkRpckEgdG8gYSB0YXJnZXQgaW1wb3J0ZWQgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlIHNhbWUKICMgbmFtZSBhcyBhIHRhcmdldCBpbXBvcnRlZCBpbiBTdWJEaXJBJ3MgZGlyZWN0b3J5LiAgV2UgdmVyaWZ5IHdoZW4KZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VMaWIvQ01ha2VMaXN0cy50eHQKaW5kZXggODQwYWZjMS4uYmI1MGQ3NiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VMaWIvQ01ha2VMaXN0cy50eHQKQEAgLTExLDYgKzExLDcgQEAKICAgdGVzdENUZXN0UmVzb3VyY2VBbGxvY2F0b3IuY3h4CiAgIHRlc3RDVGVzdFJlc291cmNlU3BlYy5jeHgKICAgdGVzdENUZXN0UmVzb3VyY2VHcm91cHMuY3h4CisgIHRlc3RHY2NEZXBmaWxlUmVhZGVyLmN4eAogICB0ZXN0R2VuZXJhdGVkRmlsZVN0cmVhbS5jeHgKICAgdGVzdFJTVC5jeHgKICAgdGVzdFJhbmdlLmN4eApAQCAtMjUsNiArMjYsOCBAQAogICB0ZXN0VVZQcm9jZXNzQ2hhaW4uY3h4CiAgIHRlc3RVVlJBSUkuY3h4CiAgIHRlc3RVVlN0cmVhbWJ1Zi5jeHgKKyAgdGVzdENNRXh0TWVtb3J5LmN4eAorICB0ZXN0Q01FeHRBbGdvcml0aG0uY3h4CiAgICkKIAogYWRkX2V4ZWN1dGFibGUodGVzdFVWUHJvY2Vzc0NoYWluSGVscGVyIHRlc3RVVlByb2Nlc3NDaGFpbkhlbHBlci5jeHgpCkBAIC0zMyw2ICszNiw3IEBACiBzZXQodGVzdFVWUHJvY2Vzc0NoYWluX0FSR1MgJDxUQVJHRVRfRklMRTp0ZXN0VVZQcm9jZXNzQ2hhaW5IZWxwZXI+KQogc2V0KHRlc3RVVlN0cmVhbWJ1Zl9BUkdTICQ8VEFSR0VUX0ZJTEU6Y21ha2U+KQogc2V0KHRlc3RDVGVzdFJlc291cmNlU3BlY19BUkdTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKK3NldCh0ZXN0R2NjRGVwZmlsZVJlYWRlcl9BUkdTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKIAogaWYoV0lOMzIpCiAgIGxpc3QoQVBQRU5EIENNYWtlTGliX1RFU1RTCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0Q01FeHRBbGdvcml0aG0uY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdENNRXh0QWxnb3JpdGhtLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODMxOWMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdENNRXh0QWxnb3JpdGhtLmN4eApAQCAtMCwwICsxLDExOCBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKworbmFtZXNwYWNlIHsKKworaW50IGZhaWxlZCA9IDA7CisKK3ZvaWQgdGVzdEFwcGVuZCgpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdEFwcGVuZCgpIiA8PCBzdGQ6OmVuZGw7CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBjbTo6YXBwZW5kKFZlY3RvciwgSXRlcmF0b3IsIEl0ZXJhdG9yKQorICB7CisgICAgc3RkOjp2ZWN0b3I8aW50PiB2MXsgMSwgMiwgMyB9OworICAgIHN0ZDo6dmVjdG9yPGludD4gdjFfcmVmeyAxLCAyLCAzLCA0LCA1LCA2IH07CisgICAgc3RkOjp2ZWN0b3I8aW50PiB2MnsgNCwgNSwgNiB9OworICAgIHN0ZDo6dmVjdG9yPGludD4gdjJfcmVmeyA0LCA1LCA2IH07CisKKyAgICBjbTo6YXBwZW5kKHYxLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSk7CisKKyAgICBpZiAodjEgIT0gdjFfcmVmIHx8IHYyICE9IHYyX3JlZikgeworICAgICAgKytmYWlsZWQ7CisgICAgfQorICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBjbTo6YXBwZW5kKFZlY3RvciwgUmFuZ2UpCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYxeyAxLCAyLCAzIH07CisgICAgc3RkOjp2ZWN0b3I8aW50PiB2MV9yZWZ7IDEsIDIsIDMsIDQsIDUsIDYgfTsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYyeyA0LCA1LCA2IH07CisgICAgc3RkOjp2ZWN0b3I8aW50PiB2Ml9yZWZ7IDQsIDUsIDYgfTsKKworICAgIGNtOjphcHBlbmQodjEsIHYyKTsKKworICAgIGlmICh2MSAhPSB2MV9yZWYgfHwgdjIgIT0gdjJfcmVmKSB7CisgICAgICArK2ZhaWxlZDsKKyAgICB9CisgIH0KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGNtOjphcHBlbmQoVmVjdG9yPCo+LCBWZWN0b3I8dW5pcXVlX3B0cj4pCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxpbnQqPiB2MXsgbmV3IGludCgxKSwgbmV3IGludCgyKSwgbmV3IGludCgzKSB9OworICAgIHN0ZDo6dmVjdG9yPGludCo+IHYxX3JlZiA9IHYxOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+PiB2MjsKKworICAgIHYyLmVtcGxhY2VfYmFjayhuZXcgaW50KDQpKTsKKyAgICB2Mi5lbXBsYWNlX2JhY2sobmV3IGludCg1KSk7CisgICAgdjIuZW1wbGFjZV9iYWNrKG5ldyBpbnQoNikpOworCisgICAgY206OmFwcGVuZCh2MSwgdjIpOworCisgICAgaWYgKHYxLnNpemUoKSA9PSA2ICYmIHYyLnNpemUoKSA9PSAzKSB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICBpZiAodjFbaV0gIT0gdjFfcmVmW2ldKSB7CisgICAgICAgICAgKytmYWlsZWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIGlmICh2MVtpICsgM10gIT0gdjJbaV0uZ2V0KCkpIHsKKyAgICAgICAgICArK2ZhaWxlZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICArK2ZhaWxlZDsKKyAgICB9CisKKyAgICAvLyBmcmVlIG1lbW9yeSB0byBwbGVhc2UgbWVtb3J5IHNhbml0aXplcgorICAgIGRlbGV0ZSB2MVswXTsKKyAgICBkZWxldGUgdjFbMV07CisgICAgZGVsZXRlIHYxWzJdOworICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBjbTo6YXBwZW5kKFZlY3Rvcjx1bmlxdWVfcHRyPiwgVmVjdG9yPHVuaXF1ZV9wdHI+KQorICB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGludD4+IHYxOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+PiB2MjsKKworICAgIHYxLmVtcGxhY2VfYmFjayhuZXcgaW50KDEpKTsKKyAgICB2MS5lbXBsYWNlX2JhY2sobmV3IGludCgyKSk7CisgICAgdjEuZW1wbGFjZV9iYWNrKG5ldyBpbnQoMykpOworCisgICAgdjIuZW1wbGFjZV9iYWNrKG5ldyBpbnQoNCkpOworICAgIHYyLmVtcGxhY2VfYmFjayhuZXcgaW50KDUpKTsKKyAgICB2Mi5lbXBsYWNlX2JhY2sobmV3IGludCg2KSk7CisKKyAgICBjbTo6YXBwZW5kKHYxLCBzdGQ6Om1vdmUodjIpKTsKKworICAgIGlmICh2MS5zaXplKCkgPT0gNiAmJiB2Mi5lbXB0eSgpKSB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgeworICAgICAgICBpZiAoKnYxW2ldICE9IGkgKyAxKSB7CisgICAgICAgICAgKytmYWlsZWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgKytmYWlsZWQ7CisgICAgfQorICB9Cit9Cit9CisKK2ludCB0ZXN0Q01FeHRBbGdvcml0aG0oaW50IC8qdW51c2VkKi8sIGNoYXIqIC8qdW51c2VkKi8gW10pCit7CisgIHRlc3RBcHBlbmQoKTsKKworICByZXR1cm4gZmFpbGVkOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdENNRXh0TWVtb3J5LmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RDTUV4dE1lbW9yeS5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2M2MxNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RDTUV4dE1lbW9yeS5jeHgKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKworI2luY2x1ZGUgPGNtZXh0L21lbW9yeT4KKworbmFtZXNwYWNlIHsKK2NsYXNzIEJhc2UKK3sKK3B1YmxpYzoKKyAgdmlydHVhbCB+QmFzZSgpID0gZGVmYXVsdDsKK307CisKK2NsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZQoreworcHVibGljOgorICB+RGVyaXZlZCgpID0gZGVmYXVsdDsKKworICB2b2lkIG1ldGhvZCgpIHt9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdyYXBwZXIKK3sKK3B1YmxpYzoKKyAgV3JhcHBlcihUKiB2KQorICAgIDogdmFsdWUodikKKyAgeworICB9CisgIH5XcmFwcGVyKCkgeyBkZWxldGUgdmFsdWU7IH0KKworICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiB2YWx1ZTsgfQorCitwcml2YXRlOgorICBUKiB2YWx1ZTsKK307CisKK2Jvb2wgdGVzdFJlZmVyZW5jZUNhc3QoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RSZWZlcmVuY2VDYXN0KCkiIDw8IHN0ZDo6ZW5kbDsKKworICBzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4gdShuZXcgRGVyaXZlZCk7CisgIGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RGVyaXZlZD4odSkubWV0aG9kKCk7CisgIGNtOjpkeW5hbWljX3JlZmVyZW5jZV9jYXN0PERlcml2ZWQ+KHUpLm1ldGhvZCgpOworCisgIHN0ZDo6c2hhcmVkX3B0cjxCYXNlPiBzKG5ldyBEZXJpdmVkKTsKKyAgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxEZXJpdmVkPihzKS5tZXRob2QoKTsKKyAgY206OmR5bmFtaWNfcmVmZXJlbmNlX2Nhc3Q8RGVyaXZlZD4ocykubWV0aG9kKCk7CisKKyAgLy8gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGN1c3RvbSB3cmFwcGVycworICBXcmFwcGVyPEJhc2U+IHcobmV3IERlcml2ZWQpOworICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PERlcml2ZWQ+KHcpLm1ldGhvZCgpOworICBjbTo6ZHluYW1pY19yZWZlcmVuY2VfY2FzdDxEZXJpdmVkPih3KS5tZXRob2QoKTsKKworICByZXR1cm4gdHJ1ZTsKK30KK30KKworaW50IHRlc3RDTUV4dE1lbW9yeShpbnQgLyp1bnVzZWQqLywgY2hhciogLyp1bnVzZWQqLyBbXSkKK3sKKyAgaWYgKCF0ZXN0UmVmZXJlbmNlQ2FzdCgpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyLmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjRkODdiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXIuY3h4CkBAIC0wLDAgKzEsMTMxIEBACisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCisKKyNpbmNsdWRlICJjbUdjY0RlcGZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJjbUdjY0RlcGZpbGVSZWFkZXJUeXBlcy5oIiAvLyBmb3IgY21HY2NEZXBmaWxlQ29udGVudCwgY21HY2NTdHlsZS4uLgorI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKworbmFtZXNwYWNlIHsKKworY21HY2NEZXBmaWxlQ29udGVudCByZWFkUGxhaW5EZXBmaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQoreworICBjbUdjY0RlcGZpbGVDb250ZW50IHJlc3VsdDsKKyAgY21zeXM6Omlmc3RyZWFtIGlzKGZpbGVQYXRoKTsKKyAgaWYgKCFpcy5pc19vcGVuKCkpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgc3RkOjpzdHJpbmcgbGluZTsKKworICBjbUdjY1N0eWxlRGVwZW5kZW5jeSBkZXA7CisgIGJvb2wgcmVhZGluZ1J1bGVzID0gdHJ1ZTsKKyAgd2hpbGUgKGNtU3lzdGVtVG9vbHM6OkdldExpbmVGcm9tU3RyZWFtKGlzLCBsaW5lKSkgeworICAgIGlmIChsaW5lID09ICItLVJVTEVTLS0iKSB7CisgICAgICBpZiAoIWRlcC5ydWxlcy5lbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RkOjptb3ZlKGRlcCkpOworICAgICAgICBkZXAgPSBjbUdjY1N0eWxlRGVwZW5kZW5jeSgpOworICAgICAgfQorICAgICAgcmVhZGluZ1J1bGVzID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGxpbmUgPT0gIi0tREVQRU5ERU5DSUVTLS0iKSB7CisgICAgICByZWFkaW5nUnVsZXMgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkc3QgPSByZWFkaW5nUnVsZXMgPyBkZXAucnVsZXMgOiBkZXAucGF0aHM7CisgICAgICBkc3QucHVzaF9iYWNrKHN0ZDo6bW92ZShsaW5lKSk7CisgICAgICBsaW5lID0gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisgIH0KKworICBpZiAoIWRlcC5ydWxlcy5lbXB0eSgpKSB7CisgICAgcmVzdWx0LnB1c2hfYmFjayhzdGQ6Om1vdmUoZGVwKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGNvbXBhcmUoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhY3R1YWwsCisgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBleHBlY3RlZCwgY29uc3QgY2hhciogbXNnKQoreworICBpZiAoYWN0dWFsLnNpemUoKSAhPSBleHBlY3RlZC5zaXplKCkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgbXNnIDw8ICJleHBlY3RlZCAiIDw8IGV4cGVjdGVkLnNpemUoKSA8PCAiIGVudHJpZXMuIgorICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwKKyAgICAgICAgICAgICAgPDwgIkFjdHVhbCBudW1iZXIgb2YgZW50cmllczogIiA8PCBhY3R1YWwuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGFjdHVhbC5zaXplKCk7ICsraSkgeworICAgIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBtc2cgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgICAgPDwgImV4cGVjdGVkOiAiIDw8IGV4cGVjdGVkW2ldIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICAgIDw8ICJhY3R1YWw6ICIgPDwgYWN0dWFsW2ldIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY29tcGFyZShjb25zdCBjbUdjY0RlcGZpbGVDb250ZW50JiBhY3R1YWwsCisgICAgICAgICAgICAgY29uc3QgY21HY2NEZXBmaWxlQ29udGVudCYgZXhwZWN0ZWQpCit7CisgIGlmIChhY3R1YWwuc2l6ZSgpICE9IGV4cGVjdGVkLnNpemUoKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRXhwZWN0ZWQgIiA8PCBleHBlY3RlZC5zaXplKCkgPDwgIiBlbnRyaWVzLiIgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgIDw8ICJBY3R1YWwgbnVtYmVyIG9mIGVudHJpZXM6ICIgPDwgYWN0dWFsLnNpemUoKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBhY3R1YWwuc2l6ZSgpOyArK2kpIHsKKyAgICBpZiAoIWNvbXBhcmUoYWN0dWFsW2ldLnJ1bGVzLCBleHBlY3RlZFtpXS5ydWxlcywgIlJ1bGVzIGRpZmZlcjogIikgfHwKKyAgICAgICAgIWNvbXBhcmUoYWN0dWFsW2ldLnBhdGhzLCBleHBlY3RlZFtpXS5wYXRocywgIlBhdGhzIGRpZmZlcjogIikpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCwgY29uc3QgY21HY2NEZXBmaWxlQ29udGVudCYgZGZjKQoreworICBzdGQ6OmNlcnIgPDwgbGFiZWwgPDwgc3RkOjplbmRsOworICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZGZjKSB7CisgICAgYXV0byByaXQgPSBlbnRyeS5ydWxlcy5jYmVnaW4oKTsKKyAgICBpZiAocml0ICE9IGVudHJ5LnJ1bGVzLmNlbmQoKSkgeworICAgICAgc3RkOjpjZXJyIDw8ICpyaXQ7CisgICAgICBmb3IgKCsrcml0OyByaXQgIT0gZW50cnkucnVsZXMuY2VuZCgpOyArK3JpdCkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgIiA8PCAqcml0OworICAgICAgfQorICAgICAgc3RkOjpjZXJyIDw8ICI6ICIgPDwgc3RkOjplbmRsOworICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBlbnRyeS5wYXRocykgeworICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBwYXRoIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCB0ZXN0R2NjRGVwZmlsZVJlYWRlcihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICBpZiAoYXJnYyA8IDIpIHsKKyAgICBzdGQ6OmNvdXQgPDwgIkludmFsaWQgYXJndW1lbnRzLlxuIjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzdGQ6OnN0cmluZyBkYXRhRGlyUGF0aCA9IGFyZ3ZbMV07CisgIGRhdGFEaXJQYXRoICs9ICIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YSI7CisgIGNvbnN0IGludCBudW1iZXJPZlRlc3RGaWxlcyA9IDM7CisgIGZvciAoaW50IGkgPSAxOyBpIDw9IG51bWJlck9mVGVzdEZpbGVzOyArK2kpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBiYXNlID0gZGF0YURpclBhdGggKyAiL2RlcHMiICsgc3RkOjp0b19zdHJpbmcoaSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZGVwZmlsZSA9IGJhc2UgKyAiLmQiOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBsYWluRGVwZmlsZSA9IGJhc2UgKyAiLnR4dCI7CisgICAgc3RkOjpjb3V0IDw8ICJDb21wYXJpbmcgIiA8PCBiYXNlIDw8ICIgd2l0aCAiIDw8IHBsYWluRGVwZmlsZSA8PCBzdGQ6OmVuZGw7CisgICAgY29uc3QgYXV0byBhY3R1YWwgPSBjbVJlYWRHY2NEZXBmaWxlKGRlcGZpbGUuY19zdHIoKSk7CisgICAgY29uc3QgYXV0byBleHBlY3RlZCA9IHJlYWRQbGFpbkRlcGZpbGUocGxhaW5EZXBmaWxlLmNfc3RyKCkpOworICAgIGlmICghY29tcGFyZShhY3R1YWwsIGV4cGVjdGVkKSkgeworICAgICAgZHVtcCgiYWN0dWFsIiwgYWN0dWFsKTsKKyAgICAgIGR1bXAoImV4cGVjdGVkIiwgZXhwZWN0ZWQpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMxLmQgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMxLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzNDg2MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczEuZApAQCAtMCwwICsxLDIwIEBACittYWluLm86IG1haW4uY3BwIC91c3IvaW5jbHVkZS9zdGRjLXByZWRlZi5oIC91c3IvaW5jbHVkZS9zdGRpby5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL2xpYmMtaGVhZGVyLXN0YXJ0LmggXAorIC91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L3N5cy9jZGVmcy5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3dvcmRzaXplLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvbG9uZy1kb3VibGUuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvZ251L3N0dWJzLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2dudS9zdHVicy02NC5oIFwKKyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS84L2luY2x1ZGUvc3RkZGVmLmggXAorIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzgvaW5jbHVkZS9zdGRhcmcuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzaXplcy5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL19fZnBvc190LmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvX19tYnN0YXRlX3QuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy9fX2Zwb3M2NF90LmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvX19GSUxFLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvRklMRS5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL3N0cnVjdF9GSUxFLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvY29va2llX2lvX2Z1bmN0aW9uc190LmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvc3RkaW9fbGltLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvc3lzX2Vycmxpc3QuaApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMS50eHQgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDI2NzlmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMS50eHQKQEAgLTAsMCArMSwyNiBAQAorLS1SVUxFUy0tCittYWluLm8KKy0tREVQRU5ERU5DSUVTLS0KK21haW4uY3BwCisvdXNyL2luY2x1ZGUvc3RkYy1wcmVkZWYuaAorL3Vzci9pbmNsdWRlL3N0ZGlvLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvbGliYy1oZWFkZXItc3RhcnQuaAorL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L3N5cy9jZGVmcy5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3dvcmRzaXplLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvbG9uZy1kb3VibGUuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvZ251L3N0dWJzLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2dudS9zdHVicy02NC5oCisvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS84L2luY2x1ZGUvc3RkZGVmLmgKKy91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzgvaW5jbHVkZS9zdGRhcmcuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzaXplcy5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL19fZnBvc190LmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvX19tYnN0YXRlX3QuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy9fX2Zwb3M2NF90LmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvX19GSUxFLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvRklMRS5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL3N0cnVjdF9GSUxFLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvY29va2llX2lvX2Z1bmN0aW9uc190LmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvc3RkaW9fbGltLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvc3lzX2Vycmxpc3QuaApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMi5kIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMi5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjBkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMyLmQKQEAgLTAsMCArMSBAQAorZm9vLm8gYmFyLm86IGZvb2Jhci5jCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMyLnR4dCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYWY3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMyLnR4dApAQCAtMCwwICsxLDUgQEAKKy0tUlVMRVMtLQorZm9vLm8KK2Jhci5vCistLURFUEVOREVOQ0lFUy0tCitmb29iYXIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMy5kIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWNlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMzLmQKQEAgLTAsMCArMSwyIEBACittYWluLm86IG1haW4uY3BwIGZvb1wjYmFyLmggZm9vXFwjYmFyLmggZm9vXCBiYXIuaCBcCisgZm9vXFxcIGJhci5oIGZvb1xcXFxcIGJhci5oIGZvb1xcXFwgZm9vJCRiYXIuaApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMy50eHQgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhmNjljCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMy50eHQKQEAgLTAsMCArMSwxMSBAQAorLS1SVUxFUy0tCittYWluLm8KKy0tREVQRU5ERU5DSUVTLS0KK21haW4uY3BwCitmb28jYmFyLmgKK2Zvb1wjYmFyLmgKK2ZvbyBiYXIuaAorZm9vXCBiYXIuaAorZm9vXFwgYmFyLmgKK2Zvb1xcXFwKK2ZvbyRiYXIuaApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFN0cmluZy5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eAppbmRleCBkN2IzMjAwLi4xZmQzZjM4IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eApAQCAtMTkxLDcgKzE5MSw3IEBACiB7CiAgIHN0ZDo6Y291dCA8PCAidGVzdENvbnN0cnVjdEZyb21WaWV3KClcbiI7CiAgIGNtOjpzdHJpbmdfdmlldyB2aWV3ID0gY3N0cjsKLSAgcmV0dXJuIHRlc3RGcm9tQ1N0cih2aWV3KTsKKyAgcmV0dXJuIHRlc3RGcm9tQ1N0cihjbTo6U3RyaW5nKHZpZXcpKTsKIH0KIAogc3RhdGljIGJvb2wgdGVzdEFzc2lnbkZyb21WaWV3KCkKQEAgLTI5Nyw3ICsyOTcsNyBAQAogc3RhdGljIGJvb2wgdGVzdENvbnN0cnVjdEZyb21TdGF0aWNTdHJpbmdWaWV3KCkKIHsKICAgc3RkOjpjb3V0IDw8ICJ0ZXN0Q29uc3RydWN0RnJvbVN0YXRpY1N0cmluZ1ZpZXcoKVxuIjsKLSAgcmV0dXJuIHRlc3RGcm9tU3RhdGljU3RyaW5nVmlldyhzdGF0aWNTdHJpbmdWaWV3KTsKKyAgcmV0dXJuIHRlc3RGcm9tU3RhdGljU3RyaW5nVmlldyhjbTo6U3RyaW5nKHN0YXRpY1N0cmluZ1ZpZXcpKTsKIH0KIAogc3RhdGljIGJvb2wgdGVzdEFzc2lnbkZyb21TdGF0aWNTdHJpbmdWaWV3KCkKQEAgLTc5Niw3ICs3OTYsNyBAQAogc3RhdGljIGJvb2wgdGVzdE1ldGhvZF9zdWJzdHJfQXRFbmRCb3Jyb3dlZCgpCiB7CiAgIHN0ZDo6Y291dCA8PCAidGVzdE1ldGhvZF9zdWJzdHJfQXRFbmRCb3Jyb3dlZCgpXG4iOwotICByZXR1cm4gdGVzdE1ldGhvZF9zdWJzdHJfQXRFbmQoImFiYyJfcyk7CisgIHJldHVybiB0ZXN0TWV0aG9kX3N1YnN0cl9BdEVuZChjbTo6U3RyaW5nKCJhYmMiX3MpKTsKIH0KIAogc3RhdGljIGJvb2wgdGVzdE1ldGhvZF9zdWJzdHJfQXRFbmRPd25lZCgpCkBAIC04NTUsNyArODU1LDcgQEAKIHN0YXRpYyBib29sIHRlc3RNZXRob2Rfc3Vic3RyX0F0U3RhcnRCb3Jyb3dlZCgpCiB7CiAgIHN0ZDo6Y291dCA8PCAidGVzdE1ldGhvZF9zdWJzdHJfQXRTdGFydEJvcnJvd2VkKClcbiI7Ci0gIHJldHVybiB0ZXN0TWV0aG9kX3N1YnN0cl9BdFN0YXJ0KCJhYmMiX3MpOworICByZXR1cm4gdGVzdE1ldGhvZF9zdWJzdHJfQXRTdGFydChjbTo6U3RyaW5nKCJhYmMiX3MpKTsKIH0KIAogc3RhdGljIGJvb2wgdGVzdE1ldGhvZF9zdWJzdHJfQXRTdGFydE93bmVkKCkKQEAgLTExNDYsNyArMTE0Niw3IEBACiBzdGF0aWMgYm9vbCB0ZXN0U3RhYmlsaXR5KCkKIHsKICAgc3RkOjpjb3V0IDw8ICJ0ZXN0U3RhYmlsaXR5KClcbiI7Ci0gIGNtOjpTdHJpbmcgc3RyID0gImFiYyJfczsKKyAgY206OlN0cmluZyBzdHIoImFiYyJfcyk7CiAgIEFTU0VSVF9UUlVFKCFzdHIuaXNfc3RhYmxlKCkpOwogICBBU1NFUlRfVFJVRShzdHIuc3RyX2lmX3N0YWJsZSgpID09IG51bGxwdHIpOwogICBzdHIuc3RhYmlsaXplKCk7CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVRGOC5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVRGOC5jeHgKaW5kZXggOTg2ZjU5NS4uMWJmODhjZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVURjguY3h4CisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RVVEY4LmN4eApAQCAtOSw5ICs5LDExIEBACiBzdGF0aWMgdm9pZCB0ZXN0X3V0ZjhfY2hhcl9wcmludCh0ZXN0X3V0ZjhfY2hhciBjb25zdCBjKQogewogICB1bnNpZ25lZCBjaGFyIGNvbnN0KiBkID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyIGNvbnN0Kj4oYyk7CisjaWZuZGVmIF9fY2xhbmdfYW5hbHl6ZXJfXyAvLyBzb21laG93IHRoaW5rcyBhcmd1bWVudHMgYXJlIG5vdCBpbml0aWFsaXplZAogICBwcmludGYoIlsweCUwMlgsMHglMDJYLDB4JTAyWCwweCUwMlhdIiwgc3RhdGljX2Nhc3Q8aW50PihkWzBdKSwKICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oZFsxXSksIHN0YXRpY19jYXN0PGludD4oZFsyXSksCiAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGRbM10pKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBieXRlX2FycmF5X3ByaW50KGNoYXIgY29uc3QqIHMpCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IDU3ZmE3ZmMuLjY0MjgyMzUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlTGlzdHMudHh0CkBAIC0yMTEsNiArMjExLDEzIEBACiAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIyBBZGQgdGVzdHMgYmVsb3cgaGVyZS4KIAorICBpZihOT1QgREVGSU5FRCBDTWFrZV9URVNUX1F0NSkKKyAgICBzZXQoQ01ha2VfVEVTVF9RdDUgMSkKKyAgZW5kaWYoKQorICBpZihDTWFrZV9URVNUX1F0NSkKKyAgICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCBOT19NT0RVTEUpCisgIGVuZGlmKCkKKwogICBpZihOT1QgQ01ha2VfVEVTVF9FWFRFUk5BTF9DTUFLRSkKICAgICBhZGRfc3ViZGlyZWN0b3J5KENNYWtlTGliKQogCkBAIC00MzYsNyArNDQzLDkgQEAKICAgQUREX1RFU1RfTUFDUk8oQXNzZW1ibGVyIEhlbGxvQXNtKQogICBBRERfVEVTVF9NQUNSTyhTb3VyY2VHcm91cHMgU291cmNlR3JvdXBzKQogICBBRERfVEVTVF9NQUNSTyhQcmVwcm9jZXNzIFByZXByb2Nlc3MpCi0gIHNldChFeHBvcnRJbXBvcnRfQlVJTERfT1BUSU9OUyAtRENNYWtlX1RFU1RfTkVTVEVEX01BS0VfUFJPR1JBTTpGSUxFUEFUSD0ke0NNYWtlX1RFU1RfRVhQTElDSVRfTUFLRV9QUk9HUkFNfSkKKyAgc2V0KEV4cG9ydEltcG9ydF9CVUlMRF9PUFRJT05TIC1EQ01ha2VfVEVTVF9ORVNURURfTUFLRV9QUk9HUkFNOkZJTEVQQVRIPSR7Q01ha2VfVEVTVF9FWFBMSUNJVF9NQUtFX1BST0dSQU19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRENNYWtlX1RFU1RfQ1VEQTpCT09MPSR7Q01ha2VfVEVTVF9DVURBfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICBBRERfVEVTVF9NQUNSTyhFeHBvcnRJbXBvcnQgRXhwb3J0SW1wb3J0KQogICBBRERfVEVTVF9NQUNSTyhVbnNldCBVbnNldCkKICAgQUREX1RFU1RfTUFDUk8oUG9saWN5U2NvcGUgUG9saWN5U2NvcGUpCkBAIC00NTEsOCArNDYwLDEyIEBACiAgIEFERF9URVNUX01BQ1JPKFN0YWdpbmdQcmVmaXggU3RhZ2luZ1ByZWZpeCkKICAgQUREX1RFU1RfTUFDUk8oSW1wb3J0ZWRTYW1lTmFtZSBJbXBvcnRlZFNhbWVOYW1lKQogICBBRERfVEVTVF9NQUNSTyhJbnRlcmZhY2VMaWJyYXJ5IEludGVyZmFjZUxpYnJhcnkpCi0gIGlmKE5PVCBfaXNNdWx0aUNvbmZpZykKLSAgICBzZXQoQ29uZmlnU291cmNlc19CVUlMRF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT0kPENPTkZJR1VSQVRJT04+KQorICBpZihOT1QgQ01BS0VfR0VORVJBVE9SIFNUUkVRVUFMICJYY29kZSIpCisgICAgaWYoX2lzTXVsdGlDb25maWcpCisgICAgICBzZXQoQ29uZmlnU291cmNlc19DVEVTVF9PUFRJT05TIC0tYnVpbGQtY29uZmlnICQ8Q09ORklHVVJBVElPTj4pCisgICAgZWxzZSgpCisgICAgICBzZXQoQ29uZmlnU291cmNlc19CVUlMRF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT0kPENPTkZJR1VSQVRJT04+KQorICAgIGVuZGlmKCkKICAgICBBRERfVEVTVF9NQUNSTyhDb25maWdTb3VyY2VzIENvbmZpZ1NvdXJjZXMpCiAgIGVuZGlmKCkKICAgQUREX1RFU1RfTUFDUk8oU291cmNlc1Byb3BlcnR5IFNvdXJjZXNQcm9wZXJ0eSkKQEAgLTk3Niw2ICs5ODksMjcgQEAKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAorICAjIE9uIFdpbmRvd3MgcnVuIHRoZSBDUGFja05TSVNHZW5lcmF0b3IgdGVzdAorICAjIGlmIHRoZSBuc2lzIGlzIGF2YWlsYWJsZQorICBpZihXSU4zMiBBTkQgTlNJU19NQUtFTlNJU19FWEVDVVRBQkxFKQorICAgIGFkZF90ZXN0KENQYWNrTlNJU0dlbmVyYXRvciAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgICAtQyBcJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9CisgICAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IiCisgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IiCisgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgICAgLS1idWlsZC1wcm9qZWN0IENQYWNrTlNJU0dlbmVyYXRvcgorICAgICAgLS1idWlsZC1vcHRpb25zCisgICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NNQUtFX0NPTU1BTkR9CisgICAgICAgICItRENQYWNrTlNJU0dlbmVyYXRvcl9CSU5BUllfRElSOlBBVEg9JHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IiCisgICAgICAgICItRGNvbmZpZz1cJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9IgorICAgICAgICAtUCAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UiKQorCisgICAgc2V0X3Byb3BlcnR5KFRFU1QgQ1BhY2tOU0lTR2VuZXJhdG9yIFBST1BFUlRZCisgICAgICBBVFRBQ0hFRF9GSUxFU19PTl9GQUlMCisgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvX0NQYWNrX1BhY2thZ2VzL3dpbjMyL05TSVMvTlNJU091dHB1dC5sb2ciKQorICBlbmRpZigpCisKICAgaWYoQ1RFU1RfVEVTVF9DUEFDSykKICAgICBhZGRfdGVzdChDUGFja1VzZURlZmF1bHRWZXJzaW9uICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KICAgICAgIC0tYnVpbGQtYW5kLXRlc3QKQEAgLTExMjgsOCArMTE2Miw4IEBACiAKICAgICAgIGZvcmVhY2goQ1BhY2tERUJDb25maWd1cmF0aW9uIElOIExJU1RTIERFQl9DT05GSUdVUkFUSU9OU19UT19URVNUKQogICAgICAgICBzZXQoQ1BhY2tSdW5fQ1BhY2tERUJDb25maWd1cmF0aW9uICItRENQYWNrREVCQ29uZmlndXJhdGlvbj0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0iKQotICAgICAgICBhZGRfdGVzdCgke0RFQl9URVNUX05BTUVTfS0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0KLSAgICAgICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIFwke0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRX0KKyAgICAgICAgYWRkX3Rlc3QoTkFNRSAke0RFQl9URVNUX05BTUVTfS0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0gQ09NTUFORAorICAgICAgICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUc+CiAgICAgICAgICAgLS1idWlsZC1hbmQtdGVzdAogICAgICAgICAgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy8ke0RFQl9URVNUX05BTUVTfSIKICAgICAgICAgICAgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvJHtERUJfVEVTVF9OQU1FU30vYnVpbGQke0NQYWNrR2VufS0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0iCkBAIC0xMTQ2LDYgKzExODAsNyBAQAogICAgICAgICAgICAgICAiLUQke0RFQl9URVNUX05BTUVTfV9CSU5BUllfRElSOlBBVEg9JHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke0RFQl9URVNUX05BTUVTfS9idWlsZCR7Q1BhY2tHZW59LSR7Q1BhY2tERUJDb25maWd1cmF0aW9ufSIKICAgICAgICAgICAgICAgIiR7Q1BhY2tSdW5fQ1BhY2tHZW59IgogICAgICAgICAgICAgICAiJHtDUGFja1J1bl9DUGFja0RFQkNvbmZpZ3VyYXRpb259IgorICAgICAgICAgICAgICAiLURDT05GSUc9JDxDT05GSUc+IgogICAgICAgICAgICAgICAtUCAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy8ke0RFQl9URVNUX05BTUVTfS9SdW5DUGFja1ZlcmlmeVJlc3VsdC0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0uY21ha2UiKQogICAgICAgICAgIGxpc3QoQVBQRU5EIFRFU1RfQlVJTERfRElSUyAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke0RFQl9URVNUX05BTUVTfS9idWlsZCR7Q1BhY2tHZW59LSR7Q1BhY2tERUJDb25maWd1cmF0aW9ufSIpCiAgICAgICBlbmRmb3JlYWNoKCkKQEAgLTEzMjUsMTIgKzEzNjAsNiBAQAogICAgICkKICAgbGlzdChBUFBFTkQgVEVTVF9CVUlMRF9ESVJTICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1F0QXV0b21vY05vUXQiKQogCi0gIGlmKE5PVCBERUZJTkVEIENNYWtlX1RFU1RfUXQ1KQotICAgIHNldChDTWFrZV9URVNUX1F0NSAxKQotICBlbmRpZigpCi0gIGlmKENNYWtlX1RFU1RfUXQ1KQotICAgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkKLSAgZW5kaWYoKQogICBpZihDTWFrZV9URVNUX1F0NSBBTkQgUXQ1V2lkZ2V0c19GT1VORCkKICAgICBhZGRfc3ViZGlyZWN0b3J5KFF0NUF1dG9nZW4pCiAgIGVuZGlmKCkKQEAgLTE0MDEsNiArMTQzMCw3IEBACiAgICAgICAgICAgICBJQ1UKICAgICAgICAgICAgIEpQRUcKICAgICAgICAgICAgIEpzb25DcHAKKyAgICAgICAgICAgIExpYkFyY2hpdmUKICAgICAgICAgICAgIExpYkxaTUEKICAgICAgICAgICAgIExpYlJIYXNoCiAgICAgICAgICAgICBMaWJpbnB1dApAQCAtMTQ0MCw3ICsxNDcwLDcgQEAKICAgICBhZGRfc3ViZGlyZWN0b3J5KEdvb2dsZVRlc3QpCiAgIGVuZGlmKCkKIAotICBpZihDTWFrZV9URVNUX0ZpbmRQeXRob24gT1IgQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5KQorICBpZihDTWFrZV9URVNUX0ZpbmRQeXRob24gT1IgQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5IE9SIENNYWtlX1RFU1RfRmluZFB5dGhvbl9Db25kYSkKICAgICBhZGRfc3ViZGlyZWN0b3J5KEZpbmRQeXRob24pCiAgIGVuZGlmKCkKIApAQCAtMTQ0OCw2ICsxNDc4LDEwIEBACiAgICAgYWRkX3N1YmRpcmVjdG9yeShVc2VTV0lHKQogICBlbmRpZigpCiAKKyAgaWYoQ01ha2VfVEVTVF9GaW5kUnVieSkKKyAgICBhZGRfc3ViZGlyZWN0b3J5KEZpbmRSdWJ5KQorICBlbmRpZigpCisKICAgYWRkX3N1YmRpcmVjdG9yeShGaW5kVGhyZWFkcykKIAogICAjIE1hdGxhYiBtb2R1bGUKQEAgLTE1NzUsNyArMTYwOSw3IEBACiAgICAgREVQRU5EUyBFeHRlcm5hbFByb2plY3RVcGRhdGVTZXR1cCApCiAKICAgIyBkbyBlYWNoIG9mIHRoZSB0dXRvcmlhbCBzdGVwcwotICBmdW5jdGlvbihhZGRfdHV0b3JpYWxfdGVzdCBzdGVwX25hbWUgdXNlX215bWF0aCkKKyAgZnVuY3Rpb24oYWRkX3R1dG9yaWFsX3Rlc3Qgc3RlcF9uYW1lIHVzZV9teW1hdGggdHV0b3JpYWxfYXJnIHBhc3NfcmVnZXgpCiAgICAgc2V0KHR1dG9yaWFsX3Rlc3RfbmFtZSBUdXRvcmlhbCR7c3RlcF9uYW1lfSkKICAgICBzZXQodHV0b3JpYWxfYnVpbGRfZGlyICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1R1dG9yaWFsLyR7c3RlcF9uYW1lfSIpCiAgICAgaWYgKHVzZV9teW1hdGgpCkBAIC0xNTg2LDI1ICsxNjIwLDM1IEBACiAgICAgICBzZXQodHV0b3JpYWxfYnVpbGRfb3B0aW9ucyAtRFVTRV9NWU1BVEg6Qk9PTD1PRkYpCiAgICAgZW5kaWYoKQogICAgIGFkZF90ZXN0KCR7dHV0b3JpYWxfdGVzdF9uYW1lfSAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgICAtQyAiUmVsZWFzZSIKICAgICAgIC0tYnVpbGQtYW5kLXRlc3QKICAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L0hlbHAvZ3VpZGUvdHV0b3JpYWwvJHtzdGVwX25hbWV9IgogICAgICAgJHt0dXRvcmlhbF9idWlsZF9kaXJ9X0J1aWxkCiAgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQogICAgICAgLS1idWlsZC1wcm9qZWN0IFR1dG9yaWFsCiAgICAgICAtLWJ1aWxkLW9wdGlvbnMgJHt0dXRvcmlhbF9idWlsZF9vcHRpb25zfQotICAgICAgLS10ZXN0LWNvbW1hbmQgVHV0b3JpYWwgMjUuMCkKKyAgICAgIC0tdGVzdC1jb21tYW5kIFR1dG9yaWFsICR7dHV0b3JpYWxfYXJnfSkKKyAgICBzZXRfdGVzdHNfcHJvcGVydGllcygke3R1dG9yaWFsX3Rlc3RfbmFtZX0gUFJPUEVSVElFUworICAgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gJHtwYXNzX3JlZ2V4fSkKKwogICAgIGxpc3QoQVBQRU5EIFRFU1RfQlVJTERfRElSUyAiJHtDTWFrZV9CSU5BUllfRElSfS8ke3R1dG9yaWFsX2J1aWxkX2Rpcn1fQnVpbGQiKQogICBlbmRmdW5jdGlvbigpCiAKICAgaWYoTk9UIENNYWtlX1RFU1RfRVhURVJOQUxfQ01BS0UpCi0gICAgZm9yZWFjaChTVFAgUkFOR0UgMiAxMSkKLSAgICAgIGFkZF90dXRvcmlhbF90ZXN0KFN0ZXAke1NUUH0gVFJVRSkKKyAgICBmb3JlYWNoKFNUUCBSQU5HRSAyIDEyKQorICAgICAgaWYgKFNUUCBFUVVBTCA2KQorICAgICAgICBzZXQocGFzc19yZWdleCAiLip1c2luZyBsb2cgYW5kIGV4cCIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KHBhc3NfcmVnZXggIlRoZSBzcXVhcmUgcm9vdCBvZiAyNSBpcyA1IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGFkZF90dXRvcmlhbF90ZXN0KFN0ZXAke1NUUH0gVFJVRSAyNSAke3Bhc3NfcmVnZXh9KQogICAgIGVuZGZvcmVhY2goKQotICAgIGFkZF90dXRvcmlhbF90ZXN0KENvbXBsZXRlIFRSVUUpCi0gICAgZm9yZWFjaChTVFAgUkFOR0UgMyAxMSkKLSAgICAgIGFkZF90dXRvcmlhbF90ZXN0KFN0ZXAke1NUUH0gRkFMU0UpCisgICAgc2V0KHBhc3NfcmVnZXggIlRoZSBzcXVhcmUgcm9vdCBvZiAyNSBpcyA1IikKKyAgICBhZGRfdHV0b3JpYWxfdGVzdChDb21wbGV0ZSBUUlVFIDI1ICR7cGFzc19yZWdleH0pCisgICAgZm9yZWFjaChTVFAgUkFOR0UgMyAxMikKKyAgICAgIGFkZF90dXRvcmlhbF90ZXN0KFN0ZXAke1NUUH0gRkFMU0UgMjUgJHtwYXNzX3JlZ2V4fSkKICAgICBlbmRmb3JlYWNoKCkKLSAgICBhZGRfdHV0b3JpYWxfdGVzdChDb21wbGV0ZSBGQUxTRSkKKyAgICBhZGRfdHV0b3JpYWxfdGVzdChDb21wbGV0ZSBGQUxTRSAyNSAke3Bhc3NfcmVnZXh9KQogICBlbmRpZigpCiAKICAgYWRkX3Rlc3QodGVzdGluZyAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIFwke0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRX0KQEAgLTE4NjEsNyArMTkwNSw3IEBACiAgIEFERF9URVNUX01BQ1JPKENoZWNrQ29tcGlsZXJSZWxhdGVkVmFyaWFibGVzIENoZWNrQ29tcGlsZXJSZWxhdGVkVmFyaWFibGVzKQogCiAgIGlmKCIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIk1ha2VmaWxlIiBPUgotICAgICAiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJOaW5qYSIpCisgICAgICIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIl5OaW5qYSQiKQogICAgIGFkZF90ZXN0KE1ha2VDbGVhbiAke0NNQUtFX0NURVNUX0NPTU1BTkR9CiAgICAgICAtLWJ1aWxkLWFuZC10ZXN0CiAgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9NYWtlQ2xlYW4iCkBAIC0zMzkyLDE3ICszNDM2LDYgQEAKICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyAoIEtERUxpYnNBbHBoYTEgUFJPUEVSVElFUyBUSU1FT1VUIDU0MDApCiAgIGVuZGlmKCkKIAotICAjIElmIHRoaXMgaXMgbm90IGFuIGluLXNvdXJjZSBidWlsZCwgcHJvdmlkZSBhIHRhcmdldCB0byB3aXBlIG91dAotICAjIGFsbCB0aGUgdGVzdCBidWlsZCBkaXJlY3Rvcmllcy4KLSAgaWYoTk9UIEVYSVNUUyAiJHtDTWFrZV9CSU5BUllfRElSfS9DTWFrZUxpc3RzLnR4dCIpCi0gICAgY29uZmlndXJlX2ZpbGUoJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy90ZXN0X2NsZWFuLmNtYWtlLmluCi0gICAgICAgICAgICAgICAgICAgJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy90ZXN0X2NsZWFuLmNtYWtlIEBPTkxZKQotICAgIGFkZF9jdXN0b21fdGFyZ2V0KHRlc3RfY2xlYW4KLSAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtUCAke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL3Rlc3RfY2xlYW4uY21ha2UKLSAgICAgIENPTU1FTlQgIlJlbW92aW5nIHRlc3QgYnVpbGQgZGlyZWN0b3JpZXMuIgotICAgICAgKQotICBlbmRpZigpCi0KICAgIyBEZWZpbmUgYSBzZXQgb2YgImNvbnRyYWN0IiB0ZXN0cywgZWFjaCBhY3RpdmF0ZWQgYnkgYSBjYWNoZSBlbnRyeQogICAjIG5hbWVkICJDTWFrZV9URVNUX0NPTlRSQUNUXzxwcm9qZWN0PiIuICBGb3IgZWFjaCBDb250cmFjdCB0ZXN0LAogICAjIHRoZSBwcm9qZWN0IHNob3VsZCBwcm92aWRlIGEgZGlyZWN0b3J5IHdpdGggYSBDTWFrZUxpc3RzLnR4dCBmaWxlCkBAIC0zNDc3LDQgKzM1MTAsMTYgQEAKICAgaWYoTk9UIENNYWtlX1RFU1RfRVhURVJOQUxfQ01BS0UpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShDTWFrZVRlc3RzKQogICBlbmRpZigpCisKKyAgIyBJZiB0aGlzIGlzIG5vdCBhbiBpbi1zb3VyY2UgYnVpbGQsIHByb3ZpZGUgYSB0YXJnZXQgdG8gd2lwZSBvdXQKKyAgIyBhbGwgdGhlIHRlc3QgYnVpbGQgZGlyZWN0b3JpZXMuIFRoaXMgbXVzdCBjb21lIGF0IHRoZSBlbmQgYWZ0ZXIKKyAgIyBhbGwgdGhlIGFib3ZlIGxvZ2ljIGhhcyBmaW5pc2hlZCBhZGRpbmcgdG8gVEVTVF9CVUlMRF9ESVJTCisgIGlmKE5PVCBFWElTVFMgIiR7Q01ha2VfQklOQVJZX0RJUn0vQ01ha2VMaXN0cy50eHQiKQorICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvdGVzdF9jbGVhbi5jbWFrZS5pbgorICAgICAgICAgICAgICAgICAgICR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvdGVzdF9jbGVhbi5jbWFrZSBAT05MWSkKKyAgICBhZGRfY3VzdG9tX3RhcmdldCh0ZXN0X2NsZWFuCisgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy90ZXN0X2NsZWFuLmNtYWtlCisgICAgICBDT01NRU5UICJSZW1vdmluZyB0ZXN0IGJ1aWxkIGRpcmVjdG9yaWVzLiIKKyAgICAgICkKKyAgZW5kaWYoKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L0FsbEZpbmRNb2R1bGVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VPbmx5L0FsbEZpbmRNb2R1bGVzL0NNYWtlTGlzdHMudHh0CmluZGV4IGE1M2U0NDEuLjQ5YTQwNDEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlT25seS9BbGxGaW5kTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZU9ubHkvQWxsRmluZE1vZHVsZXMvQ01ha2VMaXN0cy50eHQKQEAgLTg2LDcgKzg2LDcgQEAKIGVuZGZvcmVhY2goKQogCiBmb3JlYWNoKFZURVNUIEJJU09OIEJvb3N0IENVREEgRE9YWUdFTiBGTEVYIEdJRiBHVEsyCi0gICAgICAgIEhERjUgSlBFRyBMaWJBcmNoaXZlIE9QRU5TQ0VORUdSQVBIIFJVQlkgU1dJRyBQcm90b2J1ZikKKyAgICAgICAgSERGNSBKUEVHIExpYkFyY2hpdmUgT1BFTlNDRU5FR1JBUEggUnVieSBSVUJZIFNXSUcgUHJvdG9idWYpCiAgICAgY2hlY2tfdmVyc2lvbl9zdHJpbmcoJHtWVEVTVH0gJHtWVEVTVH1fVkVSU0lPTikKIGVuZGZvcmVhY2goKQogCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZU9ubHkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DTWFrZU9ubHkvQ01ha2VMaXN0cy50eHQKaW5kZXggMDNiYWJkMi4uMzYxY2Y1ZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VPbmx5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlT25seS9DTWFrZUxpc3RzLnR4dApAQCAtMzEsMTIgKzMxLDkgQEAKIGFkZF9DTWFrZU9ubHlfdGVzdChDb21waWxlcklkQykKIGFkZF9DTWFrZU9ubHlfdGVzdChDb21waWxlcklkQ1hYKQogCi1pZihDTUFLRV9PQkpDX0NPTVBJTEVSKQoraWYgKEFQUExFIEFORCBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkNsYW5nfEdOVSIpCiAgIGFkZF9DTWFrZU9ubHlfdGVzdChDb21waWxlcklkT0JKQykKICAgYWRkX0NNYWtlT25seV90ZXN0KENoZWNrT0JKQ0NvbXBpbGVyRmxhZykKLWVuZGlmKCkKLQotaWYoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSKQogICBhZGRfQ01ha2VPbmx5X3Rlc3QoQ29tcGlsZXJJZE9CSkNYWCkKICAgYWRkX0NNYWtlT25seV90ZXN0KENoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnKQogZW5kaWYoKQpAQCAtNzUsNiArNzIsMTIgQEAKIAogYWRkX3Rlc3QoQ01ha2VPbmx5LlByb2plY3RJbmNsdWRlQmVmb3JlICR7Q01BS0VfQ01BS0VfQ09NTUFORH0KICAgLURURVNUPVByb2plY3RJbmNsdWRlQmVmb3JlCisgIC1EQ01BS0VfQVJHUz0tRENNQUtFX1BST0pFQ1RfUHJvamVjdEluY2x1ZGVfSU5DTFVERV9CRUZPUkU9JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1Byb2plY3RJbmNsdWRlQmVmb3JlL2luY2x1ZGUuY21ha2UKKyAgLVAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1Rlc3QuY21ha2UKKyAgKQorCithZGRfdGVzdChDTWFrZU9ubHkuUHJvamVjdEluY2x1ZGVCZWZvcmVBbnkgJHtDTUFLRV9DTUFLRV9DT01NQU5EfQorICAtRFRFU1Q9UHJvamVjdEluY2x1ZGVCZWZvcmVBbnkKICAgLURDTUFLRV9BUkdTPS1EQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRT0ke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vUHJvamVjdEluY2x1ZGVCZWZvcmUvaW5jbHVkZS5jbWFrZQogICAtUCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vVGVzdC5jbWFrZQogICApCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tPQkpDQ29tcGlsZXJGbGFnL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VPbmx5L0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy9DTWFrZUxpc3RzLnR4dAppbmRleCBhOWE5NmVlLi5hNzE0YjczIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tPQkpDQ29tcGlsZXJGbGFnL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlT25seS9DaGVja09CSkNDb21waWxlckZsYWcvQ01ha2VMaXN0cy50eHQKQEAgLTEsMTcgKzEsNyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKLQotcHJvamVjdChDaGVja09CSkNDb21waWxlckZsYWcpCi0KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorcHJvamVjdChDaGVja09CSkNDb21waWxlckZsYWcgT0JKQykKIGluY2x1ZGUoQ2hlY2tPQkpDQ29tcGlsZXJGbGFnKQotCi1pZihDTUFLRV9DT01QSUxFUl9JU19HTlVPQkpDKQotICBzZXQoQ09NUElMRVJfRkxBRyAtZm9iamMtZGlyZWN0LWRpc3BhdGNoKQotZWxzZSgpCi0gIHNldChDT01QSUxFUl9GTEFHIC1mb2JqYy1nYykKLWVuZGlmKCkKLQotQ0hFQ0tfT0JKQ19DT01QSUxFUl9GTEFHUygke0NPTVBJTEVSX0ZMQUd9IEhBU19DT01QSUxFUl9GTEFHKQotCitjaGVja19vYmpjX2NvbXBpbGVyX2ZsYWcoLURGT08gSEFTX0NPTVBJTEVSX0ZMQUcpCiBpZihOT1QgSEFTX0NPTVBJTEVSX0ZMQUcpCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiVGVzdCBmYWlsOiBIQVNfQ09NUElMRVJfRkxBRzogJHtDT01QSUxFUl9GTEFHfSIpCi1lbmRpZgorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L0NoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VPbmx5L0NoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnL0NNYWtlTGlzdHMudHh0CmluZGV4IGY4M2I3MzguLmQwOWYwYjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlT25seS9DaGVja09CSkNYWENvbXBpbGVyRmxhZy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tPQkpDWFhDb21waWxlckZsYWcvQ01ha2VMaXN0cy50eHQKQEAgLTEsMTcgKzEsNyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKLQotcHJvamVjdChDaGVja09CSkNYWENvbXBpbGVyRmxhZykKLQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitwcm9qZWN0KENoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnIE9CSkNYWCkKIGluY2x1ZGUoQ2hlY2tPQkpDWFhDb21waWxlckZsYWcpCi0KLWlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVU9CSkNYWCkKLSAgc2V0KENPTVBJTEVSX0ZMQUcgLWZvYmpjLWRpcmVjdC1kaXNwYXRjaCkKLWVsc2UoKQotICBzZXQoQ09NUElMRVJfRkxBRyAtZm9iamMtZ2MpCi1lbmRpZigpCi0KLUNIRUNLX09CSkNYWF9DT01QSUxFUl9GTEFHUygke0NPTVBJTEVSX0ZMQUd9IEhBU19DT01QSUxFUl9GTEFHKQotCitjaGVja19vYmpjeHhfY29tcGlsZXJfZmxhZygtREZPTyBIQVNfQ09NUElMRVJfRkxBRykKIGlmKE5PVCBIQVNfQ09NUElMRVJfRkxBRykKICAgbWVzc2FnZShTRU5EX0VSUk9SICJUZXN0IGZhaWw6IEhBU19DT01QSUxFUl9GTEFHOiAke0NPTVBJTEVSX0ZMQUd9IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlT25seS9DaGVja1N0cnVjdEhhc01lbWJlci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlT25seS9DaGVja1N0cnVjdEhhc01lbWJlci9DTWFrZUxpc3RzLnR4dAppbmRleCBhNTg0NTA1Li44NTllYzQxIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tTdHJ1Y3RIYXNNZW1iZXIvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VPbmx5L0NoZWNrU3RydWN0SGFzTWVtYmVyL0NNYWtlTGlzdHMudHh0CkBAIC02LDcgKzYsNyBAQAogCiBpbmNsdWRlKENoZWNrU3RydWN0SGFzTWVtYmVyKQogCi1mb3JlYWNoKF9jb25maWdfdHlwZSBSZWxlYXNlIFJlbFdpdGhEZWJJbmZvIE1pblNpemVSZWwgRGVidWcpCitmb3JlYWNoKF9jb25maWdfdHlwZSBSZWxlYXNlIFJlbFdpdGhEZWJJbmZvIERlYnVnKQogICAgIHNldChDTUFLRV9UUllfQ09NUElMRV9DT05GSUdVUkFUSU9OICR7X2NvbmZpZ190eXBlfSkKICAgICB1bnNldChDU0hNX1JFU1VMVF9TMV8ke19jb25maWdfdHlwZX0gQ0FDSEUpCiAgICAgdW5zZXQoQ1NITV9SRVNVTFRfUzJfJHtfY29uZmlnX3R5cGV9IENBQ0hFKQpAQCAtMjYsNyArMjYsNyBAQAogICAgIGVuZGlmKCkKIGVuZGZvcmVhY2goKQogCi1mb3JlYWNoKF9jb25maWdfdHlwZSBSZWxlYXNlIFJlbFdpdGhEZWJJbmZvIE1pblNpemVSZWwgRGVidWcpCitmb3JlYWNoKF9jb25maWdfdHlwZSBSZWxlYXNlIFJlbFdpdGhEZWJJbmZvIERlYnVnKQogICAgIHNldChDTUFLRV9UUllfQ09NUElMRV9DT05GSUdVUkFUSU9OICR7X2NvbmZpZ190eXBlfSkKICAgICB1bnNldChDU0hNX1JFU1VMVF9TMV8ke19jb25maWdfdHlwZX1fQyBDQUNIRSkKICAgICB1bnNldChDU0hNX1JFU1VMVF9TMl8ke19jb25maWdfdHlwZX1fQyBDQUNIRSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKIAotZm9yZWFjaChfY29uZmlnX3R5cGUgUmVsZWFzZSBSZWxXaXRoRGViSW5mbyBNaW5TaXplUmVsIERlYnVnKQorZm9yZWFjaChfY29uZmlnX3R5cGUgUmVsZWFzZSBSZWxXaXRoRGViSW5mbyBEZWJ1ZykKICAgICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfQ09ORklHVVJBVElPTiAke19jb25maWdfdHlwZX0pCiAgICAgdW5zZXQoQ1NITV9SRVNVTFRfUzFfJHtfY29uZmlnX3R5cGV9X0NYWCBDQUNIRSkKICAgICB1bnNldChDU0hNX1JFU1VMVF9TMl8ke19jb25maWdfdHlwZX1fQ1hYIENBQ0hFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L1Byb2plY3RJbmNsdWRlQmVmb3JlQW55L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VPbmx5L1Byb2plY3RJbmNsdWRlQmVmb3JlQW55L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDljYmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZU9ubHkvUHJvamVjdEluY2x1ZGVCZWZvcmVBbnkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1IEBACitzZXQoRk9PIFRSVUUpCitwcm9qZWN0KFByb2plY3RJbmNsdWRlIExBTkdVQUdFUyBOT05FKQoraWYoTk9UIEFVVE9fSU5DTFVERSkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiaW5jbHVkZSBmaWxlIG5vdCBmb3VuZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZU9ubHkvUHJvamVjdEluY2x1ZGVCZWZvcmVBbnkvaW5jbHVkZS5jbWFrZSBiL1Rlc3RzL0NNYWtlT25seS9Qcm9qZWN0SW5jbHVkZUJlZm9yZUFueS9pbmNsdWRlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDc5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZU9ubHkvUHJvamVjdEluY2x1ZGVCZWZvcmVBbnkvaW5jbHVkZS5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2lmKE5PVCBGT08pCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZPTyBpcyBub3Qgc2V0IikKK2VuZGlmKCkKKworaWYoTk9UICIke1BST0pFQ1RfTkFNRX0iIFNUUkVRVUFMICIiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJQUk9KRUNUX05BTUUgc2hvdWxkIGJlIGVtcHR5IikKK2VuZGlmKCkKKworc2V0KEFVVE9fSU5DTFVERSBUUlVFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L1Rlc3QuY21ha2UuaW4gYi9UZXN0cy9DTWFrZU9ubHkvVGVzdC5jbWFrZS5pbgppbmRleCAwYWU4YWYxLi5jNTMxZThiIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZU9ubHkvVGVzdC5jbWFrZS5pbgorKysgYi9UZXN0cy9DTWFrZU9ubHkvVGVzdC5jbWFrZS5pbgpAQCAtNyw2ICs3LDEzIEBACiAgIHNldChtYXliZV9tYWtlX3Byb2dyYW0gIi1EQ01BS0VfTUFLRV9QUk9HUkFNPSR7bWFrZV9wcm9ncmFtfSIpCiBlbmRpZigpCiAKK3NldChfaXNNdWx0aUNvbmZpZyAiQF9pc011bHRpQ29uZmlnQCIpCitpZihfaXNNdWx0aUNvbmZpZykKKyAgc2V0KGNmZ19vcHRzICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlXFw7UmVsV2l0aERlYkluZm8iKQorZWxzZSgpCisgIHNldChjZmdfb3B0cykKK2VuZGlmKCkKKwogc2V0KHNvdXJjZV9kaXIgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJALyR7VEVTVF9TT1VSQ0V9IikKIHNldChiaW5hcnlfZGlyICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQC8ke1RFU1R9LWJ1aWxkIikKIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7YmluYXJ5X2Rpcn0iKQpAQCAtMTYsNiArMjMsNyBAQAogICAiJHtzb3VyY2VfZGlyfSIgLUcgIkBDTUFLRV9HRU5FUkFUT1JAIgogICAtQSAiQENNQUtFX0dFTkVSQVRPUl9QTEFURk9STUAiCiAgIC1UICJAQ01BS0VfR0VORVJBVE9SX1RPT0xTRVRAIgorICAke2NmZ19vcHRzfQogICAke21heWJlX21ha2VfcHJvZ3JhbX0KICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7YmluYXJ5X2Rpcn0iCiAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlVGVzdE11bHRpcGxlQ29uZmlndXJlcy9SdW5DTWFrZS5jbWFrZSBiL1Rlc3RzL0NNYWtlVGVzdE11bHRpcGxlQ29uZmlndXJlcy9SdW5DTWFrZS5jbWFrZQppbmRleCA5NjMyNjY0Li5hNzliZmNiIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZVRlc3RNdWx0aXBsZUNvbmZpZ3VyZXMvUnVuQ01ha2UuY21ha2UKKysrIGIvVGVzdHMvQ01ha2VUZXN0TXVsdGlwbGVDb25maWd1cmVzL1J1bkNNYWtlLmNtYWtlCkBAIC0yMSwxMSArMjEsMTEgQEAKIAogIyBGaXJzdCBzZXR1cCBzb3VyY2UgYW5kIGJpbmFyeSB0cmVlczoKICMKLWV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeQorZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYKICAgJHtkaXJ9L1NvdXJjZQogKQogCi1leGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmCiAgICR7ZGlyfS9CdWlsZAogKQogCkBAIC02OSw3ICs2OSw3IEBACiAKICAgIyBTYXZlIHRoaXMgaXRlcmF0aW9uIG9mIHRoZSBCdWlsZCBkaXJlY3Rvcnk6CiAgICMKLSAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5CisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmCiAgICAgJHtkaXJ9L2Ike2l9CiAgICAgKQogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlfZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZVRlc3RzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VUZXN0cy9DTWFrZUxpc3RzLnR4dAppbmRleCAxNjE5MDgxLi5lMzJkNjkzIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZVRlc3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlVGVzdHMvQ01ha2VMaXN0cy50eHQKQEAgLTMzLDggKzMzLDkgQEAKIEFkZENNYWtlVGVzdChDTWFrZUhvc3RTeXN0ZW1JbmZvcm1hdGlvbiAiIikKIAogQWRkQ01ha2VUZXN0KEZpbGVEb3dubG9hZCAiIikKLXNldF9wcm9wZXJ0eShURVNUIENNYWtlLkZpbGVEb3dubG9hZCBQUk9QRVJUWQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoQ01ha2UuRmlsZURvd25sb2FkIFBST1BFUlRJRVMKICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gImZpbGUgYWxyZWFkeSBleGlzdHMgd2l0aCBleHBlY3RlZCBNRDUgc3VtIgorICBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiVW5leHBlY3RlZCBzdGF0dXMiCiAgICkKIEFkZENNYWtlVGVzdChGaWxlRG93bmxvYWRCYWRIYXNoICIiKQogc2V0X3Byb3BlcnR5KFRFU1QgQ01ha2UuRmlsZURvd25sb2FkQmFkSGFzaCBQUk9QRVJUWQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VUZXN0cy9GaWxlRG93bmxvYWRUZXN0LmNtYWtlLmluIGIvVGVzdHMvQ01ha2VUZXN0cy9GaWxlRG93bmxvYWRUZXN0LmNtYWtlLmluCmluZGV4IDM5MzU0NDkuLjc2YzAwMDAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlVGVzdHMvRmlsZURvd25sb2FkVGVzdC5jbWFrZS5pbgorKysgYi9UZXN0cy9DTWFrZVRlc3RzL0ZpbGVEb3dubG9hZFRlc3QuY21ha2UuaW4KQEAgLTEsMjMgKzEsNTAgQEAKKyMgV2UgZG8gbm90IGNvbnRhY3QgYW55IHJlYWwgVVJMcywgYnV0IGRvIHRyeSBhIGJvZ3VzIG9uZS4KKyMgUmVtb3ZlIGFueSBwcm94eSBjb25maWd1cmF0aW9uIHRoYXQgbWF5IGNoYW5nZSBiZWhhdmlvci4KK3Vuc2V0KEVOVntodHRwX3Byb3h5fSkKK3Vuc2V0KEVOVntodHRwc19wcm94eX0pCisKK3NldCh0aW1lb3V0IDQpCisKIGlmKE5PVCAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkAiIE1BVENIRVMgIl4vIikKICAgc2V0KHNsYXNoIC8pCiBlbmRpZigpCiBzZXQodXJsICJmaWxlOi8vJHtzbGFzaH1AQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQC9GaWxlRG93bmxvYWRJbnB1dC5wbmciKQogc2V0KGRpciAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAvZG93bmxvYWRzIikKIAorIyBCZXdhcmUgV2luZG93cyBhc3luY2hyb25vdXMgZmlsZS9kaXJlY3RvcnkgcmVtb3ZhbCwgcmVuYW1lIGFuZCB0aGVuCisjIHJlbW92ZSB0aGUgcmVuYW1lZCBkaXIgc28gd2UgY2FuIGJlIGNlcnRhaW4gdGhlIGRpciBpc24ndCB0aGVyZSB3aGVuCisjIHdlIGdldCB0byB0aGUgZmlsZSgpIGNvbW1hbmRzIGJlbG93CitpZihFWElTVFMgIiR7ZGlyfSIpCisgIGZpbGUoUkVOQU1FICR7ZGlyfSAiJHtkaXJ9X2JlaW5nUmVtb3ZlZCIpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7ZGlyfV9iZWluZ1JlbW92ZWQiKQorZW5kaWYoKQorCitmdW5jdGlvbihfX3JlcG9ydElmV3JvbmdTdGF0dXMgc3RhdHVzUGFpciBleHBlY3RlZFN0YXR1c0NvZGUpCisgIGxpc3QoR0VUIHN0YXR1c1BhaXIgMCBzdGF0dXNDb2RlKQorICBpZihOT1Qgc3RhdHVzQ29kZSBFUVVBTCBleHBlY3RlZFN0YXR1c0NvZGUpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SCisgICAgICAgICAgICAiVW5leHBlY3RlZCBzdGF0dXM6ICR7c3RhdHVzQ29kZX0sIGV4cGVjdGVkOiAke2V4cGVjdGVkU3RhdHVzQ29kZX0iKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6MSIpCiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTEucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KKyAgU1RBVFVTIHN0YXR1cwogICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKIAogbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDoyIikKIGZpbGUoRE9XTkxPQUQKICAgJHt1cmx9CiAgICR7ZGlyfS9maWxlMi5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgJHt0aW1lb3V0fQorICBTVEFUVVMgc3RhdHVzCiAgIFNIT1dfUFJPR1JFU1MKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCiAKICMgVHdvIGNhbGxzIGluIGEgcm93LCBleGFjdGx5IHRoZSBzYW1lIGFyZ3VtZW50cy4KICMgU2luY2UgZG93bmxvYWRlZCBmaWxlIHNob3VsZCBleGlzdCBhbHJlYWR5IGZvciAybmQgY2FsbCwKQEAgLTMxLDgyICs1OCwxMDggQEAKIGZpbGUoRE9XTkxPQUQKICAgJHt1cmx9CiAgICR7ZGlyfS9maWxlMy5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgJHt0aW1lb3V0fQorICBTVEFUVVMgc3RhdHVzCiAgIEVYUEVDVEVEX01ENSBkYmQzMzBkNTJmNGRiZDYwMTE1ZDQxOTE5MDRkZWQ5MgogICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKIAogbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDo0IikKIGZpbGUoRE9XTkxPQUQKICAgJHt1cmx9CiAgICR7ZGlyfS9maWxlMy5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgJHt0aW1lb3V0fQogICBTVEFUVVMgc3RhdHVzCiAgIEVYUEVDVEVEX0hBU0ggU0hBMT02N2VlZTE3Zjc5ZDlhYzU1NzI4NGZjMGI4YWQxOWYyNTcyM2ZiNTc4CiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQogCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjUiKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUzLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CiAgIFNUQVRVUyBzdGF0dXMKICAgRVhQRUNURURfSEFTSCBTSEEyMjQ9YmEyODM3MjZiYmI2MDI3NzY4MThiNDYzOTQzMTg5YWZkOTE4MzZjYjdlZTVkZDZlMmM3YjVhZTQKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCiAKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6NiIpCiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTMucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KICAgU1RBVFVTIHN0YXR1cwogICBFWFBFQ1RFRF9IQVNIIFNIQTI1Nj1jZjMzMzRiMTI3NTA3MWUxZGE2ZThjMzk2Y2NiNzJjZjFiMjM4OGQ4YzkzNzUyNmYzYWYyNjIzMGFmZmI5NDIzCiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQogCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjciKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUzLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CiAgIFNUQVRVUyBzdGF0dXMKICAgRVhQRUNURURfSEFTSCBTSEEzODQ9NDNhNWQxMzk3OGQ5N2M2NjBkYjQ0NDgxYWVlMDYwNGNiNGZmNmNhMDc3NWNkNWMyY2Q2OGNkODAwMGUxMDdlNTA3YzRjYWY2YzIyODk0MTIzMTA0MWUyODJmZmI4OTUwCiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQogCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjgiKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUzLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CiAgIFNUQVRVUyBzdGF0dXMKICAgRVhQRUNURURfSEFTSCBTSEE1MTI9Njk4NGUwOTA5YTEwMTgwMzBjY2FhNDE4ZTNiZTE2NTQyMjNjZGNjZmYwZmU2YWRjNzQ1ZjlhZWE3ZTM3N2YxNzhiZTUzYjlmYzdkNTRhNmY4MWMyYjYyZWY5ZGRjZDM4YmExOTc4ZmVkZjRjNWU3MTM5YmFhZjM1NWVlZmFkNWIKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCisKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6OSIpCiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTMucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KICAgU1RBVFVTIHN0YXR1cwogICBFWFBFQ1RFRF9IQVNIIE1ENT1kYmQzMzBkNTJmNGRiZDYwMTE1ZDQxOTE5MDRkZWQ5MgogICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKIAogbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDoxMCIpCiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTMucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KICAgU1RBVFVTIHN0YXR1cwogICBFWFBFQ1RFRF9NRDUgZGJkMzMwZDUyZjRkYmQ2MDExNWQ0MTkxOTA0ZGVkOTIKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCisjIFByaW50IHN0YXR1cyBiZWNhdXNlIHdlIGNoZWNrIGl0cyBtZXNzYWdlIHRvbwogbWVzc2FnZShTVEFUVVMgIiR7c3RhdHVzfSIpCiAKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6MTEiKQogZmlsZShET1dOTE9BRAotICBiYWRob3N0bmFtZS5wbmcKKyAgYmFkaG9zdG5hbWUuaW52YWxpZAogICAke2Rpcn0vZmlsZTExLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAzMAogICBTVEFUVVMgc3RhdHVzCiAgICkKIG1lc3NhZ2UoU1RBVFVTICIke3N0YXR1c30iKQotbGlzdChHRVQgc3RhdHVzIDAgc3RhdHVzX2NvZGUpCi1pZihOT1QgJHtzdGF0dXNfY29kZX0gRVFVQUwgNikKLSAgbWVzc2FnZShTRU5EX0VSUk9SICJlcnJvcjogZXhwZWN0ZWQgc3RhdHVzIGNvZGUgNiBmb3IgYmFkIGhvc3QgbmFtZSwgZ290OiAke3N0YXR1c19jb2RlfSIpCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgNikgIyA2IGNvcnJlc3BvbmRzIHRvIGFuIHVucmVzb2x2YWJsZSBob3N0IG5hbWUKKworbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDoxMiIpCitzZXQoYWJzRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAvZmlsZTEyLnBuZyIpCitpZihFWElTVFMgIiR7YWJzRmlsZX0iKQorICBmaWxlKFJFTkFNRSAke2Fic0ZpbGV9ICIke2Fic0ZpbGV9X2JlaW5nUmVtb3ZlZCIpCisgIGZpbGUoUkVNT1ZFICIke2Fic0ZpbGV9X2JlaW5nUmVtb3ZlZCIpCitlbmRpZigpCitmaWxlKERPV05MT0FECisgICR7dXJsfQorICBmaWxlMTIucG5nCisgIFRJTUVPVVQgJHt0aW1lb3V0fQorICBFWFBFQ1RFRF9NRDUgZGJkMzMwZDUyZjRkYmQ2MDExNWQ0MTkxOTA0ZGVkOTIKKyAgU1RBVFVTIHN0YXR1cworICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKK2lmKE5PVCBFWElTVFMgZmlsZTEyLnBuZykKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJmaWxlMTIucG5nIG5vdCBkb3dubG9hZGVkOiAke3N0YXR1c30iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VUZXN0cy9GaWxlVGVzdFNjcmlwdC5jbWFrZSBiL1Rlc3RzL0NNYWtlVGVzdHMvRmlsZVRlc3RTY3JpcHQuY21ha2UKaW5kZXggOWE0MzU2OS4uMTQ1ZjI4YSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VUZXN0cy9GaWxlVGVzdFNjcmlwdC5jbWFrZQorKysgYi9UZXN0cy9DTWFrZVRlc3RzL0ZpbGVUZXN0U2NyaXB0LmNtYWtlCkBAIC0xODMsNyArMTgzLDcgQEAKIGVsc2VpZih0ZXN0bmFtZSBTVFJFUVVBTCBkb3dubG9hZF93cm9uZ19udW1iZXJfb2ZfYXJncykgIyBmYWlsCiAgIGZpbGUoRE9XTkxPQUQgenp6ejovL2JvZ3VzL2ZmZmYpCiAKLWVsc2VpZih0ZXN0bmFtZSBTVFJFUVVBTCBkb3dubG9hZF9maWxlX3dpdGhfbm9fcGF0aCkgIyBmYWlsCitlbHNlaWYodGVzdG5hbWUgU1RSRVFVQUwgZG93bmxvYWRfZmlsZV93aXRoX25vX3BhdGgpICMgcGFzcwogICBmaWxlKERPV05MT0FEIHp6eno6Ly9ib2d1cy9mZmZmIGZmZmYpCiAKIGVsc2VpZih0ZXN0bmFtZSBTVFJFUVVBTCBkb3dubG9hZF9taXNzaW5nX3RpbWUpICMgZmFpbApkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL0NNYWtlTGlzdHMudHh0CmluZGV4IGJjNWI2YTkuLjQzNjNmMWIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0RFQi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DUGFja0NvbXBvbmVudHNERUIvQ01ha2VMaXN0cy50eHQKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICBDT01QT05FTlQgYXBwbGljYXRpb25zKQogCiBpZihFWElTVFMgIi4vZGlydGVzdCIpCi0gIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeSAuL2RpcnRlc3QpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmIC4vZGlydGVzdCkKIGVuZGlmKCkKICMgTk9URTogZGlyZWN0b3J5IGxlZnQgZW1wdHkgb24gcHVycG9zZQogZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeSAuL2RpcnRlc3QpCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja0NvbXBvbmVudHNERUIvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UgYi9UZXN0cy9DUGFja0NvbXBvbmVudHNERUIvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggYjE3MmRhMi4uM2JjOGQyYSAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCisrKyBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0RFQi9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZQpAQCAtNDUsNyArNDUsNyBAQAogCiAgIG1lc3NhZ2UoImNvbmZpZ19hcmdzID0gJHtydW5fY3BhY2tfZGViX0NPTkZJR19BUkdTfSIpCiAgIG1lc3NhZ2UoImNvbmZpZ192ZXJib3NlID0gJHtydW5fY3BhY2tfZGViX0NPTkZJR19WRVJCT1NFfSIpCi0gIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ1BBQ0tfQ09NTUFORH0gJHtydW5fY3BhY2tfZGViX0NPTkZJR19WRVJCT1NFfSAtRyAke0NQYWNrR2VufSAke3J1bl9jcGFja19kZWJfQ09ORklHX0FSR1N9CisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ1BBQ0tfQ09NTUFORH0gJHtydW5fY3BhY2tfZGViX0NPTkZJR19WRVJCT1NFfSAtRyAke0NQYWNrR2VufSAtQyAiJHtDT05GSUd9IiAke3J1bl9jcGFja19kZWJfQ09ORklHX0FSR1N9CiAgICAgICBSRVNVTFRfVkFSSUFCTEUgQ1BhY2tfcmVzdWx0CiAgICAgICBPVVRQVVRfVkFSSUFCTEUgQ1BhY2tfb3V0cHV0CiAgICAgICBFUlJPUl9WQVJJQUJMRSBDUGFja19lcnJvcgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjJlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyMCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCisKK3Byb2plY3QoQ1BhY2tOU0lTR2VuZXJhdG9yKQorCithZGRfZXhlY3V0YWJsZShoZWxsbyBtYWluLmNwcCkKKworaW5zdGFsbChUQVJHRVRTIGhlbGxvCisgIEFSQ0hJVkUgREVTVElOQVRJT04gLgorICBSVU5USU1FIERFU1RJTkFUSU9OIC4KKyAgTElCUkFSWSBERVNUSU5BVElPTiAuCisgIEJVTkRMRSBERVNUSU5BVElPTiAuKQorCitzZXQoQ1BBQ0tfTlNJU19NVUlfSEVBREVSSU1BR0UgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfVxcXFxoZWFkZXItaW1hZ2UuYm1wIikKK3NldChDUEFDS19QQUNLQUdFX0lDT04gIiR7UFJPSkVDVF9TT1VSQ0VfRElSfVxcXFxoZWFkZXItaWNvbi5ibXAiKQorc2V0KENQQUNLX05TSVNfTVVJX0lDT04gIiR7UFJPSkVDVF9TT1VSQ0VfRElSfVxcXFxpbnN0YWxsLmljbyIpCitzZXQoQ1BBQ0tfTlNJU19NVUlfVU5JSUNPTiAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9XFxcXHVuaW5zdGFsbC5pY28iKQorc2V0KENQQUNLX0dFTkVSQVRPUiAiTlNJUyIpCitzZXQoQ1BBQ0tfTlNJU19FTkFCTEVfVU5JTlNUQUxMX0JFRk9SRV9JTlNUQUxMIE9OKQorCitpbmNsdWRlKENQYWNrKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjM3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKQEAgLTAsMCArMSw0NiBAQAorbWVzc2FnZShTVEFUVVMgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKQorbWVzc2FnZShTVEFUVVMgIkNURVNUX0ZVTExfT1VUUFVUIChBdm9pZCBjdGVzdCB0cnVuY2F0aW9uIG9mIG91dHB1dCkiKQorbWVzc2FnZShTVEFUVVMgIiIpCisKK2lmKE5PVCBDUGFja05TSVNHZW5lcmF0b3JfQklOQVJZX0RJUikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ1BhY2tOU0lTR2VuZXJhdG9yX0JJTkFSWV9ESVIgbm90IHNldCIpCitlbmRpZigpCisKK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9DT01NQU5EOiAke0NNQUtFX0NPTU1BTkR9IikKK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9DUEFDS19DT01NQU5EOiAke0NNQUtFX0NQQUNLX0NPTU1BTkR9IikKK21lc3NhZ2UoU1RBVFVTICJDUGFja05TSVNHZW5lcmF0b3JfQklOQVJZX0RJUjogJHtDUGFja05TSVNHZW5lcmF0b3JfQklOQVJZX0RJUn0iKQorCitpZihjb25maWcpCisgIHNldChfQ19jb25maWcgLUMgJHtjb25maWd9KQorZW5kaWYoKQorCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAiJHtDTUFLRV9DUEFDS19DT01NQU5EfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICR7X0NfY29uZmlnfQorICBSRVNVTFRfVkFSSUFCTEUgQ1BhY2tfcmVzdWx0CisgIE9VVFBVVF9WQVJJQUJMRSBDUGFja19vdXRwdXQKKyAgRVJST1JfVkFSSUFCTEUgQ1BhY2tfZXJyb3IKKyAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BhY2tOU0lTR2VuZXJhdG9yX0JJTkFSWV9ESVJ9IikKKworaWYoQ1BhY2tfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDUGFjayBleGVjdXRpb24gd2VudCB3cm9uZyEsIENQYWNrX291dHB1dD0ke0NQYWNrX291dHB1dH0sIENQYWNrX2Vycm9yPSR7Q1BhY2tfZXJyb3J9IikKK2Vsc2UgKCkKKyAgbWVzc2FnZShTVEFUVVMgIkNQYWNrX291dHB1dD0ke0NQYWNrX291dHB1dH0iKQorZW5kaWYoKQorCitzZXQoZXhwZWN0ZWRfZmlsZV9tYXNrICIke0NQYWNrTlNJU0dlbmVyYXRvcl9CSU5BUllfRElSfS9fQ1BhY2tfUGFja2FnZXMvKi9OU0lTLyoubnNpIikKK2ZpbGUoR0xPQiBwcm9qZWN0X2ZpbGUgIiR7ZXhwZWN0ZWRfZmlsZV9tYXNrfSIpCisKK21lc3NhZ2UoU1RBVFVTICJwcm9qZWN0X2ZpbGU9JyR7cHJvamVjdF9maWxlfSciKQorbWVzc2FnZShTVEFUVVMgImV4cGVjdGVkX2ZpbGVfbWFzaz0nJHtleHBlY3RlZF9maWxlX21hc2t9JyIpCisKK2lmKE5PVCBwcm9qZWN0X2ZpbGUpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgInByb2plY3RfZmlsZSBkb2VzIG5vdCBleGlzdC4iKQorZW5kaWYoKQorCisjIHNob3VsZCBtYXRjaCAhZGVmaW5lIE1VSV9IRUFERVJJTUFHRV9CSVRNQVAgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfVxoZWFkZXItaW1hZ2UuYm1wIgorZmlsZShTVFJJTkdTICIke3Byb2plY3RfZmlsZX0iIGxpbmUgUkVHRVggIl4hZGVmaW5lIE1VSV9IRUFERVJJTUFHRV9CSVRNQVAiKQorc3RyaW5nKEZJTkQgIiR7bGluZX0iICJoZWFkZXItaW1hZ2UuYm1wIiBvdXRwdXRfaW5kZXgpCittZXNzYWdlKFNUQVRVUyAiRm91bmQgdGhlIGJpdG1hcCBhdCBpbmRleCAke291dHB1dF9pbmRleH0iKQoraWYoIiR7b3V0cHV0X2luZGV4fSIgRVFVQUwgIi0xIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTVVJX0hFQURFUklNQUdFX0JJVE1BUCBub3QgZm91bmQgaW4gdGhlIHByb2plY3QiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2hlYWRlci1pY29uLmJtcCBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9oZWFkZXItaWNvbi5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2YTY1NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9oZWFkZXItaWNvbi5ibXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2hlYWRlci1pbWFnZS5ibXAgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaGVhZGVyLWltYWdlLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWIxNzMwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2hlYWRlci1pbWFnZS5ibXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2luc3RhbGwuaWNvIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2luc3RhbGwuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMWU0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaW5zdGFsbC5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL21haW4uY3BwIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NmYzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvbWFpbi5jcHAKQEAgLTAsMCArMSw0IEBACitpbnQgbWFpbigpCit7CisgIHJldHVybiA0MjsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci91bmluc3RhbGwuaWNvIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL3VuaW5zdGFsbC5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRmNjMxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci91bmluc3RhbGwuaWNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1Rlc3RzL0NTaGFycE9ubHkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DU2hhcnBPbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IDgyMDQ5YzcuLjQyY2JlMmUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NTaGFycE9ubHkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ1NoYXJwT25seS9DTWFrZUxpc3RzLnR4dApAQCAtMiw3ICsyLDkgQEAKIHByb2plY3QgKENTaGFycE9ubHkgQ1NoYXJwKQogCiAjIEMjIGRvZXMgbm90IG1ha2UgYW55IGRpZmZlcmVuY2UgYmV0d2VlbiBTVEFUSUMgYW5kIFNIQVJFRCBsaWJzCi1hZGRfbGlicmFyeShsaWIxIFNUQVRJQyBsaWIxLmNzKQorYWRkX2xpYnJhcnkobGliMSBTVEFUSUMgbGliMS5jcyBuZXN0ZWQvbGliMS5jcykKKyN3aXRob3V0IHRoZSBzb3VyY2UgZ3JvdXAgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0byBjb21waWxlCitzb3VyY2VfZ3JvdXAobmVzdGVkIEZJTEVTIG5lc3RlZC9saWIxLmNzKQogYWRkX2xpYnJhcnkobGliMiBTSEFSRUQgbGliMi5jcykKIAogYWRkX2V4ZWN1dGFibGUoQ1NoYXJwT25seSBjc2hhcnBvbmx5LmNzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1NoYXJwT25seS9jc2hhcnBvbmx5LmNzIGIvVGVzdHMvQ1NoYXJwT25seS9jc2hhcnBvbmx5LmNzCmluZGV4IGFkNDY0MWEuLjM4OTBjODIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NTaGFycE9ubHkvY3NoYXJwb25seS5jcworKysgYi9UZXN0cy9DU2hhcnBPbmx5L2NzaGFycG9ubHkuY3MKQEAgLTUsMTAgKzUsOCBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgdmFsID0gTGliMS5nZXRSZXN1bHQoKTsKLQogICAgICAgICAgICAgTGliMiBsID0gbmV3IExpYjIoKTsKLSAgICAgICAgICAgIHZhbCA9IGwubXlWYWw7Ci0KKyAgICAgICAgICAgIHZhbCA9IHZhbCArICBsLm15VmFsICsgbmVzdGVkLkxpYjEuZ2V0UmVzdWx0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9UZXN0cy9DU2hhcnBPbmx5L25lc3RlZC9saWIxLmNzIGIvVGVzdHMvQ1NoYXJwT25seS9uZXN0ZWQvbGliMS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmZkZTRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ1NoYXJwT25seS9uZXN0ZWQvbGliMS5jcwpAQCAtMCwwICsxLDEzIEBACituYW1lc3BhY2UgQ1NoYXJwT25seQoreworICAgIG5hbWVzcGFjZSBuZXN0ZWQKKyAgICB7CisgICAgICAgIHB1YmxpYyBjbGFzcyBMaWIxCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFJlc3VsdCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDIzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1Rlc3RDb25maWcvZGFzaGJvYXJkLmNtYWtlLmluIGIvVGVzdHMvQ1Rlc3RDb25maWcvZGFzaGJvYXJkLmNtYWtlLmluCmluZGV4IDRiYjEyNjIuLjM0ODI0ZTMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NUZXN0Q29uZmlnL2Rhc2hib2FyZC5jbWFrZS5pbgorKysgYi9UZXN0cy9DVGVzdENvbmZpZy9kYXNoYm9hcmQuY21ha2UuaW4KQEAgLTEzLDYgKzEzLDggQEAKIHNldChhcmcgIiIpCiBpZihOT1QgX2lzTXVsdGlDb25maWcpCiAgIHNldChhcmcgIi1EQ01BS0VfQlVJTERfVFlQRTpTVFJJTkc9QGNmZ0AiKQorZWxzZSgpCisgIHNldChhcmcgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2VcXDtNaW5TaXplUmVsXFw7UmVsV2l0aERlYkluZm8iKQogZW5kaWYoKQogCiBtZXNzYWdlKCJjbWFrZSBpbml0aWFsIGNvbmZpZ3VyZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9DVGVzdENvbmZpZy9zY3JpcHQuY21ha2UuaW4gYi9UZXN0cy9DVGVzdENvbmZpZy9zY3JpcHQuY21ha2UuaW4KaW5kZXggOTczYzdiOC4uNTljNTg1YiAxMDA2NDQKLS0tIGEvVGVzdHMvQ1Rlc3RDb25maWcvc2NyaXB0LmNtYWtlLmluCisrKyBiL1Rlc3RzL0NUZXN0Q29uZmlnL3NjcmlwdC5jbWFrZS5pbgpAQCAtNiw3ICs2LDE0IEBACiAKIGN0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCkKIAotY3Rlc3RfY29uZmlndXJlKEJVSUxEICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9IiBSRVRVUk5fVkFMVUUgcnYpCitzZXQoX2lzTXVsdGlDb25maWcgIkBfaXNNdWx0aUNvbmZpZ0AiKQoraWYoX2lzTXVsdGlDb25maWcpCisgIHNldChjZmdfb3B0cyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZVxcO01pblNpemVSZWxcXDtSZWxXaXRoRGViSW5mbyIpCitlbHNlKCkKKyAgc2V0KGNmZ19vcHRzKQorZW5kaWYoKQorCitjdGVzdF9jb25maWd1cmUoQlVJTEQgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iIE9QVElPTlMgIiR7Y2ZnX29wdHN9IiBSRVRVUk5fVkFMVUUgcnYpCiBpZihOT1QgcnYgU1RSRVFVQUwgMCkKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiKioqIGVycm9yIGluIGN0ZXN0X2NvbmZpZ3VyZSAqKioiKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ29tcGxleC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQKaW5kZXggMmU0MTc1NC4uOWZkODViZSAxMDA2NDQKLS0tIGEvVGVzdHMvQ29tcGxleC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Db21wbGV4L0NNYWtlTGlzdHMudHh0CkBAIC0zMjQsNyArMzI0LDcgQEAKICAgICAgICR7ZmlsZX0KICAgICAgICJbJHtoa2V5fV0iIERPQyAiUmVnaXN0cnlfVGVzdF9QYXRoIikKICAgICBleGVjX3Byb2dyYW0oJHtDTUFLRV9DT01NQU5EfSBBUkdTICItRSBkZWxldGVfcmVndiBcIiR7aGtleX1cIiIpCi0gICAgZXhlY19wcm9ncmFtKCR7Q01BS0VfQ09NTUFORH0gQVJHUyAiLUUgcmVtb3ZlIFwiJHtkaXJ9LyR7ZmlsZX1cIiIpCisgICAgZXhlY19wcm9ncmFtKCR7Q01BS0VfQ09NTUFORH0gQVJHUyAiLUUgcm0gLWYgXCIke2Rpcn0vJHtmaWxlfVwiIikKICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbXBsZXgvTGlicmFyeS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NvbXBsZXgvTGlicmFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCA2NGY2ZGM4Li5kZjg3NGVmIDEwMDY0NAotLS0gYS9UZXN0cy9Db21wbGV4L0xpYnJhcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ29tcGxleC9MaWJyYXJ5L0NNYWtlTGlzdHMudHh0CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogICAgICMgQ3VzdG9tIHRhcmdldCB0byB0cnkgcHJlcHJvY2Vzc2luZyBpbnZvY2F0aW9uLgogICAgIGFkZF9jdXN0b21fdGFyZ2V0KHRlc3RfcHJlcHJvY2VzcyAke01BWUJFX0FMTH0KLSAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmUgQ01ha2VGaWxlcy9jcmVhdGVfZmlsZS5kaXIvY3JlYXRlX2ZpbGUuaQorICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mIENNYWtlRmlsZXMvY3JlYXRlX2ZpbGUuZGlyL2NyZWF0ZV9maWxlLmkKICAgICAgIENPTU1BTkQgJHtDTUFLRV9NQUtFX1BST0dSQU19IGNyZWF0ZV9maWxlLmkKICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGVzdF9wcmVwcm9jZXNzLmNtYWtlCiAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbXBsZXhPbmVDb25maWcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Db21wbGV4T25lQ29uZmlnL0NNYWtlTGlzdHMudHh0CmluZGV4IDYyOGNkNGUuLjI4YjczYWYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NvbXBsZXhPbmVDb25maWcvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ29tcGxleE9uZUNvbmZpZy9DTWFrZUxpc3RzLnR4dApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAke2ZpbGV9CiAgICAgICAiWyR7aGtleX1dIiBET0MgIlJlZ2lzdHJ5X1Rlc3RfUGF0aCIpCiAgICAgZXhlY19wcm9ncmFtKCR7Q01BS0VfQ09NTUFORH0gQVJHUyAiLUUgZGVsZXRlX3JlZ3YgXCIke2hrZXl9XCIiKQotICAgIGV4ZWNfcHJvZ3JhbSgke0NNQUtFX0NPTU1BTkR9IEFSR1MgIi1FIHJlbW92ZSBcIiR7ZGlyfS8ke2ZpbGV9XCIiKQorICAgIGV4ZWNfcHJvZ3JhbSgke0NNQUtFX0NPTU1BTkR9IEFSR1MgIi1FIHJtIC1mIFwiJHtkaXJ9LyR7ZmlsZX1cIiIpCiAgIGVuZGlmICgpCiBlbmRpZiAoKQogCmRpZmYgLS1naXQgYS9UZXN0cy9Db21wbGV4T25lQ29uZmlnL0xpYnJhcnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Db21wbGV4T25lQ29uZmlnL0xpYnJhcnkvQ01ha2VMaXN0cy50eHQKaW5kZXggNjRmNmRjOC4uZGY4NzRlZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ29tcGxleE9uZUNvbmZpZy9MaWJyYXJ5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NvbXBsZXhPbmVDb25maWcvTGlicmFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMTMxLDcgKzEzMSw3IEBACiAKICAgICAjIEN1c3RvbSB0YXJnZXQgdG8gdHJ5IHByZXByb2Nlc3NpbmcgaW52b2NhdGlvbi4KICAgICBhZGRfY3VzdG9tX3RhcmdldCh0ZXN0X3ByZXByb2Nlc3MgJHtNQVlCRV9BTEx9Ci0gICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlIENNYWtlRmlsZXMvY3JlYXRlX2ZpbGUuZGlyL2NyZWF0ZV9maWxlLmkKKyAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtZiBDTWFrZUZpbGVzL2NyZWF0ZV9maWxlLmRpci9jcmVhdGVfZmlsZS5pCiAgICAgICBDT01NQU5EICR7Q01BS0VfTUFLRV9QUk9HUkFNfSBjcmVhdGVfZmlsZS5pCiAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RfcHJlcHJvY2Vzcy5jbWFrZQogICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CmRpZmYgLS1naXQgYS9UZXN0cy9Db250cmFjdHMvVlRLL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ29udHJhY3RzL1ZUSy9DTWFrZUxpc3RzLnR4dAppbmRleCBjOTQ2NDk5Li42YWUyNzMyIDEwMDY0NAotLS0gYS9UZXN0cy9Db250cmFjdHMvVlRLL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NvbnRyYWN0cy9WVEsvQ01ha2VMaXN0cy50eHQKQEAgLTIxLDcgKzIxLDcgQEAKIAogIyBidWlsZCAmIHRlc3QgVlRLJ3MgcmVsZWFzZSBicmFuY2gKIEV4dGVybmFsUHJvamVjdF9BZGQoJHtQUk9KRUNUX05BTUV9Ci0gIEdJVF9SRVBPU0lUT1JZICJnaXQ6Ly92dGsub3JnL1ZUSy5naXQiCisgIEdJVF9SRVBPU0lUT1JZICJodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS92dGsvdnRrLmdpdCIKICAgR0lUX1RBRyAicmVsZWFzZSIKICAgUFJFRklYICR7YmFzZV9kaXJ9CiAgIENPTkZJR1VSRV9DT01NQU5EICIiCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9DTWFrZUxpc3RzLnR4dAppbmRleCA0NGM2MDA1Li41OGI5YjAzIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvQ01ha2VMaXN0cy50eHQKQEAgLTEsMTEgKzEsMjUgQEAKIAogQUREX1RFU1RfTUFDUk8oQ3VkYS5Db21wbGV4IEN1ZGFDb21wbGV4KQogQUREX1RFU1RfTUFDUk8oQ3VkYS5Db25zdW1lQ29tcGlsZUZlYXR1cmVzIEN1ZGFDb25zdW1lQ29tcGlsZUZlYXR1cmVzKQorQUREX1RFU1RfTUFDUk8oQ3VkYS5DWFhTdGFuZGFyZFNldFR3aWNlIENYWFN0YW5kYXJkU2V0VHdpY2UpCiBBRERfVEVTVF9NQUNSTyhDdWRhLk9iamVjdExpYnJhcnkgQ3VkYU9iamVjdExpYnJhcnkpCi1BRERfVEVTVF9NQUNSTyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHMgTWl4ZWRTdGFuZGFyZExldmVscykKK0FERF9URVNUX01BQ1JPKEN1ZGEuTWl4ZWRTdGFuZGFyZExldmVsczEgTWl4ZWRTdGFuZGFyZExldmVsczEpCitBRERfVEVTVF9NQUNSTyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHMyIE1peGVkU3RhbmRhcmRMZXZlbHMyKQorQUREX1RFU1RfTUFDUk8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzMyBNaXhlZFN0YW5kYXJkTGV2ZWxzMykKK0FERF9URVNUX01BQ1JPKEN1ZGEuTWl4ZWRTdGFuZGFyZExldmVsczQgTWl4ZWRTdGFuZGFyZExldmVsczQpCitBRERfVEVTVF9NQUNSTyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHM1IE1peGVkU3RhbmRhcmRMZXZlbHM1KQogQUREX1RFU1RfTUFDUk8oQ3VkYS5Ob3RFbmFibGVkIEN1ZGFOb3RFbmFibGVkKQogQUREX1RFU1RfTUFDUk8oQ3VkYS5TZXBhcmFibGVDb21wQ1hYT25seSBTZXBhcmFibGVDb21wQ1hYT25seSkKLUFERF9URVNUX01BQ1JPKEN1ZGEuVG9vbGtpdEluY2x1ZGUgQ3VkYVRvb2xraXRJbmNsdWRlKQorQUREX1RFU1RfTUFDUk8oQ3VkYS5Ub29sa2l0IFRvb2xraXQpCitBRERfVEVTVF9NQUNSTyhDdWRhLkluY2x1ZGVQYXRoTm9Ub29sa2l0IEluY2x1ZGVQYXRoTm9Ub29sa2l0KQogQUREX1RFU1RfTUFDUk8oQ3VkYS5Qcm9wZXJEZXZpY2VMaWJyYXJpZXMgUHJvcGVyRGV2aWNlTGlicmFyaWVzKQogQUREX1RFU1RfTUFDUk8oQ3VkYS5Qcm9wZXJMaW5rRmxhZ3MgUHJvcGVyTGlua0ZsYWdzKQorQUREX1RFU1RfTUFDUk8oQ3VkYS5TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQgU2hhcmVkUnVudGltZVBsdXNUb29sa2l0KQorCisjIFRoZSBDVURBIG9ubHkgc2hpcHMgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSB0b29sa2l0IGxpYnJhcmllcworIyBvbiB3aW5kb3dzCitpZihOT1QgV0lOMzIpCisgIEFERF9URVNUX01BQ1JPKEN1ZGEuU3RhdGljUnVudGltZVBsdXNUb29sa2l0IFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCkKK2VuZGlmKCkKKwogQUREX1RFU1RfTUFDUk8oQ3VkYS5XaXRoQyBDdWRhV2l0aEMpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0NYWFN0YW5kYXJkU2V0VHdpY2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL0NYWFN0YW5kYXJkU2V0VHdpY2UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0MWM0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvQ1hYU3RhbmRhcmRTZXRUd2ljZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQorcHJvamVjdChDWFhTdGFuZGFyZFNldFR3aWNlIENYWCBDVURBKQorCitzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKKworc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKKworYWRkX2V4ZWN1dGFibGUoQ1hYU3RhbmRhcmRTZXRUd2ljZSBtYWluLmN1KQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoQ1hYU3RhbmRhcmRTZXRUd2ljZSBQVUJMSUMgY3h4X3N0ZF8xMSkKKworaWYoQVBQTEUpCisgICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgorICBzZXRfcHJvcGVydHkoVEFSR0VUIENYWFN0YW5kYXJkU2V0VHdpY2UgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzL21haW4uY3UgYi9UZXN0cy9DdWRhL0NYWFN0YW5kYXJkU2V0VHdpY2UvbWFpbi5jdQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzL21haW4uY3UKcmVuYW1lIHRvIFRlc3RzL0N1ZGEvQ1hYU3RhbmRhcmRTZXRUd2ljZS9tYWluLmN1CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQKaW5kZXggZDNkNGI3Yy4uMDhkMWUxNiAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9Db21wbGV4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9DTWFrZUxpc3RzLnR4dApAQCAtMjIsMTggKzIyLDExIEBACiBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIFRSVUUpCiAKIGFkZF9saWJyYXJ5KEN1ZGFDb21wbGV4Q3BwQmFzZSBTSEFSRUQgZHluYW1pYy5jcHApCi1hZGRfbGlicmFyeShDdWRhQ29tcGxleFNlcGVyYWJsZUxpYiBTVEFUSUMgZmlsZTEuY3UgZmlsZTIuY3UgZmlsZTMuY3UpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ3VkYUNvbXBsZXhTZXBlcmFibGVMaWIKLSAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKLXNldF90YXJnZXRfcHJvcGVydGllcyggQ3VkYUNvbXBsZXhTZXBlcmFibGVMaWIKLSAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIE9OKQotCiBhZGRfbGlicmFyeShDdWRhQ29tcGxleFNoYXJlZExpYiBTSEFSRUQgZHluYW1pYy5jdSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhDdWRhQ29tcGxleFNoYXJlZExpYiBQVUJMSUMgQ3VkYUNvbXBsZXhDcHBCYXNlKQogCithZGRfbGlicmFyeShDdWRhQ29tcGxleFNlcGVyYWJsZUxpYiBTVEFUSUMgZmlsZTEuY3UgZmlsZTIuY3UgZmlsZTMuY3UpCiBhZGRfbGlicmFyeShDdWRhQ29tcGxleE1peGVkTGliIFNIQVJFRCBtaXhlZC5jcHAgbWl4ZWQuY3UpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ3VkYUNvbXBsZXhNaXhlZExpYgotICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIENVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OIE9OKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFDb21wbGV4TWl4ZWRMaWIKICAgICAgICAgICAgICAgICAgICAgICBQVUJMSUMgQ3VkYUNvbXBsZXhTaGFyZWRMaWIKICAgICAgICAgICAgICAgICAgICAgICBQUklWQVRFIEN1ZGFDb21wbGV4U2VwZXJhYmxlTGliKQpAQCAtNDEsNyArMzQsMjcgQEAKIGFkZF9leGVjdXRhYmxlKEN1ZGFDb21wbGV4IG1haW4uY3BwKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFDb21wbGV4IFBVQkxJQyBDdWRhQ29tcGxleE1peGVkTGliKQogCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhDdWRhQ29tcGxleE1peGVkTGliCisgICAgICAgICAgICAgICAgICAgICAgQ3VkYUNvbXBsZXhTZXBlcmFibGVMaWIKKyAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgICAgICAgICBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFICBPTgorICAgICAgICAgICAgICAgICAgICAgICAgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04gT04KKyAgICAgICAgICAgICAgICAgICAgICApCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ3VkYUNvbXBsZXhNaXhlZExpYgorICAgICAgICAgICAgICAgICAgICAgIEN1ZGFDb21wbGV4U2hhcmVkTGliCisgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgICAgQ1VEQV9SVU5USU1FX0xJQlJBUlkgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgICAgKQorCisKIGlmKEFQUExFKQogICAjIEhlbHAgdGhlIHN0YXRpYyBjdWRhIHJ1bnRpbWUgZmluZCB0aGUgZHJpdmVyIChsaWJjdWRhLmR5bGxpYikgYXQgcnVudGltZS4KICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBDdWRhQ29tcGxleCBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCiBlbmRpZigpCisKK2lmKFVOSVgpCisgICMgSGVscCB0aGUgc2hhcmVkIGN1ZGEgcnVudGltZSBmaW5kIGxpYmN1ZGFydCBhcyBpdCBpcyBub3QgbG9jYXRlZAorICAjIGluIGEgZGVmYXVsdCBzeXN0ZW0gc2VhcmNoZWQgbG9jYXRpb24KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBDdWRhQ29tcGxleE1peGVkTGliIFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ29tcGxleC9keW5hbWljLmN1IGIvVGVzdHMvQ3VkYS9Db21wbGV4L2R5bmFtaWMuY3UKaW5kZXggOWRhODg1My4uN2YyZjJiNSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9Db21wbGV4L2R5bmFtaWMuY3UKKysrIGIvVGVzdHMvQ3VkYS9Db21wbGV4L2R5bmFtaWMuY3UKQEAgLTU0LDE3ICs1NCwyMCBAQAogICByZXR1cm4gMTsKIH0KIAotRVhQT1JUIHZvaWQgY3VkYV9keW5hbWljX2xpYl9mdW5jKCkKK0VYUE9SVCBib29sIGN1ZGFfZHluYW1pY19saWJfZnVuYygpCiB7Ci0gIERldGVybWluZUlmVmFsaWRDdWRhRGV2aWNlPDw8MSwgMT4+PigpOwogICBjdWRhRXJyb3JfdCBlcnIgPSBjdWRhR2V0TGFzdEVycm9yKCk7CiAgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKLSAgICBzdGQ6OmNlcnIgPDwgIkRldGVybWluZUlmVmFsaWRDdWRhRGV2aWNlIFtTWU5DXSBmYWlsZWQ6ICIKKyAgICBzdGQ6OmNlcnIgPDwgIkRldGVybWluZUlmVmFsaWRDdWRhRGV2aWNlIFtQZXIgTGF1bmNoXSBmYWlsZWQ6ICIKICAgICAgICAgICAgICAgPDwgY3VkYUdldEVycm9yU3RyaW5nKGVycikgPDwgc3RkOjplbmRsOworICAgIHJldHVybiBmYWxzZTsKICAgfQorICBEZXRlcm1pbmVJZlZhbGlkQ3VkYURldmljZTw8PDEsIDE+Pj4oKTsKICAgZXJyID0gY3VkYURldmljZVN5bmNocm9uaXplKCk7CiAgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKLSAgICBzdGQ6OmNlcnIgPDwgIkRldGVybWluZUlmVmFsaWRDdWRhRGV2aWNlIFtBU1lOQ10gZmFpbGVkOiAiCisgICAgc3RkOjpjZXJyIDw8ICJEZXRlcm1pbmVJZlZhbGlkQ3VkYURldmljZSBbU1lOQ10gZmFpbGVkOiAiCiAgICAgICAgICAgICAgIDw8IGN1ZGFHZXRFcnJvclN0cmluZyhjdWRhR2V0TGFzdEVycm9yKCkpIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KKyAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0NvbXBsZXgvbWFpbi5jcHAgYi9UZXN0cy9DdWRhL0NvbXBsZXgvbWFpbi5jcHAKaW5kZXggNmNhNTk1Mi4uZGEwOWI0NCAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9Db21wbGV4L21haW4uY3BwCisrKyBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9tYWluLmNwcApAQCAtMjIsNSArMjIsNiBAQAogCiAgIGludCByMSA9IGNhbGxfY3VkYV9zZXBlcmFibGVfY29kZSg0Mik7CiAgIGludCByMiA9IG1peGVkX2xhdW5jaF9rZXJuZWwoNDIpOworCiAgIHJldHVybiAocjEgPT0gNDIgfHwgcjIgPT0gNDIpID8gMSA6IDA7CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0NvbXBsZXgvbWl4ZWQuY3UgYi9UZXN0cy9DdWRhL0NvbXBsZXgvbWl4ZWQuY3UKaW5kZXggNWI4NWFlYy4uNzYxMTlhZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9Db21wbGV4L21peGVkLmN1CisrKyBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9taXhlZC5jdQpAQCAtMTUsNyArMTUsNyBAQAogcmVzdWx0X3R5cGUgX19kZXZpY2VfXyBmaWxlMV9mdW5jKGludCB4KTsKIHJlc3VsdF90eXBlX2R5bmFtaWMgX19kZXZpY2VfXyBmaWxlMl9mdW5jKGludCB4KTsKIAotSU1QT1JUIHZvaWQgX19ob3N0X18gY3VkYV9keW5hbWljX2xpYl9mdW5jKCk7CitJTVBPUlQgYm9vbCBfX2hvc3RfXyBjdWRhX2R5bmFtaWNfbGliX2Z1bmMoKTsKIAogc3RhdGljIF9fZ2xvYmFsX18gdm9pZCBtaXhlZF9rZXJuZWwocmVzdWx0X3R5cGUqIHIsIGludCB4KQogewpAQCAtMjUsNyArMjUsOSBAQAogCiBFWFBPUlQgaW50IG1peGVkX2xhdW5jaF9rZXJuZWwoaW50IHgpCiB7Ci0gIGN1ZGFfZHluYW1pY19saWJfZnVuYygpOworICBpZiAoIWN1ZGFfZHluYW1pY19saWJfZnVuYygpKSB7CisgICAgcmV0dXJuIHg7CisgIH0KIAogICByZXN1bHRfdHlwZSogcjsKICAgY3VkYUVycm9yX3QgZXJyID0gY3VkYU1hbGxvY01hbmFnZWQoJnIsIHNpemVvZihyZXN1bHRfdHlwZSkpOwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9JbmNsdWRlUGF0aE5vVG9vbGtpdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvSW5jbHVkZVBhdGhOb1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlMTU2MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvSW5jbHVkZVBhdGhOb1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuOCkKK3Byb2plY3QgKEluY2x1ZGVQYXRoTm9Ub29sa2l0IENYWCBDVURBKQorCisjR29hbCBmb3IgdGhpcyBleGFtcGxlOgorIyBWYWxpZGF0ZSB0aGF0IGJldHdlZW4gdGhlIENYWCBpbXBsaWNpdCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCB0aGUKKyMgQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMgZGlyZWN0b3JpZXMgd2UgY2FuIGZpbmQKKyMgdGhlIGN1ZGEgcnVudGltZSBoZWFkZXJzCisKK2FkZF9leGVjdXRhYmxlKEluY2x1ZGVQYXRoTm9Ub29sa2l0IG1haW4uY3BwKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoSW5jbHVkZVBhdGhOb1Rvb2xraXQgUFJJVkFURQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFU30pCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL21haW4uY3BwIGIvVGVzdHMvQ3VkYS9JbmNsdWRlUGF0aE5vVG9vbGtpdC9tYWluLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL0N1ZGEvVG9vbGtpdEluY2x1ZGUvbWFpbi5jcHAKY29weSB0byBUZXN0cy9DdWRhL0luY2x1ZGVQYXRoTm9Ub29sa2l0L21haW4uY3BwCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTk2NjIuLjAwMDAwMDAKLS0tIGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKLXByb2plY3QoTWl4ZWRTdGFuZGFyZExldmVscyBDWFggQ1VEQSkKLQotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCi0KLXNldChDTUFLRV9DWFhfU1RBTkRBUkQgMTEpCi0KLWFkZF9leGVjdXRhYmxlKE1peGVkU3RhbmRhcmRMZXZlbHMgbWFpbi5jdSkKLXRhcmdldF9jb21waWxlX2ZlYXR1cmVzKE1peGVkU3RhbmRhcmRMZXZlbHMgUFVCTElDIGN4eF9zdGRfMTEpCi0KLWlmKEFQUExFKQotICAjIEhlbHAgdGhlIHN0YXRpYyBjdWRhIHJ1bnRpbWUgZmluZCB0aGUgZHJpdmVyIChsaWJjdWRhLmR5bGxpYikgYXQgcnVudGltZS4KLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBNaXhlZFN0YW5kYXJkTGV2ZWxzIFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKLWVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2U1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0KE1peGVkU3RhbmRhcmRMZXZlbHMxIENYWCBDVURBKQorCitzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKKworc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxNCkKK3NldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorCithZGRfZXhlY3V0YWJsZShNaXhlZFN0YW5kYXJkTGV2ZWxzMSBtYWluLmN1IGxpYi5jcHApCisKK2lmKEFQUExFKQorICAjIEhlbHAgdGhlIHN0YXRpYyBjdWRhIHJ1bnRpbWUgZmluZCB0aGUgZHJpdmVyIChsaWJjdWRhLmR5bGxpYikgYXQgcnVudGltZS4KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBNaXhlZFN0YW5kYXJkTGV2ZWxzMSBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL2xpYi5jcHAgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL2xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiYmFjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvbGliLmNwcApAQCAtMCwwICsxLDcgQEAKKworaW50IGZ1bmMoaW50IEEsIGludCBCKQoreworICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IGMrKzE0CisgIGF1dG8gbXVsdF9mdW5jID0gW10oYXV0byBhLCBhdXRvIGIpIHsgcmV0dXJuIGEgKiBiOyB9OworICByZXR1cm4gbXVsdF9mdW5jKEEsIEIpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMS9tYWluLmN1IGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMS9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDJjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL21haW4uY3UKQEAgLTAsMCArMSw5IEBACisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IGMrKzExCisgIHVzaW5nIHJldHVybnYgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgMD47CisgIHJldHVybiByZXR1cm52Ojp2YWx1ZTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZGQzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0KE1peGVkU3RhbmRhcmRMZXZlbHMyIENYWCBDVURBKQorCitzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKKworc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxNykgI3RoaXMgY2FuIGRlY2F5CisKK2FkZF9leGVjdXRhYmxlKE1peGVkU3RhbmRhcmRMZXZlbHMyIG1haW4uY3UgbGliLmNwcCkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKE1peGVkU3RhbmRhcmRMZXZlbHMyIFBVQkxJQyBjdWRhX3N0ZF8xMSkKKworaWYoQVBQTEUpCisgICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgorICBzZXRfcHJvcGVydHkoVEFSR0VUIE1peGVkU3RhbmRhcmRMZXZlbHMyIFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvbGliLmNwcCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvbGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJiYWNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMi9saWIuY3BwCkBAIC0wLDAgKzEsNyBAQAorCitpbnQgZnVuYyhpbnQgQSwgaW50IEIpCit7CisgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgYysrMTQKKyAgYXV0byBtdWx0X2Z1bmMgPSBbXShhdXRvIGEsIGF1dG8gYikgeyByZXR1cm4gYSAqIGI7IH07CisgIHJldHVybiBtdWx0X2Z1bmMoQSwgQik7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL21haW4uY3UgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3YTQxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvbWFpbi5jdQpAQCAtMCwwICsxLDExIEBACisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wgJiYgIWRlZmluZWQoX01TQ19WRVIpCisjICBlcnJvciAiaW52YWxpZCBzdGFuZGFyZCB2YWx1ZSIKKyNlbmRpZgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHVzaW5nIHJldHVybnYgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgMD47CisgIHJldHVybiByZXR1cm52Ojp2YWx1ZTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNjExYmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0KE1peGVkU3RhbmRhcmRMZXZlbHMzIENYWCBDVURBKQorCitzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKKworYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczMgbWFpbi5jdSBsaWIuY3BwKQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVsczMgUFVCTElDIGN1ZGFfc3RkXzAzIGN4eF9zdGRfMTQpCisKK2lmKEFQUExFKQorICAjIEhlbHAgdGhlIHN0YXRpYyBjdWRhIHJ1bnRpbWUgZmluZCB0aGUgZHJpdmVyIChsaWJjdWRhLmR5bGxpYikgYXQgcnVudGltZS4KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBNaXhlZFN0YW5kYXJkTGV2ZWxzMyBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL2xpYi5jcHAgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL2xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiYmFjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvbGliLmNwcApAQCAtMCwwICsxLDcgQEAKKworaW50IGZ1bmMoaW50IEEsIGludCBCKQoreworICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IGMrKzE0CisgIGF1dG8gbXVsdF9mdW5jID0gW10oYXV0byBhLCBhdXRvIGIpIHsgcmV0dXJuIGEgKiBiOyB9OworICByZXR1cm4gbXVsdF9mdW5jKEEsIEIpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9tYWluLmN1IGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMTllOGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL21haW4uY3UKQEAgLTAsMCArMSw1IEBACisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWY2ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQorcHJvamVjdChNaXhlZFN0YW5kYXJkTGV2ZWxzNCBDWFggQ1VEQSkKKworc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCisKK3NldChDTUFLRV9DVURBX1NUQU5EQVJEIDAzKQorCithZGRfZXhlY3V0YWJsZShNaXhlZFN0YW5kYXJkTGV2ZWxzNCBtYWluLmN1IGxpYi5jcHApCit0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhNaXhlZFN0YW5kYXJkTGV2ZWxzNCBQVUJMSUMgY3h4X3N0ZF8xNCkKKworaWYoQVBQTEUpCisgICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgorICBzZXRfcHJvcGVydHkoVEFSR0VUIE1peGVkU3RhbmRhcmRMZXZlbHM0IFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvbGliLmNwcCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvbGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZmYzIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNC9saWIuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKworCitjb25zdGV4cHIgaW50IGZ1bmMoaW50IEEsIGludCBCKQoreworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTkxMworICAvLyBubyBzdXBwcG9ydCBmb3IgZXh0ZW5kZWQgY29uc3RleHByCisgIHJldHVybiBCICogQTsKKyNlbHNlCisgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgYysrMTQKKyAgaWYgKEEgPCBCKSB7CisgICAgcmV0dXJuIEEgKyBCOworICB9IGVsc2UgeworICAgIHJldHVybiBCICogQTsKKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L21haW4uY3UgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxOWU4ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvbWFpbi5jdQpAQCAtMCwwICsxLDUgQEAKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDlmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0KE1peGVkU3RhbmRhcmRMZXZlbHM1IENYWCBDVURBKQorCitzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKKworc2V0KENNQUtFX0NYWF9TVEFOREFSRCA5OCkKKworYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczUgbWFpbi5jdSBsaWIuY3BwKQorCitpZihBUFBMRSkKKyAgIyBIZWxwIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lIGZpbmQgdGhlIGRyaXZlciAobGliY3VkYS5keWxsaWIpIGF0IHJ1bnRpbWUuCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgTWl4ZWRTdGFuZGFyZExldmVsczUgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNS9saWIuY3BwIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNS9saWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkN2IzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L2xpYi5jcHAKQEAgLTAsMCArMSwxMyBAQAorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyAgZXJyb3IgImludmFsaWQgc3RhbmRhcmQgdmFsdWUiCisjZW5kaWYKK2ludCBmdW5jKGludCBBLCBpbnQgQikKK3sKKyAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBjKysxNAorICBpZiAoQSA8IEIpIHsKKyAgICByZXR1cm4gQSArIEI7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIEIgKiBBOworICB9Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L21haW4uY3UgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5YWZkNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczUvbWFpbi5jdQpAQCAtMCwwICsxLDggQEAKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIGVycm9yICJpbnZhbGlkIHN0YW5kYXJkIHZhbHVlIgorI2VuZGlmCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGRmNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBDWFgpCisKKyNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZhbGlkYXRlIHRoYXQgd2l0aCBjKysgd2UgY2FuIHVzZSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIENVREEgdG9vbGtpdCwgYW5kCisjIHNwZWNpZnkgdGhlIGN1ZGEgcnVudGltZQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQorCithZGRfbGlicmFyeShDb21tb24gT0JKRUNUIGN1cmFuZC5jcHAgbnBwaWYuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbW1vbiBQUklWQVRFIENVREE6OnRvb2xraXQpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ29tbW9uIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworI3NoYXJlZCBydW50aW1lIHdpdGggc2hhcmVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShTaGFyZWRUb29sa2l0IFNIQVJFRCBzaGFyZWQuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFJJVkFURSBDb21tb24gUFVCTElDIENVREE6OmN1cmFuZCBDVURBOjpucHBpZikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTaGFyZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnQpCisKKyMgVGhlIENVREEgb25seSBzaGlwcyB0aGUgc2hhcmVkIHZlcnNpb24gb2YgdGhlIHRvb2xraXQgbGlicmFyaWVzCisjIG9uIHdpbmRvd3MKK2lmKE5PVCBXSU4zMikKKyAgI3NoYXJlZCBydW50aW1lIHdpdGggc3RhdGljIHRvb2xraXQgbGlicmFyaWVzCisgIGFkZF9saWJyYXJ5KFN0YXRpY1Rvb2xraXQgU0hBUkVEIHN0YXRpYy5jcHApCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhTdGF0aWNUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZF9zdGF0aWMgQ1VEQTo6bnBwaWZfc3RhdGljKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljVG9vbGtpdCBQVUJMSUMgQ1VEQTo6Y3VkYXJ0KQorCisgICNzdGF0aWMgcnVudGltZSB3aXRoIG1peGVkIHRvb2xraXQgbGlicmFyaWVzCisgIGFkZF9saWJyYXJ5KE1peGVkVG9vbGtpdCBTSEFSRUQgbWl4ZWQuY3BwKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWl4ZWRUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZF9zdGF0aWMgQ1VEQTo6bnBwaWYpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNaXhlZFRvb2xraXQgUFVCTElDIENVREE6OmN1ZGFydCkKK2VuZGlmKCkKKworYWRkX2V4ZWN1dGFibGUoU2hhcmVkUnVudGltZVBsdXNUb29sa2l0IG1haW4uY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBQUklWQVRFIFNoYXJlZFRvb2xraXQKKyAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9OQU1FX0lGX0VYSVNUUzpTdGF0aWNUb29sa2l0PgorICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOk1peGVkVG9vbGtpdD4pCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3BwIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ3YjUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmNwcApAQCAtMCwwICsxLDY1IEBACisvLyBDb21lcyBmcm9tOgorLy8gaHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdXJhbmQvaG9zdC1hcGktb3ZlcnZpZXcuaHRtbCNob3N0LWFwaS1leGFtcGxlCisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKKy8qCisgKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgaG9zdCBDVVJBTkQgQVBJIHRvIGdlbmVyYXRlIDEwMAorICogcHNldWRvcmFuZG9tIGZsb2F0cy4KKyAqLworI2luY2x1ZGUgPGN1ZGEuaD4KKyNpbmNsdWRlIDxjdXJhbmQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIENVREFfQ0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBjdWRhU3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIENVUkFORF9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBDVVJBTkRfU1RBVFVTX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK0VYUE9SVCBpbnQgY3VyYW5kX21haW4oKQoreworICBzaXplX3QgbiA9IDEwMDsKKyAgc2l6ZV90IGk7CisgIGN1cmFuZEdlbmVyYXRvcl90IGdlbjsKKyAgZmxvYXQgKmRldkRhdGEsICpob3N0RGF0YTsKKworICAvKiBBbGxvY2F0ZSBuIGZsb2F0cyBvbiBob3N0ICovCisgIGhvc3REYXRhID0gKGZsb2F0KiljYWxsb2Mobiwgc2l6ZW9mKGZsb2F0KSk7CisKKyAgLyogQWxsb2NhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVREFfQ0FMTChjdWRhTWFsbG9jKCh2b2lkKiopJmRldkRhdGEsIG4gKiBzaXplb2YoZmxvYXQpKSk7CisKKyAgLyogQ3JlYXRlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRDcmVhdGVHZW5lcmF0b3IoJmdlbiwgQ1VSQU5EX1JOR19QU0VVRE9fREVGQVVMVCkpOworCisgIC8qIFNldCBzZWVkICovCisgIENVUkFORF9DQUxMKGN1cmFuZFNldFBzZXVkb1JhbmRvbUdlbmVyYXRvclNlZWQoZ2VuLCAxMjM0VUxMKSk7CisKKyAgLyogR2VuZXJhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVUkFORF9DQUxMKGN1cmFuZEdlbmVyYXRlVW5pZm9ybShnZW4sIGRldkRhdGEsIG4pKTsKKworICAvKiBDb3B5IGRldmljZSBtZW1vcnkgdG8gaG9zdCAqLworICBDVURBX0NBTEwoCisgICAgY3VkYU1lbWNweShob3N0RGF0YSwgZGV2RGF0YSwgbiAqIHNpemVvZihmbG9hdCksIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpKTsKKworICAvKiBDbGVhbnVwICovCisgIENVUkFORF9DQUxMKGN1cmFuZERlc3Ryb3lHZW5lcmF0b3IoZ2VuKSk7CisgIENVREFfQ0FMTChjdWRhRnJlZShkZXZEYXRhKSk7CisgIGZyZWUoaG9zdERhdGEpOworICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jcHAgYi9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRkYTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jcHAKQEAgLTAsMCArMSwyMyBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorSU1QT1JUIGludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIDA7Cit9CitpbnQgbWl4ZWRfdmVyc2lvbigpCit7CisgIHJldHVybiAwOworfQorI2Vsc2UKK2ludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCk7CitpbnQgbWl4ZWRfdmVyc2lvbigpOworI2VuZGlmCisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIG1peGVkX3ZlcnNpb24oKSA9PSAwICYmIHNoYXJlZF92ZXJzaW9uKCkgPT0gMCAmJgorICAgIHN0YXRpY192ZXJzaW9uKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmNwcCBiL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU2ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIElNUE9SVAorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK0lNUE9SVCBpbnQgY3VyYW5kX21haW4oKTsKK0lNUE9SVCBpbnQgbnBwaWZfbWFpbigpOworCitFWFBPUlQgaW50IG1peGVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNTM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jcHAKQEAgLTAsMCArMSw5MiBAQAorLy8gQ29tZXMgZnJvbQorLy8gaHR0cHM6Ly9kZXZ0YWxrLm52aWRpYS5jb20vZGVmYXVsdC90b3BpYy8xMDM3NDgyL2dwdS1hY2NlbGVyYXRlZC1saWJyYXJpZXMvaGVscC1tZS1oZWxwLXlvdS13aXRoLW1vZGVybi1jbWFrZS1hbmQtY3VkYS1td2UtZm9yLW5wcC9wb3N0LzUyNzEwNjYvIzUyNzEwNjYKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN1ZGFfcnVudGltZV9hcGkuaD4KKyNpbmNsdWRlIDxucHBpX2ZpbHRlcmluZ19mdW5jdGlvbnMuaD4KKworRVhQT1JUIGludCBucHBpZl9tYWluKCkKK3sKKyAgLyoqCisgICAqIDgtYml0IHVuc2lnbmVkIHNpbmdsZS1jaGFubmVsIDFEIHJvdyBjb252b2x1dGlvbi4KKyAgICovCisgIGNvbnN0IGludCBzaW1ncm93cyA9IDMyOworICBjb25zdCBpbnQgc2ltZ2NvbHMgPSAzMjsKKyAgTnBwOHUgKmRfcFNyYywgKmRfcERzdDsKKyAgY29uc3QgaW50IG5NYXNrU2l6ZSA9IDM7CisgIE5wcGlTaXplIG9ST0k7CisgIG9ST0kud2lkdGggPSBzaW1nY29scyAtIG5NYXNrU2l6ZTsKKyAgb1JPSS5oZWlnaHQgPSBzaW1ncm93czsKKyAgY29uc3QgaW50IHNpbWdzaXplID0gc2ltZ3Jvd3MgKiBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgZGltZ3NpemUgPSBvUk9JLndpZHRoICogb1JPSS5oZWlnaHQgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IHNpbWdwaXggPSBzaW1ncm93cyAqIHNpbWdjb2xzOworICBjb25zdCBpbnQgZGltZ3BpeCA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodDsKKyAgY29uc3QgaW50IG5TcmNTdGVwID0gc2ltZ2NvbHMgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IG5Ec3RTdGVwID0gb1JPSS53aWR0aCAqIHNpemVvZihkX3BEc3RbMF0pOworICBjb25zdCBpbnQgcGl4dmFsID0gMTsKKyAgY29uc3QgaW50IG5EaXZpc29yID0gMTsKKyAgY29uc3QgTnBwMzJzIGhfcEtlcm5lbFtuTWFza1NpemVdID0geyBwaXh2YWwsIHBpeHZhbCwgcGl4dmFsIH07CisgIE5wcDMycyogZF9wS2VybmVsOworICBjb25zdCBOcHAzMnMgbkFuY2hvciA9IDI7CisgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wU3JjLCBzaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcERzdCwgZGltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHNldCBpbWFnZSB0byBwaXh2YWwgaW5pdGlhbGx5CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wU3JjLCBwaXh2YWwsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wRHN0LCAwLCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWVtY3B5KGRfcEtlcm5lbCwgaF9wS2VybmVsLCBuTWFza1NpemUgKiBzaXplb2YoZF9wS2VybmVsWzBdKSwKKyAgICAgICAgICAgICAgICAgICBjdWRhTWVtY3B5SG9zdFRvRGV2aWNlKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIGNvcHkgc3JjIHRvIGRzdAorICBOcHBTdGF0dXMgcmV0ID0KKyAgICBucHBpRmlsdGVyUm93Xzh1X0MxUihkX3BTcmMsIG5TcmNTdGVwLCBkX3BEc3QsIG5Ec3RTdGVwLCBvUk9JLCBkX3BLZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgbk1hc2tTaXplLCBuQW5jaG9yLCBuRGl2aXNvcik7CisgIGFzc2VydChyZXQgPT0gTlBQX05PX0VSUk9SKTsKKyAgTnBwOHUqIGhfaW1ncmVzID0gbmV3IE5wcDh1W2RpbWdwaXhdOworICBlcnIgPSBjdWRhTWVtY3B5KGhfaW1ncmVzLCBkX3BEc3QsIGRpbWdzaXplLCBjdWRhTWVtY3B5RGV2aWNlVG9Ib3N0KTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHRlc3QgZm9yIGZpbHRlcmluZworICBmb3IgKGludCBpID0gMDsgaSA8IGRpbWdwaXg7IGkrKykgeworICAgIGlmIChoX2ltZ3Jlc1tpXSAhPSAocGl4dmFsICogcGl4dmFsICogbk1hc2tTaXplKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJoX2ltZ3JlcyBhdCBpbmRleCAlZCBmYWlsZWQgdG8gbWF0Y2hcbiIsIGkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3BwIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MzZGJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmNwcApAQCAtMCwwICsxLDE2IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBJTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBkZWZpbmUgRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgIGRlZmluZSBJTVBPUlQKKyMgIGRlZmluZSBFWFBPUlQKKyNlbmRpZgorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgc2hhcmVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmNwcCBiL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMmZhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jcHAKQEAgLTAsMCArMSwxNiBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworSU1QT1JUIGludCBjdXJhbmRfbWFpbigpOworSU1QT1JUIGludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgc3RhdGljX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZjMzkyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyOSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBDWFgpCisKKyNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZhbGlkYXRlIHRoYXQgd2l0aCBjKysgd2UgY2FuIHVzZSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIENVREEgdG9vbGtpdCwgYW5kCisjIHNwZWNpZnkgdGhlIGN1ZGEgcnVudGltZQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQorCithZGRfbGlicmFyeShDb21tb24gT0JKRUNUIGN1cmFuZC5jcHAgbnBwaWYuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbW1vbiBQUklWQVRFIENVREE6OnRvb2xraXQpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ29tbW9uIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworI3N0YXRpYyBydW50aW1lIHdpdGggc2hhcmVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShTaGFyZWRUb29sa2l0IFNIQVJFRCBzaGFyZWQuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFJJVkFURSBDb21tb24gUFVCTElDIENVREE6OmN1cmFuZCBDVURBOjpucHBpZikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTaGFyZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCisjc3RhdGljIHJ1bnRpbWUgd2l0aCBzdGF0aWMgdG9vbGtpdCBsaWJyYXJpZXMKK2FkZF9saWJyYXJ5KFN0YXRpY1Rvb2xraXQgU0hBUkVEIHN0YXRpYy5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljVG9vbGtpdCBQUklWQVRFIENvbW1vbiBDVURBOjpjdXJhbmRfc3RhdGljIENVREE6Om5wcGlmX3N0YXRpYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTdGF0aWNUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCisjc3RhdGljIHJ1bnRpbWUgd2l0aCBtaXhlZCB0b29sa2l0IGxpYnJhcmllcworYWRkX2xpYnJhcnkoTWl4ZWRUb29sa2l0IFNIQVJFRCBtaXhlZC5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoTWl4ZWRUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZCBDVURBOjpucHBpZl9zdGF0aWMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoTWl4ZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCithZGRfZXhlY3V0YWJsZShTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgbWFpbi5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljUnVudGltZVBsdXNUb29sa2l0IFBSSVZBVEUgU2hhcmVkVG9vbGtpdCBTdGF0aWNUb29sa2l0IE1peGVkVG9vbGtpdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jcHAgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODcyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8vIENvbWVzIGZyb206CisvLyBodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1cmFuZC9ob3N0LWFwaS1vdmVydmlldy5odG1sI2hvc3QtYXBpLWV4YW1wbGUKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBob3N0IENVUkFORCBBUEkgdG8gZ2VuZXJhdGUgMTAwCisgKiBwc2V1ZG9yYW5kb20gZmxvYXRzLgorICovCisjaW5jbHVkZSA8Y3VkYS5oPgorI2luY2x1ZGUgPGN1cmFuZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgQ1VEQV9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHgpICE9IGN1ZGFTdWNjZXNzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZigiRXJyb3IgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1VSQU5EX0NBTEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHgpICE9IENVUkFORF9TVEFUVVNfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZigiRXJyb3IgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworaW50IGN1cmFuZF9tYWluKCkKK3sKKyAgc2l6ZV90IG4gPSAxMDA7CisgIHNpemVfdCBpOworICBjdXJhbmRHZW5lcmF0b3JfdCBnZW47CisgIGZsb2F0ICpkZXZEYXRhLCAqaG9zdERhdGE7CisKKyAgLyogQWxsb2NhdGUgbiBmbG9hdHMgb24gaG9zdCAqLworICBob3N0RGF0YSA9IChmbG9hdCopY2FsbG9jKG4sIHNpemVvZihmbG9hdCkpOworCisgIC8qIEFsbG9jYXRlIG4gZmxvYXRzIG9uIGRldmljZSAqLworICBDVURBX0NBTEwoY3VkYU1hbGxvYygodm9pZCoqKSZkZXZEYXRhLCBuICogc2l6ZW9mKGZsb2F0KSkpOworCisgIC8qIENyZWF0ZSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kQ3JlYXRlR2VuZXJhdG9yKCZnZW4sIENVUkFORF9STkdfUFNFVURPX0RFRkFVTFQpKTsKKworICAvKiBTZXQgc2VlZCAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRTZXRQc2V1ZG9SYW5kb21HZW5lcmF0b3JTZWVkKGdlbiwgMTIzNFVMTCkpOworCisgIC8qIEdlbmVyYXRlIG4gZmxvYXRzIG9uIGRldmljZSAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRHZW5lcmF0ZVVuaWZvcm0oZ2VuLCBkZXZEYXRhLCBuKSk7CisKKyAgLyogQ29weSBkZXZpY2UgbWVtb3J5IHRvIGhvc3QgKi8KKyAgQ1VEQV9DQUxMKAorICAgIGN1ZGFNZW1jcHkoaG9zdERhdGEsIGRldkRhdGEsIG4gKiBzaXplb2YoZmxvYXQpLCBjdWRhTWVtY3B5RGV2aWNlVG9Ib3N0KSk7CisKKyAgLyogQ2xlYW51cCAqLworICBDVVJBTkRfQ0FMTChjdXJhbmREZXN0cm95R2VuZXJhdG9yKGdlbikpOworICBDVURBX0NBTEwoY3VkYUZyZWUoZGV2RGF0YSkpOworICBmcmVlKGhvc3REYXRhKTsKKyAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21haW4uY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwOWY4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21haW4uY3BwCkBAIC0wLDAgKzEsMTEgQEAKKworCitpbnQgc2hhcmVkX3ZlcnNpb24oKTsKK2ludCBzdGF0aWNfdmVyc2lvbigpOworaW50IG1peGVkX3ZlcnNpb24oKTsKKworaW50IG1haW4oKQoreworICByZXR1cm4gbWl4ZWRfdmVyc2lvbigpID09IDAgJiYgc2hhcmVkX3ZlcnNpb24oKSA9PSAwICYmCisgICAgc3RhdGljX3ZlcnNpb24oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTE0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jcHAKQEAgLTAsMCArMSw4IEBACisKK2ludCBjdXJhbmRfbWFpbigpOworaW50IG5wcGlmX21haW4oKTsKKworaW50IG1peGVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzEwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jcHAKQEAgLTAsMCArMSw4NiBAQAorLy8gQ29tZXMgZnJvbQorLy8gaHR0cHM6Ly9kZXZ0YWxrLm52aWRpYS5jb20vZGVmYXVsdC90b3BpYy8xMDM3NDgyL2dwdS1hY2NlbGVyYXRlZC1saWJyYXJpZXMvaGVscC1tZS1oZWxwLXlvdS13aXRoLW1vZGVybi1jbWFrZS1hbmQtY3VkYS1td2UtZm9yLW5wcC9wb3N0LzUyNzEwNjYvIzUyNzEwNjYKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN1ZGFfcnVudGltZV9hcGkuaD4KKyNpbmNsdWRlIDxucHBpX2ZpbHRlcmluZ19mdW5jdGlvbnMuaD4KKworaW50IG5wcGlmX21haW4oKQoreworICAvKioKKyAgICogOC1iaXQgdW5zaWduZWQgc2luZ2xlLWNoYW5uZWwgMUQgcm93IGNvbnZvbHV0aW9uLgorICAgKi8KKyAgY29uc3QgaW50IHNpbWdyb3dzID0gMzI7CisgIGNvbnN0IGludCBzaW1nY29scyA9IDMyOworICBOcHA4dSAqZF9wU3JjLCAqZF9wRHN0OworICBjb25zdCBpbnQgbk1hc2tTaXplID0gMzsKKyAgTnBwaVNpemUgb1JPSTsKKyAgb1JPSS53aWR0aCA9IHNpbWdjb2xzIC0gbk1hc2tTaXplOworICBvUk9JLmhlaWdodCA9IHNpbWdyb3dzOworICBjb25zdCBpbnQgc2ltZ3NpemUgPSBzaW1ncm93cyAqIHNpbWdjb2xzICogc2l6ZW9mKGRfcFNyY1swXSk7CisgIGNvbnN0IGludCBkaW1nc2l6ZSA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodCAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgc2ltZ3BpeCA9IHNpbWdyb3dzICogc2ltZ2NvbHM7CisgIGNvbnN0IGludCBkaW1ncGl4ID0gb1JPSS53aWR0aCAqIG9ST0kuaGVpZ2h0OworICBjb25zdCBpbnQgblNyY1N0ZXAgPSBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgbkRzdFN0ZXAgPSBvUk9JLndpZHRoICogc2l6ZW9mKGRfcERzdFswXSk7CisgIGNvbnN0IGludCBwaXh2YWwgPSAxOworICBjb25zdCBpbnQgbkRpdmlzb3IgPSAxOworICBjb25zdCBOcHAzMnMgaF9wS2VybmVsW25NYXNrU2l6ZV0gPSB7IHBpeHZhbCwgcGl4dmFsLCBwaXh2YWwgfTsKKyAgTnBwMzJzKiBkX3BLZXJuZWw7CisgIGNvbnN0IE5wcDMycyBuQW5jaG9yID0gMjsKKyAgY3VkYUVycm9yX3QgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BTcmMsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wRHN0LCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcEtlcm5lbCwgbk1hc2tTaXplICogc2l6ZW9mKGRfcEtlcm5lbFswXSkpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gc2V0IGltYWdlIHRvIHBpeHZhbCBpbml0aWFsbHkKKyAgZXJyID0gY3VkYU1lbXNldChkX3BTcmMsIHBpeHZhbCwgc2ltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1lbXNldChkX3BEc3QsIDAsIGRpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1jcHkoZF9wS2VybmVsLCBoX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pLAorICAgICAgICAgICAgICAgICAgIGN1ZGFNZW1jcHlIb3N0VG9EZXZpY2UpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gY29weSBzcmMgdG8gZHN0CisgIE5wcFN0YXR1cyByZXQgPQorICAgIG5wcGlGaWx0ZXJSb3dfOHVfQzFSKGRfcFNyYywgblNyY1N0ZXAsIGRfcERzdCwgbkRzdFN0ZXAsIG9ST0ksIGRfcEtlcm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuTWFza1NpemUsIG5BbmNob3IsIG5EaXZpc29yKTsKKyAgYXNzZXJ0KHJldCA9PSBOUFBfTk9fRVJST1IpOworICBOcHA4dSogaF9pbWdyZXMgPSBuZXcgTnBwOHVbZGltZ3BpeF07CisgIGVyciA9IGN1ZGFNZW1jcHkoaF9pbWdyZXMsIGRfcERzdCwgZGltZ3NpemUsIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gdGVzdCBmb3IgZmlsdGVyaW5nCisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZ3BpeDsgaSsrKSB7CisgICAgaWYgKGhfaW1ncmVzW2ldICE9IChwaXh2YWwgKiBwaXh2YWwgKiBuTWFza1NpemUpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImhfaW1ncmVzIGF0IGluZGV4ICVkIGZhaWxlZCB0byBtYXRjaFxuIiwgaSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jcHAgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjdiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3BwCkBAIC0wLDAgKzEsOCBAQAorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK2ludCBzaGFyZWRfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTdlYjRjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmNwcApAQCAtMCwwICsxLDggQEAKKworaW50IGN1cmFuZF9tYWluKCk7CitpbnQgbnBwaWZfbWFpbigpOworCitpbnQgc3RhdGljX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjQ2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzOCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFRvb2xraXQgQ1hYKQorCisjR29hbCBmb3IgdGhpcyBleGFtcGxlOgorIyBWYWxpZGF0ZSB0aGF0IHdlIGNhbiB1c2UgQ1VEQVRvb2xraXQgdG8gZmluZCBjdWRhIGluY2x1ZGUgcGF0aHMKK2ZpbmRfcGFja2FnZShDVURBVG9vbGtpdCBSRVFVSVJFRCkKKworbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT046ICR7Q1VEQVRvb2xraXRfVkVSU0lPTn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fTUFKT1I6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fTUlOT1I6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9NSU5PUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0g6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9QQVRDSH0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X0JJTl9ESVI6ICR7Q1VEQVRvb2xraXRfQklOX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X0lOQ0xVREVfRElSUzogJHtDVURBVG9vbGtpdF9JTkNMVURFX0RJUlN9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9MSUJSQVJZX0RJUjogJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0iKQorCisjIFZlcmlmeSB0aGF0IGFsbCB0aGUgQ1VEQTo6IHRhcmdldHMgZXhpc3QgZXZlbiB3aGVuIHRoZSBDVURBIGxhbmd1YWdlIGlzbid0IGVuYWJsZWQKKworZm9yZWFjaCAoY3VkYV9saWIgY3VkYXJ0IGN1ZGFfZHJpdmVyIGN1YmxhcyBjdWZmdCBjdWZmdHcgY3VyYW5kIGN1c29sdmVyIGN1c3BhcnNlIG52Z3JhcGgpCisgIGlmKE5PVCBUQVJHRVQgQ1VEQTo6JHtjdWRhX2xpYn0pCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIENVREE6OiR7Y3VkYV9saWJ9IHRhcmdldCB3YXMgZXhwZWN0ZWQgYnV0IGNvdWxkbid0IGJlIGZvdW5kIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2ggKGN1ZGFfbGliIG5wcGMgbnBwaWFsIG5wcGljYyBucHBpZGVpIG5wcGlmIG5wcGlnIG5wcGltIG5wcGlzdCBucHBpdGMgbnBwcyBucHBpY29tIG5wcGlzdSkKKyAgaWYoTk9UIFRBUkdFVCBDVURBOjoke2N1ZGFfbGlifSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgQ1VEQTo6JHtjdWRhX2xpYn0gdGFyZ2V0IHdhcyBleHBlY3RlZCBidXQgY291bGRuJ3QgYmUgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCAoY3VkYV9saWIgbnZydGMgbnZUb29sc0V4dCBPcGVuQ0wpCisgIGlmKE5PVCBUQVJHRVQgQ1VEQTo6JHtjdWRhX2xpYn0pCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIENVREE6OiR7Y3VkYV9saWJ9IHRhcmdldCB3YXMgZXhwZWN0ZWQgYnV0IGNvdWxkbid0IGJlIGZvdW5kIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2FkZF9leGVjdXRhYmxlKFRvb2xraXQgbWFpbi5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoVG9vbGtpdCBQUklWQVRFIENVREE6OnRvb2xraXQpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL21haW4uY3BwIGIvVGVzdHMvQ3VkYS9Ub29sa2l0L21haW4uY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL21haW4uY3BwCnJlbmFtZSB0byBUZXN0cy9DdWRhL1Rvb2xraXQvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvVG9vbGtpdEluY2x1ZGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ2YjU0Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL0N1ZGEvVG9vbGtpdEluY2x1ZGUvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy44KQotcHJvamVjdCAoVG9vbGtpdEluY2x1ZGUgQ1hYIENVREEpCi0KLSNHb2FsIGZvciB0aGlzIGV4YW1wbGU6Ci0jIFZhbGlkYXRlIHRoYXQgYmV0d2VlbiB0aGUgQ1hYIGltcGxpY2l0IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIHRoZQotIyBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUyBkaXJlY3RvcmllcyB3ZSBjYW4gZmluZAotIyB0aGUgY3VkYSBydW50aW1lIGhlYWRlcnMKLQotYWRkX2V4ZWN1dGFibGUoQ3VkYVRvb2xraXRJbmNsdWRlIG1haW4uY3BwKQotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoQ3VkYVRvb2xraXRJbmNsdWRlIFBSSVZBVEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVN9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dAppbmRleCBmMWZkMzQ0Li5jYzFlZTFhIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dApAQCAtNSw4ICs1LDIxIEBACiBBRERfVEVTVF9NQUNSTyhDdWRhT25seS5HUFVEZWJ1Z0ZsYWcgQ3VkYU9ubHlHUFVEZWJ1Z0ZsYWcpCiBBRERfVEVTVF9NQUNSTyhDdWRhT25seS5SZXNvbHZlRGV2aWNlU3ltYm9scyBDdWRhT25seVJlc29sdmVEZXZpY2VTeW1ib2xzKQogQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuU2VwYXJhdGVDb21waWxhdGlvbiBDdWRhT25seVNlcGFyYXRlQ29tcGlsYXRpb24pCitBRERfVEVTVF9NQUNSTyhDdWRhT25seS5TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQgQ3VkYU9ubHlTaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQpCitBRERfVEVTVF9NQUNSTyhDdWRhT25seS5TdGFuZGFyZDk4IEN1ZGFPbmx5U3RhbmRhcmQ5OCkKK0FERF9URVNUX01BQ1JPKEN1ZGFPbmx5LlRvb2xraXQgQ3VkYU9ubHlUb29sa2l0KQogQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuV2l0aERlZnMgQ3VkYU9ubHlXaXRoRGVmcykKIAorIyBUaGUgQ1VEQSBvbmx5IHNoaXBzIHRoZSBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgdG9vbGtpdCBsaWJyYXJpZXMKKyMgb24gd2luZG93cworaWYoTk9UIFdJTjMyKQorICBBRERfVEVTVF9NQUNSTyhDdWRhLlN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQpCitlbmRpZigpCisKK2lmKE1TVkMpCisgIEFERF9URVNUX01BQ1JPKEN1ZGFPbmx5LlBEQiBDdWRhT25seVBEQikKK2VuZGlmKCkKKwogYWRkX3Rlc3QoTkFNRSBDdWRhT25seS5Eb250UmVzb2x2ZURldmljZVN5bWJvbHMgQ09NTUFORAogICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KICAgLS1idWlsZC1hbmQtdGVzdApAQCAtMTgsNiArMzEsMTQgQEAKICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICkKIAotaWYoTVNWQykKLSAgQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuUERCIEN1ZGFPbmx5UERCKQotZW5kaWYoKQorYWRkX3Rlc3QoTkFNRSBDdWRhT25seS5SdW50aW1lQ29udHJvbHMgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1J1bnRpbWVDb250cm9scy8iCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vUnVudGltZUNvbnRyb2xzLyIKKyAgLS1idWlsZC10d28tY29uZmlnCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFJ1bnRpbWVDb250cm9scworICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvRW5hYmxlU3RhbmRhcmQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9FbmFibGVTdGFuZGFyZC9DTWFrZUxpc3RzLnR4dAppbmRleCA1NGUyYzE0Li5kZmNiOGRhIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9FbmFibGVTdGFuZGFyZC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9FbmFibGVTdGFuZGFyZC9DTWFrZUxpc3RzLnR4dApAQCAtMTEsOCArMTEsOSBAQAogYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlFbmFibGVTdGFuZGFyZCBtYWluLmN1KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFPbmx5RW5hYmxlU3RhbmRhcmQgUFJJVkFURSBDVURBU3RhdGljMTEgQ1VEQUR5bmFtaWMxMSkKIAotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENVREFTdGF0aWMxMSBDVURBRHluYW1pYzExIFBST1BFUlRJRVMgQ1VEQV9TVEFOREFSRCAxMSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhDVURBU3RhdGljMTEgQ1VEQUR5bmFtaWMxMSBQUk9QRVJUSUVTIENVREFfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKENVREFEeW5hbWljMTEgUFJJVkFURSBjdWRhX3N0ZF8xMSkKK3NldF90YXJnZXRfcHJvcGVydGllcyhDVURBU3RhdGljMTEgUFJPUEVSVElFUyBDVURBX1NUQU5EQVJEIDExKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENVREFTdGF0aWMxMSBQUk9QRVJUSUVTIENVREFfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKIAogI1ZlcmlmeSBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUwogZm9yZWFjaChkaXIgJHtDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFU30pCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SZXNvbHZlRGV2aWNlU3ltYm9scy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1Jlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDY0ODQ1YzUuLjU3YWEwYjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L1Jlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1Jlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0CkBAIC0yMiwxMSArMjIsMTEgQEAKICMgMy4gVmVyaWZ5IHRoYXQgd2UgY2FuJ3QgdXNlIHRob3NlIGRldmljZSBzeW1ib2xzIGZyb20gYW55dGhpbmcgdGhhdCBsaW5rcwogIyB0byB0aGUgc3RhdGljIGxpYnJhcnkKIHN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPVtzbV8zMF0gLWdlbmNvZGUgYXJjaD1jb21wdXRlXzUwLGNvZGU9XFxcImNvbXB1dGVfNTBcXFwiIikKLXNldChDTUFLRV9DWFhfU1RBTkRBUkQgMTEpCi1zZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCAxMSkKIAogYWRkX2xpYnJhcnkoQ1VEQVJlc29sdmVEZXZpY2VEZXBzQSBTVEFUSUMgZmlsZTEuY3UpCiBhZGRfbGlicmFyeShDVURBUmVzb2x2ZURldmljZURlcHNCIFNUQVRJQyBmaWxlMi5jdSkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKENVREFSZXNvbHZlRGV2aWNlRGVwc0EgUFVCTElDIGN1ZGFfc3RkXzExKQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoQ1VEQVJlc29sdmVEZXZpY2VEZXBzQiBQVUJMSUMgY3VkYV9zdGRfMTEpCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ1VEQVJlc29sdmVEZXZpY2VEZXBzQSBDVURBUmVzb2x2ZURldmljZURlcHNCCiAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUwogICAgICAgICAgICAgICAgICAgICAgIENVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OIE9OCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1OGZlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDYwIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQorcHJvamVjdCAoUnVudGltZUNvbnRyb2xzIENVREEpCisKKyMgRmluZCBubSBhbmQgZHVtcGJpbgoraWYoQ01BS0VfTk0pCisgIHNldChkdW1wX2NvbW1hbmQgJHtDTUFLRV9OTX0pCisgIHNldChkdW1wX2FyZ3MgLWcpCitlbHNlKCkKKyAgaW5jbHVkZShHZXRQcmVyZXF1aXNpdGVzKQorICBtZXNzYWdlKFNUQVRVUyAiY2FsbGluZyBsaXN0X3ByZXJlcXVpc2l0ZXMgdG8gZmluZCBkdW1wYmluIikKKyAgbGlzdF9wcmVyZXF1aXNpdGVzKCIke0NNQUtFX0NPTU1BTkR9IiAwIDAgMCkKKyAgaWYoZ3BfZHVtcGJpbikKKyAgICBzZXQoZHVtcF9jb21tYW5kICR7Z3BfZHVtcGJpbn0pCisgICAgc2V0KGR1bXBfYXJncyAvQVJDSElWRU1FTUJFUlMpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9W2NvbXB1dGVfMzBdIikKKworc2V0KENNQUtFX0NVREFfU1RBTkRBUkQgMTEpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkgc3RhdGljKQorCitpZihOT1QgIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBhZGRfbGlicmFyeShVc2VzTm9DdWRhUlQgU0hBUkVEIGZpbGUxLmN1KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVXNlc05vQ3VkYVJUIFBST1BFUlRJRVMgQ1VEQV9SVU5USU1FX0xJQlJBUlkgbm9uZSkKK2VuZGlmKCkKKworYWRkX2xpYnJhcnkoVXNlc1N0YXRpY0N1ZGFSVCBTSEFSRUQgZmlsZTIuY3UpCisKK2FkZF9leGVjdXRhYmxlKEN1ZGFPbmx5UnVudGltZUNvbnRyb2xzIG1haW4uY3UpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ3VkYU9ubHlSdW50aW1lQ29udHJvbHMgUFJPUEVSVElFUyBDVURBX1JVTlRJTUVfTElCUkFSWSBzaGFyZWQpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDdWRhT25seVJ1bnRpbWVDb250cm9scyBQUklWQVRFICQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOlVzZXNOb0N1ZGFSVD4gVXNlc1N0YXRpY0N1ZGFSVCkKKworCitpZihkdW1wX2NvbW1hbmQpCisgIGlmKFRBUkdFVCBVc2VzTm9DdWRhUlQpCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBVc2VzTm9DdWRhUlQgUE9TVF9CVUlMRAorICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAgIC1ERFVNUF9DT01NQU5EPSR7ZHVtcF9jb21tYW5kfQorICAgIC1ERFVNUF9BUkdTPSR7ZHVtcF9hcmdzfQorICAgIC1EVEVTVF9MSUJSQVJZX1BBVEg9JDxUQVJHRVRfRklMRTpVc2VzTm9DdWRhUlQ+CisgICAgLVAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L25vX3J1bnRpbWUuY21ha2UKKyAgICApCisgIGVuZGlmKCkKKyAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBVc2VzU3RhdGljQ3VkYVJUIFBPU1RfQlVJTEQKKyAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0KKyAgICAtRERVTVBfQ09NTUFORD0ke2R1bXBfY29tbWFuZH0KKyAgICAtRERVTVBfQVJHUz0ke2R1bXBfYXJnc30KKyAgICAtRFRFU1RfTElCUkFSWV9QQVRIPSQ8VEFSR0VUX0ZJTEU6VXNlc1N0YXRpY0N1ZGFSVD4KKyAgICAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdXNlc19zdGF0aWNfcnVudGltZS5jbWFrZQorICApCisgIHN0cmluZyhSRVBMQUNFICI7IiAifCIgZGlycyAiJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKKyAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBDdWRhT25seVJ1bnRpbWVDb250cm9scyBQT1NUX0JVSUxECisgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICAgLURFWEVDX1BBVEg9JDxUQVJHRVRfRklMRTpDdWRhT25seVJ1bnRpbWVDb250cm9scz4KKyAgICAtREVYVFJBX0xJQl9ESVJTPSIke2RpcnN9IgorICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS92ZXJpZnlfcnVudGltZS5jbWFrZQorICApCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTEuY3UgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTEuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiZWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9maWxlMS5jdQpAQCAtMCwwICsxLDE4IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK3ZvaWQgX19nbG9iYWxfXyBmaWxlMV9rZXJuZWwoaW50IHgsIGludCYgcikKK3sKKyAgciA9IC14OworfQorCitFWFBPUlQgaW50IGZpbGUxX2xhdW5jaF9rZXJuZWwoaW50IHgpCit7CisgIGludCByID0gMDsKKyAgZmlsZTFfa2VybmVsPDw8MSwgMT4+Pih4LCByKTsKKyAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTIuY3UgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTIuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2OGE3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9maWxlMi5jdQpAQCAtMCwwICsxLDE4IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK3ZvaWQgX19nbG9iYWxfXyBmaWxlMl9rZXJuZWwoaW50IHgsIGludCYgcikKK3sKKyAgciA9IC14OworfQorCitFWFBPUlQgaW50IGZpbGUyX2xhdW5jaF9rZXJuZWwoaW50IHgpCit7CisgIGludCByID0gMDsKKyAgZmlsZTJfa2VybmVsPDw8MSwgMT4+Pih4LCByKTsKKyAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvbWFpbi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTIyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvbWFpbi5jdQpAQCAtMCwwICsxLDgxIEBACisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgImN1ZGEuaCIKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjZW5kaWYKKworI2lmbmRlZiBfV0lOMzIKK0lNUE9SVCBpbnQgZmlsZTFfbGF1bmNoX2tlcm5lbChpbnQgeCk7CisjZW5kaWYKKworSU1QT1JUIGludCBmaWxlMl9sYXVuY2hfa2VybmVsKGludCB4KTsKKworaW50IGNob29zZV9jdWRhX2RldmljZSgpCit7CisgIGludCBuRGV2aWNlcyA9IDA7CisgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFHZXREZXZpY2VDb3VudCgmbkRldmljZXMpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIG51bWJlciBvZiBDVURBIGVuYWJsZWQgZGV2aWNlcyIKKyAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgIHJldHVybiAxOworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbkRldmljZXM7ICsraSkgeworICAgIGN1ZGFEZXZpY2VQcm9wIHByb3A7CisgICAgY3VkYUVycm9yX3QgZXJyID0gY3VkYUdldERldmljZVByb3BlcnRpZXMoJnByb3AsIGkpOworICAgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiQ291bGQgbm90IHJldHJpZXZlIHByb3BlcnRpZXMgZnJvbSBDVURBIGRldmljZSAiIDw8IGkKKyAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgc3RkOjpjb3V0IDw8ICJwcm9wLm1ham9yOiAiIDw8IHByb3AubWFqb3IgPDwgc3RkOjplbmRsOworICAgIGlmIChwcm9wLm1ham9yID49IDMpIHsKKyAgICAgIGVyciA9IGN1ZGFTZXREZXZpY2UoaSk7CisgICAgICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgICAgIHN0ZDo6Y291dCA8PCAiQ291bGQgbm90IHNlbGVjdCBDVURBIGRldmljZSAiIDw8IGkgPDwgc3RkOjplbmRsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgc3RkOjpjb3V0IDw8ICJDb3VsZCBub3QgZmluZCBhIENVREEgZW5hYmxlZCBjYXJkIHN1cHBvcnRpbmcgY29tcHV0ZSA+PTMuMCIKKyAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKworICByZXR1cm4gMTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICBpbnQgcmV0ID0gY2hvb3NlX2N1ZGFfZGV2aWNlKCk7CisgIGlmIChyZXQpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGN1ZGFFcnJvcl90IGVycjsKKyNpZm5kZWYgX1dJTjMyCisgIGZpbGUxX2xhdW5jaF9rZXJuZWwoMSk7CisgIGVyciA9IGN1ZGFHZXRMYXN0RXJyb3IoKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIHN0ZDo6Y2VyciA8PCAiZmlsZTFfbGF1bmNoX2tlcm5lbDoga2VybmVsIGxhdW5jaCBzaG91bGQgaGF2ZSBwYXNzZWQuXG4gIgorICAgICAgICAgICAgICAgICAiRXJyb3IgbWVzc2FnZTogIgorICAgICAgICAgICAgICA8PCBjdWRhR2V0RXJyb3JTdHJpbmcoZXJyKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIDE7CisgIH0KKyNlbmRpZgorCisgIGZpbGUyX2xhdW5jaF9rZXJuZWwoMSk7CisgIGVyciA9IGN1ZGFHZXRMYXN0RXJyb3IoKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIHN0ZDo6Y2VyciA8PCAiZmlsZTJfbGF1bmNoX2tlcm5lbDoga2VybmVsIGxhdW5jaCBzaG91bGQgaGF2ZSBwYXNzZWQuXG4gIgorICAgICAgICAgICAgICAgICAiRXJyb3IgbWVzc2FnZTogIgorICAgICAgICAgICAgICA8PCBjdWRhR2V0RXJyb3JTdHJpbmcoZXJyKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9ub19ydW50aW1lLmNtYWtlIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL25vX3J1bnRpbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmMjhjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9ub19ydW50aW1lLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7RFVNUF9DT01NQU5EfSAke0RVTVBfQVJHU30gJHtURVNUX0xJQlJBUllfUEFUSH0KKyAgUkVTVUxUX1ZBUklBQkxFIFJFU1VMVAorICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCisgIEVSUk9SX1ZBUklBQkxFIEVSUk9SCispCisKK2lmKE5PVCAiJHtSRVNVTFR9IiBTVFJFUVVBTCAiMCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7RFVNUF9DT01NQU5EfSBmYWlsZWQgWyR7UkVTVUxUfV0gWyR7T1VUUFVUfV0gWyR7RVJST1J9XSIpCitlbmRpZigpCisKK2lmKE5PVCAiJHtPVVRQVVR9IiBNQVRDSEVTICIoX19jdWRhKSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgIm5vdCBtaXNzaW5nIGN1ZGEgZGV2aWNlIHN5bWJvbHMsIHN0YXRpYyBydW50aW1lIGxpbmtpbmcgd2FzIHVzZWQuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy91c2VzX3N0YXRpY19ydW50aW1lLmNtYWtlIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL3VzZXNfc3RhdGljX3J1bnRpbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3MmZlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy91c2VzX3N0YXRpY19ydW50aW1lLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7RFVNUF9DT01NQU5EfSAke0RVTVBfQVJHU30gJHtURVNUX0xJQlJBUllfUEFUSH0KKyAgUkVTVUxUX1ZBUklBQkxFIFJFU1VMVAorICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCisgIEVSUk9SX1ZBUklBQkxFIEVSUk9SCispCisKK2lmKE5PVCAiJHtSRVNVTFR9IiBTVFJFUVVBTCAiMCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7RFVNUF9DT01NQU5EfSBmYWlsZWQgWyR7UkVTVUxUfV0gWyR7T1VUUFVUfV0gWyR7RVJST1J9XSIpCitlbmRpZigpCisKK2lmKCIke09VVFBVVH0iIE1BVENIRVMgIl9fY3VkYSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAibWlzc2luZyBjdWRhIGRldmljZSBzeW1ib2xzLCBzdGF0aWMgcnVudGltZSBsaW5raW5nIHdhcyBub3QgdXNlZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL3ZlcmlmeV9ydW50aW1lLmNtYWtlIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL3ZlcmlmeV9ydW50aW1lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTNkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvdmVyaWZ5X3J1bnRpbWUuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorCitzdHJpbmcoUkVQTEFDRSAifCIgIjsiIGRpcnMgIiR7RVhUUkFfTElCX0RJUlN9IikKK2ZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgcmVzb2x2ZWRfbGlicworICBVTlJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgdW5yZXNvbHZlZF9saWJzCisgIERJUkVDVE9SSUVTICR7ZGlyc30KKyAgRVhFQ1VUQUJMRVMgJHtFWEVDX1BBVEh9CisgICkKKworbGlzdChGSUxURVIgcmVzb2x2ZWRfbGlicyBJTkNMVURFIFJFR0VYICIuKmN1ZGFydC4qIikKK2xpc3QoTEVOR1RIIHJlc29sdmVkX2xpYnMgaGFzX2N1ZGFydCkKKworaWYoaGFzX2N1ZGFydCBFUVVBTCAwKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIm1pc3NpbmcgY3VkYXJ0IHNoYXJlZCBsaWJyYXJ5IGZyb20gcnVudGltZSBkZXBlbmRlbmN5IG91dHB1dC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2VwYXJhdGVDb21waWxhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1NlcGFyYXRlQ29tcGlsYXRpb24vQ01ha2VMaXN0cy50eHQKaW5kZXggMWU1NzRkNi4uYzFiZDY0YSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvU2VwYXJhdGVDb21waWxhdGlvbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9TZXBhcmF0ZUNvbXBpbGF0aW9uL0NNYWtlTGlzdHMudHh0CkBAIC0xMSwxMSArMTEsMTAgQEAKICNhbGwgY29udGFpbmluZyBjdWRhIHNlcGFyYWJsZSBjb21waWxhdGlvbiBjb2RlIGxpbmtzIHByb3Blcmx5CiBzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1cXFwiY29tcHV0ZV8zMCxzbV8zMCxzbV8zNVxcXCIiKQogc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLS1nZW5lcmF0ZS1jb2RlPWFyY2g9Y29tcHV0ZV81MCxjb2RlPVtjb21wdXRlXzUwLHNtXzUwLHNtXzUyXSIpCi1zZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDExKQotc2V0KENNQUtFX0NVREFfU1RBTkRBUkQgMTEpCiAKIHNldChDTUFLRV9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKIGFkZF9saWJyYXJ5KENVREFTZXBhcmF0ZUxpYkEgU1RBVElDIGZpbGUxLmN1IGZpbGUyLmN1IGZpbGUzLmN1KQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoQ1VEQVNlcGFyYXRlTGliQSBQUklWQVRFIGN1ZGFfc3RkXzExKQogZ2V0X3Byb3BlcnR5KHNlcF9jb21wIFRBUkdFVCBDVURBU2VwYXJhdGVMaWJBIFBST1BFUlRZIENVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OKQogaWYoTk9UIHNlcF9jb21wKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBub3QgaW5pdGlhbGl6ZWQiKQpAQCAtMzYsMTEgKzM1LDE0IEBACiAjY2F1c2UgYSBzZWd2IHdoZW4gdHJ5aW5nIHRvIHJ1biB0aGUgZXhlY3V0YWJsZQogIwogYWRkX2xpYnJhcnkoQ1VEQVNlcGFyYXRlTGliQiBTVEFUSUMgZmlsZTQuY3UgZmlsZTUuY3UpCit0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhDVURBU2VwYXJhdGVMaWJCIFBSSVZBVEUgY3VkYV9zdGRfMTEpCiB0YXJnZXRfbGlua19saWJyYXJpZXMoQ1VEQVNlcGFyYXRlTGliQiBQUklWQVRFIENVREFTZXBhcmF0ZUxpYkEpCiAKIGFkZF9leGVjdXRhYmxlKEN1ZGFPbmx5U2VwYXJhdGVDb21waWxhdGlvbiBtYWluLmN1KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFPbmx5U2VwYXJhdGVDb21waWxhdGlvbgogICAgICAgICAgICAgICAgICAgICAgIFBSSVZBVEUgQ1VEQVNlcGFyYXRlTGliQikKK3NldF90YXJnZXRfcHJvcGVydGllcyhDdWRhT25seVNlcGFyYXRlQ29tcGlsYXRpb24gUFJPUEVSVElFUyBDVURBX1NUQU5EQVJEIDExKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEN1ZGFPbmx5U2VwYXJhdGVDb21waWxhdGlvbiBQUk9QRVJUSUVTIENVREFfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKIAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENVREFTZXBhcmF0ZUxpYkEKICAgICAgICAgICAgICAgICAgICAgICBDVURBU2VwYXJhdGVMaWJCCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmYmEyMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDQyIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNSkKK3Byb2plY3QoU2hhcmVkUnVudGltZVBsdXNUb29sa2l0IENVREEpCisKKyNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZhbGlkYXRlIHRoYXQgd2l0aCBjKysgd2UgY2FuIHVzZSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIENVREEgdG9vbGtpdCwgYW5kCisjIHNwZWNpZnkgdGhlIGN1ZGEgcnVudGltZQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQorCithZGRfbGlicmFyeShDb21tb24gT0JKRUNUIGN1cmFuZC5jdSBucHBpZi5jdSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb21tb24gUFJJVkFURSBDVURBOjp0b29sa2l0KQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENvbW1vbiBQUk9QRVJUSUVTIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT04pCisKKyNzaGFyZWQgcnVudGltZSB3aXRoIHNoYXJlZCB0b29sa2l0IGxpYnJhcmllcworYWRkX2xpYnJhcnkoU2hhcmVkVG9vbGtpdCBTSEFSRUQgc2hhcmVkLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFJJVkFURSBDb21tb24gUFVCTElDIENVREE6OmN1cmFuZCBDVURBOjpucHBpZikKK3NldF90YXJnZXRfcHJvcGVydGllcyhTaGFyZWRUb29sa2l0IFBST1BFUlRJRVMgQ1VEQV9SVU5USU1FX0xJQlJBUlkgbm9uZSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTaGFyZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnQpCisKKyMgVGhlIENVREEgb25seSBzaGlwcyB0aGUgc2hhcmVkIHZlcnNpb24gb2YgdGhlIHRvb2xraXQgbGlicmFyaWVzCisjIG9uIHdpbmRvd3MKK2lmKE5PVCBXSU4zMikKKyAgI3NoYXJlZCBydW50aW1lIHdpdGggc3RhdGljIHRvb2xraXQgbGlicmFyaWVzCisgIGFkZF9saWJyYXJ5KFN0YXRpY1Rvb2xraXQgU0hBUkVEIHN0YXRpYy5jdSkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFN0YXRpY1Rvb2xraXQgUFJJVkFURSBDb21tb24gQ1VEQTo6Y3VyYW5kX3N0YXRpYyBDVURBOjpucHBpZl9zdGF0aWMpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhTdGF0aWNUb29sa2l0IFBST1BFUlRJRVMgQ1VEQV9SVU5USU1FX0xJQlJBUlkgU2hhcmVkKQorCisgICNzdGF0aWMgcnVudGltZSB3aXRoIG1peGVkIHRvb2xraXQgbGlicmFyaWVzCisgIGFkZF9saWJyYXJ5KE1peGVkVG9vbGtpdCBTSEFSRUQgbWl4ZWQuY3UpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNaXhlZFRvb2xraXQgUFJJVkFURSBDb21tb24gQ1VEQTo6Y3VyYW5kX3N0YXRpYyBDVURBOjpucHBpZikKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKE1peGVkVG9vbGtpdCBQUk9QRVJUSUVTIENVREFfUlVOVElNRV9MSUJSQVJZIFNoYXJlZCkKK2VuZGlmKCkKKworYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlTaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQgbWFpbi5jdSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDdWRhT25seVNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBQUklWQVRFIFNoYXJlZFRvb2xraXQKKyAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9OQU1FX0lGX0VYSVNUUzpTdGF0aWNUb29sa2l0PgorICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOk1peGVkVG9vbGtpdD4pCisKK2lmKFVOSVgpCisgICMgSGVscCB0aGUgc2hhcmVkIGN1ZGEgcnVudGltZSBmaW5kIGxpYmN1ZGFydCBhcyBpdCBpcyBub3QgbG9jYXRlZAorICAjIGluIGEgZGVmYXVsdCBzeXN0ZW0gc2VhcmNoZWQgbG9jYXRpb24KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBDdWRhT25seVNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ3YjUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jdQpAQCAtMCwwICsxLDY1IEBACisvLyBDb21lcyBmcm9tOgorLy8gaHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdXJhbmQvaG9zdC1hcGktb3ZlcnZpZXcuaHRtbCNob3N0LWFwaS1leGFtcGxlCisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKKy8qCisgKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgaG9zdCBDVVJBTkQgQVBJIHRvIGdlbmVyYXRlIDEwMAorICogcHNldWRvcmFuZG9tIGZsb2F0cy4KKyAqLworI2luY2x1ZGUgPGN1ZGEuaD4KKyNpbmNsdWRlIDxjdXJhbmQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIENVREFfQ0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBjdWRhU3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIENVUkFORF9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBDVVJBTkRfU1RBVFVTX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK0VYUE9SVCBpbnQgY3VyYW5kX21haW4oKQoreworICBzaXplX3QgbiA9IDEwMDsKKyAgc2l6ZV90IGk7CisgIGN1cmFuZEdlbmVyYXRvcl90IGdlbjsKKyAgZmxvYXQgKmRldkRhdGEsICpob3N0RGF0YTsKKworICAvKiBBbGxvY2F0ZSBuIGZsb2F0cyBvbiBob3N0ICovCisgIGhvc3REYXRhID0gKGZsb2F0KiljYWxsb2Mobiwgc2l6ZW9mKGZsb2F0KSk7CisKKyAgLyogQWxsb2NhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVREFfQ0FMTChjdWRhTWFsbG9jKCh2b2lkKiopJmRldkRhdGEsIG4gKiBzaXplb2YoZmxvYXQpKSk7CisKKyAgLyogQ3JlYXRlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRDcmVhdGVHZW5lcmF0b3IoJmdlbiwgQ1VSQU5EX1JOR19QU0VVRE9fREVGQVVMVCkpOworCisgIC8qIFNldCBzZWVkICovCisgIENVUkFORF9DQUxMKGN1cmFuZFNldFBzZXVkb1JhbmRvbUdlbmVyYXRvclNlZWQoZ2VuLCAxMjM0VUxMKSk7CisKKyAgLyogR2VuZXJhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVUkFORF9DQUxMKGN1cmFuZEdlbmVyYXRlVW5pZm9ybShnZW4sIGRldkRhdGEsIG4pKTsKKworICAvKiBDb3B5IGRldmljZSBtZW1vcnkgdG8gaG9zdCAqLworICBDVURBX0NBTEwoCisgICAgY3VkYU1lbWNweShob3N0RGF0YSwgZGV2RGF0YSwgbiAqIHNpemVvZihmbG9hdCksIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpKTsKKworICAvKiBDbGVhbnVwICovCisgIENVUkFORF9DQUxMKGN1cmFuZERlc3Ryb3lHZW5lcmF0b3IoZ2VuKSk7CisgIENVREFfQ0FMTChjdWRhRnJlZShkZXZEYXRhKSk7CisgIGZyZWUoaG9zdERhdGEpOworICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21haW4uY3UgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRkYTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21haW4uY3UKQEAgLTAsMCArMSwyMyBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorSU1QT1JUIGludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIDA7Cit9CitpbnQgbWl4ZWRfdmVyc2lvbigpCit7CisgIHJldHVybiAwOworfQorI2Vsc2UKK2ludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCk7CitpbnQgbWl4ZWRfdmVyc2lvbigpOworI2VuZGlmCisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIG1peGVkX3ZlcnNpb24oKSA9PSAwICYmIHNoYXJlZF92ZXJzaW9uKCkgPT0gMCAmJgorICAgIHN0YXRpY192ZXJzaW9uKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU2ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmN1CkBAIC0wLDAgKzEsMTYgQEAKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIElNUE9SVAorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK0lNUE9SVCBpbnQgY3VyYW5kX21haW4oKTsKK0lNUE9SVCBpbnQgbnBwaWZfbWFpbigpOworCitFWFBPUlQgaW50IG1peGVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L25wcGlmLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L25wcGlmLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNTM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3UKQEAgLTAsMCArMSw5MiBAQAorLy8gQ29tZXMgZnJvbQorLy8gaHR0cHM6Ly9kZXZ0YWxrLm52aWRpYS5jb20vZGVmYXVsdC90b3BpYy8xMDM3NDgyL2dwdS1hY2NlbGVyYXRlZC1saWJyYXJpZXMvaGVscC1tZS1oZWxwLXlvdS13aXRoLW1vZGVybi1jbWFrZS1hbmQtY3VkYS1td2UtZm9yLW5wcC9wb3N0LzUyNzEwNjYvIzUyNzEwNjYKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN1ZGFfcnVudGltZV9hcGkuaD4KKyNpbmNsdWRlIDxucHBpX2ZpbHRlcmluZ19mdW5jdGlvbnMuaD4KKworRVhQT1JUIGludCBucHBpZl9tYWluKCkKK3sKKyAgLyoqCisgICAqIDgtYml0IHVuc2lnbmVkIHNpbmdsZS1jaGFubmVsIDFEIHJvdyBjb252b2x1dGlvbi4KKyAgICovCisgIGNvbnN0IGludCBzaW1ncm93cyA9IDMyOworICBjb25zdCBpbnQgc2ltZ2NvbHMgPSAzMjsKKyAgTnBwOHUgKmRfcFNyYywgKmRfcERzdDsKKyAgY29uc3QgaW50IG5NYXNrU2l6ZSA9IDM7CisgIE5wcGlTaXplIG9ST0k7CisgIG9ST0kud2lkdGggPSBzaW1nY29scyAtIG5NYXNrU2l6ZTsKKyAgb1JPSS5oZWlnaHQgPSBzaW1ncm93czsKKyAgY29uc3QgaW50IHNpbWdzaXplID0gc2ltZ3Jvd3MgKiBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgZGltZ3NpemUgPSBvUk9JLndpZHRoICogb1JPSS5oZWlnaHQgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IHNpbWdwaXggPSBzaW1ncm93cyAqIHNpbWdjb2xzOworICBjb25zdCBpbnQgZGltZ3BpeCA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodDsKKyAgY29uc3QgaW50IG5TcmNTdGVwID0gc2ltZ2NvbHMgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IG5Ec3RTdGVwID0gb1JPSS53aWR0aCAqIHNpemVvZihkX3BEc3RbMF0pOworICBjb25zdCBpbnQgcGl4dmFsID0gMTsKKyAgY29uc3QgaW50IG5EaXZpc29yID0gMTsKKyAgY29uc3QgTnBwMzJzIGhfcEtlcm5lbFtuTWFza1NpemVdID0geyBwaXh2YWwsIHBpeHZhbCwgcGl4dmFsIH07CisgIE5wcDMycyogZF9wS2VybmVsOworICBjb25zdCBOcHAzMnMgbkFuY2hvciA9IDI7CisgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wU3JjLCBzaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcERzdCwgZGltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHNldCBpbWFnZSB0byBwaXh2YWwgaW5pdGlhbGx5CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wU3JjLCBwaXh2YWwsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wRHN0LCAwLCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWVtY3B5KGRfcEtlcm5lbCwgaF9wS2VybmVsLCBuTWFza1NpemUgKiBzaXplb2YoZF9wS2VybmVsWzBdKSwKKyAgICAgICAgICAgICAgICAgICBjdWRhTWVtY3B5SG9zdFRvRGV2aWNlKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIGNvcHkgc3JjIHRvIGRzdAorICBOcHBTdGF0dXMgcmV0ID0KKyAgICBucHBpRmlsdGVyUm93Xzh1X0MxUihkX3BTcmMsIG5TcmNTdGVwLCBkX3BEc3QsIG5Ec3RTdGVwLCBvUk9JLCBkX3BLZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgbk1hc2tTaXplLCBuQW5jaG9yLCBuRGl2aXNvcik7CisgIGFzc2VydChyZXQgPT0gTlBQX05PX0VSUk9SKTsKKyAgTnBwOHUqIGhfaW1ncmVzID0gbmV3IE5wcDh1W2RpbWdwaXhdOworICBlcnIgPSBjdWRhTWVtY3B5KGhfaW1ncmVzLCBkX3BEc3QsIGRpbWdzaXplLCBjdWRhTWVtY3B5RGV2aWNlVG9Ib3N0KTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHRlc3QgZm9yIGZpbHRlcmluZworICBmb3IgKGludCBpID0gMDsgaSA8IGRpbWdwaXg7IGkrKykgeworICAgIGlmIChoX2ltZ3Jlc1tpXSAhPSAocGl4dmFsICogcGl4dmFsICogbk1hc2tTaXplKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJoX2ltZ3JlcyBhdCBpbmRleCAlZCBmYWlsZWQgdG8gbWF0Y2hcbiIsIGkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MzZGJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jdQpAQCAtMCwwICsxLDE2IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBJTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBkZWZpbmUgRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgIGRlZmluZSBJTVBPUlQKKyMgIGRlZmluZSBFWFBPUlQKKyNlbmRpZgorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgc2hhcmVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMmZhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3UKQEAgLTAsMCArMSwxNiBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworSU1QT1JUIGludCBjdXJhbmRfbWFpbigpOworSU1QT1JUIGludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgc3RhdGljX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1N0YW5kYXJkOTgvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5YTY4NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YW5kYXJkOTgvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKK3Byb2plY3QoQ3VkYU9ubHlTdGFuZGFyZDk4IENVREEpCisKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPWNvbXB1dGVfMzAiKQorCisjIFN1cHBvcnQgc2V0dGluZyBDVURBIFN0YW5kYXJkIHRvIDk4IHdoaWNoIGludGVybmFsbHkgZ2V0cyB0cmFuc2Zvcm1lZCB0bworIyBDVURBMDMKK3NldChDTUFLRV9DVURBX1NUQU5EQVJEIDk4KQorCithZGRfZXhlY3V0YWJsZShDdWRhT25seVN0YW5kYXJkOTggbWFpbi5jdSkKKworaWYoQVBQTEUpCisgICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgorICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFPbmx5U3RhbmRhcmQ5OCBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGFuZGFyZDk4L21haW4uY3UgYi9UZXN0cy9DdWRhT25seS9TdGFuZGFyZDk4L21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5YWZkNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YW5kYXJkOTgvbWFpbi5jdQpAQCAtMCwwICsxLDggQEAKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIGVycm9yICJpbnZhbGlkIHN0YW5kYXJkIHZhbHVlIgorI2VuZGlmCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YWMyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyOSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBDVURBKQorCisjR29hbCBmb3IgdGhpcyBleGFtcGxlOgorIyBWYWxpZGF0ZSB0aGF0IHdpdGggY3VkYSB3ZSBjYW4gdXNlIHNvbWUgY29tcG9uZW50cyBvZiB0aGUgQ1VEQSB0b29sa2l0LCBhbmQKKyMgc3BlY2lmeSB0aGUgY3VkYSBydW50aW1lCitmaW5kX3BhY2thZ2UoQ1VEQVRvb2xraXQgUkVRVUlSRUQpCisKK2FkZF9saWJyYXJ5KENvbW1vbiBPQkpFQ1QgY3VyYW5kLmN1IG5wcGlmLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbW1vbiBQUklWQVRFIENVREE6OnRvb2xraXQpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ29tbW9uIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworI3N0YXRpYyBydW50aW1lIHdpdGggc2hhcmVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShTaGFyZWRUb29sa2l0IFNIQVJFRCBzaGFyZWQuY3UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoU2hhcmVkVG9vbGtpdCBQUklWQVRFIENvbW1vbiBDVURBOjpjdXJhbmQgQ1VEQTo6bnBwaWYgKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNoYXJlZFRvb2xraXQgUFJPUEVSVElFUyBDVURBX1JVTlRJTUVfTElCUkFSWSBub25lKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFVCTElDIENVREE6OmN1ZGFydF9zdGF0aWMpCisKKyNzdGF0aWMgcnVudGltZSB3aXRoIHN0YXRpYyB0b29sa2l0IGxpYnJhcmllcworYWRkX2xpYnJhcnkoU3RhdGljVG9vbGtpdCBTSEFSRUQgc3RhdGljLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFN0YXRpY1Rvb2xraXQgUFJJVkFURSBDb21tb24gQ1VEQTo6Y3VyYW5kX3N0YXRpYyBDVURBOjpucHBpZl9zdGF0aWMpCisKKyNzdGF0aWMgcnVudGltZSB3aXRoIG1peGVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShNaXhlZFRvb2xraXQgU0hBUkVEIG1peGVkLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1peGVkVG9vbGtpdCBQUklWQVRFIENvbW1vbiBDVURBOjpjdXJhbmQgQ1VEQTo6bnBwaWZfc3RhdGljKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKE1peGVkVG9vbGtpdCBQUk9QRVJUSUVTIENVREFfUlVOVElNRV9MSUJSQVJZIFN0YXRpYykKKworYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgbWFpbi5jdSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDdWRhT25seVN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBQUklWQVRFIFNoYXJlZFRvb2xraXQgU3RhdGljVG9vbGtpdCBNaXhlZFRvb2xraXQpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg3MmYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jdQpAQCAtMCwwICsxLDU5IEBACisvLyBDb21lcyBmcm9tOgorLy8gaHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdXJhbmQvaG9zdC1hcGktb3ZlcnZpZXcuaHRtbCNob3N0LWFwaS1leGFtcGxlCisKKy8qCisgKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgaG9zdCBDVVJBTkQgQVBJIHRvIGdlbmVyYXRlIDEwMAorICogcHNldWRvcmFuZG9tIGZsb2F0cy4KKyAqLworI2luY2x1ZGUgPGN1ZGEuaD4KKyNpbmNsdWRlIDxjdXJhbmQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIENVREFfQ0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBjdWRhU3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIENVUkFORF9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBDVVJBTkRfU1RBVFVTX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK2ludCBjdXJhbmRfbWFpbigpCit7CisgIHNpemVfdCBuID0gMTAwOworICBzaXplX3QgaTsKKyAgY3VyYW5kR2VuZXJhdG9yX3QgZ2VuOworICBmbG9hdCAqZGV2RGF0YSwgKmhvc3REYXRhOworCisgIC8qIEFsbG9jYXRlIG4gZmxvYXRzIG9uIGhvc3QgKi8KKyAgaG9zdERhdGEgPSAoZmxvYXQqKWNhbGxvYyhuLCBzaXplb2YoZmxvYXQpKTsKKworICAvKiBBbGxvY2F0ZSBuIGZsb2F0cyBvbiBkZXZpY2UgKi8KKyAgQ1VEQV9DQUxMKGN1ZGFNYWxsb2MoKHZvaWQqKikmZGV2RGF0YSwgbiAqIHNpemVvZihmbG9hdCkpKTsKKworICAvKiBDcmVhdGUgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisgIENVUkFORF9DQUxMKGN1cmFuZENyZWF0ZUdlbmVyYXRvcigmZ2VuLCBDVVJBTkRfUk5HX1BTRVVET19ERUZBVUxUKSk7CisKKyAgLyogU2V0IHNlZWQgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kU2V0UHNldWRvUmFuZG9tR2VuZXJhdG9yU2VlZChnZW4sIDEyMzRVTEwpKTsKKworICAvKiBHZW5lcmF0ZSBuIGZsb2F0cyBvbiBkZXZpY2UgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kR2VuZXJhdGVVbmlmb3JtKGdlbiwgZGV2RGF0YSwgbikpOworCisgIC8qIENvcHkgZGV2aWNlIG1lbW9yeSB0byBob3N0ICovCisgIENVREFfQ0FMTCgKKyAgICBjdWRhTWVtY3B5KGhvc3REYXRhLCBkZXZEYXRhLCBuICogc2l6ZW9mKGZsb2F0KSwgY3VkYU1lbWNweURldmljZVRvSG9zdCkpOworCisgIC8qIENsZWFudXAgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kRGVzdHJveUdlbmVyYXRvcihnZW4pKTsKKyAgQ1VEQV9DQUxMKGN1ZGFGcmVlKGRldkRhdGEpKTsKKyAgZnJlZShob3N0RGF0YSk7CisgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMDlmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jdQpAQCAtMCwwICsxLDExIEBACisKKworaW50IHNoYXJlZF92ZXJzaW9uKCk7CitpbnQgc3RhdGljX3ZlcnNpb24oKTsKK2ludCBtaXhlZF92ZXJzaW9uKCk7CisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIG1peGVkX3ZlcnNpb24oKSA9PSAwICYmIHNoYXJlZF92ZXJzaW9uKCkgPT0gMCAmJgorICAgIHN0YXRpY192ZXJzaW9uKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDUxNDBkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21peGVkLmN1CkBAIC0wLDAgKzEsOCBAQAorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK2ludCBtaXhlZF92ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIGN1cmFuZF9tYWluKCkgPT0gMCAmJiBucHBpZl9tYWluKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODcxMDkwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L25wcGlmLmN1CkBAIC0wLDAgKzEsODYgQEAKKy8vIENvbWVzIGZyb20KKy8vIGh0dHBzOi8vZGV2dGFsay5udmlkaWEuY29tL2RlZmF1bHQvdG9waWMvMTAzNzQ4Mi9ncHUtYWNjZWxlcmF0ZWQtbGlicmFyaWVzL2hlbHAtbWUtaGVscC15b3Utd2l0aC1tb2Rlcm4tY21ha2UtYW5kLWN1ZGEtbXdlLWZvci1ucHAvcG9zdC81MjcxMDY2LyM1MjcxMDY2CisKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdWRhX3J1bnRpbWVfYXBpLmg+CisjaW5jbHVkZSA8bnBwaV9maWx0ZXJpbmdfZnVuY3Rpb25zLmg+CisKK2ludCBucHBpZl9tYWluKCkKK3sKKyAgLyoqCisgICAqIDgtYml0IHVuc2lnbmVkIHNpbmdsZS1jaGFubmVsIDFEIHJvdyBjb252b2x1dGlvbi4KKyAgICovCisgIGNvbnN0IGludCBzaW1ncm93cyA9IDMyOworICBjb25zdCBpbnQgc2ltZ2NvbHMgPSAzMjsKKyAgTnBwOHUgKmRfcFNyYywgKmRfcERzdDsKKyAgY29uc3QgaW50IG5NYXNrU2l6ZSA9IDM7CisgIE5wcGlTaXplIG9ST0k7CisgIG9ST0kud2lkdGggPSBzaW1nY29scyAtIG5NYXNrU2l6ZTsKKyAgb1JPSS5oZWlnaHQgPSBzaW1ncm93czsKKyAgY29uc3QgaW50IHNpbWdzaXplID0gc2ltZ3Jvd3MgKiBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgZGltZ3NpemUgPSBvUk9JLndpZHRoICogb1JPSS5oZWlnaHQgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IHNpbWdwaXggPSBzaW1ncm93cyAqIHNpbWdjb2xzOworICBjb25zdCBpbnQgZGltZ3BpeCA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodDsKKyAgY29uc3QgaW50IG5TcmNTdGVwID0gc2ltZ2NvbHMgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IG5Ec3RTdGVwID0gb1JPSS53aWR0aCAqIHNpemVvZihkX3BEc3RbMF0pOworICBjb25zdCBpbnQgcGl4dmFsID0gMTsKKyAgY29uc3QgaW50IG5EaXZpc29yID0gMTsKKyAgY29uc3QgTnBwMzJzIGhfcEtlcm5lbFtuTWFza1NpemVdID0geyBwaXh2YWwsIHBpeHZhbCwgcGl4dmFsIH07CisgIE5wcDMycyogZF9wS2VybmVsOworICBjb25zdCBOcHAzMnMgbkFuY2hvciA9IDI7CisgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wU3JjLCBzaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcERzdCwgZGltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHNldCBpbWFnZSB0byBwaXh2YWwgaW5pdGlhbGx5CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wU3JjLCBwaXh2YWwsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wRHN0LCAwLCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWVtY3B5KGRfcEtlcm5lbCwgaF9wS2VybmVsLCBuTWFza1NpemUgKiBzaXplb2YoZF9wS2VybmVsWzBdKSwKKyAgICAgICAgICAgICAgICAgICBjdWRhTWVtY3B5SG9zdFRvRGV2aWNlKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIGNvcHkgc3JjIHRvIGRzdAorICBOcHBTdGF0dXMgcmV0ID0KKyAgICBucHBpRmlsdGVyUm93Xzh1X0MxUihkX3BTcmMsIG5TcmNTdGVwLCBkX3BEc3QsIG5Ec3RTdGVwLCBvUk9JLCBkX3BLZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgbk1hc2tTaXplLCBuQW5jaG9yLCBuRGl2aXNvcik7CisgIGFzc2VydChyZXQgPT0gTlBQX05PX0VSUk9SKTsKKyAgTnBwOHUqIGhfaW1ncmVzID0gbmV3IE5wcDh1W2RpbWdwaXhdOworICBlcnIgPSBjdWRhTWVtY3B5KGhfaW1ncmVzLCBkX3BEc3QsIGRpbWdzaXplLCBjdWRhTWVtY3B5RGV2aWNlVG9Ib3N0KTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHRlc3QgZm9yIGZpbHRlcmluZworICBmb3IgKGludCBpID0gMDsgaSA8IGRpbWdwaXg7IGkrKykgeworICAgIGlmIChoX2ltZ3Jlc1tpXSAhPSAocGl4dmFsICogcGl4dmFsICogbk1hc2tTaXplKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJoX2ltZ3JlcyBhdCBpbmRleCAlZCBmYWlsZWQgdG8gbWF0Y2hcbiIsIGkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY3YjY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jdQpAQCAtMCwwICsxLDggQEAKKworaW50IGN1cmFuZF9tYWluKCk7CitpbnQgbnBwaWZfbWFpbigpOworCitpbnQgc2hhcmVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3ZWI0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3UKQEAgLTAsMCArMSw4IEBACisKK2ludCBjdXJhbmRfbWFpbigpOworaW50IG5wcGlmX21haW4oKTsKKworaW50IHN0YXRpY192ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIGN1cmFuZF9tYWluKCkgPT0gMCAmJiBucHBpZl9tYWluKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWQ1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNDQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorcHJvamVjdChDdWRhT25seVRvb2xraXQgQ1VEQSkKK2ZpbmRfcGFja2FnZShDVURBVG9vbGtpdCBSRVFVSVJFRCkKKworbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT046ICR7Q1VEQVRvb2xraXRfVkVSU0lPTn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fTUFKT1I6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fTUlOT1I6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9NSU5PUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0g6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9QQVRDSH0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X0JJTl9ESVI6ICR7Q1VEQVRvb2xraXRfQklOX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X0lOQ0xVREVfRElSUzogJHtDVURBVG9vbGtpdF9JTkNMVURFX0RJUlN9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9MSUJSQVJZX0RJUjogJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0iKQorCisjIFZlcmlmeSB0aGF0IGFsbCB0aGUgQ1VEQTo6IHRhcmdldHMgYW5kIHZhcmlhYmxlcyBleGlzdAorZm9yZWFjaCAoY3VkYV9saWIgY3VkYXJ0IGN1ZGFfZHJpdmVyIGN1YmxhcyBjdWZmdCBjdWZmdHcgY3VyYW5kIGN1c29sdmVyIGN1c3BhcnNlIG52Z3JhcGgpCisgIGlmKE5PVCBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXhwZWN0ZWQgQ1VEQVRvb2xraXQgdmFyaWFibGUgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZIG5vdCBmb3VuZCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIFRBUkdFVCBDVURBOjoke2N1ZGFfbGlifSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBlY3RlZCBDVURBVG9vbGtpdCB0YXJnZXQgQ1VEQTo6JHtjdWRhX2xpYn0gbm90IGZvdW5kIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2ggKGN1ZGFfbGliIG5wcGMgbnBwaWFsIG5wcGljYyBucHBpZGVpIG5wcGlmIG5wcGlnIG5wcGltIG5wcGlzdCBucHBpdGMgbnBwcyBucHBpY29tIG5wcGlzdSkKKyAgaWYoTk9UIENVREFfJHtjdWRhX2xpYn1fTElCUkFSWSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBlY3RlZCBDVURBVG9vbGtpdCB2YXJpYWJsZSBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkgbm90IGZvdW5kIikKKyAgZW5kaWYoKQorICBpZihOT1QgVEFSR0VUIENVREE6OiR7Y3VkYV9saWJ9KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHRhcmdldCBDVURBOjoke2N1ZGFfbGlifSBub3QgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCAoY3VkYV9saWIgbnZydGMgbnZUb29sc0V4dCBPcGVuQ0wpCisgIGlmKE5PVCBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXhwZWN0ZWQgQ1VEQVRvb2xraXQgdmFyaWFibGUgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZIG5vdCBmb3VuZCIpCisgIGVuZGlmKCkKKworICBpZihOT1QgVEFSR0VUIENVREE6OiR7Y3VkYV9saWJ9KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHRhcmdldCBDVURBOjoke2N1ZGFfbGlifSBub3QgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlUb29sa2l0IG1haW4uY3UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ3VkYU9ubHlUb29sa2l0IFBSSVZBVEUgQ1VEQTo6dG9vbGtpdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvbWFpbi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNjY2RjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvVG9vbGtpdC9tYWluLmN1CkBAIC0wLDAgKzEsOCBAQAorLy8gT25seSB0aGluZyB3ZSBjYXJlIGFib3V0IGlzIHRoYXQgdGhlc2UgaGVhZGVycyBhcmUgZm91bmQKKyNpbmNsdWRlIDxjdWRhLmg+CisjaW5jbHVkZSA8Y3VkYV9ydW50aW1lX2FwaS5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvV2l0aERlZnMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dAppbmRleCAwMGZkN2QyLi5iYTliZjA0IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dApAQCAtMjgsNyArMjgsNyBAQAogICBQUklWQVRFCiAgICAgLURGTEFHX0NPTVBJTEVfTEFOR18kPENPTVBJTEVfTEFOR1VBR0U+CiAgICAgLURGTEFHX0xBTkdfSVNfQ1VEQT0kPENPTVBJTEVfTEFOR1VBR0U6Q1VEQT4KLSAgICAtWGNvbXBpbGVyPS1ESE9TVF9ERUZJTkUKKyAgICAtLWNvbXBpbGVyLW9wdGlvbnM9LURIT1NUX0RFRklORQogICAgICQ8JDxDT05GSUc6REVCVUc+OiQ8QlVJTERfSU5URVJGQUNFOiR7ZGVidWdfY29tcGlsZV9mbGFnc30+PgogICApCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1c3RDb21EZXBlbmQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdXN0Q29tRGVwZW5kL0NNYWtlTGlzdHMudHh0CmluZGV4IDQ2Mjc2YjIuLjc3N2NkY2MgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1c3RDb21EZXBlbmQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VzdENvbURlcGVuZC9DTWFrZUxpc3RzLnR4dApAQCAtNiw5ICs2LDkgQEAKIGFkZF9leGVjdXRhYmxlKGZvbyBmb28uY3h4KQogYWRkX2N1c3RvbV9jb21tYW5kKAogICBPVVRQVVQgJHtDdXN0Q29tRGVwZW5kX0JJTkFSWV9ESVJ9L2Jhci5jCi0gIENPTU1BTkQgJHtDdXN0Q29tRGVwZW5kX0JJTkFSWV9ESVJ9L2Jpbi8ke0NNQUtFX0NGR19JTlRESVJ9L2ZvbworICBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6Zm9vPgogICAke0N1c3RDb21EZXBlbmRfQklOQVJZX0RJUn0vYmFyLmMKLSAgREVQRU5EUyAke0N1c3RDb21EZXBlbmRfQklOQVJZX0RJUn0vYmluLyR7Q01BS0VfQ0ZHX0lOVERJUn0vZm9vCisgIERFUEVORFMgJDxUQVJHRVRfRklMRTpmb28+CiApCiAKIGFkZF9saWJyYXJ5KGJhciBTSEFSRUQgJHtDdXN0Q29tRGVwZW5kX0JJTkFSWV9ESVJ9L2Jhci5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VzdG9tQ29tbWFuZC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1c3RvbUNvbW1hbmQvQ01ha2VMaXN0cy50eHQKaW5kZXggZTlhOWY1Mi4uNTNkNTZiZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VzdG9tQ29tbWFuZC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdXN0b21Db21tYW5kL0NNYWtlTGlzdHMudHh0CkBAIC03MCw3ICs3MCw3IEBACiAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICR7UFJPSkVDVF9CSU5BUllfRElSfS9kb2MxdGVtcC5oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9kb2MxLmgKICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gIiBSZW1vdmluZyBkb2MxdGVtcC5oLiIKLSAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZSAtZiAke1BST0pFQ1RfQklOQVJZX0RJUn0vZG9jMXRlbXAuaAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2RvYzF0ZW1wLmgKICAgKQogCiAjIEFkZCBjdXN0b20gY29tbWFuZCB0byBnZW5lcmF0ZSBmb28uaC4KQEAgLTQxMiw3ICs0MTIsNyBAQAogYWRkX2RlcGVuZGVuY2llcyhkb19jaGVja19jb21tYW5kX2xpbmUgY2hlY2tfY29tbWFuZF9saW5lKQogCiBhZGRfY3VzdG9tX3RhcmdldChwcmVfY2hlY2tfY29tbWFuZF9saW5lCi0gIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NoZWNrX21hcmsudHh0CisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtZiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY2hlY2tfbWFyay50eHQKICAgKQogYWRkX2RlcGVuZGVuY2llcyhkb19jaGVja19jb21tYW5kX2xpbmUgcHJlX2NoZWNrX2NvbW1hbmRfbGluZSkKIApAQCAtNTM0LDMgKzUzNCw0MyBAQAogc2V0X3Byb3BlcnR5KFNPVVJDRSAiJHtnZW5fZmlsZX0iIFBST1BFUlRZIFNZTUJPTElDIE9OKQogYWRkX2N1c3RvbV90YXJnZXQoY29tbWFuZF9leHBhbmRfbGlzdHMgQUxMIERFUEVORFMgIiR7Z2VuX2ZpbGV9IikKIHNldF9wcm9wZXJ0eShUQVJHRVQgY29tbWFuZF9leHBhbmRfbGlzdHMgUFJPUEVSVFkgQ01QQVJHUyAiJHtjbXBfYXJnc30iKQorCisjIFRoaXMgYWxzbyB0ZXN0cyB0aGF0IGAuL2AgaXMgc3F1ZWV6ZWQgb3V0IG9mIHRoZSByZXN1bHRpbmcgcGF0aC4KK3NldChkZXBlbmRzX3BhdGggIi4vZGVwZW5kZWRfdXBvbl9wYXRoLnR4dCIpCisKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgT1VUUFVUICR7ZGVwZW5kc19wYXRofQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgdG91Y2ggJHtkZXBlbmRzX3BhdGh9CispCisKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgT1VUUFVUICJkZXBlbmRzX29uX3BhdGgudHh0IgorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgdG91Y2ggImRlcGVuZHNfb25fcGF0aC50eHQiCisgIERFUEVORFMgJHtkZXBlbmRzX3BhdGh9CispCisKK2FkZF9jdXN0b21fdGFyZ2V0KGRlcGVuZHNfb25fcGF0aCBBTEwgREVQRU5EUyAiZGVwZW5kc19vbl9wYXRoLnR4dCIpCisKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgT1VUUFVUICJkZXBlbmRzX29uX2luX3NvdXJjZV9wYXRoLnR4dCIKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9tYWluLmN4eCIgZGVwZW5kc19vbl9pbl9zb3VyY2VfcGF0aC50eHQKKyAgREVQRU5EUyBtYWluLmN4eAorKQorCithZGRfY3VzdG9tX3RhcmdldChkZXBlbmRzX29uX2luX3NvdXJjZV9wYXRoIEFMTCBERVBFTkRTICJkZXBlbmRzX29uX2luX3NvdXJjZV9wYXRoLnR4dCIpCisKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgT1VUUFVUICJkZXBlbmRzX29uX2luX3JlbF9zb3VyY2VfcGF0aC50eHQiCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFpbi5jeHgiIGRlcGVuZHNfb25faW5fcmVsX3NvdXJjZV9wYXRoLnR4dAorICBERVBFTkRTIC4vbWFpbi5jeHgKKykKKworYWRkX2N1c3RvbV90YXJnZXQoZGVwZW5kc19vbl9pbl9yZWxfc291cmNlX3BhdGggQUxMIERFUEVORFMgImRlcGVuZHNfb25faW5fcmVsX3NvdXJjZV9wYXRoLnR4dCIpCisKK2FkZF9saWJyYXJ5KG1hY19mdyBTSEFSRUQgbWFjX2Z3LmMpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWFjX2Z3IFBST1BFUlRJRVMKKyAgRlJBTUVXT1JLIDEKKyAgTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIKKyAgKQorYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCBtYWNfZncudHh0IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSB0b3VjaCBtYWNfZncudHh0IERFUEVORFMgbWFjX2Z3KQorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmVfbWFjX2Z3IEFMTCBERVBFTkRTIG1hY19mdy50eHQpCmRpZmYgLS1naXQgYS9UZXN0cy9DdXN0b21Db21tYW5kL21hY19mdy5jIGIvVGVzdHMvQ3VzdG9tQ29tbWFuZC9tYWNfZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjM1YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VzdG9tQ29tbWFuZC9tYWNfZncuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBtYWNfZncodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9FbmZvcmNlQ29uZmlnLmNtYWtlLmluIGIvVGVzdHMvRW5mb3JjZUNvbmZpZy5jbWFrZS5pbgppbmRleCBiNzU4N2FhLi43NzgxZGVkIDEwMDY0NAotLS0gYS9UZXN0cy9FbmZvcmNlQ29uZmlnLmNtYWtlLmluCisrKyBiL1Rlc3RzL0VuZm9yY2VDb25maWcuY21ha2UuaW4KQEAgLTMzLDUgKzMzLDYgQEAKIHVuc2V0KEVOVntDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0V9KQogdW5zZXQoRU5We0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0pCiB1bnNldChFTlZ7Q01BS0VfR0VORVJBVE9SX1RPT0xTRVR9KQordW5zZXQoRU5We0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTfSkKIAogQFRFU1RfSE9NRV9FTlZfQ09ERUAKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4cG9ydEltcG9ydC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0V4cG9ydEltcG9ydC9DTWFrZUxpc3RzLnR4dAppbmRleCBkYzYyMWViLi5kODhlYjExIDEwMDY0NAotLS0gYS9UZXN0cy9FeHBvcnRJbXBvcnQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRXhwb3J0SW1wb3J0L0NNYWtlTGlzdHMudHh0CkBAIC03LDcgKzcsNyBAQAogIyBXaXBlIG91dCB0aGUgaW5zdGFsbCB0cmVlIHRvIG1ha2Ugc3VyZSB0aGUgZXhwb3J0ZXIgd29ya3MuCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgIE9VVFBVVCAke0V4cG9ydEltcG9ydF9CSU5BUllfRElSfS9DbGVhbnVwUHJvamVjdAotICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeSAke0V4cG9ydEltcG9ydF9CSU5BUllfRElSfS9Sb290CisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgJHtFeHBvcnRJbXBvcnRfQklOQVJZX0RJUn0vUm9vdAogICApCiBhZGRfY3VzdG9tX3RhcmdldChDbGVhbnVwVGFyZ2V0IEFMTCBERVBFTkRTICR7RXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJ9L0NsZWFudXBQcm9qZWN0KQogc2V0X3Byb3BlcnR5KApkaWZmIC0tZ2l0IGEvVGVzdHMvRXhwb3J0SW1wb3J0L0V4cG9ydC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0V4cG9ydEltcG9ydC9FeHBvcnQvQ01ha2VMaXN0cy50eHQKaW5kZXggOWQ4YTI0OC4uMzg3ZmU2YiAxMDA2NDQKLS0tIGEvVGVzdHMvRXhwb3J0SW1wb3J0L0V4cG9ydC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9FeHBvcnRJbXBvcnQvRXhwb3J0L0NNYWtlTGlzdHMudHh0CkBAIC0xNTYsNiArMTU2LDcgQEAKIGNtYWtlX3BvbGljeShQT1ApCiAKIGNtYWtlX3BvbGljeShQVVNIKQorY21ha2VfcG9saWN5KFNFVCBDTVAwMDIyIE5FVykKIGNtYWtlX3BvbGljeShTRVQgQ01QMDA3OSBORVcpCiBhZGRfbGlicmFyeShUb3BEaXJMaWIgU1RBVElDIHRlc3RUb3BEaXJMaWIuYykKIGFkZF9zdWJkaXJlY3RvcnkoU3ViRGlyTGlua0EpCkBAIC0yNDAsNiArMjQxLDEwIEBACiApCiBpbmNsdWRlKEdlbmVyYXRlRXhwb3J0SGVhZGVyKQogCisjIFRlc3QgZGVwcmVjYXRpb24gb2YgaW1wb3J0ZWQgbGlicmFyeQorYWRkX2xpYnJhcnkodGVzdExpYkRlcHJlY2F0aW9uIFNUQVRJQyB0ZXN0TGliMS5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0TGliRGVwcmVjYXRpb24gUFJPUEVSVFkgREVQUkVDQVRJT04gIkRlcHJlY2F0ZWQgdmVyc2lvbi4gUGxlYXNlIHVzZSBsYXRlc3QgdmVyc2lvbiIpCisKIGFkZF9zdWJkaXJlY3RvcnkocmVuYW1lZCkKIAogYWRkX2xpYnJhcnkodGVzdFNoYXJlZExpYlJlcXVpcmVkIFNIQVJFRCB0ZXN0U2hhcmVkTGliUmVxdWlyZWQuY3BwKQpAQCAtNTE1LDYgKzUyMCw3IEBACiAgIHRlc3RFeGUybGliIHRlc3RMaWI0bGliIHRlc3RMaWI0bGliZGJnIHRlc3RMaWI0bGlib3B0CiAgIHRlc3RMaWI2IHRlc3RMaWI3IHRlc3RMaWI4CiAgIHRlc3RMaWI5CisgIHRlc3RMaWJEZXByZWNhdGlvbgogICB0ZXN0TGliQ3ljbGVBIHRlc3RMaWJDeWNsZUIKICAgdGVzdExpYk5vU09OQU1FCiAgIGNtcDAwMjJORVcgY21wMDAyMk9MRApAQCAtNTg1LDYgKzU5MSw3IEBACiBleHBvcnQoVEFSR0VUUyB0ZXN0RXhlMiB0ZXN0TGliNCB0ZXN0TGliNSB0ZXN0TGliNiB0ZXN0TGliNyB0ZXN0RXhlMyB0ZXN0RXhlNCB0ZXN0RXhlMmxpYgogICB0ZXN0TGliOAogICB0ZXN0TGliOSB0ZXN0TGliOU9ialB1YiB0ZXN0TGliOU9ialByaXYgdGVzdExpYjlPYmpJZmFjZQorICB0ZXN0TGliRGVwcmVjYXRpb24KICAgdGVzdExpYjRsaWIgdGVzdExpYjRsaWJkYmcgdGVzdExpYjRsaWJvcHQKICAgdGVzdExpYkN5Y2xlQSB0ZXN0TGliQ3ljbGVCCiAgIHRlc3RMaWJOb1NPTkFNRQpAQCAtNjQ2LDYgKzY1MywxOCBAQAogICBleHBvcnQoVEFSR0VUUyB0ZXN0TGlua0RlcGVuZHMgTkFNRVNQQUNFIGJsZF8gQVBQRU5EIEZJTEUgRXhwb3J0QnVpbGRUcmVlLmNtYWtlKQogZW5kaWYoKQogCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3QgZXhwb3J0IG9mIENVREEgbGFuZ3VhZ2UKK2lmKENNYWtlX1RFU1RfQ1VEQSkKKyAgZW5hYmxlX2xhbmd1YWdlKENVREEpCisgIGFkZF9saWJyYXJ5KGN1ZGFJbnRlcmZhY2VMaWIgSU5URVJGQUNFKQorICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhjdWRhSW50ZXJmYWNlTGliIElOVEVSRkFDRSAkPEJVSUxEX0lOVEVSRkFDRTpjdWRhX3N0ZF8xMT4gJDxJTlNUQUxMX0lOVEVSRkFDRTpjdWRhX3N0ZF8xND4pCisKKyAgaW5zdGFsbChUQVJHRVRTIGN1ZGFJbnRlcmZhY2VMaWIKKyAgICBFWFBPUlQgUmVxdWlyZWRFeHAgREVTVElOQVRJT04gbGliKQorICBleHBvcnQoVEFSR0VUUyBjdWRhSW50ZXJmYWNlTGliIE5BTUVTUEFDRSBibGRfIEFQUEVORCBGSUxFIEV4cG9ydEJ1aWxkVHJlZS5jbWFrZSkKK2VuZGlmKCkKKwogIyBUZXN0IHRoZSBwcmVzZW5jZSBvZiB0YXJnZXRzIG5hbWVkIHRoZSBzYW1lIGFzIGxhbmd1YWdlcy4KICMgSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTIGVudHJpZXMgc2hvdWxkIG5vdCBiZSB0YXJnZXRzLgogYWRkX2xpYnJhcnkoQyBJTlRFUkZBQ0UpCmRpZmYgLS1naXQgYS9UZXN0cy9FeHBvcnRJbXBvcnQvRXhwb3J0L1N1YkRpckxpbmtBL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRXhwb3J0SW1wb3J0L0V4cG9ydC9TdWJEaXJMaW5rQS9DTWFrZUxpc3RzLnR4dAppbmRleCAxYzNjOWRjLi4xYWE0MWQyIDEwMDY0NAotLS0gYS9UZXN0cy9FeHBvcnRJbXBvcnQvRXhwb3J0L1N1YkRpckxpbmtBL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0V4cG9ydEltcG9ydC9FeHBvcnQvU3ViRGlyTGlua0EvQ01ha2VMaXN0cy50eHQKQEAgLTEsNiArMSw2IEBACiBhZGRfbGlicmFyeShTdWJEaXJMaW5rQUltcG9ydGVkIElNUE9SVEVEIElOVEVSRkFDRSkKIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKFN1YkRpckxpbmtBSW1wb3J0ZWQgSU5URVJGQUNFIERFRl9TdWJEaXJMaW5rQUltcG9ydGVkRm9yRXhwb3J0KQogCi10YXJnZXRfbGlua19saWJyYXJpZXMoVG9wRGlyTGliIFBVQkxJQyBTdWJEaXJMaW5rQUltcG9ydGVkKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRvcERpckxpYiBQVUJMSUMgZGVidWcgIiQ8MTpTdWJEaXJMaW5rQUltcG9ydGVkO1N1YkRpckxpbmtBSW1wb3J0ZWQ+IiBvcHRpbWl6ZWQgIiQ8MTpTdWJEaXJMaW5rQUltcG9ydGVkO1N1YkRpckxpbmtBSW1wb3J0ZWQ+IikKIAogYWRkX2xpYnJhcnkoU3ViRGlyTGlua0EgU1RBVElDIFN1YkRpckxpbmtBLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9FeHBvcnRJbXBvcnQvSW1wb3J0L0EvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9FeHBvcnRJbXBvcnQvSW1wb3J0L0EvQ01ha2VMaXN0cy50eHQKaW5kZXggYjVkZjk2MS4uM2NiMzgzMyAxMDA2NDQKLS0tIGEvVGVzdHMvRXhwb3J0SW1wb3J0L0ltcG9ydC9BL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0V4cG9ydEltcG9ydC9JbXBvcnQvQS9DTWFrZUxpc3RzLnR4dApAQCAtNTEsNiArNTEsMTIgQEAKIGNoZWNrRm9yUHJvcGVydHkoZXhwX3Rlc3RMaWI0ICJFWFBPUlRFRF9QUk9QRVJUWTIiICAiRVhQT1JUSU5HX1RFU1RMSUI0XzEiKQogY2hlY2tGb3JQcm9wZXJ0eShibGRfdGVzdExpYjQgIkVYUE9SVEVEX1BST1BFUlRZMyIgICJFWFBPUlRJTkdfVEVTVExJQjRfMiIpCiBjaGVja0ZvclByb3BlcnR5KGV4cF90ZXN0TGliNCAiRVhQT1JURURfUFJPUEVSVFkzIiAgIkVYUE9SVElOR19URVNUTElCNF8yIikKK2NoZWNrRm9yUHJvcGVydHkoYmxkX3Rlc3RMaWJEZXByZWNhdGlvbiAiREVQUkVDQVRJT04iICAiRGVwcmVjYXRlZCB2ZXJzaW9uLiBQbGVhc2UgdXNlIGxhdGVzdCB2ZXJzaW9uIikKK2NoZWNrRm9yUHJvcGVydHkoZXhwX3Rlc3RMaWJEZXByZWNhdGlvbiAiREVQUkVDQVRJT04iICAiRGVwcmVjYXRlZCB2ZXJzaW9uLiBQbGVhc2UgdXNlIGxhdGVzdCB2ZXJzaW9uIikKKworIyBUcnkgbGlua2luZyB0byBhIGRlcHJlY2F0ZWQgbGlicmFyeQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGltcF90ZXN0RXhlMSBleHBfdGVzdExpYkRlcHJlY2F0aW9uKQorCiAKICMgVHJ5IGxpbmtpbmcgdG8gYSBsaWJyYXJ5IGltcG9ydGVkIGZyb20gdGhlIGluc3RhbGwgdHJlZS4KIHRhcmdldF9saW5rX2xpYnJhcmllcyhpbXBfdGVzdEV4ZTEKQEAgLTQ5OSwzICs1MDUsMTAgQEAKICAgY2hlY2tGb3JQcm9wZXJ0eShibGRfdGVzdExpbmtEZXBlbmRzICJJTlRFUkZBQ0VfTElOS19ERVBFTkRTIiAiQlVJTERfTElOS19ERVBFTkRTIikKICAgY2hlY2tGb3JQcm9wZXJ0eShSZXE6OnRlc3RMaW5rRGVwZW5kcyAiSU5URVJGQUNFX0xJTktfREVQRU5EUyIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L0lOU1RBTExfTElOS19ERVBFTkRTIikKIGVuZGlmKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IGltcG9ydCBvZiBDVURBIGxhbmd1YWdlIGxldmVsCitpZihDTWFrZV9URVNUX0NVREEpCisgIGNoZWNrRm9yUHJvcGVydHkoYmxkX2N1ZGFJbnRlcmZhY2VMaWIgIklOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTIiAiY3VkYV9zdGRfMTEiKQorICBjaGVja0ZvclByb3BlcnR5KFJlcTo6Y3VkYUludGVyZmFjZUxpYiAiSU5URVJGQUNFX0NPTVBJTEVfRkVBVFVSRVMiICJjdWRhX3N0ZF8xNCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9FeHBvcnRJbXBvcnQvSW5pdGlhbENhY2hlLmNtYWtlLmluIGIvVGVzdHMvRXhwb3J0SW1wb3J0L0luaXRpYWxDYWNoZS5jbWFrZS5pbgppbmRleCBmNjAwZDkwLi40NGNkMTc5IDEwMDY0NAotLS0gYS9UZXN0cy9FeHBvcnRJbXBvcnQvSW5pdGlhbENhY2hlLmNtYWtlLmluCisrKyBiL1Rlc3RzL0V4cG9ydEltcG9ydC9Jbml0aWFsQ2FjaGUuY21ha2UuaW4KQEAgLTE0LDMgKzE0LDQgQEAKIHNldChDTUFLRV9JTlNUQUxMX1BSRUZJWCAiQEV4cG9ydEltcG9ydF9CSU5BUllfRElSQC9Sb290IiBDQUNIRSBTVFJJTkcgIkluc3RhbGxhdGlvbiBQcmVmaXgiKQogc2V0KENNQUtFX1NLSVBfUlBBVEggT04gQ0FDSEUgQk9PTCAiTm8gUlBBVEgiKQogc2V0KENNQUtFX0dOVXRvTVMgIkBFeHBvcnRJbXBvcnRfR05VdG9NU0AiIENBQ0hFIEJPT0wgIkNNQUtFX0dOVXRvTVMiKQorc2V0KENNYWtlX1RFU1RfQ1VEQSAiQENNYWtlX1RFU1RfQ1VEQUAiIENBQ0hFIEJPT0wgIkNNYWtlX1RFU1RfQ1VEQSIpCmRpZmYgLS1naXQgYS9UZXN0cy9FeHRlcm5hbFByb2plY3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9FeHRlcm5hbFByb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMDkzMzkxZS4uNDUwZTdlNSAxMDA2NDQKLS0tIGEvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMzgwLDcgKzM4MCw5IEBACiAgICAgc2V0KHByb2ogVHV0b3JpYWxTdGVwMS1HSVQtY29uZmlnKQogICAgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQogICAgICAgR0lUX1JFUE9TSVRPUlkgIiR7bG9jYWxfZ2l0X3JlcG99IgotICAgICAgR0lUX0NPTkZJRyBjb3JlLmVvbD1sZiBjb3JlLmF1dG9jcmxmPWlucHV0CisgICAgICBHSVRfQ09ORklHIGNvcmUuZW9sPWxmCisgICAgICAgICAgICAgICAgIGNvcmUuYXV0b2NybGY9aW5wdXQKKyAgICAgICAgICAgICAgICAgImh0dHAuZXh0cmFoZWFkZXI9QVVUSE9SSVpBVElPTjogYmVhcmVyIC0tdW5zdXBwb3J0ZWRPcHRpb24iCiAgICAgICBDTUFLRV9HRU5FUkFUT1IgIiR7Q01BS0VfR0VORVJBVE9SfSIKICAgICAgIENNQUtFX0FSR1MgLURDTUFLRV9JTlNUQUxMX1BSRUZJWDpQQVRIPTxJTlNUQUxMX0RJUj4KICAgICAgIElOU1RBTExfQ09NTUFORCAiIgpAQCAtNDgyLDYgKzQ4NCw2NiBAQAogICApCiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfSBQUk9QRVJUWSBGT0xERVIgIkdJVCIpCiAKKyAgIyBVbnppcC91bnRhciB0aGUgZ2l0IHJlcG9zaXRvcnkgaW4gb3VyIHNvdXJjZSBmb2xkZXIgc28gdGhhdCBvdGhlcgorICAjIHByb2plY3RzIGJlbG93IG1heSB1c2UgaXQgdG8gdGVzdCBnaXQgYXJncyBvZiBFeHRlcm5hbFByb2plY3RfQWRkCisgICMKKyAgc2V0KHByb2ogU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoUmVjdXJzaXZlU3VibW9kdWxlcykKKyAgRXh0ZXJuYWxQcm9qZWN0X0FkZCgke3Byb2p9CisgICAgICAgICAgU09VUkNFX0RJUiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTG9jYWxSZXBvc2l0b3JpZXMvR0lULXdpdGgtcmVjdXJzaXZlLXN1Ym1vZHVsZXMKKyAgICAgICAgICBVUkwgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2dpdHJlcG8tc3ViLXJlYy50Z3oKKyAgICAgICAgICBCVUlMRF9DT01NQU5EICIiCisgICAgICAgICAgQ09ORklHVVJFX0NPTU1BTkQgIiR7R0lUX0VYRUNVVEFCTEV9IiAtLXZlcnNpb24KKyAgICAgICAgICBJTlNUQUxMX0NPTU1BTkQgIiIKKyAgICAgICAgICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfQorICAgICAgICAgIFBST1BFUlRZIEZPTERFUiAiU2V0dXBSZXBvcy9Mb2NhbC9EZWVwbHkvTmVzdGVkL0Zvci9UZXN0aW5nIikKKworICBzZXQobG9jYWxfZ2l0X3JlcG8gIi4uLy4uL0xvY2FsUmVwb3NpdG9yaWVzL0dJVC13aXRoLXJlY3Vyc2l2ZS1zdWJtb2R1bGVzIikKKworICBzZXQocHJvaiBUUzEtR0lULVJFQ1VSU0lWRV9TVUJNT0RVTEVTLWRlZmF1bHQpCisgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQorICAgICAgICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKKyAgICAgICAgICBDTUFLRV9HRU5FUkFUT1IgIiR7Q01BS0VfR0VORVJBVE9SfSIKKyAgICAgICAgICBDTUFLRV9BUkdTIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg6UEFUSD08SU5TVEFMTF9ESVI+CisgICAgICAgICAgICAgICAgICAgICAtRFdJVEhfUkVDVVJTSVZFOkJPT0w9T04KKyAgICAgICAgICBCVUlMRF9DT01NQU5EICAiIgorICAgICAgICAgIElOU1RBTExfQ09NTUFORCAiIgorICAgICAgICAgIERFUEVORFMgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5IgorICAgICAgICAgICAgICAgICAgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5V2l0aFN1Ym1vZHVsZXMiCisgICAgICAgICAgICAgICAgICAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoUmVjdXJzaXZlU3VibW9kdWxlcyIKKyAgICAgICAgICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfSBQUk9QRVJUWSBGT0xERVIgIkdJVCIpCisKKyAgc2V0KHByb2ogVFMxLUdJVC1SRUNVUlNJVkVfU1VCTU9EVUxFUy1leGNsdXNpdmUpCisgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQorICAgICAgICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKKyAgICAgICAgICBHSVRfU1VCTU9EVUxFU19SRUNVUlNFIFRSVUUKKyAgICAgICAgICBDTUFLRV9HRU5FUkFUT1IgIiR7Q01BS0VfR0VORVJBVE9SfSIKKyAgICAgICAgICBDTUFLRV9BUkdTIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg6UEFUSD08SU5TVEFMTF9ESVI+CisgICAgICAgICAgICAgICAgICAgICAtRFdJVEhfUkVDVVJTSVZFOkJPT0w9T04KKyAgICAgICAgICBCVUlMRF9DT01NQU5EICAiIgorICAgICAgICAgIElOU1RBTExfQ09NTUFORCAiIgorICAgICAgICAgIERFUEVORFMgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5IgorICAgICAgICAgICAgICAgICAgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5V2l0aFN1Ym1vZHVsZXMiCisgICAgICAgICAgICAgICAgICAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoUmVjdXJzaXZlU3VibW9kdWxlcyIKKyAgICAgICAgICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfSBQUk9QRVJUWSBGT0xERVIgIkdJVCIpCisKKyAgc2V0KHByb2ogVFMxLUdJVC1SRUNVUlNJVkVfU1VCTU9EVUxFUy1vZmYpCisgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQorICAgICAgICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKKyAgICAgICAgICBHSVRfU1VCTU9EVUxFU19SRUNVUlNFIEZBTFNFCisgICAgICAgICAgQ01BS0VfR0VORVJBVE9SICIke0NNQUtFX0dFTkVSQVRPUn0iCisgICAgICAgICAgQ01BS0VfQVJHUyAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9PElOU1RBTExfRElSPgorICAgICAgICAgICAgICAgICAgICAgLURXSVRIX1JFQ1VSU0lWRTpCT09MPU9GRgorICAgICAgICAgIEJVSUxEX0NPTU1BTkQgICIiCisgICAgICAgICAgSU5TVEFMTF9DT01NQU5EICIiCisgICAgICAgICAgREVQRU5EUyAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnkiCisgICAgICAgICAgICAgICAgICAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoU3VibW9kdWxlcyIKKyAgICAgICAgICAgICAgICAgICJTZXR1cExvY2FsR0lUUmVwb3NpdG9yeVdpdGhSZWN1cnNpdmVTdWJtb2R1bGVzIgorICAgICAgICAgICkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke3Byb2p9IFBST1BFUlRZIEZPTERFUiAiR0lUIikKKwogZW5kaWYoKQogCiBzZXQoZG9faGdfdGVzdHMgMCkKQEAgLTYwMSwxMSArNjYzLDE5IEBACiAgIGFkZF90ZXN0KFR1dG9yaWFsU3RlcDEtR0lULWJ5dGFnCiAgICAgIiR7YmluYXJ5X2Jhc2V9L1R1dG9yaWFsU3RlcDEtR0lULWJ5dGFnL1R1dG9yaWFsIiA5OSkKIAorICBhZGRfdGVzdChUdXRvcmlhbFN0ZXAxLUdJVC1ieXRhZy13aXRoc3VibW9kdWxlcworICAgICIke2JpbmFyeV9iYXNlfS9UdXRvcmlhbFN0ZXAxLUdJVC1ieXRhZy13aXRoc3VibW9kdWxlcy9UdXRvcmlhbCIgOTkpCisKICAgYWRkX3Rlc3QoVHV0b3JpYWxTdGVwMS1HSVQtc2hhbGxvdy1tYXN0ZXIKICAgICAiJHtiaW5hcnlfYmFzZX0vVHV0b3JpYWxTdGVwMS1HSVQtc2hhbGxvdy1tYXN0ZXIvVHV0b3JpYWwiIDk4KQogCiAgIGFkZF90ZXN0KFR1dG9yaWFsU3RlcDEtR0lULW1hc3RlcgogICAgICIke2JpbmFyeV9iYXNlfS9UdXRvcmlhbFN0ZXAxLUdJVC1tYXN0ZXIvVHV0b3JpYWwiIDk4KQorCisgIGlmKE5PVCBnaXRfdmVyc2lvbiBWRVJTSU9OX0xFU1MgMS43LjcpCisgICAgYWRkX3Rlc3QoVHV0b3JpYWxTdGVwMS1HSVQtY29uZmlnCisgICAgICAiJHtiaW5hcnlfYmFzZX0vVHV0b3JpYWxTdGVwMS1HSVQtY29uZmlnL1R1dG9yaWFsIiA5OCkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9naXRyZXBvLXN1Yi1yZWMudGd6IGIvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0L2dpdHJlcG8tc3ViLXJlYy50Z3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmM2YxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9naXRyZXBvLXN1Yi1yZWMudGd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRHVGVzdC9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZEdUZXN0L1Rlc3QvQ01ha2VMaXN0cy50eHQKaW5kZXggYjY1YjlkMi4uNjUzNzIzOCAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZEdUZXN0L1Rlc3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZEdUZXN0L1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTgsNiArOCwxMCBAQAogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfZ3Rlc3RfdGd0IEdUZXN0OjpNYWluKQogYWRkX3Rlc3QoTkFNRSB0ZXN0X2d0ZXN0X3RndCBDT01NQU5EIHRlc3RfZ3Rlc3RfdGd0KQogCithZGRfZXhlY3V0YWJsZSh0ZXN0X2d0ZXN0X3RndF91cHN0cmVhbSBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X2d0ZXN0X3RndF91cHN0cmVhbSBHVGVzdDo6Z3Rlc3RfbWFpbikKK2FkZF90ZXN0KE5BTUUgdGVzdF9ndGVzdF90Z3RfdXBzdHJlYW0gQ09NTUFORCB0ZXN0X2d0ZXN0X3RndF91cHN0cmVhbSkKKwogYWRkX2V4ZWN1dGFibGUodGVzdF9ndGVzdF92YXIgbWFpbi5jeHgpCiB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh0ZXN0X2d0ZXN0X3ZhciBQUklWQVRFICR7R1RFU1RfSU5DTFVERV9ESVJTfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X2d0ZXN0X3ZhciBQUklWQVRFICR7R1RFU1RfQk9USF9MSUJSQVJJRVN9ICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0pCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliQXJjaGl2ZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMaWJBcmNoaXZlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzJlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kTGliQXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACithZGRfdGVzdChOQU1FIEZpbmRMaWJBcmNoaXZlLlRlc3QgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kTGliQXJjaGl2ZS9UZXN0IgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kTGliQXJjaGl2ZS9UZXN0IgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEZpbmRMaWJBcmNoaXZlCisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliQXJjaGl2ZS9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZExpYkFyY2hpdmUvVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTg0M2JiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExpYkFyY2hpdmUvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMikKK3Byb2plY3QoVGVzdEZpbmRMaWJBcmNoaXZlIEMpCitpbmNsdWRlKENUZXN0KQorCitmaW5kX3BhY2thZ2UoTGliQXJjaGl2ZSBSRVFVSVJFRCkKKworYWRkX2V4ZWN1dGFibGUodGVzdF9saWJhcmNoaXZlX3RndCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9saWJhcmNoaXZlX3RndCBMaWJBcmNoaXZlOjpMaWJBcmNoaXZlKQorYWRkX3Rlc3QoTkFNRSB0ZXN0X2xpYmFyY2hpdmVfdGd0IENPTU1BTkQgdGVzdF9saWJhcmNoaXZlX3RndCkKKworYWRkX2V4ZWN1dGFibGUodGVzdF9saWJhcmNoaXZlX3ZhciBtYWluLmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh0ZXN0X2xpYmFyY2hpdmVfdmFyIFBSSVZBVEUgJHtMaWJBcmNoaXZlX0lOQ0xVREVfRElSU30pCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9saWJhcmNoaXZlX3ZhciBQUklWQVRFICR7TGliQXJjaGl2ZV9MSUJSQVJJRVN9KQorYWRkX3Rlc3QoTkFNRSB0ZXN0X2xpYmFyY2hpdmVfdmFyIENPTU1BTkQgdGVzdF9saWJhcmNoaXZlX3ZhcikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRMaWJBcmNoaXZlL1Rlc3QvbWFpbi5jIGIvVGVzdHMvRmluZExpYkFyY2hpdmUvVGVzdC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlN2VjZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMaWJBcmNoaXZlL1Rlc3QvbWFpbi5jCkBAIC0wLDAgKzEsNyBAQAorI2luY2x1ZGUgPGFyY2hpdmUuaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgYXJjaGl2ZV9yZWFkX2ZyZWUoYXJjaGl2ZV9yZWFkX25ldygpKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliWG1sMi9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZExpYlhtbDIvVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCBkZjVkOGMzLi4wNDFjYzEzIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kTGliWG1sMi9UZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRMaWJYbWwyL1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTE0LDMgKzE0LDcgQEAKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHRlc3RfdmFyIFBSSVZBVEUgJHtMSUJYTUwyX0lOQ0xVREVfRElSU30pCiB0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF92YXIgUFJJVkFURSAke0xJQlhNTDJfTElCUkFSSUVTfSkKIGFkZF90ZXN0KE5BTUUgdGVzdF92YXIgQ09NTUFORCB0ZXN0X3ZhcikKKworYWRkX3Rlc3QoTkFNRSB4bWxsaW50X3RndCBDT01NQU5EIExpYlhtbDI6OnhtbGxpbnQgLS12ZXJzaW9uKQorCithZGRfdGVzdChOQU1FIHhtbGxpbnRfdmFyIENPTU1BTkQgJHtMSUJYTUwyX1hNTExJTlRfRVhFQ1VUQUJMRX0gLS12ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDIzODMyZGEuLjhhODdhOGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQYWNrYWdlTW9kZU1ha2VmaWxlVGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kUGFja2FnZU1vZGVNYWtlZmlsZVRlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTE5LDYgKzE5LDE0IEBACiAgICAgIyBjb25maWd1cmUgYSBGaW5kRm9vLmNtYWtlIHNvIGl0IGtub3dzIHdoZXJlIHRoZSBsaWJyYXJ5IGNhbiBiZSBmb3VuZAogICAgIGNvbmZpZ3VyZV9maWxlKEZpbmRGb28uY21ha2UuaW4gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0ZpbmRGb28uY21ha2UgQE9OTFkpCiAKKyAgICAjIE5lZWQgdGhlIC1pc3lzcm9vdCBmbGFnIG9uIHJlY2VudGlzaCBtYWNPUyBhZnRlciBjb21tYW5kIGxpbmUgdG9vbHMKKyAgICAjIG5vIGxvbmdlciBwcm92aWRlIGhlYWRlcnMgaW4gL3Vzci9pbmNsdWRlCisgICAgaWYoQVBQTEUgQU5EIENNQUtFX09TWF9TWVNST09UKQorICAgICAgc2V0KF9fRVhUUkFfT1NYX1NZU1JPT1RfRkxBR1MgIi1pc3lzcm9vdCAke0NNQUtFX09TWF9TWVNST09UfSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUyAiIikKKyAgICBlbmRpZigpCisKICAgICAjIG5vdyBzZXQgdXAgdGhlIHRlc3Q6CiAgICAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jbWFrZUV4ZWN1dGFibGUubWsiCiAgICAgICBDT05URU5UICJDTUFLRSA9IFwiJDxUQVJHRVRfRklMRTpjbWFrZT5cIlxuIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L01ha2VmaWxlLmluIGIvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L01ha2VmaWxlLmluCmluZGV4IDhlN2ZmNzIuLjVlZjY3ZDAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQYWNrYWdlTW9kZU1ha2VmaWxlVGVzdC9NYWtlZmlsZS5pbgorKysgYi9UZXN0cy9GaW5kUGFja2FnZU1vZGVNYWtlZmlsZVRlc3QvTWFrZWZpbGUuaW4KQEAgLTUsNiArNSw3IEBACiBDTUFLRV9DWFhfQ09NUElMRVIgPSAiQENNQUtFX0NYWF9DT01QSUxFUkAiCiBDTUFLRV9DWFhfQ09NUElMRVJfSUQgPSAiQENNQUtFX0NYWF9DT01QSUxFUl9JREAiCiBDTUFLRV9DWFhfRkxBR1MgPSBAQ01BS0VfQ1hYX0ZMQUdTQAorX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUyA9IEBfX0VYVFJBX09TWF9TWVNST09UX0ZMQUdTQAogCiBDTUFLRV9GT08gPSAkKENNQUtFKSAtLWZpbmQtcGFja2FnZSAtRENNQUtFX01PRFVMRV9QQVRIPSQoQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSKSAtRE5BTUU9Rm9vIC1ETEFOR1VBR0U9Q1hYIC1EQ09NUElMRVJfSUQ9JChDTUFLRV9DWFhfQ09NUElMRVJfSUQpCiAKQEAgLTE1LDcgKzE2LDcgQEAKIG1haW4ubzogY2xlYW4gbWFpbi5jcHAKIAlAJChDTUFLRV9GT08pIC1ETU9ERT1DT01QSUxFID4kKHRtcCkKIAlAZm9vPSJgY2F0ICQodG1wKWAiOyBcCi0JIHByaW50ZiAnIiVzIiAlcyAlcyAtYyBtYWluLmNwcFxuJyAkKENNQUtFX0NYWF9DT01QSUxFUikgIiQoQ01BS0VfQ1hYX0ZMQUdTKSIgIiQkZm9vIiA+JCh0bXApCisJIHByaW50ZiAnIiVzIiAlcyAlcyAlcyAtYyBtYWluLmNwcFxuJyAkKENNQUtFX0NYWF9DT01QSUxFUikgIiQoQ01BS0VfQ1hYX0ZMQUdTKSIgIiQoX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUykiICIkJGZvbyIgPiQodG1wKQogCUBjYXQgJCh0bXApCiAJQHNoICQodG1wKQogCUBybSAtZiAkKHRtcCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGJlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdEFydGlmYWN0c0ludGVyYWN0aXZlIExBTkdVQUdFUyBDKQorCitzZXQgKGNvbXBvbmVudHMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCitpZiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5KQorICBsaXN0IChBUFBFTkQgY29tcG9uZW50cyBOdW1QeSkKK2VuZGlmKCkKKworZmluZF9wYWNrYWdlKFB5dGhvbjMgUkVRVUlSRUQgQ09NUE9ORU5UUyAke2NvbXBvbmVudHN9KQorCitpZiAoUHl0aG9uM19BUlRJRkFDVFNfSU5URVJBQ1RJVkUpCisgIGlmIChOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX0VYRUNVVEFCTEV9CisgICAgICBPUiBOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX0xJQlJBUll9IE9SIE5PVCBERUZJTkVEIENBQ0hFe1B5dGhvbjNfSU5DTFVERV9ESVJ9CisgICAgICBPUiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5IEFORCBOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX051bVB5X0lOQ0xVREVfRElSfSkpCisgICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFPU9OIEZhaWxlZC4iKQorICBlbmRpZigpCitlbHNlKCkKKyAgaWYgKERFRklORUQgQ0FDSEV7UHl0aG9uM19FWEVDVVRBQkxFfQorICAgICAgT1IgREVGSU5FRCBDQUNIRXtQeXRob24zX0xJQlJBUll9IE9SIERFRklORUQgQ0FDSEV7UHl0aG9uM19JTkNMVURFX0RJUn0KKyAgICAgIE9SIChDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHkgQU5EIERFRklORUQgQ0FDSEV7UHl0aG9uM19OdW1QeV9JTkNMVURFX0RJUn0pKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24zX0FSVElGQUNUU19JTlRFUkFDVElWRT1PRkYgRmFpbGVkLiIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0NNYWtlTGlzdHMudHh0CmluZGV4IDg2OGNmZTAuLmQyMzI2ZTQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQeXRob24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9DTWFrZUxpc3RzLnR4dApAQCAtNjcsMTQgKzY3LDY0IEBACiAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRQeXRob24uUHl0aG9uM0ZhaWwgUFJPUEVSVElFUwogICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJDb3VsZCBOT1QgZmluZCBQeXRob24zIFxcKG1pc3Npbmc6IGZvb2JhclxcKSIpCiAKLSAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbiBDT01NQU5ECisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24uTE9DQVRJT04gQ09NTUFORAogICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgogICAgIC0tYnVpbGQtYW5kLXRlc3QKICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbiIKLSAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi5MT0NBVElPTiIKICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQogICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHl0aG9uCi0gICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHl0aG9uLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPVZFUlNJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24uVjIuTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi5WMi5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHl0aG9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049MiAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHl0aG9uLlYyLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi5WMi5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMy5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlYzLkxPQ0FUSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0zIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24uVjMuVkVSU0lPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlYzLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5dGhvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTMgLURQeXRob25fRklORF9TVFJBVEVHWT1WRVJTSU9OCiAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgKQogCkBAIC0xMzQsNiArMTg0LDc3IEBACiAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgKQogCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5BcnRpZmFjdHNJbnRlcmFjdGl2ZS5PTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9BcnRpZmFjdHNJbnRlcmFjdGl2ZS5PTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0QXJ0aWZhY3RzU2NvcGUKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAiLURidWlsZF9nZW5lcmF0b3JfYXJncz0ke2J1aWxkX2dlbmVyYXRvcl9hcmdzfSIKKyAgICAiLURDTWFrZV9TT1VSQ0VfRElSPSR7Q01ha2VfU09VUkNFX0RJUn0iCisgICAgIi1EQ01ha2VfQklOQVJZX0RJUj0ke0NNYWtlX0JJTkFSWV9ESVJ9IgorICAgICItRENNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeT0ke0NNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeX0iCisgICAgIi1EUHl0aG9uM19BUlRJRkFDVFNfSU5URVJBQ1RJVkU9T04iCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQXJ0aWZhY3RzSW50ZXJhY3RpdmUuT0ZGIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9BcnRpZmFjdHNJbnRlcmFjdGl2ZSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlLk9GRiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0QXJ0aWZhY3RzU2NvcGUKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAiLURidWlsZF9nZW5lcmF0b3JfYXJncz0ke2J1aWxkX2dlbmVyYXRvcl9hcmdzfSIKKyAgICAiLURDTWFrZV9TT1VSQ0VfRElSPSR7Q01ha2VfU09VUkNFX0RJUn0iCisgICAgIi1EQ01ha2VfQklOQVJZX0RJUj0ke0NNYWtlX0JJTkFSWV9ESVJ9IgorICAgICItRENNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeT0ke0NNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeX0iCisgICAgIi1EUHl0aG9uM19BUlRJRkFDVFNfSU5URVJBQ1RJVkU9T0ZGIgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKworICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UgQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEN1c3RvbUZhaWx1cmVNZXNzYWdlCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgIi1EQ01ha2VfU09VUkNFX0RJUj0ke0NNYWtlX1NPVVJDRV9ESVJ9IgorICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHk9JHtDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHl9IgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKworICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXh8RGFyd2luIikKKyAgICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uSW50ZXJwcmV0ZXIuU09BQkkgQ09NTUFORAorICAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1NPQUJJIgorICAgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9TT0FCSS5JbnRlcnByZXRlciIKKyAgICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFNPQUJJCisgICAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAiLURidWlsZF9nZW5lcmF0b3JfYXJncz0ke2J1aWxkX2dlbmVyYXRvcl9hcmdzfSIKKyAgICAgICItRENNYWtlX1NPVVJDRV9ESVI9JHtDTWFrZV9TT1VSQ0VfRElSfSIKKyAgICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAgICItRENNYWtlX1RFU1RfRmluZFB5dGhvbl9DT01QT05FTlQ9SW50ZXJwcmV0ZXIiCisgICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgICkKKyAgICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uRGV2ZWxvcG1lbnQuU09BQkkgQ09NTUFORAorICAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1NPQUJJIgorICAgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9TT0FCSS5EZXZlbG9wbWVudCIKKyAgICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFNPQUJJCisgICAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAiLURidWlsZF9nZW5lcmF0b3JfYXJncz0ke2J1aWxkX2dlbmVyYXRvcl9hcmdzfSIKKyAgICAgICItRENNYWtlX1NPVVJDRV9ESVI9JHtDTWFrZV9TT1VSQ0VfRElSfSIKKyAgICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAgICItRENNYWtlX1RFU1RfRmluZFB5dGhvbl9DT01QT05FTlQ9RGV2ZWxvcG1lbnQiCisgICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgICkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBpZihDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHkpCkBAIC0xNTgsMyArMjc5LDE2IEBACiAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICkKICBlbmRpZigpCisKKyBpZihDTWFrZV9URVNUX0ZpbmRQeXRob25fQ29uZGEpCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5WaXJ0dWFsRW52Q29uZGEgQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYSIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0VmlydHVhbEVudkNvbmRhCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9DdXN0b21GYWlsdXJlTWVzc2FnZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkOGViMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3OSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0Q3VzdG9tRmFpbHVyZU1lc3NhZ2UgTEFOR1VBR0VTIE5PTkUpCisKK2luY2x1ZGUoQ1Rlc3QpCisKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5DdXN0b21GYWlsdXJlTWVzc2FnZS5JbnRlcnByZXRlciBDT01NQU5ECisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAtLWJ1aWxkLWFuZC10ZXN0CisgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ2hlY2siCisgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvSW50ZXJwcmV0ZXIiCisgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgIC0tYnVpbGQtcHJvamVjdCBUZXN0Q3VzdG9tRmFpbHVyZU1lc3NhZ2UuQ2hlY2sKKyAgLS1idWlsZC1vcHRpb25zICItRENIRUNLX0NPTVBPTkVOVFM9SW50ZXJwcmV0ZXIiCisgICAgICAgICAgICAgICAgICAiLURQeXRob24zX0VYRUNVVEFCTEU9L25vdC9mb3VuZC9pbnRlcnByZXRlciIKKyAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuSW50ZXJwcmV0ZXIgUFJPUEVSVElFUworICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiUmVhc29uIGdpdmVuIGJ5IHBhY2thZ2U6LitJbnRlcnByZXRlcjogQ2Fubm90IHJ1biB0aGUgaW50ZXJwcmV0ZXIiKQorCithZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuTGlicmFyeSBDT01NQU5ECisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAtLWJ1aWxkLWFuZC10ZXN0CisgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ2hlY2siCisgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvTGlicmFyeSIKKyAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFRlc3RDdXN0b21GYWlsdXJlTWVzc2FnZS5DaGVjaworICAtLWJ1aWxkLW9wdGlvbnMgIi1EQ0hFQ0tfQ09NUE9ORU5UUz1EZXZlbG9wbWVudCIKKyAgICAgICAgICAgICAgICAgICItRFB5dGhvbjNfTElCUkFSWT0vbm90L2ZvdW5kL2xpYnJhcnkiCisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCitzZXRfdGVzdHNfcHJvcGVydGllcyhGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlLkxpYnJhcnkgUFJPUEVSVElFUworICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiUmVhc29uIGdpdmVuIGJ5IHBhY2thZ2U6LitEZXZlbG9wbWVudDogQ2Fubm90IGZpbmQgdGhlIGxpYnJhcnkiKQorCithZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuSW5jbHVkZSBDT01NQU5ECisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAtLWJ1aWxkLWFuZC10ZXN0CisgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ2hlY2siCisgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvSW5jbHVkZSIKKyAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFRlc3RDdXN0b21GYWlsdXJlTWVzc2FnZS5DaGVjaworICAtLWJ1aWxkLW9wdGlvbnMgIi1EQ0hFQ0tfQ09NUE9ORU5UUz1EZXZlbG9wbWVudCIKKyAgICAgICAgICAgICAgICAgICItRFB5dGhvbjNfSU5DTFVERV9ESVI9L25vdC9mb3VuZC9pbmNsdWRlIgorICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmluZFB5dGhvbi5DdXN0b21GYWlsdXJlTWVzc2FnZS5JbmNsdWRlIFBST1BFUlRJRVMKKyAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlJlYXNvbiBnaXZlbiBieSBwYWNrYWdlOi4rRGV2ZWxvcG1lbnQ6IENhbm5vdCBmaW5kIHRoZSBkaXJlY3RvcnkiKQorCithZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuTXVsdGlwbGUgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrIgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL011bHRpcGxlIgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEN1c3RvbUZhaWx1cmVNZXNzYWdlLkNoZWNrCisgIC0tYnVpbGQtb3B0aW9ucyAiLURDSEVDS19DT01QT05FTlRTPUludGVycHJldGVyO0RldmVsb3BtZW50IgorICAgICAgICAgICAgICAgICAgIi1EUHl0aG9uM19FWEVDVVRBQkxFPS9ub3QvZm91bmQvaW50ZXJwcmV0ZXIiCisgICAgICAgICAgICAgICAgICAiLURQeXRob24zX0xJQlJBUlk9L25vdC9mb3VuZC9saWJyYXJ5IgorICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmluZFB5dGhvbi5DdXN0b21GYWlsdXJlTWVzc2FnZS5NdWx0aXBsZSBQUk9QRVJUSUVTCisgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJSZWFzb24gZ2l2ZW4gYnkgcGFja2FnZTouK0ludGVycHJldGVyOiBDYW5ub3QgcnVuIHRoZSBpbnRlcnByZXRlci4rRGV2ZWxvcG1lbnQ6IENhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IikKKworCitpZiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5KQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuTnVtUHkgQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvTnVtUHkiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEN1c3RvbUZhaWx1cmVNZXNzYWdlLkNoZWNrCisgICAgLS1idWlsZC1vcHRpb25zICItRENIRUNLX0NPTVBPTkVOVFM9SW50ZXJwcmV0ZXI7RGV2ZWxvcG1lbnQ7TnVtUHkiCisgICAgICAgICAgICAgICAgICAgICItRFB5dGhvbjNfTnVtUHlfSU5DTFVERV9ESVI9L25vdC9mb3VuZC9udW1weS9pbmNsdWRlIgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmluZFB5dGhvbi5DdXN0b21GYWlsdXJlTWVzc2FnZS5OdW1QeSBQUk9QRVJUSUVTCisgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlJlYXNvbiBnaXZlbiBieSBwYWNrYWdlOi4rTnVtUHk6IENhbm5vdCBmaW5kIHRoZSBkaXJlY3RvcnkiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9DdXN0b21GYWlsdXJlTWVzc2FnZS9DaGVjay9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ2hlY2svQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkOTYzZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ2hlY2svQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RDdXN0b21GYWlsdXJlTWVzc2FnZS5DaGVjayBMQU5HVUFHRVMgQykKKworZmluZF9wYWNrYWdlIChQeXRob24zIFJFUVVJUkVEIENPTVBPTkVOVFMgJHtDSEVDS19DT01QT05FTlRTfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQKaW5kZXggNjJjODA1ZS4uM2VlMzhlMyAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQKQEAgLTQsOSArNCw5IEBACiAKIGluY2x1ZGUoQ1Rlc3QpCiAKLWZpbmRfcGFja2FnZShQeXRob24gMyBSRVFVSVJFRCBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50KQorZmluZF9wYWNrYWdlKFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gUkVRVUlSRUQgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKIGlmIChOT1QgUHl0aG9uX0ZPVU5EKQotICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0iKQogZW5kaWYoKQogCiBpZihOT1QgVEFSR0VUIFB5dGhvbjo6SW50ZXJwcmV0ZXIpCkBAIC0yMCwxMyArMjAsMTUgQEAKICAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob246Ok1vZHVsZSBub3QgZm91bmQiKQogZW5kaWYoKQogCi1QeXRob25fYWRkX2xpYnJhcnkgKHNwYW0zIE1PRFVMRSAuLi9zcGFtLmMpCi10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyAoc3BhbTMgUFJJVkFURSBQWVRIT04zKQoraWYgKFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTikKKyAgUHl0aG9uX2FkZF9saWJyYXJ5IChzcGFtJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IE1PRFVMRSAuLi9zcGFtLmMpCisgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIChzcGFtJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IFBSSVZBVEUgUFlUSE9OJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059KQogCi1hZGRfdGVzdCAoTkFNRSBweXRob25fc3BhbTMKLSAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgIlBZVEhPTlBBVEg9JDxUQVJHRVRfRklMRV9ESVI6c3BhbTM+IgotICAgICAgICAgICIke1B5dGhvbl9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzcGFtMzsgc3BhbTMuc3lzdGVtKFwiY2RcIikiKQotCi1hZGRfdGVzdChOQU1FIGZpbmRweXRob25fc2NyaXB0Ci0gICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRFBZVEhPTl9QQUNLQUdFX05BTUU9UHl0aG9uCi0gICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS8uLi9GaW5kUHl0aG9uU2NyaXB0LmNtYWtlIikKKyAgYWRkX3Rlc3QgKE5BTUUgcHl0aG9uX3NwYW0ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0KKyAgICAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiUFlUSE9OUEFUSD0kPFRBUkdFVF9GSUxFX0RJUjpzcGFtJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059PiIKKyAgICAgICAgICAgICIke1B5dGhvbl9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzcGFtJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059OyBzcGFtJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059LnN5c3RlbShcImNkXCIpIikKK2Vsc2UoKQorICBhZGRfdGVzdChOQU1FIGZpbmRweXRob25fc2NyaXB0CisgICAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1EUFlUSE9OX1BBQ0tBR0VfTkFNRT1QeXRob24KKyAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vLi4vRmluZFB5dGhvblNjcmlwdC5jbWFrZSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjMvQ01ha2VMaXN0cy50eHQKaW5kZXggNjY5MWE0OC4uMzRlYmQyYyAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMy9DTWFrZUxpc3RzLnR4dApAQCAtMTUsMTQgKzE1LDE0IEBACiBlbmRpZigpCiAKIGlmKE5PVCBUQVJHRVQgUHl0aG9uMzo6SW50ZXJwcmV0ZXIpCi0gIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQogZW5kaWYoKQogCiBpZihOT1QgVEFSR0VUIFB5dGhvbjM6OlB5dGhvbikKLSAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpQeXRob24gbm90IGZvdW5kIikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpQeXRob24gbm90IGZvdW5kIikKIGVuZGlmKCkKIGlmKE5PVCBUQVJHRVQgUHl0aG9uMzo6TW9kdWxlKQotICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6Ok1vZHVsZSBub3QgZm91bmQiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6Ok1vZHVsZSBub3QgZm91bmQiKQogZW5kaWYoKQogCiBQeXRob24zX2FkZF9saWJyYXJ5IChzcGFtMyBNT0RVTEUgLi4vc3BhbS5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9TT0FCSS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vU09BQkkvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2YWVhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vU09BQkkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyMiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0U09BQkkgQykKKworZmluZF9wYWNrYWdlKFB5dGhvbjMgQ09NUE9ORU5UUyAke0NNYWtlX1RFU1RfRmluZFB5dGhvbl9DT01QT05FTlR9KQoraWYgKE5PVCBQeXRob24zX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCitlbmRpZigpCisKK2lmKE5PVCBERUZJTkVEIFB5dGhvbjNfU09BQkkpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlB5dGhvbjNfU09BQkkgZm9yICR7Q01ha2VfVEVTVF9GaW5kUHl0aG9uX0NPTVBPTkVOVH0gbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYgKFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkQgQU5EIFB5dGhvbjNfU09BQkkpCisgIFB5dGhvbjNfYWRkX2xpYnJhcnkgKHNwYW0zIE1PRFVMRSBXSVRIX1NPQUJJIC4uL3NwYW0uYykKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMgKHNwYW0zIFBSSVZBVEUgUFlUSE9OMykKKworICBnZXRfcHJvcGVydHkgKHN1ZmZpeCBUQVJHRVQgc3BhbTMgUFJPUEVSVFkgU1VGRklYKQorICBpZiAoTk9UIHN1ZmZpeCBNQVRDSEVTICJeLiR7UHl0aG9uM19TT0FCSX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk1vZHVsZSBzdWZmaXggZG8gbm90IGluY2x1ZGUgUHl0aG9uM19TT0FCSSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudi9DTWFrZUxpc3RzLnR4dAppbmRleCA2NGJhMjAxLi4wNDVhM2YyIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnYvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52L0NNYWtlTGlzdHMudHh0CkBAIC0xMCw2ICsxMCw3IEBACiBlbmRpZigpCiAKIHNldCAoUHl0aG9uM19WSVJUVUFMX0VOViAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3B5M3ZlbnYiKQorZmlsZSAoUkVNT1ZFX1JFQ1VSU0UgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9weTN2ZW52IikKIAogZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke1B5dGhvbjNfRVhFQ1VUQUJMRX0iIC1tIHZlbnYgIiR7UHl0aG9uM19WSVJUVUFMX0VOVn0iCiAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKQEAgLTIxLDIyICsyMiwyNiBAQAogCiBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24zLlZpcnR1YWxFbnZEZWZhdWx0CiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFBZVEhPTjNfVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVmlydHVhbEVudkRlZmF1bHQuY21ha2UiKQogCiBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24zLlZpcnR1YWxFbnZPbmx5CiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFBZVEhPTjNfVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVmlydHVhbEVudk9ubHkuY21ha2UiKQogYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uMy5VbnNldFZpcnR1YWxFbnZPbmx5CiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1WSVJUVUFMX0VOVgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdW5zZXQ9Q09OREFfUFJFRklYCiAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52T25seS5jbWFrZSIpCiAKIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVmlydHVhbEVudlN0YW5kYXJkCiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFBZVEhPTjNfVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVmlydHVhbEVudlN0YW5kYXJkLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1MDk1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNDYgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdFZpcnR1YWxFbnZDb25kYSBMQU5HVUFHRVMgTk9ORSkKKworaW5jbHVkZShDVGVzdCkKKworZmluZF9wcm9ncmFtKENPTkRBX0VYRUNVVEFCTEUgY29uZGEpCitpZiAoQ09OREFfRVhFQ1VUQUJMRSBFUVVBTCBOT1RGT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgQ29uZGEiKQorZW5kaWYoKQorCitzZXQgKFB5dGhvbjNfVklSVFVBTF9FTlYgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25kYWVudiIpCisKK2V4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtDT05EQV9FWEVDVVRBQkxFfSIgY3JlYXRlIC0tbm8tZGVmYXVsdC1wYWNrYWdlcyAtLXByZWZpeCAiJHtQeXRob24zX1ZJUlRVQUxfRU5WfSIgLS15ZXMgcHl0aG9uPTMKKyAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0cworICAgICAgICAgICAgICAgICBFUlJPUl9WQVJJQUJMRSBvdXRwdXRzKQoraWYgKHJlc3VsdCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gY3JlYXRlIHZpcnR1YWwgZW52aXJvbm1lbnQ6ICR7b3V0cHV0c30iKQorZW5kaWYoKQorCithZGRfdGVzdChOQU1FIEZpbmRQeXRob24zLlZpcnR1YWxFbnZEZWZhdWx0Q29uZGEKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PVBZVEhPTkhPTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVuc2V0PVZJUlRVQUxfRU5WCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTkRBX1BSRUZJWD0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUFlUSE9OM19WSVJUVUFMX0VOVj0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52RGVmYXVsdC5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVmlydHVhbEVudk9ubHlDb25kYQorICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52IC0tdW5zZXQ9UFlUSE9OSE9NRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdW5zZXQ9VklSVFVBTF9FTlYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ09OREFfUFJFRklYPSR7UHl0aG9uM19WSVJUVUFMX0VOVn0iCisgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAiLURQWVRIT04zX1ZJUlRVQUxfRU5WPSR7UHl0aG9uM19WSVJUVUFMX0VOVn0iCisgICAgICAgICAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1ZpcnR1YWxFbnZPbmx5LmNtYWtlIikKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVW5zZXRWaXJ0dWFsRW52T25seUNvbmRhCisgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVuc2V0PVZJUlRVQUxfRU5WCisgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52T25seS5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVmlydHVhbEVudlN0YW5kYXJkQ29uZGEKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PVBZVEhPTkhPTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVuc2V0PVZJUlRVQUxfRU5WCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTkRBX1BSRUZJWD0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUFlUSE9OM19WSVJUVUFMX0VOVj0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52U3RhbmRhcmQuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEvVmlydHVhbEVudkRlZmF1bHQuY21ha2UgYi9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52RGVmYXVsdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjBlY2FjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEvVmlydHVhbEVudkRlZmF1bHQuY21ha2UKQEAgLTAsMCArMSw2IEBACisKK2ZpbmRfcGFja2FnZSAoUHl0aG9uMyBSRVFVSVJFRCkKKworaWYgKE5PVCBQeXRob24zX0VYRUNVVEFCTEUgTUFUQ0hFUyAiXiR7UFlUSE9OM19WSVJUVUFMX0VOVn0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byB1c2UgdmlydHVhbCBlbnZpcm9ubWVudCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52T25seS5jbWFrZSBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL1ZpcnR1YWxFbnZPbmx5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YTQ5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52T25seS5jbWFrZQpAQCAtMCwwICsxLDE2IEBACisKKyMKKyMgVmlydHVhbCBlbnZpcm9ubWVudCBpcyBkZWZpbmVkIGZvciBweXRob24zCisjIFRyeWluZyB0byBmaW5kIGEgcHl0aG9uMiB1c2luZyBvbmx5IHZpcnR1YWwgZW52aXJvbm1lbnQKKyMgSXQgaXMgZXhwZWN0aW5nIHRvIGZhaWwgaWYgYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGFjdGl2ZSBhbmQgdG8gc3VjY2VzcyBvdGhlcndpc2UuCisjCitzZXQgKFB5dGhvbjJfRklORF9WSVJUVUFMRU5WIE9OTFkpCitmaW5kX3BhY2thZ2UgKFB5dGhvbjIgUVVJRVQpCisKK2lmIChQWVRIT04zX1ZJUlRVQUxfRU5WIEFORCBQeXRob24yX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uMiB1bmV4cGVjdGVkbHkgZm91bmQuIikKK2VuZGlmKCkKKworaWYgKE5PVCBQWVRIT04zX1ZJUlRVQUxfRU5WIEFORCBOT1QgUHl0aG9uMl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZmluZCBQeXRob24yLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52U3RhbmRhcmQuY21ha2UgYi9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52U3RhbmRhcmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMjdkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL1ZpcnR1YWxFbnZTdGFuZGFyZC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKKworc2V0IChQeXRob24zX0ZJTkRfVklSVFVBTEVOViBTVEFOREFSRCkKK2ZpbmRfcGFja2FnZSAoUHl0aG9uMyBSRVFVSVJFRCkKKworaWYgKFB5dGhvbjNfRVhFQ1VUQUJMRSBNQVRDSEVTICJeJHtQWVRIT04zX1ZJUlRVQUxfRU5WfS8uKyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24zIHZpcnR1YWwgZW52IHVuZXhwZWN0ZWRseSBmb3VuZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUnVieS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjQ4MDdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1NyBAQAoraWYoQ01ha2VfVEVTVF9GaW5kUnVieSkKKworICAjIExvb2tzIGZvciBydWJ5ID49MS45LjksIHdoaWNoIGlzIHRydWUgb24gYW55IFVidW50dSAodGhhdCBpbnN0YWxscyBpdCkgb3IgbWFjT1MgKD4gMTAuOSkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5UZXN0IENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFJ1YnkvVGVzdCIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUnVieS9UZXN0IgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RSdWJ5CisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisKKyAgIyBMb29rcyBmb3IgcnVieSA+PSA1MC4xLjAsIHdoaWNoIHNob3VsZCBsb2dpY2FsbHkgZmFpbAorICBhZGRfdGVzdChOQU1FIEZpbmRSdWJ5LkZhaWwgQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUnVieS9GYWlsIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L0ZhaWwiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFJ1YnlGYWlsCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIHNldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRSdWJ5LkZhaWwgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJDb3VsZCBOT1QgZmluZCBSdWJ5LiooUmVxdWlyZWQgaXMgYXQgbGVhc3QgdmVyc2lvbiBcIlswLTldK1xcLlswLTldK1xcLlswLTldK1wiKSIpCisKKyAgIyBMb29rcyBmb3IgMS45LjkgRVhBQ1RMWSwgd2hpY2ggdW5saWtlIHRoZSAiRmluZFJ1YnkiIHRlc3QgYWJvdmUgd2lsbCBmYWlsIG9uIGV2ZXJ5IG1hY2hpbmUKKyAgIyBzaW5jZSB0aGlzIHZlcnNpb24gZG9lc24ndCBleGlzdCAocnVieSBnb2VzIGZyb20gMS45LjMgdG8gMi4wLjApCisgIGFkZF90ZXN0KE5BTUUgRmluZFJ1YnkuRmFpbEV4YWN0IENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFJ1YnkvRmFpbEV4YWN0IgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdCIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UnVieUZhaWxFeGFjdAorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBzZXRfdGVzdHNfcHJvcGVydGllcyhGaW5kUnVieS5GYWlsRXhhY3QgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJDb3VsZCBOT1QgZmluZCBSdWJ5OiBGb3VuZCB1bnN1aXRhYmxlIHZlcnNpb24gXCIuKlwiLCBidXQgcmVxdWlyZWQgaXMuKmV4YWN0IHZlcnNpb24gXCJbMC05XStcXC5bMC05XStcXC5bMC05XStcIiBcXChmb3VuZCAuKlxcKSIpCisKKyAgIyBSVk0gc3BlY2lmaWMgdGVzdAorICBpZihDTWFrZV9URVNUX0ZpbmRSdWJ5X1JWTSkKKyAgICBhZGRfdGVzdChOQU1FIEZpbmRSdWJ5LlJ2bSBDT01NQU5ECisgICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L1J2bSIKKyAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L1J2bSIKKyAgICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFJWTQorICAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUnVieS9GYWlsL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFJ1YnkvRmFpbC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTg1YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvRmFpbC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdChUZXN0UnVieUZhaWwgTEFOR1VBR0VTIE5PTkUpCisKKyMgU2hvdWxkIGFsd2F5cyBmYWlsIHNpbmNlIHRoZXJlIGlzIE5PIHJ1YnkgNTAuMS4wIHlldC4KK2ZpbmRfcGFja2FnZShSdWJ5IDUwLjEuMCBSRVFVSVJFRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJjMGFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvRmFpbEV4YWN0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KFRlc3RSdWJ5RmFpbEV4YWN0IExBTkdVQUdFUyBOT05FKQorCisjIFNob3VsZCBhbHdheXMgZmFpbCBzaW5jZSB0aGVyZSBpcyBOTyBydWJ5IDEuOS45IChnb2VzIGZyb20gMS45LjMgdG8gMi4wLjApCitmaW5kX3BhY2thZ2UoUnVieSAxLjkuOSBFWEFDVCBSRVFVSVJFRCkKK2lmIChOT1QgUnVieV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmaW5kIFJ1YnkgMS45LjkiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFJ1YnkvUnZtL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWZjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUnVieS9Sdm0vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3NSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KFRlc3RSVk0gTEFOR1VBR0VTIE5PTkUpCisKK2luY2x1ZGUoQ1Rlc3QpCisKKyMgVG8gcnVuIHRoaXMgdGVzdCwgeW91IG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgUlZNIHJ1YnkgaW5zdGFsbGVkCisjIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgZW52IHZhcmlhYmxlICdNWV9SVUJZX0hPTUUnIGlzIHNldCB0byBhIHZhbGlkIFJWTSBydWJ5IHdoZW4geW91IHJ1biB0aGUgdGVzdAorIyAod2hpY2ggaXMgdGhlIGNhc2UgaWYgeW91IGhhdmUgZG9uZSBgcnZtIHVzZSB4LnkuemAsIGJ1dCBjb3VsZCBiZSBtYW51YWxseSBzZXQgdG9vKQorCisjIFByb3Blcmx5IHVzaW5nIHJ2bSB3b3VsZCByZXF1aXJlIHNvdXJjaW5nIGEgc2hlbGwgc2NyaXB0LCBlZyBgc291cmNlICIkSE9NRS8ucnZtL3NjcmlwdHMvcnZtImAKKyMgSW5zdGVhZCwgSSdsbCBqdXN0IHJlbHkgb24gdGhlIGVudiB2YXJpYWJsZSBNWV9SVUJZX0hPTUUKK3NldChNWV9SVUJZX0hPTUUgIiRFTlZ7TVlfUlVCWV9IT01FfSIpCitpZihOT1QgTVlfUlVCWV9IT01FKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFbnYgdmFyaWFibGUgTVlfUlVCWV9IT01FIHNob3VsZCBiZSBzZXQgdG8gYSB2YWxpZCBSVk0gcnVieSBsb2NhdGlvbiwgb3IgeW91IHNob3VsZCBjYWxsIGBydm0gdXNlIHgueS56YCBiZWZvcmUiKQorZW5kaWYoKQorZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke01ZX1JVQllfSE9NRX0vYmluL3J1YnkiIC1lICJwdXRzIFJVQllfVkVSU0lPTiIKKyAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgUlZNX1JVQllfVkVSU0lPTgorICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworaWYgKHJlc3VsdCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBkZXRlY3QgUlZNIHJ1YnkgdmVyc2lvbiBmcm9tIGAke01ZX1JVQllfSE9NRX0vYmluL3J1YnlgOiAke1JWTV9SVUJZX1ZFUlNJT059IikKK2VuZGlmKCkKKworZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PU1ZX1JVQllfSE9NRSAtLXVuc2V0PVBBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3aGljaCIgInJ1YnkiCisgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIFNZU1RFTV9SVUJZCisgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCisgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorCitpZiAoU1lTVEVNX1JVQlkgTUFUQ0hFUyAiXiR7TVlfUlVCWV9IT01FfS8uKyIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBmaW5kIHN5c3RlbSBydWJ5LCBmb3VuZCAke1NZU1RFTV9SVUJZfSB3aGljaCBpcyBwYXJ0IG9mIE1ZX1JVQllfSE9NRT0ke01ZX1JVQllfSE9NRX0iKQorZW5kaWYoKQorCisjIENoZWNrIHZlcnNpb24gb2YgdGhlIHN5c3RlbSBydWJ5IGV4ZWN1dGFibGUuCitleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7U1lTVEVNX1JVQll9IiAtZSAicHV0cyBSVUJZX1ZFUlNJT04iCisgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIFNZU1RFTV9SVUJZX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCisKK2lmIChyZXN1bHQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gZGV0ZWN0IHN5c3RlbSBydWJ5IHZlcnNpb24gZnJvbSAnJHtTWVNURU1fUlVCWX0nOiAke1NZU1RFTV9SVUJZX1ZFUlNJT059IikKK2VuZGlmKCkKKworaWYoU1lTVEVNX1JVQllfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIFJWTV9SVUJZX1ZFUlNJT04pCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIllvdXIgUlZNIFJ1YnkgVmVyc2lvbiBhbmQgeW91ciBTeXN0ZW0gcnVieSB2ZXJzaW9uIGFyZSB0aGUgc2FtZSAoJHtSVk1fUlVCWV9WRVJTSU9OfSkuIikKK2VuZGlmKCkKKworbWVzc2FnZSgiRm91bmQgU3lzdGVtIFJ1YnkgKCR7U1lTVEVNX1JVQllfVkVSU0lPTn0pOiAke1NZU1RFTV9SVUJZfSIpCittZXNzYWdlKCJGb3VuZCAgUlZNICAgUnVieSAoJHtSVk1fUlVCWV9WRVJTSU9OfSk6ICR7TVlfUlVCWV9IT01FfS9iaW4vcnVieSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFJ1YnkuUnZtRGVmYXVsdAorICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJNWV9SVUJZX0hPTUU9JHtNWV9SVUJZX0hPTUV9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vUnZtRGVmYXVsdC5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFJ1YnkuUnZtT25seQorICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTVlfUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgIi1EUlZNX1JVQllfVkVSU0lPTj0ke1JWTV9SVUJZX1ZFUlNJT059IiAiLURTWVNURU1fUlVCWV9WRVJTSU9OPSR7U1lTVEVNX1JVQllfVkVSU0lPTn0iCisgICAgICAgICAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1J2bU9ubHkuY21ha2UiKQorYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5VbnNldFJ2bU9ubHkKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PU1ZX1JVQllfSE9NRSAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIKKyAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFJWTV9SVUJZX1ZFUlNJT049JHtSVk1fUlVCWV9WRVJTSU9OfSIgIi1EU1lTVEVNX1JVQllfVkVSU0lPTj0ke1NZU1RFTV9SVUJZX1ZFUlNJT059IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Sdm1Pbmx5LmNtYWtlIikKKworYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5Sdm1TdGFuZGFyZAorICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNWV9SVUJZX0hPTUU9JHtNWV9SVUJZX0hPTUV9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vUnZtU3RhbmRhcmQuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bURlZmF1bHQuY21ha2UgYi9UZXN0cy9GaW5kUnVieS9Sdm0vUnZtRGVmYXVsdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZiOTExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bURlZmF1bHQuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyAiIikKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIiIpCisKK2ZpbmRfcGFja2FnZSAoUnVieSAyLjEuMSBSRVFVSVJFRCkKK2lmIChOT1QgUlVCWV9FWEVDVVRBQkxFIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIHVzZSBSVk0gZW52aXJvbm1lbnQ6ICR7UlVCWV9FWEVDVVRBQkxFfSwgJHtSVUJZX0hPTUV9IikKK2VuZGlmKCkKKworZmluZF9wYWNrYWdlIChSdWJ5IDIuMSBSRVFVSVJFRCkKK2lmIChOT1QgUlVCWV9FWEVDVVRBQkxFIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIHVzZSBSVk0gZW52aXJvbm1lbnQ6ICR7UlVCWV9FWEVDVVRBQkxFfSwgJHtSVUJZX0hPTUV9IikKK2VuZGlmKCkKKworZmluZF9wYWNrYWdlIChSdWJ5IFJFUVVJUkVEKQoraWYgKE5PVCBSVUJZX0VYRUNVVEFCTEUgTUFUQ0hFUyAiXiR7UlVCWV9IT01FfS8uKyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gdXNlIFJWTSBlbnZpcm9ubWVudDogJHtSVUJZX0VYRUNVVEFCTEV9LCAke1JVQllfSE9NRX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bU9ubHkuY21ha2UgYi9UZXN0cy9GaW5kUnVieS9Sdm0vUnZtT25seS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODUxYTdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bU9ubHkuY21ha2UKQEAgLTAsMCArMSw0MSBAQAorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyAiIikKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIiIpCisKK3NldChSdWJ5X0ZJTkRfVklSVFVBTEVOViBPTkxZKQorCisjIFRlc3Q6IEZpbmRSdWJ5LlJ2bU9ubHkKK2lmIChSVUJZX0hPTUUpCisgICMgPT4gVHJ5aW5nIHRvIGZpbmQgZXhhY3RseSBzeXN0ZW0gcnVieSB1c2luZyBPTkxZIHZpcnR1YWwgZW52aXJvbm1lbnQgc2hvdWxkIGZhaWwKKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7U1lTVEVNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKFJ1YnlfRk9VTkQpCisgICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlJ1YnkgdW5leHBlY3RlZGx5IGZvdW5kLiIpCisgIGVuZGlmKCkKKyAgIyBBbmQgc2hvdWxkIHdvcmsgdG8gZmluZCB0aGUgcnZtIHZlcnNpb24KKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7UlZNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKFJ1YnlfRk9VTkQpCisgICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlJ1YnkgdW5leHBlY3RlZGx5IGZvdW5kLiIpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworCisjIFRlc3Q6IEZpbmRSdWJ5LlVuc2V0UnZtT25seQoraWYgKE5PVCBSVUJZX0hPTUUpCisKKyAgIyBJZiBFTlZ7TVlfUlVCWV9IT01FfSBpc24ndCBkZWZpbmVkLCBpdCBzaG91bGQgZGVmYXVsdCBiYWNrIHRvICJTVEFOREFSRCIKKyAgIyBBdCB3aGljaCBwb2ludDoKKworICAjIEl0IHNob3VsZG4ndCBmaW5kIHRoZSBSVk0gcnVieQorICBmaW5kX3BhY2thZ2UgKFJ1YnkgJHtSVk1fUlVCWV9WRVJTSU9OfSBFWEFDVCBRVUlFVCkKKyAgaWYoUnVieV9GT1VORCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGb3VuZCBSVk0gcnVieSB3aGVuIGV4cGVjdGluZyBzeXN0ZW0iKQorICBlbmRpZigpCisKKyAgIyBpdCBzaG91bGQgZmluZCB0aGUgc3lzdGVtIHJ1YnkKKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7U1lTVEVNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKE5PVCBSdWJ5X0ZPVU5EKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJSdWJ5IG5vdCBmb3VuZC4iKQorICBlbmRpZigpCisgIGlmIChSdWJ5X0ZPVU5EIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmaW5kIHN5c3RlbSBydWJ5IikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bVN0YW5kYXJkLmNtYWtlIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bVN0YW5kYXJkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmVmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUnVieS9Sdm0vUnZtU3RhbmRhcmQuY21ha2UKQEAgLTAsMCArMSw5IEBACitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTICIiKQorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAiIikKKworc2V0IChSdWJ5X0ZJTkRfVklSVFVBTEVOViBTVEFOREFSRCkKK2ZpbmRfcGFja2FnZSAoUnVieSBSRVFVSVJFRCkKKworaWYgKFJVQllfRVhFQ1VUQUJMRSBNQVRDSEVTICJeJHtSVUJZX0hPTUV9Ly4rIikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlJWTSBydWJ5IHVuZXhwZWN0ZWRseSBmb3VuZCBhdCAke1JVQllfRVhFQ1VUQUJMRX0sIG1hdGNoZXMgJHtSVUJZX0hPTUV9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUnVieS9UZXN0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjNlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUnVieS9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdChUZXN0UnVieSBMQU5HVUFHRVMgQykKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShSdWJ5IDEuOS45IFJFUVVJUkVEKQoraWYgKE5PVCBSdWJ5X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGZpbmQgUnVieSA+PTEuOS45IikKK2VuZGlmKCkKKworYWRkX2V4ZWN1dGFibGUocnVieV92ZXJzaW9uIHJ1YnlfdmVyc2lvbi5jKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMocnVieV92ZXJzaW9uIFBSSVZBVEUgJHtSdWJ5X0lOQ0xVREVfRElSU30pCit0YXJnZXRfbGlua19saWJyYXJpZXMocnVieV92ZXJzaW9uIFBSSVZBVEUgJHtSdWJ5X0xJQlJBUklFU30pCisKK2FkZF90ZXN0KE5BTUUgcnVieV92ZXJzaW9uIENPTU1BTkQgcnVieV92ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvVGVzdC9ydWJ5X3ZlcnNpb24uYyBiL1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QvcnVieV92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMDQzNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QvcnVieV92ZXJzaW9uLmMKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSAicnVieS5oIgorCitpbnQgbWFpbih2b2lkKQoreworICBydWJ5X3Nob3dfdmVyc2lvbigpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRYMTEvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRYMTEvVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCA3NjkyNzFmLi5iMmFkZmIyIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kWDExL1Rlc3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFgxMS9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0yOSw2ICsyOSwxMCBAQAogc2V0KFgxMV9YMTFfRk9VTkQgJHtYMTFfRk9VTkR9KQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFgxMSkKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYYXUpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgeGNiKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFgxMV94Y2IpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgeGNiX2ljY2NtKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhjYl94a2IpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGNvbXBvc2l0ZSkKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYZGFtYWdlKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhkbWNwKQpAQCAtNDEsNiArNDUsOCBAQAogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzX2lnbm9yZSBYZnQpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGkpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGluZXJhbWEpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgeGtiY29tbW9uKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhrYmNvbW1vbl9YMTEpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGtiKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhrYmZpbGUpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWG11KQpAQCAtNjEsNiArNjcsOSBAQAogIyBOb3QgaW5jbHVkZWQgaW4gWDExX0xJQlJBUklFUy4KIGZvcmVhY2gobGliCiAgICAgWGF1CisgICAgeGNiCisgICAgWDExX3hjYgorICAgIHhjYl9pY2NjbQogICAgIFhjb21wb3NpdGUKICAgICBYZGFtYWdlCiAgICAgWGRtY3AKQEAgLTY5LDYgKzc4LDggQEAKICAgICBYZml4ZXMKICAgICBYaQogICAgIFhpbmVyYW1hCisgICAgeGtiY29tbW9uCisgICAgeGtiY29tbW9uX1gxMQogICAgIFhrYgogICAgIHhrYmZpbGUKICAgICBYbXUKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Nb2R1bGVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRm9ydHJhbk1vZHVsZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggZDA1NmI0My4uYjdhNmY2OCAxMDA2NDQKLS0tIGEvVGVzdHMvRm9ydHJhbk1vZHVsZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRm9ydHJhbk1vZHVsZXMvQ01ha2VMaXN0cy50eHQKQEAgLTIxLDcgKzIxLDcgQEAKIHN1Ym1vZHVsZSAoIHBhcmVudCApIGNoaWxkCiBjb250YWlucwogICBtb2R1bGUgcHJvY2VkdXJlIGlkCi0gICAgZiA9IHgKKyAgICBpZCA9IHgKICAgZW5kIHByb2NlZHVyZSBpZAogZW5kIHN1Ym1vZHVsZSBjaGlsZAogcHJvZ3JhbSBtYWluCmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9FeGVjdXRhYmxlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRm9ydHJhbk1vZHVsZXMvRXhlY3V0YWJsZS9DTWFrZUxpc3RzLnR4dAppbmRleCBkZTA4ZDg2Li5mMzFhM2U2IDEwMDY0NAotLS0gYS9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9FeGVjdXRhYmxlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZvcnRyYW5Nb2R1bGVzL0V4ZWN1dGFibGUvQ01ha2VMaXN0cy50eHQKQEAgLTEsNiArMSw2IEBACiBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7TGlicmFyeV9NT0RESVJ9KQogaW5jbHVkZV9kaXJlY3Rvcmllcygke0V4dGVybmFsX0JJTkFSWV9ESVJ9KQotbGlua19kaXJlY3Rvcmllcygke0V4dGVybmFsX0JJTkFSWV9ESVJ9KQorbGlua19kaXJlY3Rvcmllcygke0V4dGVybmFsX0JJTkFSWV9ESVJ9LyR7Q01BS0VfQ0ZHX0lOVERJUn0pCiAKIGFkZF9leGVjdXRhYmxlKHN1YmRpcl9leGUyIG1haW4uZjkwKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHN1YmRpcl9leGUyIHN1YmRpcl9tb2RzIHN1YmRpcl9tb2RzMikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRm9ydHJhbk9ubHkvQ01ha2VMaXN0cy50eHQKaW5kZXggZGU4ODdmYS4uNDMyN2MyZiAxMDA2NDQKLS0tIGEvVGVzdHMvRm9ydHJhbk9ubHkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvQ01ha2VMaXN0cy50eHQKQEAgLTUxLDQwICs1MSwzNiBAQAogICApCiBhZGRfZGVwZW5kZW5jaWVzKGNoZWNrc2F5aGVsbG8gc2F5aGVsbG8pCiAKLSMgRXhjbHVkZSB0aGlzIHRlc3Qgb24gSUJNIFhMIGZvciBub3cgYmVjYXVzZSB0aGUgY2hlY2sgc3RyYW5nZWx5Ci0jIGZhaWxzIHdpdGggJ2xkOiAwNzA2LTAyOSBVc2UgYSBudW1iZXIgd2l0aCB0aGUgLUggZmxhZycuCi1pZihOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCBYTCkKLSAgc2V0KGVycl9sb2cgJHtDTUFLRV9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0NNYWtlRXJyb3IubG9nKQotICBmaWxlKFJFTU9WRSAiJHtlcnJfbG9nfSIpCi0gIGluY2x1ZGUoQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMpCi0gIHVuc2V0KEhBVkVfUFJJTlQgQ0FDSEUpCi0gIENIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTKFtbCitzZXQoZXJyX2xvZyAke0NNQUtFX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ01ha2VFcnJvci5sb2cpCitmaWxlKFJFTU9WRSAiJHtlcnJfbG9nfSIpCitpbmNsdWRlKENoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzKQordW5zZXQoSEFWRV9QUklOVCBDQUNIRSkKK0NIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTKFtbCiAgICAgICBQUk9HUkFNIFRFU1RfSEFWRV9QUklOVAogICAgICAgICBQUklOVCAqLCAnSGVsbG8nCiAgICAgICBFTkQKIF1dIEhBVkVfUFJJTlQpCi0gIGlmKE5PVCBIQVZFX1BSSU5UKQotICAgIGlmKEVYSVNUUyAiJHtlcnJfbG9nfSIpCi0gICAgICBmaWxlKFJFQUQgIiR7ZXJyX2xvZ30iIGVycikKLSAgICBlbmRpZigpCi0gICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgZXJyICIgICR7ZXJyfSIpCi0gICAgbWVzc2FnZShTRU5EX0VSUk9SICJDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFUyBmb3IgSEFWRV9QUklOVCBmYWlsZWQ6XG4iCi0gICAgICAiJHtlcnJ9IikKK2lmKE5PVCBIQVZFX1BSSU5UKQorICBpZihFWElTVFMgIiR7ZXJyX2xvZ30iKQorICAgIGZpbGUoUkVBRCAiJHtlcnJfbG9nfSIgZXJyKQogICBlbmRpZigpCisgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIGVyciAiICAke2Vycn0iKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkNIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTIGZvciBIQVZFX1BSSU5UIGZhaWxlZDpcbiIKKyAgICAiJHtlcnJ9IikKK2VuZGlmKCkKIAotICB1bnNldChGb3J0cmFuX0JPR1VTX0ZMQUcgQ0FDSEUpCi0gIGluY2x1ZGUoQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnKQotICBDSEVDS19Gb3J0cmFuX0NPTVBJTEVSX0ZMQUcoLV90aGlzX2lzX25vdF9hX2ZsYWdfIEZvcnRyYW5fQk9HVVNfRkxBRykKLSAgaWYgKEZvcnRyYW5fQk9HVVNfRkxBRykKLSAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNIRUNLX0ZvcnRyYW5fQ09NUElMRVJfRkxBRygpIHN1Y2NlZWRlZCwgYnV0IHNob3VsZCBoYXZlIGZhaWxlZCIpCi0gIGVuZGlmKCkKK3Vuc2V0KEZvcnRyYW5fQk9HVVNfRkxBRyBDQUNIRSkKK2luY2x1ZGUoQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnKQorQ0hFQ0tfRm9ydHJhbl9DT01QSUxFUl9GTEFHKC1fdGhpc19pc19ub3RfYV9mbGFnXyBGb3J0cmFuX0JPR1VTX0ZMQUcpCitpZiAoRm9ydHJhbl9CT0dVU19GTEFHKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkNIRUNLX0ZvcnRyYW5fQ09NUElMRVJfRkxBRygpIHN1Y2NlZWRlZCwgYnV0IHNob3VsZCBoYXZlIGZhaWxlZCIpCitlbmRpZigpCiAKLSAgdW5zZXQoRm9ydHJhbl9SVU5fRkxBRyBDQUNIRSkKLSAgaW5jbHVkZShDaGVja0ZvcnRyYW5Tb3VyY2VSdW5zKQotICBjaGVja19mb3J0cmFuX3NvdXJjZV9ydW5zKCJwcm9ncmFtIGE7IGVuZCBwcm9ncmFtIiBGb3J0cmFuX1JVTl9GTEFHIFNSQ19FWFQgRjkwKQotICBpZihOT1QgRm9ydHJhbl9SVU5fRkxBRykKLSAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNIRUNLX0ZvcnRyYW5fU09VUkNFX1JVTlMoKSBmYWlsZWQiKQotICBlbmRpZigpCit1bnNldChGb3J0cmFuX1JVTl9GTEFHIENBQ0hFKQoraW5jbHVkZShDaGVja0ZvcnRyYW5Tb3VyY2VSdW5zKQorY2hlY2tfZm9ydHJhbl9zb3VyY2VfcnVucygicHJvZ3JhbSBhOyBlbmQgcHJvZ3JhbSIgRm9ydHJhbl9SVU5fRkxBRyBTUkNfRVhUIEY5MCkKK2lmKE5PVCBGb3J0cmFuX1JVTl9GTEFHKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkNIRUNLX0ZvcnRyYW5fU09VUkNFX1JVTlMoKSBmYWlsZWQiKQogZW5kaWYoKQogCiAjIFRlc3QgZ2VuZXJhdGlvbiBvZiBwcmVwcm9jZXNzZWQgc291cmNlcy4KQEAgLTEwMywxMSArOTksMTEgQEAKIAogICAgICMgQ3VzdG9tIHRhcmdldCB0byB0cnkgcHJlcHJvY2Vzc2luZyBpbnZvY2F0aW9uLgogICAgIGFkZF9jdXN0b21fdGFyZ2V0KHRlc3RfcHJlcHJvY2VzcyAke01BWUJFX0FMTH0KLSAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmUgQ01ha2VGaWxlcy9wcmVwcm9jZXNzLmRpci9wcmVwcm9jZXNzLkYuaQorICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mIENNYWtlRmlsZXMvcHJlcHJvY2Vzcy5kaXIvcHJlcHJvY2Vzcy5GLmkKICAgICAgIENPTU1BTkQgJHtDTUFLRV9NQUtFX1BST0dSQU19IHByZXByb2Nlc3MuaQogICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90ZXN0X3ByZXByb2Nlc3MuY21ha2UKICAgICAgICMgUmVtb3ZlIGJvZ3VzIGZpbGUgc29tZSBjb21waWxlcnMgbGVhdmUgYmVoaW5kLgotICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcHJlcHJvY2Vzcy5zCisgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3ByZXByb2Nlc3MucwogICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICApCiAgIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9DTWFrZUxpc3RzLnR4dAppbmRleCA3NjFjNDA1Li5mYTMzMDlmIDEwMDY0NAotLS0gYS9UZXN0cy9JbmNsdWRlRGlyZWN0b3JpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL0NNYWtlTGlzdHMudHh0CkBAIC05NCw2ICs5NCw2IEBACiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRW1wdHkgaW5jbHVkZV9kaXJlY3RvcmllcyBlbnRyeSB3YXMgbm90IGlnbm9yZWQuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCBYY29kZSBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCBOaW5qYSkKK2lmKE5PVCBDTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIlhjb2RlIiBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIpCiAgIGFkZF9zdWJkaXJlY3RvcnkoQ01QMDAyMSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ludGVyZmFjZUxpYnJhcnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9JbnRlcmZhY2VMaWJyYXJ5L0NNYWtlTGlzdHMudHh0CmluZGV4IDk1NGMwMmQuLjMxMWNhMmEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ludGVyZmFjZUxpYnJhcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvSW50ZXJmYWNlTGlicmFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMyw2ICszLDEyIEBACiAKIHByb2plY3QoSW50ZXJmYWNlTGlicmFyeSkKIAorc2V0KGNmZ19kaXIpCitnZXRfcHJvcGVydHkoX2lzTXVsdGlDb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZihfaXNNdWx0aUNvbmZpZykKKyAgc2V0KGNmZ19kaXIgLyQ8Q09ORklHPikKK2VuZGlmKCkKKwogYWRkX2xpYnJhcnkoaWZhY2Vfbm9kZXBlbmRzIElOVEVSRkFDRSkKIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGlmYWNlX25vZGVwZW5kcyBJTlRFUkZBQ0UgSUZBQ0VfREVGSU5FKQogCkBAIC0zMiw3ICszOCw3IEBACiBzZXRfcHJvcGVydHkoVEFSR0VUIGl0ZW1faWZhY2UgUFJPUEVSVFkgSU1QT1JURURfTElCTkFNRSBpdGVtX3JlYWwpCiBhZGRfZGVwZW5kZW5jaWVzKGl0ZW1faWZhY2UgaXRlbV9yZWFsKQogZ2V0X3Byb3BlcnR5KGl0ZW1faWZhY2VfZGVwZW5kZW5jaWVzIFRBUkdFVCBpdGVtX2lmYWNlIFBST1BFUlRZIE1BTlVBTExZX0FEREVEX0RFUEVOREVOQ0lFUykKLWxpbmtfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQorbGlua19kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0ke2NmZ19kaXJ9KQogCiBhZGRfZXhlY3V0YWJsZShJbnRlcmZhY2VMaWJyYXJ5IGRlZmluZXRlc3RleGUuY3BwKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEludGVyZmFjZUxpYnJhcnkKZGlmZiAtLWdpdCBhL1Rlc3RzL0phdmFFeHBvcnRJbXBvcnQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9KYXZhRXhwb3J0SW1wb3J0L0NNYWtlTGlzdHMudHh0CmluZGV4IGM3MDcwNGEuLjdhMmQwMjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0phdmFFeHBvcnRJbXBvcnQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvSmF2YUV4cG9ydEltcG9ydC9DTWFrZUxpc3RzLnR4dApAQCAtOSw3ICs5LDcgQEAKICMgV2lwZSBvdXQgdGhlIGluc3RhbGwgdHJlZSB0byBtYWtlIHN1cmUgdGhlIGV4cG9ydGVyIHdvcmtzLgogYWRkX2N1c3RvbV9jb21tYW5kKAogICBPVVRQVVQgJHtKYXZhRXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJ9L0NsZWFudXBQcm9qZWN0Ci0gIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5ICR7SmF2YUV4cG9ydEltcG9ydF9CSU5BUllfRElSfS9Sb290CisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgJHtKYXZhRXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJ9L1Jvb3QKICAgKQogYWRkX2N1c3RvbV90YXJnZXQoQ2xlYW51cFRhcmdldCBBTEwgREVQRU5EUyAke0phdmFFeHBvcnRJbXBvcnRfQklOQVJZX0RJUn0vQ2xlYW51cFByb2plY3QpCiBzZXRfcHJvcGVydHkoCmRpZmYgLS1naXQgYS9UZXN0cy9MaW5rRGlyZWN0b3J5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTGlua0RpcmVjdG9yeS9DTWFrZUxpc3RzLnR4dAppbmRleCBjNjBkZTg0Li5jN2EyNzAwIDEwMDY0NAotLS0gYS9UZXN0cy9MaW5rRGlyZWN0b3J5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0xpbmtEaXJlY3RvcnkvQ01ha2VMaXN0cy50eHQKQEAgLTMzLDcgKzMzLDcgQEAKICMgZGlyZWN0bHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBrbm93IHRoZSBmdWxsIHBhdGhzIHRvIHRoZSBsaWJyYXJpZXMuCiAjIChUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gY2hlY2sgdGhhdCBsaW5rX2RpcmVjdG9yaWVzIHdvcmtzLikKIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcChFeHRlcm5hbFRhcmdldCBjbGVhbnVwCi0gIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5ICR7TGlua0RpcmVjdG9yeV9CSU5BUllfRElSfS9iaW4KKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiAke0xpbmtEaXJlY3RvcnlfQklOQVJZX0RJUn0vYmluCiAgIERFUEVOREVFUyBkb3dubG9hZAogICBERVBFTkRFUlMgY29uZmlndXJlCiAgIERFUEVORFMgbXlsaWJBIG15bGliQgpkaWZmIC0tZ2l0IGEvVGVzdHMvTGlua0RpcmVjdG9yeS9FeHRlcm5hbC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0xpbmtEaXJlY3RvcnkvRXh0ZXJuYWwvQ01ha2VMaXN0cy50eHQKaW5kZXggZDJhMWY5Zi4uYzg3NzkxMyAxMDA2NDQKLS0tIGEvVGVzdHMvTGlua0RpcmVjdG9yeS9FeHRlcm5hbC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9MaW5rRGlyZWN0b3J5L0V4dGVybmFsL0NNYWtlTGlzdHMudHh0CkBAIC0yLDEzICsyLDE5IEBACiBwcm9qZWN0KExpbmtEaXJlY3RvcnlFeHRlcm5hbCBDKQogCiAKK3NldChjZmdfZGlyKQorZ2V0X3Byb3BlcnR5KF9pc011bHRpQ29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYoX2lzTXVsdGlDb25maWcpCisgIHNldChjZmdfZGlyIC8kPENPTkZJRz4pCitlbmRpZigpCisKIGFkZF9leGVjdXRhYmxlKG15ZXhlMiBteWV4ZS5jKQogc2V0X3Byb3BlcnR5KFRBUkdFVCBteWV4ZTIgUFJPUEVSVFkgT1VUUFVUX05BTUUgTGlua0RpcmVjdG9yeTIpCi10YXJnZXRfbGlua19kaXJlY3RvcmllcyhteWV4ZTIgUFJJVkFURSBsaWIgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9saWIiKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMobXlleGUyIFBSSVZBVEUgbGliJHtjZmdfZGlyfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL2xpYiR7Y2ZnX2Rpcn0iKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG15ZXhlMiBQUklWQVRFIG15bGliQSBteWxpYkIpCiAKIGFkZF9saWJyYXJ5IChteWxpYnMgSU5URVJGQUNFKQotdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMobXlsaWJzIElOVEVSRkFDRSBsaWIgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9saWIiKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMobXlsaWJzIElOVEVSRkFDRSBsaWIke2NmZ19kaXJ9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vbGliJHtjZmdfZGlyfSIpCiB0YXJnZXRfbGlua19saWJyYXJpZXMobXlsaWJzIElOVEVSRkFDRSBteWxpYkEgbXlsaWJCKQogYWRkX2V4ZWN1dGFibGUobXlleGUzIG15ZXhlLmMpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG15ZXhlMyBQUk9QRVJUWSBPVVRQVVRfTkFNRSBMaW5rRGlyZWN0b3J5MykKQEAgLTE3LDExICsyMywxMSBAQAogCiAjIFRlc3QgQ01QMDAxNSBPTEQgYmVoYXZpb3I6IC1MLi4vbGliCiBjbWFrZV9wb2xpY3koU0VUIENNUDAwMTUgT0xEKQotbGlua19kaXJlY3RvcmllcyguLi9saWIpCitsaW5rX2RpcmVjdG9yaWVzKC4uL2xpYiR7Y2ZnX2Rpcn0pCiAKICMgVGVzdCBDTVAwMDE1IE5FVyBiZWhhdmlvcjogLUwke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbGliCiBjbWFrZV9wb2xpY3koU0VUIENNUDAwMTUgTkVXKQotbGlua19kaXJlY3RvcmllcyhsaWIpCitsaW5rX2RpcmVjdG9yaWVzKGxpYiR7Y2ZnX2Rpcn0pCiAKIGFkZF9leGVjdXRhYmxlKG15ZXhlIG15ZXhlLmMpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG15ZXhlIFBST1BFUlRZIE9VVFBVVF9OQU1FIExpbmtEaXJlY3RvcnkpCmRpZmYgLS1naXQgYS9UZXN0cy9NYWNSdW50aW1lUGF0aC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL01hY1J1bnRpbWVQYXRoL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzYzZmZDkuLjlmMWJmMWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL01hY1J1bnRpbWVQYXRoL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL01hY1J1bnRpbWVQYXRoL0NNYWtlTGlzdHMudHh0CkBAIC03LDcgKzcsNyBAQAogIyBXaXBlIG91dCB0aGUgaW5zdGFsbCB0cmVlIHRvIG1ha2Ugc3VyZSB0aGUgZXhwb3J0ZXIgd29ya3MuCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgIE9VVFBVVCAke01hY1J1bnRpbWVQYXRoX0JJTkFSWV9ESVJ9L0NsZWFudXBQcm9qZWN0Ci0gIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5ICR7TWFjUnVudGltZVBhdGhfQklOQVJZX0RJUn0vUm9vdAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmICR7TWFjUnVudGltZVBhdGhfQklOQVJZX0RJUn0vUm9vdAogICApCiBhZGRfY3VzdG9tX3RhcmdldChDbGVhbnVwVGFyZ2V0IEFMTCBERVBFTkRTICR7TWFjUnVudGltZVBhdGhfQklOQVJZX0RJUn0vQ2xlYW51cFByb2plY3QpCiBzZXRfcHJvcGVydHkoCmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvT2JqZWN0TGlicmFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCA3ODk3YWI5Li5mY2E1ZjQxIDEwMDY0NAotLS0gYS9UZXN0cy9PYmplY3RMaWJyYXJ5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvQ01ha2VMaXN0cy50eHQKQEAgLTczLDMgKzczLDUgQEAKIHRhcmdldF9saW5rX2xpYnJhcmllcyhVc2VBQnN0YXRpY09ianMgQUJzdGF0aWMpCiAKIGFkZF9zdWJkaXJlY3RvcnkoRXhwb3J0TGFuZ3VhZ2VzKQorCithZGRfc3ViZGlyZWN0b3J5KFRyYW5zaXRpdmUpCmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxNmNkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyIEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAwMjIgTkVXKQorYWRkX2xpYnJhcnkoRm9vU3RhdGljIFNUQVRJQyBGb29TdGF0aWMuYykKKworYWRkX2xpYnJhcnkoRm9vT2JqZWN0MSBPQkpFQ1QgRm9vT2JqZWN0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoRm9vT2JqZWN0MSBQUklWQVRFIEZvb1N0YXRpYykKK2FkZF9leGVjdXRhYmxlKFRyYW5zaXRpdmUxIFRyYW5zaXRpdmUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhUcmFuc2l0aXZlMSBQUklWQVRFIEZvb09iamVjdDEpCisKK2FkZF9saWJyYXJ5KEZvb09iamVjdDIgT0JKRUNUIEZvb09iamVjdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEZvb09iamVjdDIgSU5URVJGQUNFIEZvb1N0YXRpYykKK2FkZF9leGVjdXRhYmxlKFRyYW5zaXRpdmUyIFRyYW5zaXRpdmUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhUcmFuc2l0aXZlMiBQUklWQVRFIEZvb09iamVjdDIpCmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vT2JqZWN0LmMgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vT2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMWYyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29PYmplY3QuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBGb29PYmplY3Qodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vU3RhdGljLmMgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vU3RhdGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2NDljNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29TdGF0aWMuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBGb29TdGF0aWModm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvVHJhbnNpdGl2ZS5jIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL1RyYW5zaXRpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA4OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL1RyYW5zaXRpdmUuYwpAQCAtMCwwICsxLDcgQEAKK2V4dGVybiBpbnQgRm9vT2JqZWN0KHZvaWQpOworZXh0ZXJuIGludCBGb29TdGF0aWModm9pZCk7CisKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiBGb29PYmplY3QoKSArIEZvb1N0YXRpYygpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvT3V0RGlyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvT3V0RGlyL0NNYWtlTGlzdHMudHh0CmluZGV4IDgyM2FiMDguLjhhZmUwMzYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL091dERpci9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9PdXREaXIvQ01ha2VMaXN0cy50eHQKQEAgLTIwLDcgKzIwLDcgQEAKIGZvcmVhY2goY29uZmlnICR7Y29uZmlnc30pCiAgIGZvcmVhY2godHlwZSBhcmNoaXZlIHJ1bnRpbWUgbGlicmFyeSkKICAgICBzdHJpbmcoVE9VUFBFUiAiJHt0eXBlfSIgVFlQRSkKLSAgICBzZXQoQ01BS0VfJHtUWVBFfV9PVVRQVVRfRElSRUNUT1JZXyR7Y29uZmlnfSAiJHt0b3B9LyR7dHlwZX0iKQorICAgIHNldChDTUFLRV8ke1RZUEV9X09VVFBVVF9ESVJFQ1RPUllfJHtjb25maWd9ICIke3RvcH0vJHt0eXBlfS8kPENPTkZJRz4iKQogICAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7dG9wfS8ke3R5cGV9IikKICAgZW5kZm9yZWFjaCgpCiBlbmRmb3JlYWNoKCkKQEAgLTI5LDcgKzI5LDcgQEAKIAogYWRkX2N1c3RvbV9jb21tYW5kKAogICBPVVRQVVQgT3V0RGlyLmgKLSAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1EdG9wPSR7dG9wfSAtUCAke091dERpcl9TT1VSQ0VfRElSfS9PdXREaXIuY21ha2UKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1EdG9wPSR7dG9wfSAtRGNmZ19kaXI9JDxDT05GSUc+IC1QICR7T3V0RGlyX1NPVVJDRV9ESVJ9L091dERpci5jbWFrZQogICBERVBFTkRTIENPbmx5ICR7T3V0RGlyX1NPVVJDRV9ESVJ9L091dERpci5jbWFrZQogICApCiBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7dG9wfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL091dERpci9PdXREaXIuY21ha2UgYi9UZXN0cy9PdXREaXIvT3V0RGlyLmNtYWtlCmluZGV4IGExZjEzZTcuLjJhMDAzYjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL091dERpci9PdXREaXIuY21ha2UKKysrIGIvVGVzdHMvT3V0RGlyL091dERpci5jbWFrZQpAQCAtMywxNyArMywxNyBAQAogCiBmaW5kX2xpYnJhcnkoVEVTVEMxX0xJQgogICBOQU1FUyB0ZXN0YzEgdGVzdGMxX3Rlc3RfZGVidWdfcG9zdGZpeAotICBQQVRIUyAke3RvcH0vYXJjaGl2ZQorICBQQVRIUyAke3RvcH0vYXJjaGl2ZS8ke2NmZ19kaXJ9CiAgIE5PX0RFRkFVTFRfUEFUSCkKIAogZmluZF9saWJyYXJ5KFRFU1RDMl9MSUIKICAgTkFNRVMgdGVzdGMyIHRlc3RjMl90ZXN0X2RlYnVnX3Bvc3RmaXgKLSAgUEFUSFMgJHt0b3B9L2FyY2hpdmUgJHt0b3B9L2xpYnJhcnkKKyAgUEFUSFMgJHt0b3B9L2FyY2hpdmUvJHtjZmdfZGlyfSAke3RvcH0vbGlicmFyeS8ke2NmZ19kaXJ9CiAgIE5PX0RFRkFVTFRfUEFUSCkKIAogZmluZF9wcm9ncmFtKENPTkxZX0VYRQogICBOQU1FUyBDT25seQotICBQQVRIUyAke3RvcH0vcnVudGltZQorICBQQVRIUyAke3RvcH0vcnVudGltZS8ke2NmZ19kaXJ9CiAgIE5PX0RFRkFVTFRfUEFUSCkKIAogZmlsZShSRUxBVElWRV9QQVRIIFRFU1RDMV9MSUJfRklMRSAiJHt0b3B9IiAiJHtURVNUQzFfTElCfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuYyBiL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jCmluZGV4IDk1OGM3N2UuLmIzMTE3ZGEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jCisrKyBiL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICByZXN1bHQgPSAwOwogICB9CiAgIGlmIChzdHJjbXAoVEFSR0VUX1NUUklORywgU1RSSU5HX1ZBTFVFKSAhPSAwKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfU1RSSU5HIGhhcyB3cm9uZyB2YWx1ZSBpbiBDIFslc11cbiIsCi0gICAgICAgICAgICBUQVJHRVRfU1RSSU5HKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9TVFJJTkcgaGFzIHdyb25nIHZhbHVlIGluIEMgWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgVEFSR0VUX1NUUklORywgU1RSSU5HX1ZBTFVFKTsKICAgICByZXN1bHQgPSAwOwogICB9CiAgIHsKICAgICBpbnQgeCA9IDI7CiAgICAgaW50IHkgPSAzOwogICAgIGlmICgoRklMRV9FWFBSKSAhPSAoRVhQUikpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiRklMRV9FWFBSIGRpZCBub3Qgd29yayBpbiBDIFslc11cbiIsCi0gICAgICAgICAgICAgIFRPX1NUUklORyhGSUxFX0VYUFIpKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiRklMRV9FWFBSIGRpZCBub3Qgd29yayBpbiBDIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgICAgVE9fU1RSSU5HKEZJTEVfRVhQUiksIFRPX1NUUklORyhFWFBSKSk7CiAgICAgICByZXN1bHQgPSAwOwogICAgIH0KICAgICBpZiAoKFRBUkdFVF9FWFBSKSAhPSAoRVhQUikpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX0VYUFIgZGlkIG5vdCB3b3JrIGluIEMgWyVzXVxuIiwKLSAgICAgICAgICAgICAgVE9fU1RSSU5HKEZJTEVfRVhQUikpOworICAgICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfRVhQUiBkaWQgbm90IHdvcmsgaW4gQyBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICAgIFRPX1NUUklORyhUQVJHRVRfRVhQUiksIFRPX1NUUklORyhFWFBSKSk7CiAgICAgICByZXN1bHQgPSAwOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmN4eCBiL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jeHgKaW5kZXggMzRhNjljNi4uZjJmZmZlZiAxMDA2NDQKLS0tIGEvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmN4eAorKysgYi9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuY3h4CkBAIC0xMiwyNSArMTIsMjYgQEAKIHsKICAgaW50IHJlc3VsdCA9IDE7CiAgIGlmIChzdHJjbXAoRklMRV9TVFJJTkcsIFNUUklOR19WQUxVRSkgIT0gMCkgewotICAgIGZwcmludGYoc3RkZXJyLCAiRklMRV9TVFJJTkcgaGFzIHdyb25nIHZhbHVlIGluIENYWCBbJXNdXG4iLCBGSUxFX1NUUklORyk7CisgICAgZnByaW50ZihzdGRlcnIsICJGSUxFX1NUUklORyBoYXMgd3JvbmcgdmFsdWUgaW4gQ1hYIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgIEZJTEVfU1RSSU5HLCBTVFJJTkdfVkFMVUUpOwogICAgIHJlc3VsdCA9IDA7CiAgIH0KICAgaWYgKHN0cmNtcChUQVJHRVRfU1RSSU5HLCBTVFJJTkdfVkFMVUUpICE9IDApIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9TVFJJTkcgaGFzIHdyb25nIHZhbHVlIGluIENYWCBbJXNdXG4iLAotICAgICAgICAgICAgVEFSR0VUX1NUUklORyk7CisgICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfU1RSSU5HIGhhcyB3cm9uZyB2YWx1ZSBpbiBDWFggWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgVEFSR0VUX1NUUklORywgU1RSSU5HX1ZBTFVFKTsKICAgICByZXN1bHQgPSAwOwogICB9CiAgIHsKICAgICBpbnQgeCA9IDI7CiAgICAgaW50IHkgPSAzOwogICAgIGlmICgoRklMRV9FWFBSKSAhPSAoRVhQUikpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiRklMRV9FWFBSIGRpZCBub3Qgd29yayBpbiBDWFggWyVzXVxuIiwKLSAgICAgICAgICAgICAgVE9fU1RSSU5HKEZJTEVfRVhQUikpOworICAgICAgZnByaW50ZihzdGRlcnIsICJGSUxFX0VYUFIgZGlkIG5vdCB3b3JrIGluIENYWCBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICAgIFRPX1NUUklORyhGSUxFX0VYUFIpLCBUT19TVFJJTkcoRVhQUikpOwogICAgICAgcmVzdWx0ID0gMDsKICAgICB9CiAgICAgaWYgKChUQVJHRVRfRVhQUikgIT0gKEVYUFIpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9FWFBSIGRpZCBub3Qgd29yayBpbiBDWFggWyVzXVxuIiwKLSAgICAgICAgICAgICAgVE9fU1RSSU5HKEZJTEVfRVhQUikpOworICAgICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfRVhQUiBkaWQgbm90IHdvcmsgaW4gQ1hYIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgICAgVE9fU1RSSU5HKFRBUkdFVF9FWFBSKSwgVE9fU1RSSU5HKEVYUFIpKTsKICAgICAgIHJlc3VsdCA9IDA7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9UZXN0cy9RdDRBdXRvZ2VuL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUXQ0QXV0b2dlbi9DTWFrZUxpc3RzLnR4dAppbmRleCA2OGI4ODViLi5lN2YxYWUzIDEwMDY0NAotLS0gYS9UZXN0cy9RdDRBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1F0NEF1dG9nZW4vQ01ha2VMaXN0cy50eHQKQEAgLTcsMyArNyw1IEBACiAKICMgQ29tbW9uIHRlc3RzCiBpbmNsdWRlKCIuLi9RdEF1dG9nZW4vVGVzdHMuY21ha2UiKQorCitzZXQoVEVTVF9CVUlMRF9ESVJTICIke1RFU1RfQlVJTERfRElSU30iIFBBUkVOVF9TQ09QRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0NUF1dG9nZW4vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdDVBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CmluZGV4IDQ5ZDMzY2MuLmRmNDkyN2EgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0NUF1dG9nZW4vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUXQ1QXV0b2dlbi9DTWFrZUxpc3RzLnR4dApAQCAtNCwzICs0LDUgQEAKIAogIyBDb21tb24gdGVzdHMKIGluY2x1ZGUoIi4uL1F0QXV0b2dlbi9UZXN0cy5jbWFrZSIpCisKK3NldChURVNUX0JVSUxEX0RJUlMgIiR7VEVTVF9CVUlMRF9ESVJTfSIgUEFSRU5UX1NDT1BFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTljZmZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw5IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKK3Byb2plY3QoTW9jQ01QMDEwMCkKK2luY2x1ZGUoIi4uL0F1dG9nZW5Db3JlVGVzdC5jbWFrZSIpCisKK3NldChDTUFLRV9BVVRPTU9DIE9OKQorc2V0KENTRCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCisKK2FkZF9zdWJkaXJlY3RvcnkoT0xEKQorYWRkX3N1YmRpcmVjdG9yeShORVcpCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9ORVcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9ORVcvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU0YjMxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL05FVy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMCBORVcpCisKK2FkZF9leGVjdXRhYmxlKG1vY0NNUDAxMDBOZXcKKyAgJHtDU0R9L21haW4uY3BwCisgICR7Q1NEfS9PYmouaGggIyBNYW51YWxseSBpbmNsdWRlIE9iai5oaAorICAke0NTRH0vT2JqLmNwcAorICAke0NTRH0vT2JqMi5jcHAgIyBMZXQgQVVUT01PQyBkZXRlY3QgT2JqMi5oaAorKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1vY0NNUDAxMDBOZXcgJHtRVF9MSUJSQVJJRVN9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT0xEL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT0xEL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTA1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PTEQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzMSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDAgT0xEKQorCisjIEdlbmVyYXRlIG1vYyBmaWxlcyBleHRlcm5hbGx5LgorIyBJZiBBVVRPTU9DIGdlbmVyYXRlcyB0aGUgaGVhZGVyIG1vYyBmaWxlcyBhcyB3ZWxsCisjIChpdCBzaG91bGQgbm90IGluIE9MRCBiZWhhdmlvciksIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIGEKKyMgbXVsdGlwbGUgZGVmaW5pdGlvbiBlcnJvciB3aGVuIGxpbmtpbmcgdGhlIGV4ZWN1dGFibGUuCitxdHhfd3JhcF9jcHAobW9jQ01QMDEwME9sZE1vYyAke0NTRH0vT2JqLmhoICR7Q1NEfS9PYmoyLmhoKQorcXR4X2dlbmVyYXRlX21vYygke0NCRH0vT2JqLmNwcCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vT2JqLm1vYykKK3F0eF9nZW5lcmF0ZV9tb2MoJHtDQkR9L09iajIuY3BwICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9PYmoyLm1vYykKKworIyBNYWtlIHN1cmUgQVVUT0dFTiBmaWxlIHNraXBwaW5nIGlzIGRpc2FibGVkCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoCisgICR7Q1NEfS9PYmouaGgKKyAgJHtDQkR9L09iai5jcHAKKyAgJHtDU0R9L09iajIuaGgKKyAgJHtDQkR9L09iajIuY3BwCisgIFBST1BFUlRJRVMKKyAgU0tJUF9BVVRPR0VOIE9GRgorICBTS0lQX0FVVE9NT0MgT0ZGCispCisKK2FkZF9leGVjdXRhYmxlKG1vY0NNUDAxMDBPbGQKKyAgJHtDU0R9L21haW4uY3BwCisgICR7Q1NEfS9PYmouaGggIyBNYW51YWxseSBpbmNsdWRlIE9iai5oaAorICAke0NTRH0vT2JqLmNwcAorICAke0NTRH0vT2JqMi5jcHAgIyBMZXQgQVVUT01PQyBkZXRlY3QgT2JqMi5oaAorICAke21vY0NNUDAxMDBPbGRNb2N9CispCit0YXJnZXRfbGlua19saWJyYXJpZXMobW9jQ01QMDEwME9sZCAke1FUX0xJQlJBUklFU30pCit0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyhtb2NDTVAwMTAwT2xkIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqLmNwcCBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2ZDBhMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iai5jcHAKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgIk9iai5oaCIKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK2NsYXNzIE9ialByaXZhdGUgOiBwdWJsaWMgUU9iamVjdAoreworICBRX09CSkVDVAorcHVibGljOgorICBPYmpQcml2YXRlKCk7CisgIH5PYmpQcml2YXRlKCk7Cit9OworCitPYmpQcml2YXRlOjpPYmpQcml2YXRlKCkKK3sKK30KKworT2JqUHJpdmF0ZTo6fk9ialByaXZhdGUoKQoreworfQorCitPYmo6Ok9iaigpCisgIDogZChuZXcgT2JqUHJpdmF0ZSkKK3sKK30KKworT2JqOjp+T2JqKCkKK3sKKyAgZGVsZXRlIGQ7Cit9CisKKyNpbmNsdWRlICJPYmoubW9jIgpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqLmhoIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqLmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGJmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmouaGgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBPQkpfSEgKKyNkZWZpbmUgT0JKX0hICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCisvLyBRdCBlbmFibGVkIHByaXZhdGUgY2xhc3MKK2NsYXNzIE9ialByaXZhdGU7CisvLyBRdCBlbmFibGVkIGNsYXNzCitjbGFzcyBPYmogOiBwdWJsaWMgUU9iamVjdAoreworICBRX09CSkVDVAorcHVibGljOgorICBPYmooKTsKKyAgfk9iaigpOworCitwcml2YXRlOgorICBPYmpQcml2YXRlKiBjb25zdCBkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmoyLmNwcCBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iajIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMzU5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmoyLmNwcApAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSAiT2JqMi5oaCIKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK2NsYXNzIE9iajJQcml2YXRlIDogcHVibGljIFFPYmplY3QKK3sKKyAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgT2JqMlByaXZhdGUoKTsKKyAgfk9iajJQcml2YXRlKCk7Cit9OworCitPYmoyUHJpdmF0ZTo6T2JqMlByaXZhdGUoKQoreworfQorCitPYmoyUHJpdmF0ZTo6fk9iajJQcml2YXRlKCkKK3sKK30KKworT2JqMjo6T2JqMigpCisgIDogZChuZXcgT2JqMlByaXZhdGUpCit7Cit9CisKK09iajI6On5PYmoyKCkKK3sKKyAgZGVsZXRlIGQ7Cit9CisKKyNpbmNsdWRlICJPYmoyLm1vYyIKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iajIuaGggYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmoyLmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzRjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmoyLmhoCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgT0JKMl9ISAorI2RlZmluZSBPQkoyX0hICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCisvLyBRdCBlbmFibGVkIHByaXZhdGUgY2xhc3MKK2NsYXNzIE9iajJQcml2YXRlOworLy8gUXQgZW5hYmxlZCBjbGFzcworY2xhc3MgT2JqMiA6IHB1YmxpYyBRT2JqZWN0Cit7CisgIFFfT0JKRUNUCitwdWJsaWM6CisgIE9iajIoKTsKKyAgfk9iajIoKTsKKworcHJpdmF0ZToKKyAgT2JqMlByaXZhdGUqIGNvbnN0IGQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL21haW4uY3BwIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwNjFkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL21haW4uY3BwCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgIk9iai5oaCIKKyNpbmNsdWRlICJPYmoyLmhoIgorCitpbnQgbWFpbihpbnQgYXJndiwgY2hhcioqIGFyZ3MpCit7CisgIE9iaiBvYmo7CisgIE9iajIgb2JqMjsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQS5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQS5ocHAKaW5kZXggZTFmZGYwYi4uMTk4YWU5OCAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUEuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVBLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGUgaW4gc291cmNlIGxvY2FsIGRpcmVjdG9yeQogICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5zdHlsZXMuQSIgRklMRSAiU3R5bGVBLmpzb24iKQotICBBX0NVU1RPTV9NQUNSTyhTb21lQXJnLCAiU3R5bGVBX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKKyAgQV9DVVNUT01fTUFDUk8ob3JnLnN0eWxlcy5BLCAiU3R5bGVBX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKIHB1YmxpYzoKICAgUVN0eWxlKiBjcmVhdGUoY29uc3QgUVN0cmluZyYga2V5KTsKIH07CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQi5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQi5ocHAKaW5kZXggNzU1MGQwYy4uOGNlOGQ3NyAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUIuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVCLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGUgaW4gc291cmNlIGxvY2FsIHN1YmRpcmVjdG9yeQogICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5zdHlsZXMuQiIgRklMRSAianNvbkluL1N0eWxlQi5qc29uIikKLSAgQV9DVVNUT01fTUFDUk8oU29tZUFyZywgImpzb25Jbi9TdHlsZUJfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQorICBBX0NVU1RPTV9NQUNSTyhvcmcuc3R5bGVzLkIsICJqc29uSW4vU3R5bGVCX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKIHB1YmxpYzoKICAgUVN0eWxlKiBjcmVhdGUoY29uc3QgUVN0cmluZyYga2V5KTsKIH07CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQy5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQy5ocHAKaW5kZXggZWM3MWJlYy4uNTMxNzFlMyAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUMuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVDLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGUgaW4gZ2xvYmFsIHJvb3QgZGlyZWN0b3J5CiAgIFFfUExVR0lOX01FVEFEQVRBKElJRCAib3JnLnN0eWxlcy5DIiBGSUxFICJTdHlsZUMuanNvbiIpCi0gIEFfQ1VTVE9NX01BQ1JPKFNvbWVBcmcsICJTdHlsZUNfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQorICBBX0NVU1RPTV9NQUNSTyhvcmcuc3R5bGVzLkMsICJTdHlsZUNfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQogcHVibGljOgogICBRU3R5bGUqIGNyZWF0ZShjb25zdCBRU3RyaW5nJiBrZXkpOwogfTsKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVELmhwcCBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVELmhwcAppbmRleCAzYzA5M2I5Li4yOTY3NGY5IDEwMDY0NAotLS0gYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlRC5ocHAKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUQuaHBwCkBAIC0xMCw3ICsxMCw3IEBACiAgIFFfT0JKRUNUCiAgIC8vIEpzb24gZmlsZSBpbiBnbG9iYWwgc3ViIGRpcmVjdG9yCiAgIFFfUExVR0lOX01FVEFEQVRBKElJRCAib3JnLnN0eWxlcy5EIiBGSUxFICJzdWIvU3R5bGVELmpzb24iKQotICBBX0NVU1RPTV9NQUNSTyhTb21lQXJnLCAic3ViL1N0eWxlRF9DdXN0b20uanNvbiIsIEFub3RoZXJBcmcpCisgIEFfQ1VTVE9NX01BQ1JPKG9yZy5zdHlsZXMuRCwgInN1Yi9TdHlsZURfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQogcHVibGljOgogICBRU3R5bGUqIGNyZWF0ZShjb25zdCBRU3RyaW5nJiBrZXkpOwogfTsKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVFSW5jbHVkZS5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlRUluY2x1ZGUuaHBwCmluZGV4IDVmMTBmYjQuLjczMTgyMjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVFSW5jbHVkZS5ocHAKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUVJbmNsdWRlLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGVzIGluIGdsb2JhbCByb290IGRpcmVjdG9yeQogICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5zdHlsZXMuRSIgRklMRSAiU3R5bGVFLmpzb24iKQotICBBX0NVU1RPTV9NQUNSTyhTb21lQXJnLCAiU3R5bGVFX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKKyAgQV9DVVNUT01fTUFDUk8ob3JnLnN0eWxlcy5FLCAiU3R5bGVFX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKIHB1YmxpYzoKICAgUVN0eWxlKiBjcmVhdGUoY29uc3QgUVN0cmluZyYga2V5KTsKIH07CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1V0aWxpdHlNYWNyb3MuaHBwIGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9VdGlsaXR5TWFjcm9zLmhwcAppbmRleCA1M2E0Mjg0Li4yZjU1OGE4IDEwMDY0NAotLS0gYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1V0aWxpdHlNYWNyb3MuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vVXRpbGl0eU1hY3Jvcy5ocHAKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIFVUSUxJVFlNQUNST1NfSFBQCiAjZGVmaW5lIFVUSUxJVFlNQUNST1NfSFBQCiAKLS8vIEVtcHR5IHRlc3QgbWFjcm8gZGVmaW5pdGlvbgotI2RlZmluZSBBX0NVU1RPTV9NQUNSTyhuYW1lLCBqc29uRmlsZSwgcGx1Z2luUmVnaXN0cmF0aW9ucykKKyNkZWZpbmUgQV9DVVNUT01fTUFDUk8odXJsLCBqc29uRmlsZSwgcGx1Z2luUmVnaXN0cmF0aW9ucykgICAgICAgICAgICAgICAgICAgIFwKKyAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICN1cmwgRklMRSBqc29uRmlsZSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2QyOWEyYS4uNGNlOGRiZCAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1NhbWVOYW1lL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9TYW1lTmFtZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw3ICsxLDEwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2LjApCiBwcm9qZWN0KFNhbWVOYW1lKQogaW5jbHVkZSgiLi4vQXV0b2dlbkd1aVRlc3QuY21ha2UiKQogCisjIFByb2Nlc3MgLmhoIGhlYWRlcnMgaW4gQVVUT01PQworY21ha2VfcG9saWN5KFNFVCBDTVAwMTAwIE5FVykKKwogIyBUZXN0IEFVVE9NT0MgYW5kIEFVVE9SQ0Mgb24gc291cmNlIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZQogIyBidXQgaW4gZGlmZmVyZW50IHN1YmRpcmVjdG9yaWVzCiAKQEAgLTE4LDYgKzIxLDcgQEAKICAgY2NjL2RhdGEucXJjCiAgIGl0ZW0uY3BwCiAgIG9iamVjdC5oCisgIG9iamVjdC5oaAogICBvYmplY3QuaCsrCiAgIG9iamVjdC5ocHAKICAgb2JqZWN0Lmh4eApkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL1NhbWVOYW1lL21haW4uY3BwIGIvVGVzdHMvUXRBdXRvZ2VuL1NhbWVOYW1lL21haW4uY3BwCmluZGV4IDE5YTZmNmQuLjcyNWY0Y2QgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0QXV0b2dlbi9TYW1lTmFtZS9tYWluLmNwcAorKysgYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvbWFpbi5jcHAKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiaXRlbS5ocHAiCiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAib2JqZWN0LmgrKyIKKyNpbmNsdWRlICJvYmplY3QuaGgiCiAjaW5jbHVkZSAib2JqZWN0LmhwcCIKICNpbmNsdWRlICJvYmplY3QuaHh4IgogI2luY2x1ZGUgIm9iamVjdF91cHBlcl9leHQuSCIKQEAgLTIxLDYgKzIyLDcgQEAKICAgOjpjY2M6Okl0ZW0gY2NjX2l0ZW07CiAgIC8vIE9iamVjdCBpbnN0YW5jZXMKICAgOjpPYmplY3RfaCBvYmpfaDsKKyAgOjpPYmplY3RfaGggb2JqX2hoOwogICA6Ok9iamVjdF9ocGxwbCBvYmpfaHBscGw7CiAgIDo6T2JqZWN0X2hwcCBvYmpfaHBwOwogICA6Ok9iamVjdF9oeHggb2JqX2h4eDsKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9TYW1lTmFtZS9vYmplY3QuaGggYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvb2JqZWN0LmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTZmODMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvb2JqZWN0LmhoCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgT0JKRUNUX0hICisjZGVmaW5lIE9CSkVDVF9ISAorCisjaW5jbHVkZSA8UU9iamVjdD4KKworY2xhc3MgT2JqZWN0X2hoIDogcHVibGljIFFPYmplY3QKK3sKKyAgUV9PQkpFQ1QKKyAgUV9TTE9UCisgIHZvaWQgZ28oKXt9OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vVGVzdHMuY21ha2UgYi9UZXN0cy9RdEF1dG9nZW4vVGVzdHMuY21ha2UKaW5kZXggMmIwMDFkNC4uYTE5YTlhZSAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1Rlc3RzLmNtYWtlCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9UZXN0cy5jbWFrZQpAQCAtMzIsNiArMzIsNyBAQAogCiBpZihRVF9URVNUX0FMTE9XX1FUX01BQ1JPUykKICAgQUREX0FVVE9HRU5fVEVTVChNb2NDTVAwMDcxKQorICBBRERfQVVUT0dFTl9URVNUKE1vY0NNUDAxMDApCiAgIEFERF9BVVRPR0VOX1RFU1QoTW9jSW5jbHVkZSkKICAgQUREX0FVVE9HRU5fVEVTVChNb2NJbmNsdWRlU3ltbGluaykKICAgQUREX0FVVE9HRU5fVEVTVChNb2NTa2lwU291cmNlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0LWJ1aWxkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXQtYnVpbGQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdC1idWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdC1idWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MGJhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0LWJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorRVJST1I6IFVuZGVmaW5lZCBzeW1ib2w6IC5BSVhOb3RFeHBvcnRlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzYjE3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXQuY21ha2UKQEAgLTAsMCArMSw3IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMgT0ZGKQorYWRkX2xpYnJhcnkoQUlYRXhwb3J0RXhwbGljaXRMaWIgU0hBUkVEIEFJWEV4cG9ydEV4cGxpY2l0TGliLmMpCithZGRfZXhlY3V0YWJsZShBSVhFeHBvcnRFeHBsaWNpdE1haW4gQUlYRXhwb3J0RXhwbGljaXRNYWluLmMpCit0YXJnZXRfbGlua19vcHRpb25zKEFJWEV4cG9ydEV4cGxpY2l0TGliIFBSSVZBVEUgTElOS0VSOi1iRToke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQUlYRXhwb3J0RXhwbGljaXRMaWIuZXhwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEFJWEV4cG9ydEV4cGxpY2l0TWFpbiBQUklWQVRFIEFJWEV4cG9ydEV4cGxpY2l0TGliKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdExpYi5jIGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdExpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZmQ1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0TGliLmMKQEAgLTAsMCArMSw4IEBACitpbnQgQUlYTm90RXhwb3J0ZWQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CitpbnQgQUlYRXhwb3J0ZWRTeW1ib2wodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0TGliLmV4cCBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXRMaWIuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjdiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0TGliLmV4cApAQCAtMCwwICsxIEBACitBSVhFeHBvcnRlZFN5bWJvbApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdE1haW4uYyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXRNYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5YzhlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXRNYWluLmMKQEAgLTAsMCArMSw3IEBACitleHRlcm4gaW50IEFJWE5vdEV4cG9ydGVkKHZvaWQpOworZXh0ZXJuIGludCBBSVhFeHBvcnRlZFN5bWJvbCh2b2lkKTsKKworaW50IG1haW4odm9pZCkKK3sKKyAgcmV0dXJuIEFJWE5vdEV4cG9ydGVkKCkgKyBBSVhFeHBvcnRlZFN5bWJvbCgpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2YzliZTRiLi43NTEzMGYyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNTUsMyArNTUsMTQgQEAKICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIlwiJHtFWFBPUlRTX0RFRn1cIiBoYXMgYmVlbiB1cGRhdGVkLiIpCiAgIGVuZGlmKCkKIGVuZGlmKCkKKworZnVuY3Rpb24ocnVuX0FJWEV4cG9ydEV4cGxpY2l0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0FJWEV4cG90RXhwbGljaXQtYnVpbGQiKQorICBydW5fY21ha2UoQUlYRXhwb3J0RXhwbGljaXQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSBUUlVFKQorICBydW5fY21ha2VfY29tbWFuZChBSVhFeHBvcnRFeHBsaWNpdC1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKK2VuZGZ1bmN0aW9uKCkKK2lmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBSVgiKQorICBydW5fQUlYRXhwb3J0RXhwbGljaXQoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzI2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLXN0ZG91dC50eHQKQEAgLTAsMCArMSw0IEBACistLSBUaGUgQVNNIGNvbXBpbGVyIGlkZW50aWZpY2F0aW9uIGlzIEdOVQorLS0gRm91bmQgYXNzZW1ibGVyOiBbXgorXSovYXMoXC5leGUpPworLS0gQ01BS0VfQVNNX0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSD0nR05VIGFzc2VtYmxlcicKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTIxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK2VuYWJsZV9sYW5ndWFnZShBU00pCisKKyMgVmFsaWRhdGUgdW5kb2N1bWVudGVkIGltcGxlbWVudGF0aW9uIGRldGFpbC4KK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0g9JyR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSURfVkVORE9SX01BVENIfSciKQorCithZGRfbGlicmFyeShnbnVfYXMgU1RBVElDIGdudV9hcy5zKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZ251X2FzIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQorCitmaWxlKEdFTkVSQVRFIE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY2hlY2stJDxMT1dFUl9DQVNFOiQ8Q09ORklHPj4uY21ha2UgQ09OVEVOVCAiCitzZXQoY2hlY2tfcGFpcnMKKyAgXCIkPFRBUkdFVF9GSUxFOmdudV9hcz58JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2dudV9hcy5pbmNcIgorICApCisiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy5zdGVwMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNWU5NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDEuY21ha2UKQEAgLTAsMCArMSBAQAorZmlsZShXUklURSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dudV9hcy5pbmMiICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy5zdGVwMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNWU5NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDIuY21ha2UKQEAgLTAsMCArMSBAQAorZmlsZShXUklURSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dudV9hcy5pbmMiICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMTRhZTI0My4uNzUzNDE3ZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xMDMsMyArMTAzLDggQEAKIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBTVFJFUVVBTCAiWGNvZGUiKQogICBydW5fUmVHZW5lcmF0aW9uKHJlZ2VuZXJhdGUtcHJvamVjdCkKIGVuZGlmKCkKKworaWYoQ01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTKQorICBzZXQoRU5We0FTTX0gIiR7Q01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTfSIpCisgIHJ1bl9CdWlsZERlcGVuZHMoR05VLUFTKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL2dudV9hcy5zIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL2dudV9hcy5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTdkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvZ251X2FzLnMKQEAgLTAsMCArMSBAQAorLmluY2x1ZGUgImdudV9hcy5pbmMiCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDM3L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMzcvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDk4Mjc0ZjAuLjU5NTIyNzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMzcvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMzcvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDUgKzEsMjQgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJeTmluamEiKQorICAjIERldGVjdCBuaW5qYSB2ZXJzaW9uIHNvIHdlIGtub3cgd2hhdCB0ZXN0cyBjYW4gYmUgc3VwcG9ydGVkLgorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAiJHtSdW5DTWFrZV9NQUtFX1BST0dSQU19IiAtLXZlcnNpb24KKyAgICBPVVRQVVRfVkFSSUFCTEUgbmluamFfb3V0CisgICAgRVJST1JfVkFSSUFCTEUgbmluamFfb3V0CisgICAgUkVTVUxUX1ZBUklBQkxFIG5pbmphX3JlcworICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisgICAgKQorICBpZihuaW5qYV9yZXMgRVFVQUwgMCBBTkQgIngke25pbmphX291dH0iIE1BVENIRVMgIl54WzAtOV0rXFwuWzAtOV0rIikKKyAgICBzZXQobmluamFfdmVyc2lvbiAiJHtuaW5qYV9vdXR9IikKKyAgICBtZXNzYWdlKFNUQVRVUyAibmluamEgdmVyc2lvbjogJHtuaW5qYV92ZXJzaW9ufSIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiduaW5qYSAtLXZlcnNpb24nIHJlcG9ydGVkOlxuJHtuaW5qYV9vdXR9IikKKyAgZW5kaWYoKQorZWxzZSgpCisgIHNldChuaW5qYV92ZXJzaW9uICIiKQorZW5kaWYoKQorCiBydW5fY21ha2UoQ01QMDAzNy1PTEQtc3BhY2UpCiBydW5fY21ha2UoQ01QMDAzNy1ORVctc3BhY2UpCiBydW5fY21ha2UoQ01QMDAzNy1XQVJOLXNwYWNlKQpAQCAtOSw4ICsyOCwxMCBAQAogICBydW5fY21ha2UoQ01QMDAzNy1XQVJOLWNvbG9uKQogZW5kaWYoKQogCi1ydW5fY21ha2UoQ01QMDAzNy1XQVJOLXJlc2VydmVkKQotcnVuX2NtYWtlKENNUDAwMzctT0xELXJlc2VydmVkKQoraWYoTk9UIG5pbmphX3ZlcnNpb24gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEuMTApCisgIHJ1bl9jbWFrZShDTVAwMDM3LVdBUk4tcmVzZXJ2ZWQpCisgIHJ1bl9jbWFrZShDTVAwMDM3LU9MRC1yZXNlcnZlZCkKK2VuZGlmKCkKIHJ1bl9jbWFrZShDTVAwMDM3LU5FVy1yZXNlcnZlZCkKIAogcnVuX2NtYWtlKE5FVy1jb25kKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDA2OC9DTVAwMDY4LU9MRC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA2OC9DTVAwMDY4LU9MRC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzYxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDY4L0NNUDAwNjgtT0xELXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMCBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01QMDA2OC1PTEQuY21ha2U6WzAtOV0rIFwoY21ha2VfcG9saWN5XCk6CisgIFRoZSBPTEQgYmVoYXZpb3IgZm9yIHBvbGljeSBDTVAwMDY4IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24KKyAgb2YgQ01ha2UuCisKKyAgVGhlIGNtYWtlLXBvbGljaWVzXCg3XCkgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMgb2YgYWxsCisgIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IGEgcG9saWN5IHNob3VsZCBiZSBzZXQgdG8gT0xEIG9ubHkgdW5kZXIKKyAgc3BlY2lmaWMgc2hvcnQtdGVybSBjaXJjdW1zdGFuY2VzLiAgUHJvamVjdHMgc2hvdWxkIGJlIHBvcnRlZCB0byB0aGUgTkVXCisgIGJlaGF2aW9yIGFuZCBub3QgcmVseSBvbiBzZXR0aW5nIGEgcG9saWN5IHRvIE9MRC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNjkvQ01QMDA2OS1PTEQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNjkvQ01QMDA2OS1PTEQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTFhNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA2OS9DTVAwMDY5LU9MRC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNUDAwNjktT0xELmNtYWtlOlswLTldKyBcKGNtYWtlX3BvbGljeVwpOgorICBUaGUgT0xEIGJlaGF2aW9yIGZvciBwb2xpY3kgQ01QMDA2OSB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uCisgIG9mIENNYWtlLgorCisgIFRoZSBjbWFrZS1wb2xpY2llc1woN1wpIG1hbnVhbCBleHBsYWlucyB0aGF0IHRoZSBPTEQgYmVoYXZpb3JzIG9mIGFsbAorICBwb2xpY2llcyBhcmUgZGVwcmVjYXRlZCBhbmQgdGhhdCBhIHBvbGljeSBzaG91bGQgYmUgc2V0IHRvIE9MRCBvbmx5IHVuZGVyCisgIHNwZWNpZmljIHNob3J0LXRlcm0gY2lyY3Vtc3RhbmNlcy4gIFByb2plY3RzIHNob3VsZCBiZSBwb3J0ZWQgdG8gdGhlIE5FVworICBiZWhhdmlvciBhbmQgbm90IHJlbHkgb24gc2V0dGluZyBhIHBvbGljeSB0byBPTEQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItQ29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLUNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWZkYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLUNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworbWFya19hc19hZHZhbmNlZChDTVAwMTAyX1RFU1RfVkFSSUFCTEUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGY3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLU5FVy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACisKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMiBORVcpCisKK2luY2x1ZGUgKENNUDAxMDItQ29tbW9uLmNtYWtlKQorZ2V0X3Byb3BlcnR5KGlzX3R5cGVfc2V0IENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICBQUk9QRVJUWSBUWVBFIFNFVCkKK2lmIChpc190eXBlX3NldCkKKyAgZ2V0X3Byb3BlcnR5KHR5cGUgQ0FDSEUgQ01QMDEwMl9URVNUX1ZBUklBQkxFCisgICAgUFJPUEVSVFkgVFlQRSkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJUaGVyZSBpcyBhIGNhY2hlIGVudHJ5IGZvciBhbiB1bmRlZmluZWQgdmFyaWFibGUgYWZ0ZXIgIgorICAgICJgbWFya19hc19hZHZhbmNlZGAuIikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItT0xELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLU9MRC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzIwZGQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLU9MRC5jbWFrZQpAQCAtMCwwICsxLDE4IEBACisKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMiBPTEQpCisKK2luY2x1ZGUgKENNUDAxMDItQ29tbW9uLmNtYWtlKQorZ2V0X3Byb3BlcnR5KGlzX3R5cGVfc2V0IENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICBQUk9QRVJUWSBUWVBFIFNFVCkKK2lmIChOT1QgaXNfdHlwZV9zZXQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlcmUgaXMgYSBjYWNoZSBlbnRyeSBmb3IgYW4gdW5kZWZpbmVkIHZhcmlhYmxlIGFmdGVyICIKKyAgICAiYG1hcmtfYXNfYWR2YW5jZWRgLiIpCitlbmRpZiAoKQorZ2V0X3Byb3BlcnR5KHR5cGUgQ0FDSEUgQ01QMDEwMl9URVNUX1ZBUklBQkxFCisgIFBST1BFUlRZIFRZUEUpCitpZiAoTk9UIHR5cGUgU1RSRVFVQUwgIlVOSU5JVElBTElaRUQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZSBjYWNoZSB0eXBlIGZvciBDTVAwMTAyX1RFU1RfVkFSSUFCTEUgaXMgbm90ICIKKyAgICAiVU5JTklUSUFMSVpFRCIpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLVdBUk4tRGVmYXVsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1XQVJOLURlZmF1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlYmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1XQVJOLURlZmF1bHQuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorCitpbmNsdWRlIChDTVAwMTAyLUNvbW1vbi5jbWFrZSkKK2dldF9wcm9wZXJ0eShpc190eXBlX3NldCBDQUNIRSBDTVAwMTAyX1RFU1RfVkFSSUFCTEUKKyAgUFJPUEVSVFkgVFlQRSBTRVQpCitpZiAoTk9UIGlzX3R5cGVfc2V0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZXJlIGlzIGEgY2FjaGUgZW50cnkgZm9yIGFuIHVuZGVmaW5lZCB2YXJpYWJsZSBhZnRlciAiCisgICAgImBtYXJrX2FzX2FkdmFuY2VkYC4iKQorZW5kaWYgKCkKK2dldF9wcm9wZXJ0eSh0eXBlIENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICBQUk9QRVJUWSBUWVBFKQoraWYgKE5PVCB0eXBlIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJUaGUgY2FjaGUgdHlwZSBmb3IgQ01QMDEwMl9URVNUX1ZBUklBQkxFIGlzIG5vdCAiCisgICAgIlVOSU5JVElBTElaRUQiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1XQVJOLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTZlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBDTVAwMTAyLUNvbW1vbi5jbWFrZToyIFwobWFya19hc19hZHZhbmNlZFwpOgorICBQb2xpY3kgQ01QMDEwMiBpcyBub3Qgc2V0OiBUaGUgdmFyaWFibGUgbmFtZWQgIkNNUDAxMDJfVEVTVF9WQVJJQUJMRSIgaXMKKyAgbm90IGluIHRoZSBjYWNoZS4gIFRoaXMgcmVzdWx0cyBpbiBhbiBlbXB0eSBjYWNoZSBlbnRyeSB3aGljaCBpcyBubyBsb25nZXIKKyAgY3JlYXRlZCB3aGVuIHBvbGljeSBDTVAwMTAyIGlzIHNldCB0byBORVcuICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kKKyAgQ01QMDEwMiIgZm9yIHBvbGljeSBkZXRhaWxzLiAgVXNlIHRoZSBjbWFrZV9wb2xpY3kgY29tbWFuZCB0byBzZXQgdGhlCisgIHBvbGljeSBhbmQgc3VwcHJlc3MgdGhpcyB3YXJuaW5nLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01QMDEwMi1XQVJOLmNtYWtlOjQgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1XQVJOLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YTQ1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi5jbWFrZQpAQCAtMCwwICsxLDE4IEBACisKK3NldChDTUFLRV9QT0xJQ1lfV0FSTklOR19DTVAwMTAyIDEpCisKK2luY2x1ZGUgKENNUDAxMDItQ29tbW9uLmNtYWtlKQorZ2V0X3Byb3BlcnR5KGlzX3R5cGVfc2V0IENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICBQUk9QRVJUWSBUWVBFIFNFVCkKK2lmIChOT1QgaXNfdHlwZV9zZXQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlcmUgaXMgYSBjYWNoZSBlbnRyeSBmb3IgYW4gdW5kZWZpbmVkIHZhcmlhYmxlIGFmdGVyICIKKyAgICAiYG1hcmtfYXNfYWR2YW5jZWRgLiIpCitlbmRpZiAoKQorZ2V0X3Byb3BlcnR5KHR5cGUgQ0FDSEUgQ01QMDEwMl9URVNUX1ZBUklBQkxFCisgIFBST1BFUlRZIFRZUEUpCitpZiAoTk9UIHR5cGUgU1RSRVFVQUwgIlVOSU5JVElBTElaRUQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZSBjYWNoZSB0eXBlIGZvciBDTVAwMTAyX1RFU1RfVkFSSUFCTEUgaXMgbm90ICIKKyAgICAiVU5JTklUSUFMSVpFRCIpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMTYzYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWRmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShDTVAwMTAyLU9MRCkKK3J1bl9jbWFrZShDTVAwMTAyLU5FVykKK3J1bl9jbWFrZShDTVAwMTAyLVdBUk4pCitydW5fY21ha2UoQ01QMDEwMi1XQVJOLURlZmF1bHQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CmluZGV4IDU4MWEzOWUuLjJhNGFmM2UgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTUsNiArMTE1LDcgQEAKIGVuZGlmKCkKIGFkZF9SdW5DTWFrZV90ZXN0KENNUDAwNjkpCiBhZGRfUnVuQ01ha2VfdGVzdChDTVAwMDgxKQorYWRkX1J1bkNNYWtlX3Rlc3QoQ01QMDEwMikKIAogIyBUaGUgdGVzdCBmb3IgUG9saWN5IDY1IHJlcXVpcmVzIHRoZSB1c2Ugb2YgdGhlCiAjIENNQUtFX1NIQVJFRF9MSUJSQVJZX0xJTktfQ1hYX0ZMQUdTIHZhcmlhYmxlLCB3aGljaCBib3RoIHRoZSBWUyBhbmQgWGNvZGUKQEAgLTEyNSw3ICsxMjYsNyBAQAogaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIk1ha2UiKQogICBhZGRfUnVuQ01ha2VfdGVzdChNYWtlIC1ETUFLRV9JU19HTlU9JHtNQUtFX0lTX0dOVX0pCiBlbmRpZigpCi1pZihDTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIikKK2lmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIpCiAgIHNldChOaW5qYV9BUkdTCiAgICAgLURDTUFLRV9DX09VVFBVVF9FWFRFTlNJT049JHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059CiAgICAgLURDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVg9JHtDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVh9CkBAIC0xMzQsNiArMTM1LDE2IEBACiAgICAgbGlzdChBUFBFTkQgTmluamFfQVJHUyAtRFRFU1RfRm9ydHJhbj0xKQogICBlbmRpZigpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KE5pbmphKQorICBzZXQoTmluamFNdWx0aUNvbmZpZ19BUkdTCisgICAgLURDWUdXSU49JHtDWUdXSU59CisgICAgKQorICBpZihDTWFrZV9URVNUX1F0NSBBTkQgUXQ1Q29yZV9GT1VORCkKKyAgICBsaXN0KEFQUEVORCBOaW5qYU11bHRpQ29uZmlnX0FSR1MgLURDTWFrZV9URVNUX1F0NT0xKQorICBlbmRpZigpCisgIGlmKERFRklORUQgQ01ha2VfVEVTVF9DVURBKQorICAgIGxpc3QoQVBQRU5EIE5pbmphTXVsdGlDb25maWdfQVJHUyAtRENNYWtlX1RFU1RfQ1VEQT0ke0NNYWtlX1RFU1RfQ1VEQX0pCisgIGVuZGlmKCkKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoTmluamFNdWx0aUNvbmZpZykKIGVuZGlmKCkKIGFkZF9SdW5DTWFrZV90ZXN0KENUZXN0KQogCkBAIC0xNTgsNyArMTY5LDIwIEBACiAgIHNldChhdXRvZ2VuX3dpdGhfcXQ1IFRSVUUpCiBlbmRpZiAoKQogYWRkX1J1bkNNYWtlX3Rlc3QoQXV0b2dlbiAtRHdpdGhfcXQ1PSR7YXV0b2dlbl93aXRoX3F0NX0pCi1hZGRfUnVuQ01ha2VfdGVzdChCdWlsZERlcGVuZHMpCitpZihOT1QgREVGSU5FRCBDTWFrZV9URVNUX0J1aWxkRGVwZW5kc19HTlVfQVMKKyAgICBBTkQgQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIgorICAgIEFORCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiXk5pbmphIgorICAgICkKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfQ19DT01QSUxFUn0iIC1wcmludC1wcm9nLW5hbWU9YXMKKyAgICBSRVNVTFRfVkFSSUFCTEUgX2dudV9yZXMKKyAgICBPVVRQVVRfVkFSSUFCTEUgX2dudV9hcyBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSBFUlJPUl9RVUlFVCkKKyAgaWYoX2dudV9yZXMgRVFVQUwgMCBBTkQgX2dudV9hcykKKyAgICBzZXQoQ01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTICIke19nbnVfYXN9IikKKyAgZW5kaWYoKQorZW5kaWYoKQorYWRkX1J1bkNNYWtlX3Rlc3QoQnVpbGREZXBlbmRzCisgIC1EQ01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTPSR7Q01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTfQorICApCiBpZihVTklYIEFORCAiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJVbml4IE1ha2VmaWxlc3xOaW5qYSIpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KEJ5cHJvZHVjdHMpCiBlbmRpZigpCkBAIC0xNzcsNiArMjAxLDcgQEAKIGFkZF9SdW5DTWFrZV90ZXN0KEZpbmRMdWEpCiBhZGRfUnVuQ01ha2VfdGVzdChGaW5kT3BlbkdMKQogaWYoQ01ha2VfVEVTVF9Vc2VTV0lHKQorICBhZGRfUnVuQ01ha2VfdGVzdChGaW5kU1dJRykKICAgYWRkX1J1bkNNYWtlX3Rlc3QoVXNlU1dJRyAtRENNYWtlX1RFU1RfRmluZFB5dGhvbj0ke0NNYWtlX1RFU1RfRmluZFB5dGhvbn0pCiBlbmRpZigpCiBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJXYXRjb20iKQpAQCAtMTg5LDYgKzIxNCw3IEBACiBhZGRfUnVuQ01ha2VfdGVzdChHZXRQcmVyZXF1aXNpdGVzKQogYWRkX1J1bkNNYWtlX3Rlc3QoR05VSW5zdGFsbERpcnMgLURTWVNURU1fTkFNRT0ke0NNQUtFX1NZU1RFTV9OQU1FfSkKIGFkZF9SdW5DTWFrZV90ZXN0KEdvb2dsZVRlc3QpICMgTm90ZTogZG9lcyBub3QgYWN0dWFsbHkgZGVwZW5kIG9uIEdvb2dsZSBUZXN0CithZGRfUnVuQ01ha2VfdGVzdChHcmFwaHZpeikKIGFkZF9SdW5DTWFrZV90ZXN0KFRhcmdldFByb3BlcnR5R2VuZXJhdG9yRXhwcmVzc2lvbnMpCiBhZGRfUnVuQ01ha2VfdGVzdChMYW5ndWFnZXMpCiBhZGRfUnVuQ01ha2VfdGVzdChMaW5rU3RhdGljKQpAQCAtMjA5LDYgKzIzNSw3IEBACiBhZGRfUnVuQ01ha2VfdGVzdChTd2lmdCAtRENNQUtFX1N3aWZ0X0NPTVBJTEVSPSR7Q01BS0VfU3dpZnRfQ09NUElMRVJ9KQogYWRkX1J1bkNNYWtlX3Rlc3QoVGFyZ2V0T2JqZWN0cykKIGFkZF9SdW5DTWFrZV90ZXN0KFRhcmdldFNvdXJjZXMpCithZGRfUnVuQ01ha2VfdGVzdChUYXJnZXRQcm9wZXJ0aWVzKQogYWRkX1J1bkNNYWtlX3Rlc3QoVG9vbGNoYWluRmlsZSkKIGFkZF9SdW5DTWFrZV90ZXN0KGZpbmRfZGVwZW5kZW5jeSkKIGFkZF9SdW5DTWFrZV90ZXN0KENvbXBpbGVEZWZpbml0aW9ucykKQEAgLTI3MSw2ICsyOTgsNyBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoZmluZF9wYXRoKQogYWRkX1J1bkNNYWtlX3Rlc3QoZmluZF9wcm9ncmFtIC1EQ01BS0VfU1lTVEVNX05BTUU9JHtDTUFLRV9TWVNURU1fTkFNRX0pCiBhZGRfUnVuQ01ha2VfdGVzdChmb3JlYWNoKQorYWRkX1J1bkNNYWtlX3Rlc3QoZnVuY3Rpb24pCiBhZGRfUnVuQ01ha2VfdGVzdChnZXRfZmlsZW5hbWVfY29tcG9uZW50KQogYWRkX1J1bkNNYWtlX3Rlc3QoZ2V0X3Byb3BlcnR5KQogYWRkX1J1bkNNYWtlX3Rlc3QoaWYpCkBAIC0yNzgsNiArMzA2LDcgQEAKIGFkZF9SdW5DTWFrZV90ZXN0KGluY2x1ZGVfZGlyZWN0b3JpZXMpCiBhZGRfUnVuQ01ha2VfdGVzdChpbmNsdWRlX2d1YXJkKQogYWRkX1J1bkNNYWtlX3Rlc3QobGlzdCkKK2FkZF9SdW5DTWFrZV90ZXN0KGxvYWRfY2FjaGUpCiBhZGRfUnVuQ01ha2VfdGVzdChtYXRoKQogYWRkX1J1bkNNYWtlX3Rlc3QobWVzc2FnZSkKIGFkZF9SdW5DTWFrZV90ZXN0KG9wdGlvbikKQEAgLTI4OSw2ICszMTgsMTAgQEAKIGFkZF9SdW5DTWFrZV90ZXN0KHN0cmluZykKIGFkZF9SdW5DTWFrZV90ZXN0KHRlc3RfaW5jbHVkZV9kaXJzKQogYWRkX1J1bkNNYWtlX3Rlc3QoQnVuZGxlVXRpbGl0aWVzKQoraWYoQVBQTEUpCisgIGFkZF9SdW5DTWFrZV90ZXN0KElOU1RBTExfTkFNRV9ESVIpCisgIGFkZF9SdW5DTWFrZV90ZXN0KE1hY09TVmVyc2lvbnMpCitlbmRpZigpCiAKIGZ1bmN0aW9uKGFkZF9SdW5DTWFrZV90ZXN0X3RyeV9jb21waWxlKQogICBpZihDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjkuMjAxNzA5MDcgQU5EICJ4JHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQpAQCAtMzM1LDYgKzM2OCw3IEBACiBhZGRfUnVuQ01ha2VfdGVzdChpbnRlcmZhY2VfbGlicmFyeSkKIGFkZF9SdW5DTWFrZV90ZXN0KG5vX2luc3RhbGxfcHJlZml4KQogYWRkX1J1bkNNYWtlX3Rlc3QoY29uZmlndXJlX2ZpbGUpCithZGRfUnVuQ01ha2VfdGVzdChDVGVzdFRpbWVvdXQgLURUSU1FT1VUPSR7Q1Rlc3RUZXN0VGltZW91dF9USU1FfSkKIGFkZF9SdW5DTWFrZV90ZXN0KENUZXN0VGltZW91dEFmdGVyTWF0Y2gpCiAKICMgY3RyZXNhbGxvYyBsaW5rcyBhZ2FpbnN0IENNYWtlTGliIGFuZCBDVGVzdExpYiwgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgYnVpbHQKQEAgLTQyNyw2ICs0NjEsOCBAQAogICBhZGRfUnVuQ01ha2VfdGVzdChGcmFtZXdvcmspCiBlbmRpZigpCiAKK2FkZF9SdW5DTWFrZV90ZXN0KEZpbGVfQXJjaGl2ZSkKK2FkZF9SdW5DTWFrZV90ZXN0KEZpbGVfQ29uZmlndXJlKQogYWRkX1J1bkNNYWtlX3Rlc3QoRmlsZV9HZW5lcmF0ZSkKIGFkZF9SdW5DTWFrZV90ZXN0KEV4cG9ydFdpdGhvdXRMYW5ndWFnZSkKIGFkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2RpcmVjdG9yaWVzKQpAQCAtNDM2LDEyICs0NzIsMTIgQEAKIAogYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfY29tcGlsZV9mZWF0dXJlcykKLWFkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9jb21waWxlX29wdGlvbnMpCithZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfY29tcGlsZV9vcHRpb25zIC1EQ01BS0VfQ19DT01QSUxFUl9JRD0ke0NNQUtFX0NfQ09NUElMRVJfSUR9KQogYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfc291cmNlcykKIGFkZF9SdW5DTWFrZV90ZXN0KENoZWNrTW9kdWxlcykKIGFkZF9SdW5DTWFrZV90ZXN0KENoZWNrSVBPU3VwcG9ydGVkKQotYWRkX1J1bkNNYWtlX3Rlc3QoQ29tbWFuZExpbmUgLURDTUFLRV9TWVNURU1fTkFNRT0ke0NNQUtFX1NZU1RFTV9OQU1FfSkKK2FkZF9SdW5DTWFrZV90ZXN0KENvbW1hbmRMaW5lIC1EQ01BS0VfU1lTVEVNX05BTUU9JHtDTUFLRV9TWVNURU1fTkFNRX0gLURDWUdXSU49JHtDWUdXSU59IC1EUFlUSE9OX0VYRUNVVEFCTEU9JHtQWVRIT05fRVhFQ1VUQUJMRX0pCiBhZGRfUnVuQ01ha2VfdGVzdChDb21tYW5kTGluZVRhcikKIAogaWYoQ01BS0VfUExBVEZPUk1fTk9fVkVSU0lPTkVEX1NPTkFNRSBPUiAoTk9UIENNQUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9GTEFHIEFORCBOT1QgQ01BS0VfU0hBUkVEX0xJQlJBUllfU09OQU1FX0NfRkxBRykpCkBAIC00NTQsNyArNDkwLDkgQEAKICAgLURDTUFLRV9TSEFSRURfTElCUkFSWV9SUEFUSF9PUklHSU5fVE9LRU49JHtDTUFLRV9TSEFSRURfTElCUkFSWV9SUEFUSF9PUklHSU5fVE9LRU59CiAgIC1EQ01BS0VfU1lTVEVNX05BTUU9JHtDTUFLRV9TWVNURU1fTkFNRX0KICAgLURDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FX0NfRkxBRz0ke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfQ19GTEFHfQotICAtRENNQUtFX0VYRUNVVEFCTEVfRk9STUFUPSR7Q01BS0VfRVhFQ1VUQUJMRV9GT1JNQVR9KQorICAtRENNQUtFX0VYRUNVVEFCTEVfRk9STUFUPSR7Q01BS0VfRVhFQ1VUQUJMRV9GT1JNQVR9CisgIC1EQ01ha2VfSU5TVEFMTF9OQU1FX1RPT0xfQlVHPSR7Q01ha2VfSU5TVEFMTF9OQU1FX1RPT0xfQlVHfQorICApCiAKIGFkZF9SdW5DTWFrZV90ZXN0KENQYWNrQ29tbWFuZExpbmUpCiBhZGRfUnVuQ01ha2VfdGVzdChDUGFja0NvbmZpZykKQEAgLTU1NCw2ICs1OTIsNyBAQAogICBERUIuTUQ1U1VNUwogICBERUIuREVCX1BBQ0tBR0VfVkVSU0lPTl9CQUNLX0NPTVBBVElCSUxJVFkKICAgREVCLkRFQl9ERVNDUklQVElPTgorICBERUIuUFJPSkVDVF9NRVRBCiAKICAgUlBNLkNVU1RPTV9CSU5BUllfU1BFQ19GSUxFCiAgIFJQTS5DVVNUT01fTkFNRVMKQEAgLTU3NCw2ICs2MTMsNyBAQAogICBSUE0uU1VHR0VTVFMKICAgUlBNLlNZTUxJTktTCiAgIFJQTS5VU0VSX0ZJTEVMSVNUCisgIFJQTS5QUk9KRUNUX01FVEEKIAogICA3WgogICBUQloyCkBAIC01ODQsMTAgKzYyNCwxNiBAQAogICBTVEdaCiAgIEV4dGVybmFsCiAgICkKK2lmKEFQUExFKQorICBsaXN0KEFQUEVORCBjcGFja190ZXN0cyBEcmFnTkRyb3ApCitlbmRpZigpCiBhZGRfUnVuQ01ha2VfdGVzdF9ncm91cChDUGFjayAiJHtjcGFja190ZXN0c30iKQogIyBhZGQgYSB0ZXN0IHRvIG1ha2Ugc3VyZSBzeW1ib2xzIGFyZSBleHBvcnRlZCBmcm9tIGEgc2hhcmVkIGxpYnJhcnkKICMgZm9yIE1TVkMgY29tcGlsZXJzIENNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTIHByb3BlcnR5IGlzIHVzZWQKLWFkZF9SdW5DTWFrZV90ZXN0KEF1dG9FeHBvcnREbGwgLURDTUFLRV9DWFhfQ09NUElMRVJfSUQ9JHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9KQorYWRkX1J1bkNNYWtlX3Rlc3QoQXV0b0V4cG9ydERsbAorICAtRENNQUtFX1NZU1RFTV9OQU1FPSR7Q01BS0VfU1lTVEVNX05BTUV9CisgIC1EQ01BS0VfQ1hYX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfQorICApCiAKIGFkZF9SdW5DTWFrZV90ZXN0KEFuZHJvaWRNSykKIApAQCAtNjE5LDUgKzY2NSw3IEBACiAKIGFkZF9SdW5DTWFrZV90ZXN0KCJDVGVzdENvbW1hbmRFeHBhbmRMaXN0cyIpCiAKLWFkZF9SdW5DTWFrZV90ZXN0KFByZWNvbXBpbGVIZWFkZXJzKQorYWRkX1J1bkNNYWtlX3Rlc3QoUHJlY29tcGlsZUhlYWRlcnMgLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0pCiBhZGRfUnVuQ01ha2VfdGVzdCgiVW5pdHlCdWlsZCIpCisKK2FkZF9SdW5DTWFrZV90ZXN0KGNtYWtlX2NvbW1hbmQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9DUGFja1Rlc3RIZWxwZXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svQ1BhY2tUZXN0SGVscGVycy5jbWFrZQppbmRleCBmNjVjYjlkLi4yNGY1NGM2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9DUGFja1Rlc3RIZWxwZXJzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0NQYWNrVGVzdEhlbHBlcnMuY21ha2UKQEAgLTc1LDcgKzc1LDcgQEAKICAgICBpZihwYWNrYWdlX3RhcmdldCkKICAgICAgIHNldChjcGFja19jb21tYW5kXyAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIgLS10YXJnZXQgcGFja2FnZSkKICAgICBlbHNlKCkKLSAgICAgIHNldChjcGFja19jb21tYW5kXyAke0NNQUtFX0NQQUNLX0NPTU1BTkR9ICR7cGFja19wYXJhbXNffSkKKyAgICAgIHNldChjcGFja19jb21tYW5kXyAke0NNQUtFX0NQQUNLX0NPTU1BTkR9ICR7cGFja19wYXJhbXNffSAtQyBEZWJ1ZykKICAgICBlbmRpZigpCiAKICAgICAjIGV4ZWN1dGUgY3BhY2sKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9IZWxwZXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svRHJhZ05Ecm9wL0hlbHBlcnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzZTU5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9IZWxwZXJzLmNtYWtlCkBAIC0wLDAgKzEsNTQgQEAKK3NldChBTExfRklMRVNfR0xPQiAiKi5kbWciKQorCitmdW5jdGlvbihnZXRQYWNrYWdlQ29udGVudCBGSUxFIFJFU1VMVF9WQVIpCisgIGdldF9maWxlbmFtZV9jb21wb25lbnQocGF0aF8gIiR7RklMRX0iIERJUkVDVE9SWSkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtwYXRoX30vY29udGVudCIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7cGF0aF99L2NvbnRlbnQiKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0hESVVUSUxfRVhFQ1VUQUJMRX0gYXR0YWNoIC1tb3VudHJvb3QgJHtwYXRoX30vY29udGVudCAtbm9icm93c2UgJHtGSUxFfQorICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBhdHRhY2hfcmVzdWx0XworICAgICAgICAgIEVSUk9SX1ZBUklBQkxFIGF0dGFjaF9lcnJvcl8KKyAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworICBpZihhdHRhY2hfcmVzdWx0XykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gYXR0YWNoIERNRzogJyR7YXR0YWNoX3Jlc3VsdF99JzsiCisgICAgICAgICAgIiAnJHthdHRhY2hfZXJyb3JffScuIikKKyAgZW5kaWYoKQorCisgIGZpbGUoR0xPQl9SRUNVUlNFIHBhY2thZ2VfY29udGVudF8gTElTVF9ESVJFQ1RPUklFUyB0cnVlIFJFTEFUSVZFCisgICAgICAiJHtwYXRoX30vY29udGVudCIgIiR7cGF0aF99L2NvbnRlbnQvKiIpCisgICMgU29tZSB2ZXJzaW9ucyBvZiBtYWNPUyBoYXZlIC5UcmFzaGVzLCBvdGhlcnMgZG8gbm90LgorICBsaXN0KEZJTFRFUiBwYWNrYWdlX2NvbnRlbnRfIEVYQ0xVREUgUkVHRVggIi8uVHJhc2hlcyQiKQorICBzZXQoJHtSRVNVTFRfVkFSfSAiJHtwYWNrYWdlX2NvbnRlbnRffSIgUEFSRU5UX1NDT1BFKQorCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7SERJVVRJTF9FWEVDVVRBQkxFfSBkZXRhY2ggJHtwYXRoX30vY29udGVudC92b2x1bWUtbmFtZQorICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBkZXRhY2hfcmVzdWx0XworICAgICAgICAgIEVSUk9SX1ZBUklBQkxFIGRldGFjaF9lcnJvcl8KKyAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworICBpZihkZXRhY2hfcmVzdWx0XykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZGV0YWNoIERNRzogJyR7ZGV0YWNoX3Jlc3VsdF99JzsiCisgICAgICAgICAgIiAnJHtkZXRhY2hfZXJyb3JffScuIikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihnZXRQYWNrYWdlTmFtZUdsb2JleHByIE5BTUUgQ09NUE9ORU5UIFZFUlNJT04gUkVWSVNJT04gRklMRV9OTyBSRVNVTFRfVkFSKQorICBpZihDT01QT05FTlQpCisgICAgc2V0KENPTVBPTkVOVCAiLSR7Q09NUE9ORU5UfSIpCisgIGVuZGlmKCkKKworICBzZXQoJHtSRVNVTFRfVkFSfSAiJHtOQU1FfS0ke1ZFUlNJT059LURhcndpbiR7Q09NUE9ORU5UfS5kbWciIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oZ2V0UGFja2FnZUNvbnRlbnRMaXN0IEZJTEUgUkVTVUxUX1ZBUikKKyAgZ2V0UGFja2FnZUNvbnRlbnQoIiR7RklMRX0iIHBhY2thZ2VfY29udGVudF8pCisKKyAgc2V0KCR7UkVTVUxUX1ZBUn0gIiR7cGFja2FnZV9jb250ZW50X30iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24odG9FeHBlY3RlZENvbnRlbnRMaXN0IEZJTEVfTk8gQ09OVEVOVF9WQVIpCisgIHNldChwcmVmaXhfICJ2b2x1bWUtbmFtZSIpCisgIGxpc3QoVFJBTlNGT1JNICR7Q09OVEVOVF9WQVJ9IFBSRVBFTkQgIiR7cHJlZml4X30iIE9VVFBVVF9WQVJJQUJMRSBwcmVwYXJlZF8pCisgIGxpc3QoQVBQRU5EIHByZXBhcmVkXyAiJHtwcmVmaXhffSIpCisKKyAgc2V0KCR7Q09OVEVOVF9WQVJ9ICIke3ByZXBhcmVkX30iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9QcmVyZXF1aXJlbWVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvUHJlcmVxdWlyZW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYWFmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvUHJlcmVxdWlyZW1lbnRzLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorZnVuY3Rpb24oZ2V0X3Rlc3RfcHJlcmVxdWlyZW1lbnRzIGZvdW5kX3ZhciBjb25maWdfZmlsZSkKKyAgZmluZF9wcm9ncmFtKEhESVVUSUxfRVhFQ1VUQUJMRSBoZGl1dGlsKQorCisgIGlmKEhESVVUSUxfRVhFQ1VUQUJMRSkKKyAgICBmaWxlKFdSSVRFICIke2NvbmZpZ19maWxlfSIgInNldChIRElVVElMX0VYRUNVVEFCTEUgXCIke0hESVVUSUxfRVhFQ1VUQUJMRX1cIikiKQorICAgIHNldCgke2ZvdW5kX3Zhcn0gdHJ1ZSBQQVJFTlRfU0NPUEUpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9wYWNrYWdpbmdfQ09NUE9ORU5UX2RlZmF1bHQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX0NPTVBPTkVOVF9kZWZhdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmM4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX0NPTVBPTkVOVF9kZWZhdWx0LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENQQUNLX0NPTVBPTkVOVFNfR1JPVVBJTkcgIklHTk9SRSIpCitzZXQoQ1BBQ0tfRE1HX0RJU0FCTEVfQVBQTElDQVRJT05TX1NZTUxJTksgT04pCitzZXQoQ1BBQ0tfRE1HX1ZPTFVNRV9OQU1FICJ2b2x1bWUtbmFtZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggYzIzODJiMC4uM2JlMWZkMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNSw3ICs1LDcgQEAKIAogIyBydW5fY3BhY2tfdGVzdCBhcmdzOiBURVNUX05BTUUgIkdFTkVSQVRPUlMiIFJVTl9DTUFLRV9CVUlMRF9TVEVQICJQQUNLQUdJTkdfVFlQRVMiCiBydW5fY3BhY2tfdGVzdChDVVNUT01fQklOQVJZX1NQRUNfRklMRSAiUlBNLkNVU1RPTV9CSU5BUllfU1BFQ19GSUxFIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQotcnVuX2NwYWNrX3Rlc3QoQ1VTVE9NX05BTUVTICJSUE0uQ1VTVE9NX05BTUVTO0RFQi5DVVNUT01fTkFNRVM7VEdaIiB0cnVlICJDT01QT05FTlQiKQorcnVuX2NwYWNrX3Rlc3QoQ1VTVE9NX05BTUVTICJSUE0uQ1VTVE9NX05BTUVTO0RFQi5DVVNUT01fTkFNRVM7VEdaO0RyYWdORHJvcCIgdHJ1ZSAiQ09NUE9ORU5UIikKIHJ1bl9jcGFja190ZXN0KERFQlVHSU5GTyAiUlBNLkRFQlVHSU5GTztERUIuREVCVUdJTkZPIiB0cnVlICJDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3Rfc3VidGVzdHMoREVGQVVMVF9QRVJNSVNTSU9OUyAiQ01BS0VfdmFyX3NldDtDUEFDS192YXJfc2V0O2JvdGhfc2V0O2ludmFsaWRfQ01BS0VfdmFyO2ludmFsaWRfQ1BBQ0tfdmFyIiAiUlBNLkRFRkFVTFRfUEVSTUlTU0lPTlM7REVCLkRFRkFVTFRfUEVSTUlTU0lPTlMiIGZhbHNlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdChERVBFTkRFTkNJRVMgIlJQTS5ERVBFTkRFTkNJRVM7REVCLkRFUEVOREVOQ0lFUyIgdHJ1ZSAiQ09NUE9ORU5UIikKQEAgLTQzLDMgKzQzLDQgQEAKICAgZmFsc2UKICAgIk1PTk9MSVRISUM7Q09NUE9ORU5UIgogKQorcnVuX2NwYWNrX3Rlc3QoUFJPSkVDVF9NRVRBICJSUE0uUFJPSkVDVF9NRVRBO0RFQi5QUk9KRUNUX01FVEEiIGZhbHNlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvRXhwZWN0ZWRGaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0NVU1RPTV9OQU1FUy9FeHBlY3RlZEZpbGVzLmNtYWtlCmluZGV4IDA3MjI2ZGYuLjlhYzE5ZTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0NVU1RPTV9OQU1FUy9FeHBlY3RlZEZpbGVzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0NVU1RPTV9OQU1FUy9FeHBlY3RlZEZpbGVzLmNtYWtlCkBAIC0xMiw0ICsxMiw3IEBACiBlbHNlaWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgIlRHWiIpCiAgIHNldChFWFBFQ1RFRF9GSUxFXzIgInNlY29uZC50YXIuZ3oiKQogICBzZXQoRVhQRUNURURfRklMRV8zICJwa2dfM19hYmMudGFyLmd6IikKK2Vsc2VpZihHRU5FUkFUT1JfVFlQRSBTVFJFUVVBTCAiRHJhZ05Ecm9wIikKKyAgc2V0KEVYUEVDVEVEX0ZJTEVfMiAic2Vjb25kLmRtZyIpCisgIHNldChFWFBFQ1RFRF9GSUxFXzMgInBrZ18zX2FiYy5kbWciKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvQ1VTVE9NX05BTUVTL3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvdGVzdC5jbWFrZQppbmRleCA0YzIwZTQxLi44OTkyNThlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvdGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvdGVzdC5jbWFrZQpAQCAtMTAsNiArMTAsOSBAQAogZWxzZWlmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMICJUR1oiKQogICBzZXQoQ1BBQ0tfQVJDSElWRV9QS0dfMl9GSUxFX05BTUUgInNlY29uZCIpCiAgIHNldChDUEFDS19BUkNISVZFX1BLR18zX0ZJTEVfTkFNRSAicGtnXzNfYWJjIikKK2Vsc2VpZihHRU5FUkFUT1JfVFlQRSBTVFJFUVVBTCAiRHJhZ05Ecm9wIikKKyAgc2V0KENQQUNLX0RNR19QS0dfMl9GSUxFX05BTUUgInNlY29uZCIpCisgIHNldChDUEFDS19ETUdfUEtHXzNfRklMRV9OQU1FICJwa2dfM19hYmMiKQogZW5kaWYoKQogCiBpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbyBDT01QT05FTlQgcGtnXzEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9leHBlY3RlZC1qc29uLTEuMC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9leHBlY3RlZC1qc29uLTEuMC50eHQKaW5kZXggMThiZjYxNy4uY2EyNWIxZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvZXhwZWN0ZWQtanNvbi0xLjAudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2V4cGVjdGVkLWpzb24tMS4wLnR4dApAQCAtMSw1ICsxLDYgQEAKIF5cewotICAiY29tcG9uZW50R3JvdXBzIiA6WyBdCisgICgiYnVpbGRDb25maWciIDogIkRlYnVnIiwKKyk/ICAiY29tcG9uZW50R3JvdXBzIiA6WyBdCiAgIFx7CiAgICAgImYxMiIgOlsgXQogICAgIFx7CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL1ZlcmlmeVJlc3VsdC5jbWFrZQppbmRleCBkN2Q4MmYyLi4xYTFlOTgzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvVmVyaWZ5UmVzdWx0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0lOU1RBTExfU0NSSVBUUy9WZXJpZnlSZXN1bHQuY21ha2UKQEAgLTI1LDUgKzI1LDUgQEAKICAgZW5kZm9yZWFjaCgpCiBlbmRmdW5jdGlvbigpCiAKLWNoZWNrU2NyaXB0c18oIiR7Rk9VTkRfRklMRV8xfSIgImVjaG8gXCJwcmUgaW5zdGFsbCBmb29cIjtlY2hvIFwicG9zdCBpbnN0YWxsIGZvb1wiO2VjaG8gXCJwcmUgdW5pbnN0YWxsIGZvb1wiO2VjaG8gXCJwb3N0IHVuaW5zdGFsbCBmb29cIiIpCi1jaGVja1NjcmlwdHNfKCIke0ZPVU5EX0ZJTEVfMn0iICJlY2hvIFwicHJlIGluc3RhbGxcIjtlY2hvIFwicG9zdCBpbnN0YWxsXCI7ZWNobyBcInByZSB1bmluc3RhbGxcIjtlY2hvIFwicG9zdCB1bmluc3RhbGxcIiIpCitjaGVja1NjcmlwdHNfKCIke0ZPVU5EX0ZJTEVfMX0iICJlY2hvIFwicHJlIGluc3RhbGwgZm9vXCI7ZWNobyBcInBvc3QgaW5zdGFsbCBmb29cIjtlY2hvIFwicHJlIHVuaW5zdGFsbCBmb29cIjtlY2hvIFwicG9zdCB1bmluc3RhbGwgZm9vXCI7ZWNobyBcInByZSB0cmFucyBmb29cIjtlY2hvIFwicG9zdCB0cmFucyBmb29cIiIpCitjaGVja1NjcmlwdHNfKCIke0ZPVU5EX0ZJTEVfMn0iICJlY2hvIFwicHJlIGluc3RhbGxcIjtlY2hvIFwicG9zdCBpbnN0YWxsXCI7ZWNobyBcInByZSB1bmluc3RhbGxcIjtlY2hvIFwicG9zdCB1bmluc3RhbGxcIjtlY2hvIFwicHJlIHRyYW5zXCI7ZWNobyBcInBvc3QgdHJhbnNcIiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0lOU1RBTExfU0NSSVBUUy90ZXN0LmNtYWtlCmluZGV4IGZiMWI4ZGUuLmMyMDBmYTUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0lOU1RBTExfU0NSSVBUUy90ZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0lOU1RBTExfU0NSSVBUUy90ZXN0LmNtYWtlCkBAIC03LDYgKzcsMTAgQEAKICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV91bmluc3RhbGwuc2giKQogICBzZXQoQ1BBQ0tfUlBNX1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3VuaW5zdGFsbC5zaCIpCisgIHNldChDUEFDS19SUE1fUFJFX1RSQU5TX1NDUklQVF9GSUxFCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdHJhbnMuc2giKQorICBzZXQoQ1BBQ0tfUlBNX1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUKKyAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdHJhbnMuc2giKQogCiAgIHNldChDUEFDS19SUE1fZm9vX1BSRV9JTlNUQUxMX1NDUklQVF9GSUxFCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfaW5zdGFsbF9mb28uc2giKQpAQCAtMTYsNiArMjAsMTAgQEAKICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV91bmluc3RhbGxfZm9vLnNoIikKICAgc2V0KENQQUNLX1JQTV9mb29fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEUKICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdW5pbnN0YWxsX2Zvby5zaCIpCisgIHNldChDUEFDS19SUE1fZm9vX1BSRV9UUkFOU19TQ1JJUFRfRklMRQorICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcHJlX3RyYW5zX2Zvby5zaCIpCisgIHNldChDUEFDS19SUE1fZm9vX1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUKKyAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdHJhbnNfZm9vLnNoIikKIGVuZGlmKCkKIAogc2V0KENNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9SUEFUSCAxKQpAQCAtMjksNiArMzcsMTAgQEAKICAgICAiZWNobyBcInByZSB1bmluc3RhbGxcIlxuIikKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3VuaW5zdGFsbC5zaCIKICAgICAiZWNobyBcInBvc3QgdW5pbnN0YWxsXCJcbiIpCitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcHJlX3RyYW5zLnNoIgorICAgICJlY2hvIFwicHJlIHRyYW5zXCJcbiIpCitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcG9zdF90cmFucy5zaCIKKyAgICAiZWNobyBcInBvc3QgdHJhbnNcIlxuIikKIAogIyBzcGVjaWZpYwogZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV9pbnN0YWxsX2Zvby5zaCIKQEAgLTM5LDYgKzUxLDEwIEBACiAgICAgImVjaG8gXCJwcmUgdW5pbnN0YWxsIGZvb1wiXG4iKQogZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdW5pbnN0YWxsX2Zvby5zaCIKICAgICAiZWNobyBcInBvc3QgdW5pbnN0YWxsIGZvb1wiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV90cmFuc19mb28uc2giCisgICAgImVjaG8gXCJwcmUgdHJhbnMgZm9vXCJcbiIpCitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcG9zdF90cmFuc19mb28uc2giCisgICAgImVjaG8gXCJwb3N0IHRyYW5zIGZvb1wiXG4iKQogCiBpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbyBDT01QT05FTlQgZm9vKQogaW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBiYXIgQ09NUE9ORU5UIGJhcikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BST0pFQ1RfTUVUQS9FeHBlY3RlZEZpbGVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4ZWQyYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BST0pFQ1RfTUVUQS9FeHBlY3RlZEZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAoraWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgREVCKQorICBzZXQoRVhQRUNURURfRklMRV8xICJwcm9qZWN0X21ldGEtMS4yLjMqLmRlYiIpCitlbHNlaWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgUlBNKQorICBzZXQoRVhQRUNURURfRklMRV8xICJwcm9qZWN0X21ldGEtMS4yLjMqLnJwbSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVW5leHBlY3RlZCBDUGFjayBnZW5lcmF0b3IiKQorZW5kaWYoKQorc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIxIikKK3NldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICIvZm9vOy9mb28vQ01ha2VMaXN0cy50eHQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BST0pFQ1RfTUVUQS9WZXJpZnlSZXN1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhY2NiNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BST0pFQ1RfTUVUQS9WZXJpZnlSZXN1bHQuY21ha2UKQEAgLTAsMCArMSwzMCBAQAorZnVuY3Rpb24oY2hlY2tQYWNrYWdlVVJMIEZJTEUgVEFHIEVYUEVDVEVEX1VSTCkKKyAgZ2V0UGFja2FnZUluZm8oIiR7RklMRX0iICJfZmlsZV9pbmZvIikKKyAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgX2ZpbGVfaW5mbyAiJHtfZmlsZV9pbmZvfSIpCisKKyAgc2V0KF9zZWVuX3VybCBGQUxTRSkKKyAgZm9yZWFjaChfbGluZSBJTiBMSVNUUyBfZmlsZV9pbmZvKQorICAgIGlmKF9saW5lIE1BVENIRVMgIiR7VEFHfTogKC4qKSIpCisgICAgICBzZXQoX3NlZW5fdXJsIFRSVUUpCisgICAgICBpZihOT1QgQ01BS0VfTUFUQ0hfMSBTVFJFUVVBTCBFWFBFQ1RFRF9VUkwpCisgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuZXhwZWN0ZWQgYEhvbWVwYWdlYCBVUkw6IGAke0NNQUtFX01BVENIXzF9YCAhPSBgJHtFWFBFQ1RFRF9VUkx9YCIpCisgICAgICBlbmRpZigpCisgICAgICBicmVhaygpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKyAgaWYoTk9UIF9zZWVuX3VybCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgcGFja2dlIGAke0ZJTEV9YCBkbyBub3QgaGF2ZSBVUkwgYXMgZXhwZWN0ZWQiKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK2lmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMIERFQikKKyAgc2V0KF90YWcgIiBIb21lcGFnZSIpICMgTk9URSBUaGUgbGVhZGluZyBzcGFjZQorZWxzZWlmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMIFJQTSkKKyAgc2V0KF90YWcgIlVSTC4qIikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmV4cGVjdGVkIENQYWNrIGdlbmVyYXRvciIpCitlbmRpZigpCisKK2NoZWNrUGFja2FnZVVSTCgiJHtGT1VORF9GSUxFXzF9IiAiJHtfdGFnfSIgImh0dHBzOi8vbWV0YS50ZXN0LmluZm8iKQorCisjIGthdGU6IGluZGVudC13aWR0aCAyOwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUk9KRUNUX01FVEEvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzUyNjZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL3Rlc3QuY21ha2UKQEAgLTAsMCArMSwxMSBAQAorcHJvamVjdCgKKyAgTWV0YUluZm9UZXN0CisgIFZFUlNJT04gMS4yLjMKKyAgREVTQ1JJUFRJT04gIlRoaXMgaXMgZ29pbmcgdG8gYmUgYSBzdW1tYXJ5IgorICBIT01FUEFHRV9VUkwgImh0dHBzOi8vbWV0YS50ZXN0LmluZm8iCispCitpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbyBDT01QT05FTlQgdGVzdCkKKworaWYoUEFDS0FHSU5HX1RZUEUgU1RSRVFVQUwgIkNPTVBPTkVOVCIpCisgIHNldChDUEFDS19DT01QT05FTlRTX0FMTCB0ZXN0KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvQ01ha2VDVGVzdEFyZ3VtZW50cy10ZXN0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvQ01ha2VDVGVzdEFyZ3VtZW50cy10ZXN0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDU5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUNUZXN0QXJndW1lbnRzLXRlc3QtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQobG9nICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vb3V0cHV0LWxvZy50eHQiKQoraWYoTk9UIEVYSVNUUyAiJHtsb2d9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJUaGUgZXhwZWN0ZWQgb3V0cHV0IGxvZyBmaWxlIGlzIG1pc3Npbmc6XG4gICR7bG9nfSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUNUZXN0QXJndW1lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvQ01ha2VDVGVzdEFyZ3VtZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2YyOTMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvQ01ha2VDVGVzdEFyZ3VtZW50cy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoQ1Rlc3QpCithZGRfdGVzdChOQU1FIENNYWtlQ1Rlc3RBcmd1bWVudHMgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gQ01ha2VDVGVzdEFyZ3VtZW50cykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAxMzkyMjQwLi43NjEyMjRhIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01LDMgKzUsMTYgQEAKIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKIAogcnVuX2NtYWtlKE5vdE9uKQorCitmdW5jdGlvbihydW5fQ01ha2VDVGVzdEFyZ3VtZW50cykKKyAgcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhDTWFrZUNUZXN0QXJndW1lbnRzICItRENNQUtFX0NURVNUX0FSR1VNRU5UUz0tLXF1aWV0XFw7LS1vdXRwdXQtbG9nXFw7b3V0cHV0LWxvZy50eHQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ01ha2VDVGVzdEFyZ3VtZW50cy1idWlsZCkKKyAgaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk1ha2V8TmluamEiKQorICAgIHNldCh0ZXN0ICJ0ZXN0IikKKyAgZWxzZSgpCisgICAgc2V0KHRlc3QgIlJVTl9URVNUUyIpCisgIGVuZGlmKCkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoQ01ha2VDVGVzdEFyZ3VtZW50cy10ZXN0ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnIC0tdGFyZ2V0ICIke3Rlc3R9IikKK2VuZGZ1bmN0aW9uKCkKK3J1bl9DTWFrZUNUZXN0QXJndW1lbnRzKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL0NNYWtlTGlzdHMudHh0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Mzc4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL0NNYWtlTGlzdHMudHh0LmluCkBAIC0wLDAgKzEsNCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKK3Byb2plY3QoQ1Rlc3RDb21tYW5kTGluZUBDQVNFX05BTUVAIE5PTkUpCitpbmNsdWRlKENUZXN0KQorYWRkX3Rlc3QoTkFNRSBSdW5DTWFrZVZlcnNpb24gQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLS12ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2YjIzMTYyLi45YjlhZTY1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw5ICsxLDMzIEBACiBpbmNsdWRlKFJ1bkNNYWtlKQoraW5jbHVkZShSdW5DVGVzdCkKKwogc2V0KFJ1bkNNYWtlX1RFU1RfVElNRU9VVCA2MCkKIAogdW5zZXQoRU5We0NURVNUX1BBUkFMTEVMX0xFVkVMfSkKIHVuc2V0KEVOVntDVEVTVF9PVVRQVVRfT05fRkFJTFVSRX0pCiAKK3J1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC1vcHQtYmFkMQorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tcmVwZWF0IHVudGlsLXBhc3MKKyAgKQorcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LW9wdC1iYWQyCisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQgdW50aWwtcGFzczpmb28KKyAgKQorcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LW9wdC1iYWQzCisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQgdW50aWwtZmFpbDoyIC0tcmVwZWF0LXVudGlsLWZhaWwgMgorICApCitydW5fY21ha2VfY29tbWFuZChyZXBlYXQtb3B0LWJhZDQKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLXJlcGVhdC11bnRpbC1mYWlsIDIgLS1yZXBlYXQgdW50aWwtZmFpbDoyCisgICkKK3J1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC1vcHQtdW50aWwtcGFzcworICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tcmVwZWF0IHVudGlsLXBhc3M6MgorICApCitydW5fY21ha2VfY29tbWFuZChyZXBlYXQtb3B0LXVudGlsLWZhaWwKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLXJlcGVhdCB1bnRpbC1mYWlsOjIKKyAgKQorcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LW9wdC1hZnRlci10aW1lb3V0CisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQgYWZ0ZXItdGltZW91dDoyCisgICkKKwogcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LXVudGlsLWZhaWwtYmFkMQogICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tcmVwZWF0LXVudGlsLWZhaWwKICAgKQpAQCAtMTQsMTkgKzM4LDM5IEBACiAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQtdW50aWwtZmFpbCAyCiAgICkKIAorZnVuY3Rpb24ocnVuX3JlcGVhdF91bnRpbF9wYXNzX3Rlc3RzKQorICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vcmVwZWF0LXVudGlsLXBhc3MtYnVpbGQpCisgIHJ1bl9jbWFrZShyZXBlYXQtdW50aWwtcGFzcy1jbWFrZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LXVudGlsLXBhc3MtY3Rlc3QKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIERlYnVnIC0tcmVwZWF0IHVudGlsLXBhc3M6MworICAgICkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9yZXBlYXRfdW50aWxfcGFzc190ZXN0cygpCisKK2Z1bmN0aW9uKHJ1bl9yZXBlYXRfYWZ0ZXJfdGltZW91dF90ZXN0cykKKyAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3JlcGVhdC1hZnRlci10aW1lb3V0LWJ1aWxkKQorICBydW5fY21ha2UocmVwZWF0LWFmdGVyLXRpbWVvdXQtY21ha2UpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC1hZnRlci10aW1lb3V0LWN0ZXN0CisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZyAtLXJlcGVhdCBhZnRlci10aW1lb3V0OjMKKyAgICApCitlbmRmdW5jdGlvbigpCitydW5fcmVwZWF0X2FmdGVyX3RpbWVvdXRfdGVzdHMoKQorCiBmdW5jdGlvbihydW5fcmVwZWF0X3VudGlsX2ZhaWxfdGVzdHMpCiAgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9yZXBlYXQtdW50aWwtZmFpbC1idWlsZCkKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKLSAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKLSAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKLQogICBydW5fY21ha2UocmVwZWF0LXVudGlsLWZhaWwtY21ha2UpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCiAgIHJ1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC11bnRpbC1mYWlsLWN0ZXN0Ci0gICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZyAtLXJlcGVhdC11bnRpbC1mYWlsIDMKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIERlYnVnICR7QVJHTn0KICAgICApCiBlbmRmdW5jdGlvbigpCi1ydW5fcmVwZWF0X3VudGlsX2ZhaWxfdGVzdHMoKQorcnVuX3JlcGVhdF91bnRpbF9mYWlsX3Rlc3RzKC0tcmVwZWF0LXVudGlsLWZhaWwgMykKK3J1bl9yZXBlYXRfdW50aWxfZmFpbF90ZXN0cygtLXJlcGVhdCB1bnRpbC1mYWlsOjMpCiAKIGZ1bmN0aW9uKHJ1bl9CYWRDVGVzdFRlc3RmaWxlKQogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQmFkQ1Rlc3RUZXN0ZmlsZSkKQEAgLTI2OSwzICszMTMsMzUgQEAKICAgcnVuX2NtYWtlX2NvbW1hbmQoc2hvdy1vbmx5X2pzb24tdjEgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLXNob3ctb25seT1qc29uLXYxKQogZW5kZnVuY3Rpb24oKQogcnVuX1Nob3dPbmx5KCkKKworZnVuY3Rpb24ocnVuX05vVGVzdHMpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Ob1Rlc3RzKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKFdSSVRFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ1Rlc3RUZXN0ZmlsZS5jbWFrZSIgIiIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKG5vLXRlc3RzX2lnbm9yZSAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tbm8tdGVzdHM9aWdub3JlKQorICBydW5fY21ha2VfY29tbWFuZChuby10ZXN0c19lcnJvciAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tbm8tdGVzdHM9ZXJyb3IpCisgIHJ1bl9jbWFrZV9jb21tYW5kKG5vLXRlc3RzX2JhZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tbm8tdGVzdHM9YmFkKQorICBydW5fY21ha2VfY29tbWFuZChuby10ZXN0c19sZWdhY3kgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSkKKyAgZmlsZShXUklURSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L05vVGVzdHNTY3JpcHQuY21ha2UiICIKKyAgICBzZXQoQ1RFU1RfQ09NTUFORCBcIiR7Q01BS0VfQ1RFU1RfQ09NTUFORH1cIikKKyAgICBzZXQoQ1RFU1RfU09VUkNFX0RJUkVDVE9SWSBcIiR7UnVuQ01ha2VfU09VUkNFX0RJUn1cIikKKyAgICBzZXQoQ1RFU1RfQklOQVJZX0RJUkVDVE9SWSBcIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfVwiKQorICAgIGN0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCkKKyAgICBjdGVzdF90ZXN0KCkKKyIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKAorICAgIG5vLXRlc3RzLXNjcmlwdF9pZ25vcmUgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLW5vLXRlc3RzPWlnbm9yZQorICAgIC1TICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vTm9UZXN0c1NjcmlwdC5jbWFrZSIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKAorICAgIG5vLXRlc3RzLXNjcmlwdF9lcnJvciAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tbm8tdGVzdHM9ZXJyb3IKKyAgICAtUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L05vVGVzdHNTY3JpcHQuY21ha2UiKQorICBydW5fY21ha2VfY29tbWFuZCgKKyAgICBuby10ZXN0cy1zY3JpcHRfbGVnYWN5ICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAtUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L05vVGVzdHNTY3JpcHQuY21ha2UiKQorZW5kZnVuY3Rpb24oKQorcnVuX05vVGVzdHMoKQorCisjIENoZWNrIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgdmFyaWFibGUgaXMgcGFzc2VkCitydW5fY3Rlc3QoY2hlY2stY29uZmlndXJhdGlvbi10eXBlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9jaGVjay1jb25maWd1cmF0aW9uLXR5cGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvY2hlY2stY29uZmlndXJhdGlvbi10eXBlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjMWE0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvY2hlY2stY29uZmlndXJhdGlvbi10eXBlLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDb21tYW5kIGxpbmUgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFPURlYnVnCitzZXQgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFPVJlbGVhc2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2Vycm9yLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9lcnJvci1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9lcnJvci1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9lcnJvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfZXJyb3Itc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M0YjExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfZXJyb3Itc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteTm8gdGVzdHMgd2VyZSBmb3VuZCEhISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2xlZ2FjeS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfbGVnYWN5LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2xlZ2FjeS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9sZWdhY3ktc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2xlZ2FjeS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzRiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9sZWdhY3ktc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteTm8gdGVzdHMgd2VyZSBmb3VuZCEhISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2JhZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfYmFkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfYmFkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2JhZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDM1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2JhZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogJy0tbm8tdGVzdHM9JyBnaXZlbiB1bmtub3duIHZhbHVlICdiYWQnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19lcnJvci1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19lcnJvci1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTRmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2Vycm9yLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorOApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19lcnJvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19lcnJvci1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZmJhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2Vycm9yLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorTm8gdGVzdHMgd2VyZSBmb3VuZCEhIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19sZWdhY3ktc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfbGVnYWN5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNGIxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfbGVnYWN5LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXk5vIHRlc3RzIHdlcmUgZm91bmQhISEkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1hZnRlci10aW1lb3V0LWNtYWtlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtYWZ0ZXItdGltZW91dC1jbWFrZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNjMGJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtYWZ0ZXItdGltZW91dC1jbWFrZS5jbWFrZQpAQCAtMCwwICsxLDE1IEBACitlbmFibGVfdGVzdGluZygpCisKK3NldChURVNUX09VVFBVVF9GSUxFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGVzdF9vdXRwdXQudHh0IikKK2FkZF90ZXN0KE5BTUUgaW5pdGlhbGl6YXRpb24KKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICItRFRFU1RfT1VUUFVUX0ZJTEU9JHtURVNUX09VVFBVVF9GSUxFfSIKKyAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbml0LmNtYWtlIikKK2FkZF90ZXN0KE5BTUUgdGVzdDEKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICItRFRFU1RfT1VUUFVUX0ZJTEU9JHtURVNUX09VVFBVVF9GSUxFfSIKKyAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90ZXN0MS10aW1lb3V0LmNtYWtlIikKK3NldF90ZXN0c19wcm9wZXJ0aWVzKHRlc3QxIFBST1BFUlRJRVMgREVQRU5EUyAiaW5pdGlhbGl6YXRpb24iIFRJTUVPVVQgNSkKKworYWRkX3Rlc3QoaGVsbG8gJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvIGhlbGxvKQorYWRkX3Rlc3QoZ29vZGJ5ZSAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gZ29vZGJ5ZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LWFmdGVyLXRpbWVvdXQtY3Rlc3Qtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LWFmdGVyLXRpbWVvdXQtY3Rlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGE1NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtYWZ0ZXItdGltZW91dC1jdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK15UZXN0IHByb2plY3QgLiovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtYWZ0ZXItdGltZW91dC1idWlsZAorICAgIFN0YXJ0IDE6IGluaXRpYWxpemF0aW9uCisxLzQgVGVzdCAjMTogaW5pdGlhbGl6YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAyOiB0ZXN0MQorMi80IFRlc3QgIzI6IHRlc3QxIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cKlwqXCpUaW1lb3V0ICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDI6IHRlc3QxCisgICAgVGVzdCAjMjogdGVzdDEgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAzOiBoZWxsbworMy80IFRlc3QgIzM6IGhlbGxvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgNDogZ29vZGJ5ZQorNC80IFRlc3QgIzQ6IGdvb2RieWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisKKzEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgNAorCitUb3RhbCBUZXN0IHRpbWUgXChyZWFsXCkgPSArWzAtOS5dKyBzZWMkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYWZ0ZXItdGltZW91dC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWFmdGVyLXRpbWVvdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M0YjExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWFmdGVyLXRpbWVvdXQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteTm8gdGVzdHMgd2VyZSBmb3VuZCEhISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQxLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQxLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjMyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogJy0tcmVwZWF0JyBnaXZlbiBpbnZhbGlkIHZhbHVlICd1bnRpbC1wYXNzJyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQyLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOWYzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogJy0tcmVwZWF0JyBnaXZlbiBpbnZhbGlkIHZhbHVlICd1bnRpbC1wYXNzOmZvbyckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRlMTFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDMtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IEF0IG1vc3Qgb25lICctLXJlcGVhdCcgb3B0aW9uIG1heSBiZSB1c2VkXC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkNC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkNC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRlMTFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IEF0IG1vc3Qgb25lICctLXJlcGVhdCcgb3B0aW9uIG1heSBiZSB1c2VkXC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtdW50aWwtZmFpbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LXVudGlsLWZhaWwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M0YjExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LXVudGlsLWZhaWwtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteTm8gdGVzdHMgd2VyZSBmb3VuZCEhISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC11bnRpbC1wYXNzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtdW50aWwtcGFzcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzRiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtdW50aWwtcGFzcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15ObyB0ZXN0cyB3ZXJlIGZvdW5kISEhJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtdW50aWwtcGFzcy1jbWFrZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtY21ha2UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwOTU1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtY21ha2UuY21ha2UKQEAgLTAsMCArMSwxNSBAQAorZW5hYmxlX3Rlc3RpbmcoKQorCitzZXQoVEVTVF9PVVRQVVRfRklMRSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Rlc3Rfb3V0cHV0LnR4dCIpCithZGRfdGVzdChOQU1FIGluaXRpYWxpemF0aW9uCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAiLURURVNUX09VVFBVVF9GSUxFPSR7VEVTVF9PVVRQVVRfRklMRX0iCisgIC1QICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5pdC5jbWFrZSIpCithZGRfdGVzdChOQU1FIHRlc3QxCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAiLURURVNUX09VVFBVVF9GSUxFPSR7VEVTVF9PVVRQVVRfRklMRX0iCisgIC1QICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGVzdDEtcGFzcy5jbWFrZSIpCitzZXRfdGVzdHNfcHJvcGVydGllcyh0ZXN0MSBQUk9QRVJUSUVTIERFUEVORFMgImluaXRpYWxpemF0aW9uIikKKworYWRkX3Rlc3QoaGVsbG8gJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvIGhlbGxvKQorYWRkX3Rlc3QoZ29vZGJ5ZSAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gZ29vZGJ5ZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtY3Rlc3Qtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtY3Rlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQ1ZGMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtdW50aWwtcGFzcy1jdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK15UZXN0IHByb2plY3QgLiovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtdW50aWwtcGFzcy1idWlsZAorICAgIFN0YXJ0IDE6IGluaXRpYWxpemF0aW9uCisxLzQgVGVzdCAjMTogaW5pdGlhbGl6YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAyOiB0ZXN0MQorMi80IFRlc3QgIzI6IHRlc3QxIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cKlwqXCpGYWlsZWQgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgMjogdGVzdDEKKyAgICBUZXN0ICMyOiB0ZXN0MSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgUGFzc2VkICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDM6IGhlbGxvCiszLzQgVGVzdCAjMzogaGVsbG8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCA0OiBnb29kYnllCis0LzQgVGVzdCAjNDogZ29vZGJ5ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKworMTAwJSB0ZXN0cyBwYXNzZWQsIDAgdGVzdHMgZmFpbGVkIG91dCBvZiA0CisKK1RvdGFsIFRlc3QgdGltZSBcKHJlYWxcKSA9ICtbMC05Ll0rIHNlYyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdC5jbWFrZS5pbiBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdC5jbWFrZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODI5NjhhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0LmNtYWtlLmluCkBAIC0wLDAgKzEsMTkgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3NldChDVEVTVF9TSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdC1zaXRlIikKK3NldChDVEVTVF9CVUlMRF9OQU1FICAgICAgICAgICAgICAgICAgICAidGVzdC1idWlsZC1uYW1lIikKK3NldChDVEVTVF9TT1VSQ0VfRElSRUNUT1JZICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0JJTkFSWV9ESVJAL0BDQVNFX05BTUVAIikKK3NldChDVEVTVF9CSU5BUllfRElSRUNUT1JZICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0JJTkFSWV9ESVJAL0BDQVNFX05BTUVALWJ1aWxkIikKK3NldChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0dFTkVSQVRPUkAiKQorc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STSAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNQCIpCitzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQgICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVEAiKQorc2V0KENURVNUX05JR0hUTFlfU1RBUlRfVElNRSAgICAgICAgICAgICIwMTowMDowMCBVVEMiKQorc2V0KENURVNUX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICJAQ01BS0VfQ1RFU1RfQ09NTUFOREAiKQorCitpZigiQENBU0VfTkFNRUAiIE1BVENIRVMgIl5jaGVjay1jb25maWd1cmF0aW9uLXR5cGUiKQorICBtZXNzYWdlKCJDb21tYW5kIGxpbmUgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFPSIgJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9KQorICBzZXQoQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFICJSZWxlYXNlIikKKyAgbWVzc2FnZSgic2V0IENURVNUX0NPTkZJR1VSQVRJT05fVFlQRT0iICR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfSkKKworICBjdGVzdF9zdGFydChFeHBlcmltZW50YWwpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3Rlc3QxLXBhc3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3Rlc3QxLXBhc3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhOGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdDEtcGFzcy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACisjIFRoaXMgaXMgcnVuIGJ5IHRlc3QgdGVzdDEgaW4gcmVwZWF0LXVudGlsLXBhc3MtY21ha2UuY21ha2Ugd2l0aCBjbWFrZSAtUC4KKyMgSXQgcmVhZHMgdGhlIGZpbGUgVEVTVF9PVVRQVVRfRklMRSBhbmQgaW5jcmVtZW50cyB0aGUgbnVtYmVyCisjIGZvdW5kIGluIHRoZSBmaWxlIGJ5IDEuICBVbmxlc3MgdGhlIG51bWJlciBpcyAyLCB0aGVuIHRoZQorIyBjb2RlIHNlbmRzIG91dCBhIGNtYWtlIGVycm9yIGNhdXNpbmcgdGhlIHRlc3QgdG8gcGFzcyBvbmx5IG9uCisjIHRoZSBzZWNvbmQgdGltZSBpdCBpcyBydW4uCittZXNzYWdlKCJURVNUX09VVFBVVF9GSUxFID0gJHtURVNUX09VVFBVVF9GSUxFfSIpCitmaWxlKFJFQUQgIiR7VEVTVF9PVVRQVVRfRklMRX0iIENPVU5UKQorbWVzc2FnZSgiQ09VTlQ9ICR7Q09VTlR9IikKK21hdGgoRVhQUiBDT1VOVCAiJHtDT1VOVH0gKyAxIikKK2ZpbGUoV1JJVEUgIiR7VEVTVF9PVVRQVVRfRklMRX0iICIke0NPVU5UfSIpCitpZihOT1QgQ09VTlQgRVFVQUwgMikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAidGhpcyB0ZXN0IHBhc3NlcyBvbmx5IG9uIHRoZSAybmQgcnVuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdDEtdGltZW91dC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdDEtdGltZW91dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmYyY2NjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0MS10aW1lb3V0LmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKKyMgVGhpcyBpcyBydW4gYnkgdGVzdCB0ZXN0MSBpbiByZXBlYXQtYWZ0ZXItdGltZW91dC1jbWFrZS5jbWFrZSB3aXRoIGNtYWtlIC1QLgorIyBJdCByZWFkcyB0aGUgZmlsZSBURVNUX09VVFBVVF9GSUxFIGFuZCBpbmNyZW1lbnRzIHRoZSBudW1iZXIKKyMgZm91bmQgaW4gdGhlIGZpbGUgYnkgMS4gIFVubGVzcyB0aGUgbnVtYmVyIGlzIDIsIHRoZW4gdGhlCisjIGNvZGUgc2VuZHMgb3V0IGEgY21ha2UgZXJyb3IgY2F1c2luZyB0aGUgdGVzdCB0byBub3QgdGltZW91dCBvbmx5IG9uCisjIHRoZSBzZWNvbmQgdGltZSBpdCBpcyBydW4uCittZXNzYWdlKCJURVNUX09VVFBVVF9GSUxFID0gJHtURVNUX09VVFBVVF9GSUxFfSIpCitmaWxlKFJFQUQgIiR7VEVTVF9PVVRQVVRfRklMRX0iIENPVU5UKQorbWVzc2FnZSgiQ09VTlQ9ICR7Q09VTlR9IikKK21hdGgoRVhQUiBDT1VOVCAiJHtDT1VOVH0gKyAxIikKK2ZpbGUoV1JJVEUgIiR7VEVTVF9PVVRQVVRfRklMRX0iICIke0NPVU5UfSIpCitpZihOT1QgQ09VTlQgRVFVQUwgMikKKyAgbWVzc2FnZSgidGhpcyB0ZXN0IHRpbWVzIG91dCBleGNlcHQgb24gdGhlIDJuZCBydW4iKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEwKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vUmVzb3VyY2VDb21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SZXNvdXJjZUNvbW1vbi5jbWFrZQppbmRleCA3ZDYzMjk5Li5lZjc5ZGNlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SZXNvdXJjZUNvbW1vbi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SZXNvdXJjZUNvbW1vbi5jbWFrZQpAQCAtMSw2ICsxLDYgQEAKIGZ1bmN0aW9uKHNldHVwX3Jlc291cmNlX3Rlc3RzKQogICBpZihDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEKQotICAgIGFkZF90ZXN0KE5BTUUgUmVzb3VyY2VTZXR1cCBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSByZW1vdmUgLWYgIiR7Q01BS0VfQklOQVJZX0RJUn0vY3RyZXNhbGxvYy5sb2ciKQorICAgIGFkZF90ZXN0KE5BTUUgUmVzb3VyY2VTZXR1cCBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBybSAtZiAiJHtDTUFLRV9CSU5BUllfRElSfS9jdHJlc2FsbG9jLmxvZyIpCiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1zdGRlcnIudHh0CmluZGV4IDQxZGY1YWYuLjkxZDdlZjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQKQEAgLTEsNCArMSwxNCBAQAotXkluc3VmZmljaWVudCByZXNvdXJjZXMKK15JbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0IFRlc3QxOgorCisgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICdmbHV4Y2FwYWNpdG9ycycgaW4gdGhlIGZvbGxvd2luZyBhbW91bnRzOgorICAgIDIwMCBzbG90cworICBidXQgb25seSB0aGUgZm9sbG93aW5nIHVuaXRzIHdlcmUgYXZhaWxhYmxlOgorICAgICdvdXRhdGltZSc6IDEyMSBzbG90cworCitSZXNvdXJjZSBzcGVjIGZpbGU6CisKKyAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Jlc3NwZWMuanNvbgogQ01ha2UgRXJyb3IgYXQgW14KIF0qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMvdGVzdFwuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgogICBUZXN0cyBkaWQgbm90IHBhc3MkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gyLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gyLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQKaW5kZXggNmMyZjU1NC4uNWM3NWEzZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMi1jdGVzdC1zLXJlcy1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDItY3Rlc3Qtcy1yZXMtc3RkZXJyLnR4dApAQCAtMSw0ICsxLDExIEBACi1eSW5zdWZmaWNpZW50IHJlc291cmNlcworXkluc3VmZmljaWVudCByZXNvdXJjZXMgZm9yIHRlc3QgVGVzdDE6CisKKyAgVGVzdCByZXF1ZXN0ZWQgcmVzb3VyY2VzIG9mIHR5cGUgJ3Rlcm1pbmF0b3JzJyB3aGljaCBkb2VzIG5vdCBleGlzdAorCitSZXNvdXJjZSBzcGVjIGZpbGU6CisKKyAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Jlc3NwZWMuanNvbgogQ01ha2UgRXJyb3IgYXQgW14KIF0qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDItY3Rlc3Qtcy1yZXMvdGVzdFwuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgogICBUZXN0cyBkaWQgbm90IHBhc3MkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gzLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gzLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQKaW5kZXggODJkZmRlZi4uNDkwMmExOSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMy1jdGVzdC1zLXJlcy1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDMtY3Rlc3Qtcy1yZXMtc3RkZXJyLnR4dApAQCAtMSw0ICsxLDIxIEBACi1eSW5zdWZmaWNpZW50IHJlc291cmNlcworXkluc3VmZmljaWVudCByZXNvdXJjZXMgZm9yIHRlc3QgVGVzdDE6CisKKyAgVGVzdCByZXF1ZXN0ZWQgcmVzb3VyY2VzIG9mIHR5cGUgJ3dpZGdldHMnIGluIHRoZSBmb2xsb3dpbmcgYW1vdW50czoKKyAgICAxMiBzbG90cworICBidXQgb25seSB0aGUgZm9sbG93aW5nIHVuaXRzIHdlcmUgYXZhaWxhYmxlOgorICAgICcwJzogNCBzbG90cworICAgICcxJzogMiBzbG90cworICAgICcyJzogNCBzbG90cworICAgICczJzogOCBzbG90cworICAgICc0JzogMSBzbG90CisgICAgJzUnOiAxIHNsb3QKKyAgICAnNic6IDEgc2xvdAorICAgICc3JzogMSBzbG90CisKK1Jlc291cmNlIHNwZWMgZmlsZToKKworICBbXgorXSovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcmVzc3BlYy5qc29uCiBDTWFrZSBFcnJvciBhdCBbXgogXSovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMy1jdGVzdC1zLXJlcy90ZXN0XC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CiAgIFRlc3RzIGRpZCBub3QgcGFzcyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9CYXNpYy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RUaW1lb3V0L0Jhc2ljLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1OWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9CYXNpYy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvQmFzaWMtYnVpbGQKKyAgICBTdGFydCAxOiBUZXN0VGltZW91dAorMS8xIFRlc3QgIzE6IFRlc3RUaW1lb3V0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cKlwqXCpUaW1lb3V0ICtbMS05XVswLTkuXSogc2VjCisrCiswJSB0ZXN0cyBwYXNzZWQsIDEgdGVzdHMgZmFpbGVkIG91dCBvZiAxCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvQ01ha2VMaXN0cy50eHQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYWE5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9DTWFrZUxpc3RzLnR4dC5pbgpAQCAtMCwwICsxLDE1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoQ1Rlc3RUZXN0QENBU0VfTkFNRUAgQykKK2luY2x1ZGUoQ1Rlc3QpCisKK2FkZF9leGVjdXRhYmxlKFRlc3RUaW1lb3V0IFRlc3RUaW1lb3V0LmMpCisKK2lmKE5PVCBUSU1FT1VUKQorICBzZXQoVElNRU9VVCA0KQorZW5kaWYoKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoVGVzdFRpbWVvdXQgUFJJVkFURSBUSU1FT1VUPSR7VElNRU9VVH0pCisKK2FkZF90ZXN0KE5BTUUgVGVzdFRpbWVvdXQgQ09NTUFORCBUZXN0VGltZW91dCkKK3NldF9wcm9wZXJ0eShURVNUIFRlc3RUaW1lb3V0IFBST1BFUlRZIFRJTUVPVVQgJHtUSU1FT1VUfSkKKworQENBU0VfQ01BS0VMSVNUU19TVUZGSVhfQ09ERUAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9Gb3JrLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvRm9yay1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzhkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvRm9yay1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvRm9yay1idWlsZAorICAgIFN0YXJ0IDE6IFRlc3RUaW1lb3V0CisxLzEgVGVzdCAjMTogVGVzdFRpbWVvdXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKlRpbWVvdXQgK1sxLTldWzAtOS5dKiBzZWMKKysKKzAlIHRlc3RzIHBhc3NlZCwgMSB0ZXN0cyBmYWlsZWQgb3V0IG9mIDEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTZiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjIgQEAKK2luY2x1ZGUoUnVuQ1Rlc3QpCisKK2lmKE5PVCBUSU1FT1VUKQorICAjIEdpdmUgdGhlIHByb2Nlc3MgdGltZSB0byBsb2FkIGFuZCBzdGFydCBydW5uaW5nLgorICBzZXQoVElNRU9VVCA0KQorZW5kaWYoKQorCitmdW5jdGlvbihydW5fY3Rlc3RfdGltZW91dCBDQVNFX05BTUUpCisgIGNvbmZpZ3VyZV9maWxlKCR7UnVuQ01ha2VfU09VUkNFX0RJUn0vVGVzdFRpbWVvdXQuYworICAgICAgICAgICAgICAgICAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Q0FTRV9OQU1FfS9UZXN0VGltZW91dC5jIENPUFlPTkxZKQorICBydW5fY3Rlc3QoJHtDQVNFX05BTUV9KQorZW5kZnVuY3Rpb24oKQorCitydW5fY3Rlc3RfdGltZW91dChCYXNpYykKKworaWYoVU5JWCkKKyAgc3RyaW5nKENPTkNBVCBDQVNFX0NNQUtFTElTVFNfU1VGRklYX0NPREUgW1sKKyAgICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhUZXN0VGltZW91dCBQUklWQVRFIEZPUkspCitdXSkKKyAgcnVuX2N0ZXN0X3RpbWVvdXQoRm9yaykKKyAgdW5zZXQoQ0FTRV9DTUFLRUxJU1RTX1NVRkZJWF9DT0RFKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RUaW1lb3V0L1Rlc3RUaW1lb3V0LmMgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvVGVzdFRpbWVvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTAwOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RUaW1lb3V0L1Rlc3RUaW1lb3V0LmMKQEAgLTAsMCArMSwyNCBAQAorI2lmIGRlZmluZWQoX1dJTjMyKQorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworI2lmZGVmIEZPUksKKyAgcGlkX3QgcGlkID0gZm9yaygpOworICBpZiAocGlkICE9IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgU2xlZXAoKFRJTUVPVVQgKyA0KSAqIDEwMDApOworI2Vsc2UKKyAgc2xlZXAoKFRJTUVPVVQgKyA0KSk7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvdGVzdC5jbWFrZS5pbiBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC90ZXN0LmNtYWtlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjYyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvdGVzdC5jbWFrZS5pbgpAQCAtMCwwICsxLDE2IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK0BDQVNFX1RFU1RfUFJFRklYX0NPREVACisKK3NldChDVEVTVF9TSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdC1zaXRlIikKK3NldChDVEVTVF9CVUlMRF9OQU1FICAgICAgICAgICAgICAgICAgICAidGVzdC1idWlsZC1uYW1lIikKK3NldChDVEVTVF9TT1VSQ0VfRElSRUNUT1JZICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0JJTkFSWV9ESVJAL0BDQVNFX05BTUVAIikKK3NldChDVEVTVF9CSU5BUllfRElSRUNUT1JZICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0JJTkFSWV9ESVJAL0BDQVNFX05BTUVALWJ1aWxkIikKK3NldChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0dFTkVSQVRPUkAiKQorc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STSAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNQCIpCitzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQgICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVEAiKQorc2V0KENURVNUX0JVSUxEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICIkRU5We0NNQUtFX0NPTkZJR19UWVBFfSIpCisKK2N0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCkKK2N0ZXN0X2NvbmZpZ3VyZShPUFRJT05TICItRFRJTUVPVVQ9QFRJTUVPVVRAIikKK2N0ZXN0X2J1aWxkKCkKK2N0ZXN0X3Rlc3QoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tJUE9TdXBwb3J0ZWQvY21wMDA2OS1pcy1vbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrSVBPU3VwcG9ydGVkL2NtcDAwNjktaXMtb2xkLXN0ZGVyci50eHQKaW5kZXggZjE4MzU5NC4uMWJhYTYzYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tJUE9TdXBwb3J0ZWQvY21wMDA2OS1pcy1vbGQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0lQT1N1cHBvcnRlZC9jbXAwMDY5LWlzLW9sZC1zdGRlcnIudHh0CkBAIC0xLDQgKzEsMTUgQEAKLV5DTWFrZSBFcnJvciBhdCAuKi9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBjbXAwMDY5LWlzLW9sZC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKKyAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwNjkgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgorICBvZiBDTWFrZS4KKworICBUaGUgY21ha2UtcG9saWNpZXNcKDdcKSBtYW51YWwgZXhwbGFpbnMgdGhhdCB0aGUgT0xEIGJlaGF2aW9ycyBvZiBhbGwKKyAgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHRoYXQgYSBwb2xpY3kgc2hvdWxkIGJlIHNldCB0byBPTEQgb25seSB1bmRlcgorICBzcGVjaWZpYyBzaG9ydC10ZXJtIGNpcmN1bXN0YW5jZXMuICBQcm9qZWN0cyBzaG91bGQgYmUgcG9ydGVkIHRvIHRoZSBORVcKKyAgYmVoYXZpb3IgYW5kIG5vdCByZWx5IG9uIHNldHRpbmcgYSBwb2xpY3kgdG8gT0xELgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCAuKi9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CiAgIFBvbGljeSBDTVAwMDY5IHNldCB0byBPTEQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIGNtcDAwNjktaXMtb2xkXC5jbWFrZTpbMC05XSsgXChjaGVja19pcG9fc3VwcG9ydGVkXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2JhZF9hcmd1bWVudC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fYmFkX2FyZ3VtZW50LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fYmFkX2FyZ3VtZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2JhZF9hcmd1bWVudC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjk2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2JhZF9hcmd1bWVudC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogVW5rbm93biAtRSBybSBhcmd1bWVudDogLXJkJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZGlyZWN0b3J5X2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhMjlhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZGlyZWN0b3J5X2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgRVhJU1RTICR7b3V0fS9kaXIvZXhpc3RpbmcudHh0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7b3V0fS9kaXIvZXhpc3RpbmcudHh0IHNob3VsZCBleGlzdCAod2Ugb25seSByZW1vdmVkIHRoZSBsaW5rIHRvIGRpciBmb2xkZXIpIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZGlyZWN0b3J5X2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZGlyZWN0b3J5X2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZW1wdHlfZmlsZV9zcGVjaWZpZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZW1wdHlfZmlsZV9zcGVjaWZpZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM3ZGJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9lbXB0eV9maWxlX3NwZWNpZmllZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogTWlzc2luZyBmaWxlL2RpcmVjdG9yeSB0byByZW1vdmUkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9lbXB0eV9maWxlX3NwZWNpZmllZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q0ZWRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9lbXB0eV9maWxlX3NwZWNpZmllZC5jbWFrZQpAQCAtMCwwICsxLDggQEAKK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtICIiCisgIFJFU1VMVF9WQVJJQUJMRSBhY3R1YWxfcmVzdWx0CisgICkKKworaWYoTk9UICIke2FjdHVhbF9yZXN1bHR9IiBFUVVBTCAiMSIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiY21ha2UgLUUgcm0gXCJcIiBzaG91bGQgaGF2ZSByZXR1cm5lZCAxLCBnb3QgJHthY3R1YWxfcmVzdWx0fSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfZm9yY2VfZXhpc3RpbmctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfZm9yY2VfZXhpc3RpbmctY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YjE2MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9mb3JjZV9leGlzdGluZy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKEVYSVNUUyAke291dH0vZXhpc3RpbmcudHh0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7b3V0fS9leGlzdGluZy50eHQgbm90IHJlbW92ZWQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfZm9yY2VfZXhpc3RpbmctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX25vbl9leGlzdGluZy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX25vbl9leGlzdGluZy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfZm9yY2Vfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE5YjIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgRVhJU1RTICR7b3V0fS9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2V4aXN0aW5nLnR4dCBzaG91bGQgZXhpc3QgKHdlIG9ubHkgcmVtb3ZlZCB0aGUgbGluaykiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbGlua19ub25fZXhpc3RpbmctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX25vbl9mb3JjZV9leGlzdGluZy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmctY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YjE2MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmctY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgJHtvdXR9L2V4aXN0aW5nLnR4dCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke291dH0vZXhpc3RpbmcudHh0IG5vdCByZW1vdmVkIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX25vbl9mb3JjZV9leGlzdGluZy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX25vbl9leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2Vfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2Vfbm9uX2V4aXN0aW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX25vbl9leGlzdGluZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX25vbl9leGlzdGluZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogRmlsZSB0byByZW1vdmUgZG9lcyBub3QgZXhpc3QgYW5kIGZvcmNlIGlzIG5vdCBzZXQ6IC4qL3JtX3Rlc3RzL25vdF9leGlzdGluZy50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9yZWN1cnNpdmVfZXhpc3RpbmctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICR7b3V0fS9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2V4aXN0aW5nLnR4dCBub3QgcmVtb3ZlZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9yZWN1cnNpdmVfZXhpc3RpbmctcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACiswCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX3JlY3Vyc2l2ZV9ub25fZXhpc3RpbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX3JlY3Vyc2l2ZV9ub25fZXhpc3Rpbmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWRmODhhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX3JlY3Vyc2l2ZV9ub25fZXhpc3Rpbmctc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IEZpbGUgdG8gcmVtb3ZlIGRvZXMgbm90IGV4aXN0IGFuZCBmb3JjZSBpcyBub3Qgc2V0OiAuKi9ybV90ZXN0cy9ub3RfZXhpc3RpbmcudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9kaXJlY3Rvcnlfd2l0aF9maWxlcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOTc2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9kaXJlY3Rvcnlfd2l0aF9maWxlcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKEVYSVNUUyAke291dH0pCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9IG5vdCByZW1vdmVkIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9kaXJlY3Rvcnlfd2l0aF9maWxlcy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9kaXJlY3Rvcnlfd2l0aF9maWxlcy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX25vbl9leGlzdGluZ19maWxlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9ub25fZXhpc3RpbmdfZmlsZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9ub25fZXhpc3RpbmdfZmlsZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vX2ZpbGVfc3BlY2lmaWVkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub19maWxlX3NwZWNpZmllZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vX2ZpbGVfc3BlY2lmaWVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vX2ZpbGVfc3BlY2lmaWVkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjN2RiYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9fZmlsZV9zcGVjaWZpZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IE1pc3NpbmcgZmlsZS9kaXJlY3RvcnkgdG8gcmVtb3ZlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub25fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vbl9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDkyNzFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub25fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgRVhJU1RTICR7b3V0fS9kMSBPUiBOT1QgRVhJU1RTICR7b3V0fS9kMikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke291dH0vZDEgb3IgJHtvdXR9L2QyIGlzIHJlbW92ZWQgYnV0IHNob3VsZCBub3QiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub25fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub25fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlYTJlMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACiteRXJyb3IgcmVtb3ZpbmcgZGlyZWN0b3J5ICIuKi9ybV90ZXN0cy9kMSIgd2l0aG91dCByZWN1cnNpdmUgb3B0aW9uXC4KK0Vycm9yIHJlbW92aW5nIGRpcmVjdG9yeSAiLiovcm1fdGVzdHMvZDIiIHdpdGhvdXQgcmVjdXJzaXZlIG9wdGlvblwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4MmRhNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgJHtvdXR9L2QxIE9SIEVYSVNUUyAke291dH0vZDIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2QxIG9yICR7b3V0fS9kMiBzaG91bGQgYmUgcmVtb3ZlZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACiswCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeV9saW5rX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTI5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKE5PVCBFWElTVFMgJHtvdXR9L2Rpci9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2Rpci9leGlzdGluZy50eHQgc2hvdWxkIGV4aXN0ICh3ZSBvbmx5IHJlbW92ZWQgdGhlIGxpbmsgdG8gZGlyIGZvbGRlcikiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZGlyZWN0b3J5X2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX2V4aXN0aW5nLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTliMjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgRVhJU1RTICR7b3V0fS9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2V4aXN0aW5nLnR4dCBzaG91bGQgZXhpc3QgKHdlIG9ubHkgcmVtb3ZlZCB0aGUgbGluaykiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX25vbl9leGlzdGluZy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX25vbl9leGlzdGluZy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUHJvZmlsaW5nVGVzdC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllY2U4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxOCBAQAoraWYgKE5PVCBFWElTVFMgJHtQcm9maWxpbmdUZXN0T3V0cHV0fSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJFeHBlY3RlZCAke1Byb2ZpbGluZ1Rlc3RPdXRwdXR9IHRvIGV4aXN0cyIpCitlbmRpZigpCisKK2ZpbGUoUkVBRCAiJHtQcm9maWxpbmdUZXN0T3V0cHV0fSIgSlNPTl9IRUFERVIgTElNSVQgMikKK2lmIChOT1QgSlNPTl9IRUFERVIgTUFUQ0hFUyAiXlxcW3siKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkV4cGVjdGVkIHZhbGlkIEpTT04gc3RhcnQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNJWkUgIiR7UHJvZmlsaW5nVGVzdE91dHB1dH0iIE9VVFBVVF9TSVpFKQorbWF0aChFWFBSIEVORF9PRkZTRVQgIiR7T1VUUFVUX1NJWkV9IC0yICIpCisKK2ZpbGUoUkVBRCAiJHtQcm9maWxpbmdUZXN0T3V0cHV0fSIgSlNPTl9UUkFJTEVSIE9GRlNFVCAke0VORF9PRkZTRVR9KQoraWYgKE5PVCBKU09OX1RSQUlMRVIgTUFUQ0hFUyAiXn1dJCIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRXhwZWN0ZWQgdmFsaWQgSlNPTiBlbmQiKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUHJvZmlsaW5nVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZjRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QuY21ha2UKQEAgLTAsMCArMSBAQAorIyBUaGlzIGZpbGUgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggYjYwOGQzMy4uZjk1YTZlZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMjU0LDYgKzI1NCwyNCBAQAogZW5kZnVuY3Rpb24oKQogcnVuX0Vudmlyb25tZW50R2VuZXJhdG9yKCkKIAorZnVuY3Rpb24ocnVuX0Vudmlyb25tZW50RXhwb3J0Q29tcGlsZUNvbW1hbmRzKQorICBzZXQoUnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzKQorCisgIHJ1bl9jbWFrZShlbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtdW5zZXQpCisKKyAgc2V0KEVOVntDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU30gT04pCisgIHJ1bl9jbWFrZShlbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtc2V0KQorCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUz1PRkYpCisgIHJ1bl9jbWFrZShlbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtb3ZlcnJpZGUpCisKKyAgdW5zZXQoRU5We0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTfSkKK2VuZGZ1bmN0aW9uKHJ1bl9FbnZpcm9ubWVudEV4cG9ydENvbXBpbGVDb21tYW5kcykKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlVuaXggTWFrZWZpbGVzIiBPUiBSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiKQorICBydW5fRW52aXJvbm1lbnRFeHBvcnRDb21waWxlQ29tbWFuZHMoKQorZW5kaWYoKQorCiBpZihSdW5DTWFrZV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIikKICAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0J1aWxkLWJ1aWxkKQpAQCAtMzcwLDYgKzM4OCw3NiBAQAogdW5zZXQob3V0KQogdW5zZXQob3V0ZmlsZSkKIAorc2V0KG91dCAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3JtX3Rlc3RzKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtvdXR9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtvdXR9KQorZmlsZShUT1VDSCAke291dH0vZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgJHtvdXR9L2V4aXN0aW5nLnR4dCkKK2ZpbGUoVE9VQ0ggJHtvdXR9L2V4aXN0aW5nLnR4dCkKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmcKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAke291dH0vZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX2ZvcmNlX25vbl9leGlzdGluZworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mICR7b3V0fS9ub3RfZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX25vbl9mb3JjZV9ub25fZXhpc3RpbmcKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAke291dH0vbm90X2V4aXN0aW5nLnR4dCkKKworZmlsZShUT1VDSCAke291dH0vZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX3JlY3Vyc2l2ZV9leGlzdGluZworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yICR7b3V0fS9leGlzdGluZy50eHQpCitydW5fY21ha2VfY29tbWFuZChFX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yICR7b3V0fS9ub3RfZXhpc3RpbmcudHh0KQorCitmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fS9kMSAke291dH0vZDIpCitydW5fY21ha2VfY29tbWFuZChFX3JtX25vbl9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3RvcmllcworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtICR7b3V0fS9kMSAke291dH0vZDIpCisKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtUiAke291dH0vZDEgJHtvdXR9L2QyKQorCitydW5fY21ha2VfY29tbWFuZChFX3JtX25vX2ZpbGVfc3BlY2lmaWVkCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmKQorCitydW5fY21ha2VfY29tbWFuZChFX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkCisgICR7Q01BS0VfQ09NTUFORH0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9FX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkLmNtYWtlKQorCitydW5fY21ha2VfY29tbWFuZChFX3JtX2JhZF9hcmd1bWVudAorICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZCAke291dH0vZDEgJHtvdXR9L2QyKQorCitmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fS9kMSAke291dH0vZDIpCitmaWxlKFdSSVRFICR7b3V0fS90ZXN0LnR4dCAiIikKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmICR7b3V0fS8pCisKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fZm9yY2VfcmVjdXJzaXZlX25vbl9leGlzdGluZ19maWxlCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLVJmICR7b3V0fS90ZXN0LnR4dCkKKworaWYoTk9UIFdJTjMyIEFORCBOT1QgQ1lHV0lOKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fSkKKyAgZmlsZShUT1VDSCAke291dH0vZXhpc3RpbmcudHh0KQorICBmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fS9kaXIpCisgIGZpbGUoVE9VQ0ggJHtvdXR9L2Rpci9leGlzdGluZy50eHQpICMgYWRkIGEgZmlsZSBpbiB0aGUgZm9sZGVyCisgIGZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9L2RpciAke291dH0vbGlua19kaXIgU1lNQk9MSUMpCisgIGZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9L2V4aXN0aW5nLnR4dCAke291dH0vZXhpc3RpbmdfZmlsZV9saW5rLnR4dCBTWU1CT0xJQykKKyAgZmlsZShDUkVBVEVfTElOSyAke291dH0vbm9uX2V4aXN0aW5nLnR4dCAke291dH0vbm9uX2V4aXN0aW5nX2ZpbGVfbGluay50eHQgU1lNQk9MSUMpCisgIHJ1bl9jbWFrZV9jb21tYW5kKEVfcm1fZmlsZV9saW5rX2V4aXN0aW5nCisgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAke291dH0vZXhpc3RpbmdfZmlsZV9saW5rLnR4dCkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZworICAgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gJHtvdXR9L2xpbmtfZGlyKQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX2ZpbGVfbGlua19ub25fZXhpc3RpbmcKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtICR7b3V0fS9ub25fZXhpc3RpbmdfZmlsZV9saW5rLnR4dCkKKworICBmaWxlKENSRUFURV9MSU5LICR7b3V0fS9kaXIgJHtvdXR9L2xpbmtfZGlyIFNZTUJPTElDKQorICBmaWxlKENSRUFURV9MSU5LICR7b3V0fS9leGlzdGluZy50eHQgJHtvdXR9L2V4aXN0aW5nX2ZpbGVfbGluay50eHQgU1lNQk9MSUMpCisgIGZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9L25vbl9leGlzdGluZy50eHQgJHtvdXR9L25vbl9leGlzdGluZ19maWxlX2xpbmsudHh0IFNZTUJPTElDKQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfZXhpc3RpbmcKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1SICR7b3V0fS9leGlzdGluZ19maWxlX2xpbmsudHh0KQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnlfbGlua19leGlzdGluZworICAgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXIgJHtvdXR9L2xpbmtfZGlyKQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfbm9uX2V4aXN0aW5nCisgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtciAke291dH0vbm9uX2V4aXN0aW5nX2ZpbGVfbGluay50eHQpCitlbmRpZigpCit1bnNldChvdXQpCiAKIHJ1bl9jbWFrZV9jb21tYW5kKEVfZW52LW5vLWNvbW1hbmQwICR7Q01BS0VfQ09NTUFORH0gLUUgZW52KQogcnVuX2NtYWtlX2NvbW1hbmQoRV9lbnYtbm8tY29tbWFuZDEgJHtDTUFLRV9DT01NQU5EfSAtRSBlbnYgVEVTVF9FTlY9MSkKQEAgLTUxOSw2ICs2MDcsMTQgQEAKIHJ1bl9jbWFrZSh0cmFjZS1yZWRpcmVjdC1ub2ZpbGUpCiB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCiAKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS10cmFjZSAgICAgICAgLS10cmFjZS1mb3JtYXQ9anNvbi12MSAtLXRyYWNlLXJlZGlyZWN0PSR7UnVuQ01ha2VfQklOQVJZX0RJUn0vanNvbi12MS50cmFjZSkKK3J1bl9jbWFrZSh0cmFjZS1qc29uLXYxKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC0tdHJhY2UtZXhwYW5kIC0tdHJhY2UtZm9ybWF0PWpzb24tdjEgLS10cmFjZS1yZWRpcmVjdD0ke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2pzb24tdjEtZXhwYW5kLnRyYWNlKQorcnVuX2NtYWtlKHRyYWNlLWpzb24tdjEtZXhwYW5kKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCiBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1Xbm8tZGVwcmVjYXRlZCAtLXdhcm4tdW5pbml0aWFsaXplZCkKIHJ1bl9jbWFrZSh3YXJuLXVuaW5pdGlhbGl6ZWQpCiB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCkBAIC01NzEsMyArNjY3LDU0IEBACiAgIHJ1bl9jbWFrZV9jb21tYW5kKGNsb3NlZF9zdGRlcnIgc2ggLWMgIlwiJHtDTUFLRV9DT01NQU5EfVwiIC0tdmVyc2lvbiAyPiYtIikKICAgcnVuX2NtYWtlX2NvbW1hbmQoY2xvc2VkX3N0ZGFsbCBzaCAtYyAiXCIke0NNQUtFX0NPTU1BTkR9XCIgLS12ZXJzaW9uIDwmLSA+Ji0gMj4mLSIpCiBlbmRpZigpCisKK2Z1bmN0aW9uKHJ1bl9sbHZtX3JjKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2xsdm1fcmMtYnVpbGQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX25vX2FyZ3MgJHtDTUFLRV9DT01NQU5EfSAtRSBjbWFrZV9sbHZtX3JjKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX25vXy0tICR7Q01BS0VfQ09NTUFORH0gLUUgY21ha2VfbGx2bV9yYyB0ZXN0LnRtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gIlRoaXMgaXMgYSB0ZXN0IikKKyAgcnVuX2NtYWtlX2NvbW1hbmQobGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3IgJHtDTUFLRV9DT01NQU5EfSAtRSBjbWFrZV9sbHZtX3JjIHRlc3QudG1wIC0tICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAiVGhpcyBpcyBhIHRlc3QiKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX2ZhaWxpbmdfZmlyc3RfY29tbWFuZCAke0NNQUtFX0NPTU1BTkR9IC1FIGNtYWtlX2xsdm1fcmMgdGVzdC50bXAgJHtDTUFLRV9DT01NQU5EfSAtUCBGYWlsZWRQcm9ncmFtLmNtYWtlIC0tICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAiVGhpcyBpcyBhIHRlc3QiKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX2ZhaWxpbmdfc2Vjb25kX2NvbW1hbmQgJHtDTUFLRV9DT01NQU5EfSAtRSBjbWFrZV9sbHZtX3JjIHRlc3QudG1wICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAiVGhpcyBpcyBhIHRlc3QiIC0tICR7Q01BS0VfQ09NTUFORH0gLVAgRmFpbGVkUHJvZ3JhbS5jbWFrZSApCisgIGlmKEVYSVNUUyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGVzdC50bXApCisgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIiR7dGVzdH0gLSBGQUlMRUQ6XG4iCisgICAgICAgICJ0ZXN0LnRtcCB3YXMgbm90IGRlbGV0ZWQiKQorICBlbmRpZigpCisgIHJ1bl9jbWFrZV9jb21tYW5kKGxsdm1fcmNfZnVsbF9ydW4gJHtDTUFLRV9DT01NQU5EfSAtRSBjbWFrZV9sbHZtX3JjIHRlc3QudG1wICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAiVGhpcyBpcyBhIHRlc3QiIC0tICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSB0ZXN0LnRtcCBsbHZtcmMucmVzdWx0ICkKKyAgaWYoRVhJU1RTICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90ZXN0LnRtcCkKKyAgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiJHt0ZXN0fSAtIEZBSUxFRDpcbiIKKyAgICAgICAgInRlc3QudG1wIHdhcyBub3QgZGVsZXRlZCIpCisgIGVuZGlmKCkKKyAgZmlsZShSRUFEICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9sbHZtcmMucmVzdWx0IExMVk1SQ19SRVNVTFQpCisgIGlmKE5PVCAiJHtMTFZNUkNfUkVTVUxUfSIgU1RSRVFVQUwgIlRoaXMgaXMgYSB0ZXN0XG4iKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiJHt0ZXN0fSAtIEZBSUxFRDpcbiIKKyAgICAgICAgImxsdm1yYy5yZXN1bHQgd2FzIG5vdCBjcmVhdGVkIikKKyAgZW5kaWYoKQorICAjICBmaWxlKFJFTU9WRSAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vbGx2bXJjLnJlc3VsdCkKKyAgdW5zZXQoTExWTVJDX1JFU1VMVCkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9sbHZtX3JjKCkKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1vdXRwdXQ9L25vL3N1Y2gvZmlsZS50eHQgLS1wcm9maWxpbmctZm9ybWF0PWdvb2dsZS10cmFjZSkKK3J1bl9jbWFrZShwcm9maWxpbmctYWxsLXBhcmFtcykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1vdXRwdXQ9L25vL3N1Y2gvZmlsZS50eHQgLS1wcm9maWxpbmctZm9ybWF0PWludmFsaWQtZm9ybWF0KQorcnVuX2NtYWtlKHByb2ZpbGluZy1pbnZhbGlkLWZvcm1hdCkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1vdXRwdXQ9L25vL3N1Y2gvZmlsZS50eHQpCitydW5fY21ha2UocHJvZmlsaW5nLW1pc3NpbmctZm9ybWF0KQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC0tcHJvZmlsaW5nLWZvcm1hdD1nb29nbGUtdHJhY2UpCitydW5fY21ha2UocHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0KQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3Byb2ZpbGluZy10ZXN0IikKK3NldChQcm9maWxpbmdUZXN0T3V0cHV0ICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9vdXRwdXQuanNvbikKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS1wcm9maWxpbmctZm9ybWF0PWdvb2dsZS10cmFjZSAtLXByb2ZpbGluZy1vdXRwdXQ9JHtQcm9maWxpbmdUZXN0T3V0cHV0fSkKK3J1bl9jbWFrZShQcm9maWxpbmdUZXN0KQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLW92ZXJyaWRlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLW92ZXJyaWRlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmExYWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtb3ZlcnJpZGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9jb21waWxlX2NvbW1hbmRzLmpzb24iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImNvbXBpbGVfY29tbWFuZHMuanNvbiBnZW5lcmF0ZWQgd2l0aCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBvdmVycmlkZGVuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2Vudi1leHBvcnQtY29tcGlsZS1jb21tYW5kcy1zZXQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtc2V0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDlhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtc2V0LWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoTk9UIEVYSVNUUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2NvbXBpbGVfY29tbWFuZHMuanNvbiIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiY29tcGlsZV9jb21tYW5kcy5qc29uIG5vdCBnZW5lcmF0ZWQgd2l0aCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBzZXQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLXVuc2V0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLXVuc2V0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODc4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtdW5zZXQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9jb21waWxlX2NvbW1hbmRzLmpzb24iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImNvbXBpbGVfY29tbWFuZHMuanNvbiBnZW5lcmF0ZWQgd2l0aCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyB1bnNldCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2ZmJmZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2Vudi1leHBvcnQtY29tcGlsZS1jb21tYW5kcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDcgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE0KQorcHJvamVjdChlbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMgQykKKworIyBBZGQgdGFyZ2V0IHdpdGggYSBzb3VyY2UgZmlsZSB0byBtYWtlIHN1cmUgY29tcGlsZV9jb21tYW5kcy5qc29uIGdldHMKKyMgZ2VuZXJhdGVkLgorZmlsZShUT1VDSCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbWFpbi5jKQorYWRkX2V4ZWN1dGFibGUoZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9tYWluLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3ItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2VtcHR5X3ByZXByb2Nlc3Nvci1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2VtcHR5X3ByZXByb2Nlc3Nvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3Itc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjY5MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3Itc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitFbXB0eSBwcmVwcm9jZXNzaW5nIGNvbW1hbmQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfZmlyc3RfY29tbWFuZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfZmFpbGluZ19maXJzdF9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfZmFpbGluZ19maXJzdF9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfZmlyc3RfY29tbWFuZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfZmlyc3RfY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK0NNYWtlIEVycm9yCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX3NlY29uZF9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX3NlY29uZF9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfZmFpbGluZ19zZWNvbmRfY29tbWFuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX3NlY29uZF9jb21tYW5kLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1YjcwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfZmFpbGluZ19zZWNvbmRfY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK0NNYWtlIEVycm9yCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19ub18tLS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfbm9fLS0tcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19ub18tLS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19ub18tLS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMTQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vXy0tLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorRW1wdHkgcmVzb3VyY2UgY29tcGlsYXRpb24gY29tbWFuZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfbm9fYXJncy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfbm9fYXJncy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vX2FyZ3Mtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfbm9fYXJncy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NmI1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vX2FyZ3Mtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitJbnZhbGlkIGNtYWtlX2xsdm1fcmMgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctYWxsLXBhcmFtcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctYWxsLXBhcmFtcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjVjMzczCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteLipDb3VsZCBub3Qgc3RhcnQgcHJvZmlsaW5nOiBVbmFibGUgdG8gb3BlbjogL25vL3N1Y2gvZmlsZS50eHQkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWludmFsaWQtZm9ybWF0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWludmFsaWQtZm9ybWF0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWludmFsaWQtZm9ybWF0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5YmMzYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK14uKkludmFsaWQgZm9ybWF0IHNwZWNpZmllZCBmb3IgLS1wcm9maWxpbmctZm9ybWF0JApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLWZvcm1hdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLWZvcm1hdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLWZvcm1hdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWJjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteLipJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1vdXRwdXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1vdXRwdXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1vdXRwdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWIwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXi4qLS1wcm9maWxpbmctZm9ybWF0IHNwZWNpZmllZCBidXQgbm8gLS1wcm9maWxpbmctb3V0cHV0ISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWYwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2lmKFBZVEhPTl9FWEVDVVRBQkxFKQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS90cmFjZS1qc29uLXYxLWNoZWNrLnB5IiAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9qc29uLXYxLnRyYWNlIgorICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0CisgICAgRVJST1JfVkFSSUFCTEUgb3V0cHV0CisgICAgKQorICBpZihOT1QgcmVzdWx0IEVRVUFMIDApCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJKU09OIHRyYWNlIHZhbGlkYXRpb24gZmFpbGVkOlxuJHtvdXRwdXR9IikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS1jaGVjay5weSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtY2hlY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTYxN2I3NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtY2hlY2sucHkKQEAgLTAsMCArMSw3NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKKyAgICB1bmljb2RlID0gc3RyCisKK3RyYWNlX2ZpbGUgPSBOb25lCitleHBhbmQgPSBGYWxzZQorCitmb3IgaSBpbiBzeXMuYXJndlsxOl06CisgICAgaWYgdHJhY2VfZmlsZSBpcyBOb25lIGFuZCBub3QgaS5zdGFydHN3aXRoKCctJyk6CisgICAgICAgIHRyYWNlX2ZpbGUgPSBpCisgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiBpIGluIFsnLWUnLCAnLS1leHBhbmQnXToKKyAgICAgICAgZXhwYW5kID0gVHJ1ZQorCithc3NlcnQgdHJhY2VfZmlsZSBpcyBub3QgTm9uZQorYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHRyYWNlX2ZpbGUpCisKK2lmIGV4cGFuZDoKKyAgICBtc2dfYXJncyA9IFsnU1RBVFVTJywgJ2ZmZicsICdmZmY7c3NzOyAgU1BBQ0VTICEhISAgJywgJyA0MiAgc3BhY2UgaW4gc3RyaW5nIScsICcgIFNQQUNFUyAhISEgICddCitlbHNlOgorICAgIG1zZ19hcmdzID0gWydTVEFUVVMnLCAnZmZmJywgJyR7QVNERn0nLCAnICR7Rk9PfSAke0JBUn0nLCAnICBTUEFDRVMgISEhICAnXQorCityZXF1aXJlZF90cmFjZXMgPSBbCisgICAgeworICAgICAgICAnYXJncyc6IFsnU1RBVFVTJywgJ0pTT04tVjEgc3RyJywgJ3NwYWNlcyddLAorICAgICAgICAnY21kJzogJ21lc3NhZ2UnLAorICAgIH0sCisgICAgeworICAgICAgICAnYXJncyc6IFsnQVNERicsICdmZmYnLCAnc3NzJywgJyAgU1BBQ0VTICEhISAgJ10sCisgICAgICAgICdjbWQnOiAnc2V0JywKKyAgICB9LAorICAgIHsKKyAgICAgICAgJ2FyZ3MnOiBbJ0ZPTycsICc0MiddLAorICAgICAgICAnY21kJzogJ3NldCcsCisgICAgfSwKKyAgICB7CisgICAgICAgICdhcmdzJzogWydCQVInLCAnIHNwYWNlIGluIHN0cmluZyEnXSwKKyAgICAgICAgJ2NtZCc6ICdzZXQnLAorICAgIH0sCisgICAgeworICAgICAgICAnYXJncyc6IG1zZ19hcmdzLAorICAgICAgICAnY21kJzogJ21lc3NhZ2UnLAorICAgICAgICAnZnJhbWUnOiAzIGlmIGV4cGFuZCBlbHNlIDIKKyAgICB9LAorXQorCit3aXRoIG9wZW4odHJhY2VfZmlsZSwgJ3InKSBhcyBmcDoKKyAgICAjIENoZWNrIGZvciB2ZXJzaW9uIChtdXN0IGJlIHRoZSBmaXJzdCBkb2N1bWVudCkKKyAgICB2ZXJzID0ganNvbi5sb2FkcyhmcC5yZWFkbGluZSgpKQorICAgIGFzc2VydCBzb3J0ZWQodmVycy5rZXlzKCkpID09IFsndmVyc2lvbiddCisgICAgYXNzZXJ0IHNvcnRlZCh2ZXJzWyd2ZXJzaW9uJ10ua2V5cygpKSA9PSBbJ21ham9yJywgJ21pbm9yJ10KKyAgICBhc3NlcnQgdmVyc1sndmVyc2lvbiddWydtYWpvciddID09IDEKKyAgICBhc3NlcnQgdmVyc1sndmVyc2lvbiddWydtaW5vciddID09IDAKKworICAgIGZvciBpIGluIGZwLnJlYWRsaW5lcygpOgorICAgICAgICBsaW5lID0ganNvbi5sb2FkcyhpKQorICAgICAgICBhc3NlcnQgc29ydGVkKGxpbmUua2V5cygpKSA9PSBbJ2FyZ3MnLCAnY21kJywgJ2ZpbGUnLCAnZnJhbWUnLCAnbGluZScsICd0aW1lJ10KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZVsnYXJncyddLCBsaXN0KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5lWydjbWQnXSwgdW5pY29kZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZVsnZmlsZSddLCB1bmljb2RlKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5lWydmcmFtZSddLCBpbnQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVbJ2xpbmUnXSwgaW50KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5lWyd0aW1lJ10sIGZsb2F0KQorCisgICAgICAgIGZvciBqIGluIHJlcXVpcmVkX3RyYWNlczoKKyAgICAgICAgICAgICMgQ29tcGFyZSB0aGUgc3Vic2V0IG9mIHJlcXVpcmVkIGtleXMgd2l0aCBsaW5lCisgICAgICAgICAgICBpZiB7azogbGluZVtrXSBmb3IgayBpbiBqfSA9PSBqOgorICAgICAgICAgICAgICAgIHJlcXVpcmVkX3RyYWNlcy5yZW1vdmUoaikKKworYXNzZXJ0IG5vdCByZXF1aXJlZF90cmFjZXMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtZXhwYW5kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS1leHBhbmQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxNmQyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtZXhwYW5kLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2lmKFBZVEhPTl9FWEVDVVRBQkxFKQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS90cmFjZS1qc29uLXYxLWNoZWNrLnB5IiAtLWV4cGFuZCAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9qc29uLXYxLWV4cGFuZC50cmFjZSIKKyAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAorICAgIEVSUk9SX1ZBUklBQkxFIG91dHB1dAorICAgICkKKyAgaWYoTk9UIHJlc3VsdCBFUVVBTCAwKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiSlNPTiB0cmFjZSB2YWxpZGF0aW9uIGZhaWxlZDpcbiR7b3V0cHV0fSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtZXhwYW5kLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS1leHBhbmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxOTBlNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtZXhwYW5kLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUodHJhY2UtanNvbi12MS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMGEwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorbWVzc2FnZShTVEFUVVMgIkpTT04tVjEgc3RyIiAic3BhY2VzIikKK3NldChBU0RGIGZmZiBzc3MgIiAgU1BBQ0VTICEhISAgIikKK3NldChGT08gNDIpCitzZXQoQkFSICIgc3BhY2UgaW4gc3RyaW5nISIpCittZXNzYWdlKFNUQVRVUyBmZmYgJHtBU0RGfSAiICR7Rk9PfSAke0JBUn0iICIgIFNQQUNFUyAhISEgICIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIwMDRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWVudi1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWVudi1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qLUUgZW52IFVTRURfTEFVTkNIRVI9MS4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWI1MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWVudi5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKEMtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWxhdW5jaC1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtbGF1bmNoLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGFiY2I1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWxhdW5jaC1lbnYuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ1RFU1RfVVNFX0xBVU5DSEVSUyAxKQoraW5jbHVkZShDVGVzdFVzZUxhdW5jaGVycykKK2luY2x1ZGUoQy1lbnYuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MuY21ha2UKaW5kZXggNjdiZjdjNC4uNDgxZTc0ZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy5jbWFrZQpAQCAtMSw0ICsxLDIgQEAKLWVuYWJsZV9sYW5ndWFnZShDKQogc2V0KENNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVIgIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCi1zZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQotYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLmMpCitpbmNsdWRlKEMtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLWNvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1jb21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3ZmM4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1jb21tb24uY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKK3NldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCithZGRfZXhlY3V0YWJsZShtYWluIG1haW4uY3UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZmJlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoQ1VEQS1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDc3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtbGF1bmNoLWVudi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDVEVTVF9VU0VfTEFVTkNIRVJTIDEpCitpbmNsdWRlKENUZXN0VXNlTGF1bmNoZXJzKQoraW5jbHVkZShDVURBLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS5jbWFrZQppbmRleCBmZTU1NjBiLi43ZjE2NTJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKENVREEpCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4uY3UpCitpbmNsdWRlKENVREEtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMmVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1jb21tb24uY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5jeHgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1lbnYtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWVudi1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjM2OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoQ1hYLWNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWxhdW5jaC1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NWNjODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1sYXVuY2gtZW52LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENURVNUX1VTRV9MQVVOQ0hFUlMgMSkKK2luY2x1ZGUoQ1Rlc3RVc2VMYXVuY2hlcnMpCitpbmNsdWRlKENYWC1lbnYuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLmNtYWtlCmluZGV4IGNkZDM0NzguLjFmOWExMmIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKENYWCkKIHNldChDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVIgIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCi1zZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQotYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLmN4eCkKK2luY2x1ZGUoQ1hYLWNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1jb21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzM2MyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorZW5hYmxlX2xhbmd1YWdlKEZvcnRyYW4pCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLkYpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9Gb3J0cmFuLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzI3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoRm9ydHJhbi1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTE5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tbGF1bmNoLWVudi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDVEVTVF9VU0VfTEFVTkNIRVJTIDEpCitpbmNsdWRlKENUZXN0VXNlTGF1bmNoZXJzKQoraW5jbHVkZShGb3J0cmFuLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi5jbWFrZQppbmRleCA3MmNjMDNlLi5kYzQ2MTczIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4uY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9Gb3J0cmFuLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKEZvcnRyYW4pCiBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4uRikKK2luY2x1ZGUoRm9ydHJhbi1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU2NWY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShPQkpDKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5tKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQy1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qLUUgZW52IFVTRURfTEFVTkNIRVI9MS4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDllODhkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKE9CSkMtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWxhdW5jaC1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtbGF1bmNoLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2YxM2QzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWxhdW5jaC1lbnYuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ1RFU1RfVVNFX0xBVU5DSEVSUyAxKQoraW5jbHVkZShDVGVzdFVzZUxhdW5jaGVycykKK2luY2x1ZGUoT0JKQy1lbnYuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMuY21ha2UKaW5kZXggNTVjNDQ5My4uMzM3NGU4MiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQy5jbWFrZQpAQCAtMSw0ICsxLDIgQEAKLWVuYWJsZV9sYW5ndWFnZShPQkpDKQogc2V0KENNQUtFX09CSkNfQ09NUElMRVJfTEFVTkNIRVIgIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCi1zZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQotYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLm0pCitpbmNsdWRlKE9CSkMtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWU0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1jb21tb24uY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoT0JKQ1hYKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5tbSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWVudi1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWVudi1CdWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qLUUgZW52IFVTRURfTEFVTkNIRVI9MS4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtZW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDk2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1lbnYuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShPQkpDWFgtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWxhdW5jaC1lbnYuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjOTE2YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWxhdW5jaC1lbnYuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ1RFU1RfVVNFX0xBVU5DSEVSUyAxKQoraW5jbHVkZShDVGVzdFVzZUxhdW5jaGVycykKK2luY2x1ZGUoT0JKQ1hYLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFguY21ha2UKaW5kZXggZTYyOTYwMy4uOTkzZWM5MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFguY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFguY21ha2UKQEAgLTEsNCArMSwyIEBACi1lbmFibGVfbGFuZ3VhZ2UoT0JKQ1hYKQogc2V0KENNQUtFX09CSkNYWF9DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4ubW0pCitpbmNsdWRlKE9CSkNYWC1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDQ0MjAyNjAuLjY5ZmZmMjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC05LDEyICs5LDE5IEBACiAgIHJ1bl9jbWFrZSgke2xhbmd9KQogCiAgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAxKQotICBpZigiJHtSdW5DTWFrZV9HRU5FUkFUT1J9IiBTVFJFUVVBTCAiTmluamEiKQorICBpZigiJHtSdW5DTWFrZV9HRU5FUkFUT1J9IiBNQVRDSEVTICJOaW5qYSIpCiAgICAgc2V0KHZlcmJvc2VfYXJncyAtLSAtdikKICAgZW5kaWYoKQogICBydW5fY21ha2VfY29tbWFuZCgke2xhbmd9LUJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuICR7dmVyYm9zZV9hcmdzfSkKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24ocnVuX2NvbXBpbGVyX2xhdW5jaGVyX2VudiBsYW5nKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLS4qIiAiIiBjb3JlX2xhbmcgIiR7bGFuZ30iKQorICBzZXQoRU5We0NNQUtFXyR7Y29yZV9sYW5nfV9DT01QSUxFUl9MQVVOQ0hFUn0gIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCisgIHJ1bl9jb21waWxlcl9sYXVuY2hlcigke2xhbmd9KQorICB1bnNldChFTlZ7Q01BS0VfJHtjb3JlX2xhbmd9X0NPTVBJTEVSX0xBVU5DSEVSfSkKK2VuZGZ1bmN0aW9uKCkKKwogc2V0KGxhbmdzIEMgQ1hYKQogaWYoQ01ha2VfVEVTVF9DVURBKQogICBsaXN0KEFQUEVORCBsYW5ncyBDVURBKQpAQCAtMjgsNyArMzUsOSBAQAogCiBmb3JlYWNoKGxhbmcgJHtsYW5nc30pCiAgIHJ1bl9jb21waWxlcl9sYXVuY2hlcigke2xhbmd9KQorICBydW5fY29tcGlsZXJfbGF1bmNoZXJfZW52KCR7bGFuZ30tZW52KQogICBpZiAoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUiBTVFJFUVVBTCAiV2F0Y29tIFdNYWtlIikKICAgICBydW5fY29tcGlsZXJfbGF1bmNoZXIoJHtsYW5nfS1sYXVuY2gpCisgICAgcnVuX2NvbXBpbGVyX2xhdW5jaGVyX2Vudigke2xhbmd9LWxhdW5jaC1lbnYpCiAgIGVuZGlmKCkKIGVuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9DUk9TU19DT05GSUdTLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1Mtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWQxNDlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfQ1JPU1NfQ09ORklHUy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTEgQEAKK15DTWFrZSBFcnJvcjoKKyAgR2VuZXJhdG9yCisKKyAgICBbXgorXSoKKworICBkb2VzIG5vdCBzdXBwb3J0IHZhcmlhYmxlCisKKyAgICBDTUFLRV9DUk9TU19DT05GSUdTCisKKyAgYnV0IGl0IGhhcyBiZWVuIHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9DUk9TU19DT05GSUdTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDBjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9DUk9TU19DT05GSUdTLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3NldChDTUFLRV9DUk9TU19DT05GSUdTICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTNlZDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDExIEBACiteQ01ha2UgRXJyb3I6CisgIEdlbmVyYXRvcgorCisgICAgW14KK10qCisKKyAgZG9lcyBub3Qgc3VwcG9ydCB2YXJpYWJsZQorCisgICAgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFCisKKyAgYnV0IGl0IGhhcyBiZWVuIHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGM3ZmViCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3NldChDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUgIiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQ09ORklHUy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwYmY0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQ09ORklHUy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTEgQEAKK15DTWFrZSBFcnJvcjoKKyAgR2VuZXJhdG9yCisKKyAgICBbXgorXSoKKworICBkb2VzIG5vdCBzdXBwb3J0IHZhcmlhYmxlCisKKyAgICBDTUFLRV9ERUZBVUxUX0NPTkZJR1MKKworICBidXQgaXQgaGFzIGJlZW4gc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjUxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0NPTkZJR1MuY21ha2UKQEAgLTAsMCArMSBAQAorc2V0KENNQUtFX0RFRkFVTFRfQ09ORklHUyAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDc2ZDg0M2MuLjlmZDQ0OTkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNTAsMyArNTAsOSBAQAogcnVuX2NtYWtlKFJlbW92ZUNhY2hlKQogZmlsZShSRU1PVkUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUNhY2hlLnR4dCIpCiBydW5fY21ha2UoUmVtb3ZlQ2FjaGUpCisKK2lmKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiXk5pbmphIE11bHRpLUNvbmZpZyQiKQorICBydW5fY21ha2UoTm9DTUFLRV9DUk9TU19DT05GSUdTKQorICBydW5fY21ha2UoTm9DTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUpCisgIHJ1bl9jbWFrZShOb0NNQUtFX0RFRkFVTFRfQ09ORklHUykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2guY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIpCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5BTUVNSVNNQVRDSCBSRVFVSVJFRF9WQVJTICIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiKQorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9GT1VORCIgMSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2hPbGQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoT2xkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoT2xkLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIpCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5BTUVNSVNNQVRDSCAib2xkIHNpZ25hdHVyZSIgIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIpCitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIiAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoU3VwcHJlc3NlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJhNTlhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWQuY21ha2UKQEAgLTAsMCArMSw2IEBACitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IikKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitzZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEIDEpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTkFNRU1JU01BVENIICJvbGQgc2lnbmF0dXJlIiAiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTU9EVUxFIikKK3Vuc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCkKK3NldCgiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fRk9VTkQiIDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoU3VwcHJlc3NlZEFyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2hTdXBwcmVzc2VkQXJnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMGU5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoU3VwcHJlc3NlZEFyZy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldCgiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTU9EVUxFIiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQoraW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhOQU1FTUlTTUFUQ0ggTkFNRV9NSVNNQVRDSEVEIFJFUVVJUkVEX1ZBUlMgIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIpCitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIiAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWRDb21wYXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoU3VwcHJlc3NlZENvbXBhdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTFjZmVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWRDb21wYXQuY21ha2UKQEAgLTAsMCArMSw2IEBACitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IikKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitzZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEIDEpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTkFNRU1JU01BVENIIFJFUVVJUkVEX1ZBUlMgIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIpCit1bnNldChGUEhTQV9OQU1FX01JU01BVENIRUQpCitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIiAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvTmFtZU1pc21hdGNoLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9OYW1lTWlzbWF0Y2gtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjJiNTBiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvTmFtZU1pc21hdGNoLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyMyBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IC4qL01vZHVsZXMvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgorICBUaGUgcGFja2FnZSBuYW1lIHBhc3NlZCB0byBgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzYAorICBcKE5BTUVNSVNNQVRDSFwpIGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBjYWxsaW5nIHBhY2thZ2UKKyAgXChOYW1lTWlzbWF0Y2hcKS4gIFRoaXMgY2FuIGxlYWQgdG8gcHJvYmxlbXMgaW4gY2FsbGluZyBjb2RlIHRoYXQgZXhwZWN0cworICBgZmluZF9wYWNrYWdlYCByZXN1bHQgdmFyaWFibGVzIFwoZS5nLiwgYF9GT1VORGBcKSB0byBmb2xsb3cgYSBjZXJ0YWluCisgIHBhdHRlcm4uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBGaW5kTmFtZU1pc21hdGNoLmNtYWtlOjMgXChmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3NcKQorICBOYW1lTWlzbWF0Y2guY21ha2U6MyBcKGZpbmRfcGFja2FnZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgorCitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgLiovTW9kdWxlcy9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisgIFRoZSBwYWNrYWdlIG5hbWUgcGFzc2VkIHRvIGBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3NgCisgIFwoTkFNRU1JU01BVENIXCkgZG9lcyBub3QgbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIGNhbGxpbmcgcGFja2FnZQorICBcKE5hbWVNaXNtYXRjaE9sZFwpLiAgVGhpcyBjYW4gbGVhZCB0byBwcm9ibGVtcyBpbiBjYWxsaW5nIGNvZGUgdGhhdCBleHBlY3RzCisgIGBmaW5kX3BhY2thZ2VgIHJlc3VsdCB2YXJpYWJsZXMgXChlLmcuLCBgX0ZPVU5EYFwpIHRvIGZvbGxvdyBhIGNlcnRhaW4KKyAgcGF0dGVybi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIEZpbmROYW1lTWlzbWF0Y2hPbGQuY21ha2U6MyBcKGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJnc1wpCisgIE5hbWVNaXNtYXRjaC5jbWFrZTo0IFwoZmluZF9wYWNrYWdlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9OYW1lTWlzbWF0Y2guY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9OYW1lTWlzbWF0Y2guY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhM2NjNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL05hbWVNaXNtYXRjaC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK3NldChDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKKworZmluZF9wYWNrYWdlKE5hbWVNaXNtYXRjaCBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShOYW1lTWlzbWF0Y2hPbGQgUkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoTmFtZU1pc21hdGNoU3VwcHJlc3NlZCBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShOYW1lTWlzbWF0Y2hTdXBwcmVzc2VkQ29tcGF0IFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKE5hbWVNaXNtYXRjaFN1cHByZXNzZWRBcmcgUkVRVUlSRUQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggZjNlNmMzZS4uMjg2OTE1ZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw2ICsxLDcgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKIHJ1bl9jbWFrZShCYWRGb3VuZFZhcikKK3J1bl9jbWFrZShOYW1lTWlzbWF0Y2gpCiAKICMgVGhlIHBzZXVkbyBtb2R1bGUgd2lsbCAiZmluZCIgYSBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIHZlcnNpb24uIENoZWNrIGlmIHRoZQogIyB2ZXJzaW9uIHNlbGVjdGlvbiBjb2RlIGluIEZQSFNBIHdvcmtzIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggZjhhZGI2NC4uOGNkYzAwYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTM0LDYgKzM0LDEwIEBACiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIAoraWYoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZVxcO01pblNpemVSZWxcXDtSZWxXaXRoRGViSW5mbyIpCitlbmRpZigpCisKIHJ1bl9jbWFrZShOb3RoaW5nKQogcnVuX2NtYWtlKEVtcHR5KQogcnVuX2NtYWtlKEVtcHR5Q2xpZW50KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jaGVja19pbmRleC5weSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY2hlY2tfaW5kZXgucHkKaW5kZXggY2RhNzIzNC4uMjAyNDNjMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jaGVja19pbmRleC5weQorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NoZWNrX2luZGV4LnB5CkBAIC0xMDksMTAgKzEwOSwxMSBAQAogICAgIG5hbWUgPSBnLmdldCgibmFtZSIsIE5vbmUpCiAgICAgYXNzZXJ0IGlzX3N0cmluZyhuYW1lKQogICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiVmlzdWFsIFN0dWRpbyIpOgotICAgICAgICBhc3NlcnQgc29ydGVkKGcua2V5cygpKSA9PSBbIm5hbWUiLCAicGxhdGZvcm0iXQorICAgICAgICBhc3NlcnQgc29ydGVkKGcua2V5cygpKSA9PSBbIm11bHRpQ29uZmlnIiwgIm5hbWUiLCAicGxhdGZvcm0iXQogICAgICAgICBhc3NlcnQgaXNfc3RyaW5nKGdbInBsYXRmb3JtIl0pCiAgICAgZWxzZToKLSAgICAgICAgYXNzZXJ0IHNvcnRlZChnLmtleXMoKSkgPT0gWyJuYW1lIl0KKyAgICAgICAgYXNzZXJ0IHNvcnRlZChnLmtleXMoKSkgPT0gWyJtdWx0aUNvbmZpZyIsICJuYW1lIl0KKyAgICBhc3NlcnQgaXNfYm9vbChnWyJtdWx0aUNvbmZpZyJdLCBtYXRjaGVzKG5hbWUsICJeKFZpc3VhbCBTdHVkaW8gfFhjb2RlJHxOaW5qYSBNdWx0aS1Db25maWckKSIpKQogCiBkZWYgY2hlY2tfaW5kZXhfb2JqZWN0KGluZGV4RW50cnksIGtpbmQsIG1ham9yLCBtaW5vciwgY2hlY2spOgogICAgIGFzc2VydCBpc19kaWN0KGluZGV4RW50cnkpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1jaGVjay5weSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWNoZWNrLnB5CmluZGV4IDY2YzU1OWQuLjllZTBjMjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWNoZWNrLnB5CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWNoZWNrLnB5CkBAIC0xLDggKzEsMTQgQEAKIGZyb20gY2hlY2tfaW5kZXggaW1wb3J0ICoKIAoraW1wb3J0IGpzb24KIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCitkZWYgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKGZpbGVuYW1lKToKKyAgICBhYnNfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSwgImNvZGVtb2RlbC12Mi1kYXRhIiwgZmlsZW5hbWUpCisgICAgd2l0aCBvcGVuKGFic19maWxlbmFtZSwgInIiKSBhcyBmOgorICAgICAgICByZXR1cm4ganNvbi5sb2FkKGYpCisKIGRlZiBjaGVja19vYmplY3RzKG8sIGcpOgogICAgIGFzc2VydCBpc19saXN0KG8pCiAgICAgYXNzZXJ0IGxlbihvKSA9PSAxCkBAIC00NzEsMTYyICs0NzcsMjMgQEAKIAogZGVmIGdlbl9jaGVja19kaXJlY3RvcmllcyhjLCBnKToKICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgewotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6IE5vbmUsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeYWxpYXMkIiwKLSAgICAgICAgICAgICAgICAiXmN1c3RvbSQiLAotICAgICAgICAgICAgICAgICJeY3h4JCIsCi0gICAgICAgICAgICAgICAgIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgICAgICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICAgICAiXmRpciQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeaW50ZXJmYWNlX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IFRydWUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJjaGlsZFNvdXJjZXMiOiBOb25lLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAotICAgICAgICAgICAgImhhc0luc3RhbGxSdWxlIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEzIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IFRydWUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmRpciQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5kaXIkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmRpci9kaXIkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogTm9uZSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl5kaXIvZGlyJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmRpci9kaXIkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXmRpciQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogTm9uZSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL3RvcC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2N1c3RvbS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJkaXJlY3Rvcmllcy9pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvb2JqZWN0Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJkaXJlY3Rvcmllcy9kaXIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2Rpcl9kaXIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2V4dGVybmFsLmpzb24iKSwKICAgICBdCiAKLSAgICBpZiBtYXRjaGVzKGcsICJeVmlzdWFsIFN0dWRpbyAiKToKKyAgICBpZiBtYXRjaGVzKGdbIm5hbWUiXSwgIl5WaXN1YWwgU3R1ZGlvICIpOgogICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKICAgICAgICAgICAgIGlmIGVbInBhcmVudFNvdXJjZSJdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGVbInRhcmdldElkcyJdID0gZmlsdGVyX2xpc3QobGFtYmRhIHQ6IG5vdCBtYXRjaGVzKHQsICJeXFxeWkVST19DSEVDSyIpLCBlWyJ0YXJnZXRJZHMiXSkKIAotICAgIGVsaWYgZyA9PSAiWGNvZGUiOgorICAgIGVsaWYgZ1sibmFtZSJdID09ICJYY29kZSI6CiAgICAgICAgIGlmICc7JyBpbiBvcy5lbnZpcm9uLmdldCgiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiLCAiIik6CiAgICAgICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKICAgICAgICAgICAgICAgICBlWyJ0YXJnZXRJZHMiXSA9IGZpbHRlcl9saXN0KGxhbWJkYSB0OiBub3QgbWF0Y2hlcyh0LCAiXlxcXihsaW5rX2ltcG9ydGVkX29iamVjdF9leGUpIiksIGVbInRhcmdldElkcyJdKQpAQCAtNjQ2LDQ0MjggKzUxMyw1MiBAQAogCiBkZWYgZ2VuX2NoZWNrX3RhcmdldHMoYywgZywgaW5Tb3VyY2UpOgogICAgIGV4cGVjdGVkID0gWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKLSAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImludGVyZmFjZV9leGUiLAotICAgICAgICAgICAgImlkIjogIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiaW50ZXJmYWNlX2V4ZV9FWFBPUlRTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXm15X2ludGVyZmFjZV9leGVcXC5teWV4ZSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLm15ZXhlJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmxpYi9teV9pbnRlcmZhY2VfZXhlXFwuaW1wJCIsCi0gICAgICAgICAgICAgICAgICAgICJfYWl4RXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/bXlfaW50ZXJmYWNlX2V4ZVxcLihkbGxcXC5hfGxpYikkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJTVEFUSUNfTElCUkFSWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y19saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2NfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IHsKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfc2hhcmVkX2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiY19zaGFyZWRfbGliX0VYUE9SVFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2Nfc2hhcmVkX2xpYlxcLihkbGxcXC5hfGxpYikkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX3NoYXJlZF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0JCQkJCSJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY19zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX3NoYXJlZF9leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IFRydWUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX3N0YXRpY19saWIiLAotICAgICAgICAgICAgImlkIjogIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2Nfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y19zdGF0aWNfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IHsKLSAgICAgICAgICAgICAgICAibHRvIjogVHJ1ZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfc3RhdGljX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNCwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc3RhdGljX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN4eCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y3h4X2xpYlxcLihhfGxpYikkIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2N4eF9saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogewotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKLQkJCQkJCQkiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCQkJCQkJCQl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiAiYmluIiwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jeHhfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN4eCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiB7Ci0gICAgICAgICAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAotICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMzcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICJUYXJnZXRMaW5rT3B0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAicm9sZSIgOiAiZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19vcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICIuKlRhcmdldExpbmtEaXJcXFwiPyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgInJvbGUiIDogImxpYnJhcnlQYXRoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIi4qY3h4X2xpYi4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3NoYXJlZF9saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogImN4eF9zaGFyZWRfbGliX0VYUE9SVFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGlifGN5Zyk/Y3h4X3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3NoYXJlZF9saWJcXC4oZGxsXFwuYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN4eF9zaGFyZWRfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3NoYXJlZF9leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2N4eF9zdGF0aWNfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogewotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X3N0YXRpY19leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhdGljX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5hbGlhcyQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX2FsaWFzX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN4eF9hbGlhc19leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfYWxpYXNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmFsaWFzLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9hbGlhc19leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5hbGlhcyQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY19vYmplY3RfbGliIiwKLSAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJPQkpFQ1RfTElCUkFSWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX29iamVjdF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19vYmplY3RfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiB7Ci0gICAgICAgICAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAotICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IEFkZCBhIGJhY2t0cmFjZSBoZXJlIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICMgWW91J2xsIGtub3cgd2hlbiBpdCdzIGF2YWlsYWJsZSwgYmVjYXVzZSB0aGlzIHRlc3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGZhaWwuCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X29iamVjdF9saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiT0JKRUNUX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0Ly4qL2VtcHR5KFxcLmN4eCk/XFwubyhiaik/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X29iamVjdF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvLiovZW1wdHkoXFwuY3h4KT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jeHgpP1xcLm8oYmopPyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfb2JqZWN0X2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogewotICAgICAgICAgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKLSAgICAgICAgICAgICAgICAiZGVzdGluYXRpb25zIjogWwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbnN0YWxsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQWRkIGEgYmFja3RyYWNlIGhlcmUgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgIyBZb3UnbGwga25vdyB3aGVuIGl0J3MgYXZhaWxhYmxlLCBiZWNhdXNlIHRoaXMgdGVzdCB3aWxsCi0gICAgICAgICAgICAgICAgICAgICMgZmFpbC4KLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3NoYXJlZF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9zaGFyZWRfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3N0YXRpY19leGUiLAotICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3N0YXRpY19leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTgsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDIzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN1c3RvbV90Z3QiLAotICAgICAgICAgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL2N1c3RvbV90Z3QkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkLyhjdXN0b20vKT9DTWFrZUZpbGVzLyhbMC05YS1mXSsvKT9jdXN0b21fdGd0XFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9jdXN0b21fdGd0JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC8oY3VzdG9tLyk/Q01ha2VGaWxlcy8oWzAtOWEtZl0rLyk/Y3VzdG9tX3RndFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN1c3RvbV9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNCwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jdXN0b21fZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN1c3RvbS8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jdXN0b21fZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN1c3RvbS8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jdXN0b21fZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2RlcGVuZGVuY2llcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZ2VuZXJhdGVkX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkV4dGVybmFsIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL2dlbmVyYXRlZFxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3NvdXJjZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiRU1QVFlfQz0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJTUkNfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiVEdUX0RVTU1ZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlNSQ19DT01QSUxFX09QVElPTlNfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiR0VORVJBVEVEX0VYRT0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJUR1RfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmdlbmVyYXRlZF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9nZW5lcmF0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Z2VuZXJhdGVkX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja190b3AuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX3NoYXJlZF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19zaGFyZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2Nfc3RhdGljX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX3N0YXRpY19leGUuanNvbiIpLAorCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc2hhcmVkX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc2hhcmVkX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc3RhdGljX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc3RhdGljX2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9hbGlhcy5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy96ZXJvX2NoZWNrX2FsaWFzLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2NfYWxpYXNfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9hbGlhc19leGUuanNvbiIpLAorCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfb2JqZWN0Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfb2JqZWN0Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2Nfb2JqZWN0X2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX29iamVjdF9leGUuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X29iamVjdF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X29iamVjdF9leGUuanNvbiIpLAorCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfaW1wb3J0ZWQuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja19pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9saW5rX2ltcG9ydGVkX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGUuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvbGlua19pbXBvcnRlZF9zdGF0aWNfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUuanNvbiIpLAorCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfY3VzdG9tLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfY3VzdG9tLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N1c3RvbV90Z3QuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3VzdG9tX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfZXh0ZXJuYWwuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja19leHRlcm5hbC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9nZW5lcmF0ZWRfZXhlLmpzb24iKSwKICAgICBdCiAKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHJlcGx5X2RpciwgIi4uIiwgIi4uIiwgIi4uIiwgIi4uIiwgImlwb19lbmFibGVkLnR4dCIpKToKQEAgLTUwODcsMTMgKzU3OCwxMyBAQAogICAgICAgICAgICAgICAgIGZvciBzIGluIGVbInNvdXJjZXMiXToKICAgICAgICAgICAgICAgICAgICAgc1sicGF0aCJdID0gc1sicGF0aCJdLnJlcGxhY2UoIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJLyIsICJeIiwgMSkKICAgICAgICAgICAgIGlmIGVbInNvdXJjZUdyb3VwcyJdIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGZvciBnIGluIGVbInNvdXJjZUdyb3VwcyJdOgotICAgICAgICAgICAgICAgICAgICBnWyJzb3VyY2VQYXRocyJdID0gW3AucmVwbGFjZSgiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvIiwgIl4iLCAxKSBmb3IgcCBpbiBnWyJzb3VyY2VQYXRocyJdXQorICAgICAgICAgICAgICAgIGZvciBncm91cCBpbiBlWyJzb3VyY2VHcm91cHMiXToKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBbInNvdXJjZVBhdGhzIl0gPSBbcC5yZXBsYWNlKCJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS8iLCAiXiIsIDEpIGZvciBwIGluIGdyb3VwWyJzb3VyY2VQYXRocyJdXQogICAgICAgICAgICAgaWYgZVsiY29tcGlsZUdyb3VwcyJdIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGZvciBnIGluIGVbImNvbXBpbGVHcm91cHMiXToKLSAgICAgICAgICAgICAgICAgICAgZ1sic291cmNlUGF0aHMiXSA9IFtwLnJlcGxhY2UoIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJLyIsICJeIiwgMSkgZm9yIHAgaW4gZ1sic291cmNlUGF0aHMiXV0KKyAgICAgICAgICAgICAgICBmb3IgZ3JvdXAgaW4gZVsiY29tcGlsZUdyb3VwcyJdOgorICAgICAgICAgICAgICAgICAgICBncm91cFsic291cmNlUGF0aHMiXSA9IFtwLnJlcGxhY2UoIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJLyIsICJeIiwgMSkgZm9yIHAgaW4gZ3JvdXBbInNvdXJjZVBhdGhzIl1dCiAKLSAgICBpZiBtYXRjaGVzKGcsICJeVmlzdWFsIFN0dWRpbyAiKToKKyAgICBpZiBtYXRjaGVzKGdbIm5hbWUiXSwgIl5WaXN1YWwgU3R1ZGlvICIpOgogICAgICAgICBleHBlY3RlZCA9IGZpbHRlcl9saXN0KGxhbWJkYSBlOiBlWyJuYW1lIl0gbm90IGluICgiWkVST19DSEVDSyIpIG9yIGVbImlkIl0gPT0gIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwgZXhwZWN0ZWQpCiAgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgaWYgZVsidHlwZSJdID09ICJVVElMSVRZIjoKQEAgLTUxMzAsNyArNjIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hlcyhkWyJpZCJdLCAiXlxcXlpFUk9fQ0hFQ0s6OkAiKToKICAgICAgICAgICAgICAgICAgICAgICAgIGRbImlkIl0gPSAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiCiAKLSAgICBlbGlmIGcgPT0gIlhjb2RlIjoKKyAgICBlbGlmIGdbIm5hbWUiXSA9PSAiWGNvZGUiOgogICAgICAgICBpZiAnOycgaW4gb3MuZW52aXJvbi5nZXQoIkNNQUtFX09TWF9BUkNISVRFQ1RVUkVTIiwgIiIpOgogICAgICAgICAgICAgZXhwZWN0ZWQgPSBmaWx0ZXJfbGlzdChsYW1iZGEgZTogZVsibmFtZSJdIG5vdCBpbiAoImxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZSIpLCBleHBlY3RlZCkKICAgICAgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgpAQCAtNTE2NCwxMzQgKzY1NSwyMSBAQAogCiBkZWYgZ2VuX2NoZWNrX3Byb2plY3RzKGMsIGcpOgogICAgIGV4cGVjdGVkID0gWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiBOb25lLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBbCi0gICAgICAgICAgICAgICAgIkFsaWFzIiwKLSAgICAgICAgICAgICAgICAiQ3VzdG9tIiwKLSAgICAgICAgICAgICAgICAiQ3h4IiwKLSAgICAgICAgICAgICAgICAiSW1wb3J0ZWQiLAotICAgICAgICAgICAgICAgICJPYmplY3QiLAotICAgICAgICAgICAgICAgICJFeHRlcm5hbCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5cXC4kIiwKLSAgICAgICAgICAgICAgICAiXmRpciQiLAotICAgICAgICAgICAgICAgICJeZGlyL2RpciQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJjaGlsZE5hbWVzIjogTm9uZSwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeY3h4JCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5hbGlhcyQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5vYmplY3QkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAiY2hpbGROYW1lcyI6IE5vbmUsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmN1c3RvbSQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJjaGlsZE5hbWVzIjogTm9uZSwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICJeZ2VuZXJhdGVkX2V4ZTo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJwcm9qZWN0cy9jb2RlbW9kZWwtdjIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL2N4eC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL29iamVjdC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvaW1wb3J0ZWQuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL2N1c3RvbS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvZXh0ZXJuYWwuanNvbiIpLAogICAgIF0KIAotICAgIGlmIG1hdGNoZXMoZywgIl5WaXN1YWwgU3R1ZGlvICIpOgorICAgIGlmIG1hdGNoZXMoZ1sibmFtZSJdLCAiXlZpc3VhbCBTdHVkaW8gIik6CiAgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgaWYgZVsicGFyZW50TmFtZSJdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGVbInRhcmdldElkcyJdID0gZmlsdGVyX2xpc3QobGFtYmRhIHQ6IG5vdCBtYXRjaGVzKHQsICJeXFxeWkVST19DSEVDSyIpLCBlWyJ0YXJnZXRJZHMiXSkKIAotICAgIGVsaWYgZyA9PSAiWGNvZGUiOgorICAgIGVsaWYgZ1sibmFtZSJdID09ICJYY29kZSI6CiAgICAgICAgIGlmICc7JyBpbiBvcy5lbnZpcm9uLmdldCgiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiLCAiIik6CiAgICAgICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKICAgICAgICAgICAgICAgICBlWyJ0YXJnZXRJZHMiXSA9IGZpbHRlcl9saXN0KGxhbWJkYSB0OiBub3QgbWF0Y2hlcyh0LCAiXlxcXihsaW5rX2ltcG9ydGVkX29iamVjdF9leGUpIiksIGVbInRhcmdldElkcyJdKQpAQCAtNTMyNyw3ICs3MDUsNyBAQAogCiAgICAgICAgIGluU291cmNlID0gb3MucGF0aC5kaXJuYW1lKG9bInBhdGhzIl1bImJ1aWxkIl0pID09IG9bInBhdGhzIl1bInNvdXJjZSJdCiAKLSAgICAgICAgaWYgbWF0Y2hlcyhnLCAiXihWaXN1YWwgU3R1ZGlvIHxYY29kZSQpIik6CisgICAgICAgIGlmIGdbIm11bHRpQ29uZmlnIl06CiAgICAgICAgICAgICBhc3NlcnQgc29ydGVkKFtjWyJuYW1lIl0gZm9yIGMgaW4gb1siY29uZmlndXJhdGlvbnMiXV0pID09IFsiRGVidWciLCAiTWluU2l6ZVJlbCIsICJSZWxXaXRoRGViSW5mbyIsICJSZWxlYXNlIl0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzc2VydCBsZW4ob1siY29uZmlndXJhdGlvbnMiXSkgPT0gMQpAQCAtNTMzOSw0ICs3MTcsNCBAQAogCiBhc3NlcnQgaXNfZGljdChpbmRleCkKIGFzc2VydCBzb3J0ZWQoaW5kZXgua2V5cygpKSA9PSBbImNtYWtlIiwgIm9iamVjdHMiLCAicmVwbHkiXQotY2hlY2tfb2JqZWN0cyhpbmRleFsib2JqZWN0cyJdLCBpbmRleFsiY21ha2UiXVsiZ2VuZXJhdG9yIl1bIm5hbWUiXSkKK2NoZWNrX29iamVjdHMoaW5kZXhbIm9iamVjdHMiXSwgaW5kZXhbImNtYWtlIl1bImdlbmVyYXRvciJdKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9hbGlhcy5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9hbGlhcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMGM0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2FsaWFzLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgImJ1aWxkIjogIl5hbGlhcyQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jdXN0b20uanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3VzdG9tLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3VzdG9tLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2N4eC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jeHguanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmU3MTdhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jeHguanNvbgpAQCAtMCwwICsxLDE5IEBACit7CisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2Rpci5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9kaXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmJkNDNhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9kaXIuanNvbgpAQCAtMCwwICsxLDEyIEBACit7CisgICAgInNvdXJjZSI6ICJeZGlyJCIsCisgICAgImJ1aWxkIjogIl5kaXIkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogWworICAgICAgICAiXmRpci9kaXIkIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IG51bGwsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9kaXJfZGlyLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2Rpcl9kaXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzM3YWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9kaXJfZGlyLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAgICJzb3VyY2UiOiAiXmRpci9kaXIkIiwKKyAgICAiYnVpbGQiOiAiXmRpci9kaXIkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5kaXIkIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogbnVsbCwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2V4dGVybmFsLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxZTNjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZXh0ZXJuYWwuanNvbgpAQCAtMCwwICsxLDE0IEBACit7CisgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgImJ1aWxkIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBbMC05YS1mXSskIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICJeZ2VuZXJhdGVkX2V4ZTo6QFswLTlhLWZdKyQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvaW1wb3J0ZWQuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvaW1wb3J0ZWQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDFiNzliCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9pbXBvcnRlZC5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9vYmplY3QuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvb2JqZWN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2NDdhZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvb2JqZWN0Lmpzb24KQEAgLTAsMCArMSwxNyBAQAoreworICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY3h4X29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEzIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiB0cnVlCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL3RvcC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy90b3AuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTQ0OTUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy90b3AuanNvbgpAQCAtMCwwICsxLDI4IEBACit7CisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAicGFyZW50U291cmNlIjogbnVsbCwKKyAgICAiY2hpbGRTb3VyY2VzIjogWworICAgICAgICAiXmFsaWFzJCIsCisgICAgICAgICJeY3VzdG9tJCIsCisgICAgICAgICJeY3h4JCIsCisgICAgICAgICJeaW1wb3J0ZWQkIiwKKyAgICAgICAgIl5vYmplY3QkIiwKKyAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAgICAgIl5kaXIkIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3NoYXJlZF9saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIgorICAgIF0sCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9hbGlhcy5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9hbGlhcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGU2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2FsaWFzLmpzb24KQEAgLTAsMCArMSwxNCBAQAoreworICAgICJuYW1lIjogIkFsaWFzIiwKKyAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJjaGlsZE5hbWVzIjogbnVsbCwKKyAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKKyAgICAgICAgIl5hbGlhcyQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiCisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jb2RlbW9kZWwtdjIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY29kZW1vZGVsLXYyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhYWM2MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY29kZW1vZGVsLXYyLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJuYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInBhcmVudE5hbWUiOiBudWxsLAorICAgICJjaGlsZE5hbWVzIjogWworICAgICAgICAiQWxpYXMiLAorICAgICAgICAiQ3VzdG9tIiwKKyAgICAgICAgIkN4eCIsCisgICAgICAgICJJbXBvcnRlZCIsCisgICAgICAgICJPYmplY3QiLAorICAgICAgICAiRXh0ZXJuYWwiCisgICAgXSwKKyAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKKyAgICAgICAgIl5cXC4kIiwKKyAgICAgICAgIl5kaXIkIiwKKyAgICAgICAgIl5kaXIvZGlyJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2N1c3RvbS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jdXN0b20uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWViNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jdXN0b20uanNvbgpAQCAtMCwwICsxLDE0IEBACit7CisgICAgIm5hbWUiOiAiQ3VzdG9tIiwKKyAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJjaGlsZE5hbWVzIjogbnVsbCwKKyAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKKyAgICAgICAgIl5jdXN0b20kIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiCisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jeHguanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY3h4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2YWU2YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY3h4Lmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJuYW1lIjogIkN4eCIsCisgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAiY2hpbGROYW1lcyI6IG51bGwsCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeY3h4JCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2V4dGVybmFsLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5YWZmZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvZXh0ZXJuYWwuanNvbgpAQCAtMCwwICsxLDEzIEBACit7CisgICAgIm5hbWUiOiAiRXh0ZXJuYWwiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKKyAgICAgICAgIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2ltcG9ydGVkLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0MGI3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvaW1wb3J0ZWQuanNvbgpAQCAtMCwwICsxLDE3IEBACit7CisgICAgIm5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXmltcG9ydGVkJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9zaGFyZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvb2JqZWN0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL29iamVjdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWY0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL29iamVjdC5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgICAibmFtZSI6ICJPYmplY3QiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXm9iamVjdCQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2FsaWFzLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2FsaWFzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiZjczOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfYWxpYXMuanNvbgpAQCAtMCwwICsxLDgzIEBACit7CisgICAgIm5hbWUiOiAiQUxMX0JVSUxEIiwKKyAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCisgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3VzdG9tLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2N1c3RvbS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmY2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2N1c3RvbS5qc29uCkBAIC0wLDAgKzEsNzkgQEAKK3sKKyAgICAibmFtZSI6ICJBTExfQlVJTEQiLAorICAgICJpZCI6ICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jdXN0b20kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IHRydWUsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9jeHguanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhNzk0NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24KQEAgLTAsMCArMSw5OSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2V4dGVybmFsLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3MzM1YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfZXh0ZXJuYWwuanNvbgpAQCAtMCwwICsxLDc5IEBACit7CisgICAgIm5hbWUiOiAiQUxMX0JVSUxEIiwKKyAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2ltcG9ydGVkLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlNWIxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfaW1wb3J0ZWQuanNvbgpAQCAtMCwwICsxLDk1IEBACit7CisgICAgIm5hbWUiOiAiQUxMX0JVSUxEIiwKKyAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9vYmplY3QuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfb2JqZWN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4ODk5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfb2JqZWN0Lmpzb24KQEAgLTAsMCArMSw5MSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX3RvcC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRlZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbgpAQCAtMCwwICsxLDE3OSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfYWxpYXNfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19hbGlhc19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzdjOTRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfYWxpYXNfZXhlLmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJjX2FsaWFzX2V4ZSIsCisgICAgImlkIjogIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5hbGlhcyQiLAorICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY3NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfZXhlLmpzb24KQEAgLTAsMCArMSwxNDMgQEAKK3sKKyAgICAibmFtZSI6ICJjX2V4ZSIsCisgICAgImlkIjogIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmNfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMTk2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2xpYi5qc29uCkBAIC0wLDAgKzEsMTA4IEBACit7CisgICAgIm5hbWUiOiAiY19saWIiLAorICAgICJpZCI6ICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y19saWJcXC4oYXxsaWIpJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2NfbGliXFwuKGF8bGliKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IHsKKyAgICAgICAgImx0byI6IG51bGwKKyAgICB9LAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWFjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfZXhlLmpzb24KQEAgLTAsMCArMSwxNTQgQEAKK3sKKyAgICAibmFtZSI6ICJjX29iamVjdF9leGUiLAorICAgICJpZCI6ICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0Ly4qL2VtcHR5KFxcLmMpP1xcLm8oYmopPyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmNfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX29iamVjdF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKKyAgICAgICAgImRlc3RpbmF0aW9ucyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfbGliLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhMjBkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX29iamVjdF9saWIuanNvbgpAQCAtMCwwICsxLDgyIEBACit7CisgICAgIm5hbWUiOiAiY19vYmplY3RfbGliIiwKKyAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgInR5cGUiOiAiT0JKRUNUX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAorICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDAxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zaGFyZWRfZXhlLmpzb24KQEAgLTAsMCArMSwxNDMgQEAKK3sKKyAgICAibmFtZSI6ICJjX3NoYXJlZF9leGUiLAorICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmNfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zaGFyZWRfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogdHJ1ZSwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX3NoYXJlZF9saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmE4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zaGFyZWRfbGliLmpzb24KQEAgLTAsMCArMSwxMjMgQEAKK3sKKyAgICAibmFtZSI6ICJjX3NoYXJlZF9saWIiLAorICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJTSEFSRURfTElCUkFSWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJjX3NoYXJlZF9saWJfRVhQT1JUUyIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2Nfc2hhcmVkX2xpYlxcLihkbGxcXC5hfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IHRydWUsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDIyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zdGF0aWNfZXhlLmpzb24KQEAgLTAsMCArMSwxNDMgQEAKK3sKKyAgICAibmFtZSI6ICJjX3N0YXRpY19leGUiLAorICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc3RhdGljX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19saWIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjYzODk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2xpYi5qc29uCkBAIC0wLDAgKzEsMTA4IEBACit7CisgICAgIm5hbWUiOiAiY19zdGF0aWNfbGliIiwKKyAgICAiaWQiOiAiXmNfc3RhdGljX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2Nfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y19zdGF0aWNfbGliXFwuKGF8bGliKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IHsKKyAgICAgICAgImx0byI6IHRydWUKKyAgICB9LAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N1c3RvbV9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzMDFlOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fZXhlLmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJjdXN0b21fZXhlIiwKKyAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA0LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDQsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3VzdG9tX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jdXN0b20vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3VzdG9tX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jdXN0b20vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3VzdG9tX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKKyAgICAic291cmNlIjogIl5jdXN0b20kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3VzdG9tX3RndDo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2RlcGVuZGVuY2llcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fdGd0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX3RndC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTA2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX3RndC5qc29uCkBAIC0wLDAgKzEsODcgQEAKK3sKKyAgICAibmFtZSI6ICJjdXN0b21fdGd0IiwKKyAgICAiaWQiOiAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL2N1c3RvbV90Z3QkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9jdXN0b21fdGFyZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC8oY3VzdG9tLyk/Q01ha2VGaWxlcy8oWzAtOWEtZl0rLyk/Y3VzdG9tX3RndFxcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9jdXN0b21fdGd0JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvKGN1c3RvbS8pP0NNYWtlRmlsZXMvKFswLTlhLWZdKy8pP2N1c3RvbV90Z3RcXC5ydWxlJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBudWxsLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2N1c3RvbV90YXJnZXQiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2FsaWFzX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9hbGlhc19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdmMjUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9hbGlhc19leGUuanNvbgpAQCAtMCwwICsxLDEwNyBAQAoreworICAgICJuYW1lIjogImN4eF9hbGlhc19leGUiLAorICAgICJpZCI6ICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfYWxpYXNfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmFsaWFzLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9hbGlhc19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeYWxpYXMkIiwKKyAgICAic291cmNlIjogIl5hbGlhcyQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzMTgzNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlLmpzb24KQEAgLTAsMCArMSwyMTMgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKKwkJCQkJCQkiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJCQkJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogImJpbiIsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKKyAgICAgICAgImRlc3RpbmF0aW9ucyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzNywKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmcmFnbWVudCIgOiAiVGFyZ2V0TGlua09wdGlvbnMiLAorICAgICAgICAgICAgICAgICJyb2xlIiA6ICJmbGFncyIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfb3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICIuKlRhcmdldExpbmtEaXJcXFwiPyQiLAorICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJ5UGF0aCIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmcmFnbWVudCIgOiAiLipjeHhfbGliLioiLAorICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9saWIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGFjMDgxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9saWIuanNvbgpAQCAtMCwwICsxLDg0IEBACit7CisgICAgIm5hbWUiOiAiY3h4X2xpYiIsCisgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJTVEFUSUNfTElCUkFSWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA0LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDQsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y3h4X2xpYlxcLihhfGxpYikkIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2N4eF9saWJcXC4oYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogeworICAgICAgICAibHRvIjogbnVsbAorICAgIH0sCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X29iamVjdF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfb2JqZWN0X2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOWM5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X29iamVjdF9leGUuanNvbgpAQCAtMCwwICsxLDE1NCBAQAoreworICAgICJuYW1lIjogImN4eF9vYmplY3RfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0Ly4qL2VtcHR5KFxcLmN4eCk/XFwubyhiaik/JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jeHgpP1xcLm8oYmopPyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X29iamVjdF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfb2JqZWN0X2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiaW5zdGFsbCI6IHsKKyAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAorICAgICAgICAiZGVzdGluYXRpb25zIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5zdGFsbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9vYmplY3RfbGliLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X29iamVjdF9saWIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk5ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9vYmplY3RfbGliLmpzb24KQEAgLTAsMCArMSw4MiBAQAoreworICAgICJuYW1lIjogImN4eF9vYmplY3RfbGliIiwKKyAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKKyAgICAidHlwZSI6ICJPQkpFQ1RfTElCUkFSWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8uKi9lbXB0eShcXC5jeHgpP1xcLm8oYmopPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3NoYXJlZF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc2hhcmVkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjFjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3NoYXJlZF9leGUuanNvbgpAQCAtMCwwICsxLDEwNyBAQAoreworICAgICJuYW1lIjogImN4eF9zaGFyZWRfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3NoYXJlZF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3NoYXJlZF9saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc2hhcmVkX2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWE0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3NoYXJlZF9saWIuanNvbgpAQCAtMCwwICsxLDk5IEBACit7CisgICAgIm5hbWUiOiAiY3h4X3NoYXJlZF9saWIiLAorICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlNIQVJFRF9MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogImN4eF9zaGFyZWRfbGliX0VYUE9SVFMiLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGlifGN5Zyk/Y3h4X3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3NoYXJlZF9saWJcXC4oZGxsXFwuYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzQyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19leGUuanNvbgpAQCAtMCwwICsxLDEwNyBAQAoreworICAgICJuYW1lIjogImN4eF9zdGF0aWNfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhdGljX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3N0YXRpY19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Mjk4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19saWIuanNvbgpAQCAtMCwwICsxLDg0IEBACit7CisgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19saWIiLAorICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2N4eF9zdGF0aWNfbGliXFwuKGF8bGliKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogeworICAgICAgICAibHRvIjogbnVsbAorICAgIH0sCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvZ2VuZXJhdGVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2dlbmVyYXRlZF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFiYmIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2dlbmVyYXRlZF9leGUuanNvbgpAQCAtMCwwICsxLDMwMyBAQAoreworICAgICJuYW1lIjogImdlbmVyYXRlZF9leGUiLAorICAgICJpZCI6ICJeZ2VuZXJhdGVkX2V4ZTo6QFswLTlhLWZdKyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9nZW5lcmF0ZWRcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3NvdXJjZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJHZW5lcmF0ZWQgU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJzZXRfcHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICAgICAgICAgICAgICAgICAiaXNTeXN0ZW0iOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkVNUFRZX0M9MSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIlNSQ19EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIlRHVF9EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlNSQ19DT01QSUxFX09QVElPTlNfRFVNTVkiLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL2dlbmVyYXRlZFxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICAgICAgICAgICAgICAgICAiaXNTeXN0ZW0iOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIlRHVF9EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmdlbmVyYXRlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9nZW5lcmF0ZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Z2VuZXJhdGVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9pbnRlcmZhY2VfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDUyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTUyIEBACit7CisgICAgIm5hbWUiOiAiaW50ZXJmYWNlX2V4ZSIsCisgICAgImlkIjogIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogImludGVyZmFjZV9leGVfRVhQT1JUUyIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXm15X2ludGVyZmFjZV9leGVcXC5teWV4ZSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLm15ZXhlJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmxpYi9teV9pbnRlcmZhY2VfZXhlXFwuaW1wJCIsCisgICAgICAgICAgICAiX2FpeEV4dHJhIjogdHJ1ZSwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJebGliLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP215X2ludGVyZmFjZV9leGVcXC4oZGxsXFwuYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeYmluLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP215X2ludGVyZmFjZV9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyZjRjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2V4ZS5qc29uCkBAIC0wLDAgKzEsOTAgQEAKK3sKKyAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX2V4ZSIsCisgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBlNmRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZS5qc29uCkBAIC0wLDAgKzEsOTAgQEAKK3sKKyAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUiLAorICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMjMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDIzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9vYmplY3RfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9vYmplY3RfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlYzUyNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX29iamVjdF9leGUuanNvbgpAQCAtMCwwICsxLDkwIEBACit7CisgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9vYmplY3RfZXhlIiwKKyAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAxOCwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX29iamVjdF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9vYmplY3RfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODQ2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zaGFyZWRfZXhlLmpzb24KQEAgLTAsMCArMSw5MCBAQAoreworICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZSIsCisgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zdGF0aWNfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zdGF0aWNfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhMTY5NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUuanNvbgpAQCAtMCwwICsxLDkwIEBACit7CisgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9zdGF0aWNfZXhlIiwKKyAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9zdGF0aWNfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfYWxpYXMuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2FsaWFzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxYzE3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2FsaWFzLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5hbGlhcyQiLAorICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N1c3RvbS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3VzdG9tLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjNmRkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N1c3RvbS5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N4eC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyZmY4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N4eC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19leHRlcm5hbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzM4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19leHRlcm5hbC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBudWxsLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQkIiwKKyAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfaW1wb3J0ZWQuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzNGM4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2ltcG9ydGVkLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX29iamVjdC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfb2JqZWN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkNzYxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX29iamVjdC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX3RvcC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfdG9wLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwMzBiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX3RvcC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBiOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAuY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QuN3oiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIDd6aXApCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCIzNzdhYmNhZjI3MWMiIExJTUlUIDYgSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4wKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFjYjZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoN3ppcCkKK3J1bl9jbWFrZShnbnV0YXIpCitydW5fY21ha2UoZ251dGFyLWd6KQorcnVuX2NtYWtlKHBheCkKK3J1bl9jbWFrZShwYXgteHopCitydW5fY21ha2UocGF4LXpzdGQpCitydW5fY21ha2UocGF4cikKK3J1bl9jbWFrZShwYXhyLWJ6MikKK3J1bl9jbWFrZSh6aXApCisKKyMgRXh0cmFjdGluZyBvbmx5IHNlbGVjdGVkIGZpbGVzIG9yIGRpcmVjdG9yaWVzCitydW5fY21ha2UoemlwLWZpbHRlcmVkKQorCitydW5fY21ha2UodW5zdXBwb3J0ZWQtZm9ybWF0KQorcnVuX2NtYWtlKHppcC13aXRoLWJhZC10eXBlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci1nei5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9nbnV0YXItZ3ouY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlMzk3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9nbnV0YXItZ3ouY21ha2UKQEAgLTAsMCArMSw4IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QudGFyLmd6IikKKworc2V0KENPTVBSRVNTSU9OX0ZPUk1BVCBnbnV0YXIpCitzZXQoQ09NUFJFU1NJT05fVFlQRSBHWmlwKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiMWY4YiIgTElNSVQgMiBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvZ251dGFyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWNiZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIGdudXRhcikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjc1NzM3NDYxNzIyMDIwMDAiIE9GRlNFVCAyNTcgTElNSVQgOCBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXh6LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC14ei5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ZiMGZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC14ei5jbWFrZQpAQCAtMCwwICsxLDggQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIueHoiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIHBheCkKK3NldChDT01QUkVTU0lPTl9UWVBFIFhaKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiZmQzNzdhNTg1YTAwIiBMSU1JVCA2IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXgtenN0ZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXgtenN0ZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWUwNDQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC16c3RkLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhci56c3RkIikKKworc2V0KENPTVBSRVNTSU9OX0ZPUk1BVCBwYXgpCitzZXQoQ09NUFJFU1NJT05fVFlQRSBac3RkKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiMjhiNTJmZmQwMDU4IiBMSU1JVCA2IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGM3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhciIpCisKK3NldChDT01QUkVTU0lPTl9GT1JNQVQgcGF4KQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNzU3Mzc0NjE3MjAwMzAzMCIgT0ZGU0VUIDI1NyBMSU1JVCA4IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLWJ6Mi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLWJ6Mi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjlhMTMxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHItYnoyLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhci5iejIiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIHBheHIpCitzZXQoQ09NUFJFU1NJT05fVFlQRSBCWmlwMikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjQyNWE2OCIgTElNSVQgMyBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4ci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTRkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4ci5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIHBheHIpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCI3NTczNzQ2MTcyMDAzMDMwIiBPRkZTRVQgMjU3IExJTUlUIDggSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3JvdW5kdHJpcC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9yb3VuZHRyaXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1MDQwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9yb3VuZHRyaXAuY21ha2UKQEAgLTAsMCArMSw5MiBAQAorZm9yZWFjaChwYXJhbWV0ZXIgT1VUUFVUX05BTUUgQ09NUFJFU1NJT05fRk9STUFUKQorICBpZihOT1QgREVGSU5FRCAke3BhcmFtZXRlcn0pCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgJHtwYXJhbWV0ZXJ9IikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK3NldChDT01QUkVTU19ESVIgY29tcHJlc3NfZGlyKQorc2V0KEZVTExfQ09NUFJFU1NfRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NPTVBSRVNTX0RJUn0pCisKK3NldChERUNPTVBSRVNTX0RJUiBkZWNvbXByZXNzX2RpcikKK3NldChGVUxMX0RFQ09NUFJFU1NfRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0RFQ09NUFJFU1NfRElSfSkKKworc2V0KEZVTExfT1VUUFVUX05BTUUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7T1VUUFVUX05BTUV9KQorCitzZXQoQ0hFQ0tfRklMRVMKKyAgImYxLnR4dCIKKyAgImQxL2YxLnR4dCIKKyAgImQgMi9mMS50eHQiCisgICJkICsgMy9mMS50eHQiCisgICJkXzQvZjEudHh0IgorICAiZC00L2YxLnR4dCIKKyAgIk15IFNwZWNpYWwgRGlyZWN0b3J5L2YxLnR4dCIKKykKKworZm9yZWFjaChmaWxlICR7Q0hFQ0tfRklMRVN9KQorICBjb25maWd1cmVfZmlsZSgke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSAke0ZVTExfQ09NUFJFU1NfRElSfS8ke2ZpbGV9IENPUFlPTkxZKQorZW5kZm9yZWFjaCgpCisKK2lmKFVOSVgpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EIGxuIC1zZiBmMS50eHQgJHtGVUxMX0NPTVBSRVNTX0RJUn0vZDEvZjIudHh0KQorICBsaXN0KEFQUEVORCBDSEVDS19GSUxFUyAiZDEvZjIudHh0IikKK2VuZGlmKCkKKworZmlsZShSRU1PVkUgJHtGVUxMX09VVFBVVF9OQU1FfSkKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgJHtGVUxMX0RFQ09NUFJFU1NfRElSfSkKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtGVUxMX0RFQ09NUFJFU1NfRElSfSkKKworZmlsZShBUkNISVZFX0NSRUFURQorICAgIE9VVFBVVCAke0ZVTExfT1VUUFVUX05BTUV9CisgICAgRk9STUFUICIke0NPTVBSRVNTSU9OX0ZPUk1BVH0iCisgICAgVFlQRSAiJHtDT01QUkVTU0lPTl9UWVBFfSIKKyAgICBWRVJCT1NFCisgICAgRElSRUNUT1JZICR7Q09NUFJFU1NfRElSfSkKKworZmlsZShBUkNISVZFX0VYVFJBQ1QKKyAgICBJTlBVVCAke0ZVTExfT1VUUFVUX05BTUV9CisgICAgJHtERUNPTVBSRVNTSU9OX09QVElPTlN9CisgICAgREVTVElOQVRJT04gJHtGVUxMX0RFQ09NUFJFU1NfRElSfQorICAgIFZFUkJPU0UpCisKK2lmKENVU1RPTV9DSEVDS19GSUxFUykKKyAgc2V0KENIRUNLX0ZJTEVTICR7Q1VTVE9NX0NIRUNLX0ZJTEVTfSkKK2VuZGlmKCkKKworZm9yZWFjaChmaWxlICR7Q0hFQ0tfRklMRVN9KQorICBzZXQoaW5wdXQgJHtGVUxMX0NPTVBSRVNTX0RJUn0vJHtmaWxlfSkKKyAgc2V0KG91dHB1dCAke0ZVTExfREVDT01QUkVTU19ESVJ9LyR7Q09NUFJFU1NfRElSfS8ke2ZpbGV9KQorCisgIGlmKE5PVCBFWElTVFMgJHtpbnB1dH0pCisgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ2Fubm90IGZpbmQgaW5wdXQgZmlsZSAke291dHB1dH0iKQorICBlbmRpZigpCisKKyAgaWYoTk9UIEVYSVNUUyAke291dHB1dH0pCisgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ2Fubm90IGZpbmQgb3V0cHV0IGZpbGUgJHtvdXRwdXR9IikKKyAgZW5kaWYoKQorCisgIGZpbGUoTUQ1ICR7aW5wdXR9IGlucHV0X21kNSkKKyAgZmlsZShNRDUgJHtvdXRwdXR9IG91dHB1dF9tZDUpCisKKyAgaWYoTk9UIGlucHV0X21kNSBTVFJFUVVBTCBvdXRwdXRfbWQ1KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRmlsZXMgXCIke2lucHV0fVwiIGFuZCBcIiR7b3V0cHV0fVwiIGFyZSBkaWZmZXJlbnQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaChmaWxlICR7Tk9UX0VYSVNUSU5HX0ZJTEVTX0NIRUNLfSkKKyAgc2V0KG91dHB1dCAke0ZVTExfREVDT01QUkVTU19ESVJ9LyR7Q09NUFJFU1NfRElSfS8ke2ZpbGV9KQorCisgIGlmKEVYSVNUUyAke291dHB1dH0pCisgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRmlsZSAke291dHB1dH0gZXhpc3RzIGJ1dCBpdCBzaG91bGRuJ3QiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZnVuY3Rpb24oY2hlY2tfbWFnaWMgRVhQRUNURUQpCisgIGZpbGUoUkVBRCAke0ZVTExfT1VUUFVUX05BTUV9IEFDVFVBTAorICAgICR7QVJHTn0KKyAgKQorCisgIGlmKE5PVCBBQ1RVQUwgU1RSRVFVQUwgRVhQRUNURUQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIkFjdHVhbCBbJHtBQ1RVQUx9XSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBbJHtFWFBFQ1RFRH1dIikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzI4MDIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgcm91bmR0cmlwLmNtYWtlOjM4IFwoZmlsZVwpOgorICBmaWxlIGFyY2hpdmUgZm9ybWF0IHJhciBub3Qgc3VwcG9ydGVkCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICB1bnN1cHBvcnRlZC1mb3JtYXQuY21ha2U6NSBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWVkYzFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC5yYXIiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIHJhcikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtZmlsdGVyZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLWZpbHRlcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjU5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLWZpbHRlcmVkLmNtYWtlCkBAIC0wLDAgKzEsMjYgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC56aXAiKQorCitzZXQoQ09NUFJFU1NJT05fRk9STUFUIHppcCkKKworc2V0KERFQ09NUFJFU1NJT05fT1BUSU9OUworICBGSUxFUworICAgIGNvbXByZXNzX2Rpci9mMS50eHQgIyBEZWNvbXByZXNzIG9ubHkgZmlsZQorICAgIGNvbXByZXNzX2Rpci9kMSAgICAgIyBhbmQgd2hvbGUgZGlyZWN0b3J5CispCisKK3NldChDVVNUT01fQ0hFQ0tfRklMRVMKKyAgImYxLnR4dCIKKyAgImQxL2YxLnR4dCIKKykKKworIyBUaGlzIGZpbGVzIHNob3VsZG4ndCBleGlzdHMKK3NldChOT1RfRVhJU1RJTkdfRklMRVNfQ0hFQ0sKKyAgImQgMi9mMS50eHQiCisgICJkICsgMy9mMS50eHQiCisgICJkXzQvZjEudHh0IgorICAiZC00L2YxLnR4dCIKKykKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjUwNGIwMzA0IiBMSU1JVCA0IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLXR5cGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLXR5cGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC10eXBlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLXR5cGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTEyZmViCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC10eXBlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCByb3VuZHRyaXAuY21ha2U6MzggXChmaWxlXCk6CisgIGZpbGUgYXJjaGl2ZSBmb3JtYXQgemlwIGRvZXMgbm90IHN1cHBvcnQgVFlQRSBhcmd1bWVudHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIHppcC13aXRoLWJhZC10eXBlLmNtYWtlOjYgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC10eXBlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC10eXBlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYjk3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLXR5cGUuY21ha2UKQEAgLTAsMCArMSw2IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QuemlwIikKKworc2V0KENPTVBSRVNTSU9OX0ZPUk1BVCB6aXApCitzZXQoQ09NUFJFU1NJT05fVFlQRSBCWmlwMikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTMwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnppcCIpCisKK3NldChDT01QUkVTU0lPTl9GT1JNQVQgemlwKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNTA0YjAzMDQiIExJTUlUIDQgSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjNhMjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK0NNYWtlIEVycm9yIGF0IEJhZEFyZy5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgSW5jb3JyZWN0IGFyZ3VtZW50cyB0byBDT05GSUdVUkUgc3ViY29tbWFuZC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdmY2RhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoQ09ORklHVVJFIE9VVFBVVCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZGE2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIENPTkZJR1VSRSBjYWxsZWQgd2l0aCBDT05URU5UIGNvbnRhaW5pbmcgYSAiPCIuICBUaGlzIGNoYXJhY3RlciBpcyBub3QKKyAgYWxsb3dlZC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZTllNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorZmlsZShDT05GSUdVUkUKKyAgICBPVVRQVVQgImZpbGUudHh0IgorICAgIENPTlRFTlQgImZvby0kPENPTkZJRz4iCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWQ5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCBCYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBDT05GSUdVUkUgY2FsbGVkIHdpdGggT1VUUFVUIGNvbnRhaW5pbmcgYSAiPCIuICBUaGlzIGNoYXJhY3RlciBpcyBub3QKKyAgYWxsb3dlZC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTc5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorZmlsZShDT05GSUdVUkUKKyAgICBPVVRQVVQgImZpbGUtJDxDT05GSUc+LnR4dCIKKyAgICBDT05URU5UICJmb28iCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MTE3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTFmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteRGlyT3V0cHV0IHRlc3QgZmlsZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBmYWRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorZmlsZShNQUtFX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRGlyT3V0cHV0KQorY29uZmlndXJlX2ZpbGUoRGlyT3V0cHV0LnR4dCBEaXJPdXRwdXQpCitmaWxlKFJFQUQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0Rpck91dHB1dC9EaXJPdXRwdXQudHh0IG91dCkKK21lc3NhZ2UoIiR7b3V0fSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjM4OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LnR4dApAQCAtMCwwICsxIEBACitEaXJPdXRwdXQgdGVzdCBmaWxlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4ZWQyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgTmV3TGluZVN0eWxlLU5vQXJnLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBDT05GSUdVUkUgTkVXTElORV9TVFlMRSBtdXN0IHNldCBhIHN0eWxlOiBMRiwgQ1JMRiwgVU5JWCwgRE9TLCBvcgorICBXSU4zMgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NzM4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtTm9BcmcuY21ha2UKQEAgLTAsMCArMSw2IEBACitzZXQoZmlsZV9uYW1lICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTmV3TGluZVN0eWxlLnR4dCkKK2ZpbGUoQ09ORklHVVJFCisgICAgT1VUUFVUICR7ZmlsZV9uYW1lfQorICAgIENPTlRFTlQgIkRhdGFcbiIKKyAgICBORVdMSU5FX1NUWUxFCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtVmFsaWRBcmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtVmFsaWRBcmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4NDg3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1WYWxpZEFyZy5jbWFrZQpAQCAtMCwwICsxLDIwIEBACitzZXQoZmlsZV9uYW1lICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTmV3TGluZVN0eWxlLnR4dCkKKworZnVuY3Rpb24odGVzdF9lb2wgc3R5bGUgaW4gb3V0KQorICAgIGZpbGUoQ09ORklHVVJFCisgICAgICAgIE9VVFBVVCAke2ZpbGVfbmFtZX0KKyAgICAgICAgQ09OVEVOVCAiQGluQCIKKyAgICAgICAgTkVXTElORV9TVFlMRSAke3N0eWxlfQorICAgICkKKyAgICBmaWxlKFJFQUQgJHtmaWxlX25hbWV9IG5ldyBIRVgpCisgICAgaWYoTk9UICIke25ld30iIFNUUkVRVUFMICIke291dH0iKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJObyAke3N0eWxlfSBsaW5lIGVuZGluZ3MiKQorICAgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKwordGVzdF9lb2woRE9TICAgImEiICI2MTBkMGEiKQordGVzdF9lb2woV0lOMzIgImIiICI2MjBkMGEiKQordGVzdF9lb2woQ1JMRiAgImMiICI2MzBkMGEiKQorCit0ZXN0X2VvbChVTklYICAiZCIgIjY0MGEiKQordGVzdF9lb2woTEYgICAgImUiICI2NTBhIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtV3JvbmdBcmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtV3JvbmdBcmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtV3JvbmdBcmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWJiNDJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCBOZXdMaW5lU3R5bGUtV3JvbmdBcmcuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIENPTkZJR1VSRSBORVdMSU5FX1NUWUxFIHNldHMgYW4gdW5rbm93biBzdHlsZSwgb25seSBMRiwgQ1JMRiwgVU5JWCwKKyAgRE9TLCBhbmQgV0lOMzIgYXJlIHN1cHBvcnRlZAorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzgxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtV3JvbmdBcmcuY21ha2UKQEAgLTAsMCArMSw2IEBACitzZXQoZmlsZV9uYW1lICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTmV3TGluZVN0eWxlLnR4dCkKK2ZpbGUoQ09ORklHVVJFCisgICAgT1VUUFVUICR7ZmlsZV9uYW1lfQorICAgIENPTlRFTlQgIkRhdGFcbiIKKyAgICBORVdMSU5FX1NUWUxFIEZPTworKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWQ2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoQmFkQXJnKQorcnVuX2NtYWtlKEJhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KQorcnVuX2NtYWtlKEJhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQpCitydW5fY21ha2UoRGlyT3V0cHV0KQorcnVuX2NtYWtlKE5ld0xpbmVTdHlsZS1Ob0FyZykKK3J1bl9jbWFrZShOZXdMaW5lU3R5bGUtVmFsaWRBcmcpCitydW5fY21ha2UoTmV3TGluZVN0eWxlLVdyb25nQXJnKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTVAwMDcwLU9MRC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTVAwMDcwLU9MRC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTc4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0NNUDAwNzAtT0xELXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMCBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01QMDA3MC1PTEQuY21ha2U6WzAtOV0rIFwoY21ha2VfcG9saWN5XCk6CisgIFRoZSBPTEQgYmVoYXZpb3IgZm9yIHBvbGljeSBDTVAwMDcwIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24KKyAgb2YgQ01ha2UuCisKKyAgVGhlIGNtYWtlLXBvbGljaWVzXCg3XCkgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMgb2YgYWxsCisgIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IGEgcG9saWN5IHNob3VsZCBiZSBzZXQgdG8gT0xEIG9ubHkgdW5kZXIKKyAgc3BlY2lmaWMgc2hvcnQtdGVybSBjaXJjdW1zdGFuY2VzLiAgUHJvamVjdHMgc2hvdWxkIGJlIHBvcnRlZCB0byB0aGUgTkVXCisgIGJlaGF2aW9yIGFuZCBub3QgcmVseSBvbiBzZXR0aW5nIGEgcG9saWN5IHRvIE9MRC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUGtnQ29uZmlnRG9lc05vdEV4aXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNWY3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorLS0gQ291bGQgTk9UIGZpbmQgUGtnQ29uZmlnIFwobWlzc2luZzogUEtHX0NPTkZJR19FWEVDVVRBQkxFXCkgKgorICAgIFJlYXNvbiBnaXZlbiBieSBwYWNrYWdlOiBUaGUgY29tbWFuZAorICAgICAgInBrZy1jb25maWctZG9lcy1ub3QtZXhpc3QiIC0tdmVyc2lvbgorICAgIGZhaWxlZCB3aXRoIG91dHB1dC4qCistLSBQS0dfQ09ORklHX0ZPVU5EPSdGQUxTRScKKy0tIFBLR19DT05GSUdfRVhFQ1VUQUJMRT0nJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZhYmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3QuY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoUEtHX0NPTkZJR19FWEVDVVRBQkxFICJwa2ctY29uZmlnLWRvZXMtbm90LWV4aXN0IiBDQUNIRSBGSUxFUEFUSCAiIikKK2ZpbmRfcGFja2FnZShQa2dDb25maWcpCittZXNzYWdlKFNUQVRVUyAiUEtHX0NPTkZJR19GT1VORD0nJHtQS0dfQ09ORklHX0ZPVU5EfSciKQorbWVzc2FnZShTVEFUVVMgIlBLR19DT05GSUdfRVhFQ1VUQUJMRT0nJHtQS0dfQ09ORklHX0VYRUNVVEFCTEV9JyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGI3N2JiNTQuLjlkZjFkNWIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDUgKzEsNyBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAorcnVuX2NtYWtlKFBrZ0NvbmZpZ0RvZXNOb3RFeGlzdCkKKwogcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfTk9fUEtHQ09ORklHX1BBVEgpCiBydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19QS0dDT05GSUdfUEFUSCkKIHJ1bl9jbWFrZShGaW5kUGtnQ29uZmlnX1BLR0NPTkZJR19QQVRIX05PX0NNQUtFX1BBVEgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjBkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEwKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IEMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ZjdmNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShjb21wb25lbnRzKQorcnVuX2NtYWtlKG1pc3NpbmctY29tcG9uZW50cykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL2NvbXBvbmVudHMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL2NvbXBvbmVudHMtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTc3YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvY29tcG9uZW50cy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorLS0gRm91bmQgU1dJRzogW14gXSsgXChmb3VuZCB2ZXJzaW9uICJbMC05Ll0rIlwpIGZvdW5kIGNvbXBvbmVudHM6IGphdmEgcHl0aG9uIG1pc3NpbmcgY29tcG9uZW50czogUEVSTAorLS0gU1dJR19WRVJTSU9OPSdbMC05Ll0rJworLS0gU1dJR19qYXZhX0ZPVU5EPVRSVUUKKy0tIFNXSUdfcHl0aG9uX0ZPVU5EPVRSVUUKKy0tIFNXSUdfUEVSTF9GT1VORD0KKy0tIENvbmZpZ3VyaW5nIGRvbmUKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL2NvbXBvbmVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9jb21wb25lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OWE4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9jb21wb25lbnRzLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorIyBOb3RlIHRoYXQgJ3BlcmwnIHdpbGwgbm90IGJlIGZvdW5kIGJlY2F1c2UgaXQgaXMgbm90IGxvd2VyY2FzZS4KK2ZpbmRfcGFja2FnZShTV0lHIFJFUVVJUkVECisgIENPTVBPTkVOVFMgamF2YQorICBPUFRJT05BTF9DT01QT05FTlRTIHB5dGhvbiBQRVJMKQorCittZXNzYWdlKFNUQVRVUyAiU1dJR19WRVJTSU9OPScke1NXSUdfVkVSU0lPTn0nIikKK2ZvcmVhY2goX2xhbmcgamF2YSBweXRob24gUEVSTCkKKyAgbWVzc2FnZShTVEFUVVMgIlNXSUdfJHtfbGFuZ31fRk9VTkQ9JHtTV0lHXyR7X2xhbmd9X0ZPVU5EfSIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTM3NTMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorQ291bGQgTk9UIGZpbmQgU1dJRyBcKG1pc3Npbmc6IGludmFsaWRcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMDVhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMuY21ha2UKQEAgLTAsMCArMSwzIEBACitmaW5kX3BhY2thZ2UoU1dJRyBSRVFVSVJFRAorICBDT01QT05FTlRTIGludmFsaWQKKyAgT1BUSU9OQUxfQ09NUE9ORU5UUyBhbHNvaW52YWxpZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXgtYnVpbGQtZmluYWwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4LWJ1aWxkLWZpbmFsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmU2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4LWJ1aWxkLWZpbmFsLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDUgQEAKK2luY2x1ZGUoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXhJbmZvLmNtYWtlIikKKworZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChmcmFtZXdvcmtfbG9jYXRpb24gIiR7ZnJhbWV3b3JrX2Rpcn0iIERJUkVDVE9SWSkKK3NldChub25fZXhpc3RlbnRfZGVidWdfZnJhbWV3b3JrX2RpciAiJHtmcmFtZXdvcmtfbG9jYXRpb259LyR7dGFyZ2V0X2ZpbGVfbmFtZX1fZGVidWcuZnJhbWV3b3JrIikKK3NldChmcmFtZXdvcmtfcmVzb3VyY2VzICIke2ZyYW1ld29ya19kaXJ9L1Jlc291cmNlcyIpCitzZXQocGxpc3RfZmlsZSAiJHtmcmFtZXdvcmtfcmVzb3VyY2VzfS9JbmZvLnBsaXN0IikKKworc2V0KHN5bWxpbmtfcmVsZWFzZV9wYXRoICIke2ZyYW1ld29ya19kaXJ9LyR7dGFyZ2V0X2ZpbGVfbmFtZX0iKQorc2V0KGZyYW1ld29ya19yZWxlYXNlX3BhdGggIiR7ZnJhbWV3b3JrX2Rpcn0vVmVyc2lvbnMvQS8ke3RhcmdldF9maWxlX25hbWV9IikKKworIyBXaGVuIHVzaW5nIGEgbXVsdGkgY29uZmlnIGdlbmVyYXRvciAobGlrZSBOaW5qYSBNdWx0aS1Db25maWcgYW5kIFhjb2RlKSwKKyMgdGhlIHBvc3RmaXggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBkZWJ1ZyBmcmFtZXdvcmsgbGlicmFyeSBuYW1lIGFuZCB0aGUgc3ltbGluayBuYW1lLgorIyBGb3Igc2luZ2xlIGNvbmZpZyBnZW5lcmF0b3JzLCB0aGUgbmFtZSBzdGF5cyB0aGUgc2FtZSBhcyB0aGUgdGhlIHJlbGVhc2UgZnJhbWV3b3JrLgoraWYoaXNfbXVsdGlfY29uZmlnKQorICAgIHNldChzeW1saW5rX2RlYnVnX3BhdGggIiR7ZnJhbWV3b3JrX2Rpcn0vJHt0YXJnZXRfZmlsZV9uYW1lfV9kZWJ1ZyIpCisgICAgc2V0KGZyYW1ld29ya19kZWJ1Z19wYXRoICIke2ZyYW1ld29ya19kaXJ9L1ZlcnNpb25zL0EvJHt0YXJnZXRfZmlsZV9uYW1lfV9kZWJ1ZyIpCitlbHNlKCkKKyAgICBzZXQoc3ltbGlua19kZWJ1Z19wYXRoICIke2ZyYW1ld29ya19kaXJ9LyR7dGFyZ2V0X2ZpbGVfbmFtZX0iKQorICAgIHNldChmcmFtZXdvcmtfZGVidWdfcGF0aCAiJHtmcmFtZXdvcmtfZGlyfS9WZXJzaW9ucy9BLyR7dGFyZ2V0X2ZpbGVfbmFtZX0iKQorZW5kaWYoKQorCitpZihOT1QgSVNfRElSRUNUT1JZICR7ZnJhbWV3b3JrX2Rpcn0pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRnJhbWV3b3JrIGRpciBub3QgZm91bmQgYXQgJHtmcmFtZXdvcmtfZGlyfSIpCitlbmRpZigpCisKK2lmKElTX0RJUkVDVE9SWSAke25vbl9leGlzdGVudF9kZWJ1Z19mcmFtZXdvcmtfZGlyfSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SCisgICAgICAiQSBmcmFtZXdvcmsgZGlyIHdpdGggYSBkZWJ1ZyBzdWZmaXggc2hvdWxkIG5vdCBleGlzdCBhdCAke25vbl9leGlzdGVudF9kZWJ1Z19mcmFtZXdvcmtfZGlyfSIpCitlbmRpZigpCisKK2lmKE5PVCBJU19TWU1MSU5LICIke3N5bWxpbmtfcmVsZWFzZV9wYXRofSIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUmVsZWFzZSBmcmFtZXdvcmsgc3ltbGluayBub3QgZm91bmQgYXQgJHtzeW1saW5rX3JlbGVhc2VfcGF0aH0iKQorZW5kaWYoKQorCitpZihOT1QgSVNfU1lNTElOSyAiJHtzeW1saW5rX2RlYnVnX3BhdGh9IikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJEZWJ1ZyBmcmFtZXdvcmsgc3ltbGluayBub3QgZm91bmQgYXQgJHtzeW1saW5rX2RlYnVnX3BhdGh9IikKK2VuZGlmKCkKKworaWYoTk9UIEVYSVNUUyAiJHtmcmFtZXdvcmtfcmVsZWFzZV9wYXRofSIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUmVsZWFzZSBmcmFtZXdvcmsgbm90IGZvdW5kIGF0ICR7ZnJhbWV3b3JrX3JlbGVhc2VfcGF0aH0iKQorZW5kaWYoKQorCitpZihOT1QgRVhJU1RTICIke2ZyYW1ld29ya19kZWJ1Z19wYXRofSIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRGVidWcgZnJhbWV3b3JrIG5vdCBmb3VuZCBhdCAke2ZyYW1ld29ya19kZWJ1Z19wYXRofSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWU2MjdkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeC5jbWFrZQpAQCAtMCwwICsxLDI1IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9ERUJVRyAiX2RlYnVnIikKKworc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2JpbikKK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorCitzZXQodGFyZ2V0X25hbWUgIm15bGliIikKK2FkZF9saWJyYXJ5KCR7dGFyZ2V0X25hbWV9IFNIQVJFRCBmb28uYykKK3NldF9wcm9wZXJ0eShUQVJHRVQgJHt0YXJnZXRfbmFtZX0gUFJPUEVSVFkgRlJBTUVXT1JLIE9OKQorZ2V0X3Byb3BlcnR5KGlzX211bHRpX2NvbmZpZyBHTE9CQUwgUFJPUEVSVFkgR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKworc3RyaW5nKEFQUEVORCBjb250ZW50CisgICAgICAgInNldChpc19tdWx0aV9jb25maWcgXCIke2lzX211bHRpX2NvbmZpZ31cIilcbiIKKyAgICAgICAic2V0KGZyYW1ld29ya19kaXIgXCIkPFRBUkdFVF9CVU5ETEVfRElSOiR7dGFyZ2V0X25hbWV9PlwiKVxuIgorICAgICAgICJzZXQodGFyZ2V0X2ZpbGVfbmFtZSAke3RhcmdldF9uYW1lfSlcbiIpCitmaWxlKEdFTkVSQVRFIE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4SW5mby5jbWFrZQorICAgICBDT05URU5UICIke2NvbnRlbnR9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDk2NWZiZjQuLjZlZTYxYTMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNDUsMyArNDUsMzkgQEAKIGZyYW1ld29ya190eXBlX3Rlc3QoaW9zIFNUQVRJQyBZRVMpCiBmcmFtZXdvcmtfdHlwZV90ZXN0KG9zeCBTSEFSRUQgWUVTKQogZnJhbWV3b3JrX3R5cGVfdGVzdChvc3ggU1RBVElDIFlFUykKKworZnVuY3Rpb24oZnJhbWV3b3JrX211bHRpX2NvbmZpZ19wb3N0Zml4X3Rlc3QpCisgICAgc2V0KGNvbmZpZ3VyZV9uYW1lICJGcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXgiKQorICAgIHNldChidWlsZF9uYW1lICIke2NvbmZpZ3VyZV9uYW1lfS1idWlsZC1pbnRlcm1lZGlhdGUiKQorICAgIHNldChidWlsZF9uYW1lX2ZpbmFsICIke2NvbmZpZ3VyZV9uYW1lfS1idWlsZC1maW5hbCIpCisKKyAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEgTXVsdGktQ29uZmlnIikKKyAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUworICAgICAgICAgICAgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2U7LURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCisgICAgZWxzZWlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJYY29kZSIpCisgICAgICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKKyAgICAgICAgICAgICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlIikKKyAgICBlbHNlKCkKKyAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnIikKKyAgICBlbmRpZigpCisKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtjb25maWd1cmVfbmFtZX0pCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKworICAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgICBydW5fY21ha2UoJHtjb25maWd1cmVfbmFtZX0pCisgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCisgICAgaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIE11bHRpLUNvbmZpZyIpCisgICAgICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7YnVpbGRfbmFtZV9maW5hbH0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS10YXJnZXQgYWxsOmFsbCkKKyAgICBlbHNlaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlhjb2RlIikKKyAgICAgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtidWlsZF9uYW1lfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBSZWxlYXNlKQorICAgICAgICBydW5fY21ha2VfY29tbWFuZCgke2J1aWxkX25hbWV9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQorICAgICAgICBydW5fY21ha2VfY29tbWFuZCgke2J1aWxkX25hbWVfZmluYWx9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQorICAgIGVsc2UoKQorICAgICAgICBydW5fY21ha2VfY29tbWFuZCgke2J1aWxkX25hbWVfZmluYWx9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorICAgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworZnJhbWV3b3JrX211bHRpX2NvbmZpZ19wb3N0Zml4X3Rlc3QoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvTm9TeXN0ZW0tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL05vU3lzdGVtLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmMDY0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL05vU3lzdGVtLXN0ZGVyci50eHQKQEAgLTAsMCArMSw4IEBACiteQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IC4qL01vZHVsZXMvR05VSW5zdGFsbERpcnMuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgorICBVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgQ01BS0VfSU5TVEFMTF9MSUJESVIgZGlyZWN0b3J5IGJlY2F1c2Ugbm8KKyAgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBrbm93bi4gIFBsZWFzZSBlbmFibGUgYXQgbGVhc3Qgb25lIGxhbmd1YWdlIGJlZm9yZQorICBpbmNsdWRpbmcgR05VSW5zdGFsbERpcnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBOb1N5c3RlbS5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HTlVJbnN0YWxsRGlycy9Ob1N5c3RlbS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL05vU3lzdGVtLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2Y3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HTlVJbnN0YWxsRGlycy9Ob1N5c3RlbS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3Vuc2V0KENNQUtFX1NZU1RFTV9OQU1FKQoraW5jbHVkZShHTlVJbnN0YWxsRGlycykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBkNjcxZWUwLi5lYjJjMWEyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HTlVJbnN0YWxsRGlycy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xNiw0ICsxNiw3IEBACiAgICAgKQogICBzZXQoUnVuQ01ha2Utc3RkZXJyLWZpbGUgJHtjYXNlfSR7dmFyaWFudH0tc3RkZXJyLnR4dCkKICAgcnVuX2NtYWtlKCR7Y2FzZX0pCisgIHVuc2V0KFJ1bkNNYWtlLXN0ZGVyci1maWxlKQogZW5kZm9yZWFjaCgpCisKK3J1bl9jbWFrZShOb1N5c3RlbSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL2V4cG9ydGhlYWRlcl90ZXN0LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL2V4cG9ydGhlYWRlcl90ZXN0LmNwcAppbmRleCBiYTc3Njc5Li5kY2FhNGYyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0ZUV4cG9ydEhlYWRlci9leHBvcnRoZWFkZXJfdGVzdC5jcHAKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvZXhwb3J0aGVhZGVyX3Rlc3QuY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgICAvLyB0cmFpbGluZyBudWxsIHRvIHRoZSBzdHJpbmcgdGhhdCB3ZSBuZWVkIHRvIHN0cmlwIGJlZm9yZSB0ZXN0aW5nIGZvciBhCiAgICAgLy8gdHJhaWxpbmcgc3BhY2UuCiAgICAgaWYgKHJlZkxpbmUuc2l6ZSgpICYmIHJlZkxpbmVbcmVmTGluZS5zaXplKCkgLSAxXSA9PSAwKSB7Ci0gICAgICByZWZMaW5lID0gcmVmTGluZS5zdWJzdHIoMCwgcmVmTGluZS5zaXplKCkgLSAxKTsKKyAgICAgIHJlZkxpbmUucmVzaXplKHJlZkxpbmUuc2l6ZSgpIC0gMSk7CiAgICAgfQogICAgIGlmICh0ZXN0TGluZS5zaXplKCkgJiYgdGVzdExpbmVbdGVzdExpbmUuc2l6ZSgpIC0gMV0gPT0gMCkgewotICAgICAgdGVzdExpbmUgPSB0ZXN0TGluZS5zdWJzdHIoMCwgdGVzdExpbmUuc2l6ZSgpIC0gMSk7CisgICAgICB0ZXN0TGluZS5yZXNpemUodGVzdExpbmUuc2l6ZSgpIC0gMSk7CiAgICAgfQogICAgIC8vIFRoZSByZWZlcmVuY2UgZmlsZXMgbmV2ZXIgaGF2ZSB0cmFpbGluZyBzcGFjZXM6CiAgICAgaWYgKHRlc3RMaW5lLnNpemUoKSAmJiB0ZXN0TGluZVt0ZXN0TGluZS5zaXplKCkgLSAxXSA9PSAnICcpIHsKLSAgICAgIHRlc3RMaW5lID0gdGVzdExpbmUuc3Vic3RyKDAsIHRlc3RMaW5lLnNpemUoKSAtIDEpOworICAgICAgdGVzdExpbmUucmVzaXplKHRlc3RMaW5lLnNpemUoKSAtIDEpOwogICAgIH0KICAgICBpZiAocmVmTGluZSAhPSB0ZXN0TGluZSkgewogICAgICAgc3RkOjpjb3V0IDw8ICJSZWYgYW5kIHRlc3QgYXJlIG5vdCB0aGUgc2FtZTpcbiAgUmVmOiAgXCIiIDw8IHJlZkxpbmUKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwZDQ1OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlOjIgXChhZGRfY3VzdG9tX2NvbW1hbmRcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzhjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUpCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR1VBR0U+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkYTYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZToxIFwoYWRkX2N1c3RvbV90YXJnZXRcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI2Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxMSU5LX0xBTkdVQUdFPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGM4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2U6MSBcKGFkZF9leGVjdXRhYmxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3NmIzOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS4kPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYWNkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2U6MSBcKGFkZF9saWJyYXJ5XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzZjgyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfbGlicmFyeShlbXB0eSBlbXB0eS4kPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmVmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2U6NSBcKGFkZF90ZXN0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkNTQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworaW5jbHVkZShDVGVzdCkKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX3Rlc3QoTkFNRSBkdW1teSBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkMjZkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUuY21ha2U6MyBcKGZpbGVcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5Yjg4MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCBDKQorCitmaWxlKEdFTkVSQVRFCisgIE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vb3V0cHV0LnR4dAorICBDT05URU5UICJMQU5HX0lTXyQ8TElOS19MQU5HVUFHRT5cbiIKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1pbnN0YWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1pbnN0YWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYWZjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorCisKK0NNYWtlIEdlbmVyYXRlIHN0ZXAgZmFpbGVkLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1pbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLWluc3RhbGwuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzYzBiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS1pbnN0YWxsLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitpbnN0YWxsKEZJTEVTCisgIGVtcHR5LiQ8TElOS19MQU5HVUFHRT4KKyAgREVTVElOQVRJT04gc3JjCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxMjFjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZToyIFwodGFyZ2V0X3NvdXJjZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTM0YzAxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorYWRkX2xpYnJhcnkoZW1wdHkpCit0YXJnZXRfc291cmNlcyhlbXB0eSBQUklWQVRFIGVtcHR5LiQ8TElOS19MQU5HVUFHRT4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXVua25vd24tbGFuZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE0NzJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXVua25vd24tbGFuZy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46JDxUQVJHRVRfRVhJU1RTOnRvbyxtYW55LHBhcmFtZXRlcnM+PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzYTgzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLmNtYWtlOjQgXCh0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRTpDPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI3Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpERUY+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UyLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU0MzEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIuY21ha2U6NCBcKHRhcmdldF9jb21waWxlX29wdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U6Qz4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2MTg5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjotT1BUPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyMGU5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLmNtYWtlOjQgXCh0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRTpDPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE3MmExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjovRElSPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzNjkxMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LmNtYWtlOjcgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRT4gaXMgbm90IHN1cHBvcnRlZCBpbiBsaW5rIGxpYnJhcmllcyBleHByZXNzaW9uLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYWFiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWJDIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZW1wdHkgUFJJVkFURSBsaWIkPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmY2MmJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2U6MiBcKGFkZF9jdXN0b21fY29tbWFuZFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpMQU5HLElEPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjkyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUpCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR19BTkRfSUQ6TEFORyxJRD4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ5YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlOjIgXChhZGRfY3VzdG9tX3RhcmdldFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpMQU5HLElEPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWY3NmJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCithZGRfY3VzdG9tX3RhcmdldChkcml2ZQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR19BTkRfSUQ6TEFORyxJRD4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUzMTJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlOjEgXChhZGRfZXhlY3V0YWJsZVwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLE1TVkM+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmM2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUuY21ha2UKQEAgLTAsMCArMSw1IEBACithZGRfZXhlY3V0YWJsZShlbXB0eSBtYWluLmMKKyAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPjplbXB0eS5jPgorICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT46ZW1wdHkyLmM+CisgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQ2xhbmc+OmVtcHR5My5jPgorICAgICAgICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0NmUyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZToyIFwoYWRkX2xpYnJhcnlcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODE5OWNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCithZGRfbGlicmFyeShlbXB0eSBlbXB0eS4kPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTI5NDkyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlOjUgXChhZGRfdGVzdFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDWFgsR05VPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDcwMGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitpbmNsdWRlKENUZXN0KQorZW5hYmxlX3Rlc3RpbmcoKQorCithZGRfdGVzdChOQU1FIGR1bW15IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8TElOS19MQU5HX0FORF9JRDpDWFgsR05VPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2I1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlOjMgXChmaWxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWZpbGVfZ2VuZXJhdGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdjMWJkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCBDKQorCitmaWxlKEdFTkVSQVRFCisgIE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vb3V0cHV0LnR4dAorICBDT05URU5UICJMQU5HX0lTXyQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPjpDPlxuIgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1Zjk3NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMCBAQAorQ01ha2UgRXJyb3I6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkMsTVNWQz4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCisKKworQ01ha2UgR2VuZXJhdGUgc3RlcCBmYWlsZWQuICBCdWlsZCBmaWxlcyBjYW5ub3QgYmUgcmVnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtaW5zdGFsbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY5MzIzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luc3RhbGwoRklMRVMKKyAgZW1wdHkuJDxMSU5LX0xBTkdfQU5EX0lEOkMsTVNWQz4KKyAgREVTVElOQVRJT04gc3JjCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2NjAyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOCBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZToyIFwodGFyZ2V0X3NvdXJjZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRD4gZXhwcmVzc2lvbiByZXF1aXJlcyBhdCBsZWFzdCB0d28gcGFyYW1ldGVycy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVmYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorYWRkX2xpYnJhcnkoZW1wdHkpCit0YXJnZXRfc291cmNlcyhlbXB0eSBQUklWQVRFIGVtcHR5LiQ8TElOS19MQU5HX0FORF9JRD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWRkMzM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxHTlU+OiQ8VEFSR0VUX0VYSVNUUzp0b28sbWFueSxwYXJhbWV0ZXJzPj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjExYzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS5jbWFrZTo0IFwodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ZTNiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPjpERUY+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UyLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JkY2IyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTIuY21ha2U6NCBcKHRhcmdldF9jb21waWxlX29wdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4ZGFhOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTIuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT46LU9QVD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGEyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy5jbWFrZTo0IFwodGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0MzA1NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGVtcHR5IFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+Oi9ESVI+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2OGEwMTcyLi42NTUwZjg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMzksNiArMzksMzEgQEAKIHJ1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5KQogcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QpCiBydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC11bmtub3duLWxhbmcpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldCkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZCkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWluc3RhbGwpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcykKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1hZGRfdGVzdCkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLXVua25vd24tbGFuZykKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMSkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMikKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMykKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNCkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUpCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWluc3RhbGwpCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcykKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkpCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXVua25vd24tbGFuZykKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMSkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMikKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMykKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWZpbGVfZ2VuZXJhdGUpCiBydW5fY21ha2UoVEFSR0VUX0ZJTEUtcmVjdXJzaW9uKQogcnVuX2NtYWtlKE9VVFBVVF9OQU1FLXJlY3Vyc2lvbikKIHJ1bl9jbWFrZShUQVJHRVRfRklMRV9QUkVGSVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGFlNzU1NjEuLmJiMjI4NDEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0zMCw2ICszMCw4IEBACiAgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9UT09MU0VUICJUZXN0IFRvb2xzZXQsaG9zdD14NjQsaG9zdD14ODYiKQogICAgIHJ1bl9jbWFrZShCYWRUb29sc2V0SG9zdEFyY2hUd2ljZSkKICAgICBpZigiJHtSdW5DTWFrZV9HRU5FUkFUT1J9IiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIDFbNTZdIikKKyAgICAgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVCAiVkNUYXJnZXRzUGF0aD1UZXN0IFBhdGgiKQorICAgICAgcnVuX2NtYWtlKFRlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHkpCiAgICAgICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1RPT0xTRVQgIlRlc3QgVG9vbHNldCx2ZXJzaW9uPVRlc3QgVG9vbHNldCBWZXJzaW9uIikKICAgICAgIHJ1bl9jbWFrZShUZXN0VG9vbHNldFZlcnNpb25Cb3RoKQogICAgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9UT09MU0VUICIsdmVyc2lvbj1UZXN0IFRvb2xzZXQgVmVyc2lvbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1Rlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHktc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvVGVzdFRvb2xzZXRWQ1RhcmdldHNQYXRoT25seS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjM3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1Rlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHktc3Rkb3V0LnR4dApAQCAtMCwwICsxLDIgQEAKKy0tIENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVQ9J3ZbMC05XSsnCistLSBDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX1ZDVEFSR0VUU19DVVNUT01fRElSPSdUZXN0IFBhdGgnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1Rlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1Rlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYTMwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvVGVzdFRvb2xzZXRWQ1RhcmdldHNQYXRoT25seS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9WU19QTEFURk9STV9UT09MU0VUPScke0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVR9JyIpCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WQ1RBUkdFVFNfQ1VTVE9NX0RJUj0nJHtDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX1ZDVEFSR0VUU19DVVNUT01fRElSfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tZGVidWctc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLWRlYnVnLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZDFhNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLWRlYnVnLXN0ZG91dC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IHByb2plY3QgLipHb29nbGVUZXN0LWRpc2NvdmVyeS1tdWx0aS1jb25maWcKK1sgXHRdKlRlc3QgI1swLTldKzogY29uZmlndXJhdGlvblwuY2FzZV9yZWxlYXNlIFwoRGlzYWJsZWRcKQorWyBcdF0qVGVzdCAjWzAtOV0rOiBjb25maWd1cmF0aW9uXC5jYXNlX2RlYnVnCisrCitUb3RhbCBUZXN0czogMgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tcmVsZWFzZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tcmVsZWFzZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTE2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtY29uZmlndXJhdGlvbi1yZWxlYXNlLXN0ZG91dC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IHByb2plY3QgLipHb29nbGVUZXN0LWRpc2NvdmVyeS1tdWx0aS1jb25maWcKK1sgXHRdKlRlc3QgI1swLTldKzogY29uZmlndXJhdGlvblwuY2FzZV9yZWxlYXNlCitbIFx0XSpUZXN0ICNbMC05XSs6IGNvbmZpZ3VyYXRpb25cLmNhc2VfZGVidWcgXChEaXNhYmxlZFwpCisrCitUb3RhbCBUZXN0czogMgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LWJ1aWxkLXN0ZG91dC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1zdGRvdXQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1zdGRvdXQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YmU5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC10ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlOiBkaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVAorRXJyb3JzIHdoaWxlIHJ1bm5pbmcgQ1Rlc3QKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWRlM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTggQEAKK1Rlc3QgcHJvamVjdCAuKkdvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQKK1sgXHRdKlN0YXJ0IFswLTldKzogZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0NvdWxkIG5vdCBmaW5kIGV4ZWN1dGFibGUgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0xvb2tlZCBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczoKK2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUCitkaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVChcLmV4ZSk/CitEZWJ1Zy9kaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVAorRGVidWcvZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQoXC5leGUpPworRGVidWcvZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0RlYnVnL2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUKFwuZXhlKT8KK1teXG5dK2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUICtcLitcKlwqXCpOb3QgUnVuICtbMC05Ll0rIHNlYworKworMCUgdGVzdHMgcGFzc2VkLCAxIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gICArWzAtOS5dKyBzZWMKKysKK1RoZSBmb2xsb3dpbmcgdGVzdHMgRkFJTEVEOgorW15cbl0rZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQgXChOb3QgUnVuXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUFJFX1RFU1QtdGltZW91dC10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YWZlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOCBAQAorQ01ha2UgRXJyb3IgYXQgLipHb29nbGVUZXN0QWRkVGVzdHMuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgorWyBcdF0qRXJyb3IgcnVubmluZyB0ZXN0IGV4ZWN1dGFibGUuCisrCitbIFx0XSpQYXRoOiAnLipkaXNjb3ZlcnlfdGltZW91dF90ZXN0KFwuZXhlKT8nCitbIFx0XSpSZXN1bHQ6IFByb2Nlc3MgdGVybWluYXRlZCBkdWUgdG8gdGltZW91dAorWyBcdF0qT3V0cHV0OgorWyBcdF0qdGltZW91dC4KK1sgXHRdKmNhc2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUFJFX1RFU1QtdGltZW91dC10ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTA2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgcHJvamVjdCAuKkdvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC5jbWFrZQppbmRleCAzMTgwOGM2Li40YmM2YjlkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LmNtYWtlCkBAIC00OSwxMSArNDksMyBAQAogICBESVNDT1ZFUllfVElNRU9VVCAyMAogICBQUk9QRVJUSUVTIFRJTUVPVVQgMgogKQotCi1hZGRfZXhlY3V0YWJsZShkaXNjb3ZlcnlfdGltZW91dF90ZXN0IHRpbWVvdXRfdGVzdC5jcHApCi10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhkaXNjb3ZlcnlfdGltZW91dF90ZXN0IFBSSVZBVEUgZGlzY292ZXJ5U2xlZXBTZWM9MTApCi1ndGVzdF9kaXNjb3Zlcl90ZXN0cygKLSAgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdAotICBURVNUX1BSRUZJWCBkaXNjb3ZlcnlfCi0gIERJU0NPVkVSWV9USU1FT1VUIDIKLSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeU11bHRpQ29uZmlnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0RGlzY292ZXJ5TXVsdGlDb25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxOWRjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeU11bHRpQ29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK3Byb2plY3QodGVzdF9pbmNsdWRlX2RpcnMpCitpbmNsdWRlKENUZXN0KQoraW5jbHVkZShHb29nbGVUZXN0KQorCitlbmFibGVfdGVzdGluZygpCisKK2FkZF9leGVjdXRhYmxlKGNvbmZpZ3VyYXRpb25fZ3Rlc3QgY29uZmlndXJhdGlvbl9ndGVzdC5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhjb25maWd1cmF0aW9uX2d0ZXN0IFBSSVZBVEUgJDwkPENPTkZJRzpEZWJ1Zz46REVCVUc9MT4pCisKK2d0ZXN0X2Rpc2NvdmVyX3Rlc3RzKAorICBjb25maWd1cmF0aW9uX2d0ZXN0CisgIFBST1BFUlRJRVMgTEFCRUxTIENPTkZJRworICBESVNDT1ZFUllfTU9ERSBQUkVfVEVTVAorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0RGlzY292ZXJ5VGltZW91dC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeVRpbWVvdXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5OGZhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeVRpbWVvdXQuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorcHJvamVjdCh0ZXN0X2luY2x1ZGVfZGlycykKK2luY2x1ZGUoQ1Rlc3QpCitpbmNsdWRlKEdvb2dsZVRlc3QpCisKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX2V4ZWN1dGFibGUoZGlzY292ZXJ5X3RpbWVvdXRfdGVzdCB0aW1lb3V0X3Rlc3QuY3BwKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZGlzY292ZXJ5X3RpbWVvdXRfdGVzdCBQUklWQVRFIGRpc2NvdmVyeVNsZWVwU2VjPTEwKQorZ3Rlc3RfZGlzY292ZXJfdGVzdHMoCisgIGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QKKyAgVEVTVF9QUkVGSVggZGlzY292ZXJ5XworICBESVNDT1ZFUllfVElNRU9VVCAyCisgIERJU0NPVkVSWV9NT0RFICR7RElTQ09WRVJZX01PREV9CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtcmVzdWx0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLXJlc3VsdC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZkYWMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLXJlc3VsdC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldChSRVNVTFRfRklMRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUwuRm9vLnhtbCIpCitpZihOT1QgRVhJU1RTICR7UkVTVUxUX0ZJTEV9KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlJlc3VsdCBYTUwgZmlsZSAke1JFU1VMVF9GSUxFfSB3YXMgbm90IGNyZWF0ZWQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NmRlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwuY21ha2UKQEAgLTAsMCArMSwxMSBAQAorcHJvamVjdCh0ZXN0X2luY2x1ZGVfZGlycykKK2luY2x1ZGUoQ1Rlc3QpCitpbmNsdWRlKEdvb2dsZVRlc3QpCisKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX2V4ZWN1dGFibGUoeG1sX291dHB1dCB4bWxfb3V0cHV0LmNwcCkKK2d0ZXN0X2Rpc2NvdmVyX3Rlc3RzKAorICB4bWxfb3V0cHV0CisgIFhNTF9PVVRQVVRfRElSICR7Q01BS0VfQklOQVJZX0RJUn0KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMGZhNGUyYS4uNmI5ZDQ1OCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNiArMSw2IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCi1mdW5jdGlvbihydW5fR29vZ2xlVGVzdCkKK2Z1bmN0aW9uKHJ1bl9Hb29nbGVUZXN0IERJU0NPVkVSWV9NT0RFKQogICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vR29vZ2xlVGVzdC1idWlsZCkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKQEAgLTEwLDcgKzEwLDcgQEAKICAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKICAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKIAotICBydW5fY21ha2UoR29vZ2xlVGVzdCkKKyAgcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhHb29nbGVUZXN0IC1EQ01BS0VfR1RFU1RfRElTQ09WRVJfVEVTVFNfRElTQ09WRVJZX01PREU9JHtESVNDT1ZFUllfTU9ERX0pCiAKICAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1idWlsZAogICAgICR7Q01BS0VfQ09NTUFORH0KQEAgLTI2LDE1ICsyNiw2IEBACiAgICAgLS10YXJnZXQgcHJvcGVydHlfdGltZW91dF90ZXN0CiAgICkKIAotICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMSkKLSAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dAotICAgICR7Q01BS0VfQ09NTUFORH0KLSAgICAtLWJ1aWxkIC4KLSAgICAtLWNvbmZpZyBEZWJ1ZwotICAgIC0tdGFyZ2V0IGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QKLSAgKQotICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMCkKLQogICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LXRlc3QxCiAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQogICAgIC1DIERlYnVnCkBAIC03MSw0ICs2MiwxMDcgQEAKICAgKQogZW5kZnVuY3Rpb24oKQogCi1ydW5fR29vZ2xlVGVzdCgpCitmdW5jdGlvbihydW5fR29vZ2xlVGVzdFhNTCBESVNDT1ZFUllfTU9ERSkKKyAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUwtYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGlmKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnKQorICBlbmRpZigpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisKKyAgcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhHb29nbGVUZXN0WE1MIC1EQ01BS0VfR1RFU1RfRElTQ09WRVJfVEVTVFNfRElTQ09WRVJZX01PREU9JHtESVNDT1ZFUllfTU9ERX0pCisKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdFhNTC1kaXNjb3ZlcnkKKyAgJHtDTUFLRV9DT01NQU5EfQorICAtLWJ1aWxkIC4KKyAgLS1jb25maWcgRGVidWcKKyAgLS10YXJnZXQgeG1sX291dHB1dAorICApCisKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdFhNTC1yZXN1bHQKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAtQyBEZWJ1ZworICAtUiBHb29nbGVUZXN0WE1MCisgIC0tbm8tbGFiZWwtc3VtbWFyeQorICApCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKHJ1bl9Hb29nbGVUZXN0X2Rpc2NvdmVyeV90aW1lb3V0IERJU0NPVkVSWV9NT0RFKQorICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgaWYoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcpCisgIGVuZGlmKCkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKworICBydW5fY21ha2Vfd2l0aF9vcHRpb25zKEdvb2dsZVRlc3REaXNjb3ZlcnlUaW1lb3V0IC1ERElTQ09WRVJZX01PREU9JHtESVNDT1ZFUllfTU9ERX0pCisKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtZGlzY292ZXJ5LSR7RElTQ09WRVJZX01PREV9LXRpbWVvdXQtYnVpbGQKKyAgICAke0NNQUtFX0NPTU1BTkR9CisgICAgLS1idWlsZCAuCisgICAgLS1jb25maWcgRGVidWcKKyAgICAtLXRhcmdldCBkaXNjb3ZlcnlfdGltZW91dF90ZXN0CisgICkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDApCisKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1kaXNjb3ZlcnktJHtESVNDT1ZFUllfTU9ERX0tdGltZW91dC10ZXN0CisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgIC1DIERlYnVnCisgICAgLVIgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdAorICAgIC0tbm8tbGFiZWwtc3VtYXJ5CisgICkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24ocnVuX0dvb2dsZVRlc3RfZGlzY292ZXJ5X211bHRpX2NvbmZpZykKKyAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3QtZGlzY292ZXJ5LW11bHRpLWNvbmZpZykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKworICBydW5fY21ha2UoR29vZ2xlVGVzdERpc2NvdmVyeU11bHRpQ29uZmlnKQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtYnVpbGQtcmVsZWFzZQorICAgICR7Q01BS0VfQ09NTUFORH0KKyAgICAtLWJ1aWxkIC4KKyAgICAtLWNvbmZpZyBSZWxlYXNlCisgICAgLS10YXJnZXQgY29uZmlndXJhdGlvbl9ndGVzdAorICApCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtYnVpbGQtZGVidWcKKyAgICAke0NNQUtFX0NPTU1BTkR9CisgICAgLS1idWlsZCAuCisgICAgLS1jb25maWcgRGVidWcKKyAgICAtLXRhcmdldCBjb25maWd1cmF0aW9uX2d0ZXN0CisgICkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLXJlbGVhc2UKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgLUMgUmVsZWFzZQorICAgIC1MIENPTkZJRworICAgIC1OCisgICkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLWRlYnVnCisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgIC1DIERlYnVnCisgICAgLUwgQ09ORklHCisgICAgLU4KKyAgKQorCitlbmRmdW5jdGlvbigpCisKK2ZvcmVhY2goRElTQ09WRVJZX01PREUgUE9TVF9CVUlMRCBQUkVfVEVTVCkKKyAgbWVzc2FnZSgiVGVzdGluZyAke0RJU0NPVkVSWV9NT0RFfSBkaXNjb3ZlcnkgbW9kZSB2aWEgQ01BS0VfR1RFU1RfRElTQ09WRVJfVEVTVFNfRElTQ09WRVJZX01PREUgZ2xvYmFsIG92ZXJyaWRlLi4uIikKKyAgcnVuX0dvb2dsZVRlc3QoJHtESVNDT1ZFUllfTU9ERX0pCisgIHJ1bl9Hb29nbGVUZXN0WE1MKCR7RElTQ09WRVJZX01PREV9KQorICBtZXNzYWdlKCJUZXN0aW5nICR7RElTQ09WRVJZX01PREV9IGRpc2NvdmVyeSBtb2RlIHZpYSBESVNDT1ZFUllfTU9ERSBvcHRpb24uLi4iKQorICBydW5fR29vZ2xlVGVzdF9kaXNjb3ZlcnlfdGltZW91dCgke0RJU0NPVkVSWV9NT0RFfSkKK2VuZGZvcmVhY2goKQorCitpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBtZXNzYWdlKCJUZXN0aW5nIFBSRV9URVNUIGRpc2NvdmVyeSBtdWx0aSBjb25maWd1cmF0aW9uLi4uIikKKyAgcnVuX0dvb2dsZVRlc3RfZGlzY292ZXJ5X211bHRpX2NvbmZpZygpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L2NvbmZpZ3VyYXRpb25fZ3Rlc3QuY3BwIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9jb25maWd1cmF0aW9uX2d0ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JiMTM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9jb25maWd1cmF0aW9uX2d0ZXN0LmNwcApAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIC8vIE5vdGU6IEdvb2dsZVRlc3QuY21ha2UgZG9lc24ndCBhY3R1YWxseSBkZXBlbmQgb24gR29vZ2xlIFRlc3QgYXMgc3VjaDsKKyAgLy8gaXQgb25seSByZXF1aXJlcyB0aGF0IHdlIHByb2R1Y2VzIG91dHB1dCBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHdoZW4KKyAgLy8gaW52b2tlZCB3aXRoIC0tZ3Rlc3RfbGlzdF90ZXN0cy4gVGh1cywgd2UgZmFrZSB0aGF0IGhlcmUuIFRoaXMgYWxsb3dzIHVzCisgIC8vIHRvIHRlc3QgdGhlIG1vZHVsZSB3aXRob3V0IGFjdHVhbGx5IG5lZWRpbmcgR29vZ2xlIFRlc3QuCisgIGlmIChhcmdjID4gMSAmJiBzdGQ6OnN0cmluZyhhcmd2WzFdKSA9PSAiLS1ndGVzdF9saXN0X3Rlc3RzIikgeworICAgIHN0ZDo6Y291dCA8PCAiY29uZmlndXJhdGlvbi4iIDw8IHN0ZDo6ZW5kbDsKKyNpZmRlZiBERUJVRworICAgIHN0ZDo6Y291dCA8PCAiICBESVNBQkxFRF9jYXNlX3JlbGVhc2UiIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZV9kZWJ1ZyIgPDwgc3RkOjplbmRsOworI2Vsc2UKKyAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZV9yZWxlYXNlIiA8PCBzdGQ6OmVuZGw7CisgICAgc3RkOjpjb3V0IDw8ICIgIERJU0FCTEVEX2Nhc2VfZGVidWciIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZgorICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3RpbWVvdXRfdGVzdC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3RpbWVvdXRfdGVzdC5jcHAKaW5kZXggYjhhZDA1NS4uNTUwNjI2OSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC90aW1lb3V0X3Rlc3QuY3BwCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvdGltZW91dF90ZXN0LmNwcApAQCAtNCw5ICs0LDEwIEBACiAjICBpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogCisjaW5jbHVkZSA8c3RkaW8uaD4KKwogdm9pZCBzbGVlcEZvcih1bnNpZ25lZCBzZWNvbmRzKQogewogI2lmIGRlZmluZWQoX1dJTjMyKQpAQCAtMjMsOCArMjQsOCBAQAogICAvLyBpbnZva2VkIHdpdGggLS1ndGVzdF9saXN0X3Rlc3RzLiBUaHVzLCB3ZSBmYWtlIHRoYXQgaGVyZS4gVGhpcyBhbGxvd3MgdXMKICAgLy8gdG8gdGVzdCB0aGUgbW9kdWxlIHdpdGhvdXQgYWN0dWFsbHkgbmVlZGluZyBHb29nbGUgVGVzdC4KICAgaWYgKGFyZ2MgPiAxICYmIHN0ZDo6c3RyaW5nKGFyZ3ZbMV0pID09ICItLWd0ZXN0X2xpc3RfdGVzdHMiKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJ0aW1lb3V0LiIgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlIiA8PCBzdGQ6OmVuZGw7CisgICAgcHJpbnRmKCJ0aW1lb3V0LlxuICBjYXNlXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKICNpZmRlZiBkaXNjb3ZlcnlTbGVlcFNlYwogICAgIHNsZWVwRm9yKGRpc2NvdmVyeVNsZWVwU2VjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC94bWxfb3V0cHV0LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QveG1sX291dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzMDIzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QveG1sX291dHB1dC5jcHAKQEAgLTAsMCArMSwyNiBAQAorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIC8vIE5vdGU6IEdvb2dsZVRlc3RYTUwuY21ha2UgZG9lc24ndCBhY3R1YWxseSBkZXBlbmQgb24gR29vZ2xlIFRlc3QgYXMgc3VjaDsKKyAgLy8gaXQgb25seSBtaW1pY2tzIHRoZSBvdXRwdXQgZmlsZSBjcmVhdGlvbiB1c2luZyB0aGUgcGF0aCBwYXNzZWQgdG8gdGhpcworICAvLyB0ZXN0IHdpdGhvdXQgYW55IGNvbnRlbnQKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKyAgICBzdGQ6OnN0cmluZyBwYXJhbShhcmd2W2ldKTsKKyAgICBpZiAocGFyYW0uZmluZCgiLS1ndGVzdF9saXN0X3Rlc3RzIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIC8vIFRoaXMgYWN0dWFsbHkgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBwYXNzZWQgaW4gdGhlIDJuZCBydW4KKyAgICAgIHN0ZDo6Y291dCA8PCAiR29vZ2xlVGVzdFhNTC4iIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHN0ZDo6Y291dCA8PCAiICBGb28iIDw8IHN0ZDo6ZW5kbDsKKyAgICB9IGVsc2UgaWYgKHBhcmFtLmZpbmQoIi0tZ3Rlc3Rfb3V0cHV0PXhtbDoiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzcGxpdCA9IHBhcmFtLmZpbmQoIjoiKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGZpbGVwYXRoID0gcGFyYW0uc3Vic3RyKHNwbGl0ICsgMSk7CisgICAgICAvLyBUaGUgZnVsbCBmaWxlIHBhdGggaXMgcGFzc2VkCisgICAgICBzdGQ6Om9mc3RyZWFtIG9zdHJtKGZpbGVwYXRoLmNfc3RyKCksIHN0ZDo6aW9zOjpiaW5hcnkpOworICAgICAgb3N0cm0gPDwgIi0tZ3Rlc3Rfb3V0cHV0PXhtbDogbW9ja3VwIGZpbGVcbiI7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZS5pbiBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMWMzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZS5pbgpAQCAtMCwwICsxIEBACitzZXQoJHtncmFwaHZpel9vcHRpb25fbmFtZX0gJHtncmFwaHZpel9vcHRpb25fdmFsdWV9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNkNGNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNSkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovR3JhcGh2aXpUZXN0UHJvamVjdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0dyYXBodml6VGVzdFByb2plY3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyZjMxMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0dyYXBodml6VGVzdFByb2plY3QuY21ha2UKQEAgLTAsMCArMSw1OCBAQAorIyBGb3IgdGhlIHNha2Ugb2YgY2xhcml0eSwgd2UgbW9kZWwgYSBkdW1teSBidXQgcmVhbGlzdGljIGFwcGxpY2F0aW9uOgorIworIyAgIC0gV2UgaGF2ZSB0d28gZXhlY3V0YWJsZXMsIGZvciBhIGNvbnNvbGUgYW5kIGEgR1VJIHZhcmlhbnQgb2YgdGhhdCBhcHAKKyMgICAtIEJvdGggZXhlY3V0YWJsZXMgZGVwZW5kIG9uIGEgQ29yZUxpYnJhcnkgKFNUQVRJQykKKyMgICAtIFRoZSBHVUkgZXhlY3V0YWJsZSBhbHNvIGRlcGVuZHMgb24gYSBHcmFwaGljTGlicmFyeSAoU0hBUkVEKQorIyAgIC0gV2UgYnVpbGQgdHdvIEdyYXBoaWNEcml2ZXJzIGFzIE1PRFVMRXMKKyMgICAtIFRoZSBDb3JlTGlicmFyeSBkZXBlbmRzIG9uIGEgdGhpcmQtcGFydHkgaGVhZGVyLW9ubHkgKElOVEVSRkFDRSkKKyMgICAgIEdvb2Z5TG9nZ2luZ0xpYnJhcnksIHdoaWNoIHdlIHJlbmFtZSB1c2luZyBhbiBBTElBUyBmb3Igb2J2aW91cyByZWFzb25zCisjICAgLSBBbGwgbGlicmFyeSBkZXBlbmQgb24gYSBjb21tb24gSU5URVJGQUNFIGxpYnJhcnkgaG9sZGluZyBjb21waWxlciBmbGFncworIyAgIC0gV2UgaGF2ZSBhIGN1c3RvbSB0YXJnZXQgdG8gZ2VuZXJhdGUgYSBtYW4gcGFnZQorIyAgIC0gU29tZW9uZSBoYXMgYWRkZWQgYW4gVU5LTk9XTiwgSU1QT1JURUQgY3J5cHRvIG1pbmluZyBsaWJyYXJ5IQorCithZGRfc3ViZGlyZWN0b3J5KHRlc3RfcHJvamVjdC90aGlyZF9wYXJ0eV9wcm9qZWN0KQorCithZGRfbGlicmFyeShTZXJpb3VzTG9nZ2luZ0xpYnJhcnkgQUxJQVMgR29vZnlMb2dnaW5nTGlicmFyeSkKK2FkZF9saWJyYXJ5KFRoZUJlc3RMb2dnaW5nTGlicmFyeSBBTElBUyBHb29meUxvZ2dpbmdMaWJyYXJ5KQorCithZGRfbGlicmFyeShDb21waWxlckZsYWdzIElOVEVSRkFDRSkKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKENvbXBpbGVyRmxhZ3MgSU5URVJGQUNFIC0tb3B0aW1pemU9RVZFUllUSElORykKKworYWRkX2xpYnJhcnkoQ29yZUxpYnJhcnkgU1RBVElDIHRlc3RfcHJvamVjdC9jb3JlX2xpYnJhcnkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb3JlTGlicmFyeSBQVUJMSUMgQ29tcGlsZXJGbGFncykKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvcmVMaWJyYXJ5IFBSSVZBVEUgU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KQorCithZGRfbGlicmFyeShHcmFwaGljTGlicmFyeU9iamVjdHMgT0JKRUNUIHRlc3RfcHJvamVjdC9ncmFwaGljX2xpYnJhcnkuYykKKworYWRkX2xpYnJhcnkoR3JhcGhpY0xpYnJhcnkgU0hBUkVEKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNMaWJyYXJ5IFBVQkxJQyBDb21waWxlckZsYWdzKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNMaWJyYXJ5IFBSSVZBVEUgR3JhcGhpY0xpYnJhcnlPYmplY3RzKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNMaWJyYXJ5IFBSSVZBVEUgQ29yZUxpYnJhcnkpCisKKyMgVGVzdCB0YXJnZXQgbGFiZWxzIHdpdGggcXVvdGVzIGluIHRoZW07IHRoZXkgc2hvdWxkIGJlIGVzY2FwZWQgaW4gdGhlIGRvdAorIyBmaWxlLgorIyBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE5NzQ2Cit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0xpYnJhcnkgUFJJVkFURSAiXCItbG1cIiIpCisKKyMgTm90ZTogbW9kdWxlcyBhcmUgc3RhbmRhbG9uZSwgYnV0IGNhbiBoYXZlIGRlcGVuZGVuY2llcy4KK2FkZF9saWJyYXJ5KEdyYXBoaWNEcml2ZXJPcGVuR0wgTU9EVUxFIHRlc3RfcHJvamVjdC9tb2R1bGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhHcmFwaGljRHJpdmVyT3BlbkdMIFBSSVZBVEUgQ29tcGlsZXJGbGFncykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhHcmFwaGljRHJpdmVyT3BlbkdMIFBSSVZBVEUgQ29yZUxpYnJhcnkpCithZGRfbGlicmFyeShHcmFwaGljRHJpdmVyVnVsa2FuIE1PRFVMRSB0ZXN0X3Byb2plY3QvbW9kdWxlLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0RyaXZlclZ1bGthbiBQUklWQVRFIENvbXBpbGVyRmxhZ3MpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0RyaXZlclZ1bGthbiBQUklWQVRFIENvcmVMaWJyYXJ5KQorCithZGRfZXhlY3V0YWJsZShHcmFwaGljQXBwbGljYXRpb24gdGVzdF9wcm9qZWN0L21haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhHcmFwaGljQXBwbGljYXRpb24gQ29yZUxpYnJhcnkpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0FwcGxpY2F0aW9uIEdyYXBoaWNMaWJyYXJ5KQorCithZGRfZXhlY3V0YWJsZShDb25zb2xlQXBwbGljYXRpb24gdGVzdF9wcm9qZWN0L21haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb25zb2xlQXBwbGljYXRpb24gQ29yZUxpYnJhcnkpCisKKyMgTm8gb25lIHdpbGwgZXZlciBub3RpY2UuLi4KK2FkZF9saWJyYXJ5KENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSBVTktOT1dOIElNUE9SVEVEKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbnNvbGVBcHBsaWNhdGlvbiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkpCisKK2FkZF9jdXN0b21fdGFyZ2V0KEdlbmVyYXRlTWFuUGFnZSBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLS12ZXJzaW9uKQorYWRkX2RlcGVuZGVuY2llcyhDb25zb2xlQXBwbGljYXRpb24gR2VuZXJhdGVNYW5QYWdlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwY2VhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw4MiBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworZmluZF9wcm9ncmFtKERPVCBkb3QpCisKKyMgU2V0IHRvIFRSVUUgdG8gcmUtZ2VuZXJhdGUgdGhlIHJlZmVyZW5jZSBmaWxlcyBmcm9tIHRoZSBhY3R1YWwgb3V0cHV0cy4KKyMgTWFrZSBzdXJlIHlvdSB2ZXJpZnkgdGhlbSEKK3NldChSRVBMQUNFX1JFRkVSRU5DRV9GSUxFUyBGQUxTRSkKKworIyBTZXQgdG8gVFJVRSB0byBnZW5lcmF0ZSBQTkcgZmlsZXMgZnJvbSB0aGUgLmRvdCBmaWxlcywgdXNpbmcgR3JhcGh2aXogKGRvdCkuCisjIERpc2FibGVkIGJ5IGRlZmF1bHQgKHNvIHdlIGRvbid0IGRlcGVuZCBvbiBHcmFwaHZpeikgYnV0IHVzZWZ1bCBkdXJpbmcKKyMgZGVidWdnaW5nLgorc2V0KEdFTkVSQVRFX1BOR19GSUxFUyBGQUxTRSkKKworIyAxLiBHZW5lcmF0ZSB0aGUgR3JhcGh2aXogKC5kb3QpIGZpbGUgZm9yIGEgc2FtcGxlIHByb2plY3QgdGhhdCBjb3ZlcnMgbW9zdAorIyAgICAoaWRlYWxseSwgYWxsKSB0YXJnZXQgYW5kIGRlcGVuZGVuY3kgdHlwZXM7CisjIDIuIENvbXBhcmUgdGhhdCBnZW5lcmF0ZWQgZmlsZSB3aXRoIGEgcmVmZXJlbmNlIGZpbGUuCitmdW5jdGlvbihydW5fdGVzdCB0ZXN0X25hbWUgZ3JhcGh2aXpfb3B0aW9uX25hbWUgZ3JhcGh2aXpfb3B0aW9uX3ZhbHVlKQorCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke3Rlc3RfbmFtZX0pCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisKKyAgIyBTZXQgJHtncmFwaHZpel9vcHRpb25fbmFtZX0gdG8gJHtncmFwaHZpel9vcHRpb25fdmFsdWV9LgorICBpZihncmFwaHZpel9vcHRpb25fbmFtZSkKKyAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlLmluCisgICAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2UKKyAgICApCisgIGVuZGlmKCkKKworICBydW5fY21ha2UoR3JhcGh2aXpUZXN0UHJvamVjdCkKKworICBpZihSRVBMQUNFX1JFRkVSRU5DRV9GSUxFUykKKyAgICBydW5fY21ha2VfY29tbWFuZCgke3Rlc3RfbmFtZX0tY3JlYXRlX2RvdF9maWxlcyAke0NNQUtFX0NPTU1BTkR9CisgICAgICAtLWdyYXBodml6PWdlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdCAuCisgICAgKQorCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0X25hbWV9LWNvcHlfZG90X2ZpbGVzCisgICAgICAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkKKyAgICAgICAgZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90CisgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoXyR7dGVzdF9uYW1lfS5kb3QKKyAgICApCisgIGVuZGlmKCkKKworICBydW5fY21ha2VfY29tbWFuZCgke3Rlc3RfbmFtZX0gJHtDTUFLRV9DT01NQU5EfQorICAgIC0tZ3JhcGh2aXo9Z2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90IC4KKyAgKQorCisgIGlmKEdFTkVSQVRFX1BOR19GSUxFUykKKyAgICBydW5fY21ha2VfY29tbWFuZCgke3Rlc3RfbmFtZX0tZ2VuZXJhdGVfcG5nX2ZpbGUKKyAgICAgICR7RE9UfSAtVHBuZyAtbyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGgucG5nCisgICAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90CisgICAgKQorICBlbmRpZigpCisKK2VuZGZ1bmN0aW9uKCkKKworcnVuX3Rlc3QoZGVmYXVsdF9vcHRpb25zICIiICIiKQorCitydW5fdGVzdChzZXRfZ3JhcGhfbmFtZSBHUkFQSFZJWl9HUkFQSF9OQU1FICJcIkNNYWtlIFByb2plY3QgRGVwZW5kZW5jaWVzXCIiKQorcnVuX3Rlc3Qoc2V0X2dyYXBoX2hlYWRlciBHUkFQSFZJWl9HUkFQSF9IRUFERVIKKyAgIlwibm9kZSBbXG4gIGZvbnRzaXplID0gXFxcIjE2XFxcIlxuXTtcIiIpCitydW5fdGVzdChzZXRfbm9kZV9wcmVmaXggR1JBUEhWSVpfTk9ERV9QUkVGSVggInBvaW50IikKKworcnVuX3Rlc3Qobm9fZXhlY3V0YWJsZXMgR1JBUEhWSVpfRVhFQ1VUQUJMRVMgRkFMU0UpCisKK3J1bl90ZXN0KG5vX3N0YXRpY19saWJzIEdSQVBIVklaX1NUQVRJQ19MSUJTIEZBTFNFKQorcnVuX3Rlc3Qobm9fc2hhcmVkX2xpYnMgR1JBUEhWSVpfU0hBUkVEX0xJQlMgRkFMU0UpCitydW5fdGVzdChub19tb2R1bGVfbGlicyBHUkFQSFZJWl9NT0RVTEVfTElCUyBGQUxTRSkKKworcnVuX3Rlc3Qobm9faW50ZXJmYWNlX2xpYnMgR1JBUEhWSVpfSU5URVJGQUNFX0xJQlMgRkFMU0UpCitydW5fdGVzdChub19vYmplY3RfbGlicyBHUkFQSFZJWl9PQkpFQ1RfTElCUyBGQUxTRSkKK3J1bl90ZXN0KG5vX3Vua25vd25fbGlicyBHUkFQSFZJWl9VTktOT1dOX0xJQlMgRkFMU0UpCisKK3J1bl90ZXN0KG5vX2V4dGVybmFsX2xpYnMgR1JBUEhWSVpfRVhURVJOQUxfTElCUyBGQUxTRSkKKworcnVuX3Rlc3QoY3VzdG9tX3RhcmdldHMgR1JBUEhWSVpfQ1VTVE9NX1RBUkdFVFMgVFJVRSkKKworcnVuX3Rlc3Qobm9fZ3JhcGhpY19saWJzIEdSQVBIVklaX0lHTk9SRV9UQVJHRVRTICJHcmFwaGljIikKKworcnVuX3Rlc3Qobm9fcGVyX3RhcmdldF9maWxlcyBHUkFQSFZJWl9HRU5FUkFURV9QRVJfVEFSR0VUIEZBTFNFKQorcnVuX3Rlc3Qobm9fZGVwZW5kZXJzX2ZpbGVzIEdSQVBIVklaX0dFTkVSQVRFX0RFUEVOREVSUyBGQUxTRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2RlZmF1bHRfb3B0aW9ucy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2RlZmF1bHRfb3B0aW9ucy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWE3NTYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZGVmYXVsdF9vcHRpb25zLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworZW5zdXJlX2ZpbGVzX21hdGNoKAorICAgICAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX2RlZmF1bHRfb3B0aW9ucy5kb3QKKyAgICAgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9jdXN0b21fdGFyZ2V0cy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfY3VzdG9tX3RhcmdldHMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDM2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfY3VzdG9tX3RhcmdldHMuZG90CkBAIC0wLDAgKzEsNTIgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdlbmVyYXRlTWFuUGFnZSIsIHNoYXBlID0gYm94IF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiICAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gR2VuZXJhdGVNYW5QYWdlCisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9kZWZhdWx0X29wdGlvbnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX2RlZmF1bHRfb3B0aW9ucy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiZjI1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9kZWZhdWx0X29wdGlvbnMuZG90CkBAIC0wLDAgKzEsNTAgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNSIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19kZXBlbmRlcnNfZmlsZXMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2RlcGVuZGVyc19maWxlcy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiZjI1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19kZXBlbmRlcnNfZmlsZXMuZG90CkBAIC0wLDAgKzEsNTAgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNSIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leGVjdXRhYmxlcy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZXhlY3V0YWJsZXMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGE0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZXhlY3V0YWJsZXMuZG90CkBAIC0wLDAgKzEsNDQgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNSIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTQiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTQiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leHRlcm5hbF9saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leHRlcm5hbF9saWJzLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjBhZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4dGVybmFsX2xpYnMuZG90CkBAIC0wLDAgKzEsNDYgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2dyYXBoaWNfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmN2ZlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90CkBAIC0wLDAgKzEsMzUgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9faW50ZXJmYWNlX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2ludGVyZmFjZV9saWJzLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGVjNDFjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2ludGVyZmFjZV9saWJzLmRvdApAQCAtMCwwICsxLDQzIEBACitkaWdyYXBoICJHcmFwaHZpelRlc3RQcm9qZWN0IiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTIiCitdOworc3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7CisgIGxhYmVsID0gIkxlZ2VuZCI7CisgIGNvbG9yID0gYmxhY2s7CisgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07CisgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSAiRXhlY3V0YWJsZSIsIHNoYXBlID0gZWdnIF07CisgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSAiU3RhdGljIExpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9ICJTaGFyZWQgTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlMyBbIGxhYmVsID0gIk1vZHVsZSBMaWJyYXJ5Iiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIExpYnJhcnkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiT2JqZWN0IExpYnJhcnkiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9ICJVbmtub3duIExpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSAiQ3VzdG9tIFRhcmdldCIsIHNoYXBlID0gYm94IF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7CisgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIiwgc3R5bGUgPSBkYXNoZWQgXTsKKyAgbGVnZW5kTm9kZTIgLT4gbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJQcml2YXRlIiwgc3R5bGUgPSBkb3R0ZWQgXTsKKyAgbGVnZW5kTm9kZTMgLT4gbGVnZW5kTm9kZTYgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3OworfQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMCIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTMiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNSIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTQiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGUzIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fbW9kdWxlX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX21vZHVsZV9saWJzLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI3YTcxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX21vZHVsZV9saWJzLmRvdApAQCAtMCwwICsxLDQ0IEBACitkaWdyYXBoICJHcmFwaHZpelRlc3RQcm9qZWN0IiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTIiCitdOworc3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7CisgIGxhYmVsID0gIkxlZ2VuZCI7CisgIGNvbG9yID0gYmxhY2s7CisgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07CisgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSAiRXhlY3V0YWJsZSIsIHNoYXBlID0gZWdnIF07CisgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSAiU3RhdGljIExpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9ICJTaGFyZWQgTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlMyBbIGxhYmVsID0gIk1vZHVsZSBMaWJyYXJ5Iiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIExpYnJhcnkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiT2JqZWN0IExpYnJhcnkiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9ICJVbmtub3duIExpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSAiQ3VzdG9tIFRhcmdldCIsIHNoYXBlID0gYm94IF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7CisgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIiwgc3R5bGUgPSBkYXNoZWQgXTsKKyAgbGVnZW5kTm9kZTIgLT4gbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJQcml2YXRlIiwgc3R5bGUgPSBkb3R0ZWQgXTsKKyAgbGVnZW5kTm9kZTMgLT4gbGVnZW5kTm9kZTYgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3OworfQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX29iamVjdF9saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19vYmplY3RfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExNmJjOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19vYmplY3RfbGlicy5kb3QKQEAgLTAsMCArMSw0OCBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTYiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU4IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Blcl90YXJnZXRfZmlsZXMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Blcl90YXJnZXRfZmlsZXMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYmYyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fcGVyX3RhcmdldF9maWxlcy5kb3QKQEAgLTAsMCArMSw1MCBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTYiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNiIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3NoYXJlZF9saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zaGFyZWRfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5ZDFmNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zaGFyZWRfbGlicy5kb3QKQEAgLTAsMCArMSw0NCBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU4IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3N0YXRpY19saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zdGF0aWNfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExOTlhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zdGF0aWNfbGlicy5kb3QKQEAgLTAsMCArMSw0MiBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMyIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNSIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub191bmtub3duX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Vua25vd25fbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlNjU1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub191bmtub3duX2xpYnMuZG90CkBAIC0wLDAgKzEsNDggQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNSIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTQiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X2dyYXBoX2hlYWRlci5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X2dyYXBoX2hlYWRlci5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYmUwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfaGVhZGVyLmRvdApAQCAtMCwwICsxLDUwIEBACitkaWdyYXBoICJHcmFwaHZpelRlc3RQcm9qZWN0IiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTYiCitdOworc3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7CisgIGxhYmVsID0gIkxlZ2VuZCI7CisgIGNvbG9yID0gYmxhY2s7CisgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07CisgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSAiRXhlY3V0YWJsZSIsIHNoYXBlID0gZWdnIF07CisgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSAiU3RhdGljIExpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9ICJTaGFyZWQgTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlMyBbIGxhYmVsID0gIk1vZHVsZSBMaWJyYXJ5Iiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIExpYnJhcnkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiT2JqZWN0IExpYnJhcnkiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9ICJVbmtub3duIExpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSAiQ3VzdG9tIFRhcmdldCIsIHNoYXBlID0gYm94IF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7CisgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIiwgc3R5bGUgPSBkYXNoZWQgXTsKKyAgbGVnZW5kTm9kZTIgLT4gbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJQcml2YXRlIiwgc3R5bGUgPSBkb3R0ZWQgXTsKKyAgbGVnZW5kTm9kZTMgLT4gbGVnZW5kTm9kZTYgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3OworfQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X2dyYXBoX25hbWUuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9uYW1lLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjUzYzMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9uYW1lLmRvdApAQCAtMCwwICsxLDUwIEBACitkaWdyYXBoICJDTWFrZSBQcm9qZWN0IERlcGVuZGVuY2llcyIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTYiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNiIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ub2RlX3ByZWZpeC5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X25vZGVfcHJlZml4LmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQ5NmQwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ub2RlX3ByZWZpeC5kb3QKQEAgLTAsMCArMSw1MCBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAicG9pbnQwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgInBvaW50MSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJwb2ludDIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAicG9pbnQyIiAtPiAicG9pbnQwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJwb2ludDMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJwb2ludDIiIC0+ICJwb2ludDMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgInBvaW50MSIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJwb2ludDQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJwb2ludDEiIC0+ICJwb2ludDQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgInBvaW50NSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJwb2ludDUiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAicG9pbnQ2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgInBvaW50NyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJwb2ludDYiIC0+ICJwb2ludDciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJwb2ludDYiIC0+ICJwb2ludDAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgInBvaW50NiIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgInBvaW50OCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAicG9pbnQ2IiAtPiAicG9pbnQ4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgInBvaW50NSIgLT4gInBvaW50NiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJwb2ludDkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJwb2ludDkiIC0+ICJwb2ludDAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAicG9pbnQ5IiAtPiAicG9pbnQyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJwb2ludDEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAicG9pbnQxMCIgLT4gInBvaW50MCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJwb2ludDEwIiAtPiAicG9pbnQyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZGVwZW5kZXJzX2ZpbGVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZGVwZW5kZXJzX2ZpbGVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YTQzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19kZXBlbmRlcnNfZmlsZXMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitmaWxlKEdMT0IgZGVwZW5kZXJzX2ZpbGVzICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS8qLmRlcGVuZGVycykKK2lmKCR7ZGVwZW5kZXJzX2ZpbGVzfSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kICouZGVwZW5kZXJzIGZpbGVzIGRlc3BpdGUgR1JBUEhWSVpfR0VORVJBVEVfREVQRU5ERVJTIHNldCB0byBGQUxTRS4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZXhlY3V0YWJsZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19leGVjdXRhYmxlcy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI5YTRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZXhlY3V0YWJsZXMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leGVjdXRhYmxlcy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZXh0ZXJuYWxfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2V4dGVybmFsX2xpYnMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4ZWY3YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2V4dGVybmFsX2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leHRlcm5hbF9saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19ncmFwaGljX2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19ncmFwaGljX2xpYnMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1YWE0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2dyYXBoaWNfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2dyYXBoaWNfbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9faW50ZXJmYWNlX2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19pbnRlcmZhY2VfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThmZWYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9faW50ZXJmYWNlX2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19pbnRlcmZhY2VfbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fbW9kdWxlX2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19tb2R1bGVfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg1Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fbW9kdWxlX2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19tb2R1bGVfbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fb2JqZWN0X2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19vYmplY3RfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGU3ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fb2JqZWN0X2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19vYmplY3RfbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fcGVyX3RhcmdldF9maWxlcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX3Blcl90YXJnZXRfZmlsZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkMDVhMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX3Blcl90YXJnZXRfZmlsZXMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitmaWxlKEdMT0IgcGVyX3RhcmdldF9maWxlcyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vKi5kb3QuKikKK2xpc3QoRklMVEVSIHBlcl90YXJnZXRfZmlsZXMgRVhDTFVERSBSRUdFWCAiLipcXC5kZXBlbmRlcnMkIikKK2lmKHBlcl90YXJnZXRfZmlsZXMpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCBwZXItdGFyZ2V0IC5kb3QgZmlsZXMgZGVzcGl0ZSBHUkFQSFZJWl9HRU5FUkFURV9QRVJfVEFSR0VUIHNldCB0byBGQUxTRS4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fc2hhcmVkX2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19zaGFyZWRfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDVkYTJlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fc2hhcmVkX2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zaGFyZWRfbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fc3RhdGljX2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19zdGF0aWNfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZjMTFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fc3RhdGljX2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zdGF0aWNfbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fdW5rbm93bl9saWJzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fdW5rbm93bl9saWJzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mjg2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub191bmtub3duX2xpYnMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub191bmtub3duX2xpYnMuZG90CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3NldF9ncmFwaF9oZWFkZXItY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfZ3JhcGhfaGVhZGVyLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTY0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfZ3JhcGhfaGVhZGVyLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworZW5zdXJlX2ZpbGVzX21hdGNoKAorICAgICR7UnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSfS9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X2dyYXBoX2hlYWRlci5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovc2V0X2dyYXBoX25hbWUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfZ3JhcGhfbmFtZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUyMmU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovc2V0X2dyYXBoX25hbWUtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfbmFtZS5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovc2V0X25vZGVfcHJlZml4LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovc2V0X25vZGVfcHJlZml4LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTliMjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfbm9kZV9wcmVmaXgtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfbm9kZV9wcmVmaXguZG90CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9jb3JlX2xpYnJhcnkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9jb3JlX2xpYnJhcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGE4ODQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L2NvcmVfbGlicmFyeS5jCkBAIC0wLDAgKzEsMyBAQAordm9pZCBsb2dfc29tZXRoaW5nKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9ncmFwaGljX2xpYnJhcnkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9ncmFwaGljX2xpYnJhcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThjOGFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L2dyYXBoaWNfbGlicmFyeS5jCkBAIC0wLDAgKzEsMyBAQAordm9pZCBpbml0aWFsaXplX2dyYXBoaWNzKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjNlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvbWFpbi5jCkBAIC0wLDAgKzEsNCBAQAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9tb2R1bGUuYyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA4YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L21vZHVsZS5jCkBAIC0wLDAgKzEsMyBAQAorc3RhdGljIHZvaWQgc29tZV9mdW5jdGlvbigpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvdGhpcmRfcGFydHlfcHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC90aGlyZF9wYXJ0eV9wcm9qZWN0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODE3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvdGhpcmRfcGFydHlfcHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK3Byb2plY3QoVGhpcmRQYXJ0eVByb2plY3QpCisKK2FkZF9saWJyYXJ5KEdvb2Z5TG9nZ2luZ0xpYnJhcnkgSU5URVJGQUNFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1M2QzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0lOU1RBTExfTkFNRV9ESVIuY21ha2UpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL0lOU1RBTExfTkFNRV9ESVIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL0lOU1RBTExfTkFNRV9ESVIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMGI0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvSU5TVEFMTF9OQU1FX0RJUi5jbWFrZQpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbihhZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMgaW5zdGFsbF9uYW1lX2RpcikKKyAgYWRkX2xpYnJhcnkoYnVpbGRfZGlyIFNIQVJFRCB0ZXN0LmMpCisgIGFkZF9saWJyYXJ5KGluc3RhbGxfZGlyIFNIQVJFRCB0ZXN0LmMpCisgIGlmKE5PVCBpbnN0YWxsX25hbWVfZGlyIFNUUkVRVUFMICJOT05FIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoYnVpbGRfZGlyIGluc3RhbGxfZGlyIFBST1BFUlRJRVMKKyAgICAgIElOU1RBTExfTkFNRV9ESVIgIiR7aW5zdGFsbF9uYW1lX2Rpcn0iCisgICAgICApCisgIGVuZGlmKCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGluc3RhbGxfZGlyIFBST1BFUlRJRVMKKyAgICBCVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIgVFJVRQorICAgICkKKyAgaW5zdGFsbChUQVJHRVRTIGJ1aWxkX2RpciBpbnN0YWxsX2RpciBFWFBPUlQgSW5zdGFsbE5hbWVEaXJUZXN0IERFU1RJTkFUSU9OIGxpYikKKyAgaW5zdGFsbChFWFBPUlQgSW5zdGFsbE5hbWVEaXJUZXN0IERFU1RJTkFUSU9OIGxpYi9jbWFrZS9JbnN0YWxsTmFtZURpclRlc3QgRklMRSBJbnN0YWxsTmFtZURpclRlc3QtdGFyZ2V0cy5jbWFrZSkKKyAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90YXJnZXRzLnR4dCIgQ09OVEVOVCAiJDxUQVJHRVRfRklMRTpidWlsZF9kaXI+XG4kPFRBUkdFVF9GSUxFOmluc3RhbGxfZGlyPlxuIiBDT05ESVRJT04gJDxDT05GSUc6RGVidWc+KQorZW5kZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWEwM2RkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw2OSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCisKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Z1bmN0aW9uKHJ1bl9pbnN0YWxsX3Rlc3QgY2FzZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Y2FzZX0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1EZWJ1ZyAiLURDTUFLRV9JTlNUQUxMX1BSRUZJWDpQQVRIPSR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mYWtlX2luc3RhbGwiKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBydW5fY21ha2UoJHtjYXNlfSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1pbnN0YWxsICR7Q01BS0VfQ09NTUFORH0gLS1pbnN0YWxsIC4gLS1jb25maWcgRGVidWcgLS1wcmVmaXggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9yZWFsX2luc3RhbGwiKQorZW5kZnVuY3Rpb24oKQorCitmaW5kX3Byb2dyYW0oT1RPT0xfQ09NTUFORCBvdG9vbCkKKworZnVuY3Rpb24oY2hlY2tfaW5zdGFsbF9uYW1lX2RpciBmaWxlIGV4cGVjdGVkKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke09UT09MX0NPTU1BTkR9IC1sICR7ZmlsZX0gUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQgT1VUUFVUX1ZBUklBQkxFIF9vdXRwdXQpCisgIGlmKF9yZXN1bHQpCisgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQ291bGQgbm90IHJ1biBvdG9vbCBvbiAke2ZpbGV9XG4iKQorICBlbHNlaWYoX291dHB1dCBNQVRDSEVTICJjbWQgTENfSURfRFlMSUJcblteXG5dKlxuICpuYW1lIChbXlxuXSopIFxcKG9mZnNldCBbMC05XStcXClcbiIpCisgICAgc2V0KF9pbnN0YWxsX25hbWUgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIGlmKE5PVCBfaW5zdGFsbF9uYW1lIE1BVENIRVMgIiR7ZXhwZWN0ZWR9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkluc3RhbGwgbmFtZSBvZiAke2ZpbGV9IGRpZCBub3QgbWF0Y2ggJHtleHBlY3RlZH0gKGFjdHVhbDogJHtfaW5zdGFsbF9uYW1lfSlcbiIpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJvdG9vbCBkaWQgbm90IHByaW50IGluc3RhbGwgbmFtZSBmb3IgJHtmaWxlfVxuIikKKyAgZW5kaWYoKQorCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oY2hlY2tfaW1wb3J0ZWRfc29uYW1lIGNvbnRlbnRzIHRhcmdldCBleHBlY3RlZCkKKyAgaWYoY29udGVudHMgTUFUQ0hFUyAic2V0X3RhcmdldF9wcm9wZXJ0aWVzXFwoJHt0YXJnZXR9IFBST1BFUlRJRVNcblteXG5dKlxuICpJTVBPUlRFRF9TT05BTUVfREVCVUcgXCIoW15cbl0qKVwiXG4iKQorICAgIHNldChfc29uYW1lICIke0NNQUtFX01BVENIXzF9IikKKyAgICBzZXQoX3JlZ2V4ICJeJHtleHBlY3RlZH1saWIke3RhcmdldH1cXC5keWxpYiQiKQorICAgIGlmKE5PVCBfc29uYW1lIE1BVENIRVMgIiR7X3JlZ2V4fSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJUYXJnZXQgJHt0YXJnZXR9J3MgSU1QT1JURURfU09OQU1FX0RFQlVHIGRpZCBub3QgbWF0Y2ggJHtfcmVnZXh9IChhY3R1YWw6ICR7X3NvbmFtZX0pXG4iKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQ291bGQgbm90IGZpbmQgSU1QT1JURURfU09OQU1FX0RFQlVHIGZvciB0YXJnZXQgJHt0YXJnZXR9IGluIHBhY2thZ2UgY29uZmlnIGZpbGVcbiIpCisgIGVuZGlmKCkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKGNoZWNrX2xpYnJhcmllcyBmYWtlX2luc3RhbGwgcmVhbF9pbnN0YWxsIHNvbmFtZV9wcmVmaXgpCisgIGZpbGUoU1RSSU5HUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldHMudHh0IiBfdGFyZ2V0cykKKyAgbGlzdChHRVQgX3RhcmdldHMgMCBfYnVpbGRfZGlyKQorICBsaXN0KEdFVCBfdGFyZ2V0cyAxIF9pbnN0YWxsX2RpcikKKyAgY2hlY2tfaW5zdGFsbF9uYW1lX2RpcigiJHtfYnVpbGRfZGlyfSIgIl5AcnBhdGgvbGliYnVpbGRfZGlyXFwuZHlsaWIkIikKKyAgY2hlY2tfaW5zdGFsbF9uYW1lX2RpcigiJHtfaW5zdGFsbF9kaXJ9IiAiXiR7ZmFrZV9pbnN0YWxsfWxpYmluc3RhbGxfZGlyXFwuZHlsaWIkIikKKyAgY2hlY2tfaW5zdGFsbF9uYW1lX2RpcigiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3JlYWxfaW5zdGFsbC9saWIvbGliYnVpbGRfZGlyLmR5bGliIiAiXiR7cmVhbF9pbnN0YWxsfWxpYmJ1aWxkX2RpclxcLmR5bGliJCIpCisgIGNoZWNrX2luc3RhbGxfbmFtZV9kaXIoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9yZWFsX2luc3RhbGwvbGliL2xpYmluc3RhbGxfZGlyLmR5bGliIiAiXiR7cmVhbF9pbnN0YWxsfWxpYmluc3RhbGxfZGlyXFwuZHlsaWIkIikKKworICBmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9yZWFsX2luc3RhbGwvbGliL2NtYWtlL0luc3RhbGxOYW1lRGlyVGVzdC9JbnN0YWxsTmFtZURpclRlc3QtdGFyZ2V0cy1kZWJ1Zy5jbWFrZSIgX3RhcmdldHMpCisgIGNoZWNrX2ltcG9ydGVkX3NvbmFtZSgiJHtfdGFyZ2V0c30iIGJ1aWxkX2RpciAiJHtzb25hbWVfcHJlZml4fSIpCisgIGNoZWNrX2ltcG9ydGVkX3NvbmFtZSgiJHtfdGFyZ2V0c30iIGluc3RhbGxfZGlyICIke3NvbmFtZV9wcmVmaXh9IikKKworICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK3J1bl9pbnN0YWxsX3Rlc3Qobm9uZSkKK3J1bl9pbnN0YWxsX3Rlc3QoZW1wdHkpCitydW5faW5zdGFsbF90ZXN0KHNpbXBsZSkKK3J1bl9pbnN0YWxsX3Rlc3Qoc2ltcGxlX2dlbmV4KQorcnVuX2luc3RhbGxfdGVzdChwcmVmaXhfZ2VuZXgpCitydW5faW5zdGFsbF90ZXN0KGVtcHR5X2dlbmV4KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eS1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eS1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODdkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL2VtcHR5LWluc3RhbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSBAQAorY2hlY2tfbGlicmFyaWVzKCIiICIiICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkZTRkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHkuY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2luc3RhbGxfbmFtZV9kaXJfbGlicmFyaWVzKCIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eV9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eV9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODdkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL2VtcHR5X2dlbmV4LWluc3RhbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSBAQAorY2hlY2tfbGlicmFyaWVzKCIiICIiICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eV9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHlfZ2VuZXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxYzhkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHlfZ2VuZXguY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2luc3RhbGxfbmFtZV9kaXJfbGlicmFyaWVzKCQ8MDovdXNyL2xvY2FsL2xpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUtaW5zdGFsbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvbm9uZS1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTdhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUtaW5zdGFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACitjaGVja19saWJyYXJpZXMoQHJwYXRoLyBAcnBhdGgvIEBycGF0aC8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljNWU3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvbm9uZS5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoTk9ORSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvcHJlZml4X2dlbmV4LWluc3RhbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZjdkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorY2hlY2tfbGlicmFyaWVzKAorICAiLiovVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9wcmVmaXhfZ2VuZXgtYnVpbGQvZmFrZV9pbnN0YWxsL2xpYi8iCisgICIuKi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC1idWlsZC9yZWFsX2luc3RhbGwvbGliLyIKKyAgIyAiJCIgaGFzIHRvIGJlIGVzY2FwZWQgdHdpY2UgYmVjYXVzZSBvZiBpdHMgc2lnbmlmaWNhbmNlIGluIHJlZ2V4ZXMuCisgICJcXFwke19JTVBPUlRfUFJFRklYfS9saWIvIgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvcHJlZml4X2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjYyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoJDwxOiQ8SU5TVEFMTF9QUkVGSVg+L2xpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZS1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGUtaW5zdGFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczN2NiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGUtaW5zdGFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACitjaGVja19saWJyYXJpZXMoL3Vzci9sb2NhbC9saWIvIC91c3IvbG9jYWwvbGliLyAvdXNyL2xvY2FsL2xpYi8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvc2ltcGxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTk4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZS5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoL3Vzci9sb2NhbC9saWIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZV9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGVfZ2VuZXgtaW5zdGFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczN2NiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGVfZ2VuZXgtaW5zdGFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACitjaGVja19saWJyYXJpZXMoL3Vzci9sb2NhbC9saWIvIC91c3IvbG9jYWwvbGliLyAvdXNyL2xvY2FsL2xpYi8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZV9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvc2ltcGxlX2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzI5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZV9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoJDwxOi91c3IvbG9jYWwvbGliPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvdGVzdC5jIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYjYxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvdGVzdC5jCkBAIC0wLDAgKzEsMyBAQAordm9pZCB0ZXN0KHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXgtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXgtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWJmNzZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS0VSX0xBTkdVQUdFLWdlbmV4LmNtYWtlOlswLTldKyBcKHRhcmdldF9saW5rX2xpYnJhcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8VEFSR0VUX1BST1BFUlRZOkxJTktFUl9MQU5HVUFHRT4KKworICBMSU5LRVJfTEFOR1VBR0UgdGFyZ2V0IHByb3BlcnR5IGNhbiBub3QgYmUgdXNlZCB3aGlsZSBldmFsdWF0aW5nIGxpbmsKKyAgbGlicmFyaWVzIGZvciBhIHN0YXRpYyBsaWJyYXJ5CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXguY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXguY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2MwMDJlLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLUNNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtZ2VuZXguY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6Ci0gIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246Ci0KLSAgICBcJDxUQVJHRVRfUFJPUEVSVFk6TElOS0VSX0xBTkdVQUdFPgotCi0gIExJTktFUl9MQU5HVUFHRSB0YXJnZXQgcHJvcGVydHkgY2FuIG5vdCBiZSB1c2VkIHdoaWxlIGV2YWx1YXRpbmcgbGluawotICBsaWJyYXJpZXMgZm9yIGEgc3RhdGljIGxpYnJhcnkKLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMmE1MzRiMy4uNDgyMTZlOSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDcgKzEsNyBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAogcnVuX2NtYWtlKE5vTGFuZ1NIQVJFRCkKLXJ1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWdlbmV4KQorcnVuX2NtYWtlKExJTktFUl9MQU5HVUFHRS1nZW5leCkKIHJ1bl9jbWFrZShsaW5rLWxpYnJhcmllcy1UQVJHRVRfRklMRS1nZW5leCkKIHJ1bl9jbWFrZShsaW5rLWxpYnJhcmllcy1UQVJHRVRfRklMRS1nZW5leC1vaykKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9NYWNPU1ZlcnNpb25zLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9NYWNPU1ZlcnNpb25zLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZmFhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL01hY09TVmVyc2lvbnMtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyNyBAQAorc2V0KGNmZ19kaXIpCitpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBzZXQoY2ZnX2RpciAvRGVidWcpCitlbmRpZigpCisKK3NldChsaWIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSR7Y2ZnX2Rpcn0vbGliZm9vLjEuMC5keWxpYiIpCitpZihOT1QgRVhJU1RTICIke2xpYn0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkxpYnJhcnkgZmlsZSBpcyBtaXNzaW5nOlxuICAke2xpYn0iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCBvdG9vbCAtbCAiJHtsaWJ9IiBPVVRQVVRfVkFSSUFCTEUgb3V0IEVSUk9SX1ZBUklBQkxFIGVyciBSRVNVTFRfVkFSSUFCTEUgcmVzKQoraWYoTk9UIHJlcyBFUVVBTCAwKQorICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBlcnIgIiAgJHtlcnJ9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJSdW5uaW5nICdvdG9vbCAtbCcgb24gZmlsZTpcbiAgJHtsaWJ9XG5mYWlsZWQ6XG4ke2Vycn0iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmb3JlYWNoKHZlcgorICAgIFtbY3VycmVudCB2ZXJzaW9uIDNcLjJcLjFdXQorICAgIFtbY29tcGF0aWJpbGl0eSB2ZXJzaW9uIDJcLjFcLjBdXQorICAgICkKKyAgaWYoTk9UICIke291dH0iIE1BVENIRVMgIiggfFxuKSR7dmVyfSggfFxuKSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJMaWJyYXJ5IGZpbGU6XG4gICR7bGlifVxuZG9lcyBub3QgY29udGFpbiAnJHt2ZXJ9JyIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL01hY09TVmVyc2lvbnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL01hY09TVmVyc2lvbnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1MWJkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvTWFjT1NWZXJzaW9ucy5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShmb28gU0hBUkVEIGZvby5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZvbyBQUk9QRVJUSUVTCisgIFZFUlNJT04gMS4wCisgIFNPVkVSU0lPTiAxCisgIE1BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTiAyLjEuMAorICBNQUNIT19DVVJSRU5UX1ZFUlNJT04gMy4yLjEKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjdjYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxMSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworZnVuY3Rpb24ocnVuX01hY09TVmVyc2lvbnMpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9NYWNPU1ZlcnNpb25zLWJ1aWxkKQorICBydW5fY21ha2UoTWFjT1NWZXJzaW9ucykKKworICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBydW5fY21ha2VfY29tbWFuZChNYWNPU1ZlcnNpb25zLWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQorZW5kZnVuY3Rpb24oKQorCitydW5fTWFjT1NWZXJzaW9ucygpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL2Zvby5jIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9mb28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODNkODU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9mb28uYwpAQCAtMCwwICsxLDQgQEAKK2ludCBmb28odm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYWtlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL01ha2UvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDgyZGI2YjcuLjZiMjcyMWMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL01ha2UvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL01ha2UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yNiwxMCArMjYsMTMgQEAKICAgZW5kaWYoKQogICBydW5fY21ha2VfY29tbWFuZChWZXJib3NlQnVpbGQtYnVpbGQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLXYgLS1jbGVhbi1maXJzdCkKICAgdW5zZXQoUnVuQ01ha2Utc3Rkb3V0LWZpbGUpCisgIHNldChfYmFja3VwX2xhbmcgIiRFTlZ7TEFOR30iKQogICBpZihNQUtFX0lTX0dOVSkKICAgICBzZXQoUnVuQ01ha2Utc3Rkb3V0LWZpbGUgVmVyYm9zZUJ1aWxkLW5vd29yay1nbnUtc3Rkb3V0LnR4dCkKKyAgICBzZXQoRU5We0xBTkd9ICJDIikKICAgZW5kaWYoKQogICBydW5fY21ha2VfY29tbWFuZChWZXJib3NlQnVpbGQtbm93b3JrICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdmVyYm9zZSkKKyAgc2V0KEVOVntMQU5HfSAiJHtfYmFja3VwX2xhbmd9IikKIGVuZGZ1bmN0aW9uKCkKIHJ1bl9WZXJib3NlQnVpbGQoKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1kZWZhdWx0LXNjcmlwdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtZGVmYXVsdC1zY3JpcHQtc3RkZXJyLnR4dAppbmRleCA0ZGRkYzk2Li4wN2RlZWUyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1kZWZhdWx0LXNjcmlwdC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWRlZmF1bHQtc2NyaXB0LXN0ZGVyci50eHQKQEAgLTEsNiArMSw2IEBACiBbMC05XSsKLUNNYWtlIEVycm9yIGF0IC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKToKK0NNYWtlIEVycm9yIGF0IC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpOgogICBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBvZiBbMC05XSsgZXhjZWVkZWQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1kZWZhdWx0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1kZWZhdWx0LXN0ZGVyci50eHQKaW5kZXggYThiNDc1Ni4uYjIzOTViMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtZGVmYXVsdC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWRlZmF1bHQtc3RkZXJyLnR4dApAQCAtMSw2ICsxLDYgQEAKIFswLTldKwotQ01ha2UgRXJyb3IgYXQgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpOgorQ01ha2UgRXJyb3IgYXQgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCk6CiAgIE1heGltdW0gcmVjdXJzaW9uIGRlcHRoIG9mIFswLTldKyBleGNlZWRlZAogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICB2YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWludmFsaWQtdmFyLXNjcmlwdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtaW52YWxpZC12YXItc2NyaXB0LXN0ZGVyci50eHQKaW5kZXggNGRkZGM5Ni4uMDdkZWVlMiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtaW52YWxpZC12YXItc2NyaXB0LXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtaW52YWxpZC12YXItc2NyaXB0LXN0ZGVyci50eHQKQEAgLTEsNiArMSw2IEBACiBbMC05XSsKLUNNYWtlIEVycm9yIGF0IC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKToKK0NNYWtlIEVycm9yIGF0IC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpOgogICBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBvZiBbMC05XSsgZXhjZWVkZWQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1pbnZhbGlkLXZhci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtaW52YWxpZC12YXItc3RkZXJyLnR4dAppbmRleCBhOGI0NzU2Li5iMjM5NWIzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1pbnZhbGlkLXZhci1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWludmFsaWQtdmFyLXN0ZGVyci50eHQKQEAgLTEsNiArMSw2IEBACiBbMC05XSsKLUNNYWtlIEVycm9yIGF0IHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKToKK0NNYWtlIEVycm9yIGF0IHZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpOgogICBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBvZiBbMC05XSsgZXhjZWVkZWQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc2NyaXB0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc2NyaXB0LXN0ZGVyci50eHQKaW5kZXggMDBiMmIzYy4uNTJmZWRkMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtdmFyLXNjcmlwdC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLXZhci1zY3JpcHQtc3RkZXJyLnR4dApAQCAtMiwxNyArMiwxNyBAQAogNgogOAogMTAKLUNNYWtlIEVycm9yIGF0IC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKToKK0NNYWtlIEVycm9yIGF0IC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpOgogICBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBvZiAxMCBleGNlZWRlZAogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjkgXChzZXRcKQogICAuKi9DTWFrZUxpc3RzXC50eHQ6NSBcKGluY2x1ZGVcKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLXZhci1zdGRlcnIudHh0CmluZGV4IDhmMjdiZjEuLjE0MjdmMWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLXZhci1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLXZhci1zdGRlcnIudHh0CkBAIC0yLDE3ICsyLDE3IEBACiA2CiA4CiAxMAotQ01ha2UgRXJyb3IgYXQgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpOgorQ01ha2UgRXJyb3IgYXQgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCk6CiAgIE1heGltdW0gcmVjdXJzaW9uIGRlcHRoIG9mIDEwIGV4Y2VlZGVkCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICB2YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICB2YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQogICB2YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICB2YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQogICB2YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICB2YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQogICB2YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICB2YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQogICB2YXJpYWJsZV93YXRjaFwuY21ha2U6OSBcKHNldFwpCiAgIENNYWtlTGlzdHNcLnR4dDo1IFwoaW5jbHVkZVwpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL0N1c3RvbUNvbW1hbmRKb2JQb29sLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvQ3VzdG9tQ29tbWFuZEpvYlBvb2wuY21ha2UKaW5kZXggMWUzNmU2NS4uYTk2ODAyYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTmluamEvQ3VzdG9tQ29tbWFuZEpvYlBvb2wuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvQ3VzdG9tQ29tbWFuZEpvYlBvb2wuY21ha2UKQEAgLTEsMyArMSw0IEBACitzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIEpPQl9QT09MUyBjdXN0b21fY29tbWFuZF9wb29sPTIgY3VzdG9tX3RhcmdldF9wb29sPTIpCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgIE9VVFBVVCBoZWxsby5jb3B5LmMKICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgY29weQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamEvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDgwOGE4NzIuLmEwMGQ4MzAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNSArMSw4IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCitzZXQoUnVuQ01ha2VfR0VORVJBVE9SICJOaW5qYSIpCitzZXQoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRyAwKQorCiAjIERldGVjdCBuaW5qYSB2ZXJzaW9uIHNvIHdlIGtub3cgd2hhdCB0ZXN0cyBjYW4gYmUgc3VwcG9ydGVkLgogZXhlY3V0ZV9wcm9jZXNzKAogICBDT01NQU5EICIke1J1bkNNYWtlX01BS0VfUFJPR1JBTX0iIC0tdmVyc2lvbgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1hbGwtY2xlYW4tbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLWFsbC1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTJkYzJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1hbGwtY2xlYW4tbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgIyBJbnRlbnRpb25hbGx5IGVtcHR5CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQWRkaXRpb25hbENsZWFuRmlsZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDEyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nbG9iYWwudHh0CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0RlYnVnLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZWxlYXNlLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9NaW5TaXplUmVsLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZWxXaXRoRGViSW5mby50eHQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTEyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw2IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0RlYnVnLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9NaW5TaXplUmVsLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZWxXaXRoRGViSW5mby50eHQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQWRkaXRpb25hbENsZWFuRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzYTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQWRkaXRpb25hbENsZWFuRmlsZXMuY21ha2UKQEAgLTAsMCArMSwzIEBACitmaWxlKEdFTkVSQVRFIE9VVFBVVCAkPENPTkZJRz4udHh0IENPTlRFTlQgIiQ8Q09ORklHPlxuIikKK2ZpbGUoVE9VQ0ggJHtDTUFLRV9CSU5BUllfRElSfS9nbG9iYWwudHh0KQorc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzKFBST1BFUlRJRVMgQURESVRJT05BTF9DTEVBTl9GSUxFUyAiJDxDT05GSUc+LnR4dDtnbG9iYWwudHh0IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQXV0b01vY0V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0F1dG9Nb2NFeGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MGUxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0F1dG9Nb2NFeGVjdXRhYmxlLmNtYWtlCkBAIC0wLDAgKzEsMTAgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfZXhlY3V0YWJsZShiYWRtb2MgYmFkbW9jLmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhiYWRtb2MgUFJJVkFURSAiQ09ORklHPVwiJDxDT05GSUc+XCIiKQorCithZGRfZXhlY3V0YWJsZShleGUgbWFpbi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4ZSBQUk9QRVJUSUVTCisgIEFVVE9NT0MgT04KKyAgQVVUT01PQ19FWEVDVVRBQkxFICQ8VEFSR0VUX0ZJTEU6YmFkbW9jPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMyZmZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLXJlbGVhc2UtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLXJlbGVhc2UtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlNjk4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4tcmVsZWFzZS1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfU09OQU1FX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9FWEVfRklMRV9leGVhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlYWxsX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVub3RhbGxfUmVsZWFzZX0KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DbGVhbi1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DbGVhbi1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjNmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZWFsbF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVub3RhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlvYmpfUmVsZWFzZX0KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DbGVhbi1yZWxlYXNlLW5vdGFsbC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4tcmVsZWFzZS1ub3RhbGwtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkNmE3OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4tcmVsZWFzZS1ub3RhbGwtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxNiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX1NPTkFNRV9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZXhlYWxsX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfRVhFX0ZJTEVfZXhlYWxsX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZWFsbF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVub3RhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlbm90YWxsX1JlbGVhc2V9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNThkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfZXhlY3V0YWJsZShleGVhbGwgbWFpbi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4ZWFsbCBQUk9QRVJUSUVTIFZFUlNJT04gMS4wLjApCithZGRfZXhlY3V0YWJsZShleGVub3RhbGwgbWFpbi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4ZW5vdGFsbCBQUk9QRVJUSUVTIEVYQ0xVREVfRlJPTV9BTEwgVFJVRSkKKworYWRkX2xpYnJhcnkobXlsaWIgU0hBUkVEIHNpbXBsZWxpYi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG15bGliIFBST1BFUlRJRVMKKyAgVkVSU0lPTiAxLjAuMAorICBTT1ZFUlNJT04gMQorICApCisKK2FkZF9saWJyYXJ5KG15b2JqIE9CSkVDVCBzaW1wbGVsaWIuYykKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhleGVhbGwgZXhlbm90YWxsIG15bGliIG15b2JqKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Db21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBkODJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Db21tb24uY21ha2UKQEAgLTAsMCArMSw2MiBAQAorZnVuY3Rpb24oZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKQorICBzZXQoY29udGVudCkKKyAgZm9yZWFjaCh0Z3QgSU4gTElTVFMgQVJHTikKKyAgICBnZXRfcHJvcGVydHkodHlwZSBUQVJHRVQgJHt0Z3R9IFBST1BFUlRZIFRZUEUpCisKKyAgICBpZihOT1QgdHlwZSBTVFJFUVVBTCAiT0JKRUNUX0xJQlJBUlkiKQorICAgICAgc2V0KGZpbGUgIiBbPT1bJDxUQVJHRVRfRklMRToke3RndH0+XT09XSIpCisgICAgICBzZXQoZmlsZW5hbWUgIiBbPT1bJDxUQVJHRVRfRklMRV9OQU1FOiR7dGd0fT5dPT1dIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChmaWxlKQorICAgICAgc2V0KGZpbGVuYW1lKQorICAgIGVuZGlmKCkKKyAgICBzdHJpbmcoQVBQRU5EIGNvbnRlbnQgInNldChUQVJHRVRfRklMRV8ke3RndH1fJDxDT05GSUc+JHtmaWxlfSlcbiIpCisgICAgc3RyaW5nKEFQUEVORCBjb250ZW50ICJzZXQoVEFSR0VUX0ZJTEVfTkFNRV8ke3RndH1fJDxDT05GSUc+JHtmaWxlbmFtZX0pXG4iKQorCisgICAgaWYodHlwZSBNQVRDSEVTICJeKFNUQVRJQ3xNT0RVTEV8U0hBUkVEKV9MSUJSQVJZJCIpCisgICAgICBzZXQobGlua2VyX2ZpbGUgIiBbPT1bJDxUQVJHRVRfTElOS0VSX0ZJTEU6JHt0Z3R9Pl09PV0iKQorICAgICAgc2V0KGxpbmtlcl9maWxlbmFtZSAiIFs9PVskPFRBUkdFVF9MSU5LRVJfRklMRV9OQU1FOiR7dGd0fT5dPT1dIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChsaW5rZXJfZmlsZSkKKyAgICAgIHNldChsaW5rZXJfZmlsZW5hbWUpCisgICAgZW5kaWYoKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9MSU5LRVJfRklMRV8ke3RndH1fJDxDT05GSUc+JHtsaW5rZXJfZmlsZX0pXG4iKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9MSU5LRVJfRklMRV9OQU1FXyR7dGd0fV8kPENPTkZJRz4ke2xpbmtlcl9maWxlbmFtZX0pXG4iKQorCisgICAgaWYoTk9UIFdJTjMyIEFORCBOT1QgQ1lHV0lOIEFORCB0eXBlIE1BVENIRVMgIl4oU0hBUkVEX0xJQlJBUlkpJCIpCisgICAgICBzZXQoc29uYW1lX2ZpbGUgIiBbPT1bJDxUQVJHRVRfU09OQU1FX0ZJTEU6JHt0Z3R9Pl09PV0iKQorICAgICAgc2V0KHNvbmFtZV9maWxlbmFtZSAiIFs9PVskPFRBUkdFVF9TT05BTUVfRklMRV9OQU1FOiR7dGd0fT5dPT1dIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChzb25hbWVfZmlsZSkKKyAgICAgIHNldChzb25hbWVfZmlsZW5hbWUpCisgICAgZW5kaWYoKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9TT05BTUVfRklMRV8ke3RndH1fJDxDT05GSUc+JHtzb25hbWVfZmlsZX0pXG4iKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9TT05BTUVfRklMRV9OQU1FXyR7dGd0fV8kPENPTkZJRz4ke3NvbmFtZV9maWxlbmFtZX0pXG4iKQorCisgICAgaWYodHlwZSBNQVRDSEVTICJeKEVYRUNVVEFCTEUpJCIpCisgICAgICBzZXQoZXhlX2ZpbGUgIiBbPT1bJDxUQVJHRVRfRklMRV9ESVI6JHt0Z3R9Pi8kPFRBUkdFVF9GSUxFX1BSRUZJWDoke3RndH0+JDxUQVJHRVRfRklMRV9CQVNFX05BTUU6JHt0Z3R9PiQ8VEFSR0VUX0ZJTEVfU1VGRklYOiR7dGd0fT5dPT1dIikKKyAgICAgIHNldChleGVfZmlsZW5hbWUgIiBbPT1bJDxUQVJHRVRfRklMRV9QUkVGSVg6JHt0Z3R9PiQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOiR7dGd0fT4kPFRBUkdFVF9GSUxFX1NVRkZJWDoke3RndH0+XT09XSIpCisKKyAgICAgIGlmKFdJTjMyKQorICAgICAgICBzZXQoZXhlX2xpYl9maWxlICIgWz09WyQ8VEFSR0VUX0ZJTEVfRElSOiR7dGd0fT4vJDxUQVJHRVRfRklMRV9QUkVGSVg6JHt0Z3R9PiQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOiR7dGd0fT4ubGliXT09XSIpCisgICAgICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9FWEVfTElCX0ZJTEVfJHt0Z3R9XyQ8Q09ORklHPiR7ZXhlX2xpYl9maWxlfSlcbiIpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBzZXQoZXhlX2ZpbGUpCisgICAgICBzZXQoZXhlX2ZpbGVuYW1lKQorICAgIGVuZGlmKCkKKyAgICBzdHJpbmcoQVBQRU5EIGNvbnRlbnQgInNldChUQVJHRVRfRVhFX0ZJTEVfJHt0Z3R9XyQ8Q09ORklHPiR7ZXhlX2ZpbGV9KVxuIikKKyAgICBzdHJpbmcoQVBQRU5EIGNvbnRlbnQgInNldChUQVJHRVRfRVhFX0ZJTEVfTkFNRV8ke3RndH1fJDxDT05GSUc+JHtleGVfZmlsZW5hbWV9KVxuIikKKworICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9PQkpFQ1RfRklMRVNfJHt0Z3R9XyQ8Q09ORklHPiBbPT1bJDxUQVJHRVRfT0JKRUNUUzoke3RndH0+XT09XSlcbiIpCisgIGVuZGZvcmVhY2goKQorCisgIGZpbGUoR0VORVJBVEUgT1VUUFVUICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlc18kPENPTkZJRz4uY21ha2UiIENPTlRFTlQgIiR7Y29udGVudH0iKQorCisgIHNldChjb250ZW50KQorICBmb3JlYWNoKGNvbmZpZyBJTiBMSVNUUyBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAiaW5jbHVkZShcJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS90YXJnZXRfZmlsZXNfJHtjb25maWd9LmNtYWtlKVxuIikKKyAgZW5kZm9yZWFjaCgpCisKKyAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UiICIke2NvbnRlbnR9IikKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS1hbGwtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtYWxsLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjY4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtYWxsLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZGI1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjggQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlY3VkYWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9FWEVfTElCX0ZJTEVfc2ltcGxlY3VkYWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlY3VkYXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVjdWRhc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfRGVidWd9CisKKyAgRVhDTFVERQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5YjFjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS5jbWFrZQpAQCAtMCwwICsxLDIxIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKK2ZpbGUoVE9VQ0ggJHtDTUFLRV9CSU5BUllfRElSfS9lbXB0eS5jbWFrZSkKKworYWRkX2xpYnJhcnkoc2ltcGxlY3VkYW9iaiBPQkpFQ1Qgc2ltcGxlbGliLmN1KQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNpbXBsZWN1ZGFvYmoKKyAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgICAgICAgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworYWRkX2xpYnJhcnkoc2ltcGxlY3VkYXNoYXJlZCBTSEFSRUQgKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNpbXBsZWN1ZGFzaGFyZWQgUFJJVkFURSBzaW1wbGVjdWRhb2JqKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNpbXBsZWN1ZGFvYmogc2ltcGxlY3VkYXNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMKKyAgICAgICAgICAgICAgICAgICAgICBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKworYWRkX2V4ZWN1dGFibGUoc2ltcGxlY3VkYWV4ZSBtYWluLmN1ICkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzaW1wbGVjdWRhZXhlIFBSSVZBVEUgc2ltcGxlY3VkYXNoYXJlZCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhzaW1wbGVjdWRhZXhlIHNpbXBsZWN1ZGFzaGFyZWQgc2ltcGxlY3VkYW9iaikKKworZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlIiAic2V0KEdFTkVSQVRFRF9GSUxFUyBbPT1bJHtDTUFLRV9CSU5BUllfRElSfS9lbXB0eS5jbWFrZV09PV0pXG4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kRGVwZmlsZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZERlcGZpbGUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5NWIxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZERlcGZpbGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitzZXQobG9nICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0N1c3RvbUNvbW1hbmREZXBmaWxlLWJ1aWxkL0NNYWtlRmlsZXMvaW1wbC1EZWJ1Zy5uaW5qYSIpCitmaWxlKFJFQUQgIiR7bG9nfSIgYnVpbGRfZmlsZSkKK2lmKE5PVCAiJHtidWlsZF9maWxlfSIgTUFUQ0hFUyAiZGVwZmlsZSA9IHRlc3RcXC5kIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJMb2cgZmlsZTpcbiAke2xvZ31cbmRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgbGluZTogZGVwZmlsZSA9IHRlc3QuZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmREZXBmaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kRGVwZmlsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQyNjcwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kRGVwZmlsZS5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgT1VUUFVUIG1haW4uY29weS5jCisgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGNvcHkKKyAgICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L21haW4uYyIKKyAgICAgICAgICBtYWluLmNvcHkuYworICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IgorICBERVBGSUxFICJ0ZXN0LmQiCisgICkKK2FkZF9jdXN0b21fdGFyZ2V0KGNvcHkgQUxMIERFUEVORFMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9tYWluLmNvcHkuYyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiZGI0MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM4IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtDT05GSUdfRklMRVN9CisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9ybGliX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9EZWJ1Z30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmY0MmMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWNsZWFuLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzcgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0NPTkZJR19GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9yX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctZ2VuZXJhdGVkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctZ2VuZXJhdGVkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1ZDQ4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1nZW5lcmF0ZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEyIEBACiteR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdG9yIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdG9yIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRlZCBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRlZCBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3ZjViOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDMgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0NPTkZJR19GSUxFU30KKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtY2xlYW4tbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0Y2JlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzUgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0NPTkZJR19GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9yX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWdlbmVyYXRlZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtZ2VuZXJhdGVkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5YWJlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWdlbmVyYXRlZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK15HZW5lcmF0b3IgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFJlbGVhc2UKK0dlbmVyYXRvciBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFJlbGVhc2UKK0dlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFJlbGVhc2UKK0dlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFJlbGVhc2UKK0dlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IERlYnVnCitHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IERlYnVnCitHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IERlYnVnCitHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IERlYnVnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1jbGVhbi1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE2ZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyOSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7Q09ORklHX0ZJTEVTfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1nZW5lcmF0ZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWdlbmVyYXRlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NmVjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1nZW5lcmF0ZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEyIEBACiteR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0b3IgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdG9yIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZQorR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWluLWRlYnVnLWdyYXBoLWdlbmVyYXRlZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtaW4tZGVidWctZ3JhcGgtZ2VuZXJhdGVkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzOTJhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWluLWRlYnVnLWdyYXBoLWdlbmVyYXRlZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK15HZW5lcmF0b3IgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IERlYnVnCitHZW5lcmF0b3IgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdG9yIGxpYnJhcnkgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IERlYnVnCitHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IERlYnVnCitHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdG9yIG9iamVjdCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IERlYnVnCitHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFJlbGVhc2UKK0dlbmVyYXRlZCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFJlbGVhc2UKK0dlbmVyYXRlZCBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFJlbGVhc2UKK0dlbmVyYXRlZCBvYmplY3QgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFJlbGVhc2UKK0dlbmVyYXRlZCBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtaW4tZGVidWctZ3JhcGgtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1pbi1kZWJ1Zy1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWYzOTJlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtaW4tZGVidWctZ3JhcGgtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0NCBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7Q09ORklHX0ZJTEVTfQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9ybGliX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9yX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWE2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ2IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtDT05GSUdfRklMRVN9CisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9ybGliX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9yX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YWNhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY21ha2UKQEAgLTAsMCArMSw1NiBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5KGdlbmVyYXRvcmxpYiBTVEFUSUMgZ2VuZXJhdG9ybGliLmMpCithZGRfbGlicmFyeShnZW5lcmF0b3JvYmogT0JKRUNUIGdlbmVyYXRvcm9iai5jKQorYWRkX2xpYnJhcnkoZW1wdHlvYmogT0JKRUNUIGVtcHR5LmMpCithZGRfbGlicmFyeShlbXB0eW9iajIgT0JKRUNUIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGdlbmVyYXRvciBnZW5lcmF0b3IuYyAkPFRBUkdFVF9PQkpFQ1RTOmdlbmVyYXRvcm9iaj4pCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VuZXJhdG9yIFBSSVZBVEUgZ2VuZXJhdG9ybGliKQorCithZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUIGdlbmVyYXRlZC5jIENPTU1BTkQgZ2VuZXJhdG9yIGdlbmVyYXRlZC5jKQorYWRkX2V4ZWN1dGFibGUoZ2VuZXJhdGVkICR7Q01BS0VfQklOQVJZX0RJUn0vZ2VuZXJhdGVkLmMgJDxUQVJHRVRfT0JKRUNUUzpnZW5lcmF0b3JvYmo+ICQ8VEFSR0VUX09CSkVDVFM6ZW1wdHlvYmo+KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdlbmVyYXRlZCBQUklWQVRFIGdlbmVyYXRvcmxpYikKKworZmlsZShHRU5FUkFURSBPVVRQVVQgaW5jbHVkZS9nZW5leC8kPENPTkZJRz4vZ2VuZXhfY29uZmlnLmggQ09OVEVOVAorIiNpZm5kZWYgR0VORVhfQ09ORklHX0gKKyNkZWZpbmUgR0VORVhfQ09ORklHX0gKKworI2RlZmluZSBHRU5FWF9DT05GSUdfSU5DTFVERV9ESVIgXCIkPENPTkZJRz5cIgorCisjZW5kaWYgLyogR0VORVhfQ09ORklHX0ggKi8KKyIpCitmaWxlKEdFTkVSQVRFIE9VVFBVVCBpbmNsdWRlL2ludGRpci8kPENPTkZJRz4vaW50ZGlyX2NvbmZpZy5oIENPTlRFTlQKKyIjaWZuZGVmIElOVERJUl9DT05GSUdfSAorI2RlZmluZSBJTlRESVJfQ09ORklHX0gKKworI2RlZmluZSBJTlRESVJfQ09ORklHX0lOQ0xVREVfRElSIFwiJDxDT05GSUc+XCIKKworI2VuZGlmIC8qIElOVERJUl9DT05GSUdfSCAqLworIikKKworZm9yZWFjaChnIGdlbmVyYXRvcmxpYiBnZW5lcmF0b3JvYmogZ2VuZXJhdG9yIGdlbmVyYXRlZCkKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoJHtnfSBQUklWQVRFCisgICAgIkdFTkVYX0NPTkZJR19ERUZJTklUSU9OPVwiJDxDT05GSUc+XCIiCisgICMgRklYTUUgR2V0IHRoaXMgd29ya2luZworICAjICAiSU5URElSX0NPTkZJR19ERUZJTklUSU9OPVwiJHtDTUFLRV9DRkdfSU5URElSfVwiIgorICAgICkKKyAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtnfSBQUklWQVRFCisgICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vaW5jbHVkZS9nZW5leC8kPENPTkZJRz4iCisgICMgRklYTUUgR2V0IHRoaXMgd29ya2luZworICAjICAiJHtDTUFLRV9CSU5BUllfRElSfS9pbmNsdWRlL2ludGRpci8ke0NNQUtFX0NGR19JTlRESVJ9IgorICAgICkKK2VuZGZvcmVhY2goKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKGdlbmVyYXRvcmxpYiBnZW5lcmF0b3JvYmogZW1wdHlvYmogZ2VuZXJhdG9yIGdlbmVyYXRlZCkKKworZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlIiAic2V0KEdFTkVSQVRFRF9GSUxFUyBbPT1bJHtDTUFLRV9CSU5BUllfRElSfS9nZW5lcmF0ZWQuY109PV0pXG4iKQorc2V0KGdlbmZpbGVzKQorZm9yZWFjaChjZmcgRGVidWcgUmVsZWFzZSBNaW5TaXplUmVsIFJlbFdpdGhEZWJJbmZvKQorICBsaXN0KEFQUEVORCBnZW5maWxlcworICAgICR7Q01BS0VfQklOQVJZX0RJUn0vaW5jbHVkZS9nZW5leC8ke2NmZ30vZ2VuZXhfY29uZmlnLmgKKyAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2luY2x1ZGUvaW50ZGlyLyR7Y2ZnfS9pbnRkaXJfY29uZmlnLmgKKyAgICApCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSIgInNldChDT05GSUdfRklMRVMgWz09WyR7Z2VuZmlsZXN9XT09XSlcbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy1jb21tYW5kLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctY29tbWFuZC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM0MDIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctY29tbWFuZC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9CisgICAgJHtUQVJHRVRfREVQRU5EU19Ub3BDb21tYW5kfQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9ERVBFTkRTX1RvcENvbW1hbmR9IiAiXkdlbmV4IGNvbmZpZzogRGVidWdcbklOVERJUiBjb25maWc6IERlYnVnXG4kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtcG9zdGJ1aWxkLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1wb3N0YnVpbGQtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4NjFiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtcG9zdGJ1aWxkLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0KKyAgICAke1RBUkdFVF9ERVBFTkRTX1RvcENvbW1hbmR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19Ub3BUYXJnZXR9CisgICAgJHtUQVJHRVRfRklMRV9TdWJkaXJQb3N0QnVpbGRfRGVidWd9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg5NWIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0KKyAgICAke1RBUkdFVF9ERVBFTkRTX1RvcENvbW1hbmR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19Ub3BUYXJnZXR9CisgICkKK2NoZWNrX2ZpbGVfY29udGVudHMoIiR7VEFSR0VUX0JZUFJPRFVDVFNfVG9wVGFyZ2V0fSIgIl5HZW5leCBjb25maWc6IERlYnVnXG5JTlRESVIgY29uZmlnOiBEZWJ1Z1xuJCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy10YXJnZXRwb3N0YnVpbGQtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy10YXJnZXRwb3N0YnVpbGQtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0MzllYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLXRhcmdldHBvc3RidWlsZC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICAgICR7VEFSR0VUX0RFUEVORFNfVG9wQ29tbWFuZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclRhcmdldH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldH0KKyAgICAke1RBUkdFVF9GSUxFX1N1YmRpclBvc3RCdWlsZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9GSUxFX1N1YmRpclBvc3RCdWlsZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyUG9zdEJ1aWxkfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfVG9wVGFyZ2V0UG9zdEJ1aWxkfQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldFBvc3RCdWlsZH0iICJeR2VuZXggY29uZmlnOiBEZWJ1Z1xuSU5URElSIGNvbmZpZzogRGVidWdcbiQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtbWluc2l6ZXJlbC1jb21tYW5kLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtbWluc2l6ZXJlbC1jb21tYW5kLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTNmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1taW5zaXplcmVsLWNvbW1hbmQtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9IiAiXkdlbmV4IGNvbmZpZzogTWluU2l6ZVJlbFxuSU5URElSIGNvbmZpZzogTWluU2l6ZVJlbFxuJCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLWNvbW1hbmQtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLWNvbW1hbmQtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhOTczNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtY29tbWFuZC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9CisgICkKK2NoZWNrX2ZpbGVfY29udGVudHMoIiR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0iICJeR2VuZXggY29uZmlnOiBSZWxlYXNlXG5JTlRESVIgY29uZmlnOiBSZWxlYXNlXG4kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtcG9zdGJ1aWxkLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS1wb3N0YnVpbGQtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxNmI5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtcG9zdGJ1aWxkLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9CisgICAgJHtUQVJHRVRfREVQRU5EU19Ub3BDb21tYW5kfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyVGFyZ2V0fQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfVG9wVGFyZ2V0fQorICAgICR7VEFSR0VUX0ZJTEVfU3ViZGlyUG9zdEJ1aWxkX0RlYnVnfQorICAgICR7VEFSR0VUX0ZJTEVfU3ViZGlyUG9zdEJ1aWxkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJQb3N0QnVpbGR9CisgICkKK2NoZWNrX2ZpbGVfY29udGVudHMoIiR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyUG9zdEJ1aWxkfSIgIl5HZW5leCBjb25maWc6IFJlbGVhc2VcbklOVERJUiBjb25maWc6IFJlbGVhc2VcbiQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLXRhcmdldC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2U3OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS10YXJnZXQtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICAgICR7VEFSR0VUX0RFUEVORFNfVG9wQ29tbWFuZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclRhcmdldH0KKyAgKQorY2hlY2tfZmlsZV9jb250ZW50cygiJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXR9IiAiXkdlbmV4IGNvbmZpZzogUmVsZWFzZVxuSU5URElSIGNvbmZpZzogUmVsZWFzZVxuJCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLXRhcmdldHBvc3RidWlsZC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtdGFyZ2V0cG9zdGJ1aWxkLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2N2Q1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLXRhcmdldHBvc3RidWlsZC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICAgICR7VEFSR0VUX0RFUEVORFNfVG9wQ29tbWFuZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclRhcmdldH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldH0KKyAgICAke1RBUkdFVF9GSUxFX1N1YmRpclBvc3RCdWlsZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9GSUxFX1N1YmRpclBvc3RCdWlsZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyUG9zdEJ1aWxkfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfVG9wVGFyZ2V0UG9zdEJ1aWxkfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyVGFyZ2V0UG9zdEJ1aWxkfQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclRhcmdldFBvc3RCdWlsZH0iICJeR2VuZXggY29uZmlnOiBSZWxlYXNlXG5JTlRESVIgY29uZmlnOiBSZWxlYXNlXG4kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiMjRlOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLmNtYWtlCkBAIC0wLDAgKzEsMzkgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitmaWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90YXJnZXRfZmlsZXNfY3VzdG9tLmNtYWtlIikKKworZnVuY3Rpb24oZ2V0X3dyaXRlX2ZpbGVfY29tbWFuZCB2YXIgZmlsZW5hbWUpCisgIHNldCgke3Zhcn0gJHtDTUFLRV9DT01NQU5EfSAtRE9VVFBVVF9GSUxFPSR7ZmlsZW5hbWV9IC1ER0VORVhfQ09ORklHPSQ8Q09ORklHPiAtRElOVERJUl9DT05GSUc9JHtDTUFLRV9DRkdfSU5URElSfSAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L1dyaXRlRmlsZS5jbWFrZSBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKGNyZWF0ZV90YXJnZXRzIHByZWZpeCkKKyAgZ2V0X3dyaXRlX2ZpbGVfY29tbWFuZChjbWQgJHtwcmVmaXh9Q29tbWFuZC50eHQpCisgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtwcmVmaXh9Q29tbWFuZC50eHQgQ09NTUFORCAke2NtZH0pCisgIGFkZF9jdXN0b21fdGFyZ2V0KCR7cHJlZml4fUNvbW1hbmQgREVQRU5EUyAke3ByZWZpeH1Db21tYW5kLnR4dCkKKworICBnZXRfd3JpdGVfZmlsZV9jb21tYW5kKGNtZCAke3ByZWZpeH1UYXJnZXQudHh0KQorICBhZGRfY3VzdG9tX3RhcmdldCgke3ByZWZpeH1UYXJnZXQgQ09NTUFORCAke2NtZH0gQllQUk9EVUNUUyAke3ByZWZpeH1UYXJnZXQudHh0KQorCisgIGdldF93cml0ZV9maWxlX2NvbW1hbmQoY21kICR7cHJlZml4fVBvc3RCdWlsZC50eHQpCisgIGFkZF9leGVjdXRhYmxlKCR7cHJlZml4fVBvc3RCdWlsZCAke0NNQUtFX1NPVVJDRV9ESVJ9L21haW4uYykKKyAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCAke3ByZWZpeH1Qb3N0QnVpbGQgQ09NTUFORCAke2NtZH0gQllQUk9EVUNUUyAke3ByZWZpeH1Qb3N0QnVpbGQudHh0KQorCisgIGdldF93cml0ZV9maWxlX2NvbW1hbmQoY21kICR7cHJlZml4fVRhcmdldFBvc3RCdWlsZC50eHQpCisgIGFkZF9jdXN0b21fdGFyZ2V0KCR7cHJlZml4fVRhcmdldFBvc3RCdWlsZCkKKyAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCAke3ByZWZpeH1UYXJnZXRQb3N0QnVpbGQgQ09NTUFORCAke2NtZH0gQllQUk9EVUNUUyAke3ByZWZpeH1UYXJnZXRQb3N0QnVpbGQudHh0KQorCisgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlc19jdXN0b20uY21ha2UiCisic2V0KFRBUkdFVF9ERVBFTkRTXyR7cHJlZml4fUNvbW1hbmQgWz09WyR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke3ByZWZpeH1Db21tYW5kLnR4dF09PV0pCitzZXQoVEFSR0VUX0JZUFJPRFVDVFNfJHtwcmVmaXh9VGFyZ2V0IFs9PVske0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtwcmVmaXh9VGFyZ2V0LnR4dF09PV0pCitzZXQoVEFSR0VUX0JZUFJPRFVDVFNfJHtwcmVmaXh9UG9zdEJ1aWxkIFs9PVske0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtwcmVmaXh9UG9zdEJ1aWxkLnR4dF09PV0pCitzZXQoVEFSR0VUX0JZUFJPRFVDVFNfJHtwcmVmaXh9VGFyZ2V0UG9zdEJ1aWxkIFs9PVske0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtwcmVmaXh9VGFyZ2V0UG9zdEJ1aWxkLnR4dF09PV0pCisiKQorZW5kZnVuY3Rpb24oKQorCithZGRfc3ViZGlyZWN0b3J5KEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0c1N1YmRpcikKKworY3JlYXRlX3RhcmdldHMoVG9wKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKFRvcFBvc3RCdWlsZCBTdWJkaXJQb3N0QnVpbGQpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UiICJpbmNsdWRlKFwke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3RhcmdldF9maWxlc19jdXN0b20uY21ha2UpXG4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHNTdWJkaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0c1N1YmRpci9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTRlM2VkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHNTdWJkaXIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSBAQAorY3JlYXRlX3RhcmdldHMoU3ViZGlyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9EZWZhdWx0QnVpbGRGaWxlQ29uZmlnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9EZWZhdWx0QnVpbGRGaWxlQ29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2IxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0RlZmF1bHRCdWlsZEZpbGVDb25maWcuY21ha2UKQEAgLTAsMCArMSBAQAorIyBJbnRlbnRpb25hbGx5IGVtcHR5CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ZyYW1ld29yay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRnJhbWV3b3JrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YzM1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ZyYW1ld29yay5jbWFrZQpAQCAtMCwwICsxLDIyIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KGhlYWRlciAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2hlYWRlci5oIikKK2ZpbGUoR0VORVJBVEUKKyAgT1VUUFVUICIke2hlYWRlcn0iCisgIENPTlRFTlQgIi8qIGZvbyAqLyIKKyAgQ09ORElUSU9OICIkPENPTkZJRzpSZWxlYXNlPiIKKyAgKQorYWRkX2xpYnJhcnkoZnJhbWV3b3JrIFNIQVJFRCAiJHtoZWFkZXJ9IiBlbXB0eS5jKQorCitzZXRfcHJvcGVydHkoVEFSR0VUIGZyYW1ld29yayBQUk9QRVJUWSBGUkFNRVdPUksgT04pCitzZXRfcHJvcGVydHkoVEFSR0VUIGZyYW1ld29yayBBUFBFTkQgUFJPUEVSVFkgUFVCTElDX0hFQURFUiAke2hlYWRlcn0pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhmcmFtZXdvcmsgUFJPUEVSVElFUworICBMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgImxpYiIKKyAgTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICJsaWIiCisgIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICJsaWIiCisgIERFQlVHX1BPU1RGSVggIl9kZWJ1ZyIKKyAgKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKGZyYW1ld29yaykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRnJhbWV3b3JrRGVwZW5kZW5jeUF1dG9nZW4uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ZyYW1ld29ya0RlcGVuZGVuY3lBdXRvZ2VuLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ZyYW1ld29ya0RlcGVuZGVuY3lBdXRvZ2VuLmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQoQ01BS0VfTElOS19ERVBFTkRTX05PX1NIQVJFRCBPTikKKworc2V0KFFUX1ZFUlNJT05fTUFKT1IgNikKK3NldChmYWtlX21vY19wYXRoICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZmFrZV9tb2MiKQorZmlsZShXUklURSAiJHtmYWtlX21vY19wYXRofSIgIiIpCisKK2FkZF9saWJyYXJ5KHRlc3QxIFNIQVJFRCBzaW1wbGVsaWIuYykKK2FkZF9saWJyYXJ5KHRlc3QyIFNIQVJFRCBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3QyIHRlc3QxKQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModGVzdDEgdGVzdDIgUFJPUEVSVElFUworICBGUkFNRVdPUksgT04KKyAgQVVUT01PQyBPTgorICBBVVRPTU9DX0VYRUNVVEFCTEUgIiR7ZmFrZV9tb2NfcGF0aH0iCisgICkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyh0ZXN0MSB0ZXN0MikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW5zdGFsbC1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWluc3RhbGwtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1pbnN0YWxsLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTVhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1pbnN0YWxsLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9GSUxFX2V4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX215bGliX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9EZWJ1Z30KKworICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2Jpbi9EZWJ1Zy8ke1RBUkdFVF9GSUxFX05BTUVfZXhlX0RlYnVnfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9EZWJ1Zy8ke1RBUkdFVF9GSUxFX05BTUVfbXlsaWJfRGVidWd9CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvbGliL0RlYnVnLyR7VEFSR0VUX0xJTktFUl9GSUxFX05BTUVfbXlsaWJfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2V4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9SZWxlYXNlfQorCisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvYmluL1JlbGVhc2UvJHtUQVJHRVRfRklMRV9OQU1FX2V4ZV9SZWxlYXNlfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9SZWxlYXNlLyR7VEFSR0VUX0ZJTEVfTkFNRV9teWxpYl9SZWxlYXNlfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9SZWxlYXNlLyR7VEFSR0VUX0xJTktFUl9GSUxFX05BTUVfbXlsaWJfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW5zdGFsbC1yZWxlYXNlLWluc3RhbGwtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtcmVsZWFzZS1pbnN0YWxsLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyODBjODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtcmVsZWFzZS1pbnN0YWxsLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9GSUxFX2V4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9SZWxlYXNlfQorCisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvYmluL1JlbGVhc2UvJHtUQVJHRVRfRklMRV9OQU1FX2V4ZV9SZWxlYXNlfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9SZWxlYXNlLyR7VEFSR0VUX0ZJTEVfTkFNRV9teWxpYl9SZWxlYXNlfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9SZWxlYXNlLyR7VEFSR0VUX0xJTktFUl9GSUxFX05BTUVfbXlsaWJfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNmUzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwuY21ha2UKQEAgLTAsMCArMSwxMCBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9leGVjdXRhYmxlKGV4ZSBtYWluLmMpCithZGRfbGlicmFyeShteWxpYiBTVEFUSUMgc2ltcGxlbGliLmMpCisKK2luc3RhbGwoVEFSR0VUUyBleGUgREVTVElOQVRJT04gYmluLyQ8Q09ORklHPikKK2luc3RhbGwoVEFSR0VUUyBteWxpYiBERVNUSU5BVElPTiBsaWIvJDxDT05GSUc+KQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKGV4ZSBteWxpYikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkQ3Jvc3NDb25maWdzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmM1ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkQ3Jvc3NDb25maWdzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACiteQ01ha2UgRXJyb3I6CisgIENNQUtFX0NST1NTX0NPTkZJR1MgaXMgbm90IGEgc3Vic2V0IG9mIENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMKKworCitDTWFrZSBHZW5lcmF0ZSBzdGVwIGZhaWxlZFwuICBCdWlsZCBmaWxlcyBjYW5ub3QgYmUgcmVnZW5lcmF0ZWQgY29ycmVjdGx5XC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZENyb3NzQ29uZmlncy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0QnVpbGRGaWxlQ29uZmlnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE5MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIEVycm9yOgorICBUaGUgY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFIFwoUmVsV2l0aERlYkluZm9cKSBpcworICBub3QgcHJlc2VudCBpbiBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTCisKKworQ01ha2UgR2VuZXJhdGUgc3RlcCBmYWlsZWRcLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseVwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWcuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc0Nyb3NzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc0Nyb3NzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc0Nyb3NzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyZGY4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzQ3Jvc3Mtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK15DTWFrZSBFcnJvcjoKKyAgQ01BS0VfREVGQVVMVF9DT05GSUdTIGlzIG5vdCBhIHN1YnNldCBvZiBDTUFLRV9DUk9TU19DT05GSUdTCisKKworQ01ha2UgR2VuZXJhdGUgc3RlcCBmYWlsZWRcLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseVwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzQ3Jvc3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzQ3Jvc3MuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc05vQ3Jvc3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc05vQ3Jvc3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc05vQ3Jvc3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDA5MGEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRXJyb3I6CisgIENNQUtFX0RFRkFVTFRfQ09ORklHUyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSBvcgorICBDTUFLRV9DUk9TU19DT05GSUdTCisKKworQ01ha2UgR2VuZXJhdGUgc3RlcCBmYWlsZWRcLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseVwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc05vQ3Jvc3MuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvTm9VbnVzZWRWYXJpYWJsZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL05vVW51c2VkVmFyaWFibGVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2IxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL05vVW51c2VkVmFyaWFibGVzLmNtYWtlCkBAIC0wLDAgKzEgQEAKKyMgSW50ZW50aW9uYWxseSBlbXB0eQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Qb3N0Zml4QW5kTG9jYXRpb24tZGVidWctaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1N2I1YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9EZWJ1Z30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Qb3N0Zml4QW5kTG9jYXRpb24tcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Qb3N0Zml4QW5kTG9jYXRpb24tcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDVlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1Bvc3RmaXhBbmRMb2NhdGlvbi1yZWxlYXNlLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX215bGliX1JlbGVhc2V9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Qb3N0Zml4QW5kTG9jYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlZjNjOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMTggQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQoQ01BS0VfREVCVUdfUE9TVEZJWCAiX2RlYnVnIikKKworc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2JpbikKK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorCithZGRfbGlicmFyeShteWxpYiBTSEFSRUQgc2ltcGxlbGliLmMpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Db21tb24uY21ha2UpCitnZW5lcmF0ZV9vdXRwdXRfZmlsZXMobXlsaWIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1F0NS1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9RdDUtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDhkZjEzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9RdDUtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0FVVE9HRU5fRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX2V4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX0RlYnVnfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1F0NS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUXQ1LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMWM3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1F0NS5jbWFrZQpAQCAtMCwwICsxLDMwIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkKKworc2V0KENNQUtFX0FVVE9NT0MgT04pCitzZXQoQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTIE9GRikKKworYWRkX2V4ZWN1dGFibGUoZXhlIHF0NS5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZXhlIFBSSVZBVEUgUXQ1OjpDb3JlKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKGV4ZSkKKworc2V0KG1vY193cml0ZXNfZGVwZmlsZXMgMCkKK2lmKFF0NUNvcmVfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjUuMTUuMCIpCisgIHNldChtb2Nfd3JpdGVzX2RlcGZpbGVzIDEpCitlbmRpZigpCisKK3NldChhdXRvZ2VuX2ZpbGVzICIke0NNQUtFX0JJTkFSWV9ESVJ9L2V4ZV9hdXRvZ2VuL21vY3NfY29tcGlsYXRpb24uY3BwIikKK2lmKG1vY193cml0ZXNfZGVwZmlsZXMpCisgIGxpc3QoQVBQRU5EIGF1dG9nZW5fZmlsZXMgIiR7Q01BS0VfQklOQVJZX0RJUn0vZXhlX2F1dG9nZW4vZGVwcyIpCisgIGxpc3QoQVBQRU5EIGF1dG9nZW5fZmlsZXMgIiR7Q01BS0VfQklOQVJZX0RJUn0vZXhlX2F1dG9nZW4vdGltZXN0YW1wIikKK2VuZGlmKCkKK2ZvcmVhY2goYyBJTiBMSVNUUyBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTKQorICBsaXN0KEFQUEVORCBhdXRvZ2VuX2ZpbGVzICIke0NNQUtFX0JJTkFSWV9ESVJ9L2V4ZV9hdXRvZ2VuL2luY2x1ZGVfJHtjfS9tb2NfcXQ1LmNwcCIpCisgIGlmKG1vY193cml0ZXNfZGVwZmlsZXMpCisgICAgbGlzdChBUFBFTkQgYXV0b2dlbl9maWxlcyAiJHtDTUFLRV9CSU5BUllfRElSfS9leGVfYXV0b2dlbi9pbmNsdWRlXyR7Y30vbW9jX3F0NS5jcHAuZCIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlIiAic2V0KEFVVE9HRU5fRklMRVMgWz09WyR7YXV0b2dlbl9maWxlc31dPT1dKVxuIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3MmY0NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMzAzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKKworaW5jbHVkZShSdW5DTWFrZSkKKworc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUiAiTmluamEgTXVsdGktQ29uZmlnIikKK3NldChSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHIDEpCisKK2Z1bmN0aW9uKGNoZWNrX2ZpbGVzIGRpcikKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzKF9jaGVja19maWxlcyAiIiAiIiAiSU5DTFVERTtFWENMVURFIiAke0FSR059KQorCisgIHNldChleHBlY3RlZCAke19jaGVja19maWxlc19JTkNMVURFfSkKKyAgbGlzdChGSUxURVIgZXhwZWN0ZWQgRVhDTFVERSBSRUdFWCAiXiQiKQorICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIGV4cGVjdGVkKQorICBsaXN0KFNPUlQgZXhwZWN0ZWQpCisKKyAgZmlsZShHTE9CX1JFQ1VSU0UgYWN0dWFsICIke2Rpcn0vKiIpCisgIGxpc3QoRklMVEVSIGFjdHVhbCBFWENMVURFIFJFR0VYICIvQ01ha2VGaWxlcy98XFwubmluamEkfC9DTWFrZUNhY2hlXFwudHh0JHwvdGFyZ2V0X2ZpbGVzW14vXSpcXC5jbWFrZSR8L1xcLm5pbmphX1teL10qJHwvY21ha2VfaW5zdGFsbFxcLmNtYWtlJHxcXC5pbGskfFxcLm1hbmlmZXN0JHxcXC5wZGIkfFxcLmV4cCR8L2luc3RhbGxfbWFuaWZlc3RcXC50eHQkIikKKyAgZm9yZWFjaChmIElOIExJU1RTIF9jaGVja19maWxlc19JTkNMVURFIF9jaGVja19maWxlc19FWENMVURFKQorICAgIGlmKEVYSVNUUyAke2Z9KQorICAgICAgbGlzdChBUFBFTkQgYWN0dWFsICR7Zn0pCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKyAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBhY3R1YWwpCisgIGxpc3QoU09SVCBhY3R1YWwpCisKKyAgaWYoTk9UICIke2V4cGVjdGVkfSIgU1RSRVFVQUwgIiR7YWN0dWFsfSIpCisgICAgc3RyaW5nKFJFUExBQ0UgIjsiICJcbiAgIiBleHBlY3RlZF9mb3JtYXR0ZWQgIiR7ZXhwZWN0ZWR9IikKKyAgICBzdHJpbmcoUkVQTEFDRSAiOyIgIlxuICAiIGFjdHVhbF9mb3JtYXR0ZWQgIiR7YWN0dWFsfSIpCisgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQWN0dWFsIGZpbGVzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWRcbkV4cGVjdGVkOlxuICAke2V4cGVjdGVkX2Zvcm1hdHRlZH1cbkFjdHVhbDpcbiAgJHthY3R1YWxfZm9ybWF0dGVkfVxuIikKKyAgZW5kaWYoKQorCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oY2hlY2tfZmlsZV9jb250ZW50cyBmaWxlbmFtZSBleHBlY3RlZCkKKyAgaWYoTk9UIEVYSVNUUyAiJHtmaWxlbmFtZX0iKQorICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3RcbiIpCisgIGVsc2UoKQorICAgIGZpbGUoUkVBRCAiJHtmaWxlbmFtZX0iIGFjdHVhbCkKKyAgICBpZihOT1QgYWN0dWFsIE1BVENIRVMgIiR7ZXhwZWN0ZWR9IikKKyAgICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIGV4cGVjdGVkX2Zvcm1hdHRlZCAiJHtleHBlY3RlZH0iKQorICAgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgYWN0dWFsX2Zvcm1hdHRlZCAiJHthY3R1YWx9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkNvbnRlbnRzIG9mICR7ZmlsZW5hbWV9IGRvIG5vdCBtYXRjaCBleHBlY3RlZFxuRXhwZWN0ZWQ6XG4gICR7ZXhwZWN0ZWRfZm9ybWF0dGVkfVxuQWN0dWFsOlxuICAke2FjdHVhbF9mb3JtYXR0ZWR9XG4iKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24ocnVuX2NtYWtlX2NvbmZpZ3VyZSBjYXNlKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtjYXNlfS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgcnVuX2NtYWtlKCR7Y2FzZX0pCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKHJ1bl9jbWFrZV9idWlsZCBjYXNlIHN1ZmZpeCBjb25maWcpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke2Nhc2V9LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBzZXQodGd0cykKKyAgZm9yZWFjaCh0Z3QgSU4gTElTVFMgQVJHTikKKyAgICBsaXN0KEFQUEVORCB0Z3RzIC0tdGFyZ2V0ICR7dGd0fSkKKyAgZW5kZm9yZWFjaCgpCisgIGlmKGNvbmZpZykKKyAgICBzZXQoY29uZmlnX2FyZyAtLWNvbmZpZyAke2NvbmZpZ30pCisgIGVsc2UoKQorICAgIHNldChjb25maWdfYXJnKQorICBlbmRpZigpCisgIHJ1bl9jbWFrZV9jb21tYW5kKCR7Y2FzZX0tJHtzdWZmaXh9LWJ1aWxkICIke0NNQUtFX0NPTU1BTkR9IiAtLWJ1aWxkIC4gJHtjb25maWdfYXJnfSAke3RndHN9KQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihydW5fbmluamEgY2FzZSBzdWZmaXggZmlsZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Y2FzZX0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKCR7Y2FzZX0tJHtzdWZmaXh9LW5pbmphICIke1J1bkNNYWtlX01BS0VfUFJPR1JBTX0iIC1mICIke2ZpbGV9IiAke0FSR059KQorZW5kZnVuY3Rpb24oKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9TaW1wbGUtYnVpbGQpCisjIElNUE9SVEFOVDogU2V0dGluZyBSZWxXaXRoRGViSW5mbyBhcyB0aGUgZmlyc3QgaXRlbSBpbiBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTCisjIGdlbmVyYXRlcyBhIGJ1aWxkLm5pbmphIGZpbGUgd2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24KK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1SZWxXaXRoRGViSW5mb1xcO0RlYnVnXFw7UmVsZWFzZVxcO01pblNpemVSZWw7LURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKFNpbXBsZSkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGUgZGVidWctdGFyZ2V0IERlYnVnIHNpbXBsZWV4ZSkKK3J1bl9uaW5qYShTaW1wbGUgZGVidWctdGFyZ2V0IGJ1aWxkLURlYnVnLm5pbmphIHNpbXBsZXN0YXRpYykKK2dldF9maWxlbmFtZV9jb21wb25lbnQoc2ltcGxlc2hhcmVkX1JlbGVhc2UgIiR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9IiBOQU1FKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZSByZWxlYXNlLWZpbGVuYW1lIFJlbGVhc2UgJHtzaW1wbGVzaGFyZWRfUmVsZWFzZX0pCitmaWxlKFJFTEFUSVZFX1BBVEggc2ltcGxlZXhlX1JlbGVhc2UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIgIiR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9IikKK3J1bl9uaW5qYShTaW1wbGUgcmVsZWFzZS1maWxlIGJ1aWxkLVJlbGVhc2UubmluamEgJHtzaW1wbGVleGVfUmVsZWFzZX0pCitydW5fY21ha2VfYnVpbGQoU2ltcGxlIGFsbC1jb25maWdzIFJlbGVhc2Ugc2ltcGxlc3RhdGljOmFsbCkKK3J1bl9uaW5qYShTaW1wbGUgZGVmYXVsdC1idWlsZC1maWxlIGJ1aWxkLm5pbmphIHNpbXBsZWV4ZSkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGUgYWxsLWNsZWFuIFJlbGVhc2UgY2xlYW46YWxsKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZSBkZWJ1Zy1zdWJkaXIgRGVidWcgU2ltcGxlU3ViZGlyL2FsbCkKK3J1bl9uaW5qYShTaW1wbGUgcmVsZWFzZS1pbi1taW5zaXplcmVsLWdyYXBoLXN1YmRpciBidWlsZC1NaW5TaXplUmVsLm5pbmphIFNpbXBsZVN1YmRpci9hbGw6UmVsZWFzZSkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGUgYWxsLXN1YmRpciBSZWxlYXNlIFNpbXBsZVN1YmRpci9hbGw6YWxsKQorcnVuX25pbmphKFNpbXBsZSBtaW5zaXplcmVsLXRvcCBidWlsZC1NaW5TaXplUmVsLm5pbmphIGFsbCkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGUgZGVidWctaW4tcmVsZWFzZS1ncmFwaC10b3AgUmVsZWFzZSBhbGw6RGVidWcpCitydW5fbmluamEoU2ltcGxlIGFsbC1jbGVhbi1hZ2FpbiBidWlsZC1EZWJ1Zy5uaW5qYSBjbGVhbjphbGwpCitydW5fbmluamEoU2ltcGxlIGFsbC10b3AgYnVpbGQtUmVsV2l0aERlYkluZm8ubmluamEgYWxsOmFsbCkKKyMgTGVhdmUgZW5vdWdoIHRpbWUgZm9yIHRoZSB0aW1lc3RhbXAgdG8gY2hhbmdlIG9uIHNlY29uZC1yZXNvbHV0aW9uIHN5c3RlbXMKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgc2xlZXAgMSkKK2ZpbGUoVE9VQ0ggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9lbXB0eS5jbWFrZSIpCitydW5fbmluamEoU2ltcGxlIHJlY29uZmlndXJlLWNvbmZpZyBidWlsZC1SZWxlYXNlLm5pbmphIHNpbXBsZWV4ZSkKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgc2xlZXAgMSkKK2ZpbGUoVE9VQ0ggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9lbXB0eS5jbWFrZSIpCitydW5fbmluamEoU2ltcGxlIHJlY29uZmlndXJlLW5vY29uZmlnIGJ1aWxkLm5pbmphIHNpbXBsZWV4ZSkKK3J1bl9uaW5qYShTaW1wbGUgZGVmYXVsdC1idWlsZC1maWxlLWNsZWFuIGJ1aWxkLm5pbmphIGNsZWFuKQorcnVuX25pbmphKFNpbXBsZSBkZWZhdWx0LWJ1aWxkLWZpbGUtY2xlYW4tbWluc2l6ZXJlbCBidWlsZC5uaW5qYSBjbGVhbjpNaW5TaXplUmVsKQorcnVuX25pbmphKFNpbXBsZSBkZWZhdWx0LWJ1aWxkLWZpbGUtYWxsIGJ1aWxkLm5pbmphIGFsbCkKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZVxcO01pblNpemVSZWxcXDtSZWxXaXRoRGViSW5mbzstRENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRT1SZWxlYXNlOy1EQ01BS0VfREVGQVVMVF9DT05GSUdTPWFsbDstRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKK3J1bl9jbWFrZV9jb25maWd1cmUoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fbmluamEoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMgdGFyZ2V0IGJ1aWxkLm5pbmphIHNpbXBsZWV4ZSkKK3J1bl9uaW5qYShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhcyBhbGwgYnVpbGQubmluamEgYWxsKQorcnVuX25pbmphKFNpbXBsZURlZmF1bHRCdWlsZEFsaWFzIGNsZWFuIGJ1aWxkLm5pbmphIGNsZWFuKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9UmVsZWFzZTstRENNQUtFX0RFRkFVTFRfQ09ORklHUz1EZWJ1Z1xcO1JlbGVhc2U7LURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKFNpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdCkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9uaW5qYShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QgdGFyZ2V0LWNvbmZpZ3MgYnVpbGQubmluamEgc2ltcGxlZXhlKQorIyBJTVBPUlRBTlQ6IFRoaXMgdGVzdHMgY21ha2UgLS1idWlsZCAuIHdpdGggbm8gY29uZmlnIHVzaW5nIGJ1aWxkLm5pbmphCitydW5fY21ha2VfYnVpbGQoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0IGFsbC1jb25maWdzICIiIGFsbCkKK3J1bl9uaW5qYShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QgYWxsLXJlbHdpdGhkZWJpbmZvIGJ1aWxkLm5pbmphIGFsbDpSZWxXaXRoRGViSW5mbykKK3J1bl9uaW5qYShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QgY2xlYW4tY29uZmlncyBidWlsZC5uaW5qYSBjbGVhbikKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9UmVsV2l0aERlYkluZm87LURDTUFLRV9ERUZBVUxUX0NPTkZJR1M9YWxsOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1EZWJ1Z1xcO1JlbGVhc2UiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9uaW5qYShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcyB0YXJnZXQtY29uZmlncyBidWlsZC5uaW5qYSBzaW1wbGVleGUpCisKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZTstRENNQUtFX0NST1NTX0NPTkZJR1M9RGVidWdcXDtSZWxlYXNlXFw7UmVsV2l0aERlYkluZm8iKQorcnVuX2NtYWtlKEludmFsaWRDcm9zc0NvbmZpZ3MpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2U7LURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9UmVsV2l0aERlYkluZm8iKQorcnVuX2NtYWtlKEludmFsaWREZWZhdWx0QnVpbGRGaWxlQ29uZmlnKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NST1NTX0NPTkZJR1M9RGVidWdcXDtSZWxlYXNlOy1EQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFPVJlbGVhc2U7LURDTUFLRV9ERUZBVUxUX0NPTkZJR1M9RGVidWdcXDtSZWxlYXNlXFw7UmVsV2l0aERlYkluZm8iKQorcnVuX2NtYWtlKEludmFsaWREZWZhdWx0Q29uZmlnc0Nyb3NzKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRT1SZWxlYXNlOy1EQ01BS0VfREVGQVVMVF9DT05GSUdTPWFsbCIpCitydW5fY21ha2UoSW52YWxpZERlZmF1bHRDb25maWdzTm9Dcm9zcykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9UmVsZWFzZSIpCitydW5fY21ha2UoRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1NpbXBsZU5vQ3Jvc3MtYnVpbGQpCitydW5fY21ha2VfY29uZmlndXJlKFNpbXBsZU5vQ3Jvc3MpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlTm9Dcm9zcyBkZWJ1Zy10YXJnZXQgRGVidWcgc2ltcGxlZXhlKQorcnVuX25pbmphKFNpbXBsZU5vQ3Jvc3MgZGVidWctdGFyZ2V0IGJ1aWxkLURlYnVnLm5pbmphIHNpbXBsZXN0YXRpYzpEZWJ1ZykKK3J1bl9uaW5qYShTaW1wbGVOb0Nyb3NzIHJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtdGFyZ2V0IGJ1aWxkLVJlbGVhc2UubmluamEgc2ltcGxlc3RhdGljOlJlbFdpdGhEZWJJbmZvKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZU5vQ3Jvc3MgcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1hbGwgUmVsZWFzZSBhbGw6UmVsV2l0aERlYkluZm8pCitydW5fY21ha2VfYnVpbGQoU2ltcGxlTm9Dcm9zcyByZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuIFJlbGVhc2UgY2xlYW46UmVsV2l0aERlYkluZm8pCitydW5fbmluamEoU2ltcGxlTm9Dcm9zcyBhbGwtdGFyZ2V0IGJ1aWxkLURlYnVnLm5pbmphIHNpbXBsZXN0YXRpYzphbGwpCitydW5fbmluamEoU2ltcGxlTm9Dcm9zcyBhbGwtYWxsIGJ1aWxkLURlYnVnLm5pbmphIGFsbDphbGwpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlTm9Dcm9zcyBhbGwtY2xlYW4gRGVidWcgY2xlYW46YWxsKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vU2ltcGxlQ3Jvc3NDb25maWdzLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DUk9TU19DT05GSUdTPURlYnVnXFw7UmVsZWFzZSIpCitydW5fY21ha2VfY29uZmlndXJlKFNpbXBsZUNyb3NzQ29uZmlncykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9uaW5qYShTaW1wbGVDcm9zc0NvbmZpZ3MgcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoIGJ1aWxkLVJlbGVhc2UubmluamEgc2ltcGxlZXhlKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZUNyb3NzQ29uZmlncyBkZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2Ugc2ltcGxlZXhlOkRlYnVnKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZUNyb3NzQ29uZmlncyByZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2Ugc2ltcGxlZXhlOlJlbFdpdGhEZWJJbmZvKQorcnVuX25pbmphKFNpbXBsZUNyb3NzQ29uZmlncyByZWx3aXRoZGViaW5mby1pbi1yZWx3aXRoZGViaW5mby1ncmFwaCBidWlsZC1SZWxXaXRoRGViSW5mby5uaW5qYSBzaW1wbGVleGU6UmVsV2l0aERlYkluZm8pCitydW5fbmluamEoU2ltcGxlQ3Jvc3NDb25maWdzIHJlbGVhc2UtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGggYnVpbGQtUmVsV2l0aERlYkluZm8ubmluamEgc2ltcGxlc3RhdGljOlJlbGVhc2UpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlQ3Jvc3NDb25maWdzIGFsbC1pbi1yZWx3aXRoZGViaW5mby1ncmFwaCBSZWxXaXRoRGViSW5mbyBzaW1wbGVzdGF0aWM6YWxsKQorcnVuX25pbmphKFNpbXBsZUNyb3NzQ29uZmlncyBjbGVhbi1hbGwtaW4tcmVsZWFzZS1ncmFwaCBidWlsZC1SZWxlYXNlLm5pbmphIGNsZWFuOmFsbCkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGVDcm9zc0NvbmZpZ3MgYWxsLWFsbC1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2UgYWxsOmFsbCkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGVDcm9zc0NvbmZpZ3MgYWxsLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGggUmVsZWFzZSBhbGw6UmVsV2l0aERlYkluZm8pCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9GcmFtZXdvcmstYnVpbGQpCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKK3J1bl9jbWFrZV9jb25maWd1cmUoRnJhbWV3b3JrKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX2NtYWtlX2J1aWxkKEZyYW1ld29yayBmcmFtZXdvcmsgRGVidWcgYWxsKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vRnJhbWV3b3JrRGVwZW5kZW5jeUF1dG9nZW4tYnVpbGQpCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKK3J1bl9jbWFrZV9jb25maWd1cmUoRnJhbWV3b3JrRGVwZW5kZW5jeUF1dG9nZW4pCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoRnJhbWV3b3JrRGVwZW5kZW5jeUF1dG9nZW4gZnJhbWV3b3JrIFJlbGVhc2UgdGVzdDI6RGVidWcpCisKK3NldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1idWlsZCkKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2VcXDtNaW5TaXplUmVsXFw7UmVsV2l0aERlYkluZm87LURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKEN1c3RvbUNvbW1hbmRHZW5lcmF0b3IpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBkZWJ1ZyBEZWJ1ZyBnZW5lcmF0ZWQpCitydW5fY21ha2VfY29tbWFuZChDdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWdlbmVyYXRlZCAiJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfRGVidWd9IikKK3J1bl9uaW5qYShDdXN0b21Db21tYW5kR2VuZXJhdG9yIHJlbGVhc2UgYnVpbGQtUmVsZWFzZS5uaW5qYSBnZW5lcmF0ZWQpCitydW5fY21ha2VfY29tbWFuZChDdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtZ2VuZXJhdGVkICIke1RBUkdFVF9GSUxFX2dlbmVyYXRlZF9SZWxlYXNlfSIpCitydW5fbmluamEoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBkZWJ1Zy1jbGVhbiBidWlsZC1EZWJ1Zy5uaW5qYSBjbGVhbikKK3J1bl9jbWFrZV9idWlsZChDdXN0b21Db21tYW5kR2VuZXJhdG9yIHJlbGVhc2UtY2xlYW4gUmVsZWFzZSBjbGVhbikKK3J1bl9jbWFrZV9idWlsZChDdXN0b21Db21tYW5kR2VuZXJhdG9yIGRlYnVnLWluLXJlbGVhc2UtZ3JhcGggUmVsZWFzZSBnZW5lcmF0ZWQ6RGVidWcpCitydW5fY21ha2VfY29tbWFuZChDdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtZ2VuZXJhdGVkICIke1RBUkdFVF9GSUxFX2dlbmVyYXRlZF9EZWJ1Z30iKQorcnVuX25pbmphKEN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgZGVidWctaW4tcmVsZWFzZS1ncmFwaC1jbGVhbiBidWlsZC1EZWJ1Zy5uaW5qYSBjbGVhbjpEZWJ1ZykKK3J1bl9uaW5qYShDdXN0b21Db21tYW5kR2VuZXJhdG9yIHJlbGVhc2UtaW4tZGVidWctZ3JhcGggYnVpbGQtRGVidWcubmluamEgZ2VuZXJhdGVkOlJlbGVhc2UpCitydW5fY21ha2VfY29tbWFuZChDdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtaW4tZGVidWctZ3JhcGgtZ2VuZXJhdGVkICIke1RBUkdFVF9GSUxFX2dlbmVyYXRlZF9SZWxlYXNlfSIpCit1bnNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9jbWFrZV9idWlsZChDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgcmVsZWFzZS1jb21tYW5kIFJlbGVhc2UgU3ViZGlyQ29tbWFuZCkKKyNGSVhNRSBHZXQgdGhpcyB3b3JraW5nCisjcnVuX25pbmphKEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cyBtaW5zaXplcmVsLWNvbW1hbmQgYnVpbGQtTWluU2l6ZVJlbC5uaW5qYSBDdXN0b21Db21tYW5kc0FuZFRhcmdldHNTdWJkaXIvU3ViZGlyQ29tbWFuZCkKK3J1bl9uaW5qYShDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgZGVidWctY29tbWFuZCBidWlsZC1EZWJ1Zy5uaW5qYSBUb3BDb21tYW5kKQorcnVuX25pbmphKEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cyByZWxlYXNlLXRhcmdldCBidWlsZC1SZWxlYXNlLm5pbmphIFN1YmRpclRhcmdldCkKK3J1bl9jbWFrZV9idWlsZChDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgZGVidWctdGFyZ2V0IERlYnVnIFRvcFRhcmdldCkKK3J1bl9jbWFrZV9idWlsZChDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgZGVidWctaW4tcmVsZWFzZS1ncmFwaC1wb3N0YnVpbGQgUmVsZWFzZSBTdWJkaXJQb3N0QnVpbGQ6RGVidWcpCitydW5fbmluamEoQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzIHJlbGVhc2UtcG9zdGJ1aWxkIGJ1aWxkLVJlbGVhc2UubmluamEgU3ViZGlyUG9zdEJ1aWxkKQorcnVuX2NtYWtlX2J1aWxkKEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cyBkZWJ1Zy10YXJnZXRwb3N0YnVpbGQgRGVidWcgVG9wVGFyZ2V0UG9zdEJ1aWxkKQorcnVuX25pbmphKEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cyByZWxlYXNlLXRhcmdldHBvc3RidWlsZCBidWlsZC1SZWxlYXNlLm5pbmphIFN1YmRpclRhcmdldFBvc3RCdWlsZCkKKwordW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQorCitydW5fY21ha2UoQ3VzdG9tQ29tbWFuZERlcGZpbGUpCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Qb3N0Zml4QW5kTG9jYXRpb24tYnVpbGQpCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShQb3N0Zml4QW5kTG9jYXRpb24pCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoUG9zdGZpeEFuZExvY2F0aW9uIHJlbGVhc2UtaW4tcmVsZWFzZS1ncmFwaCBSZWxlYXNlIG15bGliOlJlbGVhc2UpCitydW5fY21ha2VfYnVpbGQoUG9zdGZpeEFuZExvY2F0aW9uIGRlYnVnLWluLXJlbGVhc2UtZ3JhcGggUmVsZWFzZSBteWxpYjpEZWJ1ZykKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0NsZWFuLWJ1aWxkKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShDbGVhbikKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9jbWFrZV9idWlsZChDbGVhbiByZWxlYXNlIFJlbGVhc2UpCitydW5fbmluamEoQ2xlYW4gcmVsZWFzZS1ub3RhbGwgYnVpbGQtUmVsZWFzZS5uaW5qYSBleGVub3RhbGwpCitydW5fY21ha2VfYnVpbGQoQ2xlYW4gcmVsZWFzZS1jbGVhbiBSZWxlYXNlIGNsZWFuKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQWRkaXRpb25hbENsZWFuRmlsZXMtYnVpbGQpCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlXFw7TWluU2l6ZVJlbFxcO1JlbFdpdGhEZWJJbmZvOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShBZGRpdGlvbmFsQ2xlYW5GaWxlcykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK3J1bl9jbWFrZV9idWlsZChBZGRpdGlvbmFsQ2xlYW5GaWxlcyByZWxlYXNlLWNsZWFuIFJlbGVhc2UgY2xlYW4pCitydW5fbmluamEoQWRkaXRpb25hbENsZWFuRmlsZXMgYWxsLWNsZWFuIGJ1aWxkLURlYnVnLm5pbmphIGNsZWFuOmFsbCkKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0luc3RhbGwtYnVpbGQpCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0lOU1RBTExfUFJFRklYPSR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShJbnN0YWxsKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX2NtYWtlX2J1aWxkKEluc3RhbGwgcmVsZWFzZS1pbnN0YWxsIFJlbGVhc2UgaW5zdGFsbCkKK3J1bl9uaW5qYShJbnN0YWxsIGRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtaW5zdGFsbCBidWlsZC1SZWxlYXNlLm5pbmphIGluc3RhbGw6RGVidWcpCisKKyMgRklYTUUgR2V0IHRoaXMgd29ya2luZworI3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9BdXRvTW9jRXhlY3V0YWJsZS1idWlsZCkKKyNydW5fY21ha2VfY29uZmlndXJlKEF1dG9Nb2NFeGVjdXRhYmxlKQorI3J1bl9jbWFrZV9idWlsZChBdXRvTW9jRXhlY3V0YWJsZSBkZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2UgZXhlKQorCisjIE5lZWQgdG8gdGVzdCB0aGlzIG1hbnVhbGx5IGJlY2F1c2UgcnVuX2NtYWtlKCkgYWRkcyAtLW5vLXdhcm4tdW51c2VkLWNsaQorc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L05vVW51c2VkVmFyaWFibGVzLWJ1aWxkKQorcnVuX2NtYWtlX2NvbW1hbmQoTm9VbnVzZWRWYXJpYWJsZXMgJHtDTUFLRV9DT01NQU5EfSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9CisgIC1HICJOaW5qYSBNdWx0aS1Db25maWciCisgICItRFJ1bkNNYWtlX1RFU1Q9Tm9VbnVzZWRWYXJpYWJsZXMiCisgICItRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIgorICAiLURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9RGVidWciCisgICItRENNQUtFX0RFRkFVTFRfQ09ORklHUz1hbGwiCisgICkKKworaWYoQ01ha2VfVEVTVF9DVURBKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ3VkYVNpbXBsZS1idWlsZCkKKyAgcnVuX2NtYWtlX2NvbmZpZ3VyZShDdWRhU2ltcGxlKQorICBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCisgIHJ1bl9jbWFrZV9idWlsZChDdWRhU2ltcGxlIGRlYnVnLXRhcmdldCBEZWJ1ZyBzaW1wbGVjdWRhZXhlKQorICBydW5fbmluamEoQ3VkYVNpbXBsZSBhbGwtY2xlYW4gYnVpbGQtRGVidWcubmluamEgY2xlYW46RGVidWcpCitlbmRpZigpCisKK2lmKENNYWtlX1RFU1RfUXQ1KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vUXQ1LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKKyAgcnVuX2NtYWtlX2NvbmZpZ3VyZShRdDUpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgaW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorICBydW5fY21ha2VfYnVpbGQoUXQ1IGRlYnVnLWluLXJlbGVhc2UtZ3JhcGggUmVsZWFzZSBleGU6RGVidWcpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYWdhaW4tbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYWdhaW4tbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC1jbGVhbi1hZ2Fpbi1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDI1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC1jbGVhbi1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDI1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY29uZmlncy1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC1jb25maWdzLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGEwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY29uZmlncy1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtc3ViZGlyLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtYWxsLXN1YmRpci1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ1MDVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtYWxsLXN1YmRpci1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ5IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtYWxsLXRvcC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC10b3AtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3MWUzZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC10b3AtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1NiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLXRvcC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtdG9wLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTgwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLXRvcC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVidWctc3ViZGlyLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVidWctc3ViZGlyLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjc3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy1zdWJkaXItYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI3NzczCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy10YXJnZXQtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljMWU5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLXRhcmdldC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1hbGwtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtYWxsLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmU2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtYWxsLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDkgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtY2xlYW4tbWluc2l6ZXJlbC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbi1taW5zaXplcmVsLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWFlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtY2xlYW4tbWluc2l6ZXJlbC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQxIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIxM2RkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVmYXVsdC1idWlsZC1maWxlLWNsZWFuLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDkgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVmYXVsdC1idWlsZC1maWxlLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVmYXVsdC1idWlsZC1maWxlLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1MSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLW1pbnNpemVyZWwtdG9wLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtbWluc2l6ZXJlbC10b3AtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0YmU0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLW1pbnNpemVyZWwtdG9wLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNTEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlY29uZmlndXJlLWNvbmZpZy1uaW5qYS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVjb25maWd1cmUtY29uZmlnLW5pbmphLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NzQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlY29uZmlndXJlLWNvbmZpZy1uaW5qYS1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNCBAQAorLS0gQ29uZmlndXJpbmcgZG9uZQorLS0gR2VuZXJhdGluZyBkb25lCistLSBCdWlsZCBmaWxlcyBoYXZlIGJlZW4gd3JpdHRlbiB0bzogW14KK10qL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWJ1aWxkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1yZWNvbmZpZ3VyZS1ub2NvbmZpZy1uaW5qYS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVjb25maWd1cmUtbm9jb25maWctbmluamEtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODc3NDUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVjb25maWd1cmUtbm9jb25maWctbmluamEtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDQgQEAKKy0tIENvbmZpZ3VyaW5nIGRvbmUKKy0tIEdlbmVyYXRpbmcgZG9uZQorLS0gQnVpbGQgZmlsZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG86IFteCitdKi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1idWlsZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1maWxlLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1maWxlLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjNhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1yZWxlYXNlLWZpbGUtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1maWxlbmFtZS1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtZmlsZW5hbWUtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliZjQyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtZmlsZW5hbWUtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1pbi1taW5zaXplcmVsLWdyYXBoLXN1YmRpci1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtaW4tbWluc2l6ZXJlbC1ncmFwaC1zdWJkaXItbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtaW4tbWluc2l6ZXJlbC1ncmFwaC1zdWJkaXItbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMmY1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworZmlsZShUT1VDSCAke0NNQUtFX0JJTkFSWV9ESVJ9L2VtcHR5LmNtYWtlKQoraW5jbHVkZSgke0NNQUtFX0JJTkFSWV9ESVJ9L2VtcHR5LmNtYWtlKQorCithZGRfc3ViZGlyZWN0b3J5KFNpbXBsZVN1YmRpcikKKworYWRkX2xpYnJhcnkoc2ltcGxlc3RhdGljIFNUQVRJQyBzaW1wbGVsaWIuYykKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhzaW1wbGVleGUgc2ltcGxlc2hhcmVkIHNpbXBsZXN0YXRpYyBzaW1wbGVvYmopCisKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSIgInNldChHRU5FUkFURURfRklMRVMgWz09WyR7Q01BS0VfQklOQVJZX0RJUn0vZW1wdHkuY21ha2VdPT1dKVxuIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1hbGwtaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1hbGwtaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWU1OTUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLWFsbC1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDUgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0NSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGI0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdhbGw6UmVsV2l0aERlYkluZm8nJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtY2xlYW4tYWxsLWluLXJlbGVhc2UtZ3JhcGgtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1jbGVhbi1hbGwtaW4tcmVsZWFzZS1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk0MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtY2xlYW4tYWxsLWluLXJlbGVhc2UtZ3JhcGgtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Yzc3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzcgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjUyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWxlYXNlLWluLXJlbGVhc2UtZ3JhcGgtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbGVhc2UtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGgtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWxlYXNlLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzdhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWxlYXNlLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDQgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTgyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ3NpbXBsZWV4ZTpSZWxXaXRoRGViSW5mbyckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWx3aXRoZGViaW5mby1pbi1yZWx3aXRoZGViaW5mby1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZGRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWx3aXRoZGViaW5mby1pbi1yZWx3aXRoZGViaW5mby1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2ltcGxlLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtYWxsLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy1hbGwtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3MWUzZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtYWxsLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNTYgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtY2xlYW4tbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtY2xlYW4tbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyNSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLXRhcmdldC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ1MDVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy10YXJnZXQtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0OSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TaW1wbGUuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtYWxsLWNvbmZpZ3MtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdC1hbGwtY29uZmlncy1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZkZDIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtYWxsLWNvbmZpZ3MtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWFsbC1yZWx3aXRoZGViaW5mby1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWFsbC1yZWx3aXRoZGViaW5mby1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTViYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtYWxsLXJlbHdpdGhkZWJpbmZvLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDYgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtY2xlYW4tY29uZmlncy1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWNsZWFuLWNvbmZpZ3MtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyOWQzZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWNsZWFuLWNvbmZpZ3MtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LXRhcmdldC1jb25maWdzLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtdGFyZ2V0LWNvbmZpZ3MtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LXRhcmdldC1jb25maWdzLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzcgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTViNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NpbXBsZS5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLXRhcmdldC1jb25maWdzLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcy10YXJnZXQtY29uZmlncy1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmM3N2FiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcy10YXJnZXQtY29uZmlncy1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0Q3Jvc3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TaW1wbGUuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtYWxsLW5pbmphLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC1hbGwtbmluamEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC1hbGwtbmluamEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtYWxsLW5pbmphLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1YTM1NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtYWxsLW5pbmphLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ2FsbDphbGwnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtY2xlYW4tYnVpbGQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtYWxsLWNsZWFuLWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtY2xlYW4tYnVpbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtY2xlYW4tYnVpbGQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzUyOGRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC1jbGVhbi1idWlsZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdjbGVhbjphbGwnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtdGFyZ2V0LW5pbmphLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC10YXJnZXQtbmluamEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC10YXJnZXQtbmluamEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNGJjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ3NpbXBsZXN0YXRpYzphbGwnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNzc3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1kZWJ1Zy10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtZGVidWctdGFyZ2V0LW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YTczNWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtZGVidWctdGFyZ2V0LW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzIgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYWxsLWJ1aWxkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYWxsLWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWFsbC1idWlsZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYWxsLWJ1aWxkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4YjQ2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWFsbC1idWlsZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdhbGw6UmVsV2l0aERlYkluZm8nJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLWJ1aWxkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtY2xlYW4tYnVpbGQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtY2xlYW4tYnVpbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLWJ1aWxkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlZWYyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLWJ1aWxkLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ2NsZWFuOlJlbFdpdGhEZWJJbmZvJyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC10YXJnZXQtbmluamEtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC10YXJnZXQtbmluamEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC10YXJnZXQtbmluamEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFmZTllCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ3NpbXBsZXN0YXRpYzpSZWxXaXRoRGViSW5mbyckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1YjcwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2ltcGxlLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlU3ViZGlyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVTdWJkaXIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NTRhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlU3ViZGlyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNCBAQAorYWRkX2xpYnJhcnkoc2ltcGxlb2JqIE9CSkVDVCAuLi9lbXB0eS5jKQorYWRkX2V4ZWN1dGFibGUoc2ltcGxlZXhlIC4uL21haW4uYyAkPFRBUkdFVF9PQkpFQ1RTOnNpbXBsZW9iaj4pCithZGRfbGlicmFyeShzaW1wbGVzaGFyZWQgU0hBUkVEIC4uL3NpbXBsZWxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNpbXBsZWV4ZSBQUklWQVRFIHNpbXBsZXNoYXJlZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvV3JpdGVGaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Xcml0ZUZpbGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2ODFhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvV3JpdGVGaWxlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoV1JJVEUgIiR7T1VUUFVUX0ZJTEV9IiAiR2VuZXggY29uZmlnOiAke0dFTkVYX0NPTkZJR31cbklOVERJUiBjb25maWc6ICR7SU5URElSX0NPTkZJR31cbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2JhZG1vYy5jIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9iYWRtb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM4ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9iYWRtb2MuYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBwcmludGYoIkJhZE1vYyBDb25maWd1cmF0aW9uOiAiIENPTkZJRyAiXG4iKTsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2VtcHR5LmMgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9nZW5lcmF0b3IuYyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZ2VuZXJhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1ZWUyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZ2VuZXJhdG9yLmMKQEAgLTAsMCArMSwxMDEgQEAKKyNpbmNsdWRlIDxnZW5leF9jb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyojaW5jbHVkZSA8aW50ZGlyX2NvbmZpZy5oPiovCisKK2NvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfZGVmaW5pdGlvbih2b2lkKTsKK2NvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfaW5jbHVkZV9kaXIodm9pZCk7Citjb25zdCBjaGFyKiBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24odm9pZCk7Citjb25zdCBjaGFyKiBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2luY2x1ZGVfZGlyKHZvaWQpOworCitzdGF0aWMgY29uc3QgY2hhciBjb250ZW50c1tdID0KKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworIiNpbmNsdWRlIDxzdGRpby5oPlxuIgorIlxuIgorIiNpbmNsdWRlIDxnZW5leF9jb25maWcuaD5cbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiNpbmNsdWRlIDxpbnRkaXJfY29uZmlnLmg+XG4iKi8KKyJcbiIKKyJjb25zdCBjaGFyKiBnZW5lcmF0b3JsaWJfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24odm9pZCk7XG4iCisiY29uc3QgY2hhciogZ2VuZXJhdG9ybGliX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2Rpcih2b2lkKTtcbiIKKyJjb25zdCBjaGFyKiBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24odm9pZCk7XG4iCisiY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2Rpcih2b2lkKTtcbiIKKyJcbiIKKyJpbnQgbWFpbih2b2lkKVxuIgorIntcbiIKKyIgIHByaW50ZihcbiIKKyIgICAgXCJHZW5lcmF0b3IgZ2VuZXggY29uZmlnIGRlZmluaXRpb246ICIKKyAgR0VORVhfQ09ORklHX0RFRklOSVRJT04gIlxcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0b3IgSU5URElSIGNvbmZpZyBkZWZpbml0aW9uOiAiCisgIElOVERJUl9DT05GSUdfREVGSU5JVElPTiAiXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRvciBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6ICIKKyAgR0VORVhfQ09ORklHX0lOQ0xVREVfRElSICJcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdG9yIElOVERJUiBjb25maWcgaW5jbHVkZSBkaXI6ICIKKyAgSU5URElSX0NPTkZJR19JTkNMVURFX0RJUiAiXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiAlc1xcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0b3IgbGlicmFyeSBJTlRESVIgY29uZmlnIGRlZmluaXRpb246ICVzXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogJXNcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdG9yIGxpYnJhcnkgSU5URElSIGNvbmZpZyBpbmNsdWRlIGRpcjogJXNcXG5cIlxuIiovCisiICAgIFwiR2VuZXJhdG9yIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogJXNcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdG9yIG9iamVjdCBJTlRESVIgY29uZmlnIGRlZmluaXRpb246ICVzXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiAlc1xcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0b3Igb2JqZWN0IElOVERJUiBjb25maWcgaW5jbHVkZSBkaXI6ICVzXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRlZCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogXCIiCisgICIgR0VORVhfQ09ORklHX0RFRklOSVRJT04gXCJcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdGVkIElOVERJUiBjb25maWcgZGVmaW5pdGlvbjogXCIiCisgICIgSU5URElSX0NPTkZJR19ERUZJTklUSU9OIFwiXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRlZCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFwiIgorICAiIEdFTkVYX0NPTkZJR19JTkNMVURFX0RJUiBcIlxcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0ZWQgSU5URElSIGNvbmZpZyBpbmNsdWRlIGRpcjogXCIiCisgICIgSU5URElSX0NPTkZJR19JTkNMVURFX0RJUiBcIlxcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogJSVzXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRlZCBsaWJyYXJ5IElOVERJUiBjb25maWcgZGVmaW5pdGlvbjogJSVzXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRlZCBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogJSVzXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRlZCBsaWJyYXJ5IElOVERJUiBjb25maWcgaW5jbHVkZSBkaXI6ICUlc1xcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiAlJXNcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdGVkIG9iamVjdCBJTlRESVIgY29uZmlnIGRlZmluaXRpb246ICUlc1xcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogJSVzXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRlZCBvYmplY3QgSU5URElSIGNvbmZpZyBpbmNsdWRlIGRpcjogJSVzXFxuXCJcbiIqLworIiAgICAsIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfZGVmaW5pdGlvbigpXG4iCisiICAgICwgZ2VuZXJhdG9ybGliX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2RpcigpXG4iCisiICAgICwgZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKClcbiIKKyIgICAgLCBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2luY2x1ZGVfZGlyKCkpO1xuIgorIiAgcmV0dXJuIDA7XG4iCisifVxuIjsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIGNvbnN0IGNoYXIqIGZpbGVuYW1lOworICBGSUxFKiBmb3V0OworCisgIGlmIChhcmdjIDwgMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAxOworICB9CisKKyAgZmlsZW5hbWUgPSBhcmd2WzFdOworICBpZiAoIShmb3V0ID0gZm9wZW4oZmlsZW5hbWUsICJ3IikpKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZ1xuIiwgZmlsZW5hbWUpOworICAgIHJldHVybiAxOworICB9CisgIGZwcmludGYoZm91dCwgY29udGVudHMsIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfZGVmaW5pdGlvbigpLAorICAgICAgICAgIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfaW5jbHVkZV9kaXIoKSwKKyAgICAgICAgICBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24oKSwKKyAgICAgICAgICBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2luY2x1ZGVfZGlyKCkpOworICBmY2xvc2UoZm91dCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2dlbmVyYXRvcmxpYi5jIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9nZW5lcmF0b3JsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTVjOGYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9nZW5lcmF0b3JsaWIuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSA8Z2VuZXhfY29uZmlnLmg+CisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiNpbmNsdWRlIDxpbnRkaXJfY29uZmlnLmg+Ki8KKworY29uc3QgY2hhciogZ2VuZXJhdG9ybGliX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKHZvaWQpCit7CisgIHJldHVybiBHRU5FWF9DT05GSUdfREVGSU5JVElPTjsKK30KKworY29uc3QgY2hhciogZ2VuZXJhdG9ybGliX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2Rpcih2b2lkKQoreworICByZXR1cm4gR0VORVhfQ09ORklHX0lOQ0xVREVfRElSOworfQorCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKmNvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9pbnRkaXJfY29uZmlnX2RlZmluaXRpb24odm9pZCkKK3sKKyAgcmV0dXJuIElOVERJUl9DT05GSUdfREVGSU5JVElPTjsKK30KKworY29uc3QgY2hhciogZ2VuZXJhdG9ybGliX2ludGRpcl9jb25maWdfaW5jbHVkZV9kaXIodm9pZCkKK3sKKyAgcmV0dXJuIElOVERJUl9DT05GSUdfSU5DTFVERV9ESVI7Cit9Ki8KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZ2VuZXJhdG9yb2JqLmMgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2dlbmVyYXRvcm9iai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjVhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2dlbmVyYXRvcm9iai5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlIDxnZW5leF9jb25maWcuaD4KKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qI2luY2x1ZGUgPGludGRpcl9jb25maWcuaD4qLworCitjb25zdCBjaGFyKiBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24odm9pZCkKK3sKKyAgcmV0dXJuIEdFTkVYX0NPTkZJR19ERUZJTklUSU9OOworfQorCitjb25zdCBjaGFyKiBnZW5lcmF0b3JvYmpfZ2VuZXhfY29uZmlnX2luY2x1ZGVfZGlyKHZvaWQpCit7CisgIHJldHVybiBHRU5FWF9DT05GSUdfSU5DTFVERV9ESVI7Cit9CisKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2ludGRpcl9jb25maWdfZGVmaW5pdGlvbih2b2lkKQoreworICByZXR1cm4gSU5URElSX0NPTkZJR19ERUZJTklUSU9OOworfQorCitjb25zdCBjaGFyKiBnZW5lcmF0b3JvYmpfaW50ZGlyX2NvbmZpZ19pbmNsdWRlX2Rpcih2b2lkKQoreworICByZXR1cm4gSU5URElSX0NPTkZJR19JTkNMVURFX0RJUjsKK30qLwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg4ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9tYWluLmMKQEAgLTAsMCArMSw0IEBACitpbnQgbWFpbih2b2lkKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvbWFpbi5jdSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNiOWIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9tYWluLmN1CkBAIC0wLDAgKzEsMTUgQEAKKworI2luY2x1ZGUgPGN1ZGEuaD4KKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjZW5kaWYKKworSU1QT1JUIGludCBzaW1wbGVsaWIoKTsKKworaW50IG1haW4odm9pZCkKK3sKKyAgcmV0dXJuIHNpbXBsZWxpYigpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9xdDUuY3h4IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9xdDUuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MjIyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3F0NS5jeHgKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICBRQ29yZUFwcGxpY2F0aW9uIGFwcChhcmdjLCBhcmd2KTsKKyAgcmV0dXJuIGFwcC5leGVjKCk7Cit9CisKKyNpbmNsdWRlICJtb2NfcXQ1LmNwcCIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvcXQ1LmggYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3F0NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjViOTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3F0NS5oCkBAIC0wLDAgKzEsNSBAQAorI2luY2x1ZGUgPFFPYmplY3Q+CitjbGFzcyBRQnVmZmVyIDogcHVibGljIFFPYmplY3QKK3sKKyAgUV9PQkpFQ1QKK307CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3NpbXBsZWxpYi5jIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9zaW1wbGVsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmZmOTIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9zaW1wbGVsaWIuYwpAQCAtMCwwICsxLDYgQEAKKyNpZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIHZvaWQgc2ltcGxlbGliKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3NpbXBsZWxpYi5jdSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvc2ltcGxlbGliLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzA4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3NpbXBsZWxpYi5jdQpAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxjdWRhLmg+CisKKyNpZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBzaW1wbGVsaWIoKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1BhcnNlSW1wbGljaXREYXRhL21pbmd3Lm9yZy1DLUdOVS00LjkuMy5pbnB1dCBiL1Rlc3RzL1J1bkNNYWtlL1BhcnNlSW1wbGljaXREYXRhL21pbmd3Lm9yZy1DLUdOVS00LjkuMy5pbnB1dAppbmRleCA4MWU5ZWUwLi5iMWM0Y2UwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9QYXJzZUltcGxpY2l0RGF0YS9taW5ndy5vcmctQy1HTlUtNC45LjMuaW5wdXQKKysrIGIvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUMtR05VLTQuOS4zLmlucHV0CkBAIC01Myw3ICs1Myw3IEBACiBDT0xMRUNUX0dDQ19PUFRJT05TPSctdicgJy1vJyAnQ01ha2VGaWxlc1xjbVRDX2FiMDk3LmRpclxDTWFrZUNDb21waWxlckFCSS5jLm9iaicgJy1jJyAnLW10dW5lPWdlbmVyaWMnICctbWFyY2g9aTU4NicKIExpbmtpbmcgQyBleGVjdXRhYmxlIGNtVENfYWIwOTcuZXhlCiAiQzpcQ01ha2VcYmluXGNtYWtlLmV4ZSIgLUUgY21ha2VfbGlua19zY3JpcHQgQ01ha2VGaWxlc1xjbVRDX2FiMDk3LmRpclxsaW5rLnR4dCAtLXZlcmJvc2U9MQotIkM6XENNYWtlXGJpblxjbWFrZS5leGUiIC1FIHJlbW92ZSAtZiBDTWFrZUZpbGVzXGNtVENfYWIwOTcuZGlyL29iamVjdHMuYQorIkM6XENNYWtlXGJpblxjbWFrZS5leGUiIC1FIHJtIC1mIENNYWtlRmlsZXNcY21UQ19hYjA5Ny5kaXIvb2JqZWN0cy5hCiBDOlxEb2VzTm90RXhpc3RcTWluR1dcYmluXGFyLmV4ZSBjciBDTWFrZUZpbGVzXGNtVENfYWIwOTcuZGlyL29iamVjdHMuYSBAQ01ha2VGaWxlc1xjbVRDX2FiMDk3LmRpclxvYmplY3RzMS5yc3AKIEM6XERvZXNOb3RFeGlzdFxNaW5HV1xiaW5cZ2NjLmV4ZSAgLXYgICAgLVdsLC0td2hvbGUtYXJjaGl2ZSBDTWFrZUZpbGVzXGNtVENfYWIwOTcuZGlyL29iamVjdHMuYSAtV2wsLS1uby13aG9sZS1hcmNoaXZlICAtbyBjbVRDX2FiMDk3LmV4ZSAtV2wsLS1vdXQtaW1wbGliLGxpYmNtVENfYWIwOTcuZGxsLmEgLVdsLC0tbWFqb3ItaW1hZ2UtdmVyc2lvbiwwLC0tbWlub3ItaW1hZ2UtdmVyc2lvbiwwCiBVc2luZyBidWlsdC1pbiBzcGVjcy4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1BhcnNlSW1wbGljaXREYXRhL21pbmd3Lm9yZy1DWFgtR05VLTQuOS4zLmlucHV0IGIvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUNYWC1HTlUtNC45LjMuaW5wdXQKaW5kZXggY2Q3NzM0MC4uYWFlNjdiYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUNYWC1HTlUtNC45LjMuaW5wdXQKKysrIGIvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUNYWC1HTlUtNC45LjMuaW5wdXQKQEAgLTU5LDcgKzU5LDcgQEAKIENPTExFQ1RfR0NDX09QVElPTlM9Jy12JyAnLW8nICdDTWFrZUZpbGVzXGNtVENfMmI3OTAuZGlyXENNYWtlQ1hYQ29tcGlsZXJBQkkuY3BwLm9iaicgJy1jJyAnLXNoYXJlZC1saWJnY2MnICctbXR1bmU9Z2VuZXJpYycgJy1tYXJjaD1pNTg2JwogTGlua2luZyBDWFggZXhlY3V0YWJsZSBjbVRDXzJiNzkwLmV4ZQogIkM6XENNYWtlXGJpblxjbWFrZS5leGUiIC1FIGNtYWtlX2xpbmtfc2NyaXB0IENNYWtlRmlsZXNcY21UQ18yYjc5MC5kaXJcbGluay50eHQgLS12ZXJib3NlPTEKLSJDOlxDTWFrZVxiaW5cY21ha2UuZXhlIiAtRSByZW1vdmUgLWYgQ01ha2VGaWxlc1xjbVRDXzJiNzkwLmRpci9vYmplY3RzLmEKKyJDOlxDTWFrZVxiaW5cY21ha2UuZXhlIiAtRSBybSAtZiBDTWFrZUZpbGVzXGNtVENfMmI3OTAuZGlyL29iamVjdHMuYQogQzpcRG9lc05vdEV4aXN0XE1pbkdXXGJpblxhci5leGUgY3IgQ01ha2VGaWxlc1xjbVRDXzJiNzkwLmRpci9vYmplY3RzLmEgQENNYWtlRmlsZXNcY21UQ18yYjc5MC5kaXJcb2JqZWN0czEucnNwCiBDOlxEb2VzTm90RXhpc3RcTWluR1dcYmluXGcrKy5leGUgIC12ICAgIC1XbCwtLXdob2xlLWFyY2hpdmUgQ01ha2VGaWxlc1xjbVRDXzJiNzkwLmRpci9vYmplY3RzLmEgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSAgLW8gY21UQ18yYjc5MC5leGUgLVdsLC0tb3V0LWltcGxpYixsaWJjbVRDXzJiNzkwLmRsbC5hIC1XbCwtLW1ham9yLWltYWdlLXZlcnNpb24sMCwtLW1pbm9yLWltYWdlLXZlcnNpb24sMAogVXNpbmcgYnVpbHQtaW4gc3BlY3MuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9EaXNhYmxlZFBjaC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL0Rpc2FibGVkUGNoLWNoZWNrLmNtYWtlCmluZGV4IDQ5NGJjZjcuLmNjNzE5YmUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL0Rpc2FibGVkUGNoLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL0Rpc2FibGVkUGNoLWNoZWNrLmNtYWtlCkBAIC0xLDQgKzEsNyBAQAogc2V0KGZvb19wY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb28uZGlyL2NtYWtlX3BjaC5oIikKK2lmIChSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBzZXQoZm9vX3BjaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL2Zvby5kaXIvRGVidWcvY21ha2VfcGNoLmgiKQorZW5kaWYoKQogc2V0KGZvb2Jhcl9wY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb29iYXIuZGlyL2NtYWtlX3BjaC5oIikKIAogaWYgKE5PVCBFWElTVFMgJHtmb29fcGNoX2hlYWRlcn0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hEZWJ1Z0dlbmV4LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoRGVidWdHZW5leC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjk0ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoRGVidWdHZW5leC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitpZiAoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIHJldHVybigpCitlbmRpZigpCisKK3NldChmb29fcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vLmRpci9EZWJ1Zy9jbWFrZV9wY2guaCIpCisKK2lmIChOT1QgRVhJU1RTICR7Zm9vX3BjaF9oZWFkZXJ9KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBmb28gcGNoIGhlYWRlciAke2Zvb19wY2hfaGVhZGVyfSBkb2VzIG5vdCBleGlzdCIpCisgIHJldHVybigpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAke2Zvb19wY2hfaGVhZGVyfSBmb29fcGNoX2hlYWRlcl9zdHJpbmdzKQorCitpZiAoTk9UIGZvb19wY2hfaGVhZGVyX3N0cmluZ3MgTUFUQ0hFUyAiOyNpbmNsdWRlIFwiW15cIl0qUHJlY29tcGlsZUhlYWRlcnMvaW5jbHVkZS9mb28uaFwiOyNpbmNsdWRlIDxzdGRpby5oPig7fCQpIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgZm9vIHBjaCBoZWFkZXJcbiAgJHtmb29fcGNoX2hlYWRlcn1cbmhhcyBiYWQgY29udGVudDpcbiAgJHtmb29fcGNoX2hlYWRlcl9zdHJpbmdzfSIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hEZWJ1Z0dlbmV4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoRGVidWdHZW5leC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQ2ODlmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoRGVidWdHZW5leC5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorcHJvamVjdChQY2hEZWJ1Z0dlbmV4IEMpCisKK2FkZF9saWJyYXJ5KGZvbyBmb28uYykKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGZvbyBQVUJMSUMgaW5jbHVkZSkKK3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMoZm9vIFBVQkxJQworICAiJDwkPENPTkZJRzpEZWJ1Zz46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUvZm9vLmg+IgorICA8c3RkaW8uaD4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaEludGVyZmFjZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaEludGVyZmFjZS1jaGVjay5jbWFrZQppbmRleCA0ZTYyYjgxLi4yOGM2YmE0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hJbnRlcmZhY2UtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoSW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0xLDUgKzEsOSBAQAogc2V0KGZvb19wY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb28uZGlyL2NtYWtlX3BjaC5oIikKIHNldChmb29iYXJfcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vYmFyLmRpci9jbWFrZV9wY2guaCIpCitpZiAoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KGZvb19wY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb28uZGlyL0RlYnVnL2NtYWtlX3BjaC5oIikKKyAgc2V0KGZvb2Jhcl9wY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb29iYXIuZGlyL0RlYnVnL2NtYWtlX3BjaC5oIikKK2VuZGlmKCkKIAogaWYgKE5PVCBFWElTVFMgJHtmb29fcGNoX2hlYWRlcn0pCiAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIGZvbyBwY2ggaGVhZGVyICR7Zm9vX3BjaF9oZWFkZXJ9IGRvZXMgbm90IGV4aXN0IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaE11bHRpbGFuZ3VhZ2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hNdWx0aWxhbmd1YWdlLWNoZWNrLmNtYWtlCmluZGV4IGNjMDFlY2IuLjE2OTYwMzcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaE11bHRpbGFuZ3VhZ2UtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoTXVsdGlsYW5ndWFnZS1jaGVjay5jbWFrZQpAQCAtMSw1ICsxLDkgQEAKIHNldChmb29iYXJfcGNoX2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb29iYXIuZGlyL2NtYWtlX3BjaC5oIikKIHNldChmb29iYXJfcGNoX2h4eF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL2Zvb2Jhci5kaXIvY21ha2VfcGNoLmh4eCIpCitpZiAoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KGZvb2Jhcl9wY2hfaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL2Zvb2Jhci5kaXIvRGVidWcvY21ha2VfcGNoLmgiKQorICBzZXQoZm9vYmFyX3BjaF9oeHhfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb29iYXIuZGlyL0RlYnVnL2NtYWtlX3BjaC5oeHgiKQorZW5kaWYoKQogCiBpZiAoTk9UIEVYSVNUUyAke2Zvb2Jhcl9wY2hfaF9oZWFkZXJ9KQogICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBmb29iYXIgQyBwY2ggaGVhZGVyICR7Zm9vYmFyX3BjaF9oX2hlYWRlcn0gZG9lcyBub3QgZXhpc3QiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoUHJvbG9ndWVFcGlsb2d1ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFByb2xvZ3VlRXBpbG9ndWUtY2hlY2suY21ha2UKaW5kZXggOTAxODY2NC4uZjE1MDRhNyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoUHJvbG9ndWVFcGlsb2d1ZS1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hQcm9sb2d1ZUVwaWxvZ3VlLWNoZWNrLmNtYWtlCkBAIC0xLDQgKzEsNyBAQAogc2V0KG1haW5fcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvbWFpbi5kaXIvY21ha2VfcGNoLmh4eCIpCitpZiAoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KG1haW5fcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvbWFpbi5kaXIvRGVidWcvY21ha2VfcGNoLmh4eCIpCitlbmRpZigpCiAKIGZpbGUoU1RSSU5HUyAke21haW5fcGNoX2hlYWRlcn0gbWFpbl9wY2hfaGVhZGVyX3N0cmluZ3MpCiBzdHJpbmcoUkVHRVggTUFUQ0ggIiNwcmFnbWEgd2FybmluZ1xcKHB1c2gsIDBcXCkuKiNpbmNsdWRlLipwY2guaC4qI3ByYWdtYSB3YXJuaW5nXFwocG9wXFwpIiBtYXRjaGVkX2NvZGUgJHttYWluX3BjaF9oZWFkZXJfc3RyaW5nc30pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFdhcm5JbnZhbGlkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlN2ZiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIyIEBACitpZiAoTk9UIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VfEludGVsIiBPUgorICAgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkludGVsIiBBTkQgQ01BS0VfSE9TVF9XSU4zMikpCisgIHJldHVybigpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY29tcGlsZV9jb21tYW5kcy5qc29uIGVtcHR5X2Rpcl9jb21tYW5kcworICAgICBSRUdFWCAiY29tbWFuZC4qLVdpbnZhbGlkLXBjaC4qZW1wdHkuZGlyL2NtYWtlX3BjaC5oIikKK2ZpbGUoU1RSSU5HUyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY29tcGlsZV9jb21tYW5kcy5qc29uIGZvb19kaXJfY29tbWFuZHMKKyAgICAgUkVHRVggImNvbW1hbmQuKi1XaW52YWxpZC1wY2guKmZvby5kaXIvY21ha2VfcGNoLmgiKQorCitsaXN0KExFTkdUSCBlbXB0eV9kaXJfY29tbWFuZHMgZW1wdHlfZGlyX2NvbW1hbmRzX3NpemUpCitsaXN0KExFTkdUSCBmb29fZGlyX2NvbW1hbmRzIGZvb19kaXJfY29tbWFuZHNfc2l6ZSkKKworaWYgKGVtcHR5X2Rpcl9jb21tYW5kc19zaXplIEVRVUFMIDApCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiZW1wdHkgdGFyZ2V0IHNob3VsZCBoYXZlIC1XaW52YWxpZC1wY2ggY29tcGlsZSBvcHRpb24gcHJlc2VudCIpCisgIHJldHVybigpCitlbmRpZigpCisKK2lmIChmb29fZGlyX2NvbW1hbmRzX3NpemUgR1JFQVRFUiAwKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImZvbyB0YXJnZXQgc2hvdWxkIG5vdCBoYXZlIC1XaW52YWxpZC1wY2ggY29tcGlsZSBvcHRpb24gcHJlc2VudCIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFdhcm5JbnZhbGlkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjU2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTIE9OKQorCithZGRfbGlicmFyeShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyhlbXB0eSBQVUJMSUMKKyAgPHN0ZGlvLmg+CisgIDxzdHJpbmcuaD4KKykKKworYWRkX2xpYnJhcnkoZm9vIGZvby5jKQordGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyhmb28gUFVCTElDCisgIDxzdGRpby5oPgorICA8c3RyaW5nLmg+CispCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZm9vIFBST1BFUlRJRVMgUENIX1dBUk5fSU5WQUxJRCBPRkYpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOGQyZjRmOS4uM2Y2ODRmYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTMsNiArMTMsNyBAQAogZW5kZnVuY3Rpb24oKQogCiBydW5fY21ha2UoRGlzYWJsZWRQY2gpCitydW5fY21ha2UoUGNoRGVidWdHZW5leCkKIHJ1bl90ZXN0KFBjaEludGVyZmFjZSkKIHJ1bl9jbWFrZShQY2hQcm9sb2d1ZUVwaWxvZ3VlKQogcnVuX3Rlc3QoU2tpcFByZWNvbXBpbGVIZWFkZXJzKQpAQCAtMjAsMyArMjEsNiBAQAogcnVuX3Rlc3QoUGNoUmV1c2VGcm9tUHJlZml4ZWQpCiBydW5fdGVzdChQY2hSZXVzZUZyb21TdWJkaXIpCiBydW5fY21ha2UoUGNoTXVsdGlsYW5ndWFnZSkKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJNYWtlfE5pbmphIikKKyAgcnVuX2NtYWtlKFBjaFdhcm5JbnZhbGlkKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUnVuQ01ha2UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQppbmRleCBkYTRkMWU1Li5jYjIwZmIxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQpAQCAtMTQ2LDYgKzE0NiwxMiBAQAogICAgICJ8Y2xhbmdbXjpdKjogd2FybmluZzogdGhlIG9iamVjdCBzaXplIHNhbml0aXplciBoYXMgbm8gZWZmZWN0IGF0IC1PMCwgYnV0IGlzIGV4cGxpY2l0bHkgZW5hYmxlZDoiCiAgICAgInxFcnJvciBrc3RhdCByZXR1cm5lZCIKICAgICAifEhpdCB4Y29kZWJ1aWxkIGJ1ZyIKKworICAgICJ8TElDRU5TRSBXQVJOSU5HOiIKKyAgICAifFlvdXIgbGljZW5zZSB0byB1c2UgUEdJW15cbl0qZXhwaXJlZCIKKyAgICAifFBsZWFzZSBvYnRhaW4gYSBuZXcgdmVyc2lvbiBhdCIKKyAgICAifGNvbnRhY3QgUEdJIFNhbGVzIGF0IgorCiAgICAgInxbXlxuXSp4Y29kZWJ1aWxkW15cbl0qd2FybmluZzogZmlsZSB0eXBlW15cbl0qaXMgYmFzZWQgb24gbWlzc2luZyBmaWxlIHR5cGUiCiAgICAgInxbXlxuXSppcyBhIG1lbWJlciBvZiBtdWx0aXBsZSBncm91cHMiCiAgICAgInxbXlxuXSpmcm9tIFRpbWUgTWFjaGluZSBieSBwYXRoIgpAQCAtMjA0LDUgKzIxMCwyOCBAQAogICBydW5fY21ha2UoJHt0ZXN0fSkKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24oZW5zdXJlX2ZpbGVzX21hdGNoIGV4cGVjdGVkX2ZpbGUgYWN0dWFsX2ZpbGUpCisgIGlmKE5PVCBFWElTVFMgIiR7ZXhwZWN0ZWRfZmlsZX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkV4cGVjdGVkIGZpbGUgZG9lcyBub3QgZXhpc3Q6XG4gICR7ZXhwZWN0ZWRfZmlsZX0iKQorICBlbmRpZigpCisgIGlmKE5PVCBFWElTVFMgIiR7YWN0dWFsX2ZpbGV9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJBY3R1YWwgZmlsZSBkb2VzIG5vdCBleGlzdDpcbiAgJHthY3R1YWxfZmlsZX0iKQorICBlbmRpZigpCisgIGZpbGUoUkVBRCAiJHtleHBlY3RlZF9maWxlfSIgZXhwZWN0ZWRfZmlsZV9jb250ZW50KQorICBmaWxlKFJFQUQgIiR7YWN0dWFsX2ZpbGV9IiBhY3R1YWxfZmlsZV9jb250ZW50KQorICBpZihOT1QgIiR7ZXhwZWN0ZWRfZmlsZV9jb250ZW50fSIgU1RSRVFVQUwgIiR7YWN0dWFsX2ZpbGVfY29udGVudH0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkFjdHVhbCBmaWxlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQ6XG4KKyAgICBcbgorICAgICAgZXhwZWN0ZWQgZmlsZTogJHtleHBlY3RlZF9maWxlfVxuCisgICAgICBleHBlY3RlZCBjb250ZW50OlxuCisgICAgICAke2V4cGVjdGVkX2ZpbGVfY29udGVudH1cbgorICAgIFxuCisgICAgICBhY3R1YWwgZmlsZTogJHthY3R1YWxfZmlsZX1cbgorICAgICAgYWN0dWFsIGNvbnRlbnQ6XG4KKyAgICAgICR7YWN0dWFsX2ZpbGVfY29udGVudH1cbgorICAgICIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKwogIyBQcm90ZWN0IFJ1bkNNYWtlIHRlc3RzIGZyb20gY2FsbGluZyBlbnZpcm9ubWVudC4KIHVuc2V0KEVOVntNQUtFRkxBR1N9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUnVudGltZVBhdGgvUmVsYXRpdmUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SZWxhdGl2ZS5jbWFrZQppbmRleCAyMDMyNDFmLi44MGVkMTg5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SZWxhdGl2ZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SZWxhdGl2ZS5jbWFrZQpAQCAtMSw1ICsxLDEyIEBACiBlbmFibGVfbGFuZ3VhZ2UoQykKIAorc2V0KGNmZ191cCkKK3NldChjZmdfc2xhc2ggLykKK2lmKGNmZ19kaXIpCisgIHNldChjZmdfdXAgLy4uKQorICBzZXQoY2ZnX3NsYXNoKQorZW5kaWYoKQorCiBpZihOT1QgQ01BS0VfU0hBUkVEX0xJQlJBUllfUlBBVEhfT1JJR0lOX1RPS0VOKQogICBpZihDTUFLRV9DX1BMQVRGT1JNX0lEIFNUUkVRVUFMICJMaW51eCIpCiAgICAgIyBTYW5pdHkgY2hlY2sgZm9yIHBsYXRmb3JtIHRoYXQgaXMgZGVmaW5pdGVseSBrbm93biB0byBzdXBwb3J0ICRPUklHSU4uCkBAIC00NSwyNSArNTIsMjUgQEAKIGFkZF9leGVjdXRhYmxlKG1haW4tbm9yZWwgbWFpbi5jKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1haW4tbm9yZWwgdXRpbHMpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG1haW4tbm9yZWwgUFJPUEVSVFkgQlVJTERfUlBBVEhfVVNFX09SSUdJTiBPRkYpCi1DaGVja1JwYXRoKG1haW4tbm9yZWwgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIpCitDaGVja1JwYXRoKG1haW4tbm9yZWwgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Y2ZnX2Rpcn0iKQogCiBhZGRfZXhlY3V0YWJsZShtYWluc3ViIG1haW4uYykKIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYWluc3ViIHV0aWxzKQogc2V0X3Byb3BlcnR5KFRBUkdFVCBtYWluc3ViIFBST1BFUlRZIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQotQ2hlY2tScGF0aChtYWluc3ViICJcJE9SSUdJTi8uLi8iKQorQ2hlY2tScGF0aChtYWluc3ViICJcJE9SSUdJTiR7Y2ZnX3VwfS8uLiR7Y2ZnX2Rpcn0ke2NmZ19zbGFzaH0iKQogCiBhZGRfZXhlY3V0YWJsZShtYWluLXN1YiBtYWluLmMpCiB0YXJnZXRfbGlua19saWJyYXJpZXMobWFpbi1zdWIgdXRpbHMtc3ViKQotQ2hlY2tScGF0aChtYWluLXN1YiAiXCRPUklHSU4vbGlicyIpCitDaGVja1JwYXRoKG1haW4tc3ViICJcJE9SSUdJTiR7Y2ZnX3VwfS9saWJzJHtjZmdfZGlyfSIpCiAKIGFkZF9leGVjdXRhYmxlKG1haW5zdWItc3ViIG1haW4uYykKIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYWluc3ViLXN1YiB1dGlscy1zdWIpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG1haW5zdWItc3ViIFBST1BFUlRZIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQotQ2hlY2tScGF0aChtYWluc3ViLXN1YiAiXCRPUklHSU4vLi4vbGlicyIpCitDaGVja1JwYXRoKG1haW5zdWItc3ViICJcJE9SSUdJTiR7Y2ZnX3VwfS8uLi9saWJzJHtjZmdfZGlyfSIpCiAKIGlmKGV4dGVybkRpcikKICAgIyBCaW5hcmllcyBsaW5raW5nIHRvIGxpYnJhcmllcyBvdXRzaWRlIHRoZSBidWlsZCB0cmVlIHNob3VsZCBoYXZlIGFuIGFic29sdXRlIFJQQVRILgogICBhZGRfZXhlY3V0YWJsZShtYWluLWV4dGVybiBtYWluLmMpCiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYWluLWV4dGVybiB1dGlscy1leHRlcm4pCi0gIENoZWNrUnBhdGgobWFpbi1leHRlcm4gIiR7ZXh0ZXJuRGlyfSIpCisgIENoZWNrUnBhdGgobWFpbi1leHRlcm4gIiR7ZXh0ZXJuRGlyfSR7Y2ZnX2Rpcn0iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUnVudGltZVBhdGgvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvUnVudGltZVBhdGgvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDRjOWRkY2QuLmFkNDQ2ZTkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTYsNyArNiw5IEBACiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke25hbWV9LWJ1aWxkKQogICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQogICBpZihOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKLSAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EY2ZnX2Rpcj0gLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnKQorICBlbHNlKCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EY2ZnX2Rpcj0vJDxDT05GSUc+KQogICBlbmRpZigpCiAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCiAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCkBAIC0xNCwxMiArMTYsMTYgQEAKICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtuYW1lfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKIGVuZGZ1bmN0aW9uKCkKIAorc2V0KGNmZ19kaXIpCitpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBzZXQoY2ZnX2RpciAvRGVidWcpCitlbmRpZigpCisKIHJ1bl9SdW50aW1lUGF0aChTeW1saW5rSW1wbGljaXQpCiBydW5fY21ha2VfY29tbWFuZChTeW1saW5rSW1wbGljaXRDaGVjawotICAke0NNQUtFX0NPTU1BTkR9IC1EZGlyPSR7UnVuQ01ha2VfQklOQVJZX0RJUn0vU3ltbGlua0ltcGxpY2l0LWJ1aWxkIC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vU3ltbGlua0ltcGxpY2l0Q2hlY2suY21ha2UpCisgICR7Q01BS0VfQ09NTUFORH0gLURkaXI9JHtSdW5DTWFrZV9CSU5BUllfRElSfS9TeW1saW5rSW1wbGljaXQtYnVpbGQgLURjZmdfZGlyPSR7Y2ZnX2Rpcn0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9TeW1saW5rSW1wbGljaXRDaGVjay5jbWFrZSkKIAogcnVuX1J1bnRpbWVQYXRoKFJlbGF0aXZlKQotIyBGSVhNRTogUnVuIFJlbGF0aXZlQ2hlY2sgKGFwcGVhcnMgdG8gYmUgYnJva2VuIGN1cnJlbnRseSkKIAogcnVuX1J1bnRpbWVQYXRoKEdlbmV4KQogcnVuX2NtYWtlX2NvbW1hbmQoR2VuZXhDaGVjawpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUnVudGltZVBhdGgvU3ltbGlua0ltcGxpY2l0Q2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9TeW1saW5rSW1wbGljaXRDaGVjay5jbWFrZQppbmRleCBkMzQ3NDJlLi40ZjUwZDRiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9TeW1saW5rSW1wbGljaXRDaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9TeW1saW5rSW1wbGljaXRDaGVjay5jbWFrZQpAQCAtMSwyICsxLDIgQEAKLWZpbGUoQ09QWSAke2Rpcn0vYmluL2V4ZSBERVNUSU5BVElPTiAke2Rpcn0pCitmaWxlKENPUFkgJHtkaXJ9L2JpbiR7Y2ZnX2Rpcn0vZXhlIERFU1RJTkFUSU9OICR7ZGlyfSkKIGZpbGUoUlBBVEhfQ0hBTkdFIEZJTEUgIiR7ZGlyfS9leGUiIE9MRF9SUEFUSCAiJHtkaXJ9L2xpYkxpbmsiIE5FV19SUEFUSCAib2xkLXNob3VsZC1ub3QtZXhpc3QiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3dpZnQvTC5zd2lmdCBiL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L0wuc3dpZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmZjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L0wuc3dpZnQKQEAgLTAsMCArMSBAQAorcHVibGljIGxldCBUaGlydHlUd286IEludCA9IDMyCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Td2lmdC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNDgxNzA0NS4uMWRiMjAyZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvU3dpZnQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNyw2ICs3LDE2IEBACiBlbHNlaWYoUnVuQ01ha2VfR0VORVJBVE9SIFNUUkVRVUFMIE5pbmphKQogICBpZihDTUFLRV9Td2lmdF9DT01QSUxFUikKICAgICBydW5fY21ha2UoV2luMzJFeGVjdXRhYmxlRGlzYWxsb3dlZCkKKworICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9TWVNURU1fTkFNRT1EYXJ3aW4pCisgICAgcnVuX2NtYWtlKFN3aWZ0TXVsdGlBcmNoKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgZW5kaWYoKQorZWxzZWlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEgTXVsdGktQ29uZmlnIikKKyAgaWYoQ01BS0VfU3dpZnRfQ09NUElMRVIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZSIpCisgICAgcnVuX2NtYWtlKFN3aWZ0U2ltcGxlKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKICAgZW5kaWYoKQogZWxzZSgpCiAgIHJ1bl9jbWFrZShOb3RTdXBwb3J0ZWQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRNdWx0aUFyY2gtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRNdWx0aUFyY2gtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzRiZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRNdWx0aUFyY2gtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBTd2lmdE11bHRpQXJjaC5jbWFrZTozIFwocHJvamVjdFwpOgorICBtdWx0aXBsZSB2YWx1ZXMgZm9yIENNQUtFX09TWF9BUkNISVRFQ1RVUkVTIG5vdCBzdXBwb3J0ZWQgd2l0aCBTd2lmdAorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRNdWx0aUFyY2guY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRiNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRNdWx0aUFyY2guY21ha2UKQEAgLTAsMCArMSw0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNS4xKQorc2V0KENNQUtFX09TWF9BUkNISVRFQ1RVUkVTICJhcm12Nzthcm02NDtpMzg2O3g4Nl82NCIpCitwcm9qZWN0KFN3aWZ0TXVsdGlBcmNoCisgIExBTkdVQUdFUyBTd2lmdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1N3aWZ0U2ltcGxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRTaW1wbGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyNzAyZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1N3aWZ0U2ltcGxlLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZW5hYmxlX2xhbmd1YWdlKFN3aWZ0KQorYWRkX2xpYnJhcnkoTCBMLnN3aWZ0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3ludGF4L0NvbW1hbmRFT0Ytc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1N5bnRheC9Db21tYW5kRU9GLXN0ZGVyci50eHQKaW5kZXggMzFjYmMwOC4uYjlmOGZkMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvU3ludGF4L0NvbW1hbmRFT0Ytc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9TeW50YXgvQ29tbWFuZEVPRi1zdGRlcnIudHh0CkBAIC0xLDQgKzEsNCBAQAotXkNNYWtlIEVycm9yIGluIENvbW1hbmRFT0YuY21ha2U6CiteQ01ha2UgRXJyb3IgYXQgQ29tbWFuZEVPRi5jbWFrZToxOgogICBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLgogCiAgIFBhcnNlIGVycm9yLiAgRnVuY3Rpb24gbWlzc2luZyBvcGVuaW5nICJcKCIuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9Qb2xpY3lMaXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9Qb2xpY3lMaXN0LXN0ZGVyci50eHQKaW5kZXggNmQ3MmZhYy4uOWExZTAyNyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvUG9saWN5TGlzdC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFBvbGljaWVzL1BvbGljeUxpc3Qtc3RkZXJyLnR4dApAQCAtMjgsNiArMjgsNyBAQAogICAgXCogQ01QMDA4MQogICAgXCogQ01QMDA4MwogICAgXCogQ01QMDA5NQorICAgXCogQ01QMDA5OQogCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTlkNDAzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvRGVwcmVjYXRpb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvRGVwcmVjYXRpb24tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWE0Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9EZXByZWNhdGlvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBEZXByZWNhdGlvblwuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIFRoZSBsaWJyYXJ5IHRoYXQgaXMgYmVpbmcgbGlua2VkIHRvLCB0ZXN0TGliRGVwcmVjYXRpb24sIGlzIG1hcmtlZCBhcyBiZWluZworICBkZXByZWNhdGVkIGJ5IHRoZSBvd25lclwuICBUaGUgbWVzc2FnZSBwcm92aWRlZCBieSB0aGUgZGV2ZWxvcGVyIGlzOgorCisgIERlcHJlY2F0ZWQgdmVyc2lvblwuICBQbGVhc2UgdXNlIGxhdGVzdCB2ZXJzaW9uCisKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzXC4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvRGVwcmVjYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL0RlcHJlY2F0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNjEyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL0RlcHJlY2F0aW9uLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorYWRkX2xpYnJhcnkodGVzdExpYkRlcHJlY2F0aW9uIFNUQVRJQyBlbXB0eS5jcHApCitzZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RMaWJEZXByZWNhdGlvbiBQUk9QRVJUWSBERVBSRUNBVElPTiAiRGVwcmVjYXRlZCB2ZXJzaW9uLiBQbGVhc2UgdXNlIGxhdGVzdCB2ZXJzaW9uIikKKworYWRkX2V4ZWN1dGFibGUodGVzdEV4ZTEgZW1wdHkuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RFeGUxIHRlc3RMaWJEZXByZWNhdGlvbikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmMzFkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKERlcHJlY2F0aW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9lbXB0eS5jcHAgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL2VtcHR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg2ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9lbXB0eS5jcHAKQEAgLTAsMCArMSw0IEBACitpbnQgZW1wdHkoKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFNvdXJjZXMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0U291cmNlcy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggYmVlOGM0ZS4uMGQ0NjJiYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0U291cmNlcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0U291cmNlcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNiArMSw2IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCi1pZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpb3xYY29kZSIpCitpZihSdW5DTWFrZV9HRU5FUkFUT1IgU1RSRVFVQUwgIlhjb2RlIikKICAgcnVuX2NtYWtlKENvbmZpZ05vdEFsbG93ZWQpCiBlbmRpZigpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjk1ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvZm9vLmNzCkBAIC0wLDAgKzEsMyBAQAordm9pZCBmb28oKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvaW1hZ2VzL2VtcHR5LmJtcCBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL2ltYWdlcy9lbXB0eS5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL2ltYWdlcy9lbXB0eS5ibXAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL25lc3RlZC9iYXouY3MgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9uZXN0ZWQvYmF6LmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDMzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9uZXN0ZWQvYmF6LmNzCkBAIC0wLDAgKzEsMyBAQAordm9pZCBiYXooKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDQ0Y2NkNmIuLjVjY2NhMDEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsMTIgKzEsMTQgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA1NyBORVcpCisKIGluY2x1ZGUoUnVuQ01ha2UpCiBjbWFrZV9wb2xpY3koU0VUIENNUDAwNTQgTkVXKQogCitydW5fY21ha2UoVnNDc2hhcnBTb3VyY2VHcm91cCkKIHJ1bl9jbWFrZShWc0NTaGFycENvbXBpbGVyT3B0cykKIHJ1bl9jbWFrZShFeHBsaWNpdENNYWtlTGlzdHMpCiBydW5fY21ha2UoUnVudGltZUxpYnJhcnkpCiBydW5fY21ha2UoU291cmNlR3JvdXBDTWFrZUxpc3RzKQogcnVuX2NtYWtlKFNvdXJjZUdyb3VwVHJlZUNNYWtlTGlzdHMpCi0KIHJ1bl9jbWFrZShWc0NvbmZpZ3VyYXRpb25UeXBlKQogcnVuX2NtYWtlKFZzVGFyZ2V0c0ZpbGVSZWZlcmVuY2VzKQogcnVuX2NtYWtlKFZzQ3VzdG9tUHJvcHMpCkBAIC0xNSw2ICsxNyw3IEBACiBydW5fY21ha2UoVnNEZWJ1Z2dlckNvbW1hbmRBcmd1bWVudHMpCiBydW5fY21ha2UoVnNEZWJ1Z2dlckVudmlyb25tZW50KQogcnVuX2NtYWtlKFZzQ1NoYXJwQ3VzdG9tVGFncykKK3J1bl9jbWFrZShWc0NTaGFycERvY3VtZW50YXRpb25GaWxlKQogcnVuX2NtYWtlKFZzQ1NoYXJwUmVmZXJlbmNlUHJvcHMpCiBydW5fY21ha2UoVnNDU2hhcnBXaXRob3V0U291cmNlcykKIHJ1bl9jbWFrZShWc0NTaGFycERlcGxveUZpbGVzKQpAQCAtMjcsNiArMzAsMTUgQEAKIHJ1bl9jbWFrZShWc0RwaUF3YXJlQmFkUGFyYW0pCiBydW5fY21ha2UoVnNQcmVjb21waWxlSGVhZGVycykKIHJ1bl9jbWFrZShWc1ByZWNvbXBpbGVIZWFkZXJzUmV1c2VGcm9tQ29tcGlsZVBEQk5hbWUpCitydW5fY21ha2UoVnNEZXBsb3lFbmFibGVkKQorcnVuX2NtYWtlKFZzU2V0dGluZ3MpCitydW5fY21ha2UoVnNTb3VyY2VTZXR0aW5nc1Rvb2wpCisKK3J1bl9jbWFrZShWc1dpblJUQnlEZWZhdWx0KQorCitzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1RPT0xTRVQgIlZDVGFyZ2V0c1BhdGg9JChWQ1RhcmdldHNQYXRoKSIpCitydW5fY21ha2UoVnNWQ1RhcmdldHNQYXRoKQordW5zZXQoUnVuQ01ha2VfR0VORVJBVE9SX1RPT0xTRVQpCiAKIGlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk1TVkMiIEFORCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDE5LjA1KQogICBydW5fY21ha2UoVnNKdXN0TXlDb2RlKQpAQCAtNDQsMyArNTYsNiBAQAogZWxzZSgpCiAgIHJ1bl9jbWFrZShVbml0eUJ1aWxkTmF0aXZlKQogZW5kaWYoKQorCitydW5fY21ha2UoVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmspCitydW5fY21ha2UoVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVlNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVlNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGUwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9WU0RvdG5ldFRhcmdldEZyYW1ld29ya1ZlcnNpb24uY21ha2UKQEAgLTAsMCArMSwxMCBAQAorZW5hYmxlX2xhbmd1YWdlKENTaGFycCkKK2lmKE5PVCBDTUFLRV9DU2hhcnBfQ09NUElMRVIpCisgIHJldHVybigpCitlbmRpZigpCisKK3NldChDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OICJ2NC42LjEiKQorYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBmb28uY3MpCisKK3NldChDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSyAibmV0Y29yZWFwcDMuMSIpCithZGRfbGlicmFyeShiYXIgU0hBUkVEIGZvby5jcykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRGVmaW5lcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRGVmaW5lcy1jaGVjay5jbWFrZQppbmRleCAxNTJiZjljLi42MzFhYmFjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERlZmluZXMtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDU2hhcnBEZWZpbmVzLWNoZWNrLmNtYWtlCkBAIC0yNywxNSArMjcsMTUgQEAKICAgZWxzZWlmKGluRGVidWcgQU5ECiAgICAgIChsaW5lIE1BVENIRVMgIl4gKjxEZWZpbmVDb25zdGFudHM+LipNWV9GT09fREVGSU5FLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSBBTkQKICAgICAgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKkRFRklORV9PTkxZX0ZPUl9ERUJVRy4qPC9EZWZpbmVDb25zdGFudHM+ICokIikgQU5ECi0gICAgIChsaW5lIE1BVENIRVMgIl4gKjxEZWZpbmVDb25zdGFudHM+LipNWV9CQVJfQVNTSUdOTUVOVD1iYXIuKjwvRGVmaW5lQ29uc3RhbnRzPiAqJCIpIEFORAotICAgICAoTk9UIChsaW5lIE1BVENIRVMgIl4gKjxEZWZpbmVDb25zdGFudHM+LipERUZJTkVfT05MWV9GT1JfUkVMRUFTRS4qPC9EZWZpbmVDb25zdGFudHM+ICokIikpCisgICAgIChOT1QgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKkRFRklORV9PTkxZX0ZPUl9SRUxFQVNFLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSkgQU5ECisgICAgIChOT1QgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKk1ZX0JBUl9BU1NJR05NRU5UPWJhci4qPC9EZWZpbmVDb25zdGFudHM+ICokIikpCiAgICAgKQogICAgIHNldChkZWJ1Z09LIFRSVUUpCiAgIGVsc2VpZihpblJlbGVhc2UgQU5ECiAgICAgIChsaW5lIE1BVENIRVMgIl4gKjxEZWZpbmVDb25zdGFudHM+LipNWV9GT09fREVGSU5FLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSBBTkQKICAgICAgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKkRFRklORV9PTkxZX0ZPUl9SRUxFQVNFLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSBBTkQKLSAgICAgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKk1ZX0JBUl9BU1NJR05NRU5UPWJhci4qPC9EZWZpbmVDb25zdGFudHM+ICokIikgQU5ECi0gICAgIChOT1QgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKkRFRklORV9PTkxZX0ZPUl9ERUJVRy4qPC9EZWZpbmVDb25zdGFudHM+ICokIikpCisgICAgIChOT1QgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKkRFRklORV9PTkxZX0ZPUl9ERUJVRy4qPC9EZWZpbmVDb25zdGFudHM+ICokIikpIEFORAorICAgICAoTk9UIChsaW5lIE1BVENIRVMgIl4gKjxEZWZpbmVDb25zdGFudHM+LipNWV9CQVJfQVNTSUdOTUVOVD1iYXIuKjwvRGVmaW5lQ29uc3RhbnRzPiAqJCIpKQogICAgICkKICAgICBzZXQocmVsZWFzZU9LIFRSVUUpCiAgIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRG9jdW1lbnRhdGlvbkZpbGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERvY3VtZW50YXRpb25GaWxlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTMzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERvY3VtZW50YXRpb25GaWxlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgQ2hlY2sgQyMgVlMgcHJvamVjdCBmb3IgcmVxdWlyZWQgZWxlbWVudHMKKyMKK3NldChjc1Byb2plY3RGaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLmNzcHJvaiIpCitpZihOT1QgRVhJU1RTICIke2NzUHJvamVjdEZpbGV9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtjc1Byb2plY3RGaWxlfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNUUklOR1MgIiR7Y3NQcm9qZWN0RmlsZX0iIGxpbmVzKQorCitzZXQoSEFWRV9Eb2N1bWVudGF0aW9uRmlsZSAwKQorZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICBpZihsaW5lIE1BVENIRVMgIl4gKjxEb2N1bWVudGF0aW9uRmlsZT4oW148Pl0rKTwvRG9jdW1lbnRhdGlvbkZpbGU+IikKKyAgICBpZihIQVZFX0RvY3VtZW50YXRpb25GaWxlKQorICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJEb2N1bWVudGF0aW9uIG5vZGUgaGFzIGJlZW4gZ2VuZXJhdGVkIG1vcmUgdGhhbiBvbmNlIGZvclxuICAke2NzUHJvamVjdEZpbGV9IikKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQorICAgIHNldChIQVZFX0RvY3VtZW50YXRpb25GaWxlIDEpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitpZihOT1QgSEFWRV9Eb2N1bWVudGF0aW9uRmlsZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJEb2N1bWVudGF0aW9uIG5vZGUgaGFzIG5vdCBiZWVuIGdlbmVyYXRlZCBmb3JcbiAgJHtjc1Byb2plY3RGaWxlfSIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERvY3VtZW50YXRpb25GaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDU2hhcnBEb2N1bWVudGF0aW9uRmlsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I2Yjk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDU2hhcnBEb2N1bWVudGF0aW9uRmlsZS5jbWFrZQpAQCAtMCwwICsxLDggQEAKK3NldChDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIERlYnVnKQorZW5hYmxlX2xhbmd1YWdlKENTaGFycCkKKworYWRkX2xpYnJhcnkoZm9vIFNIQVJFRAorICBmb28uY3MpCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhmb28gUFJPUEVSVElFUworICBWU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFIGZvby54bWwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjVjNzBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIyIEBACitzZXQoY3NQcm9qRmlsZSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1ZzQ3NoYXJwU291cmNlR3JvdXAuY3Nwcm9qIikKK2lmKE5PVCBFWElTVFMgIiR7Y3NQcm9qRmlsZX0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke2NzUHJvakZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAiJHtjc1Byb2pGaWxlfSIgbGluZXMpCisKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L1ZzQ3NoYXJwU291cmNlR3JvdXBIZWxwZXJzLmNtYWtlKQorCitzZXQoU09VUkNFX0dST1VQU19UT19GSU5ECisgICJDU2hhcnBTb3VyY2VHcm91cCIKKyAgIkNTaGFycFNvdXJjZUdyb3VwL25lc3RlZCIKKyAgIkltYWdlcyIKKykKKworZm9yZWFjaChHUk9VUF9OQU1FIElOIExJU1RTICR7U09VUkNFX0dST1VQU19UT19GSU5EfSkKKyAgZmluZF9zb3VyY2VfZ3JvdXAoIiR7bGluZXN9IiAke0dST1VQX05BTUV9KQorICBpZihOT1QgJHtTT1VSQ0VfR1JPVVBfRk9VTkR9KQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0OTkzYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXAuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorZW5hYmxlX2xhbmd1YWdlKENTaGFycCkKK3NldChDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIERlYnVnKQorCitzZXQoU1JDX0ZJTEVTCisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DU2hhcnBTb3VyY2VHcm91cC9mb28uY3MKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL25lc3RlZC9iYXouY3MKKykKKworc2V0KElNQUdFX0ZJTEVTCisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DU2hhcnBTb3VyY2VHcm91cC9JbWFnZXMvZW1wdHkuYm1wCispCisKK2FkZF9saWJyYXJ5KFZzQ3NoYXJwU291cmNlR3JvdXAgU0hBUkVEICR7U1JDX0ZJTEVTfSAke0lNQUdFX0ZJTEVTfSkKK3NvdXJjZV9ncm91cCgiQ1NoYXJwU291cmNlR3JvdXAiIEZJTEVTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DU2hhcnBTb3VyY2VHcm91cC9mb28uY3MpCitzb3VyY2VfZ3JvdXAoIkNTaGFycFNvdXJjZUdyb3VwL25lc3RlZCIgRklMRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL25lc3RlZC9iYXouY3MpCitzb3VyY2VfZ3JvdXAoIkltYWdlcyIgRklMRVMgJHtJTUFHRV9GSUxFU30pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwSGVscGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXBIZWxwZXJzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTlhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwSGVscGVycy5jbWFrZQpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbihmaW5kX3NvdXJjZV9ncm91cCBMSU5FUyBOQU1FKQorICBzZXQoZm91bmRTb3VyY2VHcm91cExpbmsgMCkKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIExJTkVTKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiPExpbms+JHtOQU1FfTwvTGluaz4iKQorICAgICAgc2V0KGZvdW5kU291cmNlR3JvdXBMaW5rIDEpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZihOT1QgZm91bmRTb3VyY2VHcm91cExpbmspCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJTb3VyY2UgZ3JvdXAgbGluayBmb3IgJHtOQU1FfSBub3QgZm91bmQuIiBQQVJFTlRfU0NPUEUpCisgICAgc2V0KFNPVVJDRV9HUk9VUF9GT1VORCAwIFBBUkVOVF9TQ09QRSkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisgIHNldChTT1VSQ0VfR1JPVVBfRk9VTkQgMSBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RlcGxveUVuYWJsZWQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RlcGxveUVuYWJsZWQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmODY3OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDU4IEBACitzZXQodmNQcm9qZWN0RmlsZSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2Zvby52Y3hwcm9qIikKK2lmKE5PVCBFWElTVFMgIiR7dmNQcm9qZWN0RmlsZX0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke3ZjUHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisjCisjIFRlc3Qgc29sdXRpb24gZmlsZSBmb3IgZGVwbG95bWVudC4KKyMKKworc2V0KHZjU2xuRmlsZSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1ZzRGVwbG95RW5hYmxlZC5zbG4iKQoraWYoTk9UIEVYSVNUUyAiJHt2Y1NsbkZpbGV9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJTb2x1dGlvbiBmaWxlICR7dmNTbG5GaWxlfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCisKKworc2V0KEZvb1Byb2pHVUlEICIiKQorc2V0KEZvdW5kRm9vUHJvaiBGQUxTRSkKK3NldChJbkZvb1Byb2ogRkFMU0UpCitzZXQoRm91bmRSZWxlYXNlRGVwbG95IEZBTFNFKQorc2V0KERlcGxveUNvbmZpZ3MgRGVidWcgTWluU2l6ZVJlbCBSZWxXaXRoRGViSW5mbyApCisKK2ZpbGUoU1RSSU5HUyAiJHt2Y1NsbkZpbGV9IiBsaW5lcykKK2ZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyNtZXNzYWdlKFNUQVRVUyAiJHtsaW5lfSIpCisgIGlmKCAoTk9UIEluRm9vUHJvaiApIEFORCAobGluZSBNQVRDSEVTICJeWyBcXHRdKlByb2plY3RcXChcIntbQS1GMC05LV0rfVwiXFwpID0gXCJmb29cIiwgXCJmb28udmN4cHJvalwiLCBcIih7W0EtRjAtOS1dK30pXCJbIFxcdF0qJCIpKQorICAgICMgRmlyc3QsIGlkZW50aWZ5IHRoZSBHVUlEIGZvciB0aGUgZm9vIHByb2plY3QsIGFuZCByZWNvcmQgaXQuCisgICAgc2V0KEZvdW5kRm9vUHJvaiBUUlVFKQorICAgIHNldChJbkZvb1Byb2ogVFJVRSkKKyAgICBzZXQoRm9vUHJvakdVSUQgJHtDTUFLRV9NQVRDSF8xfSkKKyAgZWxzZWlmKEluRm9vUHJvaiBBTkQgbGluZSBNQVRDSEVTICJFbmRQcm9qZWN0IikKKyAgICBzZXQoSW5Gb29Qcm9qIEZBTFNFKQorICBlbHNlaWYoKE5PVCBJbkZvb1Byb2opIEFORCBsaW5lIE1BVENIRVMgIiR7Rm9vUHJvakdVSUR9XFwuUmVsZWFzZS4qXFwuRGVwbG95XFwuMCIpCisgICAgIyBJZiBmb28ncyBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGRlcGxveSwgdGhpcyBpcyB0aGUgZXJyb3IuCisgICAgc2V0KEZvdW5kUmVsZWFzZURlcGxveSBUUlVFKQorICBlbmRpZigpCisgIGlmKCBsaW5lIE1BVENIRVMgIntbQS1GMC05LV0rfVxcLihbXlxcfF0rKS4qXFwuRGVwbG95XFwuMCIgKQorICAgICMgQ2hlY2sgdGhhdCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgQVJFIHNldCB0byBkZXBsb3kuCisgICAgbGlzdCggUkVNT1ZFX0lURU0gRGVwbG95Q29uZmlncyAke0NNQUtFX01BVENIXzF9KQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworaWYoRm91bmRSZWxlYXNlRGVwbG95KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlJlbGVhc2UgZGVwbG95bWVudCBlbmFibGVkLiIpCisgIHJldHVybigpCitlbmRpZigpCisKK2lmKE5PVCBGb3VuZEZvb1Byb2opCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRmFpbGVkIHRvIGZpbmQgZm9vIHByb2plY3QgaW4gdGhlIHNvbHV0aW9uLiIpCisgIHJldHVybigpCitlbmRpZigpCisKK2xpc3QoTEVOR1RIIERlcGxveUNvbmZpZ3MgbGVuZ3RoKQoraWYoICBsZW5ndGggR1JFQVRFUiAwICkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBEZXBsb3kgbGluZXMgZm9yIG5vbi1SZWxlYXNlIGNvbmZpZ3VyYXRpb25zLiAoJHtsZW5ndGh9KSIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RlcGxveUVuYWJsZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RlcGxveUVuYWJsZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiNDJiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitzZXQoREVQTE9ZX0RJUgorICAgInRlbXBcXGZvb2RpciIKKykKKworYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBmb28uY3BwKQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZm9vCisgUFJPUEVSVElFUworICBWU19TT0xVVElPTl9ERVBMT1kgJDxOT1Q6JDxDT05GSUc6UmVsZWFzZT4+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RvdG5ldFRhcmdldEZyYW1ld29yay1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTY2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RvdG5ldFRhcmdldEZyYW1ld29yay1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQwIEBACitzZXQoZmlsZXMgZm9vLmNzcHJvaiBiYXIuY3Nwcm9qKQorCitzZXQoaW5MaWIxIEZBTFNFKQorc2V0KHRhcmdldEZyYW1ld29ya0luTGliMSBGQUxTRSkKKworc2V0KGluTGliMiBGQUxTRSkKK3NldCh0YXJnZXRGcmFtZXdvcmtzSW5MaWIyIEZBTFNFKQorCitmb3JlYWNoKGZpbGUgJHtmaWxlc30pCisgIHNldChjc1Byb2plY3RGaWxlICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS8ke2ZpbGV9KQorCisgIGlmKE5PVCBFWElTVFMgIiR7Y3NQcm9qZWN0RmlsZX0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7Y3NQcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgZmlsZShTVFJJTkdTICIke2NzUHJvamVjdEZpbGV9IiBsaW5lcykKKworICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYoTk9UIGluTGliMSkKKyAgICAgIGlmKGxpbmUgTUFUQ0hFUyAiICo8VGFyZ2V0RnJhbWV3b3JrPm5ldGNvcmVhcHAzLjE8L1RhcmdldEZyYW1ld29yaz4gKiQiKQorICAgICAgICBzZXQodGFyZ2V0RnJhbWV3b3JrSW5MaWIxICBUUlVFKQorICAgICAgICBzZXQoaW5MaWIxICBUUlVFKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihOT1QgaW5MaWIyKQorICAgICAgaWYobGluZSBNQVRDSEVTICIgKjxUYXJnZXRGcmFtZXdvcmtzPm5ldGNvcmVhcHAzLjE7bmV0NDYxPC9UYXJnZXRGcmFtZXdvcmtzPiAqJCIpCisgICAgICAgIHNldCh0YXJnZXRGcmFtZXdvcmtzSW5MaWIyICBUUlVFKQorICAgICAgICBzZXQoaW5MaWIyIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGZvcmVhY2goKQorCitpZihOT1QgdGFyZ2V0RnJhbWV3b3JrSW5MaWIxKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRhcmdldEZyYW1ld29yayBub3Qgc2V0IGNvcnJlY3RseS4iKQorZW5kaWYoKQorCitpZihOT1QgdGFyZ2V0RnJhbWV3b3Jrc0luTGliMikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJUYXJnZXRGcmFtZXdvcmtzIG5vdCBzZXQgY29ycmVjdGx5LiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RvdG5ldFRhcmdldEZyYW1ld29yay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTM2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RvdG5ldFRhcmdldEZyYW1ld29yay5jbWFrZQpAQCAtMCwwICsxLDExIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1NoYXJwKQoraWYoTk9UIENNQUtFX0NTaGFycF9DT01QSUxFUikKKyAgICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQoQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksgIm5ldGNvcmVhcHAzLjEiKQorc2V0KENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04gIm5ldDQ2MSIpCithZGRfbGlicmFyeShmb28gU0hBUkVEIGZvby5jcykKKworc2V0KENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLICJuZXRjb3JlYXBwMy4xO25ldDQ2MSIpCithZGRfbGlicmFyeShiYXIgU0hBUkVEIGZvby5jcykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbi1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbi1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmMzYzNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDAgQEAKK3NldChmaWxlcyBmb28uY3Nwcm9qIGJhci5jc3Byb2opCisKK3NldChpbkxpYjEgRkFMU0UpCitzZXQodGFyZ2V0RnJhbWV3b3JrSW5MaWIxIEZBTFNFKQorCitzZXQoaW5MaWIyIEZBTFNFKQorc2V0KHRhcmdldEZyYW1ld29ya3NJbkxpYjIgRkFMU0UpCisKK2ZvcmVhY2goZmlsZSAke2ZpbGVzfSkKKyAgc2V0KGNzUHJvamVjdEZpbGUgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyR7ZmlsZX0pCisKKyAgaWYoTk9UIEVYSVNUUyAiJHtjc1Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtjc1Byb2plY3RGaWxlfSBkb2VzIG5vdCBleGlzdC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBmaWxlKFNUUklOR1MgIiR7Y3NQcm9qZWN0RmlsZX0iIGxpbmVzKQorCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihOT1QgaW5MaWIxKQorICAgICAgaWYobGluZSBNQVRDSEVTICIgKjxUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPnY0LjYuMTwvVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj4gKiQiKQorICAgICAgICBzZXQodGFyZ2V0RnJhbWV3b3JrSW5MaWIxICBUUlVFKQorICAgICAgICBzZXQoaW5MaWIxICBUUlVFKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihOT1QgaW5MaWIyKQorICAgICAgaWYobGluZSBNQVRDSEVTICIgKjxUYXJnZXRGcmFtZXdvcms+bmV0Y29yZWFwcDMuMTwvVGFyZ2V0RnJhbWV3b3JrPiAqJCIpCisgICAgICAgIHNldCh0YXJnZXRGcmFtZXdvcmtzSW5MaWIyICBUUlVFKQorICAgICAgICBzZXQoaW5MaWIyIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGZvcmVhY2goKQorCitpZihOT1QgdGFyZ2V0RnJhbWV3b3JrSW5MaWIxKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRhcmdldEZyYW1ld29ya1ZlcnNpb24gbm90IHNldCBjb3JyZWN0bHkuIikKK2VuZGlmKCkKKworaWYoTk9UIHRhcmdldEZyYW1ld29ya3NJbkxpYjIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0RnJhbWV3b3JrIG5vdCBzZXQgY29ycmVjdGx5LiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0dsb2JhbHMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0dsb2JhbHMtY2hlY2suY21ha2UKaW5kZXggMGU3ZmQ0NS4uNmEzMDA5OSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNHbG9iYWxzLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzR2xvYmFscy1jaGVjay5jbWFrZQpAQCAtMSw0NCArMSw2NSBAQAotc2V0KHZjUHJvamVjdEZpbGUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mb28udmN4cHJvaiIpCi1pZihOT1QgRVhJU1RTICIke3ZjUHJvamVjdEZpbGV9IikKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHt2Y1Byb2plY3RGaWxlfSBkb2VzIG5vdCBleGlzdC4iKQotICByZXR1cm4oKQotZW5kaWYoKQotCi1zZXQoSW5zaWRlR2xvYmFscyBGQUxTRSkKLXNldChEZWZhdWx0TGFuZ3VhZ2VTZXQgRkFMU0UpCi1zZXQoTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb25TZXQgRkFMU0UpCi0KLWZpbGUoU1RSSU5HUyAiJHt2Y1Byb2plY3RGaWxlfSIgbGluZXMpCi1mb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCi0gIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPFByb3BlcnR5R3JvdXAgTGFiZWw9XCJHbG9iYWxzXCI+ICokIikKLSAgICBzZXQoSW5zaWRlR2xvYmFscyBUUlVFKQotICBlbHNlaWYobGluZSBNQVRDSEVTICJeICo8RGVmYXVsdExhbmd1YWdlPihbYS16QS1aXFwtXSspPC9EZWZhdWx0TGFuZ3VhZ2U+ICokIikKLSAgICBpZigiJHtDTUFLRV9NQVRDSF8xfSIgU1RSRVFVQUwgImVuLVVTIikKLSAgICAgIGlmKEluc2lkZUdsb2JhbHMpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJmb28udmN4cHJvaiBoYXMgY29ycmVjdCBEZWZhdWx0TGFuZ3VhZ2UgZ2xvYmFsIHByb3BlcnR5IikKLSAgICAgICAgc2V0KERlZmF1bHRMYW5ndWFnZVNldCBUUlVFKQotICAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJEZWZhdWx0TGFuZ3VhZ2UgaXMgc2V0IGJ1dCBub3Qgd2l0aGluIFwiR2xvYmFsc1wiIHByb3BlcnR5IGdyb3VwIikKLSAgICAgIGVuZGlmKCkKLSAgICBlbmRpZigpCi0gIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4oWzAtOVxcLl0rKTwvTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+ICokIikKLSAgICBpZigiJHtDTUFLRV9NQVRDSF8xfSIgU1RSRVFVQUwgIjE0LjAiKQotICAgICAgaWYoSW5zaWRlR2xvYmFscykKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgImZvby52Y3hwcm9qIGhhcyBjb3JyZWN0IE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uIGdsb2JhbCBwcm9wZXJ0eSIpCi0gICAgICAgIHNldChNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCBUUlVFKQotICAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiBpcyBzZXQgYnV0IG5vdCB3aXRoaW4gXCJHbG9iYWxzXCIgcHJvcGVydHkgZ3JvdXAiKQotICAgICAgZW5kaWYoKQotICAgIGVuZGlmKCkKK21hY3JvKGNoZWNrX3Byb2plY3RfZmlsZSBwcm9qZWN0RmlsZSkKKyAgaWYoTk9UIEVYSVNUUyAiJHtwcm9qZWN0RmlsZX0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKICAgZW5kaWYoKQotZW5kZm9yZWFjaCgpCiAKLWlmKE5PVCBEZWZhdWx0TGFuZ3VhZ2VTZXQpCi0gIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRGVmYXVsdExhbmd1YWdlU2V0IG5vdCBmb3VuZCBvciBub3Qgc2V0IGNvcnJlY3RseS4iKQotICByZXR1cm4oKQotZW5kaWYoKQorICBzdHJpbmcoUkVQTEFDRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyIgIiIgcHJvamVjdE5hbWUgJHtwcm9qZWN0RmlsZX0pCiAKLWlmKE5PVCBNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCkKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCBub3QgZm91bmQgb3Igbm90IHNldCBjb3JyZWN0bHkuIikKLSAgcmV0dXJuKCkKLWVuZGlmKCkKKyAgc2V0KEluc2lkZUdsb2JhbHMgRkFMU0UpCisgIHNldChEZWZhdWx0TGFuZ3VhZ2VTZXQgRkFMU0UpCisgIHNldChNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCBGQUxTRSkKKyAgc2V0KFRlc3RQcm9wZXJ0eVNldCBGQUxTRSkKKworICBmaWxlKFNUUklOR1MgIiR7cHJvamVjdEZpbGV9IiBsaW5lcykKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPFByb3BlcnR5R3JvdXAgTGFiZWw9XCJHbG9iYWxzXCI+ICokIikKKyAgICAgIHNldChJbnNpZGVHbG9iYWxzIFRSVUUpCisgICAgZWxzZWlmKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmF1bHRMYW5ndWFnZT4oW2EtekEtWlxcLV0rKTwvRGVmYXVsdExhbmd1YWdlPiAqJCIpCisgICAgICBpZigiJHtDTUFLRV9NQVRDSF8xfSIgU1RSRVFVQUwgImVuLVVTIikKKyAgICAgICAgaWYoSW5zaWRlR2xvYmFscykKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtwcm9qZWN0TmFtZX0gaGFzIGNvcnJlY3QgRGVmYXVsdExhbmd1YWdlIGdsb2JhbCBwcm9wZXJ0eSIpCisgICAgICAgICAgc2V0KERlZmF1bHRMYW5ndWFnZVNldCBUUlVFKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiRGVmYXVsdExhbmd1YWdlIGlzIHNldCBidXQgbm90IHdpdGhpbiBcIkdsb2JhbHNcIiBwcm9wZXJ0eSBncm91cCIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYobGluZSBNQVRDSEVTICJeICo8TWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+KFswLTlcXC5dKyk8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPiAqJCIpCisgICAgICBpZigiJHtDTUFLRV9NQVRDSF8xfSIgU1RSRVFVQUwgIjEwLjAiKQorICAgICAgICBpZihJbnNpZGVHbG9iYWxzKQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke3Byb2plY3ROYW1lfSBoYXMgY29ycmVjdCBNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiBnbG9iYWwgcHJvcGVydHkiKQorICAgICAgICAgIHNldChNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCBUUlVFKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24gaXMgc2V0IGJ1dCBub3Qgd2l0aGluIFwiR2xvYmFsc1wiIHByb3BlcnR5IGdyb3VwIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjxUZXN0UHJvcGVydHk+KC4rKTwvVGVzdFByb3BlcnR5PiAqJCIpCisgICAgICBpZigiJHtDTUFLRV9NQVRDSF8xfSIgU1RSRVFVQUwgIlRlc3RWYWx1ZSIpCisgICAgICAgIGlmKEluc2lkZUdsb2JhbHMpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7cHJvamVjdE5hbWV9IGhhcyBjb3JyZWN0IFRlc3RQcm9wZXJ0eSBnbG9iYWwgcHJvcGVydHkiKQorICAgICAgICAgIHNldChUZXN0UHJvcGVydHlTZXQgVFJVRSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIlRlc3RQcm9wZXJ0eSBpcyBzZXQgYnV0IG5vdCB3aXRoaW4gXCJHbG9iYWxzXCIgcHJvcGVydHkgZ3JvdXAiKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZihOT1QgRGVmYXVsdExhbmd1YWdlU2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRGVmYXVsdExhbmd1YWdlIG5vdCBmb3VuZCBvciBub3Qgc2V0IGNvcnJlY3RseSBpbiAke3Byb2plY3ROYW1lfS4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBpZihOT1QgTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb25TZXQpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiBub3QgZm91bmQgb3Igbm90IHNldCBjb3JyZWN0bHkgaW4gJHtwcm9qZWN0TmFtZX0uIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYoTk9UIFRlc3RQcm9wZXJ0eVNldCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRlc3RQcm9wZXJ0eSBub3QgZm91bmQgb3Igbm90IHNldCBjb3JyZWN0bHkgaW4gJHtwcm9qZWN0TmFtZX0uIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRtYWNybygpCisKK2NoZWNrX3Byb2plY3RfZmlsZSgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvJHtDTUFLRV9WRVJTSU9OfS9Db21waWxlcklkQ1hYL0NvbXBpbGVySWRDWFgudmN4cHJvaiIpCitjaGVja19wcm9qZWN0X2ZpbGUoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mb28udmN4cHJvaiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0dsb2JhbHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0dsb2JhbHMuY21ha2UKaW5kZXggYTNlZDVhZi4uMDlkODA2ZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNHbG9iYWxzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzR2xvYmFscy5jbWFrZQpAQCAtMSw4ICsxLDkgQEAKLWVuYWJsZV9sYW5ndWFnZShDWFgpCi0KIHNldChDTUFLRV9WU19HTE9CQUxTCiAgICAgIkRlZmF1bHRMYW5ndWFnZT1lbi1VUyIKLSAgICAiTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb249MTQuMCIKKyAgICAiTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb249MTAuMCIKKyAgICAiVGVzdFByb3BlcnR5PVRlc3RWYWx1ZSIKICkKIAorZW5hYmxlX2xhbmd1YWdlKENYWCkKKwogYWRkX2xpYnJhcnkoZm9vIGZvby5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1ByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQcmVjb21waWxlSGVhZGVycy1jaGVjay5jbWFrZQppbmRleCA5MWNlYTBlLi45YzIxNGYxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1ByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUHJlY29tcGlsZUhlYWRlcnMtY2hlY2suY21ha2UKQEAgLTEsNCArMSw0IEBACi1zZXQocGNoX2hlYWRlciAiQ01ha2VGaWxlcy90Z3QuZGlyL2NtYWtlX3BjaC5oeHgiKQorc2V0KHBjaF9oZWFkZXIgIkNNYWtlRmlsZXMvdGd0LmRpci9EZWJ1Zy9jbWFrZV9wY2guaHh4IikKIHNldChwY2hfc291cmNlIFs9W0NNYWtlRmlsZXNcXHRndC5kaXJcXGNtYWtlX3BjaC5jeHhdPV0pCiAKIGlmKE5PVCBFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS8ke3BjaF9oZWFkZXJ9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NldHRpbmdzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOGIyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NldHRpbmdzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKK21hY3JvKGVuc3VyZV9wcm9wc19zZXQgcHJvamVjdEZpbGUpCisgIGlmKE5PVCBFWElTVFMgIiR7cHJvamVjdEZpbGV9IikKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke3Byb2plY3RGaWxlfSBkb2VzIG5vdCBleGlzdC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBzZXQoU2V0dGluZ0ZvdW5kIEZBTFNFKQorCisgIGZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0RmlsZX0iIGxpbmVzKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYobGluZSBNQVRDSEVTICI8U291cmNlUHJvcGVydHkxLipEZWJ1Zy4qPlNvdXJjZVByb3BlcnR5MVZhbHVlPC9Tb3VyY2VQcm9wZXJ0eTE+IikKKyAgICAgIG1lc3NhZ2UoIlNvdXJjZVByb3BlcnR5MSBzZXR0aW5nIGZvdW5kIikKKyAgICAgIHNldChTZXR0aW5nRm91bmQgVFJVRSkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIGlmIChOT1QgU2V0dGluZ0ZvdW5kKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiU291cmNlUHJvcGVydHkxIHNldHRpbmcgd2FzIG5vdCBmb3VuZCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitlbnN1cmVfcHJvcHNfc2V0KCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLnZjeHByb2oiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiMzIxYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MuY21ha2UKQEAgLTAsMCArMSw1IEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShmb28gZm9vLmNwcCBzaGFkZXIuaGxzbCkKK3NldF9wcm9wZXJ0eShTT1VSQ0Ugc2hhZGVyLmhsc2wgUFJPUEVSVFkgVlNfU0VUVElOR1MKKyAgIiQ8JDxDT05GSUc6REVCVUc+OlNvdXJjZVByb3BlcnR5MT1Tb3VyY2VQcm9wZXJ0eTFWYWx1ZT4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWE4OWMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNCBAQAorbWFjcm8oZW5zdXJlX3Byb3BzX3NldCBwcm9qZWN0RmlsZSkKKyAgaWYoTk9UIEVYSVNUUyAiJHtwcm9qZWN0RmlsZX0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHNldChGaXJzdFNldHRpbmdGb3VuZCBGQUxTRSkKKyAgc2V0KFNlY29uZFNldHRpbmdGb3VuZCBGQUxTRSkKKworICBmaWxlKFNUUklOR1MgIiR7cHJvamVjdEZpbGV9IiBsaW5lcykKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiPFRhcmdldFByb3BlcnR5MS4qRGVidWcuKj5UYXJnZXRQcm9wZXJ0eTFWYWx1ZURlYnVnPC9UYXJnZXRQcm9wZXJ0eTE+IikKKyAgICAgIGlmIChGaXJzdFNldHRpbmdGb3VuZCkKKyAgICAgICAgbWVzc2FnZSgiVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQgdHdpY2UiKQorICAgICAgICBzZXQoU2Vjb25kU2V0dGluZ0ZvdW5kIFRSVUUpCisgICAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZSgiVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQgb25jZSIpCisgICAgICAgIHNldChGaXJzdFNldHRpbmdGb3VuZCBUUlVFKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYgKE5PVCBGaXJzdFNldHRpbmdGb3VuZCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRhcmdldFByb3BlcnR5MSBzZXR0aW5nIG5vdCBmb3VuZCBhdCBhbGwiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBpZiAoTk9UIFNlY29uZFNldHRpbmdGb3VuZCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRhcmdldFByb3BlcnR5MSBzZXR0aW5nIGZvdW5kIG9uY2Ugd2hlbiBpdCBzaG91bGQgYmUgZm91bmQgdHdpY2UiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworZW5zdXJlX3Byb3BzX3NldCgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2Zvby52Y3hwcm9qIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU291cmNlU2V0dGluZ3NUb29sLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4OTYyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU291cmNlU2V0dGluZ3NUb29sLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworYWRkX2xpYnJhcnkoZm9vIGZvby5jcHAgc2hhZGVyLmhsc2wgc2hhZGVyMi5obHNsKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfU09VUkNFX1NFVFRJTkdTX0ZYQ29tcGlsZQorICAiJDwkPENPTkZJRzpERUJVRz46VGFyZ2V0UHJvcGVydHkxPVRhcmdldFByb3BlcnR5MVZhbHVlRGVidWc+IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzVkNUYXJnZXRzUGF0aC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzVkNUYXJnZXRzUGF0aC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE3MDFjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNWQ1RhcmdldHNQYXRoLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzIgQEAKK21hY3JvKGNoZWNrX3Byb2plY3RfZmlsZSBwcm9qZWN0RmlsZSkKKyAgc2V0KGluc2lkZUdsb2JhbHMgRkFMU0UpCisgIHNldChwYXRoRm91bmQgRkFMU0UpCisKKyAgaWYoTk9UIEVYSVNUUyAiJHtwcm9qZWN0RmlsZX0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHN0cmluZyhSRVBMQUNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vIiAiIiBwcm9qZWN0TmFtZSAke3Byb2plY3RGaWxlfSkKKworICBmaWxlKFNUUklOR1MgIiR7cHJvamVjdEZpbGV9IiBsaW5lcykKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPFByb3BlcnR5R3JvdXAgTGFiZWw9XCJHbG9iYWxzXCI+LiokIikKKyAgICAgIHNldChpbnNpZGVHbG9iYWxzIFRSVUUpCisgICAgZWxzZWlmKGluc2lkZUdsb2JhbHMpCisgICAgICBpZihsaW5lIE1BVENIRVMgIl4gKjwvUHJvcGVydHlHcm91cD4uKiQiKQorICAgICAgICBzZXQoaW5zaWRlR2xvYmFscyBGQUxTRSkKKyAgICAgIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjxWQ1RhcmdldHNQYXRoPiguKyk8L1ZDVGFyZ2V0c1BhdGg+KiQiKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgVkNUYXJnZXRzUGF0aCA9ICR7Q01BS0VfTUFUQ0hfMX0gaW4gUHJvcGVydHlHcm91cCAnR2xvYmFscycgaW4gJHtwcm9qZWN0TmFtZX0iKQorICAgICAgICBzZXQocGF0aEZvdW5kIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKyAgaWYoTk9UIHBhdGhGb3VuZCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlZDVGFyZ2V0c1BhdGggbm90IGZvdW5kIGluIFwiR2xvYmFsc1wiIHByb3BlcnR5Z3JvdXAgaW4gJHtwcm9qZWN0TmFtZX0iKQorICAgIHJldHVybigpICMgVGhpcyBzaG91bGQgaW50ZW50aW9uYWxseSByZXR1cm4gZnJvbSB0aGUgY2FsbGVyLCBub3QgdGhlIG1hY3JvCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworY2hlY2tfcHJvamVjdF9maWxlKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy8ke0NNQUtFX1ZFUlNJT059L0NvbXBpbGVySWRDWFgvQ29tcGlsZXJJZENYWC52Y3hwcm9qIikKK2NoZWNrX3Byb2plY3RfZmlsZSgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2Zvby52Y3hwcm9qIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzVkNUYXJnZXRzUGF0aC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzVkNUYXJnZXRzUGF0aC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTYwODhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNWQ1RhcmdldHNQYXRoLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworYWRkX2xpYnJhcnkoZm9vIGZvby5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1dpblJUQnlEZWZhdWx0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNXaW5SVEJ5RGVmYXVsdC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWJiYWYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNXaW5SVEJ5RGVmYXVsdC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDY2IEBACittYWNybyhjaGVja0NvbXBpbGVBc1dpblJUIHByb2plY3RQYXRoKQorICBpZihSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYgKE5PVCBFWElTVFMgIiR7cHJvamVjdFBhdGh9IikKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke3Byb2plY3RQYXRofSBkb2VzIG5vdCBleGlzdC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHByb2plY3ROYW1lICIke3Byb2plY3RQYXRofSIgTkFNRV9XRSkKKworICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoIiIgIiIgIkdMT0JBTCIgIk9WRVJSSURFU19FTkFCTEU7T1ZFUlJJREVTX0RJU0FCTEUiICR7QVJHTn0pCisKKyAgdW5zZXQoc291cmNlT3ZlcnJpZGUpCisKKyAgZmlsZShTVFJJTkdTICIke3Byb2plY3RQYXRofSIgbGluZXMpCisgIHNldChmb3VuZEdsb2JhbFdpblJUIGZhbHNlKQorCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihsaW5lIE1BVENIRVMgIl4gKjxDb21waWxlQXNXaW5SVCggQ29uZGl0aW9uPVwiW15cXFwiXStcIik/Pih0cnVlfGZhbHNlKTwvQ29tcGlsZUFzV2luUlQ+JCIpCisgICAgICBzZXQodmFsdWUgJHtDTUFLRV9NQVRDSF8yfSkKKworICAgICAgaWYoc291cmNlT3ZlcnJpZGUpCisgICAgICAgIHNldChleHBlY3RlZExpc3QpCisKKyAgICAgICAgaWYodmFsdWUpCisgICAgICAgICAgc2V0KGV4cGVjdGVkTGlzdCBfT1ZFUlJJREVTX0VOQUJMRSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KGV4cGVjdGVkTGlzdCBfT1ZFUlJJREVTX0RJU0FCTEUpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICBpZihOT1Qgc291cmNlT3ZlcnJpZGUgSU5fTElTVCAke2V4cGVjdGVkTGlzdH0pCisgICAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVECisgICAgICAgICAgICAiJHtwcm9qZWN0TmFtZX06IFVuZXhwZWN0ZWQgQ29tcGlsZUFzV2luUlQgb3ZlcnJpZGUgJHt2YWx1ZX0gZm9yICR7c291cmNlT3ZlcnJpZGV9IikKKyAgICAgICAgICByZXR1cm4oKQorICAgICAgICBlbmRpZigpCisgICAgICBlbHNlKCkKKyAgICAgICAgaWYgKE5PVCBfR0xPQkFMIFNUUkVRVUFMIHZhbHVlKQorICAgICAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRAorICAgICAgICAgICAgIiR7cHJvamVjdE5hbWV9OiBHbG9iYWwgQ29tcGlsZUFzV2luUlQgdmFsdWUgaXMgJHt2YWx1ZX0sIGJ1dCBleHBlY3RlZCAke19HTE9CQUx9IikKKyAgICAgICAgICByZXR1cm4oKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgc2V0KGZvdW5kR2xvYmFsV2luUlQgdHJ1ZSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYobGluZSBNQVRDSEVTICJeICo8Q2xDb21waWxlIEluY2x1ZGU9XCIoW15cIl0rKVwiPiQiKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChzb3VyY2VPdmVycmlkZSAiJHtDTUFLRV9NQVRDSF8xfSIgTkFNRSkKKyAgICBlbHNlaWYobGluZSBNQVRDSEVTICJeICo8L0NsQ29tcGlsZT4kIikKKyAgICAgIHVuc2V0KHNvdXJjZU92ZXJyaWRlKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYoTk9UIGZvdW5kR2xvYmFsV2luUlQgQU5EIERFRklORUQgX0dMT0JBTCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7cHJvamVjdE5hbWV9OiBHbG9iYWwgQ29tcGlsZUFzV2luUlQgbm90IGZvdW5kIG9yIGhhdmUgaW52YWxpZCB2YWx1ZSwgYnV0IGV4cGVjdGVkIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRtYWNybygpCisKK2NoZWNrQ29tcGlsZUFzV2luUlQoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9ub0ZsYWdPbmx5Qy52Y3hwcm9qIiBHTE9CQUwgZmFsc2UpCitjaGVja0NvbXBpbGVBc1dpblJUKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vbm9GbGFnTWl4ZWRDQW5kQ3h4LnZjeHByb2oiIEdMT0JBTCBmYWxzZSkKK2NoZWNrQ29tcGlsZUFzV2luUlQoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9ub0ZsYWdPbmx5Q3h4LnZjeHByb2oiIEdMT0JBTCBmYWxzZSkKKworY2hlY2tDb21waWxlQXNXaW5SVCgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2ZsYWdPbmx5Qy52Y3hwcm9qIiBHTE9CQUwgdHJ1ZSBPVkVSUklERVNfRElTQUJMRSBlbXB0eS5jKQorY2hlY2tDb21waWxlQXNXaW5SVCgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2ZsYWdNaXhlZENBbmRDeHgudmN4cHJvaiIgR0xPQkFMIHRydWUgT1ZFUlJJREVTX0RJU0FCTEUgZW1wdHkuYykKK2NoZWNrQ29tcGlsZUFzV2luUlQoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mbGFnT25seUN4eC52Y3hwcm9qIiBHTE9CQUwgdHJ1ZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzV2luUlRCeURlZmF1bHQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1dpblJUQnlEZWZhdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTA0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1dpblJUQnlEZWZhdWx0LmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKK3NldChDTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxUIHRydWUpCisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworYWRkX2xpYnJhcnkobm9GbGFnT25seUMgZW1wdHkuYykKK2FkZF9saWJyYXJ5KG5vRmxhZ01peGVkQ0FuZENYWCBlbXB0eS5jIGZvby5jcHApCithZGRfbGlicmFyeShub0ZsYWdPbmx5Q1hYIGZvby5jcHApCisKK2FkZF9saWJyYXJ5KGZsYWdPbmx5QyBlbXB0eS5jKQorYWRkX2xpYnJhcnkoZmxhZ01peGVkQ0FuZENYWCBlbXB0eS5jIGZvby5jcHApCithZGRfbGlicmFyeShmbGFnT25seUNYWCBmb28uY3BwKQorCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKGZsYWdPbmx5QyBQUklWQVRFIC9aVykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZmxhZ01peGVkQ0FuZENYWCBQUklWQVRFIC9aVykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZmxhZ09ubHlDWFggUFJJVkFURSAvWlcpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9zaGFkZXIuaGxzbCBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L3NoYWRlci5obHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTM3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9zaGFkZXIuaGxzbApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L3NoYWRlcjIuaGxzbCBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L3NoYWRlcjIuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3Qvc2hhZGVyMi5obHNsCkBAIC0wLDAgKzEgQEAKKwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNmVjZjNmMi4uMzQyZGJiYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC04LDYgKzgsMTYgQEAKIHJ1bl9jbWFrZShYY29kZUF0dHJpYnV0ZUdlbmV4KQogcnVuX2NtYWtlKFhjb2RlQXR0cmlidXRlR2VuZXhFcnJvcikKIHJ1bl9jbWFrZShYY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seSkKKworZnVuY3Rpb24oWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHlXaXRoT2JqZWN0TGlicmFyeSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1hjb2RlR2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5V2l0aE9iamVjdExpYnJhcnktYnVpbGQpCisgIHJ1bl9jbWFrZShYY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5KQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBydW5fY21ha2VfY29tbWFuZChYY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5LWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0IHNoYXJlZF9saWIpCitlbmRmdW5jdGlvbigpCisKK1hjb2RlR2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5V2l0aE9iamVjdExpYnJhcnkoKQorCiBydW5fY21ha2UoWGNvZGVPYmplY3ROZWVkc0VzY2FwZSkKIHJ1bl9jbWFrZShYY29kZU9iamVjdE5lZWRzUXVvdGUpCiBydW5fY21ha2UoWGNvZGVPcHRpbWl6YXRpb25GbGFncykKQEAgLTY4LDYgKzc4LDE1IEBACiBYY29kZU9iamN4eEZsYWdzKFhjb2RlT2JqY0ZsYWdzKQogWGNvZGVPYmpjeHhGbGFncyhYY29kZU9iamN4eEZsYWdzKQogCitmdW5jdGlvbihYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0pCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9YY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0tYnVpbGQpCisgIHJ1bl9jbWFrZShYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0pCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKFhjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKK2VuZGZ1bmN0aW9uKCkKKworWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtKCkKKwogIyBJc29sYXRlIGRldmljZSB0ZXN0cyBmcm9tIGhvc3QgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbi4KIHVuc2V0KEVOVntDTUFLRV9PU1hfQVJDSElURUNUVVJFU30pCiAKQEAgLTI4Nyw0ICszMDYsMTYgQEAKICAgeGN0ZXN0X2xvb2t1cF90ZXN0KHR2T1MgYXBwbGV0dnNpbXVsYXRvcikKIGVuZGlmKCkKIAoraWYoWENPREVfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgOCkKKyAgZnVuY3Rpb24oWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtU0RLIFNESykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtU0RLLSR7U0RLfS1idWlsZCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX1NZU1RFTV9OQU1FPWlPUyIpCisgICAgcnVuX2NtYWtlKFhjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICAgIHJ1bl9jbWFrZV9jb21tYW5kKFhjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbVNESy0ke1NES30tYnVpbGQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS0gLXNkayAke1NES30pCisgIGVuZGZ1bmN0aW9uKCkKKworICBYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW1TREsoaXBob25lb3MpCisgIFhjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbVNESyhpcGhvbmVzaW11bGF0b3IpCitlbmRpZigpCiAjIFBsZWFzZSBhZGQgbWFjT1Mtb25seSB0ZXN0cyBhYm92ZSBiZWZvcmUgdGhlIGRldmljZS1zcGVjaWZpYyB0ZXN0cy4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlR2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5V2l0aE9iamVjdExpYnJhcnkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlNGEwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENNQUtFX1hDT0RFX0dFTkVSQVRFX1RPUF9MRVZFTF9QUk9KRUNUX09OTFkgVFJVRSkKK3Byb2plY3QoWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHkgTk9ORSkKK2FkZF9zdWJkaXJlY3Rvcnkoc3VicHJvamVjdF93aXRoX29iamVjdF9saWIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVQcmVjb21waWxlSGVhZGVycy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlCmluZGV4IGFhM2VhZmMuLjRlODVkYjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlCkBAIC0xLDQgKzEsNCBAQAotc2V0KHBjaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvY21ha2VfcGNoLmh4eCIpCitzZXQocGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9EZWJ1Zy9jbWFrZV9wY2guaHh4IikKIAogaWYoTk9UIEVYSVNUUyAiJHtwY2hfaGVhZGVyfSIpCiAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIFBDSCBoZWFkZXIgJHtwY2hfaGVhZGVyfSBkb2VzIG5vdCBleGlzdC4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwNTJmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0uY21ha2UKQEAgLTAsMCArMSw1MiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZCAoVkVSU0lPTiAzLjE0KQorCitpZihOT1QgIiRFTlZ7Q01BS0VfT1NYX0FSQ0hJVEVDVFVSRVN9IiBNQVRDSEVTICJbOyRdIikKKyAgc2V0KFVTRV9TV0lGVCAxKQorZWxzZSgpCisgIHNldChVU0VfU1dJRlQgMCkKK2VuZGlmKCkKKworaWYoSU9TKQorICBzZXQoQ01BS0VfWENPREVfQVRUUklCVVRFX0NPREVfU0lHTklOR19SRVFVSVJFRCBOTykKKyAgc2V0KENNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFIFNUQVRJQ19MSUJSQVJZKQorICBpZihYQ09ERV9WRVJTSU9OIFZFUlNJT05fTEVTUyA5KQorICAgIHNldChVU0VfU1dJRlQgMCkKKyAgZW5kaWYoKQorZW5kaWYgKCkKKworZW5hYmxlX2xhbmd1YWdlIChDWFgpCisKK2lmKFVTRV9TV0lGVCkKKyAgZW5hYmxlX2xhbmd1YWdlIChTd2lmdCkKKyAgaWYoTk9UIFhDT0RFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDEwLjIpCisgICAgc2V0KENNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04gNS4wKQorICBlbHNlaWYoTk9UIFhDT0RFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDguMCkKKyAgICBzZXQoQ01BS0VfU3dpZnRfTEFOR1VBR0VfVkVSU0lPTiAzLjApCisgIGVuZGlmKCkKK2VuZGlmKCkKKworIyBUcnkgdG8gZmluZCBaTElCIGluIHRoZSBTREsgcmF0aGVyIHRoYW4gaW4gc3lzdGVtIGxvY2F0aW9ucy4KK3NldChDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSCBGQUxTRSkKK3NldChDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIIEZBTFNFKQorc2V0KENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEggRkFMU0UpCitzZXQoQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEggRkFMU0UpCitsaXN0KFJFTU9WRV9JVEVNIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAvdXNyL2xvY2FsIC91c3IgLyAvdXNyL1gxMVI2IC91c3IvcGtnIC9vcHQgL3N3IC9vcHQvbG9jYWwpCisKK2ZpbmRfcGFja2FnZShaTElCIFJFUVVJUkVEKQorYWRkX2xpYnJhcnkgKGZyYW1ld29ya19kZXBlbmRlbmN5IFNUQVRJQykKK3RhcmdldF9zb3VyY2VzIChmcmFtZXdvcmtfZGVwZW5kZW5jeSBQUklWQVRFIHVzZV9jbWF0aC5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoZnJhbWV3b3JrX2RlcGVuZGVuY3kgSU5URVJGQUNFIFpMSUI6OlpMSUIpCisKK2FkZF9saWJyYXJ5IChmcmFtZXdvcmtfdGVzdCBTSEFSRUQgdXNlX2NtYXRoLmNwcCkKK2lmKFVTRV9TV0lGVCkKKyAgdGFyZ2V0X3NvdXJjZXMoZnJhbWV3b3JrX3Rlc3QgUFJJVkFURSBmb28uc3dpZnQpCitlbmRpZigpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGZyYW1ld29ya190ZXN0IFBSSVZBVEUgZnJhbWV3b3JrX2RlcGVuZGVuY3kpCisKK3NldF90YXJnZXRfcHJvcGVydGllcyAoZnJhbWV3b3JrX3Rlc3QgUFJPUEVSVElFUworICAgIEZSQU1FV09SSyBUUlVFCisgICAgRlJBTUVXT1JLX1ZFUlNJT04gQQorICAgIE1BQ09TWF9GUkFNRVdPUktfSURFTlRJRklFUiAiZnJhbWV3b3JrLnRlc3QiCisgICAgVkVSU0lPTiAiMS4wIgorICAgIFNPVkVSU0lPTiAxLjAKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlU2NoZW1hUHJvcGVydHktY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS1jaGVjay5jbWFrZQppbmRleCA3ZDgzYTcwLi5jNzQyZjUwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS1jaGVjay5jbWFrZQpAQCAtNDUsNiArNDUsNyBAQAogY2hlY2tfcHJvcGVydHkoIkVOVklST05NRU5UIiBbPVt2YWx1ZT0iZm9vIl09XSkKIGNoZWNrX3Byb3BlcnR5KCJFTlZJUk9OTUVOVCIgWz1ba2V5PSJCQVIiXT1dKQogY2hlY2tfcHJvcGVydHkoIkVOVklST05NRU5UIiBbPVt2YWx1ZT0iYmFyIl09XSkKK2NoZWNrX3Byb3BlcnR5KCJXT1JLSU5HX0RJUkVDVE9SWSIgWz1bIi93b3JraW5nL2RpciJdPV0pCiAKIGV4cGVjdF9ub19zY2hlbWEoIk5vU2NoZW1hIikKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlU2NoZW1hUHJvcGVydHkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS5jbWFrZQppbmRleCBiZTIxOWY0Li5jZTVjMGM5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS5jbWFrZQpAQCAtMzUsNiArMzUsNyBAQAogY3JlYXRlX3NjaGVtZV9mb3JfcHJvcGVydHkoRVhFQ1VUQUJMRSBteUV4ZWN1dGFibGUpCiBjcmVhdGVfc2NoZW1lX2Zvcl9wcm9wZXJ0eShBUkdVTUVOVFMgIi0tZm9vOy0tYmFyPWJheiIpCiBjcmVhdGVfc2NoZW1lX2Zvcl9wcm9wZXJ0eShFTlZJUk9OTUVOVCAiRk9PPWZvbztCQVI9YmFyIikKK2NyZWF0ZV9zY2hlbWVfZm9yX3Byb3BlcnR5KFdPUktJTkdfRElSRUNUT1JZICIvd29ya2luZy9kaXIiKQogCiBhZGRfZXhlY3V0YWJsZShOb1NjaGVtYSBtYWluLmNwcCkKIHNldF90YXJnZXRfcHJvcGVydGllcyhOb1NjaGVtYSBQUk9QRVJUSUVTIFhDT0RFX0dFTkVSQVRFX1NDSEVNRSBPRkYpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvZm9vLnN3aWZ0IGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L2Zvby5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjJkM2RjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L2Zvby5zd2lmdApAQCAtMCwwICsxLDIgQEAKK2Z1bmMgZm9vKCkgeworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L3N1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L3N1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDAwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3Qvc3VicHJvamVjdF93aXRoX29iamVjdF9saWIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3IEBACitwcm9qZWN0KHN1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliKQorCithZGRfbGlicmFyeShvYmplY3RfbGliX2RlcGVuZGVuY3kgT0JKRUNUIGR1bW15LmNwcCkKKworYWRkX2xpYnJhcnkoc2hhcmVkX2xpYiBTSEFSRUQgZHVtbXkuY3BwKQordGFyZ2V0X3NvdXJjZXMoc2hhcmVkX2xpYiBQUklWQVRFICQ8VEFSR0VUX09CSkVDVFM6b2JqZWN0X2xpYl9kZXBlbmRlbmN5PikKK3NldF90YXJnZXRfcHJvcGVydGllcyhzaGFyZWRfbGliIFBST1BFUlRJRVMgTUFDT1NYX1JQQVRIIE9OKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L3N1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliL2R1bW15LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9zdWJwcm9qZWN0X3dpdGhfb2JqZWN0X2xpYi9kdW1teS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0MjE4YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9zdWJwcm9qZWN0X3dpdGhfb2JqZWN0X2xpYi9kdW1teS5jcHAKQEAgLTAsMCArMSw1IEBACituYW1lc3BhY2Ugewordm9pZCBkdW1teSgpCit7Cit9Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvdXNlX2NtYXRoLmNwcCBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC91c2VfY21hdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNThhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvdXNlX2NtYXRoLmNwcApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxjbWF0aD4KKworYm9vbCBmb28oZG91YmxlIGFyZykKK3sKKyAgcmV0dXJuIHN0ZDo6aXNmaW5pdGUoYXJnKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvR0VORVhfTElOS19MQU5HLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9HRU5FWF9MSU5LX0xBTkcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0Y2U0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvR0VORVhfTElOS19MQU5HLmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saW5rX29wdGlvbnMgKCQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfTEFOR19DJHtvYmp9PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHX0xBTkdfQ1hYJHtvYmp9PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19tb2QgTU9EVUxFIExpbmtPcHRpb25zTGliLmMpCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LRVJfZXhwYW5zaW9uLWxpc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tbGlzdC5jbWFrZQppbmRleCAzNGRjYzY3Li5jNzdiNDNjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tbGlzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tbGlzdC5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogCiBhZGRfbGlicmFyeShleGFtcGxlIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQogIyB1c2UgTEFVTkNIIGZhY2lsaXR5IHRvIGR1bXAgbGlua2VyIGNvbW1hbmQKLXNldF9wcm9wZXJ0eShUQVJHRVQgZXhhbXBsZSBQUk9QRVJUWSBSVUxFX0xBVU5DSF9MSU5LICJcIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9kdW1wJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH1cIiIpCitzZXRfcHJvcGVydHkoVEFSR0VUIGV4YW1wbGUgUFJPUEVSVFkgUlVMRV9MQVVOQ0hfTElOSyAiXCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtDTUFLRV9DRkdfSU5URElSfS9kdW1wJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH1cIiIpCiAKIGFkZF9kZXBlbmRlbmNpZXMgKGV4YW1wbGUgZHVtcCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LRVJfZXhwYW5zaW9uLXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZQppbmRleCBiZWJkNmM3Li5lY2UzYmEwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZQpAQCAtMTEsNSArMTEsOCBAQAogZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vTElOS0VSLnR4dCIgbGlua2VyX2ZsYWcpCiAKIGlmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICIke2xpbmtlcl9mbGFnfSIpCi0gIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkxJTktFUjogd2FzIG5vdCBleHBhbmRlZCBjb3JyZWN0bHkuIikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkxJTktFUjogd2FzIG5vdCBleHBhbmRlZCBjb3JyZWN0bHkuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLWV4ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLWV4ZS1jaGVjay5jbWFrZQppbmRleCA0YTIyZDdlLi4xMjdhMmY1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1leGUtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtZXhlLWNoZWNrLmNtYWtlCkBAIC0zLDUgKzMsOCBAQAogICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfRVhFQ1VUQUJMRV9SRUxFQVNFJy4iKQogZW5kaWYoKQogaWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18oU0hBUkVEfE1PRFVMRSlfUkVMRUFTRSIpCi0gIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfKFNIQVJFRHxNT0RVTEUpX1JFTEVBU0UnLiIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyhTSEFSRUR8TU9EVUxFKV9SRUxFQVNFJy4iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtbW9kLWNoZWNrLmNtYWtlCmluZGV4IGQ2OTU3NjEuLjg3NGUwYWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLW1vZC1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1tb2QtY2hlY2suY21ha2UKQEAgLTMsNSArMyw4IEBACiAgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR19NT0RVTEVfUkVMRUFTRScuIikKIGVuZGlmKCkKIGlmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfKFNIQVJFRHxFWEVDVVRBQkxFKV9SRUxFQVNFIikKLSAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oU0hBUkVEfEVYRUNVVEFCTEUpX1JFTEVBU0UnLiIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyhTSEFSRUR8RVhFQ1VUQUJMRSlfUkVMRUFTRScuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLXNoYXJlZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLXNoYXJlZC1jaGVjay5jbWFrZQppbmRleCBlYWFjOGUzLi5lY2JhMTdlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1zaGFyZWQtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtc2hhcmVkLWNoZWNrLmNtYWtlCkBAIC0zLDUgKzMsOCBAQAogICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfU0hBUkVEX1JFTEVBU0UnLiIpCiBlbmRpZigpCiBpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyhNT0RVTEV8RVhFQ1VUQUJMRSlfUkVMRUFTRSIpCi0gIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfKE1PRFVMRXxFWEVDVVRBQkxFKV9SRUxFQVNFJy4iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oTU9EVUxFfEVYRUNVVEFCTEUpX1JFTEVBU0UnLiIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zTGliLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTGlua09wdGlvbnNMaWIuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zTGliLmN4eApAQCAtMCwwICsxLDcgQEAKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBmbGFnc19saWIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDRmNWRmNzIuLjQ2NWZmODUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yMyw2ICsyMywyMSBAQAogICBydW5fY21ha2VfdGFyZ2V0KExJTktfT1BUSU9OUyBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCiAgIHJ1bl9jbWFrZV90YXJnZXQoTElOS19PUFRJT05TIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKIAorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBzaGFyZWRfYyBMaW5rT3B0aW9uc19zaGFyZWRfYyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0Ugc2hhcmVkX2N4eCBMaW5rT3B0aW9uc19zaGFyZWRfY3h4IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBleGUgTGlua09wdGlvbnNfZXhlIC0tY29uZmlnIFJlbGVhc2UpCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR19BTkRfSUQpCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIHNoYXJlZF9jIExpbmtPcHRpb25zX3NoYXJlZF9jIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBzaGFyZWRfY3h4IExpbmtPcHRpb25zX3NoYXJlZF9jeHggLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIG1vZCBMaW5rT3B0aW9uc19tb2QgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKKwogICB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCiAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNjQxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNjQxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDEyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDKQorc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jeHgtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOTgxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQ1hYKQorc2V0IChJTlZBTElEX0xBTkcgQykKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2N4eC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2N4eC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjM3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDE3IEBACisKK2lmIChOT1QgREVGSU5FRCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgREVGSU5FRCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HIikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHXyR7VkFMSURfTEFOR31fTEFORycuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkciKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFORycuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRkNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saW5rX29wdGlvbnMgKCQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jeHgpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX21vZCBNT0RVTEUgTGlua09wdGlvbnNMaWIuYykKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0OThkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2N4eC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRmODUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfY3h4LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfY3h4LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkYzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKKworaWYgKE5PVCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7VkFMSURfTEFOR31fTEFOR19JRCIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkdfSUQnLlxuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkdfSUQiKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFOR19JRCAnLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESUQiKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oJHtWQUxJRF9MQU5HfXwke0lOVkFMSURfTEFOR30pX0JBRElEJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDcwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKQEAgLTAsMCArMSwxOSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2lmKEJPUkxBTkQpCisgIHNldChwcmUgLSkKK2VuZGlmKCkKKworYWRkX2xpbmtfb3B0aW9ucyAoJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NfTEFOR19JRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46JHtwcmV9QkFERkxBR19DWFhfQkFESUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9jIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQorYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBTSEFSRUQgTGlua09wdGlvbnNMaWIuY3h4KQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19tb2QgTU9EVUxFIExpbmtPcHRpb25zTGliLmMpCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZlN2EyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKGNtYWtlX2NvbW1hbmRfbm9fcGFyYW1ldGVycykKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX3Vua25vd25fbWV0YV9vcGVyYXRpb24pCitydW5fY21ha2UoY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZSkKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlX2ZhdGFsX2Vycm9yKQorcnVuX2NtYWtlKGNtYWtlX2NvbW1hbmRfaW52b2tlX25vX3BhcmFtZXRlcnMpCitydW5fY21ha2UoY21ha2VfY29tbWFuZF9pbnZva2VfdW5rbm93bl9mdW5jdGlvbikKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZSkKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvcikKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX2V2YWxfbm9fY29kZSkKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX2V2YWxfbm9fcGFyYW1ldGVycykKK3J1bl9jbWFrZShjbWFrZV9jb21tYW5kX2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzg2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9tZXNzYWdlLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorV09SS1MhCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9tZXNzYWdlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY1ZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZS5jbWFrZQpAQCAtMCwwICsxIEBACitjbWFrZV9jb21tYW5kKEVWQUwgQ09ERSBtZXNzYWdlKFdPUktTISkpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3ItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOGExMjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCBjbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZToxOkVWQUw6MiBcKG1lc3NhZ2VcKToKKyAgZXJyb3IhCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9jb21tYW5kX2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZToxIFwoY21ha2VfY29tbWFuZFwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTEzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorY21ha2VfY29tbWFuZChFVkFMIENPREUKKyIKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiBlcnJvciEpCisiCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbm9fY29kZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX25vX2NvZGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbm9fY29kZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbm9fY29kZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTMzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19jb2RlLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvciBhdCBjbWFrZV9jb21tYW5kX2V2YWxfbm9fY29kZS5jbWFrZToxIFwoY21ha2VfY29tbWFuZFwpOgorICBjbWFrZV9jb21tYW5kIGNhbGxlZCB3aXRob3V0IENPREUgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX25vX2NvZGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19jb2RlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTE2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19jb2RlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2NvbW1hbmQoRVZBTCBtZXNzYWdlICJ0b28gbWFueSBwYXJhbWV0ZXJzIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfbm9fcGFyYW1ldGVycy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmYzMxNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGNtYWtlX2NvbW1hbmRfZXZhbF9ub19wYXJhbWV0ZXJzLmNtYWtlOjEgXChjbWFrZV9jb21tYW5kXCk6CisgIGNtYWtlX2NvbW1hbmQgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX25vX3BhcmFtZXRlcnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19wYXJhbWV0ZXJzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmEyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF9ub19wYXJhbWV0ZXJzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2NvbW1hbmQoRVZBTCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX3ZhcmlhYmxlX291dHNpZGVfbWVzc2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjODY5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ldmFsX3ZhcmlhYmxlX291dHNpZGVfbWVzc2FnZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1dPUktTIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YTA2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2UuY21ha2UKQEAgLTAsMCArMSwyIEBACitjbWFrZV9jb21tYW5kKEVWQUwgQ09ERSAic2V0KHBocmFzZSBcIldPUktTIVwiKSIpCittZXNzYWdlKCR7cGhyYXNlfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjODY5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1dPUktTIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNmQ3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX21lc3NhZ2UuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfY29tbWFuZChJTlZPS0UgbWVzc2FnZSBXT1JLUyEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlX2ZhdGFsX2Vycm9yLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlX2ZhdGFsX2Vycm9yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5ZGFiNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZToxIFwobWVzc2FnZVwpOgorICBlcnJvciEKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2NvbW1hbmRfaW52b2tlX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2U6MSBcKGNtYWtlX2NvbW1hbmRcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0Mjc2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZQpAQCAtMCwwICsxIEBACitjbWFrZV9jb21tYW5kKElOVk9LRSBtZXNzYWdlIEZBVEFMX0VSUk9SIGVycm9yISkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX25vX3BhcmFtZXRlcnMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX25vX3BhcmFtZXRlcnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQxYjQxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvciBhdCBjbWFrZV9jb21tYW5kX2ludm9rZV9ub19wYXJhbWV0ZXJzLmNtYWtlOjEgXChjbWFrZV9jb21tYW5kXCk6CisgIGNtYWtlX2NvbW1hbmQgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2Vfbm9fcGFyYW1ldGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2Vfbm9fcGFyYW1ldGVycy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM1ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV9ub19wYXJhbWV0ZXJzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2NvbW1hbmQoSU5WT0tFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfdW5rbm93bl9mdW5jdGlvbi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfdW5rbm93bl9mdW5jdGlvbi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX3Vua25vd25fZnVuY3Rpb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfdW5rbm93bl9mdW5jdGlvbi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTgxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfaW52b2tlX3Vua25vd25fZnVuY3Rpb24tc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGNtYWtlX2NvbW1hbmRfaW52b2tlX3Vua25vd25fZnVuY3Rpb24uY21ha2U6MSBcKHVua25vd25cKToKKyAgVW5rbm93biBDTWFrZSBjb21tYW5kICJ1bmtub3duIi4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfdW5rbm93bl9mdW5jdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9pbnZva2VfdW5rbm93bl9mdW5jdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTlhMDRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX2ludm9rZV91bmtub3duX2Z1bmN0aW9uLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2NvbW1hbmQoSU5WT0tFIHVua25vd24pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX25vX3BhcmFtZXRlcnMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfbm9fcGFyYW1ldGVycy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzJiNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGNtYWtlX2NvbW1hbmRfbm9fcGFyYW1ldGVycy5jbWFrZToxIFwoY21ha2VfY29tbWFuZFwpOgorICBjbWFrZV9jb21tYW5kIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfbm9fcGFyYW1ldGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF9ub19wYXJhbWV0ZXJzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YzVlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfbm9fcGFyYW1ldGVycy5jbWFrZQpAQCAtMCwwICsxIEBACitjbWFrZV9jb21tYW5kKElOVk9LRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfdW5rbm93bl9tZXRhX29wZXJhdGlvbi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF91bmtub3duX21ldGFfb3BlcmF0aW9uLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2NvbW1hbmQvY21ha2VfY29tbWFuZF91bmtub3duX21ldGFfb3BlcmF0aW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfdW5rbm93bl9tZXRhX29wZXJhdGlvbi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOWI5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfdW5rbm93bl9tZXRhX29wZXJhdGlvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorQ01ha2UgRXJyb3IgYXQgY21ha2VfY29tbWFuZF91bmtub3duX21ldGFfb3BlcmF0aW9uLmNtYWtlOjEgXChjbWFrZV9jb21tYW5kXCk6CisgIGNtYWtlX2NvbW1hbmQgY2FsbGVkIHdpdGggdW5rbm93biBtZXRhLW9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX3Vua25vd25fbWV0YV9vcGVyYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9jb21tYW5kL2NtYWtlX2NvbW1hbmRfdW5rbm93bl9tZXRhX29wZXJhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M3N2U1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfY29tbWFuZC9jbWFrZV9jb21tYW5kX3Vua25vd25fbWV0YV9vcGVyYXRpb24uY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfY29tbWFuZChVTktOT1dOKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1JlcnVuQ01ha2UuY21ha2UKaW5kZXggODkwY2MxZi4uOTgzODdkMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlLmNtYWtlCkBAIC0xLDggKzEsNCBAQAogbWVzc2FnZSgiUnVubmluZyBDTWFrZSBvbiBSZXJ1bkNNYWtlIikgIyB3cml0ZSB0byBzdGRlcnIgaWYgY21ha2UgcmVydW5zCi1jb25maWd1cmVfZmlsZSgKLSAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Db25maWd1cmVGaWxlSW5wdXQudHh0LmluIgotICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVPdXRwdXQudHh0IgotICBAT05MWQotICApCithZGRfc3ViZGlyZWN0b3J5KFJlcnVuQ01ha2UpCiAjIG1ha2Ugc3VyZSBDTWFrZUNhY2hlLnR4dCBpcyBuZXdlciB0aGFuIENvbmZpZ3VyZUZpbGVPdXRwdXQudHh0CiBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY4MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUgQEAKK2NvbmZpZ3VyZV9maWxlKAorICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uZmlndXJlRmlsZU91dHB1dC50eHQiCisgIEBPTkxZCisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBkZTE0NDY4Li4zMmEwNzcwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yMiw3ICsyMiw3IEBACiAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCiAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCiAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCi0gIHNldChpbl9jb25mICAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iKQorICBzZXQoaW5fY29uZiAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZXJ1bkNNYWtlL0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iKQogICBmaWxlKFdSSVRFICIke2luX2NvbmZ9IiAiMSIpCiAKICAgbWVzc2FnZShTVEFUVVMgIlJlcnVuQ01ha2U6IGZpcnN0IGNvbmZpZ3VyYXRpb24uLi4iKQpAQCAtNDIsNyArNDIsNyBAQAogICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKIAogICBtZXNzYWdlKFNUQVRVUyAiUmVydW5DTWFrZTogcmVtb3ZlIGNvbmZpZ3VyZV9maWxlIG91dHB1dC4uLiIpCi0gIGZpbGUoUkVNT1ZFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ29uZmlndXJlRmlsZU91dHB1dC50eHQiKQorICBmaWxlKFJFTU9WRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1JlcnVuQ01ha2UvQ29uZmlndXJlRmlsZU91dHB1dC50eHQiKQogICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLXJlcnVuICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQogICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbGFiZWxzX2Zvcl9zdWJwcm9qZWN0cy9DVGVzdFNjcmlwdFZhcmlhYmxlQ29tbWFuZExpbmUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X2xhYmVsc19mb3Jfc3VicHJvamVjdHMvQ1Rlc3RTY3JpcHRWYXJpYWJsZUNvbW1hbmRMaW5lLXN0ZGVyci50eHQKaW5kZXggMzg1NjZmYi4uMjA2YWIyMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbGFiZWxzX2Zvcl9zdWJwcm9qZWN0cy9DVGVzdFNjcmlwdFZhcmlhYmxlQ29tbWFuZExpbmUtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9sYWJlbHNfZm9yX3N1YnByb2plY3RzL0NUZXN0U2NyaXB0VmFyaWFibGVDb21tYW5kTGluZS1zdGRlcnIudHh0CkBAIC0xICsxLDIgQEAKLVVuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6LipNeVRoaXJkUGFydHlEZXBlbmRlbmN5L3NyYy90aGlyZHBhcnR5CitVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlOi4qTXlUaGlyZFBhcnR5RGVwZW5kZW5jeS9zcmMoL1teLworXSspPy90aGlyZHBhcnR5CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDY4NzdlNmEuLjg0ZDFkNjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDYgKzEsOSBAQAogaW5jbHVkZShSdW5DVGVzdCkKIHNldChSdW5DTWFrZV9URVNUX1RJTUVPVVQgNjApCiAKK3Vuc2V0KEVOVntDVEVTVF9QQVJBTExFTF9MRVZFTH0pCit1bnNldChFTlZ7Q1RFU1RfT1VUUFVUX09OX0ZBSUxVUkV9KQorCiBzZXQoQ0FTRV9DVEVTVF9URVNUX0FSR1MgIiIpCiBzZXQoQ0FTRV9DVEVTVF9URVNUX0xPQUQgIiIpCiAKQEAgLTcxLDcgKzc0LDI0IEBACiBhZGRfdGVzdChOQU1FIEZhaWxpbmdUZXN0IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBub19zdWNoX2NvbW1hbmQpCiAgIF1dKQogCi0gIHVuc2V0KEVOVntDVEVTVF9QQVJBTExFTF9MRVZFTH0pCiAgIHJ1bl9jdGVzdChUZXN0T3V0cHV0U2l6ZSkKIGVuZGZ1bmN0aW9uKCkKIHJ1bl9UZXN0T3V0cHV0U2l6ZSgpCisKK3J1bl9jdGVzdF90ZXN0KFRlc3RSZXBlYXRCYWQxIFJFUEVBVCBVTktOT1dOOjMpCitydW5fY3Rlc3RfdGVzdChUZXN0UmVwZWF0QmFkMiBSRVBFQVQgVU5USUxfRkFJTDotMSkKKworZnVuY3Rpb24ocnVuX1Rlc3RSZXBlYXQgY2FzZSkKKyAgc2V0KENBU0VfQ1RFU1RfVEVTVF9BUkdTIEVYQ0xVREUgUnVuQ01ha2VWZXJzaW9uICR7QVJHTn0pCisgIHN0cmluZyhDT05DQVQgQ0FTRV9DTUFLRUxJU1RTX1NVRkZJWF9DT0RFIFtbCithZGRfdGVzdChOQU1FIHRlc3RSZXBlYXQKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1EIENPVU5UX0ZJTEU9JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NvdW50LmNtYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtUCAiXV0gIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vVGVzdFJlcGVhdCR7Y2FzZX0iIFtbLmNtYWtlIikKK3NldF9wcm9wZXJ0eShURVNUIHRlc3RSZXBlYXQgUFJPUEVSVFkgVElNRU9VVCA1KQorICBdXSkKKworICBydW5fY3Rlc3QoVGVzdFJlcGVhdCR7Y2FzZX0pCitlbmRmdW5jdGlvbigpCitydW5fVGVzdFJlcGVhdChVbnRpbEZhaWwgUkVQRUFUIFVOVElMX0ZBSUw6MykKK3J1bl9UZXN0UmVwZWF0KFVudGlsUGFzcyBSRVBFQVQgVU5USUxfUEFTUzozKQorcnVuX1Rlc3RSZXBlYXQoQWZ0ZXJUaW1lb3V0IFJFUEVBVCBBRlRFUl9USU1FT1VUOjMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRBZnRlclRpbWVvdXQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEFmdGVyVGltZW91dC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjU3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRBZnRlclRpbWVvdXQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEwIEBACitUZXN0IHByb2plY3QgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEFmdGVyVGltZW91dC1idWlsZAorICAgIFN0YXJ0IDE6IHRlc3RSZXBlYXQKKzEvMSBUZXN0ICMxOiB0ZXN0UmVwZWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXCpcKlwqVGltZW91dCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAxOiB0ZXN0UmVwZWF0CisgICAgVGVzdCAjMTogdGVzdFJlcGVhdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKysKKzEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QWZ0ZXJUaW1lb3V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QWZ0ZXJUaW1lb3V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZGU0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRBZnRlclRpbWVvdXQuY21ha2UKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSgiJHtDT1VOVF9GSUxFfSIgT1BUSU9OQUwpCitpZihOT1QgQ09VTlQpCisgIHNldChDT1VOVCAwKQorZW5kaWYoKQorbWF0aChFWFBSIENPVU5UICIke0NPVU5UfSArIDEiKQorZmlsZShXUklURSAiJHtDT1VOVF9GSUxFfSIgInNldChDT1VOVCAke0NPVU5UfSlcbiIpCitpZihOT1QgQ09VTlQgRVFVQUwgMikKKyAgbWVzc2FnZSgidGhpcyB0ZXN0IHRpbWVzIG91dCBleGNlcHQgb24gdGhlIDJuZCBydW4iKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEwKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQxLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2NmZmJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1JlcGVhdCBvcHRpb24gaW52YWxpZCB2YWx1ZTogVU5LTk9XTjozCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQyLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQyLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDItcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWNlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQyLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorUmVwZWF0IG9wdGlvbiBpbnZhbGlkIHZhbHVlOiBVTlRJTF9GQUlMOi0xCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbEZhaWwtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbEZhaWwtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0IHByb2plY3QgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC1idWlsZAorICAgIFN0YXJ0IDE6IHRlc3RSZXBlYXQKKyAgICBUZXN0ICMxOiB0ZXN0UmVwZWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgUGFzc2VkICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDE6IHRlc3RSZXBlYXQKKyAgICBUZXN0ICMxOiB0ZXN0UmVwZWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXCpcKlwqRmFpbGVkICtbMC05Ll0rIHNlYworKworMCUgdGVzdHMgcGFzc2VkLCAxIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjCisrCitUaGUgZm9sbG93aW5nIHRlc3RzIEZBSUxFRDoKK1sJIF0rMSAtIHRlc3RSZXBlYXQgXChGYWlsZWRcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWIwZDhhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxGYWlsLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAoraW5jbHVkZSgiJHtDT1VOVF9GSUxFfSIgT1BUSU9OQUwpCitpZihOT1QgQ09VTlQpCisgIHNldChDT1VOVCAwKQorZW5kaWYoKQorbWF0aChFWFBSIENPVU5UICIke0NPVU5UfSArIDEiKQorZmlsZShXUklURSAiJHtDT1VOVF9GSUxFfSIgInNldChDT1VOVCAke0NPVU5UfSlcbiIpCitpZihDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJ0aGlzIHRlc3QgZmFpbHMgb24gdGhlIDJuZCBydW4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbFBhc3Mtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY5MzlhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbFBhc3MtYnVpbGQKKyAgICBTdGFydCAxOiB0ZXN0UmVwZWF0CisxLzEgVGVzdCAjMTogdGVzdFJlcGVhdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKkZhaWxlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAxOiB0ZXN0UmVwZWF0CisgICAgVGVzdCAjMTogdGVzdFJlcGVhdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKysKKzEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjI1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbFBhc3MuY21ha2UKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlKCIke0NPVU5UX0ZJTEV9IiBPUFRJT05BTCkKK2lmKE5PVCBDT1VOVCkKKyAgc2V0KENPVU5UIDApCitlbmRpZigpCittYXRoKEVYUFIgQ09VTlQgIiR7Q09VTlR9ICsgMSIpCitmaWxlKFdSSVRFICIke0NPVU5UX0ZJTEV9IiAic2V0KENPVU5UICR7Q09VTlR9KVxuIikKK2lmKE5PVCBDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJ0aGlzIHRlc3QgcGFzc2VzIG9ubHkgb24gdGhlIDJuZCBydW4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Mjc1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZGVyci50eHQKQEAgLTAsMCArMSwzIEBACitDTWFrZSBFcnJvciBhdCBbXgorXSpFY2hvVmFyaWFibGVPdXRwdXQuY21ha2U6MiBcKG1lc3NhZ2VcKToKKyAgVGV4dCB0byBzdGRlcnIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGUtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzg2OGJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy0tIFRleHQgdG8gc3Rkb3V0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTk5OWM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS5jbWFrZQpAQCAtMCwwICsxLDIzIEBACitleGVjdXRlX3Byb2Nlc3MoCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtUCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0VjaG9WYXJpYWJsZU91dHB1dC5jbWFrZQorICBPVVRQVVRfVkFSSUFCTEUgc3Rkb3V0CisgIEVSUk9SX1FVSUVUCisgIEVDSE9fT1VUUFVUX1ZBUklBQkxFCispCisKK2ZpbGUoUkVBRCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0VjaG9WYXJpYWJsZS1zdGRvdXQudHh0IGV4cGVjdGVkX3N0ZG91dCkKK2lmIChOT1Qgc3Rkb3V0IE1BVENIRVMgIiR7ZXhwZWN0ZWRfc3Rkb3V0fSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgInN0ZG91dCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIHN0ZG91dCIpCitlbmRpZigpCisKK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRWNob1ZhcmlhYmxlT3V0cHV0LmNtYWtlCisgIEVSUk9SX1ZBUklBQkxFIHN0ZGVycgorICBPVVRQVVRfUVVJRVQKKyAgRUNIT19FUlJPUl9WQVJJQUJMRQorKQorCitmaWxlKFJFQUQgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9FY2hvVmFyaWFibGUtc3RkZXJyLnR4dCBleHBlY3RlZF9zdGRlcnIpCitpZiAoTk9UIHN0ZGVyciBNQVRDSEVTICIke2V4cGVjdGVkX3N0ZGVycn0iKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJzdGRlcnIgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZCBzdGRlcnIiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZU91dHB1dC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGVPdXRwdXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzNjU2NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGVPdXRwdXQuY21ha2UKQEAgLTAsMCArMSwyIEBACittZXNzYWdlKFNUQVRVUyAiVGV4dCB0byBzdGRvdXQiKQorbWVzc2FnZShGQVRBTF9FUlJPUiAiVGV4dCB0byBzdGRlcnIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggYjIwM2FhYi4uODlhZDZiMiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yNCwzICsyNCw1IEBACiBydW5fY21ha2VfY29tbWFuZChFY2hvQ29tbWFuZDMgJHtDTUFLRV9DT01NQU5EfQogICAtRENIRUNLX0VSUk9SX09VVFBVVF9MT0NBVElPTj1UUlVFIC1QCiAgICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vRWNob0NvbW1hbmQuY21ha2UpCisKK3J1bl9jbWFrZV9jb21tYW5kKEVjaG9WYXJpYWJsZSAke0NNQUtFX0NPTU1BTkR9IC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vRWNob1ZhcmlhYmxlLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtTkVXLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGFiN2IxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0NNYWtlIEVycm9yIGF0IFJlcGVhdC5jbWFrZTpbMC05XSsgXChleHBvcnRcKToKKyAgZXhwb3J0IGNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlCisKKyAgICBmb28uY21ha2UKKworICBEaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZFw/CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBSZXBlYXQtQ01QMDEwMy1ORVcuY21ha2U6WzAtOV0rIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorCisKK0NNYWtlIEVycm9yIGF0IFJlcGVhdC9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChleHBvcnRcKToKKyAgZXhwb3J0IGNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlCisKKyAgICAuKy9mb28uY21ha2UKKworICBEaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZFw/CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTM4MWRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMyBORVcpCitpbmNsdWRlKFJlcGVhdC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTM0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtT0xELmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTAzIE9MRCkKK2luY2x1ZGUoUmVwZWF0LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwNGRmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyNiBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFJlcGVhdC5jbWFrZTpbMC05XSsgXChleHBvcnRcKToKKyAgUG9saWN5IENNUDAxMDMgaXMgbm90IHNldDogbXVsdGlwbGUgZXhwb3J0XChcKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORAorICBpcyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTAzIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UKKyAgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgZXhwb3J0XChcKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZQorCisgICAgZm9vLmNtYWtlCisKKyAgRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmRcPworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KKworQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFJlcGVhdC9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChleHBvcnRcKToKKyAgUG9saWN5IENNUDAxMDMgaXMgbm90IHNldDogbXVsdGlwbGUgZXhwb3J0XChcKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORAorICBpcyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTAzIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UKKyAgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgZXhwb3J0XChcKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZQorCisgICAgLisvZm9vLmNtYWtlCisKKyAgRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmRcPworVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjMwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFJlcGVhdC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjYyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorYWRkX2xpYnJhcnkoZm9vIElOVEVSRkFDRSkKK2V4cG9ydChUQVJHRVRTIGZvbyBGSUxFIGZvby5jbWFrZSkKK2V4cG9ydChUQVJHRVRTIGZvbyBGSUxFIGZvby5jbWFrZSkKK2FkZF9zdWJkaXJlY3RvcnkoUmVwZWF0KQoraW5jbHVkZShDTWFrZVBhY2thZ2VDb25maWdIZWxwZXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3ZjZjYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyIEBACithZGRfbGlicmFyeShiYXIgSU5URVJGQUNFKQorZXhwb3J0KFRBUkdFVFMgYmFyIEZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9mb28uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA0ZDJmMjE3Li4xYzc0NzYyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTIsNiArMiw5IEBACiAKIHJ1bl9jbWFrZShDdXN0b21UYXJnZXQpCiBydW5fY21ha2UoRW1wdHkpCitydW5fY21ha2UoUmVwZWF0LUNNUDAxMDMtV0FSTikKK3J1bl9jbWFrZShSZXBlYXQtQ01QMDEwMy1PTEQpCitydW5fY21ha2UoUmVwZWF0LUNNUDAxMDMtTkVXKQogcnVuX2NtYWtlKFRhcmdldE5vdEZvdW5kKQogcnVuX2NtYWtlKEFwcGVuZEV4cG9ydCkKIHJ1bl9jbWFrZShPbGRJZmFjZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtYnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtYnVpbGQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM5YTkxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1idWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QyL3Rlc3RfZm9sZGVyX3N5bWxpbmsKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtcmVidWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1yZWJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjOWE5MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtcmVidWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QyL3Rlc3RfZm9sZGVyX3N5bWxpbmsKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2Utc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmJhYzAxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qUnVubmluZyBDTWFrZSBvbiBHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0MDUzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UuY21ha2UKQEAgLTAsMCArMSwxMCBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMDA5IE5FVykKK21lc3NhZ2UoU1RBVFVTICJSdW5uaW5nIENNYWtlIG9uIEdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlIikKK2ZpbGUoR0xPQl9SRUNVUlNFCisgIENPTlRFTlRfTElTVAorICBDT05GSUdVUkVfREVQRU5EUworICBMSVNUX0RJUkVDVE9SSUVTIGZhbHNlCisgIFJFTEFUSVZFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGVzdDIvKiIKKyAgKQorYWRkX2N1c3RvbV90YXJnZXQoQ09OVEVOVF9FQ0hPIEFMTCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJHtDT05URU5UX0xJU1R9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA1ZGI0YjNiLi5mNTQ2MWFkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNjksNyArNjksNyBAQAogICBydW5fY21ha2UoSU5TVEFMTC1GT0xMT1dfU1lNTElOS19DSEFJTikKIGVuZGlmKCkKIAotaWYoUnVuQ01ha2VfR0VORVJBVE9SIFNUUkVRVUFMICJOaW5qYSIpCitpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiKQogICAjIERldGVjdCBuaW5qYSB2ZXJzaW9uIHNvIHdlIGtub3cgd2hhdCB0ZXN0cyBjYW4gYmUgc3VwcG9ydGVkLgogICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgQ09NTUFORCAiJHtSdW5DTWFrZV9NQUtFX1BST0dSQU19IiAtLXZlcnNpb24KQEAgLTkwLDcgKzkwLDcgQEAKICAgZW5kaWYoKQogZW5kaWYoKQogCi1pZihSdW5DTWFrZV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIiBBTkQgIiR7bmluamFfdmVyc2lvbn0iIFZFUlNJT05fTEVTUyAxLjgpCitpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiIEFORCAiJHtuaW5qYV92ZXJzaW9ufSIgVkVSU0lPTl9MRVNTIDEuOCkKICAgcnVuX2NtYWtlKEdMT0JfUkVDVVJTRS13YXJuLUNPTkZJR1VSRV9ERVBFTkRTLW5pbmphLXZlcnNpb24pCiBlbHNlKCkKICAgcnVuX2NtYWtlKEdMT0Itd2Fybi1DT05GSUdVUkVfREVQRU5EUy1sYXRlKQpAQCAtMTExLDcgKzExMSw3IEBACiAgIHNldCh0Zl8xICAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Rlc3QvMS50eHQiKQogICBmaWxlKFdSSVRFICIke3RmXzF9IiAiMSIpCiAKLSAgbWVzc2FnZShTVEFUVVMgIkdMT0ItUmVydW5DTWFrZTogZmlyc3QgY29uZmlndXJhdGlvbi4uLiIpCisgIG1lc3NhZ2UoU1RBVFVTICJHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLVJlcnVuQ01ha2U6IGZpcnN0IGNvbmZpZ3VyYXRpb24uLi4iKQogICBydW5fY21ha2UoR0xPQi1DT05GSUdVUkVfREVQRU5EUy1SZXJ1bkNNYWtlKQogICBydW5fY21ha2VfY29tbWFuZChHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLVJlcnVuQ01ha2UtYnVpbGQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCiAKQEAgLTEyNSwxMCArMTI1LDI1IEBACiAKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBzbGVlcCAke2ZzX2RlbGF5fSkKICAgbWVzc2FnZShTVEFUVVMgIkdMT0ItQ09ORklHVVJFX0RFUEVORFMtUmVydW5DTWFrZTogcmVtb3ZlIGZpcnN0IHRlc3QgZmlsZS4uLiIpCi0gIGZpbGUoUkVNT1ZFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGVzdC8xLnR4dCIpCisgIGZpbGUoUkVNT1ZFICIke3RmXzF9IikKICAgcnVuX2NtYWtlX2NvbW1hbmQoR0xPQi1DT05GSUdVUkVfREVQRU5EUy1SZXJ1bkNNYWtlLXJlYnVpbGRfc2Vjb25kICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQogICBydW5fY21ha2VfY29tbWFuZChHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLVJlcnVuQ01ha2Utbm93b3JrICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQogCisgIGlmKE5PVCBXSU4zMiBPUiBDWUdXSU4pCisgICAgbWVzc2FnZShTVEFUVVMgIkdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlOiBsaW5rIHRoZSBmaXJzdCB0ZXN0IGRpcmVjdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeS4uLiIpCisgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Rlc3QyIikKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNyZWF0ZV9zeW1saW5rICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGVzdCIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90ZXN0Mi90ZXN0X2ZvbGRlcl9zeW1saW5rIikKKworICAgIG1lc3NhZ2UoU1RBVFVTICJHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZTogZmlyc3QgY29uZmlndXJhdGlvbi4uLiIpCisgICAgcnVuX2NtYWtlKEdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlKQorICAgIHJ1bl9jbWFrZV9jb21tYW5kKEdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlLWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorCisgICAgbWVzc2FnZShTVEFUVVMgIkdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlOiBhZGQgYW5vdGhlciBmaWxlIGluIHRoZSBsaW5rZWQgZGlyZWN0b3J5Li4uIikKKyAgICBzZXQodGZfMyAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90ZXN0LzMudHh0IikKKyAgICBmaWxlKFdSSVRFICIke3RmXzN9IiAiMyIpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtcmVidWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKKyAgZW5kaWYoKQorCiAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKICAgdW5zZXQoUnVuQ01ha2VfREVGQVVMVF9zdGRlcnIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NzU3MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9QcmVmaXhJblBBVEgtc3RkZXJyLnR4dApAQCAtMCwwICsxLDEzIEBACisgIGZpbmRfZmlsZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBQcmVmaXhJblBBVEhfSU5DTFVERV9ESVIKKyAgICBOQU1FUzogXCJQcmVmaXhJblBBVEhcLmhcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX2ZpbGUgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorLippbmNsdWRlL1ByZWZpeEluUEFUSC4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1ByZWZpeEluUEFUSC5jbWFrZQppbmRleCAxZTMzYzA4Li5jMzM0ZDg5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9QcmVmaXhJblBBVEguY21ha2UKQEAgLTEsNCArMSwxMCBAQAogc2V0KEVOVl9QQVRIICIkRU5We1BBVEh9IikKKworc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAxKQorc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2JpbiIpCitmaW5kX2ZpbGUoUHJlZml4SW5QQVRIX0lOQ0xVREVfRElSIE5BTUVTIFByZWZpeEluUEFUSC5oKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAwKQorCiBmb3JlYWNoKHBhdGggIi9kb2VzX25vdF9leGlzdCIgIiIgIi9iaW4iICIvc2JpbiIpCiAgIHVuc2V0KFByZWZpeEluUEFUSF9JTkNMVURFX0RJUiBDQUNIRSkKICAgc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9JHtwYXRofSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljMzM3YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorQ01ha2UgRXJyb3IgYXQgUmVxdWlyZWQuY21ha2U6OSBcKGZpbmRfZmlsZVwpOgorICBDb3VsZCBub3QgZmluZCBGSUxFX2RvTm90RXhpc3RzIHVzaW5nIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGRvTm90RXhpc3RzLmgKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhOGU4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy0tIEZJTEVfZXhpc3RzPSdbXiddKi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvaW5jbHVkZS9QcmVmaXhJblBBVEguaCcKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YwOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK2ZpbmRfZmlsZShGSUxFX2V4aXN0cworICBOQU1FUyBQcmVmaXhJblBBVEguaAorICBQQVRIUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5jbHVkZQorICBOT19ERUZBVUxUX1BBVEgKKyAgUkVRVUlSRUQKKyAgKQorbWVzc2FnZShTVEFUVVMgIkZJTEVfZXhpc3RzPScke0ZJTEVfZXhpc3RzfSciKQorCitmaW5kX2ZpbGUoRklMRV9kb05vdEV4aXN0cworICBOQU1FUyBkb05vdEV4aXN0cy5oCisgIFJFUVVJUkVECisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDlmNTZhNTcuLjkzZGZiNzggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMywzICszLDQgQEAKIHJ1bl9jbWFrZShGcm9tUEFUSEVudikKIHJ1bl9jbWFrZShGcm9tUHJlZml4UGF0aCkKIHJ1bl9jbWFrZShQcmVmaXhJblBBVEgpCitydW5fY21ha2UoUmVxdWlyZWQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvRnJvbVBBVEhFbnYtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9Gcm9tUEFUSEVudi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTBlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvRnJvbVBBVEhFbnYtc3RkZXJyLnR4dApAQCAtMCwwICsxLDI4IEBACisgIGZpbmRfbGlicmFyeSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBDUkVBVEVEX0xJQlJBUlkKKyAgICBOQU1FUzogXCJjcmVhdGVkXCIKKyAgICAgICAgICAgXCJjcmVhdGVkX25vX2V4aXN0XCIKKyAgICBEb2N1bWVudGF0aW9uLioKKyAgICBGcmFtZXdvcmsuKgorICAgIEFwcEJ1bmRsZS4qCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSDogMAorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRIOiAxCisKKyAgZmluZF9saWJyYXJ5IGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6LioKKyAgVGhlIGl0ZW0gd2FzIG5vdCBmb3VuZC4qCisgIGZpbmRfbGlicmFyeSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBDUkVBVEVEX0xJQlJBUlkKKyAgICBOQU1FUzogXCJjcmVhdGVkXCIKKyAgICBEb2N1bWVudGF0aW9uLioKKyAgICBGcmFtZXdvcmsuKgorICAgIEFwcEJ1bmRsZS4qCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRIOiAxCisKKyAgZmluZF9saWJyYXJ5IGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6LioKKyAgVGhlIGl0ZW0gd2FzIGZvdW5kIGF0LioKKy4qbGliL2xpYmNyZWF0ZWQuYQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0Zyb21QQVRIRW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0Zyb21QQVRIRW52LmNtYWtlCmluZGV4IGZlYzA0MWQuLmMyNGU2NDAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9Gcm9tUEFUSEVudi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvRnJvbVBBVEhFbnYuY21ha2UKQEAgLTQsNiArNCwxOSBAQAogZmlsZShNQUtFX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQogZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYi9saWJjcmVhdGVkLmEiICJjcmVhdGVkIikKIAorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAxKQorc2V0KENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIIE9GRikKKworc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYiIpCitmaW5kX2xpYnJhcnkoQ1JFQVRFRF9MSUJSQVJZIE5BTUVTIGNyZWF0ZWQgY3JlYXRlZF9ub19leGlzdCkKKworc2V0KENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIIE9OKQorCitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliIikKK2ZpbmRfbGlicmFyeShDUkVBVEVEX0xJQlJBUlkgTkFNRVMgY3JlYXRlZCkKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgMCkKKworCiBmb3JlYWNoKHBhdGggIi9kb2VzX25vdF9leGlzdCIgIi9saWIiICIiKQogICB1bnNldChDUkVBVEVEX0xJQlJBUlkgQ0FDSEUpCiAgIHNldChFTlZ7UEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7cGF0aH0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1ByZWZpeEluUEFUSC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1ByZWZpeEluUEFUSC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjRjODQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUHJlZml4SW5QQVRILXN0ZGVyci50eHQKQEAgLTAsMCArMSwxNCBAQAorICBmaW5kX2xpYnJhcnkgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBzZXR0aW5nczouKgorICAgIFZBUjogUHJlZml4SW5QQVRIX0xJQlJBUlkKKyAgICBOQU1FUzogXCJQcmVmaXhJblBBVEhcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX2xpYnJhcnkgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorLiovZG9lc19ub3RfZXhpc3QuKgorICBUaGUgaXRlbSB3YXMgbm90IGZvdW5kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUHJlZml4SW5QQVRILmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1ByZWZpeEluUEFUSC5jbWFrZQppbmRleCBmMWI4YjE4Li5lMjdkMzYyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUHJlZml4SW5QQVRILmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9QcmVmaXhJblBBVEguY21ha2UKQEAgLTIsNiArMiwxMiBAQAogbGlzdChBUFBFTkQgQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5hKQogCiBzZXQoRU5WX1BBVEggIiRFTlZ7UEFUSH0iKQorCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIDEpCitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZG9lc19ub3RfZXhpc3QiKQorZmluZF9saWJyYXJ5KFByZWZpeEluUEFUSF9MSUJSQVJZIE5BTUVTIFByZWZpeEluUEFUSCkKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgMCkKKwogZm9yZWFjaChwYXRoICIvZG9lc19ub3RfZXhpc3QiICIiICIvYmluIiAiL3NiaW4iKQogICB1bnNldChQcmVmaXhJblBBVEhfTElCUkFSWSBDQUNIRSkKICAgc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9JHtwYXRofSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ZDE2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorQ01ha2UgRXJyb3IgYXQgUmVxdWlyZWQuY21ha2U6MTEgXChmaW5kX2xpYnJhcnlcKToKKyAgQ291bGQgbm90IGZpbmQgTElCX2RvTm90RXhpc3RzIHVzaW5nIHRoZSBmb2xsb3dpbmcgbmFtZXM6IGRvTm90RXhpc3RzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGFiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBMSUJfZXhpc3RzPSdbXiddKi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvbGliL2xpYlByZWZpeEluUEFUSC5hJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzlmODcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorbGlzdChBUFBFTkQgQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTIGxpYikKK2xpc3QoQVBQRU5EIENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAuYSkKK2ZpbmRfbGlicmFyeShMSUJfZXhpc3RzCisgIE5BTUVTIFByZWZpeEluUEFUSAorICBQQVRIUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbGliCisgIE5PX0RFRkFVTFRfUEFUSAorICBSRVFVSVJFRAorICApCittZXNzYWdlKFNUQVRVUyAiTElCX2V4aXN0cz0nJHtMSUJfZXhpc3RzfSciKQorCitmaW5kX2xpYnJhcnkoTElCX2RvTm90RXhpc3RzCisgIE5BTUVTIGRvTm90RXhpc3RzCisgIFJFUVVJUkVECisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDY0M2E1YjkuLmI2YWFkY2UgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNywzICs3LDQgQEAKICAgcnVuX2NtYWtlKExpYkFyY2hMaW5rKQogZW5kaWYoKQogcnVuX2NtYWtlKFByZWZpeEluUEFUSCkKK3J1bl9jbWFrZShSZXF1aXJlZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9Gcm9tUEFUSEVudi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0Zyb21QQVRIRW52LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1ZjA1ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9Gcm9tUEFUSEVudi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0NNYWtlIERlYnVnIExvZyBhdCBGcm9tUEFUSEVudi5jbWFrZTo1IFwoZmluZF9wYWNrYWdlXCk6CisgIGZpbmRfcGFja2FnZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgcGF0aHMgZm9yIFJlc29sdmVkLmNtYWtlLioKKy4qL01vZHVsZXMvRmluZFJlc29sdmVkLmNtYWtlLioKKyAgVGhlIGZpbGUgd2FzIG5vdCBmb3VuZC4qCisgIDxQYWNrYWdlTmFtZT5fUk9PVCBDTWFrZSB2YXJpYWJsZS4qCisgIENNQUtFX1BSRUZJWF9QQVRIIHZhcmlhYmxlLioKKyAgQ01BS0VfRlJBTUVXT1JLX1BBVEggYW5kIENNQUtFX0FQUEJVTkRMRV9QQVRIIHZhcmlhYmxlcy4qCisgIEVudiB2YXJpYWJsZSBSZXNvbHZlZF9ESVIuKgorICBDTUFLRV9QUkVGSVhfUEFUSCBlbnYgdmFyaWFibGUuKgorICBQYXRocyBzcGVjaWZpZWQgYnkgdGhlIGZpbmRfcGFja2FnZSBISU5UUyBvcHRpb24uKgorICBTdGFuZGFyZCBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzLioKKy4qVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL1BhY2thZ2VSb290LioKKyAgQ01ha2UgVXNlciBQYWNrYWdlIFJlZ2lzdHJ5LioKKyAgQ01ha2UgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIFBsYXRmb3JtIGZpbGUuKgorICBDTWFrZSBTeXN0ZW0gUGFja2FnZSBSZWdpc3RyeS4qCisgIFBhdGhzIHNwZWNpZmllZCBieSB0aGUgZmluZF9wYWNrYWdlIFBBVEhTIG9wdGlvbi4qCisgIGZpbmRfcGFja2FnZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zIGZvciB0aGUgQ29uZmlnIG1vZHVsZTouKgorLipUZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvUGFja2FnZVJvb3QvUmVzb2x2ZWRDb25maWdcLmNtYWtlLioKKyAgVGhlIGZpbGUgd2FzIGZvdW5kIGF0LioKKy4qVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL1BhY2thZ2VSb290L1Jlc29sdmVkQ29uZmlnXC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0Zyb21QQVRIRW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0Zyb21QQVRIRW52LmNtYWtlCmluZGV4IDQ4MjJiMTMuLmNlYjc5YjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9Gcm9tUEFUSEVudi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvRnJvbVBBVEhFbnYuY21ha2UKQEAgLTEsNCArMSwxMCBAQAogc2V0KEVOVl9QQVRIICIkRU5We1BBVEh9IikKKworc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSBPTikKK3NldChFTlZ7UEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9QYWNrYWdlUm9vdCIpCitmaW5kX3BhY2thZ2UoUmVzb2x2ZWQgUVVJRVQpCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIE9GRikKKwogZm9yZWFjaChwYXRoICIvZG9lc19ub3RfZXhpc3QiICIvUGFja2FnZVJvb3QiICIiKQogICB1bnNldChSZXNvbHZlZF9GT1VORCBDQUNIRSkKICAgc2V0KFJlc29sdmVkX0RJUiAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9NaXNzaW5nQ29uZmlnRGVidWctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9NaXNzaW5nQ29uZmlnRGVidWctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzliZjdhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL01pc3NpbmdDb25maWdEZWJ1Zy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTggQEAKKyAgPFBhY2thZ2VOYW1lPl9ST09UIENNYWtlIHZhcmlhYmxlLioKKyAgQ01BS0VfUFJFRklYX1BBVEggdmFyaWFibGUuKgorICBDTUFLRV9GUkFNRVdPUktfUEFUSCBhbmQgQ01BS0VfQVBQQlVORExFX1BBVEggdmFyaWFibGVzLioKKyAgRW52IHZhcmlhYmxlIE5vdEhlcmVfRElSLioKKyAgQ01BS0VfUFJFRklYX1BBVEggZW52IHZhcmlhYmxlLioKKyAgU3RhbmRhcmQgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4qCisgIENNYWtlIFVzZXIgUGFja2FnZSBSZWdpc3RyeS4qCisgIENNYWtlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBQbGF0Zm9ybSBmaWxlLioKKyAgQ01ha2UgU3lzdGVtIFBhY2thZ2UgUmVnaXN0cnkuKgorICBQYXRocyBzcGVjaWZpZWQgYnkgdGhlIGZpbmRfcGFja2FnZSBQQVRIUyBvcHRpb24uKgorLioKKyAgICAuKk5vdEhlcmVDb25maWcuY21ha2UKKyAgICAuKm5vdGhlcmUtY29uZmlnLmNtYWtlCisuKgorQ01ha2UgV2FybmluZyBhdCBNaXNzaW5nQ29uZmlnRGVidWcuY21ha2U6MyBcKG1lc3NhZ2VcKToKKyAgVGhpcyB3YXJuaW5nIG11c3QgYmUgcmVhY2hhYmxlLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9NaXNzaW5nQ29uZmlnRGVidWcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ0NvbmZpZ0RlYnVnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2JiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ0NvbmZpZ0RlYnVnLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSBPTikKK2ZpbmRfcGFja2FnZShOb3RIZXJlIENPTkZJRykKK21lc3NhZ2UoV0FSTklORyAiVGhpcyB3YXJuaW5nIG11c3QgYmUgcmVhY2hhYmxlLiIpCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIE9GRikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDIwOGY4M2MuLjUxODYyOTcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTMsNiArMTMsNyBAQAogcnVuX2NtYWtlKE1pc3NpbmdNb2R1bGUpCiBydW5fY21ha2UoTWlzc2luZ01vZHVsZVJlcXVpcmVkKQogcnVuX2NtYWtlKE1pc3NpbmdDb25maWcpCitydW5fY21ha2UoTWlzc2luZ0NvbmZpZ0RlYnVnKQogcnVuX2NtYWtlKE1pc3NpbmdDb25maWdPbmVOYW1lKQogcnVuX2NtYWtlKE1pc3NpbmdDb25maWdSZXF1aXJlZCkKIHJ1bl9jbWFrZShNaXNzaW5nQ29uZmlnVmVyc2lvbikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9Gcm9tUEFUSEVudi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL0Zyb21QQVRIRW52LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4ZWZkNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9Gcm9tUEFUSEVudi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjcgQEAKKyAgZmluZF9wYXRoIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6LioKKyAgICBWQVI6IFBBVEhfSU5fRU5WX1BBVEgKKyAgICBOQU1FUzogXCJQcmVmaXhJblBBVEhcLmhcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAwCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX3BhdGggY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorICBUaGUgaXRlbSB3YXMgbm90IGZvdW5kLioKKyAgZmluZF9wYXRoIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6LioKKyAgICBWQVI6IFBBVEhfSU5fRU5WX1BBVEgKKyAgICBOQU1FUzogXCJQcmVmaXhJblBBVEhcLmhcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX3BhdGggY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorICBUaGUgaXRlbSB3YXMgZm91bmQgYXQuKgorLippbmNsdWRlL1ByZWZpeEluUEFUSC4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvRnJvbVBBVEhFbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvRnJvbVBBVEhFbnYuY21ha2UKaW5kZXggYWYxM2QwOS4uNTM1ZTYyNCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL0Zyb21QQVRIRW52LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9Gcm9tUEFUSEVudi5jbWFrZQpAQCAtMSw0ICsxLDE2IEBACiBzZXQoRU5WX1BBVEggIiRFTlZ7UEFUSH0iKQorCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIDEpCitzZXQoQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEggT0ZGKQorCitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5jbHVkZSIpCitmaW5kX3BhdGgoUEFUSF9JTl9FTlZfUEFUSCBOQU1FUyBQcmVmaXhJblBBVEguaCkKKworc2V0KENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIIE9OKQorZmluZF9wYXRoKFBBVEhfSU5fRU5WX1BBVEggTkFNRVMgUHJlZml4SW5QQVRILmgpCisKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgMCkKKwogZm9yZWFjaChwYXRoICIvZG9lc19ub3RfZXhpc3QiICIvaW5jbHVkZSIgIiIpCiAgIHVuc2V0KFBBVEhfSU5fRU5WX1BBVEggQ0FDSEUpCiAgIHNldChFTlZ7UEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSR7cGF0aH0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjVjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK0NNYWtlIEVycm9yIGF0IFJlcXVpcmVkLmNtYWtlOjkgXChmaW5kX3BhdGhcKToKKyAgQ291bGQgbm90IGZpbmQgUEFUSF9kb05vdEV4aXN0cyB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGVzOiBkb05vdEV4aXN0cy5oCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWZjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBQQVRIX2V4aXN0cz0nW14nXSovVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL2luY2x1ZGUnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyZGMxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitmaW5kX3BhdGgoUEFUSF9leGlzdHMKKyAgTkFNRVMgUHJlZml4SW5QQVRILmgKKyAgUEFUSFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUKKyAgTk9fREVGQVVMVF9QQVRICisgIFJFUVVJUkVECisgICkKK21lc3NhZ2UoU1RBVFVTICJQQVRIX2V4aXN0cz0nJHtQQVRIX2V4aXN0c30nIikKKworZmluZF9wYXRoKFBBVEhfZG9Ob3RFeGlzdHMKKyAgTkFNRVMgZG9Ob3RFeGlzdHMuaAorICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBlZDU1ZjUxLi41YzkxOWJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTMsNiArMyw3IEBACiBydW5fY21ha2UoRW1wdHlPbGRTdHlsZSkKIHJ1bl9jbWFrZShGcm9tUEFUSEVudikKIHJ1bl9jbWFrZShQcmVmaXhJblBBVEgpCitydW5fY21ha2UoUmVxdWlyZWQpCiAKIGlmKEFQUExFKQogICBydW5fY21ha2UoRnJhbWV3b3Jrc1dpdGhTdWJkaXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0VudkFuZEhpbnRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vRW52QW5kSGludHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUxMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0VudkFuZEhpbnRzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyOCBAQAorICBmaW5kX3Byb2dyYW0gY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBzZXR0aW5nczouKgorICAgIFZBUjogUFJPRworICAgIE5BTUVTOiBcInRlc3RBYW5kQlwiCisgICAgRG9jdW1lbnRhdGlvbi4qCisgICAgRnJhbWV3b3JrLioKKyAgICBBcHBCdW5kbGUuKgorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSDogMQorCisgIGZpbmRfcHJvZ3JhbSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOi4qCisgIFRoZSBpdGVtIHdhcyBmb3VuZCBhdC4qCisuKnRlc3RBYW5kQgorLioKKyAgZmluZF9wcm9ncmFtIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6LioKKyAgICBWQVI6IFBST0cKKyAgICBOQU1FUzogXCJ0ZXN0QWFuZEJcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAwCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX3Byb2dyYW0gY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorICBUaGUgaXRlbSB3YXMgbm90IGZvdW5kLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9FbnZBbmRIaW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9FbnZBbmRIaW50cy5jbWFrZQppbmRleCAwZjEyZWZmLi5iZWVkODczIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vRW52QW5kSGludHMuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0VudkFuZEhpbnRzLmNtYWtlCkBAIC0xLDQgKzEsNSBAQAogCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIDEpCiBzZXQoRU5WX1BBVEggIiRFTlZ7UEFUSH0iKQogc2V0KEVOVntQQVRIfSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQSkKIGZpbmRfcHJvZ3JhbShQUk9HCkBAIC0xMyw2ICsxNCw3IEBACiAgICkKIG1lc3NhZ2UoU1RBVFVTICJQUk9HPScke1BST0d9JyIpCiB1bnNldChQUk9HIENBQ0hFKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAwKQogCiBmaW5kX3Byb2dyYW0oUFJPRwogICBOQU1FUyB0ZXN0QWFuZEIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRhOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBSZXF1aXJlZC5jbWFrZTo5IFwoZmluZF9wcm9ncmFtXCk6CisgIENvdWxkIG5vdCBmaW5kIFBST0dfQWFuZEIgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogdGVzdEFhbmRCCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGYxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBQUk9HX0E9J1teJ10qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9BL3Rlc3RBJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NWFhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorZmluZF9wcm9ncmFtKFBST0dfQQorICBOQU1FUyB0ZXN0QQorICBQQVRIUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQQorICBOT19ERUZBVUxUX1BBVEgKKyAgUkVRVUlSRUQKKyAgKQorbWVzc2FnZShTVEFUVVMgIlBST0dfQT0nJHtQUk9HX0F9JyIpCisKK2ZpbmRfcHJvZ3JhbShQUk9HX0FhbmRCCisgIE5BTUVTIHRlc3RBYW5kQgorICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2OTAzZjA1Li4wZmY5YTk3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQsNiArNCw3IEBACiBydW5fY21ha2UoRGlyc1Blck5hbWUpCiBydW5fY21ha2UoTmFtZXNQZXJEaXIpCiBydW5fY21ha2UoUmVsQW5kQWJzUGF0aCkKK3J1bl9jbWFrZShSZXF1aXJlZCkKIAogaWYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiXihXaW5kb3dzfENZR1dJTikkIikKICAgcnVuX2NtYWtlKFdpbmRvd3NDb20pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDRiNzRjZmUuLjIyYTBhNzUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDMgKzEsMjEgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKIHJ1bl9jbWFrZShCYWRSYW5nZUluRnVuY3Rpb24pCitydW5fY21ha2UoZm9yZWFjaC1hbGwtdGVzdCkKK3J1bl9jbWFrZShmb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QpCitydW5fY21ha2UoZm9yZWFjaC1aSVBfTElTVFMtdGVzdCkKK3J1bl9jbWFrZShmb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QpCitydW5fY21ha2UoZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdCkKK3J1bl9jbWFrZShmb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtWklQX0xJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEpCitydW5fY21ha2UoZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMikKK3J1bl9jbWFrZShmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xKQorcnVuX2NtYWtlKGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMSkKK3J1bl9jbWFrZShmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTIpCitydW5fY21ha2UoZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xKQorcnVuX2NtYWtlKGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMikKK3J1bl9jbWFrZShmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMpCitydW5fY21ha2UoZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3NGJiMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtSVRFTVMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2U6MSBcKGZvcmVhY2hcKToKKyAgSVRFTVMgb3IgTElTVFMgcmVxdWlyZSBleGFjdGx5IG9uZSBpdGVyYXRpb24gdmFyaWFibGUKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQzM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChvbmUgdHdvIElOIElURU1TIG9uZSB0d28pCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Q1YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1JVEVNUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZToxIFwoZm9yZWFjaFwpOgorICBaSVBfTElTVFMgY2FuIG5vdCBiZSB1c2VkIHdpdGggTElTVFMgb3IgSVRFTVMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA5OWEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChpIElOIElURU1TIG9uZSB0d28gdGhyZWUgWklQX0xJU1RTIGJsYWgpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmY4M2MyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZToxIFwoZm9yZWFjaFwpOgorICBJVEVNUyBvciBMSVNUUyByZXF1aXJlIGV4YWN0bHkgb25lIGl0ZXJhdGlvbiB2YXJpYWJsZQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjM4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKG9uZSB0d28gSU4gTElTVFMgb25lIHR3bykKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjhkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLUxJU1RTLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LmNtYWtlOjEgXChmb3JlYWNoXCk6CisgIFpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTE5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGkgSU4gTElTVFMgb25lIHR3byB0aHJlZSBaSVBfTElTVFMgYmxhaCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmVmZGMxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLWludmFsaWQtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0XC5jbWFrZTpbMC05XSsgXChmb3JlYWNoXCk6CisgIGZvcmVhY2ggY2FsbGVkIHdpdGggaW5jb3JyZWN0IHJhbmdlIHNwZWNpZmljYXRpb246IHN0YXJ0IDIsIHN0b3AgMSwgc3RlcCAxCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOGVhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChhIFJBTkdFIDIgMSAxKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzNTVkYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTFcLmNtYWtlOlswLTldKyBcKGZvcmVhY2hcKToKKyAgZm9yZWFjaCBJbnZhbGlkIGludGVnZXI6ICdiJworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyZmJkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goYSBSQU5HRSBiKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODdmZmMxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTFcLmNtYWtlOlswLTldKyBcKGZvcmVhY2hcKToKKyAgZm9yZWFjaCBJbnZhbGlkIGludGVnZXI6ICdiJworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0xLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWM4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goYSBSQU5HRSBiIDEpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwY2M3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMlwuY21ha2U6WzAtOV0rIFwoZm9yZWFjaFwpOgorICBmb3JlYWNoIEludmFsaWQgaW50ZWdlcjogJ2InCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyYWViOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0yLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChhIFJBTkdFIDEgYikKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwM2ZlOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xXC5jbWFrZTpbMC05XSsgXChmb3JlYWNoXCk6CisgIGZvcmVhY2ggSW52YWxpZCBpbnRlZ2VyOiAnYicKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDozIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E0ODhkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTEuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGEgUkFOR0UgYiAxIDEpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWM2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMlwuY21ha2U6WzAtOV0rIFwoZm9yZWFjaFwpOgorICBmb3JlYWNoIEludmFsaWQgaW50ZWdlcjogJ2InCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxMTlkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0yLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChhIFJBTkdFIDEgYiAxKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTllNjJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTNcLmNtYWtlOlswLTldKyBcKGZvcmVhY2hcKToKKyAgZm9yZWFjaCBJbnZhbGlkIGludGVnZXI6ICdiJworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWJkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goYSBSQU5HRSAxIDEgYikKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTFlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0xLmNtYWtlOjEgXChmb3JlYWNoXCk6CisgIEV4cGVjdGVkIDMgbGlzdCB2YXJpYWJsZXMsIGJ1dCBnaXZlbiA0CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YjZjYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2gobGVzcyB0aGFuIGxpc3RzIElOIFpJUF9MSVNUUyBsaXN0XzEgbGlzdF8yIGxpc3RfMyBsaXN0XzQpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjZiNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMi5jbWFrZToxIFwoZm9yZWFjaFwpOgorICBFeHBlY3RlZCAzIGxpc3QgdmFyaWFibGVzLCBidXQgZ2l2ZW4gMgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGQ5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTIuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGdyZWF0ZXIgdGhhbiBsaXN0cyBJTiBaSVBfTElTVFMgbGlzdF8xIGxpc3RfMikKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDlkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZG91dC50eHQKQEAgLTAsMCArMSw2IEBACistLSBmb3JlYWNoXChcLlwuXC4gSU4gWklQX0xJU1RTXCk6CistLSAgIEJlZ2luIG91dHB1dAorLS0gICB8IG9uZSwgc2F0dSwgcmF6CistLSAgIHwgdHdvLCBkdWEsIGR2YQorLS0gICB8IHRocmVlLCB0aWdhLCB0cmkKKy0tICAgRW5kIG91dHB1dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0N2RlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2UKQEAgLTAsMCArMSw0MiBAQAorZnVuY3Rpb24oZm9yZWFjaFRlc3QgcmVzdWx0IGxpc3RfdmFyXzEgbGlzdF92YXJfMiBsaXN0X3Zhcl8zKQorICAgIHNldChfb3B0aW9ucyBNVVRFKQorICAgIHNldChfb25lX3ZhbHVlX2FyZ3MpCisgICAgc2V0KF9tdWx0aV92YWx1ZV9hcmdzKQorICAgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhQQVJTRV9BUkdWIDMgX2FyZyAiJHtfb3B0aW9uc30iICIke19vbmVfdmFsdWVfYXJnc30iICIke19tdWx0aV92YWx1ZV9hcmdzfSIpCisKKyAgICBzZXQoX2hhc19hbnlfb3V0cHV0IEZBTFNFKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICJ8ICIpCisgICAgZm9yZWFjaChmaXJzdCBzZWNvbmQgdGhpcmQgSU4gWklQX0xJU1RTICR7bGlzdF92YXJfMX0gJHtsaXN0X3Zhcl8yfSAke2xpc3RfdmFyXzN9KQorICAgICAgICBpZihOT1QgZmlyc3QpCisgICAgICAgICAgICBzZXQoZmlyc3QgIlt1bmRlZmllbmRdIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZihOT1Qgc2Vjb25kKQorICAgICAgICAgICAgc2V0KHNlY29uZCAiW3VuZGVmaWVuZF0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGlmKE5PVCB0aGlyZCkKKyAgICAgICAgICAgIHNldCh0aGlyZCAiW3VuZGVmaWVuZF0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGlmKE5PVCBfYXJnX01VVEUpCisgICAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtmaXJzdH0sICR7c2Vjb25kfSwgJHt0aGlyZH0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHNldChfaGFzX2FueV9vdXRwdXQgVFJVRSkKKyAgICBlbmRmb3JlYWNoKCkKKyAgICBzZXQoJHtyZXN1bHR9ICR7X2hhc19hbnlfb3V0cHV0fSBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKGZvcmVhY2hUZXN0RGVjb3JhdGVkIGxpc3RfdmFyXzEgbGlzdF92YXJfMiBsaXN0X3Zhcl8zKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgICIpCisgICAgbWVzc2FnZShTVEFUVVMgIkJlZ2luIG91dHB1dCIpCisgICAgZm9yZWFjaFRlc3QoX2hhc19hbnlfb3V0cHV0ICR7bGlzdF92YXJfMX0gJHtsaXN0X3Zhcl8yfSAke2xpc3RfdmFyXzN9KQorICAgIGlmKE5PVCBfaGFzX2FueV9vdXRwdXQpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICItLT4gZW1wdHktb3V0cHV0IDwtLSIpCisgICAgZW5kaWYoKQorICAgIG1lc3NhZ2UoU1RBVFVTICJFbmQgb3V0cHV0IikKK2VuZGZ1bmN0aW9uKCkKKworbGlzdChBUFBFTkQgZW5nbGlzaCBvbmUgdHdvIHRocmVlKQorbGlzdChBUFBFTkQgYmFoYXNhIHNhdHUgZHVhIHRpZ2EpCitsaXN0KEFQUEVORCBydXNzaWFuIHJheiBkdmEgdHJpKQorCittZXNzYWdlKFNUQVRVUyAiZm9yZWFjaCguLi4gSU4gWklQX0xJU1RTKToiKQorZm9yZWFjaFRlc3REZWNvcmF0ZWQoZW5nbGlzaCBiYWhhc2EgcnVzc2lhbikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtdGVzdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy10ZXN0LXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0MzNmZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTkgQEAKKy0tIGZvcmVhY2hcKElOIFpJUF9MSVNUU1wpOgorLS0gICA8PDwgZW1wdHkgbGlzdHMgY2FzZSA+Pj4KKy0tICAgICBCZWdpbiBvdXRwdXQKKy0tICAgICAtLT4gZW1wdHktb3V0cHV0IDwtLQorLS0gICAgIEVuZCBvdXRwdXQKKy0tICAgPDw8IHNhbWUgbGVuZ3RocyBsaXN0cyBjYXNlID4+PgorLS0gICAgIEJlZ2luIG91dHB1dAorLS0gICAgIHwgb25lLCBzYXR1LCByYXoKKy0tICAgICB8IHR3bywgZHVhLCBkdmEKKy0tICAgICB8IHRocmVlLCB0aWdhLCB0cmkKKy0tICAgICBFbmQgb3V0cHV0CistLSAgIDw8PCBkaWZmZXJlbnQgbGVuZ3RocyBsaXN0cyBjYXNlID4+PgorLS0gICAgIEJlZ2luIG91dHB1dAorLS0gICAgIHwgb25lLCBzYXR1LCByYXoKKy0tICAgICB8IHR3bywgZHVhLCBkdmEKKy0tICAgICB8IHRocmVlLCB0aWdhLCB0cmkKKy0tICAgICB8IFxbdW5kZWZpZW5kXF0sIGVtcGF0LCBcW3VuZGVmaWVuZFxdCistLSAgICAgRW5kIG91dHB1dAorLS0gICA8PDwgdGVzdCB2YXJpYWJsZSB2YWx1ZSByZXN0b3JlZCAtLSBQQVNTRUQgPj4+CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZmU2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtdGVzdC5jbWFrZQpAQCAtMCwwICsxLDY4IEBACitmdW5jdGlvbihmb3JlYWNoVGVzdCByZXN1bHQgbGlzdF92YXJfMSBsaXN0X3Zhcl8yIGxpc3RfdmFyXzMpCisgICAgc2V0KF9vcHRpb25zIE1VVEUpCisgICAgc2V0KF9vbmVfdmFsdWVfYXJncykKKyAgICBzZXQoX211bHRpX3ZhbHVlX2FyZ3MpCisgICAgY21ha2VfcGFyc2VfYXJndW1lbnRzKFBBUlNFX0FSR1YgMyBfYXJnICIke19vcHRpb25zfSIgIiR7X29uZV92YWx1ZV9hcmdzfSIgIiR7X211bHRpX3ZhbHVlX2FyZ3N9IikKKworICAgIHNldChfaGFzX2FueV9vdXRwdXQgRkFMU0UpCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgInwgIikKKyAgICBmb3JlYWNoKG51bSBJTiBaSVBfTElTVFMgJHtsaXN0X3Zhcl8xfSAke2xpc3RfdmFyXzJ9ICR7bGlzdF92YXJfM30pCisgICAgICAgIGZvcmVhY2goaSBSQU5HRSAyKQorICAgICAgICAgICAgaWYoTk9UIG51bV8ke2l9KQorICAgICAgICAgICAgICAgIHNldChudW1fJHtpfSAiW3VuZGVmaWVuZF0iKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgICAgaWYoTk9UIF9hcmdfTVVURSkKKyAgICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke251bV8wfSwgJHtudW1fMX0sICR7bnVtXzJ9IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBzZXQoX2hhc19hbnlfb3V0cHV0IFRSVUUpCisgICAgZW5kZm9yZWFjaCgpCisgICAgc2V0KCR7cmVzdWx0fSAke19oYXNfYW55X291dHB1dH0gUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihmb3JlYWNoVGVzdERlY29yYXRlZCBsaXN0X3Zhcl8xIGxpc3RfdmFyXzIgbGlzdF92YXJfMykKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICAiKQorICAgIG1lc3NhZ2UoU1RBVFVTICJCZWdpbiBvdXRwdXQiKQorICAgIGZvcmVhY2hUZXN0KF9oYXNfYW55X291dHB1dCAke2xpc3RfdmFyXzF9ICR7bGlzdF92YXJfMn0gJHtsaXN0X3Zhcl8zfSkKKyAgICBpZihOT1QgX2hhc19hbnlfb3V0cHV0KQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiLS0+IGVtcHR5LW91dHB1dCA8LS0iKQorICAgIGVuZGlmKCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiRW5kIG91dHB1dCIpCitlbmRmdW5jdGlvbigpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIFpJUF9MSVNUUyk6IikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgICIpCisKK3NldChlbmdsaXNoKQorc2V0KGJhaGFzYSkKK3NldChydXNzaWFuKQorCittZXNzYWdlKFNUQVRVUyAiPDw8IGVtcHR5IGxpc3RzIGNhc2UgPj4+IikKK2ZvcmVhY2hUZXN0RGVjb3JhdGVkKGVuZ2xpc2ggYmFoYXNhIHJ1c3NpYW4pCisKK2xpc3QoQVBQRU5EIGVuZ2xpc2ggb25lIHR3byB0aHJlZSkKK2xpc3QoQVBQRU5EIGJhaGFzYSBzYXR1IGR1YSB0aWdhKQorbGlzdChBUFBFTkQgcnVzc2lhbiByYXogZHZhIHRyaSkKKworbWVzc2FnZShTVEFUVVMgIjw8PCBzYW1lIGxlbmd0aHMgbGlzdHMgY2FzZSA+Pj4iKQorZm9yZWFjaFRlc3REZWNvcmF0ZWQoZW5nbGlzaCBiYWhhc2EgcnVzc2lhbikKKworbGlzdChBUFBFTkQgYmFoYXNhIGVtcGF0KQorCittZXNzYWdlKFNUQVRVUyAiPDw8IGRpZmZlcmVudCBsZW5ndGhzIGxpc3RzIGNhc2UgPj4+IikKK2ZvcmVhY2hUZXN0RGVjb3JhdGVkKGVuZ2xpc2ggYmFoYXNhIHJ1c3NpYW4pCisKK3NldChudW1fMCAib2xkLTAiKQorc2V0KG51bV8xICJvbGQtMSIpCitzZXQobnVtXzIgIm9sZC0yIikKK2ZvcmVhY2hUZXN0KF8gZW5nbGlzaCBiYWhhc2EgcnVzc2lhbiBNVVRFKQorc2V0KGNoZWNrIFBBU1NFRCkKK2ZvcmVhY2goaSBSQU5HRSAyKQorICAgIGlmKE5PVCAiJHtudW1fJHtpfX0iIFNUUkVRVUFMICJvbGQtJHtpfSIpCisgICAgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAibnVtXyR7aX0gdmFsdWUgaXMgY29ycnVwdGVkIikKKyAgICAgICAgc2V0KGNoZWNrIEZBSUxFRCkKKyAgICBlbmRpZigpCitlbmRmb3JlYWNoKCkKK21lc3NhZ2UoU1RBVFVTICI8PDwgdGVzdCB2YXJpYWJsZSB2YWx1ZSByZXN0b3JlZCAtLSAke2NoZWNrfSA+Pj4iKQorCitsaXN0KFBPUF9CQUNLIENNQUtFX01FU1NBR0VfSU5ERU5UKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtSVRFTVMtbWl4LXRlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2FiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtSVRFTVMtbWl4LXRlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVpJUF9MSVNUUy13aXRoLUlURU1TLW1peC10ZXN0LmNtYWtlOjEgXChmb3JlYWNoXCk6CisgIFpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUlURU1TLW1peC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUlURU1TLW1peC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWQ4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtSVRFTVMtbWl4LXRlc3QuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGkgSU4gWklQX0xJU1RTIGJsYWggSVRFTVMgYmxhaCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1MSVNUUy1taXgtdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1MSVNUUy1taXgtdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1MSVNUUy1taXgtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjZlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0LmNtYWtlOjEgXChmb3JlYWNoXCk6CisgIFpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTk3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3QuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGkgSU4gWklQX0xJU1RTIGJsYWggTElTVFMgYmxhaCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtYWxsLXRlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY2MjJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LXN0ZG91dC50eHQKQEAgLTAsMCArMSw0NCBAQAorLS0gZm9yZWFjaFwoUkFOR0VcKToKKy0tICAgXFswXC5cLjFcXS8xCistLSAgICAgPCAwCistLSAgICAgPCAxCistLSAgIFxbMVwuXC4xXF0vMQorLS0gICAgIDwgMQorLS0gICBcWzBcLlwuMTBcXS8yCistLSAgICAgPCAwCistLSAgICAgPCAyCistLSAgICAgPCA0CistLSAgICAgPCA2CistLSAgICAgPCA4CistLSAgICAgPCAxMAorLS0gICBcWy0xMFwuXC4wXF0vMworLS0gICAgIDwgLTEwCistLSAgICAgPCAtNworLS0gICAgIDwgLTQKKy0tICAgICA8IC0xCistLSAgIFxbMFwuXC4tMTBcXS8tNQorLS0gICAgIDwgMAorLS0gICAgIDwgLTUKKy0tICAgICA8IC0xMAorLS0gZm9yZWFjaFwoSU4gSVRFTVNcKToKKy0tICAgPCBvbmUKKy0tICAgPCB0d28KKy0tICAgPCB0aHJlZQorLS0gZm9yZWFjaFwoSU4gTElTVFNcKToKKy0tICAgPCBzYXR1CistLSAgIDwgZHVhCistLSAgIDwgdGlnYQorLS0gZm9yZWFjaFwoSU4gTElTVFMgYW5kIElURU1TXCk6CistLSAgIDwgc2F0dQorLS0gICA8IGR1YQorLS0gICA8IHRpZ2EKKy0tICAgPCBvbmUKKy0tICAgPCB0d28KKy0tICAgPCB0aHJlZQorLS0gZm9yZWFjaFwoSU4gSVRFTVMgYW5kIExJU1RTXCk6CistLSAgIDwgb25lCistLSAgIDwgdHdvCistLSAgIDwgdGhyZWUKKy0tICAgPCBzYXR1CistLSAgIDwgZHVhCistLSAgIDwgdGlnYQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMzc3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtYWxsLXRlc3QuY21ha2UKQEAgLTAsMCArMSw2NyBAQAorbWVzc2FnZShTVEFUVVMgImZvcmVhY2goUkFOR0UpOiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICAiKQorCittZXNzYWdlKFNUQVRVUyAiWzAuLjFdLzEiKQorbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgPCAiKQorZm9yZWFjaChpIFJBTkdFIDEpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKworbWVzc2FnZShTVEFUVVMgIlsxLi4xXS8xIikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBSQU5HRSAxIDEpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKworbWVzc2FnZShTVEFUVVMgIlswLi4xMF0vMiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICA8ICIpCitmb3JlYWNoKGkgUkFOR0UgMCAxMCAyKQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJbLTEwLi4wXS8zIikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBSQU5HRSAtMTAgMCAzKQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJbMC4uLTEwXS8tNSIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICA8ICIpCitmb3JlYWNoKGkgUkFOR0UgMCAtMTAgLTUpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIElURU1TKToiKQorbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgPCAiKQorZm9yZWFjaChpIElOIElURU1TIG9uZSB0d28gdGhyZWUpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKworbWVzc2FnZShTVEFUVVMgImZvcmVhY2goSU4gTElTVFMpOiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICA8ICIpCitsaXN0KEFQUEVORCBjb3VudCBzYXR1IGR1YSB0aWdhKQorZm9yZWFjaChpIElOIExJU1RTIGNvdW50KQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIExJU1RTIGFuZCBJVEVNUyk6IikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBJTiBMSVNUUyBjb3VudCBJVEVNUyBvbmUgdHdvIHRocmVlKQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIElURU1TIGFuZCBMSVNUUyk6IikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBJTiBJVEVNUyBvbmUgdHdvIHRocmVlIExJU1RTIGNvdW50KQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViYzg5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04tc3Rkb3V0LnR4dApAQCAtMCwwICsxLDcgQEAKK2Z1bmN0aW9uXChwcmludF9zZWxmXCkKKyAgICBmaWxlXChTVFJJTkdTICJcJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRX0iIF9saW5lc1wpCisgICAgbWF0aFwoRVhQUiBfYmVnaW4gIlwke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FfSAtIDEiXCkKKyAgICBsaXN0XChTVUJMSVNUIF9saW5lcyBcJHtfYmVnaW59IDcgX2xpbmVzXCkgIyBUaGlzIGZ1bmN0aW9uIGhhcyA3IGxpbmVzIG9ubHkKKyAgICBsaXN0XChKT0lOIF9saW5lcyAiXFxuIiBfbGluZXNcKQorICAgIG1lc3NhZ2VcKFNUQVRVUyAiUHJpbnQgdGhlIGBcJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OfWAgZnVuY3Rpb246XFxuXCR7X2xpbmVzfSJcKQorZW5kZnVuY3Rpb25cKFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGMwMzJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZQpAQCAtMCwwICsxLDk0IEBACitzZXQoX1RISVNfRklMRSAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQorc2V0KF9USElTX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCisKK2lmKENNQUtFX0NVUlJFTlRfRlVOQ1RJT04pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05gIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEVgIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQoraWYoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQorCitmdW5jdGlvbihiYXIpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OIFNUUkVRVUFMICJiYXIiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFIE1BVENIRVMgIl4uKi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLmNtYWtlJCIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFIFNUUkVRVUFMIF9USElTX0ZJTEUpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVIgTUFUQ0hFUyAiXi4qL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uJCIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJgIikKKyAgZW5kaWYoKQorICBpZihOT1QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUiBTVFJFUVVBTCBfVEhJU19ESVIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJgIikKKyAgZW5kaWYoKQorICBpZihOT1QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUgRVFVQUwgMTcpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oZm9vKQorICBpZihOT1QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTiBTVFJFUVVBTCAiZm9vIikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTmAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBNQVRDSEVTICJeLiovZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZSQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBTVFJFUVVBTCBfVEhJU19GSUxFKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIE1BVENIRVMgIl4uKi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbiQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FIEVRVUFMIDM4KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIFNUUkVRVUFMIF9USElTX0RJUikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAiKQorICBlbmRpZigpCisgIGJhcigpCitlbmRmdW5jdGlvbigpCisKK2ZvbygpCisKK2lmKENNQUtFX0NVUlJFTlRfRlVOQ1RJT04pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05gIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEVgIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQoraWYoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0R1bW15TWFjcm8uY21ha2UiKQorCitmdW5jdGlvbihjYWxsaW5nX21hY3JvKQorICBkdW1teSgpCitlbmRmdW5jdGlvbigpCisKK2NhbGxpbmdfbWFjcm8oKQorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwMDcgTkVXKQorCisjIEFUVEVOVElPTiBgQ01BS0VfQ1VSUkVOVF9MSVNUX0xJTkVgIGNhbid0IGJlIHVzZWQgaW4gYG1hdGgoKScKK2Z1bmN0aW9uKHByaW50X3NlbGYpCisgICAgZmlsZShTVFJJTkdTICIke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFfSIgX2xpbmVzKQorICAgIG1hdGgoRVhQUiBfYmVnaW4gIiR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkV9IC0gMSIpCisgICAgbGlzdChTVUJMSVNUIF9saW5lcyAke19iZWdpbn0gNyBfbGluZXMpICMgVGhpcyBmdW5jdGlvbiBoYXMgNyBsaW5lcyBvbmx5CisgICAgbGlzdChKT0lOIF9saW5lcyAiXG4iIF9saW5lcykKKyAgICBtZXNzYWdlKFNUQVRVUyAiUHJpbnQgdGhlIGAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT059YCBmdW5jdGlvbjpcbiR7X2xpbmVzfSIpCitlbmRmdW5jdGlvbigpCisKK3ByaW50X3NlbGYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMyZmZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vRHVtbXlNYWNyby5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL0R1bW15TWFjcm8uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiNTNlNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL0R1bW15TWFjcm8uY21ha2UKQEAgLTAsMCArMSwyMCBAQAorbWFjcm8oZHVtbXkpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OIFNUUkVRVUFMICJjYWxsaW5nX21hY3JvIikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTmAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBNQVRDSEVTICJeLiovZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZSQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBTVFJFUVVBTCBfVEhJU19GSUxFKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIE1BVENIRVMgIl4uKi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbiQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FIEVRVUFMIDc3KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIFNUUkVRVUFMIF9USElTX0RJUikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAiKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmNDhhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMDZhMGM2Ny4uNmUzNjQ3MyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yNyw3ICsyNyw3IEBACiAjIGRvbid0IHJlbHkgb24gUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRyBiZWluZyBzZXQgY29ycmVjdGx5CiAjIGFuZCBpbnN0ZWFkIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGEgbWF0Y2ggYWdhaW5zdCB0aG9zZSBnZW5lcmF0b3JzIHdlCiAjIGV4cGVjdCB0byBiZSBtdWx0aS1jb25maWcKLWlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvfFhjb2RlIikKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvfFhjb2RlfE5pbmphIE11bHRpLUNvbmZpZyIpCiAgIHJ1bl9jbWFrZShJc011bHRpQ29uZmlnKQogZWxzZSgpCiAgIHJ1bl9jbWFrZShOb3RNdWx0aUNvbmZpZykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA0N2RhYzM0Li43ZWQwNzczIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01LDMgKzUsNyBAQAogcnVuX2NtYWtlKEN1c3RvbVR5cGVQbGF0Zm9ybSkKIHJ1bl9jbWFrZShDdXN0b21HdWlkVHlwZVBsYXRmb3JtKQogcnVuX2NtYWtlKEN1c3RvbUNvbmZpZykKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8gKFteOV18OVswLTldKSIpCisgIHJ1bl9jbWFrZShTa2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1NraXBHZXRUYXJnZXRGcmFtZXdvcmtQcm9wZXJ0aWVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvU2tpcEdldFRhcmdldEZyYW1ld29ya1Byb3BlcnRpZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1YjIzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1NraXBHZXRUYXJnZXRGcmFtZXdvcmtQcm9wZXJ0aWVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjEgQEAKK2ZpbGUoUkVBRCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0FMTF9CVUlMRC52Y3hwcm9qIiBhbGxfYnVpbGQpCisKK21hY3JvKHByb2plY3RfcmVmZXJlbmNlIEVYVEVSTkFMX1BST0pFQ1QpCisgIHN0cmluZyhSRUdFWCBNQVRDSAorICAgICI8UHJvamVjdFJlZmVyZW5jZS5JbmNsdWRlPS4keyR7RVhURVJOQUxfUFJPSkVDVH19Lj4uKjwvU2tpcEdldFRhcmdldEZyYW1ld29ya1Byb3BlcnRpZXM+IgorICAgIEVuZE9mUHJvamVjdFJlZmVyZW5jZQorICAgICR7YWxsX2J1aWxkfQorICAgICkKK2VuZG1hY3JvKCkKKworc2V0KGV4dGVybmFsX3Byb2plY3QgImV4dGVybmFsLnByb2plY3QiKQorcHJvamVjdF9yZWZlcmVuY2UoZXh0ZXJuYWxfcHJvamVjdCkKK2lmKE5PVCAke0VuZE9mUHJvamVjdFJlZmVyZW5jZX0gTUFUQ0hFUyAiLio8L1Byb2plY3RSZWZlcmVuY2U+IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke3Rlc3R9IGlzIGJlaW5nIHNldCB1bmV4cGVjdGVkbHkuIikKK2VuZGlmKCkKKworc2V0KGV4dGVybmFsX3Byb2plY3QgImV4dGVybmFsLmNzcHJvaiIpCitwcm9qZWN0X3JlZmVyZW5jZShleHRlcm5hbF9wcm9qZWN0KQoraWYoJHtFbmRPZlByb2plY3RSZWZlcmVuY2V9IE1BVENIRVMgIi4qPC9Qcm9qZWN0UmVmZXJlbmNlPiIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHt0ZXN0fSBpcyBub3Qgc2V0LiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9Ta2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1NraXBHZXRUYXJnZXRGcmFtZXdvcmtQcm9wZXJ0aWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjBiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9Ta2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcy5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0KGV4dGVybmFsMSBleHRlcm5hbC5wcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHVUlEIGFhYS1iYmItY2NjLTAwMCkKKworaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QoZXh0ZXJuYWwyIGV4dGVybmFsLmNzcHJvagorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1VJRCBhYWEtYmJiLWNjYy0wMDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDIxYzMyMGIuLjcwNTcwYjcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xNTYsMTAgKzE1NiwxMiBAQAogcnVuX2luc3RhbGxfdGVzdChJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXMpCiAKIGlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkRhcndpbiIpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtdW5yZXNvbHZlZCkKLSAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdCkKLSAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlKQorICBpZihOT1QgQ01ha2VfSU5TVEFMTF9OQU1FX1RPT0xfQlVHKQorICAgIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MpCisgICAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy11bnJlc29sdmVkKQorICAgIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtY29uZmxpY3QpCisgICAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlKQorICBlbmRpZigpCiAgIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1wcm9qZWN0KQogICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEpCiAgIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvVEFSR0VUUy1GSUxFX1JQQVRIX0NIQU5HRS1uZXdfcnBhdGgtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvVEFSR0VUUy1GSUxFX1JQQVRIX0NIQU5HRS1uZXdfcnBhdGgtc3RkZXJyLnR4dAppbmRleCAxZTEyM2Y2Li4yNTYxMjYzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL1RBUkdFVFMtRklMRV9SUEFUSF9DSEFOR0UtbmV3X3JwYXRoLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9UQVJHRVRTLUZJTEVfUlBBVEhfQ0hBTkdFLW5ld19ycGF0aC1zdGRlcnIudHh0CkBAIC0xLDQgKzEsNCBAQAotXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBUQVJHRVRTLUZJTEVfUlBBVEhfQ0hBTkdFLW5ld19ycGF0aFwuY21ha2U6WzAtOV0rIFwoaW5zdGFsbFwpOgorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFRBUkdFVFMtRklMRV9SUEFUSF9DSEFOR0UtbmV3X3JwYXRoXC5jbWFrZTpbMC05XSsgXChpbnN0YWxsXCk6CiAgIFBvbGljeSBDTVAwMDk1IGlzIG5vdCBzZXQ6IFJQQVRIIGVudHJpZXMgYXJlIHByb3Blcmx5IGVzY2FwZWQgaW4gdGhlCiAgIGludGVybWVkaWFyeSBDTWFrZSBpbnN0YWxsIHNjcmlwdFwuICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kgQ01QMDA5NSIgZm9yCiAgIHBvbGljeSBkZXRhaWxzXC4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8gc2V0IHRoZSBwb2xpY3kgYW5kCkBAIC0yMCw0ICsyMCw0IEBACiAgIGludGVybWVkaWFyeSBjbWFrZV9pbnN0YWxsXC5jbWFrZSBzY3JpcHRcLgogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQotVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnNcLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0XC4kCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9OZXdGb3JtX1Byb2plY3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL05ld0Zvcm1fUHJvamVjdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2E0NTBiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9OZXdGb3JtX1Byb2plY3QuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorbG9hZF9jYWNoZSgke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vLi4vdGVzdF9wcm9qZWN0IFJFQURfV0lUSF9QUkVGSVggTE9BRF9DQUNIRV9URVNUXworICBDQUNIRV9TVFJJTkcKKyAgQ0FDSEVfQk9PTAorICBDQUNIRV9JTlRFUk5BTCkKKworaWYoTk9UIExPQURfQ0FDSEVfVEVTVF9DQUNIRV9TVFJJTkcgU1RSRVFVQUwgImNhY2hlIHN0cmluZyIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX1NUUklORzogd2FzICR7Q0FDSEVfU1RSSU5HfSwgZXhwZWN0ZWQgXCJjYWNoZSBzdHJpbmdcIiIpCitlbmRpZigpCisKK2lmKE5PVCBMT0FEX0NBQ0hFX1RFU1RfQ0FDSEVfQk9PTCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ0FDSEVfQk9PTDogd2FzIGZhbHNleSwgZXhwZWN0ZWQgT04iKQorZW5kaWYoKQorCitpZihOT1QgTE9BRF9DQUNIRV9URVNUX0NBQ0hFX0lOVEVSTkFMIFNUUkVRVUFMICJjYWNoZSBpbnRlcm5hbCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX0lOVEVSTkFMOiB3YXMgJHtDQUNIRV9JTlRFTlJBTH0sIGV4cGVjdGVkIFwiY2FjaGUgaW50ZXJuYWxcIiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL05ld0Zvcm1fU2NyaXB0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9OZXdGb3JtX1NjcmlwdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NlZTkyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9OZXdGb3JtX1NjcmlwdC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitsb2FkX2NhY2hlKCR7UnVuQ01ha2VfQklOQVJZX0RJUn0vdGVzdF9wcm9qZWN0IFJFQURfV0lUSF9QUkVGSVggTE9BRF9DQUNIRV9URVNUXworICBDQUNIRV9TVFJJTkcKKyAgQ0FDSEVfQk9PTAorICBDQUNIRV9JTlRFUk5BTCkKKworaWYoTk9UIExPQURfQ0FDSEVfVEVTVF9DQUNIRV9TVFJJTkcgU1RSRVFVQUwgImNhY2hlIHN0cmluZyIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX1NUUklORzogd2FzICR7Q0FDSEVfU1RSSU5HfSwgZXhwZWN0ZWQgXCJjYWNoZSBzdHJpbmdcIiIpCitlbmRpZigpCisKK2lmKE5PVCBMT0FEX0NBQ0hFX1RFU1RfQ0FDSEVfQk9PTCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ0FDSEVfQk9PTDogd2FzIGZhbHNleSwgZXhwZWN0ZWQgT04iKQorZW5kaWYoKQorCitpZihOT1QgTE9BRF9DQUNIRV9URVNUX0NBQ0hFX0lOVEVSTkFMIFNUUkVRVUFMICJjYWNoZSBpbnRlcm5hbCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX0lOVEVSTkFMOiB3YXMgJHtDQUNIRV9JTlRFTlJBTH0sIGV4cGVjdGVkIFwiY2FjaGUgaW50ZXJuYWxcIiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvT2xkRm9ybV9TY3JpcHQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDVjODAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL09sZEZvcm1fU2NyaXB0LXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACiteQ01ha2UgRXJyb3IgYXQuKi9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL09sZEZvcm1fU2NyaXB0LmNtYWtlOjEgXChsb2FkX2NhY2hlXCk6CisgIGxvYWRfY2FjaGUgT25seSBsb2FkX2NhY2hlXChSRUFEX1dJVEhfUFJFRklYXCkgbWF5IGJlIHVzZWQgaW4gc2NyaXB0IG1vZGUkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL09sZEZvcm1fU2NyaXB0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTYwZjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitsb2FkX2NhY2hlKCR7UnVuQ01ha2VfQklOQVJZX0RJUn0vdGVzdF9wcm9qZWN0IElOQ0xVREVfSU5URVJOQUxTIENBQ0hFX0lOVEVSTkFMKQorCitpZihOT1QgQ0FDSEVfU1RSSU5HIFNUUkVRVUFMICJjYWNoZSBzdHJpbmciKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDQUNIRV9TVFJJTkc6IHdhcyAke0NBQ0hFX1NUUklOR30sIGV4cGVjdGVkIFwiY2FjaGUgc3RyaW5nXCIiKQorZW5kaWYoKQorCitpZihOT1QgQ0FDSEVfQk9PTCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ0FDSEVfQk9PTDogd2FzIGZhbHNleSwgZXhwZWN0ZWQgT04iKQorZW5kaWYoKQorCitpZihOT1QgQ0FDSEVfSU5URVJOQUwgU1RSRVFVQUwgImNhY2hlIGludGVybmFsIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ0FDSEVfSU5URVJOQUw6IHdhcyAke0NBQ0hFX0lOVEVOUkFMfSwgZXhwZWN0ZWQgXCJjYWNoZSBpbnRlcm5hbFwiIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkNTRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2ZpbGUoV1JJVEUgJHtSdW5DTWFrZV9CSU5BUllfRElSfS90ZXN0X3Byb2plY3QvQ01ha2VDYWNoZS50eHQgW1sKK0NBQ0hFX1NUUklORzpTVFJJTkc9Y2FjaGUgc3RyaW5nCitDQUNIRV9CT09MOkJPT0w9T04KK0NBQ0hFX0lOVEVSTkFMOklOVEVSTkFMPWNhY2hlIGludGVybmFsCitdXSkKKworcnVuX2NtYWtlKE5ld0Zvcm1fUHJvamVjdCkKK3J1bl9jbWFrZV9jb21tYW5kKE5ld0Zvcm1fU2NyaXB0ICR7Q01BS0VfQ09NTUFORH0gLURSdW5DTWFrZV9CSU5BUllfRElSPSR7UnVuQ01ha2VfQklOQVJZX0RJUn0KKyAgLVAgIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vTmV3Rm9ybV9TY3JpcHQuY21ha2UiKQorcnVuX2NtYWtlX2NvbW1hbmQoT2xkRm9ybV9TY3JpcHQgJHtDTUFLRV9DT01NQU5EfSAtRFJ1bkNNYWtlX0JJTkFSWV9ESVI9JHtSdW5DTWFrZV9CSU5BUllfRElSfQorICAtUCAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9PbGRGb3JtX1NjcmlwdC5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDY4MTgzOWQuLjAzMTNlZDEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC02NSw2ICs2NSwxMSBAQAogZW5kZm9yZWFjaCgpCiAKIHJ1bl9jbWFrZV9jb21tYW5kKAorICAgIG1lc3NhZ2UtbG9nLWxldmVsLW92ZXJyaWRlCisgICAgJHtDTUFLRV9DT01NQU5EfSAtLWxvZy1sZXZlbD1kZWJ1ZyAtRENNQUtFX01FU1NBR0VfTE9HX0xFVkVMPVRSQUNFIC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vbWVzc2FnZS1hbGwtbG9nbGV2ZWxzLmNtYWtlCisgICkKKworcnVuX2NtYWtlX2NvbW1hbmQoCiAgICAgbWVzc2FnZS1pbmRlbnQKICAgICAke0NNQUtFX0NPTU1BTkR9IC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vbWVzc2FnZS1pbmRlbnQuY21ha2UKICAgKQpAQCAtNzIsMyArNzcsMjMgQEAKICAgICBtZXNzYWdlLWluZGVudC1tdWx0aWxpbmUKICAgICAke0NNQUtFX0NPTU1BTkR9IC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vbWVzc2FnZS1pbmRlbnQtbXVsdGlsaW5lLmNtYWtlCiAgICkKKworcnVuX2NtYWtlX2NvbW1hbmQoCisgICAgbWVzc2FnZS1jb250ZXh0LWNsaQorICAgICR7Q01BS0VfQ09NTUFORH0gLS1sb2ctbGV2ZWw9dHJhY2UgLS1sb2ctY29udGV4dCAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L21lc3NhZ2UtY29udGV4dC5jbWFrZQorICApCisKK3J1bl9jbWFrZV9jb21tYW5kKAorICAgIG1lc3NhZ2UtY29udGV4dC1jYWNoZQorICAgICR7Q01BS0VfQ09NTUFORH0gLURDTUFLRV9NRVNTQUdFX0xPR19MRVZFTD1UUkFDRSAtRENNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XPU9OIC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vbWVzc2FnZS1jb250ZXh0LmNtYWtlCisgICkKKworcnVuX2NtYWtlX2NvbW1hbmQoCisgICAgbWVzc2FnZS1jb250ZXh0LWNsaS13aW5zLWNhY2hlCisgICAgJHtDTUFLRV9DT01NQU5EfSAtLWxvZy1sZXZlbD12ZXJib3NlIC0tbG9nLWNvbnRleHQgLURDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPVz1PRkYgLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9tZXNzYWdlLWNvbnRleHQuY21ha2UKKyAgKQorCitydW5fY21ha2VfY29tbWFuZCgKKyAgICBtZXNzYWdlLWNoZWNrcworICAgICR7Q01BS0VfQ09NTUFORH0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9tZXNzYWdlLWNoZWNrcy5jbWFrZQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhY2RiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jaGVja3Mtc3RkZXJyLnR4dApAQCAtMCwwICsxLDMgQEAKK15DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQuKi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLmNtYWtlOjEzIFwobWVzc2FnZVwpOgorICBJZ25vcmVkIENIRUNLX0ZBSUwgd2l0aG91dCBDSEVDS19TVEFSVAorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWYyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMCBAQAorLS0gRmluZCBgbGliZm9vYAorLS0gTG9va2luZyBmb3IgYGxpYmZvb1wuaGAKKy0tIExvb2tpbmcgZm9yIGBsaWJmb29cLmhgIC0gZm91bmQgXFsvdXNyL2luY2x1ZGVcXQorLS0gTG9va2luZyBmb3IgYGxpYmZvb1wuc29gCistLSBMb29raW5nIGZvciBgbGliZm9vXC5zb2AgLSBmb3VuZCBcWy91c3IvbGliL2xpYmZvb1wuc29cXQorLS0gR2V0dGluZyBgbGliZm9vYCB2ZXJzaW9uCistLSBMb29raW5nIGZvciBgbGliZm9vL3ZlcnNpb25cLmhgCistLSBMb29raW5nIGZvciBgbGliZm9vL3ZlcnNpb25cLmhgIC0gZm91bmQKKy0tIEdldHRpbmcgYGxpYmZvb2AgdmVyc2lvbiAtIDFcLjJcLjMKKy0tIEZpbmQgYGxpYmZvb2AgLSByZXF1aXJlZCB2ZXJzaW9uIDRcLjVcLjYgYnV0IGZvdW5kIDFcLjJcLjMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jaGVja3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNTg0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK21lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkZpbmQgYGxpYmZvb2AiKQorbWVzc2FnZShDSEVDS19TVEFSVCAiTG9va2luZyBmb3IgYGxpYmZvby5oYCIpCittZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIFsvdXNyL2luY2x1ZGVdIikKK21lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yIGBsaWJmb28uc29gIikKK21lc3NhZ2UoQ0hFQ0tfUEFTUyAiZm91bmQgWy91c3IvbGliL2xpYmZvby5zb10iKQorbWVzc2FnZShDSEVDS19TVEFSVCAiR2V0dGluZyBgbGliZm9vYCB2ZXJzaW9uIikKK21lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yIGBsaWJmb28vdmVyc2lvbi5oYCIpCittZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKK21lc3NhZ2UoQ0hFQ0tfUEFTUyAiMS4yLjMiKQorbWVzc2FnZShDSEVDS19GQUlMICJyZXF1aXJlZCB2ZXJzaW9uIDQuNS42IGJ1dCBmb3VuZCAxLjIuMyIpCisKKyMgU2hvdWxkIGdlbmVyYXRlIGFuIGVycm9yLCBubyBhc3NvY2lhdGVkIENIRUNLX1NUQVJUCittZXNzYWdlKENIRUNLX0ZBSUwgInVubWF0Y2hlZCBjaGVjayBmYWlsIGNhc2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQtY2FjaGUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNhY2hlLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxOGMxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNhY2hlLXN0ZG91dC50eHQKQEAgLTAsMCArMSw4IEBACistLSBCZWdpbiBjb250ZXh0IG91dHB1dCB0ZXN0CistLSBcW3RvcFxdIFRvcDogYmVmb3JlCistLSBcW3RvcFwuZm9vXC5iYXJcXSA8LS0gaW5kZW50IC0tPmJhciBWRVJCT1NFIG1lc3NhZ2UKKy0tIFxbdG9wXC5mb29cXSBmb28gVFJBQ0UgbWVzc2FnZQorLS0gXFt0b3BcLmZvb1wuYmF6XF0gVGhpcyBpcyB0aGUgbXVsdGktbGluZQorXFt0b3BcLmZvb1wuYmF6XF0gYmF6IERFQlVHIG1lc3NhZ2UKKy0tIFxbdG9wXF0gVG9wOiBhZnRlcgorLS0gRW5kIG9mIGNvbnRleHQgb3V0cHV0IHRlc3QKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNsaS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQtY2xpLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxOGMxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNsaS1zdGRvdXQudHh0CkBAIC0wLDAgKzEsOCBAQAorLS0gQmVnaW4gY29udGV4dCBvdXRwdXQgdGVzdAorLS0gXFt0b3BcXSBUb3A6IGJlZm9yZQorLS0gXFt0b3BcLmZvb1wuYmFyXF0gPC0tIGluZGVudCAtLT5iYXIgVkVSQk9TRSBtZXNzYWdlCistLSBcW3RvcFwuZm9vXF0gZm9vIFRSQUNFIG1lc3NhZ2UKKy0tIFxbdG9wXC5mb29cLmJhelxdIFRoaXMgaXMgdGhlIG11bHRpLWxpbmUKK1xbdG9wXC5mb29cLmJhelxdIGJheiBERUJVRyBtZXNzYWdlCistLSBcW3RvcFxdIFRvcDogYWZ0ZXIKKy0tIEVuZCBvZiBjb250ZXh0IG91dHB1dCB0ZXN0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY29udGV4dC1jbGktd2lucy1jYWNoZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQtY2xpLXdpbnMtY2FjaGUtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTdkYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQtY2xpLXdpbnMtY2FjaGUtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDUgQEAKKy0tIEJlZ2luIGNvbnRleHQgb3V0cHV0IHRlc3QKKy0tIFxbdG9wXF0gVG9wOiBiZWZvcmUKKy0tIFxbdG9wXC5mb29cLmJhclxdIDwtLSBpbmRlbnQgLS0+YmFyIFZFUkJPU0UgbWVzc2FnZQorLS0gXFt0b3BcXSBUb3A6IGFmdGVyCistLSBFbmQgb2YgY29udGV4dCBvdXRwdXQgdGVzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY29udGV4dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Q0Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQuY21ha2UKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24oYmFyKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfQ09OVEVYVCAiYmFyIikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiPC0tIGluZGVudCAtLT4iKQorICAgIG1lc3NhZ2UoVkVSQk9TRSAiYmFyIFZFUkJPU0UgbWVzc2FnZSIpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKGJheikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0NPTlRFWFQgImJheiIpCisgICAgbWVzc2FnZShERUJVRyAiVGhpcyBpcyB0aGUgbXVsdGktbGluZVxuYmF6IERFQlVHIG1lc3NhZ2UiKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihmb28pCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9DT05URVhUICJmb28iKQorICAgIGJhcigpCisgICAgbWVzc2FnZShUUkFDRSAiZm9vIFRSQUNFIG1lc3NhZ2UiKQorICAgIGJheigpCitlbmRmdW5jdGlvbigpCisKK21lc3NhZ2UoU1RBVFVTICJCZWdpbiBjb250ZXh0IG91dHB1dCB0ZXN0IikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfQ09OVEVYVCAidG9wIikKKworbWVzc2FnZShTVEFUVVMgIlRvcDogYmVmb3JlIikKK2ZvbygpCittZXNzYWdlKFNUQVRVUyAiVG9wOiBhZnRlciIpCisKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9DT05URVhUKQorbWVzc2FnZShTVEFUVVMgIkVuZCBvZiBjb250ZXh0IG91dHB1dCB0ZXN0IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtZGVidWctc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtZGVidWctc3Rkb3V0LnR4dAppbmRleCAxNDUyMTM3Li5mZWVlMTEwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLWRlYnVnLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWJ1Zy1zdGRvdXQudHh0CkBAIC0xLDMgKzEsMyBAQAogLS0gU1RBVFVTIG1lc3NhZ2UKIC0tIFZFUkJPU0UgbWVzc2FnZQotLS0gREVCVUcgbWVzc2FnZQorLS0gREVCVUcgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtZGVmYXVsdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKaW5kZXggODA5ZjRjYy4uYjVkNmFjYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKQEAgLTEgKzEgQEAKLS0tIFNUQVRVUyBtZXNzYWdlCistLSBTVEFUVVMgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtb3ZlcnJpZGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtb3ZlcnJpZGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmVjNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTIgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0LiovVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWFsbC1sb2dsZXZlbHNcLmNtYWtlOjIgXChtZXNzYWdlXCk6CisgIERlcHJlY2F0aW9uIHdhcm5pbmcKKysKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdC4qL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1hbGwtbG9nbGV2ZWxzXC5jbWFrZTozIFwobWVzc2FnZVwpOgorICBBdXRob3Igd2FybmluZyBtZXNzYWdlCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLgorKworQ01ha2UgV2FybmluZyBhdC4qL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1hbGwtbG9nbGV2ZWxzXC5jbWFrZTo0IFwobWVzc2FnZVwpOgorICBXYXJuaW5nIG1lc3NhZ2UKKysKK0RlZmF1bHQgTk9USUNFIG1lc3NhZ2UKK05PVElDRSBtZXNzYWdlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZWUxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLW92ZXJyaWRlLXN0ZG91dC50eHQKQEAgLTAsMCArMSwzIEBACistLSBTVEFUVVMgbWVzc2FnZQorLS0gVkVSQk9TRSBtZXNzYWdlCistLSBERUJVRyBtZXNzYWdlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtc3RhdHVzLXN0ZG91dC50eHQKaW5kZXggODA5ZjRjYy4uYjVkNmFjYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXN0YXR1cy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBTVEFUVVMgbWVzc2FnZQorLS0gU1RBVFVTIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXRyYWNlLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXRyYWNlLXN0ZG91dC50eHQKaW5kZXggMWNmY2U2Zi4uM2QzNmE3ZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC10cmFjZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdHJhY2Utc3Rkb3V0LnR4dApAQCAtMSw0ICsxLDQgQEAKIC0tIFNUQVRVUyBtZXNzYWdlCiAtLSBWRVJCT1NFIG1lc3NhZ2UKIC0tIERFQlVHIG1lc3NhZ2UKLS0tIFRSQUNFIG1lc3NhZ2UKKy0tIFRSQUNFIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXZlcmJvc2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CmluZGV4IGMxNWQ0M2YuLjQ3YzA4NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CkBAIC0xLDIgKzEsMiBAQAogLS0gU1RBVFVTIG1lc3NhZ2UKLS0tIFZFUkJPU0UgbWVzc2FnZQorLS0gVkVSQk9TRSBtZXNzYWdlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLWRlYnVnLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVidWctc3Rkb3V0LnR4dAppbmRleCAxNDUyMTM3Li5mZWVlMTEwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVidWctc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVidWctc3Rkb3V0LnR4dApAQCAtMSwzICsxLDMgQEAKIC0tIFNUQVRVUyBtZXNzYWdlCiAtLSBWRVJCT1NFIG1lc3NhZ2UKLS0tIERFQlVHIG1lc3NhZ2UKKy0tIERFQlVHIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVmYXVsdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLWRlZmF1bHQtc3Rkb3V0LnR4dAppbmRleCA4MDlmNGNjLi5iNWQ2YWNiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVmYXVsdC1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKQEAgLTEgKzEgQEAKLS0tIFNUQVRVUyBtZXNzYWdlCistLSBTVEFUVVMgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dAppbmRleCA4MDlmNGNjLi5iNWQ2YWNiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtc3RhdHVzLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLXN0YXR1cy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBTVEFUVVMgbWVzc2FnZQorLS0gU1RBVFVTIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtdHJhY2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC10cmFjZS1zdGRvdXQudHh0CmluZGV4IDFjZmNlNmYuLjNkMzZhN2YgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC10cmFjZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC10cmFjZS1zdGRvdXQudHh0CkBAIC0xLDQgKzEsNCBAQAogLS0gU1RBVFVTIG1lc3NhZ2UKIC0tIFZFUkJPU0UgbWVzc2FnZQogLS0gREVCVUcgbWVzc2FnZQotLS0gVFJBQ0UgbWVzc2FnZQorLS0gVFJBQ0UgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC12ZXJib3NlLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CmluZGV4IGMxNWQ0M2YuLjQ3YzA4NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC12ZXJib3NlLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLXZlcmJvc2Utc3Rkb3V0LnR4dApAQCAtMSwyICsxLDIgQEAKIC0tIFNUQVRVUyBtZXNzYWdlCi0tLSBWRVJCT1NFIG1lc3NhZ2UKKy0tIFZFUkJPU0UgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWFhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4LmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uKGFzc2VydF9zdHJlcXVhbCBpbnB1dCBhY3R1YWwgZXhwZWN0ZWQpCisgIGlmKE5PVCBleHBlY3RlZCBTVFJFUVVBTCBhY3R1YWwpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJPdXRwdXQgZGlkIG5vdCBtYXRjaCBleHBlY3RlZFxuSW5wdXQgc3RyaW5nOlxuICAke2lucHV0fVxuRXhwZWN0ZWQ6XG4gICR7ZXhwZWN0ZWR9XG5BY3R1YWw6XG4gICR7YWN0dWFsfSIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworc2V0KF9pbnB1dDEgIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuIikKK3N0cmluZyhIRVggIiR7X2lucHV0MX0iIF9yZXN1bHQxKQorYXNzZXJ0X3N0cmVxdWFsKCIke19pbnB1dDF9IiAiJHtfcmVzdWx0MX0iICI1NDY4NjUyMDcxNzU2OTYzNmIyMDYyNzI2Zjc3NmUyMDY2NmY3ODIwNmE3NTZkNzA3MzIwNmY3NjY1NzIyMDc0Njg2NTIwNmM2MTdhNzkyMDY0NmY2NzJlIikKKworc2V0KF9pbnB1dDIgIkhlbGxvIHdvcmxkISIpCitzdHJpbmcoSEVYICIke19pbnB1dDJ9IiBfcmVzdWx0MikKK2Fzc2VydF9zdHJlcXVhbCgiJHtfaW5wdXQyfSIgIiR7X3Jlc3VsdDJ9IiAiNDg2NTZjNmM2ZjIwNzc2ZjcyNmM2NDIxIikKKworc2V0KF9pbnB1dDMgIkFzaCBuYXpnIGR1cmJhdHVsw7trXG5Bc2ggbmF6ZyBnaW1iYXR1bFxuQXNoIG5hemcgdGhyYWthdHVsw7trXG5BZ2ggYnVyenVtLWlzaGkga3JpbXBhdHVsIikKK3N0cmluZyhIRVggIiR7X2lucHV0M30iIF9yZXN1bHQzKQorYXNzZXJ0X3N0cmVxdWFsKCIke19pbnB1dDN9IiAiJHtfcmVzdWx0M30iICI0MTczNjgyMDZlNjE3YTY3MjA2NDc1NzI2MjYxNzQ3NTZjYzNiYjZiMGE0MTczNjgyMDZlNjE3YTY3MjA2NzY5NmQ2MjYxNzQ3NTZjMGE0MTczNjgyMDZlNjE3YTY3MjA3NDY4NzI2MTZiNjE3NDc1NmNjM2JiNmIwYTQxNjc2ODIwNjI3NTcyN2E3NTZkMmQ2OTczNjg2OTIwNmI3MjY5NmQ3MDYxNzQ3NTZjIikKKworc3RyaW5nKEhFWCAiIiBfcmVzdWx0X2VtcHR5KQorYXNzZXJ0X3N0cmVxdWFsKCIiICIke19yZXN1bHRfZW1wdHl9IiAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGY3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IEhleE5vdEVub3VnaEFyZ3NcLmNtYWtlOlswLTldKyBcKHN0cmluZ1wpOgorICBzdHJpbmcgSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDozIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAyYWYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3MuY21ha2UKQEAgLTAsMCArMSBAQAorc3RyaW5nKEhFWCAiSGVsbG8gd29ybGQhIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4VG9vTWFueUFyZ3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4VG9vTWFueUFyZ3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4VG9vTWFueUFyZ3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI0MGVkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgSGV4VG9vTWFueUFyZ3NcLmNtYWtlOlswLTldKyBcKHN0cmluZ1wpOgorICBzdHJpbmcgSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDozIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODZjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4VG9vTWFueUFyZ3MuY21ha2UKQEAgLTAsMCArMSBAQAorc3RyaW5nKEhFWCAiSGVsbG8gd29ybGQhIiBfb3V0cHV0IGJhZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGM0MzJiNGUuLmJiN2NiMTcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMzcsMyArMzcsNyBAQAogcnVuX2NtYWtlKFJlcGVhdCkKIHJ1bl9jbWFrZShSZXBlYXROb0FyZ3MpCiBydW5fY21ha2UoUmVwZWF0TmVnYXRpdmVDb3VudCkKKworcnVuX2NtYWtlKEhleCkKK3J1bl9jbWFrZShIZXhUb29NYW55QXJncykKK3J1bl9jbWFrZShIZXhOb3RFbm91Z2hBcmdzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9CRUZPUkVfa2V5d29yZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQkVGT1JFX2tleXdvcmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxNjIzMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQkVGT1JFX2tleXdvcmQuY21ha2UKQEAgLTAsMCArMSw4IEBACisKK2FkZF9leGVjdXRhYmxlIChDTVAwMTAxX09MRCBDTVAwMTAxLmMpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChtYWluIFBSSVZBVEUgLVVCRUZPUkVfS0VZV09SRCkKK3RhcmdldF9jb21waWxlX29wdGlvbnMgKG1haW4gQkVGT1JFIFBSSVZBVEUgLURCRUZPUkVfS0VZV09SRCkKKworYWRkX2V4ZWN1dGFibGUgKENNUDAxMDFfTkVXIENNUDAxMDEuYykKK3RhcmdldF9jb21waWxlX29wdGlvbnMgKG1haW4gUFJJVkFURSAtVUJFRk9SRV9LRVlXT1JEKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyAobWFpbiBCRUZPUkUgUFJJVkFURSAtREJFRk9SRV9LRVlXT1JEKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU5FVy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU5FVy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0NNUDAxMDEtQkVGT1JFX2tleXdvcmQtTkVXLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU9MRC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU9MRC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0NNUDAxMDEtQkVGT1JFX2tleXdvcmQtT0xELXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS1CRUZPUkVfa2V5d29yZC1PTEQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS1CRUZPUkVfa2V5d29yZC1PTEQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTBhYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU9MRC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK0JFRk9SRSBub3QgaG9ub3JlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzQyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0NNUDAxMDEtQkVGT1JFX2tleXdvcmQuY21ha2UKQEAgLTAsMCArMSwxNSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworY21ha2VfcG9saWN5IChTRVQgQ01QMDEwMSBPTEQpCisKK2FkZF9leGVjdXRhYmxlIChDTVAwMTAxX09MRCBDTVAwMTAxLmMpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChDTVAwMTAxX09MRCBQUklWQVRFIC1VQkVGT1JFX0tFWVdPUkQpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChDTVAwMTAxX09MRCBCRUZPUkUgUFJJVkFURSAtREJFRk9SRV9LRVlXT1JEKQorCisKK2NtYWtlX3BvbGljeSAoU0VUIENNUDAxMDEgTkVXKQorCithZGRfZXhlY3V0YWJsZSAoQ01QMDEwMV9ORVcgQ01QMDEwMS5jKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyAoQ01QMDEwMV9ORVcgUFJJVkFURSAtVUJFRk9SRV9LRVlXT1JEKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyAoQ01QMDEwMV9ORVcgQkVGT1JFIFBSSVZBVEUgLURCRUZPUkVfS0VZV09SRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwODY5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS5jCkBAIC0wLDAgKzEsOSBAQAorCisjaWYgZGVmaW5lZChCRUZPUkVfS0VZV09SRCkKKyMgIGVycm9yICJCRUZPUkUgbm90IGhvbm9yZWQiCisjZW5kaWYKKworaW50IG1haW4oKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggYjY3YzU5OC4uOWY1MWE5YSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsMyArMSwyMSBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAogcnVuX2NtYWtlKGVtcHR5X2tleXdvcmRfYXJncykKKworaWYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VfENsYW5nIikKKyAgbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke3Rlc3R9LWJ1aWxkKQorICAgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAxKQorICAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCisgIGVuZG1hY3JvKCkKKworICBydW5fY21ha2UoQ01QMDEwMS1CRUZPUkVfa2V5d29yZCkKKworICBydW5fY21ha2VfdGFyZ2V0KENNUDAxMDEtQkVGT1JFX2tleXdvcmQgT0xEIENNUDAxMDFfT0xEKQorICBydW5fY21ha2VfdGFyZ2V0KENNUDAxMDEtQkVGT1JFX2tleXdvcmQgTkVXIENNUDAxMDFfTkVXKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVctYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9DTVAwMDk5LU5FVy1iYXNpYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZmZGRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVctYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJESVJfSU5URVJGQUNFIikKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuTm90IGZvdW5kIGV4cGVjdGVkICdESVJfSU5URVJGQUNFJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVctYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkZDY4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTkgTkVXKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTVAwMDk5LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9DTVAwMDk5LU9MRC1iYXNpYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU3M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl9JTlRFUkZBQ0UiKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG5Gb3VuZCB1bmV4cGVjdGVkICdESVJfSU5URVJGQUNFJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQtYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYTRjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTkgT0xEKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTVAwMDk5LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMWUzMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTkuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK3NldChDTUFLRV9DX1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9MSUJSQVJJRVMgRkFMU0UpCisKK2FkZF9saWJyYXJ5KExpbmtEaXJzX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSAiL0RJUl9JTlRFUkZBQ0UiKQorCithZGRfbGlicmFyeShMaW5rRGlyc19zdGF0aWMgU1RBVElDIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rRGlyc19zdGF0aWMgUFJJVkFURSBMaW5rRGlyc19pbnRlcmZhY2UpCisKK2FkZF9leGVjdXRhYmxlKExpbmtEaXJzX2V4ZSBleGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0RpcnNfZXhlIFBSSVZBVEUgTGlua0RpcnNfc3RhdGljKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGI2N2M1OTguLjY5OWU4NzEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsMyArMSw0NCBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAorbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHt0ZXN0fS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKK2VuZG1hY3JvKCkKKwogcnVuX2NtYWtlKGVtcHR5X2tleXdvcmRfYXJncykKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIihOaW5qYXxNYWtlZmlsZXMpIiBBTkQKKyAgICBOT1QgUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIihOTWFrZXxCb3JsYW5kKSIpCisgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSBUUlVFKQorICBpZiAoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSkKKyAgZW5kaWYoKQorICBpZiAoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIikKKyAgICBzZXQoVkVSQk9TRSAtLSAtdikKKyAgZW5kaWYoKQorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgaW50ZXJmYWNlIExpbmtEaXJzX2V4ZV9pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgYmFzaWMgTGlua0RpcnNfZXhlX2MgLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgTElOS0VSX0xBTkdVQUdFIExpbmtEaXJzX2V4ZV9jeHggLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdfQU5EX0lEKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBpbnRlcmZhY2UgTGlua0RpcnNfZXhlX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBiYXNpYyBMaW5rRGlyc19leGVfYyAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBMSU5LRVJfTEFOR1VBR0UgTGlua0RpcnNfZXhlX2N4eCAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisKKworICBydW5fY21ha2UoQ01QMDA5OS1ORVcpCisgIHJ1bl9jbWFrZV90YXJnZXQoQ01QMDA5OS1ORVcgYmFzaWMgTGlua0RpcnNfZXhlICR7VkVSQk9TRX0pCisKKyAgcnVuX2NtYWtlKENNUDAwOTktT0xEKQorICBydW5fY21ha2VfdGFyZ2V0KENNUDAwOTktT0xEIGJhc2ljIExpbmtEaXJzX2V4ZSAke1ZFUkJPU0V9KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9leGUuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2V4ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODhmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9leGUuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM5ODEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxM2RlNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitzZXQgKFRZUEUgSU5URVJGQUNFKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg1NjRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKKworaWYgKE5PVCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCitpZiAoTk9UIFRZUEUpCisgIHNldCAoVFlQRSBFWEUpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJESVJfJHtWQUxJRF9MQU5HfV8ke1RZUEV9IikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdESVJfJHtWQUxJRF9MQU5HfV8ke1RZUEV9Jy4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiRElSXyR7SU5WQUxJRF9MQU5HfV8ke1RZUEV9IikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0RJUl8ke0lOVkFMSURfTEFOR31fJHtUWVBFfScuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjY2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorc2V0KENNQUtFX0NfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyBGQUxTRSkKK3NldChDTUFLRV9DWFhfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyBGQUxTRSkKKworYWRkX2xpYnJhcnkoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19pbnRlcmZhY2UgSU5URVJGQUNFICIkPCQ8TElOS19MQU5HVUFHRTpDPjovRElSX0NfSU5URVJGQUNFPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi9ESVJfQ1hYX0lOVEVSRkFDRT4iKQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfaW50ZXJmYWNlIGV4ZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rRGlyc19leGVfaW50ZXJmYWNlIFBSSVZBVEUgTGlua0RpcnNfaW50ZXJmYWNlKQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfYyBleGUuYykKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19leGVfYyBQUklWQVRFICIkPCQ8TElOS19MQU5HVUFHRTpDPjovRElSX0NfRVhFPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi9ESVJfQ1hYX0VYRT4iKQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfY3h4IGV4ZS5jKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgKExpbmtEaXJzX2V4ZV9jeHggUFJJVkFURSAiJDwkPExJTktfTEFOR1VBR0U6Qz46L0RJUl9DX0VYRT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46L0RJUl9DWFhfRVhFPiIpCitzZXRfcHJvcGVydHkgKFRBUkdFVCBMaW5rRGlyc19leGVfY3h4IFBST1BFUlRZIExJTktFUl9MQU5HVUFHRSBDWFgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGY4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIENYWCkKK3NldCAoSU5WQUxJRF9MQU5HIEMpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYXNpYy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkZGVlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzI4NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK3NldCAoVFlQRSBJTlRFUkZBQ0UpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzI5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyNiBAQAorCitpZiAoTk9UIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKK2lmIChOT1QgVFlQRSkKKyAgc2V0IChUWVBFIEVYRSkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl8ke1ZBTElEX0xBTkd9XyR7VFlQRX0iKQorICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0RJUl8ke1ZBTElEX0xBTkd9XyR7VFlQRX0nLlxuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl8ke0lOVkFMSURfTEFOR31fJHtUWVBFfSIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdESVJfJHtJTlZBTElEX0xBTkd9XyR7VFlQRX0gJy4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiRElSXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESURfJHtUWVBFfSIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdESVJfKCR7VkFMSURfTEFOR318JHtJTlZBTElEX0xBTkd9KV9CQURJRF8ke1RZUEV9Jy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYjM0MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKQEAgLTAsMCArMSwyOSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK3NldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCitzZXQoQ01BS0VfQ19VU0VfUkVTUE9OU0VfRklMRV9GT1JfTElCUkFSSUVTIEZBTFNFKQorc2V0KENNQUtFX0NYWF9VU0VfUkVTUE9OU0VfRklMRV9GT1JfTElCUkFSSUVTIEZBTFNFKQorCithZGRfbGlicmFyeShMaW5rRGlyc19pbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgKExpbmtEaXJzX2ludGVyZmFjZSBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjovRElSX0NfSU5URVJGQUNFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46L0RJUl9DWFhfSU5URVJGQUNFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46L0RJUl9DX0JBRElEX0lOVEVSRkFDRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46L0RJUl9DWFhfQkFESURfSU5URVJGQUNFPikKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2ludGVyZmFjZSBleGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0RpcnNfZXhlX2ludGVyZmFjZSBQUklWQVRFIExpbmtEaXJzX2ludGVyZmFjZSkKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2MgZXhlLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rRGlyc19leGVfYyBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46L0RJUl9DX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46L0RJUl9DWFhfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEJBRElEPjovRElSX0NfQkFESURfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+Oi9ESVJfQ1hYX0JBRElEX0VYRT4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtEaXJzX2V4ZV9jeHggZXhlLmMpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfZXhlX2N4eCBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46L0RJUl9DX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46L0RJUl9DWFhfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEJBRElEPjovRElSX0NfQkFESURfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+Oi9ESVJfQ1hYX0JBRElEX0VYRT4pCitzZXRfcHJvcGVydHkgKFRBUkdFVCBMaW5rRGlyc19leGVfY3h4IFBST1BFUlRZIExJTktFUl9MQU5HVUFHRSBDWFgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9saWIuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9saWIuYwpAQCAtMCwwICsxLDcgQEAKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBmbGFnc19saWIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1ORVctc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU5FVy1zdGRvdXQudHh0CmluZGV4IDg5Y2Q4MDYuLjFjNWNmNDUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU5FVy1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU5FVy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9J2Zvbzo6QDxbWHgwLTlBLUZhLWZdKz4nCistLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9Jzo6QFwoW1h4MC05QS1GYS1mXStcKTtcJDxcJDxDT05GSUc6REVCVUc+OlwkPDE6Zm9vO2Zvbz4+O1wkPFwkPE5PVDpcJDxDT05GSUc6REVCVUc+PjpcJDwxOmZvbztmb28+Pjs6OkAnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1PTEQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU9MRC1zdGRvdXQudHh0CmluZGV4IGU1NzVlMTYuLjRlYjA2ZDkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU9MRC1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU9MRC1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9J2ZvbycKKy0tIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUz0nXCQ8XCQ8Q09ORklHOkRFQlVHPjpcJDwxOmZvbztmb28+PjtcJDxcJDxOT1Q6XCQ8Q09ORklHOkRFQlVHPj46XCQ8MTpmb287Zm9vPj4nCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZGVyci50eHQKaW5kZXggNmRkN2QzMC4uNGMwOWExZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktaWZhY2UtV0FSTi1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLVdBUk4tc3RkZXJyLnR4dApAQCAtMTAsNyArMTAsMjUgQEAKICAgaXMgbm90IGNyZWF0ZWQgaW4gdGhpcyBkaXJlY3RvcnkuICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mCiAgIENNYWtlLCBsaW5rIGxpYnJhcnkKIAotICAgIGZvbworICAgIFwkPDE6Zm9vO2Zvbz4KKworICB3aWxsIGJlIGxvb2tlZCB1cCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSB0YXJnZXQgd2FzIGNyZWF0ZWQgcmF0aGVyCisgIHRoYW4gaW4gdGhpcyBjYWxsaW5nIGRpcmVjdG9yeS4KK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgorKworQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IENNUDAwNzktaWZhY2UvQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIFBvbGljeSBDTVAwMDc5IGlzIG5vdCBzZXQ6IHRhcmdldF9saW5rX2xpYnJhcmllcyBhbGxvd3MgdXNlIHdpdGggdGFyZ2V0cyBpbgorICBvdGhlciBkaXJlY3Rvcmllcy4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMDc5IiBmb3IgcG9saWN5IGRldGFpbHMuCisgIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8gc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworICBUYXJnZXQKKworICAgIHRvcAorCisgIGlzIG5vdCBjcmVhdGVkIGluIHRoaXMgZGlyZWN0b3J5LiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZgorICBDTWFrZSwgbGluayBsaWJyYXJ5CisKKyAgICBcJDwxOmZvbztmb28+CiAKICAgd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgdGFyZ2V0IHdhcyBjcmVhdGVkIHJhdGhlcgogICB0aGFuIGluIHRoaXMgY2FsbGluZyBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZG91dC50eHQKaW5kZXggZTU3NWUxNi4uNGViMDZkOSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktaWZhY2UtV0FSTi1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLVdBUk4tc3Rkb3V0LnR4dApAQCAtMSArMSBAQAotLS0gSU5URVJGQUNFX0xJTktfTElCUkFSSUVTPSdmb28nCistLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9J1wkPFwkPENPTkZJRzpERUJVRz46XCQ8MTpmb287Zm9vPj47XCQ8XCQ8Tk9UOlwkPENPTkZJRzpERUJVRz4+OlwkPDE6Zm9vO2Zvbz4+JwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktaWZhY2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS9DTWFrZUxpc3RzLnR4dAppbmRleCA0YjE1YjMyLi5lNDEwNjA3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS9DTWFrZUxpc3RzLnR4dApAQCAtMSArMSBAQAotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcCBJTlRFUkZBQ0UgZm9vKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcCBJTlRFUkZBQ0UgZGVidWcgIiQ8MTpmb287Zm9vPiIgb3B0aW1pemVkICIkPDE6Zm9vO2Zvbz4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktbGluay1ORVctYm9ndXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLXN0ZGVyci50eHQKaW5kZXggOGVmMzVjMS4uOWUzOGJlYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktbGluay1ORVctYm9ndXMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1ib2d1cy1zdGRlcnIudHh0CkBAIC0xLDUgKzEsNSBAQAogXkNNYWtlIEVycm9yIGF0IENNUDAwNzktbGluay1ORVctYm9ndXMuY21ha2U6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKLSAgVGFyZ2V0ICJ0b3AiIGxpbmtzIHRvIHRhcmdldCAiZm9vOjpAPDB4ZGVhZGJlZWY+IiBidXQgdGhlIHRhcmdldCB3YXMgbm90CisgIFRhcmdldCAidG9wIiBsaW5rcyB0byB0YXJnZXQgIjo6QFwoMHhkZWFkYmVlZlwpIiBidXQgdGhlIHRhcmdldCB3YXMgbm90CiAgIGZvdW5kLiAgUGVyaGFwcyBhIGZpbmRfcGFja2FnZVwoXCkgY2FsbCBpcyBtaXNzaW5nIGZvciBhbiBJTVBPUlRFRCB0YXJnZXQsIG9yCiAgIGFuIEFMSUFTIHRhcmdldCBpcyBtaXNzaW5nXD8KIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1ib2d1cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLmNtYWtlCmluZGV4IDg2MjJmMTQuLjg5MzI1MjEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLmNtYWtlCkBAIC0zLDQgKzMsNCBAQAogZW5hYmxlX2xhbmd1YWdlKEMpCiAKIGFkZF9leGVjdXRhYmxlKHRvcCBlbXB0eS5jKQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0b3AgQVBQRU5EIFBST1BFUlRZIExJTktfTElCUkFSSUVTICJmb286OkA8MHhkZWFkYmVlZj4iKQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0b3AgQVBQRU5EIFBST1BFUlRZIExJTktfTElCUkFSSUVTICI6OkAoMHhkZWFkYmVlZik7Zm9vOzo6QCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktbGluay1ORVctc3Rkb3V0LnR4dAppbmRleCA4NGIzMGJkLi5mYTVkNGEzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLXN0ZG91dC50eHQKQEAgLTEgKzEgQEAKLS0tIExJTktfTElCUkFSSUVTPSdmb286OkA8W1h4MC05QS1GYS1mXSs+JworLS0gTElOS19MSUJSQVJJRVM9Jzo6QFwoW1h4MC05QS1GYS1mXStcKTtmb287OjpAJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOGVlZDk4Ni4uZmIyMjNhYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yOCwzICsyOCw1NyBAQAogcnVuX2NtYWtlKFN0YXRpY1ByaXZhdGVEZXBOb3RUYXJnZXQpCiBydW5fY21ha2UoVU5LTk9XTi1JTVBPUlRFRC1HTE9CQUwpCiBydW5fY21ha2UoZW1wdHlfa2V5d29yZF9hcmdzKQorcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR1VBR0UtYmFkLXVzYWdlKQorCitpZiAoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk1ha2VmaWxlc3xOaW5qYXxWaXN1YWwgU3R1ZGlvfFhjb2RlfFdhdGNvbSBXTWFrZSIpCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR1VBR0UtYmFkLW1peC1sYW5nKQorICBydW5fY21ha2UoZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYWQtbWl4LWxhbmcpCisKKyAgbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke3Rlc3R9LWJ1aWxkKQorICAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCisgIGVuZG1hY3JvKCkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgVFJVRSkKKyAgaWYgKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UpCisgIGVuZGlmKCkKKworICBydW5fY21ha2UoZ2VuZXhfTElOS19MQU5HVUFHRSkKKworICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgbGliIExpbmtMaWJyYXJpZXNfbGliIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBsaWIyIExpbmtMaWJyYXJpZXNfbGliMiAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgbGliMyBMaW5rTGlicmFyaWVzX2xpYjMgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIGV4ZSBMaW5rTGlicmFyaWVzX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgQ19pbXBvcnQgTGlua0xpYnJhcmllc19DX2ltcG9ydCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgQ1hYX2ltcG9ydCBMaW5rTGlicmFyaWVzX0NYWF9pbXBvcnQgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIENfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIENYWF9pbnRlcmZhY2UgTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBDX2ludGVyZmFjZTIgTGlua0xpYnJhcmllc19DX2ludGVyZmFjZTIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIENYWF9pbnRlcmZhY2UyIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIENfc3RhdGljIExpbmtMaWJyYXJpZXNfQ19zdGF0aWMgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIENYWF9zdGF0aWMgTGlua0xpYnJhcmllc19DWFhfc3RhdGljIC0tY29uZmlnIFJlbGVhc2UpCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR19BTkRfSUQpCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGxpYiBMaW5rTGlicmFyaWVzX2xpYiAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgbGliMiBMaW5rTGlicmFyaWVzX2xpYjIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGxpYjMgTGlua0xpYnJhcmllc19saWIzIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBleGUgTGlua0xpYnJhcmllc19leGUgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIENfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIENYWF9pbXBvcnQgTGlua0xpYnJhcmllc19DWFhfaW1wb3J0IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBDX2ludGVyZmFjZSBMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBDWFhfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgQ19pbnRlcmZhY2UyIExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UyIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBDWFhfaW50ZXJmYWNlMiBMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UyIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBDWFhfc3RhdGljIExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyAtLWNvbmZpZyBSZWxlYXNlKQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCisKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9mdW5jLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZnVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWE5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZnVuYy5jCkBAIC0wLDAgKzEsNyBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZnVuYy5jeHggYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZnVuYy5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyY2FjYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9mdW5jLmN4eApAQCAtMCwwICsxLDcgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2N4eCgpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLW1peC1sYW5nLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLW1peC1sYW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhZC1taXgtbGFuZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLW1peC1sYW5nLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjZGMwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhZC1taXgtbGFuZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorQ01ha2UgRXJyb3I6IEV2YWx1YXRpb24gb2YgXCQ8TElOS19MQU5HVUFHRTouLi4+IG9yIFwkPExJTktfTEFORF9BTkRfSUQ6Li4uPiBjaGFuZ2VzCit0aGUgbGlua2VyIGxhbmd1YWdlIGZvciB0YXJnZXQgIkxpbmtMaWJyYXJpZXNfYmFkX21peF9sYW5ndWFnZXMiIFwoZnJvbSAnQycgdG8gJ0NYWCdcKSB3aGljaCBpcyBpbnZhbGlkLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLW1peC1sYW5nLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLW1peC1sYW5nLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWZhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYWQtbWl4LWxhbmcuY21ha2UKQEAgLTAsMCArMSw4IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworYWRkX2xpYnJhcnkoc3RhdGljX0NYWCBTVEFUSUMgZnVuYy5jeHgpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfYmFkX21peF9sYW5ndWFnZXMgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2JhZF9taXhfbGFuZ3VhZ2VzIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46c3RhdGljX0NYWD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLXVzYWdlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLXVzYWdlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhZC11c2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFkLXVzYWdlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5ZjFmZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhZC11c2FnZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOCBAQAorQ01ha2UgRXJyb3IgYXQgZ2VuZXhfTElOS19MQU5HVUFHRS1iYWQtdXNhZ2UuY21ha2U6NCBcKHRhcmdldF9saW5rX2xpYnJhcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFPiBpcyBub3Qgc3VwcG9ydGVkIGluIGxpbmsgbGlicmFyaWVzIGV4cHJlc3Npb24uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYWQtdXNhZ2UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYWQtdXNhZ2UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjZmIwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhZC11c2FnZS5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShzaW1wbGUgU0hBUkVEIGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoc2ltcGxlIFBSSVZBVEUgbGliJDxMSU5LX0xBTkdVQUdFPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmZTk1NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCkBAIC0wLDAgKzEsNzIgQEAKKworY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYuLi4zLjE3KQorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2FkZF9saWJyYXJ5KHNoYXJlZF9DIFNIQVJFRCBmdW5jLmMpCithZGRfbGlicmFyeShzaGFyZWRfQ1hYIFNIQVJFRCBmdW5jLmN4eCkKKworCithZGRfbGlicmFyeShzdGF0aWMxX0MgU1RBVElDIGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKHN0YXRpYzFfQyBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQorCithZGRfbGlicmFyeShzdGF0aWMyX0MgU1RBVElDIGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKHN0YXRpYzJfQyBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnNoYXJlZF9DPikKKworCitzZXQgKGJpbmFyeV9kaXIgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQorZ2V0X3Byb3BlcnR5IChpc19tdWx0aV9jb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZiAoaXNfbXVsdGlfY29uZmlnKQorICBzdHJpbmcgKEFQUEVORCBiaW5hcnlfZGlyICIvUmVsZWFzZSIpCitlbmRpZigpCithZGRfbGlicmFyeShpbXBvcnQgU1RBVElDIElNUE9SVEVEKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7YmluYXJ5X2Rpcn0vJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVh9c3RhdGljMV9DJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVh9IikKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW1wb3J0IElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4pCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGltcG9ydCBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjpzaGFyZWRfQ1hYPikKKworCithZGRfbGlicmFyeShpbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbnRlcmZhY2UgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnNoYXJlZF9DPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46c2hhcmVkX0NYWD4pCisKKworYWRkX2xpYnJhcnkoaW50ZXJmYWNlMiBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGludGVyZmFjZTIgSU5URVJGQUNFIGltcG9ydCkKKworCithZGRfbGlicmFyeShzdGF0aWMzIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMzIFBSSVZBVEUgaW50ZXJmYWNlKQorCisKK2FkZF9saWJyYXJ5KExpbmtMaWJyYXJpZXNfbGliIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19saWIgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4pCisKK2FkZF9saWJyYXJ5KExpbmtMaWJyYXJpZXNfbGliMiBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfbGliMiBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnN0YXRpYzFfQz4pCisKK2FkZF9saWJyYXJ5KExpbmtMaWJyYXJpZXNfbGliMyBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfbGliMyBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnN0YXRpYzJfQz4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfZXhlIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NfaW1wb3J0IFBSSVZBVEUgaW1wb3J0KQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfaW1wb3J0IG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9pbXBvcnQgUFJJVkFURSBpbXBvcnQpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlIFBSSVZBVEUgaW50ZXJmYWNlKQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlIG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UgUFJJVkFURSBpbnRlcmZhY2UpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UyIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZTIgUFJJVkFURSBpbnRlcmZhY2UyKQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlMiBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlMiBQUklWQVRFIGludGVyZmFjZTIpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19zdGF0aWMgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0Nfc3RhdGljIFBSSVZBVEUgc3RhdGljMykKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfc3RhdGljIFBSSVZBVEUgc3RhdGljMykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYWQtbWl4LWxhbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYWQtbWl4LWxhbmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFkLW1peC1sYW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYWQtbWl4LWxhbmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWNkYzBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFkLW1peC1sYW5nLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvcjogRXZhbHVhdGlvbiBvZiBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gb3IgXCQ8TElOS19MQU5EX0FORF9JRDouLi4+IGNoYW5nZXMKK3RoZSBsaW5rZXIgbGFuZ3VhZ2UgZm9yIHRhcmdldCAiTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyIgXChmcm9tICdDJyB0byAnQ1hYJ1wpIHdoaWNoIGlzIGludmFsaWQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYWQtbWl4LWxhbmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYWQtbWl4LWxhbmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwMDEwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhZC1taXgtbGFuZy5jbWFrZQpAQCAtMCwwICsxLDggQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShzdGF0aWNfQ1hYIFNUQVRJQyBmdW5jLmN4eCkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfYmFkX21peF9sYW5ndWFnZXMgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnN0YXRpY19DWFg+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZV9jLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGVfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGVfYy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGVfY3h4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGVfY3h4LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZV9jeHgtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW5vX2xhbmd1YWdlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1ub19sYW5ndWFnZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1ub19sYW5ndWFnZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlY2NkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlCkBAIC0wLDAgKzEsNzMgQEAKKworY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYuLi4zLjE3KQorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKKworYWRkX2xpYnJhcnkoc2hhcmVkX0MgU0hBUkVEIGZ1bmMuYykKK2FkZF9saWJyYXJ5KHNoYXJlZF9DWFggU0hBUkVEIGZ1bmMuY3h4KQorCisKK2FkZF9saWJyYXJ5KHN0YXRpYzFfQyBTVEFUSUMgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoc3RhdGljMV9DIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworYWRkX2xpYnJhcnkoc3RhdGljMl9DIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMyX0MgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworCitzZXQgKGJpbmFyeV9kaXIgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQorZ2V0X3Byb3BlcnR5IChpc19tdWx0aV9jb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZiAoaXNfbXVsdGlfY29uZmlnKQorICBzdHJpbmcgKEFQUEVORCBiaW5hcnlfZGlyICIvUmVsZWFzZSIpCitlbmRpZigpCithZGRfbGlicmFyeShpbXBvcnQgU1RBVElDIElNUE9SVEVEKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7YmluYXJ5X2Rpcn0vJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVh9c3RhdGljMV9DJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVh9IikKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW1wb3J0IElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW1wb3J0IElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9PjpzaGFyZWRfQ1hYPikKKworCithZGRfbGlicmFyeShpbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbnRlcmZhY2UgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46c2hhcmVkX0M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46c2hhcmVkX0NYWD4pCisKKworYWRkX2xpYnJhcnkoaW50ZXJmYWNlMiBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGludGVyZmFjZTIgSU5URVJGQUNFIGltcG9ydCkKKworCithZGRfbGlicmFyeShzdGF0aWMzIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMzIFBSSVZBVEUgaW50ZXJmYWNlKQorCisKK2FkZF9saWJyYXJ5KExpbmtMaWJyYXJpZXNfbGliIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19saWIgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworYWRkX2xpYnJhcnkoTGlua0xpYnJhcmllc19saWIyIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19saWIyIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzdGF0aWMxX0M+KQorCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYjMgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2xpYjMgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnN0YXRpYzJfQz4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfZXhlIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX2ltcG9ydCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgUFJJVkFURSBpbXBvcnQpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9pbXBvcnQgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCBQUklWQVRFIGltcG9ydCkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZSBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgUFJJVkFURSBpbnRlcmZhY2UpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSBQUklWQVRFIGludGVyZmFjZSkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZTIgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiBQUklWQVRFIGludGVyZmFjZTIpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UyIG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UyIFBSSVZBVEUgaW50ZXJmYWNlMikKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX3N0YXRpYyBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19zdGF0aWMgUFJJVkFURSBzdGF0aWMzKQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfc3RhdGljIG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9zdGF0aWMgUFJJVkFURSBzdGF0aWMzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2xpYi5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvbGliLmMKQEAgLTAsMCArMSwxMCBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpOworCit2b2lkIGxpYigpCit7CisgIGZ1bmNfYygpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL21haW4uYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwOGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9tYWluLmMKQEAgLTAsMCArMSwxMiBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpOworCitpbnQgbWFpbigpCit7CisgIGZ1bmNfYygpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL21haW4uY3h4IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL21haW4uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWEzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvbWFpbi5jeHgKQEAgLTAsMCArMSwxMiBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfY3h4KCk7CisKK2ludCBtYWluKCkKK3sKKyAgZnVuY19jeHgoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1ORVctYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLWJhc2ljLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWJjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLWJhc2ljLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitpZiAoTk9UIGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR19JTlRFUkZBQ0UiKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG5Ob3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfSU5URVJGQUNFJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy1iYXNpYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy1iYXNpYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1ORVcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZGQ2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTkgTkVXKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTVAwMDk5LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU9MRC1iYXNpYy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxNTlmMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfSU5URVJGQUNFIikKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR19JTlRFUkZBQ0UnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQtYmFzaWMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU9MRC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYTRjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA5OSBPTEQpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NNUDAwOTkuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiNDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS5jbWFrZQpAQCAtMCwwICsxLDE5IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQob2JqICIke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0iKQoraWYoQk9STEFORCkKKyAgc2V0KHByZSAtKQorZW5kaWYoKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfaW50ZXJmYWNlIElOVEVSRkFDRSAke3ByZX1CQURGTEFHX0lOVEVSRkFDRSR7b2JqfSkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc3RhdGljMSBTVEFUSUMgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfc3RhdGljMSBQUklWQVRFIExpbmtPcHRpb25zX2ludGVyZmFjZSkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc3RhdGljMiBTVEFUSUMgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfc3RhdGljMiBQUklWQVRFIExpbmtPcHRpb25zX3N0YXRpYzEpCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rT3B0aW9uc19leGUgUFJJVkFURSBMaW5rT3B0aW9uc19zdGF0aWMyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9MSU5LRVJfZXhwYW5zaW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9MSU5LRVJfZXhwYW5zaW9uLmNtYWtlCmluZGV4IGIzNDQ4NjcuLmY4NmQxOWYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24uY21ha2UKQEAgLTEsNiArMSwxMyBAQAogCiBlbmFibGVfbGFuZ3VhZ2UoQykKIAorc2V0KGNmZ19kaXIpCitnZXRfcHJvcGVydHkoX2lzTXVsdGlDb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZihfaXNNdWx0aUNvbmZpZykKKyAgc2V0KGNmZ19kaXIgL0RlYnVnKQorZW5kaWYoKQorc2V0KERVTVBfRVhFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0ke2NmZ19kaXJ9L2R1bXAke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfSIpCisKIGFkZF9leGVjdXRhYmxlKGR1bXAgZHVtcC5jKQogCiAjIGVuc3VyZSBubyB0ZW1wIGZpbGUgd2lsbCBiZSB1c2VkCkBAIC0xMyw3ICsyMCw3IEBACiB0YXJnZXRfbGlua19vcHRpb25zKGxpbmtlciBQUklWQVRFICJMSU5LRVI6LWZvbyxiYXIiKQogCiAjIHVzZSBMQVVOQ0ggZmFjaWxpdHkgdG8gZHVtcCBsaW5rZXIgY29tbWFuZAotc2V0X3Byb3BlcnR5KFRBUkdFVCBsaW5rZXIgUFJPUEVSVFkgUlVMRV9MQVVOQ0hfTElOSyAiXCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZHVtcCR7Q01BS0VfRVhFQ1VUQUJMRV9TVUZGSVh9XCIiKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBsaW5rZXIgUFJPUEVSVFkgUlVMRV9MQVVOQ0hfTElOSyAiXCIke0RVTVBfRVhFfVwiIikKIAogYWRkX2RlcGVuZGVuY2llcyAobGlua2VyIGR1bXApCiAKQEAgLTIzLDcgKzMwLDcgQEAKIHRhcmdldF9saW5rX29wdGlvbnMobGlua2VyX3NoZWxsIFBSSVZBVEUgIkxJTktFUjpTSEVMTDotZm9vIGJhciIpCiAKICMgdXNlIExBVU5DSCBmYWNpbGl0eSB0byBkdW1wIGxpbmtlciBjb21tYW5kCi1zZXRfcHJvcGVydHkoVEFSR0VUIGxpbmtlcl9zaGVsbCBQUk9QRVJUWSBSVUxFX0xBVU5DSF9MSU5LICJcIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9kdW1wJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH1cIiIpCitzZXRfcHJvcGVydHkoVEFSR0VUIGxpbmtlcl9zaGVsbCBQUk9QRVJUWSBSVUxFX0xBVU5DSF9MSU5LICJcIiR7RFVNUF9FWEV9XCIiKQogCiBhZGRfZGVwZW5kZW5jaWVzIChsaW5rZXJfc2hlbGwgZHVtcCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAxZDllZjhiLi45ZmRjZGVlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMjcsNiArMjcsMjMgQEAKICAgcnVuX2NtYWtlX3RhcmdldChMSU5LX09QVElPTlMgbW9kIExpbmtPcHRpb25zX21vZCAtLWNvbmZpZyBSZWxlYXNlKQogICBydW5fY21ha2VfdGFyZ2V0KExJTktfT1BUSU9OUyBleGUgTGlua09wdGlvbnNfZXhlIC0tY29uZmlnIFJlbGVhc2UpCiAKKworICBydW5fY21ha2UoZ2VuZXhfTElOS19MQU5HVUFHRSkKKworICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgaW50ZXJmYWNlIExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIHNoYXJlZF9jIExpbmtPcHRpb25zX3NoYXJlZF9jIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBMSU5LRVJfTEFOR1VBR0UgTGlua09wdGlvbnNfc2hhcmVkX2N4eCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgbW9kIExpbmtPcHRpb25zX21vZCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgZXhlIExpbmtPcHRpb25zX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdfQU5EX0lEKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBpbnRlcmZhY2UgTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgc2hhcmVkX2MgTGlua09wdGlvbnNfc2hhcmVkX2MgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIExJTktFUl9MQU5HVUFHRSBMaW5rT3B0aW9uc19zaGFyZWRfY3h4IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBleGUgTGlua09wdGlvbnNfZXhlIC0tY29uZmlnIFJlbGVhc2UpCisKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICB1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKIGVuZGlmKCkKQEAgLTQxLDMgKzU4LDIxIEBACiBlbmRpZigpCiAKIHJ1bl9jbWFrZShlbXB0eV9rZXl3b3JkX2FyZ3MpCisKK2lmIChOT1QgQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiSW50ZWwiKQorICAjIEludGVsIGNvbXBpbGVyIGRvZXMgbm90IHJlamVjdCBiYWQgZmxhZ3Mgb3Igb2JqZWN0cyEKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIFRSVUUpCisgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlKENNUDAwOTktTkVXKQorICBydW5fY21ha2VfdGFyZ2V0KENNUDAwOTktTkVXIGJhc2ljIExpbmtPcHRpb25zX2V4ZSkKKworCisgIHJ1bl9jbWFrZShDTVAwMDk5LU9MRCkKKyAgcnVuX2NtYWtlX3RhcmdldChDTVAwMDk5LU9MRCBiYXNpYyBMaW5rT3B0aW9uc19leGUpCisKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICB1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzk4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQ1hYKQorc2V0IChJTlZBTElEX0xBTkcgQykKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY2NDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTAxMjBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNjQxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDEyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDKQorc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKKworaWYgKE5PVCBERUZJTkVEIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBERUZJTkVEIElOVkFMSURfTEFORykKKyAgc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorZW5kaWYoKQorCitpZiAoTk9UIGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkciKQorICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HJy4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFORyIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTYxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UKQEAgLTAsMCArMSwzMiBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK3NldCAob2JqICIke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0iKQoraWYoQk9STEFORCkKKyAgc2V0KHByZSAtKQorZW5kaWYoKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfaW50ZXJmYWNlIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgUFJJVkFURSBMaW5rT3B0aW9uc19pbnRlcmZhY2UpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9jIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfc2hhcmVkX2MgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9jeHggU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke29ian0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4pCitzZXRfcHJvcGVydHkgKFRBUkdFVCBMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFBST1BFUlRZIExJTktFUl9MQU5HVUFHRSBDWFgpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX21vZCBNT0RVTEUgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX21vZCBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfZXhlIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke29ian0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGY4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQ1hYKQorc2V0IChJTlZBTElEX0xBTkcgQykKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ5OGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkZGVlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDk4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDKQorc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkYzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKKworaWYgKE5PVCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7VkFMSURfTEFOR31fTEFOR19JRCIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkdfSUQnLlxuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkdfSUQiKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFOR19JRCAnLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESUQiKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oJHtWQUxJRF9MQU5HfXwke0lOVkFMSURfTEFOR30pX0JBRElEJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMGY1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKQEAgLTAsMCArMSw0MSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2lmKEJPUkxBTkQpCisgIHNldChwcmUgLSkKK2VuZGlmKCkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX2ludGVyZmFjZSBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NfTEFOR19JRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEJBRElEPjoke3ByZX1CQURGTEFHX0NfQkFESUQke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46JHtwcmV9QkFERkxBR19DWFhfQkFESUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgUFJJVkFURSBMaW5rT3B0aW9uc19pbnRlcmZhY2UpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9jIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfc2hhcmVkX2MgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NYWF9MQU5HX0lEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX3NoYXJlZF9jeHggUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEJBRElEPjoke3ByZX1CQURGTEFHX0NfQkFESUQke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIExpbmtPcHRpb25zX3NoYXJlZF9jeHggUFJPUEVSVFkgTElOS0VSX0xBTkdVQUdFIENYWCkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfbW9kIE1PRFVMRSBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfbW9kIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NfTEFOR19JRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46JHtwcmV9QkFERkxBR19DWFhfQkFESUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfZXhlIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NfTEFOR19JRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46JHtwcmV9QkFERkxBR19DWFhfQkFESUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DbGVhbnVwTm9Gb2xsb3dTeW1saW5rLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ2xlYW51cE5vRm9sbG93U3ltbGluay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWEwZjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ2xlYW51cE5vRm9sbG93U3ltbGluay5jbWFrZQpAQCAtMCwwICsxLDIxIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KG91dCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2ZvbGRlciIpCitzZXQobGlua19mb2xkZXIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0NNYWtlVG1wIikKK3NldChsaW5rX2RpciAiJHtsaW5rX2ZvbGRlcn0vbGlua19kaXIiKQorZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtvdXR9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7bGlua19mb2xkZXJ9IikKK2ZpbGUoV1JJVEUgJHtvdXR9L2VtcHR5X2ZpbGUgIiIpCitmaWxlKENSRUFURV9MSU5LICR7b3V0fSAke2xpbmtfZGlyfSBTWU1CT0xJQykKKwordHJ5X2NvbXBpbGUocmVzICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQorICBTT1VSQ0VTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zcmMuYykKKworaWYoRVhJU1RTICR7bGlua19kaXJ9KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJkaWQgbm90IHJlbW92ZSAke2xpbmtfZGlyfSIpCitlbmRpZigpCitpZihOT1QgRVhJU1RTICR7b3V0fSkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAic2hvdWxkIG5vdCBoYXZlIHJlbW92ZWQgJHtvdXR9L2RpciIpCitlbmRpZigpCisKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7b3V0fSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOTFmMDE0ZS4uYmVlOWU1YiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNDksMTEgKzQ5LDcgQEAKICAgcnVuX2NtYWtlKE9iakN4eFN0YW5kYXJkKQogZW5kaWYoKQogaWYoQ01ha2VfVEVTVF9DVURBKQotICBpZihDTUFLRV9IT1NUX1dJTjMyKQotICAgIHJ1bl9jbWFrZShDdWRhU3RhbmRhcmROb0RlZmF1bHQpCi0gIGVsc2UoKQotICAgIHJ1bl9jbWFrZShDdWRhU3RhbmRhcmQpCi0gIGVuZGlmKCkKKyAgcnVuX2NtYWtlKEN1ZGFTdGFuZGFyZCkKIGVuZGlmKCkKIGlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIgQU5EIE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQuNCkKICAgcnVuX2NtYWtlKENTdGFuZGFyZEdOVSkKQEAgLTk4LDMgKzk0LDcgQEAKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQogICB1bnNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOKQogZW5kaWYoKQorCitpZihVTklYKQorICBydW5fY21ha2UoQ2xlYW51cE5vRm9sbG93U3ltbGluaykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1N0YWdpbmdQcmVmaXgvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9TdGFnaW5nUHJlZml4L0NNYWtlTGlzdHMudHh0CmluZGV4IDhkMjUxOWUuLjllZDVjMTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N0YWdpbmdQcmVmaXgvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvU3RhZ2luZ1ByZWZpeC9DTWFrZUxpc3RzLnR4dApAQCAtNSw3ICs1LDcgQEAKICMgV2lwZSBvdXQgdGhlIGluc3RhbGwgdHJlZQogYWRkX2N1c3RvbV9jb21tYW5kKAogICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9DbGVhbnVwUHJvamVjdAotICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9Db25zdW1lckJ1aWxkCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9Qcm9kdWNlckJ1aWxkCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zdGFnZQpkaWZmIC0tZ2l0IGEvVGVzdHMvU3ViRGlyL0V4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvU3ViRGlyL0V4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CmluZGV4IDIwZDA2NWUuLjhlYzFjMDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N1YkRpci9FeGFtcGxlcy9leGFtcGxlMS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9TdWJEaXIvRXhhbXBsZXMvZXhhbXBsZTEvQ01ha2VMaXN0cy50eHQKQEAgLTMsNSArMyw1IEBACiBhZGRfZXhlY3V0YWJsZShleGFtcGxlMSBleGFtcGxlMS5jeHgpCiAKIGFkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZXhhbXBsZTEgUE9TVF9CVUlMRAotICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiBBUkdTIC1FIHJlbW92ZSAke1NVQkRJUl9CSU5BUllfRElSfS9TaG91bGRCZUhlcmUKKyAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgQVJHUyAtRSBybSAtZiAke1NVQkRJUl9CSU5BUllfRElSfS9TaG91bGRCZUhlcmUKICAgQ09NTUVOVCAiUmVtb3ZlIG1hcmtlciBmaWxlIHRoYXQgc2hvdWxkIGV4aXN0IGJlY2F1c2UgdGhpcyBzaG91bGQgbm90IGJlIHJ1biIpCmRpZmYgLS1naXQgYS9UZXN0cy9TdWJEaXJTcGFjZXMvU29tZSBFeGFtcGxlcy9leGFtcGxlMS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1N1YkRpclNwYWNlcy9Tb21lIEV4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CmluZGV4IDIwZDA2NWUuLjhlYzFjMDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N1YkRpclNwYWNlcy9Tb21lIEV4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1N1YkRpclNwYWNlcy9Tb21lIEV4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CkBAIC0zLDUgKzMsNSBAQAogYWRkX2V4ZWN1dGFibGUoZXhhbXBsZTEgZXhhbXBsZTEuY3h4KQogCiBhZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGV4YW1wbGUxIFBPU1RfQlVJTEQKLSAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgQVJHUyAtRSByZW1vdmUgJHtTVUJESVJfQklOQVJZX0RJUn0vU2hvdWxkQmVIZXJlCisgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIEFSR1MgLUUgcm0gLWYgJHtTVUJESVJfQklOQVJZX0RJUn0vU2hvdWxkQmVIZXJlCiAgIENPTU1FTlQgIlJlbW92ZSBtYXJrZXIgZmlsZSB0aGF0IHNob3VsZCBleGlzdCBiZWNhdXNlIHRoaXMgc2hvdWxkIG5vdCBiZSBydW4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvU3dpZnRPbmx5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvU3dpZnRPbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IGY0Y2JhYzIuLmUyNDI3OWIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N3aWZ0T25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Td2lmdE9ubHkvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSwxNiBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKKworIyBOT1RFOiBGb3JjZSB0aGUgUmVsZWFzZSBtb2RlIGNvbmZpZ3VyYXRpb24gYXMgdGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlCisjIGRlYnVnIGluZm9ybWF0aW9uIGhhbmRsaW5nIG9uIG1hY09TIG9uIGNlcnRhaW4gWGNvZGUgYnVpbGRzLgoraWYoTk9UIENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMpCisgIHNldChDTUFLRV9CVUlMRF9UWVBFIFJlbGVhc2UgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQiIEZPUkNFKQorZW5kaWYoKQorCisjIE5PVEU6IGVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQuICBPbGRlciBYY29kZSByZWxlYXNlcyBkbyBub3QgcGxheQorIyB3ZWxsIHdpdGggc3RhdGljIGxpYnJhcmllcywgYW5kIFdpbmRvd3MgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgc3RhdGljCisjIGxpYnJhcmllcyBpbiBTd2lmdC4KK3NldChCVUlMRF9TSEFSRURfTElCUyBZRVMpCisKIHByb2plY3QoU3dpZnRPbmx5IFN3aWZ0KQogCiBpZihOT1QgWENPREVfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTAuMikKQEAgLTcsNyArMTksMTkgQEAKICAgc2V0KENNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04gMy4wKQogZW5kaWYoKQogCitzZXQoQ01BS0VfU3dpZnRfTU9EVUxFX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L3N3aWZ0KQorCiBhZGRfZXhlY3V0YWJsZShTd2lmdE9ubHkgbWFpbi5zd2lmdCkKIAorYWRkX2xpYnJhcnkoTCBMLnN3aWZ0KQorCithZGRfbGlicmFyeShNIE0uc3dpZnQpCit0YXJnZXRfbGlua19saWJyYXJpZXMoTSBQVUJMSUMKKyAgTCkKKworYWRkX2xpYnJhcnkoTiBOLnN3aWZ0KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKE4gUFVCTElDCisgIE0pCisKICMgRHVtbXkgdG8gbWFrZSBzdXJlIGdlbmVyYXRpb24gd29ya3Mgd2l0aCBzdWNoIHRhcmdldHMuCiBhZGRfbGlicmFyeShTd2lmdElmYWNlIElOVEVSRkFDRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1N3aWZ0T25seS9MLnN3aWZ0IGIvVGVzdHMvU3dpZnRPbmx5L0wuc3dpZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmZjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1N3aWZ0T25seS9MLnN3aWZ0CkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBsZXQgVGhpcnR5VHdvOiBJbnQgPSAzMgpkaWZmIC0tZ2l0IGEvVGVzdHMvU3dpZnRPbmx5L00uc3dpZnQgYi9UZXN0cy9Td2lmdE9ubHkvTS5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDMzM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvU3dpZnRPbmx5L00uc3dpZnQKQEAgLTAsMCArMSwyIEBACitpbXBvcnQgTAorcHVibGljIGxldCBTaXh0eUZvdXI6IEludCA9IFRoaXJ0eVR3byAqIDIKZGlmZiAtLWdpdCBhL1Rlc3RzL1N3aWZ0T25seS9OLnN3aWZ0IGIvVGVzdHMvU3dpZnRPbmx5L04uc3dpZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZGRmOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1N3aWZ0T25seS9OLnN3aWZ0CkBAIC0wLDAgKzEsMiBAQAoraW1wb3J0IE0KK3B1YmxpYyBsZXQgT25lVHdlbnR5RWlnaHQgPSBTaXh0eUZvdXIgKiAyCmRpZmYgLS1naXQgYS9UZXN0cy9Vc2VTV0lHL0Jhc2ljQ29uZmlndXJhdGlvbi5jbWFrZSBiL1Rlc3RzL1VzZVNXSUcvQmFzaWNDb25maWd1cmF0aW9uLmNtYWtlCmluZGV4IGZkM2FjNDAuLmQwNTQ5NTMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1VzZVNXSUcvQmFzaWNDb25maWd1cmF0aW9uLmNtYWtlCisrKyBiL1Rlc3RzL1VzZVNXSUcvQmFzaWNDb25maWd1cmF0aW9uLmNtYWtlCkBAIC0xOCw2ICsxOCw5IEBACiBpZigke2xhbmd1YWdlfSBNQVRDSEVTIGNzaGFycCkKICAgc2V0KFNXSUdfTEFOR19UWVBFIFRZUEUgU0hBUkVEKQogZW5kaWYoKQoraWYoJHtsYW5ndWFnZX0gTUFUQ0hFUyBmb3J0cmFuKQorICBzZXQoU1dJR19MQU5HX1RZUEUgVFlQRSBTSEFSRUQpCitlbmRpZigpCiBpZigke2xhbmd1YWdlfSBNQVRDSEVTIHB5dGhvbikKICAgZmluZF9wYWNrYWdlKFB5dGhvbiBSRVFVSVJFRCBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50KQogICBzZXQoU1dJR19MQU5HX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtQeXRob25fSU5DTFVERV9ESVJTfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1VzZVNXSUcvQmFzaWNGb3J0cmFuL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVXNlU1dJRy9CYXNpY0ZvcnRyYW4vQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxZmI4NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1VzZVNXSUcvQmFzaWNGb3J0cmFuL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEyLi4uMy4xMykKKworcHJvamVjdChUZXN0QmFzaWNGb3J0cmFuIENYWCBGb3J0cmFuKQorCitpbmNsdWRlKENUZXN0KQorCitzZXQobGFuZ3VhZ2UgImZvcnRyYW4iKQorCitpbmNsdWRlICguLi9CYXNpY0NvbmZpZ3VyYXRpb24uY21ha2UpCitnZXRfdGFyZ2V0X3Byb3BlcnR5KEVYQU1QTEVfUFJFRklYIGV4YW1wbGUgUFJFRklYKQoraWYgKE5PVCBFWEFNUExFX1BSRUZJWCBTVFJFUVVBTCAiJHtDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVh9IgorICAgIEFORCBOT1QgRVhBTVBMRV9QUkVGSVggU1RSRVFVQUwgIkVYQU1QTEVfUFJFRklYLU5PVEZPVU5EIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVW5leHBlY3RlZCBsaWJyYXJ5IHByZWZpeCBvbiB0YXJnZXQ6IGdvdCAiCisgICAgIicke0VYQU1QTEVfUFJFRklYfScgYnV0IGV4cGVjdGVkICcke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWH0nIikKK2VuZGlmKCkKKworCithZGRfZXhlY3V0YWJsZShydW5tZSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vcnVubWUuZjkwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJ1bm1lIGV4YW1wbGUpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMocnVubWUgUFJPUEVSVElFUyBMSU5LRVJfTEFOR1VBR0UgRm9ydHJhbikKKworYWRkX3Rlc3QgKE5BTUUgQmFzaWNGb3J0cmFuCisgIENPTU1BTkQgJDxUQVJHRVRfRklMRTpydW5tZT4pCmRpZmYgLS1naXQgYS9UZXN0cy9Vc2VTV0lHL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVXNlU1dJRy9DTWFrZUxpc3RzLnR4dAppbmRleCAzY2M5MTBmLi5kMTAyODQ2IDEwMDY0NAotLS0gYS9UZXN0cy9Vc2VTV0lHL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1VzZVNXSUcvQ01ha2VMaXN0cy50eHQKQEAgLTU1LDYgKzU1LDIxIEBACiAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgogICApCiAKK2lmIChDTWFrZV9URVNUX1VzZVNXSUdfRm9ydHJhbikKKyAgY2hlY2tfbGFuZ3VhZ2UoRm9ydHJhbikKKyAgaWYgKENNQUtFX0ZvcnRyYW5fQ09NUElMRVIpCisgICAgYWRkX3Rlc3QoTkFNRSBVc2VTV0lHLkJhc2ljRm9ydHJhbiBDT01NQU5ECisgICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1VzZVNXSUcvQmFzaWNGb3J0cmFuIgorICAgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvVXNlU1dJRy9CYXNpY0ZvcnRyYW4iCisgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RCYXNpY0ZvcnRyYW4KKyAgICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgICkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiBhZGRfdGVzdChOQU1FIFVzZVNXSUcuTXVsdGlwbGVNb2R1bGVzIENPTU1BTkQKICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CmRpZmYgLS1naXQgYS9UZXN0cy9Vc2VTV0lHL3J1bm1lLmY5MCBiL1Rlc3RzL1VzZVNXSUcvcnVubWUuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Vc2VTV0lHL3J1bm1lLmY5MApAQCAtMCwwICsxLDc3IEBACishIEZpbGUgOiBydW5tZS5mOTAKK3Byb2dyYW0gcnVubWUKKyAgdXNlIElTT19GT1JUUkFOX0VOVgorICBpbXBsaWNpdCBub25lCisgIGludGVnZXIsIHBhcmFtZXRlciA6OiBTVERPVVQgPSBPVVRQVVRfVU5JVAorCisgIGNhbGwgcnVuKCkKK2NvbnRhaW5zCisKK3N1YnJvdXRpbmUgcnVuKCkKKyAgdXNlIGV4YW1wbGUKKyAgdXNlIGlzb19jX2JpbmRpbmcKKyAgaW1wbGljaXQgbm9uZQorCisgIHR5cGUoQ2lyY2xlKSAgICAgICAgICA6OiBjCisgIHR5cGUoU3F1YXJlKSwgdGFyZ2V0ICA6OiBzICEgJ3RhcmdldCcgYWxsb3dzIGl0IHRvIGJlIHBvaW50ZWQgdG8KKyAgY2xhc3MoU2hhcGUpLCBwb2ludGVyIDo6IHNoCisgIGludGVnZXIoQ19JTlQpIDo6IG5fc2hhcGVzCisKKyAgISAtLS0tLSBPYmplY3QgY3JlYXRpb24gLS0tLS0KKworICB3cml0ZShTVERPVVQsKikgIkNyZWF0aW5nIHNvbWUgb2JqZWN0cyIKKyAgYyA9IENpcmNsZSgxMC4wZDApCisgIHMgPSBTcXVhcmUoMTAuMGQwKQorCisgICEgLS0tLS0gQWNjZXNzIGEgc3RhdGljIG1lbWJlciAtLS0tLQorICB3cml0ZShTVERPVVQsJyhhLGkyLGEpJykiQSB0b3RhbCBvZiIsIHMlZ2V0X25zaGFwZXMoKSwgIiBzaGFwZXMgd2VyZSBjcmVhdGVkIgorCisgICEgLS0tLS0gTWVtYmVyIGRhdGEgYWNjZXNzIC0tLS0tCisKKyAgISBOb3RpY2UgaG93IHdlIGNhbiBkbyB0aGlzIHVzaW5nIGZ1bmN0aW9ucyBzcGVjaWZpYyB0bworICAhIHRoZSAnQ2lyY2xlJyBjbGFzcy4KKyAgY2FsbCBjJXNldF94KDIwLjBkMCkKKyAgY2FsbCBjJXNldF95KDMwLjBkMCkKKworICAhIE5vdyB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGluIHRoZSBiYXNlIGNsYXNzCisgIHNoID0+IHMKKyAgY2FsbCBzaCVzZXRfeCgtMTAuMGQwKQorICBjYWxsIHNoJXNldF95KCAgNS4wZDApCisKKyAgd3JpdGUoU1RET1VULCopIkhlcmUgaXMgdGhlaXIgY3VycmVudCBwb3NpdGlvbjoiCisgIHdyaXRlKFNURE9VVCwnKGEsZjUuMSxhLGY1LjEsYSknKSIgIENpcmNsZSA9ICgiLCBjJWdldF94KCksICIsIiwgYyVnZXRfeSgpLCAiICkiCisgIHdyaXRlKFNURE9VVCwnKGEsZjUuMSxhLGY1LjEsYSknKSIgIFNxdWFyZSA9ICgiLCBzJWdldF94KCksICIsIiwgcyVnZXRfeSgpLCAiICkiCisKKyAgISAtLS0tLSBDYWxsIHNvbWUgbWV0aG9kcyAtLS0tLQorCisgIHdyaXRlKFNURE9VVCwqKSJIZXJlIGFyZSBzb21lIHByb3BlcnRpZXMgb2YgdGhlIHNoYXBlczoiCisgIGNhbGwgcHJpbnRfc2hhcGUoYykKKyAgY2FsbCBwcmludF9zaGFwZShzKQorCisgICEgLS0tLS0gRGVsZXRlIGV2ZXJ5dGhpbmcgLS0tLS0KKworICAhIE5vdGU6IHRoaXMgaW52b2tlcyB0aGUgdmlydHVhbCBkZXN0cnVjdG9yCisgIGNhbGwgYyVyZWxlYXNlKCkKKyAgY2FsbCBzJXJlbGVhc2UoKQorCisgIG5fc2hhcGVzID0gYyVnZXRfbnNoYXBlcygpCisgIHdyaXRlKFNURE9VVCwqKSBuX3NoYXBlcywgInNoYXBlcyByZW1haW4iCisgIGlmIChuX3NoYXBlcyAvPSAwKSB0aGVuCisgICAgd3JpdGUoU1RET1VULCopICJTaGFwZXMgd2VyZSBub3QgZnJlZWQgcHJvcGVybHkhIgorICAgIHN0b3AgMQorICBlbmRpZgorCisgIHdyaXRlKFNURE9VVCwqKSAiR29vZGJ5ZSIKK2VuZCBzdWJyb3V0aW5lCisKK3N1YnJvdXRpbmUgcHJpbnRfc2hhcGUocykKKyAgdXNlIGV4YW1wbGUsIG9ubHkgOiBTaGFwZQorICB1c2UgaXNvX2NfYmluZGluZworICBpbXBsaWNpdCBub25lCisgIGNsYXNzKFNoYXBlKSwgaW50ZW50KGluKSA6OiBzCisKKyAgd3JpdGUoU1RET1VULCopIiAgICBhcmVhICAgICAgPSAiLHMlYXJlYSgpCisgIHdyaXRlKFNURE9VVCwqKSIgICAgcGVyaW1ldGVyID0gIixzJXBlcmltZXRlcigpCitlbmQgc3Vicm91dGluZQorCitlbmQgcHJvZ3JhbQpkaWZmIC0tZ2l0IGEvVGVzdHMvVlNNaWRsL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVlNNaWRsL0NNYWtlTGlzdHMudHh0CmluZGV4IDQzMjUwNmMuLjNmZjdjMjcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1ZTTWlkbC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9WU01pZGwvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDggKzU2LDggQEAKICMKIEV4dGVybmFsUHJvamVjdF9BZGQoY2xlYW4tJHtQUk9KRUNUX05BTUV9CiAgIERPV05MT0FEX0NPTU1BTkQgIiIKLSAgQ09ORklHVVJFX0NPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5ICIke3NvdXJjZV9kaXJ9IgotICBCVUlMRF9DT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeSAiJHtiaW5hcnlfZGlyfSIKKyAgQ09ORklHVVJFX0NPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgIiR7c291cmNlX2Rpcn0iCisgIEJVSUxEX0NPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgIiR7YmluYXJ5X2Rpcn0iCiAgIElOU1RBTExfQ09NTUFORCAiIgogICApCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiOGUxNTdkLi41NThkNWRlIDEwMDY0NAotLS0gYS9UZXN0cy9WU1dpblN0b3JlUGhvbmUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvVlNXaW5TdG9yZVBob25lL0NNYWtlTGlzdHMudHh0CkBAIC0xMjcsNyArMTI3LDcgQEAKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtWRVJURVhTSEFERVJfRklMRVN9IFBST1BFUlRZIFZTX1NIQURFUl9NT0RFTCA0LjBfbGV2ZWxfOV8zKQogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1ZFUlRFWFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX0ZMQUdTICIvREZMQUdTX0FEREVEIikKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtWRVJURVhTSEFERVJfRklMRVN9IFBST1BFUlRZIFZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUgIiQoT3V0RGlyKSUoRmlsZW5hbWUpLmgiKQotCitzZXRfcHJvcGVydHkoU09VUkNFICR7VkVSVEVYU0hBREVSX0ZJTEVTfSBQUk9QRVJUWSBWU19TRVRUSU5HUyAiJDwkPENPTkZJRzpERUJVRz46U291cmNlUHJvcGVydHkxPVNvdXJjZVByb3BlcnR5MVZhbHVlPiIpCiAKIHNvdXJjZV9ncm91cCgiU291cmNlIEZpbGVzIiBGSUxFUyAke1NPVVJDRV9GSUxFU30pCiBzb3VyY2VfZ3JvdXAoIkhlYWRlciBGaWxlcyIgRklMRVMgJHtIRUFERVJfRklMRVN9KQpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCiBhZGRfZXhlY3V0YWJsZSgke0VYRV9OQU1FfSBXSU4zMiAke1NPVVJDRV9GSUxFU30gJHtIRUFERVJfRklMRVN9ICR7UkVTT1VSQ0VfRklMRVN9KQogc2V0X3Byb3BlcnR5KFRBUkdFVCAke0VYRV9OQU1FfSBQUk9QRVJUWSBWU19XSU5SVF9DT01QT05FTlQgVFJVRSkKK3NldF9wcm9wZXJ0eShUQVJHRVQgJHtFWEVfTkFNRX0gUFJPUEVSVFkgVlNfU09VUkNFX1NFVFRJTkdTX0ZYQ29tcGlsZQorICAiVGFyZ2V0UHJvcGVydHkxPSQ8JDxDT05GSUc6REVCVUc+OlRhcmdldFByb3BlcnR5MVZhbHVlRGVidWc+JDwkPENPTkZJRzpSRUxFQVNFPjpUYXJnZXRQcm9wZXJ0eTFWYWx1ZVJlbGVhc2U+IikKKworYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCAke0VYRV9OQU1FfSBQT1NUX0JVSUxECisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRHZjeHByb2o9IiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0VYRV9OQU1FfS52Y3hwcm9qIiAtUCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0Vuc3VyZVByb3BlcnRpZXNTZXQuY21ha2UiKQogCiBzdHJpbmcoU1VCU1RSSU5HICIke0NNQUtFX1NZU1RFTV9WRVJTSU9OfSIgMCwgNCwgU0hPUlRfVkVSU0lPTikKIApkaWZmIC0tZ2l0IGEvVGVzdHMvVlNXaW5TdG9yZVBob25lL0Vuc3VyZVByb3BlcnRpZXNTZXQuY21ha2UgYi9UZXN0cy9WU1dpblN0b3JlUGhvbmUvRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhjNDZmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvVlNXaW5TdG9yZVBob25lL0Vuc3VyZVByb3BlcnRpZXNTZXQuY21ha2UKQEAgLTAsMCArMSw0NSBAQAorbWFjcm8oZW5zdXJlX3Byb3BzX3NldCBwcm9qZWN0RmlsZSkKKyAgaWYoTk9UIEVYSVNUUyAiJHtwcm9qZWN0RmlsZX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlByb2plY3QgZmlsZSAke3Byb2plY3RGaWxlfSBkb2VzIG5vdCBleGlzdC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBzZXQoU291cmNlUHJvcGVydHlGb3VuZCBGQUxTRSkKKyAgc2V0KERlYnVnVGFyZ2V0UHJvcGVydHlGb3VuZCBGQUxTRSkKKyAgc2V0KFJlbGVhc2VUYXJnZXRQcm9wZXJ0eUZvdW5kIEZBTFNFKQorCisgIGZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0RmlsZX0iIGxpbmVzKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYobGluZSBNQVRDSEVTICI8U291cmNlUHJvcGVydHkxLipEZWJ1Zy4qPlNvdXJjZVByb3BlcnR5MVZhbHVlPC9Tb3VyY2VQcm9wZXJ0eTE+IikKKyAgICAgIG1lc3NhZ2UoIlNvdXJjZVByb3BlcnR5MSBzZXR0aW5nIGZvdW5kIikKKyAgICAgIHNldChTb3VyY2VQcm9wZXJ0eUZvdW5kIFRSVUUpCisgICAgZW5kaWYoKQorCisgICAgaWYobGluZSBNQVRDSEVTICI8VGFyZ2V0UHJvcGVydHkxLipEZWJ1Zy4qPlRhcmdldFByb3BlcnR5MVZhbHVlRGVidWc8L1RhcmdldFByb3BlcnR5MT4iKQorICAgICAgbWVzc2FnZSgiRGVidWcgVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KERlYnVnVGFyZ2V0UHJvcGVydHlGb3VuZCBUUlVFKQorICAgIGVuZGlmKCkKKworICAgIGlmKGxpbmUgTUFUQ0hFUyAiPFRhcmdldFByb3BlcnR5MS4qUmVsZWFzZS4qPlRhcmdldFByb3BlcnR5MVZhbHVlUmVsZWFzZTwvVGFyZ2V0UHJvcGVydHkxPiIpCisgICAgICBtZXNzYWdlKCJSZWxlYXNlIFRhcmdldFByb3BlcnR5MSBzZXR0aW5nIGZvdW5kIikKKyAgICAgIHNldChSZWxlYXNlVGFyZ2V0UHJvcGVydHlGb3VuZCBUUlVFKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYgKE5PVCBTb3VyY2VQcm9wZXJ0eUZvdW5kKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlNvdXJjZVByb3BlcnR5MSBzZXR0aW5nIG5vdCBmb3VuZCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmIChOT1QgRGVidWdUYXJnZXRQcm9wZXJ0eUZvdW5kKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkRlYnVnIFRhcmdldFByb3BlcnR5MSBzZXR0aW5nIG5vdCBmb3VuZCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmIChOT1QgUmVsZWFzZVRhcmdldFByb3BlcnR5Rm91bmQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUmVsZWFzZSBUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBub3QgZm91bmQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworZW5zdXJlX3Byb3BzX3NldCgiJHt2Y3hwcm9qfSIpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMDU2NDU0MC4uMjJhM2Q1YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9DTWFrZUxpc3RzLnR4dApAQCAtMTMsNyArMTMsNyBAQAogICBlbmRpZigpCiAgIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtkaXJ9LnN0YW1wCi0gICAgQ09NTUFORCBjbWFrZSAtRSByZW1vdmVfZGlyZWN0b3J5ICR7ZGlyfQorICAgIENPTU1BTkQgY21ha2UgLUUgcm0gLXJmICR7ZGlyfQogICAgIENPTU1BTkQgY21ha2UgLUUgdGFyIHhmICR7Q01BS0VfRE9DX1RBUkJBTEx9CiAgICAgQ09NTUFORCBjbWFrZSAtRSB0b3VjaCAke2Rpcn0uc3RhbXAKICAgICBERVBFTkRTICR7Q01BS0VfRE9DX1RBUkJBTEx9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvR2l0U2V0dXAvc2V0dXAtdXNlciBiL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCmluZGV4IDFhZjQzOWMuLjBiOTg4NzkgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCisrKyBiL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCkBAIC0yMCwxMiArMjAsMTIgQEAKICMgUHJvamVjdCBjb25maWd1cmF0aW9uIGluc3RydWN0aW9uczogTk9ORQogCiBmb3IgKCggOyA7ICkpOyBkbwotCXVzZXJfbmFtZT0kKGdpdCBjb25maWcgdXNlci5uYW1lIHx8IGVjaG8gJycpICYmCi0JdXNlcl9lbWFpbD0kKGdpdCBjb25maWcgdXNlci5lbWFpbCB8fCBlY2hvICcnKSAmJgotCWlmIHRlc3QgLW4gIiR1c2VyX25hbWUiIC1hIC1uICIkdXNlcl9lbWFpbCI7IHRoZW4KKwlpZGVudD0iJChnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgMj4vZGV2L251bGwgfCByZXYgfCBjdXQgLWQnICcgLWYzLSB8IHJldikiCisKKwlpZiB0ZXN0IC1uICIkaWRlbnQiOyB0aGVuCiAJCWVjaG8gJ1lvdXIgY29tbWl0cyB3aWxsIHJlY29yZCBhcyBBdXRob3I6CiAKLSAgJyIkdXNlcl9uYW1lIDwkdXNlcl9lbWFpbD4iJworICAnIiRpZGVudCInCiAnICYmCiAJCXJlYWQgLWVwICdJcyB0aGUgYXV0aG9yIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MgYWJvdmUgY29ycmVjdD8gW1kvbl0gJyBjb3JyZWN0ICYmCiAJCWlmIHRlc3QgIiRjb3JyZWN0IiAhPSAibiIgLWEgIiRjb3JyZWN0IiAhPSAiTiI7IHRoZW4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9JV1lVL21hcHBpbmcuaW1wIGIvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKaW5kZXggZWYzMWU4Yi4uMzQ5N2I1MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKKysrIGIvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKQEAgLTI0LDYgKzI0LDcgQEAKICAgeyBpbmNsdWRlOiBbICI8Yml0cy9zaGFyZWRfcHRyLmg+IiwgcHJpdmF0ZSwgIjxtZW1vcnk+IiwgcHVibGljIF0gfSwKICAgeyBpbmNsdWRlOiBbICI8Yml0cy9zdGRfZnVuY3Rpb24uaD4iLCBwcml2YXRlLCAiPGZ1bmN0aW9uYWw+IiwgcHVibGljIF0gfSwKICAgeyBpbmNsdWRlOiBbICI8Yml0cy9yZWZ3cmFwLmg+IiwgcHJpdmF0ZSwgIjxmdW5jdGlvbmFsPiIsIHB1YmxpYyBdIH0sCisgIHsgaW5jbHVkZTogWyAiPGJpdHMvc3RkX2Ficy5oPiIsIHByaXZhdGUsICI8c3RkbGliLmg+IiwgcHVibGljIF0gfSwKICAgeyBpbmNsdWRlOiBbICI8Yml0cy9zdGRpbnQtaW50bi5oPiIsIHByaXZhdGUsICI8c3RkaW50Lmg+IiwgcHVibGljIF0gfSwKICAgeyBpbmNsdWRlOiBbICI8Yml0cy9zdGRpbnQtdWludG4uaD4iLCBwcml2YXRlLCAiPHN0ZGludC5oPiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvdGltZS5oPiIsIHByaXZhdGUsICI8dGltZS5oPiIsIHB1YmxpYyBdIH0sCkBAIC00Niw2ICs0Nyw4IEBACiAgICMgSEFDSzogaXd5dSBzdWdnZXN0cyA8ZXh0L2FsbG9jX3RyYWl0cy5oPiBhbmQgPG1lbW9yeT4gZWFjaCB0aW1lIHZlY3RvcltdIGlzIHVzZWQuCiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2luY2x1ZGUtd2hhdC15b3UtdXNlL2luY2x1ZGUtd2hhdC15b3UtdXNlL2lzc3Vlcy8xNjYKICAgeyBpbmNsdWRlOiBbICI8ZXh0L2FsbG9jX3RyYWl0cy5oPiIsIHByaXZhdGUsICI8dmVjdG9yPiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6OmFsbG9jYXRvcl90cmFpdHM8c3RkOjphbGxvY2F0b3I8Y21GaWxlTG9jaz4gPjo6dmFsdWVfdHlwZSIsIHByaXZhdGUsICI8dmVjdG9yPiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6OmFsbG9jYXRvcl90cmFpdHM8c3RkOjphbGxvY2F0b3I8Y21GaWxlTG9ja1Bvb2w6OlNjb3BlUG9vbD4gPjo6dmFsdWVfdHlwZSIsIHByaXZhdGUsICI8dmVjdG9yPiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6OmFsbG9jYXRvcl90cmFpdHM8c3RkOjphbGxvY2F0b3I8Y21Db21wdXRlQ29tcG9uZW50R3JhcGg6OlRhcmphbkVudHJ5PiA+Ojp2YWx1ZV90eXBlIiwgcHJpdmF0ZSwgIjx2ZWN0b3I+IiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6YWxsb2NhdG9yX3RyYWl0czxzdGQ6OmFsbG9jYXRvcjxjbUZvcnRyYW5GaWxlPiA+Ojp2YWx1ZV90eXBlIiwgcHJpdmF0ZSwgIjx2ZWN0b3I+IiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6YWxsb2NhdG9yX3RyYWl0czxzdGQ6OmFsbG9jYXRvcjxjbUdyYXBoRWRnZUxpc3Q+ID46OnZhbHVlX3R5cGUiLCBwcml2YXRlLCAiPHZlY3Rvcj4iLCBwdWJsaWMgXSB9LApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvcHVzaC5iYXNoIGIvVXRpbGl0aWVzL1JlbGVhc2UvcHVzaC5iYXNoCmluZGV4IDFjOGVmZTkuLmExYzY2NTEgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9SZWxlYXNlL3B1c2guYmFzaAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS9wdXNoLmJhc2gKQEAgLTUwLDYgKzUwLDkgQEAKICAgICBkaXI9InYke3ZlcnNpb259IgogZmkKIHJlYWRvbmx5IGRpcgoraWYgISB0ZXN0IC1kICIke2Rlc3R9LyR7ZGlyfSI7IHRoZW4KKyAgICBta2RpciAiJHtkZXN0fS8ke2Rpcn0iCitmaQogCiBmb3IgZiBpbiBjbWFrZS0ke3ZlcnNpb259KjsgZG8KICAgICBpZiAhIHRlc3QgLWYgIiR7Zn0iOyB0aGVuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4zMl9yZWxlYXNlLmNtYWtlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luMzJfcmVsZWFzZS5jbWFrZQppbmRleCAxNGU1Y2JhLi45OTNkYjZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4zMl9yZWxlYXNlLmNtYWtlCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbjMyX3JlbGVhc2UuY21ha2UKQEAgLTM0LDYgKzM0LDcgQEAKIENNQUtFX1BSRUZJWF9QQVRIOlNUUklORz0ke3F0X3ByZWZpeH0KIENNYWtlX1RFU1RfUXQ0OkJPT0w9T0ZGCiBDTWFrZV9URVNUX1F0NTpCT09MPU9GRgorUFlUSE9OX0VYRUNVVEFCTEU6RklMRVBBVEg9QzovUHl0aG9uLzMuOC02NC9weXRob24uZXhlCiAiKQogc2V0KHBwZmxhZ3MgIi1EX1dJTjMyX1dJTk5UPTB4NjAxIC1ETlRERElfVkVSU0lPTj0weDA2MDEwMDAwIikKIHNldChDRkxBR1MgIiR7cHBmbGFnc30iKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luNjRfcmVsZWFzZS5jbWFrZSBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbjY0X3JlbGVhc2UuY21ha2UKaW5kZXggMTQ5ZDM3OC4uMzA0Mjg4OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luNjRfcmVsZWFzZS5jbWFrZQorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW42NF9yZWxlYXNlLmNtYWtlCkBAIC0zNCw2ICszNCw3IEBACiBDTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9JHtxdF9wcmVmaXh9CiBDTWFrZV9URVNUX1F0NDpCT09MPU9GRgogQ01ha2VfVEVTVF9RdDU6Qk9PTD1PRkYKK1BZVEhPTl9FWEVDVVRBQkxFOkZJTEVQQVRIPUM6L1B5dGhvbi8zLjgtNjQvcHl0aG9uLmV4ZQogIikKIHNldChwcGZsYWdzICItRF9XSU4zMl9XSU5OVD0weDYwMSAtRE5URERJX1ZFUlNJT049MHgwNjAxMDAwMCIpCiBzZXQoQ0ZMQUdTICIke3BwZmxhZ3N9IikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TY3JpcHRzL3JlZ2VuZXJhdGUtbGV4ZXJzLmJhc2ggYi9VdGlsaXRpZXMvU2NyaXB0cy9yZWdlbmVyYXRlLWxleGVycy5iYXNoCmluZGV4IDFiNjFiNzAuLjE4NjgwMmEgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9TY3JpcHRzL3JlZ2VuZXJhdGUtbGV4ZXJzLmJhc2gKKysrIGIvVXRpbGl0aWVzL1NjcmlwdHMvcmVnZW5lcmF0ZS1sZXhlcnMuYmFzaApAQCAtMTQsNyArMTQsOCBAQAogICAgIENUZXN0UmVzb3VyY2VHcm91cHMgXAogICAgIERlcGVuZHNKYXZhICAgICAgICAgXAogICAgIEV4cHIgICAgICAgICAgICAgICAgXAotICAgIEZvcnRyYW4KKyAgICBGb3J0cmFuICAgICAgICAgICAgIFwKKyAgICBHY2NEZXBmaWxlCiBkbwogICAgIGN4eF9maWxlPWNtJHtsZXhlcn1MZXhlci5jeHgKICAgICBoX2ZpbGU9Y20ke2xleGVyfUxleGVyLmgKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1iemlwMi5iYXNoIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWJ6aXAyLmJhc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODM0MzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1iemlwMi5iYXNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKworc2V0IC1lCitzZXQgLXgKK3Nob3B0IC1zIGRvdGdsb2IKKworcmVhZG9ubHkgbmFtZT0iYnppcDIiCityZWFkb25seSBvd25lcnNoaXA9ImJ6aXAyIHVwc3RyZWFtIDxrd3JvYm90QGtpdHdhcmUuY29tPiIKK3JlYWRvbmx5IHN1YnRyZWU9IlV0aWxpdGllcy9jbWJ6aXAyIgorcmVhZG9ubHkgcmVwbz0iaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvYnppcDIuZ2l0IgorcmVhZG9ubHkgdGFnPSJiemlwMi0xLjAuOCIKK3JlYWRvbmx5IHNob3J0bG9nPWZhbHNlCityZWFkb25seSBwYXRocz0iCisgIExJQ0VOU0UKKyAgUkVBRE1FCisgICouYworICAqLmgKKyIKKworZXh0cmFjdF9zb3VyY2UgKCkgeworICAgIGdpdF9hcmNoaXZlCisgICAgcHVzaGQgIiR7ZXh0cmFjdGRpcn0vJHtuYW1lfS1yZWR1Y2VkIgorICAgIGVjaG8gIiogLXdoaXRlc3BhY2UiID4gLmdpdGF0dHJpYnV0ZXMKKyAgICBwb3BkCit9CisKKy4gIiR7QkFTSF9TT1VSQ0UlLyp9L3VwZGF0ZS10aGlyZC1wYXJ0eS5iYXNoIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWN1cmwuYmFzaCBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1jdXJsLmJhc2gKaW5kZXggNWMyYTMzMS4uYmFkODhmZSAxMDA3NTUKLS0tIGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWN1cmwuYmFzaAorKysgYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtY3VybC5iYXNoCkBAIC04LDcgKzgsNyBAQAogcmVhZG9ubHkgb3duZXJzaGlwPSJDdXJsIFVwc3RyZWFtIDxjdXJsLWxpYnJhcnlAY29vbC5oYXh4LnNlPiIKIHJlYWRvbmx5IHN1YnRyZWU9IlV0aWxpdGllcy9jbWN1cmwiCiByZWFkb25seSByZXBvPSJodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsLmdpdCIKLXJlYWRvbmx5IHRhZz0iY3VybC03XzY1XzAiCityZWFkb25seSB0YWc9ImN1cmwtN182OV8wIgogcmVhZG9ubHkgc2hvcnRsb2c9ZmFsc2UKIHJlYWRvbmx5IHBhdGhzPSIKICAgQ01ha2UvKgpAQCAtMjMsNiArMjMsMTAgQEAKICAgbGliL2xpYmN1cmwucmMKICAgbGliL3ZhdXRoLyouYwogICBsaWIvdmF1dGgvKi5oCisgIGxpYi92cXVpYy8qLmMKKyAgbGliL3ZxdWljLyouaAorICBsaWIvdnNzaC8qLmMKKyAgbGliL3Zzc2gvKi5oCiAgIGxpYi92dGxzLyouYwogICBsaWIvdnRscy8qLmgKICIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJhcmNoaXZlLmJhc2ggYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGliYXJjaGl2ZS5iYXNoCmluZGV4IDMxODg2NTguLjNkYjg5ZmYgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJhcmNoaXZlLmJhc2gKKysrIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYmFyY2hpdmUuYmFzaApAQCAtOCw3ICs4LDcgQEAKIHJlYWRvbmx5IG93bmVyc2hpcD0iTGliQXJjaGl2ZSBVcHN0cmVhbSA8bGliYXJjaGl2ZS1kaXNjdXNzQGdvb2dsZWdyb3Vwcy5jb20+IgogcmVhZG9ubHkgc3VidHJlZT0iVXRpbGl0aWVzL2NtbGliYXJjaGl2ZSIKIHJlYWRvbmx5IHJlcG89Imh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUuZ2l0IgotcmVhZG9ubHkgdGFnPSJ2My4zLjMiCityZWFkb25seSB0YWc9InYzLjQuMiIKIHJlYWRvbmx5IHNob3J0bG9nPWZhbHNlCiByZWFkb25seSBwYXRocz0iCiAgIENNYWtlTGlzdHMudHh0CkBAIC0yNSw2ICsyNSw3IEBACiAgICAgZ2l0X2FyY2hpdmUKICAgICBwdXNoZCAiJHtleHRyYWN0ZGlyfS8ke25hbWV9LXJlZHVjZWQiCiAgICAgZnJvbWRvcyBidWlsZC9jbWFrZS9GaW5kKi5jbWFrZQorICAgIGVjaG8gIiogLXdoaXRlc3BhY2UiID4gLmdpdGF0dHJpYnV0ZXMKICAgICBwb3BkCiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJyaGFzaC5iYXNoIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYnJoYXNoLmJhc2gKaW5kZXggMDA5Y2UzMi4uZWE3ZTY1NSAxMDA3NTUKLS0tIGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYnJoYXNoLmJhc2gKKysrIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYnJoYXNoLmJhc2gKQEAgLTgsMTEgKzgsMTAgQEAKIHJlYWRvbmx5IG93bmVyc2hpcD0ibGlicmhhc2ggdXBzdHJlYW0gPGt3cm9ib3RAa2l0d2FyZS5jb20+IgogcmVhZG9ubHkgc3VidHJlZT0iVXRpbGl0aWVzL2NtbGlicmhhc2giCiByZWFkb25seSByZXBvPSJodHRwczovL2dpdGh1Yi5jb20vcmhhc2gvcmhhc2guZ2l0IgotcmVhZG9ubHkgdGFnPSJtYXN0ZXIiCityZWFkb25seSB0YWc9InYxLjMuOSIKIHJlYWRvbmx5IHNob3J0bG9nPWZhbHNlCiByZWFkb25seSBwYXRocz0iCiAgIENPUFlJTkcKLSAgUkVBRE1FCiAgIGxpYnJoYXNoL2FsZ29yaXRobXMuYwogICBsaWJyaGFzaC9hbGdvcml0aG1zLmgKICAgbGlicmhhc2gvYnl0ZV9vcmRlci5jCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU3BoaW54L2NtYWtlLnB5IGIvVXRpbGl0aWVzL1NwaGlueC9jbWFrZS5weQppbmRleCBkOTAzZGJlLi5mMTY0ZmQwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvU3BoaW54L2NtYWtlLnB5CisrKyBiL1V0aWxpdGllcy9TcGhpbngvY21ha2UucHkKQEAgLTE5MSw2ICsxOTEsNyBAQAogICAgICdjcGFja19nZW4nOiAgX2NtYWtlX2luZGV4X2VudHJ5KCdjcGFjayBnZW5lcmF0b3InKSwKICAgICAnZW52dmFyJzogICAgIF9jbWFrZV9pbmRleF9lbnRyeSgnZW52dmFyJyksCiAgICAgJ2dlbmVyYXRvcic6ICBfY21ha2VfaW5kZXhfZW50cnkoJ2dlbmVyYXRvcicpLAorICAgICdndWlkZSc6ICAgICAgX2NtYWtlX2luZGV4X2VudHJ5KCdndWlkZScpLAogICAgICdtYW51YWwnOiAgICAgX2NtYWtlX2luZGV4X2VudHJ5KCdtYW51YWwnKSwKICAgICAnbW9kdWxlJzogICAgIF9jbWFrZV9pbmRleF9lbnRyeSgnbW9kdWxlJyksCiAgICAgJ3BvbGljeSc6ICAgICBfY21ha2VfaW5kZXhfZW50cnkoJ3BvbGljeScpLApAQCAtMjUxLDcgKzI1Miw3IEBACiAgICAgICAgIGVudiA9IHNlbGYuZG9jdW1lbnQuc2V0dGluZ3MuZW52CiAKICAgICAgICAgIyBUcmVhdCBzb21lIGRvY3VtZW50cyBhcyBjbWFrZSBkb21haW4gb2JqZWN0cy4KLSAgICAgICAgb2JqdHlwZSwgc2VwLCB0YWlsID0gZW52LmRvY25hbWUucnBhcnRpdGlvbignLycpCisgICAgICAgIG9ianR5cGUsIHNlcCwgdGFpbCA9IGVudi5kb2NuYW1lLnBhcnRpdGlvbignLycpCiAgICAgICAgIG1ha2VfaW5kZXhfZW50cnkgPSBfY21ha2VfaW5kZXhfb2Jqcy5nZXQob2JqdHlwZSkKICAgICAgICAgaWYgbWFrZV9pbmRleF9lbnRyeToKICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5wYXJzZV90aXRsZShlbnYuZG9jbmFtZSkKQEAgLTM3Myw2ICszNzQsNyBAQAogICAgICAgICAnY3BhY2tfZ2VuJzogIE9ialR5cGUoJ2NwYWNrX2dlbicsICAnY3BhY2tfZ2VuJyksCiAgICAgICAgICdlbnZ2YXInOiAgICAgT2JqVHlwZSgnZW52dmFyJywgICAgICdlbnZ2YXInKSwKICAgICAgICAgJ2dlbmVyYXRvcic6ICBPYmpUeXBlKCdnZW5lcmF0b3InLCAgJ2dlbmVyYXRvcicpLAorICAgICAgICAnZ3VpZGUnOiAgICAgIE9ialR5cGUoJ2d1aWRlJywgICAgICAnZ3VpZGUnKSwKICAgICAgICAgJ3ZhcmlhYmxlJzogICBPYmpUeXBlKCd2YXJpYWJsZScsICAgJ3ZhcmlhYmxlJyksCiAgICAgICAgICdtb2R1bGUnOiAgICAgT2JqVHlwZSgnbW9kdWxlJywgICAgICdtb2R1bGUnKSwKICAgICAgICAgJ3BvbGljeSc6ICAgICBPYmpUeXBlKCdwb2xpY3knLCAgICAgJ3BvbGljeScpLApAQCAtNDA3LDYgKzQwOSw3IEBACiAgICAgICAgICdjcGFja19nZW4nOiAgQ01ha2VYUmVmUm9sZSgpLAogICAgICAgICAnZW52dmFyJzogICAgIENNYWtlWFJlZlJvbGUoKSwKICAgICAgICAgJ2dlbmVyYXRvcic6ICBDTWFrZVhSZWZSb2xlKCksCisgICAgICAgICdndWlkZSc6ICAgICAgQ01ha2VYUmVmUm9sZSgpLAogICAgICAgICAndmFyaWFibGUnOiAgIENNYWtlWFJlZlJvbGUoKSwKICAgICAgICAgJ21vZHVsZSc6ICAgICBDTWFrZVhSZWZSb2xlKCksCiAgICAgICAgICdwb2xpY3knOiAgICAgQ01ha2VYUmVmUm9sZSgpLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NwaGlueC9jcmVhdGVfaWRlbnRpZmllcnMucHkgYi9VdGlsaXRpZXMvU3BoaW54L2NyZWF0ZV9pZGVudGlmaWVycy5weQppbmRleCA2NzE2YjQ4Li5iNWNkOTE0IDEwMDc1NQotLS0gYS9VdGlsaXRpZXMvU3BoaW54L2NyZWF0ZV9pZGVudGlmaWVycy5weQorKysgYi9VdGlsaXRpZXMvU3BoaW54L2NyZWF0ZV9pZGVudGlmaWVycy5weQpAQCAtMjUsNiArMjUsNyBAQAogICAgICAgICAgICAgICgiZW52dmFyIiwgImVudnZhciIpLAogICAgICAgICAgICAgICgidmFyaWFibGUiLCAidmFyaWFibGUiKSwKICAgICAgICAgICAgICAoImdlbmVyYXRvciIsICJnZW5lcmF0b3IiKSwKKyAgICAgICAgICAgICAoImd1aWRlIiwgImd1aWRlIiksCiAgICAgICAgICAgICAgKCJ0YXJnZXQgcHJvcGVydHkiLCAicHJvcF90Z3QiKSwKICAgICAgICAgICAgICAoInRlc3QgcHJvcGVydHkiLCAicHJvcF90ZXN0IiksCiAgICAgICAgICAgICAgKCJzb3VyY2UgZmlsZSBwcm9wZXJ0eSIsICJwcm9wX3NmIiksCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi8uZ2l0YXR0cmlidXRlcyBiL1V0aWxpdGllcy9jbWJ6aXAyLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21iemlwMi8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9DSEFOR0VTIGIvVXRpbGl0aWVzL2NtYnppcDIvQ0hBTkdFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU0ZjY1ZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9DSEFOR0VTCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCi0KLSBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotCi0gUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIFJFQURNRSBmaWxlLgotCi0gVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLSBpbiB0aGUgZmlsZSBMSUNFTlNFLgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLTAuOS4wCi1+fn5+fgotRmlyc3QgdmVyc2lvbi4KLQotCi0wLjkuMGEKLX5+fn5+fgotUmVtb3ZlZCAncmFubGliJyBmcm9tIE1ha2VmaWxlLCBzaW5jZSBtb3N0IG1vZGVybiBVbml4LWVzIAotZG9uJ3QgbmVlZCBpdCwgb3IgZXZlbiBrbm93IGFib3V0IGl0LgotCi0KLTAuOS4wYgotfn5+fn5+Ci1GaXhlZCBhIHByb2JsZW0gd2l0aCBlcnJvciByZXBvcnRpbmcgaW4gYnppcDIuYy4gIFRoaXMgZG9lcyBub3QgZWZmZWN0Ci10aGUgbGlicmFyeSBpbiBhbnkgd2F5LiAgUHJvYmxlbSBpczogdmVyc2lvbnMgMC45LjAgYW5kIDAuOS4wYSAob2YgdGhlCi1wcm9ncmFtIHByb3BlcikgY29tcHJlc3MgYW5kIGRlY29tcHJlc3MgY29ycmVjdGx5LCBidXQgZ2l2ZSBtaXNsZWFkaW5nCi1lcnJvciBtZXNzYWdlcyAoaW50ZXJuYWwgcGFuaWNzKSB3aGVuIGFuIEkvTyBlcnJvciBvY2N1cnMsIGluc3RlYWQgb2YKLXJlcG9ydGluZyB0aGUgcHJvYmxlbSBjb3JyZWN0bHkuICBUaGlzIHNob3VsZG4ndCBnaXZlIGFueSBkYXRhIGxvc3MKLShhcyBmYXIgYXMgSSBjYW4gc2VlKSwgYnV0IGlzIGNvbmZ1c2luZy4KLQotTWFkZSB0aGUgaW5saW5lIGRlY2xhcmF0aW9ucyBkaXNhcHBlYXIgZm9yIG5vbi1HQ0MgY29tcGlsZXJzLgotCi0KLTAuOS4wYwotfn5+fn5+Ci1GaXhlZCBzb21lIHByb2JsZW1zIGluIHRoZSBsaWJyYXJ5IHBlcnRhaW5pbmcgdG8gc29tZSBib3VuZGFyeSBjYXNlcy4KLVRoaXMgbWFrZXMgdGhlIGxpYnJhcnkgYmVoYXZlIG1vcmUgY29ycmVjdGx5IGluIHRob3NlIHNpdHVhdGlvbnMuICBUaGUKLWZpeGVzIGFwcGx5IG9ubHkgdG8gZmVhdHVyZXMgKGNhbGxzIGFuZCBwYXJhbWV0ZXJzKSBub3QgdXNlZCBieQotYnppcDIuYywgc28gdGhlIG5vbi1maXhlZG5lc3Mgb2YgdGhlbSBpbiBwcmV2aW91cyB2ZXJzaW9ucyBoYXMgbm8KLWVmZmVjdCBvbiByZWxpYWJpbGl0eSBvZiBiemlwMi5jLgotCi1JbiBiemxpYi5jOgotICAgKiBtYWRlIHplcm8tbGVuZ3RoIEJaX0ZMVVNIIHdvcmsgY29ycmVjdGx5IGluIGJ6Q29tcHJlc3MoKS4KLSAgICogZml4ZWQgYnpXcml0ZS9ielJlYWQgdG8gaWdub3JlIHplcm8tbGVuZ3RoIHJlcXVlc3RzLgotICAgKiBmaXhlZCBienJlYWQgdG8gY29ycmVjdGx5IGhhbmRsZSByZWFkIHJlcXVlc3RzIGFmdGVyIEVPRi4KLSAgICogd3JvbmcgcGFyYW1ldGVyIG9yZGVyIGluIGNhbGwgdG8gYnpEZWNvbXByZXNzSW5pdCBpbgotICAgICBiekJ1ZmZUb0J1ZmZEZWNvbXByZXNzLiAgRml4ZWQuCi0KLUluIGNvbXByZXNzLmM6Ci0gICAqIGNoYW5nZWQgc2V0dGluZyBvZiBuR3JvdXBzIGluIHNlbmRNVEZWYWx1ZXMoKSBzbyBhcyB0byAKLSAgICAgZG8gYSBiaXQgYmV0dGVyIG9uIHNtYWxsIGZpbGVzLiAgVGhpcyBfZG9lc18gZWZmZWN0Ci0gICAgIGJ6aXAyLmMuCi0KLQotMC45LjVhCi1+fn5+fn4KLU1ham9yIGNoYW5nZTogYWRkIGEgZmFsbGJhY2sgc29ydGluZyBhbGdvcml0aG0gKGJsb2Nrc29ydC5jKQotdG8gZ2l2ZSByZWFzb25hYmxlIGJlaGF2aW91ciBldmVuIGZvciB2ZXJ5IHJlcGV0aXRpdmUgaW5wdXRzLgotTnVrZWQgLS1yZXBldGl0aXZlLWJlc3QgYW5kIC0tcmVwZXRpdGl2ZS1mYXN0IHNpbmNlIHRoZXkgYXJlCi1ubyBsb25nZXIgdXNlZnVsLgotCi1NaW5vciBjaGFuZ2VzOiBtb3N0bHkgYSB3aG9sZSBidW5jaCBvZiBzbWFsbCBjaGFuZ2VzLwotYnVnZml4ZXMgaW4gdGhlIGRyaXZlciAoYnppcDIuYykuICBDaGFuZ2VzIHBlcnRhaW5pbmcgdG8gdGhlCi11c2VyIGludGVyZmFjZSBhcmU6Ci0KLSAgIGFsbG93IGRlY29tcHJlc3Npb24gb2Ygc3ltbGluaydkIGZpbGVzIHRvIHN0ZG91dAotICAgZGVjb21wcmVzcy90ZXN0IGZpbGVzIGV2ZW4gd2l0aG91dCAuYnoyIGV4dGVuc2lvbgotICAgZ2l2ZSBtb3JlIGFjY3VyYXRlIGVycm9yIG1lc3NhZ2VzIGZvciBJL08gZXJyb3JzCi0gICB3aGVuIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgdG8gc3Rkb3V0LCBkb24ndCBjYXRjaCBjb250cm9sLUMKLSAgIHJlYWQgZmxhZ3MgZnJvbSBCWklQMiBhbmQgQlpJUCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgIGRlY2xpbmUgdG8gYnJlYWsgaGFyZCBsaW5rcyB0byBhIGZpbGUgdW5sZXNzIGZvcmNlZCB3aXRoIC1mCi0gICBhbGxvdyAtYyBmbGFnIGV2ZW4gd2l0aCBubyBmaWxlbmFtZXMKLSAgIHByZXNlcnZlIGZpbGUgb3duZXJzaGlwcyBhcyBmYXIgYXMgcG9zc2libGUKLSAgIG1ha2UgLXMgLTEgZ2l2ZSB0aGUgZXhwZWN0ZWQgYmxvY2sgc2l6ZSAoMTAwaykKLSAgIGFkZCBhIGZsYWcgLXEgLS1xdWlldCB0byBzdXBwcmVzcyBub25lc3NlbnRpYWwgd2FybmluZ3MKLSAgIHN0b3AgZGVjb2RpbmcgZmxhZ3MgYWZ0ZXIgLS0sIHNvIGZpbGVzIGJlZ2lubmluZyBpbiAtIGNhbiBiZSBoYW5kbGVkCi0gICByZXNvbHZlZCBpbmNvbnNpc3RlbnQgbmFtaW5nOiBiemNhdCBvciBiejJjYXQgPwotICAgYnppcDIgLS1oZWxwIG5vdyByZXR1cm5zIDAKLQotUHJvZ3JhbW1pbmctbGV2ZWwgY2hhbmdlcyBhcmU6Ci0KLSAgIGZpeGVkIHN5bnRheCBlcnJvciBpbiBHRVRfTEw0IGZvciBCb3JsYW5kIEMrKyA1LjAyCi0gICBsZXQgYnpCdWZmVG9CdWZmRGVjb21wcmVzcyByZXR1cm4gQlpfREFUQV9FUlJPUntfTUFHSUN9Ci0gICBmaXggb3ZlcnNob290IG9mIG1vZGUtc3RyaW5nIGVuZCBpbiBiem9wZW5fb3JfYnpkb3BlbgotICAgd3JhcHBlZCBiemxpYi5oIGluICNpZmRlZiBfX2NwbHVzcGx1cyAuLi4gZXh0ZXJuICJDIiB7IC4uLiB9Ci0gICBjbG9zZSBmaWxlIGhhbmRsZXMgdW5kZXIgYWxsIGVycm9yIGNvbmRpdGlvbnMKLSAgIGFkZGVkIG1pbm9yIG1vZHMgc28gaXQgY29tcGlsZXMgd2l0aCBESkdQUCBvdXQgb2YgdGhlIGJveAotICAgZml4ZWQgTWFrZWZpbGUgc28gaXQgZG9lc24ndCBnaXZlIHByb2JsZW1zIHdpdGggQlNEIG1ha2UKLSAgIGZpeCB1bmluaXRpYWxpc2VkIG1lbW9yeSByZWFkcyBpbiBkbGx0ZXN0LmMKLQotMC45LjViCi1+fn5+fn4KLU9wZW4gc3RkaW4vc3Rkb3V0IGluIGJpbmFyeSBtb2RlIGZvciBESkdQUC4KLQotMC45LjVjCi1+fn5+fn4KLUNoYW5nZWQgQlpfTl9PVkVSU0hPT1QgdG8gYmUgLi4uICsgMiBpbnN0ZWFkIG9mIC4uLiArIDEuICBUaGUgKyAxCi12ZXJzaW9uIGNvdWxkIGNhdXNlIHRoZSBzb3J0ZWQgb3JkZXIgdG8gYmUgd3JvbmcgaW4gc29tZSBleHRyZW1lbHkKLW9ic2N1cmUgY2FzZXMuICBBbHNvIGNoYW5nZWQgc2V0dGluZyBvZiBxdWFkcmFudCBpbiBibG9ja3NvcnQuYy4KLQotMC45LjVkCi1+fn5+fn4KLVRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIHRvIG1ha2UgYnpsaWJWZXJzaW9uKCkgaW4gdGhlIGxpYnJhcnkKLXJldHVybiB0aGUgY29ycmVjdCBzdHJpbmcuICBUaGlzIGhhcyBubyBlZmZlY3Qgd2hhdHNvZXZlciBvbiB0aGUKLWZ1bmN0aW9uaW5nIG9mIHRoZSBiemlwMiBwcm9ncmFtIG9yIGxpYnJhcnkuICBBZGRlZCBhIGNvdXBsZSBvZiBjYXN0cwotc28gdGhlIGxpYnJhcnkgY29tcGlsZXMgd2l0aG91dCB3YXJuaW5ncyBhdCBsZXZlbCAzIGluIE1TIFZpc3VhbAotU3R1ZGlvIDYuMC4gIEluY2x1ZGVkIGEgWTJLIHN0YXRlbWVudCBpbiB0aGUgZmlsZSBZMktfSU5GTy4gIEFsbCBvdGhlcgotY2hhbmdlcyBhcmUgbWlub3IgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLgotCi0xLjAKLX5+fgotU2V2ZXJhbCBtaW5vciBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzOgotCi0qIExhcmdlIGZpbGUgc3VwcG9ydC4gIFRoZSBsaWJyYXJ5IHVzZXMgNjQtYml0IGNvdW50ZXJzIHRvCi0gIGNvdW50IHRoZSB2b2x1bWUgb2YgZGF0YSBwYXNzaW5nIHRocm91Z2ggaXQuICBiemlwMi5jIAotICBpcyBub3cgY29tcGlsZWQgd2l0aCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IHRvIGdldCBsYXJnZQotICBmaWxlIHN1cHBvcnQgZnJvbSB0aGUgQyBsaWJyYXJ5LiAgLXYgY29ycmVjdGx5IHByaW50cyBvdXQKLSAgZmlsZSBzaXplcyBncmVhdGVyIHRoYW4gNCBnaWdhYnl0ZXMuICBBbGwgdGhlc2UgY2hhbmdlcyBoYXZlCi0gIGJlZW4gbWFkZSB3aXRob3V0IGFzc3VtaW5nIGEgNjQtYml0IHBsYXRmb3JtIG9yIGEgQyBjb21waWxlcgotICB3aGljaCBzdXBwb3J0cyA2NC1iaXQgaW50cywgc28sIGV4Y2VwdCBmb3IgdGhlIEMgbGlicmFyeQotICBhc3BlY3QsIHRoZXkgYXJlIGZ1bGx5IHBvcnRhYmxlLgotCi0qIERlY29tcHJlc3Npb24gcm9idXN0bmVzcy4gIFRoZSBsaWJyYXJ5L3Byb2dyYW0gc2hvdWxkIGJlCi0gIHJvYnVzdCB0byBhbnkgY29ycnVwdGlvbiBvZiBjb21wcmVzc2VkIGRhdGEsIGRldGVjdGluZyBhbmQKLSAgaGFuZGxpbmcgX2FsbF8gY29ycnVwdGlvbiwgaW5zdGVhZCBvZiBtZXJlbHkgcmVseWluZyBvbgotICB0aGUgQ1JDcy4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHRoZSBwcm9ncmFtIHNob3VsZCAKLSAgbmV2ZXIgY3Jhc2gsIGdpdmVuIGNvcnJ1cHRlZCBkYXRhLCBhbmQgdGhlIGxpYnJhcnkgc2hvdWxkCi0gIGFsd2F5cyByZXR1cm4gQlpfREFUQV9FUlJPUi4KLQotKiBGaXhlZCBhbiBvYnNjdXJlIHJhY2UtY29uZGl0aW9uIGJ1ZyBvbmx5IGV2ZXIgb2JzZXJ2ZWQgb24KLSAgU29sYXJpcywgaW4gd2hpY2gsIGlmIHlvdSB3ZXJlIHZlcnkgdW5sdWNreSBhbmQgaXNzdWVkCi0gIGNvbnRyb2wtQyBhdCBleGFjdGx5IHRoZSB3cm9uZyB0aW1lLCBib3RoIGlucHV0IGFuZCBvdXRwdXQKLSAgZmlsZXMgd291bGQgYmUgZGVsZXRlZC4KLQotKiBEb24ndCBydW4gb3V0IG9mIGZpbGUgaGFuZGxlcyBvbiB0ZXN0L2RlY29tcHJlc3Npb24gd2hlbgotICBsYXJnZSBudW1iZXJzIG9mIGZpbGVzIGhhdmUgaW52YWxpZCBtYWdpYyBudW1iZXJzLgotCi0qIEF2b2lkIGxpYnJhcnkgbmFtZXNwYWNlIHBvbGx1dGlvbi4gIFByZWZpeCBhbGwgZXhwb3J0ZWQgCi0gIHN5bWJvbHMgd2l0aCBCWjJfLgotCi0qIE1pbm9yIHNvcnRpbmcgZW5oYW5jZW1lbnRzIGZyb20gbXkgRENDMjAwMCBwYXBlci4KLQotKiBBZHZhbmNlIHRoZSB2ZXJzaW9uIG51bWJlciB0byAxLjAsIHNvIGFzIHRvIGNvdW50ZXJhY3QgdGhlCi0gIChmYWxzZS1pbi10aGlzLWNhc2UpIGltcHJlc3Npb24gc29tZSBwZW9wbGUgaGF2ZSB0aGF0IHByb2dyYW1zIAotICB3aXRoIHZlcnNpb24gbnVtYmVycyBsZXNzIHRoYW4gMS4wIGFyZSBpbiBzb21lIHdheSwgZXhwZXJpbWVudGFsLAotICBwcmUtcmVsZWFzZSB2ZXJzaW9ucy4KLQotKiBDcmVhdGUgYW4gaW5pdGlhbCBNYWtlZmlsZS1saWJiejJfc28gdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeS4KLSAgWWVzLCBJIGtub3cgSSBzaG91bGQgcmVhbGx5IHVzZSBsaWJ0b29sIGV0IGFsIC4uLgotCi0qIE1ha2UgdGhlIHByb2dyYW0gZXhpdCB3aXRoIDIgaW5zdGVhZCBvZiAwIHdoZW4gZGVjb21wcmVzc2lvbgotICBmYWlscyBkdWUgdG8gYSBiYWQgbWFnaWMgbnVtYmVyIChpZSwgYW4gaW52YWxpZCBiemlwMiBoZWFkZXIpLgotICBBbHNvIGV4aXQgd2l0aCAxIChhcyB0aGUgbWFudWFsIGNsYWltcyA6LSkgd2hlbmV2ZXIgYSBkaWFnbm9zdGljCi0gIG1lc3NhZ2Ugd291bGQgaGF2ZSBiZWVuIHByaW50ZWQgQU5EIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiAKLSAgaXMgYWJvcnRlZCwgZm9yIGV4YW1wbGUKLSAgICAgYnppcDI6IE91dHB1dCBmaWxlIHh4IGFscmVhZHkgZXhpc3RzLgotICBXaGVuIGEgZGlhZ25vc3RpYyBtZXNzYWdlIGlzIHByaW50ZWQgYnV0IHRoZSBvcGVyYXRpb24gaXMgbm90IAotICBhYm9ydGVkLCBmb3IgZXhhbXBsZQotICAgICBiemlwMjogQ2FuJ3QgZ3Vlc3Mgb3JpZ2luYWwgbmFtZSBmb3Igd3VyYmxlIC0tIHVzaW5nIHd1cmJsZS5vdXQKLSAgdGhlbiB0aGUgZXhpdCB2YWx1ZSAwIGlzIHJldHVybmVkLCB1bmxlc3Mgc29tZSBvdGhlciBwcm9ibGVtIGlzCi0gIGFsc28gZGV0ZWN0ZWQuCi0KLSAgSSB0aGluayBpdCBjb3JyZXNwb25kcyBtb3JlIGNsb3NlbHkgdG8gd2hhdCB0aGUgbWFudWFsIGNsYWltcyBub3cuCi0KLQotMS4wLjEKLX5+fn5+Ci0qIE1vZGlmaWVkIGRsbHRlc3QuYyBzbyBpdCB1c2VzIHRoZSBuZXcgQloyXyBuYW1pbmcgc2NoZW1lLgotKiBNb2RpZmllZCBtYWtlZmlsZS1tc2MgdG8gZml4IG1pbm9yIGJ1aWxkIHByb2JzIG9uIFdpbjJrLgotKiBVcGRhdGVkIFJFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUy4KLQotVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcyBvciBidWcgZml4ZXMgcmVsYXRpdmUgdG8gdmVyc2lvbgotMS4wLjAuICBUaGlzIGlzIGp1c3QgYSBkb2N1bWVudGF0aW9uIHVwZGF0ZSArIGEgZml4IGZvciBtaW5vciBXaW4zMgotYnVpbGQgcHJvYmxlbXMuICBGb3IgYWxtb3N0IGV2ZXJ5b25lLCB1cGdyYWRpbmcgZnJvbSAxLjAuMCB0byAxLjAuMSBpcwotdXR0ZXJseSBwb2ludGxlc3MuICBEb24ndCBib3RoZXIuCi0KLQotMS4wLjIKLX5+fn5+Ci1BIGJ1ZyBmaXggcmVsZWFzZSwgYWRkcmVzc2luZyB2YXJpb3VzIG1pbm9yIGlzc3VlcyB3aGljaCBoYXZlIGFwcGVhcmVkCi1pbiB0aGUgMTggb3Igc28gbW9udGhzIHNpbmNlIDEuMC4xIHdhcyByZWxlYXNlZC4gIE1vc3Qgb2YgdGhlIGZpeGVzCi1hcmUgdG8gZG8gd2l0aCBmaWxlLWhhbmRsaW5nIG9yIGRvY3VtZW50YXRpb24gYnVncy4gIFRvIHRoZSBiZXN0IG9mIG15Ci1rbm93bGVkZ2UsIHRoZXJlIGhhdmUgYmVlbiBubyBkYXRhLWxvc3MtY2F1c2luZyBidWdzIHJlcG9ydGVkIGluIHRoZQotY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBlbmdpbmUgb2YgMS4wLjAgb3IgMS4wLjEuCi0KLU5vdGUgdGhhdCB0aGlzIHJlbGVhc2UgZG9lcyBub3QgaW1wcm92ZSB0aGUgcmF0aGVyIGNydWRlIGJ1aWxkIHN5c3RlbQotZm9yIFVuaXggcGxhdGZvcm1zLiAgVGhlIGdlbmVyYWwgcGxhbiBoZXJlIGlzIHRvIGF1dG9jb25maXNjYXRlLwotbGlidG9vbGlzZSAxLjAuMiBzb29uIGFmdGVyIHJlbGVhc2UsIGFuZCByZWxlYXNlIHRoZSByZXN1bHQgYXMgMS4xLjAKLW9yIHBlcmhhcHMgMS4yLjAuICBUaGF0LCBob3dldmVyLCBpcyBzdGlsbCBqdXN0IGEgcGxhbiBhdCB0aGlzIHBvaW50LgotCi1IZXJlIGFyZSB0aGUgY2hhbmdlcyBpbiAxLjAuMi4gIEJ1Zy1yZXBvcnRlcnMgYW5kL29yIHBhdGNoLXNlbmRlcnMgaW4KLXBhcmVudGhlc2VzLgotCi0qIEZpeCBhbiBpbmZpbml0ZSBzZWdmYXVsdCBsb29wIGluIDEuMC4xIHdoZW4gYSBkaXJlY3RvcnkgaXMKLSAgZW5jb3VudGVyZWQgaW4gLWYgKGZvcmNlKSBtb2RlLgotICAgICAoVHJvbmQgRWl2aW5kIEdsb21zcm9kLCBOaWNob2xhcyBOZXRoZXJjb3RlLCBWb2xrZXIgU2NobWlkdCkKLQotKiBBdm9pZCBkb3VibGUgZmNsb3NlKCkgb2Ygb3V0cHV0IGZpbGUgb24gY2VydGFpbiBJL08gZXJyb3IgcGF0aHMuCi0gICAgIChTb2xhciBEZXNpZ25lcikKLQotKiBEb24ndCBmYWlsIHdpdGggaW50ZXJuYWwgZXJyb3IgMTAwNyB3aGVuIGZlZCBhIGxvbmcgc3RyZWFtICg+IDQ4TUIpCi0gIG9mIGJ5dGUgMjUxLiAgQWxzbyBwcmludCB1c2VmdWwgbWVzc2FnZSBzdWdnZXN0aW5nIHRoYXQgMTAwN3MgbWF5IGJlCi0gIGNhdXNlZCBieSBiYWQgbWVtb3J5LgotICAgICAobm90aWNlZCBieSBKdWFuIFBlZHJvIFZhbGxlam8sIGZpeGVkIGJ5IG1lKQotCi0qIEZpeCB1bmluaXRpYWxpc2VkIHZhcmlhYmxlIHNpbGx5IGJ1ZyBpbiBkZW1vIHByb2cgZGxsdGVzdC5jLgotICAgICAoSm9yaiBCYXVlcikKLQotKiBSZW1vdmUgNTEyLU1CIGxpbWl0YXRpb24gb24gcmVjb3ZlcmVkIGZpbGUgc2l6ZSBmb3IgYnppcDJyZWNvdmVyCi0gIG9uIHNlbGVjdGVkIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IDY0LWJpdCBpbnRzLiAgQXQgdGhlIG1vbWVudAotICBhbGwgR0NDIHN1cHBvcnRlZCBwbGF0Zm9ybXMsIGFuZCBXaW4zMi4KLSAgICAgKG1lLCBBbHNvbiB2YW4gZGVyIE1ldWxlbikKLQotKiBIYXJkLWNvZGUgaGVhZGVyIGJ5dGUgdmFsdWVzLCB0byBnaXZlIGNvcnJlY3Qgb3BlcmF0aW9uIG9uIHBsYXRmb3JtcwotICB1c2luZyBFQkNESUMgYXMgdGhlaXIgbmF0aXZlIGNoYXJhY3RlciBzZXQgKElCTSdzIE9TLzM5MCkuCi0gICAgIChMZWxhbmQgTHVjaXVzKQotCi0qIENvcHkgZmlsZSBhY2Nlc3MgdGltZXMgY29ycmVjdGx5LgotICAgICAoTWFydHkgTGVpc25lcikKLQotKiBBZGQgZGlzdGNsZWFuIGFuZCBjaGVjayB0YXJnZXRzIHRvIE1ha2VmaWxlLgotICAgICAoTWljaGFlbCBDYXJtYWNrKQotCi0qIFBhcmFtZXRlcmlzZSB1c2Ugb2YgYXIgYW5kIHJhbmxpYiBpbiBNYWtlZmlsZS4gIEFsc28gYWRkICQoTERGTEFHUykuCi0gICAgIChSaWNoIElyZWxhbmQsIEJvIFRob3JzZW4pCi0KLSogUGFzcyAtcCAoY3JlYXRlIHBhcmVudCBkaXJzIGFzIG5lZWRlZCkgdG8gbWtkaXIgZHVyaW5nIG1ha2UgaW5zdGFsbC4KLSAgICAgKEplcmVteSBGdXNjbykKLQotKiBEZXJlZmVyZW5jZSBzeW1saW5rcyB3aGVuIGNvcHlpbmcgZmlsZSBwZXJtaXNzaW9ucyBpbiAtZiBtb2RlLgotICAgICAoVm9sa2VyIFNjaG1pZHQpCi0KLSogTWFqb3JseSBzaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiB1SW50NjRfcXJtMTAuCi0gICAgIChCbyBMaW5kYmVyZ2gpCi0KLSogQ2hlY2sgdGhlIGlucHV0IGZpbGUgc3RpbGwgZXhpc3RzIGJlZm9yZSBkZWxldGluZyB0aGUgb3V0cHV0IG9uZSwKLSAgd2hlbiBhYm9ydGluZyBpbiBjbGVhblVwQW5kRmFpbCgpLgotICAgICAoSm9lcmcgUHJhbnRlLCBSb2JlcnQgTGluZGVuLCBNYXR0aGlhcyBLcmluZ3MpCi0KLUFsc28gYSBidW5jaCBvZiBwYXRjaGVzIGNvdXJ0ZXN5IG9mIFBoaWxpcHBlIFRyb2luLCB0aGUgRGViaWFuIG1haW50YWluZXIKLW9mIGJ6aXAyOgotCi0qIFdyYXBwZXIgc2NyaXB0cyAod2l0aCBtYW5wYWdlcyk6IGJ6ZGlmZiwgYnpncmVwLCBiem1vcmUuCi0KLSogU3BlbGxpbmcgY2hhbmdlcyBhbmQgbWlub3IgZW5oYW5jZW1lbnRzIGluIGJ6aXAyLjEuCi0KLSogQXZvaWQgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBjcmVhdGluZyB0aGUgb3V0cHV0IGZpbGUgYW5kIHNldHRpbmcgaXRzCi0gIGludGVyaW0gcGVybWlzc2lvbnMgc2FmZWx5LCBieSB1c2luZyBmb3Blbl9vdXRwdXRfc2FmZWx5KCkuCi0gIE5vIGNoYW5nZXMgdG8gYnppcDJyZWNvdmVyIHNpbmNlIHRoZXJlIGlzIG5vIGlzc3VlIHdpdGggZmlsZQotICBwZXJtaXNzaW9ucyB0aGVyZS4KLQotKiBkbyBub3QgcHJpbnQgc2Vuc2VsZXNzIHJlcG9ydCB3aXRoIC12IHdoZW4gY29tcHJlc3NpbmcgYW4gZW1wdHkKLSAgZmlsZS4KLQotKiBiemNhdCAtZiB3b3JrcyBvbiBub24tYnppcDIgZmlsZXMuCi0KLSogZG8gbm90IHRyeSB0byBlc2NhcGUgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9uIHVuaXggKHRoZSBzaGVsbCB0YWtlcwotICBjYXJlIG9mIHRoZXNlKS4KLQotKiBhZGRlZCAtLWZhc3QgYW5kIC0tYmVzdCBhbGlhc2VzIGZvciAtMSAtOSBmb3IgZ3ppcCBjb21wYXRpYmlsaXR5LgotCi0KLTEuMC4zICgxNSBGZWIgMDUpCi1+fn5+fn5+fn5+fn5+fn5+fgotRml4ZXMgc29tZSBtaW5vciBidWdzIHNpbmNlIHRoZSBsYXN0IHZlcnNpb24sIDEuMC4yLgotCi0qIEZ1cnRoZXIgcm9idXN0aWZpY2F0aW9uIGFnYWluc3QgY29ycnVwdGVkIGNvbXByZXNzZWQgZGF0YS4KLSAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBrbm93biBiaXRzdHJlYW1zIHdoaWNoIGNhbiBjYXVzZSB0aGUKLSAgZGVjb21wcmVzc29yIHRvIGNyYXNoLCBsb29wIG9yIGFjY2VzcyBtZW1vcnkgd2hpY2ggZG9lcyBub3QKLSAgYmVsb25nIHRvIGl0LiAgSWYgeW91IGFyZSB1c2luZyBiemlwMiBvciB0aGUgbGlicmFyeSB0byAKLSAgZGVjb21wcmVzcyBiaXRzdHJlYW1zIGZyb20gdW50cnVzdGVkIHNvdXJjZXMsIGFuIHVwZ3JhZGUKLSAgdG8gMS4wLjMgaXMgcmVjb21tZW5kZWQuICBUaGlzIGZpeGVzIENBTi0yMDA1LTEyNjAuCi0KLSogVGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gY29udmVydGVkIHRvIFhNTCwgZnJvbSB3aGljaCBodG1sCi0gIGFuZCBwZGYgY2FuIGJlIGRlcml2ZWQuCi0KLSogVmFyaW91cyBtaW5vciBidWdzIGluIHRoZSBkb2N1bWVudGF0aW9uIGhhdmUgYmVlbiBmaXhlZC4KLQotKiBGaXhlcyBmb3IgdmFyaW91cyBjb21waWxhdGlvbiB3YXJuaW5ncyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mCi0gIGdjYywgYW5kIG9uIDY0LWJpdCBwbGF0Zm9ybXMuCi0KLSogVGhlIEJaX05PX1NURElPIGNwcCBzeW1ib2wgd2FzIG5vdCBwcm9wZXJseSBvYnNlcnZlZCBpbiAxLjAuMi4KLSAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KLQotCi0xLjAuNCAoMjAgRGVjIDA2KQotfn5+fn5+fn5+fn5+fn5+fn4KLUZpeGVzIHNvbWUgbWlub3IgYnVncyBzaW5jZSB0aGUgbGFzdCB2ZXJzaW9uLCAxLjAuMy4KLQotKiBGaXggZmlsZSBwZXJtaXNzaW9ucyByYWNlIHByb2JsZW0gKENBTi0yMDA1LTA5NTMpLgotCi0qIEF2b2lkIHBvc3NpYmxlIHNlZ2ZhdWx0IGluIEJaMl9iemNsb3NlLiAgRnJvbSBDb3Zlcml0eSdzIE5ldEJTRAotICBzY2FuLgotCi0qICdjb25zdCcvcHJvdG90eXBlIGNsZWFudXBzIGluIHRoZSBDIGNvZGUuCi0KLSogQ2hhbmdlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbiB0byAvdXNyL2xvY2FsLCBhbmQgaGFuZGxlIG11bHRpcGxlCi0gICdtYWtlIGluc3RhbGwncyB3aXRob3V0IGVycm9yLgotCi0qIFNhbml0aXNlIGZpbGUgbmFtZXMgbW9yZSBjYXJlZnVsbHkgaW4gYnpncmVwLiAgRml4ZXMgQ0FOLTIwMDUtMDc1OAotICB0byB0aGUgZXh0ZW50IHRoYXQgYXBwbGllcyB0byBiemdyZXAuCi0KLSogVXNlICdta3RlbXAnIHJhdGhlciB0aGFuICd0ZW1wZmlsZScgaW4gYnpkaWZmLgotCi0qIFRpZ2h0ZW4gdXAgYSBjb3VwbGUgb2YgYXNzZXJ0aW9ucyBpbiBibG9ja3NvcnQuYyBmb2xsb3dpbmcgYXV0b21hdGVkCi0gIGFuYWx5c2lzLgotCi0qIEZpeCBtaW5vciBkb2MvY29tbWVudCBidWdzLgotCi0KLTEuMC41ICgxMCBEZWMgMDcpCi1+fn5+fn5+fn5+fn5+fn5+fgotU2VjdXJpdHkgZml4IG9ubHkuICBGaXhlcyBDRVJULUZJIDIwNDY5IGFzIGl0IGFwcGxpZXMgdG8gYnppcDIuCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMmFmZjY5Yy4uY2I0YTAzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSwxMyBAQAogcHJvamVjdChiemlwMikKKworIyBEaXNhYmxlIHdhcm5pbmdzIHRvIGF2b2lkIGNoYW5naW5nIDNyZCBwYXJ0eSBjb2RlLgoraWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTCisgICAgIl4oR05VfENsYW5nfEFwcGxlQ2xhbmd8WExDbGFuZ3xYTHxWaXN1YWxBZ2V8U3VuUHJvfEhQfEludGVsKSQiKQorICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtdyIpCitlbHNlaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiUGF0aFNjYWxlIikKKyAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXdvZmZhbGwiKQorZW5kaWYoKQorCiBhZGRfZGVmaW5pdGlvbnMoLURfRklMRV9PRkZTRVRfQklUUz02NCkKIGFkZF9saWJyYXJ5KGNtYnppcDIKICAgYmxvY2tzb3J0LmMgaHVmZm1hbi5jIGNyY3RhYmxlLmMgcmFuZHRhYmxlLmMgY29tcHJlc3MuYyBkZWNvbXByZXNzLmMgYnpsaWIuYykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL0xJQ0VOU0UgYi9VdGlsaXRpZXMvY21iemlwMi9MSUNFTlNFCmluZGV4IGY0MjBjZmYuLjgxYTM3ZWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL0xJQ0VOU0UKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvTElDRU5TRQpAQCAtMiw3ICsyLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgcHJvZ3JhbSwgImJ6aXAyIiwgdGhlIGFzc29jaWF0ZWQgbGlicmFyeSAibGliYnppcDIiLCBhbmQgYWxsCi1kb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCitkb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCiByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzYsNyArMzYsNyBAQAogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotSnVsaWFuIFNld2FyZCwganNld2FyZEBiemlwLm9yZwotYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3CitKdWxpYW4gU2V3YXJkLCBqc2V3YXJkQGFjbS5vcmcKK2J6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9NYWtlZmlsZS1saWJiejJfc28gYi9VdGlsaXRpZXMvY21iemlwMi9NYWtlZmlsZS1saWJiejJfc28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNzA4ODcuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvTWFrZWZpbGUtbGliYnoyX3NvCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotCi0jIFRoaXMgTWFrZWZpbGUgYnVpbGRzIGEgc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIAotIyBsaWJiejIuc28uMS4wLjQsIHdpdGggc29uYW1lIGxpYmJ6Mi5zby4xLjAsCi0jIGF0IGxlYXN0IG9uIHg4Ni1MaW51eCAoUmVkSGF0IDcuMiksIAotIyB3aXRoIGdjYy0yLjk2IDIwMDAwNzMxIChSZWQgSGF0IExpbnV4IDcuMSAyLjk2LTk4KS4gIAotIyBQbGVhc2Ugc2VlIHRoZSBSRUFETUUgZmlsZSBmb3Igc29tZSBpbXBvcnRhbnQgaW5mbyAKLSMgYWJvdXQgYnVpbGRpbmcgdGhlIGxpYnJhcnkgbGlrZSB0aGlzLgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotIyBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotIwotIyBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KLSMKLSMgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIyBSRUFETUUgZmlsZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLSMgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotU0hFTEw9L2Jpbi9zaAotQ0M9Z2NjCi1CSUdGSUxFUz0tRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci1DRkxBR1M9LWZwaWMgLWZQSUMgLVdhbGwgLVdpbmxpbmUgLU8yIC1nICQoQklHRklMRVMpCi0KLU9CSlM9IGJsb2Nrc29ydC5vICBcCi0gICAgICBodWZmbWFuLm8gICAgXAotICAgICAgY3JjdGFibGUubyAgIFwKLSAgICAgIHJhbmR0YWJsZS5vICBcCi0gICAgICBjb21wcmVzcy5vICAgXAotICAgICAgZGVjb21wcmVzcy5vIFwKLSAgICAgIGJ6bGliLm8KLQotYWxsOiAkKE9CSlMpCi0gICAgJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSAtV2wsbGliYnoyLnNvLjEuMCAtbyBsaWJiejIuc28uMS4wLjQgJChPQkpTKQotICAgICQoQ0MpICQoQ0ZMQUdTKSAtbyBiemlwMi1zaGFyZWQgYnppcDIuYyBsaWJiejIuc28uMS4wLjQKLSAgICBybSAtZiBsaWJiejIuc28uMS4wCi0gICAgbG4gLXMgbGliYnoyLnNvLjEuMC40IGxpYmJ6Mi5zby4xLjAKLQotY2xlYW46IAotICAgIHJtIC1mICQoT0JKUykgYnppcDIubyBsaWJiejIuc28uMS4wLjQgbGliYnoyLnNvLjEuMCBiemlwMi1zaGFyZWQKLQotYmxvY2tzb3J0Lm86IGJsb2Nrc29ydC5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGJsb2Nrc29ydC5jCi1odWZmbWFuLm86IGh1ZmZtYW4uYwotICAgICQoQ0MpICQoQ0ZMQUdTKSAtYyBodWZmbWFuLmMKLWNyY3RhYmxlLm86IGNyY3RhYmxlLmMKLSAgICAkKENDKSAkKENGTEFHUykgLWMgY3JjdGFibGUuYwotcmFuZHRhYmxlLm86IHJhbmR0YWJsZS5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIHJhbmR0YWJsZS5jCi1jb21wcmVzcy5vOiBjb21wcmVzcy5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGNvbXByZXNzLmMKLWRlY29tcHJlc3MubzogZGVjb21wcmVzcy5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGRlY29tcHJlc3MuYwotYnpsaWIubzogYnpsaWIuYwotICAgICQoQ0MpICQoQ0ZMQUdTKSAtYyBiemxpYi5jCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUgYi9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUKaW5kZXggZTE3YTg0ZS4uYjljNjA5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRQpAQCAtNiw4ICs2LDggQEAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi1iemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLUNvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CitiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGlzIGZpbGUuCiAKQEAgLTczLDcgKzczLDcgQEAKIAogSXQncyBkaWZmaWN1bHQgZm9yIG1lIHRvIHN1cHBvcnQgY29tcGlsYXRpb24gb24gYWxsIHRoZXNlIHBsYXRmb3Jtcy4KIE15IGFwcHJvYWNoIGlzIHRvIGNvbGxlY3QgYmluYXJpZXMgZm9yIHRoZXNlIHBsYXRmb3JtcywgYW5kIHB1dCB0aGVtCi1vbiB0aGUgbWFzdGVyIHdlYiBzaXRlIChodHRwOi8vd3d3LmJ6aXAub3JnKS4gIExvb2sgdGhlcmUuICBIb3dldmVyCitvbiB0aGUgbWFzdGVyIHdlYiBzaXRlIChodHRwczovL3NvdXJjZXdhcmUub3JnL2J6aXAyLykuICBMb29rIHRoZXJlLiAgSG93ZXZlcgogKEZXSVcpLCBiemlwMi0xLjAuWCBpcyB2ZXJ5IHN0YW5kYXJkIEFOU0kgQyBhbmQgc2hvdWxkIGNvbXBpbGUKIHVubW9kaWZpZWQgd2l0aCBNUyBWaXN1YWwgQy4gIElmIHlvdSBoYXZlIGRpZmZpY3VsdGllcyBidWlsZGluZywgeW91CiBtaWdodCB3YW50IHRvIHJlYWQgUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TLgpAQCAtMTYxLDM5ICsxNjEsMjIgQEAKICAgICogTWFueSBzbWFsbCBpbXByb3ZlbWVudHMgaW4gZmlsZSBhbmQgZmxhZyBoYW5kbGluZy4KICAgICogQSBZMksgc3RhdGVtZW50LgogCi1XSEFUJ1MgTkVXIElOIDEuMC4wID8KK1dIQVQnUyBORVcgSU4gMS4wLnggPwogCiAgICBTZWUgdGhlIENIQU5HRVMgZmlsZS4KIAotV0hBVCdTIE5FVyBJTiAxLjAuMiA/Ci0KLSAgIFNlZSB0aGUgQ0hBTkdFUyBmaWxlLgotCi1XSEFUJ1MgTkVXIElOIDEuMC4zID8KLQotICAgU2VlIHRoZSBDSEFOR0VTIGZpbGUuCi0KLVdIQVQnUyBORVcgSU4gMS4wLjQgPwotCi0gICBTZWUgdGhlIENIQU5HRVMgZmlsZS4KLQotV0hBVCdTIE5FVyBJTiAxLjAuNSA/Ci0KLSAgIFNlZSB0aGUgQ0hBTkdFUyBmaWxlLgotCi0KLUkgaG9wZSB5b3UgZmluZCBiemlwMiB1c2VmdWwuICBGZWVsIGZyZWUgdG8gY29udGFjdCBtZSBhdAotICAganNld2FyZEBiemlwLm9yZworSSBob3BlIHlvdSBmaW5kIGJ6aXAyIHVzZWZ1bC4gIEZlZWwgZnJlZSB0byBjb250YWN0IHRoZSBkZXZlbG9wZXJzIGF0CisgICBiemlwMi1kZXZlbEBzb3VyY2V3YXJlLm9yZwogaWYgeW91IGhhdmUgYW55IHN1Z2dlc3Rpb25zIG9yIHF1ZXJpZXMuICBNYW55IHBlb3BsZSBtYWlsZWQgbWUgd2l0aAogY29tbWVudHMsIHN1Z2dlc3Rpb25zIGFuZCBwYXRjaGVzIGFmdGVyIHRoZSByZWxlYXNlcyBvZiBiemlwLTAuMTUsCiBiemlwLTAuMjEsIGFuZCBiemlwMiB2ZXJzaW9ucyAwLjFwbDIsIDAuOS4wLCAwLjkuNSwgMS4wLjAsIDEuMC4xLAogMS4wLjIgYW5kIDEuMC4zLCBhbmQgdGhlIGNoYW5nZXMgaW4gYnppcDIgYXJlIGxhcmdlbHkgYSByZXN1bHQgb2YgdGhpcwogZmVlZGJhY2suICBJIHRoYW5rIHlvdSBmb3IgeW91ciBjb21tZW50cy4KIAotYnppcDIncyAiaG9tZSIgaXMgaHR0cDovL3d3dy5iemlwLm9yZy8KK2J6aXAyJ3MgImhvbWUiIGlzIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnppcDIvCiAKIEp1bGlhbiBTZXdhcmQKLWpzZXdhcmRAYnppcC5vcmcKK2pzZXdhcmRAYWNtLm9yZwogQ2FtYnJpZGdlLCBVSy4KIAogMTggICAgIEp1bHkgMTk5NiAodmVyc2lvbiAwLjE1KQpAQCAtMjA4LDMgKzE5MSw2IEBACiAxNSBGZWJydWFyeSAyMDA1IChiemlwMiwgdmVyc2lvbiAxLjAuMykKIDIwIERlY2VtYmVyIDIwMDYgKGJ6aXAyLCB2ZXJzaW9uIDEuMC40KQogMTAgRGVjZW1iZXIgMjAwNyAoYnppcDIsIHZlcnNpb24gMS4wLjUpCisgNiAgICAgU2VwdCAyMDEwIChiemlwMiwgdmVyc2lvbiAxLjAuNikKKzI3ICAgICBKdW5lIDIwMTkgKGJ6aXAyLCB2ZXJzaW9uIDEuMC43KQorMTMgICAgIEp1bHkgMjAxOSAoYnppcDIsIHZlcnNpb24gMS4wLjgpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMgYi9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjk1YzYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLQotYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci1Db3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotCi1QbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi1SRUFETUUgZmlsZS4KLQotVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLWluIHRoZSBmaWxlIExJQ0VOU0UuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYnppcDItMS4wLjUgc2hvdWxkIGNvbXBpbGUgd2l0aG91dCBwcm9ibGVtcyBvbiB0aGUgdmFzdCBtYWpvcml0eSBvZgotcGxhdGZvcm1zLiAgVXNpbmcgdGhlIHN1cHBsaWVkIE1ha2VmaWxlLCBJJ3ZlIGJ1aWx0IGFuZCB0ZXN0ZWQgaXQKLW15c2VsZiBmb3IgeDg2LWxpbnV4IGFuZCBhbWQ2NC1saW51eC4gIFdpdGggbWFrZWZpbGUubXNjLCBWaXN1YWwgQysrCi02LjAgYW5kIG5tYWtlLCB5b3UgY2FuIGJ1aWxkIGEgbmF0aXZlIFdpbjMyIHZlcnNpb24gdG9vLiAgTGFyZ2UgZmlsZQotc3VwcG9ydCBzZWVtcyB0byB3b3JrIGNvcnJlY3RseSBvbiBhdCBsZWFzdCBvbiBhbWQ2NC1saW51eC4KLQotV2hlbiBJIHNheSAibGFyZ2UgZmlsZSIgSSBtZWFuIGEgZmlsZSBvZiBzaXplIDIsMTQ3LDQ4Myw2NDggKDJeMzEpCi1ieXRlcyBvciBhYm92ZS4gIE1hbnkgb2xkZXIgT1NzIGNhbid0IGhhbmRsZSBmaWxlcyBhYm92ZSB0aGlzIHNpemUsCi1idXQgbWFueSBuZXdlciBvbmVzIGNhbi4gIExhcmdlIGZpbGVzIGFyZSBwcmV0dHkgaHVnZSAtLSBtb3N0IGZpbGVzCi15b3UnbGwgZW5jb3VudGVyIGFyZSBub3QgTGFyZ2UgRmlsZXMuCi0KLUVhcmx5IHZlcnNpb25zIG9mIGJ6aXAyICgwLjEsIDAuOS4wLCAwLjkuNSkgY29tcGlsZWQgb24gYSB3aWRlIHZhcmlldHkKLW9mIHBsYXRmb3JtcyB3aXRob3V0IGRpZmZpY3VsdHksIGFuZCBJIGhvcGUgdGhpcyB2ZXJzaW9uIHdpbGwgY29udGludWUKLWluIHRoYXQgdHJhZGl0aW9uLiAgSG93ZXZlciwgaW4gb3JkZXIgdG8gc3VwcG9ydCBsYXJnZSBmaWxlcywgSSd2ZSBoYWQKLXRvIGluY2x1ZGUgdGhlIGRlZmluZSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IGluIHRoZSBNYWtlZmlsZS4gIFRoaXMKLWNhbiBjYXVzZSBwcm9ibGVtcy4KLQotVGhlIHRlY2huaXF1ZSBvZiBhZGRpbmcgLURfRklMRV9PRkZTRVRfQklUUz02NCB0byBnZXQgbGFyZ2UgZmlsZQotc3VwcG9ydCBpcywgYXMgZmFyIGFzIEkga25vdywgdGhlIFJlY29tbWVuZGVkIFdheSB0byBnZXQgY29ycmVjdCBsYXJnZQotZmlsZSBzdXBwb3J0LiAgRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBMYXJnZSBGaWxlIFN1cHBvcnQKLVNwZWNpZmljYXRpb24sIHB1Ymxpc2hlZCBieSB0aGUgTGFyZ2UgRmlsZSBTdW1taXQsIGF0Ci0KLSAgIGh0dHA6Ly9mdHAuc2FzLmNvbS9zdGFuZGFyZHMvbGFyZ2UuZmlsZQotCi1BcyBhIGdlbmVyYWwgY29tbWVudCwgaWYgeW91IGdldCBjb21waWxhdGlvbiBlcnJvcnMgd2hpY2ggeW91IHRoaW5rCi1hcmUgcmVsYXRlZCB0byBsYXJnZSBmaWxlIHN1cHBvcnQsIHRyeSByZW1vdmluZyB0aGUgYWJvdmUgZGVmaW5lIGZyb20KLXRoZSBNYWtlZmlsZSwgaWUsIGRlbGV0ZSB0aGUgbGluZQotCi0gICBCSUdGSUxFUz0tRF9GSUxFX09GRlNFVF9CSVRTPTY0IAotCi1mcm9tIHRoZSBNYWtlZmlsZSwgYW5kIGRvICdtYWtlIGNsZWFuIDsgbWFrZScuICBUaGlzIHdpbGwgZ2l2ZSB5b3UgYQotdmVyc2lvbiBvZiBiemlwMiB3aXRob3V0IGxhcmdlIGZpbGUgc3VwcG9ydCwgd2hpY2gsIGZvciBtb3N0Ci1hcHBsaWNhdGlvbnMsIGlzIHByb2JhYmx5IG5vdCBhIHByb2JsZW0uICAKLQotQWx0ZXJuYXRpdmVseSwgdHJ5IHNvbWUgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGhpbnRzIGxpc3RlZCBiZWxvdy4KLQotWW91IGNhbiB1c2UgdGhlIHNwZXdHLmMgcHJvZ3JhbSB0byBnZW5lcmF0ZSBodWdlIGZpbGVzIHRvIHRlc3QgYnppcDIncwotbGFyZ2UgZmlsZSBzdXBwb3J0LCBpZiB5b3UgYXJlIGZlZWxpbmcgcGFyYW5vaWQuICBCZSBhd2FyZSB0aG91Z2ggdGhhdAotYW55IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdoaWNoIGFmZmVjdCBiemlwMiB3aWxsIGFsc28gYWZmZWN0IHNwZXdHLmMsCi1hbGFzLgotCi1BSVg6IEkgaGF2ZSByZXBvcnRzIHRoYXQgZm9yIGxhcmdlIGZpbGUgc3VwcG9ydCwgeW91IG5lZWQgdG8gc3BlY2lmeQotLURfTEFSR0VfRklMRVMgcmF0aGVyIHRoYW4gLURfRklMRV9PRkZTRVRfQklUUz02NC4gIEkgaGF2ZSBub3QgdGVzdGVkCi10aGlzIG15c2VsZi4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5YTUwuU1RVRkYgYi9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuWE1MLlNUVUZGCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTViNGM1Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5YTUwuU1RVRkYKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKLSAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLQotICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KLQotICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi0gIFJFQURNRSBmaWxlLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgY29udGFpbmVkCi0gIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHNjcmlwdCB4bWxwcm9jLnNoIHRha2VzIGFuIHhtbCBmaWxlIGFzIGlucHV0LAotYW5kIHByb2Nlc3NlcyBpdCB0byBjcmVhdGUgLnBkZiwgLmh0bWwgb3IgLnBzIG91dHB1dC4KLUl0IHVzZXMgZm9ybWF0LnBsLCBhIHBlcmwgc2NyaXB0IHRvIGZvcm1hdCA8cHJlPiBibG9ja3MgbmljZWx5LAotIGFuZCBhZGQgQ0RBVEEgdGFncyBzbyB3cml0ZXJzIGRvIG5vdCBoYXZlIHRvIHVzZSBlZy4gJmx0OyAKLQotVGhlIGZpbGUgImVudGl0aWVzLnhtbCIgbXVzdCBiZSBlZGl0ZWQgdG8gcmVmbGVjdCBjdXJyZW50Ci12ZXJzaW9uLCB5ZWFyLCBldGMuCi0KLQotVXNhZ2U6Ci0KLSAgLi94bWxwcm9jLnNoIC12IG1hbnVhbC54bWwKLSAgVmFsaWRhdGVzIGFuIHhtbCBmaWxlIHRvIGVuc3VyZSBubyBkdGQtY29tcGxpYW5jZSBlcnJvcnMKLQotICAuL3htbHByb2Muc2ggLWh0bWwgbWFudWFsLnhtbAotICBPdXRwdXQ6IG1hbnVhbC5odG1sCi0KLSAgLi94bWxwcm9jLnNoIC1wZGYgbWFudWFsLnhtbAotICBPdXRwdXQ6IG1hbnVhbC5wZGYKLQotICAuL3htbHByb2Muc2ggLXBzIG1hbnVhbC54bWwKLSAgT3V0cHV0OiBtYW51YWwucHMKLQotCi1Ob3R1bSBiZW5lOiAKLS0gcGRmeG1sdGV4IGJhcmZzIGlmIGdpdmVuIGEgZmlsZW5hbWUgd2l0aCBhbiB1bmRlcnNjb3JlIGluIGl0Ci0KLS0geG1sdGV4IHdvbid0IHdvcmsgeWV0IC0gdGhlcmUncyBhIGJ1ZyBpbiBwYXNzaXZldGV4Ci0gICAgd2hpY2ggd2UgYXJlIGFsbCB3YWl0aW5nIGZvciBTZWJhc3RpYW4gdG8gZml4LgotICBTbyB3ZSBhcmUgZ29pbmcgdGhlIHhtbCAtPiBwZGYgLT4gcHMgcm91dGUgZm9yIHRoZSB0aW1lIGJlaW5nLAotICAgIHVzaW5nIHBkZnhtbHRleC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2Jsb2Nrc29ydC5jIGIvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMKaW5kZXggOTVhZGI1ZS4uOTJkODFmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCkBAIC0yMDIsOSArMjAyLDkgQEAKICAgICAgIGJodGFiIFsgMCAuLiAyKyhuYmxvY2svMzIpIF0gZGVzdHJveWVkCiAqLwogCi0jZGVmaW5lICAgICAgIFNFVF9CSCh6eikgIGJodGFiWyh6eikgPj4gNV0gfD0gKDEgPDwgKCh6eikgJiAzMSkpCi0jZGVmaW5lICAgICBDTEVBUl9CSCh6eikgIGJodGFiWyh6eikgPj4gNV0gJj0gfigxIDw8ICgoenopICYgMzEpKQotI2RlZmluZSAgICAgSVNTRVRfQkgoenopICAoYmh0YWJbKHp6KSA+PiA1XSAmICgxIDw8ICgoenopICYgMzEpKSkKKyNkZWZpbmUgICAgICAgU0VUX0JIKHp6KSAgYmh0YWJbKHp6KSA+PiA1XSB8PSAoKFVJbnQzMikxIDw8ICgoenopICYgMzEpKQorI2RlZmluZSAgICAgQ0xFQVJfQkgoenopICBiaHRhYlsoenopID4+IDVdICY9IH4oKFVJbnQzMikxIDw8ICgoenopICYgMzEpKQorI2RlZmluZSAgICAgSVNTRVRfQkgoenopICAoYmh0YWJbKHp6KSA+PiA1XSAmICgoVUludDMyKTEgPDwgKCh6eikgJiAzMSkpKQogI2RlZmluZSAgICAgIFdPUkRfQkgoenopICBiaHRhYlsoenopID4+IDVdCiAjZGVmaW5lIFVOQUxJR05FRF9CSCh6eikgICgoenopICYgMHgwMWYpCiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgciA9IC0xOwogICAgICAgd2hpbGUgKDEpIHsKIAotICAgICAvKi0tIGZpbmQgdGhlIG5leHQgbm9uLXNpbmdsZXRvbiBidWNrZXQgLS0qLworCSAvKi0tIGZpbmQgdGhlIG5leHQgbm9uLXNpbmdsZXRvbiBidWNrZXQgLS0qLwogICAgICAgICAgayA9IHIgKyAxOwogICAgICAgICAgd2hpbGUgKElTU0VUX0JIKGspICYmIFVOQUxJR05FRF9CSChrKSkgaysrOwogICAgICAgICAgaWYgKElTU0VUX0JIKGspKSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iei1jb21tb24ueHNsIGIvVXRpbGl0aWVzL2NtYnppcDIvYnotY29tbW9uLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZmY2Q2Zi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iei1jb21tb24ueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+IDwhLS0gLSotIHNnbWwgLSotIC0tPgotPHhzbDpzdHlsZXNoZWV0IAotICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KLQotPCEtLSB3ZSBsaWtlICcxLjIgVGl0bGUnIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSInMSciLz4gCi08eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IicxJyIvPgotCi08IS0tIERvIG5vdCBwdXQgJ0NoYXB0ZXInIGF0IHRoZSBzdGFydCBvZiBlZyAnQ2hhcHRlciAxLiBEb2luZyBUaGlzJyAtLT4KLTx4c2w6cGFyYW0gbmFtZT0ibG9jYWwubDEwbi54bWwiIHNlbGVjdD0iZG9jdW1lbnQoJycpIi8+IAotPGw6aTE4biB4bWxuczpsPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQveG1sbnMvbDEwbi8xLjAiPiAKLSAgPGw6bDEwbiBsYW5ndWFnZT0iZW4iPiAKLSAgICA8bDpjb250ZXh0IG5hbWU9InRpdGxlLW51bWJlcmVkIj4KLSAgICAgIDxsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIiIHRleHQ9IiVuLiYjMTYwOyV0Ii8+Ci0gICAgPC9sOmNvbnRleHQ+IAotICA8L2w6bDEwbj4KLTwvbDppMThuPgotCi08IS0tIGRvbid0IGdlbmVyYXRlIHN1Yi10b2NzIGZvciBxYW5kYSBzZXRzIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiPgotc2V0ICAgICAgIHRvYyx0aXRsZQotYm9vayAgICAgIHRvYyx0aXRsZSxmaWd1cmUsdGFibGUsZXhhbXBsZSxlcXVhdGlvbgotY2hhcHRlciAgIHRvYyx0aXRsZQotc2VjdGlvbiAgIHRvYwotc2VjdDEgICAgIHRvYwotc2VjdDIgICAgIHRvYwotc2VjdDMgICAgIHRvYwotc2VjdDQgICAgIG5vcAotc2VjdDUgICAgIG5vcAotcWFuZGFzZXQgIHRvYwotcWFuZGFkaXYgIG5vcAotYXBwZW5kaXggIHRvYyx0aXRsZQotYXJ0aWNsZS9hcHBlbmRpeCAgbm9wCi1hcnRpY2xlICAgdG9jLHRpdGxlCi1wcmVmYWNlICAgdG9jLHRpdGxlCi1yZWZlcmVuY2UgdG9jLHRpdGxlCi08L3hzbDpwYXJhbT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWZvLnhzbCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWZvLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzZTMwMS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iei1mby54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4gPCEtLSAtKi0gc2dtbCAtKi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIAotICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgotCi08eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9mby9kb2Nib29rLnhzbCIvPgotPHhzbDppbXBvcnQgaHJlZj0iYnotY29tbW9uLnhzbCIvPgotCi08IS0tIHNldCBpbmRlbnQgPSB5ZXMgd2hpbGUgZGVidWdnaW5nLCB0aGVuIGNoYW5nZSB0byBOTyAtLT4KLTx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIvPgotCi08IS0tIGVuc3VyZSBvbmx5IHBhc3NpdmV0ZXggZXh0ZW5zaW9ucyBhcmUgb24gLS0+Ci08eHNsOnBhcmFtIG5hbWU9InN0eWxlc2hlZXQucmVzdWx0LnR5cGUiIHNlbGVjdD0iJ2ZvJyIvPgotPCEtLSBmbyBleHRlbnNpb25zOiBQREYgYm9va21hcmtzIGFuZCBpbmRleCB0ZXJtcyAtLT4KLTx4c2w6cGFyYW0gbmFtZT0idXNlLmV4dGVuc2lvbnMiIHNlbGVjdD0iJzEnIi8+Ci08eHNsOnBhcmFtIG5hbWU9InhlcC5leHRlbnNpb25zIiBzZWxlY3Q9IjAiLz4gICAgICAKLTx4c2w6cGFyYW0gbmFtZT0iZm9wLmV4dGVuc2lvbnMiIHNlbGVjdD0iMCIvPiAgICAgCi08eHNsOnBhcmFtIG5hbWU9InNheG9uLmV4dGVuc2lvbnMiIHNlbGVjdD0iMCIvPiAgIAotPHhzbDpwYXJhbSBuYW1lPSJwYXNzaXZldGV4LmV4dGVuc2lvbnMiIHNlbGVjdD0iMSIvPgotPHhzbDpwYXJhbSBuYW1lPSJ0YWJsZWNvbHVtbnMuZXh0ZW5zaW9uIiBzZWxlY3Q9IicxJyIvPgotCi08IS0tIGVuc3VyZSB3ZSBhcmUgdXNpbmcgc2luZ2xlIHNpZGVkIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJkb3VibGUuc2lkZWQiIHNlbGVjdD0iJzAnIi8+IAotCi08IS0tIGluc2VydCBjcm9zcyByZWZlcmVuY2VzIHRvIHBhZ2UgbnVtYmVycyAtLT4KLTx4c2w6cGFyYW0gbmFtZT0iaW5zZXJ0LnhyZWYucGFnZS5udW1iZXIiIHNlbGVjdD0iMSIvPgotCi08IS0tIDw/Y3VzdG9tLXBhZ2VicmVhaz8+IGluc2VydHMgYSBwYWdlIGJyZWFrIGF0IHRoaXMgcG9pbnQgLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uKCdjdXN0b20tcGFnZWJyZWFrJykiPgotICA8Zm86YmxvY2sgYnJlYWstYmVmb3JlPSdwYWdlJy8+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotPCEtLSBzaG93IGxpbmtzIGluIGNvbG9yIC0tPgotPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9InhyZWYucHJvcGVydGllcyI+Ci0gIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj5ibHVlPC94c2w6YXR0cmlidXRlPgotPC94c2w6YXR0cmlidXRlLXNldD4KLQotPCEtLSBtYWtlIHByZSBsaXN0aW5ncyBpbmRlbnRlZCBhIGJpdCArIGEgYmcgY29sb3VyIC0tPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHJvZ3JhbWxpc3RpbmcgfCBzY3JlZW4iPgotICA8Zm86YmxvY2sgc3RhcnQtaW5kZW50PSIwLjI1aW4iIHdyYXAtb3B0aW9uPSJuby13cmFwIiAKLSAgICAgICAgICAgIHdoaXRlLXNwYWNlLWNvbGxhcHNlPSJmYWxzZSIgdGV4dC1hbGlnbj0ic3RhcnQiIAotICAgICAgICAgICAgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgYmFja2dyb3VuZC1jb2xvcj0iI2YyZjJmOSIKLSAgICAgICAgICAgIGxpbmVmZWVkLXRyZWF0bWVudD0icHJlc2VydmUiIAotICAgICAgICAgICAgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ibm9ybWFsLnBhcmEuc3BhY2luZyI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgotICA8L2ZvOmJsb2NrPgotPC94c2w6dGVtcGxhdGU+Ci08IS0tIG1ha2UgdmVyYmF0aW0gb3V0cHV0IHByZXR0aWVyIC0tPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGl0ZXJhbGxheW91dCI+Ci0gIDxmbzpibG9jayBzdGFydC1pbmRlbnQ9IjAuMjVpbiIgd3JhcC1vcHRpb249Im5vLXdyYXAiIAotICAgICAgICAgICAgd2hpdGUtc3BhY2UtY29sbGFwc2U9ImZhbHNlIiB0ZXh0LWFsaWduPSJzdGFydCIgCi0gICAgICAgICAgICBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBiYWNrZ3JvdW5kLWNvbG9yPSIjZWRmN2Y0IgotICAgICAgICAgICAgbGluZWZlZWQtdHJlYXRtZW50PSJwcmVzZXJ2ZSIgCi0gICAgICAgICAgICBzcGFjZS1iZWZvcmU9IjBlbSIgc3BhY2UtYWZ0ZXI9IjBlbSI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgotICA8L2ZvOmJsb2NrPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwhLS0gd29ya2Fyb3VuZCBidWcgaW4gcGFzc2l2ZXRleCBmbyBvdXRwdXQgZm9yIGl0ZW1pemVkbGlzdCAtLT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Iml0ZW1pemVkbGlzdC9saXN0aXRlbSI+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaWQiPgotICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ib2JqZWN0LmlkIi8+PC94c2w6dmFyaWFibGU+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaXRlbXN5bWJvbCI+Ci0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imxpc3QuaXRlbXN5bWJvbCI+Ci0gICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJwYXJlbnQ6Oml0ZW1pemVkbGlzdCIvPgotICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gIDwveHNsOnZhcmlhYmxlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9Iml0ZW0uY29udGVudHMiPgotICAgIDxmbzpsaXN0LWl0ZW0tbGFiZWwgZW5kLWluZGVudD0ibGFiZWwtZW5kKCkiPgotICAgICAgPGZvOmJsb2NrPgotICAgICAgICA8eHNsOmNob29zZT4KLSAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGl0ZW1zeW1ib2w9J2Rpc2MnIj4mI3gyMDIyOzwveHNsOndoZW4+Ci0gICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRpdGVtc3ltYm9sPSdidWxsZXQnIj4mI3gyMDIyOzwveHNsOndoZW4+Ci0gICAgICAgICAgPHhzbDpvdGhlcndpc2U+JiN4MjAyMjs8L3hzbDpvdGhlcndpc2U+Ci0gICAgICAgIDwveHNsOmNob29zZT4KLSAgICAgIDwvZm86YmxvY2s+Ci0gICAgPC9mbzpsaXN0LWl0ZW0tbGFiZWw+Ci0gICAgPGZvOmxpc3QtaXRlbS1ib2R5IHN0YXJ0LWluZGVudD0iYm9keS1zdGFydCgpIj4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4gICAgPCEtLSByZW1vdmVkIGV4dHJhIGJsb2NrIHdyYXBwZXIgLS0+Ci0gICAgPC9mbzpsaXN0LWl0ZW0tYm9keT4KLSAgPC94c2w6dmFyaWFibGU+Ci0gIDx4c2w6Y2hvb3NlPgotICAgIDx4c2w6d2hlbiB0ZXN0PSJwYXJlbnQ6OiovQHNwYWNpbmcgPSAnY29tcGFjdCciPgotICAgICAgPGZvOmxpc3QtaXRlbSBpZD0ieyRpZH0iIAotICAgICAgICAgIHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNvbXBhY3QubGlzdC5pdGVtLnNwYWNpbmciPgotICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkaXRlbS5jb250ZW50cyIvPgotICAgICAgPC9mbzpsaXN0LWl0ZW0+Ci0gICAgPC94c2w6d2hlbj4KLSAgICA8eHNsOm90aGVyd2lzZT4KLSAgICAgIDxmbzpsaXN0LWl0ZW0gaWQ9InskaWR9IiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJsaXN0Lml0ZW0uc3BhY2luZyI+Ci0gICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRpdGVtLmNvbnRlbnRzIi8+Ci0gICAgICA8L2ZvOmxpc3QtaXRlbT4KLSAgICA8L3hzbDpvdGhlcndpc2U+Ci0gIDwveHNsOmNob29zZT4KLTwveHNsOnRlbXBsYXRlPgotCi08IS0tIHdvcmthcm91bmQgYnVnIGluIHBhc3NpdmV0ZXggZm8gb3V0cHV0IGZvciBvcmRlcmVkbGlzdCAtLT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Im9yZGVyZWRsaXN0L2xpc3RpdGVtIj4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpZCI+Ci0gIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvYmplY3QuaWQiLz48L3hzbDp2YXJpYWJsZT4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpdGVtLmNvbnRlbnRzIj4KLSAgICA8Zm86bGlzdC1pdGVtLWxhYmVsIGVuZC1pbmRlbnQ9ImxhYmVsLWVuZCgpIj4KLSAgICAgIDxmbzpibG9jaz4KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJpdGVtLW51bWJlciIvPgotICAgICAgPC9mbzpibG9jaz4KLSAgICA8L2ZvOmxpc3QtaXRlbS1sYWJlbD4KLSAgICA8Zm86bGlzdC1pdGVtLWJvZHkgc3RhcnQtaW5kZW50PSJib2R5LXN0YXJ0KCkiPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPiAgICA8IS0tIHJlbW92ZWQgZXh0cmEgYmxvY2sgd3JhcHBlciAtLT4KLSAgICA8L2ZvOmxpc3QtaXRlbS1ib2R5PgotICA8L3hzbDp2YXJpYWJsZT4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9InBhcmVudDo6Ki9Ac3BhY2luZyA9ICdjb21wYWN0JyI+Ci0gICAgICA8Zm86bGlzdC1pdGVtIGlkPSJ7JGlkfSIgCi0gICAgICAgICAgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY29tcGFjdC5saXN0Lml0ZW0uc3BhY2luZyI+Ci0gICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRpdGVtLmNvbnRlbnRzIi8+Ci0gICAgICA8L2ZvOmxpc3QtaXRlbT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgPGZvOmxpc3QtaXRlbSBpZD0ieyRpZH0iIHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imxpc3QuaXRlbS5zcGFjaW5nIj4KLSAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGl0ZW0uY29udGVudHMiLz4KLSAgICAgIDwvZm86bGlzdC1pdGVtPgotICAgIDwveHNsOm90aGVyd2lzZT4KLSAgPC94c2w6Y2hvb3NlPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwhLS0gd29ya2Fyb3VuZCBidWcgaW4gcGFzc2l2ZXRleCBmbyBvdXRwdXQgZm9yIHZhcmlhYmxlbGlzdCAtLT4KLTx4c2w6cGFyYW0gbmFtZT0idmFyaWFibGVsaXN0LmFzLmJsb2NrcyIgc2VsZWN0PSIxIi8+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJ2YXJsaXN0ZW50cnkiIG1vZGU9InZsLmFzLmJsb2NrcyI+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaWQiPgotICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvYmplY3QuaWQiLz48L3hzbDp2YXJpYWJsZT4KLSAgPGZvOmJsb2NrIGlkPSJ7JGlkfSIgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ibGlzdC5pdGVtLnNwYWNpbmciICAKLSAgICAgIGtlZXAtdG9nZXRoZXIud2l0aGluLWNvbHVtbj0iYWx3YXlzIiAKLSAgICAgIGtlZXAtd2l0aC1uZXh0LndpdGhpbi1jb2x1bW49ImFsd2F5cyI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtIi8+Ci0gIDwvZm86YmxvY2s+Ci0gIDxmbzpibG9jayBzdGFydC1pbmRlbnQ9IjAuNWluIiBlbmQtaW5kZW50PSIwaW4iIAotICAgICAgICAgICAgc3BhY2UtYWZ0ZXIubWluaW11bT0iMC4yZW0iIAotICAgICAgICAgICAgc3BhY2UtYWZ0ZXIub3B0aW11bT0iMC40ZW0iIAotICAgICAgICAgICAgc3BhY2UtYWZ0ZXIubWF4aW11bT0iMC42ZW0iPgotICAgIDxmbzpibG9jaz4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibGlzdGl0ZW0iLz4KLSAgICA8L2ZvOmJsb2NrPgotICA8L2ZvOmJsb2NrPgotPC94c2w6dGVtcGxhdGU+Ci0KLQotPCEtLSB3b3JrYXJvdW5kIGJ1ZyBpbiBmb290ZXJzOiBmb3JjZSByaWdodC1hbGlnbiB3L3R3byA4MHwzMCBjb2xzIC0tPgotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb290ZXIudGFibGUiPgotICA8eHNsOnBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSInJyIvPgotICA8eHNsOnBhcmFtIG5hbWU9InNlcXVlbmNlIiBzZWxlY3Q9IicnIi8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJyciLz4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRwYWdlY2xhc3MgPSAnaW5kZXgnIj4KLSAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im1hcmdpbi1sZWZ0Ij4wcHQ8L3hzbDphdHRyaWJ1dGU+Ci0gICAgPC94c2w6d2hlbj4KLSAgPC94c2w6Y2hvb3NlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9ImNhbmRpZGF0ZSI+Ci0gICAgPGZvOnRhYmxlIHRhYmxlLWxheW91dD0iZml4ZWQiIHdpZHRoPSIxMDAlIj4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMSIgY29sdW1uLXdpZHRoPSI4MCUiLz4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMiIgY29sdW1uLXdpZHRoPSIyMCUiLz4KLSAgICAgIDxmbzp0YWJsZS1ib2R5PgotICAgICAgICA8Zm86dGFibGUtcm93IGhlaWdodD0iMTRwdCI+Ci0gICAgICAgICAgPGZvOnRhYmxlLWNlbGwgdGV4dC1hbGlnbj0ibGVmdCIgZGlzcGxheS1hbGlnbj0iYWZ0ZXIiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icmVsYXRpdmUtYWxpZ24iPmJhc2VsaW5lPC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgPGZvOmJsb2NrPiAKLSAgICAgICAgICAgICAgPGZvOmJsb2NrPiA8L2ZvOmJsb2NrPjwhLS0gZW1wdHkgY2VsbCAtLT4KLSAgICAgICAgICAgIDwvZm86YmxvY2s+Ci0gICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPgotICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIHRleHQtYWxpZ249ImNlbnRlciIgZGlzcGxheS1hbGlnbj0iYWZ0ZXIiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icmVsYXRpdmUtYWxpZ24iPmJhc2VsaW5lPC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgPGZvOmJsb2NrPgotICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9vdGVyLmNvbnRlbnQiPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWdlY2xhc3MiIHNlbGVjdD0iJHBhZ2VjbGFzcyIvPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZXF1ZW5jZSIgc2VsZWN0PSIkc2VxdWVuY2UiLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icG9zaXRpb24iIHNlbGVjdD0iJ2NlbnRlciciLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJGdlbnRleHQta2V5Ii8+Ci0gICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gICAgICAgICAgICA8L2ZvOmJsb2NrPgotICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4KLSAgICAgICAgPC9mbzp0YWJsZS1yb3c+Ci0gICAgICA8L2ZvOnRhYmxlLWJvZHk+Ci0gICAgPC9mbzp0YWJsZT4KLSAgPC94c2w6dmFyaWFibGU+Ci0gIDwhLS0gUmVhbGx5IG91dHB1dCBhIGZvb3Rlcj8gLS0+Ci0gIDx4c2w6Y2hvb3NlPgotICAgIDx4c2w6d2hlbiB0ZXN0PSIkcGFnZWNsYXNzPSd0aXRsZXBhZ2UnIGFuZCAkZ2VudGV4dC1rZXk9J2Jvb2snCi0gICAgICAgICAgICAgICAgICAgIGFuZCAkc2VxdWVuY2U9J2ZpcnN0JyI+Ci0gICAgICA8IS0tIG5vLCBib29rIHRpdGxlcGFnZXMgaGF2ZSBubyBmb290ZXJzIGF0IGFsbCAtLT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VxdWVuY2UgPSAnYmxhbmsnIGFuZCAkZm9vdGVycy5vbi5ibGFuay5wYWdlcyA9IDAiPgotICAgICAgPCEtLSBubyBvdXRwdXQgLS0+Ci0gICAgPC94c2w6d2hlbj4KLSAgICA8eHNsOm90aGVyd2lzZT4KLSAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRjYW5kaWRhdGUiLz4KLSAgICA8L3hzbDpvdGhlcndpc2U+Ci0gIDwveHNsOmNob29zZT4KLTwveHNsOnRlbXBsYXRlPgotCi0KLTwhLS0gZml4IGJ1ZyBpbiBoZWFkZXJzOiBmb3JjZSByaWdodC1hbGlnbiB3L3R3byA0MHw2MCBjb2xzIC0tPgotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJoZWFkZXIudGFibGUiPgotICA8eHNsOnBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSInJyIvPgotICA8eHNsOnBhcmFtIG5hbWU9InNlcXVlbmNlIiBzZWxlY3Q9IicnIi8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJyciLz4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRwYWdlY2xhc3MgPSAnaW5kZXgnIj4KLSAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im1hcmdpbi1sZWZ0Ij4wcHQ8L3hzbDphdHRyaWJ1dGU+Ci0gICAgPC94c2w6d2hlbj4KLSAgPC94c2w6Y2hvb3NlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9ImNhbmRpZGF0ZSI+Ci0gICAgPGZvOnRhYmxlIHRhYmxlLWxheW91dD0iZml4ZWQiIHdpZHRoPSIxMDAlIj4KLSAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJoZWFkLnNlcC5ydWxlIj4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSIkcGFnZWNsYXNzIi8+Ci0gICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZXF1ZW5jZSIgc2VsZWN0PSIkc2VxdWVuY2UiLz4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImdlbnRleHQta2V5IiBzZWxlY3Q9IiRnZW50ZXh0LWtleSIvPgotICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMSIgY29sdW1uLXdpZHRoPSI0MCUiLz4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMiIgY29sdW1uLXdpZHRoPSI2MCUiLz4KLSAgICAgIDxmbzp0YWJsZS1ib2R5PgotICAgICAgICA8Zm86dGFibGUtcm93IGhlaWdodD0iMTRwdCI+Ci0gICAgICAgICAgPGZvOnRhYmxlLWNlbGwgdGV4dC1hbGlnbj0ibGVmdCIgZGlzcGxheS1hbGlnbj0iYmVmb3JlIj4KLSAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InJlbGF0aXZlLWFsaWduIj5iYXNlbGluZTwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgIDxmbzpibG9jaz4KLSAgICAgICAgICAgICAgPGZvOmJsb2NrPiA8L2ZvOmJsb2NrPjwhLS0gZW1wdHkgY2VsbCAtLT4KLSAgICAgICAgICAgIDwvZm86YmxvY2s+Ci0gICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPgotICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIHRleHQtYWxpZ249ImNlbnRlciIgZGlzcGxheS1hbGlnbj0iYmVmb3JlIj4KLSAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InJlbGF0aXZlLWFsaWduIj5iYXNlbGluZTwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgIDxmbzpibG9jaz4KLSAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImhlYWRlci5jb250ZW50Ij4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFnZWNsYXNzIiBzZWxlY3Q9IiRwYWdlY2xhc3MiLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic2VxdWVuY2UiIHNlbGVjdD0iJHNlcXVlbmNlIi8+Ci0gICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBvc2l0aW9uIiBzZWxlY3Q9IidjZW50ZXInIi8+Ci0gICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImdlbnRleHQta2V5IiBzZWxlY3Q9IiRnZW50ZXh0LWtleSIvPgotICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgotICAgICAgICAgICAgPC9mbzpibG9jaz4KLSAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+Ci0gICAgICAgIDwvZm86dGFibGUtcm93PgotICAgICAgPC9mbzp0YWJsZS1ib2R5PgotICAgIDwvZm86dGFibGU+Ci0gIDwveHNsOnZhcmlhYmxlPgotICA8IS0tIFJlYWxseSBvdXRwdXQgYSBoZWFkZXI/IC0tPgotICA8eHNsOmNob29zZT4KLSAgICA8eHNsOndoZW4gdGVzdD0iJHBhZ2VjbGFzcyA9ICd0aXRsZXBhZ2UnIGFuZCAkZ2VudGV4dC1rZXkgPSAnYm9vaycKLSAgICAgICAgICAgICAgICAgICAgYW5kICRzZXF1ZW5jZT0nZmlyc3QnIj4KLSAgICAgIDwhLS0gbm8sIGJvb2sgdGl0bGVwYWdlcyBoYXZlIG5vIGhlYWRlcnMgYXQgYWxsIC0tPgotICAgIDwveHNsOndoZW4+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRzZXF1ZW5jZSA9ICdibGFuaycgYW5kICRoZWFkZXJzLm9uLmJsYW5rLnBhZ2VzID0gMCI+Ci0gICAgICA8IS0tIG5vIG91dHB1dCAtLT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGNhbmRpZGF0ZSIvPgotICAgIDwveHNsOm90aGVyd2lzZT4KLSAgPC94c2w6Y2hvb3NlPgotPC94c2w6dGVtcGxhdGU+Ci0KLQotPCEtLSBCdWctZml4IGZvciBTdXNlIDEwIFBhc3NpdmVUZXggdmVyc2lvbiAtLT4KLTwhLS0gUHJlY29tcHV0ZSBhdHRyaWJ1dGUgdmFsdWVzICdjb3MgUGFzc2l2ZVRleCBpcyB0b28gc3R1cGlkOiAtLT4KLTx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJjb21wb25lbnQudGl0bGUucHJvcGVydGllcyI+Ci0gIDx4c2w6YXR0cmlidXRlIG5hbWU9ImtlZXAtd2l0aC1uZXh0LndpdGhpbi1jb2x1bW4iPmFsd2F5czwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3BhY2UtYmVmb3JlLm9wdGltdW0iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJGJvZHkuZm9udC5tYXN0ZXIsICdwdCcpIi8+Ci0gIDwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3BhY2UtYmVmb3JlLm1pbmltdW0iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYm9keS5mb250Lm1hc3RlciAqIDAuOCIvPgotICAgIDx4c2w6dGV4dD5wdDwveHNsOnRleHQ+Ci0gIDwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3BhY2UtYmVmb3JlLm1heGltdW0iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYm9keS5mb250Lm1hc3RlciAqIDEuMiIvPgotICAgIDx4c2w6dGV4dD5wdDwveHNsOnRleHQ+Ci0gIDwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHlwaGVuYXRlIj5mYWxzZTwveHNsOmF0dHJpYnV0ZT4KLTwveHNsOmF0dHJpYnV0ZS1zZXQ+Ci0KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWh0bWwueHNsIGIvVXRpbGl0aWVzL2NtYnppcDIvYnotaHRtbC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODVmZmYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnotaHRtbC54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4gPCEtLSAtKi0gc2dtbCAtKi0gLS0+Ci08IURPQ1RZUEUgeHNsOnN0eWxlc2hlZXQgWyA8IUVOVElUWSBiei1jc3MgU1lTVEVNICIuL2J6aXAuY3NzIj4gXT4KLQotPHhzbDpzdHlsZXNoZWV0IAotICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+Ci0KLTx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2h0bWwvZG9jYm9vay54c2wiLz4KLTx4c2w6aW1wb3J0IGhyZWY9ImJ6LWNvbW1vbi54c2wiLz4KLQotPCEtLSB1c2UgODg1OS0xIGVuY29kaW5nIC0tPgotPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgaW5kZW50PSJ5ZXMiLz4KLQotPCEtLSB3ZSBpbmNsdWRlIHRoZSBjc3MgZGlyZWN0bHkgd2hlbiBnZW5lcmF0aW5nIG9uZSBsYXJnZSBmaWxlIC0tPgotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ1c2VyLmhlYWQuY29udGVudCI+ICAKLSAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KLSAgICA8eHNsOnRleHQ+JmJ6LWNzczs8L3hzbDp0ZXh0PgotICA8L3N0eWxlPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYgYi9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Yzk5NjQuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpkaWZmCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotIyEvYmluL3NoCi0jIHNoIGlzIGJ1Z2d5IG9uIFJTLzYwMDAgQUlYIDMuMi4gUmVwbGFjZSBhYm92ZSBsaW5lIHdpdGggIyEvYmluL2tzaAotCi0jIEJ6Y21wL2RpZmYgd3JhcHBlZCBmb3IgYnppcDIsIAotIyBhZGFwdGVkIGZyb20gemRpZmYgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+IGZvciBEZWJpYW4gR05VL0xpbnV4LgotCi0jIEJ6Y21wIGFuZCBiemRpZmYgYXJlIHVzZWQgdG8gaW52b2tlIHRoZSBjbXAgb3IgdGhlICBkaWZmICBwcm8tCi0jIGdyYW0gIG9uIGNvbXByZXNzZWQgZmlsZXMuICBBbGwgb3B0aW9ucyBzcGVjaWZpZWQgYXJlIHBhc3NlZAotIyBkaXJlY3RseSB0byBjbXAgb3IgZGlmZi4gIElmIG9ubHkgMSBmaWxlIGlzIHNwZWNpZmllZCwgIHRoZW4KLSMgdGhlICBmaWxlcyAgY29tcGFyZWQgIGFyZSBmaWxlMSBhbmQgYW4gdW5jb21wcmVzc2VkIGZpbGUxLmd6LgotIyBJZiB0d28gZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGV5IGFyZSAgdW5jb21wcmVzc2VkICAoaWYKLSMgbmVjZXNzYXJ5KSBhbmQgZmVkIHRvIGNtcCBvciBkaWZmLiAgVGhlIGV4aXQgc3RhdHVzIGZyb20gY21wCi0jIG9yIGRpZmYgaXMgcHJlc2VydmVkLgotCi1QQVRIPSIvdXNyL2JpbjovYmluOiRQQVRIIjsgZXhwb3J0IFBBVEgKLXByb2c9YGVjaG8gJDAgfCBzZWQgJ3N8LiovfHwnYAotY2FzZSAiJHByb2ciIGluCi0gICpjbXApIGNvbXA9JHtDTVAtY21wfSAgIDs7Ci0gICopICAgIGNvbXA9JHtESUZGLWRpZmZ9IDs7Ci1lc2FjCi0KLU9QVElPTlM9Ci1GSUxFUz0KLWZvciBBUkcKLWRvCi0gICAgY2FzZSAiJEFSRyIgaW4KLSAgICAtKikgT1BUSU9OUz0iJE9QVElPTlMgJEFSRyI7OwotICAgICAqKSBpZiB0ZXN0IC1mICIkQVJHIjsgdGhlbgotICAgICAgICAgICAgRklMRVM9IiRGSUxFUyAkQVJHIgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICIke3Byb2d9OiAkQVJHIG5vdCBmb3VuZCBvciBub3QgYSByZWd1bGFyIGZpbGUiCi0gICAgICAgIGV4aXQgMQotICAgICAgICBmaSA7OwotICAgIGVzYWMKLWRvbmUKLWlmIHRlc3QgLXogIiRGSUxFUyI7IHRoZW4KLSAgICBlY2hvICJVc2FnZTogJHByb2cgWyR7Y29tcH1fb3B0aW9uc10gZmlsZSBbZmlsZV0iCi0gICAgZXhpdCAxCi1maQotdG1wPWBta3RlbXAgJHtUTVBESVI6LS90bXB9L2J6ZGlmZi5YWFhYWFhYWFhYYCB8fCB7Ci0gICAgICBlY2hvICdjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUnID4mMgotICAgICAgZXhpdCAxCi19Ci1zZXQgJEZJTEVTCi1pZiB0ZXN0ICQjIC1lcSAxOyB0aGVuCi0gICAgRklMRT1gZWNobyAiJDEiIHwgc2VkICdzLy5iejIkLy8nYAotICAgIGJ6aXAyIC1jZCAiJEZJTEUuYnoyIiB8ICRjb21wICRPUFRJT05TIC0gIiRGSUxFIgotICAgIFNUQVQ9IiQ/IgotCi1lbGlmIHRlc3QgJCMgLWVxIDI7IHRoZW4KLSAgICBjYXNlICIkMSIgaW4KLSAgICAgICAgKi5iejIpCi0gICAgICAgICAgICAgICAgY2FzZSAiJDIiIGluCi0gICAgICAgICAgICAqLmJ6MikKLSAgICAgICAgICAgIEY9YGVjaG8gIiQyIiB8IHNlZCAnc3wuKi98fDtzfC5iejIkfHwnYAotICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQyIiA+ICR0bXAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyIC1jZGZxICIkMSIgfCAkY29tcCAkT1BUSU9OUyAtICR0bXAKLSAgICAgICAgICAgICAgICAgICAgICAgIFNUQVQ9IiQ/IgotICAgICAgICAgICAgL2Jpbi9ybSAtZiAkdG1wOzsKLQotICAgICAgICAgICAgICAgICopICAgICAgYnppcDIgLWNkZnEgIiQxIiB8ICRjb21wICRPUFRJT05TIC0gIiQyIgotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKLSAgICAgICAgICAgICAgICBlc2FjOzsKLSAgICAgICAgKikgICAgICBjYXNlICIkMiIgaW4KLSAgICAgICAgICAgICouYnoyKQotICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQyIiB8ICRjb21wICRPUFRJT05TICIkMSIgLQotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKLSAgICAgICAgICAgICAgICAqKSAgICAgICRjb21wICRPUFRJT05TICIkMSIgIiQyIgotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKLSAgICAgICAgICAgICAgICBlc2FjOzsKLSAgICBlc2FjCi0gICAgICAgIGV4aXQgIiRTVEFUIgotZWxzZQotICAgIGVjaG8gIlVzYWdlOiAkcHJvZyBbJHtjb21wfV9vcHRpb25zXSBmaWxlIFtmaWxlXSIKLSAgICBleGl0IDEKLWZpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYuMSBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZi4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGI3YThlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZi4xCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotXCJTaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB6bW9yZS4xIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPgotXCJmb3IgRGViaWFuIEdOVS9MaW51eAotLlRIIEJaRElGRiAxCi0uU0ggTkFNRQotYnpjbXAsIGJ6ZGlmZiBcLSBjb21wYXJlIGJ6aXAyIGNvbXByZXNzZWQgZmlsZXMKLS5TSCBTWU5PUFNJUwotLkIgYnpjbXAKLVsgY21wX29wdGlvbnMgXSBmaWxlMQotWyBmaWxlMiBdCi0uYnIKLS5CIGJ6ZGlmZgotWyBkaWZmX29wdGlvbnMgXSBmaWxlMQotWyBmaWxlMiBdCi0uU0ggREVTQ1JJUFRJT04KLS5JICBCemNtcAotYW5kIAotLkkgYnpkaWZmCi1hcmUgdXNlZCB0byBpbnZva2UgdGhlCi0uSSBjbXAKLW9yIHRoZQotLkkgZGlmZgotcHJvZ3JhbSBvbiBiemlwMiBjb21wcmVzc2VkIGZpbGVzLiAgQWxsIG9wdGlvbnMgc3BlY2lmaWVkIGFyZSBwYXNzZWQKLWRpcmVjdGx5IHRvCi0uSSBjbXAKLW9yCi0uSVIgZGlmZiAiLiIKLUlmIG9ubHkgMSBmaWxlIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZmlsZXMgY29tcGFyZWQgYXJlCi0uSSBmaWxlMQotYW5kIGFuIHVuY29tcHJlc3NlZAotLklSIGZpbGUxICIuYnoyLiIKLUlmIHR3byBmaWxlcyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZXkgYXJlIHVuY29tcHJlc3NlZCBpZiBuZWNlc3NhcnkgYW5kIGZlZCB0bwotLkkgY21wCi1vcgotLklSIGRpZmYgIi4iCi1UaGUgZXhpdCBzdGF0dXMgZnJvbSAKLS5JIGNtcAotb3IKLS5JIGRpZmYKLWlzIHByZXNlcnZlZC4KLS5TSCAiU0VFIEFMU08iCi1jbXAoMSksIGRpZmYoMSksIGJ6bW9yZSgxKSwgYnpsZXNzKDEpLCBiemdyZXAoMSksIGJ6aXAyKDEpCi0uU0ggQlVHUwotTWVzc2FnZXMgZnJvbSB0aGUKLS5JIGNtcAotb3IKLS5JIGRpZmYKLXByb2dyYW1zIHJlZmVyIHRvIHRlbXBvcmFyeSBmaWxlbmFtZXMgaW5zdGVhZCBvZiB0aG9zZSBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAgYi9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2Y5MTkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpncmVwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgQnpncmVwIHdyYXBwZWQgZm9yIGJ6aXAyLCAKLSMgYWRhcHRlZCBmcm9tIHpncmVwIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPiBmb3IgRGViaWFuIEdOVS9MaW51eC4KLSMjIHpncmVwIG5vdGljZToKLSMjIHpncmVwIC0tIGEgd3JhcHBlciBhcm91bmQgYSBncmVwIHByb2dyYW0gdGhhdCBkZWNvbXByZXNzZXMgZmlsZXMgYXMgbmVlZGVkCi0jIyBBZGFwdGVkIGZyb20gYSB2ZXJzaW9uIHNlbnQgYnkgQ2hhcmxlcyBMZXZlcnQgPGNoYXJsZXNAY29tbS5wb2x5bXRsLmNhPgotCi1QQVRIPSIvdXNyL2JpbjokUEFUSCI7IGV4cG9ydCBQQVRICi0KLXByb2c9YGVjaG8gJDAgfCBzZWQgJ3N8LiovfHwnYAotY2FzZSAiJHByb2ciIGluCi0gICAgKmVncmVwKSBncmVwPSR7RUdSRVAtZWdyZXB9IDs7Ci0gICAgKmZncmVwKSBncmVwPSR7RkdSRVAtZmdyZXB9IDs7Ci0gICAgKikgIGdyZXA9JHtHUkVQLWdyZXB9ICAgOzsKLWVzYWMKLXBhdD0iIgotd2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KLSAgY2FzZSAiJDEiIGluCi0gIC1lIHwgLWYpIG9wdD0iJG9wdCAkMSI7IHNoaWZ0OyBwYXQ9IiQxIgotICAgICAgICAgICBpZiB0ZXN0ICIkZ3JlcCIgPSBncmVwOyB0aGVuICAjIGdyZXAgaXMgYnVnZ3kgd2l0aCAtZSBvbiBTVlI0Ci0gICAgICAgICAgICAgZ3JlcD1lZ3JlcAotICAgICAgICAgICBmaTs7Ci0gIC1BIHwgLUIpIG9wdD0iJG9wdCAkMSAkMiI7IHNoaWZ0OzsKLSAgLSopICAgICAgb3B0PSIkb3B0ICQxIjs7Ci0gICAqKSAgICAgIGlmIHRlc3QgLXogIiRwYXQiOyB0aGVuCi0gICAgICAgICBwYXQ9IiQxIgotICAgICAgIGVsc2UKLSAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBmaTs7Ci0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotaWYgdGVzdCAteiAiJHBhdCI7IHRoZW4KLSAgZWNobyAiZ3JlcCB0aHJvdWdoIGJ6aXAyIGZpbGVzIgotICBlY2hvICJ1c2FnZTogJHByb2cgW2dyZXBfb3B0aW9uc10gcGF0dGVybiBbZmlsZXNdIgotICBleGl0IDEKLWZpCi0KLWxpc3Q9MAotc2lsZW50PTAKLW9wPWBlY2hvICIkb3B0IiB8IHNlZCAtZSAncy8gLy9nJyAtZSAncy8tLy9nJ2AKLWNhc2UgIiRvcCIgaW4KLSAgKmwqKSBsaXN0PTEKLWVzYWMKLWNhc2UgIiRvcCIgaW4KLSAgKmgqKSBzaWxlbnQ9MQotZXNhYwotCi1pZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCi0gIGJ6aXAyIC1jZGZxIHwgJGdyZXAgJG9wdCAiJHBhdCIKLSAgZXhpdCAkPwotZmkKLQotcmVzPTAKLWZvciBpIGRvCi0gIGlmIHRlc3QgLWYgIiRpIjsgdGhlbiA6OyBlbHNlIGlmIHRlc3QgLWYgIiRpLmJ6MiI7IHRoZW4gaT0iJGkuYnoyIjsgZmk7IGZpCi0gIGlmIHRlc3QgJGxpc3QgLWVxIDE7IHRoZW4KLSAgICBiemlwMiAtY2RmcSAiJGkiIHwgJGdyZXAgJG9wdCAiJHBhdCIgMj4mMSA+IC9kZXYvbnVsbCAmJiBlY2hvICRpCi0gICAgcj0kPwotICBlbGlmIHRlc3QgJCMgLWVxIDEgLW8gJHNpbGVudCAtZXEgMTsgdGhlbgotICAgIGJ6aXAyIC1jZGZxICIkaSIgfCAkZ3JlcCAkb3B0ICIkcGF0IgotICAgIHI9JD8KLSAgZWxzZQotICAgIGo9JHtpLy9cXC9cXFxcfQotICAgIGo9JHtqLy98L1xcfH0KLSAgICBqPSR7ai8vJi9cXCZ9Ci0gICAgaj1gcHJpbnRmICIlcyIgIiRqIiB8IHRyICdcbicgJyAnYAotICAgIGJ6aXAyIC1jZGZxICIkaSIgfCAkZ3JlcCAkb3B0ICIkcGF0IiB8IHNlZCAic3xefCR7an06fCIKLSAgICByPSQ/Ci0gIGZpCi0gIHRlc3QgIiRyIiAtbmUgMCAmJiByZXM9IiRyIgotZG9uZQotZXhpdCAkcmVzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAuMSBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcC4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzBhZjhjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcC4xCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotXCJTaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB6bW9yZS4xIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPgotXCJmb3IgRGViaWFuIEdOVS9MaW51eAotLlRIIEJaR1JFUCAxCi0uU0ggTkFNRQotYnpncmVwLCBiemZncmVwLCBiemVncmVwIFwtIHNlYXJjaCBwb3NzaWJseSBiemlwMiBjb21wcmVzc2VkIGZpbGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbgotLlNIIFNZTk9QU0lTCi0uQiBiemdyZXAKLVsgZ3JlcF9vcHRpb25zIF0KLS5CSSAgW1wgLWVcIF0gIiBwYXR0ZXJuIgotLklSIGZpbGVuYW1lICIuXHwuXHwuIgotLmJyCi0uQiBiemVncmVwCi1bIGVncmVwX29wdGlvbnMgXQotLkJJICBbXCAtZVwgXSAiIHBhdHRlcm4iCi0uSVIgZmlsZW5hbWUgIi5cfC5cfC4iCi0uYnIKLS5CIGJ6ZmdyZXAKLVsgZmdyZXBfb3B0aW9ucyBdCi0uQkkgIFtcIC1lXCBdICIgcGF0dGVybiIKLS5JUiBmaWxlbmFtZSAiLlx8Llx8LiIKLS5TSCBERVNDUklQVElPTgotLklSICBCemdyZXAKLWlzIHVzZWQgdG8gaW52b2tlIHRoZQotLkkgZ3JlcAotb24gYnppcDItY29tcHJlc3NlZCBmaWxlcy4gQWxsIG9wdGlvbnMgc3BlY2lmaWVkIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8KLS5JIGdyZXAuCi1JZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgc3RhbmRhcmQgaW5wdXQgaXMgZGVjb21wcmVzc2VkCi1pZiBuZWNlc3NhcnkgYW5kIGZlZCB0byBncmVwLgotT3RoZXJ3aXNlIHRoZSBnaXZlbiBmaWxlcyBhcmUgdW5jb21wcmVzc2VkIGlmIG5lY2Vzc2FyeSBhbmQgZmVkIHRvCi0uSSBncmVwLgotLlBQCi1JZgotLkkgYnpncmVwCi1pcyBpbnZva2VkIGFzCi0uSSBiemVncmVwCi1vcgotLkkgYnpmZ3JlcAotdGhlbgotLkkgZWdyZXAKLW9yCi0uSSBmZ3JlcAotaXMgdXNlZCBpbnN0ZWFkIG9mCi0uSSBncmVwLgotSWYgdGhlIEdSRVAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LAotLkkgYnpncmVwCi11c2VzIGl0IGFzIHRoZQotLkkgZ3JlcAotcHJvZ3JhbSB0byBiZSBpbnZva2VkLiBGb3IgZXhhbXBsZToKLQotICAgIGZvciBzaDogIEdSRVA9ZmdyZXAgIGJ6Z3JlcCBzdHJpbmcgZmlsZXMKLSAgICBmb3IgY3NoOiAoc2V0ZW52IEdSRVAgZmdyZXA7IGJ6Z3JlcCBzdHJpbmcgZmlsZXMpCi0uU0ggQVVUSE9SCi1DaGFybGVzIExldmVydCAoY2hhcmxlc0Bjb21tLnBvbHltdGwuY2EpLiBBZGFwdGVkIHRvIGJ6aXAyIGJ5IFBoaWxpcHBlCi1Ucm9pbiA8cGhpbEBmaWZpLm9yZz4gZm9yIERlYmlhbiBHTlUvTGludXguCi0uU0ggIlNFRSBBTFNPIgotZ3JlcCgxKSwgZWdyZXAoMSksIGZncmVwKDEpLCBiemRpZmYoMSksIGJ6bW9yZSgxKSwgYnpsZXNzKDEpLCBiemlwMigxKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcC5jc3MgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlYjQwMS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIENvbG91cnM6Ci0jNzQyNDBmICBkYXJrIGJyb3duICAgICAgaDEsIGgyLCBoMywgaDQKLSMzMzY2OTkgIG1lZGl1bSBibHVlICAgICBsaW5rcwotIzMzOTk5OSAgdHVycXVvaXNlICAgICAgIGxpbmsgaG92ZXIgY29sb3VyCi0jMjAyMDIwICBhbG1vc3QgYmxhY2sgICAgZ2VuZXJhbCB0ZXh0Ci0jNzYxNTk2ICBwdXJwbGUgICAgICAgICAgbWQ1c3VtIHRleHQKLSM2MjYyNjIgIGRhcmsgZ3JheSAgICAgICBwcmUgYm9yZGVyCi0jZWVlZWVlICB2ZXJ5IGxpZ2h0IGdyYXkgcHJlIGJhY2tncm91bmQKLSNmMmYyZjkgIHZlcnkgbGlnaHQgYmx1ZSBuYXYgdGFibGUgYmFja2dyb3VuZAotIzMzNjZjYyAgbWVkaXVtIGJsdWUgICAgIG5hdiB0YWJsZSBib3JkZXIKLSovCi0KLWEsIGE6bGluaywgYTp2aXNpdGVkLCBhOmFjdGl2ZSB7IGNvbG9yOiAjMzM2Njk5OyB9Ci1hOmhvdmVyIHsgY29sb3I6ICMzMzk5OTk7IH0KLQotYm9keSB7IGZvbnQ6IDgwJS8xMjYlIHNhbnMtc2VyaWY7IH0KLWgxLCBoMiwgaDMsIGg0IHsgY29sb3I6ICM3NDI0MGY7IH0KLQotZHQgeyBjb2xvcjogIzMzNjY5OTsgZm9udC13ZWlnaHQ6IGJvbGQgfQotZGQgeyAKLSBtYXJnaW4tbGVmdDogMS41ZW07IAotIHBhZGRpbmctYm90dG9tOiAwLjhlbTsKLX0KLQotLyogLS0gcnVsZXIgLS0gKi8KLWRpdi5ocl9ibHVlIHsgCi0gIGhlaWdodDogIDNweDsgCi0gIGJhY2tncm91bmQ6I2ZmZmZmZiB1cmwoIi9pbWFnZXMvaHJfYmx1ZS5wbmciKSByZXBlYXQteDsgfQotZGl2LmhyX2JsdWUgaHIgeyBkaXNwbGF5Om5vbmU7IH0KLQotLyogcmVsZWFzZSBzdHlsZXMgKi8KLSNyZWxlYXNlIHAgeyBtYXJnaW4tdG9wOiAwLjRlbTsgfQotI3JlbGVhc2UgLm1kNXN1bSB7IGNvbG9yOiAjNzYxNTk2OyB9Ci0KLQotLyogLS0tLS0tIHN0eWxlcyBmb3IgZG9jc3xtYW51YWxzfGhvd3RvIC0tLS0tLSAqLwotLyogLS0gbGlzdHMgLS0gKi8KLXVsICB7IAotIG1hcmdpbjogICAgIDBweCA0cHggMTZweCAxNnB4OwotIHBhZGRpbmc6ICAgIDBweDsKLSBsaXN0LXN0eWxlOiB1cmwoIi9pbWFnZXMvbGktYmx1ZS5wbmciKTsgCi19Ci11bCBsaSB7IAotIG1hcmdpbi1ib3R0b206IDEwcHg7Ci19Ci11bCB1bCAgIHsgCi0gbGlzdC1zdHlsZS10eXBlOiAgbm9uZTsgCi0gbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsgCi0gbWFyZ2luLWxlZnQ6ICAgICAgMHB4OyAKLX0KLQotLyogaGVhZGVyIC8gZm9vdGVyIG5hdiB0YWJsZXMgKi8KLXRhYmxlLm5hdiB7Ci0gYm9yZGVyOiAgICAgc29saWQgMXB4ICMzMzY2Y2M7Ci0gYmFja2dyb3VuZDogI2YyZjJmOTsKLSBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmY5OwotIG1hcmdpbi1ib3R0b206IDAuNWVtOwotfQotLyogZG9uJ3QgaGF2ZSB1bmRlcmxpbmVkIGxpbmtzIGluIGNodW5rZWQgbmF2IG1lbnVzICovCi10YWJsZS5uYXYgYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQotdGFibGUubmF2IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQotdGFibGUubmF2IHRkIHsgZm9udC1zaXplOiA4NSU7IH0KLQotY29kZSwgdHQsIHByZSB7IGZvbnQtc2l6ZTogMTIwJTsgfQotY29kZSwgdHQgeyBjb2xvcjogIzc2MTU5NjsgfQotCi1kaXYubGl0ZXJhbGxheW91dCwgcHJlLnByb2dyYW1saXN0aW5nLCBwcmUuc2NyZWVuIHsKLSBjb2xvcjogICAgICAjMDAwMDAwOwotIHBhZGRpbmc6ICAgIDAuNWVtOwotIGJhY2tncm91bmQ6ICNlZWVlZWU7Ci0gYm9yZGVyOiAgICAgMXB4IHNvbGlkICM2MjYyNjI7Ci0gYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsKLSBtYXJnaW46IDRweCAwcHggNHB4IDBweDsgCi19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxM2YyZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xCisrKyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLS5QVQotLlRIIGJ6aXAyIDEKLS5TSCBOQU1FCi1iemlwMiwgYnVuemlwMiBcLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjQKLS5icgotYnpjYXQgXC0gZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dAotLmJyCi1iemlwMnJlY292ZXIgXC0gcmVjb3ZlcnMgZGF0YSBmcm9tIGRhbWFnZWQgYnppcDIgZmlsZXMKLQotLlNIIFNZTk9QU0lTCi0ubGwgKzgKLS5CIGJ6aXAyCi0uUkIgWyAiIFwtY2Rma3FzdHZ6VkwxMjM0NTY3ODkgIiBdCi1bCi0uSSAiZmlsZW5hbWVzIFwmLi4uIgotXQotLmxsIC04Ci0uYnIKLS5CIGJ1bnppcDIKLS5SQiBbICIgXC1ma3ZzVkwgIiBdCi1bIAotLkkgImZpbGVuYW1lcyBcJi4uLiIKLV0KLS5icgotLkIgYnpjYXQKLS5SQiBbICIgXC1zICIgXQotWyAKLS5JICJmaWxlbmFtZXMgXCYuLi4iCi1dCi0uYnIKLS5CIGJ6aXAycmVjb3ZlcgotLkkgImZpbGVuYW1lIgotCi0uU0ggREVTQ1JJUFRJT04KLS5JIGJ6aXAyCi1jb21wcmVzc2VzIGZpbGVzIHVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2sgc29ydGluZwotdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sIGFuZCBIdWZmbWFuIGNvZGluZy4gIENvbXByZXNzaW9uIGlzCi1nZW5lcmFsbHkgY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwKLUxaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywgYW5kIGFwcHJvYWNoZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0KLWZhbWlseSBvZiBzdGF0aXN0aWNhbCBjb21wcmVzc29ycy4KLQotVGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBkZWxpYmVyYXRlbHkgdmVyeSBzaW1pbGFyIHRvIAotdGhvc2Ugb2YgCi0uSSBHTlUgZ3ppcCwgCi1idXQgdGhleSBhcmUgbm90IGlkZW50aWNhbC4KLQotLkkgYnppcDIKLWV4cGVjdHMgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZQotY29tbWFuZC1saW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzIHJlcGxhY2VkIGJ5IGEgY29tcHJlc3NlZCB2ZXJzaW9uIG9mCi1pdHNlbGYsIHdpdGggdGhlIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4gIAotRWFjaCBjb21wcmVzc2VkIGZpbGUKLWhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgcGVybWlzc2lvbnMsIGFuZCwgd2hlbiBwb3NzaWJsZSwKLW93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbCwgc28gdGhhdCB0aGVzZSBwcm9wZXJ0aWVzIGNhbgotYmUgY29ycmVjdGx5IHJlc3RvcmVkIGF0IGRlY29tcHJlc3Npb24gdGltZS4gIEZpbGUgbmFtZSBoYW5kbGluZyBpcwotbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBwcmVzZXJ2aW5nIG9yaWdpbmFsCi1maWxlIG5hbWVzLCBwZXJtaXNzaW9ucywgb3duZXJzaGlwcyBvciBkYXRlcyBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrCi10aGVzZSBjb25jZXB0cywgb3IgaGF2ZSBzZXJpb3VzIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzCi1NUy1ET1MuCi0KLS5JIGJ6aXAyCi1hbmQKLS5JIGJ1bnppcDIKLXdpbGwgYnkgZGVmYXVsdCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCi1maWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5IHRoZSBcLWYgZmxhZy4KLQotSWYgbm8gZmlsZSBuYW1lcyBhcmUgc3BlY2lmaWVkLAotLkkgYnppcDIKLWNvbXByZXNzZXMgZnJvbSBzdGFuZGFyZAotaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLAotLkkgYnppcDIKLXdpbGwgZGVjbGluZSB0bwotd3JpdGUgY29tcHJlc3NlZCBvdXRwdXQgdG8gYSB0ZXJtaW5hbCwgYXMgdGhpcyB3b3VsZCBiZSBlbnRpcmVseQotaW5jb21wcmVoZW5zaWJsZSBhbmQgdGhlcmVmb3JlIHBvaW50bGVzcy4KLQotLkkgYnVuemlwMgotKG9yCi0uSSBiemlwMiBcLWQpIAotZGVjb21wcmVzc2VzIGFsbAotc3BlY2lmaWVkIGZpbGVzLiAgRmlsZXMgd2hpY2ggd2VyZSBub3QgY3JlYXRlZCBieSAKLS5JIGJ6aXAyCi13aWxsIGJlIGRldGVjdGVkIGFuZCBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4gIAotLkkgYnppcDIKLWF0dGVtcHRzIHRvIGd1ZXNzIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGRlY29tcHJlc3NlZCBmaWxlIAotZnJvbSB0aGF0IG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgYXMgZm9sbG93czoKLQotICAgICAgIGZpbGVuYW1lLmJ6MiAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICBmaWxlbmFtZS5ieiAgICAgYmVjb21lcyAgIGZpbGVuYW1lCi0gICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICBmaWxlbmFtZS50YnogICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgIGFueW90aGVybmFtZSAgICBiZWNvbWVzICAgYW55b3RoZXJuYW1lLm91dAotCi1JZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsIAotLkkgLmJ6MiwgCi0uSSAuYnosIAotLkkgLnRiejIKLW9yCi0uSSAudGJ6LCAKLS5JIGJ6aXAyIAotY29tcGxhaW5zIHRoYXQgaXQgY2Fubm90Ci1ndWVzcyB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHVzZXMgdGhlIG9yaWdpbmFsIG5hbWUKLXdpdGgKLS5JIC5vdXQKLWFwcGVuZGVkLgotCi1BcyB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8KLWZpbGVuYW1lcyBjYXVzZXMgZGVjb21wcmVzc2lvbiBmcm9tIAotc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi0uSSBidW56aXAyIAotd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlCi1jb25jYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzIHRoZQotY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB1bmNvbXByZXNzZWQgZmlsZXMuICBJbnRlZ3JpdHkKLXRlc3RpbmcgKFwtdCkgCi1vZiBjb25jYXRlbmF0ZWQgCi1jb21wcmVzc2VkIGZpbGVzIGlzIGFsc28gc3VwcG9ydGVkLgotCi1Zb3UgY2FuIGFsc28gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBmaWxlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGJ5Ci1naXZpbmcgdGhlIFwtYyBmbGFnLiAgTXVsdGlwbGUgZmlsZXMgbWF5IGJlIGNvbXByZXNzZWQgYW5kCi1kZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzIGFyZSBmZWQgc2VxdWVudGlhbGx5IHRvCi1zdGRvdXQuICBDb21wcmVzc2lvbiBvZiBtdWx0aXBsZSBmaWxlcyAKLWluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbQotY29udGFpbmluZyBtdWx0aXBsZSBjb21wcmVzc2VkIGZpbGUgcmVwcmVzZW50YXRpb25zLiAgU3VjaCBhIHN0cmVhbQotY2FuIGJlIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSBieQotLkkgYnppcDIgCi12ZXJzaW9uIDAuOS4wIG9yCi1sYXRlci4gIEVhcmxpZXIgdmVyc2lvbnMgb2YKLS5JIGJ6aXAyCi13aWxsIHN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZwotdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotLkkgYnpjYXQKLShvcgotLkkgYnppcDIgLWRjKSAKLWRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkIGZpbGVzIHRvCi10aGUgc3RhbmRhcmQgb3V0cHV0LgotCi0uSSBiemlwMgotd2lsbCByZWFkIGFyZ3VtZW50cyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLS5JIEJaSVAyCi1hbmQKLS5JIEJaSVAsCi1pbiB0aGF0IG9yZGVyLCBhbmQgd2lsbCBwcm9jZXNzIHRoZW0KLWJlZm9yZSBhbnkgYXJndW1lbnRzIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBnaXZlcyBhIAotY29udmVuaWVudCB3YXkgdG8gc3VwcGx5IGRlZmF1bHQgYXJndW1lbnRzLgotCi1Db21wcmVzc2lvbiBpcyBhbHdheXMgcGVyZm9ybWVkLCBldmVuIGlmIHRoZSBjb21wcmVzc2VkIAotZmlsZSBpcyBzbGlnaHRseQotbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcyB0aGFuIGFib3V0IG9uZSBodW5kcmVkIGJ5dGVzCi10ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZSBjb21wcmVzc2lvbiBtZWNoYW5pc20gaGFzIGEgY29uc3RhbnQKLW92ZXJoZWFkIGluIHRoZSByZWdpb24gb2YgNTAgYnl0ZXMuICBSYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQKLW9mIG1vc3QgZmlsZSBjb21wcmVzc29ycykgaXMgY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlciBieXRlLCBnaXZpbmcKLWFuIGV4cGFuc2lvbiBvZiBhcm91bmQgMC41JS4KLQotQXMgYSBzZWxmLWNoZWNrIGZvciB5b3VyIHByb3RlY3Rpb24sIAotLkkgCi1iemlwMgotdXNlcyAzMi1iaXQgQ1JDcyB0bwotbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlCi1vcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLCBhbmQKLWFnYWluc3QgdW5kZXRlY3RlZCBidWdzIGluCi0uSSBiemlwMgotKGhvcGVmdWxseSB2ZXJ5IHVubGlrZWx5KS4gIFRoZQotY2hhbmNlcyBvZiBkYXRhIGNvcnJ1cHRpb24gZ29pbmcgdW5kZXRlY3RlZCBpcyBtaWNyb3Njb3BpYywgYWJvdXQgb25lCi1jaGFuY2UgaW4gZm91ciBiaWxsaW9uIGZvciBlYWNoIGZpbGUgcHJvY2Vzc2VkLiAgQmUgYXdhcmUsIHRob3VnaCwgdGhhdAotdGhlIGNoZWNrIG9jY3VycyB1cG9uIGRlY29tcHJlc3Npb24sIHNvIGl0IGNhbiBvbmx5IHRlbGwgeW91IHRoYXQKLXNvbWV0aGluZyBpcyB3cm9uZy4gIEl0IGNhbid0IGhlbHAgeW91IAotcmVjb3ZlciB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkCi1kYXRhLiAgWW91IGNhbiB1c2UgCi0uSSBiemlwMnJlY292ZXIKLXRvIHRyeSB0byByZWNvdmVyIGRhdGEgZnJvbQotZGFtYWdlZCBmaWxlcy4KLQotUmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgMSBmb3IgZW52aXJvbm1lbnRhbCBwcm9ibGVtcyAoZmlsZQotbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksIDIgdG8gaW5kaWNhdGUgYSBjb3JydXB0Ci1jb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsIGNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaAotY2F1c2VkCi0uSSBiemlwMgotdG8gcGFuaWMuCi0KLS5TSCBPUFRJT05TCi0uVFAKLS5CIFwtYyAtLXN0ZG91dAotQ29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZCBvdXRwdXQuCi0uVFAKLS5CIFwtZCAtLWRlY29tcHJlc3MKLUZvcmNlIGRlY29tcHJlc3Npb24uICAKLS5JIGJ6aXAyLCAKLS5JIGJ1bnppcDIgCi1hbmQKLS5JIGJ6Y2F0IAotYXJlCi1yZWFsbHkgdGhlIHNhbWUgcHJvZ3JhbSwgYW5kIHRoZSBkZWNpc2lvbiBhYm91dCB3aGF0IGFjdGlvbnMgdG8gdGFrZSBpcwotZG9uZSBvbiB0aGUgYmFzaXMgb2Ygd2hpY2ggbmFtZSBpcyB1c2VkLiAgVGhpcyBmbGFnIG92ZXJyaWRlcyB0aGF0Ci1tZWNoYW5pc20sIGFuZCBmb3JjZXMgCi0uSSBiemlwMgotdG8gZGVjb21wcmVzcy4KLS5UUAotLkIgXC16IC0tY29tcHJlc3MKLVRoZSBjb21wbGVtZW50IHRvIFwtZDogZm9yY2VzIGNvbXByZXNzaW9uLCByZWdhcmRsZXNzIG9mIHRoZQotaW52b2NhdGlvbiBuYW1lLgotLlRQCi0uQiBcLXQgLS10ZXN0Ci1DaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQgZG9uJ3QgZGVjb21wcmVzcyB0aGVtLgotVGhpcyByZWFsbHkgcGVyZm9ybXMgYSB0cmlhbCBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgotLlRQCi0uQiBcLWYgLS1mb3JjZQotRm9yY2Ugb3ZlcndyaXRlIG9mIG91dHB1dCBmaWxlcy4gIE5vcm1hbGx5LAotLkkgYnppcDIgCi13aWxsIG5vdCBvdmVyd3JpdGUKLWV4aXN0aW5nIG91dHB1dCBmaWxlcy4gIEFsc28gZm9yY2VzIAotLkkgYnppcDIgCi10byBicmVhayBoYXJkIGxpbmtzCi10byBmaWxlcywgd2hpY2ggaXQgb3RoZXJ3aXNlIHdvdWxkbid0IGRvLgotCi1iemlwMiBub3JtYWxseSBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoIGRvbid0IGhhdmUgdGhlCi1jb3JyZWN0IG1hZ2ljIGhlYWRlciBieXRlcy4gIElmIGZvcmNlZCAoLWYpLCBob3dldmVyLCBpdCB3aWxsIHBhc3MKLXN1Y2ggZmlsZXMgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIGd6aXAgYmVoYXZlcy4KLS5UUAotLkIgXC1rIC0ta2VlcAotS2VlcCAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcgY29tcHJlc3Npb24KLW9yIGRlY29tcHJlc3Npb24uCi0uVFAKLS5CIFwtcyAtLXNtYWxsCi1SZWR1Y2UgbWVtb3J5IHVzYWdlLCBmb3IgY29tcHJlc3Npb24sIGRlY29tcHJlc3Npb24gYW5kIHRlc3RpbmcuICBGaWxlcwotYXJlIGRlY29tcHJlc3NlZCBhbmQgdGVzdGVkIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkKLXJlcXVpcmVzIDIuNSBieXRlcyBwZXIgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlCi1kZWNvbXByZXNzZWQgaW4gMjMwMGsgb2YgbWVtb3J5LCBhbGJlaXQgYXQgYWJvdXQgaGFsZiB0aGUgbm9ybWFsIHNwZWVkLgotCi1EdXJpbmcgY29tcHJlc3Npb24sIFwtcyBzZWxlY3RzIGEgYmxvY2sgc2l6ZSBvZiAyMDBrLCB3aGljaCBsaW1pdHMKLW1lbW9yeSB1c2UgdG8gYXJvdW5kIHRoZSBzYW1lIGZpZ3VyZSwgYXQgdGhlIGV4cGVuc2Ugb2YgeW91ciBjb21wcmVzc2lvbgotcmF0aW8uICBJbiBzaG9ydCwgaWYgeW91ciBtYWNoaW5lIGlzIGxvdyBvbiBtZW1vcnkgKDggbWVnYWJ5dGVzIG9yCi1sZXNzKSwgdXNlIFwtcyBmb3IgZXZlcnl0aGluZy4gIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4KLS5UUAotLkIgXC1xIC0tcXVpZXQKLVN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4gIE1lc3NhZ2VzIHBlcnRhaW5pbmcgdG8KLUkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cyB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLgotLlRQCi0uQiBcLXYgLS12ZXJib3NlCi1WZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuCi1GdXJ0aGVyIFwtdidzIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkgbGV2ZWwsIHNwZXdpbmcgb3V0IGxvdHMgb2YKLWluZm9ybWF0aW9uIHdoaWNoIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KLS5UUAotLkIgXC1MIC0tbGljZW5zZSAtViAtLXZlcnNpb24KLURpc3BsYXkgdGhlIHNvZnR3YXJlIHZlcnNpb24sIGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi0uVFAKLS5CIFwtMSAob3IgXC1cLWZhc3QpIHRvIFwtOSAob3IgXC1cLWJlc3QpCi1TZXQgdGhlIGJsb2NrIHNpemUgdG8gMTAwIGssIDIwMCBrIC4uICA5MDAgayB3aGVuIGNvbXByZXNzaW5nLiAgSGFzIG5vCi1lZmZlY3Qgd2hlbiBkZWNvbXByZXNzaW5nLiAgU2VlIE1FTU9SWSBNQU5BR0VNRU5UIGJlbG93LgotVGhlIFwtXC1mYXN0IGFuZCBcLVwtYmVzdCBhbGlhc2VzIGFyZSBwcmltYXJpbHkgZm9yIEdOVSBnemlwIAotY29tcGF0aWJpbGl0eS4gIEluIHBhcnRpY3VsYXIsIFwtXC1mYXN0IGRvZXNuJ3QgbWFrZSB0aGluZ3MKLXNpZ25pZmljYW50bHkgZmFzdGVyLiAgCi1BbmQgXC1cLWJlc3QgbWVyZWx5IHNlbGVjdHMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgotLlRQCi0uQiBcLS0KLVRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywgZXZlbiBpZiB0aGV5IHN0YXJ0Ci13aXRoIGEgZGFzaC4gIFRoaXMgaXMgc28geW91IGNhbiBoYW5kbGUgZmlsZXMgd2l0aCBuYW1lcyBiZWdpbm5pbmcKLXdpdGggYSBkYXNoLCBmb3IgZXhhbXBsZTogYnppcDIgXC0tIFwtbXlmaWxlbmFtZS4KLS5UUAotLkIgXC0tcmVwZXRpdGl2ZS1mYXN0IC0tcmVwZXRpdGl2ZS1iZXN0Ci1UaGVzZSBmbGFncyBhcmUgcmVkdW5kYW50IGluIHZlcnNpb25zIDAuOS41IGFuZCBhYm92ZS4gIFRoZXkgcHJvdmlkZWQKLXNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbgotZWFybGllciB2ZXJzaW9ucywgd2hpY2ggd2FzIHNvbWV0aW1lcyB1c2VmdWwuICAwLjkuNSBhbmQgYWJvdmUgaGF2ZSBhbgotaW1wcm92ZWQgYWxnb3JpdGhtIHdoaWNoIHJlbmRlcnMgdGhlc2UgZmxhZ3MgaXJyZWxldmFudC4KLQotLlNIIE1FTU9SWSBNQU5BR0VNRU5UCi0uSSBiemlwMiAKLWNvbXByZXNzZXMgbGFyZ2UgZmlsZXMgaW4gYmxvY2tzLiAgVGhlIGJsb2NrIHNpemUgYWZmZWN0cwotYm90aCB0aGUgY29tcHJlc3Npb24gcmF0aW8gYWNoaWV2ZWQsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yCi1jb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4gIFRoZSBmbGFncyBcLTEgdGhyb3VnaCBcLTkKLXNwZWNpZnkgdGhlIGJsb2NrIHNpemUgdG8gYmUgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZQotZGVmYXVsdCkgcmVzcGVjdGl2ZWx5LiAgQXQgZGVjb21wcmVzc2lvbiB0aW1lLCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvcgotY29tcHJlc3Npb24gaXMgcmVhZCBmcm9tIHRoZSBoZWFkZXIgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kCi0uSSBidW56aXAyCi10aGVuIGFsbG9jYXRlcyBpdHNlbGYganVzdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29tcHJlc3MKLXRoZSBmaWxlLiAgU2luY2UgYmxvY2sgc2l6ZXMgYXJlIHN0b3JlZCBpbiBjb21wcmVzc2VkIGZpbGVzLCBpdCBmb2xsb3dzCi10aGF0IHRoZSBmbGFncyBcLTEgdG8gXC05IGFyZSBpcnJlbGV2YW50IHRvIGFuZCBzbyBpZ25vcmVkCi1kdXJpbmcgZGVjb21wcmVzc2lvbi4KLQotQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzLCAKLWluIGJ5dGVzLCBjYW4gYmUgZXN0aW1hdGVkIGFzOgotCi0gICAgICAgQ29tcHJlc3Npb246ICAgNDAwayArICggOCB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgRGVjb21wcmVzc2lvbjogMTAwayArICggNCB4IGJsb2NrIHNpemUgKSwgb3IKLSAgICAgICAgICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKLQotTGFyZ2VyIGJsb2NrIHNpemVzIGdpdmUgcmFwaWRseSBkaW1pbmlzaGluZyBtYXJnaW5hbCByZXR1cm5zLiAgTW9zdCBvZgotdGhlIGNvbXByZXNzaW9uIGNvbWVzIGZyb20gdGhlIGZpcnN0IHR3byBvciB0aHJlZSBodW5kcmVkIGsgb2YgYmxvY2sKLXNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluIG1pbmQgd2hlbiB1c2luZwotLkkgYnppcDIKLW9uIHNtYWxsIG1hY2hpbmVzLgotSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYXBwcmVjaWF0ZSB0aGF0IHRoZSBkZWNvbXByZXNzaW9uIG1lbW9yeQotcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgdGhlIGNob2ljZSBvZiBibG9jayBzaXplLgotCi1Gb3IgZmlsZXMgY29tcHJlc3NlZCB3aXRoIHRoZSBkZWZhdWx0IDkwMGsgYmxvY2sgc2l6ZSwKLS5JIGJ1bnppcDIKLXdpbGwgcmVxdWlyZSBhYm91dCAzNzAwIGtieXRlcyB0byBkZWNvbXByZXNzLiAgVG8gc3VwcG9ydCBkZWNvbXByZXNzaW9uCi1vZiBhbnkgZmlsZSBvbiBhIDQgbWVnYWJ5dGUgbWFjaGluZSwgCi0uSSBidW56aXAyCi1oYXMgYW4gb3B0aW9uIHRvCi1kZWNvbXByZXNzIHVzaW5nIGFwcHJveGltYXRlbHkgaGFsZiB0aGlzIGFtb3VudCBvZiBtZW1vcnksIGFib3V0IDIzMDAKLWtieXRlcy4gIERlY29tcHJlc3Npb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsIHNvIHlvdSBzaG91bGQgdXNlIHRoaXMKLW9wdGlvbiBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudCBmbGFnIGlzIC1zLgotCi1JbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb25zdHJhaW50cyBhbGxvdywKLXNpbmNlIHRoYXQgbWF4aW1pc2VzIHRoZSBjb21wcmVzc2lvbiBhY2hpZXZlZC4gIENvbXByZXNzaW9uIGFuZAotZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHVhbGx5IHVuYWZmZWN0ZWQgYnkgYmxvY2sgc2l6ZS4KLQotQW5vdGhlciBzaWduaWZpY2FudCBwb2ludCBhcHBsaWVzIHRvIGZpbGVzIHdoaWNoIGZpdCBpbiBhIHNpbmdsZSBibG9jawotLS0gdGhhdCBtZWFucyBtb3N0IGZpbGVzIHlvdSdkIGVuY291bnRlciB1c2luZyBhIGxhcmdlIGJsb2NrIHNpemUuICBUaGUKLWFtb3VudCBvZiByZWFsIG1lbW9yeSB0b3VjaGVkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwKLXNpbmNlIHRoZSBmaWxlIGlzIHNtYWxsZXIgdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nIGEgZmlsZQotMjAsMDAwIGJ5dGVzIGxvbmcgd2l0aCB0aGUgZmxhZyAtOSB3aWxsIGNhdXNlIHRoZSBjb21wcmVzc29yIHRvCi1hbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaCA0MDBrICsgMjAwMDAgKiA4ID0gNTYwCi1rYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBhbGxvY2F0ZSAzNzAwayBidXQgb25seQotdG91Y2ggMTAwayArIDIwMDAwICogNCA9IDE4MCBrYnl0ZXMuCi0KLUhlcmUgaXMgYSB0YWJsZSB3aGljaCBzdW1tYXJpc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2FnZSBmb3IgZGlmZmVyZW50Ci1ibG9jayBzaXplcy4gIEFsc28gcmVjb3JkZWQgaXMgdGhlIHRvdGFsIGNvbXByZXNzZWQgc2l6ZSBmb3IgMTQgZmlsZXMgb2YKLXRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc3Npb24gQ29ycHVzIHRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzCi1jb2x1bW4gZ2l2ZXMgc29tZSBmZWVsIGZvciBob3cgY29tcHJlc3Npb24gdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4KLVRoZXNlIGZpZ3VyZXMgdGVuZCB0byB1bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2Ugb2YgbGFyZ2VyIGJsb2NrIHNpemVzIGZvcgotbGFyZ2VyIGZpbGVzLCBzaW5jZSB0aGUgQ29ycHVzIGlzIGRvbWluYXRlZCBieSBzbWFsbGVyIGZpbGVzLgotCi0gICAgICAgICAgIENvbXByZXNzICAgRGVjb21wcmVzcyAgIERlY29tcHJlc3MgICBDb3JwdXMKLSAgICBGbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIC1zIHVzYWdlICAgICBTaXplCi0KLSAgICAgLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotICAgICAtMiAgICAgIDIwMDBrICAgICAgIDkwMGsgICAgICAgICA2MDBrICAgICAgODc3NzAzCi0gICAgIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKLSAgICAgLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotICAgICAtNSAgICAgIDQ0MDBrICAgICAgMjEwMGsgICAgICAgIDEzNTBrICAgICAgODQ1MTYwCi0gICAgIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKLSAgICAgLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotICAgICAtOCAgICAgIDY4MDBrICAgICAgMzMwMGsgICAgICAgIDIxMDBrICAgICAgODI4NjQyCi0gICAgIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDIKLQotLlNIIFJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVMKLS5JIGJ6aXAyCi1jb21wcmVzc2VzIGZpbGVzIGluIGJsb2NrcywgdXN1YWxseSA5MDBrYnl0ZXMgbG9uZy4gIEVhY2gKLWJsb2NrIGlzIGhhbmRsZWQgaW5kZXBlbmRlbnRseS4gIElmIGEgbWVkaWEgb3IgdHJhbnNtaXNzaW9uIGVycm9yIGNhdXNlcwotYSBtdWx0aS1ibG9jayAuYnoyCi1maWxlIHRvIGJlY29tZSBkYW1hZ2VkLCBpdCBtYXkgYmUgcG9zc2libGUgdG8KLXJlY292ZXIgZGF0YSBmcm9tIHRoZSB1bmRhbWFnZWQgYmxvY2tzIGluIHRoZSBmaWxlLgotCi1UaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrIGlzIGRlbGltaXRlZCBieSBhIDQ4LWJpdAotcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUgYmxvY2sgYm91bmRhcmllcyB3aXRoCi1yZWFzb25hYmxlIGNlcnRhaW50eS4gIEVhY2ggYmxvY2sgYWxzbyBjYXJyaWVzIGl0cyBvd24gMzItYml0IENSQywgc28KLWRhbWFnZWQgYmxvY2tzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gdW5kYW1hZ2VkIG9uZXMuCi0KLS5JIGJ6aXAycmVjb3ZlcgotaXMgYSBzaW1wbGUgcHJvZ3JhbSB3aG9zZSBwdXJwb3NlIGlzIHRvIHNlYXJjaCBmb3IKLWJsb2NrcyBpbiAuYnoyIGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jayBvdXQgaW50byBpdHMgb3duIC5iejIgCi1maWxlLiAgWW91IGNhbiB0aGVuIHVzZQotLkkgYnppcDIgCi1cLXQKLXRvIHRlc3QgdGhlCi1pbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2Ugd2hpY2ggYXJlCi11bmRhbWFnZWQuCi0KLS5JIGJ6aXAycmVjb3ZlcgotdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW1hZ2VkIGZpbGUsIAotYW5kIHdyaXRlcyBhIG51bWJlciBvZiBmaWxlcyAicmVjMDAwMDFmaWxlLmJ6MiIsCi0icmVjMDAwMDJmaWxlLmJ6MiIsIGV0YywgY29udGFpbmluZyB0aGUgIGV4dHJhY3RlZCAgYmxvY2tzLgotVGhlICBvdXRwdXQgIGZpbGVuYW1lcyAgYXJlICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZgotd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyAtLSBmb3IgZXhhbXBsZSwgIAotImJ6aXAyIC1kYyAgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGEiIC0tIHByb2Nlc3NlcyB0aGUgZmlsZXMgaW4KLXRoZSBjb3JyZWN0IG9yZGVyLgotCi0uSSBiemlwMnJlY292ZXIKLXNob3VsZCBiZSBvZiBtb3N0IHVzZSBkZWFsaW5nIHdpdGggbGFyZ2UgLmJ6MgotZmlsZXMsICBhcyAgdGhlc2Ugd2lsbCBjb250YWluIG1hbnkgYmxvY2tzLiAgSXQgaXMgY2xlYXJseQotZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayAgZmlsZXMsICBzaW5jZSAgYQotZGFtYWdlZCAgYmxvY2sgIGNhbm5vdCAgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluaW1pc2UgCi1hbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoIG1lZGlhICBvciAgdHJhbnNtaXNzaW9uIGVycm9ycywgCi15b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKLWJsb2NrIHNpemUuCi0KLS5TSCBQRVJGT1JNQU5DRSBOT1RFUwotVGhlIHNvcnRpbmcgcGhhc2Ugb2YgY29tcHJlc3Npb24gZ2F0aGVycyB0b2dldGhlciBzaW1pbGFyIHN0cmluZ3MgaW4gdGhlCi1maWxlLiAgQmVjYXVzZSBvZiB0aGlzLCBmaWxlcyBjb250YWluaW5nIHZlcnkgbG9uZyBydW5zIG9mIHJlcGVhdGVkCi1zeW1ib2xzLCBsaWtlICJhYWJhYWJhYWJhYWIgLi4uIiAgKHJlcGVhdGVkIHNldmVyYWwgaHVuZHJlZCB0aW1lcykgbWF5Ci1jb21wcmVzcyBtb3JlIHNsb3dseSB0aGFuIG5vcm1hbC4gIFZlcnNpb25zIDAuOS41IGFuZCBhYm92ZSBmYXJlIG11Y2gKLWJldHRlciB0aGFuIHByZXZpb3VzIHZlcnNpb25zIGluIHRoaXMgcmVzcGVjdC4gIFRoZSByYXRpbyBiZXR3ZWVuCi13b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbiB0aGUgcmVnaW9uIG9mIDEwOjEuCi1Gb3IgcHJldmlvdXMgdmVyc2lvbnMsIHRoaXMgZmlndXJlIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUKLVwtdnZ2diBvcHRpb24gdG8gbW9uaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgotCi1EZWNvbXByZXNzaW9uIHNwZWVkIGlzIHVuYWZmZWN0ZWQgYnkgdGhlc2UgcGhlbm9tZW5hLgotCi0uSSBiemlwMgotdXN1YWxseSBhbGxvY2F0ZXMgc2V2ZXJhbCBtZWdhYnl0ZXMgb2YgbWVtb3J5IHRvIG9wZXJhdGUKLWluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5IHJhbmRvbSBmYXNoaW9uLiAgVGhpcyBtZWFucwotdGhhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcsIGlzIGxhcmdlbHkKLWRldGVybWluZWQgYnkgdGhlIHNwZWVkIGF0IHdoaWNoIHlvdXIgbWFjaGluZSBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCi1CZWNhdXNlIG9mIHRoaXMsIHNtYWxsIGNoYW5nZXMgdG8gdGhlIGNvZGUgdG8gcmVkdWNlIHRoZSBtaXNzIHJhdGUgaGF2ZQotYmVlbiBvYnNlcnZlZCB0byBnaXZlIGRpc3Byb3BvcnRpb25hdGVseSBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCi1JIGltYWdpbmUgCi0uSSBiemlwMgotd2lsbCBwZXJmb3JtIGJlc3Qgb24gbWFjaGluZXMgd2l0aCB2ZXJ5IGxhcmdlIGNhY2hlcy4KLQotLlNIIENBVkVBVFMKLUkvTyBlcnJvciBtZXNzYWdlcyBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLS5JIGJ6aXAyCi10cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzIGFuZCBleGl0IGNsZWFubHksIGJ1dCB0aGUgZGV0YWlscyBvZgotd2hhdCB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbSByYXRoZXIgbWlzbGVhZGluZy4KLQotVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMC40IG9mCi0uSSBiemlwMi4gIAotQ29tcHJlc3NlZCBkYXRhIGNyZWF0ZWQgYnkgdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzIGFuZAotYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgcHVibGljIHJlbGVhc2VzLCB2ZXJzaW9ucwotMC4xcGwyLCAwLjkuMCwgMC45LjUsIDEuMC4wLCAxLjAuMSwgMS4wLjIgYW5kIDEuMC4zLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nCi1leGNlcHRpb246IDAuOS4wIGFuZCBhYm92ZSBjYW4gY29ycmVjdGx5IGRlY29tcHJlc3MgbXVsdGlwbGUKLWNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLiAgMC4xcGwyIGNhbm5vdCBkbyB0aGlzOyBpdCB3aWxsIHN0b3AKLWFmdGVyIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0uSSBiemlwMnJlY292ZXIKLXZlcnNpb25zIHByaW9yIHRvIDEuMC4yIHVzZWQgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudAotYml0IHBvc2l0aW9ucyBpbiBjb21wcmVzc2VkIGZpbGVzLCBzbyB0aGV5IGNvdWxkIG5vdCBoYW5kbGUgY29tcHJlc3NlZAotZmlsZXMgbW9yZSB0aGFuIDUxMiBtZWdhYnl0ZXMgbG9uZy4gIFZlcnNpb25zIDEuMC4yIGFuZCBhYm92ZSB1c2UKLTY0LWJpdCBpbnRzIG9uIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZAotdGFyZ2V0cywgYW5kIFdpbmRvd3MpLiAgVG8gZXN0YWJsaXNoIHdoZXRoZXIgb3Igbm90IGJ6aXAycmVjb3ZlciB3YXMKLWJ1aWx0IHdpdGggc3VjaCBhIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4gIEluIGFueSBldmVudAoteW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbiB1bmxpbWl0ZWQgdmVyc2lvbiBpZiB5b3UgY2FuIHJlY29tcGlsZSBpdAotd2l0aCBNYXliZVVJbnQ2NCBzZXQgdG8gYmUgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIuCi0KLQotCi0uU0ggQVVUSE9SCi1KdWxpYW4gU2V3YXJkLCBqc2V3YXJkYnppcC5vcmcuCi0KLWh0dHA6Ly93d3cuYnppcC5vcmcKLQotVGhlIGlkZWFzIGVtYm9kaWVkIGluCi0uSSBiemlwMgotYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2xsb3dpbmcKLXBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlIGJsb2NrIHNvcnRpbmcKLXRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAoYWdhaW4sIGZvciB0aGUgSHVmZm1hbiBjb2RlciksIFBldGVyCi1GZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kaW5nIG1vZGVsIGluIHRoZSBvcmlnaW5hbAotLkkgYnppcCwKLWFuZCBtYW55IHJlZmluZW1lbnRzKSwgYW5kIEFsaXN0YWlyIE1vZmZhdCwgUmFkZm9yZCBOZWFsIGFuZCBJYW4gV2l0dGVuCi0oZm9yIHRoZSBhcml0aG1ldGljIGNvZGVyIGluIHRoZSBvcmlnaW5hbAotLkkgYnppcCkuICAKLUkgYW0gbXVjaAotaW5kZWJ0ZWQgZm9yIHRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFudWFsIGluIHRoZQotc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCi12b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8KLXNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZQotd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIAotRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdW1lbnRhdGlvbi4KLVRoZSBieiogc2NyaXB0cyBhcmUgZGVyaXZlZCBmcm9tIHRob3NlIG9mIEdOVSBnemlwLgotTWFueSBwZW9wbGUgc2VudCBwYXRjaGVzLCBoZWxwZWQKLXdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUgYWR2aWNlIGFuZCB3ZXJlIGdlbmVyYWxseQotaGVscGZ1bC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLjEucHJlZm9ybWF0dGVkIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMS5wcmVmb3JtYXR0ZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZTE2ZTUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMS5wcmVmb3JtYXR0ZWQKKysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotYnppcDIoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKLQotCi0KLU4ITkEIQU0ITUUIRQotICAgICAgIGJ6aXAyLCBidW56aXAyIOKIkiBhIGJsb2Nr4oCQc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAuNAotICAgICAgIGJ6Y2F0IOKIkiBkZWNvbXByZXNzZXMgZmlsZXMgdG8gc3Rkb3V0Ci0gICAgICAgYnppcDJyZWNvdmVyIOKIkiByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwotCi0KLVMIU1kIWU4ITk8IT1AIUFMIU0kISVMIUwotICAgICAgIGIIYnoIemkIaXAIcDIIMiBbIOKIkgjiiJJjCGNkCGRmCGZrCGtxCHFzCHN0CHR2CHZ6CHpWCFZMCEwxCDEyCDIzCDM0CDQ1CDU2CDY3CDc4CDg5CDkgXSBbIF8IZl8IaV8IbF8IZV8Ibl8IYV8IbV8IZV8IcyBfCC5fCC5fCC4gIF0KLSAgICAgICBiCGJ1CHVuCG56CHppCGlwCHAyCDIgWyDiiJII4oiSZghmawhrdgh2cwhzVghWTAhMIF0gWyBfCGZfCGlfCGxfCGVfCG5fCGFfCG1fCGVfCHMgXwguXwguXwguICBdCi0gICAgICAgYghiegh6YwhjYQhhdAh0IFsg4oiSCOKIknMIcyBdIFsgXwhmXwhpXwhsXwhlXwhuXwhhXwhtXwhlXwhzIF8ILl8ILl8ILiAgXQotICAgICAgIGIIYnoIemkIaXAIcDIIMnIIcmUIZWMIY28Ib3YIdmUIZXIIciBfCGZfCGlfCGxfCGVfCG5fCGFfCG1fCGUKLQotCi1ECERFCEVTCFNDCENSCFJJCElQCFBUCFRJCElPCE9OCE4KLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgIGNvbXByZXNzZXMgIGZpbGVzICB1c2luZyAgdGhlIEJ1cnJvd3PigJBXaGVlbGVyIGJsb2NrCi0gICAgICAgc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgIGFuZCAgSHVmZm1hbiAgY29kaW5nLgotICAgICAgIENvbXByZXNzaW9uICBpcyAgZ2VuZXJhbGx5ICBjb25zaWRlcmFibHkgIGJldHRlciB0aGFuIHRoYXQKLSAgICAgICBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbCBMWjc3L0xaNzjigJBiYXNlZCBjb21wcmVzc29ycywKLSAgICAgICBhbmQgIGFwcHJvYWNoZXMgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUFBNIGZhbWlseSBvZiBzdGHCrQotICAgICAgIHRpc3RpY2FsIGNvbXByZXNzb3JzLgotCi0gICAgICAgVGhlIGNvbW1hbmTigJBsaW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgIHRvCi0gICAgICAgdGhvc2Ugb2YgXwhHXwhOXwhVIF8IZ18Iel8IaV8IcF8ILCBidXQgdGhleSBhcmUgbm90IGlkZW50aWNhbC4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgZXhwZWN0cyAgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZSBjb23CrQotICAgICAgIG1hbmTigJBsaW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzIHJlcGxhY2VkICBieSAgYSAgY29tcHJlc3NlZAotICAgICAgIHZlcnNpb24gIG9mICBpdHNlbGYsICB3aXRoICB0aGUgIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4KLSAgICAgICBFYWNoIGNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsICBwZXLCrQotICAgICAgIG1pc3Npb25zLCBhbmQsIHdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZMKtCi0gICAgICAgaW5nIG9yaWdpbmFsLCBzbyB0aGF0IHRoZXNlIHByb3BlcnRpZXMgIGNhbiAgYmUgIGNvcnJlY3RseQotICAgICAgIHJlc3RvcmVkICBhdCAgZGVjb21wcmVzc2lvbiAgdGltZS4gICBGaWxlIG5hbWUgaGFuZGxpbmcgaXMKLSAgICAgICBuYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIHByZXNlcnbCrQotICAgICAgIGluZyAgb3JpZ2luYWwgZmlsZSBuYW1lcywgcGVybWlzc2lvbnMsIG93bmVyc2hpcHMgb3IgZGF0ZXMKLSAgICAgICBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrIHRoZXNlIGNvbmNlcHRzLCBvciBoYXZlICBzZXJpb3VzCi0gICAgICAgZmlsZSBuYW1lIGxlbmd0aCByZXN0cmljdGlvbnMsIHN1Y2ggYXMgTVPigJBET1MuCi0KLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgIGFuZCAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIHdpbGwgYnkgZGVmYXVsdCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCi0gICAgICAgZmlsZXMuICBJZiB5b3Ugd2FudCB0aGlzIHRvIGhhcHBlbiwgc3BlY2lmeSB0aGUg4oiSZiBmbGFnLgotCi0gICAgICAgSWYgbm8gZmlsZSBuYW1lcyAgYXJlICBzcGVjaWZpZWQsICBfCGJfCHpfCGlfCHBfCDIgIGNvbXByZXNzZXMgIGZyb20KLSAgICAgICBzdGFuZGFyZCAgaW5wdXQgIHRvICBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIF8IYl8Iel8IaV8IcF8IMgotICAgICAgIHdpbGwgZGVjbGluZSB0byB3cml0ZSBjb21wcmVzc2VkIG91dHB1dCB0byBhIHRlcm1pbmFsLCAgYXMKLSAgICAgICB0aGlzICB3b3VsZCAgYmUgIGVudGlyZWx5ICBpbmNvbXByZWhlbnNpYmxlICBhbmQgdGhlcmVmb3JlCi0gICAgICAgcG9pbnRsZXNzLgotCi0gICAgICAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIChvciBfCGJfCHpfCGlfCHBfCDIgXwjiiJJfCGRfCCkgZGVjb21wcmVzc2VzICBhbGwgIHNwZWNpZmllZCAgZmlsZXMuCi0gICAgICAgRmlsZXMgd2hpY2ggd2VyZSBub3QgY3JlYXRlZCBieSBfCGJfCHpfCGlfCHBfCDIgd2lsbCBiZSBkZXRlY3RlZCBhbmQKLSAgICAgICBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4gIF8IYl8Iel8IaV8IcF8IMiAgYXR0ZW1wdHMgIHRvICBndWVzcwotICAgICAgIHRoZSAgZmlsZW5hbWUgIGZvciAgdGhlIGRlY29tcHJlc3NlZCBmaWxlIGZyb20gdGhhdCBvZiB0aGUKLSAgICAgICBjb21wcmVzc2VkIGZpbGUgYXMgZm9sbG93czoKLQotICAgICAgICAgICAgICBmaWxlbmFtZS5iejIgICAgYmVjb21lcyAgIGZpbGVuYW1lCi0gICAgICAgICAgICAgIGZpbGVuYW1lLmJ6ICAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6ICAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgYW55b3RoZXJuYW1lICAgIGJlY29tZXMgICBhbnlvdGhlcm5hbWUub3V0Ci0KLSAgICAgICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi0gICAgICAgXwguXwhiXwh6XwgyXwgsICBfCC5fCGJfCHpfCCwgIF8ILl8IdF8IYl8Iel8IMiBvciBfCC5fCHRfCGJfCHpfCCwgXwhiXwh6XwhpXwhwXwgyIGNvbXBsYWlucyB0aGF0IGl0IGNhbm5vdAotICAgICAgIGd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwKLSAgICAgICBuYW1lIHdpdGggXwguXwhvXwh1Xwh0IGFwcGVuZGVkLgotCi0gICAgICAgQXMgIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzIGRlY29twq0KLSAgICAgICBwcmVzc2lvbiBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC4KLQotICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB3aWxsIGNvcnJlY3RseSBkZWNvbXByZXNzIGEgZmlsZSB3aGljaCBpcyB0aGUgY29uwq0KLSAgICAgICBjYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzCi0gICAgICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLgotICAgICAgIEludGVncml0eSB0ZXN0aW5nICjiiJJ0KSBvZiBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyBpcwotICAgICAgIGFsc28gc3VwcG9ydGVkLgotCi0gICAgICAgWW91IGNhbiBhbHNvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZmlsZXMgdG8gdGhlICBzdGFuZGFyZAotICAgICAgIG91dHB1dCAgYnkgZ2l2aW5nIHRoZSDiiJJjIGZsYWcuICBNdWx0aXBsZSBmaWxlcyBtYXkgYmUgY29twq0KLSAgICAgICBwcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzCi0gICAgICAgYXJlICBmZWQgIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZiBtdWx0aXBsZQotICAgICAgIGZpbGVzIGluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbSBjb250YWluaW5nICBtdWx0acKtCi0gICAgICAgcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotICAgICAgIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSAgYnkgIF8IYl8Iel8IaV8IcF8IMiAgdmVyc2lvbiAgMC45LjAgIG9yCi0gICAgICAgbGF0ZXIuICAgRWFybGllciAgdmVyc2lvbnMgb2YgXwhiXwh6XwhpXwhwXwgyIHdpbGwgc3RvcCBhZnRlciBkZWNvbcKtCi0gICAgICAgcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotICAgICAgIF8IYl8Iel8IY18IYV8IdCAob3IgXwhiXwh6XwhpXwhwXwgyIF8I4oCQXwhkXwhjXwgpIGRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkICBmaWxlcyAgdG8KLSAgICAgICB0aGUgc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyICB3aWxsICByZWFkIGFyZ3VtZW50cyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgICBfCEJfCFpfCElfCFBfCDIgYW5kIF8IQl8IWl8ISV8IUF8ILCBpbiAgdGhhdCAgb3JkZXIsICBhbmQgIHdpbGwgIHByb2Nlc3MgIHRoZW0KLSAgICAgICBiZWZvcmUgIGFueSAgYXJndW1lbnRzICByZWFkICBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCi0gICAgICAgZ2l2ZXMgYSBjb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuCi0KLSAgICAgICBDb21wcmVzc2lvbiBpcyBhbHdheXMgcGVyZm9ybWVkLCBldmVuICBpZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSAgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcwotICAgICAgIHRoYW4gYWJvdXQgb25lIGh1bmRyZWQgYnl0ZXMgdGVuZCB0byBnZXQgbGFyZ2VyLCBzaW5jZSB0aGUKLSAgICAgICBjb21wcmVzc2lvbiAgbWVjaGFuaXNtICBoYXMgIGEgIGNvbnN0YW50ICBvdmVyaGVhZCAgaW4gdGhlCi0gICAgICAgcmVnaW9uIG9mIDUwIGJ5dGVzLiAgUmFuZG9tIGRhdGEgKGluY2x1ZGluZyB0aGUgb3V0cHV0ICBvZgotICAgICAgIG1vc3QgIGZpbGUgIGNvbXByZXNzb3JzKSAgaXMgIGNvZGVkIGF0IGFib3V0IDguMDUgYml0cyBwZXIKLSAgICAgICBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZCAwLjUlLgotCi0gICAgICAgQXMgYSBzZWxm4oCQY2hlY2sgZm9yIHlvdXIgIHByb3RlY3Rpb24sICBfCGJfCHpfCGlfCHBfCDIgIHVzZXMgIDMy4oCQYml0Ci0gICAgICAgQ1JDcyAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZQotICAgICAgIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cMKtCi0gICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwotICAgICAgIGluIF8IYl8Iel8IaV8IcF8IMiAoaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLiAgVGhlIGNoYW5jZXMgIG9mICBkYXRhCi0gICAgICAgY29ycnVwdGlvbiAgZ29pbmcgIHVuZGV0ZWN0ZWQgIGlzICBtaWNyb3Njb3BpYywgIGFib3V0IG9uZQotICAgICAgIGNoYW5jZSBpbiBmb3VyIGJpbGxpb24gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBCZSBhd2FyZSwKLSAgICAgICB0aG91Z2gsICB0aGF0ICB0aGUgIGNoZWNrIG9jY3VycyB1cG9uIGRlY29tcHJlc3Npb24sIHNvIGl0Ci0gICAgICAgY2FuIG9ubHkgdGVsbCB5b3UgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcuICBJdCBjYW7igJl0ICBoZWxwCi0gICAgICAgeW91ICByZWNvdmVyICB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciB0byB0cnkgdG8gcmVjb3ZlciBkYXRhIGZyb20gZGFtYWdlZCBmaWxlcy4KLQotICAgICAgIFJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsICAxICBmb3IgIGVudmlyb25tZW50YWwKLSAgICAgICBwcm9ibGVtcyAgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksCi0gICAgICAgMiB0byBpbmRpY2F0ZSBhIGNvcnJ1cHQgY29tcHJlc3NlZCBmaWxlLCAzIGZvciBhbiBpbnRlcm5hbAotICAgICAgIGNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQgXwhiXwh6XwhpXwhwXwgyIHRvIHBhbmljLgotCi0KLU8IT1AIUFQIVEkISU8IT04ITlMIUwotICAgICAgIOKIkgjiiJJjCGMg4oCQCOKAkOKAkAjigJBzCHN0CHRkCGRvCG91CHV0CHQKLSAgICAgICAgICAgICAgQ29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZCBvdXRwdXQuCi0KLSAgICAgICDiiJII4oiSZAhkIOKAkAjigJDigJAI4oCQZAhkZQhlYwhjbwhvbQhtcAhwcghyZQhlcwhzcwhzCi0gICAgICAgICAgICAgIEZvcmNlICBkZWNvbXByZXNzaW9uLiAgXwhiXwh6XwhpXwhwXwgyXwgsIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiBhbmQgXwhiXwh6XwhjXwhhXwh0IGFyZQotICAgICAgICAgICAgICByZWFsbHkgdGhlIHNhbWUgcHJvZ3JhbSwgIGFuZCAgdGhlICBkZWNpc2lvbiAgYWJvdXQKLSAgICAgICAgICAgICAgd2hhdCAgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24gdGhlIGJhc2lzIG9mIHdoaWNoCi0gICAgICAgICAgICAgIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdCAgbWVjaGFuaXNtLAotICAgICAgICAgICAgICBhbmQgZm9yY2VzIF8IYl8Iel8IaV8IcF8IMiB0byBkZWNvbXByZXNzLgotCi0gICAgICAg4oiSCOKIknoIeiDigJAI4oCQ4oCQCOKAkGMIY28Ib20IbXAIcHIIcmUIZXMIc3MIcwotICAgICAgICAgICAgICBUaGUgICBjb21wbGVtZW50ICAgdG8gICDiiJJkOiAgIGZvcmNlcyAgIGNvbXByZXNzaW9uLAotICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBpbnZvY2F0aW9uIG5hbWUuCi0KLSAgICAgICDiiJII4oiSdAh0IOKAkAjigJDigJAI4oCQdAh0ZQhlcwhzdAh0Ci0gICAgICAgICAgICAgIENoZWNrIGludGVncml0eSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocyksIGJ1dCBkb27igJl0Ci0gICAgICAgICAgICAgIGRlY29tcHJlc3MgIHRoZW0uICAgVGhpcyAgcmVhbGx5ICBwZXJmb3JtcyAgYSB0cmlhbAotICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgotCi0gICAgICAg4oiSCOKIkmYIZiDigJAI4oCQ4oCQCOKAkGYIZm8Ib3IIcmMIY2UIZQotICAgICAgICAgICAgICBGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgIE5vcm1hbGx5LCAgXwhiXwh6XwhpXwhwXwgyCi0gICAgICAgICAgICAgIHdpbGwgIG5vdCAgb3ZlcndyaXRlICBleGlzdGluZyAgb3V0cHV0IGZpbGVzLiAgQWxzbwotICAgICAgICAgICAgICBmb3JjZXMgXwhiXwh6XwhpXwhwXwgyIHRvIGJyZWFrIGhhcmQgbGlua3MgdG8gZmlsZXMsIHdoaWNoIGl0Ci0gICAgICAgICAgICAgIG90aGVyd2lzZSB3b3VsZG7igJl0IGRvLgotCi0gICAgICAgICAgICAgIGJ6aXAyICBub3JtYWxseSAgZGVjbGluZXMgdG8gZGVjb21wcmVzcyBmaWxlcyB3aGljaAotICAgICAgICAgICAgICBkb27igJl0IGhhdmUgdGhlICBjb3JyZWN0ICBtYWdpYyAgaGVhZGVyICBieXRlcy4gICBJZgotICAgICAgICAgICAgICBmb3JjZWQgICjigJBmKSwgIGhvd2V2ZXIsICBpdCAgd2lsbCAgcGFzcyAgc3VjaCBmaWxlcwotICAgICAgICAgICAgICB0aHJvdWdoIHVubW9kaWZpZWQuICBUaGlzIGlzIGhvdyBHTlUgZ3ppcCAgYmVoYXZlcy4KLQotICAgICAgIOKIkgjiiJJrCGsg4oCQCOKAkOKAkAjigJBrCGtlCGVlCGVwCHAKLSAgICAgICAgICAgICAgS2VlcCAgKGRvbuKAmXQgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcgY29tcHJlc3Npb24KLSAgICAgICAgICAgICAgb3IgZGVjb21wcmVzc2lvbi4KLQotICAgICAgIOKIkgjiiJJzCHMg4oCQCOKAkOKAkAjigJBzCHNtCG1hCGFsCGxsCGwKLSAgICAgICAgICAgICAgUmVkdWNlIG1lbW9yeSB1c2FnZSwgZm9yIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uCi0gICAgICAgICAgICAgIGFuZCAgdGVzdGluZy4gICBGaWxlcyAgYXJlICBkZWNvbXByZXNzZWQgYW5kIHRlc3RlZAotICAgICAgICAgICAgICB1c2luZyBhIG1vZGlmaWVkIGFsZ29yaXRobSB3aGljaCBvbmx5IHJlcXVpcmVzICAyLjUKLSAgICAgICAgICAgICAgYnl0ZXMgIHBlciAgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlCi0gICAgICAgICAgICAgIGRlY29tcHJlc3NlZCBpbiAyMzAwayBvZiBtZW1vcnksICBhbGJlaXQgIGF0ICBhYm91dAotICAgICAgICAgICAgICBoYWxmIHRoZSBub3JtYWwgc3BlZWQuCi0KLSAgICAgICAgICAgICAgRHVyaW5nICBjb21wcmVzc2lvbiwgIOKIknMgIHNlbGVjdHMgIGEgIGJsb2NrIHNpemUgb2YKLSAgICAgICAgICAgICAgMjAwaywgd2hpY2ggbGltaXRzIG1lbW9yeSB1c2UgdG8gIGFyb3VuZCAgdGhlICBzYW1lCi0gICAgICAgICAgICAgIGZpZ3VyZSwgIGF0ICB0aGUgZXhwZW5zZSBvZiB5b3VyIGNvbXByZXNzaW9uIHJhdGlvLgotICAgICAgICAgICAgICBJbiBzaG9ydCwgaWYgeW91ciAgbWFjaGluZSAgaXMgIGxvdyAgb24gIG1lbW9yeSAgKDgKLSAgICAgICAgICAgICAgbWVnYWJ5dGVzICBvciAgbGVzcyksICB1c2UgIOKIknMgZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCi0KLSAgICAgICDiiJII4oiScQhxIOKAkAjigJDigJAI4oCQcQhxdQh1aQhpZQhldAh0Ci0gICAgICAgICAgICAgIFN1cHByZXNzIG5vbuKAkGVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLiAgIE1lc3NhZ2VzCi0gICAgICAgICAgICAgIHBlcnRhaW5pbmcgIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwotICAgICAgICAgICAgICB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLgotCi0gICAgICAg4oiSCOKIknYIdiDigJAI4oCQ4oCQCOKAkHYIdmUIZXIIcmIIYm8Ib3MIc2UIZQotICAgICAgICAgICAgICBWZXJib3NlIG1vZGUg4oCQ4oCQIHNob3cgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGZvciBlYWNoCi0gICAgICAgICAgICAgIGZpbGUgIHByb2Nlc3NlZC4gICBGdXJ0aGVyICDiiJJ24oCZcyAgaW5jcmVhc2UgdGhlIHZlcsKtCi0gICAgICAgICAgICAgIGJvc2l0eSBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaAotICAgICAgICAgICAgICBpcyBwcmltYXJpbHkgb2YgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCi0KLSAgICAgICDiiJII4oiSTAhMIOKAkAjigJDigJAI4oCQbAhsaQhpYwhjZQhlbghucwhzZQhlIOKAkAjigJBWCFYg4oCQCOKAkOKAkAjigJB2CHZlCGVyCHJzCHNpCGlvCG9uCG4KLSAgICAgICAgICAgICAgRGlzcGxheSAgdGhlICBzb2Z0d2FyZSAgdmVyc2lvbiwgIGxpY2Vuc2UgdGVybXMgYW5kCi0gICAgICAgICAgICAgIGNvbmRpdGlvbnMuCi0KLSAgICAgICDiiJII4oiSMQgxICgIKG8Ib3IIciDiiJII4oiS4oiSCOKIkmYIZmEIYXMIc3QIdCkIKSB0CHRvCG8g4oiSCOKIkjkIOSAoCChvCG9yCHIg4oiSCOKIkuKIkgjiiJJiCGJlCGVzCHN0CHQpCCkKLSAgICAgICAgICAgICAgU2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLiAgOTAwICBrICB3aGVuCi0gICAgICAgICAgICAgIGNvbXByZXNzaW5nLiAgIEhhcyAgbm8gIGVmZmVjdCAgd2hlbiBkZWNvbXByZXNzaW5nLgotICAgICAgICAgICAgICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuICBUaGUg4oiS4oiSZmFzdCBhbmQg4oiS4oiSYmVzdAotICAgICAgICAgICAgICBhbGlhc2VzICBhcmUgIHByaW1hcmlseSBmb3IgR05VIGd6aXAgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwg4oiS4oiSZmFzdCBkb2VzbuKAmXQgbWFrZSB0aGluZ3MgIHNpZ25pZmnCrQotICAgICAgICAgICAgICBjYW50bHkgIGZhc3Rlci4gICBBbmQgIOKIkuKIkmJlc3QgIG1lcmVseSAgc2VsZWN0cyAgdGhlCi0gICAgICAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3VyLgotCi0gICAgICAg4oiSCOKIkuKAkAjigJAgICAgIFRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywgZXZlbgotICAgICAgICAgICAgICBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbsKtCi0gICAgICAgICAgICAgIGRsZSBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyAgd2l0aCAgYSAgZGFzaCwgIGZvcgotICAgICAgICAgICAgICBleGFtcGxlOiBiemlwMiDiiJLigJAg4oiSbXlmaWxlbmFtZS4KLQotICAgICAgIOKIkgjiiJLigJAI4oCQcghyZQhlcAhwZQhldAh0aQhpdAh0aQhpdgh2ZQhl4oCQCOKAkGYIZmEIYXMIc3QIdCDigJAI4oCQ4oCQCOKAkHIIcmUIZXAIcGUIZXQIdGkIaXQIdGkIaXYIdmUIZeKAkAjigJBiCGJlCGVzCHN0CHQKLSAgICAgICAgICAgICAgVGhlc2UgIGZsYWdzICBhcmUgIHJlZHVuZGFudCAgaW4gdmVyc2lvbnMgMC45LjUgYW5kCi0gICAgICAgICAgICAgIGFib3ZlLiAgVGhleSBwcm92aWRlZCBzb21lIGNvYXJzZSBjb250cm9sIG92ZXIgIHRoZQotICAgICAgICAgICAgICBiZWhhdmlvdXIgIG9mIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbiBlYXJsaWVyIHZlcsKtCi0gICAgICAgICAgICAgIHNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZQotICAgICAgICAgICAgICBoYXZlICBhbiAgaW1wcm92ZWQgIGFsZ29yaXRobSAgd2hpY2ggIHJlbmRlcnMgdGhlc2UKLSAgICAgICAgICAgICAgZmxhZ3MgaXJyZWxldmFudC4KLQotCi1NCE1FCEVNCE1PCE9SCFJZCFkgTQhNQQhBTghOQQhBRwhHRQhFTQhNRQhFTghOVAhUCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyIGNvbXByZXNzZXMgbGFyZ2UgZmlsZXMgaW4gYmxvY2tzLiAgIFRoZSAgYmxvY2sgIHNpemUKLSAgICAgICBhZmZlY3RzICBib3RoICB0aGUgIGNvbXByZXNzaW9uICByYXRpbyAgYWNoaWV2ZWQsICBhbmQgdGhlCi0gICAgICAgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgotICAgICAgIFRoZSAgZmxhZ3MgIOKIkjEgIHRocm91Z2ggIOKIkjkgIHNwZWNpZnkgIHRoZSBibG9jayBzaXplIHRvIGJlCi0gICAgICAgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KSAgcmVzcGVjwq0KLSAgICAgICB0aXZlbHkuICAgQXQgIGRlY29tcHJlc3Npb24gIHRpbWUsIHRoZSBibG9jayBzaXplIHVzZWQgZm9yCi0gICAgICAgY29tcHJlc3Npb24gaXMgcmVhZCBmcm9tICB0aGUgIGhlYWRlciAgb2YgIHRoZSAgY29tcHJlc3NlZAotICAgICAgIGZpbGUsIGFuZCBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgdGhlbiBhbGxvY2F0ZXMgaXRzZWxmIGp1c3QgZW5vdWdoIG1lbW9yeQotICAgICAgIHRvIGRlY29tcHJlc3MgdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUgIHN0b3JlZCAgaW4KLSAgICAgICBjb21wcmVzc2VkICBmaWxlcywgIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3Mg4oiSMSB0byDiiJI5IGFyZQotICAgICAgIGlycmVsZXZhbnQgdG8gYW5kIHNvIGlnbm9yZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uCi0KLSAgICAgICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMsIGluIGJ5dGVzLCAgY2FuCi0gICAgICAgYmUgZXN0aW1hdGVkIGFzOgotCi0gICAgICAgICAgICAgIENvbXByZXNzaW9uOiAgIDQwMGsgKyAoIDggeCBibG9jayBzaXplICkKLQotICAgICAgICAgICAgICBEZWNvbXByZXNzaW9uOiAxMDBrICsgKCA0IHggYmxvY2sgc2l6ZSApLCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKLQotICAgICAgIExhcmdlciAgYmxvY2sgIHNpemVzICBnaXZlICByYXBpZGx5ICBkaW1pbmlzaGluZyAgbWFyZ2luYWwKLSAgICAgICByZXR1cm5zLiAgTW9zdCBvZiB0aGUgY29tcHJlc3Npb24gY29tZXMgZnJvbSB0aGUgZmlyc3QgdHdvCi0gICAgICAgb3IgIHRocmVlIGh1bmRyZWQgayBvZiBibG9jayBzaXplLCBhIGZhY3Qgd29ydGggYmVhcmluZyBpbgotICAgICAgIG1pbmQgd2hlbiB1c2luZyBfCGJfCHpfCGlfCHBfCDIgIG9uICBzbWFsbCAgbWFjaGluZXMuICAgSXQgIGlzICBhbHNvCi0gICAgICAgaW1wb3J0YW50ICB0byAgYXBwcmVjaWF0ZSAgdGhhdCAgdGhlICBkZWNvbXByZXNzaW9uIG1lbW9yeQotICAgICAgIHJlcXVpcmVtZW50IGlzIHNldCBhdCBjb21wcmVzc2lvbiB0aW1lIGJ5ICB0aGUgIGNob2ljZSAgb2YKLSAgICAgICBibG9jayBzaXplLgotCi0gICAgICAgRm9yICBmaWxlcyAgY29tcHJlc3NlZCAgd2l0aCAgdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB3aWxsIHJlcXVpcmUgYWJvdXQgMzcwMCBrYnl0ZXMgdG8gZGVjb21wcmVzcy4gICBUbwotICAgICAgIHN1cHBvcnQgZGVjb21wcmVzc2lvbiBvZiBhbnkgZmlsZSBvbiBhIDQgbWVnYWJ5dGUgbWFjaGluZSwKLSAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgaGFzIGFuIG9wdGlvbiB0byAgZGVjb21wcmVzcyAgdXNpbmcgIGFwcHJveGltYXRlbHkKLSAgICAgICBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXPCrQotICAgICAgIHNpb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsIHNvIHlvdSBzaG91bGQgdXNlICB0aGlzICBvcHRpb24KLSAgICAgICBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudCBmbGFnIGlzIOKAkHMuCi0KLSAgICAgICBJbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb27CrQotICAgICAgIHN0cmFpbnRzICBhbGxvdywgIHNpbmNlICB0aGF0ICBtYXhpbWlzZXMgIHRoZSAgY29tcHJlc3Npb24KLSAgICAgICBhY2hpZXZlZC4gICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHXCrQotICAgICAgIGFsbHkgdW5hZmZlY3RlZCBieSBibG9jayBzaXplLgotCi0gICAgICAgQW5vdGhlciBzaWduaWZpY2FudCBwb2ludCBhcHBsaWVzIHRvIGZpbGVzIHdoaWNoIGZpdCBpbiAgYQotICAgICAgIHNpbmdsZSAgYmxvY2sgIOKAkOKAkCAgdGhhdCAgbWVhbnMgIG1vc3QgZmlsZXMgeW914oCZZCBlbmNvdW50ZXIKLSAgICAgICB1c2luZyBhIGxhcmdlIGJsb2NrICBzaXplLiAgIFRoZSAgYW1vdW50ICBvZiAgcmVhbCAgbWVtb3J5Ci0gICAgICAgdG91Y2hlZCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIGZpbGUsIHNpbmNlIHRoZQotICAgICAgIGZpbGUgaXMgc21hbGxlciB0aGFuIGEgYmxvY2suICBGb3IgZXhhbXBsZSwgY29tcHJlc3NpbmcgIGEKLSAgICAgICBmaWxlICAyMCwwMDAgIGJ5dGVzICBsb25nICB3aXRoIHRoZSBmbGFnIOKAkDkgd2lsbCBjYXVzZSB0aGUKLSAgICAgICBjb21wcmVzc29yIHRvIGFsbG9jYXRlIGFyb3VuZCA3NjAwayBvZiAgbWVtb3J5LCAgYnV0ICBvbmx5Ci0gICAgICAgdG91Y2ggNDAwayArIDIwMDAwICogOCA9IDU2MCBrYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZQotICAgICAgIGRlY29tcHJlc3NvciB3aWxsIGFsbG9jYXRlIDM3MDBrIGJ1dCAgb25seSAgdG91Y2ggIDEwMGsgICsKLSAgICAgICAyMDAwMCAqIDQgPSAxODAga2J5dGVzLgotCi0gICAgICAgSGVyZSAgaXMgYSB0YWJsZSB3aGljaCBzdW1tYXJpc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2FnZQotICAgICAgIGZvciBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMuICBBbHNvICByZWNvcmRlZCAgaXMgIHRoZSAgdG90YWwKLSAgICAgICBjb21wcmVzc2VkICBzaXplIGZvciAxNCBmaWxlcyBvZiB0aGUgQ2FsZ2FyeSBUZXh0IENvbXByZXPCrQotICAgICAgIHNpb24gQ29ycHVzIHRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiAgZ2l2ZXMKLSAgICAgICBzb21lICBmZWVsICBmb3IgIGhvdyAgY29tcHJlc3Npb24gIHZhcmllcyB3aXRoIGJsb2NrIHNpemUuCi0gICAgICAgVGhlc2UgZmlndXJlcyB0ZW5kIHRvIHVuZGVyc3RhdGUgdGhlIGFkdmFudGFnZSAgb2YgIGxhcmdlcgotICAgICAgIGJsb2NrICBzaXplcyAgZm9yICBsYXJnZXIgZmlsZXMsIHNpbmNlIHRoZSBDb3JwdXMgaXMgZG9tacKtCi0gICAgICAgbmF0ZWQgYnkgc21hbGxlciBmaWxlcy4KLQotICAgICAgICAgICAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotICAgICAgICAgICBGbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIOKAkHMgdXNhZ2UgICAgIFNpemUKLQotICAgICAgICAgICAg4oCQMSAgICAgIDEyMDBrICAgICAgIDUwMGsgICAgICAgICAzNTBrICAgICAgOTE0NzA0Ci0gICAgICAgICAgICDigJAyICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAgICAgICAgICAgIOKAkDMgICAgICAyODAwayAgICAgIDEzMDBrICAgICAgICAgODUwayAgICAgIDg2MDMzOAotICAgICAgICAgICAg4oCQNCAgICAgIDM2MDBrICAgICAgMTcwMGsgICAgICAgIDExMDBrICAgICAgODQ2ODk5Ci0gICAgICAgICAgICDigJA1ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAgICAgICAgICAgIOKAkDYgICAgICA1MjAwayAgICAgIDI1MDBrICAgICAgICAxNjAwayAgICAgIDgzODYyNgotICAgICAgICAgICAg4oCQNyAgICAgIDYxMDBrICAgICAgMjkwMGsgICAgICAgIDE4NTBrICAgICAgODM0MDk2Ci0gICAgICAgICAgICDigJA4ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAgICAgICAgICAgIOKAkDkgICAgICA3NjAwayAgICAgIDM3MDBrICAgICAgICAyMzUwayAgICAgIDgyODY0MgotCi0KLVIIUkUIRUMIQ08IT1YIVkUIRVIIUkkISU4ITkcIRyBECERBCEFUCFRBCEEgRghGUghSTwhPTQhNIEQIREEIQU0ITUEIQUcIR0UIRUQIRCBGCEZJCElMCExFCEVTCFMKLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgY29tcHJlc3NlcyBmaWxlcyBpbiBibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzICBsb25nLgotICAgICAgIEVhY2ggYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFuc8KtCi0gICAgICAgbWlzc2lvbiBlcnJvciBjYXVzZXMgYSBtdWx0aeKAkGJsb2NrICAuYnoyICBmaWxlICB0byAgYmVjb21lCi0gICAgICAgZGFtYWdlZCwgIGl0ICBtYXkgIGJlICBwb3NzaWJsZSAgdG8gIHJlY292ZXIgZGF0YSBmcm9tIHRoZQotICAgICAgIHVuZGFtYWdlZCBibG9ja3MgaW4gdGhlIGZpbGUuCi0KLSAgICAgICBUaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrICBpcyAgZGVsaW1pdGVkCi0gICAgICAgYnkgIGEgIDQ44oCQYml0IHBhdHRlcm4sIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGZpbmQgdGhlCi0gICAgICAgYmxvY2sgYm91bmRhcmllcyB3aXRoIHJlYXNvbmFibGUgIGNlcnRhaW50eS4gICBFYWNoICBibG9jawotICAgICAgIGFsc28gIGNhcnJpZXMgaXRzIG93biAzMuKAkGJpdCBDUkMsIHNvIGRhbWFnZWQgYmxvY2tzIGNhbiBiZQotICAgICAgIGRpc3Rpbmd1aXNoZWQgZnJvbSB1bmRhbWFnZWQgb25lcy4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciBpcyBhICBzaW1wbGUgIHByb2dyYW0gIHdob3NlICBwdXJwb3NlICBpcyAgdG8KLSAgICAgICBzZWFyY2ggIGZvciBibG9ja3MgaW4gLmJ6MiBmaWxlcywgYW5kIHdyaXRlIGVhY2ggYmxvY2sgb3V0Ci0gICAgICAgaW50byBpdHMgb3duIC5iejIgZmlsZS4gIFlvdSBjYW4gdGhlbiB1c2UgXwhiXwh6XwhpXwhwXwgyIOKIknQgdG8gdGVzdAotICAgICAgIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2UKLSAgICAgICB3aGljaCBhcmUgdW5kYW1hZ2VkLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtwq0KLSAgICAgICBhZ2VkICAgIGZpbGUsICAgIGFuZCAgICB3cml0ZXMgICAgYSAgICBudW1iZXIgICBvZiAgIGZpbGVzCi0gICAgICAgInJlYzAwMDAxZmlsZS5iejIiLCAgInJlYzAwMDAyZmlsZS5iejIiLCAgZXRjLCAgY29udGFpbmluZwotICAgICAgIHRoZSAgIGV4dHJhY3RlZCAgIGJsb2Nrcy4gICBUaGUgICBvdXRwdXQgICBmaWxlbmFtZXMgICBhcmUKLSAgICAgICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZiB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm/CrQotICAgICAgIGNlc3NpbmcgIOKAkOKAkCBmb3IgZXhhbXBsZSwgImJ6aXAyIOKAkGRjICByZWMqZmlsZS5iejIgPiByZWNvdsKtCi0gICAgICAgZXJlZF9kYXRhIiDigJDigJAgcHJvY2Vzc2VzIHRoZSBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciBzaG91bGQgYmUgb2YgbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIC5iejIKLSAgICAgICBmaWxlcywgIGFzICB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5Ci0gICAgICAgZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZeKAkGJsb2NrICBmaWxlcywgIHNpbmNlICBhCi0gICAgICAgZGFtYWdlZCAgYmxvY2sgIGNhbm5vdCAgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluwq0KLSAgICAgICBpbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoIG1lZGlhICBvciAgdHJhbnNtaXPCrQotICAgICAgIHNpb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKLSAgICAgICBibG9jayBzaXplLgotCi0KLVAIUEUIRVIIUkYIRk8IT1IIUk0ITUEIQU4ITkMIQ0UIRSBOCE5PCE9UCFRFCEVTCFMKLSAgICAgICBUaGUgc29ydGluZyBwaGFzZSBvZiBjb21wcmVzc2lvbiBnYXRoZXJzIHRvZ2V0aGVyICBzaW1pbGFyCi0gICAgICAgc3RyaW5ncyAgaW4gIHRoZSAgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZwotICAgICAgIHZlcnkgbG9uZyBydW5zIG9mICByZXBlYXRlZCAgc3ltYm9scywgIGxpa2UgICJhYWJhYWJhYWJhYWIKLSAgICAgICAuLi4iICAgKHJlcGVhdGVkICBzZXZlcmFsIGh1bmRyZWQgdGltZXMpIG1heSBjb21wcmVzcyBtb3JlCi0gICAgICAgc2xvd2x5IHRoYW4gbm9ybWFsLiAgVmVyc2lvbnMgMC45LjUgYW5kICBhYm92ZSAgZmFyZSAgbXVjaAotICAgICAgIGJldHRlciAgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucyBpbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8KLSAgICAgICBiZXR3ZWVuIHdvcnN04oCQY2FzZSBhbmQgYXZlcmFnZeKAkGNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbgotICAgICAgIHRoZSAgcmVnaW9uICBvZiAgMTA6MS4gIEZvciBwcmV2aW91cyB2ZXJzaW9ucywgdGhpcyBmaWd1cmUKLSAgICAgICB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlIOKIknZ2dnYgb3B0aW9uIHRvIG1vbsKtCi0gICAgICAgaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgotCi0gICAgICAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZXNlIHBoZW5vbWVuYS4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgdXN1YWxseSAgYWxsb2NhdGVzICBzZXZlcmFsICBtZWdhYnl0ZXMgb2YgbWVtb3J5IHRvCi0gICAgICAgb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwgb3ZlciBpdCBpbiBhIGZhaXJseSAgcmFuwq0KLSAgICAgICBkb20gIGZhc2hpb24uICAgVGhpcyBtZWFucyB0aGF0IHBlcmZvcm1hbmNlLCBib3RoIGZvciBjb23CrQotICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKLSAgICAgICBzcGVlZCAgYXQgIHdoaWNoICB5b3VyICBtYWNoaW5lICBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCi0gICAgICAgQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvICByZWR1Y2UgIHRoZQotICAgICAgIG1pc3MgIHJhdGUgIGhhdmUgIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkKLSAgICAgICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUgXwhiXwh6XwhpXwhwXwgyIHdpbGwgcGVywq0KLSAgICAgICBmb3JtIGJlc3Qgb24gbWFjaGluZXMgd2l0aCB2ZXJ5IGxhcmdlIGNhY2hlcy4KLQotCi1DCENBCEFWCFZFCEVBCEFUCFRTCFMKLSAgICAgICBJL08gIGVycm9yICBtZXNzYWdlcyAgYXJlIG5vdCBhcyBoZWxwZnVsIGFzIHRoZXkgY291bGQgYmUuCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyIHRyaWVzIGhhcmQgdG8gZGV0ZWN0IEkvTyBlcnJvcnMgIGFuZCAgZXhpdCAgY2xlYW5seSwKLSAgICAgICBidXQgIHRoZSAgZGV0YWlscyAgb2YgIHdoYXQgIHRoZSBwcm9ibGVtIGlzIHNvbWV0aW1lcyBzZWVtCi0gICAgICAgcmF0aGVyIG1pc2xlYWRpbmcuCi0KLSAgICAgICBUaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjQgb2YgXwhiXwh6XwhpXwhwXwgyXwguICBDb23CrQotICAgICAgIHByZXNzZWQgIGRhdGEgY3JlYXRlZCBieSB0aGlzIHZlcnNpb24gaXMgZW50aXJlbHkgZm9yd2FyZHMKLSAgICAgICBhbmQgIGJhY2t3YXJkcyAgY29tcGF0aWJsZSAgd2l0aCAgIHRoZSAgIHByZXZpb3VzICAgcHVibGljCi0gICAgICAgcmVsZWFzZXMsICB2ZXJzaW9ucyAgMC4xcGwyLCAgMC45LjAsICAwLjkuNSwgMS4wLjAsIDEuMC4xLCAKLSAgICAgICAxLjAuMiBhbmQgMS4wLjMsIGJ1dCB3aXRoIHRoZSAgZm9sbG93aW5nICBleGNlcHRpb246IDAuOS4wCi0gICAgICAgYW5kIGFib3ZlIGNhbiAgY29ycmVjdGx5IGRlY29tcHJlc3MgIG11bHRpcGxlIGNvbmNhdGVuYXRlZAotICAgICAgIGNvbXByZXNzZWQgZmlsZXMuICAwLjFwbDIgIGNhbm5vdCBkbyB0aGlzOyAgaXQgIHdpbGwgIHN0b3AgCi0gICAgICAgYWZ0ZXIgIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyICB2ZXJzaW9ucyBwcmlvciB0byAxLjAuMiB1c2VkIDMy4oCQYml0IGludGVnZXJzCi0gICAgICAgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4gY29tcHJlc3NlZCAgZmlsZXMsICBzbyAgdGhleQotICAgICAgIGNvdWxkICBub3QgaGFuZGxlIGNvbXByZXNzZWQgZmlsZXMgbW9yZSB0aGFuIDUxMiBtZWdhYnl0ZXMKLSAgICAgICBsb25nLiAgVmVyc2lvbnMgMS4wLjIgYW5kIGFib3ZlIHVzZSA2NOKAkGJpdCAgaW50cyAgb24gIHNvbWUKLSAgICAgICBwbGF0Zm9ybXMgIHdoaWNoICBzdXBwb3J0IHRoZW0gKEdOVSBzdXBwb3J0ZWQgdGFyZ2V0cywgYW5kCi0gICAgICAgV2luZG93cykuICBUbyBlc3RhYmxpc2ggd2hldGhlciBvciAgbm90ICBiemlwMnJlY292ZXIgIHdhcwotICAgICAgIGJ1aWx0ICB3aXRoICBzdWNoICBhIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4KLSAgICAgICBJbiBhbnkgZXZlbnQgeW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbiAgdW5saW1pdGVkICB2ZXJzaW9uCi0gICAgICAgaWYgIHlvdSAgY2FuICByZWNvbXBpbGUgIGl0ICB3aXRoIE1heWJlVUludDY0IHNldCB0byBiZSBhbgotICAgICAgIHVuc2lnbmVkIDY04oCQYml0IGludGVnZXIuCi0KLQotCi0KLUEIQVUIVVQIVEgISE8IT1IIUgotICAgICAgIEp1bGlhbiBTZXdhcmQsIGpzZXdhcmRiemlwLm9yZy4KLQotICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcKLQotICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBfCGJfCHpfCGlfCHBfCDIgYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2zCrQotICAgICAgIGxvd2luZyAgcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUKLSAgICAgICBibG9jayBzb3J0aW5nIHRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAgKGFnYWluLCAgZm9yCi0gICAgICAgdGhlIEh1ZmZtYW4gY29kZXIpLCBQZXRlciBGZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kwq0KLSAgICAgICBpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsIF8IYl8Iel8IaV8IcF8ILCBhbmQgbWFueSByZWZpbmVtZW50cyksIGFuZAotICAgICAgIEFsaXN0YWlyICBNb2ZmYXQsICBSYWRmb3JkICBOZWFsICBhbmQgIElhbiBXaXR0ZW4gKGZvciB0aGUKLSAgICAgICBhcml0aG1ldGljICBjb2RlciAgaW4gIHRoZSAgb3JpZ2luYWwgIF8IYl8Iel8IaV8IcF8IKV8ILiAgIEkgIGFtICBtdWNoCi0gICAgICAgaW5kZWJ0ZWQgZm9yIHRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFuwq0KLSAgICAgICB1YWwgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIHBvaW50ZXJzIHRvIHNvdXJjZXMgIG9mCi0gICAgICAgZG9jdW1lbnRhdGlvbi4gIENocmlzdGlhbiB2b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vawotICAgICAgIGZvciBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLCBzbyBhcyB0byBzcGVlZCB1cCAgY29tcHJlc8KtCi0gICAgICAgc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8gaW1wcm92ZSB0aGUgd29yc3TigJBjYXNlCi0gICAgICAgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBEb25uYSBSb2JpbnNvbiBYTUxpc2VkIHRoZSBkb2N1wq0KLSAgICAgICBtZW50YXRpb24uICAgVGhlIGJ6KiBzY3JpcHRzIGFyZSBkZXJpdmVkIGZyb20gdGhvc2Ugb2YgR05VCi0gICAgICAgZ3ppcC4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkICB3aXRoICBwb3J0YWJpbGl0eQotICAgICAgIHByb2JsZW1zLCAgbGVudCAgbWFjaGluZXMsICBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKLSAgICAgICBoZWxwZnVsLgotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLmMgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwMi5jCmluZGV4IDg4ZTVmMDkuLmQ5NWQyODAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuYwpAQCAtNyw4ICs3LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTEyOCwxMiArMTI4LDEyIEBACiAjaWYgQlpfTENDV0lOMzIKICMgICBpbmNsdWRlIDxpby5oPgogIyAgIGluY2x1ZGUgPGZjbnRsLmg+Ci0jICAgaW5jbHVkZSA8c3lzXHN0YXQuaD4KKyMgICBpbmNsdWRlIDxzeXMvc3RhdC5oPgogCiAjICAgZGVmaW5lIE5PUkVUVVJOICAgICAgIC8qKi8KICMgICBkZWZpbmUgUEFUSF9TRVAgICAgICAgJ1xcJwotIyAgIGRlZmluZSBNWV9MU1RBVCAgICAgICBfc3RhdAotIyAgIGRlZmluZSBNWV9TVEFUICAgICAgICBfc3RhdAorIyAgIGRlZmluZSBNWV9MU1RBVCAgICAgICBfc3RhdGk2NAorIyAgIGRlZmluZSBNWV9TVEFUICAgICAgICBfc3RhdGk2NAogIyAgIGRlZmluZSBNWV9TX0lTUkVHKHgpICAoKHgpICYgX1NfSUZSRUcpCiAjICAgZGVmaW5lIE1ZX1NfSVNESVIoeCkgICgoeCkgJiBfU19JRkRJUikKIApAQCAtMzgwLDI3ICszODAsMjcgQEAKIAogICAgaWYgKHZlcmJvc2l0eSA+PSAxKSB7CiAgICAgICBpZiAobmJ5dGVzX2luX2xvMzIgPT0gMCAmJiBuYnl0ZXNfaW5faGkzMiA9PSAwKSB7Ci0gICAgIGZwcmludGYgKCBzdGRlcnIsICIgbm8gZGF0YSBjb21wcmVzc2VkLlxuIik7CisJIGZwcmludGYgKCBzdGRlcnIsICIgbm8gZGF0YSBjb21wcmVzc2VkLlxuIik7CiAgICAgICB9IGVsc2UgewotICAgICBDaGFyICAgYnVmX25pblszMl0sIGJ1Zl9ub3V0WzMyXTsKLSAgICAgVUludDY0IG5ieXRlc19pbiwgICBuYnl0ZXNfb3V0OwotICAgICBkb3VibGUgbmJ5dGVzX2luX2QsIG5ieXRlc19vdXRfZDsKLSAgICAgdUludDY0X2Zyb21fVUludDMycyAoICZuYnl0ZXNfaW4sIAotICAgICAgICAgICAgICAgICAgIG5ieXRlc19pbl9sbzMyLCBuYnl0ZXNfaW5faGkzMiApOwotICAgICB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19vdXQsIAotICAgICAgICAgICAgICAgICAgIG5ieXRlc19vdXRfbG8zMiwgbmJ5dGVzX291dF9oaTMyICk7Ci0gICAgIG5ieXRlc19pbl9kICA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX2luICk7Ci0gICAgIG5ieXRlc19vdXRfZCA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX291dCApOwotICAgICB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9uaW4sICZuYnl0ZXNfaW4gKTsKLSAgICAgdUludDY0X3RvQXNjaWkgKCBidWZfbm91dCwgJm5ieXRlc19vdXQgKTsKLSAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiU2LjNmOjEsICU2LjNmIGJpdHMvYnl0ZSwgIgotICAgICAgICAgICAiJTUuMmYlJSBzYXZlZCwgJXMgaW4sICVzIG91dC5cbiIsCi0gICAgICAgICAgIG5ieXRlc19pbl9kIC8gbmJ5dGVzX291dF9kLAotICAgICAgICAgICAoOC4wICogbmJ5dGVzX291dF9kKSAvIG5ieXRlc19pbl9kLAotICAgICAgICAgICAxMDAuMCAqICgxLjAgLSBuYnl0ZXNfb3V0X2QgLyBuYnl0ZXNfaW5fZCksCi0gICAgICAgICAgIGJ1Zl9uaW4sCi0gICAgICAgICAgIGJ1Zl9ub3V0Ci0gICAgICAgICApOworCSBDaGFyICAgYnVmX25pblszMl0sIGJ1Zl9ub3V0WzMyXTsKKwkgVUludDY0IG5ieXRlc19pbiwgICBuYnl0ZXNfb3V0OworCSBkb3VibGUgbmJ5dGVzX2luX2QsIG5ieXRlc19vdXRfZDsKKwkgdUludDY0X2Zyb21fVUludDMycyAoICZuYnl0ZXNfaW4sIAorCQkJICAgICAgIG5ieXRlc19pbl9sbzMyLCBuYnl0ZXNfaW5faGkzMiApOworCSB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19vdXQsIAorCQkJICAgICAgIG5ieXRlc19vdXRfbG8zMiwgbmJ5dGVzX291dF9oaTMyICk7CisJIG5ieXRlc19pbl9kICA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX2luICk7CisJIG5ieXRlc19vdXRfZCA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX291dCApOworCSB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9uaW4sICZuYnl0ZXNfaW4gKTsKKwkgdUludDY0X3RvQXNjaWkgKCBidWZfbm91dCwgJm5ieXRlc19vdXQgKTsKKwkgZnByaW50ZiAoIHN0ZGVyciwgIiU2LjNmOjEsICU2LjNmIGJpdHMvYnl0ZSwgIgorCQkgICAiJTUuMmYlJSBzYXZlZCwgJXMgaW4sICVzIG91dC5cbiIsCisJCSAgIG5ieXRlc19pbl9kIC8gbmJ5dGVzX291dF9kLAorCQkgICAoOC4wICogbmJ5dGVzX291dF9kKSAvIG5ieXRlc19pbl9kLAorCQkgICAxMDAuMCAqICgxLjAgLSBuYnl0ZXNfb3V0X2QgLyBuYnl0ZXNfaW5fZCksCisJCSAgIGJ1Zl9uaW4sCisJCSAgIGJ1Zl9ub3V0CisJCSApOwogICAgICAgfQogICAgfQogCkBAIC01MDUsMTEgKzUwNSwxMSBAQAogICAgaWYgKGZvcmNlT3ZlcndyaXRlKSB7CiAgICAgICByZXdpbmQoelN0cmVhbSk7CiAgICAgICB3aGlsZSAoVHJ1ZSkgewotICAgICAgICAgaWYgKG15ZmVvZih6U3RyZWFtKSkgYnJlYWs7Ci0gICAgICAgICBucmVhZCA9IGZyZWFkICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgNTAwMCwgelN0cmVhbSApOwotICAgICAgICAgaWYgKGZlcnJvcih6U3RyZWFtKSkgZ290byBlcnJoYW5kbGVyX2lvOwotICAgICAgICAgaWYgKG5yZWFkID4gMCkgZndyaXRlICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgbnJlYWQsIHN0cmVhbSApOwotICAgICAgICAgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CisgICAgICAJIGlmIChteWZlb2YoelN0cmVhbSkpIGJyZWFrOworICAgICAgCSBucmVhZCA9IGZyZWFkICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgNTAwMCwgelN0cmVhbSApOworICAgICAgCSBpZiAoZmVycm9yKHpTdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CisgICAgICAJIGlmIChucmVhZCA+IDApIGZ3cml0ZSAoIG9idWYsIHNpemVvZihVQ2hhciksIG5yZWFkLCBzdHJlYW0gKTsKKyAgICAgIAkgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CiAgICAgICB9CiAgICAgICBnb3RvIGNsb3Nlb2s7CiAgICB9CkBAIC01NTQsNyArNTU0LDcgQEAKIEJvb2wgdGVzdFN0cmVhbSAoIEZJTEUgKnpTdHJlYW0gKQogewogICAgQlpGSUxFKiBiemYgPSBOVUxMOwotICAgSW50MzIgICBiemVyciwgYnplcnJfZHVtbXksIHJldCwgbnJlYWQsIHN0cmVhbU5vLCBpOworICAgSW50MzIgICBiemVyciwgYnplcnJfZHVtbXksIHJldCwgc3RyZWFtTm8sIGk7CiAgICBVQ2hhciAgIG9idWZbNTAwMF07CiAgICBVQ2hhciAgIHVudXNlZFtCWl9NQVhfVU5VU0VEXTsKICAgIEludDMyICAgblVudXNlZDsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogICAgICAgc3RyZWFtTm8rKzsKIAogICAgICAgd2hpbGUgKGJ6ZXJyID09IEJaX09LKSB7Ci0gICAgICAgICBucmVhZCA9IEJaMl9ielJlYWQgKCAmYnplcnIsIGJ6Ziwgb2J1ZiwgNTAwMCApOworICAgICAgICAgQloyX2J6UmVhZCAoICZiemVyciwgYnpmLCBvYnVmLCA1MDAwICk7CiAgICAgICAgICBpZiAoYnplcnIgPT0gQlpfREFUQV9FUlJPUl9NQUdJQykgZ290byBlcnJoYW5kbGVyOwogICAgICAgfQogICAgICAgaWYgKGJ6ZXJyICE9IEJaX1NUUkVBTV9FTkQpIGdvdG8gZXJyaGFuZGxlcjsKQEAgLTc0OCw4ICs3NDgsOCBAQAogICAgZnByaW50ZiAoIHN0ZGVyciwKICAgICAgICAgICAgICAiXG4lczogUEFOSUMgLS0gaW50ZXJuYWwgY29uc2lzdGVuY3kgZXJyb3I6XG4iCiAgICAgICAgICAgICAgIlx0JXNcbiIKLSAgICAgICAgICAgICAiXHRUaGlzIGlzIGEgQlVHLiAgUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDpcbiIKLSAgICAgICAgICAgICAiXHRqc2V3YXJkQGJ6aXAub3JnXG4iLAorICAgICAgICAgICAgICJcdFRoaXMgaXMgYSBCVUcuICBQbGVhc2UgcmVwb3J0IGl0IHRvOlxuIgorICAgICAgICAgICAgICJcdGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnXG4iLAogICAgICAgICAgICAgIHByb2dOYW1lLCBzICk7CiAgICBzaG93RmlsZU5hbWVzKCk7CiAgICBjbGVhblVwQW5kRmFpbCggMyApOwpAQCAtNzc1LDkgKzc3NSw5IEBACiB7CiAgIGlmIChub2lzeSkgewogICAgIGZwcmludGYgKCBzdGRlcnIsCi0gICAgICAgICAgIlxuJXM6IENvbXByZXNzZWQgZmlsZSBlbmRzIHVuZXhwZWN0ZWRseTtcblx0IgotICAgICAgICAgICJwZXJoYXBzIGl0IGlzIGNvcnJ1cHRlZD8gICpQb3NzaWJsZSogcmVhc29uIGZvbGxvd3MuXG4iLAotICAgICAgICAgIHByb2dOYW1lICk7CisJICAgICAgIlxuJXM6IENvbXByZXNzZWQgZmlsZSBlbmRzIHVuZXhwZWN0ZWRseTtcblx0IgorCSAgICAgICJwZXJoYXBzIGl0IGlzIGNvcnJ1cHRlZD8gICpQb3NzaWJsZSogcmVhc29uIGZvbGxvd3MuXG4iLAorCSAgICAgIHByb2dOYW1lICk7CiAgICAgcGVycm9yICggcHJvZ05hbWUgKTsKICAgICBzaG93RmlsZU5hbWVzKCk7CiAgICAgY2FkdmlzZSgpOwpAQCAtODI5LDcgKzgyOSw3IEBACiAgICAgICAiICAgVGhlIHVzZXIncyBtYW51YWwsIFNlY3Rpb24gNC4zLCBoYXMgbW9yZSBpbmZvIG9uICgxKSBhbmQgKDIpLlxuIgogICAgICAgIiAgIFxuIgogICAgICAgIiAgIElmIHlvdSBzdXNwZWN0IHRoaXMgaXMgYSBidWcgaW4gYnppcDIsIG9yIGFyZSB1bnN1cmUgYWJvdXQgKDEpXG4iCi0gICAgICAiICAgb3IgKDIpLCBmZWVsIGZyZWUgdG8gcmVwb3J0IGl0IHRvIG1lIGF0OiBqc2V3YXJkQGJ6aXAub3JnLlxuIgorICAgICAgIiAgIG9yICgyKSwgZmVlbCBmcmVlIHRvIHJlcG9ydCBpdCB0bzogYnppcDItZGV2ZWxAc291cmNld2FyZS5vcmcuXG4iCiAgICAgICAiICAgU2VjdGlvbiA0LjMgb2YgdGhlIHVzZXIncyBtYW51YWwgZGVzY3JpYmVzIHRoZSBpbmZvIGEgdXNlZnVsXG4iCiAgICAgICAiICAgYnVnIHJlcG9ydCBzaG91bGQgaGF2ZS4gIElmIHRoZSBtYW51YWwgaXMgYXZhaWxhYmxlIG9uIHlvdXJcbiIKICAgICAgICIgICBzeXN0ZW0sIHBsZWFzZSB0cnkgYW5kIHJlYWQgaXQgYmVmb3JlIG1haWxpbmcgbWUuICBJZiB5b3UgZG9uJ3RcbiIKQEAgLTg1Miw3ICs4NTIsNyBAQAogICAgICAgIiAgIFRoZSB1c2VyJ3MgbWFudWFsLCBTZWN0aW9uIDQuMywgaGFzIG1vcmUgaW5mbyBvbiAoMikgYW5kICgzKS5cbiIKICAgICAgICIgICBcbiIKICAgICAgICIgICBJZiB5b3Ugc3VzcGVjdCB0aGlzIGlzIGEgYnVnIGluIGJ6aXAyLCBvciBhcmUgdW5zdXJlIGFib3V0ICgyKVxuIgotICAgICAgIiAgIG9yICgzKSwgZmVlbCBmcmVlIHRvIHJlcG9ydCBpdCB0byBtZSBhdDoganNld2FyZEBiemlwLm9yZy5cbiIKKyAgICAgICIgICBvciAoMyksIGZlZWwgZnJlZSB0byByZXBvcnQgaXQgdG86IGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnLlxuIgogICAgICAgIiAgIFNlY3Rpb24gNC4zIG9mIHRoZSB1c2VyJ3MgbWFudWFsIGRlc2NyaWJlcyB0aGUgaW5mbyBhIHVzZWZ1bFxuIgogICAgICAgIiAgIGJ1ZyByZXBvcnQgc2hvdWxkIGhhdmUuICBJZiB0aGUgbWFudWFsIGlzIGF2YWlsYWJsZSBvbiB5b3VyXG4iCiAgICAgICAiICAgc3lzdGVtLCBwbGVhc2UgdHJ5IGFuZCByZWFkIGl0IGJlZm9yZSBtYWlsaW5nIG1lLiAgSWYgeW91IGRvbid0XG4iCkBAIC0xMjAwLDEyICsxMjAwLDEyIEBACiAgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmIGZpbGVFeGlzdHMgKCBvdXROYW1lICkgKSB7CiAgICAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHsKLSAgICAgcmVtb3ZlKG91dE5hbWUpOworCSByZW1vdmUob3V0TmFtZSk7CiAgICAgICB9IGVsc2UgewotICAgICBmcHJpbnRmICggc3RkZXJyLCAiJXM6IE91dHB1dCBmaWxlICVzIGFscmVhZHkgZXhpc3RzLlxuIiwKLSAgICAgICAgICAgcHJvZ05hbWUsIG91dE5hbWUgKTsKLSAgICAgc2V0RXhpdCgxKTsKLSAgICAgcmV0dXJuOworCSBmcHJpbnRmICggc3RkZXJyLCAiJXM6IE91dHB1dCBmaWxlICVzIGFscmVhZHkgZXhpc3RzLlxuIiwKKwkJICAgcHJvZ05hbWUsIG91dE5hbWUgKTsKKwkgc2V0RXhpdCgxKTsKKwkgcmV0dXJuOwogICAgICAgfQogICAgfQogICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiAmJiAhZm9yY2VPdmVyd3JpdGUgJiYKQEAgLTEzODYsNyArMTM4Niw3IEBACiAgICB9ICAgCiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmIGZpbGVFeGlzdHMgKCBvdXROYW1lICkgKSB7CiAgICAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHsKLSAgICByZW1vdmUob3V0TmFtZSk7CisJcmVtb3ZlKG91dE5hbWUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiVzOiBPdXRwdXQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cy5cbiIsCiAgICAgICAgICAgICAgICAgICBwcm9nTmFtZSwgb3V0TmFtZSApOwpAQCAtMTYwNSwxMSArMTYwNSwxMSBAQAogICAgICJiemlwMiwgYSBibG9jay1zb3J0aW5nIGZpbGUgY29tcHJlc3Nvci4gICIKICAgICAiVmVyc2lvbiAlcy5cbiIKICAgICAiICAgXG4iCi0gICAgIiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IGJ5IEp1bGlhbiBTZXdhcmQuXG4iCisgICAgIiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5IEp1bGlhbiBTZXdhcmQuXG4iCiAgICAgIiAgIFxuIgogICAgICIgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuIgogICAgICIgICBpdCB1bmRlciB0aGUgdGVybXMgc2V0IG91dCBpbiB0aGUgTElDRU5TRSBmaWxlLCB3aGljaCBpcyBpbmNsdWRlZFxuIgotICAgICIgICBpbiB0aGUgYnppcDItMS4wLjUgc291cmNlIGRpc3RyaWJ1dGlvbi5cbiIKKyAgICAiICAgaW4gdGhlIGJ6aXAyIHNvdXJjZSBkaXN0cmlidXRpb24uXG4iCiAgICAgIiAgIFxuIgogICAgICIgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKICAgICAiICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKQEAgLTE5OTcsMTggKzE5OTcsMjAgQEAKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWNvZGUgPSBUcnVlOwogICAgICAgICAgZm9yIChhYSA9IGFyZ0xpc3Q7IGFhICE9IE5VTEw7IGFhID0gYWEtPmxpbmspIHsKLSAgICAgICAgaWYgKElTRkxBRygiLS0iKSkgeyBkZWNvZGUgPSBGYWxzZTsgY29udGludWU7IH0KKwkgICAgaWYgKElTRkxBRygiLS0iKSkgeyBkZWNvZGUgPSBGYWxzZTsgY29udGludWU7IH0KICAgICAgICAgICAgIGlmIChhYS0+bmFtZVswXSA9PSAnLScgJiYgZGVjb2RlKSBjb250aW51ZTsKICAgICAgICAgICAgIG51bUZpbGVzUHJvY2Vzc2VkKys7CiAgICAgICAgICAgICB0ZXN0ZiAoIGFhLT5uYW1lICk7Ci0gICAgIH0KKwkgfQogICAgICAgfQotICAgICAgaWYgKHRlc3RGYWlsc0V4aXN0ICYmIG5vaXN5KSB7Ci0gICAgICAgICBmcHJpbnRmICggc3RkZXJyLAotICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICJZb3UgY2FuIHVzZSB0aGUgYGJ6aXAycmVjb3ZlcicgcHJvZ3JhbSB0byBhdHRlbXB0IHRvIHJlY292ZXJcbiIKLSAgICAgICAgICAgImRhdGEgZnJvbSB1bmRhbWFnZWQgc2VjdGlvbnMgb2YgY29ycnVwdGVkIGZpbGVzLlxuXG4iCi0gICAgICAgICApOworICAgICAgaWYgKHRlc3RGYWlsc0V4aXN0KSB7CisJIGlmIChub2lzeSkgeworICAgICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICJZb3UgY2FuIHVzZSB0aGUgYGJ6aXAycmVjb3ZlcicgcHJvZ3JhbSB0byBhdHRlbXB0IHRvIHJlY292ZXJcbiIKKyAgICAgICAgICAgICAgICJkYXRhIGZyb20gdW5kYW1hZ2VkIHNlY3Rpb25zIG9mIGNvcnJ1cHRlZCBmaWxlcy5cblxuIgorICAgICAgICAgICAgKTsKKwkgfQogICAgICAgICAgc2V0RXhpdCgyKTsKICAgICAgICAgIGV4aXQoZXhpdFZhbHVlKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLnR4dCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiOWM3NC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzOTEgKzAsMCBAQAotCi1OQU1FCi0gICAgICAgYnppcDIsIGJ1bnppcDIgLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjQKLSAgICAgICBiemNhdCAtIGRlY29tcHJlc3NlcyBmaWxlcyB0byBzdGRvdXQKLSAgICAgICBiemlwMnJlY292ZXIgLSByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwotCi0KLVNZTk9QU0lTCi0gICAgICAgYnppcDIgWyAtY2Rma3FzdHZ6VkwxMjM0NTY3ODkgXSBbIGZpbGVuYW1lcyAuLi4gIF0KLSAgICAgICBidW56aXAyIFsgLWZrdnNWTCBdIFsgZmlsZW5hbWVzIC4uLiAgXQotICAgICAgIGJ6Y2F0IFsgLXMgXSBbIGZpbGVuYW1lcyAuLi4gIF0KLSAgICAgICBiemlwMnJlY292ZXIgZmlsZW5hbWUKLQotCi1ERVNDUklQVElPTgotICAgICAgIGJ6aXAyICBjb21wcmVzc2VzICBmaWxlcyAgdXNpbmcgIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2sKLSAgICAgICBzb3J0aW5nIHRleHQgY29tcHJlc3Npb24gYWxnb3JpdGhtLCAgYW5kICBIdWZmbWFuICBjb2RpbmcuCi0gICAgICAgQ29tcHJlc3Npb24gIGlzICBnZW5lcmFsbHkgIGNvbnNpZGVyYWJseSAgYmV0dGVyIHRoYW4gdGhhdAotICAgICAgIGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIExaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywKLSAgICAgICBhbmQgIGFwcHJvYWNoZXMgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUFBNIGZhbWlseSBvZiBzdGEtCi0gICAgICAgdGlzdGljYWwgY29tcHJlc3NvcnMuCi0KLSAgICAgICBUaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgIHRvCi0gICAgICAgdGhvc2Ugb2YgR05VIGd6aXAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLgotCi0gICAgICAgYnppcDIgIGV4cGVjdHMgIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRvIGFjY29tcGFueSB0aGUgY29tLQotICAgICAgIG1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcyByZXBsYWNlZCAgYnkgIGEgIGNvbXByZXNzZWQKLSAgICAgICB2ZXJzaW9uICBvZiAgaXRzZWxmLCAgd2l0aCAgdGhlICBuYW1lICJvcmlnaW5hbF9uYW1lLmJ6MiIuCi0gICAgICAgRWFjaCBjb21wcmVzc2VkIGZpbGUgaGFzIHRoZSBzYW1lIG1vZGlmaWNhdGlvbiBkYXRlLCAgcGVyLQotICAgICAgIG1pc3Npb25zLCBhbmQsIHdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZC0KLSAgICAgICBpbmcgb3JpZ2luYWwsIHNvIHRoYXQgdGhlc2UgcHJvcGVydGllcyAgY2FuICBiZSAgY29ycmVjdGx5Ci0gICAgICAgcmVzdG9yZWQgIGF0ICBkZWNvbXByZXNzaW9uICB0aW1lLiAgIEZpbGUgbmFtZSBoYW5kbGluZyBpcwotICAgICAgIG5haXZlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgcHJlc2Vydi0KLSAgICAgICBpbmcgIG9yaWdpbmFsIGZpbGUgbmFtZXMsIHBlcm1pc3Npb25zLCBvd25lcnNoaXBzIG9yIGRhdGVzCi0gICAgICAgaW4gZmlsZXN5c3RlbXMgd2hpY2ggbGFjayB0aGVzZSBjb25jZXB0cywgb3IgaGF2ZSAgc2VyaW91cwotICAgICAgIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzIE1TLURPUy4KLQotICAgICAgIGJ6aXAyICBhbmQgIGJ1bnppcDIgd2lsbCBieSBkZWZhdWx0IG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKLSAgICAgICBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5IHRoZSAtZiBmbGFnLgotCi0gICAgICAgSWYgbm8gZmlsZSBuYW1lcyAgYXJlICBzcGVjaWZpZWQsICBiemlwMiAgY29tcHJlc3NlcyAgZnJvbQotICAgICAgIHN0YW5kYXJkICBpbnB1dCAgdG8gIHN0YW5kYXJkIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgYnppcDIKLSAgICAgICB3aWxsIGRlY2xpbmUgdG8gd3JpdGUgY29tcHJlc3NlZCBvdXRwdXQgdG8gYSB0ZXJtaW5hbCwgIGFzCi0gICAgICAgdGhpcyAgd291bGQgIGJlICBlbnRpcmVseSAgaW5jb21wcmVoZW5zaWJsZSAgYW5kIHRoZXJlZm9yZQotICAgICAgIHBvaW50bGVzcy4KLQotICAgICAgIGJ1bnppcDIgKG9yIGJ6aXAyIC1kKSBkZWNvbXByZXNzZXMgIGFsbCAgc3BlY2lmaWVkICBmaWxlcy4KLSAgICAgICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5IGJ6aXAyIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kCi0gICAgICAgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpc3N1ZWQuICBiemlwMiAgYXR0ZW1wdHMgIHRvICBndWVzcwotICAgICAgIHRoZSAgZmlsZW5hbWUgIGZvciAgdGhlIGRlY29tcHJlc3NlZCBmaWxlIGZyb20gdGhhdCBvZiB0aGUKLSAgICAgICBjb21wcmVzc2VkIGZpbGUgYXMgZm9sbG93czoKLQotICAgICAgICAgICAgICBmaWxlbmFtZS5iejIgICAgYmVjb21lcyAgIGZpbGVuYW1lCi0gICAgICAgICAgICAgIGZpbGVuYW1lLmJ6ICAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6ICAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgYW55b3RoZXJuYW1lICAgIGJlY29tZXMgICBhbnlvdGhlcm5hbWUub3V0Ci0KLSAgICAgICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi0gICAgICAgLmJ6MiwgIC5ieiwgIC50YnoyIG9yIC50YnosIGJ6aXAyIGNvbXBsYWlucyB0aGF0IGl0IGNhbm5vdAotICAgICAgIGd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwKLSAgICAgICBuYW1lIHdpdGggLm91dCBhcHBlbmRlZC4KLQotICAgICAgIEFzICB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8gZmlsZW5hbWVzIGNhdXNlcyBkZWNvbS0KLSAgICAgICBwcmVzc2lvbiBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC4KLQotICAgICAgIGJ1bnppcDIgd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlIGNvbi0KLSAgICAgICBjYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzCi0gICAgICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLgotICAgICAgIEludGVncml0eSB0ZXN0aW5nICgtdCkgb2YgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMgaXMKLSAgICAgICBhbHNvIHN1cHBvcnRlZC4KLQotICAgICAgIFlvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSAgc3RhbmRhcmQKLSAgICAgICBvdXRwdXQgIGJ5IGdpdmluZyB0aGUgLWMgZmxhZy4gIE11bHRpcGxlIGZpbGVzIG1heSBiZSBjb20tCi0gICAgICAgcHJlc3NlZCBhbmQgZGVjb21wcmVzc2VkIGxpa2UgdGhpcy4gIFRoZSByZXN1bHRpbmcgb3V0cHV0cwotICAgICAgIGFyZSAgZmVkICBzZXF1ZW50aWFsbHkgdG8gc3Rkb3V0LiAgQ29tcHJlc3Npb24gb2YgbXVsdGlwbGUKLSAgICAgICBmaWxlcyBpbiB0aGlzIG1hbm5lciBnZW5lcmF0ZXMgYSBzdHJlYW0gY29udGFpbmluZyAgbXVsdGktCi0gICAgICAgcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotICAgICAgIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSAgYnkgIGJ6aXAyICB2ZXJzaW9uICAwLjkuMCAgb3IKLSAgICAgICBsYXRlci4gICBFYXJsaWVyICB2ZXJzaW9ucyBvZiBiemlwMiB3aWxsIHN0b3AgYWZ0ZXIgZGVjb20tCi0gICAgICAgcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotICAgICAgIGJ6Y2F0IChvciBiemlwMiAtZGMpIGRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkICBmaWxlcyAgdG8KLSAgICAgICB0aGUgc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgYnppcDIgIHdpbGwgIHJlYWQgYXJndW1lbnRzIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgIEJaSVAyIGFuZCBCWklQLCBpbiAgdGhhdCAgb3JkZXIsICBhbmQgIHdpbGwgIHByb2Nlc3MgIHRoZW0KLSAgICAgICBiZWZvcmUgIGFueSAgYXJndW1lbnRzICByZWFkICBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCi0gICAgICAgZ2l2ZXMgYSBjb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuCi0KLSAgICAgICBDb21wcmVzc2lvbiBpcyBhbHdheXMgcGVyZm9ybWVkLCBldmVuICBpZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSAgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcwotICAgICAgIHRoYW4gYWJvdXQgb25lIGh1bmRyZWQgYnl0ZXMgdGVuZCB0byBnZXQgbGFyZ2VyLCBzaW5jZSB0aGUKLSAgICAgICBjb21wcmVzc2lvbiAgbWVjaGFuaXNtICBoYXMgIGEgIGNvbnN0YW50ICBvdmVyaGVhZCAgaW4gdGhlCi0gICAgICAgcmVnaW9uIG9mIDUwIGJ5dGVzLiAgUmFuZG9tIGRhdGEgKGluY2x1ZGluZyB0aGUgb3V0cHV0ICBvZgotICAgICAgIG1vc3QgIGZpbGUgIGNvbXByZXNzb3JzKSAgaXMgIGNvZGVkIGF0IGFib3V0IDguMDUgYml0cyBwZXIKLSAgICAgICBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZCAwLjUlLgotCi0gICAgICAgQXMgYSBzZWxmLWNoZWNrIGZvciB5b3VyICBwcm90ZWN0aW9uLCAgYnppcDIgIHVzZXMgIDMyLWJpdAotICAgICAgIENSQ3MgIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiBhIGZpbGUKLSAgICAgICBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLiAgVGhpcyBndWFyZHMgYWdhaW5zdCBjb3JydXAtCi0gICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwotICAgICAgIGluIGJ6aXAyIChob3BlZnVsbHkgdmVyeSB1bmxpa2VseSkuICBUaGUgY2hhbmNlcyAgb2YgIGRhdGEKLSAgICAgICBjb3JydXB0aW9uICBnb2luZyAgdW5kZXRlY3RlZCAgaXMgIG1pY3Jvc2NvcGljLCAgYWJvdXQgb25lCi0gICAgICAgY2hhbmNlIGluIGZvdXIgYmlsbGlvbiBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEJlIGF3YXJlLAotICAgICAgIHRob3VnaCwgIHRoYXQgIHRoZSAgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQKLSAgICAgICBjYW4gb25seSB0ZWxsIHlvdSB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZy4gIEl0IGNhbid0ICBoZWxwCi0gICAgICAgeW91ICByZWNvdmVyICB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotICAgICAgIGJ6aXAycmVjb3ZlciB0byB0cnkgdG8gcmVjb3ZlciBkYXRhIGZyb20gZGFtYWdlZCBmaWxlcy4KLQotICAgICAgIFJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsICAxICBmb3IgIGVudmlyb25tZW50YWwKLSAgICAgICBwcm9ibGVtcyAgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksCi0gICAgICAgMiB0byBpbmRpY2F0ZSBhIGNvcnJ1cHQgY29tcHJlc3NlZCBmaWxlLCAzIGZvciBhbiBpbnRlcm5hbAotICAgICAgIGNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQgYnppcDIgdG8gcGFuaWMuCi0KLQotT1BUSU9OUwotICAgICAgIC1jIC0tc3Rkb3V0Ci0gICAgICAgICAgICAgIENvbXByZXNzIG9yIGRlY29tcHJlc3MgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgLWQgLS1kZWNvbXByZXNzCi0gICAgICAgICAgICAgIEZvcmNlICBkZWNvbXByZXNzaW9uLiAgYnppcDIsIGJ1bnppcDIgYW5kIGJ6Y2F0IGFyZQotICAgICAgICAgICAgICByZWFsbHkgdGhlIHNhbWUgcHJvZ3JhbSwgIGFuZCAgdGhlICBkZWNpc2lvbiAgYWJvdXQKLSAgICAgICAgICAgICAgd2hhdCAgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24gdGhlIGJhc2lzIG9mIHdoaWNoCi0gICAgICAgICAgICAgIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdCAgbWVjaGFuaXNtLAotICAgICAgICAgICAgICBhbmQgZm9yY2VzIGJ6aXAyIHRvIGRlY29tcHJlc3MuCi0KLSAgICAgICAteiAtLWNvbXByZXNzCi0gICAgICAgICAgICAgIFRoZSAgIGNvbXBsZW1lbnQgICB0byAgIC1kOiAgIGZvcmNlcyAgIGNvbXByZXNzaW9uLAotICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBpbnZvY2F0aW9uIG5hbWUuCi0KLSAgICAgICAtdCAtLXRlc3QKLSAgICAgICAgICAgICAgQ2hlY2sgaW50ZWdyaXR5IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSwgYnV0IGRvbid0Ci0gICAgICAgICAgICAgIGRlY29tcHJlc3MgIHRoZW0uICAgVGhpcyAgcmVhbGx5ICBwZXJmb3JtcyAgYSB0cmlhbAotICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgotCi0gICAgICAgLWYgLS1mb3JjZQotICAgICAgICAgICAgICBGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgIE5vcm1hbGx5LCAgYnppcDIKLSAgICAgICAgICAgICAgd2lsbCAgbm90ICBvdmVyd3JpdGUgIGV4aXN0aW5nICBvdXRwdXQgZmlsZXMuICBBbHNvCi0gICAgICAgICAgICAgIGZvcmNlcyBiemlwMiB0byBicmVhayBoYXJkIGxpbmtzIHRvIGZpbGVzLCB3aGljaCBpdAotICAgICAgICAgICAgICBvdGhlcndpc2Ugd291bGRuJ3QgZG8uCi0KLSAgICAgICAgICAgICAgYnppcDIgIG5vcm1hbGx5ICBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoCi0gICAgICAgICAgICAgIGRvbid0IGhhdmUgdGhlICBjb3JyZWN0ICBtYWdpYyAgaGVhZGVyICBieXRlcy4gICBJZgotICAgICAgICAgICAgICBmb3JjZWQgICgtZiksICBob3dldmVyLCAgaXQgIHdpbGwgIHBhc3MgIHN1Y2ggZmlsZXMKLSAgICAgICAgICAgICAgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIGd6aXAgIGJlaGF2ZXMuCi0KLSAgICAgICAtayAtLWtlZXAKLSAgICAgICAgICAgICAgS2VlcCAgKGRvbid0IGRlbGV0ZSkgaW5wdXQgZmlsZXMgZHVyaW5nIGNvbXByZXNzaW9uCi0gICAgICAgICAgICAgIG9yIGRlY29tcHJlc3Npb24uCi0KLSAgICAgICAtcyAtLXNtYWxsCi0gICAgICAgICAgICAgIFJlZHVjZSBtZW1vcnkgdXNhZ2UsIGZvciBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbgotICAgICAgICAgICAgICBhbmQgIHRlc3RpbmcuICAgRmlsZXMgIGFyZSAgZGVjb21wcmVzc2VkIGFuZCB0ZXN0ZWQKLSAgICAgICAgICAgICAgdXNpbmcgYSBtb2RpZmllZCBhbGdvcml0aG0gd2hpY2ggb25seSByZXF1aXJlcyAgMi41Ci0gICAgICAgICAgICAgIGJ5dGVzICBwZXIgIGJsb2NrIGJ5dGUuICBUaGlzIG1lYW5zIGFueSBmaWxlIGNhbiBiZQotICAgICAgICAgICAgICBkZWNvbXByZXNzZWQgaW4gMjMwMGsgb2YgbWVtb3J5LCAgYWxiZWl0ICBhdCAgYWJvdXQKLSAgICAgICAgICAgICAgaGFsZiB0aGUgbm9ybWFsIHNwZWVkLgotCi0gICAgICAgICAgICAgIER1cmluZyAgY29tcHJlc3Npb24sICAtcyAgc2VsZWN0cyAgYSAgYmxvY2sgc2l6ZSBvZgotICAgICAgICAgICAgICAyMDBrLCB3aGljaCBsaW1pdHMgbWVtb3J5IHVzZSB0byAgYXJvdW5kICB0aGUgIHNhbWUKLSAgICAgICAgICAgICAgZmlndXJlLCAgYXQgIHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uCi0gICAgICAgICAgICAgIEluIHNob3J0LCBpZiB5b3VyICBtYWNoaW5lICBpcyAgbG93ICBvbiAgbWVtb3J5ICAoOAotICAgICAgICAgICAgICBtZWdhYnl0ZXMgIG9yICBsZXNzKSwgIHVzZSAgLXMgZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCi0KLSAgICAgICAtcSAtLXF1aWV0Ci0gICAgICAgICAgICAgIFN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4gICBNZXNzYWdlcwotICAgICAgICAgICAgICBwZXJ0YWluaW5nICB0byBJL08gZXJyb3JzIGFuZCBvdGhlciBjcml0aWNhbCBldmVudHMKLSAgICAgICAgICAgICAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC4KLQotICAgICAgIC12IC0tdmVyYm9zZQotICAgICAgICAgICAgICBWZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yIGVhY2gKLSAgICAgICAgICAgICAgZmlsZSAgcHJvY2Vzc2VkLiAgIEZ1cnRoZXIgIC12J3MgIGluY3JlYXNlIHRoZSB2ZXItCi0gICAgICAgICAgICAgIGJvc2l0eSBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaAotICAgICAgICAgICAgICBpcyBwcmltYXJpbHkgb2YgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCi0KLSAgICAgICAtTCAtLWxpY2Vuc2UgLVYgLS12ZXJzaW9uCi0gICAgICAgICAgICAgIERpc3BsYXkgIHRoZSAgc29mdHdhcmUgIHZlcnNpb24sICBsaWNlbnNlIHRlcm1zIGFuZAotICAgICAgICAgICAgICBjb25kaXRpb25zLgotCi0gICAgICAgLTEgKG9yIC0tZmFzdCkgdG8gLTkgKG9yIC0tYmVzdCkKLSAgICAgICAgICAgICAgU2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLiAgOTAwICBrICB3aGVuCi0gICAgICAgICAgICAgIGNvbXByZXNzaW5nLiAgIEhhcyAgbm8gIGVmZmVjdCAgd2hlbiBkZWNvbXByZXNzaW5nLgotICAgICAgICAgICAgICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuICBUaGUgLS1mYXN0IGFuZCAtLWJlc3QKLSAgICAgICAgICAgICAgYWxpYXNlcyAgYXJlICBwcmltYXJpbHkgZm9yIEdOVSBnemlwIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIC0tZmFzdCBkb2Vzbid0IG1ha2UgdGhpbmdzICBzaWduaWZpLQotICAgICAgICAgICAgICBjYW50bHkgIGZhc3Rlci4gICBBbmQgIC0tYmVzdCAgbWVyZWx5ICBzZWxlY3RzICB0aGUKLSAgICAgICAgICAgICAgZGVmYXVsdCBiZWhhdmlvdXIuCi0KLSAgICAgICAtLSAgICAgVHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLCBldmVuCi0gICAgICAgICAgICAgIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFuLQotICAgICAgICAgICAgICBkbGUgZmlsZXMgd2l0aCBuYW1lcyBiZWdpbm5pbmcgIHdpdGggIGEgIGRhc2gsICBmb3IKLSAgICAgICAgICAgICAgZXhhbXBsZTogYnppcDIgLS0gLW15ZmlsZW5hbWUuCi0KLSAgICAgICAtLXJlcGV0aXRpdmUtZmFzdCAtLXJlcGV0aXRpdmUtYmVzdAotICAgICAgICAgICAgICBUaGVzZSAgZmxhZ3MgIGFyZSAgcmVkdW5kYW50ICBpbiB2ZXJzaW9ucyAwLjkuNSBhbmQKLSAgICAgICAgICAgICAgYWJvdmUuICBUaGV5IHByb3ZpZGVkIHNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciAgdGhlCi0gICAgICAgICAgICAgIGJlaGF2aW91ciAgb2YgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyLQotICAgICAgICAgICAgICBzaW9ucywgd2hpY2ggd2FzIHNvbWV0aW1lcyB1c2VmdWwuICAwLjkuNSBhbmQgYWJvdmUKLSAgICAgICAgICAgICAgaGF2ZSAgYW4gIGltcHJvdmVkICBhbGdvcml0aG0gIHdoaWNoICByZW5kZXJzIHRoZXNlCi0gICAgICAgICAgICAgIGZsYWdzIGlycmVsZXZhbnQuCi0KLQotTUVNT1JZIE1BTkFHRU1FTlQKLSAgICAgICBiemlwMiBjb21wcmVzc2VzIGxhcmdlIGZpbGVzIGluIGJsb2Nrcy4gICBUaGUgIGJsb2NrICBzaXplCi0gICAgICAgYWZmZWN0cyAgYm90aCAgdGhlICBjb21wcmVzc2lvbiAgcmF0aW8gIGFjaGlldmVkLCAgYW5kIHRoZQotICAgICAgIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KLSAgICAgICBUaGUgIGZsYWdzICAtMSAgdGhyb3VnaCAgLTkgIHNwZWNpZnkgIHRoZSBibG9jayBzaXplIHRvIGJlCi0gICAgICAgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KSAgcmVzcGVjLQotICAgICAgIHRpdmVseS4gICBBdCAgZGVjb21wcmVzc2lvbiAgdGltZSwgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IKLSAgICAgICBjb21wcmVzc2lvbiBpcyByZWFkIGZyb20gIHRoZSAgaGVhZGVyICBvZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSwgYW5kIGJ1bnppcDIgdGhlbiBhbGxvY2F0ZXMgaXRzZWxmIGp1c3QgZW5vdWdoIG1lbW9yeQotICAgICAgIHRvIGRlY29tcHJlc3MgdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUgIHN0b3JlZCAgaW4KLSAgICAgICBjb21wcmVzc2VkICBmaWxlcywgIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3MgLTEgdG8gLTkgYXJlCi0gICAgICAgaXJyZWxldmFudCB0byBhbmQgc28gaWdub3JlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4KLQotICAgICAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJlcXVpcmVtZW50cywgaW4gYnl0ZXMsICBjYW4KLSAgICAgICBiZSBlc3RpbWF0ZWQgYXM6Ci0KLSAgICAgICAgICAgICAgQ29tcHJlc3Npb246ICAgNDAwayArICggOCB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgICAgICAgIERlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMGsgKyAoIDIuNSB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgTGFyZ2VyICBibG9jayAgc2l6ZXMgIGdpdmUgIHJhcGlkbHkgIGRpbWluaXNoaW5nICBtYXJnaW5hbAotICAgICAgIHJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28KLSAgICAgICBvciAgdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluCi0gICAgICAgbWluZCB3aGVuIHVzaW5nIGJ6aXAyICBvbiAgc21hbGwgIG1hY2hpbmVzLiAgIEl0ICBpcyAgYWxzbwotICAgICAgIGltcG9ydGFudCAgdG8gIGFwcHJlY2lhdGUgIHRoYXQgIHRoZSAgZGVjb21wcmVzc2lvbiBtZW1vcnkKLSAgICAgICByZXF1aXJlbWVudCBpcyBzZXQgYXQgY29tcHJlc3Npb24gdGltZSBieSAgdGhlICBjaG9pY2UgIG9mCi0gICAgICAgYmxvY2sgc2l6ZS4KLQotICAgICAgIEZvciAgZmlsZXMgIGNvbXByZXNzZWQgIHdpdGggIHRoZSBkZWZhdWx0IDkwMGsgYmxvY2sgc2l6ZSwKLSAgICAgICBidW56aXAyIHdpbGwgcmVxdWlyZSBhYm91dCAzNzAwIGtieXRlcyB0byBkZWNvbXByZXNzLiAgIFRvCi0gICAgICAgc3VwcG9ydCBkZWNvbXByZXNzaW9uIG9mIGFueSBmaWxlIG9uIGEgNCBtZWdhYnl0ZSBtYWNoaW5lLAotICAgICAgIGJ1bnppcDIgaGFzIGFuIG9wdGlvbiB0byAgZGVjb21wcmVzcyAgdXNpbmcgIGFwcHJveGltYXRlbHkKLSAgICAgICBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXMtCi0gICAgICAgc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwgc28geW91IHNob3VsZCB1c2UgIHRoaXMgIG9wdGlvbgotICAgICAgIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50IGZsYWcgaXMgLXMuCi0KLSAgICAgICBJbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb24tCi0gICAgICAgc3RyYWludHMgIGFsbG93LCAgc2luY2UgIHRoYXQgIG1heGltaXNlcyAgdGhlICBjb21wcmVzc2lvbgotICAgICAgIGFjaGlldmVkLiAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dS0KLSAgICAgICBhbGx5IHVuYWZmZWN0ZWQgYnkgYmxvY2sgc2l6ZS4KLQotICAgICAgIEFub3RoZXIgc2lnbmlmaWNhbnQgcG9pbnQgYXBwbGllcyB0byBmaWxlcyB3aGljaCBmaXQgaW4gIGEKLSAgICAgICBzaW5nbGUgIGJsb2NrICAtLSAgdGhhdCAgbWVhbnMgIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyCi0gICAgICAgdXNpbmcgYSBsYXJnZSBibG9jayAgc2l6ZS4gICBUaGUgIGFtb3VudCAgb2YgIHJlYWwgIG1lbW9yeQotICAgICAgIHRvdWNoZWQgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBzaW5jZSB0aGUKLSAgICAgICBmaWxlIGlzIHNtYWxsZXIgdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nICBhCi0gICAgICAgZmlsZSAgMjAsMDAwICBieXRlcyAgbG9uZyAgd2l0aCB0aGUgZmxhZyAtOSB3aWxsIGNhdXNlIHRoZQotICAgICAgIGNvbXByZXNzb3IgdG8gYWxsb2NhdGUgYXJvdW5kIDc2MDBrIG9mICBtZW1vcnksICBidXQgIG9ubHkKLSAgICAgICB0b3VjaCA0MDBrICsgMjAwMDAgKiA4ID0gNTYwIGtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlCi0gICAgICAgZGVjb21wcmVzc29yIHdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0ICBvbmx5ICB0b3VjaCAgMTAwayAgKwotICAgICAgIDIwMDAwICogNCA9IDE4MCBrYnl0ZXMuCi0KLSAgICAgICBIZXJlICBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCi0gICAgICAgZm9yIGRpZmZlcmVudCBibG9jayBzaXplcy4gIEFsc28gIHJlY29yZGVkICBpcyAgdGhlICB0b3RhbAotICAgICAgIGNvbXByZXNzZWQgIHNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlcy0KLSAgICAgICBzaW9uIENvcnB1cyB0b3RhbGxpbmcgMywxNDEsNjIyIGJ5dGVzLiAgVGhpcyBjb2x1bW4gIGdpdmVzCi0gICAgICAgc29tZSAgZmVlbCAgZm9yICBob3cgIGNvbXByZXNzaW9uICB2YXJpZXMgd2l0aCBibG9jayBzaXplLgotICAgICAgIFRoZXNlIGZpZ3VyZXMgdGVuZCB0byB1bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2UgIG9mICBsYXJnZXIKLSAgICAgICBibG9jayAgc2l6ZXMgIGZvciAgbGFyZ2VyIGZpbGVzLCBzaW5jZSB0aGUgQ29ycHVzIGlzIGRvbWktCi0gICAgICAgbmF0ZWQgYnkgc21hbGxlciBmaWxlcy4KLQotICAgICAgICAgICAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotICAgICAgICAgICBGbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIC1zIHVzYWdlICAgICBTaXplCi0KLSAgICAgICAgICAgIC0xICAgICAgMTIwMGsgICAgICAgNTAwayAgICAgICAgIDM1MGsgICAgICA5MTQ3MDQKLSAgICAgICAgICAgIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAgICAgICAgICAgIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKLSAgICAgICAgICAgIC00ICAgICAgMzYwMGsgICAgICAxNzAwayAgICAgICAgMTEwMGsgICAgICA4NDY4OTkKLSAgICAgICAgICAgIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAgICAgICAgICAgIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKLSAgICAgICAgICAgIC03ICAgICAgNjEwMGsgICAgICAyOTAwayAgICAgICAgMTg1MGsgICAgICA4MzQwOTYKLSAgICAgICAgICAgIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAgICAgICAgICAgIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDIKLQotCi1SRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTCi0gICAgICAgYnppcDIgY29tcHJlc3NlcyBmaWxlcyBpbiBibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzICBsb25nLgotICAgICAgIEVhY2ggYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFucy0KLSAgICAgICBtaXNzaW9uIGVycm9yIGNhdXNlcyBhIG11bHRpLWJsb2NrICAuYnoyICBmaWxlICB0byAgYmVjb21lCi0gICAgICAgZGFtYWdlZCwgIGl0ICBtYXkgIGJlICBwb3NzaWJsZSAgdG8gIHJlY292ZXIgZGF0YSBmcm9tIHRoZQotICAgICAgIHVuZGFtYWdlZCBibG9ja3MgaW4gdGhlIGZpbGUuCi0KLSAgICAgICBUaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrICBpcyAgZGVsaW1pdGVkCi0gICAgICAgYnkgIGEgIDQ4LWJpdCBwYXR0ZXJuLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmaW5kIHRoZQotICAgICAgIGJsb2NrIGJvdW5kYXJpZXMgd2l0aCByZWFzb25hYmxlICBjZXJ0YWludHkuICAgRWFjaCAgYmxvY2sKLSAgICAgICBhbHNvICBjYXJyaWVzIGl0cyBvd24gMzItYml0IENSQywgc28gZGFtYWdlZCBibG9ja3MgY2FuIGJlCi0gICAgICAgZGlzdGluZ3Vpc2hlZCBmcm9tIHVuZGFtYWdlZCBvbmVzLgotCi0gICAgICAgYnppcDJyZWNvdmVyIGlzIGEgIHNpbXBsZSAgcHJvZ3JhbSAgd2hvc2UgIHB1cnBvc2UgIGlzICB0bwotICAgICAgIHNlYXJjaCAgZm9yIGJsb2NrcyBpbiAuYnoyIGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jayBvdXQKLSAgICAgICBpbnRvIGl0cyBvd24gLmJ6MiBmaWxlLiAgWW91IGNhbiB0aGVuIHVzZSBiemlwMiAtdCB0byB0ZXN0Ci0gICAgICAgdGhlIGludGVncml0eSBvZiB0aGUgcmVzdWx0aW5nIGZpbGVzLCBhbmQgZGVjb21wcmVzcyB0aG9zZQotICAgICAgIHdoaWNoIGFyZSB1bmRhbWFnZWQuCi0KLSAgICAgICBiemlwMnJlY292ZXIgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW0tCi0gICAgICAgYWdlZCAgICBmaWxlLCAgICBhbmQgICAgd3JpdGVzICAgIGEgICAgbnVtYmVyICAgb2YgICBmaWxlcwotICAgICAgICJyZWMwMDAwMWZpbGUuYnoyIiwgICJyZWMwMDAwMmZpbGUuYnoyIiwgIGV0YywgIGNvbnRhaW5pbmcKLSAgICAgICB0aGUgICBleHRyYWN0ZWQgICBibG9ja3MuICAgVGhlICAgb3V0cHV0ICAgZmlsZW5hbWVzICAgYXJlCi0gICAgICAgZGVzaWduZWQgIHNvICB0aGF0IHRoZSB1c2Ugb2Ygd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvLQotICAgICAgIGNlc3NpbmcgIC0tIGZvciBleGFtcGxlLCAiYnppcDIgLWRjICByZWMqZmlsZS5iejIgPiByZWNvdi0KLSAgICAgICBlcmVkX2RhdGEiIC0tIHByb2Nlc3NlcyB0aGUgZmlsZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCi0KLSAgICAgICBiemlwMnJlY292ZXIgc2hvdWxkIGJlIG9mIG1vc3QgdXNlIGRlYWxpbmcgd2l0aCBsYXJnZSAuYnoyCi0gICAgICAgZmlsZXMsICBhcyAgdGhlc2Ugd2lsbCBjb250YWluIG1hbnkgYmxvY2tzLiAgSXQgaXMgY2xlYXJseQotICAgICAgIGZ1dGlsZSB0byB1c2UgaXQgb24gZGFtYWdlZCBzaW5nbGUtYmxvY2sgIGZpbGVzLCAgc2luY2UgIGEKLSAgICAgICBkYW1hZ2VkICBibG9jayAgY2Fubm90ICBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW4tCi0gICAgICAgaW1pc2UgYW55IHBvdGVudGlhbCBkYXRhIGxvc3MgdGhyb3VnaCBtZWRpYSAgb3IgIHRyYW5zbWlzLQotICAgICAgIHNpb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKLSAgICAgICBibG9jayBzaXplLgotCi0KLVBFUkZPUk1BTkNFIE5PVEVTCi0gICAgICAgVGhlIHNvcnRpbmcgcGhhc2Ugb2YgY29tcHJlc3Npb24gZ2F0aGVycyB0b2dldGhlciAgc2ltaWxhcgotICAgICAgIHN0cmluZ3MgIGluICB0aGUgIGZpbGUuICBCZWNhdXNlIG9mIHRoaXMsIGZpbGVzIGNvbnRhaW5pbmcKLSAgICAgICB2ZXJ5IGxvbmcgcnVucyBvZiAgcmVwZWF0ZWQgIHN5bWJvbHMsICBsaWtlICAiYWFiYWFiYWFiYWFiCi0gICAgICAgLi4uIiAgIChyZXBlYXRlZCAgc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkgY29tcHJlc3MgbW9yZQotICAgICAgIHNsb3dseSB0aGFuIG5vcm1hbC4gIFZlcnNpb25zIDAuOS41IGFuZCAgYWJvdmUgIGZhcmUgIG11Y2gKLSAgICAgICBiZXR0ZXIgIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgaW4gdGhpcyByZXNwZWN0LiAgVGhlIHJhdGlvCi0gICAgICAgYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbgotICAgICAgIHRoZSAgcmVnaW9uICBvZiAgMTA6MS4gIEZvciBwcmV2aW91cyB2ZXJzaW9ucywgdGhpcyBmaWd1cmUKLSAgICAgICB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlIC12dnZ2IG9wdGlvbiB0byBtb24tCi0gICAgICAgaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgotCi0gICAgICAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZXNlIHBoZW5vbWVuYS4KLQotICAgICAgIGJ6aXAyICB1c3VhbGx5ICBhbGxvY2F0ZXMgIHNldmVyYWwgIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8KLSAgICAgICBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5ICByYW4tCi0gICAgICAgZG9tICBmYXNoaW9uLiAgIFRoaXMgbWVhbnMgdGhhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgY29tLQotICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKLSAgICAgICBzcGVlZCAgYXQgIHdoaWNoICB5b3VyICBtYWNoaW5lICBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCi0gICAgICAgQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvICByZWR1Y2UgIHRoZQotICAgICAgIG1pc3MgIHJhdGUgIGhhdmUgIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkKLSAgICAgICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUgYnppcDIgd2lsbCBwZXItCi0gICAgICAgZm9ybSBiZXN0IG9uIG1hY2hpbmVzIHdpdGggdmVyeSBsYXJnZSBjYWNoZXMuCi0KLQotQ0FWRUFUUwotICAgICAgIEkvTyAgZXJyb3IgIG1lc3NhZ2VzICBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLSAgICAgICBiemlwMiB0cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzICBhbmQgIGV4aXQgIGNsZWFubHksCi0gICAgICAgYnV0ICB0aGUgIGRldGFpbHMgIG9mICB3aGF0ICB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbQotICAgICAgIHJhdGhlciBtaXNsZWFkaW5nLgotCi0gICAgICAgVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMC40IG9mIGJ6aXAyLiAgQ29tLQotICAgICAgIHByZXNzZWQgIGRhdGEgY3JlYXRlZCBieSB0aGlzIHZlcnNpb24gaXMgZW50aXJlbHkgZm9yd2FyZHMKLSAgICAgICBhbmQgIGJhY2t3YXJkcyAgY29tcGF0aWJsZSAgd2l0aCAgIHRoZSAgIHByZXZpb3VzICAgcHVibGljCi0gICAgICAgcmVsZWFzZXMsICB2ZXJzaW9ucyAgMC4xcGwyLCAgMC45LjAsICAwLjkuNSwgMS4wLjAsIDEuMC4xLAotICAgICAgIDEuMC4yIGFuZCAxLjAuMywgYnV0IHdpdGggdGhlICBmb2xsb3dpbmcgIGV4Y2VwdGlvbjogMC45LjAKLSAgICAgICBhbmQgYWJvdmUgY2FuICBjb3JyZWN0bHkgZGVjb21wcmVzcyAgbXVsdGlwbGUgY29uY2F0ZW5hdGVkCi0gICAgICAgY29tcHJlc3NlZCBmaWxlcy4gIDAuMXBsMiAgY2Fubm90IGRvIHRoaXM7ICBpdCAgd2lsbCAgc3RvcAotICAgICAgIGFmdGVyICBkZWNvbXByZXNzaW5nIGp1c3QgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotICAgICAgIGJ6aXAycmVjb3ZlciAgdmVyc2lvbnMgcHJpb3IgdG8gMS4wLjIgdXNlZCAzMi1iaXQgaW50ZWdlcnMKLSAgICAgICB0byByZXByZXNlbnQgYml0IHBvc2l0aW9ucyBpbiBjb21wcmVzc2VkICBmaWxlcywgIHNvICB0aGV5Ci0gICAgICAgY291bGQgIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlIHRoYW4gNTEyIG1lZ2FieXRlcwotICAgICAgIGxvbmcuICBWZXJzaW9ucyAxLjAuMiBhbmQgYWJvdmUgdXNlIDY0LWJpdCAgaW50cyAgb24gIHNvbWUKLSAgICAgICBwbGF0Zm9ybXMgIHdoaWNoICBzdXBwb3J0IHRoZW0gKEdOVSBzdXBwb3J0ZWQgdGFyZ2V0cywgYW5kCi0gICAgICAgV2luZG93cykuICBUbyBlc3RhYmxpc2ggd2hldGhlciBvciAgbm90ICBiemlwMnJlY292ZXIgIHdhcwotICAgICAgIGJ1aWx0ICB3aXRoICBzdWNoICBhIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4KLSAgICAgICBJbiBhbnkgZXZlbnQgeW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbiAgdW5saW1pdGVkICB2ZXJzaW9uCi0gICAgICAgaWYgIHlvdSAgY2FuICByZWNvbXBpbGUgIGl0ICB3aXRoIE1heWJlVUludDY0IHNldCB0byBiZSBhbgotICAgICAgIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLgotCi0KLUFVVEhPUgotICAgICAgIEp1bGlhbiBTZXdhcmQsIGpzZXdhcmRiemlwLm9yZy4KLQotICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcKLQotICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBiemlwMiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbC0KLSAgICAgICBsb3dpbmcgIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlCi0gICAgICAgYmxvY2sgc29ydGluZyB0cmFuc2Zvcm1hdGlvbiksIERhdmlkIFdoZWVsZXIgIChhZ2FpbiwgIGZvcgotICAgICAgIHRoZSBIdWZmbWFuIGNvZGVyKSwgUGV0ZXIgRmVud2ljayAoZm9yIHRoZSBzdHJ1Y3R1cmVkIGNvZC0KLSAgICAgICBpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsIGJ6aXAsIGFuZCBtYW55IHJlZmluZW1lbnRzKSwgYW5kCi0gICAgICAgQWxpc3RhaXIgIE1vZmZhdCwgIFJhZGZvcmQgIE5lYWwgIGFuZCAgSWFuIFdpdHRlbiAoZm9yIHRoZQotICAgICAgIGFyaXRobWV0aWMgIGNvZGVyICBpbiAgdGhlICBvcmlnaW5hbCAgYnppcCkuICAgSSAgYW0gIG11Y2gKLSAgICAgICBpbmRlYnRlZCBmb3IgdGhlaXIgaGVscCwgc3VwcG9ydCBhbmQgYWR2aWNlLiAgU2VlIHRoZSBtYW4tCi0gICAgICAgdWFsIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzICBvZgotICAgICAgIGRvY3VtZW50YXRpb24uICBDaHJpc3RpYW4gdm9uIFJvcXVlcyBlbmNvdXJhZ2VkIG1lIHRvIGxvb2sKLSAgICAgICBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8gc3BlZWQgdXAgIGNvbXByZXMtCi0gICAgICAgc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8gaW1wcm92ZSB0aGUgd29yc3QtY2FzZQotICAgICAgIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlLiAgRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdS0KLSAgICAgICBtZW50YXRpb24uICAgVGhlIGJ6KiBzY3JpcHRzIGFyZSBkZXJpdmVkIGZyb20gdGhvc2Ugb2YgR05VCi0gICAgICAgZ3ppcC4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkICB3aXRoICBwb3J0YWJpbGl0eQotICAgICAgIHByb2JsZW1zLCAgbGVudCAgbWFjaGluZXMsICBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKLSAgICAgICBoZWxwZnVsLgotCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMnJlY292ZXIuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jCmluZGV4IDZlNDdiNjAuLmE4MTMxZTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jCkBAIC03LDggKzcsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMTgsNyArMTgsNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIFRoaXMgcHJvZ3JhbSBpcyBhIGNvbXBsZXRlIGhhY2sgYW5kIHNob3VsZCBiZSByZXdyaXR0ZW4gcHJvcGVybHkuCi0gICAgIEl0IGlzbid0IHZlcnkgY29tcGxpY2F0ZWQuICovCisJIEl0IGlzbid0IHZlcnkgY29tcGxpY2F0ZWQuICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC0zMDksMTEgKzMwOSwxMiBAQAogICAgVUludDMyICAgICAgYnVmZkhpLCBidWZmTG8sIGJsb2NrQ1JDOwogICAgQ2hhciogICAgICAgcDsKIAotICAgc3RyY3B5ICggcHJvZ05hbWUsIGFyZ3ZbMF0gKTsKKyAgIHN0cm5jcHkgKCBwcm9nTmFtZSwgYXJndlswXSwgQlpfTUFYX0ZJTEVOQU1FLTEpOworICAgcHJvZ05hbWVbQlpfTUFYX0ZJTEVOQU1FLTFdPSdcMCc7CiAgICBpbkZpbGVOYW1lWzBdID0gb3V0RmlsZU5hbWVbMF0gPSAwOwogCiAgICBmcHJpbnRmICggc3RkZXJyLCAKLSAgICAgICAgICAgICAiYnppcDJyZWNvdmVyIDEuMC41OiBleHRyYWN0cyBibG9ja3MgZnJvbSBkYW1hZ2VkIC5iejIgZmlsZXMuXG4iICk7CisgICAgICAgICAgICAgImJ6aXAycmVjb3ZlciAxLjAuODogZXh0cmFjdHMgYmxvY2tzIGZyb20gZGFtYWdlZCAuYnoyIGZpbGVzLlxuIiApOwogCiAgICBpZiAoYXJnYyAhPSAyKSB7CiAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiJXM6IHVzYWdlIGlzIGAlcyBkYW1hZ2VkX2ZpbGVfbmFtZScuXG4iLApAQCAtMzkzLDcgKzM5NCw3IEBACiAgICAgICAgICAgICBiRW5kW2N1cnJCbG9ja10gPSAwOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGN1cnJCbG9jayA+IDAgJiYKLSAgICAgICAgIChiRW5kW2N1cnJCbG9ja10gLSBiU3RhcnRbY3VyckJsb2NrXSkgPj0gMTMwKSB7CisJICAgICAoYkVuZFtjdXJyQmxvY2tdIC0gYlN0YXJ0W2N1cnJCbG9ja10pID49IDEzMCkgewogICAgICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiAgIGJsb2NrICVkIHJ1bnMgZnJvbSAiIE1heWJlVUludDY0X0ZNVCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gIiBNYXliZVVJbnQ2NF9GTVQgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICByYkN0cisxLCAgYlN0YXJ0W2N1cnJCbG9ja10sIGJFbmRbY3VyckJsb2NrXSApOwpAQCAtNDU3LDYgKzQ1OCw3IEBACiAgICAgICAgICAgICBic1B1dFVDaGFyICggYnNXciwgMHg1MCApOyBic1B1dFVDaGFyICggYnNXciwgMHg5MCApOwogICAgICAgICAgICAgYnNQdXRVSW50MzIgKCBic1dyLCBibG9ja0NSQyApOwogICAgICAgICAgICAgYnNDbG9zZSAoIGJzV3IgKTsKKyAgICAgICAgICAgIG91dEZpbGUgPSBOVUxMOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHdyQmxvY2sgPj0gcmJDdHIpIGJyZWFrOwogICAgICAgICAgd3JCbG9jaysrOwpAQCAtNDc0LDggKzQ3Niw4IEBACiAgICAgICAgICAgICBzcGxpdCA9IG91dEZpbGVOYW1lOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICsrc3BsaXQ7Ci0gICAgIH0KLSAgICAgLyogTm93IHNwbGl0IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGJhc2VuYW1lLiAqLworCSB9CisJIC8qIE5vdyBzcGxpdCBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBiYXNlbmFtZS4gKi8KICAgICAgICAgIG9mcyAgPSBzcGxpdCAtIG91dEZpbGVOYW1lOwogICAgICAgICAgc3ByaW50ZiAoc3BsaXQsICJyZWMlNWQiLCB3ckJsb2NrKzEpOwogICAgICAgICAgZm9yIChwID0gc3BsaXQ7ICpwICE9IDA7IHArKykgaWYgKCpwID09ICcgJykgKnAgPSAnMCc7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5jIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuYwppbmRleCBhZWVjZWYxLi4yMTc4NjU1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCkBAIC00MywxMiArNDMsMTIgQEAKICAgIGZwcmludGYoc3RkZXJyLCAKICAgICAgICJcblxuYnppcDIvbGliYnppcDI6IGludGVybmFsIGVycm9yIG51bWJlciAlZC5cbiIKICAgICAgICJUaGlzIGlzIGEgYnVnIGluIGJ6aXAyL2xpYmJ6aXAyLCAlcy5cbiIKLSAgICAgICJQbGVhc2UgcmVwb3J0IGl0IHRvIG1lIGF0OiBqc2V3YXJkQGJ6aXAub3JnLiAgSWYgdGhpcyBoYXBwZW5lZFxuIgorICAgICAgIlBsZWFzZSByZXBvcnQgaXQgdG86IGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnLiAgSWYgdGhpcyBoYXBwZW5lZFxuIgogICAgICAgIndoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYVxuIgogICAgICAgImNvbXBvbmVudCwgeW91IHNob3VsZCBhbHNvIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgYXV0aG9yKHMpXG4iCiAgICAgICAib2YgdGhhdCBwcm9ncmFtLiAgUGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHJlcG9ydCB0aGlzIGJ1ZztcbiIKICAgICAgICJ0aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXJcbiIKLSAgICAgICJxdWFsaXR5IHNvZnR3YXJlLiAgVGhhbmtzLiAgSnVsaWFuIFNld2FyZCwgMTAgRGVjZW1iZXIgMjAwNy5cblxuIiwKKyAgICAgICJxdWFsaXR5IHNvZnR3YXJlLiAgVGhhbmtzLlxuXG4iLAogICAgICAgZXJyY29kZSwKICAgICAgIEJaMl9iemxpYlZlcnNpb24oKQogICAgKTsKQEAgLTEwMiw3ICsxMDIsNiBAQAogdm9pZCogZGVmYXVsdF9iemFsbG9jICggdm9pZCogb3BhcXVlLCBJbnQzMiBpdGVtcywgSW50MzIgc2l6ZSApCiB7CiAgICB2b2lkKiB2ID0gbWFsbG9jICggaXRlbXMgKiBzaXplICk7Ci0gICh2b2lkKW9wYXF1ZTsKICAgIHJldHVybiB2OwogfQogCkBAIC0xMTAsNyArMTA5LDYgQEAKIHZvaWQgZGVmYXVsdF9iemZyZWUgKCB2b2lkKiBvcGFxdWUsIHZvaWQqIGFkZHIgKQogewogICAgaWYgKGFkZHIgIT0gTlVMTCkgZnJlZSAoIGFkZHIgKTsKLSAgKHZvaWQpb3BhcXVlOwogfQogCiAKQEAgLTQyNyw3ICs0MjUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzID8gQlpfUlVOX09LIDogQlpfUEFSQU1fRVJST1I7CiAgICAgICAgICB9IAogICAgICAgICAgZWxzZQotICAgICBpZiAoYWN0aW9uID09IEJaX0ZMVVNIKSB7CisJIGlmIChhY3Rpb24gPT0gQlpfRkxVU0gpIHsKICAgICAgICAgICAgIHMtPmF2YWlsX2luX2V4cGVjdCA9IHN0cm0tPmF2YWlsX2luOwogICAgICAgICAgICAgcy0+bW9kZSA9IEJaX01fRkxVU0hJTkc7CiAgICAgICAgICAgICBnb3RvIHByZXN3aXRjaDsKQEAgLTE1MDcsNyArMTUwNSw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgQlpfQVBJKEJaMl9iemZsdXNoKSAoQlpGSUxFICpiKQogewotICAodm9pZCkgYjsKICAgIC8qIGRvIG5vdGhpbmcgbm93Li4uICovCiAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmggYi9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5oCmluZGV4IGM1Yjc1ZDYuLjg5NjZhNmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmgKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuaApAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliX3ByaXZhdGUuaAppbmRleCAwMmE2NjdmLi5iYTBmNTg5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemxpYl9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWJfcHJpdmF0ZS5oCkBAIC04LDggKzgsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMzIsMjggKzMyLDEzIEBACiAKICNpbmNsdWRlICJiemxpYi5oIgogCi0KLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgcHJhZ21hIHdhcm4gLTgwMDQgLyogQXNzaWduZWQgdmFsdWUgbmV2ZXIgdXNlZC4gICovCi0jIHByYWdtYSB3YXJuIC04MDA4IC8qIENvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZS9mYWxzZS4gICovCi0jIHByYWdtYSB3YXJuIC04MDY2IC8qIFVucmVhY2hhYmxlIGNvZGUuICAqLwotIyBwcmFnbWEgd2FybiAtODA1NyAvKiBVbnVzZWQgcGFyYW1ldGVyLiAgKi8KLSNlbmRpZgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0vKiAnaW50ZWdyYWwgc2l6ZSBtaXNtYXRjaCBpbiBhcmd1bWVudDsgY29udmVyc2lvbiBzdXBwbGllZCAqLwotIyBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDQpCi0vKiBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ29mZl90JywgcG9zc2libGUgbG9zcyBvZiBkYXRhICovCi0jIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI2NykKLS8qIHdhcm5pbmcgQzQxMjc6IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQqLwotIyBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMjcpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSMgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjYXN0LWFsaWduIgorIyBwcmFnbWEgd2FybmluZyhwdXNoLDEpCiAjZW5kaWYKIAogLyotLSBHZW5lcmFsIHN0dWZmLiAtLSovCiAKLSNkZWZpbmUgQlpfVkVSU0lPTiAgIjEuMC41LCAxMC1EZWMtMjAwNyIKKyNkZWZpbmUgQlpfVkVSU0lPTiAgIjEuMC44LCAxMy1KdWwtMjAxOSIKIAogdHlwZWRlZiBjaGFyICAgICAgICAgICAgQ2hhcjsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgIEJvb2w7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUgYi9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjFkZTYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgQnptb3JlIHdyYXBwZWQgZm9yIGJ6aXAyLCAKLSMgYWRhcHRlZCBmcm9tIHptb3JlIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPiBmb3IgRGViaWFuIEdOVS9MaW51eC4KLQotUEFUSD0iL3Vzci9iaW46JFBBVEgiOyBleHBvcnQgUEFUSAotCi1wcm9nPWBlY2hvICQwIHwgc2VkICdzfC4qL3x8J2AKLWNhc2UgIiRwcm9nIiBpbgotICAgICpsZXNzKSAgbW9yZT1sZXNzICAgOzsKLSAgICAqKSAgbW9yZT1tb3JlICAgICAgIDs7Ci1lc2FjCi0KLWlmIHRlc3QgImBlY2hvIC1uIGFgIiA9ICItbiBhIjsgdGhlbgotICAjIGxvb2tzIGxpa2UgYSBTeXNWIHN5c3RlbToKLSAgbjE9Jyc7IG4yPSdcYycKLWVsc2UKLSAgbjE9Jy1uJzsgbjI9JycKLWZpCi1vbGR0dHk9YHN0dHkgLWcgMj4vZGV2L251bGxgCi1pZiBzdHR5IC1jYnJlYWsgMj4vZGV2L251bGw7IHRoZW4KLSAgY2I9J2NicmVhayc7IG5jYj0nLWNicmVhaycKLWVsc2UKLSAgIyAnc3R0eSBtaW4gMScgcmVzZXRzIGVvZiB0byBeYSBvbiBib3RoIFN1bk9TIGFuZCBTeXNWIQotICBjYj0nbWluIDEgLWljYW5vbic7IG5jYj0naWNhbm9uIGVvZiBeZCcKLWZpCi1pZiB0ZXN0ICQ/IC1lcSAwIC1hIC1uICIkb2xkdHR5IjsgdGhlbgotICAgdHJhcCAnc3R0eSAkb2xkdHR5IDI+L2Rldi9udWxsOyBleGl0JyAwIDIgMyA1IDEwIDEzIDE1Ci1lbHNlCi0gICB0cmFwICdzdHR5ICRuY2IgZWNobyAyPi9kZXYvbnVsbDsgZXhpdCcgMCAyIDMgNSAxMCAxMyAxNQotZmkKLQotaWYgdGVzdCAkIyA9IDA7IHRoZW4KLSAgICBpZiB0ZXN0IC10IDA7IHRoZW4KLSAgICBlY2hvIHVzYWdlOiAkcHJvZyBmaWxlcy4uLgotICAgIGVsc2UKLSAgICBiemlwMiAtY2RmcSB8IGV2YWwgJG1vcmUKLSAgICBmaQotZWxzZQotICAgIEZJUlNUPTEKLSAgICBmb3IgRklMRQotICAgIGRvCi0gICAgaWYgdGVzdCAkRklSU1QgLWVxIDA7IHRoZW4KLSAgICAgICAgZWNobyAkbjEgIi0tTW9yZS0tKE5leHQgZmlsZTogJEZJTEUpJG4yIgotICAgICAgICBzdHR5ICRjYiAtZWNobyAyPi9kZXYvbnVsbAotICAgICAgICBBTlM9YGRkIGJzPTEgY291bnQ9MSAyPi9kZXYvbnVsbGAgCi0gICAgICAgIHN0dHkgJG5jYiBlY2hvIDI+L2Rldi9udWxsCi0gICAgICAgIGVjaG8gIiAiCi0gICAgICAgIGlmIHRlc3QgIiRBTlMiID0gJ2UnIC1vICIkQU5TIiA9ICdxJzsgdGhlbgotICAgICAgICAgICAgZXhpdAotICAgICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAiJEFOUyIgIT0gJ3MnOyB0aGVuCi0gICAgICAgIGVjaG8gIi0tLS0tLT4gJEZJTEUgPC0tLS0tLSIKLSAgICAgICAgYnppcDIgLWNkZnEgIiRGSUxFIiB8IGV2YWwgJG1vcmUKLSAgICBmaQotICAgIGlmIHRlc3QgLXQ7IHRoZW4KLSAgICAgICAgRklSU1Q9MAotICAgIGZpCi0gICAgZG9uZQotZmkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bW9yZS4xIGIvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlLjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ODY4ZWQuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlLjEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLlwiU2hhbWVsZXNzbHkgY29waWVkIGZyb20gem1vcmUuMSBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4KLS5cImZvciBEZWJpYW4gR05VL0xpbnV4Ci0uVEggQlpNT1JFIDEKLS5TSCBOQU1FCi1iem1vcmUsIGJ6bGVzcyBcLSBmaWxlIHBlcnVzYWwgZmlsdGVyIGZvciBjcnQgdmlld2luZyBvZiBiemlwMiBjb21wcmVzc2VkIHRleHQKLS5TSCBTWU5PUFNJUwotLkIgYnptb3JlCi1bIG5hbWUgLi4uICBdCi0uYnIKLS5CIGJ6bGVzcwotWyBuYW1lIC4uLiAgXQotLlNIIE5PVEUKLUluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24sCi0uSSBiemxlc3MKLWFuZAotLkkgbGVzcwotY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGgKLS5JIGJ6bW9yZQotYW5kCi0uSSBtb3JlLgotLlNIIERFU0NSSVBUSU9OCi0uSSAgQnptb3JlCi1pcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZXhhbWluYXRpb24gb2YgY29tcHJlc3NlZCBvciBwbGFpbiB0ZXh0IGZpbGVzCi1vbmUgc2NyZWVuZnVsIGF0IGEgdGltZSBvbiBhIHNvZnQtY29weSB0ZXJtaW5hbC4KLS5JIGJ6bW9yZQotd29ya3Mgb24gZmlsZXMgY29tcHJlc3NlZCB3aXRoCi0uSSBiemlwMgotYW5kIGFsc28gb24gdW5jb21wcmVzc2VkIGZpbGVzLgotSWYgYSBmaWxlIGRvZXMgbm90IGV4aXN0LAotLkkgYnptb3JlCi1sb29rcyBmb3IgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSAuYnoyIHN1ZmZpeC4KLS5QUAotLkkgQnptb3JlCi1ub3JtYWxseSBwYXVzZXMgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwsIHByaW50aW5nIC0tTW9yZS0tCi1hdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uCi1JZiB0aGUgdXNlciB0aGVuIHR5cGVzIGEgY2FycmlhZ2UgcmV0dXJuLCBvbmUgbW9yZSBsaW5lIGlzIGRpc3BsYXllZC4KLUlmIHRoZSB1c2VyIGhpdHMgYSBzcGFjZSwKLWFub3RoZXIgc2NyZWVuZnVsIGlzIGRpc3BsYXllZC4gIE90aGVyIHBvc3NpYmlsaXRpZXMgYXJlIGVudW1lcmF0ZWQgbGF0ZXIuCi0uUFAKLS5JIEJ6bW9yZQotbG9va3MgaW4gdGhlIGZpbGUKLS5JIC9ldGMvdGVybWNhcAotdG8gZGV0ZXJtaW5lIHRlcm1pbmFsIGNoYXJhY3RlcmlzdGljcywKLWFuZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgd2luZG93IHNpemUuCi1PbiBhIHRlcm1pbmFsIGNhcGFibGUgb2YgZGlzcGxheWluZyAyNCBsaW5lcywKLXRoZSBkZWZhdWx0IHdpbmRvdyBzaXplIGlzIDIyIGxpbmVzLgotT3RoZXIgc2VxdWVuY2VzIHdoaWNoIG1heSBiZSB0eXBlZCB3aGVuCi0uSSBiem1vcmUKLXBhdXNlcywgYW5kIHRoZWlyIGVmZmVjdHMsIGFyZSBhcyBmb2xsb3dzIChcZklpXGZQIGlzIGFuIG9wdGlvbmFsIGludGVnZXIKLWFyZ3VtZW50LCBkZWZhdWx0aW5nIHRvIDEpIDoKLS5QUAotLklQIFxmSWlcfFxmUDxzcGFjZT4KLWRpc3BsYXkKLS5JIGkKLW1vcmUgbGluZXMsIChvciBhbm90aGVyIHNjcmVlbmZ1bCBpZiBubyBhcmd1bWVudCBpcyBnaXZlbikKLS5QUAotLklQIF5ECi1kaXNwbGF5IDExIG1vcmUgbGluZXMgKGEgYGBzY3JvbGwnJykuCi1JZgotLkkgaQotaXMgZ2l2ZW4sIHRoZW4gdGhlIHNjcm9sbCBzaXplIGlzIHNldCB0byBcZklpXHxcZlAuCi0uUFAKLS5JUCBkCi1zYW1lIGFzIF5EIChjb250cm9sLUQpCi0uUFAKLS5JUCBcZklpXHxcZlB6Ci1zYW1lIGFzIHR5cGluZyBhIHNwYWNlIGV4Y2VwdCB0aGF0IFxmSWlcfFxmUCwgaWYgcHJlc2VudCwgYmVjb21lcyB0aGUgbmV3Ci13aW5kb3cgc2l6ZS4gIE5vdGUgdGhhdCB0aGUgd2luZG93IHNpemUgcmV2ZXJ0cyBiYWNrIHRvIHRoZSBkZWZhdWx0IGF0IHRoZQotZW5kIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0uUFAKLS5JUCBcZklpXHxcZlBzCi1za2lwIFxmSWlcfFxmUCBsaW5lcyBhbmQgcHJpbnQgYSBzY3JlZW5mdWwgb2YgbGluZXMKLS5QUAotLklQIFxmSWlcfFxmUGYKLXNraXAgXGZJaVxmUCBzY3JlZW5mdWxzIGFuZCBwcmludCBhIHNjcmVlbmZ1bCBvZiBsaW5lcwotLlBQCi0uSVAgInEgb3IgUSIKLXF1aXQgcmVhZGluZyB0aGUgY3VycmVudCBmaWxlOyBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KQotLlBQCi0uSVAgImUgb3IgcSIKLVdoZW4gdGhlIHByb21wdCAtLU1vcmUtLShOZXh0IGZpbGU6IAotLklSIGZpbGUgKQotaXMgcHJpbnRlZCwgdGhpcyBjb21tYW5kIGNhdXNlcyBiem1vcmUgdG8gZXhpdC4KLS5QUAotLklQIHMKLVdoZW4gdGhlIHByb21wdCAtLU1vcmUtLShOZXh0IGZpbGU6IAotLklSIGZpbGUgKQotaXMgcHJpbnRlZCwgdGhpcyBjb21tYW5kIGNhdXNlcyBiem1vcmUgdG8gc2tpcCB0aGUgbmV4dCBmaWxlIGFuZCBjb250aW51ZS4KLS5QUCAKLS5JUCA9Ci1EaXNwbGF5IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotLlBQCi0uSVAgXGZJaVx8XGZQL2V4cHIKLXNlYXJjaCBmb3IgdGhlIFxmSWlcfFxmUC10aCBvY2N1cnJlbmNlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gXGZJZXhwci5cZlAKLUlmIHRoZSBwYXR0ZXJuIGlzIG5vdCBmb3VuZCwKLS5JIGJ6bW9yZQotZ29lcyBvbiB0byB0aGUgbmV4dCBmaWxlIChpZiBhbnkpLgotT3RoZXJ3aXNlLCBhIHNjcmVlbmZ1bCBpcyBkaXNwbGF5ZWQsIHN0YXJ0aW5nIHR3byBsaW5lcyBiZWZvcmUgdGhlIHBsYWNlCi13aGVyZSB0aGUgZXhwcmVzc2lvbiB3YXMgZm91bmQuCi1UaGUgdXNlcidzIGVyYXNlIGFuZCBraWxsIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQgdG8gZWRpdCB0aGUgcmVndWxhcgotZXhwcmVzc2lvbi4KLUVyYXNpbmcgYmFjayBwYXN0IHRoZSBmaXJzdCBjb2x1bW4gY2FuY2VscyB0aGUgc2VhcmNoIGNvbW1hbmQuCi0uUFAKLS5JUCBcZklpXHxcZlBuCi1zZWFyY2ggZm9yIHRoZSBcZklpXHxcZlAtdGggb2NjdXJyZW5jZSBvZiB0aGUgbGFzdCByZWd1bGFyIGV4cHJlc3Npb24gZW50ZXJlZC4KLS5QUAotLklQICFjb21tYW5kCi1pbnZva2UgYSBzaGVsbCB3aXRoIFxmSWNvbW1hbmRcfFxmUC4gCi1UaGUgY2hhcmFjdGVyIGAhJyBpbiAiY29tbWFuZCIgYXJlIHJlcGxhY2VkIHdpdGggdGhlCi1wcmV2aW91cyBzaGVsbCBjb21tYW5kLiAgVGhlIHNlcXVlbmNlICJcXCEiIGlzIHJlcGxhY2VkIGJ5ICIhIi4KLS5QUAotLklQICI6cSBvciA6USIKLXF1aXQgcmVhZGluZyB0aGUgY3VycmVudCBmaWxlOyBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KQotKHNhbWUgYXMgcSBvciBRKS4KLS5QUAotLklQIC4KLShkb3QpIHJlcGVhdCB0aGUgcHJldmlvdXMgY29tbWFuZC4KLS5QUAotVGhlIGNvbW1hbmRzIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LCBpLmUuLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvCi10eXBlIGEgY2FycmlhZ2UgcmV0dXJuLgotVXAgdG8gdGhlIHRpbWUgd2hlbiB0aGUgY29tbWFuZCBjaGFyYWN0ZXIgaXRzZWxmIGlzIGdpdmVuLAotdGhlIHVzZXIgbWF5IGhpdCB0aGUgbGluZSBraWxsIGNoYXJhY3RlciB0byBjYW5jZWwgdGhlIG51bWVyaWNhbAotYXJndW1lbnQgYmVpbmcgZm9ybWVkLgotSW4gYWRkaXRpb24sIHRoZSB1c2VyIG1heSBoaXQgdGhlIGVyYXNlIGNoYXJhY3RlciB0byByZWRpc3BsYXkgdGhlCi0tLU1vcmUtLSBtZXNzYWdlLgotLlBQCi1BdCBhbnkgdGltZSB3aGVuIG91dHB1dCBpcyBiZWluZyBzZW50IHRvIHRoZSB0ZXJtaW5hbCwgdGhlIHVzZXIgY2FuCi1oaXQgdGhlIHF1aXQga2V5IChub3JtYWxseSBjb250cm9sXC1cXCkuCi0uSSBCem1vcmUKLXdpbGwgc3RvcCBzZW5kaW5nIG91dHB1dCwgYW5kIHdpbGwgZGlzcGxheSB0aGUgdXN1YWwgLS1Nb3JlLS0KLXByb21wdC4KLVRoZSB1c2VyIG1heSB0aGVuIGVudGVyIG9uZSBvZiB0aGUgYWJvdmUgY29tbWFuZHMgaW4gdGhlIG5vcm1hbCBtYW5uZXIuCi1VbmZvcnR1bmF0ZWx5LCBzb21lIG91dHB1dCBpcyBsb3N0IHdoZW4gdGhpcyBpcyBkb25lLCBkdWUgdG8gdGhlCi1mYWN0IHRoYXQgYW55IGNoYXJhY3RlcnMgd2FpdGluZyBpbiB0aGUgdGVybWluYWwncyBvdXRwdXQgcXVldWUKLWFyZSBmbHVzaGVkIHdoZW4gdGhlIHF1aXQgc2lnbmFsIG9jY3Vycy4KLS5QUAotVGhlIHRlcm1pbmFsIGlzIHNldCB0bwotLkkgbm9lY2hvCi1tb2RlIGJ5IHRoaXMgcHJvZ3JhbSBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIGNvbnRpbnVvdXMuCi1XaGF0IHlvdSB0eXBlIHdpbGwgdGh1cyBub3Qgc2hvdyBvbiB5b3VyIHRlcm1pbmFsLCBleGNlcHQgZm9yIHRoZSAvIGFuZCAhCi1jb21tYW5kcy4KLS5QUAotSWYgdGhlIHN0YW5kYXJkIG91dHB1dCBpcyBub3QgYSB0ZWxldHlwZSwgdGhlbgotLkkgYnptb3JlCi1hY3RzIGp1c3QgbGlrZQotLkkgYnpjYXQsCi1leGNlcHQgdGhhdCBhIGhlYWRlciBpcyBwcmludGVkIGJlZm9yZSBlYWNoIGZpbGUuCi0uU0ggRklMRVMKLS5EVAotL2V0Yy90ZXJtY2FwICAgICAgICBUZXJtaW5hbCBkYXRhIGJhc2UKLS5TSCAiU0VFIEFMU08iCi1tb3JlKDEpLCBsZXNzKDEpLCBiemlwMigxKSwgYnpkaWZmKDEpLCBiemdyZXAoMSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2NvbXByZXNzLmMgYi9VdGlsaXRpZXMvY21iemlwMi9jb21wcmVzcy5jCmluZGV4IGZlZWEyMzMuLjVkZmEwMDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2NvbXByZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvY29tcHJlc3MuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTIzOSw3ICsyMzksNyBAQAogdm9pZCBzZW5kTVRGVmFsdWVzICggRVN0YXRlKiBzICkKIHsKICAgIEludDMyIHYsIHQsIGksIGosIGdzLCBnZSwgdG90YywgYnQsIGJjLCBpdGVyOwotICAgSW50MzIgblNlbGVjdG9ycyA9IDAsIGFscGhhU2l6ZSwgbWluTGVuLCBtYXhMZW4sIHNlbEN0cjsKKyAgIEludDMyIG5TZWxlY3RvcnMsIGFscGhhU2l6ZSwgbWluTGVuLCBtYXhMZW4sIHNlbEN0cjsKICAgIEludDMyIG5Hcm91cHMsIG5CeXRlczsKIAogICAgLyotLQpAQCAtMzI5LDE0ICszMjksMTQgQEAKIAogICAgICAgLyotLS0KICAgICAgICAgU2V0IHVwIGFuIGF1eGlsaWFyeSBsZW5ndGggdGFibGUgd2hpY2ggaXMgdXNlZCB0byBmYXN0LXRyYWNrCi0gICAgdGhlIGNvbW1vbiBjYXNlIChuR3JvdXBzID09IDYpLiAKKwl0aGUgY29tbW9uIGNhc2UgKG5Hcm91cHMgPT0gNikuIAogICAgICAgLS0tKi8KICAgICAgIGlmIChuR3JvdXBzID09IDYpIHsKICAgICAgICAgIGZvciAodiA9IDA7IHYgPCBhbHBoYVNpemU7IHYrKykgewogICAgICAgICAgICAgcy0+bGVuX3BhY2tbdl1bMF0gPSAocy0+bGVuWzFdW3ZdIDw8IDE2KSB8IHMtPmxlblswXVt2XTsKICAgICAgICAgICAgIHMtPmxlbl9wYWNrW3ZdWzFdID0gKHMtPmxlblszXVt2XSA8PCAxNikgfCBzLT5sZW5bMl1bdl07CiAgICAgICAgICAgICBzLT5sZW5fcGFja1t2XVsyXSA9IChzLT5sZW5bNV1bdl0gPDwgMTYpIHwgcy0+bGVuWzRdW3ZdOwotICAgICB9CisJIH0KICAgICAgIH0KIAogICAgICAgblNlbGVjdG9ycyA9IDA7CkBAIC0zODUsNyArMzg1LDcgQEAKICAgICAgICAgICAgIGNvc3RbNF0gPSBjb3N0NDUgJiAweGZmZmY7IGNvc3RbNV0gPSBjb3N0NDUgPj4gMTY7CiAKICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLworCSAgICAvKi0tLSBzbG93IHZlcnNpb24gd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgYWxsIHNpdHVhdGlvbnMgLS0tKi8KICAgICAgICAgICAgIGZvciAoaSA9IGdzOyBpIDw9IGdlOyBpKyspIHsgCiAgICAgICAgICAgICAgICBVSW50MTYgaWN2ID0gbXRmdltpXTsKICAgICAgICAgICAgICAgIGZvciAodCA9IDA7IHQgPCBuR3JvdXBzOyB0KyspIGNvc3RbdF0gKz0gcy0+bGVuW3RdW2ljdl07CkBAIC00MjYsNyArNDI2LDcgQEAKICMgICAgICAgICAgIHVuZGVmIEJaX0lUVVIKIAogICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCisJICAgIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLwogICAgICAgICAgICAgZm9yIChpID0gZ3M7IGkgPD0gZ2U7IGkrKykKICAgICAgICAgICAgICAgIHMtPnJmcmVxW2J0XVsgbXRmdltpXSBdKys7CiAgICAgICAgICB9CkBAIC00NTQsNyArNDU0LDcgQEAKIAogICAgQXNzZXJ0SCggbkdyb3VwcyA8IDgsIDMwMDIgKTsKICAgIEFzc2VydEgoIG5TZWxlY3RvcnMgPCAzMjc2OCAmJgotICAgICAgICAgICAgblNlbGVjdG9ycyA8PSAoMiArICg5MDAwMDAgLyBCWl9HX1NJWkUpKSwKKyAgICAgICAgICAgIG5TZWxlY3RvcnMgPD0gQlpfTUFYX1NFTEVDVE9SUywKICAgICAgICAgICAgIDMwMDMgKTsKIAogCkBAIC01NzksNyArNTc5LDcgQEAKICMgICAgICAgICAgIHVuZGVmIEJaX0lUQUgKIAogICAgICAgfSBlbHNlIHsKLSAgICAgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCisJIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLwogICAgICAgICAgZm9yIChpID0gZ3M7IGkgPD0gZ2U7IGkrKykgewogICAgICAgICAgICAgYnNXICggcywgCiAgICAgICAgICAgICAgICAgICBzLT5sZW4gIFtzLT5zZWxlY3RvcltzZWxDdHJdXSBbbXRmdltpXV0sCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9jcmN0YWJsZS5jIGIvVXRpbGl0aWVzL2NtYnppcDIvY3JjdGFibGUuYwppbmRleCAyMTU2ODdiLi4yYjMzYzI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9jcmN0YWJsZS5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2NyY3RhYmxlLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9kZWNvbXByZXNzLmMgYi9VdGlsaXRpZXMvY21iemlwMi9kZWNvbXByZXNzLmMKaW5kZXggYmJhNWUwZi4uYTFhMGJhYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvZGVjb21wcmVzcy5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2RlY29tcHJlc3MuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTI4NSw3ICsyODUsNyBAQAogCiAgICAgICAvKi0tLSBOb3cgdGhlIHNlbGVjdG9ycyAtLS0qLwogICAgICAgR0VUX0JJVFMoQlpfWF9TRUxFQ1RPUl8xLCBuR3JvdXBzLCAzKTsKLSAgICAgIGlmIChuR3JvdXBzIDwgMiB8fCBuR3JvdXBzID4gNikgUkVUVVJOKEJaX0RBVEFfRVJST1IpOworICAgICAgaWYgKG5Hcm91cHMgPCAyIHx8IG5Hcm91cHMgPiBCWl9OX0dST1VQUykgUkVUVVJOKEJaX0RBVEFfRVJST1IpOwogICAgICAgR0VUX0JJVFMoQlpfWF9TRUxFQ1RPUl8yLCBuU2VsZWN0b3JzLCAxNSk7CiAgICAgICBpZiAoblNlbGVjdG9ycyA8IDEpIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBuU2VsZWN0b3JzOyBpKyspIHsKQEAgLTI5Niw4ICsyOTYsMTQgQEAKICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgIGlmIChqID49IG5Hcm91cHMpIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgICAgIH0KLSAgICAgICAgIHMtPnNlbGVjdG9yTXRmW2ldID0gajsKKyAgICAgICAgIC8qIEhhdmluZyBtb3JlIHRoYW4gQlpfTUFYX1NFTEVDVE9SUyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZQorICAgICAgICAgICAgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHVzZWQsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtaWdodAorICAgICAgICAgICAgInJvdW5kIHVwIiB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycywgc28ganVzdCBpZ25vcmUgdGhvc2UuICovCisgICAgICAgICBpZiAoaSA8IEJaX01BWF9TRUxFQ1RPUlMpCisgICAgICAgICAgIHMtPnNlbGVjdG9yTXRmW2ldID0gajsKICAgICAgIH0KKyAgICAgIGlmIChuU2VsZWN0b3JzID4gQlpfTUFYX1NFTEVDVE9SUykKKyAgICAgICAgblNlbGVjdG9ycyA9IEJaX01BWF9TRUxFQ1RPUlM7CiAKICAgICAgIC8qLS0tIFVuZG8gdGhlIE1URiB2YWx1ZXMgZm9yIHRoZSBzZWxlY3RvcnMuIC0tLSovCiAgICAgICB7CkBAIC0zODEsNiArMzg3LDEzIEBACiAgICAgICAgICAgICBlcyA9IC0xOwogICAgICAgICAgICAgTiA9IDE7CiAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAvKiBDaGVjayB0aGF0IE4gZG9lc24ndCBnZXQgdG9vIGJpZywgc28gdGhhdCBlcyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICBnbyBuZWdhdGl2ZS4gIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgY2FuIGJlCisgICAgICAgICAgICAgICAgICBSVU5BL1JVTkIgZW5jb2RlZCBpcyBlcXVhbCB0byB0aGUgYmxvY2sgc2l6ZSAocG9zdAorICAgICAgICAgICAgICAgICAgdGhlIGluaXRpYWwgUkxFKSwgdml6LCA5MDBrLCBzbyBib3VuZGluZyBOIGF0IDIKKyAgICAgICAgICAgICAgICAgIG1pbGxpb24gc2hvdWxkIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgd2l0aG91dAorICAgICAgICAgICAgICAgICAgcmVqZWN0aW5nIGFueSBsZWdpdGltYXRlIGlucHV0cy4gKi8KKyAgICAgICAgICAgICAgIGlmIChOID49IDIqMTAyNCoxMDI0KSBSRVRVUk4oQlpfREFUQV9FUlJPUik7CiAgICAgICAgICAgICAgICBpZiAobmV4dFN5bSA9PSBCWl9SVU5BKSBlcyA9IGVzICsgKDArMSkgKiBOOyBlbHNlCiAgICAgICAgICAgICAgICBpZiAobmV4dFN5bSA9PSBCWl9SVU5CKSBlcyA9IGVzICsgKDErMSkgKiBOOwogICAgICAgICAgICAgICAgTiA9IE4gKiAyOwpAQCAtNDg1LDE1ICs0OTgsMjggQEAKICAgICAgICAgIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKIAogICAgICAgLyotLSBTZXQgdXAgY2Z0YWIgdG8gZmFjaWxpdGF0ZSBnZW5lcmF0aW9uIG9mIFReKC0xKSAtLSovCisgICAgICAvKiBDaGVjazogdW56ZnRhYiBlbnRyaWVzIGluIHJhbmdlLiAqLworICAgICAgZm9yIChpID0gMDsgaSA8PSAyNTU7IGkrKykgeworICAgICAgICAgaWYgKHMtPnVuemZ0YWJbaV0gPCAwIHx8IHMtPnVuemZ0YWJbaV0gPiBuYmxvY2spCisgICAgICAgICAgICBSRVRVUk4oQlpfREFUQV9FUlJPUik7CisgICAgICB9CisgICAgICAvKiBBY3R1YWxseSBnZW5lcmF0ZSBjZnRhYi4gKi8KICAgICAgIHMtPmNmdGFiWzBdID0gMDsKICAgICAgIGZvciAoaSA9IDE7IGkgPD0gMjU2OyBpKyspIHMtPmNmdGFiW2ldID0gcy0+dW56ZnRhYltpLTFdOwogICAgICAgZm9yIChpID0gMTsgaSA8PSAyNTY7IGkrKykgcy0+Y2Z0YWJbaV0gKz0gcy0+Y2Z0YWJbaS0xXTsKKyAgICAgIC8qIENoZWNrOiBjZnRhYiBlbnRyaWVzIGluIHJhbmdlLiAqLwogICAgICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgewogICAgICAgICAgaWYgKHMtPmNmdGFiW2ldIDwgMCB8fCBzLT5jZnRhYltpXSA+IG5ibG9jaykgewogICAgICAgICAgICAgLyogcy0+Y2Z0YWJbaV0gY2FuIGxlZ2l0aW1hdGVseSBiZSA9PSBuYmxvY2sgKi8KICAgICAgICAgICAgIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgICAgIH0KICAgICAgIH0KKyAgICAgIC8qIENoZWNrOiBjZnRhYiBlbnRyaWVzIG5vbi1kZXNjZW5kaW5nLiAqLworICAgICAgZm9yIChpID0gMTsgaSA8PSAyNTY7IGkrKykgeworICAgICAgICAgaWYgKHMtPmNmdGFiW2ktMV0gPiBzLT5jZnRhYltpXSkgeworICAgICAgICAgICAgUkVUVVJOKEJaX0RBVEFfRVJST1IpOworICAgICAgICAgfQorICAgICAgfQogCiAgICAgICBzLT5zdGF0ZV9vdXRfbGVuID0gMDsKICAgICAgIHMtPnN0YXRlX291dF9jaCAgPSAwOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvZGxsdGVzdC5jIGIvVXRpbGl0aWVzL2NtYnppcDIvZGxsdGVzdC5jCmluZGV4IDRlMjdkYTIuLjAzZmExNDYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2RsbHRlc3QuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9kbGx0ZXN0LmMKQEAgLTEsMTc1ICsxLDE3NSBAQAotLyoKLSAgIG1pbmliejIKLSAgICAgIGxpYmJ6Mi5kbGwgdGVzdCBwcm9ncmFtLgotICAgICAgYnkgWW9zaGlva2EgVHN1bmVvICh0c3VuZW9AcnIuaWlqNHUub3IuanApCi0gICAgICBUaGlzIGZpbGUgaXMgUHVibGljIERvbWFpbi4gIFdlbGNvbWUgYW55IGVtYWlsIHRvIG1lLgotCi0gICB1c2FnZTogbWluaWJ6MiBbLWRdIFstezEsMiwuLjl9XSBbW3NyY2ZpbGVuYW1lXSBkZXN0ZmlsZW5hbWVdCi0qLwotCi0jZGVmaW5lIEJaX0lNUE9SVAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiYnpsaWIuaCIKLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmCi0KLQotI2lmZGVmIF9XSU4zMgotCi0jZGVmaW5lIEJaMl9MSUJOQU1FICJsaWJiejItMS4wLjIuRExMIiAKLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLXN0YXRpYyBpbnQgQloyRExMTG9hZGVkID0gMDsKLXN0YXRpYyBISU5TVEFOQ0UgQloyRExMaExpYjsKLWludCBCWjJETExMb2FkTGlicmFyeSh2b2lkKQotewotICAgSElOU1RBTkNFIGhMaWI7Ci0KLSAgIGlmKEJaMkRMTExvYWRlZD09MSl7cmV0dXJuIDA7fQotICAgaExpYj1Mb2FkTGlicmFyeShCWjJfTElCTkFNRSk7Ci0gICBpZihoTGliID09IE5VTEwpewotICAgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IGxvYWQgJXNcbiIsQloyX0xJQk5BTUUpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgQloyX2J6bGliVmVyc2lvbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpsaWJWZXJzaW9uIik7Ci0gICBCWjJfYnpvcGVuPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iem9wZW4iKTsKLSAgIEJaMl9iemRvcGVuPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemRvcGVuIik7Ci0gICBCWjJfYnpyZWFkPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9ienJlYWQiKTsKLSAgIEJaMl9iendyaXRlPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iendyaXRlIik7Ci0gICBCWjJfYnpmbHVzaD1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpmbHVzaCIpOwotICAgQloyX2J6Y2xvc2U9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6Y2xvc2UiKTsKLSAgIEJaMl9iemVycm9yPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemVycm9yIik7Ci0KLSAgIGlmICghQloyX2J6bGliVmVyc2lvbiB8fCAhQloyX2J6b3BlbiB8fCAhQloyX2J6ZG9wZW4KLSAgICAgICB8fCAhQloyX2J6cmVhZCB8fCAhQloyX2J6d3JpdGUgfHwgIUJaMl9iemZsdXNoCi0gICAgICAgfHwgIUJaMl9iemNsb3NlIHx8ICFCWjJfYnplcnJvcikgewotICAgICAgZnByaW50ZihzdGRlcnIsIkdldFByb2NBZGRyZXNzIGZhaWxlZC5cbiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgQloyRExMTG9hZGVkPTE7Ci0gICBCWjJETExoTGliPWhMaWI7Ci0gICByZXR1cm4gMDsKLQotfQotaW50IEJaMkRMTEZyZWVMaWJyYXJ5KHZvaWQpCi17Ci0gICBpZihCWjJETExMb2FkZWQ9PTApe3JldHVybiAwO30KLSAgIEZyZWVMaWJyYXJ5KEJaMkRMTGhMaWIpOwotICAgQloyRExMTG9hZGVkPTA7Ci19Ci0jZW5kaWYgLyogV0lOMzIgKi8KLQotdm9pZCB1c2FnZSh2b2lkKQotewotICAgcHV0cygidXNhZ2U6IG1pbmliejIgWy1kXSBbLXsxLDIsLi45fV0gW1tzcmNmaWxlbmFtZV0gZGVzdGZpbGVuYW1lXSIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCi17Ci0gICBpbnQgZGVjb21wcmVzcyA9IDA7Ci0gICBpbnQgbGV2ZWwgPSA5OwotICAgY2hhciAqZm5fciA9IE5VTEw7Ci0gICBjaGFyICpmbl93ID0gTlVMTDsKLQotI2lmZGVmIF9XSU4zMgotICAgaWYoQloyRExMTG9hZExpYnJhcnkoKTwwKXsKLSAgICAgIGZwcmludGYoc3RkZXJyLCJMb2FkaW5nIG9mICVzIGZhaWxlZC4gIEdpdmluZyB1cC5cbiIsIEJaMl9MSUJOQU1FKTsKLSAgICAgIGV4aXQoMSk7Ci0gICB9Ci0gICBwcmludGYoIkxvYWRpbmcgb2YgJXMgc3VjY2VlZGVkLiAgTGlicmFyeSB2ZXJzaW9uIGlzICVzLlxuIiwKLSAgICAgICAgICBCWjJfTElCTkFNRSwgQloyX2J6bGliVmVyc2lvbigpICk7Ci0jZW5kaWYKLSAgIHdoaWxlKCsrYXJndiwtLWFyZ2MpewotICAgICAgaWYoKiphcmd2ID09Jy0nIHx8ICoqYXJndj09Jy8nKXsKLSAgICAgICAgIGNoYXIgKnA7Ci0KLSAgICAgICAgIGZvcihwPSphcmd2KzE7KnA7cCsrKXsKLSAgICAgICAgICAgIGlmKCpwPT0nZCcpewotICAgICAgICAgICAgICAgZGVjb21wcmVzcyA9IDE7Ci0gICAgICAgICAgICB9ZWxzZSBpZignMSc8PSpwICYmICpwPD0nOScpewotICAgICAgICAgICAgICAgbGV2ZWwgPSAqcCAtICcwJzsKLSAgICAgICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9ZWxzZXsKLSAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgfQotICAgaWYoYXJnYz49MSl7Ci0gICAgICBmbl9yID0gKmFyZ3Y7Ci0gICAgICBhcmdjLS07YXJndisrOwotICAgfWVsc2V7Ci0gICAgICBmbl9yID0gTlVMTDsKLSAgIH0KLSAgIGlmKGFyZ2M+PTEpewotICAgICAgZm5fdyA9ICphcmd2OwotICAgICAgYXJnYy0tO2FyZ3YrKzsKLSAgIH1lbHNlewotICAgICAgZm5fdyA9IE5VTEw7Ci0gICB9Ci0gICB7Ci0gICAgICBpbnQgbGVuOwotICAgICAgY2hhciBidWZmWzB4MTAwMF07Ci0gICAgICBjaGFyIG1vZGVbMTBdOwotCi0gICAgICBpZihkZWNvbXByZXNzKXsKLSAgICAgICAgIEJaRklMRSAqQloyZnBfciA9IE5VTEw7Ci0gICAgICAgICBGSUxFICpmcF93ID0gTlVMTDsKLQotICAgICAgICAgaWYoZm5fdyl7Ci0gICAgICAgICAgICBpZigoZnBfdyA9IGZvcGVuKGZuX3csIndiIikpPT1OVUxMKXsKLSAgICAgICAgICAgICAgIHByaW50ZigiY2FuJ3Qgb3BlbiBbJXNdXG4iLGZuX3cpOwotICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7Ci0gICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICBmcF93ID0gc3Rkb3V0OwotICAgICAgICAgfQotICAgICAgICAgaWYoKGZuX3IgPT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRpbiksInJiIikpPT1OVUxMKQotICAgICAgICAgICAgfHwgKGZuX3IgIT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iem9wZW4oZm5fciwicmIiKSk9PU5VTEwpKXsKLSAgICAgICAgICAgIHByaW50ZigiY2FuJ3QgYnoyb3BlbnN0cmVhbVxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgfQotICAgICAgICAgd2hpbGUoKGxlbj1CWjJfYnpyZWFkKEJaMmZwX3IsYnVmZiwweDEwMDApKT4wKXsKLSAgICAgICAgICAgIGZ3cml0ZShidWZmLDEsbGVuLGZwX3cpOwotICAgICAgICAgfQotICAgICAgICAgQloyX2J6Y2xvc2UoQloyZnBfcik7Ci0gICAgICAgICBpZihmcF93ICE9IHN0ZG91dCkgZmNsb3NlKGZwX3cpOwotICAgICAgfWVsc2V7Ci0gICAgICAgICBCWkZJTEUgKkJaMmZwX3cgPSBOVUxMOwotICAgICAgICAgRklMRSAqZnBfciA9IE5VTEw7Ci0KLSAgICAgICAgIGlmKGZuX3IpewotICAgICAgICAgICAgaWYoKGZwX3IgPSBmb3Blbihmbl9yLCJyYiIpKT09TlVMTCl7Ci0gICAgICAgICAgICAgICBwcmludGYoImNhbid0IG9wZW4gWyVzXVxuIixmbl9yKTsKLSAgICAgICAgICAgICAgIHBlcnJvcigicmVhc29uOiIpOwotICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH1lbHNlewotICAgICAgICAgICAgZnBfciA9IHN0ZGluOwotICAgICAgICAgfQotICAgICAgICAgbW9kZVswXT0ndyc7Ci0gICAgICAgICBtb2RlWzFdID0gJzAnICsgbGV2ZWw7Ci0gICAgICAgICBtb2RlWzJdID0gJ1wwJzsKLQotICAgICAgICAgaWYoKGZuX3cgPT0gTlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRvdXQpLG1vZGUpKT09TlVMTCkKLSAgICAgICAgICAgIHx8IChmbl93ICE9TlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iem9wZW4oZm5fdyxtb2RlKSk9PU5VTEwpKXsKLSAgICAgICAgICAgIHByaW50ZigiY2FuJ3QgYnoyb3BlbnN0cmVhbVxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgfQotICAgICAgICAgd2hpbGUoKGxlbj1mcmVhZChidWZmLDEsMHgxMDAwLGZwX3IpKT4wKXsKLSAgICAgICAgICAgIEJaMl9iendyaXRlKEJaMmZwX3csYnVmZixsZW4pOwotICAgICAgICAgfQotICAgICAgICAgQloyX2J6Y2xvc2UoQloyZnBfdyk7Ci0gICAgICAgICBpZihmcF9yIT1zdGRpbilmY2xvc2UoZnBfcik7Ci0gICAgICB9Ci0gICB9Ci0jaWZkZWYgX1dJTjMyCi0gICBCWjJETExGcmVlTGlicmFyeSgpOwotI2VuZGlmCi0gICByZXR1cm4gMDsKLX0KKy8qDQorICAgbWluaWJ6Mg0KKyAgICAgIGxpYmJ6Mi5kbGwgdGVzdCBwcm9ncmFtLg0KKyAgICAgIGJ5IFlvc2hpb2thIFRzdW5lbyAodHN1bmVvQHJyLmlpajR1Lm9yLmpwKQ0KKyAgICAgIFRoaXMgZmlsZSBpcyBQdWJsaWMgRG9tYWluLiAgV2VsY29tZSBhbnkgZW1haWwgdG8gbWUuDQorDQorICAgdXNhZ2U6IG1pbmliejIgWy1kXSBbLXsxLDIsLi45fV0gW1tzcmNmaWxlbmFtZV0gZGVzdGZpbGVuYW1lXQ0KKyovDQorDQorI2RlZmluZSBCWl9JTVBPUlQNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgImJ6bGliLmgiDQorI2lmZGVmIF9XSU4zMg0KKyNpbmNsdWRlIDxpby5oPg0KKyNlbmRpZg0KKw0KKw0KKyNpZmRlZiBfV0lOMzINCisNCisjZGVmaW5lIEJaMl9MSUJOQU1FICJsaWJiejItMS4wLjIuRExMIiANCisNCisjaW5jbHVkZSA8d2luZG93cy5oPg0KK3N0YXRpYyBpbnQgQloyRExMTG9hZGVkID0gMDsNCitzdGF0aWMgSElOU1RBTkNFIEJaMkRMTGhMaWI7DQoraW50IEJaMkRMTExvYWRMaWJyYXJ5KHZvaWQpDQorew0KKyAgIEhJTlNUQU5DRSBoTGliOw0KKw0KKyAgIGlmKEJaMkRMTExvYWRlZD09MSl7cmV0dXJuIDA7fQ0KKyAgIGhMaWI9TG9hZExpYnJhcnkoQloyX0xJQk5BTUUpOw0KKyAgIGlmKGhMaWIgPT0gTlVMTCl7DQorICAgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IGxvYWQgJXNcbiIsQloyX0xJQk5BTUUpOw0KKyAgICAgIHJldHVybiAtMTsNCisgICB9DQorICAgQloyX2J6bGliVmVyc2lvbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpsaWJWZXJzaW9uIik7DQorICAgQloyX2J6b3Blbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpvcGVuIik7DQorICAgQloyX2J6ZG9wZW49R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6ZG9wZW4iKTsNCisgICBCWjJfYnpyZWFkPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9ienJlYWQiKTsNCisgICBCWjJfYnp3cml0ZT1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnp3cml0ZSIpOw0KKyAgIEJaMl9iemZsdXNoPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemZsdXNoIik7DQorICAgQloyX2J6Y2xvc2U9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6Y2xvc2UiKTsNCisgICBCWjJfYnplcnJvcj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnplcnJvciIpOw0KKw0KKyAgIGlmICghQloyX2J6bGliVmVyc2lvbiB8fCAhQloyX2J6b3BlbiB8fCAhQloyX2J6ZG9wZW4NCisgICAgICAgfHwgIUJaMl9ienJlYWQgfHwgIUJaMl9iendyaXRlIHx8ICFCWjJfYnpmbHVzaA0KKyAgICAgICB8fCAhQloyX2J6Y2xvc2UgfHwgIUJaMl9iemVycm9yKSB7DQorICAgICAgZnByaW50ZihzdGRlcnIsIkdldFByb2NBZGRyZXNzIGZhaWxlZC5cbiIpOw0KKyAgICAgIHJldHVybiAtMTsNCisgICB9DQorICAgQloyRExMTG9hZGVkPTE7DQorICAgQloyRExMaExpYj1oTGliOw0KKyAgIHJldHVybiAwOw0KKw0KK30NCitpbnQgQloyRExMRnJlZUxpYnJhcnkodm9pZCkNCit7DQorICAgaWYoQloyRExMTG9hZGVkPT0wKXtyZXR1cm4gMDt9DQorICAgRnJlZUxpYnJhcnkoQloyRExMaExpYik7DQorICAgQloyRExMTG9hZGVkPTA7DQorfQ0KKyNlbmRpZiAvKiBXSU4zMiAqLw0KKw0KK3ZvaWQgdXNhZ2Uodm9pZCkNCit7DQorICAgcHV0cygidXNhZ2U6IG1pbmliejIgWy1kXSBbLXsxLDIsLi45fV0gW1tzcmNmaWxlbmFtZV0gZGVzdGZpbGVuYW1lXSIpOw0KK30NCisNCitpbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pDQorew0KKyAgIGludCBkZWNvbXByZXNzID0gMDsNCisgICBpbnQgbGV2ZWwgPSA5Ow0KKyAgIGNoYXIgKmZuX3IgPSBOVUxMOw0KKyAgIGNoYXIgKmZuX3cgPSBOVUxMOw0KKw0KKyNpZmRlZiBfV0lOMzINCisgICBpZihCWjJETExMb2FkTGlicmFyeSgpPDApew0KKyAgICAgIGZwcmludGYoc3RkZXJyLCJMb2FkaW5nIG9mICVzIGZhaWxlZC4gIEdpdmluZyB1cC5cbiIsIEJaMl9MSUJOQU1FKTsNCisgICAgICBleGl0KDEpOw0KKyAgIH0NCisgICBwcmludGYoIkxvYWRpbmcgb2YgJXMgc3VjY2VlZGVkLiAgTGlicmFyeSB2ZXJzaW9uIGlzICVzLlxuIiwNCisgICAgICAgICAgQloyX0xJQk5BTUUsIEJaMl9iemxpYlZlcnNpb24oKSApOw0KKyNlbmRpZg0KKyAgIHdoaWxlKCsrYXJndiwtLWFyZ2Mpew0KKyAgICAgIGlmKCoqYXJndiA9PSctJyB8fCAqKmFyZ3Y9PScvJyl7DQorICAgICAgICAgY2hhciAqcDsNCisNCisgICAgICAgICBmb3IocD0qYXJndisxOypwO3ArKyl7DQorICAgICAgICAgICAgaWYoKnA9PSdkJyl7DQorICAgICAgICAgICAgICAgZGVjb21wcmVzcyA9IDE7DQorICAgICAgICAgICAgfWVsc2UgaWYoJzEnPD0qcCAmJiAqcDw9JzknKXsNCisgICAgICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOw0KKyAgICAgICAgICAgIH1lbHNlew0KKyAgICAgICAgICAgICAgIHVzYWdlKCk7DQorICAgICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgfQ0KKyAgICAgIH1lbHNlew0KKyAgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICB9DQorICAgaWYoYXJnYz49MSl7DQorICAgICAgZm5fciA9ICphcmd2Ow0KKyAgICAgIGFyZ2MtLTthcmd2Kys7DQorICAgfWVsc2V7DQorICAgICAgZm5fciA9IE5VTEw7DQorICAgfQ0KKyAgIGlmKGFyZ2M+PTEpew0KKyAgICAgIGZuX3cgPSAqYXJndjsNCisgICAgICBhcmdjLS07YXJndisrOw0KKyAgIH1lbHNlew0KKyAgICAgIGZuX3cgPSBOVUxMOw0KKyAgIH0NCisgICB7DQorICAgICAgaW50IGxlbjsNCisgICAgICBjaGFyIGJ1ZmZbMHgxMDAwXTsNCisgICAgICBjaGFyIG1vZGVbMTBdOw0KKw0KKyAgICAgIGlmKGRlY29tcHJlc3Mpew0KKyAgICAgICAgIEJaRklMRSAqQloyZnBfciA9IE5VTEw7DQorICAgICAgICAgRklMRSAqZnBfdyA9IE5VTEw7DQorDQorICAgICAgICAgaWYoZm5fdyl7DQorICAgICAgICAgICAgaWYoKGZwX3cgPSBmb3Blbihmbl93LCJ3YiIpKT09TlVMTCl7DQorICAgICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBvcGVuIFslc11cbiIsZm5fdyk7DQorICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7DQorICAgICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgfWVsc2V7DQorICAgICAgICAgICAgZnBfdyA9IHN0ZG91dDsNCisgICAgICAgICB9DQorICAgICAgICAgaWYoKGZuX3IgPT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRpbiksInJiIikpPT1OVUxMKQ0KKyAgICAgICAgICAgIHx8IChmbl9yICE9IE5VTEwgJiYgKEJaMmZwX3IgPSBCWjJfYnpvcGVuKGZuX3IsInJiIikpPT1OVUxMKSl7DQorICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsNCisgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgIH0NCisgICAgICAgICB3aGlsZSgobGVuPUJaMl9ienJlYWQoQloyZnBfcixidWZmLDB4MTAwMCkpPjApew0KKyAgICAgICAgICAgIGZ3cml0ZShidWZmLDEsbGVuLGZwX3cpOw0KKyAgICAgICAgIH0NCisgICAgICAgICBCWjJfYnpjbG9zZShCWjJmcF9yKTsNCisgICAgICAgICBpZihmcF93ICE9IHN0ZG91dCkgZmNsb3NlKGZwX3cpOw0KKyAgICAgIH1lbHNlew0KKyAgICAgICAgIEJaRklMRSAqQloyZnBfdyA9IE5VTEw7DQorICAgICAgICAgRklMRSAqZnBfciA9IE5VTEw7DQorDQorICAgICAgICAgaWYoZm5fcil7DQorICAgICAgICAgICAgaWYoKGZwX3IgPSBmb3Blbihmbl9yLCJyYiIpKT09TlVMTCl7DQorICAgICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBvcGVuIFslc11cbiIsZm5fcik7DQorICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7DQorICAgICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgfWVsc2V7DQorICAgICAgICAgICAgZnBfciA9IHN0ZGluOw0KKyAgICAgICAgIH0NCisgICAgICAgICBtb2RlWzBdPSd3JzsNCisgICAgICAgICBtb2RlWzFdID0gJzAnICsgbGV2ZWw7DQorICAgICAgICAgbW9kZVsyXSA9ICdcMCc7DQorDQorICAgICAgICAgaWYoKGZuX3cgPT0gTlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRvdXQpLG1vZGUpKT09TlVMTCkNCisgICAgICAgICAgICB8fCAoZm5fdyAhPU5VTEwgJiYgKEJaMmZwX3cgPSBCWjJfYnpvcGVuKGZuX3csbW9kZSkpPT1OVUxMKSl7DQorICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsNCisgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgIH0NCisgICAgICAgICB3aGlsZSgobGVuPWZyZWFkKGJ1ZmYsMSwweDEwMDAsZnBfcikpPjApew0KKyAgICAgICAgICAgIEJaMl9iendyaXRlKEJaMmZwX3csYnVmZixsZW4pOw0KKyAgICAgICAgIH0NCisgICAgICAgICBCWjJfYnpjbG9zZShCWjJmcF93KTsNCisgICAgICAgICBpZihmcF9yIT1zdGRpbilmY2xvc2UoZnBfcik7DQorICAgICAgfQ0KKyAgIH0NCisjaWZkZWYgX1dJTjMyDQorICAgQloyRExMRnJlZUxpYnJhcnkoKTsNCisjZW5kaWYNCisgICByZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvZW50aXRpZXMueG1sIGIvVXRpbGl0aWVzL2NtYnppcDIvZW50aXRpZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWUwNTUzLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2VudGl0aWVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPCEtLSBtaXNjLiBzdHJpbmdzIC0tPgotPCFFTlRJVFkgYnotdXJsICJodHRwOi8vd3d3LmJ6aXAub3JnIj4KLTwhRU5USVRZIGJ6LWVtYWlsICJqc2V3YXJkQGJ6aXAub3JnIj4KLTwhRU5USVRZIGJ6LWxpZmVzcGFuICIxOTk2LTIwMDciPgotCi08IUVOVElUWSBiei12ZXJzaW9uICIxLjAuNSI+Ci08IUVOVElUWSBiei1kYXRlICIxMCBEZWNlbWJlciAyMDA3Ij4KLQotPCFFTlRJVFkgbWFudWFsLXRpdGxlICJiemlwMiBNYW51YWwiPgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvZm9ybWF0LnBsIGIvVXRpbGl0aWVzL2NtYnppcDIvZm9ybWF0LnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYjM5MWRhLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2Zvcm1hdC5wbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybCAtdwotIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKLSMgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLSMKLSMgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+Ci0jCi0jIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKLSMgUkVBRE1FIGZpbGUuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgY29udGFpbmVkCi0jIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIwotdXNlIHN0cmljdDsKLQotIyBnZXQgY29tbWFuZCBsaW5lIHZhbHVlczoKLWlmICggJCNBUkdWICE9MSApIHsKLSAgICBkaWUgIlVzYWdlOiAgJDAgeG1sX2luZmlsZSB4bWxfb3V0ZmlsZVxuIjsKLX0KLQotbXkgJGluZmlsZSA9IHNoaWZ0OwotIyBjaGVjayBpbmZpbGUgZXhpc3RzCi1kaWUgIkNhbid0IGZpbmQgZmlsZSBcIiRpbmZpbGVcIiIKLSAgdW5sZXNzIC1mICRpbmZpbGU7Ci0jIGNoZWNrIHdlIGNhbiByZWFkIGluZmlsZQotaWYgKCEgLXIgJGluZmlsZSkgewotICAgIGRpZSAiQ2FuJ3QgcmVhZCBpbnB1dCAkaW5maWxlXG4iOwotfQotIyBjaGVjayB3ZSBjYW4gb3BlbiBpbmZpbGUKLW9wZW4oIElORklMRSwiPCRpbmZpbGUiICkgb3IgCi0gICAgZGllICJDYW4ndCBpbnB1dCAkaW5maWxlICQhIjsKLQotI215ICRvdXRmaWxlID0gJ2ZtdC1tYW51YWwueG1sJzsKLW15ICRvdXRmaWxlID0gc2hpZnQ7Ci0jcHJpbnQgIkluZmlsZTogJGluZmlsZSwgT3V0ZmlsZTogJG91dGZpbGVcbiI7Ci0jIGNoZWNrIHdlIGNhbiB3cml0ZSB0byBvdXRmaWxlCi1vcGVuKCBPVVRGSUxFLCI+JG91dGZpbGUiICkgb3IgCi0gICAgZGllICJDYW4ndCBvdXRwdXQgJG91dGZpbGUgJCEgZm9yIHdyaXRpbmciOwotCi1teSAoJHByZXYsICRjdXJyLCAkc3RyKTsKLSRwcmV2ID0gJyc7ICRjdXJyID0gJyc7Ci13aGlsZSAoIDxJTkZJTEU+ICkgewotCi0gICAgICAgIHByaW50IE9VVEZJTEUgJHByZXY7Ci0gICAgJHByZXYgPSAkY3VycjsKLSAgICAkY3VyciA9ICRfOwotICAgICRzdHIgPSAnJzsKLQotICAgIGlmICggJHByZXYgPX4gLzxwcm9ncmFtbGlzdGluZz4kfDxzY3JlZW4+JC8gKSB7Ci0gICAgICAgIGNob21wICRwcmV2OwotICAgICAgICAkY3VyciA9IGpvaW4oICcnLCAkcHJldiwgIjwhW0NEQVRBWyIsICRjdXJyICk7Ci0gICAgICAgICAgICAgICAgJHByZXYgPSAnJzsKLSAgICAgICAgbmV4dDsKLSAgICB9Ci0gICAgZWxzaWYgKCAkY3VyciA9fiAvPFwvcHJvZ3JhbWxpc3Rpbmc+fDxcL3NjcmVlbj4vICkgewotICAgICAgICBjaG9tcCAkcHJldjsKLSAgICAgICAgJGN1cnIgPSBqb2luKCAnJywgJHByZXYsICJdXT4iLCAkY3VyciApOwotICAgICAgICAgICAgICAgICRwcmV2ID0gJyc7Ci0gICAgICAgIG5leHQ7Ci0gICAgfQotfQotcHJpbnQgT1VURklMRSAkY3VycjsKLWNsb3NlIElORklMRTsKLWNsb3NlIE9VVEZJTEU7Ci1leGl0OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvaHVmZm1hbi5jIGIvVXRpbGl0aWVzL2NtYnppcDIvaHVmZm1hbi5jCmluZGV4IDg3ZTc5ZTMuLjQzYTE4OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2h1ZmZtYW4uYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9odWZmbWFuLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9saWJiejIuZGVmIGIvVXRpbGl0aWVzL2NtYnppcDIvbGliYnoyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmZWY1NC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9saWJiejIuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotTElCUkFSWSAgICAgICAgIExJQkJaMgotREVTQ1JJUFRJT04gICAgICJsaWJiemlwMjogbGlicmFyeSBmb3IgZGF0YSBjb21wcmVzc2lvbiIKLUVYUE9SVFMKLSAgICBCWjJfYnpDb21wcmVzc0luaXQKLSAgICBCWjJfYnpDb21wcmVzcwotICAgIEJaMl9iekNvbXByZXNzRW5kCi0gICAgQloyX2J6RGVjb21wcmVzc0luaXQKLSAgICBCWjJfYnpEZWNvbXByZXNzCi0gICAgQloyX2J6RGVjb21wcmVzc0VuZAotICAgIEJaMl9ielJlYWRPcGVuCi0gICAgQloyX2J6UmVhZENsb3NlCi0gICAgQloyX2J6UmVhZEdldFVudXNlZAotICAgIEJaMl9ielJlYWQKLSAgICBCWjJfYnpXcml0ZU9wZW4KLSAgICBCWjJfYnpXcml0ZQotICAgIEJaMl9ieldyaXRlQ2xvc2UKLSAgICBCWjJfYnpXcml0ZUNsb3NlNjQKLSAgICBCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MKLSAgICBCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcwotICAgIEJaMl9iemxpYlZlcnNpb24KLSAgICBCWjJfYnpvcGVuCi0gICAgQloyX2J6ZG9wZW4KLSAgICBCWjJfYnpyZWFkCi0gICAgQloyX2J6d3JpdGUKLSAgICBCWjJfYnpmbHVzaAotICAgIEJaMl9iemNsb3NlCi0gICAgQloyX2J6ZXJyb3IKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5saWIgYi9VdGlsaXRpZXMvY21iemlwMi9saWJiejIubGliCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTk3YTc1Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5saWIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9tYWtlZmlsZS5tc2MgYi9VdGlsaXRpZXMvY21iemlwMi9tYWtlZmlsZS5tc2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZjJlNTkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFrZWZpbGUubXNjCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wCi0jIHVzYWdlOiBubWFrZSAtZiBtYWtlZmlsZS5tc2MKLSMgSy5NLiBTeXJpbmcgKHN5cmluZ0Bnc2YuZGUpCi0jIEZpeGVkIHVwIGJ5IEpSUyBmb3IgYnppcDItMC45LjVkIHJlbGVhc2UuCi0KLUNDPWNsCi1DRkxBR1M9IC1EV0lOMzIgLU1EIC1PeCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1ub2xvZ28KLQotT0JKUz0gYmxvY2tzb3J0Lm9iaiAgXAotICAgICAgaHVmZm1hbi5vYmogICAgXAotICAgICAgY3JjdGFibGUub2JqICAgXAotICAgICAgcmFuZHRhYmxlLm9iaiAgXAotICAgICAgY29tcHJlc3Mub2JqICAgXAotICAgICAgZGVjb21wcmVzcy5vYmogXAotICAgICAgYnpsaWIub2JqCi0KLWFsbDogbGliIGJ6aXAyIHRlc3QKLQotYnppcDI6IGxpYgotICAgICQoQ0MpICQoQ0ZMQUdTKSAtbyBiemlwMiBiemlwMi5jIGxpYmJ6Mi5saWIgc2V0YXJndi5vYmoKLSAgICAkKENDKSAkKENGTEFHUykgLW8gYnppcDJyZWNvdmVyIGJ6aXAycmVjb3Zlci5jCi0KLWxpYjogJChPQkpTKQotICAgIGxpYiAvb3V0OmxpYmJ6Mi5saWIgJChPQkpTKQotCi10ZXN0OiBiemlwMgotICAgIHR5cGUgd29yZHMxCi0gICAgLlxcYnppcDIgLTEgIDwgc2FtcGxlMS5yZWYgPiBzYW1wbGUxLnJiMgotICAgIC5cXGJ6aXAyIC0yICA8IHNhbXBsZTIucmVmID4gc2FtcGxlMi5yYjIKLSAgICAuXFxiemlwMiAtMyAgPCBzYW1wbGUzLnJlZiA+IHNhbXBsZTMucmIyCi0gICAgLlxcYnppcDIgLWQgIDwgc2FtcGxlMS5iejIgPiBzYW1wbGUxLnRzdAotICAgIC5cXGJ6aXAyIC1kICA8IHNhbXBsZTIuYnoyID4gc2FtcGxlMi50c3QKLSAgICAuXFxiemlwMiAtZHMgPCBzYW1wbGUzLmJ6MiA+IHNhbXBsZTMudHN0Ci0gICAgQGVjaG8gQWxsIHNpeCBvZiB0aGUgZmMncyBzaG91bGQgZmluZCBubyBkaWZmZXJlbmNlcy4KLSAgICBAZWNobyBJZiBmYyBmaW5kcyBhbiBlcnJvciBvbiBzYW1wbGUzLmJ6MiwgdGhpcyBjb3VsZCBiZQotICAgIEBlY2hvIGJlY2F1c2UgV2luWmlwJ3MgJ1RBUiBmaWxlIHNtYXJ0IENSL0xGIGNvbnZlcnNpb24nCi0gICAgQGVjaG8gaXMgdG9vIGNsZXZlciBmb3IgaXRzIG93biBnb29kLiAgRGlzYWJsZSB0aGlzIG9wdGlvbi4KLSAgICBAZWNobyBUaGUgY29ycmVjdCBzaXplIGZvciBzYW1wbGUzLnJlZiBpcyAxMjAsMjQ0LiAgSWYgaXQKLSAgICBAZWNobyBpcyAxNTAsMjUxLCBXaW5aaXAgaGFzIG1lc3NlZCBpdCB1cC4KLSAgICBmYyBzYW1wbGUxLmJ6MiBzYW1wbGUxLnJiMiAKLSAgICBmYyBzYW1wbGUyLmJ6MiBzYW1wbGUyLnJiMgotICAgIGZjIHNhbXBsZTMuYnoyIHNhbXBsZTMucmIyCi0gICAgZmMgc2FtcGxlMS50c3Qgc2FtcGxlMS5yZWYKLSAgICBmYyBzYW1wbGUyLnRzdCBzYW1wbGUyLnJlZgotICAgIGZjIHNhbXBsZTMudHN0IHNhbXBsZTMucmVmCi0KLQotCi1jbGVhbjogCi0gICAgZGVsICoub2JqCi0gICAgZGVsIGxpYmJ6Mi5saWIgCi0gICAgZGVsIGJ6aXAyLmV4ZQotICAgIGRlbCBiemlwMnJlY292ZXIuZXhlCi0gICAgZGVsIHNhbXBsZTEucmIyIAotICAgIGRlbCBzYW1wbGUyLnJiMiAKLSAgICBkZWwgc2FtcGxlMy5yYjIKLSAgICBkZWwgc2FtcGxlMS50c3QgCi0gICAgZGVsIHNhbXBsZTIudHN0Ci0gICAgZGVsIHNhbXBsZTMudHN0Ci0KLS5jLm9iajogCi0gICAgJChDQykgJChDRkxBR1MpIC1jICQqLmMgLW8gJCoub2JqCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC5odG1sIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNDQ5NTMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQwICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5iemlwMiBhbmQgbGliYnppcDIsIHZlcnNpb24gMS4wLjU8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42OS4xIj4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+LyogQ29sb3VyczoKLSM3NDI0MGYgIGRhcmsgYnJvd24gICAgICBoMSwgaDIsIGgzLCBoNAotIzMzNjY5OSAgbWVkaXVtIGJsdWUgICAgIGxpbmtzCi0jMzM5OTk5ICB0dXJxdW9pc2UgICAgICAgbGluayBob3ZlciBjb2xvdXIKLSMyMDIwMjAgIGFsbW9zdCBibGFjayAgICBnZW5lcmFsIHRleHQKLSM3NjE1OTYgIHB1cnBsZSAgICAgICAgICBtZDVzdW0gdGV4dAotIzYyNjI2MiAgZGFyayBncmF5ICAgICAgIHByZSBib3JkZXIKLSNlZWVlZWUgIHZlcnkgbGlnaHQgZ3JheSBwcmUgYmFja2dyb3VuZAotI2YyZjJmOSAgdmVyeSBsaWdodCBibHVlIG5hdiB0YWJsZSBiYWNrZ3JvdW5kCi0jMzM2NmNjICBtZWRpdW0gYmx1ZSAgICAgbmF2IHRhYmxlIGJvcmRlcgotKi8KLQotYSwgYTpsaW5rLCBhOnZpc2l0ZWQsIGE6YWN0aXZlIHsgY29sb3I6ICMzMzY2OTk7IH0KLWE6aG92ZXIgeyBjb2xvcjogIzMzOTk5OTsgfQotCi1ib2R5IHsgZm9udDogODAlLzEyNiUgc2Fucy1zZXJpZjsgfQotaDEsIGgyLCBoMywgaDQgeyBjb2xvcjogIzc0MjQwZjsgfQotCi1kdCB7IGNvbG9yOiAjMzM2Njk5OyBmb250LXdlaWdodDogYm9sZCB9Ci1kZCB7IAotIG1hcmdpbi1sZWZ0OiAxLjVlbTsgCi0gcGFkZGluZy1ib3R0b206IDAuOGVtOwotfQotCi0vKiAtLSBydWxlciAtLSAqLwotZGl2LmhyX2JsdWUgeyAKLSAgaGVpZ2h0OiAgM3B4OyAKLSAgYmFja2dyb3VuZDojZmZmZmZmIHVybCgiL2ltYWdlcy9ocl9ibHVlLnBuZyIpIHJlcGVhdC14OyB9Ci1kaXYuaHJfYmx1ZSBociB7IGRpc3BsYXk6bm9uZTsgfQotCi0vKiByZWxlYXNlIHN0eWxlcyAqLwotI3JlbGVhc2UgcCB7IG1hcmdpbi10b3A6IDAuNGVtOyB9Ci0jcmVsZWFzZSAubWQ1c3VtIHsgY29sb3I6ICM3NjE1OTY7IH0KLQotCi0vKiAtLS0tLS0gc3R5bGVzIGZvciBkb2NzfG1hbnVhbHN8aG93dG8gLS0tLS0tICovCi0vKiAtLSBsaXN0cyAtLSAqLwotdWwgIHsgCi0gbWFyZ2luOiAgICAgMHB4IDRweCAxNnB4IDE2cHg7Ci0gcGFkZGluZzogICAgMHB4OwotIGxpc3Qtc3R5bGU6IHVybCgiL2ltYWdlcy9saS1ibHVlLnBuZyIpOyAKLX0KLXVsIGxpIHsgCi0gbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLXVsIHVsICAgeyAKLSBsaXN0LXN0eWxlLXR5cGU6ICBub25lOyAKLSBsaXN0LXN0eWxlLWltYWdlOiBub25lOyAKLSBtYXJnaW4tbGVmdDogICAgICAwcHg7IAotfQotCi0vKiBoZWFkZXIgLyBmb290ZXIgbmF2IHRhYmxlcyAqLwotdGFibGUubmF2IHsKLSBib3JkZXI6ICAgICBzb2xpZCAxcHggIzMzNjZjYzsKLSBiYWNrZ3JvdW5kOiAjZjJmMmY5OwotIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjk7Ci0gbWFyZ2luLWJvdHRvbTogMC41ZW07Ci19Ci0vKiBkb24ndCBoYXZlIHVuZGVybGluZWQgbGlua3MgaW4gY2h1bmtlZCBuYXYgbWVudXMgKi8KLXRhYmxlLm5hdiBhIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci10YWJsZS5uYXYgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Ci10YWJsZS5uYXYgdGQgeyBmb250LXNpemU6IDg1JTsgfQotCi1jb2RlLCB0dCwgcHJlIHsgZm9udC1zaXplOiAxMjAlOyB9Ci1jb2RlLCB0dCB7IGNvbG9yOiAjNzYxNTk2OyB9Ci0KLWRpdi5saXRlcmFsbGF5b3V0LCBwcmUucHJvZ3JhbWxpc3RpbmcsIHByZS5zY3JlZW4gewotIGNvbG9yOiAgICAgICMwMDAwMDA7Ci0gcGFkZGluZzogICAgMC41ZW07Ci0gYmFja2dyb3VuZDogI2VlZWVlZTsKLSBib3JkZXI6ICAgICAxcHggc29saWQgIzYyNjI2MjsKLSBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwotIG1hcmdpbjogNHB4IDBweCA0cHggMHB4OyAKLX0KLTwvc3R5bGU+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iYm9vayIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLTxkaXY+Ci08ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0idXNlcm1hbiI+PC9hPmJ6aXAyIGFuZCBsaWJiemlwMiwgdmVyc2lvbiAxLjAuNTwvaDE+PC9kaXY+Ci08ZGl2PjxoMiBjbGFzcz0ic3VidGl0bGUiPkEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IgZGF0YSBjb21wcmVzc2lvbjwvaDI+PC9kaXY+Ci08ZGl2PjxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj48ZGl2IGNsYXNzPSJhdXRob3IiPgotPGgzIGNsYXNzPSJhdXRob3IiPgotPHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+SnVsaWFuPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+U2V3YXJkPC9zcGFuPgotPC9oMz4KLTxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj48c3BhbiBjbGFzcz0ib3JnbmFtZSI+aHR0cDovL3d3dy5iemlwLm9yZzxicj48L3NwYW4+PC9kaXY+Ci08L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj5WZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDc8L3A+PC9kaXY+Ci08ZGl2PjxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCCpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkPC9wPjwvZGl2PgotPGRpdj48ZGl2IGNsYXNzPSJsZWdhbG5vdGljZSI+Ci08YSBuYW1lPSJpZDI0OTk4MzMiPjwvYT48cD5UaGlzIHByb2dyYW0sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LCB0aGUKLSAgYXNzb2NpYXRlZCBsaWJyYXJ5IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+LCBhbmQKLSAgYWxsIGRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgqSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZC4KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3A+Ci08cD5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoCi0gIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCi0gIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCi0gICBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCi0gICBmb2xsb3dpbmcgZGlzY2xhaW1lci48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5UaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUKLSAgIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsCi0gICBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuCi0gICBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi0gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPkFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQKLSAgIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwKLSAgIHNvZnR3YXJlLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvCi0gICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiAiQVMgSVMiIEFORCBBTlkKLSAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKLSAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcD4KLTxwPlBBVEVOVFM6IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSwKLSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBhbmQKLSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiBkbyBub3QgdXNlIGFueSBwYXRlbnRlZAotIGFsZ29yaXRobXMuICBIb3dldmVyLCBJIGRvIG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gY2FycnkKLSBvdXQgYSBwYXRlbnQgc2VhcmNoLiAgVGhlcmVmb3JlIEkgY2Fubm90IGdpdmUgYW55IGd1YXJhbnRlZSBvZgotIHRoZSBhYm92ZSBzdGF0ZW1lbnQuCi0gPC9wPgotPC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj4KLTxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KLTxkbD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iI2ludHJvIj4xLiBJbnRyb2R1Y3Rpb248L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9IiN1c2luZyI+Mi4gSG93IHRvIHVzZSBiemlwMjwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbmFtZSI+Mi4xLiBOQU1FPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N5bm9wc2lzIj4yLjIuIFNZTk9QU0lTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Rlc2NyaXB0aW9uIj4yLjMuIERFU0NSSVBUSU9OPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI29wdGlvbnMiPjIuNC4gT1BUSU9OUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNtZW1vcnktbWFuYWdlbWVudCI+Mi41LiBNRU1PUlkgTUFOQUdFTUVOVDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNyZWNvdmVyaW5nIj4yLjYuIFJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcGVyZm9ybWFuY2UiPjIuNy4gUEVSRk9STUFOQ0UgTk9URVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjY2F2ZWF0cyI+Mi44LiBDQVZFQVRTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2F1dGhvciI+Mi45LiBBVVRIT1I8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9IiNsaWJwcm9nIj4zLiAKLVByb2dyYW1taW5nIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4KLTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdG9wLWxldmVsIj4zLjEuIFRvcC1sZXZlbCBzdHJ1Y3R1cmU8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2xsLXN1bW1hcnkiPjMuMS4xLiBMb3ctbGV2ZWwgc3VtbWFyeTwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNobC1zdW1tYXJ5Ij4zLjEuMi4gSGlnaC1sZXZlbCBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3V0aWwtZm5zLXN1bW1hcnkiPjMuMS4zLiBVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Vyci1oYW5kbGluZyI+My4yLiBFcnJvciBoYW5kbGluZzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNsb3ctbGV2ZWwiPjMuMy4gTG93LWxldmVsIGludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpjb21wcmVzcy1pbml0Ij4zLjMuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6Q29tcHJlc3MiPjMuMy4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekNvbXByZXNzLWVuZCI+My4zLjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6RGVjb21wcmVzcy1pbml0Ij4zLjMuNC4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpEZWNvbXByZXNzIj4zLjMuNS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekRlY29tcHJlc3MtZW5kIj4zLjMuNi4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNobC1pbnRlcmZhY2UiPjMuNC4gSGlnaC1sZXZlbCBpbnRlcmZhY2U8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZG9wZW4iPjMuNC4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNienJlYWQiPjMuNC4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZGdldHVudXNlZCI+My40LjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkY2xvc2UiPjMuNC40LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZW9wZW4iPjMuNC41LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZSI+My40LjYuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6d3JpdGVjbG9zZSI+My40LjcuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZW1iZWQiPjMuNC44LiBIYW5kbGluZyBlbWJlZGRlZCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGQtcmR3ciI+My40LjkuIFN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGU8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdXRpbC1mbnMiPjMuNS4gVXRpbGl0eSBmdW5jdGlvbnM8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmNvbXByZXNzIj4zLjUuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmRlY29tcHJlc3MiPjMuNS4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN6bGliLWNvbXBhdCI+My42LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N0ZGlvLWZyZWUiPjMuNy4gVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPi1mcmVlIGVudmlyb25tZW50PC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGRpby1ieWUiPjMuNy4xLiBHZXR0aW5nIHJpZCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNjcml0aWNhbC1lcnJvciI+My43LjIuIENyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3dpbi1kbGwiPjMuOC4gTWFraW5nIGEgV2luZG93cyBETEw8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9IiNtaXNjIj40LiBNaXNjZWxsYW5lYTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbGltaXRzIj40LjEuIExpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3BvcnQtaXNzdWVzIj40LjIuIFBvcnRhYmlsaXR5IGlzc3VlczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNidWdzIj40LjMuIFJlcG9ydGluZyBidWdzPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3BhY2thZ2UiPjQuNC4gRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3JlYWRpbmciPjQuNS4gRnVydGhlciBSZWFkaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPC9kbD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpbnRybyI+PC9hPjEuoEludHJvZHVjdGlvbjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wcmVzc2VzIGZpbGVzCi11c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrLXNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbgotYWxnb3JpdGhtLCBhbmQgSHVmZm1hbiBjb2RpbmcuICBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkKLWNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsCi1MWjc3L0xaNzgtYmFzZWQgY29tcHJlc3NvcnMsIGFuZCBhcHByb2FjaGVzIHRoZSBwZXJmb3JtYW5jZSBvZgotdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgYnVpbHQgb24gdG9wIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiwgYSBmbGV4aWJsZSBsaWJyYXJ5IGZvcgotaGFuZGxpbmcgY29tcHJlc3NlZCBkYXRhIGluIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0LiAgVGhpcyBtYW51YWwKLWRlc2NyaWJlcyBib3RoIGhvdyB0byB1c2UgdGhlIHByb2dyYW0gYW5kIGhvdyB0byB3b3JrIHdpdGggdGhlCi1saWJyYXJ5IGludGVyZmFjZS4gIE1vc3Qgb2YgdGhlIG1hbnVhbCBpcyBkZXZvdGVkIHRvIHRoaXMKLWxpYnJhcnksIG5vdCB0aGUgcHJvZ3JhbSwgd2hpY2ggaXMgZ29vZCBuZXdzIGlmIHlvdXIgaW50ZXJlc3QgaXMKLW9ubHkgaW4gdGhlIHByb2dyYW0uPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48YSBocmVmPSIjdXNpbmciPkhvdyB0byB1c2UgYnppcDI8L2E+IGRlc2NyaWJlcyBob3cgdG8gdXNlCi0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT47IHRoaXMgaXMgdGhlIG9ubHkgcGFydAotIHlvdSBuZWVkIHRvIHJlYWQgaWYgeW91IGp1c3Qgd2FudCB0byBrbm93IGhvdyB0byBvcGVyYXRlIHRoZQotIHByb2dyYW0uPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGEgaHJlZj0iI2xpYnByb2ciPlByb2dyYW1taW5nIHdpdGggbGliYnppcDI8L2E+IGRlc2NyaWJlcyB0aGUKLSBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGluIGRldGFpbCwgYW5kPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGEgaHJlZj0iI21pc2MiPk1pc2NlbGxhbmVhPC9hPiByZWNvcmRzIHNvbWUKLSBtaXNjZWxsYW5lb3VzIG5vdGVzIHdoaWNoIEkgdGhvdWdodCBvdWdodCB0byBiZSByZWNvcmRlZAotIHNvbWV3aGVyZS48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0idXNpbmciPjwvYT4yLqBIb3cgdG8gdXNlIGJ6aXAyPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+Ci08cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Ci08ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbmFtZSI+Mi4xLiBOQU1FPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N5bm9wc2lzIj4yLjIuIFNZTk9QU0lTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Rlc2NyaXB0aW9uIj4yLjMuIERFU0NSSVBUSU9OPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI29wdGlvbnMiPjIuNC4gT1BUSU9OUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNtZW1vcnktbWFuYWdlbWVudCI+Mi41LiBNRU1PUlkgTUFOQUdFTUVOVDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNyZWNvdmVyaW5nIj4yLjYuIFJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcGVyZm9ybWFuY2UiPjIuNy4gUEVSRk9STUFOQ0UgTk9URVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjY2F2ZWF0cyI+Mi44LiBDQVZFQVRTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2F1dGhvciI+Mi45LiBBVVRIT1I8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPgotPC9kaXY+Ci08cD5UaGlzIGNoYXB0ZXIgY29udGFpbnMgYSBjb3B5IG9mIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gbWFuIHBhZ2UsIGFuZCBub3RoaW5nCi1lbHNlLjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibmFtZSI+PC9hPjIuMS6gTkFNRTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IC0gYSBibG9jay1zb3J0aW5nIGZpbGUKLSAgY29tcHJlc3NvciwgdjEuMC40PC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemNhdDwvY29kZT4gLQotICAgZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dDwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiAtCi0gICByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlczwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJzeW5vcHNpcyI+PC9hPjIuMi6gU1lOT1BTSVM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBbCi0gIC1jZGZrcXN0dnpWTDEyMzQ1Njc4OSBdIFsgZmlsZW5hbWVzIC4uLiAgXTwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gWwotICAtZmt2c1ZMIF0gWyBmaWxlbmFtZXMgLi4uICBdPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemNhdDwvY29kZT4gWyAtcyBdIFsKLSAgZmlsZW5hbWVzIC4uLiAgXTwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPgotICBmaWxlbmFtZTwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJkZXNjcmlwdGlvbiI+PC9hPjIuMy6gREVTQ1JJUFRJT048L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gY29tcHJlc3NlcyBmaWxlcwotdXNpbmcgdGhlIEJ1cnJvd3MtV2hlZWxlciBibG9jayBzb3J0aW5nIHRleHQgY29tcHJlc3Npb24KLWFsZ29yaXRobSwgYW5kIEh1ZmZtYW4gY29kaW5nLiAgQ29tcHJlc3Npb24gaXMgZ2VuZXJhbGx5Ci1jb25zaWRlcmFibHkgYmV0dGVyIHRoYW4gdGhhdCBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbAotTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YKLXRoZSBQUE0gZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLjwvcD4KLTxwPlRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltaWxhciB0bwotdGhvc2Ugb2YgR05VIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z3ppcDwvY29kZT4sIGJ1dCB0aGV5IGFyZQotbm90IGlkZW50aWNhbC48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBleHBlY3RzIGEgbGlzdCBvZgotZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvbW1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcwotcmVwbGFjZWQgYnkgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgaXRzZWxmLCB3aXRoIHRoZSBuYW1lCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9yaWdpbmFsX25hbWUuYnoyPC9jb2RlPi4gIEVhY2gKLWNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsIHBlcm1pc3Npb25zLCBhbmQsCi13aGVuIHBvc3NpYmxlLCBvd25lcnNoaXAgYXMgdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWwsIHNvIHRoYXQKLXRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGNvcnJlY3RseSByZXN0b3JlZCBhdCBkZWNvbXByZXNzaW9uIHRpbWUuCi1GaWxlIG5hbWUgaGFuZGxpbmcgaXMgbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8KLW1lY2hhbmlzbSBmb3IgcHJlc2VydmluZyBvcmlnaW5hbCBmaWxlIG5hbWVzLCBwZXJtaXNzaW9ucywKLW93bmVyc2hpcHMgb3IgZGF0ZXMgaW4gZmlsZXN5c3RlbXMgd2hpY2ggbGFjayB0aGVzZSBjb25jZXB0cywgb3IKLWhhdmUgc2VyaW91cyBmaWxlIG5hbWUgbGVuZ3RoIHJlc3RyaWN0aW9ucywgc3VjaCBhcwotTVMtRE9TLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiB3aWxsIGJ5IGRlZmF1bHQgbm90Ci1vdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuICBJZiB5b3Ugd2FudCB0aGlzIHRvIGhhcHBlbiwgc3BlY2lmeQotdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWY8L2NvZGU+IGZsYWcuPC9wPgotPHA+SWYgbm8gZmlsZSBuYW1lcyBhcmUgc3BlY2lmaWVkLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gY29tcHJlc3NlcyBmcm9tIHN0YW5kYXJkCi1pbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIGRlY2xpbmUgdG8gd3JpdGUKLWNvbXByZXNzZWQgb3V0cHV0IHRvIGEgdGVybWluYWwsIGFzIHRoaXMgd291bGQgYmUgZW50aXJlbHkKLWluY29tcHJlaGVuc2libGUgYW5kIHRoZXJlZm9yZSBwb2ludGxlc3MuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiAob3IKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLWQ8L2NvZGU+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMuICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIGJlIGRldGVjdGVkIGFuZAotaWdub3JlZCwgYW5kIGEgd2FybmluZyBpc3N1ZWQuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBhdHRlbXB0cyB0byBndWVzcyB0aGUKLWZpbGVuYW1lIGZvciB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZSBjb21wcmVzc2VkCi1maWxlIGFzIGZvbGxvd3M6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLmJ6MiA8L2NvZGU+Ci0gIGJlY29tZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5maWxlbmFtZTwvY29kZT48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLmJ6IDwvY29kZT4KLSAgYmVjb21lcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lPC9jb2RlPjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWUudGJ6MjwvY29kZT4KLSAgYmVjb21lcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLnRhcjwvY29kZT48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLnRieiA8L2NvZGU+Ci0gIGJlY29tZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5maWxlbmFtZS50YXI8L2NvZGU+PC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hbnlvdGhlcm5hbWUgPC9jb2RlPgotICBiZWNvbWVzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YW55b3RoZXJuYW1lLm91dDwvY29kZT48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5JZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4uYno8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4udGJ6MjwvY29kZT4gb3IKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LnRiejwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wbGFpbnMgdGhhdCBpdCBjYW5ub3QKLWd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZQotd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5vdXQ8L2NvZGU+IGFwcGVuZGVkLjwvcD4KLTxwPkFzIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzCi1kZWNvbXByZXNzaW9uIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gd2lsbCBjb3JyZWN0bHkKLWRlY29tcHJlc3MgYSBmaWxlIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlCi1jb21wcmVzc2VkIGZpbGVzLiAgVGhlIHJlc3VsdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKLWNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLiAgSW50ZWdyaXR5IHRlc3RpbmcKLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi10PC9jb2RlPikgb2YgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQKLWZpbGVzIGlzIGFsc28gc3VwcG9ydGVkLjwvcD4KLTxwPllvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSBzdGFuZGFyZAotb3V0cHV0IGJ5IGdpdmluZyB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tYzwvY29kZT4gZmxhZy4KLU11bHRpcGxlIGZpbGVzIG1heSBiZSBjb21wcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlCi1yZXN1bHRpbmcgb3V0cHV0cyBhcmUgZmVkIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZgotbXVsdGlwbGUgZmlsZXMgaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtIGNvbnRhaW5pbmcKLW11bHRpcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5IGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB2ZXJzaW9uIDAuOS4wIG9yIGxhdGVyLgotRWFybGllciB2ZXJzaW9ucyBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsCi1zdG9wIGFmdGVyIGRlY29tcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6Y2F0PC9jb2RlPiAob3IKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLWRjPC9jb2RlPikgZGVjb21wcmVzc2VzIGFsbAotc3BlY2lmaWVkIGZpbGVzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gd2lsbCByZWFkIGFyZ3VtZW50cwotZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaSVAyPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpJUDwvY29kZT4sIGluIHRoYXQgb3JkZXIsIGFuZCB3aWxsCi1wcm9jZXNzIHRoZW0gYmVmb3JlIGFueSBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi1UaGlzIGdpdmVzIGEgY29udmVuaWVudCB3YXkgdG8gc3VwcGx5IGRlZmF1bHQgYXJndW1lbnRzLjwvcD4KLTxwPkNvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gaWYgdGhlIGNvbXByZXNzZWQKLWZpbGUgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcyB0aGFuCi1hYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZSBjb21wcmVzc2lvbgotbWVjaGFuaXNtIGhhcyBhIGNvbnN0YW50IG92ZXJoZWFkIGluIHRoZSByZWdpb24gb2YgNTAgYnl0ZXMuCi1SYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQgb2YgbW9zdCBmaWxlIGNvbXByZXNzb3JzKSBpcwotY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlciBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZAotMC41JS48L3A+Ci08cD5BcyBhIHNlbGYtY2hlY2sgZm9yIHlvdXIgcHJvdGVjdGlvbiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHVzZXMgMzItYml0IENSQ3MgdG8gbWFrZQotc3VyZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiBhIGZpbGUgaXMgaWRlbnRpY2FsIHRvIHRoZQotb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cHRpb24gb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwKLWFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncyBpbgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gKGhvcGVmdWxseSB2ZXJ5IHVubGlrZWx5KS4KLVRoZSBjaGFuY2VzIG9mIGRhdGEgY29ycnVwdGlvbiBnb2luZyB1bmRldGVjdGVkIGlzIG1pY3Jvc2NvcGljLAotYWJvdXQgb25lIGNoYW5jZSBpbiBmb3VyIGJpbGxpb24gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBCZQotYXdhcmUsIHRob3VnaCwgdGhhdCB0aGUgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQKLWNhbiBvbmx5IHRlbGwgeW91IHRoYXQgc29tZXRoaW5nIGlzIHdyb25nLiAgSXQgY2FuJ3QgaGVscCB5b3UKLXJlY292ZXIgdGhlIG9yaWdpbmFsIHVuY29tcHJlc3NlZCBkYXRhLiAgWW91IGNhbiB1c2UKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB0byB0cnkgdG8gcmVjb3ZlcgotZGF0YSBmcm9tIGRhbWFnZWQgZmlsZXMuPC9wPgotPHA+UmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgMSBmb3IgZW52aXJvbm1lbnRhbAotcHJvYmxlbXMgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCBldGMuKSwgMgotdG8gaW5kaWNhdGUgYSBjb3JydXB0IGNvbXByZXNzZWQgZmlsZSwgMyBmb3IgYW4gaW50ZXJuYWwKLWNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHRvIHBhbmljLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJvcHRpb25zIj48L2E+Mi40LqBPUFRJT05TPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1jIC0tc3Rkb3V0PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPkNvbXByZXNzIG9yIGRlY29tcHJlc3MgdG8gc3RhbmRhcmQKLSAgb3V0cHV0LjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1kIC0tZGVjb21wcmVzczwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5Gb3JjZSBkZWNvbXByZXNzaW9uLgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiwKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiBhbmQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemNhdDwvY29kZT4gYXJlIHJlYWxseSB0aGUgc2FtZQotICBwcm9ncmFtLCBhbmQgdGhlIGRlY2lzaW9uIGFib3V0IHdoYXQgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24KLSAgdGhlIGJhc2lzIG9mIHdoaWNoIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdAotICBtZWNoYW5pc20sIGFuZCBmb3JjZXMgYnppcDIgdG8gZGVjb21wcmVzcy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4teiAtLWNvbXByZXNzPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlRoZSBjb21wbGVtZW50IHRvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWQ8L2NvZGU+OiBmb3JjZXMgY29tcHJlc3Npb24sCi0gIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9rYXRpb24gbmFtZS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tdCAtLXRlc3Q8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Q2hlY2sgaW50ZWdyaXR5IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSwgYnV0Ci0gIGRvbid0IGRlY29tcHJlc3MgdGhlbS4gIFRoaXMgcmVhbGx5IHBlcmZvcm1zIGEgdHJpYWwKLSAgZGVjb21wcmVzc2lvbiBhbmQgdGhyb3dzIGF3YXkgdGhlIHJlc3VsdC48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZiAtLWZvcmNlPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPgotPHA+Rm9yY2Ugb3ZlcndyaXRlIG9mIG91dHB1dCBmaWxlcy4gIE5vcm1hbGx5LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIG5vdCBvdmVyd3JpdGUKLSAgZXhpc3Rpbmcgb3V0cHV0IGZpbGVzLiAgQWxzbyBmb3JjZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdG8gYnJlYWsgaGFyZCBsaW5rcyB0bwotICBmaWxlcywgd2hpY2ggaXQgb3RoZXJ3aXNlIHdvdWxkbid0IGRvLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IG5vcm1hbGx5IGRlY2xpbmVzCi0gIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUgY29ycmVjdCBtYWdpYyBoZWFkZXIKLSAgYnl0ZXMuIElmIGZvcmNlZCAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZjwvY29kZT4pLAotICBob3dldmVyLCBpdCB3aWxsIHBhc3Mgc3VjaCBmaWxlcyB0aHJvdWdoIHVubW9kaWZpZWQuIFRoaXMgaXMKLSAgaG93IEdOVSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmd6aXA8L2NvZGU+IGJlaGF2ZXMuPC9wPgotPC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tayAtLWtlZXA8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+S2VlcCAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcKLSAgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbi48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tcyAtLXNtYWxsPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPgotPHA+UmVkdWNlIG1lbW9yeSB1c2FnZSwgZm9yIGNvbXByZXNzaW9uLAotICBkZWNvbXByZXNzaW9uIGFuZCB0ZXN0aW5nLiAgRmlsZXMgYXJlIGRlY29tcHJlc3NlZCBhbmQgdGVzdGVkCi0gIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkgcmVxdWlyZXMgMi41IGJ5dGVzIHBlcgotICBibG9jayBieXRlLiAgVGhpcyBtZWFucyBhbnkgZmlsZSBjYW4gYmUgZGVjb21wcmVzc2VkIGluIDIzMDBrCi0gIG9mIG1lbW9yeSwgYWxiZWl0IGF0IGFib3V0IGhhbGYgdGhlIG5vcm1hbCBzcGVlZC48L3A+Ci08cD5EdXJpbmcgY29tcHJlc3Npb24sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXM8L2NvZGU+Ci0gIHNlbGVjdHMgYSBibG9jayBzaXplIG9mIDIwMGssIHdoaWNoIGxpbWl0cyBtZW1vcnkgdXNlIHRvIGFyb3VuZAotICB0aGUgc2FtZSBmaWd1cmUsIGF0IHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uICBJbgotICBzaG9ydCwgaWYgeW91ciBtYWNoaW5lIGlzIGxvdyBvbiBtZW1vcnkgKDggbWVnYWJ5dGVzIG9yIGxlc3MpLAotICB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tczwvY29kZT4gZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgPGEgaHJlZj0iI21lbW9yeS1tYW5hZ2VtZW50Ij5NRU1PUlkgTUFOQUdFTUVOVDwvYT4gYmVsb3cuPC9wPgotPC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tcSAtLXF1aWV0PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4KLSAgTWVzc2FnZXMgcGVydGFpbmluZyB0byBJL08gZXJyb3JzIGFuZCBvdGhlciBjcml0aWNhbCBldmVudHMKLSAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tdiAtLXZlcmJvc2U8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+VmVyYm9zZSBtb2RlIC0tIHNob3cgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGZvcgotICBlYWNoIGZpbGUgcHJvY2Vzc2VkLiAgRnVydGhlcgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi12PC9jb2RlPidzIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkKLSAgbGV2ZWwsIHNwZXdpbmcgb3V0IGxvdHMgb2YgaW5mb3JtYXRpb24gd2hpY2ggaXMgcHJpbWFyaWx5IG9mCi0gIGludGVyZXN0IGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1MIC0tbGljZW5zZSAtViAtLXZlcnNpb248L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+RGlzcGxheSB0aGUgc29mdHdhcmUgdmVyc2lvbiwgbGljZW5zZSB0ZXJtcyBhbmQKLSAgY29uZGl0aW9ucy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tMTwvY29kZT4gKG9yCi0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLWZhc3Q8L2NvZGU+KSB0bwotIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LTk8L2NvZGU+IChvcgotIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWJlc3Q8L2NvZGU+KTwvc3Bhbj48L2R0PgotPGRkPjxwPlNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4uICA5MDAgawotICB3aGVuIGNvbXByZXNzaW5nLiAgSGFzIG5vIGVmZmVjdCB3aGVuIGRlY29tcHJlc3NpbmcuICBTZWUgPGEgaHJlZj0iI21lbW9yeS1tYW5hZ2VtZW50Ij5NRU1PUlkgTUFOQUdFTUVOVDwvYT4gYmVsb3cuICBUaGUKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLWZhc3Q8L2NvZGU+IGFuZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tYmVzdDwvY29kZT4gYWxpYXNlcyBhcmUgcHJpbWFyaWx5Ci0gIGZvciBHTlUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nemlwPC9jb2RlPiBjb21wYXRpYmlsaXR5LgotICBJbiBwYXJ0aWN1bGFyLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tZmFzdDwvY29kZT4gZG9lc24ndAotICBtYWtlIHRoaW5ncyBzaWduaWZpY2FudGx5IGZhc3Rlci4gIEFuZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tYmVzdDwvY29kZT4gbWVyZWx5IHNlbGVjdHMgdGhlCi0gIGRlZmF1bHQgYmVoYXZpb3VyLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywKLSAgZXZlbiBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbmRsZQotICBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyB3aXRoIGEgZGFzaCwgZm9yIGV4YW1wbGU6Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLS0KLSAgLW15ZmlsZW5hbWU8L2NvZGU+LjwvcD48L2RkPgotPGR0PgotPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1yZXBldGl0aXZlLWZhc3Q8L2NvZGU+LCA8L3NwYW4+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1yZXBldGl0aXZlLWJlc3Q8L2NvZGU+PC9zcGFuPgotPC9kdD4KLTxkZD48cD5UaGVzZSBmbGFncyBhcmUgcmVkdW5kYW50IGluIHZlcnNpb25zIDAuOS41IGFuZAotICBhYm92ZS4gIFRoZXkgcHJvdmlkZWQgc29tZSBjb2Fyc2UgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvdXIgb2YKLSAgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyc2lvbnMsIHdoaWNoIHdhcyBzb21ldGltZXMKLSAgdXNlZnVsLiAgMC45LjUgYW5kIGFib3ZlIGhhdmUgYW4gaW1wcm92ZWQgYWxnb3JpdGhtIHdoaWNoCi0gIHJlbmRlcnMgdGhlc2UgZmxhZ3MgaXJyZWxldmFudC48L3A+PC9kZD4KLTwvZGw+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibWVtb3J5LW1hbmFnZW1lbnQiPjwvYT4yLjUuoE1FTU9SWSBNQU5BR0VNRU5UPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGNvbXByZXNzZXMgbGFyZ2UKLWZpbGVzIGluIGJsb2Nrcy4gIFRoZSBibG9jayBzaXplIGFmZmVjdHMgYm90aCB0aGUgY29tcHJlc3Npb24KLXJhdGlvIGFjaGlldmVkLCBhbmQgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBjb21wcmVzc2lvbgotYW5kIGRlY29tcHJlc3Npb24uICBUaGUgZmxhZ3MgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tMTwvY29kZT4KLXRocm91Z2ggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tOTwvY29kZT4gc3BlY2lmeSB0aGUgYmxvY2sKLXNpemUgdG8gYmUgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KQotcmVzcGVjdGl2ZWx5LiAgQXQgZGVjb21wcmVzc2lvbiB0aW1lLCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvcgotY29tcHJlc3Npb24gaXMgcmVhZCBmcm9tIHRoZSBoZWFkZXIgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IHRoZW4gYWxsb2NhdGVzIGl0c2VsZgotanVzdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29tcHJlc3MgdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUKLXN0b3JlZCBpbiBjb21wcmVzc2VkIGZpbGVzLCBpdCBmb2xsb3dzIHRoYXQgdGhlIGZsYWdzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0xPC9jb2RlPiB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tOTwvY29kZT4gYXJlIGlycmVsZXZhbnQgdG8gYW5kIHNvCi1pZ25vcmVkIGR1cmluZyBkZWNvbXByZXNzaW9uLjwvcD4KLTxwPkNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJlcXVpcmVtZW50cywgaW4gYnl0ZXMsIGNhbiBiZQotZXN0aW1hdGVkIGFzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Db21wcmVzc2lvbjogICA0MDBrICsgKCA4IHggYmxvY2sgc2l6ZSApCi0KLURlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICk8L3ByZT4KLTxwPkxhcmdlciBibG9jayBzaXplcyBnaXZlIHJhcGlkbHkgZGltaW5pc2hpbmcgbWFyZ2luYWwKLXJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28gb3IKLXRocmVlIGh1bmRyZWQgayBvZiBibG9jayBzaXplLCBhIGZhY3Qgd29ydGggYmVhcmluZyBpbiBtaW5kIHdoZW4KLXVzaW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IG9uIHNtYWxsIG1hY2hpbmVzLgotSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYXBwcmVjaWF0ZSB0aGF0IHRoZSBkZWNvbXByZXNzaW9uIG1lbW9yeQotcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgdGhlIGNob2ljZSBvZiBibG9jawotc2l6ZS48L3A+Ci08cD5Gb3IgZmlsZXMgY29tcHJlc3NlZCB3aXRoIHRoZSBkZWZhdWx0IDkwMGsgYmxvY2sgc2l6ZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gd2lsbCByZXF1aXJlIGFib3V0IDM3MDAKLWtieXRlcyB0byBkZWNvbXByZXNzLiAgVG8gc3VwcG9ydCBkZWNvbXByZXNzaW9uIG9mIGFueSBmaWxlIG9uIGEKLTQgbWVnYWJ5dGUgbWFjaGluZSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiBoYXMKLWFuIG9wdGlvbiB0byBkZWNvbXByZXNzIHVzaW5nIGFwcHJveGltYXRlbHkgaGFsZiB0aGlzIGFtb3VudCBvZgotbWVtb3J5LCBhYm91dCAyMzAwIGtieXRlcy4gIERlY29tcHJlc3Npb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsCi1zbyB5b3Ugc2hvdWxkIHVzZSB0aGlzIG9wdGlvbiBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudAotZmxhZyBpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1zPC9jb2RlPi48L3A+Ci08cD5JbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeQotY29uc3RyYWludHMgYWxsb3csIHNpbmNlIHRoYXQgbWF4aW1pc2VzIHRoZSBjb21wcmVzc2lvbiBhY2hpZXZlZC4KLUNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dWFsbHkgdW5hZmZlY3RlZCBieQotYmxvY2sgc2l6ZS48L3A+Ci08cD5Bbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluIGEKLXNpbmdsZSBibG9jayAtLSB0aGF0IG1lYW5zIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyIHVzaW5nIGEKLWxhcmdlIGJsb2NrIHNpemUuICBUaGUgYW1vdW50IG9mIHJlYWwgbWVtb3J5IHRvdWNoZWQgaXMKLXByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgc2luY2UgdGhlIGZpbGUgaXMgc21hbGxlcgotdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nIGEgZmlsZSAyMCwwMDAgYnl0ZXMgbG9uZwotd2l0aCB0aGUgZmxhZyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi05PC9jb2RlPiB3aWxsIGNhdXNlIHRoZQotY29tcHJlc3NvciB0byBhbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaAotNDAwayArIDIwMDAwICogOCA9IDU2MCBrYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZSBkZWNvbXByZXNzb3IKLXdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0IG9ubHkgdG91Y2ggMTAwayArIDIwMDAwICogNCA9IDE4MAota2J5dGVzLjwvcD4KLTxwPkhlcmUgaXMgYSB0YWJsZSB3aGljaCBzdW1tYXJpc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2FnZQotZm9yIGRpZmZlcmVudCBibG9jayBzaXplcy4gIEFsc28gcmVjb3JkZWQgaXMgdGhlIHRvdGFsIGNvbXByZXNzZWQKLXNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc3Npb24gQ29ycHVzCi10b3RhbGxpbmcgMywxNDEsNjIyIGJ5dGVzLiAgVGhpcyBjb2x1bW4gZ2l2ZXMgc29tZSBmZWVsIGZvciBob3cKLWNvbXByZXNzaW9uIHZhcmllcyB3aXRoIGJsb2NrIHNpemUuICBUaGVzZSBmaWd1cmVzIHRlbmQgdG8KLXVuZGVyc3RhdGUgdGhlIGFkdmFudGFnZSBvZiBsYXJnZXIgYmxvY2sgc2l6ZXMgZm9yIGxhcmdlciBmaWxlcywKLXNpbmNlIHRoZSBDb3JwdXMgaXMgZG9taW5hdGVkIGJ5IHNtYWxsZXIgZmlsZXMuPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotRmxhZyAgICAgdXNhZ2UgICAgICB1c2FnZSAgICAgICAtcyB1c2FnZSAgICAgU2l6ZQotCi0gLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAtMyAgICAgIDI4MDBrICAgICAgMTMwMGsgICAgICAgICA4NTBrICAgICAgODYwMzM4Ci0gLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAtNiAgICAgIDUyMDBrICAgICAgMjUwMGsgICAgICAgIDE2MDBrICAgICAgODM4NjI2Ci0gLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAtOSAgICAgIDc2MDBrICAgICAgMzcwMGsgICAgICAgIDIzNTBrICAgICAgODI4NjQyPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0icmVjb3ZlcmluZyI+PC9hPjIuNi6gUkVDT1ZFUklORyBEQVRBIEZST00gREFNQUdFRCBGSUxFUzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wcmVzc2VzIGZpbGVzIGluCi1ibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzIGxvbmcuICBFYWNoIGJsb2NrIGlzIGhhbmRsZWQKLWluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zbWlzc2lvbiBlcnJvciBjYXVzZXMgYQotbXVsdGktYmxvY2sgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4uYnoyPC9jb2RlPiBmaWxlIHRvIGJlY29tZQotZGFtYWdlZCwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlY292ZXIgZGF0YSBmcm9tIHRoZSB1bmRhbWFnZWQKLWJsb2NrcyBpbiB0aGUgZmlsZS48L3A+Ci08cD5UaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrIGlzIGRlbGltaXRlZCBieQotYSA0OC1iaXQgcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUgYmxvY2sKLWJvdW5kYXJpZXMgd2l0aCByZWFzb25hYmxlIGNlcnRhaW50eS4gIEVhY2ggYmxvY2sgYWxzbyBjYXJyaWVzCi1pdHMgb3duIDMyLWJpdCBDUkMsIHNvIGRhbWFnZWQgYmxvY2tzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20KLXVuZGFtYWdlZCBvbmVzLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiBpcyBhIHNpbXBsZQotcHJvZ3JhbSB3aG9zZSBwdXJwb3NlIGlzIHRvIHNlYXJjaCBmb3IgYmxvY2tzIGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jawotb3V0IGludG8gaXRzIG93biA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGUuICBZb3UKLWNhbiB0aGVuIHVzZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyIC10PC9jb2RlPiB0byB0ZXN0Ci10aGUgaW50ZWdyaXR5IG9mIHRoZSByZXN1bHRpbmcgZmlsZXMsIGFuZCBkZWNvbXByZXNzIHRob3NlIHdoaWNoCi1hcmUgdW5kYW1hZ2VkLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB0YWtlcyBhCi1zaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW1hZ2VkIGZpbGUsIGFuZCB3cml0ZXMgYQotbnVtYmVyIG9mIGZpbGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cmVjMDAwMWZpbGUuYnoyPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cmVjMDAwMmZpbGUuYnoyPC9jb2RlPiwgZXRjLCBjb250YWluaW5nCi10aGUgZXh0cmFjdGVkIGJsb2Nrcy4gIFRoZSBvdXRwdXQgZmlsZW5hbWVzIGFyZSBkZXNpZ25lZCBzbyB0aGF0Ci10aGUgdXNlIG9mIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb2Nlc3NpbmcgLS0gZm9yIGV4YW1wbGUsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyIC1kYyByZWMqZmlsZS5iejIgJmd0OwotcmVjb3ZlcmVkX2RhdGE8L2NvZGU+IC0tIGxpc3RzIHRoZSBmaWxlcyBpbiB0aGUgY29ycmVjdAotb3JkZXIuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IHNob3VsZCBiZSBvZgotbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4KLWZpbGVzLCBhcyB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5IGZ1dGlsZQotdG8gdXNlIGl0IG9uIGRhbWFnZWQgc2luZ2xlLWJsb2NrIGZpbGVzLCBzaW5jZSBhIGRhbWFnZWQgYmxvY2sKLWNhbm5vdCBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW5pbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEKLWxvc3MgdGhyb3VnaCBtZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIKLWNvbXByZXNzaW5nIHdpdGggYSBzbWFsbGVyIGJsb2NrIHNpemUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InBlcmZvcm1hbmNlIj48L2E+Mi43LqBQRVJGT1JNQU5DRSBOT1RFUzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5UaGUgc29ydGluZyBwaGFzZSBvZiBjb21wcmVzc2lvbiBnYXRoZXJzIHRvZ2V0aGVyIHNpbWlsYXIKLXN0cmluZ3MgaW4gdGhlIGZpbGUuICBCZWNhdXNlIG9mIHRoaXMsIGZpbGVzIGNvbnRhaW5pbmcgdmVyeSBsb25nCi1ydW5zIG9mIHJlcGVhdGVkIHN5bWJvbHMsIGxpa2UgImFhYmFhYmFhYmFhYiAuLi4iICAocmVwZWF0ZWQKLXNldmVyYWwgaHVuZHJlZCB0aW1lcykgbWF5IGNvbXByZXNzIG1vcmUgc2xvd2x5IHRoYW4gbm9ybWFsLgotVmVyc2lvbnMgMC45LjUgYW5kIGFib3ZlIGZhcmUgbXVjaCBiZXR0ZXIgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucwotaW4gdGhpcyByZXNwZWN0LiAgVGhlIHJhdGlvIGJldHdlZW4gd29yc3QtY2FzZSBhbmQgYXZlcmFnZS1jYXNlCi1jb21wcmVzc2lvbiB0aW1lIGlzIGluIHRoZSByZWdpb24gb2YgMTA6MS4gIEZvciBwcmV2aW91cwotdmVyc2lvbnMsIHRoaXMgZmlndXJlIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXZ2dnY8L2NvZGU+IG9wdGlvbiB0byBtb25pdG9yIHByb2dyZXNzCi1pbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LjwvcD4KLTxwPkRlY29tcHJlc3Npb24gc3BlZWQgaXMgdW5hZmZlY3RlZCBieSB0aGVzZQotcGhlbm9tZW5hLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHVzdWFsbHkgYWxsb2NhdGVzCi1zZXZlcmFsIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8gb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwKLW92ZXIgaXQgaW4gYSBmYWlybHkgcmFuZG9tIGZhc2hpb24uICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsCi1ib3RoIGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZywgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5Ci10aGUgc3BlZWQgYXQgd2hpY2ggeW91ciBtYWNoaW5lIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLUJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byByZWR1Y2UgdGhlIG1pc3MKLXJhdGUgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGdpdmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGxhcmdlCi1wZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHdpbGwgcGVyZm9ybSBiZXN0IG9uCi1tYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJjYXZlYXRzIj48L2E+Mi44LqBDQVZFQVRTPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkkvTyBlcnJvciBtZXNzYWdlcyBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHRyaWVzIGhhcmQgdG8gZGV0ZWN0IEkvTwotZXJyb3JzIGFuZCBleGl0IGNsZWFubHksIGJ1dCB0aGUgZGV0YWlscyBvZiB3aGF0IHRoZSBwcm9ibGVtIGlzCi1zb21ldGltZXMgc2VlbSByYXRoZXIgbWlzbGVhZGluZy48L3A+Ci08cD5UaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjUgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LiAgQ29tcHJlc3NlZCBkYXRhIGNyZWF0ZWQgYnkKLXRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcyBhbmQgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUKLXByZXZpb3VzIHB1YmxpYyByZWxlYXNlcywgdmVyc2lvbnMgMC4xcGwyLCAwLjkuMCBhbmQgMC45LjUsIDEuMC4wLAotMS4wLjEsIDEuMC4yIGFuZCAxLjAuMywgYnV0IHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb246IDAuOS4wIGFuZAotYWJvdmUgY2FuIGNvcnJlY3RseSBkZWNvbXByZXNzIG11bHRpcGxlIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLgotMC4xcGwyIGNhbm5vdCBkbyB0aGlzOyBpdCB3aWxsIHN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZyBqdXN0IHRoZSBmaXJzdAotZmlsZSBpbiB0aGUgc3RyZWFtLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB2ZXJzaW9ucwotcHJpb3IgdG8gMS4wLjIgdXNlZCAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4KLWNvbXByZXNzZWQgZmlsZXMsIHNvIGl0IGNvdWxkIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlCi10aGFuIDUxMiBtZWdhYnl0ZXMgbG9uZy4gIFZlcnNpb25zIDEuMC4yIGFuZCBhYm92ZSB1c2UgNjQtYml0IGludHMKLW9uIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZCB0YXJnZXRzLCBhbmQKLVdpbmRvd3MpLiBUbyBlc3RhYmxpc2ggd2hldGhlciBvciBub3QKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB3YXMgYnVpbHQgd2l0aCBzdWNoCi1hIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4gSW4gYW55IGV2ZW50IHlvdSBjYW4KLWJ1aWxkIHlvdXJzZWxmIGFuIHVubGltaXRlZCB2ZXJzaW9uIGlmIHlvdSBjYW4gcmVjb21waWxlIGl0IHdpdGgKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TWF5YmVVSW50NjQ8L2NvZGU+IHNldCB0byBiZSBhbgotdW5zaWduZWQgNjQtYml0IGludGVnZXIuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImF1dGhvciI+PC9hPjIuOS6gQVVUSE9SPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkp1bGlhbiBTZXdhcmQsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmpzZXdhcmRAYnppcC5vcmc8L2NvZGU+PC9wPgotPHA+VGhlIGlkZWFzIGVtYm9kaWVkIGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlCi1mb2xsb3dpbmcgcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUKLWJsb2NrIHNvcnRpbmcgdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyIChhZ2FpbiwgZm9yIHRoZQotSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2RpbmcgbW9kZWwgaW4KLXRoZSBvcmlnaW5hbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXA8L2NvZGU+LCBhbmQgbWFueQotcmVmaW5lbWVudHMpLCBhbmQgQWxpc3RhaXIgTW9mZmF0LCBSYWRmb3JkIE5lYWwgYW5kIElhbiBXaXR0ZW4KLShmb3IgdGhlIGFyaXRobWV0aWMgY29kZXIgaW4gdGhlIG9yaWdpbmFsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXA8L2NvZGU+KS4gIEkgYW0gbXVjaCBpbmRlYnRlZCBmb3IKLXRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFudWFsIGluIHRoZSBzb3VyY2UKLWRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCi12b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywKLXNvIGFzIHRvIHNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0bwotaW1wcm92ZSB0aGUgd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIAotRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdW1lbnRhdGlvbi4KLU1hbnkgcGVvcGxlIHNlbnQKLXBhdGNoZXMsIGhlbHBlZCB3aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zLCBsZW50IG1hY2hpbmVzLCBnYXZlCi1hZHZpY2UgYW5kIHdlcmUgZ2VuZXJhbGx5IGhlbHBmdWwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0ibGlicHJvZyI+PC9hPjMuoAotUHJvZ3JhbW1pbmcgd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+Ci08cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Ci08ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdG9wLWxldmVsIj4zLjEuIFRvcC1sZXZlbCBzdHJ1Y3R1cmU8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2xsLXN1bW1hcnkiPjMuMS4xLiBMb3ctbGV2ZWwgc3VtbWFyeTwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNobC1zdW1tYXJ5Ij4zLjEuMi4gSGlnaC1sZXZlbCBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3V0aWwtZm5zLXN1bW1hcnkiPjMuMS4zLiBVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Vyci1oYW5kbGluZyI+My4yLiBFcnJvciBoYW5kbGluZzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNsb3ctbGV2ZWwiPjMuMy4gTG93LWxldmVsIGludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpjb21wcmVzcy1pbml0Ij4zLjMuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6Q29tcHJlc3MiPjMuMy4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekNvbXByZXNzLWVuZCI+My4zLjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6RGVjb21wcmVzcy1pbml0Ij4zLjMuNC4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpEZWNvbXByZXNzIj4zLjMuNS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekRlY29tcHJlc3MtZW5kIj4zLjMuNi4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNobC1pbnRlcmZhY2UiPjMuNC4gSGlnaC1sZXZlbCBpbnRlcmZhY2U8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZG9wZW4iPjMuNC4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNienJlYWQiPjMuNC4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZGdldHVudXNlZCI+My40LjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkY2xvc2UiPjMuNC40LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZW9wZW4iPjMuNC41LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZSI+My40LjYuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6d3JpdGVjbG9zZSI+My40LjcuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZW1iZWQiPjMuNC44LiBIYW5kbGluZyBlbWJlZGRlZCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGQtcmR3ciI+My40LjkuIFN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGU8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdXRpbC1mbnMiPjMuNS4gVXRpbGl0eSBmdW5jdGlvbnM8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmNvbXByZXNzIj4zLjUuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmRlY29tcHJlc3MiPjMuNS4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN6bGliLWNvbXBhdCI+My42LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N0ZGlvLWZyZWUiPjMuNy4gVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPi1mcmVlIGVudmlyb25tZW50PC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGRpby1ieWUiPjMuNy4xLiBHZXR0aW5nIHJpZCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNjcml0aWNhbC1lcnJvciI+My43LjIuIENyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3dpbi1kbGwiPjMuOC4gTWFraW5nIGEgV2luZG93cyBETEw8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPgotPC9kaXY+Ci08cD5UaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+LjwvcD4KLTxwPkZvciBnZW5lcmFsIGJhY2tncm91bmQgaW5mb3JtYXRpb24sIHBhcnRpY3VsYXJseSBhYm91dAotbWVtb3J5IHVzZSBhbmQgcGVyZm9ybWFuY2UgYXNwZWN0cywgeW91J2QgYmUgd2VsbCBhZHZpc2VkIHRvIHJlYWQKLTxhIGhyZWY9IiN1c2luZyI+SG93IHRvIHVzZSBiemlwMjwvYT4gYXMgd2VsbC48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InRvcC1sZXZlbCI+PC9hPjMuMS6gVG9wLWxldmVsIHN0cnVjdHVyZTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiBpcyBhIGZsZXhpYmxlCi1saWJyYXJ5IGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZyBkYXRhIGluIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZGF0YSBmb3JtYXQuICBBbHRob3VnaAotcGFja2FnZWQgYXMgYSBzaW5nbGUgZW50aXR5LCBpdCBoZWxwcyB0byByZWdhcmQgdGhlIGxpYnJhcnkgYXMKLXRocmVlIHNlcGFyYXRlIHBhcnRzOiB0aGUgbG93IGxldmVsIGludGVyZmFjZSwgYW5kIHRoZSBoaWdoIGxldmVsCi1pbnRlcmZhY2UsIGFuZCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zLjwvcD4KLTxwPlRoZSBzdHJ1Y3R1cmUgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+J3MgaW50ZXJmYWNlcyBpcyBzaW1pbGFyCi10byB0aGF0IG9mIEplYW4tbG91cCBHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzIGV4Y2VsbGVudAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij56bGliPC9jb2RlPiBsaWJyYXJ5LjwvcD4KLTxwPkFsbCBleHRlcm5hbGx5IHZpc2libGUgc3ltYm9scyBoYXZlIG5hbWVzIGJlZ2lubmluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfPC9jb2RlPi4gIFRoaXMgaXMgbmV3IGluIHZlcnNpb24KLTEuMC4gIFRoZSBpbnRlbnRpb24gaXMgdG8gbWluaW1pc2UgcG9sbHV0aW9uIG9mIHRoZSBuYW1lc3BhY2VzIG9mCi1saWJyYXJ5IGNsaWVudHMuPC9wPgotPHA+VG8gdXNlIGFueSBwYXJ0IG9mIHRoZSBsaWJyYXJ5LCB5b3UgbmVlZCB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4jaW5jbHVkZSAmbHQ7YnpsaWIuaCZndDs8L2NvZGU+Ci1pbnRvIHlvdXIgc291cmNlcy48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJsbC1zdW1tYXJ5Ij48L2E+My4xLjEuoExvdy1sZXZlbCBzdW1tYXJ5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNlcnZpY2VzIGZvciBjb21wcmVzc2luZyBhbmQKLWRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkuICBUaGVyZSdzIG5vIHByb3Zpc2lvbiBmb3IgZGVhbGluZwotd2l0aCBmaWxlcywgc3RyZWFtcyBvciBhbnkgb3RoZXIgSS9PIG1lY2hhbmlzbXMsIGp1c3Qgc3RyYWlnaHQKLW1lbW9yeS10by1tZW1vcnkgd29yay4gIEluIGZhY3QsIHRoaXMgcGFydCBvZiB0aGUgbGlicmFyeSBjYW4gYmUKLWNvbXBpbGVkIHdpdGhvdXQgaW5jbHVzaW9uIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvLmg8L2NvZGU+LCB3aGljaCBtYXkgYmUgaGVscGZ1bAotZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucy48L3A+Ci08cD5UaGUgbG93LWxldmVsIHBhcnQgb2YgdGhlIGxpYnJhcnkgaGFzIG5vIGdsb2JhbCB2YXJpYWJsZXMKLWFuZCBpcyB0aGVyZWZvcmUgdGhyZWFkLXNhZmUuPC9wPgotPHA+U2l4IHJvdXRpbmVzIG1ha2UgdXAgdGhlIGxvdyBsZXZlbCBpbnRlcmZhY2U6Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPiBmb3IKLWNvbXByZXNzaW9uLCBhbmQgYSBjb3JyZXNwb25kaW5nIHRyaW8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT4gZm9yCi1kZWNvbXByZXNzaW9uLiAgVGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KkluaXQ8L2NvZGU+Ci1mdW5jdGlvbnMgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGFuZCBkbwotb3RoZXIgaW5pdGlhbGlzYXRpb25zLCB3aGlsc3QgdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipFbmQ8L2NvZGU+IGZ1bmN0aW9ucyBjbG9zZSBkb3duCi1vcGVyYXRpb25zIGFuZCByZWxlYXNlIG1lbW9yeS48L3A+Ci08cD5UaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPi4gIFRoZXNlCi1jb21wcmVzcyBhbmQgZGVjb21wcmVzcyBkYXRhIGZyb20gYSB1c2VyLXN1cHBsaWVkIGlucHV0IGJ1ZmZlciB0bwotYSB1c2VyLXN1cHBsaWVkIG91dHB1dCBidWZmZXIuICBUaGVzZSBidWZmZXJzIGNhbiBiZSBhbnkgc2l6ZTsKLWFyYml0cmFyeSBxdWFudGl0aWVzIG9mIGRhdGEgYXJlIGhhbmRsZWQgYnkgbWFraW5nIHJlcGVhdGVkIGNhbGxzCi10byB0aGVzZSBmdW5jdGlvbnMuICBUaGlzIGlzIGEgZmxleGlibGUgbWVjaGFuaXNtIGFsbG93aW5nIGEKLWNvbnN1bWVyLXB1bGwgc3R5bGUgb2YgYWN0aXZpdHksIG9yIHByb2R1Y2VyLXB1c2gsIG9yIGEgbWl4dHVyZQotb2YgYm90aC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImhsLXN1bW1hcnkiPjwvYT4zLjEuMi6gSGlnaC1sZXZlbCBzdW1tYXJ5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNvbWUgaGFuZHkgd3JhcHBlcnMgYXJvdW5kIHRoZQotbG93LWxldmVsIGludGVyZmFjZSB0byBmYWNpbGl0YXRlIHJlYWRpbmcgYW5kIHdyaXRpbmcKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGZvcm1hdCBmaWxlcwotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4gZmlsZXMpLiAgVGhlIHJvdXRpbmVzCi1wcm92aWRlIGhvb2tzIHRvIGZhY2lsaXRhdGUgcmVhZGluZyBmaWxlcyBpbiB3aGljaCB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGRhdGEgc3RyZWFtIGlzIGVtYmVkZGVkCi13aXRoaW4gc29tZSBsYXJnZXItc2NhbGUgZmlsZSBzdHJ1Y3R1cmUsIG9yIHdoZXJlIHRoZXJlIGFyZQotbXVsdGlwbGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZGF0YSBzdHJlYW1zCi1jb25jYXRlbmF0ZWQgZW5kLXRvLWVuZC48L3A+Ci08cD5Gb3IgcmVhZGluZyBmaWxlcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPiBhbmQgCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvZGU+IGFyZQotc3VwcGxpZWQuICBGb3Igd3JpdGluZyBmaWxlcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUZpbmlzaDwvY29kZT4gYXJlCi1hdmFpbGFibGUuPC9wPgotPHA+QXMgd2l0aCB0aGUgbG93LWxldmVsIGxpYnJhcnksIG5vIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQKLXNvIHRoZSBsaWJyYXJ5IGlzIHBlciBzZSB0aHJlYWQtc2FmZS4gIEhvd2V2ZXIsIGlmIEkvTyBlcnJvcnMKLW9jY3VyIHdoaWxzdCByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBmaWxlcywKLXlvdSBtYXkgaGF2ZSB0byBjb25zdWx0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZXJybm88L2NvZGU+IHRvCi1kZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4gIEluIHRoYXQgY2FzZSwgeW91J2QgbmVlZCBhIEMKLWxpYnJhcnkgd2hpY2ggY29ycmVjdGx5IHN1cHBvcnRzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmVycm5vPC9jb2RlPiBpbiBhIG11bHRpdGhyZWFkZWQKLWVudmlyb25tZW50LjwvcD4KLTxwPlRvIG1ha2UgdGhlIGxpYnJhcnkgYSBsaXR0bGUgc2ltcGxlciBhbmQgbW9yZSBwb3J0YWJsZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+IHJlcXVpcmUgeW91IHRvCi1wYXNzIHRoZW0gZmlsZSBoYW5kbGVzICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkZJTEUqPC9jb2RlPnMpCi13aGljaCBoYXZlIHByZXZpb3VzbHkgYmVlbiBvcGVuZWQgZm9yIHJlYWRpbmcgb3Igd3JpdGluZwotcmVzcGVjdGl2ZWx5LiAgVGhhdCBhdm9pZHMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoCi1maWxlIG9wZXJhdGlvbnMgYW5kIGZpbGUgYXR0cmlidXRlcywgd2hpbHN0IG5vdCBiZWluZyBtdWNoIG9mIGFuCi1pbXBvc2l0aW9uIG9uIHRoZSBwcm9ncmFtbWVyLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0idXRpbC1mbnMtc3VtbWFyeSI+PC9hPjMuMS4zLqBVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkZvciB2ZXJ5IHNpbXBsZSBuZWVkcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+IGFyZQotcHJvdmlkZWQuICBUaGVzZSBjb21wcmVzcyBkYXRhIGluIG1lbW9yeSBmcm9tIG9uZSBidWZmZXIgdG8KLWFub3RoZXIgYnVmZmVyIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuICBZb3Ugc2hvdWxkIGFzc2Vzcwotd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgZnVsZmlsbCB5b3VyIG1lbW9yeS10by1tZW1vcnkKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzIGJlZm9yZSBpbnZlc3RpbmcgZWZmb3J0IGluCi11bmRlcnN0YW5kaW5nIHRoZSBtb3JlIGdlbmVyYWwgYnV0IG1vcmUgY29tcGxleCBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3A+Ci08cD5Zb3NoaW9rYSBUc3VuZW8KLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRzdW5lb0Byci5paWo0dS5vci5qcDwvY29kZT4pIGhhcwotY29udHJpYnV0ZWQgc29tZSBmdW5jdGlvbnMgdG8gZ2l2ZSBiZXR0ZXIKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eS4gIFRoZXNlCi1mdW5jdGlvbnMgYXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6b3BlbjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ienJlYWQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnp3cml0ZTwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemZsdXNoPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Y2xvc2U8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnplcnJvcjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemxpYlZlcnNpb248L2NvZGU+LiAgWW91IG1heSBmaW5kCi10aGVzZSBmdW5jdGlvbnMgbW9yZSBjb252ZW5pZW50IGZvciBzaW1wbGUgZmlsZSByZWFkaW5nIGFuZAotd3JpdGluZywgdGhhbiB0aG9zZSBpbiB0aGUgaGlnaC1sZXZlbCBpbnRlcmZhY2UuICBUaGVzZSBmdW5jdGlvbnMKLWFyZSBub3QgKHlldCkgb2ZmaWNpYWxseSBwYXJ0IG9mIHRoZSBsaWJyYXJ5LCBhbmQgYXJlIG1pbmltYWxseQotZG9jdW1lbnRlZCBoZXJlLiAgSWYgdGhleSBicmVhaywgeW91IGdldCB0byBrZWVwIGFsbCB0aGUgcGllY2VzLgotSSBob3BlIHRvIGRvY3VtZW50IHRoZW0gcHJvcGVybHkgd2hlbiB0aW1lIHBlcm1pdHMuPC9wPgotPHA+WW9zaGlva2EgYWxzbyBjb250cmlidXRlZCBtb2RpZmljYXRpb25zIHRvIGFsbG93IHRoZQotbGlicmFyeSB0byBiZSBidWlsdCBhcyBhIFdpbmRvd3MgRExMLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImVyci1oYW5kbGluZyI+PC9hPjMuMi6gRXJyb3IgaGFuZGxpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+VGhlIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gcmVjb3ZlciBjbGVhbmx5IGluIGFsbAotc2l0dWF0aW9ucywgaW5jbHVkaW5nIHRoZSB3b3JzdC1jYXNlIHNpdHVhdGlvbiBvZiBkZWNvbXByZXNzaW5nCi1yYW5kb20gZGF0YS4gIEknbSBub3QgMTAwJSBzdXJlIHRoYXQgaXQgY2FuIGFsd2F5cyBkbyB0aGlzLCBzbwoteW91IG1pZ2h0IHdhbnQgdG8gYWRkIGEgc2lnbmFsIGhhbmRsZXIgdG8gY2F0Y2ggc2VnbWVudGF0aW9uCi12aW9sYXRpb25zIGR1cmluZyBkZWNvbXByZXNzaW9uIGlmIHlvdSBhcmUgZmVlbGluZyBlc3BlY2lhbGx5Ci1wYXJhbm9pZC4gIEkgd291bGQgYmUgaW50ZXJlc3RlZCBpbiBoZWFyaW5nIG1vcmUgYWJvdXQgdGhlCi1yb2J1c3RuZXNzIG9mIHRoZSBsaWJyYXJ5IHRvIGNvcnJ1cHRlZCBjb21wcmVzc2VkIGRhdGEuPC9wPgotPHA+VmVyc2lvbiAxLjAuMyBtb3JlIHJvYnVzdCBpbiB0aGlzIHJlc3BlY3QgdGhhbiBhbnkKLXByZXZpb3VzIHZlcnNpb24uICBJbnZlc3RpZ2F0aW9ucyB3aXRoIFZhbGdyaW5kIChhIHRvb2wgZm9yIGRldGVjdGluZwotcHJvYmxlbXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCkgaW5kaWNhdGUKLXRoYXQsIGF0IGxlYXN0IGZvciB0aGUgZmV3IGZpbGVzIEkgdGVzdGVkLCBhbGwgc2luZ2xlLWJpdCBlcnJvcnMKLWluIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBhcmUgY2F1Z2h0IHByb3Blcmx5LCB3aXRoIG5vCi1zZWdtZW50YXRpb24gZmF1bHRzLCBubyB1c2VzIG9mIHVuaW5pdGlhbGlzZWQgZGF0YSwgbm8gb3V0IG9mCi1yYW5nZSByZWFkcyBvciB3cml0ZXMsIGFuZCBubyBpbmZpbml0ZSBsb29waW5nIGluIHRoZSBkZWNvbXByZXNzb3IuCi1TbyBpdCdzIGNlcnRhaW5seSBwcmV0dHkgcm9idXN0LCBhbHRob3VnaAotSSB3b3VsZG4ndCBjbGFpbSBpdCB0byBiZSB0b3RhbGx5IGJvbWJwcm9vZi48L3A+Ci08cD5UaGUgZmlsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6bGliLmg8L2NvZGU+IGNvbnRhaW5zCi1hbGwgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsIHlvdQotc2hvdWxkIGRlZmluaXRlbHkgbm90IGluY2x1ZGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWJfcHJpdmF0ZS5oPC9jb2RlPi48L3A+Ci08cD5JbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6bGliLmg8L2NvZGU+LCB0aGUgdmFyaW91cwotcmV0dXJuIHZhbHVlcyBhcmUgZGVmaW5lZC4gIFRoZSBmb2xsb3dpbmcgbGlzdCBpcyBub3QgaW50ZW5kZWQgYXMKLWFuIGV4aGF1c3RpdmUgZGVzY3JpcHRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggYSBnaXZlbgotdmFsdWUgbWF5IGJlIHJldHVybmVkIC0tIHRob3NlIGRlc2NyaXB0aW9ucyBhcmUgZ2l2ZW4gbGF0ZXIuCi1SYXRoZXIsIGl0IGlzIGludGVuZGVkIHRvIGNvbnZleSB0aGUgcm91Z2ggbWVhbmluZyBvZiBlYWNoIHJldHVybgotdmFsdWUuICBUaGUgZmlyc3QgZml2ZSBhY3Rpb25zIGFyZSBub3JtYWwgYW5kIG5vdCBpbnRlbmRlZCB0bwotZGVub3RlIGFuIGVycm9yIHNpdHVhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5UaGUgcmVxdWVzdGVkIGFjdGlvbiB3YXMgY29tcGxldGVkCi0gICBzdWNjZXNzZnVsbHkuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUlVOX09LLCBCWl9GTFVTSF9PSywKLSAgICBCWl9GSU5JU0hfT0s8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+SW4gCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwgdGhlIHJlcXVlc3RlZAotICAgZmx1c2gvZmluaXNoL25vdGhpbmctc3BlY2lhbCBhY3Rpb24gd2FzIGNvbXBsZXRlZAotICAgc3VjY2Vzc2Z1bGx5LjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Q29tcHJlc3Npb24gb2YgZGF0YSB3YXMgY29tcGxldGVkLCBvciB0aGUKLSAgIGxvZ2ljYWwgc3RyZWFtIGVuZCB3YXMgZGV0ZWN0ZWQgZHVyaW5nCi0gICBkZWNvbXByZXNzaW9uLjwvcD48L2RkPgotPC9kbD48L2Rpdj4KLTxwPlRoZSBmb2xsb3dpbmcgcmV0dXJuIHZhbHVlcyBpbmRpY2F0ZSBhbiBlcnJvciBvZiBzb21lCi1raW5kLjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0NPTkZJR19FUlJPUjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5JbmRpY2F0ZXMgdGhhdCB0aGUgbGlicmFyeSBoYXMgYmVlbiBpbXByb3Blcmx5Ci0gICBjb21waWxlZCBvbiB5b3VyIHBsYXRmb3JtIC0tIGEgbWFqb3IgY29uZmlndXJhdGlvbiBlcnJvci4KLSAgIFNwZWNpZmljYWxseSwgaXQgbWVhbnMgdGhhdAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zaXplb2YoY2hhcik8L2NvZGU+LAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zaXplb2Yoc2hvcnQpPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c2l6ZW9mKGludCk8L2NvZGU+IGFyZSBub3QgMSwgMiBhbmQKLSAgIDQgcmVzcGVjdGl2ZWx5LCBhcyB0aGV5IHNob3VsZCBiZS4gIE5vdGUgdGhhdCB0aGUgbGlicmFyeQotICAgc2hvdWxkIHN0aWxsIHdvcmsgcHJvcGVybHkgb24gNjQtYml0IHBsYXRmb3JtcyB3aGljaCBmb2xsb3cKLSAgIHRoZSBMUDY0IHByb2dyYW1taW5nIG1vZGVsIC0tIHRoYXQgaXMsIHdoZXJlCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNpemVvZihsb25nKTwvY29kZT4gYW5kCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNpemVvZih2b2lkKik8L2NvZGU+IGFyZSA4LiAgVW5kZXIKLSAgIExQNjQsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c2l6ZW9mKGludCk8L2NvZGU+IGlzIHN0aWxsIDQsCi0gICBzbyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiwgd2hpY2ggZG9lc24ndAotICAgdXNlIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxvbmc8L2NvZGU+IHR5cGUsIGlzCi0gICBPSy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5XaGVuIHVzaW5nIHRoZSBsaWJyYXJ5LCBpdCBpcyBpbXBvcnRhbnQgdG8gY2FsbAotICAgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBhbmQgd2l0aCBkYXRhIHN0cnVjdHVyZXMKLSAgIChidWZmZXJzIGV0YykgaW4gdGhlIGNvcnJlY3Qgc3RhdGVzLgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4gY2hlY2tzIGFzIG11Y2ggYXMgaXQKLSAgIGNhbiB0byBlbnN1cmUgdGhpcyBpcyBoYXBwZW5pbmcsIGFuZCByZXR1cm5zCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPiBpZiBub3QuCi0gICBDb2RlIHdoaWNoIGNvbXBsaWVzIHByZWNpc2VseSB3aXRoIHRoZSBmdW5jdGlvbiBzZW1hbnRpY3MsIGFzCi0gICBkZXRhaWxlZCBiZWxvdywgc2hvdWxkIG5ldmVyIHJlY2VpdmUgdGhpcyB2YWx1ZTsgc3VjaCBhbiBldmVudAotICAgZGVub3RlcyBidWdneSBjb2RlIHdoaWNoIHlvdSBzaG91bGQKLSAgIGludmVzdGlnYXRlLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1BBUkFNX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIHdoZW4gYSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBjYWxsIGlzCi0gICBvdXQgb2YgcmFuZ2Ugb3Igb3RoZXJ3aXNlIG1hbmlmZXN0bHkgaW5jb3JyZWN0LiAgQXMgd2l0aAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT4sIHRoaXMKLSAgIGRlbm90ZXMgYSBidWcgaW4gdGhlIGNsaWVudCBjb2RlLiAgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4KLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUEFSQU1fRVJST1I8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT4gaXMgYSBiaXQKLSAgIGhhenksIGJ1dCBzdGlsbCB3b3J0aCBtYWtpbmcuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUVNX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIHdoZW4gYSByZXF1ZXN0IHRvIGFsbG9jYXRlIG1lbW9yeQotICAgZmFpbGVkLiAgTm90ZSB0aGF0IHRoZSBxdWFudGl0eSBvZiBtZW1vcnkgbmVlZGVkIHRvIGRlY29tcHJlc3MKLSAgIGEgc3RyZWFtIGNhbm5vdCBiZSBkZXRlcm1pbmVkIHVudGlsIHRoZSBzdHJlYW0ncyBoZWFkZXIgaGFzCi0gICBiZWVuIHJlYWQuICBTbwotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gbWF5IHJldHVybgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NRU1fRVJST1I8L2NvZGU+IGV2ZW4gdGhvdWdoIHNvbWUKLSAgIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gcmVhZC4gIFRoZSBzYW1lIGlzIG5vdCB0cnVlCi0gICBmb3IgY29tcHJlc3Npb247IG9uY2UKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiBvcgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+IGhhdmUKLSAgIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4gY2Fubm90Ci0gICBvY2N1ci48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9EQVRBX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIHdoZW4gYSBkYXRhIGludGVncml0eSBlcnJvciBpcwotICAgZGV0ZWN0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uICBNb3N0IGltcG9ydGFudGx5LCB0aGlzIG1lYW5zCi0gICB3aGVuIHN0b3JlZCBhbmQgY29tcHV0ZWQgQ1JDcyBmb3IgdGhlIGRhdGEgZG8gbm90IG1hdGNoLiAgVGhpcwotICAgdmFsdWUgaXMgYWxzbyByZXR1cm5lZCB1cG9uIGRldGVjdGlvbiBvZiBhbnkgb3RoZXIgYW5vbWFseSBpbgotICAgdGhlIGNvbXByZXNzZWQgZGF0YS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9EQVRBX0VSUk9SX01BR0lDPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPkFzIGEgc3BlY2lhbCBjYXNlIG9mCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0RBVEFfRVJST1I8L2NvZGU+LCBpdCBpcwotICAgc29tZXRpbWVzIHVzZWZ1bCB0byBrbm93IHdoZW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtIGRvZXMgbm90Ci0gICBzdGFydCB3aXRoIHRoZSBjb3JyZWN0IG1hZ2ljIGJ5dGVzICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPidCJyAnWicKLSAgICdoJzwvY29kZT4pLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0lPX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIGJ5Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4gd2hlbiB0aGVyZSBpcyBhbgotICAgZXJyb3IgcmVhZGluZyBvciB3cml0aW5nIGluIHRoZSBjb21wcmVzc2VkIGZpbGUsIGFuZCBieQotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT4gYW5kCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT4gZm9yIGF0dGVtcHRzCi0gICB0byB1c2UgYSBmaWxlIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yICh2aXosCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZlcnJvcihmKTwvY29kZT4pIGlzIHNldC4gIE9uCi0gICByZWNlaXB0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfSU9fRVJST1I8L2NvZGU+LCB0aGUKLSAgIGNhbGxlciBzaG91bGQgY29uc3VsdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmVycm5vPC9jb2RlPgotICAgYW5kL29yIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cGVycm9yPC9jb2RlPiB0byBhY3F1aXJlCi0gICBvcGVyYXRpbmctc3lzdGVtIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgcHJvYmxlbS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9VTkVYUEVDVEVEX0VPRjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5SZXR1cm5lZCBieQotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aGVuIHRoZQotICAgY29tcHJlc3NlZCBmaWxlIGZpbmlzaGVzIGJlZm9yZSB0aGUgbG9naWNhbCBlbmQgb2Ygc3RyZWFtIGlzCi0gICBkZXRlY3RlZC48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PVVRCVUZGX0ZVTEw8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+UmV0dXJuZWQgYnkKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+IHRvCi0gICBpbmRpY2F0ZSB0aGF0IHRoZSBvdXRwdXQgZGF0YSB3aWxsIG5vdCBmaXQgaW50byB0aGUgb3V0cHV0Ci0gICBidWZmZXIgcHJvdmlkZWQuPC9wPjwvZGQ+Ci08L2RsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9Imxvdy1sZXZlbCI+PC9hPjMuMy6gTG93LWxldmVsIGludGVyZmFjZTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiemNvbXByZXNzLWluaXQiPjwvYT4zLjMuMS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgKm5leHRfaW47Ci0gIHVuc2lnbmVkIGludCBhdmFpbF9pbjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX2luX2xvMzI7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9pbl9oaTMyOwotCi0gIGNoYXIgKm5leHRfb3V0OwotICB1bnNpZ25lZCBpbnQgYXZhaWxfb3V0OwotICB1bnNpZ25lZCBpbnQgdG90YWxfb3V0X2xvMzI7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9vdXRfaGkzMjsKLQotICB2b2lkICpzdGF0ZTsKLQotICB2b2lkICooKmJ6YWxsb2MpKHZvaWQgKixpbnQsaW50KTsKLSAgdm9pZCAoKmJ6ZnJlZSkodm9pZCAqLHZvaWQgKik7Ci0gIHZvaWQgKm9wYXF1ZTsKLX0gYnpfc3RyZWFtOwotCi1pbnQgQloyX2J6Q29tcHJlc3NJbml0ICggYnpfc3RyZWFtICpzdHJtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplMTAwaywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd29ya0ZhY3RvciApOzwvcHJlPgotPHA+UHJlcGFyZXMgZm9yIGNvbXByZXNzaW9uLiAgVGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6X3N0cmVhbTwvY29kZT4gc3RydWN0dXJlIGhvbGRzIGFsbAotZGF0YSBwZXJ0YWluaW5nIHRvIHRoZSBjb21wcmVzc2lvbiBhY3Rpdml0eS4gIEEKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiBzdHJ1Y3R1cmUgc2hvdWxkIGJlCi1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkIHByaW9yIHRvIHRoZSBjYWxsLiAgVGhlIGZpZWxkcyBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iel9zdHJlYW08L2NvZGU+IGNvbXByaXNlIHRoZSBlbnRpcmV0eQotb2YgdGhlIHVzZXItdmlzaWJsZSBkYXRhLiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGF0ZTwvY29kZT4KLWlzIGEgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yCi1jb21wcmVzc2lvbi48L3A+Ci08cD5DdXN0b20gbWVtb3J5IGFsbG9jYXRvcnMgYXJlIHN1cHBvcnRlZCwgdmlhIGZpZWxkcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9wYXF1ZTwvY29kZT4uICBUaGUgdmFsdWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3BhcXVlPC9jb2RlPiBpcyBwYXNzZWQgdG8gYXMgdGhlIGZpcnN0Ci1hcmd1bWVudCB0byBhbGwgY2FsbHMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPgotYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiwgYnV0IGlzIG90aGVyd2lzZQotaWdub3JlZCBieSB0aGUgbGlicmFyeS4gIFRoZSBjYWxsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnphbGxvYyAoCi1vcGFxdWUsIG4sIG0gKTwvY29kZT4gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcG9pbnRlcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wPC9jb2RlPiB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm4gKgotbTwvY29kZT4gYnl0ZXMgb2YgbWVtb3J5LCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWUgKAotb3BhcXVlLCBwICk8L2NvZGU+IHNob3VsZCBmcmVlIHRoYXQgbWVtb3J5LjwvcD4KLTxwPklmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBhIGN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yLCBzZXQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnphbGxvYzwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZnJlZTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9wYXF1ZTwvY29kZT4gdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TlVMTDwvY29kZT4sIGFuZCB0aGUgbGlicmFyeSB3aWxsIHRoZW4KLXVzZSB0aGUgc3RhbmRhcmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5tYWxsb2M8L2NvZGU+IC8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlZTwvY29kZT4gcm91dGluZXMuPC9wPgotPHA+QmVmb3JlIGNhbGxpbmcKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiwgZmllbGRzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6YWxsb2M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vcGFxdWU8L2NvZGU+IHNob3VsZCBiZSBmaWxsZWQKLWFwcHJvcHJpYXRlbHksIGFzIGp1c3QgZGVzY3JpYmVkLiAgVXBvbiByZXR1cm4sIHRoZSBpbnRlcm5hbAotc3RhdGUgd2lsbCBoYXZlIGJlZW4gYWxsb2NhdGVkIGFuZCBpbml0aWFsaXNlZCwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX2luX2xvMzI8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9pbl9oaTMyPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfb3V0X2xvMzI8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXRfaGkzMjwvY29kZT4gd2lsbCBoYXZlIGJlZW4KLXNldCB0byB6ZXJvLiAgVGhlc2UgZm91ciBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIGxpYnJhcnkgdG8gaW5mb3JtCi10aGUgY2FsbGVyIG9mIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBwYXNzZWQgaW50byBhbmQgb3V0IG9mIHRoZQotbGlicmFyeSwgcmVzcGVjdGl2ZWx5LiAgWW91IHNob3VsZCBub3QgdHJ5IHRvIGNoYW5nZSB0aGVtLiAgQXMgb2YKLXZlcnNpb24gMS4wLCA2NC1iaXQgY291bnRzIGFyZSBtYWludGFpbmVkLCBldmVuIG9uIDMyLWJpdAotcGxhdGZvcm1zLCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5faGkzMjwvY29kZT4KLWZpZWxkcyB0byBzdG9yZSB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgY291bnQuICBTbywgZm9yIGV4YW1wbGUsCi10aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW4gaXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4odG90YWxfaW5faGkzMgotJmx0OyZsdDsgMzIpICsgdG90YWxfaW5fbG8zMjwvY29kZT4uPC9wPgotPHA+UGFyYW1ldGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YmxvY2tTaXplMTAwazwvY29kZT4KLXNwZWNpZmllcyB0aGUgYmxvY2sgc2l6ZSB0byBiZSB1c2VkIGZvciBjb21wcmVzc2lvbi4gIEl0IHNob3VsZAotYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDkgaW5jbHVzaXZlLCBhbmQgdGhlIGFjdHVhbCBibG9jayBzaXplCi11c2VkIGlzIDEwMDAwMCB4IHRoaXMgZmlndXJlLiAgOSBnaXZlcyB0aGUgYmVzdCBjb21wcmVzc2lvbiBidXQKLXRha2VzIG1vc3QgbWVtb3J5LjwvcD4KLTxwPlBhcmFtZXRlciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4gc2hvdWxkCi1iZSBzZXQgdG8gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA0IGluY2x1c2l2ZS4gIDAgaXMgc2lsZW50LCBhbmQKLWdyZWF0ZXIgbnVtYmVycyBnaXZlIGluY3JlYXNpbmdseSB2ZXJib3NlIG1vbml0b3JpbmcvZGVidWdnaW5nCi1vdXRwdXQuICBJZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBjb21waWxlZCB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1EQlpfTk9fU1RESU88L2NvZGU+LCBubyBzdWNoIG91dHB1dAotd2lsbCBhcHBlYXIgZm9yIGFueSB2ZXJib3NpdHkgc2V0dGluZy48L3A+Ci08cD5QYXJhbWV0ZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij53b3JrRmFjdG9yPC9jb2RlPgotY29udHJvbHMgaG93IHRoZSBjb21wcmVzc2lvbiBwaGFzZSBiZWhhdmVzIHdoZW4gcHJlc2VudGVkIHdpdGgKLXdvcnN0IGNhc2UsIGhpZ2hseSByZXBldGl0aXZlLCBpbnB1dCBkYXRhLiAgSWYgY29tcHJlc3Npb24gcnVucwotaW50byBkaWZmaWN1bHRpZXMgY2F1c2VkIGJ5IHJlcGV0aXRpdmUgZGF0YSwgdGhlIGxpYnJhcnkgc3dpdGNoZXMKLWZyb20gdGhlIHN0YW5kYXJkIHNvcnRpbmcgYWxnb3JpdGhtIHRvIGEgZmFsbGJhY2sgYWxnb3JpdGhtLiAgVGhlCi1mYWxsYmFjayBpcyBzbG93ZXIgdGhhbiB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGJ5IHBlcmhhcHMgYQotZmFjdG9yIG9mIHRocmVlLCBidXQgYWx3YXlzIGJlaGF2ZXMgcmVhc29uYWJseSwgbm8gbWF0dGVyIGhvdyBiYWQKLXRoZSBpbnB1dC48L3A+Ci08cD5Mb3dlciB2YWx1ZXMgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij53b3JrRmFjdG9yPC9jb2RlPgotcmVkdWNlIHRoZSBhbW91bnQgb2YgZWZmb3J0IHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gd2lsbCBleHBlbmQKLWJlZm9yZSByZXNvcnRpbmcgdG8gdGhlIGZhbGxiYWNrLiAgWW91IHNob3VsZCBzZXQgdGhpcyBwYXJhbWV0ZXIKLWNhcmVmdWxseTsgdG9vIGxvdywgYW5kIG1hbnkgaW5wdXRzIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUKLWZhbGxiYWNrIGFsZ29yaXRobSBhbmQgc28gY29tcHJlc3MgcmF0aGVyIHNsb3dseSwgdG9vIGhpZ2gsIGFuZAoteW91ciBhdmVyYWdlLXRvLXdvcnN0IGNhc2UgY29tcHJlc3Npb24gdGltZXMgY2FuIGJlY29tZSB2ZXJ5Ci1sYXJnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwIGdpdmVzIHJlYXNvbmFibGUgYmVoYXZpb3VyIG92ZXIgYQotd2lkZSByYW5nZSBvZiBjaXJjdW1zdGFuY2VzLjwvcD4KLTxwPkFsbG93YWJsZSB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDI1MCBpbmNsdXNpdmUuICAwIGlzIGEKLXNwZWNpYWwgY2FzZSwgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAzMC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhlIGNvbXByZXNzZWQgb3V0cHV0IGdlbmVyYXRlZCBpcyB0aGUgc2FtZQotcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgZmFsbGJhY2sgYWxnb3JpdGhtIGlzCi11c2VkLjwvcD4KLTxwPkJlIGF3YXJlIGFsc28gdGhhdCB0aGlzIHBhcmFtZXRlciBtYXkgZGlzYXBwZWFyIGVudGlyZWx5IGluCi1mdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkuICBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlCi1wb3NzaWJsZSB0byBkZXZpc2UgYSBnb29kIHdheSB0byBhdXRvbWF0aWNhbGx5IGNob29zZSB3aGljaAotYWxnb3JpdGhtIHRvIHVzZS4gIFN1Y2ggYSBtZWNoYW5pc20gd291bGQgcmVuZGVyIHRoZSBwYXJhbWV0ZXIKLW9ic29sZXRlLjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCAKLSAgb3IgYmxvY2tTaXplICZsdDsgMSBvciBibG9ja1NpemUgJmd0OyA5Ci0gIG9yIHZlcmJvc2l0eSAmbHQ7IDAgb3IgdmVyYm9zaXR5ICZndDsgNAotICBvciB3b3JrRmFjdG9yICZsdDsgMCBvciB3b3JrRmFjdG9yICZndDsgMjUwCi1CWl9NRU1fRVJST1IgCi0gIGlmIG5vdCBlbm91Z2ggbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sgCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QloyX2J6Q29tcHJlc3MKLSAgaWYgQlpfT0sgaXMgcmV0dXJuZWQKLSAgbm8gc3BlY2lmaWMgYWN0aW9uIG5lZWRlZCBpbiBjYXNlIG9mIGVycm9yPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6Q29tcHJlc3MiPjwvYT4zLjMuMi6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpDb21wcmVzcyAoIGJ6X3N0cmVhbSAqc3RybSwgaW50IGFjdGlvbiApOzwvcHJlPgotPHA+UHJvdmlkZXMgbW9yZSBpbnB1dCBhbmQvb3Igb3V0cHV0IGJ1ZmZlciBzcGFjZSBmb3IgdGhlCi1saWJyYXJ5LiAgVGhlIGNhbGxlciBtYWludGFpbnMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCBhbmQKLWNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHRvIHRyYW5zZmVyCi1kYXRhIGJldHdlZW4gdGhlbS48L3A+Ci08cD5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4gc2hvdWxkIHBvaW50IGF0IHRoZSBkYXRhCi10byBiZSBjb21wcmVzc2VkLCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4KLXNob3VsZCBpbmRpY2F0ZSBob3cgbWFueSBieXRlcyB0aGUgbGlicmFyeSBtYXkgcmVhZC4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHVwZGF0ZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfaW48L2NvZGU+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgaXQgaGFzIHJlYWQuPC9wPgotPHA+U2ltaWxhcmx5LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfb3V0PC9jb2RlPiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgdG8gYmUgcGxhY2VkLAotd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX291dDwvY29kZT4gaW5kaWNhdGluZyBob3cKLW11Y2ggb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHVwZGF0ZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9vdXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9vdXQ8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXQ8L2NvZGU+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgb3V0cHV0LjwvcD4KLTxwPllvdSBtYXkgcHJvdmlkZSBhbmQgcmVtb3ZlIGFzIGxpdHRsZSBvciBhcyBtdWNoIGRhdGEgYXMgeW91Ci1saWtlIG9uIGVhY2ggY2FsbCBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uICBJbiB0aGUgbGltaXQsCi1pdCBpcyBhY2NlcHRhYmxlIHRvIHN1cHBseSBhbmQgcmVtb3ZlIGRhdGEgb25lIGJ5dGUgYXQgYSB0aW1lLAotYWx0aG91Z2ggdGhpcyB3b3VsZCBiZSB0ZXJyaWJseSBpbmVmZmljaWVudC4gIFlvdSBzaG91bGQgYWx3YXlzCi1lbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgYnl0ZSBvZiBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlIGF0Ci1lYWNoIGNhbGwuPC9wPgotPHA+QSBzZWNvbmQgcHVycG9zZSBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gaXMgdG8gcmVxdWVzdCBhCi1jaGFuZ2Ugb2YgbW9kZSBvZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uPC9wPgotPHA+Q29uY2VwdHVhbGx5LCBhIGNvbXByZXNzZWQgc3RyZWFtIGNhbiBiZSBpbiBvbmUgb2YgZm91cgotc3RhdGVzOiBJRExFLCBSVU5OSU5HLCBGTFVTSElORyBhbmQgRklOSVNISU5HLiAgQmVmb3JlCi1pbml0aWFsaXNhdGlvbgotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPikgYW5kIGFmdGVyCi10ZXJtaW5hdGlvbiAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT4pLAotYSBzdHJlYW0gaXMgcmVnYXJkZWQgYXMgSURMRS48L3A+Ci08cD5VcG9uIGluaXRpYWxpc2F0aW9uCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+KSwgdGhlIHN0cmVhbQotaXMgcGxhY2VkIGluIHRoZSBSVU5OSU5HIHN0YXRlLiAgU3Vic2VxdWVudCBjYWxscyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gc2hvdWxkIHBhc3MKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUlVOPC9jb2RlPiBhcyB0aGUgcmVxdWVzdGVkIGFjdGlvbjsKLW90aGVyIGFjdGlvbnMgYXJlIGlsbGVnYWwgYW5kIHdpbGwgcmVzdWx0IGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPi48L3A+Ci08cD5BdCBzb21lIHBvaW50LCB0aGUgY2FsbGluZyBwcm9ncmFtIHdpbGwgaGF2ZSBwcm92aWRlZCBhbGwKLXRoZSBpbnB1dCBkYXRhIGl0IHdhbnRzIHRvLiAgSXQgd2lsbCB0aGVuIHdhbnQgdG8gZmluaXNoIHVwIC0tIGluCi1lZmZlY3QsIGFza2luZyB0aGUgbGlicmFyeSB0byBwcm9jZXNzIGFueSBkYXRhIGl0IG1pZ2h0IGhhdmUKLWJ1ZmZlcmVkIGludGVybmFsbHkuICBJbiB0aGlzIHN0YXRlLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gd2lsbCBubyBsb25nZXIKLWF0dGVtcHQgdG8gcmVhZCBkYXRhIGZyb20KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4sIGJ1dCBpdCB3aWxsIHdhbnQgdG8KLXdyaXRlIGRhdGEgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4uICBCZWNhdXNlCi10aGUgb3V0cHV0IGJ1ZmZlciBzdXBwbGllZCBieSB0aGUgdXNlciBjYW4gYmUgYXJiaXRyYXJpbHkgc21hbGwsCi10aGUgZmluaXNoaW5nLXVwIG9wZXJhdGlvbiBjYW5ub3QgbmVjZXNzYXJpbHkgYmUgZG9uZSB3aXRoIGEKLXNpbmdsZSBjYWxsIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPi48L3A+Ci08cD5JbnN0ZWFkLCB0aGUgY2FsbGluZyBwcm9ncmFtIHBhc3NlcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GSU5JU0g8L2NvZGU+IGFzIGFuIGFjdGlvbiB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uICBUaGlzIGNoYW5nZXMKLXRoZSBzdHJlYW0ncyBzdGF0ZSB0byBGSU5JU0hJTkcuICBBbnkgcmVtYWluaW5nIGlucHV0IChpZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pblswIC4uIGF2YWlsX2luLTFdPC9jb2RlPikgaXMKLWNvbXByZXNzZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgVG8gZG8gdGhpcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IG11c3QgYmUgY2FsbGVkCi1yZXBlYXRlZGx5IHVudGlsIGFsbCB0aGUgb3V0cHV0IGhhcyBiZWVuIGNvbnN1bWVkLiAgQXQgdGhhdAotcG9pbnQsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHJldHVybnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4sIGFuZCB0aGUgc3RyZWFtJ3MKLXN0YXRlIGlzIHNldCBiYWNrIHRvIElETEUuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPiBzaG91bGQgdGhlbiBiZQotY2FsbGVkLjwvcD4KLTxwPkp1c3QgdG8gbWFrZSBzdXJlIHRoZSBjYWxsaW5nIHByb2dyYW0gZG9lcyBub3QgY2hlYXQsIHRoZQotbGlicmFyeSBtYWtlcyBhIG5vdGUgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4KLWF0IHRoZSB0aW1lIG9mIHRoZSBmaXJzdCBjYWxsIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aGljaCBoYXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfRklOSVNIPC9jb2RlPiBhcyBhbiBhY3Rpb24gKGllLCBhdAotdGhlIHRpbWUgdGhlIHByb2dyYW0gaGFzIGFubm91bmNlZCBpdHMgaW50ZW50aW9uIHRvIG5vdCBzdXBwbHkKLWFueSBtb3JlIGlucHV0KS4gIEJ5IGNvbXBhcmluZyB0aGlzIHZhbHVlIHdpdGggdGhhdCBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4gb3ZlciBzdWJzZXF1ZW50IGNhbGxzCi10byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwgdGhlIGxpYnJhcnkKLWNhbiBkZXRlY3QgYW55IGF0dGVtcHRzIHRvIHNsaXAgaW4gbW9yZSBkYXRhIHRvIGNvbXByZXNzLiAgQW55Ci1jYWxscyBmb3Igd2hpY2ggdGhpcyBpcyBkZXRlY3RlZCB3aWxsIHJldHVybgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT4uICBUaGlzCi1pbmRpY2F0ZXMgYSBwcm9ncmFtbWluZyBtaXN0YWtlIHdoaWNoIHNob3VsZCBiZSBjb3JyZWN0ZWQuPC9wPgotPHA+SW5zdGVhZCBvZiBhc2tpbmcgdG8gZmluaXNoLCB0aGUgY2FsbGluZyBwcm9ncmFtIG1heSBhc2sKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHRvIHRha2UgYWxsIHRoZQotcmVtYWluaW5nIGlucHV0LCBjb21wcmVzcyBpdCBhbmQgdGVybWluYXRlIHRoZSBjdXJyZW50Ci0oQnVycm93cy1XaGVlbGVyKSBjb21wcmVzc2lvbiBibG9jay4gIFRoaXMgY291bGQgYmUgdXNlZnVsIGZvcgotZXJyb3IgY29udHJvbCBwdXJwb3Nlcy4gIFRoZSBtZWNoYW5pc20gaXMgYW5hbG9nb3VzIHRvIHRoYXQgZm9yCi1maW5pc2hpbmc6IGNhbGwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4KLXdpdGggYW4gYWN0aW9uIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfRkxVU0g8L2NvZGU+LAotcmVtb3ZlIG91dHB1dCBkYXRhLCBhbmQgcGVyc2lzdCB3aXRoIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GTFVTSDwvY29kZT4gYWN0aW9uIHVudGlsIHRoZSB2YWx1ZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9SVU48L2NvZGU+IGlzIHJldHVybmVkLiAgQXMgd2l0aAotZmluaXNoaW5nLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPgotZGV0ZWN0cyBhbnkgYXR0ZW1wdCB0byBwcm92aWRlIG1vcmUgaW5wdXQgZGF0YSBvbmNlIHRoZSBmbHVzaCBoYXMKLWJlZ3VuLjwvcD4KLTxwPk9uY2UgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLCB0aGUgc3RyZWFtIHJldHVybnMgdG8gdGhlCi1ub3JtYWwgUlVOTklORyBzdGF0ZS48L3A+Ci08cD5UaGlzIGFsbCBzb3VuZHMgcHJldHR5IGNvbXBsZXgsIGJ1dCBpc24ndCByZWFsbHkuICBIZXJlJ3MgYQotdGFibGUgd2hpY2ggc2hvd3Mgd2hpY2ggYWN0aW9ucyBhcmUgYWxsb3dhYmxlIGluIGVhY2ggc3RhdGUsIHdoYXQKLWFjdGlvbiB3aWxsIGJlIHRha2VuLCB3aGF0IHRoZSBuZXh0IHN0YXRlIGlzLCBhbmQgd2hhdCB0aGUKLW5vbi1lcnJvciByZXR1cm4gdmFsdWVzIGFyZS4gIE5vdGUgdGhhdCB5b3UgY2FuJ3QgZXhwbGljaXRseSBhc2sKLXdoYXQgc3RhdGUgdGhlIHN0cmVhbSBpcyBpbiwgYnV0IG5vciBkbyB5b3UgbmVlZCB0byAtLSBpdCBjYW4gYmUKLWluZmVycmVkIGZyb20gdGhlIHZhbHVlcyByZXR1cm5lZCBieQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPklETEUvYW55Ci0gIElsbGVnYWwuICBJRExFIHN0YXRlIG9ubHkgZXhpc3RzIGFmdGVyIEJaMl9iekNvbXByZXNzRW5kIG9yCi0gIGJlZm9yZSBCWjJfYnpDb21wcmVzc0luaXQuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLVJVTk5JTkcvQlpfUlVOCi0gIENvbXByZXNzIGZyb20gbmV4dF9pbiB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICBOZXh0IHN0YXRlID0gUlVOTklORwotICBSZXR1cm4gdmFsdWUgPSBCWl9SVU5fT0sKLQotUlVOTklORy9CWl9GTFVTSAotICBSZW1lbWJlciBjdXJyZW50IHZhbHVlIG9mIG5leHRfaW4uIENvbXByZXNzIGZyb20gbmV4dF9pbgotICB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBidXQgZG8gbm90IGFjY2VwdCBhbnkgbW9yZSBpbnB1dC4KLSAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZMVVNIX09LCi0KLVJVTk5JTkcvQlpfRklOSVNICi0gIFJlbWVtYmVyIGN1cnJlbnQgdmFsdWUgb2YgbmV4dF9pbi4gQ29tcHJlc3MgZnJvbSBuZXh0X2luCi0gIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBOZXh0IHN0YXRlID0gRklOSVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZJTklTSF9PSwotCi1GTFVTSElORy9CWl9GTFVTSAotICBDb21wcmVzcyBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwgCi0gIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBJZiBhbGwgdGhlIGV4aXN0aW5nIGlucHV0IGhhcyBiZWVuIHVzZWQgdXAgYW5kIGFsbCBjb21wcmVzc2VkCi0gIG91dHB1dCBoYXMgYmVlbiByZW1vdmVkCi0gICAgTmV4dCBzdGF0ZSA9IFJVTk5JTkc7IFJldHVybiB2YWx1ZSA9IEJaX1JVTl9PSwotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HOyBSZXR1cm4gdmFsdWUgPSBCWl9GTFVTSF9PSwotCi1GTFVTSElORy9vdGhlciAgICAgCi0gIElsbGVnYWwuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLUZJTklTSElORy9CWl9GSU5JU0gKLSAgQ29tcHJlc3MgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsCi0gIGJ1dCB0byBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LiAgCi0gIElmIGFsbCB0aGUgZXhpc3RpbmcgaW5wdXQgaGFzIGJlZW4gdXNlZCB1cCBhbmQgYWxsIGNvbXByZXNzZWQKLSAgb3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQKLSAgICBOZXh0IHN0YXRlID0gSURMRTsgUmV0dXJuIHZhbHVlID0gQlpfU1RSRUFNX0VORAotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZJTklTSElORzsgUmV0dXJuIHZhbHVlID0gQlpfRklOSVNIX09LCi0KLUZJTklTSElORy9vdGhlcgotICBJbGxlZ2FsLgotICBSZXR1cm4gdmFsdWUgPSBCWl9TRVFVRU5DRV9FUlJPUjwvcHJlPgotPHA+VGhhdCBzdGlsbCBsb29rcyBjb21wbGljYXRlZD8gIFdlbGwsIGZhaXIgZW5vdWdoLiAgVGhlCi11c3VhbCBzZXF1ZW5jZSBvZiBjYWxscyBmb3IgY29tcHJlc3NpbmcgYSBsb2FkIG9mIGRhdGEgaXM6PC9wPgotPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj4KLTxsaT48cD5HZXQgc3RhcnRlZCB3aXRoCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPi48L3A+PC9saT4KLTxsaT48cD5TaG92ZWwgZGF0YSBpbiBhbmQgc2hsdXJwIG91dCBpdHMgY29tcHJlc3NlZCBmb3JtCi0gIHVzaW5nIHplcm8gb3IgbW9yZSBjYWxscyBvZgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aXRoIGFjdGlvbiA9Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUlVOPC9jb2RlPi48L3A+PC9saT4KLTxsaT48cD5GaW5pc2ggdXAuIFJlcGVhdGVkbHkgY2FsbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aXRoIGFjdGlvbiA9Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfRklOSVNIPC9jb2RlPiwgY29weWluZyBvdXQgdGhlCi0gIGNvbXByZXNzZWQgb3V0cHV0LCB1bnRpbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGlzCi0gIHJldHVybmVkLjwvcD48L2xpPgotPGxpPjxwPkNsb3NlIHVwIGFuZCBnbyBob21lLiAgQ2FsbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPi48L3A+PC9saT4KLTwvb2w+PC9kaXY+Ci08cD5JZiB0aGUgZGF0YSB5b3Ugd2FudCB0byBjb21wcmVzcyBmaXRzIGludG8geW91ciBpbnB1dAotYnVmZmVyIGFsbCBhdCBvbmNlLCB5b3UgY2FuIHNraXAgdGhlIGNhbGxzIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzICggLi4uLCBCWl9SVU4gKTwvY29kZT4KLWFuZCBqdXN0IGRvIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzICggLi4uLCBCWl9GSU5JU0gKLSk8L2NvZGU+IGNhbGxzLjwvcD4KLTxwPkFsbCByZXF1aXJlZCBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4uICBUaGUKLWNvbXByZXNzaW9uIGxpYnJhcnkgY2FuIGFjY2VwdCBhbnkgZGF0YSBhdCBhbGwgKG9idmlvdXNseSkuICBTbwoteW91IHNob3VsZG4ndCBnZXQgYW55IGVycm9yIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IGNhbGxzLiAgSWYgeW91Ci1kbywgdGhleSB3aWxsIGJlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPiwgYW5kIGluZGljYXRlCi1hIGJ1ZyBpbiB5b3VyIHByb2dyYW1taW5nLjwvcD4KLTxwPlRyaXZpYWwgb3RoZXIgcG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMLCBvciBzdHJtLSZndDtzIGlzIE5VTEw8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpDb21wcmVzcy1lbmQiPjwvYT4zLjMuMy6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpDb21wcmVzc0VuZCAoIGJ6X3N0cmVhbSAqc3RybSApOzwvcHJlPgotPHA+UmVsZWFzZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBjb21wcmVzc2lvbgotc3RyZWFtLjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX1BBUkFNX0VSUk9SICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0mZ3Q7cyBpcyBOVUxMCi1CWl9PSyAgICAgICAgICAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6RGVjb21wcmVzcy1pbml0Ij48L2E+My4zLjQuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6RGVjb21wcmVzc0luaXQgKCBiel9zdHJlYW0gKnN0cm0sIGludCB2ZXJib3NpdHksIGludCBzbWFsbCApOzwvcHJlPgotPHA+UHJlcGFyZXMgZm9yIGRlY29tcHJlc3Npb24uICBBcyB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4sIGEKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiByZWNvcmQgc2hvdWxkIGJlCi1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkIGJlZm9yZSB0aGUgY2FsbC4gIEZpZWxkcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3BhcXVlPC9jb2RlPiBzaG91bGQgYmUgc2V0IGlmIGEgY3VzdG9tCi1tZW1vcnkgYWxsb2NhdG9yIGlzIHJlcXVpcmVkLCBvciBtYWRlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPk5VTEw8L2NvZGU+IGZvciB0aGUgbm9ybWFsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm1hbGxvYzwvY29kZT4gLwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mcmVlPC9jb2RlPiByb3V0aW5lcy4gIFVwb24gcmV0dXJuLCB0aGUKLWludGVybmFsIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIGluaXRpYWxpc2VkLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfaW48L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXQ8L2NvZGU+IHdpbGwgYmUgemVyby48L3A+Ci08cD5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVyCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4sIHNlZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c21hbGw8L2NvZGU+IGlzIG5vbnplcm8sIHRoZQotbGlicmFyeSB3aWxsIHVzZSBhbiBhbHRlcm5hdGl2ZSBkZWNvbXByZXNzaW9uIGFsZ29yaXRobSB3aGljaAotdXNlcyBsZXNzIG1lbW9yeSBidXQgYXQgdGhlIGNvc3Qgb2YgZGVjb21wcmVzc2luZyBtb3JlIHNsb3dseQotKHJvdWdobHkgc3BlYWtpbmcsIGhhbGYgdGhlIHNwZWVkLCBidXQgdGhlIG1heGltdW0gbWVtb3J5Ci1yZXF1aXJlbWVudCBkcm9wcyB0byBhcm91bmQgMjMwMGspLiAgU2VlIDxhIGhyZWY9IiN1c2luZyI+SG93IHRvIHVzZSBiemlwMjwvYT4KLWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1lbW9yeSBtYW5hZ2VtZW50LjwvcD4KLTxwPk5vdGUgdGhhdCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgdG8gZGVjb21wcmVzcyBhCi1zdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgdGhlIHN0cmVhbSdzIGhlYWRlciBoYXMgYmVlbgotcmVhZCwgc28gZXZlbiBpZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT4gc3VjY2VlZHMsIGEKLXN1YnNlcXVlbnQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPgotY291bGQgZmFpbCB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4uPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgKCBzbWFsbCAhPSAwICZhbXA7JmFtcDsgc21hbGwgIT0gMSApCi0gIG9yICh2ZXJib3NpdHkgJmx0OzsgMCB8fCB2ZXJib3NpdHkgJmd0OyA0KQotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpEZWNvbXByZXNzCi0gIGlmIEJaX09LIHdhcyByZXR1cm5lZAotICBubyBzcGVjaWZpYyBhY3Rpb24gcmVxdWlyZWQgaW4gY2FzZSBvZiBlcnJvcjwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiekRlY29tcHJlc3MiPjwvYT4zLjMuNS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekRlY29tcHJlc3MgKCBiel9zdHJlYW0gKnN0cm0gKTs8L3ByZT4KLTxwPlByb3ZpZGVzIG1vcmUgaW5wdXQgYW5kL291dCBvdXRwdXQgYnVmZmVyIHNwYWNlIGZvciB0aGUKLWxpYnJhcnkuICBUaGUgY2FsbGVyIG1haW50YWlucyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIGFuZCB1c2VzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHRvIHRyYW5zZmVyCi1kYXRhIGJldHdlZW4gdGhlbS48L3A+Ci08cD5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X2luPC9jb2RlPiBzaG91bGQgcG9pbnQgYXQgdGhlCi1jb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPgotc2hvdWxkIGluZGljYXRlIGhvdyBtYW55IGJ5dGVzIHRoZSBsaWJyYXJ5IG1heSByZWFkLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiB1cGRhdGVzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfaW48L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX2luPC9jb2RlPiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIGl0IGhhcyByZWFkLjwvcD4KLTxwPlNpbWlsYXJseSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4gc2hvdWxkCi1wb2ludCB0byBhIGJ1ZmZlciBpbiB3aGljaCB0aGUgdW5jb21wcmVzc2VkIG91dHB1dCBpcyB0byBiZQotcGxhY2VkLCB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXZhaWxfb3V0PC9jb2RlPgotaW5kaWNhdGluZyBob3cgbXVjaCBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gdXBkYXRlcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX291dDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX291dDwvY29kZT4gdG8gcmVmbGVjdCB0aGUgbnVtYmVyCi1vZiBieXRlcyBvdXRwdXQuPC9wPgotPHA+WW91IG1heSBwcm92aWRlIGFuZCByZW1vdmUgYXMgbGl0dGxlIG9yIGFzIG11Y2ggZGF0YSBhcyB5b3UKLWxpa2Ugb24gZWFjaCBjYWxsIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+LiAgSW4gdGhlIGxpbWl0LAotaXQgaXMgYWNjZXB0YWJsZSB0byBzdXBwbHkgYW5kIHJlbW92ZSBkYXRhIG9uZSBieXRlIGF0IGEgdGltZSwKLWFsdGhvdWdoIHRoaXMgd291bGQgYmUgdGVycmlibHkgaW5lZmZpY2llbnQuICBZb3Ugc2hvdWxkIGFsd2F5cwotZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGJ5dGUgb2Ygb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZSBhdAotZWFjaCBjYWxsLjwvcD4KLTxwPlVzZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IGlzCi1zaW1wbGVyIHRoYW4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LjwvcD4KLTxwPllvdSBzaG91bGQgcHJvdmlkZSBpbnB1dCBhbmQgcmVtb3ZlIG91dHB1dCBhcyBkZXNjcmliZWQKLWFib3ZlLCBhbmQgcmVwZWF0ZWRseSBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHVudGlsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGlzIHJldHVybmVkLgotQXBwZWFyYW5jZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+Ci1kZW5vdGVzIHRoYXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPgotaGFzIGRldGVjdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHdpbGwgbm90Ci1wcm9kdWNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4gdW50aWwgYWxsCi1vdXRwdXQgZGF0YSBoYXMgYmVlbiBwbGFjZWQgaW50byB0aGUgb3V0cHV0IGJ1ZmZlciwgc28gb25jZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiBhcHBlYXJzLCB5b3UgYXJlCi1ndWFyYW50ZWVkIHRvIGhhdmUgYXZhaWxhYmxlIGFsbCB0aGUgZGVjb21wcmVzc2VkIG91dHB1dCwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+IGNhbiBzYWZlbHkKLWJlIGNhbGxlZC48L3A+Ci08cD5JZiBjYXNlIG9mIGFuIGVycm9yIHJldHVybiB2YWx1ZSwgeW91IHNob3VsZCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+IHRvIGNsZWFuIHVwCi1hbmQgcmVsZWFzZSBtZW1vcnkuPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIG9yIHN0cm0tJmd0O3MgaXMgTlVMTAotICBvciBzdHJtLSZndDthdmFpbF9vdXQgJmx0OyAxCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3IgaXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtCi1CWl9EQVRBX0VSUk9SX01BR0lDCi0gIGlmIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9NRU1fRVJST1IKLSAgaWYgdGhlcmUgd2Fzbid0IGVub3VnaCBtZW1vcnkgYXZhaWxhYmxlCi1CWl9TVFJFQU1fRU5ECi0gIGlmIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgZGF0YSBzdHJlYW0gd2FzIGRldGVjdGVkIGFuZCBhbGwKLSAgb3V0cHV0IGluIGhhcyBiZWVuIGNvbnN1bWVkLCBlZyBzLS0mZ3Q7YXZhaWxfb3V0ICZndDsgMAotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpEZWNvbXByZXNzCi0gIGlmIEJaX09LIHdhcyByZXR1cm5lZAotQloyX2J6RGVjb21wcmVzc0VuZAotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpEZWNvbXByZXNzLWVuZCI+PC9hPjMuMy42LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6RGVjb21wcmVzc0VuZCAoIGJ6X3N0cmVhbSAqc3RybSApOzwvcHJlPgotPHA+UmVsZWFzZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBkZWNvbXByZXNzaW9uCi1zdHJlYW0uPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIG9yIHN0cm0tJmd0O3MgaXMgTlVMTAotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIE5vbmUuPC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJobC1pbnRlcmZhY2UiPjwvYT4zLjQuoEhpZ2gtbGV2ZWwgaW50ZXJmYWNlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0IGZpbGVzLiAgRmlyc3QsIHNvbWUKLWdlbmVyYWwgcG9pbnRzLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+QWxsIG9mIHRoZSBmdW5jdGlvbnMgdGFrZSBhbgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmludCo8L2NvZGU+IGZpcnN0IGFyZ3VtZW50LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+LiAgQWZ0ZXIgZWFjaCBjYWxsLAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IHNob3VsZCBiZSBjb25zdWx0ZWQKLSAgZmlyc3QgdG8gZGV0ZXJtaW5lIHRoZSBvdXRjb21lIG9mIHRoZSBjYWxsLiAgSWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPiwgdGhlIGNhbGwgY29tcGxldGVkCi0gIHN1Y2Nlc3NmdWxseSwgYW5kIG9ubHkgdGhlbiBzaG91bGQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLSAgZnVuY3Rpb24gKGlmIGFueSkgYmUgY29uc3VsdGVkLiAgSWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0lPX0VSUk9SPC9jb2RlPiwgdGhlcmUgd2FzIGFuCi0gIGVycm9yIHJlYWRpbmcvd3JpdGluZyB0aGUgdW5kZXJseWluZyBjb21wcmVzc2VkIGZpbGUsIGFuZCB5b3UKLSAgc2hvdWxkIHRoZW4gY29uc3VsdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmVycm5vPC9jb2RlPiAvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cGVycm9yPC9jb2RlPiB0byBkZXRlcm1pbmUgdGhlIGNhdXNlCi0gIG9mIHRoZSBkaWZmaWN1bHR5LiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPgotICBtYXkgYWxzbyBiZSBzZXQgdG8gdmFyaW91cyBvdGhlciB2YWx1ZXM7IHByZWNpc2UgZGV0YWlscyBhcmUKLSAgZ2l2ZW4gb24gYSBwZXItZnVuY3Rpb24gYmFzaXMgYmVsb3cuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+SWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpbmRpY2F0ZXMKLSAgYW4gZXJyb3IgKGllLCBhbnl0aGluZyBleGNlcHQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT4gYW5kCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4pLCB5b3Ugc2hvdWxkCi0gIGltbWVkaWF0ZWx5IGNhbGwKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+IChvcgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlQ2xvc2U8L2NvZGU+LCBkZXBlbmRpbmcgb24KLSAgd2hldGhlciB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gcmVhZCBvciB0byB3cml0ZSkgdG8gZnJlZSB1cCBhbGwKLSAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtLiAgT25jZSBhbiBlcnJvciBoYXMgYmVlbgotICBpbmRpY2F0ZWQsIGJlaGF2aW91ciBvZiBhbGwgY2FsbHMgZXhjZXB0Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPgotICAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPikgaXMKLSAgdW5kZWZpbmVkLiAgVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgKDEpCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gc2hvdWxkIGJlIGNoZWNrZWQKLSAgYWZ0ZXIgZWFjaCBjYWxsLCBhbmQgKDIpIGlmCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gaW5kaWNhdGVzIGFuIGVycm9yLAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT4KLSAgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4pIHNob3VsZCB0aGVuCi0gIGJlIGNhbGxlZCB0byBjbGVhbiB1cC48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5UaGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GSUxFKjwvY29kZT4gYXJndW1lbnRzCi0gIHBhc3NlZCB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPiAvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPiBzaG91bGQgYmUgc2V0Ci0gIHRvIGJpbmFyeSBtb2RlLiAgTW9zdCBVbml4IHN5c3RlbXMgd2lsbCBkbyB0aGlzIGJ5IGRlZmF1bHQsIGJ1dAotICBvdGhlciBwbGF0Zm9ybXMsIGluY2x1ZGluZyBXaW5kb3dzIGFuZCBNYWMsIHdpbGwgbm90LiAgSWYgeW91Ci0gIG9taXQgdGhpcywgeW91IG1heSBlbmNvdW50ZXIgcHJvYmxlbXMgd2hlbiBtb3ZpbmcgY29kZSB0byBuZXcKLSAgcGxhdGZvcm1zLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPk1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGJ5Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bWFsbG9jPC9jb2RlPiAvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlZTwvY29kZT4uICBBdCBwcmVzZW50IHRoZXJlIGlzIG5vCi0gIGZhY2lsaXR5IGZvciB1c2VyLWRlZmluZWQgbWVtb3J5IGFsbG9jYXRvcnMgaW4gdGhlIGZpbGUgSS9PCi0gIGZ1bmN0aW9ucyAoY291bGQgZWFzaWx5IGJlIGFkZGVkLCB0aG91Z2gpLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6cmVhZG9wZW4iPjwvYT4zLjQuMS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgdm9pZCBCWkZJTEU7Ci0KLUJaRklMRSAqQloyX2J6UmVhZE9wZW4oIGludCAqYnplcnJvciwgRklMRSAqZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyYm9zaXR5LCBpbnQgc21hbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1bnVzZWQsIGludCBuVW51c2VkICk7PC9wcmU+Ci08cD5QcmVwYXJlIHRvIHJlYWQgY29tcHJlc3NlZCBkYXRhIGZyb20gZmlsZSBoYW5kbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZjwvY29kZT4uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+IHNob3VsZCByZWZlciB0byBhIGZpbGUgd2hpY2gKLWhhcyBiZWVuIG9wZW5lZCBmb3IgcmVhZGluZywgYW5kIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZXJyb3IoZik8L2NvZGU+KWlzIG5vdCBzZXQuICBJZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zbWFsbDwvY29kZT4gaXMgMSwgdGhlIGxpYnJhcnkgd2lsbCB0cnkKLXRvIGRlY29tcHJlc3MgdXNpbmcgbGVzcyBtZW1vcnksIGF0IHRoZSBleHBlbnNlIG9mIHNwZWVkLjwvcD4KLTxwPkZvciByZWFzb25zIGV4cGxhaW5lZCBiZWxvdywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gd2lsbCBkZWNvbXByZXNzIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uVW51c2VkPC9jb2RlPiBieXRlcyBzdGFydGluZyBhdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij51bnVzZWQ8L2NvZGU+LCBiZWZvcmUgc3RhcnRpbmcgdG8gcmVhZAotZnJvbSB0aGUgZmlsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+LiAgQXQgbW9zdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NQVhfVU5VU0VEPC9jb2RlPiBieXRlcyBtYXkgYmUKLXN1cHBsaWVkIGxpa2UgdGhpcy4gIElmIHRoaXMgZmFjaWxpdHkgaXMgbm90IHJlcXVpcmVkLCB5b3Ugc2hvdWxkCi1wYXNzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TlVMTDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjA8L2NvZGU+IGZvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij51bnVzZWQ8L2NvZGU+IGFuZAotbjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VW51c2VkPC9jb2RlPiByZXNwZWN0aXZlbHkuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c21hbGw8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPlRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCB0byBkZWNvbXByZXNzIGEgZmlsZSBjYW5ub3QgYmUKLWRldGVybWluZWQgdW50aWwgdGhlIGZpbGUncyBoZWFkZXIgaGFzIGJlZW4gcmVhZC4gIFNvIGl0IGlzCi1wb3NzaWJsZSB0aGF0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+Ci1yZXR1cm5zIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT0s8L2NvZGU+IGJ1dCBhIHN1YnNlcXVlbnQKLWNhbGwgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aWxsIHJldHVybgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NRU1fRVJST1I8L2NvZGU+LjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBmIGlzIE5VTEwKLSAgb3Igc21hbGwgaXMgbmVpdGhlciAwIG5vciAxCi0gIG9yICggdW51c2VkID09IE5VTEwgJmFtcDsmYW1wOyBuVW51c2VkICE9IDAgKQotICBvciAoIHVudXNlZCAhPSBOVUxMICZhbXA7JmFtcDsgISgwICZsdDs9IG5VbnVzZWQgJmx0Oz0gQlpfTUFYX1VOVVNFRCkgKQotQlpfSU9fRVJST1IKLSAgaWYgZmVycm9yKGYpIGlzIG5vbnplcm8KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sKLSAgb3RoZXJ3aXNlLjwvcHJlPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+UG9pbnRlciB0byBhbiBhYnN0cmFjdCBCWkZJTEUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotTlVMTAotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9ielJlYWQKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotQloyX2J6Q2xvc2UKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6cmVhZCI+PC9hPjMuNC4yLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6UmVhZCAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTs8L3ByZT4KLTxwPlJlYWRzIHVwIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGVuPC9jb2RlPgotKHVuY29tcHJlc3NlZCkgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmI8L2NvZGU+IGludG8gdGhlIGJ1ZmZlcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idWY8L2NvZGU+LiAgSWYgdGhlIHJlYWQgd2FzCi1zdWNjZXNzZnVsLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IGlzIHNldCB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT4gYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKLXJlYWQgaXMgcmV0dXJuZWQuICBJZiB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gd2lsbCBiZSBzZXQgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4sIGFuZCB0aGUgbnVtYmVyIG9mCi1ieXRlcyByZWFkIGlzIHJldHVybmVkLiAgQWxsIG90aGVyCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IHZhbHVlcyBkZW5vdGUgYW4KLWVycm9yLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gd2lsbCBzdXBwbHkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGVuPC9jb2RlPiBieXRlcywgdW5sZXNzIHRoZSBsb2dpY2FsCi1zdHJlYW0gZW5kIGlzIGRldGVjdGVkIG9yIGFuIGVycm9yIG9jY3Vycy4gIEJlY2F1c2Ugb2YgdGhpcywgaXQKLWlzIHBvc3NpYmxlIHRvIGRldGVjdCB0aGUgc3RyZWFtIGVuZCBieSBvYnNlcnZpbmcgd2hlbiB0aGUgbnVtYmVyCi1vZiBieXRlcyByZXR1cm5lZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQuCi1OZXZlcnRoZWxlc3MsIHRoaXMgaXMgcmVnYXJkZWQgYXMgaW5hZHZpc2FibGU7IHlvdSBzaG91bGQgaW5zdGVhZAotY2hlY2sgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBhZnRlciBldmVyeSBjYWxsCi1hbmQgd2F0Y2ggb3V0IGZvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPi48L3A+Ci08cD5JbnRlcm5hbGx5LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+Ci1jb3BpZXMgZGF0YSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgaW4gY2h1bmtzIG9mIHNpemUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUFYX1VOVVNFRDwvY29kZT4gYnl0ZXMgYmVmb3JlCi1kZWNvbXByZXNzaW5nIGl0LiAgSWYgdGhlIGZpbGUgY29udGFpbnMgbW9yZSBieXRlcyB0aGFuIHN0cmljdGx5Ci1uZWVkZWQgdG8gcmVhY2ggdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gd2lsbCBhbG1vc3QgY2VydGFpbmx5Ci1yZWFkIHNvbWUgb2YgdGhlIHRyYWlsaW5nIGRhdGEgYmVmb3JlIHNpZ25hbGxpbmcKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU0VRVUVOQ0VfRU5EPC9jb2RlPi4gIFRvIGNvbGxlY3QgdGhlCi1yZWFkIGJ1dCB1bnVzZWQgZGF0YSBvbmNlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VORDwvY29kZT4gaGFzIGFwcGVhcmVkLAotY2FsbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvZGU+Ci1pbW1lZGlhdGVseSBiZWZvcmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPi48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgYiBpcyBOVUxMIG9yIGJ1ZiBpcyBOVUxMIG9yIGxlbiAmbHQ7IDAKLUJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ieldyaXRlT3BlbgotQlpfSU9fRVJST1IKLSAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgcmVhZGluZyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUKLUJaX1VORVhQRUNURURfRU9GCi0gIGlmIHRoZSBjb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIAotICB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZAotQlpfREFUQV9FUlJPUgotICBpZiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIHdhcyBkZXRlY3RlZCBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0KLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIHN0cmVhbSBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSByZXF1aXNpdGUgaGVhZGVyIGJ5dGVzIAotICAoaWUsIGlzIG5vdCBhIGJ6aXAyIGRhdGEgZmlsZSkuICBUaGlzIGlzIHJlYWxseSAKLSAgYSBzcGVjaWFsIGNhc2Ugb2YgQlpfREFUQV9FUlJPUi4KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IHdhcyBhdmFpbGFibGUKLUJaX1NUUkVBTV9FTkQKLSAgaWYgdGhlIGxvZ2ljYWwgZW5kIG9mIHN0cmVhbSB3YXMgZGV0ZWN0ZWQuCi1CWl9PSwotICBvdGhlcndpc2UuPC9wcmU+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5udW1iZXIgb2YgYnl0ZXMgcmVhZAotICBpZiBiemVycm9yIGlzIEJaX09LIG9yIEJaX1NUUkVBTV9FTkQKLXVuZGVmaW5lZAotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbGxlY3QgZGF0YSBmcm9tIGJ1ZiwgdGhlbiBCWjJfYnpSZWFkIG9yIEJaMl9ielJlYWRDbG9zZQotICBpZiBiemVycm9yIGlzIEJaX09LCi1jb2xsZWN0IGRhdGEgZnJvbSBidWYsIHRoZW4gQloyX2J6UmVhZENsb3NlIG9yIEJaMl9ielJlYWRHZXRVbnVzZWQKLSAgaWYgYnplcnJvciBpcyBCWl9TRVFVRU5DRV9FTkQKLUJaMl9ielJlYWRDbG9zZQotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpyZWFkZ2V0dW51c2VkIj48L2E+My40LjMuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgQloyX2J6UmVhZEdldFVudXNlZCggaW50KiBiemVycm9yLCBCWkZJTEUgKmIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogdW51c2VkLCBpbnQqIG5VbnVzZWQgKTs8L3ByZT4KLTxwPlJldHVybnMgZGF0YSB3aGljaCB3YXMgcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgYnV0Ci13YXMgbm90IG5lZWRlZCB0byBnZXQgdG8gdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KnVudXNlZDwvY29kZT4gaXMgc2V0IHRvIHRoZSBhZGRyZXNzIG9mCi10aGUgZGF0YSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Km5VbnVzZWQ8L2NvZGU+IHRvIHRoZQotbnVtYmVyIG9mIGJ5dGVzLiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qblVudXNlZDwvY29kZT4gd2lsbAotYmUgc2V0IHRvIGEgdmFsdWUgYmV0d2VlbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjA8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NQVhfVU5VU0VEPC9jb2RlPiBpbmNsdXNpdmUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgb25jZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiBoYXMgc2lnbmFsbGVkCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGJ1dCBiZWZvcmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPi48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgYiBpcyBOVUxMCi0gIG9yIHVudXNlZCBpcyBOVUxMIG9yIG5VbnVzZWQgaXMgTlVMTAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgQlpfU1RSRUFNX0VORCBoYXMgbm90IGJlZW4gc2lnbmFsbGVkCi0gIG9yIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ieldyaXRlT3BlbgotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpSZWFkQ2xvc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpyZWFkY2xvc2UiPjwvYT4zLjQuNC6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkIEJaMl9ielJlYWRDbG9zZSAoIGludCAqYnplcnJvciwgQlpGSUxFICpiICk7PC9wcmU+Ci08cD5SZWxlYXNlcyBhbGwgbWVtb3J5IHBlcnRhaW5pbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iPC9jb2RlPi4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPiBkb2VzIG5vdCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZjbG9zZTwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgZmlsZQotaGFuZGxlLCBzbyB5b3Ugc2hvdWxkIGRvIHRoYXQgeW91cnNlbGYgaWYgYXBwcm9wcmlhdGUuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT4gc2hvdWxkIGJlIGNhbGxlZAotdG8gY2xlYW4gdXAgYWZ0ZXIgYWxsIGVycm9yIHNpdHVhdGlvbnMuPC9wPgotPHA+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT46PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9iek9wZW5Xcml0ZQotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ub25lPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6d3JpdGVvcGVuIj48L2E+My40LjUuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpGSUxFICpCWjJfYnpXcml0ZU9wZW4oIGludCAqYnplcnJvciwgRklMRSAqZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZTEwMGssIGludCB2ZXJib3NpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdvcmtGYWN0b3IgKTs8L3ByZT4KLTxwPlByZXBhcmUgdG8gd3JpdGUgY29tcHJlc3NlZCBkYXRhIHRvIGZpbGUgaGFuZGxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+LgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mPC9jb2RlPiBzaG91bGQgcmVmZXIgdG8gYSBmaWxlIHdoaWNoCi1oYXMgYmVlbiBvcGVuZWQgZm9yIHdyaXRpbmcsIGFuZCBmb3Igd2hpY2ggdGhlIGVycm9yIGluZGljYXRvcgotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmVycm9yKGYpPC9jb2RlPilpcyBub3Qgc2V0LjwvcD4KLTxwPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJsb2NrU2l6ZTEwMGs8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij53b3JrRmFjdG9yPC9jb2RlPiwgc2VlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4uPC9wPgotPHA+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYXQgdGhpcyBzdGFnZSwgc28gaWYgdGhlCi1jYWxsIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4gY2Fubm90IGJlIHNpZ25hbGxlZAotYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+LjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBmIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayAmbHQ7IDEgb3IgYmxvY2tTaXplMTAwayAmZ3Q7IDkKLUJaX0lPX0VSUk9SCi0gIGlmIGZlcnJvcihmKSBpcyBub256ZXJvCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLUJaX09LCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+UG9pbnRlciB0byBhbiBhYnN0cmFjdCBCWkZJTEUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotTlVMTAotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9ieldyaXRlCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLSAgKHlvdSBjb3VsZCBnbyBkaXJlY3RseSB0byBCWjJfYnpXcml0ZUNsb3NlLCBidXQgdGhpcyB3b3VsZCBiZSBwcmV0dHkgcG9pbnRsZXNzKQotQloyX2J6V3JpdGVDbG9zZQotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnp3cml0ZSI+PC9hPjMuNC42LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCBCWjJfYnpXcml0ZSAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTs8L3ByZT4KLTxwPkFic29yYnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZW48L2NvZGU+IGJ5dGVzIGZyb20gdGhlCi1idWZmZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idWY8L2NvZGU+LCBldmVudHVhbGx5IHRvIGJlCi1jb21wcmVzc2VkIGFuZCB3cml0dGVuIHRvIHRoZSBmaWxlLjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwgb3IgYnVmIGlzIE5VTEwgb3IgbGVuICZsdDsgMAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZS4KLUJaX09LCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiendyaXRlY2xvc2UiPjwvYT4zLjQuNy6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCBCWjJfYnpXcml0ZUNsb3NlKCBpbnQgKmJ6ZXJyb3IsIEJaRklMRSogZiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGFiYW5kb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXQgKTsKLQotdm9pZCBCWjJfYnpXcml0ZUNsb3NlNjQoIGludCAqYnplcnJvciwgQlpGSUxFKiBmLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhYmFuZG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luX2xvMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW5faGkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfbG8zMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfaGkzMiApOzwvcHJlPgotPHA+Q29tcHJlc3NlcyBhbmQgZmx1c2hlcyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIGFsbCBkYXRhIHNvCi1mYXIgc3VwcGxpZWQgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4uCi1UaGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIG1hcmtlcnMgYXJlIGFsc28gd3JpdHRlbiwgc28gc3Vic2VxdWVudAotY2FsbHMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4gYXJlCi1pbGxlZ2FsLiAgQWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXByZXNzZWQgZmlsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iPC9jb2RlPiBpcyByZWxlYXNlZC4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmZsdXNoPC9jb2RlPiBpcyBjYWxsZWQgb24gdGhlCi1jb21wcmVzc2VkIGZpbGUsIGJ1dCBpdCBpcyBub3QKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmNsb3NlPC9jb2RlPidkLjwvcD4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4gaXMKLWNhbGxlZCB0byBjbGVhbiB1cCBhZnRlciBhbiBlcnJvciwgdGhlIG9ubHkgYWN0aW9uIGlzIHRvIHJlbGVhc2UKLXRoZSBtZW1vcnkuICBUaGUgbGlicmFyeSByZWNvcmRzIHRoZSBlcnJvciBjb2RlcyBpc3N1ZWQgYnkKLXByZXZpb3VzIGNhbGxzLCBzbyB0aGlzIHNpdHVhdGlvbiB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkuCi1UaGVyZSBpcyBubyBhdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjb21wcmVzc2lvbiBvcGVyYXRpb24sIG5vciB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZmx1c2g8L2NvZGU+IHRoZSBjb21wcmVzc2VkIGZpbGUuICBZb3UKLWNhbiBmb3JjZSB0aGlzIGJlaGF2aW91ciB0byBoYXBwZW4gZXZlbiBpbiB0aGUgY2FzZSBvZiBubyBlcnJvciwKLWJ5IHBhc3NpbmcgYSBub256ZXJvIHZhbHVlIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmFiYW5kb248L2NvZGU+LjwvcD4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmJ5dGVzX2luPC9jb2RlPiBpcyBub24tbnVsbCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Km5ieXRlc19pbjwvY29kZT4gd2lsbCBiZSBzZXQgdG8gYmUgdGhlCi10b3RhbCB2b2x1bWUgb2YgdW5jb21wcmVzc2VkIGRhdGEgaGFuZGxlZC4gIFNpbWlsYXJseSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmJ5dGVzX291dDwvY29kZT4gd2lsbCBiZSBzZXQgdG8gdGhlCi10b3RhbCB2b2x1bWUgb2YgY29tcHJlc3NlZCBkYXRhIHdyaXR0ZW4uICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoCi1vbGRlciB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4gb25seSB5aWVsZHMgdGhlCi1sb3dlciAzMiBiaXRzIG9mIHRoZXNlIGNvdW50cy4gIFVzZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlNjQ8L2NvZGU+IGlmIHlvdSB3YW50Ci10aGUgZnVsbCA2NCBiaXQgY291bnRzLiAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgb3RoZXJ3aXNlCi1hYnNvbHV0ZWx5IGlkZW50aWNhbC48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZQotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImVtYmVkIj48L2E+My40LjguoEhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoZSBoaWdoLWxldmVsIGxpYnJhcnkgZmFjaWxpdGF0ZXMgdXNlIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBkYXRhIHN0cmVhbXMgd2hpY2ggZm9ybQotc29tZSBwYXJ0IG9mIGEgc3Vycm91bmRpbmcsIGxhcmdlciBkYXRhIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPkZvciB3cml0aW5nLCB0aGUgbGlicmFyeSB0YWtlcyBhbiBvcGVuIGZpbGUgaGFuZGxlLAotICB3cml0ZXMgY29tcHJlc3NlZCBkYXRhIHRvIGl0LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZmbHVzaDwvY29kZT5lcyBpdCBidXQgZG9lcyBub3QKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mY2xvc2U8L2NvZGU+IGl0LiAgVGhlIGNhbGxpbmcKLSAgYXBwbGljYXRpb24gY2FuIHdyaXRlIGl0cyBvd24gZGF0YSBiZWZvcmUgYW5kIGFmdGVyIHRoZQotICBjb21wcmVzc2VkIGRhdGEgc3RyZWFtLCB1c2luZyB0aGF0IHNhbWUgZmlsZSBoYW5kbGUuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+UmVhZGluZyBpcyBtb3JlIGNvbXBsZXgsIGFuZCB0aGUgZmFjaWxpdGllcyBhcmUgbm90IGFzCi0gIGdlbmVyYWwgYXMgdGhleSBjb3VsZCBiZSBzaW5jZSBnZW5lcmFsaXR5IGlzIGhhcmQgdG8gcmVjb25jaWxlCi0gIHdpdGggZWZmaWNpZW5jeS4gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4KLSAgcmVhZHMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIGluIGJsb2NrcyBvZiBzaXplCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUFYX1VOVVNFRDwvY29kZT4gYnl0ZXMsIGFuZCBpbgotICBkb2luZyBzbyBwcm9iYWJseSB3aWxsIG92ZXJzaG9vdCB0aGUgbG9naWNhbCBlbmQgb2YgY29tcHJlc3NlZAotICBzdHJlYW0uICBUbyByZWNvdmVyIHRoaXMgZGF0YSBvbmNlIGRlY29tcHJlc3Npb24gaGFzIGVuZGVkLAotICBjYWxsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4gYWZ0ZXIKLSAgdGhlIGxhc3QgY2FsbCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+Ci0gICh0aGUgb25lIHJldHVybmluZwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+KSBidXQgYmVmb3JlCi0gIGNhbGxpbmcKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+LjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPlRoaXMgbWVjaGFuaXNtIG1ha2VzIGl0IGVhc3kgdG8gZGVjb21wcmVzcyBtdWx0aXBsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gc3RyZWFtcyBwbGFjZWQgZW5kLXRvLWVuZC4KLUFzIHRoZSBlbmQgb2Ygb25lIHN0cmVhbSwgd2hlbgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiByZXR1cm5zCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+LCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvZGU+IHRvIGNvbGxlY3QKLXRoZSB1bnVzZWQgZGF0YSAoY29weSBpdCBpbnRvIHlvdXIgb3duIGJ1ZmZlciBzb21ld2hlcmUpLiAgVGhhdAotZGF0YSBmb3JtcyB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tcHJlc3NlZCBzdHJlYW0uICBUbyBzdGFydAotdW5jb21wcmVzc2luZyB0aGF0IG5leHQgc3RyZWFtLCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPiBhZ2FpbiwgZmVlZGluZyBpbgotdGhlIHVudXNlZCBkYXRhIHZpYSB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij51bnVzZWQ8L2NvZGU+IC8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+blVudXNlZDwvY29kZT4gcGFyYW1ldGVycy4gIEtlZXAgZG9pbmcKLXRoaXMgdW50aWwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiByZXR1cm4KLWNvaW5jaWRlcyB3aXRoIHRoZSBwaHlzaWNhbCBlbmQgb2YgZmlsZQotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmVvZihmKTwvY29kZT4pLiAgSW4gdGhpcyBzaXR1YXRpb24KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4gd2lsbCBvZgotY291cnNlIHJldHVybiBubyBkYXRhLjwvcD4KLTxwPlRoaXMgc2hvdWxkIGdpdmUgc29tZSBmZWVsIGZvciBob3cgdGhlIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlCi1jYW4gYmUgdXNlZC4gIElmIHlvdSByZXF1aXJlIGV4dHJhIGZsZXhpYmlsaXR5LCB5b3UnbGwgaGF2ZSB0bwotYml0ZSB0aGUgYnVsbGV0IGFuZCBnZXQgdG8gZ3JpcHMgd2l0aCB0aGUgbG93LWxldmVsCi1pbnRlcmZhY2UuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJzdGQtcmR3ciI+PC9hPjMuNC45LqBTdGFuZGFyZCBmaWxlLXJlYWRpbmcvd3JpdGluZyBjb2RlPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkhlcmUncyBob3cgeW91J2Qgd3JpdGUgZGF0YSB0byBhIGNvbXByZXNzZWQgZmlsZTo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+RklMRSogICBmOwotQlpGSUxFKiBiOwotaW50ICAgICBuQnVmOwotY2hhciAgICBidWZbIC8qIHdoYXRldmVyIHNpemUgeW91IGxpa2UgKi8gXTsKLWludCAgICAgYnplcnJvcjsKLWludCAgICAgbldyaXR0ZW47Ci0KLWYgPSBmb3BlbiAoICJteWZpbGUuYnoyIiwgInciICk7Ci1pZiAoICFmICkgewotIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ieldyaXRlT3BlbiggJmFtcDtiemVycm9yLCBmLCA5ICk7Ci1pZiAoYnplcnJvciAhPSBCWl9PSykgewotIEJaMl9ieldyaXRlQ2xvc2UgKCBiICk7Ci0gLyogaGFuZGxlIGVycm9yICovCi19Ci0KLXdoaWxlICggLyogY29uZGl0aW9uICovICkgewotIC8qIGdldCBkYXRhIHRvIHdyaXRlIGludG8gYnVmLCBhbmQgc2V0IG5CdWYgYXBwcm9wcmlhdGVseSAqLwotIG5Xcml0dGVuID0gQloyX2J6V3JpdGUgKCAmYW1wO2J6ZXJyb3IsIGIsIGJ1ZiwgbkJ1ZiApOwotIGlmIChiemVycm9yID09IEJaX0lPX0VSUk9SKSB7IAotICAgQloyX2J6V3JpdGVDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotICAgLyogaGFuZGxlIGVycm9yICovCi0gfQotfQotCi1CWjJfYnpXcml0ZUNsb3NlKCAmYW1wO2J6ZXJyb3IsIGIgKTsKLWlmIChiemVycm9yID09IEJaX0lPX0VSUk9SKSB7Ci0gLyogaGFuZGxlIGVycm9yICovCi19PC9wcmU+Ci08cD5BbmQgdG8gcmVhZCBmcm9tIGEgY29tcHJlc3NlZCBmaWxlOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5GSUxFKiAgIGY7Ci1CWkZJTEUqIGI7Ci1pbnQgICAgIG5CdWY7Ci1jaGFyICAgIGJ1ZlsgLyogd2hhdGV2ZXIgc2l6ZSB5b3UgbGlrZSAqLyBdOwotaW50ICAgICBiemVycm9yOwotaW50ICAgICBuV3JpdHRlbjsKLQotZiA9IGZvcGVuICggIm15ZmlsZS5iejIiLCAiciIgKTsKLWlmICggIWYgKSB7Ci0gIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ielJlYWRPcGVuICggJmFtcDtiemVycm9yLCBmLCAwLCBOVUxMLCAwICk7Ci1pZiAoIGJ6ZXJyb3IgIT0gQlpfT0sgKSB7Ci0gIEJaMl9ielJlYWRDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotICAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLQotYnplcnJvciA9IEJaX09LOwotd2hpbGUgKCBiemVycm9yID09IEJaX09LICZhbXA7JmFtcDsgLyogYXJiaXRyYXJ5IG90aGVyIGNvbmRpdGlvbnMgKi8pIHsKLSAgbkJ1ZiA9IEJaMl9ielJlYWQgKCAmYW1wO2J6ZXJyb3IsIGIsIGJ1ZiwgLyogc2l6ZSBvZiBidWYgKi8gKTsKLSAgaWYgKCBiemVycm9yID09IEJaX09LICkgewotICAgIC8qIGRvIHNvbWV0aGluZyB3aXRoIGJ1ZlswIC4uIG5CdWYtMV0gKi8KLSAgfQotfQotaWYgKCBiemVycm9yICE9IEJaX1NUUkVBTV9FTkQgKSB7Ci0gICBCWjJfYnpSZWFkQ2xvc2UgKCAmYW1wO2J6ZXJyb3IsIGIgKTsKLSAgIC8qIGhhbmRsZSBlcnJvciAqLwotfSBlbHNlIHsKLSAgIEJaMl9ielJlYWRDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotfTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0idXRpbC1mbnMiPjwvYT4zLjUuoFV0aWxpdHkgZnVuY3Rpb25zPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6YnVmZnRvYnVmZmNvbXByZXNzIj48L2E+My41LjEuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcyggY2hhciogICAgICAgICBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIHNvdXJjZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgYmxvY2tTaXplMTAwaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB3b3JrRmFjdG9yICk7PC9wcmU+Ci08cD5BdHRlbXB0cyB0byBjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNvdXJjZVswCi0uLiBzb3VyY2VMZW4tMV08L2NvZGU+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVzdFswIC4uICpkZXN0TGVuLTFdPC9jb2RlPi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipkZXN0TGVuPC9jb2RlPiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPgotaXMgcmV0dXJuZWQuICBJZiB0aGUgY29tcHJlc3NlZCBkYXRhIHdvbid0IGZpdCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KmRlc3RMZW48L2NvZGU+IGlzIHVuY2hhbmdlZCwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09VVEJVRkZfRlVMTDwvY29kZT4gaXMKLXJldHVybmVkLjwvcD4KLTxwPkNvbXByZXNzaW9uIGluIHRoaXMgbWFubmVyIGlzIGEgb25lLXNob3QgZXZlbnQsIGRvbmUgd2l0aCBhCi1zaW5nbGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgVGhlIHJlc3VsdGluZyBjb21wcmVzc2VkIGRhdGEgaXMgYQotY29tcGxldGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0IGRhdGEKLXN0cmVhbS4gIFRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgbWFraW5nIGFkZGl0aW9uYWwgY2FsbHMgdG8KLXByb3ZpZGUgZXh0cmEgaW5wdXQgZGF0YS4gIElmIHlvdSB3YW50IHRoYXQga2luZCBvZiBtZWNoYW5pc20sCi11c2UgdGhlIGxvdy1sZXZlbCBpbnRlcmZhY2UuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YmxvY2tTaXplMTAwazwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPndvcmtGYWN0b3I8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPi48L3A+Ci08cD5UbyBndWFyYW50ZWUgdGhhdCB0aGUgY29tcHJlc3NlZCBkYXRhIHdpbGwgZml0IGluIGl0cwotYnVmZmVyLCBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIG9mIHNpemUgMSUgbGFyZ2VyIHRoYW4gdGhlCi11bmNvbXByZXNzZWQgZGF0YSwgcGx1cyBzaXggaHVuZHJlZCBleHRyYSBieXRlcy48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPgotd2lsbCBub3Qgd3JpdGUgZGF0YSBhdCBvciBiZXlvbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVzdFsqZGVzdExlbl08L2NvZGU+LCBldmVuIGluIGNhc2Ugb2YKLWJ1ZmZlciBvdmVyZmxvdy48L3A+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBkZXN0IGlzIE5VTEwgb3IgZGVzdExlbiBpcyBOVUxMCi0gIG9yIGJsb2NrU2l6ZTEwMGsgJmx0OyAxIG9yIGJsb2NrU2l6ZTEwMGsgJmd0OyA5Ci0gIG9yIHZlcmJvc2l0eSAmbHQ7IDAgb3IgdmVyYm9zaXR5ICZndDsgNAotICBvciB3b3JrRmFjdG9yICZsdDsgMCBvciB3b3JrRmFjdG9yICZndDsgMjUwCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgCi1CWl9PVVRCVUZGX0ZVTEwKLSAgaWYgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBleGNlZWRzICpkZXN0TGVuCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpidWZmdG9idWZmZGVjb21wcmVzcyI+PC9hPjMuNS4yLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKCBjaGFyKiAgICAgICAgIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZGVzdExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgc291cmNlTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHNtYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHZlcmJvc2l0eSApOzwvcHJlPgotPHA+QXR0ZW1wdHMgdG8gZGVjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNvdXJjZVswCi0uLiBzb3VyY2VMZW4tMV08L2NvZGU+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVzdFswIC4uICpkZXN0TGVuLTFdPC9jb2RlPi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipkZXN0TGVuPC9jb2RlPiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSB1bmNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT0s8L2NvZGU+Ci1pcyByZXR1cm5lZC4gIElmIHRoZSBjb21wcmVzc2VkIGRhdGEgd29uJ3QgZml0LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qZGVzdExlbjwvY29kZT4gaXMgdW5jaGFuZ2VkLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT1VUQlVGRl9GVUxMPC9jb2RlPiBpcwotcmV0dXJuZWQuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zb3VyY2U8L2NvZGU+IGlzIGFzc3VtZWQgdG8gaG9sZAotYSBjb21wbGV0ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBmb3JtYXQgZGF0YQotc3RyZWFtLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29kZT4gdHJpZXMKLXRvIGRlY29tcHJlc3MgdGhlIGVudGlyZXR5IG9mIHRoZSBzdHJlYW0gaW50byB0aGUgb3V0cHV0Ci1idWZmZXIuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c21hbGw8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPkJlY2F1c2UgdGhlIGNvbXByZXNzaW9uIHJhdGlvIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgY2Fubm90Ci1iZSBrbm93biBpbiBhZHZhbmNlLCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBndWFyYW50ZWUgdGhhdCB0aGUKLW91dHB1dCBidWZmZXIgd2lsbCBiZSBiaWcgZW5vdWdoLiAgWW91IG1heSBvZiBjb3Vyc2UgbWFrZQotYXJyYW5nZW1lbnRzIGluIHlvdXIgY29kZSB0byByZWNvcmQgdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZAotZGF0YSwgYnV0IHN1Y2ggYSBtZWNoYW5pc20gaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzCi1saWJyYXJ5LjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+Ci13aWxsIG5vdCB3cml0ZSBkYXRhIGF0IG9yIGJleW9uZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kZXN0WypkZXN0TGVuXTwvY29kZT4sIGV2ZW4gaW4gY2FzZSBvZgotYnVmZmVyIG92ZXJmbG93LjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGRlc3QgaXMgTlVMTCBvciBkZXN0TGVuIGlzIE5VTEwKLSAgb3Igc21hbGwgIT0gMCAmYW1wOyZhbXA7IHNtYWxsICE9IDEKLSAgb3IgdmVyYm9zaXR5ICZsdDsgMCBvciB2ZXJib3NpdHkgJmd0OyA0Ci1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgCi1CWl9PVVRCVUZGX0ZVTEwKLSAgaWYgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBleGNlZWRzICpkZXN0TGVuCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3Igd2FzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIGRhdGEKLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIGNvbXByZXNzZWQgZGF0YSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9VTkVYUEVDVEVEX0VPRgotICBpZiB0aGUgY29tcHJlc3NlZCBkYXRhIGVuZHMgdW5leHBlY3RlZGx5Ci1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InpsaWItY29tcGF0Ij48L2E+My42LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPllvc2hpb2thIFRzdW5lbyBoYXMgY29udHJpYnV0ZWQgc29tZSBmdW5jdGlvbnMgdG8gZ2l2ZQotYmV0dGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eS4KLVRoZXNlIGZ1bmN0aW9ucyBhcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpvcGVuPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6cmVhZDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iendyaXRlPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Zmx1c2g8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpjbG9zZTwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemVycm9yPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6bGliVmVyc2lvbjwvY29kZT4uICBUaGVzZQotZnVuY3Rpb25zIGFyZSBub3QgKHlldCkgb2ZmaWNpYWxseSBwYXJ0IG9mIHRoZSBsaWJyYXJ5LiAgSWYgdGhleQotYnJlYWssIHlvdSBnZXQgdG8ga2VlcCBhbGwgdGhlIHBpZWNlcy4gIE5ldmVydGhlbGVzcywgSSB0aGluawotdGhleSB3b3JrIG9rLjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHZvaWQgQlpGSUxFOwotCi1jb25zdCBjaGFyICogQloyX2J6bGliVmVyc2lvbiAoIHZvaWQgKTs8L3ByZT4KLTxwPlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWkZJTEUgKiBCWjJfYnpvcGVuICAoIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUgKTsKLUJaRklMRSAqIEJaMl9iemRvcGVuICggaW50ICAgICAgICBmZCwgICAgY29uc3QgY2hhciAqbW9kZSApOzwvcHJlPgotPHA+T3BlbnMgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGUgZm9yCi1yZWFkaW5nIG9yIHdyaXRpbmcsIHVzaW5nIGVpdGhlciBpdHMgbmFtZSBvciBhIHByZS1leGlzdGluZyBmaWxlCi1kZXNjcmlwdG9yLiAgQW5hbG9nb3VzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Zm9wZW48L2NvZGU+Ci1hbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZG9wZW48L2NvZGU+LjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6cmVhZCAgKCBCWkZJTEUqIGIsIHZvaWQqIGJ1ZiwgaW50IGxlbiApOwotaW50IEJaMl9iendyaXRlICggQlpGSUxFKiBiLCB2b2lkKiBidWYsIGludCBsZW4gKTs8L3ByZT4KLTxwPlJlYWRzL3dyaXRlcyBkYXRhIGZyb20vdG8gYSBwcmV2aW91c2x5IG9wZW5lZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWkZJTEU8L2NvZGU+LiAgQW5hbG9nb3VzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZyZWFkPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZndyaXRlPC9jb2RlPi48L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50ICBCWjJfYnpmbHVzaCAoIEJaRklMRSogYiApOwotdm9pZCBCWjJfYnpjbG9zZSAoIEJaRklMRSogYiApOzwvcHJlPgotPHA+Rmx1c2hlcy9jbG9zZXMgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaRklMRTwvY29kZT4uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemZsdXNoPC9jb2RlPiBkb2Vzbid0IGFjdHVhbGx5IGRvCi1hbnl0aGluZy4gIEFuYWxvZ291cyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZmbHVzaDwvY29kZT4KLWFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZjbG9zZTwvY29kZT4uPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IGNoYXIgKiBCWjJfYnplcnJvciAoIEJaRklMRSAqYiwgaW50ICplcnJudW0gKTwvcHJlPgotPHA+UmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtb3JlIHJlY2VudCBlcnJvciBzdGF0dXMgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YjwvY29kZT4sIGFuZCBhbHNvIHNldHMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KmVycm51bTwvY29kZT4gdG8gaXRzIG51bWVyaWNhbAotdmFsdWUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InN0ZGlvLWZyZWUiPjwvYT4zLjcuoFVzaW5nIHRoZSBsaWJyYXJ5IGluIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGRpbzwvY29kZT4tZnJlZSBlbnZpcm9ubWVudDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJzdGRpby1ieWUiPjwvYT4zLjcuMS6gR2V0dGluZyByaWQgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGRpbzwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+SW4gYSBkZWVwbHkgZW1iZWRkZWQgYXBwbGljYXRpb24sIHlvdSBtaWdodCB3YW50IHRvIHVzZQotanVzdCB0aGUgbWVtb3J5LXRvLW1lbW9yeSBmdW5jdGlvbnMuICBZb3UgY2FuIGRvIHRoaXMKLWNvbnZlbmllbnRseSBieSBjb21waWxpbmcgdGhlIGxpYnJhcnkgd2l0aCBwcmVwcm9jZXNzb3Igc3ltYm9sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX05PX1NURElPPC9jb2RlPiBkZWZpbmVkLiAgRG9pbmcgdGhpcwotZ2l2ZXMgeW91IGEgbGlicmFyeSBjb250YWluaW5nIG9ubHkgdGhlIGZvbGxvd2luZyBlaWdodAotZnVuY3Rpb25zOjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+PC9wPgotPHA+V2hlbiBjb21waWxlZCBsaWtlIHRoaXMsIGFsbCBmdW5jdGlvbnMgd2lsbCBpZ25vcmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmVyYm9zaXR5PC9jb2RlPiBzZXR0aW5ncy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImNyaXRpY2FsLWVycm9yIj48L2E+My43LjIuoENyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+IGNvbnRhaW5zIGEgbnVtYmVyCi1vZiBpbnRlcm5hbCBhc3NlcnRpb24gY2hlY2tzIHdoaWNoIHNob3VsZCwgbmVlZGxlc3MgdG8gc2F5LCBuZXZlcgotYmUgYWN0aXZhdGVkLiAgTmV2ZXJ0aGVsZXNzLCBpZiBhbiBhc3NlcnRpb24gc2hvdWxkIGZhaWwsCi1iZWhhdmlvdXIgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbGlicmFyeSB3YXMgY29tcGlsZWQgd2l0aAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9OT19TVERJTzwvY29kZT4gc2V0LjwvcD4KLTxwPkZvciBhIG5vcm1hbCBjb21waWxlLCBhbiBhc3NlcnRpb24gZmFpbHVyZSB5aWVsZHMgdGhlCi1tZXNzYWdlOjwvcD4KLTxkaXYgY2xhc3M9ImJsb2NrcXVvdGUiPjxibG9ja3F1b3RlIGNsYXNzPSJibG9ja3F1b3RlIj4KLTxwPmJ6aXAyL2xpYmJ6aXAyOiBpbnRlcm5hbCBlcnJvciBudW1iZXIgTi48L3A+Ci08cD5UaGlzIGlzIGEgYnVnIGluIGJ6aXAyL2xpYmJ6aXAyLCAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3LgotUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDoganNld2FyZEBiemlwLm9yZy4gIElmIHRoaXMgaGFwcGVuZWQKLXdoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYQotY29tcG9uZW50LCB5b3Ugc2hvdWxkIGFsc28gcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBhdXRob3IocykKLW9mIHRoYXQgcHJvZ3JhbS4gIFBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byByZXBvcnQgdGhpcyBidWc7Ci10aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXIKLXF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuICBKdWxpYW4gU2V3YXJkLCAxMCBEZWNlbWJlciAyMDA3LgotPC9wPgotPC9ibG9ja3F1b3RlPjwvZGl2PgotPHA+d2hlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5OPC9jb2RlPiBpcyBzb21lIGVycm9yIGNvZGUKLW51bWJlci4gIElmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TiA9PSAxMDA3PC9jb2RlPiwgaXQgYWxzbwotcHJpbnRzIHNvbWUgZXh0cmEgdGV4dCBhZHZpc2luZyB0aGUgcmVhZGVyIHRoYXQgdW5yZWxpYWJsZSBtZW1vcnkKLWlzIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCBpbnRlcm5hbCBlcnJvciAxMDA3LiAoVGhpcyBpcyBhCi1mcmVxdWVudGx5LW9ic2VydmVkLXBoZW5vbWVub24gd2l0aCB2ZXJzaW9ucyAxLjAuMC8xLjAuMSkuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5leGl0KDMpPC9jb2RlPiBpcyB0aGVuCi1jYWxsZWQuPC9wPgotPHA+Rm9yIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGRpbzwvY29kZT4tZnJlZSBsaWJyYXJ5LAotYXNzZXJ0aW9uIGZhaWx1cmVzIHJlc3VsdCBpbiBhIGNhbGwgdG8gYSBmdW5jdGlvbiBkZWNsYXJlZAotYXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmV4dGVybiB2b2lkIGJ6X2ludGVybmFsX2Vycm9yICggaW50IGVycmNvZGUgKTs8L3ByZT4KLTxwPlRoZSByZWxldmFudCBjb2RlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4gIFlvdSBzaG91bGQKLXN1cHBseSBzdWNoIGEgZnVuY3Rpb24uPC9wPgotPHA+SW4gZWl0aGVyIGNhc2UsIG9uY2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaGFzIG9jY3VycmVkLCBhbnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiByZWNvcmRzIGludm9sdmVkIGNhbgotYmUgcmVnYXJkZWQgYXMgaW52YWxpZC4gIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVzdW1lIG5vcm1hbAotb3BlcmF0aW9uIHdpdGggdGhlbS48L3A+Ci08cD5Zb3UgbWF5LCBvZiBjb3Vyc2UsIGNoYW5nZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZyB0byBzdWl0Ci15b3VyIG5lZWRzLiAgQXMgSSBzYWlkIGFib3ZlLCBjcml0aWNhbCBlcnJvcnMgaW5kaWNhdGUgYnVncyBpbgotdGhlIGxpYnJhcnkgYW5kIHNob3VsZCBub3Qgb2NjdXIuICBBbGwgIm5vcm1hbCIgZXJyb3Igc2l0dWF0aW9ucwotYXJlIGluZGljYXRlZCB2aWEgZXJyb3IgcmV0dXJuIGNvZGVzIGZyb20gZnVuY3Rpb25zLCBhbmQgY2FuIGJlCi1yZWNvdmVyZWQgZnJvbS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJ3aW4tZGxsIj48L2E+My44LqBNYWtpbmcgYSBXaW5kb3dzIERMTDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5FdmVyeXRoaW5nIHJlbGF0ZWQgdG8gV2luZG93cyBoYXMgYmVlbiBjb250cmlidXRlZCBieQotWW9zaGlva2EgVHN1bmVvCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50c3VuZW9AcnIuaWlqNHUub3IuanA8L2NvZGU+KSwgc28KLXlvdSBzaG91bGQgc2VuZCB5b3VyIHF1ZXJpZXMgdG8gaGltIChidXQgcGVyaGFwcyBDYzogbWUsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmpzZXdhcmRAYnppcC5vcmc8L2NvZGU+KS48L3A+Ci08cD5NeSB2YWd1ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdG8gZG8gaXM6IHVzaW5nIFZpc3VhbCBDKysKLTUuMCwgb3BlbiB0aGUgcHJvamVjdCBmaWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6Mi5kc3A8L2NvZGU+LCBhbmQgYnVpbGQuICBUaGF0J3MKLWFsbC48L3A+Ci08cD5JZiB5b3UgY2FuJ3Qgb3BlbiB0aGUgcHJvamVjdCBmaWxlIGZvciBzb21lIHJlYXNvbiwgbWFrZSBhCi1uZXcgb25lLCBuYW1pbmcgdGhlc2UgZmlsZXM6Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJsb2Nrc29ydC5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWIuYzwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmNvbXByZXNzLmM8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5jcmN0YWJsZS5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVjb21wcmVzcy5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+aHVmZm1hbi5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cmFuZHRhYmxlLmM8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiejIuZGVmPC9jb2RlPi4gIFlvdSB3aWxsIGFsc28gbmVlZAotdG8gbmFtZSB0aGUgaGVhZGVyIGZpbGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWIuaDwvY29kZT4KLWFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6bGliX3ByaXZhdGUuaDwvY29kZT4uPC9wPgotPHA+SWYgeW91IGRvbid0IHVzZSBWQysrLCB5b3UgbWF5IG5lZWQgdG8gZGVmaW5lIHRoZQotcHJvcHJvY2Vzc29yIHN5bWJvbAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5fV0lOMzI8L2NvZGU+LjwvcD4KLTxwPkZpbmFsbHksIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGxsdGVzdC5jPC9jb2RlPiBpcyBhCi1zYW1wbGUgcHJvZ3JhbSB1c2luZyB0aGUgRExMLiAgSXQgaGFzIGEgcHJvamVjdCBmaWxlLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kbGx0ZXN0LmRzcDwvY29kZT4uPC9wPgotPHA+SWYgeW91IGp1c3Qgd2FudCBhIG1ha2VmaWxlIGZvciBWaXN1YWwgQywgaGF2ZSBhIGxvb2sgYXQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bWFrZWZpbGUubXNjPC9jb2RlPi48L3A+Ci08cD5CZSBhd2FyZSB0aGF0IGlmIHlvdSBjb21waWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBpdHNlbGYgb24gV2luMzIsIHlvdSBtdXN0Ci1zZXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9VTklYPC9jb2RlPiB0byAwIGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9MQ0NXSU4zMjwvY29kZT4gdG8gMSwgaW4gdGhlIGZpbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIuYzwvY29kZT4sIGJlZm9yZSBjb21waWxpbmcuCi1PdGhlcndpc2UgdGhlIHJlc3VsdGluZyBiaW5hcnkgd29uJ3Qgd29yayBjb3JyZWN0bHkuPC9wPgotPHA+SSBoYXZlbid0IHRyaWVkIGFueSBvZiB0aGlzIHN0dWZmIG15c2VsZiwgYnV0IGl0IGFsbCBsb29rcwotcGxhdXNpYmxlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9Im1pc2MiPjwvYT40LqBNaXNjZWxsYW5lYTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPgotPHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPgotPGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2xpbWl0cyI+NC4xLiBMaW1pdGF0aW9ucyBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNwb3J0LWlzc3VlcyI+NC4yLiBQb3J0YWJpbGl0eSBpc3N1ZXM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjYnVncyI+NC4zLiBSZXBvcnRpbmcgYnVnczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNwYWNrYWdlIj40LjQuIERpZCB5b3UgZ2V0IHRoZSByaWdodCBwYWNrYWdlPzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNyZWFkaW5nIj40LjUuIEZ1cnRoZXIgUmVhZGluZzwvYT48L3NwYW4+PC9kdD4KLTwvZGw+Ci08L2Rpdj4KLTxwPlRoZXNlIGFyZSBqdXN0IHNvbWUgcmFuZG9tIHRob3VnaHRzIG9mIG1pbmUuICBZb3VyIG1pbGVhZ2UKLW1heSB2YXJ5LjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibGltaXRzIj48L2E+NC4xLqBMaW1pdGF0aW9ucyBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTEuMC5YPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+MC45LjU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4wLjkuMDwvY29kZT4gdXNlIGV4YWN0bHkgdGhlIHNhbWUgZmlsZQotZm9ybWF0IGFzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMi0wLjE8L2NvZGU+LiAgVGhpcyBkZWNpc2lvbiB3YXMKLW1hZGUgaW4gdGhlIGludGVyZXN0cyBvZiBzdGFiaWxpdHkuICBDcmVhdGluZyB5ZXQgYW5vdGhlcgotaW5jb21wYXRpYmxlIGNvbXByZXNzZWQgZmlsZSBmb3JtYXQgd291bGQgY3JlYXRlIGZ1cnRoZXIKLWNvbmZ1c2lvbiBhbmQgZGlzcnVwdGlvbiBmb3IgdXNlcnMuPC9wPgotPHA+TmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIG5vdCBhIHBhaW5sZXNzIGRlY2lzaW9uLiAgRGV2ZWxvcG1lbnQKLXdvcmsgc2luY2UgdGhlIHJlbGVhc2Ugb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDItMC4xPC9jb2RlPiBpbiBBdWd1c3QgMTk5NyBoYXMKLXNob3duIGNvbXBsZXhpdGllcyBpbiB0aGUgZmlsZSBmb3JtYXQgd2hpY2ggc2xvdyBkb3duCi1kZWNvbXByZXNzaW9uIGFuZCwgaW4gcmV0cm9zcGVjdCwgYXJlIHVubmVjZXNzYXJ5LiAgVGhlc2UKLWFyZTo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBydW4tbGVuZ3RoIGVuY29kZXIsIHdoaWNoIGlzIHRoZSBmaXJzdCBvZiB0aGUKLSAgIGNvbXByZXNzaW9uIHRyYW5zZm9ybWF0aW9ucywgaXMgZW50aXJlbHkgaXJyZWxldmFudC4gIFRoZQotICAgb3JpZ2luYWwgcHVycG9zZSB3YXMgdG8gcHJvdGVjdCB0aGUgc29ydGluZyBhbGdvcml0aG0gZnJvbSB0aGUKLSAgIHZlcnkgd29yc3QgY2FzZSBpbnB1dDogYSBzdHJpbmcgb2YgcmVwZWF0ZWQgc3ltYm9scy4gIEJ1dAotICAgYWxnb3JpdGhtIHN0ZXBzIFE2YSBhbmQgUTZiIGluIHRoZSBvcmlnaW5hbCBCdXJyb3dzLVdoZWVsZXIKLSAgIHRlY2huaWNhbCByZXBvcnQgKFNSQy0xMjQpIHNob3cgaG93IHJlcGVhdHMgY2FuIGJlIGhhbmRsZWQKLSAgIHdpdGhvdXQgZGlmZmljdWx0eSBpbiBibG9jayBzb3J0aW5nLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPgotPHA+VGhlIHJhbmRvbWlzYXRpb24gbWVjaGFuaXNtIGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8gYmUKLSAgIHRoZXJlLiAgVWRpIE1hbmJlciBhbmQgR2VuZSBNeWVycyBwdWJsaXNoZWQgYSBzdWZmaXggYXJyYXkKLSAgIGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gYSBmZXcgeWVhcnMgYmFjaywgd2hpY2ggY2FuIGJlIGVtcGxveWVkCi0gICB0byBzb3J0IGFueSBibG9jaywgbm8gbWF0dGVyIGhvdyByZXBldGl0aXZlLCBpbiBPKE4gbG9nIE4pCi0gICB0aW1lLiAgU3Vic2VxdWVudCB3b3JrIGJ5IEt1bmloaWtvIFNhZGFrYW5lIGhhcyBwcm9kdWNlZCBhCi0gICBkZXJpdmF0aXZlIE8oTiAobG9nIE4pXjIpIGFsZ29yaXRobSB3aGljaCB1c3VhbGx5IG91dHBlcmZvcm1zCi0gICB0aGUgTWFuYmVyLU15ZXJzIGFsZ29yaXRobS48L3A+Ci08cD5JIGNvdWxkIGhhdmUgY2hhbmdlZCB0byBTYWRha2FuZSdzIGFsZ29yaXRobSwgYnV0IEkgZmluZAotICAgaXQgdG8gYmUgc2xvd2VyIHRoYW4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4ncwotICAgZXhpc3RpbmcgYWxnb3JpdGhtIGZvciBtb3N0IGlucHV0cywgYW5kIHRoZSByYW5kb21pc2F0aW9uCi0gICBtZWNoYW5pc20gcHJvdGVjdHMgYWRlcXVhdGVseSBhZ2FpbnN0IGJhZCBjYXNlcy4gIEkgZGlkbid0Ci0gICB0aGluayBpdCB3YXMgYSBnb29kIHRyYWRlb2ZmIHRvIG1ha2UuICBQYXJ0bHkgdGhpcyBpcyBkdWUgdG8KLSAgIHRoZSBmYWN0IHRoYXQgSSB3YXMgbm90IGZsb29kZWQgd2l0aCBlbWFpbCBjb21wbGFpbnRzIGFib3V0Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTAuMTwvY29kZT4ncyBwZXJmb3JtYW5jZSBvbgotICAgcmVwZXRpdGl2ZSBkYXRhLCBzbyBwZXJoYXBzIGl0IGlzbid0IGEgcHJvYmxlbSBmb3IgcmVhbAotICAgaW5wdXRzLjwvcD4KLTxwPlByb2JhYmx5IHRoZSBiZXN0IGxvbmctdGVybSBzb2x1dGlvbiwgYW5kIHRoZSBvbmUgSSBoYXZlCi0gICBpbmNvcnBvcmF0ZWQgaW50byAwLjkuNSBhbmQgYWJvdmUsIGlzIHRvIHVzZSB0aGUgZXhpc3RpbmcKLSAgIHNvcnRpbmcgYWxnb3JpdGhtIGluaXRpYWxseSwgYW5kIGZhbGwgYmFjayB0byBhIE8oTiAobG9nIE4pXjIpCi0gICBhbGdvcml0aG0gaWYgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSBnZXRzIGludG8KLSAgIGRpZmZpY3VsdGllcy48L3A+Ci08L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0IHdhcyBuZXZlciBkZXNpZ25lZCB0byBiZQotICAgaGFuZGxlZCBieSBhIGxpYnJhcnksIGFuZCBJIGhhdmUgaGFkIHRvIGp1bXAgdGhvdWdoIHNvbWUgaG9vcHMKLSAgIHRvIHByb2R1Y2UgYW4gZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIGRlY29tcHJlc3Npb24uICBJdCdzCi0gICBhIGJpdCBoYWlyeS4gIFRyeSBwYXNzaW5nCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmRlY29tcHJlc3MuYzwvY29kZT4gdGhyb3VnaCB0aGUgQwotICAgcHJlcHJvY2Vzc29yIGFuZCB5b3UnbGwgc2VlIHdoYXQgSSBtZWFuLiAgTXVjaCBvZiB0aGlzCi0gICBjb21wbGV4aXR5IGNvdWxkIGhhdmUgYmVlbiBhdm9pZGVkIGlmIHRoZSBjb21wcmVzc2VkIHNpemUgb2YKLSAgIGVhY2ggYmxvY2sgb2YgZGF0YSB3YXMgcmVjb3JkZWQgaW4gdGhlIGRhdGEgc3RyZWFtLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPkFuIEFkbGVyLTMyIGNoZWNrc3VtLCByYXRoZXIgdGhhbiBhIENSQzMyIGNoZWNrc3VtLAotICAgd291bGQgYmUgZmFzdGVyIHRvIGNvbXB1dGUuPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+SXQgd291bGQgYmUgZmFpciB0byBzYXkgdGhhdCB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGZvcm1hdCB3YXMgZnJvemVuIGJlZm9yZSBJCi1wcm9wZXJseSBhbmQgZnVsbHkgdW5kZXJzdG9vZCB0aGUgcGVyZm9ybWFuY2UgY29uc2VxdWVuY2VzIG9mCi1kb2luZyBzby48L3A+Ci08cD5JbXByb3ZlbWVudHMgd2hpY2ggSSB3YXMgYWJsZSB0byBpbmNvcnBvcmF0ZSBpbnRvIDAuOS4wLAotZGVzcGl0ZSB1c2luZyB0aGUgc2FtZSBmaWxlIGZvcm1hdCwgYXJlOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+U2luZ2xlIGFycmF5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIEJXVC4gIFRoaXMKLSAgc2lnbmlmaWNhbnRseSBzcGVlZHMgdXAgZGVjb21wcmVzc2lvbiwgcHJlc3VtYWJseSBiZWNhdXNlIGl0Ci0gIHJlZHVjZXMgdGhlIG51bWJlciBvZiBjYWNoZSBtaXNzZXMuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+RmFzdGVyIGludmVyc2UgTVRGIHRyYW5zZm9ybSBmb3IgbGFyZ2UgTVRGIHZhbHVlcy4KLSAgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbm90aW9uIG9mIHNsaWRpbmcgYmxvY2tzCi0gIG9mIHZhbHVlcy48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTAuOS4wPC9jb2RlPiBub3cgcmVhZHMKLSAgYW5kIHdyaXRlcyBmaWxlcyB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlYWQ8L2NvZGU+Ci0gIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZ3cml0ZTwvY29kZT47IHZlcnNpb24gMC4xIHVzZWQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wdXRjPC9jb2RlPiBhbmQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nZXRjPC9jb2RlPi4gIER1aCEgIFdlbGwsIHlvdSBsaXZlCi0gIGFuZCBsZWFybi48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5GdXJ0aGVyIGFoZWFkLCBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZG8gcmFuZG9tCi1hY2Nlc3MgaW50byBmaWxlcy4gIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgY2FyZWZ1bCBkZXNpZ24gb2YKLWNvbXByZXNzZWQgZmlsZSBmb3JtYXRzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJwb3J0LWlzc3VlcyI+PC9hPjQuMi6gUG9ydGFiaWxpdHkgaXNzdWVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkFmdGVyIHNvbWUgY29uc2lkZXJhdGlvbiwgSSBoYXZlIGRlY2lkZWQgbm90IHRvIHVzZSBHTlUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXV0b2NvbmY8L2NvZGU+IHRvIGNvbmZpZ3VyZSAwLjkuNSBvcgotMS4wLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXV0b2NvbmY8L2NvZGU+LCBhZG1pcmFibGUgYW5kCi13b25kZXJmdWwgdGhvdWdoIGl0IGlzLCBtYWlubHkgYXNzaXN0cyB3aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zCi1iZXR3ZWVuIFVuaXgtbGlrZSBwbGF0Zm9ybXMuICBCdXQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGRvZXNuJ3QgaGF2ZSBtdWNoIGluIHRoZQotd2F5IG9mIHBvcnRhYmlsaXR5IHByb2JsZW1zIG9uIFVuaXg7IG1vc3Qgb2YgdGhlIGRpZmZpY3VsdGllcwotYXBwZWFyIHdoZW4gcG9ydGluZyB0byB0aGUgTWFjLCBvciB0byBNaWNyb3NvZnQncyBvcGVyYXRpbmcKLXN5c3RlbXMuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF1dG9jb25mPC9jb2RlPiBkb2Vzbid0IGhlbHAKLWluIHRob3NlIGNhc2VzLCBhbmQgYnJpbmdzIGluIGEgd2hvbGUgbG9hZCBvZiBuZXcKLWNvbXBsZXhpdHkuPC9wPgotPHA+TW9zdCBwZW9wbGUgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgbGlicmFyeSBhbmQKLXByb2dyYW0gdW5kZXIgVW5peCBzdHJhaWdodCBvdXQtb2YtdGhlLWJveCwgc28gdG8gc3BlYWssCi1lc3BlY2lhbGx5IGlmIHlvdSBoYXZlIGEgdmVyc2lvbiBvZiBHTlUgQyBhdmFpbGFibGUuPC9wPgotPHA+VGhlcmUgYXJlIGEgY291cGxlIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9faW5saW5lX188L2NvZGU+IGRpcmVjdGl2ZXMgaW4gdGhlCi1jb2RlLiAgR05VIEMgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z2NjPC9jb2RlPikgc2hvdWxkIGJlCi1hYmxlIHRvIGhhbmRsZSB0aGVtLiAgSWYgeW91J3JlIG5vdCB1c2luZyBHTlUgQywgeW91ciBDIGNvbXBpbGVyCi1zaG91bGRuJ3Qgc2VlIHRoZW0gYXQgYWxsLiAgSWYgeW91ciBjb21waWxlciBkb2VzLCBmb3Igc29tZQotcmVhc29uLCBzZWUgdGhlbSBhbmQgZG9lc24ndCBsaWtlIHRoZW0sIGp1c3QKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+I2RlZmluZTwvY29kZT4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+X19pbmxpbmVfXzwvY29kZT4gdG8gYmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LyogKi88L2NvZGU+LiAgT25lIGVhc3kgd2F5IHRvIGRvIHRoaXMKLWlzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZmxhZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tRF9faW5saW5lX189PC9jb2RlPiwgd2hpY2ggc2hvdWxkIGJlCi11bmRlcnN0b29kIGJ5IG1vc3QgVW5peCBjb21waWxlcnMuPC9wPgotPHA+SWYgeW91IHN0aWxsIGhhdmUgZGlmZmljdWx0aWVzLCB0cnkgY29tcGlsaW5nIHdpdGggdGhlCi1tYWNybyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUklDVF9BTlNJPC9jb2RlPiBkZWZpbmVkLgotVGhpcyBzaG91bGQgZW5hYmxlIHlvdSB0byBidWlsZCB0aGUgbGlicmFyeSBpbiBhIHN0cmljdGx5IEFOU0kKLWNvbXBsaWFudCBlbnZpcm9ubWVudC4gIEJ1aWxkaW5nIHRoZSBwcm9ncmFtIGl0c2VsZiBsaWtlIHRoaXMgaXMKLWRhbmdlcm91cyBhbmQgbm90IHN1cHBvcnRlZCwgc2luY2UgeW91IHJlbW92ZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4ncyBjaGVja3MgYWdhaW5zdAotY29tcHJlc3NpbmcgZGlyZWN0b3JpZXMsIHN5bWJvbGljIGxpbmtzLCBkZXZpY2VzLCBhbmQgb3RoZXIKLW5vdC1yZWFsbHktYS1maWxlIGVudGl0aWVzLiAgVGhpcyBjb3VsZCBjYXVzZSBmaWxlc3lzdGVtCi1jb3JydXB0aW9uITwvcD4KLTxwPk9uZSBvdGhlciB0aGluZzogaWYgeW91IGNyZWF0ZSBhCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBiaW5hcnkgZm9yIHB1YmxpYyBkaXN0cmlidXRpb24sCi1wbGVhc2UgY29uc2lkZXIgbGlua2luZyBpdCBzdGF0aWNhbGx5ICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmdjYwotLXN0YXRpYzwvY29kZT4pLiAgVGhpcyBhdm9pZHMgYWxsIHNvcnRzIG9mIGxpYnJhcnktdmVyc2lvbgotaXNzdWVzIHRoYXQgb3RoZXJzIG1heSBlbmNvdW50ZXIgbGF0ZXIgb24uPC9wPgotPHA+SWYgeW91IGJ1aWxkIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IG9uCi1XaW4zMiwgeW91IG11c3Qgc2V0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfVU5JWDwvY29kZT4gdG8gMAotYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTENDV0lOMzI8L2NvZGU+IHRvIDEsIGluIHRoZQotZmlsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLmM8L2NvZGU+LCBiZWZvcmUgY29tcGlsaW5nLgotT3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgYmluYXJ5IHdvbid0IHdvcmsgY29ycmVjdGx5LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJidWdzIj48L2E+NC4zLqBSZXBvcnRpbmcgYnVnczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5JIHRyaWVkIHByZXR0eSBoYXJkIHRvIG1ha2Ugc3VyZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgYnVnIGZyZWUsIGJvdGggYnkKLWRlc2lnbiBhbmQgYnkgdGVzdGluZy4gIEhvcGVmdWxseSB5b3UnbGwgbmV2ZXIgbmVlZCB0byByZWFkIHRoaXMKLXNlY3Rpb24gZm9yIHJlYWwuPC9wPgotPHA+TmV2ZXJ0aGVsZXNzLCBpZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBkaWVzCi13aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0LCBhIGJ1cyBlcnJvciBvciBhbiBpbnRlcm5hbCBhc3NlcnRpb24KLWZhaWx1cmUsIGl0IHdpbGwgYXNrIHlvdSB0byBlbWFpbCBtZSBhIGJ1ZyByZXBvcnQuICBFeHBlcmllbmNlIGZyb20KLXllYXJzIG9mIGZlZWRiYWNrIG9mIGJ6aXAyIHVzZXJzIGluZGljYXRlcyB0aGF0IGFsbW9zdCBhbGwgdGhlc2UKLXByb2JsZW1zIGNhbiBiZSB0cmFjZWQgdG8gZWl0aGVyIGNvbXBpbGVyIGJ1Z3Mgb3IgaGFyZHdhcmUKLXByb2JsZW1zLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+Ci08cD5SZWNvbXBpbGUgdGhlIHByb2dyYW0gd2l0aCBubyBvcHRpbWlzYXRpb24sIGFuZAotICBzZWUgaWYgaXQgd29ya3MuICBBbmQvb3IgdHJ5IGEgZGlmZmVyZW50IGNvbXBpbGVyLiAgSSBoZWFyZCBhbGwKLSAgc29ydHMgb2Ygc3RvcmllcyBhYm91dCB2YXJpb3VzIGZsYXZvdXJzIG9mIEdOVSBDIChhbmQgb3RoZXIKLSAgY29tcGlsZXJzKSBnZW5lcmF0aW5nIGJhZCBjb2RlIGZvcgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiwgYW5kIEkndmUgcnVuIGFjcm9zcyB0d28KLSAgc3VjaCBleGFtcGxlcyBteXNlbGYuPC9wPgotPHA+Mi43LlggdmVyc2lvbnMgb2YgR05VIEMgYXJlIGtub3duIHRvIGdlbmVyYXRlIGJhZCBjb2RlCi0gIGZyb20gdGltZSB0byB0aW1lLCBhdCBoaWdoIG9wdGltaXNhdGlvbiBsZXZlbHMuICBJZiB5b3UgZ2V0Ci0gIHByb2JsZW1zLCB0cnkgdXNpbmcgdGhlIGZsYWdzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LU8yPC9jb2RlPgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mb21pdC1mcmFtZS1wb2ludGVyPC9jb2RlPgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mbm8tc3RyZW5ndGgtcmVkdWNlPC9jb2RlPi4gIFlvdQotICBzaG91bGQgc3BlY2lmaWNhbGx5IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5vdDwvZW0+PC9zcGFuPiB1c2UKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZnVucm9sbC1sb29wczwvY29kZT4uPC9wPgotPHA+WW91IG1heSBub3RpY2UgdGhhdCB0aGUgTWFrZWZpbGUgcnVucyBzaXggdGVzdHMgYXMgcGFydAotICBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gIElmIHRoZSBwcm9ncmFtIHBhc3NlcyBhbGwgb2YgdGhlc2UsIGl0J3MKLSAgYSBwcmV0dHkgZ29vZCAoYnV0IG5vdCAxMDAlKSBpbmRpY2F0aW9uIHRoYXQgdGhlIGNvbXBpbGVyIGhhcwotICBkb25lIGl0cyBqb2IgY29ycmVjdGx5LjwvcD4KLTwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+Ci08cD5JZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPgotICBjcmFzaGVzIHJhbmRvbWx5LCBhbmQgdGhlIGNyYXNoZXMgYXJlIG5vdCByZXBlYXRhYmxlLCB5b3UgbWF5Ci0gIGhhdmUgYSBmbGFreSBtZW1vcnkgc3Vic3lzdGVtLgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiByZWFsbHkgaGFtbWVycyB5b3VyCi0gIG1lbW9yeSBoaWVyYXJjaHksIGFuZCBpZiBpdCdzIGEgYml0IG1hcmdpbmFsLCB5b3UgbWF5IGdldCB0aGVzZQotICBwcm9ibGVtcy4gIERpdHRvIGlmIHlvdXIgZGlzayBvciBJL08gc3Vic3lzdGVtIGlzIHNsb3dseQotICBmYWlsaW5nLiAgWXVwLCB0aGlzIHJlYWxseSBkb2VzIGhhcHBlbi48L3A+Ci08cD5UcnkgdXNpbmcgYSBkaWZmZXJlbnQgbWFjaGluZSBvZiB0aGUgc2FtZSB0eXBlLCBhbmQgc2VlCi0gIGlmIHlvdSBjYW4gcmVwZWF0IHRoZSBwcm9ibGVtLjwvcD4KLTwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+VGhpcyBpc24ndCByZWFsbHkgYSBidWcsIGJ1dCAuLi4gSWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdGVsbHMgeW91IHlvdXIgZmlsZSBpcwotICBjb3JydXB0ZWQgb24gZGVjb21wcmVzc2lvbiwgYW5kIHlvdSBvYnRhaW5lZCB0aGUgZmlsZSB2aWEgRlRQLAotICB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgeW91IGZvcmdvdCB0byB0ZWxsIEZUUCB0byBkbyBhCi0gIGJpbmFyeSBtb2RlIHRyYW5zZmVyLiAgVGhhdCBhYnNvbHV0ZWx5IHdpbGwgY2F1c2UgdGhlIGZpbGUgdG8KLSAgYmUgbm9uLWRlY29tcHJlc3NpYmxlLiAgWW91J2xsIGhhdmUgdG8gdHJhbnNmZXIgaXQKLSAgYWdhaW4uPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+SWYgeW91J3ZlIGluY29ycG9yYXRlZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4gaW50byB5b3VyIG93biBwcm9ncmFtCi1hbmQgYXJlIGdldHRpbmcgcHJvYmxlbXMsIHBsZWFzZSwgcGxlYXNlLCBwbGVhc2UsIGNoZWNrIHRoYXQgdGhlCi1wYXJhbWV0ZXJzIHlvdSBhcmUgcGFzc2luZyBpbiBjYWxscyB0byB0aGUgbGlicmFyeSwgYXJlIGNvcnJlY3QsCi1hbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBpcyBhbGxvd2FibGUuCi1JIGhhdmUgdHJpZWQgdG8gbWFrZSB0aGUgbGlicmFyeSByb2J1c3QgYWdhaW5zdCBzdWNoIHByb2JsZW1zLAotYnV0IEknbSBzdXJlIEkgaGF2ZW4ndCBzdWNjZWVkZWQuPC9wPgotPHA+RmluYWxseSwgaWYgdGhlIGFib3ZlIGNvbW1lbnRzIGRvbid0IGhlbHAsIHlvdSdsbCBoYXZlIHRvCi1zZW5kIG1lIGEgYnVnIHJlcG9ydC4gIE5vdywgaXQncyBqdXN0IGFtYXppbmcgaG93IG1hbnkgcGVvcGxlCi13aWxsIHNlbmQgbWUgYSBidWcgcmVwb3J0IHNheWluZyBzb21ldGhpbmcgbGlrZTo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+YnppcDIgY3Jhc2hlZCB3aXRoIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBteSBtYWNoaW5lPC9wcmU+Ci08cD5hbmQgYWJzb2x1dGVseSBub3RoaW5nIGVsc2UuICBOZWVkbGVzcyB0byBzYXksIGEgc3VjaCBhCi1yZXBvcnQgaXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG90YWxseSwgdXR0ZXJseSwgY29tcGxldGVseSBhbmQKLWNvbXByZWhlbnNpdmVseSAxMDAlIHVzZWxlc3M7IGEgd2FzdGUgb2YgeW91ciB0aW1lLCBteSB0aW1lLCBhbmQKLW5ldCBiYW5kd2lkdGg8L2VtPjwvc3Bhbj4uICBXaXRoIG5vIGRldGFpbHMgYXQgYWxsLCB0aGVyZSdzIG5vIHdheQotSSBjYW4gcG9zc2libHkgYmVnaW4gdG8gZmlndXJlIG91dCB3aGF0IHRoZSBwcm9ibGVtIGlzLjwvcD4KLTxwPlRoZSBydWxlcyBvZiB0aGUgZ2FtZSBhcmU6IGZhY3RzLCBmYWN0cywgZmFjdHMuICBEb24ndCBvbWl0Ci10aGVtIGJlY2F1c2UgIm9oLCB0aGV5IHdvbid0IGJlIHJlbGV2YW50Ii4gIEF0IHRoZSBiYXJlCi1taW5pbXVtOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5NYWNoaW5lIHR5cGUuICBPcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24uICAKLUV4YWN0IHZlcnNpb24gb2YgYnppcDIgKGRvIGJ6aXAyIC1WKS4gIAotRXhhY3QgdmVyc2lvbiBvZiB0aGUgY29tcGlsZXIgdXNlZC4gIAotRmxhZ3MgcGFzc2VkIHRvIHRoZSBjb21waWxlci48L3ByZT4KLTxwPkhvd2V2ZXIsIHRoZSBtb3N0IGltcG9ydGFudCBzaW5nbGUgdGhpbmcgdGhhdCB3aWxsIGhlbHAgbWUKLWlzIHRoZSBmaWxlIHRoYXQgeW91IHdlcmUgdHJ5aW5nIHRvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgYXQgdGhlCi10aW1lIHRoZSBwcm9ibGVtIGhhcHBlbmVkLiAgV2l0aG91dCB0aGF0LCBteSBhYmlsaXR5IHRvIGRvCi1hbnl0aGluZyBtb3JlIHRoYW4gc3BlY3VsYXRlIGFib3V0IHRoZSBjYXVzZSwgaXMgbGltaXRlZC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0icGFja2FnZSI+PC9hPjQuNC6gRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGlzIGEgcmVzb3VyY2UgaG9nLgotSXQgc29ha3MgdXAgbGFyZ2UgYW1vdW50cyBvZiBDUFUgY3ljbGVzIGFuZCBtZW1vcnkuICBBbHNvLCBpdAotZ2l2ZXMgdmVyeSBsYXJnZSBsYXRlbmNpZXMuICBJbiB0aGUgd29yc3QgY2FzZSwgeW91IGNhbiBmZWVkIG1hbnkKLW1lZ2FieXRlcyBvZiB1bmNvbXByZXNzZWQgZGF0YSBpbnRvIHRoZSBsaWJyYXJ5IGJlZm9yZSBnZXR0aW5nCi1hbnkgY29tcHJlc3NlZCBvdXRwdXQsIHNvIHRoaXMgcHJvYmFibHkgcnVsZXMgb3V0IGFwcGxpY2F0aW9ucwotcmVxdWlyaW5nIGludGVyYWN0aXZlIGJlaGF2aW91ci48L3A+Ci08cD5UaGVzZSBhcmVuJ3QgZmF1bHRzIG9mIG15IGltcGxlbWVudGF0aW9uLCBJIGhvcGUsIGJ1dCBtb3JlCi1hbiBpbnRyaW5zaWMgcHJvcGVydHkgb2YgdGhlIEJ1cnJvd3MtV2hlZWxlciB0cmFuc2Zvcm0KLSh1bmZvcnR1bmF0ZWx5KS4gIE1heWJlIHRoaXMgaXNuJ3Qgd2hhdCB5b3Ugd2FudC48L3A+Ci08cD5JZiB5b3Ugd2FudCBhIGNvbXByZXNzb3IgYW5kL29yIGxpYnJhcnkgd2hpY2ggaXMgZmFzdGVyLAotdXNlcyBsZXNzIG1lbW9yeSBidXQgZ2V0cyBwcmV0dHkgZ29vZCBjb21wcmVzc2lvbiwgYW5kIGhhcwotbWluaW1hbCBsYXRlbmN5LCBjb25zaWRlciBKZWFuLWxvdXAgR2FpbGx5J3MgYW5kIE1hcmsgQWRsZXIncwotd29yaywgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij56bGliLTEuMi4xPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z3ppcC0xLjIuNDwvY29kZT4uICBMb29rIGZvciB0aGVtIGF0IAotPGEgaHJlZj0iaHR0cDovL3d3dy56bGliLm9yZyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LnpsaWIub3JnPC9hPiBhbmQgCi08YSBocmVmPSJodHRwOi8vd3d3Lmd6aXAub3JnIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuZ3ppcC5vcmc8L2E+Ci1yZXNwZWN0aXZlbHkuPC9wPgotPHA+Rm9yIHNvbWV0aGluZyBmYXN0ZXIgYW5kIGxpZ2h0ZXIgc3RpbGwsIHlvdSBtaWdodCB0cnkgTWFya3VzIEYKLVggSiBPYmVyaHVtZXIncyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkxaTzwvY29kZT4gcmVhbC10aW1lCi1jb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnksIGF0IAotPGEgaHJlZj0iaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2U8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJyZWFkaW5nIj48L2E+NC41LqBGdXJ0aGVyIFJlYWRpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgbm90IHJlc2VhcmNoCi13b3JrLCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2Vzbid0IHByZXNlbnQgYW55IG5ldyBpZGVhcy4KLVJhdGhlciwgaXQncyBhbiBlbmdpbmVlcmluZyBleGVyY2lzZSBiYXNlZCBvbiBleGlzdGluZwotaWRlYXMuPC9wPgotPHA+Rm91ciBkb2N1bWVudHMgZGVzY3JpYmUgZXNzZW50aWFsbHkgYWxsIHRoZSBpZGVhcyBiZWhpbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+OjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPk1pY2hhZWygQnVycm93c6BhbmSgRC6gSi6gV2hlZWxlcjo8YnI+Ci2goCJBoGJsb2NrLXNvcnRpbmegbG9zc2xlc3OgZGF0YaBjb21wcmVzc2lvbqBhbGdvcml0aG0iPGJyPgotoKCgMTB0aKBNYXmgMTk5NC6gPGJyPgotoKCgRGlnaXRhbKBTUkOgUmVzZWFyY2igUmVwb3J0oDEyNC48YnI+Ci2goKBmdHA6Ly9mdHAuZGlnaXRhbC5jb20vcHViL0RFQy9TUkMvcmVzZWFyY2gtcmVwb3J0cy9TUkMtMTI0LnBzLmd6PGJyPgotoKCgSWageW91oGhhdmWgdHJvdWJsZaBmaW5kaW5noGl0LKB0cnmgc2VhcmNoaW5noGF0oHRoZTxicj4KLaCgoE5ld6BaZWFsYW5koERpZ2l0YWygTGlicmFyeSygaHR0cDovL3d3dy5uemRsLm9yZy48YnI+Ci08YnI+Ci1EYW5pZWygUy6gSGlyc2NoYmVyZ6BhbmSgRGVicmGgQS6gTGVMZXdlcjxicj4KLaCgIkVmZmljaWVudKBEZWNvZGluZ6BvZqBQcmVmaXigQ29kZXMiPGJyPgotoKCgQ29tbXVuaWNhdGlvbnOgb2agdGhloEFDTSygQXByaWygMTk5MCygVm9soDMzLKBOdW1iZXKgNC48YnI+Ci2goKBZb3WgbWlnaHSgYmWgYWJsZaB0b6BnZXSgYW6gZWxlY3Ryb25pY6Bjb3B5oG9moHRoaXM8YnI+Ci2goKBmcm9toHRoZaBBQ02gRGlnaXRhbKBMaWJyYXJ5Ljxicj4KLTxicj4KLURhdmlkoEouoFdoZWVsZXI8YnI+Ci2goKBQcm9ncmFtoGJyZWQzLmOgYW5koGFjY29tcGFueWluZ6Bkb2N1bWVudKBicmVkMy5wcy48YnI+Ci2goKBUaGlzoGNvbnRhaW5zoHRoZaBpZGVhoGJlaGluZKB0aGWgbXVsdGktdGFibGWgSHVmZm1hbqBjb2Rpbmegc2NoZW1lLjxicj4KLaCgoGZ0cDovL2Z0cC5jbC5jYW0uYWMudWsvdXNlcnMvZGp3My88YnI+Ci08YnI+Ci1Kb26gTC6gQmVudGxleaBhbmSgUm9iZXJ0oFNlZGdld2ljazxicj4KLaCgIkZhc3SgQWxnb3JpdGhtc6Bmb3KgU29ydGluZ6BhbmSgU2VhcmNoaW5noFN0cmluZ3MiPGJyPgotoKCgQXZhaWxhYmxloGZyb22gU2VkZ2V3aWNrJ3Ogd2VioHBhZ2UsPGJyPgotoKCgd3d3LmNzLnByaW5jZXRvbi5lZHUvfnJzPGJyPgotPC9wPjwvZGl2PgotPHA+VGhlIGZvbGxvd2luZyBwYXBlciBnaXZlcyB2YWx1YWJsZSBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8KLXRoZSBhbGdvcml0aG0sIGJ1dCBpcyBub3QgaW1tZWRpYXRlbHkgdGhlIGJhc2lzIG9mIGFueSBjb2RlIHVzZWQKLWluIGJ6aXAyLjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPlBldGVyoEZlbndpY2s6PGJyPgotoKCgQmxvY2ugU29ydGluZ6BUZXh0oENvbXByZXNzaW9uPGJyPgotoKCgUHJvY2VlZGluZ3Ogb2agdGhloDE5dGigQXVzdHJhbGFzaWFuoENvbXB1dGVyoFNjaWVuY2WgQ29uZmVyZW5jZSw8YnI+Ci2goKCgoE1lbGJvdXJuZSygQXVzdHJhbGlhLqCgSmFuoDMxoC2gRmVioDIsoDE5OTYuPGJyPgotoKCgZnRwOi8vZnRwLmNzLmF1Y2tsYW5kLmFjLm56L3B1Yi9wZXRlci1mL0FDU0M5NnBhcGVyLnBzPC9wPjwvZGl2PgotPHA+S3VuaWhpa28gU2FkYWthbmUncyBzb3J0aW5nIGFsZ29yaXRobSwgbWVudGlvbmVkIGFib3ZlLCBpcwotYXZhaWxhYmxlIGZyb206PC9wPgotPGRpdiBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHA+aHR0cDovL25hb21pLmlzLnMudS10b2t5by5hYy5qcC9+c2FkYS9wYXBlcnMvU2FkYTk4Yi5wcy5nejxicj4KLTwvcD48L2Rpdj4KLTxwPlRoZSBNYW5iZXItTXllcnMgc3VmZml4IGFycmF5IGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gaXMKLWRlc2NyaWJlZCBpbiBhIHBhcGVyIGF2YWlsYWJsZSBmcm9tOjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPmh0dHA6Ly93d3cuY3MuYXJpem9uYS5lZHUvcGVvcGxlL2dlbmUvUEFQRVJTL3N1ZmZpeC5wczxicj4KLTwvcD48L2Rpdj4KLTxwPkZpbmFsbHksIHRoZSBmb2xsb3dpbmcgcGFwZXJzIGRvY3VtZW50IHNvbWUKLWludmVzdGlnYXRpb25zIEkgbWFkZSBpbnRvIHRoZSBwZXJmb3JtYW5jZSBvZiBzb3J0aW5nCi1hbmQgZGVjb21wcmVzc2lvbiBhbGdvcml0aG1zOjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPkp1bGlhbqBTZXdhcmQ8YnI+Ci2goKBPbqB0aGWgUGVyZm9ybWFuY2Wgb2agQldUoFNvcnRpbmegQWxnb3JpdGhtczxicj4KLaCgoFByb2NlZWRpbmdzoG9moHRoZaBJRUVFoERhdGGgQ29tcHJlc3Npb26gQ29uZmVyZW5jZaAyMDAwPGJyPgotoKCgoKBTbm93YmlyZCygVXRhaC6goDI4LTMwoE1hcmNooDIwMDAuPGJyPgotPGJyPgotSnVsaWFuoFNld2FyZDxicj4KLaCgoFNwYWNlLXRpbWWgVHJhZGVvZmZzoGluoHRoZaBJbnZlcnNloEItV6BUcmFuc2Zvcm08YnI+Ci2goKBQcm9jZWVkaW5nc6BvZqB0aGWgSUVFRaBEYXRhoENvbXByZXNzaW9uoENvbmZlcmVuY2WgMjAwMTxicj4KLaCgoKCgU25vd2JpcmQsoFV0YWguoKAyNy0yOaBNYXJjaKAyMDAxLjxicj4KLTwvcD48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj48L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucGRmIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjMTBkZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucGRmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBzIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGI2MTBjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC5wcworKysgL2Rldi9udWxsCkBAIC0xLDgyOTAwICswLDAgQEAKLSUhUFMtQWRvYmUtMy4wCi0lJUNyZWF0b3I6IHhwZGYvcGRmdG9wcyAzLjAxCi0lJUxhbmd1YWdlTGV2ZWw6IDIKLSUlRG9jdW1lbnRTdXBwbGllZFJlc291cmNlczogKGF0ZW5kKQotJSVEb2N1bWVudE1lZGlhOiBwbGFpbiA2MTIgNzkyIDAgKCkgKCkKLSUlQm91bmRpbmdCb3g6IDAgMCA2MTIgNzkyCi0lJVBhZ2VzOiAzOAotJSVFbmRDb21tZW50cwotJSVCZWdpbkRlZmF1bHRzCi0lJVBhZ2VNZWRpYTogcGxhaW4KLSUlRW5kRGVmYXVsdHMKLSUlQmVnaW5Qcm9sb2cKLSUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCB4cGRmIDMuMDEgMAotL3hwZGYgNzUgZGljdCBkZWYgeHBkZiBiZWdpbgotJSBQREYgc3BlY2lhbCBzdGF0ZQotL3BkZkRpY3RTaXplIDE1IGRlZgotL3BkZlNldHVwIHsKLSAgMyAxIHJvbGwgMiBhcnJheSBhc3RvcmUKLSAgL3NldHBhZ2VkZXZpY2Ugd2hlcmUgewotICAgIHBvcCAzIGRpY3QgYmVnaW4KLSAgICAgIC9QYWdlU2l6ZSBleGNoIGRlZgotICAgICAgL0ltYWdpbmdCQm94IG51bGwgZGVmCi0gICAgICAvUG9saWNpZXMgMSBkaWN0IGR1cCBiZWdpbiAvUGFnZVNpemUgMyBkZWYgZW5kIGRlZgotICAgICAgeyAvRHVwbGV4IHRydWUgZGVmIH0gaWYKLSAgICBjdXJyZW50ZGljdCBlbmQgc2V0cGFnZWRldmljZQotICB9IHsKLSAgICBwb3AgcG9wCi0gIH0gaWZlbHNlCi19IGRlZgotL3BkZlN0YXJ0UGFnZSB7Ci0gIHBkZkRpY3RTaXplIGRpY3QgYmVnaW4KLSAgL3BkZkZpbGxDUyBbXSBkZWYKLSAgL3BkZkZpbGxYZm9ybSB7fSBkZWYKLSAgL3BkZlN0cm9rZUNTIFtdIGRlZgotICAvcGRmU3Ryb2tlWGZvcm0ge30gZGVmCi0gIC9wZGZGaWxsIFswXSBkZWYKLSAgL3BkZlN0cm9rZSBbMF0gZGVmCi0gIC9wZGZGaWxsT1AgZmFsc2UgZGVmCi0gIC9wZGZTdHJva2VPUCBmYWxzZSBkZWYKLSAgL3BkZkxhc3RGaWxsIGZhbHNlIGRlZgotICAvcGRmTGFzdFN0cm9rZSBmYWxzZSBkZWYKLSAgL3BkZlRleHRNYXQgWzEgMCAwIDEgMCAwXSBkZWYKLSAgL3BkZkZvbnRTaXplIDAgZGVmCi0gIC9wZGZDaGFyU3BhY2luZyAwIGRlZgotICAvcGRmVGV4dFJlbmRlciAwIGRlZgotICAvcGRmVGV4dFJpc2UgMCBkZWYKLSAgL3BkZldvcmRTcGFjaW5nIDAgZGVmCi0gIC9wZGZIb3JpelNjYWxpbmcgMSBkZWYKLSAgL3BkZlRleHRDbGlwUGF0aCBbXSBkZWYKLX0gZGVmCi0vcGRmRW5kUGFnZSB7IGVuZCB9IGRlZgotJSBQREYgY29sb3Igc3RhdGUKLS9jcyB7IC9wZGZGaWxsWGZvcm0gZXhjaCBkZWYgZHVwIC9wZGZGaWxsQ1MgZXhjaCBkZWYKLSAgICAgIHNldGNvbG9yc3BhY2UgfSBkZWYKLS9DUyB7IC9wZGZTdHJva2VYZm9ybSBleGNoIGRlZiBkdXAgL3BkZlN0cm9rZUNTIGV4Y2ggZGVmCi0gICAgICBzZXRjb2xvcnNwYWNlIH0gZGVmCi0vc2MgeyBwZGZMYXN0RmlsbCBub3QgeyBwZGZGaWxsQ1Mgc2V0Y29sb3JzcGFjZSB9IGlmCi0gICAgICBkdXAgL3BkZkZpbGwgZXhjaCBkZWYgYWxvYWQgcG9wIHBkZkZpbGxYZm9ybSBzZXRjb2xvcgotICAgICAvcGRmTGFzdEZpbGwgdHJ1ZSBkZWYgL3BkZkxhc3RTdHJva2UgZmFsc2UgZGVmIH0gZGVmCi0vU0MgeyBwZGZMYXN0U3Ryb2tlIG5vdCB7IHBkZlN0cm9rZUNTIHNldGNvbG9yc3BhY2UgfSBpZgotICAgICAgZHVwIC9wZGZTdHJva2UgZXhjaCBkZWYgYWxvYWQgcG9wIHBkZlN0cm9rZVhmb3JtIHNldGNvbG9yCi0gICAgIC9wZGZMYXN0U3Ryb2tlIHRydWUgZGVmIC9wZGZMYXN0RmlsbCBmYWxzZSBkZWYgfSBkZWYKLS9vcCB7IC9wZGZGaWxsT1AgZXhjaCBkZWYKLSAgICAgIHBkZkxhc3RGaWxsIHsgcGRmRmlsbE9QIHNldG92ZXJwcmludCB9IGlmIH0gZGVmCi0vT1AgeyAvcGRmU3Ryb2tlT1AgZXhjaCBkZWYKLSAgICAgIHBkZkxhc3RTdHJva2UgeyBwZGZTdHJva2VPUCBzZXRvdmVycHJpbnQgfSBpZiB9IGRlZgotL2ZDb2wgewotICBwZGZMYXN0RmlsbCBub3QgewotICAgIHBkZkZpbGxDUyBzZXRjb2xvcnNwYWNlCi0gICAgcGRmRmlsbCBhbG9hZCBwb3AgcGRmRmlsbFhmb3JtIHNldGNvbG9yCi0gICAgcGRmRmlsbE9QIHNldG92ZXJwcmludAotICAgIC9wZGZMYXN0RmlsbCB0cnVlIGRlZiAvcGRmTGFzdFN0cm9rZSBmYWxzZSBkZWYKLSAgfSBpZgotfSBkZWYKLS9zQ29sIHsKLSAgcGRmTGFzdFN0cm9rZSBub3QgewotICAgIHBkZlN0cm9rZUNTIHNldGNvbG9yc3BhY2UKLSAgICBwZGZTdHJva2UgYWxvYWQgcG9wIHBkZlN0cm9rZVhmb3JtIHNldGNvbG9yCi0gICAgcGRmU3Ryb2tlT1Agc2V0b3ZlcnByaW50Ci0gICAgL3BkZkxhc3RTdHJva2UgdHJ1ZSBkZWYgL3BkZkxhc3RGaWxsIGZhbHNlIGRlZgotICB9IGlmCi19IGRlZgotJSBidWlsZCBhIGZvbnQKLS9wZGZNYWtlRm9udCB7Ci0gIDQgMyByb2xsIGZpbmRmb250Ci0gIDQgMiByb2xsIG1hdHJpeCBzY2FsZSBtYWtlZm9udAotICBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KLSAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9IHsgcG9wIHBvcCB9IGlmZWxzZSB9IGZvcmFsbAotICAgIC9FbmNvZGluZyBleGNoIGRlZgotICAgIGN1cnJlbnRkaWN0Ci0gIGVuZAotICBkZWZpbmVmb250IHBvcAotfSBkZWYKLS9wZGZNYWtlRm9udDE2IHsKLSAgZXhjaCBmaW5kZm9udAotICBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KLSAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9IHsgcG9wIHBvcCB9IGlmZWxzZSB9IGZvcmFsbAotICAgIC9XTW9kZSBleGNoIGRlZgotICAgIGN1cnJlbnRkaWN0Ci0gIGVuZAotICBkZWZpbmVmb250IHBvcAotfSBkZWYKLSUgZ3JhcGhpY3Mgc3RhdGUgb3BlcmF0b3JzCi0vcSB7IGdzYXZlIHBkZkRpY3RTaXplIGRpY3QgYmVnaW4gfSBkZWYKLS9RIHsKLSAgZW5kIGdyZXN0b3JlCi0gIC9wZGZMYXN0RmlsbCB3aGVyZSB7Ci0gICAgcG9wCi0gICAgcGRmTGFzdEZpbGwgewotICAgICAgcGRmRmlsbE9QIHNldG92ZXJwcmludAotICAgIH0gewotICAgICAgcGRmU3Ryb2tlT1Agc2V0b3ZlcnByaW50Ci0gICAgfSBpZmVsc2UKLSAgfSBpZgotfSBkZWYKLS9jbSB7IGNvbmNhdCB9IGRlZgotL2QgeyBzZXRkYXNoIH0gZGVmCi0vaSB7IHNldGZsYXQgfSBkZWYKLS9qIHsgc2V0bGluZWpvaW4gfSBkZWYKLS9KIHsgc2V0bGluZWNhcCB9IGRlZgotL00geyBzZXRtaXRlcmxpbWl0IH0gZGVmCi0vdyB7IHNldGxpbmV3aWR0aCB9IGRlZgotJSBwYXRoIHNlZ21lbnQgb3BlcmF0b3JzCi0vbSB7IG1vdmV0byB9IGRlZgotL2wgeyBsaW5ldG8gfSBkZWYKLS9jIHsgY3VydmV0byB9IGRlZgotL3JlIHsgNCAyIHJvbGwgbW92ZXRvIDEgaW5kZXggMCBybGluZXRvIDAgZXhjaCBybGluZXRvCi0gICAgICBuZWcgMCBybGluZXRvIGNsb3NlcGF0aCB9IGRlZgotL2ggeyBjbG9zZXBhdGggfSBkZWYKLSUgcGF0aCBwYWludGluZyBvcGVyYXRvcnMKLS9TIHsgc0NvbCBzdHJva2UgfSBkZWYKLS9TZiB7IGZDb2wgc3Ryb2tlIH0gZGVmCi0vZiB7IGZDb2wgZmlsbCB9IGRlZgotL2YqIHsgZkNvbCBlb2ZpbGwgfSBkZWYKLSUgY2xpcHBpbmcgb3BlcmF0b3JzCi0vVyB7IGNsaXAgbmV3cGF0aCB9IGRlZgotL1cqIHsgZW9jbGlwIG5ld3BhdGggfSBkZWYKLSUgdGV4dCBzdGF0ZSBvcGVyYXRvcnMKLS9UYyB7IC9wZGZDaGFyU3BhY2luZyBleGNoIGRlZiB9IGRlZgotL1RmIHsgZHVwIC9wZGZGb250U2l6ZSBleGNoIGRlZgotICAgICAgZHVwIHBkZkhvcml6U2NhbGluZyBtdWwgZXhjaCBtYXRyaXggc2NhbGUKLSAgICAgIHBkZlRleHRNYXQgbWF0cml4IGNvbmNhdG1hdHJpeCBkdXAgNCAwIHB1dCBkdXAgNSAwIHB1dAotICAgICAgZXhjaCBmaW5kZm9udCBleGNoIG1ha2Vmb250IHNldGZvbnQgfSBkZWYKLS9UciB7IC9wZGZUZXh0UmVuZGVyIGV4Y2ggZGVmIH0gZGVmCi0vVHMgeyAvcGRmVGV4dFJpc2UgZXhjaCBkZWYgfSBkZWYKLS9UdyB7IC9wZGZXb3JkU3BhY2luZyBleGNoIGRlZiB9IGRlZgotL1R6IHsgL3BkZkhvcml6U2NhbGluZyBleGNoIGRlZiB9IGRlZgotJSB0ZXh0IHBvc2l0aW9uaW5nIG9wZXJhdG9ycwotL1RkIHsgcGRmVGV4dE1hdCB0cmFuc2Zvcm0gbW92ZXRvIH0gZGVmCi0vVG0geyAvcGRmVGV4dE1hdCBleGNoIGRlZiB9IGRlZgotJSB0ZXh0IHN0cmluZyBvcGVyYXRvcnMKLS9jc2hvdyB3aGVyZSB7Ci0gIHBvcAotICAvY3Nob3cyIHsKLSAgICBkdXAgewotICAgICAgcG9wIHBvcAotICAgICAgMSBzdHJpbmcgZHVwIDAgMyBpbmRleCBwdXQgMyBpbmRleCBleGVjCi0gICAgfSBleGNoIGNzaG93Ci0gICAgcG9wIHBvcAotICB9IGRlZgotfXsKLSAgL2NzaG93MiB7Ci0gICAgY3VycmVudGZvbnQgL0ZvbnRUeXBlIGdldCAwIGVxIHsKLSAgICAgIDAgMiAyIGluZGV4IGxlbmd0aCAxIHN1YiB7Ci0gICAgICAgIDIgY29weSBnZXQgZXhjaCAxIGFkZCAyIGluZGV4IGV4Y2ggZ2V0Ci0gICAgICAgIDIgY29weSBleGNoIDI1NiBtdWwgYWRkCi0gICAgICAgIDIgc3RyaW5nIGR1cCAwIDYgNSByb2xsIHB1dCBkdXAgMSA1IDQgcm9sbCBwdXQKLSAgICAgICAgMyBpbmRleCBleGVjCi0gICAgICB9IGZvcgotICAgIH0gewotICAgICAgZHVwIHsKLSAgICAgICAgMSBzdHJpbmcgZHVwIDAgMyBpbmRleCBwdXQgMyBpbmRleCBleGVjCi0gICAgICB9IGZvcmFsbAotICAgIH0gaWZlbHNlCi0gICAgcG9wIHBvcAotICB9IGRlZgotfSBpZmVsc2UKLS9hd2NwIHsKLSAgZXhjaCB7Ci0gICAgZmFsc2UgY2hhcnBhdGgKLSAgICA1IGluZGV4IDUgaW5kZXggcm1vdmV0bwotICAgIDYgaW5kZXggZXEgeyA3IGluZGV4IDcgaW5kZXggcm1vdmV0byB9IGlmCi0gIH0gZXhjaCBjc2hvdzIKLSAgNiB7cG9wfSByZXBlYXQKLX0gZGVmCi0vVGogewotICBmQ29sCi0gIDEgaW5kZXggc3RyaW5nd2lkdGggcGRmVGV4dE1hdCBpZHRyYW5zZm9ybSBwb3AKLSAgc3ViIDEgaW5kZXggbGVuZ3RoIGR1cCAwIG5lIHsgZGl2IH0geyBwb3AgcG9wIDAgfSBpZmVsc2UKLSAgcGRmV29yZFNwYWNpbmcgcGRmSG9yaXpTY2FsaW5nIG11bCAwIHBkZlRleHRNYXQgZHRyYW5zZm9ybSAzMgotICA0IDMgcm9sbCBwZGZDaGFyU3BhY2luZyBwZGZIb3JpelNjYWxpbmcgbXVsIGFkZCAwCi0gIHBkZlRleHRNYXQgZHRyYW5zZm9ybQotICA2IDUgcm9sbCBUajEKLX0gZGVmCi0vVGoxNiB7Ci0gIGZDb2wKLSAgMiBpbmRleCBzdHJpbmd3aWR0aCBwZGZUZXh0TWF0IGlkdHJhbnNmb3JtIHBvcAotICBzdWIgZXhjaCBkaXYKLSAgcGRmV29yZFNwYWNpbmcgcGRmSG9yaXpTY2FsaW5nIG11bCAwIHBkZlRleHRNYXQgZHRyYW5zZm9ybSAzMgotICA0IDMgcm9sbCBwZGZDaGFyU3BhY2luZyBwZGZIb3JpelNjYWxpbmcgbXVsIGFkZCAwCi0gIHBkZlRleHRNYXQgZHRyYW5zZm9ybQotICA2IDUgcm9sbCBUajEKLX0gZGVmCi0vVGoxNlYgewotICBmQ29sCi0gIDIgaW5kZXggc3RyaW5nd2lkdGggcGRmVGV4dE1hdCBpZHRyYW5zZm9ybSBleGNoIHBvcAotICBzdWIgZXhjaCBkaXYKLSAgMCBwZGZXb3JkU3BhY2luZyBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0gMzIKLSAgNCAzIHJvbGwgcGRmQ2hhclNwYWNpbmcgYWRkIDAgZXhjaAotICBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0KLSAgNiA1IHJvbGwgVGoxCi19IGRlZgotL1RqMSB7Ci0gIDAgcGRmVGV4dFJpc2UgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIHJtb3ZldG8KLSAgY3VycmVudHBvaW50IDggMiByb2xsCi0gIHBkZlRleHRSZW5kZXIgMSBhbmQgMCBlcSB7Ci0gICAgNiBjb3B5IGF3aWR0aHNob3cKLSAgfSBpZgotICBwZGZUZXh0UmVuZGVyIDMgYW5kIGR1cCAxIGVxIGV4Y2ggMiBlcSBvciB7Ci0gICAgNyBpbmRleCA3IGluZGV4IG1vdmV0bwotICAgIDYgY29weQotICAgIGN1cnJlbnRmb250IC9Gb250VHlwZSBnZXQgMyBlcSB7IGZDb2wgfSB7IHNDb2wgfSBpZmVsc2UKLSAgICBmYWxzZSBhd2NwIGN1cnJlbnRwb2ludCBzdHJva2UgbW92ZXRvCi0gIH0gaWYKLSAgcGRmVGV4dFJlbmRlciA0IGFuZCAwIG5lIHsKLSAgICA4IDYgcm9sbCBtb3ZldG8KLSAgICBmYWxzZSBhd2NwCi0gICAgL3BkZlRleHRDbGlwUGF0aCBbIHBkZlRleHRDbGlwUGF0aCBhbG9hZCBwb3AKLSAgICAgIHsvbW92ZXRvIGN2eH0KLSAgICAgIHsvbGluZXRvIGN2eH0KLSAgICAgIHsvY3VydmV0byBjdnh9Ci0gICAgICB7L2Nsb3NlcGF0aCBjdnh9Ci0gICAgcGF0aGZvcmFsbCBdIGRlZgotICAgIGN1cnJlbnRwb2ludCBuZXdwYXRoIG1vdmV0bwotICB9IHsKLSAgICA4IHtwb3B9IHJlcGVhdAotICB9IGlmZWxzZQotICAwIHBkZlRleHRSaXNlIG5lZyBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0gcm1vdmV0bwotfSBkZWYKLS9USm0geyBwZGZGb250U2l6ZSAwLjAwMSBtdWwgbXVsIG5lZyAwCi0gICAgICAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIHJtb3ZldG8gfSBkZWYKLS9USm1WIHsgcGRmRm9udFNpemUgMC4wMDEgbXVsIG11bCBuZWcgMCBleGNoCi0gICAgICAgIHBkZlRleHRNYXQgZHRyYW5zZm9ybSBybW92ZXRvIH0gZGVmCi0vVGNsaXAgeyBwZGZUZXh0Q2xpcFBhdGggY3Z4IGV4ZWMgY2xpcCBuZXdwYXRoCi0gICAgICAgICAvcGRmVGV4dENsaXBQYXRoIFtdIGRlZiB9IGRlZgotJSBMZXZlbCAyIGltYWdlIG9wZXJhdG9ycwotL3BkZkltQnVmIDEwMCBzdHJpbmcgZGVmCi0vcGRmSW0gewotICBpbWFnZQotICB7IGN1cnJlbnRmaWxlIHBkZkltQnVmIHJlYWRsaW5lCi0gICAgbm90IHsgcG9wIGV4aXQgfSBpZgotICAgICglLUVPRC0pIGVxIHsgZXhpdCB9IGlmIH0gbG9vcAotfSBkZWYKLS9wZGZJbU0gewotICBmQ29sIGltYWdlbWFzawotICB7IGN1cnJlbnRmaWxlIHBkZkltQnVmIHJlYWRsaW5lCi0gICAgbm90IHsgcG9wIGV4aXQgfSBpZgotICAgICglLUVPRC0pIGVxIHsgZXhpdCB9IGlmIH0gbG9vcAotfSBkZWYKLS9wZGZJbUNsaXAgewotICBnc2F2ZQotICAwIDIgNCBpbmRleCBsZW5ndGggMSBzdWIgewotICAgIGR1cCA0IGluZGV4IGV4Y2ggMiBjb3B5Ci0gICAgZ2V0IDUgaW5kZXggZGl2IHB1dAotICAgIDEgYWRkIDMgaW5kZXggZXhjaCAyIGNvcHkKLSAgICBnZXQgMyBpbmRleCBkaXYgcHV0Ci0gIH0gZm9yCi0gIHBvcCBwb3AgcmVjdGNsaXAKLX0gZGVmCi0vcGRmSW1DbGlwRW5kIHsgZ3Jlc3RvcmUgfSBkZWYKLSUgc2hhZGluZyBvcGVyYXRvcnMKLS9jb2xvcmRlbHRhIHsKLSAgZmFsc2UgMCAxIDMgaW5kZXggbGVuZ3RoIDEgc3ViIHsKLSAgICBkdXAgNCBpbmRleCBleGNoIGdldCAzIGluZGV4IDMgMiByb2xsIGdldCBzdWIgYWJzIDAuMDA0IGd0IHsKLSAgICAgIHBvcCB0cnVlCi0gICAgfSBpZgotICB9IGZvcgotICBleGNoIHBvcCBleGNoIHBvcAotfSBkZWYKLS9mdW5jQ29sIHsgZnVuYyBuIGFycmF5IGFzdG9yZSB9IGRlZgotL2Z1bmNTSCB7Ci0gIGR1cCAwIGVxIHsKLSAgICB0cnVlCi0gIH0gewotICAgIGR1cCA2IGVxIHsKLSAgICAgIGZhbHNlCi0gICAgfSB7Ci0gICAgICA0IGluZGV4IDQgaW5kZXggZnVuY0NvbCBkdXAKLSAgICAgIDYgaW5kZXggNCBpbmRleCBmdW5jQ29sIGR1cAotICAgICAgMyAxIHJvbGwgY29sb3JkZWx0YSAzIDEgcm9sbAotICAgICAgNSBpbmRleCA1IGluZGV4IGZ1bmNDb2wgZHVwCi0gICAgICAzIDEgcm9sbCBjb2xvcmRlbHRhIDMgMSByb2xsCi0gICAgICA2IGluZGV4IDggaW5kZXggZnVuY0NvbCBkdXAKLSAgICAgIDMgMSByb2xsIGNvbG9yZGVsdGEgMyAxIHJvbGwKLSAgICAgIGNvbG9yZGVsdGEgb3Igb3Igb3IKLSAgICB9IGlmZWxzZQotICB9IGlmZWxzZQotICB7Ci0gICAgMSBhZGQKLSAgICA0IGluZGV4IDMgaW5kZXggYWRkIDAuNSBtdWwgZXhjaCA0IGluZGV4IDMgaW5kZXggYWRkIDAuNSBtdWwgZXhjaAotICAgIDYgaW5kZXggNiBpbmRleCA0IGluZGV4IDQgaW5kZXggNCBpbmRleCBmdW5jU0gKLSAgICAyIGluZGV4IDYgaW5kZXggNiBpbmRleCA0IGluZGV4IDQgaW5kZXggZnVuY1NICi0gICAgNiBpbmRleCAyIGluZGV4IDQgaW5kZXggNiBpbmRleCA0IGluZGV4IGZ1bmNTSAotICAgIDUgMyByb2xsIDMgMiByb2xsIGZ1bmNTSCBwb3AgcG9wCi0gIH0gewotICAgIHBvcCAzIGluZGV4IDIgaW5kZXggYWRkIDAuNSBtdWwgMyBpbmRleCAgMiBpbmRleCBhZGQgMC41IG11bAotICAgIGZ1bmNDb2wgc2MKLSAgICBkdXAgNCBpbmRleCBleGNoIG1hdCB0cmFuc2Zvcm0gbQotICAgIDMgaW5kZXggMyBpbmRleCBtYXQgdHJhbnNmb3JtIGwKLSAgICAxIGluZGV4IDMgaW5kZXggbWF0IHRyYW5zZm9ybSBsCi0gICAgbWF0IHRyYW5zZm9ybSBsIHBvcCBwb3AgaCBmKgotICB9IGlmZWxzZQotfSBkZWYKLS9heGlhbENvbCB7Ci0gIGR1cCAwIGx0IHsKLSAgICBwb3AgdDAKLSAgfSB7Ci0gICAgZHVwIDEgZ3QgewotICAgICAgcG9wIHQxCi0gICAgfSB7Ci0gICAgICBkdCBtdWwgdDAgYWRkCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLSAgZnVuYyBuIGFycmF5IGFzdG9yZQotfSBkZWYKLS9heGlhbFNIIHsKLSAgZHVwIDAgZXEgewotICAgIHRydWUKLSAgfSB7Ci0gICAgZHVwIDggZXEgewotICAgICAgZmFsc2UKLSAgICB9IHsKLSAgICAgIDIgaW5kZXggYXhpYWxDb2wgMiBpbmRleCBheGlhbENvbCBjb2xvcmRlbHRhCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLSAgewotICAgIDEgYWRkIDMgMSByb2xsIDIgY29weSBhZGQgMC41IG11bAotICAgIGR1cCA0IDMgcm9sbCBleGNoIDQgaW5kZXggYXhpYWxTSAotICAgIGV4Y2ggMyAyIHJvbGwgYXhpYWxTSAotICB9IHsKLSAgICBwb3AgMiBjb3B5IGFkZCAwLjUgbXVsIGF4aWFsQ29sIHNjCi0gICAgZXhjaCBkdXAgZHggbXVsIHgwIGFkZCBleGNoIGR5IG11bCB5MCBhZGQKLSAgICAzIDIgcm9sbCBkdXAgZHggbXVsIHgwIGFkZCBleGNoIGR5IG11bCB5MCBhZGQKLSAgICBkeCBhYnMgZHkgYWJzIGdlIHsKLSAgICAgIDIgY29weSB5TWluIHN1YiBkeSBtdWwgZHggZGl2IGFkZCB5TWluIG0KLSAgICAgIHlNYXggc3ViIGR5IG11bCBkeCBkaXYgYWRkIHlNYXggbAotICAgICAgMiBjb3B5IHlNYXggc3ViIGR5IG11bCBkeCBkaXYgYWRkIHlNYXggbAotICAgICAgeU1pbiBzdWIgZHkgbXVsIGR4IGRpdiBhZGQgeU1pbiBsCi0gICAgICBoIGYqCi0gICAgfSB7Ci0gICAgICBleGNoIDIgY29weSB4TWluIHN1YiBkeCBtdWwgZHkgZGl2IGFkZCB4TWluIGV4Y2ggbQotICAgICAgeE1heCBzdWIgZHggbXVsIGR5IGRpdiBhZGQgeE1heCBleGNoIGwKLSAgICAgIGV4Y2ggMiBjb3B5IHhNYXggc3ViIGR4IG11bCBkeSBkaXYgYWRkIHhNYXggZXhjaCBsCi0gICAgICB4TWluIHN1YiBkeCBtdWwgZHkgZGl2IGFkZCB4TWluIGV4Y2ggbAotICAgICAgaCBmKgotICAgIH0gaWZlbHNlCi0gIH0gaWZlbHNlCi19IGRlZgotL3JhZGlhbENvbCB7Ci0gIGR1cCB0MCBsdCB7Ci0gICAgcG9wIHQwCi0gIH0gewotICAgIGR1cCB0MSBndCB7Ci0gICAgICBwb3AgdDEKLSAgICB9IGlmCi0gIH0gaWZlbHNlCi0gIGZ1bmMgbiBhcnJheSBhc3RvcmUKLX0gZGVmCi0vcmFkaWFsU0ggewotICBkdXAgMCBlcSB7Ci0gICAgdHJ1ZQotICB9IHsKLSAgICBkdXAgOCBlcSB7Ci0gICAgICBmYWxzZQotICAgIH0gewotICAgICAgMiBpbmRleCBkdCBtdWwgdDAgYWRkIHJhZGlhbENvbAotICAgICAgMiBpbmRleCBkdCBtdWwgdDAgYWRkIHJhZGlhbENvbCBjb2xvcmRlbHRhCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLSAgewotICAgIDEgYWRkIDMgMSByb2xsIDIgY29weSBhZGQgMC41IG11bAotICAgIGR1cCA0IDMgcm9sbCBleGNoIDQgaW5kZXggcmFkaWFsU0gKLSAgICBleGNoIDMgMiByb2xsIHJhZGlhbFNICi0gIH0gewotICAgIHBvcCAyIGNvcHkgYWRkIDAuNSBtdWwgZHQgbXVsIHQwIGFkZCBheGlhbENvbCBzYwotICAgIGV4Y2ggZHVwIGR4IG11bCB4MCBhZGQgZXhjaCBkdXAgZHkgbXVsIHkwIGFkZCBleGNoIGRyIG11bCByMCBhZGQKLSAgICAwIDM2MCBhcmMgaAotICAgIGR1cCBkeCBtdWwgeDAgYWRkIGV4Y2ggZHVwIGR5IG11bCB5MCBhZGQgZXhjaCBkciBtdWwgcjAgYWRkCi0gICAgMCAzNjAgYXJjIGggZioKLSAgfSBpZmVsc2UKLX0gZGVmCi1lbmQKLSUlRW5kUmVzb3VyY2UKLSUlRW5kUHJvbG9nCi0lJUJlZ2luU2V0dXAKLXhwZGYgYmVnaW4KLSUlQmVnaW5SZXNvdXJjZTogZm9udCBEVFVVSFArTmltYnVzU2FuTC1Cb2xkCi0lIVBTLUFkb2JlRm9udC0xLjA6IE5pbWJ1c1NhbkwtQm9sZCAxLjA1Ci0lJUNyZWF0aW9uRGF0ZTogV2VkIERlYyAyMiAxOTk5Ci0lIENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4KLSUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250Ci0lIHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0Ci0lIGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzCi0lIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4KLTEyIGRpY3QgYmVnaW4KLS9Gb250SW5mbyAxMCBkaWN0IGR1cCBiZWdpbgotL3ZlcnNpb24gKDEuMDUpIHJlYWRvbmx5IGRlZgotL05vdGljZSAoKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50LiBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udCBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdCBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcyBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuKSByZWFkb25seSBkZWYKLS9Db3B5cmlnaHQgKENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQpIHJlYWRvbmx5IGRlZgotL0Z1bGxOYW1lIChOaW1idXMgU2FucyBMIEJvbGQpIHJlYWRvbmx5IGRlZgotL0ZhbWlseU5hbWUgKE5pbWJ1cyBTYW5zIEwpIHJlYWRvbmx5IGRlZgotL1dlaWdodCAoQm9sZCkgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgMC4wIGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLS9VbmRlcmxpbmVQb3NpdGlvbiAtMTU1IGRlZgotL1VuZGVybGluZVRoaWNrbmVzcyA2OSBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvRFRVVUhQK05pbWJ1c1NhbkwtQm9sZCBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9XTW9kZSAwIGRlZgotL0ZvbnRCQm94IHstMTczIC0zMDcgMTAwMyA5NDl9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiOGQ2MmE2MzE5M2M0YWU5NGMwODZjMQotNTUyODMzZGRkOGYxMTZiNWRmMzMyMDVhZTcwOWIzYWE2M2RhN2JlYmIxNjViNjcyODE4MjdiNDhmYjVlZGJlZAotMDJhMWE1YzA3ODRmYzU3ZDM0ODdkYWE1OTUyMGJhZGExYmUzZmI5Nzk1NjY5OTI0MzIxY2U0ZjQ2NmNkOGUzZgotN2U4ZWMyNDk0YWVlODBlMmRkN2E0OGE2ODYxYWY1YjlmMGNjYWE0YTJmZTJiMDM0OThlYWNhY2Q2YjljMzljNgotYThmMmUzOWUwNmJiYjA2MWNmMmVjMzgwYTMyZWZhZDBiNzkwOTc0YmI1Y2MzZGFmMDk5MjQ3MTQ1Njk2NzM2MgotNzdkZTM0ODEzZjI3YWJlOTkzMDJmODZiYjRkMjkzYTM3Zjg0NjY3ZTdmM2RmZWU0Y2ZlOWQxYTY3NmE1NzI4YwotYWViNTIyMmZmNTBkYTk3ZTc0YjJjZGViZjcyNWZiY2E3MDE1YTE4ODg5MWM4YTM3NmI5ZGQ4YTY0MmM0YjE4NAotYjFiYmYzZjM3NmE2ZDZlMzFlZjFjODM1NGRkZjgwMzljYjIwZmFhYmNiMzRkNDc0OWIzYzhjOGQ2OTcyY2ViMQotMDZiOGE1YWFlM2FlNDBhOTFmMWYyYjExNTU2ODFhOWNjOTMzZjg3NTI4Yzk5YTJiMDI2OGI0M2EzZTgyOWU3ZgotM2JkODYzY2I1Mjk1MDc3M2JkOWIwNzMxZGM0OTkyNTQxZDdkZTdhMDU1Y2E2NWRkZDIzMTdmMTcwNWMyMGQxZgotOTMyOTFiY2MyNTRjYmFiYTQyNWMwMzJiM2IxNTA1MGQ0MWRhMTRmZmUxYjNkNjg0ZWVhNDI4MDk1YTAxZTkzMQotOThkNGY4NDliMjM5YWQ5ZDc5ZjQ1MDJmMDI3MWFmZmIwYzI5N2YyZjM0N2JmYjljMTM3NzgyNjQ2ZjY0OGY3NwotMDA3NmI4NWY1YTkyOWZjZGVhMjcwMzMzM2Y2OTE4YjhmMTI1NjI3ZjhiNTA1YzY4OGUzMGYyNThkZWQxYWVjZgotMmM4NmVkY2Q4OGMyOTI0OWE4MDgxNzMxNzM3MTk1ZmFiN2FkYmI1NDc0M2JkNjY1MTExOTRkZWUyNTE2OTU5YgotYTIwNzAxZTJkOTczNDIyNDgyOTc0MjU0OTFmNmM5NDcxZWM5YTk4ZTYzMGQ3MzRkYWMxOTcyMWYwYjMyNDQzMgotYzhkN2EwYjc1MTQ1M2Y4OWY3MDA4YmEzN2JjNDhlMDgzMWVlM2VjYmQ4YTBhMjkyZDYzY2ZjODkwYjI4ZjY5NQotOWUyOWFjM2I0ZGRiNzhhNjg4M2I5MjcyY2UzNGEwMTJhODJhZGVjMGI2YjY0MWUzOTQwYTQzOGEwOThjY2ZiZgotYzUwNTQ0Yjk0ZmFjZmQ5ZDdhZTA5YWQwNjMyMDE1ZjgxZDJmNzdmYzZkODBhNDJlYzExZDY3ZDhhOTFjMzc2YwotMTNjOGUzNDQ0Y2RmZGU0ZDJhMWVkMDIxNDEwZjRkNmE0ZTk3ODA0YWU5NDliZDkxMzA5NGQyMzEwOGM5ZDM4NAotNTZmMTEwMjVlMmQyNDkzOTExNGI2YmNmNTc5YTAzMTVjNTJmM2NhMWJjYzI4NjBmYzFhMGI5ZmI4YTM3YWUyZgotYzIwYzBmZDQ0ZDIxNWZjMmFmNzM3ZmQwMzM5YjA3MGQ1NGU2NjQwMjEyNDAwNzFjNjY1ZGU0MTcwZGZhMTgyZAotNGUzODU2ODVmYjQxYTJkODU4ODhiMTE0OWU5YTc2NmNiNGYzMDliNGUyYmFhMjhjZjFmOGNjMTJjNGIxOWUzMwotZjA0NmNlOTdiNTNkZWI1NDlmZWE5NmNmNmNlNjYzNTdjNDkwNGI3OTMyZjViMWNlMDNjZmUzYTEwYzk3NmI5YwotYzlhZDExZDdhMDI4MTZmOGUxMTY2NmNhOGIzZWUxNDExZGYyY2E5NDE3MjY1OWJhZDkyOWUzZTNlNTI0OGY0OAotMDY5MGNlYzZkOGY3MDYxNjA4Y2YyNjcyZjY1YWJkYzk2YjRmY2E4NGQ1Yzg0NzQ0MGNmOTUyM2QzYmYyM2Y2YgotZDQzNjU1ODJlNGIxODdiNmExYTAyODJlZDMyM2JmMjIxZWRkMGE0Y2UxMWNlN2VkYTczOGQxYWY0OGIyZTE5ZgotZWIzZGExNjY0ZGU5OWM0NDdjMzVkZmQ0NTA2OWZkZWQxZmNkNzBiNGE2ODU1ZTkxZmZiZDcxNDZlZmU4ODAxMgotMGJmZjFkNmQxYWNiNTNkNWUwN2ZiNTc5NWY1NjFhNGEzZTk1M2JiYTdjMDNhOTc2MmFkYWUxOGU1OGRjZTZiMwotYjFhNzAzMTIyZWYzYjE2OTYzYWM3Y2I5NjgyY2U2MGUxNzk0N2U3ZTY3NWQxOTkwMWM3ZTgyNzJjZTRjOWZkZgotNTM2YWJkZmZhNDI5YjgyMGE4MmFlZTlhNzNkN2RjZjc3ZGRlNGQ4ZTI1MWNiM2IzYTViMGE5MWMwZmNkN2ZiYgotZWFkN2E4MTJmZjE5NGZkMDQ5ZjI4YjgyZjRjMmQ3M2U0MWNjNzNjMWM5ZjY2ODkzMWEyYzdlYmE1NDAwYTFiOQotMDkwMmVmZTY3OTJmMjA3MTM2ZTFlMTZiNDE3OTRlNmNiZjczMTY4ODlhNjAyZDM1YzM3ZWYzNmRlYzk1YWYyNgotZTliYjA5MDA0NTZmMmViZjI3MDVlY2NlN2IyZWQ5MDM0M2QyM2UwMDZlY2IyODJkNGIzNjI5YmIwYzM4OTJmMwotZmY5YzE3ZmU2YzVmYWI2ODM1OGUxY2Q0NGFmZjAyMTk0OGFjOWZiODQxMGEzZGUyMmUwYTAxZTM2N2M1MjQ3MAotMmE4Y2ZkMjg0Y2Y5ZThmNTA1ZDVkYmQ3YmJlMjQyZmUwNzFmZWEwMDk0YTU1ZWQxY2Q3YzliZTZiN2M1NmM5OAotMTZhZDE5ODVmYjc2MjRmNWU0OGNmNmMwYzJlZDg1YjQ2NmY2NGM1MmYwMTdiMjBjZGFiYjg1ZDI0NDUyZTA4NgotMzk0MjM2MmU3NjRhMmJkYTBmNmMxYjI0NDI2ZTMwMmRkYzQ0MDNhMDg3ZWZiMjg1MGNmMzI3NWM3YjI0Mjc1YQotYWUyNzBmMjEyODMxZjRjNGE1ZDk1ZGVhYjYxOTIzY2ExMjZlNTg3ZThmNWVkNGYyZDU3MzhmMDZlOGM0ZjkxMQotYjM0NmI4ZWNkYWM0ODFkZWRkMmY1NDYzMDVhN2NkNjNjYjY3ZDQwMDkzYzYxOGZiYmRmNDk4YzhkN2VhZDhjNwotMWY1ZjAyMmQwYmJjZmFhODY3MGUzYjNiOTk5YTE2OTdjOTQ3YWYzOGQ3ZTFhMzYwZTNmMDgyNWE5YWE3Nzg0MAotZDdhOWRmZDU3NWNlMmYwNGQzMDhmN2M1NTNlYmY1NjlhYzg0ZjJjMTJhYTA4NjljZTEwN2M3MTNhM2NjZTYyNAotNTA1OWJmYjNmNWFhMjdkMTBlMzM3MDg2MTQ0YWIwOTI4NmJlMzgyNWEzNDgyYzU0MjI0NTRjNmE5Y2JiZjIwNQotODMzMzE2NzgwZWI4ODMwMjc5NmZjNDI3YTBmYjllNTNhN2JmMjQ1NzdmZWIzZmE1ZDg1Y2I2MzQ0ZjkwODAwNwotMTgzNTIyZDNjNzYwYzExZmM3ZGE4ZDE0YmI1ZGQ4MDA1NzZhNmI0ZDFiOTkxYzFiZjNkYjBmOWNhMmFjNWQyMgotOTEwNzlhMTk5ZjJmNmU2ZGM2ODIxM2QzM2VhODkzYjc0ZjZhZmYzMGVkMWI1MWY4YjUzYTAxNWZmZDRkMjA3NgotYjcxZjczMjI1YjE1MWNmY2YxMWUyYTI5MTdjZjFiM2Y2MGUyYjRkNDQyMzA3YzM5NGUxNjI1ZjdlNjBlYjEyYQotZjJlYjljYTdiMTdiMDgyZjE2NjRkMDljYjdhM2YzOGFlYTk5YTEzZjY1OTA4OTQyNjEyNmY0N2ZhZDViNmRjNwotNjQxMDFjZDQzN2RhM2MyMmJjNDNlN2E4ZGUwNzI1M2ViMzcxNDcwZWUxZTRlNDJhNWQxZmEyYzRkYjU1NjVhZAotNzlkNjI3MWFlMjhlOGZkZTVkNGNiMjQwNjRjMTQ1ZGU0NGVkNDg2YTFlN2RmMmRmOTIxZjJiMWJlNWZkYjEyMAotZDhiNzgxYzM2NTVlYTcyZGMyMmEyYTJkMzc1NzlmMGFmNjBiNDIzMjBhYjI1YzhkNzY5MTI0MzUyNDQ4YTE1NAotN2EzODFiMzg4YTRkOWE1NGU4MmYxOTliYTM1ZjFhMzk4MTgyM2FiNjk4ZTNmODdkMzhkMzJhZGRkNGYxMzgzMgotNzdmY2M5YWNlZTdmYmQzMjg1ZjY4OWE4NWI3NmQwZmViOWU3MGYwOWJhZDBjZTE0NDc3MGE2Y2MyMDNjZTQwZQotMTU5MTJkZTBlMzQ2NWRiYzc5MThlM2VhNDlhZGU1N2VlOGM0OGM3NTkzN2Y1ZDI1NDk4YzQ1MTcwNjkzMDY3ZQotNjkwMjkzN2M5YjQzYWI2MDgwMTExNjYzZDVkYzZkODhmNzJhMzljNWU3YmFkNjc3MjI5NDk4MzIzYTNlN2EyMgotMmZlMjU1MmIwMGNiOTFjZTI4NDhhMWE1MzUzOGI3YWYyNTAzYTM2NzE5MDNlMTBkZjBlOTY0MWRiYjcwNTc3YQotZTgyOGRkM2NhZTk4ZmE5ZTFhNzRmNDM3N2Y5MDhkM2NkNzk0NjE0MDhlZDI5ODMyYmM0Yzk4NjU1NTBjY2IwMAotNDUzNTkyODIyNTUwNTdhNGJkNDg1OTkxNWNmMWU0NWVjZGI3MzI5ZjkwYmJmNjNlMGEyMmE1NGIwNWM1YWNkMQotOWM3YzRkZmMyNTQ4MmEyN2EyMGM3YWI5MDg1NDZjMzU3N2U4N2FkZTkzZWE0NjQzNjMxNGEwYTdjNTI0Yjg5MgotNGIwMTIyMzllNzdjZDY1YWUyOTQ5YmJmN2U0NmE1YTIyNjliN2ZmYjFjZjhhNWJjN2VlYTE5NDRkMmIwYmYzNwotYmZjMzZhZGFkOWE1OTlmYTEzM2Y3NzkzNWYyNGVmNTE4ODE5ZDA1NDM0NWRmMTQ0NzMxZGQyMzMyYjBmN2Y1ZQotODRjNDZhZjQ4Njk0MWNmMTI5M2U4NmVlNzE5YzliYWI2MjYzNDcwYzcwMDljMzkzM2YxODU3YjBhODYzZTM2YwotMjg4ZDM3ZTZhYzg1ZTZhMWI0ZTZlOTFjMGE5ZmUzNjdiZWM0MjdlYTM3MTNlOGQxZjA1MjNlY2ZmNjA2NzcxNwotMjQ0Y2EyMWMxNzc5Njg1ODM4MTVmMDIzNDIwYTY2MGY3YWE0Y2RjOGJmMjVhYzNiM2U0Mjk5NDJiOWY1MTIzZAotODQyMzRjMTg2ZDkyMjY0ODdjNzZkZmVmNWQyNjE2NTc3MWMwZTc1ZjBhY2U3ZTM4ODJlNDlkZTgzMWI0NmMxMgotZTMwZGMzNzM5NTI0MWQ3NjE5YzA1YWJjNDBmNWEzNmY4MDQyYjQ2MWZiNmMzYTUxODFmNzdiMTRlOWU2ZDk3OAotMzczNTZiNGIzMWZhYzM4NTBkZjE4NjkwNjM3MjQzMTYxMDRjNzk5YjZhMmY0MmMzNjFhMzc1ZTRkMjllYmE3ZgotODUwZmUyOWVmYmMyY2VmNjI3YTI1ZGI1NDlhNGQ0YzQ4ZjlmYzlhMmYzMmZhNTBjMWNlNmI1YTU0NWE5NWY3ZQotYmYyZTllZDcxMGFlOTFhY2UxMjgxYTQ0ZTQ5YWVlNDEzM2NjYzA0OTI2YTZkYmEyNGI3MjFjMjExODhjODlhNQotMmE0OTc0NTUwMWNmYWE0MzY0Y2Y0OWUzZWMyYTU5ZDllZTQ2ZjMzMzYyNjM0Zjk3NTg4MjdiMTk5ZmQwN2RiYQotOTM5YmQ3Mzg3MTI0NjU2ODMxODYyZjcwYTk3YzVhMDU5NTk1NzJjNzQ4NjVmNTkwMmU5NTA5M2ZlY2RiZWEzYgotYmJhOWI0N2RhY2U4MDcyNjJkZTBjN2VmMDQ4NDMyNTlmNThhMzIzNDcxMjM3Y2Q1NzMyOThjNWQwYTA2NTBhZAotMmFjYWJkNzFjYjQ0YzYzNjc1MTkyODQ1ZTNkMDFiM2IyOGFmODcxZjM0N2Q0YTQ2MGNjMjhkOWU5NDQwOTQ0MwotMzBlODkzZDI3YjA2MTMyMDYzYWI3MjdhMzhmNDQ3YTJhNDYzM2QyOWFkYWMwMWJkY2NjNzYzNGU2NGRmZGM1NQotOTE0MWY2OWUxMjAyYzRhMGZkNDg0NzliMGVkOTVhNzYwNWM5NDkwMTM3M2UxMTAwYTZjYmZjMTEzZmNjZTQ0NQotZTAzMTdjYzk0YTg1MDdkZDYzN2MzNzY3Njk1NGI5ZDM0YzY3MjdhYWNmMTcyODU4NzZkYjE2ZGQwZTExMzg0YwotMmI5OTZlODVlODJmZDhmZDJiOGY5YjgzYmNjYjM5OGI5OTczNjRmMGRkYjcxZTYwY2NjNTBjZGQ1ZDEyMmVlYwotYzM2Yjg2YTg5ZmJiYjViZmIyMjdmYmEzYTdiN2RlN2M5MDdlNTg3ODBmYzI3NmMyNGZmMDY2OTgyNjkxYTk3YQotNTBkMTQzNjJkMjdkNzkwMzc1YTQ3MTYyZGVjYzUzYzVjMTFlOGE3NDk5Nzg4ZGZkODZhZWZmZmU3ZTY3NGFlZAotMjY3MDZlMmQwNzllOWE1NzFjNmEzMmFjY2M4YzBkY2YyMzUwOGY1ODQ3N2QwNWY5YTFmYzY3OWMwZGE2NDI1NAotMjdhZTMzMjkzZDAyYzllY2EwMWRhZjJkMGExYjA3ZTU1MTVkMzZlMThjYWEzYWIxYjZjNTczNmRmZGVmZTM4NAotZGJjZDI0NGYwYzExMDg3YTg3M2M0NTAxYzZkZTJhNWE1N2UzNDZmZDNmOTJhMDQ1MWU2M2ZmZjZiOTljNmRmYwotNjRlZDg2NzNkYzU0ZWY2NTA5ZDBkMDQzOTI1YmNlMzkwNzJmYzY0ZGRmMmM0OWI4NjAyZDFhNTFlZTgyMmYxOQotZDdiMjEzNWFhODQ2MjZiZmUzZmYzMjFhNmJlYzNhMDAzYWQ5N2U3Njk5Y2ZhMzRiZjQxZjljMmIzOGRmNDc5NAotY2I1YWUzNmM5NWY0MmI0NDIxMmRlNjdhOTZjYTlkMDQ3NTg3OTk4NjM2NjczYTAzMWM0ZWIwM2NmMWE1NTMyNgotZjVkOTRkZGU3NTA4NmI0NGYwOTVlZGUwMDY4ZmI2YjlkMjU2NzU5MDQxY2RhMDRlY2FjYmQ4ZDc3ODQxNTlhZgotYWUzMWE5YzYzN2Q5YTVjMGM2ODQwZGQ5ZTMwZWFjYzY2ZDRkNmZkNmYxMmE2MDNhYTJkYjNlOTg2NjY5MzA3MAotMGQ2OWNkZGM0MTZkNGI3NmNmNmI4MzVjN2JlYmY5MTQ4MTZiODdlZGNkNWEyNGUzNDZlYmEyZGRlZDMwZjVhMAotZGMwMzNlOTNiMDQwYTZlZTdmOGFiM2M0NGM2MTAxN2M3NThjMTFjMmUyZmUzYzRmMTg5OTYyODdhNDhmYTlmOAotZmQwNjhjNDJkMGQzMzg0ZmYyN2M1YTg4ZWY2MzAxMjU1NjI2NjNlZTk1YTY2YjdiNTg4YjQxN2IyMGQzYWU4NAotNmVjZjI2OTM5NDBkNDczM2Y5ZTcwYjA0NTViNjA5N2U3MzU1M2VlZDM0ZGY4ZGE3MTJjMjlkNzYzMjY2NzBiNwotMTNmMTlkNGI1YWRhMTgzM2Q0NmZkNmNmYjkyYjg1ZWI5NDZjYzc0MjUyNzE4Y2M1ZTYwNWNkNmMzYzVhNDZlOAotNTE1MzZjZGRjYzNjYjI0NGM3OGU2MjlmYWI3ODRmZDc2MzcyY2E5NDE3ZmE2N2YyOTJhN2U3ODBiNzgxODZkNwotZjM5MWNkOTFiNjIyMmU4OGMwYmNmZjY2MjA4ODE0OTY1NTExOTY3YjJlZDBkMDc1Yzc3YjU3NzAxNjA4YjY0NwotYjRlNDYyZDNlNTZlMDZjMDQwM2Y4NTg1ODJhNzU0ZGNiZjg4NDFmZTgxZDM5MzU5ZDhjNWE3N2M4YWU2Yjc5NQotYzExYjg0ZjcwMmRlMDlmMjI0OThhMTg5YTRjNjlkNzI2YTYzMjYwNzg0MDY2NTYyYTUwNTQ0ZTVkMDdhZWJiNQotODI2NWMxYzY2MDdiZmM2MDA4ZjJlZGZjOWQwZGU3MTY0NjU0OGU1OWJiMzc0OTk2YTQ0MTJhYzIyYWI0N2RjOAotMzU3MTUzYzdjOTA2MWU5NTk1MmE3MjlhODBmYjQ1ZjM2NTBmYjBjODRhMDdjMTk1NmRjYzA4NTZkN2IwZmE3MQotM2YwOWMxYjk5NWIwYzQ4YzU3YzkzNjdjMDYwMWE0NmNkYWVmZDA0NjA3MzU2ODJkNWFhZmU4NTQ1Y2JhNTg3YgotY2E2ZTgxNDRmZjE0YTI1YjJmY2U5YjIzZDhlYmY3MTVjNWE1NDRiZDY0NmQ1NDYwZDJmOGNiZDQ0YjZkODIwMwotNTRlNGI3Mzc3ZGIzNTFmZjI2YjdiOTMzNmE3ZGNhM2E2MTBkM2E5MjU0MTA1NGM1NDQwNjQ0NDdhYzZkMWExNQotY2YxZDFhMzc5N2NmZTg1ZmI1NWI1NmFjMDFmYmI2ZjQ3ZTljOGU1YzI5MjliZGM3ZWUxNGY2ZDg2ODQ2NDQ5MwotZGY0NzU5Y2M4MDQwNWVmMjcwYTgxNjYwN2YyNDhjNWMxZDVjNTYwMzVhOGZmYzFmYzFiNWY2OWFhYmUyZjk2NAotY2JhNGMwZWQ1NDE2YTIwZjEwMmM4MmJkZmU1OWRkYjRhMTYxNDBjODVkNTVhZjJhYTUyYzkyZWU4NWMzNzg4MQotOWM5NTg2NTcwNGIzY2MzOWRhNjI3MGRmYWNhOGMzNjExZWRiYjZkYTc2N2JiNTBhMDNkNmEwNmVkOTg5MDEwNAotZGEyYTU3NWVhNDVlMTZkYTJlMWZkY2Q2MDNjOTFhZjZiZWI5MzRlYTMzMDIzMTUyYzI1YzI3YzNjNzcxYjU1MwotMWE5YWExYWU2ODRlMTUzOWU1NDk5NzJjOTczMjFmYTA3MTA3NTliNmQ0YjllNTVlZjFiNDFiZGEwMWQ3Nzc4NgotODdjMjJjYjc5MzEwYTkwMDBiYWRlNzRhOGFjOTdiM2ViMmZmMDI0YmZkNjBjMGFkN2ZkZWRiMjNjODA1ZjY0ZQotZmQxMzllMDE1ZTBkMWQzNTkxYmU1OTMwYzM1NmU2YjhjMWE0ZjBhZDlhZjk0ZWRlZDRlZTlhYWE0MzZkNGNmOQotNThjNTg5N2QwNmI3Yzk3Y2RlYzIyNzQ1YzQ2ZTdiMzc2OTVhOGM2NjE0MGY3Zjg0MjExMzg4OTJmNDg1MWMzZgotZDM1NWIxZGUxZDMyMTQ1ZDM5MjQzZDA1OTBhOTBmMWM0ZWMyYzI0NmQzZjM3NzliMzE5YzM4ZDQyMjE1NzZiZQotZmQxN2Q4YmM4ODE5Y2Y4ZWMzMDA3NTMwNWY4NjM3ZDFkZGYwZjcyNTVhZDQ1NmNjMjkwZjEwZWMzOWRkYzJmNQotMjkwMDkyNzE4ZTdkMjY4NTMxYWFlYjM3NzcwMWRhZmE5MzNiOTRjZTc2M2MxOTU0ZWYwY2NlMTlkNzdjOTIwOAotMTU3YzM4YjI3OWM1NzhjNTZiN2U1MjNhZmNjYzkxZmU2ODE5NDgzZGUxOGNlZWJiZTc0YjgxODQ0ZGRiODRjNgotMjJkNGYyOTY2MWU4OWU1NDE3Y2U0M2MyODAyOGU5ZTFjNTQwNjNhZmQ3MTYwODhiNmU4ZmUwY2QxNzAyYzJjMwotMzEyNzM1NzNmNWMzZDc2MGM4YTJjN2NiYjM2MmVkNjUwZWE4ZmY1NGYxOWUwOTdmMTRhZjk3Mzk4ODVhZjE1YgotNDZlZDMxY2RlZjczZGI2NzFiMjJlZmQ0MWZmM2Y2YmJkMjk2MjVmYWU3NTcxZjk1NDJmYzA2Yzc3ZTI4ZDJmNgotM2JhMmM5Y2Y4OWRhNTY0ZGUzYTZmYjNmMGZmOTgxYzVjNDgyYTFlMWRlNzMwMDQxYjdmMWM4OTBjNDUyOGJmMQotOGU3OWYyZmE0ZWQ4YTczOGYwOWE2OGE1YjUzZWRmNmNiY2Y4ODYxMDAzOTE3YTg5OTg5MTQ2YWY3YWIyZTVhMgotODM2Mjc5NjQzOTAwYzI3YTkwNDYzNjc5YTIyZjBjYTUwNzc3MjhmNmFlOGEyODMyNGY5YWRjYzE5ZmE0OTNiNQotZTI0NjVjNmQ5OGNiNjA4ZjhkYzUyY2RkNmM1MmJhZDFhMTUwMjc3OWI2MzhkZjkzMzZlMTJmMDM1YjNjMzEwYwotYjkyYjNhZGQwNDczNjVmMmQyNWIwZWM3ZTA1Y2M0NmYzMWMwNTc1ZWFmNGViZWEwYjY2MGFhMjBkOWU3ZWRmOQotMGFhMDc3ZTMwMDBlMjUxNzYwMzhjY2M5MmQ0ZjlmZGJhZTZiMDVhYTJlMTdhZDAwNGUxMzMwODQ2NGEyMGNkZAotMDI3MWVkMGY5NjRlNzNjYjExZjE4YzJiNzk1ZGJhMzFjM2ZmZDU2NDhjNjNkYWIzOTUyMzhiYTdjMGNjN2RiNgotYjIwNmU2MTc5YzZhZDdjMjUzNGM0NmEyYjljMWQ3ZmU2YmM2OTNkZjM1MTE4YjcwODkzMzY3N2FiM2E3NmNlZQotOWFjMDMwM2MyYzA5NjdkNzE4YTE2OTFmNmE5MjJhYmI2YjM3NjI1ZmMwMTkwOGMxMDI0MjczMWI3OWExYTgyYwotZmNlOWVmYmQxYzZiZDQ4M2ZkODY3YmMyOTM4NjA5ZWU1MmMwMjcxYTdlZDFmZGUxYjg2NjdiOThlMjJmZDQ1MAotODZmNTE1ZmQyYWMyYzExYzUwZmNlOTVmM2U1MDZhYzY1MThkZDRlNTMyZGRiMTAwZDg3YTkyNDBiZGNkYWZjMgotMGM4YmVjNDY3ZDc2MjYxMTY1ZTlkOGJkYWM5MTk3ZWM3OThjODFjZmU4MGUzNjE5ZjQzMjY3NGNhZGY0NGZmNAotM2Y2MTA4OWFiZWIxM2Q2NjVlNzkwMWY0YTFiYTg0MTE1MzMzMjEwMDA5ZDU1ZTA1MWI2OTJhZWJlZTlkOWJmMwotZDAyMTljMjkwMTkxYzE3ZjczMTdhYWY0MDJiODhiYTM1M2MyNWYxMjZlMmQzMmJlZjczZDUyOGM2NWFmMDg0MAotM2VkNDA4NmRhZmY1NzQ3NjI1MzE3OTRmZGJmNjM3Yjc2NTI3MzkxMTI5N2I3NTMzODY5MWU5ZWY0ZDJhZDQ1MgotMjI0NTRjNmE5Y2JiZjIwNTAzOWQ2ZDM1YzA5YTBjZTI4NGU5YTc3Njc3M2E5OGUwOWU2YTgxNmRkNzFkODBjMwotZDgwYWJjYjAwNjM1M2I0YjdjNDhjNzZiZDljMWVkOWRiNzhiZjYyZTlhZDIyMjJlNWJlZTlmZGUwMjgxZjBlNgotMTFmZDZmODk5OTM4Y2VlNzI5YTE4NGJlN2NiZGIwYjg0ZmM5YzM4MGQ2YzY5Y2RkNmUwZjNmNjc4MGFmNjg0YgotY2VjNjM2MTY3Mzg1M2I0MDBmNDdlMDAxNzdmZjFlZTdmOWViOGMyODVhNDllMTM3ZTA4ZDVkNzY2M2RmNzFhYgotNzFjYTcxYWRjMDg1NzA1NTY4NmEwNDc3N2EyZTE0MDhjZTYyOWUwMThjOTc1MjRhZjU1ODg5OTFiZTkyZTRmYQotNGEyNzc0NWFhOTUwYTcyZDQ3OWM0OGQ2ZjhjMzBkNDI1OGE4ODJmMTk5YjQzNTlmOTJhOTYzZmM2NTAyMzBjNQotNzllZGY3NDNmMmNmZTg2YTE5NzI5NmRkNjc1YmYwNWYyNWVkOTY5ZGU3N2JmZGQwYjUxOGNiYjVjMzBiNGU0MgotMjdjNTExN2YyMzViMzRmN2ZjMzI0MTNhOTgwYTM4OTY4ZmY5YjgxNTEyODBhMDI1OTIxNDc5MGU0MjFkMGYzOQotZWVlYmU5OGFkYmE4MjA0MDFjMmQ0N2Q0MTMyY2M2OGNhZTBmNTliMDQ5ZDc0ODlmNjIyNTliZmM1NTA5MWM4MQotODllMjQ4MGRjYjc3ZjY4OTk2NTE1MWI3ZjY3MDZhZjY3NWE4NzEzNzBkMjE5NWIwNzQ1N2FmODgwOWY3YWJmZQotN2QzNjcyZDc2YTc0ZjU1ZWM3NDllZjQwZjc1NWEzZWVkOTZjY2UwMDA2NDRjYTBjNDk3YWZhYWI3Mjk0YWZkYwotMTNjMzIzOWY1NGYzZWVlZTgwOWJjZDkzNmZmNDQ3Mjc3ZDJmMzYxMzkzNmU3YjM5ZTY4M2YyNWI2MDUwNWYyYgotZjQzNDNlZDA5MDJiYWRlYjYyNDk1Y2VmNTM3ODliOWU3NGJhZjg2NmJlMzNlZmU2NmMxYzVmYWE5NWY2MGFjOQotMTU2YTI2YmI5ZjcyY2I3M2U4OTFlZTRiOTA1ZjcyODQ1YjNhZTA1ZTAyNTg3OWYwN2E3YjkxZmQwNjIwNDE0OAotNjA4MzJkNjRiNmJkNWFiZTA0NzJhYTdhZmYwN2ZhMDVkMjNhMDEyMzhiNmY2MjRhZThkYjI1YmI3MWRkZDg5MwotMWZjNjAwM2YyMzI5MmE0MjhhNWE5OWRmNTg2MWUwYWU4NThjMzk4ZDY2ZDAyN2EzMmE3MWQ2ZTYyZDYyYjZhMQotYTFkYjg2YjFlYTMwMDVhMjAxNjE4ZjIyODk5Y2IxZTdkNzBmNjVmZGNmYmY3OTYyZWUwZDBkMTU0MTJkMDA2YwotY2ZlYmQwZTA4OTI4ODhmMjYyMzhiZDFmN2YwOTBkZTAzYzQxZWU0YmE1MzU0OGY0NjlmZGEyZDk0ZjZiM2RhOAotYTYwNmZjYzM1NTRlM2YyNjFiODQ5MGEzYjhjZGUzZWU4NDY1NDI2NjhjZTNiMzcxMzE4Zjk4NjRjNDVhNDIyMwotZmEyYTg2ZTEyMDM0YmJhODY3YzRhYmViNDYxYzYwOWM4ZDQ3ZTE4NDcwM2JkNmM4OTFmMzkwNzZlZTA2YmZkMwotYmZmYTY3OWRlMDdkOGM4ZWVkOWI0YjI0ZmY3NGM2ZGIyY2Y4NDEwOGYyOGU0ZjBmZGI3OGUwZTcyNmE5YmQzZgotMmExYjk0ZGFlZTE4ZmQyMGYyYzkwMmNiZWJhMTNjMWIyODFkMGExMWE5NmIyMDgwMGU0Y2Y5MzlkZDMyYmRhOAotMjVhYTYzZDlmODZmMzgwYWY0ZGQzNzlkODA0NDFkYzRmYmMwNzE5YTY5ZWJjMTZlMTYxNzk0MGExOWViMGI0NAotOTY1ODE5ODJkNDViMDhlNTEyMDAwZTM5MTU0OTBhMWE3OWI5MDhlMWU2M2FlMTI5NzUwZmE0NWRkMzNjMGU5ZQotMmU3NjdhODljNmYxMWUzM2YxOTNkYTE4ZGM2YzgyMGRiZWQ4ZDM3MDQ5MmMxOWFkOWQ2NDA3ZTUwY2I2MjQ0NgotZDNhYjAwOWQ5ZThmM2M1MWVhYzIxMzlhYjY0ZmZhMTliNzA0MDU4MTM2NTJmYmJlMzNmYmU1YmM5NWQ0MGI1ZgotOWVmODMzYTRiMWI1MWU1NjA2NWFiZmVmMTAzNmVlYWI4ZTA0ZjA5NmFhYzBkMjgxM2MyZTcyMWUwZGI5NzM2OAotYzE3ZjBjYzk3MWM5Y2ExOGEyZGIxMTc0NWY2N2Q0MmNlNTE0OGUyZThiMmMwZTEzZTRiYjE2YTI3ODlmMGM0YwotZTdiNjViZTQ1NGVhNjIzMjEyYmIyY2U1YWZjNmI1YjNhZDViZmVkNjUwNjMzNTRiZWNiYzE1MzEzODk5NzdlNAotNjU5OTg5NmQ5ZGRiZGYzYWQ2ZmRkOGE0NGIxNGVjOGNjOWYxMzFkNzNjYmE5MWUyOGNiNTRiMzc2NTVlNGI0NAotZGIwNDU3YWU3YmZkM2M2YjczYmFjZjA5ODYxYTdmZTRiNjY0OTI4MjMwZmEwM2NiOTllYmI3NjM3MDNmZjhkMgotNjg4NzdjM2EzYjFjZjkxNTg5MTU3OGFlYzYwYzFmN2QxZTQ0N2ZjNzc3ZDhlYjM1NzNiYTJhOWNlNDdjOTljYQotYTlkNTJmMmYxMmIxMDFmZTQ4NjU4ZWRjNzU0M2VmODVkZmUwMWI3MmRjNGRkYTU5Nzk1MWVhNDI5OGZkNDQ0YQotZWUzM2IxNGZmMmY5MWI3Mjk3OTIyZGFhN2UzNDY0OTMwODA4NjhmNTZhYWEyMTc2YzlmMmMxMjg0ZTRiMjY3MgotYTNiNzVmYWNlMzlkZjFjOGI3YTgyNWEzYTVjMjU4NzFkMTkwZTQ4NTc0ZTFkMDNhNWZiMDk0ZDQxOGM0N2FjMQotNjg3ZTgzNDcwMzZjYzQ0ZmVkM2Q4NGZlNWQ0Yjg0YTYxZmFjOTk2OGI4ZDAwNGMyODUzOWEzNjgxNDc2YWM0NQotNTY1Mzg5MDFmZjI3NjRjMWM0NmY1ZmZlMDQ4Y2QzYTdlYWZjNmE5ZmU5OGZmOWIzY2ZkZjNhYzAzNWE5ZDNmNgotOGQ3NTQ0MGQ0M2ExODQyY2MxZThiNmI5YjZkNDlhOWJkMDkzNjIwNzM1YzljN2MxMWMyMTY1MmE1MjYyYTg2ZgotYzEwNDEzYTM3M2E5ZTAyYTQ4OGJkOWExNmE1MWZiNTFiMDI3YjJjNWNkZTM1Y2IxYWVkOTFjZTU4NzAzZTFlOQotZWJkYzFhMTYxZDc1NGVlNDM3NDEyMTgyZjdkNTMyNDI2ODQxZTI0NTVhZGQyMmMwMzFhMjE3MTQyNjg4MWJiZQotNDA5MGQxY2JmYzQ5OGVmNDY3NDkzMDhiNzNlYmY0ZGM1YTA2YWRkZTZmODNiZmIzNjgzODhiZjdjMmQ5MDBjZgotNTc5MzJiYTRjOWRiMGYxNWZhZmY3Y2JkNzAxMDUwYTFkYjk4YmRjOWE1ZjlmNDI4OTgwZWNmYjFlOTk5ZjQ2MAotMjMxZTU5YjVjNjJjNzg3OTI3OGYxMGY2YTYxZjc5Y2M5ZGEyNGQzNWEyZDI2OTk2ZDhhNGExMDZlMDgxYjhjOAotM2ZjYzAxNWI3NzVhY2IwMGY3ODk1M2E4MzQwMThjMTQ2YzY1Y2Q3MTViZmI1ZjkwYzAzZmVhYzAxODM5YzZiYQotMTU2ZTMyN2M5NzM1MGQyODUxZGQ3N2U4MjYzYjk2Nzc0MjQ3MmRjMWUzYjhmMGU5ODBkZTlmMTgxNTAwN2NlYQotNTE2MTlkODQzNzViNzc3ZDVjZjMyYTE0NGFmZmQ4ZWYwZjRmZWUyZGYxZjgzOWIyYTVkOTAwZWM4ZTc2MzYzZAotYzgyOWYxZDAzZDIxMTE3NWFiOTgyMjI2NjE2YjE5YzUxODAwZTRiNWQ0YjI4YWJhODI5ODBlYWFjNjEzMTk0MAotMDI2ZTNjMjI5N2UxOTdmYjhmMTMwZmIxNWQyYzQwOThiOTdjODQwNzRkNGU1MGI1YzY2MDZiYjBmMzIzMDkzMQotNTJiMzlhNTg5NjRiNGNhNDRjYWY0NWY2M2FmNDliMzMwYWIzZGQ4NjNmNWViZmE4YWIwZGI2Y2MzNzgzOGE2NAotNzJjNjAxYzIxNTAzN2U5NGFjODk0MjBmZWExM2Q1MjE3NGVkNWM5MzNlOGM4NTI1Zjg4ZTZjZTQ4MjY2MTg2MQotNThiOTA0YmE3ZmRiODY0Y2ZlMDRiZDdjZTYwNzBmYzVlZjU3NmIxZGU5ODVhOGM0ZWVjYTdmZTMyYjkwZDMyMAotOTA5MWQ4OTMxYmMyMWM2Zjk2OTI4OGIxY2FiNDRiYzUzNzU1ZDhkOGYyNTc0NjY4MDNkZmQ1NzI1ZGJiNTgzMAotNGJlNmM3ODRmYjZmOGM1ZTY2ODAyMDI4NzU5YzA1OTcyNDZmYzEwM2ViNjNiNThmMzYxYjE0NDY2ODcxMzU3MAotOGM2YmUwNzFiNTFmZGU0MjVhMGFhNTcyNDk4NmNhNjdlODdlYWNiOGY1MTdmYjMxMDNlNTI1OTViYTAwMmUwMgotODJlNTRjYjgyYjA0Yzk5M2Q5OTFkNzBiNWVhYWM3YTYzOTIxM2VjMGY4MmExZDc3NTBmM2Y2ZTk0ZDhhYzdhMAotOGE1ODZiODE2YTlmYmU3OGZmOTZiZjFlM2NkNTI3OTgwODlmMjc5YTBhMGQ5M2UwMzE0ODgzOTg4YmJhMGY3OAotN2NlNTc0NWY4YjA3ZWIzYjc1MGMxZDBhMTNmYTRiMDMzODM0NjIyMGZmOWZmMTBjZmUwNGYyOWUyYzI0YWVmMAotZjc3ZjY3NDhiNjNiMGM2ZDUzNDYxNTM2MDM0NDUwODIwYzczMTE2Y2M2NmZlYjljN2Y3ZDA4ZTBhNDdkNGM5MgotZWM2MWM1MzQyMDk5YzI3ZDkzYTc5ZDljOWYyNzgxNDJiYTAzYjUxZDZlMWUwMzk0NGFiZTA2M2JhYWMzMjYyOQotMWI1ZGMzMGRlODUxMmYwY2IzYTk3M2NjNDNhZmMyYmU1MzJlZDAxMmMzZWI1ODI2NmNiZWViZjYxMWY5MWFhMQotNDg5ZDAxNzRlNzEzYjk3NmYzYTBiMzZjNTc1ZGY1OTdhM2Q4YjEyZDRjNTQ0MWUzYTQ3OGYwOTMzZWIxMjllYQotZTQ0NDg0ZTA4NGJkZGU3ZDJkOWJhMjNhNmJmMWJiZGQ1MWQ5NmJhNGE1MjA3YWYxMDQ0ZTkxNzE4NmI3ZTY2ZAotYWNjZGUxMjk1YjYxNWYzN2YxMzk1ODI3ZTI5ZTNhMTcxMWZiMmI2YzUwMzc0ZGY0NjhiZTQyMWNjNTMxZWFlNAotYjNjZDI0NzNjOTc5ZDExYzExYmVhZjE0YWE5YjZjY2U0YWNjODIwOGYyMmY5ZmJiNjcxM2JiODMwNmU1YjVhNAotZDQ2ZDExZTYwNDExNGQ5YTVhNGJlMDYxNWE4NDNkMTBkZTU0YWQ2MmQ1ODIzMDJmZmZjZmFiN2Y3ODViMTFjNAotODMwODEyODZjZmEwNDMwMmY3YjkyZjY0ZGJiNDJmM2Y5N2NkZTBjMDQ3NjYyYmU2YTNlNTg5ODZjNTRiN2MzZQotMmFjMWIwZDE5YmMxNDkwMzExMTUwOTMxYWVkMzQ5N2FiYWE3NDMwM2QzZjBhM2YzYWY4NjY3YzRiMGI5MTM4NQotY2RjOWJkMmFlOThhYzMyYTJkOTQzZTA1ODNhMGYzYzc0ZmNiODAzNTU5ZmVhMjExMDk4YjQ4Mzg1ZDNkOGQzMgotOWUyY2RhNjFkNzU4OWU1MzgzZmEzMmFiZmNhYzUwMzU1NTQ5ZjFlODE5ZWIzMTUzMWRhZGM0N2Y1ZTc1OTc5MAotZDM1NTQ0NGYxZWZhNmIxZGZjNzcxM2Q0NDYwMDgyMjU4MDhmZmZiZGM4MWEzYjFiMzc0YzdmMjkwMWUyN2UyYwotNDFjNDc3ZGUwZTUyZTkwMDUyODhiNzE3NTExN2IzMmMzMjZiM2FkMmI5ZjkzNDI4NjVkMGJkZDBiYTYwNDRhYwotMzk1YzJjNjliZjgyYTdhYTliNzc4NDJhM2JjN2I0YTY3NWIwYzMyYTRlNDUwNGQyYTlmZTg3NjIxNzBmNTRjMwotNGRjMzYyMGNkZWE5ZDE4NzdmMjc0NTU5YWM2ZDM3YWE4M2Y5MDM0NjEzMDQ3Mjc3NTg1OGMxODc0NmRiNDU1OAotNGYyZmE3Njk4OTI2YzRmYjJlZWYwOTUxNTc5ZGFlNjNjMmQzYzdiOWUxZmM4MTFlZTVkZGE0ZGM1YjVlNjFmZAotYzBlZDIxNzI0OTAyNTMyMDg3ZGJlZjExYjFmZDBkNzFlY2E5ZjI3MWEzZDFiZjhkZWQ1ZGYxOWRiNjc2MTU0NwotOTdkMGExMmY5NDE0N2Q2NGJhZGU1MjcwNGY4ODBkMGZjYjg5ZjQ5NTg1NDdjNjgzOWM5ZTExMTg5Mjc5N2YyOQotNGU2NWY3YTU0ZTE0ZWEzZDNmNTA3MTI5NzlmODQ4NTJlNTdiOWMxZDcwNDc0YTM1OTNkNTNmMjE2MDNlMDBlMAotZTc5ZmYzNTU5MTRmOWEzZDRhYjFlMTQ0MTBlYWM5OTI2OTI4ZTcxNDI0ODUzNWIxNzhkNmZlOWUwZTg0Y2U5OQotNTlmNjZmYjUyZjM3YTRlM2RmYTU0ODhiNzZkOWFlMmY2MmQ0NDk1YmNhMTFjYzE0OGRjMjBlMjlhNjk0ZmFiZAotZTY1Yzc2MjllYmM0MGZmMGMwZmExMDk2MzE2NTVkM2VmOTg0OGUxNmFhN2M3M2NmZDRhZWQwMmY4ZjEyNWFiNQotMGQ2MjhjZTUyZmNhZTU3N2M3ZWYwYWI2ODhhMmY0ZmE5YTBlMmE5YjEwYjkzMTMwZjBiMzU3ZjQ2NzljMWY3YwotOWJkMjcwZjM0ZjBiZmQ4NjQ1OWI0MDJjNzQyMjRhNjIxZGZhZDZlZDMxNmQwNWUxNWQzMTcwN2ZhZTdhOWI2MgotZjhmNzU1MzczMjY3NDJmMWU5ZDBjNzQ4MzQ4OWY0ZjRmYTM4ZTBmMzI3ZjI0ZmJmYjI2MzA3ZWFkMjcyMGJkOQotNjc4ZjQ1ODc1ZWIwNTAzNjM0MWJhMzg2NjA2MzBiN2QwMDUzMDRkNDM4OGZmN2ViM2JlOWMyNjM1YzIxYWYwYQotMDJkMTJmZDE5YTRlNTIxODFhOWM3ZjIzNTZiMmExNmVhZTRlOGVkNWIxZWEwYzAxNTY1YzI2ODU2Nzg3ZmRmYwotMmFhYWYxMTk1OGZmMzQxNGFiNjJjYTE5ZTk0N2RiNmI3ODAzMGUyYzUyOGYzZDFjMDIxNWNhZGJiMGMzNGY3MgotNjc1MWRhMDNjNjA0YmFlN2I5N2YzNzk4NjRiYjU0YmU5Nzk5YmQzODdlODhkNmM3MDUzZjgzZGJhZTFjZmIwNAotZjJhYzg3ZDEyZGNiZTE3YTUxODM3ODBmYWI0NTg5ZThiMGQ3MDkzNGU4NTZmMTE2MjlhOTFlNmQxM2RhNzcwNAotNzNjYzgwZTBiODBiZGQ0MmE3MWVlZTVmNDNhNGRhYjk5NGVlN2NmZWZmODNkMDgxNjlhYTI5OGM5OGE4NTQ3NwotZGZjNzI5ZWQ2ZGIwOThiNGFlNDdhMjViOGFlNzU4N2I4Y2IyZDU5Y2MwOTg5YzA2MTI5ZmMyMDFlN2M5Yjc2MwotZjhiM2Y2NTFhNWM3MzVlZGM5NzVjZWM0Y2U0NjFlODFhYzlkNWUzYjA4YTcwOGZjNTM2YjQ2Yjk1NjZhNThjMwotMDQwMmFhZmQyYjYwMThkZDA2Mzg3N2I4ODBmODVlMDk4OTVkZDRjOWQ4OWI1ZjI2NGFkNzJjYmVhNDM4YzE1MwotMDU0ZTFhNWVjZTIwOTFlMWQ0MTA1ZjQ2YjA0N2I3NWZmM2JlODY0OTFlNjk0YzFlMmUwM2JmZjM2ODEyZDE0OAotZDk5MjNmNWQ4OWEyOGZiYzRmNDVmYmMzZGI3NGNjMzdiZjNjZjQxYjA3MGQ3MmE0Y2Q1NzE1MjRmYTZkZjc4OAotMzE1M2U3NzgxODY0MTI4N2FlMjJiMWM3MjMzMWZiZmYwMTljY2VjYmMxNzA5NjE1YWQ3NDlkYzc3Y2I2YjMzMQotMzBjYTNkMGZhMDVjYzQ3NDQ3YzE3ZDk2Y2Y2ZGVkNzgyZmY2YjUwNTE5MzkxNWFlYmUzMWYxZjdiOTVkYzlmZAotOTFhMTI0Zjk1NTEyMjQxMTcxNzRhZTFlMDU3NTRkZWRjZWM4MTNhOGFhNDkzNGI3M2RlMWIyMGQ3YzEwYTIwZAotODNhOGIwODVjYzJkNDMxYjg3Mzk3ZTVmODI4NmMwYTgwNzA0MTAxNDc1ZWM5ODQ1YjJiZjdlY2I5YWU0NTdmZAotYWJhZDA5ZTRlOGVlNDExZDRhMjA1MTg1OTdiMDhkNWRkNjZhZmViYmEwM2Y2MzJmZjJlZDUyMDI3MDg5M2YwMAotMzVjZjA3MTZmNGEwOTJmYWY4YTBjMmEzZjczY2E0NmFmZDJhODI1ZWVlMDQxYmJjMmI2NDkzMzBmZTgyMTgwNwotNzA3YTA2ZWQ5MTg0N2I0MzRkMzQ3NDI4NDQ5NDdkNTRlODA0MjJmNWI1YjU2ZjZkYmRhOTM0MDg5YzMyYWQxMgotMzc1YjMxYWY5YWE5MTMyOWMyNTNmYWZkM2NmZjQ4NThjMzlhZTVlZmJlZDRkNTkwODE5ZDJmNTk2M2I3ZTA4YQotOTllMTU3Y2ExYzE4YjIwYzYyYThmN2JkMjc4ZjU2MGU4NzFiNjEyNmQ5Y2RjZWM1MmM2ODM5NDE3YmM3MGRkMgotNDlmYTM3M2NhNmRkNTU3NTQwOTA2NzI5ZjJmYzU0NzZjMzg1OTVkOTU4YWIyYjZjMTQ2MjlmOWUxNmEyYTljZQotOWY2ZTJkZDc2MGU1NWEzOGEzNDMyZTc0MTI2MTM1MzY0Y2VjMDBhN2I2ZGJmMGNkNDg1NTVkZjlmMzFlNzFhYQotOWQ1NzNiYjA3NzA4NTAzMGFhMzE0NmQwNjkzZmU2ODM4ODRhYjM4MGYwNTJjMzhiMzFiMGUzNDgzZDEyMmM0ZAotZDE1YTZhOTNlYWZlYzM1MjNmNGIyNzQ0OTM1ZGU5ZDE2NjBmYjRkOGE3NmQ4MjA0NTg2MmI1OWVhMjE4Mzk2MQotZjk4NjhiZjAzZTRhNzFkYjYxZTAzZmFlOTNiZWExMDkyYWM1ZWM4M2Q3MWRhZDEyM2Q1NjYzMTQ5ZDRiZDBiZQotZTY0MzQzNWFhYmM5MTk5NDJiYmM2MGQ0YWI1NmVjZGVjYWQzMGQyNzA1ODk3NzVhM2ZmNzE4Y2VmMGUyZWE0NgotYjhjNzVmYTkxMTc1MmVmMTM0MTAxODVlNWNlYTI1YWVlNmZhZTc0NDg5MzU1ZDMzMjhlMGNiZThkNGM1NWQ0NgotNDExNGI0YTRjODUzMDlkZmY0ZjJhNWMyYjE0ZmM0ZjQ3NzlmNGUzYThiZDI5MDc2YmFlYzM1Y2Q1OWVjYWRjYQotMDllOTNkOGRkNDc4NjA1MmQ5NzA0ODRlYTNjYjQ1YjM3YzRhNmY3NDI0OWU5ZjVlYjc1ODNiMDE4ZGNkYWJmZQotNjcyNTk3NjlhZTFhOTA0ZjIwYjNlZjM1MmNkMTkxYmJlZDk5OGY0YjJjMDY0NjVkNzM1NWU4MmZmYTcxOGUwOAotOWRmYTVjOGZkYWFjOTVkOGUwNWNmOGI1YTg5OWI4NDg0YzVlYTEwNGVlZjNlNWIyMTQzNmVkMzk2NjYyMjIyYwotOGNmZDAwYjVhODU0YmE5MzM4ZGEyMDVmMTZlNWMwZjQ1MWJjMWM2Y2YzNGYwZGEwNjlhZjVjY2ZiNDYwY2NjYgotYjZmMzkzYTk5ZjYxMzhlMGVjZTI5OWUwYzBmN2YxZDBjODNlMGI5MzZjYWMyZGMzOGYwODI5MjI0NWU3YWZkYwotNjUzOGM0ZmVjYzdkNzEyZWY4Mzk5NzA4OGY3M2FlNmZmMGFiODNkMGFlNzZhNzgxMWNjMDdiNDFhNTdkMWQzNAotMDQ2ODE1MjZkMzI3YjQ4OTA5NGRkOTYxZjJmNjBhMGM2YzI3NWYwOWYwYTE3MWU4ODA1NmY1ODczNWQyZjUwMgotNjVhMTY3ZDEyZmYzMzk1ZGY1OGMzYjkwMWE2OGYwZDk2ZjhlZjU0YWM1NTQ4MDg2MjI5YWRhYzQ5NWZiYzI1NgotYWZlODMyOTkxZjE4MzlhZWRkZjFhODdhYmMyMTc4MzVlNThhZjQxOTk4MjMxNjVmYjk4OTlmYzgzMWI0N2JmZQotNGMzYzFmNWEyNjk2ZTlhNWYzMTBhZmI4MTM4ZWVhMDZmZGEwNjg4ZTBkMGQ3Y2QxY2VmZjkzYTcyYzU3Mjg5ZAotMzMyNTI1YzNiYzYwZTUxYWIyNTUyNmE0ODc2YWZmYjJjNjQ2NTdjYWYxNGIzNGZjYTQ2YTc4ZTQxYjBjMTk1NQotMDFmYTFhMGMwZDc3ZDVmNzAyNjIzNGFmNDg5YjMxNjg3MmU2NGI0ZDQ0OWVmYzU0MGZiMGRhNTUzMDYzYTcxYgotZDhlZTQ0YjBmOWEyMGFkYjlmNjBiOTk4MDNmMTc2MGMwY2RlMzU3Nzg0ZTg3MDQyMTMzYWEwODVlOWEzN2E1YgotYjU2ODVlNzMzNTRjYTBlOWE0OGQ4ODZmZDEyODQxNjc0YmMwNzEzZDQzMzAxODgzZjFjMmY2MTkwYjQ3YTRiOQotOTk2YzBlNTI4YjY1NzJjOTYyMzJlY2JjNTdjNTcwNzM0NjNhZTM2YjViMjk3NDE2M2NmZjc1ODI4YTIwYzQ3ZgotOTI2ZTk5ZmFhYjUxZjE5ZmRiZTBmODliYjcxZmZiYTllYjk1YTgyYjNhNzEyYjU0NTc4ZjY2NWE4OWVkZjE5MwotZDU3NWVkOTViYjg4M2Y5ZDY3OTcwMjlmZjBjYzhhNzU0NTlmYWMwY2NhNDUzMGUxN2Q5M2M5ODM0YThkOWM5YgotMzc2ZDNlNDBmM2U0NGU2ZTg5NWYyNWM5MGE4MDNjZjhiMGYzMDU2MDM3ODA5ZTNlZDYxODQ3NWMxOTlmNDNjYgotYTdlZWZmODRkMzhmNDlhYWZhNGU0NjlhYTc4Y2RkYjg3ZWE3NmE4N2RhMWI4ODhjMzhlMjI1NDk5ZDFiYjA4OQotMzJkNTk5OTE4MjI3Yzk3YjFlNGRlNTIxNDYwZjFhMTc1ZmYyZmM1MDBiYjk1NTc0ZDllYWM2NGNkMDA4OTZmNgotMjc1ODlmZTUzNTFmNDZhNDZkMWZlOGFlMTZmZGM5NDVkZWNiMDhjMGI3ZDg0MWM1NTE2NTM1YWI2NWI4NDcyNAotMDQ3OTZiZDdiNzA4M2E2MDY5NzczMTZkZmZhZWVjMGU4NjgxYzEwZGY0ZGVlZjYzMzU0MDNlNWIwODg4OTU1OAotNDhiZmIxYjg3MDhhNWM0MWM1MTQ3ZmJlZDM5NDJhYzI2Y2U2NjM1N2M0OTA0Yjc5MTQ3ZGNhNTVmMDM5YjY0OAotYWUxOGQwZDZkMzMwYTYyMTMwMWUzYzFkNmU0NzhmYzZmY2VlNGMzMzgyZDQ2MzQ5MWExNjc1OTZmZjUxZjE3ZAotMWFmZGQ0ZWU3YWI4ZjFiMjdiNGVmMmI2NjVjYjY4MTg2MzdiNWU5ODI0NDdmNmQ3YWIyODA2Zjc2OWQyNTRmOQotZjU5ODE4MTJhOTQ1OGEzOWY1MTM2Njc3M2E4OTgwYzdjNmRjZWQ0NDhkODc4YWYzYmMwODgyMzc4MTVkMjcyNwotNDAwOTNjYjdjM2E0ZTZlODZlYzZjZDYxZmE4YWQxM2IyMGUyNzBmOTdlZTViZTE3OTlmMjk2NmEwY2EyYTdjOQotMzJkZTA4YmIwMjFhZGY5NDY2ZjFiODhmZmVmMzE1YjgxODk1NDA1Nzg3N2QzZDU5ZjE3M2MxYjE4NzRmZmZkZAotZTM3NDlhMGRiYTdkNjJkNzA0ODNiMWE3Yzc3MjBjMWU5NWM1OWZhZWVkMGM4YmUxOTEzMTc3YzZkYmFhNjkwNQotYTZiZDFhMTUzOTA2YWExYjY5MTllYmQxYmVmYjlhNTRkOWI4NGNkOWQ1NDhiMWFiZTgzOTMzNjcwZWE3MTliOAotNjMzN2QwMTI4M2I5NTMwNmRiOTJmZTA1OWRhNTJkMTA3ZWM0NzgxOWJkMTYzYjM4MzBjOTg5ZGY0MDUyNjE0YQotOTg2NmIwNTdhZWFlZDQ1NWZjOTg2NGRmMTk2MGU5NzgwNmNmOTUwMTEzOTRlMjA1Mjg2MTE1MjAyNDk2OTgzNgotNzdiZTgwMDhjMjQ2ZjE0YWVhMWMyNmU2MjBmYjMzMWY5NmNkMzJhMjNiMWM4N2Q1MzRkNjc4MTgxYTE5ODc1OAotNGJmZmUwNjlmYjVhMGM2YjYzY2E4YTljZmI2YzNmZDZlY2YwN2M1YmM1OTcxMmVjN2QwMmE1Yjk4OGMzZmJiZgotNjk1ZmM3MDY4YTY0NGQ4ODg1Y2NkODg5ODc1MzI1MzllNWNlZmM2NGZiOTdlYzEzNzZlZjBhOTc5NzBkYjUxMAotNGMxOWI3YTY0YTFiNGY3ZWVkZmVjMjUxNTk5NjIzOGRhZGJiZmE4YWZkODAwNGYxMjg2N2RlMjA5MTJjMjc3NAotMWNlY2E2ZjI5NTZiMzQwY2NiNWUzMGYyYjFmNWY2Mzc2ZTZkM2EyNzJiZTA1YzI5MTI1ZjZkNzRiYmVlNzg3OQotODgzNmVlNjczOTcxYWI3MjRkYzg5ODY3ZDVhOTM5ZGEwY2I0MTY3OGZiYjhkOGVkMzVlZmEyOGRlODY3MjhmNwotOTUzYzljNTg5NmI4NjdlNGI3ZGYzMzIyNTYzYWZmOGEzMWNjYTg5MDFiNTU0MmFmMmM3MjU0NTQ3YzdjMDlkMAotMTViYWE3Y2JkYzczNTI5NjBhYzY1MGE1NDNmMDVlMjkwMzQxZDI0NWRkZDMzMWE1NTZhYzdmYzBlZTdlYjI0NgotNzE4YjcxMDczYjlhMzI3NzZmNjIxNWZkOGZhMjI5N2EyZTliZTIzNzI4Y2JiMjRjNTNlYTEwYTQ1NDRkZGZiNQotN2Q2MjkyNjQwODQwYzc3YmYwMzcyOGMzZTVkMjY2NWVkN2RiNzQxMGM5ZWNiMzJjMjQ5YTQ1NjY0ZjcyZjhmNAotMmU4MWEyZTA4NmI1MzVmNjQ3M2IxYTMzMTlkMTM0MzE3ZWRiZDE4NjRjYmE3Yjc5Zjg5ZWY5OWQxNmM4ODcxYQotMjhmYmM0Y2I0NWY5ODJiYWM2ZGU4MWVmNjM3YTdlMTAyMmE1NTc5ZjczODY3ZTQwZTMxZWM4OTAzNjMyZTMzZgotYjI0YWJlNTNiMWYzYTMwOTc3NzliOTc3YmJlYjQxYzIxODU3OTA5ZDNlMjVmN2JjODhlNmQzZmU2ZjE4M2RhMAotMDEzM2E5OWFlMzkwODAwMTJkZjg0OThiOWNlMzIyZWE5Yjc2MzQzYzJlOGJlMzY3NmYwODYwMjQ3MGRhMjc2MQotZWQ5ZGU0MDdmYmEzOGJlODJkZTYyNGUxNTUyYmU0MGEwZTEwYjU1YWQ3NDM2N2I5MWM4MGI4YmM1Y2Y1OWY2NAotYjc5MDcyMzY5ZDllNDkyZWU2YjlmOWRmMGI5MWFlNjA4YTQ0MDIwZWQ2ODc0MDM4OTc0Y2NjOWFmYTg4ZDZiNwotODExNGFmNGRlMDllNzdlNGIwYTFhMWZiMjdlMjI2YTYyMzg1Yjk2OWJiZWJiNjU3ZWE5MjdmZDg2ZTA1MGZmMQotM2ViZDAwMWEwMjIzMzNmOGNhY2ExM2M1NGY5YjM0NWNkNWI2NTUzYzkwYjRmN2ZiOTQ5ZDdkNjVkOWJmOWZkOQotNDZhM2M3YzUzMWY2YTY0NzlhYWIwZDVhNzAxNWI1Njk1OTc3Nzg5MmZlZWE3OTkwZWRiZDJiNDIzZjZlOWNlNAotNTgzY2FhYzEyNGMyNjg2MjhhOWNiNzAzZGQ5NmFhY2QzNWIxMDMxZTA4YTc0MWQwMmFkZmQ1NzkyNjdkZjc5MAotNWVmMjZhZjE0YjJiYmRjMjJhMWViMzNiNTg3MTlhMWU4NDYzZjI4Nzg0ZjRjMTVjYjNjMjVjZmIyZTIwYTUwOAotNzg1NGE1M2Y0YWIzOThiMDIxNzdkZTUwMGEwNDlkNmM5ZmFhMTNmZDQwYzE5MTc4ZTg3OGYxY2MyNjIyMWM1OQotYjQwNTQ1ZjVmNDQ0MmFiYmEwNjY1NmVhZDVhZmQ5MzhhZGViM2VhNTBjNjk5ODYyZDQ4ZTc2N2MyMjNjMWYyMgotMjQ2ZTU4YzU2OTRkMWUyMzUxMTcxMDgxN2E5ZmQxOGExNjIwY2M2NTEzNDVlNmQzMzAyZDg1MTM5ZjdhNTczNAotN2U0MjNiZTE0NWUxNjViYWY0NjAxOWZlODMxZjk3NjAyZWM4N2IzY2RmYjhmZWExMjg2OWM5OGYxMTVkMWI2NgotNWFhNTg4ZmE4MjQ4NGFjZGVkN2NhMmMxM2ExN2JkYTMwNWY2M2VlMjI2ZWUxZjM3Y2YyNDdmMWFlYTlmZjkyZQotMmZhNGMxZTA0NDhhNWRkZTQ1Mjk0Njk5YTk0OTBhNWVhOTRjZjgxYzUzNDkxZmMxOWUyYWRlNWFmMDA1YzMwMAotYTVmYzk5Yjg5M2VkMWQ0Njk3ODhlOTRkZTgyMzAwNmY4ODQ4ZGM5ZDAyMWYxOWI5MzQyNzhkNDRlOGM3M2RhOQotMzcyOGYzODk1NjNlMTBhZTYwMTdjNWNhZjNiNGIzNDBiZTFkN2QyYjdmMjRhOGNmY2MxZWQxZWI5MjBjZDM2NgotNmZhMTJmMzVlNDU2NzNmYjEyYjQ1YTZlZDdlODQ5Mzc1NzZlNTMyN2M4MmQ3ZjI3ZjZjMDI1NWY3NWVmNGIwMgotY2Q0OTJiMjNlYzFmMzQ2YmRmOGUwMDcwNDJhODJhYjczMGFiMjgwNTU2OWQ3Yjk3OGE0YjExNDU3NzUxNDU0OAotMGQ0MjZkYzRhOGFkODZkZTg1YjIzYWI1YWE4YTUwYTMwYmJkZDhlZjVlOWZmOGU3OTU0YTY5OTg3ZmI1NDAxZQotYTlkMDM5ZDVlMDVlZjI0NWUzYzcwYTg1MjM2OTY5ZjMyYmQxZTVkMjlkNzFhMjAxMzQ5Mzk0NWU4MDM4MzhkYwotNzI0MWE3M2M0YzFmMTQ1NDhlYWFkY2JhNjRhZWJjMjlmZDIyNTNmYTU5YjZiMDM5YmIyZWRjOWU0YTdjOGU4MwotMzE3ZWMzOWEwN2I4YzgyOTdlNGIwOGQ0ZTZmMDFhNTNlM2Q2OTBmMWQxZGI0OWYxOTY0MGMxNjQ0MWJlNmFlOAotZDFjYmRmODUzMzk0Y2Y2NjVmNzQxOTM4NzMzZmJjNzAwZThkODJjNGNmMWQ3MjQ1NjAwOGEwZmU1NWM4YjY3NwotYTRmM2UxOTdhYWM5Yjk3NjM0MzkyM2RkNGM1YTE4MTQ1NDMxOWZjNTA5ZDQ5OWJmMTQ3NDBlZjEzODdmMzU0ZAotZDcxYzNiYzViOWQ0ZDJkOWUwZTdhM2JjNjBjNzljOGU2ZDM0NGJlYmViM2IyZGMyYzM2MDVmZGYxMDAyZjA2MQotZDUyZjcxOGI1N2QxZjZjMTQwNmIxZmRmMmNlMzdlZTQ1NjkzYmE3MjI4NGM1NjUyYjJkODhiMjlhZDU1ZDliZAotNzgwMzJhNzZhZTY0MjdjMTk3NDljYTE1MDNmZGZhNmVkYTQ4NjFmMGIwYzcyNjg0NTg5ZWZlNmMwMWQ5Yzk2NAotMTIwMWI3OWM1Y2UwMzUyMDUxMGUxM2JjNTQ2MWZhM2QyODk3ZTJiN2M2NWViYjU3MWUyZDBjZTMxOTI0OGQ0YQotZmNkZTZkNzBjMzhkMjVmNmJiZjBjMDliNjQ1NTNjM2ZkYWRjNjRjMjkzZGVkYTZlMmVkOGMxOTFkN2Y0MzJhYwotNWJjYzFhYzMxODNjOTJkNTQ1YWJiZDRkYTdlNzY4MTQwYjlmNWE1MDc3YjA4ZGM4ZWFlNjQ3MjdlYWRlM2U1YwotMDVlMDcwMzZiMDhjMzFiYTVhZTM2NmM2NDJmODE2YjVmYTYwZTE0ODc5NWQzZDRjZTA1MGYwOWM0NDNkNmZlMAotZDQ0Zjg4NTlkNDNkYTM5NjQzZDRmYjhjNWUyZTM0ZjFiMzIxNDJkZGVmMDdiMWMwMmMwOWY0Y2M5NTA5ZWFiZQotOTkzNTBjY2QzYTlkMmQ2ZmI4MDkwMTZkYmUwYzFhMjlmZDFkMjVjYzgzMTI1YmE3ZDAxNDNlMDkyMDNmOWUzNAotOTljNmQwN2NjNzhiZmRiODJmNzJjNTc3YWZmMTA0NWNkMmNlMmUzZGUwMzAwMjgzYWU1YWM1NDBkNDk4ZTQ2NwotMGUzNzE4ZTNkYWM2ZGNkZjFjN2FiMmQ1Zjc1YzViNmU1NmJjMzJkOGRkYWNlNGNlN2Y5MjcyYWFlMTg4ZjNiNwotZDZkMzFiMzgwNTkyY2ZjMGRlNDVlYWJkZDg3Y2ZhYTE1MTQzY2NlNzM4ZWRlNDBiZDlhMDZkYjBiM2Q1ZjU3MAotYmU1YjIxYjMyOGIzYWM0ZmY0NmFiYjE5MGVjMTdlNzNkMzFhZjM4OWRjOGU4ODcyODBmODRjYWY3YjMxN2MyNwotMzg1OTMwMDVhYTU4NmIzYzQ5MThmYTk1YTk0MzVlNDVkYjQwYmI1MmQyZjYwMzQ2ODY0NjNjODcyODBiODA4NQotODc3Mjk3YTg3MWRkMTFmYTFkNzgyNTY4ZmU4MTNjYmRhYjZkYWJhODI4YzFjMjY0YzNkYjgwOWNiOWRhNjYzNQotNjQwYzNlOTkxZGM0MWNiMTg0MWVhMTU1NmI3NTYwZDQ3NTI2YmRjMDEyYThmMWRhY2IzMGYzOGVkMGY0NzIxYgotYjk4YjEwNzUyNjI1OGQ2NjgwNGZiMGRkNGM1MmQ4Mjc4NTBkOGYwYTc2NGE1M2NkODFmNjYyNjlhOGNjMTE0YwotMDY0ODJhNWIyYjc1MjQxNjcwN2QyOGU4ODI5MWJjYTAyYjc3NDYxNjE3OTQ0MzdmNjFlN2UzMzUzZWNjOTJjNAotMTUxYWY5YTJmMGIwZTBlN2I4YmUzMTA2ZmE4YjQ1NWU2MGQxYjhlN2EzMGE0NTkyMmZlMDBmN2FjOTAzMWJlMwotYjllMWRjYWU4MzAxN2ZmYTI3ZjE5NmUxYjhkYTZjZmYxYmMyNWMwZDc3NmRiZjY3NTgzOGMyNGM1N2EzMDc4YwotZDJmNmRhZDg3MjJhYTg5OTcwNzhmMjJiZmFiN2U4Zjk5NTUzODE3NGQ1NzdjMjhkMTY2MGU1NDg0MjcwZTYzYgotOTBmZjI5MTExYTcxYmNmZGRhMjA0MDM0YWQ2ZGYwMjZiYTlmZTYxYzAyYmM5OWUwNTUzY2FlODJmYzFmODRhNgotZjhjNzQ0Y2YzNGE5MmIzZmEyMzliMjNmYTJhYTQ2OWM1NzY1YzAyYWJlZWEyNzJmYzkyOGQyNDcxNGMxNGVhMQotMmRjNjg3MWE4Mjk3M2YxYjU3YTIwNjMzNzlkYzQ3MWYwZGQwNjg0YWI1Y2U5YWI4MDg4NTEyYjU0OGMwZTk2YwotNTlmMzE0ZWU4MWY5YmEwYTc5MzA3MjMyNWQ1YjJhNDc4ZWNhMDQ3Mzk3NDYKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjEyMl8wIC9EVFVVSFArTmltYnVzU2FuTC1Cb2xkIDEgMQotWyAvLm5vdGRlZi9kb3RhY2NlbnQvZmkvZmwvZnJhY3Rpb24vaHVuZ2FydW1sYXV0L0xzbGFzaC9sc2xhc2gKLSAgL29nb25lay9yaW5nLy5ub3RkZWYvYnJldmUvbWludXMvLm5vdGRlZi9aY2Fyb24vemNhcm9uCi0gIC9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZsL25vdGVxdWFsL2luZmluaXR5Ci0gIC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsL3BhcnRpYWxkaWZmL3N1bW1hdGlvbi9wcm9kdWN0L3BpL2dyYXZlL3F1b3Rlc2luZ2xlCi0gIC9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAotICAvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCi0gIC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbgotICAvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCi0gIC9hdC9BL0IvQy9EL0UvRi9HCi0gIC9IL0kvSi9LL0wvTS9OL08KLSAgL1AvUS9SL1MvVC9VL1YvVwotICAvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCi0gIC9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZwotICAvaC9pL2ovay9sL20vbi9vCi0gIC9wL3Evci9zL3QvdS92L3cKLSAgL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlLy5ub3RkZWYKLSAgL0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJhc2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsCi0gIC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FL09tZWdhL3JhZGljYWwvYXBwcm94ZXF1YWwKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2J1bGxldC9lbmRhc2gvZW1kYXNoCi0gIC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lL0RlbHRhL2xvemVuZ2UvWWRpZXJlc2lzCi0gIC8ubm90ZGVmL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24KLSAgL2RpZXJlc2lzL2NvcHlyaWdodC9vcmRmZW1pbmluZS9ndWlsbGVtb3RsZWZ0L2xvZ2ljYWxub3QvaHlwaGVuL3JlZ2lzdGVyZWQvbWFjcm9uCi0gIC9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCi0gIC9jZWRpbGxhL29uZXN1cGVyaW9yL29yZG1hc2N1bGluZS9ndWlsbGVtb3RyaWdodC9vbmVxdWFydGVyL29uZWhhbGYvdGhyZWVxdWFydGVycy9xdWVzdGlvbmRvd24KLSAgL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQotICAvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKLSAgL0V0aC9OdGlsZGUvT2dyYXZlL09hY3V0ZS9PY2lyY3VtZmxleC9PdGlsZGUvT2RpZXJlc2lzL211bHRpcGx5Ci0gIC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMKLSAgL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQotICAvZWdyYXZlL2VhY3V0ZS9lY2lyY3VtZmxleC9lZGllcmVzaXMvaWdyYXZlL2lhY3V0ZS9pY2lyY3VtZmxleC9pZGllcmVzaXMKLSAgL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQotICAvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXNdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IFZYQU1SVitOaW1idXNSb21ObzlMLVJlZ3UKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzUm9tTm85TC1SZWd1IDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBSb21hbiBObzkgTCBSZWd1bGFyKSByZWFkb25seSBkZWYKLS9GYW1pbHlOYW1lIChOaW1idXMgUm9tYW4gTm85IEwpIHJlYWRvbmx5IGRlZgotL1dlaWdodCAoUmVndWxhcikgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgMC4wIGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLS9VbmRlcmxpbmVQb3NpdGlvbiAtMTAwIGRlZgotL1VuZGVybGluZVRoaWNrbmVzcyA1MCBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvVlhBTVJWK05pbWJ1c1JvbU5vOUwtUmVndSBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9XTW9kZSAwIGRlZgotL0ZvbnRCQm94IHstMTY4IC0yODEgMTAwMCA5MjR9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiOGUxNTJhNDBlNTkwNDE5MjQ5ZjJlNAotYzM2MTU5ZjhlNTRiNTMyNDY4ZTM2OTY1YTM4NjQ2NzgxYWIwYjdmNmEzZTg1MWZkMTBjYWE0OWFkZmMxZTU0NgotMmZkMmVjNjE1MGRjNmUxOTUyMzA1MGY2MTQ4MzQ4YTU2MWFkOGQyZTI3MjFlZmY4YTU3MGNiMzM0NjBhNzQ1YgotOTI2Yzg4OTMwNGMwOTc1M2MyZDc4ZmIwY2E5NWRjNmRlNWI4YzUyNDc1MmM4MzYwMWU3ZTlmNzNkZjY2MDY3NAotZjA1YWQ4M2ExNjZkYTliZTg5ZjIyZmVhYmQ0YjI2NjU5NjBmNmZiNWJjMzI5MjhlMTIzMGMyMTJlNWQ2OWNlZQotMGIzMzExYTE3MzhhMTE3NDdhZTI2MzEwNjkxNmQ4ZTk1ZjI1YjI1YjRiYzZhZmIwM2I3OWFiYjk1ZGRhNTE4YgotNDFhNDk0NTgxMTFkMmExNDMzYzA0MzYyN2VmOTQ2MGQzMjRmZmUyMjkzNWY0ZjZkYTg4YjhiOTFhZTk1YjM0ZQotMDg0MDhhMzRlYzhlYWMzZjY1YjZhZTNlM2UyNTI0ODY3ZWU5ZDI5MDY4ZjgxZTQzNzJmNDQ3MGJlZWI0ZDZiZQotZWU0ZGY5NTZiZWNjMGNiNzdmODQ5MDExN2IyMmIyZmI3NWM5MzhlZDBhNWUyMDhkODhiYzM4YjJhYjhiOWNmYgotZjFkNTMwODRiNmY0M2RmMzM2NDgxZWNhMGFhMmQ1MzE3YmM4M2ZjMGUxZDRkYjAxZDBiNzcwN2VlZjIxN2U5NAotYTdmOTg1MTAyZGVkMjdkOGU4YjAwOWY3ZWY2ZGI5MWI5MWU3OGJmYWU3YmQ2ODhlMTBiM2RjOWFjNzdjZGVlOAotNDdhYTRkYzhlYzc4MjQxZTU5M2QyNmVjN2E2MDY5NjE1MWEyYWU1MzI1ZDczNmU5OWUwMWJkY2JkZTY5NTc5ZgotOTJlZWVjMjI0YjY3NTdlZWRjNjRhNzU0NTViYjY2NWRmNDJhMGU0Y2U3Yjk5YmYzZTdkNjZmOGZmYzhjMTNmOQotZDdhMWZmN2E5ZDVmZjdhYzQzMzk2Nzc5ZjExYzliMDA4YzMzYTIwNDNkNDhiNjFiODhiMDMxMDRiMTQyNWYwOQotNjc1YjU1OWNhNDMwMmMwMDFlZTgwZDJiNzM5Y2MwZmQxMDIzYmY0ZjFmZjljMDFlODkyZTU5Y2NhN2MyNjAxMQotYjhlMGI2ZDI5Y2MyOWZjNzI3OTJmZGE1ZTdkNWQ4OGVmOThmOWRiYTk2MGM5NjUzNGMzOTljNTQ4NjVlYWI4NgotMGZhMmUwZDZjN2M0NGI1NTNlYWMxNTc0ZDU1ZTc5NzA3NDRkNDc5MmZmZmJkY2U2ZmI0MzY1YmRiYzI5NjViYgotMmU5ZWRhZDllMGViZjBiNjIwZGI0MTVhZDk4Mjk3ZjVhZTgzZDljNzEwNDM2NjU3ZTc0ZDI2ZTgzOTU3Yzc0NQotODk4MzQzMzcwMzVhNzUwMTgwMzk0N2Y2ODgwYjcwZTU2YTNhNDA0YzYyZDU3Yjg0OWQyODgwNGNiZTBmNTg4NAotNDM1YTBlMTJkY2M5YmE0MTRhYmI3MzJiZmJhZTIzNzAwMWY1NTdkZWE1ZTk3MmJhMDgzOGEzYzdjOWViNzVhYQotNGEwNTBkYTBhNTI5YmRmZmJmOTAxMWMzNjA1NjRmZDE3YTAyYzE4ODYwYWY2Yjg2ZWZkNGUyYzEyNTY4NmM5YQotNWUxMTRlOTVjNzFmYzg5YTVkZTljNTg5YmZlNWFjMDQ4MGNmZjcxNjM0NTI2NWQyNDM1ZWRhZTY3Y2ZjNDgwMQotNWJjMDhlN2E0OGQ2ODNhY2RiOTFlMDVmNDY5YzBjODkxOWQ3M2E1ZDA3YTFjY2IxNzNlMzBlNzY2ODBhY2IwOQotMDJhNDBhM2UxMTkxNjE5OGJkNjlmMWEyNmU4ODMzMGY1MDY5MmQwZDU5MTdlOTllN2EwMWIzMjc0MTNlMjRhYQotZTk4ZWE0ODRlNDU4OTdlNmFlNGQ2OTk3YjZlOGJiZjYxYzk0MDZlOTE2ZDU2OTg1Y2IyYmQyOTdlOGFjZmM2ZQotY2YyZDIyODFhZDg0Njk2YjdjNmNiNTg0YmQ4NWNjMjBiYTE0YWRkM2JjM2UyNWRiOTExMjRjMGFjZjIyZTkwMgotM2NmYmYwNGNjNDBkZTMzMTk5MWU5MDc1ZDIyYWI1ZWUwZTg0OWIzNDAwNTBlNmM0MTdjNjY0YTc4MmQwNTU0OQotZGIyZWY1NzJmMTkzYjFjMTJiNDYzNWMyYjM1ODc0NzA0NmRlNTg1OGVjMzJiM2IyZTc5ZDQyNzUwNjU3OTc3ZgotYWNkZDJlZTVhN2M5MzIwZDkwNzQzOGRiYTYzYWEwNWVkNDEwZmM3MDAwZjUzNTQ5MDkxYmU3MWJlNDVkYTRhYgotYTMxNWY5NWI3MjRhNjBmMTdjNzA4MzNlODg5Y2ZlN2VhMjA2YTdhYmM0MzkzY2I2ZWY0N2JlMzcwMGJhNTYzOAotNjgzMTM5MTgwOWVmODM4NGFlYThjMjI3MzVlODA2MmE5ZjkxMDFhZGQxMjVhMzIxZmI2NTM5OWNiY2Q5YzllNgotMGY0NmZiZjI3MWIyYjFlYzgwODMyY2MwNTRiYWI1Y2E4MGQ0NTYxZGEwYTM4MGQ1NmQ1Y2IzZDkwYWU4OWExOQotNDhjZDgyNGViMWU3YWM2MTI3YTZkYmEzZThlYTQwZjAwYWRkODk3NDlkNzdlYzBlZWJlMjZmZDZlYTVkOGNjZQotZjcyMzk2ODFiM2Q5NDg5ODIzNmFlOTJmZjM5MTJlMGFmZTg0YjZjN2UwODEzNGMxNThiNjQwYjRhZWNhYjVmMgotYTkwMDI4ZTY3ZDMzZGYzMWI0NjFhMjg0NmY4M2Q5MDk3OWJiMjI2MThlMmExN2M1ZDE1OWZiNTlkNTE3N2UxMgotZWRmMTMyMGY1OTZlN2E0YzM3OTMyOWFkYjM2N2Y5MmJmMjg2OWE5YTk3Mzk4ZTBjMjBmNWYwMTdjYTlkYjdiYQotYjNiYWI3MmI4N2E3YjZiZjRmZWJkMDMxMzJmOTA3NWMyNzFmMjA1NDA3ODM5NmRmODQwM2RjOTE0NjEzMjVmNgotMTJjZjE0MjFmMzA5OWNjZDc5OWMyYzA5OTQ5MmM0ZjA3MTMzNmQ5ODVjMGMzNjBiMmY1YTU4NzdmZDAwYjZmOQotMmU1OTExZGRkZmIzMWQxN2E2MDEyNGVlOGRhNmNiZGE5NDE5NmQ3ZWQ0MjgwNDYxMGU0ZjczMGRhZjJmMmQ1YQotYjc2N2MzMjBjNjI1NDNlMjY1MzQzMTRmYWNhZTAwNmJhMjA2NDYyMzkwMmM4YWM0NzllZWViYjYwOWU4YzNlNAotMTUxNmNlNDEyY2I0MTBiZDAyNjIzMWUyMmE5Y2QwZjY2NGQ3NjllNGU0NWNiYjc1YjczNDFmMDZkOGUzNzI4NQotYmVhYTlhYjcxYWFiZTNjYmZlNWEzNDg2ODFhYTI0NjA0N2NhMjljYTZiNDQyZmVhZGUyNTRjNzU4MmQzMmQzYwotNzFiNWU2NDVjODJlOTJmMDU3ZWI1Zjg1OWJlZTIzZGFhOTVjNTc1ZWRhYWY5ODk2ZDZjMTA5ODBhMDlkYjM0ZQotMDg0YzhhNzU0ZTMxYjYxOGM2OTkxYmFhODU2Y2I4Njg3NzA0NGUxMGMyZjE4OWIyODRlMzE5NWEyZGI2YjkxMAotMjU3NGUyNDYxZDJmYWU2NWI3MzIxYzAwOTNhMmEzNDk5NmMwYjc3MTIzNTAzZTllZGM2MjNkZDAyYzQ0ZmI3NgotM2M1NTA4NDBiZGY5Njk1ODJkMjI2NTEwZWJmODk5NDRlNTk2ODRlYjJlMmM0NjNlNjk3MDIyNjZmYmNmOGQxZAotNGMwYmU0MDA0OTVlMjI3YjljYjIxYzgwODZmMzI4NzgyY2E3Mjk0ZGNmM2VjZGMxYTYyNzE0MTQzYTRjMWI5OAotZTVkZTFkZDU1NGZiYTYwNTcxMTg4YTU4ZjAzNTRhNmI5ZWY1ODA2ODliNzhhMGM4NTE1Y2EwNWEzNTgzMjYxNgotN2UwYTkwZjY4ZjNjMzA2YWI2MGFhYjIwODcyZmIxNjc2NzNmNDFlOGU4N2ZmMDExMWY1NzljYmQwZGE2OGI1NgotM2UzNWQyZWJmOWYyOGIxMDQwODJlMzYxODczNzNlZmM3YTMzZjYyZDNmZTRhMzkwYjYzYTc2ZTliMjUzMTg3MQotNmJkNTk4NjFmNTFiNTYxZGNjMTE1MTkyYTZmYzIyZDE1YTVhZjAzYmEwOWNkZmE2NmI2NjBjZjQyODhlOWQ3OQotMjZlNzk3MjU2NjU5YjBmZjY0YmI1ZDkwMDk5MGMzY2I1ODhlMWUxODgxMGJjYjAwOWE5MWU1ZjRmOGQ5ZGIxYQotZjJhMDYzYmRhYmQ5YzMzMzJmNGJkYjcwMWJiOTRiNGZkMjQ1NzBiNDQwYWU3NGI4ZDkyNGU0OGU3YzJkZWZiMAotNTNhMTllNWI0ZGYzOWFiZjRmNmZjNjE2MGI1ZmNjYTAwNjA4NDIyYTMwOTFjZDAzZTcyNmIxZWExZDIwM2IzZgotYzQ0MTczNDYwYjQ5MDQ5OGVkYTMxMjE4ODFlYmQyMWNiNWI1NzFkMjFhNjIyOGNjMGExYjAzNWViZTk3ZjI2YgotMGI1ODE3OWJkMjJhYzk1MGVjM2E5ODQ1ODA1MWE4NzQyOTdjZDZiZmU3MzFjNWI0MTM4MTk1MDMxMTFmMWY2ZQotZWJmYjU2MjhjOTU1ZjVmY2FlZDc2ZjI0MDJjZTM1MWY3N2U0NzFkMWM5ODIxZGFkNjI3ZmYyNTEzMTU5MDU3NwotNWZmOTMzNWRkMjhkODVhMTFiZjE1NTc2NTYzMmIzNGEzYWExZGY5YzAxMTM0YmQ4ZmU5MjdlMDA2NDMxOTk1MQotZTJjMWQzNzRjOWFjZmMzMDkzMjcxMmE1YzNlMGZlM2M3ZTM1NWUzMzU2ZTkxMzVhMTQzZjFiNGUyNzM4ZTIwOAotOGY0NDYzM2RkOTMwMGJhZmM3NzA2MjVhNjRiMmJkMjBkNGY2NzI3MDEzMTBlNWQxZDViMmRkNTAyODAyNTM5YQotNjUzNDQ2MDE5MjRjNDczYjc2MThmOWI4N2JmNmViNDk0NzRmZTYyODkxMDk3YjliMzgxZGZjOWRkMjJmNmNlYgotMzQwZWZkOTUwYjc0ZTYxNGEyOTA4ZWVhN2IwZDM5NWUxNTk0M2QwYTkwNzJlMmMwZTZjOTFkOTE0MWM4NDI4MQotNmE1OWYwMjExMTMzMzcyM2RiNzhjMmMyODc2NzVkNzMxNTJlZTNjNjMzOTdmNWVhNjIwM2M3MDc1NjgxMzdlMAotMTI0MzhiODZlYWQxNmQ3MWEwYTU2ZDAwZTZhY2U5ZDgwYWZmNjQ2YjA1ZDgyOWRjZjA4ZGNlMmZlZDFhMTdkMwotODNhN2M5ZTdjMmE1Y2FlYjM4YmRhODAyZTY2OTZiYWIxN2E1ZDFlNWQ2YzUxYjYzNzFjNjQyZDU1ODhhMjk0NQotMWYzYzhiMGNkNTY4MDY1MzE1NzlmN2MwZDEwYTlmYmUyNTRlYTkxMDUyMmQ5NTVjODZkZGQ2OTNiODY2MGJiZAotMTdiMmIyM2ZlYTU3YWYxNWIxNzIwZTQyYzZkZTUzNzA3NGMwNzFjNTBjMTE0YWM1NGM0NWJhMmZlZTAwZDEzYQotMjU3M2JiOTI0MzY0OGExYmUyNTY5Y2Y2OGZmNzhlNGNhY2FjZGIzNGRhZDkxOGEzMDAwNWMzMWYxNzc4MTYzMwotNmI3NGFmOGI5OTMxYmVjMGMxODkyNzgwMDIwYzFhOTI0NzBlM2FkN2YxYmI2ZWYyNmM4MzVmMTNhOWM1NmRlZAotNTFkZjRhNzg0N2M5OTNiODhiOWZkYTlhODk1NWQ4YmRiZjZiYTc3M2QwNjY0NWUyOTJjZTI2ZDlkZjRiYmQ0ZgotM2QyMGY1MjE2MTg1MzgyNzgzN2M4MzdmMzM0MjU5OTA4MThiOTU4YWRjYzNhZTc5YjU3OTFmZjA0ZGFhMzJmZQotNTQwNTBhYTlkMzQ2MDZmMTZjNzc2M2RlNzcwY2MzM2M5YWNiNjBlNTM1NGQ1YTI3YTY4N2NhNmUwZmQ3NGE0YgotNWNmZmVhZGY2YWQwYmE4N2I5MDZjMDkyMDFmZjY1Y2U2YzNmNjIwYmJmYWFjY2JlNTRkYTg4NGI4N2U5MDZiNQotZjUyODVkMzg0MWVjZjc4ZjBhMWVlNGE4MDcyNGRhM2E0ZmQ0OWZmYmFhNjZiZTM0MDJhMjQ4MGE2ZjhmYzE2NAotMzQzYTM2OWUyYjg5NDdmZDVmNThhNDY5NzIzNGM3NDI2ODU0MjFjZTNkNTczOThjNWVkNmY2YjA0OWZkZjM5ZgotNjg3MDIzNjc1MWQ5ZWYyMjEwZTY4MGI0ZDhhNmRhYWI3NThiZDdmYTdkYTk2ODA2MDRlNWJmODVkMTgyNjYxMQotMmNhMDhlODkyMmExZDQ2YWM4NTNmNGJkY2EzN2Y3ZmU4MGQyZDI3ODU0MDEyZTRhOGY3MGJkODU0ZWE0YzE4OQotZWE2OTM5MDk2YjU2MTY4YWViOTcxYWFhZmUxYmNhNjY3MTM3YTc2NzYxY2JhMmZiZmZjZWFmZTNlOThkNTU5MAotZGIzZGJjNDRiM2Y5ZDRlZjA0MTljYWUyMzA4Njg5OGJiMjVhMjIyZWVhMTljMWE3NjAzODk2NzI5MzNlYTdjMgotOGIzMTAyNTYxOWJkMTA4Yjc5ZDUxZDU0ZTIzZjQwMWY0MjE2NWYwZDUxM2JiMjQwOWNlNjZiYTNlODNmYzAwMAotNDM3Mjg3M2ViOGI0NDA1YThmNWJkODhjYzJmMjFkMmQ2MGZhNDAyNDcwNzg2OWM1ZmQ0MGQ5NDAyOGVkMTNiMgotNTc2MmNjNzkyNGQxMDBkM2NlMGRkMzJjZmNhMTI0ZWMxZmNlNGNjZThjMTM3MDcwYTE4ZjA1Y2Q3MzgwOTQ0OQotYmNkZWIwYWMyNGRjZjYzNjc5ZDQ2YWE4YjNhNGE1ZDBkYmZhOTM0MjcxNjYxOWNkMzY4M2RmYTdhOWQ2NjgzZQotNWE3YTAzZGRiNDc4MzNmZGZmODkzNWYyZjAwNGY1OGVkZTY0NDdhZGNlNGZkYTFiNzM0Yzc1YzUyZDE2YzQwNgotOTQyOGNkZjY4ODU1OTQ2MDE0NTg0ZjdmZTQ5YjAzZjg5NmUwMDU0Y2ZmZmY1ZGE0NzI4YmY0Y2UxZDg5MjA1MgotNzAxYjQ4YjgxZjU4ZjVlYTM0NGU4ZWJmZTEzYmFhNzBjYjQzY2U0YTk3OWQ4MjI1ZWQ3ODQxNzY0ODY3MmU2MQotMDdlYjdiMzFmODFjZjUyYjQxMzYyODgyMDBlNjQwNjU0ZTgzNTM0ZWFkZjA1MzAxZmFmMmYzYTg1OTc3MmMzYQotNTQ1ZmMyMDQyOTExOWZmMDBjMjU5YWE1ODJhZjRlM2NkZTFjOTk3NjlmNGU0MzNkOWIxNzhlZGNlY2YxNDJhZAotZmZhYTZkYTAwNGE5MGY1M2U3MDA0OGFhOGQxNWEyNmJmY2Y3YjAyZWQ3MGJjMjYyZDE2NWU5OWY4N2NhNzQyNAotMGViOThmM2Q3ZmMwZDQ5MjZhZTQzYzhkMzIyYmI5ZWNhMjRhNGM0NWY3ZGJiMGZlYWE5YTkwMGUzNTIxZDZiMwotODdiNTJhMzBhY2IyOWM5MTRiMDY3OTNmMTlhMWVmYmUzYmU3ZDBiOGUyMGNhZDk5ZDI5MmMzMTViMTIzNzZkNQotNjU1MTIxMTg5YTgzMzEzMjcxNTc2MmNhNzExODY4NTgxNGY3MWFhYTA4Yjg5ZTQ2NmM3NDY4YmNhMDFiZDk4YgotNjNlYzdjYzNhYzQxZGQwNmM1YmJkYTg2MjI3YWZjYzFmNzc5NmI1Zjg3ODk0NmMxMzViZmE3NWE5OGRiMWI1NwotMGYzOGM0OTc3MGFlMjM5ODZmZmFlZGJmNjY0NGRmNThhMjUyYzI5YWM4MjFmNDU4NGI5NmI1ZGRhZmE5YjNhMQotYWEwZWY2ZDE3ZmMxZTc1OTE2NzUzYmM4Yzc5OTQ5N2UxMjc5ZWM3ODNlYTg2ZGYzMDdjZDU0YjU4YzJiM2ViYgotZmQ3MjIwMDZkMTI3ODM0YjA4OTY3MGU1ZjFlN2JhOGJjNGEwZjYxODFiYjRlZmJiOGY5OWU0NDc1MTgxNDQ5ZgotMmZjYjI1NWRhNDIzM2Y3YWIwOTdlZjAxMDhiYTNmYzEyY2RhMDYxODg3MGVhY2I5ZmU0MTk1ZGZhYjE4MjI0MgotYmFlMDk1NmQwOWUzODhkMTBkYTJmOTQwMTg2ZTI1Yzk5MjY4ODZlOTgwNmM3MDEwNWRjNzUyNTlmYjFlNWRhMgotNjc1ZTRlMTE0Zjg0ODYyZTZiODIyYTEwYTlkMzY0YjFjZDEzZGNhM2QzODViODM0OTljNzE1ZWNkNzU5ODc2NgotYjIxNTkxMGYwMDIzNThkNTkyZmMzNmQwYmQ0ODJlZTljYzMzODM3OGVhMTU2NjgzOTUyNmE1NzgzZjI1MDgxOAotMDc4Yjk3ZDczYjFkNjJhMWFhZDNkNWE5NzUzYmZlZjIzZjdiM2U2ZDViZDMxOGM0NjNhYTA0NDkwYjkwNjNhMAotZTgzZTNlNjgxMDliMTgyNzIwZDJiMWMxM2I0OThmOGY0OTU2NjFjMGY0ZTY0NTViOTZhNmE5MmZmODA2ZjFjYgotM2IxYzZlYWM4MmQ5YTY4N2I4M2M1NzJjNDJkZjIyYmVhZTMxZDEyMzk3MTkxODZmMTRlZjYzN2ZlNGU3YzdiMQotZmU4ZjRmMWJkODM2N2Q3NmQ0NjdiZTk1YzM5NGE4MTgxOThkOTIyYmNhZWVlZTM3MWZlMTdlMzk2YjI3Y2VjNQotZjA1NTQ3Nzg1ODdmYzdkNzhhY2RmMzE3YThlZmRmYzgyYzJmNTdiNjQxMWIzYWI2OGY5NmUzZTdjZDMyMWE2ZAotNDc4MzQzNTA1NmFiNWEwMDk1NzI2NDM1YmU2ODg1YmYyNzg0ZmIyY2JlZmZjMGY4MjQ4ZGNkNTk0ZDM0YjIxYwotOThlNjdkZTUwYjY4NzZjM2Q2ZDRkNGNhN2NlMGI5MDEzZWJlNzU0YjEwNGRjZmMwNzE5YTEwY2RkOTk4NWUxOQotMmNkZjRlODg4NzZjMmRkNGU3OWUyM2FmYTcwYWI1YjQ3NThhZjMyZWU4N2I4NDE1Yjg4MWFjMTVjNWMzZTFiYwotZDE3YTViOTYxZWZiM2E4ZGM5ODdkZWRlZDZmMjhhMjQwZDY2ZjAwNGFkMDVjZTFjNTUxZTI5YjQ1NjY4ZGIyYgotMzA1YzliMWFmNWNkNTM4OGEwODAyZDgwZjE4ZTBmNGJjODA2NWJhZjM5M2ZmYWI5YTRkNjc0MzEyYzIwMzNkMgotN2M3OGI1ZTk0NjFmYjA5YjliMmNhYWFiNzBjZWIzYWZhNTc0Yzg5YmM2MjAzMjgyMTFjODU2NTZmNjNhOGRkZAotOTdjODI3Mjk3MzI3Yjc5ODBjMmZlMGFjYjFjMzQ4NjZhYTNjNWQ3NDA4ZTI1N2ViYTNjNTNkZTgzMzhiZGY5NgotY2I3YmE1NWZlMzFiZGRiZjc4MDcxNDhjMGExMzJiZGJiZThhMmMyMWEyM2UxMTg4OWRhMTNlNDI5OTE0ZjdmNQotNzEzMjkzNjM1OWEwY2M2NWU1OTkzY2FmNTI5MDJmNzZmNzVkNmNiNDZkZDIwYTNjMGJlODBkNDVmMmM3NDZiZgotMjM2NzMzNDYyMDgwZmJkYzhjNWMxZGJlOTc4MWY0NWFiYTc0YWY4MDMzYTZlZjJiZGIxNmY3YjA5MzBkNmI2ZQotN2NhN2ZhYzhjZmIyZGZhYjhjMDYzZDk2MTA3NzU4NWQyNGU4ZmJiNWUwYjBiZWU5YzQ1MDliMjMzNjFkZDA2YQotZGQyNTc2NzgzM2I5YTc3MDc4MGIzMTFmNjA4Y2FlN2FkZGUwMDAyOTdhMjY3MjIxMWYwZGU4Y2Y3ZjVmYmM2MgotNzhmYWJhMjVkMDM1ZmUzYTdjYzNhNDc0M2MwZWZlMWM0YTVlOWNhZGYxZTA1YmM3OTgyNjQ4ZDVjOWZiMjk5MgotNGE5ZWUxNTcwYmEyYWIwNjhjY2UxNjg1NTIyOTkzNjFkNjJhMmJjMmMwZGE0OGVlOTRkMWNlZGYxZTJkMjliYgotNDM4NjRhYjViNzcwYTE0Yzk4YTQzMmFiNzZjMTc5OTg5MDRmMDUyYTUwZWY4NDUxMDA1MzNiYTVjZmIyNGM4NAotZGE1MzU4MWVjNGYyMjAxY2E5ZmRhZTc2ZWYzNjU1MTUxODhhY2U0Y2ZjOTM5YWQ2ZDE5MzQxM2NhN2VlMjI1YgotMDEzN2Y0NjM3ZjA5OTUyMjEzYmU3MjVjYzdhZWM1NzliMmZlODVmN2M2YWYxOGQ3MGM0ZmRhMDU1NzU2N2U2NAotZDQzMGYwOWFjYTdiZjI4OTg0OTc3YmEwZjU4NDlhNWE4NjcyOWQ1NjQwYmJlNGMzMGIxN2FiMDMyNjJhMDJiZAotOGVlMDc3ZWFkN2ZkYWVmZDM3YWYxNjAwN2Q4MzcxNGFjYTA3ZmNmODgyYWRjNDc5MjU4M2FhYmIyNzk1NzlkZgotNjc0MWY2MzdjZGY4NTk4ZmI1ODI3NTI4NzcxNDQ0YjBhYTgyZGQ1ZTAwZTcwZWRlZmE3NDA1YTFkOGE3Nzk3YgotZWYwMjFhNTNiYTY4YzdmZjY3ODBjOTRmMTM5M2QxNzQ1YWIxZmQ3YzcyOGM2MTEyNzY2YTNjMmUyMWRmZjAwMgotOWU0NWE1YzU2NjhmOGIwODRmMjJjZDZhNmNmYjA1NmNmMGY0MDJhNzNiMmMwMjExODI1OTM1MmVmZjZkNjgwYgotODc3Y2UzMDI0YzM3ZDUzMmMxODZmM2Q0YTk3NjAzNzA0Y2MwZGRiMjVjYWMwMGFlYjRjZjYwMWY2ZmI0NTY1NQotODkzOWFiOTYyY2I5ZTE2YTI0MDA5MzhkMjI2MDU2NTM1ZWJlNTcwN2NmMGE4Njc4YjU0ZTZlM2ExMDNiMmVmZgotMGJiNzMwNmQ3YzdjM2Y1MjNiMmFlYzI2N2E1ZjFlM2Y5OTIwOGQ4ZWM5YWIyN2Q2NThjMjZmNjM1YzI5ODRhYgotNWE0ZDIxNDc2OGM2ZGM3NzViY2M2MTY4MzgxNTlhYTEwZDViZDkzY2ZjOGIyZDgzNmVhZTVlZDQ4MGZiNmRkYgotMjQyNTNhNjJhMWI3OThiZmE1MWIwNjhiNjg4OGI3NmQyMjMzYjZmYjExNzk0ZjE2NjI1NGNiM2FjOGNmYjY1MAotNDI5ODY2ZGJlYjhkMDllNmQwMzg4OTg5OWE0ZThiZmM5YTg1NWVhNDY2MGY5MjhkMGFhZTgyNDdlZWMxNjY4YwotOGU3OTgzOThkNTNlNTJhNTY4NGNhYTU5YzQ3Y2IzOGM4ZjEwMDlhOGFhMTJhMjY5YTU4NzU5Mzg3NGMyZGM3OAotMGJhOTg5MDc4OTEwZjNkNzAyMTExNDc3NTFlOWY3MjY0ZDZlNjRmMWIwNTQxMGVkMzQyN2JiN2QwNzA0NDQzZQotZjJiYWViMGZiOWUzZjFjMWMxNGIxNzhlNzE2ZmViNDY0NDI0MDQ0N2EzZjAyMjExMzUwZTM2ZTFhNTg2YTA0MgotOWFiMzM2YzZiNDRjMGQyOTc3Mjk0ZTcwNGU4Njk1YjZkYWYwNzliY2EwMzNiNmJkMzQ4NWViN2E3ODU4MmZiOQotMzczNzE2MTM2YzYzZWFkYmFiM2EyNTc3NzM4ZjU1M2Y4MTEzNTgyOWY5MTE4ZjRiZmUyMGNkNTExOTBiZDdjNQotMTcwMzVlYmU5N2YyNmIwYjU4OTczZWE5YjVlMGQxMTFkOWVhY2YyZmE1NGIyMjNjNGY0MGMxMzlhYjg5MWE0MQotYzdkNWJhNTMzOGJmZDU4MDkwZWE3MjdjM2ZkOWQwYzAyMTdjMDU3OTg3ODc4ODFkMDdjZWZlMDE5NTE4Y2NkZAotYTdhZDcyMzA1ZjA2YTk4NzE3Y2RhODBjNWRhYWFmYzUwZTNjNmQ3OGQyYjVkODUxYmVlYzQ2NzMxYTZjMjllZAotZGRjYjkwODlkZTVjYzJkZGI2OTZkM2I3ZGUzYjY3ZjA2NjUyN2FlMjJjYzFhZTYyODVkZDFhZDQyZTA4MDllZQotNjU4MTIyNjhkMjhlNzEwNTg1OTI2MmU5MzY4YTNhYTdmZDAyMDdkNDdkZTVlYTU1OTE5MjdmNWU1NjgzODZkMwotYTYxZmNiZTg3Mjk0NWEyNzJjNzUzODRiZTFlODViMjZhYTA5NDcwNDcxNWYxOTU3ZGUzN2EyZmRlMjU3N2JhMwotODUwMDBkMDcwOGZjOTE4ZDUyMzYwY2RhODI4Y2VkZDE3Y2I3ZDYyNTE1NWNlYjY5MzFhMjkwMjViNDRlYzhmYwotMzY3OGZhMDgwMjdiMjBmYjk2NDlkMDdmMDE0ODRmMmZkMmUxNzQ2ZjI5MGUzMjQzNGZjZDRkMTVhY2YwNzA4YgotZWUzZmU5OTQ4ZDNhZTE0MTc0OWI0NzgxMDU1OGQ3MWQ1OTI3MzVjMWM4NmVlMzc1YmU3NDEzYjJjZjQ2MjY2MAotMGIxMTVjZDA0M2VkZTU2MTJhYjg5NWNlZTA5MDlkYThkMTY1NDA4Y2Q1YzRjMzQxMTRlZTRkN2ZhYjRjMzdiNgotYTMxY2I4MjljNGJhYjJkZDA0YjFhNzA5N2RlYzI0YzY0MjljMTM0ODI2NjcxMTY1MjJmOTRlZGM5OWRlNTUxYwotYTY5MzM2MmJlNGQyNzdlMTI4MjliYzQ2NmUxM2QwOTg0MWI1ZDlhZjUwNGJlNGVhNTllOWMyNDU5ZWVhNWFjMgotYzY3OGUzZmEzMGNkZmM1YWI4NTVkNTZjMWFkODM3NGY5NzY5YTZiNTc1YTFkZWU1YWFhYWI0ZjcxNmRjZWJlMAotMGZhYjhiMGI1NTIyMjk0Y2UzMTY0Zjg0NDY2NzlmY2M3YWZmNWJmNDkwNjJjZWE1OGY1YzY2MWE4OTVhZTc1MwotODg5MTUzNjA2NmY4NDE2ZmY1ZTM1N2ZjMzRjYzM0ZDZiNjhhYmUyZmIyYzU0MGE3MTIzYmJmOTBkMjY3MWY2NQotOTA1MTViOTZjZGQxYmQyYzEzOTZiYzE1NTAzY2FhNGNjZDNjZTI4ZTAzNjE4MDFiZGM1ZGE5ODg4N2IyYzM5ZAotYjg0YTBhNGRlNzg1OWM3ZGEzOTRhY2M0OTc2NDFlY2UxMmFkOGE3ZDYyYWM1ZjhlNmJkYTA1NzdmZTY0ZDU4MQotMzUzOTBhMzdhMTU3MGNiMjViMjNiNzQ3YjIzNmYzZjI2MDZhM2ZmNmU0ODdhNzgwNjlhMDY4ZTdhZjEzYThlOQotMzE1MDE2ZWJiMjU1MmY2NDQwNjU0MDhhNjlmMWJiNmZlZDUwNDg2YjJhMDVkNDAzY2Q1NmVjNWQzNjcxYzljZQotMDkxOTk1ZDM4NDQ5MWI2NWVlYWYzMzA3ODUyOTIzODM0MmMzMmE0YjgxNzg4YzMxZTYyYmEwNjE0YmFmY2Y5YwotM2MxY2Q0MjJjNjA1NzQwYTg5Mzk0ODdlMjZiYjkyMzNkNGNkZTY4YWZlN2EwY2FkYzNhZWNkNzM5YzljNDI1ZAotMDljYjUwYjRiNGJlMjgxMTViYTdmYzU5YjU0MTUxM2NkNmZkMDgwMzljZjQwYTFmNWI5MGE4YmQxMjYzODA2ZgotZWMzNWFhYTQxMDBlY2MwNTQxNmVjZTJmMDYxY2ZkYmMzMjFjZjMzMjRmMWVkYTkxOTc2Y2FiYjhkMmQ5YWNjOQotYjkzYzU3NWMzNjNmYTY5MWUxODIxNTMxMTQzMTg0MWRlODE4N2EyMGQ2NjY0MzQ4YzdhOGFkYjA2ZTg2N2QwMgotMDdiZDQ4ZmU4MDY3MTY4YzQ0MTJmYzgwY2RiYTYyZjhiOTIwOWY1NDA3NjcwYTI2ZGIxZjdmNWQ2N2M0ZDIyNwotOTBiY2QwZjFlODY0MGU1ZjkyODhjNDEwNDg3MjkwODA4Yjg4Zjk0MjFkNTA2Mzg2YWM5NWNkOTU5ZmQxZWQwNwotNzc4ZGUyZjYyOTU4ZmY0MDlkMzczMzJhYTRiYTg4YzczNWYyYTU2ZTRlNzQ2ZWU5OGI5NjY3MDcyODc0YjIxYQotNWY5ODIyNWFlZWNhYmY1Y2M4MThmM2ZhNTRlZGRlMTc4YjQwYTFiMWQ2ZTJmOTAwMzY1ZTJiNTAzMzQ2YjIxMwotZGRiNDNhMjY5YzVhOTczZDMwM2RiZjYxNWFjM2NhYWJmYzM5ZmUyMTQ0NjgxZTdjZDYzMzA1NmJjNzdkOTVhOQotMTZmNTQyOTE1NzVhZmY3YTNhNGMxM2VjYTYxYThkMjYxYjNhNzQzMDdhYWMzOGI1MGMwZTU1MjIyNjI2ZTcxNwotZGI2ZTEyMjU0N2IzYjhhNzY2ZmI4NzdkZWVlYTUyZWNlMmU3NGJhMDJjYTc2NzZmMGUwMzdjZmZhZjI4NzM0MAotYzE5YmJmZDkzNzhkOGU4OTgyMjVlZGEzZmJmODE0YWQ1MWY5NzYyNDFhNzI4NWRiY2M2MjYxMGZlOTk4ZWJjOQotN2RjNTk2MWFmOWQ3MGE2Nzg2ZTg5MjJlNzkzMmE1MzlmMTYwNjEwMTQ0MGM2ODU1ZjIyODRlYjM0YTg5NWNhZQotNDQ2MzdiNmEwYjFjNjM4NmMyMWYxMWYyZTdlZTJhZGYwMTJlYTZmZjM1MzE0OTgxMjI2NTA1YmQ0YjBlYTI1ZAotMzcxYmU5ZmI2ZmMwNDI1ZDhmMzc0Y2M1MWZjYjE1NjAwZmY3YTQ5YTQxMDRiYzI5YTM2OWM4MzM2NDM4YmQ0YQotNDViN2M4ZmQ1MjU3N2E0OWFjZGIzOTRjYmJjMTZjODQ0YWQ5OWY4NWI1YWYxZTgwMTg5MDBkNTA4NjJkN2M3YgotMDQ1ZWU0YmY3OTcyZWIwNWFhNTY5NmEwMDRmM2VjOWJlOTVjNGMxNDE4MGM3YzgwOThhM2EwNDQzYzBkZmFhZAotOTFlOWMzYTM3NTA5YjI5MDY2YWYxMTJkYjc3MTA3YjlkYWYyZTQ1ZTcyZGNkNzg2NjBkNWQ1NjAxOGNkZjFlNAotY2E3ODc1OTNjMzFhMmQ2ZWY5MjVlMzdlNGVlNzdlNjg3ZTE0OWJmNTA2NjY0OTc1Y2NiZjVmZGMyMGI1YzMwNgotOTg0MjA4ZmZiOWVjMmY3OWU3NmE3YTAyOWNmNTk4MWZkMmQwNzE3NjA4M2Q3ZmEwZDlmYTdiMWU2YzZkYTlmZQotNDIzYmYyOTAxMTQ3OGJhMzlmYmRjN2U3N2JhMjMwZWU3Yjg5NzI4YzkzMTI2MDJkZGEzNTlmMWVlNjViYTM2MgotZDFmMzY2NTc5NDMyNTVkNjJmMGM4NGZlOGE2MzAyMDRhOGU2NGQ4Zjk0MGU5ZGRhZjNjMmRkYzE2ZmQxMzFjNwotZjMwMmEyZjlmYjY1ZWNjY2FkNDYxNjk3N2IyZWM3MjRmYzZhNGMzOTQxNzk2MmUwZGUxZGNmYTY5YWVjOGEwMgotMDcxNzkyNjY5MzViNjU1ZDIwYWYzZDQ1MjI4YWMzNzk2ZmQyYjdiNmUwNTgwOTA0YTI3ZmUwYzgwMjNmNGZhMAotZmQ3MGU0NjllNWYzMDk2OTBjNmFiNzM3ZTllMGRkMWRiNTdmYjMxMjM2MmI2NGZmMTk1NTQwMTM5NWI0MjA4NgotMDdlN2Y5NDQ5YTg5NTMxNDlmMzI0YjRkNTc4NWMyYTBhNGMyOGViNDg3ZmQwYmZkNjU0NjJhMWE0YTc0MWJlMQotYjE4NzYzMzA5MTJlZGVmY2FjZTFkZmFjZWE3NjI4ZDE2YTQ3MTZkMzk4OWUxYjMxODMwY2JjMmJmOWZjZTE0NAotOWYwZTgwYmRjYmNmY2Y0NzdhMmMzMGE3MmVjMjI3YjIwYTBhZjE2ZmNiODM1NmJjMjA1ZjE4YzYwODhjMWQ2ZAotYzU3OWYxZGNkMjNmZmExNDdkNzI4MjFiN2E2M2ZjMDExZDU3MThmZWQ0MWIxNmVhMWQ4M2VjZDhkMmFkZTI4OQotNTRlYWExMDVmODJmNzc3YjY2MzVjMTYwZDBlM2Q2N2ZiZmYyMDgwZGIyYTk5ZDQ4OWEwNzBkODY1YzM5YWM5ZAotMmE4OGFiNWZiY2UwMTA5MTllZGMwYWIyMTNhMDkwMzhmYWM2ZDNjODFhNDk3MmUzYzU2ODNmNDk0ODBmYTVmZQotYjhjZDMyNzkzOTgwMjhkYWI2M2VmN2U4ZTFkZjg1YTYzZjkzMjczZjE4N2Y4Zjg2MTljMTRhYjgyNGM5N2MzYwotNzBkMDZmYmMwYTFiNGJlMWIyYjdmMTFlZjQ2OWFkZWY3MTYxN2IzMDRiNTFjNDYyYWIzYzZjMGU4MzFjOWFkMwotY2I4MGM1ZTBkMGZhZmQwNzlkN2Y0ZjI0NWQ1NDJlYTg5MmM2ZmUzYzNkNmQxYWMyYzkyMzcxYjdhMzNhYWI1YQotYWI4Mzc1YjRjYWU5NjYxYzlkMzE0OTk5MDkzYjJhMDRlYTFjYjY3MWM5ZjA3ZWNlZmJhNjE1ZTAyM2NiMGY3MgotYjZlZWQyMzFhZDMxYjFmNGQwM2U4MDdlNTZjMWUxNjYzOTg2ZWVkNjVlM2VlNDdhMmRkMTFjMTIxMTIzNjk3MwotNGI0NjA3YTY1NzBmNTM0ZGViYzcyYWMwNmRiYjIxNDlmOWVmYjc5M2E5MTdiM2I2MDQyNzFmYjc2NGZhYjg3MQotZjdhYTVhNWZjYzU0NTMzOTUxNDU0ZmU3YWZhMjljZGRlZjk2ZTk1MWFhYTliOGVlYjNmOWI0MThiZDEzMjk3NAotYzYwMWI2ZmEyOTQ3MWRjMzQ4MTRmYzgxYTFlMWE1MTU1OTUxYzEyMDIyYWFkY2U1ODI2MzAyMjIwYjE4ZGZjMwotZDMwYjIyNzdkMDhlN2NjN2E4N2JmMWI4ZWM0NTA3YjQzY2VmYjExNzExOWQ4NmRlM2JlNTFiZjg3MDM5MGVhMwotZDhkYWEzZjc0Y2NkMzcxMmQxYzAwMjYxZTg1M2RjMzA3OGRkNDExMTg5ODcyYTUwZDg1ZDU4Y2VlOGZmZmIxZgotMDI4ODAyOTQ5MDQxMmYzZTU4ZjgzZGFkYTA4ZmE2OTViMThlZmQwYTRmMjg5NzA1Mzg1YTQxMWZjYjJkN2E0NwotZmZlMzg5NzdmY2UxODE4OGMwMDQzYzQ0OGQyN2UxNjBlZTc1MmJlMGQ0NGQwZjgzYjZiZjY0MmM2OTRhYTUzMAotZTIyM2FlZmEzZmRiMTdlZTdhZWFiYTc1YjlhODZkN2NiMGY1MGFkNGQ1Y2U2OGQ0ZWQ0OGNiMGMxODhmOWRjNAotMzQ1NDhiNDg0MDMwNzhmNjMwNzliY2U4NTI5ZjkxMGFiMjgwZWJjYWU3ZGY5ZjgyNGRjYTc1NmY5ZDY0N2RjNAotZDQyZGE0MTIyMzBhNjIzMTMwN2U3NDk1NDI0Zjk4YzlmMTI5Y2M0YTMyNmEzZGQ4ZTQ3NmUxOGQ2NjZmOTRmZQotNTNlZGM4N2U0N2Y2ZDg0YWJiNjQzZmYzYjQwODQ0MzdkYTI2YjRhMjk4ZjgxOWY0YjY4MjNlZGRhYzExYmM4NQotYjlmNWM1ZDBhYTFlN2IwZGRjYTgyYzhlMDE5NDRiM2VhNDg5NzhjMWI4ZjRmZjQ3Nzc5YTU1MjNmNjAwZDMzYgotODk2YjY1OWMzMWY0ZjZmN2RlY2JhZTBmZTFmODNkZGUxOGY3N2Y1M2RiMTQwYTM2YjBmNmY0Yjg4M2ViY2JiMgotYjZkMzUzYmYyY2E2MTAyMTczYjZkZmJhMGY0NTJkMDExZjZjZjdkNjYxYTQ3MGMzYzVkZDE4OWMxZTgzZmM0YgotOTM3MmVkNjdlZjRlZDlhNWI5OGY4NWM4ZDczZDQ5MDEzM2I3MzYyYWI5NzZhMzg1Y2VjNzA1YTJlYjg5ZDdmMwotMmZiZDYwYzA4Yjg2YTMwMjE5YWEyOTg4Zjc5ZTYzODYwNjJiZTgzOWMxZjlkMzBhZmZkZTgyY2FkZTM0OTRlZQotMTMwNDE3NTVlNzZjYzA3Y2NiM2E0YTcwMTQ2MTI5MGI1Yjc5NzI4ZWRkZmM2M2IyZWQ1Y2Q0YmJlMGM0YzM2NQotNzU0ODhkNTkwMjU4Y2UyMDg0Zjg5OGQ3YzU4YjNmNjViMDlkZWEyZjhkNGY3MWU4MGIyYTJmOGYzMWQ1ZmNlZgotN2E3NzQ0YjY0ZDdiYWE3MDFlNDczYjg1YzY1ODE0YjBhOTNlM2ZmYmQ3YjJhZjg1ZTAwZmZiZmFiOWJiNzc2NgotZjQ0NDcwOWE0NzkwMmM5MTliZDJhNGJlY2RjZTA3YjY0MDUzYWVhMTA1OGUyNjAyNGI0NjE1M2Q2YmI5MmMwYgotNTk4NjFiMmRkYWYzZDM4ZGJlYTViZmVkY2M0OTkzOGViOTgxODhhM2M0ZGNlZWZhMWYzMDg1NTlmNzcxMmNjZgotMjg4MjE5YzZhM2Q0ZWVmYjgxYTJjNWYxNTQ5OTBmZDhmMDk3MTNhMDUzMTAxN2Q3NGI0N2UxZjk3YWE2ZjBmMwotOTJjZTViYjc0NzVjNjc2MjQ3ZDU3YmIxNGZmNjc2ZjExYTRiNWI1NjRhYzI2YmZhOWQ4NWM5Y2IwNDE0ZmFmYgotYzM1YjQ2ZWFjZjc0ZGQ5NjRmYmRkYWIyOGZkN2JiMzA0YjliZjRlMTJjZDE1YjNiYmIxNjNkZDY2ZTg5ZjI0ZQotNjQ4NWM2ZWE2MzM2NWQyOTkwN2Y2YmE5NmQzMTNmOWIyYWI3ZDE3NWQ1NDlmNDIzNTY1M2VmOTc5YTVjNjNjYgotNmVlNTBjYzMzMzM4N2EwZWQ4OGQzMGQ5ZmQyMTk3ZDMxYTA4OTRlZDBhNDdiMTVkOTJkY2E0NjNhOGM4NGIzYQotOTg2ZDM5NmU2NTMwYjJlOWJhMTI3YmI1NjYyY2E5NDhhOGYwYzU2M2I5Yzg2ODY0NGI4ZDAxMDY0ZGI2YWE3MgotMDkwZGRhMDUyMWU2ZDc3ODE5MmE4YzZkNGQ0NjM5ZTgwZTMwOTE5NGNiNzZmYzVkNDYxNWYzOTZkZDg1YjA2ZgotNzFkZmM3ZjM5YTI1OWUzMjJjNWU3ZDI4NjQ2MzEwZWFjOTJlNWY2YWZkZDYwNzFiMjFlNjY2NGUxY2RkMzg0OAotYzg2NGNlMGUzODBmZGM0OGIyNTFkNTJiNTA5NGVhZDY0ZDM4MGI2ODE4ZTJjOGIxYTRlYjhmOWMxOGFkZGU2ZAotNmU0Y2UxZGVmMmFlOGYyNjQ5ZjFlNWFhYTA1NzIwYTM1OGE3NGUxODE1NjhhMTBiNTM2ZjY4YjdhMDI5Mjc4NwotMTJjMzRhY2ZhNWJiYWZjNGFhM2VhYTRkOGViYjI2ZTIwYmIwMGQyMjhiNGVhYzRhMTYzZTBiNzI4OTk4NzRhMwotZjg1ZTgyYzM5NmQ5ZTI4OTFkOGUwZDZlNTU3MWQ0ZWYxMTY4NzljZDJmNTQ4NWRkZTRiOWQ0MGY2MzhhM2E5NQotZGU1ZGRkMTRhZGJlNzJmNWJiYWRmMGQ5OTUwYTE5NWY2NGZkMzIwOWM2ZDQ3YjQ2Yjc3MDhmODU1ZGE5NmNiNQotZTllMTI2MGY2Njk5ZDk0NWE2MTFhN2VhMzQ4ZGIzYzg2YmU0YjMyZmMyNjg3ZjE1YzRjODY5NTcwMThkNDI4ZAotZjYyNDRhMWZiNmE5OTEyMmJmODlkN2FkZDAxYzgwZjJiMmJiMmM3MTY4YjAyYzQwMGJmYzk4ZDY1Mzk0OTQ4ZAotYzczNjc0MWY5ZTAyNDRmZTA5NjU3MWYwODdjNWQ2ZDdkMDIyYzcyNmE0Y2VjZjM3Y2YyZGRlYjFlOWQ3NzA5OAotNjBjNWQ0MzEyMWJjMmU0YjcyYTJkODk1YTVhZDJmNDQ5MTk2YWVmZThjMDE3ODQzMjNkZTM4MDQzNjNiODhjOQotMWM4NjEyNGY0MzFlNmRkMDc0NGMzZDA3M2ZmZjRiYmMyYjk4YmRlZjcxM2JkZWZjMmRhNGUwZTIyZWRhNzZkMAotMzQ0MjRjZTEzNTI5YmMwNGMwNzhkZmJmOGIzZWZkOTZjZjY2MmM0ZTE1MWYxNWQ0ZjhlYTUyNjQxNjg5ZDRhMAotNWY3YzllYzRlZmE1MTE5ZGI5ZTNhNjFlNGE2NjljMjkzNDhhMWU3MTM4MmMwOTM0OTljZDM1ZDdkMTIyN2E1ZgotNWJjM2RiOTY4MjNjMTY3MTAwMDc0YzcwMDQwYTU1MTQyMTQ4MTk2NTY3YzIwYzdlZWNiYjI1ZWQ2ZTMxZjU2MwotOWFkZDI0ZDUyYWNlZWE0Yjg4MTE0ZWI2ZGJhOTQ2MWMyZTUyNjJmYjk1MjllOWY2ZjBiZGUyMGQzZTIwOWE4ZgotMGM5ZmQ4MWI5OWIwMGQyNjhmNzY0NTkzYmFhODk0ZjdhZTUwNjM0NzY2YzkyMmY3NTFlZDE4M2FhY2FlYzAzZAotYjdkOTZkMDEyY2QwZDExMTkwNDI0NWJlOTUzN2VkYjBmODc2OWFkMWE4YWJiZDhkMWNiYmU1ZTc5YzUzYzAwZAotOTgzYzY5ZDg4NjVlOTNiNjQ5NWEyZjE1YWQ5YWIxZGE3NTAzYmQ1Yjg1ZWJlMjdhYmEwMWY3MWU1NjQ4MmJlOQotZDQzNDJhYzI1NjJkOGU2ZDFlNDE0NjQ0NzU2MWVmNTA2OGQxNzMwNmQ2NmE1MmZhNDE2NDQ4OTdhOWIxNjFjOAotNWRkNDE2MWFhM2Q5NTZlNzk2MWFhODAyMDQ2N2U3NmE4MzNlMDFjOTc0ZTMyYWEyYjhjZjI3ZDYyZmM4MWVlNAotZDc0NjQ5YmY5NTMwMzA2NDgxZjQzMGE1MzlhOTVkY2MyNTAyZjcxMjk0N2Y2YTY4ZGRhMDA1ODllZjQwNDEzMgotMWRiYzhiOTRhZmQ4MjdiYmQ1Zjc3ODIwMzUzZmRkZWM1ZDk4ZmRkMjU2ZTg1ODU4MTA1NDc4OTc4MWFiMDkwYQotODE2ZTY1YWQzZGM0YTY4YjRlZjIzNTZlN2NkMmY5MDZhODU5ZGFkNjgwZDY0OTQ1N2JhZTE1OWY5MTgwNWQ1MgotZmI2ZGNmYTVkMGFjNjM3M2ZhODMyNWE4MTc1NjNiYzllZDg5YTE3ZDhjZGVlOWI3NTE2ZjM4OTA4ZTQyNmYwNQotMTUxN2VlYzc5NDFjYmFkYjIyMzkwZTNlMmUxN2Q2MmNhNjdmMzdkMDEzNzdjNWExZTA5YmVmNWI3OTViNDQ0NgotNTRiMzgzMTkzMzUxZTA1ZWQ4YmJkOGIwYjEzOGNmNjJhNDI4Yzc4NzQ0NTgyZWVjOTBhNDFjM2JkNDRhNGU3MwotYzliMzJlYTQ5MzZjMjExMjY5YmE1Zjg4M2Q0NWIxNjY4MWY4YWZhMDY0NmE0MDMxZWY2OWNmNDkzNjMwNTMzNgotNTc1OGY1MDUzNGU2OTc0MzQyZjRkMjMyYjUwMjRkYmEwZWIyOTdlM2FhM2U5ZWYwOTM1YmQ0Nzk5ODM3MDQyMAotZWFkODQ0YzdlMzM2Mjg4MzU2NzE1Y2ViOGNiODQ5MmVjZGM4ZmQ4ZjExODMzNjBmYTMyODUwMDUxNDQyZjRkNwotYzAyNTBkNjU4YzYzM2RlMjEwNDhmNDY3NmExODc1ZGY2YThhNjFmMGZjN2MyNWRkNWFjZDAyMjA3OThjYTcwZQotZjA5YTcyYjE5NTk1MTcyYWZiOTA4NWI5YTU5NzFhZDFiOWEzYTI1MDg4ODRhM2JjZTg4Yzk4NGY1ODM4OTYyMAotOTU1ODQ4NjZjNTlmODkxMjBjN2Y0OTFjZGUzNWI5ZDE3OWYxMWRiMGQzYzMwMzcwMTM4ODUyMDUwY2YxNGIxOAotYzA2ZGFkYzIxODMzNWJiNDY1ZGQ4ODMwNGYxYzFjZDExMDYyY2E3MjY0OTQ5MWZkYzYyZDU3MWMwODJjYzgxNgotMjYxNDQ0OTA2ZDM5OTc2MDE1OWY2YjFlNmRmNGI0MmE3YTg0NzUwYWE2MWMwMzRiMTFhNmU3ZWRkY2RlYjU0ZAotZTFmNTE1MTA0MmE4ZTlmNmEyM2E4MWEyMzVmYmMzOTA4YTg1YTZiMDVkODE2MmJiZGYzYTY3MjcxNWI2ZmNjZQotNTU0ZTk4ZGYxZjQ1ODNlMDNlNDU2NDY5ODkwZjA3ZjgzYmMwYTg5NTRmYzVlZGM3ODk4ZjIxZjY5MTdkMzBmYQotMzZmYWVlOThmNjIyZWYzMTNjYzg0MzE5MzFkODNkMjcxY2VmODgwZGJhMDdiODMyYTAxMzg0OTk0ZTk2NDIzMwotZjJlMjlkZTMwNWMzODYzMTkxZjg3N2RmYmE0NDIxNGRhNjhiZGJmYmRlMWUzYjhiOTY1OWQ3ODAwZGY1YmQxOQotMjhiYjE0MjVhNTFhYmMzMTdlZmRkYTA5ZDI5ZTA0ZWM4YjE3YmQzYjc4MDg1NTk1MTIwYjU4ZmI0MjE5MTZjNgotYWY0YjkyNzc2ZWY4YTgyMTFjYzM3NmEzNzU2NjQyMmJmMmUyYTg0MGJlNTdhMzU3YWI5YjlhZGFhMjA2MDBkNQotYzQ5ZjIyOGQyZjdiYjYwNmZjZmE4NjczNDI4ODRmY2Q0MjZhNzJjYTRjNWQwOTYxMmJiZTI2YTJkOWQzYzhmZQotMTVhNTVlMDk1YjY3MDVmMmEyZjJhMDBjOWYxY2JhZTE2YjkxZTEzNzk4Yjk2ZDVhZTY2YjVhOGQxY2Q3NTFjYwotOTc0N2JkOTUxYTU1ZWMzZmNjMTFmNThmOGFmYjQwOTEzMTY2YWI2MGEwMWI2OTc1MDdmZTA3NTNkMDg1ZTVhOAotODE1M2NmY2JiNzBlMjliNzA3M2FiMzNmN2JlMmI2YmQwNzBlZDk3NGQwY2ZlNGQ0MWY3ZjU3ZjA1Y2VmMzhjNAotMjUxYWE4MjZlNGExZDM3NDU5MjEyYzFiNDExYjZiNTFmYWE1NjRkYTBmZjQ4ZWU2NDAyYjNjOWZiNzdkNTAyZgotNjFmZWViMzI2MDJkYTJiNWZhODgwYzUzN2Y2MGUxMzk0NTcxMzkyYzNmYmE0ZDExMGZmNDdhNDJkOTIzYzE1MwotZjdhODNiYzFmZmU2N2NkMTFmZjFhNzYzOTUwZjJkN2I2ZDk1NzVmNDU1NjJjM2E5ZGU2ZDRlYmY1OTQ4MmQ3YQotNzE2ZjM5ZWNhOTdmZDY4YmU3MWFhNzM5ODdkNTcwY2UyZGRmOTUzYzZlYzk3Y2JiNzZiMTQ3Y2ViODk3MzU2NAotN2VlMTU5NDM0ZTNhZjY1ODhmNDdmZjk3MjJiN2U5MGY0ZDlmZDBjNWI5ZTlmM2ExNGY5YmZiYTYwY2E2NTU2YgotMDQ3M2RjMDczYTk2MTczMWQzMjIxNjE1MDBlMTVhZGEzNzNkNTAzNTUyYzBiNzZmYzY1NzYwODhlNjMwY2YyOQotYjliMGM4MmNiMzQ4MjU5ZWRkNDgyNTIwYTg0OTY1YTUzY2Q2NzMxMzhhYTU3YzMyZTQxZmNmNTBmZTI0YTQ0NwotNGVkMjM0MDFmNDNmNTIwNmRlN2ZiM2I2ZDE3NTAyMjMxMTU5MTlkODViNTRlYWU4Mjk4YTE5MjEyZTVjNjZlMAotYzA1YzZkZDdkN2Y4ZGQ4NzcxMjMyMDViN2UzOTFhMTg5ZTExZmMzMGZkYzY1MzJmY2E4Nzc3MDk4NWIzNTdhNAotZmJmOWM1ZDI2MWE0Yzk5OGUyZmU4ZWI5NmUyN2RhYzlkYWYxZDNmMGVjNzQyMmE4NWQ5YzdiMjQxODU3MjA5YwotZjM3MmMwM2MxMTAwZDhlYmYzY2U0YWIzYzBlZmMxZjk3OWM1OTk5YmFjNmQ0YWJiNmFiYWIxZDA1OWM1M2Y3ZQotMzRmOTcyZjU2ZGYzMjliZGI4NDg1ZTM5Y2M5OGNiZjIwY2NiNzBhMmEzY2ZkYWQ0ZGViMzI2NzU3OGIwMmYwYgotMDM0MGY0MmJhYzc0OTQ2NTk1MTE5OGQyZWEyYmY3OTk1ODUyYTUwYjU4NzY1OTdlNTVlMWExOTc3YjllMmYwYgotOGE4ZmIwZjAzODM5ZGNmNmJkNTU0MjgyNzIwOGQ0NDNlZDRiOWMwMTQ1ZTQ1MjIyNzRhMDJlNDQyMGY3MzhlNwotOTYyYzZkOWZlZTE3NTIwZWNmNmQ2NzcyZTVlNzdkNmVkMzk1MzA0Njk5ZGQ2NWQ3YTYxMGQ3OTNlMzhjZTNkYwotZTQ2MTg0M2Q1YWYxZTI3YmVkNTY1MmJiODRkNWU4NTYyMmI0OGJlYzcyZTE2MjJhYjExNTA2YWRlNzAyY2IyZQotOGNhM2ZmYjhhZGQ1YzI0NzAyMDdiZWQ3NGYyYjM0ZmFmOGNiNjFkZDVlMGJmNTRmMmI4ZTFjN2VhMWZlZTgxZQotMGUwYTE2NzQ3NDQzNjMwYjA0OTkwZWUxYmU5ZGI1NzY0YTU4MDIyMmIyNzMzMjA3MmU3NGE2MGFiN2I3ODlkYQotYWVlNzQxZWI1MzhlM2FjN2UzOGIzMzNjN2Y2ZGFkY2FkNWI5MzgzYWI0MzMzNTk4NjJkY2IzMGJhNTNhNDEzYgotNWU5OTQ3ZWI2MzdlNzhlZWRjNGI4YjE3Y2VjNmI4MmY0Y2I4ZDJkNzFhMzc5MjFlNjlkNDI4NzIzODIzZWM5NQotMGY2ODNhNmJmYjU1ZDIyZGZiMTYxZTFkNmI2ZGI0OWRhY2VjZTZlNDNhZDJjNTFhNzBlNjM0MmE4NTE2OWZkZQotZjgwNjBkN2RhN2UyMGI0ZGIxNzZiYjg2MmMyOTc0OTA3N2Q3MTA0YmNiMzEzZTVjODg2YTAxY2IxNmYxMWY2MgotOTg0YzVmODUzNTE2YzE0MTlkZjkyOWQyOWVhZjQ0OTBhM2FlYmQyNDM1OGVhYzAwNmE1OTRhZmNiODM5Nzc4ZgotZDA5MjVlMmRhYWJlNzRjN2RkY2NlOWE0ZjQ1NDYzM2I1MmI0NDVmZWE5OTEwNWZiMDY5OTQ4NTk1NmZjNzM3ZgotMjU2MjVkNTNkY2YwYjllMjM4NmJiZjA5MDBlMGUwMTFlOGFkZmUxNjJkNTg3NmE4NTBhNjUwNzUxMjY5MGQyZAotZDFmMDA5OTJmNGRiYmNhMmM2M2NkNzBiMTZkY2UxNWQxYzEyOGI5ZDY4ODFmM2Y3ZmZlYjY4ZDcxNzRhZTc2OQotM2I2ZjVlMDI1MjNjN2YwNDZkZTI5NGUxODI1NWI2ODlkMmVmNTI5ZTZkZmU0ODk5NTZhZmM5MDkyODRhNGQ0MwotYjBjYTFkOWY4YjliZTRlNGRhNTM1NTIyY2Q5YjZlNjQ4NDFjODExMzhlZTM1OGVmNjc2OGU3Zjc4YWY4MDMzYQotNjg4NTQ1N2RhNmJhNDJjYjRiZGQ0ZjM1MjMzYjhlNWFjMDJiN2Q4ZmJmMjA5MmJiOGNlODkwZGVjYjZlOTljYQotMTUyZDJhYTU2YzVhYjQxNzliYTc5MzZjNzRkZDZjMzQyYTM5MjEzMWZiOTZjMTRjM2IyNGQ5ZjBlNGQ4YjFjYgotODYyZWE1ZTdiMTNlMjA0YzkxNGJmOTVmNTVmZjMyZTQzMDhmZTViMjk0OWZhNDU0NTYwZThkZWM0NzRlZjUyYgotNjViYmJlZDAxN2Q1ZWFlZDBkODlhM2M4NmZjNjNiZjAxZDNhNmExMGE1ZmUzODliMWFmMDEzZWJjYmZmMmExNwotN2Y2ZTg1NGRmZWM1ZGJmMTlkNGU5NzdhMDdhNDIyODdhMmRiZDQyYTc4ZTU4OWEwMDJjY2E0N2ViODY1YmQ1ZQotNjAxYTk4YmIzYTg1NzJmMjBlZjFjMGEyYjM1MDBmNjE1YjFiOGY5YjA0MjE1ZjkxYWNlYzQ1NDMxMmVjMWRjZQotMDhmNDEzYjllMmRkZGRjZmQyYmQ4NTEyNWRjNWEwNDNhNDVjMGI5ZDNjODZhYzMwYjIxZjM0Y2FlMmQzNDdhMQotZTkzNTg2ZWI5NWZkZDNkMWRiNzE1N2IyMWI3ZWQxNzAyZDMxODc2YTFjZmNlNThkNjE5YTY2ZGY4Y2NjMzExNgotMzE5ODU0YTU3OTY1ZmUyM2QyZDJkN2UwMmY0ZDk1ZDgxMGU4YTEzZDI5ODcyMjc0ZmE2ZjQ4YjczMzNiNzQzYwotN2FmNDE4YzFmZGFmNDY3YWNkNTQ4M2E0N2M1ZTk5YTdiZDgxZTE4ZWY5ODc2M2VjYzA4ODIwMTc2YTEwOTE0NQotYWYxODM4NzBmYWYxNzFhM2MyNGY2MDM2NTQ4OTZlMmQxYjBhYzYyMjRjZmM3NjViZjc0N2UxOTRjZDE4Yzc0MAotNmM2MWZkMTBiNmI3ZGNlOWMwYTY1NzdhODdhZTg0MGU4OGY5OWNiZjFjMWQ2Y2M4MzYyM2QyZmU4MGJkNzEwYwotZWM3OTI1NmY4OWYyNmI0NWY3NTI4MWQzZGU5NjM2YTEzNGY2M2UyNDRkZjRhNjIzYzYzYTg5NWZlNjZlMTQ2NAotMTk1OTY1NWYyMzViZDA1NmQ2NWUzYTUwZjU1YTA0MTQ0NzU5NDQyMmVlZmZhY2NlNmFmN2NjOTc2OGY3MjE1OAotMThlZDQwOGU0NzM1OGFkNDVmY2UyMGU0ODQ4Y2MzOGY3MDk0Mzc1NWU5MjMzYWM3MTFlNjYzZjJjN2Q3N2I0NgotYzg3OGU3MDY2OWFkMzBlZDE4YjZmODMyZTRkN2Y1NGEyM2M4MzdlZDQ0MGFlOTc4ODMzNDhhMGI1ZmU5NTIzMgotNzc5MTg3ZTQyOWI2Zjg1NWVkN2NmZmNjYzhkNjc4NGQ4YmNkOTI1NDhlMzI1N2FjODcyMzFjMzZmMTE5ZGRmYgotZjI4YWI4ZGM4YjI1M2ExZmEwOWYwMTY4ODdmYzI5YjY2NTliNDBiZjNkZDlkYjZlYWQ4YzhjM2U1MDRiMTBmOAotMzdkYWM4MmE4MTZlMDY3MjIzOTc4NjdkZjMyZmEyNWRhMDcxM2U5MmVkZTllNGQ0MTU3N2VmNThhYzcwYjQwMgotYTQ0MjdhN2M4NmY3YzFkN2YzNzhiNjJkYjQzY2E0YmMzYTg2NjlmNmU5MjRkNzE5ZjE4Nzk5ZDFhOWU1OTY5ZAotNzZiZGU0ZmM5NzYwNzRmMmQ2MjM3MjFkMzhlM2Y1YzczNDI4ZDY4MjQwNDlkZWE5NDE2YTQ1MGJlMDJkY2I1NQotOTA4ZTM3ZmFmNGE1NmEzNjUxOTMxMWRkYjNkMWNiNjY4MzdjMjk2NGEyZGQwZDM0YTIzZGRlNDNlYjMwYzg4ZAotYjZlYTU0MTk1NmI5MDRkYjkxMWQwMDlmMGIyMDliZmRjMTM5ZjQ4ODc4YzgxMWVjMzhhMjE2OTJmOWI4NjZjMAotYTU5ZDlkNzM2ZDQyOWRlMGRiNGIwNTI2NDYzZDAzNDgxNTcwMTlhMjYyYjJjM2UwYmY1NDA5NWQwNjExMDU5MwotMzY0NmZjZDI0MTM0ZDZiM2EyYTkwNmE4OTExODc2OTI5NjdlOTNmNjlhNTRmZjNhYjgwNTA0MTg1ODVlZDFmNQotOTgyMmIxMzRmODg0MTU4OWZlMTQ2ZDA1YWIwMGM4ZTIyNjUxYzQzNzIzMjE2YzA1Mzg1MWE1ZDFmOWJkZmFmOAotNTljNTU1MjNhY2YxZTM5NGQyNzUwMGExY2RkNTUxYzc3M2M5YTZkN2IzODgyZjMxZjI5YzI4MWZiNmM2MjUwZAotOGExYzNjOGRkMTEwYzE5MTAwMTRkYTZmZDFkNTdiOGFlMTAyYjI2MWZiNjVhMzAxOWJkNzVlODFjY2ViZGUzZgotM2UyMzc2NGU5YTVkYmU2NDBjYTk4NTg1ZGEyYTRhZjlkZTVhNTA0NTU5OGE5MDVlZTdiODJiYmFhYmRkMGQ5MgotYmI1MzUxZDNhMGIzMDcxZTg2NjZmY2U0NTIwMmFmNjAwMDc5MGMxYzFkMGE1YmYwYzQ2MjNiOTgxNWI4ZDNiNwotN2MzOTk3MGE1MDlkYjZhNGEwZmZhY2UzOGE2MGUyZGNjYWI3ZjViN2FkMWMwZjQyYTc0ZGExNjE0NzU4OWEyZAotM2RhZGRlOWJiMWE2M2E0MDQ3ZWEyMGRkZTExMDlmODg1NmJiODExODRmNDI1Njk5NGI1MDA1ZDY1NGU0OTA4NgotN2JiODM5NmZjOGQ4MDdlYmRlZmJiNzRlOTg5NGJmMGVjNzkzNjk5ZjBlNjgyNjM4ODU1ODFhMTdjODdkNzA4MgotMzcxZDNkNDg4NGI1MGUxMjk1YzUxN2ZjNTZiOTFlYmI2YjRjMjNiMTUwZDU0MmNkMDc2ODkyNDIzMmE1YWMwMAotOGE5OGY1Y2U5YWRjOGRkM2U2NWYwODViMzU2NDA5MTk3NjcyMzdkMGY5NzAzY2JkNjkxYTk4N2EwYWEwNDQ0YQotNWVhMGQ4ODc4Mzc0ODJhNzI0ODg2NWNkNzhiNmY2NjUzMDFjYjY3Y2NlYjFmNjg5MTk4ODIxMjI3YzFhY2Q4MQotM2QwYTUwNjc0ODMyYmQzM2IyNjcyNzU2ZDUxODZjODk1MjgxODBlMTkwZDE1MjVjM2U4MDZjYWRkYzFlNDE1NwotNDYwNTU5MTBjZWU0ZjYwZjQwYjEwNjVmNDM1YmU4YTM5ZWI0NTRkODhmNWJjNDViYTgxOGU1YjAwNmU1YTM4ZAotMjk5NzRmNjhlZTE5NjI0NDhmN2E5ZmQ4M2M3ZjEwN2M3Nzg4ZWI4OTc1ZGVkZWU3NTlhMmJiY2E0MGM4MTFiOQotZDg1N2NmOGU1MTAzNzZkNDhhYmQ2MDU2N2YzMDdkNmVjNDcxZjk5YjAzY2M3YjVlODE0MGRjMDQ1MGFmMzgzMgotMjQyYTM1MzUxNWI1YjM0Nzc3NGYzMmI4YjZjMDMzYWRjNDNiMmJmNzE4NTQ4MGU0N2M4NjgzMDhmMzkwNmJlZQotZTQ0MTMxYjExYjJiMTRlNzdmMzM2ODYzMDc4NDIzMzdjZDFmOTY5NTQ5MWJiYmRmMjcxYjUzNDVjNDRkNmE3NQotNThjNTlkNmQ1YmY4YjI0YWYzODI0ODM2ODY0NGUzMzFhODhjZjczZDBlYmE5ZGZhNmY4MGYxMWFmMDI5M2JiOAotNDBkOTc1NTU0MGFmZDE4ZmIwM2UwYjI2YjY0MzIyNzc0MzQxNjYxMjNkODAwNDQ4MDhmNmYxMTE1Y2E1NWI4NwotNjBmODI1MjBlYjgxMTY2ZjgzNjNiMTUwYmFjN2Y0NTk4M2QxZjRlYTBiNTAzZmE4ZDA0MTI2MWUyZmQxNGNhYQotYzdkYjhlNWIxYmRiMDRhNjVjYmI2NjA1MjZkOGIyMWVlZmY2ODEwNTQ4NjQ3NDgwM2FjYzk2ZTdiODgyYmM5ZgotNWExZDVmMWUzMzNiMmIyYWFjZjQyNzJhMDVhNDFhZWEwNGIyYzE4YTgyYjFjNjZhNDA3NTNhMzY5MGFlZjA4OQotYjlmZTgzZGQwZDg2ZmI3YjcwNDVmMDQxYjY5MDkyOGI3YjJiNjcxNjJhMWY1NTY0MTE3NjUyZmE3ODk5YTQ0NAotYmNjYzIzMTE4OWM2MGNlYjcyYWJiNDAzOGQ3ZDBhYjVhMDI3YmVhN2VlNzU1NDI0MTZiMTJhMTZlZTAwOTAwYwotZGI5NGIyYzg5YjIzNDVkMjA5Y2Q2ODMwN2UxMDFjZDA2ZGJiNzllNzZjNzI1ZGM3MTgwYmVjY2EwZWFiOWY4YwotYWUxNzE0YzU3YmVlN2U3ZjU0Yzg0ZTdhMmFiOWEyYjFkZGQ0ZDE2MGNiNDgyNWI2OWMxYmY1ZWUyNmIxODM5MQotYWNkNmZhYjNmODkwZDhjYmZmNWJhMzY2NmI4ZDc4NTM2NTJkYTJiZDVkYjc5YWQ4ZGUzNThlNTVhNWUwMjI3MAotZTFhMmQwOWFkZmVkNzUwODhhNzE1OTNmZjBmNTRkNWM1Mjc1MThjYzc2NzU4NGU0MzgwYjhmY2U1OGIwNGNhMgotMDVhNjllZTI4MGRhNjU1MTY5MDI5YTE2YTNkZjNiODZmYzRhYjYzNTMwMDM5Nzc2N2M3ZDllYzNiM2ZiZDYwYQotYmJmNTFhZDRhM2NiMzQ4NTM5ZmI5YjdlYjA3MmVjZTlhZmIyYjNjMDBlMmI5MWJiNDBhODJkMmRkZmE1OGU5ZAotZjQwNjk5MDM4YzlhN2JmOTMwYTgzOTk2YWZlOTU4MGM1MzM4NDA1MTA4YWMwNGZkNzEzYmIyMmNhMjAyNDQ3NQotZjU0MGZlMTQyOTBhYjE4MThkOWJiMTk0ODNhYmEyZjM5YTk1OGVhNDE3ZWM3Mzc5MjIzM2FiNTM4Y2I3MGUwYQotNDU1YzZiN2UwYmM4NmVhYjFkZjczZWVjMWUxNmE2Zjk1Y2QyM2I4ZjY5NWZkMmI5MTlkZDI4MmJkMTEyOWJhYQotOTNmYjY4MDgwZDkwYzI5Nzc2YmYyN2ZhNDJkYzA3MjFlMzgwZWNmODgyODY0ODQ0MTc2NjRlNDFjNWIyNTdjYQotYmQ0ODM1YzFkNjQzMTg1MDdkZTVkYzJmMTA2MDY0NGIyYjEyNWYxN2FmZjFiOTVhMzdiOWI2Njc5MDZkNDhjMAotOWZhN2Q4NzVkNTljYjZmN2ZlZjJlMzdlYzQxODU0MGY4ZjEzYzJkNzBjYmU5NTY2Mjk5ZGZiODBjMDZkZjk5ZQotYjA0NWRkM2JhZWZkODdiMjQzMTY3MDBmYTFjOWY3MjE1N2I5MjcwNTJjZGEzZmQyYjQ4MGRmNzUwMjk4ZDY0NQotN2M0MTJjYTM5ZjYzMjVkNjZjNzdiZTM4YmQ4ZTQ5MWQ4ZjcxMGM1ZjkxZjQzMmUxM2Y4OTA1Njk0MDAyOTUzMgotZGIwNjUzMjk3ODI1NzliNzlkOWY2YmE2MDU1MmRiZDZhMzAyZTYyOGY3NWUwZDM1ODJkMjVlYjAzZTdkZWIzMwotNTQ3OTBiMDI1MjE1NTNlYjBjMjg2Y2I0MTVjZGUyMjViNWQ2NWNiNzlkYjA2MGQxM2FmZTg2MmQ1ODg1YjU2NwotMjQzMDQ4MTYyMDQ3NWY1MDU0NmFjNzgyMzcwZTNlYTFjOTU2MDBhNTI0ZDI4OGI1ZDQwMjhiZTdjZmJlYTg1NQotNTI4OTUzZTYwNzcyMWI3NDg4ZjdkN2Y5ZGQ1YWQxNDMzMmIzMmJiZWY3MjI0MDAzNmEzZTE2NDZmZTU0MThhNwotMWZkMjA2YWQzZmM3NWI3ZGNkOTgxM2NhZjVkMjlkZGJiMTJkN2ZmOTRlMzdiY2NkNzJiYTEwODZkYzQzMWI1YgotNzEzZWQxNGFiN2U5ZjFiZmY3ZGRkZmE5YmYyMjYyNGU0Y2FmM2NjMGQ0MTk0ZjBiNmEzNmIxYzY3ZTQzZjExNwotNGJiMjMwNTRlZDAxMjA5ZDI4YmM1NTIyNDAyODY0OGE0YTMwNzNkNTY4MzVhZmE5ZTAwNGZiOTk5MzcyZjI5YQotZDc2ZGI2NjNjMmEyOWI1NjM4NTY3MDU4OTA0YTQ5MzNiZTg4ZTc1Y2ExZjM2NTczOWE2NWMyN2JkYzE5NWU3ZQotMDljZmIyNDI2ZmE4MjljYTM4NTkzMDZiNTU2ZDFiZmFkYjVkOTQ5M2M2NmUzNGRkN2Y2MzU4M2U0NTMyYTA3NQotNTMyY2VlMmQ4OTc2Zjc4NWQ3OTA5MDkzNzg3ZThhYTVmYzc5MTJjYThmYTg5ZDM0NjYzNGVmNzFmOThjOWZhMwotY2RmZDkzMWNjYzY5OWNhYTMxNGM0MDJlYmNkNmJiY2ZjZDNlZjdlZGUxOWU2YzhiNWVhOWJiZTczYWUzNWI3MgotZTIxNDk3NGIyYmJiMjZhMTE1NzUwMzI3ZDIwNzMyYjZmNjc5NWMyNWU0YzBiMWE2M2I1MDU0MzgzZDQyOGQyYgotODVhYzFmNzE5Y2UzNWExOGRlNmY0NzUzY2I2MTVhZWM2MjEyYTI3MmQ4OWIzNzUwODYzNTM2ZmNmNWY3OTFkYgotM2I3YjM5YTY2ZWJiZTlmYjE4NzZiYjA4OWVjMmNiYTA5MmQyOTFhYWM4OGYwOWM3MjBhYWM0ZGQ4ZmRjMjJkNgotNDM2N2M0YzUzMzBkNGUwZWQ3ZDQ1NDcyOGFmMmI0ODAxNjE4ZWRhZGE0ZmEzZTUzNTdmYjkxNDU4ZGMxMzI4OAotNzY1MDQwMWJiY2ExNmQ3M2JlYThjZDUxMjc3OTdmOTJjOGI1MzE0NjYzZTAyY2VmYWJkMWVkZDg5ZTQ0ODZiYQotNGQzNzExMzhlYTZhMDdjZTM1OGQzMWJjOWVjYWU2NGY0MDk1NDZlOTEwMWZmZjdlYzcxMGI0NWY5MTA1MTBhYQotYjUxZWIyMzc0OTkyMDA5YTI4MjYyYTM3MGQ0MjEwOWEwYWE1ZWJiYzE2ZDJlYzVkNThlMGE1ZTdlNmY4MGEwMgotNWNmOGE1ODFmM2JiZjk4NzUyZWRmNjRmZWJhNTg1ZmJlYjU2YjI3YTc5Mzg0YTIyYzg2ODY5M2MwNTA4NDQyMwotZjdjZDM5NmNiNDhlNjhmNzZiYWI2NTEyZjc2ZGEyNzcyZjNkMTM3ODgxZWJhZjFkM2NhNmUxYzk4ZDU0NzMyYQotZmMyNGJmZTI5ZWZjZDcwM2M0ODlkZDhkY2M2OWRhNGI4NmI1NjUwNzg4YmZlYWI4YmY2NmM1YzFkZjc2OTdhZgotYWIzM2QwYzE0Y2FmMTZiOTgxMGVhNzRjMzJjY2I1YmJhYzI2MTNjNmEzZDk0NjQzNmNjZjkzNGEyMGI4MWNmZQotNWU3MTI3NjVkMTk4M2JkNzdjYzQ1NjEyYTMxYzg5M2E1NTgzMjM4Yzk0NGY5MWYyZDZkMTA2OTM4NjYyMTEwOAotMTA4YjBlNjViNGY2ZDc2YmZkMGUxMTU4MDA1ZThiYTUzYWI0OGU4NjVlOWY2ZDA3ODM1ZDRlOWUxMjRiMDFiNgotNDFiYWFhNmNmZjQxM2U3ZWY4ZWVkNzNmMWNjY2FlZjU1YTg3ZDcxYWZiMzA5YmExNjJkM2UxNWRkYTZmMDRkYQotMmRlOGRiNTgzYmVhYmFjMWU1NjgwZGY0M2JjMDYzMDk1ZGUwNDNiMmFkNGM4NjAwZWY2M2E4MDkwYjY0Nzg1ZQotNTI4ODg5MmI2M2E4N2Q4YzgwNWQxMDAwYjY1MjQxMDlhNDFlMDVlNTE3ZTA3ZjBhNzY0NjYxMjU2NTBiM2Q5NwotMDA4MDU3ZGUzZDMzODBiMGMzNTJlNzBhYzA0ZmNjMjExMDhlNjE5YTcwN2ZiZjdmNTk4NjljYzlhMmQ1NzFjOQotZjc3MTE0MjUwYzFjNDFkY2Q1MjczMjNlZGIyZmI4ODNkYWJmMzcxZGNjZjQyMzg5YTI2MGZiZjUzNDY0YmQyNAotZDVhZTViZTQ4MTYzZjE0MjczM2IyMDVlMTEwZDc3ZGU1Y2MwNzExN2Q3ZDZkMzQ3Y2M4YjAzNWZhMzg3YjI0OQotZmRlM2JlZWVhYzg0M2M4OWJiYjg3MTExNGY1MzEzNDM3YTc4NGMwNTFlMDIxZGE0ZjgwYWRiMmQ1ZTM5MmYwZQotNDYwNjhkZjY3ZjQ2YWZlY2EwNTIzNzhkOTc1OTdmMjFjMzlkYjZhMmNhN2MxMGM1NzQyMTQ5OWRhOGQ1YmRlYwotMTI4MTA5NDMyZjg2YTBjZTYzY2EyYmU3ZmQ2NGUyOWU4MzkyYmRkMDAxM2Q0OTkwODg0ZjdjZjQ5ZTdiODhhZAotODQ2YWYzOWEzYWExZWMzYzg1ZjIxZGIwNzk1MmQxYjQ1Y2ZjMjBkNjg0ODUzNmI2M2QyNTcyZjQ0ZmY3MThhZAotYzJjZmFjYWYzOTVjYzY0YjM0MjkwYmYxOWExOWQ3NTZiMzgxNDJjNmE3NDcxYWI0MzZjNmI4MWFiZWQ4NmZiZgotODU1M2RkOGQ1YTA1MmY0ZDUzZDYxMjRlYTRkZGYyMzVmNGE3OTJmOGFhNDg1ZmIwNjhkMzljNjgyZWRhMzdjMwotMmZjYzU4ZGE1MWY3NGMyNGJhYzhkYjVjZjgyNTQwN2Y4OGRhYmE3OGY0MWQ4YmEwNzhmY2ViMDIzNmMyZGVmZgotZTYxY2MwYWJiZGJlYzNiZmEwOTliNDljZDEyMThkYmZmODVjYzcwNTczMGVhNTQ1Y2RmZjQ0MjFlZTVhNTM1NQotOWNjZWEyY2Y2MjU3Yjc1N2U0YzZiODUzYTQ3NmYwYzk3ZWNlODBhNDFmZWU0OTk0YjA1ZWVjNTc1Zjg3YmJhNgotOTA2NmVjZWIyOGFjOTJlMWY0NDgzZjg3NDRlZGUwNmEwNWVhMDM4NTY1MDk2NDU4Nzg1NDUzYjI0NjJkMTAzZgotMzAwYWZmMzc4M2Y3YTJlZTFhMjdjYjIyM2U3MTQ1YjZiNzRmYjVhOTVhNTQ0NWI1ODAwZDBiN2U0NDUxYmU4MwotOGE3Njc5ZTNhMjljOWJkNzliZTBjZTkwMGY4Y2VkZTRmNWZiZmNmNDZiNjM1NDI2ODA4N2JiMDIwOTE0ZjI0NgotZmUwNmQxOGNjN2U5Y2IxMDAzYmM5NmZiNTk2MTA0M2Q5MTljOTI5OGU2MWRjNWM3Y2IzOTg4NmU2NTkzOWZjOQotMDM3ZTA0ODRiNjJkMWVlMzU4NDJiM2RkYjg3OWE3ZmUxNzVmMDc0NTFjNDQ1NjM2MWJiNjQ2ZTVkZDg3YWQ2ZAotZGVkODM4OGZhNzg4MDZmOGM5OTNiZjE2ZjUzOWE0NTI2NTAzZDhiYWY4M2QxZjBhNTk0ZGI3ZmIxYTExZTdkYQotZDJmOWRiOThjNWQ4MjA2ZWE0YTQ0ZWQxMzRkNzg0YjA1YWMwY2EyNDViMmE1YWRiZDkzZWZhNGE1NjZlOTNjNAotODRmYWM3ZWYwYWQ0NjI1NDEwMWIzMDhkYzRlMzljNTQ5OTQyYWY4NWM5NmE1ZGQzMWU1ZDlhOTkxNDlmNDlmZgotOTljZmM1NzgzZDJjZjljMzIwNjQwYTUwMjliYmQ2MWM4NmQ0YTZhZTlmZWU2OTBjNWFjNWU5MmQ2YjA3YWVhMAotMzFjNjExMGRmNDFlNjNiZDcwMzlkNmJhOGVhOWVmMzNiZWIzY2RiNDE1ZjQ0OTcyNDU2MDY5NjNkYTYwMTk0YQotODM4MzY2M2JhM2YzYmUyZDZlMGI0ODY1ZGRkZGI0ODRmNjI1YmViNTdlYWRmYzY5NDEyNWVlMzU0ODBlZmFkZAotNzAyNDgwMzdiZjQwMTg3ZjU0Y2I1M2E1MWZkMGE5MTZkMGIxYTU0MzExZjQzY2IzOTg1NmI1ZTRlMTdkZGYwZQotNTQ0NjZhZDM0Y2RiZWQ4ZmVlMTdjODdmMDBiZmU0ODMyZWVhMmFjYWY5ZTkzYWE1MDkxYjYyZmViZmJhOWIwMQotNTk2MDYxOGQ3MTM1YWQ1NDZjZjRkMDBjOGM3MjVjNmRhNjk3NDA2ODkxYjc1MzYxYzgxY2ZjMmQxM2EwMzgzNgotOGYyYmMwNDU0OTVhMWQyNDYyODYwNjk5MGYzNTFiNmY2ZjE5N2VjN2I1MjE2OTQ5NWJjMDA0NzMzNWM0YTNkNgotMWE3YWFhNjNmYmExYWNhNzMwYmExZmE5MGNhMDRhMGZhYjI3YjE0NWIyZGQwYjRjMDNmMDFjNzliYjc3NzU4YgotZmE2MzBkMDJhNTIwMGM0ODQ5OTk2NGZkYWM3MDVkMWY2YjBhYWRkYzU4YjQ3YTM1MDc3ZjVlZTJmYmNhYjk1NwotOTE5ZTViZjYxNGExNDY4MjA3NTkyYmZjMzZiZGQ2MmVhOTM4OTE0MjM1MGQwODM1MjQzZjQ4NWM5OWE0OWVlMAotYjZmY2UzM2U5ZjFjYTU4NmY3MDRkMjdjNTk2MjEyMDZhYmU3MGFjMzE2MDhjYTY3YTUxMmRkNjBmMDc1MTBjYwotZTBhYjc3MTVmM2E2NjJmODI0YTAxMWVjNDdlNjBmODQ2NjRlNDc0YTI1NTcxMmFhZDBiYmIxYzdjMTQ4OGE0OQotMGE3NTQ0N2U5ZmVhYmE0NTFmY2QxMTA2ZDdkYTUzNWFkODI3NTc0OTQ2MjBhMTk1YjJmMGIxNjIyYzYyMzUxZAotODliNjJmNGY5YmI4MTJmZWQyNTY5NTI5MjhkODY0MTQ3MTc2ZmYwZTAzYmRkMmJhNzU5NzdjYmQwYjVlYzM3MQotNDQ3OGM0N2Q5NzYwMTI4MDU2NmQ5MzcyNDNhMGM4YjBiMzM0NTA3NzM4OTdlZDU1MzViZWE2ZDdlYWZkNTQxMwotNWM0YTQ5NzZlZTAxNTNmNGViOTEzYWVkOGExNDk3Yjc0M2U1ZTFhY2U2MjU5MzZiM2RhNzQxMTliNDliYjUzNgotMWE2ZmVmYzBlYjk1OTM5NGJkNzQ1Y2VhOTE5YjFlNjJjOGNhYzc3NzU0YzU5YjcyNWEyNmM2MDZhN2M1YjNjMQotNDVmYTNlMjRlNWZkOTZlMjMwNDk3YTAxNzhmMjFjZGQ1M2M3MzNhNmJmMjk2MDU4NzlmNjFjZDRiN2FkMTExNwotMTQxMmIwM2VmNDJlNGY4MjYxZGYxNTQ0MTM4OTU4YjNlOTZhYzQ1ZTNhNDVjMWJiZDBhNmQzZjFmYzRkZjA1NwotZDAwMTNiZDNkZWE4NjE0NTNlNTRlYjQ3MjExMjRlZTI3N2ZhMGVlZDFiZGI2Y2EzN2UzMGRmZjA0ZTkxYjg4ZgotMzA4ZWRkNDNjYjdkZDdlOTcyMmU1N2RjYzdmMzYzMzIwOTUwNTQwOWExZjk4YTEzMzg3NDg5NWUwMGIzMmMwMQotODViYWVmZGIwYjRlOTdmNzU0ODhlYTBmNzY0MjRkOTE5NmEyNDM3ZmM5ZjY3ZmUyOTMzZmYzNDIzMjc2OGVhYwotNzIyYTg0YTdmYzUyZmRmM2FkMjQ4YzY5ZmQ3ZDRjNDVmYzMzZmZjNmEwNGI1NjJjZTM2N2Q5NmIwM2MwZmY4ZAotNzUxNzRkYmRjMDliZGIzNWE5ZjQ4NDBhNmFkYzU1NWY0MmQyMGJmNWUyZDNkYTM0YTk5MWY2MzY0OGViZTg2ZgotM2UxNTU1MTRhZmI4MmMxYjNlMzdmY2RjZjhjNTk0YWNmNjVmZGZjZjU5NjVmNDJjYjM1NTQzZmZiMWExZTQwZgotNjIyZTZlZDIwYjQ5NzlhMzc4MzVjZjA4ZTQwYjhiY2IwMTVkYjhlYjFhMDQ0ZGNlZDhmNmJmNjM2MGQwZmEyMAotZTY1NmQ5MGVmYmY0NjFkYTQ1MTg1MmY1ODQzOWRiOTI4MWY2MGVkZjVkZTRhZjAxNmY4NzE1ZWVlODNlYjY2NgotZDQ4Nzg0ZDM5NzY0ZTMzMDA4ZTVkOTE5NWVmNjI0MzlmM2FmMWI5ODliZDk1MmZlMGEwZDMwYTg1NzA4YmIxYgotYTM1M2VmZDY1OTRhM2NhMjAxMTE1YjM2NTlkYzFhODA2MTlmMTU1YzY2NDlmOTQ0ZGZhM2U1NDM5NzFmOGRkMgotYjBhMzBhZmU3NzY1OGFiODJlNjMwYmNkNGZjYzMzYWY4ODEwZGExMzYwNzMwMDU1MjU1YWFjYzc3ZmJlMDlkZAotOWIxM2Q0NGE0MWUwYTFkMzc4OWQ5NGJkNzg0OTRhMzNhZTYwYjlhZDcyOTBlNGQxZWQ2OTI0ODIwMTQwZTJhOAotYWU1MTM3ZmU3YzI1NzBhZjEyNDI2M2I5OWQxMWVjZTQ1Y2Y4MGE2ZTExZjU2ZGM2ZDc3ZTUwZmFiNTA2MDhmYQotMDllYjE1MjBmMjJlYzE2NTcxZTkyYTE5M2YxNjk5ZjgxZTM1MmJjZDllMGM4MzhhOGMxZDViZmU4MGQ3Njk1NwotNzEyOWM5YzQ2ZmRhNzIzNWRjYzM0ZjYwNDE3MWE3NWYwNjlmOWUwMGFkZjU2ZTg0YWIxZjc0ZjA5M2JiNjk5NQotNzQzZjllMDI3ZmM0ZDllNmJjZDY0N2IyZWM3ZjBkN2FmMmUyZWZkMmRiYmI2OGM4M2NlYjFjNzYwZmE3MWVkNQotMDM5NGQzODk2M2ZkY2JmMzg5MTkzNGE0Y2JkYWI4MDEwNzc3OGE2M2YxMTAxMDE3YmVjZDIzM2JhMGMyZTYwMgotZTkwNzVjNWU1MDlmMmFjZTdiN2Q1YzM0NmRmYjU4ZDBiYTNlMDA1ZTM4ZWE3NDI4ZGZkMDEwMGI3ZTFmZGRiMgotN2ZlOGNjYTk2YjA0ZjliMzQ5NjkzYWNiYTkwNGQ0NGUxNDNlMDNlODJkMTYxNThiZWIzNmRmYTIxZjU3YTAzOQotZDZiYjliZGQxYTc4N2ZiOWRmOTY4MDA0Mzg4Zjg2NTVlOWQ4YjZmNDM1MTE3ODM2YmM5MTA2OTdhYTE3MzdkMAotNTVjNzNmY2YyM2Y4YjU2YjU4YjA5MTk1YjdjYmZmNTc0YTI0MThiMWFiOWY3NGRjNjA3MDY2ZmNiNzk4Yjg4MAotNWZiMGQ3NjFjZDVjY2E1MWY5ZmYwZDJlNjdjYWJkYjAyNmYyYTliMjkyZmE0NzJiOTdhYjg5YWY2MGNiYTk3NAotNzFmZGVmMTQxN2IxNGU2ZmY1NDQwODY3YWNlZDJmZjk4MzdjMWNkMWUxYWVhMjNiYzNjZjM0NDRlMzVmN2NiNQotOTdjMmY4ZDU1NzZmZmVhYTgzZTA2YTllNjM4M2U5MjI1ZmZlMGRiNGIxNTc1ZTFmODdmMjhiMzczNzE2YjY2OAotNGYzZTllNjk0ZDZkNTY0OTVkMjE2NzNkMTY1Y2ZhZTVjNmNhMTEyZDE2YTQwMjQ3MjE2ZGE0ZGViYWJiN2U4ZAotMzRmY2I4NTg3MDdkODJjYjg4NjhkY2Q4ZTk1NmQxZGRmOGJiZjZjZDU3YzI5M2Y4ZTM0MjdmMTRjOTllOTEwZAotYTdiZWYyNmMwOWUzMWNhNjY1NTA0OTY1NzRjMGM4ZjcwZTdlZmM5Zjc0YmI0NWZiMWZmMTNiMzFkODk4MmI0NAotMDM4YzEyMThiODc0YWM5NWFiOTA3ZDAxYmNhNzhmMDBmZGVjNTM3NzMwNjRiZTQ1M2E4MmVmYTNjZTMzNmM0NgotNjkzNDVlMTcyNzYzNDEzZjAyMWQ3NTU3MGRkYjBhMTZjODA2ZTQ0NGQ4Yjk4OTVhZjk5N2VlNzQyNWQyYWUyOQotMWQ1N2Q5YWE5MWE1ZDllOTkyYTcyNzUzODFhYzMzMmEyMzk2OTAwZTRkODIxZjY5YTM0OWQ0OGE1MTk3Zjk4ZgotMzUzNGFiMmE0NzkyNmVkYWNmYzUyODFjMDllYThkZGZmN2NjYmRlYzViOTU4NTdjOWIyZDgyODI5Mzc2YmVjOQotNzlhNmVkNTNjNDJmNmJlMGM4MGE5ZmU2YjkwYzA2NjI0YTI5YWRjMGUyNjgyNDFlMTQ1YjE4ZGVhNjA5Y2Y4ZQotZTc5NzIwZDAzMTY5MWY1OTEyYzdiNGMxZmQ0MzU4YTZlZDA3YWJlMjM5NzNmNWIyOTZlYTNlMzZkODA4MWQ2NAotNTA4MzVlODRmZTk1YTU2NzY0MTE3Nzg1YmFmOGIwOGFjNDBkY2Y3NDUzZjRjNjcxMDA0NDVlYTZhNzdhYjc1NQotZTNiNDg4MmRkMGE5ZDc0MzMyZjcyMzIyZDM2YWI5ZGJmMjE5OTAyOGViNmM2ZDBmNDNlNzkwNjVlMGZhNDdhNwotNjhiZmU4NjA5ZmU2YWQ4MmU3YTFmYWRiZTgyN2Q4NmFiNmYzZGI4ZDA2NTBjMzFlODBjN2I1YWUyNGM3MDNkYQotMTA0ZWJiNGNiZjBkNjNiMDI0OGFjMWM0N2E4ZWYxNGEwOTVkOTAyYmIzOTBjNDg3NjBiYTdkYTZmZTU2ZmI0NAotZGYwMmVlMTY2YjUyMmE1NTBlZmFiMjAwNmU4MTRmNDA1M2QwZjIxZjNlZTc5MGNhNmQxN2U4ZWE1YWUzMTA4MwotNTg4OWMyY2E2YjNmY2QyNjcxMzFkMzNmM2Y3MWJiYWE1ZDQxNDQ3OWZkNmM5ZTg0YWU0ODFkZWZhNGVhY2Y5OQotOTNhNmZlNGZmNTdmNWUwOWZiOTliOGZjZTcxYjk1ODA4MDk3MWU2MWJmMGNjYmRkMmE4NjQ0ODc4MmFhOTg3MQotMGNiNjg2MDEzNTQ4ZmIzZjY5MTQzNjUwMTU0NWQyZGRiNDZhMzQyNGI2NDM1OTBkYTliMzA2OWQ3NmVlZmVkYQotOTQ2YjZhZTRhNTMxZjdkOGIzYmY5OGFiMzVkMzdjYTViMzY3Mjk1NDhjMDZkMjMwYjU5N2FiMmNmZDEyZGQwMQotN2ZkMjM5ODgzMGRiNGI0ZjJkZDI5OGU5NDU2NTlhNTY0NDcwYjIyNjU2ZTI4YTJkZWZiNjM3MTRiNWRjZWMxYQotNWNjYTRmOWYzYTA3MDc3Yzg3YzA2YmNjMTQ1ZWRlYTg0MjRkOWY0NGVmOGU3M2ZhOThmZDIxNmNmM2ZkODQwOAotNTJlYzU5ODhhNzc0OWYwZDY5MjNmNmMwZWY1MGU5YjJhN2E2MWMwMDYzMTZiNDljNTFhMDEyNzAwNDU2NmQ4MQotMDY2ZTdmMWVkMDJmNWY1NzBjZWYwN2RmMDcwZWU5OGQ4MzZhZDYwNDhmYTc3Yzg4ODhkYWRlYTY0YjcyZDRlZgotMTQwNDYzNGI1OWNiNTkwZTUxMTNkMzg0ZTQzZGRjZWE0NTlkZWM2MGMzZjFjYmVjMTBlMzMxMDBiYzdlYjhiYwotN2UzMzkxNzcxMDVhZDZhNDc4ZWQ5ZTA5NjQ3NzYwMTM0N2U5N2MzOTE2YTM5ODE5MjBiMTZiZjRkNjRkOGZiOAotNjk0MzQxZGI0OTliOWNhM2NmMzRlMTQwZDdkYjRkNmM1YzI5MWYxMDBjMmQ0MTk3NTJlODliYTdmYWMzZThmNwotNWI0YTYzNjE2MTk3YmNhY2FlM2UwMTcwYjc0Njc2NzBmNjdhY2QxYWNhYjJlMDUwMmYwMmY0MTZiODUxYTVjZgotNmY4M2MzY2Q5OTkyZGM5MjViMzg4Y2Y3NWI0MjNlZGYxZDVkMjM0YTM0MWFkZjEyY2ZmODhiZWMxZGE5NWFkNQotZGNmZjkyYjNjY2E3NDE4Y2M4NmFiMWYxOTY5ZWE4NTgyNGQyNDNiYzVjZjRmYWZkOGY0MjY1NTZkZDkwMTdlZQotMDI0MjA0NmY5MDlhY2FlZDNmZjJhOTE1NjQzMDNkMTNjOGRmMjBmZjUyZTI1ZTYwY2I3MTY4OTAyZGFhYzY3OQotYjc5NGVmNThlMGVjOWE1YjVhOTdhMTE0M2IwOTE1N2M5N2Y5OTQ2ZDk4MDc3ZGUyOGU4OTA4Yjg0ZjczYTAxOAotZTBjM2JjNmY0YTZlZTA4OGVkZGU2ZjFlMGY1Njg3OTlkODY3NjVkODQzOTY1MzgxNDY3YTk5YzhiOTE2MzJlNQotZWVkNTNmZGViODY3M2JkNmM5YjM3NTc3NzNmZWJiZjg2ZWU0MjhkNGIzODY5ODVlODEwZGI4MTI0ZjViZjk3NAotZGY5OWFmYWQ2MzJmMDNlMzM4NjQyYzkzMTI3ODdhYzQ3YTlkMmY0YTEwZmM1Mzk5YjZhZTkwMjlhMDMzNmQ4OQotMmFhYmIwOTBlNTgxYjc0OTQ3M2ZmMjA4MTUyNzc4ODFmOTg1MTQ2YTAyOGY2ZGZiMGFjZDE5OTU0YTBiZGJiOAotYjRlZDFhNjVkM2I5ODY2ZGFjMjljNmFhOGFlZDM5ZDk1NjQzM2JhNjQ5ZjI4M2FhZWE4NDhmNmNmOGY5NjI2OAotY2M2Njk2MTM5ODFlNDcwNWQ5MjIwOTcwNjA4ZTY3MDI4ZGU3OWQwYjM2NjhiNGEzZGI3MGY2MWM5ZmMwMTA3OAotMzdlYzUxZWFiNzBkOTJhMDE3ZDk2Y2Q4ODkzZWNjYmUyMzA4MWRhZmVhZjgxY2EyYzlkNDVkMzhjZjU1NGM4NAotOTlhNmI0NzllYmZiZDk2YmU4ZjdmNDU5OWIxMGRkNDViNGFjODYwZWE2YWE0MTBmMTYxZGYyYjMzYzA4NTg2ZAotODcyMThhNzkwNTA5ODAwMTY0YjQxZTNjZDBhN2QzMGQ5NTg0ODEzYzQyZmUzOTM1ZWU1NmM2ZjIyY2RlOWZkNAotMDU2MTVhYjJhYmFjOWRmY2FjNTUwMTQwYzQ1NDBkNmRmZjllZDY3ZjUzMDU3MDc0NGQwYmUzZTU2MDQxZTFkOAotY2ViNWE2OTI1YjNiYzUyYzIwNmY2ZGQ4N2YyYzRkZTcwZWMxOTQ4N2QyZGRhZjIwZWY2YjI2ZmNkNjA2MzFiYQotYjE2NzdkMGFiNjk1ZGQ2OGIyYTNiMjdhNzBiMGI0OGZjYzg3Mjk5MWJkMGI5Njg4YTk2NmU3MjIzOWI1OGQzYgotMmU1ODg2MmViNGRiMzkwZTE2OTEwMGU1MzljMjM4Mjk5NDQ5YmRhMzU2YTA5NjhjODY2YmEwZTBiZjNiODhmNwotNmNmZDM5ZmUxMGFlMzBlYjZjYTcxNDliNDFlNDEyY2Y1NTY5NjliNGM4MTZhMTk0NWMwODc4ZTJhNzllN2VjZQotN2U1Mjc1NGM4ZGZhNzU1ZDc5ZmIxNWU1NTc2YTg4NDYzMDc1Mjc0NjBiNmQ5MTgyMTU0ZTIzYjg0ZWE5ZDQ0MwotN2ZjYmI0NzBlOTgzM2QyZjNmOTBhYTg4ZDBlNDRiMTc1YTkzNThhZDBkODQ2YWU2NzQ0YzRiNjlhNWUyNDY5MgotZWIzN2I1Yjk2Nzg3MjliZTg4Y2I5Zjg0ZDI3NzNiYTk5YjI5YWQyMDU2NDIwMzI4MTE2ODQwY2NiNDc1YWI3NgotMjdiYzdlZmQyZGJlNmRjZGY1OTZlOTRjMDlhYTk1OWYyZDQzZDQ4YTgwY2UyZmFhN2MzMGJlMzI0ZDE4YjhmOAotNzBmNzdiZTcyMTk5ZTkzMWQ1ZDVmM2FjZjQ4ZmY4MDYwZTE2OGI0OGQwNjZiMjM1NGZlYTU4NzEzYzFhNTM2NwotMzMwYzk0OTFmZGI2ZmU5NjU0YThmZDY2ODAzZmRiMTk5MGJjZjViZjJkODY2NTk4MGQxNjJmMWJlMTc2NjNmNgotODU3NTYzMzcxYjEwNTYxNDRjZjU0YWQzMGYxZmFlNTcwN2Y3YmJlODdmYWU0MWQyYzY4M2U4YTAyOTMxZGUyNAotMjllNjZmMzUxODhmZjM1OTRmMzdmN2VjNTAyMWU4Y2NmMDAyNDhiZTQ1OWY4MGVmOWE0NmQwMzQ0ZTE1Mzc4OQotNjk3MjkxOTQ3MzFhNDkxMzVhZTc3MWFhYzY2M2MwMDM3ZGI2NzIwMGM5Njc3YmYxZjM5YWJiYmM1NDgwMjc0MQotMjNkMzZhMzVmMTI4YzFjMzVkZmFjMWEyOWE5YzFhNDg4ZjZkN2RmMjM5MzM0ODhjODU4NjY3YmZlMjQ5NDhkYgotODZiZDAwODdmOTRiMGM2MzI1YTQwM2RlNGE0MzRiZjc2N2MxMzdmMjQ4Yzg1MjU3YTcyZTM5YjUxMzUxZDQwMQotOGI1MzA5MTNlYThiZThiZmJlYjAzOTIzM2JjMzQzMmRiMGI2MWFhMjgxYTBjZTJmMDFiMDM5OWIwNjZmZGU3ZQotYWJjYWZkZDQ2YzRkNmJjZjI5MjRkZTJlZDM5NzJjMDFhZTAyMTNkYzE1NTM5Mjg4OTVjMmI1NDFiMWIyNTRlNwotYTFhZTQ2MDY5YTExMGM1NWRlMTJmNjYzNTg4MTVjZmIwN2NmMGRlNTk4NjViZTg1ZjFhOGYyYjYxZDBlYmFlMgotN2QzNDFiZGMzN2VhYjM0MmFmMTQ4YTA1ZDBmYTQxNWI4NmNkYTcwNjc0NmM3NWUwZmI3MWE2MTBlNDU1YTY0YQotZDg1MTU3MDVlYzhkMjY1ZjNlNGVkOWMwMjAzNzQ0Yzg2YTFmZTU1ZmY1MmI2YzhmNGJhNzFlMGEyNjY1MWNkNQotZmMzOGQ5M2IyMzcwYjFlMzhjMjkzNDNjOTZkZDliM2Q0YTM5Yjc4ZjdiYzdmMmVlZDczNWY0NmJiNDZmOTZiMQotYmVjYmNhYTdjZDk5ZWYyM2QxNmJjYjNmMzhhNjA1ZGJiOTA4YjI4YjEwMzlkMmVhMWZjNWQ3YWZjMTFmMWFhMwotNzk4YjQwN2VjMjM2NDIxY2NjYTE4ZmMxZjI3YTEyZDdlMGIyNTMwMzk4MjcxMDQ0NjFjNTFjY2IyMjgzYzllMgotNmZjYjgxOWI2NTZhMWFhZjFiMjk4MjFiY2VjYzUwYjkxMWQxYTA1MzMwYzQzYTBjNjAyNWVjOTBkYzEzNDA0MgotNzdhZDk0MjRjMmQyZTY0MmExMjIzZGM3NGZmMTZmNzBiNTRjMGZmNTc4MTU3ZjBjNzAxMjc5ZmFjYWViMjU2MwotY2IzODU1ODcyZDM5MzNjMGE3YmU3YjYzM2U3ZTNlZjA1M2UxMjEzZTRjZDdlMWM1NzgwNGVjY2Q4MDI2ZTU4MQotYmViNGMyZmM1OWNhY2I0YzFlNzY5NmQxNjUzMTZkN2YzMzkxZWRlNDQzODczYzdhYzQ4Mjc3ZTQ3ZWViYzY0ZQotMzAyM2QwNmZmY2NiMDVhMWE3MWI2NGI3ZGE0Y2UxYjYyNTZjNDk3MGIxNzljOTFlMWI1ZDZhZGU4MWMxNTFkNAotZGMzY2NjZmYxZDZlYmQxMTgyODVkNTZmZjc2MzFmMmM3ZTJiODljZDcwYjJlZjdhMzg5NDM2NmZkMTc3YzA2YQotMzllMzk3MTc0N2Y2NzE4OThhMDEwOTAwOGUzMTkwYjBhZWY5MDk1OTdmZmU5MWQ3YzdjMjA2OWI1NjgwMjk4ZQotZWVlN2MwNGU1OGNkMzI4YzFiYWZhYzJhOGJjYjYzZjZkOWE2YTU2ZjI5ZjM1NTFjZTFkMjUxMmI1ODg1ZDFiNwotODM5N2U0NjRiNWY4MWY0ODAzZWViZmMwY2M2MzJmYjY1M2Y1MmZjN2ViZTJmNjRhYjVjZTE2ZTg0MGJkMDU3NwotY2RmYTI0YTkyOGUyODg4ZWY2MTcxZTQzYWVkYWY4ODYxNjM0NGNkNjRiM2EyYzA4NzNkYmJmOGViMWZkYzA4YwotY2Q4NmYzMjQ3NzU2NzJiYzU1MDI0MWQxMzliZGVjYTllNmVlMzZkNDlmYmIxMTdlYjVlYjQ1NmQ5OTI1ODA2NwotOTRiYTI3Y2M1MDU4NWQyNTQ0YjJmMWYxNmMxOWJhNDFiMGNiMzA4YzRmNTAwMzlhODQzZTY2YjIwZTA0ZGIxZQotYjBlOTlmYWEzNTU2ZDhlOTVmNDUyNmYwYTEwNWQ0Yjc2MWRmNDE1MTQ4MDUxYzYwNDA3N2NlMjAyNTczMjE1MgotZTZkYjcyZDgxMGJiOGQ4MWM3MzNiYTc4YzBkZWI4Nzk5YWJhYTIwZDNkNzcxNTJiMmRkMTA5ZDcwZWZiMmJkZAotN2YxN2MxYjc5YmNlY2Y2YjMwY2YwZjg1MmFjNjExOTdlMGY2MDFkMjYwMjIwNWJjMzc3MDhmYjQzMDZhNzgyYgotMWYyYTM5YmIwMzU1NGExZDEwMTAwMjIxZjk5Y2NiNDViNTM4YmYyYTk0ZGRmOGM0ZTBiMTBjNjJmNGFmNzEyYwotYTQ0Mzg3YjAwMzhiZjI0NzRkYmQyMjQyYzczNWRiMGQ3OTI0NmQ3M2E0MzEzN2Q1MzVlZWU1MjU1MDJlZTQ0MAotOTAyMWFlMjQxNGU5ZjQ0Mzc0MGNkYWNkYWFiY2ZhYTAwODRhNjBhYzM0MzAzZGQ1NTkyNjllYjA4OGUyOTI1YwotNjMyYmRhYWU0NGRhZTBhZTU3ZjMwODBiZTQ0OGM1NmFhNTQ5YjYyMGQxNzI5YjZjYzI5NzRlNTcxYTU2OTdiMAotNGZmM2U2ZjY1NDJjNGZjYjJhYmM5MjYxZDk3ZDZlNmU2MDUzOGQ2OWIzNmM4MTg5NDkxYTk3OGE3ZDAwYjliNgotM2U2MmExZjUxZDYwMDJlMTJkMDYwNGQ1M2FmMDE4OGU1NjVjZWVjOGJhNTcyYmZkZTEyMjI0OWRhY2M5ZDlkNwotNzUwNDdjNjllZjA0ODVhZGY5ZjBkY2VjMGYwYzkyNmFiOTFiNTUxZWJkOWI4ZjRhYTAzODE3YzI1Y2E5MjM5NQotNTE4MzA0YmU5NGI1ZDU2YmJkYjgzM2NlZTkyYzMyYjc5MmM2YTMxZjM3NDQ4YjMxOTg4MGU0Y2FjMzVkMmVkZgotZGZmNTMwZDBmNzc3M2U1MTQ4ZDQxYWU1NmUwMjYzMzc4MWNiMmFiYjE1ZWMyZDk0YWU1MmQzYzhmY2ZkMzA5NwotNDVkOTVmNjdiNTYwMTY1ZjU3MzkzYTQyZmM3NDc0YjUyODRjN2NjMGI4OTNmODRmODczMzc2ODI2NGZmYThkZAotMGJlZDgzZDk5YzAzNWJkMWE4MzU5N2YwZDYxNDc5N2M1ODNlYzhjNWI5NmI5NzM5ZjMwNGVkZmUxZTAwYWI0MgotMzhmMzUzYTgyZTdjNzFkNzQ4NzdkODUxOWFkZDliOGM3OGY2MTExNzQ1OTk1MTJmMTFjMjJjMTBjYjM2MDMwNwotYjI2MmYxZjc4YzdmOWE4NWYxZmQyMWU5NGQ3MmFiZDQxMzY1MGVhNmE2OWIwNTdlMDIxYWRhOTc4N2QwNjE4NQotYzU3YzA5NDdmOWEyYTgxODIyMDU0ZTg1NWY4MDIxNjA2NDllMjVkZGM4Mjk2OWQ5NGMwNTJjMjg5ZjM1YmI1NwotYzc3ZGU1ZGZjNjM3MTZjNWIwYTg3YmM3ZWQ4NTk2NjNjNDU3ZjA4MDA4OWUzZDcyOWI5YmIxMjk5MDUwNzg4YQotNzlhZGExOWRiMjEwMTFiMDFhNDdiMjc4NjE1YmU1MzU5ZTcxZWNlYzdjMDZhNjdjNDk0M2U2MTA2ZTE1MjgyNAotY2NiMWZkMzljNDg1ZTkwZWZlYmIxYjIxOTJkOTNjOGJjNTJlMzU2ZTUxZTVmYzgwNWNkN2U0MzU0M2U5YzUwMAotZDBhYzg1YjcyMzAzNTBmOWY0MDMzNDBhMTZiYmRiYmMzYmRmMGY3YTU3MWFhZWM0ZDZmZGJlY2IyODhjMjEwZgotYjdjMjQ0ZjE5MDgzMDVhMGIxNjMyYTgxMjMwMDExNzVlMzYxMjRiNTQzZmY5MmMxNjU3NmQzNzNiOWJkZWNlNwotNjc4ODkxMjhmZmEzNDk3ZmY4NDZmOGJlZmFmNWRlM2I3YzMzOWYwNDlhZGM5MTE2YzlhN2JiOGJhZTQzNTc5OAotMDhkY2EyZDljMTUxZDkzMjljMzQ1OTE5OTMwZTg0MzcwNTQ1MDFiYmEzOGMyYmQ1MTAyYTIwZTQyOTEyMDNmNgotZWVjZTJmNzBiZmYzZGYwOGFlYjhkZGYxODA2ZTk2NTdlZTRhNWUzZmQ1YThmZDk3OWQ5MGQ0NTczNGYxNGY3MQotNWQzMzlhYzkxYjdmYTE4YTE3YmU4MTU4M2MwODU0NGE4YTMyNzI5YzE3OTc1MDE0ZDYyOWIxMzljMGIzYzIzNgotYmM5YTk5MjMxZmZiMzM5Yjc3NjFhMjU4NmVhYzU2NGJlNzM0ZWYzNzk5MmNlYzZjMDZjMmM5M2RlMmIzNDBmYgotM2EyN2E1MmRhYmU2OWQ5MTc4ZDlhNTQ0NDMwY2ZmMjI5MzM1ZWRkNmY4MTdiYzUyYzY5MDkxN2ZiZjMyMjg1MgotZDRhN2E3MDlhNTkzNzA0NTY4Y2YxNDJiNDVlZmYxNjRkODE3ODgwY2M5Mzc4MmMyMjMyNDdjNjVmYTk5YWNhMwotNWM2NmEyNjA5M2Y5ZmZiYzI1Y2E5YjNjZjZiOGJhNDc4Njk1YzY4MjEyZTgwZTM4NjhhMGRiMWExYzg0YmNkYwotZGYwNWZlMDU0NzMzYTFiNzk0ZWQxY2M0ODNhNTdiOTdjYTJlOTdmY2IxY2ViOWNjMmFlN2Q1ZTBlMDY0Y2M4ZQotMDFjYzYyODE4MDM1OTc0OTYyMmFjMWNmYmI1N2Q1MWIyNTk3NGVjYjE1ZGM4M2Y5OWRiZmJhMmQ3NzlhZGFmOQotNmE5MzA3YmYzZmFlZjVkMmJhNTEzNWExNWQxM2M0MjE1NTcwZTc3MjM3NmE0YTRhM2E1ZWM0MDI4ZWYxMTAwNAotYjkzYWNhZjM4MTI4ZGU5NDUzMWMyM2YxMTRmZWM0MWNiMmUyMDI3ZThlZTEzOGFlZjZhZDAxN2Y1ZDk3YTYwMAotMTA2M2JlNzA2YjY1ZGEwZWRhMjIzNGU3ZTlhOWMyN2MwODRjNDU2NGIzNjJmZmE5M2VjOTEyN2NiYzkzNjZjZQotN2I3NDgwNTk0M2M5OTYxYmU1YTViNWVjODc2NzViMDJmNzU2YWYxYjcwMDc0ZDAzMzc0YWU5MzFjZmYzMTc1NwotNDE0NWFmNDE2YTkwOThiYmE4NGVkMmQzZWQ0NDAxOTI1N2MwZjM0ZTdmOTRkYmQxMGZkMDRmZDE1ZmZkMWI2NAotZjY1YjJjMDJlNTgxMTc1NDM2MTUwYTA3NGRlNDNmOGUxMWZiYzU2ZTgwNjQ4NjY2NWNlZGJjZjM4NzUwNGQ2ZgotMDY4N2ExM2Q2NjhjNjlkZGRiYzM3YWRmOTFhZDAwOTFhNzcwZWUyMzg1MGFlMmZjYmQ2YjlkZTlkOGE4YzhiOAotZWNjZGU2NmI3MTIyYzdiOTYwMmRiZDBmNmI3ZjdlNDg5MDkzMzQ1MWM3YTM5MDQzODJkNzgwMWJjZDk5MmY3NgotNGNkNDFkNzRiYzg3MjNlYmEyNjQ3ZGI3ZjgxM2I0NjVkMTEwNTJlMGY0ZWY1OTMwNDk5NDI5MTVjNjE0ZWRlMwotNGY4ZjJiNzdiZWRlYzYzNWViMzQ2MWQ2NmNiZmQ0YmUxNjg5YTgzOWIxZmVhYTQxYzBmMGZhMjM2Njk4MDZiYgotNTJmZWExZmE1YWI1MjRhNDQ3ZWYzY2ZlYTQ1ODNhNzc5MGJhYTQxOGZmODkxNzM4OGRhYWRjNWEzZDFhOWZjYwotN2Y0YTgyNmM5MTJlYmE1ZDRiODJkNGMyOWI2MzlkNTY1MzJiMzdlZTlhZWQ2YmYwNjEzN2EzYWY4OTljNzBhMQotY2U0Yzk5NDBlNmVhODdiNmUyNzQ2OTZjNGExNWQ2YWEzYzE3ZjkzMzRhYTg0ZmNmMWVkYjQ4ZTMwNjY0MGU1NwotODkyYjI1ZTY3YzZmODdlNGU0Y2RmMWE5Y2YxMmY2OWMwMDI4YjVmYjc2OGU4MzllMWI4Zjc1ZjNhYjJkOTc2MwotNmUxYmU4YzVhNzNiZmE4Njc1ODUzNjk1ZWUzMjg4N2RkNmRmNWYwM2Y4OGU2MzdkNDVmNzUyZDIyZjZjNzZiMwotNzFiOWE1MTQwNzhjMzIwMGRkZDJlOTk4ZjMzZjFhZTVjMGE1ZmRjOTMyZjdjNDcyNzUxMmNhZWMyMzJhNjgxZgotYmJkZWMxYTkxOWJkZGFlYmY1ZWZiZDA2ODY5YmNmZTA2MzdiNzJjZWZhYWMxM2Y5MTVmMjVjZDNhOTI2YzBhNQotNDg3NTQzNWVlNmE0MTNlMjU1NGZlNGVjZmNiOTZjMWI1ZDg3MTllODRkZDM0OTM5ZGZkNzc5NWVlZGVjYmNlYgotNzg2ZGYzMmI2MzYwYmZmZWQ1NTNhNzRiNDQ0YTM1ZTBhYjA1MTdjZjdhYTljNGU0MjBlNWJlYTRhNWFhYzk1MAotNTRjZmI1NWQxYTFlNTdiNThiOGZiMzgyZThlYTJhY2JmYjliNDNkMWFiNjdlMGMxNDUwZWQzMDkxNzU4YzFiMwotODE1NWZkNjk5NjUwMGE1NWZhNWQxMzRmMTdlNTU5NzhkOTMwNDI1ZTBjMDM3NDgzNjRjNDZkM2JlZjY4YTM5MAotNjQ5ZTA5ZTQ4YzJmYWI5MjEwOGVlZjg2MDNjNzBhOTc3YTM4OGQ0ZDI0OTcxMjk2YWFhYmNiOTMyYmM5NjAzMwotZjY0OGE2YWRhMjY1YWNhOTM4YTY1MTJmNDU2ZmRjMTk0ZjcxODY4MDhkZWIzYzE2NzY5ZDNmYWE4NTBmNzhmYgotNTg2MTBjNzc2YzJlZjNmMjA4NDA0ZGVmMjk0MGU0ODRhODAxY2RjNDVhZWFjODhmYTk4NTJkMTMxOTE1OTM0MAotMzQ3OGIxYjdmMjA0ZmYyOTdiNjdiZGRmMWQzOGUyNTZmODY0ZDNhODNkNjkxOWNhN2RiMWJiYjFmNWI4ZjZlNwotOGJhMjcyZDFmYjI4ZDc2MDYxOGRhYzZmNTYzM2I5NDgxNjQ1YzliOGViM2EzMzg0NTE4MTAzY2M2OGFjZWIwNQotNWE5MWRkOGRlZjA0YjQ5ZDM2M2IwYzZkYWY2M2FlZjVkODViMWU3OTUwNGMyM2IzYmI1MGE0YjcxOTQ4MzhkNgotYjQxN2IwY2NiY2Q5NWE0NjgzNGY5YmJiMmFjMzBmYjJkOWI5YzMxY2Y0YjYwOGUxMzc5Mzk5YTk1ZjhkZmE5NAotNTM5OThhNzQzYzVhNWJmMzNlZDFlMTAxNzdkYzRhMmEzNDdmNWZhNGQwOTQ3MGNiNWQ3MWIwN2JmNDU5YzgwMAotMDExOWEyMTY0YjE0M2YwM2ZjZTM2YzE5Mzg0YTAxY2VjNWI5MDgwNDkxYjgyYjlmZjExNWY3OTVkOTY5ZjQ4MAotYjcyMzJkMDM3NWE5ZDQ2ZmFmZjMxZmVjYzkzNTFiNDI5MjNlOWFiNjIwN2QyNzIzOTE1ZDc4NDNkYjI3OTUwNQotMjgwZDcwZDljODBhMTgyMWEyNTdhZWM3NjRiN2U4NWExZThkYTdjNDBkNDJhMGY3NzM4NWVhNjZhNzY0MzQzNQotZTIwYWY3MDg0NzBmNjQ1MDQ2YmJlYWMxMmQ4NDBmZTMyNjBjZTc1ZTIwNTYzMDE0ZDllMmViZGFhNTdlZjA2YwotMGRkYjU1ZmRmNmVjM2UwNjQzMTJkMTNlMjUyOTliMTUzMTY5Nzg4ZThhNGRlY2MwOTVlYjM3ZWFmOGU4Y2UyYwotY2Q3MTc0ZjQ0ZWU4ZjM4NzVjNWEzZGUzYzdjZTIyMjk2ZTk5YzQ0NjI4ZjUyY2QzZDE4ZWI5MjE1YzM0ZTU2MwotMGJhODViNWZjZjNhMjExMDIxYTE5OTQ1NTEwYzdlMzlhYjU2ZDk3N2Y3NGZkNTBiYThhNzBkZWY4MmZhNjc3NwotNjkzMDM5MDcwMGI0NjM2MzMwYTk5OGI1MzUxMjZkNjEwZThhMWNiNjNmNjE4ZDY5ODk2ZmI0NzU3Njg1N2Y1ZgotODkyNmRkYjQ4MzM5NjY2OTVhMjY0MDJhZWNjNDhiYmNhZGMwNGMyODMzYWZjZWRlZWUxNDI1NGE5ZTc3NjAzYQotNWJiN2I5ZGUzYzk3MDA3OTAxMTQzYTc5MDFjMDBiNzdhMTNlNzI5NDBhNjUwN2E3NjE2NDk4OWU3MWQ5MWViMgotMzA4MGM1ODViZTJmODczNDkwOWZhMWVmYTdmYzZhMjQ2NGQ5NWU0YzUwNTFmYjhkNjA2NWE3ZDlhNDUzY2JkZAotMDMzNjI2NTQ0YjcyMTA4ZTRjNGMwODdiNGU0ZGQ5NzI4OTMzNzFiYTdiOGU4MjkxZWE0Zjk4ZDAzYzYxY2U2ZAotZDU2NzM0ZjE3YTY2Njk3ZjIyNjBhZjliM2Y4YjlhMzY3MTdiNDkwZTFjZTY0OWQ4MzlhNjYxMzNkYTc3NDJkMgotZGJjYWEyMmZmOTE1ZmNhZGZmYTAzODNjZjM0YzIyOTBmYTQyZmUyMzEyOGUyOWU3YmIxYzU5ZTU1YjdhYzM0NwotZmU2NjQ4MWY0ODVkN2JkMDlmNTVjYjUxZDIwOGQwNzY1YTUxMGQ1ZjY5NThmY2QzZmY1YTVlZDI3ZDA2YTAyYQotZjdlY2FkY2U0YjRhYzVmMWQwMjEwYzU2MzdmMDczODIxOTNkNzc5NDVlMjQ5ZDJjNDk3M2FhNDNkZWE0MWRjMAotNTFjZDcyNjQzYmRhNGY3NDlkZDU4NDZhOWQzYTczNDZkMzlmNzhlYWFkNzM4ZDJkMjU1ZGYwZjBjYWI1ZmIxMAotOTZhMGFjODZiYjAxMzk4MGRlZGZjODRkZGZlZjA4MTcwMGZjM2M2NmI2ZDVhMTI1YzllODNkZjE3ZDkyNjU4YwotMTBkNzlhOGFhYTIyMjAwNGMyMGFhYWU2MTI4MTMyYzY0Zjk2YTdhN2M4Njk0ODlhNjM4NjBjMTVkNTNmOTU4YgotZDZmYjgxY2QxNjViZjI1M2Q5OTZjMTUyOTVmN2MyZmM1MmMxM2I1MWFkZWQxYzc3NGNiMzVhMGFiMjU4YmNhMwotYWI0Mzg3ODZmZjdlNjQ4ZjQyYWI1NjhmZGQ5Y2Q1OThjNTJiNTc0OGIwYzQ0NDU4ZDRlMGI4MDgwYWQxOWNiYwotNTVkOGFhMWE3OGNhZmVkN2JkNDFhODY0NDg4ZDhhYjBiYzEyZjY2ODkwMjdjNjVjNzBhMmIyNmJkMjU5MDAyNgotM2U4MGJhNjE4OTY3MmFkZmUzNzdlOWZiNTE2Y2M2YmJiMGYyZTM0MWRjOWUyZjM0YThiYjAwYjQwNzllYTI4ZgotN2M4MTM4YzQxNTMwNmUwMGJkZDhlNzExNzZmYWYwNmZhYzkyZTM4ZThlMTVkYzZlYzZjZGIzODlkMWExNTMxMAotY2E2NzQwOGE5Njg2ZjIxYmY2ZmJiZmE3Y2UwMzI5NzRlMmI4NjBhM2E3MjU2MTUwOGJjZjIyZWRlNDEyMjE4NQotYjgzNTMyNDQ0MTM0YWYyYmFjNWNlZDE5MzJjOWNjMDZiNzAxNjBkMGNlZmM4Zjc2ZWQxMTA4YjYyOWU4MTA2MAotY2U2YzMwZTBiYzlhYzIzMmZlZjdhYjFjOTllMjE3OTI5MjFiZGRjMjBmMmFmZDNiMDgzZGJhMjk2NDE0NThhMQotMWJhODA2MTM2MTBiMDE1NDNkMzM2ZWJjNDVhZTE1YzI3NmM5ZmYxOGZlY2RjMGNkZTNiZTE4ZTA0NDQ5NzIxNwotYjlhODEyZDkyNjUzOGZjNDI4NzFmNDM5MjgyYzE3MTc4MzMxNzBiZGJmZmJkN2UyMDM0ZDc5NGVlZTkxNzdlZAotMjgwNDViMmRjNDU5NTk0MjZlMzVkMzBmZGUKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjEzMF8wIC9WWEFNUlYrTmltYnVzUm9tTm85TC1SZWd1IDEgMQotWyAvLm5vdGRlZi9kb3RhY2NlbnQvZmkvZmwvZnJhY3Rpb24vaHVuZ2FydW1sYXV0L0xzbGFzaC9sc2xhc2gKLSAgL29nb25lay9yaW5nLy5ub3RkZWYvYnJldmUvbWludXMvLm5vdGRlZi9aY2Fyb24vemNhcm9uCi0gIC9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZsL25vdGVxdWFsL2luZmluaXR5Ci0gIC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsL3BhcnRpYWxkaWZmL3N1bW1hdGlvbi9wcm9kdWN0L3BpL2dyYXZlL3F1b3Rlc2luZ2xlCi0gIC9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAotICAvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCi0gIC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbgotICAvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCi0gIC9hdC9BL0IvQy9EL0UvRi9HCi0gIC9IL0kvSi9LL0wvTS9OL08KLSAgL1AvUS9SL1MvVC9VL1YvVwotICAvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCi0gIC9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZwotICAvaC9pL2ovay9sL20vbi9vCi0gIC9wL3Evci9zL3QvdS92L3cKLSAgL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlLy5ub3RkZWYKLSAgL0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJhc2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsCi0gIC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FL09tZWdhL3JhZGljYWwvYXBwcm94ZXF1YWwKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2J1bGxldC9lbmRhc2gvZW1kYXNoCi0gIC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lL0RlbHRhL2xvemVuZ2UvWWRpZXJlc2lzCi0gIC8ubm90ZGVmL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24KLSAgL2RpZXJlc2lzL2NvcHlyaWdodC9vcmRmZW1pbmluZS9ndWlsbGVtb3RsZWZ0L2xvZ2ljYWxub3QvaHlwaGVuL3JlZ2lzdGVyZWQvbWFjcm9uCi0gIC9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCi0gIC9jZWRpbGxhL29uZXN1cGVyaW9yL29yZG1hc2N1bGluZS9ndWlsbGVtb3RyaWdodC9vbmVxdWFydGVyL29uZWhhbGYvdGhyZWVxdWFydGVycy9xdWVzdGlvbmRvd24KLSAgL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQotICAvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKLSAgL0V0aC9OdGlsZGUvT2dyYXZlL09hY3V0ZS9PY2lyY3VtZmxleC9PdGlsZGUvT2RpZXJlc2lzL211bHRpcGx5Ci0gIC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMKLSAgL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQotICAvZWdyYXZlL2VhY3V0ZS9lY2lyY3VtZmxleC9lZGllcmVzaXMvaWdyYXZlL2lhY3V0ZS9pY2lyY3VtZmxleC9pZGllcmVzaXMKLSAgL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQotICAvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXNdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IE1GRUNVUitOaW1idXNNb25MLVJlZ3UKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzTW9uTC1SZWd1IDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBNb25vIEwgUmVndWxhcikgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoTmltYnVzIE1vbm8gTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChSZWd1bGFyKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAwLjAgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotL1VuZGVybGluZVBvc2l0aW9uIC0xMDAgZGVmCi0vVW5kZXJsaW5lVGhpY2tuZXNzIDUwIGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9NRkVDVVIrTmltYnVzTW9uTC1SZWd1IGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey0xMiAtMjM3IDY1MCA4MTF9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiODkyOTA2OTliNTBjMWJmMWJhZWZmZQotMWY1N2JlN2I1ZWEwMjUyNDFhMjQ4YTZkNGNmYTUwNjdhMWRhNmViYTRjZmM5NDA1OTliYTNmM2M5MzRkNzI0OAotYjhlNGFjNTgxNmYwZDJjZThiM2M0MTkzY2UzOWQxOWZmZmRiNzUyNTQ1NzMxNzNjYjUxY2NkODNjMmYyZDA2YgotMjQ4M2NmOWIwN2IyMWVjNmY1MDJmMDI4YzI3Mzg4N2JiMDZkYWUyYWZhYzEwZTlmZDNjN2NmNTFiY2E3YjI3NwotYjcwNmU0MjUzMDJkYzc4OTc1YWMwZTQzYjg3MDczMjU3YTVjZDc0MjRiNjg2NWZjYTg5ZDg4NmU4Zjk1YzRmNgotZDQ1NzYyM2RiYmMwZDE2YmFmZWI0YzY0OWY1ZDcyYjA5YjE4NTAyZWVhYjY4N2U5MTVlOWI1MzZhMzYxYjRmMQotNDRjM2NkNGNjNjgzYjVmMDVhNGVjYjQ4MjNhNWViNTE3OWJiN2VlZThiNzZjMjFiMjQ5MWE5NzgwOGY2MzE4YgotNTg1YjBiYWQ5OGY0MmZiNGE3NTViY2I3NGNkMzU0Zjc5NGM4YmVhNWI5MGZiOTY4MWJkNTg0OWQ0NTI0N2UzOQotOTMwYzg4MjQ5MDIzMGUxNjYyZDM5Y2NhODc1YmZmZWFjM2U3OWE3OGRlNmUxMjk4YWJlOTgxN2FlOTg2NzVjNAotMTYyMjBhZDBkM2EzNjU4MGVlMmYyYTE3YWFhMTI0NmM0MTZkNThhNGM1MmZiYjI2YWFmM2I2Zjc1ODMzYWY4ZQotM2FhOTk2MjE4ZGFmYTU3MWZiYzdjYWQ5MGVjZTljODgzYzgxM2Q4ZjE2OGM1ZTg2YmJmYTBmMGE1Y2IzNmUzNQotMmRlNGNhYTBmOGQzMjI3ZjcyYzUwNTZiZmI1YmNhNmJmOWM2MGUwMzdhMGU0NDY3MGE4ZDNjYmM5YTE5ZjM3OQotY2E4ZGIzMGI3MTFmNTE4YThjNzU2OTIxMWFjNzBjNDZlZWQyYWY2MmEzN2YyMzhiZDBiZDEyZDYwMzMyZTY3MwotYzZlNzg0YjNlYmEzZjJlNzFlOTk5M2I5N2U4YTM4Zjg1MDQ4OTM3ZTk1OGYxY2Q4ZmM2ZTY2MTA0ODU0NjEzNQotNTZiODEwZmExZmY2MTFiOTY0OTUwODFjMDQ1NDJkZjdmZWYwODVkZWM2MTlkYzhjODRjYzU3NjgzZDIxMjgxMwotOWQxNDcyOGFhMzI3MjNlMWQxNWYyYWY4ZjAzNDIyY2ZhZmQ4ZWE0YzkyZGFiZmUwMGU2MTEwYmNhMzlmYzU1NQotYmMwNjZlZjg0OGU0MzdiNTA2ODhkYWYyNmQwMDFhZWQ3ZTc0NjA1ZGRmOWMwZWQzNmJlNDU0NTVhZWY5MjY4OQotOGNmMzJiYWYyNDE4ZTAyMTE4NTkzZjU0ZmUxODU3ODA3YmZhMGI5M2I1Y2RjY2Q4MWQyOGJlZGUyMmNkYTZlZQotMmUzMjQyMmMxZThkYTg4NjZlNTI2MzAwZjkwNTllODVjYTU0MTIyZWNiZmZkYzAxMTQ2MDkxM2UwZDI4ZjdmNQotZmJjOWQ3ZjlmNjkzNGIzZDhlZmMxYTkxY2JhNDEyOGY2YmJjNWViNTVlNWU3YjczNjQ3YmZmNzA2NjJiYWZiYgotMTQ1Y2ZhNjVkZjNkYjg1OGJjM2ZjNTc3YjFiZDhiYzc0ZmI4YTYxYmZhNzFiODMwNGFlZWIzNmQ4ZWZlMTJmYQotNmY1ZWVlMGVhZTA4MzBlNTE3N2RjNzQ1MjUwZmMzNjJmNzgyMzFmYzNhYzk4NjQ1NTlkYmE5MmRkYTJmZWI5NgotMjYyOTI5MzQzNWJmNGE4OWY5MTNmZDE1NzAyY2YzMjU5ODFjYTNhMDhiMzI3ZjdlZTM1Nzk0YTllODgzMjZlMAotMjQ1NTliNTQ3ZmM2ZGE2MWI3YTNiOTM1N2Y3MmM3NjdiYWE5Yzc5YzRlN2I3N2Y3MGVjMDFhYzBiODU5NjQyNQotNWY3MzQ2ZGM4Y2VkYzcwMmQzZDU3YjA5ZWY4OWNkZDMzNzU2NjE5YWY1OWFjYjlkMTdhM2FiZWFhNmM2NTIxOAotNmQ2ODU1MzQ4YTEwOTU3NDZiMzRhZjE1ZGYzMTMwOTFjNTllNWJmOWU3OWIxNTZjZDc5MDNjMWM0MmUxMTVlOQotYzUyMDMwMzdjODA4YmQyOTUxOTVlMDc0ZmM0YTQ2ZmJiMWZmMDFjODE0ODc4ZjBjMTc3ZjU1MmJkYzliYjY5OAotMzQ5ZDczYWVjMTc5OTczNzRlYzkwYjY5MjkzYTA2NDQ0MjE0MWE0NGM2ZmU4ZTNjMjgzYzAyYTQ2NTVjNTc5YgotZjIxYjUzZDFmZDM3OTk2YzY4Mjc0NTYwMDc4NWM3YjUyYzRlZWI0N2ZhNWZkNjQwNzM5ZTFmMDlkNWM1ZGQyYgotYjc1MTVhNGNjZTBhMjEyODFkMzE1NTYzODk1OTcyYmVlODhiYmM3NDAxYmU5ZTIwY2IxNjBiNmJjODFlZDQ2OQotNmQ2NjE2OWJkYzY0OGFhYWU4YTk0OTViMDcyOTExY2M4MTRjMTlkNTNiOTVkZTAwNzFlM2E0MzlkM2MwOWMzYwotMWNkNDIyYzYwNTc0MGE4OTM5NDg3ZTI2YmI5MjMzZDRjZGVmY2NhNDliYmViMWI5MTM1NzBhNTFiMmY5NmQzMAotMmVmODkxM2M2YmI2MGI1NGY3ZWE0YjhjYTE2YWQzYjQxOTRkY2JhMjg0MzllYjMxYTk0NDNjYWYwNjFjNGQ4OAotYzIyY2VjOGQ5ZDhkODVkN2FhMjI1ZmQ2NGJmYWU3Mzc2YWJkNDBmODIyYmExZWNjOTMzOWUwOTQwMzE5NTc1MgotZmMwM2E1YzQ3NDJhZDkzMDY0ZDk3NTkwNmVkNjNhY2I0OTVhYWUzMjQ0MDNkM2JjYTExODE3OWUxMDI1NjU0MwotMWJjODRkNDdlMGMwMTYyMzRlZWMwYzUyMjU1YWU3ODM0MTc5NDFjYzg4NGVmYWRiNjNmODI2OTg3NmYwMGE4ZQotMWUxZjE5ZWFmZmZhMDA0NTMyMDNhMDc1Mjc1MGY4Yzg3NmFhZjg3ODI2YmFmNzdiODFkMzM2ZmZjMjkyNDljOQotYTZhNDRmNDAzODEyOTQ0NDc4NDA2MzJlZTU5YTNjNDUzMDM5MWYzNWRhNDVjMTZhMDAxZjc5Mzc4MmJlNDg4YgotNWUwMWQ3Zjc1ZGJkNTNmYjMxZjk1NmYxNjIwMmQzZDk0YTMwMDg2NjgxNGJhNDRjNzk3NjRjYzI1YWNiNTdmMgotMzMzZGZjZjNkOTdhOThmY2E5NDliMWRhNzFhYjI3ODg1MTgzZDhiYWFmYzliYzc0MzE0M2YyZjEwMDJhZDc1MgotMWU1NWQyMDdkZTIzZTk3ZDE3NjBjZDkxOGE1NTE0OGUzN2UwNWY2MzQ3ZThjYzI5OWVlZDI4ZDczMTlhYmNkZgotYTRhMjc5ZDVmNjRjYzIxNTFmOTFhMGJlOWU4MzgyYTM1YjUzNWE2YjVmNDFmMzcwODE2OTg4MWMyNDMzOTFjNgotNjdkOTEyMWJhMjFmNmJiMjJiZTFlYzk5MzNkOWFmMWRkZTk2OTNkNzcwNGMxMTQxY2UyYjk3N2ZmNTE4MTI5OQotNmE1N2Y3ODA2ODE0NDQwYTI4YjFkZmI2MmM0ZGVkYjgyZjBlYmFhYmVmMzM2N2JlYmNkNDMyNDZkNTRkOGViNgotN2FmMDdiMTY0Mzc0OTk4ZjA2YTBiN2UyNzFhZDZlYTk3NDY5OGE4MDYwMDIzNzRkMjcwYzZkZDVjOWRmZDVkYgotZTA1NmZlMWIzZDU4NDgyYTBjYzk4ZDRkNTYwM2M1OWVjMmUxM2I0NDYwMjM2OTJiOWFjMmRkN2NmNzY3ZDJkYwotYTdjNjJiYjM1Nzg4NDcwODVjYWI3OWYxMzliZDMxMmNiMDdjZTEzZTM4YzNmYjhmNjk1YmNmNDAyMWMyODJiMAotOWIyMGJhNjdmMzc4Y2JiODgzMjc1MWI4ZjNlZWQzNzBhNTcyMTM5NDMxYjkxODc4OTNiNTkyNTI5ZmIxYjZjNQotMTlmNTE3OThiY2U5ZTU2Y2E1MDE4NWQ0MmZiZDg1ODE5YzNhMTE1M2Q2NTk5NzUxMWIxOWFjZjg3ZTY5YzA3ZAotMmNhMWE3NDAxYzJiMjNmOTljMTlmOTVkYTBkZjEzNjQ3MmY5ZmI1NzRiMjFhZWJiZjBjMmY4OTJiOTI2MDAwMQotOWE5MTczZjEwOGU3MmMzZWI0YTkzNzE5MjkzZThiZTAyNmI4MzNjZDcwOWM3YzA1YzFhMmU3MjUwY2FkMjU4NgotY2E3MGZiN2Q5MjdlMzZhMmU0YTZmMzRlNzU0YzhkZDhlYTI1NzFjZDgyMDU0NzAwZDM4NmNkZjM0MjBmMzdiYwotYjZhNzBiOWE5MmU0NmNlYmVlMTNmNjY0MWM2N2JjNDA5NzlmOWI4NmUwNTIxNjQ2MTJkM2RjZTdiZTY3ZmE3MQotYjI2ZWU5ZjQyNWI1NGIzNTc3Y2I0YWNmM2RhZDAyZjJlNTVkMjk4NmRlYTg4YTVhMTk1NWI3OGMwY2Q1ZGVjZAotMjEzYzU1YzljNTcxODNhN2RkNTgzMmQ0OWVlODE3MjRhMTlhYmI3ZGEwNzc5ZjFhYTZhNzdkNWQzMTQzNGEwOQotYzZmNTNiN2UyNzEyM2RhYzA0MmY1OGRjMjc2NTNkOTQwMzU4YmI4MTAwYjQxNmI5MjBhZWUyMDY3MjU1OWY2MgotOGIyMGM2ODdkNzdmZjgzY2NhNDQ5ZTk0ZmNmNGYwNjYxNGZjNTM5ODAyMzQwNjE5ZTNhNzkxYTE4NTgxZmZiNgotOWJiNTk2MWQxZTcwZTU1NjE1Y2NlNWM5ZTE0NjZkNzc0MzVlNDg2ZjE1MTc1Y2Y4N2ZmZjY1ZTU4MTI3YjVjMwotMDI0YjkzYzFjMjk2YWFiMjRmMjk0ODNhZWJhMDA3MzZlZDMwYmU1YmI1Mjg0ZDdhZmM0MzI5NGI5MjdiZWMxYgotODY4MTRhNWFjMjVhM2I5Y2QxZjI1YzgxM2NhZTc5MWY5MzczNzVlMDEzMTU5NjI0YTM2MDk1NWE1OGU4ZmE5NAotZTQ5NTkzYTk3MTUwNzAyYzcxZGQ4ZGJmYzM3NzQwOTRkZjkzMDQxNGZmYzY4Y2JkNGI0YTI1MDQxY2IzYjY1NwotYTU0YzliZjc4MDE0MmQyNTg2ZWI1ZGQ5ZWNjMWViNWVhNjkyNDVkNWQ5YzJhZjg2ODk3NGFlNWQ0NmUzYTU0NAotNzRlOTY3ODBhZTY2MDIzNzc4NjU5ZDlhNDU4NTNjMjRkYTE4ZGQ1Y2EwNDg5Y2NjZWZmMjUzYjAwOWMwNmNmNQotODI2YWRiZDBlOGZjZjIzZWRkNzVjM2QzZGU4YTRjNzg5YTg5NWUwNmQyMDYwNmU0ZjhlM2MxYmQ3Nzk3NmU3MQotZGU0MDkyMDNlZjEzNDJiZGJmMmMxMWJiYWI0YWY1YTcwOWYwNDYyYWE4ZmEzYTAyY2JlZDZmMjNmYjRkNWUzZAotMTc1MWFjYmQ0MWVlY2Q4NTcxNTE4YTllMTM4ODljMjIxYmE1NTY4Y2FkZjczMGY5ZGEwMjZmYjM4ZTMwYTI1ZQotODdlZjZhMTM0ODRkNmVlMzFjMTc0YmZhNGI4MGNjMzgxMzRkN2IxOGM4NWM4M2I0ZjE0ZDNjN2IwYTBiNzA2OQotN2JhYTFhMzk3MjUyYWM0N2I2NzMwNmU0NWQ2NDA2MTUzNWQwNTU0MGM4NmI5NTk5ZGY5MDllMTA1YmI1NTEwMAotM2EwMjcxYzI1YmM1ZDU5NmRhMmE0NDZlMzVjMDE5YjVkZWFkN2IyODk2MTRiZDUwODVkNDllY2QwNDY0YjQ5NAotY2QxYWI1NjRhOTNhYzljYmY0MzhmYTU1OGJiZWY3MWMyZmUwMDM1NzNhMDM5NzlhMTBmZThiZDU0YTA1MzcyNAotYTUyOWY0NmZmZTU1Y2VjOGQ2YmJhZjFmNTdkMTYxODU1OTVjODJhMWVmNDJlM2M4MWNiYzU1YmY1MDU4NzYzMAotNDA0YjIwOTBkZjZkOWQyNTQ2OGMxZWI3YTRiMmIzZGE3ZjViNzE4MTU3ZWY4YjVmMjNhZjA4ODMwMWU0NjQxMQotYjUxZTZlMGQ0NjQwOTZjZTIyYmJjMjAyODQ4OGQ5YWY0OTc5MmI0YTE3Y2JiYmE4YWNlOGZjNTFlMWRlMDFiMAotOTdlNmRiMDU0NjZiZjY2OTc4MzA1NjQyYjY3OTBjMDhlNTlhNzA1NWY5NDQyY2MyY2ZjMjMwOTVkZjJjMjdlYQotZGVjYzFiYTU0ZDZiODFlY2M4NzNhOWM3MTc5NmExZWNlNzU3NjViODc4ZDEyZTRkYTllMTlkMDI2YWM0NGRmYQotMmRjN2U1NDA1MDY1NDZhYWM3MGU3YjgyYWU3ZmE5OGJmMzY1NDlmNGQ1NDBmZmZkNTNhYmFmN2VkOTA0NGNhNQotNmI0ZTkwNDRhMmIyM2MzZTdjNzAxNTJlOTZmNGU2NGY2YjE5MTg5NDY3ODlkNGY3MDM2NzVmM2RkNmU4ZTVhOAotZjBhZGQ1ZjdlNDQyYzM1Y2M3ODJjOTJkYjIwMDc1OTZlYzFhNzZkMmQyMmNhNWIwMGY3ZjlhYTk4MTkzMjdhNAotZGI4ZDBiMDMzNjlhMDVkZTk2YjhjNGVhZWMyNTRjYmEwZjM5ZWY2Y2EwMDVjNTNhZmQwZWMzMmYxYzA5MjM2NwotZWZkOWY3NzNiZDAwYjk1YTYwNTIzYmMwMzkyYjA1MGIxNWFkNzBmN2NiNDJmNmQzNjU4NzE0NGNhZTI0NDdhYgotYWE0YjRkOTM3N2E3ZTg2YWM0ODk2ODU4MzNlMWMxNGMzZTE3NjM4YjAwODg0YTQ2YzFlZmEyYjE1OGY2MjM5YgotMWJiZWQ2ZmM2OGZmNjA2Mjc4ZmQ0MjE2YzJhNmQ3ODg4ZjBmMGU1ZGZjOTk1MDk2MmQ0OTY0OTAxYTQ3ZDZjYwotMmUzMjQzZTFkZGU5Y2U3ZjQzNWE3ZGZiMTkzNDlhMzAxN2NlNDRiODdkYzZiYWVjMTgzNTRhMjA0MmM4N2VkNgotYzFlM2ExYTUwNWNjNjc5ZTMyNzg5Zjc1NzgwZjg0MDgyY2M2NTNhMDEwZDE0ZGJhODRkYTAxOTFhNTEwMzU5YwotMWQyNGQ3MDBjNThlNTQ3MThmMWQ4NTM5NmU3YzVkM2EzNjU2MzcwODViNmY3OWMwNjFkZjE3YmZjZDI2MGVhMAotNmI4NDE2YzkwNDJjMjgzMWViMDQxMzQ2YTIyYmM1NGY5ZDdiYTQzZjhjNDQ4N2ZjMjQwYmFlYzIwYWQ0YWFhOAotYzAzZjE4MGI2MTRjNTlkYjZlNWVjMTUzMWFlZmM5MDhjNDZiOTM0MTliOWY1YjJkNGViYTBhNjdiYTQzZDY4NQotMWFkNDRkNGI0M2I3Nzk2ZGU1YzlhMTFmNzI2YTkwZmIxYTM4OWEzNDIxNDNmOThmNDkyMzdmYjQ1MWM0M2ViNQotOTgxNTYyZDkyM2Q2ODQ5MjNkY2FlZTcxYjUyYWI0Y2U2MjY5MTY5YTM1ZjU0NWU3NDU4NGZhNDQwYzQxZWI4MgotNDFhYjE5NGM3OGE1Yjk4MGQwMjFiM2ViNzk5NDg0NmQ5NjNiNzhlYjZlMTQ5Y2NhNzcxM2MxMmY3NzAyMzAwMgotYjhhNzk3YzljY2QwYzJiZDcwZGJlNDRmODFmOWQyNzRhNWZmMzgyNGVlMzRjYjQzMTdmYTQ5NzFkNjdkOTBhMgotZjNkMWIxYjg0OTYwZjBmYmVlNDBlNjM0MWM1MjcxYjViOTQ1YjkwOThmMzA5NTk4NmFiN2RiMmUwNzE0Y2NhMAotMzAxZjZiODM3ODU1OWQ4NmYwYjBkOTVjMmRmZTk0YWM4ZTEwZGYwYzhjMTZkYmExMjUwNWEwZDQ2N2RjY2I4NAotMTZiZmViMTg3ODRiZGMxMDYyNGYxNWRhMWE4ODBmZmJjYmFmYmVkMGUxYzczNjA5NjI0NzgwMDZkYjU5Yzc4YgotZGRjZWU1MjRiNmY5YjE1YTg4NDllZTE5YWEwMGZhM2Y3MWEzYzJjOTZlNjhkZDAyNDhhOTRlY2M0M2E2MGFjMwotODhlNDllMDA1MjUwNzA2ODgwNDg1ZGYxMDljZTE1MDZjMGE0ZWRjNDBmNWFlNWZlMzQ3ZDUyZmY2M2IyNmM3YwotMTg1YTY5OGUxNzEyNDRhYTEwOTU2MjA0OTQ5NDlkNTI2Mjc2MTc1YTdlMTIwMzQwZDMyNDdjYmNhNGUzZGY1MwotNjQxZDZkMzkyYWJjNjFjODVhMjJlMDZjZGJjODljZjM3YmZmZGY4YTc5MzYxYzZkZDY5ZTY3NzQ3NzJmNjk5YgotOTJmN2E3MTg0YTAwZmRkN2YzNmZiOGEwOGNjZGU1YmJjYWIzNzMxMzY2YzNiNzQwNzIwNDRkM2VmMmViYzFjYgotMzMxMThiOGMwOWMwNDE3NGJhZWY4ZGYxYmI0YTFlMWY4NDhjMWE1MTc4ZWM1OGVhNjIxZjZmOGE2M2QwZmNmMwotMTNkYjc5Zjg4NWFjNjU5Yzg4MWFiN2U0MDc5OGE0MzM5ZTZhNzhiYTI3Y2Q5ZTY4MDNjM2Q0ZGYxOTZjNDYyYgotZDA4NTU1YmVkNTFkN2NmNTgyMTIwNDcyODM1NmNmODEzZjU1NDUxN2FjNWUyOGU2YzQwNDdjMDEwMDYxMDYzNQotN2QyNWMzMzMzMDc1OGY3MWJkMTA0MzM2NWJkYTVkMWQ5MjE0YzhiMTU5ZDBmOGZiNjllNDBlNmZiNGVmNDY2OAotYTIyODkzODQzNmRkMjA5ZGRhNTkyNTU5NzE1MWY4NjMzMjk3ODYyNzk5MTUyYjAzMTdiZjIxZjk1NzJmNTAzYgotYjEwODI2YWE3ZjhkMTVmNWQ3ODBlYTI3ZjFiOGNhMGJhM2RkNzMyZDNlM2VmZmNmYWQ2ZTZhZDg3NjlkYjZjMQotZGYyMmFjZTg0Njc0ODFkMTZlOGFmNmY1NjAzMmM5MGM4ZjI1MDBjZTY2YWZiOTRkMzc4ZDg5M2U4NDIwODA0OAotZWMwY2Y5MDA1MDdmMDJlNDBkYTNlOTkzODZmOTM5ZTA1ZDk3MzdiMGIxMWI3ZGZhZTQ3MzQ5NmQwNTZiZTVlMAotN2YxY2QyNTQ1NGY0YjI5MGNjNDNkOTM2NDUwYzNkNjc1Y2VlZjVkYTUzM2RiMjVlYzA3YWRkYzdlODM1NWQ4YgotOGFiYjA5NWRkZDYxYzkxZGEyZGJlYWMwNTc0ZTllYzlkMzE2ZWQxM2RmMDNjOTk3ZDdhNGE5YzdhNmEzYTE2NQotZWMxY2UzMTZlODIwZTEzMjkxMTMyYWU5MTY2MGQ1ZDE4MTIxNDZhYmZhMTM3NzI2ZTg3MDAzOTViNDI3NDUwMgotN2Q1M2IxZTVjYmE4MTdiZWI1NzdiZGRjYjk1NmU4OWFhMmQxYWIyNDEyOGI5YWU4ZTA2ZDlmMGE2ZGFiOTNiZAotZjdlZThlMmZmOTE4MjU1YzM3MjJhOGIwZTg1MjBkZDAyYmE3YzkyYWJhMTNlYmFkOWNlMGFkMGYxNmY3MjhkMAotYWQ0OWJjYjEyYjQyOTgxMWQ4Y2ExYjVhZTI5YjdkNTM5MzQwMWViNTgwMmRiNGQ0NDk3Y2FkNDNlYWQyMThlYwotYzY3NGY0MjE0M2JjMTc0YzUyNWJkNzM2Yjc3ZGMyOGJmYzdlMTA3MzY2ZWI5MDkxZWVkYTYwNjY0YTc3MTc4MgotY2I0MTUwNjQwNmRmZDI5Yzk3NGM1YTE4ZGE4OGI0NzNhZTU4YTJmMWZiZTU2ODBhNDAxMzhhOWQyZmI3OTU1YgotM2ZkZGEyM2IyY2JlN2UyN2MxZGM0YWVhMzA2OWIxZTdlMjUwNjhjOTA1MTY3MmI4YzlhM2EzN2Q2ZTZmZGIyNAotM2JjMjBkMzAzMTk4ZjliOGFkODE1NGIzZjRhNGYyYWNiMTdjMzFhMDQ4OWMxMzY2ZWI4YTEzMDEyYzZiOGNjYQotNGQ0MTZiOTExZGU3ODE1NjNlMjZjMDg1MzhlMDM4ZGQ4ZWY5MjQzNWEwNTQzNDhhZGQ4MTU2ODdkZGI5OWRkYQotODhmMWUyYzU4ODc3MDdjZDRiZTQ3ZjcxYWI4MWEzZDZjYzNlMDM5YmQwOTY5NzczNDg0MGY4YmQwYjg4YWFjNgotMTkxYzZkYjA4OTk0M2Y5OWVlNDE3NGU1ZmFiM2JhZjNhODQyOWUyNzNjNGQxYTUxNDBlMDA3M2Y4NjEwNTQwMgotM2Y2MGRmNjllNjU4MDliN2ExYTVhOGFlZTRkMjViZGRlOWZkNmQwNWEzZmNmNGJlNWYyNTNlNDFmYzQ5ZTEyMQotZGY4OWYyNTliYTk4MWQyNjE3MjA5YjUzZWJkOTJlNDMwYTY5NjY4OTk1OTYxMTc3YjE1OTkzMzUwMTc3MTkwNQotMDhmNjI1YjI2YjUwODVjMDRiMzI1ZTdmYjZiYjQ1ZWViZTNiYzlmNWM1MTE0ZWIzN2YxOTkzNzYzNWQ3MWE3MgotMzlhMDAzOTAwMzc2NGQxMGNiNDAzYjU4YzYxYmY0MTFhYThmNWQ3MTdiY2ZmMjNmYjMzOGRhNThkMTNjYTgxZgotYWNiMzMxNmQyYjViNjc1ZTg2YTk1Y2ZiNTI1MTk5YTIxYWYyNDhhMTI0NWM5MmVlMzc2ODhjNmU3NmE5NTE4NwotM2I0MTE2OTdhMWVhNjY5NGU2Y2NhZGRlZjNkNTcxMTRjZmRlNzA2MDlkZTY3OTcyZWRkMWRiOTVkOTIzZTA3NwotNGJjZTdjYzc3NjA1ZjliYTUyMjZmYjc5MjgyOWIxYjhlYWExNTM2MWZmNzhmMTkwYTA1NjNmZDYxYWFjNDQ1MgotZWUxYjBkMjkzZTY5NTQxNmM2Njc3MzVkZDg4NmQxMGU0NDY3YjYxM2RkOWJiODk5ZjJiZDc1ZjJmMTMxOTNmMAotNDgxZmNkM2I0ZTJhYWVjNmNmMjgyOWIxNTIxZGQ0YjY0NzFiYTMxYWEwYWE0ZDYzYTY0NTYyMDM4OTZhMTExYgotODljMTA2ZjFlYTg1YmZlMGMwMTA0YjEyOTJhMWY4ZDQ5MzM0NTc4Mzc1YjU1ZGVhZTJkNzM4MWY1Y2ZjYzAyMwotNWRkZmIzZDg1NDYwNTRhMGU2ZDVkODFlNDI1NDM4MzM4NWJhNTkzYTdkM2E4ZTBiZWIzNDI4NWRkOTVkOTdjYQotM2ViNTk4YjY0MzgzNDY0NGI2MTFlNmRiNGI4YjQzNjBjODQ3MTIwMDM4NzY4ZTIxODAzMWUwOTdiYTBiZGVhNwotNzMyZjdlNDYwMTU1YTQ5NmI5MWIzMjQxYzc0ZjllZTBjOTllYzdhZGY2YTg3YjcwMWEwY2ViMDdmZWY1ZmE0NAotNDRlMTI3ZGUzZTc3N2MyM2E4ZDkzOGY5ODc5ZGYxZGFiYjdhZGIzMTI0N2E1MzE3NGY5MTlhMmE1YTRmOTIwYwotOTQxNWYzOTc2YThmNGI3MzllMTE0YjJjNDlkNjdiY2VkYzE4NTI2ODZjYjA0MWUzZWU5NGVmOTRkOWYyMDk2ZQotNzZmMWM1NThmNDA4MTI0NDRjNmYwZjRkYWMzYTRiZDIyYjgyZTMyZDhiYmYxNTA0ZjgyMzJlZjAwZGQyZjNmZgotNWM0YjgzNDlhOWQxYmVjYjhjNTlhOWY0NzYzZjI1NjZhN2E1MTNhNmMxMWY1NGQxZmRjMTg2N2FiNzQxZjNjNgotZTJiNDRhYTk1NDc5ZTRlOTgxMzM1MDQ3M2JjNzg5N2I5ZWM1OTJmMDFmOTc2OTdhMTc5NjdkMzQ0YTRiYzlhNQotNjI3ODZmMjhmODdlMzYzOWQwOTE5MjJmNDk5NDY3MWIyMmVmZDQxZmYzZjZiOGE2NTExMTdkMGEyYTk3Y2NmYwotODBhNjljOTc0ZmIyY2NiMzZkZDZhNDg5N2JmODhlYmM2N2JmZDg5MmUzNWU2OTQwZTk0ODkzZTFjZGZkMjc5OQotOGNmY2YyYjM3MzdhNjIzMmU0NzgzZWI0YThhZTU2YjgzZWQ3NjYxMzc3YjMwMjI1YTc1YTFiOTBiNzMwNzllMgotNmFhMzNmZDM3YjgxZjdkNjBkZTYyOTMxYjZiZTlkMTYzNjdhNWZhYjFkMTRkMjgxZDNlOGQwOWRjNTI1ZjU0OQotZWQwM2E0NDlkZjQ2NTU4MDJiYzMyNjUwMTBmMjg2ZGY4NjYwMjc0MGQ4YTg2YWFhMjI4YjljNDdlM2U3OGMwYgotMjJkMjYwMGQ1Y2Q1NWEzMTE2MDU4ZGFhN2UzNDE3NDE0NGY3OGE4ZjcyZTBkY2I4Y2M2NGFkZGNjNTJkZjBkZgotM2Y4YzIxZDljYzA0ZTE4N2JlNTNmOGZlZDRmMzM2MzNiYTAzYWZhMTc4ZmE1Y2U3NjlhN2ViMGUxYjliZjViZAotZGUwZWE3NGRjOTk1OThhNjY2OTZiZjZkNTA3MWRhOTk1YTMwYjgxNDRhY2RlYTExNmNmYzQ0NzI1NWE5OWNjZQotNGVjMDFiYzhhMGIzNTVjMDg4MWY2ZTllYjQ4NzI1ZDYxZWUwYjI0NWUwZjdjYzM1YjllNzZmZTExZjY4MTAxNwotZjc5NGVkOGQ0YzRjN2EwMmUxN2JkMTZhMDIzNDdmMjgzMThjY2FhZmUwNTc1NzM0MDU4MTIxZTNhZDgwNjRlYwotYTAwODZhNThmMjE2MDIwYTJkY2EyOTM3Njk4MWEyNTk1YmZhYzJhMDM5NGQ0NDg5NDliNTJmZmI0N2U1YzVlMAotZDYzNzFjYjRhNDE3YWM4MzRkNmM5ZmEwMDE4YzVlZmIxNmUzOWUzMmM4NTA4OGIyNjZkNzRhZjU2MzBiMjU0NAotZDRjZjQwMzQ4MmM0OTBmODZkMzVmODFjYzQ0YjM0MjAwNDAwYzEwYzZkZmYwMzU0MjNlNzI1ZDQxZDJiNWVlMAotYzNmMDNhNjAzYTE2MTcxMzIxNmFmOTcwMzZlZDM4ZmY4ZDliMDlmMTg5YWQxOTFhMGQwMzM2OWMzZmNkNWEzYQotZjg4YTU3MzM4OTcxZDdiY2I1ZjNmYmY4NzM1YWQ4NDU5NTI0ZDkzYTkyZWFjMWMyYmY1ZjBlNmUxY2Y2NzVmMQotNmQ3MmIzNWNlYWYzNGQ4ZmFjMTc4YTFkZDgyM2NhMDQ0OGVlMWZhMmY2MTZiODAzYzM4Yjg5MjM4YWFhMWFlNwotY2IwNTdlY2RiYWQyODE0N2RhNDZhMzRiOGExZjFkMzg5ZTA4MmNjM2U4ZWIxYTdlNWMwYzkzMjM0MTgyNGMyMQotNTcwZTAwM2Q4YzExYzg3ZDcwODIzNzFkM2Q0ODA0ZGEzMmZkZTExOGM2YzViNWIwODgyOGU1NzgzMjAwYzZlYQotMGE3YWI3MzM0M2Y1ZmQ2ODFhMzExNmZkODE4YzcwNTRhNTE5OTIxMmViMGYzYTlhMGQ4N2JjMzY0NjcwZWUyZgotN2E1MDgxYTFlNDhhNTg3NDhkMjk3ZTAxNGRkNWRiN2ZhYWY3YTI3NDU5ZjExNTc0MWJmNGZhY2ZhMWIzOTVlMwotZTk3NDUyYmRhZmY5MDZhZjljNTJjNTkwODc0OGYxZTEzY2M4NWQxNjViYzg5M2MxZWJhNzI4NDU4YjcwOGY4YQotOWU4OTkwYTZmMjU4YmRhMDk4OWFhZDA5NTllNzMyNmQxZDZiY2NiNTBjNGZhYjE1YTZlYTNjYmU5NDcyNGZjMgotOGYxNzRkZjkzZmJmZjQxYWRiYjlkNGZhYzAxMjRkMzMxNTFkMDY3NTNkNGQ4NzlhYzRmMTVhZWM1ZDFjYzBiNwotYTllODYxZjc5MGExNmViMDgyMWIyYTdiN2I0MmQ2ZjNlMzg5YzUxYTFkN2M2NTI4NTlmZmJlNjY2NDZkNDE5OQotYTYyZWQyOGEzMGM4OTMyZGM0ZDI4NTVlN2U2MzExZDc5Y2VkYmE4YmVlZmUyY2Q1MjlmNGI0NTM4MmYzZTZlNgotYTc2NTlkYTliNzg2ZmU3YmMyZTQzMWVlM2YxMTg3M2FiMjcwOTIwMGI3MTUzNDNjYzI1YzUzNjVkMDZiZTlhYwotODI5NDU4ZmY3N2Y0ZDUwOWQ5YzM5MTcyMzdkNzU5ZGE2Nzc1ZTA5YzJlYWY0Y2U5NjZhMTQxNTdlYTI3ODBiYwotZTMyNDk0NDY1NzNjODJiMzNlYzVjYTE1MDAyMmE4MzMwMWYwMGY0MWVlYTM2OTQwNTliMTRiMmE5YWJjZWEzMAotNjVjZmQwNmI5ZGNlMzgyMzQ3N2JmODA5MzhkMzU1NDI3NjY2YTgyODdhNjVlMjMxYTIzNTdhZWQ4MGQyN2E2MQotNTgxNDBjMmNkYjFmNDRjYWVmZDZiNjI5ZmE2NjE0NDBjMzYxZGRlNzgxNzE1NDA1MjQzNmEzNmJiYzFiZjM4MgotZTMwMjg1OTc5YzQ1NjhiMTgwNDE3NzQwYTE3MTUwOTUyZTNlYjQwOTFmNTgzMDgzZDc1YTA1YTJkOTEwMDlkZQotNDZkYTM5Njc5NGRiYjUyODhlMmEyZTYxOTFkM2YyMmUzMzVmMDI3NWYzM2U5YWYyMTU0Y2RkYmNjOTliMTQ5YwotNmQ3YWFkN2ZkZWRiMjNjODA1ZjA5NzI1YjYwYjVlYzc3ZThhYzk5NTNhMzU3OGIyM2M2MDIzYTE5NmYzNTMzMwotYTM2ZmFiMmNhMTk1ZTM5N2ZjODIzMTg0MzRlOWYyODQ0ZDE3YmJkYzE3Nzk4OWZkOGFmNjFkZGI0NjUxMmQyYwotZjVkNzgyMTk0MWIxOGI3YzFmMWJlMTZkZjZlNmJlZDRhMTY1NWVkY2FmNjMwMGZhODc2NWU5MDNiMDNhOTVhNwotMGE3ZTZkNTU0NTdmNDUxYTgxNzdlMGU5YzlmM2FlYzhkMTc0ODQzZTNhOTllZDY5ODY4OTAxOWU5NmNiNDY4MwotYmIyNGM3MWUyMmY0ODk1NjU2YWNjNjdlY2Q2NzE5NjNhYmVmZmVmNTM3MjRhNjQ1Yjk4ZTVkMjY4MDI5N2ZlNQotMmQ0M2RkZmRmZDU1MzZmN2MyMzlhNTA5MjA3NjUxMmEyYTk4MjFmMTIzMzhlMzg4YmQ1MTE1ZmY0ZjRkMmMwMQotZDc0MWY4MjE4NzQzODA4Mzg5ODhjMTdiZDk3NWZjMzg4YTI1M2M4YzAwNmM2Nzk2M2NlM2M0NDA0YmFhMDc1MAotYzU2NzYwZTM2N2I1NjZlZDEyOTkxMWViMDU2YmVlNDJmMTJiZWM5OTgwMTc3ZjFiMzcxMzA2ODA3M2NmMzRjMwotNzBkNmVlMjAyYzQ5YjQyODA5YWZkMWY4Nzg2ZTE0YTZjNjM3OTRlYjJkZGY0OWQ1YTA2ZjM0ZGUyMzM1NjI2MAotOTZlYTI2ZDU3Yjk0YTkyOGU1MzEyMTQ3ZWNjNDBiYmM2YTIwNGM0YjNlZTlkNGY0MzYxZjhkZjllMWMxYWU2OAotZWY2MGZiZWI5OTMzOTg0MmU2NTI0NzkzNjJiMTlkMzNkZTA4MGY5NjI1YjVjMTY3YmYyYjExNzc1OTI5YjEyYwotZmE5ZTlhODljZjg0ZjI0OWExMDc4ZjU1ODQ0MjVlMmFkOGFjODJhZGMyOTg4NjdlYmVhMWVjNmMwNDI4ZmRjNQotMDFkY2NkZTM5ZTVmYzE0Nzk1OWVhMjU0MjE3MTUzYzBiNTUwZWY5NmMyMjk2NjRjMjIyODZhNzgyN2ViYmYxNQotYzdmY2RjNTdkYmI1OTE0YmIwNDYwYjZlMGMwZjU4Yzk4YjI2NDkyNWQ5OTk2ZDllMGQzMWZiNzBlNjZlYjllNAotZDkyODAxNWYyYzEyYWNkYjdkNzdhNjY0MDhmMjc2N2MwNWY5MzI5MmZhZTQ1NDkyZTVkY2VhMzM3Y2JhYjM0NgotZGE4MmM5MDVkZGIwMTZiYmE1ZDMxZTc0MGI4MTNjM2Q3MDlkNzhkN2FjNTAzMjZmOTBkMmU0YWY0YzFkZDg5MwotZTI2Zjk3NjdkYjQzN2I1MmE3NThkNjIzN2U1MmM0YTJhNzE2MjRkMmIxZjc5ZGJlODNiNmI3ODM5ZGViNDEzYgotZjM0YjkxYjNkZmJjODhiN2IwYjc4YWI1Nzk1OTRhYzNkNTc0NzEwNzRmNzhlNTlhNjRkNzViNGU2ZWQzY2YyMgotMzNmNmViYzg2ZTI4OTQwMmRlYTM5MDdiMGEyNDA2MTg4MjQ2ZThlNDQwNTRmODE4NTRkYWUwZmVkYWVmODk1MgotYzA1YzhmNWM0NTkxNjczMTAyYTBmMjRmN2RlZWE3ZTE5ZTI3ODYzYTI3YzAwYjUxMDY5MGIzMzE0MTNkZjgzOQotNWFlNWEzN2Y4YzZiMjUwODIwNzNiY2VkZTdjOGVjZGJiYmEyYzA5NDY3YWZjZWJiNDhmNGE0ZTI1Y2IwNjljMgotYjdhY2MyNjVmOTg4OTU1YTc5YmE5NWIzZjRkOGM2Y2Y5NDE2NDk0MTcyMzYwMTkyMzQwOWU5ZDgxYmE4YWVlYQotNjRlOGYxZjA5Nzk0Nzc5YTEyNjIwMjBiYzMwMWIxOTY2YTc4OWZhMmYzN2Q3NTIxZGI1MzZjMGM4ZGEzNmI3ZAotOTA2Mzk4YThhNDEyMzBjZGE5NzUwODhmYTVhNjA3MGQ4ODg4MmRkOGRlZTdhZjY5NmVmNWJhMmM1YTUyNWQ2MQotZDM1YTY4MzQ5MDdjNDg0NmNmYzY5YjE3ZWRmNzdjNThlNTAxYTA2MDBhMDRhYjRiMzZkOTAwN2FjNTRjY2ZiNQotMTRhNDcxOTNlZDAxZDRmZDVlM2M4Y2YwNGIzZTM4YzQ4OTVkZTNlZWUxNGRmYmU2MzUxYmJiZWE2NTMwMDQ2ZgotODllOTEzZDAyMmMwY2FmZTUyOGEzM2M0ZTg0ZDQ2NWZlNmZiMDMxYjQ4ZDkwNGM1MTIwZDQ1MmE2YzFmZGZiOQotMDhlMjQyYTA1ZDAxNWE5YWIyNTM2ZGJhZGYwZmZkMDE5MGQzNTVlZGNkMzE3NGNmZGRhMDk3NGUyYTMzY2JmYgotMmEzZDU1N2VkMmY2ZjI4NGNiM2M5OTBjMzA3MWI3ZWZjNjc4YTVkMjc1MThlYzE5MTJjYmFhODkwZGQ2YmJjOAotODI0ZWIxZTdhYzYxMjdhNjdlNjg0MjhmZmQ2N2U2NTBmZDQ0YzllYzQ0OGEzMDkwNTZjZTQ1ZTRhNGEyYjc2OQotODE4M2FjNDE4OTgxZjYxN2RjNDY5YTU2NmU3MTNhZWRjZTJiYmM3Y2RkZGYxZjdhZmZjNmQxMWU5NDc1NzEzMAotYzRlYzdiNTVkYmE3MzU2YjIxZTUyNjdjNWVkOTlmNDI3YTE5ZGFmNDc2ZTQ4OTkzZTg1NmM4NTJkMzVjYTFiYgotYjMyZDU5Y2U2ODhlZDE4NGZhOWVhMTYyMmMzMDZjZDc4OGQ2MzcyYzViNGE5NGIwMDFmMTk4ZTMzMjA5YmI1OQotNDZhZjFlZjdiMDY2ZDA0OTgyNWJiNzgzMThhMzhjYTIzZWM5YTkzYmM0YjRiMTI4MDZjMWEwZTViZTE3OWUzZAotMGMwZTViZGE2NTRlNTA2ZTc0ZTBlZjFhOGIxMmMxOGJjM2YwNDFkNWU2MWE4ZjAzNDM2ZjE0NmU0ZGFhZTNiOQotNmI4YzdhZTEzOWY0MmU4ZGNmNzcyY2I1NzQyMTA0YWFmNzc2ZjNkZDE5YmFkOTIwZGY3N2I0MmFhYzY1NGQzMgotMmRlMzc3OWM0MjYzOWI1MDA1OWQxM2I4MWMzOTA0ZGY3NmEwYWI0NzA0NmEwMTMyMzc4ZjkyMDEzNTlmNzFjOAotMTJlYjQ4MzdiY2JmM2YxNDk4YmY4YzdiMjI5OGU2YjJlNTI4Zjk4OThkZGZhZjc1YjUzNThhNzNhNjdlNjMwNwotNzA3ZmIxM2IyMzYwZmZkYzU2NTllZDhlNzBlY2JhYjcxMWQ4OWY4YzY1NTg2MjJkNjc3MzdiMTEwOGFkNTEzOQotYjEyNmE2YzdiZThiMjU3MDlmYTdjYzJhNjI1YTA3OTZiN2QwOGIxMWYwOThlZGI4MGY4YWEwOGE1NjY4YWU5MQotNGZmMWM0NzBkYmNjNzc3NWE3M2ZiZDg1N2NkYjlhNWQwYzEyMmQ0NzY1Y2FhOGQ5ZDM1NTE0MzkwYzliMzM5YQotYzA0YTc4MzQyZTE4NmU1YzQ5ZGJhNGNkOWFiMTY1YjRjMTM5ZTc2Yjg4YzgwN2NjNGI1ZGI3YjUwNjNjMmY4MQotMTY3MjE2NzA0OTdhMDE4M2M2NDNjNWE3MGFiMjQwNWQ1ZDhiNjc3M2E0YTJkMzliM2NkMGQ3NjNjMTJlYzI5NgotOWIzYzNhYjkxNjY1NmZjY2E1ZDcxNWU3ZGFjNzk2OTM3YjJiNmQ0YWRiMjUxZmI3OWIxODNlNmVhYjIzNzk2YQotMGJkMGJmNWJjYWIwMzUyOTQ2N2EyNjU3ODE3MTZiMDE4NjU3M2I4NjJiMmEyMDU3YzQyN2Q4NWQ3YjU0N2M3YQotOWU3ZmRmN2E2NzQ1ODdkZjcwOWZmZDBhNjNkMDg1MmVhMGQwMmMxM2U4MDM4NzYyZGU4MjM2MjczOWRlOWVkZQotMGRiNDI5NjQyMWQ0NjJkODI4NmUyMTUyYWE2NzI5OGM5ZmY1MTFlOGRlMWEyNjA4OWQzODNiZGJiZjI3MDY2YgotZjMyMjczOGNkMmNmMTk4YmRlZmU1NjZjZWQxODA4ZGFmYzAxNWM4YWU5NzIxMTc3NzY1OTRlOWM1MDZhMzIyMwotZDRjZWQ0OTVkNjIyOWM5YmVjMTdjNDcwNzE0MTVmODA0ODJmOWVjYWFlYmE2YTEzNWQyMTczMjU0ZGRlNmJlMwotZjBjZTlhN2E4MWVjMmU5YWY0YWRkODU1YjA4MzA5ZDM0ZTc4MGFkZjBmN2M5MDI5ZDJjZTBkNWY4MDdlZjBlZQotNTMxMjE3NDUwYzgyYjdmMzY0MzQ1Njc3MjU0OWFjYzJiYTZhNTkzOGM1MTdmZDc3NTExNGVkNDRlYzY5YTQ1ZgotZDkxMTBjOTY5ZWRkOWU2ZjhiNGJmYjk1M2FlZDc5YTFkYWY0N2M3MjM4ODcxZTRkNTM3MTAwYzRkODk4MWQ4MgotYTIzNDRlYjdkZjViYWViYWQyOGUzNDg3MGQ1MmQ5N2E2NmRmYzc1NzQwY2RhNmI0MDNjMTk2NGMwZmViMDM0ZAotZDNlNWM4YjRhMzdhY2I5ZjU3MThmN2I2YTNkMjY3Njk0ZGY4YmFhYWJkMzgxNTRkMTZjMTYyZWJlNDNiNDczZgotZWMxZjA2MDg0NmVlODQwMmQ2Nzk0MmVlMDgwZGFjOWIxOGViOGIwOWQzODRhYzI0Zjg1ZDI4N2VhM2UyYzU5YQotMGYyYzFkNmJhZDM2ZTI2MmUwMzFhY2QzOTlhMmI5YTc5NDA5MDhkNjVmMTQyZmIyMDk0MTZlODkxYTZhYmVlYgotMzg5ZTJkZjAwMjQzNmQ0M2ZhMTE2MWI3MTM4MmQxODQyNzg4YWYxYTllNmYzOWVkNTZlOGJmNjM5OTFmYTc5MAotYTUyY2UzMTJhYWVkZTkwZGYxYmU1N2UzYzExNTFkZDAzNTBmZmU3ZTQ3NmNhYzVmMzRjZjg1MDViY2JkMjVmMwotMjlhZWVkM2E1MmJmZTFmMTAzNjZkZmM0YTE1ZmUyMTJiMWNjOWRhNzZjODI3MmQ3Y2U4NWMyOTMwZDc5N2I4MgotNGE2N2RlNTVjNTBkNDVjYjM2NDBkYjJhNzllY2I2NDdhMmZkMmQ5NDgxMTRlZWE5YmFkNjMxMjMxOWY4ZGI1YQotYTI5ZDYwYjIyNDM5ZDQ1NzYwNzUxOTA0ZjVkZTVkOGM1YzlkMDIxMWFjOWQzMGI5NDU5ZGQwNWVlZWEyNDBmMAotOTdmMGMyMzkwNjhjNTE0YjgyMTM2MDkwMTRlNmJjNTA2MzNkMGVjZjc3NGMyMTBhZWU3Yzc1YTViYWMyNGU2MgotODEzMTgxZTRkMDQwYWQxYmQ0YmQ0ZWM3Yjk5YjhhMzdhYmQ2OTRjYjY3NDgzZDFjNWRkNWMxN2Y1NGVhN2YyMAotNTBkMGVhOGNlMWNiZmE1Mzk1ZTYyZTEwYzVkMTdhNDIzYWM3NmJmYmEyNWEzOGZkNDc0YjViNDExN2NjZmNjZAotMzBhMmZmYTQ4NGFmNDI5MTY4YjFiNTY3OWI2NzU0Mjc1NWU5ODliMzkzODdmY2Q5YjFkOGY4YmEzMTNhNzU4YwotNTg2NDFmMzRjY2JjOGYyNTU2YWQxYjE3YzMzZjYwMWVhNzZhYzc1ZWU2YjY4MWFlZjEyYzA3MTJhMTRlN2I4ZQotYThhNWJkMzE2MjIzZDUxNDJlOGI1M2E2ZjgxYThhNjA4YTNkYzMyZjIwYzVlNDE3YTZhZmYwZjcyNWRkNzg2NwotNDI5ZmRjZGMxNmEyMmVmNjExMmZkZmM1MjgyYzYxYTFhYTliMTM0YzFiNDIwZGU3YjM1OWJlODM3M2NmMzcxNgotZDdiM2FlODMyZWMxNWUzMDVmZjZjOGU5ZDQxOTdmOGIwMTUwYjMwZTFiOWU3ZjE1Mjc1YjRiN2E2NWRmYzYxMQotOTdjMGU1ZjkxNTYxZjNlNjIwMzk1MGVkZmQ2Y2VhMjBkMDY0OTA3MTQ0MmIyOTE2ZWJjZTVmNGQzZGE3MzkxNAotNWEyYmZlNmQwNTU1ODBhZjEzNGI3ZGRkYmI5YmFmOTQ3NzQ1NGVlZThhYmM3YjMzZWVhNTAwMTAyZTM5NTIxMgotNzhkMDhjMDhhZTQ1NWJjMGZjNWJmNWEwYTU3N2U1ZjVmYzcxNDkwYWRkNWE2MjNjY2NhMTM0YjYyYzE5ZDNhNgotNDAxOTQxNWVjZWUwMTY4NjIxYmUyYjQ4NTZlZjNiMzk0NGMwZGI5YWVmN2QzZTkzM2EwMzQxODQ5MzRiZmQ0ZQotM2ZlMjFkNGQyNjI1ZTY0NjRlOWZmOWNjMjVlNzkzZWI3Yjg3MDFkM2ZhMDdmZjlhMzAyMGY3NmQ2NjhkMDgzZgotNTljNmY2NzUxMTc5ZDYwZWIxN2I5YzRlMzVmMzgxNWFhNWVkMzc5M2EyMDMwZDMxN2YxNjEwMjE1ZmE5MjBhNQotNWZmMjlhNjdlOGU2ZjE4NmYwMGI1Y2UxNjQ2NzdlYjE5NjFlZWVlMzViNWE3ODkxZDQyOTY5NjdhOWQwOTZiYwotNzZiMGQwNzJlYWJhYjdlYTc1OGRhODlmYmRjMjViODI2MWQ5ZmEwODA5OWI2ZTg0NDk0ZmUwMzRjM2VkZDVmMAotYzQ1ZTY3ZmZlNTg4YjI1MzJlZmIzZGQxYzM0YmU5Y2UyOTk3MTJlYWMwZTRjNGNiZWU2ZjMwZTk1OGM5ZGVhMAotMTVjNWM0ZmVmN2NkNDQwZWE5ODJmOTFjMDc5Mjg0NjM4MDdmZTA3ZjI3ZWY2MWE1ZGVlZmE0Nzg3OTg0NzgzNQotZDRlNTBhYTFkZDBhZDJiM2QwMTA2OWNjN2I0NzQxYjNmNjgwMTMxZjdkNWNhZmM2YjM5NzhjM2MxZDYwOGFjOQotZDI0MzQyMDkyNzQ2NjI4Y2I3MWZhMDFlM2M2NzVmMTQ0NjNmOWVkZDRjMzM5YWRhNDFiYTRiNmEwZmFhNTExNwotMjA0NDYzYmM3Yjk0ZDAxZWRjMWIzZDU3ODE4OThjODU1MTY2MTdmMjliNGRjZTJkMzJjMjY4NmRkYmZkYjgzOAotZjY3YjA5N2JlNjAwZjZhZWVmYjZlY2E1ZjcyOWI0NWJlMzA3MjMyZjkyNzMxYzEwYzMzMzA2NzJjOTU4NDE0MQotNzE5MmU2MmEwZWJhZTgyOGZhZGQ3N2JmYzJlY2RjMWU1NjJkYWY1NjYwMzU0ZTBlZGQ1YjcxNzdiZDhlOWQyNAotZjc3ZTUyNmU2NDkwNDRjZmQ0OTYzM2Q0OGNlYTY0ZGU3MTRlNTk0MzhhZDk4MGUwYjFmZmQ1MWVlMTk2OTJlZAotNjY1ZTJmZjMzMmJiNTRiZGJmNzUzMTZjNGIxYTM5YzUzODMxMmZkNjQ5ZThjNDYyOTk0ZGM4ZjE0YmYwNTZmZgotMDgwNGRlNzY0NzRkMGVlMDg0ZTM2M2M4YjcwODFiMWMwOGUyNTJlMDVlNDk2NzllNmM3YWM4MWY0MmU5MzcyZAotZTVhZjY0ZjU5YzRmYjYyZjNlMmU3YjE2ZmY1M2JiYmMwMDZlM2Q5YjBmMjk0MzRkYjVhNjMyMTA5NDQwNTNkYQotYWI1NmIxMDc1YTBjMzgzMjIyMDc1MmQxMDRmYTE3NzBkM2FjZmJjMzE3MDRhMWI3ODUyYzA3NzA1OGY2MTZlMAotYTQzNzNjMWM5MmM3YjYwNTY2NjkxNTczNTAyZTlhOTJkNTgzYTMxNjNiZjMxZmMxMDBjOTJlNjQwNWVlNGQ1NAotMDlkMjNhODMyMjViZjZkMWRlMmM3YmVhZDAxMWFkNjQ1NDdkNjgzNWFjOWE3Mzc4MDMzYzg1NTkyYTBjMzQ5NwotYTAzYzE2MTkwZWJkYWJiNzkyY2EwYmY4MDNkY2JjM2JkZjBmN2E1NzFhYWUwMGY1OTZlZTAxZWI0NzZiYWQ5NwotM2EyN2EyMTlhYWZjYzBmYTI0NWM2NzMxYTJlOGU1NjFjNjNiN2JjMzE0N2I5NDMzYTgyMDNmZGRiNzEzOGIwYwotMTYxMWM3ZTYyMzc1ZjJhMTE0ZjdiZmFiMzZjYjFhOTRiOWUxMGNhNjM4MzNhYjI0NWFmNTk1MjE3Nzc5YmM3ZgotZDEyZTY4YTY1OTE5ZWNhNGZhZTcyZjc1NTY2OTU4MGFiMDAwOTQ1MmJmMDg2ZWE4MzVmOTFhMGQ1YjM4NGI0MAotODJiZDUxNWYwMDY4NjViYmVlMmM1MGRiNDNiNDQ1N2E3OTM2OTM4MDZiODZmNjhhMmIyNDE5ZmMzZTkzN2E3MgotYzZmNDE0ZGUxNDhkMmE2MmE3MWVlOWZjYWI3MTBkNmRjMDhhZDZjNGFjNDQzMzY1ZTdhNzg4NDNmODBjZDc2OQotYzU2ZWZlY2MyZDYzNDg3YjVmY2VhZDFhYWFmOTQ4MWE3MzYxNzIzMzg4ZjViNTFjMmQ5Y2VhOTA0ODZjYjlmOQotNzlmNmY1ZWU3MThkNGE0OWVkOTFjYjA5MWFkY2JkMGU3YjNhZDk2MzM2OGM5Y2RlODc3NjY2YTc0MmNmNTA3MwotYWFmNzk0MjhiMzA5NWY5ODlmYzFmYTZmNWFiMWQ3MjRkOTJjMzNjMTMyNWMwNWEzOTQyM2I4YTgzYmJhOTM1OQotOTc3OTNmZGEyODA3NDBhZWI2YmUzMTkzYmU1ZjRmZWVjYTJhOGYyOGVmYTljOGUwMTZmMGZjODdjOGYzMzkyZAotNTcxNWI5YjlhN2FhM2M2MWFjODQ0NjFlMmMzMjIwMzcyNTY4YWFlZDg1MWYxY2M0MDQ4MWUzMjYxOTdlY2FiMQotZjNjZDc5MmZiZWIyN2E1OGE1Zjg4OWE1ZjYzMjE0NzMxNDhjNmQzMTFjYTg5YmU5NjAzOWFjOTQyMzcwMGQ4NwotYWIwZDdlOGI4OTcxN2QxYTYyY2ExNGUwMWY1MWJkNzc4MzJiYjZkYmY3NmIyMDFhMDRkMjIyODUyMDUwY2M1YwotYzZhNDk5Njc4OWEwYmZkNmNlMzY0NTkyMzAwMjgyZjEwMmU2NmY0YWU5ZTUwZDYwZDg4NmNhY2IwOTlkZjk2MAotYzQyZTIyMTMwMTdjNTY3ZjI3MzI2ZTY3N2JiZDA0YTIzOTYzMTk1MGI1NjZlYjM5ZTRmNjc1ZDJlOTg5ZjU2ZgotNzRkYTNhMDQ2OWQ5ODhlYTAxMjJlY2MzNjcwZDQ1OGFkODJiY2Y3YWQwNGJmM2NhOWIwMGQ3NmVlNTY5Zjk4YgotYTM3NTI4NWExYWJiZmYyNTNiOGYxNzlmNzFmNDk2Mjg2MzMwZTM2NDA0OWM3MmVjYWQ0ZDgyYTkzM2FmMDE4OQotMDNkZTVlNGFiY2ZjNjM3ODAzMTY3ZTU2OTExZjgyNjczNWE3YzQxZTc5MzZmNGJlYTE0ODM5N2JjZmIxOGNkYQotZmIwMzE4MmVkN2M1MTFhYTlkZTBjNmU2YzgwYjI0Y2I1MzVmMDNlZTE2YmJjYjUxNGQ2NWNhOWFjMmVmMTVjMQotYWExODI1NzU5ZmM0ZWNhZmM3YzBkOTQwMWYxMzliM2YyMGVlOTE1OTU1MjY4NTc4YTkzM2IxODRhODZmMjAxNwotMDNjYmY0ZGI3OWJlMThjMDljOGNiMDdkODU3MzliODY1M2FkMzdiOGMwYjY0NzE2MWU1Y2FjNzQ2YjNjMGI5NAotMmFlMmEwNTQwZjM4ZGJlZTEyMmNhZDBjZjczOWVmMWI0OWI2ZGJiZDVkMDhjOTdjMDRkY2EzMzAzMGYxODcxOAotNTgzMzM3YTAxNTM5NWUxZmE5MzJkZjAzMjhjN2RkZDk1NDZiNzgxMmJhMDZkODJhMzVmODExMGQ1NWZhMzc3ZAotZmE2ODgwZjUyNjQ1ODkwZDU4NDc4ZTRlZTNiNzJmMDhiMmQ3MTEzYjI0NTM3MjliMzdlNGZmZmFkMTNjNWY2MgotMDZiM2M3NjdhNDVjODBiZDQ3OWQxZTI0ZGY2NjBlNDZjODNjNDgxNjZmY2NlYzEzYjljYzRlNjJhNmFhYTgxMwotN2M0MjQ4ODVmODNkNzY0N2I4MDg0OWMwYTc3YmVkNTYyZjEzNDAzNGNkYTlmZDZlOGQ3ZGVjOWU0M2YwYzAxOAotOTI4N2RlNzU5Njc2ZjIwMDA1NTU2Y2VkYzY3YzMxNTA5YThiZjU2YTVjOTcyYjVkMjQ3ZjIxZDhiNmE1ODk1MwotN2Q5MjEwMTg0MTE2NmQ3NzgxZDRkODBjZGMzNWNhMzgyZDhjMmRhYzNlYTNhMzRmOTNkY2UwZmY4Yzc2ZWYxMgotMzkwZDVkNTdkODhmM2JjMDBkNDY1MTNmMDM1OGM0M2EyMmM0MTNkOWE2YmE2YjNlMTM5MTM0NzRiOWU1M2JmNQotMzExMzZhNWVkZjkxOTI5NjVhY2E5OGUwNjMxNmMwNWZkM2Q2ZTg4ZmUwOWNjMDhlMzI3ZWQwMjdiODFlYjE0NgotNjNlMzA3M2VhNWQxZDU5Yjc0MTQ5YzVmNTI0MmQzY2IyNTNjMzZhODRjYzgzN2Q3NmIyYmEzNjEwNGFlZjBkOAotZjlmNDQwNGQ2M2M0MmYzZDYzNWRjOTE5NWVhNTgyYjU4OWNiNWI1NGFiMDFhZjlhZTUzZjNlYzk1OTkyYzA5ZgotYTViZmU4NmU2ZWY2OTQ4YmMzODc3MzBhOWNmZjBjZGQzNjU2NTBhZWFhNWUxZDUyZDhmODhkZDQ5ZDM2ZTZmMAotNzg2YzdmNGVmOGMyYTVhMjQyZTg0Y2ZkNGRjNTBhZGZlYTBjMmFjMjc4Mzk2OTliOTJmYThmZWI2NDM2ZjJhYQotZDAyNzEwNzc3MDgzNzIzY2E3ZTQ4MWY4M2I2MzdmMTlmZmI3NTExZGUyMjNhMGEyNjEzMjQxODllZGIzOGQ4OAotNmZmNWNiMTM1NmU4ZDU2N2FmZTc2Zjk2Y2I3MmY4ODAxNmUzOWU5OWFmNmFhZDQ5OWFjNjBjOGEzMjA1ZjI1MwotODJjMDMxMmUxZjJiNmVlN2IzN2QxNzhiZDRlNjc1NTAyNzZhNzQyMWI0ZjUxNGZkMjkzYWQzMmJiMTEyMTIzNAotYmZmOTNkMjI5N2RkMzJkZmRkN2U3YmE5MWMwNTQ0Zjc5ZGZlYTk2NWY0ZjY3NDk0ZjNkZGQ5N2Q3ODgxZmNmYgotMjBlZDcxZjZiNWNkMjdiMTJkMDQwOThhOTI5M2UyNzMxNDg1OTBmYmI2NWY2ZmJhNjNlN2JjZjE0ZGZlNmYwYgotNTFmODcwYmUyMDE3NGY5OTEzMjlhNWVmM2QzYzlmY2UyMDY3OTlhMDFjYTEwMmVlNzk5OWMyYTk3YTE5ZTc5NgotYmI1Zjg4OTIyYjc2ZjkyMmQzMDJkZDgzM2VjNTMyMDIyYjEzZWM1NzNiMzc1Y2Y3NWU0OTcxOGIyMjc4ZjJiMgotNGNlOTg2NWYyMDkwMmQ2MzU4NDQwZWZjOWVhYjZlMGUwNjlhYzdjMTkzYzg4YTA0NGNmMzNmNmEzOTM4OGY2YQotMjk2ZjQyYzYzNzUzM2NjNTAzYWRmYzcxYzVmODk4YzQwOGE3ZTU0Nzk4NjhlYmQyOWM5ZWQwMjkzOWZmZDQ5YQotMjgxMmJhYTM1NWJlNDI5ODU4ZTBjNmFhYzYwODE3ZDY4NDc3OGI3MWZiOWE3M2U3YWM0ZmNiMDc4YmIxYTc1YQotYjQyNWVhMDlhZDg1ODVhYjNmYWQ3OTQyOTMyMWE4Zjk2ZTJlMWYwMmFkNzBlMmZkYmVlZTYyNWJiNDM0YjBiZQotZjhlYjk1N2Y4MTdjNTY5OWM3MjkzZTQ3ZGFhNGVhZDZkNDdmMDBmYmI2Yzg2NzRlZjFmNzcyOWNkYjE5NzQ5YQotY2E5Y2QzOTlhNGFiY2YyOGZmNzFlZGVjZWNiMmE5NTVmZmJlOWViZjRiZGFiNTYyNTZlN2NkNjYzMDRlZDRhYgotMWIzZmRkZjY0MzEyOTZhYTY0MWE4Nzk1YTQwMDZhMDQ5ZmQzYjM1MDc0YTg2NWM5MDE2MzZiNzA2MTllYzI2ZAotYWFhYThjOGM5MDYwOTM4MzM3MTQ0MjA5ZjNlM2RlMDFlOTIyOTNjYTg5NTgzY2JiNGMyZWRlYzA3NGJiNGMwNQotMTUxMzBjM2ViZmQ3OGRjNjg3ZjBhZDA5ODFjMGQyN2ZjYWViMjhmNDcwMTkzY2ExM2Q5ODI3N2RiZmNmYmYzOAotZjgzNTNkYmQwNDM4MGFiZWY3MTc2YjBiNDE5OWQ3MzE5ZWJmZDg4ZWNlMjE5YmE2ZWRlYzU5ZmQxNTg5ODdlOAotOWFkYzAzNWI4ZmIyMTQxYmUwZTBmMjVkNTZlMDc3ZTU5OTJlNGY5NTY0MGFiY2E3YWVhYzNkOTI5YmUwMmQ0MAotOWE4NmRiY2MwNDM2MzdjNWUwZjFhNWExMjU3OWU1N2IwNDJiMzg2YmU5NmM5YThiM2M0ZTc5YzhkZDI4YTUyYgotYTExNTk3Mjg3ODVhNzVmMmU1NzliODY2OWEzNmE5ZjllNzgwN2ZmOWQ1YWEwZDg2NTI2MDlhNDcyNjRhMjAwMwotZmQyMDJiYzhmZTljZjgwZTJlZjA1ZWE1ZTVmYmFlNjc2YTc3YmJkYzQzMDhhYjkyZWIwZGQ5YTk2MGY0ODY1YgotODMwNWVlZjQ3YWJjMjM1MzI4N2Y1MmM3NjZlYTFjMWI4NmZkYWNmMDk4NmU1NmE4NzQ2MmFjODIwZTYxMDUxZQotN2YyMmNkOGVhN2RjYzc4MzhhNDVhMDhlYTNmZWMxMDVkODBmZTVlZTVlODc3MzJiZmMyZTlkNjY0YTdhYjQzYgotMDUzMjE1NTdkNjljZWVkNmI2Nzk3OTdhNjdhMGMzOGI5ZDEwMWJiZTg3MGQ3NDY1NjgzMjVjNTJkNGNhMjU1YgotYjIzZjk2NzJjZTJiNGUzZmU5NDRmNWRiYzM4OGU1NzVhYmQ4OTdkOTY5YWMyYTgxOTE1ZTNmZWMzZDc0MDllZAotMTRkZTFlNGNmNzczN2I2ZTQ2ZjZjNzExNDJkYjA2YTc5OWE3MjA4NTM5YzY0OTI0NGNlNzNhNThmMjI0N2U4MQotNGYyNDFhYmE3NGQ2YWU1OTNkNDdjMjI3MTM3Y2NkZGNmMWY1MjNhNzMwYTIzNGM5MWFjM2FlOGE0NTZjYWQxZQotOTFhOTQ4MGM0MzhiMDQ3YmU0MGJiMmU0MDM4ZjhlYmMzNGVjYzNhODAzNzQ1NGI3MzQyYzMxNzg3MWZjMWQ5NwotNDJmMjZlM2Q5NTZkYTc2NzlhMDcyY2FiOTZiMjdmYjJkZGY0ODBkMmY0MGVkODhiMmU1YjBiODI4OTJjODMxNAotY2VjOWJkYzEyNDMzMTU5NzE0ODkxYjg1OTFhMDUxY2YyY2NlNzU4MGFmNzRkNTA5NmY1M2E2NTM0NzQ4OGJjYgotOTQ4ZmIwMjhmMzEwNTc1ZDM0MjkxMjNlYmVjZDliMDlkODNmMzBhYjhjOGFiNjVkNDlkNjkxZmFjMjdlMzYxMgotNjZlYTA4NjM0ZjRjN2QzYTY0OGVjMDY4YzJjZjMxZjExNjk1MTkzNDg2NGRjYTI3NTVkYWFjYjZkMjI4MDNmMAotOTQ4ODExN2VmNjZlOWIxMjY2M2RhOWQwMGEzZWIwMjgwYmE0MTJlNGI2ZjYzOTdlZTc4MDBmMjUwZmJmYTAyMwotMzE2MmFkZGNjYTRkYzIzMTkwYTUyMzk3Y2RhMzI4NTI5MTg0MmEyYjI2OWM0ZTA3ZjE3YTAwMzVmY2JlNzg1YgotNmE1NzBlNGI3NTY5MjY1OGVkNDdiNmRiZjI5N2FkZjFiM2IxNjQ3NDBkMWU4NTFmMDhkZWNhOWMwNWEyNjNhOAotMzM2NGM1NDRjZWNlNzA2ZTc3YTMyZjZkNWQxMGY4ZDQxNzBkNTI0NmQ5MmMyYzlmYWU0NTdlMGY1ZTRlY2Q0ZAotMDhiNGVkZmQ0MmExNzkxY2NhNDEwNzhkNWU1MjA4MDc4MTcyMDYxOTNkOGE2NDllYjM5YjY0YzgwZTEyNmZlYgotMjQwZTE3ODRkYTNjNjYzNzgxOTY4MjgxMDRjNDllNWZiODY0NzVhODBjMjFkZTcxZTBhYTM2YWM1ZTUyOWFkZQotNDI3YzAzYzIyMzZkYjBkZWNhOTljN2M0ODZmZjQ2M2E3MjcyM2VmYjUxOTI2MzkxNmU3M2MyNWRhNjI1ZDBmYgotZTQ1MjU4YWQyYWJmMzQ0NWI3MmNiZjNlN2U2NGQ1MDcxOThmNjY2ZWRlYzAwMmUyMzNjYzBhZjZhOGMxMDk1YwotM2NkMjMyZTJlYzUwYjJlZGUzZTA5YjYxZTI1OTk2YjRhNjRjMGVlYzlkNTUwMjViMWY0N2U1M2UwYjEyOGJlZgotYTM0NjQ2YjRlMmMxMzY5OWQxMTJjOTU4NTkwMDU4ZTZiNjA2Y2JkOTc4Y2JiMGVmNjllZWUzNTBiYmY3MWZmMQotODIxM2E0MmQxMzVlNzdlMmM1M2E4MTIxYWEzZGQxZTkwM2RjMGU5NjE4MTBkMTAzYmQ3MGEyYjQ0OGYyOWVjNQotYzNkOTA3ZDcyNDNkNzZjNmFlMDRjMjJhOGZiYzZjMWEwNWY5YjllYzk3Y2JiMGU3NjkyOGY0YWEyNmM5MTNlMAotM2Y4YzM3MWVmYjYxZjM3MDc1MWVlYTZhZjI1YTNkZjRhYjNkYTNlNGFhMjYzYzI0NzczNDNlNGIxOTkxNTIxOQotYzRjNTJjZjQzZGJmMzczYzMxNmI4MDYxOWY0NzlkOWI1MzFlNjJmMjZlZjlmYzZkYTEzZTljZjBiY2U3NGQxMwotYzI4MzJmMWM5ZDk0MzI0MzdkMjUzZGNjZjczY2Q2OTkzNDI1MjFhM2NmZThmODVjY2RjZDIzZTliMjQwYzk2MQotZmNlMTVlZjc3ZmFkODQzODY3NGI1NWRhNjM4ZGYyNDkyYjI5ZmMxYTAwMzg1OWYzODJhNzc2MjYwYWU1MDY3ZgotOTNkZDE3NjE4MWMxMGM0YTQ1ZThmMjM3YzVjOTc4MWUwMWQyZTFlMDg5MGUxYTZlNzVlMmJiZmRhNGQyOTYxMwotZWZkY2RmYjIxMzE3ZDc3MGZhNmMxYWMzODAwZjMyOGJkYjgyYjQ4YjczMjBkZGNmNjRhZGQyMzM3NDk3MWFmMQotNTA0NzBmZDAwMmMwMWVmNDEyYzViYjQ5ODQ3Mzc4NDBkYTVjOWUwZTRkNGIyYjc3NDcwNTZhMzg2NWFmNmRiNAotZjRiOWNkODRkMjdkZDJlNDVhYTBkOWYzMmQwY2Y1OGE1ZjFiYWEzNzQzNTkyMjNjZmRkMDdjMTgwMTc2NjBhMgotOTIyNzQwNGVlZjBhYmJkMGUyOWJkODY5ODc1MmU4NTQ0OGE1YzNjZjU5NmRjODA1YTg3ZmY5MDNmZjg5MGU0OAotYjc5NzE3NjRmY2Q4ZjkyMWVlZmNjNTViMmQyMGNkNTkwOGE2ZmEzNWQ1NmJlYTk2YTM5YWI1MjFkOTg1YzUwYwotNGUwMjEzYjMwMzI1ZDI5NWEwMGQzMmQ5N2U5NTY0Njg2NzEyMmRiZWYzN2EzYzg2NmZkNzJlMmYyOWVkODc1OAotYTM2MmE0ZjE3ODc1Y2JhOGJlMjNkMDRhMzU3MTRkNGMyN2M0NDE3MDM5ZmM4YmNkMjUzNjVjOGE0YmI0MTgxNQotY2UxZjc0OTQ5ZDZiNmFhNThmZWYwYzRjYmI4ZDU0Y2U5MmQ2NWQwYTY1ZjEzYWM2MDYzZGU0YTU1YmE1NTYxZAotNTA5ZjJmZWMxNTViMjE4MWExNjllY2YxNGYxZmFiNTg3NTY5ZjI2MGMwY2FjZGVkODAyMWVkOGQ3Y2FlNWFkMQotMzMyZjEwNjFlMTY2Njg2YjQxMjc3NDk1NTk3YzE2ZTcyOGQ2YThmZjQ5ZjgyNGRmNTAzYTYzMzIyYjQ0MjE4MgotNjY1YTEyOTAwZGQ0OGQxMzYxMzQyNTc1ZmRkNWM5ZDlkZGQ3YmM3M2E5MzdiMmFjNjI1NzI1NTQxNDAyOWE2NQotOTAwMTE5OWU5ZTFmMTZjZjNjZjg3NmJlZTAwMDMwMjkzNTQ5M2FlOTk3ZTNmMTEyNDIwZDdkM2YwNjczOWI3OQotZWRkYzFiZjdlY2ZjNTMxNjU0OWQyZmYyMjhhNGUyOGI1MjJkNmNmYWFlMzE0OGJlYTI3NTVhNDViYzI3ZGZjNQotMTI4YTlhMzg3NzdjZDNiMDdmOTFlZGFjZWRiYTI1NjViNTUyMThkNzg5MWRhODYzMjQzY2Y2OGU3ODAwYjgyZgotMDM0MTc0MGExZjVkYzZkY2YwMTI1Y2RhODQ0ODY3ZmU0OTQ1MzI2ZjEzYTk1NDQzMDc1M2EyOGVhODQ5MWJkZAotYzU0NWU3MWU0ZDUyY2FiYzNmMDVkY2U0MzQxMDFkMzZhNjIzMjhjNWZlNmI1ZGYzODY0ZjlmNWFlYzIyZjM5OQotNDNmNzJmZWQwODFkMzcyNDMwNjQ3N2EwNmViOWI2ZmNjOWZhZWI3N2U2MmVlNGUyMGNjNTE2MDBiMWJiMDgxYQotMWM1YTAwZTA2NGQ1NzU1ODM4YjI1MTgwN2FlNTdjODU2NzVjZjA0YjY5YTY2YmVmMGMxOWMzNjQ5NjlkMzU0NwotNTVlZmNmMzFmOGFlMzQ2NTgyNDYyZTk4NmUzYTFkNjUzYzIwNWU1ZDU4ZDIxZGU0NTUzODMyYzg4NWU1NDNiZAotMTFlZWEyZDNjMDhmODgzMDAwOTY2Yzk5MjgxMjUxZmJjMjkyMDkxNzcwMDAzNzI3OGQ0OTM0ZjM0NDFkZDUzNQotYmRkM2M1MjExMWVkMGIyODJjYTIzY2ZhOTdhYjI1Yzg3MjZhY2IxM2Q1MDU5OTI0NWU1MzI0MzI1NzJjMzVhYwotYjkzOTE2ODVkOWUxZGVlZDFmOTVmY2IxNTE1OTRjZDYzZTc5NjkxYjU5NzJiYTJjM2EwYzBhMmZmYWYzYzlmYQotNWFjNDdkOTE3N2E2OTE3NDJlNDYzNGRiNjYzMWM4Njk2ZDBhMzBiY2UxZDg2YTRmYjczN2FiODUyOTZlYTQ3OQotZmU5MGM1MWNjZTU0ZDY0MDg3YmZjODBhZTU2YWJiNWQwNGY1NTE2YmZmYjY4MWU2YjM5ZjQ4MDc2N2YyMTIwZQotOTdkMWU4NDg4ZjFmNTQwZTJlYmY2M2ViNzQ1OTY2NzBmNTg5MmY0YzMyNzk3MWY2OTdjNzUzMDc3OGMzNjc2ZgotMjc5MjI4OWNiMTI0ODY5MzVjNDQ3ZDRlYWY0YWZlYzY1ZmU2YzY5NjIzMDY0NDllMzNmYjE5ZmI5ODA2Zjg3YQotOGI5MTg3NGRkZjNlMzEzODQ4MWZkYzcxMWYwOTU0ZDczZjExZmJhMzllZmRlYjU1ZWQxM2IxNmI5MzI1MjVlOQotOWYzYzg2YWU2MGY5MDk2ZWZkNDk2ODc1OWRlZjhkNjI5ZmYyODM4ZGVjYmU0YzY4ODMzYmEwZDY0ZDFkMzMzMAotYjg0Y2ZlOGNlYjIzZjRiNWQ1NWFhNWE5YjUxZWU1OTVhZWUwY2Q2NjhiMjBjNjg3ZDc3ZmY4M2M4MDNhYjk5NAotYzc0M2I0M2Q5ODgyODM3YzQyYTU4Y2Y3MDQ0OTBmZGRjYjU2NDZkNDhjZmQyZTMwNDY0ZDcxMGMxNDQwNTEzZgotNDQxN2RmZDY2ZDM5ZTBmYTZjNTk2ZTE3ZDA3OTY0ZWJmMmNhZWNkMGE5ZmQ3OGUwMDM1NDFiYTUzNDY4ZTcxOQotYjdkYWMyNjg1Y2NiOWI3ZDg1N2FmZjFkNDQzMmE3MmY2MTgyOTAxMDkyNDc4MWY1ZDE1ZmZjZjhkNTA0ZTM2MQotNmY4NmM2NjM4NDY5ZGI0YWQyODFkOGVjMzY1ODQ4YjZmN2FlMTA0NzExNGEyY2QzY2YzZDFlNDZlMGI0ZjQwZQotMWE4ZDNlMWRmMWMxYjY3NzcwMmQ3ZmJkNWE1OTI0ZjkxYzcyNmRlMmUzN2I0MzYyNTBlYjcxNjEwZGQ4MmNkNQotNWMwNDlmZDA0NGI0NDA3Nzg0ZmQ4MzM4N2ViNmE3ODgxMDM0MzBmYWI0ZjY4MjI5NGIyODdkYWM0M2YzMDYxZQotZDk5Yzc0MzA5YWU5NzNiYjk5OGJiYjJhNjkxNDAyODQzYTFhMjhlZTYyYWU4ZThiYWY0ZDY0NWQxNTZiOTRhYgotMzQ2ODAwOTU0MjVhZDhiNGRjMjcyODllM2M2ODE4ZDYwMzJmOTE1MzU0NTlkNzU5NWIyYjliZmMyZjQ0ZTc4MgotMzBmMGFmNDljMGEyMjIzZTFjZWU5ZTEyODlmNjgyZWQ1ZThlYTdkYjk5NjYzYTIzNDcxOTY2N2JjZmZhODA3NwotZTAxMThiMGI5NzAyNTM4NDIxZGZhZGEwMWQ5N2Q3YThmMjMyNDY0YjlmYzIwOWNmMjc4YmQ1ZmVmODBjMTRiZQotMDExYTlmNmZjNzhkZDIwYWIwMTJhMzA3ODBkYjI1MDdmNGQ1ZTFlNDkzZjMwODE0YWIxYzcwY2RhNzVjZTk1OQotYjVkNTE1YjJlZTg2NDBkZDRiY2RhNjcxMDcwM2E5ZTU2NzBhYmFkYWU4NTZiODZlZjhlNDE0M2E1ZjAzZmMxNgotYTZjNTdhYzdjM2E5NmM1MGU0NTE5MWIwYjFjNGY2YWNkNjIyYzQwMGNkMGYyYWU5ZTlkNTEyMzZmMWI5NDVkMwotNzFhZGM1ZmVhYjhhYTg0MjJhMjg3NTViNjM5NzhhYWZmNzg3MTU4YTY4YzI2ZmQyOWFiNmU4NDliMDc2Yjg1MgotMjE5MGNhZWYxYTg2NjYzZjRlMTJjZGYyNWJhN2JmODgyZWYyZTBlMjFjNzdjMTRmZGY5NDA3OTJkN2JiMjhmOAotODkyYTljYTBiYmFiZTFjNzBjMTUyZjMwZjM2NmJjODZiNWJiMWViM2I1NDQyNTYxNzY4MmE1NDYzMjM4Yzk5OQotYWJhM2E3YmY3ODhhMjk3ZDJhNTU1ZGJiMjE4YjE5Y2U1MDFhYWM0M2Q5NGEwYmI2YWUyOTA2Mjg4MjFlZmIwYwotODRjZWVjYjMwYzE0MDkxN2E0NThkYjZmZDAxMWYzY2JmYjRhMWNiNWVhMDE5ZGI2MjhjMTA2ZTJhNTVmMWMxMwotNDQ4ZWRkNGE5YTE1OWViYjM2OWQ1MDlkYTI5NmRhNzI0ZjcyOWZjNzU2MGMwMGM0MWY0MzA5ZTMyZWE2ZmI3MQotMTZmNjIzMjVhNWFmMzE3ZjEwNmE4ZDhjMmMwMWVjY2U2Nzc1ZDQ1ZmRiZWZkZjY5MjVlOWE0NDYwNGRkYTEzYgotMjdjYzlhOTYwYTIxZWVhMmFmOWJkZjZiM2NkMzU3ZDYwOTdhZDQwZGY3NDAzMDA1NzQ2YTMwODMzZTgxNGVhYwotOGRiNzJjMzgzZmE0MmJhOWZkMDA3YTI2M2NlM2I3NGMxMzU2YmQ1MjJkMjYxMWU0ZTk2MGM5ZmY1MjA0ZDQ2ZgotZWUzMzJmOWYxMzRlNzVjNzkxYTZkMjA5MjNlY2U4ZDRkZmVkY2Y5NmFiNDVkZmQ3NTE3MzlkYmQ0N2I0ODYzYQotZjBmZGExNzI4NDhjZDI3OWFmZDlmYWMzY2M1NzQ0YzFmYThhNWZiNDk1NWM2YzFjOTUyZjU2ZGEwNjQzMGFlZQotMDg0NTA3NjY0ZjkzYzcxZDg4MWI2MzA0MWNkZWM1ODMwNjEwMGEwZThjNzc0MjFkNzU2NzljZTMzZTJhMGE2MwotYWMyZjgxMzAwNmNlYTY5ZTAwMzUyZmZkNWY1OTE0YjYzZGJhZDU5MDVhNTkwY2UwOTAzZWQ5Yjk2Nzk3NzllMgotZDlkYTYyZjQ3ODc2ODc3NmExNzM4MzJhOGYzY2Q2NmI2YjYyNDg0ZDE5MGJhZjJkODM0MjQxMDAwYjBlZWM3OQotZjFlNTNiNDJhNzRiMTU5YmY3ODFlZTQ0MTVhYjZhY2ZmODZjNWIwNTkzY2Y0NjNiZjk1ZDhmYTgyMjkzYTU0OAotODRiYjIyNmY0MGYyNDU5MWU1YWQ0NjNhZTRiNjcyOTA1ZTdhNDIyMmVkZjk3NmU4YWQ4ODllNzE5ODZiMzgxOAotYmQzZWViNmEwYzk2Nzg3YzZmZGYzYTRmYWVkOTRmMGJhMDI2OWZkMDgyYWM0NTE1MzFlM2IwYzAxZjk5NjA5MAotM2Y4MjFkY2Q2NDY0Mjg2OGYwN2FhMGZlYWRhMzQwODhhODVlNjY0NGVmMDdmNDQwMmI0YjI5MzA3M2U5ZDMwOAotYmIyOThiMGU0NGJlMzZiZGRhMjE4MjU5YjRmNDhmMWI2MzhmNTAwN2QzYWE4ZWNlODAyYjQ4NWU3ZTkwNzVkMgotNmVjODgxZmJkZWNiM2NmNThjOGEzYWZlMGQ5ODM1ZTdiNDY4YzY0OGU1MmIyZWRkYjgxZGNiYTRlOTY3OGJmNAotYjE3MzU0MWRiZWMzODI0MjNlODA4NzdiYTJkZjk0YTYwNWJiYzJjZGNhMmI3NmY3NGQyZWI0MjVkODE5MTk1OAotODA0NjE3ZjIxMTcyZjM5N2JiNzYyYWE3ZGZkMDQ4NWNkMDIwMzk3YTVkM2U5ZmM5NDA1ZWM3ZWRjY2JjYmRmNAotMjk1YTAwNTdiNzY4NGE3MDFiYjdlYTAxZTg5NzhmYjMzNjdlY2QwODliZTE5YWFiMjgyOGY2ODI1ZDI3NWQzZgotNjA2NjJjMWUyZWM1ZTk4ZWNiOTlhOTZkNmZlMzc5ZTJmZDE1OGE3MTA2YjIxOTA5MDJmMGVkNzE5NjliNmRhZgotM2Y5ZTQ2MGYxNmYxYjQwY2MyYWEwODMzMGI5ZmMyZTI0ODAyYmVkMDM0YjcxZGU0NDVhMTRiYjMzZjY0Mjk4OQotNGY3NjMxOWVkZGVlMzI4MzE5ZWU5NTc3NzQwZmM4MDNiODE3MTRhOTliZjBhNTcyMjk4MTQyN2JhMDg1ODU0NgotYzBmNzdmMzkxOTA3MDA2MDcwNGMzYmQ5OTFkOTQ5MDlkMjAxMjE0NmI4OGMwZDM1ZmJhN2MyZGU4NjRlMzViNwotY2FmMDA5OWM0NjMwNDQzNjI1YmUzNzY5YjAxNTI2ZjNmMGM4YzgyMWRhOWQ1NDZiYzI1OGMwMDRhNGQyYjQ2YgotODg2ZjFlZjkxNmY1MGQzZjVmZDEzOWUwNTcwYjQxNTFkZDQxZjFmMWI1ZGFiMGRiNzc4NzEwNWM3N2I4NjkwMQotNzNjNTYyZDNlZWY2ZWY3NDEwNzg2NTk0NjdmMzMzNDUwZDdkODBjNjdjOTFhMjZiYThjNzdhZGNlZTZmNGM1NgotYzdmMjQ4ZGQ5MjUyMGRiMzU3NjhlNzAzZjdiZDE3MWY5ZTY2M2I5ZGFlYmViOTYxMWNmNDg0MjViNmIzNWMxZQotOGJjN2EwYjQ1NDQxYWQzODU0YWM5YjM3MDYxODM5ZjU3ODI1NmE4ZTQxNzY2ZDFhNmIyOWE5OWEwMTk1NjIwZgotYTA5MGQwZWY0MTIwNjY3OTAyYjA1ODc5NDYyMDZmMjk0Yjc4Nzc1ZDYwZWJlYzY2OGY2ZTRmYjljYTg5N2U4NQotNzYxNTFiMjQ1YWZmODIzMmE5MGY5N2E1YTkzZTkzNWM4ODU3OWRjMGYyZTlkYTdjYmQwMjQyNmIzYjE1ZWQ1MAotMzBhY2Y1MDEwN2Y3YjRkNGUyYzMyZGQ3NWQ2ZDhjNDUzOTE3NmEyMjQ0ZTc2MWViZjFmZmJmOTdkMzM2ZmRkNgotZWY5Y2YxMzgzMjZlMTBiZGI1NzYzODIzNTM0OGVlZjhmZmQzM2M4NGI0MjZlYzFjODFmZDhkNGEzOTA3ZDUyZAotMWJhN2U5YjY0ZGQ1NmI4ZmJjMjM2MmUzMGYyNDUxYjY5YjBkN2NiZWExZjMxMDFhZmNkNDQyNDJkM2ZmNWI2NgotODlhN2MwNTQ0OWIyODEwMzVlOTgzYzZiOGM2ODg1OTczNGIyMzJhNzM5OTZhMTlkMTE2YWM0YTk0ZjdiNDgyZQotMWY5ODQzNzFlN2U5OTE5YzMxMjI1MGMzNWY2ZjdmZWUyNWVjMjNlNTYyZGNjMjVjYjI5ZWE3OWRmZjBlN2M4YwotZmExOTI4MDI4OGMyNmRkNWMzMmY0YWViOThjODVhZmRhNTMzMTkxODA5MjY3ZjA1NTU0OThkYTU2ODhiN2MyMAotMjE5YTA1OGVmYWE1OTcxMjU1MzU4NzE5MjJmZjliMjBjZmJmNGM0YjM1YmRmYTRiZGU3M2NhOGNlNmFiZjE0YwotNTEwZWQyMDcyYTAxYzhhZGZhZGEwMDY0Nzc3NTA5ZDRmOTdiZDJiYWY2NmU3MTUxYWRlNzZlNDA3MDY2ZWZkZAotMmUwOGExNTc5MGM4MWQ1NDViMzQwMDE5YmQzNTBjN2I5MGIzNmFkYzg2NThjMTg0ODAyMGE3N2Y5MThlMTUyNwotYjM5NzQ3MTBhZjUwM2E3OWQ3OTQ3ZGNlOTNiZDgxMTYxY2Q3ZTBiMTEyNWQyZmUwZWRhZWI5MWJhZjEyNzllNwotMzEyZmJlZDY0NjQ3MmIzNTIzMTBmZGZiZWZkY2M0YzIwY2NmZWQwZDY2MjYwODNiMDI2MWQ3YzQ3ZDk2Njk4NAotOGRjYTQyOThiOWRkYjU4ZmUyMWJiMzkxYzdkNDVkOWI1NjJkMzhjNGRjMjNhY2I1YWE4N2UzZGRmNTllZTIzOAotYzkxMzE4ZGIyNDkxYTI0MTEwYWY5MDUzOWExNjk0MDE0MWQxZWZkZjRhMTNkMjAyZjliOTQwMWJjODlkNzI5NwotNTI2OWNkNTUxNWY5YTYxODZhNmVmODY2Y2ZhMDM3MzBmNzI2ZDdhNDA3NWUwYmM2ZjA5NGU5NTg0YTg0Y2YxZQotNzg0ODliYjY4ZGMwOWVlM2YxMzU2ZjRlNDViODYyMWUwNjA3OGE2NzI3ZWI3MmMzNmZjYTgwNTIxM2MxNjc1ZAotNDM2NTI1NWQ5MDE2NGYzM2NlNmIyMjMxMTEzZjY0ZmRjZjVhNzg5Y2Q2MTAwMmIyYTM4ZDJjYTViZjFmNTM2MQotYzlhZTBmNGVmYjUxMzM3ZTM0NGZiN2NlMTVmOGVkYmRjOWVjODJhOTQzNTE3NWY1OWI2YzE5YWUyZGQwYjEwYQotOTQ0NTY1ZTRiMTRiZDFkY2RhMDJkNDJiZTI3ZmI5ZjAzMzA2MzYwOTEyMjhlM2I4OTcwOWM4MTQ4OTMyYTVmOAotYzViYTViZmVjZmVmNmRlODNlYjQxNGFkYzYxM2Q4NTM0YzRlNDUyOGQ5MzRjMzdlNzY4ZDA4ZTEwM2I4ZWQyYQotZTFlNDliYjFiM2U2Y2JjZGMzZmY2M2RhYzc5OTRiOGMwOTIwM2Q4MmE5OTcxMDQ0OTI3N2MyMGEzNGUwMTUzOAotNjdjNWQ1ZTZhYmViYmE2NTBjNDQxZDNmZTU2ZGU5OTdlOTI4MTkzNjgyZTVmMWZhYTkzYTViYzgwMDg2MjEzMgotZWQzYjZjMDA1Y2MwZTYwNDIzMWUzZTYxZDE3MjE0Y2EzODE0OGM4NzVjMjY4YTg2MWExNGI1NGU2NTlkZDkzMgotY2JlNmVhNzEwOWIyNzM5NzVkNmNlZWQzNTFmMGIwODc2YTBiNjQ3OTQ2ZDI5MDk3ZGQ5OGI1ZjZiZGE3YjQzYQotZTY0ODFmMTc3NDNmZGE1MDNiMzRhMTIwYzhjMDZmNDc5OGMxZmNkNGU1MjFhMzBkNzZmMjM0MGRmNTYyYjYzZAotZGQ0YjI3ZGE4YjU4MzU0N2QyODVmMzg0OGJiOWZkZGI2MGQwZWQyMmE0Y2IyN2EyNzg0ZThkNzY2MmU4NGZmYQotZWVhNTBhZmMwM2IwODE1YjcyYmJlOTU1OGM4OTU5ZDBjY2MwMGE4YzhjOWY3NDBmOTViNjcxYTY2ZGZkZmM2OAotNzdmYWMxMmMxOTk1ZDk3NzQ5NWM5Y2NhY2Q5MjRlNDVhNjZmODczOWRlMTU2ZWU2OTYyYzc5MzBmOGFhYzM3NAotODk0ZjhiYzM5NmZmNjlmMjI0OTM5MmM3YzQyNDhmOWNmOWZmZmY5ZWFmNjM1ZTY2YTM0NTExZjM5YTA2NmI4OAotNDg2NmU3NzZiOGQ2ZWNhMDMxOWYyM2NhNjA0ZWFkNzQyYmI2ZjZmM2IwNDY0NTRhMWMwZmMyNDI1NTExMTJiNQotYzc0NWU5YjhmMTI3MjM4NjdiMmI4OTVjMGY5M2M5OWRmMWQ1NDJiODZjMWM5ZGI0NzM5MGYyZDZjM2I1N2VjYwotNjZiMWE2YWI1MTRhNDdmZDlhYTYyNDBiNDZjNTRhOTJmZGY4MGZjNDRlZWVkNGI4YTEzNmZiODhiMWZhNWI5YwotYTJmZTY4MmNjYTRkMGM1YTNlOTk0Y2ZlYmRjMjcwZjQ4ZTNhZjkxYWU2YmM5MTcyYmQ5YzczMDUzYTc2MTM2NAotNmVmOWU2OGVmNThjNzE4YTQ3OGU3ZDgxZTU3ZjM0YTc5MWMyNjI2OTgxOWM3ODU3NGQ3Y2MxMjYzMjY4NDIxOQotYTFmOGUxYzVjZThiMzU4ZDZmYmYyMzk4NGU1OWQ5NTMzYWQzMTBkMTU4YWI1YmFhOWZlZGEwODcxN2E3ZjVlMAotNTc2ODRjNDU1YTdlM2Q4MzNmODJiNGUxM2U5YTkyYjBiOGZiYTVjZGQ3MmE3ZTQ2NzA5MDc0ZGRjODJlNDQ5YQotYzkwNjQ3NDQ0MTA2NmZkZDljYjdmMzQxZjNhMmVlOWYyZmJmNWU0ZTFhMzUwYTQ1ZmNhZDZiMmUwNTgyNWI2YwotODkwNzdkNzQyNjE5Y2YxZjg0MzRhM2I1Y2M0NDk5ODE3NjY2N2NmZDVjNWY0ZWU1MTMyNmQxZWUzZTQ0OTkxNQotMDBiZGFmNTdjODhhMTA3YWM0OWMxNGNlYmYxOGQwMTBjNWIzMjA2ZWM4OGZkMDZlM2M1MTE0NTgxZWU1YTVlOAotYzRlZTVhNWMzZDQ4NjUzZmIyM2QyOGYyNjg2MmM0MzNlZDA4M2FmMDFlZDNkZjhlMTQ3NTQ4ZjljZGQ4ODJmOAotY2EzMDg4MTA2YjljNzNiOWUyODc4NmZmYTY0M2MzNDNhOTQwYmY4NTBmMzEyNjY2ZTYzNWI4ZGI5NWM2ZjcwYgotODNkNjQ1ZmQ5NDdmNmRmMzIyZDI2ZjhmOTA4MWNhZTcxYmE4YjlkMGRlNjdkNTM1YjYxMTQ2Yzk1NjgwMWQ2YgotZmY5YTY5MzY1YmRhOWJjOTdkOGQ5MzE0MmQ0YzM2N2Q1MjU1NTg3YWRhMjVlNGZiMDYxZjhlNDMwZjczZDJhOQotNzE0MmQ5ZTRjMTc0MzViNzg4MDU5NDZlNGZkZTYyNGVhNWQ5YjVjNTExYzlhZmUyY2ZhZjQ0N2NmMDgyMzViOAotNTc1ZGRhYjhhZjkzNTg4ZTBjODIwNmYwOGY4ODMxNzBlZDQ0NjNkYTMxYTUzY2VmNjdmMDFhYWI4ZjY0NWFjYwotYzJjNzY0ZjI0YmY4MzFkY2YwMDU4MzNjY2QxMjk2MDI1MzY4YjNkNTFhMDRlZmQwOTVmZDEzNTVlOTNkZTU2MwotZTcxZGQwNDdlZjQ5ZjViZjhjMTdiMDFiMjg4NDg3MjI1N2Q3NDNhYzZmZGQ4ZjU0ZTI3YTI0MWQ3Yzc1YjM4NwotYTg4NDFkOGNlZGU2NzZlMzVkNGYwMWFjYmEyYWNlYmQ4YjIyMTEzYmZiZWY4MGQ1ZWFiMWU4Y2Y1NmY2NDlhNAotNTE2ZWMwOTc4NzJhNTk3ZTgzNTE5ZmMxMzk3YzdkNGE0ZjZkYjdkYWYwNDQ4MzViMTdkMDg1NTc4ZjVhMzc3NgotZmQ1ZWQ5MjM1YzAxODM1NGU4MDFmYWMzMzhhYTdlZTU4MWU5N2Q5MWRmMDE5NmVhNGJjYjA5ZjBlNmYyZTJiZgotYjU0NzA4MjdmMWI2YmIwYjcxMzNjMTliZjQzYmJlODI0ZWJkYWY5NTI2YWIxNWZmOGFlODg0OGJmMGRlY2IzZgotY2ZhN2QzZjVlZDcxMTkxODk0YzcwNWEyN2NkOWFhMzBmZDM4NGNlNmE1ZjBiYzUxYzU2NTFkZDI1MTBhMzQ4MQotZDA4NmFhODc1OTVmODg1YzRjMGFmY2IwMmIxODM3Y2VkZjg1YzVlNjRkNDQwZTM2NTgxODc0YTExNzA0M2I3NQotNzhkYTk0YTA2OWNmMmJkNTdhZTcwYzIzMGU4ZDFhMGQ0NjM3MjIzZDE0YTk4Njg4MzVkODkyM2ZlYjQwNDMyMwotNDNjMjJkMGYwZTgyMDFjMjAyNDdjNzhhYmY5MjY3OTE1MDY5ZDY0NzE4NjJjMmEwYzUxZWUzY2UzMTUzZTMwNQotNGE0ZWM2ZWE1MmRjYjU1ZGYzNThkMWEwZDhhYWZhNzlmZTA4ZWJlNGQyMmU5ZWNiOWQyZTUwYTdmMzY3Y2RlZAotNzE2OWY4NDI4NWM0ODJmYzFlZmZiZGU2ZmVlYTQyNGVjZGRhMjQ5NDEyN2M3Yjg5NmRkMDVmNWU2MmY1ZmQxYwotMDMxZGU5NjBkNmVjNTk5NTRlODQwNTA4MTYwMWRmNzQxZWRkOTdmMjI3ZmQ0MjZlMDk5OGNhN2I5YjQ5OGJlYgotNGNkYTlhMTY3MTVjYjY5OWM0NmQxMzg2NDY5OTU4MDc5ZGRmNWZmMTc0ZDcwMzM4MjA2MjA4ZjBiOWFkZTM4NgotMDNlOGRjZjMxZTA5ZjQ0OTc2YzFhZDc2Mjg5NmE2MTVkOWJmZTU0OTc4YjdjMzkxNDQ1OGM4YWY0ZDMzZGM2MgotOWY5YWY1MTcxZGYzYjllNTQ4YjI0MDExZWM1ZjAyZTMxZGMzNzk1ODJlMTZmM2M5OTlmMDQ3YjgyZTdmMjdmMAotNGJmZGQ4MjdjOWExZDE5ZTQyMzA2OTVkNGVjNDk5YWZkYjYxNDcxNDZjYjZmNWE4YTI2ZWZiZDZkMGM1ZjIwNQotMzRjYjljMzdmYTRjNGI2MTIyZjU1YmFjYjc1NjE3MzI4MmFiZDZhMmU1MjE5YzI1Yjg2YTUxODEwMjFmMGJhYwotNmYxN2Y4OWYzYjhmNzRjMjgxYWVlYTdjMWQ0ZmZhYzYwMmMyMzY0YzllMWVjOGIwYTYyM2JkMzU0MTc2NWNmNwotYWE1ZmViYmI2ZTg1NzgxMGE1NjQ4NTAyNTlhYzRjZTZkNjQxZjdiNzY1ZGQ0NjU4NGM0M2M4MTEzYzg1ODNmOQotZTc3NjNkM2Y0ZjgzNjQ5ZTEyZTE1NTU3ZjQ4ZGNiMGE2MzcxNDBiMmY3NDc5Zjc4ZjFmNjRiY2Y4YTA3YWNjMAotNDNiOWQ5YWMxZjhiMmMzYjAwYzM2YjQ2ZDhlNTE0Yzk5OGZjZDQ3MzU0YjM2NGU4YzI0MzRlNzc0YWM3MDk4YgotMjRjM2JmYWRiYWFiNWJkYjhhYjBhNmI5NzczYWVhNDE3NTYxNTI0MTI0OWEyYTU4MjIyZGY4YzUzYzMyZDAxZAotNmFkYzVmYjRhOTMzNjA1ZmZmOThjN2QwMTEyNjYzODBiMzA1NDAzYTc5ODY3OTM2MTU2MjQwYTVjNTU1MTA1YgotOTVjZWMzODczNTMwZmE2ZDM3ZThjZmMyODYxMThhOTYxOGM2MGQ2MjgyNDEyZDBjY2M1YThlM2FmNDdhNDJlYwotMjljZWUwMTc2ZDFjNDgwMjE0NDYxOWE1YmYxY2RmOWVjNWI4ZDZmODdjMzc5YzQ3NmFiOTQxZGEyNDQyMGE4NgotMDRhMGIxYWQ3ODg0YjVlMDUxMzYxMzlhZmNjZjBiNzEwMWNhZTRiOGYwYmZkYmUyNzZhYWQxYjk1ZTJjMGQ1NwotMzkwMmJmZGVlNjUxYTIwMmI5OTE4OWNhZGExNzZhMjJmYWNkMDUzYmJjNzNhZjFjOTBjYmRhMTA2MzU3OThlOQotOGRlMDVjMzM4ZTkwYjNkYzRhZmI4ZDI5MDEwNTkwYjY0MWRiNGE5YWI3MDcyOTRlNTVlNDRjOTdlMjc1YjUyZgotYjg4ZjUyYTZjN2U1NDVjZGM3M2RlNDZkYTY5OWM4YzNkODk1ODgwMzY4YWEwMzVhMTM3ZmE4Njg2ZWY0ZjY0ZQotMDkxNjdiOWU1MjMzMTJiMTc1YTE2NmRlNWUxMjk3YzYwZGIzNjFkOTUwNWMxMmI0OGMxNzgwYTAwYmUyYTlhMQotNDNiYzYzNjJjNzMxZWIyNmE2MTA5N2M2MmMyOGQyY2M4ZDc1YmEzYzYzZTMxYTQ5YjljYjViOGI3ZmUxZmJiYgotNjE1M2JjODdiNDUzOGVmNWNkNDkxOTgxMTMyOWFlOTMzZDg2ZWY1NTY4ODMzMjNlZDVhNmRiNWM5OGMxMWIyYwotY2MwNGM0ZjkzNzI4OTU5MGU1ZjdlZThkNTc5NDBmMjEzNzNhODFiOGI5MmViN2NhOTc4YzFhMDdhZjdiMTA2NQotM2U2NDk4YTZlMmZhNzM0MjY5ZDYxY2YwZGVkZDY0N2VkZGJiZTM5NWUxZTgxOTA1NTJmOWE0MzMyMDgyYmVlMAotODdmMjhmZDZiYjE5ZTQ4ZGU4YWQ2NjJmNDFiNGE1ZGU2NTc1MTFmMjMyOWZlNmI1NDFmNTBlYzQzYmUyNGQ1ZQotZTczMzY3MTI1MzVlY2U2YTU5MDQyNmUxMDQyMmQxMzBmNGZkOGIwZmUzMTRjOWZlMDY4YzZhNDU4MzU5OTRhZQotN2JmZGE4YWU0OWZhYjIzOTA1ZTRkOGIzNzRmYzY1NGYzMzZiMzZiMjA4MGRmNjFhYmMyODhiMjZiOWNhN2I0MgotNjhlNDZmMTIwYjgyY2RjYjc0NzE1ZTZkMDlhYWMwOTZmZDExN2FjZTMzODNiZWFjYTUyYWEyNDhjZmUzMDdjYQotODkzMGEzNGI3MDYyZmIxNTNkOTY4YzkzMTY5ZGQyMjM0NDljYTY4NzY1NDgwY2ZkYzVkZjM5YmU0NTA1NWQzNwotOGJhMTRkYWE1YTQ3NDVhOWY3Yjc2YWI2NjRlZjNkNWIyZmJhMjljNjBhMDZkMWEwODhjMDVlZWM2ZDk1YzA4MAotMTk3NGVjMzQ0YjI0ZGZkODkyZGI3ODc0ZTNlOWRmMGZkNjFlZjhmNTliNTI1ZjkyZjJiMzc0OTk5ZjkyM2YzNAotNjY4ZTU1Y2M5MGZmMjg5MDEwN2E3NTI4ODUzZjQ0MTc3ZmE1MmEwNzFmMGNlOTk3YWU5NGI1OTAyODk0MTFlNAotYzA2NjljOTM2ZDRiODg1ZGU4NDI3YjYwYjJmODgyMGJjOWQ2NzgxYmYyNzVhOTU5MjFkOGNmNGY1NWNjOGNjNwotNzNmZjdkMDAxZjRmYzVjNDFlYTFjNzU1ZWU0OGM1NTUwNjc3NzU1YWVlMDYxYTNhYzg1YmMwZDljMWU1YjQxMAotZjM4ZGRiODc3ZmVmNGFkNDE0MmM4N2M0MmI2ZmVhZDg3ZjFkYWE5OWVlMGZiZTdlN2VlZTk0ODY3MjM3M2EzZgotN2FjZTI0NDQ2MDc5MjFjNjFjZWZhNzM2MGYzMTk0Njg1YWNmODM2MTY1ZTE5Mzk1YzJiMmM5Y2I1Nzc4ZDlhMgotNmYzNWY5MWQ2MWU1ZTQ4MzhhYTIzOTA5YjQ2YTg5OWExZTAyZTI3ZWJmYjUzNjhmMTA4MDI3MmY2YWU5YWRjNQotNDRmNTEyMTkxYmYxN2RiYTNlYjIyZDk4YjliOTM0ZjM1OWZjODZjOWU0NTFkMmQ0MTk0NjMyYTdkYjViMTI3MAotNmE1OGNlYTQ3MzkyZmE4Y2MyNGY2YjRlYzVkMTcyZTllNTYwMTYxN2Q4ZTIyZTgzN2MwYjM1YjQyODEzNjRlNQotODE3NTdlMmZjY2I5OGZhODg4NzlkN2NjYzU2OGZhOWIxODM1MDRiNDkxMzI5MzIwYzk2OGI1NjExZWIxZjMzNwotYTZlNTBkNmZhYWM1OTFkYTk5NGFhNDc3NjE4NjVhYjg0NjUxYzMyOGJmMjU5YmU1OWJkNzUyZjExMGY4OTA4MQotNzU1MzgyM2NjNjdlMzY3MjFlOTVmMWM0ZTJlMzcyZTAyMGYyYjJmZmIwNDVhYTcwY2E0ZGQ2ZDU1ZDg4ZTMyZAotYzhhMTc0OTJlZjI4YTQ0ZDRhNTM2ZmNhOGJkNzViM2RjMzkyZmMyOTYzNzdiMmM0NzQzODk3YzMyZWI2NTI4MwotZTc3NmU4ZjhmZDk3YzY2MWM2N2MzZjBkOTczNDNhZjE0MWJmNmI3NzQ5OWExM2FmNDYwNWUzNmQzZjRjM2ZhYgotMTJiYzVkYWE1ZGIxZDEyZGZlNTkxNWFjZjE0NDA5ZTkzMDJiMWJiYzhjNTg2MTk0OGVhZTMyOWVhMzExMzJkZgotODQ5NDU2MGU1NjRiYzE2MDczYzdhNzc3ZmVmYjMwY2FjNmY0Yjg5NDNjNzAxOTUyODk5NDZhNjBmMDZkNDMwNgotNDUzNmMyNzQwOTk1YjcyNDc0NTFjOWUxNjE5ZjdlMjc3YWY0YmNiZmZmNmI2ODU1M2FlMjNlZWY3YjE3OWMxNgotY2FiNmFhZTdiNmY1ZmM3MmUwZDdjYWMzNDYxMWQxMzUzNzE2NTgwOTQ4YmE2OWRjNTM0YTNmYTU5Mjk4NDI0NAotYzFiYmQwYTZkM2YxZmM0ZDljOGZmNDhlNzcwZjVjNjViZTNiNWE5NjFlMmFiODkzMWU3M2M4MjIyZTZlYjQ4MQotODZlOTI5MDZiZjJiNDRmZWY1YTU5YjQ2MGJjODhhZDE4Mzc3MzA1MTVkODJjMzM3YzM0OWNkMDg3MzI5ZmZmZgotMDcxOGUyMmJkM2YwOWZlZGU3MDQyOTkyYTE5MTU3NTAwODg5MGM1OTY2ZjEyMzBhYjE4NmYwMTlmMTc5NDY3MQotOGU2MTljZTg3MDZmZDk0YmYwZmIxZDZlYzIyNTEzMTUwYzFiOTQ5Njc0MmE5NGUwNDhkZjA3OWJkZTVkN2JmMwotOWRiODI2NjhlNWY1NDUzOTYyOTkwZjRlM2UwMjQ1Y2QyZTc2N2M1Y2YzNzU0YzEzNzFiYjM3YmI3ZTE0ZGI3NQotYTkwZmNkNWRlMWE3ZDc1NzQ4Mjg5MTc3ZWJlNjVhMzk3NzYyYjViMWRiZDQ2OGU3Y2JiM2ZlYzY2YTZiM2YyZQotOGU5YTE4MDJiYjJjYzQ1MDZiM2FkMTYzMmQ2NzRmMWQ1NGEwYzFjMDg3ODdmMjc0YjQ4ZDYwZTkxMTFkODAzNQotYmUzYWY0NGEzYTEyZTE2MTc1ZWJiYWZkZWU1Y2ZjZTJhOWEyNmNiOTgyNmM4NjIwN2Y4ZWE4OTVlNWMyZmQ2NgotMjE2YmU4M2Y4MWZhNDdmMzlkYmFmZjM3ODk4NjViMWJlZjYzYmFlNDYzYjdkMTY2ZGZiYTVlM2U5OTY3Njk3ZAotZjZjOTFjN2RiYjc2NWJkYjkxZjRlZTU5MjA1NjdhOTQxOTk0MTY0ODRlNzVjYjZiMWMwZDFiZGQ2MmU4MzFmMgotNGI2ZDdiMTAwOWJlYTE0Yzc4Y2E2YjhmMTAyMGNiMDVjOWJmZDEzMDc2ZDVmMzM1ZDBiOGFlNDE3ZmEyNmM3NQotZDA0YTI4YTc3OGQ4ODU4ZTY0NzM2ZmEwYTViYTc4OWI1OGI0ZDA1NTQwZWNkZjI4ZWUwNDRlYTE4NzA0MDc2ZgotYzNjOTIwOTBkMTE5YmM2NzU5NDAyMWFhYTRlODlhMDYzYWMwZTY0ZjIxOThjNWNkYjM5NTFjNzY4MWFiYWJiZgotNmU5NjY2NmY0NjdhMGZkYzcyOWVmY2QyZjFkOTRlMTkzZDhmZDU2ODAyMDYzODQwNjk2ZjNlY2EzOTRjMjg0MQotNmI3ZTZiZDQ3NTlhYWNlZWJkZjgyYmI0NzNkNDkyNTZlNjUzOTQzNDY5ZGI3MTc5NGFlOTZiM2QxMzBiZjk3ZAotNzUyYTliM2JjNDQ0OWJiNzU2MDM5NjA5YTRmOWZjYzYzYzYzN2Q4NjcyZjJmMjRkYmQ0OWE1ZjlmNTEzOWM1NAotMjNjNGExY2JhMzQ1Nzg0ZjI4Yjc5MzNkZDNkMmM5OTM4YjM1ZTYzNjc4YjA0NWVjMzE0ZmQ5ZTkxODhmMWIxOAotY2EwMzRhMjZmNWQ3ZTJlNzc5Y2ZlNGQxNjU2MGVkMmU0ZjNhYzJiZjFiNTMyNGM2YjM0MmUyOWI1YmEzYzllMAotN2JmMWJmZjUxOWY5MWJkOWNiZDRjMTk4ZjBiOTg0MzFkODNkNzMwOWQwYTRiNjJiY2Q0NTBkNjI2NDllNWI0MQotMzM1ZDg3YzI5N2QyODg5NDJhNjM3OTk5YzJkYmRhYWFlZGE0ZjY4ZDE2NjI2NWEzN2RmMDAxYjFhNGE1ZjU2MQotNjRhOWE3YWY4MTA4NTFkOThhZjNlMDFiMGU0YmJjZGYzM2QzMDM1Yjk4MTE4YjQ4YzY0NTJkYTBjYWVjY2ExMAotMjI4YTMwOGEwYTM4NDRkNTc2MjhiMmRmZDcxODlmMWZkMjUyZWExY2UzY2JiYWI3ZTcxMzI5Yjg4NmNjMzZlZgotYjQwZjY0MmFhNTQ2OThlODdmNGNlOGIzMTBmMGVlMjk5NjhhZTA0ZGUwMDNmYmFmZjg0ZDg2NmU0MjIwYjYwNwotM2IzYzVmZGZlZjg4MzU0YTU0ZDQzMThkZDg1MmZmZWI5YmU4MTYzMGM2NzNlNDI1ZmQzYmI2ZGRlYzlmMjk4ZgotYTk5ODJmOGE1ODU5Yjk4M2JjYzA5Yjk4OWY0YTcxZWU0YTU0ZDM4YTIyMGMzY2U3NDkxZTdkOTk2ZDhiMGUxMQotYjA4NWFjYjhmMjE3YmUzNWYzZWI3ZmEwOGJkOGVhOGM2NmRmOGFkMDBlMzI5YWU3MzJjZTEyODAxYWE4YjFhOQotNDBkYjFhN2IzMDM5NjdjMTg1YjkwMjI5YTExODhlZWRhM2ExNTY1ZGFkMWMwODE4MWZiMzViYTAzNjY3ZDUxMwotOWYyYjZhNzFkZDI3ZTExYzdkYjlhN2VjZWQ2NDA0Y2IwOTI1MGZhMGFlMmYwZmU3ZmE2MTE0NzAzOWNiODY4NQotZTdhMTU2NmUyNWI0MGIxZjIzZmZkYTU1MTVjMTA3ZTM0ODdlZGUwYTE0OGYyZDg1MDBmMTAyYjRmNTE3Yzk1NgotODdiMmUwMzk5Mzg3ZjRhOTA2N2VjYzcyNWJjYjMyN2JhNWU5OGQ1YzY4ZmI1NGFjOTk4MzQxNDZiYmQ3ZTkxYwotYjA0ZDk1NzZiYjE2ZTM5NjA4YzE0YzI1YWFlNDQ2ZDI1MGIzODg2MTBiMjcxNDc1NzYzMWMxOGZlYjcwMDA1NwotYzAwMjI0NTZjOWVhMjgxNDBhMTUwZGM2ZmVhMDMzM2VjZjljMjkxZDk1NTA1ZGUzYzA1M2MxZjk1N2Y3NmEwNgotYTVlOTZmNzkyMjAwZWI1ZjE4MTFlODZkNzBjOWJmMWUwZDI4ZGEyOGI4YzYwNDI1NTVhMjdkZGQwYWExNjhiMAotMGYzYzExMzIxN2Q5OTBmNmVhZDBhNmVjYzRmZjRjOTJjNTc3MTIxZDJiMWRjYmZmNTQ3YzAzMTg0MzYwYTZiNgotMzc4ODkxOWQyMDMwMmYwYzM1NTQxYjQ4Y2I2ZTkyNmJlMDg3YjFmNzMwODA0MWRjOGNiOGYxNjFkOGE4YmQzMgotZWNjODYxZWZkNmViZTE2NTY4ZGQ0N2I4MmZkMWEwMjIwMDczM2ZlZjQxNzZhNzQ3NzE4NWQ3OWU0NGMxMjhmZAotYzU0ZjRmMjhjZWU3NmRjZGVkNzM5OWJjZmViYmZhNjIwYTZmNWU0ZGY1MzUwZmU2MDA1Zjg0NTQxYTZlNzdjZAotOTdkZGNmNzA0NDU1Zjk2NDM1ZWRiMzY2NmQ5Y2I1NzUyMWYzNWUyNThlZWIyMTYzOTQ0YzkwY2JkYjNkNGE3MAotYzk0YjlkMzkwNWZmZjQyOWYxNjU2MGM2YmM0NGFhMjdiYjQ4MWUyNGQwM2YyOWYxMzVlZWYzOGQ5NzNkMTJlOQotYzI1MWRlMWQ5Yjk3NmQ0ZDdiYjdiNGY2MmRjN2E2MDkzZDE4NmQyNDBkYjc5NzQzMmRmYjVlNzFmOGZhMDlkMQotYjliNmNiZGU3YjQ2NzRiYjNmMzg5NjcwOTFiOGIzNzVjMGU3ZGZkZGMwYTIwNmIwZDg5MDg3MDc1MjEyNTRhMwotMzViZTQ4NTI4Njc0Yzg1OTc4MjJhMGE5ZTljYTg0ZjBiM2QyYTQ0ZWM5ZGVjYTBkYjUxZmEyZWYzZGIxNjg1MQotNzkzOWViZWY1MmI1YWY3OTlmZjZmZTg2YjBjYzQ1OWJlOTQxODdhZjQ3OWU5NTY1MTIzM2YyNTE1ZTAxY2NjOQotNTcxMzBiMDFlNmU5N2RmMzc1Mzk2Zjg0OTk1MzVhMWZjYzBkYWU5MjBkYjI1ZGI0MTQ3NzI2M2E4NDdiNTc4ZQotOGFjOTRlNTlmY2I2OWI5N2ExZWJmOGQ4NGUyZmFiNjkyNWJkMTYwNzdkNWE1ODQwMzUzOWFjYjQwYWRiYjg5YQotNTU2MjNkN2UwOWE4NDgxZTcxYjQ3NDE2NzUxZjAxODgxZWNlNGQ5NGVhOWNmZjZkYWJiMzU0NmZmMmNkZTRjZgotMWJhNzdlY2FkY2Q0NDk5NjM3ZTI2YzUwNjRhMzQyZDcxY2Y1MGQ3MjVjNDAyODZhZDM1MmJmOTdlMGRhNTIxZAotNTgwNTVmZjk3YzY4NzY4YjQ0MzVkYjM3MmYwYjNkMjM4NDVkNzcwOWFjNDdiMmE5NjUzMjdmNjI1NzNhOGZlOQotZTljNWM0MzVkZGYxMjQ3OGJjZGZkZTQxYzBlNDMwM2IwMzk0OTQ0NmVjOTI5MWM1NTNlZWJkOWFkZDZiZmI5YQotNDUxNjVjZTM4MjBhZjQyNjRkZDNiNTRhYzQxZTRiMmRmNmVkZTEyODY5NzM2NjBlMzcyODFjNzU0MGJlYjY5ZAotMTZhODZhZTAzYjhjNWNlN2FjMTQyNTg1ZjcyYTBjYmE4Y2ZhM2M3MWE1NGRiNjBkMTMwNTc5MGZmYmFlZWUxZgotZjMxNzc0OTI2YTFkYTk2YTM3NTc0YzlhNWI2NmRhYWQwYTY4YWRmOWYxMDQxMjM5NDFhYzRkMzM0MmMxM2JhYwotYjliMTI0ZWM5ZGI5MTcwMzJlM2Y0OTUxMDdmM2NhYjkzZDU3NzUxZTg4YTUzNjllMjczNThlY2Y0ZjkzNDhlYQotNTQzZmI1NWMwNDkyODYyY2UyOGNmYjFmMjhlMGU1ZmZhYTMyZGY4ZmRjYTI0MWRiNTU1NjE5NTgzZmFkNzZkNQotMDRlZjU5OWYyMzNjNDI0MzU5NzY4ZjZlOGYwY2VhOTU3NzQ5MDE1NzcyNzdkZmQ4ZjkwNDE4NTk4ZQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GMTM0XzAgL01GRUNVUitOaW1idXNNb25MLVJlZ3UgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgWk9WTVJEK0NNTUkxMAotJSFQUy1BZG9iZUZvbnQtMS4xOiBDTU1JMTAgMS4xMDAKLSUlQ3JlYXRpb25EYXRlOiAxOTk2IEp1bCAyMyAwNzo1Mzo1NwotJSBDb3B5cmlnaHQgKEMpIDE5OTcgQW1lcmljYW4gTWF0aGVtYXRpY2FsIFNvY2lldHkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0xMSBkaWN0IGJlZ2luCi0vRm9udEluZm8gNyBkaWN0IGR1cCBiZWdpbgotL3ZlcnNpb24gKDEuMTAwKSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKENNTUkxMCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoQ29tcHV0ZXIgTW9kZXJuKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKE1lZGl1bSkgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgLTE0LjA0IGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvWk9WTVJEK0NNTUkxMCBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9Gb250VHlwZSAxIGRlZgotL0ZvbnRNYXRyaXggWzAuMDAxIDAgMCAwLjAwMSAwIDBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIDI1NiBhcnJheQotMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCi1kdXAgNDUgL2Fycm93aG9va3JpZ2h0IHB1dAotZHVwIDU4IC9wZXJpb2QgcHV0Ci1yZWFkb25seSBkZWYKLS9Gb250QkJveHstMzIgLTI1MCAxMDQ4IDc1MH1yZWFkb25seSBkZWYKLWN1cnJlbnRkaWN0IGVuZAotY3VycmVudGZpbGUgZWV4ZWMKLWQ5ZDY2ZjYzM2I4NDZhOTdiNjg2YTk3ZTQ1YTNkMGFhMDUyOTczMWM5OWE3ODRjY2JlODViNDk5M2IyZWViZGUKLTNiMTJkNDcyYjdjZjU0NjUxZWYyMTE4NTExNmE2OWFiMTA5NmVkNGJhZDJmNjQ2NjM1ZTAxOWI2NDE3Y2M3N2IKLTUzMmY4NWQ4MTFjNzBkMTQyOWExOWE1MzA3ZWY2M2ViNWM1ZTAyYzg5ZmM2YzIwZjZkOWQ4OWU3ZDkxZmU0NzAKLWI3MmJlZmRhMjNmNWRmNzZiZTA1YWY0Y2U5MzEzN2EyMTllZDhhMDRhOWQ3ZDZmZGYzN2U2YjdmY2RlMGQ5MGIKLTk4NjQyM2U1OTYwYTVkOWZiYjRjOTU2NTU2ZThkZjkwY2JmYWVjNDc2ZmEzNmZkOWE1YzgxNzVjOWFmNTEzZmUKLWQ5MTljMmRkZDI2YmRjMGQ5OTM5OGI5ZjRkMDNkNTk5M2RmYzA5MzAyOTc4NjZlMWNkMGEzMTliNmIxZmQ5NTgKLTllMzk0YTUzM2EwODFjMzZkNDU2YTA5OTIwMDAxYTNkMjE5OTU4M2ViOWI4NGI0ZGVlMDhlM2QxMjkzOWUzMjEKLTk5MGNkMjQ5ODI3ZDk2NDg1NzQ5NTVmNjFiYWFhMTEyNjNhOTFiNmMzZDQ3YTUxOTAxNjViMGMyNWFiZjZkM2UKLTZlYzE4N2U0YjA1MTgyMTI2YmIwZDAzMjNkOTQzMTcwYjc5NTI1NTI2MGY5ZmQyNWYyMjQ4ZDA0ZjQ1ZGZiZmIKLWRlZjdmZjhiMTliZmVmNjM3YjIxMDAxOGFlMDI1NzJiMzg5YjNmNzYyODJiZWIyOWNjMzAxOTA1ZDM4OGM3MjEKLTU5NjE2ODkzZTc3NDQxM2Y0OGRlMGI0MDhiYzY2ZGNlM2ZlMTdjYjlmODRkMjA1ODM5ZDU4MDE0ZDZhODg4MjMKLWQ5MzIwYWU5M2FmOTZkOTdhMDJjNGQ1YTJiYjJiOGM3OTI1YzQ1NzgwMDM5NTljNDZlM2NlMWEyZjBlYWM0YmYKLThiOWIzMjVlNDY0MzViZGU2MGJjNTRkNzJiYzhhY2I1YzBhMzQ0MTNhYzg3MDQ1ZGM3Yjg0NjQ2YTMyNGI4MDgKLTZmZDhlMzQyMTcyMTNlMTMxYzNiMTUxMDQxNWNlNDU0MjA2ODhlZDljMWQyNzg5MGVjNjhiZDdjMTIzNWZhZjkKLTFkYWIzYTM2OWRkMmZjM2JlNWNmOTY1NWM3YjdlZGE3MzYxZDdlMDVlNTgzMWI2YjhlMmVlYzU0MmE3YjM4ZWUKLTAzYmU0YmFjNjA3OWQwMzhhY2IzYzdjOTE2Mjc5NzY0NTQ3YzJkNTE5NzZiYWJhOTRiYTk4NjZkNzlmMTM5MDkKLTk1YWEzOWIwZjAzMTAzYTA3Y2JkZjQ0MWI4YzU2NjlmNzI5MDIwYWYyODRiN2ZmNTJhMjljNjI1NWZjYWFjZjEKLTc0MTA5MDUwZmJhMjYwMmU3MjU5M2ZiY2JmYzI2ZTcyNmVlNGFlZjk3Yjc2MzJiYzRmNWYzNTNiNWM2N2ZlZDIKLTNlYTc1MmE0YTU3YjhmN2ZlZmYxZDczNDFkODk1ZjBhM2EwYmUxZDhlMzM5MTk3MDQ1N2E5NjdlZmY4NGY2ZDgKLTQ3NzUwYjExNDViOGNjNWJkOTZlZTdhYTk5ZGRjOWUwNjkzOWUzODNiZGE0MTE3NTIzM2Q1OGFkMjYzZWJmMTkKLWFmYzBlMmY4NDA1MTJkMzIxMTY2NTQ3YjMwNmM1OTJiOGEwMWUxZmEyNTY0YjlhMjZkYWMxNDI1NjQxNGU0YzgKLTQyNjE2NzI4ZDkxOGM3NGQxM2MzNDlmNDE4NmVjN2I5NzA4Yjg2NDY3NDI1YTZmZGIzYTM5NjU2MmY3ZWU0ZDgKLTQwYjQzNjIxNzQ0Y2Y4YTIzYTZlNTMyNjQ5YjY2YzJhMDAwMmRkMDRmOGYzOTYxOGU0ZjU3MjgxOWRkMzQ4MzcKLWI1YTA4ZTY0M2ZkY2ExNTA1YWY2YTFmYTNkZGZkMWZhNzU4MDEzY2FlZDhhY2RkYmJiMzM0ZDY2NGRmZjViNTMKLTk1NjAxNzY2Nzc3OTc4ZDAxNjc3YjhkMTllMWIxMGEwNzg0MzJkMjg4NGJiNDJkMWYyMjQ5NzYzMjU4ODM2NTcKLTA1YWNiMDIyZDFlOWNiNTU2ZTM3YWY5MTkxN2M3OGU5ODIyOWUzYTRkYmYwM2FlNzQxOTk4NTQyOTc3YWQ2ZGYKLTE3NjBmYzFmMWE0Nzk0NjQ5MjJhZmRhMmNiYTc5NjFlOWRhNjk2YjcxMjA1ZTE5YzU0MmM5N2YyNTQxOWM0M2MKLWZhMWEwNDJiYTBjZjU2MjJmZmJkM2U3NzVkMGQ1NjQxMzVkOTliOWZmYmEwMTFlZWJjNDA2NmIwMDNjZTJmODgKLTgyNTkzNmQ3MzkzZDA1ZDM4MDQ2MDFjZWU5ZDEyMzEyMGZkZjczNjI0YTlkNGUzNjFhMjhlOTk4YWNlYzUzZjgKLTdhNjJhMGFlZTMzYmUyZTk2NTQyNTM0YThhZjI0NDk3ZDFjMzc3Y2Q3ZjcyMzc2N2I0NDg1N2Q5NGM2Y2RhN2EKLWMzZDZmMDA4N2ZhMzY2NTVkZDJiODFlYWVjYjMxZmU0ZjRhMmZiMWVhOWZiZThiODNkMzU4MjZhYzkzZmJiNGYKLTJiZWUwMTRmNDFmOGYyNzY1MTBjZjVjZTM1YzM5NTRlOGNhZmM1MjFkMGMzYWI4MGVhOGM3ZmMyOTQyN2ExZDQKLTQyZDZmNmMxODAwOTE5ZTU4ZGU5YWUxMjMwNGQ3MThhZDgwZmViYmI0MTJkYTU0MTUzNDY5Y2Q1MWEyODg2MjgKLWFkMTA5YmFhNzc5ODE1MjViM2Q5YjBlZmU1OTM1MzdmY2JiODUyMGQzOGNjY2JkNWRiMTcxYTAzODVhNDMyYzEKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjE0N18wIC9aT1ZNUkQrQ01NSTEwIDEgMQotWyAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi9hcnJvd2hvb2tyaWdodC8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmL3BlcmlvZC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWZdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IEVSVkJGVCtOaW1idXNNb25MLUJvbGQKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzTW9uTC1Cb2xkIDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBNb25vIEwgQm9sZCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoTmltYnVzIE1vbm8gTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChCb2xkKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAwLjAgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotL1VuZGVybGluZVBvc2l0aW9uIC0xMDAgZGVmCi0vVW5kZXJsaW5lVGhpY2tuZXNzIDUwIGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9FUlZCRlQrTmltYnVzTW9uTC1Cb2xkIGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey00MyAtMjc4IDY4MSA4NzF9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiODkyYWQ1ZTY5YWNhY2M2YzE2NDBlYgotMzA2N2JmYzY0OTM4ZjQxNjM2ZGI4ODMxODgzYmRkYWJjNjc3N2RlZTE3ZjJlODRmMWQ1MzBiYzc2ZjUxYzYyMQotNzVlYzZiNzI3YTgyYzE5M2QxYzA4MDFhYzQ5MmJiZTI4MWI0NjYyNmJkMjFmMmFkYmJmZDE0NDc5M2VmNzU0YQotZWE1ZjFjZGEzMzEwZTgzZDc4YTA5ODE2MGM2NmQ2YjBjNjhkNDk3Njg5OGQ5ZGMxYTA4ZDAxNzQwYWMzZTdmNgotOGQzY2UwYTdlMTA5MTA0MjQ4Y2I4NjMxODQwMGJkODJlZjg5NGVmZDljOTQ1NmU5NzA1NTI4NmMxNDRkM2VmYwotZDI2MjUxMTBmMWFlNzYyNDEwNzliZWMxOTkzOWFjOTYyZTBiYTgxMzM1OWMxNWIwN2M3NGQ1ZTk4NjhlMjE2NwotZWExMTk5ZDIxY2E4ODI3Y2RkZjFiZTgzNTcyNjFiZDMyZTc5ZmVhNmJjNDc1NTc3YzVmNjg0ODM0NWJjZTU4ZAotZjU0MzUyODE1NzJhZTZiMzNiNTM2MDdlYmVlNmY4NjJkNGM3NTJhZWU0M2MwMGNkYmZkMjU4Yzc3NjViMTM1OAotNWQ2MTY1ZWUwMzRlNTgxNWRlNzljYzI2YzRhNzIwNjA3YmFmYTYwNDk3MTBlZTM3ODJiYzJjZDg0ZmUyNDczZgotMTMzNWQyMGEzYjZlOWU4MzU1YWYzNjY3M2NkYmU2M2MyN2Q0ZjBlMTgzZmVkYWIxMDAzMWIxZWUzM2I5NTczYQotMmUxOTYxYjdjNmJhYTQxZjdjM2VlNzA3ZmU4NjA3MWVkZTU3NTZhMDBkN2IzYmYwYTIxYjdjM2NmNDEwOTNjZAotNjZlY2NjY2MyMmY0NTM0OTEyY2I5MDBiMDhlNjk1NzRiMDdmMjQ2MzA1ZGNiYzIzODc4MDI3OGFlYjhjOWU1NQotM2QwOTZhOTQ0ZWM3YWE5ZjY5N2YzNTRhYTEzN2RmOTBhOTU0N2VmZWMxY2JkNTY4Y2I5OTk5NzlmNWFlYzZhZgotYTg0ZWRhZWUxNTY0ZDE3ODU0MWNmNDYzMTA4MTc4MTYwOGZkMzg5NjQyNTdjZjg5YjFjOGUwMTIwYjNmNmFmMAotNzkzNTk3YWQ1NTNjZWU1Y2NjZDVjNGYwOWNiMGI0ZTk5OGU2ZTc2MjQzMTkxYWY3ZTkzODMzZDA2NzgzM2YwZQotNTM2NzBkN2U5OTZlZDY3Y2ZlNjY5OWE2ZTM4MTU5MzJhZDI3MmFmNDgyOWMyZWUwOGEzMGQzOTM4YzkyOGQxYwotZTg5YWY3MTE5MmVjMTI0N2NhMjMzMDkzYWFmYTU0ZmZhNThmNGFhZjNmZTljNjIzMDJlNTk4ZjRmZjhjYzMyYwotNGQzMTgzOTFmN2EzNmQwZDhiNDE2ZGQzNmQ3NzZiMzAxNDI1Y2JhZjgyZDUyMDE0MTIzODc4MTExMWExNGNjZQotNzkyN2UyYWYyMWVmODM3NTU4MDAyNTM5YWFlYjE3MGZhN2U3ZTM3ZWZkNDQ3YzM3ZGI0NTVkMmYwODUzMzE1NQotNTNmM2M1YzNiZTQ4MTc2ODBlZmQwYmEzYTExNGRiNmFhYmE2YzRkMGQ1N2IwOWVmOGJhYWQ0NjM5OTY3MThjMQotOWQxNTVhNjJkN2FlODJlYWU0YzgyNzYwYzU5NGE2YmEzYzdlZTQyOTBmMGQ4OThiYjNlNDA0Y2NhYTkxZmVhNAotZWFhMjE0NmFjNmEyM2Y2YzVhOGFhZTgzNGEwNTg3ZDk5MDAyNGJiZThkZTQ4NWM3MWI5MTZhZDk2ZGQ2Njc5MgotYTczMmExODhlNmE1N2M0NTllYmJkNzc1NmNmZDU0NzcwZTJhOGQ4MWJkNDYxOGQ5MTZhMzBlYzcwODRiMjQ5MgotNWY3N2FiMTQxNjk1NDdlZWRmZWZiNmYwM2M3ZDUzNjVjZWY1MTJkZjE5NDYyOGQ1ZmJlYTZjZjU2ZDBmNTM0NgotYjZiNmMxZGExZGQ4ZDgzMjFiODg4MDdiNTc5YmI2YTBjOGY2OWNkOTE5ZTMxMWI2YWRlOTAzYjQ3MGY0ZTBhMwotZGQ1MDE1YzY0MzI0NTJlY2VjMDQ4ZGNkMTQ4MTRlNDdkZWY0YTUzYzVjYTZmYTllOTFkOGEyOGM3MTlmOTM0OAotNTA5YzBlMTdkNjMyZjhjYjNmNzQ2OGJiMGU3ZjdmNjUyNWMwODZkYzdlZmI5OTdhNjBlMDU5ZDNkNDkzODQ4OQotMjNlNjBmN2M2N2ZhNmFhODA2MjU5NGYxMjJhNDhjNTRhYTdjMDQ5ODU5OTI4YTNkZmM3Mjc1MmFjYWQwNzRhYQotNDE2YzY2N2ZjZDE3NmRhNGQ3ZDMxYTlmNmJlNmYxNDZkNGE5ZGM3OGY0MTlmYWI3YzllNmM3NGQ0MGVhNjU5YwotMjQwOTgwODhiZWEyNmJmNWE3MjVmZTU2MDI1ZDFmY2Y4NDY1ZWQ3MTAzNzAyYWVmNzQ5NzNmNmZiNjk3ZTY0NQotZTkwMmQ2NTM1NGE0NGJiMzQ4OTAwN2M1NTVhNmEwOGJiMDU3ZWNhMjdjOTNiZmNlZTlkZTQyZTI3ODJmZWQ0ZAotNjY0YWQ3ZjJkMjM4YjdlZGExY2E0YWQ0NzNiYjk1NTllMTFhOWYyMTRlMjU4Y2UxYTJhNjA1MTI5NzViMTEyYgotMzM2ODY0MjM4YTM2NzMyYzNhZGFjYmZkNTJjODVhMGRjODA5ZmY5NTVmOWM4MTQwMWY3MjEwN2YzZDI2Mzk5OQotYTY5ODM2ZDc2ZDIyOGFiNGY5NTRiMDBkYTA3YmM0YTRlMTY1ZjJkYzVlY2Q4MTM4Y2M0MDhhYzIyMjE3YjE1ZAotOGJhZjA0NDA4ZDRiNDdlNTUxMjliMGU1OTZjOTNkMTBjZDQyMzcyMjkyZTFmZjQ4Mzg2OGU4NTEwMDc2ZjdmMQotZWQ4ZWFkMWJkZWUyYjQ5NTMzZjg3ZGRiZWYyYWJkY2JjYTQzMjMwN2Y3YWQwYjNjM2Q0NzIxZjNlNjdlNjA5YgotYjA2ZjhiN2U2NmFmN2M4NDNhYTFmNzFiZGFkZjBmNGZiNmJhYWM4NDgxNWM4MTU0YTAwMjNjZmI2ODI4MmI0YwotOGUyNGU0NzhmODFmOGQyNmVmODJkNmQwZTFkYTRhNjU0NzhmNGExZjY1YTdkZmI0ZDE3MDAyMDc4NTBjMzNmOAotMTQ4MTU4YTc4NGI0NTJhYzY4NzQwODAwMzllMjI1OTQzMWMwNWM0NTIyZjFkNjc1MjJlMjczYjQ0M2FlOTgyMAotYWRiNTMwM2NkMGQ4MzlmZmQxN2ViMWZjNjk1NzE1OWE1NjlmNjQ4NzNiNGIzYmY5OTM0OWM0ODZhM2FmMmIyMAotYjZiOWM0MTI2MzMwMGFiMDg0NGQyNGRhZjc4MGI0ZjMyNGVkYTg1NGQ0ZTIxMGRhZWRjMGUzNGY0YjY3ZmNhMgotMTI2NWVhMzc2NGY4Zjc1NTAwN2I2MmU5ZTE4ZTgwYmQzMGYzYjk2MTI0MDY1MTk4YzBhNTk4NWJhMjE3MjU1MAotOGM4ZWFiZTc3YjI2ZGY0NDUxZjUwNjg5NTZmY2UxMTEwNDFhN2QyM2Y2ODFmZjJjMWI5MzM0NGZlNjg4NzA4YgotNjFhNDc2NzRjMzE4ZDA3OGZjNGJmNzkyMTc2NTk5ODdkY2QxYmRhMWUxYjc0MDY4OTYwMDM2YzQ3MjkwNjE1MgotY2FmZTRhOGE3MDJkMjcxYTAyYzc5MGVhM2U0NDBlNGY0MTU1NTZlYzcwM2EyM2I3YWFmN2JjNTBjNWEzMmY3ZgotZmVlNjQyNjQzM2U5NDVjMjhiZTAzOGNiZTVlZTBlNzkzMzk0NWYwNTI3NTdkNDgwYzU4ZDRkN2RjNGFiOTI0ZgotOTg1ZTA1NGZkNTUzZDFjMDM3YmVhYmEyOWIxNGU4MjNhNDA5MWIwOGVkNjAyYTY5ZDFjM2ViMGZkNjNmYWE5MwotMzZkYjIyZTY1ODhkM2QyZmE3Mjc5MTYxNjMwMzA5NThjYzg5YjNjZTk5ZGRlZGE2MTkwZjk3ZTAzOWY5ODIxZAotYWI0ZTRkOWExNWNiNTA5NDA0MTc5MGI5OTVkODk1MDQxMmJiZjA0OWJkMWQ4YWZlYjhiZGRhZmM2YWVmNzQ4YQotZjI1MjNiODMxM2UxM2Y5MGY5NjZjMTM0ZTM5ZDUyZTEwYjYzZTMwYWFkY2E0MmJiYWM1OTYyZTRlM2Y3MTMzNwotYmMyZmQ0MDY3OWJlYjQ0ZTExMTI1MDM1MmYwNGNiMDQwNDE1OGJhZDlmNzQ0MTZjOTQwMDNiZDEyYzg4ZDllOQotNWNhYzNhM2ViNTc1NzMzZWI0NGEzYzMyOTQ2ZGFjZGIzNDA1ZjViNGEyNTEzZmRmOWU2YmIyZTZlMjFjNTM4NQotNmM1MjdjY2MxMjBlYWY5NWQ0MDA4NDdkZmM5ZTZhNDA4MDYzMzA0NDJlMTg5NWI1M2E2MTg4ZTU3YzY1YjQ2NgotZGEyMDM3ODVmYzMyMmVmZDY0ZjJlNmY2NmY5OTZiZjdjYTAzNWJiMjExNzY0OGE4ODU3ZjFiMTA0NjlhZWUxMAotZGQyMmQ3ODVkZTI3ZjAxZjFkNzI1YjU2YjM4MDkxNzAwNGEwNmFmYzAwNDYzMzVmOTdhMmZmMjBlYTQ0Zjc5NAotYzFkZmQ2YjEwNzU0OWUzOTI0N2E1Y2IzZjljMzdhZjg0OWU5YzVmMDYyMTRhNTcwMTEzZDkxYWQ0ZTE0ZDljYgotYWFkZjhlZjkzYTkzMzc5NWMwY2JmYjcyMDRkYzYwNWI0YjNiOTViOWZlZDAzNzJkOGRmNjM0ZjcyOTMyOThhMwotNmFhNGFiZDFmMjEyZWNkNWQ0YWM0OWQ0Njc1NjczODVmODBlMTYzYjk0NjRmNjU1NGU0OGZmNzhkNDVhYTQwMgotYjVlZTA5M2E4Zjk2ZGE0NTUwNGU0MWJmYjFhNzJmNTc5MDMxZWZhODAxNjkwYTMyZjRlMjQ4YTVmNzczMDI3ZAotZGEzZjM3MjFkNGZiNDgxZmQxYjhlODEwNTRhYTRhNzAwZTk5NjRhODc4NzFlMDFmMDNmZTgwYWM0MjE1Y2RmMgotN2E0OTQ0Y2Y4OWE4OTM2Mzg3MzA2MzEyNjExMTRmOGFhYjk2N2ZlMjllMjgwMTI0ZmE4ZDUxZmM5NGIxYzU1MgotZGI1OGUwMzgwOTcxNzJkNWY2MzRjZWFmYjg3N2Q3Y2FjYTAzNDM2Y2Y2YmY0MGFmZTRkYzk5Y2UwOGQzNjA1YQotNzhlMmM5MGZmZTc2NmZkM2FjMGU4YjJhYjI0N2MzZjY4OWE1NWUzNTBjYmU4MGE5YTQ1MmJmODY2NmQ1NzEwYQotNmZiYmM0NWU0NjkwYWZjNjI1YmI3YThhMjliYzE3YWE1ODJiNmUyMDBiZDUxMjNlMjZiMmQ0NDU5OTJhM2E1ZgotN2FhMTI4YzNmNjIzMDU4OGM0MWM2YzQ1NjY1NTk2MWI4MjNlNjVkNzQ3MWFkMTZmOWFlYTA3YzJiM2QzOWM0NQotNzI2ZjAyM2VhNDc4MDcxOWEzNjU2YWUxODY3MGRhYTNiYzA4NGU2MGZkZjJiYTFmZjAyMDRmMjg1ZDcyZDlhOAotMjY5NDMwZTQwNmNkMzY3NDFiYjIyN2ExYWEyOGNlZGY5NDg0Njg5YTc4ZGQ1NDk1MzM3YmRlNjZiNWE3OTBmZQotNGFmNzYxYzBiNTA1ZmY5NzRlNGM3ZjY3MzQ4ZWIxODg3YjViOTMxNWE3YjM0NTVkMzY3N2JjNzdiNjFkNDhlYwotZjVlYmRjNzNiMjVlZWFmMTJhNmM4OTZhNTRiNDk5YmE1ZjI4OTdiN2RhOTQ2NWMzNDU2MWIyM2UwZTc0MGVlYwotZmM3YWRmOTQ0MzI5ZTAwM2Y1MjY2Yjk0YTQyNWYzODY0YjE2N2EzNGQwYjlkMjU5ZmNkOGQ3NDFjOWRjMGZiNQotYmZmYjhjOGNlZjQ3MGY5MjNkNzk2MmNiNTgwNmM2Nzc2MzM1OGE5ZjZjY2Y3ODIyMGYyOGU0NWE4NGIwZmYzNQotYzU4NWMxOGIxOWM2MWI1MWNiZTU4MDA3ZmI4NTJlMGE5MmVkNmQ3MDRmMTVmZjBmODYzNTI4ZGI3MmVhM2RkNAotM2VhMGFmNDY2ZmE1YjYwYWM0NDkwYWE1ZGIxOGE2NDljNDQyYTYwYjRmODI0ZTkxNDkxNTM3NmExMjdkYmUzMAotODVhM2M1NmVmNDIzMzU3OWI3NTZlYjYyZTA0ZmVhMGE1NTUwM2Y4OGJmZGYwMTE0MzZkOWQ1MDg4ZTAyN2MyNgotZGFhODE2NTg0MmE0ZGRkNDNmYzNhYjhkYWRiYjRkNTNjNWJhOWE1YjUxZjMzZDUwNWZlM2VkMTY4MTA5ZjFmMwotOWFjNWMzMzU3ZTQ4Y2Q5ZTNhZGNjZjJkYWFhZDgzMTAwMGUyNzMwN2Q2Y2IyYWE2ZWNmNWY5MmNmZjM5YjI2NgotNzNiMWQzNTg3ZTAyOTMxMzEwMWE5MDc1YWIzNWRlMjYwZjIzZjNkM2JhYjVmN2E2MTM0ZmQwN2MwNzZkY2Q5OQotN2JmMmU3YzQwZmYwYzBmYTEwOTYzMTJiNzkxZDYzOGIwMDM4MTM4ZWQ1YzU3OGU1MTMwOTQ0NDY5MWMxYjE4MgotOGIzNDZmZTAyODZlMTNlMzkwN2JlZGExMzA0NDE3N2M3ODhiNDk0OGE0ZGQzOThhYTlmYzMxNzY2NWIyNTBhMQotMzU3MGE3ODM4MjFkYjU4MTU5YjgyNWIxNGMyYTYzOWY2Mjk5NWEwNDllZWViODkwNDIyNmE4ZjhlMTRhNzk1OQotNzMxYTc0ZGM0YjIxNWQ3ZWMwOTVlYmU4NmEzYmYwNzA4MGNkYjBkY2U2ZDA2ZmNjMmUzYTU3YmIwNDk0NGY5MAotOGYzOTViZDY1MTE3OTg0YzE1OTYzMDNjMjc4MWUzOTk3YmJmYjZhYjlmMzU0ZWJjZWE3NDA0Nzg1ZDhkZmIwNAotYjE5YTNhNjc5MjgwN2ZlNWRlYmQ2ZWVlYzFiYTliYTlhMzc0NzNkNmM0MzViZGVmZDViMmVhOWMyMWQ5ZWM3OQotMDA0M2I1YWQxYjBhNTBmOWEyNDU5NGQwMGY4ZmQxNTU2ODFjMzNkZjhmMGMwYjNjZDVhNGZjMjc1ZGE2NWRmYwotNmM2NWVkODcxMzk1NmJiOTRiNjI4MWE0ZjM5YzhlZjcyYjkzMmFkZjNmNmVjZmE2OTdmZjdkODRmOTNlN2EyOQotOGZhYjdiNDgxNzJlMzJiYTdiMzEzNWY0YTI1MDE5NjFmNGExYzUwNDAzZmMzOGM3MTU3NDNiNTUwOTVlY2MxYQotMzhmMTFmMTQ3NTUyMWZhMDBmOTUwNzc2Mjc5ZThhMzc3ZmI0Y2E0ODcwYzhkYWE0ZmM2N2VmZTRkYjhlMzdjMAotZDU2YWQ5M2NkMzM0ZWJlMThkZDZkOTJhM2VhNDhiMjllN2U3NmVlYzVlOGFhMGRiMjBhZDY5MDg2OTA1MzQyMgotODU2N2M0YjcyYmUyMDkzNDI2Njc3OTg4ZjhhYzlmN2ZjZGUwZGFjOGJhZTE3NTA2NmE0ODVmM2IxZDBjMjEyOQotOWUzOGE5Mzk5NmEwZWI3YTMzNTdlZTQzYmNkZjg3NDliY2ZkN2U3ZTBhMjNjN2Q5ZTExOGM0ZGE3ZmZmNTY2MQotMDc0NTRmYzFhYjI4YTg3NWFmN2U1MTJiMjQzMjI1NmM0MDFlYTQ2MmQ5YWViMGEyZjk3MjcwY2YyYWE4ZWM1MwotMWU1MjQ4YWQ1MmIxYjc0YTM3NmZhYWY3NzcyZTk0OGY0MzNjZWEyZjBlZDRkYWJlYzAwODU1YTM5NGZlZGI4MwotMWRhZmYxZDk3N2U5YjgxNmViZDI3ODAxNTA1ZGNhYTUxZjlhYjUzMWU2YzEzNThiMjc1ZDNhNmJhMzhmNGY0YwotNTI4ZjJkY2VlYTNhNDA0YTYzNjJlM2NmZWY5ZDkwNGI1NzM1NzFhNGU2MzRkNDg1MmYzYjkyMjQ5NWFmMTljMwotYzYzYzczNmQxZThhNWIxNWNmYzRkYTU4ZjI2ZjIyYmUyMzNiNDU3OTM3NzIyNzExMGY4ZmU1YjBkZjU3YjQ5NQotMmMxNGQyMDExYjYyMTViODU1YzM2ZDkwMWYwMDFlMjQyNjEwODlmNWVkZDM5ZjdlNWJiYjJiZjkwYzZmNWM1ZQotN2JhODkyODQzNGY1MjY4OTM2NWVkNDgxMjM0MTRlYWQyZTAwZjg4NjBlNjBhZmI1ZjU5ZDI3MTVjNGVlMmIzYgotMmIxMDM5OWNhMWMzZjcwMjU5YzYzNzYyZjY0YTVhMWNiNmIxOTk1MDMwYTdkNzc1YTA0Y2Q3N2E5NTQzNmU0YgotYzNiMWYzZDE5NTlkZWQ5ZjM1ZmRkN2ZjZGU5YjA1MTI0NTQ0NmRjYWMxMWZiM2QwMjI4Y2U0YzAxMmEyZjIwMQotODFlYzNkZDJhYTFiZDY2ZWMwMmM5M2U0Nzg0MjY4Zjc1NGM5ZjBlYmE0MmQyN2I3NTViYzU4YWQwMGUwOWUwNAotZTA1ZmQyMWVkMGMxNjAzNTNkMmY1NDY3YjU5MDNiNGUxZDFiODY2NmFjY2UwNmFkYTk5YzA2M2M2ODRkODczOAotM2QzMzhjNTc5NTk1ZDFlMmFiMzAxYzQyMzYxODNjZjJjM2JlMDMyMGVlODNjZGU0ZWEwNTAxNjBiNTg3ODdmMgotYmFkODE1NDgyNWM5YjI5Y2MxNDY4MmUxNWRiNWY1M2FiYTEwOTc5OWMxMGYyNWZhMmU1NDU2MGZkYWZlNmM5MQotYzI0NmFlNTZlZGViZTBhYTMwZTE1MmI2MWZhNjRlNTE3ZjZjYzQxYWM3YjNjMjVlY2FkYTMzZTNmNmQ2ZWU1ZgotNTYyNTQyZTBlNjZkOWMwN2FhOTg4OTUwNWQ1MTQ1MmNjMmVlNzNlMzY4M2UzZmFiZTI2ZjAwM2I4N2Q5ZmJkYwotYTM3NmU4NWFkOTU0N2MyM2U0NjNmYTA3MzQyOWQzMmNhMGU1ODMyNjM4NWE4OTEwNmQ1YjcyY2RlM2MwMGMxMQotYzVmNDBkMWU4YjYxZTZjYjFjYzY0MTZlMjhhZmE2Y2FhNDY5NjgyZWM4MzY1MDgxYTIxZDc3YThiMWRmNzE2NwotNjM0NDIyNmJiOWE3NTMzYzBmZGZlMTUzODc4YTNhZjMwODhlNTIwYjk0OTMzZDAwOTljMmZmODk5NzRiZjc5NQotZDg3MWI5ZTVkNDBjZDdhYWM3MmE5OWYzNTFkODI0Zjg2ZDMzY2M4OWJkNzBkZDQxZjFhODY2NjU3YmFjM2E1OAotYTRlZWRmOTk3ZWI0OWY4ZDk2N2UxNDhmMzgxZTc1M2Q1ZTY3MDgwZDI4NDNkNDRhMzU4NWUwNzg2MTViZWE0NwotNmM4ODI3NzNkOTk1ZjQxNTRmZGI3NzNhN2Q5ZTI5ZmU0NmU0NjRlNjAyY2QyMDYwNjNjOTZmYzUxYzMwZmZlZAotY2VjZGZhMjhhOTUxZGQ1MjExYWNkNjg0ZWQzZWZkOWZlYWE1YWE5OGIwOTFhZWNlODY4MTk5OWQ3YzhjZTcwOAotMWM2NGYwOWUxOGU2NDE5OGI4NDFkNzgyNGUwM2RlMTExMDE0OTM5NzVlY2IxYjdkNTU2NzE0NzI1YTE0YmRiNAotNWQ5MjM3ZWNmNjkzMjAyMTk4OTY0YzE1NTRhMDRhYjM0ODViYmY5ZmY4NjM0NDFkYTM1MTFkOGZlNjM2M2UzMgotYTM4YTExZjRkYzZhMWVlMThiZmEzYTFjMmM5M2E5MDY3NWIwYzIxOTU5MDU0YjE3YjFhZjRkNTMzYzg3YWM2OQotMDhkMGMzNDRmZTgxN2Q2ODE3YTc0ZmRiNDZmMzVkM2I0OGI5MTI4Nzg0ZjQzYTY4ZDgwOTQyNWM2NTcwYzYwMAotOWE3NjE5OTExMWU4OGExYzk4MDJkZTU1ODMzMjAwMGRiYjlkMTIxMTkyOWQ1MDlhZjU5MTViN2FlOGVhMWMzZAotZDI1OThmNTAwN2RlOGU3MzgzZjc0NTNmYzZhOWMwYjkxYzgwZTliMTc0MmJmNjQxOGRjYTY5NDUwNzg1ZmI3MwotMTJkZDIyODg4OWNmYmMzZjY3MTFhMjYwMjJiMjlmOTI5NWVlMWNhODQ1OTMwNWZiZjJiOTNjYjNmZmY1YjZlNwotMmI1YzFkMmM0ZDQ1M2YwYjlhNTNiNmYzNjExMzZiMTA0OGIzMGU3YzkwZTBkZThlZGRhNDIzZTU1Y2NiMmUyZQotZWU3YjUwMmFmMmJhZjMwYTkyYWY1NDI4NjliOGYyNmVlMjg1MDlkYzAxNDkyMDk1ZTBjMjdjY2FhMzBlMGRiNgotM2YwMmYxMWRjMGNlOGE5NGI4YThhN2VmNzM1ZTRmYWIwNDgzMGVmMDc3YThkNzg4YjIyNGMxODQzMzkyNzRmZAotNWY3YjU0N2I3N2Y4MWJhZDk4NWM3M2IwNWE3OWQzYzg2NjFhOWMyYjcxYzczMTNkOGI5Y2I1MGFlMDNhZWU5NQotMmRiZjFhZmM5ZGRmYzAwZDU5ZTZmOTkwMjFkZmZiYjY2YWNkZGFlZGY0OGRmNTQ2MmZjNTI4ZGZkYWZhNWU1YgotYTAzOWQ2YmI5YmRkMWE3OGU0NzY4NGEzYzUzY2EzMDdhYmQ1NjYwOTNjMmE0ZjZiOWYwYmU1MmQ0ZjFmMjc1OAotZWM0ODM3MGVhYjRlMWU2YWIzOTNhMjMzNThiYWU1MmZlZDNiMjcwMTI0NjM5ZGQwYTU2Y2E2YWZjZTc3NDk0YgotMzRmNDY0MzNjYWM5MGViNjNlN2UwZDI1ZGU2YzhhMDY3MGIxNGU4M2QwOGE1MzFjZjIxNDgwMDJmOWE2ZGYxOQotN2Y4N2M5ODliODMxYzUwOWRmMjMwNTdiM2VjNTY5ZWI1ZjVmNTMwZWRkMDQ3YTUzYjViNTlmNDgzNzAzYmRjZgotYjU3OGZkYzQ0Y2E3NDg3ZTNkMzk0NzljYTQ3NjA0NTdlNzAxOGFmMDExMTZiMjliYmRmN2MzZTBmNWMwN2E4ZgotN2Y1MDJjMTUwNTlkOTYzNWI3Y2U2MzAxOTQ5NjJlNDE4M2MzODM4ZDk0MDEyNjBhNzQzZDhlYmFlMTY2NWNlOAotNzNiY2ZlNWQwOTBhODk4NGU5ODAzMGZlNmIyMWRiY2I0OTM5OGI2OTA1ZWMwNGVkMzEwZTM3Y2QwNjlhODVkMwotN2NkOWUzYTAyZGQ4ZTAzNmIyYTc5MTkyZWMwMzZjZjdlMTA2NTNlMDg5MjhjYjhiZjQ5MTExMjJkMjdlMTk1ZgotNDhkM2RmYWEzNDEyMmVmMmRmOGUwMjNjOWVhMWYyNDZhZjI4NzlmNWRmNjMyNzE5YmY3YTkxZjI2NmQ4MjNhYQotY2FlZmNlMDY3YmY3NGVlMGQ2MjVjZjEyOGMzOTMwYWI4MzUyMTM4MGUwY2ViNWRhYTIzODRkYTRhYjIzYzM0ZAotMGRiOGE0YWNjZTFhMzNiNmRlZWEzNTgxZWZlNTIxMjc5MTQ3YWMxYjM2ZTRmNmIyYzA4ZGYyYjJkYmFiMDUxZAotMjY0YTI1MGEwNmVkMDZhYTkwNmMyNjgyYWQyZWNkY2NiZmQ4ODA5NDFiZDgyNGQwMjFmMDg2NTYwYmZiYjM1OQotZTI1MTlhMjcwOGE0OTc2ZjQyOTEzNDY1ZTE4ODcyYTkzY2RhODA5YTg1NzMwYTQ5MzBlZjFlM2U3MzMyOTJjOAotMDZjODBjODg2NTY0NWM2YTY5YjEyOGIxMzMzYzNhYzhjNjE2ZDNlM2EwMTYzYWJhNTRjN2E1MWEwNjNmYmNlMQotNDAxOGNhYmUxYjFlYmRhZmFlZmMyN2QyYjIyYWZjOTY0NDljZDUxNWNjZWQ2NzFiYWE4OGQ1MWM1Yzc3OGJmZQotMDAyMDgxMjdmMWZjMzVkYjljNmFmZTRmYzkxZGQwYmIxMjc3MTgxNTA4ZDdiOTg2OGEwNTUwMjVjNjUzOTRlOQotYWI3YTk1NDk0MTE4ZDIwZmJkZDdjZTBiNWYxMTQ5MmRmNWU4YzU0YzFjZTFlY2QyZTcyNzllMDdmZTZhNjJkNQotNjNkN2ZmZDM4ZjA0YmE3NTA1N2NmMTkwMzE5NjM0ZjU3YWEyNDZmMDNmNWY5MDRmZjk1MmQ3YjEwMDZkNDNiYwotY2U4OGQ4OWFkZTUyZTg2MWFlZmFkNTM4YjY0NDk0MmI2Yjk3ZTc3ODAwMGRlMmYyYWMyYjIyODBkODVhODIzYQotMTc2ZDgzODdjYTQyMGE0NDE5ODBkM2U4NjY2MDQzMjU5MTdmNzg1NzJlYzliYTE0YTA5NDRlMzc0ODBhZDNmZgotOWMxMDU5MGMwNzA1ODQwZDA5YzhiYjA3NmE1YWFlODFiNWUzMTVjYTkwMWUyNjJiNzczMTQzYTU1NDM2MGZkYQotM2RjNzk5ZmQwNzQ4MjY2NmY0N2MxN2Q4YTViYWQ2ZWZhNTNmMjA3MDc4NjljNWZkNDBkOTQwYTg4NTMxMGNkNgotZDVjYTljMzUxNzMxZmE2OWZkZjBiZmIxNDhlMTdhYzI2ZmY0M2JmYmIzOGMxMDE4NjdlZDk1ZDc4OWVkMmIwZgotNjE4MjAyNDliMzk4ZmFjMGM1ZWVlMzIwMzI5ODQzMDJlYjE4MDRiODJiYWQ1MTVkNzIxMjEzNzMyYWQ0M2I5NQotZDRhMDJlMTdiMjIxNTljYTI5ZTMwMDA0MjgwNGI3NTgwNzc4MmI5YmRhNDkyNTVjY2NmNGUzNWM0NjFmZjU5YgotNjVlMzZmNmM2MzQ1ZGJiMmU4YzJmNTQ0NTAzMTk5OWMyZDhmMDQ0NGNmNDE5OGFjMTdkYjQ4MTk5YzNiM2ZlYwotMDJhMTMwZDIzMGFiYTQ1NjQwNmUxMDcwMTc4YmRhYWZjNDIyMzQzZWQ5ZWRiZjQ3MWM5NjVkMmI4OTE1ODZkYgotYTM0YmIyZDY2Zjk4ZjcxNmU2MDU3OTlmMzgwMGM2ODAwMDk0MWE1MmQ2OTE2NDA1ODNjY2UxMWI5NGNiNTU5OQotMjlmZDBkNWU4YTkzMDc4MzFmZTE1ZmNkMjMyZWIzNjE3MjFkMGRhOWU3Y2UxMTFmZjFlYmMyNTZhNDA3MzcyYQotMjUzMTgwZTUxZjE4MDBmZmIwMzEzYzJjM2YzYzRmY2RkZDU5ZjgyNGRjZDBlYWExZTU5ODM3NDg3Mjg4YjU1OAotN2Y4ZTZkMjc5NTQyMDhmYjgxNWVkMWQ1NGEzNjQ3NmE5NWM2NjA3NTFhMmNlN2Q0NzVjNzJmZjE3ODRjMzYzZgotYTY0MTU5NWViOTJlNjVkOWU3YmZlMThlZWZmZWRkZmU4MmQ5ZjZmMGNlZTM3ZTZhOWU2MGI0NDkzOTI2MzI3MgotNDgxNmRmNDBlZDI0NTUxZjBkMDdkODEzYWJhNDlhODBiZDM1NjAxODhlNWQwMTcwMzg1ZmQxNWMzNGI0NTQ2NQotM2Q1ZDU5YmY3NjI0YWIxMTY0NTJhYzI4ZGM5MjE3YjExYzc1YTA4ZDY4ZTU1YjEwZTk1NjdhOWQzZDhkNWRhOAotODkxMTYzMThhZmYyNWVmYWI2MTFkYTY5ZTEzMmJhMmZmODg4ZDY4Yzg0YzA1NjU0NGMwZmU5MTM3ZmFhODM0NAotNDAwODQ4N2MzNGZmMmMyMzc2NTU4Y2UyMDEwOGY3NjU4Mjk2NWZiMDZjMjEyOWU2MDdhMGU2MDg4OWQ5N2ZhYwotMmM3MWEwMjYyOTliMDcxZWE3Zjk5OTVhNTQyYjdlMzFlZmVkZThhNGQzNDEyMTBhMzdmN2I0YmI5NmFhN2MzMQotYzg3M2NjMGMzZWRmZjdiMjNkOGEyMmU3ZTYwMWZmYmJhYjBmNjcxYjAyYmE0ODdjZjZiNTg4ZWJlY2QyNmY5YgotYjdlOGRlMGNiZGE4NzA2NjJiY2NhOTA3MTZjMGZmNzY4YTljN2M2OWMxZGNiNDA4NmYxZTg4MWM2ZGQ1YjNmNQotMGFjNTE3Y2EwOTZmMjhiMWM3YWM5MTk1Zjk5ZTQ0ZDQ0NDAxN2EzYmQ1NGE2OGY0NTg4ZjBhNzU2MjU1MzA1MwotOGJmYWY3Nzg4YTcyNDNjMzA0NDYyMTNiYzk4N2UzMzgzOTEzZjI0YjM2YjMzZTRiMDgyZTUwN2NhZTYzMzU4YwotOTY3NTU5OWY2ZDc0NjMwNWE0MTdmZTg4NDhmMzdiZjg1ZjQ1MzVlMjhkZGJjNTg2OGRkNmRiZDMxNDhjZGMxZgotMmMyZDIyNGYwMGMzYWY0YzFkZGJmZDg4YmY3OWVlYzc2ZTQ1ZWY1NDZjYWU1NDg4MjVhMGJjYTZiZjkzYjBiMQotMzczYWY2MGE3YjI0YTc1MDc5ZDY2NDVkMDkwOGE5ZjU1ZWQwZmU3Mzk3MTAwYTczMGE2ZjRlNTU2Nzg3MTRiZAotOTBjODg3ZTQ2YTJjNzcwM2IxM2IxZGRhNzRhODE5Yjk3YWJmZTYyNzVhMjRlNzM5MDE1NDAxNjg3MzdhOGIzMgotY2ExOTAyYjc1NzdiODc2MWIzYzRhNmI2MGRmYWQ0OTBlMzVkNzFjNWYzNWQ4ZWYzODJmZTY2NDMzMzM2OTUxZAotZTRlZTk4MWY5ODAxNjg4NTM0Mzg3NTVmMTM1YzMzM2I4NzIzZDU3NzhlMmUzMDY3ZGM3M2I3ZmQ5OWFhZmJlMQotZDVhMmQxY2Y0NDM5MDVmYjQ1NzMwY2U4ZmZmMTQ2NzRhYmRlZDlmOTRiNDU3NTZhNjQ2YjRjYjFmNzg5YzdlOAotMDc0OGYzNjQxYTIyYzAxYjEwYWRiZGM3Nzc2MGMwZTJhMGI5MDU1YzRmOTEwN2Q5MzVmNWMyZmIyZmRkMjg0NQotNmQ2ZDJkMjA5NmU0YmFmMTRiY2M4ZDcxNmFkZjA1M2JmZTQwODQ1ZjAyYzBkMThmY2NjNDUzZjNmOGU0NTQ1OAotNjlmODAyZjUwNmNhMjFkMGZhYjI0ZDdmM2Q2ZDZjMjE5NjM3YTJkY2JjNTg2MTRjMTQ1NmE5YzZiMGIwZjU3ZAotMDljY2U2NzVmZmY0ZjYyNmIxYjY4YzBhNjNmYjlhMTYxNDVkNTgxNzZjZjI3ZmY1ZDM1MTNkYmVjNjAxNGYzYQotMmI1ZGU3Y2U2OWM4YWMyZmMxODRiYWQyMzk1MGIyOGNmMDQxNDgwMTc2NDk2N2ZmOTcwMjJjZDQ4NjVkOTk0ZQotNTg1ZmYyYzk5MmQ0ODBkZTMxZjU0OWYyNmExOGU0NzIxMTMzZjNkODgzMTY5NzZiZGFlNDE0MzFkNDRlYzhkNwotNGVhY2IyOWFlYjEzMmZmNDllM2M2NDZlZjAyNWViNTQxZGNjNTRmMzhiOGFlYjU2Mjg4N2VkNmNkZDA3ZmZhNgotY2YzYjJmODllNGIwZmJiNTIyNjcwMjA2OGI4MDQzYjZlMmYyODRlNDM1MGM5N2E3NDk4ZTY0NDBiYzNjOGQyZAotMjdkOGFhMWVhYzk4MGU5NjA2MTMxODBhZTQyMjQ2MjRiMmM2ZjkyZWQ0NjY2ZTM5MWFlNWUxNTljMGNlMjA3YQotNzQzM2U0NjJjZDkyYWViNjdlYjg5ZmRjZDIwZTQ2ZjE3ZjNkMTVlZTY3OWMwNjQxNzZhMmRiMGFkNWMzOGVlZAotNzU5NWNmNmFiOTc1MGZjYTc2ZThlNWVhMjQ0M2I5ZDEzZGEzNzVjYTJhMmRjODdmYmQzZDgxZWQ1OGUzNjZlZgotOTQ5NTJjYmQ5MTgxMzRlYTA4ZjkwNTE2ODU0MjA3YTJmZDkyNzk5YzQxMGVkMWZiNmE5YzM2ODc3ZDBiNzc3ZQotZWY1OWIwM2YxOWJjNmI4ZmRhOTFhYjhhZTIxYzg5ZDExNzgyNWExNTk1NDY2ZGExMGYyMGI4NmQ2ZDIyM2NkYgotNjk3NjMxMmM3ZmI3YmZmYjU4ZmVhZGZjZDAxOWJhY2VkY2U5NmVjMjM5YjVhNzk5MDA1ZTk0YmRlZmI5ZWM0MAotZTcxN2E1OTczMjZiNTMzMGYzOGZiZjcwOGQwMDJjOWViOGQ4ZWEwODM0MjQxYTM1ZTNhMDdhNThhMDMwZTY3OAotNTgxMmJiNWRlMWNiNTExNDI2Y2Y0OWZmMzk2NDdkYjY1ZDhhN2YyZjg3Y2E1ZTkwM2ViMTQ3ODk4NGFiY2MxNwotYzdlZTBiMWY3ZDFlOWUzYjgxYzY2M2FiY2NlNzdhOTBmMWNmZjFiMDFmMTE2ZDI5OTVlNjVjYmEwYjNmMWEzZQotODAwNzllY2UyZmMyNWUwZjVjZjI0NTA3Yzk5ZTViNmU4N2E0MTdjZGYyOWExYThjNThhYTc0N2FmYTk2MmMyNQotMTQ2NzFmYmU0NjdlMjI5MzFhNzIzYTIzNmFlZGZmNTY3NmFjZGU2ZWU3MWRjOWVlYzExMzAxYWY5NjkyNzI3NAotYTczMjgxM2E0OWE0NzNlZGI3ZTk4ODZiNmM0NTYwNTY4MWE1NjNmMzI3NDVkNjBjYjRhMjZhNzA2NDQwNjc1NgotYzlhZGQ3MjRlOWI0MDAwOTczNzcyNThlODFjZmUwODViMWFiZGIzYTAwMzU0MzUzYjUwYzliZDExYTZlNjU1YQotZDI2NGEyMDM3MDhmNzM5YTQ2ZTQzMjJhMWE4MjA0ZTMyYWUzODVkNGY3Njk0ZDZhZDYzZjk3NTk4NmZmZDg2OQotMzU1YjdlYTljMGZlZWY4ZjZkN2JjY2UzMTI4YTBlNDU4NTNkZTBhNWY0NDJiYjgwNTE2NmM3OTA2YzlmMTAyMwotZGY3MGJjYTY4MzkwN2EwYmJjMTEyNDk2NzBmODFjNTIyNDQxYWE2ZmM0ZTc4ODlhMzhkMTVlYWQ4Y2FkNGNjZgotZTk1ZmY1NDM4ZDBlZGM0NTBlNjM5OWYwMjI4ZWEzMThkYzI5NzllN2U1YTM2ZWI3NmY5ZDgxMDYxZWM4YzYxNQotMjE3ZDlkYzdhMWQwOTI0ZGQ5NTNhZDJiNzQxZTQ4MzU3OTUzZDQzMTg2ZGE3NWYzNDBjNThiN2QyYTZjN2VhYQotMzAzOGZhNGI2NmIwY2NlYTUxYWY5NjEwZTU1NThkODJiZjc5YTMwMWQ3M2Q1N2I2ZmVhZWYzMmQ2ZjE5ZTgwMQotZTM3YTNjMWVhMzQxYmVlMDg4ZTMyMmZhZjlhYjVhYjE5MzRiNzBmODk0ODUzOTg0YWJkNWYzNGM0ZDNmZWEwNQotNWFiNGZjNzAxNzljYzlmMTM3OWY5OGIzZDFmNTI5ZjNjMmFhNGFlNjNiOGQyYmZkNDZhZmRiY2RhOGVhMTFiZQotZjMyYzkzZWI0ZDQzNWZjMzc0ODZhMWNiYWFkYzNjOThkZTU4MWViYWQxOGYzNTE3NWQ3YjNlNjdjOTE5NGQ1YgotYmIzY2QxOTE4ZTg2ZGFhY2I4NjA1NWE1NDhmYWIwN2NlN2M5MzNiZDk4NGViNzEzNDA1ZDJiM2Y0ODEyNDQzMgotYTg4ZTEwYjk3ZjdiZTNhMjcwNDA1NTk0ZDNlMDZjMTdiNDc3MTllMjY3OGYwZjA2OWZmMWFiZmU3ZDM2NzJkNwotNmE3NDhhOWUyNzdmZmRkMjVmNTQ3N2QwYzlkNjBkN2U4ZGE5ZTBlZjMwZTVmZDZjNzBkNDdkMzE2MzdiYzBjZAotNGQ2N2Y1ZWQyYjEwMzg4OWE2MWZkMTEwNzVhYWJjZTlmMjUxN2VjOWI1M2Q3ZGI1YjI3NzkwZDliYjFlMTljMwotZDdjM2E3ZTFiOTU1MTZlZTM4MDYyZDRlYTc1OTE1MWU0ZGUwNDQ5ZTZhYWU3OTUwMGM0MmI0ZWZlNDkzNmQwZAotMDAwZmIzMzkxMzMwYzAzNWQ5ZDZiOWUyNTY3MWY5YWM1OTlhNDBjMzdiMjQzOWMwNmZkZmQ5ODhhYmNiYWY3NwotMGU0MmQzMjRlOGNhNzg2MTNmMzVlYTY0YWE4OGMzYzQzZTUxY2ViZThlZDEwNjdjYWQ5NGVhMDM4Nzc4M2UwMwotZTc2YWY0NzRmNzM5YjkyNDlkMWU5NWVlZjg1YWI1MjhlOGNkMmRhOTllMzNjN2VmMGVlOWRmNjk0ZGI0M2YzZAotZmU0NjdlNmZkMWI1MjkxZWNiZjZiMWFjN2EyNWMwMDJkZWU4YmUwNzI3ZWM1NDM5NzE1YmZkOGY4NTQ4NDNlYQotMWQwODA2NzdmNjQ4ODlkNzAxNjVmMWJhZDExMGE4YmFmMzg4NTYyOWY4ZGRiYzNkM2IwOWM1N2RlYTI4YjRmNgotN2EzYzA0MmNlNjRkNjM2ZDBiZGVmOTIwYWI1ZWY5NTQ0ZjUyYWQ1MzM4Mzc4NjdjNDkzMGZkNGRkMzIxM2UxOAotYWUyY2E2MjJlMGUyMThiMWJkNTRiZDYwZTAxZDRjZGRmYzJlOWI2NGM2Yzk5ZTc5YWIyYzNlNTJjYmVmYTU5OAotNDM0MjEzZDQ3NWI2MjkyMTkwYjg5YmU5NWIzYzY2NjAxMzNlMWI0OThiZDdmZjJmZDE0YWFiMmFjYTBkZmZhZgotNjJkOWRmMzBjMTljYTBlOTQ5MDA3ZGNmODQ1M2U3MGU2MGE1MTk2NzRkMzA1NTIzZDMzYmZjMzExOTAzNzIzNgotMTljYzRhYjE3MDdkYjJjNDk4NGM2ZDRmYjQzMTA5MzJlOWVkZTc4MDhjZmM3ZDM0M2E3ZmRhMDgwNjg5NjZkNAotNzg3N2Q3ZGU3YzBmNWZmYmZhYWU1NjY2YmUzYmRiNDhkZTMxYzVhYjZiY2ZhN2QzNTgxNmU1ODYyYmM0YTEzYwotZWNmMjM1NTkzNTA0MGZhYzM3MTQxZjdiZWY3ZTU4ZjdiMDI1ZTE4N2RmMzk1MGVkZmQ2Y2VhMjBkMDY0OTA3MQotNDQyYjI5MTZlYmNlNWY0ZDNjZTA1NWVmZGFiZjFjMmRjMzQ4YWMwYWU2Nzc3ZjY3OWUyZjYyYTBhM2VlOTEyNAotN2ZjODU1YmZjNmYwYzMzN2E3NGM0NGVhMWY1ZGQzMmNlNjE4M2E0YzgwYTZiOTY3ODYxZjYxMDFjMjhiNzJkYQotZDZhYTExMjhmMTk2NjI3ZTI0MTc5YzE4ZjM4NGUyN2NmN2Y4MWY0MzEzODM4MWQxNzdmOTNmODA4MmNjOWQ1NgotMWIzYzk5ZjFiZWEwNzNhMWE4MWY4YmNlYTEzMWUzNTg3YjM5NzkzN2M0MDI5ZDQ4NmZlNjg0MmE3MDk1NThmNwotNDNjZDE2YzhmMGE1ZTRmYmIzZTUyMjY2M2I4MmUyNTQ0YTZmZWNlZmQzZDhhMmIyMjIzMDFmZDQ5ODhjMDEzNgotODU5ZTg2MDg3ZmFkNjMyOTJiYzQxODc0MTI3MzFhOTY2NzEwY2E5Y2NiODYzMjk1NjBkNjRiZTMxY2E0YjUyNgotODIyNDVjMWE0ODcwNDZhZDIxZGQ5YTI3MGUzZmFlNzJmZWNkY2Y5NjA4Nzg0ZjY0OWEyNTQ3NDAzNGFjNzQ0ZAotNDRlMTRlNzJkMDJmZjE3YjIyNTJhYTUyNzNkZTNiYTNjZDcxYTk1MDcwYTlmZWQwZGZmODA2NTNiM2QzNDZjNwotNTYxMTk1MjllNWJjYjYwMTFkMzQxZTM2ODgyN2NkZGYyMmQ0Zjk5ZjE3ODE4MjlkZjgwODUwN2UyYjRjZWIxMwotMjExYjA4ZjU1NDQ0ZTc1YTAwNTYzOWEyMGMzMzcwNmY4OTg1ZjMzMDhjMDhmNzdlNzJkYmZiZTA0OWFlODE3NwotYzJkYTJlNjJlYjU4ZjBmYmIzNjlmNWJhYjBmZmY0OWY5ZDQ3NjVmOTMxZmU2NmY4YWExMDdkODExNmJlY2RmYgotNDY2ZDI4MjUyN2JhYjZmYTI5NzIxNjc4ODM3Y2I0NmQ2MDE0OGE3ZmQ5Y2FlNjNkNmFhNjM0ZDIzZWUyMTE2MQotZWY5ZTgzNDUyMGYzNjc5MDNhNjViZWY3OTk2YWI3N2QzN2JhOTdhZWIyYTdhOGMzNTAyYWFjOTg4ZTdhMDQzMAotOWQ2N2EwNmRiNGE5MDcxNGZkMWE5MzM0MDJkZjA4MzAwMjY5MjBiZjFmNzFjYjAzNzliZGE4NzE0NDE1YzliYwotZTc3OTVmYTRlYmMzN2U4MTliM2Q4ZWU2NTM3NWJmZGQ2YjM2YmRhNDFiNzc5MTg2NDM4OWU5YjU4OTkxOWVlNgotMjg3MmJhYzJlMjIxYjI4MTUwZDMwMjRhOTg0MDMzODk5ZTUzNzJhYjQ3NGI5YjQ0OTRmN2JiNDMzMWI2MjEzZQotNzk1MzU2NWYzNWQyZWE2ZGEyMTI5NTZkYWIwMTU3MWNiZWVlZjg2MjkzYzU4YTI1OTg2MGUyOTRmNjk3MzBlNgotZjE0MTY4MGNmNzVkNDBlODI5Zjk2NzllOTgzNDFmZDFlMDgxN2NiOGU0MGNkNmM0ZmE2OTFhYzY5MWZiNTlkZgotYjc4ZTg3YWRkOTUxZWFjNDFhZDFiNGY0ZmE0NWQyZTM0NmUwZmE3MzE1N2E3ZDJiMmRmODllYTU2YTgwZTg4NQotOWUwZDAzMzFkMjE2ZGI0ZjFiOTVkNjYyYmFkNDBlNDcyZjIxYmJlMDU1NzZjZTRhMmQyN2FmMDE4ODBmNDM4YQotMzBjMTdiYzY1ZmI0NjBhYzFiM2UwMWFhNDNhYTM2NzdiYTA1YTQzN2ZjY2EzY2U0YzI4NjRkOTljNzAxZDc5ZQotM2ExOTlkYmM3ZTJmMDBiZThkNDM0N2Y5NmI2MWJhMGY4OGU5MGI0OWQ0MTJkMGVkMTYyZTgyNzE1ZWEwNGMyNwotYWYzZmViMGE3YjNlNGRkMTdjODc1YTUxZTliYmVkM2M5ZTEwZWFhYmVlYzBmMDI5ZDk0ZmE5MGQ2MDYwNWI1MgotMmRjZmY1MzlmYmMzMjNlN2YwZTFjYmZjMWExOTJhNDQzNDVlZmMwNzBiZDVkNTkzOWQ5ZjQzODM4OTc3MDRmMAotZTc4NTEyNmFiZDlmNTgyZjFhZmU4OGE3Mjc3ODRhZmRhYzNkY2E0OTg5MmM2YmViNTJjYjFhZGVlMTgwMzRlOAotZTg4YTQ0MTg5MDE3NTU3NTk1MWZkODc1OTRiNjM3NTFlNjkxNjU0OTZkNTY2YmQyM2M4ZGI0YjkyMzliYmFhOQotZWY1MDU4ZjViNTFjNzRjZjcwNjMyZjg4ZjFhMDVlMWI0MDA3OGMxODNlYTg0MzM0MjdmNjNhNWY2OGExYjgxYwotYmQ0NjYyNWI4YmEyY2Y3MTNjMDAxY2NhNGM3NGExODZmOTNhYWEzODY5YTUxN2RkNjRmMWU4MWM3MTgyMzIzOQotMTkzNGZhZWE2MDRjZjRkOWRkZjk3NGZiMDljNTc4NmJkZTA1OTc4YmIyNTIwOWI1Yzc2NDg2MDJkZDYyYzMyYwotNjFlYzRiNWNlMTE3NzE4NTM1NGRkNWNkZjE1NTQwMTIxYjZkODI0NTdmZjMxMTFkYjFhYWIxODg5ZmIwZTNjOAotMzhjYmM3YTY3MWJhMTZhNGJjNTY3ZDljZGQ0MjcyMDVlOGY0ZGU3ZWRjNjRjMDBiYjYwODAwNzExMzBiNDNkMwotNmU3OTE5YTViN2MyOWM2OGFjNTA1ZmYxMDdkMWUyYWI2NmEzNDE3NjEyYmEyZjQ2MTU0OGYxZTcyYzcwMmExOQotN2E2MzExZGFlNjQ5ZTQ2NzY4ZDg1ZDc1OTI4MTQyOWI5N2EzNTM3OWI4NGM3NjNkMzVjZmQ0MzRhNGUzYmJiOAotNGM2ZTVlZThkZmYzYTc0NDliZWMxNGM3ODViY2UxZDRjNjE3MjE3ZWU2MzE1ZmRhMDAwZjBjNTRkMTA1NGU4MAotYzhmOWY0NTJkYWFhNDY1ZjYzM2ZmYzNlZWRhOWM3NmU3YTc3MDI0ZWFmMzliZDViYzk1NjJmYTQ0ZjNkYTlhZQotN2U2NjVhMzNiZDIyYWFlNmRiYzFkOWVmYWI2Mzc0MWUzMDc3NWVlZmZiODE5ZmY5MzMzNDJjOGU2Yjk3OGY4YQotMmFhMjBjMmYyODEwMDcyYzRmMjQzN2U3Y2MxMzg2MTAwMmFiNmQ1ZWU4NGE2ZjgwNTQ5NjgzYTM0ZGEzY2VjOQotZTM0NzFkMTEyMzMyZWEyNjAxNTM4MzZmYTI0ZTIyZWVjMGNkYjBhNWIzYjA3NzNjZmQyMzdkYWE2N2M1NWFhNAotY2JmMWNjMzBmNDMxODNhOTNiZjdkNzA2OGVhZDMyYWM4MDY0YmIxZjBhOGJiNjFjZjU0NzJiY2FiMzYwY2Y3MQotYjYxYzM0NDNlYWU0ZjFlYzdmYzBkODgzNTU5ZjhhMmZmMjUyMmRjZDdkYWQ1ZjM5NWU5YWIyNDU0Y2NhNmRhZAotMDdiYjU4YmRlYjFlNTRmNzU4MTZkYWJlYThkMTcwOTc0OTA5YjJmYWQ1M2Y5YTY5ZDk3ZWIxMWZmMjBjNmFlZgotZWI2ZDc2ZTlmYTkzYzMxNzExNTYwMmRiOTAzNTliZTYzOGRhMzgzZDllMDFmNmJkYWNiNWFjNWJkN2M3N2Q0MgotZDgwNjQ2YWNlOWYyMzg0Nzc0NjEwZjYzZjk3ZDcwYzRlODFhMjg3MWJlMGE1YjAyOGM4OGFmZDgyYTNiNjM3NgotNWQ1MDY0YTY3ODZhODI5YTZlNjMyMDEyMDM5NWIxNTQxYmZkNmUzZWMxODJkNTA5ODJkN2JlYzQxNDBmMTQ2YQotMDY4OTBhNzliODVhNmYyMGY5YmY2MTZmNWY1NmUwMjc1MmM1ZDE3N2E0OGFhMmY4ZWNiNjdlNDJlMjMxNDg1MAotZDIxMDljMDk2NWE1NWQxZTBmNDcwMzcxNDQzOTkxZjliODg1OWFjNzBiZDZmMDQ5ZGJmNTdjY2M4ZTJlM2M2NwotZWI4ZDFiNGYzNmM2NjA3NDYwMDg0NjBlYmMwZjcyODRjODAyOTI1MjA2Yjk2ODQ3N2E1MDNkZmE2ODc5Nzk0ZQotN2VkODJmY2M1ODQ0M2ZhMWQ5NWZkNTYxYmM5ZDNhMmNjYjJiZmExOTkxNmQ4YTg4ZTZmN2VmZjBjZTBhN2Q0ZAotOTBjNzdmNjNiYzc1ZjMzNjhmN2E5N2RlYTlkOTM5MmUzZjQ5OWFlNGI4ZTUzNjAyNjM2Y2Q1M2ViZGI0MjIxMwotYzI2NjhhM2M2MThhNzZmNmY1YTk2ZmMzM2MwZTQxZWY2MjBhNjNlM2M1MjUxMmM2NmI1OWY4MTBjNmI4NTkyMwotZDgxZmY4NjE4ZjQyZWUxOWIxMGQ0ZDA4OGJkNmI3ODRlNGY5YmQ2YmZmZTA4MzE2MTE4MWIyZjc5YjM3NGZkNAotYjg0NjY1MGQ0Yjk1YjZjM2U1ODQ0OWQ4ZjBhMjAxYWVjNzJkODc1ODhjNTRmYmIzMTEyMDQ1MDQwMTA5YTNkMgotZDk4Yzc3OGVkM2ZlMDdmNTQwMTA3NzNiNjI4YmFmMjlhZDNiOTEwNzJmYmRlZjdjZGUwYjk2OWQwYjY5NWJmMgotNWQzODZjNmI4NjQ3YmZkNTVjMTY5Mzc0YzU3ZDViZDhmYjI5YWY1YzVhNjcxOGQ3Y2VlMzE4YTA2YWQzNWQ5NgotZmJmODc5OTI5ZTI4YmQ0M2I1ODNhZmYyNzY5Njg4ZTA4N2IwMGVhOTViMjg2MjlhNzFjNmVhODQ3Zjk4ODM1NwotZGE5ZTIzNDIyZmUyZWJjNGMzM2YxODM2NzkyMzNlMGQxZDgxNTBlYzU4Y2E2Y2EwYmRhMmE1MjllNmY2ZDE0NgotOTIwMTBiMWVkYTYzNjBhYWM5NDBlZDIzNDEwNDU1MjA5MzgzYjY4YzNhMWZkNjhhMGVmOTJkMTZjZDRkZWRhOQotOWRiZWRiMWNlMThhNzk4MTdmYjNkMDQzZjkxOWYxYjk4YzYyZWNjNzBkYzI3ODg2YjI1ODQyOGFlMmQxMDc1ZQotZWY4YzEyMjVmOTZiZTVlZTNjMWI0ZTEyN2QyNmJjMmFiYzZkNDU3MzMzYTBkNWNjZTk5ZGZmMDBmM2Y0MWUwYgotYTlmZDdiYWM5ZTk2NjkxY2QzMTZhYmU5MTNhNmVkZjk1YzZjNWQzNzA4NmNmM2NiOTYwYjgyNjg0Y2U0NzNlZAotNTc0ZmQ4YzZjYTA1OWJkNjc5NDQxYzIyZTZjMzkzNzZkM2EzM2M4MDExMzYxYzgzNGJiZDdiODdjMzQ1YTlmMAotYzZjYzEzMjhiNWFmOTI2Zjc2M2JlYmMxM2JlOTIyMzhkYTE3MTEyNGRlMTE5YTA5N2Q2NWU1ZDYyM2NiZjE1NwotYTRlOTNlMjUwYTZiYzM0YmM1NGZlYjI4ODlkYTNmNTk5M2VmZjBiZjM4ZWY2ZTQ0MGQwYmRiNDA1NzQ2YWE3MAotNGU1ZGU1NzBiMDM0N2Q1MmIyNWFlOWUwZmZkNzU4YjhkNmRhMWE1N2U0NzI4OWEyNmQwZWQzMGUzMTQ3NDI3MwotYzIzMTVjNzRhMzllNmIyNmY1NThkZWMxNDBkMzg0Y2QzYmJkNzI0NmJmNDZhMGY3YmVjY2U0NWZlMGMzNDNjZQotNzgwMTYyMDRlODE0ZGNjYzU4MDYxZDQ4ZmZjODA4NDIzNDUyOTg1YjEyZDI4Yzk0ZWFiYTg5ZWRhNzkzZjdiMgotOGQ5ZmRlMTFmMzA0MzRiZGY3M2M0ODQ4NGE4MTRlYmU1NDFmNGU2ZWI4MTdkZTQzMTQ2YWU0ZTA0ZmE3MTI5YQotZWMwZTRiOTJhZTIyYTFkMjM0NDM3NWY2ODMxNGQ4MzlhYWRlNTljNGFjMWQ1NTY1MzhmZDdhOWY3ZWU5YTEzOQotZjM2MjA5NTJjNmM0NWY3MTgxYTY0NDhhODA3YTFiZjYyY2I1OWY0NDAxOTkyOTdjYmM4YTM2MGQwMTY4YzE1MwotN2M2YjNiYTU2ZGQwZjdmMTA0MjcxMTM4ODQ2YTZmMzA1ZjJjOGE3NTM2NTEyYzU0YTFjNDYyMzI2MDZhNjY0OQotODFhODA4M2Q1OWE0YjVlOGNhMmNkMGI3MGRkMGI0NGJlZjFjMmFlOWViY2JhZWVjYmM3YzRiZmIyY2UzMDlmNwotODMwYmEwNmYzYzhlNzlmZGRmNzM3NDUxYTY3ZDhjNDQyNWM1MWUxMWY4MzJkOTkxOThjMTZkZWU4NjRiNGM5YQotZTQ4ODYzZjVhM2NkMGU2ZjNjNWIzMWE2YmZmNTI3YmNlMjYwYWVmYmM0MGIxZDgwNjVkMmY4OGY5N2RkOWZmNAotOGIyMWQwNjlhZThjZWJhYTUxMWYwZDAwYzFkYTc2MjA3ODIxODU5YmIxOTFkNWY5MjYxYWRmZjNlNjQxNzc4OAotNWI0OTNkYjQ5NDIwZjQ3MjQ5NmE4MjA3ZDNmMmQ2NGZhMzMwNGRlMGU3OGQ2MjU5YTYyNmQ4ZmRmODFjNTFkMAotZjgxZWY4YzYxOTUwN2YwNTQ0ZWJkM2FhOGQxZjIwMGE1Y2UyNDBhMTE3MTQ0MTQzOGQ2YmJiMTljMDg1MGJkZgotNGEwMTQ3YmFmNDc4NzUxMzc1MmU0ZTA1MmEwOWQ2Yjk0YmVjOTYxMDdlNjRmNmIyNjkyYmVkZjJhMzg4NjNlMQotMTVhYzI1NjRjMGViMTBmYjkyM2VmM2Q1MDVmNzUwYmZiNjQwNzg1NjQwNmNjOTJlOWIyYTNhODEwZmI0OWVmOAotZThmNDQ1YzJlMzJiMzBkMzUyZmJhNmZlMzQ1YzhhZjI0MTMwN2U3NmMxM2VkMzc2NTU0Yjg1N2IyM2YyYjEwZQotOWY0ZjFkNmIyNWVlODUwZDc0NDMzMmZiNzMzNDk3OTA0MjZiYzNhZGY4MTE5OThmODRmNDcyMTI0N2VkOWRjMgotY2IzM2QzNDNlZDlmY2JkZDAwMWQ5NzcwODQwOGE0ODg1ZWYwNTkwODMzMzU0NjE2Nzg1OTc4ODEyNGY1MGVhZgotN2Y5Y2Q1YjdhOWY0YTc3YjIzMzdmNTE1NjlmZTNmYjQ1ZTQxZGM1MDM5NGVjOTYzODUxZmVmNzZlZDY3NTkyYwotYmFjNjhlMzc4MDQzZDc3MTM3OTc0Y2I2MTc3MjIyOGQ2M2Q0NmQ5MjgyMTY2MjIwM2RjYzBkZDFkYjM3NWJkNgotOTVjOTE1M2M3MjI2MjAyZWU1NDVhYTM2YjBiZmJhNDliYmE1OWU5MThlM2JjYWQzNzdjYjQ2MWQ1MjQ0MmI5YwotZDE1OTc2NDA5MGVmYWEwYTg4N2ExMmIwYzk4ODRkNGViMGNiYWU4YjJiNWZlMWQ2OGI4YjEzYWJjZGU3MzIyMwotMjM0MDYzOTA3YTgwMTIxMzRkYzQyMzM3ZjEzMWNlMDEyYTk4ZTU4MmZjYzUwYzk1MDdjMWY4N2I4M2Q2MmRmYwotYmI5NTFkZDQ4YzNmYjA3OGFhZWJmYTI1YWUxOTA4Zjg3ZDk3OTE1ZDg2YmVhNTNlMjNjMmM0ZmQ0MjYyMTBjYgotYTUxN2VlMzY4MTE4M2QzMjdhNWFiNDJjMDI5NzdjMzIyMTIxM2U3NmVkNWY5ODZhZDZiY2MxNGY1MDY1MTM2NwotZjE0MmE0ZGM2Mzc5MjEzOTc0ZmI5MGE3YmUKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjM5Ml8wIC9FUlZCRlQrTmltYnVzTW9uTC1Cb2xkIDEgMQotWyAvLm5vdGRlZi9kb3RhY2NlbnQvZmkvZmwvZnJhY3Rpb24vaHVuZ2FydW1sYXV0L0xzbGFzaC9sc2xhc2gKLSAgL29nb25lay9yaW5nLy5ub3RkZWYvYnJldmUvbWludXMvLm5vdGRlZi9aY2Fyb24vemNhcm9uCi0gIC9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZsL25vdGVxdWFsL2luZmluaXR5Ci0gIC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsL3BhcnRpYWxkaWZmL3N1bW1hdGlvbi9wcm9kdWN0L3BpL2dyYXZlL3F1b3Rlc2luZ2xlCi0gIC9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAotICAvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCi0gIC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbgotICAvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCi0gIC9hdC9BL0IvQy9EL0UvRi9HCi0gIC9IL0kvSi9LL0wvTS9OL08KLSAgL1AvUS9SL1MvVC9VL1YvVwotICAvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCi0gIC9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZwotICAvaC9pL2ovay9sL20vbi9vCi0gIC9wL3Evci9zL3QvdS92L3cKLSAgL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlLy5ub3RkZWYKLSAgL0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJhc2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsCi0gIC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FL09tZWdhL3JhZGljYWwvYXBwcm94ZXF1YWwKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2J1bGxldC9lbmRhc2gvZW1kYXNoCi0gIC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lL0RlbHRhL2xvemVuZ2UvWWRpZXJlc2lzCi0gIC8ubm90ZGVmL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24KLSAgL2RpZXJlc2lzL2NvcHlyaWdodC9vcmRmZW1pbmluZS9ndWlsbGVtb3RsZWZ0L2xvZ2ljYWxub3QvaHlwaGVuL3JlZ2lzdGVyZWQvbWFjcm9uCi0gIC9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCi0gIC9jZWRpbGxhL29uZXN1cGVyaW9yL29yZG1hc2N1bGluZS9ndWlsbGVtb3RyaWdodC9vbmVxdWFydGVyL29uZWhhbGYvdGhyZWVxdWFydGVycy9xdWVzdGlvbmRvd24KLSAgL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQotICAvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKLSAgL0V0aC9OdGlsZGUvT2dyYXZlL09hY3V0ZS9PY2lyY3VtZmxleC9PdGlsZGUvT2RpZXJlc2lzL211bHRpcGx5Ci0gIC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMKLSAgL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQotICAvZWdyYXZlL2VhY3V0ZS9lY2lyY3VtZmxleC9lZGllcmVzaXMvaWdyYXZlL2lhY3V0ZS9pY2lyY3VtZmxleC9pZGllcmVzaXMKLSAgL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQotICAvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXNdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IEJaWElFQitDTVNZMTAKLSUhUFMtQWRvYmVGb250LTEuMTogQ01TWTEwIDEuMAotJSVDcmVhdGlvbkRhdGU6IDE5OTEgQXVnIDE1IDA3OjIwOjU3Ci0lIENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLTExIGRpY3QgYmVnaW4KLS9Gb250SW5mbyA3IGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wKSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKENNU1kxMCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoQ29tcHV0ZXIgTW9kZXJuKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKE1lZGl1bSkgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgLTE0LjAzNSBkZWYKLS9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCi1lbmQgcmVhZG9ubHkgZGVmCi0vRm9udE5hbWUgL0JaWElFQitDTVNZMTAgZGVmCi0vUGFpbnRUeXBlIDAgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwIDAgMC4wMDEgMCAwXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyAyNTYgYXJyYXkKLTAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgotZHVwIDMyIC9hcnJvd2xlZnQgcHV0Ci1yZWFkb25seSBkZWYKLS9Gb250QkJveHstMjkgLTk2MCAxMTE2IDc3NX1yZWFkb25seSBkZWYKLWN1cnJlbnRkaWN0IGVuZAotY3VycmVudGZpbGUgZWV4ZWMKLWQ5ZDY2ZjYzM2I4NDZhOTdiNjg2YTk3ZTQ1YTNkMGFhMDUyZjA5ZjljOGFkZTlkOTA3YzA1OGI4N2U5YjY5NjQKLTdkNTMzNTllNTEyMTY3NzRhNGVhYTFlMmI1OGVjMzE3NmJkMTE4NGE2MzNiOTUxMzcyYjQxOThkNGU4YzVlZjQKLWEyMTNhY2I1OGFhMGE2NTg5MDgwMzViZjJlZDg1MzE3Nzk4MzhhOTYwZGZlMmIyN2VhNDljMzcxNTY5ODljODUKLWUyMWIzYWJmNzJlMzlhODkyMzJjZDlmNDIzN2ZjODBjOWU2NGU4NDI1YWEzYmVmN2RlZDYwYjEyMmE1MjkyMmEKLTIyMWEzN2Q5YTgwN2RkMDExNjE3NzlkZGU3ZDMxZmYyYjg3Zjk3YzczZDYzZWVjZGRhNGM0OTUwMTc3MzQ2OGEKLTI3ZDE2NjNlMGI2MmY0NjFmNmU0MGE1ZDY2NzZkMWQxMmI1MWU2NDFjMWQ0ZThlMjc3MTg2NGZjMTA0ZjhjYmYKLTViNzhlYzFkODgyMjg3MjVmMWM0NTNhNjc4ZjU4YTdlMWI3YmQ3Y2E3MDA3MTdkMjg4ZWI4ZGExZjU3YzRmMDkKLTBhYmYxZDQyYzVkZGQwYzM4NGM3ZTIyZjhmODA0N2JlMWQ0YzFjYzhlMzMzNjhmYjFhYzgyYjRlOTYxNDY3MzAKLWRlMzMwMmIyZTZiODE5Y2I2YWU0NTViMWFmMzE4N2ZmZTgwNzFhYTU3ZWY4YTY2MTZiOWNiNzk0MWQ0NGVjN2EKLTcxYTdiYjNkZjc1NTE3OGQ3ZDJlNGJiNjk4NTllZmE0YmJjMzBiZDZiYjE1MzExMzNmZDRkOTQzOGZmOTlmMDkKLTRlY2MwNjhhMzI0ZDc1YjVmNjk2Yjg2ODhlZWIyZjE3ZTVlZDM0Y2NkNmQwNDdhNGUzODA2ZDAwMGMxOTlkN2MKLTUxNWRiNzBhOGQ0ZjYxNDZmZTA2OGRjMWU1ZGU4YmM1NzAzNzExZGEwOTAzMTJiYTNmYzAwYTA4YzQ1M2M2MDkKLWM2MjdhOGJkOThkOWU4MjZmOTY0NzIxZTkyYmJkYzk3OGU4OGVlYTBhOWMxNDgwMmViY2M0MWY4MTA0MjhmYTgKLWI5OTcyMDMyYTAxNzY5YTdjNzJkMWE2NTI3NmY0MTRkZWVkYWYxZDIyYmUyM2Y0NzA1YmY1ZWYzMWI2YTNiNjkKLTBjODk2MzIwZjA5ZTk4NzViNTAyMjBhNWJkYmJkNTdjMDQxYjVlYTk3ZjQyMTY4NWE3MjU2YjBkOTc1NWVkYmUKLWQwNTE5MGRhYmYxYzNkYmY1NTgyNTgxNjNjODIzMWQ4OTE2N2E4MTZiYmE1NWZiMWYxNGFkMDQzMjBhZTM4MWQKLWY3ODNhOWVhY2VlOGFlNWMxODM4Nzc1ZmUyMzgwYmRkMWYzYWZjY2NjOTZkMmEyZGZjOTk5YjUyYTY2ODljNTEKLWFmODJiOGQ2MzIwNWIzMzkxMDMxMzRkYWM3ZTNjNDVlNjY5Mzk0MDI3NjA0MWJiMDdlYmRiOWI3MjllOGVmMGQKLWVlOGJmNDUwZmE0MjU1MWJlNjUyMTdmZWE5MDJlMjhkZWNjMDk1ODBiNTA0ZjBmNTJmMWU4ZmM1Y2U3YWMyOGQKLWM0ZTQ3ZjkwOGZkYWViYTIzODI3YTk3YTBhYTc0MWFhNzcwOGY3YmJmZWM2ZmE2OWNjNGY3YzNiZDQKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjU2NF8wIC9CWlhJRUIrQ01TWTEwIDEgMQotWyAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC9hcnJvd2xlZnQvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZl0KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgV1dXVVRVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzUm9tTm85TC1SZWd1SXRhbCAxLjA1Ci0lJUNyZWF0aW9uRGF0ZTogV2VkIERlYyAyMiAxOTk5Ci0lIENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4KLSUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250Ci0lIHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0Ci0lIGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzCi0lIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4KLTEyIGRpY3QgYmVnaW4KLS9Gb250SW5mbyAxMCBkaWN0IGR1cCBiZWdpbgotL3ZlcnNpb24gKDEuMDUpIHJlYWRvbmx5IGRlZgotL05vdGljZSAoKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50LiBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udCBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdCBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcyBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuKSByZWFkb25seSBkZWYKLS9Db3B5cmlnaHQgKENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQpIHJlYWRvbmx5IGRlZgotL0Z1bGxOYW1lIChOaW1idXMgUm9tYW4gTm85IEwgUmVndWxhciBJdGFsaWMpIHJlYWRvbmx5IGRlZgotL0ZhbWlseU5hbWUgKE5pbWJ1cyBSb21hbiBObzkgTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChSZWd1bGFyKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAtMTUuNSBkZWYKLS9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCi0vVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKLS9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCi1lbmQgcmVhZG9ubHkgZGVmCi0vRm9udE5hbWUgL1dXV1VUVStOaW1idXNSb21ObzlMLVJlZ3VJdGFsIGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey0xNjkgLTI3MCAxMDEwIDkyNH0gcmVhZG9ubHkgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwLjAgMC4wIDAuMDAxIDAuMCAwLjBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCi1jdXJyZW50ZGljdCBlbmQKLWN1cnJlbnRmaWxlIGVleGVjCi1kOWQ2NmY2MzNiODQ2YTk4OWI5OTc0YjAxNzlmYzZjYzQ0NWJjMmMwMzEwM2M2ODU3MGE3YjM1NGE0YTI4MGFlCi02ZmJmN2Y5ODg4ZTAzOWFiNjBmY2FmODUyZWI0Y2UzYWZlYjk3OWQ1ZWE3MGZkZTQ0YTJhZTVjOGMwMTY2YzI3Ci1iZjk2NjVlZWExMWM3ZDIzMjljMWEyMTFkZDI2YmIzNzJiZTU4MjJmNWVhNzBkOTllYjU3OGM3YmVmZDQ0Y2RmCi0wNDVhMzYzMDU2ZTVlMWNjNTE1MjVlYTZmYzA2MWRjZWJiMzM3MjA4ZWZmNzI5ODAyMzc2YTI4MDE0MjRmNjcwCi0wZTdlNjM5N2IyOGYxNWJjMTBiNDAwMTJiMGEzZWFlYjI2OTNlOGY3ZjYyN2M0YzljN2M2YzViZmYxMDVjMWU0Ci0xYjJiOWU4ZjA5MjUzYjc2MDQwZDI2OGI4MDcxOWUxYjNmNWE1NWFiN2I4ZTEzNGQ0Y2I1YWJjZWQzOWFjNjM1Ci1kYTAwMWU5OTM0YzE5OGE3ZjliOWVkMDAyOGE4NWU5YWUwMDQyMWRmZDhlYWEzYmIzYjRiNGNlNDVkMjA5MzAzCi0yMzdiZDUxODA5ZmU0ZDg4MDkwMGIxZWViMjM2YWNhODdiOWZmNmViZTZiOTk0YTYwYWY1ZDY3Y2NjNDJiZDU2Ci03NzI5NWMzNDZlYjRjNjJiZGMxZWYyMmVlMDdkYWFkOTI4ZGZiNzM0NTVmMDkxZjMyNDA4ZWQ2NDMwYjk3NDE3Ci02ODNhZjI3YTAzNzE4YTE1NmUzZjZlN2I2ZTRmMmU4MTc3NTAzY2Q4MmRkYmY0NTU3YTNjY2ZmNGM4NThhZTdhCi1mN2VmZWQ2Y2M1MjFhMjgzNDI0MzZiOTUzZTQ2NTBiNTc5MmJlODVlYTJmOTg5ZWI2ZDk4NjkwNWE2MWZhMzhiCi05NmUxYmJjODMwYjc0NDY5MTUwZmIwYjU5OGE3OTRmZDgwZDEwODcwMDg0YTg3NzI3M2E5NTAyYzM0NTZlNWVmCi03NDM1MGU2ZTNiZTU4NjNlOGJhMTg1ZWI1OWZiODdiMzY1NjZhZjcxMjAwYjZlZDM4OWQxMjg3ZDRlOTI1ZTMzCi1iMjM4M2VkMDVkODdkNDg1ODZlNjk4ZmJjNWQ1NjJlZDlkOGEwOWVjM2VhYTFiMWYzMDAyMjRhZjIwYzIzZjI2Ci1hMmVhZGM3NDU2MjU3MWRhODRiMzkxNGQxZDgwYjEyN2M2ZmY0NzA2YzcwNDZiYmIzNzJhMDAxM2UwYWI5NGYwCi1jMjc5NDY1ODM4NzFkMjcyYmY0ZjIwZmE4NGU4OWQ3NDVkZTdiYmE4ODVjYzA5YmE3MmUwZjUzMGVkNGVmN2QxCi04NjRiM2M2NzAwN2VkOTg4MDAyODQyMzUzNzJmMGE3MGM5MTJlMjFlODUxYWZiZjgxMjE2NWI4ZGY5MTJjZDFhCi0wMTNlMjcxZjBiMzQ3OTY3ODc2YzY4YWU0YzQxMDdlZjhhZDFmMTcwOTE2MjEwMDM0YzY2Mzk0YTlkOTcxYjY4Ci1mYmZjMTEzMWUzN2ZjMTc4ZWI5N2MxYjJhMGY1NzNhZGQ5ZDdjMGJmOTQ0ZTY1Mjk3MzRkZjhhN2VmNTQ0ODViCi1hMzM3NWNjMzBlOWUzMjg5NDM3MzNjYmQzNTJiYzE1YjA2Yzg1YmZiNGE5Njk5NDI5MWM3MmEwZWFlODRmYjAxCi0wZjFiMjRkMDEyNWZiOGMxNmQ2MDU2MWRmOGJiN2FhN2RkZmU5NTQ5YWZiNzBjMWU4OTQyNDIxNDYwOWZkZTQxCi05YTE0Mjg5MmUzMGYwMjc1NGZkMjM0Y2ViM2M1OWEyYTA0YzA2YmFiN2FlNDBlOGZkZWM1MDU1OWI4MzQ3Njg0Ci0zOTFjNzUwOTg3ODAyZDU0NTJjNDdjMWUwYjVmMjIyZGU5YTBlZWFmZWUxOWQ3OTZmZjM3NWExZTFlZjBhZWVkCi0xYmNhYzRmNDg1ZmNhZWUxOGFlYzU4NWQxYTlkODBmNDE4NzFkZGE0NWZlZjFlYWU4MmM1ODkzMTE4OTg3YmViCi00ZDllMzQ1YzI3Yzc0MTlmZTY1ZTQ4NTNiNDA1MzdkODIyZTM0ZmYxZTBiZDI4MTlkMjFlZjYwNzk4MTI1OWU4Ci05ZjEwNDBhMmQ3MDhkNzQ2Mzg1OGFhNTM4MTc1OWFjNDlkZjRkZGRlYjIwOWEyNzhmZTYwYmQyNTA4YWNhMGY0Ci02YTI0OWEwNWI2NTJlNGM3YmYxYjY3Njk0M2NkYzQ2MDI5MTBmYTNlYTc2MzY5ODVhMTBmNjM3ODMyYTVhYmFiCi05YzdhNTgwZDYwNTkyOWQ2ZDcxNTQ1MDYyMTcyNTJhNzU1YmViODQ2MmQzMGE3OThmZmE5YjI2ZTUwMGVhYjI0Ci03ZTlmZDYxMmM3NzZhZTYwNDIzOTk1ZGMxODUyNjg2Y2IwNDFlNjYzNTdhOWFjZDRiNmE0ZTk4NDZiMWRjODAzCi0yM2RhYjZiNzc2NTIwNWQ4MmI1MGNjNjM5NGU3MjVjMTlkZjAwZjdkYjQyNzM0MWQ1MTQwNDdlNGJjNTk0ZWZiCi1hMjYyZWIyYzQxNGU0M2Q4YWNjOWNiMTk1ZDEyZjNiMmE5NzQ4ZjM4ZWRiM2FjMzQ0N2QyN2QyMGQxZTYyYmJlCi0yMmY2Mzc4ZTUwOGYwY2Q2ZjE3ZWYxYzUwMDQwN2Y2ZDQ0MmU5MmVmMmUwMGI4ZGU3ODY2MGQ4N2ZkMWM3MjA5Ci1lYTY3Y2RiMzcwNzZlMWVhYWVkMTI4ODE0YTk0OGUyN2UxZjJmYTgxZmU1NGJlNmM1N2VmOGMyYjJlNDYwZjA4Ci02ZmYxYmI1MjljOTEwMGIxZDg3OGRjOWEwNzdkMjE4MDVlODlkOGIwZmJjMmEwNzRlNGI1NWE4NjljOTZmY2E3Ci04MTE3MzQ3YjljZmE0ODBmZjRhMzdiMzRiMDQwYTk5ZmJhOTk5NDJiZDg2Y2U0YjQ2ZmY1YzY5YmFiY2E3YTNhCi1mNTAxOGRhMDU1NTZiZmY3MWVjYzg0NGIyYjcxODU5OGYwODI1Y2RhM2QxOWQ3MTRmYjY2NDcyNjIxMTEzYWQ3Ci1iYjI0MGRlN2RmYmQxZjE3ZmZkOGYyZWY0Yjg1YThlYjZlMWJmZGYyNmM3Zjk4MTY4MTk3YzAyYzRhYTUzNWMyCi0wZjllZjliN2NiN2YxZDE3NGIyZTk0OTUzZjU0MWMzYjg0ZDQzMzY2ZTBlMDBhMDI4Yjk4Zjk5MGI0ZDAxNTE1Ci0zY2NjMmUxODUzNDczYmI5YjI1ODU3ZTRiOGY5ZDY2OTVlZjMzMmJkM2JhYTllZTU1MWE0YjE0MmRlZmI3ZjAzCi05N2NkMDc1ZWY5Y2Q0MTA4MmNjYmY2M2U4NDljNDg4MzVlMTA1OTIzZTcyNWQ0MWQyYjVlZTBjM2YwM2E2MDNhCi0xNjE3MTMyMTZhZjk3YmQyMWFhODdlM2E4MGQ3NTM4MzYwMzE1MjAxMTUzMGI4YWJkMjI5NGQwNDFlOTBhMDQwCi1mNjFiYWY4NmJlOTdmOGRhYTgzMjZlYjFhMmI0NTExNDI1Nzg1ZjM1Zjc1ODM1NjgzNTE1YWY2Y2QwZTczMTk0Ci0yYjI1ZDVmYThjN2UxMmNjZGUzM2FhMTkzZDYxYTM1ZWJhN2Y3ZTEwMTg0M2UzNWRmZGYzZTA3YTE0NDJiMGViCi1mMmE5MDg0NjM0NzM2YTIxMTI4ODQzZGY0OWM4NGIxMDYxZDA4MjY3NzdhNzU0MDc2YzRjM2QwYTY4YjMyZGJhCi1lZDRiNWMwNzQ2ZGRlY2RkNzlmYmNjN2E0NDI1ZWRkYWE3ZjQ5MjU3MTQ4ZjA1ZmY1MmZmNmJhYzcxY2I2NWNhCi04YWQ1ODY5Y2M5ZmQ3YzRjMTk0YWU4ZDVkMjBhNzMwYTAzNTIzNGQ4ZjlhNjM2M2U3YTQ5ZmMyMmJiZDM0ZDA4Ci1lYjdmZDQzYTY3OGJlNTJiOTVlY2NmMDI5YTZiMThhNTEyZDMwY2ViMGI2YWRmODBmZjEyMzJkZmRhMWE1NzUyCi1iNTIyMmVkZDkwMTJiNDVjZjBkZjA2NDRiMmU3MTNhZmVmMjEyNTVhMDgyMzJlZmJkNWQ1Zjc1MDZiZmQwNTBhCi1mMGRhZjU1YjVkYjU5NWQyOTM2MWY4MjUzYzI2YzM3ZTA5YjRmODcwNTZlZGQ4YzkwZTBkZjRmYzc0MDcyNTQxCi04YWQ4Y2NlYTU2MmU0Y2U3MmFjYzhlOWYzOTI4NGZjYTI3NGM1NzJmZmVjMjRiYTMwZWY5ZGIwNzA1NDk2NWJkCi0yMjA1ZDcxN2M5YjNiMDcyMzA2MWNkNzRlYzY4OGI5MTVhYjY2ODk5MDRkNTc2MjYyOWM4OTFmMmZjMGNkZmIxCi04ZDhhNGQyMjYwZGM5M2Q3YWMxMTA3YjE5N2Q3ZTg0MThiYmFjZmM2NjBkODg4Njk3Mjk2YjdjYzY1ODEwMjRjCi1lNTgzYjAxMTRmZmUzYjNhOTYwZDYwMWZmMjNjMGY2MzNlMmI4NTMwMDA0MmY3MTdjNDcxOGMwNTQ3ZmQ5YjE5Ci1lNzRkMGUxOGY2OTA4ZTQ1MjgwNjU4ODhjMTM2ZGM4NzY3Yjc0MDI1ZWY1ZmFmNDcwYTI3MmY1N2Y1NDhkNzM4Ci1jNWQyZmY2ZGVmNDM2NmMxYzA4ZTBiMDk4NTVlMDRlYzNiYmQ4Y2I2Yjc3MGY2MzhhYzdkODUyYjdiMjI1MGY2Ci1jZmJiNTY2OWM5MTEyZmJmNzM1NDZhOWMxZTk2OGExZTFhMDYxMjhlZmVlNjQyMmU0MWRmMTUxOWM3MzQ2NjM1Ci0zMWZlYTQxOWJiYTgwNjdjNmQwZTk2NDE0M2EwOTA2NzYyMTk3YjhkZTk1NTAyYWU5YmI1NGNlZDE3ZGU1Y2U4Ci05ZDYyODcxNmJmMWUzMDZhYWQwOWJkN2Y4Y2IyYjdkYWU1YmZhOWVmNTNlNzE2ZDVhYTJjYTAxNGVhZTgzN2M2Ci1jMGYyZDVmNTM1YWU5MzY4MmU4NTViMWJkZDZjZTk1NTYyNzI4NGE0NzEyZjY3YzFkNmRlOWY4MGQ0ZGRhNDNhCi05ZmUzNGZlNGZhYjU0NDQ1OWExZGZhMGQxMzgzYzUwYmIzZTZjM2RmMDc4YWNiODhkYjM3ZWNiMzhhYWFiYmIzCi1jYzU5ZDNmYmU2YTg0ZjFmOTUyMWI2ZTA1ZDBhMGIyZTBmY2VhZThlZWVhNGY0MTk3Njk0NTUwMWYzMmJiMzgzCi00NTU0NjdkMjE3Nzc3OTY2ODhlNTdhZTliN2IzOTJkMTY3YjYzYmZkYzExMDI1NjU2NDliNTM2OTRmMWViM2U4Ci01ZWMyZjA5NGFiMDZkNDI3YjVlMWU3NDEyYjMzNjkzMzZjNzY2YTdmYzc3ODE5MGRkNWFlZWJlZjliNmEwMzRlCi0xMzMzMTRjYjUxMjY2N2YxYTRlZWY5MGExMjUxY2E5ZThhYWY3OTY2ZWM5NjAwNGMwOWM0ZGZhY2JiMGQ0YzQ1Ci02MGQ4ZGY0MTgzZDM1OThmYjk1ODRhNDQzM2M5MTMxZjg2MDI0NzRmMjdlNDkxNmI0M2RlODBlZDFkMDJmNmU0Ci1kMjA4YjAxNGMwYTQ0ZDk0ZWY3MDk5MzBlY2E2NDZiMmYwN2Q4MzU4ZDQ4ZDBhNzY4YjZmMTM0OTJlM2NiODc3Ci1mZTM4YzU4YTdmNTQ2OGFmNTJmZmMxMWI4YzAyYmQ5MTQ4NGNkYzAyMmFiZTY3OGE3ZjJlMjk4YTdmYWQ5NjdhCi0yZWE3ZGM0MjdlNmFjMTU0NzY2Y2E0YWUxNWZkNDE0YTc2MDY0ODIzZjMxNDU3MjQxODRlMzBlYzRmMTQ5NGM4Ci03OGY3ZjYzZWRlYTYwZGFmMjQ0OGRlOGE3OTgwMWVjZmQ4NmEwNmVmMTIyNDUxZGQyMzgwYmIxYTQyNTZhN2VhCi04MDZkMTMxZTY2ZDVhNmUzMDc5ZjdjMmQ3YzE0M2UyODc5ZjUzMTZmZmViYjFiZmExNjZhMDg4YjhmYTljYjdmCi00YTVmMDg3NWE4ZmY1ZDM3OGU5ZTgyMDVjNjE1NWVhODU3NTY0NzVjYTUxNDllYjcyNjQzYjRhZTFmOTA3YzBjCi1mYzhmNjMxNTBjZGM2MjA5YjE5NTFhZjIzZmY2ODE4ODM2MDkzOTUwMTc3MGVhYzM5ZWQ1NWRhZGM0ZGZiMWM1Ci1iMmVmMzljOTNkMDMyNmE4MDRmNjJlOGYxODdhMjI0NDQ0MDk4ODM1ZmY2NzBhZDU1YjQ5ZjNjZDBhYmEyOTAxCi0yOTNhZTA0NDI3OTE2ZWUxNGM4MWY0MDQ0YTA1ZDljOGFkMTRhZDRiNTU2N2U4ZTAxNDc3ODBhMGJkMjk0YzVhCi0xMGE1MGE1Y2M3NjU2ZjkwMTU4ODQxOTEwOGQyNTcwZTgwNGE1ZTU5MDAwNDAwODc3NmM4Y2YyMGI1NmQ1ZWYxCi1mYTMyNTM4YzQ4MGJjYzE5NTUzMjFmOTU0MDA4ODcxYmExODAxNzdkZWE5NTJmZWZlYzUzNmY2NTIyNTgyNjQ3Ci1iYzIwNWRkMTM5YTE4ZDJhNDE5NTZiYWE0YjAwMjE2OWNmMDQyYWIyZWJmOTFmZjIwM2RjMmUyNTU5MTcxOTEwCi0yMTE5ZTk0NjczYTI3NWQ3M2YzOTA5ZDA4MzRiMTcwZTJiNjJiZWVkY2NhMjdhZmI0NGEzNWFjNTFkY2I1NzE5Ci04MjcwNmYxMDFiMjE2YjRhZjM1MjM5NzQzNzhhMDVjMzI3NzAyYjEzMjMzNWZmMjg4YWRmNjI1NzhmMzBjZGNjCi1jZjgyNjg5ODM2MWJkNDkyMzhmMzY4YWUyMTgyZmJiNjMxZTM3NWU5MDNlZDllZmI5MTFhMDQ3MTE5YjQwODMwCi1hMzk5MDk0OTRlODZhZWUyMTY5NDIyM2RmMWE1N2FjOGU1YjRmMDQ2NWQwODY4OTM5YWM3N2NjYjQ0OGQzZjU4Ci0zNjYzMWNlYmRjMDZiZjI4NjVjNTg0Mzc1NjhjZDczNGVmYmZhODcwMjE0ODUzMjMyY2NiNDhjYzU3YzhjMzJlCi05N2NkZWI4OWNmNWUwYzAzMmU4MWRlMzc3YjM2OGY3ZDU3MTg3ZjA4Mjg2NzVhNTIzODJkNDFkZTZjZDlmYjUyCi0yYTFjY2ZkZTMxOTJjNjUwZmNkN2QxZjg2ZGIwM2M0MDFlNmVlYmQwZDQwYmYyM2MxMGUwMjFlZDY2YmM1YjdjCi1hZTU3ZDA5MDViZDI0OTI1Yzg1NzNmMDY5MTM5ODgzYmJkZTEzZGYzYWUwNWJlYzE3NzFlZGRiOWIwMDM1NTVmCi05ZDY5NjU3YWM3MThjMDY1YTMyZWY3Y2E4YTFmZjU4ODBmYzY2MTk2ZTgxMjMwNTBhNDdlYmU0ZGQ1YzFhNGE3Ci00MGNlMWNmMzQwYmYwODAyMWZjZWVmODE3MmQ5Y2RlYjA2M2Y0ZTRjMjIwNWFlNDUwM2M3MWFlYzE4MzZmOWJmCi05NmNjZDBhNzEyZTMzNDA3NDQ2Y2VhYjk2MjIxZDdiM2Y0MzQyZmM3NGFhZmE4MDI0ODFhY2VjZWU3MjQzODA3Ci0zOTBiMmQxMmM4NDQxOTM1NjA3MzhlNTc2ZDI3YjBmNWE5MGIyNWUxYjVhMjdkZThhMmM3NGIzMzAzNTI2MTkxCi01ZWUwMjUxMDY1NDc1ZjI2YmYwYmJjYTU1NDlmMTNlMTM1Nzc5N2E1NzI4YjQ2YmE5NTcwYzA5NWQ5MzgxMTJjCi1iM2JhMjEyYzI2Y2Q2YmI1NjllYTI3NmUxZDgzOTc1NjlmOGQ0Yzc4NTI4NDkwMTg3YTE3MmQyZTMwZGQwMjI4Ci1kNjlmZGFhMjVmYmRiNDc3Yzg4ZDUyZjBiYTEzNzI4MGQ2ODY1NjAzNmMxN2I4ODUyYjAzYzIxNjIxZDBiMjFjCi02YzAxNmYxOGNhY2ZhOWE5OThlOTcyZjQwZWRhMDcyNzhkYTU0ZmU1MTE5YmFiZjAxNDVkNjgyNGYwNTFjZDYzCi05MWJjOTM0NzJmNzgwZjAwZTI2MWRjNzRkNjY3M2RhMzdkOGQ5MjkxZTI1YWYyNzk4MjlmOGQ0N2JiNTI0YzE5Ci04YjU5OGNlMWM1NzZhYzg1NDJiNWVhZDk5YjAzOWFjMjk5NmE2ZDc5MWEyMmE1ZDViYjBmYTNlYjY1ZDFmYTAxCi00MDFkNWM3ZDQ0YTljZmUwODJlOTMxNGFkYTZmNGFjOGVjZWE1YmU4ZTVhMWNiNmExZGJhMWM2MTVlNjllYzliCi0wZjIzMWI2NGFjMzFjNTQ1ODU5ZjAxOTViYjliNDAzMTIxZGY3YmUxZWExNDg4YjQxMzgyNWQ4ZTFkN2FmYmZjCi1lNWE4ZTFlNTJkOWMzZWE2ZGUzY2U3NWQwMTNjYjczOTZlODI1YmFjM2E1MGQwYmZmZDJkMzBjNmYxYzVkYzBkCi04M2MxYjY4ZGQ4YjYwNDIzODIyODU4MTIwOTNkYjRjNWQ3ZjZlYWE4YTRhY2JlYmE3OTRmNjM2MTA0NTZhNjQxCi00MmZkZmQwYzRjNWYwYzQ0ODZhNjE3MGI3NzAxY2E2NGNkMTQwOGY2ODZmYmQyYWZiNTZiYTMwNzcyMmIyYmJhCi1jNTQyMTIzZjc2NjE3MWI0M2FhZTVhYzA1MzA5NGEwNGFjNGZhYTNjYmRhZGNlYzgxYWI1YWFhYzU4ZDNhN2I3Ci0xZGJlZGNmZTYzZDA2MmIxMWRiY2FjZWZlYTg5YzZmODkxNjM4OWQzZjdkOTNkYTg5ZWJkOGMzNzQxNGM3ZGI2Ci1kNjUxMmE0ZThjNzYxNDVhYzE3MGZhZjEzNmEwMjNiM2MzMWNiYWU5Nzc1ZTQzNmQ2Y2IyODM1Yjc3YjU2NDU4Ci02OTA1ZDU1OGEzY2ZhYjBmMWYzNDI2NTU3YTY2YmY3NzUyOTJkZjA1NmNmYWFjYThjMDg3YjRjMGJjYzJhYWUxCi1mYTQ5ZjM0NjYwMjM4NGY3NDNiZTZiMWFhMjYxMzRiYTI4NzIzNjZjMTdmMWRkMzU2MjIxODM4YTQwYmUzYTRkCi0wYjg1MDJhOTY0ZDM2MGVhOWJjNThlNGZmYmYyODNjODI5NDY3OTE5N2ZhZjVkMjNhYWQxYzg5YzNkYTg0OTAyCi1jOTU2MTlmYTBhYjc2Y2EwYzdhZTcyNWExYzVkOWM0MGU4NGNjODRlYmE4ZmM5NTM2MWYzYTczOGRkYmNiNTkzCi1iMzExMGRiMmY2OWVjZjlkYTIxZDc4OGQzNmExYmY5ODZlMmRkNzhjOWU2MmY2NDNlNjY3N2Y4MDk5MWY5MGEwCi04YmQzNTQ4NGZjNGFlZjMyNDNiYzNiNDYwZjU3YmY2ZjBhNTAzYjU3Zjg0NzIzNzM4ZTFiOTRjMzAyOTUyMGMxCi1mOGQ3ODdmOTkzMDVlZjg3ZmU2NDI5M2I1ZmJmMGEzNzgzMDY0NTljMDIyZjQxMjdmMmUyMjA3YmE4MThhYWM0Ci0xYzg2MGI3MDgzM2I5MmNiNzIyOGFiMmM4ZjY4ZDAzYjZlY2I2N2Q0ZjgzY2IxNjBjMTcwMjk4ZTFiZmYzMzlmCi0zMDY1MDVlYTRmZTg2OTI5ZjExNWIzYzU1YzdmYmRiN2YwOWViMzhmN2M4Y2E4NmM5Yzg5ZDliOTJkYWUzN2E5Ci01ODM5YTE4MWU2ZTU1ODM1ZGEzZTgxYzg4NDY5ODBlYzVjMTY2NDZhMzFiYmZmZTU0YTg1MDVlMDA1YzkyMDBjCi1jYjJiNDc2MDgzZDdlNTVlNjM2NDgxNDZlOGU2MTVkMzQ5ZWQ3NzliNzg3MjMyNjA1YmViMzgzNDZlMzU3OGJmCi1kMDQzNzk3ZWRjMDBmNmRmOTFjOWEwMjk1OGVhMDFmNTVmMDBkNTc2YzhhOGQyMzZlODFiNTllYWY5NmJkZmUzCi00ZGU0MTI1YTM4OTNhY2VhOTdhYThkNjM3M2I3MzZkNGNjMDE2NjA5NWJiYjc1YjczNDFmMDZkOGUzZmI3MzJhCi01NTM5ZmE4YTI3YWJjMWQ4MmYxYTg2YTc2ODcwNDUwZmRlYmJlODg5ZGQwNDhjYmYyZjE4NGRjY2E1Mzc3NjQ5Ci05Y2EwMDUzYWE5YTg4YWI0ZDZmMjc5ZjhhM2JhNzA0ZWQwNTdkYzJhMzYxZDA3ZTVhZjZjOWM4Y2U0YjA4YzA1Ci1kMDY2MzVhZmNlMWNkN2ZiMTI4OGRmOWNhMWY5YTU1NmQxYTEyMDY5MTI5N2Q4MTM0MjE0ZGExNGRiNDVjZGJmCi01NTQ1YWJiNzUxMzRkNDUyNTdiMWUzNzNlYWYyM2ZiNjAwMzcwY2Y4ZTdkZTAyZTcyMTE2MzliMTFmOGZhMGQ1Ci02NjI3YzU3MThmNTU0Y2EzMzUxYWM5NWMwNGRiZTg5NGUyMDY5MjA2NWFmMmM3YTllMjM5NDQ5ZGY0YTY1OTE3Ci0yZTBmYTJiZDNlYmZmYmZmZDkwOTM1Njk4NTFhMzFkYjQ2YzhjMzBjMWZiODMzOWE3Zjc0MmEyYzg5MjEyODMxCi0xNTQ1OTg0NDI5ODk3MmI4YjA2ZTJjNjk5ZDZhY2FhZjMzMWEwMjMwNDdlNWIyMDQxZmMzOWQ4MzBiMDg1MWE1Ci04ZWYxZTMyOWI2ODgwMzRmOWM5MTkyN2NiYWFlMmVjMmM4NGY4NTAyMTI3MDU1YWRlNDQ4ZDZkZDdlZWEzYWFlCi0zOTJkY2UwMzM0NzE0MWIzYjg1ZjMwMThiMzM5NmI5ZmIxZTRhNTljNTBkOWU4YjgyNjEwMDg4NTc1ZWVjNjYzCi01Njg2ZTcyMzRlNzJlNDY5MGNlMzg2ZmNmOWQxNmI1NGM5YzY5MmU5MzI0NDI3ZGVlN2UwOTZiNmQ0YzQ1NTAxCi1kYTJkMGVkYTY2YTFmMjllOTBjMDBmZDJjNjJhZTQzYTk3ZjYxMTc5NGM0NzA0ZDE3OWNlMGJkNjNmZmM0ZjUwCi1hYjNjYTcwODZiZjk0MjI4M2ZiMGQxNzU4ODhhMTNlNTI3OGFhYWEyNWEyNmUzZGY0ZmJmMTNlNjQ1MTlhZDk0Ci00NGFmMTcxMjA3ZjNmODliMzY5Y2NkNjE2MmMwYmExMzIwZDMwZDNhNTk2ZDlmNTg5NzZmOTQ0MzRjMWZiNzczCi1lNzBiZTg3NTI4YTliZDVmYjdlNDk0ZTZjZGJhMGEzY2FiYWI4ZGMyMDczZWE3ZjViOTU2YmY1ZDVjYTFiMjU4Ci0yNWE3M2UwODI0Y2U4ZDAwZjRjOTQ1YzBhZmRjNGI1N2Y3YzAxNjJhMTRiMzAxNTRiNjFhYjAzMGE3MzY3OWFmCi1kNDNlMzIyYTA0ZmM3YjNjODE0ZjNiMmQwNzU4NWVhZTZhNTI1NGI0M2JjODM2YzYwMDBiZjIzYTU2ZmJmYmZlCi04NDc4ZjFjZDAwMTUwZWUzOWYwYWFkMmM3YWUzMzEzYjhkNjE5Yjg0ZGRkOGNkMzg3OGE0YjMwNjk1MDg3M2RhCi05YTU5MmY1MjBiN2Q3ZTBjZjliOWM5N2QzNTEzOWVlZjljMzI5NzYzODY5ZTY0ZDg5YTUyZmVkMDE2ZTFjZDQwCi00NDk3MzU5ZDlkNGQ2YmI3MDIyMjQxODI4MmNkOWVkN2YxMmMxNmNjMWFhNmIzZWVhOWM4MTJiN2MzOTEwMjA5Ci0yODMxYjBmMDVlNjQ0ZjU4ZTg3OGMxZWFhM2Q1ODdjODliMjZkYjhiOTk1MmUwYmVhZDEyYzdkYjZhYTVhMDQyCi05ZTMzMDEyZGIwNTUxZmU2YTU4OWJhYTgwMDkwNWE3Y2IzNWQyMjBlZmJiNjc1YTk2NDQ0ZWRkMThhZDg5ZGJjCi1lYmM0MDg3MTYyZTk3N2I0Y2M2ODBhMGUzNDkwYmZhZjI4YTU1NmMzYmI5Mjk5OTM1MDk3ZTNlMDQ4Njc5ODQ5Ci1hODVjZTkwNmY1NWJkZjU2NGYzY2NhMmIwYTcwYjQwNGQwMjUyMGI3NzYxNGU1NzcyMzFjYjIzMTBkZGUxYmE1Ci1jZWExZWY5MjZhZDE5MWM5OGEyMWVkNzZlYmI4ZjQwN2VhMmFlMmZmNTYwMTQyMTZhYmIxMThjMDIxODU5MGY1Ci1mMzI4NGY5YTE4N2E4NWIzZjUwOTFmMDViMjFkNzQ3ZjZmZTczODRhMjdhZTZhOGRkYjkyM2RmNGY2MTkwMGU5Ci1hZGI4YmU1ZDMzODYxM2UxNDg2ZDcxMGU4OTJiNWI3MzMwNjE5NTFkMTY0YWUyMzMwMjNhNjllMDI0NTdlOTBkCi1kZmI2ZDhhNTNlYTBhNTdmM2M5ZTI3NjE0NjMzYWNlM2M2Y2Y1N2RjOGM4MWQwYzA3OTY0MmM0YTA3NDVkMjgxCi0yYmM2YWM0NTg3YTU2ZTY1ZDY5NTVlNTBmNDM4MGQ5NGY5NjI4YzEzMDEwMmUyYTMzMjVkNjk0ODY1YTBkZDkwCi0wMWFiMTE4ZjM5M2ZkODZkMDFhZWRiNTYxMmZjYjQ5ZThiODFmYTZmYWRmN2I2OTY1MGZjZWY0NWEwYTcyNGQ5Ci1lY2Y4Y2VkNWNmNTY5MTNmYjY4YTM5YzcxMzUwYWNkODU1NDMzY2MyNWIyNWFkZTE5OGNkYTQ2YmZjY2YxZmFjCi1mMWM4NDFhMWU2MDU4YTczZTI2ZTU4MGNiNDYzODQ4ODVjNDE3Nzk5ZDkyODIyNjg5YzJmNThiYzFlMGEwNDBhCi05ZDdkM2Q3M2RlM2MxODY4OGQ2MjU4MWQ1NGEwZWFkZjlkZWZmYjNkYjM0YTlmMDUyYmNlMzNkNWZlOGU4YWU5Ci03OGU0YjBiZGNjMmE4ZmZkY2FhNWI0YzBmNGEwMjU2ZDk0MzY0ZTcwZTE3NDlkYmMyYjE0N2Q2OWVjNTM5YjQ3Ci1lZjg2OGFjNDgwN2Y3YWMxZjAxYzkzYjMzNjE5NDI5MTU1ODFlZmM3NTQ0NTNmMjIxZjRhNzBiYjkwM2VjMzEwCi02MmNjYTdhYzM5MmY2ZjcwYjYxZjQ5ODIyY2ZkNjVjNjY4MDcwYmFiYzExMDIzMjJlNGNmMjI0OTAyZjBjYzZlCi0yNmJiMmMxMTljM2M2NjQzNGY0YTg1MTY0YzQ5ZWQ1MTA4NGExZjA3OTVlYjYzMWY2ZDM4MTIzNjE5Y2M1Y2VkCi1jOGM2OTA4ZjM4MGE0YTNmNzkzOWQwYjAzMTg3ZTQ0OGZhNDQzMzNlZDhkOGMyNTA0YzNmY2UwMjM1Nzk1ZDg2Ci1mN2E3YmI0MjNkMWE3Y2E4MWIyN2I0ZjgxYzkzYWM5NWJhMzM2YTBkOGU2YmI5MGM5NmFlNzc1ZWUzNGMwN2RhCi01Y2QwMTlhNzNiNzk0NDQyNGQyNDJkZDdkOTZlYTAzNDkzMDdlZDQyNmZlMGM3ZmI4YjVjYmUzZDI5NWEzMDY5Ci1iOTc1ZmFmYmU3ODEwOWNhYjM1YWMyZmE1MTU0ZjY2YWY5YjllYTUyMmNkNDg0NzQwOGQxY2UyNGNmN2ZjNzcwCi00ZjIyMmZlZGM5NjJmZjIxZDA5YWEyYWU2Y2MxYjE0Y2ZiY2FiNWQwMDE2NjA3MzYyZDNjOGY2MzQ3ZjdhNTRlCi04MjEzMjdkZGQ0NzUzOTZiNDY1YjFiZjU4OTQ3MDNjNmRlMWU5OTQ3ZTY0ODY3ZTY4ZWZiMjYyMGM3ZjQ2MzY3Ci1jMGMzNDVmMjk0Yjc4MTk0M2YwYzk2NTAwNjg4YTA4MzQ3YjAyNzJjNjBlNWQ2YTc4MTBhNDRjNGU1NjU0ZDA5Ci0wNTkzMWE1N2UxZmU2ZmY3ZWRkMWU3N2ExZTFjMzkwNzBiNDllNGQ3MmE2MmYwNjM0MGY5YTc2ZDA1NTM5MDViCi0zNWU1NzExNDM0ZDI1Y2MzYjE0NTU3YmJhZjY2YTgyYTZlZjU0M2JiZmQxNGMzMTRkZGVlMGVlOTkwOTA0ODJmCi1jMWRkMDZlZWNmMjAzZWM5NTExYTNhZDZjY2VjZGQxMTM5Y2NmMzFkYzcyZTQwNzg1M2QxNTljMTYyMjEzMWRmCi1mNTYwYmQ4NGMzMGM1ODQzOWIwNmFlZjc5YmY1M2ZmYWE5MGFiMzcyN2U1OWYxNjQyNzFhNjljNWJmMzZmMGQ4Ci0zZjljMDA5OTkzM2I2YmRmYzJmNjEzZDRmMzU2NWRmYmQwYzg1ZTg3MjM0OTFlYWQxMzY5N2Y4OTQ1ZjYzYTZhCi02MTI5OTA2MTNiNTRiYjdhMTljMWQzYTEzYzE0ZjE5Njk0ZTNiMTI5MzI5M2E1MWM2NGViZTQzNjczOGViNjFlCi0yY2NlZjA5Y2E3N2VlYjM1YzdiZjEwZGIyYTliMWVhYmJlNGZiODhjY2VmZWFlNjM1OWJmNWUxMzZlZTk3NGVhCi1hMWE1YzcxNTJkNTRkZThkZmFiODk0MjI5NDNhZDUwZTU4ODRmMzMwYWQ0MDc4NzYzZWEwNzFjNjI2NWU1NTVkCi1hNjEwZDI0NjEzMzQzNWRiMTFjMzdlNzg2MzAyZTNlODg4OWVjZTFkOWVjMzY3MGQ4MmJhYmZlZDdiZTJmYjdlCi1mZGI3OGUxYjZlMWM2ODJiOTMwZjQ4YmYwYTI4MzAxYjQ2M2E1Y2E3N2MzNjhmN2Q1NzE4N2YwODI4Njc1YTUyCi0zODJkNDFkZTZjZDlmYjUyMmNmNTJkODc5Mjc5NmZjY2FjNDhkOTUyOGQ2YmE2NWNjYTc3NWVlYTBkOWUyNzJjCi0wODRmODAxN2JiNGZmNzc5YjYxNWE0NjUxOGIyNTZiMmM0M2IyN2UyOGI5ODhiZjZiNjBkNzgzZDU2OTA1YTVkCi03Nzk0OTA0YzBjYjk1ZTJhYTgzNTEyZjQ3ZDJjMzkzYjc3OGI3NjExMDUzZDMxYmJjNDY3MGM2ZmZlNDVmZjI1Ci0yYjcwNjRlNDc0MGU4ODk1MTY5NjA3ZDU3Yzg5OTU2YjUyNmE2NjRiMjhhMmE5ZjdjNDJkNmE0MGM0YTk1YWE2Ci02YmU5ODk2N2Y1MmE4NTVkYjAyYzQ5OGYxNDFmZDZhZmZmYzBhNjliMTRiYmQwMDlhMGMwZjAyM2Q0ZDY3MDZjCi1jYzA1NDAxYWE5NmQ1NTBiNmNlMDE5MDI4MWJhNGNlYmYxNmFjZmE0ZmQ5NDczMGNkOTc3ZDZjMTIwYzEyNGJhCi1lZjg0ODllMjJhMTNjMzA1NTIxOTZlOTkwNDYyMDFjY2ZmMTFjYjNhZmY5MmE2M2U0N2ExMGEzYTY0MzNiZmMwCi1lNzcwNDc0NTNiNzE1MjdmMjA5YzkzOWQ4NTE2MTgyY2E1ZjA5NjZjY2JmOTcxZmVkZTI1ZTNmZWZkOTJjZjhiCi1mZDExYWM1OWRmZjM2YzI1YWFhOGM3NzFhODNkOWNiYjdkY2NiMzdmNGY3NTcyZjExZjcwMmJjMjdlYTk1MTBiCi1hMmQ0YmFhOTRmNTk1M2JlYjkyN2FhZjI0MjY0MjFmMDA5M2M2MDNiZDYzODI3ZTI4ZjE3ZDU3Y2VmNDc2NTc3Ci1jMWYxM2ViOGJlZWFkYTQyYTFlYjIyMWNhYzNkY2NkNWQ4NGE2Zjc0ZmEyYjI4OWMzY2FiNmUyZmM5NGRkOTJiCi1kOTZhMDE1YjIxOGNhN2ZhY2JlMThmOWM3YTU4MDYxMDkwNTg0N2E2NDllNDQ3Nzc3M2I4NzY4NmY3ZjI4YjMzCi0yNDE0OGY0MjEzY2NhYWM0ODNiNDNiZTJhOTc2M2ZkYmJkYmJkNTBhMGY5ZDU5ZmMzMWY1YjdiMmFjMGY5MTVhCi04OWFiZDY0ZDg0ZmFhNjJhNGMzMTY3ZmJiZjY1MWE2MjM2ZWFkNmFkOTMxYzExNDM1OTIxY2JkYzRlZDY2ZjY3Ci1mZTgzYmMwNTlmYTBjNjI1MDAxYWQ1YjNiZjYzODI5MzY0NmQzMzA3NmYzYWZhZmE4YjhmZDczMDdkYTVjNTNiCi01ODQ1OTk5YzE2MjRlOWVkMzBjZDQ4NDgzNDAzZjlhZmRhYmJjYmU4MGZhNTAyNWJlYTJjYmMwODFlMmIzMmM3Ci00MjY4NTQyMWNlM2Q1NzRhNDE0YjM0MDA3NWNiMDJlODBkNzQyN2Q0Y2M1MDNlZTAyZjViMzNlNTA5ZDc2ZTBiCi0yMWI1ZDVhMjUyNzU3YzRiNzg5M2RkOTg3MGY5MzcxZWNhNTdhZTc4YWM2ODhlZTI4YzMxZDU5N2JjMDE4NDk2Ci0zZmE1NGE4ZTE2MGE3N2RjOGIwNjI3ZDczMTk4ODVmYjJhZTBlMmUyYzlmYmNkZTRiNWE3YWNiMDRiZjFlNjExCi1iNzNiMGRlZTNhYzhmNDRjNGNhMTVkYmVjYTIwYzM1YTdhODgwNWYzYzIyZTZmYmE4ZTliMjI3MjJkZDI1YWUzCi1iYTJkZWMyYTBjOWExMzUwOWY0YzlmZDNkYmEwM2VmNmU0OWE2MzJiZjdkZTVlYzQ1YjY0YTFmNGUzYTM2OTc2Ci0xYjdhOWM3Yjk1YmQyOWIwOWI5MzBiMGQ4MmYyYzM5ZjliYzNjMjRkOTljNThhNjY0ZDRhZGVkZjdiNzRlMTNlCi02ZDg1ZTAzZTYxNWE2MGEyYWVlOWY3OTBjNmQwYTJlNmU4MmU2ODQwZTUxYjM4YzQ1NzlmYjk1MzM3NDIzZmJhCi00MzdkOTdhYjQyYmFmYjEwOTdiMmUyOTUyZTg2Yzg4ZTk0YmE3MDIwZTgzMTYzYjVkODEwZGU4ZjU3NjI1ODE5Ci1kODZkN2FlODM0ZDcxMzVlMzBmMmUyMWRkMDYxZmYxNWYyMmRlNmM5MjQzZDJjYWFhNWFiZjY3YWJlZTNhNmY1Ci0zMDYyNzMwMzdhZGNkMTBlOGYwMDgxOGVlODhhZDJlYTk4ZDZiN2YxZWU3ZTNkMWRiNDlhNTdmYTM1MDY2NGQ2Ci0wMjEwNzhlZTFlYmZiZGJlNWFlZTllZmFiMmFjZDk4MDljY2ZiMTgwZjgwMTdhODRiYTZiZmMxYmE1OTQwZWNhCi0zMDc2Yzg2M2Y4ZDlkZjNlNGFmYjMyMzYxYWNhYjEzYmFjZDNlNDY1ZDA5NGI2NGJlY2U5ODdiZTY2ZmE1MDFkCi01ZGViYTg5MzM2OGVhM2ZkZDNiM2E0MjAxZDNiZDY4YjM0NjRlYWQxMGM2ZjBkZGY1MTNhNjMwZTAxMzNmZWM4Ci0wODYzMGU0YjNjOGIwYWFkMWJiZWVkNTA4ZTdlMDNkNDFiM2QwNjBhOTJiMTk1ODQwNzg0M2U0Y2FiZDc4ZDc5Ci1mZjcyZmMwZTkyZjQ5MDNjZmQwNTg1NmY0NTdkZDE1YjFhYWI5OWMxZDI5ODA0ZDJmMzEzNGM5ODE3ZjQ1ZmQyCi1lZmViYjkyNTQ1ZjA1NmY0Y2E3NmVhNzRhZDQ2NGNkMDQxYjdjYmI4ODkyZjJkYmE4MzMxMThiODNlMjBjMDM5Ci05OTkzOWZmYzZjYzUwNTAzYmI4NzE1NjU3OTdlYzUzN2UyNmViNjIyZmQzMDMwMzI3Mzc0OGFmMmFmZDk3ZTA3Ci1hOWMyYTk2ZjRlZjg3NTRkYzNlYThmMzM0OGNiMzBkNzZiZGFhODRkMmU5MzNjOTRjOTlkMTNlNzRmMTk5NzBmCi01ZDJiZDE5NzEyOTI2ZTIzMGRkMDJhZWFlNjQ2MWVkZDgzYWM5MzVlYzJmNDIwNjQ5ZjgyZDQxNjBhMDcyNzAwCi0xMDE0MTYwMmMzYTY1NzI3NDBkOGU5N2ZkMDhlNTZiOTg3MDYyYmI1NzIzN2JiYjMwNTZhMzZlOTdlMzk5YTdhCi1jZjk2NTM3NDNhOTk4NGVmMzYyNTRkNjA3NzJhMGVlZGNhODAwOTIzNDYxYTNlNDQ0M2E1ZWY0NjlhZWZjZWVjCi1hYTE4MzFlNTZiMGQ4ZWE2Y2NiNzZiYjlkYmI2YWI3NTg0ZWUyNjhiZGQwZjVmMGQ1N2VkZGJhOWI5N2Q3NGEyCi05MTBmMTc4ZjM4OGE1MGZhMzJhYWQ3Yjg3YjMyMzVlZmNhYmQ0YjUwMDkxOTBkMTJlOGM3NzBmNmU3MGRiZTEwCi1lNzQ3ZTE5ODRhMWM0MWQ3MDFlNjIyMGIwMDFmZTI1YjlhNjc3Yzk5NmY4ZmQ5MWJkNDBmYTdlMDdmNTdlOGJkCi01ZDIzODE0NDJiMzM3OTI0ZTU2ZGU0ZDE4Y2RjMzUyMzE0Y2FlYmYwNjVmNjEwYjAwYjUwMzAyYmFlM2FkNjEyCi1kYWQ5MDU5YTNkN2YzYmQ2MzgyN2UyOGYxN2Q1N2NlZjRhOGNiOGFmMWYwODBhOTkzYzNjNzQ4NzFlNGI3YmRiCi0yNjAyZDA3NTg3YWVkMDJhYTc4M2Q4MDIzNGI2ZWVjYzc3ZDE2Mzg0N2U2M2QzYzlhYTQxMmQxMGFjZWE3YTVjCi01ZWNlNWI4OTNiYjMwMzFmYWNlZTcyNzAxYWNkMjI1ZDZiNmE3NTJjYjJmODRkZTNjZWFiMmI5N2I2MDZhMGJmCi1jNjg3NDg2OWE4NmUzYTU1YTRlMWQ3YWJkOTQ3MTlmNjA0ZWE2OGIxMTA4ZWJiNWJlYmMzZWY0NjViZGQyY2RiCi04NjRlY2ZlMGQ2OTU5ZDUxMTRlYWFmMTYxMmM5NzBjYWEyYzk0NzI5MTc4ZTZhZjEzMGExZGYyMTFhMzc5NWE5Ci1iNWZiOTM0ZTQ3ZjZjNDgxNTVhMTlhY2NlNzg4MDM2YjQ4NjdmOTBkNDBjMWU0ZmY3NDYwMzk5ZjFmMDhmOThhCi0wYWEzZTBkOGUzNTQxOTVhMjU2Mzc1OWRmZTAxODNjOGQ2N2I0NDk1MTZlZDhmNWNmMzI4OGY3Mjk4ZDYyMDkyCi05MjJmMDcwMjczNTJiYzdjOTYxMmNmY2E0NmYxY2YyZWQxNDE3YWI4NjNjMjYxNWYyZDI2ZWUxM2Q3YTA0YTE4Ci04MzM2ZWM5OTYxZTc2YWYyZjUwNmUzZGIzZDY3YTJhNGZiMmRiYmIwY2EzNGJlNmRiOTc4OWExY2RhNjA3ZDliCi0zNWYwZWFjNDdmNDg4YmJlNzRmOGYwNGI0OWRjNDkyZWM4ZjA5NmU2NzEwYWQ1OWQyNDhhMGM5ODQ5NzU0MWQ4Ci01ZjkxMzRkNTIxNWIwYTA1ZmMyOWRiMWFhNzFlNDMyYTJjMGIwMDEwNmJmMzEyNGRmMGI3MmMxNDQzNzVhMjgwCi05Y2M1ZWQ4MzM1YjNlOTcwZWFhZDkxNzhmNDMwMTFiNTVkN2YzZTExZDg5YmUxMDU4MzYxODkzMDE2MjU0NDQwCi0zNTNiODgxNjJhNGU3OTEzNzIxMDkyZTA1NTczNDk3ZWQ2OTNmMzEyMDE3NmRjMDgyNTNkMjM1NjU1OTA0MWQ4Ci03NDFhNmI5YzQxZjhlYjY5NTM2OTYzMzYzMmZmYzM1YTFlMmU0ZWQ2MjU4ZjBhOGVlZjBiZjZiYjAyOGVmZWQ4Ci1hNjc5YmU0YmMxOTdjYzg2ODI1NWY3NDhjYTk1MzMxMmVlZjU1NmQ4ZmRhZTRlOTcwNmMzMTE2ZTc2MTQwNTg3Ci1kYjE4NDkyNzMwYTE0ZTk2YzIxMWZjZDBhZWIwZDQzMjRiMWI0YWJkMDE1MDYzN2M2YzEzNWZjY2ExODIzZmRlCi0yMDQ4MmRiYmFiNTM2Zjg3ZTFkM2YwYWM0YjUxNTRlMzNiZmFhZGUzYWM0YWY4YjhkMjA4MjY1OGQzNWEyNTFlCi1hMGQ3MThmNzAyZWQ4ZDk1NzU1NTMzMWM5NTkzYWJiZjY0YjIxOTRkYWM5ZjA5ODc3M2VmNDMxM2NkOGE0OGU3Ci00ZDYwNTEzZDZlZTFjMTMyZTU5ZWJmNWRjZTIzNTliNjFlZmQxNmZiNGNjZTgxMDE3MmFiYjM5MzllODc0NzkyCi1hODYyNDYyYzcyODk1NDYxZWQ0ZGQyNjVhYmJmNTJjMTFjNTBlNjA3ZmQzYmViZWZmMDM5NzM5OGY2NTYwNjZjCi01ZjY0ZmM0ZTY3Y2Y1Zjk4NGZlODE4Yzk1MDBjYjEwYmVhZGMxYWM1MTNjMGM4ZTYwNzAxMTQ0Yjk0OWNlNjdkCi0wOGNlYzFhZGViNzBmYjAxZjQ4YWJmZWEyMjQxMmY0YjA3YjcxMGE4ZDc3NDIyOGFlMTU2YmZkZDU1NmMwZjQ5Ci1iZGEwNzJjMDkyNmEwODE1MGY3N2VlMzM4YjNiNDMwM2JkMjE4NmRhMjFiODlkZjgwNGNkNTMxYzQ5OWVmOTUzCi05YjFlZDMyNWU1ZWY5NTJhZjA1Y2Y2N2E5ZmU2NGIxYWY5NzVjMTgzNDg4MDkxNjFhZDM4MmRlYmZkZTQ1NDk1Ci01YjMyNDcyZWRmNTA5OGI2ZDFmOGZjODgwN2Y4MWVlNWJlMzY1OWJkMGY0NzU0MmVlODFlMjBjYmFlZjE2OGRkCi00Yjk5MTA2OWNkYTJmODUwYjFmYWE0MGU3NGZhZDc5ZWQ1Zjc0YTBmZGUxYzA2MDk5NmEyMjgwZTljOWQyMWY1Ci1kMjMxNzRkM2VmNGQ5ZWI2ZTMzN2Q0NDNjZmNjYWVhYjhiMDAxNWU2NDI3Zjk0MzljODQ3M2ExMzY0ZmFmNzgyCi1mNThiZDhiZDc3NTg5OTA5Mjg0NGJhNTcwYzQyN2RmZjQ3YjhjYzQ4NTlmZDkwNDJjZTc4YWEyN2ZmZWE4YjVhCi1jNTJiZTBkOTdjZDAxYzcyNTBhNmVkYTQ4OWI1YTE3ZTIzMTY3MjM5ZTBkN2ZkOGYzNDI5NTI5ZWYwMjU0OGU5Ci1iN2JjMWRjZmM3Mjk2MDBmZjk4ZDlmOWIzM2VjZGQxMGZmNzhiYWEzMTNiN2UzNWM1MWRmZThjNmExNzU2OGZkCi1iZmJkNDM0ODYwYThlZjM4MjFiMzM2NzgzZmEzMjgyNzljMDViMDVhYmEzN2Y4ZDI2ZGE0MzM5MWM5Y2ZiZDcxCi02YjI0MDE0ODk5NWEwMDU0NDhhZmJlNDVlZjJjMjg1M2FhM2MxY2YzYmE2NDM0ZWM3OWU4ZGJhY2VmNDQzNTY5Ci04ZTZlZjE3YmRmOTYwZTlhMzdmMGIzNGY0YWEzOTY0MTQ5MmJjY2U5NWFmZTU1ZDE2OGU1MTBmOTM0Mjg4ZGE3Ci1jNjFlYjNlMWE0MmYxOGFiYzYwODk5NWNkOGM5YWZjYzU5MTc1MWJjZDk3NTkzODdkMzkyNDc1MWIxYTJjNzlhCi0wY2YxOGI1M2QzZWQ4MDk2ZTJjNTU5ZGQwMDFlOGJmNjgyNGIzZWVkYWZlZGQ4Yjg5ZmEyM2Y0YWVlZDE0NDM1Ci1hN2QwNWRhN2IwNjA3ZWRmMmFhYjA4MTZlODY2ZjY3OTFlODM0YmZmNWY1YzY2OTllZGI5N2RmMTk5NTQ5ZDU0Ci0zZDAzOTY3MWE0ODFkMDk0MzUyZWM3NmQyZjdlNTExOTg4N2VlM2FkMTExN2Y3NDlhODViM2I2ZjM3ZTNkMjVmCi0yNTM5N2QxZDAxOWRhOWM1YzZmYmJmYmFlYjRmZGYwYTQyM2Y2Mzk0OTY4ZjJlYWJjNTYwZjc2ZTc1YjA3YjU0Ci1hNmQ4NzMyODYwNGZjODZiZTM3YTFlOGU1NzkwZWI4NDVjY2E4OGJiYzJlMDFlYWIyOGE2ZDY2MTUyMjk2NThiCi03NTU0YTg1MDY0YWFjZjY5ODk0OWU0ZjU2ZjJiZDYxYmQ1YWYzMWJkNjAxMmVmMGMxYmI2MjdjYmVlYzcxYjUyCi1lOTlhZjk1ZjY5OTYxN2E4NDYyZTE0ZTE0NDQyNGE2NGU0YzFjZGE4MGExM2NmN2IyMDkyOTA0MWIyZGY2Njg2Ci0xNWMyZjc3YTczZjljZGJjYTMzY2QxMTE4OGE5YTYwOGIyNDBiMjdlN2NmYzUyMzRmZGFkNmRiNWQ2NTY1Nzg3Ci1kOTlmNDU3MDk2NzQ2OTBlZTcwNGRlNGNlNmFjY2MzNzM0M2VhYWMwMmRkOGNhMzY4MjIxZDYwN2M0ZWEyNGRjCi0wNWFhYTUxNjIxMjAzMDFhOGZiNGMzMTY2ZWYwZTgxM2FhYjUzNjIwMGE4ZDU0ZDNlMDY3OWNiYWQ1OWNhZTBkCi1kOWMyNTEwMTYzMzZjNjMyNDNiNDJmNGE0MzlhZjBmMWI0ZDRjYzNlZTljMjRkYWU1ZWM4N2MxMGI0YjA0NmViCi0zODc3ZWFlNjM2MTAxYzMyMzEzMTk5NTc2OTBjZjdjZDU2MmZiNDhlNDRhYmQ0NmJmZDg2NDBkZTUzNDhhMDFkCi04Mzg5ZGJlMjYxNjU3MjljM2VhMTAyM2IzNTRjYzZiNjkyODkyMmNmZmIyZGY5ZWE2MGQ4NTNhNzQwNjdiNDQyCi1hN2Q0OTM4Mjk2ZTJmZmRlZWU4YjMzZGFlMmVjZjViZTI0NTFmYmUzODI5ZjljMWQ0NTgyMGM5ODQ5MTc2YTQzCi0yMjY5NGYwNTkzNjc2NzBkNjhhZDEyMDgwYTg0NjAzODIxZjg2N2NhMzdkYzcyN2MzYzUyNTQxMDNhZjIxY2Q5Ci0wMzRmNjc5YWVhNWQ0YmM4MTM2NjI0NTcyNWZhNDZjZDY3MWFjOTI1MTgxN2U4YWJiZTlmMDZmMTgyYjczOGU5Ci0wNTc2OWIwZDZhNTA0MTcwMzM0ZDA5YmI3YjgwOWMyNDljYTk2Nzg2NThiMzZmZWY5OGEwZjg5MzZjYzkxNjdmCi0zMTgzN2ZiMmU5MjMxOWI4ZTRkZjUxNjg0OTRmZTkwYTEyYTg4YjkzYmFlMDk4ZmFjMmYzYWYyYzA4Nzc1OWNmCi0wZmRjM2Q5MDFlOTIxMjIyYTE5ZTUzYzY1NGQxM2U1MmE2ZjI3MmJkNjVlM2RlZWUxNGUzZTU5YzZkZDliNzk0Ci1kYmQ0NzZjY2Q0ZGViNTBlOTRkMjA3MTIzYTViYjYyNzZlNDAxNzdjMTNhZGVlOTIyN2UyODNiNTFiZGM4ZTUwCi0yYWY4ZDlmM2Q0Y2RmNjFhOWJmZmRiNTA0N2FhMzA1ZjdjNjFmYmI0OTQ0MGI3MDk5M2M5NjIwMDIwZmFkZjE1Ci00YjUyNDhlOGUyYTZmZDU2MzhhNDQ3YTU5M2IzMjAwMzllYjUzYTcwOWU5OTJhNDgxYzBkZTVmMTk2NDBjMTdmCi1jZGNmYWNmYmY3YjUyNTJjMDI3NGM1M2Y2ZGU3OGExMWRiNjQwMDc2ZTAxYTExYmU2YTYzYzNhOGJlMGUzZmIwCi1mMGMxZjQwYjM3OWI4MDM5OTc3MWIwYjIzYWEwZmI5MzRlZTMxODRmMGMxOGQ1Y2I0MDI4NTUxMGE0ZWI5MmYxCi02ZjA4OWNlM2NmMzJiNTJhZGQyM2IwZjZhNDM2NjM3YTE3YTcxZjkwZThjOTFhZGVhZmY3ZWI5NzIyMGExN2I3Ci0zNTRlYTgwYzY3OGUxNThjMWVjZDU4NmYwZTJlNmQ3YWI1YTE3OTUwMGQ0MDRlMTlhNjVkYjZjOTU2OGIwNzk5Ci0zMzBkNjliMjU0ZDI5ZTcwNDE5Njk2NDU1MzgxN2FiNDI4YmUyNTdjNWQ1MWFhYzYxZWU5Y2ZmY2QzZWM0NjE1Ci0xZDZlOTk5MmFkOTFhNzkxZDFjMjQ2NWRmMjQ3NTdkY2JjNjRmMzc4OGIxNTg2OGI5MDVlNTNjY2QwNDYyNWM3Ci1mMDRmYTI2N2Q2OGE2YWViNTk0NDNlYWQ5YmMxNzFmODQ1YjJiMGQ3YWM3ZTc4OGMyMTQxMWExZDRiMzkzNWQ2Ci1lZjIwOTMzMzNjZTA5MmRhNWQwNmZjZjZjMWYxYWZjNjhkYjAwY2MxZDAwOTBmMjEwNDZiNTQ2OTRmNTE2MmNjCi1jYjA3YWM2ZTgxYTNiNjU3ODcxZGIwNjkyY2Q3MGVkY2ZiNjQ1YzMzNTE2N2UwOGViMTVjYWE2Y2JmNjQxOWIwCi0xY2IyOGQzYmViOGM1YWI2YzhmNzc2NjNhMmMyNTgxNzdhMWZlYjlhYmI1NjBlOTAzYjQ1YTFkMTQ2NDRhMDhkCi03NzhhMGRiOTE4YjM2ZWQ1YTJkNmQ0MDlhZGY0MWEyMWIxMzIxMTY3OTA5NGNmMjkwYzQ2NTI2MzNkODYxZTFlCi0yY2YyMGI2OWNjZGNmMTdhYzdkNGJjMTVmZWJlMDM3OTk4Yjk4YzE3NjM2OWQyMjU5OTVlNTc4ZjYyZjZlNTQ4Ci0wNDlkYTkyOTY4NmNhZjhiNThiZjFiYWY5OWJmZDcxOTZjODA4NDQxOWQzODEwNzhhZDBiYzZiZmZiZTE2M2RlCi0xNWE0ZDBlNmZiNTMyMDhhZmYwNmYwODk2Nzg4MmIxN2MwNjk2ZjA2MDIxOGFlMDM3NjgyMDM2Y2IzOTM2NWI3Ci0zM2Q4YzJiMGYyNDE0ZjNjOTE5NDczYTZhYmM4ZDQxOWY3MGI1NDFhNjIwODI2MDI5OTBjM2MzNWE1NTIxN2Q1Ci05NmZlYTgyMDQ4MTgxOTUwNzc5YTNmYzVmNjdiZGFkOGRmODRlNTQzM2ZhNjdiY2NkMDVlYzg4NmQ4NTdiNzg5Ci0xOGZmYmYwODNmYTBiOWY5OGNmNWNmYzlhZTI5ZDYwN2QyZWQxMWZhMDIxMzFmZDdjMjU4NDMxYjIwZjdiMTEzCi1jMzE2YjcxNjM2NDRmZGVmMDI5ZDMzMzY2MjAwZTljNGI1NzI3OTQwNDkwYTgxYWExMzlkZGRmOTQ5M2Y2YjMyCi0wZWU4NDk1MGE2YTU0OTQ2MDAzMmQwYmE3ZmIzYjJkZWQyZTQwMjhiZDNlZjQ1NjAwNWJmYzE0NTZjNjgxZjI1Ci04MmRhZDZkYTE1MTI3YTFlZjE0NTUwZDk1NTdiODZjMmJjMzc0NDBkNTM4ZWU1MTQ2ZjMyMGM5ZGIwN2FlZDY4Ci03MGY2ZmE3NDhhNWI4N2ZkZTBlM2VmNGNmMTU2N2U3NDNlZWEyNjA3NmJhNjY4YjQ2ZjNmN2FkOTlmNGRmMzY3Ci1mZDQwZDg3Y2NhMzUyNjdhMDlhM2EzM2Y4MjEyNjU1Yjc0NzMyM2U5ZDVmMTg0Y2RlNzY2OTA2ZjZmODVlZjJiCi0zYWQwZGMwZWRjZDE1MGU1ODlkYWU5YzBlMTlkNDY0YWQ2MThjMzJlMTRhNWRiY2FhNmVjYmNkOTkwY2M0OWFkCi1jNmRlMTkxMjlkZWJkMmRlOTliNTA2YWRmNGRiZGVhNGZmMTM2NGUzMDA0NDdjOWMwZGVkYTJjZGYxZDM2NDhiCi0xYTgzYmQ0YmU0NmUxNzk3ZmI1YjYyMTYwNzdhNTRmMTJjN2FjZTljMjgzMjAwMjZhMTk0OTJlNTgxOTNkMDgyCi1jMGI1NDczYTVhNjAzY2UyMmVhMzc3NTExYjcyNWFkOWMyM2IxYTFiOTA2YjQ2NWZhMDJkMGZiNjIwZTIzMDc0Ci02NmM5ZDA3NzczMDkxNjg1MGNkMmFiY2MyNDEyYTM2NGY0YTBlZmRlM2ZiNzQxZGVhOTFmYmJhMTM4ZTc0ZGNiCi04MDk2MjcyODJiZTMxN2Q4ZjFkYmIyMjIyMGM5Njk2YmYzOWEyN2ZjMzhhZmY5MGVhZjQ1ODE1MWEwMGE4YTg4Ci05ZDRmNWQ5MzNiMWVlZTYzMDU0YzY1Nzk4YWQzMjA3OWNlNTczZDUzYzYyMGI2YTBmODFmZDkzMWI1YTI0NzA3Ci1lYmIzMGNmMDFiMGM2M2I1NWVlOGMwOGI4MDVhOWE0NWFlYThhYWNmNDk5ODJjZTZkM2U4NzI2YzZhMTIyNDM3Ci0xYjliMTE2YTU2ZGU2MDU0ODI0NDlkYWJiYjgzZDM1M2ViZGYzNTVmY2I4Y2RlNTY1OGM2OTliOGE1NTcxOGE4Ci02ZTA1MWI0MjIyMWRkYTQ4MjU3ZTlmNTZkMDlmMzFhNzc2MzA5MzBhYmIwZmNlMGQ0OWVjOWNiMjdjNmNlNDgwCi00YzNiMzZkNDVlYzE5NWU3Zjc4ZGM5MzAzNzBlZDY2Y2Q0YjY3NjMwODVlYzRjNjI2NjkzZTY5YjM5ZTk5M2IxCi03MGIyMjg5ZjI5ZGNmOTRkNWQyNzYzYTgyMTFhOTJjNDA0NDIzNzFhYTJmNDI5N2M5OTU4YzgzMzQyMWVlNjkzCi1hNzRiMjU2ZTQyNTk3OWFmZTg2YjI4NmJiZGEwOTgzZTE0MTk0MjUwZDlmZWNkMDNhOGJhMWZlNjE1ZTkzYWUxCi1kNjBkNDNmNjg1OGVhOWNkNDdkZGY4OGExYmZiNWU5MGI2MGEyOGNkYjI2OWQ5ZTFlNDNiMGNmNDcwYTk1YjQ4Ci1hYTUyOTllNzE1OWU3Y2NiMTgyMDA5MTRiOTNjM2IwZGY3OWYxODE3ODlmZGZkNjY5MzYxM2QwZDQyNzc4ODgzCi04ODg0NzkyN2Y1OWQ0MGYwY2I1MzM0ZjYyZWFmZTRmMzgwMDc2Y2ZiNzcyMDE3NGVjZWFiMWViNTA1MGVhMTJjCi1lNDI5M2RiMTE1YzRmOWJkNGQyMTkxMGE2OWQ1NjZhNzA2ZjVjMGUxYmNiMzQ0MjAzNTAzODU1ZTY2NDNiMTI1Ci0xN2I2ZGIwM2M0MWYxM2EzNDdhZDM5ZTQ3YTQ2ZDYyNmY4YTMxYTE2M2JkYTZkMjMyNjQ2NTdiNDEyYmRlYzk5Ci1jODdhMTAzZDI2Ci0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1jbGVhcnRvbWFyawotJSVFbmRSZXNvdXJjZQotL0Y2MzdfMCAvV1dXVVRVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci02MTIgNzkyIGZhbHNlIHBkZlNldHVwCi0lJUVuZFNldHVwCi0lJVBhZ2U6IDEgMQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzU2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjMuMDE5IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNy40MzYgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oYnppcDIpIDYzLjM2MzggVGoKLS0yNzggVEptCi0oYW5kKSA0NC4wNzcgVGoKLS0yNzggVEptCi0obGliYnppcDIsKSA5OS4xODU2IFRqCi0tMjc4IFRKbQotKHZlcikgMzcuMjEwMSBUagotMTUgVEptCi0oc2lvbikgNTAuOTY4NyBUagotLTI3OCBUSm0KLSgxLjAuNSkgNTUuMTMzNCBUagotWzEgMCAwIDEgNzIgNjk2Ljc4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE1LjQ5MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4MS4yOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAuNDkyOSA2NjEuNjMxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLShBKSAxNC45MTU0IFRqCi0tMjc4IFRKbQotKHByKSAyMC42NTg1IFRqCi0yMCBUSm0KLShvZ3JhbSkgNjMuMTMyNCBUagotLTI3OCBUSm0KLShhbmQpIDM2LjczMDggVGoKLS0yNzggVEptCi0obGlicmFyKSA1MS42NjY5IFRqCi0tMTAgVEptCi0oeSkgMTEuNDg2MSBUagotLTI3OCBUSm0KLShmKSA2Ljg3OTI4IFRqCi0yMCBUSm0KLShvcikgMjAuNjU4NSBUagotLTI3OCBUSm0KLShkYXRhKSA0Mi40NzM5IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSAxMjguNTc5IFRqCi1bMSAwIDAgMSA3MiA2NTcuMDM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTMuMDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuNjc2IDUwMy4yODUgVGQKLS9GMTIyXzAgMTEuOTU1MiBUZgotKEopIDYuNjQ3MDkgVGoKLTIwIFRKbQotKHVsaWFuKSAyNy45MDM0IFRqCi0tMjc4IFRKbQotKFNlKSAxNC42MjEyIFRqCi0xNSBUSm0KLSh3YXIpIDIwLjU5ODggVGoKLTIwIFRKbQotKGQsKSAxMC42MjgyIFRqCi0tMjc4IFRKbQotKGh0dHA6Ly93d3cpIDYxLjEwMyBUagotNDAgVEptCi0oLmJ6aXAub3IpIDQyLjUxMjcgVGoKLTE1IFRKbQotKGcpIDcuMzA0NjMgVGoKLVsxIDAgMCAxIDcyIDUwMC42MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00MzUuODI2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjMuMDE5IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIgMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzA5LjUzNCBUZAotL0YxMjJfMCAxNC4zNDYyIFRmCi0oYnppcDIpIDM2LjY2ODkgVGoKLS00ODkgVEptCi0oYW5kKSAyNS41MDc1IFRqCi0tNDg4IFRKbQotKGxpYmJ6aXAyLCkgNTcuMzk5MSBUagotLTU0MiBUSm0KLSh2ZXIpIDIxLjUzMzYgVGoKLTE1IFRKbQotKHNpb24pIDI5LjQ5NTggVGoKLS00ODggVEptCi0oMS4wLjU6KSAzNi42ODMyIFRqCi0tNzY2IFRKbQotKEEpIDEwLjM1OCBUagotLTQ4OCBUSm0KLShwcikgMTQuMzQ2MiBUagotMjAgVEptCi0ob2dyYW0pIDQzLjg0MiBUagotLTQ4OSBUSm0KLShhbmQpIDI1LjUwNzUgVGoKLS00ODkgVEptCi0obGlicmFyKSAzNS44Nzk4IFRqCi0tMTAgVEptCi0oeSkgNy45NzY0OSBUagotLTQ4OCBUSm0KLShmKSA0Ljc3NzI4IFRqCi0yMCBUSm0KLShvcikgMTQuMzQ2MiBUagotLTQ4OSBUSm0KLShkYXRhKSAyOS40OTU4IFRqCi03MiA2OTIuMzE5IFRkCi0oY29tcHJlc3Npb24pIDg5LjI5MDcgVGoKLVsxIDAgMCAxIDcyIDY4OS4zNDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4OS4zNDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY4MC4zNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShKdWxpYW4pIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0oU2UpIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZCkgMTIuNzIyMiBUagotWzEgMCAwIDEgNzIgNjc4LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc4LjIwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY4LjQwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDb3ApIDE2LjYwNzcgVGoKLTEwIFRKbQotKHlyaWdodCkgMjMuODAwNyBUagotWzEgMCAwIDEgMTE0Ljc5OSA2NjguNDA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNC43OTkgLTY2OC40MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNC43OTkgNjY4LjQwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjUxKSA3LjU3MTU4IFRqCi1bMSAwIDAgMSAxMjIuMzcxIDY2OC40MDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIyLjM3MSAtNjY4LjQwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI0Ljg2MSA2NjguNDA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE5OTYtMjAwNykgNDMuMTY3OSBUagotLTI1MCBUSm0KLShKdWxpYW4pIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0oU2UpIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZCkgMTIuNzIyMiBUagotWzEgMCAwIDEgNzIgNjY2LjI1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTcuOTcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjU4LjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUwLjg3NSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShUaGlzKSAxNC4xNzA4IFRqCi0tMjUwIFRKbQotKHByb2dyYW0sKSAyOC45OTUyIFRqCi1bMSAwIDAgMSAxMTkuMTUxIDY1MC44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjE1MSAtNjUwLjg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5LjE1MSA2NTAuODc1IFRkCi0vRjEzNF8wIDcuOTcwMSBUZgotKGJ6aXAyKSAyMy45MTAzIFRqCi1bMSAwIDAgMSAxNDMuMDYxIDY1MC44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjA2MSAtNjUwLjg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQzLjA2MSA2NTAuODc1IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKCwpIDEuOTkyNTMgVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKGFzc29jaWF0ZWQpIDMyLjc1NzEgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjEuMjQ4MyBUagotWzEgMCAwIDEgMjE2Ljc2OCA2NTAuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi43NjggLTY1MC44NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi43NjggNjUwLjg3NSBUZAotL0YxMzRfMCA3Ljk3MDEgVGYKLShsaWJiemlwMikgMzguMjU2NSBUagotWzEgMCAwIDEgMjU1LjAyNCA2NTAuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1NS4wMjQgLTY1MC44NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NS4wMjQgNjUwLjg3NSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLSgsKSAxLjk5MjUzIFRqCi0tMjUwIFRKbQotKGFuZCkgMTEuNTA4OCBUagotLTI1MCBUSm0KLShhbGwpIDcuOTcwMSBUagotLTI1MCBUSm0KLShkb2N1bWVudGF0aW9uLCkgNDkuMzY2OCBUagotLTI1MCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0oY29wKSAxMS41MDg4IFRqCi0xMCBUSm0KLSh5cmlnaHQpIDE5LjA0MDYgVGoKLS0yNTAgVEptCi0oXDI1MSkgNi4wNTcyOCBUagotLTI1MCBUSm0KLSgxOTk2LTIwMDcpIDM0LjUzNDQgVGoKLS0yNTAgVEptCi0oSnVsaWFuKSAxOS4wNDA2IFRqCi0tMjUwIFRKbQotKFNlKSA3Ljk3MDEgVGoKLTI1IFRKbQotKHcpIDUuNzU0NDEgVGoKLTEwIFRKbQotKGFyZC4pIDEyLjE3MDMgVGoKLS0zMTAgVEptCi0oQWxsKSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKHJpZ2h0cykgMTguMTU1OSBUagotLTI1MCBUSm0KLShyZXNlcnYpIDE5LjQ3MSBUagotMTUgVEptCi0oZWQuKSA5LjUxNjMgVGoKLVsxIDAgMCAxIDcyIDY0OS4xNDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC03Ljk3MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0MS4xNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzMy4zNCBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShSZWRpc3RyaWIpIDI5LjIyNjQgVGoKLTIwIFRKbQotKHV0aW9uKSAxNi4zODY1IFRqCi0tMjUwIFRKbQotKGFuZCkgMTEuNTA4OCBUagotLTI1MCBUSm0KLSh1c2UpIDEwLjYyNDEgVGoKLS0yNTAgVEptCi0oaW4pIDYuMjAwNzQgVGoKLS0yNTAgVEptCi0oc291cmNlKSAyMC44MDIgVGoKLS0yNTAgVEptCi0oYW5kKSAxMS41MDg4IFRqCi0tMjUwIFRKbQotKGJpbmFyeSkgMjAuMzYzNiBUagotLTI1MCBUSm0KLShmb3JtcywpIDIwLjU4NjggVGoKLS0yNTAgVEptCi0od2l0aCkgMTQuMTcwOCBUagotLTI1MCBUSm0KLShvcikgNi42MzkwOSBUagotLTI1MCBUSm0KLSh3aXRob3V0KSAyNC4zNTY2IFRqCi0tMjUwIFRKbQotKG1vZGlcMDAyY2F0aW9uLCkgNDIuMjg5NCBUagotLTI1MCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0ocGVybWl0dGVkKSAzMC41NDk0IFRqCi0tMjUwIFRKbQotKHBybykgMTAuNjI0MSBUagotMTUgVEptCi0odmlkZWQpIDE3LjcwOTYgVGoKLS0yNTAgVEptCi0odGhhdCkgMTEuOTU1MSBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE1LjA1NTUgVGoKLTI1IFRKbQotKHdpbmcpIDE1Ljk0MDIgVGoKLS0yNTAgVEptCi0oY29uZGl0aW9ucykgMzMuMjExNCBUagotLTI1MCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0obWV0OikgMTQuMTcwOCBUagotWzEgMCAwIDEgNzIgNjMxLjYxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIzLjc3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA1LjU3OTEgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03Ny41NzkxIC02MDcuODM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03Ny41NzkxIDYwNy44MzYgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oXDIyNSkgMi43ODk1NCBUagotWzEgMCAwIDEgODAuMzY4NiA2MDcuODM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjU5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjk1NTIgLTYwNy44MzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTgzLjk1NTIgNjA3LjgzNiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShSZWRpc3RyaWIpIDI5LjIyNjQgVGoKLTIwIFRKbQotKHV0aW9ucykgMTkuNDg2OSBUagotLTI1MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI1MCBUSm0KLShzb3VyY2UpIDIwLjgwMiBUagotLTI1MCBUSm0KLShjb2RlKSAxNS4wNDc1IFRqCi0tMjUwIFRKbQotKG11c3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0ocmV0YWluKSAxOC4xNDc5IFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShhYm8pIDExLjUwODggVGoKLTE1IFRKbQotKHYpIDMuOTg1MDUgVGoKLTE1IFRKbQotKGUpIDMuNTM4NzIgVGoKLS0yNTAgVEptCi0oY29wKSAxMS41MDg4IFRqCi0xMCBUSm0KLSh5cmlnaHQpIDE5LjA0MDYgVGoKLS0yNTAgVEptCi0obm90aWNlLCkgMjEuNDcxNCBUagotLTI1MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjUwIFRKbQotKGxpc3QpIDkuNzQ3NDMgVGoKLS0yNTAgVEptCi0ob2YpIDYuNjM5MDkgVGoKLS0yNTAgVEptCi0oY29uZGl0aW9ucykgMzMuMjExNCBUagotLTI1MCBUSm0KLShhbmQpIDExLjUwODggVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKGZvbGxvKSAxNS4wNTU1IFRqCi0yNSBUSm0KLSh3aW5nKSAxNS45NDAyIFRqCi0tMjUwIFRKbQotKGRpc2NsYWltZXIpIDMzLjIwMzQgVGoKLTU1IFRKbQotKC4pIDEuOTkyNTMgVGoKLVsxIDAgMCAxIDQ3MC45MDggNjA3LjgzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTguOTA4IC0xNy41MzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNS41NzkxIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzcuNTc5MSAtNTkwLjMwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzcuNTc5MSA1OTAuMzAyIFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFwyMjUpIDIuNzg5NTQgVGoKLVsxIDAgMCAxIDgwLjM2ODYgNTkwLjMwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS41OTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04My45NTUyIC01OTAuMzAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04My45NTUyIDU5MC4zMDIgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oVGhlKSAxMi4zOTM1IFRqCi0tMjcwIFRKbQotKG9yaWdpbikgMTkuMDQwNiBUagotLTI3MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI3MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjcwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNzAgVEptCi0obXVzdCkgMTUuNTAxOCBUagotLTI3MCBUSm0KLShub3QpIDEwLjE4NTggVGoKLS0yNzAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNzAgVEptCi0obWlzcmVwcmVzZW50ZWQ7KSA1MC40NjY3IFRqCi0tMjc5IFRKbQotKHlvdSkgMTEuOTU1MSBUagotLTI3MCBUSm0KLShtdXN0KSAxNS41MDE4IFRqCi0tMjcwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI3MCBUSm0KLShjbGFpbSkgMTcuNzA5NiBUagotLTI3MCBUSm0KLSh0aGF0KSAxMS45NTUxIFRqCi0tMjcwIFRKbQotKHlvdSkgMTEuOTU1MSBUagotLTI3MCBUSm0KLSh3cm90ZSkgMTguMTQ3OSBUagotLTI3MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNzAgVEptCi0ob3JpZ2luYWwpIDI0Ljc5NSBUagotLTI3MCBUSm0KLShzb2Z0dykgMTcuNzA5NiBUagotMTAgVEptCi0oYXJlLikgMTEuNzI0IFRqCi0tNzQwIFRKbQotKElmKSA1LjMwODA5IFRqCi0tMjcwIFRKbQotKHlvdSkgMTEuOTU1MSBUagotLTI3MCBUSm0KLSh1c2UpIDEwLjYyNDEgVGoKLS0yNzAgVEptCi0odGhpcykgMTEuNTE2OCBUagotLTI3MCBUSm0KLShzb2Z0dykgMTcuNzA5NiBUagotMTAgVEptCi0oYXJlKSA5LjczMTQ5IFRqCi0tMjcwIFRKbQotKGluKSA2LjIwMDc0IFRqCi0tMjY5IFRKbQotKGEpIDMuNTM4NzIgVGoKLTgzLjk1NTIgNTgwLjczNyBUZAotKHByb2R1Y3QsKSAyNi4zNDEyIFRqCi0tMjUwIFRKbQotKGFuKSA3LjUyMzc3IFRqCi0tMjUwIFRKbQotKGFja25vKSAxOS4wMzI2IFRqCi0yNSBUSm0KLSh3bGVkZ21lbnQpIDM1LjQxOTEgVGoKLS0yNTAgVEptCi0oaW4pIDYuMjAwNzQgVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKHByb2R1Y3QpIDI0LjM0ODcgVGoKLS0yNTAgVEptCi0oZG9jdW1lbnRhdGlvbikgNDcuMzc0MyBUagotLTI1MCBUSm0KLSh3KSA1Ljc1NDQxIFRqCi0xMCBUSm0KLShvdWxkKSAxNC4xNzA4IFRqCi0tMjUwIFRKbQotKGJlKSA3LjUyMzc3IFRqCi0tMjUwIFRKbQotKGFwcHJlY2lhdGVkKSAzNi43MzQyIFRqCi0tMjUwIFRKbQotKGIpIDMuOTg1MDUgVGoKLTIwIFRKbQotKHV0KSA2LjIwMDc0IFRqCi0tMjUwIFRKbQotKGlzKSA1LjMxNjA2IFRqCi0tMjUwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI1MCBUSm0KLShyZXF1aXJlZC4pIDI4LjU0ODkgVGoKLVsxIDAgMCAxIDQwMy44MTcgNTgwLjczN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzEuODE3IC0xNy41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNS41NzkxIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzcuNTc5MSAtNTYzLjIwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzcuNTc5MSA1NjMuMjAzIFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFwyMjUpIDIuNzg5NTQgVGoKLVsxIDAgMCAxIDgwLjM2ODYgNTYzLjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS41OTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04My45NTUyIC01NjMuMjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04My45NTUyIDU2My4yMDMgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oQWx0ZXJlZCkgMjMuOTAyMyBUagotLTI1MCBUSm0KLShzb3VyY2UpIDIwLjgwMiBUagotLTI1MCBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlcnNpb25zKSAyMi41NzkzIFRqCi0tMjUwIFRKbQotKG11c3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0ocGxhaW5seSkgMjIuMTQwOSBUagotLTI1MCBUSm0KLShtYXJrKSAxNi4zNzg2IFRqCi0xMCBUSm0KLShlZCkgNy41MjM3NyBUagotLTI1MCBUSm0KLShhcykgNi42MzkwOSBUagotLTI1MCBUSm0KLShzdWNoLCkgMTYuNjAxNyBUagotLTI1MCBUSm0KLShhbmQpIDExLjUwODggVGoKLS0yNTAgVEptCi0obXVzdCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShub3QpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0obWlzcmVwcmVzZW50ZWQpIDQ4LjI1MSBUagotLTI1MCBUSm0KLShhcykgNi42MzkwOSBUagotLTI1MCBUSm0KLShiZWluZykgMTcuNzA5NiBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0ob3JpZ2luYWwpIDI0Ljc5NSBUagotLTI1MCBUSm0KLShzb2Z0dykgMTcuNzA5NiBUagotMTAgVEptCi0oYXJlLikgMTEuNzI0IFRqCi1bMSAwIDAgMSA0NjQuNDA1IDU2My4yMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkyLjQwNSAtMTcuNTM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDUuNTc5MSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc3LjU3OTEgLTU0NS42NjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc3LjU3OTEgNTQ1LjY2OSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShcMjI1KSAyLjc4OTU0IFRqCi1bMSAwIDAgMSA4MC4zNjg2IDU0NS42NjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuNTk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODMuOTU1MiAtNTQ1LjY2OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODMuOTU1MiA1NDUuNjY5IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFRoZSkgMTIuMzkzNSBUagotLTI1MCBUSm0KLShuYW1lKSAxNy4yNjMyIFRqCi0tMjUwIFRKbQotKG9mKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShhdXRob3IpIDIwLjM2MzYgVGoKLS0yNTAgVEptCi0obWF5KSAxMy43MjQ1IFRqCi0tMjUwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI1MCBUSm0KLShiZSkgNy41MjM3NyBUagotLTI1MCBUSm0KLSh1c2VkKSAxNC42MDkyIFRqCi0tMjUwIFRKbQotKHRvKSA2LjIwMDc0IFRqCi0tMjUwIFRKbQotKGVuZG9yc2UpIDI0Ljc4NyBUagotLTI1MCBUSm0KLShvcikgNi42MzkwOSBUagotLTI1MCBUSm0KLShwcm9tb3RlKSAyNi41NjQzIFRqCi0tMjUwIFRKbQotKHByb2R1Y3RzKSAyNy40NDkgVGoKLS0yNTAgVEptCi0oZGVyaSkgMTIuMzkzNSBUagotMjUgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZWQpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTUuNDkzOSBUagotLTI1MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjUwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0od2l0aG91dCkgMjQuMzU2NiBUagotLTI1MCBUSm0KLShzcGVjaVwwMDJjKSAyNC4zNDg3IFRqCi0tMjUwIFRKbQotKHByaW9yKSAxNS40OTM5IFRqCi0tMjUwIFRKbQotKHdyaXR0ZW4pIDIyLjU3OTMgVGoKLS0yNTAgVEptCi0ocGVybWlzc2lvbi4pIDM2Ljk3MzMgVGoKLVsxIDAgMCAxIDUzMy41NzcgNTQ1LjY2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjEuNTc3IC05LjY5NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzNS45NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyOC4xMzUgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oVEhJUykgMTcuNzA5NiBUagotLTQwMSBUSm0KLShTT0ZUVykgMjcuMDEwNyBUagotMTIwIFRKbQotKEFSRSkgMTUuOTQwMiBUagotLTQwMSBUSm0KLShJUykgNy4wODU0MiBUagotLTQwMCBUSm0KLShQUikgOS43NDc0MyBUagotNDAgVEptCi0oTykgNS43NTQ0MSBUagotNTAgVEptCi0oVklERUQpIDI0Ljc4NyBUagotLTQwMSBUSm0KLShCWSkgMTEuMDcwNSBUagotLTQwMSBUSm0KLShUSEUpIDE1LjQ5MzkgVGoKLS00MDEgVEptCi0oQSkgNS43NTQ0MSBUagotNTUgVEptCi0oVVRIT1IpIDI3LjQ0OSBUagotLTQwMSBUSm0KLSgiQVMpIDEzLjQzNzYgVGoKLS00MDEgVEptCi0oSVMiKSAxMC4zMzcyIFRqCi0tNDAxIFRKbQotKEFORCkgMTcuMjYzMiBUagotLTQwMCBUSm0KLShBTlkpIDE3LjI2MzIgVGoKLS00MDEgVEptCi0oRVhQUkVTUykgMzQuMTA0MSBUagotLTQwMSBUSm0KLShPUikgMTEuMDcwNSBUagotLTQwMSBUSm0KLShJTVBMSUVEKSAzMi4zMTg4IFRqCi0tNDAxIFRKbQotKFcpIDcuNTIzNzcgVGoKLTEyMCBUSm0KLShBUlJBTlRJRVMsKSA0Ni43MTI4IFRqCi0tNDAxIFRKbQotKElOQ0xVRElORywpIDQ2LjI1ODUgVGoKLS00MDAgVEptCi0oQikgNS4zMTYwNiBUagotMTAgVEptCi0oVVQpIDEwLjYyNDEgVGoKLTcyIDUxOC41NzEgVGQKLShOTykgMTEuNTA4OCBUagotNDAgVEptCi0oVCkgNC44Njk3MyBUagotLTMwNCBUSm0KLShMSU1JVEVEKSAzMi43NTcxIFRqCi0tMzA0IFRKbQotKFQpIDQuODY5NzMgVGoKLTE4IFRKbQotKE8sKSA3Ljc0Njk0IFRqCi0tMzA1IFRKbQotKFRIRSkgMTUuNDkzOSBUagotLTMwNCBUSm0KLShJTVBMSUVEKSAzMi4zMTg4IFRqCi0tMzA0IFRKbQotKFcpIDcuNTIzNzcgVGoKLTEyMCBUSm0KLShBUlJBTlRJRVMpIDQ0LjcyMDIgVGoKLS0zMDQgVEptCi0oT0YpIDEwLjE4NTggVGoKLS0zMDQgVEptCi0oTUVSQ0hBTlQpIDQ0LjcyMDIgVGoKLTkzIFRKbQotKEFCSUxJVFkpIDMxLjg3MjQgVGoKLS0zMDQgVEptCi0oQU5EKSAxNy4yNjMyIFRqCi0tMzA1IFRKbQotKEZJVE5FU1MpIDMxLjQ0MiBUagotLTMwNCBUSm0KLShGT1IpIDE1LjUwMTggVGoKLS0zMDQgVEptCi0oQSkgNS43NTQ0MSBUagotLTMwNCBUSm0KLShQKSA0LjQzMTM4IFRqCi05MiBUSm0KLShBUikgMTEuMDcwNSBUagotNjAgVEptCi0oVElDVUxBUikgMzQuNTM0NCBUagotLTMwNCBUSm0KLShQVVJQT1NFKSAzNC45ODg3IFRqCi0tMzA0IFRKbQotKEFSRSkgMTUuOTQwMiBUagotLTMwNSBUSm0KLShESSkgOC40MDg0NiBUagotMSBUSm0KLShTLSkgNy4wODU0MiBUagotNzIgNTA5LjAwNiBUZAotKENMQUlNRUQuKSAzOC4yOTYzIFRqCi0tNTc2IFRKbQotKElOKSA4LjQwODQ2IFRqCi0tMjg3IFRKbQotKE5PKSAxMS41MDg4IFRqCi0tMjg4IFRKbQotKEVWRU5UKSAyNi4xMTggVGoKLS0yODggVEptCi0oU0hBTEwpIDI1LjY3OTcgVGoKLS0yODggVEptCi0oVEhFKSAxNS40OTM5IFRqCi0tMjg3IFRKbQotKEEpIDUuNzU0NDEgVGoKLTU1IFRKbQotKFVUSE9SKSAyNy40NDkgVGoKLS0yODggVEptCi0oQkUpIDEwLjE4NTggVGoKLS0yODggVEptCi0oTElBQkxFKSAyOC4zMzM3IFRqCi0tMjg4IFRKbQotKEZPUikgMTUuNTAxOCBUagotLTI4OCBUSm0KLShBTlkpIDE3LjI2MzIgVGoKLS0yODcgVEptCi0oRElSRUNUKSAyOC43OCBUagotNzQgVEptCi0oLCkgMS45OTI1MyBUagotLTI4OCBUSm0KLShJTkRJUkVDVCkgMzcuMTg4NSBUagotNzQgVEptCi0oLCkgMS45OTI1MyBUagotLTI4OCBUSm0KLShJTkNJREVOVCkgMzcuNjI2OCBUagotOTMgVEptCi0oQUwsKSAxMi42MTY3IFRqCi0tMjg4IFRKbQotKFNQRUNJQUwsKSAzNC4zMTkzIFRqCi0tMjg4IFRKbQotKEVYRU1QTEFSKSA0Mi45NTA5IFRqCi02NSBUSm0KLShZKSA1Ljc1NDQxIFRqCi0xMjkgVEptCi0oLCkgMS45OTI1MyBUagotNzIgNDk5LjQ0MiBUZAotKE9SKSAxMS4wNzA1IFRqCi0tMjk5IFRKbQotKENPTlNFUSkgMzEuODgwNCBUagotMTAgVEptCi0oVUVOVElBTCkgMzQuNTI2NSBUagotLTMwMCBUSm0KLShEKSA1Ljc1NDQxIFRqCi00MCBUSm0KLShBTUEpIDE4LjU5NDIgVGoKLTQwIFRKbQotKEdFUykgMTUuMDU1NSBUagotLTI5OSBUSm0KLShcKElOQ0xVRElORywpIDQ4LjkxMjUgVGoKLS0yOTkgVEptCi0oQikgNS4zMTYwNiBUagotMTAgVEptCi0oVVQpIDEwLjYyNDEgVGoKLS0yOTkgVEptCi0oTk8pIDExLjUwODggVGoKLTQwIFRKbQotKFQpIDQuODY5NzMgVGoKLS0zMDAgVEptCi0oTElNSVRFRCkgMzIuNzU3MSBUagotLTI5OSBUSm0KLShUKSA0Ljg2OTczIFRqCi0xOCBUSm0KLShPLCkgNy43NDY5NCBUagotLTI5OSBUSm0KLShQUikgOS43NDc0MyBUagotNDAgVEptCi0oT0NVUkVNRU5UKSA0OS41OSBUagotLTI5OSBUSm0KLShPRikgMTAuMTg1OCBUagotLTMwMCBUSm0KLShTVUJTVElUVVRFKSA0Ny44MjA2IFRqCi0tMjk5IFRKbQotKEdPT0RTKSAyNy40NDkgVGoKLS0yOTkgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0zMDAgVEptCi0oU0VSKSAxNC42MTcyIFRqCi04MCBUSm0KLShWSUNFUykgMjMuMDI1NiBUagotMSBUSm0KLSg7KSAyLjIxNTY5IFRqCi03MiA0ODkuODc4IFRkCi0oTE9TUykgMTkuNDg2OSBUagotLTM2MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTM2MCBUSm0KLShVU0UsKSAxNy4wNDggVGoKLS0zNjAgVEptCi0oRCkgNS43NTQ0MSBUagotNDAgVEptCi0oQSkgNS43NTQ0MSBUagotMTExIFRKbQotKFQpIDQuODY5NzMgVGoKLTkzIFRKbQotKEEsKSA3Ljc0Njk0IFRqCi0tMzYwIFRKbQotKE9SKSAxMS4wNzA1IFRqCi0tMzU5IFRKbQotKFBSKSA5Ljc0NzQzIFRqCi00MCBUSm0KLShPRklUUzspIDI0LjM1NjYgVGoKLS0zNjAgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0zNjAgVEptCi0oQikgNS4zMTYwNiBUagotMTAgVEptCi0oVVNJTkVTUykgMzIuMzI2NyBUagotLTM2MCBUSm0KLShJTlRFUlIpIDI4Ljc4IFRqCi00MCBUSm0KLShVUFRJT05cKSkgMzEuODcyNCBUagotLTM2MCBUSm0KLShITykgMTEuNTA4OCBUagotMzUgVEptCi0oV0VWRVIpIDI4LjMzMzcgVGoKLS0zNjAgVEptCi0oQ0EpIDExLjA3MDUgVGoKLTU1IFRKbQotKFVTRUQpIDIwLjgwOTkgVGoKLS0zNTkgVEptCi0oQU5EKSAxNy4yNjMyIFRqCi0tMzYwIFRKbQotKE9OKSAxMS41MDg4IFRqCi0tMzYwIFRKbQotKEFOWSkgMTcuMjYzMiBUagotLTM2MCBUSm0KLShUSEVPUikgMjYuNTY0MyBUagotNjUgVEptCi0oWSkgNS43NTQ0MSBUagotLTM2MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTM2MCBUSm0KLShMSUFCKSAxOC41OTQyIFRqCi0xIFRKbQotKElMSVRZKSAyMC44MDIgVGoKLTEyOCBUSm0KLSgsKSAxLjk5MjUzIFRqCi03MiA0ODAuMzE0IFRkCi0oV0hFVEhFUikgMzguOTU3OCBUagotLTI0NyBUSm0KLShJTikgOC40MDg0NiBUagotLTI0NyBUSm0KLShDT05UUkEpIDMyLjc2NTEgVGoKLTQwIFRKbQotKENUKSAxMC4xODU4IFRqCi03NCBUSm0KLSgsKSAxLjk5MjUzIFRqCi0tMjQ3IFRKbQotKFNUUklDVCkgMjcuNDU3IFRqCi0tMjQ3IFRKbQotKExJQUJJTElUWSkgMzkuMzk2MiBUagotMTI5IFRKbQotKCwpIDEuOTkyNTMgVGoKLS0yNDYgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0yNDcgVEptCi0oVCkgNC44Njk3MyBUagotMTggVEptCi0oT1IpIDExLjA3MDUgVGoKLTYwIFRKbQotKFQpIDQuODY5NzMgVGoKLS0yNDcgVEptCi0oXChJTkNMVURJTkcpIDQ2LjkyIFRqCi0tMjQ3IFRKbQotKE5FR0xJR0VOQ0UpIDUwLjQ2NjcgVGoKLS0yNDcgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0yNDcgVEptCi0oTykgNS43NTQ0MSBUagotNDAgVEptCi0oVEhFUikgMjAuODA5OSBUagotNTUgVEptCi0oV0lTRVwpKSAyMi4xMzMgVGoKLS0yNDcgVEptCi0oQVJJU0lORykgMzIuMzE4OCBUagotLTI0NyBUSm0KLShJTikgOC40MDg0NiBUagotLTI0NyBUSm0KLShBTlkpIDE3LjI2MzIgVGoKLS0yNDcgVEptCi0oVykgNy41MjM3NyBUagotMTIwIFRKbQotKEEpIDUuNzU0NDEgVGoKLTEwNSBUSm0KLShZKSA1Ljc1NDQxIFRqCi0tMjQ3IFRKbQotKE9VVCkgMTYuMzc4NiBUagotNzIgNDcwLjc1IFRkCi0oT0YpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0oVEhFKSAxNS40OTM5IFRqCi0tMjUwIFRKbQotKFVTRSkgMTUuMDU1NSBUagotLTI1MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTI1MCBUSm0KLShUSElTKSAxNy43MDk2IFRqCi0tMjUwIFRKbQotKFNPRlRXKSAyNy4wMTA3IFRqCi0xMjAgVEptCi0oQVJFLCkgMTcuOTMyNyBUagotLTI1MCBUSm0KLShFVkVOKSAyMS4yNDgzIFRqCi0tMjUwIFRKbQotKElGKSA3LjA4NTQyIFRqCi0tMjUwIFRKbQotKEFEKSAxMS41MDg4IFRqCi00MCBUSm0KLShWSVNFRCkgMjMuNDY0IFRqCi0tMjUwIFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKFRIRSkgMTUuNDkzOSBUagotLTI1MCBUSm0KLShQT1NTSUJJTElUWSkgNDcuODIwNiBUagotLTI1MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTI1MCBUSm0KLShTVUNIKSAyMS4yNTYzIFRqCi0tMjUwIFRKbQotKEQpIDUuNzU0NDEgVGoKLTQwIFRKbQotKEFNQSkgMTguNTk0MiBUagotNDAgVEptCi0oR0UuKSAxMi42MTY3IFRqCi1bMSAwIDAgMSA3MiA0NjkuNTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNy45NzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjEuNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTMuMjE2IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFApIDQuNDMxMzggVGoKLTkyIFRKbQotKEEpIDUuNzU0NDEgVGoKLTExMSBUSm0KLShURU5UUzopIDI3LjAxMDcgVGoKLS0yOTYgVEptCi0oVCkgNC44Njk3MyBUagotODAgVEptCi0obykgMy45ODUwNSBUagotLTI5NSBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yOTYgVEptCi0oYmVzdCkgMTIuODM5OCBUagotLTI5NSBUSm0KLShvZikgNi42MzkwOSBUagotLTI5NiBUSm0KLShteSkgMTAuMTg1OCBUagotLTI5NSBUSm0KLShrbm8pIDExLjk1NTEgVGoKLTI1IFRKbQotKHdsZWRnZSwpIDI1LjAxMDIgVGoKLVsxIDAgMCAxIDIwOC41NDQgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguNTQ0IC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNTQ0IDQ1My4yMTYgVGQKLS9GMTM0XzAgNy45NzAxIFRmCi0oYnppcDIpIDIzLjkxMDMgVGoKLVsxIDAgMCAxIDIzMi40NTQgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuNDU0IC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuODEgNDUzLjIxNiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShhbmQpIDExLjUwODggVGoKLVsxIDAgMCAxIDI0OC42NzQgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDguNjc0IC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDguNjc0IDQ1My4yMTYgVGQKLS9GMTM0XzAgNy45NzAxIFRmCi0obGliYnppcDIpIDM4LjI1NjUgVGoKLVsxIDAgMCAxIDI4Ni45MzEgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODYuOTMxIC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuMjg2IDQ1My4yMTYgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oZG8pIDcuOTcwMSBUagotLTI5NiBUSm0KLShub3QpIDEwLjE4NTggVGoKLS0yOTUgVEptCi0odXNlKSAxMC42MjQxIFRqCi0tMjk2IFRKbQotKGFuKSA3LjUyMzc3IFRqCi0xNSBUSm0KLSh5KSAzLjk4NTA1IFRqCi0tMjk1IFRKbQotKHBhdGVudGVkKSAyNy4wMDI3IFRqCi0tMjk2IFRKbQotKGFsZ29yaXRobXMuKSAzNi4wODg2IFRqCi0tODkzIFRKbQotKEhvKSA5LjczOTQ2IFRqCi0yNSBUSm0KLSh3ZSkgOS4yOTMxNCBUagotMjUgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZXIpIDYuMTkyNzcgVGoKLTQwIFRKbQotKCwpIDEuOTkyNTMgVGoKLS0zMDcgVEptCi0oSSkgMi42NTQwNCBUagotLTI5NSBUSm0KLShkbykgNy45NzAxIFRqCi0tMjk2IFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI5NSBUSm0KLShoYSkgNy41MjM3NyBUagotMjAgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZSkgMy41Mzg3MiBUagotLTI5NiBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yOTUgVEptCi0ocmVzb3VyY2VzKSAzMC4wOTUxIFRqCi0tMjk2IFRKbQotKHRvKSA2LjIwMDc0IFRqCi03MiA0NDMuNjUyIFRkCi0oY2FycnkpIDE2LjM3MDYgVGoKLS0yNTAgVEptCi0ob3V0KSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKGEpIDMuNTM4NzIgVGoKLS0yNTAgVEptCi0ocGF0ZW50KSAxOS40Nzg5IFRqCi0tMjUwIFRKbQotKHNlYXJjaC4pIDIyLjM0ODIgVGoKLS02MjAgVEptCi0oVGhlcmVmb3JlKSAzMS40MTgxIFRqCi0tMjUwIFRKbQotKEkpIDIuNjU0MDQgVGoKLS0yNTAgVEptCi0oY2Fubm90KSAyMS4yNDgzIFRqCi0tMjUwIFRKbQotKGdpKSA2LjIwMDc0IFRqCi0yNSBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlKSAzLjUzODcyIFRqCi0tMjUwIFRKbQotKGFuKSA3LjUyMzc3IFRqCi0xNSBUSm0KLSh5KSAzLjk4NTA1IFRqCi0tMjUwIFRKbQotKGd1YXJhbnRlZSkgMzAuOTc5OCBUagotLTI1MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0oYWJvKSAxMS41MDg4IFRqCi0xNSBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlKSAzLjUzODcyIFRqCi0tMjUwIFRKbQotKHN0YXRlbWVudC4pIDMyLjU0MTkgVGoKLVsxIDAgMCAxIDcyIDQ0MS45MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zOTEuMDc0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDYuNzk5MyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ljc5OTMgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMgMwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzA3LjQ0MSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oVCkgMTAuNTE4NiBUagotODAgVEptCi0oYWIpIDIwLjA5MDQgVGoKLTEwIFRKbQotKGxlKSAxNC4zNTc2IFRqCi0tMjc4IFRKbQotKG9mKSAxNi4yNTEzIFRqCi0tMjc4IFRKbQotKENvbnRlbnRzKSA3NC41OTQzIFRqCi1bMSAwIDAgMSA3MiA2OTguNjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzQwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjg2Ljg3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjg2Ljg3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxLikgNy40NzE5NSBUagotLTMxMCBUSm0KLShJbnRyb2R1Y3Rpb24pIDQ5LjI1NTEgVGoKLVsxIDAgMCAxIDEzMS44MTUgNjg2Ljg3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM2Ljc5NiAtNjg2Ljg3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ1LjczMyA2ODYuODc5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2ODYuODc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTY4Ni44NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjg2Ljg3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2ODYuODc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc0LjkyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc0LjkyMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLikgNy40NzE5NSBUagotLTMxMCBUSm0KLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDE1Mi4zMTggNjc0LjkyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU3LjMgLTY3NC45MjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4wNTQgNjc0LjkyMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDY3NC45MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjc0LjkyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2NzQuOTIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDY3NC45MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2Mi45NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY2Mi45NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShOKSA3LjE5MyBUagotMzUgVEptCi0oQU1FKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxMTkuMDE0IDY2Mi45NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMy45OTUgLTY2Mi45NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMi42OTEgNjYyLjk2OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjYyLjk2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02NjIuOTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDY2Mi45NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjYyLjk2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY1MS4wMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1MS4wMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShTWU5PUFNJUykgNDcuMDUzNCBUagotWzEgMCAwIDEgMTM3LjA4NSA2NTEuMDEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDIuMDY3IC02NTEuMDEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuNTgyIDY1MS4wMTMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjUxLjAxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02NTEuMDEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDY1MS4wMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjUxLjAxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzOS4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzOS4wNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShERVNDUklQVElPTikgNjQuNzU2OSBUagotWzEgMCAwIDEgMTU0Ljc4OSA2MzkuMDU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNzcgLTYzOS4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OC4yOSA2MzkuMDU4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjM5LjA1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MzkuMDU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYzOS4wNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjM5LjA1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyNy4xMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyNy4xMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShPUFRJT05TKSA0Mi4wNjIxIFRqCi1bMSAwIDAgMSAxMzIuMDk0IDYyNy4xMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy4wNzYgLTYyNy4xMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NS44NzMgNjI3LjEwMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjI3LjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MjcuMTAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYyNy4xMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjI3LjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxNS4xNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxNS4xNDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShNRU1PUikgMzcuNjM4NyBUagotNjUgVEptCi0oWSkgNy4xOTMgVGoKLS0yNTAgVEptCi0oTUFOKSAyMy4yNDI3IFRqCi0zNSBUSm0KLShBKSA3LjE5MyBUagotNDAgVEptCi0oR0VNRU5UKSA0MS41MDQyIFRqCi1bMSAwIDAgMSAyMDcuOSA2MTUuMTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuODgxIC02MTUuMTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuNDEyIDYxNS4xNDcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MTUuMTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYxNS4xNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjE1LjE0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg1KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MTUuMTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAzLjE5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjAzLjE5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjYuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFJFQ08pIDI2LjU3MDMgVGoKLTUwIFRKbQotKFZFUklORykgMzcuNjI4NyBUagotLTI1MCBUSm0KLShEKSA3LjE5MyBUagotNDAgVEptCi0oQSkgNy4xOTMgVGoKLTExMSBUSm0KLShUKSA2LjA4NzE1IFRqCi05MyBUSm0KLShBKSA3LjE5MyBUagotLTI1MCBUSm0KLShGUikgMTIuMTg0MyBUagotNDAgVEptCi0oT00pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oRCkgNy4xOTMgVGoKLTQwIFRKbQotKEFNQSkgMjMuMjQyNyBUagotNDAgVEptCi0oR0VEKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKEZJTEVTKSAyNi41NzAzIFRqCi1bMSAwIDAgMSAyOTMuNDQ5IDYwMy4xOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OC40MyAtNjAzLjE5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4LjQ2NCA2MDMuMTkyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDYwMy4xOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjAzLjE5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2MDMuMTkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDYpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDYwMy4xOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTEuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTEuMjM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUEVSRk9STUFOQ0UpIDczLjYyMzYgVGoKLS0yNTAgVEptCi0oTk8pIDE0LjM4NiBUagotNDAgVEptCi0oVEVTKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxOTcuODQ3IDU5MS4yMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi44MjkgLTU5MS4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMS45NTggNTkxLjIzNyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTkxLjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01OTEuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU5MS4yMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTkxLjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3OS4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3OS4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi44LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShDQSkgMTMuODM4MSBUagotMTM1IFRKbQotKFZFQSkgMjAuNDczMSBUagotMTExIFRKbQotKFRTKSAxMS42MjY0IFRqCi1bMSAwIDAgMSAxMzMuNTE5IDU3OS4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC41IC01NzkuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDguNzk5IDU3OS4yODIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTc5LjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NzkuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU3OS4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTc5LjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Ny4zMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2Ny4zMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi45LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShBKSA3LjE5MyBUagotNTUgVEptCi0oVVRIT1IpIDM0LjMxMTIgVGoKLVsxIDAgMCAxIDEzMC45ODkgNTY3LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1Ljk3IC01NjcuMzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDUuMzIgNTY3LjMyNyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTY3LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NjcuMzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU2Ny4zMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTY3LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjczNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTU1LjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU1LjM3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLikgNy40NzE5NSBUagotLTMxMCBUSm0KLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxNjAuMDQ5IDU1NS4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjA0OSAtNTU1LjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYwLjA0OSA1NTUuMzcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAyMDcuODcgNTU1LjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTUuMzQyIC01NTUuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuODU2IDU1NS4zNzIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU1NS4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTU1LjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1NTUuMzcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDgpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU1NS4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0My40MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0My40MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvcC1sZSkgMjAuNDczMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oc3RydWN0dXJlKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAxNjQuOTIxIDU0My40MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS45MDIgLTU0My40MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3OS45OTcgNTQzLjQxNiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU0My40MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTQzLjQxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1NDMuNDE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDgpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU0My40MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzMS40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUzMS40NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLjEuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKExvKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShzdW1tYXJ5KSAzNy4wODA4IFRqCi1bMSAwIDAgMSAxNzcuMzc0IDUzMS40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4Mi4zNTUgLTUzMS40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Mi44NjYgNTMxLjQ2MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDUzMS40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTMxLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1MzEuNDYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDUzMS40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxOS41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUxOS41MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLjIuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKEhpZ2gtbGUpIDMwLjQzNTcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHN1bW1hcnkpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE3OS4yODcgNTE5LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg0LjI2OCAtNTE5LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkzLjgyMiA1MTkuNTA2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTE5LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01MTkuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDUxOS41MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTE5LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTA3LjU1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTA3LjU1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMy4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oVXRpbGl0eSkgMjYuMDIyMyBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oc3VtbWFyeSkgMzcuMDgwOCBUagotWzEgMCAwIDEgMjAyLjY2OSA1MDcuNTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDcuNjUgLTUwNy41NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi41ODIgNTA3LjU1MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1MDcuNTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTUwNy41NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTA3LjU1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1MDcuNTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00OTUuNTk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTUuNTk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oRXJyb3IpIDIxLjAyMTEgVGoKLS0yNTAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLVsxIDAgMCAxIDE0OC40MTMgNDk1LjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUzLjM5NCAtNDk1LjU5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYyLjYxMSA0OTUuNTk2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDk1LjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00OTUuNTk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ5NS41OTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTApIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ5NS41OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4My42NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4My42NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShMbykgMTEuMDY4NCBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotWzEgMCAwIDEgMTY3LjU3MSA0ODMuNjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuNTUyIC00ODMuNjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODEuMDQ1IDQ4My42NDEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ4My42NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDgzLjY0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0ODMuNjQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDExKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0ODMuNjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDcxLjY4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDcxLjY4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuMS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDcxLjY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NzEuNjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ3MS42ODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyMDUuMTAxIDQ3MS42ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC4wODIgLTQ3MS42ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxOS43MzYgNDcxLjY4NSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDcxLjY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NzEuNjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ3MS42ODUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ3MS42ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1OS43M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDU5LjczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NTkuNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDU5LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ1OS43MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTgxLjE5IDQ1OS43M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg2LjE3MiAtNDU5LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQuNDk3IDQ1OS43MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDU5LjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ1OS43M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NTkuNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ1OS43M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ3Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDQ3Ljc3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuMy4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NDcuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ0Ny43NzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE5OS4xMjMgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjEwNSAtNDQ3Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE0LjUzMyA0NDcuNzc1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NDcuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ0Ny43NzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTYpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ0Ny43NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNS44Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM1LjgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy40LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MzUuODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDM1LjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQzNS44MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgMjE3LjA1NiA0MzUuODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMi4wMzcgLTQzNS44Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMyLjM1NSA0MzUuODIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQzNS44Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MzUuODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDM1LjgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0MzUuODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQyMy44NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyMy44NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjUuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQyMy44NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDIzLjg2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA0MjMuODY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgMTkzLjE0NiA0MjMuODY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTguMTI3IC00MjMuODY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMTE2IDQyMy44NjUgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQyMy44NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDIzLjg2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0MjMuODY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0MjMuODY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTEuOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQxMS45MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDExLjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQxMS45MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA0MTEuOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMjExLjA3OCA0MTEuOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi4wNiAtNDExLjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuOTM4IDQxMS45MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0MTEuOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDExLjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQxMS45MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDExLjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTkuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTkuOTU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oSGlnaC1sZSkgMzAuNDM1NyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotWzEgMCAwIDEgMTY5LjQ4MyAzOTkuOTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzQuNDY1IC0zOTkuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODQuMjE2IDM5OS45NTQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzk5Ljk1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zOTkuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM5OS45NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM5OS45NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM4Ny45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4Ny45OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjEuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM4Ny45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzg3Ljk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzODcuOTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxODEuMTkgMzg3Ljk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg2LjE3MiAtMzg3Ljk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk0LjQ5NyAzODcuOTk5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzODcuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM4Ny45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzg3Ljk5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzg3Ljk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc2LjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc2LjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzc2LjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zNzYuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDM3Ni4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTU3LjI4IDM3Ni4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Mi4yNjEgLTM3Ni4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MS40NzIgMzc2LjA0NCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNzYuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM3Ni4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzc2LjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzc2LjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjQuMDg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjQuMDg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNjQuMDg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM2NC4wODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzY0LjA4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAyMTEuMDc4IDM2NC4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi4wNiAtMzY0LjA4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI0LjkzOCAzNjQuMDg5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM2NC4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzY0LjA4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNjQuMDg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNjQuMDg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1Mi4xMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1Mi4xMzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjQuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM1Mi4xMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzUyLjEzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzNTIuMTM0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMTg3LjE2OCAzNTIuMTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuMTQ5IC0zNTIuMTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuOTE0IDM1Mi4xMzQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNTIuMTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM1Mi4xMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzUyLjEzNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzUyLjEzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDAuMTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNDAuMTc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC41LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNDAuMTc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM0MC4xNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzQwLjE3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4Ny4xNjggMzQwLjE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjE0OSAtMzQwLjE3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjkxNCAzNDAuMTc5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzQwLjE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zNDAuMTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM0MC4xNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM0MC4xNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMyOC4yMjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMyOC4yMjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjYuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzI4LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzMjguMjIzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxNjMuMjU4IDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OC4yMzkgLTMyOC4yMjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni42NzUgMzI4LjIyMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzI4LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMjguMjIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMjguMjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxNi4yNjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxNi4yNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjcuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDMxNi4yNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzE2LjI2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzMTYuMjY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMTkzLjE0NiAzMTYuMjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTguMTI3IC0zMTYuMjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMTE2IDMxNi4yNjggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMxNi4yNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzE2LjI2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMTYuMjY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMTYuMjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwNC4zMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMwNC4zMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjguKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKEhhbmRsaW5nKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKGVtYmVkZGVkKSA0MC45NDYzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShzdHJlYW1zKSAzMC40MzU3IFRqCi1bMSAwIDAgMSAyNzkuNTYgMzA0LjMxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg0LjU0MSAtMzA0LjMxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjYwMSAzMDQuMzEzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzA0LjMxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zMDQuMzEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDMwNC4zMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjQpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDMwNC4zMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI5Mi4zNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5Mi4zNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjkuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKFN0YW5kYXJkKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oXDAwMmxlLXJlYWRpbmcvd3JpdGluZykgNzcuNDc5MSBUagotLTI1MCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi1bMSAwIDAgMSAyMzQuMTkgMjkyLjM1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM5LjE3MiAtMjkyLjM1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ3LjU2NCAyOTIuMzU4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyOTIuMzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI5Mi4zNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjkyLjM1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjkyLjM1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjgwLjQwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjgwLjQwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFV0aWxpdHkpIDI2LjAyMjMgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi1bMSAwIDAgMSAxNTUuNjI1IDI4MC40MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MC42MDcgLTI4MC40MDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MC42NDUgMjgwLjQwMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyODAuNDAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI4MC40MDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjgwLjQwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjgwLjQwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY4LjQ0OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjY4LjQ0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuMS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMjY4LjQ0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0yNjguNDQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDI2OC40NDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzKSAxNDMuNDYxIFRqCi1bMSAwIDAgMSAyNDAuOTY2IDI2OC40NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS45NDggLTI2OC40NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NS4zOCAyNjguNDQ4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjY4LjQ0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yNjguNDQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDI2OC40NDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjYpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDI2OC40NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1Ni40OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1Ni40OTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy41LjIuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMjU2LjQ5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAyNTYuNDkyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSAyNTIuOTIyIDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ny45MDMgLTI1Ni40OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ny45OTkgMjU2LjQ5MiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMjU2LjQ5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAyNTYuNDkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAyNTYuNDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNDQuNTM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNi4pIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDkwLjAzMjQgMjQ0LjUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MC4wMzI0IC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MC4wMzI0IDI0NC41MzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oemxpYikgMjMuOTEwMiBUagotWzEgMCAwIDEgMTEzLjk0MyAyNDQuNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy45NDMgLTI0NC41MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNi40MzMgMjQ0LjUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wYXRpYmlsaXR5KSA1My4xNDA1IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotWzEgMCAwIDEgMjA5LjE0NCAyNDQuNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTQuMTI2IC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjMuOTcxIDI0NC41MzcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjQ0LjUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDI0NC41MzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDI0NC41MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzMi41ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIzMi41ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy43LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShVc2luZykgMjMuODAwNyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDE3Ny4xOTUgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzcuMTk1IC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzcuMTk1IDIzMi41ODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIwNy4wODMgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDcuMDgzIC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMDgzIDIzMi41ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLWZyZWUpIDE4Ljc5OTQgVGoKLS0yNTAgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudCkgNDAuOTU2MiBUagotWzEgMCAwIDEgMjc4LjMzNSAyMzIuNTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODMuMzE2IC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTEuNzc1IDIzMi41ODIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDIzMi41ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDIzMi41ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIyMC42MjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyMC42MjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy43LjEuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKEdldHRpbmcpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0ocmlkKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxNTQuMjMxIDIyMC42MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU0LjIzMSAtMjIwLjYyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU0LjIzMSAyMjAuNjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0ZGlvKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxODQuMTE5IDIyMC42MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OS4xIC0yMjAuNjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTguMTc1IDIyMC42MjcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjIwLjYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yMjAuNjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDIyMC42MjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjkpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDIyMC42MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwOC42NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIwOC42NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy43LjIuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKENyaXRpY2FsKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKGhhbmRsaW5nKSAzNC44NjkxIFRqCi1bMSAwIDAgMSAxODYuNTk5IDIwOC42NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MS41OCAtMjA4LjY3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjYyOSAyMDguNjcyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjA4LjY3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yMDguNjcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDIwOC42NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjkpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDIwOC42NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE5Ni43MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5Ni43MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy44LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShNYWtpbmcpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTI1MCBUSm0KLShETEwpIDE5LjM2NzMgVGoKLVsxIDAgMCAxIDE4OS44MjggMTk2LjcxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk0LjgwOSAtMTk2LjcxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAzLjI0MyAxOTYuNzE3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMTk2LjcxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0xOTYuNzE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDE5Ni43MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjkpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDE5Ni43MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4NC43NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE4NC43NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4pIDcuNDcxOTUgVGoKLS0zMTAgVEptCi0oTWlzY2VsbGFuZWEpIDQ4LjEzOTMgVGoKLVsxIDAgMCAxIDEzMC42OTkgMTg0Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1LjY4IC0xODQuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDQuODk4IDE4NC43NjEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMTg0Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0xODQuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDE4NC43NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDE4NC43NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzIuODA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzIuODA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oTGltaXRhdGlvbnMpIDQ1Ljk0NzUgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGZvcm1hdCkgMjYuNTYwMyBUagotWzEgMCAwIDEgMjU1LjIzMSAxNzIuODA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjAuMjEyIC0xNzIuODA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjkuMTU0IDE3Mi44MDYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxNzIuODA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTE3Mi44MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTcyLjgwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTcyLjgwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTYwLjg1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTYwLjg1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjIuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFBvcnRhYmlsaXR5KSA0Mi4wNzIxIFRqCi0tMjUwIFRKbQotKGlzc3VlcykgMjMuODAwNyBUagotWzEgMCAwIDEgMTU4LjM5NSAxNjAuODUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuMzc2IC0xNjAuODUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMDMgMTYwLjg1MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxNjAuODUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTE2MC44NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTYwLjg1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTYwLjg1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ4Ljg5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTQ4Ljg5NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFJlcG9ydGluZykgMzkuODUwNCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVncykgMTMuODM4MSBUagotWzEgMCAwIDEgMTUwLjk5MyAxNDguODk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuOTc1IC0xNDguODk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuMTE1IDE0OC44OTYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDE0OC44OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTQ4Ljg5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxNDguODk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxNDguODk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzYuOTQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMzYuOTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuNC4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oRGlkKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJpZ2h0KSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKHBhY2thZ2U/KSAzNy4wNjA5IFRqCi1bMSAwIDAgMSAyMTIuNjAyIDEzNi45NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDMuMDg4NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOC43NzggLTEzNi45NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOS4xMDkgMTM2Ljk0MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDEzNi45NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTM2Ljk0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxMzYuOTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxMzYuOTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjQuOTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjQuOTg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuNS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oRnVydGhlcikgMjkuMzI5OSBUagotLTI1MCBUSm0KLShSZWFkaW5nKSAzMy4yMDUzIFRqCi1bMSAwIDAgMSAxNTUuMDU4IDEyNC45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MC4wMzkgLTEyNC45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MC4zNjEgMTI0Ljk4NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxMjQuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTEyNC45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTI0Ljk4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTI0Ljk4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTYyLjAxNDNdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQxLjM5OTcgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTQuNjY4IC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzYuMDY4IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaWlpKSA4LjMwODgxIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA0IDQKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTEzLjk0NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwMS45MTYgVGQKLS9GMTIyXzAgMjQuNzkwMiBUZgotKDEuKSAyMC42NzUgVGoKLS0yNzggVEptCi0oSW50cikgMzkuOTM3IFRqCi0yMCBUSm0KLShvZHVjdGlvbikgMTA0LjY2NCBUagotWzEgMCAwIDEgNzIgNzAxLjYwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjkxLjY0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc5Ljk5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2NzkuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTY3OS45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC41MDcgNjc5Ljk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wcmVzc2VzKSA0NS45Mjc2IFRqCi0tMjYzIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNjMgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI2MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjIgVEptCi0oQnVycm8pIDIzLjI0MjcgVGoKLTI1IFRKbQotKHdzLVdoZWVsZXIpIDQ4LjEyOTMgVGoKLS0yNjMgVEptCi0oYmxvY2stc29ydGluZykgNTMuMTMwNSBUagotLTI2MyBUSm0KLSh0ZSkgNy4xOTMgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNjMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNjMgVEptCi0oYWxnb3JpdGhtLCkgNDEuMjM1MiBUagotLTI2NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2MyBUSm0KLShIdWYpIDE1LjQ5MTggVGoKLTI1IFRKbQotKGZtYW4pIDIwLjQ3MzEgVGoKLS0yNjMgVEptCi0oY29kaW5nLikgMjkuNjA4OCBUagotNzIgNjY4LjA0MyBUZAotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjA0IFRKbQotKGdlbmVyYWxseSkgMzcuMDcwOCBUagotLTIwMyBUSm0KLShjb25zaWRlcmFibHkpIDUwLjkwODkgVGoKLS0yMDMgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi0tMjA0IFRKbQotKHQpIDIuNzY5NiBUagotMSBUSm0KLShoYW4pIDE0LjM4NiBUagotLTIwNCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjAzIFRKbQotKGFjaGllKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjAzIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yMDQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTIwMyBUSm0KLShjb24pIDE0LjM4NiBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnRpb25hbCkgMzIuMDk5NSBUagotLTIwMyBUSm0KLShMWjc3L0xaNzgtYmFzZWQpIDczLjA0NTggVGoKLS0yMDQgVEptCi0oY29tcHJlc3NvcnMsKSA1Mi4yOTM3IFRqCi03MiA2NTYuMDg3IFRkCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oYXBwcm9hY2hlcykgNDQuODExOCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocGVyZm9ybWFuY2UpIDUwLjM0MSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oUFBNKSAxOS45MzUyIFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFtaWx5KSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHN0YXRpc3RpY2FsKSAzNy42Mzg3IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzb3JzLikgNTIuMjkzNyBUagotWzEgMCAwIDEgNzIgNjUzLjkzMV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjQzLjk2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM0LjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNS4wNzMgNjM0LjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzIwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsdCkgMTMuMjkwMSBUagotLTMxOSBUSm0KLShvbikgOS45NjI2IFRqCi0tMzIwIFRKbQotKHRvcCkgMTIuNzMyMiBUagotLTMyMCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTc2LjcxMiA2MzQuMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjcxMiAtNjM0LjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzYuNzEyIDYzNC4xNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMjI0LjUzMyA2MzQuMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI0LjUzMyAtNjM0LjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuNTMzIDYzNC4xNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzM3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMjAgVEptCi0oXDAwM2UpIDkuOTYyNiBUagotMTUgVEptCi0oeGlibGUpIDE5LjkyNTIgVGoKLS0zMjAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMxOSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMjAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLS0zMjAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMyMCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzE5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0NDkuODE2IDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDkuODE2IC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OS44MTYgNjM0LjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NzkuNzA0IDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzkuNzA0IC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi44ODkgNjM0LjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdC4pIDI5LjA1MDkgVGoKLS0xMDM5IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLTcyIDYyMi4yMTQgVGQKLShtYW51YWwpIDI5LjMyOTkgVGoKLS0zMTYgVEptCi0oZGVzY3JpYmVzKSAzNy4wNzA4IFRqCi0tMzE2IFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0zMTcgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMTYgVEptCi0odG8pIDcuNzUwOSBUagotLTMxNiBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zMTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE2IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0zMTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMTcgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMTYgVEptCi0odG8pIDcuNzUwOSBUagotLTMxNiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMzE2IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE3IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zMTYgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZS4pIDE1Ljc2MDggVGoKLS0xMDE3IFRKbQotKE1vc3QpIDIwLjQ4MzEgVGoKLS0zMTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE3IFRKbQotKG1hbnVhbCkgMjkuMzI5OSBUagotLTMxNiBUSm0KLShpcykgNi42NDUwNSBUagotNzIgNjEwLjI1OSBUZAotKGRlKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG90ZWQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2dyYW0sKSAzNi4yNDM5IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGdvb2QpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oaW50ZXJlc3QpIDI5LjMyOTkgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ncmFtLikgMzYuMjQzOSBUagotWzEgMCAwIDEgNzIgNjA4LjEwMl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjcyMzZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01NzguMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDU3OC4zNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1NzguMzc5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1NzguMzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEhvKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1OSBUSm0KLShiemlwMikgMjIuMTM2OSBUagotWzEgMCAwIDEgMTU2Ljk4NSA1NzguMzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTE1Ni45ODUgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS41NyA1NzguMzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFsyXSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMTcxLjE4NiA1NzguMzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3MS4xODYgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3My43NzEgNTc4LjM3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZXNjcmliZXMpIDM3LjA3MDggVGoKLS0yNTkgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNjAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1OSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI1OS4xMTkgNTc4LjM3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTkuMTE5IC01NzguMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTkuMTE5IDU3OC4zNzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI4OS4wMDcgNTc4LjM3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODkuMDA3IC01NzguMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuMDA3IDU3OC4zNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOykgMi43Njk2IFRqCi0tMjY0IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1OSBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjU5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjU5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjAgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI1OSBUSm0KLShpZikgNi4wODcxNSBUagotLTI2MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTkgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjYwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTkgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MCBUSm0KLShrbm8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi04Ni45NDQgNTY2LjQyNCBUZAotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ob3BlcmF0ZSkgMjkuMzE5OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbS4pIDM2LjI0MzkgVGoKLVsxIDAgMCAxIDE5OS4zMDIgNTY2LjQyNF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMjcuMzAyIC0yMS45MTc4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNTQ0LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA1NDQuNTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNTQ0LjUwNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC01NDQuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNTQ0LjUwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGxpYmJ6aXAyKSAzMi42NTc0IFRqCi1bMSAwIDAgMSAxOTcuMDkgNTQ0LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xOTcuMDkgLTU0NC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OS41OCA1NDQuNTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFs4XSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMjExLjE5NyA1NDQuNTA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMS4xOTcgLTU0NC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMy42ODcgNTQ0LjUwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZXNjcmliZXMpIDM3LjA3MDggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2dyYW1taW5nKSA1NC4yMzY0IFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2VzKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZGV0YWlsLCkgMjQuNjI3NSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDE3LjUwMSA1NDQuNTA2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTM0NS41MDEgLTIxLjkxNzhdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01MjIuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDUyMi41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1MjIuNTg4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTUyMi41ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1MjIuNTg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1pc2NlbGxhbmVhKSA0OC4xMzkzIFRqCi1bMSAwIDAgMSAxMzUuMDgzIDUyMi41ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMTM1LjA4MyAtNTIyLjU4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3LjU3MyA1MjIuNTg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFszMV0pIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDE1NC4xNzEgNTIyLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTQuMTcxIC01MjIuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTYuNjYyIDUyMi41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmVjb3JkcykgMjkuMzE5OSBUagotLTI1MCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0obWlzY2VsbGFuZW91cykgNTYuNDQ4MSBUagotLTI1MCBUSm0KLShub3RlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0odGhvdWdodCkgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShvdWdodCkgMjIuNjk0OCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHJlY29yZGVkKSAzNC44NDkyIFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotMjUgVEptCi0od2hlcmUuKSAyNi44MjkzIFRqCi1bMSAwIDAgMSA0OTIuMzEgNTIyLjU4OF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00MjAuMzEgLTQ3MS43MzZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMSkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA1IDUKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTEzLjk0NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwMS45MTYgVGQKLS9GMTIyXzAgMjQuNzkwMiBUZgotKDIuKSAyMC42NzUgVGoKLS0yNzggVEptCi0oSG8pIDMzLjA0NTMgVGoKLTE1IFRKbQotKHcpIDE5LjI4NjggVGoKLS0yNzggVEptCi0odG8pIDIzLjQwMTkgVGoKLS0yNzggVEptCi0odXNlKSA0Mi43MTM1IFRqCi0tMjc4IFRKbQotKGJ6aXAyKSA2My4zNjM4IFRqCi1bMSAwIDAgMSA3MiA2OTYuNzg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQuOTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTYuMzUgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKFQpIDEwLjUxODYgVGoKLTgwIFRKbQotKGFiKSAyMC4wOTA0IFRqCi0xMCBUSm0KLShsZSkgMTQuMzU3NiBUagotLTI3OCBUSm0KLShvZikgMTYuMjUxMyBUagotLTI3OCBUSm0KLShDb250ZW50cykgNzQuNTk0MyBUagotWzEgMCAwIDEgNzIgNjQ3LjUyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjc0MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNS43ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzNS43ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShOKSA3LjE5MyBUagotMzUgVEptCi0oQU1FKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxMTkuMDE0IDYzNS43ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMy45OTUgLTYzNS43ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMi42OTEgNjM1Ljc4OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MzUuNzg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYzNS43ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMy44MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyMy44MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShTWU5PUFNJUykgNDcuMDUzNCBUagotWzEgMCAwIDEgMTM3LjA4NSA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDIuMDY3IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuNTgyIDYyMy44MzIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYyMy44MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxMS44NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShERVNDUklQVElPTikgNjQuNzU2OSBUagotWzEgMCAwIDEgMTU0Ljc4OSA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNzcgLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OC4yOSA2MTEuODc3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjExLjg3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MTEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYxMS44NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjExLjg3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5OS45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5OS45MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShPUFRJT05TKSA0Mi4wNjIxIFRqCi1bMSAwIDAgMSAxMzIuMDk0IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy4wNzYgLTU5OS45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NS44NzMgNTk5LjkyMiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01OTkuOTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU5OS45MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4Ny45NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShNRU1PUikgMzcuNjM4NyBUagotNjUgVEptCi0oWSkgNy4xOTMgVGoKLS0yNTAgVEptCi0oTUFOKSAyMy4yNDI3IFRqCi0zNSBUSm0KLShBKSA3LjE5MyBUagotNDAgVEptCi0oR0VNRU5UKSA0MS41MDQyIFRqCi1bMSAwIDAgMSAyMDcuOSA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuODgxIC01ODcuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuNDEyIDU4Ny45NjcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTg3Ljk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg1KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc2LjAxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjYuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFJFQ08pIDI2LjU3MDMgVGoKLTUwIFRKbQotKFZFUklORykgMzcuNjI4NyBUagotLTI1MCBUSm0KLShEKSA3LjE5MyBUagotNDAgVEptCi0oQSkgNy4xOTMgVGoKLTExMSBUSm0KLShUKSA2LjA4NzE1IFRqCi05MyBUSm0KLShBKSA3LjE5MyBUagotLTI1MCBUSm0KLShGUikgMTIuMTg0MyBUagotNDAgVEptCi0oT00pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oRCkgNy4xOTMgVGoKLTQwIFRKbQotKEFNQSkgMjMuMjQyNyBUagotNDAgVEptCi0oR0VEKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKEZJTEVTKSAyNi41NzAzIFRqCi1bMSAwIDAgMSAyOTMuNDQ5IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OC40MyAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4LjQ2NCA1NzYuMDEyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1NzYuMDEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDYpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjQuMDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUEVSRk9STUFOQ0UpIDczLjYyMzYgVGoKLS0yNTAgVEptCi0oTk8pIDE0LjM4NiBUagotNDAgVEptCi0oVEVTKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxOTcuODQ3IDU2NC4wNTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi44MjkgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMS45NTggNTY0LjA1NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU2NC4wNTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU1Mi4xMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU1Mi4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi44LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShDQSkgMTMuODM4MSBUagotMTM1IFRKbQotKFZFQSkgMjAuNDczMSBUagotMTExIFRKbQotKFRTKSAxMS42MjY0IFRqCi1bMSAwIDAgMSAxMzMuNTE5IDU1Mi4xMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC41IC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDguNzk5IDU1Mi4xMDEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU1Mi4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0MC4xNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi45LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShBKSA3LjE5MyBUagotNTUgVEptCi0oVVRIT1IpIDM0LjMxMTIgVGoKLVsxIDAgMCAxIDEzMC45ODkgNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1Ljk3IC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDUuMzIgNTQwLjE0NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU0MC4xNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTIwLjAwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTA4LjI2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGNoYXB0ZXIpIDI5LjMxOTkgVGoKLS0yNTAgVEptCi0oY29udGFpbnMpIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb3ApIDE0LjM4NiBUagotMTAgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMjEzLjgzNyA1MDguMjY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMy44MzcgLTUwOC4yNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMy44MzcgNTA4LjI2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjQzLjcyNSA1MDguMjY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My43MjUgLTUwOC4yNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Ni4yMTUgNTA4LjI2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtYW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ocGFnZSwpIDIxLjMgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0obm90aGluZykgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShlbHNlLikgMTcuOTgyNSBUagotWzEgMCAwIDEgNzIgNTA2LjEwOV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDk2LjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDczLjUxMyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi4xLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShOQU1FKSA2MC44MTg2IFRqCi1bMSAwIDAgMSA3MiA0NzMuNTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzEuODgwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTQ0MS42MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNDQxLjYzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDQ0MS42MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNDQxLjYzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDQ0MS42MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgNDQxLjYzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC00NDEuNjMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuODMyIDQ0MS42MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTIxLjgxMyA0NDEuNjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMS44MTMgLTQ0MS42MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMS44MTMgNDQxLjYzMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxNjMuNjU2IDQ0MS42MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYzLjY1NiAtNDQxLjYzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY2LjE0NyA0NDEuNjMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC0pIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShibG9jay1zb3J0aW5nKSA1My4xMzA1IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShjb21wcmVzc29yKSA0NS45Mjc2IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHYxLjAuNCkgMjQuOTA2NSBUagotWzEgMCAwIDEgMzI1LjEyOSA0NDEuNjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My4xMjkgLTIxLjkxNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC00MTkuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDQxOS43MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA0MTkuNzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTQxOS43MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA0MTkuNzE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6Y2F0KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMTYuODMyIDQxOS43MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE2LjgzMiAtNDE5LjcxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5LjMyMiA0MTkuNzE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC0pIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2VzKSA1NS4zMzIzIFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdGRvdXQpIDI0LjM1ODYgVGoKLVsxIDAgMCAxIDIzNi42NTEgNDE5LjcxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUxIC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzk3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzOTcuNzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzk3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zOTcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzk3Ljc5NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE1OC42NzUgMzk3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNjc1IC0zOTcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMTY2IDM5Ny43OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVycykgMTEuNjE2NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oZGFtYWdlZCkgMzUuOTY1IFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLVsxIDAgMCAxIDMyMy41NDUgMzk3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTEuNTQ1IC0xMi4xMTk1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzUuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTMuMDgxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjIuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFNZTk9QU0lTKSAxMDUuNjI3IFRqCi1bMSAwIDAgMSA3MiAzNTIuODIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzEuNjIyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTMyMS4yMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMzIxLjIwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDMyMS4yMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMzIxLjIwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDMyMS4yMDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgMzIxLjIwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC0zMjEuMjAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuMzIyIDMyMS4yMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWykgMy4zMTc1NSBUagotLTI1MCBUSm0KLSgtY2Rma3FzdHZ6VkwxMjM0NTY3ODkpIDEwMC4xNjQgVGoKLS0yNTAgVEptCi0oXSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKC4uLikgNy40NzE5NSBUagotLTYyMCBUSm0KLShdKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAyOTcuMDQ1IDMyMS4yMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI1LjA0NSAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTI5OS4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMjk5LjI4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDI5OS4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMjk5LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI5OS4yODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMTI4Ljc4NyAyOTkuMjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyOC43ODcgLTI5OS4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMS4yNzggMjk5LjI4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKC1ma3ZzVkwpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0oXSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKC4uLikgNy40NzE5NSBUagotLTYyMCBUSm0KLShdKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAyNDIuNTg5IDI5OS4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcwLjU4OSAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTI3Ny4zNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMjc3LjM2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDI3Ny4zNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMjc3LjM2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI3Ny4zNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpjYXQpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgMjc3LjM2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC0yNzcuMzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuMzIyIDI3Ny4zNjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWykgMy4zMTc1NSBUagotLTI1MCBUSm0KLSgtcykgNy4xOTMgVGoKLS0yNTAgVEptCi0oXSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKC4uLikgNy40NzE5NSBUagotLTYyMCBUSm0KLShdKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAyMDQuMDc0IDI3Ny4zNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMyLjA3NCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTI1NS40NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMjU1LjQ0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDI1NS40NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMjU1LjQ0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI1NS40NDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNTguNjc1IDI1NS40NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjY3NSAtMjU1LjQ0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjE2NiAyNTUuNDQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZW5hbWUpIDM0LjMxMTIgVGoKLVsxIDAgMCAxIDE5NS40NzYgMjU1LjQ0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjMuNDc3IC0yMDQuNTk2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuODUxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC44NTE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogNiA2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MDQuOTMgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuMy4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oREVTQ1JJUFRJT04pIDE0MS4xOCBUagotWzEgMCAwIDEgNzIgNzA0LjY3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjk0LjcwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjgzLjAxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2ODMuMDEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTY4My4wMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC41NiA2ODMuMDEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0yNjggVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI2OCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2OSBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MtV2hlZWxlcikgNDguMTI5MyBUagotLTI2OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI2OCBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjY4IFRKbQotKHRlKSA3LjE5MyBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI2OCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI2OCBUSm0KLShhbGdvcml0aG0sKSA0MS4yMzUyIFRqCi0tMjczIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY4IFRKbQotKEh1ZikgMTUuNDkxOCBUagotMjUgVEptCi0oZm1hbikgMjAuNDczMSBUagotLTI2OSBUSm0KLShjKSA0LjQyMzM5IFRqCi0xIFRKbQotKG9kKSA5Ljk2MjYgVGoKLS0xIFRKbQotKGkpIDIuNzY5NiBUagotMSBUSm0KLShuZy4pIDEyLjQ1MzMgVGoKLTcyIDY3MS4wNTcgVGQKLShDb21wcmVzc2lvbikgNTIuNTgyNiBUagotLTIwMyBUSm0KLShpcykgNi42NDUwNSBUagotLTIwNCBUSm0KLShnZW5lcmFsbHkpIDM3LjA3MDggVGoKLS0yMDMgVEptCi0oY29uc2lkZXJhYmx5KSA1MC45MDg5IFRqCi0tMjAzIFRKbQotKGJldHRlcikgMjIuNjg0OCBUagotLTIwNCBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0oaGFuKSAxNC4zODYgVGoKLS0yMDQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTIwMyBUSm0KLShhY2hpZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlZCkgOS40MDQ2OSBUagotLTIwMyBUSm0KLShieSkgOS45NjI2IFRqCi0tMjA0IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yMDMgVEptCi0oY29uKSAxNC4zODYgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50aW9uYWwpIDMyLjA5OTUgVGoKLS0yMDMgVEptCi0oTFo3Ny9MWjc4LWJhc2VkKSA3My4wNDU4IFRqCi0tMjA0IFRKbQotKGNvbXByZXNzb3JzLCkgNTIuMjkzNyBUagotNzIgNjU5LjEwMSBUZAotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGFwcHJvYWNoZXMpIDQ0LjgxMTggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFBQTSkgMTkuOTM1MiBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbWlseSkgMjIuNjk0OCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShzdGF0aXN0aWNhbCkgMzcuNjM4NyBUagotLTI1MCBUSm0KLShjb21wcmVzc29ycy4pIDUyLjI5MzcgVGoKLVsxIDAgMCAxIDcyIDY1Ni45NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0Ni45ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzNy4xODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGNvbW1hbmQtbGluZSkgNTcuNTUzOSBUagotLTI1MCBUSm0KLShvcHRpb25zKSAyOS4zMzk5IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShkZWxpYmVyYXRlbHkpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yNTAgVEptCi0oc2ltaWxhcikgMjcuNjc2MSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRob3NlKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oR05VKSAyMS41NzkgVGoKLVsxIDAgMCAxIDM2NC44NjkgNjM3LjE4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjQuODY5IC02MzcuMTg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjQuODY5IDYzNy4xODQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ3ppcCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMzg4Ljc3OSA2MzcuMTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OC43NzkgLTYzNy4xODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4OC43NzkgNjM3LjE4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGlkZW50aWNhbC4pIDM2LjgwMTggVGoKLVsxIDAgMCAxIDcyIDYzNS4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyNS4wNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxNS4yNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggNjE1LjI2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC02MTUuMjY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDUuMTc1IDYxNS4yNjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBlY3RzKSAyNS40NTQ0IFRqCi0tMzMwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMzAgVEptCi0obGlzdCkgMTIuMTg0MyBUagotLTMzMCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzMCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zMjkgVEptCi0obmFtZXMpIDI1LjQ1NDQgVGoKLS0zMzAgVEptCi0odG8pIDcuNzUwOSBUagotLTMzMCBUSm0KLShhY2NvbXBhbikgNDAuMzg4NCBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzMwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMCBUSm0KLShjb21tYW5kLWxpbmUpIDU3LjU1MzkgVGoKLS0zMzAgVEptCi0oXDAwM2Fncy4pIDIxLjMxIFRqCi0tMTA5OSBUSm0KLShFYWNoKSAxOS45MTUyIFRqCi0tMzMwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMzMCBUSm0KLShpcykgNi42NDUwNSBUagotLTMzMCBUSm0KLShyZXBsYWNlZCkgMzMuNzQzMyBUagotLTMzMCBUSm0KLShieSkgOS45NjI2IFRqCi0tMzMwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMzAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgNjAzLjMxMSBUZAotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQ4IFRKbQotKGl0c2VsZiwpIDIyLjQxNTkgVGoKLS0zNzMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDkgVEptCi0obmFtZSkgMjEuNTc5IFRqCi1bMSAwIDAgMSAyMDQuNDQ0IDYwMy4zMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ0NCAtNjAzLjMxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ0NCA2MDMuMzExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9yaWdpbmFsX25hbWUuYnoyKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAzMDYuMDYzIDYwMy4zMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA2LjA2MyAtNjAzLjMxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA2LjA2MyA2MDMuMzExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMjEyIFRKbQotKEVhY2gpIDE5LjkxNTIgVGoKLS0zNDggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM0OSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zNDggVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OCBUSm0KLShzYW1lKSAyMC40NzMxIFRqCi0tMzQ5IFRKbQotKG1vZGlcMDAyY2F0aW9uKSA1MC4zNzA5IFRqCi0tMzQ5IFRKbQotKGRhdGUsKSAxOS4wODgzIFRqCi03MiA1OTEuMzU2IFRkCi0ocGVybWlzc2lvbnMsKSA1MC4wOTIgVGoKLS0zNDQgVEptCi0oYW5kLCkgMTYuODc2NiBUagotLTM0NCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0zMjUgVEptCi0ocG9zc2libGUsKSAzNS4xNDgxIFRqCi0tMzQ0IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od25lcnNoaXApIDM2LjUyMjkgVGoKLS0zMjUgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzI2IFRKbQotKGNvcnJlc3BvbmRpbmcpIDU2Ljk5NiBUagotLTMyNSBUSm0KLShvcmlnaW5hbCwpIDMzLjQ4NDMgVGoKLS0zNDQgVEptCi0oc28pIDguODU2NzUgVGoKLS0zMjUgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMyNSBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTMyNSBUSm0KLShwcm9wZXJ0aWVzKSAzOS44NDA0IFRqCi0tMzI1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTMyNiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMyNSBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLTcyIDU3OS40IFRkCi0ocmVzdG9yZWQpIDMyLjA4OTUgVGoKLS0zMDggVEptCi0oYXQpIDcuMTkzIFRqCi0tMzA4IFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0zMDcgVEptCi0odGltZS4pIDIwLjIwNDIgVGoKLS00ODQgVEptCi0oRmlsZSkgMTUuNTAxOCBUagotLTMwOCBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0zMDggVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLS0zMDggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDcgVEptCi0obmFpKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDggVEptCi0oaW4pIDcuNzUwOSBUagotLTMwOCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDggVEptCi0oc2Vuc2UpIDIxLjU3OSBUagotLTMwOCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzA4IFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMzA3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzA4IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zMDggVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMzA4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMwOCBUSm0KLShwcmVzZXJ2aW5nKSA0Mi4wNTIxIFRqCi03MiA1NjcuNDQ1IFRkCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0zMzQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzMzIFRKbQotKG5hbWVzLCkgMjcuOTQ1MSBUagotLTM1NSBUSm0KLShwZXJtaXNzaW9ucywpIDUwLjA5MiBUagotLTM1NSBUSm0KLShvKSA0Ljk4MTMgVGoKLTI1IFRKbQotKHduZXJzaGlwcykgNDAuMzk4MyBUagotLTMzMyBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzNCBUSm0KLShkYXRlcykgMjAuNDczMSBUagotLTMzNCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzMzIFRKbQotKFwwMDJsZXN5c3RlbXMpIDQ0LjI4MzggVGoKLS0zMzQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zMzQgVEptCi0obGFjaykgMTYuNTk3NyBUagotLTMzMyBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTMzNCBUSm0KLShjb25jZXB0cywpIDM3LjM0OTggVGoKLS0zNTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMzMgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMzNCBUSm0KLShzZXJpb3VzKSAyOC4yMjQgVGoKLS0zMzQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi03MiA1NTUuNDkgVGQKLShuYW1lKSAyMS41NzkgVGoKLS0yNTAgVEptCi0obGVuZ3RoKSAyNC45MDY1IFRqCi0tMjUwIFRKbQotKHJlc3RyaWN0aW9ucywpIDQ2Ljc2NDQgVGoKLS0yNTAgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShNUy1ET1MuKSA0MC4xMjk0IFRqCi1bMSAwIDAgMSA3MiA1NTMuMzMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NDMuMzcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MzMuNTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDUzMy41NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtNTMzLjU3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjM3OSA1MzMuNTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxMjEuMjU1IDUzMy41NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIxLjI1NSAtNTMzLjU3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIxLjI1NSA1MzMuNTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDE2My4wOTggNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuMDk4IC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjUuNTg5IDUzMy41NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyd3JpdGUpIDI4LjIxNDEgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotLTI1MCBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTYyMCBUSm0KLShJZikgNi42MzUwOSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShoYXBwZW4sKSAzMS4yNjI2IFRqCi0tMjUwIFRKbQotKHNwZWNpZnkpIDI4Ljc3MiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQ5NS45NzcgNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTUuOTc3IC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTUuOTc3IDUzMy41NzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWYpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDUwNy45MzIgNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDcuOTMyIC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuNDIzIDUzMy41NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwM2FnLikgMTcuNDM0NiBUagotWzEgMCAwIDEgNzIgNTMxLjQxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTIxLjQ1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTExLjY1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI4NCBUSm0KLShubykgOS45NjI2IFRqCi0tMjg1IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4NCBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTI4NCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yODQgVEptCi0oc3BlY2lcMDAyZWQsKSAzNy45MDc3IFRqCi1bMSAwIDAgMSAxOTMuOTM1IDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkzLjkzNSAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkzLjkzNSA1MTEuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMjMuODIzIDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIzLjgyMyAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI2LjY1NSA1MTEuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0yODQgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI4NSBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI4NCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI4NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg0IFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMjg1IFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLS04MjUgVEptCi0oSW4pIDguMjk4ODUgVGoKLS0yODUgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg0IFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi1bMSAwIDAgMSA0OTEuNzc4IDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkxLjc3OCAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkxLjc3OCA1MTEuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1MjEuNjY2IDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTIxLjY2NiAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI0LjQ5OSA1MTEuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLTcyIDQ5OS42OTkgVGQKLShkZWNsaW5lKSAyOC43NzIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0odGVybWluYWwsKSAzNS42OTYgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKGluY29tcHJlaGVuc2libGUpIDcwLjgzNDEgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odGhlcmVmb3JlKSAzNS45NTUgVGoKLS0yNTAgVEptCi0ocG9pbnRsZXNzLikgMzcuOTE3NyBUagotWzEgMCAwIDEgNzIgNDk3LjU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDg3LjU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzcuNzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgNDc3Ljc4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC00NzcuNzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuMTc2IDQ3Ny43ODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXChvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgMTMwLjEyNSA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMC4xMjUgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMC4xMjUgNDc3Ljc4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotLTYwMCBUSm0KLSgtZCkgMTEuOTU1MSBUagotWzEgMCAwIDEgMTc3Ljk0NiA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny45NDYgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ny45NDYgNDc3Ljc4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTIzNCBUSm0KLShkZWNvbXByZXNzZXMpIDU1LjMzMjMgVGoKLS0yMzQgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yMzQgVEptCi0oc3BlY2lcMDAyZWQpIDM1LjQxNyBUagotLTIzNSBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTYwOSBUSm0KLShGaWxlcykgMTkuMzc3MyBUagotLTIzNCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTIzNCBUSm0KLSh3ZXJlKSAxOS4zNTczIFRqCi0tMjM0IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIzNSBUSm0KLShjcmVhdGVkKSAyOC43NjIgVGoKLS0yMzQgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgNDQ1LjAxMiA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NS4wMTIgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0NS4wMTIgNDc3Ljc4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDc0LjkgNDc3Ljc4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzQuOSAtNDc3Ljc4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc3LjIzMyA0NzcuNzgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yMzQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMzQgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLTcyIDQ2NS44MjYgVGQKLShhbmQpIDE0LjM4NiBUagotLTI4MCBUSm0KLShpKSAyLjc2OTYgVGoKLTEgVEptCi0oZ25vcmVkLCkgMzAuMTU2OCBUagotLTI4NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjc5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcm5pbmcpIDI1LjQ1NDQgVGoKLS0yODAgVEptCi0oaXNzdWVkLikgMjcuMzk3MiBUagotWzEgMCAwIDEgMjE2LjAzMyA0NjUuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi4wMzMgLTQ2NS44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi4wMzMgNDY1LjgyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjQ1LjkyMSA0NjUuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS45MjEgLTQ2NS44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OC43MDUgNDY1LjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhdHRlbXB0cykgMzMuNzYzMyBUagotLTI3OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgwIFRKbQotKGd1ZXNzKSAyMi4xMzY5IFRqCi0tMjc5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4MCBUSm0KLShcMDAybGVuYW1lKSAzNC4zMTEyIFRqCi0tMjc5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMjgwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI3OSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjgwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA0NTMuODcxIFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdzOikgMTMuODM4MSBUagotWzEgMCAwIDEgNzIgNDUxLjcxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjcyMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC00MjEuOTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDQyMS45OTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA0MjEuOTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTQyMS45OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA0MjEuOTkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLmJ6MikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTY0LjY1MyA0MjEuOTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTMgLTQyMS45OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4xNDMgNDIxLjk5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWNvbWVzKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAyMDQuNDkzIDQyMS45OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ5MyAtNDIxLjk5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ5MyA0MjEuOTkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAyNTIuMzEzIDQyMS45OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgwLjMxMyAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTQwMC4wNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNDAwLjA3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDQwMC4wNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNDAwLjA3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDQwMC4wNzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmlsZW5hbWUuYnopIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE1OC42NzUgNDAwLjA3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNjc1IC00MDAuMDczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMTY2IDQwMC4wNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMTk4LjUxNSA0MDAuMDczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC41MTUgLTQwMC4wNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC41MTUgNDAwLjA3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZSkgNDcuODIwNSBUagotWzEgMCAwIDEgMjQ2LjMzNiA0MDAuMDczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC4zMzYgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0zNzguMTU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDM3OC4xNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzNzguMTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTM3OC4xNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAzNzguMTU1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLnRiejIpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE2NC42NTMgMzc4LjE1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0zNzguMTU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuMTQzIDM3OC4xNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMjA0LjQ5MyAzNzguMTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTMgLTM3OC4xNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTMgMzc4LjE1NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS50YXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI3Ni4yMjQgMzc4LjE1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMjI0IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzU2LjIzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzNTYuMjM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzU2LjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zNTYuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzU2LjIzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS50YnopIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE2NC42NTMgMzU2LjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0zNTYuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuMTQzIDM1Ni4yMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMjA0LjQ5MyAzNTYuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTMgLTM1Ni4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTMgMzU2LjIzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS50YXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI3Ni4yMjQgMzU2LjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMjI0IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzM0LjMxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzMzQuMzE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzM0LjMxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zMzQuMzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzM0LjMxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhbnlvdGhlcm5hbWUpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE2NC42NTMgMzM0LjMxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0zMzQuMzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuMTQzIDMzNC4zMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMjA0LjQ5MyAzMzQuMzE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTMgLTMzNC4zMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTMgMzM0LjMxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhbnlvdGhlcm5hbWUub3V0KSA5NS42NDEgVGoKLVsxIDAgMCAxIDMwMC4xMzQgMzM0LjMxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjguMTM0IC0xMS40OTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjIuODIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTIuNDAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMzQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zNDIgVEptCi0oZG9lcykgMTguMjYxNCBUagotLTM0MiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zNDMgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0zNDIgVEptCi0oaW4pIDcuNzUwOSBUagotLTM0MiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTM0MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTM0MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDIgVEptCi0ocmVjb2duaXNlZCkgNDMuMTU4IFRqCi0tMzQyIFRKbQotKGVuZGluZ3MsKSAzMy40ODQzIFRqCi1bMSAwIDAgMSAzMDkuMzA1IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA5LjMwNSAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA5LjMwNSAzMTIuNDAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5iejIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDMzMy4yMTUgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzMuMjE1IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzMuMjE1IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzM5LjM0NCAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS4zNDQgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS4zNDQgMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnopIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDM1Ny4yNzYgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTcuMjc2IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTcuMjc2IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzYzLjQwNSAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My40MDUgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My40MDUgMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgudGJ6MikgMjkuODg3OCBUagotWzEgMCAwIDEgMzkzLjI5MyAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5My4yOTMgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Ni43MDEgMzEyLjQwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvcikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDA4LjQwOSAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwOC40MDkgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwOC40MDkgMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgudGJ6KSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0MzIuMzE5IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMyLjMxOSAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMyLjMxOSAzMTIuNDAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQzOC40NDggMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguNDQ4IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzguNDQ4IDMxMi40MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ2OC4zMzYgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjguMzM2IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzEuNzQ0IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGxhaW5zKSA0MC45NTYyIFRqCi0tMzQyIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zNDIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLTcyIDMwMC40NDYgVGQKLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oZ3Vlc3MpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG5hbWUpIDIxLjU3OSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh1c2VzKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotLTI1MCBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMzcwLjAwOSAzMDAuNDQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3MC4wMDkgLTMwMC40NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC4wMDkgMzAwLjQ0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgub3V0KSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzOTMuOTIgMzAwLjQ0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTMuOTIgLTMwMC40NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Ni40MSAzMDAuNDQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFwcGVuZGVkLikgNDAuNjY3MyBUagotWzEgMCAwIDEgNzIgMjk4LjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODguMzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzguNTI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMjUwIFRKbQotKHN1cHBseWluZykgMzkuMzAyNSBUagotLTI1MCBUSm0KLShubykgOS45NjI2IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKGNhdXNlcykgMjYuMDAyNCBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShvdXRwdXQuKSAyNy45NTUxIFRqCi1bMSAwIDAgMSA3MiAyNzYuMzcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjYuNDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNTYuNjExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgMjU2LjYxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC0yNTYuNjExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuNDA5IDI1Ni42MTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1NyBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLS0yNTggVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1OCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0oY29uY2F0ZW5hdGlvbikgNTUuMzMyMyBUagotLTI1OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1NyBUSm0KLSh0dykgOS45NjI2IFRqCi0xMCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNTggVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTcgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1OCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjU3IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tNjY1IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1OCBUSm0KLShyZXN1bHQpIDIyLjEzNjkgVGoKLS0yNTcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDI0NC42NTYgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzkgVEptCi0oY29uY2F0ZW5hdGlvbikgNTUuMzMyMyBUagotLTIzOCBUSm0KLShvZikgOC4yOTg4NSBUagotLTIzOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzkgVEptCi0oY29ycmVzcG9uZGluZykgNTYuOTk2IFRqCi0tMjM5IFRKbQotKHVuY29tcHJlc3NlZCkgNTYuOTk2IFRqCi0tMjM4IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tNjEzIFRKbQotKEludGUpIDE1LjQ5MTggVGoKLTE1IFRKbQotKGdyaXR5KSAxOC44MTk0IFRqCi0tMjM4IFRKbQotKHRlc3RpbmcpIDI2LjU3MDMgVGoKLS0yMzkgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDM4Mi4yNDcgMjQ0LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODIuMjQ3IC0yNDQuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODIuMjQ3IDI0NC42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXQpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDM5NC4yMDIgMjQ0LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTQuMjAyIC0yNDQuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTQuMjAyIDI0NC42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yMzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMzggVEptCi0oY29uY2F0ZW5hdGVkKSA1Mi4wMDQ4IFRqCi0tMjM5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yMzkgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTIzOSBUSm0KLShpcykgNi42NDUwNSBUagotNzIgMjMyLjcgVGQKLShhbHNvKSAxNi4wNDk3IFRqCi0tMjUwIFRKbQotKHN1cHBvcnRlZC4pIDQxLjc4MzEgVGoKLVsxIDAgMCAxIDcyIDIzMC41NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIyMC41ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMC43ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzk5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTM5OSBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMzk5IFRKbQotKGNvbXByZXNzKSAzNy42Mjg3IFRqCi0tNDAwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzk5IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0zOTkgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTM5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM5OSBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTM5OSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zOTkgVEptCi0oYnkpIDkuOTYyNiBUagotLTQwMCBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2aW5nKSAxNy43MTM1IFRqCi0tMzk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDA5LjY3IDIxMC43ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjY3IC0yMTAuNzgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDkuNjcgMjEwLjc4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtYykgMTEuOTU1MSBUagotWzEgMCAwIDEgNDIxLjYyNSAyMTAuNzgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMS42MjUgLTIxMC43ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNS42MDIgMjEwLjc4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAzYWcuKSAxNy40MzQ2IFRqCi0tNzU3IFRKbQotKE11bHRpcGxlKSAzNC4zMjEyIFRqCi0tNDAwIFRKbQotKFwwMDJsKSA4LjMwODgxIFRqCi0xIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tNDAwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTM5OSBUSm0KLShiZSkgOS40MDQ2OSBUagotNzIgMTk4LjgyOCBUZAotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zNjcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNjcgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzY3IFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTM2NyBUSm0KLSh0aGlzLikgMTYuODg2NiBUagotLTEzMjEgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzY3IFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTM2NyBUSm0KLShvdXRwdXRzKSAyOS4zMzk5IFRqCi0tMzY3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM2NyBUSm0KLShmZWQpIDEyLjcyMjIgVGoKLS0zNjcgVEptCi0oc2VxdWVudGlhbGx5KSA0OC4xNDkyIFRqCi0tMzY2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNjcgVEptCi0oc3Rkb3V0LikgMjYuODQ5MiBUagotLTEzMjIgVEptCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0zNjcgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDE4Ni44NzIgVGQKLShtdWx0aXBsZSkgMzMuMjE1MyBUagotLTI4OSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjg5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg5IFRKbQotKG1hbm5lcikgMjkuODc3OCBUagotLTI4OCBUSm0KLShnZW5lcmF0ZXMpIDM3LjYxODggVGoKLS0yODkgVEptCi0oYSkgNC40MjMzOSBUagotLTI4OSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yODkgVEptCi0oY29udGFpbmluZykgNDIuMDYyMSBUagotLTI4OSBUSm0KLShtdWx0aXBsZSkgMzMuMjE1MyBUagotLTI4OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjg5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4OSBUSm0KLShyZXByZXNlbnRhdGlvbnMuKSA2Mi44MDQyIFRqCi0tODUzIFRKbQotKFN1Y2gpIDE5LjkyNTIgVGoKLS0yODkgVEptCi0oYSkgNC40MjMzOSBUagotLTI4OSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLTcyIDE3NC45MTcgVGQKLShjYW4pIDEzLjgyODEgVGoKLS0zOTEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zOTEgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzkwIFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotLTM5MSBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMzkxIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDIzOC4xMTYgMTc0LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzguMTE2IC0xNzQuOTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzguMTE2IDE3NC45MTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI2OC4wMDQgMTc0LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjguMDA0IC0xNzQuOTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzEuODk3IDE3NC45MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0zOTEgVEptCi0oMC45LjApIDE5LjkyNTIgVGoKLS0zOTEgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zOTEgVEptCi0obCkgMi43Njk2IFRqCi0xIFRKbQotKGF0ZXIpIDE0LjkzMzkgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03MzMgVEptCi0oRWFybGllcikgMjcuMTA4MiBUagotLTM5MSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTM5MSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDQ4LjA3MSAxNzQuOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0OC4wNzEgLTE3NC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OC4wNzEgMTc0LjkxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDc3Ljk1OCAxNzQuOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Ny45NTggLTE3NC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4MS44NTIgMTc0LjkxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMzkxIFRKbQotKHN0b3ApIDE2LjYwNzcgVGoKLS0zOTEgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLTcyIDE2Mi45NjIgVGQKLShkZWNvbXByZXNzaW5nKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiAxNjAuODA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNTAuODQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNDEuMDQ0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6Y2F0KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDE0MS4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMTQxLjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjM3OSAxNDEuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDExOC40ODYgMTQxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTguNDg2IC0xNDEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTguNDg2IDE0MS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLS02MDAgVEptCi0oLWRjKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAxNzIuMjg0IDE0MS4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcyLjI4NCAtMTQxLjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcyLjI4NCAxNDEuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3NlcykgNTUuMzMyMyBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShzcGVjaVwwMDJlZCkgMzUuNDE3IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotWzEgMCAwIDEgNzIgMTM4Ljg4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTI4LjkyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTE5LjEyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCAxMTkuMTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTExOS4xMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC44NjYgMTE5LjEyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjk5IFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yOTkgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMpIDMzLjc2MzMgVGoKLS0yOTkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTkgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudCkgNDAuOTU2MiBUagotLTI5OCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFyaWFibGVzKSAzMC45ODM3IFRqCi1bMSAwIDAgMSAzMTYuOTAzIDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE2LjkwMyAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE2LjkwMyAxMTkuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaSVAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzNDYuNzkxIDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ2Ljc5MSAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ5Ljc2OSAxMTkuMTI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNjcuMTMzIDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY3LjEzMyAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY3LjEzMyAxMTkuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaSVApIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDM5MS4wNDMgMTE5LjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTEuMDQzIC0xMTkuMTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTEuMDQzIDExOS4xMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI5OSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjk5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yOTkgVEptCi0ob3JkZXIpIDIxLjAyMTEgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTkgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI5OSBUSm0KLShwcm9jZXNzKSAyOS44Nzc4IFRqCi0tMjk5IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLTcyIDEwNy4xNzEgVGQKLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50cykgMzMuNzYzMyBUagotLTI1MCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbW1hbmQpIDM5LjI5MjUgVGoKLS0yNTAgVEptCi0obGluZS4pIDE3LjQzNDYgVGoKLS0zMTAgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29uKSAxNC4zODYgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW5pZW50KSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMuKSAzNi4yNTM5IFRqCi1bMSAwIDAgMSA3MiAxMDUuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05NS4wNTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4NS4yNTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjk0IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk0IFRKbQotKGFsKSA3LjE5MyBUagotMTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5cykgMTMuMjgwMSBUagotLTI5NCBUSm0KLShwZXJmb3JtZWQsKSA0My45ODQ5IFRqCi0tMzA1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yOTQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk0IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yOTQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjkzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk0IFRKbQotKHNsaWdodGx5KSAyOS44OTc4IFRqCi0tMjk0IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0tMjk0IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk0IFRKbQotKG9yaWdpbmFsLikgMzMuNDg0MyBUagotLTg4NCBUSm0KLShGaWxlcykgMTkuMzc3MyBUagotLTI5NCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5NCBUSm0KLShsZXNzKSAxNC45NDM5IFRqCi0tMjk0IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLTcyIDczLjI5ODIgVGQKLShhYm91dCkgMjIuMTM2OSBUagotLTI0NiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI0NiBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjQ1IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNDYgVEptCi0odGVuZCkgMTcuMTU1NiBUagotLTI0NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ2IFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI0NiBUSm0KLShsKSAyLjc2OTYgVGoKLTEgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTI0NyBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNDUgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjQ2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI0NiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQ2IFRKbQotKGNvbnN0YW50KSAzMy4yMDUzIFRqCi0tMjQ2IFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmhlYWQpIDI2LjU1MDMgVGoKLS0yNDUgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGdpb24pIDE3LjcxMzUgVGoKLS0yNDYgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDcyIDUwLjg1MThdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMykgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA3IDcKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEwNS41MTkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzEuNTkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ny4xMDkgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ3LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC03NDEuNTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDUwKSA5Ljk2MjYgVGoKLS0yNjQgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi0tMzUxIFRKbQotKFJhbmRvbSkgMzMuNzYzMyBUagotLTI2NCBUSm0KLShkYXQpIDEyLjE3NDMgVGoKLTEgVEptCi0oYSkgNC40MjMzOSBUagotLTI2NCBUSm0KLShcKGluY2x1ZGluZykgNDAuOTU2MiBUagotLTI2NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjQgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjYzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY0IFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yNjQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKGNvbXByZXNzb3JzXCkpIDUzLjEyMDYgVGoKLS0yNjQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjQgVEptCi0oY29kZWQpIDIzLjc5MDcgVGoKLS0yNjMgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjY0IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjY0IFRKbQotKDguMDUpIDE3LjQzNDYgVGoKLS0yNjMgVEptCi0oYml0cykgMTQuMzk2IFRqCi0tMjY0IFRKbQotKHBlcikgMTIuNzIyMiBUagotLTI2NCBUSm0KLShieXRlLCkgMTkuNjQ2MiBUagotLTI2NyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2aW5nKSAxNy43MTM1IFRqCi0tMjY0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi03MiA2OTguMDgyIFRkCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBhbnNpb24pIDM1Ljk3NDkgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYXJvdW5kKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKDAuNSUuKSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiA2OTUuOTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02ODYuMDgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzYuMjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFzKSAxMS4wNjg0IFRqCi0tMjY4IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjggVEptCi0oc2VsZi1jaGVjaykgNDAuOTM2MyBUagotLTI2OSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNjggVEptCi0oeW91cikgMTguMjYxNCBUagotLTI2OCBUSm0KLShwcm90ZWN0aW9uLCkgNDIuODg5IFRqCi1bMSAwIDAgMSAyMTcuMjczIDY3Ni4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE3LjI3MyAtNjc2LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE3LjI3MyA2NzYuMjgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDcuMTYxIDY3Ni4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ3LjE2MSAtNjc2LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ5LjgzMyA2NzYuMjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVzZXMpIDE3LjE1NTYgVGoKLS0yNjggVEptCi0oMzItYml0KSAyMy44MDA3IFRqCi0tMjY4IFRKbQotKENSQ3MpIDIzLjgxMDYgVGoKLS0yNjkgVEptCi0odG8pIDcuNzUwOSBUagotLTI2OCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjggVEptCi0oc3VyZSkgMTYuNTk3NyBUagotLTI2OCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2OSBUSm0KLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0yNjggVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yNjggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjggVEptCi0oYSkgNC40MjMzOSBUagotLTI2OCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDY2NC4zMjggVGQKLShpZGVudGljYWwpIDM0LjMxMTIgVGoKLS0yMDAgVEptCi0odG8pIDcuNzUwOSBUagotLTE5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMDAgVEptCi0ob3JpZ2luYWwuKSAzMy40ODQzIFRqCi0tNTg2IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMDAgVEptCi0oZ3VhcmRzKSAyNi41NjAzIFRqCi0tMTk5IFRKbQotKGFnKSA5LjQwNDY5IFRqCi01IFRKbQotKGFpbnN0KSAxOC44MTk0IFRqCi0tMjAwIFRKbQotKGNvcnJ1cHRpb24pIDQxLjUwNDIgVGoKLS0xOTkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjAwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0xOTkgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS0yMTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0xOTkgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluc3QpIDE4LjgxOTQgVGoKLS0yMDAgVEptCi0odW5kZXRlY3RlZCkgNDMuMTU4IFRqCi0tMjAwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi0tMTk5IFRKbQotKGluKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDUxMC4xMTIgNjY0LjMyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTAuMTEyIC02NjQuMzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDY2NC4zMjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDU0MCA2NjQuMzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNjY0LjMyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUyLjM3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKGhvcGVmdWxseSkgNDEuNTA0MiBUagotLTI3NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeSkgMTIuNzIyMiBUagotLTI3NCBUSm0KLSh1bmxpaykgMjAuNDgzMSBUagotMTAgVEptCi0oZWx5XCkuKSAxNy45ODI1IFRqCi0tMzg0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI3NSBUSm0KLShjaGFuY2VzKSAzMS41MzE2IFRqCi0tMjc1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjc1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzQgVEptCi0oY29ycnVwdGlvbikgNDEuNTA0MiBUagotLTI3NSBUSm0KLShnb2luZykgMjIuNjk0OCBUagotLTI3NSBUSm0KLSh1bmRldGVjdGVkKSA0My4xNTggVGoKLS0yNzQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNzUgVEptCi0obWljcm9zY29waWMsKSA1MS4xODc4IFRqCi0tMjgxIFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjc1IFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjc0IFRKbQotKGNoYW5jZSkgMjcuNjU2MiBUagotLTI3NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjc1IFRKbQotKGZvdXIpIDE2LjU5NzcgVGoKLTcyIDY0MC40MTcgVGQKLShiaWxsaW9uKSAyNi4wMjIzIFRqCi0tMjc5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3OSBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjc5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4MCBUSm0KLShwcm9jZXNzZWQuKSA0MS43NzMyIFRqCi0tNzk1IFRKbQotKEJlKSAxMS4wNjg0IFRqCi0tMjc5IFRKbQotKGEpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmUsKSAxNC42NTUgVGoKLS0yODYgVEptCi0odGhvdWdoLCkgMzAuMTY2OCBUagotLTI4NyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjc5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3OSBUSm0KLShjaGVjaykgMjMuMjMyOCBUagotLTI3OSBUSm0KLShvY2N1cnMpIDI2LjAwMjQgVGoKLS0yNzkgVEptCi0odXBvbikgMTkuOTI1MiBUagotLTI3OSBUSm0KLShkZWNvbXByZXNzaW9uLCkgNjIuMjU2MyBUagotLTI4NyBUSm0KLShzbykgOC44NTY3NSBUagotLTI3OSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3OSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNzkgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI4MCBUSm0KLSh0ZWxsKSAxMi43MzIyIFRqCi0tMjc5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotNzIgNjI4LjQ2MiBUZAotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yMzcgVEptCi0oc29tZXRoaW5nKSA0MS41MTQyIFRqCi0tMjM2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM3IFRKbQotKHdyb25nLikgMjcuOTQ1MSBUagotLTYxMSBUSm0KLShJdCkgNi4wODcxNSBUagotLTIzNyBUSm0KLShjYW4nKSAxNy4xNDU2IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yMzcgVEptCi0oaGVscCkgMTcuMTU1NiBUagotLTIzNyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzYgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTIzNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzcgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0yMzcgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yMzYgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLS02MTIgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjM2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIzNyBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDQ1OC4xNTkgNjI4LjQ2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTguMTU5IC02MjguNDYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTguMTU5IDYyOC40NjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSA1MjkuODkgNjI4LjQ2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjkuODkgLTYyOC40NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMi4yNDkgNjI4LjQ2MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi03MiA2MTYuNTA3IFRkCi0odHJ5KSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oZGFtYWdlZCkgMzUuOTY1IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi1bMSAwIDAgMSA3MiA2MTQuMzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5NC43MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuKSAyNy4xMTgyIFRqCi0tMjk4IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi0tNDA2IFRKbQotKDApIDQuOTgxMyBUagotLTI5OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yOTggVEptCi0oYSkgNC40MjMzOSBUagotLTI5OCBUSm0KLShub3JtYWwpIDI4LjIyNCBUagotLTI5OCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4aXQsKSAxMy4wMTEyIFRqCi0tMzEwIFRKbQotKDEpIDQuOTgxMyBUagotLTI5OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yOTcgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudGFsKSA0OC4xNDkyIFRqCi0tMjk4IFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjk4IFRKbQotKFwoXDAwMmxlKSAxNi4wNDk3IFRqCi0tMjk4IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI5OCBUSm0KLShmb3VuZCwpIDI1LjczMzQgVGoKLS0zMTAgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbGlkKSAxNC45NDM5IFRqCi0tMjk4IFRKbQotKFwwMDNhZ3MsKSAyMS4zMSBUagotLTMxMCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yOTggVEptCi0oZXJyb3JzLCkgMjUuNzIzNCBUagotLTMxMCBUSm0KLShldGMuXCksKSAxOS45MTUyIFRqCi0tMzEwIFRKbQotKDIpIDQuOTgxMyBUagotLTI5OCBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA1ODIuNzUzIFRkCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb3JydXB0KSAyOC43NzIgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjUwIFRKbQotKDMpIDQuOTgxMyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oY29uc2lzdGVuYykgNDEuNTA0MiBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKFwoZSkgNy43NDA5NCBUagotMTUgVEptCi0oZywpIDcuNDcxOTUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z1wpKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGNhdXNlZCkgMjcuMTA4MiBUagotWzEgMCAwIDEgNDQzLjA2NSA1ODIuNzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0My4wNjUgLTU4Mi43NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0My4wNjUgNTgyLjc1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDcyLjk1MyA1ODIuNzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NTMgLTU4Mi43NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3NS40NDQgNTgyLjc1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHBhbmljLikgMjQuMDY5NiBUagotWzEgMCAwIDEgNzIgNTgwLjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcwLjc1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTQ4LjExOCBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi40LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShPUFRJT05TKSA5Mi45ODM5IFRqCi1bMSAwIDAgMSA3MiA1NDcuODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUyOC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUxNi40NzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWMpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1zdGRvdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDEzNy43NTMgNTE2LjQ3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTY4LjI0NDEgLTAuMTU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE2LjMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTA0LjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzKSAzOS44NTA0IFRqCi0tMjUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShvdXRwdXQuKSAyNy45NTUxIFRqCi1bMSAwIDAgMSA3MiA1MDIuMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODguNjUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzguODU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1kKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tZGVjb21wcmVzcykgNzEuNzMwNyBUagotWzEgMCAwIDEgMTYxLjY2NCA0NzguODU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTIuMTU0NCAtMS41MzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzcuMzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0NjYuODk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yY2UpIDE3LjE0NTYgVGoKLS0yOTYgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLVsxIDAgMCAxIDIwMC4yMTQgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDAuMjE0IC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDAuMjE0IDQ2Ni44OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIzMC4xMDIgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzAuMTAyIC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuMTAyIDQ2Ni44OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjM1LjY1OSA0NjYuODk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNS42NTkgLTQ2Ni44OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNS42NTkgNDY2Ljg5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNzcuNTAyIDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3LjUwMiAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjgwLjQ1NCA0NjYuODk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyOTcuNzkxIDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk3Ljc5MSAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk3Ljc5MSA0NjYuODk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6Y2F0KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMjcuNjc5IDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI3LjY3OSAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMwLjYzMSA0NjYuODk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotLTI5NiBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yOTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk3IFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yOTYgVEptCi0ocHJvZ3JhbSwpIDM2LjI0MzkgVGoKLS0zMDggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk2IFRKbQotKGRlY2lzaW9uKSAzMy4yMDUzIFRqCi0tMjk3IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0xMDggNDU0Ljk0NCBUZAotKHdoYXQpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0oYWN0aW9ucykgMjguMjI0IFRqCi0tMzAzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDMgVEptCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzAzIFRKbQotKGRvbmUpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0ob24pIDkuOTYyNiBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDMgVEptCi0oYmFzaXMpIDE5LjkyNTIgVGoKLS0zMDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMDMgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zMDMgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMzAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzAzIFRKbQotKHVzZWQuKSAyMC43NTIxIFRqCi0tOTM5IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0zMDMgVEptCi0oXDAwM2FnKSAxNC45NDM5IFRqCi0tMzAzIFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnJpZGVzKSAyNy4xMDgyIFRqCi0tMzAzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDMgVEptCi0obWVjaGFuaXNtLCkgNDcuODcwMyBUagotLTMxNiBUSm0KLShhbmQpIDE0LjM4NiBUagotMTA4IDQ0Mi45ODggVGQKLShmb3JjZXMpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzLikgNDkuNTI0MSBUagotWzEgMCAwIDEgNzIgNDQwLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuODY2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDI3LjEyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDE3LjMyMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgteikgMTEuOTU1MSBUagotLTYwMCBUSm0KLSgtLWNvbXByZXNzKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNDkuNzA5IDQxNy4zMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MC4xOTkzIC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQxNS43ODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0MDUuMzY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShjb21wbGVtZW50KSA0OS4yNTUxIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE4Ny45NjkgNDA1LjM2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODcuOTY5IC00MDUuMzY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODcuOTY5IDQwNS4zNjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWQpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDE5OS45MjQgNDA1LjM2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTkuOTI0IC00MDUuMzY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTkuOTI0IDQwNS4zNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMzEwIFRKbQotKGZvcmNlcykgMjQuMzM4NiBUagotLTI1MCBUSm0KLShjb21wcmVzc2lvbiwpIDUyLjg1MTYgVGoKLS0yNTAgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhcmRsZXNzKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9rYXRpb24pIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0obmFtZS4pIDI0LjA2OTYgVGoKLVsxIDAgMCAxIDcyIDQwMy4yMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM4OS41XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzkuNzAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC10KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tdGVzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTI1Ljc5OCAzNzkuNzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTYuMjg4OSAtMC4xNTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzkuNTQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzY3Ljc0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDaGVjaykgMjUuNDU0NCBUagotLTI3MCBUSm0KLShpbnRlKSAxNC45NDM5IFRqCi0xNSBUSm0KLShncml0eSkgMTguODE5NCBUagotLTI3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzEgVEptCi0oc3BlY2lcMDAyZWQpIDM1LjQxNyBUagotLTI3MCBUSm0KLShcMDAybGVcKHNcKSwpIDI1LjczMzQgVGoKLS0yNzYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjcwIFRKbQotKGRvbicpIDE4LjI2MTQgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI3MCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjcxIFRKbQotKHRoZW0uKSAyMi40MTU5IFRqCi0tNzQyIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNzEgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjcwIFRKbQotKHBlcmZvcm1zKSAzNS45NjUgVGoKLS0yNzAgVEptCi0oYSkgNC40MjMzOSBUagotLTI3MSBUSm0KLSh0cmlhbCkgMTYuMDQ5NyBUagotLTI3MCBUSm0KLShkZWNvbXByZXMtKSA0Ni40NzU1IFRqCi0xMDggMzU1Ljc5MSBUZAotKHNpb24pIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odGhybykgMTYuMDQ5NyBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyZXN1bHQuKSAyNC42Mjc1IFRqCi1bMSAwIDAgMSA3MiAzNTMuNjM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMzkuOTI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMzAuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1mKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tZm9yY2UpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEzMS43NzYgMzMwLjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTYyLjI2NjUgLTAuMTU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI5Ljk3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDMxOC4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3JjZSkgMTcuMTQ1NiBUagotLTMzOCBUSm0KLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ3cml0ZSkgMjguMjE0MSBUagotLTMzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzOCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zMzggVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS0xMTUwIFRKbQotKE5vcm1hbGx5KSAzOC4xODY2IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyODkuODMxIDMxOC4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg5LjgzMSAtMzE4LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjgzMSAzMTguMTcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMTkuNzE5IDMxOC4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE5LjcxOSAtMzE4LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIzLjA4OSAzMTguMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zMzggVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzM5IFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcndyaXRlKSAyOC4yMTQxIFRqCi0tMzM4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpc3RpbmcpIDI3LjEyODIgVGoKLS0zMzggVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMzM4IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tMTE1MCBUSm0KLShBbHNvKSAxOC44MTk0IFRqCi0tMzM5IFRKbQotKGZvcmNlcykgMjQuMzM4NiBUagotWzEgMCAwIDEgMTA4IDMwNi4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA4IC0zMDYuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzA2LjIxNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTM3Ljg4OCAzMDYuMjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy44ODggLTMwNi4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0MC4zNzkgMzA2LjIxNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJyZWFrKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKGhhcmQpIDE3LjcwMzUgVGoKLS0yNTAgVEptCi0obGlua3MpIDE5LjM3NzMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShvdGhlcndpc2UpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGRuJykgMjYuMDEyMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKGRvLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgMzA0LjY4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk0LjgzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDI4NC40MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEzNy44ODggMjg0LjQxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuODg4IC0yODQuNDE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDEuMjExIDI4NC40MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obm9ybWFsbHkpIDM1Ljk3NDkgVGoKLS0zMzQgVEptCi0oZGVjbGluZXMpIDMyLjY0NzQgVGoKLS0zMzMgVEptCi0odG8pIDcuNzUwOSBUagotLTMzNCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMzMzIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zMzQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zMzMgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzM0IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMzMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM0IFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0zMzMgVEptCi0obWFnaWMpIDI0LjM0ODYgVGoKLS0zMzQgVEptCi0oaGVhZGVyKSAyNi41NTAzIFRqCi0tMzMzIFRKbQotKGJ5dGVzLikgMjMuNTIxNyBUagotLTU2MSBUSm0KLShJZikgNi42MzUwOSBUagotLTMzNCBUSm0KLShmb3JjZWQpIDI1LjQ0NDUgVGoKLTEwOCAyNzIuNDYxIFRkCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDExMS4zMTggMjcyLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTEuMzE4IC0yNzIuNDYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTEuMzE4IDI3Mi40NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWYpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDEyMy4yNzMgMjcyLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjMuMjczIC0yNzIuNDYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjMuMjczIDI3Mi40NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCksKSA1LjgwODIgVGoKLS0yNTAgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0od2UpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShwYXNzKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLSh0aHJvdWdoKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKHVubW9kaVwwMDJlZC4pIDQ3Ljg4MDMgVGoKLS0zMTAgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLShHTlUpIDIxLjU3OSBUagotWzEgMCAwIDEgNDEyLjU4NSAyNzIuNDYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMi41ODUgLTI3Mi40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMi41ODUgMjcyLjQ2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShnemlwKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0MzYuNDk2IDI3Mi40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM2LjQ5NiAtMjcyLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM4Ljk4NiAyNzIuNDYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMuKSAxMC43ODk1IFRqCi1bMSAwIDAgMSA3MiAyNzAuMzA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTYuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNDYuNzk1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1rKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0ta2VlcCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTI1Ljc5OCAyNDYuNzk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTYuMjg4OSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDUuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMjM0Ljg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEspIDcuMTkzIFRqCi0yNSBUSm0KLShlZXApIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oXChkb24nKSAyMS41NzkgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLShkZWxldGVcKSkgMjcuMTA4MiBUagotLTI1MCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI1MCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKGR1cmluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotWzEgMCAwIDEgNzIgMjMyLjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuODY2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjE4Ljk3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjA5LjE3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtcykgMTEuOTU1MSBUagotLTYwMCBUSm0KLSgtLXNtYWxsKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDIwOS4xNzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC02Mi4yNjY1IC0wLjE1NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwOS4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDE5Ny4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVkdWNlKSAyOS44Nzc4IFRqCi0tMzQ3IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTM0NyBUSm0KLSh1c2FnZSwpIDI1LjE3NTUgVGoKLS0zNzEgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzQ2IFRKbQotKGNvbXByZXNzaW9uLCkgNTIuODUxNiBUagotLTM3MSBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMzQ3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ3IFRKbQotKHRlc3RpbmcuKSAyOS4wNjA5IFRqCi0tMTIwMSBUSm0KLShGaWxlcykgMTkuMzc3MyBUagotLTM0NyBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zNDcgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzQ2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ3IFRKbQotKHRlc3RlZCkgMjMuMjQyNyBUagotMTA4IDE4NS4yNjQgVGQKLSh1c2luZykgMjEuNTg5IFRqCi0tMzg4IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODggVEptCi0obW9kaVwwMDJlZCkgMzUuNDI3IFRqCi0tMzg4IFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTM4OSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM4OCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMzg4IFRKbQotKHJlcXVpcmVzKSAzMi4wODk1IFRqCi0tMzg4IFRKbQotKDIuNSkgMTIuNDUzMyBUagotLTM4OCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzg4IFRKbQotKHBlcikgMTIuNzIyMiBUagotLTM4OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTM4OSBUSm0KLShieXRlLikgMTkuNjQ2MiBUagotLTE0NDggVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTM4OSBUSm0KLShtZWFucykgMjUuNDU0NCBUagotLTM4OCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzg4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTM4OCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0zODggVEptCi0oYmUpIDkuNDA0NjkgVGoKLTEwOCAxNzMuMzA5IFRkCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oMjMwMGspIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGFsYmVpdCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oaGFsZikgMTUuNDkxOCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oc3BlZWQuKSAyNS4xNzU1IFRqCi1bMSAwIDAgMSA3MiAxNzEuMTUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjEuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMTUxLjUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKER1cmluZykgMjguMjI0IFRqCi0tMjUyIFRKbQotKGNvbXByKSAyNS40NTQ0IFRqCi0xIFRKbQotKGVzc2lvbiwpIDI3LjM5NzIgVGoKLVsxIDAgMCAxIDE5NC4wOSAxNTEuNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk0LjA5IC0xNTEuNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NC4wOSAxNTEuNTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXMpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDIwNi4wNDYgMTUxLjUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNi4wNDYgLTE1MS41MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA4LjU1MSAxNTEuNTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2VsZWN0cykgMjYuNTYwMyBUagotLTI1MSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUxIFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yNTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTIgVEptCi0oMjAwaywpIDIyLjQxNTkgVGoKLS0yNTEgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTIgVEptCi0obGltaXRzKSAyMi43MDQ4IFRqCi0tMjUxIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MiBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTEgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MiBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUyIFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yNTEgVEptCi0oXDAwMmd1cmUsKSAyNS43MzM0IFRqCi0tMjUyIFRKbQotKGF0KSA3LjE5MyBUagotMTA4IDEzOS41NTQgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yODcgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBlbnNlKSAyNy42NjYxIFRqCi0tMjg3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg4IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yODcgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yODcgVEptCi0ocmF0aW8uKSAyMC43NTIxIFRqCi0tODQzIFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKHNob3J0LCkgMjIuNDE1OSBUagotLTI5NyBUSm0KLShpZikgNi4wODcxNSBUagotLTI4NyBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjg3IFRKbQotKG1hY2hpbmUpIDMzLjc1MzMgVGoKLS0yODcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODcgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yODcgVEptCi0ob24pIDkuOTYyNiBUagotLTI4OCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yODcgVEptCi0oXCg4KSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKG1lKSAxMi4xNzQzIFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYWJ5dGVzKSAyNS40NTQ0IFRqCi0tMjg3IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKGxlc3NcKSwpIDIwLjc1MjEgVGoKLTEwOCAxMjcuNTk5IFRkCi0odXNlKSAxMy4yODAxIFRqCi1bMSAwIDAgMSAxMjMuNzcxIDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIzLjc3MSAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIzLjc3MSAxMjcuNTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1zKSAxMS45NTUxIFRqCi1bMSAwIDAgMSAxMzUuNzI2IDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1LjcyNiAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM4LjIxNiAxMjcuNTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeXRoaW5nLikgMzUuNjk2IFRqCi0tNjIwIFRKbQotKFNlZSkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMjAuMDc5IDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMjIwLjA3OSAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjA3OSAxMjcuNTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1FTU9SKSAzNy42Mzg3IFRqCi02NSBUSm0KLShZKSA3LjE5MyBUagotLTI1MCBUSm0KLShNQU4pIDIzLjI0MjcgVGoKLTM1IFRKbQotKEEpIDcuMTkzIFRqCi00MCBUSm0KLShHRU1FTlQpIDQxLjUwNDIgVGoKLVsxIDAgMCAxIDMzNy45NDYgMTI3LjU5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0zMzcuOTQ2IC0xMjcuNTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDAuNDM3IDEyNy41OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzVdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAzNTIuMDUzIDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUyLjA1MyAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU0LjU0NCAxMjcuNTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJlbG8pIDE3LjE1NTYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMjUuNDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTEuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDEuOTM0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1xKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tcXVpZXQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEzMS43NzYgMTAxLjkzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTYyLjI2NjUgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTAwLjM5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDg5Ljk3ODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU3VwcHJlc3MpIDM1Ljk3NDkgVGoKLS0yMjEgVEptCi0obm9uLWVzc2VudGlhbCkgNTIuNTcyNiBUagotLTIyMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJuaW5nKSAyNS40NTQ0IFRqCi0tMjIxIFRKbQotKG1lc3NhZ2VzLikgNDAuMTE5NCBUagotLTMwMCBUSm0KLShNZXNzYWdlcykgMzguNzM0NiBUagotLTIyMSBUSm0KLShwZXJ0YWluaW5nKSA0MC4zOTgzIFRqCi0tMjIxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjAgVEptCi0oSS9PKSAxMy4yODAxIFRqCi0tMjIxIFRKbQotKGVycm9ycykgMjMuMjMyOCBUagotLTIyMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMCBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTIyMSBUSm0KLShjcml0aWNhbCkgMjcuNjY2MSBUagotLTIyMSBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVudHMpIDE2LjA0OTcgVGoKLS0yMjEgVEptCi0od2kpIDkuOTYyNiBUagotMSBUSm0KLShsbCkgNS41MzkyMSBUagotLTIyMSBUSm0KLShub3QpIDEyLjczMjIgVGoKLTEwOCA3OC4wMjMyIFRkCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oc3VwcHJlc3NlZC4pIDQ2LjIwNjUgVGoKLVsxIDAgMCAxIDcyIDc1Ljg2NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogOCA4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC12KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tdmVyYm9zZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03NC4yMjE3IC0wLjE1NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcwOS44ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oZXJib3NlKSAyNi4wMDI0IFRqCi0tMzIzIFRKbQotKG1vZGUpIDIyLjEzNjkgVGoKLS0zMjIgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0zMjMgVEptCi0oc2hvKSAxMy44MzgxIFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zMjMgVEptCi0ocmF0aW8pIDE4LjI2MTQgVGoKLS0zMjIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzIzIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0zMjIgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzIzIFRKbQotKHByb2Nlc3NlZC4pIDQxLjc3MzIgVGoKLS0xMDU2IFRKbQotKEZ1cnRoZXIpIDI5LjMyOTkgVGoKLVsxIDAgMCAxIDQzMC4wMTUgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzAuMDE1IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzAuMDE1IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXYpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDQ0MS45NyA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS45NyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQxLjk3IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oJykgMy4zMTc1NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTMyMyBUSm0KLShpbmNyZWFzZSkgMzIuNjM3NSBUagotLTMyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjMgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmJvc2l0eSkgMzIuMDk5NSBUagotMTA4IDY4Ni4xMjcgVGQKLShsZSkgNy4xOTMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwsKSA5LjY4MzY1IFRqCi0tMjUwIFRKbQotKHNwZSkgMTMuMjgwMSBUagotMjUgVEptCi0od2luZykgMTkuOTI1MiBUagotLTI1MCBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0obG90cykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGluZm9ybWF0aW9uKSA0Ny4wNDM0IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHByaW1hcmlseSkgMzcuMDgwOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShpbnRlcmVzdCkgMjkuMzI5OSBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oZGlhZ25vc3RpYykgNDAuOTU2MiBUagotLTI1MCBUSm0KLShwdXJwb3Nlcy4pIDM3LjkwNzcgVGoKLVsxIDAgMCAxIDcyIDY4My45N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzAuMDIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NjAuMjI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1MKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tbGljZW5zZSkgNTMuNzk4IFRqCi0tNjAwIFRKbQotKC1WKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tdmVyc2lvbikgNTMuNzk4IFRqCi1bMSAwIDAgMSAyMjEuNDQgNjYwLjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1MS45MyAtMC4xNTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjAuMDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2NDguMjY5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKERpc3BsYXkpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNvZnR3KSAyMi4xMzY5IFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24sKSAyNi44MzkyIFRqCi0tMjUwIFRKbQotKGxpY2Vuc2UpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0odGVybXMpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oY29uZGl0aW9ucy4pIDQ0LjAwNDggVGoKLVsxIDAgMCAxIDcyIDY0Ni4xMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjMyLjE2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIyLjM2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtMSkgMTEuOTU1MSBUagotWzEgMCAwIDEgODMuOTU1MiA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjk1NTIgLTYyMi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2LjQ0NTggNjIyLjM2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKG9yKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAxMDAuNTUzIDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAwLjU1MyAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTAwLjU1MyA2MjIuMzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tZmFzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTM2LjQxOCA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNi40MTggLTYyMi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNi40MTggNjIyLjM2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNTIuNDY4IDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUyLjQ2OCAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUyLjQ2OCA2MjIuMzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC05KSAxMS45NTUxIFRqCi1bMSAwIDAgMSAxNjQuNDIzIDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY0LjQyMyAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY2LjkxNCA2MjIuMzY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDE4MS4wMjEgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODEuMDIxIC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODEuMDIxIDYyMi4zNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWJlc3QpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIxMC45MDkgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTA5IC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTA5IDYyMi4zNjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDIxNC4yMjYgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDIuMjI2IC0xLjc4MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2MTAuNDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNldCkgMTIuNzMyMiBUagotLTI4OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yODggVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI4OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg4IFRKbQotKDEwMCkgMTQuOTQzOSBUagotLTI4OSBUSm0KLShrLCkgNy40NzE5NSBUagotLTI5OCBUSm0KLSgyMDApIDE0Ljk0MzkgVGoKLS0yODggVEptCi0oaykgNC45ODEzIFRqCi0tMjg4IFRKbQotKC4uLikgNy40NzE5NSBUagotLTg1MCBUSm0KLSg5MDApIDE0Ljk0MzkgVGoKLS0yODggVEptCi0oaykgNC45ODEzIFRqCi0tMjg4IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTI4OSBUSm0KLShjb21wcmVzc2luZy4pIDUyLjg1MTYgVGoKLS04NDkgVEptCi0oSGFzKSAxNS40OTE4IFRqCi0tMjg5IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yODggVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZlY3QpIDE0LjkzMzkgVGoKLS0yODggVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjg4IFRKbQotKGRlY29tcHJlc3NpbmcuKSA2Mi4yNTYzIFRqCi0tODUwIFRKbQotKFNlZSkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxMDggNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xMDggLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1FTU9SKSAzNy42Mzg3IFRqCi02NSBUSm0KLShZKSA3LjE5MyBUagotLTI5NyBUSm0KLShNQU4pIDIzLjI0MjcgVGoKLTM1IFRKbQotKEEpIDcuMTkzIFRqCi00MCBUSm0KLShHRU1FTlQpIDQxLjUwNDIgVGoKLVsxIDAgMCAxIDIyNi4zMzggNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0yMjYuMzM4IC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjkuMyA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFs1XSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMjQwLjkxNiA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC45MTYgLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My44NzggNTk4LjQ1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTkwNCBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLVsxIDAgMCAxIDI5Ny4yNzggNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTcuMjc4IC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTcuMjc4IDU5OC40NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1mYXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzMzMuMTQ0IDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMzLjE0NCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM2LjEwNiA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNTMuNDU0IDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUzLjQ1NCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUzLjQ1NCA1OTguNDU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tYmVzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMzg5LjMxOSA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OS4zMTkgLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi4yODEgNTk4LjQ1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbGlhc2VzKSAyNi41NjAzIFRqCi0tMjk3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI5OCBUSm0KLShwcmltYXJpbHkpIDM3LjA4MDggVGoKLS0yOTcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjk3IFRKbQotKEdOVSkgMjEuNTc5IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTYuMDkgLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxNi4wOSA1OTguNDU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGd6aXApIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDU0MCA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDU4Ni41MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGF0aWJpbGl0eSkgNTMuMTQwNSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTM1NiBUSm0KLShJbikgOC4yOTg4NSBUagotLTI2NSBUSm0KLShwYXJ0aWN1bGFyKSAzOC4xNzY3IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMjAuNDIzIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIwLjQyMyAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjQyMyA1ODYuNTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tZmFzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMjU2LjI4OCA1ODYuNTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ni4yODggLTU4Ni41MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OC45MzIgNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI2NSBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjYgVEptCi0odGhpbmdzKSAyNC4zNTg2IFRqCi0tMjY1IFRKbQotKHNpZ25pXDAwMmNhbnRseSkgNDkuMjY1MSBUagotLTI2NSBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhc3RlcikgMTguODA5NCBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTcxMiBUSm0KLShBbmQpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDQ0NC42MjIgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuNjIyIC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDQuNjIyIDU4Ni41MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1iZXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0ODAuNDg3IDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgwLjQ4NyAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgzLjEzMSA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG1lcmVseSkgMjcuNjY2MSBUagotLTI2NSBUSm0KLShzZWxlY3RzKSAyNi41NjAzIFRqCi0xMDggNTc0LjU0NiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTc0LjQ0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjAuNDk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDguNjQzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tKSAxMS45NTUxIFRqCi1bMSAwIDAgMSA4My45NTUyIDU0OC42NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNC40NDU4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0OC42NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1MzYuNjg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTM1IFRKbQotKHJlYXRzKSAxOC44MDk0IFRqCi0tMjYxIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjYxIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0yNjAgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMpIDMzLjc2MzMgVGoKLS0yNjEgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNjEgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjYxIFRKbQotKG5hbWVzLCkgMjcuOTQ1MSBUagotLTI2MyBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tMjYxIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjYxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjYwIFRKbQotKHN0YXJ0KSAxNy4xNTU2IFRqCi0tMjYxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNjEgVEptCi0oYSkgNC40MjMzOSBUagotLTI2MSBUSm0KLShkYXNoLikgMjAuNzUyMSBUagotLTY4NSBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjYwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjYxIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjYxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNjAgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi0tMjYxIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLTEwOCA1MjQuNzMyIFRkCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ2lubmluZykgMzAuNDQ1NyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZGFzaCwpIDIwLjc1MjEgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZTopIDMyLjA5OTUgVGoKLVsxIDAgMCAxIDMwMi4yNyA1MjQuNzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMi4yNyAtNTI0LjczMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAyLjI3IDUyNC43MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLS02MDAgVEptCi0oLS0pIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLW15ZmlsZW5hbWUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQyMS44MjEgNTI0LjczMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjEuODIxIC01MjQuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjEuODIxIDUyNC43MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTIyLjU3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDguNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTguODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1yZXBldGl0aXZlLWZhc3QpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE3My42MTkgNDk4LjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTQ5OC44M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTczLjYxOSA0OTguODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTc4LjYgNDk4LjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuNTgyIC00OTguODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4My41ODIgNDk4LjgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tcmVwZXRpdGl2ZS1iZXN0KSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAyODUuMiA0OTguODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTUuNjkxIC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5Ny4yOTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0ODYuODc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjA3IFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLS0yMDYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjA3IFRKbQotKHJlZHVuZGFudCkgMzkuODQwNCBUagotLTIwNyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjA2IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMjA3IFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMjA3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjA2IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUuKSA2LjkxNDA0IFRqCi0tNTkxIFRKbQotKFRoZSkgMTUuNDkxOCBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjA3IFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZWQpIDIyLjEzNjkgVGoKLS0yMDcgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjA3IFRKbQotKGMpIDQuNDIzMzkgVGoKLTEgVEptCi0obykgNC45ODEzIFRqCi0tMSBUSm0KLShhKSA0LjQyMzM5IFRqCi0xIFRKbQotKHJzZSkgMTEuNjE2NCBUagotLTIwNyBUSm0KLShjb250cm9sKSAyOC4yMjQgVGoKLS0yMDcgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjA3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNiBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2aW91cikgMjEuMDMxIFRqCi0xMDggNDc0LjkxOSBUZAotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MSBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjUwIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUxIFRKbQotKGVhcmxpZXIpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zLCkgMzAuNzE0NyBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc29tZXRpbWVzKSA0Mi42MiBUagotLTI1MCBUSm0KLSh1c2VmdWwuKSAyNi44MzkyIFRqCi0tNjIyIFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMjUxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MSBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShpbXBybykgMjMuODAwNyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlZCkgOS40MDQ2OSBUagotMTA4IDQ2Mi45NjQgVGQKLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0ocmVuZGVycykgMjkuMzE5OSBUagotLTI1MCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShcMDAzYWdzKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKGlycmVsZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQuKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSA3MiA0NjAuODA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNi44OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQxNC4yNjQgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuNS4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oTUVNT1IpIDc5LjE4NCBUagotNTAgVEptCi0oWSkgMTMuNzc5MiBUagotLTI3OCBUSm0KLShNQU5BKSA2MS45NTQ4IFRqCi01MCBUSm0KLShHRU1FTlQpIDg4LjM3NzEgVGoKLVsxIDAgMCAxIDcyIDQxNC4wMDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwNC4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM5Mi4zNDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggMzkyLjM0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC0zOTIuMzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDQuNDU0IDM5Mi4zNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJlc3NlcykgNDUuOTI3NiBUagotLTI1OCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlKSA5LjQwNDY5IFRqCi0tMjU3IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTggVEptCi0oaW4pIDcuNzUwOSBUagotLTI1NyBUSm0KLShibG9ja3MuKSAyOC41MDMgVGoKLS02NjYgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjU3IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjU4IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yNTggVEptCi0oYWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZlY3RzKSAxOC44MDk0IFRqCi0tMjU3IFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0yNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU3IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjU4IFRKbQotKHJhdGlvKSAxOC4yNjE0IFRqCi0tMjU3IFRKbQotKGFjaGllKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkLCkgMTEuODk1MyBUagotLTI2MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi03MiAzODAuMzkxIFRkCi0ob2YpIDguMjk4ODUgVGoKLS0yMTUgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjE1IFRKbQotKG5lZWRlZCkgMjguMjE0MSBUagotLTIxNSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yMTUgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yMTQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMTUgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLS01OTcgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjE1IFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLVsxIDAgMCAxIDMzNy43MTkgMzgwLjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzcuNzE5IC0zODAuMzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzcuNzE5IDM4MC4zOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLTEpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDM0OS42NzQgMzgwLjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDkuNjc0IC0zODAuMzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTEuODE1IDM4MC4zOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGhyb3VnaCkgMzAuOTkzNiBUagotWzEgMCAwIDEgMzg0Ljk1IDM4MC4zOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg0Ljk1IC0zODAuMzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuOTUgMzgwLjM5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtOSkgMTEuOTU1MSBUagotWzEgMCAwIDEgMzk2LjkwNSAzODAuMzkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Ni45MDUgLTM4MC4zOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5OS4wNDYgMzgwLjM5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzcGVjaWZ5KSAyOC43NzIgVGoKLS0yMTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjE1IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjE1IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yMTUgVEptCi0odG8pIDcuNzUwOSBUagotLTIxNCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIxNSBUSm0KLSgxMDAsMDAwKSAzMi4zNzg1IFRqCi03MiAzNjguNDM1IFRkCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI3OCBUSm0KLSh0aHJvdWdoKSAzMC45OTM2IFRqCi0tMjc3IFRKbQotKDkwMCwwMDApIDMyLjM3ODUgVGoKLS0yNzggVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI3OCBUSm0KLShcKHRoZSkgMTUuNDkxOCBUagotLTI3NyBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHRcKSkgMTguMjYxNCBUagotLTI3OCBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03ODYgVEptCi0oQXQpIDkuOTYyNiBUagotLTI3OCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjc4IFRKbQotKHRpbWUsKSAyMC4yMDQyIFRqCi0tMjg0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI3OCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjc3IFRKbQotKHVzZWQpIDE4LjI2MTQgVGoKLS0yNzggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi03MiAzNTYuNDggVGQKLShpcykgNi42NDUwNSBUagotLTI0MyBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjQyIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTI0MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDMgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI0MiBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjQ0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNzUuMTc0IDM1Ni40OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzUuMTc0IC0zNTYuNDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS4xNzQgMzU2LjQ4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMxNy4wMTcgMzU2LjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNy4wMTcgLTM1Ni40OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE5LjQzMyAzNTYuNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGhlbikgMTcuMTU1NiBUagotLTI0MyBUSm0KLShhbGwpIDkuOTYyNiBUagotMSBUSm0KLShvKSA0Ljk4MTMgVGoKLS0xIFRKbQotKGMpIDQuNDIzMzkgVGoKLTEgVEptCi0oYXRlcykgMTUuNDkxOCBUagotLTI0MyBUSm0KLShpdHNlbGYpIDE5LjkyNTIgVGoKLS0yNDIgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjQzIFRKbQotKGVub3VnaCkgMjkuMzI5OSBUagotLTI0MyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNDIgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi03MiAzNDQuNTI1IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAzIFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLS05NDAgVEptCi0oU2luY2UpIDIyLjEzNjkgVGoKLS0zMDQgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0zMDMgVEptCi0oc2l6ZXMpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzAzIFRKbQotKHN0b3JlZCkgMjQuMzQ4NiBUagotLTMwNCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzAzIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zMDMgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLS0zMTcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDMgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMzA0IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAzIFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLVsxIDAgMCAxIDQwNi4zNSAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNi4zNSAtMzQ0LjUyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjM1IDM0NC41MjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLTEpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDQxOC4zMDUgMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTguMzA1IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjEuMzI3IDM0NC41MjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNDMyLjEgMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzIuMSAtMzQ0LjUyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMyLjEgMzQ0LjUyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtOSkgMTEuOTU1MSBUagotWzEgMCAwIDEgNDQ0LjA1NSAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wNTUgLTM0NC41MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ny4wNzcgMzQ0LjUyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0zMDMgVEptCi0oaXJyZWxlKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudCkgMTIuMTc0MyBUagotLTMwNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzAzIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi03MiAzMzIuNTcgVGQKLShpZ25vcmVkKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKGR1cmluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotWzEgMCAwIDEgNzIgMzMwLjQxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIwLjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTAuNjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0ocmVxdWlyZW1lbnRzLCkgNTQuNTA1NCBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJ5dGVzLCkgMjMuNTIxNyBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXN0aW1hdGVkKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKGFzOikgMTEuMDY4NCBUagotWzEgMCAwIDEgNzIgMzA4LjQ5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yOTkuMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI5OS4xMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShDb21wcmVzc2lvbjopIDcxLjczMDcgVGoKLS0xMjc4IFRKbQotKDQwMGspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oKykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg4KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYmxvY2spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oc2l6ZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotOTAgMjc1LjIyIFRkCi0oRGVjb21wcmVzc2lvbjopIDgzLjY4NTggVGoKLS00MjYgVEptCi0oMTAwaykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgrKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDQpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oeCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShibG9jaykgMjkuODg3OCBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotMTUzLjY2IDI2My4yNjUgVGQKLSgxMDBrKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKCspIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMi41KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYmxvY2spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oc2l6ZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNzIgMjQ3LjcyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMzcuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjUuODA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKExhcikgMTMuODI4MSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0tMjkyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjkyIFRKbQotKHNpemVzKSAxOS4zNjczIFRqCi0tMjkxIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI5MiBUSm0KLShyYXBpZGx5KSAyOC4yMjQgVGoKLS0yOTIgVEptCi0oZGltaW5pc2hpbmcpIDQ3LjYxMTMgVGoKLS0yOTIgVEptCi0obWFyKSAxNS40OTE4IFRqCi0xOCBUSm0KLShnaW5hbCkgMTkuOTI1MiBUagotLTI5MSBUSm0KLShyZXR1cm5zLikgMzAuMTU2OCBUagotLTg3MSBUSm0KLShNb3N0KSAyMC40ODMxIFRqCi0tMjkyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MiBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI5MiBUSm0KLShjb21lcykgMjUuNDU0NCBUagotLTI5MiBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MiBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjkyIFRKbQotKHR3KSA5Ljk2MjYgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTI5MiBUSm0KLShvcikgOC4yOTg4NSBUagotNzIgMjEzLjg1IFRkCi0odGhyZWUpIDE5LjkxNTIgVGoKLS0yMzIgVEptCi0oaHVuZHJlZCkgMzIuNjQ3NCBUagotLTIzMiBUSm0KLShrKSA0Ljk4MTMgVGoKLS0yMzIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMzIgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yMzIgVEptCi0oc2l6ZSwpIDE3Ljk4MjUgVGoKLS0yMzUgVEptCi0oYSkgNC40MjMzOSBUagotLTIzMiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY3QpIDExLjYxNjQgVGoKLS0yMzIgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9ydGgpIDE2LjA0OTcgVGoKLS0yMzIgVEptCi0oYmVhcmluZykgMjkuODc3OCBUagotLTIzMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjMyIFRKbQotKG1pbmQpIDIwLjQ4MzEgVGoKLS0yMzIgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjMxIFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLVsxIDAgMCAxIDM1NC4wMjUgMjEzLjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1NC4wMjUgLTIxMy44NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU0LjAyNSAyMTMuODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDM4My45MTMgMjEzLjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4My45MTMgLTIxMy44NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg2LjIyMyAyMTMuODUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob24pIDkuOTYyNiBUagotLTIzMiBUSm0KLShzbWFsbCkgMjEuNTg5IFRqCi0tMjMyIFRKbQotKG1hY2hpbmVzLikgNDAuMTE5NCBUagotLTMwNCBUSm0KLShJdCkgNi4wODcxNSBUagotLTIzMiBUSm0KLShpcykgNi42NDUwNSBUagotLTIzMiBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjMxIFRKbQotKGltcG9ydGFudCkgMzguNzQ0NiBUagotNzIgMjAxLjg5NSBUZAotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYXBwcmVjaWF0ZSkgNDAuOTM2MyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShyZXF1aXJlbWVudCkgNDguMTM5MyBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKHRpbWUpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY2hvaWNlKSAyNi4wMDI0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKHNpemUuKSAxNy45ODI1IFRqCi1bMSAwIDAgMSA3MiAxOTkuNzM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODkuNzc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzkuOTc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzg4IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zODkgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM4OCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4OCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0zODkgVEptCi0oOTAwaykgMTkuOTI1MiBUagotLTM4OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTM4OSBUSm0KLShzaXplLCkgMTcuOTgyNSBUagotWzEgMCAwIDEgMzAyLjAwMiAxNzkuOTc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMi4wMDIgLTE3OS45NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMi4wMDIgMTc5Ljk3NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNDMuODQ2IDE3OS45NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQzLjg0NiAtMTc5Ljk3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ3LjcxNSAxNzkuOTc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zODggVEptCi0ocmVxdWlyZSkgMjguMjE0MSBUagotLTM4OSBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTM4OCBUSm0KLSgzNzAwKSAxOS45MjUyIFRqCi0tMzg5IFRKbQotKGtieXRlcykgMjYuMDEyMyBUagotLTM4OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzg5IFRKbQotKGRlY29tcHJlc3MuKSA0OS41MjQxIFRqCi03MiAxNjguMDIyIFRkCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tNDI0IFRKbQotKHN1cHBvcnQpIDI5Ljg4NzggVGoKLS00MjUgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTQyNCBUSm0KLShvZikgOC4yOTg4NSBUagotLTQyNCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tNDI1IFRKbQotKFwwMDJsKSA4LjMwODgxIFRqCi0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLS00MjUgVEptCi0ob24pIDkuOTYyNiBUagotLTQyNCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDI0IFRKbQotKDQpIDQuOTgxMyBUagotLTQyNSBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFieXRlKSAyMS41NzkgVGoKLS00MjQgVEptCi0obWFjaGluZSwpIDM2LjI0MzkgVGoKLVsxIDAgMCAxIDM0OC4yNzIgMTY4LjAyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDguMjcyIC0xNjguMDIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDguMjcyIDE2OC4wMjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMzkwLjExNSAxNjguMDIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5MC4xMTUgLTE2OC4wMjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5NC4zNDIgMTY4LjAyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShoYXMpIDEzLjI4MDEgVGoKLS00MjQgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS00MjUgVEptCi0ob3B0aW9uKSAyNS40NjQ0IFRqCi0tNDI0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MjQgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTQyNCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi03MiAxNTYuMDY3IFRkCi0oYXBwcm94aW1hdGVseSkgNTcuNTUzOSBUagotLTI4MSBUSm0KLShoYWxmKSAxNS40OTE4IFRqCi0tMjgxIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4MCBUSm0KLShhbW91bnQpIDI5Ljg4NzggVGoKLS0yODEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODEgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjg4IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjgxIFRKbQotKDIzMDApIDE5LjkyNTIgVGoKLS0yODEgVEptCi0oa2J5dGVzLikgMjguNTAzIFRqCi0tODA1IFRKbQotKERlY29tcHJlc3Npb24pIDYxLjk3NzMgVGoKLS0yODAgVEptCi0oc3BlZWQpIDIyLjY4NDggVGoKLS0yODEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODEgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTI4MSBUSm0KLShoYWx2KSAxNy4xNTU2IFRqCi0xNSBUSm0KLShlZCwpIDExLjg5NTMgVGoKLS0yODggVEptCi0oc28pIDguODU2NzUgVGoKLS0yODEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjgxIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotNzIgMTQ0LjExMiBUZAotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0ob3B0aW9uKSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0od2hlcmUpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0obmVjZXNzYXJ5KSAzOC43MjQ2IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjIwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShyZWxlKSAxNC45MzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAzYWcpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLVsxIDAgMCAxIDMwNS4wMjQgMTQ0LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDUuMDI0IC0xNDQuMTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuMDI0IDE0NC4xMTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXMpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDMxNi45NzkgMTQ0LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuOTc5IC0xNDQuMTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTYuOTc5IDE0NC4xMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTQxLjk1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMxLjk5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTIyLjE5NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotLTIwNCBUSm0KLShnZW5lcmFsLCkgMzEuODEwNiBUagotLTIxNCBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0yMDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMDUgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlc3QpIDE2LjA0OTcgVGoKLS0yMDUgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yMDQgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTIwNSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yMDQgVEptCi0oY29uc3RyYWludHMpIDQzLjE2NzkgVGoKLS0yMDQgVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yMTQgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yMDQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTIwNSBUSm0KLShtYXhpbWlzZXMpIDQyLjYyIFRqCi0tMjA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTIwNSBUSm0KLShhY2hpZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlZC4pIDExLjg5NTMgVGoKLTcyIDExMC4yMzkgVGQKLShDb21wcmVzc2lvbikgNTIuNTgyNiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKHNwZWVkKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLSh2aXJ0dWFsbHkpIDMzLjc2MzMgVGoKLS0yNTAgVEptCi0odW5hZikgMTcuNzAzNSBUagotMjUgVEptCi0oZmVjdGVkKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oc2l6ZS4pIDE3Ljk4MjUgVGoKLVsxIDAgMCAxIDcyIDEwOC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTk4LjExOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDg4LjMyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbm90aGVyKSAzMi42NDc0IFRqCi0tMjk2IFRKbQotKHNpZ25pXDAwMmNhbnQpIDQxLjUxNDIgVGoKLS0yOTYgVEptCi0ocG9pbnQpIDIwLjQ4MzEgVGoKLS0yOTUgVEptCi0oYXBwbGllcykgMjguMjI0IFRqCi0tMjk2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTYgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI5NiBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5NiBUSm0KLShcMDAydCkgOC4zMDg4MSBUagotLTI5NiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjk2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTUgVEptCi0oc2luZ2xlKSAyMy44MDA3IFRqCi0tMjk2IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjk2IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMjk2IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yOTYgVEptCi0obWVhbnMpIDI1LjQ1NDQgVGoKLS0yOTYgVEptCi0obW9zdCkgMTkuMzc3MyBUagotLTI5NSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjk2IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTI5NiBUSm0KLShlbmNvdW50ZXIpIDM5LjI4MjUgVGoKLS0yOTYgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI5NiBUSm0KLShhKSA0LjQyMzM5IFRqCi03MiA3Ni4zNjU4IFRkCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI5MCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI5MCBUSm0KLShzaXplLikgMTcuOTgyNSBUagotLTg1OSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yOTAgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMjkwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjkwIFRKbQotKHJlYWwpIDE0LjkzMzkgVGoKLS0yOTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjg5IFRKbQotKHRvdWNoZWQpIDMxLjU0MTYgVGoKLS0yOTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTAgVEptCi0ocHJvcG9ydGlvbmFsKSA0OS4yNTUxIFRqCi0tMjkwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yOTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKFwwMDJsZSwpIDE1LjIyMjkgVGoKLS0zMDAgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI5MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI5MCBUSm0KLShzbWFsbGVyKSAyOS4zMjk5IFRqCi1bMSAwIDAgMSA3MiA1MC44NTE4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDUpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogOSA5Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzYyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjIgVEptCi0oYmxvY2suKSAyNC42Mjc1IFRqCi0tMTI5MyBUSm0KLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTM2MiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4YW1wbGUsKSAzMS44MjA1IFRqCi0tMzkwIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMzYyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjIgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzYyIFRKbQotKDIwLDAwMCkgMjcuMzk3MiBUagotLTM2MiBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzYyIFRKbQotKGxvbmcpIDE3LjcxMzUgVGoKLS0zNjIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjIgVEptCi0oXDAwM2FnKSAxNC45NDM5IFRqCi1bMSAwIDAgMSA0MDYuNTI4IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjUyOCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjUyOCA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC05KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA0MTguNDgzIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE4LjQ4MyAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIyLjA5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTM2MiBUSm0KLShjYXVzZSkgMjIuMTI2OSBUagotLTM2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjIgVEptCi0oY29tcHJlc3NvcikgNDUuOTI3NiBUagotLTM2MiBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA2OTguMDgyIFRkCi0oYWxsb2NhdGUpIDMwLjk4MzcgVGoKLS0yNzEgVEptCi0oYXJvdW5kKSAyNy42NjYxIFRqCi0tMjcyIFRKbQotKDc2MDBrKSAyNC45MDY1IFRqCi0tMjcxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3NyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNzEgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI3MiBUSm0KLSh0b3VjaCkgMjIuMTM2OSBUagotLTI3MSBUSm0KLSg0MDBrKSAxOS45MjUyIFRqCi0tMjcyIFRKbQotKCspIDUuNjE4OTEgVGoKLS0yNzEgVEptCi0oMjAwMDApIDI0LjkwNjUgVGoKLS0yNzIgVEptCi0oKikgNC45ODEzIFRqCi0tMjcxIFRKbQotKDgpIDQuOTgxMyBUagotLTI3MiBUSm0KLSg9KSA1LjYxODkxIFRqCi0tMjcxIFRKbQotKDU2MCkgMTQuOTQzOSBUagotLTI3MiBUSm0KLShrYnl0ZXMpIDI2LjAxMjMgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0oaXQuKSA4LjAyOTg2IFRqCi0tNzQ4IFRKbQotKFNpbWlsYXJseSkgMzcuMDkwOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzIgVEptCi0oZGVjb21wcmVzc29yKSA1NS4zMzIzIFRqCi03MiA2ODYuMTI3IFRkCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotLTI1MCBUSm0KLSgzNzAwaykgMjQuOTA2NSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLSh0b3VjaCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLSgxMDBrKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKCspIDUuNjE4OTEgVGoKLS0yNTAgVEptCi0oMjAwMDApIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0oKikgNC45ODEzIFRqCi0tMjUwIFRKbQotKDQpIDQuOTgxMyBUagotLTI1MCBUSm0KLSg9KSA1LjYxODkxIFRqCi0tMjUwIFRKbQotKDE4MCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShrYnl0ZXMuKSAyOC41MDMgVGoKLVsxIDAgMCAxIDcyIDY4My45N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc0LjAwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIZXJlKSAxOS4zNTczIFRqCi0tMjkzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTMgVEptCi0odGFibGUpIDE5LjM2NzMgVGoKLS0yOTQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTMgVEptCi0oc3VtbWFyaXNlcykgNDcuMDQzNCBUagotLTI5NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTMgVEptCi0obWF4aW11bSkgNDAuNDA4MyBUagotLTI5NCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yOTMgVEptCi0odXNhZ2UpIDIyLjY4NDggVGoKLS0yOTQgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjkzIFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oZmVyZW50KSAyMy4yMzI4IFRqCi0tMjk0IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjkzIFRKbQotKHNpemVzLikgMjEuODU3OSBUagotLTg4MSBUSm0KLShBbHNvKSAxOC44MTk0IFRqCi0tMjkzIFRKbQotKHJlY29yZGVkKSAzNC44NDkyIFRqCi0tMjk0IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NCBUSm0KLSh0b3RhbCkgMTcuNzEzNSBUagotNzIgNjUyLjI1NCBUZAotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yODkgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI4OSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yODkgVEptCi0oMTQpIDkuOTYyNiBUagotLTI4OSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjkwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShDYWxnKSAxOC44MTk0IFRqCi01IFRKbQotKGFyeSkgMTIuNzIyMiBUagotLTI4OSBUSm0KLShUKSA2LjA4NzE1IFRqCi03MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjg5IFRKbQotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjg5IFRKbQotKENvcnB1cykgMjguNzgyIFRqCi0tMjg5IFRKbQotKHRvdGFsbGluZykgMzMuMjE1MyBUagotLTI4OSBUSm0KLSgzLDE0MSw2MjIpIDM5Ljg1MDQgVGoKLS0yOTAgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi0tODU0IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yOTAgVEptCi0oY29sdW1uKSAyOS44ODc4IFRqCi0tMjg5IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLTcyIDY0MC4yOTkgVGQKLShzb21lKSAyMS4wMzEgVGoKLS0yNTMgVEptCi0oZmVlbCkgMTQuOTMzOSBUagotLTI1MyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTMgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNTMgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmllcykgMTguODA5NCBUagotLTI1MyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUzIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUzIFRKbQotKHNpemUuKSAxNy45ODI1IFRqCi0tNjM4IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjUzIFRKbQotKFwwMDJndXJlcykgMjcuMTE4MiBUagotLTI1MyBUSm0KLSh0ZW5kKSAxNy4xNTU2IFRqCi0tMjU0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTMgVEptCi0odW5kZXJzdGF0ZSkgNDAuOTQ2MyBUagotLTI1MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTMgVEptCi0oYWR2KSAxNC4zODYgVGoKLTI1IFRKbQotKGFudGFnZSkgMjYuMDAyNCBUagotLTI1MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MyBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotLTI1MyBUSm0KLShibG9jaykgMjIuMTM2OSBUagotNzIgNjI4LjM0NCBUZAotKHNpemVzKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotLTI1MCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI1MCBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oQ29ycHVzKSAyOC43ODIgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oZG9taW5hdGVkKSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oc21hbGxlcikgMjkuMzI5OSBUagotLTI1MCBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotWzEgMCAwIDEgNzIgNjI2LjE4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE1Ni40MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTU1LjQxNyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDE1MS44MzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC02MTYuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjMuOTUyIDYxNi44MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQ29tcHJlc3MpIDQ3LjgyMDUgVGoKLS0xMjc4IFRKbQotKERlY29tcHJlc3MpIDU5Ljc3NTYgVGoKLS0xMjc4IFRKbQotKERlY29tcHJlc3MpIDU5Ljc3NTYgVGoKLS0xMjc4IFRKbQotKENvcnB1cykgMzUuODY1NCBUagotOTAgNjA0Ljg2NyBUZAotKEZsYWcpIDIzLjkxMDIgVGoKLS0yMTMwIFRKbQotKHVzYWdlKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSh1c2FnZSkgMjkuODg3OCBUagotLTI5ODIgVEptCi0oLXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odXNhZ2UpIDI5Ljg4NzggVGoKLS0yMTMwIFRKbQotKFNpemUpIDIzLjkxMDIgVGoKLTk0LjI0NCA1ODAuOTU2IFRkCi0oLTEpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDEyMDBrKSAyOS44ODc4IFRqCi0tMjk4MiBUSm0KLSg1MDBrKSAyMy45MTAyIFRqCi0tMzgzNCBUSm0KLSgzNTBrKSAyMy45MTAyIFRqCi0tMjU1NiBUSm0KLSg5MTQ3MDQpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1NjkuMDAxIFRkCi0oLTIpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDIwMDBrKSAyOS44ODc4IFRqCi0tMjk4MiBUSm0KLSg5MDBrKSAyMy45MTAyIFRqCi0tMzgzNCBUSm0KLSg2MDBrKSAyMy45MTAyIFRqCi0tMjU1NiBUSm0KLSg4Nzc3MDMpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1NTcuMDQ2IFRkCi0oLTMpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDI4MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgxMzAwaykgMjkuODg3OCBUagotLTM4MzQgVEptCi0oODUwaykgMjMuOTEwMiBUagotLTI1NTYgVEptCi0oODYwMzM4KSAzNS44NjU0IFRqCi05NC4yNDQgNTQ1LjA5MSBUZAotKC00KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSgzNjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMTcwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDExMDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4NDY4OTkpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1MzMuMTM2IFRkCi0oLTUpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDQ0MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgyMTAwaykgMjkuODg3OCBUagotLTM0MDggVEptCi0oMTM1MGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDg0NTE2MCkgMzUuODY1NCBUagotOTQuMjQ0IDUyMS4xODEgVGQKLSgtNikgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oNTIwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDI1MDBrKSAyOS44ODc4IFRqCi0tMzQwOCBUSm0KLSgxNjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oODM4NjI2KSAzNS44NjU0IFRqCi05NC4yNDQgNTA5LjIyNSBUZAotKC03KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSg2MTAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMjkwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDE4NTBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4MzQwOTYpIDM1Ljg2NTQgVGoKLTk0LjI0NCA0OTcuMjcgVGQKLSgtOCkgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oNjgwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDMzMDBrKSAyOS44ODc4IFRqCi0tMzQwOCBUSm0KLSgyMTAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oODI4NjQyKSAzNS44NjU0IFRqCi05NC4yNDQgNDg1LjMxNSBUZAotKC05KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSg3NjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMzcwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDIzNTBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4Mjg2NDIpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDcyIDQ2OS43NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NTkuODExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzUuMDIxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjYuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFJFQ08pIDU5LjY4MjQgVGoKLTUwIFRKbQotKFZFUklORykgNzkuMjA0NyBUagotLTI3OCBUSm0KLShEKSAxNC45MTU0IFRqCi00MCBUSm0KLShBKSAxNC45MTU0IFRqCi05MCBUSm0KLShUKSAxMi42MjIzIFRqCi05MCBUSm0KLShBKSAxNC45MTU0IFRqCi0tMjc4IFRKbQotKEZSKSAyNy41Mzc4IFRqCi0yMCBUSm0KLShPTSkgMzMuMjgwOCBUagotLTI3OCBUSm0KLShEKSAxNC45MTU0IFRqCi00MCBUSm0KLShBTUEpIDQ3LjAzOTQgVGoKLTUwIFRKbQotKEdFRCkgNDQuNzY3IFRqCi03MiA0MTAuMjMgVGQKLShGSUxFUykgNTguNTQ2MiBUagotWzEgMCAwIDEgNzIgNDA5Ljk3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDAwLjAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODguMzEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDM4OC4zMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMzg4LjMxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA1LjEzOCAzODguMzEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0zMjYgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTMyNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzI2IFRKbQotKGJsb2NrcywpIDI4LjUwMyBUagotLTM0NiBUSm0KLSh1c3VhbGx5KSAyOC43ODIgVGoKLS0zMjYgVEptCi0oOTAwa2J5dGVzKSA0MC45NTYyIFRqCi0tMzI2IFRKbQotKGxvbmcuKSAyMC4yMDQyIFRqCi0tMTA3NyBUSm0KLShFYWNoKSAxOS45MTUyIFRqCi0tMzI2IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzI3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzI2IFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0zMjYgVEptCi0oaW5kZXBlbmRlbnRseSkgNTYuNDQ4MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTEwNzcgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMjYgVEptCi0oYSkgNC40MjMzOSBUagotLTMyNiBUSm0KLShtZWRpYSkgMjQuMzQ4NiBUagotLTMyNiBUSm0KLShvcikgOC4yOTg4NSBUagotNzIgMzc2LjM1NyBUZAotKHRyYW5zbWlzc2lvbikgNTAuMzcwOSBUagotLTMxOSBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTMxOCBUSm0KLShjYXVzZXMpIDI2LjAwMjQgVGoKLS0zMTkgVEptCi0oYSkgNC40MjMzOSBUagotLTMxOCBUSm0KLShtdWx0aS1ibG9jaykgNDYuNDk1NSBUagotWzEgMCAwIDEgMjM0LjUxOCAzNzYuMzU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC41MTggLTM3Ni4zNTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNC41MTggMzc2LjM1NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAyNTguNDI5IDM3Ni4zNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU4LjQyOSAtMzc2LjM1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYxLjYwMyAzNzYuMzU3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMxOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzE4IFRKbQotKGJlY29tZSkgMzAuOTgzNyBUagotLTMxOSBUSm0KLShkYW1hZ2VkLCkgMzguNDU1NiBUagotLTMzNiBUSm0KLShpdCkgNS41MzkyMSBUagotLTMxOCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0zMTkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTggVEptCi0ocG9zc2libGUpIDMyLjY1NzQgVGoKLS0zMTkgVEptCi0odG8pIDcuNzUwOSBUagotLTMxOCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMzE5IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTMxOCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDM2NC40MDIgVGQKLSh1bmRhbWFnZWQpIDQ1LjkyNzYgVGoKLS0yNTAgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLVsxIDAgMCAxIDcyIDM2Mi4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1Mi4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM0Mi40ODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMzU4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zNTcgVEptCi0ocmVwcmVzZW50YXRpb24pIDU2LjQzODEgVGoKLS0zNTggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNTcgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTM1OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTM1OCBUSm0KLShpcykgNi42NDUwNSBUagotLTM1NyBUSm0KLShkZWxpbWl0ZWQpIDM3LjYzODcgVGoKLS0zNTggVEptCi0oYnkpIDkuOTYyNiBUagotLTM1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzU4IFRKbQotKDQ4LWJpdCkgMjMuODAwNyBUagotLTM1OCBUSm0KLShwYXR0ZXJuLCkgMzAuMTU2OCBUagotLTM4NCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM1OCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMzU3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzU4IFRKbQotKHBvc3NpYmxlKSAzMi42NTc0IFRqCi0tMzU3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNTggVEptCi0oXDAwMm5kKSAxNS41MDE4IFRqCi0tMzU4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMzMwLjUyOSBUZAotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg2IFRKbQotKGJvdW5kYXJpZXMpIDQzLjcxNTkgVGoKLS0yODYgVEptCi0od2l0KSAxMi43MzIyIFRqCi0xIFRKbQotKGgpIDQuOTgxMyBUagotLTI4NiBUSm0KLShyZWFzb25hYmxlKSA0Mi42MDAxIFRqCi0tMjg2IFRKbQotKGNlcnRhaW50eSkgMzQuODU5MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTgzNSBUSm0KLShFYWNoKSAxOS45MTUyIFRqCi0tMjg1IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg2IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yODYgVEptCi0oY2FycmllcykgMjYuNTUwMyBUagotLTI4NiBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yODUgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTI4NiBUSm0KLSgzMi1iaXQpIDIzLjgwMDcgVGoKLS0yODYgVEptCi0oQ1JDLCkgMjIuNDI1OCBUagotLTI4NiBUSm0KLShzbykgOC44NTY3NSBUagotLTI4NSBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS0yODYgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjg2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI4NiBUSm0KLShiZSkgOS40MDQ2OSBUagotNzIgMzE4LjU3NCBUZAotKGRpc3Rpbmd1aXNoZWQpIDUzLjE0MDUgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh1bmRhbWFnZWQpIDQ1LjkyNzYgVGoKLS0yNTAgVEptCi0ob25lcy4pIDIwLjc1MjEgVGoKLVsxIDAgMCAxIDcyIDMxNi40MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwNi40NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5Ni42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDI5Ni42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjczMSAtMjk2LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ2LjQ0OCAyOTYuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjczIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzIgVEptCi0oc2ltcGxlKSAyNi41NzAzIFRqCi0tMjczIFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yNzMgVEptCi0od2hvc2UpIDI1LjQ1NDQgVGoKLS0yNzIgVEptCi0ocHVycG9zZSkgMzEuNTQxNiBUagotLTI3MyBUSm0KLShpcykgNi42NDUwNSBUagotLTI3MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcyIFRKbQotKHNlYXJjaCkgMjUuNDQ0NSBUagotLTI3MyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNzMgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjcyIFRKbQotKGluKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDM5Mi42NTUgMjk2LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuNjU1IC0yOTYuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuNjU1IDI5Ni42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgNDE2LjU2NiAyOTYuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxNi41NjYgLTI5Ni42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4yODIgMjk2LjY1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI3OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MyBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI3MyBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjcyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjczIFRKbQotKG91dCkgMTIuNzMyMiBUagotNzIgMjg0LjcwMSBUZAotKGludG8pIDE1LjUwMTggVGoKLS0yNTQgVEptCi0oaXRzKSA5LjQxNDY2IFRqCi0tMjU1IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDEyMS40MyAyODQuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMS40MyAtMjg0LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIxLjQzIDI4NC43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgMTQ1LjM0IDI4NC43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ1LjM0IC0yODQuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDcuODc1IDI4NC43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmxlLikgMTUuMjIyOSBUagotLTY0NyBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNTUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjU0IFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTUgVEptCi0odXNlKSAxMy4yODAxIFRqCi1bMSAwIDAgMSAyNDAuMDEgMjg0LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDAuMDEgLTI4NC43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0MC4wMSAyODQuNzAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNjAwIFRKbQotKC10KSAxMS45NTUxIFRqCi1bMSAwIDAgMSAyODcuODMxIDI4NC43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3LjgzMSAtMjg0LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkwLjM2NyAyODQuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTUgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKGVzdCkgMTEuMDY4NCBUagotLTI1NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTQgVEptCi0oaW50ZSkgMTQuOTQzOSBUagotMTUgVEptCi0oZ3JpdHkpIDE4LjgxOTQgVGoKLS0yNTUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU1IFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTI1NCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI1NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1NSBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjU0IFRKbQotKHRob3NlKSAyMS4wMzEgVGoKLTcyIDI3Mi43NDYgVGQKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0odW5kYW1hZ2VkLikgNDguNDE4MiBUagotWzEgMCAwIDEgNzIgMjcwLjU4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjYwLjYyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjUwLjgyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMjUwLjgyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0yNTAuODI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuMDk5IDI1MC44MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlcykgOC4yOTg4NSBUagotLTYzOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNjM5IFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTYzOSBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50LCkgMzIuMzc4NSBUagotLTczNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS02MzkgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tNjM5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTYzOSBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS02MzkgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTczNyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTYzOSBUSm0KLSh3cml0ZXMpIDI0LjM0ODYgVGoKLS02MzkgVEptCi0oYSkgNC40MjMzOSBUagotLTYzOSBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS02MzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS02NDAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotWzEgMCAwIDEgNzIgMjM4Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM4Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjM4Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShyZWMwMDAxZmlsZS5iejIpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE2MS42NjQgMjM4Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuNjY0IC0yMzguODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuNjY0IDIzOC44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTY5LjA3MiAyMzguODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS4wNzIgLTIzOC44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OS4wNzIgMjM4Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShyZWMwMDAyZmlsZS5iejIpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDI1OC43MzYgMjM4Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTguNzM2IC0yMzguODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTguNzM2IDIzOC44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTQ5NCBUSm0KLShldGMsKSAxNC4xMDcgVGoKLS00OTMgVEptCi0oY29udGFpbmluZykgNDIuMDYyMSBUagotLTQ0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NDUgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHRyYWN0ZWQpIDMyLjA4OTUgVGoKLS00NDUgVEptCi0oYmxvY2tzLikgMjguNTAzIFRqCi0tMTc4OSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS00NDUgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tNDQ1IFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tNDQ1IFRKbQotKGFyZSkgMTIuMTY0MyBUagotNzIgMjI2LjkxOCBUZAotKGRlc2lnbmVkKSAzNS40MTcgVGoKLS0zMzcgVEptCi0oc28pIDguODU2NzUgVGoKLS0zMzcgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMzNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzcgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMzM3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM3IFRKbQotKHdpbGRjKSAyMi4xMzY5IFRqCi0xIFRKbQotKGFyZHMpIDE2LjU5NzcgVGoKLS0zMzcgVEptCi0oaW4pIDcuNzUwOSBUagotLTMzNyBUSm0KLShzdWJzZXF1ZW50KSA0NC4yNzM4IFRqCi0tMzM3IFRKbQotKHByb2Nlc3NpbmcpIDQyLjYxIFRqCi0tMzM3IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMzM3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMzNyBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4YW1wbGUsKSAzMS44MjA1IFRqCi1bMSAwIDAgMSAzOTYuNTM4IDIyNi45MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk2LjUzOCAtMjI2LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk2LjUzOCAyMjYuOTE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNjAwIFRKbQotKC1kYykgMTcuOTMyNyBUagotLTYwMCBUSm0KLShyZWMpIDE3LjkzMjcgVGoKLTQ3NC4yNDcgMjI1LjE3NCBUZAotKCopIDUuOTc3NTYgVGoKLTQ4MC4yMjQgMjI2LjkxOCBUZAotKGZpbGUuYnoyKSA0Ny44MjA1IFRqCi0tNjAwIFRKbQotKD4pIDUuOTc3NTYgVGoKLTcyIDIxNC45NjMgVGQKLShyZWNvdmVyZWRfZGF0YSkgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAyMTQuOTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTIxNC45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OC4xNzcgMjE0Ljk2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtLSkgNi42MzUwOSBUagotLTI1MCBUSm0KLShsaXN0cykgMTYuMDU5NyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb3JyZWN0KSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG9yZGVyKSAyMS4wMjExIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyMTMuNjUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMDMuNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5My4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDE5My4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjczMSAtMTkzLjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ1LjkzIDE5My4wNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjIxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjIwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjIxIFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yMjEgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjIwIFRKbQotKGRlYWxpbmcpIDI5LjMyOTkgVGoKLS0yMjEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTIyMSBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSAzMDcuMjI5IDE5My4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA3LjIyOSAtMTkzLjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA3LjIyOSAxOTMuMDQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5iejIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDMzMS4xNCAxOTMuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS4xNCAtMTkzLjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMzLjMzOCAxOTMuMDQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjI3IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjIwIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjIxIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjEgVEptCi0oY29udGFpbikgMjkuMzI5OSBUagotLTIyMCBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIyMSBUSm0KLShibG9ja3MuKSAyOC41MDMgVGoKLS02MDAgVEptCi0oSXQpIDYuMDg3MTUgVGoKLS0yMjEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMjEgVEptCi0oY2xlYXJseSkgMjcuMTA4MiBUagotNzIgMTgxLjA5IFRkCi0oZnV0aWxlKSAyMS4wMzEgVGoKLS0yODkgVEptCi0odG8pIDcuNzUwOSBUagotLTI4OSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yODkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yODkgVEptCi0ob24pIDkuOTYyNiBUagotLTI4OSBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS0yODkgVEptCi0oc2luZ2xlLWJsb2NrKSA0OS4yNTUxIFRqCi0tMjkwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLTEgVEptCi0oLCkgMi40OTA2NSBUagotLTI5OSBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI4OSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjkwIFRKbQotKGRhbWFnZWQpIDM1Ljk2NSBUagotLTI4OSBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI4OSBUSm0KLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yODkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODkgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmVkLikgMTkuNjM2MyBUagotLTg1NCBUSm0KLShJZikgNi42MzUwOSBUagotLTI4OSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTAgVEptCi0od2lzaCkgMTguODE5NCBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg5IFRKbQotKG1pbmltaXNlKSAzNy4wOTA4IFRqCi03MiAxNjkuMTM1IFRkCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTMyMCBUSm0KLShwb3RlbnRpYWwpIDM0Ljg2OTEgVGoKLS0zMjAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxOSBUSm0KLShsb3NzKSAxNS41MDE4IFRqCi0tMzIwIFRKbQotKHRocm91Z2gpIDMwLjk5MzYgVGoKLS0zMjAgVEptCi0obWVkaWEpIDI0LjM0ODYgVGoKLS0zMjAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMTkgVEptCi0odHJhbnNtaXNzaW9uKSA1MC4zNzA5IFRqCi0tMzIwIFRKbQotKGVycm9ycywpIDI1LjcyMzQgVGoKLS0zMzcgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzIwIFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMzIwIFRKbQotKGNvbnNpZGVyKSAzMy43NTMzIFRqCi0tMzIwIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMzE5IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjAgVEptCi0oYSkgNC40MjMzOSBUagotLTMyMCBUSm0KLShzbWFsbGVyKSAyOS4zMjk5IFRqCi0tMzIwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi03MiAxNTcuMTc5IFRkCi0oc2l6ZS4pIDE3Ljk4MjUgVGoKLVsxIDAgMCAxIDcyIDE1Ny4wOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ3LjExN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTIyLjQyNiBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi43LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShQRVJGT1JNQU5DRSkgMTYxLjgxOCBUagotLTI3OCBUSm0KLShOTykgMzAuOTg3NyBUagotNDAgVEptCi0oVEVTKSA0MC4xODA4IFRqCi1bMSAwIDAgMSA3MiAxMjIuMTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTIuMjA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDAuNTA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTMwNSBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMzA0IFRKbQotKHBoYXNlKSAyMi42ODQ4IFRqCi0tMzA1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA0IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMzA1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhdGhlcnMpIDIzLjc5MDcgVGoKLS0zMDQgVEptCi0odG9nZXRoZXIpIDMyLjY0NzQgVGoKLS0zMDUgVEptCi0oc2ltaWxhcikgMjcuNjc2MSBUagotLTMwNCBUSm0KLShzdHJpbmdzKSAyNi41NzAzIFRqCi0tMzA1IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMDQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA1IFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLS05NDcgVEptCi0oQmVjYXVzZSkgMzMuMTk1NCBUagotLTMwNSBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwNCBUSm0KLSh0aGlzLCkgMTYuODg2NiBUagotLTMxOSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzA0IFRKbQotKGNvbnRhaW5pbmcpIDQyLjA2MjEgVGoKLS0zMDUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLTcyIDg4LjU1MzQgVGQKLShsb25nKSAxNy43MTM1IFRqCi0tMjg2IFRKbQotKHJ1bnMpIDE3LjE1NTYgVGoKLS0yODUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODYgVEptCi0ocmVwZWF0ZWQpIDMzLjc0MzMgVGoKLS0yODUgVEptCi0oc3ltYm9scywpIDM1LjcwNiBUagotLTI5NSBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODYgVEptCi0oImFhYmFhYmFhYmFhYikgNTkuMzc3MSBUagotLTI4NSBUSm0KLSguLi4iKSAxMS41MzY3IFRqCi0tNTcxIFRKbQotKFwocmVwZWF0ZWQpIDM3LjA2MDkgVGoKLS0yODYgVEptCi0oc2UpIDguMjk4ODUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhbCkgMTQuOTMzOSBUagotLTI4NiBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjg1IFRKbQotKHRpbWVzXCkpIDI0LjkwNjUgVGoKLS0yODYgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjg2IFRKbQotKGNvbSkgMTcuMTU1NiBUagotMSBUSm0KLShwcmVzcykgMjAuNDczMSBUagotLTI4NiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjg2IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0od2x5KSAxNC45NDM5IFRqCi03MiA3Ni41OTgzIFRkCi0odGhhbikgMTcuMTU1NiBUagotLTMyMiBUSm0KLShub3JtYWwuKSAzMC43MTQ3IFRqCi0tNTI0IFRKbQotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMzIyIFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMzIxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzIyIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMjIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzIxIFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0zMjIgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi0tMzIxIFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0zMjIgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMzIxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMzIyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzIxIFRKbQotKHJlc3BlY3QuKSAzMC43MDQ3IFRqCi0tMTA1MCBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0zMjEgVEptCi0ocmF0aW8pIDE4LjI2MTQgVGoKLS0zMjIgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotWzEgMCAwIDEgNzIgNTAuODUxOF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDMuMDYzMyAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni4zMzIgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzOS4zOTUgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg2KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDEwIDEwCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JzdC1jYXNlKSAzNS40MDcxIFRqCi0tMjg5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjkwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhZ2UtY2FzZSkgNDIuMDMyMiBUagotLTI4OSBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI5MCBUSm0KLSh0aW1lKSAxNy43MTM1IFRqCi0tMjg5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnaW9uKSAxNy43MTM1IFRqCi0tMjg5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg5IFRKbQotKDEwOjEuKSAyMC4yMDQyIFRqCi0tODU3IFRKbQotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjkwIFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXMpIDIxLjU4OSBUagotLTI4OSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMsKSAzMC43MTQ3IFRqCi0tMjk5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI5MCBUSm0KLShcMDAyZ3VyZSkgMjMuMjQyNyBUagotLTI4OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotNzIgNjk4LjA4MiBUZAotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSgxMDA6MS4pIDI1LjE4NTUgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAxODYuMDAyIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg2LjAwMiAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg2LjAwMiA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC12dnZ2KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMTUuODg5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE1Ljg4OSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE4LjM4IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob3B0aW9uKSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0obW9uaXRvcikgMzEuNTUxNiBUagotLTI1MCBUSm0KLShwcm9ncmVzcykgMzMuNzUzMyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGdyZWF0KSAxOS45MTUyIFRqCi0tMjUwIFRKbQotKGRldGFpbCwpIDI0LjYyNzUgVGoKLS0yNTAgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQuKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSA3MiA2OTUuOTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02ODUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKERlY29tcHJlc3Npb24pIDYxLjk3NzMgVGoKLS0yNTAgVEptCi0oc3BlZWQpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odW5hZikgMTcuNzAzNSBUagotMjUgVEptCi0oZmVjdGVkKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlc2UpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocGhlbm9tZW5hLikgNDguNDE4MiBUagotWzEgMCAwIDEgNzIgNjc0LjAwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjY0LjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjU0LjI0NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2NTQuMjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTY1NC4yNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC44NjMgNjU0LjI0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1c3VhbGx5KSAyOC43ODIgVGoKLS0yOTkgVEptCi0oYWxsb2NhdGVzKSAzNC44NTkxIFRqCi0tMjk4IFRKbQotKHNlKSA4LjI5ODg1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYWwpIDE0LjkzMzkgVGoKLS0yOTkgVEptCi0obWUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhYnl0ZXMpIDI1LjQ1NDQgVGoKLS0yOTggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjk5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTggVEptCi0ob3BlcmF0ZSkgMjkuMzE5OSBUagotLTI5OSBUSm0KLShpbiwpIDEwLjI0MTYgVGoKLS0zMTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTggVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI5OSBUSm0KLShjaGFyKSAxNy4xNDU2IFRqCi0xOCBUSm0KLShnZXMpIDEzLjI4MDEgVGoKLS0yOTggVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yOTkgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjk5IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjk4IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTkgVEptCi0oYSkgNC40MjMzOSBUagotLTI5OCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaXJseSkgMTguMjYxNCBUagotLTI5OSBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLTcyIDY0Mi4yOTEgVGQKLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhc2hpb24uKSAyOC41MDMgVGoKLS03NDMgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI3MCBUSm0KLShtZWFucykgMjUuNDU0NCBUagotLTI3MSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjcwIFRKbQotKHBlcmZvcm1hbmNlLCkgNTIuODMxNyBUagotLTI3NiBUSm0KLShib3RoKSAxNy43MTM1IFRqCi0tMjcwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3MSBUSm0KLShjb21wcmVzc2luZykgNTAuMzYwOSBUagotLTI3MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MSBUSm0KLShkZWNvbXByZXNzaW5nLCkgNjIuMjU2MyBUagotLTI3NSBUSm0KLShpcykgNi42NDUwNSBUagotLTI3MSBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlbHkpIDE3LjE1NTYgVGoKLS0yNzAgVEptCi0oZGV0ZXJtaW5lZCkgNDQuODIxNyBUagotLTI3MSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjcwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MSBUSm0KLShzcGVlZCkgMjIuNjg0OCBUagotNzIgNjMwLjMzNiBUZAotKGF0KSA3LjE5MyBUagotLTI5NCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5NCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjk0IFRKbQotKG1hY2hpbmUpIDMzLjc1MzMgVGoKLS0yOTUgVEptCi0oY2EpIDguODQ2NzkgVGoKLTEgVEptCi0obikgNC45ODEzIFRqCi0tMjk1IFRKbQotKHNlcnZpY2UpIDI4LjIxNDEgVGoKLS0yOTQgVEptCi0oY2FjaGUpIDIyLjY3NDkgVGoKLS0yOTQgVEptCi0obWlzc2VzLikgMjkuMDYwOSBUagotLTQ0MiBUSm0KLShCZWNhdXNlKSAzMy4xOTU0IFRqCi0tMjk0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjk0IFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMzA2IFRKbQotKHNtYWxsKSAyMS41ODkgVGoKLS0yOTQgVEptCi0oY2hhbmdlcykgMzIuMDg5NSBUagotLTI5NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTQgVEptCi0ocmVkdWNlKSAyNi41NTAzIFRqCi0tMjk0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NSBUSm0KLShtaXNzKSAxOC4yNzE0IFRqCi0tMjk0IFRKbQotKHJhdGUpIDE0LjkzMzkgVGoKLTcyIDYxOC4zODEgVGQKLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUzIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNTMgVEptCi0ob2JzZXJ2KSAyNi41NjAzIFRqCi0xNSBUSm0KLShlZCkgOS40MDQ2OSBUagotLTI1MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUzIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MyBUSm0KLShkaXNwcm9wb3J0aW9uYXRlbHkpIDczLjA1NTcgVGoKLS0yNTMgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI1MyBUSm0KLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjUzIFRKbQotKGltcHJvKSAyMy44MDA3IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVtZW50cy4pIDMwLjcxNDcgVGoKLS02MzkgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MyBUSm0KLShpbWFnaW5lKSAzMi4wOTk1IFRqCi1bMSAwIDAgMSA0MzguOTA5IDYxOC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM4LjkwOSAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM4LjkwOSA2MTguMzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NjguNzk2IDYxOC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4Ljc5NiAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDcxLjMxOCA2MTguMzgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTMgVEptCi0ocGVyZm9ybSkgMzIuMDg5NSBUagotLTI1MyBUSm0KLShiZXN0KSAxNi4wNDk3IFRqCi03MiA2MDYuNDI2IFRkCi0ob24pIDkuOTYyNiBUagotLTI1MCBUSm0KLShtYWNoaW5lcykgMzcuNjI4NyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMjUwIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY2FjaGVzLikgMjkuMDQxIFRqCi1bMSAwIDAgMSA3MiA2MDQuMjY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTQuMzA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzEuNjczIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjguKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKENBKSAyOS44MzA5IFRqCi04MCBUSm0KLShWRUEpIDQyLjQ3MzkgVGoKLTkwIFRKbQotKFRTKSAyNi40MDE2IFRqCi1bMSAwIDAgMSA3MiA1NzEuNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjEuNDUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDkuNzU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEkvTykgMTMuMjgwMSBUagotLTI2OCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI2NyBUSm0KLShtZXNzYWdlcykgMzcuNjI4NyBUagotLTI2OCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNjggVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjY4IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjY3IFRKbQotKGhlbHBmdWwpIDI4LjIyNCBUagotLTI2OCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI2OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI2NyBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTI2OCBUSm0KLShiZS4pIDExLjg5NTMgVGoKLVsxIDAgMCAxIDI5My4zMTMgNTQ5Ljc1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMzEzIC01NDkuNzU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMzEzIDU0OS43NTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyMy4yMDEgNTQ5Ljc1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjMuMjAxIC01NDkuNzU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjUuODY4IDU0OS43NTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odHJpZXMpIDE3LjE1NTYgVGoKLS0yNjggVEptCi0oaGFyZCkgMTcuNzAzNSBUagotLTI2NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY4IFRKbQotKGRldGVjdCkgMjMuNzkwNyBUagotLTI2OCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yNjggVEptCi0oZXJyb3JzKSAyMy4yMzI4IFRqCi0tMjY3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpdCkgMTAuNTIwNSBUagotLTI2OCBUSm0KLShjbGVhbmx5KSAyOC43NzIgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNzIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgNTM3LjggVGQKLShkZXRhaWxzKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2JsZW0pIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oc29tZXRpbWVzKSA0Mi42MiBUagotLTI1MCBUSm0KLShzZWVtKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHJhdGhlcikgMjMuMjMyOCBUagotLTI1MCBUSm0KLShtaXNsZWFkaW5nLikgNDYuMjE2NSBUagotWzEgMCAwIDEgNzIgNTM1LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI1LjY4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE1Ljg4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjgwIFRKbQotKG1hbnVhbCkgMjkuMzI5OSBUagotLTI3OSBUSm0KLShwYWdlKSAxOC44MDk0IFRqCi0tMjgwIFRKbQotKHBlcnRhaW5zKSAzMS41NDE2IFRqCi0tMjgwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzkgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yODAgVEptCi0oMS4wLjUpIDE5LjkyNTIgVGoKLS0yODAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDI1Ni44NCA1MTUuODgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ni44NCAtNTE1Ljg4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU2Ljg0IDUxNS44ODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI4Ni43MjggNTE1Ljg4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODYuNzI4IC01MTUuODgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODYuNzI4IDUxNS44ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTc5OCBUSm0KLShDb21wcmVzc2VkKSA0OS4yNTUxIFRqCi0tMjgwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzkgVEptCi0oY3JlYXRlZCkgMjguNzYyIFRqCi0tMjgwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yODAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjc5IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjgwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjgwIFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMjc5IFRKbQotKGZvcncpIDE4LjgwOTQgVGoKLTEwIFRKbQotKGFyZHMpIDE2LjU5NzcgVGoKLTcyIDUwMy45MjcgVGQKLShhbmQpIDE0LjM4NiBUagotLTI5NCBUSm0KLShiYWNrdykgMjYuMDAyNCBUagotMTAgVEptCi0oYXJkcykgMTYuNTk3NyBUagotLTI5MyBUSm0KLShjb21wYXRpYmxlKSA0NC4yNzM4IFRqCi0tMjk0IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkzIFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXMpIDIxLjU4OSBUagotLTI5NCBUSm0KLShwdWJsaWMpIDI0LjkwNjUgVGoKLS0yOTQgVEptCi0ocmVsZWFzZXMsKSAzNC4wMjIzIFRqCi0tMzA0IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMjk0IFRKbQotKDAuMXBsMiwpIDI3LjY3NjEgVGoKLS0zMDUgVEptCi0oMC45LjApIDE5LjkyNTIgVGoKLS0yOTMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTQgVEptCi0oMC45LjUsKSAyMi40MTU5IFRqCi0tMzA1IFRKbQotKDEuMC4wLCkgMjIuNDE1OSBUagotLTMwNCBUSm0KLSgxLjAuMSwpIDIyLjQxNTkgVGoKLS0zMDUgVEptCi0oMS4wLjIpIDE5LjkyNTIgVGoKLS0yOTQgVEptCi0oYW5kKSAxNC4zODYgVGoKLTcyIDQ5MS45NzIgVGQKLSgxLjAuMywpIDIyLjQxNTkgVGoKLS0yNjMgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjYwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNjAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjYwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjYwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhjZXB0aW9uOikgMzcuMDgwOCBUagotLTMzMCBUSm0KLSgwLjkuMCkgMTkuOTI1MiBUagotLTI2MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2MCBUSm0KLShhYm8pIDE0LjM4NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjYwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI2MCBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLS0yNjAgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI2MCBUSm0KLShtdWx0aXBsZSkgMzMuMjE1MyBUagotLTI2MCBUSm0KLShjb25jYXRlbmF0ZWQpIDUyLjAwNDggVGoKLS0yNjAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgNDgwLjAxNyBUZAotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tMzEwIFRKbQotKDAuMXBsMikgMjUuMTg1NSBUagotLTI1MCBUSm0KLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oZG8pIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGlzOykgMTcuMTY1NiBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHN0b3ApIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTI1MCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDQ3Ny44Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDY3Ljg5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDU4LjA5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgNDU4LjA5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC00NTguMDk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuMTc0IDQ1OC4wOTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yNDUgVEptCi0ocHJpb3IpIDE5LjM2NzMgVGoKLS0yNDUgVEptCi0odG8pIDcuNzUwOSBUagotLTI0NSBUSm0KLSgxLjAuMikgMTkuOTI1MiBUagotLTI0NiBUSm0KLSh1c2VkKSAxOC4yNjE0IFRqCi0tMjQ1IFRKbQotKDMyLWJpdCkgMjMuODAwNyBUagotLTI0NSBUSm0KLShpbnRlKSAxNC45NDM5IFRqCi0xNSBUSm0KLShnZXJzKSAxNi41OTc3IFRqCi0tMjQ1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDUgVEptCi0ocmVwcmVzZW50KSAzNi41MTI5IFRqCi0tMjQ1IFRKbQotKGJpdCkgMTAuNTIwNSBUagotLTI0NiBUSm0KLShwb3NpdGlvbnMpIDM1Ljk4NDkgVGoKLS0yNDUgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0NSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjQ1IFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjQ2IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjQ1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjQ1IFRKbQotKGNvdWxkKSAyMi4xMzY5IFRqCi03MiA0NDYuMTQ0IFRkCi0obm90KSAxMi43MzIyIFRqCi0tMzg0IFRKbQotKGhhbmRsZSkgMjYuNTYwMyBUagotLTM4MyBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMzg0IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zODMgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTM4NCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzgzIFRKbQotKDUxMikgMTQuOTQzOSBUagotLTM4NCBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFieXRlcykgMjUuNDU0NCBUagotLTM4MyBUSm0KLShsb25nLikgMjAuMjA0MiBUagotLTE0MjEgVEptCi0oVikgNy4xOTMgVGoKLTExMSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0zODQgVEptCi0oMS4wLjIpIDE5LjkyNTIgVGoKLS0zODMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zODQgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM4NCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zODMgVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMzg0IFRKbQotKGludHMpIDE0LjM5NiBUagotLTM4MyBUSm0KLShvbikgOS45NjI2IFRqCi0tMzg0IFRKbQotKHNvbWUpIDIxLjAzMSBUagotNzIgNDM0LjE4OSBUZAotKHBsYXRmb3JtcykgMzguMTg2NiBUagotLTI0NSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI0NiBUSm0KLShzdXBwb3J0KSAyOS44ODc4IFRqCi0tMjQ1IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0yNDYgVEptCi0oXChHTlUpIDI0Ljg5NjUgVGoKLS0yNDUgVEptCi0oc3VwcG9ydGVkKSAzOS4yOTI1IFRqCi0tMjQ1IFRKbQotKHRhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2V0cywpIDE4LjU0MDQgVGoKLS0yNDcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDUgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW5kbykgMTcuNzEzNSBUagotMjUgVEptCi0od3NcKS4pIDE2Ljg3NjYgVGoKLS0zMDkgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjQ1IFRKbQotKGVzdGFibGlzaCkgMzQuODY5MSBUagotLTI0NSBUSm0KLSh3aGV0aGVyKSAzMi4wODk1IFRqCi0tMjQ2IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjQ1IFRKbQotKG5vdCkgMTIuNzMyMiBUagotWzEgMCAwIDEgNDY4LjI2OSA0MzQuMTg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OC4yNjkgLTQzNC4xODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OC4yNjkgNDM0LjE4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDU0MCA0MzQuMTg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNDM0LjE4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIyLjIzMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWx0KSAxMy4yOTAxIFRqCi0tMjU1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTUgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU1IFRKbQotKGxpbWl0YXRpb24sKSA0MS4yNDUyIFRqCi0tMjU2IFRKbQotKHJ1bikgMTMuMjgwMSBUagotLTI1NSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1NSBUSm0KLSh3aXRob3V0KSAzMC40NDU3IFRqCi0tMjU1IFRKbQotKGFyKSA3Ljc0MDk0IFRqCi0xOCBUSm0KLShndW1lbnRzLikgMzYuMjUzOSBUagotLTMyNSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI1NSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjU2IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50KSAxMi4xNzQzIFRqCi0tMjU1IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1NSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkKSAxNS41MDE4IFRqCi0tMjU1IFRKbQotKHlvdXJzZWxmKSAzMi42NDc0IFRqCi0tMjU1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjU1IFRKbQotKHVubGltaXRlZCkgMzguMTk2NiBUagotLTI1NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI1NSBUSm0KLShpZikgNi4wODcxNSBUagotNzIgNDEwLjI3OCBUZAotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0ocmVjb21waWxlKSAzOS44NDA0IFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDE3Ni4zMTggNDEwLjI3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuMzE4IC00MTAuMjc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzYuMzE4IDQxMC4yNzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTWF5YmVVSW50NjQpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDI0Mi4wNzEgNDEwLjI3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDIuMDcxIC00MTAuMjc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDQuNTYyIDQxMC4yNzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odW5zaWduZWQpIDM1Ljk3NDkgVGoKLS0yNTAgVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKGludGUpIDE0Ljk0MzkgVGoKLTE1IFRKbQotKGdlcikgMTIuNzIyMiBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNDA4LjEyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk4LjE1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc1LjUyNSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi45LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShBKSAxNC45MTU0IFRqCi01MCBUSm0KLShVVEhPUikgNzMuNDQxIFRqCi1bMSAwIDAgMSA3MiAzNzUuMjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjUuMzA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTMuNjA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEp1bGlhbikgMjMuODAwNyBUagotLTI1MCBUSm0KLShTZSkgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkLCkgMTUuMjEyOSBUagotWzEgMCAwIDEgMTMyLjgwMSAzNTMuNjA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMi44MDEgLTM1My42MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMi44MDEgMzUzLjYwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShqc2V3YXJkQGJ6aXAub3JnKSA5NS42NDEgVGoKLVsxIDAgMCAxIDIyOC40NDMgMzUzLjYwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTYuNDQzIC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM0Mi4xMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzMS42OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yOTkgVEptCi0oaWRlYXMpIDIwLjQ3MzEgVGoKLS0zMDAgVEptCi0oZW1ib2RpZWQpIDM5LjI5MjUgVGoKLS0yOTkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMTY2Ljk0MiAzMzEuNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY2Ljk0MiAtMzMxLjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuOTQyIDMzMS42OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTk2LjgzIDMzMS42OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuODMgLTMzMS42OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk5LjgxMyAzMzEuNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjk5IFRKbQotKGR1ZSkgMTQuMzg2IFRqCi0tMzAwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTkgVEptCi0oXChhdCkgMTAuNTEwNSBUagotLTMwMCBUSm0KLShsZWFzdFwpKSAyMS41NzkgVGoKLS0yOTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjk5IFRKbQotKHBlb3BsZTopIDI5LjMyOTkgVGoKLS00MDkgVEptCi0oTWljaGFlbCkgMzIuNjQ3NCBUagotLTMwMCBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yOTkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTkgVEptCi0oRGEpIDExLjYxNjQgVGoKLTIwIFRKbQotKHZpZCkgMTIuNzMyMiBUagotLTMwMCBUSm0KLShXaGVlbGVyKSAzMy43NDMzIFRqCi0tMjk5IFRKbQotKFwoZm9yKSAxNC45MzM5IFRqCi03MiAzMTkuNzM1IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMzEyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzEzIFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0zMTIgVEptCi0odHJhbnNmb3JtYXRpb25cKSwpIDY0LjQ2OCBUagotLTMyOCBUSm0KLShEYSkgMTEuNjE2NCBUagotMjAgVEptCi0odmlkKSAxMi43MzIyIFRqCi0tMzEyIFRKbQotKFdoZWVsZXIpIDMzLjc0MzMgVGoKLS0zMTMgVEptCi0oXChhZykgMTIuNzIyMiBUagotNSBUSm0KLShhaW4sKSAxNC42NjQ5IFRqCi0tMzI3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMxMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTIgVEptCi0oSHVmKSAxNS40OTE4IFRqCi0yNSBUSm0KLShmbWFuKSAyMC40NzMxIFRqCi0tMzEyIFRKbQotKGNvZGVyXCksKSAyNy45MzUxIFRqCi0tMzI4IFRKbQotKFBldGVyKSAyMC40NzMxIFRqCi0tMzEzIFRKbQotKEZlbndpY2spIDM0LjMxMTIgVGoKLS0zMTIgVEptCi0oXChmb3IpIDE0LjkzMzkgVGoKLS0zMTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzEzIFRKbQotKHN0cnVjdHVyZWQpIDM5Ljg0MDQgVGoKLTcyIDMwNy43OCBUZAotKGNvZGluZykgMjcuMTE4MiBUagotLTMyNSBUSm0KLShtb2RlbCkgMjQuOTA2NSBUagotLTMyNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzI1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyNiBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotWzEgMCAwIDEgMTkxLjE1NiAzMDcuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MS4xNTYgLTMwNy43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5MS4xNTYgMzA3Ljc3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAyMTUuMDY3IDMwNy43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE1LjA2NyAtMzA3Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE1LjA2NyAzMDcuNzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zNDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjYgVEptCi0obWFuKSAxNy4xNTU2IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zMjUgVEptCi0ocmVcMDAybmVtZW50c1wpLCkgNTIuMjkzNyBUagotLTM0NSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMyNSBUSm0KLShBbGlzdGFpcikgMjkuODg3OCBUagotLTMyNiBUSm0KLShNb2YpIDE3LjE1NTYgVGoKLTI1IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGF0LCkgOS42ODM2NSBUagotLTM0NCBUSm0KLShSYWRmb3JkKSAzMi42NDc0IFRqCi0tMzI1IFRKbQotKE5lYWwpIDE4LjgwOTQgVGoKLS0zMjYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjUgVEptCi0oSWFuKSAxMi43MjIyIFRqCi0tMzI2IFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGl0dGVuKSAxNy43MTM1IFRqCi0tMzI1IFRKbQotKFwoZm9yKSAxNC45MzM5IFRqCi03MiAyOTUuODI0IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc3IFRKbQotKGFyaXRobWV0aWMpIDQwLjM5ODMgVGoKLS0yNzcgVEptCi0oY29kZXIpIDIyLjEyNjkgVGoKLS0yNzcgVEptCi0oaW4pIDcuNzUwOSBUagotLTI3NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzcgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDIxNC4xNzEgMjk1LjgyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTQuMTcxIC0yOTUuODI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuMTcxIDI5NS44MjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMjM4LjA4MiAyOTUuODI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOC4wODIgLTI5NS44MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzOC4wODIgMjk1LjgyNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotLTc4MiBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjc3IFRKbQotKGFtKSAxMi4xNzQzIFRqCi0tMjc2IFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0yNzcgVEptCi0oaW5kZWJ0ZWQpIDM0LjMxMTIgVGoKLS0yNzcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjc3IFRKbQotKHRoZWlyKSAxOC4yNjE0IFRqCi0tMjc3IFRKbQotKGhlbHAsKSAxOS42NDYyIFRqCi0tMjg0IFRKbQotKHN1cHBvcnQpIDI5Ljg4NzggVGoKLS0yNzcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzcgVEptCi0oYWR2aWNlLikgMjguNDkzIFRqCi0tNzgxIFRKbQotKFNlZSkgMTQuMzg2IFRqCi0tMjc3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NyBUSm0KLShtYW51YWwpIDI5LjMyOTkgVGoKLTcyIDI4My44NjkgVGQKLShpbikgNy43NTA5IFRqCi0tMzMwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMCBUSm0KLShzb3VyY2UpIDI2LjAwMjQgVGoKLS0zMzAgVEptCi0oZGlzdHJpYikgMjUuNDY0NCBUagotMjAgVEptCi0odXRpb24pIDIwLjQ4MzEgVGoKLS0zMzAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzI5IFRKbQotKHBvaW50ZXJzKSAzMi4wOTk1IFRqCi0tMzMwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMzAgVEptCi0oc291cmNlcykgMjkuODc3OCBUagotLTMzMCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzMCBUSm0KLShkb2N1bWVudGF0aW9uLikgNjEuNzA4MyBUagotLTEwOTkgVEptCi0oQ2hyaXN0aWFuKSAzNi41MzI5IFRqCi0tMzMwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob24pIDkuOTYyNiBUagotLTMzMCBUSm0KLShSb3F1ZXMpIDI5Ljg4NzggVGoKLS0zMzAgVEptCi0oZW5jb3VyYWdlZCkgNDUuOTE3NiBUagotLTMzMCBUSm0KLShtZSkgMTIuMTc0MyBUagotLTMzMCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzMwIFRKbQotKGxvb2spIDE3LjcxMzUgVGoKLTcyIDI3MS45MTQgVGQKLShmb3IpIDExLjYxNjQgVGoKLS0yNzEgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLS0yNzEgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTI3MSBUSm0KLShhbGdvcml0aG1zLCkgNDUuMTEwNyBUagotLTI3NiBUSm0KLShzbykgOC44NTY3NSBUagotLTI3MiBUSm0KLShhcykgOC4yOTg4NSBUagotLTI3MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcxIFRKbQotKHNwZWVkKSAyMi42ODQ4IFRqCi0tMjcxIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNzEgVEptCi0oY29tcHJlc3Npb24uKSA1Mi44NTE2IFRqCi0tNzQ2IFRKbQotKEJlbGEpIDE4LjI2MTQgVGoKLS0yNzEgVEptCi0oTHVia2luKSAyOC43ODIgVGoKLS0yNzEgVEptCi0oZW5jb3VyYWdlZCkgNDUuOTE3NiBUagotLTI3MSBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI3MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcxIFRKbQotKGltcHJvKSAyMy44MDA3IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0LWNhc2UpIDM1LjQwNzEgVGoKLTcyIDI1OS45NTkgVGQKLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTM0MCBUSm0KLShwZXJmb3JtYW5jZS4pIDUyLjgzMTcgVGoKLS01ODAgVEptCi0oRG9ubmEpIDI2LjU2MDMgVGoKLS0zMzkgVEptCi0oUm9iaW5zb24pIDM4LjE5NjYgVGoKLS0zNDAgVEptCi0oWE1MaXNlZCkgMzguMTg2NiBUagotLTM0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDAgVEptCi0oZG9jdW1lbnRhdGlvbi4pIDYxLjcwODMgVGoKLS01ODAgVEptCi0oTWFuKSAxOC4yNjE0IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zNDAgVEptCi0ocGVvcGxlKSAyNi41NjAzIFRqCi0tMzQwIFRKbQotKHNlbnQpIDE2LjA0OTcgVGoKLS0zMzkgVEptCi0ocGF0Y2hlcywpIDMyLjM2ODUgVGoKLS0zNjMgVEptCi0oaGVscGVkKSAyNi41NjAzIFRqCi0tMzQwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLTcyIDI0OC4wMDQgVGQKLShwb3J0YWJpbGl0eSkgNDEuNTE0MiBUagotLTI1MCBUSm0KLShwcm9ibGVtcywpIDM5LjU3MTQgVGoKLS0yNTAgVEptCi0obGVudCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShtYWNoaW5lcywpIDQwLjExOTQgVGoKLS0yNTAgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhZHZpY2UpIDI2LjAwMjQgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0od2VyZSkgMTkuMzU3MyBUagotLTI1MCBUSm0KLShnZW5lcmFsbHkpIDM3LjA3MDggVGoKLS0yNTAgVEptCi0oaGVscGZ1bC4pIDMwLjcxNDcgVGoKLVsxIDAgMCAxIDcyIDI0NS44NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC0xOTQuOTk1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2LjU4NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02LjQ4NTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDcpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTEgMTEKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNDEuNjQzIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQxLjY0MyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTEzLjk0NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwMS45MTYgVGQKLS9GMTIyXzAgMjQuNzkwMiBUZgotKDMuKSAyMC42NzUgVGoKLS01NTYgVEptCi0oUHIpIDI2LjE3ODUgVGoKLTIwIFRKbQotKG9ncmFtbWluZykgMTM0Ljk4MyBUagotLTI3OCBUSm0KLSh3aXRoKSA0OS41ODA0IFRqCi1bMSAwIDAgMSAzMzAuNDg0IDcwMS45MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMwLjQ4NCAtNzAxLjkxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMwLjQ4NCA3MDEuOTE2IFRkCi0vRjM5Ml8wIDI0Ljc5MDIgVGYKLShsaWJiemlwMikgMTE4Ljk5MyBUagotWzEgMCAwIDEgNDQ5LjQ3NyA3MDEuOTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ny40NzcgLTUuNTE1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE0Ljk0MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3MS40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1Ni4zNSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oVCkgMTAuNTE4NiBUagotODAgVEptCi0oYWIpIDIwLjA5MDQgVGoKLTEwIFRKbQotKGxlKSAxNC4zNTc2IFRqCi0tMjc4IFRKbQotKG9mKSAxNi4yNTEzIFRqCi0tMjc4IFRKbQotKENvbnRlbnRzKSA3NC41OTQzIFRqCi1bMSAwIDAgMSA3MiA2NDcuNTI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzQwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM1Ljc4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM1Ljc4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG9wLWxlKSAyMC40NzMxIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLVsxIDAgMCAxIDE2NC45MjEgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjkwMiAtNjM1Ljc4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5Ljk5NyA2MzUuNzg4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MzUuNzg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYzNS43ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjIzLjgzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIzLjgzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oTG8pIDExLjA2ODQgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHN1bW1hcnkpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE3Ny4zNzQgNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgyLjM1NSAtNjIzLjgzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjg2NiA2MjMuODMyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYyMy44MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjExLjg3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjExLjg3NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMi4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oSGlnaC1sZSkgMzAuNDM1NyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oc3VtbWFyeSkgMzcuMDgwOCBUagotWzEgMCAwIDEgMTc5LjI4NyA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODQuMjY4IC02MTEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuODIyIDYxMS44NzcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjExLjg3NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTkuOTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTkuOTIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMS4zLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShVdGlsaXR5KSAyNi4wMjIzIFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI1MCBUSm0KLShzdW1tYXJ5KSAzNy4wODA4IFRqCi1bMSAwIDAgMSAyMDIuNjY5IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNy42NSAtNTk5LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE2LjU4MiA1OTkuOTIyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTk5LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1OTkuOTIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4Ny45NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShFcnJvcikgMjEuMDIxMSBUagotLTI1MCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotWzEgMCAwIDEgMTQ4LjQxMyA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTMuMzk0IC01ODcuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjIuNjExIDU4Ny45NjcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTg3Ljk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTg3Ljk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc2LjAxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKExvKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi1bMSAwIDAgMSAxNjcuNTcxIDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Mi41NTIgLTU3Ni4wMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS4wNDUgNTc2LjAxMiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01NzYuMDEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDU3Ni4wMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjQuMDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4xLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTY0LjA1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDIwNS4xMDEgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjA4MiAtNTY0LjA1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE5LjczNiA1NjQuMDU2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTY0LjA1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTUyLjEwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTUyLjEwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDU1Mi4xMDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE4MS4xOSA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMTcyIC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQuNDk3IDU1Mi4xMDEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU1Mi4xMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTUyLjEwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1NTIuMTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDAuMTQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTQwLjE0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMTk5LjEyMyA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMTA1IC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNTMzIDU0MC4xNDYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTQwLjE0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI4LjE5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI4LjE5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNC4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTI4LjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01MjguMTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDUyOC4xOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDIxNy4wNTYgNTI4LjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIyLjAzNyAtNTI4LjE5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMyLjM1NSA1MjguMTkxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1MjguMTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTUyOC4xOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTI4LjE5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTI4LjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE2LjIzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE2LjIzNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTE2LjIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01MTYuMjM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDUxNi4yMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTMuMTQ2IDUxNi4yMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xMjcgLTUxNi4yMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4xMTYgNTE2LjIzNiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTE2LjIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01MTYuMjM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDUxNi4yMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTcpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDUxNi4yMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUwNC4yODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUwNC4yODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjYuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDUwNC4yODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNTA0LjI4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA1MDQuMjgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDIxMS4wNzggNTA0LjI4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjA2IC01MDQuMjgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuOTM4IDUwNC4yODEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTA0LjI4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01MDQuMjgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDUwNC4yODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDUwNC4yODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5Mi4zMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ5Mi4zMjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShIaWdoLWxlKSAzMC40MzU3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi1bMSAwIDAgMSAxNjkuNDgzIDQ5Mi4zMjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC40NjUgLTQ5Mi4zMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4NC4yMTYgNDkyLjMyNSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0OTIuMzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ5Mi4zMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDkyLjMyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDkyLjMyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDgwLjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0ODAuMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjEuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQ4MC4zN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00ODAuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDgwLjM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxODEuMTkgNDgwLjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMTcyIC00ODAuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NC40OTcgNDgwLjM3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0ODAuMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDgwLjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ4MC4zNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDgwLjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjguNDE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NjguNDE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NjguNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQ2OC40MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDY4LjQxNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNTcuMjggNDY4LjQxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYyLjI2MSAtNDY4LjQxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcxLjQ3MiA0NjguNDE1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ2OC40MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDY4LjQxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NjguNDE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0NjguNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1Ni40Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDU2LjQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NTYuNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDU2LjQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ1Ni40NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAyMTEuMDc4IDQ1Ni40Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjA2IC00NTYuNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC45MzggNDU2LjQ2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ1Ni40Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NTYuNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDU2LjQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0NTYuNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ0LjUwNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDQ0LjUwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNC4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDQ0LjUwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NDQuNTA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ0NC41MDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxODcuMTY4IDQ0NC41MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi4xNDkgLTQ0NC41MDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45MTQgNDQ0LjUwNSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ0NC41MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDQ0LjUwNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NDQuNTA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0NDQuNTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzMi41NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDMyLjU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC41LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MzIuNTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDMyLjU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQzMi41NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4Ny4xNjggNDMyLjU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuMTQ5IC00MzIuNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45MTQgNDMyLjU1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDMyLjU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQzMi41NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0MzIuNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQzMi41NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDIwLjU5NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIwLjU5NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MjAuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQyMC41OTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE2My4yNTggNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY4LjIzOSAtNDIwLjU5NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2LjY3NSA0MjAuNTk0IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MjAuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQyMC41OTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQyMC41OTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDA4LjYzOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDA4LjYzOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNy4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDA4LjYzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MDguNjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQwOC42MzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTMuMTQ2IDQwOC42MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xMjcgLTQwOC42MzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4xMTYgNDA4LjYzOSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDA4LjYzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MDguNjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQwOC42MzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQwOC42MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk2LjY4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzk2LjY4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuOC4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oSGFuZGxpbmcpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oZW1iZWRkZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDI3OS41NiAzOTYuNjg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuNTQxIC0zOTYuNjg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTQuNjAxIDM5Ni42ODQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzOTYuNjg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM5Ni42ODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzk2LjY4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzk2LjY4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg0LjcyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzg0LjcyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuOS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oU3RhbmRhcmQpIDM1LjQxNyBUagotLTI1MCBUSm0KLShcMDAybGUtcmVhZGluZy93cml0aW5nKSA3Ny40NzkxIFRqCi0tMjUwIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDIzNC4xOSAzODQuNzI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzkuMTcyIC0zODQuNzI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDcuNTY0IDM4NC43MjkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM4NC43MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzg0LjcyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzODQuNzI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzODQuNzI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzIuNzc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzIuNzc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oVXRpbGl0eSkgMjYuMDIyMyBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE1NS42MjUgMzcyLjc3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjYwNyAtMzcyLjc3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjY0NSAzNzIuNzc0IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM3Mi43NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzcyLjc3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNzIuNzc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNzIuNzc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjAuODE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjAuODE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4xLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNjAuODE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM2MC44MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzYwLjgxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDI0MC45NjYgMzYwLjgxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ1Ljk0OCAtMzYwLjgxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU1LjM4IDM2MC44MTkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNjAuODE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM2MC44MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzYwLjgxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzYwLjgxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQ4Ljg2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzQ4Ljg2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zNDguODYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDM0OC44NjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDI1Mi45MjIgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU3LjkwMyAtMzQ4Ljg2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY3Ljk5OSAzNDguODYzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zNDguODYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM0OC44NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjcpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM0OC44NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzNi45MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy42LikgMTQuOTQzOSBUagotWzEgMCAwIDEgOTAuMDMyNCAzMzYuOTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwLjAzMjQgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwLjAzMjQgMzM2LjkwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxMTMuOTQzIDMzNi45MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjk0MyAtMzM2LjkwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2LjQzMyAzMzYuOTA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGliaWxpdHkpIDUzLjE0MDUgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi1bMSAwIDAgMSAyMDkuMTQ0IDMzNi45MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNC4xMjYgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMy45NzEgMzM2LjkwOCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMzYuOTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzM2LjkwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzM2LjkwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI0Ljk1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzI0Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFVzaW5nKSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMTc3LjE5NSAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny4xOTUgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ny4xOTUgMzI0Ljk1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzdGRpbykgMjkuODg3OCBUagotWzEgMCAwIDEgMjA3LjA4MyAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNy4wODMgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4wODMgMzI0Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtZnJlZSkgMTguNzk5NCBUagotLTI1MCBUSm0KLShlbikgOS40MDQ2OSBUagotNDAgVEptCi0odmlyb25tZW50KSA0MC45NTYyIFRqCi1bMSAwIDAgMSAyNzguMzM1IDMyNC45NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4My4zMTYgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5MS43NzUgMzI0Ljk1MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzI0Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzI0Ljk1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzEyLjk5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzEyLjk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuMS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oR2V0dGluZykgMjkuODg3OCBUagotLTI1MCBUSm0KLShyaWQpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDE1NC4yMzEgMzEyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTQuMjMxIC0zMTIuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTQuMjMxIDMxMi45OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE4NC4xMTkgMzEyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg5LjEgLTMxMi45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC4xNzUgMzEyLjk5OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMTIuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMxMi45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzEyLjk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzEyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzAxLjA0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzAxLjA0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuMi4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oQ3JpdGljYWwpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLVsxIDAgMCAxIDE4Ni41OTkgMzAxLjA0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjU4IC0zMDEuMDQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuNjI5IDMwMS4wNDMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMDEuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMwMS4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzAxLjA0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzAxLjA0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjg5LjA4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg5LjA4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjguKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE1ha2luZykgMzAuOTkzNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGluZG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKERMTCkgMTkuMzY3MyBUagotWzEgMCAwIDEgMTg5LjgyOCAyODkuMDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTQuODA5IC0yODkuMDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuMjQzIDI4OS4wODggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyODkuMDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI4OS4wODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjg5LjA4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjg5LjA4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY3LjAwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjU3LjIwNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGNoYXB0ZXIpIDI5LjMxOTkgVGoKLS0yNTAgVEptCi0oZGVzY3JpYmVzKSAzNy4wNzA4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ncmFtbWluZykgNTQuMjM2NCBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDI4Mi40NDggMjU3LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODIuNDQ4IC0yNTcuMjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODIuNDQ4IDI1Ny4yMDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDMzMC4yNjkgMjU3LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzAuMjY5IC0yNTcuMjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzAuMjY5IDI1Ny4yMDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjU1LjA1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDUuMDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzUuMjg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjczIFRKbQotKGdlbmVyYWwpIDI5LjMxOTkgVGoKLS0yNzIgVEptCi0oYmFja2dyb3VuZCkgNDcuMDMzNCBUagotLTI3MyBUSm0KLShpbmZvcm1hdGlvbiwpIDQ5LjUzNCBUagotLTI3OCBUSm0KLShwYXJ0aWN1bGFybHkpIDQ1LjkyNzYgVGoKLS0yNzMgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNzMgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjcyIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI3MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MyBUSm0KLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjcyIFRKbQotKGFzcGVjdHMsKSAzMS4yNjI2IFRqCi0tMjc5IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTI3MiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3MyBUSm0KLSh3ZWxsKSAxNy4xNTU2IFRqCi0tMjczIFRKbQotKGFkdmlzZWQpIDMwLjQzNTcgVGoKLTcyIDIyMy4zMzQgVGQKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLVsxIDAgMCAxIDEwMS44NzggMjIzLjMzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xMDEuODc4IC0yMjMuMzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDEuODc4IDIyMy4zMzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxNzEuNjM2IDIyMy4zMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMTcxLjYzNiAtMjIzLjMzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc0LjEyNiAyMjMuMzM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFsyXSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMTg1Ljc0MyAyMjMuMzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4NS43NDMgLTIyMy4zMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC4yMzMgMjIzLjMzNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh3ZWxsLikgMTkuNjQ2MiBUagotWzEgMCAwIDEgNzIgMjIxLjE3N10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjExLjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTg4LjU4MSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy4xLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShUKSAxMi42MjIzIFRqCi04MCBUSm0KLShvcC1sZSkgNDkuMzUzMiBUagotMTUgVEptCi0odmVsKSAyOC43MTUzIFRqCi0tMjc4IFRKbQotKHN0cnVjdHVyZSkgODkuNTMzOSBUagotWzEgMCAwIDEgNzIgMTg0LjMwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTc0LjM0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTY2LjY2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSAxNjYuNjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTE2Ni42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMy42MDggMTY2LjY2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTM4MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzgwIFRKbQotKFwwMDNlKSA5Ljk2MjYgVGoKLTE1IFRKbQotKHhpYmxlKSAxOS45MjUyIFRqCi0tMzgxIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zODAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzgwIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMzgwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzgwIFRKbQotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0zODAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTM4MSBUSm0KLShpbikgNy43NTA5IFRqCi0tMzgwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDA1LjI5MSAxNjYuNjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNS4yOTEgLTE2Ni42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNS4yOTEgMTY2LjY2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDM1LjE3OCAxNjYuNjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzNS4xNzggLTE2Ni42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOC45NjYgMTY2LjY2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkYXRhKSAxNi41OTc3IFRqCi0tMzgwIFRKbQotKGZvcm1hdC4pIDI5LjA1MDkgVGoKLS0xNDAxIFRKbQotKEFsdGhvdWdoKSAzNy42Mzg3IFRqCi03MiAxNTQuNzA4IFRkCi0ocGFja2FnZWQpIDM3LjYxODggVGoKLS0yODUgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yODQgVEptCi0oYSkgNC40MjMzOSBUagotLTI4NSBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLS0yODUgVEptCi0oZW50aXR5KSAyMi42OTQ4IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjkzIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjg1IFRKbQotKGhlbHBzKSAyMS4wMzEgVGoKLS0yODUgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NCBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFyZCkgMTIuNzIyMiBUagotLTI4NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODUgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI4NCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI4NSBUSm0KLSh0aHJlZSkgMTkuOTE1MiBUagotLTI4NSBUSm0KLShzZXBhcmF0ZSkgMzIuNjM3NSBUagotLTI4NCBUSm0KLShwYXJ0czopIDIyLjEzNjkgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg1IFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjg0IFRKbQotKGxlKSA3LjE5MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yODUgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSwpIDE1Ljc2MDggVGoKLS0yOTMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg1IFRKbQotKGhpZ2gpIDE3LjcxMzUgVGoKLTcyIDE0Mi43NTMgVGQKLShsZSkgNy4xOTMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UsKSAxNS43NjA4IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLSh1dGlsaXR5KSAyMy44MTA2IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucy4pIDM5LjU3MTQgVGoKLVsxIDAgMCAxIDcyIDE0MC41OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEzMC42MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyMC44MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMzQ5IFRKbQotKHN0cnVjdHVyZSkgMzQuODU5MSBUagotLTM0OSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTQxLjA4MiAxMjAuODM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0MS4wODIgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0MS4wODIgMTIwLjgzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMTg4LjkwMyAxMjAuODM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OC45MDMgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC45MDMgMTIwLjgzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzQ5IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2VzKSAxNy4xNDU2IFRqCi0tMzQ5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzQ5IFRKbQotKHNpbWlsYXIpIDI3LjY3NjEgVGoKLS0zNDkgVEptCi0odG8pIDcuNzUwOSBUagotLTM0OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQ5IFRKbQotKEplYW4tbG91cCkgMzguNzM0NiBUagotLTM0OSBUSm0KLShHYWlsbHknKSAyOC4yMjQgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0zNDkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDkgVEptCi0oTWFyaykgMjEuNTc5IFRqCi0tMzQ5IFRKbQotKEFkbGVyJykgMjYuMDAyNCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM0OSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4Y2VsbGVudCkgMzEuNTQxNiBUagotWzEgMCAwIDEgNTE2LjA5IDEyMC44MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE2LjA5IC0xMjAuODM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTYuMDkgMTIwLjgzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA1NDAgMTIwLjgzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwOC44OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMDYuNzIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05Ni43NjA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4Ni45NjI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbCkgMTIuNzMyMiBUagotLTI0MiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dGVybmFsbHkpIDM1LjQxNyBUagotLTI0MiBUSm0KLSh2aXNpYmxlKSAyNi41NzAzIFRqCi0tMjQxIFRKbQotKHN5bWJvbHMpIDMzLjIxNTMgVGoKLS0yNDIgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI0MiBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTI0MiBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ2lubmluZykgMzAuNDQ1NyBUagotWzEgMCAwIDEgMjg0LjY4NyA4Ni45NjI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NC42ODcgLTg2Ljk2MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NC42ODcgODYuOTYyNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzMDguNTk3IDg2Ljk2MjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA4LjU5NyAtODYuOTYyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4LjU5NyA4Ni45NjI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS02MTUgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI0MSBUSm0KLShpcykgNi42NDUwNSBUagotLTI0MiBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNDIgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0MiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI0MiBUSm0KLSgxLjAuKSAxNC45NDM5IFRqCi0tNjE0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI0MiBUSm0KLShpbnRlbnRpb24pIDM1LjQyNyBUagotLTI0MiBUSm0KLShpcykgNi42NDUwNSBUagotLTI0MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQyIFRKbQotKG1pbmltaXNlKSAzNy4wOTA4IFRqCi03MiA3NS4wMDczIFRkCi0ocG9sbHV0aW9uKSAzNS45ODQ5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShuYW1lc3BhY2VzKSA0Ny41ODE0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oY2xpZW50cy4pIDI4LjUwMyBUagotWzEgMCAwIDEgNzIgNzIuODUwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjk5ODddIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTguMjI1IC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01NDEuMjg4IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOCkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTUuMTYxIDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxMiAxMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0NC40NjIgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMC45NiA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5OC40NDkgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTguNDQ5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTguNDQ5IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0Ni4yNjkgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTUuMDM2NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDI0MC41NjcgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDAuNTY3IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDAuNTY3IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oI2luY2x1ZGUpIDQ3LjgyMDUgVGoKLS02MDAgVEptCi0oPGJ6bGliLmg+KSA1My43OTggVGoKLVsxIDAgMCAxIDM0OC4xNjMgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDguMTYzIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTAuNjU0IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW50bykgMTUuNTAxOCBUagotLTI1MCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHNvdXJjZXMuKSAzMi4zNjg1IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY5Ny45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY3OS40MTYgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMS4xLikgNDMuMDcyOSBUagotLTI3OCBUSm0KLShMbykgMjEuMDM3MiBUagotMTUgVEptCi0ody1sZSkgMzMuNDg0IFRqCi0xNSBUSm0KLSh2ZWwpIDIzLjkyOTQgVGoKLS0yNzggVEptCi0oc3VtbWFyKSA2Ni45Njc5IFRqCi0tMTAgVEptCi0oeSkgOS41NzE3NiBUagotWzEgMCAwIDEgNzIgNjc1Ljg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjY1Ljg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTcuNDk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMTIgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotLTIxMiBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0yMTIgVEptCi0oc2VydmljZXMpIDMyLjA4OTUgVGoKLS0yMTIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjEyIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMjEyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjEyIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLTEgVEptCi0oaW5nKSAxMi43MzIyIFRqCi0tMjEyIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMTIgVEptCi0oaW4pIDcuNzUwOSBUagotLTIxMiBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS01OTUgVEptCi0oVGhlcmUnKSAyNi41NTAzIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjEyIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yMTIgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aXNpb24pIDI0LjM1ODYgVGoKLS0yMTIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjEyIFRKbQotKGRlYWxpbmcpIDI5LjMyOTkgVGoKLTcyIDY0NS41NDMgVGQKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjEzIFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjIwIFRKbQotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLS0yMTMgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yMTMgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIxMyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTIxMyBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yMTMgVEptCi0obWVjaGFuaXNtcywpIDUxLjc0NTcgVGoKLS0yMjEgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjEzIFRKbQotKHN0cmFpZ2h0KSAyOS44ODc4IFRqCi0tMjEzIFRKbQotKG1lbW9yeS10by1tZW1vcnkpIDgwLjc5NjcgVGoKLS0yMTMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yay4pIDE1Ljc3MDggVGoKLS01OTUgVEptCi0oSW4pIDguMjk4ODUgVGoKLS0yMTMgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0LCkgMTQuMTA3IFRqCi0tMjIxIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTIxMyBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjEzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjEzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIxMyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi03MiA2MzMuNTg4IFRkCi0oY2FuKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNvbXBpbGVkKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKHdpdGhvdXQpIDMwLjQ0NTcgVGoKLS0yNTAgVEptCi0oaW5jbHVzaW9uKSAzNi41MzI5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAyMjIuNTM0IDYzMy41ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIyLjUzNCAtNjMzLjU4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIyLjUzNCA2MzMuNTg4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0ZGlvLmgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI2NC4zNzcgNjMzLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjQuMzc3IC02MzMuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjQuMzc3IDYzMy41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaGVscGZ1bCkgMjguMjI0IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLShhcHBsaWNhdGlvbnMuKSA1MC42Mzk5IFRqCi1bMSAwIDAgMSA3MiA2MzEuNDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjEuNDY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTEuNjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZ2xvYmFsKSAyNC45MDY1IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpYWJsZXMpIDMwLjk4MzcgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odGhlcmVmb3JlKSAzNS45NTUgVGoKLS0yNTAgVEptCi0odGhyZWFkLXNhZmUuKSA0Ni43NDQ1IFRqCi1bMSAwIDAgMSA3MiA2MDkuNTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTkuNTUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODkuNzUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNpeCkgMTMuMjkwMSBUagotLTg3NSBUSm0KLShyb3V0aW5lcykgMzIuMDk5NSBUagotLTg3NiBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS04NzUgVEptCi0odXApIDkuOTYyNiBUagotLTg3NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS04NzUgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS04NzYgVEptCi0obGUpIDcuMTkzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTg3NSBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlOikgMTYuMDM5OCBUagotWzEgMCAwIDEgMzA4Ljc5MSA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwOC43OTEgLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOC43OTEgNTg5Ljc1MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDQxNi4zODcgNTg5Ljc1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTYuMzg3IC01ODkuNzUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTYuMzg3IDU4OS43NTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDI5LjE1OCA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyOS4xNTggLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyOS4xNTggNTg5Ljc1MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNTEyLjg0NCA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMi44NDQgLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMi44NDQgNTg5Ljc1MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMTAzMiBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNzIgNTc3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc3Ljc5NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMTczLjYxOSA1NzcuNzk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTU3Ny43OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4Ni4xNSA1NzcuNzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTEyNTggVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMTUxMCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTEyNTcgVEptCi0oYSkgNC40MjMzOSBUagotLTEyNTggVEptCi0oY29ycmVzcG9uZGluZykgNTYuOTk2IFRqCi0tMTI1OCBUSm0KLSh0cmlvKSAxMy44MzgxIFRqCi1bMSAwIDAgMSA0MTcuOTU4IDU3Ny43OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE3Ljk1OCAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE3Ljk1OCA1NzcuNzk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NJbml0KSAxMTkuNTUxIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDU3Ny43OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSA1NzcuNzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2NS44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2NS44NDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxNjcuNjQxIDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY3LjY0MSAtNTY1Ljg0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcyLjcwNyA1NjUuODQyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxOTIuMTU4IDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjE1OCAtNTY1Ljg0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjE1OCA1NjUuODQyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDMwNS43MzIgNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDUuNzMyIC01NjUuODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuNzk4IDU2NS44NDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9yKSAxMS42MTY0IFRqCi0tNTA4IFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi0tMjE3MSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLVsxIDAgMCAxIDQzMS45MTggNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzEuOTE4IC01NjUuODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzEuOTE4IDU2NC4wOTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotNDM3Ljg5NSA1NjUuODQyIFRkCi0oSW5pdCkgMjMuOTEwMiBUagotWzEgMCAwIDEgNDYxLjgwNSA1NjUuODQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS44MDUgLTU2NS44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ni44NzEgNTY1Ljg0MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS01MDggVEptCi0oYWxsb2NhdGUpIDMwLjk4MzcgVGoKLTcyIDU1My44ODcgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLS01NzQgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tNTczIFRKbQotKGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24pIDExMi44OTYgVGoKLS01NzQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS01NzQgVEptCi0oZG8pIDkuOTYyNiBUagotLTU3MyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTU3NCBUSm0KLShpbml0aWFsaXNhdGlvbnMsKSA1Ni4xODkxIFRqCi0tNjU0IFRKbQotKHdoaWxzdCkgMjQuMzU4NiBUagotLTU3NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQxOS41MDIgNTUzLjg4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTkuNTAyIC01NTMuODg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuNTAyIDU1Mi4xNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotNDI1LjQ4IDU1My44ODcgVGQKLShFbmQpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDQ0My40MTMgNTUzLjg4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDMuNDEzIC01NTMuODg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDkuMTI4IDU1My44ODcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNTc0IFRKbQotKGNsb3NlKSAyMC40NzMxIFRqCi0tNTczIFRKbQotKGRvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHduKSAxMi4xNzQzIFRqCi03MiA1NDEuOTMyIFRkCi0ob3BlcmF0aW9ucykgNDEuNTA0MiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShyZWxlYXNlKSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTM5Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI5LjgxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTIwLjAxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0zMDMgVEptCi0ocmVhbCkgMTQuOTMzOSBUagotLTMwMyBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMzAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzAzIFRKbQotKGRvbmUpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMTc2Ljg5MiA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni44OTIgLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni44OTIgNTIwLjAxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjYwLjU3OCA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC41NzggLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2My41OTggNTIwLjAxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjgxLjAwMyA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4MS4wMDMgLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4MS4wMDMgNTIwLjAxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDM3Ni42NDUgNTIwLjAxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzYuNjQ1IC01MjAuMDE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzYuNjQ1IDUyMC4wMTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTkzOSBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTMwMyBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTMwMyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMwMyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMzAzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLTcyIDUwOC4wNTkgVGQKLShmcm9tKSAxOS4zNjczIFRqCi0tMjA1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMDUgVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLXN1cHBsaWVkKSAzNy4wODA4IFRqCi0tMjA1IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjA2IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTIwNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjA1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMDUgVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLXN1cHBsaWVkKSAzNy4wODA4IFRqCi0tMjA1IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTIwNSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS01OTEgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0yMDUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVycykgMTQuOTMzOSBUagotLTIwNSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yMDUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMDUgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIwNSBUSm0KLShzaXplOykgMTguMjYxNCBUagotLTIyMCBUSm0KLShhcmJpdHJhcnkpIDM0LjMwMTIgVGoKLS0yMDYgVEptCi0ocXVhbnRpdGllcykgMzguNzQ0NiBUagotLTIwNSBUSm0KLShvZikgOC4yOTg4NSBUagotNzIgNDk2LjEwNCBUZAotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTggVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjU4IFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0yNTggVEptCi0oYnkpIDkuOTYyNiBUagotLTI1NyBUSm0KLShtYWtpbmcpIDI5Ljg4NzggVGoKLS0yNTggVEptCi0ocmVwZWF0ZWQpIDMzLjc0MzMgVGoKLS0yNTggVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNTggVEptCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1OCBUSm0KLShmdW5jdGlvbnMuKSAzOS41NzE0IFRqCi0tNjY3IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTggVEptCi0oYSkgNC40MjMzOSBUagotLTI1NyBUSm0KLShcMDAzZSkgOS45NjI2IFRqCi0xNSBUSm0KLSh4aWJsZSkgMTkuOTI1MiBUagotLTI1OCBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yNTggVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0od2luZykgMTkuOTI1MiBUagotLTI1OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU4IFRKbQotKGNvbnN1bWVyKSAzOC43MzQ2IFRqCi0yMCBUSm0KLSgtcHVsbCkgMTguODE5NCBUagotNzIgNDg0LjE0OCBUZAotKHN0eWxlKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGFjdGkpIDE0LjM4NiBUagotMjUgVEptCi0odml0eSkgMTUuNTAxOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShwcm9kdWNlcikgMzUuNDA3MSBUagotMjAgVEptCi0oLXB1c2gsKSAyNC42Mjc1IFRqCi0tMjUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obWl4dHVyZSkgMzAuOTkzNiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShib3RoLikgMjAuMjA0MiBUagotWzEgMCAwIDEgNzIgNDgxLjk5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDcyLjAyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDUzLjUyNyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4xLjIuKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKEhpZ2gtbGUpIDU4LjM0MyBUagotMTUgVEptCi0odmVsKSAyMy45Mjk0IFRqCi0tMjc4IFRKbQotKHN1bW1hcikgNjYuOTY3OSBUagotLTEwIFRKbQotKHkpIDkuNTcxNzYgVGoKLVsxIDAgMCAxIDcyIDQ0OS42OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzOS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzMS42MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjg0IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLS0yODQgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlcykgMjEuMDMxIFRqCi0tMjg1IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI4NCBUSm0KLShoYW5keSkgMjQuMzQ4NiBUagotLTI4NCBUSm0KLSh3cmFwcGVycykgMzYuNTEyOSBUagotLTI4NCBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yODQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjg1IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLS0yODQgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXRhdGUpIDMxLjU0MTYgVGoKLS0yODQgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTI4NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4NSBUSm0KLSh3cml0KSAxNi4wNDk3IFRqCi0xIFRKbQotKGluZykgMTIuNzMyMiBUagotWzEgMCAwIDEgNTEwLjExMiA0MzEuNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTEwLjExMiAtNDMxLjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDQzMS42MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNTQwIDQzMS42MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTQzMS42MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDE5LjY1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0zNDcgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTM0NiBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTI1LjM5MSA0MTkuNjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNS4zOTEgLTQxOS42NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNS4zOTEgNDE5LjY1NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxNDkuMzAxIDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjMwMSAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUyLjc1NCA0MTkuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZXNcKS4pIDIyLjQxNTkgVGoKLS0xMjAwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTM0NiBUSm0KLShyb3V0aW5lcykgMzIuMDk5NSBUagotLTM0NyBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGUpIDE3LjE1NTYgVGoKLS0zNDYgVEptCi0oaG9va3MpIDIzLjgwMDcgVGoKLS0zNDcgVEptCi0odG8pIDcuNzUwOSBUagotLTM0NiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXRhdGUpIDMxLjU0MTYgVGoKLS0zNDcgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTM0NyBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzQ2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNDcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0NjAuMDQ5IDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYwLjA0OSAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDYwLjA0OSA0MTkuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0ODkuOTM3IDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg5LjkzNyAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkzLjM5IDQxOS42NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGF0YSkgMTYuNTk3NyBUagotLTM0NyBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLTcyIDQwNy42OTkgVGQKLShpcykgNi42NDUwNSBUagotLTMzOSBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTMzOSBUSm0KLSh3aXRoaW4pIDI1LjQ2NDQgVGoKLS0zMzkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMzM5IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0yMCBUSm0KLSgtc2NhbGUpIDIzLjIzMjggVGoKLS0zMzkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzM5IFRKbQotKHN0cnVjdHVyZSwpIDM3LjM0OTggVGoKLS0zNjEgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMzkgVEptCi0od2gpIDEyLjE3NDMgVGoKLS0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLTEgVEptCi0ocmUpIDcuNzQwOTQgVGoKLS0zNDAgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0zMzkgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzM5IFRKbQotKG11bHRpcGxlKSAzMy4yMTUzIFRqCi1bMSAwIDAgMSA0MDAuOTQxIDQwNy42OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAwLjk0MSAtNDA3LjY5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAwLjk0MSA0MDcuNjk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0MzAuODI5IDQwNy42OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMwLjgyOSAtNDA3LjY5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM0LjIwNyA0MDcuNjk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMzkgVEptCi0oc3RyZWFtcykgMzAuNDM1NyBUagotLTMzOSBUSm0KLShjb25jYXRlbmF0ZWQpIDUyLjAwNDggVGoKLTcyIDM5NS43NDQgVGQKLShlbmQtdG8tZW5kLikgNDUuNjQ4NiBUagotWzEgMCAwIDEgNzIgMzk1LjY0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg1LjY4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzczLjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzMiBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMzMzIFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi1bMSAwIDAgMSAxNDQuODAzIDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ0LjgwMyAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ0LjgwMyAzNzMuODI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyMjguNDg5IDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI4LjQ4OSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI4LjQ4OSAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIzNC40OTYgMzczLjgyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuNDk2IC0zNzMuODI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuNDk2IDM3My44MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjk0LjI3MiAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NC4yNzIgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC4yNzIgMzczLjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMDAuMjc5IDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAwLjI3OSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAwLjI3OSAzNzMuODI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMzg5Ljk0MiAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OS45NDIgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5My4yNTMgMzczLjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDEwLjk1MSAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC45NTEgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMC45NTEgMzczLjgyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSA1MjQuNTI1IDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTI0LjUyNSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI3LjgzNiAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotNzIgMzYxLjg3MSBUZAotKHN1cHBsaWVkLikgMzYuMjUzOSBUagotLTYyMCBUSm0KLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh3cml0aW5nKSAyOC43ODIgVGoKLS0yNTAgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLVsxIDAgMCAxIDE4My40NzEgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuNDcxIC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuNDcxIDM2MS44NzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAyNzMuMTM1IDM2MS44NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjczLjEzNSAtMzYxLjg3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjczLjEzNSAzNjEuODcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI3OC4xMTYgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMTE2IC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzguMTE2IDM2MS44NzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDM0My44NjkgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDMuODY5IC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDYuMzYgMzYxLjg3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzYzLjIzNyAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My4yMzcgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My4yMzcgMzYxLjg3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUZpbmlzaCkgMTAxLjYxOSBUagotWzEgMCAwIDEgNDY0Ljg1NiAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NC44NTYgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ny4zNDYgMzYxLjg3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgMzU5LjcxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQ5Ljc1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM5Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBcykgMTEuMDY4NCBUagotLTM3NCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzc0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3NSBUSm0KLShsbykgNy43NTA5IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTM3NCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDA1IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zNzQgVEptCi0oZ2xvYmFsKSAyNC45MDY1IFRqCi0tMzc0IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpYWJsZXMpIDMwLjk4MzcgVGoKLS0zNzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzc0IFRKbQotKHVzZWQpIDE4LjI2MTQgVGoKLS0zNzQgVEptCi0oc28pIDguODU2NzUgVGoKLS0zNzQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc0IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zNzUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNzQgVEptCi0ocGVyKSAxMi43MjIyIFRqCi0tMzc0IFRKbQotKHNlKSA4LjI5ODg1IFRqCi0tMzc0IFRKbQotKHRocmVhZC1zYWZlLikgNDYuNzQ0NSBUagotLTEzNjUgVEptCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHdlKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDA2IFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMzc0IFRKbQotKEkvTykgMTMuMjgwMSBUagotNzIgMzI3Ljk5OCBUZAotKGVycm9ycykgMjMuMjMyOCBUagotLTI2NyBUSm0KLShvY2N1cikgMjIuMTI2OSBUagotLTI2NyBUSm0KLSh3aGlsc3QpIDI0LjM1ODYgVGoKLS0yNjcgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTI2NyBUSm0KLShvcikgOC4yOTg4NSBUagotLTI2NyBUSm0KLSh3cml0aW5nKSAyOC43ODIgVGoKLS0yNjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY4IFRKbQotKHVuZGVybHlpbmcpIDQzLjE2NzkgVGoKLS0yNjcgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2NyBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI3MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNjcgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjY3IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjcgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NyBUSm0KLShjb25zdWx0KSAyOC43ODIgVGoKLVsxIDAgMCAxIDQ1Ny4xOTkgMzI3Ljk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTcuMTk5IC0zMjcuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTcuMTk5IDMyNy45OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZXJybm8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ4Ny4wODcgMzI3Ljk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODcuMDg3IC0zMjcuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODkuNzQ4IDMyNy45OTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI2NyBUSm0KLShkZXRlcm1pbmUpIDM5Ljg0MDQgVGoKLTcyIDMxNi4wNDMgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjYgVEptCi0oY2F1c2UpIDIyLjEyNjkgVGoKLS0zNjUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNjYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzY1IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTMxNCBUSm0KLShJbikgOC4yOTg4NSBUagotLTM2NiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzY1IFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tMzk1IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTM2NiBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMzY1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjYgVEptCi0oQykgNi42NDUwNSBUagotLTM2NSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzY2IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzY2IFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotLTM2NSBUSm0KLShzdXBwb3J0cykgMzMuNzYzMyBUagotWzEgMCAwIDEgNDMxLjY2OCAzMTYuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMS42NjggLTMxNi4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS42NjggMzE2LjA0MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShlcnJubykgMjkuODg3OCBUagotWzEgMCAwIDEgNDYxLjU1NiAzMTYuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS41NTYgLTMxNi4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2NS4xOTkgMzE2LjA0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbikgNy43NTA5IFRqCi0tMzY2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjUgVEptCi0obXVsdGl0aHJlYWRlZCkgNTUuMzQyMiBUagotNzIgMzA0LjA4OCBUZAotKGVuKSA5LjQwNDY5IFRqCi00MCBUSm0KLSh2aXJvbm1lbnQuKSA0My40NDY5IFRqCi1bMSAwIDAgMSA3MiAzMDMuOTg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTQuMDI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODIuMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjQzIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI0MyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQzIFRKbQotKGxpdHRsZSkgMTguMjcxNCBUagotLTI0MiBUSm0KLShzaW1wbGVyKSAyOS44ODc4IFRqCi0tMjQzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjQzIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNDMgVEptCi0ocG9ydGFibGUsKSAzNS4xMzgxIFRqCi1bMSAwIDAgMSAyODkuMjYzIDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODkuMjYzIC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OS4yNjMgMjgyLjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNzIuOTQ5IDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzIuOTQ5IC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3NS4zNjggMjgyLjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzOTIuMTcyIDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuMTcyIC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi4xNzIgMjgyLjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgNDgxLjgzNiAyODIuMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgxLjgzNiAtMjgyLjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODQuMjU0IDI4Mi4xNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZXF1aXJlKSAyOC4yMTQxIFRqCi0tMjQzIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI0MiBUSm0KLSh0bykgNy43NTA5IFRqCi03MiAyNzAuMjE1IFRkCi0ocGFzcykgMTcuMTU1NiBUagotLTI0NyBUSm0KLSh0aGVtKSAxOS45MjUyIFRqCi0tMjQ4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI0NyBUSm0KLShoYW5kbGVzKSAzMC40MzU3IFRqCi0tMjQ3IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxNjUuNDIxIDI3MC4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY1LjQyMSAtMjcwLjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY1LjQyMSAyNzAuMjE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEZJTEUpIDIzLjkxMDIgVGoKLTE4OS4zMzEgMjY4LjQ3MSBUZAotKCopIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDE5NS4zMDkgMjcwLjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTUuMzA5IC0yNzAuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTUuMzA5IDI3MC4yMTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc1wpKSA3LjE5MyBUagotLTI0NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI0OCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQ3IFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXNseSkgMjkuMzM5OSBUagotLTI0NyBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjQ4IFRKbQotKG9wZW5lZCkgMjguNzcyIFRqCi0tMjQ3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0NyBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMjQ3IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjQ4IFRKbQotKHdyaXRpbmcpIDI4Ljc4MiBUagotLTI0NyBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MTggVEptCi0oVGhhdCkgMTguMjYxNCBUagotLTI0OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9pZHMpIDE2LjYwNzcgVGoKLTcyIDI1OC4yNiBUZAotKHBvcnRhYmlsaXR5KSA0MS41MTQyIFRqCi0tMjcyIFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjczIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNzIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI3MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNzMgVEptCi0ob3BlcmF0aW9ucykgNDEuNTA0MiBUagotLTI3MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNzMgVEptCi0oYXR0cmliKSAyMS4wMzEgVGoKLTIwIFRKbQotKHV0ZXMsKSAxOC41NDA0IFRqCi0tMjc4IFRKbQotKHdoaWxzdCkgMjQuMzU4NiBUagotLTI3MiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNzIgVEptCi0oYmVpbmcpIDIyLjEzNjkgVGoKLS0yNzMgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTI3MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MyBUSm0KLShhbikgOS40MDQ2OSBUagotLTI3MiBUSm0KLShpbXBvc2l0aW9uKSA0Mi42MyBUagotLTI3MiBUSm0KLShvbikgOS45NjI2IFRqCi0tMjczIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMjQ2LjMwNCBUZAotKHByb2dyYW1tZXIpIDQ5LjI0NTEgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI0NC4xNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNC4xODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxNS42ODMgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMS4zLikgNDMuMDcyOSBUagotLTI3OCBUSm0KLShVdGlsaXR5KSA0Ny44MjQ0IFRqCi0tMjc4IFRKbQotKGZ1bmN0aW9ucykgNzcuNDY5MyBUagotLTI3OCBUSm0KLShzdW1tYXIpIDY2Ljk2NzkgVGoKLS0xMCBUSm0KLSh5KSA5LjU3MTc2IFRqCi1bMSAwIDAgMSA3MiAyMTIuMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwMi4xNTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5My43NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNzMgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yNzMgVEptCi0oc2ltcGxlKSAyNi41NzAzIFRqCi0tMjczIFRKbQotKG5lZWRzLCkgMjUuMTc1NSBUagotWzEgMCAwIDEgMTY1LjkyOSAxOTMuNzY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NS45MjkgLTE5My43NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NS45MjkgMTkzLjc2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDMwOS4zOTEgMTkzLjc2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDkuMzkxIC0xOTMuNzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTIuMTEyIDE5My43NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMyOS4yMTkgMTkzLjc2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjkuMjE5IC0xOTMuNzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjkuMjE5IDE5My43NjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDQ4NC42MzYgMTkzLjc2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODQuNjM2IC0xOTMuNzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODcuMzU3IDE5My43NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjczIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZWQuKSAyNC42Mjc1IFRqCi03MiAxODEuODEgVGQKLShUaGVzZSkgMjMuNzkwNyBUagotLTM3NCBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTM3MyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzc0IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNzMgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzc0IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0zNzMgVEptCi0ob25lKSAxNC4zODYgVGoKLS0zNzQgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMzczIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNzQgVEptCi0oYW5vdGhlcikgMjkuODc3OCBUagotLTM3NCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zNzMgVEptCi0oaW4pIDcuNzUwOSBUagotLTM3NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzczIFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTM3NCBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTM3MyBUSm0KLShjYWxsLikgMTYuODc2NiBUagotLTEzNjIgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzczIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM3NCBUSm0KLShhc3Nlc3MpIDI0LjM0ODYgVGoKLTcyIDE2OS44NTUgVGQKLSh3aGV0aGVyKSAzMi4wODk1IFRqCi0tMzQ0IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMzQzIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTM0NCBUSm0KLShmdWxcMDAybGwpIDIyLjE0NjkgVGoKLS0zNDQgVEptCi0oeW91cikgMTguMjYxNCBUagotLTM0MyBUSm0KLShtZW1vcnktdG8tbWVtb3J5KSA4MC43OTY3IFRqCi0tMzQ0IFRKbQotKGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24pIDExMi44OTYgVGoKLS0zNDMgVEptCi0ocmVxdWlyZW1lbnRzKSA1Mi4wMTQ3IFRqCi0tMzQ0IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTM0NCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzdGluZykgMjMuODAwNyBUagotNzIgMTU3LjkgVGQKLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZm9ydCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odW5kZXJzdGFuZGluZykgNTYuNDQ4MSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShnZW5lcmFsKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGNvbXBsZSkgMjkuMzI5OSBUagotMTUgVEptCi0oeCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi1bMSAwIDAgMSA3MiAxNTUuNzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNDUuNzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEzNS45ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvc2hpb2thKSAzMC45OTM2IFRqCi0tNDIzIFRKbQotKFRzdW5lbykgMjkuMzI5OSBUagotLTQyMiBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTUwLjE2IDEzNS45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUwLjE2IC0xMzUuOTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuMTYgMTM1Ljk4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0c3VuZW9AcnIuaWlqNHUub3IuanApIDEyNS41MjkgVGoKLVsxIDAgMCAxIDI3NS42OSAxMzUuOTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3NS42OSAtMTM1Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc1LjY5IDEzNS45ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS00MjMgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tNDIyIFRKbQotKGNvbnRyaWIpIDI4LjIyNCBUagotMjAgVEptCi0odXRlZCkgMTcuMTU1NiBUagotLTQyMyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS00MjMgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNDIyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MjMgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tNDIzIFRKbQotKGJldHRlcikgMjIuNjg0OCBUagotWzEgMCAwIDEgNDc2LjQ2MiAxMzUuOTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Ni40NjIgLTEzNS45ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ni40NjIgMTM1Ljk4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA1MDAuMzcyIDEzNS45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAwLjM3MiAtMTM1Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA0LjU4MyAxMzUuOTgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGktKSAzNS40MTcgVGoKLTcyIDEyNC4wMjcgVGQKLShiaWxpdHkpIDIxLjA0MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTE0NDYgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0zODggVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMzg3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotWzEgMCAwIDEgMTkzLjkxMyAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5My45MTMgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5My45MTMgMTI0LjAyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpvcGVuKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyNTMuNjg5IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjY4OSAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjY4OSAxMjQuMDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI2MC4zODUgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjAuMzg1IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjAuMzg1IDEyNC4wMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6cmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMzIwLjE2MSAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMC4xNjEgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMC4xNjEgMTI0LjAyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMjYuODU3IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI2Ljg1NyAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI2Ljg1NyAxMjQuMDI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iendyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAzOTIuNjExIDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkyLjYxMSAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkyLjYxMSAxMjQuMDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDM5OS4zMDYgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTkuMzA2IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTkuMzA2IDEyNC4wMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Zmx1c2gpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQ2NS4wNiAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NS4wNiAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY1LjA2IDEyNC4wMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDcxLjc1NiAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3MS43NTYgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3MS43NTYgMTI0LjAyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpjbG9zZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNTM3LjUwOSAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgMTI0LjAyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMTIuMDcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTIuMDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTIuMDcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemVycm9yKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxMzcuNzUzIDExMi4wNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtMTEyLjA3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjQwOCAxMTIuMDcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxNTcuNDQ5IDExMi4wNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU3LjQ0OSAtMTEyLjA3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU3LjQ0OSAxMTIuMDcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemxpYlZlcnNpb24pIDk1LjY0MSBUagotWzEgMCAwIDEgMjUzLjA5MSAxMTIuMDcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My4wOTEgLTExMi4wNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1My4wOTEgMTEyLjA3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzE5IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI2NiBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNjcgVEptCi0oXDAwMm5kKSAxNS41MDE4IFRqCi0tMjY2IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjY3IFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI2NiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjY3IFRKbQotKGNvbikgMTQuMzg2IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuaWVudCkgMjQuMzQ4NiBUagotLTI2NiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNjcgVEptCi0oc2ltcGxlKSAyNi41NzAzIFRqCi0tMjY2IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2NyBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi03MiAxMDAuMTE3IFRkCi0oYW5kKSAxNC4zODYgVGoKLS0yNzAgVEptCi0od3JpKSAxMy4yODAxIFRqCi0xIFRKbQotKHRpbmcsKSAxNy45OTI1IFRqCi0tMjc1IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yNjkgVEptCi0odGhvc2UpIDIxLjAzMSBUagotLTI3MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjY5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MCBUSm0KLShoaWdoLWxlKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjY5IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi0tNzM3IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjcwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI2OSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNzAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjY5IFRKbQotKFwoeWV0XCkpIDE4LjgwOTQgVGoKLS0yNzAgVEptCi0ob2YpIDguMjk4ODUgVGoKLTI1IFRKbQotKFwwMDJjaWFsbHkpIDI3LjY3NjEgVGoKLS0yNjkgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTI3MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLTcyIDg4LjE2MTQgVGQKLShtaW5pbWFsbHkpIDQwLjk2NjIgVGoKLS0yOTEgVEptCi0oZG9jdW1lbnRlZCkgNDguNjk3MiBUagotLTI5MSBUSm0KLShoZXJlLikgMTkuNjM2MyBUagotLTg2NyBUSm0KLShJZikgNi42MzUwOSBUagotLTI5MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI5MSBUSm0KLShicmVhaywpIDI0LjYxNzYgVGoKLS0zMDEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjkxIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI5MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKGspIDQuOTgxMyBUagotMTAgVEptCi0oZWVwKSAxMy44MjgxIFRqCi0tMjkxIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MSBUSm0KLShwaWVjZXMuKSAyNy4zODcyIFRqCi0tNDMzIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yOTEgVEptCi0oaG9wZSkgMTkuMzY3MyBUagotLTI5MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKGRvY3VtZW50KSAzOS4yOTI1IFRqCi0tMjkyIFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0yOTEgVEptCi0ocHJvcGVybHkpIDMzLjc1MzMgVGoKLS0yOTEgVEptCi0od2hlbikgMjEuNTc5IFRqCi03MiA3Ni4yMDYyIFRkCi0odGltZSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShwZXJtaXRzLikgMzIuMzc4NSBUagotWzEgMCAwIDEgNzIgNzQuMDQ5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIzLjE5NzZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuOTczN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTguMjI1IC01MS4wNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTU0MS4yODggNTEuMDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNDU1LjE2MSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTUuMDM2NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTMgMTMKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvc2hpb2thKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oY29udHJpYikgMjguMjI0IFRqCi0yMCBUSm0KLSh1dGVkKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG1vZGlcMDAyY2F0aW9ucykgNTQuMjQ2NCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFsbG8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWx0KSAxMy4yOTAxIFRqCi0tMjUwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW5kbykgMTcuNzEzNSBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oRExMLikgMjEuODU3OSBUagotWzEgMCAwIDEgNzIgNzA3Ljg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02OTguMTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzUuNTA0IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjIuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKEVycikgMjkuODUxNSBUagotMjAgVEptCi0ob3IpIDIwLjY1ODUgVGoKLS0yNzggVEptCi0oaGFuZGxpbmcpIDg2LjA4NCBUagotWzEgMCAwIDEgNzIgNjcwLjkwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjYxLjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUzLjgwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yMTQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTIxNSBUSm0KLShpcykgNi42NDUwNSBUagotLTIxNCBUSm0KLShkZXNpZ25lZCkgMzUuNDE3IFRqCi0tMjE1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMTQgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTIxNSBUSm0KLShjbGVhbmx5KSAyOC43NzIgVGoKLS0yMTQgVEptCi0oaW4pIDcuNzUwOSBUagotLTIxNSBUSm0KLShhbGwpIDkuOTYyNiBUagotLTIxNCBUSm0KLShzaXR1YXRpb25zLCkgNDAuNjg3MyBUagotLTIyMiBUSm0KLShpbmNsdWRpbmcpIDM3LjYzODcgVGoKLS0yMTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0LWNhc2UpIDM1LjQwNzEgVGoKLS0yMTQgVEptCi0oc2l0dWF0aW9uKSAzNC4zMjEyIFRqCi0tMjE1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjE0IFRKbQotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0yMTUgVEptCi0ocmFuZG9tKSAzMC40MzU3IFRqCi03MiA2NDEuODUgVGQKLShkYXRhLikgMTkuMDg4MyBUagotLTc2NCBUSm0KLShJJ20pIDE0LjM4NiBUagotLTI3NCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNzUgVEptCi0oMTAwJSkgMjMuMjQyNyBUagotLTI3NCBUSm0KLShzdXJlKSAxNi41OTc3IFRqCi0tMjc0IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNzQgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNzQgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjc0IFRKbQotKGFsKSA3LjE5MyBUagotMTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5cykgMTMuMjgwMSBUagotLTI3NCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjc0IFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMjgwIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjc0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI3NCBUSm0KLShtaWdodCkgMjMuMjUyNyBUagotLTI3NCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjc0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzQgVEptCi0oYWRkKSAxNC4zODYgVGoKLS0yNzQgVEptCi0oYSkgNC40MjMzOSBUagotLTI3NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0xIFRKbQotKGlnbmFsKSAxOS45MjUyIFRqCi0tMjc1IFRKbQotKGhhbmRsZXIpIDI5Ljg3NzggVGoKLS0yNzQgVEptCi0odG8pIDcuNzUwOSBUagotLTI3NCBUSm0KLShjYXRjaCkgMjEuMDIxMSBUagotLTI3NCBUSm0KLShzZSkgOC4yOTg4NSBUagotMTUgVEptCi0oZ21lbnRhdGlvbikgNDQuODMxNyBUagotNzIgNjI5Ljg5NCBUZAotKHZpb2xhdGlvbnMpIDM5LjMwMjUgVGoKLS0yNzMgVEptCi0oZHVyaW5nKSAyNi4wMTIzIFRqCi0tMjczIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNzMgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNzMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjczIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI3MyBUSm0KLShmZWVsaW5nKSAyNy42NjYxIFRqCi0tMjc0IFRKbQotKGVzcGVjaWFsbCkgMzQuODU5MSBUagotMSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNzQgVEptCi0ocGFyYW5vaWQuKSAzNy4zNDk4IFRqCi0tNzU4IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNzMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNzMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNzMgVEptCi0oaW50ZXJlc3RlZCkgMzguNzM0NiBUagotLTI3MyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjc0IFRKbQotKGhlYXJpbmcpIDI5Ljg3NzggVGoKLS0yNzMgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI3MyBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotNzIgNjE3LjkzOSBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyb2IpIDEzLjI4MDEgVGoKLTIwIFRKbQotKHVzdG5lc3MpIDI4Ljc4MiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGNvcnJ1cHRlZCkgMzguMTc2NyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKGRhdGEuKSAxOS4wODgzIFRqCi1bMSAwIDAgMSA3MiA2MTUuNzgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDYuMDM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTYuMjQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjUxIFRKbQotKDEuMC4zKSAxOS45MjUyIFRqCi0tMjUxIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNTEgVEptCi0ocm9iKSAxMy4yODAxIFRqCi0yMCBUSm0KLSh1c3QpIDExLjYyNjQgVGoKLS0yNTEgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTEgVEptCi0ocmVzcGVjdCkgMjguMjE0MSBUagotLTI1MiBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjUxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTEgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMjUxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uLikgMjYuODM5MiBUagotLTYyNiBUSm0KLShJbikgOC4yOTg4NSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlc3RpZykgMTguODE5NCBUagotNSBUSm0KLShhdGlvbnMpIDIzLjgwMDcgVGoKLS0yNTEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MSBUSm0KLShWKSA3LjE5MyBUagotMTExIFRKbQotKGFsZ3JpbmQpIDI4LjIyNCBUagotLTI1MSBUSm0KLShcKGEpIDcuNzQwOTQgVGoKLS0yNTIgVEptCi0odG9vbCkgMTUuNTAxOCBUagotLTI1MSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTEgVEptCi0oZGV0ZWN0aW5nKSAzNi41MjI5IFRqCi03MiA1ODQuMjg1IFRkCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS00MjIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTQyMSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS00MjIgVEptCi0obWFuYWdlbWVudFwpKSA1NC4yMjY0IFRqCi0tNDIxIFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tNDIyIFRKbQotKHRoYXQsKSAxNy40MzQ2IFRqCi0tNDY0IFRKbQotKGF0KSA3LjE5MyBUagotLTQyMiBUSm0KLShsZWFzdCkgMTguMjYxNCBUagotLTQyMSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS00MjIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDIyIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS00MjIgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTQyMiBUSm0KLShJKSAzLjMxNzU1IFRqCi0tNDIxIFRKbQotKHRlc3RlZCwpIDI1LjczMzQgVGoKLS00NjQgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00MjIgVEptCi0oc2luZ2xlLWJpdCkgMzcuNjM4NyBUagotLTQyMiBUSm0KLShlcnJvcnMpIDIzLjIzMjggVGoKLS00MjEgVEptCi0oaW4pIDcuNzUwOSBUagotLTQyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDU3Mi4zMyBUZAotKGRlY29tcHJlc3NlZCkgNTYuNDM4MSBUagotLTM0MiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzQxIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0MiBUSm0KLShjYXVnaHQpIDI2LjU2MDMgVGoKLS0zNDIgVEptCi0ocHJvcGVybHkpIDMzLjc1MzMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zNjUgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM0MSBUSm0KLShubykgOS45NjI2IFRqCi0tMzQyIFRKbQotKHNlKSA4LjI5ODg1IFRqCi0xNSBUSm0KLShnbWVudGF0aW9uKSA0NC44MzE3IFRqCi0tMzQyIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGF1bHRzLCkgMjEuMzEgVGoKLS0zNjUgVEptCi0obm8pIDkuOTYyNiBUagotLTM0MSBUSm0KLSh1c2VzKSAxNy4xNTU2IFRqCi0tMzQyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQyIFRKbQotKHVuaW5pdGlhbGlzZWQpIDQ5LjI2NTEgVGoKLS0zNDIgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS0zNjQgVEptCi0obm8pIDkuOTYyNiBUagotLTM0MiBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0zNDIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDIgVEptCi0ocmFuZ2UpIDIyLjEyNjkgVGoKLTcyIDU2MC4zNzUgVGQKLShyZWFkcykgMjEuMDIxMSBUagotLTI2MSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI2MCBUSm0KLSh3cml0ZXMsKSAyNi44MzkyIFRqCi0tMjYzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYxIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNjEgVEptCi0oaW5cMDAybml0KSAyMy44MTA2IFRqCi0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjEgVEptCi0obG9vcGluZykgMzAuNDQ1NyBUagotLTI2MSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjYwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MSBUSm0KLShkZWNvbXByZXNzb3IpIDU1LjMzMjMgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0zNDIgVEptCi0oU28pIDEwLjUyMDUgVGoKLS0yNjAgVEptCi0oaXQnKSA4Ljg1Njc1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjYxIFRKbQotKGNlcnRhaW5seSkgMzQuODU5MSBUagotLTI2MCBUSm0KLShwcmV0dHkpIDIzLjI0MjcgVGoKLS0yNjEgVEptCi0ocm9iKSAxMy4yODAxIFRqCi0yMCBUSm0KLSh1c3QsKSAxNC4xMTcgVGoKLS0yNjMgVEptCi0oYWx0aG91Z2gpIDM0Ljg2OTEgVGoKLS0yNjEgVEptCi0oSSkgMy4zMTc1NSBUagotLTI2MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZG4nKSAyNi4wMTIzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNjEgVEptCi0oY2xhaW0pIDIyLjEzNjkgVGoKLTcyIDU0OC40MiBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odG90YWxseSkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShib21icHJvb2YuKSA0Ni43NjQ0IFRqCi1bMSAwIDAgMSA3MiA1NDYuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MzYuNTE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MjYuNzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI4MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDEwNS44NCA1MjYuNzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNS44NCAtNTI2LjcyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA1Ljg0IDUyNi43MjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpsaWIuaCkgNDEuODQyOSBUagotWzEgMCAwIDEgMTQ3LjY4MyA1MjYuNzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny42ODMgLTUyNi43MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC40OTEgNTI2LjcyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb250YWlucykgMzMuMjA1MyBUagotLTI4MiBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI4MiBUSm0KLShkZVwwMDJuaXRpb25zKSA0Mi4wNzIxIFRqCi0tMjgyIFRKbQotKG5lZSkgMTMuODI4MSBUagotMSBUSm0KLShkZWQpIDE0LjM4NiBUagotLTI4MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgyIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI4MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTgxMSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI4MiBUSm0KLShwYXJ0aWN1bGFyKSAzOC4xNzY3IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjkwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI4MiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yODEgVEptCi0oZGVcMDAybml0ZWx5KSAzNy42Mzg3IFRqCi0tMjgyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI4MiBUSm0KLShpbmNsdWRlKSAyOS4zMjk5IFRqCi1bMSAwIDAgMSA3MiA1MTQuNzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTQuNzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTQuNzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliX3ByaXZhdGUuaCkgODkuNjYzNCBUagotWzEgMCAwIDEgMTYxLjY2NCA1MTQuNzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42NjQgLTUxNC43NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2MS42NjQgNTE0Ljc2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1MTMuMjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDMuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTMuMDY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA4Mi44MDc1IDQ5My4wNjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODIuODA3NSAtNDkzLjA2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODIuODA3NSA0OTMuMDY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliLmgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEyNC42NTEgNDkzLjA2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjQuNjUxIC00OTMuMDY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjQuNjUxIDQ5My4wNjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlvdXMpIDI0LjM0ODYgVGoKLS0yNTIgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUyIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yNTEgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjUyIFRKbQotKGRlXDAwMm5lZC4pIDMxLjgyMDUgVGoKLS02MzEgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUyIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUyIFRKbQotKGxpc3QpIDEyLjE4NDMgVGoKLS0yNTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUyIFRKbQotKGludGVuZGVkKSAzNC4zMTEyIFRqCi0tMjUyIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUyIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhoYXVzdGkpIDI4Ljc4MiBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUyIFRKbQotKGRlc2NyaXB0aW9uKSA0NC4yNzM4IFRqCi0tMjUyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiA0ODEuMTEyIFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM2IFRKbQotKGNpcmN1bXN0YW5jZXMpIDU2LjQzODEgVGoKLS0yMzYgVEptCi0oaW4pIDcuNzUwOSBUagotLTIzNyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTIzNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjM2IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yMzYgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjM2IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTIzNyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIzNiBUSm0KLShyZXR1cm5lZCkgMzMuMTk1NCBUagotLTIzNiBUSm0KLSgtLSkgNi42MzUwOSBUagotLTIzNiBUSm0KLSh0aG9zZSkgMjEuMDMxIFRqCi0tMjM2IFRKbQotKGRlc2NyaXB0aW9ucykgNDguMTQ5MiBUagotLTIzNiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMzcgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTIzNiBUSm0KLShsYXRlcikgMTcuNzAzNSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTMwNSBUSm0KLShSYXRoZXIpIDI2LjU2MDMgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yMzkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yMzYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzcgVEptCi0oaW50ZW5kZWQpIDM0LjMxMTIgVGoKLS0yMzYgVEptCi0odG8pIDcuNzUwOSBUagotNzIgNDY5LjE1NyBUZAotKGNvbikgMTQuMzg2IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI2NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjUgVEptCi0ocm91Z2gpIDIzLjI0MjcgVGoKLS0yNjYgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTI2NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2NiBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjY2IFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI2NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUuKSAxOS4wODgzIFRqCi0tNzE0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI2NSBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjY2IFRKbQotKFwwMDIpIDUuNTM5MjEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI2NSBUSm0KLShhY3Rpb25zKSAyOC4yMjQgVGoKLS0yNjYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjY2IFRKbQotKG5vcm1hbCkgMjguMjI0IFRqCi0tMjY1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY2IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI2NSBUSm0KLShpbnRlbmRlZCkgMzQuMzExMiBUagotLTI2NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY2IFRKbQotKGRlbm90ZSkgMjYuNTYwMyBUagotLTI2NSBUSm0KLShhbikgOS40MDQ2OSBUagotLTI2NiBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotNzIgNDU3LjIwMiBUZAotKHNpdHVhdGlvbi4pIDM2LjgxMTggVGoKLVsxIDAgMCAxIDcyIDQ1Ny4xMDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNy42MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNS43NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA0MjUuNzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMi4zNzg2IC0xLjMxMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQyNC40NDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0MTMuODA0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShyZXF1ZXN0ZWQpIDM4LjE3NjcgVGoKLS0yNTAgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjb21wbGV0ZWQpIDQxLjUwNDIgVGoKLS0yNTAgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0MTEuNjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy43NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5OC4xMzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4OC4zNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9SVU5fT0ssKSA1OS43NzU2IFRqCi0tNjAwIFRKbQotKEJaX0ZMVVNIX09LLCkgNzEuNzMwNyBUagotLTYwMCBUSm0KLShCWl9GSU5JU0hfT0spIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI4Ny4xOTMgMzg4LjM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE3LjY4NCAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg3LjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzc2LjM4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTE4Ljc5IDM3Ni4zODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE4Ljc5IC0zNzYuMzg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTguNzkgMzc2LjM4NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjAyLjQ3NiAzNzYuMzg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi40NzYgLTM3Ni4zODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMi40NzYgMzc2LjM4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyZXF1ZXN0ZWQpIDM4LjE3NjcgVGoKLS0yNTAgVEptCi0oXDAwM3VzaC9cMDAybmlzaC9ub3RoaW5nLXNwZWNpYWwpIDEwOC40OTMgVGoKLS0yNTAgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjb21wbGV0ZWQpIDQxLjUwNDIgVGoKLS0yNTAgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzNzQuMjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy43NjU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjAuNzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTAuOTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSAzNTAuOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MC4xOTkzIC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDkuNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAzMzguOTY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlZCwpIDQzLjk5NDggVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvZ2ljYWwpIDI3LjExODIgVGoKLS0yNTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotLTI1MCBUSm0KLShkdXJpbmcpIDI2LjAxMjMgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLVsxIDAgMCAxIDcyIDMzNi44MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxMy41NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMwMy43NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShraW5kLikgMjAuMjA0MiBUagotWzEgMCAwIDEgNzIgMzAxLjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI4Mi4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI3Mi4zMTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDI3Mi4zMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Mi4xNTQ0IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNzEuMDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMjYwLjM1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbmRpY2F0ZXMpIDM1Ljk2NSBUagotLTM4NiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4NiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzg2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTM4NiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzg1IFRKbQotKGltcHJvcGVybHkpIDQ0LjI3MzggVGoKLS0zODYgVEptCi0oY29tcGlsZWQpIDM3LjA4MDggVGoKLS0zODYgVEptCi0ob24pIDkuOTYyNiBUagotLTM4NiBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMzg1IFRKbQotKHBsYXRmb3JtKSAzNC4zMTEyIFRqCi0tMzg2IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMzg2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODYgVEptCi0obWFqb3IpIDIzLjI0MjcgVGoKLS0zODUgVEptCi0oY29uXDAwMmd1cmF0aW9uKSA1My4xMzA1IFRqCi0tMzg2IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0xMDggMjQ4LjQwNCBUZAotKFNwZWNpXDAwMmNhbGx5KSA0Ny4wNDM0IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDgxIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tNDM1IFRKbQotKG1lYW5zKSAyNS40NTQ0IFRqCi0tNDM1IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDIyMC42MTQgMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuNjE0IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuNjE0IDI0OC40MDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc2l6ZW9mXChjaGFyXCkpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI5Mi4zNDUgMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTIuMzQ1IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTIuMzQ1IDI0OC40MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjk5LjYyOCAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OS42MjggLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS42MjggMjQ4LjQwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKHNob3J0XCkpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDM3Ny4zMzcgMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzcuMzM3IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODEuNjY5IDI0OC40MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQwMC4zODggMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDAuMzg4IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDAuMzg4IDI0OC40MDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc2l6ZW9mXChpbnRcKSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDY2LjE0MSAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ni4xNDEgLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3MC40NzQgMjQ4LjQwNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS00MzUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tNDM1IFRKbQotKDEsKSA3LjQ3MTk1IFRqCi0tNDgxIFRKbQotKDIpIDQuOTgxMyBUagotLTQzNSBUSm0KLShhbmQpIDE0LjM4NiBUagotMTA4IDIzNi40NDkgVGQKLSg0KSA0Ljk4MTMgVGoKLS0zODkgVEptCi0ocmVzcGVjdGkpIDMwLjk4MzcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWx5KSAxMi4xNzQzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDI0IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzkwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzg5IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM4OSBUSm0KLShiZS4pIDExLjg5NTMgVGoKLS0xNDU2IFRKbQotKE5vdGUpIDE5LjM2NzMgVGoKLS0zODkgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTM4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODkgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM5MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zODkgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0zODkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTM4OSBUSm0KLShwcm9wZXJseSkgMzMuNzUzMyBUagotLTM5MCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzg5IFRKbQotKDY0LWJpdCkgMjMuODAwNyBUagotLTM4OSBUSm0KLShwbGF0Zm9ybXMpIDM4LjE4NjYgVGoKLTEwOCAyMjQuNDkzIFRkCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTIgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjkyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MiBUSm0KLShMUDY0KSAyMS41ODkgVGoKLS0yOTIgVEptCi0ocHJvZ3JhbW1pbmcpIDU0LjIzNjQgVGoKLS0yOTMgVEptCi0obW9kZWwpIDI0LjkwNjUgVGoKLS0yOTIgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0yOTIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MiBUSm0KLShpcywpIDkuMTM1NyBUagotLTMwMyBUSm0KLSh3aGVyZSkgMjQuMzM4NiBUagotWzEgMCAwIDEgMzU1LjI3OSAyMjQuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1NS4yNzkgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1NS4yNzkgMjI0LjQ5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKGxvbmdcKSkgNzEuNzMwNyBUagotWzEgMCAwIDEgNDI3LjAxIDIyNC40OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI3LjAxIC0yMjQuNDkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjkuOTIgMjI0LjQ5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDQ3LjIxNyAyMjQuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0Ny4yMTcgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ny4yMTcgMjI0LjQ5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKHZvaWQpIDY1Ljc1MzIgVGoKLTUxMi45NyAyMjIuNzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi01MTguOTQ4IDIyNC40OTMgVGQKLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNTI0LjkyNSAyMjQuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyNC45MjUgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNy44MzYgMjI0LjQ5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLTEwOCAyMTIuNTM4IFRkCi0oOC4pIDcuNDcxOTUgVGoKLS02MjAgVEptCi0oVW5kZXIpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0oTFA2NCwpIDI0LjA3OTYgVGoKLVsxIDAgMCAxIDE3NS42MDYgMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzUuNjA2IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzUuNjA2IDIxMi41MzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc2l6ZW9mXChpbnRcKSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjQxLjM2IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQxLjM2IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDMuODUgMjEyLjUzOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShzdGlsbCkgMTQuOTUzOSBUagotLTI1MCBUSm0KLSg0LCkgNy40NzE5NSBUagotLTI1MCBUSm0KLShzbykgOC44NTY3NSBUagotWzEgMCAwIDEgMjkxLjc0IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkxLjc0IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTEuNzQgMjEyLjUzOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMzM5LjU2IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM5LjU2IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzkuNTYgMjEyLjUzOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQzMy40NTggMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzMuNDU4IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzMuNDU4IDIxMi41MzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obG9uZykgMjMuOTEwMiBUagotWzEgMCAwIDEgNDU3LjM2OCAyMTIuNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Ny4zNjggLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OS44NTkgMjEyLjUzOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0eXBlLCkgMTkuNjQ2MiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShPSy4pIDE2Ljg3NjYgVGoKLVsxIDAgMCAxIDcyIDIxMC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE5Ni44NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE4Ny4wNzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE3My42MTkgMTg3LjA3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNC4xMSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTg1Ljc2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDE3NS4xMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oV2hlbikgMjMuNzkwNyBUagotLTI5MSBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjkwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzAwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjkxIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkwIFRKbQotKGltcG9ydGFudCkgMzguNzQ0NiBUagotLTI5MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkwIFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTI5MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjkxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkxIFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0yOTAgVEptCi0oc2VxdWVuY2UpIDM2LjUxMjkgVGoKLS0yOTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI5MSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjkwIFRKbQotKHN0cnVjdHVyZXMpIDM4LjczNDYgVGoKLTEwOCAxNjMuMTYzIFRkCi0oXChiKSA4LjI5ODg1IFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVycykgMTQuOTMzOSBUagotLTIwNiBUSm0KLShldGNcKSkgMTQuOTMzOSBUagotLTIwNSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNSBUSm0KLShjb3JyZWN0KSAyNy42NTYyIFRqCi0tMjA2IFRKbQotKHN0YXRlcy4pIDI0LjYyNzUgVGoKLVsxIDAgMCAxIDIzOS40MDkgMTYzLjE2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzkuNDA5IC0xNjMuMTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzkuNDA5IDE2My4xNjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDI4Ny4yMyAxNjMuMTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Ny4yMyAtMTYzLjE2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjI3OCAxNjMuMTYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNoZWNrcykgMjcuMTA4MiBUagotLTIwNiBUSm0KLShhcykgOC4yOTg4NSBUagotLTIwNSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMjA2IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjA1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjA2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIwNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjA1IFRKbQotKGVuc3VyZSkgMjYuMDAyNCBUagotLTIwNiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMDUgVEptCi0oaGFwcGVuaW5nLCkgNDMuOTk0OCBUagotLTIxNSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIwNSBUSm0KLShyZXR1cm5zKSAyNy42NjYxIFRqCi1bMSAwIDAgMSAxMDggMTUxLjIwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTE1MS4yMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAxNTEuMjA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAyMDkuNjE5IDE1MS4yMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA5LjYxOSAtMTUxLjIwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEzLjI3IDE1MS4yMDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaWYpIDYuMDg3MTUgVGoKLS0zNjcgVEptCi0obm90LikgMTUuMjIyOSBUagotLTY1OSBUSm0KLShDb2RlKSAyMS4wMzEgVGoKLS0zNjcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNjcgVEptCi0oY29tcGxpZXMpIDM1Ljk3NDkgVGoKLS0zNjYgVEptCi0ocHJlY2lzZWx5KSAzNS45NjUgVGoKLS0zNjcgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM2NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjcgVEptCi0oZnVuY3Rpb24pIDMzLjIwNTMgVGoKLS0zNjYgVEptCi0oc2VtYW50aWNzLCkgNDEuNzgzMSBUagotLTM5NiBUSm0KLShhcykgOC4yOTg4NSBUagotLTM2NyBUSm0KLShkZXRhaWxlZCkgMzEuNTQxNiBUagotMTA4IDEzOS4yNTMgVGQKLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yNTAgVEptCi0ocmVjZWkpIDE5LjM1NzMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlOykgMTkuMzY3MyBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRlbm90ZXMpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z2d5KSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzdGlnKSAxOC44MTk0IFRqCi01IFRKbQotKGF0ZS4pIDE0LjEwNyBUagotWzEgMCAwIDEgNzIgMTM3LjA5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuNzY1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTIzLjU4N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTEzLjc4OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAxMTMuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuMTc2OCAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTEyLjQ3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDEwMS44MzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS00MzQgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tNDM0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MzQgVEptCi0ocGFyYW1ldGVyKSAzOS44MzA1IFRqCi0tNDM0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MzQgVEptCi0oYSkgNC40MjMzOSBUagotLTQzMyBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTQzNCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS00MzQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00MzQgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tNDM0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDM0IFRKbQotKHJhbmdlKSAyMi4xMjY5IFRqCi0tNDM0IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tNDM0IFRKbQotKG90aGVyd2lzZSkgMzguNzM0NiBUagotLTQzNCBUSm0KLShtYW5pZmVzdGx5KSA0Mi4wNjIxIFRqCi0tNDM0IFRKbQotKGluY29ycmVjdC4pIDM3Ljg5NzcgVGoKLS0xNzIzIFRKbQotKEFzKSAxMS4wNjg0IFRqCi0xMDggODkuODc3OCBUZAotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDEzMS42NDQgODkuODc3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNjQ0IC04OS44Nzc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzEuNjQ0IDg5Ljg3NzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDIzMy4yNjMgODkuODc3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzMuMjYzIC04OS44Nzc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzMuMjYzIDg5Ljg3NzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTU5NSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS01OTYgVEptCi0oZGVub3RlcykgMzAuNDM1NyBUagotLTU5NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNTk1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTU5NiBUSm0KLShpbikgNy43NTA5IFRqCi0tNTk1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTU5NSBUSm0KLShjbGllbnQpIDIyLjEzNjkgVGoKLS01OTUgVEptCi0oY29kZS4pIDIxLjMgVGoKLS0yNjkyIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTU5NiBUSm0KLShkaXN0aW5jdGlvbikgNDIuMDcyMSBUagotLTU5NSBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi1bMSAwIDAgMSAxMDggNzcuOTIyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTc3LjkyMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA3Ny45MjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxOTEuNjg2IDc3LjkyMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjY4NiAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk0LjE3NyA3Ny45MjI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMTEuMDUzIDc3LjkyMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjExLjA1MyAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjExLjA1MyA3Ny45MjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAzMTIuNjcyIDc3LjkyMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEyLjY3MiAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE1LjE2MyA3Ny45MjI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oYml0KSAxMC41MjA1IFRqCi0tMjUwIFRKbQotKGhhenkpIDE4LjgwOTQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN0aWxsKSAxNC45NTM5IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnRoKSAxNi4wNDk3IFRqCi0tMjUwIFRKbQotKG1ha2luZy4pIDMyLjM3ODUgVGoKLVsxIDAgMCAxIDcyIDc1Ljc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE0IDE0Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTQzLjczMSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzQuMjIxNyAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzA4LjcyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS0yMjggVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjI3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMjggVEptCi0ocmVxdWVzdCkgMjguNzcyIFRqCi0tMjI3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjggVEptCi0oYWxsb2NhdGUpIDMwLjk4MzcgVGoKLS0yMjggVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjI3IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbGVkLikgMjEuODU3OSBUagotLTYwNSBUSm0KLShOb3RlKSAxOS4zNjczIFRqCi0tMjI4IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yMjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjI3IFRKbQotKHF1YW50aXR5KSAzMi42NTc0IFRqCi0tMjI4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjI3IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTIyOCBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS0yMjggVEptCi0odG8pIDcuNzUwOSBUagotLTIyNyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0xMDggNjg2LjEyNyBUZAotKGEpIDQuNDIzMzkgVGoKLS0zNTEgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMzUyIFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTM1MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM1MiBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tMzUxIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tMzUyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM1MSBUSm0KLShzdHJlYW0nKSAyOS44Nzc4IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzUxIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTM1MiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0zNTEgVEptCi0oYmVlbikgMTguODA5NCBUagotLTM1MiBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotLTEyMjggVEptCi0oU28pIDEwLjUyMDUgVGoKLVsxIDAgMCAxIDQyNi40NzEgNjg2LjEyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjYuNDcxIC02ODYuMTI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjYuNDcxIDY4Ni4xMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSA1MjIuMTEzIDY4Ni4xMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTIyLjExMyAtNjg2LjEyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI1LjYxNCA2ODYuMTI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxMDggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE2Ny43NzYgNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNzc2IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMTMgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtYXkpIDE3LjE1NTYgVGoKLS00MzcgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi1bMSAwIDAgMSAyMjEuNzg0IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIxLjc4NCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIxLjc4NCA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgMjkzLjUxNSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5My41MTUgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Ny44NjcgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tNDM3IFRKbQotKHRob3VnaCkgMjcuNjc2MSBUagotLTQzNyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS00MzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00MzcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDM3IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MzcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQzNyBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS00MzcgVEptCi0oYmVlbikgMTguODA5NCBUagotLTQzNyBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotMTA4IDY2Mi4yMTcgVGQKLShUaGUpIDE1LjQ5MTggVGoKLS00NzkgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTQ3OCBUSm0KLShpcykgNi42NDUwNSBUagotLTQ3OSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS00NzggVEptCi0odHJ1ZSkgMTUuNDkxOCBUagotLTQ3OSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS00NzkgVEptCi0oY29tcHJlc3Npb247KSA1My4xMzA1IFRqCi0tNTkzIFRKbQotKG9uY2UpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDMwMS42NzUgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDEuNjc1IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDEuNjc1IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSA0MDkuMjcxIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjI3MSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE0LjA0IDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob3IpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQyNy4xMDcgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjcuMTA3IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjcuMTA3IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MTYuNzcxIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE2Ljc3MSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTIxLjUzOSA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTEwOCA2NTAuMjYyIFRkCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlZCwpIDQzLjk5NDggVGoKLVsxIDAgMCAxIDIwNS42NzIgNjUwLjI2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDUuNjcyIC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDUuNjcyIDY1MC4yNjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAyNzcuNDAzIDY1MC4yNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3LjQwMyAtNjUwLjI2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc5Ljg5NCA2NTAuMjYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShvY2N1cikgMjIuMTI2OSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjQ4LjEwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MzQuMTU3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjQuMzU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0RBVEFfRVJST1IpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE0OS43MDkgNjI0LjM1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgwLjE5OTMgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMy4wNDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2MTIuNDA0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybmVkKSAzNi41MjI5IFRqCi0tMjY2IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTI2NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjUgVEptCi0oaW50ZSkgMTQuOTQzOSBUagotMTUgVEptCi0oZ3JpdHkpIDE4LjgxOTQgVGoKLS0yNjYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNjYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLS0yNjYgVEptCi0oZHVyaW5nKSAyNi4wMTIzIFRqCi0tMjY1IFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi0tNzE0IFRKbQotKE1vc3QpIDIwLjQ4MzEgVGoKLS0yNjYgVEptCi0oaW1wb3J0YW50bCkgNDEuNTE0MiBUagotMSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY0IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNjkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjY2IFRKbQotKG1lYW5zKSAyNS40NTQ0IFRqCi0tMjY1IFRKbQotKHdoZW4pIDIxLjU3OSBUagotMTA4IDYwMC40NDggVGQKLShzdG9yZWQpIDI0LjM0ODYgVGoKLS0yMjIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjMgVEptCi0oY29tcHV0ZWQpIDM5LjI5MjUgVGoKLS0yMjIgVEptCi0oQ1JDcykgMjMuODEwNiBUagotLTIyMiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yMjIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMjIgVEptCi0oZG8pIDkuOTYyNiBUagotLTIyMiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMjIgVEptCi0obWF0Y2guKSAyNi44MzkyIFRqCi0tNjAyIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMjIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjIyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjIzIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yMjIgVEptCi0ocmV0dXJuZWQpIDMzLjE5NTQgVGoKLS0yMjIgVEptCi0odXBvbikgMTkuOTI1MiBUagotLTIyMiBUSm0KLShkZXRlY3Rpb24pIDM2LjUyMjkgVGoKLS0yMjMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIyMiBUSm0KLShvdGhlcikgMjAuNDczMSBUagotMTA4IDU4OC40OTMgVGQKLShhbm9tYWx5KSAzNC4zMTEyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDcyIDU4Ni4zMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcyLjM4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYyLjU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0RBVEFfRVJST1JfTUFHSUMpIDExMy41NzQgVGoKLVsxIDAgMCAxIDE4NS41NzQgNTYyLjU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE2LjA2NSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTYxLjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTUwLjYzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBcykgMTEuMDY4NCBUagotLTMwNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA2IFRKbQotKHNwZWNpYWwpIDI3LjY2NjEgVGoKLS0zMDYgVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTMwNyBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTkxLjg1MiA1NTAuNjM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MS44NTIgLTU1MC42MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5MS44NTIgNTUwLjYzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9EQVRBX0VSUk9SKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyNjkuNTYxIDU1MC42MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY5LjU2MSAtNTUwLjYzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY5LjU2MSA1NTAuNjM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMDYgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0oc29tZXRpbWVzKSA0Mi42MiBUagotLTMwNyBUSm0KLSh1c2VmKSAxNi41OTc3IFRqCi0xIFRKbQotKHVsKSA3Ljc1MDkgVGoKLS0zMDcgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNiBUSm0KLShrbm8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMzA2IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMwNiBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zMDYgVEptCi0oZG9lcykgMTguMjYxNCBUagotMTA4IDUzOC42OCBUZAotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShzdGFydCkgMTcuMTU1NiBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb3JyZWN0KSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG1hZ2ljKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDI2MS41NjIgNTM4LjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MS41NjIgLTUzOC42OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYxLjU2MiA1MzguNjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oJ0InKSAxNy45MzI3IFRqCi0tNjAwIFRKbQotKCdaJykgMTcuOTMyNyBUagotLTYwMCBUSm0KLSgnaCcpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDMyNy4zMTYgNTM4LjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNy4zMTYgLTUzOC42OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI3LjMxNiA1MzguNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkuKSA1LjgwODIgVGoKLVsxIDAgMCAxIDcyIDUzNi41MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTIyLjU3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTEyLjc3NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotWzEgMCAwIDEgMTM3Ljc1MyA1MTIuNzc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNjguMjQ0MSAtMS4zMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTEuNDY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTAwLjgyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5lZCkgMzYuNTIyOSBUagotLTIzMyBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAxNTkuMTIzIDUwMC44MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU5LjEyMyAtNTAwLjgyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5LjEyMyA1MDAuODIyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDIxOC44OTkgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTguODk5IC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuMjE4IDUwMC44MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIzNy45MjMgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzcuOTIzIC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzcuOTIzIDUwMC44MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDMwMy42NzYgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuNjc2IC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuOTk1IDUwMC44MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2hlbikgMjEuNTc5IFRqCi0tMjMzIFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMjMyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjMzIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjMzIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjMzIFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0yMzIgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yMzMgVEptCi0od3JpdGluZykgMjguNzgyIFRqCi0tMjMzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMzMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjMyIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLTEwOCA0ODguODY3IFRkCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTM4NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM1NyBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAxNTguNTExIDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjUxMSAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjUxMSA0ODguODY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNDIuMTk3IDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQyLjE5NyAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1Ljc1NSA0ODguODY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNjMuNjk4IDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjY5OCAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjY5OCA0ODguODY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgMzUzLjM2MiA0ODguODY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1My4zNjIgLTQ4OC44NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ni45MiA0ODguODY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTM1NyBUSm0KLShhdHRlbXB0cykgMzMuNzYzMyBUagotLTM1NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzU3IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTM1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzU3IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTM1NyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNTggVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU3IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0xMDggNDc2LjkxMiBUZAotKGluZGljYXRvcikgMzUuNDE3IFRqCi0tMjYwIFRKbQotKFwodml6LCkgMTcuOTgyNSBUagotWzEgMCAwIDEgMTY2LjYwMyA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ni42MDMgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni42MDMgNDc2LjkxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZXJyb3JcKGZcKSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyMjAuNDAxIDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIwLjQwMSAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjQwMSA0NzYuOTEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjYwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjYwIFRKbQotKHNldC4pIDEzLjU1OTEgVGoKLS02NzkgVEptCi0oT24pIDEyLjE3NDMgVGoKLS0yNjAgVEptCi0ocmVjZWlwdCkgMjcuMTA4MiBUagotLTI2MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMzExLjIyMyA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMS4yMjMgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMS4yMjMgNDc2LjkxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotWzEgMCAwIDEgMzc2Ljk3NiA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ni45NzYgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3Ni45NzYgNDc2LjkxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjYwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MCBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0yNjAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjYwIFRKbQotKGNvbnN1bHQpIDI4Ljc4MiBUagotWzEgMCAwIDEgNDgyLjA2OCA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Mi4wNjggLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi4wNjggNDc2LjkxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShlcnJubykgMjkuODg3OCBUagotWzEgMCAwIDEgNTExLjk1NiA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS45NTYgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxNC41NDYgNDc2LjkxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQvb3IpIDI1LjQ1NDQgVGoKLVsxIDAgMCAxIDEwOCA0NjQuOTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwOCAtNDY0Ljk1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQ2NC45NTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ocGVycm9yKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxNDMuODY1IDQ2NC45NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjg2NSAtNDY0Ljk1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ2LjM1NiA0NjQuOTU3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWNxdWlyZSkgMjkuMzE5OSBUagotLTI1MCBUSm0KLShvcGVyYXRpbmctc3lzdGVtKSA2OC42MjI0IFRqCi0tMjUwIFRKbQotKHNwZWNpXDAwMmMpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oaW5mb3JtYXRpb24pIDQ3LjA0MzQgVGoKLS0yNTAgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2JsZW0uKSAzNS42OTYgVGoKLVsxIDAgMCAxIDcyIDQ2Mi44XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODQ5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDguODUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzkuMDU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1VORVhQRUNURURfRU9GKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxNzMuNjE5IDQzOS4wNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDQuMTEgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNy43NDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0MjcuMDk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybmVkKSAzNi41MjI5IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDE1OS40NjcgNDI3LjA5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNDY3IC00MjcuMDk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTkuNDY3IDQyNy4wOTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjE5LjI0MiA0MjcuMDk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOS4yNDIgLTQyNy4wOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS43MzMgNDI3LjA5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGVuKSAyMS41NzkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKFwwMDJuaXNoZXMpIDMwLjQ0NTcgVGoKLS0yNTAgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tMjUwIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShkZXRlY3RlZC4pIDM1LjY4NiBUagotWzEgMCAwIDEgNzIgNDI0Ljk0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTAuOTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MDEuMTk2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09VVEJVRkZfRlVMTCkgODkuNjYzNCBUagotWzEgMCAwIDEgMTYxLjY2NCA0MDEuMTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTIuMTU0NCAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk5Ljg4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDM4OS4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS0yNTggVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMTU5LjYzMiAzODkuMjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OS42MzIgLTM4OS4yNDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS42MzIgMzg5LjI0MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDMwMy4wOTQgMzg5LjI0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuMDk0IC0zODkuMjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuNjY4IDM4OS4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMyMi42MjcgMzg5LjI0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjIuNjI3IC0zODkuMjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjIuNjI3IDM4OS4yNDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDQ3OC4wNDQgMzg5LjI0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzguMDQ0IC0zODkuMjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODAuNjE4IDM4OS4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLShpbmRpY2F0ZSkgMzEuNTQxNiBUagotLTI1OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0xMDggMzc3LjI4NiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShcMDAydCkgOC4zMDg4MSBUagotLTI1MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjUwIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZWQuKSAyNC42Mjc1IFRqCi1bMSAwIDAgMSA3MiAzNzUuMTI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1MS4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMyOC41ODUgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuMy4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oTG8pIDI1LjI0NDcgVGoKLTE1IFRKbQotKHctbGUpIDQwLjE4MDggVGoKLTE1IFRKbQotKHZlbCkgMjguNzE1MyBUagotLTI3OCBUSm0KLShpbnRlcmZhY2UpIDg2LjEwNDYgVGoKLVsxIDAgMCAxIDcyIDMyOC4zMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxOC4zNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5Ny45NjQgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy4xLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAyOTcuOTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTI5Ny45NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMjk3Ljk2NCBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxODUuOTI2IFRqCi1bMSAwIDAgMSAzMDUuNzg1IDI5Ny45NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMzLjc4NSAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQ0Ljc3OV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxNSAxNQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTI5Ni41MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjc0Ljk2OSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDI3MS4zODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHR5cGVkZWYpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oc3RydWN0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTEyNi42NDIgNjk3LjkzMyBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA2OTkuNjc2IFRkCi0obmV4dF9pbjspIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNjg3LjcyMSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhdmFpbF9pbjspIDUzLjc5OCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvdGFsX2luX2xvMzI7KSA4My42ODU4IFRqCi05OC40ODc5IDY2My44MTEgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odG90YWxfaW5faGkzMjspIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjM5LjkgVGQKLShjaGFyKSAyMy45MTAyIFRqCi0xMjYuNjQyIDYzOC4xNTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzIuNjIgNjM5LjkgVGQKLShuZXh0X291dDspIDUzLjc5OCBUagotOTguNDg3OSA2MjcuOTQ1IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGF2YWlsX291dDspIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNjE1Ljk5IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvdGFsX291dF9sbzMyOykgODkuNjYzNCBUagotOTguNDg3OSA2MDQuMDM1IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvdGFsX291dF9oaTMyOykgODkuNjYzNCBUagotOTguNDg3OSA1ODAuMTI1IFRkCi0odm9pZCkgMjMuOTEwMiBUagotMTI2LjY0MiA1NzguMzgxIFRkCi0oKikgNS45Nzc1NiBUagotMTMyLjYyIDU4MC4xMjUgVGQKLShzdGF0ZTspIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLTEyNi42NDIgNTU0LjQ3MSBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA1NTYuMjE0IFRkCi0oXCgpIDUuOTc3NTYgVGoKLTEzOC41OTcgNTU0LjQ3MSBUZAotKCopIDUuOTc3NTYgVGoKLTE0NC41NzUgNTU2LjIxNCBUZAotKGJ6YWxsb2NcKVwodm9pZCkgNzcuNzA4MyBUagotMjI2LjUyNyA1NTQuNDcxIFRkCi0oKikgNS45Nzc1NiBUagotMjMyLjUwNSA1NTYuMjE0IFRkCi0oLGludCxpbnRcKTspIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNTQ0LjI1OSBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLTEzMi42MiA1NDIuNTE2IFRkCi0oKikgNS45Nzc1NiBUagotMTM4LjU5NyA1NDQuMjU5IFRkCi0oYnpmcmVlXClcKHZvaWQpIDcxLjczMDcgVGoKLTIxNC41NzIgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTIyMC41NSA1NDQuMjU5IFRkCi0oLHZvaWQpIDI5Ljg4NzggVGoKLTI1NC42ODIgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTI2MC42NTkgNTQ0LjI1OSBUZAotKFwpOykgMTEuOTU1MSBUagotOTguNDg3OSA1MzIuMzA0IFRkCi0odm9pZCkgMjMuOTEwMiBUagotMTI2LjY0MiA1MzAuNTYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzIuNjIgNTMyLjMwNCBUZAotKG9wYXF1ZTspIDQxLjg0MjkgVGoKLTg5Ljk5OTkgNTIwLjM0OSBUZAotKH0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtOykgNTkuNzc1NiBUagotODkuOTk5OSA0OTYuNDM4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMjkyLjI4MSA0OTQuNjk1IFRkCi0oKikgNS45Nzc1NiBUagotMjk4LjI1OCA0OTYuNDM4IFRkCi0oc3RybSwpIDI5Ljg4NzggVGoKLTE5Ni4wOTkgNDg0LjQ4MyBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrLCkgODMuNjg1OCBUagotMTk2LjA5OSA0NzIuNTI4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSwpIDU5Ljc3NTYgVGoKLTE5Ni4wOTkgNDYwLjU3MyBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNDQ1LjAzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MzUuMDY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjMuMTEzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByZXBhcmVzKSAzNC4zMDEyIFRqCi0tMzU2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTM1NiBUSm0KLShjb21wcmVzc2lvbi4pIDUyLjg1MTYgVGoKLS0xMjU2IFRKbQotKFRoZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgMjA5LjQwOSA0MjMuMTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwOS40MDkgLTQyMy4xMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwOS40MDkgNDIzLjExMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiel9zdHJlYW0pIDUzLjc5OCBUagotWzEgMCAwIDEgMjYzLjIwOCA0MjMuMTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2My4yMDggLTQyMy4xMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ni43NTQgNDIzLjExMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLS0zNTYgVEptCi0oaG9sZHMpIDIxLjU4OSBUagotLTM1NiBUSm0KLShhbGwpIDkuOTYyNiBUagotLTM1NiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzU2IFRKbQotKHBlcnRhaW5pbmcpIDQwLjM5ODMgVGoKLS0zNTYgVEptCi0odG8pIDcuNzUwOSBUagotLTM1NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTYgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zNTUgVEptCi0oYWN0aSkgMTQuMzg2IFRqCi0yNSBUSm0KLSh2aXR5KSAxNS41MDE4IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTI1NiBUSm0KLShBKSA3LjE5MyBUagotWzEgMCAwIDEgNzIgNDExLjE1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDExLjE1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiel9zdHJlYW0pIDUzLjc5OCBUagotWzEgMCAwIDEgMTI1Ljc5OCA0MTEuMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNS43OTggLTQxMS4xNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyOC41ODEgNDExLjE1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLS0yNzkgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjgwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjc5IFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMjc5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjgwIFRKbQotKGluaXRpYWxpc2VkKSAzOS4zMDI1IFRqCi0tMjc5IFRKbQotKHByaW9yKSAxOS4zNjczIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgwIFRKbQotKGNhbGwuKSAxNi44NzY2IFRqCi0tNzk2IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI3OSBUSm0KLShcMDAyZWxkcykgMjEuNTg5IFRqCi0tMjc5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MzEuOTM5IDQxMS4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMxLjkzOSAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMxLjkzOSA0MTEuMTU4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA0ODUuNzM4IDQxMS4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg1LjczOCAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDg4LjUyIDQxMS4xNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJpc2UpIDM2LjUyMjkgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiAzOTkuMjAzIFRkCi0oZW50aXJldHkpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHVzZXIpIDE2LjU5NzcgVGoKLTIwIFRKbQotKC12aXNpYmxlKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKGRhdGEuKSAxOS4wODgzIFRqCi1bMSAwIDAgMSAyMDQuNDIyIDM5OS4yMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQyMiAtMzk5LjIwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQyMiAzOTkuMjAzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0YXRlKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMzQuMzEgMzk5LjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuMzEgLTM5OS4yMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNi44IDM5OS4yMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwb2ludGVyKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJpKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGF0ZSkgMTEuNjE2NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHN0cnVjdHVyZXMpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0ocmVxdWlyZWQpIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uLikgNTIuODUxNiBUagotWzEgMCAwIDEgNzIgMzk3LjA0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg3LjA4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDdXN0b20pIDMxLjAwMzYgVGoKLS0zNzIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzcyIFRKbQotKGFsbG9jYXRvcnMpIDM4LjczNDYgVGoKLS0zNzIgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzcyIFRKbQotKHN1cHBvcnRlZCwpIDQxLjc4MzEgVGoKLS00MDMgVEptCi0odmlhKSAxMi4xNzQzIFRqCi0tMzcyIFRKbQotKFwwMDJlbGRzKSAyMS41ODkgVGoKLVsxIDAgMCAxIDI4OC45MDggMzc3LjI4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODguOTA4IC0zNzcuMjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODguOTA4IDM3Ny4yODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMzMwLjc1MSAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMC43NTEgLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMC43NTEgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMzcuMjUzIDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM3LjI1MyAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM3LjI1MyAzNzcuMjg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzczLjExOCAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3My4xMTggLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3My4xMTggMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tNDAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzOTcuNzE0IDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk3LjcxNCAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk3LjcxNCAzNzcuMjg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDMzLjU3OSAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMy41NzkgLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMy41NzkgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTM1MyBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0zNzIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi1bMSAwIDAgMSA0OTMuNzgyIDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjc4MiAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkzLjc4MiAzNzcuMjg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNTI5LjY0OCAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyOS42NDggLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMy4zNTUgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotNzIgMzY1LjMzIFRkCi0ocGFzc2VkKSAyNi41NjAzIFRqCi0tMzA2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDYgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA2IFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0zMDYgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudCkgMjkuODg3OCBUagotLTMwNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA2IFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMzA2IFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMzA1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDI1My45NDEgMzY1LjMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My45NDEgLTM2NS4zM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjk0MSAzNjUuMzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMjk1Ljc4NCAzNjUuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk1Ljc4NCAtMzY1LjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTguODMyIDM2NS4zMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzE2LjI2NiAzNjUuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE2LjI2NiAtMzY1LjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTYuMjY2IDM2NS4zMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemZyZWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM1Mi4xMzIgMzY1LjMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Mi4xMzIgLTM2NS4zM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUyLjEzMiAzNjUuMzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTMyMCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0zMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0ob3RoZXJ3aXNlKSAzOC43MzQ2IFRqCi0tMzA2IFRKbQotKGlnbm9yZWQpIDMwLjQzNTcgVGoKLS0zMDYgVEptCi0oYnkpIDkuOTYyNiBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTk1NSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLTcyIDM1My4zNzUgVGQKLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDg5LjQzMDkgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04OS40MzA5IC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04OS40MzA5IDM1My4zNzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotLTYwMCBUSm0KLShcKCkgNS45Nzc1NiBUagotLTYwMCBUSm0KLShvcGFxdWUsKSA0MS44NDI5IFRqCi0tNjAwIFRKbQotKG4sKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKG0pIDUuOTc3NTYgVGoKLS02MDAgVEptCi0oXCkpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDIzMi44OTMgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuODkzIC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzUuOTM4IDM1My4zNzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBlY3RlZCkgMzAuOTgzNyBUagotLTMwNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA2IFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTMwNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA1IFRKbQotKHBvaW50ZXIpIDI4LjIyNCBUagotWzEgMCAwIDEgMzYwLjMgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuMyAtMzUzLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjMgMzUzLjM3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzNjYuMjc3IDM1My4zNzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY2LjI3NyAtMzUzLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY5LjMyMiAzNTMuMzc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDM4MC4xMTggMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODAuMTE4IC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODAuMTE4IDM1My4zNzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obikgNS45Nzc1NiBUagotMzkyLjA3MyAzNTEuNjMxIFRkCi0oKikgNS45Nzc1NiBUagotNDA0LjAyOSAzNTMuMzc1IFRkCi0obSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNDEwLjAwNiAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC4wMDYgLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMy4wNTEgMzUzLjM3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tMzA2IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTMyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNTA0LjEzNSAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNC4xMzUgLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNC4xMzUgMzUzLjM3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemZyZWUpIDM1Ljg2NTQgVGoKLTcyIDM0MS40MiBUZAotKFwoKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKG9wYXF1ZSwpIDQxLjg0MjkgVGoKLS02MDAgVEptCi0ocCkgNS45Nzc1NiBUagotLTYwMCBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgMTQ5LjcwOSAzNDEuNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMzQxLjQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTIuMTk5IDM0MS40MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oZnJlZSkgMTUuNDgxOSBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzM5LjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI5LjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxOS41MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yODAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjgwIFRKbQotKGRvbicpIDE4LjI2MTQgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI4MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjgwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yODAgVEptCi0oY3VzdG9tKSAyOC43ODIgVGoKLS0yODAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjc5IFRKbQotKGFsbG9jYXRvcikgMzQuODU5MSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTI4OCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLVsxIDAgMCAxIDI5OS45IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk5LjkgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS45IDMxOS41MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMzQxLjc0MyAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0MS43NDMgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS43NDMgMzE5LjUwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzNDcuMDk2IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ3LjA5NiAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ3LjA5NiAzMTkuNTAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzgyLjk2MSAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4Mi45NjEgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4NS43NDkgMzE5LjUwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDAyLjkyMyAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMi45MjMgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwMi45MjMgMzE5LjUwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShvcGFxdWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQzOC43ODggMzE5LjUwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguNzg4IC0zMTkuNTAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuNTc2IDMxOS41MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNDUyLjExNSAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Mi4xMTUgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1Mi4xMTUgMzE5LjUwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOVUxMKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0NzYuMDI1IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc2LjAyNSAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc2LjAyNSAzMTkuNTAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yODAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTcyIDMwNy41NDcgVGQKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotWzEgMCAwIDEgMTc2LjMxOCAzMDcuNTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni4zMTggLTMwNy41NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni4zMTggMzA3LjU0NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShtYWxsb2MpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDIxMi4xODMgMzA3LjU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuMTgzIC0zMDcuNTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNjc0IDMwNy41NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLykgMi43Njk2IFRqCi1bMSAwIDAgMSAyMTkuOTM0IDMwNy41NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE5LjkzNCAtMzA3LjU0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE5LjkzNCAzMDcuNTQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZyZWUpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDI0My44NDQgMzA3LjU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDMuODQ0IC0zMDcuNTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDYuMzM1IDMwNy41NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocm91dGluZXMuKSAzNC41OTAxIFRqCi1bMSAwIDAgMSA3MiAzMDcuMzkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTcuNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI4NS42MjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmVmb3JlKSAyNy4xMDgyIFRqCi0tMzYyIFRKbQotKGNhbGxpbmcpIDI3LjExODIgVGoKLVsxIDAgMCAxIDEzMy40MzggMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzMuNDM4IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzMuNDM4IDI4NS42MjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyNDEuMDM1IDI4NS42MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQxLjAzNSAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQxLjAzNSAyODUuNjI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zOTAgVEptCi0oXDAwMmVsZHMpIDIxLjU4OSBUagotWzEgMCAwIDEgMjcyLjYwNiAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi42MDYgLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Mi42MDYgMjg1LjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzMTQuNDQ5IDI4NS42MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE0LjQ0OSAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE0LjQ0OSAyODUuNjI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMyMC44MjUgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjAuODI1IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjAuODI1IDI4NS42MjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpmcmVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzNTYuNjkgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTYuNjkgLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2MC4yOTYgMjg1LjYyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzc4LjI4OCAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3OC4yODggLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3OC4yODggMjg1LjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShvcGFxdWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQxNC4xNTQgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTQuMTU0IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTcuNzYgMjg1LjYyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zNjIgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNjIgVEptCi0oXDAwMmxsZWQpIDIwLjQ4MzEgVGoKLS0zNjIgVEptCi0oYXBwcm9wcmlhdGVseSkgNTMuMTIwNiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotNzIgMjczLjY3NCBUZAotKGFzKSA4LjI5ODg1IFRqCi0tMzIyIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTMyMyBUSm0KLShkZXNjcmliZWQuKSA0MC42NjczIFRqCi0tMTA1NSBUSm0KLShVcG9uKSAyMi4xMzY5IFRqCi0tMzIyIFRKbQotKHJldHVybiwpIDI2LjI4MTMgVGoKLS0zNDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzIyIFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tMzIzIFRKbQotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMzIyIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0zMjMgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzIzIFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMzIyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzIzIFRKbQotKGluaXRpYWxpc2VkLCkgNDEuNzkzMSBUagotLTM0MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDU5LjgwMSAyNzMuNjc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1OS44MDEgLTI3My42NzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OS44MDEgMjczLjY3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9pbl9sbzMyKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDI3My42NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtMjczLjY3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSAyNzMuNjc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI2MS43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI2MS43MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW5faGkzMikgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSAyNjEuNzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0OS43MDkgLTI2MS43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0OS43MDkgMjYxLjcxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNTUuMDA2IDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjAwNiAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjAwNiAyNjEuNzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX291dF9sbzMyKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyMzguNjkyIDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM4LjY5MiAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQxLjQzNSAyNjEuNzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNTguNTY0IDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU4LjU2NCAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU4LjU2NCAyNjEuNzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX291dF9oaTMyKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNDIuMjUgMjYxLjcxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuMjUgLTI2MS43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0NC45OTQgMjYxLjcxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjc1IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzYgVEptCi0oYmVlbikgMTguODA5NCBUagotLTI3NSBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yNzUgVEptCi0odG8pIDcuNzUwOSBUagotLTI3NiBUSm0KLSh6ZXJvLikgMTkuNjM2MyBUagotLTc3MiBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTI3NSBUSm0KLShmb3VyKSAxNi41OTc3IFRqCi0tMjc2IFRKbQotKFwwMDJlbGRzKSAyMS41ODkgVGoKLS0yNzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi03MiAyNDkuNzYzIFRkCi0odXNlZCkgMTguMjYxNCBUagotLTM0MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMzM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzM5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDAgVEptCi0oaW5mb3JtKSAyNy4xMTgyIFRqCi0tMzM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MCBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0zMzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM5IFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMzQwIFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTMzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM0MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzQwIFRKbQotKHBhc3NlZCkgMjYuNTYwMyBUagotLTMzOSBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMzQwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzM5IFRKbQotKG91dCkgMTIuNzMyMiBUagotLTM0MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTM2MiBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLTcyIDIzNy44MDggVGQKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0zNzYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzc3IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTM3NiBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0zNzYgVEptCi0odG8pIDcuNzUwOSBUagotLTM3NyBUSm0KLShjaGFuZ2UpIDI4LjIxNDEgVGoKLS0zNzYgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLS0xMzc4IFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tMzc3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzc2IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMzc3IFRKbQotKDEuMCwpIDE0Ljk0MzkgVGoKLS00MDggVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMzc2IFRKbQotKGNvdW50cykgMjYuMDEyMyBUagotLTM3NiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zNzcgVEptCi0obWFpbnRhaW5lZCwpIDQ2Ljc2NDQgVGoKLS00MDggVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTM3NiBUSm0KLShvbikgOS45NjI2IFRqCi0tMzc2IFRKbQotKDMyLWJpdCkgMjMuODAwNyBUagotLTM3NyBUSm0KLShwbGF0Zm9ybXMsKSA0MC42NzczIFRqCi03MiAyMjUuODUzIFRkCi0odXNpbmcpIDIxLjU4OSBUagotLTM3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDExMy4xNDggMjI1Ljg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuMTQ4IC0yMjUuODUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTMuMTQ4IDIyNS44NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX2hpMzIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE0My4wMzYgMjI1Ljg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuMDM2IC0yMjUuODUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuNzI5IDIyNS44NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmVsZHMpIDIxLjU4OSBUagotLTM3MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzcwIFRKbQotKHN0b3JlKSAxOS4zNjczIFRqCi0tMzcxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3MSBUSm0KLSh1cHBlcikgMjIuNjg0OCBUagotLTM3MCBUSm0KLSgzMikgOS45NjI2IFRqCi0tMzcxIFRKbQotKGJpdHMpIDE0LjM5NiBUagotLTM3MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTM3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzEgVEptCi0oY291bnQuKSAyNC42Mjc1IFRqCi0tMTM0NCBUSm0KLShTbywpIDEzLjAxMTIgVGoKLS00MDAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzcxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZSwpIDMxLjgyMDUgVGoKLS00MDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzcxIFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMzcwIFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTM3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM3MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzcxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNzEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLVsxIDAgMCAxIDcyIDIxMy44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMy44OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMy44OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oXCh0b3RhbF9pbl9oaTMyKSA4My42ODU4IFRqCi0tNjAwIFRKbQotKDw8KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKDMyXCkpIDE3LjkzMjcgVGoKLS02MDAgVEptCi0oKykgNS45Nzc1NiBUagotLTYwMCBUSm0KLSh0b3RhbF9pbl9sbzMyKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyOTMuMTcxIDIxMy44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkzLjE3MSAtMjEzLjg5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkzLjE3MSAyMTMuODk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIxMi41ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwMi42MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5MS45OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShhcmFtZXRlcikgMzQuODQ5MiBUagotWzEgMCAwIDEgMTE1LjM2NyAxOTEuOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE1LjM2NyAtMTkxLjk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTUuMzY3IDE5MS45OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxOTMuMDc2IDE5MS45OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuMDc2IC0xOTEuOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Ni4yMDQgMTkxLjk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNwZWNpXDAwMmVzKSAzNC4zMTEyIFRqCi0tMzE0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxNCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTMxNCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMzE0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMTQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTQgVEptCi0odXNlZCkgMTguMjYxNCBUagotLTMxNCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMTQgVEptCi0oY29tcHJlc3Npb24uKSA1Mi44NTE2IFRqCi0tMTAwNCBUSm0KLShJdCkgNi4wODcxNSBUagotLTMxNCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMTQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oYSkgNC40MjMzOSBUagotLTMxNCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0zMTQgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTMxNCBUSm0KLSgxKSA0Ljk4MTMgVGoKLTcyIDE4MC4wMjUgVGQKLShhbmQpIDE0LjM4NiBUagotLTI4OSBUSm0KLSg5KSA0Ljk4MTMgVGoKLS0yODkgVEptCi0oaW5jbHVzaSkgMjYuNTcwMyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLCkgNi45MTQwNCBUagotLTI5OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYWN0dWFsKSAyMy43OTA3IFRqCi0tMjg5IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg5IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yODkgVEptCi0odXNlZCkgMTguMjYxNCBUagotLTI4OSBUSm0KLShpcykgNi42NDUwNSBUagotLTI4OSBUSm0KLSgxMDAwMDApIDI5Ljg4NzggVGoKLS0yODkgVEptCi0oeCkgNC45ODEzIFRqCi0tMjg5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4OSBUSm0KLShcMDAyZ3VyZS4pIDI1LjczMzQgVGoKLS04NTQgVEptCi0oOSkgNC45ODEzIFRqCi0tMjkwIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKGJlc3QpIDE2LjA0OTcgVGoKLS0yODkgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yODkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjg5IFRKbQotKHRhaykgMTIuMTc0MyBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yODkgVEptCi0obW9zdCkgMTkuMzc3MyBUagotNzIgMTY4LjA3IFRkCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxNjUuOTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNTUuOTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE0Ni4xNTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUCkgNS41MzkyMSBUagotMTUgVEptCi0oYXJhbWV0ZXIpIDM0Ljg0OTIgVGoKLVsxIDAgMCAxIDExNS4wOTUgMTQ2LjE1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTUuMDk1IC0xNDYuMTUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTUuMDk1IDE0Ni4xNTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odmVyYm9zaXR5KSA1My43OTggVGoKLVsxIDAgMCAxIDE2OC44OTMgMTQ2LjE1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjguODkzIC0xNDYuMTUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzEuNzUgMTQ2LjE1MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yODcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODYgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjg3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODcgVEptCi0oYSkgNC40MjMzOSBUagotLTI4NyBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yODYgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTI4NyBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yODcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODcgVEptCi0oNCkgNC45ODEzIFRqCi0tMjg2IFRKbQotKGluY2x1c2kpIDI2LjU3MDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLS04NDEgVEptCi0oMCkgNC45ODEzIFRqCi0tMjg2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjg3IFRKbQotKHNpbGVudCwpIDI0LjA3OTYgVGoKLS0yOTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODcgVEptCi0oZ3JlYXRlcikgMjcuNjU2MiBUagotLTI4NyBUSm0KLShudW1iZXJzKSAzNC4zMTEyIFRqCi0tMjg2IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotNzIgMTM0LjE5NyBUZAotKGluY3JlYXNpbmdseSkgNDguNjk3MiBUagotLTM0MiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYm9zZSkgMjYuMDAyNCBUagotLTM0MiBUSm0KLShtb25pdG9yaW5nL2RlYikgNjEuNDM5NCBUagotMjAgVEptCi0odWdnaW5nKSAyNy42NzYxIFRqCi0tMzQyIFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLS0xMTczIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzQzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzQyIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTM0MiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzQyIFRKbQotKGNvbXBpbGVkKSAzNy4wODA4IFRqCi0tMzQyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ0Ni40MjkgMTM0LjE5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDYuNDI5IC0xMzQuMTk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuNDI5IDEzNC4xOTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLURCWl9OT19TVERJTykgNzcuNzA4MyBUagotWzEgMCAwIDEgNTI0LjEzOCAxMzQuMTk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyNC4xMzggLTEzNC4xOTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNC4xMzggMTM0LjE5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzQyIFRKbQotKG5vKSA5Ljk2MjYgVGoKLTcyIDEyMi4yNDIgVGQKLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKGFwcGVhcikgMjYuNTUwMyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYm9zaXR5KSAzMi4wOTk1IFRqCi0tMjUwIFRKbQotKHNldHRpbmcuKSAyOS4wNjA5IFRqCi1bMSAwIDAgMSA3MiAxMjAuMDg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTAuMTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDAuMzI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFApIDUuNTM5MjEgVGoKLTE1IFRKbQotKGFyYW1ldGVyKSAzNC44NDkyIFRqCi1bMSAwIDAgMSAxMTYuNjE5IDEwMC4zMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE2LjYxOSAtMTAwLjMyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2LjYxOSAxMDAuMzI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE3Ni4zOTQgMTAwLjMyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuMzk0IC0xMDAuMzI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODAuNzc1IDEwMC4zMjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29udHJvbHMpIDMyLjA5OTUgVGoKLS00NDAgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS00MzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tNDQwIFRKbQotKHBoYXNlKSAyMi42ODQ4IFRqCi0tNDM5IFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS00NDAgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tNDM5IFRKbQotKHByZXNlbnRlZCkgMzguMTc2NyBUagotLTQ0MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDQwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tNDM5IFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tNDg3IFRKbQotKGhpZ2hseSkgMjUuNDY0NCBUagotNzIgODguMzY4NiBUZAotKHJlcGV0aXRpKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSwpIDYuOTE0MDQgVGoKLS00MzMgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0zOTYgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLS0xNDk2IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzk2IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMzk2IFRKbQotKHJ1bnMpIDE3LjE1NTYgVGoKLS0zOTcgVEptCi0oaSkgMi43Njk2IFRqCi0xIFRKbQotKG50bykgMTIuNzMyMiBUagotLTM5NyBUSm0KLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0aWVzKSAzMS41NTE2IFRqCi0tMzk2IFRKbQotKGNhdXNlZCkgMjcuMTA4MiBUagotLTM5NiBUSm0KLShieSkgOS45NjI2IFRqCi0tMzk2IFRKbQotKHJlcGV0aXRpKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM5NiBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTQzMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM5NiBUSm0KLShzd2l0Y2hlcykgMzQuMzExMiBUagotLTM5NiBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi1bMSAwIDAgMSA3MiA1MC44NTE4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE2IDE2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTUgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTQgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTI1NSBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTQgVEptCi0odG8pIDcuNzUwOSBUagotLTI1NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU1IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2spIDI4Ljc3MiBUagotLTI1NCBUSm0KLShhbGdvcml0aG0uKSA0MS4yMzUyIFRqCi0tNjQ4IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1NSBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGxiYWNrKSAyOC43NzIgVGoKLS0yNTQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTUgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3ZXIpIDE0LjkzMzkgVGoKLS0yNTUgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTI1NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTUgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTQgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjU1IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTUgVEptCi0ocGVyaGFwcykgMzAuOTgzNyBUagotNzIgNjk4LjA4MiBUZAotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0b3IpIDE5LjkxNTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhyZWUsKSAyMi40MDU5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhbCkgNy4xOTMgVGoKLTEwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShyZWFzb25hYmx5KSA0My4xNTggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0obm8pIDkuOTYyNiBUagotLTI1MCBUSm0KLShtYXR0ZXIpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0oYmFkKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGlucHV0LikgMjIuOTczOCBUagotWzEgMCAwIDEgNzIgNjk1LjkyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjg1Ljk2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc2LjE2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShMbykgMTEuMDY4NCBUagotMjUgVEptCi0od2VyKSAxNC45MzM5IFRqCi0tMjQwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yMzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDEzOC40MjEgNjc2LjE2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzguNDIxIC02NzYuMTY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzguNDIxIDY3Ni4xNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotWzEgMCAwIDEgMTk4LjE5NyA2NzYuMTY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xOTcgLTY3Ni4xNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMC41ODUgNjc2LjE2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWR1Y2UpIDI2LjU1MDMgVGoKLS0yNDAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM5IFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTI0MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0MCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZm9ydCkgMTQuMzg2IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI0MCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yMzkgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI0MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVuZCkgMjQuMzQ4NiBUagotLTI0MCBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNDAgVEptCi0ocmVzb3J0aW5nKSAzNS40MTcgVGoKLS0yMzkgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDY2NC4yMSBUZAotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2suKSAzMS4yNjI2IFRqCi0tNjE4IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI0OCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNDcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjQ4IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI0NyBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS0yNDggVEptCi0oY2FyZWZ1bGx5OykgMzguMTc2NyBUagotLTI0OCBUSm0KLSh0b28pIDEyLjczMjIgVGoKLS0yNDggVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDcgVEptCi0obWFuKSAxNy4xNTU2IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNDggVEptCi0oaW5wdXRzKSAyNC4zNTg2IFRqCi0tMjQ4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNDcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNDggVEptCi0oaGFuZGxlZCkgMzEuNTQxNiBUagotLTI0NyBUSm0KLShieSkgOS45NjI2IFRqCi0tMjQ4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NyBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGxiYWNrKSAyOC43NzIgVGoKLS0yNDggVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi03MiA2NTIuMjU1IFRkCi0oYW5kKSAxNC4zODYgVGoKLS0zMDggVEptCi0oc28pIDguODU2NzUgVGoKLS0zMDggVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS0zMDggVEptCi0ocmF0aGVyKSAyMy4yMzI4IFRqCi0tMzA5IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0od2x5KSAxNC45NDM5IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzIyIFRKbQotKHRvbykgMTIuNzMyMiBUagotLTMwOSBUSm0KLShoaWdoLCkgMjAuMjA0MiBUagotLTMyMiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMwOCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMzA5IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhZ2UtdG8tdykgNDMuMTQ4IFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tMzA4IFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0zMDggVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zMDggVEptCi0odGltZXMpIDIxLjU4OSBUagotLTMwOCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0zMDggVEptCi0oYmVjb21lKSAzMC45ODM3IFRqCi0tMzA5IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMzA4IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UuKSAxMS44OTUzIFRqCi03MiA2NDAuMyBUZAotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKDMwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShyZWFzb25hYmxlKSA0Mi42MDAxIFRqCi0tMjUwIFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0od2lkZSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShyYW5nZSkgMjIuMTI2OSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjaXJjdW1zdGFuY2VzLikgNTguOTI4OCBUagotWzEgMCAwIDEgNzIgNjM4LjE0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjI4LjE4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjE4LjM4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHJhbmdlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oMCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oMjUwKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGluY2x1c2kpIDI2LjU3MDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLS02MjAgVEptCi0oMCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc3BlY2lhbCkgMjcuNjY2MSBUagotLTI1MCBUSm0KLShjYXNlLCkgMTkuNjM2MyBUagotLTI1MCBUSm0KLShlcXVpKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsZW50KSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZGVmKSAxMi43MjIyIFRqCi0xMCBUSm0KLShhdWx0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSgzMC4pIDEyLjQ1MzMgVGoKLVsxIDAgMCAxIDcyIDYxNi4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNi4yNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5Ni40NjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTm90ZSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShnZW5lcmF0ZWQpIDM4LjcyNDYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhcmRsZXNzKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHdoZXRoZXIpIDMyLjA4OTUgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGxiYWNrKSAyOC43NzIgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHVzZWQuKSAyMC43NTIxIFRqCi1bMSAwIDAgMSA3MiA1OTQuMzA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01ODQuMzQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzQuNTQ5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlKSAxMS4wNjg0IFRqCi0tMzAzIFRKbQotKGEpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zMDMgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTMwMyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzAzIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTMwNCBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS0zMDMgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMzAzIFRKbQotKGRpc2FwcGVhcikgMzguMTc2NyBUagotLTMwMyBUSm0KLShlbnRpcmVseSkgMzAuNDM1NyBUagotLTMwMyBUSm0KLShpbikgNy43NTA5IFRqCi0tMzAzIFRKbQotKGZ1dHVyZSkgMjMuNzkwNyBUagotLTMwMyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTMwMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTkzOCBUSm0KLShJbikgOC4yOTg4NSBUagotLTMwMyBUSm0KLShwcmluY2lwbGUpIDM1LjQxNyBUagotLTMwMyBUSm0KLShpdCkgNS41MzkyMSBUagotLTMwNCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMDMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTcyIDU2Mi41OTQgVGQKLShwb3NzaWJsZSkgMzIuNjU3NCBUagotLTI3MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcwIFRKbQotKGRlKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2aXNlKSAxNi4wNDk3IFRqCi0tMjcwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzAgVEptCi0oZ29vZCkgMTkuOTI1MiBUagotLTI3MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXkpIDkuNDA0NjkgVGoKLS0yNzAgVEptCi0odG8pIDcuNzUwOSBUagotLTI3MSBUSm0KLShhdXRvbWF0KSAzMi4wOTk1IFRqCi0xIFRKbQotKGljYWxseSkgMjIuMTM2OSBUagotLTI3MSBUSm0KLShjaG9vc2UpIDI3LjY2NjEgVGoKLS0yNzAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNzAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjcwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzAgVEptCi0odXNlLikgMTUuNzcwOCBUagotLTc0MCBUSm0KLShTdWNoKSAxOS45MjUyIFRqCi0tMjcwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzEgVEptCi0obSkgNy43NTA5IFRqCi0xIFRKbQotKGVjaGFuaXNtKSAzNy42Mjg3IFRqCi0tMjcxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMjcwIFRKbQotKHJlbmRlcikgMjUuNDQ0NSBUagotLTI3MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDU1MC42MzkgVGQKLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS0yNTAgVEptCi0ob2Jzb2xldGUuKSAzNS42OTYgVGoKLVsxIDAgMCAxIDcyIDU0OC40ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzOC41MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyOC43MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiA1MjguNjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQ0LjQ1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxNDMuNDYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTM5Ljg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUxOS4yNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUxOS4yNTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi05OC40ODc5IDUwNy4zMDMgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGlicmFyeSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShtaXMtY29tcGlsZWQpIDcxLjczMDcgVGoKLTkwIDQ5NS4zNDggVGQKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA0ODMuMzkyIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDQ3MS40MzcgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2tTaXplKSA1My43OTggVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg5KSA1Ljk3NzU2IFRqCi05OC40ODc5IDQ1OS40ODIgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg0KSA1Ljk3NzU2IFRqCi05OC40ODc5IDQ0Ny41MjcgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMjUwKSAxNy45MzI3IFRqCi05MCA0MzUuNTcyIFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDQyMy42MTcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZW5vdWdoKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNDExLjY2MSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDM5OS43MDYgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzg0LjE2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzQuMjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjIuMjQ4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiAzNjIuMTQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM1Mi43ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM1Mi43ODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLTk4LjQ4NzkgMzQwLjgyOCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHJldHVybmVkKSA0Ny44MjA1IFRqCi05OC40ODc5IDMyOC44NzMgVGQKLShubykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzcGVjaWZpYykgNDcuODIwNSBUagotLTQyNiBUSm0KLShhY3Rpb24pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0obmVlZGVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGNhc2UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDcyIDMxMy4zMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMDMuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI4Mi43MTEgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy4yLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAyODIuNzExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTI4Mi43MTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMjgyLjcxMSBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6Q29tcHJlc3MpIDE0NC42MDkgVGoKLVsxIDAgMCAxIDI2NC40NjggMjgyLjcxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuNDY4IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjcxLjAxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjcxLjAxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTI2OC4zNzEgMjY5LjI3IFRkCi0oKikgNS45Nzc1NiBUagotMjc0LjM0OCAyNzEuMDE0IFRkCi0oc3RybSwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjdGlvbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDI1NS40NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjQ1LjUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzMuNTU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBybykgMTMuODM4MSBUagotMTUgVEptCi0odmlkZXMpIDIxLjAzMSBUagotLTIyMiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjIxIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjIyIFRKbQotKGFuZC9vcikgMjUuNDU0NCBUagotLTIyMiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yMjIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjIxIFRKbQotKHNwYWNlKSAyMi4xMjY5IFRqCi0tMjIyIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTIyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjEgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTYwMSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yMjIgVEptCi0oY2FsbGVyKSAyMi4xMjY5IFRqCi0tMjIyIFRKbQotKG1haW50YWlucykgMzguNzQ0NiBUagotLTIyMiBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTIyMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yMjIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVycywpIDE3LjQyNDYgVGoKLS0yMjcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLVsxIDAgMCAxIDcyIDIyMS42XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMjEuNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIxLjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE1NS42ODYgMjIxLjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjY4NiAtMjIxLjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OC4xNzcgMjIxLjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0cmFuc2ZlcikgMzAuNDI1OCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGJldHdlZW4pIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDcyIDIyMC4wNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMC4xMDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5OS42ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmVmb3JlKSAyNy4xMDgyIFRqCi0tMjEyIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yMTMgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjEyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE0Ny45NjEgMTk5LjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDcuOTYxIC0xOTkuNjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDcuOTYxIDE5OS42ODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDIzMS42NDcgMTk5LjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzEuNjQ3IC0xOTkuNjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzEuNjQ3IDE5OS42ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjM2LjMyOSAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNi4zMjkgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNi4zMjkgMTk5LjY4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNzguMTcyIDE5OS42ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjE3MiAtMTk5LjY4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjgwLjI4OCAxOTkuNjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTIxMiBUSm0KLShwb2ludCkgMjAuNDgzMSBUagotLTIxMyBUSm0KLShhdCkgNy4xOTMgVGoKLS0yMTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjEzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMTIgVEptCi0odG8pIDcuNzUwOSBUagotLTIxMiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIxMyBUSm0KLShjb21wcmVzc2VkLCkgNDkuNTI0MSBUagotLTIyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDYzLjQ5MyAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2My40OTMgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2My40OTMgMTk5LjY4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNTExLjMxNCAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4zMTQgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMy40MyAxOTkuNjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotNzIgMTg3LjcyOCBUZAotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjQ2IFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjQ3IFRKbQotKG0pIDcuNzUwOSBUagotMSBUSm0KLShhbikgOS40MDQ2OSBUagotMTQgVEptCi0oeSkgNC45ODEzIFRqCi0tMjQ2IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ2IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNDcgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjQ2IFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi1bMSAwIDAgMSAyNTkuMjQyIDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU5LjI0MiAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU5LjI0MiAxODcuNzI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNDIuOTI5IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjkyOSAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ1LjM4MiAxODcuNzI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVwZGF0ZXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDM3OC4yNzEgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzguMjcxIC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzguMjcxIDE4Ny43MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9pbikgNDEuODQyOSBUagotWzEgMCAwIDEgNDIwLjExNCAxODcuNzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMC4xMTQgLTE4Ny43MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMC4xMTQgMTg3LjcyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MjUuMDY2IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI1LjA2NiAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI1LjA2NiAxODcuNzI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF2YWlsX2luKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NzIuODg2IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjg4NiAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc1LjM0IDE4Ny43MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ5Mi4xNzkgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTIuMTc5IC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTIuMTc5IDE4Ny43MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0MCAxODcuNzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTc1Ljc3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlXDAwM2VjdCkgMjQuODk2NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi1bMSAwIDAgMSA3MiAxNzMuNjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjMuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNTMuODU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNpbWlsYXJseSkgMzcuMDkwOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTEzLjYxMSAxNTMuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy42MTEgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMy42MTEgMTUzLjg1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X291dCkgNDcuODIwNSBUagotWzEgMCAwIDEgMTYxLjQzMiAxNTMuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS40MzIgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NC4wNzIgMTUzLjg1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjUgVEptCi0ocG9pbnQpIDIwLjQ4MzEgVGoKLS0yNjUgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTI2NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjY1IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjY1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI2NSBUSm0KLShwbGFjZWQsKSAyOC40OTMgVGoKLS0yNjkgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDY0Ljc0MiAxNTMuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NC43NDIgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2NC43NDIgMTUzLjg1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgNTE4LjU0IDE1My44NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE4LjU0IC0xNTMuODU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjEuMTgxIDE1My44NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW5kaS0pIDE4LjgxOTQgVGoKLTcyIDE0MS45MDEgVGQKLShjYXRpbmcpIDI0LjM0ODYgVGoKLS0yMDkgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMDkgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTIwOSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yMDkgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS0yMDkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMjQzLjA4NyAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My4wODcgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My4wODcgMTQxLjkwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzI2Ljc3MyAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNi43NzMgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyOC44NTYgMTQxLjkwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1cGRhdGVzKSAzMC40MzU3IFRqCi1bMSAwIDAgMSAzNjEuMzc1IDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjM3NSAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYxLjM3NSAxNDEuOTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0MDkuMTk2IDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjE5NiAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA5LjE5NiAxNDEuOTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQxMy44NTEgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTMuODUxIC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTMuODUxIDE0MS45MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDQ2Ny42NDkgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjcuNjQ5IC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjkuNzMyIDE0MS45MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ4Ni4yMDIgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODYuMjAyIC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODYuMjAyIDE0MS45MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDU0MCAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTI5Ljk0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlXDAwM2VjdCkgMjQuODk2NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotWzEgMCAwIDEgNzIgMTI3Ljc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTE3LjgyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTA4LjAyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNzIgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjcyIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTI3MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MiBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzIgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0obGl0dGxlKSAxOC4yNzE0IFRqCi0tMjcyIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0yNzEgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI3MiBUSm0KLShhcykgOC4yOTg4NSBUagotLTI3MiBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzIgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjcyIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNzIgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTI3MiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yNzIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDM5OS4xMjMgMTA4LjAyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTkuMTIzIC0xMDguMDI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTkuMTIzIDEwOC4wMjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDQ4Mi44MDkgMTA4LjAyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODIuODA5IC0xMDguMDI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODIuODA5IDEwOC4wMjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTc1MiBUSm0KLShJbikgOC4yOTg4NSBUagotLTI3MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzIgVEptCi0obGltaXQsKSAyMS4zMiBUagotNzIgOTYuMDczNiBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjY2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjY1IFRKbQotKGFjY2VwdGFibGUpIDQyLjA0MjIgVGoKLS0yNjYgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NiBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yNjYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjUgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjY2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjYgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNjUgVEptCi0oYnl0ZSkgMTcuMTU1NiBUagotLTI2NiBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNjYgVEptCi0oYSkgNC40MjMzOSBUagotLTI2NiBUSm0KLSh0aW1lLCkgMjAuMjA0MiBUagotLTI2OSBUSm0KLShhbHRob3VnaCkgMzQuODY5MSBUagotLTI2NiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjYgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNjUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNjYgVEptCi0odGVycmlibHkpIDI5LjMyOTkgVGoKLS0yNjYgVEptCi0oaW5lZikgMTUuNDkxOCBUagotMjUgVEptCi0oXDAwMmNpZW50LikgMjcuMzk3MiBUagotLTcxNCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNjYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi03MiA4NC4xMTg0IFRkCi0oYWwpIDcuMTkzIFRqCi0xMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXlzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGVuc3VyZSkgMjYuMDAyNCBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShsZWFzdCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI1MCBUSm0KLShieXRlKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oY2FsbC4pIDE2Ljg3NjYgVGoKLVsxIDAgMCAxIDcyIDgxLjk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE3IDE3Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBKSA3LjE5MyBUagotLTI1MCBUSm0KLShzZWNvbmQpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0ocHVycG9zZSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTU2LjY2MiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ni42NjIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ni42NjIgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjQwLjM0OCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC4zNDggLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Mi44MzkgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlcXVlc3QpIDI4Ljc3MiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGNoYW5nZSkgMjguMjE0MSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShtb2RlKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDcwNy44OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjk3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjg4LjEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbmNlcHR1YWxseSkgNTMuMTMwNSBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTIxNyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjEwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yMDkgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjA5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIwOSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIxMCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjA5IFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjA5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjA5IFRKbQotKGZvdXIpIDE2LjU5NzcgVGoKLS0yMTAgVEptCi0oc3RhdGVzOikgMjQuOTA2NSBUagotLTI4OSBUSm0KLShJRExFLCkgMjUuMTc1NSBUagotLTIwOSBUSm0KLShSKSA2LjY0NTA1IFRqCi00MCBUSm0KLShVTk5JTkcsKSA0MS43NzMyIFRqCi0tMjEwIFRKbQotKEZMVVNISU5HKSA0OS4yNTUxIFRqCi0tMjA5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjA5IFRKbQotKEZJTklTSElORy4pIDUyLjI5MzcgVGoKLS00MTkgVEptCi0oQmUtKSAxNC4zODYgVGoKLTcyIDY3Ni4xNjQgVGQKLShmb3JlKSAxNi4wMzk4IFRqCi0tMjY0IFRKbQotKGluaXRpYWxpc2F0aW9uKSA0OS44MjMgVGoKLS0yNjMgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDE0Ni40MzQgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDYuNDM0IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuNDM0IDY3Ni4xNjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyNTQuMDMxIDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0LjAzMSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU0LjAzMSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjY0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYzIFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjY0IFRKbQotKHRlcm1pbmF0aW9uKSA0NS45Mzc1IFRqCi0tMjY0IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAzNDkuNzUgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDkuNzUgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0OS43NSA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSA0NTEuMzY5IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDUxLjM2OSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDUxLjM2OSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLCkgNS44MDgyIFRqCi0tMjY3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjQgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjY0IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjYzIFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYXJkZWQpIDIyLjEyNjkgVGoKLTcyIDY2NC4yMDkgVGQKLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShJRExFLikgMjUuMTc1NSBUagotWzEgMCAwIDEgNzIgNjY0LjExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NTQuMTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NDIuMjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFVwb24pIDIyLjEzNjkgVGoKLS0zODkgVEptCi0oaW5pdGlhbGlzYXRpb24pIDQ5LjgyMyBUagotLTM5MCBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTU1LjAzNiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS4wMzYgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS4wMzYgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDI2Mi42MzIgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjIuNjMyIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjIuNjMyIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCksKSA1LjgwODIgVGoKLS00MjQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzkwIFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTM4OSBUSm0KLShpcykgNi42NDUwNSBUagotLTM4OSBUSm0KLShwbGFjZWQpIDI2LjAwMjQgVGoKLS0zOTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTM4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTAgVEptCi0oUikgNi42NDUwNSBUagotNDAgVEptCi0oVU5OSU5HKSAzOS4yODI1IFRqCi0tMzg5IFRKbQotKHN0YXRlLikgMjAuNzUyMSBUagotLTE0NTcgVEptCi0oU3Vic2VxdWVudCkgNDUuOTM3NSBUagotLTM4OSBUSm0KLShjYWxscykgMTguMjYxNCBUagotNzIgNjMwLjMzNiBUZAotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDgzLjgxOCA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjgxOCAtNjMwLjMzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODMuODE4IDYzMC4zMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE2Ny41MDQgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNTA0IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzEuNTcxIDYzMC4zMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tNDA4IFRKbQotKHBhc3MpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDIyMy40MzEgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjMuNDMxIC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjMuNDMxIDYzMC4zMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUlVOKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyNTkuMjk3IDYzMC4zMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU5LjI5NyAtNjMwLjMzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjM2MyA2MzAuMzM2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFzKSA4LjI5ODg1IFRqCi0tNDA4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwOCBUSm0KLShyZXF1ZXN0ZWQpIDM4LjE3NjcgVGoKLS00MDkgVEptCi0oYWN0aW9uOykgMjcuMTE4MiBUagotLTQ4NyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTQwOCBUSm0KLShhY3Rpb25zKSAyOC4yMjQgVGoKLS00MDggVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tNDA5IFRKbQotKGlsbGUpIDEyLjczMjIgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhbCkgNy4xOTMgVGoKLS00MDggVEptCi0oYW5kKSAxNC4zODYgVGoKLS00MDggVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTQwOCBUSm0KLShyZXN1bHQpIDIyLjEzNjkgVGoKLS00MDkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgNzIgNjE4LjM4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjE4LjM4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgMTczLjYxOSA2MTguMzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTYxOC4zODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3My42MTkgNjE4LjM4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2MTcuMDcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDcuMTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTYuNDYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEF0KSA5Ljk2MjYgVGoKLS0yNzkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjc5IFRKbQotKHBvaW50LCkgMjIuOTczOCBUagotLTI4NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTI3OSBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjc5IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNzkgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI3OCBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE0IFRKbQotKHZpKSA3Ljc1MDkgVGoKLTEgVEptCi0oZGVkKSAxNC4zODYgVGoKLS0yNzkgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjc5IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNzkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudHMpIDE2LjA0OTcgVGoKLS0yNzkgVEptCi0odG8uKSAxMC4yNDE2IFRqCi0tNzkzIFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjc5IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNzkgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI3OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzkgVEptCi0oXDAwMm5pc2gpIDIyLjE0NjkgVGoKLS0yNzkgVEptCi0odXApIDkuOTYyNiBUagotLTI3OSBUSm0KLSgtLSkgNi42MzUwOSBUagotNzIgNTg0LjUwOCBUZAotKGluKSA3Ljc1MDkgVGoKLS0yODcgVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZlY3QsKSAxNy40MjQ2IFRqCi0tMjk3IFRKbQotKGFza2luZykgMjYuMDEyMyBUagotLTI4OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI4NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg4IFRKbQotKHByb2Nlc3MpIDI5Ljg3NzggVGoKLS0yODcgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI4OCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjg3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjg3IFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMjg4IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODcgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyZWQpIDIwLjQ2MzIgVGoKLS0yODggVEptCi0oaW50ZXJuYWxseSkgMzguMTg2NiBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTg0NCBUSm0KLShJbikgOC4yOTg4NSBUagotLTI4OCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODcgVEptCi0oc3RhdGUsKSAyMC43NTIxIFRqCi1bMSAwIDAgMSA0NTYuMzE0IDU4NC41MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU2LjMxNCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU2LjMxNCA1ODQuNTA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA1NDAgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3Mi41NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1OCBUSm0KLShubykgOS45NjI2IFRqCi0tMjU3IFRKbQotKGxvbmdlcikgMjUuNDU0NCBUagotLTI1OCBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi0tMjU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTggVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI1NyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjU4IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLVsxIDAgMCAxIDIzNC4yMDcgNTcyLjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuMjA3IC01NzIuNTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuMjA3IDU3Mi41NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9pbikgNDEuODQyOSBUagotWzEgMCAwIDEgMjc2LjA1MSA1NzIuNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Ni4wNTEgLTU3Mi41NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Ni4wNTEgNTcyLjU1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjYwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1NyBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1OCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjU4IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI1OCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDQwNy4wODIgNTcyLjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDcuMDgyIC01NzIuNTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDcuMDgyIDU3Mi41NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQ1NC45MDIgNTcyLjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTQuOTAyIC01NzIuNTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTQuOTAyIDU3Mi41NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTY2NiBUSm0KLShCZWNhdXNlKSAzMy4xOTU0IFRqCi0tMjU4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1OCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLTcyIDU2MC41OTggVGQKLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yMjggVEptCi0oc3VwcGxpZWQpIDMzLjc2MzMgVGoKLS0yMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjggVEptCi0odXNlcikgMTYuNTk3NyBUagotLTIyOCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yMjggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMjggVEptCi0oYXJiaXRyYXJpbHkpIDM5Ljg0MDQgVGoKLS0yMjkgVEptCi0oc21hKSAxNi4wNDk3IFRqCi0xIFRKbQotKGxsLCkgOC4wMjk4NiBUagotLTIzMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjggVEptCi0oXDAwMm5pc2hpbmctdXApIDQ4LjE1OTIgVGoKLS0yMjggVEptCi0ob3BlcmF0aW9uKSAzNy42Mjg3IFRqCi0tMjI5IFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTIyOCBUSm0KLShuZWNlc3NhcmlseSkgNDQuMjYzOCBUagotLTIyOCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIyOCBUSm0KLShkb25lKSAxOS4zNjczIFRqCi0tMjI4IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yMjkgVEptCi0oYSkgNC40MjMzOSBUagotLTIyOCBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLTcyIDU0OC42NDMgVGQKLShjYWxsKSAxNC4zODYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDk5LjY2NTkgNTQ4LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05OS42NjU5IC01NDguNjQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05OS42NjU5IDU0OC42NDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE4My4zNTIgNTQ4LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuMzUyIC01NDguNjQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuMzUyIDU0OC42NDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTQ3LjEwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTM3LjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI2LjcyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbnN0ZWFkLCkgMzEuMjYyNiBUagotLTM0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjcgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTMyNiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzI3IFRKbQotKHBhc3NlcykgMjUuNDU0NCBUagotWzEgMCAwIDEgMjE4LjIzMSA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOC4yMzEgLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxOC4yMzEgNTI2LjcyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9GSU5JU0gpIDUzLjc5OCBUagotWzEgMCAwIDEgMjcyLjAyOSA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi4wMjkgLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS4yODQgNTI2LjcyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcykgOC4yOTg4NSBUagotLTMyNyBUSm0KLShhbikgOS40MDQ2OSBUagotLTMyNyBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0zMjYgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzM4LjEwOCA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOC4xMDggLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOC4xMDggNTI2LjcyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNDIxLjc5NSA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMS43OTUgLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMS43OTUgNTI2LjcyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTA4MSBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMzI2IFRKbQotKGNoYW5nZXMpIDMyLjA4OTUgVGoKLS0zMjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzI3IFRKbQotKHN0cmVhbScpIDI5Ljg3NzggVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLTcyIDUxNC43NyBUZAotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMjkxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0oRklOSVNISU5HLikgNTIuMjkzNyBUagotLTU4MSBUSm0KLShBbikgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjkxIFRKbQotKHJlbWFpbmluZykgNDAuMzk4MyBUagotLTI5MCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI5MSBUSm0KLShcKGllLCkgMTMuMDAxMiBUagotWzEgMCAwIDEgMjY0LjQ1MiA1MTQuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY0LjQ1MiAtNTE0Ljc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjQuNDUyIDUxNC43NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luWzApIDUzLjc5OCBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotLTEyMDAgVEptCi0oYXZhaWxfaW4tMV0pIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQxMy44OTIgNTE0Ljc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMy44OTIgLTUxNC43N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEzLjg5MiA1MTQuNzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yOTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI5MSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5MCBUSm0KLSh0cmFuc2ZlcnJlZCkgNDMuMTQ4IFRqCi03MiA1MDIuODE0IFRkCi0odG8pIDcuNzUwOSBUagotLTQyMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MjEgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tNDIxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTE2NDYgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tNDIxIFRKbQotKGRvKSA5Ljk2MjYgVGoKLS00MjIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0xIFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIyMi4zMzkgNTAyLjgxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjIuMzM5IC01MDIuODE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjIuMzM5IDUwMi44MTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDMwNi4wMjUgNTAyLjgxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDYuMDI1IC01MDIuODE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuMjIgNTAyLjgxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtdXN0KSAxOS4zNzczIFRqCi0tNDIxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tNDIxIFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTQyMSBUSm0KLShyZXBlYXRlZGx5KSA0MS40OTQyIFRqCi0tNDIxIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tNDIxIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tNDIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQyMSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00MjEgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tNDIxIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLTcyIDQ5MC44NTkgVGQKLShjb25zdW1lZC4pIDQyLjg4OSBUagotLTEzOTcgVEptCi0oQXQpIDkuOTYyNiBUagotLTM3OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzgwIFRKbQotKHBvaW50LCkgMjIuOTczOCBUagotWzEgMCAwIDEgMTg4LjM0NiA0OTAuODU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OC4zNDYgLTQ5MC44NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC4zNDYgNDkwLjg1OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjcyLjAzMyA0OTAuODU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi4wMzMgLTQ5MC44NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS44MTMgNDkwLjg1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZXR1cm5zKSAyNy42NjYxIFRqCi1bMSAwIDAgMSAzMDcuMjU5IDQ5MC44NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA3LjI1OSAtNDkwLjg1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA3LjI1OSA0OTAuODU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDM4NC45NjggNDkwLjg1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODQuOTY4IC00OTAuODU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuOTY4IDQ5MC44NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTM3OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oc3RyZWFtJykgMjkuODc3OCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM4MCBUSm0KLShzdGF0ZSkgMTguMjYxNCBUagotLTM3OSBUSm0KLShpcykgNi42NDUwNSBUagotLTM4MCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zNzkgVEptCi0oYmFjaykgMTguODA5NCBUagotLTM3OSBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA0NzguOTA0IFRkCi0oSURMRS4pIDI1LjE3NTUgVGoKLVsxIDAgMCAxIDk5LjY2NjIgNDc4LjkwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05OS42NjYyIC00NzguOTA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05OS42NjYyIDQ3OC45MDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDIwMS4yODUgNDc4LjkwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDEuMjg1IC00NzguOTA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuNzc2IDQ3OC45MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY2FsbGVkLikgMjYuMjgxMyBUagotWzEgMCAwIDEgNzIgNDc3LjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjcuNDA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTYuOTg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEp1c3QpIDE1LjUwMTggVGoKLS0zODAgVEptCi0odG8pIDcuNzUwOSBUagotLTM4MCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zNzkgVEptCi0oc3VyZSkgMTYuNTk3NyBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODAgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTM4MCBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzc5IFRKbQotKGRvZXMpIDE4LjI2MTQgVGoKLS0zODAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzgwIFRKbQotKGNoZWF0LCkgMjMuNTExNyBUagotLTQxMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM4MCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMzc5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODAgVEptCi0obm90ZSkgMTcuMTU1NiBUagotLTM4MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDE1LjcwOCA0NTYuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxNS43MDggLTQ1Ni45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNS43MDggNDU2Ljk4NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNDYzLjUyOCA0NTYuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2My41MjggLTQ1Ni45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ny4zMTIgNDU2Ljk4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhdCkgNy4xOTMgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzgwIFRKbQotKHRpbWUpIDE3LjcxMzUgVGoKLS0zNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA0NDUuMDMxIFRkCi0oXDAwMnJzdCkgMTUuNTAxOCBUagotLTI4NiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yODYgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKG8pIDQuOTgxMyBUagotWzEgMCAwIDEgMTE4LjE3OSA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOC4xNzkgLTQ0NS4wMzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOC4xNzkgNDQ1LjAzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjAxLjg2NSA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMS44NjUgLTQ0NS4wMzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC43MTMgNDQ1LjAzMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI4NiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI0OC4wMzUgNDQ1LjAzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDguMDM1IC00NDUuMDMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDguMDM1IDQ0NS4wMzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfRklOSVNIKSA1My43OTggVGoKLVsxIDAgMCAxIDMwMS44MzMgNDQ1LjAzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDEuODMzIC00NDUuMDMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDQuNjggNDQ1LjAzMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcykgOC4yOTg4NSBUagotLTI4NiBUSm0KLShhbikgOS40MDQ2OSBUagotLTI4NiBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0yODUgVEptCi0oXChpZSwpIDEzLjAwMTIgVGoKLS0yOTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjg2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NiBUSm0KLSh0aW1lKSAxNy43MTM1IFRqCi0tMjg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjg2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI4NiBUSm0KLShhbm5vdW5jZWQpIDQzLjE1OCBUagotLTI4NSBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLTcyIDQzMy4wNzYgVGQKLShpbnRlbnRpb24pIDM1LjQyNyBUagotLTI5MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI5MSBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yOTIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI5MiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjkyIFRKbQotKGlucHV0XCkuKSAyNi4yOTEzIFRqCi0tODcwIFRKbQotKEJ5KSAxMS42MjY0IFRqCi0tMjkyIFRKbQotKGNvbXBhcmluZykgNDIuNjEgVGoKLS0yOTIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjkyIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotLTI5MSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjkyIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yOTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDM5Mi44NjIgNDMzLjA3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuODYyIC00MzMuMDc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuODYyIDQzMy4wNzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQ0MC42ODIgNDMzLjA3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDAuNjgyIC00MzMuMDc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDMuNTg5IDQzMy4wNzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjkyIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0yOTIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yOTEgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNzIgNDIxLjEyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDIxLjEyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIxLjEyMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiA0MjEuMTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTQyMS4xMjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS42ODYgNDIxLjEyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjQ3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjQ2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI0NyBUSm0KLShkZXRlY3QpIDIzLjc5MDcgVGoKLS0yNDYgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI0NyBUSm0KLShhdHQpIDkuOTYyNiBUagotMSBUSm0KLShlbXB0cykgMjMuODAwNyBUagotLTI0NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ2IFRKbQotKHNsaXApIDE0LjM5NiBUagotLTI0NyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQ2IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNDcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI0NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ3IFRKbQotKGNvbXByZXNzLikgNDAuMTE5NCBUagotLTYxNyBUSm0KLShBbikgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjQ3IFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjQ2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI0NiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNDcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDQwOS4xNjYgVGQKLShkZXRlY3RlZCkgMzMuMTk1NCBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotWzEgMCAwIDEgMTUxLjk1OSA0MDkuMTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1MS45NTkgLTQwOS4xNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MS45NTkgNDA5LjE2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgMjUzLjU3OCA0MDkuMTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My41NzggLTQwOS4xNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1My41NzggNDA5LjE2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTAwIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oaW5kaWNhdGVzKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwcm9ncmFtbWluZykgNTQuMjM2NCBUagotLTI1MCBUSm0KLShtaXN0YWspIDI2LjU3MDMgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNvcnJlY3RlZC4pIDM5LjU1MTUgVGoKLVsxIDAgMCAxIDcyIDQwNy4wMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5Ny4wNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4Ny4yNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSW5zdGVhZCkgMjguNzcyIFRqCi0tMjI0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjIzIFRKbQotKGFza2luZykgMjYuMDEyMyBUagotLTIyNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjIzIFRKbQotKFwwMDJuaXNoLCkgMjQuNjM3NSBUagotLTIyOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjQgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTIyMyBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjI0IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTIyNCBUSm0KLShhc2spIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI5My4yODIgMzg3LjI0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMjgyIC0zODcuMjQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMjgyIDM4Ny4yNDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM3Ni45NjggMzg3LjI0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzYuOTY4IC0zODcuMjQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzkuMTk2IDM4Ny4yNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTIyNCBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yMjMgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yMjQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIzIFRKbQotKHJlbWFpbmluZykgNDAuMzk4MyBUagotLTIyNCBUSm0KLShpbnB1dCwpIDIyLjk3MzggVGoKLS0yMjkgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLTcyIDM3NS4yOTMgVGQKLShpdCkgNS41MzkyMSBUagotLTI3OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3OCBUSm0KLSh0ZXJtaW5hdGUpIDM3LjYyODcgVGoKLS0yNzggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc4IFRKbQotKGN1cnJlbnQpIDI4LjIxNDEgVGoKLS0yNzcgVEptCi0oXChCdXJybykgMjYuNTYwMyBUagotMjUgVEptCi0od3MtV2hlZWxlclwpKSA1MS40NDY5IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjc4IFRKbQotKGJsb2NrLikgMjQuNjI3NSBUagotLTc4NyBUSm0KLShUaCkgMTEuMDY4NCBUagotLTEgVEptCi0oaSkgMi43Njk2IFRqCi0xIFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNzggVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNzggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNzggVEptCi0odXNlZnVsKSAyNC4zNDg2IFRqCi0tMjc4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3OCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI3OCBUSm0KLShjb250cm9sKSAyOC4yMjQgVGoKLS0yNzggVEptCi0ocHVycG9zZXMuKSAzNy45MDc3IFRqCi03MiAzNjMuMzM4IFRkCi0oVGhlKSAxNS40OTE4IFRqCi0tMzI4IFRKbQotKG1lY2hhbmlzbSkgNDUuMzc5NiBUagotLTMyOCBUSm0KLShpcykgNi42NDUwNSBUagotLTMyOCBUSm0KLShhbmFsb2dvdXMpIDQwLjM5ODMgVGoKLS0zMjggVEptCi0odG8pIDcuNzUwOSBUagotLTMyOCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzI4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMyOCBUSm0KLShcMDAybmlzaGluZzopIDM3LjY0ODcgVGoKLS00NjYgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyOTcuMDQ5IDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk3LjA0OSAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk3LjA0OSAzNjMuMzM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzODAuNzM1IDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgwLjczNSAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg0LjAwMyAzNjMuMzM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjggVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0zMjggVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMzI4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0NTYuODQxIDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU2Ljg0MSAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU2Ljg0MSAzNjMuMzM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0ZMVVNIKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1MDQuNjYyIDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA0LjY2MiAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA0LjY2MiAzNjMuMzM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMjggVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi03MiAzNTEuMzgyIFRkCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tNDQ1IFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tNDk0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNDQ2IFRKbQotKHBlcnNpc3QpIDI2LjAxMjMgVGoKLS00NDUgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTQ0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDIxMy45NCAzNTEuMzgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMy45NCAtMzUxLjM4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEzLjk0IDM1MS4zODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfRkxVU0gpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDI2MS43NjEgMzUxLjM4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjEuNzYxIC0zNTEuMzgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjYuMTk1IDM1MS4zODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tNDQ1IFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tNDQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ0NiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDM2MC4wNjIgMzUxLjM4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuMDYyIC0zNTEuMzgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjAuMDYyIDM1MS4zODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUlVOKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzOTUuOTI4IDM1MS4zODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk1LjkyOCAtMzUxLjM4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAwLjM2MiAzNTEuMzgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tNDQ1IFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMTc5MiBUSm0KLShBcykgMTEuMDY4NCBUagotLTQ0NSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDQ1IFRKbQotKFwwMDJuaXNoaW5nLCkgMzcuMzY5NyBUagotWzEgMCAwIDEgNzIgMzM5LjQyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM5LjQyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM5LjQyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAzMzkuNDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTMzOS40MjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OC4xNzcgMzM5LjQyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZXRlY3RzKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oYXR0ZW1wdCkgMjkuODg3OCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0ob25jZSkgMTguODA5NCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwM3VzaCkgMTkuMzc3MyBUagotLTI1MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKGd1bi4pIDE3LjQzNDYgVGoKLVsxIDAgMCAxIDcyIDMzNy4yN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI3LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE3LjUwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShPbmNlKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAzdXNoKSAxOS4zNzczIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlLCkgMzkuMDEzNSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHJldHVybnMpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oUikgNi42NDUwNSBUagotNDAgVEptCi0oVU5OSU5HKSAzOS4yODI1IFRqCi0tMjUwIFRKbQotKHN0YXRlLikgMjAuNzUyMSBUagotWzEgMCAwIDEgNzIgMzE1LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzA1LjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyOTUuNTkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0zNDQgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0zNDMgVEptCi0oc291bmRzKSAyNy42NzYxIFRqCi0tMzQ0IFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTM0NCBUSm0KLShjb21wbGUpIDI5LjMyOTkgVGoKLTE1IFRKbQotKHgsKSA3LjQ3MTk1IFRqCi0tMzY3IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTM0NCBUSm0KLShpc24nKSAxNC45NDM5IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zNDQgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTE4MiBUSm0KLShIZXJlJykgMjIuNjc0OSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM0NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzQ0IFRKbQotKHRhYmxlKSAxOS4zNjczIFRqCi0tMzQzIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzQ0IFRKbQotKHNobykgMTMuODM4MSBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0zNDQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNDQgVEptCi0oYWN0aW9ucykgMjguMjI0IFRqCi0tMzQzIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0NCBUSm0KLShhbGxvKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTM0NCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzQ0IFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLTcyIDI4My42MzYgVGQKLShzdGF0ZSwpIDIwLjc1MjEgVGoKLS0yODEgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI3NCBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0yNzUgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI3NCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3NSBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGVuLCkgMTEuODk1MyBUagotLTI4MCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjc1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI3NSBUSm0KLShzdGF0ZSkgMTguMjYxNCBUagotLTI3NCBUSm0KLShpcywpIDkuMTM1NyBUagotLTI4MSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3NCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjc1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NSBUSm0KLShub24tZXJyb3IpIDM3LjYxODggVGoKLS0yNzQgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjc1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yNzQgVEptCi0oYXJlLikgMTQuNjU1IFRqCi0tNzY3IFRKbQotKE5vdGUpIDE5LjM2NzMgVGoKLS0yNzUgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI3NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzUgVEptCi0oY2FuJykgMTcuMTQ1NiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi03MiAyNzEuNjgxIFRkCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBsaWNpdGx5KSAzMy4yMTUzIFRqCi0tMzQ3IFRKbQotKGFzaykgMTMuMjgwMSBUagotLTM0OCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMzQ3IFRKbQotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMzQ4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0NyBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zNDggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNDcgVEptCi0oaW4sKSAxMC4yNDE2IFRqCi0tMzcyIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTM0NyBUSm0KLShub3IpIDEzLjI4MDEgVGoKLS0zNDggVEptCi0oZG8pIDkuOTYyNiBUagotLTM0NyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zNDggVEptCi0obmVlZCkgMTguODA5NCBUagotLTM0NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzQ4IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMzQ3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzQ4IFRKbQotKGNhbikgMTMuODI4MSBUagotLTM0NyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM0NyBUSm0KLShpbmZlcnJlZCkgMzEuNTMxNiBUagotLTM0OCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMzQ3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMzQ3IFRKbQotKHJldHVybmVkKSAzMy4xOTU0IFRqCi0tMzQ4IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDcyIDI1OS43MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1OS43MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1OS43MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE1NS42ODYgMjU5LjcyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuNjg2IC0yNTkuNzI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTUuNjg2IDI1OS43MjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjU4LjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIwNy4zNF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxOCAxOAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTU5NS40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTczLjg0OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU3MC4yNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKElETEUvYW55KSA0Ny44MjA1IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShJbGxlZ2FsLikgNDcuODIwNSBUagotLTg1MiBUSm0KLShJRExFKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9ubHkpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZXhpc3RzKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGFmdGVyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi05OC40ODc5IDY4Ny43MjEgVGQKLShiZWZvcmUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3NJbml0LikgMTEzLjU3NCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLTkwIDY1MS44NTYgVGQKLShSVU5OSU5HL0JaX1JVTikgODMuNjg1OCBUagotOTguNDg3OSA2MzkuOSBUZAotKENvbXByZXNzKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obmV4dF9pbikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZXh0X291dCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShtdWNoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHBvc3NpYmxlLikgNTMuNzk4IFRqCi05OC40ODc5IDYyNy45NDUgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oUlVOTklORykgNDEuODQyOSBUagotOTguNDg3OSA2MTUuOTkgVGQKLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9SVU5fT0spIDUzLjc5OCBUagotOTAgNTkyLjA4IFRkCi0oUlVOTklORy9CWl9GTFVTSCkgOTUuNjQxIFRqCi05OC40ODc5IDU4MC4xMjUgVGQKLShSZW1lbWJlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShjdXJyZW50KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfaW4uKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKENvbXByZXNzKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obmV4dF9pbikgNDEuODQyOSBUagotOTguNDg3OSA1NjguMTY5IFRkCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXVjaCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShwb3NzaWJsZSwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShidXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjY2VwdCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhbnkpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obW9yZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnB1dC4pIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShGTFVTSElORykgNDcuODIwNSBUagotOTguNDg3OSA1NDQuMjU5IFRkCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfRkxVU0hfT0spIDY1Ljc1MzIgVGoKLTkwIDUyMC4zNDkgVGQKLShSVU5OSU5HL0JaX0ZJTklTSCkgMTAxLjYxOSBUagotOTguNDg3OSA1MDguMzk0IFRkCi0oUmVtZW1iZXIpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oY3VycmVudCkgNDEuODQyOSBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZXh0X2luLikgNDcuODIwNSBUagotLTQyNiBUSm0KLShDb21wcmVzcykgNDcuODIwNSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5leHRfaW4pIDQxLjg0MjkgVGoKLTk4LjQ4NzkgNDk2LjQzOCBUZAotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG11Y2gpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocG9zc2libGUsKSA1My43OTggVGoKLS00MjYgVEptCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NlcHQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYW55KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG1vcmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW5wdXQuKSAzNS44NjU0IFRqCi05OC40ODc5IDQ4NC40ODMgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRklOSVNISU5HKSA1My43OTggVGoKLTk4LjQ4NzkgNDcyLjUyOCBUZAotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX0ZJTklTSF9PSykgNzEuNzMwNyBUagotOTAgNDQ4LjYxOCBUZAotKEZMVVNISU5HL0JaX0ZMVVNIKSAxMDEuNjE5IFRqCi05OC40ODc5IDQzNi42NjMgVGQKLShDb21wcmVzcykgNDcuODIwNSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5leHRfaW4pIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXVjaCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShwb3NzaWJsZSwpIDUzLjc5OCBUagotOTguNDg3OSA0MjQuNzA3IFRkCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NlcHQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYW55KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG1vcmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW5wdXQuKSAzNS44NjU0IFRqCi05OC40ODc5IDQxMi43NTIgVGQKLShJZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbGwpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGV4aXN0aW5nKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGlucHV0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHVzZWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odXApIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi05OC40ODc5IDQwMC43OTcgVGQKLShvdXRwdXQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ocmVtb3ZlZCkgNDEuODQyOSBUagotMTA2Ljk3NiAzODguODQyIFRkCi0oTmV4dCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShzdGF0ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFJVTk5JTkc7KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX1JVTl9PSykgNTMuNzk4IFRqCi05OC40ODc5IDM3Ni44ODcgVGQKLShlbHNlKSAyMy45MTAyIFRqCi0xMDYuOTc2IDM2NC45MzIgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRkxVU0hJTkc7KSA1My43OTggVGoKLS00MjYgVEptCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfRkxVU0hfT0spIDY1Ljc1MzIgVGoKLTkwIDM0MS4wMjEgVGQKLShGTFVTSElORy9vdGhlcikgODMuNjg1OCBUagotOTguNDg3OSAzMjkuMDY2IFRkCi0oSWxsZWdhbC4pIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgMzE3LjExMSBUZAotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05MCAyOTMuMjAxIFRkCi0oRklOSVNISU5HL0JaX0ZJTklTSCkgMTEzLjU3NCBUagotOTguNDg3OSAyODEuMjQ1IFRkCi0oQ29tcHJlc3MpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShuZXh0X2luKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG11Y2gpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocG9zc2libGUsKSA1My43OTggVGoKLTk4LjQ4NzkgMjY5LjI5IFRkCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NlcHQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYW55KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG1vcmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW5wdXQuKSAzNS44NjU0IFRqCi05OC40ODc5IDI1Ny4zMzUgVGQKLShJZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbGwpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGV4aXN0aW5nKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGlucHV0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHVzZWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odXApIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi05OC40ODc5IDI0NS4zOCBUZAotKG91dHB1dCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShyZW1vdmVkKSA0MS44NDI5IFRqCi0xMDYuOTc2IDIzMy40MjUgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oSURMRTspIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotOTguNDg3OSAyMjEuNDcgVGQKLShlbHNlKSAyMy45MTAyIFRqCi0xMDYuOTc2IDIwOS41MTQgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRklOSVNISU5HOykgNTkuNzc1NiBUagotLTQyNiBUSm0KLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9GSU5JU0hfT0spIDcxLjczMDcgVGoKLTkwIDE4NS42MDQgVGQKLShGSU5JU0hJTkcvb3RoZXIpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgMTczLjY0OSBUZAotKElsbGVnYWwuKSA0Ny44MjA1IFRqCi05OC40ODc5IDE2MS42OTQgVGQKLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgNzIgMTQ2LjE1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzYuMTg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjQuMjM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoYXQpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0yNTAgVEptCi0obG9va3MpIDIxLjU4OSBUagotLTI1MCBUSm0KLShjb21wbGljYXRlZD8pIDUzLjEyMDYgVGoKLS02MjAgVEptCi0oVykgOS40MDQ2OSBUagotODAgVEptCi0oZWxsLCkgMTIuNDUzMyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaXIpIDEwLjUxMDUgVGoKLS0yNTAgVEptCi0oZW5vdWdoLikgMzEuODIwNSBUagotLTYyMCBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0odXN1YWwpIDIxLjAzMSBUagotLTI1MCBUSm0KLShzZXF1ZW5jZSkgMzYuNTEyOSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NpbmcpIDUwLjM2MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShsb2FkKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oaXM6KSA5LjQxNDY2IFRqCi1bMSAwIDAgMSA3MiAxMjIuMDc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjkuNzIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTkyLjM1MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgOTIuMzUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxLikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA5Mi4zNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC05Mi4zNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDkyLjM1MzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oR2V0KSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc3RhcnRlZCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxNTguMDU2IDkyLjM1MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjA1NiAtOTIuMzUzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjA1NiA5Mi4zNTM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMjY1LjY1MyA5Mi4zNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2NS42NTMgLTkyLjM1MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2NS42NTMgOTIuMzUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNjguMTQ0IDkyLjM1MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjE0NCAtNDEuNTAxOV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkzIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE5IDE5Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMzEuNTE2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU2hvKSAxNS41MDE4IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI0MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjQwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNDEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDAgVEptCi0oc2hsdXJwKSAyNC45MDY1IFRqCi0tMjQwIFRKbQotKG91dCkgMTIuNzMyMiBUagotLTI0MCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNDAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI0MSBUSm0KLShmb3JtKSAxOS4zNjczIFRqCi0tMjQwIFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yNDAgVEptCi0oemVybykgMTcuMTQ1NiBUagotLTI0MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI0MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjQxIFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjQwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDEuNDU0IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAxLjQ1NCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAxLjQ1NCA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA0ODUuMTQgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODUuMTQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ny41MzMgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjQwIFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI0MCBUSm0KLSg9KSA1LjYxODkxIFRqCi1bMSAwIDAgMSA5MS45MjUzIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTEuOTI1MyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTEuOTI1MyA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1JVTikgMzUuODY1NCBUagotWzEgMCAwIDEgMTI3Ljc5MSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNy43OTEgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNy43OTEgNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMzAuMjgxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTguMjgxNCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmluaXNoKSAyNC45MTY1IFRqCi0tMjQyIFRKbQotKHVwLikgMTIuNDUzMyBUagotLTMwNyBUSm0KLShSZXBlYXRlZGx5KSA0NC44MjE3IFRqCi0tMjQxIFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMTk4Ljc4NCA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC43ODQgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC43ODQgNjc2LjE2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjgyLjQ3MSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Mi40NzEgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NC44NzggNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjQyIFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI0MSBUSm0KLSg9KSA1LjYxODkxIFRqCi1bMSAwIDAgMSAzMzkuNzggNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzkuNzggLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS43OCA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0ZJTklTSCkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzOTMuNTc5IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkzLjU3OSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkzLjU3OSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNDIgVEptCi0oY29wKSAxNC4zODYgVGoKLTEwIFRKbQotKHlpbmcpIDE3LjcxMzUgVGoKLS0yNDEgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShjb21wcmVzKSAzMy43NTMzIFRqCi0xIFRKbQotKHNlZCkgMTMuMjgwMSBUagotLTI0MiBUSm0KLShvdXRwdXQsKSAyNy45NTUxIFRqCi05MS45MjUzIDY2NC4yMDkgVGQKLSh1bnRpbCkgMTguMjcxNCBUagotWzEgMCAwIDEgMTEyLjY4NyA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMi42ODcgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMi42ODcgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxOTAuMzk2IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkwLjM5NiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjg4NiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi1bMSAwIDAgMSAyMzcuNzA4IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY1LjcwOCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ2xvc2UpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0odXApIDkuOTYyNiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShnbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGhvbWUuKSAyNC42Mjc1IFRqCi0tNjIwIFRKbQotKENhbGwpIDE2LjYwNzcgVGoKLVsxIDAgMCAxIDIwOC43OTYgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguNzk2IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNzk2IDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDMxMC40MTUgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTAuNDE1IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuNDE1IDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMzEyLjkwNiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC45MDYgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzMC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyMC4zNzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjcwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNjkgVEptCi0odG8pIDcuNzUwOSBUagotLTI3MCBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTI2OSBUSm0KLShcMDAydHMpIDEyLjE4NDMgVGoKLS0yNzAgVEptCi0oaW50bykgMTUuNTAxOCBUagotLTI2OSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjcwIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjY5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTI3MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI2OSBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNzAgVEptCi0ob25jZSwpIDIxLjMgVGoKLS0yNzQgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjY5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI3MCBUSm0KLShza2lwKSAxNi42MDc3IFRqCi0tMjY5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MCBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI2OSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDU2LjMxNCA2MjAuMzc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Ni4zMTQgLTYyMC4zNzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1Ni4zMTQgNjIwLjM3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotNzIgNjA4LjQxOCBUZAotKFwoKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKC4uLiwpIDIzLjkxMDIgVGoKLS02MDAgVEptCi0oQlpfUlVOKSAzNS44NjU0IFRqCi0tNjAwIFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjY2NCAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjE1NCA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTI1MCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMjI1LjAzNiA2MDguNDE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNS4wMzYgLTYwOC40MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNS4wMzYgNjA4LjQxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotLTYwMCBUSm0KLShcKCkgNS45Nzc1NiBUagotLTYwMCBUSm0KLSguLi4sKSAyMy45MTAyIFRqCi0tNjAwIFRKbQotKEJaX0ZJTklTSCkgNTMuNzk4IFRqCi0tNjAwIFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA0MjIuMjk2IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIyLjI5NiAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI0Ljc4NiA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNhbGxzLikgMjAuNzUyMSBUagotWzEgMCAwIDEgNzIgNjA2LjI2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTk2LjI5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGwpIDEyLjczMjIgVGoKLS0yNzggVEptCi0ocmVxdWlyZWQpIDMzLjE5NTQgVGoKLS0yNzcgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjc4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjc3IFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMjc4IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDIyMC4yOTUgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuMjk1IC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuMjk1IDU4Ni41MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAzMjcuODkxIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI3Ljg5MSAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI3Ljg5MSA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03ODUgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjc3IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNzggVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjc3IFRKbQotKGFjY2VwdCkgMjUuNDQ0NSBUagotLTI3OCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjc3IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzggVEptCi0oYXQpIDcuMTkzIFRqCi0tMjc4IFRKbQotKGFsbCkgOS45NjI2IFRqCi03MiA1NzQuNTQ1IFRkCi0oXChvYikgMTMuMjgwMSBUagotMTUgVEptCi0odmlvdXNseVwpLikgMzUuMTQ4MSBUagotLTYxMiBUSm0KLShTbykgMTAuNTIwNSBUagotLTIzOCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzcgVEptCi0oc2hvdWxkbicpIDM0Ljg2OTEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTIzOCBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS0yMzggVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzNyBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTIzOCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yMzggVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcykgMjAuNDczMSBUagotLTIzOCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMzM5LjI4NyA1NzQuNTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS4yODcgLTU3NC41NDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS4yODcgNTc0LjU0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNDIyLjk3MyA1NzQuNTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMi45NzMgLTU3NC41NDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNS4zNDIgNTc0LjU0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjYWxscy4pIDIwLjc1MjEgVGoKLS02MTIgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0yMzggVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjM3IFRKbQotKGRvLCkgMTIuNDUzMyBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzOCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjM4IFRKbQotKGJlKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSA3MiA1NjIuNTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Mi41OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYyLjU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxNzMuNjE5IDU2Mi41OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzMuNjE5IC01NjIuNTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3My42MTkgNTYyLjU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHByb2dyYW1taW5nLikgNTYuNzI3IFRqCi1bMSAwIDAgMSA3MiA1NjAuNDMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTAuNDcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDAuNjczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTM1IFRKbQotKHJpKSA2LjA4NzE1IFRqCi0yNSBUSm0KLSh2aWFsKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHBvc3NpYmxlKSAzMi42NTc0IFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgNTM4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMzUuODY1NSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMyLjI3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MjkuMTUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1MjkuMTUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDUxNy4xOTYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPnMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotWzEgMCAwIDEgNzIgNTAxLjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5MS42OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3MS4wMzMgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy4zLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA0NzEuMDMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTQ3MS4wMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNDcxLjAzMyBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDE3NS41OTcgVGoKLVsxIDAgMCAxIDI5NS40NTUgNDcxLjAzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjMuNDU1IC0yLjMzMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDU5LjMzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDU5LjMzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTI4Ni4zMDMgNDU3LjU5MiBUZAotKCopIDUuOTc3NTYgVGoKLTI5Mi4yODEgNDU5LjMzNSBUZAotKHN0cm0pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA0NDMuNzkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzMy44MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyMS44NzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVsZWFzZXMpIDM0Ljg1OTEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDQxOS43MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwOS43NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM5OS45NTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiAzOTkuODU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM5MC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM5MC40OTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLS04NTIgVEptCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPnMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTAgMzc4LjUzOCBUZAotKEJaX09LKSAyOS44ODc4IFRqCi0tNDY4NiBUSm0KLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzYyLjk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1My4wMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzMi4zNzUgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy40LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAzMzIuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTMzMi4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMzMyLjM3NSBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDIwNi41ODUgVGoKLVsxIDAgMCAxIDMyNi40NDMgMzMyLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTQuNDQzIC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzIwLjY3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzIwLjY3OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTMwNC4yMzYgMzE4LjkzNCBUZAotKCopIDUuOTc3NTYgVGoKLTMxMC4yMTQgMzIwLjY3OCBUZAotKHN0cm0sKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHksKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDMwNS4xMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk1LjE3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjgzLjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcmVwYXJlcykgMzQuMzAxMiBUagotLTM1MSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNTEgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLS0xMjI4IFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tMzUxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDIzNS4xNzcgMjgzLjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzUuMTc3IC0yODMuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzUuMTc3IDI4My4yMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAzNDIuNzczIDI4My4yMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjc3MyAtMjgzLjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQyLjc3MyAyODMuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zNzcgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMzU2LjkzNyAyODMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni45MzcgLTI4My4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ni45MzcgMjgzLjIxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiel9zdHJlYW0pIDUzLjc5OCBUagotWzEgMCAwIDEgNDEwLjczNiAyODMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC43MzYgLTI4My4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNC4yMzUgMjgzLjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWNvcmQpIDI1LjQ0NDUgVGoKLS0zNTEgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzUxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzUyIFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMzUxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi03MiAyNzEuMjYzIFRkCi0oaW5pdGlhbGlzZWQpIDM5LjMwMjUgVGoKLS0zMDYgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMzA1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNiBUSm0KLShjYWxsLikgMTYuODc2NiBUagotLTk1MyBUSm0KLShGaWVsZHMpIDI0LjM1ODYgVGoKLVsxIDAgMCAxIDIxMS44MzMgMjcxLjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTEuODMzIC0yNzEuMjYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTEuODMzIDI3MS4yNjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMjUzLjY3NiAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My42NzYgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1My42NzYgMjcxLjI2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNTkuMzUgMjcxLjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTkuMzUgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OS4zNSAyNzEuMjYzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMjk1LjIxNSAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NS4yMTUgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OC4yNiAyNzEuMjYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzMTUuNjkgMjcxLjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTUuNjkgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNS42OSAyNzEuMjYzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzUxLjU1NiAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1MS41NTYgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1NC42IDI3MS4yNjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzA2IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzA1IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTMwNiBUSm0KLShpZikgNi4wODcxNSBUagotLTMwNSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA2IFRKbQotKGN1c3RvbSkgMjguNzgyIFRqCi0tMzA1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTMwNiBUSm0KLShhbGxvY2F0b3IpIDM0Ljg1OTEgVGoKLS0zMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDI1OS4zMDggVGQKLShyZXF1aXJlZCwpIDM1LjY4NiBUagotLTM1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzMSBUSm0KLShtYWRlKSAyMS41NzkgVGoKLVsxIDAgMCAxIDE0Ny42MzUgMjU5LjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDcuNjM1IC0yNTkuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDcuNjM1IDI1OS4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTlVMTCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMTcxLjU0NiAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3MS41NDYgLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3NC44MzUgMjU5LjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLS0zMzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzMxIFRKbQotKG5vcm1hbCkgMjguMjI0IFRqCi1bMSAwIDAgMSAyMzYuNzIyIDI1OS4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM2LjcyMiAtMjU5LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM2LjcyMiAyNTkuMzA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG1hbGxvYykgMzUuODY1NCBUagotWzEgMCAwIDEgMjcyLjU4NyAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi41ODcgLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS44NzggMjU5LjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgvKSAyLjc2OTYgVGoKLVsxIDAgMCAxIDI4MS45MzggMjU5LjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODEuOTM4IC0yNTkuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODEuOTM4IDI1OS4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZnJlZSkgMjMuOTEwMiBUagotWzEgMCAwIDEgMzA1Ljg0OCAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNS44NDggLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOS4xMzkgMjU5LjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyb3V0aW5lcy4pIDM0LjU5MDEgVGoKLS0xMTAyIFRKbQotKFVwb24pIDIyLjEzNjkgVGoKLS0zMzAgVEptCi0ocmV0dXJuLCkgMjYuMjgxMyBUagotLTM1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzEgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS0zMzAgVEptCi0oc3RhdGUpIDE4LjI2MTQgVGoKLS0zMzAgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTMzMCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzMxIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLTcyIDI0Ny4zNTMgVGQKLShpbml0aWFsaXNlZCwpIDQxLjc5MzEgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDEzMy4xNiAyNDcuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMy4xNiAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMzLjE2IDI0Ny4zNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDE4MC45OCAyNDcuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MC45OCAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjQ3MSAyNDcuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMDAuMzQ4IDI0Ny4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAwLjM0OCAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAwLjM0OCAyNDcuMzUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX291dCkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNTQuMTQ2IDI0Ny4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0LjE0NiAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU2LjYzNyAyNDcuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oemVyby4pIDE5LjYzNjMgVGoKLVsxIDAgMCAxIDcyIDI0NS45MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNS45NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyNS40MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG1lYW5pbmcpIDM0LjMxMTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0ocGFyYW1ldGVyKSAzOS44MzA1IFRqCi1bMSAwIDAgMSAxOTIuNzU2IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjc1NiAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjc1NiAyMjUuNDM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNDYuNTU0IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ2LjU1NCAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ2LjU1NCAyMjUuNDM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSAyNjYuNzQ4IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY2Ljc0OCAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY2Ljc0OCAyMjUuNDM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMzc0LjM0NSAyMjUuNDM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3NC4zNDUgLTIyNS40MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3NC4zNDUgMjI1LjQzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyMjMuMjc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMTMuMzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMDMuNTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSA4MS40OTc1IDIwMy41MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODEuNDk3NSAtMjAzLjUxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODEuNDk3NSAyMDMuNTE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNtYWxsKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMTEuMzg1IDIwMy41MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTExLjM4NSAtMjAzLjUxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE0LjI0OCAyMDMuNTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjg3IFRKbQotKG5vbnplcm8sKSAzNC41ODAyIFRqCi0tMjk3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjg4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yODcgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjg3IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjg3IFRKbQotKGFsdGVybmF0aSkgMzIuNjQ3NCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjg4IFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yODcgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjg3IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjg4IFRKbQotKHVzZXMpIDE3LjE1NTYgVGoKLS0yODcgVEptCi0obGVzcykgMTQuOTQzOSBUagotLTI4NyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yODcgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjg4IFRKbQotKGF0KSA3LjE5MyBUagotLTI4NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDE5MS41NjIgVGQKLShjb3N0KSAxNi4wNDk3IFRqCi0tMjg5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjkwIFRKbQotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0yODkgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI4OSBUSm0KLShzbG8pIDExLjYyNjQgVGoKLTI1IFRKbQotKHdseSkgMTQuOTQzOSBUagotLTI5MCBUSm0KLShcKHJvdWdobHkpIDM0LjMxMTIgVGoKLS0yODkgVEptCi0oc3BlYWtpbmcsKSAzNy45MDc3IFRqCi0tMjk5IFRKbQotKGhhbGYpIDE1LjQ5MTggVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKHNwZWVkLCkgMjUuMTc1NSBUagotLTI5OSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKG1heGltdW0pIDQwLjQwODMgVGoKLS0yODkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjg5IFRKbQotKHJlcXVpcmVtZW50KSA0OC4xMzkzIFRqCi0tMjkwIFRKbQotKGRyb3BzKSAyMi4xMzY5IFRqCi03MiAxNzkuNjA3IFRkCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0oMjMwMGtcKS4pIDMwLjcxNDcgVGoKLS02MjAgVEptCi0oU2VlKSAxNC4zODYgVGoKLVsxIDAgMCAxIDE2Ni4xNjYgMTc5LjYwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xNjYuMTY2IC0xNzkuNjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuMTY2IDE3OS42MDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyMzUuOTI0IDE3OS42MDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMjM1LjkyNCAtMTc5LjYwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM4LjQxNSAxNzkuNjA3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFsyXSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMjUwLjAzMSAxNzkuNjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1MC4wMzEgLTE3OS42MDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1Mi41MjIgMTc5LjYwNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShpbmZvcm1hdGlvbikgNDcuMDQzNCBUagotLTI1MCBUSm0KLShvbikgOS45NjI2IFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShtYW5hZ2VtZW50LikgNTMuMzk5NSBUagotWzEgMCAwIDEgNzIgMTc3LjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjcuNDg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNTcuNjg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE5vdGUpIDE5LjM2NzMgVGoKLS0yODkgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMjg5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg5IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI5MCBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS0yODkgVEptCi0odG8pIDcuNzUwOSBUagotLTI4OSBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjg5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjg5IFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI4OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4OSBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tMjkwIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShzdHJlYW0nKSAyOS44Nzc4IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjg5IFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTI5MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLTcyIDE0NS43MzQgVGQKLShiZWVuKSAxOC44MDk0IFRqCi0tMzQyIFRKbQotKHJlYWQsKSAxOS42MzYzIFRqCi0tMzY2IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzQyIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zNDIgVEptCi0oaWYpIDYuMDg3MTUgVGoKLVsxIDAgMCAxIDE2MS4wODEgMTQ1LjczNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuMDgxIC0xNDUuNzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMDgxIDE0NS43MzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDI4MC42MzMgMTQ1LjczNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODAuNjMzIC0xNDUuNzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODQuMDQzIDE0NS43MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc3VjY2VlZHMsKSAzNy44OTc3IFRqCi0tMzY1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNDMgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotWzEgMCAwIDEgMzgxLjA5OCAxNDUuNzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4MS4wOTggLTE0NS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4MS4wOTggMTQ1LjczNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDQ3Ni43MzkgMTQ1LjczNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzYuNzM5IC0xNDUuNzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODAuMTQ5IDE0NS43MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY291bGQpIDIyLjEzNjkgVGoKLS0zNDIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsKSA5Ljk2MjYgVGoKLS0zNDMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNzIgMTMzLjc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMzLjc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTMzLjc3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMTMzLjc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0xMzMuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDMuNzMxIDEzMy43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTMyLjQ2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTIyLjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTExLjg2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDExMS43NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC45MDk1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIwIDIwCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTE3LjE5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA5NS42NDEzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOTIuMDU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGlicmFyeSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShtaXMtY29tcGlsZWQpIDcxLjczMDcgVGoKLTkwIDY4Ny43MjEgVGQKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oc21hbGwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oIT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmJikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi05OC40ODc5IDY2My44MTEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKHZlcmJvc2l0eSkgNTkuNzc1NiBUagotLTQyNiBUSm0KLSg8OykgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHx8KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oNFwpKSAxMS45NTUxIFRqCi05MCA2NTEuODU2IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDYzOS45IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaW5zdWZmaWNpZW50KSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNjI0LjM1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTQuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MDIuNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA2MDIuMzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTU5Mi45NzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDU5Mi45NzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi05OC40ODc5IDU4MS4wMjEgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocmV0dXJuZWQpIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNTY5LjA2NiBUZAotKG5vKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNwZWNpZmljKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFjdGlvbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShyZXF1aXJlZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShjYXNlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA3MiA1NTMuNTI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQzLjU2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTIyLjkwMyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjUuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDUyMi45MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNTIyLjkwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA1MjIuOTAzIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpEZWNvbXByZXNzKSAxNjUuMjY4IFRqCi1bMSAwIDAgMSAyODUuMTI2IDUyMi45MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEzLjEyNiAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUxMS4yMDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUxMS4yMDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMjgwLjMyNiA1MDkuNDYyIFRkCi0oKikgNS45Nzc1NiBUagotMjg2LjMwMyA1MTEuMjA2IFRkCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDQ5NS42NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDczLjc0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm8pIDEzLjgzODEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0zMDEgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTMwMiBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTMwMSBUSm0KLShhbmQvb3V0KSAyOS44ODc4IFRqCi0tMzAyIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTMwMSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zMDEgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS0zMDIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzAxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwMiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tOTI4IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTMwMSBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0zMDIgVEptCi0obWFpbnRhaW5zKSAzOC43NDQ2IFRqCi0tMzAxIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMzAyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzAxIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTMwMSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXJzLCkgMTcuNDI0NiBUagotLTMxNSBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDYxLjc5MSBUZAotKHVzZXMpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDkxLjY0NjEgNDYxLjc5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS42NDYxIC00NjEuNzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS42NDYxIDQ2MS43OTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxODcuMjg3IDQ2MS43OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg3LjI4NyAtNDYxLjc5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg5Ljc3OCA0NjEuNzkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odHJhbnNmZXIpIDMwLjQyNTggVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi0tMjUwIFRKbQotKHRoZW0uKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA3MiA0NjAuMjU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NTAuMjk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzkuODczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlZm9yZSkgMjcuMTA4MiBUagotLTQ5OCBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tNDk5IFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTQ5OCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNTkuMzU2IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU5LjM1NiAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5LjM1NiA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgMjU0Ljk5NyA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1NC45OTcgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NC45OTcgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNjMuMDcxIDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjA3MSAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjA3MSA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfaW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMwNC45MTQgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDQuOTE0IC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDkuODc5IDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tNDk4IFRKbQotKHBvaW50KSAyMC40ODMxIFRqCi0tNDk5IFRKbQotKGF0KSA3LjE5MyBUagotLTQ5OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00OTggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQ5OSBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTU2MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDkyLjE3OSA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Mi4xNzkgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Mi4xNzkgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQwIDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjcuOTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTMwOCBUSm0KLShpbmRpY2F0ZSkgMzEuNTQxNiBUagotLTMwOCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMwOSBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTMwOCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzA4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwOCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzA4IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTMwOSBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotWzEgMCAwIDEgMjk0Ljk1NSA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NC45NTUgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC45NTUgNDI3LjkxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDM5MC41OTcgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTAuNTk3IC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTMuNjY3IDQyNy45MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odXBkYXRlcykgMzAuNDM1NyBUagotWzEgMCAwIDEgNDI3LjE3MyA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNy4xNzMgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNy4xNzMgNDI3LjkxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0NjkuMDE2IDQyNy45MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY5LjAxNiAtNDI3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY5LjAxNiA0MjcuOTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ3NC43MjMgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzQuNzIzIC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzQuNzIzIDQyNy45MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDUyMi41NDMgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjIuNTQzIC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjUuNjE0IDQyNy45MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDcyIDQxNS45NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQxNS45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQxNS45NjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDExOS44MjEgNDE1Ljk2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODIxIC00MTUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjIuMzExIDQxNS45NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZVwwMDNlY3QpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotWzEgMCAwIDEgNzIgNDEzLjgwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDAzLjg0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzk0LjA0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShTaW1pbGFybHkpIDM3LjA5MDggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDExMy43OTkgMzk0LjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuNzk5IC0zOTQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTMuNzk5IDM5NC4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDE2MS42MiAzOTQuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42MiAtMzk0LjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjQxIDM5NC4wNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjgwIFRKbQotKHBvaW50KSAyMC40ODMxIFRqCi0tMjgwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0oYSkgNC40MjMzOSBUagotLTI4MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yODAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI4MSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODAgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yODAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjgwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjgwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODAgVEptCi0ocGxhY2VkLCkgMjguNDkzIFRqCi0tMjg4IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ4Ni4yMDIgMzk0LjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODYuMjAyIC0zOTQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODYuMjAyIDM5NC4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDU0MCAzOTQuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMzk0LjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluZGljYXRpbmcpIDM5Ljg1MDQgVGoKLS01MjUgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS01MjQgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTUyNSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS01MjQgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS01MjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS01MjUgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMjg1Ljc5MiAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg1Ljc5MiAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODUuNzkyIDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzY5LjQ3OCAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY5LjQ3OCAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzQuNzA1IDM4Mi4wOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1cGRhdGVzKSAzMC40MzU3IFRqCi1bMSAwIDAgMSA0MTAuMzY3IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTAuMzY3IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMC4zNjcgMzgyLjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NTguMTg4IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTguMTg4IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OC4xODggMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ2Ni41ODkgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ni41ODkgLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY2LjU4OSAzODIuMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDUyMC4zODcgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyMC4zODcgLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI1LjYxNCAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDcyIDM3MC4xMzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3MC4xMzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM3MC4xMzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDEyNS43OTggMzcwLjEzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjUuNzk4IC0zNzAuMTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjguMjg5IDM3MC4xMzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZVwwMDNlY3QpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLVsxIDAgMCAxIDcyIDM2Ny45NzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1OC4wMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM0OC4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzIwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTMyMSBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGUpIDE3LjE1NTYgVGoKLS0zMjAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjEgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzIwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzIxIFRKbQotKGxpdHRsZSkgMTguMjcxNCBUagotLTMyMCBUSm0KLShvcikgOC4yOTg4NSBUagotLTMyMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTMyMSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMzIwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMjEgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMjAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzIxIFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzIwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0zMjEgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMzIwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDcuODE2IDM0OC4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA3LjgxNiAtMzQ4LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA3LjgxNiAzNDguMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgNTAzLjQ1NyAzNDguMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwMy40NTcgLTM0OC4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMy40NTcgMzQ4LjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTA0MyBUSm0KLShJbikgOC4yOTg4NSBUagotLTMyMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDMzNi4yNjIgVGQKLShsaW1pdCwpIDIxLjMyIFRqCi0tMjk1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjg2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjg3IFRKbQotKGFjY2VwdGFibGUpIDQyLjA0MjIgVGoKLS0yODYgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NiBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yODYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODcgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjg2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yODYgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yODYgVEptCi0oYnl0ZSkgMTcuMTU1NiBUagotLTI4NyBUSm0KLShhdCkgNy4xOTMgVGoKLS0yODYgVEptCi0oYSkgNC40MjMzOSBUagotLTI4NiBUSm0KLSh0aW1lLCkgMjAuMjA0MiBUagotLTI5NSBUSm0KLShhbHRob3VnaCkgMzQuODY5MSBUagotLTI4NiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODcgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yODYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODYgVEptCi0odGVycmlibHkpIDI5LjMyOTkgVGoKLS0yODYgVEptCi0oaW5lZikgMTUuNDkxOCBUagotMjUgVEptCi0oXDAwMmNpZW50LikgMjcuMzk3MiBUagotLTgzOCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLTcyIDMyNC4zMDYgVGQKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oYWwpIDcuMTkzIFRqCi0xMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXlzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGVuc3VyZSkgMjYuMDAyNCBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShsZWFzdCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI1MCBUSm0KLShieXRlKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oY2FsbC4pIDE2Ljg3NjYgVGoKLVsxIDAgMCAxIDcyIDMyMi4xNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzEyLjE4N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzAyLjM4OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShVc2UpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDEwMC43NzIgMzAyLjM4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDAuNzcyIC0zMDIuMzg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDAuNzcyIDMwMi4zODkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTYuNDEzIDMwMi4zODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjQxMyAtMzAyLjM4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk4LjkwNCAzMDIuMzg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHNpbXBsZXIpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0odGhhbikgMTcuMTU1NiBUagotWzEgMCAwIDEgMjYwLjA2NCAzMDIuMzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC4wNjQgLTMwMi4zODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2MC4wNjQgMzAyLjM4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzQzLjc1IDMwMi4zODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQzLjc1IC0zMDIuMzg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDMuNzUgMzAyLjM4OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzMDAuMjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTAuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODAuNDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTM0NiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zNDcgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlKSAxNy4xNTU2IFRqCi0tMzQ2IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMzQ2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ2IFRKbQotKHJlbW8pIDIwLjQ3MzEgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM0NyBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zNDYgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zNDYgVEptCi0oZGVzY3JpYmVkKSAzOC4xNzY3IFRqCi0tMzQ2IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUsKSA2LjkxNDA0IFRqCi0tMzcxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ2IFRKbQotKHJlcGVhdGVkbHkpIDQxLjQ5NDIgVGoKLS0zNDYgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MjIuNjM4IDI4MC40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIyLjYzOCAtMjgwLjQ3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIyLjYzOCAyODAuNDcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgNTE4LjI3OSAyODAuNDcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxOC4yNzkgLTI4MC40NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyMS43MjkgMjgwLjQ3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1bnRpbCkgMTguMjcxNCBUagotWzEgMCAwIDEgNzIgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjY4LjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDI2OC41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUyLjMxNCAyNjguNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjYyIFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMzQ0IFRKbQotKEFwcGVhcmFuY2UpIDQ3LjU3MTQgVGoKLS0yNjIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDI2MS43NjcgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjEuNzY3IC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjEuNzY3IDI2OC41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMzM5LjQ3NSAyNjguNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS40NzUgLTI2OC41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0Mi4wODEgMjY4LjUxNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZW5vdGVzKSAzMC40MzU3IFRqCi0tMjYyIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDM5Mi42NzIgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuNjcyIC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuNjcyIDI2OC41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSA0ODguMzEzIDI2OC41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg4LjMxMyAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkwLjkxOSAyNjguNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhcykgMTMuMjgwMSBUagotLTI2MiBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotNzIgMjU2LjU2MSBUZAotKHRoZSkgMTIuMTc0MyBUagotLTIxMiBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tMjEyIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjExIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjEyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIxMiBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjEyIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDIzNy44NTggMjU2LjU2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzcuODU4IC0yNTYuNTYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzcuODU4IDI1Ni41NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAzMzMuNDk5IDI1Ni41NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMzLjQ5OSAtMjU2LjU2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjYwOSAyNTYuNTYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yMTIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjEyIFRKbQotKHByb2R1Y2UpIDMyLjA4OTUgVGoKLVsxIDAgMCAxIDQwMi4yNjMgMjU2LjU2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDIuMjYzIC0yNTYuNTYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDIuMjYzIDI1Ni41NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgNDc5Ljk3MiAyNTYuNTYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OS45NzIgLTI1Ni41NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi4wODIgMjU2LjU2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1bnRpbCkgMTguMjcxNCBUagotLTIxMiBUSm0KLShhbGwpIDkuOTYyNiBUagotLTIxMiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLTcyIDI0NC42MDUgVGQKLShkYXRhKSAxNi41OTc3IFRqCi0tMjU2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1NiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjU1IFRKbQotKHBsYWNlZCkgMjYuMDAyNCBUagotLTI1NiBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjU2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1NiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjU3IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjU2IFRKbQotKG9uY2UpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDI3OC45NzggMjQ0LjYwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguOTc4IC0yNDQuNjA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzguOTc4IDI0NC42MDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMzU2LjY4NyAyNDQuNjA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni42ODcgLTI0NC42MDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1OS4yMzYgMjQ0LjYwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcHBlYXJzLCkgMzIuOTE2NCBUagotLTI1NyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjU2IFRKbQotKGd1YXJhbnRlZWQpIDQzLjcwNTkgVGoKLS0yNTYgVEptCi0odG8pIDcuNzUwOSBUagotLTI1NiBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjU1IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWlsYWJsZSkgMjYuNTYwMyBUagotNzIgMjMyLjY1IFRkCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3NlZCkgNTYuNDM4MSBUagotLTI1MCBUSm0KLShvdXRwdXQsKSAyNy45NTUxIFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMDUuMzY5IDIzMi42NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDUuMzY5IC0yMzIuNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNS4zNjkgMjMyLjY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDMxOC45NDMgMjMyLjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxOC45NDMgLTIzMi42NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIxLjQzMyAyMzIuNjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY2FuKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKHNhZmVseSkgMjMuNzkwNyBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShjYWxsZWQuKSAyNi4yODEzIFRqCi1bMSAwIDAgMSA3MiAyMzAuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMjAuNTMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMTAuNzMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSwpIDE5LjA4ODMgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI2MS4yNTkgMjEwLjczMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjEuMjU5IC0yMTAuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjEuMjU5IDIxMC43MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMzc0LjgzMyAyMTAuNzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3NC44MzMgLTIxMC43MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3Ny4zMjMgMjEwLjczMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGNsZWFuKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0ocmVsZWFzZSkgMjcuNjU2MiBUagotLTI1MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIwOC41NzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE5OC42MTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE4OC44MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiAxODguNzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTM3Ljg2M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNykgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyMSAyMQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIwMC44ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTc5LjMyOCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDE3NS43NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybS0+cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY4Ny43MjEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtLT5hdmFpbF9vdXQpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi05MCA2NzUuNzY2IFRkCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotOTguNDg3OSA2NjMuODExIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludGVncml0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotOTAgNjUxLjg1NiBUZAotKEJaX0RBVEFfRVJST1JfTUFHSUMpIDExMy41NzQgVGoKLTk4LjQ4NzkgNjM5LjkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShzdHJlYW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZG9lc24ndCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShiZWdpbikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShyaWdodCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShtYWdpYykgMjkuODg3OCBUagotLTQyNiBUSm0KLShieXRlcykgMjkuODg3OCBUagotOTAgNjI3Ljk0NSBUZAotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotOTguNDg3OSA2MTUuOTkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGVyZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3YXNuJ3QpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZW5vdWdoKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNjA0LjAzNSBUZAotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLTk4LjQ4NzkgNTkyLjA4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxvZ2ljYWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZGV0ZWN0ZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotOTguNDg3OSA1ODAuMTI1IFRkCi0ob3V0cHV0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGNvbnN1bWVkLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGVnKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHMtLT5hdmFpbF9vdXQpIDc3LjcwODMgVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi05MCA1NjguMTY5IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiA1NDAuNjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzMC43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE4Ljc1NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgNTE4LjY1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MDkuMjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUwOS4yOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLTk4LjQ4NzkgNDk3LjMzNSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShyZXR1cm5lZCkgNDcuODIwNSBUagotOTAgNDg1LjM4IFRkCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotOTguNDg3OSA0NzMuNDI1IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDQ1Ny44ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDcuOTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNy4yNjIgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy42LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA0MjcuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTQyNy4yNjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNDI3LjI2MiBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTk2LjI1NiBUagotWzEgMCAwIDEgMzE2LjExNCA0MjcuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NC4xMTQgLTIuMzMyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00MTUuNTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0MTUuNTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxMTMuNTc0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi0yOTguMjU5IDQxMy44MjEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMDQuMjM2IDQxNS41NjQgVGQKLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNDAwLjAyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTAuMDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM3OC4xMDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVsZWFzZXMpIDM0Ljg1OTEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgMzc1Ljk0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzY1Ljk4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzU2LjE4NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDM1Ni4wODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC43NzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDU5Ljc3NTggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA1Ni4xODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzQ2LjcyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzQ2LjcyMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSAzMzQuNzY3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPnMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTAgMzIyLjgxMiBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDMxMC44NTcgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMjk1LjMxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODUuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzMuMzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiAyNzMuMjk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI2My45MzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk4LjQ4NzkgMjYzLjkzMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOb25lLikgMjkuODg3OCBUagotWzEgMCAwIDEgNzIgMjQ4LjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzOC40MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMy42MzkgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuNC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oSGlnaC1sZSkgNzAuMDExNyBUagotMTUgVEptCi0odmVsKSAyOC43MTUzIFRqCi0tMjc4IFRKbQotKGludGVyZmFjZSkgODYuMTA0NiBUagotWzEgMCAwIDEgNzIgMjA5LjA0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTk5LjA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxOTEuNzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotLTI1MCBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHdyaXRpbmcpIDI4Ljc4MiBUagotWzEgMCAwIDEgMzAwLjI5MiAxOTEuNzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMC4yOTIgLTE5MS43MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMC4yOTIgMTkxLjcyMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMzMwLjE4IDE5MS43MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMwLjE4IC0xOTEuNzIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzIuNjcgMTkxLjcyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS02MjAgVEptCi0oRmlyc3QsKSAyMC43NjIxIFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShnZW5lcmFsKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKHBvaW50cy4pIDI2Ljg0OTIgVGoKLVsxIDAgMCAxIDcyIDE4OS41NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS43MjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxNTkuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsKSAxMi43MzIyIFRqCi0tMzMyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzMxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMiBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0zMzIgVEptCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzMxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSAyMDIuOTU4IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDIuOTU4IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMi45NTggMTU5Ljg0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotMjIwLjg5MSAxNTguMDk3IFRkCi0oKikgNS45Nzc1NiBUagotWzEgMCAwIDEgMjI2Ljg2OCAxNTkuODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI2Ljg2OCAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuMTcyIDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMzMyIFRKbQotKGFyKSA3Ljc0MDk0IFRqCi0xOCBUSm0KLShndW1lbnQsKSAzMi4zNzg1IFRqCi1bMSAwIDAgMSAyOTIuNDI2IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTIuNDI2IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Mi40MjYgMTU5Ljg0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMzNC4yNjkgMTU5Ljg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNC4yNjkgLTE1OS44NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM0LjI2OSAxNTkuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTExMTAgVEptCi0oQWZ0ZXIpIDIxLjAyMTEgVGoKLS0zMzIgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTMzMSBUSm0KLShjYWxsLCkgMTYuODc2NiBUagotWzEgMCAwIDEgNDE0LjA4MyAxNTkuODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE0LjA4MyAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTQuMDgzIDE1OS44NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0NTUuOTI2IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTUuOTI2IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OS4yMyAxNTkuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzMyIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzMxIFRKbQotKGNvbnN1bHRlZCkgMzguMTg2NiBUagotODYuOTQ0IDE0Ny44ODUgVGQKLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMzQ5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDkgVEptCi0oZGV0ZXJtaW5lKSAzOS44NDA0IFRqCi0tMzQ4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OSBUSm0KLShvdXRjb21lKSAzNC4zMTEyIFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OCBUSm0KLShjYWxsLikgMTYuODc2NiBUagotLTEyMTMgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDI4MC4zODYgMTQ3Ljg4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODAuMzg2IC0xNDcuODg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODAuMzg2IDE0Ny44ODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMzIyLjIyOSAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMi4yMjkgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNS43MDQgMTQ3Ljg4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgMzM1LjgyNCAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNS44MjQgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzNS44MjQgMTQ3Ljg4NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMzY1LjcxMSAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2NS43MTEgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2NS43MTEgMTQ3Ljg4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0zNDggVEptCi0oY29tcGxldGVkKSA0MS41MDQyIFRqCi0tMzQ5IFRKbQotKHN1Y2Nlc3NmdWxseSkgNDguNjk3MiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTM3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM0OCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi04Ni45NDQgMTM1LjkzIFRkCi0odGhlbikgMTcuMTU1NiBUagotLTI3MSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcxIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI3MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcwIFRKbQotKGZ1bmN0aW9uKSAzMy4yMDUzIFRqCi0tMjcxIFRKbQotKFwoaWYpIDkuNDA0NjkgVGoKLS0yNzAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHlcKSkgOC4yOTg4NSBUagotLTI3MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3MSBUSm0KLShjb25zKSAxOC4yNjE0IFRqCi0xIFRKbQotKHUpIDQuOTgxMyBUagotLTEgVEptCi0obCkgMi43Njk2IFRqCi0xIFRKbQotKHRlZC4pIDE0LjY2NDkgVGoKLS03NDQgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDM2NS4wNzcgMTM1LjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2NS4wNzcgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY1LjA3NyAxMzUuOTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgNDA2LjkyIDEzNS45M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDYuOTIgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA5LjYxNiAxMzUuOTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLVsxIDAgMCAxIDQxOC45NTYgMTM1LjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxOC45NTYgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE4Ljk1NiAxMzUuOTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfSU9fRVJST1IpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQ4NC43MSAxMzUuOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg0LjcxIC0xMzUuOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4NC43MSAxMzUuOTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI3MSBUSm0KLSh0aGVyZSkgMTkuOTE1MiBUagotLTI3MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNzEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTg2Ljk0NCAxMjMuOTc1IFRkCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNDYgVEptCi0ocmVhZGluZy93cml0aW5nKSA2MS40Mjk0IFRqCi0tMjQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NiBUSm0KLSh1bmRlcmx5aW5nKSA0My4xNjc5IFRqCi0tMjQ2IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNDUgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTI0NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI0NSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNDYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjQ2IFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNDUgVEptCi0oY29uc3VsdCkgMjguNzgyIFRqCi1bMSAwIDAgMSA0MTQuMDk2IDEyMy45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE0LjA5NiAtMTIzLjk3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE0LjA5NiAxMjMuOTc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGVycm5vKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NDMuOTg0IDEyMy45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQzLjk4NCAtMTIzLjk3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ2LjQzMiAxMjMuOTc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC8pIDIuNzY5NiBUagotWzEgMCAwIDEgNDUxLjY0OSAxMjMuOTc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1MS42NDkgLTEyMy45NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1MS42NDkgMTIzLjk3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwZXJyb3IpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQ4Ny41MTQgMTIzLjk3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODcuNTE0IC0xMjMuOTc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODkuOTYyIDEyMy45NzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI0NiBUSm0KLShkZXRlcm1pbmUpIDM5Ljg0MDQgVGoKLTg2Ljk0NCAxMTIuMDIgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTYgVEptCi0oY2F1c2UpIDIyLjEyNjkgVGoKLS0zNTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU2IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHR5KSAyNS40NjQ0IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMDYuNTI4IDExMi4wMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDYuNTI4IC0xMTIuMDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNi41MjggMTEyLjAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI0OC4zNzEgMTEyLjAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OC4zNzEgLTExMi4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUxLjkxNiAxMTIuMDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obWF5KSAxNy4xNTU2IFRqCi0tMzU2IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0zNTYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNTUgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzU2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNTYgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlvdXMpIDI0LjM0ODYgVGoKLS0zNTYgVEptCi0ob3RoZXIpIDIwLjQ3MzEgVGoKLS0zNTYgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczspIDIzLjI0MjcgVGoKLS00MDggVEptCi0ocHJlY2lzZSkgMjguMjE0MSBUagotLTM1NiBUSm0KLShkZXRhaWxzKSAyNi4wMTIzIFRqCi0tMzU2IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM1NiBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tMzU2IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zNTYgVEptCi0oYSkgNC40MjMzOSBUagotODYuOTQ0IDEwMC4wNjQgVGQKLShwZXIpIDEyLjcyMjIgVGoKLTIwIFRKbQotKC1mdW5jdGlvbikgMzYuNTIyOSBUagotLTI1MCBUSm0KLShiYXNpcykgMTkuOTI1MiBUagotLTI1MCBUSm0KLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMTg2LjgzOSAxMDAuMDY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNC44MzggLTQ5LjIxMjZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTgpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjIgMjIKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zMS41MTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgOTUuOTU3NiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk1Ljk1NzYgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk1Ljk1NzYgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMzcuODAxIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3LjgwMSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjE3OSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluZGljYXRlcykgMzUuNDE3IFRqCi0tMjM5IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjM4IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjM5IFRKbQotKFwoaWUsKSAxMy4wMDEyIFRqCi0tMjQxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5dGhpbmcpIDI1LjQ2NDQgVGoKLS0yMzkgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGNlcHQpIDIxLjU3OSBUagotWzEgMCAwIDEgMjkyLjIyNSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Mi4yMjUgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Mi4yMjUgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMzIyLjExMyA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMi4xMTMgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNC40OTIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzQxLjI1NiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0MS4yNTYgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS4yNTYgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA0MTguOTY1IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE4Ljk2NSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE4Ljk2NSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLCkgNS44MDgyIFRqCi0tMjM5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTIzOSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yMzggVEptCi0oaW1tZWRpYXRlbHkpIDQ5LjgxMyBUagotLTIzOSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDg2Ljk0NCA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNzYuNjA4IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjYwOCAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5LjM0MyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDE5My42OTUgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuNjk1IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuNjk1IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAyODkuMzM3IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg5LjMzNyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjMzNyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yODEgVEptCi0oZGVwZW5kaW5nKSA0MS41MDQyIFRqCi0tMjc0IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNzUgVEptCi0od2hldGhlcikgMzIuMDg5NSBUagotLTI3NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjc1IFRKbQotKGF0dGVtcHRpbmcpIDQyLjYyIFRqCi0tMjc0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzUgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI3NCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI3NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjc0IFRKbQotKHdyaXRlXCkpIDIzLjc5MDcgVGoKLTg2Ljk0NCA2ODYuMTI3IFRkCi0odG8pIDcuNzUwOSBUagotLTI0MiBUSm0KLShmcmVlKSAxNS40ODE5IFRqCi0tMjQyIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNDEgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNDIgVEptCi0ocmVzb3VyY2VzKSAzNy42MTg4IFRqCi0tMjQyIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNDIgVEptCi0od2kpIDkuOTYyNiBUagotMSBUSm0KLSh0aCkgNy43NTA5IFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tNjE0IFRKbQotKE9uY2UpIDIxLjAyMTEgVGoKLS0yNDIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNDIgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNDIgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjQyIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNDEgVEptCi0oaW5kaWNhdGVkLCkgMzkuMDEzNSBUagotLTI0NCBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2aW91cikgMjEuMDMxIFRqCi0tMjQxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQyIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjQyIFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjQyIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhjZXB0KSAyMS41NzkgVGoKLVsxIDAgMCAxIDg2Ljk0NCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNzYuNjA4IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjYwOCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5LjcwNSA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxODMuMDIyIDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgzLjAyMiAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjAyMiA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMjc4LjY2NCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC42NjQgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3OC42NjQgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTMxMSBUSm0KLShpcykgNi42NDUwNSBUagotLTMxMSBUSm0KLSh1bmRlXDAwMm5lZC4pIDQxLjc4MzEgVGoKLS05ODUgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzExIFRKbQotKGltcGxpY2F0aW9uKSA0NS4zODk2IFRqCi0tMzEwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzExIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMTEgVEptCi0oXCgxXCkpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDQ1NS45ODggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTUuOTg4IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTUuOTg4IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgNDk3LjgzMSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ny44MzEgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMC45MjggNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMTEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTg2Ljk0NCA2NjIuMjE3IFRkCi0oY2hlY2spIDIzLjIzMjggVGoKLTEwIFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjkxIFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjkxIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yOTEgVEptCi0oY2FsbCwpIDE2Ljg3NjYgVGoKLS0zMDEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTEgVEptCi0oXCgyXCkpIDExLjYxNjQgVGoKLS0yOTEgVEptCi0oaWYpIDYuMDg3MTUgVGoKLVsxIDAgMCAxIDIyNS4zNDcgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjUuMzQ3IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjUuMzQ3IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjY3LjE5IDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY3LjE5IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzAuMDkgNjYyLjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbmRpY2F0ZXMpIDM1LjQxNyBUagotLTI5MSBUSm0KLShhbikgOS40MDQ2OSBUagotLTI5MSBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzQ1LjE2MSA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0NS4xNjEgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0NS4xNjEgNjYyLjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDQzNC44MjQgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzQuODI0IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzcuNzI0IDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDQ0MS4wNDEgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDEuMDQxIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuMDQxIDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSA1MzYuNjgzIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM2LjY4MyAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM2LjY4MyA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi04Ni45NDQgNjUwLjI2MiBUZAotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGNsZWFuKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHVwLikgMTIuNDUzMyBUagotWzEgMCAwIDEgMjIwLjAzNCA2NTAuMjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0OC4wMzQgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA2MjguMzQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgMTA2LjM2MiA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNi4zNjIgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNi4zNjIgNjI4LjM0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShGSUxFKSAyMy45MTAyIFRqCi0xMzAuMjczIDYyNi42IFRkCi0oKikgNS45Nzc1NiBUagotWzEgMCAwIDEgMTM2LjI1IDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM2LjI1IC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDAuMTc3IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMpIDMzLjc2MzMgVGoKLS0zOTQgVEptCi0ocGFzc2VkKSAyNi41NjAzIFRqCi0tMzk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDIyNy41OTIgNjI4LjM0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjcuNTkyIC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjcuNTkyIDYyOC4zNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDMxMS4yNzggNjI4LjM0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTEuMjc4IC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTUuMjA1IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLykgMi43Njk2IFRqCi1bMSAwIDAgMSAzMjEuOTAxIDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIxLjkwMSAtNjI4LjM0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIxLjkwMSA2MjguMzQ0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgNDExLjU2NSA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMS41NjUgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNS40OTEgNjI4LjM0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zOTQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zOTQgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTQgVEptCi0oYmluYXJ5KSAyNS40NTQ0IFRqCi0tMzk1IFRKbQotKG1vZGUuKSAyNC42Mjc1IFRqCi04Ni45NDQgNjE2LjM4OSBUZAotKE1vc3QpIDIwLjQ4MzEgVGoKLS0yMjkgVEptCi0oVW5peCkgMTkuOTI1MiBUagotLTIyOSBUSm0KLShzeXN0ZW1zKSAzMS41NTE2IFRqCi0tMjI4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjkgVEptCi0oZG8pIDkuOTYyNiBUagotLTIyOSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yMjkgVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOSBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQsKSAxNy40MzQ2IFRqCi0tMjMzIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTIyOSBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTIyOSBUSm0KLShwbGF0Zm9ybXMsKSA0MC42NzczIFRqCi0tMjMzIFRKbQotKGluY2x1ZGluZykgMzcuNjM4NyBUagotLTIyOSBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTIyOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyOSBUSm0KLShNYWMsKSAyMC4xOTQyIFRqCi0tMjMzIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjkgVEptCi0obm90LikgMTUuMjIyOSBUagotLTYwNiBUSm0KLShJZikgNi42MzUwOSBUagotLTIyOSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMjkgVEptCi0ob21pdCkgMTguMjcxNCBUagotODYuOTQ0IDYwNC40MzMgVGQKLSh0aGlzLCkgMTYuODg2NiBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGVuY291bnRlcikgMzkuMjgyNSBUagotLTI1MCBUSm0KLShwcm9ibGVtcykgMzcuMDgwOCBUagotLTI1MCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yNTAgVEptCi0obW8pIDEyLjczMjIgVGoKLTE1IFRKbQotKHZpbmcpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY29kZSkgMTguODA5NCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLShwbGF0Zm9ybXMuKSA0MC42NzczIFRqCi1bMSAwIDAgMSAzNzIuNjYgNjA0LjQzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDAuNjYgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01ODIuNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDU4Mi41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1ODIuNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTU4Mi41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1ODIuNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1lbW9yeSkgMzQuMzExMiBUagotLTM0OCBUSm0KLShhbGxvY2F0aW9uKSAzOS4yOTI1IFRqCi0tMzQ4IFRKbQotKHJlcXVlc3RzKSAzMi42NDc0IFRqCi0tMzQ4IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0OCBUSm0KLShoYW5kbGVkKSAzMS41NDE2IFRqCi0tMzQ4IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDI2Ny42NyA1ODIuNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Ny42NyAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY3LjY3IDU4Mi41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obWFsbG9jKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzMDMuNTM1IDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAzLjUzNSAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA3LjAwMyA1ODIuNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC8pIDIuNzY5NiBUagotWzEgMCAwIDEgMzEzLjI0MSA1ODIuNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMy4yNDEgLTU4Mi41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMy4yNDEgNTgyLjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVlKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzMzcuMTUxIDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM3LjE1MSAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM3LjE1MSA1ODIuNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMjA5IFRKbQotKEF0KSA5Ljk2MjYgVGoKLS0zNDggVEptCi0ocHJlc2VudCkgMjguNzcyIFRqCi0tMzQ4IFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMzQ4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzQ4IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zNDggVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWNpbGl0eSkgMjQuOTA2NSBUagotLTM0OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNDggVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLWRlXDAwMm5lZCkgMzIuNjQ3NCBUagotODYuOTQ0IDU3MC41NiBUZAotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShhbGxvY2F0b3JzKSAzOC43MzQ2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKFwoY291bGQpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0oZWFzaWx5KSAyMy4yNDI3IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGFkZGVkLCkgMjYuMjgxMyBUagotLTI1MCBUSm0KLSh0aG91Z2hcKS4pIDMzLjQ4NDMgVGoKLVsxIDAgMCAxIDM4Ny4xNjUgNTcwLjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNS4xNjUgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0OC40NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyOS45NzcgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC4xLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA1MjkuOTc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTUyOS45NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNTI5Ljk3NyBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6UmVhZE9wZW4pIDE0NC42MDkgVGoKLVsxIDAgMCAxIDI2NC40NjggNTI5Ljk3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuNDY4IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC03Mi43MjcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDcxLjczMSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDY4LjE0NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MTguMjc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1MTguMjc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHR5cGVkZWYpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWkZJTEU7KSA0MS44NDI5IFRqCi05MCA0OTQuMzY5IFRkCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0xMzAuMTA5IDQ5Mi42MjUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzYuMDg3IDQ5NC4zNjkgVGQKLShCWjJfYnpSZWFkT3BlblwoKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjUyLjE3MSA0OTIuNjI1IFRkCi0oKikgNS45Nzc1NiBUagotMjU4LjE0OSA0OTQuMzY5IFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oRklMRSkgMjMuOTEwMiBUagotMzM4LjM2OCA0OTIuNjI1IFRkCi0oKikgNS45Nzc1NiBUagotMzQ0LjM0NiA0OTQuMzY5IFRkCi0oZiwpIDExLjk1NTEgVGoKLTE5MS44NTUgNDgyLjQxNCBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHksKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzbWFsbCwpIDM1Ljg2NTQgVGoKLTE5MS44NTUgNDcwLjQ1OCBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLTIyMC4wMSA0NjguNzE1IFRkCi0oKikgNS45Nzc1NiBUagotMjI1Ljk4NyA0NzAuNDU4IFRkCi0odW51c2VkLCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oblVudXNlZCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDQ1NC45MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ0Ljk1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDMyLjk5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcmVwYXJlKSAzMC40MjU4IFRqCi0tMjkwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI5MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjkwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yODkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI5MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yODkgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi1bMSAwIDAgMSAyNzIuNjk3IDQzMi45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjY5NyAtNDMyLjk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcyLjY5NyA0MzIuOTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGYpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDI3OC42NzUgNDMyLjk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguNjc1IC00MzIuOTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzguNjc1IDQzMi45OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMjg1LjQzOSA0MzIuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NS40MzkgLTQzMi45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NS40MzkgNDMyLjk5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAyOTEuNDE3IDQzMi45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkxLjQxNyAtNDMyLjk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjMwMyA0MzIuOTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI5MCBUSm0KLShyZWZlcikgMTguNzk5NCBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjg5IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjkwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI4OSBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjkwIFRKbQotKG9wZW5lZCkgMjguNzcyIFRqCi0tMjkwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4OSBUSm0KLShyZWFkaW5nLCkgMzIuMzY4NSBUagotLTMwMCBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDIxLjA0NCBUZAotKGZvcikgMTEuNjE2NCBUagotLTMwNiBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTMwNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0zMDYgVEptCi0oaW5kaWNhdG9yKSAzNS40MTcgVGoKLS0zMDUgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDE5My40NTcgNDIxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuNDU3IC00MjEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuNDU3IDQyMS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmVycm9yXChmXCkpIDUzLjc5OCBUagotWzEgMCAwIDEgMjQ3LjI1NSA0MjEuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0Ny4yNTUgLTQyMS4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Ny4yNTUgNDIxLjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKWlzKSA5Ljk2MjYgVGoKLS0zMDYgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzA1IFRKbQotKHNldC4pIDEzLjU1OTEgVGoKLS05NTQgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDMwOC43ODQgNDIxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDguNzg0IC00MjEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDguNzg0IDQyMS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc21hbGwpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMzOC42NzEgNDIxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzguNjcxIC00MjEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDEuNzE3IDQyMS4wNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0oMSwpIDcuNDcxOTUgVGoKLS0zMTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA2IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zMDYgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTMwNSBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0zMDYgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNiBUSm0KLShkZWMpIDEzLjgyODEgVGoKLTEgVEptCi0ob21wcmVzcykgMzMuMjA1MyBUagotLTMwNiBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMzA2IFRKbQotKGxlc3MpIDE0Ljk0MzkgVGoKLTcyIDQwOS4wODkgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVuc2UpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc3BlZWQuKSAyNS4xNzU1IFRqCi1bMSAwIDAgMSA3MiA0MDYuOTMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTYuOTY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODcuMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjI3IFRKbQotKHJlYXNvbnMpIDI5Ljg3NzggVGoKLS0yMjcgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBsYWluZWQpIDM0LjMxMTIgVGoKLS0yMjggVEptCi0oYmVsbykgMTcuMTU1NiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE4OS4xOTMgMzg3LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODkuMTkzIC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuMTkzIDM4Ny4xNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjQ4Ljk2OSAzODcuMTcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OC45NjkgLTM4Ny4xNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1MS4yMzIgMzg3LjE3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjI3IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yMjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAzMzIuNzMyIDM4Ny4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMyLjczMiAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMyLjczMiAzODcuMTcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM3NC41NzUgMzg3LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzQuNTc1IC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzYuODM4IDM4Ny4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMpIDIxLjAzMSBUagotLTIyNyBUSm0KLShzdGFydGluZykgMjkuODg3OCBUagotLTIyNyBUSm0KLShhdCkgNy4xOTMgVGoKLVsxIDAgMCAxIDQ0MS43NCAzODcuMTcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS43NCAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQxLjc0IDM4Ny4xNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0NzcuNjA1IDM4Ny4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc3LjYwNSAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc3LjYwNSAzODcuMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yMzIgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjI3IFRKbQotKHN0YXJ0aW5nKSAyOS44ODc4IFRqCi03MiAzNzUuMjE2IFRkCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjc5IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTU1LjA5NCAzNzUuMjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS4wOTQgLTM3NS4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS4wOTQgMzc1LjIxNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNjEuMDcyIDM3NS4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjA3MiAtMzc1LjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjA3MiAzNzUuMjE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03OTcgVEptCi0oQXQpIDkuOTYyNiBUagotLTI4MCBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi1bMSAwIDAgMSAyMDYuNDE0IDM3NS4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA2LjQxNCAtMzc1LjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA2LjQxNCAzNzUuMjE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01BWF9VTlVTRUQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI4NC4xMjIgMzc1LjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuMTIyIC0zNzUuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODYuOTA3IDM3NS4yMTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI4MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNzkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODAgVEptCi0oc3VwcGxpZWQpIDMzLjc2MzMgVGoKLS0yNzkgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjgwIFRKbQotKHRoaXMuKSAxNi44ODY2IFRqCi0tNzk3IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjc5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXR5KSAyNC45MDY1IFRqCi0tMjc5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjgwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI3OSBUSm0KLShyZXF1aXJlZCwpIDM1LjY4NiBUagotNzIgMzYzLjI2IFRkCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShwYXNzKSAxNy4xNTU2IFRqCi1bMSAwIDAgMSAxMzguMTQxIDM2My4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzguMTQxIC0zNjMuMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOC4xNDEgMzYzLjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE5VTEwpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDE2Mi4wNTIgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Mi4wNTIgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjU0MiAzNjMuMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDE4MS40MTkgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MS40MTkgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgxLjQxOSAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oMCkgNS45Nzc1NiBUagotWzEgMCAwIDEgMTg3LjM5NyAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg3LjM5NyAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuODg3IDM2My4yNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDIwMy45OTQgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMy45OTQgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAzLjk5NCAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyMzkuODYgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOS44NiAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDIuMzUxIDM2My4yNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShuKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDI2NC4yMDggMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2NC4yMDggLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY0LjIwOCAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oVW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzMDAuMDc0IDM2My4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDAuMDc0IC0zNjMuMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMi41NjUgMzYzLjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlc3BlY3RpKSAzMC45ODM3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVseSkgMTIuMTc0MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzYxLjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzUxLjE0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzQxLjM0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShwYXJhbWV0ZXJzKSA0My43MDU5IFRqCi1bMSAwIDAgMSAxOTYuNjMxIDM0MS4zNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjYzMSAtMzQxLjM0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk2LjYzMSAzNDEuMzQzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNtYWxsKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMjYuNTE5IDM0MS4zNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI2LjUxOSAtMzQxLjM0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI5LjAxIDM0MS4zNDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI0NS44ODcgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDUuODg3IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDUuODg3IDM0MS4zNDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odmVyYm9zaXR5KSA1My43OTggVGoKLVsxIDAgMCAxIDI5OS42ODUgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTkuNjg1IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTkuNjg1IDM0MS4zNDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLVsxIDAgMCAxIDMxOS44NzkgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTkuODc5IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTkuODc5IDM0MS4zNDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDQzOS40MzEgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzkuNDMxIC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzkuNDMxIDM0MS4zNDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzM5LjE4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI5LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE5LjQyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS00MDIgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tNDAyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDAyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTQwMiBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS00MDIgVEptCi0odG8pIDcuNzUwOSBUagotLTQwMiBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tNDAyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MDEgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDAyIFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTQwMiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTQwMiBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tNDAyIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tNDAyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwMiBUSm0KLShcMDAybGUnKSAxNi4wNDk3IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tNDAyIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTQwMiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS00MDIgVEptCi0oYmVlbikgMTguODA5NCBUagotLTQwMiBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotNzIgMzA3LjQ3IFRkCi0oU28pIDEwLjUyMDUgVGoKLS00OTIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS00OTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00OTIgVEptCi0ocG9zc2libGUpIDMyLjY1NzQgVGoKLS00OTIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotWzEgMCAwIDEgMTY2Ljc5NyAzMDcuNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY2Ljc5NyAtMzA3LjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuNzk3IDMwNy40NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotWzEgMCAwIDEgMjUwLjQ4MyAzMDcuNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUwLjQ4MyAtMzA3LjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTUuMzgxIDMwNy40NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZXR1cm5zKSAyNy42NjYxIFRqCi1bMSAwIDAgMSAyODcuOTQ1IDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODcuOTQ1IC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Ny45NDUgMzA3LjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMTcuODMzIDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTcuODMzIC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMi43MjkgMzA3LjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTQ5MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDkxIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS00OTIgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tNDkyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MzEuMTM1IDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzEuMTM1IC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS4xMzUgMzA3LjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQ5MC45MTEgMzA3LjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5MC45MTEgLTMwNy40N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk1LjgxIDMwNy40NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tNDkyIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotWzEgMCAwIDEgNzIgMjk1LjUxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk1LjUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjk1LjUxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMjk1LjUxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0yOTUuNTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDMuNzMxIDI5NS41MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjk0LjIwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjg0LjI0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjczLjU5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDI3My41OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMjczLjU5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAyNzMuNTk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMjczLjU5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0yNzMuNTk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDI3My41OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAyNzEuNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNjguMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDE2Ny4zNzIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxNjMuNzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjYyLjA3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjYyLjA3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgMjUwLjEyIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpYnJhcnkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obWlzLWNvbXBpbGVkKSA3MS43MzA3IFRqCi05MCAyMzguMTY1IFRkCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgMjI2LjIwOSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSAyMTQuMjU0IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc21hbGwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmVpdGhlcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG5vcikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi05OC40ODc5IDIwMi4yOTkgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgmJikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgMTkwLjM0NCBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHVudXNlZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKCYmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKCFcKDApIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oPD0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oblVudXNlZCkgNDEuODQyOSBUagotLTQyNiBUSm0KLSg8PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9NQVhfVU5VU0VEXCkpIDgzLjY4NTggVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLTkwIDE3OC4zODkgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSAxNjYuNDM0IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZmVycm9yXChmXCkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub256ZXJvKSA0MS44NDI5IFRqCi05MCAxNTQuNDc4IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDE0Mi41MjMgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCAxMzAuNTY4IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMTE4LjYxMyBUZAotKG90aGVyd2lzZS4pIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDcyIDEwMy4wNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtOTMuMTA4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgODEuMTUzMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDgxLjA1MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zMC4yMDJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuOTczN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MS4wNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTEuMDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIzIDIzCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtODEuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKFBvaW50ZXIpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYWJzdHJhY3QpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi05MCA2ODcuNzIxIFRkCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDY2MC4yMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjUwLjI2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM4LjMwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgNjM4LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC02MjguODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA2MjguODQyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNjE2Ljg4NyBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLTkwIDYwNC45MzIgVGQKLShCWjJfYnpDbG9zZSkgNjUuNzUzMiBUagotOTguNDg3OSA1OTIuOTc2IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDU3Ny40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjcuNDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDYuODEzIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuMi4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggNTQ2LjgxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC01NDYuODEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDU0Ni44MTMgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9ielJlYWQpIDEwMy4yOTIgVGoKLVsxIDAgMCAxIDIyMy4xNSA1NDYuODEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1MS4xNSAtMi4zMzI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUzNS4xMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUzNS4xMTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yMDguNTk1IDUzMy4zNzMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMTQuNTcyIDUzNS4xMTYgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTMwNi43NDcgNTMzLjM3MyBUZAotKCopIDUuOTc3NTYgVGoKLTMxMi43MjQgNTM1LjExNiBUZAotKGIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLTM1Ny4wNzcgNTMzLjM3MyBUZAotKCopIDUuOTc3NTYgVGoKLTM2My4wNTUgNTM1LjExNiBUZAotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDUxOS41NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTA5LjYxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDk3LjY1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWFkcykgMjQuMzQ4NiBUagotLTI4NSBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjg0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDEyMi41NjkgNDk3LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjIuNTY5IC00OTcuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjIuNTY5IDQ5Ny42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGVuKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAxNDAuNTAxIDQ5Ny42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQwLjUwMSAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQzLjMzNyA0OTcuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwodW5jb21wcmVzc2VkXCkpIDYzLjYzMTEgVGoKLS0yODUgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI4NCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjg1IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMzM2LjMxOSA0OTcuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNi4zMTkgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzNi4zMTkgNDk3LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzNDIuMjk2IDQ5Ny42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjI5NiAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ1LjEzMiA0OTcuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS0yODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotWzEgMCAwIDEgNDA1LjIwNSA0OTcuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNS4yMDUgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNS4yMDUgNDk3LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidWYpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDQyMy4xMzcgNDk3LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjMuMTM3IC00OTcuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjMuMTM3IDQ5Ny42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTgyOCBUSm0KLShJZikgNi42MzUwOSBUagotLTI4NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODUgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI4NSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yODQgVEptCi0oc3VjY2Vzc2Z1bCwpIDQzLjQzNjkgVGoKLVsxIDAgMCAxIDcyIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyA0ODUuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNy4zNiA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzUzIFRKbQotKHNldCkgMTEuMDY4NCBUagotLTM1MyBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNTMuMzc0IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUzLjM3NCAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUzLjM3NCA0ODUuNzAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxODMuMjYyIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgzLjI2MiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg2Ljc3OCA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi0tMzUzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM1MyBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0zNTMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNTMgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTM1MyBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMzUzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzUzIFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMTIzOCBUSm0KLShJZikgNi42MzUwOSBUagotLTM1MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTMgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTM1MyBUSm0KLShlbmQtb2Ytc3RyZWFtKSA1NS44ODAyIFRqCi0tMzUzIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTM1MyBUSm0KLShkZXRlY3RlZCwpIDM1LjY4NiBUagotWzEgMCAwIDEgNzIgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDczLjc0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMTMuODQzIDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjg0MyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2Ljc5NSA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yOTYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yOTcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjk2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE3Mi4zMjkgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuMzI5IC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMzI5IDQ3My43NDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMjUwLjAzNyA0NzMuNzQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1MC4wMzcgLTQ3My43NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1MC4wMzcgNDczLjc0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjk2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NiBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yOTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTcgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI5NiBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjk2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk2IFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tODk4IFRKbQotKEFsbCkgMTIuNzMyMiBUagotLTI5NyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotWzEgMCAwIDEgNDcwIDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcwIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzAgNDczLjc0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA1MTEuODQzIDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjg0MyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTE0Ljc5NSA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLTcyIDQ2MS43OTEgVGQKLShkZW5vdGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQ2MS42OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1MS43MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS44NzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTMxLjc3NiA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNC4yMjQgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjQ2IFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotWzEgMCAwIDEgMTgxLjE5MyA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MS4xOTMgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS4xOTMgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsZW4pIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDE5OS4xMjYgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTkuMTI2IC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuNTc1IDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMsKSAyMy41MjE3IFRqCi0tMjQ3IFRKbQotKHVubGVzcykgMjQuOTA2NSBUagotLTI0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTI0NiBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yNDYgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNDUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNDYgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLS0yNDYgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNDYgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNDYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNDUgVEptCi0ob2NjdXJzLikgMjguNDkzIFRqCi0tNjE3IFRKbQotKEJlY2F1c2UpIDMzLjE5NTQgVGoKLS0yNDYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDYgVEptCi0odGhpcywpIDE2Ljg4NjYgVGoKLS0yNDcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLTcyIDQyNy45MTggVGQKLShpcykgNi42NDUwNSBUagotLTIzMSBUSm0KLShwb3NzaWJsZSkgMzIuNjU3NCBUagotLTIzMSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjMxIFRKbQotKGRldGVjdCkgMjMuNzkwNyBUagotLTIzMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzEgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjMxIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjMyIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yMzEgVEptCi0ob2JzZXJ2aW5nKSAzOS4yOTI1IFRqCi0tMjMxIFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTIzMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzEgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjMxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjMxIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yMzEgVEptCi0ocmV0dXJuZWQpIDMzLjE5NTQgVGoKLS0yMzEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzEgVEptCi0obGVzcykgMTQuOTQzOSBUagotLTIzMSBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjMyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzMSBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yMzEgVEptCi0ocmVxdWVzdGVkLikgNDAuNjY3MyBUagotNzIgNDE1Ljk2MyBUZAotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0zMDkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjk3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk4IFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYXJkZWQpIDIyLjEyNjkgVGoKLS0yOTcgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yOTcgVEptCi0oaW5hZHZpc2FibGU7KSA0OC4xNDkyIFRqCi0tMzIxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5OCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yOTcgVEptCi0oaW5zdGVhZCkgMjguMjI0IFRqCi0tMjk3IFRKbQotKGNoZWNrKSAyMy4yMzI4IFRqCi1bMSAwIDAgMSAzNjAuNjMxIDQxNS45NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjYzMSAtNDE1Ljk2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjYzMSA0MTUuOTYzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDQwMi40NzUgNDE1Ljk2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDIuNDc1IC00MTUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDUuNDM3IDQxNS45NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yOTcgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yOTggVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhdGNoKSAxNi41OTc3IFRqCi0tMjk4IFRKbQotKG91dCkgMTIuNzMyMiBUagotLTI5NyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDcyIDQwNC4wMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwNC4wMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQwNC4wMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSA0MDQuMDA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0OS43MDkgLTQwNC4wMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0OS43MDkgNDA0LjAwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0MDIuNjk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTIuNzM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSW50ZXJuYWxseSkgMzguNzM0NiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTE3LjU0MSAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE3LjU0MSAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTcuNTQxIDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNzcuMzE3IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzcuMzE3IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS43ODYgMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvcGllcykgMjUuNDU0NCBUagotLTQ0OSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tNDQ4IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS00NDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQ4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00NDkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDQ4IFRKbQotKGluKSA3Ljc1MDkgVGoKLS00NDkgVEptCi0oY2h1bmtzKSAyOC4yMjQgVGoKLS00NDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00NDggVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgNDE5LjYwMiAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE5LjYwMiAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuNjAyIDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NQVhfVU5VU0VEKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA0OTcuMzEgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ny4zMSAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDEuNzc4IDM4Mi4wOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tNDQ5IFRKbQotKGJlLSkgMTIuNzIyMiBUagotNzIgMzcwLjEzNSBUZAotKGZvcmUpIDE2LjAzOTggVGoKLS00MTQgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTQxNCBUSm0KLShpdC4pIDguMDI5ODYgVGoKLS0xNjA1IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tNDE1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQxNCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS00MTQgVEptCi0oY29udGFpbnMpIDMzLjIwNTMgVGoKLS00MTQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTQxNCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tNDE1IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS00MTQgVEptCi0oc3RyaWN0bHkpIDI3LjY3NjEgVGoKLS00MTQgVEptCi0obmVlZGVkKSAyOC4yMTQxIFRqCi0tNDE0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MTQgVEptCi0ocmVhY2gpIDIxLjU2OSBUagotLTQxNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MTUgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTQxNCBUSm0KLShlbmQtb2Ytc3RyZWFtLCkgNTguMzcwOSBUagotWzEgMCAwIDEgNzIgMzU4LjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1OC4xOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDM1OC4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNzc2IC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNC43NDkgMzU4LjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yOTggVEptCi0oYWxtb3N0KSAyNi41NzAzIFRqCi0tMjk5IFRKbQotKGNlcnRhaW5seSkgMzQuODU5MSBUagotLTI5OCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjk5IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI5OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTggVEptCi0odHJhaWxpbmcpIDI4Ljc4MiBUagotLTI5OCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjk5IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI5OCBUSm0KLShzaWduYWxsaW5nKSAzOS4zMDI1IFRqCi1bMSAwIDAgMSA0MTMuMTYyIDM1OC4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTMuMTYyIC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMy4xNjIgMzU4LjE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VORCkgODkuNjYzNCBUagotWzEgMCAwIDEgNTAyLjgyNiAzNTguMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAyLjgyNiAtMzU4LjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDIuODI2IDM1OC4xOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTk3IFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTI5OCBUSm0KLShjb2wtKSAxNS40OTE4IFRqCi03MiAzNDYuMjI0IFRkCi0obGVjdCkgMTQuMzg2IFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjQzIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI0MiBUSm0KLSh1bnVzZWQpIDI4LjIyNCBUagotLTI0MiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjQyIFRKbQotKG9uY2UpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDIwOC43NTkgMzQ2LjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguNzU5IC0zNDYuMjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNzU5IDM0Ni4yMjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRU5EKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAyOTguNDIzIDM0Ni4yMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk4LjQyMyAtMzQ2LjIyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAwLjgzNSAzNDYuMjI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhcykgMTMuMjgwMSBUagotLTI0MiBUSm0KLShhcHBlYXJlZCwpIDM4LjQ0NTcgVGoKLS0yNDQgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNzQuMjAxIDM0Ni4yMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc0LjIwMSAtMzQ2LjIyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc0LjIwMSAzNDYuMjI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDQ4Ny43NzUgMzQ2LjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODcuNzc1IC0zNDYuMjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTAuMTg4IDM0Ni4yMjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW1tZWRpYXRlbHkpIDQ5LjgxMyBUagotNzIgMzM0LjI2OSBUZAotKGJlZm9yZSkgMjUuNDQ0NSBUagotWzEgMCAwIDEgOTkuOTM1IDMzNC4yNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTkuOTM1IC0zMzQuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05OS45MzUgMzM0LjI2OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4OS41OTkgMzM0LjI2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODkuNTk5IC0zMzQuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuNTk5IDMzNC4yNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzMyLjk1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIyLjk5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzEyLjM1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDMxMi4zNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMzEyLjM1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAzMTIuMzUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMzEyLjM1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0zMTIuMzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDMxMi4zNTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAzMTAuMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjU5LjM0M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyNCAyNAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTI4NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjYzLjAxNCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDI1OS40MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obGVuKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotOTAgNjg3LjcyMSBUZAotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvcGVuZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLTkwIDY2My44MTEgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSA2NTEuODU2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlcmUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ocmVhZGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUpIDIzLjkxMDIgVGoKLTkwIDYzOS45IFRkCi0oQlpfVU5FWFBFQ1RFRF9FT0YpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNjI3Ljk0NSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZW5kZWQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oYmVmb3JlKSAzNS44NjU0IFRqCi05OC40ODc5IDYxNS45OSBUZAotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsb2dpY2FsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGVuZC1vZi1zdHJlYW0pIDc3LjcwODMgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi05MCA2MDQuMDM1IFRkCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotOTguNDg3OSA1OTIuMDggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50ZWdyaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotOTAgNTgwLjEyNSBUZAotKEJaX0RBVEFfRVJST1JfTUFHSUMpIDExMy41NzQgVGoKLTk4LjQ4NzkgNTY4LjE2OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzdHJlYW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZG9lcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVnaW4pIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocmVxdWlzaXRlKSA1My43OTggVGoKLS00MjYgVEptCi0oaGVhZGVyKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGJ5dGVzKSAyOS44ODc4IFRqCi05OC40ODc5IDU1Ni4yMTQgVGQKLShcKGllLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiemlwMikgMjkuODg3OCBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGZpbGVcKS4pIDM1Ljg2NTQgVGoKLS04NTIgVEptCi0oVGhpcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShyZWFsbHkpIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTQ0LjI1OSBUZAotKGEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oc3BlY2lhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShjYXNlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX0RBVEFfRVJST1IuKSA4My42ODU4IFRqCi05MCA1MzIuMzA0IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDUyMC4zNDkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNTA4LjM5NCBUZAotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLTk4LjQ4NzkgNDk2LjQzOCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsb2dpY2FsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGVuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJlYW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkLikgNTMuNzk4IFRqCi05MCA0ODQuNDgzIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNDcyLjUyOCBUZAotKG90aGVyd2lzZS4pIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDcyIDQ1Ni45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ3LjAyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM1LjA2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDQzNC45NjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC43NzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDU5Ljc3NTggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA1Ni4xODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDI1LjYwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDI1LjYwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShudW1iZXIpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnl0ZXMpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ocmVhZCkgMjMuOTEwMiBUagotOTguNDg3OSA0MTMuNjQ5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi05MCA0MDEuNjk0IFRkCi0odW5kZWZpbmVkKSA1My43OTggVGoKLTk4LjQ4NzkgMzg5LjczOSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzNzQuMTk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM2NC4yMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1Mi4yNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsbykgMTcuNzEzNSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWN0aW9uczopIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDcyIDM1Mi4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTg0LjY4MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggODMuNjg2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDgwLjA5OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zNDIuODE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzNDIuODE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGNvbGxlY3QpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotOTguNDg3OSAzMzAuODU5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotOTAgMzE4LjkwNCBUZAotKGNvbGxlY3QpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZEdldFVudXNlZCkgMTEzLjU3NCBUagotOTguNDg3OSAzMDYuOTQ5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TRVFVRU5DRV9FTkQpIDg5LjY2MzQgVGoKLTkwIDI5NC45OTQgVGQKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgMjgzLjAzOSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAyNjcuNDk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjU3LjUzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjM2Ljg3NiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjMuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDIzNi44NzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjM2Ljg3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyMzYuODc2IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxOTYuMjU2IFRqCi1bMSAwIDAgMSAzMTYuMTE0IDIzNi44NzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ0LjExNCAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTIyNS4xNzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDIyNS4xNzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkR2V0VW51c2VkXCgpIDExOS41NTEgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNTkuODgzIDIyMy40MzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzAuMTA0IDIyNS4xNzggVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTM2Mi4yNzggMjIzLjQzNSBUZAotKCopIDUuOTc3NTYgVGoKLTM2OC4yNTYgMjI1LjE3OCBUZAotKGIsKSAxMS45NTUxIFRqCi0yMDAuMzQzIDIxMy4yMjMgVGQKLSh2b2lkKSAyMy45MTAyIFRqCi0yMjQuMjU0IDIxMS40OCBUZAotKCoqKSAxMS45NTUxIFRqCi0yNDAuNDUzIDIxMy4yMjMgVGQKLSh1bnVzZWQsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMzA0LjQ3MyAyMTEuNDggVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMTQuNjk0IDIxMy4yMjMgVGQKLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMTk3LjY4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODcuNzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzUuNzY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybnMpIDMwLjk5MzYgVGoKLS00MzUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQzNSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTQzNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS00MzUgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTQzNSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tNDM1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQzNSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDM1IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQzNSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS00MzUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tNDM1IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTQzNSBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS00MzUgVEptCi0odG8pIDcuNzUwOSBUagotLTQzNSBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS00MzUgVEptCi0odG8pIDcuNzUwOSBUagotLTQzNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MzUgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTQzNSBUSm0KLShlbmQtb2Ytc3RyZWFtLikgNTguMzcwOSBUagotWzEgMCAwIDEgNzIgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTYzLjgwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTYyLjA2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi03Ny45Nzc2IDE2My44MDkgVGQKLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDExMy44NDMgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC0xNjMuODA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTcuMiAxNjMuODA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzM3IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTMzNyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLShhZGRyZXNzKSAyOS44Nzc4IFRqCi0tMzM3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTM1OSBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjY5LjA4OSAxNjMuODA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OS4wODkgLTE2My44MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OS4wODkgMTYyLjA2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi0yNzUuMDY3IDE2My44MDkgVGQKLShuVW51c2VkKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzMTYuOTEgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuOTEgLTE2My44MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMC4yNjcgMTYzLjgwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMzM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0zMzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMzcgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi1bMSAwIDAgMSA0MjcuMjQ3IDE2My44MDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI3LjI0NyAtMTYzLjgwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI3LjI0NyAxNjIuMDY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTQzMy4yMjUgMTYzLjgwOSBUZAotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDQ3NS4wNjggMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzUuMDY4IC0xNjMuODA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzguNDI1IDE2My44MDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTMzNyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMzNyBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zMzcgVEptCi0odG8pIDcuNzUwOSBUagotLTMzNyBUSm0KLShhKSA0LjQyMzM5IFRqCi03MiAxNTEuODUzIFRkCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGJldHdlZW4pIDMzLjE5NTQgVGoKLVsxIDAgMCAxIDEzMS41MDYgMTUxLjg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNTA2IC0xNTEuODUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzEuNTA2IDE1MS44NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oMCkgNS45Nzc1NiBUagotWzEgMCAwIDEgMTM3LjQ4NCAxNTEuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy40ODQgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOS45NzUgMTUxLjg1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMTU2Ljg1MSAxNTEuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ni44NTEgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ni44NTEgMTUxLjg1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NQVhfVU5VU0VEKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyMzQuNTYgMTUxLjg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuNTYgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNy4wNSAxNTEuODUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluY2x1c2kpIDI2LjU3MDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLVsxIDAgMCAxIDcyIDE1MC41NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0MC41ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyOS45MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTg4MiBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTg4MyBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS04ODIgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTg4MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTg4MiBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS04ODMgVEptCi0ob25jZSkgMTguODA5NCBUagotWzEgMCAwIDEgMjcxLjMzMiAxMjkuOTM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3MS4zMzIgLTEyOS45MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MS4zMzIgMTI5LjkzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAzMzEuMTA4IDEyOS45MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMxLjEwOCAtMTI5LjkzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM5LjkgMTI5LjkzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShoYXMpIDEzLjI4MDEgVGoKLS04ODIgVEptCi0oc2lnbmFsbGVkKSAzNS45NzQ5IFRqCi1bMSAwIDAgMSA0MDYuNzM3IDEyOS45MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjczNyAtMTI5LjkzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjczNyAxMjkuOTM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDQ4NC40NDYgMTI5LjkzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODQuNDQ2IC0xMjkuOTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTMuMjMxIDEyOS45MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tODgyIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotWzEgMCAwIDEgNzIgMTE3Ljk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTcuOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDExNy45OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE2MS42NjQgMTE3Ljk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42NjQgLTExNy45OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjY2NCAxMTcuOTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTE2LjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMDYuNzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA5Ni4wNjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgOTYuMDYyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC05Ni4wNjI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDk2LjA2MjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyA5Ni4wNjI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTk2LjA2MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgOTYuMDYyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDkzLjkwNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00My4wNTM5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI1IDI1Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTI5LjE1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxMDcuNTk3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTA0LjAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA2OTkuNjc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY4Ny43MjEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTkwIDY3NS43NjYgVGQKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTguNDg3OSA2NjMuODExIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc2lnbmFsbGVkKSA1My43OTggVGoKLTk4LjQ4NzkgNjUxLjg1NiBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9wZW5lZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotOTAgNjM5LjkgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA2MjcuOTQ1IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDYxMi40MDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAyLjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTkwLjQ4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgNTkwLjM4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01ODEuMDIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1ODEuMDIxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgNzIgNTY1LjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTU1LjUxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTM0Ljg1OCBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjQuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDUzNC44NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNTM0Ljg1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA1MzQuODU4IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDE1NC45MzkgVGoKLVsxIDAgMCAxIDI3NC43OTcgNTM0Ljg1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDIuNzk3IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTIzLjE2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTIzLjE2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI0NC40NiA1MjEuNDE3IFRkCi0oKikgNS45Nzc1NiBUagotMjUwLjQzOCA1MjMuMTYxIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zNDIuNjEyIDUyMS40MTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDguNTkgNTIzLjE2MSBUZAotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA1MDcuNjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4NS43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVsZWFzZXMpIDM0Ljg1OTEgVGoKLS00MzAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00MjkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tNDMwIFRKbQotKHBlcnRhaW5pbmcpIDQwLjM5ODMgVGoKLS00MjkgVEptCi0odG8pIDcuNzUwOSBUagotLTQzMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MjkgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQzMCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDMwNC4zNTIgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDQuMzUyIC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDQuMzUyIDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYikgNS45Nzc1NiBUagotWzEgMCAwIDEgMzEwLjMzIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEwLjMzIC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuMzMgNDg1LjcwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMjEuMjc2IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIxLjI3NiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIxLjI3NiA0ODUuNzAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgNDEwLjk0IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjk0IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTUuMjIgNDg1LjcwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzKSAxOC4yNjE0IFRqCi0tNDMwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTQyOSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ3My40MzggNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzMuNDM4IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzMuNDM4IDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmNsb3NlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA1MDkuMzA0IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA5LjMwNCAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTEzLjU4NCA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG9uKSA5Ljk2MjYgVGoKLS00MzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA0NzMuNzQ2IFRkCi0odW5kZXJseWluZykgNDMuMTY3OSBUagotLTI2NCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjQgVEptCi0oaGFuZGxlLCkgMjkuMDUwOSBUagotLTI2NyBUSm0KLShzbykgOC44NTY3NSBUagotLTI2NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNjQgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjY0IFRKbQotKGRvKSA5Ljk2MjYgVGoKLS0yNjQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI2NCBUSm0KLSh5b3Vyc2VsZikgMzIuNjQ3NCBUagotLTI2NCBUSm0KLShpZikgNi4wODcxNSBUagotLTI2MyBUSm0KLShhcHByb3ByaWF0ZS4pIDQ3Ljg2MDMgVGoKLVsxIDAgMCAxIDM0OC42NTMgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDguNjUzIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDguNjUzIDQ3My43NDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA0MzguMzE3IDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM4LjMxNyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQwLjk0NiA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI2NCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI2NCBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS0yNjQgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NCBUSm0KLShjbGVhbikgMjEuMDIxMSBUagotNzIgNDYxLjc5MSBUZAotKHVwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oc2l0dWF0aW9ucy4pIDQwLjY4NzMgVGoKLVsxIDAgMCAxIDcyIDQ1OS42MzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ0OS42NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0oYXNzaWdubWVudHMpIDQ4LjcwNzIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTY5LjE0NCA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS4xNDQgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OS4xNDQgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMTAuOTg3IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjk4NyAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjk4NyA0MzkuODczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNzIgNDM3LjcxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00MjguMzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0MjguMzUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDQxNi4zOTYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvcGVuZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpPcGVuV3JpdGUpIDg5LjY2MzQgVGoKLTkwIDQwNC40NDEgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSAzOTIuNDg2IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDM3Ni45NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzY2Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzU1LjAyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgMzU0LjkyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zNDUuNTYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzNDUuNTYyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5vbmUpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDcyIDMzMC4wMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMyMC4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5OS4zOTkgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC41LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAyOTkuMzk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTI5OS4zOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMjk5LjM5OSBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6V3JpdGVPcGVuKSAxNTQuOTM5IFRqCi1bMSAwIDAgMSAyNzQuNzk3IDI5OS4zOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAyLjc5NyAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI4Ny43MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI4Ny43MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0xMzAuMTA5IDI4NS45NTggVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzYuMDg3IDI4Ny43MDIgVGQKLShCWjJfYnpXcml0ZU9wZW5cKCkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjU4LjE0OSAyODUuOTU4IFRkCi0oKikgNS45Nzc1NiBUagotMjY0LjEyNyAyODcuNzAyIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oRklMRSkgMjMuOTEwMiBUagotMzQ0LjM0NiAyODUuOTU4IFRkCi0oKikgNS45Nzc1NiBUagotMzUwLjMyMyAyODcuNzAyIFRkCi0oZiwpIDExLjk1NTEgVGoKLTE5Ni4wOTkgMjc1Ljc0NiBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrLCkgODMuNjg1OCBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5LCkgNTkuNzc1NiBUagotMTk2LjA5OSAyNjMuNzkxIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyNDguMjQ5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzOC4yODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyNi4zMzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJlcGFyZSkgMzAuNDI1OCBUagotLTI2OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY5IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMjY4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNjkgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2OCBUSm0KLShoYW5kbGUpIDI2LjU2MDMgVGoKLVsxIDAgMCAxIDI2Mi43MiAyMjYuMzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Mi43MiAtMjI2LjMzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYyLjcyIDIyNi4zMzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZikgNS45Nzc1NiBUagotWzEgMCAwIDEgMjY4LjY5OCAyMjYuMzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OC42OTggLTIyNi4zMzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OC42OTggMjI2LjMzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNzQuODI5IDIyNi4zMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc0LjgyOSAtMjI2LjMzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc0LjgyOSAyMjYuMzMyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGYpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDI4MC44MDcgMjI2LjMzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODAuODA3IC0yMjYuMzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODMuNDgxIDIyNi4zMzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjY4IFRKbQotKHJlZmVyKSAxOC43OTk0IFRqCi0tMjY5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjggVEptCi0oYSkgNC40MjMzOSBUagotLTI2OSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjggVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNjkgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjY4IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNjkgVEptCi0ob3BlbmVkKSAyOC43NzIgVGoKLS0yNjggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjY5IFRKbQotKHdyaXRpbmcsKSAzMS4yNzI2IFRqCi0tMjczIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY4IFRKbQotKGZvcikgMTEuNjE2NCBUagotNzIgMjE0LjM3NyBUZAotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShpbmRpY2F0b3IpIDM1LjQxNyBUagotLTI1MCBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTc2LjU3NyAyMTQuMzc2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni41NzcgLTIxNC4zNzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni41NzcgMjE0LjM3NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZXJyb3JcKGZcKSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyMzAuMzc1IDIxNC4zNzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMwLjM3NSAtMjE0LjM3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMwLjM3NSAyMTQuMzc2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpaXMpIDkuOTYyNiBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oc2V0LikgMTMuNTU5MSBUagotWzEgMCAwIDEgNzIgMjEyLjU5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjAyLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTIyMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjQgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTIyMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyNCBUSm0KLShwYXJhbWV0ZXJzKSA0My43MDU5IFRqCi1bMSAwIDAgMSAxOTUuMzA2IDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk1LjMwNiAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk1LjMwNiAxOTIuNDU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI3My4wMTUgMTkyLjQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzMuMDE1IC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzMuMDE1IDE5Mi40NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjc3Ljc4NCAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Ny43ODQgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Ny43ODQgMTkyLjQ1OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMzMxLjU4MyAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS41ODMgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMy44MDggMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzUwLjQyIDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUwLjQyIC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTAuNDIgMTkyLjQ1OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0MTAuMTk2IDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjE5NiAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEwLjE5NiAxOTIuNDU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yMjkgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSA0MjkuOTEzIDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI5LjkxMyAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI5LjkxMyAxOTIuNDU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNTM3LjUwOSAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxOTAuMzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODAuMzM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzAuNTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbCkgMTIuNzMyMiBUagotLTM4MiBUSm0KLShyZXF1aXJlZCkgMzMuMTk1NCBUagotLTM4MiBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0zODIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zODIgVEptCi0oYWxsb2NhdGVkKSAzNS45NjUgVGoKLS0zODMgVEptCi0oYXQpIDcuMTkzIFRqCi0tMzgyIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTM4MiBUSm0KLShzdGFnZSwpIDIyLjk2MzggVGoKLS00MTUgVEptCi0oc28pIDguODU2NzUgVGoKLS0zODIgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zODIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzgyIFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTM4MiBUSm0KLShjb21wbGV0ZXMpIDQwLjM5ODMgVGoKLS0zODIgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MjQuNjkxIDE3MC41NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI0LjY5MSAtMTcwLjU0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI0LjY5MSAxNzAuNTQxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgNDk2LjQyMiAxNzAuNTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni40MjIgLTE3MC41NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMC4yMjggMTcwLjU0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0zODIgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTcyIDE1OC41ODYgVGQKLShzaWduYWxsZWQpIDM1Ljk3NDkgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0yNTAgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDIwMy43MTUgMTU4LjU4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDMuNzE1IC0xNTguNTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuNzE1IDE1OC41ODYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDI2OS40NjggMTU4LjU4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjkuNDY4IC0xNTguNTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjkuNDY4IDE1OC41ODYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTU2LjQyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ2LjQ2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTM2LjY2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDEzNi42NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMTM2LjY2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAxMzYuNjY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMTM2LjY2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0xMzYuNjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDEzNi42NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAxMzQuNTExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODMuNjU5M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMikgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyNiAyNgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTE2NS4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTQzLjQ2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDEzOS44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0NPTkZJR19FUlJPUikgODkuNjYzNCBUagotOTguNDg3OSA2OTkuNjc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpYnJhcnkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obWlzLWNvbXBpbGVkKSA3MS43MzA3IFRqCi05MCA2ODcuNzIxIFRkCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjc1Ljc2NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSA2NjMuODExIFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2tTaXplMTAwaykgNzcuNzA4MyBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2tTaXplMTAwaykgNzcuNzA4MyBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDkpIDUuOTc3NTYgVGoKLTkwIDY1MS44NTYgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSA2MzkuOSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGZlcnJvclwoZlwpKSA1My43OTggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm9uemVybykgNDEuODQyOSBUagotOTAgNjI3Ljk0NSBUZAotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotOTguNDg3OSA2MTUuOTkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA2MDQuMDM1IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNTkyLjA4IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDU3Ni41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTY2LjU3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU0LjYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgNTU0LjUyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01NDUuMTU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1NDUuMTU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKFBvaW50ZXIpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYWJzdHJhY3QpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi05OC40ODc5IDUzMy4yMDEgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi05MCA1MjEuMjQ1IFRkCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSA1MDkuMjkgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNDkzLjc0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODMuNzg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzEuODMxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA0NzEuNzMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODQuNjgyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA4My42ODYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgODAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTQ2Mi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDQ2Mi4zNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLTk4LjQ4NzkgNDUwLjQxMSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNDM4LjQ1NiBUZAotKFwoeW91KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGNvdWxkKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGdvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGRpcmVjdGx5KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaMl9ieldyaXRlQ2xvc2UsKSAxMDEuNjE5IFRqCi0tNDI2IFRKbQotKGJ1dCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh0aGlzKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHdvdWxkKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGJlKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHByZXR0eSkgMzUuODY1NCBUagotNDg1LjUwNSA0MzQuMjEyIFRkCi0vRjU2NF8wIDkuOTYyNiBUZgotKCApIDkuOTYyNiBUagotNDkzLjgwOCA0MzQuMjEyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKC0pIDIuNzY5NiBUagotOTAgNDI2LjUwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwb2ludGxlc3NcKSkgNTkuNzc1NiBUagotOTAgNDE0LjU0NiBUZAotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotOTguNDg3OSA0MDIuNTkgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzg3LjA0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3Ny4wODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1Ni40MjggVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC42LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAzNTYuNDI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTM1Ni40MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMzU2LjQyOCBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6V3JpdGUpIDExMy42MjIgVGoKLVsxIDAgMCAxIDIzMy40OCAzNTYuNDI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS40OCAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM0NC43M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzQ0LjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yMjAuNTUgMzQyLjk4NyBUZAotKCopIDUuOTc3NTYgVGoKLTIyNi41MjggMzQ0LjczIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zMTguNzAyIDM0Mi45ODcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMjQuNjc5IDM0NC43MyBUZAotKGIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLTM2OS4wMzMgMzQyLjk4NyBUZAotKCopIDUuOTc3NTYgVGoKLTM3NS4wMSAzNDQuNzMgVGQKLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsZW4pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAzMjkuMTg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxOS4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMwNy4yNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBYnNvcmJzKSAzMy4yMDUzIFRqCi1bMSAwIDAgMSAxMDcuNjk2IDMwNy4yN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDcuNjk2IC0zMDcuMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNy42OTYgMzA3LjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxlbikgMTcuOTMyNyBUagotWzEgMCAwIDEgMTI1LjYyOSAzMDcuMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI1LjYyOSAtMzA3LjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjguMTE5IDMwNy4yNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotWzEgMCAwIDEgMjE0LjU0NCAzMDcuMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE0LjU0NCAtMzA3LjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNTQ0IDMwNy4yNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidWYpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDIzMi40NzcgMzA3LjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMi40NzcgLTMwNy4yN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMyLjQ3NyAzMDcuMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVudHVhbGx5KSAzMi4wOTk1IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh3cml0dGVuKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlLikgMTUuMjIyOSBUagotWzEgMCAwIDEgNzIgMzA1LjExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk1LjE1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg1LjM1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDI4NS4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMjg1LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAyODUuMzUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMjg1LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0yODUuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDI4NS4zNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAyODMuMTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTA4LjU5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxMDcuNTk3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTA0LjAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjczLjgzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjczLjgzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSAyNjEuODc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ1ZikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLTkwIDI0OS45MjEgVGQKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTguNDg3OSAyMzcuOTY1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ob3BlbmVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLTkwIDIyNi4wMSBUZAotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi05OC40ODc5IDIxNC4wNTUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGVyZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3cml0aW5nKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUuKSAyOS44ODc4IFRqCi05MCAyMDIuMSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDE5MC4xNDUgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMTc0LjYwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE2NC42NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTQzLjk4MiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjcuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDE0My45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMTQzLjk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAxNDMuOTgyIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSAxNjUuMjY4IFRqCi1bMSAwIDAgMSAyODUuMTI2IDE0My45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEzLjEyNiAtMi4zMzI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOTAuNzk3NV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMykgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyNyAyNwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTE2NS4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTQzLjQ2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDEzOS44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGVDbG9zZVwoKSAxMDEuNjE5IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjQ2LjE5NCA3MDkuODg4IFRkCi0oKikgNS45Nzc1NiBUagotMjUyLjE3MSA3MTEuNjMxIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zNDAuMTAyIDcwOS44ODggVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNTAuMzIzIDcxMS42MzEgVGQKLShmLCkgMTEuOTU1MSBUagotMTg3LjYxMSA2OTkuNjc2IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFiYW5kb24sKSA0Ny44MjA1IFRqCi0xODcuNjExIDY4Ny43MjEgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI1Ny42MDkgNjg1Ljk3OCBUZAotKCopIDUuOTc3NTYgVGoKLTI2Ny44MyA2ODcuNzIxIFRkCi0obmJ5dGVzX2luLCkgNTkuNzc1NiBUagotMTg3LjYxMSA2NzUuNzY2IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNTcuNjA5IDY3NC4wMjMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNjcuODMgNjc1Ljc2NiBUZAotKG5ieXRlc19vdXQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCA2NTEuODU2IFRkCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZUNsb3NlNjRcKCkgMTEzLjU3NCBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI1OC4xNDkgNjUwLjExMiBUZAotKCopIDUuOTc3NTYgVGoKLTI2NC4xMjcgNjUxLjg1NiBUZAotKGJ6ZXJyb3IsKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMzUyLjA1NyA2NTAuMTEyIFRkCi0oKikgNS45Nzc1NiBUagotMzYyLjI3OCA2NTEuODU2IFRkCi0oZiwpIDExLjk1NTEgVGoKLTE5Ni4wOTkgNjM5LjkgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWJhbmRvbiwpIDQ3LjgyMDUgVGoKLTE5Ni4wOTkgNjI3Ljk0NSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA2MjYuMjAyIFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA2MjcuOTQ1IFRkCi0obmJ5dGVzX2luX2xvMzIsKSA4OS42NjM0IFRqCi0xOTYuMDk5IDYxNS45OSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA2MTQuMjQ3IFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA2MTUuOTkgVGQKLShuYnl0ZXNfaW5faGkzMiwpIDg5LjY2MzQgVGoKLTE5Ni4wOTkgNjA0LjAzNSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA2MDIuMjkyIFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA2MDQuMDM1IFRkCi0obmJ5dGVzX291dF9sbzMyLCkgOTUuNjQxIFRqCi0xOTYuMDk5IDU5Mi4wOCBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA1OTAuMzM2IFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA1OTIuMDggVGQKLShuYnl0ZXNfb3V0X2hpMzIpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA1NzYuNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Ni41NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU1NC42MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDb21wcmVzc2VzKSA0OC4xNDkyIFRqCi0tNDAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNDAyIFRKbQotKFwwMDN1c2hlcykgMjcuNjc2MSBUagotLTQwMyBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDAzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwMiBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDAzIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQwMyBUSm0KLShhKSA0LjQyMzM5IFRqCi0xIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tNDAzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00MDMgVEptCi0oc28pIDguODU2NzUgVGoKLS00MDIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXIpIDcuNzQwOTQgVGoKLS00MDMgVEptCi0oc3VwcGxpZWQpIDMzLjc2MzMgVGoKLS00MDMgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMzg0LjE1MiA1NTQuNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg0LjE1MiAtNTU0LjYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuMTUyIDU1NC42MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDQ5LjkwNiA1NTQuNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ5LjkwNiAtNTU0LjYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDkuOTA2IDU1NC42MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzY4IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTQwMyBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tNDAyIFRKbQotKGVuZC1vZi0pIDI5LjMxOTkgVGoKLTcyIDU0Mi42NjUgVGQKLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zNTIgVEptCi0obWFyaykgMjAuNDczMSBUagotMTAgVEptCi0oZXJzKSAxMS42MTY0IFRqCi0tMzUyIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM1MyBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMzUyIFRKbQotKHdyaXR0ZW4sKSAzMC43MTQ3IFRqCi0tMzc4IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzUyIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0zNTIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0zNTIgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzAwLjQ1NiA1NDIuNjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMC40NTYgLTU0Mi42NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMC40NTYgNTQyLjY2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMzY2LjIwOSA1NDIuNjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2Ni4yMDkgLTU0Mi42NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2OS43MTggNTQyLjY2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0zNTIgVEptCi0oaWxsZSkgMTIuNzMyMiBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFsLikgOS42ODM2NSBUagotLTEyMzQgVEptCi0oQWxsKSAxMi43MzIyIFRqCi0tMzUyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTM1MiBUSm0KLShhc3NvY2lhdGVkKSA0MC45NDYzIFRqCi0tMzUyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLTcyIDUzMC43MSBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTUxLjQxMSA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUxLjQxMSAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTEuNDExIDUzMC43MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNTcuMzg5IDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTcuMzg5IC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS44NzkgNTMwLjcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHJlbGVhc2VkLikgMzUuMTI4MSBUagotWzEgMCAwIDEgMjA3LjIzMSA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA3LjIzMSAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMjMxIDUzMC43MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZmx1c2gpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI0My4wOTcgNTMwLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My4wOTcgLTUzMC43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1LjU4NyA1MzAuNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oY2FsbGVkKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi1bMSAwIDAgMSA0MjIuNzcxIDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjIuNzcxIC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMi43NzEgNTMwLjcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZjbG9zZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDU4LjYzNiA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU4LjYzNiAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTguNjM2IDUzMC43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01MCBUSm0KLShkLikgNy40NzE5NSBUagotWzEgMCAwIDEgNzIgNTI4LjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE4LjU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MDguNzkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSA4MS41NzQzIDUwOC43OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODEuNTc0MyAtNTA4Ljc5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODEuNTc0MyA1MDguNzkyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMTc3LjIxNiA1MDguNzkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny4yMTYgLTUwOC43OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MC4xNTUgNTA4Ljc5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI5NSBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS0yOTUgVEptCi0odG8pIDcuNzUwOSBUagotLTI5NSBUSm0KLShjbGVhbikgMjEuMDIxMSBUagotLTI5NSBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjk1IFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjk1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjk1IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NSBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjk1IFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI5NSBUSm0KLShpcykgNi42NDUwNSBUagotLTI5NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk1IFRKbQotKHJlbGVhc2UpIDI3LjY1NjIgVGoKLS0yOTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTg5MSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yOTUgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNzIgNDk2LjgzNyBUZAotKHJlY29yZHMpIDI5LjMxOTkgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjg5IFRKbQotKGNvZGVzKSAyMi42ODQ4IFRqCi0tMjg5IFRKbQotKGlzc3VlZCkgMjQuOTA2NSBUagotLTI4OSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjg5IFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXMpIDIxLjU4OSBUagotLTI4OSBUSm0KLShjYWxscywpIDIwLjc1MjEgVGoKLS0yOTkgVEptCi0oc28pIDguODU2NzUgVGoKLS0yODkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg5IFRKbQotKHNpdHVhdGlvbikgMzQuMzIxMiBUagotLTI4OSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjg5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjg5IFRKbQotKGRldGVjdGVkKSAzMy4xOTU0IFRqCi0tMjg5IFRKbQotKGF1dG9tYXRpY2FsbHkpIDU0LjIzNjQgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS00MjcgVEptCi0oVGhlcmUpIDIzLjIzMjggVGoKLS0yODkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODkgVEptCi0obm8pIDkuOTYyNiBUagotLTI4OSBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi03MiA0ODQuODgyIFRkCi0odG8pIDcuNzUwOSBUagotLTI2MyBUSm0KLShjb21wbGV0ZSkgMzYuNTIyOSBUagotLTI2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNjMgVEptCi0ob3BlcmF0aW9uLCkgNDAuMTE5NCBUagotLTI2NSBUSm0KLShub3IpIDEzLjI4MDEgVGoKLS0yNjMgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjU4LjMwOCA0ODQuODgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OC4zMDggLTQ4NC44ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OC4zMDggNDg0Ljg4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZmx1c2gpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI5NC4xNzMgNDg0Ljg4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTQuMTczIC00ODQuODgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTYuNzkgNDg0Ljg4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2MiBUSm0KLShcMDAybGUuKSAxNS4yMjI5IFRqCi0tNjk2IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI2MyBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNjMgVEptCi0oZm9yY2UpIDIwLjQ2MzIgVGoKLS0yNjIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjYzIFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS0yNjMgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MiBUSm0KLShoYXBwZW4pIDI4Ljc3MiBUagotNzIgNDcyLjkyNiBUZAotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShubykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0ocGFzc2luZykgMjkuODg3OCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKG5vbnplcm8pIDMyLjA4OTUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDMwNS4wMTQgNDcyLjkyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDUuMDE0IC00NzIuOTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuMDE0IDQ3Mi45MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYWJhbmRvbikgNDEuODQyOSBUagotWzEgMCAwIDEgMzQ2Ljg1OCA0NzIuOTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Ni44NTggLTQ3Mi45MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0Ni44NTggNDcyLjkyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0NzAuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ2MC44MDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ1MS4wMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDgwLjU5NzQgNDUxLjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MC41OTc0IC00NTEuMDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04MC41OTc0IDQ1MS4wMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmJ5dGVzX2luKSA1My43OTggVGoKLVsxIDAgMCAxIDEzNC4zOTYgNDUxLjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzQuMzk2IC00NTEuMDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzYuMzU4IDQ1MS4wMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0xOTcgVEptCi0obm9uLW51bGwsKSAzNi4yNTM5IFRqCi1bMSAwIDAgMSAxODMuMjg3IDQ1MS4wMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgzLjI4NyAtNDUxLjAwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjI4NyA0NDkuMjY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTE4OS4yNjUgNDUxLjAwOSBUZAotKG5ieXRlc19pbikgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNDMuMDYzIDQ1MS4wMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjA2MyAtNDUxLjAwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1LjAyNSA0NTEuMDA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0xOTcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0xOTcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMTk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0xOTcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0xOTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMTk3IFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMTk3IFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2x1bWUpIDI0LjkwNjUgVGoKLS0xOTcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0xOTcgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0xOTcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTE5NyBUSm0KLShoYW5kbGVkLikgMzQuMDMyMiBUagotLTU4NCBUSm0KLShTaW1pbGFybHkpIDM3LjA5MDggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQzOS4wNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzOS4wNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS4wNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmJ5dGVzX291dCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTMxLjc3NiA0MzkuMDUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTQzOS4wNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNC43MTYgNDM5LjA1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjk1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjk1IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTI5NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NSBUSm0KLSh0b3RhbCkgMTcuNzEzNSBUagotLTI5NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9sdW1lKSAyNC45MDY1IFRqCi0tMjk2IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjk1IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yOTUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI5NSBUSm0KLSh3cml0dGVuLikgMzAuNzE0NyBUagotLTg5MCBUSm0KLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI5NSBUSm0KLShjb21wYXRpYmlsaXR5KSA1My4xNDA1IFRqCi0tMjk1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTUgVEptCi0ob2xkZXIpIDIwLjQ3MzEgVGoKLS0yOTYgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yOTUgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDQyNy4wOTggVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yODMgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTE4LjI5NCA0MjcuMDk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOC4yOTQgLTQyNy4wOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOC4yOTQgNDI3LjA5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLVsxIDAgMCAxIDIxMy45MzYgNDI3LjA5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTMuOTM2IC00MjcuMDk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTYuNzUzIDQyNy4wOTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob25seSkgMTcuNzEzNSBUagotLTI4MyBUSm0KLSh5aWVsZHMpIDIzLjgwMDcgVGoKLS0yODMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgyIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHdlcikgMTQuOTMzOSBUagotLTI4MyBUSm0KLSgzMikgOS45NjI2IFRqCi0tMjgzIFRKbQotKGJpdHMpIDE0LjM5NiBUagotLTI4MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MyBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI4MiBUSm0KLShjb3VudHMuKSAyOC41MDMgVGoKLS04MTcgVEptCi0oVXNlKSAxNS40OTE4IFRqCi1bMSAwIDAgMSA0MjMuNDk5IDQyNy4wOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIzLjQ5OSAtNDI3LjA5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIzLjQ5OSA0MjcuMDk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2U2NCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNTMxLjA5NSA0MjcuMDk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzMS4wOTUgLTQyNy4wOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMy45MTMgNDI3LjA5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpZikgNi4wODcxNSBUagotNzIgNDE1LjE0MyBUZAotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShmdWxsKSAxMy44MzgxIFRqCi0tMjUwIFRKbQotKDY0KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYml0KSAxMC41MjA1IFRqCi0tMjUwIFRKbQotKGNvdW50cy4pIDI4LjUwMyBUagotLTYyMCBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh0dykgOS45NjI2IFRqCi0xMCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShvdGhlcndpc2UpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0oYWJzb2x1dGVseSkgNDAuOTU2MiBUagotLTI1MCBUSm0KLShpZGVudGljYWwuKSAzNi44MDE4IFRqCi1bMSAwIDAgMSA3MiA0MTIuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MDMuMDI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTMuMjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgMzkzLjIyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC0zOTMuMjI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDM5My4yMjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyAzOTMuMjI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTM5My4yMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgMzkzLjIyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDM5MS4wNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC04NC42ODI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDgzLjY4NjIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4MC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzgxLjcwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzgxLjcwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTguNDg3OSAzNjkuNzQ4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ob3BlbmVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLTkwIDM1Ny43OTMgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSAzNDUuODM4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlcmUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od3JpdGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShmaWxlKSAyMy45MTAyIFRqCi05MCAzMzMuODgzIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMzIxLjkyOCBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzMDYuMzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk2LjQyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjc1Ljc2NSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjguKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKEhhbmRsaW5nKSA3My42NDc1IFRqCi0tMjc4IFRKbQotKGVtYmVkKSA1NS40ODUyIFRqCi0xMCBUSm0KLShkZWQpIDMwLjYwOSBUagotLTI3OCBUSm0KLShjb21wcmVzc2VkKSAxMDEuNDE2IFRqCi0tMjc4IFRKbQotKGRhdGEpIDM1LjM5NDkgVGoKLS0yNzggVEptCi0oc3RyZWFtcykgNjYuMDIxMSBUagotWzEgMCAwIDEgNzIgMjcxLjkzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjYxLjk3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjUzLjg0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yMDMgVEptCi0oaGlnaC1sZSkgMjguMjI0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTIwMyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjAzIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjaWxpdGF0ZXMpIDM1LjQxNyBUagotLTIwMyBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yMDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDIyNi40MDQgMjUzLjg0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuNDA0IC0yNTMuODQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjYuNDA0IDI1My44NDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI1Ni4yOTIgMjUzLjg0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTYuMjkyIC0yNTMuODQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTguMzE2IDI1My44NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGF0YSkgMTYuNTk3NyBUagotLTIwMyBUSm0KLShzdHJlYW1zKSAzMC40MzU3IFRqCi0tMjAzIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjAzIFRKbQotKGZvcm0pIDE5LjM2NzMgVGoKLS0yMDMgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjAzIFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yMDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDQgVEptCi0oYSkgNC40MjMzOSBUagotLTIwMyBUSm0KLShzdXJyb3VuZGluZywpIDUwLjYzOTkgVGoKLS0yMTIgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLS0yMDMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTIwMyBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiAyNTEuNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS43MjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAyMjEuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMjIxLjk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjIxLjk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI0MCBUSm0KLSh3cml0aW5nLCkgMzEuMjcyNiBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI0MSBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjQxIFRKbQotKG9wZW4pIDE5LjM2NzMgVGoKLS0yNDAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjQxIFRKbQotKGhhbmRsZSwpIDI5LjA1MDkgVGoKLS0yNDIgVEptCi0od3JpdGVzKSAyNC4zNDg2IFRqCi0tMjQxIFRKbQotKGNvbXByZXMpIDMzLjc1MzMgVGoKLTEgVEptCi0oc2VkKSAxMy4yODAxIFRqCi0tMjQxIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNDAgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MSBUSm0KLShpdCwpIDguMDI5ODYgVGoKLVsxIDAgMCAxIDM5OC45MjYgMjIxLjk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTguOTI2IC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTguOTI2IDIyMS45NjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmZsdXNoKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0MzQuNzkxIDIyMS45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM0Ljc5MSAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM0Ljc5MSAyMjEuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGVzKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjQxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI0MCBUSm0KLShkb2VzKSAxOC4yNjE0IFRqCi0tMjQxIFRKbQotKG5vdCkgMTIuNzMyMiBUagotWzEgMCAwIDEgNTA0LjEzNSAyMjEuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNC4xMzUgLTIyMS45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNC4xMzUgMjIxLjk2NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmY2xvc2UpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDU0MCAyMjEuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDIxMC4wMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXQuKSA4LjAyOTg2IFRqCi0tNjEwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTIzNSBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi0tMjM1IFRKbQotKGFwcGxpY2F0aW9uKSA0NC4yNzM4IFRqCi0tMjM1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIzNSBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTIzNSBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yMzUgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTIzNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjM1IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTIzNSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIzNSBUSm0KLShhZnRlcikgMTguMjUxNSBUagotLTIzNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzUgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTIzNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjM1IFRKbQotKHN0cmVhbSwpIDI5LjA1MDkgVGoKLS0yMzggVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTIzNSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjM1IFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yMzUgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi04Ni45NDQgMTk4LjA1NiBUZAotKGhhbmRsZS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDExNS45OTUgMTk4LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00My45OTQ4IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMTc2LjEzOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAxNzYuMTM5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMTc2LjEzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0xNzYuMTM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMTc2LjEzOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWFkaW5nKSAzMy4yMDUzIFRqCi0tMjM2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM2IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yMzYgVEptCi0oY29tcGxlKSAyOS4zMjk5IFRqCi0xNSBUSm0KLSh4LCkgNy40NzE5NSBUagotLTIzOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIzNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzYgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWNpbGl0aWVzKSAzMC45OTM2IFRqCi0tMjM2IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTIzNiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMzUgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yMzYgVEptCi0oZ2VuZXJhbCkgMjkuMzE5OSBUagotLTIzNiBUSm0KLShhcykgOC4yOTg4NSBUagotLTIzNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzNiBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTIzNiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIzNiBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTIzNSBUSm0KLShnZW5lcmFsaXR5KSAzOS44NDA0IFRqCi0tMjM2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM2IFRKbQotKGhhcmQpIDE3LjcwMzUgVGoKLS0yMzYgVEptCi0odG8pIDcuNzUwOSBUagotLTIzNiBUSm0KLShyZWNvbmNpbGUpIDM2LjUxMjkgVGoKLTg2Ljk0NCAxNjQuMTgzIFRkCi0od2l0aCkgMTcuNzEzNSBUagotLTQwNCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oXDAwMmNpZW5jKSAyNi41NjAzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE2NC44MTEgMTY0LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuODExIC0xNjQuMTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuODExIDE2NC4xODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjI0LjU4NyAxNjQuMTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNC41ODcgLTE2NC4xODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOC42MTQgMTY0LjE4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWFkcykgMjEuMDIxMSBUagotLTQwNCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tNDA1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwNCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDA0IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQwNCBUSm0KLShpbikgNy43NTA5IFRqCi0tNDA1IFRKbQotKGJsb2NrcykgMjYuMDEyMyBUagotLTQwNCBUSm0KLShvZikgOC4yOTg4NSBUagotLTQwNCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi1bMSAwIDAgMSA0MzQuNzQ0IDE2NC4xODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM0Ljc0NCAtMTY0LjE4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM0Ljc0NCAxNjQuMTgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01BWF9VTlVTRUQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDUxMi40NTIgMTY0LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTIuNDUyIC0xNjQuMTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTYuNDc5IDE2NC4xODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMsKSAyMy41MjE3IFRqCi04Ni45NDQgMTUyLjIyOCBUZAotKGFuZCkgMTQuMzg2IFRqCi0tNDEzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS00MTMgVEptCi0oZG9pbmcpIDIyLjY5NDggVGoKLS00MTMgVEptCi0oc28pIDguODU2NzUgVGoKLS00MTMgVEptCi0ocHJvYmFibHkpIDM1LjQxNyBUagotLTQxMyBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tNDEzIFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNob290KSAyOS4zMjk5IFRqCi0tNDEzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQxMyBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tNDEzIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tNDEzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDEzIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MTMgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotLTE1OTggVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tNDEzIFRKbQotKHJlY28pIDE3LjE0NTYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS00MTMgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tNDEzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00MTMgVEptCi0ob25jZSkgMTguODA5NCBUagotODYuOTQ0IDE0MC4yNzMgVGQKLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUyIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MiBUSm0KLShlbmRlZCwpIDI2LjI4MTMgVGoKLS0yNTMgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMTAuNzA1IDE0MC4yNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjcwNSAtMTQwLjI3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjcwNSAxNDAuMjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDMyNC4yNzkgMTQwLjI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjQuMjc5IC0xNDAuMjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjYuNzg5IDE0MC4yNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUyIFRKbQotKGxhc3QpIDEzLjgzODEgVGoKLS0yNTIgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjUyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDYuMjkxIDE0MC4yNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjI5MSAtMTQwLjI3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjI5MSAxNDAuMjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQ2Ni4wNjcgMTQwLjI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjYuMDY3IC0xNDAuMjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjguNTc4IDE0MC4yNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCh0aGUpIDE1LjQ5MTggVGoKLS0yNTIgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNTIgVEptCi0ocmV0dXJuaW5nKSAzNi41MjI5IFRqCi1bMSAwIDAgMSA4Ni45NDQgMTI4LjMxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTEyOC4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxMjguMzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE2NC42NTMgMTI4LjMxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0xMjguMzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuNjUzIDEyOC4zMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI1MCBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi1bMSAwIDAgMSAyNDMuMDI4IDEyOC4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjAyOCAtMTI4LjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQzLjAyOCAxMjguMzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMzMyLjY5MiAxMjguMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMi42OTIgLTEyOC4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMi42OTIgMTI4LjMxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMzUuMTgyIDEyOC4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjE4MiAtNzcuNDY2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI4IDI4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNzEgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjcyIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNzEgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNzEgVEptCi0oZWFzeSkgMTcuNzAzNSBUagotLTI3MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcyIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yNzEgVEptCi0obXVsdGlwbGUpIDMzLjIxNTMgVGoKLVsxIDAgMCAxIDI5My4zMTIgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMzEyIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMzEyIDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyMy4yIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIzLjIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNS45MDMgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdHJlYW1zKSAzMC40MzU3IFRqCi0tMjcxIFRKbQotKHBsYWNlZCkgMjYuMDAyNCBUagotLTI3MiBUSm0KLShlbmQtdG8tZW5kLikgNDUuNjQ4NiBUagotLTM3NCBUSm0KLShBcykgMTEuMDY4NCBUagotLTI3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzEgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNzEgVEptCi0oc3RyZWFtLCkgMjkuMDUwOSBUagotNzIgNjk4LjA4MiBUZAotKHdoZW4pIDIxLjU3OSBUagotWzEgMCAwIDEgOTYuMTk0OCA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk2LjE5NDggLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk2LjE5NDggNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNTUuOTcxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1Ljk3MSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjU4NiA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJldHVybnMpIDI3LjY2NjEgVGoKLVsxIDAgMCAxIDE4OC44NjggNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODguODY4IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODguODY4IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMjY2LjU3NyA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Ni41NzcgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ni41NzcgNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjYzIFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMjg4LjY4NSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4OC42ODUgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OC42ODUgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSA0MDIuMjU5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAyLjI1OSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA0Ljg3NSA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNjMgVEptCi0oY29sbGVjdCkgMjYuNTYwMyBUagotLTI2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0odW51c2VkKSAyOC4yMjQgVGoKLS0yNjIgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2MyBUSm0KLShcKGNvcCkgMTcuNzAzNSBUagotMTAgVEptCi0oeSkgNC45ODEzIFRqCi0tMjYyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi03MiA2ODYuMTI3IFRkCi0oaW50bykgMTUuNTAxOCBUagotLTI2NSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjY1IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yNjUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjY1IFRKbQotKHNvbWUpIDIxLjAzMSBUagotMjUgVEptCi0od2hlcmVcKS4pIDMwLjE0NjggVGoKLS03MTEgVEptCi0oVGhhdCkgMTguMjYxNCBUagotLTI2NSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjY1IFRKbQotKGZvcm1zKSAyMy4yNDI3IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NSBUSm0KLShzdGFydCkgMTcuMTU1NiBUagotLTI2NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjUgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNjUgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2NSBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tNzExIFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTI2NSBUSm0KLShzdGFydCkgMTcuMTU1NiBUagotLTI2NSBUSm0KLSh1bmNvbXByZXNzaW5nKSA2MC4zMjM1IFRqCi03MiA2NzQuMTcyIFRkCi0odGhhdCkgMTQuOTQzOSBUagotLTI0NiBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI0NiBUSm0KLShzdHJlYW0sKSAyOS4wNTA5IFRqCi0tMjQ3IFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMTU3LjIwNSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ny4yMDUgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ny4yMDUgNjc0LjE3MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotWzEgMCAwIDEgMjQwLjg5MSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC44OTEgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My4zNDQgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW4sKSAxNC42NjQ5IFRqCi0tMjQ3IFRKbQotKGZlZWRpbmcpIDI5Ljg3NzggVGoKLS0yNDYgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDcgVEptCi0odW51c2VkKSAyOC4yMjQgVGoKLS0yNDYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI0NiBUSm0KLSh2aWEpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0MDUuOTY3IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA1Ljk2NyAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA1Ljk2NyA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHVudXNlZCkgMzUuODY1NCBUagotWzEgMCAwIDEgNDQxLjgzMyA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS44MzMgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0NC4yODYgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgvKSAyLjc2OTYgVGoKLVsxIDAgMCAxIDQ0OS41MDggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDkuNTA4IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDkuNTA4IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oblVudXNlZCkgNDEuODQyOSBUagotWzEgMCAwIDEgNDkxLjM1MSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5MS4zNTEgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5My44MDQgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShwYXJhbWV0ZXJzLikgNDYuMTk2NiBUagotNzIgNjYyLjIxNyBUZAotKEspIDcuMTkzIFRqCi0yNSBUSm0KLShlZXApIDEzLjgyODEgVGoKLS0yNjMgVEptCi0oZG9pbmcpIDIyLjY5NDggVGoKLS0yNjMgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjY0IFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi1bMSAwIDAgMSAxNTguNjIyIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjYyMiAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjYyMiA2NjIuMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDIzNi4zMyA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNi4zMyAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM4Ljk1MiA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJldHVybikgMjMuNzkwNyBUagotLTI2MyBUSm0KLShjb2luY2lkZXMpIDM3LjYyODcgVGoKLS0yNjMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI2MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjQgVEptCi0ocGgpIDkuOTYyNiBUagotNSBUSm0KLSh5c2ljYWwpIDIzLjI0MjcgVGoKLS0yNjMgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNjMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjMgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSA0MjMuMTI1IDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIzLjEyNSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIzLjEyNSA2NjIuMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZlb2ZcKGZcKSkgNDEuODQyOSBUagotWzEgMCAwIDEgNDY0Ljk2OCA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NC45NjggLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2NC45NjggNjYyLjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotLTY5OSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI2MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjMgVEptCi0oc2l0dWF0aW9uKSAzNC4zMjEyIFRqCi1bMSAwIDAgMSA3MiA2NTAuMjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTAuMjYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDE4NS41NzQgNjUwLjI2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODUuNTc0IC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODguMDY1IDY1MC4yNjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjb3Vyc2UpIDI2LjAwMjQgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDcyIDY0OC45NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzOC45ODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTI0MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNDEgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI0MSBUSm0KLShmZWVsKSAxNC45MzM5IFRqCi0tMjQwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0MSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDAgVEptCi0oaGlnaC1sZSkgMjguMjI0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI0MSBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi0tMjQwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI0MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI0MCBUSm0KLSh1c2VkLikgMjAuNzUyMSBUagotLTYxNCBUSm0KLShJZikgNi42MzUwOSBUagotLTI0MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNDEgVEptCi0ocmVxdWlyZSkgMjguMjE0MSBUagotLTI0MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dHJhKSAxNS40OTE4IFRqCi0tMjQxIFRKbQotKFwwMDNlKSA5Ljk2MjYgVGoKLTE1IFRKbQotKHhpYmkpIDE1LjUwMTggVGoKLTEgVEptCi0obGl0eSkgMTMuMjkwMSBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI0MyBUSm0KLSh5b3UnKSAxOC4yNjE0IFRqCi0xMCBUSm0KLShsbCkgNS41MzkyMSBUagotLTI0MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDYxNi4zODkgVGQKLShiaXRlKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVsbGV0KSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGdyaXBzKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi1bMSAwIDAgMSA3MiA2MTQuMjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDQuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODUuNzY3IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuOS4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oU3RhbmRhcikgNjQuMDkyOSBUagotMjAgVEptCi0oZCkgMTAuNTE4NiBUagotLTI3OCBUSm0KLShcMDAybGUtcmVhZGluZy93cml0aW5nKSAxNTQuMDA5IFRqCi0tMjc4IFRKbQotKGNvZGUpIDQwLjE4MDcgVGoKLVsxIDAgMCAxIDcyIDU4MS45MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3MS45NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2My44NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIZXJlJykgMjIuNjc0OSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLSh5b3UnKSAxOC4yNjE0IFRqCi01MCBUSm0KLShkKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0od3JpdGUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGU6KSAxNS41MDE4IFRqCi1bMSAwIDAgMSA3MiA1NjEuNjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzcxLjYwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNzAuNjEgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzNjcuMDI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTUyLjMyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTUyLjMyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShGSUxFKSAyMy45MTAyIFRqCi0xMTMuOTEgNTUwLjU4NCBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA1NTIuMzI4IFRkCi0oZjspIDExLjk1NTEgVGoKLTkwIDU0MC4zNzMgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEyNS44NjUgNTM4LjYyOSBUZAotKCopIDUuOTc3NTYgVGoKLTEzNi4wODcgNTQwLjM3MyBUZAotKGI7KSAxMS45NTUxIFRqCi05MCA1MjguNDE4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuQnVmOykgMjkuODg3OCBUagotOTAgNTE2LjQ2MiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLS0xNzA0IFRKbQotKGJ1ZlspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMTY1LjAxOCA1MTQuNzE5IFRkCi0oKikgNS45Nzc1NiBUagotMTc1LjI0IDUxNi40NjIgVGQKLSh3aGF0ZXZlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWtlKSAyMy45MTAyIFRqCi0zMDUuNzkgNTE0LjcxOSBUZAotKCopIDUuOTc3NTYgVGoKLTMxMS43NjcgNTE2LjQ2MiBUZAotKC8pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXTspIDExLjk1NTEgVGoKLTkwIDUwNC41MDcgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKGJ6ZXJyb3I7KSA0Ny44MjA1IFRqCi05MCA0OTIuNTUyIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuV3JpdHRlbjspIDUzLjc5OCBUagotOTAgNDY4LjY0MiBUZAotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShmb3BlbikgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgibXlmaWxlLmJ6MiIsKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKCJ3IikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDQ1Ni42ODcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSghZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05NC4yNDQgNDQ0LjczMSBUZAotKC8pIDUuOTc3NTYgVGoKLTEwMC4yMjIgNDQyLjk4OCBUZAotKCopIDUuOTc3NTYgVGoKLTExMC40NDMgNDQ0LjczMSBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg0LjY4NSA0NDIuOTg4IFRkCi0oKikgNS45Nzc1NiBUagotMTkwLjY2MiA0NDQuNzMxIFRkCi0oLykgNS45Nzc1NiBUagotOTAgNDMyLjc3NiBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDQyMC44MjEgVGQKLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGVPcGVuXCgpIDk1LjY0MSBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShmLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSg5KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgNDA4Ljg2NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoYnplcnJvcikgNDcuODIwNSBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PS1wpKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk0LjI0NCAzOTYuOTExIFRkCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05NC4yNDQgMzg0Ljk1NiBUZAotKC8pIDUuOTc3NTYgVGoKLTEwMC4yMjIgMzgzLjIxMiBUZAotKCopIDUuOTc3NTYgVGoKLTExMC40NDMgMzg0Ljk1NiBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg0LjY4NSAzODMuMjEyIFRkCi0oKikgNS45Nzc1NiBUagotMTkwLjY2MiAzODQuOTU2IFRkCi0oLykgNS45Nzc1NiBUagotOTAgMzczIFRkCi0ofSkgNS45Nzc1NiBUagotOTAgMzQ5LjA5IFRkCi0od2hpbGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMTQwLjMzMSAzNDcuMzQ3IFRkCi0oKikgNS45Nzc1NiBUagotMTUwLjU1MyAzNDkuMDkgVGQKLShjb25kaXRpb24pIDUzLjc5OCBUagotMjA4LjU5NSAzNDcuMzQ3IFRkCi0oKikgNS45Nzc1NiBUagotMjE0LjU3MiAzNDkuMDkgVGQKLSgvKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk0LjI0NCAzMzcuMTM1IFRkCi0oLykgNS45Nzc1NiBUagotMTAwLjIyMiAzMzUuMzkxIFRkCi0oKikgNS45Nzc1NiBUagotMTEwLjQ0MyAzMzcuMTM1IFRkCi0oZ2V0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0od3JpdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaW50bykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzZXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obkJ1ZikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcHByb3ByaWF0ZWx5KSA3Ny43MDgzIFRqCi00MjEuODc0IDMzNS4zOTEgVGQKLSgqKSA1Ljk3NzU2IFRqCi00MjcuODUyIDMzNy4xMzUgVGQKLSgvKSA1Ljk3NzU2IFRqCi05NC4yNDM5IDMyNS4xOCBUZAotKG5Xcml0dGVuKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShuQnVmKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTQuMjQzOSAzMTMuMjI1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXChiemVycm9yKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKD09KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX0lPX0VSUk9SXCkpIDcxLjczMDcgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotMTAyLjczMiAzMDEuMjY5IFRkCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi0xMDIuNzMyIDI4OS4zMTQgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDguNzA5IDI4Ny41NzEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTguOTMxIDI4OS4zMTQgVGQKLShoYW5kbGUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLTE5My4xNzIgMjg3LjU3MSBUZAotKCopIDUuOTc3NTYgVGoKLTE5OS4xNSAyODkuMzE0IFRkCi0oLykgNS45Nzc1NiBUagotOTQuMjQzOSAyNzcuMzU5IFRkCi0ofSkgNS45Nzc1NiBUagotOTAgMjY1LjQwNCBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDI0MS40OTQgVGQKLShCWjJfYnpXcml0ZUNsb3NlXCgpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDIyOS41MzggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKGJ6ZXJyb3IpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfSU9fRVJST1JcKSkgNzEuNzMwNyBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05NC4yNDM5IDIxNy41ODMgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDAuMjIxIDIxNS44NCBUZAotKCopIDUuOTc3NTYgVGoKLTExMC40NDMgMjE3LjU4MyBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg0LjY4NCAyMTUuODQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTAuNjYyIDIxNy41ODMgVGQKLSgvKSA1Ljk3NzU2IFRqCi04OS45OTk5IDIwNS42MjggVGQKLSh9KSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA3MiAxOTAuMDg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4MC4xMjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE2OC4xNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQW5kKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI1MCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGU6KSAxNS41MDE4IFRqCi1bMSAwIDAgMSA3MiAxNjYuMDEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTE1LjE2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTEzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI5IDI5Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMzkyLjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNzAuNjEgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzNjcuMDI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShGSUxFKSAyMy45MTAyIFRqCi0xMTMuOTEgNzA5Ljg4OCBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA3MTEuNjMxIFRkCi0oZjspIDExLjk1NTEgVGoKLTkwIDY5OS42NzYgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEyNS44NjUgNjk3LjkzMyBUZAotKCopIDUuOTc3NTYgVGoKLTEzNi4wODcgNjk5LjY3NiBUZAotKGI7KSAxMS45NTUxIFRqCi05MCA2ODcuNzIxIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuQnVmOykgMjkuODg3OCBUagotOTAgNjc1Ljc2NiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLS0xNzA0IFRKbQotKGJ1ZlspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMTY1LjAxOCA2NzQuMDIzIFRkCi0oKikgNS45Nzc1NiBUagotMTc1LjI0IDY3NS43NjYgVGQKLSh3aGF0ZXZlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWtlKSAyMy45MTAyIFRqCi0zMDUuNzkgNjc0LjAyMyBUZAotKCopIDUuOTc3NTYgVGoKLTMxMS43NjcgNjc1Ljc2NiBUZAotKC8pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXTspIDExLjk1NTEgVGoKLTkwIDY2My44MTEgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKGJ6ZXJyb3I7KSA0Ny44MjA1IFRqCi05MCA2NTEuODU2IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuV3JpdHRlbjspIDUzLjc5OCBUagotOTAgNjI3Ljk0NSBUZAotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShmb3BlbikgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgibXlmaWxlLmJ6MiIsKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKCJyIikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDYxNS45OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCFmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk4LjQ4OCA2MDQuMDM1IFRkCi0oLykgNS45Nzc1NiBUagotMTA0LjQ2NiA2MDIuMjkyIFRkCi0oKikgNS45Nzc1NiBUagotMTE0LjY4NyA2MDQuMDM1IFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xODguOTI5IDYwMi4yOTIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTQuOTA2IDYwNC4wMzUgVGQKLSgvKSA1Ljk3NzU2IFRqCi05MCA1OTIuMDggVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCA1ODAuMTI1IFRkCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGYsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDAsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCA1NjguMTY5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05OC40ODggNTU2LjIxNCBUZAotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTguNDg4IDU0NC4yNTkgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDQuNDY2IDU0Mi41MTYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTQuNjg3IDU0NC4yNTkgVGQKLShoYW5kbGUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLTE4OC45MjkgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTE5NC45MDYgNTQ0LjI1OSBUZAotKC8pIDUuOTc3NTYgVGoKLTkwIDUzMi4zMDQgVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCA1MDguMzk0IFRkCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX09LOykgMzUuODY1NCBUagotOTAgNDk2LjQzOCBUZAotKHdoaWxlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oJiYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMjUyLjk0OCA0OTQuNjk1IFRkCi0oKikgNS45Nzc1NiBUagotMjYzLjE3IDQ5Ni40MzggVGQKLShhcmJpdHJhcnkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShvdGhlcikgMjkuODg3OCBUagotLTQyNiBUSm0KLShjb25kaXRpb25zKSA1OS43NzU2IFRqCi00MTkuMzY0IDQ5NC42OTUgVGQKLSgqKSA1Ljk3NzU2IFRqCi00MjUuMzQxIDQ5Ni40MzggVGQKLSgvXCkpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotOTguNDg4IDQ4NC40ODMgVGQKLShuQnVmKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKC8pIDUuOTc3NTYgVGoKLTMxOS40NzggNDgyLjc0IFRkCi0oKikgNS45Nzc1NiBUagotMzI5LjcgNDg0LjQ4MyBUZAotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmKSAxNy45MzI3IFRqCi0zOTYuMjMgNDgyLjc0IFRkCi0oKikgNS45Nzc1NiBUagotNDAyLjIwOCA0ODQuNDgzIFRkCi0oLykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTk4LjQ4OCA0NzIuNTI4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSg9PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi0xMDYuOTc2IDQ2MC41NzMgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMTIuOTUzIDQ1OC44MjkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMjMuMTc1IDQ2MC41NzMgVGQKLShkbykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzb21ldGhpbmcpIDUzLjc5OCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZlswKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKC4uKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5CdWYtMV0pIDQxLjg0MjkgVGoKLTMyMS45ODkgNDU4LjgyOSBUZAotKCopIDUuOTc3NTYgVGoKLTMyNy45NjYgNDYwLjU3MyBUZAotKC8pIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNDQ4LjYxOCBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDQzNi42NjMgVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCA0MjQuNzA3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTEwMi43MzIgNDEyLjc1MiBUZAotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotMTAyLjczMiA0MDAuNzk3IFRkCi0oLykgNS45Nzc1NiBUagotMTA4LjcwOSAzOTkuMDU0IFRkCi0oKikgNS45Nzc1NiBUagotMTE4LjkzMSA0MDAuNzk3IFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xOTMuMTcyIDM5OS4wNTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTkuMTUgNDAwLjc5NyBUZAotKC8pIDUuOTc3NTYgVGoKLTkwIDM4OC44NDIgVGQKLSh9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGVsc2UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotMTAyLjczMiAzNzYuODg3IFRkCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCAzNjQuOTMyIFRkCi0ofSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNzIgMzQ5LjM5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM5LjQyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE0LjYzNyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy41LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShVdGlsaXR5KSA1Ny4zODkzIFRqCi0tMjc4IFRKbQotKGZ1bmN0aW9ucykgOTIuOTYzMyBUagotWzEgMCAwIDEgNzIgMzEwLjM2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzAwLjM5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg0LjAxNiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy41LjEuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDI4NC4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjg0LjAxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyODQuMDE2IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDI0Ny45MDIgVGoKLVsxIDAgMCAxIDM2Ny43NiAyODQuMDE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NS43NiAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOTYuNjM3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA5NS42NDEzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOTIuMDU0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI3Mi4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI3Mi4zMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzc1woKSAxNDkuNDM5IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTI4OS43NzEgMjcwLjU3NSBUZAotKCopIDUuOTc3NTYgVGoKLTMzMy45NDQgMjcyLjMxOCBUZAotKGRlc3QsKSAyOS44ODc4IFRqCi0yMTcuMzE5IDI2MC4zNjMgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI4Ny4zMTcgMjU4LjYyIFRkCi0oKikgNS45Nzc1NiBUagotMjk3LjUzOCAyNjAuMzYzIFRkCi0oZGVzdExlbiwpIDQ3LjgyMDUgVGoKLTIxNy4zMTkgMjQ4LjQwOCBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTI0MS4yMyAyNDYuNjY0IFRkCi0oKikgNS45Nzc1NiBUagotMjg1LjQwMyAyNDguNDA4IFRkCi0oc291cmNlLCkgNDEuODQyOSBUagotMjE3LjMxOSAyMzYuNDUzIFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tODUyIFRKbQotKHNvdXJjZUxlbiwpIDU5Ljc3NTYgVGoKLTIxNy4zMTkgMjI0LjQ5OCBUZAotKGludCkgMTcuOTMyNyBUagotLTQ2ODYgVEptCi0oYmxvY2tTaXplMTAwaywpIDgzLjY4NTggVGoKLTIxNy4zMTkgMjEyLjU0MiBUZAotKGludCkgMTcuOTMyNyBUagotLTQ2ODYgVEptCi0odmVyYm9zaXR5LCkgNTkuNzc1NiBUagotMjE3LjMxOSAyMDAuNTg3IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDY4NiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMTg1LjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzUuMDgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjMuMTI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEF0dGVtcHRzKSAzNi41MzI5IFRqCi0tNDQyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00NDIgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS00NDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQyIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00NDIgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMjE2Ljg3IDE2My4xMjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2Ljg3IC0xNjMuMTI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTYuODcgMTYzLjEyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzb3VyY2VbMCkgNDcuODIwNSBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotLTEyMDAgVEptCi0oc291cmNlTGVuLTFdKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAzNjYuMzEgMTYzLjEyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjYuMzEgLTE2My4xMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC43MTUgMTYzLjEyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbnRvKSAxNS41MDE4IFRqCi0tNDQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ0MiBUSm0KLShkZXN0aW5hdGlvbikgNDMuNzI1OSBUagotLTQ0MyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ4Ni4yMDIgMTYzLjEyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODYuMjAyIC0xNjMuMTI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODYuMjAyIDE2My4xMjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZGVzdFswKSAzNS44NjU0IFRqCi0tNjAwIFRKbQotKC4uKSAxMS45NTUxIFRqCi03MiAxNDkuNDI5IFRkCi0oKikgNS45Nzc1NiBUagotNzcuOTc3NiAxNTEuMTczIFRkCi0oZGVzdExlbi0xXSkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTM3Ljc1MyAxNTEuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy43NTMgLTE1MS4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNy43NTMgMTUxLjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTM5MyBUSm0KLShJZikgNi42MzUwOSBUagotLTM3OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oZGVzdGluYXRpb24pIDQzLjcyNTkgVGoKLS0zNzkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMzc4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzc5IFRKbQotKGJpZykgMTIuNzMyMiBUagotLTM3OSBUSm0KLShlbm91Z2gsKSAzMS44MjA1IFRqCi1bMSAwIDAgMSAzMTguNDg2IDE1MS4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE4LjQ4NiAtMTUxLjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE4LjQ4NiAxNDkuNDI5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTMyNC40NjQgMTUxLjE3MyBUZAotKGRlc3RMZW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM2Ni4zMDcgMTUxLjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjYuMzA3IC0xNTEuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzAuMDgxIDE1MS4xNzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNzkgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNzggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0zNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zNzkgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLTcyIDEzOS4yMTcgVGQKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgODkuNTI3MyAxMzkuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg5LjUyNzMgLTEzOS4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg5LjUyNzMgMTM5LjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMTE5LjQxNSAxMzkuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS40MTUgLTEzOS4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMi41NTYgMTM5LjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMxNSBUSm0KLShyZXR1cm5lZC4pIDM1LjY4NiBUagotLTEwMTIgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE2IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zMTUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMTYgVEptCi0oXDAwMnQsKSAxMC43OTk1IFRqCi1bMSAwIDAgMSAzMTMuMzIyIDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEzLjMyMiAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEzLjMyMiAxMzcuNDc0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTMxOS4zIDEzOS4yMTcgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNjEuMTQzIDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjE0MyAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY0LjI4NCAxMzkuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzE1IFRKbQotKHVuY2hhbmdlZCwpIDQ1LjY0ODYgVGoKLS0zMzIgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ0MC41NTEgMTM5LjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDAuNTUxIC0xMzkuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDAuNTUxIDEzOS4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT1VUQlVGRl9GVUxMKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MzAuMjE1IDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTMwLjIxNSAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMzLjM1NSAxMzkuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi03MiAxMjcuMjYyIFRkCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLVsxIDAgMCAxIDcyIDEyNy4xNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExNy4yXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDUuMzQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjk3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjk3IFRKbQotKG1hbm5lcikgMjkuODc3OCBUagotLTI5NyBUSm0KLShpcykgNi42NDUwNSBUagotLTI5NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk3IFRKbQotKG9uZS1zaG90KSAzNC4zMTEyIFRqCi0tMjk3IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50LCkgMTQuNjY0OSBUagotLTMwOSBUSm0KLShkb25lKSAxOS4zNjczIFRqCi0tMjk3IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTcgVEptCi0oYSkgNC40MjMzOSBUagotLTI5NyBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLS0yOTcgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjk3IFRKbQotKGZ1bmN0aW9uLikgMzUuNjk2IFRqCi0tOTAzIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI5NyBUSm0KLShyZXN1bHRpbmcpIDM0Ljg2OTEgVGoKLS0yOTcgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgOTMuMzg5MiBUZAotKGRhdGEpIDE2LjU5NzcgVGoKLS0yOTYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTYgVEptCi0oYSkgNC40MjMzOSBUagotLTI5NiBUSm0KLShjb21wbGV0ZSkgMzYuNTIyOSBUagotWzEgMCAwIDEgMTQ3Ljk4OCA5My4zODkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny45ODggLTkzLjM4OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ny45ODggOTMuMzg5MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTc3Ljg3NSA5My4zODkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny44NzUgLTkzLjM4OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MC44MjUgOTMuMzg5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yOTYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI5NiBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tODk3IFRKbQotKFRoZXJlKSAyMy4yMzI4IFRqCi0tMjk2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk2IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yOTYgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjk2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI5NiBUSm0KLShtYWtpbmcpIDI5Ljg4NzggVGoKLS0yOTYgVEptCi0oYWRkaXRpb25hbCkgMzkuODUwNCBUagotLTI5NiBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI5NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk2IFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTI5NiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dHJhKSAxNS40OTE4IFRqCi03MiA4MS40MzQgVGQKLShpbnB1dCkgMjAuNDgzMSBUagotLTI1MCBUSm0KLShkYXRhLikgMTkuMDg4MyBUagotLTYyMCBUSm0KLShJZikgNi42MzUwOSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGtpbmQpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obWVjaGFuaXNtLCkgNDcuODcwMyBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi1bMSAwIDAgMSA3MiA3OS4yNzcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjguNDI1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzMCAzMAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTIyMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjQgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTIyMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyNCBUSm0KLShwYXJhbWV0ZXJzKSA0My43MDU5IFRqCi1bMSAwIDAgMSAxOTUuMzA2IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk1LjMwNiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk1LjMwNiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI3My4wMTUgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzMuMDE1IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzMuMDE1IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjc3Ljc4NCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Ny43ODQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Ny43ODQgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMzMxLjU4MyA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS41ODMgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMy44MDggNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzUwLjQyIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUwLjQyIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTAuNDIgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0MTAuMTk2IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjE5NiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEwLjE5NiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yMjkgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSA0MjkuOTEzIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI5LjkxMyAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI5LjkxMyA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNTM3LjUwOSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY5Ny45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY4OC4xMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS00MTAgVEptCi0oZ3VhcmFudGVlKSAzOC43MjQ2IFRqCi0tNDEwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS00MTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDEwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQxMCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tNDEwIFRKbQotKFwwMDJ0KSA4LjMwODgxIFRqCi0tNDEwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS00MTAgVEptCi0oaXRzKSA5LjQxNDY2IFRqCi0tNDEwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTQ1MCBUSm0KLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotLTQxMCBUSm0KLShhbikgOS40MDQ2OSBUagotLTQxMCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00MTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tNDExIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDEwIFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS00MTAgVEptCi0oMSUpIDEzLjI4MDEgVGoKLS00MTAgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLS00MTAgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTQxMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDY3Ni4xNjQgVGQKLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTI1MCBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTI1MCBUSm0KLShwbHVzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKHNpeCkgMTEuNjI2NCBUagotLTI1MCBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHh0cmEpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi1bMSAwIDAgMSA3MiA2NzQuMDA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTQuMjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSAyMjcuNDE3IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI3LjQxNyAtNjU0LjI0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMwLjU1MyA2NTQuMjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zMTUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzE1IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMzE0IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMzE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5b25kKSAxOS45MjUyIFRqCi1bMSAwIDAgMSAzNjIuNDg0IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYyLjQ4NCAtNjU0LjI0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYyLjQ4NCA2NTQuMjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlc3RbKSAyOS44ODc4IFRqCi0zOTIuMzcyIDY1Mi41MDMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zOTguMzQ5IDY1NC4yNDcgVGQKLShkZXN0TGVuXSkgNDcuODIwNSBUagotWzEgMCAwIDEgNDQ2LjE3IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ2LjE3IC02NTQuMjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuMTcgNjU0LjI0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzMxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oaW4pIDcuNzUwOSBUagotLTMxNSBUSm0KLShjYXNlKSAxNy4xNDU2IFRqCi0tMzE0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNzIgNjQyLjI5MSBUZAotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlclwwMDNvKSAxOC4yNjE0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjQyLjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjMyLjIyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIwLjM3NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDYyMC4yNzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNjguMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDE2Ny4zNzIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxNjMuNzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNjEwLjkwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNjEwLjkwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNTk4Ljk1NCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWJyYXJ5KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG1pcy1jb21waWxlZCkgNzEuNzMwNyBUagotOTAgNTg2Ljk5OSBUZAotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDU3NS4wNDQgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShkZXN0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZGVzdExlbikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDU2My4wODggVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oOSkgNS45Nzc1NiBUagotOTguNDg3OSA1NTEuMTMzIFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oNCkgNS45Nzc1NiBUagotOTguNDg3OSA1MzkuMTc4IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDI1MCkgMTcuOTMyNyBUagotOTAgNTI3LjIyMyBUZAotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotOTguNDg3OSA1MTUuMjY4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaW5zdWZmaWNpZW50KSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNTAzLjMxMyBUZAotKEJaX09VVEJVRkZfRlVMTCkgODkuNjYzNCBUagotOTguNDg3OSA0OTEuMzU3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShleGNlZWRzKSA0MS44NDI5IFRqCi0zNDEuNjU1IDQ4OS42MTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDcuNjMzIDQ5MS4zNTcgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi05MCA0NzkuNDAyIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNDY3LjQ0NyBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiA0NTEuOTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQxLjk0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIxLjI4NCBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy41LjIuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDQyMS4yODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNDIxLjI4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA0MjEuMjg0IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMjY4LjU2IFRqCi1bMSAwIDAgMSAzODguNDE5IDQyMS4yODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE2LjQxOSAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODQuNjgyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA4My42ODYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgODAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTQwOS41ODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDQwOS41ODcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzXCgpIDE2MS4zOTQgVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMzAxLjcyNiA0MDcuODQzIFRkCi0oKikgNS45Nzc1NiBUagotMzQ1Ljg5OSA0MDkuNTg3IFRkCi0oZGVzdCwpIDI5Ljg4NzggVGoKLTIyNS44MDcgMzk3LjYzMiBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjk1LjgwNSAzOTUuODg4IFRkCi0oKikgNS45Nzc1NiBUagotMzA2LjAyNiAzOTcuNjMyIFRkCi0oZGVzdExlbiwpIDQ3LjgyMDUgVGoKLTIyNS44MDcgMzg1LjY3NiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTI0OS43MTggMzgzLjkzMyBUZAotKCopIDUuOTc3NTYgVGoKLTI5My44OTEgMzg1LjY3NiBUZAotKHNvdXJjZSwpIDQxLjg0MjkgVGoKLTIyNS44MDcgMzczLjcyMSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTg1MiBUSm0KLShzb3VyY2VMZW4sKSA1OS43NzU2IFRqCi0yMjUuODA3IDM2MS43NjYgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00Njg2IFRKbQotKHNtYWxsLCkgMzUuODY1NCBUagotMjI1LjgwNyAzNDkuODExIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDY4NiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDMzNC4yNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI0LjMwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzEyLjM1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBdHRlbXB0cykgMzYuNTMyOSBUagotLTM1OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzU5IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0zNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU4IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNTkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMjIxLjI1OSAzMTIuMzUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMS4yNTkgLTMxMi4zNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS4yNTkgMzEyLjM1MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzb3VyY2VbMCkgNDcuODIwNSBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotLTEyMDAgVEptCi0oc291cmNlTGVuLTFdKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAzNzAuNjk4IDMxMi4zNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcwLjY5OCAtMzEyLjM1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc0LjI2OCAzMTIuMzUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS0zNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU5IFRKbQotKGRlc3RpbmF0aW9uKSA0My43MjU5IFRqCi0tMzU4IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDg2LjIwMiAzMTIuMzUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ni4yMDIgLTMxMi4zNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ni4yMDIgMzEyLjM1MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkZXN0WzApIDM1Ljg2NTQgVGoKLS02MDAgVEptCi0oLi4pIDExLjk1NTEgVGoKLTcyIDI5OC42NTMgVGQKLSgqKSA1Ljk3NzU2IFRqCi03Ny45Nzc2IDMwMC4zOTYgVGQKLShkZXN0TGVuLTFdKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzcuNzUzIDMwMC4zOTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtMzAwLjM5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3Ljc1MyAzMDAuMzk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMTIzIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzM0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNCBUSm0KLShkZXN0aW5hdGlvbikgNDMuNzI1OSBUagotLTMzNCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zMzQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMzQgVEptCi0oYmlnKSAxMi43MzIyIFRqCi0tMzM0IFRKbQotKGVub3VnaCwpIDMxLjgyMDUgVGoKLVsxIDAgMCAxIDMxMi41NTQgMzAwLjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTIuNTU0IC0zMDAuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTIuNTU0IDI5OC42NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzE4LjUzMSAzMDAuMzk2IFRkCi0oZGVzdExlbikgNDEuODQyOSBUagotWzEgMCAwIDEgMzYwLjM3NCAzMDAuMzk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2MC4zNzQgLTMwMC4zOTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My43MDEgMzAwLjM5NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMzNCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zMzQgVEptCi0odG8pIDcuNzUwOSBUagotLTMzNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzQgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTMzMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzQgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0zMzQgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLTcyIDI4OC40NDEgVGQKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgODkuNTI3MyAyODguNDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg5LjUyNzMgLTI4OC40NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg5LjUyNzMgMjg4LjQ0MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMTE5LjQxNSAyODguNDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS40MTUgLTI4OC40NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMi41NTYgMjg4LjQ0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMxNSBUSm0KLShyZXR1cm5lZC4pIDM1LjY4NiBUagotLTEwMTIgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE2IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zMTUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMTYgVEptCi0oXDAwMnQsKSAxMC43OTk1IFRqCi1bMSAwIDAgMSAzMTMuMzIyIDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEzLjMyMiAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEzLjMyMiAyODYuNjk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTMxOS4zIDI4OC40NDEgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNjEuMTQzIDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjE0MyAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY0LjI4NCAyODguNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzE1IFRKbQotKHVuY2hhbmdlZCwpIDQ1LjY0ODYgVGoKLS0zMzIgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ0MC41NTEgMjg4LjQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDAuNTUxIC0yODguNDQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDAuNTUxIDI4OC40NDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT1VUQlVGRl9GVUxMKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MzAuMjE1IDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTMwLjIxNSAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMzLjM1NSAyODguNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi03MiAyNzYuNDg2IFRkCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLVsxIDAgMCAxIDcyIDI3Ni4zODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI2Ni40MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1NC41NjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc291cmNlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMDcuODY1IDI1NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA3Ljg2NSAtMjU0LjU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEwLjk4MSAyNTQuNTY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzEzIFRKbQotKGFzc3VtZWQpIDM0LjMxMTIgVGoKLS0zMTIgVEptCi0odG8pIDcuNzUwOSBUagotLTMxMyBUSm0KLShob2xkKSAxNy43MTM1IFRqCi0tMzEzIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMTMgVEptCi0oY29tcGxldGUpIDM2LjUyMjkgVGoKLVsxIDAgMCAxIDIzNy4wNCAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNy4wNCAtMjU0LjU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM3LjA0IDI1NC41NjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI2Ni45MjggMjU0LjU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjYuOTI4IC0yNTQuNTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzAuMDQ0IDI1NC41NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9ybWF0KSAyNi41NjAzIFRqCi0tMzEzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTIgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMzUzLjQ0NiAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1My40NDYgLTI1NC41NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1My40NDYgMjU0LjU2OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMTU1LjQxNyBUagotWzEgMCAwIDEgNTA4Ljg2MyAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOC44NjMgLTI1NC41NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS45NzggMjU0LjU2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0cmllcykgMTcuMTU1NiBUagotLTMxMyBUSm0KLSh0bykgNy43NTA5IFRqCi03MiAyNDIuNjEzIFRkCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZW50aXJldHkpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyNDAuNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMzAuNDkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjAuNjk1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShtZWFuaW5nKSAzNC4zMTEyIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLVsxIDAgMCAxIDE5Ni42MzEgMjIwLjY5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuNjMxIC0yMjAuNjk1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTYuNjMxIDIyMC42OTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc21hbGwpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIyNi41MTkgMjIwLjY5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuNTE5IC0yMjAuNjk1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjkuMDEgMjIwLjY5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjQ1Ljg4NyAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS44ODcgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0NS44ODcgMjIwLjY5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMjk5LjY4NSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OS42ODUgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS42ODUgMjIwLjY5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHNlZSkgMTIuNzIyMiBUagotWzEgMCAwIDEgMzE5Ljg3OSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxOS44NzkgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxOS44NzkgMjIwLjY5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgNDM5LjQzMSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzOS40MzEgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOS40MzEgMjIwLjY5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyMTguNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMDguNTc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxOTguNzc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlY2F1c2UpIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ5IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKHJhdGlvKSAxOC4yNjE0IFRqCi0tMjQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNDkgVEptCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGtubykgMTQuOTQzOSBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhZHYpIDE0LjM4NiBUagotMjUgVEptCi0oYW5jZSwpIDIwLjc0MjEgVGoKLS0yNDkgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNDkgVEptCi0obm8pIDkuOTYyNiBUagotLTI1MCBUSm0KLShlYXN5KSAxNy43MDM1IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI0OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGd1YXJhbnRlZSkgMzguNzI0NiBUagotNzIgMTg2LjgyMiBUZAotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yODYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg3IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI4NiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yODcgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI4NiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4NiBUSm0KLShiaWcpIDEyLjczMjIgVGoKLS0yODcgVEptCi0oZW5vdWdoLikgMzEuODIwNSBUagotLTgzOCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yODcgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjg2IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKGNvdXJzZSkgMjYuMDAyNCBUagotLTI4NiBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODYgVEptCi0oYXJyYW5nZW1lbnRzKSA1My42Njg1IFRqCi0tMjg3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yODYgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI4NyBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjg2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODYgVEptCi0ocmVjb3JkKSAyNS40NDQ1IFRqCi0tMjg3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NiBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjg3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiAxNzQuODY3IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHVuY29tcHJlc3NlZCkgNTYuOTk2IFRqCi0tMjUwIFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5b25kKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzY29wZSkgMjIuNjg0OCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTcyLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjIuNzQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNTIuOTQ5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSAyMjcuNDE3IDE1Mi45NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI3LjQxNyAtMTUyLjk0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMwLjU1MyAxNTIuOTQ5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zMTUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzE1IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMzE0IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMzE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5b25kKSAxOS45MjUyIFRqCi1bMSAwIDAgMSAzNjIuNDg0IDE1Mi45NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYyLjQ4NCAtMTUyLjk0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYyLjQ4NCAxNTIuOTQ5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlc3RbKSAyOS44ODc4IFRqCi0zOTIuMzcyIDE1MS4yMDYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zOTguMzQ5IDE1Mi45NDkgVGQKLShkZXN0TGVuXSkgNDcuODIwNSBUagotWzEgMCAwIDEgNDQ2LjE3IDE1Mi45NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ2LjE3IC0xNTIuOTQ5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuMTcgMTUyLjk0OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzMxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oaW4pIDcuNzUwOSBUagotLTMxNSBUSm0KLShjYXNlKSAxNy4xNDU2IFRqCi0tMzE0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNzIgMTQwLjk5NCBUZAotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlclwwMDNvKSAxOC4yNjE0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTQwLjg5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMwLjkzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTE5LjA3NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDExOC45NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02OC4xMjQ4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMxIDMxCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0LjM4MzYgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ0LjQ2MiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIwLjk2IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk4LjQ0OSA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5OC40NDkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC40NDkgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ2LjI2OSA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yNDguNzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIyNy4xNDggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMjMuNTYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWJyYXJ5KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG1pcy1jb21waWxlZCkgNzEuNzMwNyBUagotOTAgNjg3LjcyMSBUZAotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShkZXN0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZGVzdExlbikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY2My44MTEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCYmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNtYWxsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNjUxLjg1NiBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDQpIDUuOTc3NTYgVGoKLTkwIDYzOS45IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDYyNy45NDUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA2MTUuOTkgVGQKLShCWl9PVVRCVUZGX0ZVTEwpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNjA0LjAzNSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZXhjZWVkcykgNDEuODQyOSBUagotMzQxLjY1NSA2MDIuMjkxIFRkCi0oKikgNS45Nzc1NiBUagotMzQ3LjYzMyA2MDQuMDM1IFRkCi0oZGVzdExlbikgNDEuODQyOSBUagotOTAgNTkyLjA4IFRkCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotOTguNDg3OSA1ODAuMTI1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludGVncml0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShkZXRlY3RlZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi05MCA1NjguMTY5IFRkCi0oQlpfREFUQV9FUlJPUl9NQUdJQykgMTEzLjU3NCBUagotOTguNDg3OSA1NTYuMjE0IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShkb2Vzbid0KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGJlZ2luKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHJpZ2h0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG1hZ2ljKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGJ5dGVzKSAyOS44ODc4IFRqCi05MCA1NDQuMjU5IFRkCi0oQlpfVU5FWFBFQ1RFRF9FT0YpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNTMyLjMwNCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZW5kcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh1bmV4cGVjdGVkbHkpIDcxLjczMDcgVGoKLTkwIDUyMC4zNDkgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA1MDguMzk0IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDQ5Mi44NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODIuODg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTguMDk5IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjYuKSAzNC40NTg0IFRqCi1bMSAwIDAgMSAxMTIuMjAxIDQ1OC4wOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEyLjIwMSAtNDU4LjA5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEyLjIwMSA0NTguMDk5IFRkCi0vRjM5Ml8wIDIwLjY1ODUgVGYKLSh6bGliKSA0OS41ODA0IFRqCi1bMSAwIDAgMSAxNjEuNzgxIDQ1OC4wOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjc4MSAtNDU4LjA5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY3LjUyNCA0NTguMDk5IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLShjb21wYXRpYmlsaXR5KSAxMjcuNDIyIFRqCi0tMjc4IFRKbQotKGZ1bmN0aW9ucykgOTIuOTYzMyBUagotWzEgMCAwIDEgNzIgNDUzLjgyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQzLjg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzYuMTgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3NoaW9rYSkgMzAuOTkzNiBUagotLTYwNCBUSm0KLShUc3VuZW8pIDI5LjMyOTkgVGoKLS02MDQgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tNjA0IFRKbQotKGNvbnRyaWIpIDI4LjIyNCBUagotMjAgVEptCi0odXRlZCkgMTcuMTU1NiBUagotLTYwNCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS02MDQgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNjA0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS02MDQgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tNjA0IFRKbQotKGJldHRlcikgMjIuNjg0OCBUagotWzEgMCAwIDEgMzU2LjM0NyA0MzYuMTgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni4zNDcgLTQzNi4xODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ni4zNDcgNDM2LjE4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzODAuMjU3IDQzNi4xODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgwLjI1NyAtNDM2LjE4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg2LjI3NSA0MzYuMTgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGliaWxpdHkpIDUzLjE0MDUgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0xMzcyIFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tNjA0IFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTYwNCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLVsxIDAgMCAxIDcyIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNC4yMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6b3BlbikgNTkuNzc1NiBUagotWzEgMCAwIDEgMTMxLjc3NiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMS43NzYgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNDQuMjgzIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ0LjI4MyAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ0LjI4MyA0MjQuMjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ienJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDIwNC4wNTkgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMDU5IC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuMDU5IDQyNC4yMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjE2LjU2NiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi41NjYgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi41NjYgNDI0LjIyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnp3cml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjgyLjMyIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgyLjMyIC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODIuMzIgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyOTQuODI3IDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk0LjgyNyAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjgyNyA0MjQuMjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemZsdXNoKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAzNjAuNTgxIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjU4MSAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjU4MSA0MjQuMjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDM3My4wODggNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzMuMDg4IC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzMuMDg4IDQyNC4yMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Y2xvc2UpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQzOC44NDIgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguODQyIC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzguODQyIDQyNC4yMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDUxLjM0OSA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1MS4zNDkgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1MS4zNDkgNDI0LjIyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnplcnJvcikgNjUuNzUzMiBUagotWzEgMCAwIDEgNTE3LjEwMiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxNy4xMDIgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNS42MTQgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNzIgNDEyLjI3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDEyLjI3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDEyLjI3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpsaWJWZXJzaW9uKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE2Ny42NDEgNDEyLjI3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNjQxIC00MTIuMjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuNjQxIDQxMi4yNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTE0MjAgVEptCi0oVGhlcykgMTkuMzY3MyBUagotMSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzg0IFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTM4MyBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zODMgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzgzIFRKbQotKFwoeWV0XCkpIDE4LjgwOTQgVGoKLS0zODQgVEptCi0ob2YpIDguMjk4ODUgVGoKLTI1IFRKbQotKFwwMDJjaWFsbHkpIDI3LjY3NjEgVGoKLS0zODMgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTM4MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTM4MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTE0MTkgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zODMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zODQgVEptCi0oYnJlYWssKSAyNC42MTc2IFRqCi0tNDE2IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTM4MyBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS0zODQgVEptCi0odG8pIDcuNzUwOSBUagotNzIgNDAwLjMxNiBUZAotKGspIDQuOTgxMyBUagotMTAgVEptCi0oZWVwKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwaWVjZXMuKSAyNy4zODcyIFRqCi0tNjIwIFRKbQotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0yNTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLSh0aGluaykgMjAuNDgzMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKG9rLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgMzk4LjE1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTQ4LjgxNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNDcuODIwNyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDQ0LjIzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zODguNzk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzODguNzk0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHR5cGVkZWYpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWkZJTEU7KSA0MS44NDI5IFRqCi05MCAzNjQuODg0IFRkCi0oY29uc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMTUyLjI4NiAzNjMuMTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNjIuNTA4IDM2NC44ODQgVGQKLShCWjJfYnpsaWJWZXJzaW9uKSA5NS42NDEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDM0OS4zNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM5LjM3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzI3LjQyNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5zKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc3RyaW5nKSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKGluZGljYXRpbmcpIDM5Ljg1MDQgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24uKSAyNi44MzkyIFRqCi1bMSAwIDAgMSA3MiAzMjUuMjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTMxNS45MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDMxNS45MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0xMzAuMTA5IDMxNC4xNTkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNDAuMzMxIDMxNS45MDIgVGQKLShCWjJfYnpvcGVuKSA1OS43NzU2IFRqCi0tODUyIFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGNvbnN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTI4MS4xMDMgMzE0LjE1OSBUZAotKCopIDUuOTc3NTYgVGoKLTI4Ny4wOCAzMTUuOTAyIFRkCi0ocGF0aCwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY29uc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMzgzLjQ5OCAzMTQuMTU5IFRkCi0oKikgNS45Nzc1NiBUagotMzg5LjQ3NiAzMTUuOTAyIFRkCi0obW9kZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDMwMy45NDcgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEzMC4xMDkgMzAyLjIwNCBUZAotKCopIDUuOTc3NTYgVGoKLTE0MC4zMzEgMzAzLjk0NyBUZAotKEJaMl9iemRvcGVuKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTM0MDggVEptCi0oZmQsKSAxNy45MzI3IFRqCi0tMTcwNCBUSm0KLShjb25zdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShjaGFyKSAyMy45MTAyIFRqCi0zNjkuNjI5IDMwMi4yMDQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNzUuNjA3IDMwMy45NDcgVGQKLShtb2RlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMjg4LjQwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNzguNDQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNjYuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE9wZW5zKSAyNS40NTQ0IFRqCi0tMjQzIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDEwNi43MTMgMjY2LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDYuNzEzIC0yNjYuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDYuNzEzIDI2Ni40ODggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgMTMwLjYyNCAyNjYuNDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMC42MjQgLTI2Ni40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMy4wNDEgMjY2LjQ4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNDMgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjQyIFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0yNDMgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNDMgVEptCi0od3JpdGluZywpIDMxLjI3MjYgVGoKLS0yNDQgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI0MyBUSm0KLShlaSkgNy4xOTMgVGoKLTEgVEptCi0odGhlcikgMTUuNDkxOCBUagotLTI0MyBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNDMgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMjQyIFRKbQotKG8pIDQuOTgxMyBUagotLTEgVEptCi0ocikgMy4zMTc1NSBUagotLTI0MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQzIFRKbQotKHByZS1lKSAyMC40NjMyIFRqCi0xNSBUSm0KLSh4aXN0aW5nKSAyNy4xMjgyIFRqCi0tMjQzIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI0MiBUSm0KLShkZXNjcmlwdG9yKSAzOS44NDA0IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjE1IFRKbQotKEFuYWxvZ291cykgNDMuMTY3OSBUagotLTI0MyBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA1MTAuMTEyIDI2Ni40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTEwLjExMiAtMjY2LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTEwLjExMiAyNjYuNDg4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZvcGVuKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1NDAgMjY2LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTI2Ni40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1NC41MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDg4Ljg3NjcgMjU0LjUzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04OC44NzY3IC0yNTQuNTMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04OC44NzY3IDI1NC41MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmRvcGVuKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMjQuNzQyIDI1NC41MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI0Ljc0MiAtMjU0LjUzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI0Ljc0MiAyNTQuNTMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI1Mi45OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjQzLjYzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjQzLjYzMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6cmVhZCkgNTkuNzc1NiBUagotLTg1MiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIyNi41MjggMjQxLjg5IFRkCi0oKikgNS45Nzc1NiBUagotMjM2Ljc0OSAyNDMuNjMzIFRkCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotMjc2Ljg1OSAyNDEuODkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODcuMDggMjQzLjYzMyBUZAotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDIzMS42NzggVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6d3JpdGUpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0yMjguMjYxIDIyOS45MzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMzguNDgzIDIzMS42NzggVGQKLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2b2lkKSAyMy45MTAyIFRqCi0yNzguNTkyIDIyOS45MzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODguODE0IDIzMS42NzggVGQKLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsZW4pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyMTYuMTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwNi4xNzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5NC4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVhZHMvd3JpdGVzKSA1MS40NjY4IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oZnJvbS90bykgMjkuODg3OCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXNseSkgMjkuMzM5OSBUagotLTI1MCBUSm0KLShvcGVuZWQpIDI4Ljc3MiBUagotWzEgMCAwIDEgMjU5LjkwMyAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OS45MDMgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OS45MDMgMTk0LjIxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI5NS43NjkgMTk0LjIxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTUuNzY5IC0xOTQuMjE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTUuNzY5IDE5NC4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTUwMCBUSm0KLShBbmFsb2dvdXMpIDQzLjE2NzkgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzU5LjE0MSAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1OS4xNDEgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1OS4xNDEgMTk0LjIxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVhZCkgMjkuODg3OCBUagotWzEgMCAwIDEgMzg5LjAyOSAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OS4wMjkgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5MS41MTkgMTk0LjIxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDA4LjM5NiAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwOC4zOTYgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwOC4zOTYgMTk0LjIxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmd3JpdGUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQ0NC4yNjEgMTk0LjIxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMjYxIC0xOTQuMjE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDQuMjYxIDE5NC4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTkyLjA2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMzUuODY1NSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMyLjI3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0xODIuNjk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAxODIuNjk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTg1MiBUSm0KLShCWjJfYnpmbHVzaCkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIzMi41MDUgMTgwLjk1NCBUZAotKCopIDUuOTc3NTYgVGoKLTI0Mi43MjcgMTgyLjY5NyBUZAotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCAxNzAuNzQyIFRkCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpjbG9zZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIzNC4yMzkgMTY4Ljk5OCBUZAotKCopIDUuOTc3NTYgVGoKLTI0NC40NiAxNzAuNzQyIFRkCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDE1NS4yXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0NS4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEzMy4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmx1c2hlcy9jbG9zZXMpIDU3LjU2MzkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMTM4Ljk2OCAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC45NjggLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOC45NjggMTMzLjI4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDE3NC44MzMgMTMzLjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzQuODMzIC0xMzMuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzQuODMzIDEzMy4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMTc5LjgxNSAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3OS44MTUgLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3OS44MTUgMTMzLjI4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpmbHVzaCkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjQ1LjU2OCAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS41NjggLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OC4wNTkgMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLShhY3R1YWxseSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5dGhpbmcuKSAyNy45NTUxIFRqCi0tNjIwIFRKbQotKEFuYWxvZ291cykgNDMuMTY3OSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA0MjUuNDcyIDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI1LjQ3MiAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI1LjQ3MiAxMzMuMjgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZmbHVzaCkgMzUuODY1NCBUagotWzEgMCAwIDEgNDYxLjMzOCAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS4zMzggLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2My44MjggMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDgwLjcwNSAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4MC43MDUgLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4MC43MDUgMTMzLjI4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmY2xvc2UpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDUxNi41NyAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxNi41NyAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTE2LjU3IDEzMy4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTMxLjEyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0xMjEuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAxMjEuNzYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGNvbnN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTE1Mi4yODYgMTIwLjAxNyBUZAotKCopIDUuOTc3NTYgVGoKLTE2Mi41MDggMTIxLjc2MSBUZAotKEJaMl9iemVycm9yKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMjgyLjgzNiAxMjAuMDE3IFRkCi0oKikgNS45Nzc1NiBUagotMjg4LjgxNCAxMjEuNzYxIFRkCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0zMjcuMTkgMTIwLjAxNyBUZAotKCopIDUuOTc3NTYgVGoKLTMzMy4xNjcgMTIxLjc2MSBUZAotKGVycm51bSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNzIgMTA2LjIxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05Ni4yNTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4NC4zMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybnMpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShzdHJpbmcpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0oZGVzY3JpYmluZykgNDEuNTA0MiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShyZWNlbnQpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oc3RhdHVzKSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAzMDMuODU4IDg0LjMwMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAzLjg1OCAtODQuMzAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAzLjg1OCA4NC4zMDExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGIpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDMwOS44MzUgODQuMzAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDkuODM1IC04NC4zMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDkuODM1IDg0LjMwMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjUwIFRKbQotKHNldHMpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDM2Ny42NjggODQuMzAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjcuNjY4IC04NC4zMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjcuNjY4IDgyLjU1NzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzczLjY0NSA4NC4zMDExIFRkCi0oZXJybnVtKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0MDkuNTExIDg0LjMwMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjUxMSAtODQuMzAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEyLjAwMSA4NC4zMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaXRzKSA5LjQxNDY2IFRqCi0tMjUwIFRKbQotKG51bWVyaWNhbCkgMzkuODQwNCBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUuKSAxOS4wODgzIFRqCi1bMSAwIDAgMSA3MiA4Mi4xNDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjEuMzI5OF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5NS43MzQgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNi4zMDcgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTUuMTYxIDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzMiAzMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwNC45MyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy43LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShVc2luZykgNTcuMzg5MyBUagotLTI3OCBUSm0KLSh0aGUpIDMwLjk4NzcgVGoKLS0yNzggVEptCi0obGlicmFyKSA1MS42NjY5IFRqCi0tMTAgVEptCi0oeSkgMTEuNDg2MSBUagotLTI3OCBUSm0KLShpbikgMTguMzY1NCBUagotLTI3OCBUSm0KLShhKSAxMS40ODYxIFRqCi1bMSAwIDAgMSAzMjIuNTAxIDcwNC45M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjIuNTAxIC03MDQuOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMi41MDEgNzA0LjkzIFRkCi0vRjM5Ml8wIDIwLjY1ODUgVGYKLShzdGRpbykgNjEuOTc1NSBUagotWzEgMCAwIDEgMzg0LjQ3NyA3MDQuOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg0LjQ3NyAtNzA0LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuNDc3IDcwNC45MyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oLWZyZWUpIDQ0Ljc2NyBUagotNzIgNjgwLjEzOSBUZAotKGVuKSAyNC4xMDg1IFRqCi00MCBUSm0KLSh2aXIpIDI1LjI2NTMgVGoKLTIwIFRKbQotKG9ubWVudCkgNzQuNTk3OCBUagotWzEgMCAwIDEgNzIgNjc5Ljg4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjkuOTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NDkuNTgzIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjcuMS4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oR2V0dGluZykgNjAuMjUzOSBUagotLTI3OCBUSm0KLShyaWQpIDIyLjAwMTMgVGoKLS0yNzggVEptCi0ob2YpIDE2LjI1MTMgVGoKLVsxIDAgMCAxIDIzMi43MjEgNjQ5LjU4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuNzIxIC02NDkuNTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzIuNzIxIDY0OS41ODMgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKHN0ZGlvKSA1MS42NDYyIFRqCi1bMSAwIDAgMSAyODQuMzY3IDY0OS41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEyLjM2NyAtMy44MzAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNS44NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyNy43MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotLTMxOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzE5IFRKbQotKGRlZXBseSkgMjYuNTYwMyBUagotLTMxOSBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTMxOSBUSm0KLShhcHBsaWNhdGlvbiwpIDQ2Ljc2NDQgVGoKLS0zMzYgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzE5IFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMzE5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0zMTkgVEptCi0odG8pIDcuNzUwOSBUagotLTMxOSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zMTkgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMzE5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxOSBUSm0KLShtZW1vcnktdG8tbWVtb3J5KSA4MC43OTY3IFRqCi0tMzE5IFRKbQotKGZ1bmN0aW9ucy4pIDM5LjU3MTQgVGoKLS0xMDM1IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTMxOSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0zMTkgVEptCi0oZG8pIDkuOTYyNiBUagotLTMxOSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLTcyIDYxNS43NzUgVGQKLShjb24pIDE0LjM4NiBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbmllbnRseSkgMzIuMDk5NSBUagotLTMyNyBUSm0KLShieSkgOS45NjI2IFRqCi0tMzI3IFRKbQotKGNvbXBpbGluZykgNDAuNDA4MyBUagotLTMyNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMyNyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzI4IFRKbQotKHByZXByb2NlcykgMzguNzI0NiBUagotMSBUSm0KLShzb3IpIDEyLjE3NDMgVGoKLS0zMjggVEptCi0oc3ltYm9sKSAyOS4zMzk5IFRqCi1bMSAwIDAgMSAzMzYuMDQ2IDYxNS43NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM2LjA0NiAtNjE1Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM2LjA0NiA2MTUuNzc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX05PX1NURElPKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0MDEuNzk5IDYxNS43NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAxLjc5OSAtNjE1Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA1LjA1NyA2MTUuNzc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRlXDAwMm5lZC4pIDMxLjgyMDUgVGoKLS0xMDgzIFRKbQotKERvaW5nKSAyNC45MDY1IFRqCi0tMzI3IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTMyNyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMzI3IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTMyNyBUSm0KLShhKSA0LjQyMzM5IFRqCi03MiA2MDMuODE5IFRkCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShjb250YWluaW5nKSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGVpZ2h0KSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9uczopIDM5Ljg1MDQgVGoKLVsxIDAgMCAxIDcyIDYwMS42NjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTkxLjc2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTgxLjk2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDE3OS41OTYgNTgxLjk2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzkuNTk2IC01ODEuOTY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzkuNTk2IDU4MS45NjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTk5LjA3OSA1ODEuOTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OS4wNzkgLTU4MS45NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OS4wNzkgNTgxLjk2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjgyLjc2NSA1ODEuOTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Mi43NjUgLTU4MS45NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Mi43NjUgNTgxLjk2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMDIuMjQ3IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAyLjI0NyAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAyLjI0NyA1ODEuOTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSA0MDMuODY2IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNC4wOTE1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE3Ljk1OCAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE3Ljk1OCA1ODEuOTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NJbml0KSAxMTkuNTUxIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSA1ODEuOTY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3MC4wMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3MC4wMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxNjcuNjQxIDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY3LjY0MSAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY3LjY0MSA1NzAuMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE3Mi4xNDQgNTcwLjAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuMTQ0IC01NzAuMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMTQ0IDU3MC4wMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMjg1LjcxOSA1NzAuMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3LjYxMSAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg3LjYxMSA1NzAuMDExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcykgMTQzLjQ2MSBUagotWzEgMCAwIDEgNDMxLjA3MyA1NzAuMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMS4wNzMgLTU3MC4wMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS4wNzMgNTcwLjAxMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MzUuNTc3IDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM1LjU3NyAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM1LjU3NyA1NzAuMDExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSA1OTAuOTk0IDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE4Ljk5NCAtMS41MzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OTgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTguNTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDguMTU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFdoZW4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0oY29tcGlsZWQpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKGlnbm9yZSkgMjUuNDU0NCBUagotWzEgMCAwIDEgMjcyLjUyNiA1NDguMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi41MjYgLTU0OC4xNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Mi41MjYgNTQ4LjE1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMzI2LjMyNCA1NDguMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNi4zMjQgLTU0OC4xNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyOC44MTUgNTQ4LjE1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzZXR0aW5ncy4pIDMyLjkzNjQgVGoKLVsxIDAgMCAxIDcyIDU0Ni4wMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTM2LjEwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE3LjYwMSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy43LjIuKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKENyaXRpY2FsKSA1OC4zNjAyIFRqCi0tMjc4IFRKbQotKGVycikgMjIuOTY1MyBUagotMjAgVEptCi0ob3IpIDE3LjIxNTQgVGoKLS0yNzggVEptCi0oaGFuZGxpbmcpIDcxLjczNjYgVGoKLVsxIDAgMCAxIDcyIDUxMy43NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTAzLjg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDk1Ljc0OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSA0OTUuNzQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTQ5NS43NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNC41MjkgNDk1Ljc0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb250YWlucykgMzMuMjA1MyBUagotLTQ3MyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDcyIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTQ3MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTQ3MiBUSm0KLShpbnRlcm5hbCkgMzAuNDM1NyBUagotLTQ3MyBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTQ3MiBUSm0KLShjaGVja3MpIDI3LjEwODIgVGoKLS00NzMgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS00NzIgVEptCi0oc2hvdWxkLCkgMjkuMDYwOSBUagotLTUyOSBUSm0KLShuZWVkbGVzcykgMzMuNzUzMyBUagotLTQ3MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDczIFRKbQotKHNheSkgMTMuMjgwMSBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTUyOCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTQ3MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTQ3MiBUSm0KLShhY3RpKSAxNC4zODYgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXRlZC4pIDE5LjA4ODMgVGoKLTcyIDQ4My43OTMgVGQKLShOZSkgMTEuNjE2NCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnRoZWxlc3MsKSAzNy4zNDk4IFRqCi0tNTMzIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tNDc2IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tNDc2IFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tNDc2IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTQ3NiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWwsKSAxMi40NTMzIFRqCi0tNTMyIFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS00NzYgVEptCi0oZGVwZW5kcykgMzIuNjQ3NCBUagotLTQ3NiBUSm0KLShvbikgOS45NjI2IFRqCi0tNDc2IFRKbQotKHdoZXRoZXIpIDMyLjA4OTUgVGoKLS00NzYgVEptCi0ob3IpIDguMjk4ODUgVGoKLS00NzcgVEptCi0obm90KSAxMi43MzIyIFRqCi0tNDc2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ3NiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tNDc2IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTQ3NiBUSm0KLShjb21waWxlZCkgMzcuMDgwOCBUagotLTQ3NiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA3MiA0NzEuODM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzEuODM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzEuODM4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX05PX1NURElPKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxMzcuNzUzIDQ3MS44MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtNDcxLjgzOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjI0NCA0NzEuODM4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNldC4pIDEzLjU1OTEgVGoKLVsxIDAgMCAxIDcyIDQ3MC41MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDYwLjYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NDkuOTg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oY29tcGlsZSwpIDM0LjU5MDEgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYXNzZXJ0aW9uKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsdXJlKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKHlpZWxkcykgMjMuODAwNyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obWVzc2FnZTopIDM2LjUyMjkgVGoKLVsxIDAgMCAxIDcyIDQ0Ny44MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM3LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjguMTMxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJ6aXAyL2xpYmJ6aXAyOikgNjAuMzMzNSBUagotLTMxMCBUSm0KLShpbnRlcm5hbCkgMzAuNDM1NyBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oTi4pIDkuNjgzNjUgVGoKLVsxIDAgMCAxIDcyIDQyNS45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDE2LjA3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDA2LjI3OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMzMyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzMxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMzIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMzMyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMzEgVEptCi0oYnppcDIvbGliYnppcDIsKSA2MC4wNTQ2IFRqCi0tMzUyIFRKbQotKDEuMC41KSAxOS45MjUyIFRqCi0tMzMyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzMyIFRKbQotKDEwKSA5Ljk2MjYgVGoKLS0zMzIgVEptCi0oRGVjZW1iZXIpIDQwLjkzNjMgVGoKLS0zMzEgVEptCi0oMjAwNy4pIDIyLjQxNTkgVGoKLS01NTUgVEptCi0oUGxlYXNlKSAyNS40NTQ0IFRqCi0tMzMyIFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTMzMiBUSm0KLShpdCkgNS41MzkyMSBUagotLTMzMSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzMyIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMzMyIFRKbQotKGF0OikgOS45NjI2IFRqCi0tNDczIFRKbQotKGpzZSkgMTEuMDY4NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZEBiemlwLm9yKSA0OS44NDI5IFRqCi0xOCBUSm0KLShnLikgNy40NzE5NSBUagotLTExMTAgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMzIgVEptCi0odGhpcykgMTQuMzk2IFRqCi03MiAzOTQuMzIzIFRkCi0oaGFwcGVuZWQpIDM4LjE3NjcgVGoKLS0yOTcgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjk4IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5NyBUSm0KLSh3ZXJlKSAxOS4zNTczIFRqCi0tMjk3IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yOTcgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjk4IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yOTcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTcgVEptCi0odXNlcykgMTcuMTU1NiBUagotLTI5NyBUSm0KLShsaWJiemlwMikgMzIuNjU3NCBUagotLTI5OCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI5NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk3IFRKbQotKGNvbXBvbmVudCwpIDQ2Ljc2NDQgVGoKLS0zMDkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjk4IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI5NyBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjk3IFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI5NyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yOTggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi03MiAzODIuMzY4IFRkCi0odG8pIDcuNzUwOSBUagotLTI2NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjQgVEptCi0oYXV0aG9yXChzXCkpIDM1Ljk2NSBUagotLTI2NCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2NCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjY0IFRKbQotKHByb2dyYW0uKSAzNi4yNDM5IFRqCi0tNzAzIFRKbQotKFBsZWFzZSkgMjUuNDU0NCBUagotLTI2NCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjQgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNjQgVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZvcnQpIDE0LjM4NiBUagotLTI2NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY0IFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI2MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjQgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZzspIDEyLjczMjIgVGoKLS0yNzEgVEptCi0odGltZWx5KSAyNS40NjQ0IFRqCi0tMjY0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY0IFRKbQotKGFjY3VyYXRlKSAzMy4xODU0IFRqCi0tMjY0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTI2NCBUSm0KLShyZXBvcnRzKSAyNy42NjYxIFRqCi0tMjY0IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50dWFsbHkpIDMyLjA5OTUgVGoKLTcyIDM3MC40MTMgVGQKLShsZWFkKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaGlnaGVyKSAyNS40NTQ0IFRqCi0tMjUwIFRKbQotKHF1YWxpdHkpIDI3LjY3NjEgVGoKLS0yNTAgVEptCi0oc29mdHcpIDIyLjEzNjkgVGoKLTEwIFRKbQotKGFyZS4pIDE0LjY1NSBUagotLTYyMCBUSm0KLShUaGFua3MuKSAzMS44MjA1IFRqCi0tNjIwIFRKbQotKEp1bGlhbikgMjMuODAwNyBUagotLTI1MCBUSm0KLShTZSkgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkLCkgMTUuMjEyOSBUagotLTI1MCBUSm0KLSgxMCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKERlY2VtYmVyKSA0MC45MzYzIFRqCi0tMjUwIFRKbQotKDIwMDcuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA3MiAzNjguMjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQ4LjU1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM4Ljc1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGVyZSkgMjQuMzM4NiBUagotWzEgMCAwIDEgOTguODMxMiAzMzguNzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk4LjgzMTIgLTMzOC43NThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk4LjgzMTIgMzM4Ljc1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxMDQuODA5IDMzOC43NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA0LjgwOSAtMzM4Ljc1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA3LjMwMiAzMzguNzU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MSBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTYyMSBUSm0KLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgMjMwLjgxIDMzOC43NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMwLjgxIC0zMzguNzU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuODEgMzM4Ljc1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKD09KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKDEwMDcpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDI4NC42MDggMzM4Ljc1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuNjA4IC0zMzguNzU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODQuNjA4IDMzOC43NTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjUxIFRKbQotKHByaW50cykgMjIuNjk0OCBUagotLTI1MCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHRyYSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLSh0ZSkgNy4xOTMgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWR2aXNpbmcpIDMzLjc2MzMgVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJlYWRlcikgMjQuODg2NiBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHVucmVsaWFibGUpIDM5Ljg0MDQgVGoKLTcyIDMyNi44MDMgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLS00MjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00MjQgVEptCi0ob2Z0ZW4pIDIwLjQ3MzEgVGoKLS00MjUgVEptCi0oYXNzb2NpYXRlZCkgNDAuOTQ2MyBUagotLTQyNSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDI0IFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tNDI1IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tNDI0IFRKbQotKDEwMDcuKSAyMi40MTU5IFRqCi0tODM0IFRKbQotKFwoVGhpcykgMjEuMDMxIFRqCi0tNDI1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tNDI1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MjQgVEptCi0oZnJlcXVlbnRseS1vYnNlcnYpIDcwLjgyNDEgVGoKLTE1IFRKbQotKGVkLXBoZW5vbWVub24pIDY0LjE4OSBUagotLTQyNSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi03MiAzMTQuODQ4IFRkCi0oMS4wLjAvMS4wLjFcKS4pIDQ4LjQyODIgVGoKLVsxIDAgMCAxIDcyIDMxMy4wNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzAzLjE2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjkyLjk5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShleGl0XCgzXCkpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgMjkyLjk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC0yOTIuOTk1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuMzM0IDI5Mi45OTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI1MCBUSm0KLShjYWxsZWQuKSAyNi4yODEzIFRqCi1bMSAwIDAgMSA3MiAyOTEuODk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OTgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODIuMDAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzEuMTQyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDk1LjA5MzMgMjcxLjE0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05NS4wOTMzIC0yNzEuMTQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05NS4wOTMzIDI3MS4xNDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEyNC45ODEgMjcxLjE0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjQuOTgxIC0yNzEuMTQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjQuOTgxIDI3MS4xNDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLWZyZWUpIDE4Ljc5OTQgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWx1cmVzKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHJlc3VsdCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTI1MCBUSm0KLShkZWNsYXJlZCkgMzMuNzQzMyBUagotLTI1MCBUSm0KLShhczopIDExLjA2ODQgVGoKLVsxIDAgMCAxIDcyIDI2OC45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjU5LjYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAyNTkuNjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZXh0ZXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYnpfaW50ZXJuYWxfZXJyb3IpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGVycmNvZGUpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyNDQuMDc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjQ4NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNC4xOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIyLjIyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ocmVsZSkgMTQuOTMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29kZSkgMTguODA5NCBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShwYXNzZWQpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9uLikgMzUuNjk2IFRqCi1bMSAwIDAgMSA3MiAyMjAuMDY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMC4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjAwLjM3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotLTI5NCBUSm0KLShlaXRoZXIpIDIyLjY4NDggVGoKLS0yOTQgVEptCi0oY2FzZSwpIDE5LjYzNjMgVGoKLS0zMDYgVEptCi0ob25jZSkgMTguODA5NCBUagotLTI5NCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI5NCBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTI5NCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWx1cmUpIDIyLjY4NDggVGoKLS0yOTQgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjk1IFRKbQotKG9jY3VycmVkLCkgMzcuMzM5OCBUagotLTMwNSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi1bMSAwIDAgMSAzMDYuNTQxIDIwMC4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA2LjU0MSAtMjAwLjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA2LjU0MSAyMDAuMzcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzNjAuMzM5IDIwMC4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjMzOSAtMjAwLjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYzLjI3MSAyMDAuMzcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlY29yZHMpIDI5LjMxOTkgVGoKLS0yOTQgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvbHYpIDEyLjczMjIgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjk0IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI5NSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI5NCBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFyZGVkKSAyMi4xMjY5IFRqCi0tMjk0IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjk0IFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWxpZC4pIDE3LjQzNDYgVGoKLTcyIDE4OC40MTcgVGQKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVzdW1lKSAyOC43NzIgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0ob3BlcmF0aW9uKSAzNy42Mjg3IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDcyIDE4Ni4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzYuMzYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjYuNTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI5OSBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTkgVEptCi0oY291cnNlLCkgMjguNDkzIFRqCi0tMzExIFRKbQotKGNoYW5nZSkgMjguMjE0MSBUagotLTI5OCBUSm0KLShjcml0aWNhbCkgMjcuNjY2MSBUagotLTI5OSBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI5OCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotLTI5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk4IFRKbQotKHN1aXQpIDE0LjM5NiBUagotLTI5OSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjk4IFRKbQotKG5lZWRzLikgMjUuMTc1NSBUagotLTkxMiBUSm0KLShBcykgMTEuMDY4NCBUagotLTI5OCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjk5IFRKbQotKHNhaWQpIDE2LjA0OTcgVGoKLS0yOTggVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSwpIDYuOTE0MDQgVGoKLS0zMTEgVEptCi0oY3JpdGljYWwpIDI3LjY2NjEgVGoKLS0yOTkgVEptCi0oZXJyb3JzKSAyMy4yMzI4IFRqCi0tMjk4IFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjk5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi03MiAxNTQuNjA4IFRkCi0oaW4pIDcuNzUwOSBUagotLTI2MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI2MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2MyBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjMgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKG9jY3VyKSAyMi4xMjY5IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjk3IFRKbQotKEFsbCkgMTIuNzMyMiBUagotLTI2MyBUSm0KLSgibm9ybWFsIikgMzYuMzUzNSBUagotLTI2MyBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI2MyBUSm0KLShzaXR1YXRpb25zKSAzOC4xOTY2IFRqCi0tMjYzIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI2MyBUSm0KLShpbmRpY2F0ZWQpIDM2LjUyMjkgVGoKLS0yNjMgVEptCi0odmlhKSAxMi4xNzQzIFRqCi0tMjYzIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjYzIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI2MyBUSm0KLShjb2RlcykgMjIuNjg0OCBUagotLTI2MyBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjYzIFRKbQotKGZ1bmN0aW9ucywpIDM5LjU3MTQgVGoKLTcyIDE0Mi42NTMgVGQKLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmVkKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGZyb20uKSAyMS44NTc5IFRqCi1bMSAwIDAgMSA3MiAxNDIuNTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEzMi42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwNy45NjUgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuOC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oTWFraW5nKSA3MS4xNjg1IFRqCi0tMjc4IFRKbQotKGEpIDExLjQ4NjEgVGoKLS0yNzggVEptCi0oV2luZG8pIDYzLjExMTcgVGoKLTE1IFRKbQotKHdzKSAyNy41NTg0IFRqCi0tMjc4IFRKbQotKERMTCkgNDAuMTYwMSBUagotWzEgMCAwIDEgNzIgMTAzLjM2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05My40NzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4Ni4xMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRXYpIDExLjA2ODQgVGoKLTE1IFRKbQotKGVyeXRoaW5nKSAzMy4yMDUzIFRqCi0tMzI4IFRKbQotKHJlbGF0ZWQpIDI3LjEwODIgVGoKLS0zMjcgVEptCi0odG8pIDcuNzUwOSBUagotLTMyOCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTMyOCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0zMjcgVEptCi0oYmVlbikgMTguODA5NCBUagotLTMyOCBUSm0KLShjb250cmliKSAyOC4yMjQgVGoKLTIwIFRKbQotKHV0ZWQpIDE3LjE1NTYgVGoKLS0zMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTMyNyBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG9zaGlva2EpIDMwLjk5MzYgVGoKLS0zMjggVEptCi0oVHN1bmVvKSAyOS4zMjk5IFRqCi0tMzI4IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAzNzguMTM5IDg2LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzguMTM5IC04Ni4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3OC4xMzkgODYuMTEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRzdW5lb0Byci5paWo0dS5vci5qcCkgMTI1LjUyOSBUagotWzEgMCAwIDEgNTAzLjY2OCA4Ni4xMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAzLjY2OCAtODYuMTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDMuNjY4IDg2LjExMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSwpIDUuODA4MiBUagotLTM0NyBUSm0KLShzbykgOC44NTY3NSBUagotLTMyOCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLTcyIDc0LjE1NjggVGQKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oc2VuZCkgMTguMjYxNCBUagotLTI1MCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHF1ZXJpZXMpIDI4Ljc3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGhpbSkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShcKGIpIDguMjk4ODUgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocGVyaGFwcykgMzAuOTgzNyBUagotLTI1MCBUSm0KLShDYzopIDEzLjgzODEgVGoKLS0zMTAgVEptCi0obWUsKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSAyODcuOTU4IDc0LjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3Ljk1OCAtNzQuMTU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg3Ljk1OCA3NC4xNTY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGpzZXdhcmRAYnppcC5vcmcpIDk1LjY0MSBUagotWzEgMCAwIDEgMzgzLjYgNzQuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODMuNiAtNzQuMTU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzgzLjYgNzQuMTU2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotWzEgMCAwIDEgNzIgNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljk3MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTEuMDcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUxLjA3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzMyAzMwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNeSkgMTMuODM4MSBUagotLTM2NyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFndWUpIDE4LjgwOTQgVGoKLS0zNjcgVEptCi0odW5kZXJzdGFuZGluZykgNTYuNDQ4MSBUagotLTM2NyBUSm0KLShvZikgOC4yOTg4NSBUagotLTM2NyBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMzY4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNjcgVEptCi0oZG8pIDkuOTYyNiBUagotLTM2NyBUSm0KLShpczopIDkuNDE0NjYgVGoKLS01NDQgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTM2NyBUSm0KLShWKSA3LjE5MyBUagotNjAgVEptCi0oaXN1YWwpIDE4LjgxOTQgVGoKLS0zNjcgVEptCi0oQysrKSAxNy44ODI5IFRqCi0tMzY3IFRKbQotKDUuMCwpIDE0Ljk0MzkgVGoKLS0zOTcgVEptCi0ob3BlbikgMTkuMzY3MyBUagotLTM2NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjcgVEptCi0ocHJvamVjdCkgMjcuNjY2MSBUagotLTM2NyBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDQzMi45NjYgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzIuOTY2IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzIuOTY2IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnoyLmRzcCkgNTkuNzc1NiBUagotWzEgMCAwIDEgNDkyLjc0MiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Mi43NDIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Mi43NDIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzk2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzY4IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsZC4pIDE3Ljk5MjUgVGoKLTcyIDY5OC4wODIgVGQKLShUaGF0JykgMjEuNTc5IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjUwIFRKbQotKGFsbC4pIDEyLjQ1MzMgVGoKLVsxIDAgMCAxIDcyIDY5Ny45ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4OC4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI4NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yODQgVEptCi0oY2FuJykgMTcuMTQ1NiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjg1IFRKbQotKG9wZW4pIDE5LjM2NzMgVGoKLS0yODQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKHByb2plY3QpIDI3LjY2NjEgVGoKLS0yODQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjg0IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4NSBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yODQgVEptCi0ocmVhc29uLCkgMjguNDkzIFRqCi0tMjkzIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI4NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg0IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI4NCBUSm0KLShvbmUsKSAxNi44NzY2IFRqCi0tMjkzIFRKbQotKG5hbWluZykgMjkuODg3OCBUagotLTI4NCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI4NCBUSm0KLShcMDAybGVzOikgMTkuMzc3MyBUagotWzEgMCAwIDEgNDI0LjUwNSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNC41MDUgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNC41MDUgNjc2LjE2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShibG9ja3NvcnQuYykgNjUuNzUzMiBUagotWzEgMCAwIDEgNDkwLjI1OSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5MC4yNTkgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5MC4yNTkgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0OTUuNjY2IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk1LjY2NiAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk1LjY2NiA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliLmMpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDUzNy41MDkgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzcuNTA5IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzcuNTA5IDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShjb21wcmVzcy5jKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMxLjc3NiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMxLjc3NiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDEzNi40MzYgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzYuNDM2IC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzYuNDM2IDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oY3JjdGFibGUuYykgNTkuNzc1NiBUagotWzEgMCAwIDEgMTk2LjIxMSA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Ni4yMTEgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Ni4yMTEgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMDAuODcxIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAwLjg3MSAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAwLjg3MSA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlY29tcHJlc3MuYykgNzEuNzMwNyBUagotWzEgMCAwIDEgMjcyLjYwMiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi42MDIgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Mi42MDIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNzcuMjYyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3LjI2MiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc3LjI2MiA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGh1ZmZtYW4uYykgNTMuNzk4IFRqCi1bMSAwIDAgMSAzMzEuMDYgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzEuMDYgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMS4wNiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMzNS43MiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNS43MiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjcyIDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ocmFuZHRhYmxlLmMpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQwMS40NzMgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDEuNDczIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDMuNTYyIDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQyMC4wMzcgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjAuMDM3IC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjAuMDM3IDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnoyLmRlZikgNTkuNzc1NiBUagotWzEgMCAwIDEgNDc5LjgxMiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OS44MTIgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3OS44MTIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTkzIFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTIxMCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjA5IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLTcyIDY1Mi4yNTQgVGQKLShuZWVkKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShoZWFkZXIpIDI2LjU1MDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotWzEgMCAwIDEgMTkwLjQxNSA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MC40MTUgLTY1Mi4yNTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5MC40MTUgNjUyLjI1NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemxpYi5oKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMzIuMjU4IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMyLjI1OCAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM0Ljc0OCA2NTIuMjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNTEuNjI1IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUxLjYyNSAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUxLjYyNSA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliX3ByaXZhdGUuaCkgODkuNjYzNCBUagotWzEgMCAwIDEgMzQxLjI4OSA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0MS4yODkgLTY1Mi4yNTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS4yODkgNjUyLjI1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2NTAuNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0MC43NTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzMC4zMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGRvbicpIDE4LjI2MTQgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oVkMrKywpIDI3LjU2NjUgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZGVcMDAybmUpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb3Byb2Nlc3NvcikgNTEuNDU2OCBUagotLTI1MCBUSm0KLShzeW1ib2wpIDI5LjMzOTkgVGoKLVsxIDAgMCAxIDM2My42MzQgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjMuNjM0IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjMuNjM0IDYzMC4zMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX1dJTjMyKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzOTkuNSA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5OS41IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTkuNSA2MzAuMzM2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDYyOC4xNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxOC4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYwOC40MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmluYWxseSkgMjguMjM0IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMDQuNTY4IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA0LjU2OCAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjU2OCA2MDguNDE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRsbHRlc3QuYykgNTMuNzk4IFRqCi1bMSAwIDAgMSAxNTguMzY2IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjM2NiAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYwLjg1NiA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc2FtcGxlKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTI1MCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShETEwuKSAyMS44NTc5IFRqCi0tNTAwIFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByb2plY3QpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotWzEgMCAwIDEgMzg4LjU4IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg4LjU4IC02MDguNDE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODguNTggNjA4LjQxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkbGx0ZXN0LmRzcCkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDU0LjMzMyA2MDguNDE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NC4zMzMgLTYwOC40MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1NC4zMzMgNjA4LjQxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2MDYuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTYuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZVwwMDJsZSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oVikgNy4xOTMgVGoKLTYwIFRKbQotKGlzdWFsKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKEMsKSA5LjEzNTcgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGxvb2spIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi1bMSAwIDAgMSAyOTIuMjEyIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkyLjIxMiAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkyLjIxMiA1ODYuNTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG1ha2VmaWxlLm1zYykgNzEuNzMwNyBUagotWzEgMCAwIDEgMzYzLjk0MyA1ODYuNTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My45NDMgLTU4Ni41MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My45NDMgNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1ODQuMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzQuMzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjQuNTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlKSAxMS4wNjg0IFRqCi0tMjkxIFRKbQotKGEpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yOTEgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MSBUSm0KLShpZikgNi4wODcxNSBUagotLTI5MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTEgVEptCi0oY29tcGlsZSkgMzIuMDk5NSBUagotWzEgMCAwIDEgMTkyLjA2OSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi4wNjkgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Mi4wNjkgNTY0LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjIxLjk1OCA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMS45NTggLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC44NTcgNTY0LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpdHNlbGYpIDE5LjkyNTIgVGoKLS0yOTEgVEptCi0ob24pIDkuOTYyNiBUagotLTI5MSBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbjMyLCkgMjAuMjA0MiBUagotLTMwMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTEgVEptCi0obXVzdCkgMTkuMzc3MyBUagotLTI5MSBUSm0KLShzZXQpIDExLjA2ODQgVGoKLVsxIDAgMCAxIDM0Ni44NDEgNTY0LjU4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDYuODQxIC01NjQuNTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDYuODQxIDU2NC41ODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfVU5JWCkgNDEuODQyOSBUagotWzEgMCAwIDEgMzg4LjY4NSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OC42ODUgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5MS41ODMgNTY0LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKDApIDQuOTgxMyBUagotLTI5MSBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDI3LjM5OSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNy4zOTkgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNy4zOTkgNTY0LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9MQ0NXSU4zMikgNjUuNzUzMiBUagotWzEgMCAwIDEgNDkzLjE1MyA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My4xNTMgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni4wNTIgNTY0LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKDEsKSA3LjQ3MTk1IFRqCi0tMzAxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA1NTIuNjI4IFRkCi0oXDAwMmxlKSAxMi43MzIyIFRqCi1bMSAwIDAgMSA4Ny4yMjI3IDU1Mi42MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODcuMjIyNyAtNTUyLjYyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODcuMjIyNyA1NTIuNjI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyLmMpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEyOS4wNjYgNTUyLjYyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjkuMDY2IC01NTIuNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjkuMDY2IDU1Mi42MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0oY29tcGlsaW5nLikgNDIuODk5IFRqCi0tMzEwIFRKbQotKE90aGVyd2lzZSkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmVzdWx0aW5nKSAzNC44NjkxIFRqCi0tMjUwIFRKbQotKGJpbmFyeSkgMjUuNDU0NCBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU1MC40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0MC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUzMC43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuJykgMTIuNzIyMiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHRyaWVkKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHN0dWYpIDE0Ljk0MzkgVGoKLTI1IFRKbQotKGYpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0obXlzZWxmLCkgMjkuNjA4OCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obG9va3MpIDIxLjU4OSBUagotLTI1MCBUSm0KLShwbGF1c2libGUuKSAzOC40NjU2IFRqCi1bMSAwIDAgMSA3MiA1MjguNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtNDc3LjcwMV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzNCAzNAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oNC4pIDIwLjY3NSBUagotLTI3OCBUSm0KLShNaXNjZWxsYW5lYSkgMTM5LjE3MiBUagotWzEgMCAwIDEgNzIgNzAxLjYwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuMTM0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE0LjExNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3OC4zNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1OC4wMDYgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKFQpIDEwLjUxODYgVGoKLTgwIFRKbQotKGFiKSAyMC4wOTA0IFRqCi0xMCBUSm0KLShsZSkgMTQuMzU3NiBUagotLTI3OCBUSm0KLShvZikgMTYuMjUxMyBUagotLTI3OCBUSm0KLShDb250ZW50cykgNzQuNTk0MyBUagotWzEgMCAwIDEgNzIgNjQ5LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjc0MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNy40NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzNy40NDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShMaW1pdGF0aW9ucykgNDUuOTQ3NSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0KSAyNi41NjAzIFRqCi1bMSAwIDAgMSAyNTUuMjMxIDYzNy40NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC4yMTIgLTYzNy40NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OS4xNTQgNjM3LjQ0MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDYzNy40NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNjM3LjQ0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA2MzcuNDQzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MzcuNDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjUuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjUuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUG9ydGFiaWxpdHkpIDQyLjA3MjEgVGoKLS0yNTAgVEptCi0oaXNzdWVzKSAyMy44MDA3IFRqCi1bMSAwIDAgMSAxNTguMzk1IDYyNS40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2My4zNzYgLTYyNS40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Mi4wMyA2MjUuNDg4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDYyNS40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNjI1LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA2MjUuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MjUuNDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTMuNTMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTMuNTMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUmVwb3J0aW5nKSAzOS44NTA0IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi1bMSAwIDAgMSAxNTAuOTkzIDYxMy41MzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS45NzUgLTYxMy41MzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni4xMTUgNjEzLjUzMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNjEzLjUzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC02MTMuNTMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDYxMy41MzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDYxMy41MzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwMS41NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYwMS41NzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShEaWQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmlnaHQpIDE4LjgxOTQgVGoKLS0yNTAgVEptCi0ocGFja2FnZT8pIDM3LjA2MDkgVGoKLVsxIDAgMCAxIDIxMi42MDIgNjAxLjU3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDMuMDg4NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE4Ljc3OCAtNjAxLjU3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI5LjEwOSA2MDEuNTc4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNjAxLjU3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC02MDEuNTc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDYwMS41NzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDYwMS41NzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4OS42MjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4OS42MjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShGdXJ0aGVyKSAyOS4zMjk5IFRqCi0tMjUwIFRKbQotKFJlYWRpbmcpIDMzLjIwNTMgVGoKLVsxIDAgMCAxIDE1NS4wNTggNTg5LjYyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjAzOSAtNTg5LjYyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjM2MSA1ODkuNjIzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU4OS42MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTg5LjYyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1ODkuNjIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDM0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1ODkuNjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS4xMzQ4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjguN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU4LjkwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGVzZSkgMjMuNzkwNyBUagotLTI1MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0odGhvdWdodHMpIDM0LjMyMTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obWluZS4pIDIyLjQxNTkgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdXIpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0obWlsZWFnZSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcnkpIDEyLjcyMjIgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU1Ni43NDRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0Ny4xMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyNC40OCBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oNC4xLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShMaW1pdGF0aW9ucykgMTEwLjE5MiBUagotLTI3OCBUSm0KLShvZikgMTkuNTAxNiBUagotLTI3OCBUSm0KLSh0aGUpIDMwLjk4NzcgVGoKLS0yNzggVEptCi0oY29tcHJlc3NlZCkgMTIxLjY5OSBUagotLTI3OCBUSm0KLShcMDAybGUpIDI5Ljg1MTUgVGoKLS0yNzggVEptCi0oZikgNi44NzkyOCBUagotMjAgVEptCi0ob3JtYXQpIDU3LjM4OTMgVGoKLVsxIDAgMCAxIDcyIDUyMC4yMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxMC41NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUwMi44OTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMS4wLlgpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDEzNy43NTMgNTAyLjg5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuNzUzIC01MDIuODkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzcuNzUzIDUwMi44OTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTQzLjQwNSA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My40MDUgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0My40MDUgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgwLjkuNSkgMjkuODg3OCBUagotWzEgMCAwIDEgMTczLjI5MyA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My4yOTMgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni40NTMgNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMTk0IDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk0IC01MDIuODkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgwLjkuMCkgMjkuODg3OCBUagotWzEgMCAwIDEgMjIzLjg4OCA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMy44ODggLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNy4wNDggNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1c2UpIDEzLjI4MDEgVGoKLS0zMTcgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGFjdGx5KSAyNC4zNDg2IFRqCi0tMzE3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxOCBUSm0KLShzYW1lKSAyMC40NzMxIFRqCi0tMzE3IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMxNyBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0zMTcgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE3IFRKbQotKG9yaWdpbmFsKSAzMC45OTM2IFRqCi0tMzE3IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uLCkgMjYuODM5MiBUagotWzEgMCAwIDEgNDU1LjgwMSA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NS44MDEgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1NS44MDEgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi0wLjEpIDUzLjc5OCBUagotWzEgMCAwIDEgNTA5LjU5OSA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOS41OTkgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwOS41OTkgNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTAyMyBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi03MiA0OTAuOTM4IFRkCi0oZGVjaXNpb24pIDMzLjIwNTMgVGoKLS0yMjIgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjIyIFRKbQotKG1hZGUpIDIxLjU3OSBUagotLTIyMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyMiBUSm0KLShpbnRlcmVzdHMpIDMzLjIwNTMgVGoKLS0yMjIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjIgVEptCi0oc3RhYmlsaXR5KSAzMi4xMDk1IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjAxIFRKbQotKENyZWF0aW5nKSAzNC4zMTEyIFRqCi0tMjIyIFRKbQotKHlldCkgMTIuMTc0MyBUagotLTIyMiBUSm0KLShhbm90aGVyKSAyOS44Nzc4IFRqCi0tMjIyIFRKbQotKGluY29tcGF0aWJsZSkgNTIuMDI0NyBUagotLTIyMSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjIyIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTIyMiBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yMjIgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yMjIgVEptCi0oY3JlYXRlKSAyMy43ODA3IFRqCi03MiA0NzguOTgzIFRkCi0oZnVydGhlcikgMjcuMTA4MiBUagotLTI1MCBUSm0KLShjb25mdXNpb24pIDM5LjI5MjUgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oZGlzcnVwdGlvbikgNDAuNDA4MyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0odXNlcnMuKSAyMi45NjM4IFRqCi1bMSAwIDAgMSA3MiA0NzYuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjcuMTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTcuMzk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0yMzQgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjI5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjMwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIyOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjMwIFRKbQotKHBhaW5sZXNzKSAzMi4wOTk1IFRqCi0tMjI5IFRKbQotKGRlY2lzaW9uLikgMzUuNjk2IFRqCi0tNjA2IFRKbQotKERlKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsb3BtZW50KSAzNy4wODA4IFRqCi0tMjMwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0yMzAgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yMjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjMwIFRKbQotKHJlbGVhc2UpIDI3LjY1NjIgVGoKLS0yMjkgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQwNy4zMTcgNDU3LjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDcuMzE3IC00NTcuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDcuMzE3IDQ1Ny4zOTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMC4xKSA1My43OTggVGoKLVsxIDAgMCAxIDQ2MS4xMTUgNDU3LjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjEuMTE1IC00NTcuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjMuNDAyIDQ1Ny4zOTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW4pIDcuNzUwOSBUagotLTIzMCBUSm0KLShBdWd1c3QpIDI4Ljc4MiBUagotLTIyOSBUSm0KLSgxOTk3KSAxOS45MjUyIFRqCi0tMjMwIFRKbQotKGhhcykgMTMuMjgwMSBUagotNzIgNDQ1LjQ0MSBUZAotKHNobykgMTMuODM4MSBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yMjYgVEptCi0oY29tcGxlKSAyOS4zMjk5IFRqCi0xNSBUSm0KLSh4aXRpZXMpIDIxLjU4OSBUagotLTIyNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjI1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyNiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yMjYgVEptCi0oZm9ybWF0KSAyNi41NjAzIFRqCi0tMjI2IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjI2IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMjUgVEptCi0oZG8pIDkuOTYyNiBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yMjYgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTIyNiBUSm0KLShhbmQsKSAxNi44NzY2IFRqCi0tMjMxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMjYgVEptCi0ocmV0cm9zcGVjdCwpIDQxLjc3MzIgVGoKLS0yMzAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjI2IFRKbQotKHVubmVjZXNzYXJ5KSA0OC42ODcyIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjA0IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjI2IFRKbQotKGFyZTopIDE0LjkzMzkgVGoKLVsxIDAgMCAxIDcyIDQ0My4yODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS4wNjEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNDE0LjIyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA0MTQuMjIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNDE0LjIyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC00MTQuMjIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNDE0LjIyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNjUgVEptCi0ocnVuLWxlbmd0aCkgNDEuNTA0MiBUagotLTI2NiBUSm0KLShlbmNvZGVyKSAzMS41MzE2IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjY5IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjY1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NiBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjY1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NiBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI2NSBUSm0KLSh0cmFuc2Zvcm1hdGlvbnMsKSA2NS4wMjU5IFRqCi0tMjY5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjY1IFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMjY2IFRKbQotKGlycmVsZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQuKSAxNC42NjQ5IFRqCi0tNzExIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI2NiBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotODYuOTQ0IDQwMi4yNjcgVGQKLShwdXJwb3NlKSAzMS41NDE2IFRqCi0tMzAxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTMwMSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzAxIFRKbQotKHByb3RlY3QpIDI3LjY2NjEgVGoKLS0zMDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAxIFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0zMDEgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMzAxIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0zMDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMzAxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tMzAxIFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0zMDEgVEptCi0oaW5wdXQ6KSAyMy4yNTI3IFRqCi0tNDEyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDEgVEptCi0oc3RyaW5nKSAyMi42OTQ4IFRqCi0tMzAxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzAxIFRKbQotKHJlcGVhdGVkKSAzMy43NDMzIFRqCi0tMzAxIFRKbQotKHN5bWJvbHMuKSAzNS43MDYgVGoKLS05MjcgVEptCi0oQnV0KSAxNC4zOTYgVGoKLTg2Ljk0NCAzOTAuMzEyIFRkCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjc0IFRKbQotKHN0ZXBzKSAxOS45MjUyIFRqCi0tMjc1IFRKbQotKFE2YSkgMTYuNTk3NyBUagotLTI3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3NCBUSm0KLShRNmIpIDE3LjE1NTYgVGoKLS0yNzUgVEptCi0oaW4pIDcuNzUwOSBUagotLTI3NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzQgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0yNzUgVEptCi0oQnVycm8pIDIzLjI0MjcgVGoKLTI1IFRKbQotKHdzLVdoZWVsKSA0MC4zODg0IFRqCi0xIFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjc1IFRKbQotKHRlY2huaWNhbCkgMzUuOTY1IFRqCi0tMjc0IFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI3NCBUSm0KLShcKFNSQy0xMjRcKSkgNDMuNzI1OSBUagotLTI3NSBUSm0KLShzaG8pIDEzLjgzODEgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjc0IFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjc0IFRKbQotKHJlcGVhdHMpIDI4LjIxNDEgVGoKLS0yNzUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi04Ni45NDQgMzc4LjM1NyBUZAotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0od2l0aG91dCkgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0eSkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKHNvcnRpbmcuKSAzMC4xNjY4IFRqCi1bMSAwIDAgMSAyNjkuNjE3IDM3OC4zNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk3LjYxNyAtMjEuNTg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTM1Ni43N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzNTYuNzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzNTYuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMzU2Ljc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzU2Ljc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI5MyBUSm0KLShyYW5kb21pc2F0aW9uKSA1Ny4wMDYgVGoKLS0yOTMgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjkzIFRKbQotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjk0IFRKbQotKHJlYWxseSkgMjIuNjg0OCBUagotLTI5MyBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjkzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yOTMgVEptCi0odGhlcmUuKSAyMi40MDU5IFRqCi0tODc5IFRKbQotKFVkaSkgMTQuOTQzOSBUagotLTI5NCBUSm0KLShNYW5iZXIpIDMwLjk4MzcgVGoKLS0yOTMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTMgVEptCi0oR2VuZSkgMjEuMDIxMSBUagotLTI5MyBUSm0KLShNeWVycykgMjUuNDU0NCBUagotLTI5MyBUSm0KLShwdWJsaXNoZWQpIDM4Ljc0NDYgVGoKLS0yOTQgVEptCi0oYSkgNC40MjMzOSBUagotLTI5MyBUSm0KLShzdWYpIDEyLjE3NDMgVGoKLTI1IFRKbQotKFwwMDJ4KSAxMC41MjA1IFRqCi04Ni45NDQgMzQ0LjgxNSBUZAotKGFycmF5KSAyMC40NjMyIFRqCi0tMjM4IFRKbQotKGNvbnN0cnVjdGlvbikgNDkuMjU1MSBUagotLTIzOSBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yMzggVEptCi0oYSkgNC40MjMzOSBUagotLTIzOCBUSm0KLShmZSkgNy43NDA5NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMzkgVEptCi0oeWVhcnMpIDIxLjAyMTEgVGoKLS0yMzggVEptCi0oYmFjaywpIDIxLjMgVGoKLS0yNDEgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yMzggVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjM4IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjM5IFRKbQotKGVtcGxvKSAyNC45MDY1IFRqCi0xMCBUSm0KLSh5ZWQpIDE0LjM4NiBUagotLTIzOCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjM4IFRKbQotKHNvcnQpIDE0Ljk0MzkgVGoKLS0yMzkgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzOCBUSm0KLShibG9jaywpIDI0LjYyNzUgVGoKLS0yNDEgVEptCi0obm8pIDkuOTYyNiBUagotLTIzOCBUSm0KLShtYXR0ZXIpIDI1LjQ1NDQgVGoKLS0yMzggVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMzkgVEptCi0ocmVwZXRpdGkpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLCkgNi45MTQwNCBUagotODYuOTQ0IDMzMi44NiBUZAotKGluKSA3Ljc1MDkgVGoKLS0yMjkgVEptCi0oT1woTikgMTcuNzAzNSBUagotLTIzMCBUSm0KLShsb2cpIDEyLjczMjIgVGoKLS0yMjkgVEptCi0oTlwpKSAxMC41MTA1IFRqCi0tMjMwIFRKbQotKHRpbWUuKSAyMC4yMDQyIFRqCi0tNjA2IFRKbQotKFN1YnNlcXVlbnQpIDQ1LjkzNzUgVGoKLS0yMzAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTIyOSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjMwIFRKbQotKEspIDcuMTkzIFRqCi0xNSBUSm0KLSh1bmloaWspIDI1LjQ2NDQgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTIyOSBUSm0KLShTYWRha2FuZSkgMzguMTc2NyBUagotLTIyOSBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yMzAgVEptCi0ocHJvZHVjZWQpIDM3LjA3MDggVGoKLS0yMjkgVEptCi0oYSkgNC40MjMzOSBUagotLTIzMCBUSm0KLShkZXJpKSAxNS40OTE4IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGF0aSkgOS45NjI2IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yMjkgVEptCi0oT1woTikgMTcuNzAzNSBUagotLTIzMCBUSm0KLShcKGxvZykgMTYuMDQ5NyBUagotLTIyOSBUSm0KLShOXCleMlwpKSAyMy40ODE4IFRqCi0tMjMwIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotODYuOTQ0IDMyMC45MDUgVGQKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLSh1c3VhbGx5KSAyOC43ODIgVGoKLS0yNTAgVEptCi0ob3V0cGVyZm9ybXMpIDQ4LjY5NzIgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKE1hbmJlcikgMzAuOTgzNyBUagotMjAgVEptCi0oLU15ZXJzKSAyOC43NzIgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtLikgNDEuMjM1MiBUagotWzEgMCAwIDEgMzE0LjE4OSAzMjAuOTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0Mi4xODkgLTExLjc4ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwOS4xMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAyOTkuMzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEkpIDMuMzE3NTUgVGoKLS0yNDggVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNDggVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI0OCBUSm0KLShjaGFuZ2VkKSAzMy4xOTU0IFRqCi0tMjQ4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDggVEptCi0oU2FkYWthbmUnKSA0MS40OTQyIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjQ4IFRKbQotKGFsZ29yaXRobSwpIDQxLjIzNTIgVGoKLS0yNDkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjQ4IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNDggVEptCi0oXDAwMm5kKSAxNS41MDE4IFRqCi0tMjQ4IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjQ4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNDggVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3ZXIpIDE0LjkzMzkgVGoKLS0yNDggVEptCi0odGhhbikgMTcuMTU1NiBUagotWzEgMCAwIDEgMzkyLjQ0NCAyOTkuMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Mi40NDQgLTI5OS4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi40NDQgMjk5LjMxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDIyLjMzMiAyOTkuMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMi4zMzIgLTI5OS4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMi4zMzIgMjk5LjMxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjQ4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpc3RpbmcpIDI3LjEyODIgVGoKLS0yNDggVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjQ4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0OCBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi04Ni45NDQgMjg3LjM2MyBUZAotKGlucHV0cywpIDI2Ljg0OTIgVGoKLS0zNzAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ2IFRKbQotKHJhbmRvbWlzYXRpb24pIDU3LjAwNiBUagotLTM0NiBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0zNDUgVEptCi0ocHJvdGVjdHMpIDMxLjU0MTYgVGoKLS0zNDYgVEptCi0oYWRlcXVhdGVseSkgNDMuMTU4IFRqCi0tMzQ1IFRKbQotKGFnKSA5LjQwNDY5IFRqCi01IFRKbQotKGFpbnN0KSAxOC44MTk0IFRqCi0tMzQ2IFRKbQotKGJhZCkgMTQuMzg2IFRqCi0tMzQ2IFRKbQotKGNhc2VzLikgMjMuNTExNyBUagotLTExOTQgVEptCi0oSSkgMy4zMTc1NSBUagotLTM0NSBUSm0KLShkaWRuJykgMjEuMDMxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zNDYgVEptCi0odGhpbmspIDIwLjQ4MzEgVGoKLS0zNDYgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zNDUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzQ2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNDYgVEptCi0oZ29vZCkgMTkuOTI1MiBUagotODYuOTQ0IDI3NS40MDggVGQKLSh0cmFkZW9mKSAyOC4yMTQxIFRqCi0yNSBUSm0KLShmKSAzLjMxNzU1IFRqCi0tMjYyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjEgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlLikgNi45MTQwNCBUagotLTY5MCBUSm0KLShQKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShhcnRseSkgMTguMjYxNCBUagotLTI2MiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjIgVEptCi0oZHVlKSAxNC4zODYgVGoKLS0yNjEgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0KSAxMS42MTY0IFRqCi0tMjYxIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNjIgVEptCi0oSSkgMy4zMTc1NSBUagotLTI2MSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNjIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjYyIFRKbQotKFwwMDNvb2RlZCkgMjkuODg3OCBUagotLTI2MSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjYyIFRKbQotKGVtYWlsKSAyMi4xMzY5IFRqCi0tMjYxIFRKbQotKGNvbXBsYWludHMpIDQzLjcyNTkgVGoKLS0yNjIgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDQ3OS41NTcgMjc1LjQwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzkuNTU3IC0yNzUuNDA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzkuNTU3IDI3NS40MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMC4xKSA1My43OTggVGoKLVsxIDAgMCAxIDUzMy4zNTUgMjc1LjQwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzMuMzU1IC0yNzUuNDA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzMuMzU1IDI3NS40MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oJykgMy4zMTc1NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotODYuOTQ0IDI2My40NTMgVGQKLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0ocmVwZXRpdGkpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tMjUwIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjUwIFRKbQotKHBlcmhhcHMpIDMwLjk4MzcgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaXNuJykgMTQuOTQzOSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0ocmVhbCkgMTQuOTMzOSBUagotLTI1MCBUSm0KLShpbnB1dHMuKSAyNi44NDkyIFRqCi1bMSAwIDAgMSA3MiAyNjEuMjk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTEuNjY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjQxLjg2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9iYWJseSkgMzUuOTc0OSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODggVEptCi0oYmVzdCkgMTYuMDQ5NyBUagotLTI4OSBUSm0KLShsb25nLXRlcm0pIDM5LjI5MjUgVGoKLS0yODkgVEptCi0oc29sdXRpb24sKSAzNC42MDAxIFRqCi0tMjk4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI4OCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjg5IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODkgVEptCi0oaW5jb3Jwb3JhdGVkKSA1MC4zNTEgVGoKLS0yODggVEptCi0oaW50bykgMTUuNTAxOCBUagotLTI4OSBUSm0KLSgwLjkuNSkgMTkuOTI1MiBUagotLTI4OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4OCBUSm0KLShhYm8pIDE0LjM4NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNCBUSm0KLShlLCkgNi45MTQwNCBUagotLTI5OCBUSm0KLShpcykgNi42NDUwNSBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg4IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotODYuOTQ0IDIyOS45MTEgVGQKLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tNDUxIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTQ1MiBUSm0KLShpbml0aWFsbHkpIDMxLjAwMzYgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS01MDEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS00NTIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00NTEgVEptCi0oYmFjaykgMTguODA5NCBUagotLTQ1MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDUxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS00NTEgVEptCi0oT1woTikgMTcuNzAzNSBUagotLTQ1MiBUSm0KLShcKGxvZykgMTYuMDQ5NyBUagotLTQ1MSBUSm0KLShOXCleMlwpKSAyMy40ODE4IFRqCi0tNDUxIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTQ1MiBUSm0KLShpZikgNi4wODcxNSBUagotLTQ1MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NTIgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS00NTEgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tNDUxIFRKbQotKGdldHMpIDE2LjA0OTcgVGoKLS00NTIgVEptCi0oaW50bykgMTUuNTAxOCBUagotODYuOTQ0IDIxNy45NTYgVGQKLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0aWVzLikgMzQuMDQyMiBUagotWzEgMCAwIDEgNzIgMjE3Ljg1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjQ4NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0xOTYuMzY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDE5Ni4zNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAxOTYuMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTE5Ni4zNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxOTYuMzY5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI5OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjk5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI5OSBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yOTkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzAwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjk5IFRKbQotKGRlc2lnbmVkKSAzNS40MTcgVGoKLS0yOTkgVEptCi0odG8pIDcuNzUwOSBUagotLTI5OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI5OSBUSm0KLShoYW5kbGVkKSAzMS41NDE2IFRqCi0tMjk5IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yOTkgVEptCi0oYSkgNC40MjMzOSBUagotLTI5OSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzEyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjk5IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yOTkgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI5OSBUSm0KLShoYWQpIDE0LjM4NiBUagotLTI5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk5IFRKbQotKGp1bXApIDIwLjQ4MzEgVGoKLS0zMDAgVEptCi0odGhvdWdoKSAyNy42NzYxIFRqCi0tMjk5IFRKbQotKHNvbWUpIDIxLjAzMSBUagotODYuOTQ0IDE4NC40MTQgVGQKLShob29wcykgMjMuODAwNyBUagotLTI3OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjc3IFRKbQotKHByb2R1Y2UpIDMyLjA4OTUgVGoKLS0yNzggVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNzggVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKFwwMDJjaWVudCkgMjQuOTA2NSBUagotLTI3NyBUSm0KLShpbXBsZW1lbnRhdGlvbikgNjIuNTQ1MiBUagotLTI3OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3OCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotLTc4NiBUSm0KLShJdCcpIDkuNDA0NjkgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNzggVEptCi0oYSkgNC40MjMzOSBUagotLTI3NyBUSm0KLShiaXQpIDEwLjUyMDUgVGoKLS0yNzggVEptCi0oaGFpcnkpIDIwLjQ3MzEgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03ODYgVEptCi0oVCkgNi4wODcxNSBUagotMzUgVEptCi0ocnkpIDguMjk4ODUgVGoKLS0yNzggVEptCi0ocGFzc2luZykgMjkuODg3OCBUagotWzEgMCAwIDEgNDY4LjI2OSAxODQuNDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OC4yNjkgLTE4NC40MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OC4yNjkgMTg0LjQxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkZWNvbXByZXNzLmMpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDU0MCAxODQuNDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTg0LjQxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDE3Mi40NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGhyb3VnaCkgMzAuOTkzNiBUagotLTI2OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjggVEptCi0oQykgNi42NDUwNSBUagotLTI2OCBUSm0KLShwcmVwcm9jZXNzb3IpIDUwLjg5ODkgVGoKLS0yNjkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjggVEptCi0oeW91JykgMTguMjYxNCBUagotMTAgVEptCi0obGwpIDUuNTM5MjEgVGoKLS0yNjggVEptCi0oc2VlKSAxMi43MjIyIFRqCi0tMjY4IFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0yNjggVEptCi0oSSkgMy4zMTc1NSBUagotLTI2OCBUSm0KLShtZWFuLikgMjQuMDY5NiBUagotLTcyOSBUSm0KLShNdWNoKSAyMy4yNDI3IFRqCi0tMjY4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2OCBUSm0KLShjb21wbGUpIDI5LjMyOTkgVGoKLTE1IFRKbQotKHhpdHkpIDE1LjUwMTggVGoKLS0yNjggVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNjggVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI2OCBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjY4IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2lkZWQpIDIyLjEzNjkgVGoKLS0yNjkgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi04Ni45NDQgMTYwLjUwMyBUZAotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjUwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHJlY29yZGVkKSAzNC44NDkyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMzY4Ljc1NCAxNjAuNTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Ni43NTQgLTIxLjU4NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0xMzguOTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDEzOC45MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAxMzguOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTEzOC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxMzguOTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFuKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKEFkbGVyKSAyMi42ODQ4IFRqCi0yMCBUSm0KLSgtMzIpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oY2hlY2tzdW0sKSA0Mi4zMzExIFRqCi0tMjUwIFRKbQotKHJhdGhlcikgMjMuMjMyOCBUagotLTI1MCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oQ1JDMzIpIDI5Ljg5NzggVGoKLS0yNTAgVEptCi0oY2hlY2tzdW0sKSA0Mi4zMzExIFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY29tcHV0ZS4pIDM2LjgwMTggVGoKLVsxIDAgMCAxIDQyNC45MzQgMTM4LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTIuOTM0IC0xMS43ODgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjcuMTI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTcuMzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSXQpIDYuMDg3MTUgVGoKLS0zNDkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0zNDkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNDkgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlyKSAxMC41MTA1IFRqCi0tMzQ4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDkgVEptCi0oc2F5KSAxMy4yODAxIFRqCi0tMzQ5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zNDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAyMDEuOTc5IDExNy4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDEuOTc5IC0xMTcuMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45NzkgMTE3LjMzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMzEuODY3IDExNy4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzEuODY3IC0xMTcuMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNS4zNDIgMTE3LjMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdCkgMjYuNTYwMyBUagotLTM0OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zNDkgVEptCi0oZnJvemVuKSAyNS40NDQ1IFRqCi0tMzQ4IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTM0OSBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMzQ5IFRKbQotKHByb3Blcmx5KSAzMy43NTMzIFRqCi0tMzQ5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ5IFRKbQotKGZ1bGx5KSAxOC44MTk0IFRqCi0tMzQ5IFRKbQotKHVuZGVyc3Rvb2QpIDQ0LjI3MzggVGoKLS0zNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ5IFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLTcyIDEwNS4zNzUgVGQKLShjb25zZXF1ZW5jZXMpIDU0Ljc3NDQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZG9pbmcpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0oc28uKSAxMS4zNDc0IFRqCi1bMSAwIDAgMSA3MiAxMDMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05My41ODY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4My43ODgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEltcHJvKSAyNC4zNDg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVtZW50cykgMjguMjI0IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShpbmNvcnBvcmF0ZSkgNDUuMzY5NyBUagotLTI1MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKDAuOS4wLCkgMjIuNDE1OSBUagotLTI1MCBUSm0KLShkZXNwaXRlKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0LCkgMjkuMDUwOSBUagotLTI1MCBUSm0KLShhcmU6KSAxNC45MzM5IFRqCi1bMSAwIDAgMSA3MiA4MS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzAuNzc5Nl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzNSAzNQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTE2LjMyOCAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4Mi40IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTguNzI4IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTWlzY2VsbGFuZWEpIDQ4LjEzOTMgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ5LjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC03LjA5MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zMS41MTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShTaW5nbGUpIDI1LjQ2NDQgVGoKLS0yMDIgVEptCi0oYXJyYXkpIDIwLjQ2MzIgVGoKLS0yMDEgVEptCi0oaW1wbGVtZW50YXRpb24pIDYyLjU0NTIgVGoKLS0yMDIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjAxIFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzZSkgMTYuMDM5OCBUagotLTIwMiBUSm0KLShCV1QpIDIyLjEzNjkgVGoKLTc0IFRKbQotKC4pIDIuNDkwNjUgVGoKLS00MDMgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTIwMiBUSm0KLShzaWduaVwwMDJjYW50bHkpIDQ5LjI2NTEgVGoKLS0yMDEgVEptCi0oc3BlZWRzKSAyNi41NjAzIFRqCi0tMjAyIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yMDIgVEptCi0oZGVjb21wcmVzc2lvbiwpIDYyLjI1NjMgVGoKLS0yMTEgVEptCi0ocHJlc3VtYWJseSkgNDYuNDg1NSBUagotLTIwMiBUSm0KLShiZWNhdXNlKSAzMS41MzE2IFRqCi04Ni45NDQgNjk4LjA4MiBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHJlZHVjZXMpIDMwLjQyNTggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjYWNoZSkgMjIuNjc0OSBUagotLTI1MCBUSm0KLShtaXNzZXMuKSAyOS4wNjA5IFRqCi1bMSAwIDAgMSAyNDAuNDk2IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY4LjQ5NiAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLS0zMTQgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNlKSAxNi4wMzk4IFRqCi0tMzE1IFRKbQotKE1URikgMjAuNDgzMSBUagotLTMxNCBUSm0KLSh0cmFuc2Zvcm0pIDM4LjczNDYgVGoKLS0zMTUgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzE0IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oTVRGKSAyMC40ODMxIFRqCi0tMzE0IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMuKSAyMi45NjM4IFRqCi0tNTA0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTMxNCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMTQgVEptCi0oaW1wbGVtZW50YXRpb24pIDYyLjU0NTIgVGoKLS0zMTUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMTQgVEptCi0oYmFzZWQpIDIyLjY4NDggVGoKLS0zMTUgVEptCi0ob24pIDkuOTYyNiBUagotLTMxNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTUgVEptCi0obm90aW9uKSAyNS40NjQ0IFRqCi0tMzE0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKHNsaWRpbmcpIDI3LjEyODIgVGoKLTg2Ljk0NCA2NjQuMjA5IFRkCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMuKSAyMi45NjM4IFRqCi1bMSAwIDAgMSAxNTMuOTMyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODEuOTMyMSAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMC45LjApIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE1Mi42OTcgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTIuNjk3IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTUuNDEyIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obm8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNzIgVEptCi0ocmVhZHMpIDIxLjAyMTEgVGoKLS0yNzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzIgVEptCi0od3JpdGVzKSAyNC4zNDg2IFRqCi0tMjczIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNzIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMjgyLjY4IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgyLjY4IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODIuNjggNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVhZCkgMjkuODg3OCBUagotWzEgMCAwIDEgMzEyLjU2OCA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMi41NjggLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNS4yODIgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzMyLjM4MyA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMi4zODMgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMi4zODMgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmd3JpdGUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM2OC4yNDggNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjguMjQ4IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjguMjQ4IDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOykgMi43Njk2IFRqCi0tMjg0IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjcyIFRKbQotKDAuMSkgMTIuNDUzMyBUagotLTI3MyBUSm0KLSh1c2VkKSAxOC4yNjE0IFRqCi1bMSAwIDAgMSA0NDEuODgyIDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQxLjg4MiAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQxLjg4MiA2NDIuMjkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHB1dGMpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDQ2NS43OTIgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjUuNzkyIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjguNTA3IDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ4NS42MDcgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODUuNjA3IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODUuNjA3IDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ2V0YykgMjMuOTEwMiBUagotWzEgMCAwIDEgNTA5LjUxNyA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOS41MTcgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwOS41MTcgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzU1IFRKbQotKER1aCEpIDIwLjQ3MzEgVGoKLTg2Ljk0NCA2MzAuMzM2IFRkCi0oVykgOS40MDQ2OSBUagotODAgVEptCi0oZWxsLCkgMTIuNDUzMyBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0obGkpIDUuNTM5MjEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShsZWFybi4pIDIyLjQwNTkgVGoKLVsxIDAgMCAxIDE4NC4yNDggNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTIuMjQ4IC0xMi4xMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTguMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEZ1cnRoZXIpIDI5LjMyOTkgVGoKLS0zMDQgVEptCi0oYWhlYWQsKSAyNS43MjM0IFRqCi0tMzE4IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzA1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMzA0IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzA1IFRKbQotKG5pY2UpIDE2LjU5NzcgVGoKLS0zMDQgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMwNCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMzA0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDUgVEptCi0oZG8pIDkuOTYyNiBUagotLTMwNCBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLS0zMDUgVEptCi0oYWNjZXNzKSAyNS40NDQ1IFRqCi0tMzA0IFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0zMDUgVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS05NDYgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTMwNSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMzA0IFRKbQotKHJlcXVpcmUpIDI4LjIxNDEgVGoKLS0zMDQgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMzA1IFRKbQotKGNhcmVmdWwpIDI3LjY1NjIgVGoKLS0zMDQgVEptCi0oZGVzaWduKSAyNi4wMTIzIFRqCi0tMzA1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiA1OTYuNDYzIFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0cy4pIDMyLjkyNjQgVGoKLVsxIDAgMCAxIDcyIDU5NC4zMDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4NC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2MS43MSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oNC4yLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShQKSAxMy43NzkyIFRqCi00MCBUSm0KLShvcikgMjAuNjU4NSBUagotLTIwIFRKbQotKHRhYmlsaXR5KSA2Ni41ODIzIFRqCi0tMjc4IFRKbQotKGlzc3VlcykgNjQuMzA5OSBUagotWzEgMCAwIDEgNzIgNTU3LjQzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQ3LjQ3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTM5Ljc5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBZnRlcikgMjEuMDIxMSBUagotLTI1MCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oY29uc2lkZXJhdGlvbiwpIDU2LjE2OTEgVGoKLS0yNTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRlY2lkZWQpIDMwLjk4MzcgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi1bMSAwIDAgMSAzMDMuMjMxIDUzOS43OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAzLjIzMSAtNTM5Ljc5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAzLjIzMSA1MzkuNzkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF1dG9jb25mKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAzNTEuMDUyIDUzOS43OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUxLjA1MiAtNTM5Ljc5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUzLjU0MiA1MzkuNzkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY29uXDAwMmd1cmUpIDM3LjYyODcgVGoKLS0yNTAgVEptCi0oMC45LjUpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oMS4wLikgMTQuOTQzOSBUagotWzEgMCAwIDEgNzIgNTM3LjYzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI3LjY3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE3Ljg3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdXRvY29uZikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSA1MTcuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTUxNy44NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44MjEgNTE3Ljg3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tNTAyIFRKbQotKGFkbWlyYWJsZSkgMzkuODQwNCBUagotLTQ1MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTQ1MiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob25kZXJmdWwpIDMzLjc1MzMgVGoKLS00NTIgVEptCi0odGhvdWdoKSAyNy42NzYxIFRqCi0tNDUyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tNDUyIFRKbQotKGlzLCkgOS4xMzU3IFRqCi0tNTAyIFRKbQotKG1haW5seSkgMjcuNjc2MSBUagotLTQ1MiBUSm0KLShhc3Npc3RzKSAyNS40NjQ0IFRqCi0tNDUyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS00NTIgVEptCi0ocG9ydGFiaWxpdHkpIDQxLjUxNDIgVGoKLS00NTIgVEptCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS00NTIgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTQ1MiBUSm0KLShVbml4LWxpaykgMzMuNzYzMyBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotNzIgNTA1LjkyIFRkCi0ocGxhdGZvcm1zLikgNDAuNjc3MyBUagotLTEzOTggVEptCi0oQnV0KSAxNC4zOTYgVGoKLVsxIDAgMCAxIDE0NC43ODQgNTA1LjkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0NC43ODQgLTUwNS45Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ0Ljc4NCA1MDUuOTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE3NC42NzIgNTA1LjkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC42NzIgLTUwNS45Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc4LjQ1NSA1MDUuOTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZG9lc24nKSAyNi41NjAzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zODAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM3OSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMzgwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTM4MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTM4MCBUSm0KLShwb3J0YWJpbGl0eSkgNDEuNTE0MiBUagotLTM3OSBUSm0KLShwcm9ibGVtcykgMzcuMDgwOCBUagotLTM4MCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzgwIFRKbQotKFVuaXg7KSAyMi42OTQ4IFRqCi0tNDQ0IFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0zODAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHRpZXMpIDMxLjU1MTYgVGoKLTcyIDQ5My45NjQgVGQKLShhcHBlYXIpIDI2LjU1MDMgVGoKLS0yOTcgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjk2IFRKbQotKHBvKSA5Ljk2MjYgVGoKLS0xIFRKbQotKHIpIDMuMzE3NTUgVGoKLTEgVEptCi0odGluZykgMTUuNTAxOCBUagotLTI5NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NyBUSm0KLShNYWMsKSAyMC4xOTQyIFRqCi0tMzA4IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0oTWljcm9zb2Z0JykgNDIuNjEgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yOTYgVEptCi0ob3BlcmF0aW5nKSAzNy42Mjg3IFRqCi0tMjk3IFRKbQotKHN5c3RlbXMuKSAzNC4wNDIyIFRqCi1bMSAwIDAgMSAzNjEuMzM5IDQ5My45NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjMzOSAtNDkzLjk2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYxLjMzOSA0OTMuOTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF1dG9jb25mKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0MDkuMTYgNDkzLjk2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDkuMTYgLTQ5My45NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMi4xMTYgNDkzLjk2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI5NyBUSm0KLShoZWxwKSAxNy4xNTU2IFRqCi0tMjk2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhvc2UpIDIxLjAzMSBUagotLTI5NyBUSm0KLShjYXNlcywpIDIzLjUxMTcgVGoKLS0zMDggVEptCi0oYW5kKSAxNC4zODYgVGoKLTcyIDQ4Mi4wMDkgVGQKLShicmluZ3MpIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHdob2xlKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGxvYWQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGNvbXBsZSkgMjkuMzI5OSBUagotMTUgVEptCi0oeGl0eSkgMTUuNTAxOCBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNDc5Ljg1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDY5Ljg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NjAuMDkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1vc3QpIDIwLjQ4MzEgVGoKLS0zOTIgVEptCi0ocGVvcGxlKSAyNi41NjAzIFRqCi0tMzkyIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM5MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM5MiBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMzkyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTIgVEptCi0oY29tcGlsZSkgMzIuMDk5NSBUagotLTM5MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM5MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM5MiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzkzIFRKbQotKHVuZGVyKSAyMi42ODQ4IFRqCi0tMzkyIFRKbQotKFVuaXgpIDE5LjkyNTIgVGoKLS0zOTIgVEptCi0oc3RyYWlnaHQpIDI5Ljg4NzggVGoKLS0zOTIgVEptCi0ob3V0LW9mLXRoZS1ib3gsKSA2MC41OTI1IFRqCi0tNDI4IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzkyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTMgVEptCi0oc3BlYWssKSAyNS4xNzU1IFRqCi03MiA0NDguMTM2IFRkCi0oZXNwZWNpYWxseSkgMzkuODQwNCBUagotLTI1MCBUSm0KLShpZikgNi4wODcxNSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjUwIFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgNDQ1Ljk3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM2LjAxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI2LjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGVyZSkgMjMuMjMyOCBUagotLTI1OSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTggVEptCi0oYSkgNC40MjMzOSBUagotLTI1OSBUSm0KLShjb3VwbGUpIDI2LjU2MDMgVGoKLS0yNTggVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDE1OS41NjEgNDI2LjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNTYxIC00MjYuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTkuNTYxIDQyNi4yMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX19pbmxpbmVfXykgNTkuNzc1NiBUagotWzEgMCAwIDEgMjE5LjMzNyA0MjYuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOS4zMzcgLTQyNi4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS45MTMgNDI2LjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkaXJlY3RpKSAyNS40NTQ0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjU5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU5IFRKbQotKGNvZGUuKSAyMS4zIFRqCi0tNjcxIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjU5IFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yNTggVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDM1Mi41ODcgNDI2LjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTIuNTg3IC00MjYuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTIuNTg3IDQyNi4yMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ2NjKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAzNzAuNTIgNDI2LjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzAuNTIgLTQyNi4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC41MiA0MjYuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjU5IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1OCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1OSBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTkgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi0tMjU5IFRKbQotKHRoZW0uKSAyMi40MTU5IFRqCi0tNjcxIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjU5IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKHJlKSA3Ljc0MDk0IFRqCi03MiA0MTQuMjYzIFRkCi0obm90KSAxMi43MzIyIFRqCi0tMjc5IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yNzkgVEptCi0oR05VKSAyMS41NzkgVGoKLS0yNzkgVEptCi0oQywpIDkuMTM1NyBUagotLTI3OSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjc5IFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yNzkgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI3OSBUSm0KLShzaG91bGRuJykgMzQuODY5MSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjc5IFRKbQotKHNlZSkgMTIuNzIyMiBUagotLTI3OSBUSm0KLSh0aGVtKSAxOS45MjUyIFRqCi0tMjc5IFRKbQotKGF0KSA3LjE5MyBUagotLTI3OSBUSm0KLShhbGwuKSAxMi40NTMzIFRqCi0tNzk0IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjc5IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNzkgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI3OSBUSm0KLShkb2VzLCkgMjAuNzUyMSBUagotLTI4NiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNzkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjc5IFRKbQotKHJlYXNvbiwpIDI4LjQ5MyBUagotLTI4NyBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLS0yNzkgVEptCi0odGhlbSkgMTkuOTI1MiBUagotLTI3OSBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDAyLjMwOCBUZAotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjgzIFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI4MyBUSm0KLSh0aGVtLCkgMjIuNDE1OSBUagotLTI5MSBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLVsxIDAgMCAxIDE2NC4xNjcgNDAyLjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuMTY3IC00MDIuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuMTY3IDQwMi4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oI2RlZmluZSkgNDEuODQyOSBUagotWzEgMCAwIDEgMjA2LjAxIDQwMi4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjgxOTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguODI5IC00MDIuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguODI5IDQwMi4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX19pbmxpbmVfXykgNTkuNzc1NiBUagotWzEgMCAwIDEgMjY4LjYwNSA0MDIuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OC42MDUgLTQwMi4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MS40MjUgNDAyLjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjgzIFRKbQotKGJlKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSAyOTQuMjIgNDAyLjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTQuMjIgLTQwMi4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC4yMiA0MDIuMzA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC8pIDUuOTc3NTYgVGoKLTMwMC4xOTcgNDAwLjU2NSBUZAotKCopIDUuOTc3NTYgVGoKLS02MDAgVEptCi0oKikgNS45Nzc1NiBUagotMzE4LjEzIDQwMi4zMDggVGQKLSgvKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzMjQuMTA4IDQwMi4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI0LjEwOCAtNDAyLjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI0LjEwOCA0MDIuMzA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS04MTggVEptCi0oT25lKSAxNi41OTc3IFRqCi0tMjgzIFRKbQotKGVhc3kpIDE3LjcwMzUgVGoKLS0yODMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjgzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODMgVEptCi0oZG8pIDkuOTYyNiBUagotLTI4MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODMgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MyBUSm0KLShjb21waWxlKSAzMi4wOTk1IFRqCi0tMjgzIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yODMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgzIFRKbQotKFwwMDNhZykgMTQuOTQzOSBUagotWzEgMCAwIDEgNzIgMzkwLjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzkwLjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzkwLjM1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtRF9faW5saW5lX189KSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDM5MC4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMzkwLjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ5LjcwOSAzOTAuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHVuZGVyc3Rvb2QpIDQ0LjI3MzggVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi0tMjUwIFRKbQotKFVuaXgpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oY29tcGlsZXJzLikgNDEuNzgzMSBUagotWzEgMCAwIDEgNzIgMzg4LjE5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc4LjIzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzY4LjQzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTMyMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMjEgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0zMjIgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMSBUSm0KLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0aWVzLCkgMzQuMDQyMiBUagotLTMzOSBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0zMjEgVEptCi0oY29tcGlsaW5nKSA0MC40MDgzIFRqCi0tMzIxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjIgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKGhlKSA5LjQwNDY5IFRqCi0tMzIyIFRKbQotKG1hY3JvKSAyNC44OTY1IFRqCi1bMSAwIDAgMSAzMTAuMjk1IDM2OC40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEwLjI5NSAtMzY4LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEwLjI5NSAzNjguNDM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUklDVF9BTlNJKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzOTMuOTgxIDM2OC40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkzLjk4MSAtMzY4LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk3LjE4IDM2OC40MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGVcMDAybmVkLikgMzEuODIwNSBUagotLTUyNCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMzIxIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTMyMSBUSm0KLShlbmFibGUpIDI2LjAwMjQgVGoKLS0zMjEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzIyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDM1Ni40OCBUZAotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsZCkgMTUuNTAxOCBUagotLTMyMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjEgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMyMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzIxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMjEgVEptCi0oc3RyaWN0bHkpIDI3LjY3NjEgVGoKLS0zMjEgVEptCi0oQU5TSSkgMjMuMjQyNyBUagotLTMyMSBUSm0KLShjb21wbGlhbnQpIDM5Ljg1MDQgVGoKLS0zMjIgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudC4pIDQzLjQ0NjkgVGoKLS0xMDQ3IFRKbQotKEJ1aWxkaW5nKSAzNC44NzkxIFRqCi0tMzIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyMSBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzIyIFRKbQotKGl0c2VsZikgMTkuOTI1MiBUagotLTMyMSBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMjEgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzIxIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzIxIFRKbQotKGRhbmdlcm91cykgNDAuOTQ2MyBUagotLTMyMiBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgMzQ0LjUyNSBUZAotKG5vdCkgMTIuNzMyMiBUagotLTI2MCBUSm0KLShzdXBwb3J0ZWQsKSA0MS43ODMxIFRqCi0tMjYzIFRKbQotKHNpbmNlKSAyMC40NzMxIFRqCi0tMjYwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MCBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDIwNC40OTggMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuNDk4IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuNDk4IDM0NC41MjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIzNC4zODYgMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuMzg2IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuMzg2IDM0NC41MjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oJykgMy4zMTc1NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI2MCBUSm0KLShjaGVja3MpIDI3LjEwODIgVGoKLS0yNjAgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluc3QpIDE4LjgxOTQgVGoKLS0yNjEgVEptCi0oY29tcHJlc3NpKSA0MC4zOTgzIFRqCi0xIFRKbQotKG5nKSA5Ljk2MjYgVGoKLS0yNjEgVEptCi0oZGlyZWN0b3JpZXMsKSA0NC41NDI4IFRqCi0tMjYyIFRKbQotKHN5bWJvbGljKSAzNi41MzI5IFRqCi0tMjYxIFRKbQotKGxpbmtzLCkgMjEuODY3OSBUagotLTI2MiBUSm0KLShkZSkgOS40MDQ2OSBUagotMjUgVEptCi0odmljZXMsKSAyMi45NjM4IFRqCi0tMjYzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYwIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi03MiAzMzIuNTcgVGQKLShub3QtcmVhbGx5LWEtXDAwMmxlKSA2Mi41MjUzIFRqCi0tMjUwIFRKbQotKGVudGl0aWVzLikgMzEuMjcyNiBUagotLTYyMCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGNvdWxkKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKGNhdXNlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKFwwMDJsZXN5c3RlbSkgNDAuNDA4MyBUagotLTI1MCBUSm0KLShjb3JydXB0aW9uISkgNDQuODIxNyBUagotWzEgMCAwIDEgNzIgMzMwLjQxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIwLjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTAuNjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE9uZSkgMTYuNTk3NyBUagotLTM5MiBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTM5MSBUSm0KLSh0aGluZzopIDIzLjI1MjcgVGoKLS01OTQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zOTEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzkyIFRKbQotKGNyZWF0ZSkgMjMuNzgwNyBUagotLTM5MSBUSm0KLShhKSA0LjQyMzM5IFRqCi1bMSAwIDAgMSAyMTAuODc5IDMxMC42NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjg3OSAtMzEwLjY1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjg3OSAzMTAuNjUyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDAuNzY3IDMxMC42NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjc2NyAtMzEwLjY1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ0LjY2OSAzMTAuNjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJpbmFyeSkgMjUuNDU0NCBUagotLTM5MiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zOTEgVEptCi0ocHVibGljKSAyNC45MDY1IFRqCi0tMzkyIFRKbQotKGRpc3RyaWIpIDI1LjQ2NDQgVGoKLTIwIFRKbQotKHV0aW9uLCkgMjIuOTczOCBUagotLTQyNyBUSm0KLShwbGVhc2UpIDI0Ljg5NjUgVGoKLS0zOTIgVEptCi0oY29uc2lkZXIpIDMzLjc1MzMgVGoKLS0zOTEgVEptCi0obGlua2luZykgMjguMjM0IFRqCi0tMzkyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzkxIFRKbQotKHN0YXRpY2FsbHkpIDM1Ljk3NDkgVGoKLS0zOTIgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDUyMi4wNjcgMzEwLjY1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjIuMDY3IC0zMTAuNjUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjIuMDY3IDMxMC42NTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ2NjKSAxNy45MzI3IFRqCi03MiAyOTguNjk3IFRkCi0oLXN0YXRpYykgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyAyOTguNjk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTI5OC42OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMy44NDMgMjk4LjY5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotLTYyMCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2lkcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShzb3J0cykgMTguODE5NCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShsaWJyYXJ5LXYpIDM0Ljg1OTEgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShpc3N1ZXMpIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShvdGhlcnMpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGVuY291bnRlcikgMzkuMjgyNSBUagotLTI1MCBUSm0KLShsYXRlcikgMTcuNzAzNSBUagotLTI1MCBUSm0KLShvbi4pIDEyLjQ1MzMgVGoKLVsxIDAgMCAxIDcyIDI5Ni41NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjg2LjU3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjc2Ljc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI5NiBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkKSAxNS41MDE4IFRqCi1bMSAwIDAgMSAxMjIuNzA5IDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIyLjcwOSAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIyLjcwOSAyNzYuNzc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxNTIuNTk2IDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUyLjU5NiAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjU0NSAyNzYuNzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG9uKSA5Ljk2MjYgVGoKLS0yOTYgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW4zMiwpIDIwLjIwNDIgVGoKLS0zMDcgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjk2IFRKbQotKG11c3QpIDE5LjM3NzMgVGoKLS0yOTYgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi1bMSAwIDAgMSAyNTQuOTY1IDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0Ljk2NSAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU0Ljk2NSAyNzYuNzc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1VOSVgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI5Ni44MDggMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTYuODA4IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTkuNzU2IDI3Ni43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI5NiBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yOTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMzNS43MiAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNS43MiAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjcyIDI3Ni43NzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTENDV0lOMzIpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQwMS40NzMgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDEuNDczIC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDQuNDIyIDI3Ni43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI5NiBUSm0KLSgxLCkgNy40NzE5NSBUagotLTMwNyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjk2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDQ2Ny4xNTkgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjcuMTU5IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjcuMTU5IDI3Ni43NzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIuYykgNDEuODQyOSBUagotWzEgMCAwIDEgNTA5LjAwMiAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOS4wMDIgLTI3Ni43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwOS4wMDIgMjc2Ljc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzA3IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotNzIgMjY0LjgyNCBUZAotKGNvbXBpbGluZy4pIDQyLjg5OSBUagotLTMxMCBUSm0KLShPdGhlcndpc2UpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTI1MCBUSm0KLShiaW5hcnkpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9uJykgMTMuMjgwMSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oY29ycmVjdGx5KSAzNS40MDcxIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyNjIuNjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTIuNzA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzAuMDcxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSg0LjMuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFJlcG9yKSA1OS42ODI0IFRqCi0tMjAgVEptCi0odGluZykgMzcuODY3IFRqCi0tMjc4IFRKbQotKGIpIDEyLjYyMjMgVGoKLTIwIFRKbQotKHVncykgMzYuNzMwOCBUagotWzEgMCAwIDEgNzIgMjI1LjQ3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjE1LjUxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjA4LjE1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJKSAzLjMxNzU1IFRqCi0tMjI4IFRKbQotKHRyaWVkKSAxOC4yNjE0IFRqCi0tMjI4IFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTIyOCBUSm0KLShoYXJkKSAxNy43MDM1IFRqCi0tMjI4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjggVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjI4IFRKbQotKHN1cmUpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDE5Ni4yNSAyMDguMTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Ni4yNSAtMjA4LjE1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk2LjI1IDIwOC4xNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIyNi4xMzggMjA4LjE1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuMTM4IC0yMDguMTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjguNDA5IDIwOC4xNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMjggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMjI4IFRKbQotKGZyZWUsKSAxNy45NzI1IFRqCi0tMjMyIFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0yMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOCBUSm0KLShkZXNpZ24pIDI2LjAxMjMgVGoKLS0yMjggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOCBUSm0KLSh0ZXN0aW5nLikgMjkuMDYwOSBUagotLTYwNSBUSm0KLShIb3BlZnVsbHkpIDQwLjM5ODMgVGoKLS0yMjggVEptCi0oeW91JykgMTguMjYxNCBUagotMTAgVEptCi0obGwpIDUuNTM5MjEgVGoKLS0yMjggVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yMjggVEptCi0obmVlZCkgMTguODA5NCBUagotLTIyOCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjI4IFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLTcyIDE5Ni4xOTggVGQKLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0oc2VjdGlvbikgMjguMjI0IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShyZWFsLikgMTcuNDI0NiBUagotWzEgMCAwIDEgNzIgMTk2LjA5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTg2LjEzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTc0LjI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0zMTMgVEptCi0oaWYpIDYuMDg3MTUgVGoKLVsxIDAgMCAxIDEzNy43NTEgMTc0LjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy43NTEgLTE3NC4yOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3Ljc1MSAxNzQuMjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE2Ny42MzkgMTc0LjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ny42MzkgLTE3NC4yOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjYzNCAxNzQuMjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGllcykgMTYuMDQ5NyBUagotLTMwMSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzAwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDEgVEptCi0oc2UpIDguMjk4ODUgVGoKLTE1IFRKbQotKGdtZW50YXRpb24pIDQ0LjgzMTcgVGoKLS0zMDAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXVsdCwpIDE3LjQzNDYgVGoKLS0zMTQgVEptCi0oYSkgNC40MjMzOSBUagotLTMwMCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVzKSA4Ljg1Njc1IFRqCi0tMzAxIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMzAwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzAxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMzAxIFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tMzAwIFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tMzAxIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbHVyZSwpIDI1LjE3NTUgVGoKLS0zMTMgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDEgVEptCi0od2lsKSAxMi43MzIyIFRqCi0xIFRKbQotKGwpIDIuNzY5NiBUagotLTMwMSBUSm0KLShhc2spIDEzLjI4MDEgVGoKLS0zMDEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzAwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDE2Mi4zMjUgVGQKLShlbWFpbCkgMjIuMTM2OSBUagotLTI0MiBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI0MyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQyIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTI0MyBUSm0KLShyZXBvcnQuKSAyNi4yODEzIFRqCi0tNjE1IFRKbQotKEV4cGVyaWVuY2UpIDQ0LjgxMTggVGoKLS0yNDIgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI0MyBUSm0KLSh5ZWFycykgMjEuMDIxMSBUagotLTI0MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0MiBUSm0KLShmZWVkYmFjaykgMzUuOTU1IFRqCi0tMjQzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQyIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi0tMjQzIFRKbQotKHVzZXJzKSAyMC40NzMxIFRqCi0tMjQyIFRKbQotKGluZGljYXRlcykgMzUuNDE3IFRqCi0tMjQzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNDIgVEptCi0oYWxtb3N0KSAyNi41NzAzIFRqCi0tMjQyIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjQzIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjQyIFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjQzIFRKbQotKGNhbikgMTMuODI4MSBUagotNzIgMTUwLjM3IFRkCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odHJhY2VkKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZWl0aGVyKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKGNvbXBpbGVyKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z3MpIDEzLjgzODEgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oaGFyZHcpIDI0Ljg5NjUgVGoKLTEwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShwcm9ibGVtcy4pIDM5LjU3MTQgVGoKLVsxIDAgMCAxIDcyIDE0OC4yMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ny4zNjExXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM2IDM2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMxLjUxNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJlY29tcGlsZSkgNDMuMTY3OSBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTMwNiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzA2IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zMDYgVEptCi0ob3B0aW1pc2F0aW9uLCkgNTIuMzEzNiBUagotLTMyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMwNiBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLS0zMDYgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zMDYgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDYgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9ya3MuKSAxOS42NDYyIFRqCi0tOTU2IFRKbQotKEFuZC9vcikgMjguMjI0IFRqCi0tMzA2IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTMwNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA2IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oZmVyZW50KSAyMy4yMzI4IFRqCi0tMzA2IFRKbQotKGNvbXBpbGVyKSAzNS40MTcgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS05NTYgVEptCi0oSSkgMy4zMTc1NSBUagotLTMwNiBUSm0KLShoZWFyZCkgMjIuMTI2OSBUagotLTMwNiBUSm0KLShhbGwpIDkuOTYyNiBUagotODYuOTQ0IDY5OC4wODIgVGQKLShzb3J0cykgMTguODE5NCBUagotLTI4MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MiBUSm0KLShzdG9yaWVzKSAyNi4wMTIzIFRqCi0tMjgyIFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjgzIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpb3VzKSAyNC4zNDg2IFRqCi0tMjgyIFRKbQotKFwwMDNhKSA5Ljk2MjYgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob3VycykgMTcuMTU1NiBUagotLTI4MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MiBUSm0KLShHTlUpIDIxLjU3OSBUagotLTI4MiBUSm0KLShDKSA2LjY0NTA1IFRqCi0tMjgyIFRKbQotKFwoYW5kKSAxNy43MDM1IFRqCi0tMjgyIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjgzIFRKbQotKGNvbXBpbGVyc1wpKSA0Mi42MSBUagotLTI4MiBUSm0KLShnZW5lcmF0aW5nKSA0Mi4wNTIxIFRqCi0tMjgyIFRKbQotKGJhZCkgMTQuMzg2IFRqCi0tMjgyIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yODIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi1bMSAwIDAgMSA0NzIuMTQxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjE0MSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDcyLjE0MSA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1MDIuMDI5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAyLjAyOSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTAyLjAyOSA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yOTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODIgVEptCi0oSScpIDYuNjM1MDkgVGoKLTUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotODYuOTQ0IDY4Ni4xMjcgVGQKLShydW4pIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYWNyb3NzKSAyNC44OTY1IFRqCi0tMjUwIFRKbQotKHR3KSA5Ljk2MjYgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZXMpIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0obXlzZWxmLikgMjkuNjA4OCBUagotWzEgMCAwIDEgMjM3Ljc2NyA2ODYuMTI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NS43NjcgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3NC4wMDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNy5YKSAyMi4xMzY5IFRqCi0tMjgwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMjc5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjgwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjc5IFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yODAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjc5IFRKbQotKGtubykgMTQuOTQzOSBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yODAgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLShnZW5lcmF0ZSkgMzMuNzQzMyBUagotLTI3OSBUSm0KLShiYWQpIDE0LjM4NiBUagotLTI4MCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjc5IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yODAgVEptCi0odGltZSkgMTcuNzEzNSBUagotLTI3OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgwIFRKbQotKHRpbWUsKSAyMC4yMDQyIFRqCi0tMjg3IFRKbQotKGF0KSA3LjE5MyBUagotLTI4MCBUSm0KLShoaWdoKSAxNy43MTM1IFRqCi0tMjc5IFRKbQotKG9wdGltaXNhdGlvbikgNDkuODIzIFRqCi0tMjgwIFRKbQotKGxlKSA3LjE5MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHMuKSAxMy41NTkxIFRqCi0tNzk3IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjgwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotODYuOTQ0IDY1Mi4yNTQgVGQKLShnZXQpIDEyLjE3NDMgVGoKLS0yOTUgVEptCi0ocHJvYmxlbXMsKSAzOS41NzE0IFRqCi0tMzA3IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTI5NiBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjk1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NiBUSm0KLShcMDAzYWdzKSAxOC44MTk0IFRqCi1bMSAwIDAgMSAyMjAuMTE2IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIwLjExNiAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjExNiA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1PMikgMTcuOTMyNyBUagotWzEgMCAwIDEgMjM4LjA0OSA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi45NDM4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjk5MyAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQwLjk5MyA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1mb21pdC1mcmFtZS1wb2ludGVyKSAxMTkuNTUxIFRqCi1bMSAwIDAgMSAzNjAuNTQ0IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjk0MzggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjMuNDg4IC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjMuNDg4IDY1Mi4yNTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWZuby1zdHJlbmd0aC1yZWR1Y2UpIDExOS41NTEgVGoKLVsxIDAgMCAxIDQ4My4wNCA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4My4wNCAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgzLjA0IDY1Mi4yNTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTg5MyBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yOTUgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi04Ni45NDQgNjQwLjI5OSBUZAotKHNwZWNpXDAwMmNhbGx5KSA0NS4zNzk2IFRqCi1bMSAwIDAgMSAxMzQuODE0IDY0MC4yOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM0LjgxNCAtNjQwLjI5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM0LjgxNCA2NDAuMjk5IFRkCi0vRjYzN18wIDkuOTYyNiBUZgotKG5vdCkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTQ3LjU0NiA2NDAuMjk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny41NDYgLTY0MC4yOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC4wMzYgNjQwLjI5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDE2NS44MDcgNjQwLjI5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjUuODA3IC02NDAuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjUuODA3IDY0MC4yOTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWZ1bnJvbGwtbG9vcHMpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDI0OS40OTMgNjQwLjI5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDkuNDkzIC02NDAuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDkuNDkzIDY0MC4yOTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjM4LjE0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjI4LjE3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDYxOC4zODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjQ5IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI0OSBUSm0KLShub3RpY2UpIDI0LjM0ODYgVGoKLS0yNDggVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0oTWFrKSAxOC4yNjE0IFRqCi0xMCBUSm0KLShlXDAwMmxlKSAxNy4xNTU2IFRqCi0tMjQ5IFRKbQotKHJ1bnMpIDE3LjE1NTYgVGoKLS0yNDggVEptCi0oc2l4KSAxMS42MjY0IFRqCi0tMjQ5IFRKbQotKHRlc3RzKSAxNy43MTM1IFRqCi0tMjQ5IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjQ5IFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsZCkgMTUuNTAxOCBUagotLTI0OSBUSm0KLShwcm9jZXNzLikgMzIuMzY4NSBUagotLTYxOSBUSm0KLShJZikgNi42MzUwOSBUagotLTI0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTI0OCBUSm0KLShwYXNzZXMpIDI1LjQ1NDQgVGoKLS0yNDkgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDkgVEptCi0odGhlc2UsKSAyMi45NjM4IFRqCi0tMjQ5IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotODYuOTQ0IDYwNi40MjYgVGQKLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTI1MCBUSm0KLShnb29kKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKFwoYikgOC4yOTg4NSBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oMTAwJVwpKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGluZGljYXRpb24pIDM5Ljg1MDQgVGoKLS0yNTAgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI1MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZG9uZSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNTAgVEptCi0oam9iKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjA0LjI2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE5Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNTg0LjUwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDU4NC41MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDU4NC41MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDk1Ljk1NTggNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05NS45NTU4IC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05NS45NTU4IDU4NC41MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEyNS44NDQgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjUuODQ0IC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjguMjIgNTg0LjUwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjcmFzaGVzKSAyOS4zMTk5IFRqCi0tMjM5IFRKbQotKHJhbmRvbWx5KSAzOC4xODY2IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShjcmFzaGUpIDI1LjQ0NDUgVGoKLTEgVEptCi0ocykgMy44NzU0NSBUagotLTIzOSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMzkgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjM4IFRKbQotKHJlcGVhdGFibGUsKSA0My40MjcgVGoKLS0yNDEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjM5IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTIzOCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjM5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMzggVEptCi0oXDAwM2FrKSAxNC45NDM5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yMzkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjM4IFRKbQotKHN1YnN5c3RlbS4pIDQ0LjAwNDggVGoKLVsxIDAgMCAxIDUxMC4xMTIgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTAuMTEyIC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDU4NC41MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDU0MCA1ODQuNTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDU3Mi41NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjU0IFRKbQotKGhhbW1lcnMpIDM2LjUyMjkgVGoKLS0yNTMgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1NCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNTMgVEptCi0oaGllcmFyY2gpIDMyLjYzNzUgVGoKLTUgVEptCi0oeSkgNC45ODEzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjU1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUzIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjU0IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUzIFRKbQotKGJpdCkgMTAuNTIwNSBUagotLTI1NCBUSm0KLShtYXIpIDE1LjQ5MTggVGoKLTE4IFRKbQotKGdpbmFsLCkgMjIuNDE1OSBUagotLTI1NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTQgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUzIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1NCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1MyBUSm0KLShwcm9ibGVtcy4pIDM5LjU3MTQgVGoKLS02NDIgVEptCi0oRGl0dG8pIDIwLjQ4MzEgVGoKLS0yNTQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTMgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1NCBUSm0KLShkaXNrKSAxNi42MDc3IFRqCi04Ni45NDQgNTYwLjU5OCBUZAotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKEkvTykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShzdWJzeXN0ZW0pIDQxLjUxNDIgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3bHkpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsaW5nLikgMjUuMTg1NSBUagotLTYyMCBUSm0KLShZKSA3LjE5MyBUagotMTExIFRKbQotKHVwLCkgMTIuNDUzMyBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKGRvZXMpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oaGFwcGVuLikgMzEuMjYyNiBUagotWzEgMCAwIDEgMzQ1LjE0MyA1NjAuNTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3My4xNDMgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0OC40NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1MzguNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotMzUgVEptCi0ocnkpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oZmVyZW50KSAyMy4yMzI4IFRqCi0tMjUwIFRKbQotKG1hY2hpbmUpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0odHlwZSwpIDE5LjY0NjIgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc2VlKSAxMi43MjIyIFRqCi0tMjUwIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0ocmVwZWF0KSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ibGVtLikgMzUuNjk2IFRqCi1bMSAwIDAgMSA3MiA1MzYuNTIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTkuNzYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNTE2Ljc2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA1MTYuNzYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNTE2Ljc2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC01MTYuNzYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNTE2Ljc2MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjI5IFRKbQotKGlzbicpIDE0Ljk0MzkgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTIzMCBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yMjkgVEptCi0oYSkgNC40MjMzOSBUagotLTIyOSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnLCkgMTIuNDUzMyBUagotLTIzNCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yMjkgVEptCi0oLi4uKSA3LjQ3MTk1IFRqCi0tMzAzIFRKbQotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSAyMTIuMjMyIDUxNi43NjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEyLjIzMiAtNTE2Ljc2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEyLjIzMiA1MTYuNzYyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDIuMTIgNTE2Ljc2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDIuMTIgLTUxNi43NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0NC40MDUgNTE2Ljc2MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0ZWxscykgMTYuNjA3NyBUagotLTIyOSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzAgVEptCi0oeW91cikgMTguMjYxNCBUagotLTIyOSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yMjkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzAgVEptCi0oY29ycnVwdGVkKSAzOC4xNzY3IFRqCi0tMjI5IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yMzAgVEptCi0oZGVjb21wcmVzc2lvbiwpIDYyLjI1NjMgVGoKLS0yMzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjMwIFRKbQotKG9idGFpbmVkKSAzNC4zMTEyIFRqCi0tMjI5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyOSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLTg2Ljk0NCA1MDQuODA3IFRkCi0odmlhKSAxMi4xNzQzIFRqCi0tMjYyIFRKbQotKEZUUCkgMTcuMTY1NiBUagotMTExIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNjMgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0yNjIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjIgVEptCi0oYSkgNC40MjMzOSBUagotLTI2MiBUSm0KLShwb3NzaWJpbGl0eSkgNDEuNTI0MSBUagotLTI2MyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjYyIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLTE4IFRKbQotKGdvdCkgMTIuNzMyMiBUagotLTI2MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYyIFRKbQotKHRlbGwpIDEyLjczMjIgVGoKLS0yNjIgVEptCi0oRlRQKSAxNy4xNjU2IFRqCi0tMjYzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjIgVEptCi0oZG8pIDkuOTYyNiBUagotLTI2MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjYyIFRKbQotKGJpbmFyeSkgMjUuNDU0NCBUagotLTI2MyBUSm0KLShtb2RlKSAyMi4xMzY5IFRqCi0tMjYyIFRKbQotKHRyYW5zZmVyKSAzMC40MjU4IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjk0IFRKbQotKFRoYXQpIDE4LjI2MTQgVGoKLS0yNjIgVEptCi0oYWJzb2x1dGVseSkgNDAuOTU2MiBUagotLTI2MiBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjYzIFRKbQotKGNhdXNlKSAyMi4xMjY5IFRqCi04Ni45NDQgNDkyLjg1MiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShub24tZGVjb21wcmVzc2libGUuKSA4Mi43Mjk0IFRqCi0tNjIwIFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UnKSAxMy4yODAxIFRqCi0xMCBUSm0KLShsbCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odHJhbnNmZXIpIDMwLjQyNTggVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluLikgMTQuNjY0OSBUagotWzEgMCAwIDEgMzUxLjM0IDQ5Mi44NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc5LjM0IC0xMi4xMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODAuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzAuOTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjM1IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTIzNiBUSm0KLShpbmNvcikgMjAuNDczMSBUagotMSBUSm0KLShwKSA0Ljk4MTMgVGoKLS0xIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0xIFRKbQotKGF0ZWQpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDE2My4wMzYgNDcwLjkzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuMDM2IC00NzAuOTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjMuMDM2IDQ3MC45MzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDIxMC44NTYgNDcwLjkzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuODU2IC00NzAuOTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTMuMiA0NzAuOTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS0yMzUgVEptCi0oeW91cikgMTguMjYxNCBUagotLTIzNSBUSm0KLShvKSA0Ljk4MTMgVGoKLTI1IFRKbQotKHduKSAxMi4xNzQzIFRqCi0tMjM2IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yMzUgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjM2IFRKbQotKGdldCkgMTIuMTc0MyBUagotMSBUSm0KLSh0aW5nKSAxNS41MDE4IFRqCi0tMjM2IFRKbQotKHByb2JsZW1zLCkgMzkuNTcxNCBUagotLTIzOCBUSm0KLShwbGVhc2UsKSAyNy4zODcyIFRqCi0tMjM4IFRKbQotKHBsZWFzZSwpIDI3LjM4NzIgVGoKLS0yMzggVEptCi0ocGxlYXNlLCkgMjcuMzg3MiBUagotLTIzOCBUSm0KLShjaGVjaykgMjMuMjMyOCBUagotLTIzNiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi03MiA0NTguOTc5IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLS0yNDMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjQyIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI0MiBUSm0KLShwYXNzaW5nKSAyOS44ODc4IFRqCi0tMjQzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNDIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNDIgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI0NCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNDIgVEptCi0oY29ycmVjdCwpIDMwLjE0NjggVGoKLS0yNDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDMgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0MiBUSm0KLShhY2NvcmRhbmNlKSA0NC44MDE4IFRqCi0tMjQyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNDMgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI0MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0oZG9jdW1lbnRhdGlvbikgNTkuMjE3NyBUagotLTI0MyBUSm0KLShzYXlzKSAxNy4xNTU2IFRqCi03MiA0NDcuMDI0IFRkCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUuKSAxOS4wODgzIFRqCi0tMzEwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0cmllZCkgMTguMjYxNCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShyb2IpIDEzLjI4MDEgVGoKLTIwIFRKbQotKHVzdCkgMTEuNjI2NCBUagotLTI1MCBUSm0KLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW5zdCkgMTguODE5NCBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHByb2JsZW1zLCkgMzkuNTcxNCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oSSdtKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc3VyZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuJykgMTIuNzIyMiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHN1Y2NlZWRlZC4pIDQzLjQyNyBUagotWzEgMCAwIDEgNzIgNDQ0Ljg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM0LjkwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI1LjEwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGaW5hbGx5KSAyOC4yMzQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMjQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zMTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA5IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDkgVEptCi0oY29tbWVudHMpIDQwLjk1NjIgVGoKLS0zMTAgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA5IFRKbQotKGhlbHAsKSAxOS42NDYyIFRqCi0tMzI0IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTEwIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tMzEwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDkgVEptCi0odG8pIDcuNzUwOSBUagotLTMwOSBUSm0KLShzZW5kKSAxOC4yNjE0IFRqCi0tMzEwIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMzA5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMzEwIFRKbQotKHJlcG9ydC4pIDI2LjI4MTMgVGoKLS05NzYgVEptCi0oTm8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzI0IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTMxMCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0zMDkgVEptCi0oYW1hemluZykgMzMuNzUzMyBUagotLTMwOSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMxMCBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotNzIgNDEzLjE1MSBUZAotKHBlb3BsZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHNlbmQpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0obWUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHNheWluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShzb21ldGhpbmcpIDQxLjUxNDIgVGoKLS0yNTAgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlOikgNy4xOTMgVGoKLVsxIDAgMCAxIDcyIDQxMC45OTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDAxLjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDAxLjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotLTQyNiBUSm0KLShjcmFzaGVkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc2VnbWVudGF0aW9uKSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKGZhdWx0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9uKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG15KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG1hY2hpbmUpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDcyIDM4Ni4wODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc2LjEyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzY0LjE2OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotLTI0MSBUSm0KLShhYnNvbHV0ZWx5KSA0MC45NTYyIFRqCi0tMjQxIFRKbQotKG5vdGhpbmcpIDMwLjQ0NTcgVGoKLS0yNDEgVEptCi0oZWwpIDcuMTkzIFRqCi0xIFRKbQotKHNlLikgMTAuNzg5NSBUagotLTYxNCBUSm0KLShOZWVkbGVzcykgMzUuOTY1IFRqCi0tMjQxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDEgVEptCi0oc2F5KSAxMy4yODAxIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQzIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDEgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI0MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQxIFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI0MSBUSm0KLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgMzI0LjY4MSAzNjQuMTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNC42ODEgLTM2NC4xNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNC42ODEgMzY0LjE2OSBUZAotL0Y2MzdfMCA5Ljk2MjYgVGYKLSh0b3RhbGx5KSAyNS40NjQ0IFRqCi01NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQzIFRKbQotKHV0dGVybHkpIDI2LjAxMjMgVGoKLTU1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDIgVEptCi0oY29tcGxldGVseSkgNDMuMTU4IFRqCi0tMjQxIFRKbQotKGFuZCkgMTQuOTQzOSBUagotLTI0MSBUSm0KLShjb21wcikgMjUuNDU0NCBUagotMzcgVEptCi0oZWhlbnNpdmVseSkgNDEuNDk0MiBUagotLTI0MSBUSm0KLSgxMDAlKSAyMy4yNDI3IFRqCi03MiAzNTIuMjE0IFRkCi0odXNlbGVzczspIDMxLjU0MTYgVGoKLS0yNTcgVEptCi0oYSkgNC45ODEzIFRqCi0tMjU1IFRKbQotKHdhc3RlKSAyMi42OTQ4IFRqCi0tMjU1IFRKbQotKG9mKSA3Ljc1MDkgVGoKLS0yNTUgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1NSBUSm0KLSh0aW1lKSAxNy4xNTU2IFRqCi0xMCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjU2IFRKbQotKG15KSAxMS42MTY0IFRqCi0tMjU1IFRKbQotKHRpbWUpIDE3LjE1NTYgVGoKLTEwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTYgVEptCi0oYW5kKSAxNC45NDM5IFRqCi0tMjU1IFRKbQotKG5ldCkgMTIuMTc0MyBUagotLTI1NSBUSm0KLShiYW5kd2lkdGgpIDQyLjA3MjEgVGoKLVsxIDAgMCAxIDMwMi41NzQgMzUyLjIxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDIuNTc0IC0zNTIuMjE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDIuNTc0IDM1Mi4yMTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTY1MCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpdGgpIDEwLjUyMDUgVGoKLS0yNTQgVEptCi0obm8pIDkuOTYyNiBUagotLTI1NSBUSm0KLShkZXRhaWxzKSAyNi4wMTIzIFRqCi0tMjU1IFRKbQotKGF0KSA3LjE5MyBUagotLTI1NSBUSm0KLShhbGwsKSAxMi40NTMzIFRqCi0tMjU2IFRKbQotKHRoZXJlJykgMjMuMjMyOCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1NSBUSm0KLShubykgOS45NjI2IFRqCi0tMjU1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI1NSBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjU1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1NSBUSm0KLShwb3NzaWJseSkgMzMuMjE1MyBUagotLTI1NSBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ2luKSAxMi43MzIyIFRqCi03MiAzNDAuMjU5IFRkCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShcMDAyZ3VyZSkgMjMuMjQyNyBUagotLTI1MCBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShpcy4pIDkuMTM1NyBUagotWzEgMCAwIDEgNzIgMzM4LjEwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI4LjE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTguMzQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTMwOSBUSm0KLShydWxlcykgMTkuMzY3MyBUagotLTMwOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTAgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFtZSkgMTYuNTk3NyBUagotLTMwOSBUSm0KLShhcmU6KSAxNC45MzM5IFRqCi0tNDI4IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdHMsKSAxNy45ODI1IFRqCi0tMzI0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdHMsKSAxNy45ODI1IFRqCi0tMzI0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdHMuKSAxNy45ODI1IFRqCi0tOTc1IFRKbQotKERvbicpIDIwLjQ3MzEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTMwOSBUSm0KLShvbWl0KSAxOC4yNzE0IFRqCi0tMzA5IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0zMDkgVEptCi0oYmVjYXVzZSkgMzEuNTMxNiBUagotLTMwOSBUSm0KLSgib2gsKSAxNi41MTggVGoKLS0zMjQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zMDkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9uJykgMTMuMjgwMSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzEwIFRKbQotKHJlbGUpIDE0LjkzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYW50Ii4pIDE4LjcyOTcgVGoKLS05NzQgVEptCi0oQXQpIDkuOTYyNiBUagotLTMxMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDkgVEptCi0oYmFyZSkgMTcuMTQ1NiBUagotNzIgMzA2LjM4NiBUZAotKG1pbmltdW06KSA0MS41MjQxIFRqCi1bMSAwIDAgMSA3MiAzMDYuMjg3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI5Ni45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI5Ni45MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTWFjaGluZSkgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0eXBlLikgMjkuODg3OCBUagotLTg1MiBUSm0KLShPcGVyYXRpbmcpIDUzLjc5OCBUagotLTQyNiBUSm0KLShzeXN0ZW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmVyc2lvbi4pIDQ3LjgyMDUgVGoKLTkwIDI4NC45NjcgVGQKLShFeGFjdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSh2ZXJzaW9uKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwoZG8pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYnppcDIpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oLVZcKS4pIDIzLjkxMDIgVGoKLTkwIDI3My4wMTEgVGQKLShFeGFjdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSh2ZXJzaW9uKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21waWxlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLSh1c2VkLikgMjkuODg3OCBUagotOTAgMjYxLjA1NiBUZAotKEZsYWdzKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHBhc3NlZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcGlsZXIuKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDI0NS41MTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM1LjU1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIzLjU5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0od2UpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUyIFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yNTMgVEptCi0oaW1wb3J0YW50KSAzOC43NDQ2IFRqCi0tMjUzIFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTI1MyBUSm0KLSh0aGluZykgMjAuNDgzMSBUagotLTI1MyBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0oaGF0KSAxMi4xNzQzIFRqCi0tMjUzIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTMgVEptCi0oaGVscCkgMTcuMTU1NiBUagotLTI1MyBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI1MyBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTMgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUzIFRKbQotKHdlcmUpIDE5LjM1NzMgVGoKLS0yNTMgVEptCi0odHJ5aW5nKSAyMy44MDA3IFRqCi0tMjUyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTMgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS0yNTMgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTMgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotNzIgMjExLjY0MSBUZAotKGF0KSA3LjE5MyBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDUgVEptCi0odGltZSkgMTcuNzEzNSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTMwNSBUSm0KLShoYXBwZW5lZC4pIDQwLjY2NzMgVGoKLS05NDYgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaXRob3V0KSAyMy4yNTI3IFRqCi0tMzA0IFRKbQotKHRoYXQsKSAxNy40MzQ2IFRqCi0tMzE4IFRKbQotKG15KSAxMi43MzIyIFRqCi0tMzA1IFRKbQotKGFiaWxpdHkpIDI1LjQ2NDQgVGoKLS0zMDQgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNCBUSm0KLShkbykgOS45NjI2IFRqCi0tMzA1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5dGhpbmcpIDI1LjQ2NDQgVGoKLS0zMDQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTMwNCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzA1IFRKbQotKHNwZWN1bGF0ZSkgMzcuMDcwOCBUagotLTMwNCBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDUgVEptCi0oY2F1c2UsKSAyNC42MTc2IFRqCi0tMzE4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi03MiAxOTkuNjg2IFRkCi0obGltaXRlZC4pIDMwLjcyNDcgVGoKLVsxIDAgMCAxIDcyIDE5OS41ODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4OS42MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE2NC45MzMgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDQuNC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oRGlkKSAzMy4yODA4IFRqCi0tMjc4IFRKbQotKHkpIDExLjQ4NjEgVGoKLTI1IFRKbQotKG91KSAyNS4yNDQ3IFRqCi0tMjc4IFRKbQotKGcpIDEyLjYyMjMgVGoKLS0xMCBUSm0KLShldCkgMTguMzY1NCBUagotLTI3OCBUSm0KLSh0aGUpIDMwLjk4NzcgVGoKLS0yNzggVEptCi0ocmlnaHQpIDQ1LjkwMzIgVGoKLS0yNzggVEptCi0ocGFjKSAzNS41OTQ2IFRqCi0yMCBUSm0KLShrYSkgMjIuOTcyMyBUagotMTAgVEptCi0oZykgMTIuNjIyMyBUagotLTEwIFRKbQotKGU/KSAyNC4xMDg1IFRqCi1bMSAwIDAgMSA3MiAxNjAuMzM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNTAuMzc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNDMuMDE2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDE0My4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMTQzLjAxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjYwMyAxNDMuMDE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjcyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzMgVEptCi0ocmVzb3VyY2UpIDMzLjc0MzMgVGoKLS0yNzIgVEptCi0oaG9nLikgMTcuNDM0NiBUagotLTM3OCBUSm0KLShJdCkgNi4wODcxNSBUagotLTI3MiBUSm0KLShzb2FrcykgMjIuMTM2OSBUagotLTI3MyBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjcyIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNzMgVEptCi0oYW1vdW50cykgMzMuNzYzMyBUagotLTI3MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MyBUSm0KLShDUFUpIDE5LjM3NzMgVGoKLS0yNzIgVEptCi0oYykgNC40MjMzOSBUagotMTUgVEptCi0oeWNsZXMpIDIwLjQ3MzEgVGoKLS0yNzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNzU1IFRKbQotKEFsc28sKSAyMS4zMSBUagotLTI3OCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3MyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMjczIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNzIgVEptCi0obGF0ZW5jaWVzLikgMzcuMzQ5OCBUagotNzIgMTMxLjA2IFRkCi0oSW4pIDguMjk4ODUgVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tMjUxIFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tMjUxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTEgVEptCi0oZmVlZCkgMTcuMTQ1NiBUagotLTI1MSBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MSBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi00IFRKbQotKGFieXQpIDE3LjE1NTYgVGoKLTEgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTEgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yNTEgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MSBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUxIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI1MSBUSm0KLShnZXR0aW5nKSAyNy42NzYxIFRqCi0tMjUxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTEgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgMTE5LjEwNSBUZAotKG91dHB1dCwpIDI3Ljk1NTEgVGoKLS0yNTAgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHByb2JhYmx5KSAzNS40MTcgVGoKLS0yNTAgVEptCi0ocnVsZXMpIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGFwcGxpY2F0aW9ucykgNDguMTQ5MiBUagotLTI1MCBUSm0KLShyZXF1aXJpbmcpIDM2LjUyMjkgVGoKLS0yNTAgVEptCi0oaW50ZXJhY3RpKSAzMi42NDc0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTE2Ljk0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTA2Ljk4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgOTcuMTg3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGVzZSkgMjMuNzkwNyBUagotLTMwNCBUSm0KLShhcmVuJykgMjAuNDYzMiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGF1bHRzKSAxOC44MTk0IFRqCi0tMzA0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA0IFRKbQotKG15KSAxMi43MzIyIFRqCi0tMzA0IFRKbQotKGltcGxlbWVudGF0aW9uLCkgNjUuMDM1OSBUagotLTMxNyBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMzA0IFRKbQotKGhvcGUsKSAyMS44NTc5IFRqCi0tMzE4IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTMwNCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMzA0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMzA0IFRKbQotKGludHJpbnNpYykgMzIuNjU3NCBUagotLTMwNCBUSm0KLShwcm9wZXJ0eSkgMzMuNzUzMyBUagotLTMwNCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0oQnVycm8pIDIzLjI0MjcgVGoKLTI1IFRKbQotKHdzLVdoZWVsZXIpIDQ4LjEyOTMgVGoKLS0zMDQgVEptCi0odHJhbnNmb3JtKSAzOC43MzQ2IFRqCi03MiA4NS4yMzIzIFRkCi0oXCh1bmZvcnR1bmF0ZWx5XCkuKSA2Mi44MDQyIFRqCi0tNjIwIFRKbQotKE1heWJlKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShpc24nKSAxNC45NDM5IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudC4pIDE0LjY2NDkgVGoKLVsxIDAgMCAxIDcyIDgzLjA3NTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMi4yNjExXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM3IDM3Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNzUgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjc0IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNzUgVEptCi0oYSkgNC40MjMzOSBUagotLTI3NCBUSm0KLShjb21wcmVzc29yKSA0NS45Mjc2IFRqCi0tMjc1IFRKbQotKGFuZC9vcikgMjUuNDU0NCBUagotLTI3NSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjc0IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjc1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjc0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjgxIFRKbQotKHVzZXMpIDE3LjE1NTYgVGoKLS0yNzUgVEptCi0obGVzcykgMTQuOTQzOSBUagotLTI3NCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNzUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjc1IFRKbQotKGdldHMpIDE2LjA0OTcgVGoKLS0yNzQgVEptCi0ocHJldHR5KSAyMy4yNDI3IFRqCi0tMjc1IFRKbQotKGdvb2QpIDE5LjkyNTIgVGoKLS0yNzQgVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMjgxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjc1IFRKbQotKGhhcykgMTMuMjgwMSBUagotNzIgNjk4LjA4MiBUZAotKG1pbmltYWwpIDMzLjIxNTMgVGoKLS0yODggVEptCi0obGF0ZW5jKSAyMy43OTA3IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yOTcgVEptCi0oY29uc2lkZXIpIDMzLjc1MzMgVGoKLS0yODggVEptCi0oSmVhbi1sb3VwKSAzOC43MzQ2IFRqCi0tMjg4IFRKbQotKEdhaWxseScpIDI4LjIyNCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI4OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4OCBUSm0KLShNYXJrKSAyMS41NzkgVGoKLS0yODggVEptCi0oQWRsKSAxNC45NDM5IFRqCi0xIFRKbQotKGVyJykgMTEuMDU4NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI4OCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrLCkgMTUuNzcwOCBUagotWzEgMCAwIDEgMzUzLjg3OSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1My44NzkgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1My44NzkgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliLTEuMi4xKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0MTMuNjU1IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEzLjY1NSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE2LjUyMyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MzMuNzc3IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMzLjc3NyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMzLjc3NyA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGd6aXAtMS4yLjQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQ5My41NTMgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuNTUzIC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTMuNTUzIDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTg0NyBUSm0KLShMb29rKSAyMS4wMzEgVGoKLS0yODggVEptCi0oZm9yKSAxMS42MTY0IFRqCi03MiA2ODYuMTI3IFRkCi0odGhlbSkgMTkuOTI1MiBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaHR0cDovL3d3dykgNDUuMzg5NiBUagotNjUgVEptCi0oLnpsaWIpIDE3LjQzNDYgVGoKLTQwIFRKbQotKC5vcikgMTAuNzg5NSBUagotMTggVEptCi0oZykgNC45ODEzIFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGh0dHA6Ly93d3cpIDQ1LjM4OTYgVGoKLTY1IFRKbQotKC5nemlwLm9yKSAzMC40MzU3IFRqCi0xOCBUSm0KLShnKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0ocmVzcGVjdGkpIDMwLjk4MzcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWx5KSAxMi4xNzQzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2ODMuOTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3NC4wMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS01ODIgVEptCi0oc29tZXRoaW5nKSA0MS41MTQyIFRqCi0tNTgzIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi0tNTgyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNTgyIFRKbQotKGxpZ2h0ZXIpIDI2LjAxMjMgVGoKLS01ODMgVEptCi0oc3RpbGwsKSAxNy40NDQ1IFRqCi0tNjY1IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTU4MiBUSm0KLShtaWdodCkgMjMuMjUyNyBUagotLTU4MyBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS01ODIgVEptCi0oTWFya3VzKSAzMC40MzU3IFRqCi0tNTgyIFRKbQotKEYpIDUuNTM5MjEgVGoKLS01ODIgVEptCi0oWCkgNy4xOTMgVGoKLS01ODIgVEptCi0oSikgMy44NzU0NSBUagotLTU4MiBUSm0KLShPYmVyaHVtZXInKSA0OC42ODcyIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi1bMSAwIDAgMSA0MzcuNDMzIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM3LjQzMyAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM3LjQzMyA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKExaTykgMTcuOTMyNyBUagotWzEgMCAwIDEgNDU1LjM2NSA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NS4zNjUgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2MS4xNjMgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWFsLXRpbWUpIDM1Ljk2NSBUagotLTU4MiBUSm0KLShjb21wcmVzLSkgMzcuMDcwOCBUagotNzIgNjUyLjI1NCBUZAotKHNpb24vZGVjb21wcmVzc2lvbikgNzkuMTQyOSBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShodHRwOi8vd3d3KSA0NS4zODk2IFRqCi02NSBUSm0KLSgub2Jlcmh1bWVyKSA0NS42NDg2IFRqCi01NSBUSm0KLSguY29tL29wZW5zb3VyY2UuKSA3MC4yNzYyIFRqCi1bMSAwIDAgMSA3MiA2NTAuMDk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NDAuMTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTcuNTAxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSg0LjUuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKEZ1cikgMzMuMjgwOCBUagotLTIwIFRKbQotKHRoZXIpIDM5LjAyMzkgVGoKLS0yNzggVEptCi0oUmVhZGluZykgODEuNDk3OCBUagotWzEgMCAwIDEgNzIgNjEyLjkwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAyLjk0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTk1LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA1OTUuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTU5NS41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC45MjMgNTk1LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMwNSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zMDQgVEptCi0ocmVzZWFyY2gpIDMzLjE4NTQgVGoKLS0zMDUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaywpIDE1Ljc3MDggVGoKLS0zMTggVEptCi0oaW4pIDcuNzUwOSBUagotLTMwNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0oc2Vuc2UpIDIxLjU3OSBUagotLTMwNSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzA0IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzA1IFRKbQotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA1IFRKbQotKHByZXNlbnQpIDI4Ljc3MiBUagotLTMwNCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzA1IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMwNCBUSm0KLShpZGVhcy4pIDIyLjk2MzggVGoKLS00NzQgVEptCi0oUmF0aGVyKSAyNi41NjAzIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzE4IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTMwNSBUSm0KLShhbikgOS40MDQ2OSBUagotLTMwNSBUSm0KLShlbmdpbmVlcmkpIDM3LjA3MDggVGoKLTEgVEptCi0obmcpIDkuOTYyNiBUagotLTMwNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyY2lzZSkgMjMuMjMyOCBUagotNzIgNTgzLjYyOCBUZAotKGJhc2VkKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotLTI1MCBUSm0KLShpZGVhcy4pIDIyLjk2MzggVGoKLVsxIDAgMCAxIDcyIDU4MS40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3MS41MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2MS43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvdXIpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZG9jdW1lbnRzKSA0My4xNjc5IFRqCi0tMjUwIFRKbQotKGRlc2NyaWJlKSAzMy4xOTU0IFRqCi0tMjUwIFRKbQotKGVzc2VudGlhbGx5KSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShpZGVhcykgMjAuNDczMSBUagotLTI1MCBUSm0KLShiZWhpbmQpIDI3LjExODIgVGoKLVsxIDAgMCAxIDI5OC43NDcgNTYxLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OC43NDcgLTU2MS43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk4Ljc0NyA1NjEuNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyOC42MzUgNTYxLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyOC42MzUgLTU2MS43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI4LjYzNSA1NjEuNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiA1NTkuNTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjk5Ljg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gU0MKLTAgMCA0NjggMjk4Ljg3OSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDI5NS4yOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01NTAuMTg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1NTAuMTg5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE1pY2hhZWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQnVycm93cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oRC4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oSi4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oV2hlZWxlcjopIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNTM4LjIzNCBUZAotKCJBKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJsb2NrLXNvcnRpbmcpIDc3LjcwODMgVGoKLS00MjYgVEptCi0obG9zc2xlc3MpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShjb21wcmVzc2lvbikgNjUuNzUzMiBUagotLTQyNiBUSm0KLShhbGdvcml0aG0iKSA1OS43NzU2IFRqCi0xMDIuNzMyIDUyNi4yNzggVGQKLSgxMHRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKE1heSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgxOTk0LikgMjkuODg3OCBUagotMTAyLjczMiA1MTQuMzIzIFRkCi0oRGlnaXRhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShTUkMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oUmVzZWFyY2gpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oUmVwb3J0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKDEyNC4pIDIzLjkxMDIgVGoKLTEwMi43MzIgNTAyLjM2OCBUZAotKGZ0cDovL2Z0cC5kaWdpdGFsLmNvbS9wdWIvREVDL1NSQy9yZXNlYXJjaC1yZXBvcnRzL1NSQy0xMjQucHMuZ1wKLXopIDM4Mi41NjQgVGoKLTEwMi43MzIgNDkwLjQxMyBUZAotKElmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShoYXZlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRyb3VibGUpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZmluZGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpdCwpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odHJ5KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNlYXJjaGluZykgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGF0KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotMTAyLjczMiA0NzguNDU4IFRkCi0oTmV3KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFplYWxhbmQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oRGlnaXRhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShMaWJyYXJ5LCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShodHRwOi8vd3d3Lm56ZGwub3JnLikgMTE5LjU1MSBUagotOTAgNDU0LjU0NyBUZAotKERhbmllbCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShTLikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShIaXJzY2hiZXJnKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShEZWJyYSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShBLikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShMZUxld2VyKSA0MS44NDI5IFRqCi05OC40ODc5IDQ0Mi41OTIgVGQKLSgiRWZmaWNpZW50KSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKERlY29kaW5nKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFByZWZpeCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShDb2RlcyIpIDM1Ljg2NTQgVGoKLTEwMi43MzIgNDMwLjYzNyBUZAotKENvbW11bmljYXRpb25zKSA4My42ODU4IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShBQ00sKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEFwcmlsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKDE5OTAsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFZvbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgzMywpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oTnVtYmVyKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKDQuKSAxMS45NTUxIFRqCi0xMDIuNzMyIDQxOC42ODIgVGQKLShZb3UpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obWlnaHQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oYmUpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYWJsZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShnZXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZWxlY3Ryb25pYykgNTkuNzc1NiBUagotLTQyNiBUSm0KLShjb3B5KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoaXMpIDIzLjkxMDIgVGoKLTEwMi43MzIgNDA2LjcyNyBUZAotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEFDTSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShEaWdpdGFsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKExpYnJhcnkuKSA0Ny44MjA1IFRqCi05MCAzODIuODE2IFRkCi0oRGF2aWQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oSi4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oV2hlZWxlcikgNDEuODQyOSBUagotMTAyLjczMiAzNzAuODYxIFRkCi0oUHJvZ3JhbSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShicmVkMy5jKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NvbXBhbnlpbmcpIDcxLjczMDcgVGoKLS00MjYgVEptCi0oZG9jdW1lbnQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYnJlZDMucHMuKSA1My43OTggVGoKLTEwMi43MzIgMzU4LjkwNiBUZAotKFRoaXMpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oY29udGFpbnMpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGlkZWEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYmVoaW5kKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShtdWx0aS10YWJsZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShIdWZmbWFuKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGNvZGluZykgMzUuODY1NCBUagotLTQyNiBUSm0KLShzY2hlbWUuKSA0MS44NDI5IFRqCi0xMDIuNzMyIDM0Ni45NTEgVGQKLShmdHA6Ly9mdHAuY2wuY2FtLmFjLnVrL3VzZXJzL2RqdzMvKSAyMDMuMjM3IFRqCi05MCAzMjMuMDQxIFRkCi0oSm9uKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEwuKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJlbnRsZXkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFJvYmVydCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShTZWRnZXdpY2spIDUzLjc5OCBUagotOTguNDg3OSAzMTEuMDg1IFRkCi0oIkZhc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oQWxnb3JpdGhtcykgNTkuNzc1NiBUagotLTQyNiBUSm0KLShmb3IpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oU29ydGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oU2VhcmNoaW5nKSA1My43OTggVGoKLS00MjYgVEptCi0oU3RyaW5ncyIpIDQ3LjgyMDUgVGoKLTEwMi43MzIgMjk5LjEzIFRkCi0oQXZhaWxhYmxlKSA1My43OTggVGoKLS00MjYgVEptCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShTZWRnZXdpY2sncykgNjUuNzUzMiBUagotLTQyNiBUSm0KLSh3ZWIpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocGFnZSwpIDI5Ljg4NzggVGoKLTEwMi43MzIgMjg3LjE3NSBUZAotKHd3dy5jcy5wcmluY2V0b24uZWR1L35ycykgMTQzLjQ2MSBUagotWzEgMCAwIDEgNzIgMjU5LjY3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDkuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzcuNzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjM5IFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjM4IFRKbQotKHBhcGVyKSAyMi4xMjY5IFRqCi0tMjM5IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yMzkgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVhYmxlKSAyOC43NzIgVGoKLS0yMzggVEptCi0oYWRkaXRpb25hbCkgMzkuODUwNCBUagotLTIzOSBUSm0KLShpbnNpZ2h0cykgMzEuMDAzNiBUagotLTIzOCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShhbGdvcml0aG0sKSA0MS4yMzUyIFRqCi0tMjQxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTIzOCBUSm0KLShpcykgNi42NDUwNSBUagotLTIzOSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMzkgVEptCi0oaW1tZWRpKSAzMC40NDU3IFRqCi0xIFRKbQotKGF0ZWx5KSAxOS4zNjczIFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShiYXNpcykgMTkuOTI1MiBUagotLTIzOCBUSm0KLShvZikgOC4yOTg4NSBUagotLTIzOSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjM5IFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLTcyIDIyNS44MDUgVGQKLSh1c2VkKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYnppcDIuKSAyNC42Mjc1IFRqCi1bMSAwIDAgMSA3MiAyMjMuNjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNzIuNzI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gU0MKLTAgMCA0NjggNzEuNzMxIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNjguMTQ0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTIxNC4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDIxNC4yODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oUGV0ZXIpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oRmVud2ljazopIDQ3LjgyMDUgVGoKLTEwMi43MzIgMjAyLjMyOCBUZAotKEJsb2NrKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFNvcnRpbmcpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oVGV4dCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShDb21wcmVzc2lvbikgNjUuNzUzMiBUagotMTAyLjczMiAxOTAuMzczIFRkCi0oUHJvY2VlZGluZ3MpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDE5dGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQXVzdHJhbGFzaWFuKSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKENvbXB1dGVyKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKFNjaWVuY2UpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQ29uZmVyZW5jZSwpIDY1Ljc1MzIgVGoKLTExMS4yMiAxNzguNDE4IFRkCi0oTWVsYm91cm5lLCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShBdXN0cmFsaWEuKSA1OS43NzU2IFRqCi0tODUyIFRKbQotKEphbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgzMSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgtKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEZlYikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgyLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgxOTk2LikgMjkuODg3OCBUagotMTAyLjczMiAxNjYuNDYzIFRkCi0oZnRwOi8vZnRwLmNzLmF1Y2tsYW5kLmFjLm56L3B1Yi9wZXRlci1mL0FDU0M5NnBhcGVyLnBzKSAzMjIuNzg4IFRqCi1bMSAwIDAgMSA3MiAxNTAuOTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0MC45NThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyOS4wMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSykgNy4xOTMgVGoKLTE1IFRKbQotKHVuaWhpaykgMjUuNDY0NCBUagotMTAgVEptCi0obykgNC45ODEzIFRqCi0tMjUwIFRKbQotKFNhZGFrYW5lJykgNDEuNDk0MiBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1MCBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjUwIFRKbQotKGFsZ29yaXRobSwpIDQxLjIzNTIgVGoKLS0yNTAgVEptCi0obWVudGlvbmVkKSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUsKSA2LjkxNDA0IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWlsYWJsZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShmcm9tOikgMjIuMTM2OSBUagotWzEgMCAwIDEgNzIgMTI2Ljg0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMTE3LjQ4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMTE3LjQ4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShodHRwOi8vbmFvbWkuaXMucy51LXRva3lvLmFjLmpwL35zYWRhL3BhcGVycy9TYWRhOThiLnBzLmd6KSAzNDYuNjk4IFRqCi1bMSAwIDAgMSA3MiA4OS45ODQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS4xNzAyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDM0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM4IDM4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKE1hbmJlcikgMzAuOTgzNyBUagotMjAgVEptCi0oLU15ZXJzKSAyOC43NzIgVGoKLS0yNTAgVEptCi0oc3VmKSAxMi4xNzQzIFRqCi0yNSBUSm0KLShcMDAyeCkgMTAuNTIwNSBUagotLTI1MCBUSm0KLShhcnJheSkgMjAuNDYzMiBUagotLTI1MCBUSm0KLShjb25zdHJ1Y3Rpb24pIDQ5LjI1NTEgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGRlc2NyaWJlZCkgMzguMTc2NyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocGFwZXIpIDIyLjEyNjkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGZyb206KSAyMi4xMzY5IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTY5OC41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDY5OC41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9wZW9wbGUvZ2VuZS9QQVBFUlMvc3VmZml4LnBzKSAzMjIuNzg4IFRqCi1bMSAwIDAgMSA3MiA2NzEuMDE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2MS4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY0OS4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmluYWxseSkgMjguMjM0IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjI3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyMSBUSm0KLShmb2xsbykgMTguODE5NCBUagotMjUgVEptCi0od2luZykgMTkuOTI1MiBUagotLTIyMiBUSm0KLShwYXBlcnMpIDI2LjAwMjQgVGoKLS0yMjEgVEptCi0oZG9jdW1lbnQpIDM5LjI5MjUgVGoKLS0yMjEgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjIyIFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXN0aWcpIDE4LjgxOTQgVGoKLTUgVEptCi0oYXRpb25zKSAyMy44MDA3IFRqCi0tMjIxIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yMjEgVEptCi0obWFkZSkgMjEuNTc5IFRqCi0tMjIyIFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yMjEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIxIFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yMjIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjEgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTIyMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMiBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi03MiA2MzcuMTQ2IFRkCi0oYWxnb3JpdGhtczopIDQ1LjM4OTYgVGoKLVsxIDAgMCAxIDcyIDYzNC45ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMzIuNTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBTQwotMCAwIDQ2OCAxMzEuNTA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTI3LjkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNjI1LjYyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNjI1LjYyNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShKdWxpYW4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oU2V3YXJkKSAzNS44NjU0IFRqCi0xMDIuNzMyIDYxMy42NjkgVGQKLShPbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oUGVyZm9ybWFuY2UpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQldUKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFNvcnRpbmcpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQWxnb3JpdGhtcykgNTkuNzc1NiBUagotMTAyLjczMiA2MDEuNzE0IFRkCi0oUHJvY2VlZGluZ3MpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKElFRUUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oRGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShDb21wcmVzc2lvbikgNjUuNzUzMiBUagotLTQyNiBUSm0KLShDb25mZXJlbmNlKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDIwMDApIDIzLjkxMDIgVGoKLTExMS4yMiA1ODkuNzU5IFRkCi0oU25vd2JpcmQsKSA1My43OTggVGoKLS00MjYgVEptCi0oVXRhaC4pIDI5Ljg4NzggVGoKLS04NTIgVEptCi0oMjgtMzApIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oTWFyY2gpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oMjAwMC4pIDI5Ljg4NzggVGoKLTkwIDU2NS44NDggVGQKLShKdWxpYW4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oU2V3YXJkKSAzNS44NjU0IFRqCi0xMDIuNzMyIDU1My44OTMgVGQKLShTcGFjZS10aW1lKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFRyYWRlb2ZmcykgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShJbnZlcnNlKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKEItVykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShUcmFuc2Zvcm0pIDUzLjc5OCBUagotMTAyLjczMiA1NDEuOTM4IFRkCi0oUHJvY2VlZGluZ3MpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKElFRUUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oRGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShDb21wcmVzc2lvbikgNjUuNzUzMiBUagotLTQyNiBUSm0KLShDb25mZXJlbmNlKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDIwMDEpIDIzLjkxMDIgVGoKLTExMS4yMiA1MjkuOTgzIFRkCi0oU25vd2JpcmQsKSA1My43OTggVGoKLS00MjYgVEptCi0oVXRhaC4pIDI5Ljg4NzggVGoKLS04NTIgVEptCi0oMjctMjkpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oTWFyY2gpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oMjAwMS4pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDcyIDUwMi40ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtNDUxLjYzNF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzNSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVUcmFpbGVyCi1lbmQKLSUlRG9jdW1lbnRTdXBwbGllZFJlc291cmNlczoKLSUlKyBmb250IERUVVVIUCtOaW1idXNTYW5MLUJvbGQKLSUlKyBmb250IFZYQU1SVitOaW1idXNSb21ObzlMLVJlZ3UKLSUlKyBmb250IE1GRUNVUitOaW1idXNNb25MLVJlZ3UKLSUlKyBmb250IFpPVk1SRCtDTU1JMTAKLSUlKyBmb250IEVSVkJGVCtOaW1idXNNb25MLUJvbGQKLSUlKyBmb250IEJaWElFQitDTVNZMTAKLSUlKyBmb250IFdXV1VUVStOaW1idXNSb21ObzlMLVJlZ3VJdGFsCi0lJUVPRgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnhtbCBiL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjQxMzYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5NjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+IDwhLS0gLSotIHNnbWwgLSotIC0tPgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgotICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIlsKLQotPCEtLSB2YXJpb3VzIHN0cmluZ3MsIGRhdGVzIGV0Yy4gY29tbW9uIHRvIGFsbCBkb2NzIC0tPgotPCFFTlRJVFkgJSBjb21tb24tZW50cyBTWVNURU0gImVudGl0aWVzLnhtbCI+ICVjb21tb24tZW50czsKLV0+Ci0KLTxib29rIGxhbmc9ImVuIiBpZD0idXNlcm1hbiIgeHJlZmxhYmVsPSJiemlwMiBNYW51YWwiPgotCi0gPGJvb2tpbmZvPgotICA8dGl0bGU+YnppcDIgYW5kIGxpYmJ6aXAyLCB2ZXJzaW9uIDEuMC41PC90aXRsZT4KLSAgPHN1YnRpdGxlPkEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IgZGF0YSBjb21wcmVzc2lvbjwvc3VidGl0bGU+Ci0gIDxjb3B5cmlnaHQ+Ci0gICA8eWVhcj4mYnotbGlmZXNwYW47PC95ZWFyPgotICAgPGhvbGRlcj5KdWxpYW4gU2V3YXJkPC9ob2xkZXI+Ci0gIDwvY29weXJpZ2h0PgotICA8cmVsZWFzZWluZm8+VmVyc2lvbiAmYnotdmVyc2lvbjsgb2YgJmJ6LWRhdGU7PC9yZWxlYXNlaW5mbz4KLQotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+SnVsaWFuPC9maXJzdG5hbWU+Ci0gICAgPHN1cm5hbWU+U2V3YXJkPC9zdXJuYW1lPgotICAgIDxhZmZpbGlhdGlvbj4KLSAgICAgPG9yZ25hbWU+JmJ6LXVybDs8L29yZ25hbWU+Ci0gICAgPC9hZmZpbGlhdGlvbj4KLSAgIDwvYXV0aG9yPgotICA8L2F1dGhvcmdyb3VwPgotCi0gIDxsZWdhbG5vdGljZT4KLQotICA8cGFyYT5UaGlzIHByb2dyYW0sIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUKLSAgYXNzb2NpYXRlZCBsaWJyYXJ5IDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQKLSAgYWxsIGRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgJmNvcHk7ICZiei1saWZlc3BhbjsgSnVsaWFuIFNld2FyZC4KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3BhcmE+Ci0KLSAgPHBhcmE+UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aAotICBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQotICBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OjwvcGFyYT4KLQotICA8aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSAgIDxsaXN0aXRlbT48cGFyYT5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCi0gICBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCi0gICBmb2xsb3dpbmcgZGlzY2xhaW1lci48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZQotICAgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwKLSAgIHNvZnR3YXJlLiAgSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4KLSAgIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLSAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT48cGFyYT5BbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkCi0gICBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsCi0gICBzb2Z0d2FyZS48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvCi0gICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gIDwvaXRlbWl6ZWRsaXN0PgotCi0gIDxwYXJhPlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiAiQVMgSVMiIEFORCBBTlkKLSAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKLSAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcGFyYT4KLQotIDxwYXJhPlBBVEVOVFM6IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSwKLSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSA8Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkbyBub3QgdXNlIGFueSBwYXRlbnRlZAotIGFsZ29yaXRobXMuICBIb3dldmVyLCBJIGRvIG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gY2FycnkKLSBvdXQgYSBwYXRlbnQgc2VhcmNoLiAgVGhlcmVmb3JlIEkgY2Fubm90IGdpdmUgYW55IGd1YXJhbnRlZSBvZgotIHRoZSBhYm92ZSBzdGF0ZW1lbnQuCi0gPC9wYXJhPgotCi08L2xlZ2Fsbm90aWNlPgotCi08L2Jvb2tpbmZvPgotCi0KLQotPGNoYXB0ZXIgaWQ9ImludHJvIiB4cmVmbGFiZWw9IkludHJvZHVjdGlvbiI+Ci08dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBmaWxlcwotdXNpbmcgdGhlIEJ1cnJvd3MtV2hlZWxlciBibG9jay1zb3J0aW5nIHRleHQgY29tcHJlc3Npb24KLWFsZ29yaXRobSwgYW5kIEh1ZmZtYW4gY29kaW5nLiAgQ29tcHJlc3Npb24gaXMgZ2VuZXJhbGx5Ci1jb25zaWRlcmFibHkgYmV0dGVyIHRoYW4gdGhhdCBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbAotTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YKLXRoZSBQUE0gZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gaXMgYnVpbHQgb24gdG9wIG9mCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiwgYSBmbGV4aWJsZSBsaWJyYXJ5IGZvcgotaGFuZGxpbmcgY29tcHJlc3NlZCBkYXRhIGluIHRoZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0LiAgVGhpcyBtYW51YWwKLWRlc2NyaWJlcyBib3RoIGhvdyB0byB1c2UgdGhlIHByb2dyYW0gYW5kIGhvdyB0byB3b3JrIHdpdGggdGhlCi1saWJyYXJ5IGludGVyZmFjZS4gIE1vc3Qgb2YgdGhlIG1hbnVhbCBpcyBkZXZvdGVkIHRvIHRoaXMKLWxpYnJhcnksIG5vdCB0aGUgcHJvZ3JhbSwgd2hpY2ggaXMgZ29vZCBuZXdzIGlmIHlvdXIgaW50ZXJlc3QgaXMKLW9ubHkgaW4gdGhlIHByb2dyYW0uPC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0idXNpbmciLz4gZGVzY3JpYmVzIGhvdyB0byB1c2UKLSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PjsgdGhpcyBpcyB0aGUgb25seSBwYXJ0Ci0geW91IG5lZWQgdG8gcmVhZCBpZiB5b3UganVzdCB3YW50IHRvIGtub3cgaG93IHRvIG9wZXJhdGUgdGhlCi0gcHJvZ3JhbS48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJsaWJwcm9nIi8+IGRlc2NyaWJlcyB0aGUKLSBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGluIGRldGFpbCwgYW5kPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ibWlzYyIvPiByZWNvcmRzIHNvbWUKLSBtaXNjZWxsYW5lb3VzIG5vdGVzIHdoaWNoIEkgdGhvdWdodCBvdWdodCB0byBiZSByZWNvcmRlZAotIHNvbWV3aGVyZS48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTwvY2hhcHRlcj4KLQotCi08Y2hhcHRlciBpZD0idXNpbmciIHhyZWZsYWJlbD0iSG93IHRvIHVzZSBiemlwMiI+Ci08dGl0bGU+SG93IHRvIHVzZSBiemlwMjwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgY2hhcHRlciBjb250YWlucyBhIGNvcHkgb2YgdGhlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBtYW4gcGFnZSwgYW5kIG5vdGhpbmcKLWVsc2UuPC9wYXJhPgotCi08c2VjdDEgaWQ9Im5hbWUiIHhyZWZsYWJlbD0iTkFNRSI+Ci08dGl0bGU+TkFNRTwvdGl0bGU+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiAtIGEgYmxvY2stc29ydGluZyBmaWxlCi0gIGNvbXByZXNzb3IsIHYxLjAuNDwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IC0KLSAgIGRlY29tcHJlc3NlcyBmaWxlcyB0byBzdGRvdXQ8L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gLQotICAgcmVjb3ZlcnMgZGF0YSBmcm9tIGRhbWFnZWQgYnppcDIgZmlsZXM8L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJzeW5vcHNpcyIgeHJlZmxhYmVsPSJTWU5PUFNJUyI+Ci08dGl0bGU+U1lOT1BTSVM8L3RpdGxlPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gWwotICAtY2Rma3FzdHZ6VkwxMjM0NTY3ODkgXSBbIGZpbGVuYW1lcyAuLi4gIF08L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IFsKLSAgLWZrdnNWTCBdIFsgZmlsZW5hbWVzIC4uLiAgXTwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IFsgLXMgXSBbCi0gIGZpbGVuYW1lcyAuLi4gIF08L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4KLSAgZmlsZW5hbWU8L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJkZXNjcmlwdGlvbiIgeHJlZmxhYmVsPSJERVNDUklQVElPTiI+Ci08dGl0bGU+REVTQ1JJUFRJT048L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wcmVzc2VzIGZpbGVzCi11c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrIHNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbgotYWxnb3JpdGhtLCBhbmQgSHVmZm1hbiBjb2RpbmcuICBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkKLWNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsCi1MWjc3L0xaNzgtYmFzZWQgY29tcHJlc3NvcnMsIGFuZCBhcHByb2FjaGVzIHRoZSBwZXJmb3JtYW5jZSBvZgotdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuPC9wYXJhPgotCi08cGFyYT5UaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgdG8KLXRob3NlIG9mIEdOVSA8Y29tcHV0ZXJvdXRwdXQ+Z3ppcDwvY29tcHV0ZXJvdXRwdXQ+LCBidXQgdGhleSBhcmUKLW5vdCBpZGVudGljYWwuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBleHBlY3RzIGEgbGlzdCBvZgotZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvbW1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcwotcmVwbGFjZWQgYnkgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgaXRzZWxmLCB3aXRoIHRoZSBuYW1lCi08Y29tcHV0ZXJvdXRwdXQ+b3JpZ2luYWxfbmFtZS5iejI8L2NvbXB1dGVyb3V0cHV0Pi4gIEVhY2gKLWNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsIHBlcm1pc3Npb25zLCBhbmQsCi13aGVuIHBvc3NpYmxlLCBvd25lcnNoaXAgYXMgdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWwsIHNvIHRoYXQKLXRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGNvcnJlY3RseSByZXN0b3JlZCBhdCBkZWNvbXByZXNzaW9uIHRpbWUuCi1GaWxlIG5hbWUgaGFuZGxpbmcgaXMgbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8KLW1lY2hhbmlzbSBmb3IgcHJlc2VydmluZyBvcmlnaW5hbCBmaWxlIG5hbWVzLCBwZXJtaXNzaW9ucywKLW93bmVyc2hpcHMgb3IgZGF0ZXMgaW4gZmlsZXN5c3RlbXMgd2hpY2ggbGFjayB0aGVzZSBjb25jZXB0cywgb3IKLWhhdmUgc2VyaW91cyBmaWxlIG5hbWUgbGVuZ3RoIHJlc3RyaWN0aW9ucywgc3VjaCBhcwotTVMtRE9TLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYnkgZGVmYXVsdCBub3QKLW92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5Ci10aGUgPGNvbXB1dGVyb3V0cHV0Pi1mPC9jb21wdXRlcm91dHB1dD4gZmxhZy48L3BhcmE+Ci0KLTxwYXJhPklmIG5vIGZpbGUgbmFtZXMgYXJlIHNwZWNpZmllZCwKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXByZXNzZXMgZnJvbSBzdGFuZGFyZAotaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCBkZWNsaW5lIHRvIHdyaXRlCi1jb21wcmVzc2VkIG91dHB1dCB0byBhIHRlcm1pbmFsLCBhcyB0aGlzIHdvdWxkIGJlIGVudGlyZWx5Ci1pbmNvbXByZWhlbnNpYmxlIGFuZCB0aGVyZWZvcmUgcG9pbnRsZXNzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiAob3IKLTxjb21wdXRlcm91dHB1dD5iemlwMiAtZDwvY29tcHV0ZXJvdXRwdXQ+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMuICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGJlIGRldGVjdGVkIGFuZAotaWdub3JlZCwgYW5kIGEgd2FybmluZyBpc3N1ZWQuCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhdHRlbXB0cyB0byBndWVzcyB0aGUKLWZpbGVuYW1lIGZvciB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZSBjb21wcmVzc2VkCi1maWxlIGFzIGZvbGxvd3M6PC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLmJ6MiA8L2NvbXB1dGVyb3V0cHV0PgotICBiZWNvbWVzCi0gIDxjb21wdXRlcm91dHB1dD5maWxlbmFtZTwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLmJ6IDwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGJlY29tZXMKLSAgPGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lPC9jb21wdXRlcm91dHB1dD48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWUudGJ6MjwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGJlY29tZXMKLSAgPGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLnRhcjwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLnRieiA8L2NvbXB1dGVyb3V0cHV0PgotICBiZWNvbWVzCi0gIDxjb21wdXRlcm91dHB1dD5maWxlbmFtZS50YXI8L2NvbXB1dGVyb3V0cHV0PjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5hbnlvdGhlcm5hbWUgPC9jb21wdXRlcm91dHB1dD4KLSAgYmVjb21lcwotICA8Y29tcHV0ZXJvdXRwdXQ+YW55b3RoZXJuYW1lLm91dDwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5JZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi08Y29tcHV0ZXJvdXRwdXQ+LmJ6MjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pi5iejwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pi50YnoyPC9jb21wdXRlcm91dHB1dD4gb3IKLTxjb21wdXRlcm91dHB1dD4udGJ6PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wbGFpbnMgdGhhdCBpdCBjYW5ub3QKLWd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZQotd2l0aCA8Y29tcHV0ZXJvdXRwdXQ+Lm91dDwvY29tcHV0ZXJvdXRwdXQ+IGFwcGVuZGVkLjwvcGFyYT4KLQotPHBhcmE+QXMgd2l0aCBjb21wcmVzc2lvbiwgc3VwcGx5aW5nIG5vIGZpbGVuYW1lcyBjYXVzZXMKLWRlY29tcHJlc3Npb24gZnJvbSBzdGFuZGFyZCBpbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgY29ycmVjdGx5Ci1kZWNvbXByZXNzIGEgZmlsZSB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0d28gb3IgbW9yZQotY29tcHJlc3NlZCBmaWxlcy4gIFRoZSByZXN1bHQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCi1jb3JyZXNwb25kaW5nIHVuY29tcHJlc3NlZCBmaWxlcy4gIEludGVncml0eSB0ZXN0aW5nCi0oPGNvbXB1dGVyb3V0cHV0Pi10PC9jb21wdXRlcm91dHB1dD4pIG9mIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkCi1maWxlcyBpcyBhbHNvIHN1cHBvcnRlZC48L3BhcmE+Ci0KLTxwYXJhPllvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSBzdGFuZGFyZAotb3V0cHV0IGJ5IGdpdmluZyB0aGUgPGNvbXB1dGVyb3V0cHV0Pi1jPC9jb21wdXRlcm91dHB1dD4gZmxhZy4KLU11bHRpcGxlIGZpbGVzIG1heSBiZSBjb21wcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlCi1yZXN1bHRpbmcgb3V0cHV0cyBhcmUgZmVkIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZgotbXVsdGlwbGUgZmlsZXMgaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtIGNvbnRhaW5pbmcKLW11bHRpcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5IGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB2ZXJzaW9uIDAuOS4wIG9yIGxhdGVyLgotRWFybGllciB2ZXJzaW9ucyBvZiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsCi1zdG9wIGFmdGVyIGRlY29tcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IChvcgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC1kYzwvY29tcHV0ZXJvdXRwdXQ+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcmVhZCBhcmd1bWVudHMKLWZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotPGNvbXB1dGVyb3V0cHV0PkJaSVAyPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QlpJUDwvY29tcHV0ZXJvdXRwdXQ+LCBpbiB0aGF0IG9yZGVyLCBhbmQgd2lsbAotcHJvY2VzcyB0aGVtIGJlZm9yZSBhbnkgYXJndW1lbnRzIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotVGhpcyBnaXZlcyBhIGNvbnZlbmllbnQgd2F5IHRvIHN1cHBseSBkZWZhdWx0IGFyZ3VtZW50cy48L3BhcmE+Ci0KLTxwYXJhPkNvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gaWYgdGhlIGNvbXByZXNzZWQKLWZpbGUgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcyB0aGFuCi1hYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZSBjb21wcmVzc2lvbgotbWVjaGFuaXNtIGhhcyBhIGNvbnN0YW50IG92ZXJoZWFkIGluIHRoZSByZWdpb24gb2YgNTAgYnl0ZXMuCi1SYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQgb2YgbW9zdCBmaWxlIGNvbXByZXNzb3JzKSBpcwotY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlciBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZAotMC41JS48L3BhcmE+Ci0KLTxwYXJhPkFzIGEgc2VsZi1jaGVjayBmb3IgeW91ciBwcm90ZWN0aW9uLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdXNlcyAzMi1iaXQgQ1JDcyB0byBtYWtlCi1zdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlCi1vcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLAotYW5kIGFnYWluc3QgdW5kZXRlY3RlZCBidWdzIGluCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiAoaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLgotVGhlIGNoYW5jZXMgb2YgZGF0YSBjb3JydXB0aW9uIGdvaW5nIHVuZGV0ZWN0ZWQgaXMgbWljcm9zY29waWMsCi1hYm91dCBvbmUgY2hhbmNlIGluIGZvdXIgYmlsbGlvbiBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEJlCi1hd2FyZSwgdGhvdWdoLCB0aGF0IHRoZSBjaGVjayBvY2N1cnMgdXBvbiBkZWNvbXByZXNzaW9uLCBzbyBpdAotY2FuIG9ubHkgdGVsbCB5b3UgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcuICBJdCBjYW4ndCBoZWxwIHlvdQotcmVjb3ZlciB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAycmVjb3ZlcjwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRyeSB0byByZWNvdmVyCi1kYXRhIGZyb20gZGFtYWdlZCBmaWxlcy48L3BhcmE+Ci0KLTxwYXJhPlJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsIDEgZm9yIGVudmlyb25tZW50YWwKLXByb2JsZW1zIChmaWxlIG5vdCBmb3VuZCwgaW52YWxpZCBmbGFncywgSS9PIGVycm9ycywgZXRjLiksIDIKLXRvIGluZGljYXRlIGEgY29ycnVwdCBjb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsCi1jb25zaXN0ZW5jeSBlcnJvciAoZWcsIGJ1Zykgd2hpY2ggY2F1c2VkCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0byBwYW5pYy48L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJvcHRpb25zIiB4cmVmbGFiZWw9Ik9QVElPTlMiPgotPHRpdGxlPk9QVElPTlM8L3RpdGxlPgotCi08dmFyaWFibGVsaXN0PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LWMgLS1zdGRvdXQ8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+Q29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZAotICBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tZCAtLWRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+Rm9yY2UgZGVjb21wcmVzc2lvbi4KLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4sCi0gIDxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gIDxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IGFyZSByZWFsbHkgdGhlIHNhbWUKLSAgcHJvZ3JhbSwgYW5kIHRoZSBkZWNpc2lvbiBhYm91dCB3aGF0IGFjdGlvbnMgdG8gdGFrZSBpcyBkb25lIG9uCi0gIHRoZSBiYXNpcyBvZiB3aGljaCBuYW1lIGlzIHVzZWQuICBUaGlzIGZsYWcgb3ZlcnJpZGVzIHRoYXQKLSAgbWVjaGFuaXNtLCBhbmQgZm9yY2VzIGJ6aXAyIHRvIGRlY29tcHJlc3MuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4teiAtLWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlRoZSBjb21wbGVtZW50IHRvCi0gIDxjb21wdXRlcm91dHB1dD4tZDwvY29tcHV0ZXJvdXRwdXQ+OiBmb3JjZXMgY29tcHJlc3Npb24sCi0gIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9rYXRpb24gbmFtZS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi10IC0tdGVzdDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5DaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQKLSAgZG9uJ3QgZGVjb21wcmVzcyB0aGVtLiAgVGhpcyByZWFsbHkgcGVyZm9ybXMgYSB0cmlhbAotICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LWYgLS1mb3JjZTwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5Gb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgTm9ybWFsbHksCi0gIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgbm90IG92ZXJ3cml0ZQotICBleGlzdGluZyBvdXRwdXQgZmlsZXMuICBBbHNvIGZvcmNlcwotICA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0byBicmVhayBoYXJkIGxpbmtzIHRvCi0gIGZpbGVzLCB3aGljaCBpdCBvdGhlcndpc2Ugd291bGRuJ3QgZG8uPC9wYXJhPgotICA8cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBub3JtYWxseSBkZWNsaW5lcwotICB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoIGRvbid0IGhhdmUgdGhlIGNvcnJlY3QgbWFnaWMgaGVhZGVyCi0gIGJ5dGVzLiBJZiBmb3JjZWQgKDxjb21wdXRlcm91dHB1dD4tZjwvY29tcHV0ZXJvdXRwdXQ+KSwKLSAgaG93ZXZlciwgaXQgd2lsbCBwYXNzIHN1Y2ggZmlsZXMgdGhyb3VnaCB1bm1vZGlmaWVkLiBUaGlzIGlzCi0gIGhvdyBHTlUgPGNvbXB1dGVyb3V0cHV0Pmd6aXA8L2NvbXB1dGVyb3V0cHV0PiBiZWhhdmVzLjwvcGFyYT4KLSA8L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LWsgLS1rZWVwPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPktlZXAgKGRvbid0IGRlbGV0ZSkgaW5wdXQgZmlsZXMgZHVyaW5nCi0gIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tcyAtLXNtYWxsPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlJlZHVjZSBtZW1vcnkgdXNhZ2UsIGZvciBjb21wcmVzc2lvbiwKLSAgZGVjb21wcmVzc2lvbiBhbmQgdGVzdGluZy4gIEZpbGVzIGFyZSBkZWNvbXByZXNzZWQgYW5kIHRlc3RlZAotICB1c2luZyBhIG1vZGlmaWVkIGFsZ29yaXRobSB3aGljaCBvbmx5IHJlcXVpcmVzIDIuNSBieXRlcyBwZXIKLSAgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlIGRlY29tcHJlc3NlZCBpbiAyMzAwawotICBvZiBtZW1vcnksIGFsYmVpdCBhdCBhYm91dCBoYWxmIHRoZSBub3JtYWwgc3BlZWQuPC9wYXJhPgotICA8cGFyYT5EdXJpbmcgY29tcHJlc3Npb24sIDxjb21wdXRlcm91dHB1dD4tczwvY29tcHV0ZXJvdXRwdXQ+Ci0gIHNlbGVjdHMgYSBibG9jayBzaXplIG9mIDIwMGssIHdoaWNoIGxpbWl0cyBtZW1vcnkgdXNlIHRvIGFyb3VuZAotICB0aGUgc2FtZSBmaWd1cmUsIGF0IHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uICBJbgotICBzaG9ydCwgaWYgeW91ciBtYWNoaW5lIGlzIGxvdyBvbiBtZW1vcnkgKDggbWVnYWJ5dGVzIG9yIGxlc3MpLAotICB1c2UgPGNvbXB1dGVyb3V0cHV0Pi1zPC9jb21wdXRlcm91dHB1dD4gZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgPHhyZWYgbGlua2VuZD0ibWVtb3J5LW1hbmFnZW1lbnQiLz4gYmVsb3cuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tcSAtLXF1aWV0PC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4KLSAgTWVzc2FnZXMgcGVydGFpbmluZyB0byBJL08gZXJyb3JzIGFuZCBvdGhlciBjcml0aWNhbCBldmVudHMKLSAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi12IC0tdmVyYm9zZTwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5WZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yCi0gIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBGdXJ0aGVyCi0gIDxjb21wdXRlcm91dHB1dD4tdjwvY29tcHV0ZXJvdXRwdXQ+J3MgaW5jcmVhc2UgdGhlIHZlcmJvc2l0eQotICBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaCBpcyBwcmltYXJpbHkgb2YKLSAgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tTCAtLWxpY2Vuc2UgLVYgLS12ZXJzaW9uPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPkRpc3BsYXkgdGhlIHNvZnR3YXJlIHZlcnNpb24sIGxpY2Vuc2UgdGVybXMgYW5kCi0gIGNvbmRpdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tMTwvY29tcHV0ZXJvdXRwdXQ+IChvcgotIDxjb21wdXRlcm91dHB1dD4tLWZhc3Q8L2NvbXB1dGVyb3V0cHV0PikgdG8KLSA8Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiAob3IKLSA8Y29tcHV0ZXJvdXRwdXQ+LWJlc3Q8L2NvbXB1dGVyb3V0cHV0Pik8L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4uICA5MDAgawotICB3aGVuIGNvbXByZXNzaW5nLiAgSGFzIG5vIGVmZmVjdCB3aGVuIGRlY29tcHJlc3NpbmcuICBTZWUgPHhyZWYKLSAgbGlua2VuZD0ibWVtb3J5LW1hbmFnZW1lbnQiIC8+IGJlbG93LiAgVGhlCi0gIDxjb21wdXRlcm91dHB1dD4tLWZhc3Q8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgPGNvbXB1dGVyb3V0cHV0Pi0tYmVzdDwvY29tcHV0ZXJvdXRwdXQ+IGFsaWFzZXMgYXJlIHByaW1hcmlseQotICBmb3IgR05VIDxjb21wdXRlcm91dHB1dD5nemlwPC9jb21wdXRlcm91dHB1dD4gY29tcGF0aWJpbGl0eS4KLSAgSW4gcGFydGljdWxhciwgPGNvbXB1dGVyb3V0cHV0Pi0tZmFzdDwvY29tcHV0ZXJvdXRwdXQ+IGRvZXNuJ3QKLSAgbWFrZSB0aGluZ3Mgc2lnbmlmaWNhbnRseSBmYXN0ZXIuICBBbmQKLSAgPGNvbXB1dGVyb3V0cHV0Pi0tYmVzdDwvY29tcHV0ZXJvdXRwdXQ+IG1lcmVseSBzZWxlY3RzIHRoZQotICBkZWZhdWx0IGJlaGF2aW91ci48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi0tPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywKLSAgZXZlbiBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbmRsZQotICBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyB3aXRoIGEgZGFzaCwgZm9yIGV4YW1wbGU6Ci0gIDxjb21wdXRlcm91dHB1dD5iemlwMiAtLQotICAtbXlmaWxlbmFtZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LS1yZXBldGl0aXZlLWZhc3Q8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LS1yZXBldGl0aXZlLWJlc3Q8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlc2UgZmxhZ3MgYXJlIHJlZHVuZGFudCBpbiB2ZXJzaW9ucyAwLjkuNSBhbmQKLSAgYWJvdmUuICBUaGV5IHByb3ZpZGVkIHNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciB0aGUgYmVoYXZpb3VyIG9mCi0gIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbiBlYXJsaWVyIHZlcnNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzCi0gIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZSBoYXZlIGFuIGltcHJvdmVkIGFsZ29yaXRobSB3aGljaAotICByZW5kZXJzIHRoZXNlIGZsYWdzIGlycmVsZXZhbnQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0ibWVtb3J5LW1hbmFnZW1lbnQiIHhyZWZsYWJlbD0iTUVNT1JZIE1BTkFHRU1FTlQiPgotPHRpdGxlPk1FTU9SWSBNQU5BR0VNRU5UPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBsYXJnZQotZmlsZXMgaW4gYmxvY2tzLiAgVGhlIGJsb2NrIHNpemUgYWZmZWN0cyBib3RoIHRoZSBjb21wcmVzc2lvbgotcmF0aW8gYWNoaWV2ZWQsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uCi1hbmQgZGVjb21wcmVzc2lvbi4gIFRoZSBmbGFncyA8Y29tcHV0ZXJvdXRwdXQ+LTE8L2NvbXB1dGVyb3V0cHV0PgotdGhyb3VnaCA8Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiBzcGVjaWZ5IHRoZSBibG9jawotc2l6ZSB0byBiZSAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpCi1yZXNwZWN0aXZlbHkuICBBdCBkZWNvbXByZXNzaW9uIHRpbWUsIHRoZSBibG9jayBzaXplIHVzZWQgZm9yCi1jb21wcmVzc2lvbiBpcyByZWFkIGZyb20gdGhlIGhlYWRlciBvZiB0aGUgY29tcHJlc3NlZCBmaWxlLCBhbmQKLTxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gdGhlbiBhbGxvY2F0ZXMgaXRzZWxmCi1qdXN0IGVub3VnaCBtZW1vcnkgdG8gZGVjb21wcmVzcyB0aGUgZmlsZS4gIFNpbmNlIGJsb2NrIHNpemVzIGFyZQotc3RvcmVkIGluIGNvbXByZXNzZWQgZmlsZXMsIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3MKLTxjb21wdXRlcm91dHB1dD4tMTwvY29tcHV0ZXJvdXRwdXQ+IHRvCi08Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiBhcmUgaXJyZWxldmFudCB0byBhbmQgc28KLWlnbm9yZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uPC9wYXJhPgotCi08cGFyYT5Db21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMsIGluIGJ5dGVzLCBjYW4gYmUKLWVzdGltYXRlZCBhczo8L3BhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1Db21wcmVzc2lvbjogICA0MDBrICsgKCA4IHggYmxvY2sgc2l6ZSApCi0KLURlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkxhcmdlciBibG9jayBzaXplcyBnaXZlIHJhcGlkbHkgZGltaW5pc2hpbmcgbWFyZ2luYWwKLXJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28gb3IKLXRocmVlIGh1bmRyZWQgayBvZiBibG9jayBzaXplLCBhIGZhY3Qgd29ydGggYmVhcmluZyBpbiBtaW5kIHdoZW4KLXVzaW5nIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IG9uIHNtYWxsIG1hY2hpbmVzLgotSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYXBwcmVjaWF0ZSB0aGF0IHRoZSBkZWNvbXByZXNzaW9uIG1lbW9yeQotcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgdGhlIGNob2ljZSBvZiBibG9jawotc2l6ZS48L3BhcmE+Ci0KLTxwYXJhPkZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGggdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotPGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIHJlcXVpcmUgYWJvdXQgMzcwMAota2J5dGVzIHRvIGRlY29tcHJlc3MuICBUbyBzdXBwb3J0IGRlY29tcHJlc3Npb24gb2YgYW55IGZpbGUgb24gYQotNCBtZWdhYnl0ZSBtYWNoaW5lLCA8Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGhhcwotYW4gb3B0aW9uIHRvIGRlY29tcHJlc3MgdXNpbmcgYXBwcm94aW1hdGVseSBoYWxmIHRoaXMgYW1vdW50IG9mCi1tZW1vcnksIGFib3V0IDIzMDAga2J5dGVzLiAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwKLXNvIHlvdSBzaG91bGQgdXNlIHRoaXMgb3B0aW9uIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50Ci1mbGFnIGlzIDxjb21wdXRlcm91dHB1dD4tczwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SW4gZ2VuZXJhbCwgdHJ5IGFuZCB1c2UgdGhlIGxhcmdlc3QgYmxvY2sgc2l6ZSBtZW1vcnkKLWNvbnN0cmFpbnRzIGFsbG93LCBzaW5jZSB0aGF0IG1heGltaXNlcyB0aGUgY29tcHJlc3Npb24gYWNoaWV2ZWQuCi1Db21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHVhbGx5IHVuYWZmZWN0ZWQgYnkKLWJsb2NrIHNpemUuPC9wYXJhPgotCi08cGFyYT5Bbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluIGEKLXNpbmdsZSBibG9jayAtLSB0aGF0IG1lYW5zIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyIHVzaW5nIGEKLWxhcmdlIGJsb2NrIHNpemUuICBUaGUgYW1vdW50IG9mIHJlYWwgbWVtb3J5IHRvdWNoZWQgaXMKLXByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgc2luY2UgdGhlIGZpbGUgaXMgc21hbGxlcgotdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nIGEgZmlsZSAyMCwwMDAgYnl0ZXMgbG9uZwotd2l0aCB0aGUgZmxhZyA8Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGNhdXNlIHRoZQotY29tcHJlc3NvciB0byBhbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaAotNDAwayArIDIwMDAwICogOCA9IDU2MCBrYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZSBkZWNvbXByZXNzb3IKLXdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0IG9ubHkgdG91Y2ggMTAwayArIDIwMDAwICogNCA9IDE4MAota2J5dGVzLjwvcGFyYT4KLQotPHBhcmE+SGVyZSBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCi1mb3IgZGlmZmVyZW50IGJsb2NrIHNpemVzLiAgQWxzbyByZWNvcmRlZCBpcyB0aGUgdG90YWwgY29tcHJlc3NlZAotc2l6ZSBmb3IgMTQgZmlsZXMgb2YgdGhlIENhbGdhcnkgVGV4dCBDb21wcmVzc2lvbiBDb3JwdXMKLXRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiBnaXZlcyBzb21lIGZlZWwgZm9yIGhvdwotY29tcHJlc3Npb24gdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4gIFRoZXNlIGZpZ3VyZXMgdGVuZCB0bwotdW5kZXJzdGF0ZSB0aGUgYWR2YW50YWdlIG9mIGxhcmdlciBibG9jayBzaXplcyBmb3IgbGFyZ2VyIGZpbGVzLAotc2luY2UgdGhlIENvcnB1cyBpcyBkb21pbmF0ZWQgYnkgc21hbGxlciBmaWxlcy48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLSAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotRmxhZyAgICAgdXNhZ2UgICAgICB1c2FnZSAgICAgICAtcyB1c2FnZSAgICAgU2l6ZQotCi0gLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAtMyAgICAgIDI4MDBrICAgICAgMTMwMGsgICAgICAgICA4NTBrICAgICAgODYwMzM4Ci0gLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAtNiAgICAgIDUyMDBrICAgICAgMjUwMGsgICAgICAgIDE2MDBrICAgICAgODM4NjI2Ci0gLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAtOSAgICAgIDc2MDBrICAgICAgMzcwMGsgICAgICAgIDIzNTBrICAgICAgODI4NjQyCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0icmVjb3ZlcmluZyIgeHJlZmxhYmVsPSJSRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTIj4KLTx0aXRsZT5SRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBmaWxlcyBpbgotYmxvY2tzLCB1c3VhbGx5IDkwMGtieXRlcyBsb25nLiAgRWFjaCBibG9jayBpcyBoYW5kbGVkCi1pbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3IgY2F1c2VzIGEKLW11bHRpLWJsb2NrIDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZSB0byBiZWNvbWUKLWRhbWFnZWQsIGl0IG1heSBiZSBwb3NzaWJsZSB0byByZWNvdmVyIGRhdGEgZnJvbSB0aGUgdW5kYW1hZ2VkCi1ibG9ja3MgaW4gdGhlIGZpbGUuPC9wYXJhPgotCi08cGFyYT5UaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrIGlzIGRlbGltaXRlZCBieQotYSA0OC1iaXQgcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUgYmxvY2sKLWJvdW5kYXJpZXMgd2l0aCByZWFzb25hYmxlIGNlcnRhaW50eS4gIEVhY2ggYmxvY2sgYWxzbyBjYXJyaWVzCi1pdHMgb3duIDMyLWJpdCBDUkMsIHNvIGRhbWFnZWQgYmxvY2tzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20KLXVuZGFtYWdlZCBvbmVzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAycmVjb3ZlcjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgc2ltcGxlCi1wcm9ncmFtIHdob3NlIHB1cnBvc2UgaXMgdG8gc2VhcmNoIGZvciBibG9ja3MgaW4KLTxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZXMsIGFuZCB3cml0ZSBlYWNoIGJsb2NrCi1vdXQgaW50byBpdHMgb3duIDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZS4gIFlvdQotY2FuIHRoZW4gdXNlIDxjb21wdXRlcm91dHB1dD5iemlwMiAtdDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRlc3QKLXRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2Ugd2hpY2gKLWFyZSB1bmRhbWFnZWQuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gdGFrZXMgYQotc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtYWdlZCBmaWxlLCBhbmQgd3JpdGVzIGEKLW51bWJlciBvZiBmaWxlcyA8Y29tcHV0ZXJvdXRwdXQ+cmVjMDAwMWZpbGUuYnoyPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+cmVjMDAwMmZpbGUuYnoyPC9jb21wdXRlcm91dHB1dD4sIGV0YywgY29udGFpbmluZwotdGhlIGV4dHJhY3RlZCBibG9ja3MuICBUaGUgb3V0cHV0IGZpbGVuYW1lcyBhcmUgZGVzaWduZWQgc28gdGhhdAotdGhlIHVzZSBvZiB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nIC0tIGZvciBleGFtcGxlLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC1kYyByZWMqZmlsZS5iejIgJiM2MjsKLXJlY292ZXJlZF9kYXRhPC9jb21wdXRlcm91dHB1dD4gLS0gbGlzdHMgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0Ci1vcmRlci48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgb2YKLW1vc3QgdXNlIGRlYWxpbmcgd2l0aCBsYXJnZSA8Y29tcHV0ZXJvdXRwdXQ+LmJ6MjwvY29tcHV0ZXJvdXRwdXQ+Ci1maWxlcywgYXMgdGhlc2Ugd2lsbCBjb250YWluIG1hbnkgYmxvY2tzLiAgSXQgaXMgY2xlYXJseSBmdXRpbGUKLXRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayBmaWxlcywgc2luY2UgYSBkYW1hZ2VkIGJsb2NrCi1jYW5ub3QgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluaW1pc2UgYW55IHBvdGVudGlhbCBkYXRhCi1sb3NzIHRocm91Z2ggbWVkaWEgb3IgdHJhbnNtaXNzaW9uIGVycm9ycywgeW91IG1pZ2h0IGNvbnNpZGVyCi1jb21wcmVzc2luZyB3aXRoIGEgc21hbGxlciBibG9jayBzaXplLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InBlcmZvcm1hbmNlIiB4cmVmbGFiZWw9IlBFUkZPUk1BTkNFIE5PVEVTIj4KLTx0aXRsZT5QRVJGT1JNQU5DRSBOT1RFUzwvdGl0bGU+Ci0KLTxwYXJhPlRoZSBzb3J0aW5nIHBoYXNlIG9mIGNvbXByZXNzaW9uIGdhdGhlcnMgdG9nZXRoZXIgc2ltaWxhcgotc3RyaW5ncyBpbiB0aGUgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZyB2ZXJ5IGxvbmcKLXJ1bnMgb2YgcmVwZWF0ZWQgc3ltYm9scywgbGlrZSAiYWFiYWFiYWFiYWFiIC4uLiIgIChyZXBlYXRlZAotc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkgY29tcHJlc3MgbW9yZSBzbG93bHkgdGhhbiBub3JtYWwuCi1WZXJzaW9ucyAwLjkuNSBhbmQgYWJvdmUgZmFyZSBtdWNoIGJldHRlciB0aGFuIHByZXZpb3VzIHZlcnNpb25zCi1pbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8gYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UKLWNvbXByZXNzaW9uIHRpbWUgaXMgaW4gdGhlIHJlZ2lvbiBvZiAxMDoxLiAgRm9yIHByZXZpb3VzCi12ZXJzaW9ucywgdGhpcyBmaWd1cmUgd2FzIG1vcmUgbGlrZSAxMDA6MS4gIFlvdSBjYW4gdXNlIHRoZQotPGNvbXB1dGVyb3V0cHV0Pi12dnZ2PC9jb21wdXRlcm91dHB1dD4gb3B0aW9uIHRvIG1vbml0b3IgcHJvZ3Jlc3MKLWluIGdyZWF0IGRldGFpbCwgaWYgeW91IHdhbnQuPC9wYXJhPgotCi08cGFyYT5EZWNvbXByZXNzaW9uIHNwZWVkIGlzIHVuYWZmZWN0ZWQgYnkgdGhlc2UKLXBoZW5vbWVuYS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHVzdWFsbHkgYWxsb2NhdGVzCi1zZXZlcmFsIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8gb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwKLW92ZXIgaXQgaW4gYSBmYWlybHkgcmFuZG9tIGZhc2hpb24uICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsCi1ib3RoIGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZywgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5Ci10aGUgc3BlZWQgYXQgd2hpY2ggeW91ciBtYWNoaW5lIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLUJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byByZWR1Y2UgdGhlIG1pc3MKLXJhdGUgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGdpdmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGxhcmdlCi1wZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcGVyZm9ybSBiZXN0IG9uCi1tYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0iY2F2ZWF0cyIgeHJlZmxhYmVsPSJDQVZFQVRTIj4KLTx0aXRsZT5DQVZFQVRTPC90aXRsZT4KLQotPHBhcmE+SS9PIGVycm9yIG1lc3NhZ2VzIGFyZSBub3QgYXMgaGVscGZ1bCBhcyB0aGV5IGNvdWxkIGJlLgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdHJpZXMgaGFyZCB0byBkZXRlY3QgSS9PCi1lcnJvcnMgYW5kIGV4aXQgY2xlYW5seSwgYnV0IHRoZSBkZXRhaWxzIG9mIHdoYXQgdGhlIHByb2JsZW0gaXMKLXNvbWV0aW1lcyBzZWVtIHJhdGhlciBtaXNsZWFkaW5nLjwvcGFyYT4KLQotPHBhcmE+VGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uICZiei12ZXJzaW9uOyBvZgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4uICBDb21wcmVzc2VkIGRhdGEgY3JlYXRlZCBieQotdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZQotcHJldmlvdXMgcHVibGljIHJlbGVhc2VzLCB2ZXJzaW9ucyAwLjFwbDIsIDAuOS4wIGFuZCAwLjkuNSwgMS4wLjAsCi0xLjAuMSwgMS4wLjIgYW5kIDEuMC4zLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kCi1hYm92ZSBjYW4gY29ycmVjdGx5IGRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuCi0wLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgc3RvcCBhZnRlciBkZWNvbXByZXNzaW5nIGp1c3QgdGhlIGZpcnN0Ci1maWxlIGluIHRoZSBzdHJlYW0uPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gdmVyc2lvbnMKLXByaW9yIHRvIDEuMC4yIHVzZWQgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudCBiaXQgcG9zaXRpb25zIGluCi1jb21wcmVzc2VkIGZpbGVzLCBzbyBpdCBjb3VsZCBub3QgaGFuZGxlIGNvbXByZXNzZWQgZmlsZXMgbW9yZQotdGhhbiA1MTIgbWVnYWJ5dGVzIGxvbmcuICBWZXJzaW9ucyAxLjAuMiBhbmQgYWJvdmUgdXNlIDY0LWJpdCBpbnRzCi1vbiBzb21lIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHRoZW0gKEdOVSBzdXBwb3J0ZWQgdGFyZ2V0cywgYW5kCi1XaW5kb3dzKS4gVG8gZXN0YWJsaXNoIHdoZXRoZXIgb3Igbm90Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gd2FzIGJ1aWx0IHdpdGggc3VjaAotYSBsaW1pdGF0aW9uLCBydW4gaXQgd2l0aG91dCBhcmd1bWVudHMuIEluIGFueSBldmVudCB5b3UgY2FuCi1idWlsZCB5b3Vyc2VsZiBhbiB1bmxpbWl0ZWQgdmVyc2lvbiBpZiB5b3UgY2FuIHJlY29tcGlsZSBpdCB3aXRoCi08Y29tcHV0ZXJvdXRwdXQ+TWF5YmVVSW50NjQ8L2NvbXB1dGVyb3V0cHV0PiBzZXQgdG8gYmUgYW4KLXVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0iYXV0aG9yIiB4cmVmbGFiZWw9IkFVVEhPUiI+Ci08dGl0bGU+QVVUSE9SPC90aXRsZT4KLQotPHBhcmE+SnVsaWFuIFNld2FyZCwKLTxjb21wdXRlcm91dHB1dD4mYnotZW1haWw7PC9jb21wdXRlcm91dHB1dD48L3BhcmE+Ci0KLTxwYXJhPlRoZSBpZGVhcyBlbWJvZGllZCBpbgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZQotZm9sbG93aW5nIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlCi1ibG9jayBzb3J0aW5nIHRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAoYWdhaW4sIGZvciB0aGUKLUh1ZmZtYW4gY29kZXIpLCBQZXRlciBGZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kaW5nIG1vZGVsIGluCi10aGUgb3JpZ2luYWwgPGNvbXB1dGVyb3V0cHV0PmJ6aXA8L2NvbXB1dGVyb3V0cHV0PiwgYW5kIG1hbnkKLXJlZmluZW1lbnRzKSwgYW5kIEFsaXN0YWlyIE1vZmZhdCwgUmFkZm9yZCBOZWFsIGFuZCBJYW4gV2l0dGVuCi0oZm9yIHRoZSBhcml0aG1ldGljIGNvZGVyIGluIHRoZSBvcmlnaW5hbAotPGNvbXB1dGVyb3V0cHV0PmJ6aXA8L2NvbXB1dGVyb3V0cHV0PikuICBJIGFtIG11Y2ggaW5kZWJ0ZWQgZm9yCi10aGVpciBoZWxwLCBzdXBwb3J0IGFuZCBhZHZpY2UuICBTZWUgdGhlIG1hbnVhbCBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gZm9yIHBvaW50ZXJzIHRvIHNvdXJjZXMgb2YgZG9jdW1lbnRhdGlvbi4gIENocmlzdGlhbgotdm9uIFJvcXVlcyBlbmNvdXJhZ2VkIG1lIHRvIGxvb2sgZm9yIGZhc3RlciBzb3J0aW5nIGFsZ29yaXRobXMsCi1zbyBhcyB0byBzcGVlZCB1cCBjb21wcmVzc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8KLWltcHJvdmUgdGhlIHdvcnN0LWNhc2UgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICAKLURvbm5hIFJvYmluc29uIFhNTGlzZWQgdGhlIGRvY3VtZW50YXRpb24uCi1NYW55IHBlb3BsZSBzZW50Ci1wYXRjaGVzLCBoZWxwZWQgd2l0aCBwb3J0YWJpbGl0eSBwcm9ibGVtcywgbGVudCBtYWNoaW5lcywgZ2F2ZQotYWR2aWNlIGFuZCB3ZXJlIGdlbmVyYWxseSBoZWxwZnVsLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotPC9jaGFwdGVyPgotCi0KLQotPGNoYXB0ZXIgaWQ9ImxpYnByb2ciIHhyZWZsYWJlbD0iUHJvZ3JhbW1pbmcgd2l0aCBsaWJiemlwMiI+Ci08dGl0bGU+Ci1Qcm9ncmFtbWluZyB3aXRoIDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+Ci08L3RpdGxlPgotCi08cGFyYT5UaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8KLTxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+Rm9yIGdlbmVyYWwgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiwgcGFydGljdWxhcmx5IGFib3V0Ci1tZW1vcnkgdXNlIGFuZCBwZXJmb3JtYW5jZSBhc3BlY3RzLCB5b3UnZCBiZSB3ZWxsIGFkdmlzZWQgdG8gcmVhZAotPHhyZWYgbGlua2VuZD0idXNpbmciLz4gYXMgd2VsbC48L3BhcmE+Ci0KLQotPHNlY3QxIGlkPSJ0b3AtbGV2ZWwiIHhyZWZsYWJlbD0iVG9wLWxldmVsIHN0cnVjdHVyZSI+Ci08dGl0bGU+VG9wLWxldmVsIHN0cnVjdHVyZTwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgZmxleGlibGUKLWxpYnJhcnkgZm9yIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nIGRhdGEgaW4gdGhlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkYXRhIGZvcm1hdC4gIEFsdGhvdWdoCi1wYWNrYWdlZCBhcyBhIHNpbmdsZSBlbnRpdHksIGl0IGhlbHBzIHRvIHJlZ2FyZCB0aGUgbGlicmFyeSBhcwotdGhyZWUgc2VwYXJhdGUgcGFydHM6IHRoZSBsb3cgbGV2ZWwgaW50ZXJmYWNlLCBhbmQgdGhlIGhpZ2ggbGV2ZWwKLWludGVyZmFjZSwgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMuPC9wYXJhPgotCi08cGFyYT5UaGUgc3RydWN0dXJlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PidzIGludGVyZmFjZXMgaXMgc2ltaWxhcgotdG8gdGhhdCBvZiBKZWFuLWxvdXAgR2FpbGx5J3MgYW5kIE1hcmsgQWRsZXIncyBleGNlbGxlbnQKLTxjb21wdXRlcm91dHB1dD56bGliPC9jb21wdXRlcm91dHB1dD4gbGlicmFyeS48L3BhcmE+Ci0KLTxwYXJhPkFsbCBleHRlcm5hbGx5IHZpc2libGUgc3ltYm9scyBoYXZlIG5hbWVzIGJlZ2lubmluZwotPGNvbXB1dGVyb3V0cHV0PkJaMl88L2NvbXB1dGVyb3V0cHV0Pi4gIFRoaXMgaXMgbmV3IGluIHZlcnNpb24KLTEuMC4gIFRoZSBpbnRlbnRpb24gaXMgdG8gbWluaW1pc2UgcG9sbHV0aW9uIG9mIHRoZSBuYW1lc3BhY2VzIG9mCi1saWJyYXJ5IGNsaWVudHMuPC9wYXJhPgotCi08cGFyYT5UbyB1c2UgYW55IHBhcnQgb2YgdGhlIGxpYnJhcnksIHlvdSBuZWVkIHRvCi08Y29tcHV0ZXJvdXRwdXQ+I2luY2x1ZGUgJmx0O2J6bGliLmgmZ3Q7PC9jb21wdXRlcm91dHB1dD4KLWludG8geW91ciBzb3VyY2VzLjwvcGFyYT4KLQotCi0KLTxzZWN0MiBpZD0ibGwtc3VtbWFyeSIgeHJlZmxhYmVsPSJMb3ctbGV2ZWwgc3VtbWFyeSI+Ci08dGl0bGU+TG93LWxldmVsIHN1bW1hcnk8L3RpdGxlPgotCi08cGFyYT5UaGlzIGludGVyZmFjZSBwcm92aWRlcyBzZXJ2aWNlcyBmb3IgY29tcHJlc3NpbmcgYW5kCi1kZWNvbXByZXNzaW5nIGRhdGEgaW4gbWVtb3J5LiAgVGhlcmUncyBubyBwcm92aXNpb24gZm9yIGRlYWxpbmcKLXdpdGggZmlsZXMsIHN0cmVhbXMgb3IgYW55IG90aGVyIEkvTyBtZWNoYW5pc21zLCBqdXN0IHN0cmFpZ2h0Ci1tZW1vcnktdG8tbWVtb3J5IHdvcmsuICBJbiBmYWN0LCB0aGlzIHBhcnQgb2YgdGhlIGxpYnJhcnkgY2FuIGJlCi1jb21waWxlZCB3aXRob3V0IGluY2x1c2lvbiBvZgotPGNvbXB1dGVyb3V0cHV0PnN0ZGlvLmg8L2NvbXB1dGVyb3V0cHV0Piwgd2hpY2ggbWF5IGJlIGhlbHBmdWwKLWZvciBlbWJlZGRlZCBhcHBsaWNhdGlvbnMuPC9wYXJhPgotCi08cGFyYT5UaGUgbG93LWxldmVsIHBhcnQgb2YgdGhlIGxpYnJhcnkgaGFzIG5vIGdsb2JhbCB2YXJpYWJsZXMKLWFuZCBpcyB0aGVyZWZvcmUgdGhyZWFkLXNhZmUuPC9wYXJhPgotCi08cGFyYT5TaXggcm91dGluZXMgbWFrZSB1cCB0aGUgbG93IGxldmVsIGludGVyZmFjZToKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+IGZvcgotY29tcHJlc3Npb24sIGFuZCBhIGNvcnJlc3BvbmRpbmcgdHJpbwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiBmb3IKLWRlY29tcHJlc3Npb24uICBUaGUgPGNvbXB1dGVyb3V0cHV0PipJbml0PC9jb21wdXRlcm91dHB1dD4KLWZ1bmN0aW9ucyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYW5kIGRvCi1vdGhlciBpbml0aWFsaXNhdGlvbnMsIHdoaWxzdCB0aGUKLTxjb21wdXRlcm91dHB1dD4qRW5kPC9jb21wdXRlcm91dHB1dD4gZnVuY3Rpb25zIGNsb3NlIGRvd24KLW9wZXJhdGlvbnMgYW5kIHJlbGVhc2UgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+VGhlIHJlYWwgd29yayBpcyBkb25lIGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uICBUaGVzZQotY29tcHJlc3MgYW5kIGRlY29tcHJlc3MgZGF0YSBmcm9tIGEgdXNlci1zdXBwbGllZCBpbnB1dCBidWZmZXIgdG8KLWEgdXNlci1zdXBwbGllZCBvdXRwdXQgYnVmZmVyLiAgVGhlc2UgYnVmZmVycyBjYW4gYmUgYW55IHNpemU7Ci1hcmJpdHJhcnkgcXVhbnRpdGllcyBvZiBkYXRhIGFyZSBoYW5kbGVkIGJ5IG1ha2luZyByZXBlYXRlZCBjYWxscwotdG8gdGhlc2UgZnVuY3Rpb25zLiAgVGhpcyBpcyBhIGZsZXhpYmxlIG1lY2hhbmlzbSBhbGxvd2luZyBhCi1jb25zdW1lci1wdWxsIHN0eWxlIG9mIGFjdGl2aXR5LCBvciBwcm9kdWNlci1wdXNoLCBvciBhIG1peHR1cmUKLW9mIGJvdGguPC9wYXJhPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iaGwtc3VtbWFyeSIgeHJlZmxhYmVsPSJIaWdoLWxldmVsIHN1bW1hcnkiPgotPHRpdGxlPkhpZ2gtbGV2ZWwgc3VtbWFyeTwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNvbWUgaGFuZHkgd3JhcHBlcnMgYXJvdW5kIHRoZQotbG93LWxldmVsIGludGVyZmFjZSB0byBmYWNpbGl0YXRlIHJlYWRpbmcgYW5kIHdyaXRpbmcKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGZvcm1hdCBmaWxlcwotKDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZXMpLiAgVGhlIHJvdXRpbmVzCi1wcm92aWRlIGhvb2tzIHRvIGZhY2lsaXRhdGUgcmVhZGluZyBmaWxlcyBpbiB3aGljaCB0aGUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGRhdGEgc3RyZWFtIGlzIGVtYmVkZGVkCi13aXRoaW4gc29tZSBsYXJnZXItc2NhbGUgZmlsZSBzdHJ1Y3R1cmUsIG9yIHdoZXJlIHRoZXJlIGFyZQotbXVsdGlwbGUgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZGF0YSBzdHJlYW1zCi1jb25jYXRlbmF0ZWQgZW5kLXRvLWVuZC48L3BhcmE+Ci0KLTxwYXJhPkZvciByZWFkaW5nIGZpbGVzLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IGFuZCAKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb21wdXRlcm91dHB1dD4gYXJlCi1zdXBwbGllZC4gIEZvciB3cml0aW5nIGZpbGVzLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlT3BlbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVGaW5pc2g8L2NvbXB1dGVyb3V0cHV0PiBhcmUKLWF2YWlsYWJsZS48L3BhcmE+Ci0KLTxwYXJhPkFzIHdpdGggdGhlIGxvdy1sZXZlbCBsaWJyYXJ5LCBubyBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkCi1zbyB0aGUgbGlicmFyeSBpcyBwZXIgc2UgdGhyZWFkLXNhZmUuICBIb3dldmVyLCBpZiBJL08gZXJyb3JzCi1vY2N1ciB3aGlsc3QgcmVhZGluZyBvciB3cml0aW5nIHRoZSB1bmRlcmx5aW5nIGNvbXByZXNzZWQgZmlsZXMsCi15b3UgbWF5IGhhdmUgdG8gY29uc3VsdCA8Y29tcHV0ZXJvdXRwdXQ+ZXJybm88L2NvbXB1dGVyb3V0cHV0PiB0bwotZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuICBJbiB0aGF0IGNhc2UsIHlvdSdkIG5lZWQgYSBDCi1saWJyYXJ5IHdoaWNoIGNvcnJlY3RseSBzdXBwb3J0cwotPGNvbXB1dGVyb3V0cHV0PmVycm5vPC9jb21wdXRlcm91dHB1dD4gaW4gYSBtdWx0aXRocmVhZGVkCi1lbnZpcm9ubWVudC48L3BhcmE+Ci0KLTxwYXJhPlRvIG1ha2UgdGhlIGxpYnJhcnkgYSBsaXR0bGUgc2ltcGxlciBhbmQgbW9yZSBwb3J0YWJsZSwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IHJlcXVpcmUgeW91IHRvCi1wYXNzIHRoZW0gZmlsZSBoYW5kbGVzICg8Y29tcHV0ZXJvdXRwdXQ+RklMRSo8L2NvbXB1dGVyb3V0cHV0PnMpCi13aGljaCBoYXZlIHByZXZpb3VzbHkgYmVlbiBvcGVuZWQgZm9yIHJlYWRpbmcgb3Igd3JpdGluZwotcmVzcGVjdGl2ZWx5LiAgVGhhdCBhdm9pZHMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoCi1maWxlIG9wZXJhdGlvbnMgYW5kIGZpbGUgYXR0cmlidXRlcywgd2hpbHN0IG5vdCBiZWluZyBtdWNoIG9mIGFuCi1pbXBvc2l0aW9uIG9uIHRoZSBwcm9ncmFtbWVyLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9InV0aWwtZm5zLXN1bW1hcnkiIHhyZWZsYWJlbD0iVXRpbGl0eSBmdW5jdGlvbnMgc3VtbWFyeSI+Ci08dGl0bGU+VXRpbGl0eSBmdW5jdGlvbnMgc3VtbWFyeTwvdGl0bGU+Ci0KLTxwYXJhPkZvciB2ZXJ5IHNpbXBsZSBuZWVkcywKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFyZQotcHJvdmlkZWQuICBUaGVzZSBjb21wcmVzcyBkYXRhIGluIG1lbW9yeSBmcm9tIG9uZSBidWZmZXIgdG8KLWFub3RoZXIgYnVmZmVyIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuICBZb3Ugc2hvdWxkIGFzc2Vzcwotd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgZnVsZmlsbCB5b3VyIG1lbW9yeS10by1tZW1vcnkKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzIGJlZm9yZSBpbnZlc3RpbmcgZWZmb3J0IGluCi11bmRlcnN0YW5kaW5nIHRoZSBtb3JlIGdlbmVyYWwgYnV0IG1vcmUgY29tcGxleCBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3BhcmE+Ci0KLTxwYXJhPllvc2hpb2thIFRzdW5lbwotKDxjb21wdXRlcm91dHB1dD50c3VuZW9AcnIuaWlqNHUub3IuanA8L2NvbXB1dGVyb3V0cHV0PikgaGFzCi1jb250cmlidXRlZCBzb21lIGZ1bmN0aW9ucyB0byBnaXZlIGJldHRlcgotPGNvbXB1dGVyb3V0cHV0PnpsaWI8L2NvbXB1dGVyb3V0cHV0PiBjb21wYXRpYmlsaXR5LiAgVGhlc2UKLWZ1bmN0aW9ucyBhcmUgPGNvbXB1dGVyb3V0cHV0PkJaMl9iem9wZW48L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpyZWFkPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6d3JpdGU8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpmbHVzaDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemNsb3NlPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpsaWJWZXJzaW9uPC9jb21wdXRlcm91dHB1dD4uICBZb3UgbWF5IGZpbmQKLXRoZXNlIGZ1bmN0aW9ucyBtb3JlIGNvbnZlbmllbnQgZm9yIHNpbXBsZSBmaWxlIHJlYWRpbmcgYW5kCi13cml0aW5nLCB0aGFuIHRob3NlIGluIHRoZSBoaWdoLWxldmVsIGludGVyZmFjZS4gIFRoZXNlIGZ1bmN0aW9ucwotYXJlIG5vdCAoeWV0KSBvZmZpY2lhbGx5IHBhcnQgb2YgdGhlIGxpYnJhcnksIGFuZCBhcmUgbWluaW1hbGx5Ci1kb2N1bWVudGVkIGhlcmUuICBJZiB0aGV5IGJyZWFrLCB5b3UgZ2V0IHRvIGtlZXAgYWxsIHRoZSBwaWVjZXMuCi1JIGhvcGUgdG8gZG9jdW1lbnQgdGhlbSBwcm9wZXJseSB3aGVuIHRpbWUgcGVybWl0cy48L3BhcmE+Ci0KLTxwYXJhPllvc2hpb2thIGFsc28gY29udHJpYnV0ZWQgbW9kaWZpY2F0aW9ucyB0byBhbGxvdyB0aGUKLWxpYnJhcnkgdG8gYmUgYnVpbHQgYXMgYSBXaW5kb3dzIERMTC48L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJlcnItaGFuZGxpbmciIHhyZWZsYWJlbD0iRXJyb3IgaGFuZGxpbmciPgotPHRpdGxlPkVycm9yIGhhbmRsaW5nPC90aXRsZT4KLQotPHBhcmE+VGhlIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gcmVjb3ZlciBjbGVhbmx5IGluIGFsbAotc2l0dWF0aW9ucywgaW5jbHVkaW5nIHRoZSB3b3JzdC1jYXNlIHNpdHVhdGlvbiBvZiBkZWNvbXByZXNzaW5nCi1yYW5kb20gZGF0YS4gIEknbSBub3QgMTAwJSBzdXJlIHRoYXQgaXQgY2FuIGFsd2F5cyBkbyB0aGlzLCBzbwoteW91IG1pZ2h0IHdhbnQgdG8gYWRkIGEgc2lnbmFsIGhhbmRsZXIgdG8gY2F0Y2ggc2VnbWVudGF0aW9uCi12aW9sYXRpb25zIGR1cmluZyBkZWNvbXByZXNzaW9uIGlmIHlvdSBhcmUgZmVlbGluZyBlc3BlY2lhbGx5Ci1wYXJhbm9pZC4gIEkgd291bGQgYmUgaW50ZXJlc3RlZCBpbiBoZWFyaW5nIG1vcmUgYWJvdXQgdGhlCi1yb2J1c3RuZXNzIG9mIHRoZSBsaWJyYXJ5IHRvIGNvcnJ1cHRlZCBjb21wcmVzc2VkIGRhdGEuPC9wYXJhPgotCi08cGFyYT5WZXJzaW9uIDEuMC4zIG1vcmUgcm9idXN0IGluIHRoaXMgcmVzcGVjdCB0aGFuIGFueQotcHJldmlvdXMgdmVyc2lvbi4gIEludmVzdGlnYXRpb25zIHdpdGggVmFsZ3JpbmQgKGEgdG9vbCBmb3IgZGV0ZWN0aW5nCi1wcm9ibGVtcyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50KSBpbmRpY2F0ZQotdGhhdCwgYXQgbGVhc3QgZm9yIHRoZSBmZXcgZmlsZXMgSSB0ZXN0ZWQsIGFsbCBzaW5nbGUtYml0IGVycm9ycwotaW4gdGhlIGRlY29tcHJlc3NlZCBkYXRhIGFyZSBjYXVnaHQgcHJvcGVybHksIHdpdGggbm8KLXNlZ21lbnRhdGlvbiBmYXVsdHMsIG5vIHVzZXMgb2YgdW5pbml0aWFsaXNlZCBkYXRhLCBubyBvdXQgb2YKLXJhbmdlIHJlYWRzIG9yIHdyaXRlcywgYW5kIG5vIGluZmluaXRlIGxvb3BpbmcgaW4gdGhlIGRlY29tcHJlc3Nvci4KLVNvIGl0J3MgY2VydGFpbmx5IHByZXR0eSByb2J1c3QsIGFsdGhvdWdoCi1JIHdvdWxkbid0IGNsYWltIGl0IHRvIGJlIHRvdGFsbHkgYm9tYnByb29mLjwvcGFyYT4KLQotPHBhcmE+VGhlIGZpbGUgPGNvbXB1dGVyb3V0cHV0PmJ6bGliLmg8L2NvbXB1dGVyb3V0cHV0PiBjb250YWlucwotYWxsIGRlZmluaXRpb25zIG5lZWRlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBJbiBwYXJ0aWN1bGFyLCB5b3UKLXNob3VsZCBkZWZpbml0ZWx5IG5vdCBpbmNsdWRlCi08Y29tcHV0ZXJvdXRwdXQ+YnpsaWJfcHJpdmF0ZS5oPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JbiA8Y29tcHV0ZXJvdXRwdXQ+YnpsaWIuaDwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUgdmFyaW91cwotcmV0dXJuIHZhbHVlcyBhcmUgZGVmaW5lZC4gIFRoZSBmb2xsb3dpbmcgbGlzdCBpcyBub3QgaW50ZW5kZWQgYXMKLWFuIGV4aGF1c3RpdmUgZGVzY3JpcHRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggYSBnaXZlbgotdmFsdWUgbWF5IGJlIHJldHVybmVkIC0tIHRob3NlIGRlc2NyaXB0aW9ucyBhcmUgZ2l2ZW4gbGF0ZXIuCi1SYXRoZXIsIGl0IGlzIGludGVuZGVkIHRvIGNvbnZleSB0aGUgcm91Z2ggbWVhbmluZyBvZiBlYWNoIHJldHVybgotdmFsdWUuICBUaGUgZmlyc3QgZml2ZSBhY3Rpb25zIGFyZSBub3JtYWwgYW5kIG5vdCBpbnRlbmRlZCB0bwotZGVub3RlIGFuIGVycm9yIHNpdHVhdGlvbi48L3BhcmE+Ci0KLTx2YXJpYWJsZWxpc3Q+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1ZXN0ZWQgYWN0aW9uIHdhcyBjb21wbGV0ZWQKLSAgIHN1Y2Nlc3NmdWxseS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9SVU5fT0ssIEJaX0ZMVVNIX09LLAotICAgIEJaX0ZJTklTSF9PSzwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+SW4gCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwgdGhlIHJlcXVlc3RlZAotICAgZmx1c2gvZmluaXNoL25vdGhpbmctc3BlY2lhbCBhY3Rpb24gd2FzIGNvbXBsZXRlZAotICAgc3VjY2Vzc2Z1bGx5LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPkNvbXByZXNzaW9uIG9mIGRhdGEgd2FzIGNvbXBsZXRlZCwgb3IgdGhlCi0gICBsb2dpY2FsIHN0cmVhbSBlbmQgd2FzIGRldGVjdGVkIGR1cmluZwotICAgZGVjb21wcmVzc2lvbi48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotPC92YXJpYWJsZWxpc3Q+Ci0KLTxwYXJhPlRoZSBmb2xsb3dpbmcgcmV0dXJuIHZhbHVlcyBpbmRpY2F0ZSBhbiBlcnJvciBvZiBzb21lCi1raW5kLjwvcGFyYT4KLQotPHZhcmlhYmxlbGlzdD4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9DT05GSUdfRVJST1I8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPkluZGljYXRlcyB0aGF0IHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGltcHJvcGVybHkKLSAgIGNvbXBpbGVkIG9uIHlvdXIgcGxhdGZvcm0gLS0gYSBtYWpvciBjb25maWd1cmF0aW9uIGVycm9yLgotICAgU3BlY2lmaWNhbGx5LCBpdCBtZWFucyB0aGF0Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+c2l6ZW9mKGNoYXIpPC9jb21wdXRlcm91dHB1dD4sCi0gICA8Y29tcHV0ZXJvdXRwdXQ+c2l6ZW9mKHNob3J0KTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PnNpemVvZihpbnQpPC9jb21wdXRlcm91dHB1dD4gYXJlIG5vdCAxLCAyIGFuZAotICAgNCByZXNwZWN0aXZlbHksIGFzIHRoZXkgc2hvdWxkIGJlLiAgTm90ZSB0aGF0IHRoZSBsaWJyYXJ5Ci0gICBzaG91bGQgc3RpbGwgd29yayBwcm9wZXJseSBvbiA2NC1iaXQgcGxhdGZvcm1zIHdoaWNoIGZvbGxvdwotICAgdGhlIExQNjQgcHJvZ3JhbW1pbmcgbW9kZWwgLS0gdGhhdCBpcywgd2hlcmUKLSAgIDxjb21wdXRlcm91dHB1dD5zaXplb2YobG9uZyk8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5zaXplb2Yodm9pZCopPC9jb21wdXRlcm91dHB1dD4gYXJlIDguICBVbmRlcgotICAgTFA2NCwgPGNvbXB1dGVyb3V0cHV0PnNpemVvZihpbnQpPC9jb21wdXRlcm91dHB1dD4gaXMgc3RpbGwgNCwKLSAgIHNvIDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCB3aGljaCBkb2Vzbid0Ci0gICB1c2UgdGhlIDxjb21wdXRlcm91dHB1dD5sb25nPC9jb21wdXRlcm91dHB1dD4gdHlwZSwgaXMKLSAgIE9LLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VSUk9SPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5XaGVuIHVzaW5nIHRoZSBsaWJyYXJ5LCBpdCBpcyBpbXBvcnRhbnQgdG8gY2FsbAotICAgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBhbmQgd2l0aCBkYXRhIHN0cnVjdHVyZXMKLSAgIChidWZmZXJzIGV0YykgaW4gdGhlIGNvcnJlY3Qgc3RhdGVzLgotICAgPGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY2hlY2tzIGFzIG11Y2ggYXMgaXQKLSAgIGNhbiB0byBlbnN1cmUgdGhpcyBpcyBoYXBwZW5pbmcsIGFuZCByZXR1cm5zCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBpZiBub3QuCi0gICBDb2RlIHdoaWNoIGNvbXBsaWVzIHByZWNpc2VseSB3aXRoIHRoZSBmdW5jdGlvbiBzZW1hbnRpY3MsIGFzCi0gICBkZXRhaWxlZCBiZWxvdywgc2hvdWxkIG5ldmVyIHJlY2VpdmUgdGhpcyB2YWx1ZTsgc3VjaCBhbiBldmVudAotICAgZGVub3RlcyBidWdneSBjb2RlIHdoaWNoIHlvdSBzaG91bGQKLSAgIGludmVzdGlnYXRlLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1BBUkFNX0VSUk9SPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5lZCB3aGVuIGEgcGFyYW1ldGVyIHRvIGEgZnVuY3Rpb24gY2FsbCBpcwotICAgb3V0IG9mIHJhbmdlIG9yIG90aGVyd2lzZSBtYW5pZmVzdGx5IGluY29ycmVjdC4gIEFzIHdpdGgKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LCB0aGlzCi0gICBkZW5vdGVzIGEgYnVnIGluIHRoZSBjbGllbnQgY29kZS4gIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfUEFSQU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgYml0Ci0gICBoYXp5LCBidXQgc3RpbGwgd29ydGggbWFraW5nLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX01FTV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJuZWQgd2hlbiBhIHJlcXVlc3QgdG8gYWxsb2NhdGUgbWVtb3J5Ci0gICBmYWlsZWQuICBOb3RlIHRoYXQgdGhlIHF1YW50aXR5IG9mIG1lbW9yeSBuZWVkZWQgdG8gZGVjb21wcmVzcwotICAgYSBzdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgdGhlIHN0cmVhbSdzIGhlYWRlciBoYXMKLSAgIGJlZW4gcmVhZC4gIFNvCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiBtYXkgcmV0dXJuCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD4gZXZlbiB0aG91Z2ggc29tZQotICAgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiByZWFkLiAgVGhlIHNhbWUgaXMgbm90IHRydWUKLSAgIGZvciBjb21wcmVzc2lvbjsgb25jZQotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+IG9yCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD4gaGF2ZQotICAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCwKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBjYW5ub3QKLSAgIG9jY3VyLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX0RBVEFfRVJST1I8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlJldHVybmVkIHdoZW4gYSBkYXRhIGludGVncml0eSBlcnJvciBpcwotICAgZGV0ZWN0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uICBNb3N0IGltcG9ydGFudGx5LCB0aGlzIG1lYW5zCi0gICB3aGVuIHN0b3JlZCBhbmQgY29tcHV0ZWQgQ1JDcyBmb3IgdGhlIGRhdGEgZG8gbm90IG1hdGNoLiAgVGhpcwotICAgdmFsdWUgaXMgYWxzbyByZXR1cm5lZCB1cG9uIGRldGVjdGlvbiBvZiBhbnkgb3RoZXIgYW5vbWFseSBpbgotICAgdGhlIGNvbXByZXNzZWQgZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9EQVRBX0VSUk9SX01BR0lDPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5BcyBhIHNwZWNpYWwgY2FzZSBvZgotICAgPGNvbXB1dGVyb3V0cHV0PkJaX0RBVEFfRVJST1I8L2NvbXB1dGVyb3V0cHV0PiwgaXQgaXMKLSAgIHNvbWV0aW1lcyB1c2VmdWwgdG8ga25vdyB3aGVuIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBkb2VzIG5vdAotICAgc3RhcnQgd2l0aCB0aGUgY29ycmVjdCBtYWdpYyBieXRlcyAoPGNvbXB1dGVyb3V0cHV0PidCJyAnWicKLSAgICdoJzwvY29tcHV0ZXJvdXRwdXQ+KS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9JT19FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJuZWQgYnkKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGU8L2NvbXB1dGVyb3V0cHV0PiB3aGVuIHRoZXJlIGlzIGFuCi0gICBlcnJvciByZWFkaW5nIG9yIHdyaXRpbmcgaW4gdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kIGJ5Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZU9wZW48L2NvbXB1dGVyb3V0cHV0PiBmb3IgYXR0ZW1wdHMKLSAgIHRvIHVzZSBhIGZpbGUgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IgKHZpeiwKLSAgIDxjb21wdXRlcm91dHB1dD5mZXJyb3IoZik8L2NvbXB1dGVyb3V0cHV0PikgaXMgc2V0LiAgT24KLSAgIHJlY2VpcHQgb2YgPGNvbXB1dGVyb3V0cHV0PkJaX0lPX0VSUk9SPC9jb21wdXRlcm91dHB1dD4sIHRoZQotICAgY2FsbGVyIHNob3VsZCBjb25zdWx0IDxjb21wdXRlcm91dHB1dD5lcnJubzwvY29tcHV0ZXJvdXRwdXQ+Ci0gICBhbmQvb3IgPGNvbXB1dGVyb3V0cHV0PnBlcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHRvIGFjcXVpcmUKLSAgIG9wZXJhdGluZy1zeXN0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICBwcm9ibGVtLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1VORVhQRUNURURfRU9GPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5lZCBieQotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiB3aGVuIHRoZQotICAgY29tcHJlc3NlZCBmaWxlIGZpbmlzaGVzIGJlZm9yZSB0aGUgbG9naWNhbCBlbmQgb2Ygc3RyZWFtIGlzCi0gICBkZXRlY3RlZC48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9PVVRCVUZGX0ZVTEw8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlJldHVybmVkIGJ5Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0bwotICAgaW5kaWNhdGUgdGhhdCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBub3QgZml0IGludG8gdGhlIG91dHB1dAotICAgYnVmZmVyIHByb3ZpZGVkLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi08L3ZhcmlhYmxlbGlzdD4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0ibG93LWxldmVsIiB4cmVmbGFiZWw9Ij5Mb3ctbGV2ZWwgaW50ZXJmYWNlIj4KLTx0aXRsZT5Mb3ctbGV2ZWwgaW50ZXJmYWNlPC90aXRsZT4KLQotCi08c2VjdDIgaWQ9ImJ6Y29tcHJlc3MtaW5pdCIgeHJlZmxhYmVsPSJCWjJfYnpDb21wcmVzc0luaXQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAqbmV4dF9pbjsKLSAgdW5zaWduZWQgaW50IGF2YWlsX2luOwotICB1bnNpZ25lZCBpbnQgdG90YWxfaW5fbG8zMjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX2luX2hpMzI7Ci0KLSAgY2hhciAqbmV4dF9vdXQ7Ci0gIHVuc2lnbmVkIGludCBhdmFpbF9vdXQ7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9vdXRfbG8zMjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX291dF9oaTMyOwotCi0gIHZvaWQgKnN0YXRlOwotCi0gIHZvaWQgKigqYnphbGxvYykodm9pZCAqLGludCxpbnQpOwotICB2b2lkICgqYnpmcmVlKSh2b2lkICosdm9pZCAqKTsKLSAgdm9pZCAqb3BhcXVlOwotfSBiel9zdHJlYW07Ci0KLWludCBCWjJfYnpDb21wcmVzc0luaXQgKCBiel9zdHJlYW0gKnN0cm0sIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUxMDBrLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3b3JrRmFjdG9yICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5QcmVwYXJlcyBmb3IgY29tcHJlc3Npb24uICBUaGUKLTxjb21wdXRlcm91dHB1dD5iel9zdHJlYW08L2NvbXB1dGVyb3V0cHV0PiBzdHJ1Y3R1cmUgaG9sZHMgYWxsCi1kYXRhIHBlcnRhaW5pbmcgdG8gdGhlIGNvbXByZXNzaW9uIGFjdGl2aXR5LiAgQQotPGNvbXB1dGVyb3V0cHV0PmJ6X3N0cmVhbTwvY29tcHV0ZXJvdXRwdXQ+IHN0cnVjdHVyZSBzaG91bGQgYmUKLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGlzZWQgcHJpb3IgdG8gdGhlIGNhbGwuICBUaGUgZmllbGRzIG9mCi08Y29tcHV0ZXJvdXRwdXQ+Ynpfc3RyZWFtPC9jb21wdXRlcm91dHB1dD4gY29tcHJpc2UgdGhlIGVudGlyZXR5Ci1vZiB0aGUgdXNlci12aXNpYmxlIGRhdGEuICA8Y29tcHV0ZXJvdXRwdXQ+c3RhdGU8L2NvbXB1dGVyb3V0cHV0PgotaXMgYSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCBmb3IKLWNvbXByZXNzaW9uLjwvcGFyYT4KLQotPHBhcmE+Q3VzdG9tIG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBzdXBwb3J0ZWQsIHZpYSBmaWVsZHMKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4sIGFuZAotPGNvbXB1dGVyb3V0cHV0Pm9wYXF1ZTwvY29tcHV0ZXJvdXRwdXQ+LiAgVGhlIHZhbHVlCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gaXMgcGFzc2VkIHRvIGFzIHRoZSBmaXJzdAotYXJndW1lbnQgdG8gYWxsIGNhbGxzIHRvIDxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4KLWFuZCA8Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4sIGJ1dCBpcyBvdGhlcndpc2UKLWlnbm9yZWQgYnkgdGhlIGxpYnJhcnkuICBUaGUgY2FsbCA8Y29tcHV0ZXJvdXRwdXQ+YnphbGxvYyAoCi1vcGFxdWUsIG4sIG0gKTwvY29tcHV0ZXJvdXRwdXQ+IGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIHBvaW50ZXIKLTxjb21wdXRlcm91dHB1dD5wPC9jb21wdXRlcm91dHB1dD4gdG8gPGNvbXB1dGVyb3V0cHV0Pm4gKgotbTwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzIG9mIG1lbW9yeSwgYW5kIDxjb21wdXRlcm91dHB1dD5iemZyZWUgKAotb3BhcXVlLCBwICk8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgZnJlZSB0aGF0IG1lbW9yeS48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBhIGN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yLCBzZXQKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gdG8KLTxjb21wdXRlcm91dHB1dD5OVUxMPC9jb21wdXRlcm91dHB1dD4sIGFuZCB0aGUgbGlicmFyeSB3aWxsIHRoZW4KLXVzZSB0aGUgc3RhbmRhcmQgPGNvbXB1dGVyb3V0cHV0Pm1hbGxvYzwvY29tcHV0ZXJvdXRwdXQ+IC8KLTxjb21wdXRlcm91dHB1dD5mcmVlPC9jb21wdXRlcm91dHB1dD4gcm91dGluZXMuPC9wYXJhPgotCi08cGFyYT5CZWZvcmUgY2FsbGluZwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LCBmaWVsZHMKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIGZpbGxlZAotYXBwcm9wcmlhdGVseSwgYXMganVzdCBkZXNjcmliZWQuICBVcG9uIHJldHVybiwgdGhlIGludGVybmFsCi1zdGF0ZSB3aWxsIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkLCBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9pbl9sbzMyPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW5faGkzMjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX291dF9sbzMyPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfb3V0X2hpMzI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGhhdmUgYmVlbgotc2V0IHRvIHplcm8uICBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgbGlicmFyeSB0byBpbmZvcm0KLXRoZSBjYWxsZXIgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHBhc3NlZCBpbnRvIGFuZCBvdXQgb2YgdGhlCi1saWJyYXJ5LCByZXNwZWN0aXZlbHkuICBZb3Ugc2hvdWxkIG5vdCB0cnkgdG8gY2hhbmdlIHRoZW0uICBBcyBvZgotdmVyc2lvbiAxLjAsIDY0LWJpdCBjb3VudHMgYXJlIG1haW50YWluZWQsIGV2ZW4gb24gMzItYml0Ci1wbGF0Zm9ybXMsIHVzaW5nIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+X2hpMzI8L2NvbXB1dGVyb3V0cHV0PgotZmllbGRzIHRvIHN0b3JlIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBjb3VudC4gIFNvLCBmb3IgZXhhbXBsZSwKLXRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbiBpcyA8Y29tcHV0ZXJvdXRwdXQ+KHRvdGFsX2luX2hpMzIKLSYjNjA7JiM2MDsgMzIpICsgdG90YWxfaW5fbG8zMjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UGFyYW1ldGVyIDxjb21wdXRlcm91dHB1dD5ibG9ja1NpemUxMDBrPC9jb21wdXRlcm91dHB1dD4KLXNwZWNpZmllcyB0aGUgYmxvY2sgc2l6ZSB0byBiZSB1c2VkIGZvciBjb21wcmVzc2lvbi4gIEl0IHNob3VsZAotYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDkgaW5jbHVzaXZlLCBhbmQgdGhlIGFjdHVhbCBibG9jayBzaXplCi11c2VkIGlzIDEwMDAwMCB4IHRoaXMgZmlndXJlLiAgOSBnaXZlcyB0aGUgYmVzdCBjb21wcmVzc2lvbiBidXQKLXRha2VzIG1vc3QgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+UGFyYW1ldGVyIDxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQKLWJlIHNldCB0byBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDQgaW5jbHVzaXZlLiAgMCBpcyBzaWxlbnQsIGFuZAotZ3JlYXRlciBudW1iZXJzIGdpdmUgaW5jcmVhc2luZ2x5IHZlcmJvc2UgbW9uaXRvcmluZy9kZWJ1Z2dpbmcKLW91dHB1dC4gIElmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGgKLTxjb21wdXRlcm91dHB1dD4tREJaX05PX1NURElPPC9jb21wdXRlcm91dHB1dD4sIG5vIHN1Y2ggb3V0cHV0Ci13aWxsIGFwcGVhciBmb3IgYW55IHZlcmJvc2l0eSBzZXR0aW5nLjwvcGFyYT4KLQotPHBhcmE+UGFyYW1ldGVyIDxjb21wdXRlcm91dHB1dD53b3JrRmFjdG9yPC9jb21wdXRlcm91dHB1dD4KLWNvbnRyb2xzIGhvdyB0aGUgY29tcHJlc3Npb24gcGhhc2UgYmVoYXZlcyB3aGVuIHByZXNlbnRlZCB3aXRoCi13b3JzdCBjYXNlLCBoaWdobHkgcmVwZXRpdGl2ZSwgaW5wdXQgZGF0YS4gIElmIGNvbXByZXNzaW9uIHJ1bnMKLWludG8gZGlmZmljdWx0aWVzIGNhdXNlZCBieSByZXBldGl0aXZlIGRhdGEsIHRoZSBsaWJyYXJ5IHN3aXRjaGVzCi1mcm9tIHRoZSBzdGFuZGFyZCBzb3J0aW5nIGFsZ29yaXRobSB0byBhIGZhbGxiYWNrIGFsZ29yaXRobS4gIFRoZQotZmFsbGJhY2sgaXMgc2xvd2VyIHRoYW4gdGhlIHN0YW5kYXJkIGFsZ29yaXRobSBieSBwZXJoYXBzIGEKLWZhY3RvciBvZiB0aHJlZSwgYnV0IGFsd2F5cyBiZWhhdmVzIHJlYXNvbmFibHksIG5vIG1hdHRlciBob3cgYmFkCi10aGUgaW5wdXQuPC9wYXJhPgotCi08cGFyYT5Mb3dlciB2YWx1ZXMgb2YgPGNvbXB1dGVyb3V0cHV0PndvcmtGYWN0b3I8L2NvbXB1dGVyb3V0cHV0PgotcmVkdWNlIHRoZSBhbW91bnQgb2YgZWZmb3J0IHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gd2lsbCBleHBlbmQKLWJlZm9yZSByZXNvcnRpbmcgdG8gdGhlIGZhbGxiYWNrLiAgWW91IHNob3VsZCBzZXQgdGhpcyBwYXJhbWV0ZXIKLWNhcmVmdWxseTsgdG9vIGxvdywgYW5kIG1hbnkgaW5wdXRzIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUKLWZhbGxiYWNrIGFsZ29yaXRobSBhbmQgc28gY29tcHJlc3MgcmF0aGVyIHNsb3dseSwgdG9vIGhpZ2gsIGFuZAoteW91ciBhdmVyYWdlLXRvLXdvcnN0IGNhc2UgY29tcHJlc3Npb24gdGltZXMgY2FuIGJlY29tZSB2ZXJ5Ci1sYXJnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwIGdpdmVzIHJlYXNvbmFibGUgYmVoYXZpb3VyIG92ZXIgYQotd2lkZSByYW5nZSBvZiBjaXJjdW1zdGFuY2VzLjwvcGFyYT4KLQotPHBhcmE+QWxsb3dhYmxlIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMjUwIGluY2x1c2l2ZS4gIDAgaXMgYQotc3BlY2lhbCBjYXNlLCBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwLjwvcGFyYT4KLQotPHBhcmE+Tm90ZSB0aGF0IHRoZSBjb21wcmVzc2VkIG91dHB1dCBnZW5lcmF0ZWQgaXMgdGhlIHNhbWUKLXJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIGZhbGxiYWNrIGFsZ29yaXRobSBpcwotdXNlZC48L3BhcmE+Ci0KLTxwYXJhPkJlIGF3YXJlIGFsc28gdGhhdCB0aGlzIHBhcmFtZXRlciBtYXkgZGlzYXBwZWFyIGVudGlyZWx5IGluCi1mdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkuICBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlCi1wb3NzaWJsZSB0byBkZXZpc2UgYSBnb29kIHdheSB0byBhdXRvbWF0aWNhbGx5IGNob29zZSB3aGljaAotYWxnb3JpdGhtIHRvIHVzZS4gIFN1Y2ggYSBtZWNoYW5pc20gd291bGQgcmVuZGVyIHRoZSBwYXJhbWV0ZXIKLW9ic29sZXRlLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCAKLSAgb3IgYmxvY2tTaXplIDwgMSBvciBibG9ja1NpemUgPiA5Ci0gIG9yIHZlcmJvc2l0eSA8IDAgb3IgdmVyYm9zaXR5ID4gNAotICBvciB3b3JrRmFjdG9yIDwgMCBvciB3b3JrRmFjdG9yID4gMjUwCi1CWl9NRU1fRVJST1IgCi0gIGlmIG5vdCBlbm91Z2ggbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sgCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9iekNvbXByZXNzCi0gIGlmIEJaX09LIGlzIHJldHVybmVkCi0gIG5vIHNwZWNpZmljIGFjdGlvbiBuZWVkZWQgaW4gY2FzZSBvZiBlcnJvcgotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6Q29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6Q29tcHJlc3MiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekNvbXByZXNzICggYnpfc3RyZWFtICpzdHJtLCBpbnQgYWN0aW9uICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Qcm92aWRlcyBtb3JlIGlucHV0IGFuZC9vciBvdXRwdXQgYnVmZmVyIHNwYWNlIGZvciB0aGUKLWxpYnJhcnkuICBUaGUgY2FsbGVyIG1haW50YWlucyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIGFuZAotY2FsbHMgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gdG8gdHJhbnNmZXIKLWRhdGEgYmV0d2VlbiB0aGVtLjwvcGFyYT4KLQotPHBhcmE+QmVmb3JlIGVhY2ggY2FsbCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBwb2ludCBhdCB0aGUgZGF0YQotdG8gYmUgY29tcHJlc3NlZCwgYW5kIDxjb21wdXRlcm91dHB1dD5hdmFpbF9pbjwvY29tcHV0ZXJvdXRwdXQ+Ci1zaG91bGQgaW5kaWNhdGUgaG93IG1hbnkgYnl0ZXMgdGhlIGxpYnJhcnkgbWF5IHJlYWQuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1cGRhdGVzCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX2luPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW48L2NvbXB1dGVyb3V0cHV0PiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIGl0IGhhcyByZWFkLjwvcGFyYT4KLQotPHBhcmE+U2ltaWxhcmx5LCA8Y29tcHV0ZXJvdXRwdXQ+bmV4dF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgdG8gYmUgcGxhY2VkLAotd2l0aCA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfb3V0PC9jb21wdXRlcm91dHB1dD4gaW5kaWNhdGluZyBob3cKLW11Y2ggb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHVwZGF0ZXMKLTxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX291dDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX291dDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgb3V0cHV0LjwvcGFyYT4KLQotPHBhcmE+WW91IG1heSBwcm92aWRlIGFuZCByZW1vdmUgYXMgbGl0dGxlIG9yIGFzIG11Y2ggZGF0YSBhcyB5b3UKLWxpa2Ugb24gZWFjaCBjYWxsIG9mCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi4gIEluIHRoZSBsaW1pdCwKLWl0IGlzIGFjY2VwdGFibGUgdG8gc3VwcGx5IGFuZCByZW1vdmUgZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUsCi1hbHRob3VnaCB0aGlzIHdvdWxkIGJlIHRlcnJpYmx5IGluZWZmaWNpZW50LiAgWW91IHNob3VsZCBhbHdheXMKLWVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBieXRlIG9mIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUgYXQKLWVhY2ggY2FsbC48L3BhcmE+Ci0KLTxwYXJhPkEgc2Vjb25kIHB1cnBvc2Ugb2YKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGlzIHRvIHJlcXVlc3QgYQotY2hhbmdlIG9mIG1vZGUgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLjwvcGFyYT4KLQotPHBhcmE+Q29uY2VwdHVhbGx5LCBhIGNvbXByZXNzZWQgc3RyZWFtIGNhbiBiZSBpbiBvbmUgb2YgZm91cgotc3RhdGVzOiBJRExFLCBSVU5OSU5HLCBGTFVTSElORyBhbmQgRklOSVNISU5HLiAgQmVmb3JlCi1pbml0aWFsaXNhdGlvbgotKDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PikgYW5kIGFmdGVyCi10ZXJtaW5hdGlvbiAoPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4pLAotYSBzdHJlYW0gaXMgcmVnYXJkZWQgYXMgSURMRS48L3BhcmE+Ci0KLTxwYXJhPlVwb24gaW5pdGlhbGlzYXRpb24KLSg8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4pLCB0aGUgc3RyZWFtCi1pcyBwbGFjZWQgaW4gdGhlIFJVTk5JTkcgc3RhdGUuICBTdWJzZXF1ZW50IGNhbGxzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgcGFzcwotPGNvbXB1dGVyb3V0cHV0PkJaX1JVTjwvY29tcHV0ZXJvdXRwdXQ+IGFzIHRoZSByZXF1ZXN0ZWQgYWN0aW9uOwotb3RoZXIgYWN0aW9ucyBhcmUgaWxsZWdhbCBhbmQgd2lsbCByZXN1bHQgaW4KLTxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QXQgc29tZSBwb2ludCwgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3aWxsIGhhdmUgcHJvdmlkZWQgYWxsCi10aGUgaW5wdXQgZGF0YSBpdCB3YW50cyB0by4gIEl0IHdpbGwgdGhlbiB3YW50IHRvIGZpbmlzaCB1cCAtLSBpbgotZWZmZWN0LCBhc2tpbmcgdGhlIGxpYnJhcnkgdG8gcHJvY2VzcyBhbnkgZGF0YSBpdCBtaWdodCBoYXZlCi1idWZmZXJlZCBpbnRlcm5hbGx5LiAgSW4gdGhpcyBzdGF0ZSwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgbm8gbG9uZ2VyCi1hdHRlbXB0IHRvIHJlYWQgZGF0YSBmcm9tCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+LCBidXQgaXQgd2lsbCB3YW50IHRvCi13cml0ZSBkYXRhIHRvIDxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+LiAgQmVjYXVzZQotdGhlIG91dHB1dCBidWZmZXIgc3VwcGxpZWQgYnkgdGhlIHVzZXIgY2FuIGJlIGFyYml0cmFyaWx5IHNtYWxsLAotdGhlIGZpbmlzaGluZy11cCBvcGVyYXRpb24gY2Fubm90IG5lY2Vzc2FyaWx5IGJlIGRvbmUgd2l0aCBhCi1zaW5nbGUgY2FsbCBvZgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JbnN0ZWFkLCB0aGUgY2FsbGluZyBwcm9ncmFtIHBhc3NlcwotPGNvbXB1dGVyb3V0cHV0PkJaX0ZJTklTSDwvY29tcHV0ZXJvdXRwdXQ+IGFzIGFuIGFjdGlvbiB0bwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uICBUaGlzIGNoYW5nZXMKLXRoZSBzdHJlYW0ncyBzdGF0ZSB0byBGSU5JU0hJTkcuICBBbnkgcmVtYWluaW5nIGlucHV0IChpZSwKLTxjb21wdXRlcm91dHB1dD5uZXh0X2luWzAgLi4gYXZhaWxfaW4tMV08L2NvbXB1dGVyb3V0cHV0PikgaXMKLWNvbXByZXNzZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgVG8gZG8gdGhpcywKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IG11c3QgYmUgY2FsbGVkCi1yZXBlYXRlZGx5IHVudGlsIGFsbCB0aGUgb3V0cHV0IGhhcyBiZWVuIGNvbnN1bWVkLiAgQXQgdGhhdAotcG9pbnQsIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHJldHVybnMKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4sIGFuZCB0aGUgc3RyZWFtJ3MKLXN0YXRlIGlzIHNldCBiYWNrIHRvIElETEUuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgdGhlbiBiZQotY2FsbGVkLjwvcGFyYT4KLQotPHBhcmE+SnVzdCB0byBtYWtlIHN1cmUgdGhlIGNhbGxpbmcgcHJvZ3JhbSBkb2VzIG5vdCBjaGVhdCwgdGhlCi1saWJyYXJ5IG1ha2VzIGEgbm90ZSBvZiA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0PgotYXQgdGhlIHRpbWUgb2YgdGhlIGZpcnN0IGNhbGwgdG8KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHdoaWNoIGhhcwotPGNvbXB1dGVyb3V0cHV0PkJaX0ZJTklTSDwvY29tcHV0ZXJvdXRwdXQ+IGFzIGFuIGFjdGlvbiAoaWUsIGF0Ci10aGUgdGltZSB0aGUgcHJvZ3JhbSBoYXMgYW5ub3VuY2VkIGl0cyBpbnRlbnRpb24gdG8gbm90IHN1cHBseQotYW55IG1vcmUgaW5wdXQpLiAgQnkgY29tcGFyaW5nIHRoaXMgdmFsdWUgd2l0aCB0aGF0IG9mCi08Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0PiBvdmVyIHN1YnNlcXVlbnQgY2FsbHMKLXRvIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUgbGlicmFyeQotY2FuIGRldGVjdCBhbnkgYXR0ZW1wdHMgdG8gc2xpcCBpbiBtb3JlIGRhdGEgdG8gY29tcHJlc3MuICBBbnkKLWNhbGxzIGZvciB3aGljaCB0aGlzIGlzIGRldGVjdGVkIHdpbGwgcmV0dXJuCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRVJST1I8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoaXMKLWluZGljYXRlcyBhIHByb2dyYW1taW5nIG1pc3Rha2Ugd2hpY2ggc2hvdWxkIGJlIGNvcnJlY3RlZC48L3BhcmE+Ci0KLTxwYXJhPkluc3RlYWQgb2YgYXNraW5nIHRvIGZpbmlzaCwgdGhlIGNhbGxpbmcgcHJvZ3JhbSBtYXkgYXNrCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0byB0YWtlIGFsbCB0aGUKLXJlbWFpbmluZyBpbnB1dCwgY29tcHJlc3MgaXQgYW5kIHRlcm1pbmF0ZSB0aGUgY3VycmVudAotKEJ1cnJvd3MtV2hlZWxlcikgY29tcHJlc3Npb24gYmxvY2suICBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBmb3IKLWVycm9yIGNvbnRyb2wgcHVycG9zZXMuICBUaGUgbWVjaGFuaXNtIGlzIGFuYWxvZ291cyB0byB0aGF0IGZvcgotZmluaXNoaW5nOiBjYWxsIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci13aXRoIGFuIGFjdGlvbiBvZiA8Y29tcHV0ZXJvdXRwdXQ+QlpfRkxVU0g8L2NvbXB1dGVyb3V0cHV0PiwKLXJlbW92ZSBvdXRwdXQgZGF0YSwgYW5kIHBlcnNpc3Qgd2l0aCB0aGUKLTxjb21wdXRlcm91dHB1dD5CWl9GTFVTSDwvY29tcHV0ZXJvdXRwdXQ+IGFjdGlvbiB1bnRpbCB0aGUgdmFsdWUKLTxjb21wdXRlcm91dHB1dD5CWl9SVU48L2NvbXB1dGVyb3V0cHV0PiBpcyByZXR1cm5lZC4gIEFzIHdpdGgKLWZpbmlzaGluZywgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLWRldGVjdHMgYW55IGF0dGVtcHQgdG8gcHJvdmlkZSBtb3JlIGlucHV0IGRhdGEgb25jZSB0aGUgZmx1c2ggaGFzCi1iZWd1bi48L3BhcmE+Ci0KLTxwYXJhPk9uY2UgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLCB0aGUgc3RyZWFtIHJldHVybnMgdG8gdGhlCi1ub3JtYWwgUlVOTklORyBzdGF0ZS48L3BhcmE+Ci0KLTxwYXJhPlRoaXMgYWxsIHNvdW5kcyBwcmV0dHkgY29tcGxleCwgYnV0IGlzbid0IHJlYWxseS4gIEhlcmUncyBhCi10YWJsZSB3aGljaCBzaG93cyB3aGljaCBhY3Rpb25zIGFyZSBhbGxvd2FibGUgaW4gZWFjaCBzdGF0ZSwgd2hhdAotYWN0aW9uIHdpbGwgYmUgdGFrZW4sIHdoYXQgdGhlIG5leHQgc3RhdGUgaXMsIGFuZCB3aGF0IHRoZQotbm9uLWVycm9yIHJldHVybiB2YWx1ZXMgYXJlLiAgTm90ZSB0aGF0IHlvdSBjYW4ndCBleHBsaWNpdGx5IGFzawotd2hhdCBzdGF0ZSB0aGUgc3RyZWFtIGlzIGluLCBidXQgbm9yIGRvIHlvdSBuZWVkIHRvIC0tIGl0IGNhbiBiZQotaW5mZXJyZWQgZnJvbSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUlETEUvYW55Ci0gIElsbGVnYWwuICBJRExFIHN0YXRlIG9ubHkgZXhpc3RzIGFmdGVyIEJaMl9iekNvbXByZXNzRW5kIG9yCi0gIGJlZm9yZSBCWjJfYnpDb21wcmVzc0luaXQuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLVJVTk5JTkcvQlpfUlVOCi0gIENvbXByZXNzIGZyb20gbmV4dF9pbiB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICBOZXh0IHN0YXRlID0gUlVOTklORwotICBSZXR1cm4gdmFsdWUgPSBCWl9SVU5fT0sKLQotUlVOTklORy9CWl9GTFVTSAotICBSZW1lbWJlciBjdXJyZW50IHZhbHVlIG9mIG5leHRfaW4uIENvbXByZXNzIGZyb20gbmV4dF9pbgotICB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBidXQgZG8gbm90IGFjY2VwdCBhbnkgbW9yZSBpbnB1dC4KLSAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZMVVNIX09LCi0KLVJVTk5JTkcvQlpfRklOSVNICi0gIFJlbWVtYmVyIGN1cnJlbnQgdmFsdWUgb2YgbmV4dF9pbi4gQ29tcHJlc3MgZnJvbSBuZXh0X2luCi0gIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBOZXh0IHN0YXRlID0gRklOSVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZJTklTSF9PSwotCi1GTFVTSElORy9CWl9GTFVTSAotICBDb21wcmVzcyBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwgCi0gIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBJZiBhbGwgdGhlIGV4aXN0aW5nIGlucHV0IGhhcyBiZWVuIHVzZWQgdXAgYW5kIGFsbCBjb21wcmVzc2VkCi0gIG91dHB1dCBoYXMgYmVlbiByZW1vdmVkCi0gICAgTmV4dCBzdGF0ZSA9IFJVTk5JTkc7IFJldHVybiB2YWx1ZSA9IEJaX1JVTl9PSwotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HOyBSZXR1cm4gdmFsdWUgPSBCWl9GTFVTSF9PSwotCi1GTFVTSElORy9vdGhlciAgICAgCi0gIElsbGVnYWwuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLUZJTklTSElORy9CWl9GSU5JU0gKLSAgQ29tcHJlc3MgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsCi0gIGJ1dCB0byBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LiAgCi0gIElmIGFsbCB0aGUgZXhpc3RpbmcgaW5wdXQgaGFzIGJlZW4gdXNlZCB1cCBhbmQgYWxsIGNvbXByZXNzZWQKLSAgb3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQKLSAgICBOZXh0IHN0YXRlID0gSURMRTsgUmV0dXJuIHZhbHVlID0gQlpfU1RSRUFNX0VORAotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZJTklTSElORzsgUmV0dXJuIHZhbHVlID0gQlpfRklOSVNIX09LCi0KLUZJTklTSElORy9vdGhlcgotICBJbGxlZ2FsLgotICBSZXR1cm4gdmFsdWUgPSBCWl9TRVFVRU5DRV9FUlJPUgotPC9wcm9ncmFtbGlzdGluZz4KLQotCi08cGFyYT5UaGF0IHN0aWxsIGxvb2tzIGNvbXBsaWNhdGVkPyAgV2VsbCwgZmFpciBlbm91Z2guICBUaGUKLXVzdWFsIHNlcXVlbmNlIG9mIGNhbGxzIGZvciBjb21wcmVzc2luZyBhIGxvYWQgb2YgZGF0YSBpczo8L3BhcmE+Ci0KLTxvcmRlcmVkbGlzdD4KLQotIDxsaXN0aXRlbT48cGFyYT5HZXQgc3RhcnRlZCB3aXRoCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5TaG92ZWwgZGF0YSBpbiBhbmQgc2hsdXJwIG91dCBpdHMgY29tcHJlc3NlZCBmb3JtCi0gIHVzaW5nIHplcm8gb3IgbW9yZSBjYWxscyBvZgotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB3aXRoIGFjdGlvbiA9Ci0gIDxjb21wdXRlcm91dHB1dD5CWl9SVU48L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5GaW5pc2ggdXAuIFJlcGVhdGVkbHkgY2FsbAotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB3aXRoIGFjdGlvbiA9Ci0gIDxjb21wdXRlcm91dHB1dD5CWl9GSU5JU0g8L2NvbXB1dGVyb3V0cHV0PiwgY29weWluZyBvdXQgdGhlCi0gIGNvbXByZXNzZWQgb3V0cHV0LCB1bnRpbAotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+IGlzCi0gIHJldHVybmVkLjwvcGFyYT48L2xpc3RpdGVtPiA8bGlzdGl0ZW0+PHBhcmE+Q2xvc2UgdXAgYW5kIGdvIGhvbWUuICBDYWxsCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotCi08L29yZGVyZWRsaXN0PgotCi08cGFyYT5JZiB0aGUgZGF0YSB5b3Ugd2FudCB0byBjb21wcmVzcyBmaXRzIGludG8geW91ciBpbnB1dAotYnVmZmVyIGFsbCBhdCBvbmNlLCB5b3UgY2FuIHNraXAgdGhlIGNhbGxzIG9mCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3MgKCAuLi4sIEJaX1JVTiApPC9jb21wdXRlcm91dHB1dD4KLWFuZCBqdXN0IGRvIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3MgKCAuLi4sIEJaX0ZJTklTSAotKTwvY29tcHV0ZXJvdXRwdXQ+IGNhbGxzLjwvcGFyYT4KLQotPHBhcmE+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoZQotY29tcHJlc3Npb24gbGlicmFyeSBjYW4gYWNjZXB0IGFueSBkYXRhIGF0IGFsbCAob2J2aW91c2x5KS4gIFNvCi15b3Ugc2hvdWxkbid0IGdldCBhbnkgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gY2FsbHMuICBJZiB5b3UKLWRvLCB0aGV5IHdpbGwgYmUKLTxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgaW5kaWNhdGUKLWEgYnVnIGluIHlvdXIgcHJvZ3JhbW1pbmcuPC9wYXJhPgotCi08cGFyYT5Ucml2aWFsIG90aGVyIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwsIG9yIHN0cm0tPnMgaXMgTlVMTAotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6Q29tcHJlc3MtZW5kIiB4cmVmbGFiZWw9IkJaMl9iekNvbXByZXNzRW5kIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpDb21wcmVzc0VuZCAoIGJ6X3N0cmVhbSAqc3RybSApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmVsZWFzZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBjb21wcmVzc2lvbgotc3RyZWFtLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0+cyBpcyBOVUxMCi1CWl9PSyAgICAgICAgICAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpEZWNvbXByZXNzLWluaXQiIHhyZWZsYWJlbD0iQloyX2J6RGVjb21wcmVzc0luaXQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekRlY29tcHJlc3NJbml0ICggYnpfc3RyZWFtICpzdHJtLCBpbnQgdmVyYm9zaXR5LCBpbnQgc21hbGwgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByZXBhcmVzIGZvciBkZWNvbXByZXNzaW9uLiAgQXMgd2l0aAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LCBhCi08Y29tcHV0ZXJvdXRwdXQ+Ynpfc3RyZWFtPC9jb21wdXRlcm91dHB1dD4gcmVjb3JkIHNob3VsZCBiZQotYWxsb2NhdGVkIGFuZCBpbml0aWFsaXNlZCBiZWZvcmUgdGhlIGNhbGwuICBGaWVsZHMKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIHNldCBpZiBhIGN1c3RvbQotbWVtb3J5IGFsbG9jYXRvciBpcyByZXF1aXJlZCwgb3IgbWFkZQotPGNvbXB1dGVyb3V0cHV0Pk5VTEw8L2NvbXB1dGVyb3V0cHV0PiBmb3IgdGhlIG5vcm1hbAotPGNvbXB1dGVyb3V0cHV0Pm1hbGxvYzwvY29tcHV0ZXJvdXRwdXQ+IC8KLTxjb21wdXRlcm91dHB1dD5mcmVlPC9jb21wdXRlcm91dHB1dD4gcm91dGluZXMuICBVcG9uIHJldHVybiwgdGhlCi1pbnRlcm5hbCBzdGF0ZSB3aWxsIGhhdmUgYmVlbiBpbml0aWFsaXNlZCwgYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW48L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGJlIHplcm8uPC9wYXJhPgotCi08cGFyYT5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVyCi08Y29tcHV0ZXJvdXRwdXQ+dmVyYm9zaXR5PC9jb21wdXRlcm91dHB1dD4sIHNlZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SWYgPGNvbXB1dGVyb3V0cHV0PnNtYWxsPC9jb21wdXRlcm91dHB1dD4gaXMgbm9uemVybywgdGhlCi1saWJyYXJ5IHdpbGwgdXNlIGFuIGFsdGVybmF0aXZlIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtIHdoaWNoCi11c2VzIGxlc3MgbWVtb3J5IGJ1dCBhdCB0aGUgY29zdCBvZiBkZWNvbXByZXNzaW5nIG1vcmUgc2xvd2x5Ci0ocm91Z2hseSBzcGVha2luZywgaGFsZiB0aGUgc3BlZWQsIGJ1dCB0aGUgbWF4aW11bSBtZW1vcnkKLXJlcXVpcmVtZW50IGRyb3BzIHRvIGFyb3VuZCAyMzAwaykuICBTZWUgPHhyZWYgbGlua2VuZD0idXNpbmciLz4KLWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1lbW9yeSBtYW5hZ2VtZW50LjwvcGFyYT4KLQotPHBhcmE+Tm90ZSB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCB0byBkZWNvbXByZXNzIGEKLXN0cmVhbSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCB0aGUgc3RyZWFtJ3MgaGVhZGVyIGhhcyBiZWVuCi1yZWFkLCBzbyBldmVuIGlmCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiBzdWNjZWVkcywgYQotc3Vic2VxdWVudCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci1jb3VsZCBmYWlsIHdpdGgKLTxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiAoIHNtYWxsICE9IDAgJiYgc21hbGwgIT0gMSApCi0gIG9yICh2ZXJib3NpdHkgPDsgMCB8fCB2ZXJib3NpdHkgPiA0KQotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6RGVjb21wcmVzcwotICBpZiBCWl9PSyB3YXMgcmV0dXJuZWQKLSAgbm8gc3BlY2lmaWMgYWN0aW9uIHJlcXVpcmVkIGluIGNhc2Ugb2YgZXJyb3IKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJiekRlY29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6RGVjb21wcmVzcyI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpEZWNvbXByZXNzICggYnpfc3RyZWFtICpzdHJtICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Qcm92aWRlcyBtb3JlIGlucHV0IGFuZC9vdXQgb3V0cHV0IGJ1ZmZlciBzcGFjZSBmb3IgdGhlCi1saWJyYXJ5LiAgVGhlIGNhbGxlciBtYWludGFpbnMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCBhbmQgdXNlcwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0byB0cmFuc2ZlcgotZGF0YSBiZXR3ZWVuIHRoZW0uPC9wYXJhPgotCi08cGFyYT5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pm5leHRfaW48L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgcG9pbnQgYXQgdGhlCi1jb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0Pgotc2hvdWxkIGluZGljYXRlIGhvdyBtYW55IGJ5dGVzIHRoZSBsaWJyYXJ5IG1heSByZWFkLgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1cGRhdGVzCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX2luPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW48L2NvbXB1dGVyb3V0cHV0PiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIGl0IGhhcyByZWFkLjwvcGFyYT4KLQotPHBhcmE+U2ltaWxhcmx5LCA8Y29tcHV0ZXJvdXRwdXQ+bmV4dF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IGlzIHRvIGJlCi1wbGFjZWQsIHdpdGggPGNvbXB1dGVyb3V0cHV0PmF2YWlsX291dDwvY29tcHV0ZXJvdXRwdXQ+Ci1pbmRpY2F0aW5nIGhvdyBtdWNoIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1cGRhdGVzCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5hdmFpbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIG91dHB1dC48L3BhcmE+Ci0KLTxwYXJhPllvdSBtYXkgcHJvdmlkZSBhbmQgcmVtb3ZlIGFzIGxpdHRsZSBvciBhcyBtdWNoIGRhdGEgYXMgeW91Ci1saWtlIG9uIGVhY2ggY2FsbCBvZgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi4gIEluIHRoZSBsaW1pdCwKLWl0IGlzIGFjY2VwdGFibGUgdG8gc3VwcGx5IGFuZCByZW1vdmUgZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUsCi1hbHRob3VnaCB0aGlzIHdvdWxkIGJlIHRlcnJpYmx5IGluZWZmaWNpZW50LiAgWW91IHNob3VsZCBhbHdheXMKLWVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBieXRlIG9mIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUgYXQKLWVhY2ggY2FsbC48L3BhcmE+Ci0KLTxwYXJhPlVzZSBvZiA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGlzCi1zaW1wbGVyIHRoYW4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+WW91IHNob3VsZCBwcm92aWRlIGlucHV0IGFuZCByZW1vdmUgb3V0cHV0IGFzIGRlc2NyaWJlZAotYWJvdmUsIGFuZCByZXBlYXRlZGx5IGNhbGwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gdW50aWwKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4gaXMgcmV0dXJuZWQuCi1BcHBlYXJhbmNlIG9mIDxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4KLWRlbm90ZXMgdGhhdCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci1oYXMgZGV0ZWN0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gd2lsbCBub3QKLXByb2R1Y2UgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiB1bnRpbCBhbGwKLW91dHB1dCBkYXRhIGhhcyBiZWVuIHBsYWNlZCBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLCBzbyBvbmNlCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+IGFwcGVhcnMsIHlvdSBhcmUKLWd1YXJhbnRlZWQgdG8gaGF2ZSBhdmFpbGFibGUgYWxsIHRoZSBkZWNvbXByZXNzZWQgb3V0cHV0LCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4gY2FuIHNhZmVseQotYmUgY2FsbGVkLjwvcGFyYT4KLQotPHBhcmE+SWYgY2FzZSBvZiBhbiBlcnJvciByZXR1cm4gdmFsdWUsIHlvdSBzaG91bGQgY2FsbAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiB0byBjbGVhbiB1cAotYW5kIHJlbGVhc2UgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCBvciBzdHJtLT5zIGlzIE5VTEwKLSAgb3Igc3RybS0+YXZhaWxfb3V0IDwgMQotQlpfREFUQV9FUlJPUgotICBpZiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIGlzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbQotQlpfREFUQV9FUlJPUl9NQUdJQwotICBpZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZG9lc24ndCBiZWdpbiB3aXRoIHRoZSByaWdodCBtYWdpYyBieXRlcwotQlpfTUVNX0VSUk9SCi0gIGlmIHRoZXJlIHdhc24ndCBlbm91Z2ggbWVtb3J5IGF2YWlsYWJsZQotQlpfU1RSRUFNX0VORAotICBpZiB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGRhdGEgc3RyZWFtIHdhcyBkZXRlY3RlZCBhbmQgYWxsCi0gIG91dHB1dCBpbiBoYXMgYmVlbiBjb25zdW1lZCwgZWcgcy0tPmF2YWlsX291dCA+IDAKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9iekRlY29tcHJlc3MKLSAgaWYgQlpfT0sgd2FzIHJldHVybmVkCi1CWjJfYnpEZWNvbXByZXNzRW5kCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6RGVjb21wcmVzcy1lbmQiIHhyZWZsYWJlbD0iQloyX2J6RGVjb21wcmVzc0VuZCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpEZWNvbXByZXNzRW5kICggYnpfc3RyZWFtICpzdHJtICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5SZWxlYXNlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGRlY29tcHJlc3Npb24KLXN0cmVhbS48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0+cyBpcyBOVUxMCi1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci0gIE5vbmUuCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0iaGwtaW50ZXJmYWNlIiB4cmVmbGFiZWw9IkhpZ2gtbGV2ZWwgaW50ZXJmYWNlIj4KLTx0aXRsZT5IaWdoLWxldmVsIGludGVyZmFjZTwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZwotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0IGZpbGVzLiAgRmlyc3QsIHNvbWUKLWdlbmVyYWwgcG9pbnRzLjwvcGFyYT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPkFsbCBvZiB0aGUgZnVuY3Rpb25zIHRha2UgYW4KLSAgPGNvbXB1dGVyb3V0cHV0PmludCo8L2NvbXB1dGVyb3V0cHV0PiBmaXJzdCBhcmd1bWVudCwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pi4gIEFmdGVyIGVhY2ggY2FsbCwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgY29uc3VsdGVkCi0gIGZpcnN0IHRvIGRldGVybWluZSB0aGUgb3V0Y29tZSBvZiB0aGUgY2FsbC4gIElmCi0gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaXMKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4sIHRoZSBjYWxsIGNvbXBsZXRlZAotICBzdWNjZXNzZnVsbHksIGFuZCBvbmx5IHRoZW4gc2hvdWxkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCi0gIGZ1bmN0aW9uIChpZiBhbnkpIGJlIGNvbnN1bHRlZC4gIElmCi0gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaXMKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX0lPX0VSUk9SPC9jb21wdXRlcm91dHB1dD4sIHRoZXJlIHdhcyBhbgotICBlcnJvciByZWFkaW5nL3dyaXRpbmcgdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBmaWxlLCBhbmQgeW91Ci0gIHNob3VsZCB0aGVuIGNvbnN1bHQgPGNvbXB1dGVyb3V0cHV0PmVycm5vPC9jb21wdXRlcm91dHB1dD4gLwotICA8Y29tcHV0ZXJvdXRwdXQ+cGVycm9yPC9jb21wdXRlcm91dHB1dD4gdG8gZGV0ZXJtaW5lIHRoZSBjYXVzZQotICBvZiB0aGUgZGlmZmljdWx0eS4gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4KLSAgbWF5IGFsc28gYmUgc2V0IHRvIHZhcmlvdXMgb3RoZXIgdmFsdWVzOyBwcmVjaXNlIGRldGFpbHMgYXJlCi0gIGdpdmVuIG9uIGEgcGVyLWZ1bmN0aW9uIGJhc2lzIGJlbG93LjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPklmIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaW5kaWNhdGVzCi0gIGFuIGVycm9yIChpZSwgYW55dGhpbmcgZXhjZXB0Ci0gIDxjb21wdXRlcm91dHB1dD5CWl9PSzwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+KSwgeW91IHNob3VsZAotICBpbW1lZGlhdGVseSBjYWxsCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiAob3IKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiwgZGVwZW5kaW5nIG9uCi0gIHdoZXRoZXIgeW91IGFyZSBhdHRlbXB0aW5nIHRvIHJlYWQgb3IgdG8gd3JpdGUpIHRvIGZyZWUgdXAgYWxsCi0gIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cmVhbS4gIE9uY2UgYW4gZXJyb3IgaGFzIGJlZW4KLSAgaW5kaWNhdGVkLCBiZWhhdmlvdXIgb2YgYWxsIGNhbGxzIGV4Y2VwdAotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4KLSAgKDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlPC9jb21wdXRlcm91dHB1dD4pIGlzCi0gIHVuZGVmaW5lZC4gIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0ICgxKQotICA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBiZSBjaGVja2VkCi0gIGFmdGVyIGVhY2ggY2FsbCwgYW5kICgyKSBpZgotICA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGluZGljYXRlcyBhbiBlcnJvciwKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+Ci0gICg8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+KSBzaG91bGQgdGhlbgotICBiZSBjYWxsZWQgdG8gY2xlYW4gdXAuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxjb21wdXRlcm91dHB1dD5GSUxFKjwvY29tcHV0ZXJvdXRwdXQ+IGFyZ3VtZW50cwotICBwYXNzZWQgdG8gPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4gLwotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIHNldAotICB0byBiaW5hcnkgbW9kZS4gIE1vc3QgVW5peCBzeXN0ZW1zIHdpbGwgZG8gdGhpcyBieSBkZWZhdWx0LCBidXQKLSAgb3RoZXIgcGxhdGZvcm1zLCBpbmNsdWRpbmcgV2luZG93cyBhbmQgTWFjLCB3aWxsIG5vdC4gIElmIHlvdQotICBvbWl0IHRoaXMsIHlvdSBtYXkgZW5jb3VudGVyIHByb2JsZW1zIHdoZW4gbW92aW5nIGNvZGUgdG8gbmV3Ci0gIHBsYXRmb3Jtcy48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5NZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgaGFuZGxlZCBieQotICA8Y29tcHV0ZXJvdXRwdXQ+bWFsbG9jPC9jb21wdXRlcm91dHB1dD4gLwotICA8Y29tcHV0ZXJvdXRwdXQ+ZnJlZTwvY29tcHV0ZXJvdXRwdXQ+LiAgQXQgcHJlc2VudCB0aGVyZSBpcyBubwotICBmYWNpbGl0eSBmb3IgdXNlci1kZWZpbmVkIG1lbW9yeSBhbGxvY2F0b3JzIGluIHRoZSBmaWxlIEkvTwotICBmdW5jdGlvbnMgKGNvdWxkIGVhc2lseSBiZSBhZGRlZCwgdGhvdWdoKS48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLQotCi08c2VjdDIgaWQ9ImJ6cmVhZG9wZW4iIHhyZWZsYWJlbD0iQloyX2J6UmVhZE9wZW4iPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkT3BlbjwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdHlwZWRlZiB2b2lkIEJaRklMRTsKLQotQlpGSUxFICpCWjJfYnpSZWFkT3BlbiggaW50ICpiemVycm9yLCBGSUxFICpmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJib3NpdHksIGludCBzbWFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVudXNlZCwgaW50IG5VbnVzZWQgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByZXBhcmUgdG8gcmVhZCBjb21wcmVzc2VkIGRhdGEgZnJvbSBmaWxlIGhhbmRsZQotPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0Pi4KLTxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIHJlZmVyIHRvIGEgZmlsZSB3aGljaAotaGFzIGJlZW4gb3BlbmVkIGZvciByZWFkaW5nLCBhbmQgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IKLSg8Y29tcHV0ZXJvdXRwdXQ+ZmVycm9yKGYpPC9jb21wdXRlcm91dHB1dD4paXMgbm90IHNldC4gIElmCi08Y29tcHV0ZXJvdXRwdXQ+c21hbGw8L2NvbXB1dGVyb3V0cHV0PiBpcyAxLCB0aGUgbGlicmFyeSB3aWxsIHRyeQotdG8gZGVjb21wcmVzcyB1c2luZyBsZXNzIG1lbW9yeSwgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQuPC9wYXJhPgotCi08cGFyYT5Gb3IgcmVhc29ucyBleHBsYWluZWQgYmVsb3csCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgZGVjb21wcmVzcyB0aGUKLTxjb21wdXRlcm91dHB1dD5uVW51c2VkPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgc3RhcnRpbmcgYXQKLTxjb21wdXRlcm91dHB1dD51bnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiwgYmVmb3JlIHN0YXJ0aW5nIHRvIHJlYWQKLWZyb20gdGhlIGZpbGUgPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0Pi4gIEF0IG1vc3QKLTxjb21wdXRlcm91dHB1dD5CWl9NQVhfVU5VU0VEPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgbWF5IGJlCi1zdXBwbGllZCBsaWtlIHRoaXMuICBJZiB0aGlzIGZhY2lsaXR5IGlzIG5vdCByZXF1aXJlZCwgeW91IHNob3VsZAotcGFzcyA8Y29tcHV0ZXJvdXRwdXQ+TlVMTDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PjA8L2NvbXB1dGVyb3V0cHV0PiBmb3IKLTxjb21wdXRlcm91dHB1dD51bnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLW48Y29tcHV0ZXJvdXRwdXQ+VW51c2VkPC9jb21wdXRlcm91dHB1dD4gcmVzcGVjdGl2ZWx5LjwvcGFyYT4KLQotPHBhcmE+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb21wdXRlcm91dHB1dD5zbWFsbDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+LCBzZWUKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+VGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIHRvIGRlY29tcHJlc3MgYSBmaWxlIGNhbm5vdCBiZQotZGV0ZXJtaW5lZCB1bnRpbCB0aGUgZmlsZSdzIGhlYWRlciBoYXMgYmVlbiByZWFkLiAgU28gaXQgaXMKLXBvc3NpYmxlIHRoYXQgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4KLXJldHVybnMgPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4gYnV0IGEgc3Vic2VxdWVudAotY2FsbCBvZiA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcmV0dXJuCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGYgaXMgTlVMTAotICBvciBzbWFsbCBpcyBuZWl0aGVyIDAgbm9yIDEKLSAgb3IgKCB1bnVzZWQgPT0gTlVMTCAmJiBuVW51c2VkICE9IDAgKQotICBvciAoIHVudXNlZCAhPSBOVUxMICYmICEoMCA8PSBuVW51c2VkIDw9IEJaX01BWF9VTlVTRUQpICkKLUJaX0lPX0VSUk9SCi0gIGlmIGZlcnJvcihmKSBpcyBub256ZXJvCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLUJaX09LCi0gIG90aGVyd2lzZS4KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1Qb2ludGVyIHRvIGFuIGFic3RyYWN0IEJaRklMRQotICBpZiBiemVycm9yIGlzIEJaX09LCi1OVUxMCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9ielJlYWQKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotQloyX2J6Q2xvc2UKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpyZWFkIiB4cmVmbGFiZWw9IkJaMl9ielJlYWQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgQloyX2J6UmVhZCAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJlYWRzIHVwIHRvIDxjb21wdXRlcm91dHB1dD5sZW48L2NvbXB1dGVyb3V0cHV0PgotKHVuY29tcHJlc3NlZCkgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+IGludG8gdGhlIGJ1ZmZlcgotPGNvbXB1dGVyb3V0cHV0PmJ1ZjwvY29tcHV0ZXJvdXRwdXQ+LiAgSWYgdGhlIHJlYWQgd2FzCi1zdWNjZXNzZnVsLCA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHNldCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4gYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKLXJlYWQgaXMgcmV0dXJuZWQuICBJZiB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZCwKLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gd2lsbCBiZSBzZXQgdG8KLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4sIGFuZCB0aGUgbnVtYmVyIG9mCi1ieXRlcyByZWFkIGlzIHJldHVybmVkLiAgQWxsIG90aGVyCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHZhbHVlcyBkZW5vdGUgYW4KLWVycm9yLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIHN1cHBseQotPGNvbXB1dGVyb3V0cHV0PmxlbjwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzLCB1bmxlc3MgdGhlIGxvZ2ljYWwKLXN0cmVhbSBlbmQgaXMgZGV0ZWN0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLiAgQmVjYXVzZSBvZiB0aGlzLCBpdAotaXMgcG9zc2libGUgdG8gZGV0ZWN0IHRoZSBzdHJlYW0gZW5kIGJ5IG9ic2VydmluZyB3aGVuIHRoZSBudW1iZXIKLW9mIGJ5dGVzIHJldHVybmVkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KLU5ldmVydGhlbGVzcywgdGhpcyBpcyByZWdhcmRlZCBhcyBpbmFkdmlzYWJsZTsgeW91IHNob3VsZCBpbnN0ZWFkCi1jaGVjayA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGFmdGVyIGV2ZXJ5IGNhbGwKLWFuZCB3YXRjaCBvdXQgZm9yCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SW50ZXJuYWxseSwgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PgotY29waWVzIGRhdGEgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIGluIGNodW5rcyBvZiBzaXplCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUFYX1VOVVNFRDwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzIGJlZm9yZQotZGVjb21wcmVzc2luZyBpdC4gIElmIHRoZSBmaWxlIGNvbnRhaW5zIG1vcmUgYnl0ZXMgdGhhbiBzdHJpY3RseQotbmVlZGVkIHRvIHJlYWNoIHRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYWxtb3N0IGNlcnRhaW5seQotcmVhZCBzb21lIG9mIHRoZSB0cmFpbGluZyBkYXRhIGJlZm9yZSBzaWduYWxsaW5nCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRU5EPC9jb21wdXRlcm91dHB1dD4uICBUbyBjb2xsZWN0IHRoZQotcmVhZCBidXQgdW51c2VkIGRhdGEgb25jZQotPGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VORDwvY29tcHV0ZXJvdXRwdXQ+IGhhcyBhcHBlYXJlZCwKLWNhbGwgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PgotaW1tZWRpYXRlbHkgYmVmb3JlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGIgaXMgTlVMTCBvciBidWYgaXMgTlVMTCBvciBsZW4gPCAwCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpXcml0ZU9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHJlYWRpbmcgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlCi1CWl9VTkVYUEVDVEVEX0VPRgotICBpZiB0aGUgY29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSAKLSAgdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbSB3YXMgZGV0ZWN0ZWQKLUJaX0RBVEFfRVJST1IKLSAgaWYgYSBkYXRhIGludGVncml0eSBlcnJvciB3YXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtCi1CWl9EQVRBX0VSUk9SX01BR0lDCi0gIGlmIHRoZSBzdHJlYW0gZG9lcyBub3QgYmVnaW4gd2l0aCB0aGUgcmVxdWlzaXRlIGhlYWRlciBieXRlcyAKLSAgKGllLCBpcyBub3QgYSBiemlwMiBkYXRhIGZpbGUpLiAgVGhpcyBpcyByZWFsbHkgCi0gIGEgc3BlY2lhbCBjYXNlIG9mIEJaX0RBVEFfRVJST1IuCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSB3YXMgYXZhaWxhYmxlCi1CWl9TVFJFQU1fRU5ECi0gIGlmIHRoZSBsb2dpY2FsIGVuZCBvZiBzdHJlYW0gd2FzIGRldGVjdGVkLgotQlpfT0sKLSAgb3RoZXJ3aXNlLgotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLW51bWJlciBvZiBieXRlcyByZWFkCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sgb3IgQlpfU1RSRUFNX0VORAotdW5kZWZpbmVkCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWNvbGxlY3QgZGF0YSBmcm9tIGJ1ZiwgdGhlbiBCWjJfYnpSZWFkIG9yIEJaMl9ielJlYWRDbG9zZQotICBpZiBiemVycm9yIGlzIEJaX09LCi1jb2xsZWN0IGRhdGEgZnJvbSBidWYsIHRoZW4gQloyX2J6UmVhZENsb3NlIG9yIEJaMl9ielJlYWRHZXRVbnVzZWQKLSAgaWYgYnplcnJvciBpcyBCWl9TRVFVRU5DRV9FTkQKLUJaMl9ielJlYWRDbG9zZQotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJienJlYWRnZXR1bnVzZWQiIHhyZWZsYWJlbD0iQloyX2J6UmVhZEdldFVudXNlZCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQgQloyX2J6UmVhZEdldFVudXNlZCggaW50KiBiemVycm9yLCBCWkZJTEUgKmIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogdW51c2VkLCBpbnQqIG5VbnVzZWQgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJldHVybnMgZGF0YSB3aGljaCB3YXMgcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgYnV0Ci13YXMgbm90IG5lZWRlZCB0byBnZXQgdG8gdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbS4KLTxjb21wdXRlcm91dHB1dD4qdW51c2VkPC9jb21wdXRlcm91dHB1dD4gaXMgc2V0IHRvIHRoZSBhZGRyZXNzIG9mCi10aGUgZGF0YSwgYW5kIDxjb21wdXRlcm91dHB1dD4qblVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRoZQotbnVtYmVyIG9mIGJ5dGVzLiAgPGNvbXB1dGVyb3V0cHV0PipuVW51c2VkPC9jb21wdXRlcm91dHB1dD4gd2lsbAotYmUgc2V0IHRvIGEgdmFsdWUgYmV0d2VlbiA8Y29tcHV0ZXJvdXRwdXQ+MDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaX01BWF9VTlVTRUQ8L2NvbXB1dGVyb3V0cHV0PiBpbmNsdXNpdmUuPC9wYXJhPgotCi08cGFyYT5UaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IGhhcyBzaWduYWxsZWQKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4gYnV0IGJlZm9yZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwKLSAgb3IgdW51c2VkIGlzIE5VTEwgb3IgblVudXNlZCBpcyBOVUxMCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBCWl9TVFJFQU1fRU5EIGhhcyBub3QgYmVlbiBzaWduYWxsZWQKLSAgb3IgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6V3JpdGVPcGVuCi1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWjJfYnpSZWFkQ2xvc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJienJlYWRjbG9zZSIgeHJlZmxhYmVsPSJCWjJfYnpSZWFkQ2xvc2UiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQgQloyX2J6UmVhZENsb3NlICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJlbGVhc2VzIGFsbCBtZW1vcnkgcGVydGFpbmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+LgotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IGRvZXMgbm90IGNhbGwKLTxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBvbiB0aGUgdW5kZXJseWluZyBmaWxlCi1oYW5kbGUsIHNvIHlvdSBzaG91bGQgZG8gdGhhdCB5b3Vyc2VsZiBpZiBhcHByb3ByaWF0ZS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgY2FsbGVkCi10byBjbGVhbiB1cCBhZnRlciBhbGwgZXJyb3Igc2l0dWF0aW9ucy48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+OjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6T3BlbldyaXRlCi1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1ub25lCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnp3cml0ZW9wZW4iIHhyZWZsYWJlbD0iQloyX2J6V3JpdGVPcGVuIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWkZJTEUgKkJaMl9ieldyaXRlT3BlbiggaW50ICpiemVycm9yLCBGSUxFICpmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplMTAwaywgaW50IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd29ya0ZhY3RvciApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UHJlcGFyZSB0byB3cml0ZSBjb21wcmVzc2VkIGRhdGEgdG8gZmlsZSBoYW5kbGUKLTxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD4uCi08Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCByZWZlciB0byBhIGZpbGUgd2hpY2gKLWhhcyBiZWVuIG9wZW5lZCBmb3Igd3JpdGluZywgYW5kIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yCi0oPGNvbXB1dGVyb3V0cHV0PmZlcnJvcihmKTwvY29tcHV0ZXJvdXRwdXQ+KWlzIG5vdCBzZXQuPC9wYXJhPgotCi08cGFyYT5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVycwotPGNvbXB1dGVyb3V0cHV0PmJsb2NrU2l6ZTEwMGs8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD53b3JrRmFjdG9yPC9jb21wdXRlcm91dHB1dD4sIHNlZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYXQgdGhpcyBzdGFnZSwgc28gaWYgdGhlCi1jYWxsIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD4gY2Fubm90IGJlIHNpZ25hbGxlZAotYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBmIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayA8IDEgb3IgYmxvY2tTaXplMTAwayA+IDkKLUJaX0lPX0VSUk9SCi0gIGlmIGZlcnJvcihmKSBpcyBub256ZXJvCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLVBvaW50ZXIgdG8gYW4gYWJzdHJhY3QgQlpGSUxFCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLU5VTEwKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6V3JpdGUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotICAoeW91IGNvdWxkIGdvIGRpcmVjdGx5IHRvIEJaMl9ieldyaXRlQ2xvc2UsIGJ1dCB0aGlzIHdvdWxkIGJlIHByZXR0eSBwb2ludGxlc3MpCi1CWjJfYnpXcml0ZUNsb3NlCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6d3JpdGUiIHhyZWZsYWJlbD0iQloyX2J6V3JpdGUiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZTwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdm9pZCBCWjJfYnpXcml0ZSAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFic29yYnMgPGNvbXB1dGVyb3V0cHV0PmxlbjwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzIGZyb20gdGhlCi1idWZmZXIgPGNvbXB1dGVyb3V0cHV0PmJ1ZjwvY29tcHV0ZXJvdXRwdXQ+LCBldmVudHVhbGx5IHRvIGJlCi1jb21wcmVzc2VkIGFuZCB3cml0dGVuIHRvIHRoZSBmaWxlLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwgb3IgYnVmIGlzIE5VTEwgb3IgbGVuIDwgMAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZS4KLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6d3JpdGVjbG9zZSIgeHJlZmxhYmVsPSJCWjJfYnpXcml0ZUNsb3NlIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdm9pZCBCWjJfYnpXcml0ZUNsb3NlKCBpbnQgKmJ6ZXJyb3IsIEJaRklMRSogZiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGFiYW5kb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXQgKTsKLQotdm9pZCBCWjJfYnpXcml0ZUNsb3NlNjQoIGludCAqYnplcnJvciwgQlpGSUxFKiBmLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhYmFuZG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luX2xvMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW5faGkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfbG8zMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfaGkzMiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+Q29tcHJlc3NlcyBhbmQgZmx1c2hlcyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIGFsbCBkYXRhIHNvCi1mYXIgc3VwcGxpZWQgYnkgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4uCi1UaGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIG1hcmtlcnMgYXJlIGFsc28gd3JpdHRlbiwgc28gc3Vic2VxdWVudAotY2FsbHMgdG8gPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4gYXJlCi1pbGxlZ2FsLiAgQWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXByZXNzZWQgZmlsZQotPGNvbXB1dGVyb3V0cHV0PmI8L2NvbXB1dGVyb3V0cHV0PiBpcyByZWxlYXNlZC4KLTxjb21wdXRlcm91dHB1dD5mZmx1c2g8L2NvbXB1dGVyb3V0cHV0PiBpcyBjYWxsZWQgb24gdGhlCi1jb21wcmVzc2VkIGZpbGUsIGJ1dCBpdCBpcyBub3QKLTxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0PidkLjwvcGFyYT4KLQotPHBhcmE+SWYgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBpcwotY2FsbGVkIHRvIGNsZWFuIHVwIGFmdGVyIGFuIGVycm9yLCB0aGUgb25seSBhY3Rpb24gaXMgdG8gcmVsZWFzZQotdGhlIG1lbW9yeS4gIFRoZSBsaWJyYXJ5IHJlY29yZHMgdGhlIGVycm9yIGNvZGVzIGlzc3VlZCBieQotcHJldmlvdXMgY2FsbHMsIHNvIHRoaXMgc2l0dWF0aW9uIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4KLVRoZXJlIGlzIG5vIGF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGNvbXByZXNzaW9uIG9wZXJhdGlvbiwgbm9yIHRvCi08Y29tcHV0ZXJvdXRwdXQ+ZmZsdXNoPC9jb21wdXRlcm91dHB1dD4gdGhlIGNvbXByZXNzZWQgZmlsZS4gIFlvdQotY2FuIGZvcmNlIHRoaXMgYmVoYXZpb3VyIHRvIGhhcHBlbiBldmVuIGluIHRoZSBjYXNlIG9mIG5vIGVycm9yLAotYnkgcGFzc2luZyBhIG5vbnplcm8gdmFsdWUgdG8KLTxjb21wdXRlcm91dHB1dD5hYmFuZG9uPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JZiA8Y29tcHV0ZXJvdXRwdXQ+bmJ5dGVzX2luPC9jb21wdXRlcm91dHB1dD4gaXMgbm9uLW51bGwsCi08Y29tcHV0ZXJvdXRwdXQ+Km5ieXRlc19pbjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYmUgc2V0IHRvIGJlIHRoZQotdG90YWwgdm9sdW1lIG9mIHVuY29tcHJlc3NlZCBkYXRhIGhhbmRsZWQuICBTaW1pbGFybHksCi08Y29tcHV0ZXJvdXRwdXQ+bmJ5dGVzX291dDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYmUgc2V0IHRvIHRoZQotdG90YWwgdm9sdW1lIG9mIGNvbXByZXNzZWQgZGF0YSB3cml0dGVuLiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aAotb2xkZXIgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnksCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IG9ubHkgeWllbGRzIHRoZQotbG93ZXIgMzIgYml0cyBvZiB0aGVzZSBjb3VudHMuICBVc2UKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlNjQ8L2NvbXB1dGVyb3V0cHV0PiBpZiB5b3Ugd2FudAotdGhlIGZ1bGwgNjQgYml0IGNvdW50cy4gIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG90aGVyd2lzZQotYWJzb2x1dGVseSBpZGVudGljYWwuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ielJlYWRPcGVuCi1CWl9JT19FUlJPUgotICBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRoZSBjb21wcmVzc2VkIGZpbGUKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImVtYmVkIiB4cmVmbGFiZWw9IkhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zIj4KLTx0aXRsZT5IYW5kbGluZyBlbWJlZGRlZCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtczwvdGl0bGU+Ci0KLTxwYXJhPlRoZSBoaWdoLWxldmVsIGxpYnJhcnkgZmFjaWxpdGF0ZXMgdXNlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkYXRhIHN0cmVhbXMgd2hpY2ggZm9ybQotc29tZSBwYXJ0IG9mIGEgc3Vycm91bmRpbmcsIGxhcmdlciBkYXRhIHN0cmVhbS48L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT5Gb3Igd3JpdGluZywgdGhlIGxpYnJhcnkgdGFrZXMgYW4gb3BlbiBmaWxlIGhhbmRsZSwKLSAgd3JpdGVzIGNvbXByZXNzZWQgZGF0YSB0byBpdCwKLSAgPGNvbXB1dGVyb3V0cHV0PmZmbHVzaDwvY29tcHV0ZXJvdXRwdXQ+ZXMgaXQgYnV0IGRvZXMgbm90Ci0gIDxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBpdC4gIFRoZSBjYWxsaW5nCi0gIGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBpdHMgb3duIGRhdGEgYmVmb3JlIGFuZCBhZnRlciB0aGUKLSAgY29tcHJlc3NlZCBkYXRhIHN0cmVhbSwgdXNpbmcgdGhhdCBzYW1lIGZpbGUgaGFuZGxlLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPlJlYWRpbmcgaXMgbW9yZSBjb21wbGV4LCBhbmQgdGhlIGZhY2lsaXRpZXMgYXJlIG5vdCBhcwotICBnZW5lcmFsIGFzIHRoZXkgY291bGQgYmUgc2luY2UgZ2VuZXJhbGl0eSBpcyBoYXJkIHRvIHJlY29uY2lsZQotICB3aXRoIGVmZmljaWVuY3kuICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+Ci0gIHJlYWRzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSBpbiBibG9ja3Mgb2Ygc2l6ZQotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfTUFYX1VOVVNFRDwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzLCBhbmQgaW4KLSAgZG9pbmcgc28gcHJvYmFibHkgd2lsbCBvdmVyc2hvb3QgdGhlIGxvZ2ljYWwgZW5kIG9mIGNvbXByZXNzZWQKLSAgc3RyZWFtLiAgVG8gcmVjb3ZlciB0aGlzIGRhdGEgb25jZSBkZWNvbXByZXNzaW9uIGhhcyBlbmRlZCwKLSAgY2FsbCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZEdldFVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IGFmdGVyCi0gIHRoZSBsYXN0IGNhbGwgb2YgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PgotICAodGhlIG9uZSByZXR1cm5pbmcKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PikgYnV0IGJlZm9yZQotICBjYWxsaW5nCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTxwYXJhPlRoaXMgbWVjaGFuaXNtIG1ha2VzIGl0IGVhc3kgdG8gZGVjb21wcmVzcyBtdWx0aXBsZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gc3RyZWFtcyBwbGFjZWQgZW5kLXRvLWVuZC4KLUFzIHRoZSBlbmQgb2Ygb25lIHN0cmVhbSwgd2hlbgotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiByZXR1cm5zCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+LCBjYWxsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZEdldFVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IHRvIGNvbGxlY3QKLXRoZSB1bnVzZWQgZGF0YSAoY29weSBpdCBpbnRvIHlvdXIgb3duIGJ1ZmZlciBzb21ld2hlcmUpLiAgVGhhdAotZGF0YSBmb3JtcyB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tcHJlc3NlZCBzdHJlYW0uICBUbyBzdGFydAotdW5jb21wcmVzc2luZyB0aGF0IG5leHQgc3RyZWFtLCBjYWxsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PiBhZ2FpbiwgZmVlZGluZyBpbgotdGhlIHVudXNlZCBkYXRhIHZpYSB0aGUgPGNvbXB1dGVyb3V0cHV0PnVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IC8KLTxjb21wdXRlcm91dHB1dD5uVW51c2VkPC9jb21wdXRlcm91dHB1dD4gcGFyYW1ldGVycy4gIEtlZXAgZG9pbmcKLXRoaXMgdW50aWwgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiByZXR1cm4KLWNvaW5jaWRlcyB3aXRoIHRoZSBwaHlzaWNhbCBlbmQgb2YgZmlsZQotKDxjb21wdXRlcm91dHB1dD5mZW9mKGYpPC9jb21wdXRlcm91dHB1dD4pLiAgSW4gdGhpcyBzaXR1YXRpb24KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb21wdXRlcm91dHB1dD4gd2lsbCBvZgotY291cnNlIHJldHVybiBubyBkYXRhLjwvcGFyYT4KLQotPHBhcmE+VGhpcyBzaG91bGQgZ2l2ZSBzb21lIGZlZWwgZm9yIGhvdyB0aGUgaGlnaC1sZXZlbCBpbnRlcmZhY2UKLWNhbiBiZSB1c2VkLiAgSWYgeW91IHJlcXVpcmUgZXh0cmEgZmxleGliaWxpdHksIHlvdSdsbCBoYXZlIHRvCi1iaXRlIHRoZSBidWxsZXQgYW5kIGdldCB0byBncmlwcyB3aXRoIHRoZSBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJzdGQtcmR3ciIgeHJlZmxhYmVsPSJTdGFuZGFyZCBmaWxlLXJlYWRpbmcvd3JpdGluZyBjb2RlIj4KLTx0aXRsZT5TdGFuZGFyZCBmaWxlLXJlYWRpbmcvd3JpdGluZyBjb2RlPC90aXRsZT4KLQotPHBhcmE+SGVyZSdzIGhvdyB5b3UnZCB3cml0ZSBkYXRhIHRvIGEgY29tcHJlc3NlZCBmaWxlOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotRklMRSogICBmOwotQlpGSUxFKiBiOwotaW50ICAgICBuQnVmOwotY2hhciAgICBidWZbIC8qIHdoYXRldmVyIHNpemUgeW91IGxpa2UgKi8gXTsKLWludCAgICAgYnplcnJvcjsKLWludCAgICAgbldyaXR0ZW47Ci0KLWYgPSBmb3BlbiAoICJteWZpbGUuYnoyIiwgInciICk7Ci1pZiAoICFmICkgewotIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ieldyaXRlT3BlbiggJmJ6ZXJyb3IsIGYsIDkgKTsKLWlmIChiemVycm9yICE9IEJaX09LKSB7Ci0gQloyX2J6V3JpdGVDbG9zZSAoIGIgKTsKLSAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLQotd2hpbGUgKCAvKiBjb25kaXRpb24gKi8gKSB7Ci0gLyogZ2V0IGRhdGEgdG8gd3JpdGUgaW50byBidWYsIGFuZCBzZXQgbkJ1ZiBhcHByb3ByaWF0ZWx5ICovCi0gbldyaXR0ZW4gPSBCWjJfYnpXcml0ZSAoICZiemVycm9yLCBiLCBidWYsIG5CdWYgKTsKLSBpZiAoYnplcnJvciA9PSBCWl9JT19FUlJPUikgeyAKLSAgIEJaMl9ieldyaXRlQ2xvc2UgKCAmYnplcnJvciwgYiApOwotICAgLyogaGFuZGxlIGVycm9yICovCi0gfQotfQotCi1CWjJfYnpXcml0ZUNsb3NlKCAmYnplcnJvciwgYiApOwotaWYgKGJ6ZXJyb3IgPT0gQlpfSU9fRVJST1IpIHsKLSAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFuZCB0byByZWFkIGZyb20gYSBjb21wcmVzc2VkIGZpbGU6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1GSUxFKiAgIGY7Ci1CWkZJTEUqIGI7Ci1pbnQgICAgIG5CdWY7Ci1jaGFyICAgIGJ1ZlsgLyogd2hhdGV2ZXIgc2l6ZSB5b3UgbGlrZSAqLyBdOwotaW50ICAgICBiemVycm9yOwotaW50ICAgICBuV3JpdHRlbjsKLQotZiA9IGZvcGVuICggIm15ZmlsZS5iejIiLCAiciIgKTsKLWlmICggIWYgKSB7Ci0gIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ielJlYWRPcGVuICggJmJ6ZXJyb3IsIGYsIDAsIE5VTEwsIDAgKTsKLWlmICggYnplcnJvciAhPSBCWl9PSyApIHsKLSAgQloyX2J6UmVhZENsb3NlICggJmJ6ZXJyb3IsIGIgKTsKLSAgLyogaGFuZGxlIGVycm9yICovCi19Ci0KLWJ6ZXJyb3IgPSBCWl9PSzsKLXdoaWxlICggYnplcnJvciA9PSBCWl9PSyAmJiAvKiBhcmJpdHJhcnkgb3RoZXIgY29uZGl0aW9ucyAqLykgewotICBuQnVmID0gQloyX2J6UmVhZCAoICZiemVycm9yLCBiLCBidWYsIC8qIHNpemUgb2YgYnVmICovICk7Ci0gIGlmICggYnplcnJvciA9PSBCWl9PSyApIHsKLSAgICAvKiBkbyBzb21ldGhpbmcgd2l0aCBidWZbMCAuLiBuQnVmLTFdICovCi0gIH0KLX0KLWlmICggYnplcnJvciAhPSBCWl9TVFJFQU1fRU5EICkgewotICAgQloyX2J6UmVhZENsb3NlICggJmJ6ZXJyb3IsIGIgKTsKLSAgIC8qIGhhbmRsZSBlcnJvciAqLwotfSBlbHNlIHsKLSAgIEJaMl9ielJlYWRDbG9zZSAoICZiemVycm9yLCBiICk7Ci19Ci08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0idXRpbC1mbnMiIHhyZWZsYWJlbD0iVXRpbGl0eSBmdW5jdGlvbnMiPgotPHRpdGxlPlV0aWxpdHkgZnVuY3Rpb25zPC90aXRsZT4KLQotCi08c2VjdDIgaWQ9ImJ6YnVmZnRvYnVmZmNvbXByZXNzIiB4cmVmbGFiZWw9IkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcyI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcyggY2hhciogICAgICAgICBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIHNvdXJjZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgYmxvY2tTaXplMTAwaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB3b3JrRmFjdG9yICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BdHRlbXB0cyB0byBjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29tcHV0ZXJvdXRwdXQ+c291cmNlWzAKLS4uIHNvdXJjZUxlbi0xXTwvY29tcHV0ZXJvdXRwdXQ+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb21wdXRlcm91dHB1dD5kZXN0WzAgLi4gKmRlc3RMZW4tMV08L2NvbXB1dGVyb3V0cHV0Pi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29tcHV0ZXJvdXRwdXQ+KmRlc3RMZW48L2NvbXB1dGVyb3V0cHV0PiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PgotaXMgcmV0dXJuZWQuICBJZiB0aGUgY29tcHJlc3NlZCBkYXRhIHdvbid0IGZpdCwKLTxjb21wdXRlcm91dHB1dD4qZGVzdExlbjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHVuY2hhbmdlZCwgYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QlpfT1VUQlVGRl9GVUxMPC9jb21wdXRlcm91dHB1dD4gaXMKLXJldHVybmVkLjwvcGFyYT4KLQotPHBhcmE+Q29tcHJlc3Npb24gaW4gdGhpcyBtYW5uZXIgaXMgYSBvbmUtc2hvdCBldmVudCwgZG9uZSB3aXRoIGEKLXNpbmdsZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uICBUaGUgcmVzdWx0aW5nIGNvbXByZXNzZWQgZGF0YSBpcyBhCi1jb21wbGV0ZSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBmb3JtYXQgZGF0YQotc3RyZWFtLiAgVGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBtYWtpbmcgYWRkaXRpb25hbCBjYWxscyB0bwotcHJvdmlkZSBleHRyYSBpbnB1dCBkYXRhLiAgSWYgeW91IHdhbnQgdGhhdCBraW5kIG9mIG1lY2hhbmlzbSwKLXVzZSB0aGUgbG93LWxldmVsIGludGVyZmFjZS48L3BhcmE+Ci0KLTxwYXJhPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29tcHV0ZXJvdXRwdXQ+YmxvY2tTaXplMTAwazwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PndvcmtGYWN0b3I8L2NvbXB1dGVyb3V0cHV0Piwgc2VlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5UbyBndWFyYW50ZWUgdGhhdCB0aGUgY29tcHJlc3NlZCBkYXRhIHdpbGwgZml0IGluIGl0cwotYnVmZmVyLCBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIG9mIHNpemUgMSUgbGFyZ2VyIHRoYW4gdGhlCi11bmNvbXByZXNzZWQgZGF0YSwgcGx1cyBzaXggaHVuZHJlZCBleHRyYSBieXRlcy48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci13aWxsIG5vdCB3cml0ZSBkYXRhIGF0IG9yIGJleW9uZAotPGNvbXB1dGVyb3V0cHV0PmRlc3RbKmRlc3RMZW5dPC9jb21wdXRlcm91dHB1dD4sIGV2ZW4gaW4gY2FzZSBvZgotYnVmZmVyIG92ZXJmbG93LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGRlc3QgaXMgTlVMTCBvciBkZXN0TGVuIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayA8IDEgb3IgYmxvY2tTaXplMTAwayA+IDkKLSAgb3IgdmVyYm9zaXR5IDwgMCBvciB2ZXJib3NpdHkgPiA0Ci0gIG9yIHdvcmtGYWN0b3IgPCAwIG9yIHdvcmtGYWN0b3IgPiAyNTAKLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZSAKLUJaX09VVEJVRkZfRlVMTAotICBpZiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGV4Y2VlZHMgKmRlc3RMZW4KLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6YnVmZnRvYnVmZmRlY29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKCBjaGFyKiAgICAgICAgIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZGVzdExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgc291cmNlTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHNtYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHZlcmJvc2l0eSApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QXR0ZW1wdHMgdG8gZGVjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29tcHV0ZXJvdXRwdXQ+c291cmNlWzAKLS4uIHNvdXJjZUxlbi0xXTwvY29tcHV0ZXJvdXRwdXQ+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb21wdXRlcm91dHB1dD5kZXN0WzAgLi4gKmRlc3RMZW4tMV08L2NvbXB1dGVyb3V0cHV0Pi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29tcHV0ZXJvdXRwdXQ+KmRlc3RMZW48L2NvbXB1dGVyb3V0cHV0PiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSB1bmNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb21wdXRlcm91dHB1dD5CWl9PSzwvY29tcHV0ZXJvdXRwdXQ+Ci1pcyByZXR1cm5lZC4gIElmIHRoZSBjb21wcmVzc2VkIGRhdGEgd29uJ3QgZml0LAotPGNvbXB1dGVyb3V0cHV0PipkZXN0TGVuPC9jb21wdXRlcm91dHB1dD4gaXMgdW5jaGFuZ2VkLCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWl9PVVRCVUZGX0ZVTEw8L2NvbXB1dGVyb3V0cHV0PiBpcwotcmV0dXJuZWQuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+c291cmNlPC9jb21wdXRlcm91dHB1dD4gaXMgYXNzdW1lZCB0byBob2xkCi1hIGNvbXBsZXRlIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGZvcm1hdCBkYXRhCi1zdHJlYW0uCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0cmllcwotdG8gZGVjb21wcmVzcyB0aGUgZW50aXJldHkgb2YgdGhlIHN0cmVhbSBpbnRvIHRoZSBvdXRwdXQKLWJ1ZmZlci48L3BhcmE+Ci0KLTxwYXJhPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29tcHV0ZXJvdXRwdXQ+c21hbGw8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0Piwgc2VlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPkJlY2F1c2UgdGhlIGNvbXByZXNzaW9uIHJhdGlvIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgY2Fubm90Ci1iZSBrbm93biBpbiBhZHZhbmNlLCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBndWFyYW50ZWUgdGhhdCB0aGUKLW91dHB1dCBidWZmZXIgd2lsbCBiZSBiaWcgZW5vdWdoLiAgWW91IG1heSBvZiBjb3Vyc2UgbWFrZQotYXJyYW5nZW1lbnRzIGluIHlvdXIgY29kZSB0byByZWNvcmQgdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZAotZGF0YSwgYnV0IHN1Y2ggYSBtZWNoYW5pc20gaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzCi1saWJyYXJ5LjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLXdpbGwgbm90IHdyaXRlIGRhdGEgYXQgb3IgYmV5b25kCi08Y29tcHV0ZXJvdXRwdXQ+ZGVzdFsqZGVzdExlbl08L2NvbXB1dGVyb3V0cHV0PiwgZXZlbiBpbiBjYXNlIG9mCi1idWZmZXIgb3ZlcmZsb3cuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgZGVzdCBpcyBOVUxMIG9yIGRlc3RMZW4gaXMgTlVMTAotICBvciBzbWFsbCAhPSAwICYmIHNtYWxsICE9IDEKLSAgb3IgdmVyYm9zaXR5IDwgMCBvciB2ZXJib3NpdHkgPiA0Ci1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgCi1CWl9PVVRCVUZGX0ZVTEwKLSAgaWYgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBleGNlZWRzICpkZXN0TGVuCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3Igd2FzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIGRhdGEKLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIGNvbXByZXNzZWQgZGF0YSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9VTkVYUEVDVEVEX0VPRgotICBpZiB0aGUgY29tcHJlc3NlZCBkYXRhIGVuZHMgdW5leHBlY3RlZGx5Ci1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJ6bGliLWNvbXBhdCIgeHJlZmxhYmVsPSJ6bGliIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+emxpYjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC90aXRsZT4KLQotPHBhcmE+WW9zaGlva2EgVHN1bmVvIGhhcyBjb250cmlidXRlZCBzb21lIGZ1bmN0aW9ucyB0byBnaXZlCi1iZXR0ZXIgPGNvbXB1dGVyb3V0cHV0PnpsaWI8L2NvbXB1dGVyb3V0cHV0PiBjb21wYXRpYmlsaXR5LgotVGhlc2UgZnVuY3Rpb25zIGFyZSA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6b3BlbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ienJlYWQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnp3cml0ZTwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemZsdXNoPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Y2xvc2U8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemxpYlZlcnNpb248L2NvbXB1dGVyb3V0cHV0Pi4gIFRoZXNlCi1mdW5jdGlvbnMgYXJlIG5vdCAoeWV0KSBvZmZpY2lhbGx5IHBhcnQgb2YgdGhlIGxpYnJhcnkuICBJZiB0aGV5Ci1icmVhaywgeW91IGdldCB0byBrZWVwIGFsbCB0aGUgcGllY2VzLiAgTmV2ZXJ0aGVsZXNzLCBJIHRoaW5rCi10aGV5IHdvcmsgb2suPC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci10eXBlZGVmIHZvaWQgQlpGSUxFOwotCi1jb25zdCBjaGFyICogQloyX2J6bGliVmVyc2lvbiAoIHZvaWQgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpGSUxFICogQloyX2J6b3BlbiAgKCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlICk7Ci1CWkZJTEUgKiBCWjJfYnpkb3BlbiAoIGludCAgICAgICAgZmQsICAgIGNvbnN0IGNoYXIgKm1vZGUgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPk9wZW5zIGEgPGNvbXB1dGVyb3V0cHV0Pi5iejI8L2NvbXB1dGVyb3V0cHV0PiBmaWxlIGZvcgotcmVhZGluZyBvciB3cml0aW5nLCB1c2luZyBlaXRoZXIgaXRzIG5hbWUgb3IgYSBwcmUtZXhpc3RpbmcgZmlsZQotZGVzY3JpcHRvci4gIEFuYWxvZ291cyB0byA8Y29tcHV0ZXJvdXRwdXQ+Zm9wZW48L2NvbXB1dGVyb3V0cHV0PgotYW5kIDxjb21wdXRlcm91dHB1dD5mZG9wZW48L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpyZWFkICAoIEJaRklMRSogYiwgdm9pZCogYnVmLCBpbnQgbGVuICk7Ci1pbnQgQloyX2J6d3JpdGUgKCBCWkZJTEUqIGIsIHZvaWQqIGJ1ZiwgaW50IGxlbiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmVhZHMvd3JpdGVzIGRhdGEgZnJvbS90byBhIHByZXZpb3VzbHkgb3BlbmVkCi08Y29tcHV0ZXJvdXRwdXQ+QlpGSUxFPC9jb21wdXRlcm91dHB1dD4uICBBbmFsb2dvdXMgdG8KLTxjb21wdXRlcm91dHB1dD5mcmVhZDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PmZ3cml0ZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50ICBCWjJfYnpmbHVzaCAoIEJaRklMRSogYiApOwotdm9pZCBCWjJfYnpjbG9zZSAoIEJaRklMRSogYiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+Rmx1c2hlcy9jbG9zZXMgYSA8Y29tcHV0ZXJvdXRwdXQ+QlpGSUxFPC9jb21wdXRlcm91dHB1dD4uCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Zmx1c2g8L2NvbXB1dGVyb3V0cHV0PiBkb2Vzbid0IGFjdHVhbGx5IGRvCi1hbnl0aGluZy4gIEFuYWxvZ291cyB0byA8Y29tcHV0ZXJvdXRwdXQ+ZmZsdXNoPC9jb21wdXRlcm91dHB1dD4KLWFuZCA8Y29tcHV0ZXJvdXRwdXQ+ZmNsb3NlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1jb25zdCBjaGFyICogQloyX2J6ZXJyb3IgKCBCWkZJTEUgKmIsIGludCAqZXJybnVtICkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbW9yZSByZWNlbnQgZXJyb3Igc3RhdHVzIG9mCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgYWxzbyBzZXRzCi08Y29tcHV0ZXJvdXRwdXQ+KmVycm51bTwvY29tcHV0ZXJvdXRwdXQ+IHRvIGl0cyBudW1lcmljYWwKLXZhbHVlLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InN0ZGlvLWZyZWUiIAotICAgICAgIHhyZWZsYWJlbD0iVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSBzdGRpby1mcmVlIGVudmlyb25tZW50Ij4KLTx0aXRsZT5Vc2luZyB0aGUgbGlicmFyeSBpbiBhIDxjb21wdXRlcm91dHB1dD5zdGRpbzwvY29tcHV0ZXJvdXRwdXQ+LWZyZWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotCi0KLTxzZWN0MiBpZD0ic3RkaW8tYnllIiB4cmVmbGFiZWw9IkdldHRpbmcgcmlkIG9mIHN0ZGlvIj4KLTx0aXRsZT5HZXR0aW5nIHJpZCBvZiA8Y29tcHV0ZXJvdXRwdXQ+c3RkaW88L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwYXJhPkluIGEgZGVlcGx5IGVtYmVkZGVkIGFwcGxpY2F0aW9uLCB5b3UgbWlnaHQgd2FudCB0byB1c2UKLWp1c3QgdGhlIG1lbW9yeS10by1tZW1vcnkgZnVuY3Rpb25zLiAgWW91IGNhbiBkbyB0aGlzCi1jb252ZW5pZW50bHkgYnkgY29tcGlsaW5nIHRoZSBsaWJyYXJ5IHdpdGggcHJlcHJvY2Vzc29yIHN5bWJvbAotPGNvbXB1dGVyb3V0cHV0PkJaX05PX1NURElPPC9jb21wdXRlcm91dHB1dD4gZGVmaW5lZC4gIERvaW5nIHRoaXMKLWdpdmVzIHlvdSBhIGxpYnJhcnkgY29udGFpbmluZyBvbmx5IHRoZSBmb2xsb3dpbmcgZWlnaHQKLWZ1bmN0aW9uczo8L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPgotCi08cGFyYT5XaGVuIGNvbXBpbGVkIGxpa2UgdGhpcywgYWxsIGZ1bmN0aW9ucyB3aWxsIGlnbm9yZQotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+IHNldHRpbmdzLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImNyaXRpY2FsLWVycm9yIiB4cmVmbGFiZWw9IkNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIj4KLTx0aXRsZT5Dcml0aWNhbCBlcnJvciBoYW5kbGluZzwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGNvbnRhaW5zIGEgbnVtYmVyCi1vZiBpbnRlcm5hbCBhc3NlcnRpb24gY2hlY2tzIHdoaWNoIHNob3VsZCwgbmVlZGxlc3MgdG8gc2F5LCBuZXZlcgotYmUgYWN0aXZhdGVkLiAgTmV2ZXJ0aGVsZXNzLCBpZiBhbiBhc3NlcnRpb24gc2hvdWxkIGZhaWwsCi1iZWhhdmlvdXIgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbGlicmFyeSB3YXMgY29tcGlsZWQgd2l0aAotPGNvbXB1dGVyb3V0cHV0PkJaX05PX1NURElPPC9jb21wdXRlcm91dHB1dD4gc2V0LjwvcGFyYT4KLQotPHBhcmE+Rm9yIGEgbm9ybWFsIGNvbXBpbGUsIGFuIGFzc2VydGlvbiBmYWlsdXJlIHlpZWxkcyB0aGUKLW1lc3NhZ2U6PC9wYXJhPgotCi08YmxvY2txdW90ZT4KLTxwYXJhPmJ6aXAyL2xpYmJ6aXAyOiBpbnRlcm5hbCBlcnJvciBudW1iZXIgTi48L3BhcmE+Ci08cGFyYT5UaGlzIGlzIGEgYnVnIGluIGJ6aXAyL2xpYmJ6aXAyLCAmYnotdmVyc2lvbjsgb2YgJmJ6LWRhdGU7LgotUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDogJmJ6LWVtYWlsOy4gIElmIHRoaXMgaGFwcGVuZWQKLXdoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYQotY29tcG9uZW50LCB5b3Ugc2hvdWxkIGFsc28gcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBhdXRob3IocykKLW9mIHRoYXQgcHJvZ3JhbS4gIFBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byByZXBvcnQgdGhpcyBidWc7Ci10aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXIKLXF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuICBKdWxpYW4gU2V3YXJkLCAmYnotZGF0ZTsuCi08L3BhcmE+PC9ibG9ja3F1b3RlPgotCi08cGFyYT53aGVyZSA8Y29tcHV0ZXJvdXRwdXQ+TjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHNvbWUgZXJyb3IgY29kZQotbnVtYmVyLiAgSWYgPGNvbXB1dGVyb3V0cHV0Pk4gPT0gMTAwNzwvY29tcHV0ZXJvdXRwdXQ+LCBpdCBhbHNvCi1wcmludHMgc29tZSBleHRyYSB0ZXh0IGFkdmlzaW5nIHRoZSByZWFkZXIgdGhhdCB1bnJlbGlhYmxlIG1lbW9yeQotaXMgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGludGVybmFsIGVycm9yIDEwMDcuIChUaGlzIGlzIGEKLWZyZXF1ZW50bHktb2JzZXJ2ZWQtcGhlbm9tZW5vbiB3aXRoIHZlcnNpb25zIDEuMC4wLzEuMC4xKS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5leGl0KDMpPC9jb21wdXRlcm91dHB1dD4gaXMgdGhlbgotY2FsbGVkLjwvcGFyYT4KLQotPHBhcmE+Rm9yIGEgPGNvbXB1dGVyb3V0cHV0PnN0ZGlvPC9jb21wdXRlcm91dHB1dD4tZnJlZSBsaWJyYXJ5LAotYXNzZXJ0aW9uIGZhaWx1cmVzIHJlc3VsdCBpbiBhIGNhbGwgdG8gYSBmdW5jdGlvbiBkZWNsYXJlZAotYXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1leHRlcm4gdm9pZCBiel9pbnRlcm5hbF9lcnJvciAoIGludCBlcnJjb2RlICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5UaGUgcmVsZXZhbnQgY29kZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuICBZb3Ugc2hvdWxkCi1zdXBwbHkgc3VjaCBhIGZ1bmN0aW9uLjwvcGFyYT4KLQotPHBhcmE+SW4gZWl0aGVyIGNhc2UsIG9uY2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaGFzIG9jY3VycmVkLCBhbnkKLTxjb21wdXRlcm91dHB1dD5iel9zdHJlYW08L2NvbXB1dGVyb3V0cHV0PiByZWNvcmRzIGludm9sdmVkIGNhbgotYmUgcmVnYXJkZWQgYXMgaW52YWxpZC4gIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVzdW1lIG5vcm1hbAotb3BlcmF0aW9uIHdpdGggdGhlbS48L3BhcmE+Ci0KLTxwYXJhPllvdSBtYXksIG9mIGNvdXJzZSwgY2hhbmdlIGNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIHRvIHN1aXQKLXlvdXIgbmVlZHMuICBBcyBJIHNhaWQgYWJvdmUsIGNyaXRpY2FsIGVycm9ycyBpbmRpY2F0ZSBidWdzIGluCi10aGUgbGlicmFyeSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIEFsbCAibm9ybWFsIiBlcnJvciBzaXR1YXRpb25zCi1hcmUgaW5kaWNhdGVkIHZpYSBlcnJvciByZXR1cm4gY29kZXMgZnJvbSBmdW5jdGlvbnMsIGFuZCBjYW4gYmUKLXJlY292ZXJlZCBmcm9tLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9Indpbi1kbGwiIHhyZWZsYWJlbD0iTWFraW5nIGEgV2luZG93cyBETEwiPgotPHRpdGxlPk1ha2luZyBhIFdpbmRvd3MgRExMPC90aXRsZT4KLQotPHBhcmE+RXZlcnl0aGluZyByZWxhdGVkIHRvIFdpbmRvd3MgaGFzIGJlZW4gY29udHJpYnV0ZWQgYnkKLVlvc2hpb2thIFRzdW5lbwotKDxjb21wdXRlcm91dHB1dD50c3VuZW9AcnIuaWlqNHUub3IuanA8L2NvbXB1dGVyb3V0cHV0PiksIHNvCi15b3Ugc2hvdWxkIHNlbmQgeW91ciBxdWVyaWVzIHRvIGhpbSAoYnV0IHBlcmhhcHMgQ2M6IG1lLAotPGNvbXB1dGVyb3V0cHV0PiZiei1lbWFpbDs8L2NvbXB1dGVyb3V0cHV0PikuPC9wYXJhPgotCi08cGFyYT5NeSB2YWd1ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdG8gZG8gaXM6IHVzaW5nIFZpc3VhbCBDKysKLTUuMCwgb3BlbiB0aGUgcHJvamVjdCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnoyLmRzcDwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgYnVpbGQuICBUaGF0J3MKLWFsbC48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBjYW4ndCBvcGVuIHRoZSBwcm9qZWN0IGZpbGUgZm9yIHNvbWUgcmVhc29uLCBtYWtlIGEKLW5ldyBvbmUsIG5hbWluZyB0aGVzZSBmaWxlczoKLTxjb21wdXRlcm91dHB1dD5ibG9ja3NvcnQuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmJ6bGliLmM8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5jb21wcmVzcy5jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+Y3JjdGFibGUuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmRlY29tcHJlc3MuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pmh1ZmZtYW4uYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnJhbmR0YWJsZS5jPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnoyLmRlZjwvY29tcHV0ZXJvdXRwdXQ+LiAgWW91IHdpbGwgYWxzbyBuZWVkCi10byBuYW1lIHRoZSBoZWFkZXIgZmlsZXMgPGNvbXB1dGVyb3V0cHV0PmJ6bGliLmg8L2NvbXB1dGVyb3V0cHV0PgotYW5kIDxjb21wdXRlcm91dHB1dD5iemxpYl9wcml2YXRlLmg8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBkb24ndCB1c2UgVkMrKywgeW91IG1heSBuZWVkIHRvIGRlZmluZSB0aGUKLXByb3Byb2Nlc3NvciBzeW1ib2wKLTxjb21wdXRlcm91dHB1dD5fV0lOMzI8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPkZpbmFsbHksIDxjb21wdXRlcm91dHB1dD5kbGx0ZXN0LmM8L2NvbXB1dGVyb3V0cHV0PiBpcyBhCi1zYW1wbGUgcHJvZ3JhbSB1c2luZyB0aGUgRExMLiAgSXQgaGFzIGEgcHJvamVjdCBmaWxlLAotPGNvbXB1dGVyb3V0cHV0PmRsbHRlc3QuZHNwPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JZiB5b3UganVzdCB3YW50IGEgbWFrZWZpbGUgZm9yIFZpc3VhbCBDLCBoYXZlIGEgbG9vayBhdAotPGNvbXB1dGVyb3V0cHV0Pm1ha2VmaWxlLm1zYzwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QmUgYXdhcmUgdGhhdCBpZiB5b3UgY29tcGlsZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gaXRzZWxmIG9uIFdpbjMyLCB5b3UgbXVzdAotc2V0IDxjb21wdXRlcm91dHB1dD5CWl9VTklYPC9jb21wdXRlcm91dHB1dD4gdG8gMCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWl9MQ0NXSU4zMjwvY29tcHV0ZXJvdXRwdXQ+IHRvIDEsIGluIHRoZSBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDIuYzwvY29tcHV0ZXJvdXRwdXQ+LCBiZWZvcmUgY29tcGlsaW5nLgotT3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgYmluYXJ5IHdvbid0IHdvcmsgY29ycmVjdGx5LjwvcGFyYT4KLQotPHBhcmE+SSBoYXZlbid0IHRyaWVkIGFueSBvZiB0aGlzIHN0dWZmIG15c2VsZiwgYnV0IGl0IGFsbCBsb29rcwotcGxhdXNpYmxlLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotPC9jaGFwdGVyPgotCi0KLQotPGNoYXB0ZXIgaWQ9Im1pc2MiIHhyZWZsYWJlbD0iTWlzY2VsbGFuZWEiPgotPHRpdGxlPk1pc2NlbGxhbmVhPC90aXRsZT4KLQotPHBhcmE+VGhlc2UgYXJlIGp1c3Qgc29tZSByYW5kb20gdGhvdWdodHMgb2YgbWluZS4gIFlvdXIgbWlsZWFnZQotbWF5IHZhcnkuPC9wYXJhPgotCi0KLTxzZWN0MSBpZD0ibGltaXRzIiB4cmVmbGFiZWw9IkxpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0Ij4KLTx0aXRsZT5MaW1pdGF0aW9ucyBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdDwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMi0xLjAuWDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PjAuOS41PC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+MC45LjA8L2NvbXB1dGVyb3V0cHV0PiB1c2UgZXhhY3RseSB0aGUgc2FtZSBmaWxlCi1mb3JtYXQgYXMgdGhlIG9yaWdpbmFsIHZlcnNpb24sCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDItMC4xPC9jb21wdXRlcm91dHB1dD4uICBUaGlzIGRlY2lzaW9uIHdhcwotbWFkZSBpbiB0aGUgaW50ZXJlc3RzIG9mIHN0YWJpbGl0eS4gIENyZWF0aW5nIHlldCBhbm90aGVyCi1pbmNvbXBhdGlibGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdCB3b3VsZCBjcmVhdGUgZnVydGhlcgotY29uZnVzaW9uIGFuZCBkaXNydXB0aW9uIGZvciB1c2Vycy48L3BhcmE+Ci0KLTxwYXJhPk5ldmVydGhlbGVzcywgdGhpcyBpcyBub3QgYSBwYWlubGVzcyBkZWNpc2lvbi4gIERldmVsb3BtZW50Ci13b3JrIHNpbmNlIHRoZSByZWxlYXNlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDItMC4xPC9jb21wdXRlcm91dHB1dD4gaW4gQXVndXN0IDE5OTcgaGFzCi1zaG93biBjb21wbGV4aXRpZXMgaW4gdGhlIGZpbGUgZm9ybWF0IHdoaWNoIHNsb3cgZG93bgotZGVjb21wcmVzc2lvbiBhbmQsIGluIHJldHJvc3BlY3QsIGFyZSB1bm5lY2Vzc2FyeS4gIFRoZXNlCi1hcmU6PC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJ1bi1sZW5ndGggZW5jb2Rlciwgd2hpY2ggaXMgdGhlIGZpcnN0IG9mIHRoZQotICAgY29tcHJlc3Npb24gdHJhbnNmb3JtYXRpb25zLCBpcyBlbnRpcmVseSBpcnJlbGV2YW50LiAgVGhlCi0gICBvcmlnaW5hbCBwdXJwb3NlIHdhcyB0byBwcm90ZWN0IHRoZSBzb3J0aW5nIGFsZ29yaXRobSBmcm9tIHRoZQotICAgdmVyeSB3b3JzdCBjYXNlIGlucHV0OiBhIHN0cmluZyBvZiByZXBlYXRlZCBzeW1ib2xzLiAgQnV0Ci0gICBhbGdvcml0aG0gc3RlcHMgUTZhIGFuZCBRNmIgaW4gdGhlIG9yaWdpbmFsIEJ1cnJvd3MtV2hlZWxlcgotICAgdGVjaG5pY2FsIHJlcG9ydCAoU1JDLTEyNCkgc2hvdyBob3cgcmVwZWF0cyBjYW4gYmUgaGFuZGxlZAotICAgd2l0aG91dCBkaWZmaWN1bHR5IGluIGJsb2NrIHNvcnRpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJhbmRvbWlzYXRpb24gbWVjaGFuaXNtIGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8gYmUKLSAgIHRoZXJlLiAgVWRpIE1hbmJlciBhbmQgR2VuZSBNeWVycyBwdWJsaXNoZWQgYSBzdWZmaXggYXJyYXkKLSAgIGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gYSBmZXcgeWVhcnMgYmFjaywgd2hpY2ggY2FuIGJlIGVtcGxveWVkCi0gICB0byBzb3J0IGFueSBibG9jaywgbm8gbWF0dGVyIGhvdyByZXBldGl0aXZlLCBpbiBPKE4gbG9nIE4pCi0gICB0aW1lLiAgU3Vic2VxdWVudCB3b3JrIGJ5IEt1bmloaWtvIFNhZGFrYW5lIGhhcyBwcm9kdWNlZCBhCi0gICBkZXJpdmF0aXZlIE8oTiAobG9nIE4pXjIpIGFsZ29yaXRobSB3aGljaCB1c3VhbGx5IG91dHBlcmZvcm1zCi0gICB0aGUgTWFuYmVyLU15ZXJzIGFsZ29yaXRobS48L3BhcmE+Ci0KLSAgIDxwYXJhPkkgY291bGQgaGF2ZSBjaGFuZ2VkIHRvIFNhZGFrYW5lJ3MgYWxnb3JpdGhtLCBidXQgSSBmaW5kCi0gICBpdCB0byBiZSBzbG93ZXIgdGhhbiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PidzCi0gICBleGlzdGluZyBhbGdvcml0aG0gZm9yIG1vc3QgaW5wdXRzLCBhbmQgdGhlIHJhbmRvbWlzYXRpb24KLSAgIG1lY2hhbmlzbSBwcm90ZWN0cyBhZGVxdWF0ZWx5IGFnYWluc3QgYmFkIGNhc2VzLiAgSSBkaWRuJ3QKLSAgIHRoaW5rIGl0IHdhcyBhIGdvb2QgdHJhZGVvZmYgdG8gbWFrZS4gIFBhcnRseSB0aGlzIGlzIGR1ZSB0bwotICAgdGhlIGZhY3QgdGhhdCBJIHdhcyBub3QgZmxvb2RlZCB3aXRoIGVtYWlsIGNvbXBsYWludHMgYWJvdXQKLSAgIDxjb21wdXRlcm91dHB1dD5iemlwMi0wLjE8L2NvbXB1dGVyb3V0cHV0PidzIHBlcmZvcm1hbmNlIG9uCi0gICByZXBldGl0aXZlIGRhdGEsIHNvIHBlcmhhcHMgaXQgaXNuJ3QgYSBwcm9ibGVtIGZvciByZWFsCi0gICBpbnB1dHMuPC9wYXJhPgotCi0gICA8cGFyYT5Qcm9iYWJseSB0aGUgYmVzdCBsb25nLXRlcm0gc29sdXRpb24sIGFuZCB0aGUgb25lIEkgaGF2ZQotICAgaW5jb3Jwb3JhdGVkIGludG8gMC45LjUgYW5kIGFib3ZlLCBpcyB0byB1c2UgdGhlIGV4aXN0aW5nCi0gICBzb3J0aW5nIGFsZ29yaXRobSBpbml0aWFsbHksIGFuZCBmYWxsIGJhY2sgdG8gYSBPKE4gKGxvZyBOKV4yKQotICAgYWxnb3JpdGhtIGlmIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gZ2V0cyBpbnRvCi0gICBkaWZmaWN1bHRpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgPGxpc3RpdGVtPjxwYXJhPlRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0IHdhcyBuZXZlciBkZXNpZ25lZCB0byBiZQotICAgaGFuZGxlZCBieSBhIGxpYnJhcnksIGFuZCBJIGhhdmUgaGFkIHRvIGp1bXAgdGhvdWdoIHNvbWUgaG9vcHMKLSAgIHRvIHByb2R1Y2UgYW4gZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIGRlY29tcHJlc3Npb24uICBJdCdzCi0gICBhIGJpdCBoYWlyeS4gIFRyeSBwYXNzaW5nCi0gICA8Y29tcHV0ZXJvdXRwdXQ+ZGVjb21wcmVzcy5jPC9jb21wdXRlcm91dHB1dD4gdGhyb3VnaCB0aGUgQwotICAgcHJlcHJvY2Vzc29yIGFuZCB5b3UnbGwgc2VlIHdoYXQgSSBtZWFuLiAgTXVjaCBvZiB0aGlzCi0gICBjb21wbGV4aXR5IGNvdWxkIGhhdmUgYmVlbiBhdm9pZGVkIGlmIHRoZSBjb21wcmVzc2VkIHNpemUgb2YKLSAgIGVhY2ggYmxvY2sgb2YgZGF0YSB3YXMgcmVjb3JkZWQgaW4gdGhlIGRhdGEgc3RyZWFtLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPkFuIEFkbGVyLTMyIGNoZWNrc3VtLCByYXRoZXIgdGhhbiBhIENSQzMyIGNoZWNrc3VtLAotICAgd291bGQgYmUgZmFzdGVyIHRvIGNvbXB1dGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5JdCB3b3VsZCBiZSBmYWlyIHRvIHNheSB0aGF0IHRoZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0IHdhcyBmcm96ZW4gYmVmb3JlIEkKLXByb3Blcmx5IGFuZCBmdWxseSB1bmRlcnN0b29kIHRoZSBwZXJmb3JtYW5jZSBjb25zZXF1ZW5jZXMgb2YKLWRvaW5nIHNvLjwvcGFyYT4KLQotPHBhcmE+SW1wcm92ZW1lbnRzIHdoaWNoIEkgd2FzIGFibGUgdG8gaW5jb3Jwb3JhdGUgaW50byAwLjkuMCwKLWRlc3BpdGUgdXNpbmcgdGhlIHNhbWUgZmlsZSBmb3JtYXQsIGFyZTo8L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT5TaW5nbGUgYXJyYXkgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgQldULiAgVGhpcwotICBzaWduaWZpY2FudGx5IHNwZWVkcyB1cCBkZWNvbXByZXNzaW9uLCBwcmVzdW1hYmx5IGJlY2F1c2UgaXQKLSAgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhY2hlIG1pc3Nlcy48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5GYXN0ZXIgaW52ZXJzZSBNVEYgdHJhbnNmb3JtIGZvciBsYXJnZSBNVEYgdmFsdWVzLgotICBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBub3Rpb24gb2Ygc2xpZGluZyBibG9ja3MKLSAgb2YgdmFsdWVzLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMi0wLjkuMDwvY29tcHV0ZXJvdXRwdXQ+IG5vdyByZWFkcwotICBhbmQgd3JpdGVzIGZpbGVzIHdpdGggPGNvbXB1dGVyb3V0cHV0PmZyZWFkPC9jb21wdXRlcm91dHB1dD4KLSAgYW5kIDxjb21wdXRlcm91dHB1dD5md3JpdGU8L2NvbXB1dGVyb3V0cHV0PjsgdmVyc2lvbiAwLjEgdXNlZAotICA8Y29tcHV0ZXJvdXRwdXQ+cHV0YzwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+Z2V0YzwvY29tcHV0ZXJvdXRwdXQ+LiAgRHVoISAgV2VsbCwgeW91IGxpdmUKLSAgYW5kIGxlYXJuLjwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPHBhcmE+RnVydGhlciBhaGVhZCwgaXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGRvIHJhbmRvbQotYWNjZXNzIGludG8gZmlsZXMuICBUaGlzIHdpbGwgcmVxdWlyZSBzb21lIGNhcmVmdWwgZGVzaWduIG9mCi1jb21wcmVzc2VkIGZpbGUgZm9ybWF0cy48L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJwb3J0LWlzc3VlcyIgeHJlZmxhYmVsPSJQb3J0YWJpbGl0eSBpc3N1ZXMiPgotPHRpdGxlPlBvcnRhYmlsaXR5IGlzc3VlczwvdGl0bGU+Ci0KLTxwYXJhPkFmdGVyIHNvbWUgY29uc2lkZXJhdGlvbiwgSSBoYXZlIGRlY2lkZWQgbm90IHRvIHVzZSBHTlUKLTxjb21wdXRlcm91dHB1dD5hdXRvY29uZjwvY29tcHV0ZXJvdXRwdXQ+IHRvIGNvbmZpZ3VyZSAwLjkuNSBvcgotMS4wLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmF1dG9jb25mPC9jb21wdXRlcm91dHB1dD4sIGFkbWlyYWJsZSBhbmQKLXdvbmRlcmZ1bCB0aG91Z2ggaXQgaXMsIG1haW5seSBhc3Npc3RzIHdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMKLWJldHdlZW4gVW5peC1saWtlIHBsYXRmb3Jtcy4gIEJ1dAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZG9lc24ndCBoYXZlIG11Y2ggaW4gdGhlCi13YXkgb2YgcG9ydGFiaWxpdHkgcHJvYmxlbXMgb24gVW5peDsgbW9zdCBvZiB0aGUgZGlmZmljdWx0aWVzCi1hcHBlYXIgd2hlbiBwb3J0aW5nIHRvIHRoZSBNYWMsIG9yIHRvIE1pY3Jvc29mdCdzIG9wZXJhdGluZwotc3lzdGVtcy4gIDxjb21wdXRlcm91dHB1dD5hdXRvY29uZjwvY29tcHV0ZXJvdXRwdXQ+IGRvZXNuJ3QgaGVscAotaW4gdGhvc2UgY2FzZXMsIGFuZCBicmluZ3MgaW4gYSB3aG9sZSBsb2FkIG9mIG5ldwotY29tcGxleGl0eS48L3BhcmE+Ci0KLTxwYXJhPk1vc3QgcGVvcGxlIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgYW5kCi1wcm9ncmFtIHVuZGVyIFVuaXggc3RyYWlnaHQgb3V0LW9mLXRoZS1ib3gsIHNvIHRvIHNwZWFrLAotZXNwZWNpYWxseSBpZiB5b3UgaGF2ZSBhIHZlcnNpb24gb2YgR05VIEMgYXZhaWxhYmxlLjwvcGFyYT4KLQotPHBhcmE+VGhlcmUgYXJlIGEgY291cGxlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+X19pbmxpbmVfXzwvY29tcHV0ZXJvdXRwdXQ+IGRpcmVjdGl2ZXMgaW4gdGhlCi1jb2RlLiAgR05VIEMgKDxjb21wdXRlcm91dHB1dD5nY2M8L2NvbXB1dGVyb3V0cHV0Pikgc2hvdWxkIGJlCi1hYmxlIHRvIGhhbmRsZSB0aGVtLiAgSWYgeW91J3JlIG5vdCB1c2luZyBHTlUgQywgeW91ciBDIGNvbXBpbGVyCi1zaG91bGRuJ3Qgc2VlIHRoZW0gYXQgYWxsLiAgSWYgeW91ciBjb21waWxlciBkb2VzLCBmb3Igc29tZQotcmVhc29uLCBzZWUgdGhlbSBhbmQgZG9lc24ndCBsaWtlIHRoZW0sIGp1c3QKLTxjb21wdXRlcm91dHB1dD4jZGVmaW5lPC9jb21wdXRlcm91dHB1dD4KLTxjb21wdXRlcm91dHB1dD5fX2lubGluZV9fPC9jb21wdXRlcm91dHB1dD4gdG8gYmUKLTxjb21wdXRlcm91dHB1dD4vKiAqLzwvY29tcHV0ZXJvdXRwdXQ+LiAgT25lIGVhc3kgd2F5IHRvIGRvIHRoaXMKLWlzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZmxhZwotPGNvbXB1dGVyb3V0cHV0Pi1EX19pbmxpbmVfXz08L2NvbXB1dGVyb3V0cHV0Piwgd2hpY2ggc2hvdWxkIGJlCi11bmRlcnN0b29kIGJ5IG1vc3QgVW5peCBjb21waWxlcnMuPC9wYXJhPgotCi08cGFyYT5JZiB5b3Ugc3RpbGwgaGF2ZSBkaWZmaWN1bHRpZXMsIHRyeSBjb21waWxpbmcgd2l0aCB0aGUKLW1hY3JvIDxjb21wdXRlcm91dHB1dD5CWl9TVFJJQ1RfQU5TSTwvY29tcHV0ZXJvdXRwdXQ+IGRlZmluZWQuCi1UaGlzIHNob3VsZCBlbmFibGUgeW91IHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluIGEgc3RyaWN0bHkgQU5TSQotY29tcGxpYW50IGVudmlyb25tZW50LiAgQnVpbGRpbmcgdGhlIHByb2dyYW0gaXRzZWxmIGxpa2UgdGhpcyBpcwotZGFuZ2Vyb3VzIGFuZCBub3Qgc3VwcG9ydGVkLCBzaW5jZSB5b3UgcmVtb3ZlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PidzIGNoZWNrcyBhZ2FpbnN0Ci1jb21wcmVzc2luZyBkaXJlY3Rvcmllcywgc3ltYm9saWMgbGlua3MsIGRldmljZXMsIGFuZCBvdGhlcgotbm90LXJlYWxseS1hLWZpbGUgZW50aXRpZXMuICBUaGlzIGNvdWxkIGNhdXNlIGZpbGVzeXN0ZW0KLWNvcnJ1cHRpb24hPC9wYXJhPgotCi08cGFyYT5PbmUgb3RoZXIgdGhpbmc6IGlmIHlvdSBjcmVhdGUgYQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gYmluYXJ5IGZvciBwdWJsaWMgZGlzdHJpYnV0aW9uLAotcGxlYXNlIGNvbnNpZGVyIGxpbmtpbmcgaXQgc3RhdGljYWxseSAoPGNvbXB1dGVyb3V0cHV0PmdjYwotLXN0YXRpYzwvY29tcHV0ZXJvdXRwdXQ+KS4gIFRoaXMgYXZvaWRzIGFsbCBzb3J0cyBvZiBsaWJyYXJ5LXZlcnNpb24KLWlzc3VlcyB0aGF0IG90aGVycyBtYXkgZW5jb3VudGVyIGxhdGVyIG9uLjwvcGFyYT4KLQotPHBhcmE+SWYgeW91IGJ1aWxkIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IG9uCi1XaW4zMiwgeW91IG11c3Qgc2V0IDxjb21wdXRlcm91dHB1dD5CWl9VTklYPC9jb21wdXRlcm91dHB1dD4gdG8gMAotYW5kIDxjb21wdXRlcm91dHB1dD5CWl9MQ0NXSU4zMjwvY29tcHV0ZXJvdXRwdXQ+IHRvIDEsIGluIHRoZQotZmlsZSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDIuYzwvY29tcHV0ZXJvdXRwdXQ+LCBiZWZvcmUgY29tcGlsaW5nLgotT3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgYmluYXJ5IHdvbid0IHdvcmsgY29ycmVjdGx5LjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9ImJ1Z3MiIHhyZWZsYWJlbD0iUmVwb3J0aW5nIGJ1Z3MiPgotPHRpdGxlPlJlcG9ydGluZyBidWdzPC90aXRsZT4KLQotPHBhcmE+SSB0cmllZCBwcmV0dHkgaGFyZCB0byBtYWtlIHN1cmUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGJ1ZyBmcmVlLCBib3RoIGJ5Ci1kZXNpZ24gYW5kIGJ5IHRlc3RpbmcuICBIb3BlZnVsbHkgeW91J2xsIG5ldmVyIG5lZWQgdG8gcmVhZCB0aGlzCi1zZWN0aW9uIGZvciByZWFsLjwvcGFyYT4KLQotPHBhcmE+TmV2ZXJ0aGVsZXNzLCBpZiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkaWVzCi13aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0LCBhIGJ1cyBlcnJvciBvciBhbiBpbnRlcm5hbCBhc3NlcnRpb24KLWZhaWx1cmUsIGl0IHdpbGwgYXNrIHlvdSB0byBlbWFpbCBtZSBhIGJ1ZyByZXBvcnQuICBFeHBlcmllbmNlIGZyb20KLXllYXJzIG9mIGZlZWRiYWNrIG9mIGJ6aXAyIHVzZXJzIGluZGljYXRlcyB0aGF0IGFsbW9zdCBhbGwgdGhlc2UKLXByb2JsZW1zIGNhbiBiZSB0cmFjZWQgdG8gZWl0aGVyIGNvbXBpbGVyIGJ1Z3Mgb3IgaGFyZHdhcmUKLXByb2JsZW1zLjwvcGFyYT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPlJlY29tcGlsZSB0aGUgcHJvZ3JhbSB3aXRoIG5vIG9wdGltaXNhdGlvbiwgYW5kCi0gIHNlZSBpZiBpdCB3b3Jrcy4gIEFuZC9vciB0cnkgYSBkaWZmZXJlbnQgY29tcGlsZXIuICBJIGhlYXJkIGFsbAotICBzb3J0cyBvZiBzdG9yaWVzIGFib3V0IHZhcmlvdXMgZmxhdm91cnMgb2YgR05VIEMgKGFuZCBvdGhlcgotICBjb21waWxlcnMpIGdlbmVyYXRpbmcgYmFkIGNvZGUgZm9yCi0gIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgSSd2ZSBydW4gYWNyb3NzIHR3bwotICBzdWNoIGV4YW1wbGVzIG15c2VsZi48L3BhcmE+Ci0KLSAgPHBhcmE+Mi43LlggdmVyc2lvbnMgb2YgR05VIEMgYXJlIGtub3duIHRvIGdlbmVyYXRlIGJhZCBjb2RlCi0gIGZyb20gdGltZSB0byB0aW1lLCBhdCBoaWdoIG9wdGltaXNhdGlvbiBsZXZlbHMuICBJZiB5b3UgZ2V0Ci0gIHByb2JsZW1zLCB0cnkgdXNpbmcgdGhlIGZsYWdzCi0gIDxjb21wdXRlcm91dHB1dD4tTzI8L2NvbXB1dGVyb3V0cHV0PgotICA8Y29tcHV0ZXJvdXRwdXQ+LWZvbWl0LWZyYW1lLXBvaW50ZXI8L2NvbXB1dGVyb3V0cHV0PgotICA8Y29tcHV0ZXJvdXRwdXQ+LWZuby1zdHJlbmd0aC1yZWR1Y2U8L2NvbXB1dGVyb3V0cHV0Pi4gIFlvdQotICBzaG91bGQgc3BlY2lmaWNhbGx5IDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiB1c2UKLSAgPGNvbXB1dGVyb3V0cHV0Pi1mdW5yb2xsLWxvb3BzPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi0gIDxwYXJhPllvdSBtYXkgbm90aWNlIHRoYXQgdGhlIE1ha2VmaWxlIHJ1bnMgc2l4IHRlc3RzIGFzIHBhcnQKLSAgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuICBJZiB0aGUgcHJvZ3JhbSBwYXNzZXMgYWxsIG9mIHRoZXNlLCBpdCdzCi0gIGEgcHJldHR5IGdvb2QgKGJ1dCBub3QgMTAwJSkgaW5kaWNhdGlvbiB0aGF0IHRoZSBjb21waWxlciBoYXMKLSAgZG9uZSBpdHMgam9iIGNvcnJlY3RseS48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5JZiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PgotICBjcmFzaGVzIHJhbmRvbWx5LCBhbmQgdGhlIGNyYXNoZXMgYXJlIG5vdCByZXBlYXRhYmxlLCB5b3UgbWF5Ci0gIGhhdmUgYSBmbGFreSBtZW1vcnkgc3Vic3lzdGVtLgotICA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiByZWFsbHkgaGFtbWVycyB5b3VyCi0gIG1lbW9yeSBoaWVyYXJjaHksIGFuZCBpZiBpdCdzIGEgYml0IG1hcmdpbmFsLCB5b3UgbWF5IGdldCB0aGVzZQotICBwcm9ibGVtcy4gIERpdHRvIGlmIHlvdXIgZGlzayBvciBJL08gc3Vic3lzdGVtIGlzIHNsb3dseQotICBmYWlsaW5nLiAgWXVwLCB0aGlzIHJlYWxseSBkb2VzIGhhcHBlbi48L3BhcmE+Ci0KLSAgPHBhcmE+VHJ5IHVzaW5nIGEgZGlmZmVyZW50IG1hY2hpbmUgb2YgdGhlIHNhbWUgdHlwZSwgYW5kIHNlZQotICBpZiB5b3UgY2FuIHJlcGVhdCB0aGUgcHJvYmxlbS48L3BhcmE+PC9saXN0aXRlbT4KLQotICA8bGlzdGl0ZW0+PHBhcmE+VGhpcyBpc24ndCByZWFsbHkgYSBidWcsIGJ1dCAuLi4gSWYKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdGVsbHMgeW91IHlvdXIgZmlsZSBpcwotICBjb3JydXB0ZWQgb24gZGVjb21wcmVzc2lvbiwgYW5kIHlvdSBvYnRhaW5lZCB0aGUgZmlsZSB2aWEgRlRQLAotICB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgeW91IGZvcmdvdCB0byB0ZWxsIEZUUCB0byBkbyBhCi0gIGJpbmFyeSBtb2RlIHRyYW5zZmVyLiAgVGhhdCBhYnNvbHV0ZWx5IHdpbGwgY2F1c2UgdGhlIGZpbGUgdG8KLSAgYmUgbm9uLWRlY29tcHJlc3NpYmxlLiAgWW91J2xsIGhhdmUgdG8gdHJhbnNmZXIgaXQKLSAgYWdhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5JZiB5b3UndmUgaW5jb3Jwb3JhdGVkCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpbnRvIHlvdXIgb3duIHByb2dyYW0KLWFuZCBhcmUgZ2V0dGluZyBwcm9ibGVtcywgcGxlYXNlLCBwbGVhc2UsIHBsZWFzZSwgY2hlY2sgdGhhdCB0aGUKLXBhcmFtZXRlcnMgeW91IGFyZSBwYXNzaW5nIGluIGNhbGxzIHRvIHRoZSBsaWJyYXJ5LCBhcmUgY29ycmVjdCwKLWFuZCBpbiBhY2NvcmRhbmNlIHdpdGggd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIGFsbG93YWJsZS4KLUkgaGF2ZSB0cmllZCB0byBtYWtlIHRoZSBsaWJyYXJ5IHJvYnVzdCBhZ2FpbnN0IHN1Y2ggcHJvYmxlbXMsCi1idXQgSSdtIHN1cmUgSSBoYXZlbid0IHN1Y2NlZWRlZC48L3BhcmE+Ci0KLTxwYXJhPkZpbmFsbHksIGlmIHRoZSBhYm92ZSBjb21tZW50cyBkb24ndCBoZWxwLCB5b3UnbGwgaGF2ZSB0bwotc2VuZCBtZSBhIGJ1ZyByZXBvcnQuICBOb3csIGl0J3MganVzdCBhbWF6aW5nIGhvdyBtYW55IHBlb3BsZQotd2lsbCBzZW5kIG1lIGEgYnVnIHJlcG9ydCBzYXlpbmcgc29tZXRoaW5nIGxpa2U6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1iemlwMiBjcmFzaGVkIHdpdGggc2VnbWVudGF0aW9uIGZhdWx0IG9uIG15IG1hY2hpbmUKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPmFuZCBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZS4gIE5lZWRsZXNzIHRvIHNheSwgYSBzdWNoIGEKLXJlcG9ydCBpcyA8ZW1waGFzaXM+dG90YWxseSwgdXR0ZXJseSwgY29tcGxldGVseSBhbmQKLWNvbXByZWhlbnNpdmVseSAxMDAlIHVzZWxlc3M7IGEgd2FzdGUgb2YgeW91ciB0aW1lLCBteSB0aW1lLCBhbmQKLW5ldCBiYW5kd2lkdGg8L2VtcGhhc2lzPi4gIFdpdGggbm8gZGV0YWlscyBhdCBhbGwsIHRoZXJlJ3Mgbm8gd2F5Ci1JIGNhbiBwb3NzaWJseSBiZWdpbiB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHByb2JsZW0gaXMuPC9wYXJhPgotCi08cGFyYT5UaGUgcnVsZXMgb2YgdGhlIGdhbWUgYXJlOiBmYWN0cywgZmFjdHMsIGZhY3RzLiAgRG9uJ3Qgb21pdAotdGhlbSBiZWNhdXNlICJvaCwgdGhleSB3b24ndCBiZSByZWxldmFudCIuICBBdCB0aGUgYmFyZQotbWluaW11bTo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLU1hY2hpbmUgdHlwZS4gIE9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbi4gIAotRXhhY3QgdmVyc2lvbiBvZiBiemlwMiAoZG8gYnppcDIgLVYpLiAgCi1FeGFjdCB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciB1c2VkLiAgCi1GbGFncyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLgotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+SG93ZXZlciwgdGhlIG1vc3QgaW1wb3J0YW50IHNpbmdsZSB0aGluZyB0aGF0IHdpbGwgaGVscCBtZQotaXMgdGhlIGZpbGUgdGhhdCB5b3Ugd2VyZSB0cnlpbmcgdG8gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBhdCB0aGUKLXRpbWUgdGhlIHByb2JsZW0gaGFwcGVuZWQuICBXaXRob3V0IHRoYXQsIG15IGFiaWxpdHkgdG8gZG8KLWFueXRoaW5nIG1vcmUgdGhhbiBzcGVjdWxhdGUgYWJvdXQgdGhlIGNhdXNlLCBpcyBsaW1pdGVkLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InBhY2thZ2UiIHhyZWZsYWJlbD0iRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/Ij4KLTx0aXRsZT5EaWQgeW91IGdldCB0aGUgcmlnaHQgcGFja2FnZT88L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpcyBhIHJlc291cmNlIGhvZy4KLUl0IHNvYWtzIHVwIGxhcmdlIGFtb3VudHMgb2YgQ1BVIGN5Y2xlcyBhbmQgbWVtb3J5LiAgQWxzbywgaXQKLWdpdmVzIHZlcnkgbGFyZ2UgbGF0ZW5jaWVzLiAgSW4gdGhlIHdvcnN0IGNhc2UsIHlvdSBjYW4gZmVlZCBtYW55Ci1tZWdhYnl0ZXMgb2YgdW5jb21wcmVzc2VkIGRhdGEgaW50byB0aGUgbGlicmFyeSBiZWZvcmUgZ2V0dGluZwotYW55IGNvbXByZXNzZWQgb3V0cHV0LCBzbyB0aGlzIHByb2JhYmx5IHJ1bGVzIG91dCBhcHBsaWNhdGlvbnMKLXJlcXVpcmluZyBpbnRlcmFjdGl2ZSBiZWhhdmlvdXIuPC9wYXJhPgotCi08cGFyYT5UaGVzZSBhcmVuJ3QgZmF1bHRzIG9mIG15IGltcGxlbWVudGF0aW9uLCBJIGhvcGUsIGJ1dCBtb3JlCi1hbiBpbnRyaW5zaWMgcHJvcGVydHkgb2YgdGhlIEJ1cnJvd3MtV2hlZWxlciB0cmFuc2Zvcm0KLSh1bmZvcnR1bmF0ZWx5KS4gIE1heWJlIHRoaXMgaXNuJ3Qgd2hhdCB5b3Ugd2FudC48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSB3YW50IGEgY29tcHJlc3NvciBhbmQvb3IgbGlicmFyeSB3aGljaCBpcyBmYXN0ZXIsCi11c2VzIGxlc3MgbWVtb3J5IGJ1dCBnZXRzIHByZXR0eSBnb29kIGNvbXByZXNzaW9uLCBhbmQgaGFzCi1taW5pbWFsIGxhdGVuY3ksIGNvbnNpZGVyIEplYW4tbG91cCBHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzCi13b3JrLCA8Y29tcHV0ZXJvdXRwdXQ+emxpYi0xLjIuMTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0Pmd6aXAtMS4yLjQ8L2NvbXB1dGVyb3V0cHV0Pi4gIExvb2sgZm9yIHRoZW0gYXQgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3LnpsaWIub3JnIj5odHRwOi8vd3d3LnpsaWIub3JnPC91bGluaz4gYW5kIAotPHVsaW5rIHVybD0iaHR0cDovL3d3dy5nemlwLm9yZyI+aHR0cDovL3d3dy5nemlwLm9yZzwvdWxpbms+Ci1yZXNwZWN0aXZlbHkuPC9wYXJhPgotCi08cGFyYT5Gb3Igc29tZXRoaW5nIGZhc3RlciBhbmQgbGlnaHRlciBzdGlsbCwgeW91IG1pZ2h0IHRyeSBNYXJrdXMgRgotWCBKIE9iZXJodW1lcidzIDxjb21wdXRlcm91dHB1dD5MWk88L2NvbXB1dGVyb3V0cHV0PiByZWFsLXRpbWUKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeSwgYXQgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZSI+aHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2U8L3VsaW5rPi48L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLQotCi08c2VjdDEgaWQ9InJlYWRpbmciIHhyZWZsYWJlbD0iRnVydGhlciBSZWFkaW5nIj4KLTx0aXRsZT5GdXJ0aGVyIFJlYWRpbmc8L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpcyBub3QgcmVzZWFyY2gKLXdvcmssIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJ3QgcHJlc2VudCBhbnkgbmV3IGlkZWFzLgotUmF0aGVyLCBpdCdzIGFuIGVuZ2luZWVyaW5nIGV4ZXJjaXNlIGJhc2VkIG9uIGV4aXN0aW5nCi1pZGVhcy48L3BhcmE+Ci0KLTxwYXJhPkZvdXIgZG9jdW1lbnRzIGRlc2NyaWJlIGVzc2VudGlhbGx5IGFsbCB0aGUgaWRlYXMgYmVoaW5kCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxsaXRlcmFsbGF5b3V0Pk1pY2hhZWwgQnVycm93cyBhbmQgRC4gSi4gV2hlZWxlcjoKLSAgIkEgYmxvY2stc29ydGluZyBsb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKLSAgIDEwdGggTWF5IDE5OTQuIAotICAgRGlnaXRhbCBTUkMgUmVzZWFyY2ggUmVwb3J0IDEyNC4KLSAgIGZ0cDovL2Z0cC5kaWdpdGFsLmNvbS9wdWIvREVDL1NSQy9yZXNlYXJjaC1yZXBvcnRzL1NSQy0xMjQucHMuZ3oKLSAgIElmIHlvdSBoYXZlIHRyb3VibGUgZmluZGluZyBpdCwgdHJ5IHNlYXJjaGluZyBhdCB0aGUKLSAgIE5ldyBaZWFsYW5kIERpZ2l0YWwgTGlicmFyeSwgaHR0cDovL3d3dy5uemRsLm9yZy4KLQotRGFuaWVsIFMuIEhpcnNjaGJlcmcgYW5kIERlYnJhIEEuIExlTGV3ZXIKLSAgIkVmZmljaWVudCBEZWNvZGluZyBvZiBQcmVmaXggQ29kZXMiCi0gICBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLCBBcHJpbCAxOTkwLCBWb2wgMzMsIE51bWJlciA0LgotICAgWW91IG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGFuIGVsZWN0cm9uaWMgY29weSBvZiB0aGlzCi0gICBmcm9tIHRoZSBBQ00gRGlnaXRhbCBMaWJyYXJ5LgotCi1EYXZpZCBKLiBXaGVlbGVyCi0gICBQcm9ncmFtIGJyZWQzLmMgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudCBicmVkMy5wcy4KLSAgIFRoaXMgY29udGFpbnMgdGhlIGlkZWEgYmVoaW5kIHRoZSBtdWx0aS10YWJsZSBIdWZmbWFuIGNvZGluZyBzY2hlbWUuCi0gICBmdHA6Ly9mdHAuY2wuY2FtLmFjLnVrL3VzZXJzL2RqdzMvCi0KLUpvbiBMLiBCZW50bGV5IGFuZCBSb2JlcnQgU2VkZ2V3aWNrCi0gICJGYXN0IEFsZ29yaXRobXMgZm9yIFNvcnRpbmcgYW5kIFNlYXJjaGluZyBTdHJpbmdzIgotICAgQXZhaWxhYmxlIGZyb20gU2VkZ2V3aWNrJ3Mgd2ViIHBhZ2UsCi0gICB3d3cuY3MucHJpbmNldG9uLmVkdS9+cnMKLTwvbGl0ZXJhbGxheW91dD4KLQotPHBhcmE+VGhlIGZvbGxvd2luZyBwYXBlciBnaXZlcyB2YWx1YWJsZSBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8KLXRoZSBhbGdvcml0aG0sIGJ1dCBpcyBub3QgaW1tZWRpYXRlbHkgdGhlIGJhc2lzIG9mIGFueSBjb2RlIHVzZWQKLWluIGJ6aXAyLjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+UGV0ZXIgRmVud2ljazoKLSAgIEJsb2NrIFNvcnRpbmcgVGV4dCBDb21wcmVzc2lvbgotICAgUHJvY2VlZGluZ3Mgb2YgdGhlIDE5dGggQXVzdHJhbGFzaWFuIENvbXB1dGVyIFNjaWVuY2UgQ29uZmVyZW5jZSwKLSAgICAgTWVsYm91cm5lLCBBdXN0cmFsaWEuICBKYW4gMzEgLSBGZWIgMiwgMTk5Ni4KLSAgIGZ0cDovL2Z0cC5jcy5hdWNrbGFuZC5hYy5uei9wdWIvcGV0ZXItZi9BQ1NDOTZwYXBlci5wczwvbGl0ZXJhbGxheW91dD4KLQotPHBhcmE+S3VuaWhpa28gU2FkYWthbmUncyBzb3J0aW5nIGFsZ29yaXRobSwgbWVudGlvbmVkIGFib3ZlLCBpcwotYXZhaWxhYmxlIGZyb206PC9wYXJhPgotCi08bGl0ZXJhbGxheW91dD5odHRwOi8vbmFvbWkuaXMucy51LXRva3lvLmFjLmpwL35zYWRhL3BhcGVycy9TYWRhOThiLnBzLmd6Ci08L2xpdGVyYWxsYXlvdXQ+Ci0KLTxwYXJhPlRoZSBNYW5iZXItTXllcnMgc3VmZml4IGFycmF5IGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gaXMKLWRlc2NyaWJlZCBpbiBhIHBhcGVyIGF2YWlsYWJsZSBmcm9tOjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+aHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9wZW9wbGUvZ2VuZS9QQVBFUlMvc3VmZml4LnBzCi08L2xpdGVyYWxsYXlvdXQ+Ci0KLTxwYXJhPkZpbmFsbHksIHRoZSBmb2xsb3dpbmcgcGFwZXJzIGRvY3VtZW50IHNvbWUKLWludmVzdGlnYXRpb25zIEkgbWFkZSBpbnRvIHRoZSBwZXJmb3JtYW5jZSBvZiBzb3J0aW5nCi1hbmQgZGVjb21wcmVzc2lvbiBhbGdvcml0aG1zOjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+SnVsaWFuIFNld2FyZAotICAgT24gdGhlIFBlcmZvcm1hbmNlIG9mIEJXVCBTb3J0aW5nIEFsZ29yaXRobXMKLSAgIFByb2NlZWRpbmdzIG9mIHRoZSBJRUVFIERhdGEgQ29tcHJlc3Npb24gQ29uZmVyZW5jZSAyMDAwCi0gICAgIFNub3diaXJkLCBVdGFoLiAgMjgtMzAgTWFyY2ggMjAwMC4KLQotSnVsaWFuIFNld2FyZAotICAgU3BhY2UtdGltZSBUcmFkZW9mZnMgaW4gdGhlIEludmVyc2UgQi1XIFRyYW5zZm9ybQotICAgUHJvY2VlZGluZ3Mgb2YgdGhlIElFRUUgRGF0YSBDb21wcmVzc2lvbiBDb25mZXJlbmNlIDIwMDEKLSAgICAgU25vd2JpcmQsIFV0YWguICAyNy0yOSBNYXJjaCAyMDAxLgotPC9saXRlcmFsbGF5b3V0PgotCi08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL21rMjUxLmMgYi9VdGlsaXRpZXMvY21iemlwMi9tazI1MS5jCmluZGV4IDM5ZTk0YzAuLjZjNWJiZjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL21rMjUxLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvbWsyNTEuYwpAQCAtOSw4ICs5LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3JhbmR0YWJsZS5jIGIvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMKaW5kZXggMDY4Yjc2My4uYmRjNmQ0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJiMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmIyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWRkYTM2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmIyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS5yZWYgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM4NjllZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJlZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEudHN0IGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS50c3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjODY5ZWUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS50c3QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJiMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmIyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTU0Mjk3Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmIyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi5yZWYgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlNWI1OC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJlZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIudHN0IGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi50c3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZTViNTguLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi50c3QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJiMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmIyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzliMDhjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmIyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMy5yZWYgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc1YTJmNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJlZgorKysgL2Rldi9udWxsCkBAIC0xLDMwMDA3ICswLDAgQEAKLVRoaXMgZmlsZSBpcyBleGNlZWRpbmdseSBib3JpbmcuICBJZiB5b3UgZmluZCB5b3Vyc2VsZgotcmVhZGluZyBpdCwgcGxlYXNlICgxKSB0YWtlIGl0IGZyb20gbWUgdGhhdCB5b3UgY2FuIHNhZmVseQotZ3Vlc3Mgd2hhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBzYXlzLCBhbmQgKDIpIHNlZWsgcHJvZmVzc2lvbmFsCi1oZWxwLgotCi1wcy4gIHRoZXJlIGFyZSBubyBmdXJ0aGVyIHNhcmNhc3RpYyByZW1hcmtzIGluIHRoaXMgZmlsZS4KLQotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMy50c3QgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnRzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc1YTJmNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnRzdAorKysgL2Rldi9udWxsCkBAIC0xLDMwMDA3ICswLDAgQEAKLVRoaXMgZmlsZSBpcyBleGNlZWRpbmdseSBib3JpbmcuICBJZiB5b3UgZmluZCB5b3Vyc2VsZgotcmVhZGluZyBpdCwgcGxlYXNlICgxKSB0YWtlIGl0IGZyb20gbWUgdGhhdCB5b3UgY2FuIHNhZmVseQotZ3Vlc3Mgd2hhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBzYXlzLCBhbmQgKDIpIHNlZWsgcHJvZmVzc2lvbmFsCi1oZWxwLgotCi1wcy4gIHRoZXJlIGFyZSBubyBmdXJ0aGVyIHNhcmNhc3RpYyByZW1hcmtzIGluIHRoaXMgZmlsZS4KLQotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc3Bld0cuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL3NwZXdHLmMKaW5kZXggN2JkMTI4NC4uNjVkMjRjOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc3Bld0cuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9zcGV3Ry5jCkBAIC0xMywxNSArMTMsMTUgQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KIAogICAgVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKICAgIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCiAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi91bnpjcmFzaC5jIGIvVXRpbGl0aWVzL2NtYnppcDIvdW56Y3Jhc2guYwppbmRleCBhMWI3NTQ2Li5jNjhmOTNjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi91bnpjcmFzaC5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL3VuemNyYXNoLmMKQEAgLTE3LDggKzE3LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMCBiL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmNDQyYS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczAKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotSWYgY29tcGlsYXRpb24gcHJvZHVjZXMgZXJyb3JzLCBvciBhIGxhcmdlIG51bWJlciBvZiB3YXJuaW5ncywKLXBsZWFzZSByZWFkIFJFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUyAtLSB5b3UgbWlnaHQgYmUgYWJsZSB0bwotYWRqdXN0IHRoZSBmbGFncyBpbiB0aGlzIE1ha2VmaWxlIHRvIGltcHJvdmUgbWF0dGVycy4KLQotQWxzbyBpbiBSRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMgYXJlIHNvbWUgaGludHMgdGhhdCBtYXkgaGVscAotaWYgeW91ciBidWlsZCBwcm9kdWNlcyBhbiBleGVjdXRhYmxlIHdoaWNoIGlzIHVuYWJsZSB0byBjb3JyZWN0bHkKLWhhbmRsZSBzby1jYWxsZWQgJ2xhcmdlIGZpbGVzJyAtLSBmaWxlcyBvZiBzaXplIDJHQiBvciBtb3JlLgotCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczEgYi9VdGlsaXRpZXMvY21iemlwMi93b3JkczEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODNkZTkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMxCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLURvaW5nIDYgdGVzdHMgKDMgY29tcHJlc3MsIDMgdW5jb21wcmVzcykgLi4uCi1JZiB0aGVyZSdzIGEgcHJvYmxlbSwgdGhpbmdzIG1pZ2h0IHN0b3AgYXQgdGhpcyBwb2ludC4KLSAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FkZGNmNC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLQotQ2hlY2tpbmcgdGVzdCByZXN1bHRzLiAgSWYgYW55IG9mIHRoZSBmb3VyICJjbXAicyB3aGljaCBmb2xsb3cKLXJlcG9ydCBhbnkgZGlmZmVyZW5jZXMsIHNvbWV0aGluZyBpcyB3cm9uZy4gIElmIHlvdSBjYW4ndCBlYXNpbHkKLWZpZ3VyZSBvdXQgd2hhdCwgcGxlYXNlIGxldCBtZSBrbm93IChqc2V3YXJkQGJ6aXAub3JnKS4KLQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMzIGIvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTcyNjY5Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotSWYgeW91IGdvdCB0aGlzIGZhciBhbmQgdGhlICdjbXAncyBkaWRuJ3QgY29tcGxhaW4sIGl0IGxvb2tzCi1saWtlIHlvdSdyZSBpbiBidXNpbmVzcy4gIAotCi1UbyBpbnN0YWxsIGluIC91c3IvbG9jYWwvYmluLCAvdXNyL2xvY2FsL2xpYiwgL3Vzci9sb2NhbC9tYW4gYW5kIAotL3Vzci9sb2NhbC9pbmNsdWRlLCB0eXBlCi0KLSAgIG1ha2UgaW5zdGFsbAotCi1UbyBpbnN0YWxsIHNvbWV3aGVyZSBlbHNlLCBlZywgL3h4eC95eXkve2JpbixsaWIsbWFuLGluY2x1ZGV9LCB0eXBlIAotCi0gICBtYWtlIGluc3RhbGwgUFJFRklYPS94eHgveXl5Ci0KLUlmIHlvdSBhcmUgKGp1c3RpZmlhYmx5KSBwYXJhbm9pZCBhbmQgd2FudCB0byBzZWUgd2hhdCAnbWFrZSBpbnN0YWxsJwotaXMgZ29pbmcgdG8gZG8sIHlvdSBjYW4gZmlyc3QgZG8KLQotICAgbWFrZSAtbiBpbnN0YWxsICAgICAgICAgICAgICAgICAgICAgIG9yCi0gICBtYWtlIC1uIGluc3RhbGwgUFJFRklYPS94eHgveXl5ICAgICAgcmVzcGVjdGl2ZWx5LgotCi1UaGUgLW4gaW5zdHJ1Y3RzIG1ha2UgdG8gc2hvdyB0aGUgY29tbWFuZHMgaXQgd291bGQgZXhlY3V0ZSwgYnV0Ci1ub3QgYWN0dWFsbHkgZXhlY3V0ZSB0aGVtLgotCi1JbnN0cnVjdGlvbnMgZm9yIHVzZSBhcmUgaW4gdGhlIHByZWZvcm1hdHRlZCBtYW51YWwgcGFnZSwgaW4gdGhlIGZpbGUKLWJ6aXAyLnR4dC4gIEZvciBtb3JlIGRldGFpbGVkIGRvY3VtZW50YXRpb24sIHJlYWQgdGhlIGZ1bGwgbWFudWFsLiAgCi1JdCBpcyBhdmFpbGFibGUgaW4gUG9zdHNjcmlwdCBmb3JtIChtYW51YWwucHMpLCBQREYgZm9ybSAobWFudWFsLnBkZiksCi1hbmQgSFRNTCBmb3JtIChtYW51YWwuaHRtbCkuCi0KLVlvdSBjYW4gYWxzbyBkbyAiYnppcDIgLS1oZWxwIiB0byBzZWUgc29tZSBoZWxwZnVsIGluZm9ybWF0aW9uLiAKLSJiemlwMiAtTCIgZGlzcGxheXMgdGhlIHNvZnR3YXJlIGxpY2Vuc2UuCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3htbHByb2Muc2ggYi9VdGlsaXRpZXMvY21iemlwMi94bWxwcm9jLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1Mzg0MTc3Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3htbHByb2Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotIyEvYmluL2Jhc2gKLSMgc2VlIHRoZSBSRUFETUUgZmlsZSBmb3IgdXNhZ2UgZXRjLgotIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCi0jICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotIwotIyAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0jICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotIwotIyAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIyAgUkVBRE1FIGZpbGUuCi0jCi0jICBUaGlzIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5lZAotIyAgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLXVzYWdlKCkgewotICBlY2hvICcnOwotICBlY2hvICdVc2FnZTogeG1scHJvYy5zaCAtW29wdGlvbl0gPGZpbGVuYW1lLnhtbD4nOwotICBlY2hvICdTcGVjaWZ5IGEgdGFyZ2V0IGZyb206JzsKLSAgZWNobyAnLXYgICAgICB2ZXJpZnkgeG1sIGZpbGUgY29uZm9ybXMgdG8gZHRkJzsKLSAgZWNobyAnLWh0bWwgICBvdXRwdXQgaW4gaHRtbCBmb3JtYXQgKHNpbmdsZSBmaWxlKSc7Ci0gIGVjaG8gJy1wcyAgICAgb3V0cHV0IGluIHBvc3RzY3JpcHQgZm9ybWF0JzsKLSAgZWNobyAnLXBkZiAgICBvdXRwdXQgaW4gcGRmIGZvcm1hdCc7Ci0gIGV4aXQ7Ci19Ci0KLWlmIHRlc3QgJCMgLW5lIDI7IHRoZW4KLSAgdXNhZ2UKLWZpCi0jIGFzc2lnbiB0aGUgdmFyaWFibGUgZm9yIHRoZSBvdXRwdXQgdHlwZQotYWN0aW9uPSQxOyBzaGlmdAotIyBhc3NpZ24gdGhlIG91dHB1dCBmaWxlbmFtZQoteG1sZmlsZT0kMTsgc2hpZnQKLSMgYW5kIGNoZWNrIHVzZXIgaW5wdXQgaXQgY29ycmVjdAotaWYgISh0ZXN0IC1mICR4bWxmaWxlKTsgdGhlbgotICBlY2hvICJObyBzdWNoIGZpbGU6ICR4bWxmaWxlIjsKLSAgZXhpdDsKLWZpCi0jIHNvbWUgb3RoZXIgc3R1ZmYgd2Ugd2lsbCB1c2UKLU9VVD1vdXRwdXQKLXhzbF9mbz1iei1mby54c2wKLXhzbF9odG1sPWJ6LWh0bWwueHNsCi0KLWJhc2VuYW1lPSR4bWxmaWxlCi1iYXNlbmFtZT0ke2Jhc2VuYW1lLy8nLnhtbCcvJyd9Ci0KLWZvZmlsZT0iJHtiYXNlbmFtZX0uZm8iCi1odG1sZmlsZT0iJHtiYXNlbmFtZX0uaHRtbCIKLXBkZmZpbGU9IiR7YmFzZW5hbWV9LnBkZiIKLXBzZmlsZT0iJHtiYXNlbmFtZX0ucHMiCi14bWxmbXRmaWxlPSIke2Jhc2VuYW1lfS5mbXQiCi0KLSMgZmlyc3QgcHJvY2VzcyB0aGUgeG1sZmlsZSB3aXRoIENEQVRBIHRhZ3MKLS4vZm9ybWF0LnBsICR4bWxmaWxlICR4bWxmbXRmaWxlCi0jIHNvIHRoZSBzaGVsbCBrbm93cyB3aGVyZSB0aGUgY2F0YWxvZ3MgbGl2ZQotZXhwb3J0IFhNTF9DQVRBTE9HX0ZJTEVTPS9ldGMveG1sL2NhdGFsb2cKLQotIyBwb3N0LXByb2Nlc3NpbmcgdGlkeSB1cAotY2xlYW51cCgpIHsKLSAgZWNobyAiQ2xlYW5pbmcgdXA6ICRAIiAKLSAgd2hpbGUgWyAkIyAhPSAwIF0KLSAgZG8KLSAgICBhcmc9JDE7IHNoaWZ0OwotICAgIGVjaG8gIiAgZGVsZXRpbmcgJGFyZyI7Ci0gICAgcm0gJGFyZwotICBkb25lCi19Ci0KLWNhc2UgJGFjdGlvbiBpbgotICAtdikKLSAgIGZsYWdzPSctLW5vb3V0IC0teGluY2x1ZGUgLS1ub2JsYW5rcyAtLXBvc3R2YWxpZCcKLSAgIGR0ZD0nLS1kdGR2YWxpZCBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQnCi0gICB4bWxsaW50ICRmbGFncyAkZHRkICR4bWxmbXRmaWxlIDI+ICRPVVQgCi0gICBlZ3JlcCAnZXJyb3InICRPVVQgCi0gICBybSAkT1VUCi0gIDs7Ci0KLSAgLWh0bWwpCi0gICBlY2hvICJDcmVhdGluZyAkaHRtbGZpbGUgLi4uIgotICAgeHNsdHByb2MgLS1ub25ldCAtLXhpbmNsdWRlICAtbyAkaHRtbGZpbGUgJHhzbF9odG1sICR4bWxmbXRmaWxlCi0gICBjbGVhbnVwICR4bWxmbXRmaWxlCi0gIDs7Ci0KLSAgLXBkZikKLSAgIGVjaG8gIkNyZWF0aW5nICRwZGZmaWxlIC4uLiIKLSAgIHhzbHRwcm9jIC0tbm9uZXQgLS14aW5jbHVkZSAtbyAkZm9maWxlICR4c2xfZm8gJHhtbGZtdGZpbGUKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIGNsZWFudXAgJE9VVCAkeG1sZm10ZmlsZSAqLmF1eCAqLmZvICoubG9nICoub3V0Ci0gIDs7Ci0KLSAgLXBzKQotICAgZWNobyAiQ3JlYXRpbmcgJHBzZmlsZSAuLi4iCi0gICB4c2x0cHJvYyAtLW5vbmV0IC0teGluY2x1ZGUgLW8gJGZvZmlsZSAkeHNsX2ZvICR4bWxmbXRmaWxlCi0gICBwZGZ4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0gICBwZGZ4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0gICBwZGZ4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0gICBwZGZ0b3BzICRwZGZmaWxlICRwc2ZpbGUKLSAgIGNsZWFudXAgJE9VVCAkeG1sZm10ZmlsZSAkcGRmZmlsZSAqLmF1eCAqLmZvICoubG9nICoub3V0Ci0jICBwYXNzaXZldGV4IGlzIGJyb2tlbiwgc28gd2UgY2FuJ3QgZ28gdGhpcyByb3V0ZSB5ZXQuCi0jICAgeG1sdGV4ICRmb2ZpbGUgPiRPVVQgPC9kZXYvbnVsbAotIyAgIHhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSMgICB4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0jICAgZHZpcHMgLVIgLXEgLW8gYnppcC1tYW51YWwucHMgKi5kdmkKLSAgOzsKLQotICAqKQotICB1c2FnZQotICA7OwotZXNhYwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsU3ltYm9sSGlkaW5nLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsU3ltYm9sSGlkaW5nLmNtYWtlCmluZGV4IDYwZWU4ZTYuLjhlNWZkNjcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFN5bWJvbEhpZGluZy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxTeW1ib2xIaWRpbmcuY21ha2UKQEAgLTExLDEzICsxMSw3IEBACiAgICAgc2V0KF9TWU1CT0xfRVhURVJOICJfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKFwiZGVmYXVsdFwiKSkpIikKICAgICBzZXQoX0NGTEFHX1NZTUJPTFNfSElERSAiLWZ2aXNpYmlsaXR5PWhpZGRlbiIpCiAgIGVsc2VpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKLSAgICBpZihOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi44LjEwKQotICAgICAgc2V0KEdDQ19WRVJTSU9OICR7Q01BS0VfQ19DT01QSUxFUl9WRVJTSU9OfSkKLSAgICBlbHNlKCkKLSAgICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ19DT01QSUxFUn0gLWR1bXB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIEdDQ19WRVJTSU9OKQotICAgIGVuZGlmKCkKLSAgICBpZihOT1QgR0NDX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNCkKKyAgICBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjQpCiAgICAgICAjIG5vdGU6IHRoaXMgaXMgY29uc2lkZXJlZCBidWdneSBwcmlvciB0byA0LjAgYnV0IHRoZSBhdXRvdG9vbHMgZG9uJ3QgY2FyZSwgc28gbGV0J3MgaWdub3JlIHRoYXQgZmFjdAogICAgICAgc2V0KFNVUFBPUlRTX1NZTUJPTF9ISURJTkcgVFJVRSkKICAgICAgIHNldChfU1lNQk9MX0VYVEVSTiAiX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fIChcImRlZmF1bHRcIikpKSIpCkBAIC0yOSw3ICsyMyw3IEBACiAgICAgc2V0KF9DRkxBR19TWU1CT0xTX0hJREUgIi14bGRzY29wZT1oaWRkZW4iKQogICBlbHNlaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJJbnRlbCIgQU5EIE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDkuMCkKICAgICAjIG5vdGU6IHRoaXMgc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hlY2sgZm9yIHZlcnNpb24gOS4xLjA0NSBidXQgSSdtIG5vdCAxMDAlIHN1cmUKLSAgICAjICAgICAgIHNvIGxldCdzIHRvIGl0IHRoZSBzYW1lIHdheSBhdXRvdG9vbHMgZG8uCisgICAgIyAgICAgICBzbyBsZXQncyBkbyBpdCB0aGUgc2FtZSB3YXkgYXV0b3Rvb2xzIGRvLgogICAgIHNldChTVVBQT1JUU19TWU1CT0xfSElESU5HIFRSVUUpCiAgICAgc2V0KF9TWU1CT0xfRVhURVJOICJfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKFwiZGVmYXVsdFwiKSkpIikKICAgICBzZXQoX0NGTEFHX1NZTUJPTFNfSElERSAiLWZ2aXNpYmlsaXR5PWhpZGRlbiIpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxUZXN0cy5jIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsVGVzdHMuYwppbmRleCAwN2I1MTZiLi4zZWYzNWYwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxUZXN0cy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFRlc3RzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEyNSw2ICsxMjUsNyBAQAogI2lmICAgZGVmaW5lZChIQVZFX0dFVEhPU1RCWUFERFJfUl81KSB8fCBcCiAgICAgICBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZQUREUl9SXzVfUkVFTlRSQU5UKQogICByYyA9IGdldGhvc3RieWFkZHJfcihhZGRyZXNzLCBsZW5ndGgsIHR5cGUsICZoLCAmaGRhdGEpOworICAodm9pZClyYzsKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllBRERSX1JfNykgfHwgXAogICAgICAgZGVmaW5lZChIQVZFX0dFVEhPU1RCWUFERFJfUl83X1JFRU5UUkFOVCkKICAgaHAgPSBnZXRob3N0YnlhZGRyX3IoYWRkcmVzcywgbGVuZ3RoLCB0eXBlLCAmaCwgYnVmZmVyLCA4MTkyLCAmaF9lcnJub3ApOwpAQCAtMTMyLDYgKzEzMyw3IEBACiAjZWxpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZQUREUl9SXzgpIHx8IFwKICAgICAgIGRlZmluZWQoSEFWRV9HRVRIT1NUQllBRERSX1JfOF9SRUVOVFJBTlQpCiAgIHJjID0gZ2V0aG9zdGJ5YWRkcl9yKGFkZHJlc3MsIGxlbmd0aCwgdHlwZSwgJmgsIGJ1ZmZlciwgODE5MiwgJmhwLCAmaF9lcnJub3ApOworICAodm9pZClyYzsKICNlbmRpZgogCiAjaWYgICBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMpIHx8IFwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEJlYXJTU0wuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRCZWFyU1NMLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZDIzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRCZWFyU1NMLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorZmluZF9wYXRoKEJFQVJTU0xfSU5DTFVERV9ESVJTIGJlYXJzc2wuaCkKKworZmluZF9saWJyYXJ5KEJFQVJTU0xfTElCUkFSWSBiZWFyc3NsKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEJFQVJTU0wgREVGQVVMVF9NU0cKKyAgICBCRUFSU1NMX0lOQ0xVREVfRElSUyBCRUFSU1NMX0xJQlJBUlkpCisKK21hcmtfYXNfYWR2YW5jZWQoQkVBUlNTTF9JTkNMVURFX0RJUlMgQkVBUlNTTF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQ0FSRVMuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRDQVJFUy5jbWFrZQppbmRleCA3MjMwNDRhLi4zZDFiYWU2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRDQVJFUy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRDQVJFUy5jbWFrZQpAQCAtNywzNCArNywxNiBAQAogIyBhbHNvIGRlZmluZWQsIGJ1dCBub3QgZm9yIGdlbmVyYWwgdXNlIGFyZQogIyBDQVJFU19MSUJSQVJZLCB3aGVyZSB0byBmaW5kIHRoZSBjLWFyZXMgbGlicmFyeS4KIAotZmluZF9wYXRoKENBUkVTX0lOQ0xVREVfRElSIGFyZXMuaAotICAvdXNyL2xvY2FsL2luY2x1ZGUKLSAgL3Vzci9pbmNsdWRlCi0gICkKK2ZpbmRfcGF0aChDQVJFU19JTkNMVURFX0RJUiBhcmVzLmgpCiAKIHNldChDQVJFU19OQU1FUyAke0NBUkVTX05BTUVTfSBjYXJlcykKIGZpbmRfbGlicmFyeShDQVJFU19MSUJSQVJZCiAgIE5BTUVTICR7Q0FSRVNfTkFNRVN9Ci0gIFBBVEhTIC91c3IvbGliIC91c3IvbG9jYWwvbGliCiAgICkKIAotaWYoQ0FSRVNfTElCUkFSWSBBTkQgQ0FSRVNfSU5DTFVERV9ESVIpCi0gIHNldChDQVJFU19MSUJSQVJJRVMgJHtDQVJFU19MSUJSQVJZfSkKLSAgc2V0KENBUkVTX0ZPVU5EICJZRVMiKQotZWxzZSgpCi0gIHNldChDQVJFU19GT1VORCAiTk8iKQotZW5kaWYoKQotCi0KLWlmKENBUkVTX0ZPVU5EKQotICBpZihOT1QgQ0FSRVNfRklORF9RVUlFVExZKQotICAgIG1lc3NhZ2UoU1RBVFVTICJGb3VuZCBjLWFyZXM6ICR7Q0FSRVNfTElCUkFSSUVTfSIpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBpZihDQVJFU19GSU5EX1JFUVVJUkVEKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIGMtYXJlcyBsaWJyYXJ5IikKLSAgZW5kaWYoKQotZW5kaWYoKQoraW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhDQVJFUworICAgIFJFUVVJUkVEX1ZBUlMgQ0FSRVNfTElCUkFSWSBDQVJFU19JTkNMVURFX0RJUikKIAogbWFya19hc19hZHZhbmNlZCgKICAgQ0FSRVNfTElCUkFSWQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kR1NTLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kR1NTLmNtYWtlCmluZGV4IDhhMjhmMmYuLmEyZjE1MGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEdTUy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRHU1MuY21ha2UKQEAgLTYyLDYgKzYyLDcgQEAKICAgICAgICAgICBDT01NQU5EICR7X0dTU19DT05GSUdVUkVfU0NSSVBUfSAiLS1jZmxhZ3MiICJnc3NhcGkiCiAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9HU1NfQ0ZMQUdTCiAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9HU1NfQ09ORklHVVJFX0ZBSUxFRAorICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiAgICAgICApCiAgICAgbWVzc2FnZShTVEFUVVMgIkNGTEFHUzogJHtfR1NTX0NGTEFHU30iKQogICAgIGlmKE5PVCBfR1NTX0NPTkZJR1VSRV9GQUlMRUQpICMgMCBtZWFucyBzdWNjZXNzCkBAIC04NCw2ICs4NSw3IEBACiAgICAgICAgIENPTU1BTkQgJHtfR1NTX0NPTkZJR1VSRV9TQ1JJUFR9ICItLWxpYnMiICJnc3NhcGkiCiAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfR1NTX0xJQl9GTEFHUwogICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX0dTU19DT05GSUdVUkVfRkFJTEVECisgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiAgICAgKQogICAgIG1lc3NhZ2UoU1RBVFVTICJMREZMQUdTOiAke19HU1NfTElCX0ZMQUdTfSIpCiAKQEAgLTExMCw2ICsxMTIsNyBAQAogICAgICAgICBDT01NQU5EICR7X0dTU19DT05GSUdVUkVfU0NSSVBUfSAiLS12ZXJzaW9uIgogICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX0dTU19WRVJTSU9OCiAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfR1NTX0NPTkZJR1VSRV9GQUlMRUQKKyAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKICAgICApCiAKICAgICAjIG9sZGVyIHZlcnNpb25zIG1heSBub3QgaGF2ZSB0aGUgIi0tdmVyc2lvbiIgcGFyYW1ldGVyLiBJbiB0aGlzIGNhc2Ugd2UganVzdCBkb24ndCBjYXJlLgpAQCAtMTIxLDYgKzEyNCw3IEBACiAgICAgICAgIENPTU1BTkQgJHtfR1NTX0NPTkZJR1VSRV9TQ1JJUFR9ICItLXZlbmRvciIKICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9HU1NfVkVORE9SCiAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfR1NTX0NPTkZJR1VSRV9GQUlMRUQKKyAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKICAgICApCiAKICAgICAjIG9sZGVyIHZlcnNpb25zIG1heSBub3QgaGF2ZSB0aGUgIi0tdmVuZG9yIiBwYXJhbWV0ZXIuIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGRvbid0IGNhcmUuCkBAIC0xMzQsNyArMTM4LDcgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAKLSAgZWxzZSgpICMgZWl0aGVyIHRoZXJlIGlzIG5vIGNvbmZpZyBzY3JpcHQgb3Igd2UgYXJlIG9uIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBwcm92aWRlIG9uZSAoV2luZG93cz8pCisgIGVsc2UoKSAjIGVpdGhlciB0aGVyZSBpcyBubyBjb25maWcgc2NyaXB0IG9yIHdlIGFyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBwcm92aWRlIG9uZSAoV2luZG93cz8pCiAKICAgICBmaW5kX3BhdGgoX0dTU19JTkNMVURFX0RJUgogICAgICAgICBOQU1FUwpAQCAtMTY0LDcgKzE2OCw3IEBACiAgICAgICAgIHNldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAiIikKICAgICAgIGVuZGlmKCkKICAgICBlbHNlKCkKLSAgICAgICMgSSdtIG5vdCBjb252aWVuY2VkIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHdheSBidXQgdGhpcyBpcyB3aGF0IGF1dG90b29scyBkbyBhdCB0aGUgbW9tZW50CisgICAgICAjIEknbSBub3QgY29udmluY2VkIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHdheSBidXQgdGhpcyBpcyB3aGF0IGF1dG90b29scyBkbyBhdCB0aGUgbW9tZW50CiAgICAgICBmaW5kX3BhdGgoX0dTU19JTkNMVURFX0RJUgogICAgICAgICAgIE5BTUVTCiAgICAgICAgICAgICAgICJnc3NhcGkuaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZExpYlNTSDIuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRMaWJTU0gyLmNtYWtlCmluZGV4IDg0ODIyZGIuLjkxZTE3YzEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZExpYlNTSDIuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTGliU1NIMi5jbWFrZQpAQCAtNSwzMSArNSwxOCBAQAogIyBMSUJTU0gyX0lOQ0xVREVfRElSIC0gdGhlIGxpYnNzaDIgaW5jbHVkZSBkaXJlY3RvcnkKICMgTElCU1NIMl9MSUJSQVJZIC0gdGhlIGxpYnNzaDIgbGlicmFyeSBuYW1lCiAKLWlmKExJQlNTSDJfSU5DTFVERV9ESVIgQU5EIExJQlNTSDJfTElCUkFSWSkKLSAgc2V0KExpYlNTSDJfRklORF9RVUlFVExZIFRSVUUpCi1lbmRpZigpCitmaW5kX3BhdGgoTElCU1NIMl9JTkNMVURFX0RJUiBsaWJzc2gyLmgpCiAKLWZpbmRfcGF0aChMSUJTU0gyX0lOQ0xVREVfRElSIGxpYnNzaDIuaAotKQotCi1maW5kX2xpYnJhcnkoTElCU1NIMl9MSUJSQVJZIE5BTUVTIHNzaDIKLSkKK2ZpbmRfbGlicmFyeShMSUJTU0gyX0xJQlJBUlkgTkFNRVMgc3NoMiBsaWJzc2gyKQogCiBpZihMSUJTU0gyX0lOQ0xVREVfRElSKQotICBmaWxlKFNUUklOR1MgIiR7TElCU1NIMl9JTkNMVURFX0RJUn0vbGlic3NoMi5oIiBsaWJzc2gyX3ZlcnNpb25fc3RyIFJFR0VYICJeI2RlZmluZVtcdCBdK0xJQlNTSDJfVkVSU0lPTl9OVU1bXHQgXSsweFswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XS4qIikKLQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qTElCU1NIMl9WRVJTSU9OX05VTVtcdCBdKzB4KFswLTldWzAtOV0pLiokIiAiXFwxIiBMSUJTU0gyX1ZFUlNJT05fTUFKT1IgIiR7bGlic3NoMl92ZXJzaW9uX3N0cn0iKQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qTElCU1NIMl9WRVJTSU9OX05VTVtcdCBdKzB4WzAtOV1bMC05XShbMC05XVswLTldKS4qJCIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX01JTk9SICAiJHtsaWJzc2gyX3ZlcnNpb25fc3RyfSIpCi0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeLipMSUJTU0gyX1ZFUlNJT05fTlVNW1x0IF0rMHhbMC05XVswLTldWzAtOV1bMC05XShbMC05XVswLTldKS4qJCIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX1BBVENIICIke2xpYnNzaDJfdmVyc2lvbl9zdHJ9IikKLQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXjAoLispIiAiXFwxIiBMSUJTU0gyX1ZFUlNJT05fTUFKT1IgIiR7TElCU1NIMl9WRVJTSU9OX01BSk9SfSIpCi0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeMCguKykiICJcXDEiIExJQlNTSDJfVkVSU0lPTl9NSU5PUiAiJHtMSUJTU0gyX1ZFUlNJT05fTUlOT1J9IikKLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4wKC4rKSIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX1BBVENIICIke0xJQlNTSDJfVkVSU0lPTl9QQVRDSH0iKQotCi0gIHNldChMSUJTU0gyX1ZFUlNJT04gIiR7TElCU1NIMl9WRVJTSU9OX01BSk9SfS4ke0xJQlNTSDJfVkVSU0lPTl9NSU5PUn0uJHtMSUJTU0gyX1ZFUlNJT05fUEFUQ0h9IikKKyAgZmlsZShTVFJJTkdTICIke0xJQlNTSDJfSU5DTFVERV9ESVJ9L2xpYnNzaDIuaCIgbGlic3NoMl92ZXJzaW9uX3N0ciBSRUdFWCAiXiNkZWZpbmVbXHQgXStMSUJTU0gyX1ZFUlNJT05bXHQgXStcIiguKilcIiIpCisgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeLipcIihbXlwiXSspXCIiICJcXDEiICBMSUJTU0gyX1ZFUlNJT04gIiR7bGlic3NoMl92ZXJzaW9uX3N0cn0iKQogZW5kaWYoKQogCiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQotZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKExpYlNTSDIgREVGQVVMVF9NU0cgTElCU1NIMl9JTkNMVURFX0RJUiBMSUJTU0gyX0xJQlJBUlkgKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKExpYlNTSDIKKyAgICBSRVFVSVJFRF9WQVJTIExJQlNTSDJfTElCUkFSWSBMSUJTU0gyX0lOQ0xVREVfRElSCisgICAgVkVSU0lPTl9WQVIgTElCU1NIMl9WRVJTSU9OKQogCi1tYXJrX2FzX2FkdmFuY2VkKExJQlNTSDJfSU5DTFVERV9ESVIgTElCU1NIMl9MSUJSQVJZIExJQlNTSDJfVkVSU0lPTl9NQUpPUiBMSUJTU0gyX1ZFUlNJT05fTUlOT1IgTElCU1NIMl9WRVJTSU9OX1BBVENIIExJQlNTSDJfVkVSU0lPTikKK21hcmtfYXNfYWR2YW5jZWQoTElCU1NIMl9JTkNMVURFX0RJUiBMSUJTU0gyX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAyLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdIVFRQMi5jbWFrZQppbmRleCAzNDhiOTYxLi41MTM4ZTk5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAyLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HSFRUUDIuY21ha2UKQEAgLTEwLDkgKzEwLDkgQEAKICAgICBSRVFVSVJFRF9WQVJTCiAgICAgICBOR0hUVFAyX0xJQlJBUlkKICAgICAgIE5HSFRUUDJfSU5DTFVERV9ESVIKLSAgICBGQUlMX01FU1NBR0UKLSAgICAgICJDb3VsZCBOT1QgZmluZCBOR0hUVFAyIgogKQogCiBzZXQoTkdIVFRQMl9JTkNMVURFX0RJUlMgJHtOR0hUVFAyX0lOQ0xVREVfRElSfSkKIHNldChOR0hUVFAyX0xJQlJBUklFUyAke05HSFRUUDJfTElCUkFSWX0pCisKK21hcmtfYXNfYWR2YW5jZWQoTkdIVFRQMl9JTkNMVURFX0RJUlMgTkdIVFRQMl9MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROU1MuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROU1MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0M2NlOAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5TUy5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitpZihVTklYKQorICBmaW5kX3BhY2thZ2UoUGtnQ29uZmlnIFFVSUVUKQorICBwa2dfc2VhcmNoX21vZHVsZShQQ19OU1MgbnNzKQorZW5kaWYoKQoraWYoTk9UIFBDX05TU19GT1VORCkKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworc2V0KE5TU19MSUJSQVJJRVMgJHtQQ19OU1NfTElOS19MSUJSQVJJRVN9KQorc2V0KE5TU19JTkNMVURFX0RJUlMgJHtQQ19OU1NfSU5DTFVERV9ESVJTfSkKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhOU1MKKyAgICBSRVFVSVJFRF9WQVJTIE5TU19MSUJSQVJJRVMgTlNTX0lOQ0xVREVfRElSUworICAgIFZFUlNJT05fVkFSIFBDX05TU19WRVJTSU9OKQorCittYXJrX2FzX2FkdmFuY2VkKE5TU19JTkNMVURFX0RJUlMgTlNTX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvT3RoZXJUZXN0cy5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvT3RoZXJUZXN0cy5jbWFrZQppbmRleCBjMWM5YWEzLi44YjE1MDI5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL090aGVyVGVzdHMuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9PdGhlclRlc3RzLmNtYWtlCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcmV0dXJuIDA7CiB9IiBjdXJsX2N2X3JlY3YpCiBpZihjdXJsX2N2X3JlY3YpCi0gIGlmKE5PVCBERUZJTkVEIGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MgT1IgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKKyAgaWYoTk9UIERFRklORUQgY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBPUiBjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIFNUUkVRVUFMICJ1bmtub3duIikKICAgICBmb3JlYWNoKHJlY3ZfcmV0diAiaW50IiAic3NpemVfdCIgKQogICAgICAgZm9yZWFjaChyZWN2X2FyZzEgIlNPQ0tFVCIgImludCIgKQogICAgICAgICBmb3JlYWNoKHJlY3ZfYXJnMiAiY2hhciAqIiAidm9pZCAqIiApCkBAIC04MSw3ICs4MSw3IEBACiAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5bXixdKixbXixdKixbXixdKixbXixdKiwoW14sXSopJCIgIlxcMSIgUkVDVl9UWVBFX1JFVFYgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iKQogICBlbmRpZigpCiAKLSAgaWYoIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKKyAgaWYoY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBTVFJFUVVBTCAidW5rbm93biIpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgcmVjdiBhcmdzIikKICAgZW5kaWYoKQogZWxzZSgpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UKaW5kZXggMmRiZTFiYi4uNGM0YzYzYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9QbGF0Zm9ybXMvV2luZG93c0NhY2hlLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZQpAQCAtNyw3ICs3LDYgQEAKICAgICBzZXQoSEFWRV9MSUJOU0wgMCkKICAgICBzZXQoSEFWRV9HRVRIT1NUTkFNRSAxKQogICAgIHNldChIQVZFX0xJQlogMCkKLSAgICBzZXQoSEFWRV9MSUJDUllQVE8gMCkKIAogICAgIHNldChIQVZFX0RMT1BFTiAwKQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1V0aWxpdGllcy5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvVXRpbGl0aWVzLmNtYWtlCmluZGV4IDVjYjFkNDQuLmZmYzQxMWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvVXRpbGl0aWVzLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvVXRpbGl0aWVzLmNtYWtlCkBAIC0yLDEyICsyLDExIEBACiAKICMgUmV0dXJucyBhIGxpc3Qgb2YgYXJndW1lbnRzIHRoYXQgZXZhbHVhdGUgdG8gdHJ1ZQogZnVuY3Rpb24oY291bnRfdHJ1ZSBvdXRwdXRfY291bnRfdmFyKQotICBzZXQobHN0KQorICBzZXQobHN0X2xlbiAwKQogICBmb3JlYWNoKG9wdGlvbl92YXIgSU4gTElTVFMgQVJHTikKICAgICBpZigke29wdGlvbl92YXJ9KQotICAgICAgbGlzdChBUFBFTkQgbHN0ICR7b3B0aW9uX3Zhcn0pCisgICAgICBtYXRoKEVYUFIgbHN0X2xlbiAiJHtsc3RfbGVufSArIDEiKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi0gIGxpc3QoTEVOR1RIIGxzdCBsc3RfbGVuKQogICBzZXQoJHtvdXRwdXRfY291bnRfdmFyfSAke2xzdF9sZW59IFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvY21ha2VfdW5pbnN0YWxsLmNtYWtlLmluIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KaW5kZXggZGI4ZTUzNi4uNTE3OGZkOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KQEAgLTEzLDcgKzEzLDcgQEAKICAgbWVzc2FnZShTVEFUVVMgIlVuaW5zdGFsbGluZyAkRU5We0RFU1RESVJ9JHtmaWxlfSIpCiAgIGlmKElTX1NZTUxJTksgIiRFTlZ7REVTVERJUn0ke2ZpbGV9IiBPUiBFWElTVFMgIiRFTlZ7REVTVERJUn0ke2ZpbGV9IikKICAgICBleGVjX3Byb2dyYW0oCi0gICAgICAiQENNQUtFX0NPTU1BTkRAIiBBUkdTICItRSByZW1vdmUgXCIkRU5We0RFU1RESVJ9JHtmaWxlfVwiIgorICAgICAgIkBDTUFLRV9DT01NQU5EQCIgQVJHUyAiLUUgcm0gLWYgXCIkRU5We0RFU1RESVJ9JHtmaWxlfVwiIgogICAgICAgT1VUUFVUX1ZBUklBQkxFIHJtX291dAogICAgICAgUkVUVVJOX1ZBTFVFIHJtX3JldHZhbAogICAgICAgKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2VMaXN0cy50eHQKaW5kZXggYmM4YTdkYy4uNWM3MzJlZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZUxpc3RzLnR4dAorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlTGlzdHMudHh0CkBAIC0yNCwxMSArMjQsMTQgQEAKIHNldChDVVJMX0RJU0FCTEVfVEZUUCBPTiBDQUNIRSBJTlRFUk5BTCAiRGlzYWJsZSBjdXJsIHRmdHAgcHJvdG9jb2w/IikKIHNldChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTIE9GRiBDQUNIRSBJTlRFUk5BTCAiRG8gbm90IGRpc2FibGUgY3VybCB2ZXJib3NpdHkiKQogc2V0KENVUkxfSElEREVOX1NZTUJPTFMgT0ZGIENBQ0hFIElOVEVSTkFMICJObyBjdXJsIGhpZGRlbiBzeW1ib2xzIikKK3NldChDVVJMX0xUTyBPRkYgQ0FDSEUgSU5URVJOQUwgIlR1cm4gb24gY29tcGlsZXIgTGluayBUaW1lIE9wdGltaXphdGlvbnMiKQorc2V0KENVUkxfU1RBVElDX0NSVCBPRkYgQ0FDSEUgSU5URVJOQUwgIlNldCB0byBPTiB0byBidWlsZCBsaWJjdXJsIHdpdGggc3RhdGljIENSVCBvbiBXaW5kb3dzICgvTVQpLiIpCiBzZXQoQ1VSTF9XRVJST1IgT0ZGIENBQ0hFIElOVEVSTkFMICJUdXJuIGNvbXBpbGVyIHdhcm5pbmdzIGludG8gZXJyb3JzIikKIHNldChESVNBQkxFRF9USFJFQURTQUZFIE9GRiBDQUNIRSBJTlRFUk5BTCAiQ3VybCBjYW4gdXNlIHRocmVhZC1zYWZlIGZ1bmN0aW9ucyIpCiBzZXQoRU5BQkxFX0FSRVMgT0ZGIENBQ0hFIElOVEVSTkFMICJObyBjdXJsIGMtYXJlcyBzdXBwb3J0IikKIHNldChFTkFCTEVfQ1VSTERFQlVHIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBUcmFja01lbW9yeSBmZWF0dXJlcyIpCiBzZXQoRU5BQkxFX0RFQlVHIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBkZWJ1ZyBmZWF0dXJlcyIpCitzZXQoRU5BQkxFX0lORVRfUFRPTiBPRkYgQ0FDSEUgSU5URVJOQUwgIlNldCB0byBPRkYgdG8gcHJldmVudCB1c2FnZSBvZiBpbmV0X3B0b24gd2hlbiBidWlsZGluZyBhZ2FpbnN0IG1vZGVybiBTREtzIHdoaWxlIHN0aWxsIHJlcXVpcmluZyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgV2luZG93cyB2ZXJzaW9ucywgc3VjaCBhcyBXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzIGV0Yy4iKQogc2V0KEVOQUJMRV9JUFY2IE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgY3VybCBJUHY2IHN1cHBvcnQgZGV0ZWN0aW9uIikKIHNldChFTkFCTEVfTUFOVUFMIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBidWlsdC1pbiBtYW51YWwiKQogc2V0KEVOQUJMRV9USFJFQURFRF9SRVNPTFZFUiBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cCIpCkBAIC02MCw2ICs2Myw4IEBACiAgIHVuc2V0KENNQUtFX1VTRV9EQVJXSU5TU0wgQ0FDSEUpCiBlbmRpZigpCiBzZXQoQ01BS0VfVVNFX01CRURUTFMgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgbWJlZFRMUyBmb3IgU1NML1RMUyIpCitzZXQoQ01BS0VfVVNFX0JFQVJTU0wgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgQmVhclNTTCBmb3IgU1NML1RMUyIpCitzZXQoQ01BS0VfVVNFX05TUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSBOU1MgZm9yIFNTTC9UTFMiKQogCiAjIFdpbmRvd3MgVmlzdGEgYW5kIGFib3ZlIGhhdmUgaW5ldF9wdG9uLCBidXQgdGhpcyB3aWxsIGxpbmsgb24KICMgb2xkZXIgdmVyc2lvbnMgYW5kIHRoZW4gdGhlIGV4ZWN1dGFibGUgd2lsbCBmYWlsIHRvIGxhdW5jaCBhdApAQCAtOTEsNyArOTYsNyBAQAogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICMKLSMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICMKICMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTM2LDcgKzE0MSw3IEBACiBtZXNzYWdlKFdBUk5JTkcgInRoZSBjdXJsIGNtYWtlIGJ1aWxkIHN5c3RlbSBpcyBwb29ybHkgbWFpbnRhaW5lZC4gQmUgYXdhcmUiKQogZW5kaWYoKQogCi1maWxlKFJFQUQgJHtDVVJMX1NPVVJDRV9ESVJ9L2luY2x1ZGUvY3VybC9jdXJsdmVyLmggQ1VSTF9WRVJTSU9OX0hfQ09OVEVOVFMpCitmaWxlKFNUUklOR1MgJHtDVVJMX1NPVVJDRV9ESVJ9L2luY2x1ZGUvY3VybC9jdXJsdmVyLmggQ1VSTF9WRVJTSU9OX0hfQ09OVEVOVFMgUkVHRVggIiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OKCB8X05VTSApIikKIHN0cmluZyhSRUdFWCBNQVRDSCAiI2RlZmluZSBMSUJDVVJMX1ZFUlNJT04gXCJbXlwiXSoiCiAgIENVUkxfVkVSU0lPTiAke0NVUkxfVkVSU0lPTl9IX0NPTlRFTlRTfSkKIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXlwiXStcIiIgIiIgQ1VSTF9WRVJTSU9OICR7Q1VSTF9WRVJTSU9OfSkKQEAgLTE2OCw3ICsxNzMsMjAgQEAKIGlmKFdJTjMyKQogICBvcHRpb24oQ1VSTF9TVEFUSUNfQ1JUICJTZXQgdG8gT04gdG8gYnVpbGQgbGliY3VybCB3aXRoIHN0YXRpYyBDUlQgb24gV2luZG93cyAoL01UKS4iIE9GRikKICAgb3B0aW9uKEVOQUJMRV9JTkVUX1BUT04gIlNldCB0byBPRkYgdG8gcHJldmVudCB1c2FnZSBvZiBpbmV0X3B0b24gd2hlbiBidWlsZGluZyBhZ2FpbnN0IG1vZGVybiBTREtzIHdoaWxlIHN0aWxsIHJlcXVpcmluZyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgV2luZG93cyB2ZXJzaW9ucywgc3VjaCBhcyBXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzIGV0Yy4iIE9OKQorICBpZigwKSAjIFRoaXMgY29kZSBub3QgbmVlZGVkIGZvciBidWlsZGluZyB3aXRoaW4gQ01ha2UuCisgIHNldChDVVJMX1RBUkdFVF9XSU5ET1dTX1ZFUlNJT04gIiIgQ0FDSEUgU1RSSU5HICJNaW5pbXVtIHRhcmdldCBXaW5kb3dzIHZlcnNpb24gYXMgaGV4IHN0cmluZyIpCisgIGlmKENVUkxfVEFSR0VUX1dJTkRPV1NfVkVSU0lPTikKKyAgICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9JHtDVVJMX1RBUkdFVF9XSU5ET1dTX1ZFUlNJT059KQorICBlbHNlaWYoRU5BQkxFX0lORVRfUFRPTikKKyAgICAjIF9XSU4zMl9XSU5OVF9WSVNUQSAoMHgwNjAwKQorICAgIGFkZF9kZWZpbml0aW9ucygtRF9XSU4zMl9XSU5OVD0weDA2MDApCisgIGVsc2UoKQorICAgICMgX1dJTjMyX1dJTk5UX1dJTlhQICgweDA1MDEpCisgICAgYWRkX2RlZmluaXRpb25zKC1EX1dJTjMyX1dJTk5UPTB4MDUwMSkKKyAgZW5kaWYoKQorICBlbmRpZigpCiBlbmRpZigpCitvcHRpb24oQ1VSTF9MVE8gIlR1cm4gb24gY29tcGlsZXIgTGluayBUaW1lIE9wdGltaXphdGlvbnMiIE9GRikKIAogaWYoMCkgIyBUaGlzIGNvZGUgbm90IG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aGluIENNYWtlLgogY21ha2VfZGVwZW5kZW50X29wdGlvbihFTkFCTEVfVEhSRUFERURfUkVTT0xWRVIgIlNldCB0byBPTiB0byBlbmFibGUgdGhyZWFkZWQgRE5TIGxvb2t1cCIKQEAgLTE4NCw4ICsyMDIsOSBAQAogICAgIGZvcmVhY2goX0NDT1BUIC1wZWRhbnRpYyAtV2FsbCAtVyAtV3BvaW50ZXItYXJpdGggLVd3cml0ZS1zdHJpbmdzIC1XdW51c2VkIC1Xc2hhZG93IC1XaW5saW5lIC1XbmVzdGVkLWV4dGVybnMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV2Zsb2F0LWVxdWFsIC1Xbm8tbXVsdGljaGFyIC1Xc2lnbi1jb21wYXJlIC1XdW5kZWYgLVduby1mb3JtYXQtbm9ubGl0ZXJhbCAtV2VuZGlmLWxhYmVscyAtV3N0cmljdC1wcm90b3R5cGVzIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IC1Xc3RyaWN0LWFsaWFzaW5nPTMgLVdjYXN0LWFsaWduIC1XdHlwZS1saW1pdHMgLVdvbGQtc3R5bGUtZGVjbGFyYXRpb24gLVdtaXNzaW5nLXBhcmFtZXRlci10eXBlIC1XZW1wdHktYm9keSAtV2Nsb2JiZXJlZCAtV2lnbm9yZWQtcXVhbGlmaWVycyAtV2NvbnZlcnNpb24gLVduby1zaWduLWNvbnZlcnNpb24gLVd2bGEgLVdkb3VibGUtcHJvbW90aW9uIC1Xbm8tc3lzdGVtLWhlYWRlcnMgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQpCiAgICAgICAjIHN1cnByaXNpbmdseSwgQ0hFQ0tfQ19DT01QSUxFUl9GTEFHIG5lZWRzIGEgbmV3IHZhcmlhYmxlIHRvIHN0b3JlIGVhY2ggbmV3CiAgICAgICAjIHRlc3QgcmVzdWx0IGluLgotICAgICAgY2hlY2tfY19jb21waWxlcl9mbGFnKCR7X0NDT1BUfSBPUFQke19DQ09QVH0pCi0gICAgICBpZihPUFQke19DQ09QVH0pCisgICAgICBzdHJpbmcoTUFLRV9DX0lERU5USUZJRVIgIk9QVCR7X0NDT1BUfSIgX29wdHZhcm5hbWUpCisgICAgICBjaGVja19jX2NvbXBpbGVyX2ZsYWcoJHtfQ0NPUFR9ICR7X29wdHZhcm5hbWV9KQorICAgICAgaWYoJHtfb3B0dmFybmFtZX0pCiAgICAgICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9ICR7X0NDT1BUfSIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCkBAIC0yMTYsNyArMjM1LDYgQEAKICAgc2V0KFVTRV9BUkVTIDEpCiAgIGZpbmRfcGFja2FnZShDQVJFUyBSRVFVSVJFRCkKICAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7Q0FSRVNfTElCUkFSWX0pCi0gIHNldChDVVJMX0xJQlMgJHtDVVJMX0xJQlN9ICR7Q0FSRVNfTElCUkFSWX0pCiBlbmRpZigpCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KQEAgLTI2Nyw2ICsyODUsNyBAQAogICBzZXQoQ1VSTF9ESVNBQkxFX1JUU1AgT04pCiAgIHNldChDVVJMX0RJU0FCTEVfUE9QMyBPTikKICAgc2V0KENVUkxfRElTQUJMRV9JTUFQIE9OKQorICBzZXQoQ1VSTF9ESVNBQkxFX1NNQiBPTikKICAgc2V0KENVUkxfRElTQUJMRV9TTVRQIE9OKQogICBzZXQoQ1VSTF9ESVNBQkxFX0dPUEhFUiBPTikKIGVuZGlmKCkKQEAgLTMzMiw2ICszNTEsNyBAQAogZW5kaWYoKQogCiAjIEluY2x1ZGUgYWxsIHRoZSBuZWNlc3NhcnkgZmlsZXMgZm9yIG1hY3JvcworaW5jbHVkZShDTWFrZVB1c2hDaGVja1N0YXRlKQogaW5jbHVkZShDaGVja0Z1bmN0aW9uRXhpc3RzKQogaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlKQogaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlcykKQEAgLTM1OSw3ICszNzksNyBAQAogCiAjIENoZWNrIGZvciBhbGwgbmVlZGVkIGxpYnJhcmllcwogaWYoMCkgIyBUaGlzIGNvZGUgbm90IG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aGluIENNYWtlLgotY2hlY2tfbGlicmFyeV9leGlzdHNfY29uY2F0KCJkbCIgICAgIGRsb3BlbiAgICAgICBIQVZFX0xJQkRMKQorY2hlY2tfbGlicmFyeV9leGlzdHNfY29uY2F0KCIke0NNQUtFX0RMX0xJQlN9IiBkbG9wZW4gSEFWRV9MSUJETCkKIGVsc2UoKQogICAjIFVzZSB0aGUgY21ha2UtZGVmaW5lZCBkbCBsaWJzIGFzIGRsIGlzIHNob3VsZCBub3QgYmUgdXNlZAogICAjIG9uIEhQVVgsIGJ1dCByYXRoZXIgZGxkIHRoaXMgYXZvaWRzIGEgd2FybmluZwpAQCAtMzkwLDcgKzQxMCw3IEBACiBlbmRpZigpCiAKICMgY2hlY2sgU1NMIGxpYnJhcmllcwotIyBUT0RPIHN1cHBvcnQgR05VVExTLCBOU1MsIFBPTEFSU1NMLCBDWUFTU0wKKyMgVE9ETyBzdXBwb3J0IEdudVRMUyBhbmQgV29sZlNTTAogCiBpZihBUFBMRSkKICAgb3B0aW9uKENNQUtFX1VTRV9TRUNUUkFOU1AgImVuYWJsZSBBcHBsZSBPUyBuYXRpdmUgU1NML1RMUyIgT0ZGKQpAQCAtNDAxLDkgKzQyMSwxMSBAQAogICAgIENNQUtFX1VTRV9XSU5TU0wgT0ZGKQogZW5kaWYoKQogb3B0aW9uKENNQUtFX1VTRV9NQkVEVExTICJFbmFibGUgbWJlZFRMUyBmb3IgU1NML1RMUyIgT0ZGKQorb3B0aW9uKENNQUtFX1VTRV9CRUFSU1NMICJFbmFibGUgQmVhclNTTCBmb3IgU1NML1RMUyIgT0ZGKQorb3B0aW9uKENNQUtFX1VTRV9OU1MgIkVuYWJsZSBOU1MgZm9yIFNTTC9UTFMiIE9GRikKIAogc2V0KG9wZW5zc2xfZGVmYXVsdCBPTikKLWlmKFdJTjMyIE9SIENNQUtFX1VTRV9TRUNUUkFOU1AgT1IgQ01BS0VfVVNFX1dJTlNTTCBPUiBDTUFLRV9VU0VfTUJFRFRMUykKK2lmKFdJTjMyIE9SIENNQUtFX1VTRV9TRUNUUkFOU1AgT1IgQ01BS0VfVVNFX1dJTlNTTCBPUiBDTUFLRV9VU0VfTUJFRFRMUyBPUiBDTUFLRV9VU0VfTlNTKQogICBzZXQob3BlbnNzbF9kZWZhdWx0IE9GRikKIGVuZGlmKCkKIApAQCAtNDEyLDYgKzQzNCw4IEBACiAgIENNQUtFX1VTRV9TRUNUUkFOU1AKICAgQ01BS0VfVVNFX09QRU5TU0wKICAgQ01BS0VfVVNFX01CRURUTFMKKyAgQ01BS0VfVVNFX0JFQVJTU0wKKyAgQ01BS0VfVVNFX05TUwogKQogaWYoZW5hYmxlZF9zc2xfb3B0aW9uc19jb3VudCBHUkVBVEVSICIxIikKICAgc2V0KENVUkxfV0lUSF9NVUxUSV9TU0wgT04pCkBAIC00NTcsOCArNDgxLDYgQEAKICAgZW5kaWYoKQogICBzZXQoU1NMX0VOQUJMRUQgT04pCiAgIHNldChVU0VfT1BFTlNTTCBPTikKLSAgc2V0KEhBVkVfTElCQ1JZUFRPIE9OKQotICBzZXQoSEFWRV9MSUJTU0wgT04pCiAgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke09QRU5TU0xfTElCUkFSSUVTfSkKICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke09QRU5TU0xfSU5DTFVERV9ESVJ9KQogCkBAIC00OTIsNiArNTE0LDI3IEBACiAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtNQkVEVExTX0lOQ0xVREVfRElSU30pCiBlbmRpZigpCiAKK2lmKENNQUtFX1VTRV9CRUFSU1NMKQorICBmaW5kX3BhY2thZ2UoQmVhclNTTCBSRVFVSVJFRCkKKyAgc2V0KFNTTF9FTkFCTEVEIE9OKQorICBzZXQoVVNFX0JFQVJTU0wgT04pCisgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke0JFQVJTU0xfTElCUkFSWX0pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtCRUFSU1NMX0lOQ0xVREVfRElSU30pCitlbmRpZigpCisKK2lmKENNQUtFX1VTRV9OU1MpCisgIGZpbmRfcGFja2FnZShOU1MgUkVRVUlSRUQpCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtOU1NfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TlNTX0xJQlJBUklFU30pCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9OU1MgT04pCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtOU1NfSU5DTFVERV9ESVJTfSkKKyAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke05TU19MSUJSQVJJRVN9KQorICBjaGVja19zeW1ib2xfZXhpc3RzKFBLMTFfQ3JlYXRlTWFuYWdlZEdlbmVyaWNPYmplY3QgInBrMTFwdWIuaCIgSEFWRV9QSzExX0NSRUFURU1BTkFHRURHRU5FUklDT0JKRUNUKQorICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQorZW5kaWYoKQorCiBvcHRpb24oVVNFX05HSFRUUDIgIlVzZSBOZ2h0dHAyIGxpYnJhcnkiIE9GRikKIGlmKFVTRV9OR0hUVFAyKQogICBmaW5kX3BhY2thZ2UoTkdIVFRQMiBSRVFVSVJFRCkKQEAgLTQ5OSw2ICs1NDIsMTAgQEAKICAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdIVFRQMl9MSUJSQVJJRVN9KQogZW5kaWYoKQogCitpZihXSU4zMikKKyAgc2V0KFVTRV9XSU4zMl9DUllQVE8gT04pCitlbmRpZigpCisKIGlmKE5PVCBDVVJMX0RJU0FCTEVfTERBUCkKICAgaWYoV0lOMzIpCiAgICAgb3B0aW9uKFVTRV9XSU4zMl9MREFQICJVc2UgV2luZG93cyBMREFQIGltcGxlbWVudGF0aW9uIiBPTikKQEAgLTY1Myw3ICs3MDAsNyBAQAogb3B0aW9uKENVUkxfQlJPVExJICJTZXQgdG8gT04gdG8gZW5hYmxlIGJ1aWxkaW5nIGN1cmwgd2l0aCBicm90bGkgc3VwcG9ydC4iIE9GRikKIHNldChIQVZFX0JST1RMSSBPRkYpCiBpZihDVVJMX0JST1RMSSkKLSAgZmluZF9wYWNrYWdlKEJST1RMSSBRVUlFVCkKKyAgZmluZF9wYWNrYWdlKEJyb3RsaSBRVUlFVCkKICAgaWYoQlJPVExJX0ZPVU5EKQogICAgIHNldChIQVZFX0JST1RMSSBPTikKICAgICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtCUk9UTElfTElCUkFSSUVTfSkKQEAgLTc5Myw3ICs4NDAsOSBAQAogICB1bnNldChDVVJMX0NBX1BBVEggQ0FDSEUpCiBlbHNlaWYoIiR7Q1VSTF9DQV9QQVRIfSIgU1RSRVFVQUwgImF1dG8iKQogICB1bnNldChDVVJMX0NBX1BBVEggQ0FDSEUpCi0gIHNldChDVVJMX0NBX1BBVEhfQVVUT0RFVEVDVCBUUlVFKQorICBpZihOT1QgVVNFX05TUykKKyAgICBzZXQoQ1VSTF9DQV9QQVRIX0FVVE9ERVRFQ1QgVFJVRSkKKyAgZW5kaWYoKQogZWxzZSgpCiAgIHNldChDVVJMX0NBX1BBVEhfU0VUIFRSVUUpCiBlbmRpZigpCkBAIC05ODMsNiArMTAzMiw3IEBACiBjaGVja19zeW1ib2xfZXhpc3RzKGdldHB3dWlkICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUFdVSUQpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdldHB3dWlkX3IgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUFdVSURfUikKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0ZXVpZCAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRFVUlEKQorY2hlY2tfc3ltYm9sX2V4aXN0cyh1c2xlZXAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1VTTEVFUCkKIGNoZWNrX3N5bWJvbF9leGlzdHModXRpbWUgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9VVElNRSkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ210aW1lX3IgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HTVRJTUVfUikKIGNoZWNrX3N5bWJvbF9leGlzdHMobG9jYWx0aW1lX3IgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9MT0NBTFRJTUVfUikKQEAgLTEwMTAsNiArMTA2MCw3IEBACiBjaGVja19zeW1ib2xfZXhpc3RzKGdldHByb3RvYnluYW1lICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBST1RPQllOQU1FKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwZWVybmFtZSAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRQRUVSTkFNRSkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0c29ja25hbWUgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUU09DS05BTUUpCitjaGVja19zeW1ib2xfZXhpc3RzKGlmX25hbWV0b2luZGV4ICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lGX05BTUVUT0lOREVYKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRybGltaXQgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRSTElNSVQpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNldGxvY2FsZSAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVExPQ0FMRSkKIGNoZWNrX3N5bWJvbF9leGlzdHMoc2V0bW9kZSAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0VUTU9ERSkKQEAgLTEwMTgsMjAgKzEwNjksNyBAQAogY2hlY2tfc3ltYm9sX2V4aXN0cyhpb2N0bCAgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JT0NUTCkKIGNoZWNrX3N5bWJvbF9leGlzdHMoc2V0c29ja29wdCAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0VUU09DS09QVCkKIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhtYWNoX2Fic29sdXRlX3RpbWUgSEFWRV9NQUNIX0FCU09MVVRFX1RJTUUpCi0KLSMgc3ltYm9sIGV4aXN0cyBpbiB3aW4zMiwgYnV0IGZ1bmN0aW9uIGRvZXMgbm90LgotaWYoV0lOMzIpCi0gIGlmKEVOQUJMRV9JTkVUX1BUT04pCi0gICAgY2hlY2tfZnVuY3Rpb25fZXhpc3RzKGluZXRfcHRvbiBIQVZFX0lORVRfUFRPTikKLSAgICAjIF9XSU4zMl9XSU5OVF9WSVNUQSAoMHgwNjAwKQotICAgIGFkZF9kZWZpbml0aW9ucygtRF9XSU4zMl9XSU5OVD0weDA2MDApCi0gIGVsc2UoKQotICAgICMgX1dJTjMyX1dJTk5UX1dJTlhQICgweDA1MDEpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EX1dJTjMyX1dJTk5UPTB4MDUwMSkKLSAgZW5kaWYoKQotZWxzZSgpCi0gIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhpbmV0X3B0b24gSEFWRV9JTkVUX1BUT04pCi1lbmRpZigpCitjaGVja19zeW1ib2xfZXhpc3RzKGluZXRfcHRvbiAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lORVRfUFRPTikKIAogY2hlY2tfc3ltYm9sX2V4aXN0cyhmc2V0eGF0dHIgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfRlNFVFhBVFRSKQogaWYoSEFWRV9GU0VUWEFUVFIpCkBAIC0xMjU1LDYgKzEyOTMsMjMgQEAKICAgZW5kaWYoKQogZW5kaWYoKQogCitpZihDVVJMX0xUTykKKyAgaWYoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy45KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJlcXVlc3RlZCBMVE8gYnV0IHlvdXIgY21ha2UgdmVyc2lvbiAke0NNQUtFX1ZFUlNJT059IGlzIHRvIG9sZC4gWW91IG5lZWQgYXQgbGVhc3QgMy45IikKKyAgZW5kaWYoKQorCisgIGNtYWtlX3BvbGljeShTRVQgQ01QMDA2OSBORVcpCisKKyAgaW5jbHVkZShDaGVja0lQT1N1cHBvcnRlZCkKKyAgY2hlY2tfaXBvX3N1cHBvcnRlZChSRVNVTFQgQ1VSTF9IQVNfTFRPIE9VVFBVVCBDVVJMX0xUT19FUlJPUiBMQU5HVUFHRVMgQykKKyAgaWYoQ1VSTF9IQVNfTFRPKQorICAgIG1lc3NhZ2UoU1RBVFVTICJMVE8gc3VwcG9ydGVkIGFuZCBlbmFibGVkIikKKyAgZWxzZSgpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTFRPIHdhcyByZXF1ZXN0ZWQgLSBidXQgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGl0XG4ke0NVUkxfTFRPX0VSUk9SfSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworCiAjIFVnbHkgKGJ1dCBmdW5jdGlvbmFsKSB3YXkgdG8gaW5jbHVkZSAiTWFrZWZpbGUuaW5jIiBieSB0cmFuc2Zvcm1pbmcgaXQgKD0gcmVnZW5lcmF0ZSBpdCkuCiBmdW5jdGlvbih0cmFuc2Zvcm1fbWFrZWZpbGVfaW5jIElOUFVUX0ZJTEUgT1VUUFVUX0ZJTEUpCiAgIGZpbGUoUkVBRCAke0lOUFVUX0ZJTEV9IE1BS0VGSUxFX0lOQ19URVhUKQpAQCAtMTMwOSwxNCArMTM2NCwyMiBAQAogICBhZGRfc3ViZGlyZWN0b3J5KHRlc3RzKQogZW5kaWYoKQogCisjIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBjcnlwdG8gZnVuY3Rpb24gYWRhcHRpb25zIGZyb20gdmFyaW91cyBTU0wgbGlicworIyBUT0RPIGFsdGVybmF0aXZlIFNTTCBsaWJzIHRlc3RzIGZvciBTU1AxLCBHTlVUTFMsIE5TUworaWYoTk9UIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9XSU5ET1dTX1NTUEkgT1IgVVNFX0RBUldJTlNTTCBPUiBVU0VfTUJFRFRMUyBPUiBVU0VfV0lOMzJfQ1JZUFRPKSkKKyAgc2V0KHVzZV9udGxtIE9OKQorZWxzZSgpCisgIHNldCh1c2VfbnRsbSBPRkYpCitlbmRpZigpCisKICMgSGVscGVyIHRvIHBvcHVsYXRlIGEgbGlzdCAoX2l0ZW1zKSB3aXRoIGEgbGFiZWwgd2hlbiBjb25kaXRpb25zICh0aGUgcmVtYWluaW5nCiAjIGFyZ3MpIGFyZSBzYXRpc2ZpZWQKLWZ1bmN0aW9uKF9hZGRfaWYgbGFiZWwpCi0gICMgVE9ETyBuZWVkIHRvIGRpc2FibGUgcG9saWN5IENNUDAwNTQgKENNYWtlIDMuMSkgdG8gYWxsb3cgdGhpcyBpbmRpcmVjdGlvbgorbWFjcm8oX2FkZF9pZiBsYWJlbCkKKyAgIyBuZWVkcyB0byBiZSBhIG1hY3JvIHRvIGFsbG93IHRoaXMgaW5kaXJlY3Rpb24KICAgaWYoJHtBUkdOfSkKLSAgICBzZXQoX2l0ZW1zICR7X2l0ZW1zfSAiJHtsYWJlbH0iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoX2l0ZW1zICR7X2l0ZW1zfSAiJHtsYWJlbH0iKQogICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCitlbmRtYWNybygpCiAKICMgQ2xlYXIgbGlzdCBhbmQgdHJ5IHRvIGRldGVjdCBhdmFpbGFibGUgZmVhdHVyZXMKIHNldChfaXRlbXMpCkBAIC0xMzM4LDE1ICsxNDAxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoSEFWRV9HU1NBUEkgT1IgVVNFX1dJTkRPV1NfU1NQSSkpCiAjIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBjcnlwdG8gZnVuY3Rpb24gYWRhcHRpb25zIGZyb20gdmFyaW91cyBTU0wgbGlicwogIyBUT0RPIGFsdGVybmF0aXZlIFNTTCBsaWJzIHRlc3RzIGZvciBTU1AxLCBHTlVUTFMsIE5TUwotaWYoTk9UIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9XSU5ET1dTX1NTUEkgT1IgVVNFX1NFQ1RSQU5TUCBPUiBVU0VfTUJFRFRMUykpCi0gIF9hZGRfaWYoIk5UTE0iICAgICAgICAxKQotICAjIFRPRE8gbWlzc2luZyBvcHRpb24gKGF1dG9jb25mOiAtLWVuYWJsZS1udGxtLXdiKQotICBfYWRkX2lmKCJOVExNX1dCIiAgICAgTk9UIENVUkxfRElTQUJMRV9IVFRQIEFORCBOVExNX1dCX0VOQUJMRUQpCi1lbmRpZigpCitfYWRkX2lmKCJOVExNIiAgICAgICAgdXNlX250bG0pCisjIFRPRE8gbWlzc2luZyBvcHRpb24gKGF1dG9jb25mOiAtLWVuYWJsZS1udGxtLXdiKQorX2FkZF9pZigiTlRMTV9XQiIgICAgIHVzZV9udGxtIEFORCBOT1QgQ1VSTF9ESVNBQkxFX0hUVFAgQU5EIE5UTE1fV0JfRU5BQkxFRCkKICMgVE9ETyBtaXNzaW5nIG9wdGlvbiAoLS1lbmFibGUtdGxzLXNycCksIGRlcGVuZHMgb24gR05VVExTX1NSUC9PUEVOU1NMX1NSUAogX2FkZF9pZigiVExTLVNSUCIgICAgICAgVVNFX1RMU19TUlApCiAjIFRPRE8gb3B0aW9uIC0td2l0aC1uZ2h0dHAyIHRlc3RzIGZvciBuZ2h0dHAyIGxpYiBhbmQgbmdodHRwMi9uZ2h0dHAyLmggaGVhZGVyCiBfYWRkX2lmKCJIVFRQMiIgICAgICAgICBVU0VfTkdIVFRQMikKK19hZGRfaWYoIkhUVFBTLXByb3h5IiAgIFNTTF9FTkFCTEVEIEFORCAoVVNFX09QRU5TU0wgT1IgVVNFX0dOVVRMUyBPUiBVU0VfTlNTKSkKIHN0cmluZyhSRVBMQUNFICI7IiAiICIgU1VQUE9SVF9GRUFUVVJFUyAiJHtfaXRlbXN9IikKIG1lc3NhZ2UoU1RBVFVTICJFbmFibGVkIGZlYXR1cmVzOiAke1NVUFBPUlRfRkVBVFVSRVN9IikKIApAQCAtMTM3MSw2ICsxNDMzLDggQEAKIF9hZGRfaWYoIlBPUDNTIiAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfUE9QMyBBTkQgU1NMX0VOQUJMRUQpCiBfYWRkX2lmKCJJTUFQIiAgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX0lNQVApCiBfYWRkX2lmKCJJTUFQUyIgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX0lNQVAgQU5EIFNTTF9FTkFCTEVEKQorX2FkZF9pZigiU01CIiAgICAgICAgICAgTk9UIENVUkxfRElTQUJMRV9TTUIgQU5EIHVzZV9udGxtKQorX2FkZF9pZigiU01CUyIgICAgICAgICAgTk9UIENVUkxfRElTQUJMRV9TTUIgQU5EIFNTTF9FTkFCTEVEIEFORCB1c2VfbnRsbSkKIF9hZGRfaWYoIlNNVFAiICAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfU01UUCkKIF9hZGRfaWYoIlNNVFBTIiAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfU01UUCBBTkQgU1NMX0VOQUJMRUQpCiBfYWRkX2lmKCJTQ1AiICAgICAgICAgICBVU0VfTElCU1NIMikKQEAgLTEzODksNiArMTQ1Myw4IEBACiBfYWRkX2lmKCJPcGVuU1NMIiAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX09QRU5TU0wpCiBfYWRkX2lmKCJTZWN1cmUgVHJhbnNwb3J0IiBTU0xfRU5BQkxFRCBBTkQgVVNFX1NFQ1RSQU5TUCkKIF9hZGRfaWYoIm1iZWRUTFMiICAgICAgICAgIFNTTF9FTkFCTEVEIEFORCBVU0VfTUJFRFRMUykKK19hZGRfaWYoIkJlYXJTU0wiICAgICAgICAgIFNTTF9FTkFCTEVEIEFORCBVU0VfQkVBUlNTTCkKK19hZGRfaWYoIk5TUyIgICAgICAgICAgICAgIFNTTF9FTkFCTEVEIEFORCBVU0VfTlNTKQogaWYoX2l0ZW1zKQogICBsaXN0KFNPUlQgX2l0ZW1zKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DT1BZSU5HIGIvVXRpbGl0aWVzL2NtY3VybC9DT1BZSU5HCmluZGV4IDM1MjhiZDcuLjlkOWU0YWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ09QWUlORworKysgYi9VdGlsaXRpZXMvY21jdXJsL0NPUFlJTkcKQEAgLTEsNiArMSw2IEBACiBDT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFCiAKLUNvcHlyaWdodCAoYykgMTk5NiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgYW5kIG1hbnkKK0NvcHlyaWdodCAoYykgMTk5NiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgYW5kIG1hbnkKIGNvbnRyaWJ1dG9ycywgc2VlIHRoZSBUSEFOS1MgZmlsZS4KIAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmwuaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmwuaAppbmRleCAwODljNDI3Li43ZTk5ZDVlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfQ1VSTF9ICi0jZGVmaW5lIF9fQ1VSTF9DVVJMX0gKKyNpZm5kZWYgQ1VSTElOQ19DVVJMX0gKKyNkZWZpbmUgQ1VSTElOQ19DVVJMX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zOCwxMiArMzgsMTIgQEAKICNpbmNsdWRlICJzeXN0ZW0uaCIgICAgICAgICAgLyogZGV0ZXJtaW5lIHRoaW5ncyBydW4tdGltZSAqLwogCiAvKgotICogRGVmaW5lIFdJTjMyIHdoZW4gYnVpbGQgdGFyZ2V0IGlzIFdpbjMyIEFQSQorICogRGVmaW5lIENVUkxfV0lOMzIgd2hlbiBidWlsZCB0YXJnZXQgaXMgV2luMzIgQVBJCiAgKi8KIAotI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pKSAmJiBcCi0gICAgICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfX1NZTUJJQU4zMl9fKQotI2RlZmluZSBXSU4zMgorI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pIHx8IGRlZmluZWQoV0lOMzIpKSAmJiAgICAgICAgXAorICAhZGVmaW5lZChfX1NZTUJJQU4zMl9fKQorI2RlZmluZSBDVVJMX1dJTjMyCiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC01OCw3ICs1OCw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKKyNpZiBkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjaWYgIShkZWZpbmVkKF9XSU5TT0NLQVBJXykgfHwgZGVmaW5lZChfV0lOU09DS19IKSB8fCBcCiAgICAgICBkZWZpbmVkKF9fTFdJUF9PUFRfSF9fKSB8fCBkZWZpbmVkKExXSVBfSERSX09QVF9IKSkKIC8qIFRoZSBjaGVjayBhYm92ZSBwcmV2ZW50cyB0aGUgd2luc29jazIgaW5jbHVzaW9uIGlmIHdpbnNvY2suaCBhbHJlYWR5IHdhcwpAQCAtNzksMTEgKzc5LDExIEBACiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkKKyNpZiAhZGVmaW5lZChDVVJMX1dJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgogCi0jaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1ZYV09SS1NfXykKKyNpZiAhZGVmaW5lZChDVVJMX1dJTjMyKSAmJiAhZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX19WWFdPUktTX18pCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogI2lmZGVmIENVUkxfU1RBVElDTElCCiAjICBkZWZpbmUgQ1VSTF9FWFRFUk4KLSNlbGlmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19TWU1CSUFOMzJfXykgfHwgXAorI2VsaWYgZGVmaW5lZChDVVJMX1dJTjMyKSB8fCBkZWZpbmVkKF9fU1lNQklBTjMyX18pIHx8IFwKICAgICAgKF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZShkbGxleHBvcnQpICYmIFwKICAgICAgIF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZShkbGxpbXBvcnQpKQogIyAgaWYgZGVmaW5lZChCVUlMRElOR19MSUJDVVJMKQpAQCAtMTMwLDcgKzEzMCw3IEBACiAKICNpZm5kZWYgY3VybF9zb2NrZXRfdHlwZWRlZgogLyogc29ja2V0IHR5cGVkZWYgKi8KLSNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfX0xXSVBfT1BUX0hfXykgJiYgIWRlZmluZWQoTFdJUF9IRFJfT1BUX0gpCisjaWYgZGVmaW5lZChDVVJMX1dJTjMyKSAmJiAhZGVmaW5lZChfX0xXSVBfT1BUX0hfXykgJiYgIWRlZmluZWQoTFdJUF9IRFJfT1BUX0gpCiB0eXBlZGVmIFNPQ0tFVCBjdXJsX3NvY2tldF90OwogI2RlZmluZSBDVVJMX1NPQ0tFVF9CQUQgSU5WQUxJRF9TT0NLRVQKICNlbHNlCkBAIC0xNTQsNyArMTU0LDggQEAKICAgQ1VSTFNTTEJBQ0tFTkRfU0VDVVJFVFJBTlNQT1JUID0gOSwKICAgQ1VSTFNTTEJBQ0tFTkRfQVhUTFMgPSAxMCwgLyogbmV2ZXIgdXNlZCBzaW5jZSA3LjYzLjAgKi8KICAgQ1VSTFNTTEJBQ0tFTkRfTUJFRFRMUyA9IDExLAotICBDVVJMU1NMQkFDS0VORF9NRVNBTElOSyA9IDEyCisgIENVUkxTU0xCQUNLRU5EX01FU0FMSU5LID0gMTIsCisgIENVUkxTU0xCQUNLRU5EX0JFQVJTU0wgPSAxMwogfSBjdXJsX3NzbGJhY2tlbmQ7CiAKIC8qIGFsaWFzZXMgZm9yIGxpYnJhcnkgY2xvbmVzIGFuZCByZW5hbWVzICovCkBAIC0yMDksMTYgKzIxMCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiBBZGRlZCBpbiA3LjQ2LjAgKi8KIH07CiAKLS8qIFRoaXMgaXMgdGhlIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiBjYWxsYmFjayBwcm90by4gSXQgaXMgbm93IGNvbnNpZGVyZWQKLSAgIGRlcHJlY2F0ZWQgYnV0IHdhcyB0aGUgb25seSBjaG9pY2UgdXAgdW50aWwgNy4zMS4wICovCisKKy8qIFRoaXMgaXMgYSByZXR1cm4gY29kZSBmb3IgdGhlIHByb2dyZXNzIGNhbGxiYWNrIHRoYXQsIHdoZW4gcmV0dXJuZWQsIHdpbGwKKyAgIHNpZ25hbCBsaWJjdXJsIHRvIGNvbnRpbnVlIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBwcm9ncmVzcyBmdW5jdGlvbiAqLworI2RlZmluZSBDVVJMX1BST0dSRVNTRlVOQ19DT05USU5VRSAweDEwMDAwMDAxCisKKy8qIFRoaXMgaXMgdGhlIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiBjYWxsYmFjayBwcm90b3R5cGUuIEl0IGlzIG5vdworICAgY29uc2lkZXJlZCBkZXByZWNhdGVkIGJ1dCB3YXMgdGhlIG9ubHkgY2hvaWNlIHVwIHVudGlsIDcuMzEuMCAqLwogdHlwZWRlZiBpbnQgKCpjdXJsX3Byb2dyZXNzX2NhbGxiYWNrKSh2b2lkICpjbGllbnRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGx0b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRsbm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdWx0b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsbm93KTsKIAotLyogVGhpcyBpcyB0aGUgQ1VSTE9QVF9YRkVSSU5GT0ZVTkNUSU9OIGNhbGxiYWNrIHByb3RvLiBJdCB3YXMgaW50cm9kdWNlZCBpbgotICAgNy4zMi4wLCBpdCBhdm9pZHMgZmxvYXRpbmcgcG9pbnQgYW5kIHByb3ZpZGVzIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24uICovCisvKiBUaGlzIGlzIHRoZSBDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04gY2FsbGJhY2sgcHJvdG90eXBlLiBJdCB3YXMgaW50cm9kdWNlZAorICAgaW4gNy4zMi4wLCBhdm9pZHMgdGhlIHVzZSBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFuZCBwcm92aWRlcyBtb3JlCisgICBkZXRhaWxlZCBpbmZvcm1hdGlvbi4gKi8KIHR5cGVkZWYgaW50ICgqY3VybF94ZmVyaW5mb19jYWxsYmFjaykodm9pZCAqY2xpZW50cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCBkbHRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IGRsbm93LApAQCAtMjgzLDEwICsyOTAsNyBAQAogI2RlZmluZSBDVVJMRklORk9GTEFHX0tOT1dOX1NJWkUgICAgICAgICgxPDw2KQogI2RlZmluZSBDVVJMRklORk9GTEFHX0tOT1dOX0hMSU5LQ09VTlQgICgxPDw3KQogCi0vKiBDb250ZW50IG9mIHRoaXMgc3RydWN0dXJlIGRlcGVuZHMgb24gaW5mb3JtYXRpb24gd2hpY2ggaXMga25vd24gYW5kIGlzCi0gICBhY2hpZXZhYmxlIChlLmcuIGJ5IEZUUCBMSVNUIHBhcnNpbmcpLiBQbGVhc2Ugc2VlIHRoZSB1cmxfZWFzeV9zZXRvcHQoMykgbWFuCi0gICBwYWdlIGZvciBjYWxsYmFja3MgcmV0dXJuaW5nIHRoaXMgc3RydWN0dXJlIC0tIHNvbWUgZmllbGRzIGFyZSBtYW5kYXRvcnksCi0gICBzb21lIG90aGVycyBhcmUgb3B0aW9uYWwuIFRoZSBGTEFHIGZpZWxkIGhhcyBzcGVjaWFsIG1lYW5pbmcuICovCisvKiBJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBmaWxlLCB1c2VkIHdoZW4gZG9pbmcgRlRQIHdpbGRjYXJkIG1hdGNoaW5nICovCiBzdHJ1Y3QgY3VybF9maWxlaW5mbyB7CiAgIGNoYXIgKmZpbGVuYW1lOwogICBjdXJsZmlsZXR5cGUgZmlsZXR5cGU7CkBAIC02MDIsNiArNjA2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBDVVJMRV9SRUNVUlNJVkVfQVBJX0NBTEwsICAgICAgLyogOTMgLSBhbiBhcGkgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgYSBjYWxsYmFjayAqLworICBDVVJMRV9BVVRIX0VSUk9SLCAgICAgICAgICAgICAgLyogOTQgLSBhbiBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiByZXR1cm5lZCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgKi8KKyAgQ1VSTEVfSFRUUDMsICAgICAgICAgICAgICAgICAgIC8qIDk1IC0gQW4gSFRUUC8zIGxheWVyIHByb2JsZW0gKi8KKyAgQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SLCAgICAgIC8qIDk2IC0gUVVJQyBjb25uZWN0aW9uIGVycm9yICovCiAgIENVUkxfTEFTVCAvKiBuZXZlciB1c2UhICovCiB9IENVUkxjb2RlOwogCkBAIC02ODUsOCArNjkzLDEwIEBACiB0eXBlZGVmIENVUkxjb2RlICgqY3VybF9jb252X2NhbGxiYWNrKShjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOwogCiB0eXBlZGVmIENVUkxjb2RlICgqY3VybF9zc2xfY3R4X2NhbGxiYWNrKShDVVJMICpjdXJsLCAgICAvKiBlYXN5IGhhbmRsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3NsX2N0eCwgLyogYWN0dWFsbHkgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5TU0wgU1NMX0NUWCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3NsX2N0eCwgLyogYWN0dWFsbHkgYW4gT3BlblNTTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgV29sZlNTTCBTU0xfQ1RYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYW4gbWJlZFRMUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZpZyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnB0cik7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC04MTksNiArODI5LDEwIEBACiAgICBTU0wgYmFja2VuZHMgd2hlcmUgc3VjaCBiZWhhdmlvciBpcyBwcmVzZW50LiAqLwogI2RlZmluZSBDVVJMU1NMT1BUX05PX1JFVk9LRSAoMTw8MSkKIAorLyogLSBOT19QQVJUSUFMQ0hBSU4gdGVsbHMgbGliY3VybCB0byAqTk9UKiBhY2NlcHQgYSBwYXJ0aWFsIGNlcnRpZmljYXRlIGNoYWluCisgICBpZiBwb3NzaWJsZS4gVGhlIE9wZW5TU0wgYmFja2VuZCBoYXMgdGhpcyBhYmlsaXR5LiAqLworI2RlZmluZSBDVVJMU1NMT1BUX05PX1BBUlRJQUxDSEFJTiAoMTw8MikKKwogLyogVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBhdHRlbXB0IGRlbGF5IGluIG1pbGxpc2Vjb25kcyBmb3IgaGFwcHkgZXllYmFsbHMuCiAgICBDVVJMT1BUX0hBUFBZX0VZRUJBTExTX1RJTUVPVVRfTVMuMyBhbmQgaGFwcHktZXllYmFsbHMtdGltZW91dC1tcy5kIGRvY3VtZW50CiAgICB0aGlzIHZhbHVlLCBrZWVwIHRoZW0gaW4gc3luYy4gKi8KQEAgLTg4Myw3ICs4OTcsNyBAQAogCiAvKiBDVVJMQUxUU1ZDXyogYXJlIGJpdHMgZm9yIHRoZSBDVVJMT1BUX0FMVFNWQ19DVFJMIG9wdGlvbiAqLwogI2RlZmluZSBDVVJMQUxUU1ZDX0lNTUVESUFURUxZICAoMTw8MCkKLSNkZWZpbmUgQ1VSTEFMVFNWQ19BTFRVU0VEICAgICAgKDE8PDEpCisKICNkZWZpbmUgQ1VSTEFMVFNWQ19SRUFET05MWUZJTEUgKDE8PDIpCiAjZGVmaW5lIENVUkxBTFRTVkNfSDEgICAgICAgICAgICgxPDwzKQogI2RlZmluZSBDVVJMQUxUU1ZDX0gyICAgICAgICAgICAoMTw8NCkKQEAgLTkyNCw3OSArOTM4LDY0IEBACiAgICBidXQgMzIgKi8KICNkZWZpbmUgQ1VSTE9QVFRZUEVfTE9ORyAgICAgICAgICAwCiAjZGVmaW5lIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UICAgMTAwMDAKLSNkZWZpbmUgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQgICAxMDAwMAogI2RlZmluZSBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UIDIwMDAwCiAjZGVmaW5lIENVUkxPUFRUWVBFX09GRl9UICAgICAgICAgMzAwMDAKIAogLyogKlNUUklOR1BPSU5UIGlzIGFuIGFsaWFzIGZvciBPQkpFQ1RQT0lOVCB0byBhbGxvdyB0b29scyB0byBleHRyYWN0IHRoZQogICAgc3RyaW5nIG9wdGlvbnMgZnJvbSB0aGUgaGVhZGVyIGZpbGUgKi8KIAotLyogbmFtZSBpcyB1cHBlcmNhc2UgQ1VSTE9QVF88bmFtZT4sCi0gICB0eXBlIGlzIG9uZSBvZiB0aGUgZGVmaW5lZCBDVVJMT1BUVFlQRV88dHlwZT4KLSAgIG51bWJlciBpcyB1bmlxdWUgaWRlbnRpZmllciAqLwotI2lmZGVmIENJTklUCi0jdW5kZWYgQ0lOSVQKLSNlbmRpZgogCi0jaWZkZWYgQ1VSTF9JU09DUFAKLSNkZWZpbmUgQ0lOSVQobmEsdCxudSkgQ1VSTE9QVF8gIyMgbmEgPSBDVVJMT1BUVFlQRV8gIyMgdCArIG51Ci0jZWxzZQotLyogVGhlIG1hY3JvICIjIyIgaXMgSVNPIEMsIHdlIGFzc3VtZSBwcmUtSVNPIEMgZG9lc24ndCBzdXBwb3J0IGl0LiAqLwotI2RlZmluZSBMT05HICAgICAgICAgIENVUkxPUFRUWVBFX0xPTkcKLSNkZWZpbmUgT0JKRUNUUE9JTlQgICBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVAotI2RlZmluZSBTVFJJTkdQT0lOVCAgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCi0jZGVmaW5lIEZVTkNUSU9OUE9JTlQgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVAotI2RlZmluZSBPRkZfVCAgICAgICAgIENVUkxPUFRUWVBFX09GRl9UCi0jZGVmaW5lIENJTklUKG5hbWUsdHlwZSxudW1iZXIpIENVUkxPUFRfLyoqL25hbWUgPSB0eXBlICsgbnVtYmVyCi0jZW5kaWYKKyNkZWZpbmUgQ1VSTE9QVChuYSx0LG51KSBuYSA9IHQgKyBudQorCisvKiBoYW5keSBhbGlhc2VzIHRoYXQgbWFrZSBubyBydW4tdGltZSBkaWZmZXJlbmNlICovCisjZGVmaW5lIENVUkxPUFRUWVBFX1NUUklOR1BPSU5UICBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVAorI2RlZmluZSBDVVJMT1BUVFlQRV9TTElTVFBPSU5UICBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVAogCiAvKgotICogVGhpcyBtYWNyby1tYW5pYSBiZWxvdyBzZXR1cHMgdGhlIENVUkxPUFRfW3doYXRdIGVudW0sIHRvIGJlIHVzZWQgd2l0aAotICogY3VybF9lYXN5X3NldG9wdCgpLiBUaGUgZmlyc3QgYXJndW1lbnQgaW4gdGhlIENJTklUKCkgbWFjcm8gaXMgdGhlIFt3aGF0XQotICogd29yZC4KKyAqIEFsbCBDVVJMT1BUXyogdmFsdWVzLgogICovCiAKIHR5cGVkZWYgZW51bSB7CiAgIC8qIFRoaXMgaXMgdGhlIEZJTEUgKiBvciB2b2lkICogdGhlIHJlZ3VsYXIgb3V0cHV0IHNob3VsZCBiZSB3cml0dGVuIHRvLiAqLwotICBDSU5JVChXUklURURBVEEsIE9CSkVDVFBPSU5ULCAxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1dSSVRFREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDEpLAogCiAgIC8qIFRoZSBmdWxsIFVSTCB0byBnZXQvcHV0ICovCi0gIENJTklUKFVSTCwgU1RSSU5HUE9JTlQsIDIpLAorICBDVVJMT1BUKENVUkxPUFRfVVJMLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMiksCiAKICAgLyogUG9ydCBudW1iZXIgdG8gY29ubmVjdCB0bywgaWYgb3RoZXIgdGhhbiBkZWZhdWx0LiAqLwotICBDSU5JVChQT1JULCBMT05HLCAzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPUlQsIENVUkxPUFRUWVBFX0xPTkcsIDMpLAogCiAgIC8qIE5hbWUgb2YgcHJveHkgdG8gdXNlLiAqLwotICBDSU5JVChQUk9YWSwgU1RSSU5HUE9JTlQsIDQpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFksIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA0KSwKIAogICAvKiAidXNlcjpwYXNzd29yZDtvcHRpb25zIiB0byB1c2Ugd2hlbiBmZXRjaGluZy4gKi8KLSAgQ0lOSVQoVVNFUlBXRCwgU1RSSU5HUE9JTlQsIDUpLAorICBDVVJMT1BUKENVUkxPUFRfVVNFUlBXRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDUpLAogCiAgIC8qICJ1c2VyOnBhc3N3b3JkIiB0byB1c2Ugd2l0aCBwcm94eS4gKi8KLSAgQ0lOSVQoUFJPWFlVU0VSUFdELCBTVFJJTkdQT0lOVCwgNiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWVVTRVJQV0QsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA2KSwKIAogICAvKiBSYW5nZSB0byBnZXQsIHNwZWNpZmllZCBhcyBhbiBBU0NJSSBzdHJpbmcuICovCi0gIENJTklUKFJBTkdFLCBTVFJJTkdQT0lOVCwgNyksCisgIENVUkxPUFQoQ1VSTE9QVF9SQU5HRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDcpLAogCiAgIC8qIG5vdCB1c2VkICovCiAKICAgLyogU3BlY2lmaWVkIGZpbGUgc3RyZWFtIHRvIHVwbG9hZCBmcm9tICh1c2UgYXMgaW5wdXQpOiAqLwotICBDSU5JVChSRUFEREFUQSwgT0JKRUNUUE9JTlQsIDkpLAorICBDVVJMT1BUKENVUkxPUFRfUkVBRERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCA5KSwKIAogICAvKiBCdWZmZXIgdG8gcmVjZWl2ZSBlcnJvciBtZXNzYWdlcyBpbiwgbXVzdCBiZSBhdCBsZWFzdCBDVVJMX0VSUk9SX1NJWkUKICAgICogYnl0ZXMgYmlnLiAqLwotICBDSU5JVChFUlJPUkJVRkZFUiwgT0JKRUNUUE9JTlQsIDEwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0VSUk9SQlVGRkVSLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTApLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gc3RvcmUgdGhlIG91dHB1dCAoaW5zdGVhZCBvZiBmd3JpdGUpLiBUaGUKICAgICogcGFyYW1ldGVycyB3aWxsIHVzZSBmd3JpdGUoKSBzeW50YXgsIG1ha2Ugc3VyZSB0byBmb2xsb3cgdGhlbS4gKi8KLSAgQ0lOSVQoV1JJVEVGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTEpLAorICBDVVJMT1BUKENVUkxPUFRfV1JJVEVGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTEpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gcmVhZCB0aGUgaW5wdXQgKGluc3RlYWQgb2YgZnJlYWQpLiBUaGUKICAgICogcGFyYW1ldGVycyB3aWxsIHVzZSBmcmVhZCgpIHN5bnRheCwgbWFrZSBzdXJlIHRvIGZvbGxvdyB0aGVtLiAqLwotICBDSU5JVChSRUFERlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDEyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFQURGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTIpLAogCiAgIC8qIFRpbWUtb3V0IHRoZSByZWFkIG9wZXJhdGlvbiBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzICovCi0gIENJTklUKFRJTUVPVVQsIExPTkcsIDEzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RJTUVPVVQsIENVUkxPUFRUWVBFX0xPTkcsIDEzKSwKIAogICAvKiBJZiB0aGUgQ1VSTE9QVF9JTkZJTEUgaXMgdXNlZCwgdGhpcyBjYW4gYmUgdXNlZCB0byBpbmZvcm0gbGliY3VybCBhYm91dAogICAgKiBob3cgbGFyZ2UgdGhlIGZpbGUgYmVpbmcgc2VudCByZWFsbHkgaXMuIFRoYXQgYWxsb3dzIGJldHRlciBlcnJvcgpAQCAtMTAwNywyMCArMTAwNiwyMCBAQAogICAgKiB3aGljaCB0YWtlcyBhbiBvZmZfdCB0eXBlLCBhbGxvd2luZyBwbGF0Zm9ybXMgd2l0aCBsYXJnZXIgb2ZmX3QKICAgICogc2l6ZXMgdG8gaGFuZGxlIGxhcmdlciBmaWxlcy4gIFNlZSBiZWxvdyBmb3IgSU5GSUxFU0laRV9MQVJHRS4KICAgICovCi0gIENJTklUKElORklMRVNJWkUsIExPTkcsIDE0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lORklMRVNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDE0KSwKIAogICAvKiBQT1NUIHN0YXRpYyBpbnB1dCBmaWVsZHMuICovCi0gIENJTklUKFBPU1RGSUVMRFMsIE9CSkVDVFBPSU5ULCAxNSksCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NURklFTERTLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTUpLAogCiAgIC8qIFNldCB0aGUgcmVmZXJyZXIgcGFnZSAobmVlZGVkIGJ5IHNvbWUgQ0dJcykgKi8KLSAgQ0lOSVQoUkVGRVJFUiwgU1RSSU5HUE9JTlQsIDE2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFRkVSRVIsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNiksCiAKICAgLyogU2V0IHRoZSBGVFAgUE9SVCBzdHJpbmcgKGludGVyZmFjZSBuYW1lLCBuYW1lZCBvciBudW1lcmljYWwgSVAgYWRkcmVzcykKICAgICAgVXNlIGkuZSAnLScgdG8gdXNlIGRlZmF1bHQgYWRkcmVzcy4gKi8KLSAgQ0lOSVQoRlRQUE9SVCwgU1RSSU5HUE9JTlQsIDE3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUFBPUlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNyksCiAKICAgLyogU2V0IHRoZSBVc2VyLUFnZW50IHN0cmluZyAoZXhhbWluZWQgYnkgc29tZSBDR0lzKSAqLwotICBDSU5JVChVU0VSQUdFTlQsIFNUUklOR1BPSU5ULCAxOCksCisgIENVUkxPUFQoQ1VSTE9QVF9VU0VSQUdFTlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxOCksCiAKICAgLyogSWYgdGhlIGRvd25sb2FkIHJlY2VpdmVzIGxlc3MgdGhhbiAibG93IHNwZWVkIGxpbWl0IiBieXRlcy9zZWNvbmQKICAgICogZHVyaW5nICJsb3cgc3BlZWQgdGltZSIgc2Vjb25kcywgdGhlIG9wZXJhdGlvbnMgaXMgYWJvcnRlZC4KQEAgLTEwMjksMTAgKzEwMjgsMTAgQEAKICAgICovCiAKICAgLyogU2V0IHRoZSAibG93IHNwZWVkIGxpbWl0IiAqLwotICBDSU5JVChMT1dfU1BFRURfTElNSVQsIExPTkcsIDE5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0xPV19TUEVFRF9MSU1JVCwgQ1VSTE9QVFRZUEVfTE9ORywgMTkpLAogCiAgIC8qIFNldCB0aGUgImxvdyBzcGVlZCB0aW1lIiAqLwotICBDSU5JVChMT1dfU1BFRURfVElNRSwgTE9ORywgMjApLAorICBDVVJMT1BUKENVUkxPUFRfTE9XX1NQRUVEX1RJTUUsIENVUkxPUFRUWVBFX0xPTkcsIDIwKSwKIAogICAvKiBTZXQgdGhlIGNvbnRpbnVhdGlvbiBvZmZzZXQuCiAgICAqCkBAIC0xMDQwLDQ4ICsxMDM5LDQ4IEBACiAgICAqIG9mZl90IHR5cGVzLCBhbGxvd2luZyBmb3IgbGFyZ2UgZmlsZSBvZmZzZXRzIG9uIHBsYXRmb3JtcyB3aGljaAogICAgKiB1c2UgbGFyZ2VyLXRoYW4tMzItYml0IG9mZl90J3MuICBMb29rIGJlbG93IGZvciBSRVNVTUVfRlJPTV9MQVJHRS4KICAgICovCi0gIENJTklUKFJFU1VNRV9GUk9NLCBMT05HLCAyMSksCisgIENVUkxPUFQoQ1VSTE9QVF9SRVNVTUVfRlJPTSwgQ1VSTE9QVFRZUEVfTE9ORywgMjEpLAogCiAgIC8qIFNldCBjb29raWUgaW4gcmVxdWVzdDogKi8KLSAgQ0lOSVQoQ09PS0lFLCBTVFJJTkdQT0lOVCwgMjIpLAorICBDVVJMT1BUKENVUkxPUFRfQ09PS0lFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjIpLAogCiAgIC8qIFRoaXMgcG9pbnRzIHRvIGEgbGlua2VkIGxpc3Qgb2YgaGVhZGVycywgc3RydWN0IGN1cmxfc2xpc3Qga2luZC4gVGhpcwogICAgICBsaXN0IGlzIGFsc28gdXNlZCBmb3IgUlRTUCAoaW4gc3BpdGUgb2YgaXRzIG5hbWUpICovCi0gIENJTklUKEhUVFBIRUFERVIsIE9CSkVDVFBPSU5ULCAyMyksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQSEVBREVSLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAyMyksCiAKICAgLyogVGhpcyBwb2ludHMgdG8gYSBsaW5rZWQgbGlzdCBvZiBwb3N0IGVudHJpZXMsIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICovCi0gIENJTklUKEhUVFBQT1NULCBPQkpFQ1RQT0lOVCwgMjQpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUFBPU1QsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyNCksCiAKICAgLyogbmFtZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wtY2VydGlmaWNhdGUgKi8KLSAgQ0lOSVQoU1NMQ0VSVCwgU1RSSU5HUE9JTlQsIDI1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTENFUlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNSksCiAKICAgLyogcGFzc3dvcmQgZm9yIHRoZSBTU0wgb3IgU1NIIHByaXZhdGUga2V5ICovCi0gIENJTklUKEtFWVBBU1NXRCwgU1RSSU5HUE9JTlQsIDI2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0tFWVBBU1NXRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2KSwKIAogICAvKiBzZW5kIFRZUEUgcGFyYW1ldGVyPyAqLwotICBDSU5JVChDUkxGLCBMT05HLCAyNyksCisgIENVUkxPUFQoQ1VSTE9QVF9DUkxGLCBDVVJMT1BUVFlQRV9MT05HLCAyNyksCiAKICAgLyogc2VuZCBsaW5rZWQtbGlzdCBvZiBRVU9URSBjb21tYW5kcyAqLwotICBDSU5JVChRVU9URSwgT0JKRUNUUE9JTlQsIDI4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1FVT1RFLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAyOCksCiAKICAgLyogc2VuZCBGSUxFICogb3Igdm9pZCAqIHRvIHN0b3JlIGhlYWRlcnMgdG8sIGlmIHlvdSB1c2UgYSBjYWxsYmFjayBpdAogICAgICBpcyBzaW1wbHkgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayB1bm1vZGlmaWVkICovCi0gIENJTklUKEhFQURFUkRBVEEsIE9CSkVDVFBPSU5ULCAyOSksCisgIENVUkxPUFQoQ1VSTE9QVF9IRUFERVJEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjkpLAogCiAgIC8qIHBvaW50IHRvIGEgZmlsZSB0byByZWFkIHRoZSBpbml0aWFsIGNvb2tpZXMgZnJvbSwgYWxzbyBlbmFibGVzCiAgICAgICJjb29raWUgYXdhcmVuZXNzIiAqLwotICBDSU5JVChDT09LSUVGSUxFLCBTVFJJTkdQT0lOVCwgMzEpLAorICBDVVJMT1BUKENVUkxPUFRfQ09PS0lFRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDMxKSwKIAogICAvKiBXaGF0IHZlcnNpb24gdG8gc3BlY2lmaWNhbGx5IHRyeSB0byB1c2UuCiAgICAgIFNlZSBDVVJMX1NTTFZFUlNJT04gZGVmaW5lcyBiZWxvdy4gKi8KLSAgQ0lOSVQoU1NMVkVSU0lPTiwgTE9ORywgMzIpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMVkVSU0lPTiwgQ1VSTE9QVFRZUEVfTE9ORywgMzIpLAogCiAgIC8qIFdoYXQga2luZCBvZiBIVFRQIHRpbWUgY29uZGl0aW9uIHRvIHVzZSwgc2VlIGRlZmluZXMgKi8KLSAgQ0lOSVQoVElNRUNPTkRJVElPTiwgTE9ORywgMzMpLAorICBDVVJMT1BUKENVUkxPUFRfVElNRUNPTkRJVElPTiwgQ1VSTE9QVFRZUEVfTE9ORywgMzMpLAogCiAgIC8qIFRpbWUgdG8gdXNlIHdpdGggdGhlIGFib3ZlIGNvbmRpdGlvbi4gU3BlY2lmaWVkIGluIG51bWJlciBvZiBzZWNvbmRzCiAgICAgIHNpbmNlIDEgSmFuIDE5NzAgKi8KLSAgQ0lOSVQoVElNRVZBTFVFLCBMT05HLCAzNCksCisgIENVUkxPUFQoQ1VSTE9QVF9USU1FVkFMVUUsIENVUkxPUFRUWVBFX0xPTkcsIDM0KSwKIAogICAvKiAzNSA9IE9CU09MRVRFICovCiAKQEAgLTEwODksMzcgKzEwODgsNTggQEAKICAgICAgSFRUUDogREVMRVRFLCBUUkFDRSBhbmQgb3RoZXJzCiAgICAgIEZUUDogdG8gdXNlIGEgZGlmZmVyZW50IGxpc3QgY29tbWFuZAogICAgICAqLwotICBDSU5JVChDVVNUT01SRVFVRVNULCBTVFJJTkdQT0lOVCwgMzYpLAorICBDVVJMT1BUKENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDM2KSwKIAogICAvKiBGSUxFIGhhbmRsZSB0byB1c2UgaW5zdGVhZCBvZiBzdGRlcnIgKi8KLSAgQ0lOSVQoU1RERVJSLCBPQkpFQ1RQT0lOVCwgMzcpLAorICBDVVJMT1BUKENVUkxPUFRfU1RERVJSLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMzcpLAogCiAgIC8qIDM4IGlzIG5vdCB1c2VkICovCiAKICAgLyogc2VuZCBsaW5rZWQtbGlzdCBvZiBwb3N0LXRyYW5zZmVyIFFVT1RFIGNvbW1hbmRzICovCi0gIENJTklUKFBPU1RRVU9URSwgT0JKRUNUUE9JTlQsIDM5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1RRVU9URSwgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgMzkpLAogCi0gIENJTklUKE9CU09MRVRFNDAsIE9CSkVDVFBPSU5ULCA0MCksIC8qIE9CU09MRVRFLCBkbyBub3QgdXNlISAqLworICAgLyogT0JTT0xFVEUsIGRvIG5vdCB1c2UhICovCisgIENVUkxPUFQoQ1VSTE9QVF9PQlNPTEVURTQwLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgNDApLAogCi0gIENJTklUKFZFUkJPU0UsIExPTkcsIDQxKSwgICAgICAvKiB0YWxrIGEgbG90ICovCi0gIENJTklUKEhFQURFUiwgTE9ORywgNDIpLCAgICAgICAvKiB0aHJvdyB0aGUgaGVhZGVyIG91dCB0b28gKi8KLSAgQ0lOSVQoTk9QUk9HUkVTUywgTE9ORywgNDMpLCAgIC8qIHNodXQgb2ZmIHRoZSBwcm9ncmVzcyBtZXRlciAqLwotICBDSU5JVChOT0JPRFksIExPTkcsIDQ0KSwgICAgICAgLyogdXNlIEhFQUQgdG8gZ2V0IGh0dHAgZG9jdW1lbnQgKi8KLSAgQ0lOSVQoRkFJTE9ORVJST1IsIExPTkcsIDQ1KSwgIC8qIG5vIG91dHB1dCBvbiBodHRwIGVycm9yIGNvZGVzID49IDQwMCAqLwotICBDSU5JVChVUExPQUQsIExPTkcsIDQ2KSwgICAgICAgLyogdGhpcyBpcyBhbiB1cGxvYWQgKi8KLSAgQ0lOSVQoUE9TVCwgTE9ORywgNDcpLCAgICAgICAgIC8qIEhUVFAgUE9TVCBtZXRob2QgKi8KLSAgQ0lOSVQoRElSTElTVE9OTFksIExPTkcsIDQ4KSwgIC8qIGJhcmUgbmFtZXMgd2hlbiBsaXN0aW5nIGRpcmVjdG9yaWVzICovCisgIC8qIHRhbGsgYSBsb3QgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1ZFUkJPU0UsIENVUkxPUFRUWVBFX0xPTkcsIDQxKSwKIAotICBDSU5JVChBUFBFTkQsIExPTkcsIDUwKSwgICAgICAgLyogQXBwZW5kIGluc3RlYWQgb2Ygb3ZlcndyaXRlIG9uIHVwbG9hZCEgKi8KKyAgLyogdGhyb3cgdGhlIGhlYWRlciBvdXQgdG9vICovCisgIENVUkxPUFQoQ1VSTE9QVF9IRUFERVIsIENVUkxPUFRUWVBFX0xPTkcsIDQyKSwKKworICAvKiBzaHV0IG9mZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX05PUFJPR1JFU1MsIENVUkxPUFRUWVBFX0xPTkcsIDQzKSwKKworICAvKiB1c2UgSEVBRCB0byBnZXQgaHR0cCBkb2N1bWVudCAqLworICBDVVJMT1BUKENVUkxPUFRfTk9CT0RZLCBDVVJMT1BUVFlQRV9MT05HLCA0NCksCisKKyAgLyogbm8gb3V0cHV0IG9uIGh0dHAgZXJyb3IgY29kZXMgPj0gNDAwICovCisgIENVUkxPUFQoQ1VSTE9QVF9GQUlMT05FUlJPUiwgQ1VSTE9QVFRZUEVfTE9ORywgNDUpLAorCisgIC8qIHRoaXMgaXMgYW4gdXBsb2FkICovCisgIENVUkxPUFQoQ1VSTE9QVF9VUExPQUQsIENVUkxPUFRUWVBFX0xPTkcsIDQ2KSwKKworICAvKiBIVFRQIFBPU1QgbWV0aG9kICovCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NULCBDVVJMT1BUVFlQRV9MT05HLCA0NyksCisKKyAgLyogYmFyZSBuYW1lcyB3aGVuIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0RJUkxJU1RPTkxZLCBDVVJMT1BUVFlQRV9MT05HLCA0OCksCisKKyAgLyogQXBwZW5kIGluc3RlYWQgb2Ygb3ZlcndyaXRlIG9uIHVwbG9hZCEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0FQUEVORCwgQ1VSTE9QVFRZUEVfTE9ORywgNTApLAogCiAgIC8qIFNwZWNpZnkgd2hldGhlciB0byByZWFkIHRoZSB1c2VyK3Bhc3N3b3JkIGZyb20gdGhlIC5uZXRyYyBvciB0aGUgVVJMLgogICAgKiBUaGlzIG11c3QgYmUgb25lIG9mIHRoZSBDVVJMX05FVFJDXyogZW51bXMgYmVsb3cuICovCi0gIENJTklUKE5FVFJDLCBMT05HLCA1MSksCisgIENVUkxPUFQoQ1VSTE9QVF9ORVRSQywgQ1VSTE9QVFRZUEVfTE9ORywgNTEpLAogCi0gIENJTklUKEZPTExPV0xPQ0FUSU9OLCBMT05HLCA1MiksICAvKiB1c2UgTG9jYXRpb246IEx1a2UhICovCisgIC8qIHVzZSBMb2NhdGlvbjogTHVrZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCBDVVJMT1BUVFlQRV9MT05HLCA1MiksCiAKLSAgQ0lOSVQoVFJBTlNGRVJURVhULCBMT05HLCA1MyksIC8qIHRyYW5zZmVyIGRhdGEgaW4gdGV4dC9BU0NJSSBmb3JtYXQgKi8KLSAgQ0lOSVQoUFVULCBMT05HLCA1NCksICAgICAgICAgIC8qIEhUVFAgUFVUICovCisgICAvKiB0cmFuc2ZlciBkYXRhIGluIHRleHQvQVNDSUkgZm9ybWF0ICovCisgIENVUkxPUFQoQ1VSTE9QVF9UUkFOU0ZFUlRFWFQsIENVUkxPUFRUWVBFX0xPTkcsIDUzKSwKKworICAvKiBIVFRQIFBVVCAqLworICBDVVJMT1BUKENVUkxPUFRfUFVULCBDVVJMT1BUVFlQRV9MT05HLCA1NCksCiAKICAgLyogNTUgPSBPQlNPTEVURSAqLwogCkBAIC0xMTI3LDI2NSArMTE0NywyNjcgQEAKICAgICogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBwcm9ncmVzcyBkaXNwbGF5CiAgICAqIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrCiAgICAqIHByb3RvdHlwZSBkZWZpbmVzLiAqLwotICBDSU5JVChQUk9HUkVTU0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCA1NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCA1NiksCiAKICAgLyogRGF0YSBwYXNzZWQgdG8gdGhlIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiBhbmQgQ1VSTE9QVF9YRkVSSU5GT0ZVTkNUSU9OCiAgICAgIGNhbGxiYWNrcyAqLwotICBDSU5JVChQUk9HUkVTU0RBVEEsIE9CSkVDVFBPSU5ULCA1NyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9HUkVTU0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCA1NyksCiAjZGVmaW5lIENVUkxPUFRfWEZFUklORk9EQVRBIENVUkxPUFRfUFJPR1JFU1NEQVRBCiAKICAgLyogV2Ugd2FudCB0aGUgcmVmZXJyZXIgZmllbGQgc2V0IGF1dG9tYXRpY2FsbHkgd2hlbiBmb2xsb3dpbmcgbG9jYXRpb25zICovCi0gIENJTklUKEFVVE9SRUZFUkVSLCBMT05HLCA1OCksCisgIENVUkxPUFQoQ1VSTE9QVF9BVVRPUkVGRVJFUiwgQ1VSTE9QVFRZUEVfTE9ORywgNTgpLAogCiAgIC8qIFBvcnQgb2YgdGhlIHByb3h5LCBjYW4gYmUgc2V0IGluIHRoZSBwcm94eSBzdHJpbmcgYXMgd2VsbCB3aXRoOgogICAgICAiW2hvc3RdOltwb3J0XSIgKi8KLSAgQ0lOSVQoUFJPWFlQT1JULCBMT05HLCA1OSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWVBPUlQsIENVUkxPUFRUWVBFX0xPTkcsIDU5KSwKIAogICAvKiBzaXplIG9mIHRoZSBQT1NUIGlucHV0IGRhdGEsIGlmIHN0cmxlbigpIGlzIG5vdCBnb29kIHRvIHVzZSAqLwotICBDSU5JVChQT1NURklFTERTSVpFLCBMT05HLCA2MCksCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NURklFTERTSVpFLCBDVVJMT1BUVFlQRV9MT05HLCA2MCksCiAKICAgLyogdHVubmVsIG5vbi1odHRwIG9wZXJhdGlvbnMgdGhyb3VnaCBhIEhUVFAgcHJveHkgKi8KLSAgQ0lOSVQoSFRUUFBST1hZVFVOTkVMLCBMT05HLCA2MSksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUwsIENVUkxPUFRUWVBFX0xPTkcsIDYxKSwKIAogICAvKiBTZXQgdGhlIGludGVyZmFjZSBzdHJpbmcgdG8gdXNlIGFzIG91dGdvaW5nIG5ldHdvcmsgaW50ZXJmYWNlICovCi0gIENJTklUKElOVEVSRkFDRSwgU1RSSU5HUE9JTlQsIDYyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lOVEVSRkFDRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDYyKSwKIAogICAvKiBTZXQgdGhlIGtyYjQvNSBzZWN1cml0eSBsZXZlbCwgdGhpcyBhbHNvIGVuYWJsZXMga3JiNC81IGF3YXJlbmVzcy4gIFRoaXMKICAgICogaXMgYSBzdHJpbmcsICdjbGVhcicsICdzYWZlJywgJ2NvbmZpZGVudGlhbCcgb3IgJ3ByaXZhdGUnLiAgSWYgdGhlIHN0cmluZwogICAgKiBpcyBzZXQgYnV0IGRvZXNuJ3QgbWF0Y2ggb25lIG9mIHRoZXNlLCAncHJpdmF0ZScgd2lsbCBiZSB1c2VkLiAgKi8KLSAgQ0lOSVQoS1JCTEVWRUwsIFNUUklOR1BPSU5ULCA2MyksCisgIENVUkxPUFQoQ1VSTE9QVF9LUkJMRVZFTCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDYzKSwKIAogICAvKiBTZXQgaWYgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgcGVlciBpbiBzc2wgaGFuZHNoYWtlLCBzZXQgMSB0byB2ZXJpZnkuICovCi0gIENJTklUKFNTTF9WRVJJRllQRUVSLCBMT05HLCA2NCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgQ1VSTE9QVFRZUEVfTE9ORywgNjQpLAogCiAgIC8qIFRoZSBDQXBhdGggb3IgQ0FmaWxlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBlZXIgY2VydGlmaWNhdGUKICAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFNTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KLSAgQ0lOSVQoQ0FJTkZPLCBTVFJJTkdQT0lOVCwgNjUpLAorICBDVVJMT1BUKENVUkxPUFRfQ0FJTkZPLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNjUpLAogCiAgIC8qIDY2ID0gT0JTT0xFVEUgKi8KICAgLyogNjcgPSBPQlNPTEVURSAqLwogCiAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGh0dHAgcmVkaXJlY3RzIHRvIGZvbGxvdyAqLwotICBDSU5JVChNQVhSRURJUlMsIExPTkcsIDY4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BWFJFRElSUywgQ1VSTE9QVFRZUEVfTE9ORywgNjgpLAogCiAgIC8qIFBhc3MgYSBsb25nIHNldCB0byAxIHRvIGdldCB0aGUgZGF0ZSBvZiB0aGUgcmVxdWVzdGVkIGRvY3VtZW50IChpZgogICAgICBwb3NzaWJsZSkhIFBhc3MgYSB6ZXJvIHRvIHNodXQgaXQgb2ZmLiAqLwotICBDSU5JVChGSUxFVElNRSwgTE9ORywgNjkpLAorICBDVVJMT1BUKENVUkxPUFRfRklMRVRJTUUsIENVUkxPUFRUWVBFX0xPTkcsIDY5KSwKIAogICAvKiBUaGlzIHBvaW50cyB0byBhIGxpbmtlZCBsaXN0IG9mIHRlbG5ldCBvcHRpb25zICovCi0gIENJTklUKFRFTE5FVE9QVElPTlMsIE9CSkVDVFBPSU5ULCA3MCksCisgIENVUkxPUFQoQ1VSTE9QVF9URUxORVRPUFRJT05TLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCA3MCksCiAKICAgLyogTWF4IGFtb3VudCBvZiBjYWNoZWQgYWxpdmUgY29ubmVjdGlvbnMgKi8KLSAgQ0lOSVQoTUFYQ09OTkVDVFMsIExPTkcsIDcxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BWENPTk5FQ1RTLCBDVVJMT1BUVFlQRV9MT05HLCA3MSksCiAKLSAgQ0lOSVQoT0JTT0xFVEU3MiwgTE9ORywgNzIpLCAvKiBPQlNPTEVURSwgZG8gbm90IHVzZSEgKi8KKyAgLyogT0JTT0xFVEUsIGRvIG5vdCB1c2UhICovCisgIENVUkxPUFQoQ1VSTE9QVF9PQlNPTEVURTcyLCBDVVJMT1BUVFlQRV9MT05HLCA3MiksCiAKICAgLyogNzMgPSBPQlNPTEVURSAqLwogCiAgIC8qIFNldCB0byBleHBsaWNpdGx5IHVzZSBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGUgdXBjb21pbmcgdHJhbnNmZXIuCiAgICAgIERvIG5vdCB1c2UgdGhpcyB1bmxlc3MgeW91J3JlIGFic29sdXRlbHkgc3VyZSBvZiB0aGlzLCBhcyBpdCBtYWtlcyB0aGUKICAgICAgb3BlcmF0aW9uIHNsb3dlciBhbmQgaXMgbGVzcyBmcmllbmRseSBmb3IgdGhlIG5ldHdvcmsuICovCi0gIENJTklUKEZSRVNIX0NPTk5FQ1QsIExPTkcsIDc0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZSRVNIX0NPTk5FQ1QsIENVUkxPUFRUWVBFX0xPTkcsIDc0KSwKIAogICAvKiBTZXQgdG8gZXhwbGljaXRseSBmb3JiaWQgdGhlIHVwY29taW5nIHRyYW5zZmVyJ3MgY29ubmVjdGlvbiB0byBiZSByZS11c2VkCiAgICAgIHdoZW4gZG9uZS4gRG8gbm90IHVzZSB0aGlzIHVubGVzcyB5b3UncmUgYWJzb2x1dGVseSBzdXJlIG9mIHRoaXMsIGFzIGl0CiAgICAgIG1ha2VzIHRoZSBvcGVyYXRpb24gc2xvd2VyIGFuZCBpcyBsZXNzIGZyaWVuZGx5IGZvciB0aGUgbmV0d29yay4gKi8KLSAgQ0lOSVQoRk9SQklEX1JFVVNFLCBMT05HLCA3NSksCisgIENVUkxPUFQoQ1VSTE9QVF9GT1JCSURfUkVVU0UsIENVUkxPUFRUWVBFX0xPTkcsIDc1KSwKIAogICAvKiBTZXQgdG8gYSBmaWxlIG5hbWUgdGhhdCBjb250YWlucyByYW5kb20gZGF0YSBmb3IgbGliY3VybCB0byB1c2UgdG8KICAgICAgc2VlZCB0aGUgcmFuZG9tIGVuZ2luZSB3aGVuIGRvaW5nIFNTTCBjb25uZWN0cy4gKi8KLSAgQ0lOSVQoUkFORE9NX0ZJTEUsIFNUUklOR1BPSU5ULCA3NiksCisgIENVUkxPUFQoQ1VSTE9QVF9SQU5ET01fRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDc2KSwKIAogICAvKiBTZXQgdG8gdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KLSAgQ0lOSVQoRUdEU09DS0VULCBTVFJJTkdQT0lOVCwgNzcpLAorICBDVVJMT1BUKENVUkxPUFRfRUdEU09DS0VULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNzcpLAogCiAgIC8qIFRpbWUtb3V0IGNvbm5lY3Qgb3BlcmF0aW9ucyBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzLCBpZiBjb25uZWN0cyBhcmUKICAgICAgT0sgd2l0aGluIHRoaXMgdGltZSwgdGhlbiBmaW5lLi4uIFRoaXMgb25seSBhYm9ydHMgdGhlIGNvbm5lY3QgcGhhc2UuICovCi0gIENJTklUKENPTk5FQ1RUSU1FT1VULCBMT05HLCA3OCksCisgIENVUkxPUFQoQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgQ1VSTE9QVFRZUEVfTE9ORywgNzgpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gc3RvcmUgaGVhZGVycyAoaW5zdGVhZCBvZiBmd3JpdGUpLiBUaGUKICAgICogcGFyYW1ldGVycyB3aWxsIHVzZSBmd3JpdGUoKSBzeW50YXgsIG1ha2Ugc3VyZSB0byBmb2xsb3cgdGhlbS4gKi8KLSAgQ0lOSVQoSEVBREVSRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDc5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCA3OSksCiAKICAgLyogU2V0IHRoaXMgdG8gZm9yY2UgdGhlIEhUVFAgcmVxdWVzdCB0byBnZXQgYmFjayB0byBHRVQuIE9ubHkgcmVhbGx5IHVzYWJsZQogICAgICBpZiBQT1NULCBQVVQgb3IgYSBjdXN0b20gcmVxdWVzdCBoYXZlIGJlZW4gdXNlZCBmaXJzdC4KICAgICovCi0gIENJTklUKEhUVFBHRVQsIExPTkcsIDgwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBHRVQsIENVUkxPUFRUWVBFX0xPTkcsIDgwKSwKIAogICAvKiBTZXQgaWYgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgQ29tbW9uIG5hbWUgZnJvbSB0aGUgcGVlciBjZXJ0aWZpY2F0ZSBpbiBzc2wKICAgICogaGFuZHNoYWtlLCBzZXQgMSB0byBjaGVjayBleGlzdGVuY2UsIDIgdG8gZW5zdXJlIHRoYXQgaXQgbWF0Y2hlcyB0aGUKICAgICogcHJvdmlkZWQgaG9zdG5hbWUuICovCi0gIENJTklUKFNTTF9WRVJJRllIT1NULCBMT05HLCA4MSksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgQ1VSTE9QVFRZUEVfTE9ORywgODEpLAogCiAgIC8qIFNwZWNpZnkgd2hpY2ggZmlsZSBuYW1lIHRvIHdyaXRlIGFsbCBrbm93biBjb29raWVzIGluIGFmdGVyIGNvbXBsZXRlZAogICAgICBvcGVyYXRpb24uIFNldCBmaWxlIG5hbWUgdG8gIi0iIChkYXNoKSB0byBtYWtlIGl0IGdvIHRvIHN0ZG91dC4gKi8KLSAgQ0lOSVQoQ09PS0lFSkFSLCBTVFJJTkdQT0lOVCwgODIpLAorICBDVVJMT1BUKENVUkxPUFRfQ09PS0lFSkFSLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODIpLAogCiAgIC8qIFNwZWNpZnkgd2hpY2ggU1NMIGNpcGhlcnMgdG8gdXNlICovCi0gIENJTklUKFNTTF9DSVBIRVJfTElTVCwgU1RSSU5HUE9JTlQsIDgzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9DSVBIRVJfTElTVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDgzKSwKIAogICAvKiBTcGVjaWZ5IHdoaWNoIEhUVFAgdmVyc2lvbiB0byB1c2UhIFRoaXMgbXVzdCBiZSBzZXQgdG8gb25lIG9mIHRoZQogICAgICBDVVJMX0hUVFBfVkVSU0lPTiogZW51bXMgc2V0IGJlbG93LiAqLwotICBDSU5JVChIVFRQX1ZFUlNJT04sIExPTkcsIDg0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBfVkVSU0lPTiwgQ1VSTE9QVFRZUEVfTE9ORywgODQpLAogCiAgIC8qIFNwZWNpZmljYWxseSBzd2l0Y2ggb24gb3Igb2ZmIHRoZSBGVFAgZW5naW5lJ3MgdXNlIG9mIHRoZSBFUFNWIGNvbW1hbmQuIEJ5CiAgICAgIGRlZmF1bHQsIHRoYXQgb25lIHdpbGwgYWx3YXlzIGJlIGF0dGVtcHRlZCBiZWZvcmUgdGhlIG1vcmUgdHJhZGl0aW9uYWwKICAgICAgUEFTViBjb21tYW5kLiAqLwotICBDSU5JVChGVFBfVVNFX0VQU1YsIExPTkcsIDg1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9VU0VfRVBTViwgQ1VSTE9QVFRZUEVfTE9ORywgODUpLAogCiAgIC8qIHR5cGUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIFNTTC1jZXJ0aWZpY2F0ZSAoIkRFUiIsICJQRU0iLCAiRU5HIikgKi8KLSAgQ0lOSVQoU1NMQ0VSVFRZUEUsIFNUUklOR1BPSU5ULCA4NiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xDRVJUVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDg2KSwKIAogICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1rZXkgKi8KLSAgQ0lOSVQoU1NMS0VZLCBTVFJJTkdQT0lOVCwgODcpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODcpLAogCiAgIC8qIHR5cGUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWtleSAoIkRFUiIsICJQRU0iLCAiRU5HIikgKi8KLSAgQ0lOSVQoU1NMS0VZVFlQRSwgU1RSSU5HUE9JTlQsIDg4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTEtFWVRZUEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA4OCksCiAKICAgLyogY3J5cHRvIGVuZ2luZSBmb3IgdGhlIFNTTC1zdWIgc3lzdGVtICovCi0gIENJTklUKFNTTEVOR0lORSwgU1RSSU5HUE9JTlQsIDg5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTEVOR0lORSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDg5KSwKIAogICAvKiBzZXQgdGhlIGNyeXB0byBlbmdpbmUgZm9yIHRoZSBTU0wtc3ViIHN5c3RlbSBhcyBkZWZhdWx0CiAgICAgIHRoZSBwYXJhbSBoYXMgbm8gbWVhbmluZy4uLgogICAgKi8KLSAgQ0lOSVQoU1NMRU5HSU5FX0RFRkFVTFQsIExPTkcsIDkwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTEVOR0lORV9ERUZBVUxULCBDVVJMT1BUVFlQRV9MT05HLCA5MCksCiAKICAgLyogTm9uLXplcm8gdmFsdWUgbWVhbnMgdG8gdXNlIHRoZSBnbG9iYWwgZG5zIGNhY2hlICovCi0gIENJTklUKEROU19VU0VfR0xPQkFMX0NBQ0hFLCBMT05HLCA5MSksIC8qIERFUFJFQ0FURUQsIGRvIG5vdCB1c2UhICovCisgIC8qIERFUFJFQ0FURUQsIGRvIG5vdCB1c2UhICovCisgIENVUkxPUFQoQ1VSTE9QVF9ETlNfVVNFX0dMT0JBTF9DQUNIRSwgQ1VSTE9QVFRZUEVfTE9ORywgOTEpLAogCiAgIC8qIEROUyBjYWNoZSB0aW1lb3V0ICovCi0gIENJTklUKEROU19DQUNIRV9USU1FT1VULCBMT05HLCA5MiksCisgIENVUkxPUFQoQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCwgQ1VSTE9QVFRZUEVfTE9ORywgOTIpLAogCiAgIC8qIHNlbmQgbGlua2VkLWxpc3Qgb2YgcHJlLXRyYW5zZmVyIFFVT1RFIGNvbW1hbmRzICovCi0gIENJTklUKFBSRVFVT1RFLCBPQkpFQ1RQT0lOVCwgOTMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJFUVVPVEUsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDkzKSwKIAogICAvKiBzZXQgdGhlIGRlYnVnIGZ1bmN0aW9uICovCi0gIENJTklUKERFQlVHRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDk0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RFQlVHRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDk0KSwKIAogICAvKiBzZXQgdGhlIGRhdGEgZm9yIHRoZSBkZWJ1ZyBmdW5jdGlvbiAqLwotICBDSU5JVChERUJVR0RBVEEsIE9CSkVDVFBPSU5ULCA5NSksCisgIENVUkxPUFQoQ1VSTE9QVF9ERUJVR0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCA5NSksCiAKICAgLyogbWFyayB0aGlzIGFzIHN0YXJ0IG9mIGEgY29va2llIHNlc3Npb24gKi8KLSAgQ0lOSVQoQ09PS0lFU0VTU0lPTiwgTE9ORywgOTYpLAorICBDVVJMT1BUKENVUkxPUFRfQ09PS0lFU0VTU0lPTiwgQ1VSTE9QVFRZUEVfTE9ORywgOTYpLAogCiAgIC8qIFRoZSBDQXBhdGggZGlyZWN0b3J5IHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBlZXIgY2VydGlmaWNhdGUKICAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFNTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KLSAgQ0lOSVQoQ0FQQVRILCBTVFJJTkdQT0lOVCwgOTcpLAorICBDVVJMT1BUKENVUkxPUFRfQ0FQQVRILCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgOTcpLAogCiAgIC8qIEluc3RydWN0IGxpYmN1cmwgdG8gdXNlIGEgc21hbGxlciByZWNlaXZlIGJ1ZmZlciAqLwotICBDSU5JVChCVUZGRVJTSVpFLCBMT05HLCA5OCksCisgIENVUkxPUFQoQ1VSTE9QVF9CVUZGRVJTSVpFLCBDVVJMT1BUVFlQRV9MT05HLCA5OCksCiAKICAgLyogSW5zdHJ1Y3QgbGliY3VybCB0byBub3QgdXNlIGFueSBzaWduYWwvYWxhcm0gaGFuZGxlcnMsIGV2ZW4gd2hlbiB1c2luZwogICAgICB0aW1lb3V0cy4gVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuCiAgICAgIFNlZSBsaWJjdXJsLXRoZS1ndWlkZSBmb3IgbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLiAqLwotICBDSU5JVChOT1NJR05BTCwgTE9ORywgOTkpLAorICBDVVJMT1BUKENVUkxPUFRfTk9TSUdOQUwsIENVUkxPUFRUWVBFX0xPTkcsIDk5KSwKIAogICAvKiBQcm92aWRlIGEgQ1VSTFNoYXJlIGZvciBtdXRleGluZyBub24tdHMgZGF0YSAqLwotICBDSU5JVChTSEFSRSwgT0JKRUNUUE9JTlQsIDEwMCksCisgIENVUkxPUFQoQ1VSTE9QVF9TSEFSRSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDEwMCksCiAKICAgLyogaW5kaWNhdGVzIHR5cGUgb2YgcHJveHkuIGFjY2VwdGVkIHZhbHVlcyBhcmUgQ1VSTFBST1hZX0hUVFAgKGRlZmF1bHQpLAogICAgICBDVVJMUFJPWFlfSFRUUFMsIENVUkxQUk9YWV9TT0NLUzQsIENVUkxQUk9YWV9TT0NLUzRBIGFuZAogICAgICBDVVJMUFJPWFlfU09DS1M1LiAqLwotICBDSU5JVChQUk9YWVRZUEUsIExPTkcsIDEwMSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxPUFRUWVBFX0xPTkcsIDEwMSksCiAKICAgLyogU2V0IHRoZSBBY2NlcHQtRW5jb2Rpbmcgc3RyaW5nLiBVc2UgdGhpcyB0byB0ZWxsIGEgc2VydmVyIHlvdSB3b3VsZCBsaWtlCiAgICAgIHRoZSByZXNwb25zZSB0byBiZSBjb21wcmVzc2VkLiBCZWZvcmUgNy4yMS42LCB0aGlzIHdhcyBrbm93biBhcwogICAgICBDVVJMT1BUX0VOQ09ESU5HICovCi0gIENJTklUKEFDQ0VQVF9FTkNPRElORywgU1RSSU5HUE9JTlQsIDEwMiksCisgIENVUkxPUFQoQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxMDIpLAogCiAgIC8qIFNldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotICBDSU5JVChQUklWQVRFLCBPQkpFQ1RQT0lOVCwgMTAzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BSSVZBVEUsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMDMpLAogCiAgIC8qIFNldCBhbGlhc2VzIGZvciBIVFRQIDIwMCBpbiB0aGUgSFRUUCBSZXNwb25zZSBoZWFkZXIgKi8KLSAgQ0lOSVQoSFRUUDIwMEFMSUFTRVMsIE9CSkVDVFBPSU5ULCAxMDQpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUDIwMEFMSUFTRVMsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDEwNCksCiAKICAgLyogQ29udGludWUgdG8gc2VuZCBhdXRoZW50aWNhdGlvbiAodXNlcitwYXNzd29yZCkgd2hlbiBmb2xsb3dpbmcgbG9jYXRpb25zLAogICAgICBldmVuIHdoZW4gaG9zdG5hbWUgY2hhbmdlZC4gVGhpcyBjYW4gcG90ZW50aWFsbHkgc2VuZCBvZmYgdGhlIG5hbWUKICAgICAgYW5kIHBhc3N3b3JkIHRvIHdoYXRldmVyIGhvc3QgdGhlIHNlcnZlciBkZWNpZGVzLiAqLwotICBDSU5JVChVTlJFU1RSSUNURURfQVVUSCwgTE9ORywgMTA1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1VOUkVTVFJJQ1RFRF9BVVRILCBDVVJMT1BUVFlQRV9MT05HLCAxMDUpLAogCiAgIC8qIFNwZWNpZmljYWxseSBzd2l0Y2ggb24gb3Igb2ZmIHRoZSBGVFAgZW5naW5lJ3MgdXNlIG9mIHRoZSBFUFJUIGNvbW1hbmQgKAogICAgICBpdCBhbHNvIGRpc2FibGVzIHRoZSBMUFJUIGF0dGVtcHQpLiBCeSBkZWZhdWx0LCB0aG9zZSBvbmVzIHdpbGwgYWx3YXlzIGJlCiAgICAgIGF0dGVtcHRlZCBiZWZvcmUgdGhlIGdvb2Qgb2xkIHRyYWRpdGlvbmFsIFBPUlQgY29tbWFuZC4gKi8KLSAgQ0lOSVQoRlRQX1VTRV9FUFJULCBMT05HLCAxMDYpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1VTRV9FUFJULCBDVVJMT1BUVFlQRV9MT05HLCAxMDYpLAogCiAgIC8qIFNldCB0aGlzIHRvIGEgYml0bWFzayB2YWx1ZSB0byBlbmFibGUgdGhlIHBhcnRpY3VsYXIgYXV0aGVudGljYXRpb25zCiAgICAgIG1ldGhvZHMgeW91IGxpa2UuIFVzZSB0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggQ1VSTE9QVF9VU0VSUFdELgogICAgICBOb3RlIHRoYXQgc2V0dGluZyBtdWx0aXBsZSBiaXRzIG1heSBjYXVzZSBleHRyYSBuZXR3b3JrIHJvdW5kLXRyaXBzLiAqLwotICBDSU5JVChIVFRQQVVUSCwgTE9ORywgMTA3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBBVVRILCBDVVJMT1BUVFlQRV9MT05HLCAxMDcpLAogCi0gIC8qIFNldCB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgZnVuY3Rpb24sIGN1cnJlbnRseSBvbmx5IGZvciBPcGVuU1NMIHNzbF9jdHgKLSAgICAgaW4gc2Vjb25kIGFyZ3VtZW50LiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBtYXRjaGluZyB0aGUKLSAgICAgY3VybF9zc2xfY3R4X2NhbGxiYWNrIHByb3RvLiAqLwotICBDSU5JVChTU0xfQ1RYX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxMDgpLAorICAvKiBTZXQgdGhlIHNzbCBjb250ZXh0IGNhbGxiYWNrIGZ1bmN0aW9uLCBjdXJyZW50bHkgb25seSBmb3IgT3BlblNTTCBvcgorICAgICBXb2xmU1NMIHNzbF9jdHgsIG9yIG1iZWRUTFMgbWJlZHRsc19zc2xfY29uZmlnIGluIHRoZSBzZWNvbmQgYXJndW1lbnQuCisgICAgIFRoZSBmdW5jdGlvbiBtdXN0IG1hdGNoIHRoZSBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgcHJvdG90eXBlLiAqLworICBDVVJMT1BUKENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTA4KSwKIAogICAvKiBTZXQgdGhlIHVzZXJkYXRhIGZvciB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgZnVuY3Rpb24ncyB0aGlyZAogICAgICBhcmd1bWVudCAqLwotICBDSU5JVChTU0xfQ1RYX0RBVEEsIE9CSkVDVFBPSU5ULCAxMDkpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMX0NUWF9EQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTA5KSwKIAogICAvKiBGVFAgT3B0aW9uIHRoYXQgY2F1c2VzIG1pc3NpbmcgZGlycyB0byBiZSBjcmVhdGVkIG9uIHRoZSByZW1vdGUgc2VydmVyLgogICAgICBJbiA3LjE5LjQgd2UgaW50cm9kdWNlZCB0aGUgY29udmVuaWVuY2UgZW51bXMgZm9yIHRoaXMgb3B0aW9uIHVzaW5nIHRoZQogICAgICBDVVJMRlRQX0NSRUFURV9ESVIgcHJlZml4LgogICAqLwotICBDSU5JVChGVFBfQ1JFQVRFX01JU1NJTkdfRElSUywgTE9ORywgMTEwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9DUkVBVEVfTUlTU0lOR19ESVJTLCBDVVJMT1BUVFlQRV9MT05HLCAxMTApLAogCiAgIC8qIFNldCB0aGlzIHRvIGEgYml0bWFzayB2YWx1ZSB0byBlbmFibGUgdGhlIHBhcnRpY3VsYXIgYXV0aGVudGljYXRpb25zCiAgICAgIG1ldGhvZHMgeW91IGxpa2UuIFVzZSB0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggQ1VSTE9QVF9QUk9YWVVTRVJQV0QuCiAgICAgIE5vdGUgdGhhdCBzZXR0aW5nIG11bHRpcGxlIGJpdHMgbWF5IGNhdXNlIGV4dHJhIG5ldHdvcmsgcm91bmQtdHJpcHMuICovCi0gIENJTklUKFBST1hZQVVUSCwgTE9ORywgMTExKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZQVVUSCwgQ1VSTE9QVFRZUEVfTE9ORywgMTExKSwKIAogICAvKiBGVFAgb3B0aW9uIHRoYXQgY2hhbmdlcyB0aGUgdGltZW91dCwgaW4gc2Vjb25kcywgYXNzb2NpYXRlZCB3aXRoCiAgICAgIGdldHRpbmcgYSByZXNwb25zZS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdHJhbnNmZXIgdGltZW91dCB0aW1lIGFuZAogICAgICBlc3NlbnRpYWxseSBwbGFjZXMgYSBkZW1hbmQgb24gdGhlIEZUUCBzZXJ2ZXIgdG8gYWNrbm93bGVkZ2UgY29tbWFuZHMKICAgICAgaW4gYSB0aW1lbHkgbWFubmVyLiAqLwotICBDSU5JVChGVFBfUkVTUE9OU0VfVElNRU9VVCwgTE9ORywgMTEyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9SRVNQT05TRV9USU1FT1VULCBDVVJMT1BUVFlQRV9MT05HLCAxMTIpLAogI2RlZmluZSBDVVJMT1BUX1NFUlZFUl9SRVNQT05TRV9USU1FT1VUIENVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQKIAogICAvKiBTZXQgdGhpcyBvcHRpb24gdG8gb25lIG9mIHRoZSBDVVJMX0lQUkVTT0xWRV8qIGRlZmluZXMgKHNlZSBiZWxvdykgdG8KICAgICAgdGVsbCBsaWJjdXJsIHRvIHJlc29sdmUgbmFtZXMgdG8gdGhvc2UgSVAgdmVyc2lvbnMgb25seS4gVGhpcyBvbmx5IGhhcwogICAgICBhZmZlY3Qgb24gc3lzdGVtcyB3aXRoIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUsIGkuZSBJUHY0IF9hbmRfIElQdjYuICovCi0gIENJTklUKElQUkVTT0xWRSwgTE9ORywgMTEzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lQUkVTT0xWRSwgQ1VSTE9QVFRZUEVfTE9ORywgMTEzKSwKIAogICAvKiBTZXQgdGhpcyBvcHRpb24gdG8gbGltaXQgdGhlIHNpemUgb2YgYSBmaWxlIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIGZyb20KICAgICAgYW4gSFRUUCBvciBGVFAgc2VydmVyLgogCiAgICAgIE5vdGUgdGhlcmUgaXMgYWxzbyBfTEFSR0UgdmVyc2lvbiB3aGljaCBhZGRzIGxhcmdlIGZpbGUgc3VwcG9ydCBmb3IKICAgICAgcGxhdGZvcm1zIHdoaWNoIGhhdmUgbGFyZ2VyIG9mZl90IHNpemVzLiAgU2VlIE1BWEZJTEVTSVpFX0xBUkdFIGJlbG93LiAqLwotICBDSU5JVChNQVhGSUxFU0laRSwgTE9ORywgMTE0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BWEZJTEVTSVpFLCBDVVJMT1BUVFlQRV9MT05HLCAxMTQpLAogCiAgIC8qIFNlZSB0aGUgY29tbWVudCBmb3IgSU5GSUxFU0laRSBhYm92ZSwgYnV0IGluIHNob3J0LCBzcGVjaWZpZXMKICAgICogdGhlIHNpemUgb2YgdGhlIGZpbGUgYmVpbmcgdXBsb2FkZWQuICAtMSBtZWFucyB1bmtub3duLgogICAgKi8KLSAgQ0lOSVQoSU5GSUxFU0laRV9MQVJHRSwgT0ZGX1QsIDExNSksCisgIENVUkxPUFQoQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTE1KSwKIAotICAvKiBTZXRzIHRoZSBjb250aW51YXRpb24gb2Zmc2V0LiAgVGhlcmUgaXMgYWxzbyBhIExPTkcgdmVyc2lvbiBvZiB0aGlzOwotICAgKiBsb29rIGFib3ZlIGZvciBSRVNVTUVfRlJPTS4KKyAgLyogU2V0cyB0aGUgY29udGludWF0aW9uIG9mZnNldC4gIFRoZXJlIGlzIGFsc28gYSBDVVJMT1BUVFlQRV9MT05HIHZlcnNpb24KKyAgICogb2YgdGhpczsgbG9vayBhYm92ZSBmb3IgUkVTVU1FX0ZST00uCiAgICAqLwotICBDSU5JVChSRVNVTUVfRlJPTV9MQVJHRSwgT0ZGX1QsIDExNiksCisgIENVUkxPUFQoQ1VSTE9QVF9SRVNVTUVfRlJPTV9MQVJHRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDExNiksCiAKICAgLyogU2V0cyB0aGUgbWF4aW11bSBzaXplIG9mIGRhdGEgdGhhdCB3aWxsIGJlIGRvd25sb2FkZWQgZnJvbQogICAgKiBhbiBIVFRQIG9yIEZUUCBzZXJ2ZXIuICBTZWUgTUFYRklMRVNJWkUgYWJvdmUgZm9yIHRoZSBMT05HIHZlcnNpb24uCiAgICAqLwotICBDSU5JVChNQVhGSUxFU0laRV9MQVJHRSwgT0ZGX1QsIDExNyksCisgIENVUkxPUFQoQ1VSTE9QVF9NQVhGSUxFU0laRV9MQVJHRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDExNyksCiAKICAgLyogU2V0IHRoaXMgb3B0aW9uIHRvIHRoZSBmaWxlIG5hbWUgb2YgeW91ciAubmV0cmMgZmlsZSB5b3Ugd2FudCBsaWJjdXJsCiAgICAgIHRvIHBhcnNlICh1c2luZyB0aGUgQ1VSTE9QVF9ORVRSQyBvcHRpb24pLiBJZiBub3Qgc2V0LCBsaWJjdXJsIHdpbGwgZG8KICAgICAgYSBwb29yIGF0dGVtcHQgdG8gZmluZCB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGFuZCBjaGVjayBmb3IgYSAubmV0cmMKICAgICAgZmlsZSBpbiB0aGVyZS4gKi8KLSAgQ0lOSVQoTkVUUkNfRklMRSwgU1RSSU5HUE9JTlQsIDExOCksCisgIENVUkxPUFQoQ1VSTE9QVF9ORVRSQ19GSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTE4KSwKIAogICAvKiBFbmFibGUgU1NML1RMUyBmb3IgRlRQLCBwaWNrIG9uZSBvZjoKICAgICAgQ1VSTFVTRVNTTF9UUlkgICAgIC0gdHJ5IHVzaW5nIFNTTCwgcHJvY2VlZCBhbnl3YXkgb3RoZXJ3aXNlCiAgICAgIENVUkxVU0VTU0xfQ09OVFJPTCAtIFNTTCBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBvciBmYWlsCiAgICAgIENVUkxVU0VTU0xfQUxMICAgICAtIFNTTCBmb3IgYWxsIGNvbW11bmljYXRpb24gb3IgZmFpbAogICAqLwotICBDSU5JVChVU0VfU1NMLCBMT05HLCAxMTkpLAorICBDVVJMT1BUKENVUkxPUFRfVVNFX1NTTCwgQ1VSTE9QVFRZUEVfTE9ORywgMTE5KSwKIAogICAvKiBUaGUgX0xBUkdFIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIFBPU1RGSUVMRFNJWkUgb3B0aW9uICovCi0gIENJTklUKFBPU1RGSUVMRFNJWkVfTEFSR0UsIE9GRl9ULCAxMjApLAorICBDVVJMT1BUKENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDEyMCksCiAKICAgLyogRW5hYmxlL2Rpc2FibGUgdGhlIFRDUCBOYWdsZSBhbGdvcml0aG0gKi8KLSAgQ0lOSVQoVENQX05PREVMQVksIExPTkcsIDEyMSksCisgIENVUkxPUFQoQ1VSTE9QVF9UQ1BfTk9ERUxBWSwgQ1VSTE9QVFRZUEVfTE9ORywgMTIxKSwKIAogICAvKiAxMjIgT0JTT0xFVEUsIHVzZWQgaW4gNy4xMi4zLiBHb25lIGluIDcuMTMuMCAqLwogICAvKiAxMjMgT0JTT0xFVEUuIEdvbmUgaW4gNy4xNi4wICovCkBAIC0xNDA1LDE0MyArMTQyNywxNDMgQEAKICAgICAgQ1VSTEZUUEFVVEhfU1NMICAgICAtIHRyeSAiQVVUSCBTU0wiIGZpcnN0LCB0aGVuIFRMUwogICAgICBDVVJMRlRQQVVUSF9UTFMgICAgIC0gdHJ5ICJBVVRIIFRMUyIgZmlyc3QsIHRoZW4gU1NMCiAgICovCi0gIENJTklUKEZUUFNTTEFVVEgsIExPTkcsIDEyOSksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBTU0xBVVRILCBDVVJMT1BUVFlQRV9MT05HLCAxMjkpLAogCi0gIENJTklUKElPQ1RMRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDEzMCksCi0gIENJTklUKElPQ1RMREFUQSwgT0JKRUNUUE9JTlQsIDEzMSksCisgIENVUkxPUFQoQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMzApLAorICBDVVJMT1BUKENVUkxPUFRfSU9DVExEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTMxKSwKIAogICAvKiAxMzIgT0JTT0xFVEUuIEdvbmUgaW4gNy4xNi4wICovCiAgIC8qIDEzMyBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KIAogICAvKiB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGZvciBwYXNzIG9uIHRvIHRoZSBGVFAgc2VydmVyIHdoZW4gYXNrZWQgZm9yCiAgICAgICJhY2NvdW50IiBpbmZvICovCi0gIENJTklUKEZUUF9BQ0NPVU5ULCBTVFJJTkdQT0lOVCwgMTM0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9BQ0NPVU5ULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTM0KSwKIAogICAvKiBmZWVkIGNvb2tpZSBpbnRvIGNvb2tpZSBlbmdpbmUgKi8KLSAgQ0lOSVQoQ09PS0lFTElTVCwgU1RSSU5HUE9JTlQsIDEzNSksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVMSVNULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTM1KSwKIAogICAvKiBpZ25vcmUgQ29udGVudC1MZW5ndGggKi8KLSAgQ0lOSVQoSUdOT1JFX0NPTlRFTlRfTEVOR1RILCBMT05HLCAxMzYpLAorICBDVVJMT1BUKENVUkxPUFRfSUdOT1JFX0NPTlRFTlRfTEVOR1RILCBDVVJMT1BUVFlQRV9MT05HLCAxMzYpLAogCiAgIC8qIFNldCB0byBub24temVybyB0byBza2lwIHRoZSBJUCBhZGRyZXNzIHJlY2VpdmVkIGluIGEgMjI3IFBBU1YgRlRQIHNlcnZlcgogICAgICByZXNwb25zZS4gVHlwaWNhbGx5IHVzZWQgZm9yIEZUUC1TU0wgcHVycG9zZXMgYnV0IGlzIG5vdCByZXN0cmljdGVkIHRvCiAgICAgIHRoYXQuIGxpYmN1cmwgd2lsbCB0aGVuIGluc3RlYWQgdXNlIHRoZSBzYW1lIElQIGFkZHJlc3MgaXQgdXNlZCBmb3IgdGhlCiAgICAgIGNvbnRyb2wgY29ubmVjdGlvbi4gKi8KLSAgQ0lOSVQoRlRQX1NLSVBfUEFTVl9JUCwgTE9ORywgMTM3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9TS0lQX1BBU1ZfSVAsIENVUkxPUFRUWVBFX0xPTkcsIDEzNyksCiAKICAgLyogU2VsZWN0ICJmaWxlIG1ldGhvZCIgdG8gdXNlIHdoZW4gZG9pbmcgRlRQLCBzZWUgdGhlIGN1cmxfZnRwbWV0aG9kCiAgICAgIGFib3ZlLiAqLwotICBDSU5JVChGVFBfRklMRU1FVEhPRCwgTE9ORywgMTM4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9GSUxFTUVUSE9ELCBDVVJMT1BUVFlQRV9MT05HLCAxMzgpLAogCiAgIC8qIExvY2FsIHBvcnQgbnVtYmVyIHRvIGJpbmQgdGhlIHNvY2tldCB0byAqLwotICBDSU5JVChMT0NBTFBPUlQsIExPTkcsIDEzOSksCisgIENVUkxPUFQoQ1VSTE9QVF9MT0NBTFBPUlQsIENVUkxPUFRUWVBFX0xPTkcsIDEzOSksCiAKICAgLyogTnVtYmVyIG9mIHBvcnRzIHRvIHRyeSwgaW5jbHVkaW5nIHRoZSBmaXJzdCBvbmUgc2V0IHdpdGggTE9DQUxQT1JULgogICAgICBUaHVzLCBzZXR0aW5nIGl0IHRvIDEgd2lsbCBtYWtlIG5vIGFkZGl0aW9uYWwgYXR0ZW1wdHMgYnV0IHRoZSBmaXJzdC4KICAgKi8KLSAgQ0lOSVQoTE9DQUxQT1JUUkFOR0UsIExPTkcsIDE0MCksCisgIENVUkxPUFQoQ1VSTE9QVF9MT0NBTFBPUlRSQU5HRSwgQ1VSTE9QVFRZUEVfTE9ORywgMTQwKSwKIAogICAvKiBubyB0cmFuc2Zlciwgc2V0IHVwIGNvbm5lY3Rpb24gYW5kIGxldCBhcHBsaWNhdGlvbiB1c2UgdGhlIHNvY2tldCBieQogICAgICBleHRyYWN0aW5nIGl0IHdpdGggQ1VSTElORk9fTEFTVFNPQ0tFVCAqLwotICBDSU5JVChDT05ORUNUX09OTFksIExPTkcsIDE0MSksCisgIENVUkxPUFQoQ1VSTE9QVF9DT05ORUNUX09OTFksIENVUkxPUFRUWVBFX0xPTkcsIDE0MSksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGZyb20gdGhlCiAgICAgIG5ldHdvcmsgZW5jb2RpbmcgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGljb252IGNhbGxzIGluIGxpYmN1cmwpICovCi0gIENJTklUKENPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxNDIpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OVl9GUk9NX05FVFdPUktfRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE0MiksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IHRvIHRoZQogICAgICBuZXR3b3JrIGVuY29kaW5nIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBpY29udiBjYWxscyBpbiBsaWJjdXJsKSAqLwotICBDSU5JVChDT05WX1RPX05FVFdPUktfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0MyksCisgIENVUkxPUFQoQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE0MyksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGZyb20gVVRGOAogICAgICAoaW5zdGVhZCBvZiB1c2luZyB0aGUgaWNvbnYgY2FsbHMgaW4gbGliY3VybCkKICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgdXNlZCBvbmx5IGZvciBTU0wgY2VydGlmaWNhdGUgcHJvY2Vzc2luZyAqLwotICBDSU5JVChDT05WX0ZST01fVVRGOF9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTQ0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNDQpLAogCiAgIC8qIGlmIHRoZSBjb25uZWN0aW9uIHByb2NlZWRzIHRvbyBxdWlja2x5IHRoZW4gbmVlZCB0byBzbG93IGl0IGRvd24gKi8KICAgLyogbGltaXQtcmF0ZTogbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgcGVyIHNlY29uZCB0byBzZW5kIG9yIHJlY2VpdmUgKi8KLSAgQ0lOSVQoTUFYX1NFTkRfU1BFRURfTEFSR0UsIE9GRl9ULCAxNDUpLAotICBDSU5JVChNQVhfUkVDVl9TUEVFRF9MQVJHRSwgT0ZGX1QsIDE0NiksCisgIENVUkxPUFQoQ1VSTE9QVF9NQVhfU0VORF9TUEVFRF9MQVJHRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDE0NSksCisgIENVUkxPUFQoQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDE0NiksCiAKICAgLyogUG9pbnRlciB0byBjb21tYW5kIHN0cmluZyB0byBzZW5kIGlmIFVTRVIvUEFTUyBmYWlscy4gKi8KLSAgQ0lOSVQoRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVIsIFNUUklOR1BPSU5ULCAxNDcpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVIsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNDcpLAogCiAgIC8qIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zICovCi0gIENJTklUKFNPQ0tPUFRGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTQ4KSwKLSAgQ0lOSVQoU09DS09QVERBVEEsIE9CSkVDVFBPSU5ULCAxNDkpLAorICBDVVJMT1BUKENVUkxPUFRfU09DS09QVEZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNDgpLAorICBDVVJMT1BUKENVUkxPUFRfU09DS09QVERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNDkpLAogCiAgIC8qIHNldCB0byAwIHRvIGRpc2FibGUgc2Vzc2lvbiBJRCByZS11c2UgZm9yIHRoaXMgdHJhbnNmZXIsIGRlZmF1bHQgaXMKICAgICAgZW5hYmxlZCAoPT0gMSkgKi8KLSAgQ0lOSVQoU1NMX1NFU1NJT05JRF9DQUNIRSwgTE9ORywgMTUwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEUsIENVUkxPUFRUWVBFX0xPTkcsIDE1MCksCiAKICAgLyogYWxsb3dlZCBTU0ggYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLwotICBDSU5JVChTU0hfQVVUSF9UWVBFUywgTE9ORywgMTUxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9BVVRIX1RZUEVTLCBDVVJMT1BUVFlQRV9MT05HLCAxNTEpLAogCiAgIC8qIFVzZWQgYnkgc2NwL3NmdHAgdG8gZG8gcHVibGljL3ByaXZhdGUga2V5IGF1dGhlbnRpY2F0aW9uICovCi0gIENJTklUKFNTSF9QVUJMSUNfS0VZRklMRSwgU1RSSU5HUE9JTlQsIDE1MiksCi0gIENJTklUKFNTSF9QUklWQVRFX0tFWUZJTEUsIFNUUklOR1BPSU5ULCAxNTMpLAorICBDVVJMT1BUKENVUkxPUFRfU1NIX1BVQkxJQ19LRVlGSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTUyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNTMpLAogCiAgIC8qIFNlbmQgQ0NDIChDbGVhciBDb21tYW5kIENoYW5uZWwpIGFmdGVyIGF1dGhlbnRpY2F0aW9uICovCi0gIENJTklUKEZUUF9TU0xfQ0NDLCBMT05HLCAxNTQpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1NTTF9DQ0MsIENVUkxPUFRUWVBFX0xPTkcsIDE1NCksCiAKICAgLyogU2FtZSBhcyBUSU1FT1VUIGFuZCBDT05ORUNUVElNRU9VVCwgYnV0IHdpdGggbXMgcmVzb2x1dGlvbiAqLwotICBDSU5JVChUSU1FT1VUX01TLCBMT05HLCAxNTUpLAotICBDSU5JVChDT05ORUNUVElNRU9VVF9NUywgTE9ORywgMTU2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RJTUVPVVRfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDE1NSksCisgIENVUkxPUFQoQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUywgQ1VSTE9QVFRZUEVfTE9ORywgMTU2KSwKIAogICAvKiBzZXQgdG8gemVybyB0byBkaXNhYmxlIHRoZSBsaWJjdXJsJ3MgZGVjb2RpbmcgYW5kIHRodXMgcGFzcyB0aGUgcmF3IGJvZHkKICAgICAgZGF0YSB0byB0aGUgYXBwbGljYXRpb24gZXZlbiB3aGVuIGl0IGlzIGVuY29kZWQvY29tcHJlc3NlZCAqLwotICBDSU5JVChIVFRQX1RSQU5TRkVSX0RFQ09ESU5HLCBMT05HLCAxNTcpLAotICBDSU5JVChIVFRQX0NPTlRFTlRfREVDT0RJTkcsIExPTkcsIDE1OCksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQX1RSQU5TRkVSX0RFQ09ESU5HLCBDVVJMT1BUVFlQRV9MT05HLCAxNTcpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUF9DT05URU5UX0RFQ09ESU5HLCBDVVJMT1BUVFlQRV9MT05HLCAxNTgpLAogCiAgIC8qIFBlcm1pc3Npb24gdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgb24gdGhlIHJlbW90ZQogICAgICBzZXJ2ZXIgZm9yIHByb3RvY29scyB0aGF0IHN1cHBvcnQgaXQsIFNGVFAvU0NQL0ZJTEUgKi8KLSAgQ0lOSVQoTkVXX0ZJTEVfUEVSTVMsIExPTkcsIDE1OSksCi0gIENJTklUKE5FV19ESVJFQ1RPUllfUEVSTVMsIExPTkcsIDE2MCksCisgIENVUkxPUFQoQ1VSTE9QVF9ORVdfRklMRV9QRVJNUywgQ1VSTE9QVFRZUEVfTE9ORywgMTU5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX05FV19ESVJFQ1RPUllfUEVSTVMsIENVUkxPUFRUWVBFX0xPTkcsIDE2MCksCiAKICAgLyogU2V0IHRoZSBiZWhhdmlvdXIgb2YgUE9TVCB3aGVuIHJlZGlyZWN0aW5nLiBWYWx1ZXMgbXVzdCBiZSBzZXQgdG8gb25lCiAgICAgIG9mIENVUkxfUkVESVIqIGRlZmluZXMgYmVsb3cuIFRoaXMgdXNlZCB0byBiZSBjYWxsZWQgQ1VSTE9QVF9QT1NUMzAxICovCi0gIENJTklUKFBPU1RSRURJUiwgTE9ORywgMTYxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1RSRURJUiwgQ1VSTE9QVFRZUEVfTE9ORywgMTYxKSwKIAogICAvKiB1c2VkIGJ5IHNjcC9zZnRwIHRvIHZlcmlmeSB0aGUgaG9zdCdzIHB1YmxpYyBrZXkgKi8KLSAgQ0lOSVQoU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUsIFNUUklOR1BPSU5ULCAxNjIpLAorICBDVVJMT1BUKENVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNjIpLAogCiAgIC8qIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBvcGVuaW5nIHNvY2tldCAoaW5zdGVhZCBvZiBzb2NrZXQoMikpLiBPcHRpb25hbGx5LAogICAgICBjYWxsYmFjayBpcyBhYmxlIGNoYW5nZSB0aGUgYWRkcmVzcyBvciByZWZ1c2UgdG8gY29ubmVjdCByZXR1cm5pbmcKICAgICAgQ1VSTF9TT0NLRVRfQkFELiAgVGhlIGNhbGxiYWNrIHNob3VsZCBoYXZlIHR5cGUKICAgICAgY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrICovCi0gIENJTklUKE9QRU5TT0NLRVRGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTYzKSwKLSAgQ0lOSVQoT1BFTlNPQ0tFVERBVEEsIE9CSkVDVFBPSU5ULCAxNjQpLAorICBDVVJMT1BUKENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNjMpLAorICBDVVJMT1BUKENVUkxPUFRfT1BFTlNPQ0tFVERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNjQpLAogCiAgIC8qIFBPU1Qgdm9sYXRpbGUgaW5wdXQgZmllbGRzLiAqLwotICBDSU5JVChDT1BZUE9TVEZJRUxEUywgT0JKRUNUUE9JTlQsIDE2NSksCisgIENVUkxPUFQoQ1VSTE9QVF9DT1BZUE9TVEZJRUxEUywgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDE2NSksCiAKICAgLyogc2V0IHRyYW5zZmVyIG1vZGUgKDt0eXBlPTxhfGk+KSB3aGVuIGRvaW5nIEZUUCB2aWEgYW4gSFRUUCBwcm94eSAqLwotICBDSU5JVChQUk9YWV9UUkFOU0ZFUl9NT0RFLCBMT05HLCAxNjYpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVFJBTlNGRVJfTU9ERSwgQ1VSTE9QVFRZUEVfTE9ORywgMTY2KSwKIAogICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc2Vla2luZyBpbiB0aGUgaW5wdXQgc3RyZWFtICovCi0gIENJTklUKFNFRUtGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTY3KSwKLSAgQ0lOSVQoU0VFS0RBVEEsIE9CSkVDVFBPSU5ULCAxNjgpLAorICBDVVJMT1BUKENVUkxPUFRfU0VFS0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNjcpLAorICBDVVJMT1BUKENVUkxPUFRfU0VFS0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNjgpLAogCiAgIC8qIENSTCBmaWxlICovCi0gIENJTklUKENSTEZJTEUsIFNUUklOR1BPSU5ULCAxNjkpLAorICBDVVJMT1BUKENVUkxPUFRfQ1JMRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE2OSksCiAKICAgLyogSXNzdWVyIGNlcnRpZmljYXRlICovCi0gIENJTklUKElTU1VFUkNFUlQsIFNUUklOR1BPSU5ULCAxNzApLAorICBDVVJMT1BUKENVUkxPUFRfSVNTVUVSQ0VSVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3MCksCiAKICAgLyogKElQdjYpIEFkZHJlc3Mgc2NvcGUgKi8KLSAgQ0lOSVQoQUREUkVTU19TQ09QRSwgTE9ORywgMTcxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FERFJFU1NfU0NPUEUsIENVUkxPUFRUWVBFX0xPTkcsIDE3MSksCiAKICAgLyogQ29sbGVjdCBjZXJ0aWZpY2F0ZSBjaGFpbiBpbmZvIGFuZCBhbGxvdyBpdCB0byBnZXQgcmV0cmlldmFibGUgd2l0aAogICAgICBDVVJMSU5GT19DRVJUSU5GTyBhZnRlciB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuICovCi0gIENJTklUKENFUlRJTkZPLCBMT05HLCAxNzIpLAorICBDVVJMT1BUKENVUkxPUFRfQ0VSVElORk8sIENVUkxPUFRUWVBFX0xPTkcsIDE3MiksCiAKICAgLyogIm5hbWUiIGFuZCAicHdkIiB0byB1c2Ugd2hlbiBmZXRjaGluZy4gKi8KLSAgQ0lOSVQoVVNFUk5BTUUsIFNUUklOR1BPSU5ULCAxNzMpLAotICBDSU5JVChQQVNTV09SRCwgU1RSSU5HUE9JTlQsIDE3NCksCisgIENVUkxPUFQoQ1VSTE9QVF9VU0VSTkFNRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3MyksCisgIENVUkxPUFQoQ1VSTE9QVF9QQVNTV09SRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3NCksCiAKICAgICAvKiAibmFtZSIgYW5kICJwd2QiIHRvIHVzZSB3aXRoIFByb3h5IHdoZW4gZmV0Y2hpbmcuICovCi0gIENJTklUKFBST1hZVVNFUk5BTUUsIFNUUklOR1BPSU5ULCAxNzUpLAotICBDSU5JVChQUk9YWVBBU1NXT1JELCBTVFJJTkdQT0lOVCwgMTc2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZVVNFUk5BTUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzUpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlQQVNTV09SRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3NiksCiAKICAgLyogQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdG5hbWVzIGRlZmluaW5nIG5vLXByb3h5IHpvbmVzLiBUaGVzZSBzaG91bGQKICAgICAgbWF0Y2ggYm90aCBob3N0bmFtZXMgZGlyZWN0bHksIGFuZCBob3N0bmFtZXMgd2l0aGluIGEgZG9tYWluLiBGb3IKQEAgLTE1NTAsMTAzICsxNTcyLDEwMyBAQAogICAgICBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcywgLmxvY2FsLmNvbSB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gYmUgdGhlIHNhbWUgYXMKICAgICAgbG9jYWwuY29tLiBBIHNpbmdsZSAqIGlzIHRoZSBvbmx5IHZhbGlkIHdpbGRjYXJkLCBhbmQgZWZmZWN0aXZlbHkKICAgICAgZGlzYWJsZXMgdGhlIHVzZSBvZiBwcm94eS4gKi8KLSAgQ0lOSVQoTk9QUk9YWSwgU1RSSU5HUE9JTlQsIDE3NyksCisgIENVUkxPUFQoQ1VSTE9QVF9OT1BST1hZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTc3KSwKIAogICAvKiBibG9jayBzaXplIGZvciBURlRQIHRyYW5zZmVycyAqLwotICBDSU5JVChURlRQX0JMS1NJWkUsIExPTkcsIDE3OCksCisgIENVUkxPUFQoQ1VSTE9QVF9URlRQX0JMS1NJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDE3OCksCiAKICAgLyogU29ja3MgU2VydmljZSAqLwotICBDSU5JVChTT0NLUzVfR1NTQVBJX1NFUlZJQ0UsIFNUUklOR1BPSU5ULCAxNzkpLCAvKiBERVBSRUNBVEVELCBkbyBub3QgdXNlISAqLworICAvKiBERVBSRUNBVEVELCBkbyBub3QgdXNlISAqLworICBDVVJMT1BUKENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTc5KSwKIAogICAvKiBTb2NrcyBTZXJ2aWNlICovCi0gIENJTklUKFNPQ0tTNV9HU1NBUElfTkVDLCBMT05HLCAxODApLAorICBDVVJMT1BUKENVUkxPUFRfU09DS1M1X0dTU0FQSV9ORUMsIENVUkxPUFRUWVBFX0xPTkcsIDE4MCksCiAKICAgLyogc2V0IHRoZSBiaXRtYXNrIGZvciB0aGUgcHJvdG9jb2xzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBmb3IgdGhlCiAgICAgIHRyYW5zZmVyLCB3aGljaCB0aHVzIGhlbHBzIHRoZSBhcHAgd2hpY2ggdGFrZXMgVVJMcyBmcm9tIHVzZXJzIG9yIG90aGVyCiAgICAgIGV4dGVybmFsIGlucHV0cyBhbmQgd2FudCB0byByZXN0cmljdCB3aGF0IHByb3RvY29sKHMpIHRvIGRlYWwKICAgICAgd2l0aC4gRGVmYXVsdHMgdG8gQ1VSTFBST1RPX0FMTC4gKi8KLSAgQ0lOSVQoUFJPVE9DT0xTLCBMT05HLCAxODEpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPVE9DT0xTLCBDVVJMT1BUVFlQRV9MT05HLCAxODEpLAogCiAgIC8qIHNldCB0aGUgYml0bWFzayBmb3IgdGhlIHByb3RvY29scyB0aGF0IGxpYmN1cmwgaXMgYWxsb3dlZCB0byBmb2xsb3cgdG8sCiAgICAgIGFzIGEgc3Vic2V0IG9mIHRoZSBDVVJMT1BUX1BST1RPQ09MUyBvbmVzLiBUaGF0IG1lYW5zIHRoZSBwcm90b2NvbCBuZWVkcwotICAgICB0byBiZSBzZXQgaW4gYm90aCBiaXRtYXNrcyB0byBiZSBhbGxvd2VkIHRvIGdldCByZWRpcmVjdGVkIHRvLiBEZWZhdWx0cwotICAgICB0byBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBGSUxFIGFuZCBTQ1AuICovCi0gIENJTklUKFJFRElSX1BST1RPQ09MUywgTE9ORywgMTgyKSwKKyAgICAgdG8gYmUgc2V0IGluIGJvdGggYml0bWFza3MgdG8gYmUgYWxsb3dlZCB0byBnZXQgcmVkaXJlY3RlZCB0by4gKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1JFRElSX1BST1RPQ09MUywgQ1VSTE9QVFRZUEVfTE9ORywgMTgyKSwKIAogICAvKiBzZXQgdGhlIFNTSCBrbm93bmhvc3QgZmlsZSBuYW1lIHRvIHVzZSAqLwotICBDSU5JVChTU0hfS05PV05IT1NUUywgU1RSSU5HUE9JTlQsIDE4MyksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfS05PV05IT1NUUywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE4MyksCiAKICAgLyogc2V0IHRoZSBTU0ggaG9zdCBrZXkgY2FsbGJhY2ssIG11c3QgcG9pbnQgdG8gYSBjdXJsX3NzaGtleWNhbGxiYWNrCiAgICAgIGZ1bmN0aW9uICovCi0gIENJTklUKFNTSF9LRVlGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTg0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9LRVlGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTg0KSwKIAogICAvKiBzZXQgdGhlIFNTSCBob3N0IGtleSBjYWxsYmFjayBjdXN0b20gcG9pbnRlciAqLwotICBDSU5JVChTU0hfS0VZREFUQSwgT0JKRUNUUE9JTlQsIDE4NSksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfS0VZREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDE4NSksCiAKICAgLyogc2V0IHRoZSBTTVRQIG1haWwgb3JpZ2luYXRvciAqLwotICBDSU5JVChNQUlMX0ZST00sIFNUUklOR1BPSU5ULCAxODYpLAorICBDVVJMT1BUKENVUkxPUFRfTUFJTF9GUk9NLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTg2KSwKIAogICAvKiBzZXQgdGhlIGxpc3Qgb2YgU01UUCBtYWlsIHJlY2VpdmVyKHMpICovCi0gIENJTklUKE1BSUxfUkNQVCwgT0JKRUNUUE9JTlQsIDE4NyksCisgIENVUkxPUFQoQ1VSTE9QVF9NQUlMX1JDUFQsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDE4NyksCiAKICAgLyogRlRQOiBzZW5kIFBSRVQgYmVmb3JlIFBBU1YgKi8KLSAgQ0lOSVQoRlRQX1VTRV9QUkVULCBMT05HLCAxODgpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1VTRV9QUkVULCBDVVJMT1BUVFlQRV9MT05HLCAxODgpLAogCiAgIC8qIFJUU1AgcmVxdWVzdCBtZXRob2QgKE9QVElPTlMsIFNFVFVQLCBQTEFZLCBldGMuLi4pICovCi0gIENJTklUKFJUU1BfUkVRVUVTVCwgTE9ORywgMTg5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JUU1BfUkVRVUVTVCwgQ1VSTE9QVFRZUEVfTE9ORywgMTg5KSwKIAogICAvKiBUaGUgUlRTUCBzZXNzaW9uIGlkZW50aWZpZXIgKi8KLSAgQ0lOSVQoUlRTUF9TRVNTSU9OX0lELCBTVFJJTkdQT0lOVCwgMTkwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JUU1BfU0VTU0lPTl9JRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE5MCksCiAKICAgLyogVGhlIFJUU1Agc3RyZWFtIFVSSSAqLwotICBDSU5JVChSVFNQX1NUUkVBTV9VUkksIFNUUklOR1BPSU5ULCAxOTEpLAorICBDVVJMT1BUKENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTkxKSwKIAogICAvKiBUaGUgVHJhbnNwb3J0OiBoZWFkZXIgdG8gdXNlIGluIFJUU1AgcmVxdWVzdHMgKi8KLSAgQ0lOSVQoUlRTUF9UUkFOU1BPUlQsIFNUUklOR1BPSU5ULCAxOTIpLAorICBDVVJMT1BUKENVUkxPUFRfUlRTUF9UUkFOU1BPUlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxOTIpLAogCiAgIC8qIE1hbnVhbGx5IGluaXRpYWxpemUgdGhlIGNsaWVudCBSVFNQIENTZXEgZm9yIHRoaXMgaGFuZGxlICovCi0gIENJTklUKFJUU1BfQ0xJRU5UX0NTRVEsIExPTkcsIDE5MyksCisgIENVUkxPUFQoQ1VSTE9QVF9SVFNQX0NMSUVOVF9DU0VRLCBDVVJMT1BUVFlQRV9MT05HLCAxOTMpLAogCiAgIC8qIE1hbnVhbGx5IGluaXRpYWxpemUgdGhlIHNlcnZlciBSVFNQIENTZXEgZm9yIHRoaXMgaGFuZGxlICovCi0gIENJTklUKFJUU1BfU0VSVkVSX0NTRVEsIExPTkcsIDE5NCksCisgIENVUkxPUFQoQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VRLCBDVVJMT1BUVFlQRV9MT05HLCAxOTQpLAogCiAgIC8qIFRoZSBzdHJlYW0gdG8gcGFzcyB0byBJTlRFUkxFQVZFRlVOQ1RJT04uICovCi0gIENJTklUKElOVEVSTEVBVkVEQVRBLCBPQkpFQ1RQT0lOVCwgMTk1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lOVEVSTEVBVkVEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTk1KSwKIAogICAvKiBMZXQgdGhlIGFwcGxpY2F0aW9uIGRlZmluZSBhIGN1c3RvbSB3cml0ZSBtZXRob2QgZm9yIFJUUCBkYXRhICovCi0gIENJTklUKElOVEVSTEVBVkVGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTk2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lOVEVSTEVBVkVGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTk2KSwKIAogICAvKiBUdXJuIG9uIHdpbGRjYXJkIG1hdGNoaW5nICovCi0gIENJTklUKFdJTERDQVJETUFUQ0gsIExPTkcsIDE5NyksCisgIENVUkxPUFQoQ1VSTE9QVF9XSUxEQ0FSRE1BVENILCBDVVJMT1BUVFlQRV9MT05HLCAxOTcpLAogCiAgIC8qIERpcmVjdG9yeSBtYXRjaGluZyBjYWxsYmFjayBjYWxsZWQgYmVmb3JlIGRvd25sb2FkaW5nIG9mIGFuCiAgICAgIGluZGl2aWR1YWwgZmlsZSAoY2h1bmspIHN0YXJ0ZWQgKi8KLSAgQ0lOSVQoQ0hVTktfQkdOX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxOTgpLAorICBDVVJMT1BUKENVUkxPUFRfQ0hVTktfQkdOX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxOTgpLAogCiAgIC8qIERpcmVjdG9yeSBtYXRjaGluZyBjYWxsYmFjayBjYWxsZWQgYWZ0ZXIgdGhlIGZpbGUgKGNodW5rKQogICAgICB3YXMgZG93bmxvYWRlZCwgb3Igc2tpcHBlZCAqLwotICBDSU5JVChDSFVOS19FTkRfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE5OSksCisgIENVUkxPUFQoQ1VSTE9QVF9DSFVOS19FTkRfRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE5OSksCiAKICAgLyogQ2hhbmdlIG1hdGNoIChmbm1hdGNoLWxpa2UpIGNhbGxiYWNrIGZvciB3aWxkY2FyZCBtYXRjaGluZyAqLwotICBDSU5JVChGTk1BVENIX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyMDApLAorICBDVVJMT1BUKENVUkxPUFRfRk5NQVRDSF9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMjAwKSwKIAogICAvKiBMZXQgdGhlIGFwcGxpY2F0aW9uIGRlZmluZSBjdXN0b20gY2h1bmsgZGF0YSBwb2ludGVyICovCi0gIENJTklUKENIVU5LX0RBVEEsIE9CSkVDVFBPSU5ULCAyMDEpLAorICBDVVJMT1BUKENVUkxPUFRfQ0hVTktfREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDIwMSksCiAKICAgLyogRk5NQVRDSF9GVU5DVElPTiB1c2VyIHBvaW50ZXIgKi8KLSAgQ0lOSVQoRk5NQVRDSF9EQVRBLCBPQkpFQ1RQT0lOVCwgMjAyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZOTUFUQ0hfREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDIwMiksCiAKICAgLyogc2VuZCBsaW5rZWQtbGlzdCBvZiBuYW1lOnBvcnQ6YWRkcmVzcyBzZXRzICovCi0gIENJTklUKFJFU09MVkUsIE9CSkVDVFBPSU5ULCAyMDMpLAorICBDVVJMT1BUKENVUkxPUFRfUkVTT0xWRSwgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgMjAzKSwKIAogICAvKiBTZXQgYSB1c2VybmFtZSBmb3IgYXV0aGVudGljYXRlZCBUTFMgKi8KLSAgQ0lOSVQoVExTQVVUSF9VU0VSTkFNRSwgU1RSSU5HUE9JTlQsIDIwNCksCisgIENVUkxPUFQoQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjA0KSwKIAogICAvKiBTZXQgYSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRlZCBUTFMgKi8KLSAgQ0lOSVQoVExTQVVUSF9QQVNTV09SRCwgU1RSSU5HUE9JTlQsIDIwNSksCisgIENVUkxPUFQoQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjA1KSwKIAogICAvKiBTZXQgYXV0aGVudGljYXRpb24gdHlwZSBmb3IgYXV0aGVudGljYXRlZCBUTFMgKi8KLSAgQ0lOSVQoVExTQVVUSF9UWVBFLCBTVFJJTkdQT0lOVCwgMjA2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RMU0FVVEhfVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIwNiksCiAKICAgLyogU2V0IHRvIDEgdG8gZW5hYmxlIHRoZSAiVEU6IiBoZWFkZXIgaW4gSFRUUCByZXF1ZXN0cyB0byBhc2sgZm9yCiAgICAgIGNvbXByZXNzZWQgdHJhbnNmZXItZW5jb2RlZCByZXNwb25zZXMuIFNldCB0byAwIHRvIGRpc2FibGUgdGhlIHVzZSBvZiBURToKQEAgLTE2NTgsMjY4ICsxNjgwLDI3NCBAQAogICAgICBvcHRpb24gaXMgc2V0IHRvIDEuCiAKICAgKi8KLSAgQ0lOSVQoVFJBTlNGRVJfRU5DT0RJTkcsIExPTkcsIDIwNyksCisgIENVUkxPUFQoQ1VSTE9QVF9UUkFOU0ZFUl9FTkNPRElORywgQ1VSTE9QVFRZUEVfTE9ORywgMjA3KSwKIAogICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgY2xvc2luZyBzb2NrZXQgKGluc3RlYWQgb2YgY2xvc2UoMikpLiBUaGUgY2FsbGJhY2sKICAgICAgc2hvdWxkIGhhdmUgdHlwZSBjdXJsX2Nsb3Nlc29ja2V0X2NhbGxiYWNrICovCi0gIENJTklUKENMT1NFU09DS0VURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDIwOCksCi0gIENJTklUKENMT1NFU09DS0VUREFUQSwgT0JKRUNUUE9JTlQsIDIwOSksCisgIENVUkxPUFQoQ1VSTE9QVF9DTE9TRVNPQ0tFVEZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAyMDgpLAorICBDVVJMT1BUKENVUkxPUFRfQ0xPU0VTT0NLRVREQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjA5KSwKIAogICAvKiBhbGxvdyBHU1NBUEkgY3JlZGVudGlhbCBkZWxlZ2F0aW9uICovCi0gIENJTklUKEdTU0FQSV9ERUxFR0FUSU9OLCBMT05HLCAyMTApLAorICBDVVJMT1BUKENVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04sIENVUkxPUFRUWVBFX0xPTkcsIDIxMCksCiAKICAgLyogU2V0IHRoZSBuYW1lIHNlcnZlcnMgdG8gdXNlIGZvciBETlMgcmVzb2x1dGlvbiAqLwotICBDSU5JVChETlNfU0VSVkVSUywgU1RSSU5HUE9JTlQsIDIxMSksCisgIENVUkxPUFQoQ1VSTE9QVF9ETlNfU0VSVkVSUywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIxMSksCiAKICAgLyogVGltZS1vdXQgYWNjZXB0IG9wZXJhdGlvbnMgKGN1cnJlbnRseSBmb3IgRlRQIG9ubHkpIGFmdGVyIHRoaXMgYW1vdW50CiAgICAgIG9mIG1pbGxpc2Vjb25kcy4gKi8KLSAgQ0lOSVQoQUNDRVBUVElNRU9VVF9NUywgTE9ORywgMjEyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FDQ0VQVFRJTUVPVVRfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDIxMiksCiAKICAgLyogU2V0IFRDUCBrZWVwYWxpdmUgKi8KLSAgQ0lOSVQoVENQX0tFRVBBTElWRSwgTE9ORywgMjEzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RDUF9LRUVQQUxJVkUsIENVUkxPUFRUWVBFX0xPTkcsIDIxMyksCiAKICAgLyogbm9uLXVuaXZlcnNhbCBrZWVwYWxpdmUga25vYnMgKExpbnV4LCBBSVgsIEhQLVVYLCBtb3JlKSAqLwotICBDSU5JVChUQ1BfS0VFUElETEUsIExPTkcsIDIxNCksCi0gIENJTklUKFRDUF9LRUVQSU5UVkwsIExPTkcsIDIxNSksCisgIENVUkxPUFQoQ1VSTE9QVF9UQ1BfS0VFUElETEUsIENVUkxPUFRUWVBFX0xPTkcsIDIxNCksCisgIENVUkxPUFQoQ1VSTE9QVF9UQ1BfS0VFUElOVFZMLCBDVVJMT1BUVFlQRV9MT05HLCAyMTUpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIHNwZWNpZmljIFNTTCBmZWF0dXJlcyB3aXRoIGEgYml0bWFzaywgc2VlIENVUkxTU0xPUFRfKiAqLwotICBDSU5JVChTU0xfT1BUSU9OUywgTE9ORywgMjE2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9PUFRJT05TLCBDVVJMT1BUVFlQRV9MT05HLCAyMTYpLAogCiAgIC8qIFNldCB0aGUgU01UUCBhdXRoIG9yaWdpbmF0b3IgKi8KLSAgQ0lOSVQoTUFJTF9BVVRILCBTVFJJTkdQT0lOVCwgMjE3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BSUxfQVVUSCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIxNyksCiAKICAgLyogRW5hYmxlL2Rpc2FibGUgU0FTTCBpbml0aWFsIHJlc3BvbnNlICovCi0gIENJTklUKFNBU0xfSVIsIExPTkcsIDIxOCksCisgIENVUkxPUFQoQ1VSTE9QVF9TQVNMX0lSLCBDVVJMT1BUVFlQRV9MT05HLCAyMTgpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgcHJvZ3Jlc3MgZGlzcGxheQogICAgKiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZGVmaW5lZCBhcyB0aGUgY3VybF94ZmVyaW5mb19jYWxsYmFjawogICAgKiBwcm90b3R5cGUgZGVmaW5lcy4gKERlcHJlY2F0ZXMgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OKSAqLwotICBDSU5JVChYRkVSSU5GT0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyMTkpLAorICBDVVJMT1BUKENVUkxPUFRfWEZFUklORk9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMjE5KSwKIAogICAvKiBUaGUgWE9BVVRIMiBiZWFyZXIgdG9rZW4gKi8KLSAgQ0lOSVQoWE9BVVRIMl9CRUFSRVIsIFNUUklOR1BPSU5ULCAyMjApLAorICBDVVJMT1BUKENVUkxPUFRfWE9BVVRIMl9CRUFSRVIsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMjApLAogCiAgIC8qIFNldCB0aGUgaW50ZXJmYWNlIHN0cmluZyB0byB1c2UgYXMgb3V0Z29pbmcgbmV0d29yawogICAgKiBpbnRlcmZhY2UgZm9yIEROUyByZXF1ZXN0cy4KICAgICogT25seSBzdXBwb3J0ZWQgYnkgdGhlIGMtYXJlcyBETlMgYmFja2VuZCAqLwotICBDSU5JVChETlNfSU5URVJGQUNFLCBTVFJJTkdQT0lOVCwgMjIxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19JTlRFUkZBQ0UsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMjEpLAogCiAgIC8qIFNldCB0aGUgbG9jYWwgSVB2NCBhZGRyZXNzIHRvIHVzZSBmb3Igb3V0Z29pbmcgRE5TIHJlcXVlc3RzLgogICAgKiBPbmx5IHN1cHBvcnRlZCBieSB0aGUgYy1hcmVzIEROUyBiYWNrZW5kICovCi0gIENJTklUKEROU19MT0NBTF9JUDQsIFNUUklOR1BPSU5ULCAyMjIpLAorICBDVVJMT1BUKENVUkxPUFRfRE5TX0xPQ0FMX0lQNCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIyMiksCiAKICAgLyogU2V0IHRoZSBsb2NhbCBJUHY2IGFkZHJlc3MgdG8gdXNlIGZvciBvdXRnb2luZyBETlMgcmVxdWVzdHMuCiAgICAqIE9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBjLWFyZXMgRE5TIGJhY2tlbmQgKi8KLSAgQ0lOSVQoRE5TX0xPQ0FMX0lQNiwgU1RSSU5HUE9JTlQsIDIyMyksCisgIENVUkxPUFQoQ1VSTE9QVF9ETlNfTE9DQUxfSVA2LCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjIzKSwKIAogICAvKiBTZXQgYXV0aGVudGljYXRpb24gb3B0aW9ucyBkaXJlY3RseSAqLwotICBDSU5JVChMT0dJTl9PUFRJT05TLCBTVFJJTkdQT0lOVCwgMjI0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0xPR0lOX09QVElPTlMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMjQpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFRMUyBOUE4gZXh0ZW5zaW9uIChodHRwMiBvdmVyIHNzbCBtaWdodCBmYWlsIHdpdGhvdXQpICovCi0gIENJTklUKFNTTF9FTkFCTEVfTlBOLCBMT05HLCAyMjUpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMX0VOQUJMRV9OUE4sIENVUkxPUFRUWVBFX0xPTkcsIDIyNSksCiAKICAgLyogRW5hYmxlL2Rpc2FibGUgVExTIEFMUE4gZXh0ZW5zaW9uIChodHRwMiBvdmVyIHNzbCBtaWdodCBmYWlsIHdpdGhvdXQpICovCi0gIENJTklUKFNTTF9FTkFCTEVfQUxQTiwgTE9ORywgMjI2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9FTkFCTEVfQUxQTiwgQ1VSTE9QVFRZUEVfTE9ORywgMjI2KSwKIAogICAvKiBUaW1lIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UgdG8gYSBIVFRQIHJlcXVlc3QgY29udGFpbmluZyBhbgogICAgKiBFeHBlY3Q6IDEwMC1jb250aW51ZSBoZWFkZXIgYmVmb3JlIHNlbmRpbmcgdGhlIGRhdGEgYW55d2F5LiAqLwotICBDSU5JVChFWFBFQ1RfMTAwX1RJTUVPVVRfTVMsIExPTkcsIDIyNyksCisgIENVUkxPUFQoQ1VSTE9QVF9FWFBFQ1RfMTAwX1RJTUVPVVRfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDIyNyksCiAKICAgLyogVGhpcyBwb2ludHMgdG8gYSBsaW5rZWQgbGlzdCBvZiBoZWFkZXJzIHVzZWQgZm9yIHByb3h5IHJlcXVlc3RzIG9ubHksCiAgICAgIHN0cnVjdCBjdXJsX3NsaXN0IGtpbmQgKi8KLSAgQ0lOSVQoUFJPWFlIRUFERVIsIE9CSkVDVFBPSU5ULCAyMjgpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlIRUFERVIsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDIyOCksCiAKICAgLyogUGFzcyBpbiBhIGJpdG1hc2sgb2YgImhlYWRlciBvcHRpb25zIiAqLwotICBDSU5JVChIRUFERVJPUFQsIExPTkcsIDIyOSksCisgIENVUkxPUFQoQ1VSTE9QVF9IRUFERVJPUFQsIENVUkxPUFRUWVBFX0xPTkcsIDIyOSksCiAKICAgLyogVGhlIHB1YmxpYyBrZXkgaW4gREVSIGZvcm0gdXNlZCB0byB2YWxpZGF0ZSB0aGUgcGVlciBwdWJsaWMga2V5CiAgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBTU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCi0gIENJTklUKFBJTk5FRFBVQkxJQ0tFWSwgU1RSSU5HUE9JTlQsIDIzMCksCisgIENVUkxPUFQoQ1VSTE9QVF9QSU5ORURQVUJMSUNLRVksIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMzApLAogCiAgIC8qIFBhdGggdG8gVW5peCBkb21haW4gc29ja2V0ICovCi0gIENJTklUKFVOSVhfU09DS0VUX1BBVEgsIFNUUklOR1BPSU5ULCAyMzEpLAorICBDVVJMT1BUKENVUkxPUFRfVU5JWF9TT0NLRVRfUEFUSCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIzMSksCiAKICAgLyogU2V0IGlmIHdlIHNob3VsZCB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlIHN0YXR1cy4gKi8KLSAgQ0lOSVQoU1NMX1ZFUklGWVNUQVRVUywgTE9ORywgMjMyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9WRVJJRllTVEFUVVMsIENVUkxPUFRUWVBFX0xPTkcsIDIzMiksCiAKICAgLyogU2V0IGlmIHdlIHNob3VsZCBlbmFibGUgVExTIGZhbHNlIHN0YXJ0LiAqLwotICBDSU5JVChTU0xfRkFMU0VTVEFSVCwgTE9ORywgMjMzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9GQUxTRVNUQVJULCBDVVJMT1BUVFlQRV9MT05HLCAyMzMpLAogCiAgIC8qIERvIG5vdCBzcXVhc2ggZG90LWRvdCBzZXF1ZW5jZXMgKi8KLSAgQ0lOSVQoUEFUSF9BU19JUywgTE9ORywgMjM0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BBVEhfQVNfSVMsIENVUkxPUFRUWVBFX0xPTkcsIDIzNCksCiAKICAgLyogUHJveHkgU2VydmljZSBOYW1lICovCi0gIENJTklUKFBST1hZX1NFUlZJQ0VfTkFNRSwgU1RSSU5HUE9JTlQsIDIzNSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TRVJWSUNFX05BTUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMzUpLAogCiAgIC8qIFNlcnZpY2UgTmFtZSAqLwotICBDSU5JVChTRVJWSUNFX05BTUUsIFNUUklOR1BPSU5ULCAyMzYpLAorICBDVVJMT1BUKENVUkxPUFRfU0VSVklDRV9OQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjM2KSwKIAogICAvKiBXYWl0L2Rvbid0IHdhaXQgZm9yIHBpcGUvbXV0ZXggdG8gY2xhcmlmeSAqLwotICBDSU5JVChQSVBFV0FJVCwgTE9ORywgMjM3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BJUEVXQUlULCBDVVJMT1BUVFlQRV9MT05HLCAyMzcpLAogCiAgIC8qIFNldCB0aGUgcHJvdG9jb2wgdXNlZCB3aGVuIGN1cmwgaXMgZ2l2ZW4gYSBVUkwgd2l0aG91dCBhIHByb3RvY29sICovCi0gIENJTklUKERFRkFVTFRfUFJPVE9DT0wsIFNUUklOR1BPSU5ULCAyMzgpLAorICBDVVJMT1BUKENVUkxPUFRfREVGQVVMVF9QUk9UT0NPTCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIzOCksCiAKICAgLyogU2V0IHN0cmVhbSB3ZWlnaHQsIDEgLSAyNTYgKGRlZmF1bHQgaXMgMTYpICovCi0gIENJTklUKFNUUkVBTV9XRUlHSFQsIExPTkcsIDIzOSksCisgIENVUkxPUFQoQ1VSTE9QVF9TVFJFQU1fV0VJR0hULCBDVVJMT1BUVFlQRV9MT05HLCAyMzkpLAogCiAgIC8qIFNldCBzdHJlYW0gZGVwZW5kZW5jeSBvbiBhbm90aGVyIENVUkwgaGFuZGxlICovCi0gIENJTklUKFNUUkVBTV9ERVBFTkRTLCBPQkpFQ1RQT0lOVCwgMjQwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NUUkVBTV9ERVBFTkRTLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjQwKSwKIAogICAvKiBTZXQgRS14Y2x1c2l2ZSBzdHJlYW0gZGVwZW5kZW5jeSBvbiBhbm90aGVyIENVUkwgaGFuZGxlICovCi0gIENJTklUKFNUUkVBTV9ERVBFTkRTX0UsIE9CSkVDVFBPSU5ULCAyNDEpLAorICBDVVJMT1BUKENVUkxPUFRfU1RSRUFNX0RFUEVORFNfRSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI0MSksCiAKICAgLyogRG8gbm90IHNlbmQgYW55IHRmdHAgb3B0aW9uIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIgKi8KLSAgQ0lOSVQoVEZUUF9OT19PUFRJT05TLCBMT05HLCAyNDIpLAorICBDVVJMT1BUKENVUkxPUFRfVEZUUF9OT19PUFRJT05TLCBDVVJMT1BUVFlQRV9MT05HLCAyNDIpLAogCiAgIC8qIExpbmtlZC1saXN0IG9mIGhvc3Q6cG9ydDpjb25uZWN0LXRvLWhvc3Q6Y29ubmVjdC10by1wb3J0LAogICAgICBvdmVycmlkZXMgdGhlIFVSTCdzIGhvc3Q6cG9ydCAob25seSBmb3IgdGhlIG5ldHdvcmsgbGF5ZXIpICovCi0gIENJTklUKENPTk5FQ1RfVE8sIE9CSkVDVFBPSU5ULCAyNDMpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OTkVDVF9UTywgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgMjQzKSwKIAogICAvKiBTZXQgVENQIEZhc3QgT3BlbiAqLwotICBDSU5JVChUQ1BfRkFTVE9QRU4sIExPTkcsIDI0NCksCisgIENVUkxPUFQoQ1VSTE9QVF9UQ1BfRkFTVE9QRU4sIENVUkxPUFRUWVBFX0xPTkcsIDI0NCksCiAKICAgLyogQ29udGludWUgdG8gc2VuZCBkYXRhIGlmIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgZWFybHkgd2l0aCBhbgogICAgKiBIVFRQIHN0YXR1cyBjb2RlID49IDMwMCAqLwotICBDSU5JVChLRUVQX1NFTkRJTkdfT05fRVJST1IsIExPTkcsIDI0NSksCisgIENVUkxPUFQoQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IsIENVUkxPUFRUWVBFX0xPTkcsIDI0NSksCiAKICAgLyogVGhlIENBcGF0aCBvciBDQWZpbGUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcHJveHkgY2VydGlmaWNhdGUKICAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFBST1hZX1NTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KLSAgQ0lOSVQoUFJPWFlfQ0FJTkZPLCBTVFJJTkdQT0lOVCwgMjQ2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX0NBSU5GTywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI0NiksCiAKICAgLyogVGhlIENBcGF0aCBkaXJlY3RvcnkgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcHJveHkgY2VydGlmaWNhdGUKICAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFBST1hZX1NTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KLSAgQ0lOSVQoUFJPWFlfQ0FQQVRILCBTVFJJTkdQT0lOVCwgMjQ3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX0NBUEFUSCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI0NyksCiAKICAgLyogU2V0IGlmIHdlIHNob3VsZCB2ZXJpZnkgdGhlIHByb3h5IGluIHNzbCBoYW5kc2hha2UsCiAgICAgIHNldCAxIHRvIHZlcmlmeS4gKi8KLSAgQ0lOSVQoUFJPWFlfU1NMX1ZFUklGWVBFRVIsIExPTkcsIDI0OCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZUEVFUiwgQ1VSTE9QVFRZUEVfTE9ORywgMjQ4KSwKIAogICAvKiBTZXQgaWYgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgQ29tbW9uIG5hbWUgZnJvbSB0aGUgcHJveHkgY2VydGlmaWNhdGUgaW4gc3NsCiAgICAqIGhhbmRzaGFrZSwgc2V0IDEgdG8gY2hlY2sgZXhpc3RlbmNlLCAyIHRvIGVuc3VyZSB0aGF0IGl0IG1hdGNoZXMKICAgICogdGhlIHByb3ZpZGVkIGhvc3RuYW1lLiAqLwotICBDSU5JVChQUk9YWV9TU0xfVkVSSUZZSE9TVCwgTE9ORywgMjQ5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllIT1NULCBDVVJMT1BUVFlQRV9MT05HLCAyNDkpLAogCiAgIC8qIFdoYXQgdmVyc2lvbiB0byBzcGVjaWZpY2FsbHkgdHJ5IHRvIHVzZSBmb3IgcHJveHkuCiAgICAgIFNlZSBDVVJMX1NTTFZFUlNJT04gZGVmaW5lcyBiZWxvdy4gKi8KLSAgQ0lOSVQoUFJPWFlfU1NMVkVSU0lPTiwgTE9ORywgMjUwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTFZFUlNJT04sIENVUkxPUFRUWVBFX0xPTkcsIDI1MCksCiAKICAgLyogU2V0IGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTIGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9UTFNBVVRIX1VTRVJOQU1FLCBTVFJJTkdQT0lOVCwgMjUxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTEpLAogCiAgIC8qIFNldCBhIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGVkIFRMUyBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfVExTQVVUSF9QQVNTV09SRCwgU1RSSU5HUE9JTlQsIDI1MiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjUyKSwKIAogICAvKiBTZXQgYXV0aGVudGljYXRpb24gdHlwZSBmb3IgYXV0aGVudGljYXRlZCBUTFMgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX1RMU0FVVEhfVFlQRSwgU1RSSU5HUE9JTlQsIDI1MyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1RZUEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTMpLAogCiAgIC8qIG5hbWUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWNlcnRpZmljYXRlIGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xDRVJULCBTVFJJTkdQT0lOVCwgMjU0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTENFUlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTQpLAogCiAgIC8qIHR5cGUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIFNTTC1jZXJ0aWZpY2F0ZSAoIkRFUiIsICJQRU0iLCAiRU5HIikgZm9yCiAgICAgIHByb3h5ICovCi0gIENJTklUKFBST1hZX1NTTENFUlRUWVBFLCBTVFJJTkdQT0lOVCwgMjU1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU1KSwKIAogICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1rZXkgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX1NTTEtFWSwgU1RSSU5HUE9JTlQsIDI1NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xLRVksIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTYpLAogCiAgIC8qIHR5cGUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWtleSAoIkRFUiIsICJQRU0iLCAiRU5HIikgZm9yCiAgICAgIHByb3h5ICovCi0gIENJTklUKFBST1hZX1NTTEtFWVRZUEUsIFNUUklOR1BPSU5ULCAyNTcpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMS0VZVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1NyksCiAKICAgLyogcGFzc3dvcmQgZm9yIHRoZSBTU0wgcHJpdmF0ZSBrZXkgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX0tFWVBBU1NXRCwgU1RSSU5HUE9JTlQsIDI1OCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0QsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTgpLAogCiAgIC8qIFNwZWNpZnkgd2hpY2ggU1NMIGNpcGhlcnMgdG8gdXNlIGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xfQ0lQSEVSX0xJU1QsIFNUUklOR1BPSU5ULCAyNTkpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMX0NJUEhFUl9MSVNULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU5KSwKIAogICAvKiBDUkwgZmlsZSBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfQ1JMRklMRSwgU1RSSU5HUE9JTlQsIDI2MCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjYwKSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSBzcGVjaWZpYyBTU0wgZmVhdHVyZXMgd2l0aCBhIGJpdG1hc2sgZm9yIHByb3h5LCBzZWUKICAgICAgQ1VSTFNTTE9QVF8qICovCi0gIENJTklUKFBST1hZX1NTTF9PUFRJT05TLCBMT05HLCAyNjEpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIENVUkxPUFRUWVBFX0xPTkcsIDI2MSksCiAKICAgLyogTmFtZSBvZiBwcmUgcHJveHkgdG8gdXNlLiAqLwotICBDSU5JVChQUkVfUFJPWFksIFNUUklOR1BPSU5ULCAyNjIpLAorICBDVVJMT1BUKENVUkxPUFRfUFJFX1BST1hZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjYyKSwKIAogICAvKiBUaGUgcHVibGljIGtleSBpbiBERVIgZm9ybSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBwcm94eSBwdWJsaWMga2V5CiAgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBQUk9YWV9TU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCi0gIENJTklUKFBST1hZX1BJTk5FRFBVQkxJQ0tFWSwgU1RSSU5HUE9JTlQsIDI2MyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9QSU5ORURQVUJMSUNLRVksIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNjMpLAogCiAgIC8qIFBhdGggdG8gYW4gYWJzdHJhY3QgVW5peCBkb21haW4gc29ja2V0ICovCi0gIENJTklUKEFCU1RSQUNUX1VOSVhfU09DS0VULCBTVFJJTkdQT0lOVCwgMjY0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FCU1RSQUNUX1VOSVhfU09DS0VULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjY0KSwKIAogICAvKiBTdXBwcmVzcyBwcm94eSBDT05ORUNUIHJlc3BvbnNlIGhlYWRlcnMgZnJvbSB1c2VyIGNhbGxiYWNrcyAqLwotICBDSU5JVChTVVBQUkVTU19DT05ORUNUX0hFQURFUlMsIExPTkcsIDI2NSksCisgIENVUkxPUFQoQ1VSTE9QVF9TVVBQUkVTU19DT05ORUNUX0hFQURFUlMsIENVUkxPUFRUWVBFX0xPTkcsIDI2NSksCiAKICAgLyogVGhlIHJlcXVlc3QgdGFyZ2V0LCBpbnN0ZWFkIG9mIGV4dHJhY3RlZCBmcm9tIHRoZSBVUkwgKi8KLSAgQ0lOSVQoUkVRVUVTVF9UQVJHRVQsIFNUUklOR1BPSU5ULCAyNjYpLAorICBDVVJMT1BUKENVUkxPUFRfUkVRVUVTVF9UQVJHRVQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNjYpLAogCiAgIC8qIGJpdG1hc2sgb2YgYWxsb3dlZCBhdXRoIG1ldGhvZHMgZm9yIGNvbm5lY3Rpb25zIHRvIFNPQ0tTNSBwcm94aWVzICovCi0gIENJTklUKFNPQ0tTNV9BVVRILCBMT05HLCAyNjcpLAorICBDVVJMT1BUKENVUkxPUFRfU09DS1M1X0FVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDI2NyksCiAKICAgLyogRW5hYmxlL2Rpc2FibGUgU1NIIGNvbXByZXNzaW9uICovCi0gIENJTklUKFNTSF9DT01QUkVTU0lPTiwgTE9ORywgMjY4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9DT01QUkVTU0lPTiwgQ1VSTE9QVFRZUEVfTE9ORywgMjY4KSwKIAogICAvKiBQb3N0IE1JTUUgZGF0YS4gKi8KLSAgQ0lOSVQoTUlNRVBPU1QsIE9CSkVDVFBPSU5ULCAyNjkpLAorICBDVVJMT1BUKENVUkxPUFRfTUlNRVBPU1QsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyNjkpLAogCiAgIC8qIFRpbWUgdG8gdXNlIHdpdGggdGhlIENVUkxPUFRfVElNRUNPTkRJVElPTi4gU3BlY2lmaWVkIGluIG51bWJlciBvZgogICAgICBzZWNvbmRzIHNpbmNlIDEgSmFuIDE5NzAuICovCi0gIENJTklUKFRJTUVWQUxVRV9MQVJHRSwgT0ZGX1QsIDI3MCksCisgIENVUkxPUFQoQ1VSTE9QVF9USU1FVkFMVUVfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAyNzApLAogCiAgIC8qIEhlYWQgc3RhcnQgaW4gbWlsbGlzZWNvbmRzIHRvIGdpdmUgaGFwcHkgZXllYmFsbHMuICovCi0gIENJTklUKEhBUFBZX0VZRUJBTExTX1RJTUVPVVRfTVMsIExPTkcsIDI3MSksCisgIENVUkxPUFQoQ1VSTE9QVF9IQVBQWV9FWUVCQUxMU19USU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAyNzEpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGEgcmVzb2x2ZXIgcmVxdWVzdCBpcyBtYWRlICovCi0gIENJTklUKFJFU09MVkVSX1NUQVJUX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyNzIpLAorICBDVVJMT1BUKENVUkxPUFRfUkVTT0xWRVJfU1RBUlRfRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDI3MiksCiAKICAgLyogVXNlciBkYXRhIHRvIHBhc3MgdG8gdGhlIHJlc29sdmVyIHN0YXJ0IGNhbGxiYWNrLiAqLwotICBDSU5JVChSRVNPTFZFUl9TVEFSVF9EQVRBLCBPQkpFQ1RQT0lOVCwgMjczKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyNzMpLAogCiAgIC8qIHNlbmQgSEFQcm94eSBQUk9YWSBwcm90b2NvbCBoZWFkZXI/ICovCi0gIENJTklUKEhBUFJPWFlQUk9UT0NPTCwgTE9ORywgMjc0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hBUFJPWFlQUk9UT0NPTCwgQ1VSTE9QVFRZUEVfTE9ORywgMjc0KSwKIAogICAvKiBzaHVmZmxlIGFkZHJlc3NlcyBiZWZvcmUgdXNlIHdoZW4gRE5TIHJldHVybnMgbXVsdGlwbGUgKi8KLSAgQ0lOSVQoRE5TX1NIVUZGTEVfQUREUkVTU0VTLCBMT05HLCAyNzUpLAorICBDVVJMT1BUKENVUkxPUFRfRE5TX1NIVUZGTEVfQUREUkVTU0VTLCBDVVJMT1BUVFlQRV9MT05HLCAyNzUpLAogCiAgIC8qIFNwZWNpZnkgd2hpY2ggVExTIDEuMyBjaXBoZXJzIHN1aXRlcyB0byB1c2UgKi8KLSAgQ0lOSVQoVExTMTNfQ0lQSEVSUywgU1RSSU5HUE9JTlQsIDI3NiksCi0gIENJTklUKFBST1hZX1RMUzEzX0NJUEhFUlMsIFNUUklOR1BPSU5ULCAyNzcpLAorICBDVVJMT1BUKENVUkxPUFRfVExTMTNfQ0lQSEVSUywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI3NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9UTFMxM19DSVBIRVJTLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjc3KSwKIAogICAvKiBEaXNhbGxvdyBzcGVjaWZ5aW5nIHVzZXJuYW1lL2xvZ2luIGluIFVSTC4gKi8KLSAgQ0lOSVQoRElTQUxMT1dfVVNFUk5BTUVfSU5fVVJMLCBMT05HLCAyNzgpLAorICBDVVJMT1BUKENVUkxPUFRfRElTQUxMT1dfVVNFUk5BTUVfSU5fVVJMLCBDVVJMT1BUVFlQRV9MT05HLCAyNzgpLAogCiAgIC8qIEROUy1vdmVyLUhUVFBTIFVSTCAqLwotICBDSU5JVChET0hfVVJMLCBTVFJJTkdQT0lOVCwgMjc5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RPSF9VUkwsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNzkpLAogCiAgIC8qIFByZWZlcnJlZCBidWZmZXIgc2l6ZSB0byB1c2UgZm9yIHVwbG9hZHMgKi8KLSAgQ0lOSVQoVVBMT0FEX0JVRkZFUlNJWkUsIExPTkcsIDI4MCksCisgIENVUkxPUFQoQ1VSTE9QVF9VUExPQURfQlVGRkVSU0laRSwgQ1VSTE9QVFRZUEVfTE9ORywgMjgwKSwKIAogICAvKiBUaW1lIGluIG1zIGJldHdlZW4gY29ubmVjdGlvbiB1cGtlZXAgY2FsbHMgZm9yIGxvbmctbGl2ZWQgY29ubmVjdGlvbnMuICovCi0gIENJTklUKFVQS0VFUF9JTlRFUlZBTF9NUywgTE9ORywgMjgxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1VQS0VFUF9JTlRFUlZBTF9NUywgQ1VSTE9QVFRZUEVfTE9ORywgMjgxKSwKIAogICAvKiBTcGVjaWZ5IFVSTCB1c2luZyBDVVJMIFVSTCBBUEkuICovCi0gIENJTklUKENVUkxVLCBPQkpFQ1RQT0lOVCwgMjgyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NVUkxVLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjgyKSwKIAogICAvKiBhZGQgdHJhaWxpbmcgZGF0YSBqdXN0IGFmdGVyIG5vIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUgKi8KLSAgQ0lOSVQoVFJBSUxFUkZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyODMpLAorICBDVVJMT1BUKENVUkxPUFRfVFJBSUxFUkZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAyODMpLAogCiAgIC8qIHBvaW50ZXIgdG8gYmUgcGFzc2VkIHRvIEhUVFBfVFJBSUxFUl9GVU5DVElPTiAqLwotICBDSU5JVChUUkFJTEVSREFUQSwgT0JKRUNUUE9JTlQsIDI4NCksCisgIENVUkxPUFQoQ1VSTE9QVF9UUkFJTEVSREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI4NCksCiAKICAgLyogc2V0IHRoaXMgdG8gMUwgdG8gYWxsb3cgSFRUUC8wLjkgcmVzcG9uc2VzIG9yIDBMIHRvIGRpc2FsbG93ICovCi0gIENJTklUKEhUVFAwOV9BTExPV0VELCBMT05HLCAyODUpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUDA5X0FMTE9XRUQsIENVUkxPUFRUWVBFX0xPTkcsIDI4NSksCiAKICAgLyogYWx0LXN2YyBjb250cm9sIGJpdG1hc2sgKi8KLSAgQ0lOSVQoQUxUU1ZDX0NUUkwsIExPTkcsIDI4NiksCisgIENVUkxPUFQoQ1VSTE9QVF9BTFRTVkNfQ1RSTCwgQ1VSTE9QVFRZUEVfTE9ORywgMjg2KSwKIAogICAvKiBhbHQtc3ZjIGNhY2hlIGZpbGUgbmFtZSB0byBwb3NzaWJseSByZWFkIGZyb20vd3JpdGUgdG8gKi8KLSAgQ0lOSVQoQUxUU1ZDLCBTVFJJTkdQT0lOVCwgMjg3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FMVFNWQywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI4NyksCiAKICAgLyogbWF4aW11bSBhZ2Ugb2YgYSBjb25uZWN0aW9uIHRvIGNvbnNpZGVyIGl0IGZvciByZXVzZSAoaW4gc2Vjb25kcykgKi8KLSAgQ0lOSVQoTUFYQUdFX0NPTk4sIExPTkcsIDI4OCksCisgIENVUkxPUFQoQ1VSTE9QVF9NQVhBR0VfQ09OTiwgQ1VSTE9QVFRZUEVfTE9ORywgMjg4KSwKKworICAvKiBTQVNMIGF1dGhvcmlzYXRpb24gaWRlbnRpdHkgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1NBU0xfQVVUSFpJRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI4OSksCisKKyAgLyogYWxsb3cgUkNQVCBUTyBjb21tYW5kIHRvIGZhaWwgZm9yIHNvbWUgcmVjaXBpZW50cyAqLworICBDVVJMT1BUKENVUkxPUFRfTUFJTF9SQ1BUX0FMTExPV0ZBSUxTLCBDVVJMT1BUVFlQRV9MT05HLCAyOTApLAogCiAgIENVUkxPUFRfTEFTVEVOVFJZIC8qIHRoZSBsYXN0IHVudXNlZCAqLwogfSBDVVJMb3B0aW9uOwpAQCAtMTk3NCw3ICsyMDAyLDggQEAKICAgQ1VSTF9IVFRQX1ZFUlNJT05fMlRMUywgLyogdXNlIHZlcnNpb24gMiBmb3IgSFRUUFMsIHZlcnNpb24gMS4xIGZvciBIVFRQICovCiAgIENVUkxfSFRUUF9WRVJTSU9OXzJfUFJJT1JfS05PV0xFREdFLCAgLyogcGxlYXNlIHVzZSBIVFRQIDIgd2l0aG91dCBIVFRQLzEuMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZ3JhZGUgKi8KLQorICBDVVJMX0hUVFBfVkVSU0lPTl8zID0gMzAsIC8qIE1ha2VzIHVzZSBvZiBleHBsaWNpdCBIVFRQLzMgd2l0aG91dCBmYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgQ1VSTE9QVF9BTFRTVkMgdG8gZW5hYmxlIEhUVFAvMyB1cGdyYWRlICovCiAgIENVUkxfSFRUUF9WRVJTSU9OX0xBU1QgLyogKklMTEVHQUwqIGh0dHAgdmVyc2lvbiAqLwogfTsKIApAQCAtMjIwMCw1MiArMjIyOSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFrZV9vd25lcnNoaXApOwogCi0vKiBPbGQgZm9ybSBBUEkuICovCi0vKiBuYW1lIGlzIHVwcGVyY2FzZSBDVVJMRk9STV88bmFtZT4gKi8KLSNpZmRlZiBDRklOSVQKLSN1bmRlZiBDRklOSVQKLSNlbmRpZgotCi0jaWZkZWYgQ1VSTF9JU09DUFAKLSNkZWZpbmUgQ0ZJTklUKG5hbWUpIENVUkxGT1JNXyAjIyBuYW1lCi0jZWxzZQotLyogVGhlIG1hY3JvICIjIyIgaXMgSVNPIEMsIHdlIGFzc3VtZSBwcmUtSVNPIEMgZG9lc24ndCBzdXBwb3J0IGl0LiAqLwotI2RlZmluZSBDRklOSVQobmFtZSkgQ1VSTEZPUk1fLyoqL25hbWUKLSNlbmRpZgotCiB0eXBlZGVmIGVudW0gewotICBDRklOSVQoTk9USElORyksICAgICAgICAvKioqKioqKioqIHRoZSBmaXJzdCBvbmUgaXMgdW51c2VkICoqKioqKioqKioqKi8KKyAgQ1VSTEZPUk1fTk9USElORywgICAgICAgIC8qKioqKioqKiogdGhlIGZpcnN0IG9uZSBpcyB1bnVzZWQgKioqKioqKioqKioqLworICBDVVJMRk9STV9DT1BZTkFNRSwKKyAgQ1VSTEZPUk1fUFRSTkFNRSwKKyAgQ1VSTEZPUk1fTkFNRUxFTkdUSCwKKyAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLAorICBDVVJMRk9STV9QVFJDT05URU5UUywKKyAgQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEgsCisgIENVUkxGT1JNX0ZJTEVDT05URU5ULAorICBDVVJMRk9STV9BUlJBWSwKKyAgQ1VSTEZPUk1fT0JTT0xFVEUsCisgIENVUkxGT1JNX0ZJTEUsCiAKLSAgLyogICovCi0gIENGSU5JVChDT1BZTkFNRSksCi0gIENGSU5JVChQVFJOQU1FKSwKLSAgQ0ZJTklUKE5BTUVMRU5HVEgpLAotICBDRklOSVQoQ09QWUNPTlRFTlRTKSwKLSAgQ0ZJTklUKFBUUkNPTlRFTlRTKSwKLSAgQ0ZJTklUKENPTlRFTlRTTEVOR1RIKSwKLSAgQ0ZJTklUKEZJTEVDT05URU5UKSwKLSAgQ0ZJTklUKEFSUkFZKSwKLSAgQ0ZJTklUKE9CU09MRVRFKSwKLSAgQ0ZJTklUKEZJTEUpLAorICBDVVJMRk9STV9CVUZGRVIsCisgIENVUkxGT1JNX0JVRkZFUlBUUiwKKyAgQ1VSTEZPUk1fQlVGRkVSTEVOR1RILAogCi0gIENGSU5JVChCVUZGRVIpLAotICBDRklOSVQoQlVGRkVSUFRSKSwKLSAgQ0ZJTklUKEJVRkZFUkxFTkdUSCksCisgIENVUkxGT1JNX0NPTlRFTlRUWVBFLAorICBDVVJMRk9STV9DT05URU5USEVBREVSLAorICBDVVJMRk9STV9GSUxFTkFNRSwKKyAgQ1VSTEZPUk1fRU5ELAorICBDVVJMRk9STV9PQlNPTEVURTIsCiAKLSAgQ0ZJTklUKENPTlRFTlRUWVBFKSwKLSAgQ0ZJTklUKENPTlRFTlRIRUFERVIpLAotICBDRklOSVQoRklMRU5BTUUpLAotICBDRklOSVQoRU5EKSwKLSAgQ0ZJTklUKE9CU09MRVRFMiksCi0KLSAgQ0ZJTklUKFNUUkVBTSksCi0gIENGSU5JVChDT05URU5UTEVOKSwgLyogYWRkZWQgaW4gNy40Ni4wLCBwcm92aWRlIGEgY3VybF9vZmZfdCBsZW5ndGggKi8KKyAgQ1VSTEZPUk1fU1RSRUFNLAorICBDVVJMRk9STV9DT05URU5UTEVOLCAvKiBhZGRlZCBpbiA3LjQ2LjAsIHByb3ZpZGUgYSBjdXJsX29mZl90IGxlbmd0aCAqLwogCiAgIENVUkxGT1JNX0xBU1RFTlRSWSAvKiB0aGUgbGFzdCB1bnVzZWQgKi8KIH0gQ1VSTGZvcm1vcHRpb247CiAKLSN1bmRlZiBDRklOSVQgLyogZG9uZSAqLwotCiAvKiBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBhcyBwYXJhbWV0ZXIgZm9yIENVUkxGT1JNX0FSUkFZICovCiBzdHJ1Y3QgY3VybF9mb3JtcyB7CiAgIENVUkxmb3Jtb3B0aW9uIG9wdGlvbjsKQEAgLTI1MTQsOCArMjUyNiw4IEBACiAgKi8KIENVUkxfRVhURVJOIHRpbWVfdCBjdXJsX2dldGRhdGUoY29uc3QgY2hhciAqcCwgY29uc3QgdGltZV90ICp1bnVzZWQpOwogCi0vKiBpbmZvIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiwgb25seSBmb3IgT3BlblNTTCBidWlsZHMuIEFza2VkCi0gICBmb3Igd2l0aCBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KKy8qIGluZm8gYWJvdXQgdGhlIGNlcnRpZmljYXRlIGNoYWluLCBvbmx5IGZvciBPcGVuU1NMLCBHbnVUTFMsIFNjaGFubmVsLCBOU1MKKyAgIGFuZCBHU0tpdCBidWlsZHMuIEFza2VkIGZvciB3aXRoIENVUkxPUFRfQ0VSVElORk8gLyBDVVJMSU5GT19DRVJUSU5GTyAqLwogc3RydWN0IGN1cmxfY2VydGluZm8gewogICBpbnQgbnVtX29mX2NlcnRzOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2VydGlmaWNhdGVzIHdpdGggaW5mb3JtYXRpb24gKi8KICAgc3RydWN0IGN1cmxfc2xpc3QgKipjZXJ0aW5mbzsgLyogZm9yIGVhY2ggaW5kZXggaW4gdGhpcyBhcnJheSwgdGhlcmUncyBhCkBAIC0yNjEwLDggKzI2MjIsOSBAQAogICBDVVJMSU5GT19TVEFSVFRSQU5TRkVSX1RJTUVfVCA9IENVUkxJTkZPX09GRl9UICsgNTQsCiAgIENVUkxJTkZPX1JFRElSRUNUX1RJTUVfVCAgPSBDVVJMSU5GT19PRkZfVCArIDU1LAogICBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUVfVCA9IENVUkxJTkZPX09GRl9UICsgNTYsCisgIENVUkxJTkZPX1JFVFJZX0FGVEVSICAgICAgPSBDVVJMSU5GT19PRkZfVCArIDU3LAogCi0gIENVUkxJTkZPX0xBU1RPTkUgICAgICAgICAgPSA1NgorICBDVVJMSU5GT19MQVNUT05FICAgICAgICAgID0gNTcKIH0gQ1VSTElORk87CiAKIC8qIENVUkxJTkZPX1JFU1BPTlNFX0NPREUgaXMgdGhlIG5ldyBuYW1lIGZvciB0aGUgb3B0aW9uIHByZXZpb3VzbHkga25vd24gYXMKQEAgLTI3MTAsNiArMjcyMyw3IEBACiAgIENVUkxWRVJTSU9OX1RISVJELAogICBDVVJMVkVSU0lPTl9GT1VSVEgsCiAgIENVUkxWRVJTSU9OX0ZJRlRILAorICBDVVJMVkVSU0lPTl9TSVhUSCwKICAgQ1VSTFZFUlNJT05fTEFTVCAvKiBuZXZlciBhY3R1YWxseSB1c2UgdGhpcyAqLwogfSBDVVJMdmVyc2lvbjsKIApAQCAtMjcxOCw3ICsyNzMyLDcgQEAKICAgIG1lYW50IHRvIGJlIGEgYnVpbHQtaW4gdmVyc2lvbiBudW1iZXIgZm9yIHdoYXQga2luZCBvZiBzdHJ1Y3QgdGhlIGNhbGxlcgogICAgZXhwZWN0cy4gSWYgdGhlIHN0cnVjdCBldmVyIGNoYW5nZXMsIHdlIHJlZGVmaW5lIHRoZSBOT1cgdG8gYW5vdGhlciBlbnVtCiAgICBmcm9tIGFib3ZlLiAqLwotI2RlZmluZSBDVVJMVkVSU0lPTl9OT1cgQ1VSTFZFUlNJT05fRklGVEgKKyNkZWZpbmUgQ1VSTFZFUlNJT05fTk9XIENVUkxWRVJTSU9OX1NJWFRICiAKIHR5cGVkZWYgc3RydWN0IHsKICAgQ1VSTHZlcnNpb24gYWdlOyAgICAgICAgICAvKiBhZ2Ugb2YgdGhlIHJldHVybmVkIHN0cnVjdCAqLwpAQCAtMjc0NywxMSArMjc2MSwxNiBAQAogICBjb25zdCBjaGFyICpsaWJzc2hfdmVyc2lvbjsgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nICovCiAKICAgLyogVGhlc2UgZmllbGRzIHdlcmUgYWRkZWQgaW4gQ1VSTFZFUlNJT05fRklGVEggKi8KLQogICB1bnNpZ25lZCBpbnQgYnJvdGxpX3Zlcl9udW07IC8qIE51bWVyaWMgQnJvdGxpIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFKT1IgPDwgMjQpIHwgKE1JTk9SIDw8IDEyKSB8IFBBVENIICovCiAgIGNvbnN0IGNoYXIgKmJyb3RsaV92ZXJzaW9uOyAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcuICovCiAKKyAgLyogVGhlc2UgZmllbGRzIHdlcmUgYWRkZWQgaW4gQ1VSTFZFUlNJT05fU0lYVEggKi8KKyAgdW5zaWduZWQgaW50IG5naHR0cDJfdmVyX251bTsgLyogTnVtZXJpYyBuZ2h0dHAyIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BSk9SIDw8IDE2KSB8IChNSU5PUiA8PCA4KSB8IFBBVENIICovCisgIGNvbnN0IGNoYXIgKm5naHR0cDJfdmVyc2lvbjsgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nLiAqLworICBjb25zdCBjaGFyICpxdWljX3ZlcnNpb247ICAgIC8qIGh1bWFuIHJlYWRhYmxlIHF1aWMgKCsgSFRUUC8zKSBsaWJyYXJ5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9yIE5VTEwgKi8KIH0gY3VybF92ZXJzaW9uX2luZm9fZGF0YTsKIAogI2RlZmluZSBDVVJMX1ZFUlNJT05fSVBWNiAgICAgICAgICgxPDwwKSAgLyogSVB2Ni1lbmFibGVkICovCkBAIC0yNzg0LDYgKzI4MDMsOSBAQAogI2RlZmluZSBDVVJMX1ZFUlNJT05fTVVMVElfU1NMICAgICgxPDwyMikgLyogTXVsdGlwbGUgU1NMIGJhY2tlbmRzIGF2YWlsYWJsZSAqLwogI2RlZmluZSBDVVJMX1ZFUlNJT05fQlJPVExJICAgICAgICgxPDwyMykgLyogQnJvdGxpIGZlYXR1cmVzIGFyZSBwcmVzZW50LiAqLwogI2RlZmluZSBDVVJMX1ZFUlNJT05fQUxUU1ZDICAgICAgICgxPDwyNCkgLyogQWx0LVN2YyBoYW5kbGluZyBidWlsdC1pbiAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fSFRUUDMgICAgICAgICgxPDwyNSkgLyogSFRUUDMgc3VwcG9ydCBidWlsdC1pbiAqLworCisjZGVmaW5lIENVUkxfVkVSU0lPTl9FU05JICAgICAgICAgKDE8PDI2KSAvKiBFU05JIHN1cHBvcnQgKi8KIAogIC8qCiAgKiBOQU1FIGN1cmxfdmVyc2lvbl9pbmZvKCkKQEAgLTI4NjYsNCArMjg4OCw0IEBACiAjZW5kaWYgLyogX19TVERDX18gPj0gMSAqLwogI2VuZGlmIC8qIGdjYyA+PSA0LjMgJiYgIV9fY3BsdXNwbHVzICovCiAKLSNlbmRpZiAvKiBfX0NVUkxfQ1VSTF9IICovCisjZW5kaWYgLyogQ1VSTElOQ19DVVJMX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaAppbmRleCAwNGVmYjkzLi44ZmQwODc0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsdmVyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybHZlci5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfQ1VSTFZFUl9ICi0jZGVmaW5lIF9fQ1VSTF9DVVJMVkVSX0gKKyNpZm5kZWYgQ1VSTElOQ19DVVJMVkVSX0gKKyNkZWZpbmUgQ1VSTElOQ19DVVJMVkVSX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNiwxNiArMjYsMTYgQEAKICAgIGEgc2NyaXB0IGF0IHJlbGVhc2UtdGltZS4gVGhpcyB3YXMgbWFkZSBpdHMgb3duIGhlYWRlciBmaWxlIGluIDcuMTEuMiAqLwogCiAvKiBUaGlzIGlzIHRoZSBnbG9iYWwgcGFja2FnZSBjb3B5cmlnaHQgKi8KLSNkZWZpbmUgTElCQ1VSTF9DT1BZUklHSFQgIjE5OTYgLSAyMDE5IERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPi4iCisjZGVmaW5lIExJQkNVUkxfQ09QWVJJR0hUICIxOTk2IC0gMjAyMCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4uIgogCiAvKiBUaGlzIGlzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGliY3VybCBwYWNrYWdlIGZyb20gd2hpY2ggdGhpcyBoZWFkZXIKICAgIGZpbGUgb3JpZ2luczogKi8KLSNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OICI3LjY1LjAiCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiNy42OS4wIgogCiAvKiBUaGUgbnVtZXJpYyB2ZXJzaW9uIG51bWJlciBpcyBhbHNvIGF2YWlsYWJsZSAiaW4gcGFydHMiIGJ5IHVzaW5nIHRoZXNlCiAgICBkZWZpbmVzOiAqLwogI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTUFKT1IgNwotI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTUlOT1IgNjUKKyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SIDY5CiAjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9QQVRDSCAwCiAKIC8qIFRoaXMgaXMgdGhlIG51bWVyaWMgdmVyc2lvbiBvZiB0aGUgbGliY3VybCB2ZXJzaW9uIG51bWJlciwgbWVhbnQgZm9yIGVhc2llcgpAQCAtNTcsNyArNTcsNyBAQAogICAgQ1VSTF9WRVJTSU9OX0JJVFMoKSBtYWNybyBzaW5jZSBjdXJsJ3Mgb3duIGNvbmZpZ3VyZSBzY3JpcHQgZ3JlcHMgZm9yIGl0CiAgICBhbmQgbmVlZHMgaXQgdG8gY29udGFpbiB0aGUgZnVsbCBudW1iZXIuCiAqLwotI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTlVNIDB4MDc0MTAwCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gMHgwNzQ1MDAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgZnVsbCBzb3VyY2UgcGFja2FnZSB3YXMgY3JlYXRlZC4gVGhlCkBAIC03NCw0ICs3NCw0IEBACiAjZGVmaW5lIENVUkxfQVRfTEVBU1RfVkVSU0lPTih4LHkseikgXAogICAoTElCQ1VSTF9WRVJTSU9OX05VTSA+PSBDVVJMX1ZFUlNJT05fQklUUyh4LCB5LCB6KSkKIAotI2VuZGlmIC8qIF9fQ1VSTF9DVVJMVkVSX0ggKi8KKyNlbmRpZiAvKiBDVVJMSU5DX0NVUkxWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvZWFzeS5oIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvZWFzeS5oCmluZGV4IGY0MmE4YTkuLjU5MmY1ZDMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2Vhc3kuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9lYXN5LmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fQ1VSTF9FQVNZX0gKLSNkZWZpbmUgX19DVVJMX0VBU1lfSAorI2lmbmRlZiBDVVJMSU5DX0VBU1lfSAorI2RlZmluZSBDVVJMSU5DX0VBU1lfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL21wcmludGYuaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL21wcmludGYuaAppbmRleCBlMjBmNTQ2Li5mNjE1ZWQ3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tcHJpbnRmLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXByaW50Zi5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfTVBSSU5URl9ICi0jZGVmaW5lIF9fQ1VSTF9NUFJJTlRGX0gKKyNpZm5kZWYgQ1VSTElOQ19NUFJJTlRGX0gKKyNkZWZpbmUgQ1VSTElOQ19NUFJJTlRGX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Nyw0ICs0Nyw0IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fQ1VSTF9NUFJJTlRGX0ggKi8KKyNlbmRpZiAvKiBDVVJMSU5DX01QUklOVEZfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXVsdGkuaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL211bHRpLmgKaW5kZXggYjE5ZGJhZi4uYmRhOWJiNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXVsdGkuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tdWx0aS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfTVVMVElfSAotI2RlZmluZSBfX0NVUkxfTVVMVElfSAorI2lmbmRlZiBDVVJMSU5DX01VTFRJX0gKKyNkZWZpbmUgQ1VSTElOQ19NVUxUSV9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzIsNiArNzIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRlZCB0byBnZXQgYWRkZWQgLSBhZ2FpbiAqLwogICBDVVJMTV9SRUNVUlNJVkVfQVBJX0NBTEwsIC8qIGFuIGFwaSBmdW5jdGlvbiB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAqLworICBDVVJMTV9XQUtFVVBfRkFJTFVSRSwgIC8qIHdha2V1cCBpcyB1bmF2YWlsYWJsZSBvciBmYWlsZWQgKi8KKyAgQ1VSTE1fQkFEX0ZVTkNUSU9OX0FSR1VNRU5ULCAgLyogZnVuY3Rpb24gY2FsbGVkIHdpdGggYSBiYWQgcGFyYW1ldGVyICovCiAgIENVUkxNX0xBU1QKIH0gQ1VSTE1jb2RlOwogCkBAIC0xNzMsNiArMTc1LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCk7CiAKKy8qCisgKiBOYW1lOiAgICAgY3VybF9tdWx0aV9wb2xsKCkKKyAqCisgKiBEZXNjOiAgICAgUG9sbCBvbiBhbGwgZmRzIHdpdGhpbiBhIENVUkxNIHNldCBhcyB3ZWxsIGFzIGFueQorICogICAgICAgICAgIGFkZGl0aW9uYWwgZmRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgKgorICogUmV0dXJuczogIENVUkxNY29kZSB0eXBlLCBnZW5lcmFsIG11bHRpIGVycm9yIGNvZGUuCisgKi8KK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX3BvbGwoQ1VSTE0gKm11bHRpX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfd2FpdGZkIGV4dHJhX2Zkc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFfbmZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXRfbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmV0KTsKKworLyoKKyAqIE5hbWU6ICAgICBjdXJsX211bHRpX3dha2V1cCgpCisgKgorICogRGVzYzogICAgIHdha2VzIHVwIGEgc2xlZXBpbmcgY3VybF9tdWx0aV9wb2xsIGNhbGwuCisgKgorICogUmV0dXJuczogIENVUkxNY29kZSB0eXBlLCBnZW5lcmFsIG11bHRpIGVycm9yIGNvZGUuCisgKi8KK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX3dha2V1cChDVVJMTSAqbXVsdGlfaGFuZGxlKTsKKwogIC8qCiAgICogTmFtZTogICAgY3VybF9tdWx0aV9wZXJmb3JtKCkKICAgKgpAQCAtMzE5LDY4ICszNDQsNTggQEAKIENVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX3RpbWVvdXQoQ1VSTE0gKm11bHRpX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqbWlsbGlzZWNvbmRzKTsKIAotI3VuZGVmIENJTklUIC8qIHJlLXVzaW5nIHRoZSBzYW1lIG5hbWUgYXMgaW4gY3VybC5oICovCi0KLSNpZmRlZiBDVVJMX0lTT0NQUAotI2RlZmluZSBDSU5JVChuYW1lLHR5cGUsbnVtKSBDVVJMTU9QVF8gIyMgbmFtZSA9IENVUkxPUFRUWVBFXyAjIyB0eXBlICsgbnVtCi0jZWxzZQotLyogVGhlIG1hY3JvICIjIyIgaXMgSVNPIEMsIHdlIGFzc3VtZSBwcmUtSVNPIEMgZG9lc24ndCBzdXBwb3J0IGl0LiAqLwotI2RlZmluZSBMT05HICAgICAgICAgIENVUkxPUFRUWVBFX0xPTkcKLSNkZWZpbmUgT0JKRUNUUE9JTlQgICBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVAotI2RlZmluZSBGVU5DVElPTlBPSU5UIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQKLSNkZWZpbmUgT0ZGX1QgICAgICAgICBDVVJMT1BUVFlQRV9PRkZfVAotI2RlZmluZSBDSU5JVChuYW1lLHR5cGUsbnVtYmVyKSBDVVJMTU9QVF8vKiovbmFtZSA9IHR5cGUgKyBudW1iZXIKLSNlbmRpZgotCiB0eXBlZGVmIGVudW0gewogICAvKiBUaGlzIGlzIHRoZSBzb2NrZXQgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciAqLwotICBDSU5JVChTT0NLRVRGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMSksCisgIENVUkxPUFQoQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDEpLAogCiAgIC8qIFRoaXMgaXMgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgc29ja2V0IGNhbGxiYWNrICovCi0gIENJTklUKFNPQ0tFVERBVEEsIE9CSkVDVFBPSU5ULCAyKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9TT0NLRVREQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMiksCiAKICAgICAvKiBzZXQgdG8gMSB0byBlbmFibGUgcGlwZWxpbmluZyBmb3IgdGhpcyBtdWx0aSBoYW5kbGUgKi8KLSAgQ0lOSVQoUElQRUxJTklORywgTE9ORywgMyksCisgIENVUkxPUFQoQ1VSTE1PUFRfUElQRUxJTklORywgQ1VSTE9QVFRZUEVfTE9ORywgMyksCiAKICAgIC8qIFRoaXMgaXMgdGhlIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSAgQ0lOSVQoVElNRVJGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgNCksCisgIENVUkxPUFQoQ1VSTE1PUFRfVElNRVJGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgNCksCiAKICAgLyogVGhpcyBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSB0aW1lciBjYWxsYmFjayAqLwotICBDSU5JVChUSU1FUkRBVEEsIE9CSkVDVFBPSU5ULCA1KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9USU1FUkRBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCA1KSwKIAogICAvKiBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjb25uZWN0aW9uIGNhY2hlICovCi0gIENJTklUKE1BWENPTk5FQ1RTLCBMT05HLCA2KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9NQVhDT05ORUNUUywgQ1VSTE9QVFRZUEVfTE9ORywgNiksCiAKICAgLyogbWF4aW11bSBudW1iZXIgb2YgKHBpcGVsaW5pbmcpIGNvbm5lY3Rpb25zIHRvIG9uZSBob3N0ICovCi0gIENJTklUKE1BWF9IT1NUX0NPTk5FQ1RJT05TLCBMT05HLCA3KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9NQVhfSE9TVF9DT05ORUNUSU9OUywgQ1VSTE9QVFRZUEVfTE9ORywgNyksCiAKICAgLyogbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgaW4gYSBwaXBlbGluZSAqLwotICBDSU5JVChNQVhfUElQRUxJTkVfTEVOR1RILCBMT05HLCA4KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9NQVhfUElQRUxJTkVfTEVOR1RILCBDVVJMT1BUVFlQRV9MT05HLCA4KSwKIAogICAvKiBhIGNvbm5lY3Rpb24gd2l0aCBhIGNvbnRlbnQtbGVuZ3RoIGxvbmdlciB0aGFuIHRoaXMKICAgICAgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBmb3IgcGlwZWxpbmluZyAqLwotICBDSU5JVChDT05URU5UX0xFTkdUSF9QRU5BTFRZX1NJWkUsIE9GRl9ULCA5KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9DT05URU5UX0xFTkdUSF9QRU5BTFRZX1NJWkUsIENVUkxPUFRUWVBFX09GRl9ULCA5KSwKIAogICAvKiBhIGNvbm5lY3Rpb24gd2l0aCBhIGNodW5rIGxlbmd0aCBsb25nZXIgdGhhbiB0aGlzCiAgICAgIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgZm9yIHBpcGVsaW5pbmcgKi8KLSAgQ0lOSVQoQ0hVTktfTEVOR1RIX1BFTkFMVFlfU0laRSwgT0ZGX1QsIDEwKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9DSFVOS19MRU5HVEhfUEVOQUxUWV9TSVpFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTApLAogCiAgIC8qIGEgbGlzdCBvZiBzaXRlIG5hbWVzKCtwb3J0KSB0aGF0IGFyZSBibGFja2xpc3RlZCBmcm9tCiAgICAgIHBpcGVsaW5pbmcgKi8KLSAgQ0lOSVQoUElQRUxJTklOR19TSVRFX0JMLCBPQkpFQ1RQT0lOVCwgMTEpLAorICBDVVJMT1BUKENVUkxNT1BUX1BJUEVMSU5JTkdfU0lURV9CTCwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDExKSwKIAogICAvKiBhIGxpc3Qgb2Ygc2VydmVyIHR5cGVzIHRoYXQgYXJlIGJsYWNrbGlzdGVkIGZyb20KICAgICAgcGlwZWxpbmluZyAqLwotICBDSU5JVChQSVBFTElOSU5HX1NFUlZFUl9CTCwgT0JKRUNUUE9JTlQsIDEyKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9QSVBFTElOSU5HX1NFUlZFUl9CTCwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDEyKSwKIAogICAvKiBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGNvbm5lY3Rpb25zIGluIHRvdGFsICovCi0gIENJTklUKE1BWF9UT1RBTF9DT05ORUNUSU9OUywgTE9ORywgMTMpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWF9UT1RBTF9DT05ORUNUSU9OUywgQ1VSTE9QVFRZUEVfTE9ORywgMTMpLAogCiAgICAvKiBUaGlzIGlzIHRoZSBzZXJ2ZXIgcHVzaCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyICovCi0gIENJTklUKFBVU0hGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTQpLAorICBDVVJMT1BUKENVUkxNT1BUX1BVU0hGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTQpLAogCiAgIC8qIFRoaXMgaXMgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgc2VydmVyIHB1c2ggY2FsbGJhY2sgKi8KLSAgQ0lOSVQoUFVTSERBVEEsIE9CSkVDVFBPSU5ULCAxNSksCisgIENVUkxPUFQoQ1VSTE1PUFRfUFVTSERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNSksCisKKyAgLyogbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBzdHJlYW1zIHRvIHN1cHBvcnQgb24gYSBjb25uZWN0aW9uICovCisgIENVUkxPUFQoQ1VSTE1PUFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUywgQ1VSTE9QVFRZUEVfTE9ORywgMTYpLAogCiAgIENVUkxNT1BUX0xBU1RFTlRSWSAvKiB0aGUgbGFzdCB1bnVzZWQgKi8KIH0gQ1VSTE1vcHRpb247CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zdGRjaGVhZGVycy5oIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvc3RkY2hlYWRlcnMuaAppbmRleCAwMjdiNmY0Li5hNmJkYzFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zdGRjaGVhZGVycy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fU1REQ19IRUFERVJTX0gKLSNkZWZpbmUgX19TVERDX0hFQURFUlNfSAorI2lmbmRlZiBDVVJMSU5DX1NURENIRUFERVJTX0gKKyNkZWZpbmUgQ1VSTElOQ19TVERDSEVBREVSU19ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzAsNCArMzAsNCBAQAogaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogCi0jZW5kaWYgLyogX19TVERDX0hFQURFUlNfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfU1REQ0hFQURFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvc3lzdGVtLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zeXN0ZW0uaAppbmRleCAxZTU1NWVjLi44NjdhZjYxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zeXN0ZW0uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zeXN0ZW0uaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX1NZU1RFTV9ICi0jZGVmaW5lIF9fQ1VSTF9TWVNURU1fSAorI2lmbmRlZiBDVVJMSU5DX1NZU1RFTV9ICisjZGVmaW5lIENVUkxJTkNfU1lTVEVNX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMzcsMTUgKzEzNywyNiBAQAogIyAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGludAogCiAjZWxpZiBkZWZpbmVkKF9fTENDX18pCi0jICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgICAgbG9uZwotIyAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgICAgICJsZCIKLSMgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSAgICAibHUiCi0jICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAgICAgTAotIyAgZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVICAgIFVMCi0jICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1QgaW50CisjICBpZiBkZWZpbmVkKF9fZTJrX18pIC8qIE1DU1QgZUxicnVzIEMgQ29tcGlsZXIgKi8KKyMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgICAgIGxvbmcKKyMgICAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgICAgICJsZCIKKyMgICAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICAgICJsdSIKKyMgICAgZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgICAgIEwKKyMgICAgZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVICAgIFVMCisjICAgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBzb2NrbGVuX3QKKyMgICAgZGVmaW5lIENVUkxfUFVMTF9TWVNfVFlQRVNfSCAgICAgIDEKKyMgICAgZGVmaW5lIENVUkxfUFVMTF9TWVNfU09DS0VUX0ggICAgIDEKKyMgIGVsc2UgICAgICAgICAgICAgICAgLyogTG9jYWwgKG9yIExpdHRsZSkgQyBDb21waWxlciAqLworIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgICAgbG9uZworIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgICAgImxkIgorIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImx1IgorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAgICAgTAorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUwKKyMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGludAorIyAgZW5kaWYKIAogI2VsaWYgZGVmaW5lZChfX1NZTUJJQU4zMl9fKQotIyAgaWYgZGVmaW5lZChfX0VBQklfXykgIC8qIFRyZWF0IGFsbCBBUk0gY29tcGlsZXJzIGVxdWFsbHkgKi8KKyMgIGlmIGRlZmluZWQoX19FQUJJX18pIC8qIFRyZWF0IGFsbCBBUk0gY29tcGlsZXJzIGVxdWFsbHkgKi8KICMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgICAgIGxvbmcgbG9uZwogIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgICAgImxsZCIKICMgICAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICAgICJsbHUiCkBAIC0yODgsNyArMjk5LDYgQEAKICMgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBpbnQKIAogI2VsaWYgZGVmaW5lZChfX1RJTllDX18pIC8qIGFsc28ga25vd24gYXMgdGNjICovCi0KICMgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICAgICBsb25nIGxvbmcKICMgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICAgICAibGxkIgogIyAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICAgICJsbHUiCkBAIC0zNzcsNiArMzg3LDcgQEAKICMgICAgZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVICAgIFVMTAogIyAgZWxpZiBkZWZpbmVkKF9fTFA2NF9fKSB8fCBcCiAgICAgICAgIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKyAgICAgICAgZGVmaW5lZChfX2Uya19fKSB8fCBcCiAgICAgICAgIChkZWZpbmVkKF9fU0laRU9GX0xPTkdfXykgJiYgX19TSVpFT0ZfTE9OR19fID09IDgpIHx8IFwKICAgICAgICAgKGRlZmluZWQoX19MT05HX01BWF9fKSAmJiBfX0xPTkdfTUFYX18gPT0gOTIyMzM3MjAzNjg1NDc3NTgwN0wpCiAjICAgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICAgICBsb25nCkBAIC00NzMsMjEgKzQ4NCwyMSBAQAogICovCiAKICNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKF9fQk9STEFORENfXyA9PSAweDA1NTEpCi0jICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjIoeCkgeAotIyAgZGVmaW5lIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKHgpIF9fQ1VSTF9PRkZfVF9DX0hMUFIyKHgpCi0jICBkZWZpbmUgQ1VSTF9PRkZfVF9DKFZhbCkgIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShDVVJMX1NVRkZJWF9DVVJMX09GRl9UKQotIyAgZGVmaW5lIENVUkxfT0ZGX1RVX0MoVmFsKSBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwpICMjIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DVVJMX09GRl9UX0NfSExQUjEoQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUpCisjICBkZWZpbmUgQ1VSTElOQ19PRkZfVF9DX0hMUFIyKHgpIHgKKyMgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjEoeCkgQ1VSTElOQ19PRkZfVF9DX0hMUFIyKHgpCisjICBkZWZpbmUgQ1VSTF9PRkZfVF9DKFZhbCkgIENVUkxJTkNfT0ZGX1RfQ19ITFBSMShWYWwpICMjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKENVUkxfU1VGRklYX0NVUkxfT0ZGX1QpCisjICBkZWZpbmUgQ1VSTF9PRkZfVFVfQyhWYWwpIENVUkxJTkNfT0ZGX1RfQ19ITFBSMShWYWwpICMjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVKQogI2Vsc2UKICMgIGlmZGVmIENVUkxfSVNPQ1BQCi0jICAgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KSBWYWwgIyMgU3VmZml4CisjICAgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkgVmFsICMjIFN1ZmZpeAogIyAgZWxzZQotIyAgICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkgVmFsLyoqL1N1ZmZpeAorIyAgICBkZWZpbmUgQ1VSTElOQ19PRkZfVF9DX0hMUFIyKFZhbCxTdWZmaXgpIFZhbC8qKi9TdWZmaXgKICMgIGVuZGlmCi0jICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsLFN1ZmZpeCkgX19DVVJMX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkKLSMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsLENVUkxfU1VGRklYX0NVUkxfT0ZGX1QpCi0jICBkZWZpbmUgQ1VSTF9PRkZfVFVfQyhWYWwpIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKFZhbCxDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSkKKyMgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjEoVmFsLFN1ZmZpeCkgQ1VSTElOQ19PRkZfVF9DX0hMUFIyKFZhbCxTdWZmaXgpCisjICBkZWZpbmUgQ1VSTF9PRkZfVF9DKFZhbCkgIENVUkxJTkNfT0ZGX1RfQ19ITFBSMShWYWwsQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCkKKyMgIGRlZmluZSBDVVJMX09GRl9UVV9DKFZhbCkgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCxDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSkKICNlbmRpZgogCi0jZW5kaWYgLyogX19DVVJMX1NZU1RFTV9IICovCisjZW5kaWYgLyogQ1VSTElOQ19TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oCmluZGV4IDJkMWRlNGQuLjAzYzg0ZmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3R5cGVjaGVjay1nY2MuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fQ1VSTF9UWVBFQ0hFQ0tfR0NDX0gKLSNkZWZpbmUgX19DVVJMX1RZUEVDSEVDS19HQ0NfSAorI2lmbmRlZiBDVVJMSU5DX1RZUEVDSEVDS19HQ0NfSAorI2RlZmluZSBDVVJMSU5DX1RZUEVDSEVDS19HQ0NfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTI1LDEwICsyNSwxMCBAQAogLyogd3JhcHMgY3VybF9lYXN5X3NldG9wdCgpIHdpdGggdHlwZWNoZWNraW5nICovCiAKIC8qIFRvIGFkZCBhIG5ldyBraW5kIG9mIHdhcm5pbmcsIGFkZCBhbgotICogICBpZihfY3VybF9pc19zb21ldHlwZV9vcHRpb24oX2N1cmxfb3B0KSkKLSAqICAgICBpZighX2N1cmxfaXNfc29tZXR5cGUodmFsdWUpKQorICogICBpZihjdXJsY2hlY2tfc29tZXR5cGVfb3B0aW9uKF9jdXJsX29wdCkpCisgKiAgICAgaWYoIWN1cmxjaGVja19zb21ldHlwZSh2YWx1ZSkpCiAgKiAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc29tZXR5cGUoKTsKLSAqIGJsb2NrIGFuZCBkZWZpbmUgX2N1cmxfaXNfc29tZXR5cGVfb3B0aW9uLCBfY3VybF9pc19zb21ldHlwZSBhbmQKKyAqIGJsb2NrIGFuZCBkZWZpbmUgY3VybGNoZWNrX3NvbWV0eXBlX29wdGlvbiwgY3VybGNoZWNrX3NvbWV0eXBlIGFuZAogICogX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvbWV0eXBlIGJlbG93CiAgKgogICogTk9URTogV2UgdXNlIHR3byBuZXN0ZWQgJ2lmJyBzdGF0ZW1lbnRzIGhlcmUgaW5zdGVhZCBvZiB0aGUgJiYgb3BlcmF0b3IsIGluCkBAIC0zOCwxMTIgKzM4LDExMiBAQAogICogVG8gYWRkIGFuIG9wdGlvbiB0aGF0IHVzZXMgdGhlIHNhbWUgdHlwZSBhcyBhbiBleGlzdGluZyBvcHRpb24sIHlvdSdsbCBqdXN0CiAgKiBuZWVkIHRvIGV4dGVuZCB0aGUgYXBwcm9wcmlhdGUgX2N1cmxfKl9vcHRpb24gbWFjcm8KICAqLwotI2RlZmluZSBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgb3B0aW9uLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3R5cGVvZl9fKG9wdGlvbikgX2N1cmxfb3B0ID0gb3B0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmKF9fYnVpbHRpbl9jb25zdGFudF9wKF9jdXJsX29wdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfbG9uZ19vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfbG9uZyh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9sb25nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfb2ZmX3Rfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfb2ZmX3QodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX29mZl90KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfc3RyaW5nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfc3RyaW5nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zdHJpbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfd3JpdGVfY2Jfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfd3JpdGVfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl93cml0ZV9jYWxsYmFjaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9SRVNPTFZFUl9TVEFSVF9GVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2sodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9yZXNvbHZlcl9zdGFydF9jYWxsYmFjaygpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9SRUFERlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfcmVhZF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9yZWFkX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9JT0NUTEZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfaW9jdGxfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9pb2N0bF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfc29ja29wdF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb2Nrb3B0X2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfb3BlbnNvY2tldF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9vcGVuc29ja2V0X2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfcHJvZ3Jlc3NfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9wcm9ncmVzc19jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfZGVidWdfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9kZWJ1Z19jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfc3NsX2N0eF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zc2xfY3R4X2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfY29udl9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfY29udl9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jb252X2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9TRUVLRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfc2Vla19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zZWVrX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfY2JfZGF0YV9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfY2JfZGF0YSh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jYl9kYXRhKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9FUlJPUkJVRkZFUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfZXJyb3JfYnVmZmVyKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9lcnJvcl9idWZmZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9TVERFUlIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfRklMRSh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9GSUxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfcG9zdGZpZWxkc19vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfcG9zdGZpZWxkcyh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9wb3N0ZmllbGRzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9IVFRQUE9TVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfYXJyKCh2YWx1ZSksIHN0cnVjdCBjdXJsX2h0dHBwb3N0KSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX2h0dHBvc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9NSU1FUE9TVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfcHRyKCh2YWx1ZSksIGN1cmxfbWltZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX21pbWVwb3N0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoX2N1cmxfaXNfc2xpc3Rfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfYXJyKCh2YWx1ZSksIHN0cnVjdCBjdXJsX3NsaXN0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX3NsaXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYoKF9jdXJsX29wdCkgPT0gQ1VSTE9QVF9TSEFSRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZighX2N1cmxfaXNfcHRyKCh2YWx1ZSksIENVUkxTSCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9DVVJMU0goKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBfY3VybF9vcHQsIHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19KQorI2RlZmluZSBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgb3B0aW9uLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX190eXBlb2ZfXyhvcHRpb24pIF9jdXJsX29wdCA9IG9wdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfb3B0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfbG9uZ19vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfbG9uZyh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfb2ZmX3Rfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfb2ZmX3QodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc3RyaW5nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfc3RyaW5nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfd3JpdGVfY2Jfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfd3JpdGVfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3dyaXRlX2NhbGxiYWNrKCk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0ZVTkNUSU9OKSAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2sodmFsdWUpKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrKCk7ICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFQURGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfcmVhZF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfaW9jdGxfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2lvY3RsX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfc29ja29wdF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvY2tvcHRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfb3BlbnNvY2tldF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfcHJvZ3Jlc3NfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0RFQlVHRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfZGVidWdfY2IodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2RlYnVnX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfc3NsX2N0eF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfY29udl9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfY29udl9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NFRUtGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfc2Vla19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NlZWtfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfY2JfZGF0YV9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfY2JfZGF0YSh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0VSUk9SQlVGRkVSKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfZXJyb3JfYnVmZmVyKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NUREVSUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfRklMRSh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0ZJTEUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfcG9zdGZpZWxkc19vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfcG9zdGZpZWxkcyh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0hUVFBQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKCh2YWx1ZSksIHN0cnVjdCBjdXJsX2h0dHBwb3N0KSkgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfaHR0cG9zdCgpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX01JTUVQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfcHRyKCh2YWx1ZSksIGN1cmxfbWltZSkpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfbWltZXBvc3QoKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc2xpc3Rfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKCh2YWx1ZSksIHN0cnVjdCBjdXJsX3NsaXN0KSkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NIQVJFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfcHRyKCh2YWx1ZSksIENVUkxTSCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0NVUkxTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIF9jdXJsX29wdCwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0pCiAKIC8qIHdyYXBzIGN1cmxfZWFzeV9nZXRpbmZvKCkgd2l0aCB0eXBlY2hlY2tpbmcgKi8KLSNkZWZpbmUgY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBpbmZvLCBhcmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLV9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX190eXBlb2ZfXyhpbmZvKSBfY3VybF9pbmZvID0gaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfaW5mbykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zdHJpbmdfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIGNoYXIgKikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19sb25nX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIGxvbmcpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9sb25nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19kb3VibGVfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIGRvdWJsZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9kb3VibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zbGlzdF9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIHN0cnVjdCBjdXJsX3NsaXN0ICopKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NsaXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc190bHNzZXNzaW9uaW5mb19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIHN0cnVjdCBjdXJsX3Rsc3Nlc3Npb25pbmZvICopKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3Rsc3Nlc3NzaW9uaW5mbygpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19jZXJ0aW5mb19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIHN0cnVjdCBjdXJsX2NlcnRpbmZvICopKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX2NlcnRpbmZvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zb2NrZXRfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIGN1cmxfc29ja2V0X3QpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NvY2tldCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19vZmZfdF9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKGFyZyksIGN1cmxfb2ZmX3QpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBfY3VybF9pbmZvLCBhcmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCisjZGVmaW5lIGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwgaW5mbywgYXJnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIF9fdHlwZW9mX18oaW5mbykgX2N1cmxfaW5mbyA9IGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKF9fYnVpbHRpbl9jb25zdGFudF9wKF9jdXJsX2luZm8pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX3N0cmluZ19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgY2hhciAqKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfc3RyaW5nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX2xvbmdfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgbG9uZykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfbG9uZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX2RvdWJsZV9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgZG91YmxlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfZG91YmxlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX3NsaXN0X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgc3RydWN0IGN1cmxfc2xpc3QgKikpICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9zbGlzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX3Rsc3Nlc3Npb25pbmZvX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgc3RydWN0IGN1cmxfdGxzc2Vzc2lvbmluZm8gKikpICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF90bHNzZXNzc2lvbmluZm8oKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX2NlcnRpbmZvX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgc3RydWN0IGN1cmxfY2VydGluZm8gKikpICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9jZXJ0aW5mbygpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX3NvY2tldF9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgY3VybF9zb2NrZXRfdCkpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9zb2NrZXQoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY3VybGNoZWNrX29mZl90X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpZighY3VybGNoZWNrX2FycigoYXJnKSwgY3VybF9vZmZfdCkpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9vZmZfdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwgX2N1cmxfaW5mbywgYXJnKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQogCiAvKgogICogRm9yIG5vdywganVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHMKQEAgLTE1Niw4MyArMTU2LDgzIEBACiAgKiBmdW5jdGlvbnMgKi8KIAogLyogVG8gZGVmaW5lIGEgbmV3IHdhcm5pbmcsIHVzZSBfQ1VSTF9XQVJOSU5HKGlkZW50aWZpZXIsICJtZXNzYWdlIikgKi8KLSNkZWZpbmUgX0NVUkxfV0FSTklORyhpZCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX193YXJuaW5nX18obWVzc2FnZSkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQ1VSTFdBUk5JTkcoaWQsIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX193YXJuaW5nX18obWVzc2FnZSkpKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpICAgICAgICAgICAgIFwKICAgaWQodm9pZCkgeyBfX2FzbV9fKCIiKTsgfQogCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9sb25nLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBsb25nIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX29mZl90LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX29mZl90IGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zdHJpbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc3RyaW5nLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgogICAgICAgICAgICAgICAic3RyaW5nICgnY2hhciAqJyBvciBjaGFyW10pIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIKICAgKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfd3JpdGVfY2FsbGJhY2ssCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfd3JpdGVfY2FsbGJhY2ssCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3dyaXRlX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9yZXNvbHZlcl9zdGFydF9jYWxsYmFjaywKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9yZXNvbHZlcl9zdGFydF9jYWxsYmFjaywKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKICAgICAgICAgICAgICAgImN1cmxfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIgogICApCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9yZWFkX2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3JlYWRfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2lvY3RsX2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2lvY3RsX2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9pb2N0bF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc29ja29wdF9jYiwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb2Nrb3B0X2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9zb2Nrb3B0X2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9vcGVuc29ja2V0X2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCiAgICAgICAgICAgICAgICJjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIgogICApCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9wcm9ncmVzc19jYiwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9wcm9ncmVzc19jYiwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2RlYnVnX2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2RlYnVnX2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9kZWJ1Z19jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc3NsX2N0eF9jYiwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zc2xfY3R4X2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9zc2xfY3R4X2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jb252X2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2NvbnZfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NlZWtfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc2Vla19jYiwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfc2Vla19jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY2JfZGF0YSwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jYl9kYXRhLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgogICAgICAgICAgICAgICAicHJpdmF0ZSBkYXRhIHBvaW50ZXIgYXMgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlciwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9lcnJvcl9idWZmZXIsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCiAgICAgICAgICAgICAgICJjaGFyIGJ1ZmZlciBvZiBDVVJMX0VSUk9SX1NJWkUgYXMgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0ZJTEUsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfRklMRSwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICdGSUxFIConIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9wb3N0ZmllbGRzLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAndm9pZCAqJyBvciAnY2hhciAqJyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfaHR0cG9zdCwKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICdzdHJ1Y3QgY3VybF9odHRwcG9zdCAqJyAiCiAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9taW1lcG9zdCwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX21pbWVwb3N0LAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgJ2N1cmxfbWltZSAqJyAiCiAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9zbGlzdCwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX3NsaXN0LAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgJ3N0cnVjdCBjdXJsX3NsaXN0IConIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9DVVJMU0gsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfQ1VSTFNILAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgQ1VSTFNIKiBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfc3RyaW5nLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcsCiAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byAnY2hhciAqJyBmb3IgdGhpcyBpbmZvIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9sb25nLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9sb25nLAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gbG9uZyBmb3IgdGhpcyBpbmZvIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9kb3VibGUsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2RvdWJsZSwKICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGRvdWJsZSBmb3IgdGhpcyBpbmZvIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NsaXN0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NsaXN0LAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gJ3N0cnVjdCBjdXJsX3NsaXN0IConIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfdGxzc2Vzc3Npb25pbmZvLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3Rsc3Nlc3NzaW9uaW5mbywKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvICIKICAgICAgICAgICAgICAgIidzdHJ1Y3QgY3VybF90bHNzZXNzaW9uaW5mbyAqJyBmb3IgdGhpcyBpbmZvIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX2NlcnRpbmZvLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX2NlcnRpbmZvLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gIgogICAgICAgICAgICAgICAiJ3N0cnVjdCBjdXJsX2NlcnRpbmZvIConIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc29ja2V0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NvY2tldCwKICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGN1cmxfc29ja2V0X3QgZm9yIHRoaXMgaW5mbyIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9vZmZfdCwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9vZmZfdCwKICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGN1cmxfb2ZmX3QgZm9yIHRoaXMgaW5mbyIpCiAKIC8qIGdyb3VwcyBvZiBjdXJsX2Vhc3lfc2V0b3BzIG9wdGlvbnMgdGhhdCB0YWtlIHRoZSBzYW1lIHR5cGUgb2YgYXJndW1lbnQgKi8KQEAgLTI0NCwxNCArMjQ0LDE0IEBACiAgKi8KIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgbG9uZyBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19sb25nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfbG9uZ19vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICBcCiAgICgwIDwgKG9wdGlvbikgJiYgKG9wdGlvbikgPCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCkKIAotI2RlZmluZSBfY3VybF9pc19vZmZfdF9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfb2ZmX3Rfb3B0aW9uKG9wdGlvbikgICAgICAgICAgXAogICAoKG9wdGlvbikgPiBDVVJMT1BUVFlQRV9PRkZfVCkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgY2hhciogYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfc3RyaW5nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3N0cmluZ19vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChvcHRpb24pID09IENVUkxPUFRfQUJTVFJBQ1RfVU5JWF9TT0NLRVQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfQUNDRVBUX0VOQ09ESU5HIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfQUxUU1ZDIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMwMCwxNSArMzAwLDE4IEBACiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1NTTEtFWSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1RMUzEzX0NJUEhFUlMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JBTkRPTV9GSUxFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JBTkdFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JFRkVSRVIgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JFUVVFU1RfVEFSR0VUIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JUU1BfU0VTU0lPTl9JRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JUU1BfVFJBTlNQT1JUIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NBU0xfQVVUSFpJRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NFUlZJQ0VfTkFNRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1IHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMjEsNiArMzI0LDcgQEAKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NMS0VZIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NMS0VZVFlQRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NMX0NJUEhFUl9MSVNUIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfVExTMTNfQ0lQSEVSUyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfVExTQVVUSF9QQVNTV09SRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfVExTQVVUSF9UWVBFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMzMywxOCArMzM3LDE4IEBACiAgICAwKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBjdXJsX3dyaXRlX2NhbGxiYWNrIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX3dyaXRlX2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgob3B0aW9uKSA9PSBDVVJMT1BUX0hFQURFUkZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja193cml0ZV9jYl9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX0hFQURFUkZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1dSSVRFRlVOQ1RJT04pCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIGN1cmxfY29udl9jYWxsYmFjayBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19jb252X2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfY29udl9jYl9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTikKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgZGF0YSBhcmd1bWVudCB0byBwYXNzIHRvIGEgY2FsbGJhY2sgKi8KLSNkZWZpbmUgX2N1cmxfaXNfY2JfZGF0YV9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2RhdGFfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChvcHRpb24pID09IENVUkxPUFRfQ0hVTktfREFUQSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfQ0xPU0VTT0NLRVREQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfREVCVUdEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTM2MiwxNyArMzY2LDE3IEBACiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTF9DVFhfREFUQSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1dSSVRFREFUQSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0RBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAob3B0aW9uKSA9PSBDVVJMT1BUX0NVUkxVIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1RSQUlMRVJEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBQT1NUIGRhdGEgYXJndW1lbnQgKHZvaWQqIG9yIGNoYXIqKSAqLwotI2RlZmluZSBfY3VybF9pc19wb3N0ZmllbGRzX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfcG9zdGZpZWxkc19vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9QT1NURklFTERTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT1BZUE9TVEZJRUxEUyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgc3RydWN0IGN1cmxfc2xpc3QgKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zbGlzdF9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc2xpc3Rfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9IVFRQMjAwQUxJQVNFUyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9IVFRQSEVBREVSIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9NQUlMX1JDUFQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzgyLDQ1ICszODYsNDYgQEAKICAgIChvcHRpb24pID09IENVUkxPUFRfUVVPVEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkVTT0xWRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfVEVMTkVUT1BUSU9OUyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfQ09OTkVDVF9UTyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDApCiAKIC8qIGdyb3VwcyBvZiBjdXJsX2Vhc3lfZ2V0aW5mbyBpbmZvcyB0aGF0IHRha2UgdGhlIHNhbWUgdHlwZSBvZiBhcmd1bWVudCAqLwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGNoYXIgKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zdHJpbmdfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc3RyaW5nX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICBcCiAgIChDVVJMSU5GT19TVFJJTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fTE9ORykKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBsb25nIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX2xvbmdfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19sb25nX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKENVUkxJTkZPX0xPTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fRE9VQkxFKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGRvdWJsZSBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19kb3VibGVfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfZG91YmxlX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICBcCiAgIChDVVJMSU5GT19ET1VCTEUgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fU0xJU1QpCiAKIC8qIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBzdHJ1Y3QgY3VybF9zbGlzdCAqIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX3NsaXN0X2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19zbGlzdF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKGluZm8pID09IENVUkxJTkZPX1NTTF9FTkdJTkVTKSB8fCAoKGluZm8pID09IENVUkxJTkZPX0NPT0tJRUxJU1QpKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfdGxzc2Vzc2lvbmluZm8gKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc190bHNzZXNzaW9uaW5mb19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfdGxzc2Vzc2lvbmluZm9faW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKCgoaW5mbykgPT0gQ1VSTElORk9fVExTX1NTTF9QVFIpIHx8ICgoaW5mbykgPT0gQ1VSTElORk9fVExTX1NFU1NJT04pKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfY2VydGluZm8gKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19jZXJ0aW5mb19pbmZvKGluZm8pICgoaW5mbykgPT0gQ1VSTElORk9fQ0VSVElORk8pCisjZGVmaW5lIGN1cmxjaGVja19jZXJ0aW5mb19pbmZvKGluZm8pICgoaW5mbykgPT0gQ1VSTElORk9fQ0VSVElORk8pCiAKIC8qIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBzdHJ1Y3QgY3VybF9zb2NrZXRfdCBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zb2NrZXRfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc29ja2V0X2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICBcCiAgIChDVVJMSU5GT19TT0NLRVQgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fT0ZGX1QpCiAKIC8qIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBjdXJsX29mZl90IGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX29mZl90X2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19vZmZfdF9pbmZvKGluZm8pICAgICAgICAgICAgICBcCiAgIChDVVJMSU5GT19PRkZfVCA8IChpbmZvKSkKIAogCiAvKiB0eXBlY2hlY2sgaGVscGVycyAtLSBjaGVjayB3aGV0aGVyIGdpdmVuIGV4cHJlc3Npb24gaGFzIHJlcXVlc3RlZCB0eXBlKi8KIAotLyogRm9yIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSB0aGUgX2N1cmxfaXNfcHRyL19jdXJsX2lzX2FyciBtYWNyb3MsCisvKiBGb3IgcG9pbnRlcnMsIHlvdSBjYW4gdXNlIHRoZSBjdXJsY2hlY2tfcHRyL2N1cmxjaGVja19hcnIgbWFjcm9zLAogICogb3RoZXJ3aXNlIGRlZmluZSBhIG5ldyBtYWNyby4gU2VhcmNoIGZvciBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wCiAgKiBpbiB0aGUgR0NDIG1hbnVhbC4KICAqIE5PVEU6IHRoZXNlIG1hY3JvcyBNVVNUIE5PVCBFVkFMVUFURSB0aGVpciBhcmd1bWVudHMhIFRoZSBhcmd1bWVudCBpcwpAQCAtNDMwLDM1ICs0MzUsMzUgQEAKICAqLwogCiAvKiBYWFg6IHNob3VsZCBldmFsdWF0ZSB0byB0cnVlIGlmIGV4cHIgaXMgYSBwb2ludGVyICovCi0jZGVmaW5lIF9jdXJsX2lzX2FueV9wdHIoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19hbnlfcHRyKGV4cHIpICAgICAgICAgICAgICAgICBcCiAgIChzaXplb2YoZXhwcikgPT0gc2l6ZW9mKHZvaWQgKikpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgTlVMTCAqLwogLyogWFhYOiBtdXN0IG5vdCBldmFsdWF0ZSBleHByLCBzbyB0aGlzIGNoZWNrIGlzIG5vdCBhY2N1cmF0ZSAqLwotI2RlZmluZSBfY3VybF9pc19OVUxMKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfTlVMTChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBfX3R5cGVvZl9fKE5VTEwpKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyB0eXBlKiwgY29uc3QgdHlwZSogb3IgTlVMTCAqLwotI2RlZmluZSBfY3VybF9pc19wdHIoZXhwciwgdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB0eXBlICopIHx8ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfcHRyKGV4cHIsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB0eXBlICopIHx8ICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjb25zdCB0eXBlICopKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9uZSBvZiB0eXBlW10sIHR5cGUqLCBOVUxMIG9yIGNvbnN0IHR5cGUqICovCi0jZGVmaW5lIF9jdXJsX2lzX2FycihleHByLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19wdHIoKGV4cHIpLCB0eXBlKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19hcnIoZXhwciwgdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfcHRyKChleHByKSwgdHlwZSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIHR5cGUgW10pKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIGEgc3RyaW5nICovCi0jZGVmaW5lIF9jdXJsX2lzX3N0cmluZyhleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19hcnIoKGV4cHIpLCBjaGFyKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9pc19hcnIoKGV4cHIpLCBzaWduZWQgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9pc19hcnIoKGV4cHIpLCB1bnNpZ25lZCBjaGFyKSkKKyNkZWZpbmUgY3VybGNoZWNrX3N0cmluZyhleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19hcnIoKGV4cHIpLCBjaGFyKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19hcnIoKGV4cHIpLCBzaWduZWQgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19hcnIoKGV4cHIpLCB1bnNpZ25lZCBjaGFyKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBhIGxvbmcgKG5vIG1hdHRlciB0aGUgc2lnbmVkbmVzcykKICAqIFhYWDogZm9yIG5vdywgaW50IGlzIGFsc28gYWNjZXB0ZWQgKGFuZCB0aGVyZWZvcmUgc2hvcnQgYW5kIGNoYXIsIHdoaWNoCiAgKiBhcmUgcHJvbW90ZWQgdG8gaW50IHdoZW4gcGFzc2VkIHRvIGEgdmFyaWFkaWMgZnVuY3Rpb24pICovCi0jZGVmaW5lIF9jdXJsX2lzX2xvbmcoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19sb25nKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGxvbmcpIHx8ICAgICAgICAgICAgICAgICAgICBcCiAgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIHNpZ25lZCBsb25nKSB8fCAgICAgICAgICAgICBcCiAgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIHVuc2lnbmVkIGxvbmcpIHx8ICAgICAgICAgICBcCkBAIC00NzMsNTkgKzQ3OCw1OSBAQAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB1bnNpZ25lZCBjaGFyKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfb2ZmX3QgKi8KLSNkZWZpbmUgX2N1cmxfaXNfb2ZmX3QoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX29mZl90KGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGN1cmxfb2ZmX3QpKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIGFidWZmZXIgc3VpdGFibGUgZm9yIENVUkxPUFRfRVJST1JCVUZGRVIgKi8KIC8qIFhYWDogYWxzbyBjaGVjayBzaXplIG9mIGFuIGNoYXJbXSBhcnJheT8gKi8KLSNkZWZpbmUgX2N1cmxfaXNfZXJyb3JfYnVmZmVyKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY2hhciAqKSB8fCAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX2Vycm9yX2J1ZmZlcihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY2hhciAqKSB8fCAgICAgICAgICAgIFwKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY2hhcltdKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIChjb25zdCkgdm9pZCogb3IgKGNvbnN0KSBGSUxFKiAqLwogI2lmIDAKLSNkZWZpbmUgX2N1cmxfaXNfY2JfZGF0YShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX3B0cigoZXhwciksIHZvaWQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2lzX3B0cigoZXhwciksIEZJTEUpKQorI2RlZmluZSBjdXJsY2hlY2tfY2JfZGF0YShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX3B0cigoZXhwciksIHZvaWQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX3B0cigoZXhwciksIEZJTEUpKQogI2Vsc2UgLyogYmUgbGVzcyBzdHJpY3QgKi8KLSNkZWZpbmUgX2N1cmxfaXNfY2JfZGF0YShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX2N1cmxfaXNfYW55X3B0cihleHByKQorI2RlZmluZSBjdXJsY2hlY2tfY2JfZGF0YShleHByKSAgICAgICAgICAgICAgICAgXAorICBjdXJsY2hlY2tfYW55X3B0cihleHByKQogI2VuZGlmCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBGSUxFKiAqLwotI2RlZmluZSBfY3VybF9pc19GSUxFKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19GSUxFKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBGSUxFICopKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBjYW4gYmUgcGFzc2VkIGFzIFBPU1QgZGF0YSAodm9pZCogb3IgY2hhciopICovCi0jZGVmaW5lIF9jdXJsX2lzX3Bvc3RmaWVsZHMoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19wdHIoKGV4cHIpLCB2b2lkKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9pc19hcnIoKGV4cHIpLCBjaGFyKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9pc19hcnIoKGV4cHIpLCB1bnNpZ25lZCBjaGFyKSkKKyNkZWZpbmUgY3VybGNoZWNrX3Bvc3RmaWVsZHMoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19wdHIoKGV4cHIpLCB2b2lkKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19hcnIoKGV4cHIpLCBjaGFyKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19hcnIoKGV4cHIpLCB1bnNpZ25lZCBjaGFyKSkKIAogLyogaGVscGVyOiBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmdW5jdGlvbnMgYW5kCiAgKiBmdW5jdGlvbiBwb2ludGVycywgaGlkZSBpdCAqLwotI2RlZmluZSBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKGZ1bmMsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGZ1bmMpLCB0eXBlKSB8fCAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZShmdW5jLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGZ1bmMpLCB0eXBlKSB8fCAgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGZ1bmMpICosIHR5cGUpKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9yZXNvbHZlcl9zdGFydF9jYWxsYmFjayAqLwotI2RlZmluZSBfY3VybF9pc19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayhleHByKSAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8IFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrKSkKKyNkZWZpbmUgY3VybGNoZWNrX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrKGV4cHIpICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8IFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9yZXNvbHZlcl9zdGFydF9jYWxsYmFjaykpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3JlYWRfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX3JlYWRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX190eXBlb2ZfXyhmcmVhZCkgKikgfHwgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9yZWFkX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazYpKQorI2RlZmluZSBjdXJsY2hlY2tfcmVhZF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfX3R5cGVvZl9fKGZyZWFkKSAqKSB8fCAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3JlYWRfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrMikgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrMykgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrNCkgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrNSkgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrNikpCiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3JlYWRfY2FsbGJhY2sxKShjaGFyICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICopOwogdHlwZWRlZiBzaXplX3QgKCpfY3VybF9yZWFkX2NhbGxiYWNrMikoY2hhciAqLCBzaXplX3QsIHNpemVfdCwgY29uc3Qgdm9pZCAqKTsKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfcmVhZF9jYWxsYmFjazMpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CkBAIC01MzQsMTYgKzUzOSwxNiBAQAogdHlwZWRlZiBzaXplX3QgKCpfY3VybF9yZWFkX2NhbGxiYWNrNikodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfd3JpdGVfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX3dyaXRlX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19yZWFkX2NiKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX190eXBlb2ZfXyhmd3JpdGUpICopIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF93cml0ZV9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2s2KSkKKyNkZWZpbmUgY3VybGNoZWNrX3dyaXRlX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19yZWFkX2NiKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX190eXBlb2ZfXyhmd3JpdGUpICopIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF93cml0ZV9jYWxsYmFjaykgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2syKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2szKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfd3JpdGVfY2FsbGJhY2s2KSkKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfd3JpdGVfY2FsbGJhY2sxKShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICopOwogdHlwZWRlZiBzaXplX3QgKCpfY3VybF93cml0ZV9jYWxsYmFjazIpKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICopOwpAQCAtNTU0LDM3ICs1NTksMzcgQEAKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfd3JpdGVfY2FsbGJhY2s2KShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9pb2N0bF9jYWxsYmFjayBvciAic2ltaWxhciIgKi8KLSNkZWZpbmUgX2N1cmxfaXNfaW9jdGxfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX2lvY3RsX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazQpKQorI2RlZmluZSBjdXJsY2hlY2tfaW9jdGxfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX2lvY3RsX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazQpKQogdHlwZWRlZiBjdXJsaW9lcnIgKCpfY3VybF9pb2N0bF9jYWxsYmFjazEpKENVUkwgKiwgaW50LCB2b2lkICopOwogdHlwZWRlZiBjdXJsaW9lcnIgKCpfY3VybF9pb2N0bF9jYWxsYmFjazIpKENVUkwgKiwgaW50LCBjb25zdCB2b2lkICopOwogdHlwZWRlZiBjdXJsaW9lcnIgKCpfY3VybF9pb2N0bF9jYWxsYmFjazMpKENVUkwgKiwgY3VybGlvY21kLCB2b2lkICopOwogdHlwZWRlZiBjdXJsaW9lcnIgKCpfY3VybF9pb2N0bF9jYWxsYmFjazQpKENVUkwgKiwgY3VybGlvY21kLCBjb25zdCB2b2lkICopOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zb2Nrb3B0X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19zb2Nrb3B0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc29ja29wdF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2syKSkKKyNkZWZpbmUgY3VybGNoZWNrX3NvY2tvcHRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9zb2Nrb3B0X2NhbGxiYWNrKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc29ja29wdF9jYWxsYmFjazEpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc29ja29wdF9jYWxsYmFjazIpKQogdHlwZWRlZiBpbnQgKCpfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMSkodm9pZCAqLCBjdXJsX3NvY2tldF90LCBjdXJsc29ja3R5cGUpOwogdHlwZWRlZiBpbnQgKCpfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMikoY29uc3Qgdm9pZCAqLCBjdXJsX3NvY2tldF90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsc29ja3R5cGUpOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrIG9yCiAgICAic2ltaWxhciIgKi8KLSNkZWZpbmUgX2N1cmxfaXNfb3BlbnNvY2tldF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2spIHx8ICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMSkgfHwgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMikgfHwgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMykgfHwgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrNCkpCisjZGVmaW5lIGN1cmxjaGVja19vcGVuc29ja2V0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjaykgfHwgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sxKSB8fCAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2syKSB8fCAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2szKSB8fCAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2s0KSkKIHR5cGVkZWYgY3VybF9zb2NrZXRfdCAoKl9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sxKQogICAodm9pZCAqLCBjdXJsc29ja3R5cGUsIHN0cnVjdCBjdXJsX3NvY2thZGRyICopOwogdHlwZWRlZiBjdXJsX3NvY2tldF90ICgqX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazIpCkBAIC01OTUsMjggKzYwMCwyOCBAQAogICAoY29uc3Qgdm9pZCAqLCBjdXJsc29ja3R5cGUsIGNvbnN0IHN0cnVjdCBjdXJsX3NvY2thZGRyICopOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9wcm9ncmVzc19jYWxsYmFjayBvciAic2ltaWxhciIgKi8KLSNkZWZpbmUgX2N1cmxfaXNfcHJvZ3Jlc3NfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9wcm9ncmVzc19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9wcm9ncmVzc19jYWxsYmFjazIpKQorI2RlZmluZSBjdXJsY2hlY2tfcHJvZ3Jlc3NfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrKSB8fCAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9wcm9ncmVzc19jYWxsYmFjazEpIHx8ICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9wcm9ncmVzc19jYWxsYmFjazIpKQogdHlwZWRlZiBpbnQgKCpfY3VybF9wcm9ncmVzc19jYWxsYmFjazEpKHZvaWQgKiwKICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwogdHlwZWRlZiBpbnQgKCpfY3VybF9wcm9ncmVzc19jYWxsYmFjazIpKGNvbnN0IHZvaWQgKiwKICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9kZWJ1Z19jYWxsYmFjayBvciAic2ltaWxhciIgKi8KLSNkZWZpbmUgX2N1cmxfaXNfZGVidWdfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX2RlYnVnX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazYpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazcpIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazgpKQorI2RlZmluZSBjdXJsY2hlY2tfZGVidWdfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX2RlYnVnX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazIpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazMpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazQpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazUpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazYpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazcpIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazgpKQogdHlwZWRlZiBpbnQgKCpfY3VybF9kZWJ1Z19jYWxsYmFjazEpIChDVVJMICosCiAgICAgY3VybF9pbmZvdHlwZSwgY2hhciAqLCBzaXplX3QsIHZvaWQgKik7CiB0eXBlZGVmIGludCAoKl9jdXJsX2RlYnVnX2NhbGxiYWNrMikgKENVUkwgKiwKQEAgLTYzNiwxNyArNjQxLDE3IEBACiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCiAvKiB0aGlzIGlzIGdldHRpbmcgZXZlbiBtZXNzaWVyLi4uICovCi0jZGVmaW5lIF9jdXJsX2lzX3NzbF9jdHhfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9zc2xfY3R4X2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazYpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazcpIHx8ICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazgpKQorI2RlZmluZSBjdXJsY2hlY2tfc3NsX2N0eF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3NzbF9jdHhfY2FsbGJhY2spIHx8ICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrMSkgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrMikgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrMykgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrNCkgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrNSkgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrNikgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrNykgfHwgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zc2xfY3R4X2NhbGxiYWNrOCkpCiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEpKENVUkwgKiwgdm9pZCAqLCB2b2lkICopOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX3NzbF9jdHhfY2FsbGJhY2syKShDVVJMICosIHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIHR5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9zc2xfY3R4X2NhbGxiYWNrMykoQ1VSTCAqLCBjb25zdCB2b2lkICosIHZvaWQgKik7CkBAIC02NjksMjYgKzY3NCwyNiBAQAogI2VuZGlmCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX2NvbnZfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX2NvbnZfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9jb252X2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazQpKQorI2RlZmluZSBjdXJsY2hlY2tfY29udl9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX2NvbnZfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9jb252X2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9jb252X2NhbGxiYWNrMikgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9jb252X2NhbGxiYWNrMykgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9jb252X2NhbGxiYWNrNCkpCiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfY29udl9jYWxsYmFjazEpKGNoYXIgKiwgc2l6ZV90IGxlbmd0aCk7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfY29udl9jYWxsYmFjazIpKGNvbnN0IGNoYXIgKiwgc2l6ZV90IGxlbmd0aCk7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfY29udl9jYWxsYmFjazMpKHZvaWQgKiwgc2l6ZV90IGxlbmd0aCk7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfY29udl9jYWxsYmFjazQpKGNvbnN0IHZvaWQgKiwgc2l6ZV90IGxlbmd0aCk7CiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3NlZWtfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX3NlZWtfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9zZWVrX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc2Vla19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc2Vla19jYWxsYmFjazIpKQorI2RlZmluZSBjdXJsY2hlY2tfc2Vla19jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3NlZWtfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zZWVrX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zZWVrX2NhbGxiYWNrMikpCiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc2Vla19jYWxsYmFjazEpKHZvaWQgKiwgY3VybF9vZmZfdCwgaW50KTsKIHR5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9zZWVrX2NhbGxiYWNrMikoY29uc3Qgdm9pZCAqLCBjdXJsX29mZl90LCBpbnQpOwogCiAKLSNlbmRpZiAvKiBfX0NVUkxfVFlQRUNIRUNLX0dDQ19IICovCisjZW5kaWYgLyogQ1VSTElOQ19UWVBFQ0hFQ0tfR0NDX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdXJsYXBpLmgKaW5kZXggNThlODlkOC4uZjJkMDY3NyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdXJsYXBpLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdXJsYXBpLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fQ1VSTF9VUkxBUElfSAotI2RlZmluZSBfX0NVUkxfVVJMQVBJX0gKKyNpZm5kZWYgQ1VSTElOQ19VUkxBUElfSAorI2RlZmluZSBDVVJMSU5DX1VSTEFQSV9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNzcsNiArNzcsOCBAQAogI2RlZmluZSBDVVJMVV9VUkxFTkNPREUgKDE8PDcpICAgICAgICAgIC8qIFVSTCBlbmNvZGUgb24gc2V0ICovCiAjZGVmaW5lIENVUkxVX0FQUEVORFFVRVJZICgxPDw4KSAgICAgICAgLyogYXBwZW5kIGEgZm9ybSBzdHlsZSBwYXJ0ICovCiAjZGVmaW5lIENVUkxVX0dVRVNTX1NDSEVNRSAoMTw8OSkgICAgICAgLyogbGVnYWN5IGN1cmwtc3R5bGUgZ3Vlc3NpbmcgKi8KKyNkZWZpbmUgQ1VSTFVfTk9fQVVUSE9SSVRZICgxPDwxMCkgICAgICAvKiBBbGxvdyBlbXB0eSBhdXRob3JpdHkgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWUgaXMgdW5rbm93bi4gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgQ3VybF9VUkwgQ1VSTFU7CiAKQEAgLTEyMCw0ICsxMjIsNCBAQAogfSAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLwogI2VuZGlmCiAKLSNlbmRpZgorI2VuZGlmIC8qIENVUkxJTkNfVVJMQVBJX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtY3VybC9saWIvQ01ha2VMaXN0cy50eHQKaW5kZXggMmE2Mjc5Yy4uNDkzNTkyNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvQ01ha2VMaXN0cy50eHQKQEAgLTIwLDcgKzIwLDYgQEAKIAogaWYoTVNWQyBBTkQgTk9UIENVUkxfU1RBVElDTElCKQogICBsaXN0KEFQUEVORCBDU09VUkNFUyBsaWJjdXJsLnJjKQotICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvd2Q0MTI3IikKIGVuZGlmKCkKIAogIyBTRVQoQ1NPVVJDRVMKQEAgLTEyMSw2ICsxMjAsMTIgQEAKIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIFBSRUZJWCAiIikKIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIElNUE9SVF9QUkVGSVggIiIpCiAKK2lmKENVUkxfSEFTX0xUTykKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMKKyAgICBJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OX1JFTEVBU0UgVFJVRQorICAgIElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fUkVMV0lUSERFQklORk8gVFJVRSkKK2VuZGlmKCkKKwogaWYoV0lOMzIpCiAgIGlmKEJVSUxEX1NIQVJFRF9MSUJTKQogICAgICMgQWRkICJfaW1wIiBhcyBhIHN1ZmZpeCBiZWZvcmUgdGhlIGV4dGVuc2lvbiB0byBhdm9pZCBjb25mbGljdGluZyB3aXRoIHRoZSBzdGF0aWNhbGx5IGxpbmtlZCAibGliY3VybC5saWIiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9NYWtlZmlsZS5pbmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9NYWtlZmlsZS5pbmMKaW5kZXggMjM1YjgyYi4uNDZkZWQ5MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvTWFrZWZpbGUuaW5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL01ha2VmaWxlLmluYwpAQCAtNSw3ICs1LDcgQEAKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAjCi0jIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAjCiAjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI4LDE0ICsyOCwyMiBAQAogTElCX1ZBVVRIX0hGSUxFUyA9IHZhdXRoL3ZhdXRoLmggdmF1dGgvZGlnZXN0LmggdmF1dGgvbnRsbS5oCiAKIExJQl9WVExTX0NGSUxFUyA9IHZ0bHMvb3BlbnNzbC5jIHZ0bHMvZ3Rscy5jIHZ0bHMvdnRscy5jIHZ0bHMvbnNzLmMgICAgIFwKLSAgdnRscy9wb2xhcnNzbC5jIHZ0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdnRscy9jeWFzc2wuYyB2dGxzL3NjaGFubmVsLmMgdnRscy9zY2hhbm5lbF92ZXJpZnkuYyAgICAgICAgICAgICAgICAgIFwKLSAgdnRscy9zZWN0cmFuc3AuYyB2dGxzL2dza2l0LmMgdnRscy9tYmVkdGxzLmMgdnRscy9tZXNhbGluay5jCisgIHZ0bHMvbWJlZHRsc190aHJlYWRsb2NrLmMgdnRscy93b2xmc3NsLmMgdnRscy9zY2hhbm5lbC5jICAgICAgICAgICAgICBcCisgIHZ0bHMvc2NoYW5uZWxfdmVyaWZ5LmMgdnRscy9zZWN0cmFuc3AuYyB2dGxzL2dza2l0LmMgdnRscy9tYmVkdGxzLmMgICBcCisgIHZ0bHMvbWVzYWxpbmsuYyB2dGxzL2JlYXJzc2wuYwogCi1MSUJfVlRMU19IRklMRVMgPSB2dGxzL29wZW5zc2wuaCB2dGxzL3Z0bHMuaCB2dGxzL2d0bHMuaCAgICAgICAgICAgICAgICBcCi0gIHZ0bHMvbnNzZy5oIHZ0bHMvcG9sYXJzc2wuaCB2dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suaCAgICAgICAgICAgICAgICBcCi0gIHZ0bHMvY3lhc3NsLmggdnRscy9zY2hhbm5lbC5oIHZ0bHMvc2VjdHJhbnNwLmggdnRscy9nc2tpdC5oICAgICAgICAgICBcCi0gIHZ0bHMvbWJlZHRscy5oIHZ0bHMvbWVzYWxpbmsuaAorTElCX1ZUTFNfSEZJTEVTID0gdnRscy9vcGVuc3NsLmggdnRscy92dGxzLmggdnRscy9ndGxzLmggdnRscy9uc3NnLmggICAgXAorICB2dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oIHZ0bHMvd29sZnNzbC5oIHZ0bHMvc2NoYW5uZWwuaCAgICAgICAgICAgICAgXAorICB2dGxzL3NlY3RyYW5zcC5oIHZ0bHMvZ3NraXQuaCB2dGxzL21iZWR0bHMuaCB2dGxzL21lc2FsaW5rLmggICAgICAgICAgXAorICB2dGxzL2JlYXJzc2wuaAorCitMSUJfVlFVSUNfQ0ZJTEVTID0gdnF1aWMvbmd0Y3AyLmMgdnF1aWMvcXVpY2hlLmMKKworTElCX1ZRVUlDX0hGSUxFUyA9IHZxdWljL25ndGNwMi5oIHZxdWljL3F1aWNoZS5oCisKK0xJQl9WU1NIX0NGSUxFUyA9IHZzc2gvbGlic3NoMi5jIHZzc2gvbGlic3NoLmMgdnNzaC93b2xmc3NoLmMKKworTElCX1ZTU0hfSEZJTEVTID0gdnNzaC9zc2guaAogCiBMSUJfQ0ZJTEVTID0gZmlsZS5jIHRpbWV2YWwuYyBiYXNlNjQuYyBob3N0aXAuYyBwcm9ncmVzcy5jIGZvcm1kYXRhLmMgICBcCiAgIGNvb2tpZS5jIGh0dHAuYyBzZW5kZi5jIGZ0cC5jIHVybC5jIGRpY3QuYyBpZjJpcC5jIHNwZWVkY2hlY2suYyAgICAgICBcCkBAIC00Niw3ICs1NCw3IEBACiAgIGh0dHBfZGlnZXN0LmMgbWQ0LmMgbWQ1LmMgaHR0cF9uZWdvdGlhdGUuYyBpbmV0X3B0b24uYyBzdHJ0b29mZnQuYyAgICBcCiAgIHN0cmVycm9yLmMgYW1pZ2Fvcy5jIGhvc3Rhc3luLmMgaG9zdGlwNC5jIGhvc3RpcDYuYyBob3N0c3luLmMgICAgICAgICBcCiAgIGluZXRfbnRvcC5jIHBhcnNlZGF0ZS5jIHNlbGVjdC5jIHRmdHAuYyBzcGxheS5jIHN0cmR1cC5jIHNvY2tzLmMgICAgICBcCi0gIHNzaC5jIHNzaC1saWJzc2guYyBjdXJsX2FkZHJpbmZvLmMgc29ja3NfZ3NzYXBpLmMgc29ja3Nfc3NwaS5jICAgICAgICBcCisgIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGN1cmxfc3NwaS5jIHNsaXN0LmMgbm9uYmxvY2suYyBjdXJsX21lbXJjaHIuYyBpbWFwLmMgcG9wMy5jIHNtdHAuYyAgICBcCiAgIHBpbmdwb25nLmMgcnRzcC5jIGN1cmxfdGhyZWFkcy5jIHdhcm5sZXNzLmMgaG1hYy5jIGN1cmxfcnRtcC5jICAgICAgICBcCiAgIG9wZW5sZGFwLmMgY3VybF9nZXRob3N0bmFtZS5jIGdvcGhlci5jIGlkbl93aW4zMi5jICAgICAgICAgICAgICAgICAgICBcCkBAIC01NSw3ICs2Myw3IEBACiAgIGN1cmxfbXVsdGlieXRlLmMgaG9zdGNoZWNrLmMgY29ubmNhY2hlLmMgZG90ZG90LmMgICAgICAgICAgICAgICAgICAgICBcCiAgIHg1MDlhc24xLmMgaHR0cDIuYyBzbWIuYyBjdXJsX2VuZGlhbi5jIGN1cmxfZGVzLmMgc3lzdGVtX3dpbjMyLmMgICAgICBcCiAgIG1pbWUuYyBzaGEyNTYuYyBzZXRvcHQuYyBjdXJsX3BhdGguYyBjdXJsX2N0eXBlLmMgY3VybF9yYW5nZS5jIHBzbC5jICBcCi0gIGRvaC5jIHVybGFwaS5jIGN1cmxfZ2V0X2xpbmUuYyBhbHRzdmMuYworICBkb2guYyB1cmxhcGkuYyBjdXJsX2dldF9saW5lLmMgYWx0c3ZjLmMgc29ja2V0cGFpci5jIHJlbmFtZS5jCiAKIExJQl9IRklMRVMgPSBhcnBhX3RlbG5ldC5oIG5ldHJjLmggZmlsZS5oIHRpbWV2YWwuaCBob3N0aXAuaCBwcm9ncmVzcy5oIFwKICAgZm9ybWRhdGEuaCBjb29raWUuaCBodHRwLmggc2VuZGYuaCBmdHAuaCB1cmwuaCBkaWN0LmggaWYyaXAuaCAgICAgICAgIFwKQEAgLTY2LDcgKzc0LDcgQEAKICAgaHR0cF9uZWdvdGlhdGUuaCBpbmV0X3B0b24uaCBhbWlnYW9zLmggc3RydG9vZmZ0Lmggc3RyZXJyb3IuaCAgICAgICAgIFwKICAgaW5ldF9udG9wLmggY3VybHguaCBjdXJsX21lbW9yeS5oIGN1cmxfc2V0dXAuaCB0cmFuc2Zlci5oIHNlbGVjdC5oICAgIFwKICAgZWFzeWlmLmggbXVsdGlpZi5oIHBhcnNlZGF0ZS5oIHRmdHAuaCBzb2NrYWRkci5oIHNwbGF5Lmggc3RyZHVwLmggICAgIFwKLSAgc29ja3MuaCBzc2guaCBjdXJsX2Jhc2U2NC5oIGN1cmxfYWRkcmluZm8uaCBjdXJsX3NzcGkuaCAgICAgIFwKKyAgc29ja3MuaCBjdXJsX2Jhc2U2NC5oIGN1cmxfYWRkcmluZm8uaCBjdXJsX3NzcGkuaCAgICAgICAgICAgICAgICAgICAgIFwKICAgc2xpc3QuaCBub25ibG9jay5oIGN1cmxfbWVtcmNoci5oIGltYXAuaCBwb3AzLmggc210cC5oIHBpbmdwb25nLmggICAgIFwKICAgcnRzcC5oIGN1cmxfdGhyZWFkcy5oIHdhcm5sZXNzLmggY3VybF9obWFjLmggY3VybF9ydG1wLmggICAgICAgICAgICAgIFwKICAgY3VybF9nZXRob3N0bmFtZS5oIGdvcGhlci5oIGh0dHBfcHJveHkuaCBub24tYXNjaWkuaCBhc3luLmggICAgICAgICAgIFwKQEAgLTc2LDkgKzg0LDExIEBACiAgIHg1MDlhc24xLmggaHR0cDIuaCBzaWdwaXBlLmggc21iLmggY3VybF9lbmRpYW4uaCBjdXJsX2Rlcy5oICAgICAgICAgICBcCiAgIGN1cmxfcHJpbnRmLmggc3lzdGVtX3dpbjMyLmggcmFuZC5oIG1pbWUuaCBjdXJsX3NoYTI1Ni5oIHNldG9wdC5oICAgICBcCiAgIGN1cmxfcGF0aC5oIGN1cmxfY3R5cGUuaCBjdXJsX3JhbmdlLmggcHNsLmggZG9oLmggdXJsYXBpLWludC5oICAgICAgICBcCi0gIGN1cmxfZ2V0X2xpbmUuaCBhbHRzdmMuaAorICBjdXJsX2dldF9saW5lLmggYWx0c3ZjLmggcXVpYy5oIHNvY2tldHBhaXIuaCByZW5hbWUuaAogCiBMSUJfUkNGSUxFUyA9IGxpYmN1cmwucmMKIAotQ1NPVVJDRVMgPSAkKExJQl9DRklMRVMpICQoTElCX1ZBVVRIX0NGSUxFUykgJChMSUJfVlRMU19DRklMRVMpCi1ISEVBREVSUyA9ICQoTElCX0hGSUxFUykgJChMSUJfVkFVVEhfSEZJTEVTKSAkKExJQl9WVExTX0hGSUxFUykKK0NTT1VSQ0VTID0gJChMSUJfQ0ZJTEVTKSAkKExJQl9WQVVUSF9DRklMRVMpICQoTElCX1ZUTFNfQ0ZJTEVTKSBcCisgICQoTElCX1ZRVUlDX0NGSUxFUykgJChMSUJfVlNTSF9DRklMRVMpCitISEVBREVSUyA9ICQoTElCX0hGSUxFUykgJChMSUJfVkFVVEhfSEZJTEVTKSAkKExJQl9WVExTX0hGSUxFUykgXAorICAkKExJQl9WUVVJQ19IRklMRVMpICQoTElCX1ZTU0hfSEZJTEVTKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYWx0c3ZjLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuYwppbmRleCA4NWE0ZTAxLi5jMzlkODZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAicGFyc2VkYXRlLmgiCiAjaW5jbHVkZSAic2VuZGYuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgInJhbmQuaCIKKyNpbmNsdWRlICJyZW5hbWUuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCkBAIC00OCwxNSArNTAsMTkgQEAKICNkZWZpbmUgTUFYX0FMVFNWQ19BTFBOTEVOU1RSICIxMCIKICNkZWZpbmUgTUFYX0FMVFNWQ19BTFBOTEVOIDEwCiAKKyNpZiAoZGVmaW5lZChVU0VfUVVJQ0hFKSB8fCBkZWZpbmVkKFVTRV9OR1RDUDIpKSAmJiAhZGVmaW5lZChVTklUVEVTVFMpCisjZGVmaW5lIEgzVkVSU0lPTiAiaDMtMjciCisjZWxzZQorI2RlZmluZSBIM1ZFUlNJT04gImgzIgorI2VuZGlmCisKIHN0YXRpYyBlbnVtIGFscG5pZCBhbHBuMmFscG5pZChjaGFyICpuYW1lKQogewogICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCAiaDEiKSkKICAgICByZXR1cm4gQUxQTl9oMTsKICAgaWYoc3RyY2FzZWNvbXBhcmUobmFtZSwgImgyIikpCiAgICAgcmV0dXJuIEFMUE5faDI7Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJoMmMiKSkKLSAgICByZXR1cm4gQUxQTl9oMmM7Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJoMyIpKQorICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCBIM1ZFUlNJT04pKQogICAgIHJldHVybiBBTFBOX2gzOwogICByZXR1cm4gQUxQTl9ub25lOyAvKiB1bmtub3duLCBwcm9iYWJseSBydWJiaXNoIGlucHV0ICovCiB9CkBAIC02OSwxMCArNzUsOCBAQAogICAgIHJldHVybiAiaDEiOwogICBjYXNlIEFMUE5faDI6CiAgICAgcmV0dXJuICJoMiI7Ci0gIGNhc2UgQUxQTl9oMmM6Ci0gICAgcmV0dXJuICJoMmMiOwogICBjYXNlIEFMUE5faDM6Ci0gICAgcmV0dXJuICJoMyI7CisgICAgcmV0dXJuIEgzVkVSU0lPTjsKICAgZGVmYXVsdDoKICAgICByZXR1cm4gIiI7IC8qIGJhZCAqLwogICB9CkBAIC04MSw4ICs4NSw4IEBACiAKIHN0YXRpYyB2b2lkIGFsdHN2Y19mcmVlKHN0cnVjdCBhbHRzdmMgKmFzKQogewotICBmcmVlKGFzLT5zcmNob3N0KTsKLSAgZnJlZShhcy0+ZHN0aG9zdCk7CisgIGZyZWUoYXMtPnNyYy5ob3N0KTsKKyAgZnJlZShhcy0+ZHN0Lmhvc3QpOwogICBmcmVlKGFzKTsKIH0KIApAQCAtOTcsMTcgKzEwMSwxNyBAQAogICBpZighYXMpCiAgICAgcmV0dXJuIE5VTEw7CiAKLSAgYXMtPnNyY2hvc3QgPSBzdHJkdXAoc3JjaG9zdCk7Ci0gIGlmKCFhcy0+c3JjaG9zdCkKKyAgYXMtPnNyYy5ob3N0ID0gc3RyZHVwKHNyY2hvc3QpOworICBpZighYXMtPnNyYy5ob3N0KQogICAgIGdvdG8gZXJyb3I7Ci0gIGFzLT5kc3Rob3N0ID0gc3RyZHVwKGRzdGhvc3QpOwotICBpZighYXMtPmRzdGhvc3QpCisgIGFzLT5kc3QuaG9zdCA9IHN0cmR1cChkc3Rob3N0KTsKKyAgaWYoIWFzLT5kc3QuaG9zdCkKICAgICBnb3RvIGVycm9yOwogCi0gIGFzLT5zcmNhbHBuaWQgPSBzcmNhbHBuaWQ7Ci0gIGFzLT5kc3RhbHBuaWQgPSBkc3RhbHBuaWQ7Ci0gIGFzLT5zcmNwb3J0ID0gY3VybHhfdWx0b3VzKHNyY3BvcnQpOwotICBhcy0+ZHN0cG9ydCA9IGN1cmx4X3VsdG91cyhkc3Rwb3J0KTsKKyAgYXMtPnNyYy5hbHBuaWQgPSBzcmNhbHBuaWQ7CisgIGFzLT5kc3QuYWxwbmlkID0gZHN0YWxwbmlkOworICBhcy0+c3JjLnBvcnQgPSBjdXJseF91bHRvdXMoc3JjcG9ydCk7CisgIGFzLT5kc3QucG9ydCA9IGN1cmx4X3VsdG91cyhkc3Rwb3J0KTsKIAogICByZXR1cm4gYXM7CiAgIGVycm9yOgpAQCAtMTU2LDcgKzE2MCw3IEBACiAgICAgICAgICAgICAgIGRhdGUsICZwZXJzaXN0LCAmcHJpbyk7CiAgIGlmKDkgPT0gcmMpIHsKICAgICBzdHJ1Y3QgYWx0c3ZjICphczsKLSAgICB0aW1lX3QgZXhwaXJlcyA9IGN1cmxfZ2V0ZGF0ZShkYXRlLCBOVUxMKTsKKyAgICB0aW1lX3QgZXhwaXJlcyA9IEN1cmxfZ2V0ZGF0ZV9jYXBwZWQoZGF0ZSk7CiAgICAgYXMgPSBhbHRzdmNfY3JlYXRlKHNyY2hvc3QsIGRzdGhvc3QsIHNyY2FscG4sIGRzdGFscG4sIHNyY3BvcnQsIGRzdHBvcnQpOwogICAgIGlmKGFzKSB7CiAgICAgICBhcy0+ZXhwaXJlcyA9IGV4cGlyZXM7CkBAIC0xODMsNyArMTg3LDE2IEBACiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBjaGFyICpsaW5lID0gTlVMTDsKLSAgRklMRSAqZnAgPSBmb3BlbihmaWxlLCBGT1BFTl9SRUFEVEVYVCk7CisgIEZJTEUgKmZwOworCisgIC8qIHdlIG5lZWQgYSBwcml2YXRlIGNvcHkgb2YgdGhlIGZpbGUgbmFtZSBzbyB0aGF0IHRoZSBhbHRzdmMgY2FjaGUgZmlsZQorICAgICBuYW1lIHN1cnZpdmVzIGFuIGVhc3kgaGFuZGxlIHJlc2V0ICovCisgIGZyZWUoYXNpLT5maWxlbmFtZSk7CisgIGFzaS0+ZmlsZW5hbWUgPSBzdHJkdXAoZmlsZSk7CisgIGlmKCFhc2ktPmZpbGVuYW1lKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGZwID0gZm9wZW4oZmlsZSwgRk9QRU5fUkVBRFRFWFQpOwogICBpZihmcCkgewogICAgIGxpbmUgPSBtYWxsb2MoTUFYX0FMVFNWQ19MSU5FKTsKICAgICBpZighbGluZSkKQEAgLTIwNCw2ICsyMTcsNyBAQAogICByZXR1cm4gcmVzdWx0OwogCiAgIGZhaWw6CisgIEN1cmxfc2FmZWZyZWUoYXNpLT5maWxlbmFtZSk7CiAgIGZyZWUobGluZSk7CiAgIGZjbG9zZShmcCk7CiAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMjI2LDggKzI0MCw4IEBACiAgICAgICAgICAgIlwiJWQlMDJkJTAyZCAiCiAgICAgICAgICAgIiUwMmQ6JTAyZDolMDJkXCIgIgogICAgICAgICAgICIldSAlZFxuIiwKLSAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPnNyY2FscG5pZCksIGFzLT5zcmNob3N0LCBhcy0+c3JjcG9ydCwKLSAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdGFscG5pZCksIGFzLT5kc3Rob3N0LCBhcy0+ZHN0cG9ydCwKKyAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPnNyYy5hbHBuaWQpLCBhcy0+c3JjLmhvc3QsIGFzLT5zcmMucG9ydCwKKyAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdC5hbHBuaWQpLCBhcy0+ZHN0Lmhvc3QsIGFzLT5kc3QucG9ydCwKICAgICAgICAgICBzdGFtcC50bV95ZWFyICsgMTkwMCwgc3RhbXAudG1fbW9uICsgMSwgc3RhbXAudG1fbWRheSwKICAgICAgICAgICBzdGFtcC50bV9ob3VyLCBzdGFtcC50bV9taW4sIHN0YW1wLnRtX3NlYywKICAgICAgICAgICBhcy0+cGVyc2lzdCwgYXMtPnByaW8pOwpAQCAtMjUyLDcgKzI2Niw3IEBACiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICB8IENVUkxBTFRTVkNfSDIKICNlbmRpZgotI2lmZGVmIFVTRV9IVFRQMworI2lmZGVmIEVOQUJMRV9RVUlDCiAgICAgfCBDVVJMQUxUU1ZDX0gzCiAjZW5kaWYKICAgICA7CkBAIC0yOTcsNiArMzExLDcgQEAKICAgICAgIG4gPSBlLT5uZXh0OwogICAgICAgYWx0c3ZjX2ZyZWUoYXMpOwogICAgIH0KKyAgICBmcmVlKGFsdHN2Yy0+ZmlsZW5hbWUpOwogICAgIGZyZWUoYWx0c3ZjKTsKICAgfQogfQpAQCAtMzA0LDM0ICszMTksNTcgQEAKIC8qCiAgKiBDdXJsX2FsdHN2Y19zYXZlKCkgd3JpdGVzIHRoZSBhbHRzdmMgY2FjaGUgdG8gYSBmaWxlLgogICovCi1DVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBhbHRzdmNpbmZvICphbHRzdmMsIGNvbnN0IGNoYXIgKmZpbGUpCitDVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbHRzdmNpbmZvICphbHRzdmMsIGNvbnN0IGNoYXIgKmZpbGUpCiB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm47CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBGSUxFICpvdXQ7CisgIGNoYXIgKnRlbXBzdG9yZTsKKyAgdW5zaWduZWQgY2hhciByYW5kc3VmZml4WzldOwogCiAgIGlmKCFhbHRzdmMpCiAgICAgLyogbm8gY2FjaGUgYWN0aXZhdGVkICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0gIGlmKChhbHRzdmMtPmZsYWdzICYgQ1VSTEFMVFNWQ19SRUFET05MWUZJTEUpIHx8ICFmaWxlWzBdKQotICAgIC8qIG1hcmtlZCBhcyByZWFkLW9ubHkgb3IgemVybyBsZW5ndGggZmlsZSBuYW1lICovCisgIC8qIGlmIG5vdCBuZXcgbmFtZSBpcyBnaXZlbiwgdXNlIHRoZSBvbmUgd2Ugc3RvcmVkIGZyb20gdGhlIGxvYWQgKi8KKyAgaWYoIWZpbGUgJiYgYWx0c3ZjLT5maWxlbmFtZSkKKyAgICBmaWxlID0gYWx0c3ZjLT5maWxlbmFtZTsKKworICBpZigoYWx0c3ZjLT5mbGFncyAmIENVUkxBTFRTVkNfUkVBRE9OTFlGSUxFKSB8fCAhZmlsZSB8fCAhZmlsZVswXSkKKyAgICAvKiBtYXJrZWQgYXMgcmVhZC1vbmx5LCBubyBmaWxlIG9yIHplcm8gbGVuZ3RoIGZpbGUgbmFtZSAqLwogICAgIHJldHVybiBDVVJMRV9PSzsKLSAgb3V0ID0gZm9wZW4oZmlsZSwgRk9QRU5fV1JJVEVURVhUKTsKKworICBpZihDdXJsX3JhbmRfaGV4KGRhdGEsIHJhbmRzdWZmaXgsIHNpemVvZihyYW5kc3VmZml4KSkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworCisgIHRlbXBzdG9yZSA9IGFwcmludGYoIiVzLiVzLnRtcCIsIGZpbGUsIHJhbmRzdWZmaXgpOworICBpZighdGVtcHN0b3JlKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIG91dCA9IGZvcGVuKHRlbXBzdG9yZSwgRk9QRU5fV1JJVEVURVhUKTsKICAgaWYoIW91dCkKLSAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7Ci0gIGZwdXRzKCIjIFlvdXIgYWx0LXN2YyBjYWNoZS4gaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hbHQtc3ZjLmh0bWxcbiIKLSAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLlxuIiwKLSAgICAgICAgb3V0KTsKLSAgZm9yKGUgPSBhbHRzdmMtPmxpc3QuaGVhZDsgZTsgZSA9IG4pIHsKLSAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKLSAgICBuID0gZS0+bmV4dDsKLSAgICByZXN1bHQgPSBhbHRzdmNfb3V0KGFzLCBvdXQpOworICAgIHJlc3VsdCA9IENVUkxFX1dSSVRFX0VSUk9SOworICBlbHNlIHsKKyAgICBmcHV0cygiIyBZb3VyIGFsdC1zdmMgY2FjaGUuIGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvYWx0LXN2Yy5odG1sXG4iCisgICAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLlxuIiwKKyAgICAgICAgICBvdXQpOworICAgIGZvcihlID0gYWx0c3ZjLT5saXN0LmhlYWQ7IGU7IGUgPSBuKSB7CisgICAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKKyAgICAgIG4gPSBlLT5uZXh0OworICAgICAgcmVzdWx0ID0gYWx0c3ZjX291dChhcywgb3V0KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZjbG9zZShvdXQpOworICAgIGlmKCFyZXN1bHQgJiYgQ3VybF9yZW5hbWUodGVtcHN0b3JlLCBmaWxlKSkKKyAgICAgIHJlc3VsdCA9IENVUkxFX1dSSVRFX0VSUk9SOworCiAgICAgaWYocmVzdWx0KQotICAgICAgYnJlYWs7CisgICAgICB1bmxpbmsodGVtcHN0b3JlKTsKICAgfQotICBmY2xvc2Uob3V0KTsKKyAgZnJlZSh0ZW1wc3RvcmUpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zNDMsMTUgKzM4MSwxNSBAQAogICB3aGlsZSgqcCAmJiBJU0JMQU5LKCpwKSkKICAgICBwKys7CiAgIHByb3RvcCA9IHA7Ci0gIHdoaWxlKCpwICYmIElTQUxOVU0oKnApKQorICB3aGlsZSgqcCAmJiAhSVNCTEFOSygqcCkgJiYgKCpwICE9ICc7JykgJiYgKCpwICE9ICc9JykpCiAgICAgcCsrOwogICBsZW4gPSBwIC0gcHJvdG9wOworICAqcHRyID0gcDsKIAogICBpZighbGVuIHx8IChsZW4gPj0gYnVmbGVuKSkKICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICBtZW1jcHkoYWxwbmJ1ZiwgcHJvdG9wLCBsZW4pOwogICBhbHBuYnVmW2xlbl0gPSAwOwotICAqcHRyID0gcDsKICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0zNjUsOSArNDAzLDkgQEAKICAgZm9yKGUgPSBhc2ktPmxpc3QuaGVhZDsgZTsgZSA9IG4pIHsKICAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKICAgICBuID0gZS0+bmV4dDsKLSAgICBpZigoc3JjYWxwbmlkID09IGFzLT5zcmNhbHBuaWQpICYmCi0gICAgICAgKHNyY3BvcnQgPT0gYXMtPnNyY3BvcnQpICYmCi0gICAgICAgc3RyY2FzZWNvbXBhcmUoc3JjaG9zdCwgYXMtPnNyY2hvc3QpKSB7CisgICAgaWYoKHNyY2FscG5pZCA9PSBhcy0+c3JjLmFscG5pZCkgJiYKKyAgICAgICAoc3JjcG9ydCA9PSBhcy0+c3JjLnBvcnQpICYmCisgICAgICAgc3RyY2FzZWNvbXBhcmUoc3JjaG9zdCwgYXMtPnNyYy5ob3N0KSkgewogICAgICAgQ3VybF9sbGlzdF9yZW1vdmUoJmFzaS0+bGlzdCwgZSwgTlVMTCk7CiAgICAgICBhbHRzdmNfZnJlZShhcyk7CiAgICAgICBhc2ktPm51bS0tOwpAQCAtMzk3LDYgKzQzNSwxMCBAQAogICoKICAqICd2YWx1ZScgcG9pbnRzIHRvIHRoZSBoZWFkZXIgKnZhbHVlKi4gVGhhdCdzIGNvbnRlbnRzIHRvIHRoZSByaWdodCBvZiB0aGUKICAqIGhlYWRlciBuYW1lLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIHJlamVjdHMgaW52YWxpZCBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGFuIGVycm9yLgorICogSW52YWxpZCBob3N0IG5hbWUsIHBvcnQgbnVtYmVyIHdpbGwgcmVzdWx0IGluIHRoZSBzcGVjaWZpYyBhbHRlcm5hdGl2ZQorICogYmVpbmcgcmVqZWN0ZWQuIFVua25vd24gcHJvdG9jb2xzIGFyZSBza2lwcGVkLgogICovCiBDVVJMY29kZSBDdXJsX2FsdHN2Y19wYXJzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgY2hhciAqdmFsdWUsCkBAIC00MTAsMTIgKzQ1MiwxMSBAQAogICBjaGFyIGFscG5idWZbTUFYX0FMVFNWQ19BTFBOTEVOXSA9ICIiOwogICBzdHJ1Y3QgYWx0c3ZjICphczsKICAgdW5zaWduZWQgc2hvcnQgZHN0cG9ydCA9IHNyY3BvcnQ7IC8qIHRoZSBzYW1lIGJ5IGRlZmF1bHQgKi8KLSAgY29uc3QgY2hhciAqc2VtaXA7Ci0gIHRpbWVfdCBtYXhhZ2UgPSAyNCAqIDM2MDA7IC8qIGRlZmF1bHQgaXMgMjQgaG91cnMgKi8KLSAgYm9vbCBwZXJzaXN0ID0gRkFMU0U7CiAgIENVUkxjb2RlIHJlc3VsdCA9IGdldGFsbnVtKCZwLCBhbHBuYnVmLCBzaXplb2YoYWxwbmJ1ZikpOwotICBpZihyZXN1bHQpCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgaWYocmVzdWx0KSB7CisgICAgaW5mb2YoZGF0YSwgIkV4Y2Vzc2l2ZSBhbHQtc3ZjIGhlYWRlciwgaWdub3JpbmcuLi5cbiIpOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQogCiAgIERFQlVHQVNTRVJUKGFzaSk7CiAKQEAgLTQyNyw0NyArNDY4LDIwIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9CiAKLSAgLyogVGhlICdtYScgYW5kICdwZXJzaXN0JyBmbGFncyBhcmUgYW5ub3lpbmdseSBtZWFudCBmb3IgYWxsIGFsdGVybmF0aXZlcwotICAgICBidXQgYXJlIHNldCBhZnRlciB0aGUgbGlzdCBvbiB0aGUgbGluZS4gU2NhbiBmb3IgdGhlIHNlbWljb2xvbnMgYW5kIGdldAotICAgICB0aG9zZSBmaWVsZHMgZmlyc3QhICovCi0gIHNlbWlwID0gcDsKLSAgZG8gewotICAgIHNlbWlwID0gc3RyY2hyKHNlbWlwLCAnOycpOwotICAgIGlmKHNlbWlwKSB7Ci0gICAgICBjaGFyIG9wdGlvblszMl07Ci0gICAgICB1bnNpZ25lZCBsb25nIG51bTsKLSAgICAgIGNoYXIgKmVuZF9wdHI7Ci0gICAgICBzZW1pcCsrOyAvKiBwYXNzIHRoZSBzZW1pY29sb24gKi8KLSAgICAgIHJlc3VsdCA9IGdldGFsbnVtKCZzZW1pcCwgb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIGJyZWFrOwotICAgICAgd2hpbGUoKnNlbWlwICYmIElTQkxBTksoKnNlbWlwKSkKLSAgICAgICAgc2VtaXArKzsKLSAgICAgIGlmKCpzZW1pcCAhPSAnPScpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgc2VtaXArKzsKLSAgICAgIG51bSA9IHN0cnRvdWwoc2VtaXAsICZlbmRfcHRyLCAxMCk7Ci0gICAgICBpZihudW0gPCBVTE9OR19NQVgpIHsKLSAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoIm1hIiwgb3B0aW9uKSkKLSAgICAgICAgICBtYXhhZ2UgPSBudW07Ci0gICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoInBlcnNpc3QiLCBvcHRpb24pICYmIChudW0gPT0gMSkpCi0gICAgICAgICAgcGVyc2lzdCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBzZW1pcCA9IGVuZF9wdHI7Ci0gICAgfQotICB9IHdoaWxlKHNlbWlwKTsKLQogICBkbyB7CiAgICAgaWYoKnAgPT0gJz0nKSB7CiAgICAgICAvKiBbcHJvdG9jb2xdPSJbaG9zdF1bOnBvcnRdIiAqLwogICAgICAgZHN0YWxwbmlkID0gYWxwbjJhbHBuaWQoYWxwbmJ1Zik7Ci0gICAgICBpZighZHN0YWxwbmlkKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJVbmtub3duIGFsdC1zdmMgcHJvdG9jb2wgXCIlc1wiLCBpZ25vcmluZy4uLlxuIiwgYWxwbmJ1Zik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICAgIH0KICAgICAgIHArKzsKICAgICAgIGlmKCpwID09ICdcIicpIHsKICAgICAgICAgY29uc3QgY2hhciAqZHN0aG9zdDsKKyAgICAgICAgY29uc3QgY2hhciAqdmFsdWVfcHRyOworICAgICAgICBjaGFyIG9wdGlvblszMl07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtOworICAgICAgICBjaGFyICplbmRfcHRyOworICAgICAgICBib29sIHF1b3RlZCA9IEZBTFNFOworICAgICAgICB0aW1lX3QgbWF4YWdlID0gMjQgKiAzNjAwOyAvKiBkZWZhdWx0IGlzIDI0IGhvdXJzICovCisgICAgICAgIGJvb2wgcGVyc2lzdCA9IEZBTFNFOwogICAgICAgICBwKys7CiAgICAgICAgIGlmKCpwICE9ICc6JykgewogICAgICAgICAgIC8qIGhvc3QgbmFtZSBzdGFydHMgaGVyZSAqLwpAQCAtNDc1LDExICs0ODksMTUgQEAKICAgICAgICAgICB3aGlsZSgqcCAmJiAoSVNBTE5VTSgqcCkgfHwgKCpwID09ICcuJykgfHwgKCpwID09ICctJykpKQogICAgICAgICAgICAgcCsrOwogICAgICAgICAgIGxlbiA9IHAgLSBob3N0cDsKLSAgICAgICAgICBpZighbGVuIHx8IChsZW4gPj0gTUFYX0FMVFNWQ19IT1NUTEVOKSkKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7Ci0gICAgICAgICAgbWVtY3B5KG5hbWVidWYsIGhvc3RwLCBsZW4pOwotICAgICAgICAgIG5hbWVidWZbbGVuXSA9IDA7Ci0gICAgICAgICAgZHN0aG9zdCA9IG5hbWVidWY7CisgICAgICAgICAgaWYoIWxlbiB8fCAobGVuID49IE1BWF9BTFRTVkNfSE9TVExFTikpIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJFeGNlc3NpdmUgYWx0LXN2YyBob3N0IG5hbWUsIGlnbm9yaW5nLi4uXG4iKTsKKyAgICAgICAgICAgIGRzdGFscG5pZCA9IEFMUE5fbm9uZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkobmFtZWJ1ZiwgaG9zdHAsIGxlbik7CisgICAgICAgICAgICBuYW1lYnVmW2xlbl0gPSAwOworICAgICAgICAgICAgZHN0aG9zdCA9IG5hbWVidWY7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIC8qIG5vIGRlc3RpbmF0aW9uIG5hbWUsIHVzZSBzb3VyY2UgaG9zdCAqLwpAQCAtNDg3LDMxICs1MDUsODYgQEAKICAgICAgICAgfQogICAgICAgICBpZigqcCA9PSAnOicpIHsKICAgICAgICAgICAvKiBhIHBvcnQgbnVtYmVyICovCi0gICAgICAgICAgY2hhciAqZW5kX3B0cjsKICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQgPSBzdHJ0b3VsKCsrcCwgJmVuZF9wdHIsIDEwKTsKICAgICAgICAgICBpZihwb3J0ID4gVVNIUlRfTUFYIHx8IGVuZF9wdHIgPT0gcCB8fCAqZW5kX3B0ciAhPSAnXCInKSB7CiAgICAgICAgICAgICBpbmZvZihkYXRhLCAiVW5rbm93biBhbHQtc3ZjIHBvcnQgbnVtYmVyLCBpZ25vcmluZy4uLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgICAgICBkc3RhbHBuaWQgPSBBTFBOX25vbmU7CiAgICAgICAgICAgfQogICAgICAgICAgIHAgPSBlbmRfcHRyOwogICAgICAgICAgIGRzdHBvcnQgPSBjdXJseF91bHRvdXMocG9ydCk7CiAgICAgICAgIH0KICAgICAgICAgaWYoKnArKyAhPSAnXCInKQotICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7Ci0gICAgICAgIGFzID0gYWx0c3ZjX2NyZWF0ZWlkKHNyY2hvc3QsIGRzdGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2FscG5pZCwgZHN0YWxwbmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNwb3J0LCBkc3Rwb3J0KTsKLSAgICAgICAgaWYoYXMpIHsKLSAgICAgICAgICAvKiBUaGUgZXhwaXJlcyB0aW1lIGFsc28gbmVlZHMgdG8gdGFrZSB0aGUgQWdlOiB2YWx1ZSAoaWYgYW55KSBpbnRvCi0gICAgICAgICAgICAgYWNjb3VudC4gW1NlZSBSRkMgNzgzOCBzZWN0aW9uIDMuMV0gKi8KLSAgICAgICAgICBhcy0+ZXhwaXJlcyA9IG1heGFnZSArIHRpbWUoTlVMTCk7Ci0gICAgICAgICAgYXMtPnBlcnNpc3QgPSBwZXJzaXN0OwotICAgICAgICAgIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoJmFzaS0+bGlzdCwgYXNpLT5saXN0LnRhaWwsIGFzLCAmYXMtPm5vZGUpOwotICAgICAgICAgIGFzaS0+bnVtKys7IC8qIG9uZSBtb3JlIGVudHJ5ICovCi0gICAgICAgICAgaW5mb2YoZGF0YSwgIkFkZGVkIGFsdC1zdmM6ICVzOiVkIG92ZXIgJXNcbiIsIGRzdGhvc3QsIGRzdHBvcnQsCi0gICAgICAgICAgICAgICAgQ3VybF9hbHBuaWQyc3RyKGRzdGFscG5pZCkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBIYW5kbGUgdGhlIG9wdGlvbmFsICdtYScgYW5kICdwZXJzaXN0JyBmbGFncy4gVW5rbm93biBmbGFncworICAgICAgICAgICBhcmUgc2tpcHBlZC4gKi8KKyAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgd2hpbGUoKnAgJiYgSVNCTEFOSygqcCkgJiYgKnAgIT0gJzsnICYmICpwICE9ICcsJykKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZighKnAgfHwgKnAgPT0gJywnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcCsrOyAvKiBwYXNzIHRoZSBzZW1pY29sb24gKi8KKyAgICAgICAgICBpZighKnApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICByZXN1bHQgPSBnZXRhbG51bSgmcCwgb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7CisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICAvKiBza2lwIG9wdGlvbiBpZiBuYW1lIGlzIHRvbyBsb25nICovCisgICAgICAgICAgICBvcHRpb25bMF0gPSAnXDAnOworICAgICAgICAgIH0KKyAgICAgICAgICB3aGlsZSgqcCAmJiBJU0JMQU5LKCpwKSkKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZigqcCAhPSAnPScpCisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgICAgcCsrOworICAgICAgICAgIHdoaWxlKCpwICYmIElTQkxBTksoKnApKQorICAgICAgICAgICAgcCsrOworICAgICAgICAgIGlmKCEqcCkKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICBpZigqcCA9PSAnXCInKSB7CisgICAgICAgICAgICAvKiBxdW90ZWQgdmFsdWUgKi8KKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIHF1b3RlZCA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICAgIHZhbHVlX3B0ciA9IHA7CisgICAgICAgICAgaWYocXVvdGVkKSB7CisgICAgICAgICAgICB3aGlsZSgqcCAmJiAqcCAhPSAnXCInKQorICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICBpZighKnArKykKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHdoaWxlKCpwICYmICFJU0JMQU5LKCpwKSAmJiAqcCE9ICc7JyAmJiAqcCAhPSAnLCcpCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICB9CisgICAgICAgICAgbnVtID0gc3RydG91bCh2YWx1ZV9wdHIsICZlbmRfcHRyLCAxMCk7CisgICAgICAgICAgaWYoKGVuZF9wdHIgIT0gdmFsdWVfcHRyKSAmJiAobnVtIDwgVUxPTkdfTUFYKSkgeworICAgICAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoIm1hIiwgb3B0aW9uKSkKKyAgICAgICAgICAgICAgbWF4YWdlID0gbnVtOworICAgICAgICAgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSgicGVyc2lzdCIsIG9wdGlvbikgJiYgKG51bSA9PSAxKSkKKyAgICAgICAgICAgICAgcGVyc2lzdCA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGRzdGFscG5pZCkgeworICAgICAgICAgIGFzID0gYWx0c3ZjX2NyZWF0ZWlkKHNyY2hvc3QsIGRzdGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjYWxwbmlkLCBkc3RhbHBuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjcG9ydCwgZHN0cG9ydCk7CisgICAgICAgICAgaWYoYXMpIHsKKyAgICAgICAgICAgIC8qIFRoZSBleHBpcmVzIHRpbWUgYWxzbyBuZWVkcyB0byB0YWtlIHRoZSBBZ2U6IHZhbHVlIChpZiBhbnkpIGludG8KKyAgICAgICAgICAgICAgIGFjY291bnQuIFtTZWUgUkZDIDc4Mzggc2VjdGlvbiAzLjFdICovCisgICAgICAgICAgICBhcy0+ZXhwaXJlcyA9IG1heGFnZSArIHRpbWUoTlVMTCk7CisgICAgICAgICAgICBhcy0+cGVyc2lzdCA9IHBlcnNpc3Q7CisgICAgICAgICAgICBDdXJsX2xsaXN0X2luc2VydF9uZXh0KCZhc2ktPmxpc3QsIGFzaS0+bGlzdC50YWlsLCBhcywgJmFzLT5ub2RlKTsKKyAgICAgICAgICAgIGFzaS0+bnVtKys7IC8qIG9uZSBtb3JlIGVudHJ5ICovCisgICAgICAgICAgICBpbmZvZihkYXRhLCAiQWRkZWQgYWx0LXN2YzogJXM6JWQgb3ZlciAlc1xuIiwgZHN0aG9zdCwgZHN0cG9ydCwKKyAgICAgICAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihkc3RhbHBuaWQpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIlVua25vd24gYWx0LXN2YyBwcm90b2NvbCBcIiVzXCIsIHNraXBwaW5nLi4uXG4iLAorICAgICAgICAgICAgICAgIGFscG5idWYpOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOwogICAgICAgLyogYWZ0ZXIgdGhlIGRvdWJsZSBxdW90ZSB0aGVyZSBjYW4gYmUgYSBjb21tYSBpZiB0aGVyZSdzIGFub3RoZXIKICAgICAgICAgIHN0cmluZyBvciBhIHNlbWljb2xvbiBpZiBubyBtb3JlICovCiAgICAgICBpZigqcCA9PSAnLCcpIHsKQEAgLTUxOSwxMSArNTkyLDExIEBACiAgICAgICAgIHArKzsKICAgICAgICAgcmVzdWx0ID0gZ2V0YWxudW0oJnAsIGFscG5idWYsIHNpemVvZihhbHBuYnVmKSk7CiAgICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICAvKiBmYWlsZWQgdG8gcGFyc2UsIGJ1dCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCBhdCBsZWFzdCBvbmUgaG9zdCB3ZQotICAgICAgICAgICAgIHJldHVybiBPSyAqLwotICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CiAgIH0gd2hpbGUoKnAgJiYgKCpwICE9ICc7JykgJiYgKCpwICE9ICdcbicpICYmICgqcCAhPSAnXHInKSk7CiAKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtNTM1LDMxICs2MDgsMzEgQEAKIGJvb2wgQ3VybF9hbHRzdmNfbG9va3VwKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFscG5pZCBzcmNhbHBuaWQsIGNvbnN0IGNoYXIgKnNyY2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gYWxwbmlkICpkc3RhbHBuaWQsIGNvbnN0IGNoYXIgKipkc3Rob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkc3Rwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2YyAqKmRzdGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHZlcnNpb25zKSAvKiBvbmUgb3IgbW9yZSBiaXRzICovCiB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm47CiAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOwogICBERUJVR0FTU0VSVChhc2kpOwogICBERUJVR0FTU0VSVChzcmNob3N0KTsKLSAgREVCVUdBU1NFUlQoZHN0aG9zdCk7CisgIERFQlVHQVNTRVJUKGRzdGVudHJ5KTsKIAogICBmb3IoZSA9IGFzaS0+bGlzdC5oZWFkOyBlOyBlID0gbikgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzID0gZS0+cHRyOwogICAgIG4gPSBlLT5uZXh0OwogICAgIGlmKGFzLT5leHBpcmVzIDwgbm93KSB7CiAgICAgICAvKiBhbiBleHBpcmVkIGVudHJ5LCByZW1vdmUgKi8KKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKCZhc2ktPmxpc3QsIGUsIE5VTEwpOwogICAgICAgYWx0c3ZjX2ZyZWUoYXMpOwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGlmKChhcy0+c3JjYWxwbmlkID09IHNyY2FscG5pZCkgJiYKLSAgICAgICBzdHJjYXNlY29tcGFyZShhcy0+c3JjaG9zdCwgc3JjaG9zdCkgJiYKLSAgICAgICBhcy0+c3JjcG9ydCA9PSBzcmNwb3J0KSB7CisgICAgaWYoKGFzLT5zcmMuYWxwbmlkID09IHNyY2FscG5pZCkgJiYKKyAgICAgICBzdHJjYXNlY29tcGFyZShhcy0+c3JjLmhvc3QsIHNyY2hvc3QpICYmCisgICAgICAgKGFzLT5zcmMucG9ydCA9PSBzcmNwb3J0KSAmJgorICAgICAgICh2ZXJzaW9ucyAmIGFzLT5kc3QuYWxwbmlkKSkgewogICAgICAgLyogbWF0Y2ggKi8KLSAgICAgICpkc3RhbHBuaWQgPSBhcy0+ZHN0YWxwbmlkOwotICAgICAgKmRzdGhvc3QgPSBhcy0+ZHN0aG9zdDsKLSAgICAgICpkc3Rwb3J0ID0gYXMtPmRzdHBvcnQ7CisgICAgICAqZHN0ZW50cnkgPSBhczsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYWx0c3ZjLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaAppbmRleCBlZWZiNDViLi4yNDhlNzFlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCwyMCArMjgsMjEgQEAKICNpbmNsdWRlICJsbGlzdC5oIgogCiBlbnVtIGFscG5pZCB7Ci0gIEFMUE5fbm9uZSwKLSAgQUxQTl9oMSwKLSAgQUxQTl9oMiwKLSAgQUxQTl9oMmMsCi0gIEFMUE5faDMKKyAgQUxQTl9ub25lID0gMCwKKyAgQUxQTl9oMSA9IENVUkxBTFRTVkNfSDEsCisgIEFMUE5faDIgPSBDVVJMQUxUU1ZDX0gyLAorICBBTFBOX2gzID0gQ1VSTEFMVFNWQ19IMworfTsKKworc3RydWN0IGFsdGhvc3QgeworICBjaGFyICpob3N0OworICB1bnNpZ25lZCBzaG9ydCBwb3J0OworICBlbnVtIGFscG5pZCBhbHBuaWQ7CiB9OwogCiBzdHJ1Y3QgYWx0c3ZjIHsKLSAgY2hhciAqc3JjaG9zdDsKLSAgY2hhciAqZHN0aG9zdDsKLSAgdW5zaWduZWQgc2hvcnQgc3JjcG9ydDsKLSAgdW5zaWduZWQgc2hvcnQgZHN0cG9ydDsKLSAgZW51bSBhbHBuaWQgc3JjYWxwbmlkOwotICBlbnVtIGFscG5pZCBkc3RhbHBuaWQ7CisgIHN0cnVjdCBhbHRob3N0IHNyYzsKKyAgc3RydWN0IGFsdGhvc3QgZHN0OwogICB0aW1lX3QgZXhwaXJlczsKICAgYm9vbCBwZXJzaXN0OwogICBpbnQgcHJpbzsKQEAgLTU4LDcgKzU5LDggQEAKIGNvbnN0IGNoYXIgKkN1cmxfYWxwbmlkMnN0cihlbnVtIGFscG5pZCBpZCk7CiBzdHJ1Y3QgYWx0c3ZjaW5mbyAqQ3VybF9hbHRzdmNfaW5pdCh2b2lkKTsKIENVUkxjb2RlIEN1cmxfYWx0c3ZjX2xvYWQoc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgY2hhciAqZmlsZSk7Ci1DVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksIGNvbnN0IGNoYXIgKmZpbGUpOworQ1VSTGNvZGUgQ3VybF9hbHRzdmNfc2F2ZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWx0c3ZjaW5mbyAqYXNpLCBjb25zdCBjaGFyICpmaWxlKTsKIENVUkxjb2RlIEN1cmxfYWx0c3ZjX2N0cmwoc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgbG9uZyBjdHJsKTsKIHZvaWQgQ3VybF9hbHRzdmNfY2xlYW51cChzdHJ1Y3QgYWx0c3ZjaW5mbyAqYWx0c3ZjKTsKIENVUkxjb2RlIEN1cmxfYWx0c3ZjX3BhcnNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCkBAIC02OCwxMCArNzAsMTAgQEAKIGJvb2wgQ3VybF9hbHRzdmNfbG9va3VwKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFscG5pZCBzcmNhbHBuaWQsIGNvbnN0IGNoYXIgKnNyY2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gYWxwbmlkICpkc3RhbHBuaWQsIGNvbnN0IGNoYXIgKipkc3Rob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkc3Rwb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbHRzdmMgKipkc3RlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ZXJzaW9ucyk7IC8qIENVUkxBTFRTVkNfSCogYml0cyAqLwogI2Vsc2UKIC8qIGRpc2FibGVkICovCi0jZGVmaW5lIEN1cmxfYWx0c3ZjX3NhdmUoYSxiKQorI2RlZmluZSBDdXJsX2FsdHN2Y19zYXZlKGEsYixjKQogI2VuZGlmIC8qIENVUkxfRElTQUJMRV9IVFRQIHx8IFVTRV9BTFRTVkMgKi8KICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9BTFRTVkNfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLWFyZXMuYwppbmRleCA4NTYxYTQ3Li5iNzZlNjY1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLWFyZXMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLWFyZXMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUzLDE2ICsyNTMsMTQgQEAKICAqLwogCiBpbnQgQ3VybF9yZXNvbHZlcl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKICAgc3RydWN0IHRpbWV2YWwgbWF4dGltZTsKICAgc3RydWN0IHRpbWV2YWwgdGltZWJ1ZjsKICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQ7CiAgIGxvbmcgbWlsbGk7CiAgIGludCBtYXggPSBhcmVzX2dldHNvY2soKGFyZXNfY2hhbm5lbCljb25uLT5kYXRhLT5zdGF0ZS5yZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlc19zb2NrZXRfdCAqKXNvY2tzLCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZXNfc29ja2V0X3QgKilzb2NrcywgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRSk7CiAKICAgbWF4dGltZS50dl9zZWMgPSBDVVJMX1RJTUVPVVRfUkVTT0xWRTsKICAgbWF4dGltZS50dl91c2VjID0gMDsKQEAgLTYyOCwyNiArNjI2LDExIEBACiB7CiAgIGNoYXIgKmJ1ZnA7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgaW5fYWRkciBpbjsKICAgaW50IGZhbWlseSA9IFBGX0lORVQ7Ci0jaWZkZWYgRU5BQkxFX0lQVjYgLyogQ1VSTFJFU19JUFY2ICovCi0gIHN0cnVjdCBpbjZfYWRkciBpbjY7Ci0jZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0gIC8qIEZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NCBhZGRyZXNzIHN0cmluZyAqLwotICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApIHsKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLSAgfQotCiAjaWZkZWYgRU5BQkxFX0lQVjYgLyogQ1VSTFJFU19JUFY2ICovCi0gIC8qIE90aGVyd2lzZSwgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY2IGFkZHJlc3Mgc3RyaW5nICovCi0gIGlmKEN1cmxfaW5ldF9wdG9uIChBRl9JTkVUNiwgaG9zdG5hbWUsICZpbjYpID4gMCkKLSAgICAvKiBUaGlzIG11c3QgYmUgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwuICAqLwotICAgIHJldHVybiBDdXJsX2lwMmFkZHIoQUZfSU5FVDYsICZpbjYsIGhvc3RuYW1lLCBwb3J0KTsKLQogICBzd2l0Y2goY29ubi0+aXBfdmVyc2lvbikgewogICBkZWZhdWx0OgogI2lmIEFSRVNfVkVSU0lPTiA+PSAweDAxMDYwMQpAQCAtNjg2LDcgKzY2OSw3IEBACiAgICAgcmVzLT5sYXN0X3N0YXR1cyA9IEFSRVNfRU5PVEZPVU5EOwogI2lmZGVmIEVOQUJMRV9JUFY2IC8qIENVUkxSRVNfSVBWNiAqLwogICAgIGlmKGZhbWlseSA9PSBQRl9VTlNQRUMpIHsKLSAgICAgIGlmKEN1cmxfaXB2NndvcmtzKCkpIHsKKyAgICAgIGlmKEN1cmxfaXB2NndvcmtzKGNvbm4pKSB7CiAgICAgICAgIHJlcy0+bnVtX3BlbmRpbmcgPSAyOwogCiAgICAgICAgIC8qIGFyZXNjaGFubmVsIGlzIGFscmVhZHkgc2V0dXAgaW4gdGhlIEN1cmxfb3BlbigpIGZ1bmN0aW9uICovCkBAIC03MzQsNyArNzE3LDExIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogCiAjaWYgKEFSRVNfVkVSU0lPTiA+PSAweDAxMDcwNCkKKyNpZiAoQVJFU19WRVJTSU9OID49IDB4MDEwYjAwKQorICBhcmVzX3Jlc3VsdCA9IGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2KGRhdGEtPnN0YXRlLnJlc29sdmVyLCBzZXJ2ZXJzKTsKKyNlbHNlCiAgIGFyZXNfcmVzdWx0ID0gYXJlc19zZXRfc2VydmVyc19jc3YoZGF0YS0+c3RhdGUucmVzb2x2ZXIsIHNlcnZlcnMpOworI2VuZGlmCiAgIHN3aXRjaChhcmVzX3Jlc3VsdCkgewogICBjYXNlIEFSRVNfU1VDQ0VTUzoKICAgICByZXN1bHQgPSBDVVJMRV9PSzsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tdGhyZWFkLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLXRocmVhZC5jCmluZGV4IDU1ZTA4MTEuLjY4ZGNiYjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tdGhyZWFkLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi10aHJlYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNiArMjEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogT25seSBmb3IgdGhyZWFkZWQgbmFtZSByZXNvbHZlcyBidWlsZHMKQEAgLTcwLDEwICs3MSwxMCBAQAogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgImluZXRfcHRvbi5oIgogI2luY2x1ZGUgImluZXRfbnRvcC5oIgogI2luY2x1ZGUgImN1cmxfdGhyZWFkcy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtMTYzLDYgKzE2NCwxMCBAQAogICBjaGFyICpob3N0bmFtZTsgICAgICAgIC8qIGhvc3RuYW1lIHRvIHJlc29sdmUsIEN1cmxfYXN5bmMuaG9zdG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGUgKi8KICAgaW50IHBvcnQ7CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOworICBjdXJsX3NvY2tldF90IHNvY2tfcGFpclsyXTsgLyogc29ja2V0IHBhaXIgKi8KKyNlbmRpZgogICBpbnQgc29ja19lcnJvcjsKICAgQ3VybF9hZGRyaW5mbyAqcmVzOwogI2lmZGVmIEhBVkVfR0VUQUREUklORk8KQEAgLTE5Nyw2ICsyMDIsMTUgQEAKICAgaWYodHNkLT5yZXMpCiAgICAgQ3VybF9mcmVlYWRkcmluZm8odHNkLT5yZXMpOwogCisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgLyoKKyAgICogY2xvc2Ugb25lIGVuZCBvZiB0aGUgc29ja2V0IHBhaXIgKG1heSBiZSBkb25lIGluIHJlc29sdmVyIHRocmVhZCk7CisgICAqIHRoZSBvdGhlciBlbmQgKGZvciByZWFkaW5nKSBpcyBhbHdheXMgY2xvc2VkIGluIHRoZSBwYXJlbnQgdGhyZWFkLgorICAgKi8KKyAgaWYodHNkLT5zb2NrX3BhaXJbMV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgc2Nsb3NlKHRzZC0+c29ja19wYWlyWzFdKTsKKyAgfQorI2VuZGlmCiAgIG1lbXNldCh0c2QsIDAsIHNpemVvZigqdHNkKSk7CiB9CiAKQEAgLTIzMCw2ICsyNDQsMTQgQEAKIAogICBDdXJsX211dGV4X2luaXQodHNkLT5tdHgpOwogCisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgLyogY3JlYXRlIHNvY2tldCBwYWlyLCBhdm9pZCBBRl9MT0NBTCBzaW5jZSBpdCBkb2Vzbid0IGJ1aWxkIG9uIFNvbGFyaXMgKi8KKyAgaWYoQ3VybF9zb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCAmdHNkLT5zb2NrX3BhaXJbMF0pIDwgMCkgeworICAgIHRzZC0+c29ja19wYWlyWzBdID0gQ1VSTF9TT0NLRVRfQkFEOworICAgIHRzZC0+c29ja19wYWlyWzFdID0gQ1VSTF9TT0NLRVRfQkFEOworICAgIGdvdG8gZXJyX2V4aXQ7CisgIH0KKyNlbmRpZgogICB0c2QtPnNvY2tfZXJyb3IgPSBDVVJMX0FTWU5DX1NVQ0NFU1M7CiAKICAgLyogQ29weWluZyBob3N0bmFtZSBzdHJpbmcgYmVjYXVzZSBvcmlnaW5hbCBjYW4gYmUgZGVzdHJveWVkIGJ5IHBhcmVudApAQCAtMjc2LDYgKzI5OCw5IEBACiAgIHN0cnVjdCB0aHJlYWRfZGF0YSAqdGQgPSB0c2QtPnRkOwogICBjaGFyIHNlcnZpY2VbMTJdOwogICBpbnQgcmM7CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgY2hhciBidWZbMV07CisjZW5kaWYKIAogICBtc25wcmludGYoc2VydmljZSwgc2l6ZW9mKHNlcnZpY2UpLCAiJWQiLCB0c2QtPnBvcnQpOwogCkBAIC0yOTgsNiArMzIzLDE2IEBACiAgICAgZnJlZSh0ZCk7CiAgIH0KICAgZWxzZSB7CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgICBpZih0c2QtPnNvY2tfcGFpclsxXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgIC8qIEROUyBoYXMgYmVlbiByZXNvbHZlZCwgc2lnbmFsIGNsaWVudCB0YXNrICovCisgICAgICBidWZbMF0gPSAxOworICAgICAgaWYoc3dyaXRlKHRzZC0+c29ja19wYWlyWzFdLCAgYnVmLCBzaXplb2YoYnVmKSkgPCAwKSB7CisgICAgICAgIC8qIHVwZGF0ZSBzb2NrX2Vycm8gdG8gZXJybm8gKi8KKyAgICAgICAgdHNkLT5zb2NrX2Vycm9yID0gU09DS0VSUk5POworICAgICAgfQorICAgIH0KKyNlbmRpZgogICAgIHRzZC0+ZG9uZSA9IDE7CiAgICAgQ3VybF9tdXRleF9yZWxlYXNlKHRzZC0+bXR4KTsKICAgfQpAQCAtMzQ4LDYgKzM4MywxMCBAQAogICBpZihhc3luYy0+b3Nfc3BlY2lmaWMpIHsKICAgICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkID0gKHN0cnVjdCB0aHJlYWRfZGF0YSopIGFzeW5jLT5vc19zcGVjaWZpYzsKICAgICBpbnQgZG9uZTsKKyNpZmRlZiBVU0VfU09DS0VUUEFJUgorICAgIGN1cmxfc29ja2V0X3Qgc29ja19yZCA9IHRkLT50c2Quc29ja19wYWlyWzBdOworICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHRkLT50c2QuY29ubjsKKyNlbmRpZgogCiAgICAgLyoKICAgICAgKiBpZiB0aGUgdGhyZWFkIGlzIHN0aWxsIGJsb2NraW5nIGluIHRoZSByZXNvbHZlIHN5c2NhbGwsIGRldGFjaCBpdCBhbmQKQEAgLTM2OSw2ICs0MDgsMTUgQEAKIAogICAgICAgZnJlZShhc3luYy0+b3Nfc3BlY2lmaWMpOwogICAgIH0KKyNpZmRlZiBVU0VfU09DS0VUUEFJUgorICAgIC8qCisgICAgICogZW5zdXJlIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OIGZpcmVzIENVUkxfUE9MTF9SRU1PVkUKKyAgICAgKiBiZWZvcmUgdGhlIEZEIGlzIGludmFsaWRhdGVkIHRvIGF2b2lkIEVCQURGIG9uIEVQT0xMX0NUTF9ERUwKKyAgICAgKi8KKyAgICBpZihjb25uKQorICAgICAgQ3VybF9tdWx0aV9jbG9zZWQoY29ubi0+ZGF0YSwgc29ja19yZCk7CisgICAgc2Nsb3NlKHNvY2tfcmQpOworI2VuZGlmCiAgIH0KICAgYXN5bmMtPm9zX3NwZWNpZmljID0gTlVMTDsKIApAQCAtNTY5LDggKzYxNyw5IEBACiAgIH0KICAgZWxzZSB7CiAgICAgLyogcG9sbCBmb3IgbmFtZSBsb29rdXAgZG9uZSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgdXAgdG8gMjUwbXMgKi8KLSAgICB0aW1lZGlmZl90IGVsYXBzZWQgPSBDdXJsX3RpbWVkaWZmKEN1cmxfbm93KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKKyAgICAvKiBzaG91bGQgYmUgZmluZSBldmVuIGlmIHRoaXMgY29udmVydHMgdG8gMzIgYml0ICovCisgICAgdGltZV90IGVsYXBzZWQgPSAodGltZV90KUN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKICAgICBpZihlbGFwc2VkIDwgMCkKICAgICAgIGVsYXBzZWQgPSAwOwogCkBAIC01OTIsMjYgKzY0MSw0NSBAQAogfQogCiBpbnQgQ3VybF9yZXNvbHZlcl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7CisgIGludCByZXRfdmFsID0gMDsKICAgdGltZV90IG1pbGxpOwogICB0aW1lZGlmZl90IG1zOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHJlc2RhdGEgKnJlc2x2ID0gKHN0cnVjdCByZXNkYXRhICopZGF0YS0+c3RhdGUucmVzb2x2ZXI7CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9IChzdHJ1Y3QgdGhyZWFkX2RhdGEqKWNvbm4tPmFzeW5jLm9zX3NwZWNpZmljOworI2Vsc2UKICAgKHZvaWQpc29ja3M7Ci0gICh2b2lkKW51bXNvY2tzOwotICBtcyA9IEN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwgcmVzbHYtPnN0YXJ0KTsKLSAgaWYobXMgPCAzKQotICAgIG1pbGxpID0gMDsKLSAgZWxzZSBpZihtcyA8PSA1MCkKLSAgICBtaWxsaSA9IG1zLzM7Ci0gIGVsc2UgaWYobXMgPD0gMjUwKQotICAgIG1pbGxpID0gNTA7Ci0gIGVsc2UKLSAgICBtaWxsaSA9IDIwMDsKLSAgQ3VybF9leHBpcmUoZGF0YSwgbWlsbGksIEVYUElSRV9BU1lOQ19OQU1FKTsKLSAgcmV0dXJuIDA7CisjZW5kaWYKKworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIGlmKHRkKSB7CisgICAgLyogcmV0dXJuIHJlYWQgZmQgdG8gY2xpZW50IGZvciBwb2xsaW5nIHRoZSBETlMgcmVzb2x1dGlvbiBzdGF0dXMgKi8KKyAgICBzb2Nrc1swXSA9IHRkLT50c2Quc29ja19wYWlyWzBdOworICAgIERFQlVHQVNTRVJUKHRkLT50c2QuY29ubiA9PSBjb25uIHx8ICF0ZC0+dHNkLmNvbm4pOworICAgIHRkLT50c2QuY29ubiA9IGNvbm47CisgICAgcmV0X3ZhbCA9IEdFVFNPQ0tfUkVBRFNPQ0soMCk7CisgIH0KKyAgZWxzZSB7CisjZW5kaWYKKyAgICBtcyA9IEN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwgcmVzbHYtPnN0YXJ0KTsKKyAgICBpZihtcyA8IDMpCisgICAgICBtaWxsaSA9IDA7CisgICAgZWxzZSBpZihtcyA8PSA1MCkKKyAgICAgIG1pbGxpID0gKHRpbWVfdCltcy8zOworICAgIGVsc2UgaWYobXMgPD0gMjUwKQorICAgICAgbWlsbGkgPSA1MDsKKyAgICBlbHNlCisgICAgICBtaWxsaSA9IDIwMDsKKyAgICBDdXJsX2V4cGlyZShkYXRhLCBtaWxsaSwgRVhQSVJFX0FTWU5DX05BTUUpOworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIH0KKyNlbmRpZgorCisKKyAgcmV0dXJuIHJldF92YWw7CiB9CiAKICNpZm5kZWYgSEFWRV9HRVRBRERSSU5GTwpAQCAtNjIzLDE2ICs2OTEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7Ci0gIHN0cnVjdCBpbl9hZGRyIGluOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHJlc2RhdGEgKnJlc2x2ID0gKHN0cnVjdCByZXNkYXRhICopZGF0YS0+c3RhdGUucmVzb2x2ZXI7CiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0gIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLQogICByZXNsdi0+c3RhcnQgPSBDdXJsX25vdygpOwogCiAgIC8qIGZpcmUgdXAgYSBuZXcgcmVzb2x2ZXIgdGhyZWFkISAqLwpAQCAtNjU3LDMyICs3MjAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKIHsKICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOwotICBjaGFyIHNidWZbMTJdOwogICBpbnQgcGYgPSBQRl9JTkVUOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHJlc2RhdGEgKnJlc2x2ID0gKHN0cnVjdCByZXNkYXRhICopZGF0YS0+c3RhdGUucmVzb2x2ZXI7CiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0jaWZuZGVmIFVTRV9SRVNPTFZFX09OX0lQUwotICB7Ci0gICAgc3RydWN0IGluX2FkZHIgaW47Ci0gICAgLyogRmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY0IGFkZHJlc3Mgc3RyaW5nICovCi0gICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZpbikgPiAwKQotICAgICAgLyogVGhpcyBpcyBhIGRvdHRlZCBJUCBhZGRyZXNzIDEyMy4xMjMuMTIzLjEyMy1zdHlsZSAqLwotICAgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLSAgfQotI2lmZGVmIENVUkxSRVNfSVBWNgotICB7Ci0gICAgc3RydWN0IGluNl9hZGRyIGluNjsKLSAgICAvKiBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjYgYWRkcmVzcyBzdHJpbmcgKi8KLSAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZpbjYpID4gMCkKLSAgICAgIC8qIFRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwgKi8KLSAgICAgIHJldHVybiBDdXJsX2lwMmFkZHIoQUZfSU5FVDYsICZpbjYsIGhvc3RuYW1lLCBwb3J0KTsKLSAgfQotI2VuZGlmIC8qIENVUkxSRVNfSVBWNiAqLwotI2VuZGlmIC8qICFVU0VfUkVTT0xWRV9PTl9JUFMgKi8KLQogI2lmZGVmIENVUkxSRVNfSVBWNgogICAvKgogICAgKiBDaGVjayBpZiBhIGxpbWl0ZWQgbmFtZSByZXNvbHZlIGhhcyBiZWVuIHJlcXVlc3RlZC4KQEAgLTY5OSwxNiArNzQyLDE1IEBACiAgICAgYnJlYWs7CiAgIH0KIAotICBpZigocGYgIT0gUEZfSU5FVCkgJiYgIUN1cmxfaXB2NndvcmtzKCkpCisgIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoY29ubikpCiAgICAgLyogVGhlIHN0YWNrIHNlZW1zIHRvIGJlIGEgbm9uLUlQdjYgb25lICovCiAgICAgcGYgPSBQRl9JTkVUOwogI2VuZGlmIC8qIENVUkxSRVNfSVBWNiAqLwogCiAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogICBoaW50cy5haV9mYW1pbHkgPSBwZjsKLSAgaGludHMuYWlfc29ja3R5cGUgPSBjb25uLT5zb2NrdHlwZTsKLQotICBtc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiJWQiLCBwb3J0KTsKKyAgaGludHMuYWlfc29ja3R5cGUgPSAoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfVENQKT8KKyAgICBTT0NLX1NUUkVBTSA6IFNPQ0tfREdSQU07CiAKICAgcmVzbHYtPnN0YXJ0ID0gQ3VybF9ub3coKTsKICAgLyogZmlyZSB1cCBhIG5ldyByZXNvbHZlciB0aHJlYWQhICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLmgKaW5kZXggY2NkNGIxZi4uMDgxYzNmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4uaApAQCAtMTE0LDggKzExNCw3IEBACiAgKiByZXR1cm4gYml0bWFzayBpbmRpY2F0aW5nIHdoYXQgZmlsZSBkZXNjcmlwdG9ycyAocmVmZXJyaW5nIHRvIGFycmF5IGluZGV4ZXMKICAqIGluIHRoZSAnc29jaycgYXJyYXkpIHRvIHdhaXQgZm9yLCByZWFkL3dyaXRlLgogICovCi1pbnQgQ3VybF9yZXNvbHZlcl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK2ludCBDdXJsX3Jlc29sdmVyX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrKTsKIAogLyoKICAqIEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYmFzZTY0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYwppbmRleCBmYjA4MWE2Li42NDNjZWY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYwpAQCAtMjQsOCArMjQsOCBAQAogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFBfQVVUSCkgfHwgZGVmaW5lZChVU0VfTElCU1NIMikgfHwgXAotICBkZWZpbmVkKFVTRV9MSUJTU0gpIHx8ICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSB8fCBcCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFBfQVVUSCkgfHwgZGVmaW5lZChVU0VfU1NIKSB8fCBcCisgICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSB8fCBcCiAgICFkZWZpbmVkKENVUkxfRElTQUJMRV9ET0gpIHx8IGRlZmluZWQoVVNFX1NTTCkKIAogI2luY2x1ZGUgInVybGRhdGEuaCIgLyogZm9yIHRoZSBDdXJsX2Vhc3kgZGVmaW5pdGlvbiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmNhY2hlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYwppbmRleCA1MzUwOTE5Li5jYmQzYmIxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIExpbnVzIE5pZWxzZW4gRmVsdHppbmcsIDxsaW51c0BoYXh4LnNlPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQwLDI2ICs0MCw3IEBACiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCi0jaWZkZWYgQ1VSTERFQlVHCi0vKiB0aGUgZGVidWcgdmVyc2lvbnMgb2YgdGhlc2UgbWFjcm9zIG1ha2UgZXh0cmEgY2VydGFpbiB0aGF0IHRoZSBsb2NrIGlzCi0gICBuZXZlciBkb3VibHkgbG9ja2VkIG9yIHVubG9ja2VkICovCi0jZGVmaW5lIENPTk5fTE9DSyh4KSBpZigoeCktPnNoYXJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ3VybF9zaGFyZV9sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOyBcCi0gICAgREVCVUdBU1NFUlQoISh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBDT05OX1VOTE9DSyh4KSBpZigoeCktPnNoYXJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERFQlVHQVNTRVJUKCh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2sgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEN1cmxfc2hhcmVfdW5sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCk7ICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0jZWxzZQotI2RlZmluZSBDT05OX0xPQ0soeCkgaWYoKHgpLT5zaGFyZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEN1cmxfc2hhcmVfbG9jaygoeCksIENVUkxfTE9DS19EQVRBX0NPTk5FQ1QsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKQotI2RlZmluZSBDT05OX1VOTE9DSyh4KSBpZigoeCktPnNoYXJlKSAgICAgICAgICAgICAgICAgICBcCi0gICAgQ3VybF9zaGFyZV91bmxvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNUKQotI2VuZGlmCisjZGVmaW5lIEhBU0hLRVlfU0laRSAxMjgKIAogc3RhdGljIHZvaWQgY29ubl9sbGlzdF9kdG9yKHZvaWQgKnVzZXIsIHZvaWQgKmVsZW1lbnQpCiB7CkBAIC0xMjAsNiArMTAxLDcgQEAKICAgICB9CiAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAgIH0KKyAgREVCVUdBU1NFUlQoMCk7CiAgIHJldHVybiAwOwogfQogCkBAIC0xNDEsMTAgKzEyMyw4IEBACiAKICAgcmMgPSBDdXJsX2hhc2hfaW5pdCgmY29ubmMtPmhhc2gsIHNpemUsIEN1cmxfaGFzaF9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9zdHJfa2V5X2NvbXBhcmUsIGZyZWVfYnVuZGxlX2hhc2hfZW50cnkpOwotICBpZihyYykgewotICAgIEN1cmxfY2xvc2UoY29ubmMtPmNsb3N1cmVfaGFuZGxlKTsKLSAgICBjb25uYy0+Y2xvc3VyZV9oYW5kbGUgPSBOVUxMOwotICB9CisgIGlmKHJjKQorICAgIEN1cmxfY2xvc2UoJmNvbm5jLT5jbG9zdXJlX2hhbmRsZSk7CiAgIGVsc2UKICAgICBjb25uYy0+Y2xvc3VyZV9oYW5kbGUtPnN0YXRlLmNvbm5fY2FjaGUgPSBjb25uYzsKIApAQCAtMTU5LDIzICsxMzksMjcgQEAKIAogLyogY3JlYXRlcyBhIGtleSB0byBmaW5kIGEgYnVuZGxlIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KIHN0YXRpYyB2b2lkIGhhc2hrZXkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pIC8qIHNvbWV0aGluZyBsaWtlIDEyOCBpcyBmaW5lICovCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAvKiBzb21ldGhpbmcgbGlrZSAxMjggaXMgZmluZSAqLworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaG9zdHApCiB7CiAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lOworICBsb25nIHBvcnQgPSBjb25uLT5yZW1vdGVfcG9ydDsKIAotICBpZihjb25uLT5iaXRzLnNvY2tzcHJveHkpCi0gICAgaG9zdG5hbWUgPSBjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWU7Ci0gIGVsc2UgaWYoY29ubi0+Yml0cy5odHRwcHJveHkpCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSkgewogICAgIGhvc3RuYW1lID0gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWU7CisgICAgcG9ydCA9IGNvbm4tPnBvcnQ7CisgIH0KICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICBob3N0bmFtZSA9IGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lOwogICBlbHNlCiAgICAgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CiAKLSAgREVCVUdBU1NFUlQobGVuID4gMzIpOworICBpZihob3N0cCkKKyAgICAvKiByZXBvcnQgYmFjayB3aGljaCBuYW1lIHdlIHVzZWQgKi8KKyAgICAqaG9zdHAgPSBob3N0bmFtZTsKIAogICAvKiBwdXQgdGhlIG51bWJlciBmaXJzdCBzbyB0aGF0IHRoZSBob3N0bmFtZSBnZXRzIGN1dCBvZmYgaWYgdG9vIGxvbmcgKi8KLSAgbXNucHJpbnRmKGJ1ZiwgbGVuLCAiJWxkJXMiLCBjb25uLT5wb3J0LCBob3N0bmFtZSk7CisgIG1zbnByaW50ZihidWYsIGxlbiwgIiVsZCVzIiwgcG9ydCwgaG9zdG5hbWUpOwogfQogCiB2b2lkIEN1cmxfY29ubmNhY2hlX3VubG9jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTk1LDMwICsxNzksMTkgQEAKICAgcmV0dXJuIG51bTsKIH0KIAotLyogUmV0dXJucyBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvbm5lY3Rpb25zJ3MgYnVuZGxlCi0gICBMb2Nrcy91bmxvY2tzIHRoZSBjYWNoZSBpdHNlbGYhCi0qLwotc2l6ZV90IEN1cmxfY29ubmNhY2hlX2J1bmRsZV9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc2l6ZV90IG51bTsKLSAgQ09OTl9MT0NLKGNvbm4tPmRhdGEpOwotICBudW0gPSBjb25uLT5idW5kbGUtPm51bV9jb25uZWN0aW9uczsKLSAgQ09OTl9VTkxPQ0soY29ubi0+ZGF0YSk7Ci0gIHJldHVybiBudW07Ci19Ci0KIC8qIExvb2sgdXAgdGhlIGJ1bmRsZSB3aXRoIGFsbCB0aGUgY29ubmVjdGlvbnMgdG8gdGhlIHNhbWUgaG9zdCB0aGlzCiAgICBjb25uZWN0ZGF0YSBzdHJ1Y3QgaXMgc2V0dXAgdG8gdXNlLgogCiAgICAqKk5PVEUqKjogV2hlbiBpdCByZXR1cm5zLCBpdCBob2xkcyB0aGUgY29ubmVjdGlvbiBjYWNoZSBsb2NrISAqLwogc3RydWN0IGNvbm5lY3RidW5kbGUgKkN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaG9zdHApCiB7CiAgIHN0cnVjdCBjb25uZWN0YnVuZGxlICpidW5kbGUgPSBOVUxMOwogICBDT05OX0xPQ0soY29ubi0+ZGF0YSk7CiAgIGlmKGNvbm5jKSB7Ci0gICAgY2hhciBrZXlbMTI4XTsKLSAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSkpOworICAgIGNoYXIga2V5W0hBU0hLRVlfU0laRV07CisgICAgaGFzaGtleShjb25uLCBrZXksIHNpemVvZihrZXkpLCBob3N0cCk7CiAgICAgYnVuZGxlID0gQ3VybF9oYXNoX3BpY2soJmNvbm5jLT5oYXNoLCBrZXksIHN0cmxlbihrZXkpKTsKICAgfQogCkBAIC0yNjcsMTcgKzI0MCwxNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKIAogICAvKiAqZmluZF9idW5kbGUoKSBsb2NrcyB0aGUgY29ubmVjdGlvbiBjYWNoZSAqLwotICBidW5kbGUgPSBDdXJsX2Nvbm5jYWNoZV9maW5kX2J1bmRsZShjb25uLCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlKTsKKyAgYnVuZGxlID0gQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoY29ubiwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwgTlVMTCk7CiAgIGlmKCFidW5kbGUpIHsKICAgICBpbnQgcmM7Ci0gICAgY2hhciBrZXlbMTI4XTsKKyAgICBjaGFyIGtleVtIQVNIS0VZX1NJWkVdOwogCiAgICAgcmVzdWx0ID0gYnVuZGxlX2NyZWF0ZShkYXRhLCAmbmV3X2J1bmRsZSk7CiAgICAgaWYocmVzdWx0KSB7CiAgICAgICBnb3RvIHVubG9jazsKICAgICB9CiAKLSAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSkpOworICAgIGhhc2hrZXkoY29ubiwga2V5LCBzaXplb2Yoa2V5KSwgTlVMTCk7CiAgICAgcmMgPSBjb25uY2FjaGVfYWRkX2J1bmRsZShkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLCBrZXksIG5ld19idW5kbGUpOwogCiAgICAgaWYoIXJjKSB7CkBAIC00MjMsMTcgKzM5NiwxNSBAQAogICoKICAqIFJldHVybiBUUlVFIGlmIHN0b3JlZCwgRkFMU0UgaWYgY2xvc2VkLgogICovCi1ib29sIEN1cmxfY29ubmNhY2hlX3JldHVybl9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK2Jvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLQogICAvKiBkYXRhLT5tdWx0aS0+bWF4Y29ubmVjdHMgY2FuIGJlIG5lZ2F0aXZlLCBkZWFsIHdpdGggaXQuICovCiAgIHNpemVfdCBtYXhjb25uZWN0cyA9CiAgICAgKGRhdGEtPm11bHRpLT5tYXhjb25uZWN0cyA8IDApID8gZGF0YS0+bXVsdGktPm51bV9lYXN5ICogNDoKICAgICBkYXRhLT5tdWx0aS0+bWF4Y29ubmVjdHM7CiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubl9jYW5kaWRhdGUgPSBOVUxMOwogCi0gIGNvbm4tPmRhdGEgPSBOVUxMOyAvKiBubyBvd25lciBhbnltb3JlICovCiAgIGNvbm4tPmxhc3R1c2VkID0gQ3VybF9ub3coKTsgLyogaXQgd2FzIHVzZWQgdXAgdW50aWwgbm93ICovCiAgIGlmKG1heGNvbm5lY3RzID4gMCAmJgogICAgICBDdXJsX2Nvbm5jYWNoZV9zaXplKGRhdGEpID4gbWF4Y29ubmVjdHMpIHsKQEAgLTUzNiw3ICs1MDcsOCBAQAogICAgIHdoaWxlKGN1cnIpIHsKICAgICAgIGNvbm4gPSBjdXJyLT5wdHI7CiAKLSAgICAgIGlmKCFDT05OX0lOVVNFKGNvbm4pICYmICFjb25uLT5kYXRhKSB7CisgICAgICBpZighQ09OTl9JTlVTRShjb25uKSAmJiAhY29ubi0+ZGF0YSAmJiAhY29ubi0+Yml0cy5jbG9zZSAmJgorICAgICAgICAgIWNvbm4tPmJpdHMuY29ubmVjdF9vbmx5KSB7CiAgICAgICAgIC8qIFNldCBoaWdoZXIgc2NvcmUgZm9yIHRoZSBhZ2UgcGFzc2VkIHNpbmNlIHRoZSBjb25uZWN0aW9uIHdhcyB1c2VkICovCiAgICAgICAgIHNjb3JlID0gQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmxhc3R1c2VkKTsKIApAQCAtNTg4LDcgKzU2MCw3IEBACiAKICAgICBDdXJsX2hvc3RjYWNoZV9jbGVhbihjb25uYy0+Y2xvc3VyZV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmMtPmNsb3N1cmVfaGFuZGxlLT5kbnMuaG9zdGNhY2hlKTsKLSAgICBDdXJsX2Nsb3NlKGNvbm5jLT5jbG9zdXJlX2hhbmRsZSk7CisgICAgQ3VybF9jbG9zZSgmY29ubmMtPmNsb3N1cmVfaGFuZGxlKTsKICAgICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwogICB9CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCmluZGV4IDM1YmU5ZTAuLmUzZTRjOWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNCwgTGludXMgTmllbHNlbiBGZWx0emluZywgPGxpbnVzQGhheHguc2U+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKQEAgLTQyLDYgKzQyLDI3IEBACiAjZGVmaW5lIEJVTkRMRV9VTktOT1dOICAgICAwICAvKiBpbml0aWFsIHZhbHVlICovCiAjZGVmaW5lIEJVTkRMRV9NVUxUSVBMRVggICAyCiAKKyNpZmRlZiBDVVJMREVCVUcKKy8qIHRoZSBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGVzZSBtYWNyb3MgbWFrZSBleHRyYSBjZXJ0YWluIHRoYXQgdGhlIGxvY2sgaXMKKyAgIG5ldmVyIGRvdWJseSBsb2NrZWQgb3IgdW5sb2NrZWQgKi8KKyNkZWZpbmUgQ09OTl9MT0NLKHgpIGlmKCh4KS0+c2hhcmUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDdXJsX3NoYXJlX2xvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNULCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7IFwKKyAgICBERUJVR0FTU0VSVCghKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeCktPnN0YXRlLmNvbm5jYWNoZV9sb2NrID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIENPTk5fVU5MT0NLKHgpIGlmKCh4KS0+c2hhcmUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgREVCVUdBU1NFUlQoKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VybF9zaGFyZV91bmxvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNUKTsgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKyNlbHNlCisjZGVmaW5lIENPTk5fTE9DSyh4KSBpZigoeCktPnNoYXJlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VybF9zaGFyZV9sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpCisjZGVmaW5lIENPTk5fVU5MT0NLKHgpIGlmKCh4KS0+c2hhcmUpICAgICAgICAgICAgICAgICAgIFwKKyAgICBDdXJsX3NoYXJlX3VubG9jaygoeCksIENVUkxfTE9DS19EQVRBX0NPTk5FQ1QpCisjZW5kaWYKKwogc3RydWN0IGNvbm5lY3RidW5kbGUgewogICBpbnQgbXVsdGl1c2U7ICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0cyBtdWx0aS11c2UgKi8KICAgc2l6ZV90IG51bV9jb25uZWN0aW9uczsgICAgICAgLyogTnVtYmVyIG9mIGNvbm5lY3Rpb25zIGluIHRoZSBidW5kbGUgKi8KQEAgLTU0LDEzICs3NSwxNCBAQAogCiAvKiByZXR1cm4gdGhlIGNvcnJlY3QgYnVuZGxlLCB0byBhIGhvc3Qgb3IgYSBwcm94eSAqLwogc3RydWN0IGNvbm5lY3RidW5kbGUgKkN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5jYWNoZSAqY29ubmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmhvc3RwKTsKIHZvaWQgQ3VybF9jb25uY2FjaGVfdW5sb2NrKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogLyogcmV0dXJucyBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KIHNpemVfdCBDdXJsX2Nvbm5jYWNoZV9zaXplKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotc2l6ZV90IEN1cmxfY29ubmNhY2hlX2J1bmRsZV9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKLWJvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK2Jvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfY29ubmNhY2hlX2FkZF9jb25uKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKSBXQVJOX1VOVVNFRF9SRVNVTFQ7CiB2b2lkIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmMKaW5kZXggMDAyNTM1Yi4uMGE3NDc1YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmVjdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzUsNiArNzUsOCBAQAogI2luY2x1ZGUgImNvbm5jYWNoZS5oIgogI2luY2x1ZGUgIm11bHRpaGFuZGxlLmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCisjaW5jbHVkZSAicXVpYy5oIgorI2luY2x1ZGUgInNvY2tzLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMTY1LDcgKzE2Nyw3IEBACiBzdGF0aWMgQ1VSTGNvZGUKIHNpbmdsZWlwY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksIC8qIHN0YXJ0IGNvbm5lY3RpbmcgdG8gdGhpcyAqLwotICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spOworICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpOyAgICAgICAgICAvKiAwIG9yIDEgYW1vbmcgdGhlIHRlbXAgb25lcyAqLwogCiAvKgogICogQ3VybF90aW1lbGVmdCgpIHJldHVybnMgdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbGVmdCBhbGxvd2VkIGZvciB0aGUKQEAgLTM2OCw2ICszNzAsMTEgQEAKICAgICAgICAgaW5mb2YoZGF0YSwgIk5hbWUgJyVzJyBmYW1pbHkgJWkgcmVzb2x2ZWQgdG8gJyVzJyBmYW1pbHkgJWlcbiIsCiAgICAgICAgICAgICAgIGRldiwgYWYsIG15aG9zdCwgaC0+YWRkci0+YWlfZmFtaWx5KTsKICAgICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGgpOworICAgICAgICBpZihhZiAhPSBoLT5hZGRyLT5haV9mYW1pbHkpIHsKKyAgICAgICAgICAvKiBiYWQgSVAgdmVyc2lvbiBjb21ibywgc2lnbmFsIHRoZSBjYWxsZXIgdG8gdHJ5IGFub3RoZXIgYWRkcmVzcworICAgICAgICAgICAgIGZhbWlseSBpZiBhdmFpbGFibGUgKi8KKyAgICAgICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CisgICAgICAgIH0KICAgICAgICAgZG9uZSA9IDE7CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTU5MCw3ICs1OTcsNyBAQAogICAgICAgfQogCiAgICAgICBpZihhaSkgewotICAgICAgICByZXN1bHQgPSBzaW5nbGVpcGNvbm5lY3QoY29ubiwgYWksICZjb25uLT50ZW1wc29ja1t0ZW1waW5kZXhdKTsKKyAgICAgICAgcmVzdWx0ID0gc2luZ2xlaXBjb25uZWN0KGNvbm4sIGFpLCB0ZW1waW5kZXgpOwogICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfQ09VTEROVF9DT05ORUNUKSB7CiAgICAgICAgICAgYWkgPSBhaS0+YWlfbmV4dDsKICAgICAgICAgICBjb250aW51ZTsKQEAgLTYyMCwxMyArNjI3LDEwIEBACiAgIGNvbm4tPmRhdGEtPmluZm8uY29ubl9sb2NhbF9wb3J0ID0gY29ubi0+bG9jYWxfcG9ydDsKIH0KIAotVU5JVFRFU1QgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KTsKLQogLyogcmV0cmlldmVzIGlwIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSBhIHNvY2thZGRyIHN0cnVjdHVyZS4KICAgIG5vdGUgaXQgY2FsbHMgQ3VybF9pbmV0X250b3Agd2hpY2ggc2V0cyBlcnJubyBvbiBmYWlsLCBub3QgU09DS0VSUk5PLiAqLwotVU5JVFRFU1QgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KQorYm9vbCBDdXJsX2FkZHIyc3RyaW5nKHN0cnVjdCBzb2NrYWRkciAqc2EsIGN1cmxfc29ja2xlbl90IHNhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHIsIGxvbmcgKnBvcnQpCiB7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2kgPSBOVUxMOwogI2lmZGVmIEVOQUJMRV9JUFY2CkBAIC02MzQsNiArNjM4LDggQEAKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQogICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnN1ID0gTlVMTDsKKyNlbHNlCisgICh2b2lkKXNhbGVuOwogI2VuZGlmCiAKICAgc3dpdGNoKHNhLT5zYV9mYW1pbHkpIHsKQEAgLTY1OSw4ICs2NjUsMTIgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQogICAgIGNhc2UgQUZfVU5JWDoKLSAgICAgIHN1ID0gKHN0cnVjdCBzb2NrYWRkcl91biopc2E7Ci0gICAgICBtc25wcmludGYoYWRkciwgTUFYX0lQQURSX0xFTiwgIiVzIiwgc3UtPnN1bl9wYXRoKTsKKyAgICAgIGlmKHNhbGVuID4gKGN1cmxfc29ja2xlbl90KXNpemVvZihzYV9mYW1pbHlfdCkpIHsKKyAgICAgICAgc3UgPSAoc3RydWN0IHNvY2thZGRyX3VuKilzYTsKKyAgICAgICAgbXNucHJpbnRmKGFkZHIsIE1BWF9JUEFEUl9MRU4sICIlcyIsIHN1LT5zdW5fcGF0aCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGFkZHJbMF0gPSAwOyAvKiBzb2NrZXQgd2l0aCBubyBuYW1lICovCiAgICAgICAqcG9ydCA9IDA7CiAgICAgICByZXR1cm4gVFJVRTsKICNlbmRpZgpAQCAtNjc4LDggKzY4OCw4IEBACiAgICBjb25uZWN0aW9uICovCiB2b2lkIEN1cmxfdXBkYXRlY29ubmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IHNvY2tmZCkKIHsKLSAgaWYoY29ubi0+c29ja3R5cGUgPT0gU09DS19ER1JBTSkKLSAgICAvKiB0aGVyZSdzIG5vIGNvbm5lY3Rpb24hICovCisgIGlmKGNvbm4tPnRyYW5zcG9ydCAhPSBUUk5TUFJUX1RDUCkKKyAgICAvKiB0aGVyZSdzIG5vIFRDUCBjb25uZWN0aW9uISAqLwogICAgIHJldHVybjsKIAogI2lmIGRlZmluZWQoSEFWRV9HRVRQRUVSTkFNRSkgfHwgZGVmaW5lZChIQVZFX0dFVFNPQ0tOQU1FKQpAQCAtNjg4LDEwICs2OTgsMTEgQEAKICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3NyZW07CiAgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBzc2xvYzsKLSAgICBjdXJsX3NvY2tsZW5fdCBsZW47CisgICAgY3VybF9zb2NrbGVuX3QgcGxlbjsKKyAgICBjdXJsX3NvY2tsZW5fdCBzbGVuOwogI2lmZGVmIEhBVkVfR0VUUEVFUk5BTUUKLSAgICBsZW4gPSBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSk7Ci0gICAgaWYoZ2V0cGVlcm5hbWUoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNzcmVtLCAmbGVuKSkgeworICAgIHBsZW4gPSBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSk7CisgICAgaWYoZ2V0cGVlcm5hbWUoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNzcmVtLCAmcGxlbikpIHsKICAgICAgIGludCBlcnJvciA9IFNPQ0tFUlJOTzsKICAgICAgIGZhaWxmKGRhdGEsICJnZXRwZWVybmFtZSgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCiAgICAgICAgICAgICBlcnJvciwgQ3VybF9zdHJlcnJvcihlcnJvciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwpAQCAtNjk5LDkgKzcxMCw5IEBACiAgICAgfQogI2VuZGlmCiAjaWZkZWYgSEFWRV9HRVRTT0NLTkFNRQotICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlKTsKKyAgICBzbGVuID0gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpOwogICAgIG1lbXNldCgmc3Nsb2MsIDAsIHNpemVvZihzc2xvYykpOwotICAgIGlmKGdldHNvY2tuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzc2xvYywgJmxlbikpIHsKKyAgICBpZihnZXRzb2NrbmFtZShzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc3Nsb2MsICZzbGVuKSkgewogICAgICAgaW50IGVycm9yID0gU09DS0VSUk5POwogICAgICAgZmFpbGYoZGF0YSwgImdldHNvY2tuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGVycm9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CkBAIC03MDksOCArNzIwLDggQEAKICAgICB9CiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVFBFRVJOQU1FCi0gICAgaWYoIWdldGFkZHJlc3NpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc3JlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cHJpbWFyeV9pcCwgJmNvbm4tPnByaW1hcnlfcG9ydCkpIHsKKyAgICBpZighQ3VybF9hZGRyMnN0cmluZygoc3RydWN0IHNvY2thZGRyKikmc3NyZW0sIHBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cHJpbWFyeV9pcCwgJmNvbm4tPnByaW1hcnlfcG9ydCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJzc3JlbSBpbmV0X250b3AoKSBmYWlsZWQgd2l0aCBlcnJubyAlZDogJXMiLAogICAgICAgICAgICAgZXJybm8sIEN1cmxfc3RyZXJyb3IoZXJybm8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgIHJldHVybjsKQEAgLTcxOCw4ICs3MjksOCBAQAogICAgIG1lbWNweShjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cHJpbWFyeV9pcCwgTUFYX0lQQURSX0xFTik7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVFNPQ0tOQU1FCi0gICAgaWYoIWdldGFkZHJlc3NpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc2xvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+bG9jYWxfaXAsICZjb25uLT5sb2NhbF9wb3J0KSkgeworICAgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc2xvYywgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5sb2NhbF9pcCwgJmNvbm4tPmxvY2FsX3BvcnQpKSB7CiAgICAgICBmYWlsZihkYXRhLCAic3Nsb2MgaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICByZXR1cm47CkBAIC03MzQsNiArNzQ1LDc5IEBACiAgIEN1cmxfcGVyc2lzdGNvbm5pbmZvKGNvbm4pOwogfQogCisvKiBBZnRlciBhIFRDUCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBoYXMgYmVlbiB2ZXJpZmllZCwgdGhpcyBmdW5jdGlvbiBkb2VzCisgICB0aGUgbmV4dCBtYWdpYyBzdGVwcy4gSWYgJ2RvbmUnIGlzbid0IHNldCBUUlVFLCBpdCBpcyBub3QgZG9uZSB5ZXQgYW5kCisgICBtdXN0IGJlIGNhbGxlZCBhZ2Fpbi4KKworICAgTm90ZTogdGhpcyBmdW5jdGlvbidzIHN1Yi1mdW5jdGlvbnMgY2FsbCBmYWlsZigpCisKKyovCitzdGF0aWMgQ1VSTGNvZGUgY29ubmVjdF9TT0NLUyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICBpZihjb25uLT5iaXRzLnNvY2tzcHJveHkpIHsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgLyogZm9yIHRoZSBzZWNvbmRhcnkgc29ja2V0IChGVFApLCB1c2UgdGhlICJjb25uZWN0IHRvIGhvc3QiCisgICAgICogYnV0IGlnbm9yZSB0aGUgImNvbm5lY3QgdG8gcG9ydCIgKHVzZSB0aGUgc2Vjb25kYXJ5IHBvcnQpCisgICAgICovCisgICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3QgPQorICAgICAgY29ubi0+Yml0cy5odHRwcHJveHkgPworICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPworICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgOgorICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/CisgICAgICBjb25uLT5zZWNvbmRhcnlob3N0bmFtZSA6IGNvbm4tPmhvc3QubmFtZTsKKyAgICBjb25zdCBpbnQgcG9ydCA9CisgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA/IChpbnQpY29ubi0+aHR0cF9wcm94eS5wb3J0IDoKKyAgICAgIHNvY2tpbmRleCA9PSBTRUNPTkRBUllTT0NLRVQgPyBjb25uLT5zZWNvbmRhcnlfcG9ydCA6CisgICAgICBjb25uLT5iaXRzLmNvbm5fdG9fcG9ydCA/IGNvbm4tPmNvbm5fdG9fcG9ydCA6CisgICAgICBjb25uLT5yZW1vdGVfcG9ydDsKKyAgICBzd2l0Y2goY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlKSB7CisgICAgY2FzZSBDVVJMUFJPWFlfU09DS1M1OgorICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRToKKyAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M1KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIHNvY2tpbmRleCwgY29ubiwgZG9uZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNDoKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzRBOgorICAgICAgcmVzdWx0ID0gQ3VybF9TT0NLUzQoY29ubi0+c29ja3NfcHJveHkudXNlciwgaG9zdCwgcG9ydCwgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwgZG9uZSk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAidW5rbm93biBwcm94eXR5cGUgb3B0aW9uIGdpdmVuIik7CisgICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfSAvKiBzd2l0Y2ggcHJveHl0eXBlICovCisjZWxzZQorICAodm9pZClzb2NraW5kZXg7CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisgIH0KKyAgZWxzZQorICAgICpkb25lID0gVFJVRTsgLyogbm8gU09DS1MgcHJveHksIHNvIGNvbnNpZGVyIHVzIGNvbm5lY3RlZCAqLworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwb3N0X1NPQ0tTKCkgaXMgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb25uZWN0IHRvIHRoZSBwZWVyLCB3aGljaAorICogKmNvdWxkKiBiZSBhIFNPQ0tTIHByb3h5CisgKi8KK3N0YXRpYyB2b2lkIHBvc3RfU09DS1Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQpCit7CisgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtzb2NraW5kZXhdID0gVFJVRTsKKworICAqY29ubmVjdGVkID0gVFJVRTsKKyAgaWYoc29ja2luZGV4ID09IEZJUlNUU09DS0VUKQorICAgIEN1cmxfcGdyc1RpbWUoY29ubi0+ZGF0YSwgVElNRVJfQ09OTkVDVCk7IC8qIGNvbm5lY3QgZG9uZSAqLworICBDdXJsX3VwZGF0ZWNvbm5pbmZvKGNvbm4sIGNvbm4tPnNvY2tbc29ja2luZGV4XSk7CisgIEN1cmxfdmVyYm9zZWNvbm5lY3QoY29ubik7Cit9CisKIC8qCiAgKiBDdXJsX2lzX2Nvbm5lY3RlZCgpIGNoZWNrcyBpZiB0aGUgc29ja2V0IGhhcyBjb25uZWN0ZWQuCiAgKi8KQEAgLTc3MSwxMSArODU1LDM3IEBACiAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKICAgfQogCisgIGlmKFNPQ0tTX1NUQVRFKGNvbm4tPmNubmN0LnN0YXRlKSkgeworICAgIC8qIHN0aWxsIGRvaW5nIFNPQ0tTICovCisgICAgcmVzdWx0ID0gY29ubmVjdF9TT0NLUyhjb25uLCBzb2NraW5kZXgsIGNvbm5lY3RlZCk7CisgICAgaWYoIXJlc3VsdCAmJiAqY29ubmVjdGVkKQorICAgICAgcG9zdF9TT0NLUyhjb25uLCBzb2NraW5kZXgsIGNvbm5lY3RlZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCiAgIGZvcihpID0gMDsgaTwyOyBpKyspIHsKICAgICBjb25zdCBpbnQgb3RoZXIgPSBpIF4gMTsKICAgICBpZihjb25uLT50ZW1wc29ja1tpXSA9PSBDVVJMX1NPQ0tFVF9CQUQpCiAgICAgICBjb250aW51ZTsKIAorI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykgeworICAgICAgcmVzdWx0ID0gQ3VybF9xdWljX2lzX2Nvbm5lY3RlZChjb25uLCBpLCBjb25uZWN0ZWQpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorICAgICAgaWYoKmNvbm5lY3RlZCkgeworICAgICAgICAvKiB1c2UgdGhpcyBzb2NrZXQgZnJvbSBub3cgb24gKi8KKyAgICAgICAgY29ubi0+c29ja1tzb2NraW5kZXhdID0gY29ubi0+dGVtcHNvY2tbaV07CisgICAgICAgIGNvbm4tPmlwX2FkZHIgPSBjb25uLT50ZW1wYWRkcltpXTsKKyAgICAgICAgY29ubi0+dGVtcHNvY2tbaV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICAgIGNvbm5rZWVwKGNvbm4sICJIVFRQLzMgZGVmYXVsdCIpOworICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKwogI2lmZGVmIG1wZWl4CiAgICAgLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2Ugbm93LCBhbmQgaWdub3JlIHRoZSByZXN1bHRzLiBXZSBkbyB0aGlzIHRvCiAgICAgICAgImNsZWFyIiB0aGUgZXJyb3Igc3RhdGUgb24gdGhlIHNvY2tldCBzbyB0aGF0IHdlIGNhbiBsYXRlciByZWFkIGl0CkBAIC03ODksOCArODk5LDggQEAKICAgICBpZihyYyA9PSAwKSB7IC8qIG5vIGNvbm5lY3Rpb24geWV0ICovCiAgICAgICBlcnJvciA9IDA7CiAgICAgICBpZihDdXJsX3RpbWVkaWZmKG5vdywgY29ubi0+Y29ubmVjdHRpbWUpID49IGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkcikgewotICAgICAgICBpbmZvZihkYXRhLCAiQWZ0ZXIgJWxkbXMgY29ubmVjdCB0aW1lLCBtb3ZlIG9uIVxuIiwKLSAgICAgICAgICAgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyKTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkFmdGVyICUiIENVUkxfRk9STUFUX1RJTUVESUZGX1QKKyAgICAgICAgICAgICAgIm1zIGNvbm5lY3QgdGltZSwgbW92ZSBvbiFcbiIsIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkcik7CiAgICAgICAgIGVycm9yID0gRVRJTUVET1VUOwogICAgICAgfQogCkBAIC04MTksMTggKzkyOSwxMyBAQAogICAgICAgICAgIGNvbm4tPnRlbXBzb2NrW290aGVyXSA9IENVUkxfU09DS0VUX0JBRDsKICAgICAgICAgfQogCi0gICAgICAgIC8qIHNlZSBpZiB3ZSBuZWVkIHRvIGRvIGFueSBwcm94eSBtYWdpYyBmaXJzdCBvbmNlIHdlIGNvbm5lY3RlZCAqLwotICAgICAgICByZXN1bHQgPSBDdXJsX2Nvbm5lY3RlZF9wcm94eShjb25uLCBzb2NraW5kZXgpOwotICAgICAgICBpZihyZXN1bHQpCisgICAgICAgIC8qIHNlZSBpZiB3ZSBuZWVkIHRvIGtpY2sgb2ZmIGFueSBTT0NLUyBwcm94eSBtYWdpYyBvbmNlIHdlCisgICAgICAgICAgIGNvbm5lY3RlZCAqLworICAgICAgICByZXN1bHQgPSBjb25uZWN0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKKyAgICAgICAgaWYocmVzdWx0IHx8ICEqY29ubmVjdGVkKQogICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W3NvY2tpbmRleF0gPSBUUlVFOwotCi0gICAgICAgICpjb25uZWN0ZWQgPSBUUlVFOwotICAgICAgICBpZihzb2NraW5kZXggPT0gRklSU1RTT0NLRVQpCi0gICAgICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9DT05ORUNUKTsgLyogY29ubmVjdCBkb25lICovCi0gICAgICAgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgY29ubi0+c29ja1tzb2NraW5kZXhdKTsKLSAgICAgICAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKKyAgICAgICAgcG9zdF9TT0NLUyhjb25uLCBzb2NraW5kZXgsIGNvbm5lY3RlZCk7CiAKICAgICAgICAgcmV0dXJuIENVUkxFX09LOwogICAgICAgfQpAQCAtODM5LDYgKzk0NCw5IEBACiAgICAgZWxzZSBpZihyYyAmIENVUkxfQ1NFTEVDVF9FUlIpCiAgICAgICAodm9pZCl2ZXJpZnljb25uZWN0KGNvbm4tPnRlbXBzb2NrW2ldLCAmZXJyb3IpOwogCisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgICBlcnJvcjoKKyNlbmRpZgogICAgIC8qCiAgICAgICogVGhlIGNvbm5lY3Rpb24gZmFpbGVkIGhlcmUsIHdlIHNob3VsZCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlICJuZXh0CiAgICAgICogYWRkcmVzcyIgZm9yIHRoZSBnaXZlbiBob3N0LiBCdXQgZmlyc3QgcmVtZW1iZXIgdGhlIGxhdGVzdCBlcnJvci4KQEAgLTg0OCwxOSArOTU2LDIxIEBACiAgICAgICBTRVRfU09DS0VSUk5PKGVycm9yKTsKICAgICAgIGlmKGNvbm4tPnRlbXBhZGRyW2ldKSB7CiAgICAgICAgIENVUkxjb2RlIHN0YXR1czsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogICAgICAgICBjaGFyIGlwYWRkcmVzc1tNQVhfSVBBRFJfTEVOXTsKICAgICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICAgICAgQ3VybF9wcmludGFibGVfYWRkcmVzcyhjb25uLT50ZW1wYWRkcltpXSwgaXBhZGRyZXNzLCBNQVhfSVBBRFJfTEVOKTsKKyNlbmRpZgogICAgICAgICBpbmZvZihkYXRhLCAiY29ubmVjdCB0byAlcyBwb3J0ICVsZCBmYWlsZWQ6ICVzXG4iLAogICAgICAgICAgICAgICBpcGFkZHJlc3MsIGNvbm4tPnBvcnQsCiAgICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKIAogICAgICAgICBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHIgPSBjb25uLT50ZW1wYWRkcltpXS0+YWlfbmV4dCA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgOiBhbGxvdyAvIDI7CisgICAgICAgICAgYWxsb3cgOiBhbGxvdyAvIDI7CiAKICAgICAgICAgc3RhdHVzID0gdHJ5bmV4dGlwKGNvbm4sIHNvY2tpbmRleCwgaSk7Ci0gICAgICAgIGlmKHN0YXR1cyAhPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QKLSAgICAgICAgICAgIHx8IGNvbm4tPnRlbXBzb2NrW290aGVyXSA9PSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgICAgIGlmKChzdGF0dXMgIT0gQ1VSTEVfQ09VTEROVF9DT05ORUNUKSB8fAorICAgICAgICAgICBjb25uLT50ZW1wc29ja1tvdGhlcl0gPT0gQ1VSTF9TT0NLRVRfQkFEKQogICAgICAgICAgIC8qIHRoZSBsYXN0IGF0dGVtcHQgZmFpbGVkIGFuZCBubyBvdGhlciBzb2NrZXRzIHJlbWFpbiBvcGVuICovCiAgICAgICAgICAgcmVzdWx0ID0gc3RhdHVzOwogICAgICAgfQpAQCAtODkyLDYgKzEwMDIsMTQgQEAKICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gJXMgcG9ydCAlbGQ6ICVzIiwKICAgICAgICAgICBob3N0bmFtZSwgY29ubi0+cG9ydCwKICAgICAgICAgICBDdXJsX3N0cmVycm9yKGVycm9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisKKyNpZmRlZiBXU0FFVElNRURPVVQKKyAgICBpZihXU0FFVElNRURPVVQgPT0gZGF0YS0+c3RhdGUub3NfZXJybm8pCisgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisjZWxpZiBkZWZpbmVkKEVUSU1FRE9VVCkKKyAgICBpZihFVElNRURPVVQgPT0gZGF0YS0+c3RhdGUub3NfZXJybm8pCisgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisjZW5kaWYKICAgfQogCiAgIHJldHVybiByZXN1bHQ7CkBAIC05MDAsMTQgKzEwMTgsMTIgQEAKIHN0YXRpYyB2b2lkIHRjcG5vZGVsYXkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IHNvY2tmZCkKIHsKICNpZiBkZWZpbmVkKFRDUF9OT0RFTEFZKQotI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCi0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotI2VuZGlmCiAgIGN1cmxfc29ja2xlbl90IG9ub2ZmID0gKGN1cmxfc29ja2xlbl90KSAxOwogICBpbnQgbGV2ZWwgPSBJUFBST1RPX1RDUDsKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKLQotI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyNlbHNlCiAgICh2b2lkKSBjb25uOwogI2VuZGlmCiAKQEAgLTkxNSw4ICsxMDMxLDYgQEAKICAgICAgICAgICAgICAgICBzaXplb2Yob25vZmYpKSA8IDApCiAgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBzZXQgVENQX05PREVMQVk6ICVzXG4iLAogICAgICAgICAgIEN1cmxfc3RyZXJyb3IoU09DS0VSUk5PLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gIGVsc2UKLSAgICBpbmZvZihkYXRhLCAiVENQX05PREVMQVkgc2V0XG4iKTsKICNlbHNlCiAgICh2b2lkKWNvbm47CiAgICh2b2lkKXNvY2tmZDsKQEAgLTk5OSw3ICsxMTEzLDcgQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHNpbmdsZWlwY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IEN1cmxfc29ja2FkZHJfZXggYWRkcjsKICAgaW50IHJjID0gLTE7CkBAIC0xMDE1LDcgKzExMjksNyBAQAogICBpbnQgb3B0dmFsID0gMTsKICNlbmRpZgogICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwotCisgIGN1cmxfc29ja2V0X3QgKnNvY2twID0gJmNvbm4tPnRlbXBzb2NrW3NvY2tpbmRleF07CiAgICpzb2NrcCA9IENVUkxfU09DS0VUX0JBRDsKIAogICByZXN1bHQgPSBDdXJsX3NvY2tldChjb25uLCBhaSwgJmFkZHIsICZzb2NrZmQpOwpAQCAtMTAyNiw4ICsxMTQwLDggQEAKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKICAgLyogc3RvcmUgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQgdXNlZCBpbiB0aGlzIGNvbm5lY3Rpb24gYXR0ZW1wdCAqLwotICBpZighZ2V0YWRkcmVzc2luZm8oKHN0cnVjdCBzb2NrYWRkciopJmFkZHIuc2FfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcywgJnBvcnQpKSB7CisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLnNhX2FkZHIsIGFkZHIuYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLCAmcG9ydCkpIHsKICAgICAvKiBtYWxmb3JtZWQgYWRkcmVzcyBvciBidWcgaW4gaW5ldF9udG9wLCB0cnkgbmV4dCBhZGRyZXNzICovCiAgICAgZmFpbGYoZGF0YSwgInNhX2FkZHIgaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwpAQCAtMTA5NCw4ICsxMjA4LDggQEAKICAgaWYoY29ubi0+bnVtX2FkZHIgPiAxKQogICAgIEN1cmxfZXhwaXJlKGRhdGEsIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkciwgRVhQSVJFX0ROU19QRVJfTkFNRSk7CiAKLSAgLyogQ29ubmVjdCBUQ1Agc29ja2V0cywgYmluZCBVRFAgKi8KLSAgaWYoIWlzY29ubmVjdGVkICYmIChjb25uLT5zb2NrdHlwZSA9PSBTT0NLX1NUUkVBTSkpIHsKKyAgLyogQ29ubmVjdCBUQ1AgYW5kIFFVSUMgc29ja2V0cyAqLworICBpZighaXNjb25uZWN0ZWQgJiYgKGNvbm4tPnRyYW5zcG9ydCAhPSBUUk5TUFJUX1VEUCkpIHsKICAgICBpZihjb25uLT5iaXRzLnRjcF9mYXN0b3BlbikgewogI2lmIGRlZmluZWQoQ09OTkVDVF9EQVRBX0lERU1QT1RFTlQpIC8qIERhcndpbiAqLwogIyAgaWYgZGVmaW5lZChIQVZFX0JVSUxUSU5fQVZBSUxBQkxFKQpAQCAtMTEyNCw4ICsxMjM4LDYgQEAKICAgICAgIGlmKHNldHNvY2tvcHQoc29ja2ZkLCBJUFBST1RPX1RDUCwgVENQX0ZBU1RPUEVOX0NPTk5FQ1QsCiAgICAgICAgICAgICAgICAgICAgICh2b2lkICopJm9wdHZhbCwgc2l6ZW9mKG9wdHZhbCkpIDwgMCkKICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBlbmFibGUgVENQIEZhc3QgT3BlbiBvbiBmZCAlZFxuIiwgc29ja2ZkKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaW5mb2YoZGF0YSwgIlRDUF9GQVNUT1BFTl9DT05ORUNUIHNldFxuIik7CiAKICAgICAgIHJjID0gY29ubmVjdChzb2NrZmQsICZhZGRyLnNhX2FkZHIsIGFkZHIuYWRkcmxlbik7CiAjZWxpZiBkZWZpbmVkKE1TR19GQVNUT1BFTikgLyogb2xkIExpbnV4ICovCkBAIC0xMTQxLDYgKzEyNTMsMTYgQEAKIAogICAgIGlmKC0xID09IHJjKQogICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgICBlbHNlIGlmKGNvbm4tPnRyYW5zcG9ydCA9PSBUUk5TUFJUX1FVSUMpIHsKKyAgICAgIC8qIHBhc3MgaW4gJ3NvY2tmZCcgc2VwYXJhdGVseSBzaW5jZSBpdCBoYXNuJ3QgYmVlbiBwdXQgaW50byB0aGUKKyAgICAgICAgIHRlbXBzb2NrIGFycmF5IGF0IHRoaXMgcG9pbnQgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfcXVpY19jb25uZWN0KGNvbm4sIHNvY2tmZCwgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHIuc2FfYWRkciwgYWRkci5hZGRybGVuKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgfQorI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgKnNvY2twID0gc29ja2ZkOwpAQCAtMTIxNCw3ICsxMzM2LDcgQEAKIAogICAvKiBzdGFydCBjb25uZWN0aW5nIHRvIGZpcnN0IElQICovCiAgIHdoaWxlKGNvbm4tPnRlbXBhZGRyWzBdKSB7Ci0gICAgcmVzdWx0ID0gc2luZ2xlaXBjb25uZWN0KGNvbm4sIGNvbm4tPnRlbXBhZGRyWzBdLCAmKGNvbm4tPnRlbXBzb2NrWzBdKSk7CisgICAgcmVzdWx0ID0gc2luZ2xlaXBjb25uZWN0KGNvbm4sIGNvbm4tPnRlbXBhZGRyWzBdLCAwKTsKICAgICBpZighcmVzdWx0KQogICAgICAgYnJlYWs7CiAgICAgY29ubi0+dGVtcGFkZHJbMF0gPSBjb25uLT50ZW1wYWRkclswXS0+YWlfbmV4dDsKQEAgLTEzMjYsMTIgKzE0NDgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2spCiB7CiAgIGlmKGNvbm4gJiYgY29ubi0+ZmNsb3Nlc29ja2V0KSB7Ci0gICAgaWYoKHNvY2sgPT0gY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKSAmJgotICAgICAgIGNvbm4tPnNvY2tfYWNjZXB0ZWRbU0VDT05EQVJZU09DS0VUXSkKKyAgICBpZigoc29jayA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pICYmIGNvbm4tPnNvY2tfYWNjZXB0ZWQpCiAgICAgICAvKiBpZiB0aGlzIHNvY2tldCBtYXRjaGVzIHRoZSBzZWNvbmQgc29ja2V0LCBhbmQgdGhhdCB3YXMgY3JlYXRlZCB3aXRoCiAgICAgICAgICBhY2NlcHQsIHRoZW4gd2UgTVVTVCBOT1QgY2FsbCB0aGUgY2FsbGJhY2sgYnV0IGNsZWFyIHRoZSBhY2NlcHRlZAogICAgICAgICAgc3RhdHVzICovCi0gICAgICBjb25uLT5zb2NrX2FjY2VwdGVkW1NFQ09OREFSWVNPQ0tFVF0gPSBGQUxTRTsKKyAgICAgIGNvbm4tPnNvY2tfYWNjZXB0ZWQgPSBGQUxTRTsKICAgICBlbHNlIHsKICAgICAgIGludCByYzsKICAgICAgIEN1cmxfbXVsdGlfY2xvc2VkKGNvbm4tPmRhdGEsIHNvY2spOwpAQCAtMTM4MSw4ICsxNTAyLDkgQEAKICAgICovCiAKICAgYWRkci0+ZmFtaWx5ID0gYWktPmFpX2ZhbWlseTsKLSAgYWRkci0+c29ja3R5cGUgPSBjb25uLT5zb2NrdHlwZTsKLSAgYWRkci0+cHJvdG9jb2wgPSBjb25uLT5zb2NrdHlwZSA9PSBTT0NLX0RHUkFNP0lQUFJPVE9fVURQOmFpLT5haV9wcm90b2NvbDsKKyAgYWRkci0+c29ja3R5cGUgPSAoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfVENQKSA/IFNPQ0tfU1RSRUFNIDogU09DS19ER1JBTTsKKyAgYWRkci0+cHJvdG9jb2wgPSBjb25uLT50cmFuc3BvcnQgIT0gVFJOU1BSVF9UQ1AgPyBJUFBST1RPX1VEUCA6CisgICAgYWktPmFpX3Byb3RvY29sOwogICBhZGRyLT5hZGRybGVuID0gYWktPmFpX2FkZHJsZW47CiAKICAgaWYoYWRkci0+YWRkcmxlbiA+IHNpemVvZihzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlKSkKQEAgLTE0MTMsNiArMTUzNSwxMSBAQAogICAgIC8qIG5vIHNvY2tldCwgbm8gY29ubmVjdGlvbiAqLwogICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAKKyAgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykgeworICAgIC8qIFFVSUMgc29ja2V0cyBuZWVkIHRvIGJlIG5vbmJsb2NraW5nICovCisgICAgKHZvaWQpY3VybHhfbm9uYmxvY2soKnNvY2tmZCwgVFJVRSk7CisgIH0KKwogI2lmIGRlZmluZWQoRU5BQkxFX0lQVjYpICYmIGRlZmluZWQoSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKICAgaWYoY29ubi0+c2NvcGVfaWQgJiYgKGFkZHItPmZhbWlseSA9PSBBRl9JTkVUNikpIHsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICogY29uc3Qgc2E2ID0gKHZvaWQgKikmYWRkci0+c2FfYWRkcjsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuaAppbmRleCA2YTVjNzU1Li5iMjMwODVhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmVjdC5oCkBAIC01MSw2ICs1MSw5IEBACiBjdXJsX3NvY2tldF90IEN1cmxfZ2V0Y29ubmVjdGluZm8oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKipjb25ucCk7CiAKK2Jvb2wgQ3VybF9hZGRyMnN0cmluZyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjdXJsX3NvY2tsZW5fdCBzYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyLCBsb25nICpwb3J0KTsKKwogLyoKICAqIENoZWNrIGlmIGEgY29ubmVjdGlvbiBzZWVtcyB0byBiZSBhbGl2ZS4KICAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb29raWUuYwppbmRleCA5YTllMTRkLi42OWJjMDQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb29raWUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb29raWUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtOTYsNiArOTYsOSBAQAogI2luY2x1ZGUgImN1cmxfZ2V0X2xpbmUuaCIKICNpbmNsdWRlICJjdXJsX21lbXJjaHIuaCIKICNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJwYXJzZWRhdGUuaCIKKyNpbmNsdWRlICJyYW5kLmgiCisjaW5jbHVkZSAicmVuYW1lLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtNTM2LDkgKzUzOSw5IEBACiAgICAgICAgICAqIG9ubHkgdGVzdCBmb3IgbmFtZXMgd2hlcmUgdGhhdCBjYW4gcG9zc2libHkgYmUgdHJ1ZS4KICAgICAgICAgICovCiAgICAgICAgIGlmKG5sZW4gPiAzICYmIG5hbWVbMF0gPT0gJ18nICYmIG5hbWVbMV0gPT0gJ18nKSB7Ci0gICAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKCJfX1NlY3VyZS0iLCBuYW1lLCA5KSkKKyAgICAgICAgICBpZighc3RybmNtcCgiX19TZWN1cmUtIiwgbmFtZSwgOSkpCiAgICAgICAgICAgICBjby0+cHJlZml4IHw9IENPT0tJRV9QUkVGSVhfX1NFQ1VSRTsKLSAgICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZSgiX19Ib3N0LSIsIG5hbWUsIDcpKQorICAgICAgICAgIGVsc2UgaWYoIXN0cm5jbXAoIl9fSG9zdC0iLCBuYW1lLCA3KSkKICAgICAgICAgICAgIGNvLT5wcmVmaXggfD0gQ09PS0lFX1BSRUZJWF9fSE9TVDsKICAgICAgICAgfQogCkBAIC03MTUsNyArNzE4LDcgQEAKICAgICBlbHNlIGlmKGNvLT5leHBpcmVzdHIpIHsKICAgICAgIC8qIE5vdGUgdGhhdCBpZiB0aGUgZGF0ZSBjb3VsZG4ndCBnZXQgcGFyc2VkIGZvciB3aGF0ZXZlciByZWFzb24sCiAgICAgICAgICB0aGUgY29va2llIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNlc3Npb24gY29va2llICovCi0gICAgICBjby0+ZXhwaXJlcyA9IGN1cmxfZ2V0ZGF0ZShjby0+ZXhwaXJlc3RyLCBOVUxMKTsKKyAgICAgIGNvLT5leHBpcmVzID0gQ3VybF9nZXRkYXRlX2NhcHBlZChjby0+ZXhwaXJlc3RyKTsKIAogICAgICAgLyogU2Vzc2lvbiBjb29raWVzIGhhdmUgZXhwaXJlcyBzZXQgdG8gMCBzbyBpZiB3ZSBnZXQgdGhhdCBiYWNrCiAgICAgICAgICBmcm9tIHRoZSBkYXRlIHBhcnNlciBsZXQncyBhZGQgYSBzZWNvbmQgdG8gbWFrZSBpdCBhCkBAIC04MTksMjIgKzgyMiwxNCBAQAogICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICAvKiBUaGlzIGZpZWxkIGdvdCBpdHMgZXhwbGFuYXRpb24gb24gdGhlIDIzcmQgb2YgTWF5IDIwMDEgYnkKLSAgICAgICAgICAgQW5kcsOpcyBHYXJjw61hOgotCi0gICAgICAgICAgIGZsYWc6IEEgVFJVRS9GQUxTRSB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFsbCBtYWNoaW5lcyB3aXRoaW4gYSBnaXZlbgotICAgICAgICAgICBkb21haW4gY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUuIFRoaXMgdmFsdWUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYnkKLSAgICAgICAgICAgdGhlIGJyb3dzZXIsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgeW91IHNldCBmb3IgdGhlIGRvbWFpbi4KLQotICAgICAgICAgICBBcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCBpcyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBjb29raWUgc2F5cworICAgICAgICAvKiBmbGFnOiBBIFRSVUUvRkFMU0UgdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgbWFjaGluZXMgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgZG9tYWluIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlLiBTZXQgVFJVRSB3aGVuIHRoZSBjb29raWUgc2F5cwogICAgICAgICAgICAuZG9tYWluLmNvbSBhbmQgdG8gZmFsc2Ugd2hlbiB0aGUgZG9tYWluIGlzIGNvbXBsZXRlIHd3dy5kb21haW4uY29tCiAgICAgICAgICovCiAgICAgICAgIGNvLT50YWlsbWF0Y2ggPSBzdHJjYXNlY29tcGFyZShwdHIsICJUUlVFIik/VFJVRTpGQUxTRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDI6Ci0gICAgICAgIC8qIEl0IHR1cm5zIG91dCwgdGhhdCBzb21ldGltZXMgdGhlIGZpbGUgZm9ybWF0IGFsbG93cyB0aGUgcGF0aAotICAgICAgICAgICBmaWVsZCB0byByZW1haW4gbm90IGZpbGxlZCBpbiwgd2UgdHJ5IHRvIGRldGVjdCB0aGlzIGFuZCB3b3JrCi0gICAgICAgICAgIGFyb3VuZCBpdCEgQW5kcsOpcyBHYXJjw61hIG1hZGUgdXMgYXdhcmUgb2YgdGhpcy4uLiAqLworICAgICAgICAvKiBUaGUgZmlsZSBmb3JtYXQgYWxsb3dzIHRoZSBwYXRoIGZpZWxkIHRvIHJlbWFpbiBub3QgZmlsbGVkIGluICovCiAgICAgICAgIGlmKHN0cmNtcCgiVFJVRSIsIHB0cikgJiYgc3RyY21wKCJGQUxTRSIsIHB0cikpIHsKICAgICAgICAgICAvKiBvbmx5IGlmIHRoZSBwYXRoIGRvZXNuJ3QgbG9vayBsaWtlIGEgYm9vbGVhbiBvcHRpb24hICovCiAgICAgICAgICAgY28tPnBhdGggPSBzdHJkdXAocHRyKTsKQEAgLTEwNTMsNyArMTA0OCw3IEBACiAKICAgICAgICAgKmNsaXN0ID0gKmNvOyAgLyogdGhlbiBzdG9yZSBhbGwgdGhlIG5ldyBkYXRhICovCiAKLSAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NlZCBtZW1vcnkgKi8KKyAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSAqLwogICAgICAgICBjbyA9IGNsaXN0OyAvKiBwb2ludCB0byB0aGUgcHJldmlvdXMgc3RydWN0IGluc3RlYWQgKi8KIAogICAgICAgICAvKiBXZSBoYXZlIHJlcGxhY2VkIGEgY29va2llLCBub3cgc2tpcCB0aGUgcmVzdCBvZiB0aGUgbGlzdCBidXQKQEAgLTEwOTgsNiArMTA5Myw4IEBACiAgKgogICogSWYgJ25ld3Nlc3Npb24nIGlzIFRSVUUsIGRpc2NhcmQgYWxsICJzZXNzaW9uIGNvb2tpZXMiIG9uIHJlYWQgZnJvbSBmaWxlLgogICoKKyAqIE5vdGUgdGhhdCAnZGF0YScgbWlnaHQgYmUgY2FsbGVkIGFzIE5VTEwgcG9pbnRlci4KKyAqCiAgKiBSZXR1cm5zIE5VTEwgb24gb3V0IG9mIG1lbW9yeS4gSW52YWxpZCBjb29raWVzIGFyZSBpZ25vcmVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApAQCAtMTE2OCw2ICsxMTY1LDggQEAKICAgfQogCiAgIGMtPnJ1bm5pbmcgPSBUUlVFOyAgICAgICAgICAvKiBub3csIHdlJ3JlIHJ1bm5pbmcgKi8KKyAgaWYoZGF0YSkKKyAgICBkYXRhLT5zdGF0ZS5jb29raWVfZW5naW5lID0gVFJVRTsKIAogICByZXR1cm4gYzsKIApAQCAtMTUwNCwxMSArMTUwMywxNCBAQAogICoKICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIG9uIHdyaXRlIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgY29va2llX291dHB1dChzdHJ1Y3QgQ29va2llSW5mbyAqYywgY29uc3QgY2hhciAqZHVtcGhlcmUpCitzdGF0aWMgaW50IGNvb2tpZV9vdXRwdXQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29va2llSW5mbyAqYywgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgIHN0cnVjdCBDb29raWUgKmNvOwotICBGSUxFICpvdXQ7CisgIEZJTEUgKm91dCA9IE5VTEw7CiAgIGJvb2wgdXNlX3N0ZG91dCA9IEZBTFNFOworICBjaGFyICp0ZW1wc3RvcmUgPSBOVUxMOworICBib29sIGVycm9yID0gZmFsc2U7CiAKICAgaWYoIWMpCiAgICAgLyogbm8gY29va2llIGVuZ2luZSBhbGl2ZSAqLwpAQCAtMTUxNywxNiArMTUxOSwyNCBAQAogICAvKiBhdCBmaXJzdCwgcmVtb3ZlIGV4cGlyZWQgY29va2llcyAqLwogICByZW1vdmVfZXhwaXJlZChjKTsKIAotICBpZighc3RyY21wKCItIiwgZHVtcGhlcmUpKSB7CisgIGlmKCFzdHJjbXAoIi0iLCBmaWxlbmFtZSkpIHsKICAgICAvKiB1c2Ugc3Rkb3V0ICovCiAgICAgb3V0ID0gc3Rkb3V0OwogICAgIHVzZV9zdGRvdXQgPSBUUlVFOwogICB9CiAgIGVsc2UgewotICAgIG91dCA9IGZvcGVuKGR1bXBoZXJlLCBGT1BFTl9XUklURVRFWFQpOwotICAgIGlmKCFvdXQpIHsKLSAgICAgIHJldHVybiAxOyAvKiBmYWlsdXJlICovCi0gICAgfQorICAgIHVuc2lnbmVkIGNoYXIgcmFuZHN1ZmZpeFs5XTsKKworICAgIGlmKEN1cmxfcmFuZF9oZXgoZGF0YSwgcmFuZHN1ZmZpeCwgc2l6ZW9mKHJhbmRzdWZmaXgpKSkKKyAgICAgIHJldHVybiAyOworCisgICAgdGVtcHN0b3JlID0gYXByaW50ZigiJXMuJXMudG1wIiwgZmlsZW5hbWUsIHJhbmRzdWZmaXgpOworICAgIGlmKCF0ZW1wc3RvcmUpCisgICAgICByZXR1cm4gMTsKKworICAgIG91dCA9IGZvcGVuKHRlbXBzdG9yZSwgRk9QRU5fV1JJVEVURVhUKTsKKyAgICBpZighb3V0KQorICAgICAgZ290byBlcnJvcjsKICAgfQogCiAgIGZwdXRzKCIjIE5ldHNjYXBlIEhUVFAgQ29va2llIEZpbGVcbiIKQEAgLTE1MzYsMzUgKzE1NDYsMzEgQEAKIAogICBpZihjLT5udW1jb29raWVzKSB7CiAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgdW5zaWduZWQgaW50IGo7CisgICAgc2l6ZV90IG52YWxpZCA9IDA7CiAgICAgc3RydWN0IENvb2tpZSAqKmFycmF5OwogCi0gICAgYXJyYXkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBDb29raWUgKikgKiBjLT5udW1jb29raWVzKTsKKyAgICBhcnJheSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSAqIGMtPm51bWNvb2tpZXMpOwogICAgIGlmKCFhcnJheSkgewotICAgICAgaWYoIXVzZV9zdGRvdXQpCi0gICAgICAgIGZjbG9zZShvdXQpOwotICAgICAgcmV0dXJuIDE7CisgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGogPSAwOworICAgIC8qIG9ubHkgc29ydCB0aGUgY29va2llcyB3aXRoIGEgZG9tYWluIHByb3BlcnR5ICovCiAgICAgZm9yKGkgPSAwOyBpIDwgQ09PS0lFX0hBU0hfU0laRTsgaSsrKSB7CiAgICAgICBmb3IoY28gPSBjLT5jb29raWVzW2ldOyBjbzsgY28gPSBjby0+bmV4dCkgewogICAgICAgICBpZighY28tPmRvbWFpbikKICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXJyYXlbaisrXSA9IGNvOworICAgICAgICBhcnJheVtudmFsaWQrK10gPSBjbzsKICAgICAgIH0KICAgICB9CiAKLSAgICBxc29ydChhcnJheSwgYy0+bnVtY29va2llcywgc2l6ZW9mKHN0cnVjdCBDb29raWUgKiksIGNvb2tpZV9zb3J0X2N0KTsKKyAgICBxc29ydChhcnJheSwgbnZhbGlkLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSwgY29va2llX3NvcnRfY3QpOwogCi0gICAgZm9yKGkgPSAwOyBpIDwgajsgaSsrKSB7CisgICAgZm9yKGkgPSAwOyBpIDwgbnZhbGlkOyBpKyspIHsKICAgICAgIGNoYXIgKmZvcm1hdF9wdHIgPSBnZXRfbmV0c2NhcGVfZm9ybWF0KGFycmF5W2ldKTsKICAgICAgIGlmKGZvcm1hdF9wdHIgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKG91dCwgIiNcbiMgRmF0YWwgbGliY3VybCBlcnJvclxuIik7CiAgICAgICAgIGZyZWUoYXJyYXkpOwotICAgICAgICBpZighdXNlX3N0ZG91dCkKLSAgICAgICAgICBmY2xvc2Uob3V0KTsKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICB9CiAgICAgICBmcHJpbnRmKG91dCwgIiVzXG4iLCBmb3JtYXRfcHRyKTsKICAgICAgIGZyZWUoZm9ybWF0X3B0cik7CkBAIC0xNTcyLDEwICsxNTc4LDI0IEBACiAKICAgICBmcmVlKGFycmF5KTsKICAgfQotICBpZighdXNlX3N0ZG91dCkKLSAgICBmY2xvc2Uob3V0KTsKIAotICByZXR1cm4gMDsKKyAgaWYoIXVzZV9zdGRvdXQpIHsKKyAgICBmY2xvc2Uob3V0KTsKKyAgICBvdXQgPSBOVUxMOworICAgIGlmKEN1cmxfcmVuYW1lKHRlbXBzdG9yZSwgZmlsZW5hbWUpKSB7CisgICAgICB1bmxpbmsodGVtcHN0b3JlKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICB9CisKKyAgZ290byBjbGVhbnVwOworZXJyb3I6CisgIGVycm9yID0gdHJ1ZTsKK2NsZWFudXA6CisgIGlmKG91dCAmJiAhdXNlX3N0ZG91dCkKKyAgICBmY2xvc2Uob3V0KTsKKyAgZnJlZSh0ZW1wc3RvcmUpOworICByZXR1cm4gZXJyb3IgPyAxIDogMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpjb29raWVfbGlzdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTYyMSw3ICsxNjQxLDcgQEAKICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjbGVhbnVwKQordm9pZCBDdXJsX2ZsdXNoX2Nvb2tpZXMoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBjbGVhbnVwKQogewogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKSB7CiAgICAgaWYoZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QpIHsKQEAgLTE2MzQsNyArMTY1NCw3IEBACiAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOwogCiAgICAgLyogaWYgd2UgaGF2ZSBhIGRlc3RpbmF0aW9uIGZpbGUgZm9yIGFsbCB0aGUgY29va2llcyB0byBnZXQgZHVtcGVkIHRvICovCi0gICAgaWYoY29va2llX291dHB1dChkYXRhLT5jb29raWVzLCBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKSkKKyAgICBpZihjb29raWVfb3V0cHV0KGRhdGEsIGRhdGEtPmNvb2tpZXMsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NPT0tJRUpBUl0pKQogICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBzYXZlIGNvb2tpZXMgaW4gJXNcbiIsCiAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKTsKICAgfQpAQCAtMTY1MCw2ICsxNjcwLDcgQEAKIAogICBpZihjbGVhbnVwICYmICghZGF0YS0+c2hhcmUgfHwgKGRhdGEtPmNvb2tpZXMgIT0gZGF0YS0+c2hhcmUtPmNvb2tpZXMpKSkgewogICAgIEN1cmxfY29va2llX2NsZWFudXAoZGF0YS0+Y29va2llcyk7CisgICAgZGF0YS0+Y29va2llcyA9IE5VTEw7CiAgIH0KICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvb2tpZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKaW5kZXggYjI3MzBjZi4uYjM4NjVlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogI2RlZmluZSBDdXJsX2Nvb2tpZV9jbGVhbnVwKHgpIEN1cmxfbm9wX3N0bXQKICNkZWZpbmUgQ3VybF9mbHVzaF9jb29raWVzKHgseSkgQ3VybF9ub3Bfc3RtdAogI2Vsc2UKLXZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjbGVhbnVwKTsKK3ZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgY2xlYW51cCk7CiB2b2lkIEN1cmxfY29va2llX2NsZWFudXAoc3RydWN0IENvb2tpZUluZm8gKik7CiBzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgQ29va2llSW5mbyAqLCBib29sKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYmFzZTY0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Jhc2U2NC5oCmluZGV4IDdlOWZjMjYuLmNmYjZlZTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYmFzZTY0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9iYXNlNjQuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9jb25maWcuaC5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfY29uZmlnLmguY21ha2UKaW5kZXggYjI4NWMzZi4uYWI4ZjIyNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9jb25maWcuaC5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlCkBAIC02NCw2ICs2NCw5IEBACiAjZGVmaW5lIENVUkxfRVhURVJOX1NZTUJPTAogI2VuZGlmCiAKKy8qIEFsbG93IFNNQiB0byB3b3JrIG9uIFdpbmRvd3MgKi8KKyNjbWFrZWRlZmluZSBVU0VfV0lOMzJfQ1JZUFRPCisKIC8qIFVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24gKi8KICNjbWFrZWRlZmluZSBVU0VfV0lOMzJfTERBUCAxCiAKQEAgLTEzOSw5ICsxNDIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0RMRkNOX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcycgZnVuY3Rpb24uICovCi0jY21ha2VkZWZpbmUgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfRVJSTk9fSCAxCiAKQEAgLTIzMiw2ICsyMzIsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRzb2NrbmFtZScgZnVuY3Rpb24uICovCiAjY21ha2VkZWZpbmUgSEFWRV9HRVRTT0NLTkFNRSAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfbmFtZXRvaW5kZXgnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSUZfTkFNRVRPSU5ERVggMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3dWlkJyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0dFVFBXVUlEIDEKIApAQCAtMzk1LDkgKzM5OCw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYnNzaDIuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9MSUJTU0gyX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfTElCU1NMIDEKLQogLyogaWYgemxpYiBpcyBhdmFpbGFibGUgKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQlogMQogCkBAIC00NDYsOSArNDQ2LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxCiAKQEAgLTU3NSw5ICs1NzIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU09DS0VUIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0xfZ2V0X3NodXRkb3duJyBmdW5jdGlvbi4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNzbC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NTTF9IIDEKIApAQCAtODc5LDM1ICs4NzMsNDQgQEAKIC8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCiAjY21ha2VkZWZpbmUgU0VORF9UWVBFX1JFVFYgJHtTRU5EX1RZUEVfUkVUVn0KIAorLyoKKyBOb3RlOiBTSVpFT0ZfKiB2YXJpYWJsZXMgYXJlIGZldGNoZWQgd2l0aCBDTWFrZSB0aHJvdWdoIGNoZWNrX3R5cGVfc2l6ZSgpLgorIEFzIHBlciBDTWFrZSBkb2N1bWVudGF0aW9uIG9uIENoZWNrVHlwZVNpemUsIEMgcHJlcHJvY2Vzc29yIGNvZGUgaXMKKyBnZW5lcmF0ZWQgYnkgQ01ha2UgaW50byBTSVpFT0ZfKl9DT0RFLiBUaGlzIGlzIHdoYXQgd2UgdXNlIGluIHRoZQorIGZvbGxvd2luZyBzdGF0ZW1lbnRzLgorCisgUmVmZXJlbmNlOiBodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL2xhdGVzdC9tb2R1bGUvQ2hlY2tUeXBlU2l6ZS5odG1sCisqLworCiAvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9JTlRfQ09ERUAKKyR7U0laRU9GX0lOVF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1NIT1JUX0NPREVACiske1NJWkVPRl9TSE9SVF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfTE9OR19DT0RFQAorJHtTSVpFT0ZfTE9OR19DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9MT05HX0xPTkdfQ09ERUAKKyR7U0laRU9GX0xPTkdfTE9OR19DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgX19pbnQ2NCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfX19JTlQ2NF9DT0RFQAorJHtTSVpFT0ZfX19JTlQ2NF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgb2ZmX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX09GRl9UX0NPREVACiske1NJWkVPRl9PRkZfVF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgY3VybF9vZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfQ1VSTF9PRkZfVF9DT0RFQAorJHtTSVpFT0ZfQ1VSTF9PRkZfVF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9TSVpFX1RfQ09ERUAKKyR7U0laRU9GX1NJWkVfVF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgc3NpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfU1NJWkVfVF9DT0RFQAorJHtTSVpFT0ZfU1NJWkVfVF9DT0RFfQogCiAvKiBUaGUgc2l6ZSBvZiBgdGltZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9USU1FX1RfQ09ERUAKKyR7U0laRU9GX1RJTUVfVF9DT0RFfQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KICNjbWFrZWRlZmluZSBTVERDX0hFQURFUlMgMQpAQCAtOTMzLDE1ICs5MzYsMTUgQEAKIC8qIGlmIEdudVRMUyBpcyBlbmFibGVkICovCiAjY21ha2VkZWZpbmUgVVNFX0dOVVRMUyAxCiAKLS8qIGlmIFBvbGFyU1NMIGlzIGVuYWJsZWQgKi8KLSNjbWFrZWRlZmluZSBVU0VfUE9MQVJTU0wgMQotCiAvKiBpZiBTZWN1cmUgVHJhbnNwb3J0IGlzIGVuYWJsZWQgKi8KICNjbWFrZWRlZmluZSBVU0VfU0VDVFJBTlNQIDEKIAogLyogaWYgbWJlZFRMUyBpcyBlbmFibGVkICovCiAjY21ha2VkZWZpbmUgVVNFX01CRURUTFMgMQogCisvKiBpZiBCZWFyU1NMIGlzIGVuYWJsZWQgKi8KKyNjbWFrZWRlZmluZSBVU0VfQkVBUlNTTCAxCisKIC8qIGlmIGxpYlNTSDIgaXMgaW4gdXNlICovCiAjY21ha2VkZWZpbmUgVVNFX0xJQlNTSDIgMQogCkBAIC05NTEsNiArOTU0LDkgQEAKIC8qIGlmIE5TUyBpcyBlbmFibGVkICovCiAjY21ha2VkZWZpbmUgVVNFX05TUyAxCiAKKy8qIGlmIHlvdSBoYXZlIHRoZSBQSzExX0NyZWF0ZU1hbmFnZWRHZW5lcmljT2JqZWN0IGZ1bmN0aW9uICovCisjY21ha2VkZWZpbmUgSEFWRV9QSzExX0NSRUFURU1BTkFHRURHRU5FUklDT0JKRUNUIDEKKwogLyogaWYgeW91IHdhbnQgdG8gdXNlIE9wZW5MREFQIGNvZGUgaW5zdGVhZCBvZiBsZWdhY3kgbGRhcCBpbXBsZW1lbnRhdGlvbiAqLwogI2NtYWtlZGVmaW5lIFVTRV9PUEVOTERBUCAxCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5jCmluZGV4IGIxMjNhMDAuLjM5YzBmMzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9kZXMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOSwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5oCmluZGV4IDEyOTA2MGYuLmE0MmVlYjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9kZXMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOSwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5jCmluZGV4IGI3NTYzYjMuLmE3NzRkMTMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uYwpAQCAtODEsNiArODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KWJ1ZlsxXSkpOwogfQogCisjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiA0KQogLyoKICAqIHdyaXRlMzJfbGUoKQogICoKQEAgLTEwMCw3ICsxMDEsNiBAQAogICBidWZmZXJbM10gPSAoY2hhcikoKHZhbHVlICYgMHhGRjAwMDAwMCkgPj4gMjQpOwogfQogCi0jaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiA0KQogLyoKICAqIEN1cmxfd3JpdGU2NF9sZSgpCiAgKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmgKaW5kZXggNGYzNDVhNi4uOTgzMGU1OCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMSw5ICszMSw2IEBACiAvKiBDb252ZXJ0cyBhIDE2LWJpdCBpbnRlZ2VyIGZyb20gYmlnIGVuZGlhbiAqLwogdW5zaWduZWQgc2hvcnQgQ3VybF9yZWFkMTZfYmUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKTsKIAotLyogQ29udmVydHMgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUgZW5kaWFuICovCi12b2lkIEN1cmxfd3JpdGUzMl9sZShjb25zdCBpbnQgdmFsdWUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik7Ci0KICNpZiAoQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCA+IDQpCiAvKiBDb252ZXJ0cyBhIDY0LWJpdCBpbnRlZ2VyIHRvIGxpdHRsZSBlbmRpYW4gKi8KICNpZiBkZWZpbmVkKEhBVkVfTE9OR0xPTkcpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZm5tYXRjaC5oCmluZGV4IDY5ZmZlMzkuLjM0ZmNjYWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZm5tYXRjaC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZm5tYXRjaC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2dldGhvc3RuYW1lLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2dldGhvc3RuYW1lLmgKaW5kZXggMDc1MTdjNS4uOGFlMTVlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9nZXRob3N0bmFtZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZ2V0aG9zdG5hbWUuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2htYWMuaAppbmRleCA3NTZkYzllLi4zZmY3OTliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2htYWMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2htYWMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjQsNiArMjQsOCBAQAogCiAjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAogCisjZGVmaW5lIEhNQUNfTUQ1X0xFTkdUSCAxNgorCiB0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oaW5pdF9mdW5jKSh2b2lkICpjb250ZXh0KTsKIHR5cGVkZWYgdm9pZCAgICAoKiBITUFDX2h1cGRhdGVfZnVuYykodm9pZCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKQEAgLTYyLDYgKzY0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKIGludCBDdXJsX0hNQUNfZmluYWwoSE1BQ19jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpOwogCitDVVJMY29kZSBDdXJsX2htYWNpdChjb25zdCBITUFDX3BhcmFtcyAqaGFzaHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3Qgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGNvbnN0IHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KTsKKwogI2VuZGlmCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9ITUFDX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbGRhcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9sZGFwLmgKaW5kZXggOTRjMDAyOS4uOTEyZTEzMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9sZGFwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9sZGFwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNC5oCmluZGV4IDM5MjIwM2YuLmM3YmIyMDkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDQuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjQsMTQgKzI0LDEzIEBACiAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKLSNpZiBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKSB8fCBcCi0gICAgKGRlZmluZWQoVVNFX09QRU5TU0wpICYmIGRlZmluZWQoT1BFTlNTTF9OT19NRDQpKSB8fCBcCi0gICAgKGRlZmluZWQoVVNFX01CRURUTFMpICYmICFkZWZpbmVkKE1CRURUTFNfTUQ0X0MpKQorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkKIAotdm9pZCBDdXJsX21kNGl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBsZW4pOworI2RlZmluZSBNRDRfRElHRVNUX0xFTkdUSCAxNgogCi0jZW5kaWYgLyogZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9PUzQwMENSWVBUTykgfHwKLSAgICAoZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX01ENCkpIHx8Ci0gICAgKGRlZmluZWQoVVNFX01CRURUTFMpICYmICFkZWZpbmVkKE1CRURUTFNfTUQ0X0MpKSAqLwordm9pZCBDdXJsX21kNGl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxlbik7CisKKyNlbmRpZiAvKiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NRDRfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ1LmgKaW5kZXggYWFmMjVmNi4uZGQ0NjQ0MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDUuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00OSw4ICs0OSw4IEBACiBleHRlcm4gY29uc3QgTUQ1X3BhcmFtcyBDdXJsX0RJR0VTVF9NRDVbMV07CiBleHRlcm4gY29uc3QgSE1BQ19wYXJhbXMgQ3VybF9ITUFDX01ENVsxXTsKIAotdm9pZCBDdXJsX21kNWl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCk7Cit2b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKTsKIAogTUQ1X2NvbnRleHQgKiBDdXJsX01ENV9pbml0KGNvbnN0IE1ENV9wYXJhbXMgKm1kNXBhcmFtcyk7CiBDVVJMY29kZSBDdXJsX01ENV91cGRhdGUoTUQ1X2NvbnRleHQgKmNvbnRleHQsCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21lbXJjaHIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCmluZGV4IDc0NzUwOWMuLjkwYThhMDcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuYwppbmRleCBlNDgzMzRmLi5lMzg0MzQ0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbXVsdGlieXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbXVsdGlieXRlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5oCmluZGV4IDYxNWY1YzAuLjNiZWNmNDEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbXVsdGlieXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjEsOCArNjEsMTMgQEAKIAogI2RlZmluZSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihwdHIpIEN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKChwdHIpKQogI2RlZmluZSBDdXJsX2NvbnZlcnRfdGNoYXJfdG9fVVRGOChwdHIpIEN1cmxfY29udmVydF93Y2hhcl90b19VVEY4KChwdHIpKQotI2RlZmluZSBDdXJsX3VuaWNvZGVmcmVlKHB0cikgXAotICBkbyB7aWYoKHB0cikpIHtmcmVlKChwdHIpKTsgKHB0cikgPSBOVUxMO319IFdISUxFX0ZBTFNFCisjZGVmaW5lIEN1cmxfdW5pY29kZWZyZWUocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKHB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBmcmVlKHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChwdHIpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUoMCkKIAogdHlwZWRlZiB1bmlvbiB7CiAgIHVuc2lnbmVkIHNob3J0ICAgICAgICp0Y2hhcl9wdHI7CkBAIC03Niw3ICs4MSw3IEBACiAjZGVmaW5lIEN1cmxfY29udmVydF9VVEY4X3RvX3RjaGFyKHB0cikgKHB0cikKICNkZWZpbmUgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgocHRyKSAocHRyKQogI2RlZmluZSBDdXJsX3VuaWNvZGVmcmVlKHB0cikgXAotICBkbyB7KHB0cikgPSBOVUxMO30gV0hJTEVfRkFMU0UKKyAgZG8geyhwdHIpID0gTlVMTDt9IHdoaWxlKDApCiAKIHR5cGVkZWYgdW5pb24gewogICBjaGFyICAgICAgICAgICAgICAgICp0Y2hhcl9wdHI7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuYwppbmRleCBiNmRmMzhmLi5mOWI4MjNiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV9jb3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU1LDExICs1NSw2IEBACiAjaWZkZWYgVVNFX09QRU5TU0wKIAogIyAgaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSMgIGlmbmRlZiBPUEVOU1NMX05PX01ENAotIyAgICBpbmNsdWRlIDxvcGVuc3NsL21kNC5oPgotIyAgZWxzZQotIyAgICBpbmNsdWRlICJjdXJsX21kNC5oIgotIyAgZW5kaWYKICMgIGluY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CiAjICBpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogIyAgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CkBAIC03OSwyOSArNzQsMjMgQEAKICNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCiAKICMgIGluY2x1ZGUgPG5ldHRsZS9kZXMuaD4KLSMgIGluY2x1ZGUgPG5ldHRsZS9tZDQuaD4KIAogI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQogCiAjICBpbmNsdWRlIDxnY3J5cHQuaD4KICMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgotIyAgZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CiAKICNlbGlmIGRlZmluZWQoVVNFX05TUykKIAogIyAgaW5jbHVkZSA8bnNzLmg+CiAjICBpbmNsdWRlIDxwazExcHViLmg+CiAjICBpbmNsdWRlIDxoYXNodC5oPgotIyAgaW5jbHVkZSAiY3VybF9tZDQuaCIKICMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCBNRDVfTEVOR1RICiAKICNlbGlmIGRlZmluZWQoVVNFX01CRURUTFMpCiAKICMgIGluY2x1ZGUgPG1iZWR0bHMvZGVzLmg+Ci0jICBpbmNsdWRlIDxtYmVkdGxzL21kNC5oPgotIyAgaWYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykKLSMgICAgaW5jbHVkZSAiY3VybF9tZDQuaCIKLSMgIGVuZGlmCisjICBpbmNsdWRlICJjdXJsX21kNC5oIgogCiAjZWxpZiBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApCiAKQEAgLTExMCw3ICs5OSw2IEBACiAKICNlbGlmIGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKQogIyAgaW5jbHVkZSAiY2lwaGVyLm1paCIgIC8qIG1paC9jaXBoZXIgKi8KLSMgIGluY2x1ZGUgImN1cmxfbWQ0LmgiCiAjZWxpZiBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCiAjICBpbmNsdWRlIDx3aW5jcnlwdC5oPgogI2Vsc2UKQEAgLTEyNiwxMiArMTE0LDEyIEBACiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJjdXJsX2VuZGlhbi5oIgogI2luY2x1ZGUgImN1cmxfZGVzLmgiCisjaW5jbHVkZSAiY3VybF9tZDQuaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAotI2RlZmluZSBOVExNX0hNQUNfTUQ1X0xFTiAgICAgKDE2KQogI2RlZmluZSBOVExNdjJfQkxPQl9TSUdOQVRVUkUgIlx4MDFceDAxXHgwMFx4MDAiCiAjZGVmaW5lIE5UTE12Ml9CTE9CX0xFTiAgICAgICAoNDQgLTE2ICsgbnRsbS0+dGFyZ2V0X2luZm9fbGVuICsgNCkKIApAQCAtMjE4LDcgKzIwNiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXlfNTYpCiB7CiAgIGNvbnN0IENLX01FQ0hBTklTTV9UWVBFIG1lY2ggPSBDS01fREVTX0VDQjsgLyogREVTIGNpcGhlciBpbiBFQ0IgbW9kZSAqLwotICBQSzExU2xvdEluZm8gKnNsb3QgPSBOVUxMOwogICBjaGFyIGtleVs4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGFuZGVkIDY0IGJpdCBrZXkgKi8KICAgU0VDSXRlbSBrZXlfaXRlbTsKICAgUEsxMVN5bUtleSAqc3lta2V5ID0gTlVMTDsKQEAgLTIyOCw3ICsyMTUsNyBAQAogICBib29sIHJ2ID0gRkFMU0U7CiAKICAgLyogdXNlIGludGVybmFsIHNsb3QgZm9yIERFUyBlbmNyeXB0aW9uIChyZXF1aXJlcyBOU1MgdG8gYmUgaW5pdGlhbGl6ZWQpICovCi0gIHNsb3QgPSBQSzExX0dldEludGVybmFsS2V5U2xvdCgpOworICBQSzExU2xvdEluZm8gKnNsb3QgPSBQSzExX0dldEludGVybmFsS2V5U2xvdCgpOwogICBpZighc2xvdCkKICAgICByZXR1cm4gRkFMU0U7CiAKQEAgLTU1Myw3ICs1NDAsNyBAQAogICBDVVJMY29kZSByZXN1bHQ7CiAgIGlmKGxlbiA+IFNJWkVfVF9NQVgvMikgLyogYXZvaWQgaW50ZWdlciBvdmVyZmxvdyAqLwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICBwdyA9IGxlbiA/IG1hbGxvYyhsZW4gKiAyKSA6IHN0cmR1cCgiIik7CisgIHB3ID0gbGVuID8gbWFsbG9jKGxlbiAqIDIpIDogKHVuc2lnbmVkIGNoYXIgKilzdHJkdXAoIiIpOwogICBpZighcHcpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTU2Nyw1NyArNTU0LDEwIEBACiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCi0gIHsKLSAgICAvKiBDcmVhdGUgTlQgaGFzaGVkIHBhc3N3b3JkLiAqLwotI2lmZGVmIFVTRV9PUEVOU1NMCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19NRDQpCi0gICAgTUQ0X0NUWCBNRDRwdzsKLSAgICBNRDRfSW5pdCgmTUQ0cHcpOwotICAgIE1ENF9VcGRhdGUoJk1ENHB3LCBwdywgMiAqIGxlbik7Ci0gICAgTUQ0X0ZpbmFsKG50YnVmZmVyLCAmTUQ0cHcpOwotI2Vsc2UKLSAgICBDdXJsX21kNGl0KG50YnVmZmVyLCBwdywgMiAqIGxlbik7Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCi0gICAgc3RydWN0IG1kNF9jdHggTUQ0cHc7Ci0gICAgbWQ0X2luaXQoJk1ENHB3KTsKLSAgICBtZDRfdXBkYXRlKCZNRDRwdywgKHVuc2lnbmVkIGludCkoMiAqIGxlbiksIHB3KTsKLSAgICBtZDRfZGlnZXN0KCZNRDRwdywgTUQ0X0RJR0VTVF9TSVpFLCBudGJ1ZmZlcik7Ci0jZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCi0gICAgZ2NyeV9tZF9oZF90IE1ENHB3OwotICAgIGdjcnlfbWRfb3BlbigmTUQ0cHcsIEdDUllfTURfTUQ0LCAwKTsKLSAgICBnY3J5X21kX3dyaXRlKE1ENHB3LCBwdywgMiAqIGxlbik7Ci0gICAgbWVtY3B5KG50YnVmZmVyLCBnY3J5X21kX3JlYWQoTUQ0cHcsIDApLCBNRDRfRElHRVNUX0xFTkdUSCk7Ci0gICAgZ2NyeV9tZF9jbG9zZShNRDRwdyk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9OU1MpCi0gICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwotI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKLSNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCi0gICAgbWJlZHRsc19tZDQocHcsIDIgKiBsZW4sIG50YnVmZmVyKTsKLSNlbHNlCi0gICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApCi0gICAgKHZvaWQpQ0NfTUQ0KHB3LCAoQ0NfTE9ORykoMiAqIGxlbiksIG50YnVmZmVyKTsKLSNlbGlmIGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKQotICAgIEN1cmxfbWQ0aXQobnRidWZmZXIsIHB3LCAyICogbGVuKTsKLSNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKLSAgICBIQ1JZUFRQUk9WIGhwcm92OwotICAgIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmhwcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKLSAgICAgIEhDUllQVEhBU0ggaGhhc2g7Ci0gICAgICBpZihDcnlwdENyZWF0ZUhhc2goaHByb3YsIENBTEdfTUQ0LCAwLCAwLCAmaGhhc2gpKSB7Ci0gICAgICAgIERXT1JEIGxlbmd0aCA9IDE2OwotICAgICAgICBDcnlwdEhhc2hEYXRhKGhoYXNoLCBwdywgKHVuc2lnbmVkIGludClsZW4gKiAyLCAwKTsKLSAgICAgICAgQ3J5cHRHZXRIYXNoUGFyYW0oaGhhc2gsIEhQX0hBU0hWQUwsIG50YnVmZmVyLCAmbGVuZ3RoLCAwKTsKLSAgICAgICAgQ3J5cHREZXN0cm95SGFzaChoaGFzaCk7Ci0gICAgICB9Ci0gICAgICBDcnlwdFJlbGVhc2VDb250ZXh0KGhwcm92LCAwKTsKLSAgICB9Ci0jZW5kaWYKKyAgLyogQ3JlYXRlIE5UIGhhc2hlZCBwYXNzd29yZC4gKi8KKyAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwogCi0gICAgbWVtc2V0KG50YnVmZmVyICsgMTYsIDAsIDIxIC0gMTYpOwotICB9CisgIG1lbXNldChudGJ1ZmZlciArIDE2LCAwLCAyMSAtIDE2KTsKIAogICBmcmVlKHB3KTsKIApAQCAtNjI2LDI1ICs1NjYsNiBAQAogCiAjaWYgZGVmaW5lZChVU0VfTlRMTV9WMikgJiYgIWRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKIAotLyogVGhpcyByZXR1cm5zIHRoZSBITUFDIE1ENSBkaWdlc3QgKi8KLXN0YXRpYyBDVVJMY29kZSBobWFjX21kNShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KQotewotICBITUFDX2NvbnRleHQgKmN0eHQgPSBDdXJsX0hNQUNfaW5pdChDdXJsX0hNQUNfTUQ1LCBrZXksIGtleWxlbik7Ci0KLSAgaWYoIWN0eHQpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgLyogVXBkYXRlIHRoZSBkaWdlc3Qgd2l0aCB0aGUgZ2l2ZW4gY2hhbGxlbmdlICovCi0gIEN1cmxfSE1BQ191cGRhdGUoY3R4dCwgZGF0YSwgZGF0YWxlbik7Ci0KLSAgLyogRmluYWxpc2UgdGhlIGRpZ2VzdCAqLwotICBDdXJsX0hNQUNfZmluYWwoY3R4dCwgb3V0cHV0KTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KIC8qIFRoaXMgY3JlYXRlcyB0aGUgTlRMTXYyIGhhc2ggYnkgdXNpbmcgTlRMTSBoYXNoIGFzIHRoZSBrZXkgYW5kIFVuaWNvZGUKICAqICh1cHBlcmNhc2UgVXNlck5hbWUgKyBEb21haW4pIGFzIHRoZSBkYXRhCiAgKi8KQEAgLTY3NCw4ICs1OTUsOCBAQAogICBhc2NpaV91cHBlcmNhc2VfdG9fdW5pY29kZV9sZShpZGVudGl0eSwgdXNlciwgdXNlcmxlbik7CiAgIGFzY2lpX3RvX3VuaWNvZGVfbGUoaWRlbnRpdHkgKyAodXNlcmxlbiA8PCAxKSwgZG9tYWluLCBkb21sZW4pOwogCi0gIHJlc3VsdCA9IGhtYWNfbWQ1KG50bG1oYXNoLCAxNiwgaWRlbnRpdHksIGN1cmx4X3V6dG91aShpZGVudGl0eV9sZW4pLAotICAgICAgICAgICAgICAgICAgICBudGxtdjJoYXNoKTsKKyAgcmVzdWx0ID0gQ3VybF9obWFjaXQoQ3VybF9ITUFDX01ENSwgbnRsbWhhc2gsIDE2LCBpZGVudGl0eSwgaWRlbnRpdHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBudGxtdjJoYXNoKTsKICAgZnJlZShpZGVudGl0eSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcyMSw3ICs2NDIsNyBAQAogCiAgIHVuc2lnbmVkIGludCBsZW4gPSAwOwogICB1bnNpZ25lZCBjaGFyICpwdHIgPSBOVUxMOwotICB1bnNpZ25lZCBjaGFyIGhtYWNfb3V0cHV0W05UTE1fSE1BQ19NRDVfTEVOXTsKKyAgdW5zaWduZWQgY2hhciBobWFjX291dHB1dFtITUFDX01ENV9MRU5HVEhdOwogICBjdXJsX29mZl90IHR3OwogCiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwpAQCAtNzQwLDcgKzY2MSw3IEBACiAgICAgdHcgPSAoKGN1cmxfb2ZmX3QpdGltZShOVUxMKSArIENVUkxfT0ZGX1RfQygxMTY0NDQ3MzYwMCkpICogMTAwMDAwMDA7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSByZXNwb25zZSBsZW4gKi8KLSAgbGVuID0gTlRMTV9ITUFDX01ENV9MRU4gKyBOVExNdjJfQkxPQl9MRU47CisgIGxlbiA9IEhNQUNfTUQ1X0xFTkdUSCArIE5UTE12Ml9CTE9CX0xFTjsKIAogICAvKiBBbGxvY2F0ZSB0aGUgcmVzcG9uc2UgKi8KICAgcHRyID0gY2FsbG9jKDEsIGxlbik7CkBAIC03NDgsNyArNjY5LDcgQEAKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAvKiBDcmVhdGUgdGhlIEJMT0Igc3RydWN0dXJlICovCi0gIG1zbnByaW50ZigoY2hhciAqKXB0ciArIE5UTE1fSE1BQ19NRDVfTEVOLCBOVExNdjJfQkxPQl9MRU4sCisgIG1zbnByaW50ZigoY2hhciAqKXB0ciArIEhNQUNfTUQ1X0xFTkdUSCwgTlRMTXYyX0JMT0JfTEVOLAogICAgICAgICAgICAgIiVjJWMlYyVjIiAgIC8qIE5UTE12Ml9CTE9CX1NJR05BVFVSRSAqLwogICAgICAgICAgICAgIiVjJWMlYyVjIiwgIC8qIFJlc2VydmVkID0gMCAqLwogICAgICAgICAgICAgTlRMTXYyX0JMT0JfU0lHTkFUVVJFWzBdLCBOVExNdjJfQkxPQl9TSUdOQVRVUkVbMV0sCkBAIC03NjEsNyArNjgyLDcgQEAKIAogICAvKiBDb25jYXRlbmF0ZSB0aGUgVHlwZSAyIGNoYWxsZW5nZSB3aXRoIHRoZSBCTE9CIGFuZCBkbyBITUFDIE1ENSAqLwogICBtZW1jcHkocHRyICsgOCwgJm50bG0tPm5vbmNlWzBdLCA4KTsKLSAgcmVzdWx0ID0gaG1hY19tZDUobnRsbXYyaGFzaCwgTlRMTV9ITUFDX01ENV9MRU4sIHB0ciArIDgsCisgIHJlc3VsdCA9IEN1cmxfaG1hY2l0KEN1cmxfSE1BQ19NRDUsIG50bG12Mmhhc2gsIEhNQUNfTUQ1X0xFTkdUSCwgcHRyICsgOCwKICAgICAgICAgICAgICAgICAgICAgTlRMTXYyX0JMT0JfTEVOICsgOCwgaG1hY19vdXRwdXQpOwogICBpZihyZXN1bHQpIHsKICAgICBmcmVlKHB0cik7CkBAIC03NjksNyArNjkwLDcgQEAKICAgfQogCiAgIC8qIENvbmNhdGVuYXRlIHRoZSBITUFDIE1ENSBvdXRwdXQgIHdpdGggdGhlIEJMT0IgKi8KLSAgbWVtY3B5KHB0ciwgaG1hY19vdXRwdXQsIE5UTE1fSE1BQ19NRDVfTEVOKTsKKyAgbWVtY3B5KHB0ciwgaG1hY19vdXRwdXQsIEhNQUNfTUQ1X0xFTkdUSCk7CiAKICAgLyogUmV0dXJuIHRoZSByZXNwb25zZSAqLwogICAqbnRyZXNwID0gcHRyOwpAQCAtODA0LDcgKzcyNSw4IEBACiAgIG1lbWNweSgmZGF0YVswXSwgY2hhbGxlbmdlX3NlcnZlciwgOCk7CiAgIG1lbWNweSgmZGF0YVs4XSwgY2hhbGxlbmdlX2NsaWVudCwgOCk7CiAKLSAgcmVzdWx0ID0gaG1hY19tZDUobnRsbXYyaGFzaCwgMTYsICZkYXRhWzBdLCAxNiwgaG1hY19vdXRwdXQpOworICByZXN1bHQgPSBDdXJsX2htYWNpdChDdXJsX0hNQUNfTUQ1LCBudGxtdjJoYXNoLCAxNiwgJmRhdGFbMF0sIDE2LAorICAgICAgICAgICAgICAgICAgICAgICBobWFjX291dHB1dCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuaAppbmRleCAzYjRiODA1Li5lMTY0M2Q2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV9jb3JlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ2LDkgKzQ2LDkgQEAKICNkZWZpbmUgVVNFX05UUkVTUE9OU0VTCiAKIC8qIERlZmluZSBVU0VfTlRMTTJTRVNTSU9OIGluIG9yZGVyIHRvIG1ha2UgdGhlIHR5cGUtMyBtZXNzYWdlIGluY2x1ZGUgdGhlCi0gICBOVExNMlNlc3Npb24gcmVzcG9uc2UgbWVzc2FnZSwgcmVxdWlyZXMgVVNFX05UUkVTUE9OU0VTIGRlZmluZWQgdG8gMSBhbmQgYQotICAgQ3J5cHRvIGVuZ2luZSB0aGF0IHdlIGhhdmUgY3VybF9zc2xfbWQ1c3VtKCkgZm9yLiAqLwotI2lmIGRlZmluZWQoVVNFX05UUkVTUE9OU0VTKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQorICAgTlRMTTJTZXNzaW9uIHJlc3BvbnNlIG1lc3NhZ2UsIHJlcXVpcmVzIFVTRV9OVFJFU1BPTlNFUyBkZWZpbmVkIHRvIDEgYW5kCisgICBNRDUgc3VwcG9ydCAqLworI2lmIGRlZmluZWQoVVNFX05UUkVTUE9OU0VTKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCiAjZGVmaW5lIFVTRV9OVExNMlNFU1NJT04KICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fd2IuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCmluZGV4IDgwMjY2ZTIuLmY4MjBiODQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03NiwyMiArNzYsMjIgQEAKICMgIGRlZmluZSBzY2xvc2Vfbm9sb2coeCkgIGNsb3NlKCh4KSkKICNlbmRpZgogCi12b2lkIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbnRsbV93YihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCitzdGF0aWMgdm9pZCBudGxtX3diX2NsZWFudXAoc3RydWN0IG50bG1kYXRhICpudGxtKQogewotICBpZihjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7Ci0gICAgc2Nsb3NlKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCk7Ci0gICAgY29ubi0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gQ1VSTF9TT0NLRVRfQkFEOworICBpZihudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgc2Nsb3NlKG50bG0tPm50bG1fYXV0aF9obHByX3NvY2tldCk7CisgICAgbnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gQ1VSTF9TT0NLRVRfQkFEOwogICB9CiAKLSAgaWYoY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKSB7CisgIGlmKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCkgewogICAgIGludCBpOwogICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgcGlkX3QgcmV0ID0gd2FpdHBpZChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIE5VTEwsIFdOT0hBTkcpOwotICAgICAgaWYocmV0ID09IGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCB8fCBlcnJubyA9PSBFQ0hJTEQpCisgICAgICBwaWRfdCByZXQgPSB3YWl0cGlkKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCwgTlVMTCwgV05PSEFORyk7CisgICAgICBpZihyZXQgPT0gbnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkIHx8IGVycm5vID09IEVDSElMRCkKICAgICAgICAgYnJlYWs7CiAgICAgICBzd2l0Y2goaSkgewogICAgICAgY2FzZSAwOgotICAgICAgICBraWxsKGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCwgU0lHVEVSTSk7CisgICAgICAgIGtpbGwobnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkLCBTSUdURVJNKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDE6CiAgICAgICAgIC8qIEdpdmUgdGhlIHByb2Nlc3MgYW5vdGhlciBtb21lbnQgdG8gc2h1dCBkb3duIGNsZWFubHkgYmVmb3JlCkBAIC05OSwyMiArOTksMjEgQEAKICAgICAgICAgQ3VybF93YWl0X21zKDEpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgMjoKLSAgICAgICAga2lsbChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIFNJR0tJTEwpOworICAgICAgICBraWxsKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCwgU0lHS0lMTCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAzOgogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9Ci0gICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkID0gMDsKKyAgICBudGxtLT5udGxtX2F1dGhfaGxwcl9waWQgPSAwOwogICB9CiAKLSAgZnJlZShjb25uLT5jaGFsbGVuZ2VfaGVhZGVyKTsKLSAgY29ubi0+Y2hhbGxlbmdlX2hlYWRlciA9IE5VTEw7Ci0gIGZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKLSAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gTlVMTDsKKyAgQ3VybF9zYWZlZnJlZShudGxtLT5jaGFsbGVuZ2UpOworICBDdXJsX3NhZmVmcmVlKG50bG0tPnJlc3BvbnNlKTsKIH0KIAotc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJwKQorc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBzdHJ1Y3QgbnRsbWRhdGEgKm50bG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJwKQogewogICBjdXJsX3NvY2tldF90IHNvY2tmZHNbMl07CiAgIHBpZF90IGNoaWxkX3BpZDsKQEAgLTEyOCw5ICsxMjcsMTMgQEAKICNlbmRpZgogICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogCisjaWYgZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAodm9pZCkgZGF0YTsKKyNlbmRpZgorCiAgIC8qIFJldHVybiBpZiBjb21tdW5pY2F0aW9uIHdpdGggbnRsbV9hdXRoIGFscmVhZHkgc2V0IHVwICovCi0gIGlmKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCAhPSBDVVJMX1NPQ0tFVF9CQUQgfHwKLSAgICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKQorICBpZihudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEIHx8CisgICAgIG50bG0tPm50bG1fYXV0aF9obHByX3BpZCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKICAgdXNlcm5hbWUgPSB1c2VycDsKQEAgLTE4MSwxMyArMTg0LDEzIEBACiAgICAgbnRsbV9hdXRoID0gTlRMTV9XQl9GSUxFOwogCiAgIGlmKGFjY2VzcyhudGxtX2F1dGgsIFhfT0spICE9IDApIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IGFjY2VzcyBudGxtX2F1dGg6ICVzIGVycm5vICVkOiAlcyIsCisgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBhY2Nlc3MgbnRsbV9hdXRoOiAlcyBlcnJubyAlZDogJXMiLAogICAgICAgICAgIG50bG1fYXV0aCwgZXJybm8sIEN1cmxfc3RyZXJyb3IoZXJybm8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICBnb3RvIGRvbmU7CiAgIH0KIAotICBpZihzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZmRzKSkgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKKyAgaWYoQ3VybF9zb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZmRzKSkgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMTk2LDcgKzE5OSw3IEBACiAgIGlmKGNoaWxkX3BpZCA9PSAtMSkgewogICAgIHNjbG9zZShzb2NrZmRzWzBdKTsKICAgICBzY2xvc2Uoc29ja2Zkc1sxXSk7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBmb3JrLiBlcnJubyAlZDogJXMiLAorICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgZm9yay4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMjA4LDEzICsyMTEsMTMgQEAKICAgICAvKiBEb24ndCB1c2Ugc2Nsb3NlIGluIHRoZSBjaGlsZCBzaW5jZSBpdCBmb29scyB0aGUgc29ja2V0IGxlYWsgZGV0ZWN0b3IgKi8KICAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1swXSk7CiAgICAgaWYoZHVwMihzb2NrZmRzWzFdLCBTVERJTl9GSUxFTk8pID09IC0xKSB7Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IHJlZGlyZWN0IGNoaWxkIHN0ZGluLiBlcnJubyAlZDogJXMiLAorICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWRpcmVjdCBjaGlsZCBzdGRpbi4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICBleGl0KDEpOwogICAgIH0KIAogICAgIGlmKGR1cDIoc29ja2Zkc1sxXSwgU1RET1VUX0ZJTEVOTykgPT0gLTEpIHsKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3QgcmVkaXJlY3QgY2hpbGQgc3Rkb3V0LiBlcnJubyAlZDogJXMiLAorICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWRpcmVjdCBjaGlsZCBzdGRvdXQuIGVycm5vICVkOiAlcyIsCiAgICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgZXhpdCgxKTsKICAgICB9CkBAIC0yMzQsMTQgKzIzNywxNCBAQAogICAgICAgICAgICAgTlVMTCk7CiAKICAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1sxXSk7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBleGVjbCgpLiBlcnJubyAlZDogJXMiLAorICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgZXhlY2woKS4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGV4aXQoMSk7CiAgIH0KIAogICBzY2xvc2Uoc29ja2Zkc1sxXSk7Ci0gIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IHNvY2tmZHNbMF07Ci0gIGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCA9IGNoaWxkX3BpZDsKKyAgbnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gc29ja2Zkc1swXTsKKyAgbnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkID0gY2hpbGRfcGlkOwogICBmcmVlKGRvbWFpbik7CiAgIGZyZWUobnRsbV9hdXRoX2FsbG9jKTsKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMjU1LDE3ICsyNTgsMjEgQEAKIC8qIGlmIGxhcmdlciB0aGFuIHRoaXMsIHNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmcgKi8KICNkZWZpbmUgTUFYX05UTE1fV0JfUkVTUE9OU0UgMTAwMDAwCiAKLXN0YXRpYyBDVVJMY29kZSBudGxtX3diX3Jlc3BvbnNlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKK3N0YXRpYyBDVVJMY29kZSBudGxtX3diX3Jlc3BvbnNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHN0cnVjdCBudGxtZGF0YSAqbnRsbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0LCBjdXJsbnRsbSBzdGF0ZSkKIHsKICAgY2hhciAqYnVmID0gbWFsbG9jKE5UTE1fQlVGU0laRSk7CiAgIHNpemVfdCBsZW5faW4gPSBzdHJsZW4oaW5wdXQpLCBsZW5fb3V0ID0gMDsKIAorI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgKHZvaWQpIGRhdGE7CisjZW5kaWYKKwogICBpZighYnVmKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIHdoaWxlKGxlbl9pbiA+IDApIHsKLSAgICBzc2l6ZV90IHdyaXR0ZW4gPSBzd3JpdGUoY29ubi0+bnRsbV9hdXRoX2hscHJfc29ja2V0LCBpbnB1dCwgbGVuX2luKTsKKyAgICBzc2l6ZV90IHdyaXR0ZW4gPSBzd3JpdGUobnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0LCBpbnB1dCwgbGVuX2luKTsKICAgICBpZih3cml0dGVuID09IC0xKSB7CiAgICAgICAvKiBJbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgcmV0cnkgaXQgKi8KICAgICAgIGlmKGVycm5vID09IEVJTlRSKQpAQCAtMjgxLDcgKzI4OCw3IEBACiAgICAgc3NpemVfdCBzaXplOwogICAgIGNoYXIgKm5ld2J1ZjsKIAotICAgIHNpemUgPSBzcmVhZChjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGJ1ZiArIGxlbl9vdXQsIE5UTE1fQlVGU0laRSk7CisgICAgc2l6ZSA9IHNyZWFkKG50bG0tPm50bG1fYXV0aF9obHByX3NvY2tldCwgYnVmICsgbGVuX291dCwgTlRMTV9CVUZTSVpFKTsKICAgICBpZihzaXplID09IC0xKSB7CiAgICAgICBpZihlcnJubyA9PSBFSU5UUikKICAgICAgICAgY29udGludWU7CkBAIC0yOTcsNyArMzA0LDcgQEAKICAgICB9CiAKICAgICBpZihsZW5fb3V0ID4gTUFYX05UTE1fV0JfUkVTUE9OU0UpIHsKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJ0b28gbGFyZ2UgbnRsbV93YiByZXNwb25zZSEiKTsKKyAgICAgIGZhaWxmKGRhdGEsICJ0b28gbGFyZ2UgbnRsbV93YiByZXNwb25zZSEiKTsKICAgICAgIGZyZWUoYnVmKTsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KQEAgLTMyNSw5ICszMzIsOSBAQAogICAgICAoYnVmWzBdIT0nQScgfHwgYnVmWzFdIT0nRicgfHwgYnVmWzJdIT0nICcpKQogICAgIGdvdG8gZG9uZTsKIAotICBjb25uLT5yZXNwb25zZV9oZWFkZXIgPSBhcHJpbnRmKCJOVExNICUuKnMiLCBsZW5fb3V0IC0gNCwgYnVmICsgMyk7CisgIG50bG0tPnJlc3BvbnNlID0gYXByaW50ZigiJS4qcyIsIGxlbl9vdXQgLSA0LCBidWYgKyAzKTsKICAgZnJlZShidWYpOwotICBpZighY29ubi0+cmVzcG9uc2VfaGVhZGVyKQorICBpZighbnRsbS0+cmVzcG9uc2UpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIHJldHVybiBDVVJMRV9PSzsKIGRvbmU6CkBAIC0zMzksNiArMzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByb3h5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhlYWRlcikKIHsKKyAgc3RydWN0IG50bG1kYXRhICpudGxtID0gcHJveHkgPyAmY29ubi0+cHJveHludGxtIDogJmNvbm4tPm50bG07CiAgIGN1cmxudGxtICpzdGF0ZSA9IHByb3h5ID8gJmNvbm4tPnByb3h5X250bG1fc3RhdGUgOiAmY29ubi0+aHR0cF9udGxtX3N0YXRlOwogCiAgIGlmKCFjaGVja3ByZWZpeCgiTlRMTSIsIGhlYWRlcikpCkBAIC0zNDksOCArMzU3LDggQEAKICAgICBoZWFkZXIrKzsKIAogICBpZigqaGVhZGVyKSB7Ci0gICAgY29ubi0+Y2hhbGxlbmdlX2hlYWRlciA9IHN0cmR1cChoZWFkZXIpOwotICAgIGlmKCFjb25uLT5jaGFsbGVuZ2VfaGVhZGVyKQorICAgIG50bG0tPmNoYWxsZW5nZSA9IHN0cmR1cChoZWFkZXIpOworICAgIGlmKCFudGxtLT5jaGFsbGVuZ2UpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAgICpzdGF0ZSA9IE5UTE1TVEFURV9UWVBFMjsgLyogV2UgZ290IGEgdHlwZS0yIG1lc3NhZ2UgKi8KQEAgLTM4OSwxMSArMzk3LDExIEBACiAgIGNoYXIgKiphbGxvY3VzZXJwd2Q7CiAgIC8qIHBvaW50IHRvIHRoZSBuYW1lIGFuZCBwYXNzd29yZCBmb3IgdGhpcyAqLwogICBjb25zdCBjaGFyICp1c2VycDsKKyAgc3RydWN0IG50bG1kYXRhICpudGxtOwogICBjdXJsbnRsbSAqc3RhdGU7CiAgIHN0cnVjdCBhdXRoICphdXRocDsKIAogICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKLSAgY2hhciAqaW5wdXQ7CiAKICAgREVCVUdBU1NFUlQoY29ubik7CiAgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEpOwpAQCAtNDAxLDEyICs0MDksMTQgQEAKICAgaWYocHJveHkpIHsKICAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOwogICAgIHVzZXJwID0gY29ubi0+aHR0cF9wcm94eS51c2VyOworICAgIG50bG0gPSAmY29ubi0+cHJveHludGxtOwogICAgIHN0YXRlID0gJmNvbm4tPnByb3h5X250bG1fc3RhdGU7CiAgICAgYXV0aHAgPSAmY29ubi0+ZGF0YS0+c3RhdGUuYXV0aHByb3h5OwogICB9CiAgIGVsc2UgewogICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOwogICAgIHVzZXJwID0gY29ubi0+dXNlcjsKKyAgICBudGxtID0gJmNvbm4tPm50bG07CiAgICAgc3RhdGUgPSAmY29ubi0+aHR0cF9udGxtX3N0YXRlOwogICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhob3N0OwogICB9CkBAIC00MzIsMzggKzQ0MiwzNiBAQAogICAgICAqIHJlcXVlc3QgaGFuZGxpbmcgcHJvY2Vzcy4KICAgICAgKi8KICAgICAvKiBDcmVhdGUgY29tbXVuaWNhdGlvbiB3aXRoIG50bG1fYXV0aCAqLwotICAgIHJlcyA9IG50bG1fd2JfaW5pdChjb25uLCB1c2VycCk7CisgICAgcmVzID0gbnRsbV93Yl9pbml0KGNvbm4tPmRhdGEsIG50bG0sIHVzZXJwKTsKICAgICBpZihyZXMpCiAgICAgICByZXR1cm4gcmVzOwotICAgIHJlcyA9IG50bG1fd2JfcmVzcG9uc2UoY29ubiwgIllSXG4iLCAqc3RhdGUpOworICAgIHJlcyA9IG50bG1fd2JfcmVzcG9uc2UoY29ubi0+ZGF0YSwgbnRsbSwgIllSXG4iLCAqc3RhdGUpOwogICAgIGlmKHJlcykKICAgICAgIHJldHVybiByZXM7CiAKICAgICBmcmVlKCphbGxvY3VzZXJwd2QpOwotICAgICphbGxvY3VzZXJwd2QgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246ICVzXHJcbiIsCisgICAgKmFsbG9jdXNlcnB3ZCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogTlRMTSAlc1xyXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID8gIlByb3h5LSIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bG0tPnJlc3BvbnNlKTsKICAgICBERUJVR19PVVQoZnByaW50ZihzdGRlcnIsICIqKioqIEhlYWRlciAlc1xuICIsICphbGxvY3VzZXJwd2QpKTsKLSAgICBmcmVlKGNvbm4tPnJlc3BvbnNlX2hlYWRlcik7CisgICAgQ3VybF9zYWZlZnJlZShudGxtLT5yZXNwb25zZSk7CiAgICAgaWYoISphbGxvY3VzZXJwd2QpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIgPSBOVUxMOwogICAgIGJyZWFrOwogCi0gIGNhc2UgTlRMTVNUQVRFX1RZUEUyOgotICAgIGlucHV0ID0gYXByaW50ZigiVFQgJXNcbiIsIGNvbm4tPmNoYWxsZW5nZV9oZWFkZXIpOworICBjYXNlIE5UTE1TVEFURV9UWVBFMjogeworICAgIGNoYXIgKmlucHV0ID0gYXByaW50ZigiVFQgJXNcbiIsIG50bG0tPmNoYWxsZW5nZSk7CiAgICAgaWYoIWlucHV0KQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLCBpbnB1dCwgKnN0YXRlKTsKKyAgICByZXMgPSBudGxtX3diX3Jlc3BvbnNlKGNvbm4tPmRhdGEsIG50bG0sIGlucHV0LCAqc3RhdGUpOwogICAgIGZyZWUoaW5wdXQpOwotICAgIGlucHV0ID0gTlVMTDsKICAgICBpZihyZXMpCiAgICAgICByZXR1cm4gcmVzOwogCiAgICAgZnJlZSgqYWxsb2N1c2VycHdkKTsKLSAgICAqYWxsb2N1c2VycHdkID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiAlc1xyXG4iLAorICAgICphbGxvY3VzZXJwd2QgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246IE5UTE0gJXNcclxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eSA/ICJQcm94eS0iIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudGxtLT5yZXNwb25zZSk7CiAgICAgREVCVUdfT1VUKGZwcmludGYoc3RkZXJyLCAiKioqKiAlc1xuICIsICphbGxvY3VzZXJwd2QpKTsKICAgICAqc3RhdGUgPSBOVExNU1RBVEVfVFlQRTM7IC8qIHdlIHNlbnQgYSB0eXBlLTMgKi8KICAgICBhdXRocC0+ZG9uZSA9IFRSVUU7CkBAIC00NzEsNyArNDc5LDcgQEAKICAgICBpZighKmFsbG9jdXNlcnB3ZCkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIGJyZWFrOwotCisgIH0KICAgY2FzZSBOVExNU1RBVEVfVFlQRTM6CiAgICAgLyogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQsCiAgICAgICogZG9uJ3Qgc2VuZCBhIGhlYWRlciBpbiBmdXR1cmUgcmVxdWVzdHMgKi8KQEAgLTQ4Niw0ICs0OTQsMTAgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCit2b2lkIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbnRsbV93YihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIG50bG1fd2JfY2xlYW51cCgmY29ubi0+bnRsbSk7CisgIG50bG1fd2JfY2xlYW51cCgmY29ubi0+cHJveHludGxtKTsKK30KKwogI2VuZGlmIC8qICFDVVJMX0RJU0FCTEVfSFRUUCAmJiBVU0VfTlRMTSAmJiBOVExNX1dCX0VOQUJMRUQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcGF0aC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9wYXRoLmMKaW5kZXggODVkZGRjZS4uZjQyOTYzNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9wYXRoLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9wYXRoLmMKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAgICAgaWYoKHdvcmtpbmdfcGF0aF9sZW4gPiAzKSAmJiAoIW1lbWNtcCh3b3JraW5nX3BhdGgsICIvfi8iLCAzKSkpCiAgICAgICAvKiBJdCBpcyByZWZlcmVuY2VkIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgc28gc3RyaXAgdGhlIGxlYWRpbmcgJy9+LycgKi8KLSAgICAgIG1lbWNweShyZWFsX3BhdGgsIHdvcmtpbmdfcGF0aCArIDMsIDQgKyB3b3JraW5nX3BhdGhfbGVuLTMpOworICAgICAgbWVtY3B5KHJlYWxfcGF0aCwgd29ya2luZ19wYXRoICsgMywgd29ya2luZ19wYXRoX2xlbiAtIDIpOwogICAgIGVsc2UKICAgICAgIG1lbWNweShyZWFsX3BhdGgsIHdvcmtpbmdfcGF0aCwgMSArIHdvcmtpbmdfcGF0aF9sZW4pOwogICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3J0bXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCmluZGV4IDE2YjFkZTEuLmRmOGYyYjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCkBAIC0xOTksMTMgKzE5OSwxMyBAQAogICAgIFJUTVBfRnJlZShyKTsKICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgfQotICBjb25uLT5wcm90by5nZW5lcmljID0gcjsKKyAgY29ubi0+cHJvdG8ucnRtcCA9IHI7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAogc3RhdGljIENVUkxjb2RlIHJ0bXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBSVE1QICpyID0gY29ubi0+cHJvdG8ucnRtcDsKICAgU0VUX1JDVlRJTUVPKHR2LCAxMCk7CiAKICAgci0+bV9zYi5zYl9zb2NrZXQgPSAoaW50KWNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwpAQCAtMjQwLDcgKzI0MCw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAKICAgaWYoIVJUTVBfQ29ubmVjdFN0cmVhbShyLCAwKSkKICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CkBAIC0yNjgsMTAgKzI2OCwxMCBAQAogc3RhdGljIENVUkxjb2RlIHJ0bXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKICAgaWYocikgewotICAgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBOVUxMOworICAgIGNvbm4tPnByb3RvLnJ0bXAgPSBOVUxMOwogICAgIFJUTVBfQ2xvc2Uocik7CiAgICAgUlRNUF9GcmVlKHIpOwogICB9CkBAIC0yODEsNyArMjgxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJ0bXBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAgIHNzaXplX3QgbnJlYWQ7CiAKICAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KQEAgLTMwMiw3ICszMDIsNyBAQAogc3RhdGljIHNzaXplX3QgcnRtcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7Ci0gIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBSVE1QICpyID0gY29ubi0+cHJvdG8ucnRtcDsKICAgc3NpemVfdCBudW07CiAKICAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKaW5kZXggMzMwNmUyMi4uODZhMDEzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb3dhcmQgQ2h1LCA8aHljQGhpZ2hsYW5kc3VuLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTksIEhvd2FyZCBDaHUsIDxoeWNAaGlnaGxhbmRzdW4uY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3Nhc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCmluZGV4IDAxOGU0MjIuLjhjMWM4NjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNzIsNiArMjcyLDcgQEAKICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVJWSUNFX05BTUVdIDoKICAgICBzYXNsLT5wYXJhbXMtPnNlcnZpY2U7CiAjZW5kaWYKKyAgY29uc3QgY2hhciAqb2F1dGhfYmVhcmVyID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXTsKIAogICBzYXNsLT5mb3JjZV9pciA9IGZvcmNlX2lyOyAgICAvKiBMYXRjaCBmb3IgZnV0dXJlIHVzZSAqLwogICBzYXNsLT5hdXRodXNlZCA9IDA7ICAgICAgICAgICAvKiBObyBtZWNoYW5pc20gdXNlZCB5ZXQgKi8KQEAgLTM0MSw3ICszNDIsNyBAQAogICAgICAgfQogICAgIGVsc2UKICNlbmRpZgotICAgIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfT0FVVEhCRUFSRVIpICYmIGNvbm4tPm9hdXRoX2JlYXJlcikgeworICAgIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfT0FVVEhCRUFSRVIpICYmIG9hdXRoX2JlYXJlcikgewogICAgICAgbWVjaCA9IFNBU0xfTUVDSF9TVFJJTkdfT0FVVEhCRUFSRVI7CiAgICAgICBzdGF0ZTEgPSBTQVNMX09BVVRIMjsKICAgICAgIHN0YXRlMiA9IFNBU0xfT0FVVEgyX1JFU1A7CkBAIC0zNTEsMTcgKzM1MiwxNyBAQAogICAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX29hdXRoX2JlYXJlcl9tZXNzYWdlKGRhdGEsIGNvbm4tPnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5vYXV0aF9iZWFyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhfYmVhcmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwLCAmbGVuKTsKICAgICB9Ci0gICAgZWxzZSBpZigoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX1hPQVVUSDIpICYmIGNvbm4tPm9hdXRoX2JlYXJlcikgeworICAgIGVsc2UgaWYoKGVuYWJsZWRtZWNocyAmIFNBU0xfTUVDSF9YT0FVVEgyKSAmJiBvYXV0aF9iZWFyZXIpIHsKICAgICAgIG1lY2ggPSBTQVNMX01FQ0hfU1RSSU5HX1hPQVVUSDI7CiAgICAgICBzdGF0ZTEgPSBTQVNMX09BVVRIMjsKICAgICAgIHNhc2wtPmF1dGh1c2VkID0gU0FTTF9NRUNIX1hPQVVUSDI7CiAKICAgICAgIGlmKGZvcmNlX2lyIHx8IGRhdGEtPnNldC5zYXNsX2lyKQogICAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3hvYXV0aF9iZWFyZXJfbWVzc2FnZShkYXRhLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5vYXV0aF9iZWFyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9hdXRoX2JlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3AsICZsZW4pOwogICAgIH0KICAgICBlbHNlIGlmKGVuYWJsZWRtZWNocyAmIFNBU0xfTUVDSF9QTEFJTikgewpAQCAtMzcwLDggKzM3MSw5IEBACiAgICAgICBzYXNsLT5hdXRodXNlZCA9IFNBU0xfTUVDSF9QTEFJTjsKIAogICAgICAgaWYoZm9yY2VfaXIgfHwgZGF0YS0+c2V0LnNhc2xfaXIpCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfcGxhaW5fbWVzc2FnZShkYXRhLCBOVUxMLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cGFzc3dkLCAmcmVzcCwgJmxlbik7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfcGxhaW5fbWVzc2FnZShkYXRhLCBjb25uLT5zYXNsX2F1dGh6aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT51c2VyLCBjb25uLT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgfQogICAgIGVsc2UgaWYoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX0xPR0lOKSB7CiAgICAgICBtZWNoID0gU0FTTF9NRUNIX1NUUklOR19MT0dJTjsKQEAgLTQzMCw2ICs0MzIsNyBAQAogICBjaGFyICpzZXJ2ZXJkYXRhOwogI2VuZGlmCiAgIHNpemVfdCBsZW4gPSAwOworICBjb25zdCBjaGFyICpvYXV0aF9iZWFyZXIgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdOwogCiAgICpwcm9ncmVzcyA9IFNBU0xfSU5QUk9HUkVTUzsKIApAQCAtNDUzLDggKzQ1Niw5IEBACiAgICAgKnByb2dyZXNzID0gU0FTTF9ET05FOwogICAgIHJldHVybiByZXN1bHQ7CiAgIGNhc2UgU0FTTF9QTEFJTjoKLSAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgTlVMTCwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cGFzc3dkLCAmcmVzcCwgJmxlbik7CisgICAgcmVzdWx0ID0gQ3VybF9hdXRoX2NyZWF0ZV9wbGFpbl9tZXNzYWdlKGRhdGEsIGNvbm4tPnNhc2xfYXV0aHppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwgY29ubi0+cGFzc3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgU0FTTF9MT0dJTjoKICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX2xvZ2luX21lc3NhZ2UoZGF0YSwgY29ubi0+dXNlciwgJnJlc3AsICZsZW4pOwpAQCAtNTU2LDcgKzU2MCw3IEBACiAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX29hdXRoX2JlYXJlcl9tZXNzYWdlKGRhdGEsIGNvbm4tPnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5vYXV0aF9iZWFyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9hdXRoX2JlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3AsICZsZW4pOwogCiAgICAgICAvKiBGYWlsdXJlcyBtYXliZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgYXMgY29udGludWF0aW9ucyBmb3IgT0FVVEhCRUFSRVIgKi8KQEAgLTU2NCw3ICs1NjgsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3hvYXV0aF9iZWFyZXJfbWVzc2FnZShkYXRhLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+b2F1dGhfYmVhcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhfYmVhcmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3AsICZsZW4pOwogICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwLmgKaW5kZXggZWZiYTVkZC4uZWNkNmFmYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zZXR1cC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXAuaApAQCAtMjcsNiArMjcsMTQgQEAKICNlbmRpZgogCiAvKgorICogRGlzYWJsZSBWaXN1YWwgU3R1ZGlvIHdhcm5pbmdzOgorICogNDEyNyAiY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudCIKKyAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MTI3KQorI2VuZGlmCisKKy8qCiAgKiBEZWZpbmUgV0lOMzIgd2hlbiBidWlsZCB0YXJnZXQgaXMgV2luMzIgQVBJCiAgKi8KIApAQCAtOTYsNiArMTA0LDEwIEBACiAjICBpbmNsdWRlICJjb25maWctdnh3b3Jrcy5oIgogI2VuZGlmCiAKKyNpZmRlZiBfX1BMQU45X18KKyMgIGluY2x1ZGUgImNvbmZpZy1wbGFuOS5oIgorI2VuZGlmCisKICNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtNDk3LDcgKzUwOSw2IEBACiAjaWZkZWYgV0lOMzIKIAogIyAgZGVmaW5lIERJUl9DSEFSICAgICAgIlxcIgotIyAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCiAKICNlbHNlIC8qIFdJTjMyICovCiAKQEAgLTUyMywxNCArNTM0LDYgQEAKICMgIGVuZGlmCiAKICMgIGRlZmluZSBESVJfQ0hBUiAgICAgICIvIgotIyAgaWZuZGVmIERPVF9DSEFSCi0jICAgIGRlZmluZSBET1RfQ0hBUiAgICAgICIuIgotIyAgZW5kaWYKLQotIyAgaWZkZWYgTVNET1MKLSMgICAgdW5kZWYgRE9UX0NIQVIKLSMgICAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCi0jICBlbmRpZgogCiAjICBpZm5kZWYgZmlsZW5vIC8qIHN1bm9zIDQgaGF2ZSB0aGlzIGFzIGEgbWFjcm8hICovCiAgICAgIGludCBmaWxlbm8oRklMRSAqc3RyZWFtKTsKQEAgLTU4Myw2ICs1ODYsMTIgQEAKICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSBDVVJMUkVTXyogZGVmaW5pdGlvbnMuCiAgKi8KIAorI2lmIGRlZmluZWQoRU5BQkxFX0lQVjYpICYmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykKKyMgIGRlZmluZSBDVVJMUkVTX0lQVjYKKyNlbHNlCisjICBkZWZpbmUgQ1VSTFJFU19JUFY0CisjZW5kaWYKKwogI2lmZGVmIFVTRV9BUkVTCiAjICBkZWZpbmUgQ1VSTFJFU19BU1lOQ0gKICMgIGRlZmluZSBDVVJMUkVTX0FSRVMKQEAgLTU5NywxMiArNjA2LDYgQEAKICMgIGRlZmluZSBDVVJMUkVTX1NZTkNICiAjZW5kaWYKIAotI2lmZGVmIEVOQUJMRV9JUFY2Ci0jICBkZWZpbmUgQ1VSTFJFU19JUFY2Ci0jZWxzZQotIyAgZGVmaW5lIENVUkxSRVNfSVBWNAotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKQEAgLTY2Miw5ICs2NjUsMTAgQEAKICNkZWZpbmUgTElCSUROX1JFUVVJUkVEX1ZFUlNJT04gIjAuNC4xIgogCiAjaWYgZGVmaW5lZChVU0VfR05VVExTKSB8fCBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTUJFRFRMUykgfHwgXAotICAgIGRlZmluZWQoVVNFX0NZQVNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9NRVNBTElOSykKKyAgICBkZWZpbmVkKFVTRV9NQkVEVExTKSB8fCBcCisgICAgZGVmaW5lZChVU0VfV09MRlNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKKyAgICBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9NRVNBTElOSykgfHwgXAorICAgIGRlZmluZWQoVVNFX0JFQVJTU0wpCiAjZGVmaW5lIFVTRV9TU0wgICAgLyogU1NMIHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZCAqLwogI2VuZGlmCiAKQEAgLTczMyw3ICs3MzcsNyBAQAogICovCiAKICNpZm5kZWYgQ3VybF9ub3Bfc3RtdAotIyAgZGVmaW5lIEN1cmxfbm9wX3N0bXQgZG8geyB9IFdISUxFX0ZBTFNFCisjICBkZWZpbmUgQ3VybF9ub3Bfc3RtdCBkbyB7IH0gd2hpbGUoMCkKICNlbmRpZgogCiAvKgpAQCAtODQyLDQgKzg0Niw4IEBACiAjZGVmaW5lIFVOSVRURVNUIHN0YXRpYwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFVTRV9OR1RDUDIpIHx8IGRlZmluZWQoVVNFX1FVSUNIRSkKKyNkZWZpbmUgRU5BQkxFX1FVSUMKKyNlbmRpZgorCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zZXR1cF9vbmNlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwX29uY2UuaAppbmRleCA0MTNjY2VhLi44ODkwZjM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwX29uY2UuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwX29uY2UuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzMwLDI3ICszMzAsNiBAQAogI2luY2x1ZGUgImN1cmxfY3R5cGUuaCIKIAogLyoKLSAqIE1hY3JvIFdISUxFX0ZBTFNFIG1heSBiZSB1c2VkIHRvIGJ1aWxkIHNpbmdsZS1pdGVyYXRpb24gZG8td2hpbGUgbG9vcHMsCi0gKiBhdm9pZGluZyBjb21waWxlciB3YXJuaW5ncy4gTW9zdGx5IGludGVuZGVkIGZvciBvdGhlciBtYWNybyBkZWZpbml0aW9ucy4KLSAqLwotCi0jZGVmaW5lIFdISUxFX0ZBTFNFICB3aGlsZSgwKQotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19QT0NDX18pCi0jICB1bmRlZiBXSElMRV9GQUxTRQotIyAgaWYgKF9NU0NfVkVSIDwgMTUwMCkKLSMgICAgZGVmaW5lIFdISUxFX0ZBTFNFICB3aGlsZSgxLCAwKQotIyAgZWxzZQotIyAgICBkZWZpbmUgV0hJTEVfRkFMU0UgXAotX19wcmFnbWEod2FybmluZyhwdXNoKSkgXAotX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjQxMjcpKSBcCi13aGlsZSgwKSBcCi1fX3ByYWdtYSh3YXJuaW5nKHBvcCkpCi0jICBlbmRpZgotI2VuZGlmCi0KLQotLyoKICAqIFR5cGVkZWYgdG8gJ2ludCcgaWYgc2lnX2F0b21pY190IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZS4KICAqLwogCkBAIC0zODcsNyArMzY2LDcgQEAKICNpZmRlZiBERUJVR0JVSUxECiAjZGVmaW5lIERFQlVHRih4KSB4CiAjZWxzZQotI2RlZmluZSBERUJVR0YoeCkgZG8geyB9IFdISUxFX0ZBTFNFCisjZGVmaW5lIERFQlVHRih4KSBkbyB7IH0gd2hpbGUoMCkKICNlbmRpZgogCiAKQEAgLTM5NSwxMCArMzc0LDExIEBACiAgKiBNYWNybyB1c2VkIHRvIGluY2x1ZGUgYXNzZXJ0aW9uIGNvZGUgb25seSBpbiBkZWJ1ZyBidWlsZHMuCiAgKi8KIAorI3VuZGVmIERFQlVHQVNTRVJUCiAjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiBkZWZpbmVkKEhBVkVfQVNTRVJUX0gpCiAjZGVmaW5lIERFQlVHQVNTRVJUKHgpIGFzc2VydCh4KQogI2Vsc2UKLSNkZWZpbmUgREVCVUdBU1NFUlQoeCkgZG8geyB9IFdISUxFX0ZBTFNFCisjZGVmaW5lIERFQlVHQVNTRVJUKHgpIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zaGEyNTYuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2hhMjU2LmgKaW5kZXggNmRiNGIwNC4uMzVkMjg2YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zaGEyNTYuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NoYTI1Ni5oCkBAIC03LDcgKzcsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIEZsb3JpbiBQZXRyaXVjLCA8cGV0cml1Yy5mbG9yaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBGbG9yaW4gUGV0cml1YywgPHBldHJpdWMuZmxvcmluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxOCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDggKzI1LDEwIEBACiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICiAKLXZvaWQgQ3VybF9zaGEyNTZpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQpOworI2RlZmluZSBTSEEyNTZfRElHRVNUX0xFTkdUSCAzMgorCit2b2lkIEN1cmxfc2hhMjU2aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc3NwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmMKaW5kZXggMWQwZGU0ZS4uZjdjYzEwZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc3NwaS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmgKaW5kZXggMmJiZjk0Ny4uYzA5MDI2ZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfdGhyZWFkcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmMKaW5kZXggOGU1OTM3YS4uMDY0YzA3NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfdGhyZWFkcy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmgKaW5kZXggMmE5MzY0NC4uNjVkMWE3OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuaAppbmRleCAxMmMwZjMzLi4zOGE1NWFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZGljdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvaC5jCmluZGV4IDZkMWYzMzAuLmFhYThmMTUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvaC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvaC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxOCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03NCwxNyArNzQsNTAgQEAKICNkZWZpbmUgVU5JVFRFU1Qgc3RhdGljCiAjZW5kaWYKIAorLyogQHVuaXR0ZXN0IDE2NTUKKyAqLwogVU5JVFRFU1QgRE9IY29kZSBkb2hfZW5jb2RlKGNvbnN0IGNoYXIgKmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE5TdHlwZSBkbnN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRuc3AsIC8qIGJ1ZmZlciAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAvKiBidWZmZXIgc2l6ZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbikgLyogb3V0cHV0IGxlbmd0aCAqLwogewotICBzaXplX3QgaG9zdGxlbiA9IHN0cmxlbihob3N0KTsKKyAgY29uc3Qgc2l6ZV90IGhvc3RsZW4gPSBzdHJsZW4oaG9zdCk7CiAgIHVuc2lnbmVkIGNoYXIgKm9yaWcgPSBkbnNwOwogICBjb25zdCBjaGFyICpob3N0cCA9IGhvc3Q7CiAKLSAgaWYobGVuIDwgKDEyICsgaG9zdGxlbiArIDQpKQorICAvKiBUaGUgZXhwZWN0ZWQgb3V0cHV0IGxlbmd0aCBpcyAxNiBieXRlcyBtb3JlIHRoYW4gdGhlIGxlbmd0aCBvZgorICAgKiB0aGUgUU5BTUUtZW5jb2Rpbmcgb2YgdGhlIGhvc3QgbmFtZS4KKyAgICoKKyAgICogQSB2YWxpZCBETlMgbmFtZSBtYXkgbm90IGNvbnRhaW4gYSB6ZXJvLWxlbmd0aCBsYWJlbCwgZXhjZXB0IGF0CisgICAqIHRoZSBlbmQuICBGb3IgdGhpcyByZWFzb24sIGEgbmFtZSBiZWdpbm5pbmcgd2l0aCBhIGRvdCwgb3IKKyAgICogY29udGFpbmluZyBhIHNlcXVlbmNlIG9mIHR3byBvciBtb3JlIGNvbnNlY3V0aXZlIGRvdHMsIGlzIGludmFsaWQKKyAgICogYW5kIGNhbm5vdCBiZSBlbmNvZGVkIGFzIGEgUU5BTUUuCisgICAqCisgICAqIElmIHRoZSBob3N0IG5hbWUgZW5kcyB3aXRoIGEgdHJhaWxpbmcgZG90LCB0aGUgY29ycmVzcG9uZGluZworICAgKiBRTkFNRS1lbmNvZGluZyBpcyBvbmUgYnl0ZSBsb25nZXIgdGhhbiB0aGUgaG9zdCBuYW1lLiBJZiAoYXMgaXMKKyAgICogYWxzbyB2YWxpZCkgdGhlIGhvc3RuYW1lIGlzIHNob3J0ZW5lZCBieSB0aGUgb21pc3Npb24gb2YgdGhlCisgICAqIHRyYWlsaW5nIGRvdCwgdGhlbiBpdHMgUU5BTUUtZW5jb2Rpbmcgd2lsbCBiZSB0d28gYnl0ZXMgbG9uZ2VyCisgICAqIHRoYW4gdGhlIGhvc3QgbmFtZS4KKyAgICoKKyAgICogRWFjaCBbIGxhYmVsLCBkb3QgXSBwYWlyIGlzIGVuY29kZWQgYXMgWyBsZW5ndGgsIGxhYmVsIF0sCisgICAqIHByZXNlcnZpbmcgb3ZlcmFsbCBsZW5ndGguICBBIGZpbmFsIFsgbGFiZWwgXSB3aXRob3V0IGEgZG90IGlzCisgICAqIGFsc28gZW5jb2RlZCBhcyBbIGxlbmd0aCwgbGFiZWwgXSwgaW5jcmVhc2luZyBvdmVyYWxsIGxlbmd0aAorICAgKiBieSBvbmUuIFRoZSBlbmNvZGluZyBpcyBjb21wbGV0ZWQgYnkgYXBwZW5kaW5nIGEgemVybyBieXRlLAorICAgKiByZXByZXNlbnRpbmcgdGhlIHplcm8tbGVuZ3RoIHJvb3QgbGFiZWwsIGFnYWluIGluY3JlYXNpbmcKKyAgICogdGhlIG92ZXJhbGwgbGVuZ3RoIGJ5IG9uZS4KKyAgICovCisKKyAgc2l6ZV90IGV4cGVjdGVkX2xlbjsKKyAgREVCVUdBU1NFUlQoaG9zdGxlbik7CisgIGV4cGVjdGVkX2xlbiA9IDEyICsgMSArIGhvc3RsZW4gKyA0OworICBpZihob3N0W2hvc3RsZW4tMV0hPScuJykKKyAgICBleHBlY3RlZF9sZW4rKzsKKworICBpZihleHBlY3RlZF9sZW4gPiAoMjU2ICsgMTYpKSAvKiBSRkNzIDEwMzQsIDEwMzUgKi8KKyAgICByZXR1cm4gRE9IX0ROU19OQU1FX1RPT19MT05HOworCisgIGlmKGxlbiA8IGV4cGVjdGVkX2xlbikKICAgICByZXR1cm4gRE9IX1RPT19TTUFMTF9CVUZGRVI7CiAKICAgKmRuc3ArKyA9IDA7IC8qIDE2IGJpdCBpZCAqLwpAQCAtMTAwLDM4ICsxMzMsNDMgQEAKICAgKmRuc3ArKyA9ICdcMCc7CiAgICpkbnNwKysgPSAnXDAnOyAvKiBBUkNPVU5UICovCiAKLSAgLyogc3RvcmUgYSBRTkFNRSAqLwotICBkbyB7Ci0gICAgY2hhciAqZG90ID0gc3RyY2hyKGhvc3RwLCAnLicpOworICAvKiBlbmNvZGUgZWFjaCBsYWJlbCBhbmQgc3RvcmUgaXQgaW4gdGhlIFFOQU1FICovCisgIHdoaWxlKCpob3N0cCkgewogICAgIHNpemVfdCBsYWJlbGxlbjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgaWYoZG90KSB7Ci0gICAgICBmb3VuZCA9IHRydWU7CisgICAgY2hhciAqZG90ID0gc3RyY2hyKGhvc3RwLCAnLicpOworICAgIGlmKGRvdCkKICAgICAgIGxhYmVsbGVuID0gZG90IC0gaG9zdHA7Ci0gICAgfQogICAgIGVsc2UKICAgICAgIGxhYmVsbGVuID0gc3RybGVuKGhvc3RwKTsKLSAgICBpZihsYWJlbGxlbiA+IDYzKSB7Ci0gICAgICAvKiB0b28gbG9uZyBsYWJlbCwgZXJyb3Igb3V0ICovCisgICAgaWYoKGxhYmVsbGVuID4gNjMpIHx8ICghbGFiZWxsZW4pKSB7CisgICAgICAvKiBsYWJlbCBpcyB0b28gbG9uZyBvciB0b28gc2hvcnQsIGVycm9yIG91dCAqLwogICAgICAgKm9sZW4gPSAwOwogICAgICAgcmV0dXJuIERPSF9ETlNfQkFEX0xBQkVMOwogICAgIH0KKyAgICAvKiBsYWJlbCBpcyBub24tZW1wdHksIHByb2Nlc3MgaXQgKi8KICAgICAqZG5zcCsrID0gKHVuc2lnbmVkIGNoYXIpbGFiZWxsZW47CiAgICAgbWVtY3B5KGRuc3AsIGhvc3RwLCBsYWJlbGxlbik7CiAgICAgZG5zcCArPSBsYWJlbGxlbjsKLSAgICBob3N0cCArPSBsYWJlbGxlbiArIDE7Ci0gICAgaWYoIWZvdW5kKSB7Ci0gICAgICAqZG5zcCsrID0gMDsgLyogdGVybWluYXRpbmcgemVybyAqLwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9IHdoaWxlKDEpOworICAgIGhvc3RwICs9IGxhYmVsbGVuOworICAgIC8qIGFkdmFuY2UgcGFzdCBkb3QsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG9uZSAqLworICAgIGlmKGRvdCkKKyAgICAgIGhvc3RwKys7CisgIH0gLyogbmV4dCBsYWJlbCAqLwogCi0gICpkbnNwKysgPSAnXDAnOyAvKiB1cHBlciA4IGJpdCBUWVBFICovCi0gICpkbnNwKysgPSAodW5zaWduZWQgY2hhcilkbnN0eXBlOworICAqZG5zcCsrID0gMDsgLyogYXBwZW5kIHplcm8tbGVuZ3RoIGxhYmVsIGZvciByb290ICovCisKKyAgLyogVGhlcmUgYXJlIGFzc2lnbmVkIFRZUEUgY29kZXMgYmV5b25kIDI1NTogdXNlIHJhbmdlIFsxLi42NTUzNV0gICovCisgICpkbnNwKysgPSAodW5zaWduZWQgY2hhcikoMjU1ICYgKGRuc3R5cGU+PjgpKTsgLyogdXBwZXIgOCBiaXQgVFlQRSAqLworICAqZG5zcCsrID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAmIGRuc3R5cGUpOyAgICAgIC8qIGxvd2VyIDggYml0IFRZUEUgKi8KKwogICAqZG5zcCsrID0gJ1wwJzsgLyogdXBwZXIgOCBiaXQgQ0xBU1MgKi8KICAgKmRuc3ArKyA9IEROU19DTEFTU19JTjsgLyogSU4gLSAidGhlIEludGVybmV0IiAqLwogCiAgICpvbGVuID0gZG5zcCAtIG9yaWc7CisKKyAgLyogdmVyaWZ5IHRoYXQgb3VyIGVzdGltYXRpb24gb2YgbGVuZ3RoIGlzIHZhbGlkLCBzaW5jZQorICAgKiB0aGlzIGhhcyBsZWQgdG8gYnVmZmVyIG92ZXJmbG93cyBpbiB0aGlzIGZ1bmN0aW9uICovCisgIERFQlVHQVNTRVJUKCpvbGVuID09IGV4cGVjdGVkX2xlbik7CiAgIHJldHVybiBET0hfT0s7CiB9CiAKQEAgLTE4MCw3ICsyMTgsNyBAQAogICByZXN1bHQgPSBjdXJsX2Vhc3lfc2V0b3B0KGRvaCwgeCwgeSk7ICAgXAogICBpZihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGdvdG8gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBXSElMRV9GQUxTRQorfSB3aGlsZSgwKQogCiBzdGF0aWMgQ1VSTGNvZGUgZG9ocHJvYmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG5zcHJvYmUgKnAsIEROU3R5cGUgZG5zdHlwZSwKQEAgLTIyNSw3ICsyNjMsMTAgQEAKICAgfQogCiAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwotCisgIGlmKHRpbWVvdXRfbXMgPD0gMCkgeworICAgIHJlc3VsdCA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICBnb3RvIGVycm9yOworICB9CiAgIC8qIEN1cmxfb3BlbigpIGlzIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIGN1cmxfZWFzeV9pbml0KCkgKi8KICAgcmVzdWx0ID0gQ3VybF9vcGVuKCZkb2gpOwogICBpZighcmVzdWx0KSB7CkBAIC0yNDYsNiArMjg3LDkgQEAKICNpZm5kZWYgQ1VSTERFQlVHCiAgICAgLyogZW5mb3JjZSBIVFRQUyBpZiBub3QgZGVidWcgKi8KICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9UT0NPTFMsIENVUkxQUk9UT19IVFRQUyk7CisjZWxzZQorICAgIC8qIGluIGRlYnVnIG1vZGUsIGFsc28gYWxsb3cgaHR0cCAqLworICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1RPQ09MUywgQ1VSTFBST1RPX0hUVFB8Q1VSTFBST1RPX0hUVFBTKTsKICNlbmRpZgogICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1RJTUVPVVRfTVMsIChsb25nKXRpbWVvdXRfbXMpOwogICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQpAQCAtMjU5LDM4ICszMDMsNDIgQEAKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9GQUxTRVNUQVJULCAxTCk7CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeWhvc3QpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMkwpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBpZihkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyaWZ5aG9zdCkKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllIT1NULCAyTCk7Ci0gICAgaWYoZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeXBlZXIpCi0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMUwpOwogICAgIGlmKGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS52ZXJpZnlwZWVyKQogICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIsIDFMKTsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSkgeworICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfQ0FJTkZPLAorICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSk7CisgICAgfQorICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX1BST1hZXSkgeworICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfQ1JMRklMRSwKKyAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldKTsKKyAgICB9CisgICAgaWYoZGF0YS0+c2V0LnByb3h5X3NzbC5ub19yZXZva2UpCisgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUywgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOworICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKSB7CisgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsCisgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5cGVlcikKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAxTCk7CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeXN0YXR1cykKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9WRVJJRllTVEFUVVMsIDFMKTsKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX09SSUddKSB7CiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9DQUlORk8sCiAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR10pOwogICAgIH0KLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSkgewotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfQ0FJTkZPLAotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSk7Ci0gICAgfQogICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR10pIHsKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX0NBUEFUSCwKICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF9PUklHXSk7CiAgICAgfQotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKSB7Ci0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsCi0gICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKTsKLSAgICB9CiAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfT1JJR10pIHsKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX0NSTEZJTEUsCiAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddKTsKICAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldKSB7Ci0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLAotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9QUk9YWV0pOwotICAgIH0KICAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnRpbmZvKQogICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfQ0VSVElORk8sIDFMKTsKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdKSB7CkBAIC0zMDMsOCArMzUxLDYgQEAKICAgICB9CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5ub19yZXZva2UpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOwotICAgIGlmKGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlKQotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKICAgICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBkYXRhLT5zZXQuc3NsLmZzc2xjdHgpOwogICAgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eHApCkBAIC0zMjUsNyArMzcxLDcgQEAKIAogICBlcnJvcjoKICAgZnJlZShudXJsKTsKLSAgQ3VybF9jbG9zZShkb2gpOworICBDdXJsX2Nsb3NlKCZkb2gpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zNDEsNiArMzg3LDcgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBpbnQgc2xvdDsKICAgKndhaXRwID0gVFJVRTsgLyogdGhpcyBuZXZlciByZXR1cm5zIHN5bmNocm9ub3VzbHkgKi8KICAgKHZvaWQpY29ubjsKICAgKHZvaWQpaG9zdG5hbWU7CkBAIC0zNTksOCArNDA2LDggQEAKIAogICBpZihjb25uLT5pcF92ZXJzaW9uICE9IENVUkxfSVBSRVNPTFZFX1Y2KSB7CiAgICAgLyogY3JlYXRlIElQdjQgRE9IIHJlcXVlc3QgKi8KLSAgICByZXN1bHQgPSBkb2hwcm9iZShkYXRhLCAmZGF0YS0+cmVxLmRvaC5wcm9iZVswXSwgRE5TX1RZUEVfQSwKLSAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRE9IXSwKKyAgICByZXN1bHQgPSBkb2hwcm9iZShkYXRhLCAmZGF0YS0+cmVxLmRvaC5wcm9iZVtET0hfUFJPQkVfU0xPVF9JUEFERFJfVjRdLAorICAgICAgICAgICAgICAgICAgICAgIEROU19UWVBFX0EsIGhvc3RuYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ET0hdLAogICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm11bHRpLCBkYXRhLT5yZXEuZG9oLmhlYWRlcnMpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjksOCArNDE2LDggQEAKIAogICBpZihjb25uLT5pcF92ZXJzaW9uICE9IENVUkxfSVBSRVNPTFZFX1Y0KSB7CiAgICAgLyogY3JlYXRlIElQdjYgRE9IIHJlcXVlc3QgKi8KLSAgICByZXN1bHQgPSBkb2hwcm9iZShkYXRhLCAmZGF0YS0+cmVxLmRvaC5wcm9iZVsxXSwgRE5TX1RZUEVfQUFBQSwKLSAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRE9IXSwKKyAgICByZXN1bHQgPSBkb2hwcm9iZShkYXRhLCAmZGF0YS0+cmVxLmRvaC5wcm9iZVtET0hfUFJPQkVfU0xPVF9JUEFERFJfVjZdLAorICAgICAgICAgICAgICAgICAgICAgIEROU19UWVBFX0FBQUEsIGhvc3RuYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ET0hdLAogICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm11bHRpLCBkYXRhLT5yZXEuZG9oLmhlYWRlcnMpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zODEsMTAgKzQyOCw5IEBACiAgIGVycm9yOgogICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgIGRhdGEtPnJlcS5kb2guaGVhZGVycyA9IE5VTEw7Ci0gIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSk7Ci0gIGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSA9IE5VTEw7Ci0gIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSk7Ci0gIGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSA9IE5VTEw7CisgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgQ3VybF9jbG9zZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XS5lYXN5KTsKKyAgfQogICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDE5LDggKzQ2NSwxNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldDMyYml0KHVuc2lnbmVkIGNoYXIgKmRvaCwgaW50IGluZGV4KQogewotICByZXR1cm4gKGRvaFtpbmRleF0gPDwgMjQpIHwgKGRvaFtpbmRleCArIDFdIDw8IDE2KSB8Ci0gICAgKGRvaFtpbmRleCArIDJdIDw8IDgpIHwgZG9oW2luZGV4ICsgM107CisgICAvKiBtYWtlIGNsYW5nIGFuZCBnY2Mgb3B0aW1pemUgdGhpcyB0byBic3dhcCBieSBpbmNyZW1lbnRpbmcKKyAgICAgIHRoZSBwb2ludGVyIGZpcnN0LiAqLworICAgZG9oICs9IGluZGV4OworCisgICAvKiBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3VyIGJ5IGNhc3RpbmcgdG8gdW5zaWduZWQgYmVmb3JlIHNoaWZ0aW5nCisgICAgICAyNCBiaXRzLCBwb3NzaWJseSBpbnRvIHRoZSBzaWduIGJpdC4gY29kZWdlbiBpcyBzYW1lLCBidXQKKyAgICAgIHViIHNhbml0aXplciB3b24ndCBiZSB1cHNldCAqLworICByZXR1cm4gKCAodW5zaWduZWQpZG9oWzBdIDw8IDI0KSB8IChkb2hbMV0gPDwgMTYpIHwoZG9oWzJdIDw8IDgpIHwgZG9oWzNdOwogfQogCiBzdGF0aWMgRE9IY29kZSBzdG9yZV9hKHVuc2lnbmVkIGNoYXIgKmRvaCwgaW50IGluZGV4LCBzdHJ1Y3QgZG9oZW50cnkgKmQpCkBAIC00OTYsNyArNTQ4LDcgQEAKICAgICAgIGlmKChpbmRleCArIDEpID49IGRvaGxlbikKICAgICAgICAgcmV0dXJuIERPSF9ETlNfT1VUX09GX1JBTkdFOwogCi0gICAgICAvKiBtb3ZlIHRvIHRoZSB0aGUgbmV3IGluZGV4ICovCisgICAgICAvKiBtb3ZlIHRvIHRoZSBuZXcgaW5kZXggKi8KICAgICAgIG5ld3BvcyA9IChsZW5ndGggJiAweDNmKSA8PCA4IHwgZG9oW2luZGV4ICsgMV07CiAgICAgICBpbmRleCA9IG5ld3BvczsKICAgICAgIGNvbnRpbnVlOwpAQCAtNTYxLDYgKzYxMyw5IEBACiAgICAgaWYocmMpCiAgICAgICByZXR1cm4gcmM7CiAgICAgYnJlYWs7CisgIGNhc2UgRE5TX1RZUEVfRE5BTUU6CisgICAgLyogZXhwbGljaXQgZm9yIGNsYXJpdHk7IGp1c3Qgc2tpcDsgcmVseSBvbiBzeW50aGVzaXplZCBDTkFNRSAgKi8KKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICAvKiB1bnN1cHBvcnRlZCB0eXBlLCBqdXN0IHNraXAgaXQgKi8KICAgICBicmVhazsKQEAgLTYyMiw4ICs2NzcsMTAgQEAKICAgICAgIHJldHVybiBET0hfRE5TX09VVF9PRl9SQU5HRTsKIAogICAgIHR5cGUgPSBnZXQxNmJpdChkb2gsIGluZGV4KTsKLSAgICBpZigodHlwZSAhPSBETlNfVFlQRV9DTkFNRSkgJiYgKHR5cGUgIT0gZG5zdHlwZSkpCi0gICAgICAvKiBOb3QgdGhlIHNhbWUgdHlwZSBhcyB3YXMgYXNrZWQgZm9yIG5vciBDTkFNRSAqLworICAgIGlmKCh0eXBlICE9IEROU19UWVBFX0NOQU1FKSAgICAvKiBtYXkgYmUgc3ludGhlc2l6ZWQgZnJvbSBETkFNRSAqLworICAgICAgICYmICh0eXBlICE9IEROU19UWVBFX0ROQU1FKSAvKiBpZiBwcmVzZW50LCBhY2NlcHQgYW5kIGlnbm9yZSAqLworICAgICAgICYmICh0eXBlICE9IGRuc3R5cGUpKQorICAgICAgLyogTm90IHRoZSBzYW1lIHR5cGUgYXMgd2FzIGFza2VkIGZvciBub3IgQ05BTUUgbm9yIEROQU1FICovCiAgICAgICByZXR1cm4gRE9IX0ROU19VTkVYUEVDVEVEX1RZUEU7CiAgICAgaW5kZXggKz0gMjsKIApAQCAtODg0LDQ3ICs5NDEsNDMgQEAKIENVUkxjb2RlIEN1cmxfZG9oX2lzX3Jlc29sdmVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRuc3ApCiB7CisgIENVUkxjb2RlIHJlc3VsdDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgICpkbnNwID0gTlVMTDsgLyogZGVmYXVsdHMgdG8gbm8gcmVzcG9uc2UgKi8KIAotICBpZighZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5lYXN5ICYmICFkYXRhLT5yZXEuZG9oLnByb2JlWzFdLmVhc3kpIHsKKyAgaWYoIWRhdGEtPnJlcS5kb2gucHJvYmVbRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y0XS5lYXN5ICYmCisgICAgICFkYXRhLT5yZXEuZG9oLnByb2JlW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNl0uZWFzeSkgewogICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgRE9ILXJlc29sdmU6ICVzIiwgY29ubi0+YXN5bmMuaG9zdG5hbWUpOwogICAgIHJldHVybiBjb25uLT5iaXRzLnByb3h5P0NVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWToKICAgICAgIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICB9CiAgIGVsc2UgaWYoIWRhdGEtPnJlcS5kb2gucGVuZGluZykgewotICAgIERPSGNvZGUgcmM7Ci0gICAgRE9IY29kZSByYzI7CisgICAgRE9IY29kZSByY1tET0hfUFJPQkVfU0xPVFNdOwogICAgIHN0cnVjdCBkb2hlbnRyeSBkZTsKKyAgICBpbnQgc2xvdDsKICAgICAvKiByZW1vdmUgRE9IIGhhbmRsZXMgZnJvbSBtdWx0aSBoYW5kbGUgYW5kIGNsb3NlIHRoZW0gKi8KLSAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSk7Ci0gICAgQ3VybF9jbG9zZShkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmVhc3kpOwotICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShkYXRhLT5tdWx0aSwgZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5lYXN5KTsKLSAgICBDdXJsX2Nsb3NlKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSk7Ci0KKyAgICBmb3Ioc2xvdCA9IDA7IHNsb3QgPCBET0hfUFJPQkVfU0xPVFM7IHNsb3QrKykgeworICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGRhdGEtPm11bHRpLCBkYXRhLT5yZXEuZG9oLnByb2JlW3Nsb3RdLmVhc3kpOworICAgICAgQ3VybF9jbG9zZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XS5lYXN5KTsKKyAgICB9CiAgICAgLyogcGFyc2UgdGhlIHJlc3BvbnNlcywgY3JlYXRlIHRoZSBzdHJ1Y3QgYW5kIHJldHVybiBpdCEgKi8KICAgICBpbml0X2RvaGVudHJ5KCZkZSk7Ci0gICAgcmMgPSBkb2hfZGVjb2RlKGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uc2VydmVyZG9oLm1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2guc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5kbnN0eXBlLAotICAgICAgICAgICAgICAgICAgICAmZGUpOwotICAgIGZyZWUoZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2gubWVtb3J5KTsKLSAgICBpZihyYykgewotICAgICAgaW5mb2YoZGF0YSwgIkRPSDogJXMgdHlwZSAlcyBmb3IgJXNcbiIsIGRvaF9zdHJlcnJvcihyYyksCi0gICAgICAgICAgICB0eXBlMm5hbWUoZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5kbnN0eXBlKSwKLSAgICAgICAgICAgIGRhdGEtPnJlcS5kb2guaG9zdCk7Ci0gICAgfQotICAgIHJjMiA9IGRvaF9kZWNvZGUoZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5zZXJ2ZXJkb2gubWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5zZXJ2ZXJkb2guc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZG5zdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICZkZSk7Ci0gICAgZnJlZShkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaC5tZW1vcnkpOwotICAgIGlmKHJjMikgewotICAgICAgaW5mb2YoZGF0YSwgIkRPSDogJXMgdHlwZSAlcyBmb3IgJXNcbiIsIGRvaF9zdHJlcnJvcihyYzIpLAotICAgICAgICAgICAgdHlwZTJuYW1lKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZG5zdHlwZSksCi0gICAgICAgICAgICBkYXRhLT5yZXEuZG9oLmhvc3QpOwotICAgIH0KLSAgICBpZighcmMgfHwgIXJjMikgeworICAgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgICByY1tzbG90XSA9IGRvaF9kZWNvZGUoZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XS5zZXJ2ZXJkb2gubWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnJlcS5kb2gucHJvYmVbc2xvdF0uc2VydmVyZG9oLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XS5kbnN0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZSk7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnJlcS5kb2gucHJvYmVbc2xvdF0uc2VydmVyZG9oLm1lbW9yeSk7CisgICAgICBpZihyY1tzbG90XSkgeworICAgICAgICBpbmZvZihkYXRhLCAiRE9IOiAlcyB0eXBlICVzIGZvciAlc1xuIiwgZG9oX3N0cmVycm9yKHJjW3Nsb3RdKSwKKyAgICAgICAgICAgICAgdHlwZTJuYW1lKGRhdGEtPnJlcS5kb2gucHJvYmVbc2xvdF0uZG5zdHlwZSksCisgICAgICAgICAgICAgIGRhdGEtPnJlcS5kb2guaG9zdCk7CisgICAgICB9CisgICAgfSAvKiBuZXh0IHNsb3QgKi8KKworICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOyAvKiB1bnRpbCB3ZSBrbm93IGJldHRlciAqLworICAgIGlmKCFyY1tET0hfUFJPQkVfU0xPVF9JUEFERFJfVjRdIHx8ICFyY1tET0hfUFJPQkVfU0xPVF9JUEFERFJfVjZdKSB7CisgICAgICAvKiB3ZSBoYXZlIGFuIGFkZHJlc3MsIG9mIG9uZSBraW5kIG9yIG90aGVyICovCiAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuczsKICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaTsKIApAQCAtOTQ2LDIxICs5OTksMjYgQEAKICAgICAgIGlmKGRhdGEtPnNoYXJlKQogICAgICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9ETlMpOwogCi0gICAgICBkZV9jbGVhbnVwKCZkZSk7Ci0gICAgICBpZighZG5zKQorICAgICAgaWYoIWRucykgewogICAgICAgICAvKiByZXR1cm5lZCBmYWlsdXJlLCBiYWlsIG91dCBuaWNlbHkgKi8KICAgICAgICAgQ3VybF9mcmVlYWRkcmluZm8oYWkpOworICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGNvbm4tPmFzeW5jLmRucyA9IGRuczsKICAgICAgICAgKmRuc3AgPSBkbnM7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7ICAgICAgLyogYWRkcmVzcyByZXNvbHV0aW9uIE9LICovCiAgICAgICB9Ci0gICAgfQorICAgIH0gLyogYWRkcmVzcyBwcm9jZXNzaW5nIGRvbmUgKi8KKworICAgIC8qIE5vdyBwcm9jZXNzIGFueSBidWlsZC1zcGVjaWZpYyBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIEROUyAqLworCisgICAgLyogQWxsIGRvbmUgKi8KICAgICBkZV9jbGVhbnVwKCZkZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKLSAgfQorICB9IC8qICFkYXRhLT5yZXEuZG9oLnBlbmRpbmcgKi8KIAorICAvKiBlbHNlIHdhaXQgZm9yIHBlbmRpbmcgRE9IIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZSAqLwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvaC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmgKaW5kZXggMzRiZmE2Zi4uZmMwNTNlZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmgKQEAgLTQwLDggKzQwLDcgQEAKIENVUkxjb2RlIEN1cmxfZG9oX2lzX3Jlc29sdmVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRucyk7CiAKLWludCBDdXJsX2RvaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworaW50IEN1cmxfZG9oX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAKIHR5cGVkZWYgZW51bSB7CiAgIERPSF9PSywKQEAgLTU2LDE0ICs1NSwxNiBAQAogICBET0hfRE5TX1VORVhQRUNURURfVFlQRSwgIC8qIDkgKi8KICAgRE9IX0ROU19VTkVYUEVDVEVEX0NMQVNTLCAvKiAxMCAqLwogICBET0hfTk9fQ09OVEVOVCwgICAgICAgICAgIC8qIDExICovCi0gIERPSF9ETlNfQkFEX0lEICAgICAgICAgICAgLyogMTIgKi8KKyAgRE9IX0ROU19CQURfSUQsICAgICAgICAgICAvKiAxMiAqLworICBET0hfRE5TX05BTUVfVE9PX0xPTkcgICAgIC8qIDEzICovCiB9IERPSGNvZGU7CiAKIHR5cGVkZWYgZW51bSB7CiAgIEROU19UWVBFX0EgPSAxLAogICBETlNfVFlQRV9OUyA9IDIsCiAgIEROU19UWVBFX0NOQU1FID0gNSwKLSAgRE5TX1RZUEVfQUFBQSA9IDI4CisgIEROU19UWVBFX0FBQUEgPSAyOCwKKyAgRE5TX1RZUEVfRE5BTUUgPSAzOSAgICAgICAgICAgLyogUkZDNjY3MiAqLwogfSBETlN0eXBlOwogCiAjZGVmaW5lIERPSF9NQVhfQUREUiAyNApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG90ZG90LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYwppbmRleCAyYzYxNzdhLi5mZTRmNDk3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG90ZG90LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuaAppbmRleCAxMjVhZjQzLi5mNzBiMWRiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeS5jCmluZGV4IDRhNmY5NjUuLjFhNjkxMjcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Vhc3kuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDEwICs3MiwxMSBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInNpZ3BpcGUuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgogI2luY2x1ZGUgInNldG9wdC5oIgogI2luY2x1ZGUgImh0dHBfZGlnZXN0LmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCisjaW5jbHVkZSAiaHR0cDIuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCkBAIC0xNTcsMjAgKzE1OCwyMCBAQAogCiAgIGlmKCFDdXJsX3NzbF9pbml0KCkpIHsKICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ3VybF9zc2xfaW5pdCBmYWlsZWRcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBmYWlsOwogICB9CiAKICNpZmRlZiBXSU4zMgogICBpZihDdXJsX3dpbjMyX2luaXQoZmxhZ3MpKSB7CiAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHdpbjMyX2luaXQgZmFpbGVkXG4iKSk7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gZmFpbDsKICAgfQogI2VuZGlmCiAKICNpZmRlZiBfX0FNSUdBX18KICAgaWYoIUN1cmxfYW1pZ2FfaW5pdCgpKSB7CiAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEN1cmxfYW1pZ2FfaW5pdCBmYWlsZWRcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBmYWlsOwogICB9CiAjZW5kaWYKIApAQCAtMTgyLDMzICsxODMsMzEgQEAKIAogICBpZihDdXJsX3Jlc29sdmVyX2dsb2JhbF9pbml0KCkpIHsKICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogcmVzb2x2ZXJfZ2xvYmFsX2luaXQgZmFpbGVkXG4iKSk7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gZmFpbDsKICAgfQogCi0gICh2b2lkKUN1cmxfaXB2NndvcmtzKCk7Ci0KLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NIMl9JTklUKQotICBpZihsaWJzc2gyX2luaXQoMCkpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoMl9pbml0IGZhaWxlZFxuIikpOwotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyNpZiBkZWZpbmVkKFVTRV9TU0gpCisgIGlmKEN1cmxfc3NoX2luaXQoKSkgeworICAgIGdvdG8gZmFpbDsKICAgfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0gIGlmKHNzaF9pbml0KCkpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoX2luaXQgZmFpbGVkXG4iKSk7CisjaWZkZWYgVVNFX1dPTEZTU0gKKyAgaWYoV1NfU1VDQ0VTUyAhPSB3b2xmU1NIX0luaXQoKSkgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiB3b2xmU1NIX0luaXQgZmFpbGVkXG4iKSk7CiAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwogICB9CiAjZW5kaWYKIAotICBpZihmbGFncyAmIENVUkxfR0xPQkFMX0FDS19FSU5UUikKLSAgICBDdXJsX2Fja19laW50ciA9IDE7Ci0KICAgaW5pdF9mbGFncyA9IGZsYWdzOwogCiAgIEN1cmxfdmVyc2lvbl9pbml0KCk7CiAKICAgcmV0dXJuIENVUkxFX09LOworCisgIGZhaWw6CisgIGluaXRpYWxpemVkLS07IC8qIHVuZG8gdGhlIGluY3JlYXNlICovCisgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKIH0KIAogCkBAIC0yNzQsMTIgKzI3MywxMCBAQAogCiAgIEN1cmxfYW1pZ2FfY2xlYW51cCgpOwogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIMikgJiYgZGVmaW5lZChIQVZFX0xJQlNTSDJfRVhJVCkKLSAgKHZvaWQpbGlic3NoMl9leGl0KCk7Ci0jZW5kaWYKKyAgQ3VybF9zc2hfY2xlYW51cCgpOwogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIKQotICAodm9pZClzc2hfZmluYWxpemUoKTsKKyNpZmRlZiBVU0VfV09MRlNTSAorICAodm9pZCl3b2xmU1NIX0NsZWFudXAoKTsKICNlbmRpZgogCiAgIGluaXRfZmxhZ3MgID0gMDsKQEAgLTYwMiwyNyArNTk5LDExIEBACiAKICAgd2hpbGUoIWRvbmUgJiYgIW1jb2RlKSB7CiAgICAgaW50IHN0aWxsX3J1bm5pbmcgPSAwOwotICAgIGJvb2wgZ290c29ja2V0ID0gRkFMU0U7CiAKLSAgICBtY29kZSA9IEN1cmxfbXVsdGlfd2FpdChtdWx0aSwgTlVMTCwgMCwgMTAwMCwgTlVMTCwgJmdvdHNvY2tldCk7CisgICAgbWNvZGUgPSBjdXJsX211bHRpX3BvbGwobXVsdGksIE5VTEwsIDAsIDEwMDAsIE5VTEwpOwogCi0gICAgaWYoIW1jb2RlKSB7Ci0gICAgICBpZighZ290c29ja2V0KSB7Ci0gICAgICAgIGxvbmcgc2xlZXBfbXM7Ci0KLSAgICAgICAgLyogSWYgaXQgcmV0dXJucyB3aXRob3V0IGFueSBmaWxlZGVzY3JpcHRvciBpbnN0YW50bHksIHdlIG5lZWQgdG8KLSAgICAgICAgICAgYXZvaWQgYnVzeS1sb29waW5nIGR1cmluZyBwZXJpb2RzIHdoZXJlIGl0IGhhcyBub3RoaW5nIHBhcnRpY3VsYXIKLSAgICAgICAgICAgdG8gd2FpdCBmb3IgKi8KLSAgICAgICAgY3VybF9tdWx0aV90aW1lb3V0KG11bHRpLCAmc2xlZXBfbXMpOwotICAgICAgICBpZihzbGVlcF9tcykgewotICAgICAgICAgIGlmKHNsZWVwX21zID4gMTAwMCkKLSAgICAgICAgICAgIHNsZWVwX21zID0gMTAwMDsKLSAgICAgICAgICBDdXJsX3dhaXRfbXMoKGludClzbGVlcF9tcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQorICAgIGlmKCFtY29kZSkKICAgICAgIG1jb2RlID0gY3VybF9tdWx0aV9wZXJmb3JtKG11bHRpLCAmc3RpbGxfcnVubmluZyk7Ci0gICAgfQogCiAgICAgLyogb25seSByZWFkICdzdGlsbF9ydW5uaW5nJyBpZiBjdXJsX211bHRpX3BlcmZvcm0oKSByZXR1cm4gT0sgKi8KICAgICBpZighbWNvZGUgJiYgIXN0aWxsX3J1bm5pbmcpIHsKQEAgLTcxMCwxMCArNjkxLDYgQEAKIAogICBzaWdwaXBlX2lnbm9yZShkYXRhLCAmcGlwZV9zdCk7CiAKLSAgLyogYXNzaWduIHRoaXMgYWZ0ZXIgY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgc2luY2UgdGhhdCBmdW5jdGlvbiBjaGVja3MgZm9yCi0gICAgIGl0IGFuZCByZWplY3RzIHRoaXMgaGFuZGxlIG90aGVyd2lzZSAqLwotICBkYXRhLT5tdWx0aSA9IG11bHRpOwotCiAgIC8qIHJ1biB0aGUgdHJhbnNmZXIgKi8KICAgcmVzdWx0ID0gZXZlbnRzID8gZWFzeV9ldmVudHMobXVsdGkpIDogZWFzeV90cmFuc2ZlcihtdWx0aSk7CiAKQEAgLTc2MSw3ICs3MzgsNyBAQAogICAgIHJldHVybjsKIAogICBzaWdwaXBlX2lnbm9yZShkYXRhLCAmcGlwZV9zdCk7Ci0gIEN1cmxfY2xvc2UoZGF0YSk7CisgIEN1cmxfY2xvc2UoJmRhdGEpOwogICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwogfQogCkBAIC05NDIsNiArOTE5LDggQEAKICAqLwogdm9pZCBjdXJsX2Vhc3lfcmVzZXQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKIHsKKyAgbG9uZyBvbGRfYnVmZmVyX3NpemUgPSBkYXRhLT5zZXQuYnVmZmVyX3NpemU7CisKICAgQ3VybF9mcmVlX3JlcXVlc3Rfc3RhdGUoZGF0YSk7CiAKICAgLyogemVybyBvdXQgVXNlckRlZmluZWQgZGF0YTogKi8KQEAgLTk2NSw2ICs5NDQsMTggQEAKICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQogICBDdXJsX2h0dHBfYXV0aF9jbGVhbnVwX2RpZ2VzdChkYXRhKTsKICNlbmRpZgorCisgIC8qIHJlc2l6ZSByZWNlaXZlIGJ1ZmZlciAqLworICBpZihvbGRfYnVmZmVyX3NpemUgIT0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKSB7CisgICAgY2hhciAqbmV3YnVmZiA9IHJlYWxsb2MoZGF0YS0+c3RhdGUuYnVmZmVyLCBkYXRhLT5zZXQuYnVmZmVyX3NpemUgKyAxKTsKKyAgICBpZighbmV3YnVmZikgeworICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHJlYWxsb2Mgb2YgYnVmZmVyIGZhaWxlZFxuIikpOworICAgICAgLyogbm90aGluZyB3ZSBjYW4gZG8gaGVyZSBleGNlcHQgdXNlIHRoZSBvbGQgc2l6ZSAqLworICAgICAgZGF0YS0+c2V0LmJ1ZmZlcl9zaXplID0gb2xkX2J1ZmZlcl9zaXplOworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zdGF0ZS5idWZmZXIgPSBuZXdidWZmOworICB9CiB9CiAKIC8qCkBAIC05OTUsNTUgKzk4Niw2MyBAQAogICAvKiBwdXQgaXQgYmFjayBpbiB0aGUga2VlcG9uICovCiAgIGstPmtlZXBvbiA9IG5ld3N0YXRlOwogCi0gIGlmKCEobmV3c3RhdGUgJiBLRUVQX1JFQ1ZfUEFVU0UpICYmIGRhdGEtPnN0YXRlLnRlbXBjb3VudCkgewotICAgIC8qIHRoZXJlIGFyZSBidWZmZXJzIGZvciBzZW5kaW5nIHRoYXQgY2FuIGJlIGRlbGl2ZXJlZCBhcyB0aGUgcmVjZWl2ZQotICAgICAgIHBhdXNpbmcgaXMgbGlmdGVkISAqLwotICAgIHVuc2lnbmVkIGludCBpOwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGRhdGEtPnN0YXRlLnRlbXBjb3VudDsKLSAgICBzdHJ1Y3QgdGVtcGJ1ZiB3cml0ZWJ1ZlszXTsgLyogdGhlcmUgY2FuIG9ubHkgYmUgdGhyZWUgKi8KLSAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOwotICAgIHN0cnVjdCBDdXJsX2Vhc3kgKnNhdmVkX2RhdGEgPSBOVUxMOworICBpZighKG5ld3N0YXRlICYgS0VFUF9SRUNWX1BBVVNFKSkgeworICAgIEN1cmxfaHR0cDJfc3RyZWFtX3BhdXNlKGRhdGEsIEZBTFNFKTsKIAotICAgIC8qIGNvcHkgdGhlIHN0cnVjdHMgdG8gYWxsb3cgZm9yIGltbWVkaWF0ZSByZS1wYXVzaW5nICovCi0gICAgZm9yKGkgPSAwOyBpIDwgZGF0YS0+c3RhdGUudGVtcGNvdW50OyBpKyspIHsKLSAgICAgIHdyaXRlYnVmW2ldID0gZGF0YS0+c3RhdGUudGVtcHdyaXRlW2ldOwotICAgICAgZGF0YS0+c3RhdGUudGVtcHdyaXRlW2ldLmJ1ZiA9IE5VTEw7CisgICAgaWYoZGF0YS0+c3RhdGUudGVtcGNvdW50KSB7CisgICAgICAvKiB0aGVyZSBhcmUgYnVmZmVycyBmb3Igc2VuZGluZyB0aGF0IGNhbiBiZSBkZWxpdmVyZWQgYXMgdGhlIHJlY2VpdmUKKyAgICAgICAgIHBhdXNpbmcgaXMgbGlmdGVkISAqLworICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBkYXRhLT5zdGF0ZS50ZW1wY291bnQ7CisgICAgICBzdHJ1Y3QgdGVtcGJ1ZiB3cml0ZWJ1ZlszXTsgLyogdGhlcmUgY2FuIG9ubHkgYmUgdGhyZWUgKi8KKyAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IGRhdGEtPmNvbm47CisgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpzYXZlZF9kYXRhID0gTlVMTDsKKworICAgICAgLyogY29weSB0aGUgc3RydWN0cyB0byBhbGxvdyBmb3IgaW1tZWRpYXRlIHJlLXBhdXNpbmcgKi8KKyAgICAgIGZvcihpID0gMDsgaSA8IGRhdGEtPnN0YXRlLnRlbXBjb3VudDsgaSsrKSB7CisgICAgICAgIHdyaXRlYnVmW2ldID0gZGF0YS0+c3RhdGUudGVtcHdyaXRlW2ldOworICAgICAgICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGVbaV0uYnVmID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGRhdGEtPnN0YXRlLnRlbXBjb3VudCA9IDA7CisKKyAgICAgIC8qIHNldCB0aGUgY29ubmVjdGlvbidzIGN1cnJlbnQgb3duZXIgKi8KKyAgICAgIGlmKGNvbm4tPmRhdGEgIT0gZGF0YSkgeworICAgICAgICBzYXZlZF9kYXRhID0gY29ubi0+ZGF0YTsKKyAgICAgICAgY29ubi0+ZGF0YSA9IGRhdGE7CisgICAgICB9CisKKyAgICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgLyogZXZlbiBpZiBvbmUgZnVuY3Rpb24gcmV0dXJucyBlcnJvciwgdGhpcyBsb29wcyB0aHJvdWdoIGFuZCBmcmVlcworICAgICAgICAgICBhbGwgYnVmZmVycyAqLworICAgICAgICBpZighcmVzdWx0KQorICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIHdyaXRlYnVmW2ldLnR5cGUsIHdyaXRlYnVmW2ldLmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZWJ1ZltpXS5sZW4pOworICAgICAgICBmcmVlKHdyaXRlYnVmW2ldLmJ1Zik7CisgICAgICB9CisKKyAgICAgIC8qIHJlY292ZXIgcHJldmlvdXMgb3duZXIgb2YgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICAgIGlmKHNhdmVkX2RhdGEpCisgICAgICAgIGNvbm4tPmRhdGEgPSBzYXZlZF9kYXRhOworCisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGRhdGEtPnN0YXRlLnRlbXBjb3VudCA9IDA7Ci0KLSAgICAvKiBzZXQgdGhlIGNvbm5lY3Rpb24ncyBjdXJyZW50IG93bmVyICovCi0gICAgaWYoY29ubi0+ZGF0YSAhPSBkYXRhKSB7Ci0gICAgICBzYXZlZF9kYXRhID0gY29ubi0+ZGF0YTsKLSAgICAgIGNvbm4tPmRhdGEgPSBkYXRhOwotICAgIH0KLQotICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgIC8qIGV2ZW4gaWYgb25lIGZ1bmN0aW9uIHJldHVybnMgZXJyb3IsIHRoaXMgbG9vcHMgdGhyb3VnaCBhbmQgZnJlZXMgYWxsCi0gICAgICAgICBidWZmZXJzICovCi0gICAgICBpZighcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZWJ1ZltpXS50eXBlLCB3cml0ZWJ1ZltpXS5idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlYnVmW2ldLmxlbik7Ci0gICAgICBmcmVlKHdyaXRlYnVmW2ldLmJ1Zik7Ci0gICAgfQotCi0gICAgLyogcmVjb3ZlciBwcmV2aW91cyBvd25lciBvZiB0aGUgY29ubmVjdGlvbiAqLwotICAgIGlmKHNhdmVkX2RhdGEpCi0gICAgICBjb25uLT5kYXRhID0gc2F2ZWRfZGF0YTsKLQotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAogICAvKiBpZiB0aGVyZSdzIG5vIGVycm9yIGFuZCB3ZSdyZSBub3QgcGF1c2luZyBib3RoIGRpcmVjdGlvbnMsIHdlIHdhbnQKICAgICAgdG8gaGF2ZSB0aGlzIGhhbmRsZSBjaGVja2VkIHNvb24gKi8KLSAgaWYoIXJlc3VsdCAmJgotICAgICAoKG5ld3N0YXRlJihLRUVQX1JFQ1ZfUEFVU0V8S0VFUF9TRU5EX1BBVVNFKSkgIT0KLSAgICAgIChLRUVQX1JFQ1ZfUEFVU0V8S0VFUF9TRU5EX1BBVVNFKSkgKQorICBpZigobmV3c3RhdGUgJiAoS0VFUF9SRUNWX1BBVVNFfEtFRVBfU0VORF9QQVVTRSkpICE9CisgICAgIChLRUVQX1JFQ1ZfUEFVU0V8S0VFUF9TRU5EX1BBVVNFKSkgeworICAgIGRhdGEtPnN0YXRlLmRyYWluKys7CiAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOyAvKiBnZXQgdGhpcyBoYW5kbGUgZ29pbmcgYWdhaW4gKi8KKyAgICBpZihkYXRhLT5tdWx0aSkKKyAgICAgIEN1cmxfdXBkYXRlX3RpbWVyKGRhdGEtPm11bHRpKTsKKyAgfQogCi0gIC8qIFRoaXMgdHJhbnNmZXIgbWF5IGhhdmUgYmVlbiBtb3ZlZCBpbiBvciBvdXQgb2YgdGhlIGJ1bmRsZSwgdXBkYXRlCi0gICAgIHRoZSBjb3JyZXNwb25kaW5nIHNvY2tldCBjYWxsYmFjaywgaWYgdXNlZCAqLwotICBDdXJsX3VwZGF0ZXNvY2tldChkYXRhKTsKKyAgaWYoIWRhdGEtPnN0YXRlLmRvbmUpCisgICAgLyogVGhpcyB0cmFuc2ZlciBtYXkgaGF2ZSBiZWVuIG1vdmVkIGluIG9yIG91dCBvZiB0aGUgYnVuZGxlLCB1cGRhdGUgdGhlCisgICAgICAgY29ycmVzcG9uZGluZyBzb2NrZXQgY2FsbGJhY2ssIGlmIHVzZWQgKi8KKyAgICBDdXJsX3VwZGF0ZXNvY2tldChkYXRhKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTEzOCw2ICsxMTM3LDM1IEBACiB9CiAKIC8qCisgKiBXcmFwcGVyIHRvIGNhbGwgZnVuY3Rpb25zIGluIEN1cmxfY29ubmNhY2hlX2ZvcmVhY2goKQorICoKKyAqIFJldHVybnMgYWx3YXlzIDAuCisgKi8KK3N0YXRpYyBpbnQgY29ubl91cGtlZXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJhbSkKK3sKKyAgLyogUGFyYW0gaXMgdW51c2VkLiAqLworICAodm9pZClwYXJhbTsKKworICBpZihjb25uLT5oYW5kbGVyLT5jb25uZWN0aW9uX2NoZWNrKSB7CisgICAgLyogRG8gYSBwcm90b2NvbC1zcGVjaWZpYyBrZWVwYWxpdmUgY2hlY2sgb24gdGhlIGNvbm5lY3Rpb24uICovCisgICAgY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjayhjb25uLCBDT05OQ0hFQ0tfS0VFUEFMSVZFKTsKKyAgfQorCisgIHJldHVybiAwOyAvKiBjb250aW51ZSBpdGVyYXRpb24gKi8KK30KKworc3RhdGljIENVUkxjb2RlIHVwa2VlcChzdHJ1Y3QgY29ubmNhY2hlICpjb25uX2NhY2hlLCB2b2lkICpkYXRhKQoreworICAvKiBMb29wIG92ZXIgZXZlcnkgY29ubmVjdGlvbiBhbmQgbWFrZSBjb25uZWN0aW9uIGFsaXZlLiAqLworICBDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29ubl9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5fdXBrZWVwKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgogICogUGVyZm9ybXMgY29ubmVjdGlvbiB1cGtlZXAgZm9yIHRoZSBnaXZlbiBzZXNzaW9uIGhhbmRsZS4KICAqLwogQ1VSTGNvZGUgY3VybF9lYXN5X3Vwa2VlcChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTE0OCw3ICsxMTc2LDcgQEAKIAogICBpZihkYXRhLT5tdWx0aV9lYXN5KSB7CiAgICAgLyogVXNlIHRoZSBjb21tb24gZnVuY3Rpb24gdG8ga2VlcCBjb25uZWN0aW9ucyBhbGl2ZS4gKi8KLSAgICByZXR1cm4gQ3VybF91cGtlZXAoJmRhdGEtPm11bHRpX2Vhc3ktPmNvbm5fY2FjaGUsIGRhdGEpOworICAgIHJldHVybiB1cGtlZXAoJmRhdGEtPm11bHRpX2Vhc3ktPmNvbm5fY2FjaGUsIGRhdGEpOwogICB9CiAgIGVsc2UgewogICAgIC8qIE5vIGNvbm5lY3Rpb25zLCBzbyBqdXN0IHJldHVybiBzdWNjZXNzICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Vhc3lpZi5oCmluZGV4IDZiYTdlNTQuLjhhMzA5YzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Vhc3lpZi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Vhc3lpZi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmMKaW5kZXggZDM0OWNkOS4uMjQ5MjM3MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjaGFyICpyZWFsX3BhdGg7CiAgIHN0cnVjdCBGSUxFUFJPVE8gKmZpbGUgPSBkYXRhLT5yZXEucHJvdG9wOwotICBpbnQgZmQ7CisgIGludCBmZCA9IC0xOwogI2lmZGVmIERPU19GSUxFU1lTVEVNCiAgIHNpemVfdCBpOwogICBjaGFyICphY3R1YWxfcGF0aDsKQEAgLTE4MSw3ICsxODEsOSBAQAogICAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CiAgICAgfQogCi0gIGZkID0gb3Blbl9yZWFkb25seShhY3R1YWxfcGF0aCwgT19SRE9OTFl8T19CSU5BUlkpOworICBpZihzdHJuY21wKCJcXFxcIiwgYWN0dWFsX3BhdGgsIDIpKQorICAgIC8qIHJlZnVzZSB0byBvcGVuIHBhdGggdGhhdCBzdGFydHMgd2l0aCB0d28gYmFja3NsYXNoZXMgKi8KKyAgICBmZCA9IG9wZW5fcmVhZG9ubHkoYWN0dWFsX3BhdGgsIE9fUkRPTkxZfE9fQklOQVJZKTsKICAgZmlsZS0+cGF0aCA9IGFjdHVhbF9wYXRoOwogI2Vsc2UKICAgaWYobWVtY2hyKHJlYWxfcGF0aCwgMCwgcmVhbF9wYXRoX2xlbikpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuaAppbmRleCAyMDgyOGFkLi5mNmI3NGE3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZm9ybWRhdGEuYwppbmRleCA0MjlkNDc5Li41MGEzN2UwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmMKaW5kZXggNTM1MTBmOC4uNzI5MmUwMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJ0cmFuc2Zlci5oIgogI2luY2x1ZGUgImVzY2FwZS5oIgogI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCi0jaW5jbHVkZSAic29ja3MuaCIKICNpbmNsdWRlICJmdHAuaCIKICNpbmNsdWRlICJmaWxlaW5mby5oIgogI2luY2x1ZGUgImZ0cGxpc3RwYXJzZXIuaCIKQEAgLTc4LDYgKzc3LDcgQEAKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgImh0dHBfcHJveHkuaCIKICNpbmNsdWRlICJub24tYXNjaWkuaCIKKyNpbmNsdWRlICJzb2Nrcy5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTEzMiwxMCArMTMyLDggQEAKIHN0YXRpYyBDVVJMY29kZSBmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKIHN0YXRpYyBDVVJMY29kZSBmdHBfZG9fbW9yZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCAqY29tcGxldGVkKTsKIHN0YXRpYyBDVVJMY29kZSBmdHBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgaW50IGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci1zdGF0aWMgaW50IGZ0cF9kb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CitzdGF0aWMgaW50IGZ0cF9kb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIHN0YXRpYyBDVVJMY29kZSBmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOwogc3RhdGljIENVUkxjb2RlIGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pOwpAQCAtMjU1LDE4ICsyNTMsNiBAQAogICBDdXJsX3NhZmVmcmVlKGZ0cGMtPm5ld2hvc3QpOwogfQogCi0vKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBnaXZlbiBzdHJpbmcgY29udGFpbnMgQ1IgKFxyKSBvciBMRiAoXG4pLAotICAgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIHdpdGhpbiBSRkMgOTU5IDxzdHJpbmc+LgotICAgTm90ZTogVGhlIGlucHV0IHN0cmluZyBpcyBpbiB0aGUgY2xpZW50J3MgZW5jb2Rpbmcgd2hpY2ggbWlnaHQKLSAgIG5vdCBiZSBBU0NJSSwgc28gZXNjYXBlIHNlcXVlbmNlcyBcciAmIFxuIG11c3QgYmUgdXNlZCBpbnN0ZWFkCi0gICBvZiBoZXggdmFsdWVzIDB4MGQgJiAweDBhLgotKi8KLXN0YXRpYyBib29sIGlzQmFkRnRwU3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgcmV0dXJuICgoTlVMTCAhPSBzdHJjaHIoc3RyaW5nLCAnXHInKSkgfHwKLSAgICAgICAgICAoTlVMTCAhPSBzdHJjaHIoc3RyaW5nLCAnXG4nKSkpID8gVFJVRSA6IEZBTFNFOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBBY2NlcHRTZXJ2ZXJDb25uZWN0KCkKQEAgLTMwNSw3ICsyOTEsNyBAQAogCiAgIGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9IHM7CiAgICh2b2lkKWN1cmx4X25vbmJsb2NrKHMsIFRSVUUpOyAvKiBlbmFibGUgbm9uLWJsb2NraW5nICovCi0gIGNvbm4tPnNvY2tfYWNjZXB0ZWRbU0VDT05EQVJZU09DS0VUXSA9IFRSVUU7CisgIGNvbm4tPnNvY2tfYWNjZXB0ZWQgPSBUUlVFOwogCiAgIGlmKGRhdGEtPnNldC5mc29ja29wdCkgewogICAgIGludCBlcnJvciA9IDA7CkBAIC0zODIsNyArMzY4LDcgQEAKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CiAgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CiAgIGludCByZXN1bHQ7Ci0gIHRpbWVfdCB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBmdHBjb2RlOwogCkBAIC00OTMsNyArNDc5LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBBbGxvd1NlcnZlckNvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpjb25uZWN0ZWQpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICB0aW1lX3QgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAogICAqY29ubmVjdGVkID0gRkFMU0U7CkBAIC01MjUsNyArNTExLDcgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBBZGQgdGltZW91dCB0byBtdWx0aSBoYW5kbGUgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLwotICAgIGlmKCFyZXN1bHQgJiYgKmNvbm5lY3RlZCA9PSBGQUxTRSkgeworICAgIGlmKCpjb25uZWN0ZWQgPT0gRkFMU0UpIHsKICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIGRhdGEtPnNldC5hY2NlcHR0aW1lb3V0ID4gMCA/CiAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuYWNjZXB0dGltZW91dDogREVGQVVMVF9BQ0NFUFRfVElNRU9VVCwgMCk7CiAgICAgfQpAQCAtNTY1LDEwICs1NTEsOCBAQAogI2lmZGVmIEhBVkVfR1NTQVBJCiAgIGNoYXIgKiBjb25zdCBidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CiAjZW5kaWYKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIGludCBjb2RlOwotCi0gIHJlc3VsdCA9IEN1cmxfcHBfcmVhZHJlc3Aoc29ja2ZkLCBwcCwgJmNvZGUsIHNpemUpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3BwX3JlYWRyZXNwKHNvY2tmZCwgcHAsICZjb2RlLCBzaXplKTsKIAogI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpCiAgIC8qIGhhbmRsZSB0aGUgc2VjdXJpdHktb3JpZW50ZWQgcmVzcG9uc2VzIDZ4eCAqKiovCkBAIC03ODksOSArNzczLDggQEAKIHN0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfdXNlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKLSAgc3RydWN0IEZUUCAqZnRwID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKICAgLyogc2VuZCBVU0VSICovCi0gIFBQU0VOREYoJmNvbm4tPnByb3RvLmZ0cGMucHAsICJVU0VSICVzIiwgZnRwLT51c2VyP2Z0cC0+dXNlcjoiIik7CisgIFBQU0VOREYoJmNvbm4tPnByb3RvLmZ0cGMucHAsICJVU0VSICVzIiwgY29ubi0+dXNlcj9jb25uLT51c2VyOiIiKTsKIAogICBzdGF0ZShjb25uLCBGVFBfVVNFUik7CiAgIGNvbm4tPmRhdGEtPnN0YXRlLmZ0cF90cnlpbmdfYWx0ZXJuYXRpdmUgPSBGQUxTRTsKQEAgLTgxMiwyNiArNzk1LDI0IEBACiAKIC8qIEZvciB0aGUgRlRQICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLwogc3RhdGljIGludCBmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewotICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5mdHBjLnBwLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5mdHBjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qIEZvciB0aGUgRlRQICJET19NT1JFIiBwaGFzZSBvbmx5ICovCi1zdGF0aWMgaW50IGZ0cF9kb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBmdHBfZG9tb3JlX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CiAKLSAgaWYoIW51bXNvY2tzKQotICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotCiAgIC8qIFdoZW4gaW4gRE9fTU9SRSBzdGF0ZSwgd2UgY291bGQgYmUgZWl0aGVyIHdhaXRpbmcgZm9yIHVzIHRvIGNvbm5lY3QgdG8gYQogICAgKiByZW1vdGUgc2l0ZSwgb3Igd2UgY291bGQgd2FpdCBmb3IgdGhhdCBzaXRlIHRvIGNvbm5lY3QgdG8gdXMuIE9yIGp1c3QKICAgICogaGFuZGxlIG9yZGluYXJ5IGNvbW1hbmRzLgogICAgKi8KIAorICBpZihTT0NLU19TVEFURShjb25uLT5jbm5jdC5zdGF0ZSkpCisgICAgcmV0dXJuIEN1cmxfU09DS1NfZ2V0c29jayhjb25uLCBzb2NrcywgU0VDT05EQVJZU09DS0VUKTsKKwogICBpZihGVFBfU1RPUCA9PSBmdHBjLT5zdGF0ZSkgewogICAgIGludCBiaXRzID0gR0VUU09DS19SRUFEU09DSygwKTsKIApAQCAtODU4LDcgKzgzOSw3IEBACiAKICAgICByZXR1cm4gYml0czsKICAgfQotICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5mdHBjLnBwLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5mdHBjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBGVFBfUVVPVEUgc3RhdGUgaXMgcGFzc2VkLgpAQCAtODc2LDYgKzg1NywxMCBAQAogICAgIC8qIGFscmVhZHkgZG9uZSBhbmQgZmluZSAqLwogICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9tZHRtKGNvbm4pOwogICBlbHNlIHsKKyAgICAvKiBGVFBGSUxFX05PQ1dEIHdpdGggZnVsbCBwYXRoOiBleHBlY3QgZnRwYy0+Y3dkZG9uZSEgKi8KKyAgICBERUJVR0FTU0VSVCgoY29ubi0+ZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kICE9IEZUUEZJTEVfTk9DV0QpIHx8CisgICAgICAgICAgICAgICAgIShmdHBjLT5kaXJkZXB0aCAmJiBmdHBjLT5kaXJzWzBdWzBdID09ICcvJykpOworCiAgICAgZnRwYy0+Y291bnQyID0gMDsgLyogY291bnQyIGNvdW50cyBmYWlsZWQgQ1dEcyAqLwogCiAgICAgLyogY291bnQzIGlzIHNldCB0byBhbGxvdyBhIE1LRCB0byBmYWlsIG9uY2UuIEluIHRoZSBjYXNlIHdoZW4gZmlyc3QgQ1dECkBAIC04ODMsMTAgKzg2OCw5IEBACiAgICAgICAgZGlyKSB0aGlzIHRoZW4gYWxsb3dzIGZvciBhIHNlY29uZCB0cnkgdG8gQ1dEIHRvIGl0ICovCiAgICAgZnRwYy0+Y291bnQzID0gKGNvbm4tPmRhdGEtPnNldC5mdHBfY3JlYXRlX21pc3NpbmdfZGlycyA9PSAyKT8xOjA7CiAKLSAgICBpZigoY29ubi0+ZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID09IEZUUEZJTEVfTk9DV0QpICYmICFmdHBjLT5jd2Rjb3VudCkKLSAgICAgIC8qIE5vIENXRCBuZWNlc3NhcnkgKi8KLSAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9tZHRtKGNvbm4pOwotICAgIGVsc2UgaWYoY29ubi0+Yml0cy5yZXVzZSAmJiBmdHBjLT5lbnRyeXBhdGgpIHsKKyAgICBpZihjb25uLT5iaXRzLnJldXNlICYmIGZ0cGMtPmVudHJ5cGF0aCAmJgorICAgICAgIC8qIG5vIG5lZWQgdG8gZ28gdG8gZW50cnlwYXRoIHdoZW4gd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoICovCisgICAgICAgIShmdHBjLT5kaXJkZXB0aCAmJiBmdHBjLT5kaXJzWzBdWzBdID09ICcvJykpIHsKICAgICAgIC8qIFRoaXMgaXMgYSByZS11c2VkIGNvbm5lY3Rpb24uIFNpbmNlIHdlIGNoYW5nZSBkaXJlY3RvcnkgdG8gd2hlcmUgdGhlCiAgICAgICAgICB0cmFuc2ZlciBpcyB0YWtpbmcgcGxhY2UsIHdlIG11c3QgZmlyc3QgZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGRpcgogICAgICAgICAgd2hlcmUgd2UgZW5kZWQgdXAgYWZ0ZXIgbG9naW46ICovCkBAIC05MjYsNyArOTEwLDcgQEAKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHBvcnRzb2NrID0gQ1VSTF9TT0NLRVRfQkFEOwotICBjaGFyIG15aG9zdFsyNTZdID0gIiI7CisgIGNoYXIgbXlob3N0W01BWF9JUEFEUl9MRU4gKyAxXSA9ICIiOwogCiAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3M7CiAgIEN1cmxfYWRkcmluZm8gKnJlcywgKmFpOwpAQCAtOTM3LDkgKzkyMSw4IEBACiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgc3RydWN0IHNvY2thZGRyX2luNiAqIGNvbnN0IHNhNiA9ICh2b2lkICopc2E7CiAjZW5kaWYKLSAgY2hhciB0bXBbMTAyNF07CiAgIHN0YXRpYyBjb25zdCBjaGFyIG1vZGVbXVs1XSA9IHsgIkVQUlQiLCAiUE9SVCIgfTsKLSAgaW50IHJjOworICBlbnVtIHJlc29sdmVfdCByYzsKICAgaW50IGVycm9yOwogICBjaGFyICpob3N0ID0gTlVMTDsKICAgY2hhciAqc3RyaW5nX2Z0cHBvcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBQT1JUXTsKQEAgLTEyNTIsOCArMTIzNSwxMCBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmKFBPUlQgPT0gZmNtZCkgeworICAgICAgLyogbGFyZ2UgZW5vdWdoIGZvciBbSVAgYWRkcmVzc10sW251bV0sW251bV0gKi8KKyAgICAgIGNoYXIgdGFyZ2V0W3NpemVvZihteWhvc3QpICsgMjBdOwogICAgICAgY2hhciAqc291cmNlID0gbXlob3N0OwotICAgICAgY2hhciAqZGVzdCA9IHRtcDsKKyAgICAgIGNoYXIgKmRlc3QgPSB0YXJnZXQ7CiAKICAgICAgIC8qIHRyYW5zbGF0ZSB4LngueC54IHRvIHgseCx4LHggKi8KICAgICAgIHdoaWxlKHNvdXJjZSAmJiAqc291cmNlKSB7CkBAIC0xMjY3LDcgKzEyNTIsNyBAQAogICAgICAgKmRlc3QgPSAwOwogICAgICAgbXNucHJpbnRmKGRlc3QsIDIwLCAiLCVkLCVkIiwgKGludCkocG9ydD4+OCksIChpbnQpKHBvcnQmMHhmZikpOwogCi0gICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZmdHBjLT5wcCwgIiVzICVzIiwgbW9kZVtmY21kXSwgdG1wKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmZ0cGMtPnBwLCAiJXMgJXMiLCBtb2RlW2ZjbWRdLCB0YXJnZXQpOwogICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIHNlbmRpbmcgUE9SVCBjb21tYW5kOiAlcyIsCiAgICAgICAgICAgICAgIGN1cmxfZWFzeV9zdHJlcnJvcihyZXN1bHQpKTsKQEAgLTE0NDUsMzEgKzE0MzAsMzcgQEAKICAgICAgc2VydmVycyBlaXRoZXIuLi4gKi8KIAogICAvKgotICAgICBpZiBGVFBGSUxFX05PQ1dEIHdhcyBzcGVjaWZpZWQsIHdlIGFyZSBjdXJyZW50bHkgaW4KLSAgICAgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgc28gd2Ugc2hvdWxkIGFkZCB0aGUgcGF0aAorICAgICBpZiBGVFBGSUxFX05PQ1dEIHdhcyBzcGVjaWZpZWQsIHdlIHNob3VsZCBhZGQgdGhlIHBhdGgKICAgICAgYXMgYXJndW1lbnQgZm9yIHRoZSBMSVNUIC8gTkxTVCAvIG9yIGN1c3RvbSBjb21tYW5kLgogICAgICBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2lsbCBzdXBwb3J0IHRoaXMsIGlzIHVuY2VydGFpbi4KIAogICAgICBUaGUgb3RoZXIgZnRwX2ZpbGVtZXRob2RzIHdpbGwgQ1dEIGludG8gZGlyL2Rpci8gZmlyc3QgYW5kCiAgICAgIHRoZW4ganVzdCBkbyBMSVNUIChpbiB0aGF0IGNhc2U6IG5vdGhpbmcgdG8gZG8gaGVyZSkKICAgKi8KLSAgY2hhciAqY21kLCAqbHN0QXJnLCAqc2xhc2hQb3M7Ci0gIGNvbnN0IGNoYXIgKmlucGF0aCA9IGZ0cC0+cGF0aDsKKyAgY2hhciAqbHN0QXJnID0gTlVMTDsKKyAgY2hhciAqY21kOwogCi0gIGxzdEFyZyA9IE5VTEw7Ci0gIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYKLSAgICAgaW5wYXRoICYmIGlucGF0aFswXSAmJiBzdHJjaHIoaW5wYXRoLCAnLycpKSB7Ci0gICAgc2l6ZV90IG4gPSBzdHJsZW4oaW5wYXRoKTsKLQotICAgIC8qIENoZWNrIGlmIHBhdGggZG9lcyBub3QgZW5kIHdpdGggLywgYXMgdGhlbiB3ZSBjdXQgb2ZmIHRoZSBmaWxlIHBhcnQgKi8KLSAgICBpZihpbnBhdGhbbiAtIDFdICE9ICcvJykgewotICAgICAgLyogY2hvcCBvZmYgdGhlIGZpbGUgcGFydCBpZiBmb3JtYXQgaXMgZGlyL2Rpci9maWxlICovCi0gICAgICBzbGFzaFBvcyA9IHN0cnJjaHIoaW5wYXRoLCAnLycpOwotICAgICAgbiA9IHNsYXNoUG9zIC0gaW5wYXRoOwotICAgIH0KLSAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBpbnBhdGgsIG4sICZsc3RBcmcsIE5VTEwsIFRSVUUpOworICBpZigoZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID09IEZUUEZJTEVfTk9DV0QpICYmIGZ0cC0+cGF0aCkgeworICAgIC8qIHVybC1kZWNvZGUgYmVmb3JlIGV2YWx1YXRpb246IGUuZy4gcGF0aHMgc3RhcnRpbmcvZW5kaW5nIHdpdGggJTJmICovCisgICAgY29uc3QgY2hhciAqc2xhc2hQb3MgPSBOVUxMOworICAgIGNoYXIgKnJhd1BhdGggPSBOVUxMOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGZ0cC0+cGF0aCwgMCwgJnJhd1BhdGgsIE5VTEwsIFRSVUUpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzbGFzaFBvcyA9IHN0cnJjaHIocmF3UGF0aCwgJy8nKTsKKyAgICBpZihzbGFzaFBvcykgeworICAgICAgLyogY2hvcCBvZmYgdGhlIGZpbGUgcGFydCBpZiBmb3JtYXQgaXMgZGlyL2ZpbGUgb3RoZXJ3aXNlIHJlbW92ZQorICAgICAgICAgdGhlIHRyYWlsaW5nIHNsYXNoIGZvciBkaXIvZGlyLyBleGNlcHQgZm9yIGFic29sdXRlIHBhdGggLyAqLworICAgICAgc2l6ZV90IG4gPSBzbGFzaFBvcyAtIHJhd1BhdGg7CisgICAgICBpZihuID09IDApCisgICAgICAgICsrbjsKKworICAgICAgbHN0QXJnID0gcmF3UGF0aDsKKyAgICAgIGxzdEFyZ1tuXSA9ICdcMCc7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZyZWUocmF3UGF0aCk7CiAgIH0KIAogICBjbWQgPSBhcHJpbnRmKCIlcyVzJXMiLApAQCAtMTQ3OCwxNSArMTQ2OSwxMiBAQAogICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2xpc3Rfb25seT8iTkxTVCI6IkxJU1QiKSwKICAgICAgICAgICAgICAgICBsc3RBcmc/ICIgIjogIiIsCiAgICAgICAgICAgICAgICAgbHN0QXJnPyBsc3RBcmc6ICIiKTsKKyAgZnJlZShsc3RBcmcpOwogCi0gIGlmKCFjbWQpIHsKLSAgICBmcmVlKGxzdEFyZyk7CisgIGlmKCFjbWQpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KIAogICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5mdHBjLnBwLCAiJXMiLCBjbWQpOwotCi0gIGZyZWUobHN0QXJnKTsKICAgZnJlZShjbWQpOwogCiAgIGlmKHJlc3VsdCkKQEAgLTE0OTksMjQgKzE0ODcsMTQgQEAKIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9yZXRyX3ByZXF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCi0KLSAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9SRVRSX1BSRVFVT1RFKTsKLQotICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9SRVRSX1BSRVFVT1RFKTsKIH0KIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9zdG9yX3ByZXF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCi0KLSAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKLQotICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKIH0KIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV90eXBlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKQEAgLTE4MTksNyArMTc5Nyw3IEBACiAgIENVUkxjb2RlIHJlc3VsdDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqYWRkciA9IE5VTEw7Ci0gIGludCByYzsKKyAgZW51bSByZXNvbHZlX3QgcmM7CiAgIHVuc2lnbmVkIHNob3J0IGNvbm5lY3Rwb3J0OyAvKiB0aGUgbG9jYWwgcG9ydCBjb25uZWN0KCkgc2hvdWxkIHVzZSEgKi8KICAgY2hhciAqc3RyID0gJmRhdGEtPnN0YXRlLmJ1ZmZlcls0XTsgIC8qIHN0YXJ0IG9uIHRoZSBmaXJzdCBsZXR0ZXIgKi8KIApAQCAtMjA1MiwxMyArMjAzMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgJnllYXIsICZtb250aCwgJmRheSwgJmhvdXIsICZtaW51dGUsICZzZWNvbmQpKSB7CiAgICAgICAgIC8qIHdlIGhhdmUgYSB0aW1lLCByZWZvcm1hdCBpdCAqLwogICAgICAgICBjaGFyIHRpbWVidWZbMjRdOwotICAgICAgICB0aW1lX3Qgc2VjcyA9IHRpbWUoTlVMTCk7Ci0KICAgICAgICAgbXNucHJpbnRmKHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSwKICAgICAgICAgICAgICAgICAgICIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQgR01UIiwKICAgICAgICAgICAgICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKICAgICAgICAgLyogbm93LCBjb252ZXJ0IHRoaXMgaW50byBhIHRpbWUoKSB2YWx1ZTogKi8KLSAgICAgICAgZGF0YS0+aW5mby5maWxldGltZSA9IGN1cmxfZ2V0ZGF0ZSh0aW1lYnVmLCAmc2Vjcyk7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBDdXJsX2dldGRhdGVfY2FwcGVkKHRpbWVidWYpOwogICAgICAgfQogCiAjaWZkZWYgQ1VSTF9GVFBfSFRUUFNUWUxFX0hFQUQKQEAgLTIyNjEsOSArMjIzNywyNSBAQAogICBjaGFyICpidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CiAKICAgLyogZ2V0IHRoZSBzaXplIGZyb20gdGhlIGFzY2lpIHN0cmluZzogKi8KLSAgaWYoZnRwY29kZSA9PSAyMTMpCisgIGlmKGZ0cGNvZGUgPT0gMjEzKSB7CisgICAgLyogVG8gYWxsb3cgc2VydmVycyB0byBwcmVwZW5kICJydWJiaXNoIiBpbiB0aGUgcmVzcG9uc2Ugc3RyaW5nLCB3ZSBzY2FuCisgICAgICAgZm9yIGFsbCB0aGUgZGlnaXRzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc3BvbnNlIGFuZCBwYXJzZSBvbmx5IHRob3NlIGFzIGEKKyAgICAgICBudW1iZXIuICovCisgICAgY2hhciAqc3RhcnQgPSAmYnVmWzRdOworICAgIGNoYXIgKmZkaWdpdCA9IHN0cmNocihzdGFydCwgJ1xyJyk7CisgICAgaWYoZmRpZ2l0KSB7CisgICAgICBkbworICAgICAgICBmZGlnaXQtLTsKKyAgICAgIHdoaWxlKElTRElHSVQoKmZkaWdpdCkgJiYgKGZkaWdpdCA+IHN0YXJ0KSk7CisgICAgICBpZighSVNESUdJVCgqZmRpZ2l0KSkKKyAgICAgICAgZmRpZ2l0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZkaWdpdCA9IHN0YXJ0OwogICAgIC8qIGlnbm9yZXMgcGFyc2luZyBlcnJvcnMsIHdoaWNoIHdpbGwgbWFrZSB0aGUgc2l6ZSByZW1haW4gdW5rbm93biAqLwotICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChidWYgKyA0LCBOVUxMLCAwLCAmZmlsZXNpemUpOworICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChmZGlnaXQsIE5VTEwsIDAsICZmaWxlc2l6ZSk7CisKKyAgfQogCiAgIGlmKGluc3RhdGUgPT0gRlRQX1NJWkUpIHsKICNpZmRlZiBDVVJMX0ZUUF9IVFRQU1RZTEVfSEVBRApAQCAtMjUyNyw3ICsyNTE5LDYgQEAKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5yZXEucHJvdG9wOwogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKICAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLwogCkBAIC0yNTM1LDcgKzI1MjYsNyBAQAogICBpZigoZnRwY29kZSA9PSAzMzEpICYmIChmdHBjLT5zdGF0ZSA9PSBGVFBfVVNFUikpIHsKICAgICAvKiAzMzEgUGFzc3dvcmQgcmVxdWlyZWQgZm9yIC4uLgogICAgICAgICh0aGUgc2VydmVyIHJlcXVpcmVzIHRvIHNlbmQgdGhlIHVzZXIncyBwYXNzd29yZCB0b28pICovCi0gICAgUFBTRU5ERigmZnRwYy0+cHAsICJQQVNTICVzIiwgZnRwLT5wYXNzd2Q/ZnRwLT5wYXNzd2Q6IiIpOworICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiUEFTUyAlcyIsIGNvbm4tPnBhc3N3ZD9jb25uLT5wYXNzd2Q6IiIpOwogICAgIHN0YXRlKGNvbm4sIEZUUF9QQVNTKTsKICAgfQogICBlbHNlIGlmKGZ0cGNvZGUvMTAwID09IDIpIHsKQEAgLTMxMzQsNyArMzEyNSw4IEBACiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBmdHBjb2RlOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgY2hhciAqcGF0aCA9IE5VTEw7CisgIGNoYXIgKnJhd1BhdGggPSBOVUxMOworICBzaXplX3QgcGF0aExlbiA9IDA7CiAKICAgaWYoIWZ0cCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0zMTcyLDkgKzMxNjQsNiBAQAogICAgIGJyZWFrOwogICB9CiAKLSAgLyogbm93IHN0b3JlIGEgY29weSBvZiB0aGUgZGlyZWN0b3J5IHdlIGFyZSBpbiAqLwotICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKLQogICBpZihkYXRhLT5zdGF0ZS53aWxkY2FyZG1hdGNoKSB7CiAgICAgaWYoZGF0YS0+c2V0LmNodW5rX2VuZCAmJiBmdHBjLT5maWxlKSB7CiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKQEAgLTMxODUsNDEgKzMxNzQsNDEgQEAKICAgfQogCiAgIGlmKCFyZXN1bHQpCi0gICAgLyogZ2V0IHRoZSAicmF3IiBwYXRoICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcGF0aCwgTlVMTCwgVFJVRSk7CisgICAgLyogZ2V0IHRoZSB1cmwtZGVjb2RlZCAicmF3IiBwYXRoICovCisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgJnBhdGhMZW4sIFRSVUUpOwogICBpZihyZXN1bHQpIHsKICAgICAvKiBXZSBjYW4gbGltcCBhbG9uZyBhbnl3YXkgKGFuZCBzaG91bGQgdHJ5IHRvIHNpbmNlIHdlIG1heSBhbHJlYWR5IGJlIGluCiAgICAgICogdGhlIGVycm9yIHBhdGgpICovCiAgICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7IC8qIG1hcmsgY29udHJvbCBjb25uZWN0aW9uIGFzIGJhZCAqLwogICAgIGNvbm5jbG9zZShjb25uLCAiRlRQOiBvdXQgb2YgbWVtb3J5ISIpOyAvKiBtYXJrIGZvciBjb25uZWN0aW9uIGNsb3N1cmUgKi8KKyAgICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKICAgICBmdHBjLT5wcmV2cGF0aCA9IE5VTEw7IC8qIG5vIHBhdGggcmVtZW1iZXJpbmcgKi8KICAgfQotICBlbHNlIHsKLSAgICBzaXplX3QgZmxlbiA9IGZ0cGMtPmZpbGU/c3RybGVuKGZ0cGMtPmZpbGUpOjA7IC8qIGZpbGUgaXMgInJhdyIgYWxyZWFkeSAqLwotICAgIHNpemVfdCBkbGVuID0gc3RybGVuKHBhdGgpLWZsZW47Ci0gICAgaWYoIWZ0cGMtPmN3ZGZhaWwpIHsKLSAgICAgIGZ0cGMtPnByZXZtZXRob2QgPSBkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2Q7Ci0gICAgICBpZihkbGVuICYmIChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgIT0gRlRQRklMRV9OT0NXRCkpIHsKLSAgICAgICAgZnRwYy0+cHJldnBhdGggPSBwYXRoOwotICAgICAgICBpZihmbGVuKQotICAgICAgICAgIC8qIGlmICdwYXRoJyBpcyBub3QgdGhlIHdob2xlIHN0cmluZyAqLwotICAgICAgICAgIGZ0cGMtPnByZXZwYXRoW2RsZW5dID0gMDsgLyogdGVybWluYXRlICovCisgIGVsc2UgeyAvKiByZW1lbWJlciB3b3JraW5nIGRpcmVjdG9yeSBmb3IgY29ubmVjdGlvbiByZXVzZSAqLworICAgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYgKHJhd1BhdGhbMF0gPT0gJy8nKSkKKyAgICAgIGZyZWUocmF3UGF0aCk7IC8qIGZ1bGwgcGF0aCA9PiBubyBDV0RzIGhhcHBlbmVkID0+IGtlZXAgZnRwYy0+cHJldnBhdGggKi8KKyAgICBlbHNlIHsKKyAgICAgIGZyZWUoZnRwYy0+cHJldnBhdGgpOworCisgICAgICBpZighZnRwYy0+Y3dkZmFpbCkgeworICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkKKyAgICAgICAgICBwYXRoTGVuID0gMDsgLyogcmVsYXRpdmUgcGF0aCA9PiB3b3JraW5nIGRpcmVjdG9yeSBpcyBGVFAgaG9tZSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgcGF0aExlbiAtPSBmdHBjLT5maWxlP3N0cmxlbihmdHBjLT5maWxlKTowOyAvKiBmaWxlIGlzIHVybC1kZWNvZGVkICovCisKKyAgICAgICAgcmF3UGF0aFtwYXRoTGVuXSA9ICdcMCc7CisgICAgICAgIGZ0cGMtPnByZXZwYXRoID0gcmF3UGF0aDsKICAgICAgIH0KICAgICAgIGVsc2UgewotICAgICAgICBmcmVlKHBhdGgpOwotICAgICAgICAvKiB3ZSBuZXZlciBjaGFuZ2VkIGRpciAqLwotICAgICAgICBmdHBjLT5wcmV2cGF0aCA9IHN0cmR1cCgiIik7Ci0gICAgICAgIGlmKCFmdHBjLT5wcmV2cGF0aCkKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgZnJlZShyYXdQYXRoKTsKKyAgICAgICAgZnRwYy0+cHJldnBhdGggPSBOVUxMOyAvKiBubyBwYXRoICovCiAgICAgICB9Ci0gICAgICBpZihmdHBjLT5wcmV2cGF0aCkKLSAgICAgICAgaW5mb2YoZGF0YSwgIlJlbWVtYmVyaW5nIHdlIGFyZSBpbiBkaXIgXCIlc1wiXG4iLCBmdHBjLT5wcmV2cGF0aCk7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgZnRwYy0+cHJldnBhdGggPSBOVUxMOyAvKiBubyBwYXRoICovCi0gICAgICBmcmVlKHBhdGgpOwotICAgIH0KKworICAgIGlmKGZ0cGMtPnByZXZwYXRoKQorICAgICAgaW5mb2YoZGF0YSwgIlJlbWVtYmVyaW5nIHdlIGFyZSBpbiBkaXIgXCIlc1wiXG4iLCBmdHBjLT5wcmV2cGF0aCk7CiAgIH0KKwogICAvKiBmcmVlIHRoZSBkaXIgdHJlZSBhbmQgZmlsZSBwYXJ0cyAqLwogICBmcmVlZGlycyhmdHBjKTsKIApAQCAtMzUzMiwxNCArMzUyMSwxMyBAQAogCiAgICAgLyogaWYgd2UgZ290IGFuIGVycm9yIG9yIGlmIHdlIGRvbid0IHdhaXQgZm9yIGEgZGF0YSBjb25uZWN0aW9uIHJldHVybgogICAgICAgIGltbWVkaWF0ZWx5ICovCi0gICAgaWYocmVzdWx0IHx8IChmdHBjLT53YWl0X2RhdGFfY29ubiAhPSBUUlVFKSkKKyAgICBpZihyZXN1bHQgfHwgIWZ0cGMtPndhaXRfZGF0YV9jb25uKQogICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGlmKGZ0cGMtPndhaXRfZGF0YV9jb25uKQotICAgICAgLyogaWYgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgRlRQIHN0YXRlIG1hY2hpbmUgaGVyZSwgKmNvbXBsZXRlIHdpbGwgYmUKLSAgICAgICAgIFRSVUUgYnV0IHNvIGlzIGZ0cGMtPndhaXRfZGF0YV9jb25uLCB3aGljaCBzYXlzIHdlIG5lZWQgdG8gd2FpdCBmb3IKLSAgICAgICAgIHRoZSBkYXRhIGNvbm5lY3Rpb24gYW5kIHRoZXJlZm9yZSB3ZSdyZSBub3QgYWN0dWFsbHkgY29tcGxldGUgKi8KLSAgICAgICpjb21wbGV0ZXAgPSAwOworICAgIC8qIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIEZUUCBzdGF0ZSBtYWNoaW5lIGhlcmUsICpjb21wbGV0ZSB3aWxsIGJlCisgICAgICAgVFJVRSBidXQgc28gaXMgZnRwYy0+d2FpdF9kYXRhX2Nvbm4sIHdoaWNoIHNheXMgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUKKyAgICAgICBkYXRhIGNvbm5lY3Rpb24gYW5kIHRoZXJlZm9yZSB3ZSdyZSBub3QgYWN0dWFsbHkgY29tcGxldGUgKi8KKyAgICAqY29tcGxldGVwID0gMDsKICAgfQogCiAgIGlmKGZ0cC0+dHJhbnNmZXIgPD0gRlRQVFJBTlNGRVJfSU5GTykgewpAQCAtMzU3MywxMyArMzU2MSw4IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAgIHJlc3VsdCA9IGZ0cF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgJmNvbXBsZXRlKTsKLSAgICAgIGlmKGZ0cGMtPndhaXRfZGF0YV9jb25uKQotICAgICAgICAvKiBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBGVFAgc3RhdGUgbWFjaGluZSBoZXJlLCAqY29tcGxldGUgd2lsbCBiZQotICAgICAgICAgICBUUlVFIGJ1dCBzbyBpcyBmdHBjLT53YWl0X2RhdGFfY29ubiwgd2hpY2ggc2F5cyB3ZSBuZWVkIHRvIHdhaXQgZm9yCi0gICAgICAgICAgIHRoZSBkYXRhIGNvbm5lY3Rpb24gYW5kIHRoZXJlZm9yZSB3ZSdyZSBub3QgYWN0dWFsbHkgY29tcGxldGUgKi8KLSAgICAgICAgKmNvbXBsZXRlcCA9IDA7Ci0gICAgICBlbHNlCi0gICAgICAgICpjb21wbGV0ZXAgPSAoaW50KWNvbXBsZXRlOworICAgICAgLyogZnRwYy0+d2FpdF9kYXRhX2Nvbm4gaXMgYWx3YXlzIGZhbHNlIGhlcmUgKi8KKyAgICAgICpjb21wbGV0ZXAgPSAoaW50KWNvbXBsZXRlOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIC8qIGRvd25sb2FkICovCkBAIC0zNjE5LDEwICszNjAyLDggQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgaWYoIXJlc3VsdCAmJiAoZnRwLT50cmFuc2ZlciAhPSBGVFBUUkFOU0ZFUl9CT0RZKSkKLSAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyLiBGSVg6IGl0IGZlZWxzIGxpa2UgYSBrbHVkZ2UgdG8gaGF2ZSB0aGlzIGhlcmUKLSAgICAgICB0b28hICovCi0gICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7CisgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7CiAKICAgaWYoIWZ0cGMtPndhaXRfZGF0YV9jb25uKSB7CiAgICAgLyogbm8gd2FpdGluZyBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiBzbyB0aGlzIGlzIG5vdyBjb21wbGV0ZSAqLwpAQCAtNDEwMCwxODYgKzQwODEsMTQyIEBACiAgIC8qIHRoZSBmdHAgc3RydWN0IGlzIGFscmVhZHkgaW5pdGVkIGluIGZ0cF9jb25uZWN0KCkgKi8KICAgc3RydWN0IEZUUCAqZnRwID0gZGF0YS0+cmVxLnByb3RvcDsKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7Ci0gIGNvbnN0IGNoYXIgKnNsYXNoX3BvczsgIC8qIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCAnLycgY2hhciBpbiBjdXJwb3MgKi8KLSAgY29uc3QgY2hhciAqcGF0aF90b191c2UgPSBmdHAtPnBhdGg7Ci0gIGNvbnN0IGNoYXIgKmN1cl9wb3M7Ci0gIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gTlVMTDsKLQotICBjdXJfcG9zID0gcGF0aF90b191c2U7IC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gcGF0aC4gcG9pbnQgYXQgdGhlIGJlZ2luIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBwYXRoIGNvbXBvbmVudCAqLworICBjb25zdCBjaGFyICpzbGFzaFBvcyA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmZpbGVOYW1lID0gTlVMTDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGNoYXIgKnJhd1BhdGggPSBOVUxMOyAvKiB1cmwtZGVjb2RlZCAicmF3IiBwYXRoICovCisgIHNpemVfdCBwYXRoTGVuID0gMDsKIAogICBmdHBjLT5jdGxfdmFsaWQgPSBGQUxTRTsKICAgZnRwYy0+Y3dkZmFpbCA9IEZBTFNFOwogCisgIC8qIHVybC1kZWNvZGUgZnRwIHBhdGggYmVmb3JlIGZ1cnRoZXIgZXZhbHVhdGlvbiAqLworICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBmdHAtPnBhdGgsIDAsICZyYXdQYXRoLCAmcGF0aExlbiwgVFJVRSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCiAgIHN3aXRjaChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QpIHsKLSAgY2FzZSBGVFBGSUxFX05PQ1dEOgotICAgIC8qIGZhc3Rlc3QsIGJ1dCBsZXNzIHN0YW5kYXJkLWNvbXBsaWFudCAqLworICAgIGNhc2UgRlRQRklMRV9OT0NXRDogLyogZmFzdGVzdCwgYnV0IGxlc3Mgc3RhbmRhcmQtY29tcGxpYW50ICovCiAKLSAgICAvKgotICAgICAgVGhlIGJlc3QgdGltZSB0byBjaGVjayB3aGV0aGVyIHRoZSBwYXRoIGlzIGEgZmlsZSBvciBkaXJlY3RvcnkgaXMgcmlnaHQKLSAgICAgIGhlcmUuIHNvOgotCi0gICAgICB0aGUgZmlyc3QgY29uZGl0aW9uIGluIHRoZSBpZigpIHJpZ2h0IGhlcmUsIGlzIHRoZXJlIGp1c3QgaW4gY2FzZQotICAgICAgc29tZW9uZSBkZWNpZGVzIHRvIHNldCBwYXRoIHRvIE5VTEwgb25lIGRheQotICAgKi8KLSAgICBpZihwYXRoX3RvX3VzZVswXSAmJgotICAgICAgIChwYXRoX3RvX3VzZVtzdHJsZW4ocGF0aF90b191c2UpIC0gMV0gIT0gJy8nKSApCi0gICAgICBmaWxlbmFtZSA9IHBhdGhfdG9fdXNlOyAgLyogdGhpcyBpcyBhIGZ1bGwgZmlsZSBwYXRoICovCi0gICAgLyoKLSAgICAgIGVsc2UgewotICAgICAgICBmdHBjLT5maWxlIGlzIG5vdCB1c2VkIGFueXdoZXJlIG90aGVyIHRoYW4gZm9yIG9wZXJhdGlvbnMgb24gYSBmaWxlLgotICAgICAgICBJbiBvdGhlciB3b3JkcywgbmV2ZXIgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLgotICAgICAgICBTbyB3ZSBjYW4gc2FmZWx5IGxlYXZlIGZpbGVuYW1lIGFzIE5VTEwgaGVyZSBhbmQgdXNlIGl0IGFzIGEKLSAgICAgICAgYXJndW1lbnQgaW4gZGlyL2ZpbGUgZGVjaXNpb25zLgotICAgICAgfQotICAgICovCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSBGVFBGSUxFX1NJTkdMRUNXRDoKLSAgICAvKiBnZXQgdGhlIGxhc3Qgc2xhc2ggKi8KLSAgICBpZighcGF0aF90b191c2VbMF0pIHsKLSAgICAgIC8qIG5vIGRpciwgbm8gZmlsZSAqLwotICAgICAgZnRwYy0+ZGlyZGVwdGggPSAwOworICAgICAgaWYoKHBhdGhMZW4gPiAwKSAmJiAocmF3UGF0aFtwYXRoTGVuIC0gMV0gIT0gJy8nKSkKKyAgICAgICAgICBmaWxlTmFtZSA9IHJhd1BhdGg7ICAvKiB0aGlzIGlzIGEgZnVsbCBmaWxlIHBhdGggKi8KKyAgICAgIC8qCisgICAgICAgIGVsc2U6IGZ0cGMtPmZpbGUgaXMgbm90IHVzZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBmb3Igb3BlcmF0aW9ucyBvbgorICAgICAgICAgICAgICBhIGZpbGUuIEluIG90aGVyIHdvcmRzLCBuZXZlciBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgIFNvIHdlIGNhbiBzYWZlbHkgbGVhdmUgZmlsZW5hbWUgYXMgTlVMTCBoZXJlIGFuZCB1c2UgaXQgYXMgYQorICAgICAgICAgICAgICBhcmd1bWVudCBpbiBkaXIvZmlsZSBkZWNpc2lvbnMuCisgICAgICAqLwogICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNsYXNoX3BvcyA9IHN0cnJjaHIoY3VyX3BvcywgJy8nKTsKLSAgICBpZihzbGFzaF9wb3MgfHwgISpjdXJfcG9zKSB7Ci0gICAgICBzaXplX3QgZGlybGVuID0gc2xhc2hfcG9zLWN1cl9wb3M7Ci0gICAgICBDVVJMY29kZSByZXN1bHQ7CiAKLSAgICAgIGZ0cGMtPmRpcnMgPSBjYWxsb2MoMSwgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKLSAgICAgIGlmKCFmdHBjLT5kaXJzKQotICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBjYXNlIEZUUEZJTEVfU0lOR0xFQ1dEOgorICAgICAgc2xhc2hQb3MgPSBzdHJyY2hyKHJhd1BhdGgsICcvJyk7CisgICAgICBpZihzbGFzaFBvcykgeworICAgICAgICAvKiBnZXQgcGF0aCBiZWZvcmUgbGFzdCBzbGFzaCwgZXhjZXB0IGZvciAvICovCisgICAgICAgIHNpemVfdCBkaXJsZW4gPSBzbGFzaFBvcyAtIHJhd1BhdGg7CisgICAgICAgIGlmKGRpcmxlbiA9PSAwKQorICAgICAgICAgICAgZGlybGVuKys7CiAKLSAgICAgIGlmKCFkaXJsZW4pCi0gICAgICAgIGRpcmxlbisrOworICAgICAgICBmdHBjLT5kaXJzID0gY2FsbG9jKDEsIHNpemVvZihmdHBjLT5kaXJzWzBdKSk7CisgICAgICAgIGlmKCFmdHBjLT5kaXJzKSB7CisgICAgICAgICAgZnJlZShyYXdQYXRoKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQogCi0gICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBzbGFzaF9wb3MgPyBjdXJfcG9zIDogIi8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2hfcG9zID8gZGlybGVuIDogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBjLT5kaXJzWzBdLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgZnJlZWRpcnMoZnRwYyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGZ0cGMtPmRpcnNbMF0gPSBjYWxsb2MoMSwgZGlybGVuICsgMSk7CisgICAgICAgIGlmKCFmdHBjLT5kaXJzWzBdKSB7CisgICAgICAgICAgZnJlZShyYXdQYXRoKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkoZnRwYy0+ZGlyc1swXSwgcmF3UGF0aCwgZGlybGVuKTsKKyAgICAgICAgZnRwYy0+ZGlyZGVwdGggPSAxOyAvKiB3ZSBjb25zaWRlciBpdCB0byBiZSBhIHNpbmdsZSBkaXIgKi8KKyAgICAgICAgZmlsZU5hbWUgPSBzbGFzaFBvcyArIDE7IC8qIHJlc3QgaXMgZmlsZSBuYW1lICovCiAgICAgICB9Ci0gICAgICBmdHBjLT5kaXJkZXB0aCA9IDE7IC8qIHdlIGNvbnNpZGVyIGl0IHRvIGJlIGEgc2luZ2xlIGRpciAqLwotICAgICAgZmlsZW5hbWUgPSBzbGFzaF9wb3MgPyBzbGFzaF9wb3MgKyAxIDogY3VyX3BvczsgLyogcmVzdCBpcyBmaWxlIG5hbWUgKi8KLSAgICB9Ci0gICAgZWxzZQotICAgICAgZmlsZW5hbWUgPSBjdXJfcG9zOyAgLyogdGhpcyBpcyBhIGZpbGUgbmFtZSBvbmx5ICovCi0gICAgYnJlYWs7CisgICAgICBlbHNlCisgICAgICAgIGZpbGVOYW1lID0gcmF3UGF0aDsgLyogZmlsZSBuYW1lIG9ubHkgKG9yIGVtcHR5KSAqLworICAgICAgYnJlYWs7CiAKLSAgZGVmYXVsdDogLyogYWxsb3cgcHJldHR5IG11Y2ggYW55dGhpbmcgKi8KLSAgY2FzZSBGVFBGSUxFX01VTFRJQ1dEOgotICAgIGZ0cGMtPmRpcmRlcHRoID0gMDsKLSAgICBmdHBjLT5kaXJhbGxvYyA9IDU7IC8qIGRlZmF1bHQgZGlyIGRlcHRoIHRvIGFsbG9jYXRlICovCi0gICAgZnRwYy0+ZGlycyA9IGNhbGxvYyhmdHBjLT5kaXJhbGxvYywgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKLSAgICBpZighZnRwYy0+ZGlycykKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGRlZmF1bHQ6IC8qIGFsbG93IHByZXR0eSBtdWNoIGFueXRoaW5nICovCisgICAgY2FzZSBGVFBGSUxFX01VTFRJQ1dEOiB7CisgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uOiBiZWdpbiBvZiBuZXh0IHBhdGggY29tcG9uZW50ICovCisgICAgICBjb25zdCBjaGFyICpjdXJQb3MgPSByYXdQYXRoOwogCi0gICAgLyogd2UgaGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3IgbGlzdGluZyB0aGUgcm9vdCBkaXIgb25seSAqLwotICAgIGlmKCFzdHJjbXAocGF0aF90b191c2UsICIvIikpIHsKLSAgICAgIGN1cl9wb3MrKzsgLyogbWFrZSBpdCBwb2ludCB0byB0aGUgemVybyBieXRlICovCi0gICAgICBmdHBjLT5kaXJzWzBdID0gc3RyZHVwKCIvIik7Ci0gICAgICBmdHBjLT5kaXJkZXB0aCsrOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIHBhcnNlIHRoZSBVUkwgcGF0aCBpbnRvIHNlcGFyYXRlIHBhdGggY29tcG9uZW50cyAqLwotICAgICAgd2hpbGUoKHNsYXNoX3BvcyA9IHN0cmNocihjdXJfcG9zLCAnLycpKSAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIDEgb3IgMCBwb2ludGVyIG9mZnNldCB0byBpbmRpY2F0ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgKi8KLSAgICAgICAgc3NpemVfdCBhYnNvbHV0ZV9kaXIgPSAoKGN1cl9wb3MgLSBmdHAtPnBhdGggPiAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwYy0+ZGlyZGVwdGggPT0gMCkpPzE6MDsKKyAgICAgIGludCBkaXJBbGxvYyA9IDA7IC8qIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCBmb3IgdGhlICdkaXJzJyBhcnJheSAqLworICAgICAgY29uc3QgY2hhciAqc3RyID0gcmF3UGF0aDsKKyAgICAgIGZvcig7ICpzdHIgIT0gMDsgKytzdHIpCisgICAgICAgIGlmICgqc3RyID09ICcvJykKKyAgICAgICAgICArK2RpckFsbG9jOwogCi0gICAgICAgIC8qIHNlZWsgb3V0IHRoZSBuZXh0IHBhdGggY29tcG9uZW50ICovCi0gICAgICAgIGlmKHNsYXNoX3Bvcy1jdXJfcG9zKSB7CisgICAgICBpZihkaXJBbGxvYyA+IDApIHsKKyAgICAgICAgZnRwYy0+ZGlycyA9IGNhbGxvYyhkaXJBbGxvYywgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKKyAgICAgICAgaWYoIWZ0cGMtPmRpcnMpIHsKKyAgICAgICAgICBmcmVlKHJhd1BhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CisKKyAgICAgICAgLyogcGFyc2UgdGhlIFVSTCBwYXRoIGludG8gc2VwYXJhdGUgcGF0aCBjb21wb25lbnRzICovCisgICAgICAgIHdoaWxlKChzbGFzaFBvcyA9IHN0cmNocihjdXJQb3MsICcvJykpICE9IE5VTEwpIHsKKyAgICAgICAgICBzaXplX3QgY29tcExlbiA9IHNsYXNoUG9zIC0gY3VyUG9zOworCisgICAgICAgICAgLyogcGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoOiBhZGQgdGhhdCBhcyBhIGRpcmVjdG9yeSAqLworICAgICAgICAgIGlmKChjb21wTGVuID09IDApICYmIChmdHBjLT5kaXJkZXB0aCA9PSAwKSkKKyAgICAgICAgICAgICsrY29tcExlbjsKKwogICAgICAgICAgIC8qIHdlIHNraXAgZW1wdHkgcGF0aCBjb21wb25lbnRzLCBsaWtlICJ4Ly95IiBzaW5jZSB0aGUgRlRQIGNvbW1hbmQKICAgICAgICAgICAgICBDV0QgcmVxdWlyZXMgYSBwYXJhbWV0ZXIgYW5kIGEgbm9uLWV4aXN0ZW50IHBhcmFtZXRlciBhKSBkb2Vzbid0CiAgICAgICAgICAgICAgd29yayBvbiBtYW55IHNlcnZlcnMgYW5kIGIpIGhhcyBubyBlZmZlY3Qgb24gdGhlIG90aGVycy4gKi8KLSAgICAgICAgICBzaXplX3QgbGVuID0gc2xhc2hfcG9zIC0gY3VyX3BvcyArIGFic29sdXRlX2RpcjsKLSAgICAgICAgICBDVVJMY29kZSByZXN1bHQgPQotICAgICAgICAgICAgQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgY3VyX3BvcyAtIGFic29sdXRlX2RpciwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGhdLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7Ci0gICAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgICBmcmVlZGlycyhmdHBjKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGN1cl9wb3MgPSBzbGFzaF9wb3MgKyAxOyAvKiBqdW1wIHRvIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgICBpZighZnRwYy0+ZGlyZGVwdGgpIHsKLSAgICAgICAgICAgIC8qIHBhdGggc3RhcnRzIHdpdGggYSBzbGFzaCwgYWRkIHRoYXQgYXMgYSBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgIGZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGhdID0gc3RyZHVwKCIvIik7Ci0gICAgICAgICAgICBpZighZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aCsrXSkgeyAvKiBydW4gb3V0IG9mIG1lbW9yeSAuLi4gKi8KLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIm5vIG1lbW9yeSIpOwotICAgICAgICAgICAgICBmcmVlZGlycyhmdHBjKTsKKyAgICAgICAgICBpZihjb21wTGVuID4gMCkgeworICAgICAgICAgICAgY2hhciAqY29tcCA9IGNhbGxvYygxLCBjb21wTGVuICsgMSk7CisgICAgICAgICAgICBpZighY29tcCkgeworICAgICAgICAgICAgICBmcmVlKHJhd1BhdGgpOwogICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cm5jcHkoY29tcCwgY3VyUG9zLCBjb21wTGVuKTsKKyAgICAgICAgICAgIGZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGgrK10gPSBjb21wOwogICAgICAgICAgIH0KLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cl9wb3MgPSBzbGFzaF9wb3MgKyAxOyAvKiBqdW1wIHRvIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgaWYoKytmdHBjLT5kaXJkZXB0aCA+PSBmdHBjLT5kaXJhbGxvYykgewotICAgICAgICAgIC8qIGVubGFyZ2UgYXJyYXkgKi8KLSAgICAgICAgICBjaGFyICoqYmlnZ2VyOwotICAgICAgICAgIGZ0cGMtPmRpcmFsbG9jICo9IDI7IC8qIGRvdWJsZSB0aGUgc2l6ZSBlYWNoIHRpbWUgKi8KLSAgICAgICAgICBiaWdnZXIgPSByZWFsbG9jKGZ0cGMtPmRpcnMsIGZ0cGMtPmRpcmFsbG9jICogc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKLSAgICAgICAgICBpZighYmlnZ2VyKSB7Ci0gICAgICAgICAgICBmcmVlZGlycyhmdHBjKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgIH0KLSAgICAgICAgICBmdHBjLT5kaXJzID0gYmlnZ2VyOworICAgICAgICAgIGN1clBvcyA9IHNsYXNoUG9zICsgMTsKICAgICAgICAgfQogICAgICAgfQorICAgICAgREVCVUdBU1NFUlQoZnRwYy0+ZGlyZGVwdGggPD0gZGlyQWxsb2MpOworICAgICAgZmlsZU5hbWUgPSBjdXJQb3M7IC8qIHRoZSByZXN0IGlzIHRoZSBmaWxlIG5hbWUgKG9yIGVtcHR5KSAqLwogICAgIH0KLSAgICBmaWxlbmFtZSA9IGN1cl9wb3M7ICAvKiB0aGUgcmVzdCBpcyB0aGUgZmlsZSBuYW1lICovCiAgICAgYnJlYWs7CiAgIH0gLyogc3dpdGNoICovCiAKLSAgaWYoZmlsZW5hbWUgJiYgKmZpbGVuYW1lKSB7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0ID0KLSAgICAgIEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZpbGVuYW1lLCAwLCAgJmZ0cGMtPmZpbGUsIE5VTEwsIFRSVUUpOwotCi0gICAgaWYocmVzdWx0KSB7Ci0gICAgICBmcmVlZGlycyhmdHBjKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9CisgIGlmKGZpbGVOYW1lICYmICpmaWxlTmFtZSkKKyAgICBmdHBjLT5maWxlID0gc3RyZHVwKGZpbGVOYW1lKTsKICAgZWxzZQotICAgIGZ0cGMtPmZpbGUgPSBOVUxMOyAvKiBpbnN0ZWFkIG9mIHBvaW50IHRvIGEgemVybyBieXRlLCB3ZSBtYWtlIGl0IGEgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyICovCisgICAgZnRwYy0+ZmlsZSA9IE5VTEw7IC8qIGluc3RlYWQgb2YgcG9pbnQgdG8gYSB6ZXJvIGJ5dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UgbWFrZSBpdCBhIE5VTEwgcG9pbnRlciAqLwogCiAgIGlmKGRhdGEtPnNldC51cGxvYWQgJiYgIWZ0cGMtPmZpbGUgJiYgKGZ0cC0+dHJhbnNmZXIgPT0gRlRQVFJBTlNGRVJfQk9EWSkpIHsKICAgICAvKiBXZSBuZWVkIGEgZmlsZSBuYW1lIHdoZW4gdXBsb2FkaW5nLiBSZXR1cm4gZXJyb3IhICovCiAgICAgZmFpbGYoZGF0YSwgIlVwbG9hZGluZyB0byBhIFVSTCB3aXRob3V0IGEgZmlsZSBuYW1lISIpOworICAgIGZyZWUocmF3UGF0aCk7CiAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CiAgIH0KIAogICBmdHBjLT5jd2Rkb25lID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gbm90IGRvbmUgKi8KIAotICBpZihmdHBjLT5wcmV2cGF0aCkgewotICAgIC8qIHByZXZwYXRoIGlzICJyYXciIHNvIHdlIGNvbnZlcnQgdGhlIGlucHV0IHBhdGggYmVmb3JlIHdlIGNvbXBhcmUgdGhlCi0gICAgICAgc3RyaW5ncyAqLwotICAgIHNpemVfdCBkbGVuOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0ID0KLSAgICAgIEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZ0cC0+cGF0aCwgMCwgJnBhdGgsICZkbGVuLCBUUlVFKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYgKHJhd1BhdGhbMF0gPT0gJy8nKSkKKyAgICBmdHBjLT5jd2Rkb25lID0gVFJVRTsgLyogc2tpcCBDV0QgZm9yIGFic29sdXRlIHBhdGhzICovCisgIGVsc2UgeyAvKiBuZXdseSBjcmVhdGVkIEZUUCBjb25uZWN0aW9ucyBhcmUgYWxyZWFkeSBpbiBlbnRyeSBwYXRoICovCisgICAgY29uc3QgY2hhciAqb2xkUGF0aCA9IGNvbm4tPmJpdHMucmV1c2UgPyBmdHBjLT5wcmV2cGF0aCA6ICIiOworICAgIGlmKG9sZFBhdGgpIHsKKyAgICAgIHNpemVfdCBuID0gcGF0aExlbjsKKyAgICAgIGlmKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKQorICAgICAgICBuID0gMDsgLyogQ1dEIHRvIGVudHJ5IGZvciByZWxhdGl2ZSBwYXRocyAqLworICAgICAgZWxzZQorICAgICAgICBuIC09IGZ0cGMtPmZpbGU/c3RybGVuKGZ0cGMtPmZpbGUpOjA7CiAKLSAgICBkbGVuIC09IGZ0cGMtPmZpbGU/c3RybGVuKGZ0cGMtPmZpbGUpOjA7Ci0gICAgaWYoKGRsZW4gPT0gc3RybGVuKGZ0cGMtPnByZXZwYXRoKSkgJiYKLSAgICAgICAhc3RybmNtcChwYXRoLCBmdHBjLT5wcmV2cGF0aCwgZGxlbikgJiYKLSAgICAgICAoZnRwYy0+cHJldm1ldGhvZCA9PSBkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QpKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiUmVxdWVzdCBoYXMgc2FtZSBwYXRoIGFzIHByZXZpb3VzIHRyYW5zZmVyXG4iKTsKLSAgICAgIGZ0cGMtPmN3ZGRvbmUgPSBUUlVFOworICAgICAgaWYoKHN0cmxlbihvbGRQYXRoKSA9PSBuKSAmJiAhc3RybmNtcChyYXdQYXRoLCBvbGRQYXRoLCBuKSkgeworICAgICAgICBpbmZvZihkYXRhLCAiUmVxdWVzdCBoYXMgc2FtZSBwYXRoIGFzIHByZXZpb3VzIHRyYW5zZmVyXG4iKTsKKyAgICAgICAgZnRwYy0+Y3dkZG9uZSA9IFRSVUU7CisgICAgICB9CiAgICAgfQotICAgIGZyZWUocGF0aCk7CiAgIH0KIAorICBmcmVlKHJhd1BhdGgpOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKQEAgLTQ0MjMsMTggKzQzNjAsNiBAQAogICAvKiBnZXQgc29tZSBpbml0aWFsIGRhdGEgaW50byB0aGUgZnRwIHN0cnVjdCAqLwogICBmdHAtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfQk9EWTsKICAgZnRwLT5kb3dubG9hZHNpemUgPSAwOwotCi0gIC8qIE5vIG5lZWQgdG8gZHVwbGljYXRlIHVzZXIrcGFzc3dvcmQsIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3Qgd29uJ3QgY2hhbmdlCi0gICAgIGR1cmluZyBhIHNlc3Npb24sIGJ1dCB3ZSByZS1pbml0IHRoZW0gaGVyZSBzaW5jZSBvbiBzdWJzZXF1ZW50IGluaXRzCi0gICAgIHNpbmNlIHRoZSBjb25uIHN0cnVjdCBtYXkgaGF2ZSBjaGFuZ2VkIG9yIGJlZW4gcmVwbGFjZWQuCi0gICovCi0gIGZ0cC0+dXNlciA9IGNvbm4tPnVzZXI7Ci0gIGZ0cC0+cGFzc3dkID0gY29ubi0+cGFzc3dkOwotICBpZihpc0JhZEZ0cFN0cmluZyhmdHAtPnVzZXIpKQotICAgIHJldHVybiBDVVJMRV9VUkxfTUFMRk9STUFUOwotICBpZihpc0JhZEZ0cFN0cmluZyhmdHAtPnBhc3N3ZCkpCi0gICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7Ci0KICAgY29ubi0+cHJvdG8uZnRwYy5rbm93bl9maWxlc2l6ZSA9IC0xOyAvKiB1bmtub3duIHNpemUgZm9yIG5vdyAqLwogCiAgIHJldHVybiBDVVJMRV9PSzsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmgKaW5kZXggODI4ZDY5YS4uOTg0MzQ3ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEwMiw4ICsxMDIsNiBAQAogICAgcGVyaGFwcyB0aGUgQ3VybF9lYXN5IGlzIGNoYW5nZWQgYmV0d2VlbiB0aGUgdGltZXMgdGhlIGNvbm5lY3Rpb24gaXMKICAgIHVzZWQuICovCiBzdHJ1Y3QgRlRQIHsKLSAgY2hhciAqdXNlcjsgICAgLyogdXNlciBuYW1lIHN0cmluZyAqLwotICBjaGFyICpwYXNzd2Q7ICAvKiBwYXNzd29yZCBzdHJpbmcgKi8KICAgY2hhciAqcGF0aDsgICAgLyogcG9pbnRzIHRvIHRoZSB1cmxwaWVjZXMgc3RydWN0IGZpZWxkICovCiAgIGNoYXIgKnBhdGhhbGxvYzsgLyogaWYgbm9uLU5VTEwgYSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBwYXRoICovCiAKQEAgLTEyMSw4ICsxMTksNyBAQAogICBjaGFyICplbnRyeXBhdGg7IC8qIHRoZSBQV0QgcmVwbHkgd2hlbiB3ZSBsb2dnZWQgb24gKi8KICAgY2hhciAqKmRpcnM7ICAgLyogcmVhbGxvYygpZWQgYXJyYXkgZm9yIHBhdGggY29tcG9uZW50cyAqLwogICBpbnQgZGlyZGVwdGg7ICAvKiBudW1iZXIgb2YgZW50cmllcyB1c2VkIGluIHRoZSAnZGlycycgYXJyYXkgKi8KLSAgaW50IGRpcmFsbG9jOyAgLyogbnVtYmVyIG9mIGVudHJpZXMgYWxsb2NhdGVkIGZvciB0aGUgJ2RpcnMnIGFycmF5ICovCi0gIGNoYXIgKmZpbGU7ICAgIC8qIGRlY29kZWQgZmlsZSAqLworICBjaGFyICpmaWxlOyAgICAvKiB1cmwtZGVjb2RlZCBmaWxlIG5hbWUgKG9yIHBhdGgpICovCiAgIGJvb2wgZG9udF9jaGVjazsgIC8qIFNldCB0byBUUlVFIHRvIHByZXZlbnQgdGhlIGZpbmFsIChwb3N0LXRyYW5zZmVyKQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNpemUgYW5kIDIyNi8yNTAgc3RhdHVzIGNoZWNrLiBJdCBzaG91bGQgc3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCB0aGUgbGluZSwganVzdCBpZ25vcmUgdGhlIHJlc3VsdC4gKi8KQEAgLTEzNSw4ICsxMzIsNyBAQAogICBib29sIGN3ZGZhaWw7ICAgICAvKiBzZXQgVFJVRSBpZiBhIENXRCBjb21tYW5kIGZhaWxzLCBhcyB0aGVuIHdlIG11c3QgcHJldmVudAogICAgICAgICAgICAgICAgICAgICAgICBjYWNoaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAqLwogICBib29sIHdhaXRfZGF0YV9jb25uOyAvKiB0aGlzIGlzIHNldCBUUlVFIGlmIGRhdGEgY29ubmVjdGlvbiBpcyB3YWl0ZWQgKi8KLSAgY2hhciAqcHJldnBhdGg7ICAgLyogY29ubi0+cGF0aCBmcm9tIHRoZSBwcmV2aW91cyB0cmFuc2ZlciAqLwotICBjdXJsX2Z0cGZpbGUgcHJldm1ldGhvZDsgLyogZnRwIG1ldGhvZCBpbiBwcmV2aW91cyB0cmFuc2ZlciAgKi8KKyAgY2hhciAqcHJldnBhdGg7ICAgLyogdXJsLWRlY29kZWQgY29ubi0+cGF0aCBmcm9tIHRoZSBwcmV2aW91cyB0cmFuc2ZlciAqLwogICBjaGFyIHRyYW5zZmVydHlwZTsgLyogc2V0IGJ5IGZ0cF90cmFuc2ZlcnR5cGUgZm9yIHVzZSBieSBDdXJsX2NsaWVudF93cml0ZSgpYQogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVycyAoQS9JIG9yIHplcm8pICovCiAgIGludCBjb3VudDE7IC8qIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyIGZvciB0aGUgc3RhdGUgbWFjaGluZSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5jCmluZGV4IGM0ZWI0MzcuLmYzOTlhNGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHBsaXN0cGFyc2VyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuaAppbmRleCA4MTI4ODg3Li5iMzRhZTliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHBsaXN0cGFyc2VyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRlbnYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCmluZGV4IDg5ZDE4MWQuLjkzODViOGYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywyNSArMjcsNDggQEAKIAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKLXN0YXRpYwotY2hhciAqR2V0RW52KGNvbnN0IGNoYXIgKnZhcmlhYmxlKQorc3RhdGljIGNoYXIgKkdldEVudihjb25zdCBjaGFyICp2YXJpYWJsZSkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoQ1VSTF9XSU5ET1dTX0FQUCkKICAgKHZvaWQpdmFyaWFibGU7CiAgIHJldHVybiBOVUxMOwotI2Vsc2UKLSNpZmRlZiBXSU4zMgotICBjaGFyIGVudltNQVhfUEFUSF07IC8qIE1BWF9QQVRIIGlzIGZyb20gd2luZGVmLmggKi8KLSAgY2hhciAqdGVtcCA9IGdldGVudih2YXJpYWJsZSk7Ci0gIGVudlswXSA9ICdcMCc7Ci0gIGlmKHRlbXAgIT0gTlVMTCkKLSAgICBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBKHRlbXAsIGVudiwgc2l6ZW9mKGVudikpOwotICByZXR1cm4gKGVudlswXSAhPSAnXDAnKT9zdHJkdXAoZW52KTpOVUxMOworI2VsaWYgZGVmaW5lZChXSU4zMikKKyAgLyogVGhpcyB1c2VzIFdpbmRvd3MgQVBJIGluc3RlYWQgb2YgQyBydW50aW1lIGdldGVudigpIHRvIGdldCB0aGUgZW52aXJvbm1lbnQKKyAgICAgdmFyaWFibGUgc2luY2Ugc29tZSBjaGFuZ2VzIGFyZW4ndCBhbHdheXMgdmlzaWJsZSB0byB0aGUgbGF0dGVyLiAjNDc3NCAqLworICBjaGFyICpidWYgPSBOVUxMOworICBjaGFyICp0bXA7CisgIERXT1JEIGJ1ZnNpemU7CisgIERXT1JEIHJjID0gMTsKKyAgY29uc3QgRFdPUkQgbWF4ID0gMzI3Njg7IC8qIG1heCBlbnYgdmFyIHNpemUgZnJvbSBNU0NSVCBzb3VyY2UgKi8KKworICBmb3IoOzspIHsKKyAgICB0bXAgPSByZWFsbG9jKGJ1ZiwgcmMpOworICAgIGlmKCF0bXApIHsKKyAgICAgIGZyZWUoYnVmKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGJ1ZiA9IHRtcDsKKyAgICBidWZzaXplID0gcmM7CisKKyAgICAvKiBJdCdzIHBvc3NpYmxlIGZvciByYyB0byBiZSAwIGlmIHRoZSB2YXJpYWJsZSB3YXMgZm91bmQgYnV0IGVtcHR5LgorICAgICAgIFNpbmNlIGdldGVudiBkb2Vzbid0IG1ha2UgdGhhdCBkaXN0aW5jdGlvbiB3ZSBpZ25vcmUgaXQgYXMgd2VsbC4gKi8KKyAgICByYyA9IEdldEVudmlyb25tZW50VmFyaWFibGVBKHZhcmlhYmxlLCBidWYsIGJ1ZnNpemUpOworICAgIGlmKCFyYyB8fCByYyA9PSBidWZzaXplIHx8IHJjID4gbWF4KSB7CisgICAgICBmcmVlKGJ1Zik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBpZiByYyA8IGJ1ZnNpemUgdGhlbiByYyBpcyBieXRlcyB3cml0dGVuIG5vdCBpbmNsdWRpbmcgbnVsbCAqLworICAgIGlmKHJjIDwgYnVmc2l6ZSkKKyAgICAgIHJldHVybiBidWY7CisKKyAgICAvKiBlbHNlIHJjIGlzIGJ5dGVzIG5lZWRlZCwgdHJ5IGFnYWluICovCisgIH0KICNlbHNlCiAgIGNoYXIgKmVudiA9IGdldGVudih2YXJpYWJsZSk7CiAgIHJldHVybiAoZW52ICYmIGVudlswXSk/c3RyZHVwKGVudik6TlVMTDsKICNlbmRpZgotI2VuZGlmCiB9CiAKIGNoYXIgKmN1cmxfZ2V0ZW52KGNvbnN0IGNoYXIgKnYpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmMKaW5kZXggZTExOGRhOC4uMmI4ZjIzMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZ2V0aW5mby5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uYwpAQCAtMjM1LDYgKzIzNSw5IEBACiAgICAgY2FzZSAyMDoKICAgICAgICpwYXJhbV9sb25ncCA9IENVUkxfSFRUUF9WRVJTSU9OXzJfMDsKICAgICAgIGJyZWFrOworICAgIGNhc2UgMzA6CisgICAgICAqcGFyYW1fbG9uZ3AgPSBDVVJMX0hUVFBfVkVSU0lPTl8zOworICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICpwYXJhbV9sb25ncCA9IENVUkxfSFRUUF9WRVJTSU9OX05PTkU7CiAgICAgICBicmVhazsKQEAgLTI0Myw3ICsyNDYsNiBAQAogICBjYXNlIENVUkxJTkZPX1BST1RPQ09MOgogICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPmluZm8uY29ubl9wcm90b2NvbDsKICAgICBicmVhazsKLQogICBkZWZhdWx0OgogICAgIHJldHVybiBDVVJMRV9VTktOT1dOX09QVElPTjsKICAgfQpAQCAtMzAxLDcgKzMwMyw5IEBACiAgIGNhc2UgQ1VSTElORk9fUkVESVJFQ1RfVElNRV9UOgogICAgICpwYXJhbV9vZmZ0ID0gZGF0YS0+cHJvZ3Jlc3MudF9yZWRpcmVjdDsKICAgICBicmVhazsKLQorICBjYXNlIENVUkxJTkZPX1JFVFJZX0FGVEVSOgorICAgICpwYXJhbV9vZmZ0ID0gZGF0YS0+aW5mby5yZXRyeV9hZnRlcjsKKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICByZXR1cm4gQ1VSTEVfVU5LTk9XTl9PUFRJT047CiAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uaAppbmRleCBhZWNmNzE3Li44ZDJhZjQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZ2V0aW5mby5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nb3BoZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCmluZGV4IDUwMWM5OTAuLmRlYzI1NTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9oYXNoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9oYXNoLmgKaW5kZXggOTBhMjVkMS4uNTU4ZDBmNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaGFzaC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hhc2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODAsNyArODAsNyBAQAogdm9pZCAqQ3VybF9oYXNoX3BpY2soc3RydWN0IGN1cmxfaGFzaCAqLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuKTsKIHZvaWQgQ3VybF9oYXNoX2FwcGx5KHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2IpKHZvaWQgKnVzZXIsIHZvaWQgKnB0cikpOwotaW50IEN1cmxfaGFzaF9jb3VudChzdHJ1Y3QgY3VybF9oYXNoICpoKTsKKyNkZWZpbmUgQ3VybF9oYXNoX2NvdW50KGgpICgoaCktPnNpemUpCiB2b2lkIEN1cmxfaGFzaF9kZXN0cm95KHN0cnVjdCBjdXJsX2hhc2ggKmgpOwogdm9pZCBDdXJsX2hhc2hfY2xlYW4oc3RydWN0IGN1cmxfaGFzaCAqaCk7CiB2b2lkIEN1cmxfaGFzaF9jbGVhbl93aXRoX2NyaXRlcml1bShzdHJ1Y3QgY3VybF9oYXNoICpoLCB2b2lkICp1c2VyLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG1hYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG1hYy5jCmluZGV4IGJmNDllYmUuLmFlNjg4MjcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2htYWMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9obWFjLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImN1cmxfaG1hYy5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKIAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKQEAgLTEyOSw0ICsxMzAsNDAgQEAKICAgcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBDdXJsX2htYWNpdCgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgSE1BQyBoYXNoLCBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dCBkYXRhLCBnaXZlbgorICogdGhlIHNwZWNpZmllZCBoYXNoIGZ1bmN0aW9uIGFuZCBrZXkuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBoYXNocGFyYW1zIFtpbl0gICAgIC0gVGhlIGhhc2ggZnVuY3Rpb24gKEN1cmxfSE1BQ19NRDUpLgorICoga2V5ICAgICAgICBbaW5dICAgICAtIFRoZSBrZXkgdG8gdXNlLgorICoga2V5bGVuICAgICBbaW5dICAgICAtIFRoZSBsZW5ndGggb2YgdGhlIGtleS4KKyAqIGRhdGEgICAgICAgW2luXSAgICAgLSBUaGUgZGF0YSB0byBlbmNyeXB0LgorICogZGF0YWxlbiAgICBbaW5dICAgICAtIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEuCisgKiBvdXRwdXQgICAgIFtpbi9vdXRdIC0gVGhlIG91dHB1dCBidWZmZXIuCisgKgorICogUmV0dXJucyBDVVJMRV9PSyBvbiBzdWNjZXNzLgorICovCitDVVJMY29kZSBDdXJsX2htYWNpdChjb25zdCBITUFDX3BhcmFtcyAqaGFzaHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3Qgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGNvbnN0IHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KQoreworICBITUFDX2NvbnRleHQgKmN0eHQgPSBDdXJsX0hNQUNfaW5pdChoYXNocGFyYW1zLCBrZXksIGN1cmx4X3V6dG91aShrZXlsZW4pKTsKKworICBpZighY3R4dCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBVcGRhdGUgdGhlIGRpZ2VzdCB3aXRoIHRoZSBnaXZlbiBjaGFsbGVuZ2UgKi8KKyAgQ3VybF9ITUFDX3VwZGF0ZShjdHh0LCBkYXRhLCBjdXJseF91enRvdWkoZGF0YWxlbikpOworCisgIC8qIEZpbmFsaXNlIHRoZSBkaWdlc3QgKi8KKyAgQ3VybF9ITUFDX2ZpbmFsKGN0eHQsIG91dHB1dCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RjaGVjay5jCmluZGV4IDExNWQyNGIuLjllMGRiMDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RjaGVjay5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RjaGVjay5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RjaGVjay5oCmluZGV4IGY1NjJkZjkuLjljMTgwODUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RjaGVjay5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RjaGVjay5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5jCmluZGV4IGNmMzNlZDguLmMwZmViNzkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKICNpbmNsdWRlICJtdWx0aWlmLmgiCiAjaW5jbHVkZSAiZG9oLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKQEAgLTQ4MiwxNiArNDgzLDE2IEBACiAgKiBDVVJMUkVTT0xWX1BFTkRJTkcgICgxKSA9IHdhaXRpbmcgZm9yIHJlc3BvbnNlLCBubyBwb2ludGVyCiAgKi8KIAotaW50IEN1cmxfcmVzb2x2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICBib29sIGFsbG93RE9ILAotICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5KQorZW51bSByZXNvbHZlX3QgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dET0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSkKIHsKICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMgPSBOVUxMOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgQ1VSTGNvZGUgcmVzdWx0OwotICBpbnQgcmMgPSBDVVJMUkVTT0xWX0VSUk9SOyAvKiBkZWZhdWx0IHRvIGZhaWx1cmUgKi8KKyAgZW51bSByZXNvbHZlX3QgcmMgPSBDVVJMUkVTT0xWX0VSUk9SOyAvKiBkZWZhdWx0IHRvIGZhaWx1cmUgKi8KIAogICAqZW50cnkgPSBOVUxMOwogCkBAIC01MTIsMTMgKzUxMywxMSBAQAogICBpZighZG5zKSB7CiAgICAgLyogVGhlIGVudHJ5IHdhcyBub3QgaW4gdGhlIGNhY2hlLiBSZXNvbHZlIGl0IHRvIElQIGFkZHJlc3MgKi8KIAotICAgIEN1cmxfYWRkcmluZm8gKmFkZHI7CisgICAgQ3VybF9hZGRyaW5mbyAqYWRkciA9IE5VTEw7CiAgICAgaW50IHJlc3B3YWl0ID0gMDsKLQotICAgIC8qIENoZWNrIHdoYXQgSVAgc3BlY2lmaWNzIHRoZSBhcHAgaGFzIHJlcXVlc3RlZCBhbmQgaWYgd2UgY2FuIHByb3ZpZGUgaXQuCi0gICAgICogSWYgbm90LCBiYWlsIG91dC4gKi8KLSAgICBpZighQ3VybF9pcHZhbGlkKGNvbm4pKQotICAgICAgcmV0dXJuIENVUkxSRVNPTFZfRVJST1I7CisjaWZuZGVmIFVTRV9SRVNPTFZFX09OX0lQUworICAgIHN0cnVjdCBpbl9hZGRyIGluOworI2VuZGlmCiAKICAgICAvKiBub3RpZnkgdGhlIHJlc29sdmVyIHN0YXJ0IGNhbGxiYWNrICovCiAgICAgaWYoZGF0YS0+c2V0LnJlc29sdmVyX3N0YXJ0KSB7CkBAIC01MzEsMjAgKzUzMCw0MyBAQAogICAgICAgICByZXR1cm4gQ1VSTFJFU09MVl9FUlJPUjsKICAgICB9CiAKLSAgICBpZihhbGxvd0RPSCAmJiBkYXRhLT5zZXQuZG9oKSB7Ci0gICAgICBhZGRyID0gQ3VybF9kb2goY29ubiwgaG9zdG5hbWUsIHBvcnQsICZyZXNwd2FpdCk7CisjaWZuZGVmIFVTRV9SRVNPTFZFX09OX0lQUworICAgIC8qIEZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NCBhZGRyZXNzIHN0cmluZyAqLworICAgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKKyAgICAgIC8qIFRoaXMgaXMgYSBkb3R0ZWQgSVAgYWRkcmVzcyAxMjMuMTIzLjEyMy4xMjMtc3R5bGUgKi8KKyAgICAgIGFkZHIgPSBDdXJsX2lwMmFkZHIoQUZfSU5FVCwgJmluLCBob3N0bmFtZSwgcG9ydCk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBpZighYWRkcikgeworICAgICAgc3RydWN0IGluNl9hZGRyIGluNjsKKyAgICAgIC8qIGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIHN0cmluZyAqLworICAgICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmaW42KSA+IDApCisgICAgICAgIC8qIFRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwgKi8KKyAgICAgICAgYWRkciA9IEN1cmxfaXAyYWRkcihBRl9JTkVUNiwgJmluNiwgaG9zdG5hbWUsIHBvcnQpOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIElmIEN1cmxfZ2V0YWRkcmluZm8oKSByZXR1cm5zIE5VTEwsICdyZXNwd2FpdCcgbWlnaHQgYmUgc2V0IHRvIGEKLSAgICAgICAgIG5vbi16ZXJvIHZhbHVlIGluZGljYXRpbmcgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSByZXNwb25zZSB0byB0aGUKLSAgICAgICAgIHJlc29sdmUgY2FsbCAqLwotICAgICAgYWRkciA9IEN1cmxfZ2V0YWRkcmluZm8oY29ubiwKKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworI2VuZGlmIC8qICFVU0VfUkVTT0xWRV9PTl9JUFMgKi8KKworICAgIGlmKCFhZGRyKSB7CisgICAgICAvKiBDaGVjayB3aGF0IElQIHNwZWNpZmljcyB0aGUgYXBwIGhhcyByZXF1ZXN0ZWQgYW5kIGlmIHdlIGNhbiBwcm92aWRlCisgICAgICAgKiBpdC4gSWYgbm90LCBiYWlsIG91dC4gKi8KKyAgICAgIGlmKCFDdXJsX2lwdmFsaWQoY29ubikpCisgICAgICAgIHJldHVybiBDVVJMUkVTT0xWX0VSUk9SOworCisgICAgICBpZihhbGxvd0RPSCAmJiBkYXRhLT5zZXQuZG9oKSB7CisgICAgICAgIGFkZHIgPSBDdXJsX2RvaChjb25uLCBob3N0bmFtZSwgcG9ydCwgJnJlc3B3YWl0KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBJZiBDdXJsX2dldGFkZHJpbmZvKCkgcmV0dXJucyBOVUxMLCAncmVzcHdhaXQnIG1pZ2h0IGJlIHNldCB0byBhCisgICAgICAgICAgIG5vbi16ZXJvIHZhbHVlIGluZGljYXRpbmcgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSByZXNwb25zZSB0bworICAgICAgICAgICB0aGUgcmVzb2x2ZSBjYWxsICovCisgICAgICAgIGFkZHIgPSBDdXJsX2dldGFkZHJpbmZvKGNvbm4sCiAjaWZkZWYgREVCVUdCVUlMRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC5zdHJbU1RSSU5HX0RFVklDRV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc3RyY21wKGRhdGEtPnNldC5zdHJbU1RSSU5HX0RFVklDRV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYWxIb3N0IikpPyJsb2NhbGhvc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXN0cmNtcChkYXRhLT5zZXQuc3RyW1NUUklOR19ERVZJQ0VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYWxIb3N0IikpPyJsb2NhbGhvc3QiOgogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwgcG9ydCwgJnJlc3B3YWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUsIHBvcnQsICZyZXNwd2FpdCk7CisgICAgICB9CiAgICAgfQogICAgIGlmKCFhZGRyKSB7CiAgICAgICBpZihyZXNwd2FpdCkgewpAQCAtNjIwLDExICs2NDIsMTEgQEAKICAqIENVUkxSRVNPTFZfUEVORElORyAgKDEpID0gd2FpdGluZyBmb3IgcmVzcG9uc2UsIG5vIHBvaW50ZXIKICAqLwogCi1pbnQgQ3VybF9yZXNvbHZfdGltZW91dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dG1zKQorZW51bSByZXNvbHZlX3QgQ3VybF9yZXNvbHZfdGltZW91dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkaWZmX3QgdGltZW91dG1zKQogewogI2lmZGVmIFVTRV9BTEFSTV9USU1FT1VUCiAjaWZkZWYgSEFWRV9TSUdBQ1RJT04KQEAgLTY0MCw3ICs2NjIsNyBAQAogICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcHJldl9hbGFybSA9IDA7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogI2VuZGlmIC8qIFVTRV9BTEFSTV9USU1FT1VUICovCi0gIGludCByYzsKKyAgZW51bSByZXNvbHZlX3QgcmM7CiAKICAgKmVudHJ5ID0gTlVMTDsKIApAQCAtNzQ5LDcgKzc3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmNyZWF0ZWQpIC8gMTAwMDsKIAogICAgIC8qIHRoZSBhbGFybSBwZXJpb2QgaXMgY291bnRlZCBpbiBldmVuIG51bWJlciBvZiBzZWNvbmRzICovCi0gICAgdW5zaWduZWQgbG9uZyBhbGFybV9zZXQgPSBwcmV2X2FsYXJtIC0gZWxhcHNlZF9zZWNzOworICAgIHVuc2lnbmVkIGxvbmcgYWxhcm1fc2V0ID0gKHVuc2lnbmVkIGxvbmcpKHByZXZfYWxhcm0gLSBlbGFwc2VkX3NlY3MpOwogCiAgICAgaWYoIWFsYXJtX3NldCB8fAogICAgICAgICgoYWxhcm1fc2V0ID49IDB4ODAwMDAwMDApICYmIChwcmV2X2FsYXJtIDwgMHg4MDAwMDAwMCkpICkgewpAQCAtMTAyMSwyNSArMTA0MywyNyBAQAogQ1VSTGNvZGUgQ3VybF9yZXNvbHZfY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKQogeworI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX0RPSCkgJiYgIWRlZmluZWQoQ1VSTFJFU19BU1lOQ0gpCisgICh2b2lkKWRuczsKKyNlbmRpZgorCiAgIGlmKGNvbm4tPmRhdGEtPnNldC5kb2gpCiAgICAgcmV0dXJuIEN1cmxfZG9oX2lzX3Jlc29sdmVkKGNvbm4sIGRucyk7CiAgIHJldHVybiBDdXJsX3Jlc29sdmVyX2lzX3Jlc29sdmVkKGNvbm4sIGRucyk7CiB9CiAKIGludCBDdXJsX3Jlc29sdl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7CiAjaWZkZWYgQ1VSTFJFU19BU1lOQ0gKICAgaWYoY29ubi0+ZGF0YS0+c2V0LmRvaCkKICAgICAvKiBub3RoaW5nIHRvIHdhaXQgZm9yIGR1cmluZyBET0ggcmVzb2x2ZSwgdGhvc2UgaGFuZGxlcyBoYXZlIHRoZWlyIG93bgogICAgICAgIHNvY2tldHMgKi8KICAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLSAgcmV0dXJuIEN1cmxfcmVzb2x2ZXJfZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9yZXNvbHZlcl9nZXRzb2NrKGNvbm4sIHNvY2tzKTsKICNlbHNlCiAgICh2b2lkKWNvbm47CiAgICh2b2lkKXNvY2tzOwotICAodm9pZCludW1zb2NrczsKICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwLmgKaW5kZXggOWRjMGQ1YS4uYmFmMWU1OCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgImN1cmxfYWRkcmluZm8uaCIKKyNpbmNsdWRlICJ0aW1ldmFsLmgiIC8qIGZvciB0aW1lZGlmZl90ICovCiAjaW5jbHVkZSAiYXN5bi5oIgogCiAjaWZkZWYgSEFWRV9TRVRKTVBfSApAQCAtNjEsNyArNjIsNiBAQAogICogUmV0dXJucyBhIHN0cnVjdCBjdXJsX2hhc2ggcG9pbnRlciBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCBjdXJsX2hhc2ggKkN1cmxfZ2xvYmFsX2hvc3RfY2FjaGVfaW5pdCh2b2lkKTsKLXZvaWQgQ3VybF9nbG9iYWxfaG9zdF9jYWNoZV9kdG9yKHZvaWQpOwogCiBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgewogICBDdXJsX2FkZHJpbmZvICphZGRyOwpAQCAtNzksMjYgKzc5LDI5IEBACiAgKiB1c2UsIG9yIHdlJ2xsIGxlYWsgbWVtb3J5IQogICovCiAvKiByZXR1cm4gY29kZXMgKi8KLSNkZWZpbmUgQ1VSTFJFU09MVl9USU1FRE9VVCAtMgotI2RlZmluZSBDVVJMUkVTT0xWX0VSUk9SICAgIC0xCi0jZGVmaW5lIENVUkxSRVNPTFZfUkVTT0xWRUQgIDAKLSNkZWZpbmUgQ1VSTFJFU09MVl9QRU5ESU5HICAgMQotaW50IEN1cmxfcmVzb2x2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICBib29sIGFsbG93RE9ILAotICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRuc2VudHJ5KTsKLWludCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dG1zKTsKK2VudW0gcmVzb2x2ZV90IHsKKyAgQ1VSTFJFU09MVl9USU1FRE9VVCA9IC0yLAorICBDVVJMUkVTT0xWX0VSUk9SICAgID0gLTEsCisgIENVUkxSRVNPTFZfUkVTT0xWRUQgPSAgMCwKKyAgQ1VSTFJFU09MVl9QRU5ESU5HICA9ICAxCit9OworZW51bSByZXNvbHZlX3QgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dET0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSk7CitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRpZmZfdCB0aW1lb3V0bXMpOwogCiAjaWZkZWYgQ1VSTFJFU19JUFY2CiAvKgogICogQ3VybF9pcHY2d29ya3MoKSByZXR1cm5zIFRSVUUgaWYgSVB2NiBzZWVtcyB0byB3b3JrLgogICovCi1ib29sIEN1cmxfaXB2NndvcmtzKHZvaWQpOworYm9vbCBDdXJsX2lwdjZ3b3JrcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogI2Vsc2UKLSNkZWZpbmUgQ3VybF9pcHY2d29ya3MoKSBGQUxTRQorI2RlZmluZSBDdXJsX2lwdjZ3b3Jrcyh4KSBGQUxTRQogI2VuZGlmCiAKIC8qCkBAIC0xMjQsOSArMTI3LDYgQEAKIHZvaWQgQ3VybF9yZXNvbHZfdW5sb2NrKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRucyk7CiAKLS8qIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seTogKi8KLXZvaWQgQ3VybF9zY2FuX2NhY2hlX3VzZWQodm9pZCAqdXNlciwgdm9pZCAqcHRyKTsKLQogLyogaW5pdCBhIG5ldyBkbnMgY2FjaGUgYW5kIHJldHVybiBzdWNjZXNzICovCiBpbnQgQ3VybF9ta19kbnNjYWNoZShzdHJ1Y3QgY3VybF9oYXNoICpoYXNoKTsKIApAQCAtMjM3LDExICsyMzcsNiBAQAogdm9pZCBDdXJsX2hvc3RjYWNoZV9jbGVhbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBzdHJ1Y3QgY3VybF9oYXNoICpoYXNoKTsKIAogLyoKLSAqIERlc3Ryb3kgdGhlIGhvc3RjYWNoZSBvZiB0aGlzIGhhbmRsZS4KLSAqLwotdm9pZCBDdXJsX2hvc3RjYWNoZV9kZXN0cm95KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotCi0vKgogICogUG9wdWxhdGUgdGhlIGNhY2hlIHdpdGggc3BlY2lmaWVkIGVudHJpZXMgZnJvbSBDVVJMT1BUX1JFU09MVkUuCiAgKi8KIENVUkxjb2RlIEN1cmxfbG9hZGhvc3RwYWlycyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKQEAgLTI0OSw3ICsyNDQsNiBAQAogQ1VSTGNvZGUgQ3VybF9yZXNvbHZfY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKTsKIGludCBDdXJsX3Jlc29sdl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hPU1RJUF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA0LmMKaW5kZXggZTZiYTcxMC4uZDUwMDlhMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgInNoYXJlLmgiCiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJpbmV0X3B0b24uaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC0xMjgsMjggKzEyNywyMiBAQAogI2VuZGlmCiAgIEN1cmxfYWRkcmluZm8gKmFpID0gTlVMTDsKICAgc3RydWN0IGhvc3RlbnQgKmggPSBOVUxMOwotICBzdHJ1Y3QgaW5fYWRkciBpbjsKICAgc3RydWN0IGhvc3RlbnQgKmJ1ZiA9IE5VTEw7CiAKLSAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZpbikgPiAwKQotICAgIC8qIFRoaXMgaXMgYSBkb3R0ZWQgSVAgYWRkcmVzcyAxMjMuMTIzLjEyMy4xMjMtc3R5bGUgKi8KLSAgICByZXR1cm4gQ3VybF9pcDJhZGRyKEFGX0lORVQsICZpbiwgaG9zdG5hbWUsIHBvcnQpOwotCiAjaWYgZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUpCi0gIGVsc2UgewotICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKLSAgICBjaGFyIHNidWZbMTJdOwotICAgIGNoYXIgKnNidWZwdHIgPSBOVUxMOworICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7CisgIGNoYXIgc2J1ZlsxMl07CisgIGNoYXIgKnNidWZwdHIgPSBOVUxMOwogCi0gICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7Ci0gICAgaGludHMuYWlfZmFtaWx5ID0gUEZfSU5FVDsKLSAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOwotICAgIGlmKHBvcnQpIHsKLSAgICAgIG1zbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOwotICAgICAgc2J1ZnB0ciA9IHNidWY7Ci0gICAgfQorICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgaGludHMuYWlfZmFtaWx5ID0gUEZfSU5FVDsKKyAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgaWYocG9ydCkgeworICAgIG1zbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOworICAgIHNidWZwdHIgPSBzYnVmOworICB9CiAKLSAgICAodm9pZClDdXJsX2dldGFkZHJpbmZvX2V4KGhvc3RuYW1lLCBzYnVmcHRyLCAmaGludHMsICZhaSk7CisgICh2b2lkKUN1cmxfZ2V0YWRkcmluZm9fZXgoaG9zdG5hbWUsIHNidWZwdHIsICZoaW50cywgJmFpKTsKIAogI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUikKICAgLyoKQEAgLTE1NywxNDQgKzE1MCwxNDEgQEAKICAgICogU2luY2UgdGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBpdCwgdGhlIGZvbGxvd2luZyBjb2RlIGlzCiAgICAqIHNvbWV3aGF0ICNpZmRlZi1yaWRkZW4uCiAgICAqLwotICBlbHNlIHsKLSAgICBpbnQgaF9lcnJub3A7CisgIGludCBoX2Vycm5vcDsKIAotICAgIGJ1ZiA9IGNhbGxvYygxLCBDVVJMX0hPU1RFTlRfU0laRSk7Ci0gICAgaWYoIWJ1ZikKLSAgICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCi0gICAgLyoKLSAgICAgKiBUaGUgY2xlYXJpbmcgb2YgdGhlIGJ1ZmZlciBpcyBhIHdvcmthcm91bmQgZm9yIGEgZ2V0aG9zdGJ5bmFtZV9yIGJ1ZyBpbgotICAgICAqIHFueCBudG8gYW5kIGl0IGlzIGFsc28gX3JlcXVpcmVkXyBmb3Igc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgb24gc29tZQotICAgICAqIHBsYXRmb3Jtcy4KLSAgICAgKi8KKyAgYnVmID0gY2FsbG9jKDEsIENVUkxfSE9TVEVOVF9TSVpFKTsKKyAgaWYoIWJ1ZikKKyAgICByZXR1cm4gTlVMTDsgLyogbWFqb3IgZmFpbHVyZSAqLworICAvKgorICAgKiBUaGUgY2xlYXJpbmcgb2YgdGhlIGJ1ZmZlciBpcyBhIHdvcmthcm91bmQgZm9yIGEgZ2V0aG9zdGJ5bmFtZV9yIGJ1ZyBpbgorICAgKiBxbnggbnRvIGFuZCBpdCBpcyBhbHNvIF9yZXF1aXJlZF8gZm9yIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG9uIHNvbWUKKyAgICogcGxhdGZvcm1zLgorICAgKi8KIAogI2lmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfNSkKLSAgICAvKiBTb2xhcmlzLCBJUklYIGFuZCBtb3JlICovCi0gICAgaCA9IGdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSE9TVEVOVF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZoX2Vycm5vcCk7CisgIC8qIFNvbGFyaXMsIElSSVggYW5kIG1vcmUgKi8KKyAgaCA9IGdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCisgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilidWYgKyBzaXplb2Yoc3RydWN0IGhvc3RlbnQpLAorICAgICAgICAgICAgICAgICAgICAgIENVUkxfSE9TVEVOVF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAmaF9lcnJub3ApOwogCi0gICAgLyogSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIGl0IHJldHVybnMgTlVMTCBhbmQgc2V0cyBlcnJubyB0bwotICAgICAqIEVSQU5HRS4gVGhlIGVycm5vIGlzIHRocmVhZCBzYWZlIGlmIHRoaXMgaXMgY29tcGlsZWQgd2l0aAotICAgICAqIC1EX1JFRU5UUkFOVCBhcyB0aGVuIHRoZSAnZXJybm8nIHZhcmlhYmxlIGlzIGEgbWFjcm8gZGVmaW5lZCB0byBnZXQKLSAgICAgKiB1c2VkIHByb3Blcmx5IGZvciB0aHJlYWRzLgotICAgICAqLworICAvKiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgaXQgcmV0dXJucyBOVUxMIGFuZCBzZXRzIGVycm5vIHRvCisgICAqIEVSQU5HRS4gVGhlIGVycm5vIGlzIHRocmVhZCBzYWZlIGlmIHRoaXMgaXMgY29tcGlsZWQgd2l0aAorICAgKiAtRF9SRUVOVFJBTlQgYXMgdGhlbiB0aGUgJ2Vycm5vJyB2YXJpYWJsZSBpcyBhIG1hY3JvIGRlZmluZWQgdG8gZ2V0CisgICAqIHVzZWQgcHJvcGVybHkgZm9yIHRocmVhZHMuCisgICAqLwogCi0gICAgaWYoaCkgewotICAgICAgOwotICAgIH0KLSAgICBlbHNlCi0jZWxpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYpCi0gICAgLyogTGludXggKi8KLQotICAgICh2b2lkKWdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSE9TVEVOVF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZoLCAvKiBESUZGRVJFTkNFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAmaF9lcnJub3ApOwotICAgIC8qIFJlZGhhdCA4LCB1c2luZyBnbGliYyAyLjIuOTMgY2hhbmdlZCB0aGUgYmVoYXZpb3IuIE5vdyBhbGwgb2YgYQotICAgICAqIHN1ZGRlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgRUFHQUlOIGlmIHRoZSBnaXZlbiBidWZmZXIgc2l6ZSBpcyB0b28KLSAgICAgKiBzbWFsbC4gUHJldmlvdXMgdmVyc2lvbnMgYXJlIGtub3duIHRvIHJldHVybiBFUkFOR0UgZm9yIHRoZSBzYW1lCi0gICAgICogcHJvYmxlbS4KLSAgICAgKgotICAgICAqIFRoaXMgd291bGRuJ3QgYmUgc3VjaCBhIGJpZyBwcm9ibGVtIGlmIG9sZGVyIHZlcnNpb25zIHdvdWxkbid0Ci0gICAgICogc29tZXRpbWVzIHJldHVybiBFQUdBSU4gb24gYSBjb21tb24gZmFpbHVyZSBjYXNlLiBBbGFzLCB3ZSBjYW4ndAotICAgICAqIGFzc3VtZSB0aGF0IEVBR0FJTiAqb3IqIEVSQU5HRSBtZWFucyBFUkFOR0UgZm9yIGFueSBnaXZlbiB2ZXJzaW9uIG9mCi0gICAgICogZ2xpYmMuCi0gICAgICoKLSAgICAgKiBGb3Igbm93LCB3ZSBkbyB0aGF0IGFuZCB0aHVzIHdlIG1heSBjYWxsIHRoZSBmdW5jdGlvbiByZXBlYXRlZGx5IGFuZAotICAgICAqIGZhaWwgZm9yIG9sZGVyIGdsaWJjIHZlcnNpb25zIHRoYXQgcmV0dXJuIEVBR0FJTiwgdW50aWwgd2UgcnVuIG91dCBvZgotICAgICAqIGJ1ZmZlciBzaXplIChzdGVwX3NpemUgZ3Jvd3MgYmV5b25kIENVUkxfSE9TVEVOVF9TSVpFKS4KLSAgICAgKgotICAgICAqIElmIGFueW9uZSBoYXMgYSBiZXR0ZXIgZml4LCBwbGVhc2UgdGVsbCB1cyEKLSAgICAgKgotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKgotICAgICAqIE9uIE9jdG9iZXIgMjNyZCAyMDAzLCBEYW4gQyBkdWcgdXAgbW9yZSBkZXRhaWxzIG9uIHRoZSBteXN0ZXJpZXMgb2YKLSAgICAgKiBnZXRob3N0YnluYW1lX3IoKSBpbiBnbGliYzoKLSAgICAgKgotICAgICAqIEluIGdsaWJjIDIuMi41IHRoZSBpbnRlcmZhY2UgaXMgZGlmZmVyZW50ICh0aGlzIGhhcyBhbHNvIGJlZW4KLSAgICAgKiBkaXNjb3ZlcmVkIGluIGdsaWJjIDIuMS4xLTYgYXMgc2hpcHBlZCBieSBSZWRoYXQgNikuIFdoYXQgSSBjYW4ndAotICAgICAqIGV4cGxhaW4sIGlzIHRoYXQgdGVzdHMgcGVyZm9ybWVkIG9uIGdsaWJjIDIuMi40LTM0IGFuZCAyLjIuNC0zMgotICAgICAqIChzaGlwcGVkL3VwZ3JhZGVkIGJ5IFJlZGhhdCA3LjIpIGRvbid0IHNob3cgdGhpcyBiZWhhdmlvciEKLSAgICAgKgotICAgICAqIEluIHRoaXMgImJ1Z2d5IiB2ZXJzaW9uLCB0aGUgcmV0dXJuIGNvZGUgaXMgLTEgb24gZXJyb3IgYW5kICdlcnJubycKLSAgICAgKiBpcyBzZXQgdG8gdGhlIEVSQU5HRSBvciBFQUdBSU4gY29kZS4gTm90ZSB0aGF0ICdlcnJubycgaXMgbm90IGEKLSAgICAgKiB0aHJlYWQtc2FmZSB2YXJpYWJsZS4KLSAgICAgKi8KLQotICAgIGlmKCFoKSAvKiBmYWlsdXJlICovCi0jZWxpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMpCi0gICAgLyogQUlYLCBEaWdpdGFsIFVuaXgvVHJ1NjQsIEhQVVggMTAsIG1vcmU/ICovCi0KLSAgICAvKiBGb3IgQUlYIDQuMyBvciBsYXRlciwgd2UgZG9uJ3QgdXNlIGdldGhvc3RieW5hbWVfcigpIGF0IGFsbCwgYmVjYXVzZSBvZgotICAgICAqIHRoZSBwbGFpbiBmYWN0IHRoYXQgaXQgZG9lcyBub3QgcmV0dXJuIHVuaXF1ZSBmdWxsIGJ1ZmZlcnMgb24gZWFjaAotICAgICAqIGNhbGwsIGJ1dCBpbnN0ZWFkIHNldmVyYWwgb2YgdGhlIHBvaW50ZXJzIGluIHRoZSBob3N0ZW50IHN0cnVjdHMgd2lsbAotICAgICAqIHBvaW50IHRvIHRoZSBzYW1lIGFjdHVhbCBkYXRhISBUaGlzIGhhdmUgdGhlIHVuZm9ydHVuYXRlIGRvd24tc2lkZSB0aGF0Ci0gICAgICogb3VyIGNhY2hpbmcgc3lzdGVtIGJyZWFrcyBkb3duIGhvcnJpYmx5LiBMdWNraWx5IGZvciB1cyB0aG91Z2gsIEFJWCA0LjMKLSAgICAgKiBhbmQgbW9yZSByZWNlbnQgdmVyc2lvbnMgaGF2ZSBhICJjb21wbGV0ZWx5IHRocmVhZC1zYWZlIlsqXSBsaWJjIHdoZXJlCi0gICAgICogYWxsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aHJlYWQtc3BlY2lmaWMgbWVtb3J5IGFyZWFzIG1ha2luZyBjYWxscyB0bwotICAgICAqIHRoZSBwbGFpbiBvbGQgZ2V0aG9zdGJ5bmFtZSgpIHdvcmsgZmluZSBldmVuIGZvciBtdWx0aS10aHJlYWRlZAotICAgICAqIHByb2dyYW1zLgotICAgICAqCi0gICAgICogVGhpcyBBSVggNC4zIG9yIGxhdGVyIGRldGVjdGlvbiBpcyBhbGwgbWFkZSBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KLSAgICAgKgotICAgICAqIFRyb2VscyBXYWxzdGVkIEhhbnNlbiBoZWxwZWQgdXMgd29yayB0aGlzIG91dCBvbiBNYXJjaCAzcmQsIDIwMDMuCi0gICAgICoKLSAgICAgKiBbKl0gPSBtdWNoIGxhdGVyIHdlJ3ZlIGZvdW5kIG91dCB0aGF0IGl0IGlzbid0IGF0IGFsbCAiY29tcGxldGVseQotICAgICAqIHRocmVhZC1zYWZlIiwgYnV0IGF0IGxlYXN0IHRoZSBnZXRob3N0YnluYW1lKCkgZnVuY3Rpb24gaXMuCi0gICAgICovCi0KLSAgICBpZihDVVJMX0hPU1RFTlRfU0laRSA+PQotICAgICAgIChzaXplb2Yoc3RydWN0IGhvc3RlbnQpICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50X2RhdGEpKSkgewotCi0gICAgICAvKiBBdWd1c3QgMjJuZCwgMjAwMDogQWxiZXJ0IENoaW4tQS1Zb3VuZyBicm91Z2h0IGFuIHVwZGF0ZWQgdmVyc2lvbgotICAgICAgICogdGhhdCBzaG91bGQgd29yayEgU2VwdGVtYmVyIDIwOiBSaWNoYXJkIFByZXNjb3R0IHdvcmtlZCBvbiB0aGUgYnVmZmVyCi0gICAgICAgKiBzaXplIGRpbGVtbWEuCi0gICAgICAgKi8KLQotICAgICAgcmVzID0gZ2V0aG9zdGJ5bmFtZV9yKGhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnRfZGF0YSAqKSgoY2hhciAqKWJ1ZiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSkpOwotICAgICAgaF9lcnJub3AgPSBTT0NLRVJSTk87IC8qIHdlIGRvbid0IGRlYWwgd2l0aCB0aGlzLCBidXQgc2V0IGl0IGFueXdheSAqLwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXMgPSAtMTsgLyogZmFpbHVyZSwgdG9vIHNtYWxsaXNoIGJ1ZmZlciBzaXplICovCi0KLSAgICBpZighcmVzKSB7IC8qIHN1Y2Nlc3MgKi8KLQotICAgICAgaCA9IGJ1ZjsgLyogcmVzdWx0IGV4cGVjdGVkIGluIGggKi8KLQotICAgICAgLyogVGhpcyBpcyB0aGUgd29yc3Qga2luZCBvZiB0aGUgZGlmZmVyZW50IGdldGhvc3RieW5hbWVfcigpIGludGVyZmFjZXMuCi0gICAgICAgKiBTaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBiaWcgYnVmZmVyIHRoaXMgcGFydGljdWxhciBsb29rdXAgcmVxdWlyZWQsCi0gICAgICAgKiB3ZSBjYW4ndCByZWFsbG9jIGRvd24gdGhlIGh1Z2UgYWxsb2Mgd2l0aG91dCBkb2luZyBjbG9zZXIgYW5hbHlzaXMgb2YKLSAgICAgICAqIHRoZSByZXR1cm5lZCBkYXRhLiBUaHVzLCB3ZSBhbHdheXMgdXNlIENVUkxfSE9TVEVOVF9TSVpFIGZvciBldmVyeQotICAgICAgICogbmFtZSBsb29rdXAuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgbWFsbG9jKCkgYW5kIHRoZW4KLSAgICAgICAqIGNhbGxpbmcgQ3VybF9hZGRyaW5mb19jb3B5KCkgdGhhdCBzdWJzZXF1ZW50IHJlYWxsb2MoKXMgZG93biB0aGUgbmV3Ci0gICAgICAgKiBtZW1vcnkgYXJlYSB0byB0aGUgYWN0dWFsbHkgdXNlZCBhbW91bnQuCi0gICAgICAgKi8KLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmIC8qIEhBVkVfLi4uQllOQU1FX1JfNSB8fCBIQVZFXy4uLkJZTkFNRV9SXzYgfHwgSEFWRV8uLi5CWU5BTUVfUl8zICovCi0gICAgewotICAgICAgaCA9IE5VTEw7IC8qIHNldCByZXR1cm4gY29kZSB0byBOVUxMICovCi0gICAgICBmcmVlKGJ1Zik7Ci0gICAgfQotI2Vsc2UgLyogSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHx8IEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCi0gICAgLyoKLSAgICAgKiBIZXJlIGlzIGNvZGUgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgYSB0aHJlYWQgc2FmZQotICAgICAqIGdldGFkZHJpbmZvKCkgbm9yIGdldGhvc3RieW5hbWVfcigpIGZ1bmN0aW9uIG9yIGZvciB3aGljaAotICAgICAqIGdldGhvc3RieW5hbWUoKSBpcyB0aGUgcHJlZmVycmVkIG9uZS4KLSAgICAgKi8KLSAgZWxzZSB7Ci0gICAgaCA9IGdldGhvc3RieW5hbWUoKHZvaWQgKilob3N0bmFtZSk7Ci0jZW5kaWYgLyogSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHx8IEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCisgIGlmKGgpIHsKKyAgICA7CiAgIH0KKyAgZWxzZQorI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl82KQorICAvKiBMaW51eCAqLworCisgICh2b2lkKWdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCisgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilidWYgKyBzaXplb2Yoc3RydWN0IGhvc3RlbnQpLAorICAgICAgICAgICAgICAgICAgICAgIENVUkxfSE9TVEVOVF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAmaCwgLyogRElGRkVSRU5DRSAqLworICAgICAgICAgICAgICAgICAgICAgICZoX2Vycm5vcCk7CisgIC8qIFJlZGhhdCA4LCB1c2luZyBnbGliYyAyLjIuOTMgY2hhbmdlZCB0aGUgYmVoYXZpb3IuIE5vdyBhbGwgb2YgYQorICAgKiBzdWRkZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEVBR0FJTiBpZiB0aGUgZ2l2ZW4gYnVmZmVyIHNpemUgaXMgdG9vCisgICAqIHNtYWxsLiBQcmV2aW91cyB2ZXJzaW9ucyBhcmUga25vd24gdG8gcmV0dXJuIEVSQU5HRSBmb3IgdGhlIHNhbWUKKyAgICogcHJvYmxlbS4KKyAgICoKKyAgICogVGhpcyB3b3VsZG4ndCBiZSBzdWNoIGEgYmlnIHByb2JsZW0gaWYgb2xkZXIgdmVyc2lvbnMgd291bGRuJ3QKKyAgICogc29tZXRpbWVzIHJldHVybiBFQUdBSU4gb24gYSBjb21tb24gZmFpbHVyZSBjYXNlLiBBbGFzLCB3ZSBjYW4ndAorICAgKiBhc3N1bWUgdGhhdCBFQUdBSU4gKm9yKiBFUkFOR0UgbWVhbnMgRVJBTkdFIGZvciBhbnkgZ2l2ZW4gdmVyc2lvbiBvZgorICAgKiBnbGliYy4KKyAgICoKKyAgICogRm9yIG5vdywgd2UgZG8gdGhhdCBhbmQgdGh1cyB3ZSBtYXkgY2FsbCB0aGUgZnVuY3Rpb24gcmVwZWF0ZWRseSBhbmQKKyAgICogZmFpbCBmb3Igb2xkZXIgZ2xpYmMgdmVyc2lvbnMgdGhhdCByZXR1cm4gRUFHQUlOLCB1bnRpbCB3ZSBydW4gb3V0IG9mCisgICAqIGJ1ZmZlciBzaXplIChzdGVwX3NpemUgZ3Jvd3MgYmV5b25kIENVUkxfSE9TVEVOVF9TSVpFKS4KKyAgICoKKyAgICogSWYgYW55b25lIGhhcyBhIGJldHRlciBmaXgsIHBsZWFzZSB0ZWxsIHVzIQorICAgKgorICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqCisgICAqIE9uIE9jdG9iZXIgMjNyZCAyMDAzLCBEYW4gQyBkdWcgdXAgbW9yZSBkZXRhaWxzIG9uIHRoZSBteXN0ZXJpZXMgb2YKKyAgICogZ2V0aG9zdGJ5bmFtZV9yKCkgaW4gZ2xpYmM6CisgICAqCisgICAqIEluIGdsaWJjIDIuMi41IHRoZSBpbnRlcmZhY2UgaXMgZGlmZmVyZW50ICh0aGlzIGhhcyBhbHNvIGJlZW4KKyAgICogZGlzY292ZXJlZCBpbiBnbGliYyAyLjEuMS02IGFzIHNoaXBwZWQgYnkgUmVkaGF0IDYpLiBXaGF0IEkgY2FuJ3QKKyAgICogZXhwbGFpbiwgaXMgdGhhdCB0ZXN0cyBwZXJmb3JtZWQgb24gZ2xpYmMgMi4yLjQtMzQgYW5kIDIuMi40LTMyCisgICAqIChzaGlwcGVkL3VwZ3JhZGVkIGJ5IFJlZGhhdCA3LjIpIGRvbid0IHNob3cgdGhpcyBiZWhhdmlvciEKKyAgICoKKyAgICogSW4gdGhpcyAiYnVnZ3kiIHZlcnNpb24sIHRoZSByZXR1cm4gY29kZSBpcyAtMSBvbiBlcnJvciBhbmQgJ2Vycm5vJworICAgKiBpcyBzZXQgdG8gdGhlIEVSQU5HRSBvciBFQUdBSU4gY29kZS4gTm90ZSB0aGF0ICdlcnJubycgaXMgbm90IGEKKyAgICogdGhyZWFkLXNhZmUgdmFyaWFibGUuCisgICAqLworCisgIGlmKCFoKSAvKiBmYWlsdXJlICovCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMpCisgIC8qIEFJWCwgRGlnaXRhbCBVbml4L1RydTY0LCBIUFVYIDEwLCBtb3JlPyAqLworCisgIC8qIEZvciBBSVggNC4zIG9yIGxhdGVyLCB3ZSBkb24ndCB1c2UgZ2V0aG9zdGJ5bmFtZV9yKCkgYXQgYWxsLCBiZWNhdXNlIG9mCisgICAqIHRoZSBwbGFpbiBmYWN0IHRoYXQgaXQgZG9lcyBub3QgcmV0dXJuIHVuaXF1ZSBmdWxsIGJ1ZmZlcnMgb24gZWFjaAorICAgKiBjYWxsLCBidXQgaW5zdGVhZCBzZXZlcmFsIG9mIHRoZSBwb2ludGVycyBpbiB0aGUgaG9zdGVudCBzdHJ1Y3RzIHdpbGwKKyAgICogcG9pbnQgdG8gdGhlIHNhbWUgYWN0dWFsIGRhdGEhIFRoaXMgaGF2ZSB0aGUgdW5mb3J0dW5hdGUgZG93bi1zaWRlIHRoYXQKKyAgICogb3VyIGNhY2hpbmcgc3lzdGVtIGJyZWFrcyBkb3duIGhvcnJpYmx5LiBMdWNraWx5IGZvciB1cyB0aG91Z2gsIEFJWCA0LjMKKyAgICogYW5kIG1vcmUgcmVjZW50IHZlcnNpb25zIGhhdmUgYSAiY29tcGxldGVseSB0aHJlYWQtc2FmZSJbKl0gbGliYyB3aGVyZQorICAgKiBhbGwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRocmVhZC1zcGVjaWZpYyBtZW1vcnkgYXJlYXMgbWFraW5nIGNhbGxzIHRvCisgICAqIHRoZSBwbGFpbiBvbGQgZ2V0aG9zdGJ5bmFtZSgpIHdvcmsgZmluZSBldmVuIGZvciBtdWx0aS10aHJlYWRlZAorICAgKiBwcm9ncmFtcy4KKyAgICoKKyAgICogVGhpcyBBSVggNC4zIG9yIGxhdGVyIGRldGVjdGlvbiBpcyBhbGwgbWFkZSBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgICoKKyAgICogVHJvZWxzIFdhbHN0ZWQgSGFuc2VuIGhlbHBlZCB1cyB3b3JrIHRoaXMgb3V0IG9uIE1hcmNoIDNyZCwgMjAwMy4KKyAgICoKKyAgICogWypdID0gbXVjaCBsYXRlciB3ZSd2ZSBmb3VuZCBvdXQgdGhhdCBpdCBpc24ndCBhdCBhbGwgImNvbXBsZXRlbHkKKyAgICogdGhyZWFkLXNhZmUiLCBidXQgYXQgbGVhc3QgdGhlIGdldGhvc3RieW5hbWUoKSBmdW5jdGlvbiBpcy4KKyAgICovCisKKyAgaWYoQ1VSTF9IT1NURU5UX1NJWkUgPj0KKyAgICAgKHNpemVvZihzdHJ1Y3QgaG9zdGVudCkgKyBzaXplb2Yoc3RydWN0IGhvc3RlbnRfZGF0YSkpKSB7CisKKyAgICAvKiBBdWd1c3QgMjJuZCwgMjAwMDogQWxiZXJ0IENoaW4tQS1Zb3VuZyBicm91Z2h0IGFuIHVwZGF0ZWQgdmVyc2lvbgorICAgICAqIHRoYXQgc2hvdWxkIHdvcmshIFNlcHRlbWJlciAyMDogUmljaGFyZCBQcmVzY290dCB3b3JrZWQgb24gdGhlIGJ1ZmZlcgorICAgICAqIHNpemUgZGlsZW1tYS4KKyAgICAgKi8KKworICAgIHJlcyA9IGdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50ICopYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnRfZGF0YSAqKSgoY2hhciAqKWJ1ZiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdGVudCkpKTsKKyAgICBoX2Vycm5vcCA9IFNPQ0tFUlJOTzsgLyogd2UgZG9uJ3QgZGVhbCB3aXRoIHRoaXMsIGJ1dCBzZXQgaXQgYW55d2F5ICovCisgIH0KKyAgZWxzZQorICAgIHJlcyA9IC0xOyAvKiBmYWlsdXJlLCB0b28gc21hbGxpc2ggYnVmZmVyIHNpemUgKi8KKworICBpZighcmVzKSB7IC8qIHN1Y2Nlc3MgKi8KKworICAgIGggPSBidWY7IC8qIHJlc3VsdCBleHBlY3RlZCBpbiBoICovCisKKyAgICAvKiBUaGlzIGlzIHRoZSB3b3JzdCBraW5kIG9mIHRoZSBkaWZmZXJlbnQgZ2V0aG9zdGJ5bmFtZV9yKCkgaW50ZXJmYWNlcy4KKyAgICAgKiBTaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBiaWcgYnVmZmVyIHRoaXMgcGFydGljdWxhciBsb29rdXAgcmVxdWlyZWQsCisgICAgICogd2UgY2FuJ3QgcmVhbGxvYyBkb3duIHRoZSBodWdlIGFsbG9jIHdpdGhvdXQgZG9pbmcgY2xvc2VyIGFuYWx5c2lzIG9mCisgICAgICogdGhlIHJldHVybmVkIGRhdGEuIFRodXMsIHdlIGFsd2F5cyB1c2UgQ1VSTF9IT1NURU5UX1NJWkUgZm9yIGV2ZXJ5CisgICAgICogbmFtZSBsb29rdXAuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgbWFsbG9jKCkgYW5kIHRoZW4KKyAgICAgKiBjYWxsaW5nIEN1cmxfYWRkcmluZm9fY29weSgpIHRoYXQgc3Vic2VxdWVudCByZWFsbG9jKClzIGRvd24gdGhlIG5ldworICAgICAqIG1lbW9yeSBhcmVhIHRvIHRoZSBhY3R1YWxseSB1c2VkIGFtb3VudC4KKyAgICAgKi8KKyAgfQorICBlbHNlCisjZW5kaWYgLyogSEFWRV8uLi5CWU5BTUVfUl81IHx8IEhBVkVfLi4uQllOQU1FX1JfNiB8fCBIQVZFXy4uLkJZTkFNRV9SXzMgKi8KKyAgeworICAgIGggPSBOVUxMOyAvKiBzZXQgcmV0dXJuIGNvZGUgdG8gTlVMTCAqLworICAgIGZyZWUoYnVmKTsKKyAgfQorI2Vsc2UgLyogSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHx8IEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCisgIC8qCisgICAqIEhlcmUgaXMgY29kZSBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBhIHRocmVhZCBzYWZlCisgICAqIGdldGFkZHJpbmZvKCkgbm9yIGdldGhvc3RieW5hbWVfcigpIGZ1bmN0aW9uIG9yIGZvciB3aGljaAorICAgKiBnZXRob3N0YnluYW1lKCkgaXMgdGhlIHByZWZlcnJlZCBvbmUuCisgICAqLworICBoID0gZ2V0aG9zdGJ5bmFtZSgodm9pZCAqKWhvc3RuYW1lKTsKKyNlbmRpZiAvKiBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgfHwgSEFWRV9HRVRIT1NUQllOQU1FX1IgKi8KIAogICBpZihoKSB7CiAgICAgYWkgPSBDdXJsX2hlMmFpKGgsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNi5jCmluZGV4IDU1MTFmMWEuLjQxZmY5ODYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDYuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA2LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTYyLDEzICs2MiwxOSBAQAogLyoKICAqIEN1cmxfaXB2NndvcmtzKCkgcmV0dXJucyBUUlVFIGlmIElQdjYgc2VlbXMgdG8gd29yay4KICAqLwotYm9vbCBDdXJsX2lwdjZ3b3Jrcyh2b2lkKQorYm9vbCBDdXJsX2lwdjZ3b3JrcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIC8qIHRoZSBuYXR1cmUgb2YgbW9zdCBzeXN0ZW0gaXMgdGhhdCBJUHY2IHN0YXR1cyBkb2Vzbid0IGNvbWUgYW5kIGdvCi0gICAgIGR1cmluZyBhIHByb2dyYW0ncyBsaWZldGltZSBzbyB3ZSBvbmx5IHByb2JlIHRoZSBmaXJzdCB0aW1lIGFuZCB0aGVuIHdlCi0gICAgIGhhdmUgdGhlIGluZm8ga2VwdCBmb3IgZmFzdCByZS11c2UgKi8KLSAgc3RhdGljIGludCBpcHY2X3dvcmtzID0gLTE7Ci0gIGlmKC0xID09IGlwdjZfd29ya3MpIHsKKyAgaWYoY29ubikgeworICAgIC8qIHRoZSBuYXR1cmUgb2YgbW9zdCBzeXN0ZW0gaXMgdGhhdCBJUHY2IHN0YXR1cyBkb2Vzbid0IGNvbWUgYW5kIGdvCisgICAgICAgZHVyaW5nIGEgcHJvZ3JhbSdzIGxpZmV0aW1lIHNvIHdlIG9ubHkgcHJvYmUgdGhlIGZpcnN0IHRpbWUgYW5kIHRoZW4gd2UKKyAgICAgICBoYXZlIHRoZSBpbmZvIGtlcHQgZm9yIGZhc3QgcmUtdXNlICovCisgICAgREVCVUdBU1NFUlQoY29ubik7CisgICAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSk7CisgICAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YS0+bXVsdGkpOworICAgIHJldHVybiBjb25uLT5kYXRhLT5tdWx0aS0+aXB2Nl93b3JrczsKKyAgfQorICBlbHNlIHsKKyAgICBpbnQgaXB2Nl93b3JrcyA9IC0xOwogICAgIC8qIHByb2JlIHRvIHNlZSBpZiB3ZSBoYXZlIGEgd29ya2luZyBJUHY2IHN0YWNrICovCiAgICAgY3VybF9zb2NrZXRfdCBzID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKICAgICBpZihzID09IENVUkxfU09DS0VUX0JBRCkKQEAgLTc4LDggKzg0LDggQEAKICAgICAgIGlwdjZfd29ya3MgPSAxOwogICAgICAgQ3VybF9jbG9zZXNvY2tldChOVUxMLCBzKTsKICAgICB9CisgICAgcmV0dXJuIChpcHY2X3dvcmtzPjApP1RSVUU6RkFMU0U7CiAgIH0KLSAgcmV0dXJuIChpcHY2X3dvcmtzPjApP1RSVUU6RkFMU0U7CiB9CiAKIC8qCkBAIC04OSw3ICs5NSw3IEBACiBib29sIEN1cmxfaXB2YWxpZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CiAgIGlmKGNvbm4tPmlwX3ZlcnNpb24gPT0gQ1VSTF9JUFJFU09MVkVfVjYpCi0gICAgcmV0dXJuIEN1cmxfaXB2NndvcmtzKCk7CisgICAgcmV0dXJuIEN1cmxfaXB2NndvcmtzKGNvbm4pOwogCiAgIHJldHVybiBUUlVFOwogfQpAQCAtMTU5LDEzICsxNjUsMTQgQEAKICAgICBicmVhazsKICAgfQogCi0gIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoKSkKKyAgaWYoKHBmICE9IFBGX0lORVQpICYmICFDdXJsX2lwdjZ3b3Jrcyhjb25uKSkKICAgICAvKiBUaGUgc3RhY2sgc2VlbXMgdG8gYmUgYSBub24tSVB2NiBvbmUgKi8KICAgICBwZiA9IFBGX0lORVQ7CiAKICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgIGhpbnRzLmFpX2ZhbWlseSA9IHBmOwotICBoaW50cy5haV9zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOworICBoaW50cy5haV9zb2NrdHlwZSA9IChjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9UQ1ApID8KKyAgICBTT0NLX1NUUkVBTSA6IFNPQ0tfREdSQU07CiAKICNpZm5kZWYgVVNFX1JFU09MVkVfT05fSVBTCiAgIC8qCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0c3luLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0c3luLmMKaW5kZXggM2RlNjc0Ni4uOWUzMTAwOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdHN5bi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RzeW4uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5jCmluZGV4IDMzOGM1OWEuLmJmZjNhZGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTg4LDggKzg4LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGh0dHBfZ2V0c29ja19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBzdGF0aWMgaW50IGh0dHBfc2hvdWxkX2ZhaWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKQEAgLTk5LDggKzk4LDcgQEAKICNpZmRlZiBVU0VfU1NMCiBzdGF0aWMgQ1VSTGNvZGUgaHR0cHNfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIGludCBodHRwc19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKICNlbHNlCiAjZGVmaW5lIGh0dHBzX2Nvbm5lY3RpbmcoeCx5KSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QKICNlbmRpZgpAQCAtMTcxLDEwICsxNjksMjIgQEAKICAgQ3VybF9taW1lX2luaXRwYXJ0KCZodHRwLT5mb3JtLCBjb25uLT5kYXRhKTsKICAgZGF0YS0+cmVxLnByb3RvcCA9IGh0dHA7CiAKLSAgaWYoIUNPTk5fSU5VU0UoY29ubikpCi0gICAgLyogaWYgbm90IGFscmVhZHkgbXVsdGktdXNpbmcsIHNldHVwIGNvbm5lY3Rpb24gZGV0YWlscyAqLwotICAgIEN1cmxfaHR0cDJfc2V0dXBfY29ubihjb25uKTsKLSAgQ3VybF9odHRwMl9zZXR1cF9yZXEoZGF0YSk7CisgIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8zKSB7CisgICAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkKKyAgICAgIC8qIE9ubHkgZ28gSFRUUC8zIGRpcmVjdGx5IG9uIEhUVFBTIFVSTHMuIEl0IG5lZWRzIGEgVURQIHNvY2tldCBhbmQgZG9lcworICAgICAgICAgdGhlIFFVSUMgZGFuY2UuICovCisgICAgICBjb25uLT50cmFuc3BvcnQgPSBUUk5TUFJUX1FVSUM7CisgICAgZWxzZSB7CisgICAgICBmYWlsZihkYXRhLCAiSFRUUC8zIHJlcXVlc3RlZCBmb3Igbm9uLUhUVFBTIFVSTCIpOworICAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmKCFDT05OX0lOVVNFKGNvbm4pKQorICAgICAgLyogaWYgbm90IGFscmVhZHkgbXVsdGktdXNpbmcsIHNldHVwIGNvbm5lY3Rpb24gZGV0YWlscyAqLworICAgICAgQ3VybF9odHRwMl9zZXR1cF9jb25uKGNvbm4pOworICAgIEN1cmxfaHR0cDJfc2V0dXBfcmVxKGRhdGEpOworICB9CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtMzM0LDcgKzM0NCw3IEBACiAgIHVzZXJwID0gJmNvbm4tPmFsbG9jcHRyLnVzZXJwd2Q7CiAgIGZyZWUoKnVzZXJwKTsKICAgKnVzZXJwID0gYXByaW50ZigiQXV0aG9yaXphdGlvbjogQmVhcmVyICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgY29ubi0+b2F1dGhfYmVhcmVyKTsKKyAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdKTsKIAogICBpZighKnVzZXJwKSB7CiAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKQEAgLTM4Myw3ICszOTMsNyBAQAogfQogCiAvKgotICogQ3VybF9odHRwX3BlcmhhcHNyZXdpbmQoKQorICogaHR0cF9wZXJoYXBzcmV3aW5kKCkKICAqCiAgKiBJZiB3ZSBhcmUgZG9pbmcgUE9TVCBvciBQVVQgewogICogICBJZiB3ZSBoYXZlIG1vcmUgZGF0YSB0byBzZW5kIHsKQEAgLTQ0MCw5ICs0NTAsNiBAQAogICAgIC8qIGZpZ3VyZSBvdXQgaG93IG11Y2ggZGF0YSB3ZSBhcmUgZXhwZWN0ZWQgdG8gc2VuZCAqLwogICAgIHN3aXRjaChkYXRhLT5zZXQuaHR0cHJlcSkgewogICAgIGNhc2UgSFRUUFJFUV9QT1NUOgotICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKLSAgICAgICAgZXhwZWN0c2VuZCA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICBicmVhazsKICAgICBjYXNlIEhUVFBSRVFfUFVUOgogICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKICAgICAgICAgZXhwZWN0c2VuZCA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7CkBAIC01NDgsNyArNTU1LDcgQEAKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHVuc2lnbmVkIGxvbmcgYXV0aG1hc2sgPSB+MHVsOwogCi0gIGlmKCFjb25uLT5vYXV0aF9iZWFyZXIpCisgIGlmKCFkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdKQogICAgIGF1dGhtYXNrICY9ICh1bnNpZ25lZCBsb25nKX5DVVJMQVVUSF9CRUFSRVI7CiAKICAgaWYoMTAwIDw9IGRhdGEtPnJlcS5odHRwY29kZSAmJiAxOTkgPj0gZGF0YS0+cmVxLmh0dHBjb2RlKQpAQCAtNTU4LDcgKzU2NSw3IEBACiAgIGlmKGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtKQogICAgIHJldHVybiBkYXRhLT5zZXQuaHR0cF9mYWlsX29uX2Vycm9yP0NVUkxFX0hUVFBfUkVUVVJORURfRVJST1I6Q1VSTEVfT0s7CiAKLSAgaWYoKGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgfHwgY29ubi0+b2F1dGhfYmVhcmVyKSAmJgorICBpZigoY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCB8fCBkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdKSAmJgogICAgICAoKGRhdGEtPnJlcS5odHRwY29kZSA9PSA0MDEpIHx8CiAgICAgICAoY29ubi0+Yml0cy5hdXRobmVnICYmIGRhdGEtPnJlcS5odHRwY29kZSA8IDMwMCkpKSB7CiAgICAgcGlja2hvc3QgPSBwaWNrb25lYXV0aCgmZGF0YS0+c3RhdGUuYXV0aGhvc3QsIGF1dGhtYXNrKTsKQEAgLTYzNCw5ICs2NDEsNyBAQAogewogICBjb25zdCBjaGFyICphdXRoID0gTlVMTDsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykgfHwgZGVmaW5lZChVU0VfU1BORUdPKQogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSNlbmRpZgogCiAjaWZkZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICiAgICh2b2lkKXJlcXVlc3Q7CkBAIC02NDQsNyArNjQ5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgVVNFX1NQTkVHTwotICBpZigoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX05FR09USUFURSkpIHsKKyAgaWYoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX05FR09USUFURSkgewogICAgIGF1dGggPSAiTmVnb3RpYXRlIjsKICAgICByZXN1bHQgPSBDdXJsX291dHB1dF9uZWdvdGlhdGUoY29ubiwgcHJveHkpOwogICAgIGlmKHJlc3VsdCkKQEAgLTcwMCw3ICs3MDUsNyBAQAogICB9CiAgIGlmKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9CRUFSRVIpIHsKICAgICAvKiBCZWFyZXIgKi8KLSAgICBpZigoIXByb3h5ICYmIGNvbm4tPm9hdXRoX2JlYXJlciAmJgorICAgIGlmKCghcHJveHkgJiYgZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSAmJgogICAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkF1dGhvcml6YXRpb246IikpKSB7CiAgICAgICBhdXRoID0gIkJlYXJlciI7CiAgICAgICByZXN1bHQgPSBodHRwX291dHB1dF9iZWFyZXIoY29ubik7CkBAIC03NTgsNyArNzYzLDcgQEAKICAgYXV0aHByb3h5ID0gJmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKIAogICBpZigoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgfHwKLSAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCB8fCBjb25uLT5vYXV0aF9iZWFyZXIpCisgICAgIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkKICAgICAvKiBjb250aW51ZSBwbGVhc2UgKi87CiAgIGVsc2UgewogICAgIGF1dGhob3N0LT5kb25lID0gVFJVRTsKQEAgLTExMzYsMTAgKzExNDEsMTQgQEAKICAqLwogdm9pZCBDdXJsX2FkZF9idWZmZXJfZnJlZShDdXJsX3NlbmRfYnVmZmVyICoqaW5wKQogewotICBDdXJsX3NlbmRfYnVmZmVyICppbiA9ICppbnA7Ci0gIGlmKGluKSAvKiBkZWFsIHdpdGggTlVMTCBpbnB1dCAqLworICBDdXJsX3NlbmRfYnVmZmVyICppbjsKKyAgaWYoIWlucCkKKyAgICByZXR1cm47CisgIGluID0gKmlucDsKKyAgaWYoaW4pIHsgLyogZGVhbCB3aXRoIE5VTEwgaW5wdXQgKi8KICAgICBmcmVlKGluLT5idWZmZXIpOwotICBmcmVlKGluKTsKKyAgICBmcmVlKGluKTsKKyAgfQogICAqaW5wID0gTlVMTDsKIH0KIApAQCAtMTQ5NywxMSArMTUwNiw5IEBACiAgICBpbnRlcmZhY2UgYW5kIHRoZW4gd2UncmUgYWx3YXlzIF9zZW5kaW5nXyBhIHJlcXVlc3QgYW5kIHRodXMgd2Ugd2FpdCBmb3IKICAgIHRoZSBzaW5nbGUgc29ja2V0IHRvIGJlY29tZSB3cml0YWJsZSBvbmx5ICovCiBzdGF0aWMgaW50IGh0dHBfZ2V0c29ja19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAvKiB3cml0ZSBtb2RlICovCi0gICh2b2lkKW51bXNvY2tzOyAvKiB1bnVzZWQsIHdlIHRydXN0IGl0IHRvIGJlIGF0IGxlYXN0IDEgKi8KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgcmV0dXJuIEdFVFNPQ0tfV1JJVEVTT0NLKDApOwogfQpAQCAtMTU1NSw2ICsxNTYyLDEzIEBACiAgIENVUkxjb2RlIHJlc3VsdDsKICAgREVCVUdBU1NFUlQoKGNvbm4pICYmIChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKSk7CiAKKyNpZmRlZiBFTkFCTEVfUVVJQworICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorI2VuZGlmCisKICAgLyogcGVyZm9ybSBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgc29ja2V0ICovCiAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsIGRvbmUpOwogICBpZihyZXN1bHQpCkBAIC0xNTY0LDExICsxNTc4LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cHNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQotICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIEN1cmxfc3NsX2dldHNvY2soY29ubiwgc29ja3MpOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKIH0KICNlbmRpZiAvKiBVU0VfU1NMICovCkBAIC0xNjAyLDcgKzE2MTUsOCBAQAogICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT5zZW5kX2J1ZmZlcik7CiAgIH0KIAotICBDdXJsX2h0dHAyX2RvbmUoY29ubiwgcHJlbWF0dXJlKTsKKyAgQ3VybF9odHRwMl9kb25lKGRhdGEsIHByZW1hdHVyZSk7CisgIEN1cmxfcXVpY19kb25lKGRhdGEsIHByZW1hdHVyZSk7CiAKICAgQ3VybF9taW1lX2NsZWFucGFydCgmaHR0cC0+Zm9ybSk7CiAKQEAgLTE2NTAsNiArMTY2NCwxMiBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9odHRwX3N0cmluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgaWYoKGRhdGEtPnNldC5odHRwdmVyc2lvbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8zKSB8fAorICAgICAoY29ubi0+aHR0cHZlcnNpb24gPT0gMzApKQorICAgIHJldHVybiAiMyI7CisjZW5kaWYKKwogI2lmZGVmIFVTRV9OR0hUVFAyCiAgIGlmKGNvbm4tPnByb3RvLmh0dHBjLmgyKQogICAgIHJldHVybiAiMiI7CkBAIC0xNjY5LDggKzE2ODksOCBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gZmFsc2UgdW5sZXNzIGl0IGlzIHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gVFJVRSBiZWxvdyAqLwotICBpZih1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pICYmCi0gICAgIChjb25uLT5odHRwdmVyc2lvbiAhPSAyMCkpIHsKKyAgaWYoIWRhdGEtPnN0YXRlLmRpc2FibGVleHBlY3QgJiYgdXNlX2h0dHBfMV8xcGx1cyhkYXRhLCBjb25uKSAmJgorICAgICAoY29ubi0+aHR0cHZlcnNpb24gPCAyMCkpIHsKICAgICAvKiBpZiBub3QgZG9pbmcgSFRUUCAxLjAgb3IgdmVyc2lvbiAyLCBvciBkaXNhYmxlZCBleHBsaWNpdGx5LCB3ZSBhZGQgYW4KICAgICAgICBFeHBlY3Q6IDEwMC1jb250aW51ZSB0byB0aGUgaGVhZGVycyB3aGljaCBhY3R1YWxseSBzcGVlZHMgdXAgcG9zdAogICAgICAgIG9wZXJhdGlvbnMgKGFzIHRoZXJlIGlzIG9uZSBwYWNrZXQgY29taW5nIGJhY2sgZnJvbSB0aGUgd2ViIHNlcnZlcikgKi8KQEAgLTE3MDAsNyArMTcyMCw3IEBACiAgICB3aWxsIHJldHVybiBhbiBlcnJvciBjb2RlIGlmIG9uZSBvZiB0aGUgaGVhZGVycyBpcwogICAgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkgKi8KIENVUkxjb2RlIEN1cmxfaHR0cF9jb21waWxlX3RyYWlsZXJzKHN0cnVjdCBjdXJsX3NsaXN0ICp0cmFpbGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKipidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpoYW5kbGUpCiB7CiAgIGNoYXIgKnB0ciA9IE5VTEw7CkBAIC0xNzI2LDcgKzE3NDYsNyBAQAogICAgIC8qIG9ubHkgYWRkIGNvcnJlY3RseSBmb3JtYXR0ZWQgdHJhaWxlcnMgKi8KICAgICBwdHIgPSBzdHJjaHIodHJhaWxlcnMtPmRhdGEsICc6Jyk7CiAgICAgaWYocHRyICYmICoocHRyICsgMSkgPT0gJyAnKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZidWZmZXIsICIlcyVzIiwgdHJhaWxlcnMtPmRhdGEsCisgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKGJ1ZmZlciwgIiVzJXMiLCB0cmFpbGVycy0+ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kb2ZsaW5lX25hdGl2ZSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNzM1LDcgKzE3NTUsNyBAQAogICAgICAgaW5mb2YoaGFuZGxlLCAiTWFsZm9ybWF0dGVkIHRyYWlsaW5nIGhlYWRlciAhIFNraXBwaW5nIHRyYWlsZXIuIik7CiAgICAgdHJhaWxlcnMgPSB0cmFpbGVycy0+bmV4dDsKICAgfQotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJmJ1ZmZlciwgZW5kb2ZsaW5lX25ldHdvcmssCisgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihidWZmZXIsIGVuZG9mbGluZV9uZXR3b3JrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGVuZG9mbGluZV9uZXR3b3JrKSk7CiAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xODUxLDcgKzE4NzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbjogKi8KICAgICAgICAgICAgICAgICAgIGNoZWNrcHJlZml4KCJDb25uZWN0aW9uOiIsIGNvbXBhcmUpKQogICAgICAgICAgICAgOwotICAgICAgICAgIGVsc2UgaWYoKGNvbm4tPmh0dHB2ZXJzaW9uID09IDIwKSAmJgorICAgICAgICAgIGVsc2UgaWYoKGNvbm4tPmh0dHB2ZXJzaW9uID49IDIwKSAmJgogICAgICAgICAgICAgICAgICAgY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGNvbXBhcmUpKQogICAgICAgICAgICAgLyogSFRUUC8yIGRvZXNuJ3Qgc3VwcG9ydCBjaHVua2VkIHJlcXVlc3RzICovCiAgICAgICAgICAgICA7CkBAIC0xODgxLDkgKzE5MDEsMTAgQEAKIH0KIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCi1DVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCitDVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcikKIHsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGNvbnN0IHN0cnVjdCB0bSAqdG07CiAgIHN0cnVjdCB0bSBrZWVwdGltZTsKICAgQ1VSTGNvZGUgcmVzdWx0OwpAQCAtMTkxNiw2ICsxOTM3LDExIEBACiAgICAgYnJlYWs7CiAgIH0KIAorICBpZihDdXJsX2NoZWNraGVhZGVycyhjb25uLCBjb25kcCkpIHsKKyAgICAvKiBBIGN1c3RvbSBoZWFkZXIgd2FzIHNwZWNpZmllZDsgaXQgd2lsbCBiZSBzZW50IGluc3RlYWQuICovCisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKICAgLyogVGhlIElmLU1vZGlmaWVkLVNpbmNlIGhlYWRlciBmYW1pbHkgc2hvdWxkIGhhdmUgdGhlaXIgdGltZXMgc2V0IGluCiAgICAqIEdNVCBhcyBSRkMyNjE2IGRlZmluZXM6ICJBbGwgSFRUUCBkYXRlL3RpbWUgc3RhbXBzIE1VU1QgYmUKICAgICogcmVwcmVzZW50ZWQgaW4gR3JlZW53aWNoIE1lYW4gVGltZSAoR01UKSwgd2l0aG91dCBleGNlcHRpb24uIEZvciB0aGUKQEAgLTE5NDEsMTAgKzE5NjcsMTAgQEAKIH0KICNlbHNlCiAvKiBkaXNhYmxlZCAqLwotQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpCiB7Ci0gICh2b2lkKWRhdGE7CisgICh2b2lkKWNvbm47CiAgICh2b2lkKXJlcV9idWZmZXI7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KQEAgLTE5NzYsNTUgKzIwMDIsNTcgQEAKICAgY29uc3QgY2hhciAqaHR0cHN0cmluZzsKICAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcjsKICAgY3VybF9vZmZfdCBwb3N0c2l6ZSA9IDA7IC8qIGN1cmxfb2ZmX3QgdG8gaGFuZGxlIGxhcmdlIGZpbGUgc2l6ZXMgKi8KKyAgY2hhciAqYWx0dXNlZCA9IE5VTEw7CiAKICAgLyogQWx3YXlzIGNvbnNpZGVyIHRoZSBETyBwaGFzZSBkb25lIGFmdGVyIHRoaXMgZnVuY3Rpb24gY2FsbCwgZXZlbiBpZiB0aGVyZQogICAgICBtYXkgYmUgcGFydHMgb2YgdGhlIHJlcXVlc3QgdGhhdCBpcyBub3QgeWV0IHNlbnQsIHNpbmNlIHdlIGNhbiBkZWFsIHdpdGgKICAgICAgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgaW4gdGhlIFBFUkZPUk0gcGhhc2UuICovCiAgICpkb25lID0gVFJVRTsKIAotICBpZihjb25uLT5odHRwdmVyc2lvbiA8IDIwKSB7IC8qIHVubGVzcyB0aGUgY29ubmVjdGlvbiBpcyByZS11c2VkIGFuZCBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDIgKi8KLSAgICBzd2l0Y2goY29ubi0+bmVnbnBuKSB7Ci0gICAgY2FzZSBDVVJMX0hUVFBfVkVSU0lPTl8yOgotICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAyMDsgLyogd2Uga25vdyB3ZSdyZSBvbiBIVFRQLzIgbm93ICovCi0KLSAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cDJfc3dpdGNoZWQoY29ubiwgTlVMTCwgMCk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfSFRUUF9WRVJTSU9OXzFfMToKLSAgICAgIC8qIGNvbnRpbnVlIHdpdGggSFRUUC8xLjEgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCAqLwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIENoZWNrIGlmIHVzZXIgd2FudHMgdG8gdXNlIEhUVFAvMiB3aXRoIGNsZWFyIFRDUCovCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICAgIGlmKGNvbm4tPmRhdGEtPnNldC5odHRwdmVyc2lvbiA9PQotICAgICAgICAgQ1VSTF9IVFRQX1ZFUlNJT05fMl9QUklPUl9LTk9XTEVER0UpIHsKLSAgICAgICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSB7Ci0gICAgICAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBIVFRQLzIgcHJveGllcyB5ZXQuIEFsc28gaXQncyBkZWJhdGFibGUgd2hldGhlcgotICAgICAgICAgICAgIG9yIG5vdCB0aGlzIHNldHRpbmcgc2hvdWxkIGFwcGx5IHRvIEhUVFAvMiBwcm94aWVzLiAqLwotICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyBIVFRQLzIgcHJpb3Iga25vd2xlZGdlIGR1ZSB0byBwcm94eVxuIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkhUVFAvMiBvdmVyIGNsZWFuIFRDUFxuIikpOwotICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDIwOworICBpZihjb25uLT50cmFuc3BvcnQgIT0gVFJOU1BSVF9RVUlDKSB7CisgICAgaWYoY29ubi0+aHR0cHZlcnNpb24gPCAyMCkgeyAvKiB1bmxlc3MgdGhlIGNvbm5lY3Rpb24gaXMgcmUtdXNlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaHR0cDIgKi8KKyAgICAgIHN3aXRjaChjb25uLT5uZWducG4pIHsKKyAgICAgIGNhc2UgQ1VSTF9IVFRQX1ZFUlNJT05fMjoKKyAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAyMDsgLyogd2Uga25vdyB3ZSdyZSBvbiBIVFRQLzIgbm93ICovCiAKICAgICAgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zd2l0Y2hlZChjb25uLCBOVUxMLCAwKTsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE6CisgICAgICAgIC8qIGNvbnRpbnVlIHdpdGggSFRUUC8xLjEgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCAqLworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIENoZWNrIGlmIHVzZXIgd2FudHMgdG8gdXNlIEhUVFAvMiB3aXRoIGNsZWFyIFRDUCovCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICAgICAgaWYoY29ubi0+ZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09CisgICAgICAgICAgIENVUkxfSFRUUF9WRVJTSU9OXzJfUFJJT1JfS05PV0xFREdFKSB7CisgICAgICAgICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSB7CisgICAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IEhUVFAvMiBwcm94aWVzIHlldC4gQWxzbyBpdCdzIGRlYmF0YWJsZQorICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdGhpcyBzZXR0aW5nIHNob3VsZCBhcHBseSB0byBIVFRQLzIgcHJveGllcy4gKi8KKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyBIVFRQLzIgcHJpb3Iga25vd2xlZGdlIGR1ZSB0byBwcm94eVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkhUVFAvMiBvdmVyIGNsZWFuIFRDUFxuIikpOworICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMjA7CisKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2h0dHAyX3N3aXRjaGVkKGNvbm4sIE5VTEwsIDApOworICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICNlbmRpZgotICAgICAgYnJlYWs7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHByZXBhcmUgZm9yIGEgaHR0cDIgcmVxdWVzdCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zZXR1cChjb25uKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgIH0KLSAgZWxzZSB7Ci0gICAgLyogcHJlcGFyZSBmb3IgYSBodHRwMiByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zZXR1cChjb25uKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KICAgaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIERFQlVHQVNTRVJUKGh0dHApOwogCkBAIC0yMjIwLDE0ICsyMjQ4LDE2IEBACiAgIGVsc2UgewogICAgIGlmKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSAmJgogICAgICAgICgoKGh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUgfHwgaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfRk9STSkgJiYKLSAgICAgICBodHRwLT5wb3N0c2l6ZSA8IDApIHx8Ci0gICAgICAgKGRhdGEtPnNldC51cGxvYWQgJiYgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9PSAtMSkpKSB7CisgICAgICAgICBodHRwLT5wb3N0c2l6ZSA8IDApIHx8CisgICAgICAgICgoZGF0YS0+c2V0LnVwbG9hZCB8fCBodHRwcmVxID09IEhUVFBSRVFfUE9TVCkgJiYKKyAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPT0gLTEpKSkgewogICAgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQogICAgICAgICAvKiBkb24ndCBlbmFibGUgY2h1bmtlZCBkdXJpbmcgYXV0aCBuZWcgKi8KICAgICAgICAgOwogICAgICAgZWxzZSBpZih1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pKSB7Ci0gICAgICAgIC8qIEhUVFAsIHVwbG9hZCwgdW5rbm93biBmaWxlIHNpemUgYW5kIG5vdCBIVFRQIDEuMCAqLwotICAgICAgICBkYXRhLT5yZXEudXBsb2FkX2NodW5reSA9IFRSVUU7CisgICAgICAgIGlmKGNvbm4tPmh0dHB2ZXJzaW9uIDwgMjApCisgICAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCisgICAgICAgICAgZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgPSBUUlVFOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJDaHVua3kgdXBsb2FkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFRUUCAxLjAiKTsKQEAgLTIzMjgsNyArMjM1OCw2IEBACiAKICAgICAvKiBhbmQgbm8gZnJhZ21lbnQgcGFydCAqLwogICAgIENVUkxVY29kZSB1YzsKLSAgICBjaGFyICp1cmw7CiAgICAgQ1VSTFUgKmggPSBjdXJsX3VybF9kdXAoZGF0YS0+c3RhdGUudWgpOwogICAgIGlmKCFoKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CkBAIC0yMzU5LDE5ICsyMzg4LDE1IEBACiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgfQogICAgIH0KLSAgICAvKiBub3cgZXh0cmFjdCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIFVSTCAqLwotICAgIHVjID0gY3VybF91cmxfZ2V0KGgsIENVUkxVUEFSVF9VUkwsICZ1cmwsIDApOworICAgIC8qIEV4dHJhY3QgdGhlIFVSTCB0byB1c2UgaW4gdGhlIHJlcXVlc3QuIFN0b3JlIGluIFNUUklOR19URU1QX1VSTCBmb3IKKyAgICAgICBjbGVhbi11cCByZWFzb25zIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGJlZm9yZSB0aGUgZnJlZSgpIGZ1cnRoZXIKKyAgICAgICBkb3duLiAqLworICAgIHVjID0gY3VybF91cmxfZ2V0KGgsIENVUkxVUEFSVF9VUkwsICZkYXRhLT5zZXQuc3RyW1NUUklOR19URU1QX1VSTF0sIDApOwogICAgIGlmKHVjKSB7CiAgICAgICBjdXJsX3VybF9jbGVhbnVwKGgpOwogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgfQogCi0gICAgaWYoZGF0YS0+Y2hhbmdlLnVybF9hbGxvYykKLSAgICAgIGZyZWUoZGF0YS0+Y2hhbmdlLnVybCk7Ci0KLSAgICBkYXRhLT5jaGFuZ2UudXJsID0gdXJsOwotICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBUUlVFOwotCiAgICAgY3VybF91cmxfY2xlYW51cChoKTsKIAogICAgIGlmKHN0cmNhc2Vjb21wYXJlKCJmdHAiLCBkYXRhLT5zdGF0ZS51cC5zY2hlbWUpKSB7CkBAIC0yNTUwLDEyICsyNTc1LDE2IEBACiAgICAgcXVlcnkgPSBOVUxMOwogICB9CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIC8qIHVybCAqLwogICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSAmJiAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpIHsKLSAgICBjaGFyICp1cmwgPSBkYXRhLT5jaGFuZ2UudXJsOworICAgIGNoYXIgKnVybCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RFTVBfVVJMXTsKICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsIHVybCwgc3RybGVuKHVybCkpOworICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c2V0LnN0cltTVFJJTkdfVEVNUF9VUkxdKTsKICAgfQotICBlbHNlIGlmKHBhc3RlX2Z0cF91c2VycHdkKQorICBlbHNlCisjZW5kaWYKKyAgaWYocGFzdGVfZnRwX3VzZXJwd2QpCiAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgImZ0cDovLyVzOiVzQCVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsIGNvbm4tPnBhc3N3ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBzaXplb2YoImZ0cDovLyIpIC0gMSk7CkBAIC0yNTY5LDYgKzI1OTgsMTQgQEAKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKKyNpZmRlZiBVU0VfQUxUU1ZDCisgIGlmKGNvbm4tPmJpdHMuYWx0dXNlZCAmJiAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkFsdC1Vc2VkIikpIHsKKyAgICBhbHR1c2VkID0gYXByaW50ZigiQWx0LVVzZWQ6ICVzOiVkXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUsIGNvbm4tPmNvbm5fdG9fcG9ydCk7CisgICAgaWYoIWFsdHVzZWQpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorI2VuZGlmCiAgIHJlc3VsdCA9CiAgICAgQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogZnRwIHR5cGVjb2RlICg7dHlwZT14KSAqLwpAQCAtMjU4Myw3ICsyNjIwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCiAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJlZmVyZXIgKi8KICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogUHJveHktQ29ubmVjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiwvKiB0cmFuc2Zlci1lbmNvZGluZyAqLworICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc2Zlci1lbmNvZGluZyAqLworICAgICAgICAgICAgICAgICAgICAgIiVzIiwvKiBBbHQtVXNlZCAqLwogCiAgICAgICAgICAgICAgICAgICAgICBmdHBfdHlwZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICBodHRwc3RyaW5nLApAQCAtMjYwOSwxMyArMjY0NywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSAmJgogICAgICAgICAgICAgICAgICAgICAgICFDdXJsX2NoZWNrUHJveHloZWFkZXJzKGNvbm4sICJQcm94eS1Db25uZWN0aW9uIikpPwogICAgICAgICAgICAgICAgICAgICAgIlByb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjoiIiwKLSAgICAgICAgICAgICAgICAgICAgIHRlCisgICAgICAgICAgICAgICAgICAgICB0ZSwKKyAgICAgICAgICAgICAgICAgICAgIGFsdHVzZWQgPyBhbHR1c2VkIDogIiIKICAgICAgICk7CiAKICAgLyogY2xlYXIgdXNlcnB3ZCBhbmQgcHJveHl1c2VycHdkIHRvIGF2b2lkIHJlLXVzaW5nIG9sZCBjcmVkZW50aWFscwogICAgKiBmcm9tIHJlLXVzZWQgY29ubmVjdGlvbnMgKi8KICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51c2VycHdkKTsKICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2QpOworICBmcmVlKGFsdHVzZWQpOwogCiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjYzNSw3ICsyNjc1LDcgQEAKICAgICBzdHJ1Y3QgQ29va2llICpjbyA9IE5VTEw7IC8qIG5vIGNvb2tpZXMgZnJvbSBzdGFydCAqLwogICAgIGludCBjb3VudCA9IDA7CiAKLSAgICBpZihkYXRhLT5jb29raWVzKSB7CisgICAgaWYoZGF0YS0+Y29va2llcyAmJiBkYXRhLT5zdGF0ZS5jb29raWVfZW5naW5lKSB7CiAgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CiAgICAgICBjbyA9IEN1cmxfY29va2llX2dldGxpc3QoZGF0YS0+Y29va2llcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5jb29raWVob3N0PwpAQCAtMjY4Myw3ICsyNzIzLDcgQEAKICAgfQogI2VuZGlmCiAKLSAgcmVzdWx0ID0gQ3VybF9hZGRfdGltZWNvbmRpdGlvbihkYXRhLCByZXFfYnVmZmVyKTsKKyAgcmVzdWx0ID0gQ3VybF9hZGRfdGltZWNvbmRpdGlvbihjb25uLCByZXFfYnVmZmVyKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTMwMDAsMTEgKzMwNDAsMTIgQEAKICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBIVFRQIHJlcXVlc3QiKTsKICAgICBlbHNlCiAgICAgICAvKiBIVFRQIEdFVC9IRUFEIGRvd25sb2FkOiAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBvc3RkYXRhP0ZJUlNUU09DS0VUOi0xKTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLCAtMSk7CiAgIH0KICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CisgIGlmKCFwb3N0c2l6ZSkKKyAgICBkYXRhLT5yZXEudXBsb2FkX2RvbmUgPSBUUlVFOwogCiAgIGlmKGRhdGEtPnJlcS53cml0ZWJ5dGVjb3VudCkgewogICAgIC8qIGlmIGEgcmVxdWVzdC1ib2R5IGhhcyBiZWVuIHNlbnQgb2ZmLCB3ZSBtYWtlIHN1cmUgdGhpcyBwcm9ncmVzcyBpcyBub3RlZApAQCAtMzE0Nyw2ICszMTg4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkKIHsKKyAgLyogbGVuZ3RoIGlzIGF0IG1vc3QgdGhlIHNpemUgb2YgYSBmdWxsIHJlYWQgYnVmZmVyLCBmb3Igd2hpY2ggdGhlIHVwcGVyCisgICAgIGJvdW5kIGlzIENVUkxfTUFYX1JFQURfU0laRS4gVGhlcmUgaXMgdGh1cyBubyBjaGFuY2Ugb2Ygb3ZlcmZsb3cgaW4gdGhpcworICAgICBjYWxjdWxhdGlvbi4gKi8KICAgc2l6ZV90IG5ld3NpemUgPSBrLT5oYnVmbGVuICsgbGVuZ3RoOwogICBpZihuZXdzaXplID4gQ1VSTF9NQVhfSFRUUF9IRUFERVIpIHsKICAgICAvKiBUaGUgcmVhc29uIHRvIGhhdmUgYSBtYXggbGltaXQgZm9yIHRoaXMgaXMgdG8gYXZvaWQgdGhlIHJpc2sgb2YgYSBiYWQKQEAgLTM1MDEsNyArMzU0NSwxNiBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBDdXJsX2V4cGlyZV9kb25lKGRhdGEsIEVYUElSRV8xMDBfVElNRU9VVCk7CiAgICAgICAgICAgICBpZighay0+dXBsb2FkX2RvbmUpIHsKLSAgICAgICAgICAgICAgaWYoZGF0YS0+c2V0Lmh0dHBfa2VlcF9zZW5kaW5nX29uX2Vycm9yKSB7CisgICAgICAgICAgICAgIGlmKChrLT5odHRwY29kZSA9PSA0MTcpICYmIGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlcikgeworICAgICAgICAgICAgICAgIC8qIDQxNyBFeHBlY3RhdGlvbiBGYWlsZWQgLSB0cnkgYWdhaW4gd2l0aG91dCB0aGUgRXhwZWN0CisgICAgICAgICAgICAgICAgICAgaGVhZGVyICovCisgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkdvdCA0MTcgd2hpbGUgd2FpdGluZyBmb3IgYSAxMDBcbiIpOworICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmRpc2FibGVleHBlY3QgPSBUUlVFOworICAgICAgICAgICAgICAgIERFQlVHQVNTRVJUKCFkYXRhLT5yZXEubmV3dXJsKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5yZXEubmV3dXJsID0gc3RyZHVwKGNvbm4tPmRhdGEtPmNoYW5nZS51cmwpOworICAgICAgICAgICAgICAgIEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYoZGF0YS0+c2V0Lmh0dHBfa2VlcF9zZW5kaW5nX29uX2Vycm9yKSB7CiAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkhUVFAgZXJyb3IgYmVmb3JlIGVuZCBvZiBzZW5kLCBrZWVwIHNlbmRpbmdcbiIpOwogICAgICAgICAgICAgICAgIGlmKGstPmV4cDEwMCA+IEVYUDEwMF9TRU5EX0RBVEEpIHsKICAgICAgICAgICAgICAgICAgIGstPmV4cDEwMCA9IEVYUDEwMF9TRU5EX0RBVEE7CkBAIC0zNTExLDggKzM1NjQsMTAgQEAKICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkhUVFAgZXJyb3IgYmVmb3JlIGVuZCBvZiBzZW5kLCBzdG9wIHNlbmRpbmdcbiIpOwogICAgICAgICAgICAgICAgIHN0cmVhbWNsb3NlKGNvbm4sICJTdG9wIHNlbmRpbmcgZGF0YSBiZWZvcmUgZXZlcnl0aGluZyBzZW50Iik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9kb25lX3NlbmRpbmcoY29ubiwgayk7CisgICAgICAgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBrLT51cGxvYWRfZG9uZSA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgay0+a2VlcG9uICY9IH5LRUVQX1NFTkQ7IC8qIGRvbid0IHNlbmQgKi8KICAgICAgICAgICAgICAgICBpZihkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIpCiAgICAgICAgICAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfRkFJTEVEOwogICAgICAgICAgICAgICB9CkBAIC0zNjQ5LDYgKzM3MDQsNyBAQAogICAgICAgICAgKiBndWFyYW50ZWVzIG9uIGZ1dHVyZSBiZWhhdmlvcnMgc2luY2UgaXQgaXNuJ3Qgd2l0aGluIHRoZSBwcm90b2NvbC4KICAgICAgICAgICovCiAgICAgICAgIGNoYXIgc2VwYXJhdG9yOworICAgICAgICBjaGFyIHR3b29ydGhyZWVbMl07CiAgICAgICAgIG5jID0gc3NjYW5mKEhFQURFUjEsCiAgICAgICAgICAgICAgICAgICAgICIgSFRUUC8lMWQuJTFkJWMlM2QiLAogICAgICAgICAgICAgICAgICAgICAmaHR0cHZlcnNpb25fbWFqb3IsCkBAIC0zNjU2LDggKzM3MTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAmc2VwYXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAmay0+aHR0cGNvZGUpOwogCi0gICAgICAgIGlmKG5jID09IDEgJiYgaHR0cHZlcnNpb25fbWFqb3IgPT0gMiAmJgotICAgICAgICAgICAxID09IHNzY2FuZihIRUFERVIxLCAiIEhUVFAvMiAlZCIsICZrLT5odHRwY29kZSkpIHsKKyAgICAgICAgaWYobmMgPT0gMSAmJiBodHRwdmVyc2lvbl9tYWpvciA+PSAyICYmCisgICAgICAgICAgIDIgPT0gc3NjYW5mKEhFQURFUjEsICIgSFRUUC8lMVsyM10gJWQiLCB0d29vcnRocmVlLCAmay0+aHR0cGNvZGUpKSB7CiAgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAwOwogICAgICAgICAgIG5jID0gNDsKICAgICAgICAgICBzZXBhcmF0b3IgPSAnICc7CkBAIC0zNjk1LDcgKzM3NTEsNyBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiVW5zdXBwb3J0ZWQgSFRUUCB2ZXJzaW9uIGluIHJlc3BvbnNlXG4iKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiVW5zdXBwb3J0ZWQgSFRUUCB2ZXJzaW9uIGluIHJlc3BvbnNlIik7CiAgICAgICAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwogICAgICAgICB9CiAgICAgICB9CkBAIC0zNzY5LDYgKzM4MjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAiSFRUUCAxLjEgb3IgbGF0ZXIgd2l0aCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25cbiIpKTsKICAgICAgICAgfQogCisgICAgICAgIGstPmh0dHBfYm9keWxlc3MgPSBrLT5odHRwY29kZSA+PSAxMDAgJiYgay0+aHR0cGNvZGUgPCAyMDA7CiAgICAgICAgIHN3aXRjaChrLT5odHRwY29kZSkgewogICAgICAgICBjYXNlIDMwNDoKICAgICAgICAgICAvKiAocXVvdGUgZnJvbSBSRkMyNjE2LCBzZWN0aW9uIDEwLjMuNSk6IFRoZSAzMDQgcmVzcG9uc2UKQEAgLTM3ODYsMTAgKzM4NDMsOSBAQAogICAgICAgICAgICAqIGVtcHR5IGxpbmUgYWZ0ZXIgdGhlIGhlYWRlciBmaWVsZHMuICovCiAgICAgICAgICAgay0+c2l6ZSA9IDA7CiAgICAgICAgICAgay0+bWF4ZG93bmxvYWQgPSAwOwotICAgICAgICAgIGstPmlnbm9yZWNsID0gVFJVRTsgLyogaWdub3JlIENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMgKi8KKyAgICAgICAgICBrLT5odHRwX2JvZHlsZXNzID0gVFJVRTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAvKiBub3RoaW5nICovCiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTM4MDUsOCArMzg2MSw4IEBACiAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLyogQ2hlY2sgZm9yIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgbGluZXMgdG8gZ2V0IHNpemUgKi8KLSAgICBpZighay0+aWdub3JlY2wgJiYgIWRhdGEtPnNldC5pZ25vcmVjbCAmJgotICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LUxlbmd0aDoiLCBrLT5wKSkgeworICAgIGlmKCFrLT5odHRwX2JvZHlsZXNzICYmCisgICAgICAgIWRhdGEtPnNldC5pZ25vcmVjbCAmJiBjaGVja3ByZWZpeCgiQ29udGVudC1MZW5ndGg6Iiwgay0+cCkpIHsKICAgICAgIGN1cmxfb2ZmX3QgY29udGVudGxlbmd0aDsKICAgICAgIENVUkxvZmZ0IG9mZnQgPSBjdXJseF9zdHJ0b29mZnQoay0+cCArIDE1LCBOVUxMLCAxMCwgJmNvbnRlbnRsZW5ndGgpOwogCkBAIC0zODk1LDcgKzM5NTEsNyBAQAogICAgICAgICovCiAgICAgICBzdHJlYW1jbG9zZShjb25uLCAiQ29ubmVjdGlvbjogY2xvc2UgdXNlZCIpOwogICAgIH0KLSAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJUcmFuc2Zlci1FbmNvZGluZzoiLCBrLT5wKSkgeworICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGstPnApKSB7CiAgICAgICAvKiBPbmUgb3IgbW9yZSBlbmNvZGluZ3MuIFdlIGNoZWNrIGZvciBjaHVua2VkIGFuZC9vciBhIGNvbXByZXNzaW9uCiAgICAgICAgICBhbGdvcml0aG0uICovCiAgICAgICAvKgpAQCAtMzkxMSw3ICszOTY3LDcgQEAKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1FbmNvZGluZzoiLCBrLT5wKSAmJgorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkNvbnRlbnQtRW5jb2Rpbmc6Iiwgay0+cCkgJiYKICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSkgewogICAgICAgLyoKICAgICAgICAqIFByb2Nlc3MgQ29udGVudC1FbmNvZGluZy4gTG9vayBmb3IgdGhlIHZhbHVlczogaWRlbnRpdHksCkBAIC0zOTI0LDcgKzM5ODAsMjAgQEAKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1SYW5nZToiLCBrLT5wKSkgeworICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlJldHJ5LUFmdGVyOiIsIGstPnApKSB7CisgICAgICAvKiBSZXRyeS1BZnRlciA9IEhUVFAtZGF0ZSAvIGRlbGF5LXNlY29uZHMgKi8KKyAgICAgIGN1cmxfb2ZmX3QgcmV0cnlfYWZ0ZXIgPSAwOyAvKiB6ZXJvIGZvciB1bmtub3duIG9yICJub3ciICovCisgICAgICB0aW1lX3QgZGF0ZSA9IEN1cmxfZ2V0ZGF0ZV9jYXBwZWQoJmstPnBbMTJdKTsKKyAgICAgIGlmKC0xID09IGRhdGUpIHsKKyAgICAgICAgLyogbm90IGEgZGF0ZSwgdHJ5IGl0IGFzIGEgZGVjaW1hbCBudW1iZXIgKi8KKyAgICAgICAgKHZvaWQpY3VybHhfc3RydG9vZmZ0KCZrLT5wWzEyXSwgTlVMTCwgMTAsICZyZXRyeV9hZnRlcik7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIGNvbnZlcnQgZGF0ZSB0byBudW1iZXIgb2Ygc2Vjb25kcyBpbnRvIHRoZSBmdXR1cmUgKi8KKyAgICAgICAgcmV0cnlfYWZ0ZXIgPSBkYXRlIC0gdGltZShOVUxMKTsKKyAgICAgIGRhdGEtPmluZm8ucmV0cnlfYWZ0ZXIgPSByZXRyeV9hZnRlcjsgLyogc3RvcmUgaXQgKi8KKyAgICB9CisgICAgZWxzZSBpZighay0+aHR0cF9ib2R5bGVzcyAmJiBjaGVja3ByZWZpeCgiQ29udGVudC1SYW5nZToiLCBrLT5wKSkgewogICAgICAgLyogQ29udGVudC1SYW5nZTogYnl0ZXMgW251bV0tCiAgICAgICAgICBDb250ZW50LVJhbmdlOiBieXRlczogW251bV0tCiAgICAgICAgICBDb250ZW50LVJhbmdlOiBbbnVtXS0KQEAgLTM5NTQsNyArNDAyMyw3IEBACiAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsgLyogZ2V0IGV2ZXJ5dGhpbmcgKi8KICAgICB9CiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCi0gICAgZWxzZSBpZihkYXRhLT5jb29raWVzICYmCisgICAgZWxzZSBpZihkYXRhLT5jb29raWVzICYmIGRhdGEtPnN0YXRlLmNvb2tpZV9lbmdpbmUgJiYKICAgICAgICAgICAgIGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGstPnApKSB7CiAgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLAogICAgICAgICAgICAgICAgICAgICAgIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKQEAgLTM5NzAsMTEgKzQwMzksOSBAQAogICAgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKICAgICB9CiAjZW5kaWYKLSAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJMYXN0LU1vZGlmaWVkOiIsIGstPnApICYmCisgICAgZWxzZSBpZighay0+aHR0cF9ib2R5bGVzcyAmJiBjaGVja3ByZWZpeCgiTGFzdC1Nb2RpZmllZDoiLCBrLT5wKSAmJgogICAgICAgICAgICAgKGRhdGEtPnNldC50aW1lY29uZGl0aW9uIHx8IGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpICkgewotICAgICAgdGltZV90IHNlY3MgPSB0aW1lKE5VTEwpOwotICAgICAgay0+dGltZW9mZG9jID0gY3VybF9nZXRkYXRlKGstPnAgKyBzdHJsZW4oIkxhc3QtTW9kaWZpZWQ6IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlY3MpOworICAgICAgay0+dGltZW9mZG9jID0gQ3VybF9nZXRkYXRlX2NhcHBlZChrLT5wICsgc3RybGVuKCJMYXN0LU1vZGlmaWVkOiIpKTsKICAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpCiAgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBrLT50aW1lb2Zkb2M7CiAgICAgfQpAQCAtMzk5NSw3ICs0MDYyLDcgQEAKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICNpZmRlZiBVU0VfU1BORUdPCisjaWZkZWYgVVNFX1NQTkVHTwogICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlBlcnNpc3RlbnQtQXV0aCIsIGstPnApKSB7CiAgICAgICBzdHJ1Y3QgbmVnb3RpYXRlZGF0YSAqbmVnZGF0YSA9ICZjb25uLT5uZWdvdGlhdGU7CiAgICAgICBzdHJ1Y3QgYXV0aCAqYXV0aHAgPSAmZGF0YS0+c3RhdGUuYXV0aGhvc3Q7CkBAIC00MDAzLDE0ICs0MDcwLDE1IEBACiAgICAgICAgIGNoYXIgKnBlcnNpc3RlbnRhdXRoID0gQ3VybF9jb3B5X2hlYWRlcl92YWx1ZShrLT5wKTsKICAgICAgICAgaWYoIXBlcnNpc3RlbnRhdXRoKQogICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBuZWdkYXRhLT5ub2F1dGhwZXJzaXN0ID0gY2hlY2twcmVmaXgoImZhbHNlIiwgcGVyc2lzdGVudGF1dGgpOworICAgICAgICBuZWdkYXRhLT5ub2F1dGhwZXJzaXN0ID0gY2hlY2twcmVmaXgoImZhbHNlIiwgcGVyc2lzdGVudGF1dGgpPworICAgICAgICAgIFRSVUU6RkFMU0U7CiAgICAgICAgIG5lZ2RhdGEtPmhhdmVub2F1dGhwZXJzaXN0ID0gVFJVRTsKICAgICAgICAgaW5mb2YoZGF0YSwgIk5lZ290aWF0ZTogbm9hdXRocGVyc2lzdCAtPiAlZCwgaGVhZGVyIHBhcnQ6ICVzIiwKICAgICAgICAgICBuZWdkYXRhLT5ub2F1dGhwZXJzaXN0LCBwZXJzaXN0ZW50YXV0aCk7CiAgICAgICAgIGZyZWUocGVyc2lzdGVudGF1dGgpOwogICAgICAgfQogICAgIH0KLSAgI2VuZGlmCisjZW5kaWYKICAgICBlbHNlIGlmKChrLT5odHRwY29kZSA+PSAzMDAgJiYgay0+aHR0cGNvZGUgPCA0MDApICYmCiAgICAgICAgICAgICBjaGVja3ByZWZpeCgiTG9jYXRpb246Iiwgay0+cCkgJiYKICAgICAgICAgICAgICFkYXRhLT5yZXEubG9jYXRpb24pIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuaAppbmRleCBhNTlmZTdhLi40YzE4MjVmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02OSwzMiArNjksMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldGluZGV4KTsKIAotQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1Zik7CiBDVVJMY29kZSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2Nvbm5lY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyKTsKIENVUkxjb2RlIEN1cmxfaHR0cF9jb21waWxlX3RyYWlsZXJzKHN0cnVjdCBjdXJsX3NsaXN0ICp0cmFpbGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKipidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpoYW5kbGUpOwogCiAvKiBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbnMgc2V0IHVwIHRvIGJlIGNhbGxlZCBieSB0aGUgbWFpbiBlbmdpbmUgKi8KIENVUkxjb2RlIEN1cmxfaHR0cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogQ1VSTGNvZGUgQ3VybF9odHRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICosIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CiBDVVJMY29kZSBDdXJsX2h0dHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotQ1VSTGNvZGUgQ3VybF9odHRwX3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLQotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gaHR0cF9jaHVua3MuYyAqLwotdm9pZCBDdXJsX2h0dHBjaHVua19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1DSFVOS2NvZGUgQ3VybF9odHRwY2h1bmtfcmVhZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmRhdGFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBsZW5ndGgsIHNzaXplX3QgKndyb3RlKTsKIAogLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBodHRwLmMgKi8KLXZvaWQgQ3VybF9odHRwX2F1dGhfc3RhZ2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IHN0YWdlKTsKIENVUkxjb2RlIEN1cmxfaHR0cF9pbnB1dF9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGgpOwogQ1VSTGNvZGUgQ3VybF9odHRwX2F1dGhfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1DVVJMY29kZSBDdXJsX2h0dHBfcGVyaGFwc3Jld2luZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCiAvKiBJZiBvbmx5IHRoZSBQSUNLTk9ORSBiaXQgaXMgc2V0LCB0aGVyZSBoYXMgYmVlbiBhIHJvdW5kLXRyaXAgYW5kIHdlCiAgICBzZWxlY3RlZCB0byB1c2Ugbm8gYXV0aCBhdCBhbGwuIEllLCB3ZSBhY3RpdmVseSBzZWxlY3Qgbm8gYXV0aCwgYXMgb3Bwb3NlZApAQCAtMTI0LDExICsxMTYsMTUgQEAKICAqCiAgKi8KICNpZm5kZWYgRVhQRUNUXzEwMF9USFJFU0hPTEQKLSNkZWZpbmUgRVhQRUNUXzEwMF9USFJFU0hPTEQgMTAyNAorI2RlZmluZSBFWFBFQ1RfMTAwX1RIUkVTSE9MRCAoMTAyNCoxMDI0KQogI2VuZGlmCiAKICNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLwogCisjaWZkZWYgVVNFX05HSFRUUDMKK3N0cnVjdCBoM291dDsgLyogc2VlIG5ndGNwMiAqLworI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIVFRQIHVuaXF1ZSBzZXR1cAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3NSwyMCArMTcxLDQwIEBACiAgIGludCBzdGF0dXNfY29kZTsgLyogSFRUUCBzdGF0dXMgY29kZSAqLwogICBjb25zdCB1aW50OF90ICpwYXVzZWRhdGE7IC8qIHBvaW50ZXIgdG8gZGF0YSByZWNlaXZlZCBpbiBvbl9kYXRhX2NodW5rICovCiAgIHNpemVfdCBwYXVzZWxlbjsgLyogdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGRhdGEgKi8KLSAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCiAgIGJvb2wgY2xvc2VfaGFuZGxlZDsgLyogVFJVRSBpZiBzdHJlYW0gY2xvc3VyZSBpcyBoYW5kbGVkIGJ5IGxpYmN1cmwgKi8KLSAgY2hhciAqbWVtOyAgICAgLyogcG9pbnRzIHRvIGEgYnVmZmVyIGluIG1lbW9yeSB0byBzdG9yZSByZWNlaXZlZCBkYXRhICovCi0gIHNpemVfdCBsZW47ICAgIC8qIHNpemUgb2YgdGhlIGJ1ZmZlciAnbWVtJyBwb2ludHMgdG8gKi8KLSAgc2l6ZV90IG1lbWxlbjsgLyogc2l6ZSBvZiBkYXRhIGNvcGllZCB0byBtZW0gKi8KLQotICBjb25zdCB1aW50OF90ICp1cGxvYWRfbWVtOyAvKiBwb2ludHMgdG8gYSBidWZmZXIgdG8gcmVhZCBmcm9tICovCi0gIHNpemVfdCB1cGxvYWRfbGVuOyAvKiBzaXplIG9mIHRoZSBidWZmZXIgJ3VwbG9hZF9tZW0nIHBvaW50cyB0byAqLwotICBjdXJsX29mZl90IHVwbG9hZF9sZWZ0OyAvKiBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB1cGxvYWQgKi8KIAogICBjaGFyICoqcHVzaF9oZWFkZXJzOyAgICAgICAvKiBhbGxvY2F0ZWQgYXJyYXkgKi8KICAgc2l6ZV90IHB1c2hfaGVhZGVyc191c2VkOyAgLyogbnVtYmVyIG9mIGVudHJpZXMgZmlsbGVkIGluICovCiAgIHNpemVfdCBwdXNoX2hlYWRlcnNfYWxsb2M7IC8qIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCAqLwogI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfTkdIVFRQMikgfHwgZGVmaW5lZChVU0VfTkdIVFRQMykKKyAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCisgIGNoYXIgKm1lbTsgICAgIC8qIHBvaW50cyB0byBhIGJ1ZmZlciBpbiBtZW1vcnkgdG8gc3RvcmUgcmVjZWl2ZWQgZGF0YSAqLworICBzaXplX3QgbGVuOyAgICAvKiBzaXplIG9mIHRoZSBidWZmZXIgJ21lbScgcG9pbnRzIHRvICovCisgIHNpemVfdCBtZW1sZW47IC8qIHNpemUgb2YgZGF0YSBjb3BpZWQgdG8gbWVtICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9OR0hUVFAyKSB8fCBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICAvKiBmaWVsZHMgdXNlZCBieSBib3RoIEhUVFAvMiBhbmQgSFRUUC8zICovCisgIGNvbnN0IHVpbnQ4X3QgKnVwbG9hZF9tZW07IC8qIHBvaW50cyB0byBhIGJ1ZmZlciB0byByZWFkIGZyb20gKi8KKyAgc2l6ZV90IHVwbG9hZF9sZW47IC8qIHNpemUgb2YgdGhlIGJ1ZmZlciAndXBsb2FkX21lbScgcG9pbnRzIHRvICovCisgIGN1cmxfb2ZmX3QgdXBsb2FkX2xlZnQ7IC8qIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIHVwbG9hZCAqLworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfUVVJQworICAvKioqKioqKioqKiogZm9yIEhUVFAvMyB3ZSBzdG9yZSBzdHJlYW0tbG9jYWwgZGF0YSBoZXJlICoqKioqKioqKioqKiovCisgIGludDY0X3Qgc3RyZWFtM19pZDsgLyogc3RyZWFtIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisgIGJvb2wgZmlyc3RoZWFkZXI7ICAvKiBGQUxTRSB1bnRpbCBoZWFkZXJzIGFycml2ZSAqLworICBib29sIGZpcnN0Ym9keTsgIC8qIEZBTFNFIHVudGlsIGJvZHkgYXJyaXZlcyAqLworICBib29sIGgzcmVxOyAgICAvKiBGQUxTRSB1bnRpbCByZXF1ZXN0IGlzIGlzc3VlZCAqLworICBib29sIHVwbG9hZF9kb25lOworI2VuZGlmCisjaWZkZWYgVVNFX05HSFRUUDMKKyAgc2l6ZV90IHVuYWNrZWRfd2luZG93OworICBzdHJ1Y3QgaDNvdXQgKmgzb3V0OyAvKiBwZXItc3RyZWFtIGJ1ZmZlcnMgZm9yIHVwbG9hZCAqLworICBjaGFyICpvdmVyZmxvd19idWY7IC8qIGV4Y2VzcyBkYXRhIHJlY2VpdmVkIGR1cmluZyBhIHNpbmdsZSBDdXJsX3JlYWQgKi8KKyAgc2l6ZV90IG92ZXJmbG93X2J1ZmxlbjsgLyogYW1vdW50IG9mIGRhdGEgY3VycmVudGx5IGluIG92ZXJmbG93X2J1ZiAqLworICBzaXplX3Qgb3ZlcmZsb3dfYnVmc2l6ZTsgLyogc2l6ZSBvZiB0aGUgb3ZlcmZsb3dfYnVmIGFsbG9jYXRpb24gKi8KKyNlbmRpZgogfTsKIAogI2lmZGVmIFVTRV9OR0hUVFAyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuYwppbmRleCA4ZTdiYzIxLi43MmIzOGEzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQzLDE5ICs0MywxMSBAQAogCiAjZGVmaW5lIEgyX0JVRlNJWkUgMzI3NjgKIAotI2lmIChOR0hUVFAyX1ZFUlNJT05fTlVNIDwgMHgwMTAwMDApCisjaWYgKE5HSFRUUDJfVkVSU0lPTl9OVU0gPCAweDAxMGMwMCkKICNlcnJvciB0b28gb2xkIG5naHR0cDIgdmVyc2lvbiwgdXBncmFkZSEKICNlbmRpZgogCi0jaWYgKE5HSFRUUDJfVkVSU0lPTl9OVU0gPiAweDAxMDgwMCkKLSNkZWZpbmUgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IgMQotI2VuZGlmCi0KLSNpZiAoTkdIVFRQMl9WRVJTSU9OX05VTSA+PSAweDAxMDkwMCkKLS8qIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrIGlzIHByZXNlbnQgaW4gbmdodHRwMiAxLjkuMCBvcgotICAgbGF0ZXIgKi8KLSNkZWZpbmUgTkdIVFRQMl9IQVNfRVJST1JfQ0FMTEJBQ0sgMQotI2Vsc2UKKyNpZmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAjZGVmaW5lIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrKHgseSkKICNlbmRpZgogCkBAIC02MywxMiArNTUsMTIgQEAKICNkZWZpbmUgTkdIVFRQMl9IQVNfU0VUX0xPQ0FMX1dJTkRPV19TSVpFIDEKICNlbmRpZgogCi0jZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDEgPDwgMzApCisjZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDMyICogMTAyNCAqIDEwMjQpIC8qIDMyIE1CICovCiAKICNpZmRlZiBERUJVR19IVFRQMgogI2RlZmluZSBIMkJVR0YoeCkgeAogI2Vsc2UKLSNkZWZpbmUgSDJCVUdGKHgpIGRvIHsgfSBXSElMRV9GQUxTRQorI2RlZmluZSBIMkJVR0YoeCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogCkBAIC0xMDAsMTYgKzkyLDExIEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cDJfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKIHsKICAgY29uc3Qgc3RydWN0IGh0dHBfY29ubiAqYyA9ICZjb25uLT5wcm90by5odHRwYzsKICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOwogICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKLSAgKHZvaWQpbnVtc29ja3M7CiAKICAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogCkBAIC0xMjYsMTEgKzExMyw5IEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cDJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBodHRwMl9wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOworICByZXR1cm4gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2tzKTsKIH0KIAogLyoKQEAgLTI0MCw3ICsyMjUsNyBAQAogCiAgIGlmKGNoZWNrc190b19wZXJmb3JtICYgQ09OTkNIRUNLX0tFRVBBTElWRSkgewogICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICAgIHRpbWVfdCBlbGFwc2VkID0gQ3VybF90aW1lZGlmZihub3csIGNoZWNrLT5rZWVwYWxpdmUpOworICAgIHRpbWVkaWZmX3QgZWxhcHNlZCA9IEN1cmxfdGltZWRpZmYobm93LCBjaGVjay0+a2VlcGFsaXZlKTsKIAogICAgIGlmKGVsYXBzZWQgPiBjaGVjay0+dXBrZWVwX2ludGVydmFsX21zKSB7CiAgICAgICAvKiBQZXJmb3JtIGFuIEhUVFAvMiBQSU5HICovCkBAIC0yNjksNyArMjU0LDcgQEAKICAgcmV0dXJuIHJldF92YWw7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIEN1cmxfaHR0cF9zZXR1cF9jb25uICovCisvKiBjYWxsZWQgZnJvbSBodHRwX3NldHVwX2Nvbm4gKi8KIHZvaWQgQ3VybF9odHRwMl9zZXR1cF9yZXEoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKIHsKICAgc3RydWN0IEhUVFAgKmh0dHAgPSBkYXRhLT5yZXEucHJvdG9wOwpAQCAtMjg2LDcgKzI3MSw3IEBACiAgIGh0dHAtPm1lbWxlbiA9IDA7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIEN1cmxfaHR0cF9zZXR1cF9jb25uICovCisvKiBjYWxsZWQgZnJvbSBodHRwX3NldHVwX2Nvbm4gKi8KIHZvaWQgQ3VybF9odHRwMl9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgY29ubi0+cHJvdG8uaHR0cGMuc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9CkBAIC0zNTEsMzUgKzMzNiw2IEBACiAgIHJldHVybiBtc25wcmludGYocCwgbGVuLCAiIG5naHR0cDIvJXMiLCBoMi0+dmVyc2lvbl9zdHIpOwogfQogCi0vKiBIVFRQLzIgZXJyb3IgY29kZSB0byBuYW1lIGJhc2VkIG9uIHRoZSBFcnJvciBDb2RlIFJlZ2lzdHJ5LgotaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjcGFnZS03NwotbmdodHRwMl9lcnJvcl9jb2RlIGVudW1zIGFyZSBpZGVudGljYWwuCi0qLwotc3RhdGljIGNvbnN0IGNoYXIgKmh0dHAyX3N0cmVycm9yKHVpbnQzMl90IGVycikKLXsKLSNpZm5kZWYgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IKLSAgY29uc3QgY2hhciAqc3RyW10gPSB7Ci0gICAgIk5PX0VSUk9SIiwgICAgICAgICAgICAgLyogMHgwICovCi0gICAgIlBST1RPQ09MX0VSUk9SIiwgICAgICAgLyogMHgxICovCi0gICAgIklOVEVSTkFMX0VSUk9SIiwgICAgICAgLyogMHgyICovCi0gICAgIkZMT1dfQ09OVFJPTF9FUlJPUiIsICAgLyogMHgzICovCi0gICAgIlNFVFRJTkdTX1RJTUVPVVQiLCAgICAgLyogMHg0ICovCi0gICAgIlNUUkVBTV9DTE9TRUQiLCAgICAgICAgLyogMHg1ICovCi0gICAgIkZSQU1FX1NJWkVfRVJST1IiLCAgICAgLyogMHg2ICovCi0gICAgIlJFRlVTRURfU1RSRUFNIiwgICAgICAgLyogMHg3ICovCi0gICAgIkNBTkNFTCIsICAgICAgICAgICAgICAgLyogMHg4ICovCi0gICAgIkNPTVBSRVNTSU9OX0VSUk9SIiwgICAgLyogMHg5ICovCi0gICAgIkNPTk5FQ1RfRVJST1IiLCAgICAgICAgLyogMHhBICovCi0gICAgIkVOSEFOQ0VfWU9VUl9DQUxNIiwgICAgLyogMHhCICovCi0gICAgIklOQURFUVVBVEVfU0VDVVJJVFkiLCAgLyogMHhDICovCi0gICAgIkhUVFBfMV8xX1JFUVVJUkVEIiAgICAgLyogMHhEICovCi0gIH07Ci0gIHJldHVybiAoZXJyIDwgc2l6ZW9mKHN0cikgLyBzaXplb2Yoc3RyWzBdKSkgPyBzdHJbZXJyXSA6ICJ1bmtub3duIjsKLSNlbHNlCi0gIHJldHVybiBuZ2h0dHAyX2h0dHAyX3N0cmVycm9yKGVycik7Ci0jZW5kaWYKLX0KLQogLyoKICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZ2h0dHAyX3NlbmRfY2FsbGJhY2sgdHlwZS4gSGVyZSB3ZSB3cml0ZSB8ZGF0YXwgd2l0aAogICogc2l6ZSB8bGVuZ3RofCB0byB0aGUgbmV0d29yayBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkKQEAgLTUwMywxNiArNDU5LDE0IEBACiAgICAgLyogc2V0dXAgdGhlIHJlcXVlc3Qgc3RydWN0ICovCiAgICAgc3RydWN0IEhUVFAgKmh0dHAgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBIVFRQKSk7CiAgICAgaWYoIWh0dHApIHsKLSAgICAgICh2b2lkKUN1cmxfY2xvc2Uoc2Vjb25kKTsKLSAgICAgIHNlY29uZCA9IE5VTEw7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZzZWNvbmQpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIHNlY29uZC0+cmVxLnByb3RvcCA9IGh0dHA7CiAgICAgICBodHRwLT5oZWFkZXJfcmVjdmJ1ZiA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7CiAgICAgICBpZighaHR0cC0+aGVhZGVyX3JlY3ZidWYpIHsKICAgICAgICAgZnJlZShodHRwKTsKLSAgICAgICAgKHZvaWQpQ3VybF9jbG9zZShzZWNvbmQpOwotICAgICAgICBzZWNvbmQgPSBOVUxMOworICAgICAgICAodm9pZClDdXJsX2Nsb3NlKCZzZWNvbmQpOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHNlY29uZCk7CkBAIC01NTQsNyArNTA4LDcgQEAKICAgICBzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOwogICAgIGlmKCFzdHJlYW0pIHsKICAgICAgIGZhaWxmKGRhdGEsICJJbnRlcm5hbCBOVUxMIHN0cmVhbSFcbiIpOwotICAgICAgKHZvaWQpQ3VybF9jbG9zZShuZXdoYW5kbGUpOworICAgICAgKHZvaWQpQ3VybF9jbG9zZSgmbmV3aGFuZGxlKTsKICAgICAgIHJ2ID0gMTsKICAgICAgIGdvdG8gZmFpbDsKICAgICB9CkBAIC01NzYsNyArNTMwLDcgQEAKICAgICAgIC8qIGRlbmllZCwga2lsbCBvZmYgdGhlIG5ldyBoYW5kbGUgYWdhaW4gKi8KICAgICAgIGh0dHAyX3N0cmVhbV9mcmVlKG5ld2hhbmRsZS0+cmVxLnByb3RvcCk7CiAgICAgICBuZXdoYW5kbGUtPnJlcS5wcm90b3AgPSBOVUxMOwotICAgICAgKHZvaWQpQ3VybF9jbG9zZShuZXdoYW5kbGUpOworICAgICAgKHZvaWQpQ3VybF9jbG9zZSgmbmV3aGFuZGxlKTsKICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKQEAgLTU5Miw3ICs1NDYsNyBAQAogICAgICAgaW5mb2YoZGF0YSwgImZhaWxlZCB0byBhZGQgaGFuZGxlIHRvIG11bHRpXG4iKTsKICAgICAgIGh0dHAyX3N0cmVhbV9mcmVlKG5ld2hhbmRsZS0+cmVxLnByb3RvcCk7CiAgICAgICBuZXdoYW5kbGUtPnJlcS5wcm90b3AgPSBOVUxMOwotICAgICAgQ3VybF9jbG9zZShuZXdoYW5kbGUpOworICAgICAgQ3VybF9jbG9zZSgmbmV3aGFuZGxlKTsKICAgICAgIHJ2ID0gMTsKICAgICAgIGdvdG8gZmFpbDsKICAgICB9CkBAIC04NDcsNyArODAxLDcgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBIMkJVR0YoaW5mb2YoZGF0YV9zLCAib25fc3RyZWFtX2Nsb3NlKCksICVzIChlcnIgJWQpLCBzdHJlYW0gJXVcbiIsCi0gICAgICAgICAgICAgICAgIGh0dHAyX3N0cmVycm9yKGVycm9yX2NvZGUpLCBlcnJvcl9jb2RlLCBzdHJlYW1faWQpKTsKKyAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlcnJvcihlcnJvcl9jb2RlKSwgZXJyb3JfY29kZSwgc3RyZWFtX2lkKSk7CiAgICAgc3RyZWFtID0gZGF0YV9zLT5yZXEucHJvdG9wOwogICAgIGlmKCFzdHJlYW0pCiAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKQEAgLTg1NSw2ICs4MDksNyBAQAogICAgIHN0cmVhbS0+Y2xvc2VkID0gVFJVRTsKICAgICBodHRwYyA9ICZjb25uLT5wcm90by5odHRwYzsKICAgICBkcmFpbl90aGlzKGRhdGFfcywgaHR0cGMpOworICAgIEN1cmxfZXhwaXJlKGRhdGFfcywgMCwgRVhQSVJFX1JVTl9OT1cpOwogICAgIGh0dHBjLT5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKIAogICAgIC8qIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgaGFzaCBhcyB0aGUgc3RyZWFtIGlzIG5vdyBnb25lICovCkBAIC05NzQsNyArOTI5LDkgQEAKICAgICAgIGlmKCFjaGVjaykKICAgICAgICAgLyogbm8gbWVtb3J5ICovCiAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICAgICAgaWYoIUN1cmxfc3RyY2FzZWNvbXBhcmUoY2hlY2ssIChjb25zdCBjaGFyICopdmFsdWUpKSB7CisgICAgICBpZighQ3VybF9zdHJjYXNlY29tcGFyZShjaGVjaywgKGNvbnN0IGNoYXIgKil2YWx1ZSkgJiYKKyAgICAgICAgICgoY29ubi0+cmVtb3RlX3BvcnQgIT0gY29ubi0+Z2l2ZW4tPmRlZnBvcnQpIHx8CisgICAgICAgICAgIUN1cmxfc3RyY2FzZWNvbXBhcmUoY29ubi0+aG9zdC5uYW1lLCAoY29uc3QgY2hhciAqKXZhbHVlKSkpIHsKICAgICAgICAgLyogVGhpcyBpcyBwdXNoIGlzIG5vdCBmb3IgdGhlIHNhbWUgYXV0aG9yaXR5IHRoYXQgd2FzIGFza2VkIGZvciBpbgogICAgICAgICAgKiB0aGUgVVJMLiBSRkMgNzU0MCBzZWN0aW9uIDguMiBzYXlzOiAiQSBjbGllbnQgTVVTVCB0cmVhdCBhCiAgICAgICAgICAqIFBVU0hfUFJPTUlTRSBmb3Igd2hpY2ggdGhlIHNlcnZlciBpcyBub3QgYXV0aG9yaXRhdGl2ZSBhcyBhIHN0cmVhbQpAQCAtMTE0NCw4ICsxMTAxLDcgQEAKICAgcmV0dXJuIG5yZWFkOwogfQogCi0jaWYgZGVmaW5lZChOR0hUVFAyX0hBU19FUlJPUl9DQUxMQkFDSykgJiYgICAgICBcCi0gICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKIHN0YXRpYyBpbnQgZXJyb3JfY2FsbGJhY2sobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCkBAIC0xMTYyLDkgKzExMTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjKQogewogICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiA9IGh0dHBjLT5sb2NhbF9zZXR0aW5nczsKKyAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSk7CiAKICAgaXZbMF0uc2V0dGluZ3NfaWQgPSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVM7Ci0gIGl2WzBdLnZhbHVlID0gMTAwOworICBpdlswXS52YWx1ZSA9IEN1cmxfbXVsdGlfbWF4X2NvbmN1cnJlbnRfc3RyZWFtcyhjb25uLT5kYXRhLT5tdWx0aSk7CiAKICAgaXZbMV0uc2V0dGluZ3NfaWQgPSBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkU7CiAgIGl2WzFdLnZhbHVlID0gSFRUUDJfSFVHRV9XSU5ET1dfU0laRTsKQEAgLTExNzUsMTEgKzExMzIsMTAgQEAKICAgaHR0cGMtPmxvY2FsX3NldHRpbmdzX251bSA9IDM7CiB9CiAKLXZvaWQgQ3VybF9odHRwMl9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcmVtYXR1cmUpCit2b2lkIEN1cmxfaHR0cDJfZG9uZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sIHByZW1hdHVyZSkKIHsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBIVFRQICpodHRwID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7CisgIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmRhdGEtPmNvbm4tPnByb3RvLmh0dHBjOwogCiAgIC8qIHRoZXJlIG1pZ2h0IGJlIGFsbG9jYXRlZCByZXNvdXJjZXMgZG9uZSBiZWZvcmUgdGhpcyBnb3QgdGhlICdoMicgcG9pbnRlcgogICAgICBzZXR1cCAqLwpAQCAtMTE5OSw5ICsxMTU1LDYgQEAKICAgaWYoIWh0dHBjLT5oMikgLyogbm90IEhUVFAvMiA/ICovCiAgICAgcmV0dXJuOwogCi0gIGlmKGRhdGEtPnN0YXRlLmRyYWluKQotICAgIGRyYWluZWRfdHJhbnNmZXIoZGF0YSwgaHR0cGMpOwotCiAgIGlmKHByZW1hdHVyZSkgewogICAgIC8qIFJTVF9TVFJFQU0gKi8KICAgICBpZighbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbShodHRwYy0+aDIsIE5HSFRUUDJfRkxBR19OT05FLApAQCAtMTIxMyw2ICsxMTY2LDEwIEBACiAgICAgICBodHRwYy0+cGF1c2Vfc3RyZWFtX2lkID0gMDsKICAgICB9CiAgIH0KKworICBpZihkYXRhLT5zdGF0ZS5kcmFpbikKKyAgICBkcmFpbmVkX3RyYW5zZmVyKGRhdGEsIGh0dHBjKTsKKwogICAvKiAtMSBtZWFucyB1bmFzc2lnbmVkIGFuZCAwIG1lYW5zIGNsZWFyZWQgKi8KICAgaWYoaHR0cC0+c3RyZWFtX2lkID4gMCkgewogICAgIGludCBydiA9IG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YShodHRwYy0+aDIsCkBAIC0xMjYzLDkgKzEyMjAsNyBAQAogICAgIC8qIG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrICovCiAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKGNhbGxiYWNrcywgb25faGVhZGVyKTsKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZXJyb3JfY2FsbGJhY2soY2FsbGJhY2tzLCBlcnJvcl9jYWxsYmFjayk7Ci0jZW5kaWYKIAogICAgIC8qIFRoZSBuZ2h0dHAyIHNlc3Npb24gaXMgbm90IHlldCBzZXR1cCwgZG8gaXQgKi8KICAgICByYyA9IG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KCZjb25uLT5wcm90by5odHRwYy5oMiwgY2FsbGJhY2tzLCBjb25uKTsKQEAgLTE0NjMsNyArMTQxOCw3IEBACiAgIH0KICAgZWxzZSBpZihodHRwYy0+ZXJyb3JfY29kZSAhPSBOR0hUVFAyX05PX0VSUk9SKSB7CiAgICAgZmFpbGYoZGF0YSwgIkhUVFAvMiBzdHJlYW0gJWQgd2FzIG5vdCBjbG9zZWQgY2xlYW5seTogJXMgKGVyciAldSkiLAotICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLCBodHRwMl9zdHJlcnJvcihodHRwYy0+ZXJyb3JfY29kZSksCisgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIG5naHR0cDJfc3RyZXJyb3IoaHR0cGMtPmVycm9yX2NvZGUpLAogICAgICAgICAgIGh0dHBjLT5lcnJvcl9jb2RlKTsKICAgICAqZXJyID0gQ1VSTEVfSFRUUDJfU1RSRUFNOwogICAgIHJldHVybiAtMTsKQEAgLTE1NDEsNiArMTQ5Niw3IEBACiAKICAgICBIMkJVR0YoaW5mb2YoZGF0YSwgIlF1ZXVpbmcgUFJJT1JJVFkgb24gc3RyZWFtICV1IChlYXN5ICVwKVxuIiwKICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIGRhdGEpKTsKKyAgICBERUJVR0FTU0VSVChzdHJlYW0tPnN0cmVhbV9pZCAhPSAtMSk7CiAgICAgcnYgPSBuZ2h0dHAyX3N1Ym1pdF9wcmlvcml0eShoMiwgTkdIVFRQMl9GTEFHX05PTkUsIHN0cmVhbS0+c3RyZWFtX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaV9zcGVjKTsKICAgICBpZihydikKQEAgLTE1NjUsNiArMTUyMSwxMSBAQAogICBpZihzaG91bGRfY2xvc2Vfc2Vzc2lvbihodHRwYykpIHsKICAgICBIMkJVR0YoaW5mb2YoZGF0YSwKICAgICAgICAgICAgICAgICAgImh0dHAyX3JlY3Y6IG5vdGhpbmcgdG8gZG8gaW4gdGhpcyBzZXNzaW9uXG4iKSk7CisgICAgaWYoY29ubi0+Yml0cy5jbG9zZSkgeworICAgICAgLyogYWxyZWFkeSBtYXJrZWQgZm9yIGNsb3N1cmUsIHJldHVybiBPSyBhbmQgd2UncmUgZG9uZSAqLworICAgICAgKmVyciA9IENVUkxFX09LOworICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgICplcnIgPSBDVVJMRV9IVFRQMjsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTE1OTQsOCArMTU1NSwxMiBAQAogICAgIHJldHVybiBuY29weTsKICAgfQogCi0gIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdjogZWFzeSAlcCAoc3RyZWFtICV1KVxuIiwKLSAgICAgICAgICAgICAgIGRhdGEsIHN0cmVhbS0+c3RyZWFtX2lkKSk7CisgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdjogZWFzeSAlcCAoc3RyZWFtICV1KSB3aW4gJXUvJXVcbiIsCisgICAgICAgICAgICAgICBkYXRhLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9nZXRfbG9jYWxfd2luZG93X3NpemUoaHR0cGMtPmgyKSwKKyAgICAgICAgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKGh0dHBjLT5oMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkKQorICAgICAgICAgICApKTsKIAogICBpZigoZGF0YS0+c3RhdGUuZHJhaW4pICYmIHN0cmVhbS0+bWVtbGVuKSB7CiAgICAgSDJCVUdGKGluZm9mKGRhdGEsICJodHRwMl9yZWN2OiBEUkFJTiAlenUgYnl0ZXMgc3RyZWFtICV1ISEgKCVwID0+ICVwKVxuIiwKQEAgLTE2MjYsNyArMTU5MSw2IEBACiAgICAgc3RyZWFtLT5wYXVzZWRhdGEgKz0gbnJlYWQ7CiAgICAgc3RyZWFtLT5wYXVzZWxlbiAtPSBucmVhZDsKIAotICAgIGluZm9mKGRhdGEsICIlemQgZGF0YSBieXRlcyB3cml0dGVuXG4iLCBucmVhZCk7CiAgICAgaWYoc3RyZWFtLT5wYXVzZWxlbiA9PSAwKSB7CiAgICAgICBIMkJVR0YoaW5mb2YoZGF0YSwgIlVucGF1c2VkIGJ5IHN0cmVhbSAldVxuIiwgc3RyZWFtLT5zdHJlYW1faWQpKTsKICAgICAgIERFQlVHQVNTRVJUKGh0dHBjLT5wYXVzZV9zdHJlYW1faWQgPT0gc3RyZWFtLT5zdHJlYW1faWQpOwpAQCAtMTY2MCw2ICsxNjI0LDkgQEAKICAgICAgICBzb2NrZXQgaXMgbm90IHJlYWQuICBCdXQgaXQgc2VlbXMgdGhhdCB1c3VhbGx5IHN0cmVhbXMgYXJlCiAgICAgICAgbm90aWZpZWQgd2l0aCBpdHMgZHJhaW4gcHJvcGVydHksIGFuZCBzb2NrZXQgaXMgcmVhZCBhZ2FpbgogICAgICAgIHF1aWNrbHkuICovCisgICAgaWYoc3RyZWFtLT5jbG9zZWQpCisgICAgICAvKiBjbG9zZWQgb3ZlcnJpZGVzIHBhdXNlZCAqLworICAgICAgcmV0dXJuIDA7CiAgICAgSDJCVUdGKGluZm9mKGRhdGEsICJzdHJlYW0gJXggaXMgcGF1c2VkLCBwYXVzZSBpZDogJXhcbiIsCiAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLCBodHRwYy0+cGF1c2Vfc3RyZWFtX2lkKSk7CiAgICAgKmVyciA9IENVUkxFX0FHQUlOOwpAQCAtMTc1NCwxNCArMTcyMSwxNiBAQAogICAgIGVsc2UgaWYoIXN0cmVhbS0+Y2xvc2VkKSB7CiAgICAgICBkcmFpbmVkX3RyYW5zZmVyKGRhdGEsIGh0dHBjKTsKICAgICB9CisgICAgZWxzZQorICAgICAgLyogdGhpcyBzdHJlYW0gaXMgY2xvc2VkLCB0cmlnZ2VyIGEgYW5vdGhlciByZWFkIEFTQVAgdG8gZGV0ZWN0IHRoYXQgKi8KKyAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKIAogICAgIHJldHVybiByZXRsZW47CiAgIH0KLSAgLyogSWYgc3RyZWFtIGlzIGNsb3NlZCwgcmV0dXJuIDAgdG8gc2lnbmFsIHRoZSBodHRwIHJvdXRpbmUgdG8gY2xvc2UKKyAgLyogSWYgdGhpcyBzdHJlYW0gaXMgY2xvc2VkLCByZXR1cm4gMCB0byBzaWduYWwgdGhlIGh0dHAgcm91dGluZSB0byBjbG9zZQogICAgICB0aGUgY29ubmVjdGlvbiAqLwotICBpZihzdHJlYW0tPmNsb3NlZCkgewotICAgIHJldHVybiBodHRwMl9oYW5kbGVfc3RyZWFtX2Nsb3NlKGNvbm4sIGRhdGEsIHN0cmVhbSwgZXJyKTsKLSAgfQorICBpZihzdHJlYW0tPmNsb3NlZCkKKyAgICByZXR1cm4gMDsKICAgKmVyciA9IENVUkxFX0FHQUlOOwogICBIMkJVR0YoaW5mb2YoZGF0YSwgImh0dHAyX3JlY3YgcmV0dXJucyBBR0FJTiBmb3Igc3RyZWFtICV1XG4iLAogICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQpKTsKQEAgLTE3NzIsOCArMTc0MSw5IEBACiAgICBmaWVsZCBsaXN0LiAqLwogI2RlZmluZSBBVVRIT1JJVFlfRFNUX0lEWCAzCiAKKy8qIFVTSFJUX01BWCBpcyA2NTUzNSA9PSAweGZmZmYgKi8KICNkZWZpbmUgSEVBREVSX09WRVJGTE9XKHgpIFwKLSAgKHgubmFtZWxlbiA+ICh1aW50MTZfdCktMSB8fCB4LnZhbHVlbGVuID4gKHVpbnQxNl90KS0xIC0geC5uYW1lbGVuKQorICAoeC5uYW1lbGVuID4gMHhmZmZmIHx8IHgudmFsdWVsZW4gPiAweGZmZmYgLSB4Lm5hbWVsZW4pCiAKIC8qCiAgKiBDaGVjayBoZWFkZXIgbWVtb3J5IGZvciB0aGUgdG9rZW4gInRyYWlsZXJzIi4KQEAgLTE4ODAsNyArMTg1MCwxMSBAQAogICAgICAgIGFyZSBnb2luZyB0byBzZW5kIG9yIHNlbmRpbmcgcmVxdWVzdCBib2R5IGluIERBVEEgZnJhbWUgKi8KICAgICBzdHJlYW0tPnVwbG9hZF9tZW0gPSBtZW07CiAgICAgc3RyZWFtLT51cGxvYWRfbGVuID0gbGVuOwotICAgIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShoMiwgc3RyZWFtLT5zdHJlYW1faWQpOworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Jlc3VtZV9kYXRhKGgyLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgaWYobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICplcnIgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBydiA9IGgyX3Nlc3Npb25fc2VuZChjb25uLT5kYXRhLCBoMik7CiAgICAgaWYobmdodHRwMl9pc19mYXRhbChydikpIHsKICAgICAgICplcnIgPSBDVVJMRV9TRU5EX0VSUk9SOwpAQCAtMjAxOSw4ICsxOTkzLDEwIEBACiAgICAgICBudmFbaV0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVtpXS5uYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICBudmFbaV0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CiAgICAgICBudmFbaV0ubmFtZWxlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICAgIC8qIExvd2VyIGNhc2UgdGhlIGhlYWRlciBuYW1lIGZvciBIVFRQLzIgKi8KKyAgICAgIEN1cmxfc3RybnRvbG93ZXIoKGNoYXIgKiloZGJ1ZiwgaGRidWYsIG52YVtpXS5uYW1lbGVuKTsKKyAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKICAgICB9CiAgICAgaGRidWYgPSBlbmQgKyAxOwogICAgIHdoaWxlKCpoZGJ1ZiA9PSAnICcgfHwgKmhkYnVmID09ICdcdCcpCkBAIC0yMTMwLDE3ICsyMTA2LDE0IEBACiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgaWYoc3RyZWFtLT5zdHJlYW1faWQgIT0gLTEpIHsKLSAgICAvKiBJZiB3aG9sZSBIRUFERVJTIGZyYW1lIHdhcyBzZW50IG9mZiB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQsCi0gICAgICAgdGhlIG5naHR0cDIgbGlicmFyeSBjYWxscyBkYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrLiBCdXQgb25seQotICAgICAgIGl0IGZvdW5kIHRoYXQgbm8gZGF0YSBhdmFpbGFibGUsIHNvIGl0IGRlZmVycmVkIHRoZSBEQVRBCi0gICAgICAgdHJhbnNtaXNzaW9uLiBXaGljaCBtZWFucyB0aGF0IG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKCkKLSAgICAgICByZXR1cm5zIDAgb24gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKCksIHdoaWNoIHJlc3VsdHMgdGhhdCBubwotICAgICAgIHdyaXRhYmxlIHNvY2tldCBjaGVjayBpcyBwZXJmb3JtZWQuIFRvIHdvcmthcm91bmQgdGhpcywgd2UKLSAgICAgICBpc3N1ZSBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoKSBoZXJlIHRvIGJyaW5nIGJhY2sgREFUQQotICAgICAgIHRyYW5zbWlzc2lvbiBmcm9tIGRlZmVycmVkIHN0YXRlLiAqLwotICAgIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShoMiwgc3RyZWFtLT5zdHJlYW1faWQpOwotICB9CisgIC8qIElmIHdob2xlIEhFQURFUlMgZnJhbWUgd2FzIHNlbnQgb2ZmIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCwgdGhlIG5naHR0cDIKKyAgICAgbGlicmFyeSBjYWxscyBkYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrLiBCdXQgb25seSBpdCBmb3VuZCB0aGF0IG5vIGRhdGEKKyAgICAgYXZhaWxhYmxlLCBzbyBpdCBkZWZlcnJlZCB0aGUgREFUQSB0cmFuc21pc3Npb24uIFdoaWNoIG1lYW5zIHRoYXQKKyAgICAgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoKSByZXR1cm5zIDAgb24gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKCksIHdoaWNoCisgICAgIHJlc3VsdHMgdGhhdCBubyB3cml0YWJsZSBzb2NrZXQgY2hlY2sgaXMgcGVyZm9ybWVkLiBUbyB3b3JrYXJvdW5kIHRoaXMsCisgICAgIHdlIGlzc3VlIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YSgpIGhlcmUgdG8gYnJpbmcgYmFjayBEQVRBCisgICAgIHRyYW5zbWlzc2lvbiBmcm9tIGRlZmVycmVkIHN0YXRlLiAqLworICBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoaDIsIHN0cmVhbS0+c3RyZWFtX2lkKTsKIAogICByZXR1cm4gbGVuOwogCkBAIC0yMjU1LDcgKzIyMjgsNiBAQAogICAgIH0KICAgfQogCi0jaWZkZWYgTkdIVFRQMl9IQVNfU0VUX0xPQ0FMX1dJTkRPV19TSVpFCiAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZShodHRwYy0+aDIsIE5HSFRUUDJfRkxBR19OT05FLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUDJfSFVHRV9XSU5ET1dfU0laRSk7CiAgIGlmKHJ2ICE9IDApIHsKQEAgLTIyNjMsNyArMjIzNSw2IEBACiAgICAgICAgICAgbmdodHRwMl9zdHJlcnJvcihydiksIHJ2KTsKICAgICByZXR1cm4gQ1VSTEVfSFRUUDI7CiAgIH0KLSNlbmRpZgogCiAgIC8qIHdlIGFyZSBnb2luZyB0byBjb3B5IG1lbSB0byBodHRwYy0+aW5idWYuICBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlCiAgICAgIG1lbSBpcyBwYXJ0IG9mIGJ1ZmZlciBwb2ludGVkIGJ5IHN0cmVhbS0+bWVtLCBhbmQgY2FsbGJhY2tzCkBAIC0yMzIxLDYgKzIyOTIsNTEgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCitDVVJMY29kZSBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sIHBhdXNlKQoreworICBERUJVR0FTU0VSVChkYXRhKTsKKyAgREVCVUdBU1NFUlQoZGF0YS0+Y29ubik7CisgIC8qIGlmIGl0IGlzbid0IEhUVFAvMiwgd2UncmUgZG9uZSAqLworICBpZighZGF0YS0+Y29ubi0+cHJvdG8uaHR0cGMuaDIpCisgICAgcmV0dXJuIENVUkxFX09LOworI2lmZGVmIE5HSFRUUDJfSEFTX1NFVF9MT0NBTF9XSU5ET1dfU0laRQorICBlbHNlIHsKKyAgICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYyA9ICZkYXRhLT5jb25uLT5wcm90by5odHRwYzsKKyAgICB1aW50MzJfdCB3aW5kb3cgPSAhcGF1c2UgKiBIVFRQMl9IVUdFX1dJTkRPV19TSVpFOworICAgIGludCBydiA9IG5naHR0cDJfc2Vzc2lvbl9zZXRfbG9jYWxfd2luZG93X3NpemUoaHR0cGMtPmgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdyk7CisgICAgaWYocnYpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJuZ2h0dHAyX3Nlc3Npb25fc2V0X2xvY2FsX3dpbmRvd19zaXplKCkgZmFpbGVkOiAlcyglZCkiLAorICAgICAgICAgICAgbmdodHRwMl9zdHJlcnJvcihydiksIHJ2KTsKKyAgICAgIHJldHVybiBDVVJMRV9IVFRQMjsKKyAgICB9CisKKyAgICAvKiBtYWtlIHN1cmUgdGhlIHdpbmRvdyB1cGRhdGUgZ2V0cyBzZW50ICovCisgICAgcnYgPSBoMl9zZXNzaW9uX3NlbmQoZGF0YSwgaHR0cGMtPmgyKTsKKyAgICBpZihydikKKyAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworCisgICAgREVCVUdGKGluZm9mKGRhdGEsICJTZXQgSFRUUC8yIHdpbmRvdyBzaXplIHRvICV1IGZvciBzdHJlYW0gJXVcbiIsCisgICAgICAgICAgICAgICAgIHdpbmRvdywgc3RyZWFtLT5zdHJlYW1faWQpKTsKKworI2lmZGVmIERFQlVHQlVJTEQKKyAgICB7CisgICAgICAvKiByZWFkIG91dCB0aGUgc3RyZWFtIGxvY2FsIHdpbmRvdyBhZ2FpbiAqLworICAgICAgdWludDMyX3Qgd2luZG93MiA9CisgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKGh0dHBjLT5oMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQpOworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJIVFRQLzIgd2luZG93IHNpemUgaXMgbm93ICV1IGZvciBzdHJlYW0gJXVcbiIsCisgICAgICAgICAgICAgICAgICAgd2luZG93Miwgc3RyZWFtLT5zdHJlYW1faWQpKTsKKyAgICB9CisjZW5kaWYKKyAgfQorI2VuZGlmCisgIHJldHVybiBDVVJMRV9PSzsKK30KKwogQ1VSTGNvZGUgQ3VybF9odHRwMl9hZGRfY2hpbGQoc3RydWN0IEN1cmxfZWFzeSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqY2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1c2l2ZSkKQEAgLTI0MTQsOCArMjQzMCw2IEBACiAjZWxzZSAvKiAhVVNFX05HSFRUUDIgKi8KIAogLyogU2F0aXNmeSBleHRlcm5hbCByZWZlcmVuY2VzIGV2ZW4gaWYgaHR0cDIgaXMgbm90IGNvbXBpbGVkIGluLiAqLwotCi0jZGVmaW5lIENVUkxfRElTQUJMRV9UWVBFQ0hFQ0sKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAogY2hhciAqY3VybF9wdXNoaGVhZGVyX2J5bnVtKHN0cnVjdCBjdXJsX3B1c2hoZWFkZXJzICpoLCBzaXplX3QgbnVtKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAyLmgKaW5kZXggZGI2MjE3Yi4uMTk4OWFmZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00MiwxNiArNDIsMTUgQEAKIENVUkxjb2RlIEN1cmxfaHR0cDJfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogdm9pZCBDdXJsX2h0dHAyX2luaXRfc3RhdGUoc3RydWN0IFVybFN0YXRlICpzdGF0ZSk7CiB2b2lkIEN1cmxfaHR0cDJfaW5pdF91c2Vyc2V0KHN0cnVjdCBVc2VyRGVmaW5lZCAqc2V0KTsKLUNVUkxjb2RlIEN1cmxfaHR0cDJfc2VuZF9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX2h0dHAyX3JlcXVlc3RfdXBncmFkZShDdXJsX3NlbmRfYnVmZmVyICpyZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogQ1VSTGNvZGUgQ3VybF9odHRwMl9zZXR1cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogQ1VSTGNvZGUgQ3VybF9odHRwMl9zd2l0Y2hlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBucmVhZCk7Ci0vKiBjYWxsZWQgZnJvbSBDdXJsX2h0dHBfc2V0dXBfY29ubiAqLworLyogY2FsbGVkIGZyb20gaHR0cF9zZXR1cF9jb25uICovCiB2b2lkIEN1cmxfaHR0cDJfc2V0dXBfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogdm9pZCBDdXJsX2h0dHAyX3NldHVwX3JlcShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLXZvaWQgQ3VybF9odHRwMl9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcmVtYXR1cmUpOwordm9pZCBDdXJsX2h0dHAyX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpOwogQ1VSTGNvZGUgQ3VybF9odHRwMl9kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfaHR0cDJfYWRkX2NoaWxkKHN0cnVjdCBDdXJsX2Vhc3kgKnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Vhc3kgKmNoaWxkLApAQCAtNTksMTEgKzU4LDExIEBACiB2b2lkIEN1cmxfaHR0cDJfcmVtb3ZlX2NoaWxkKHN0cnVjdCBDdXJsX2Vhc3kgKnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqY2hpbGQpOwogdm9pZCBDdXJsX2h0dHAyX2NsZWFudXBfZGVwZW5kZW5jaWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOworQ1VSTGNvZGUgQ3VybF9odHRwMl9zdHJlYW1fcGF1c2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwYXVzZSk7CiAKIC8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgSFRUUC8yIHN0cmVhbSBlcnJvciB3YXMgSFRUUF8xXzFfUkVRVUlSRUQgKi8KIGJvb2wgQ3VybF9oMl9odHRwXzFfMV9lcnJvcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogI2Vsc2UgLyogVVNFX05HSFRUUDIgKi8KLSNkZWZpbmUgQ3VybF9odHRwMl9zZW5kX3JlcXVlc3QoeCkgQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0wKICNkZWZpbmUgQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoeCx5KSBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTAogI2RlZmluZSBDdXJsX2h0dHAyX3NldHVwKHgpIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MCiAjZGVmaW5lIEN1cmxfaHR0cDJfc3dpdGNoZWQoeCx5LHopIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MCkBAIC03Niw2ICs3NSw3IEBACiAjZGVmaW5lIEN1cmxfaHR0cDJfYWRkX2NoaWxkKHgsIHksIHopCiAjZGVmaW5lIEN1cmxfaHR0cDJfcmVtb3ZlX2NoaWxkKHgsIHkpCiAjZGVmaW5lIEN1cmxfaHR0cDJfY2xlYW51cF9kZXBlbmRlbmNpZXMoeCkKKyNkZWZpbmUgQ3VybF9odHRwMl9zdHJlYW1fcGF1c2UoeCwgeSkKICNkZWZpbmUgQ3VybF9oMl9odHRwXzFfMV9lcnJvcih4KSAwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmMKaW5kZXggMThkZmNiMi4uYjZmZmE0MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMDksNyArMTA5LDggQEAKIENIVU5LY29kZSBDdXJsX2h0dHBjaHVua19yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JvdGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JvdGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmV4dHJhcCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwpAQCAtMTI1LDggKzEyNiwxMCBAQAogICAgICBjaHVuayByZWFkIHByb2Nlc3MsIHRvIHByb3Blcmx5IGNhbGN1bGF0ZSB0aGUgY29udGVudCBsZW5ndGgqLwogICBpZihkYXRhLT5zZXQuaHR0cF90ZV9za2lwICYmICFrLT5pZ25vcmVib2R5KSB7CiAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgZGF0YXAsIGRhdGFsZW4pOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgaWYocmVzdWx0KSB7CisgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgcmV0dXJuIENIVU5LRV9QQVNTVEhSVV9FUlJPUjsKKyAgICB9CiAgIH0KIAogICB3aGlsZShsZW5ndGgpIHsKQEAgLTE5Nyw4ICsyMDAsMTAgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIGRhdGFwLCBwaWVjZSk7CiAKLSAgICAgICAgaWYocmVzdWx0KQotICAgICAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICpleHRyYXAgPSByZXN1bHQ7CisgICAgICAgICAgcmV0dXJuIENIVU5LRV9QQVNTVEhSVV9FUlJPUjsKKyAgICAgICAgfQogICAgICAgfQogCiAgICAgICAqd3JvdGUgKz0gcGllY2U7CkBAIC0yNDQsOCArMjQ5LDEwIEBACiAgICAgICAgICAgaWYoIWRhdGEtPnNldC5odHRwX3RlX3NraXApIHsKICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRyYWlsZXIsIGNvbm4tPnRybFBvcyk7Ci0gICAgICAgICAgICBpZihyZXN1bHQpCi0gICAgICAgICAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgICAgKmV4dHJhcCA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgcmV0dXJuIENIVU5LRV9QQVNTVEhSVV9FUlJPUjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgY29ubi0+dHJsUG9zID0gMDsKICAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSX0NSOwpAQCAtMzM5LDggKzM0Niw5IEBACiAgICAgcmV0dXJuICJJbGxlZ2FsIG9yIG1pc3NpbmcgaGV4YWRlY2ltYWwgc2VxdWVuY2UiOwogICBjYXNlIENIVU5LRV9CQURfQ0hVTks6CiAgICAgcmV0dXJuICJNYWxmb3JtZWQgZW5jb2RpbmcgZm91bmQiOwotICBjYXNlIENIVU5LRV9XUklURV9FUlJPUjoKLSAgICByZXR1cm4gIldyaXRlIGVycm9yIjsKKyAgY2FzZSBDSFVOS0VfUEFTU1RIUlVfRVJST1I6CisgICAgREVCVUdBU1NFUlQoMCk7IC8qIG5ldmVyIHVzZWQgKi8KKyAgICByZXR1cm4gIiI7CiAgIGNhc2UgQ0hVTktFX0JBRF9FTkNPRElORzoKICAgICByZXR1cm4gIkJhZCBjb250ZW50LWVuY29kaW5nIGZvdW5kIjsKICAgY2FzZSBDSFVOS0VfT1VUX09GX01FTU9SWToKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5oCmluZGV4IGI5NjljNTUuLjhmNGEzM2MgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNiArMjEsOSBAQAogICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgY29ubmVjdGRhdGE7CisKIC8qCiAgKiBUaGUgbG9uZ2VzdCBwb3NzaWJsZSBoZXhhZGVjaW1hbCBudW1iZXIgd2Ugc3VwcG9ydCBpbiBhIGNodW5rZWQgdHJhbnNmZXIuCiAgKiBXZWlyZCBlbm91Z2gsIFJGQzI2MTYgZG9lc24ndCBzZXQgYSBtYXhpbXVtIHNpemUhIFNpbmNlIHdlIHVzZSBzdHJ0b3VsKCkKQEAgLTcxLDkgKzc0LDkgQEAKICAgQ0hVTktFX1RPT19MT05HX0hFWCA9IDEsCiAgIENIVU5LRV9JTExFR0FMX0hFWCwKICAgQ0hVTktFX0JBRF9DSFVOSywKLSAgQ0hVTktFX1dSSVRFX0VSUk9SLAogICBDSFVOS0VfQkFEX0VOQ09ESU5HLAogICBDSFVOS0VfT1VUX09GX01FTU9SWSwKKyAgQ0hVTktFX1BBU1NUSFJVX0VSUk9SLCAvKiBDdXJsX2h0dHBjaHVua19yZWFkKCkgcmV0dXJucyBhIENVUkxjb2RlIHRvIHVzZSAqLwogICBDSFVOS0VfTEFTVAogfSBDSFVOS2NvZGU7CiAKQEAgLTg3LDQgKzkwLDEwIEBACiAgIHNpemVfdCBkYXRhbGVmdDsgLyogdW50b3VjaGVkIGRhdGEgYW1vdW50IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYnVmZmVyICovCiB9OwogCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBodHRwX2NodW5rcy5jICovCit2b2lkIEN1cmxfaHR0cGNodW5rX2luaXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK0NIVU5LY29kZSBDdXJsX2h0dHBjaHVua19yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqZGF0YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGxlbmd0aCwgc3NpemVfdCAqd3JvdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqcGFzc3RocnUpOworCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfSFRUUF9DSFVOS1NfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9uZWdvdGlhdGUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbmVnb3RpYXRlLmMKaW5kZXggYzhmNDA2NC4uOGUxZjNiZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9uZWdvdGlhdGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5jCkBAIC0xNDgsMTAgKzE0OCwxMCBAQAogICAgIH0KICAgICBpZighbmVnX2N0eC0+Y29udGV4dCkgewogICAgICAgcmVzdWx0ID0gQ3VybF9pbnB1dF9uZWdvdGlhdGUoY29ubiwgcHJveHksICJOZWdvdGlhdGUiKTsKLSAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9MT0dJTl9ERU5JRUQpIHsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9BVVRIX0VSUk9SKSB7CiAgICAgICAgIC8qIG5lZ290aWF0ZSBhdXRoIGZhaWxlZCwgbGV0J3MgY29udGludWUgdW5hdXRoZW50aWNhdGVkIHRvIHN0YXkKICAgICAgICAgICogY29tcGF0aWJsZSB3aXRoIHRoZSBiZWhhdmlvciBiZWZvcmUgY3VybC03XzY0XzAtMTU4LWc2YzYwMzU1MzIgKi8KLSAgICAgICAgY29ubi0+ZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBUUlVFOworICAgICAgICBhdXRocC0+ZG9uZSA9IFRSVUU7CiAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKICAgICAgIH0KICAgICAgIGVsc2UgaWYocmVzdWx0KQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uYwppbmRleCBlNGE0ZmUwLi4zNDJiMjQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uYwpAQCAtNDQsOSArNDQsNyBAQAogCiAvKiBTU0wgYmFja2VuZC1zcGVjaWZpYyAjaWYgYnJhbmNoZXMgaW4gdGhpcyBmaWxlIG11c3QgYmUga2VwdCBpbiB0aGUgb3JkZXIKICAgIGRvY3VtZW50ZWQgaW4gY3VybF9udGxtX2NvcmUuICovCi0jaWYgZGVmaW5lZChOVExNX05FRURTX05TU19JTklUKQotI2luY2x1ZGUgInZ0bHMvbnNzZy5oIgotI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKICNpbmNsdWRlICJjdXJsX3NzcGkuaCIKICNlbmRpZgogCkBAIC0xMzcsMTEgKzEzNSw2IEBACiAgIERFQlVHQVNTRVJUKGNvbm4pOwogICBERUJVR0FTU0VSVChjb25uLT5kYXRhKTsKIAotI2lmIGRlZmluZWQoTlRMTV9ORUVEU19OU1NfSU5JVCkKLSAgaWYoQ1VSTEVfT0sgIT0gQ3VybF9uc3NfZm9yY2VfaW5pdChjb25uLT5kYXRhKSkKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSNlbmRpZgotCiAgIGlmKHByb3h5KSB7CiAgICAgYWxsb2N1c2VycHdkID0gJmNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfcHJveHkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfcHJveHkuYwppbmRleCBkN2VkMTE3Li43NWM3YTYwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9wcm94eS5jCkBAIC01OCw4ICs1OCw5IEBACiAgICAgICBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIHNvY2tpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtzb2NraW5kZXhdKTsKICAgICBpZihyZXN1bHQpCi0gICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogYSBmYWlsZWQgY29ubmVjdGlvbiBpcyBtYXJrZWQgZm9yIGNsb3N1cmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IChiYWQpIHJlLXVzZSBvciBzaW1pbGFyICovCisgICAgICAvKiBhIGZhaWxlZCBjb25uZWN0aW9uIGlzIG1hcmtlZCBmb3IgY2xvc3VyZSB0byBwcmV2ZW50IChiYWQpIHJlLXVzZSBvcgorICAgICAgICAgc2ltaWxhciAqLworICAgICAgY29ubmNsb3NlKGNvbm4sICJUTFMgaGFuZHNoYWtlIGZhaWxlZCIpOwogICB9CiAgIHJldHVybiByZXN1bHQ7CiAjZWxzZQpAQCAtMzI3LDcgKzMyOCw3IEBACiAgICAgeyAvKiBSRUFESU5HIFJFU1BPTlNFIFBIQVNFICovCiAgICAgICBpbnQgZXJyb3IgPSBTRUxFQ1RfT0s7CiAKLSAgICAgIHdoaWxlKHMtPmtlZXBvbiAmJiAhZXJyb3IpIHsKKyAgICAgIHdoaWxlKHMtPmtlZXBvbikgewogICAgICAgICBzc2l6ZV90IGdvdGJ5dGVzOwogCiAgICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHNwYWNlIHRvIHJlYWQgbW9yZSBkYXRhICovCkBAIC0zODQsMTEgKzM4NSwxMiBAQAogICAgICAgICAgICAgLyogY2h1bmtlZC1lbmNvZGVkIGJvZHksIHNvIHdlIG5lZWQgdG8gZG8gdGhlIGNodW5rZWQgZGFuY2UKICAgICAgICAgICAgICAgIHByb3Blcmx5IHRvIGtub3cgd2hlbiB0aGUgZW5kIG9mIHRoZSBib2R5IGlzIHJlYWNoZWQgKi8KICAgICAgICAgICAgIENIVU5LY29kZSByOworICAgICAgICAgICAgQ1VSTGNvZGUgZXh0cmE7CiAgICAgICAgICAgICBzc2l6ZV90IHRvb2tjYXJlb2YgPSAwOwogCiAgICAgICAgICAgICAvKiBub3cgcGFyc2UgdGhlIGNodW5rZWQgcGllY2Ugb2YgZGF0YSBzbyB0aGF0IHdlIGNhbgogICAgICAgICAgICAgICAgcHJvcGVybHkgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLwotICAgICAgICAgICAgciA9IEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgcy0+cHRyLCAxLCAmdG9va2NhcmVvZik7CisgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBzLT5wdHIsIDEsICZ0b29rY2FyZW9mLCAmZXh0cmEpOwogICAgICAgICAgICAgaWYociA9PSBDSFVOS0VfU1RPUCkgewogICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lIHJlYWRpbmcgY2h1bmtzISAqLwogICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiY2h1bmsgcmVhZGluZyBET05FXG4iKTsKQEAgLTQ1NSw2ICs0NTcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZihzLT5jaHVua2VkX2VuY29kaW5nKSB7CiAgICAgICAgICAgICAgIENIVU5LY29kZSByOworICAgICAgICAgICAgICBDVVJMY29kZSBleHRyYTsKIAogICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiSWdub3JlIGNodW5rZWQgcmVzcG9uc2UtYm9keVxuIik7CiAKQEAgLTQ3Miw3ICs0NzUsOCBAQAogCiAgICAgICAgICAgICAgIC8qIG5vdyBwYXJzZSB0aGUgY2h1bmtlZCBwaWVjZSBvZiBkYXRhIHNvIHRoYXQgd2UgY2FuCiAgICAgICAgICAgICAgICAgIHByb3Blcmx5IHRlbGwgd2hlbiB0aGUgc3RyZWFtIGVuZHMgKi8KLSAgICAgICAgICAgICAgciA9IEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgcy0+bGluZV9zdGFydCArIDEsIDEsICZnb3RieXRlcyk7CisgICAgICAgICAgICAgIHIgPSBDdXJsX2h0dHBjaHVua19yZWFkKGNvbm4sIHMtPmxpbmVfc3RhcnQgKyAxLCAxLCAmZ290Ynl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYSk7CiAgICAgICAgICAgICAgIGlmKHIgPT0gQ0hVTktFX1NUT1ApIHsKICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lIHJlYWRpbmcgY2h1bmtzISAqLwogICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJjaHVuayByZWFkaW5nIERPTkVcbiIpOwpAQCAtNjMyLDYgKzYzNiw3IEBACiAgIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCA9IE5VTEw7CiAKICAgZGF0YS0+c3RhdGUuYXV0aHByb3h5LmRvbmUgPSBUUlVFOworICBkYXRhLT5zdGF0ZS5hdXRocHJveHkubXVsdGlwYXNzID0gRkFMU0U7CiAKICAgaW5mb2YoZGF0YSwgIlByb3h5IHJlcGxpZWQgJWQgdG8gQ09OTkVDVCByZXF1ZXN0XG4iLAogICAgICAgICBkYXRhLT5pbmZvLmh0dHBwcm94eWNvZGUpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5jCmluZGV4IGJkY2M2OWMuLjY2MTcyYmQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbWFwLmMKQEAgLTk1LDggKzk1LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBpbWFwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBDVVJMY29kZSBpbWFwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOwogc3RhdGljIENVUkxjb2RlIGltYXBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgaW1hcF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIGltYXBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb3BoYXNlX2RvbmUpOwogc3RhdGljIENVUkxjb2RlIGltYXBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIGNoYXIgKmltYXBfYXRvbShjb25zdCBjaGFyICpzdHIsIGJvb2wgZXNjYXBlX29ubHkpOwpAQCAtNDQ0LDEwICs0NDMsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX3N0YXJ0dGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgU1RBUlRUTFMgY29tbWFuZCAqLwotICByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJTVEFSVFRMUyIpOworICBDVVJMY29kZSByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJTVEFSVFRMUyIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgSU1BUF9TVEFSVFRMUyk7CkBAIC00NjMsMTEgKzQ2MCwxMCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBpbWFwX2Nvbm4gKmltYXBjID0gJmNvbm4tPnByb3RvLmltYXBjOwotCiAgIC8qIFN0YXJ0IHRoZSBTU0wgY29ubmVjdGlvbiAqLwotICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmaW1hcGMtPnNzbGRvbmUpOworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hcGMtPnNzbGRvbmUpOwogCiAgIGlmKCFyZXN1bHQpIHsKICAgICBpZihpbWFwYy0+c3RhdGUgIT0gSU1BUF9VUEdSQURFVExTKQpAQCAtODI2LDEwICs4MjIsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX2xvZ291dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIExPR09VVCBjb21tYW5kICovCi0gIHJlc3VsdCA9IGltYXBfc2VuZGYoY29ubiwgIkxPR09VVCIpOworICBDVVJMY29kZSByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJMT0dPVVQiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIElNQVBfTE9HT1VUKTsKQEAgLTEzMTIsNiArMTMwNiw3IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgSU1BUF9MSVNUOgorICAgIGNhc2UgSU1BUF9TRUFSQ0g6CiAgICAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xpc3RzZWFyY2hfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKICAgICAgIGJyZWFrOwogCkBAIC0xMzM1LDEwICsxMzMwLDYgQEAKICAgICAgIHJlc3VsdCA9IGltYXBfc3RhdGVfYXBwZW5kX2ZpbmFsX3Jlc3AoY29ubiwgaW1hcGNvZGUsIGltYXBjLT5zdGF0ZSk7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgSU1BUF9TRUFSQ0g6Ci0gICAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xpc3RzZWFyY2hfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKLSAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBJTUFQX0xPR09VVDoKICAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCiAgICAgZGVmYXVsdDoKQEAgLTEzOTcsMTAgKzEzODgsOSBAQAogfQogCiAvKiBGb3IgdGhlIElNQVAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCi1zdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBpbWFwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uaW1hcGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmltYXBjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5oCmluZGV4IDBlZmNmZDIuLjQ3ODZmNTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbWFwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9udG9wLmMKaW5kZXggODU1OTgxYy4uOWE1YWY3ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9udG9wLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9udG9wLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEgIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9udG9wLmgKaW5kZXggZDE1MGJiNi4uOWQzZjIzNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9udG9wLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9udG9wLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9wdG9uLmMKaW5kZXggMGQ2NWFlMC4uOWM4N2EwNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9wdG9uLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9wdG9uLmMKQEAgLTEsNiArMSw2IEBACiAvKiBUaGlzIGlzIGZyb20gdGhlIEJJTkQgNC45LjQgcmVsZWFzZSwgbW9kaWZpZWQgdG8gY29tcGlsZSBieSBpdHNlbGYgKi8KIAotLyogQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisvKiBDb3B5cmlnaHQgKGMpIDE5OTYgLSAyMDE5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5oCmluZGV4IDAyMDliOWIuLmU2OTVhZjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9rcmI1LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9rcmI1LmMKaW5kZXggMTQ3YWIwMi4uNWJkOGU3MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIva3JiNS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2tyYjUuYwpAQCAtMSw4ICsxLDggQEAKIC8qIEdTU0FQSS9rcmI1IHN1cHBvcnQgZm9yIEZUUCAtIGxvb3NlbHkgYmFzZWQgb24gb2xkIGtyYjQuYwogICoKLSAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBIw7Znc2tvbGFuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSMODwrZnc2tvbGFuCiAgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KLSAqIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMTcgRGFuaWVsIFN0ZW5iZXJnCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDE5IERhbmllbCBTdGVuYmVyZwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyMCwxMCArMzIwLDggQEAKICAgICBPTV91aW50MzIgbWluOwogICAgIGdzc19jdHhfaWRfdCAqY29udGV4dCA9IGFwcF9kYXRhOwogICAgIGlmKCpjb250ZXh0ICE9IEdTU19DX05PX0NPTlRFWFQpIHsKLSNpZmRlZiBERUJVR0JVSUxECi0gICAgICBPTV91aW50MzIgbWFqID0KLSNlbmRpZgotICAgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmbWluLCBjb250ZXh0LCBHU1NfQ19OT19CVUZGRVIpOworICAgICAgT01fdWludDMyIG1haiA9IGdzc19kZWxldGVfc2VjX2NvbnRleHQoJm1pbiwgY29udGV4dCwgR1NTX0NfTk9fQlVGRkVSKTsKKyAgICAgICh2b2lkKW1hajsKICAgICAgIERFQlVHQVNTRVJUKG1haiA9PSBHU1NfU19DT01QTEVURSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbGRhcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGRhcC5jCmluZGV4IGZkMzFmYWEuLjc3MWVkYjQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xkYXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9sZGFwLmMKQEAgLTExMiwxMyArMTEyLDE5IEBACiAgICNkZWZpbmUgTERBUF9UUkFDRSh4KSAgIGRvIHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sZGFwX3RyYWNlKCIldTogIiwgX19MSU5FX18pOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xkYXBfdHJhY2UgeDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB9IFdISUxFX0ZBTFNFCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogICBzdGF0aWMgdm9pZCBfbGRhcF90cmFjZShjb25zdCBjaGFyICpmbXQsIC4uLik7CiAjZWxzZQogICAjZGVmaW5lIExEQVBfVFJBQ0UoeCkgICBDdXJsX25vcF9zdG10CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApICYmIGRlZmluZWQobGRhcF9lcnIyc3RyaW5nKQorLyogVXNlIGFuc2kgZXJyb3Igc3RyaW5ncyBpbiBVTklDT0RFIGJ1aWxkcyAqLworI3VuZGVmIGxkYXBfZXJyMnN0cmluZworI2RlZmluZSBsZGFwX2VycjJzdHJpbmcgbGRhcF9lcnIyc3RyaW5nQQorI2VuZGlmCisKIAogc3RhdGljIENVUkxjb2RlIEN1cmxfbGRhcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogCkBAIC04MzgsMTAgKzg0NCwxMCBAQAogc3RhdGljIGludCBfbGRhcF91cmxfcGFyc2UyKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgTERBUFVSTERlc2MgKmx1ZHApCiB7CiAgIGludCByYyA9IExEQVBfU1VDQ0VTUzsKLSAgY2hhciAqcGF0aDsKLSAgY2hhciAqcXVlcnk7CiAgIGNoYXIgKnA7Ci0gIGNoYXIgKnE7CisgIGNoYXIgKnBhdGg7CisgIGNoYXIgKnEgPSBOVUxMOworICBjaGFyICpxdWVyeSA9IE5VTEw7CiAgIHNpemVfdCBpOwogCiAgIGlmKCFjb25uLT5kYXRhIHx8CkBAIC04NTksMTEgKzg2NSwxMyBAQAogICBpZighcGF0aCkKICAgICByZXR1cm4gTERBUF9OT19NRU1PUlk7CiAKLSAgLyogRHVwbGljYXRlIHRoZSBxdWVyeSAqLwotICBxID0gcXVlcnkgPSBzdHJkdXAoY29ubi0+ZGF0YS0+c3RhdGUudXAucXVlcnkpOwotICBpZighcXVlcnkpIHsKLSAgICBmcmVlKHBhdGgpOwotICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKyAgLyogRHVwbGljYXRlIHRoZSBxdWVyeSBpZiBwcmVzZW50ICovCisgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVwLnF1ZXJ5KSB7CisgICAgcSA9IHF1ZXJ5ID0gc3RyZHVwKGNvbm4tPmRhdGEtPnN0YXRlLnVwLnF1ZXJ5KTsKKyAgICBpZighcXVlcnkpIHsKKyAgICAgIGZyZWUocGF0aCk7CisgICAgICByZXR1cm4gTERBUF9OT19NRU1PUlk7CisgICAgfQogICB9CiAKICAgLyogUGFyc2UgdGhlIEROIChEaXN0aW5ndWlzaGVkIE5hbWUpICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGxpc3QuYwppbmRleCBmODc2OWMyLi5lN2M2ZjUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE0NCw1NCArMTQ0LDMgQEAKIHsKICAgcmV0dXJuIGxpc3QtPnNpemU7CiB9Ci0KLS8qCi0gKiBAdW5pdHRlc3Q6IDEzMDAKLSAqLwotdm9pZCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QsIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqdG9fbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKnRvX2UpCi17Ci0gIC8qIFJlbW92ZSBlbGVtZW50IGZyb20gbGlzdCAqLwotICBpZihlID09IE5VTEwgfHwgbGlzdC0+c2l6ZSA9PSAwKQotICAgIHJldHVybjsKLQotICBpZihlID09IGxpc3QtPmhlYWQpIHsKLSAgICBsaXN0LT5oZWFkID0gZS0+bmV4dDsKLQotICAgIGlmKGxpc3QtPmhlYWQgPT0gTlVMTCkKLSAgICAgIGxpc3QtPnRhaWwgPSBOVUxMOwotICAgIGVsc2UKLSAgICAgIGUtPm5leHQtPnByZXYgPSBOVUxMOwotICB9Ci0gIGVsc2UgewotICAgIGUtPnByZXYtPm5leHQgPSBlLT5uZXh0OwotICAgIGlmKCFlLT5uZXh0KQotICAgICAgbGlzdC0+dGFpbCA9IGUtPnByZXY7Ci0gICAgZWxzZQotICAgICAgZS0+bmV4dC0+cHJldiA9IGUtPnByZXY7Ci0gIH0KLQotICAtLWxpc3QtPnNpemU7Ci0KLSAgLyogQWRkIGVsZW1lbnQgdG8gdG9fbGlzdCBhZnRlciB0b19lICovCi0gIGlmKHRvX2xpc3QtPnNpemUgPT0gMCkgewotICAgIHRvX2xpc3QtPmhlYWQgPSBlOwotICAgIHRvX2xpc3QtPmhlYWQtPnByZXYgPSBOVUxMOwotICAgIHRvX2xpc3QtPmhlYWQtPm5leHQgPSBOVUxMOwotICAgIHRvX2xpc3QtPnRhaWwgPSBlOwotICB9Ci0gIGVsc2UgewotICAgIGUtPm5leHQgPSB0b19lLT5uZXh0OwotICAgIGUtPnByZXYgPSB0b19lOwotICAgIGlmKHRvX2UtPm5leHQpIHsKLSAgICAgIHRvX2UtPm5leHQtPnByZXYgPSBlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHRvX2xpc3QtPnRhaWwgPSBlOwotICAgIH0KLSAgICB0b19lLT5uZXh0ID0gZTsKLSAgfQotCi0gICsrdG9fbGlzdC0+c2l6ZTsKLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5oCmluZGV4IGI5ZDRjODkuLjAxNzhjNDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGxpc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNyArNDcsNCBAQAogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOwogc2l6ZV90IEN1cmxfbGxpc3RfY291bnQoc3RydWN0IGN1cmxfbGxpc3QgKik7CiB2b2lkIEN1cmxfbGxpc3RfZGVzdHJveShzdHJ1Y3QgY3VybF9sbGlzdCAqLCB2b2lkICopOwotdm9pZCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqKTsKLQogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0xMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21kNC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKaW5kZXggZTdjNzdiYy4uMzhmMWIyYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKQEAgLTEsNSArMSwyMjUgQEAKLS8qCi0gKiAhY2hlY2tzcmMhIGRpc2FibGUgQ09QWVJJR0hUCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCisKKyNpbmNsdWRlICJjdXJsX21kNC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKyNpZmRlZiBVU0VfT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKyNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLworCisjaWZkZWYgVVNFX01CRURUTFMKKyNpbmNsdWRlIDxtYmVkdGxzL2NvbmZpZy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvdmVyc2lvbi5oPgorCisjaWYoTUJFRFRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAyMDcwMDAwKQorICAjZGVmaW5lIEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUworI2VuZGlmCisjZW5kaWYgLyogVVNFX01CRURUTFMgKi8KKworI2lmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisKKyNpbmNsdWRlIDxuZXR0bGUvbWQ0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgbWQ0X2luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgbWQ0X3VwZGF0ZShjdHgsIHNpemUsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDRfQ1RYICpjdHgpCit7CisgIG1kNF9kaWdlc3QoY3R4LCBNRDRfRElHRVNUX1NJWkUsIHJlc3VsdCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKworI2luY2x1ZGUgPGdjcnlwdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBnY3J5X21kX2hkX3QgTUQ0X0NUWDsKKworc3RhdGljIHZvaWQgTUQ0X0luaXQoTUQ0X0NUWCAqY3R4KQoreworICBnY3J5X21kX29wZW4oY3R4LCBHQ1JZX01EX01ENCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgIGdjcnlfbWRfd3JpdGUoKmN0eCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENF9DVFggKmN0eCkKK3sKKyAgbWVtY3B5KHJlc3VsdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCBNRDRfRElHRVNUX0xFTkdUSCk7CisgIGdjcnlfbWRfY2xvc2UoKmN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX09QRU5TU0wpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTUQ0KQorLyogV2hlbiBPcGVuU1NMIGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhlIE1ENC1mdW5jdGlvbnMgZnJvbSBPcGVuU1NMICovCisjaW5jbHVkZSA8b3BlbnNzbC9tZDQuaD4KKworI2VsaWYgKGRlZmluZWQoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCisgICAgICAgICAgICAgIChfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA0MCkpIHx8IFwKKyAgICAgIChkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpICYmIFwKKyAgICAgICAgICAgICAgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMjAwMDApKQorCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBDQ19NRDRfQ1RYIE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgKHZvaWQpQ0NfTUQ0X0luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgKHZvaWQpQ0NfTUQ0X1VwZGF0ZShjdHgsIGRhdGEsIChDQ19MT05HKXNpemUpOworfQorCitzdGF0aWMgdm9pZCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDRfQ1RYICpjdHgpCit7CisgICh2b2lkKUNDX01ENF9GaW5hbChyZXN1bHQsIGN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKworI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIEhDUllQVFBST1YgaENyeXB0UHJvdjsKKyAgSENSWVBUSEFTSCBoSGFzaDsKK30gTUQ0X0NUWDsKKworc3RhdGljIHZvaWQgTUQ0X0luaXQoTUQ0X0NUWCAqY3R4KQoreworICBjdHgtPmhDcnlwdFByb3YgPSAwOworICBjdHgtPmhIYXNoID0gMDsKKworICBpZihDcnlwdEFjcXVpcmVDb250ZXh0KCZjdHgtPmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKKyAgICBDcnlwdENyZWF0ZUhhc2goY3R4LT5oQ3J5cHRQcm92LCBDQUxHX01ENCwgMCwgMCwgJmN0eC0+aEhhc2gpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgIENyeXB0SGFzaERhdGEoY3R4LT5oSGFzaCwgKEJZVEUgKilkYXRhLCAodW5zaWduZWQgaW50KSBzaXplLCAwKTsKK30KKworc3RhdGljIHZvaWQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgTUQ0X0NUWCAqY3R4KQoreworICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IDA7CisKKyAgQ3J5cHRHZXRIYXNoUGFyYW0oY3R4LT5oSGFzaCwgSFBfSEFTSFZBTCwgTlVMTCwgJmxlbmd0aCwgMCk7CisgIGlmKGxlbmd0aCA9PSBNRDRfRElHRVNUX0xFTkdUSCkKKyAgICBDcnlwdEdldEhhc2hQYXJhbShjdHgtPmhIYXNoLCBIUF9IQVNIVkFMLCByZXN1bHQsICZsZW5ndGgsIDApOworCisgIGlmKGN0eC0+aEhhc2gpCisgICAgQ3J5cHREZXN0cm95SGFzaChjdHgtPmhIYXNoKTsKKworICBpZihjdHgtPmhDcnlwdFByb3YpCisgICAgQ3J5cHRSZWxlYXNlQ29udGV4dChjdHgtPmhDcnlwdFByb3YsIDApOworfQorCisjZWxpZihkZWZpbmVkKFVTRV9NQkVEVExTKSAmJiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpKQorCisjaW5jbHVkZSA8bWJlZHRscy9tZDQuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqZGF0YTsKKyAgdW5zaWduZWQgbG9uZyBzaXplOworfSBNRDRfQ1RYOworCitzdGF0aWMgdm9pZCBNRDRfSW5pdChNRDRfQ1RYICpjdHgpCit7CisgIGN0eC0+ZGF0YSA9IE5VTEw7CisgIGN0eC0+c2l6ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgIGlmKGN0eC0+ZGF0YSA9PSBOVUxMKSB7CisgICAgY3R4LT5kYXRhID0gbWFsbG9jKHNpemUpOworICAgIGlmKGN0eC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICBtZW1jcHkoY3R4LT5kYXRhLCBkYXRhLCBzaXplKTsKKyAgICAgIGN0eC0+c2l6ZSA9IHNpemU7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENF9DVFggKmN0eCkKK3sKKyAgaWYoY3R4LT5kYXRhICE9IE5VTEwpIHsKKyNpZiAhZGVmaW5lZChIQVNfTUJFRFRMU19SRVNVTFRfQ09ERV9CQVNFRF9GVU5DVElPTlMpCisgICAgbWJlZHRsc19tZDQoY3R4LT5kYXRhLCBjdHgtPnNpemUsIHJlc3VsdCk7CisjZWxzZQorICAgICh2b2lkKSBtYmVkdGxzX21kNF9yZXQoY3R4LT5kYXRhLCBjdHgtPnNpemUsIHJlc3VsdCk7CisjZW5kaWYKKworICAgIEN1cmxfc2FmZWZyZWUoY3R4LT5kYXRhKTsKKyAgICBjdHgtPnNpemUgPSAwOworICB9Cit9CisKKyNlbHNlCisvKiBXaGVuIG5vIG90aGVyIGNyeXB0byBsaWJyYXJ5IGlzIGF2YWlsYWJsZSwgb3IgdGhlIGNyeXB0byBsaWJyYXJ5IGRvZXNuJ3QKKyAqIHN1cHBvcnQgTUQ0LCB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBpdAorICoKICAqIFRoaXMgaXMgYW4gT3BlblNTTC1jb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLgogICogTUQ0IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSAoUkZDIDEzMjApLgogICoKQEAgLTM2LDE5ICsyNTYsNiBAQAogICogY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotLyogVGhlIE5TUywgT1MvNDAwLCBhbmQgd2hlbiBub3QgaW5jbHVkZWQsIE9wZW5TU0wgYW5kIG1iZWQgVExTIGNyeXB0bwotICogbGlicmFyaWVzIGRvIG5vdCBwcm92aWRlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0sIHNvIHdlIHVzZSB0aGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBvZiBpdCAqLwotI2lmIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX01ENCkpIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpCi0KLSNpbmNsdWRlICJjdXJsX21kNC5oIgotI2luY2x1ZGUgIndhcm5sZXNzLmgiCi0KLSNpZm5kZWYgSEFWRV9PUEVOU1NMCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIApAQCAtMjk4LDE2ICs1MDUsMTYgQEAKICAgbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ1JZUFRPIExJQlMgKi8KIAotdm9pZCBDdXJsX21kNGl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBsZW4pCit2b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKQogewogICBNRDRfQ1RYIGN0eDsKKwogICBNRDRfSW5pdCgmY3R4KTsKICAgTUQ0X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKGxlbikpOwogICBNRDRfRmluYWwob3V0cHV0LCAmY3R4KTsKIH0KIAotI2VuZGlmIC8qIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8Ci0gICAgKGRlZmluZWQoVVNFX09QRU5TU0wpICYmIGRlZmluZWQoT1BFTlNTTF9OT19NRDQpKSB8fAotICAgIChkZWZpbmVkKFVTRV9NQkVEVExTKSAmJiAhZGVmaW5lZChNQkVEVExTX01ENF9DKSkgKi8KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21kNS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKaW5kZXggMmI4MWNhNC4uM2Y2MDFiMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDYgKzMwLDE0IEBACiAjaW5jbHVkZSAiY3VybF9obWFjLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKIAorI2lmZGVmIFVTRV9NQkVEVExTCisjaW5jbHVkZSA8bWJlZHRscy92ZXJzaW9uLmg+CisKKyNpZihNQkVEVExTX1ZFUlNJT05fTlVNQkVSID49IDB4MDIwNzAwMDApCisgICNkZWZpbmUgSEFTX01CRURUTFNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TCisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCiAjaWYgZGVmaW5lZChVU0VfR05VVExTX05FVFRMRSkKIAogI2luY2x1ZGUgPG5ldHRsZS9tZDUuaD4KQEAgLTUxLDcgKzU5LDcgQEAKICAgbWQ1X3VwZGF0ZShjdHgsIGlucHV0TGVuLCBpbnB1dCk7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgbWQ1X2RpZ2VzdChjdHgsIDE2LCBkaWdlc3QpOwogfQpAQCAtNzcsNyArODUsNyBAQAogICBnY3J5X21kX3dyaXRlKCpjdHgsIGlucHV0LCBpbnB1dExlbik7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgbWVtY3B5KGRpZ2VzdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCAxNik7CiAgIGdjcnlfbWRfY2xvc2UoKmN0eCk7CkBAIC05MCw2ICs5OCw0NiBAQAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAorI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKKworI2luY2x1ZGUgPG1iZWR0bHMvbWQ1Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIG1iZWR0bHNfbWQ1X2NvbnRleHQgTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqY3R4KQoreworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19tZDVfc3RhcnRzKGN0eCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19tZDVfc3RhcnRzX3JldChjdHgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19tZDVfdXBkYXRlKGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbHNlCisgICh2b2lkKSBtYmVkdGxzX21kNV91cGRhdGVfcmV0KGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBNRDVfQ1RYICpjdHgpCit7CisjaWYgIWRlZmluZWQoSEFTX01CRURUTFNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TKQorICBtYmVkdGxzX21kNV9maW5pc2goY3R4LCBkaWdlc3QpOworI2Vsc2UKKyAgKHZvaWQpIG1iZWR0bHNfbWQ1X2ZpbmlzaF9yZXQoY3R4LCBkaWdlc3QpOworI2VuZGlmCit9CisKICNlbGlmIChkZWZpbmVkKF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCkgJiYgXAogICAgICAgICAgICAgICAoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNDApKSB8fCBcCiAgICAgICAoZGVmaW5lZChfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCkBAIC0xMTksMTIgKzE2NywxMiBAQAogICBDQ19NRDVfVXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0TGVuKTsKIH0KIAotc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgTUQ1X0NUWCAqY3R4KQorc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgTUQ1X0NUWCAqY3R4KQogewogICBDQ19NRDVfRmluYWwoZGlnZXN0LCBjdHgpOwogfQogCi0jZWxpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChDVVJMX1dJTkRPV1NfQVBQKQorI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQogCiAjaW5jbHVkZSA8d2luY3J5cHQuaD4KICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtMTUxLDcgKzE5OSw3IEBACiAgIENyeXB0SGFzaERhdGEoY3R4LT5oSGFzaCwgKHVuc2lnbmVkIGNoYXIgKilpbnB1dCwgaW5wdXRMZW4sIDApOwogfQogCi1zdGF0aWMgdm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBNRDVfQ1RYICpjdHgpCitzdGF0aWMgdm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBNRDVfQ1RYICpjdHgpCiB7CiAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gMDsKICAgQ3J5cHRHZXRIYXNoUGFyYW0oY3R4LT5oSGFzaCwgSFBfSEFTSFZBTCwgTlVMTCwgJmxlbmd0aCwgMCk7CkBAIC0xNjQsNyArMjEyLDkgQEAKIH0KIAogI2Vsc2UKKwogLyogV2hlbiBubyBvdGhlciBjcnlwdG8gbGlicmFyeSBpcyBhdmFpbGFibGUgd2UgdXNlIHRoaXMgY29kZSBzZWdtZW50ICovCisKIC8qCiAgKiBUaGlzIGlzIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4KICAqIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0gKFJGQyAxMzIxKS4KQEAgLTUxMywxMiArNTYzLDEzIEBACiAvKgogICogQHVuaXR0ZXN0OiAxNjAxCiAgKi8KLXZvaWQgQ3VybF9tZDVpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsIC8qIDE2IGJ5dGVzICovCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQpCit2b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKQogewogICBNRDVfQ1RYIGN0eDsKKwogICBNRDVfSW5pdCgmY3R4KTsKLSAgTUQ1X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKHN0cmxlbigoY2hhciAqKWlucHV0KSkpOworICBNRDVfVXBkYXRlKCZjdHgsIGlucHV0LCBjdXJseF91enRvdWkobGVuKSk7CiAgIE1ENV9GaW5hbChvdXRidWZmZXIsICZjdHgpOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuaAppbmRleCA1MjM2ZjYwLi43Y2E0NDI2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21lbWRlYnVnLmgKQEAgLTE2OSw2ICsxNjksNiBAQAogICovCiAKICNkZWZpbmUgQ3VybF9zYWZlZnJlZShwdHIpIFwKLSAgZG8geyBmcmVlKChwdHIpKTsgKHB0cikgPSBOVUxMO30gV0hJTEVfRkFMU0UKKyAgZG8geyBmcmVlKChwdHIpKTsgKHB0cikgPSBOVUxMO30gd2hpbGUoMCkKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX01FTURFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuYwppbmRleCAyMTM1ZjcyLi4yNTcxMjg3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWltZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTM1LDYgKzExMzUsOCBAQAogICBjb25zdCBjdXJsX21pbWVwYXJ0ICpzOwogICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKIAorICBERUJVR0FTU0VSVChkc3QpOworCiAgIC8qIER1cGxpY2F0ZSBjb250ZW50LiAqLwogICBzd2l0Y2goc3JjLT5raW5kKSB7CiAgIGNhc2UgTUlNRUtJTkRfTk9ORToKQEAgLTExODQsMjAgKzExODYsMTggQEAKICAgICB9CiAgIH0KIAotICAvKiBEdXBsaWNhdGUgb3RoZXIgZmllbGRzLiAqLwotICBpZihkc3QgIT0gTlVMTCkKKyAgaWYoIXJlcykgeworICAgIC8qIER1cGxpY2F0ZSBvdGhlciBmaWVsZHMuICovCiAgICAgZHN0LT5lbmNvZGVyID0gc3JjLT5lbmNvZGVyOwotICBlbHNlCi0gICAgcmVzID0gQ1VSTEVfV1JJVEVfRVJST1I7Ci0gIGlmKCFyZXMpCiAgICAgcmVzID0gY3VybF9taW1lX3R5cGUoZHN0LCBzcmMtPm1pbWV0eXBlKTsKKyAgfQogICBpZighcmVzKQogICAgIHJlcyA9IGN1cmxfbWltZV9uYW1lKGRzdCwgc3JjLT5uYW1lKTsKICAgaWYoIXJlcykKICAgICByZXMgPSBjdXJsX21pbWVfZmlsZW5hbWUoZHN0LCBzcmMtPmZpbGVuYW1lKTsKIAogICAvKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgcm9sbGJhY2suICovCi0gIGlmKHJlcyAmJiBkc3QpCisgIGlmKHJlcykKICAgICBDdXJsX21pbWVfY2xlYW5wYXJ0KGRzdCk7CiAKICAgcmV0dXJuIHJlczsKQEAgLTE5MDEsNCArMTkwMSwxMSBAQAogICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwogfQogCitDVVJMY29kZSBDdXJsX21pbWVfYWRkX2hlYWRlcihzdHJ1Y3QgY3VybF9zbGlzdCAqKnNscCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgICh2b2lkKXNscDsKKyAgKHZvaWQpZm10OworICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworfQorCiAjZW5kaWYgLyogaWYgZGlzYWJsZWQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuaAppbmRleCA0YzlhNWZiLi40MzEyMTI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWltZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMjcsNyArMTI3LDkgQEAKICAgbWltZV9lbmNvZGVyX3N0YXRlIGVuY3N0YXRlOyAgICAgLyogRGF0YSBlbmNvZGVyIHN0YXRlLiAqLwogfTsKIAotI2lmICghZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX01JTUUpKSB8fCBcCitDVVJMY29kZSBDdXJsX21pbWVfYWRkX2hlYWRlcihzdHJ1Y3QgY3VybF9zbGlzdCAqKnNscCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjaWYgKCFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfTUlNRSkpIHx8ICAgICBcCiAgICFkZWZpbmVkKENVUkxfRElTQUJMRV9TTVRQKSB8fCAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSU1BUCkKIAogLyogUHJvdG90eXBlcy4gKi8KQEAgLTE0NCw3ICsxNDYsNiBAQAogc2l6ZV90IEN1cmxfbWltZV9yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaW5zdHJlYW0pOwogQ1VSTGNvZGUgQ3VybF9taW1lX3Jld2luZChjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKLUNVUkxjb2RlIEN1cmxfbWltZV9hZGRfaGVhZGVyKHN0cnVjdCBjdXJsX3NsaXN0ICoqc2xwLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiBjb25zdCBjaGFyICpDdXJsX21pbWVfY29udGVudHR5cGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOwogCiAjZWxzZQpAQCAtMTU3LDcgKzE1OCw2IEBACiAjZGVmaW5lIEN1cmxfbWltZV9zaXplKHgpIChjdXJsX29mZl90KSAtMQogI2RlZmluZSBDdXJsX21pbWVfcmVhZCBOVUxMCiAjZGVmaW5lIEN1cmxfbWltZV9yZXdpbmQoeCkgKCh2b2lkKXgsIENVUkxFX05PVF9CVUlMVF9JTikKLSNkZWZpbmUgQ3VybF9taW1lX2FkZF9oZWFkZXIoeCx5LC4uLikgQ1VSTEVfTk9UX0JVSUxUX0lOCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcHJpbnRmLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcHJpbnRmLmMKaW5kZXggZTE5MDkzNi4uYmMwMDkxMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbXByaW50Zi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21wcmludGYuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICBkb25lKys7IFwKICAgICBlbHNlIFwKICAgICAgcmV0dXJuIGRvbmU7IC8qIHJldHVybiBpbW1lZGlhdGVseSBvbiBmYWlsdXJlICovIFwKLSAgfSBXSElMRV9GQUxTRQorICB9IHdoaWxlKDApCiAKIC8qIERhdGEgdHlwZSB0byByZWFkIGZyb20gdGhlIGFyZ2xpc3QgKi8KIHR5cGVkZWYgZW51bSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGkuYwppbmRleCBjN2M0NmVlLi5jZWYyODA1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ2LDYgKzQ2LDggQEAKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAiaHR0cF9wcm94eS5oIgogI2luY2x1ZGUgImh0dHAyLmgiCisjaW5jbHVkZSAic29ja2V0cGFpci5oIgorI2luY2x1ZGUgInNvY2tzLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtNzEsOCArNzMsNiBAQAogCiBzdGF0aWMgQ1VSTE1jb2RlIHNpbmdsZXNvY2tldChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLXN0YXRpYyBpbnQgdXBkYXRlX3RpbWVyKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSk7Ci0KIHN0YXRpYyBDVVJMTWNvZGUgYWRkX25leHRfdGltZW91dChzdHJ1Y3QgY3VybHRpbWUgbm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkKTsKQEAgLTE4OSw3ICsxODksNyBAQAogICovCiAKIHN0cnVjdCBDdXJsX3NoX2VudHJ5IHsKLSAgc3RydWN0IGN1cmxfbGxpc3QgbGlzdDsgLyogbGlzdCBvZiBlYXN5IGhhbmRsZXMgdXNpbmcgdGhpcyBzb2NrZXQgKi8KKyAgc3RydWN0IGN1cmxfaGFzaCB0cmFuc2ZlcnM7IC8qIGhhc2ggb2YgdHJhbnNmZXJzIHVzaW5nIHRoaXMgc29ja2V0ICovCiAgIHVuc2lnbmVkIGludCBhY3Rpb247ICAvKiB3aGF0IGNvbWJpbmVkIGFjdGlvbiBSRUFEL1dSSVRFIHRoaXMgc29ja2V0IHdhaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKi8KICAgdm9pZCAqc29ja2V0cDsgLyogc2V0dGFibGUgYnkgdXNlcnMgd2l0aCBjdXJsX211bHRpX2Fzc2lnbigpICovCkBAIC0yMDYsMTIgKzIwNiwzNiBAQAogc3RhdGljIHN0cnVjdCBDdXJsX3NoX2VudHJ5ICpzaF9nZXRlbnRyeShzdHJ1Y3QgY3VybF9oYXNoICpzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzKQogewotICBpZihzICE9IENVUkxfU09DS0VUX0JBRCkKKyAgaWYocyAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKICAgICAvKiBvbmx5IGxvb2sgZm9yIHByb3BlciBzb2NrZXRzICovCiAgICAgcmV0dXJuIEN1cmxfaGFzaF9waWNrKHNoLCAoY2hhciAqKSZzLCBzaXplb2YoY3VybF9zb2NrZXRfdCkpOworICB9CiAgIHJldHVybiBOVUxMOwogfQogCisjZGVmaW5lIFRSSEFTSF9TSVpFIDEzCitzdGF0aWMgc2l6ZV90IHRyaGFzaCh2b2lkICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLCBzaXplX3Qgc2xvdHNfbnVtKQoreworICBzaXplX3Qga2V5dmFsID0gKHNpemVfdCkqKHN0cnVjdCBDdXJsX2Vhc3kgKiopa2V5OworICAodm9pZCkga2V5X2xlbmd0aDsKKworICByZXR1cm4gKGtleXZhbCAlIHNsb3RzX251bSk7Cit9CisKK3N0YXRpYyBzaXplX3QgdHJoYXNoX2NvbXBhcmUodm9pZCAqazEsIHNpemVfdCBrMV9sZW4sIHZvaWQgKmsyLCBzaXplX3QgazJfbGVuKQoreworICAodm9pZClrMV9sZW47CisgICh2b2lkKWsyX2xlbjsKKworICByZXR1cm4gKihzdHJ1Y3QgQ3VybF9lYXN5ICoqKWsxID09ICooc3RydWN0IEN1cmxfZWFzeSAqKilrMjsKK30KKworc3RhdGljIHZvaWQgdHJoYXNoX2R0b3Iodm9pZCAqbmFkYSkKK3sKKyAgKHZvaWQpbmFkYTsKK30KKworCiAvKiBtYWtlIHN1cmUgdGhpcyBzb2NrZXQgaXMgcHJlc2VudCBpbiB0aGUgaGFzaCBmb3IgdGhpcyBoYW5kbGUgKi8KIHN0YXRpYyBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqc2hfYWRkZW50cnkoc3RydWN0IGN1cmxfaGFzaCAqc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcykKQEAgLTIxOSwxOSArMjQzLDI1IEBACiAgIHN0cnVjdCBDdXJsX3NoX2VudHJ5ICp0aGVyZSA9IHNoX2dldGVudHJ5KHNoLCBzKTsKICAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmNoZWNrOwogCi0gIGlmKHRoZXJlKQorICBpZih0aGVyZSkgewogICAgIC8qIGl0IGlzIHByZXNlbnQsIHJldHVybiBmaW5lICovCiAgICAgcmV0dXJuIHRoZXJlOworICB9CiAKICAgLyogbm90IHByZXNlbnQsIGFkZCBpdCAqLwogICBjaGVjayA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfc2hfZW50cnkpKTsKICAgaWYoIWNoZWNrKQogICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCiAKLSAgQ3VybF9sbGlzdF9pbml0KCZjaGVjay0+bGlzdCwgTlVMTCk7CisgIGlmKEN1cmxfaGFzaF9pbml0KCZjaGVjay0+dHJhbnNmZXJzLCBUUkhBU0hfU0laRSwgdHJoYXNoLAorICAgICAgICAgICAgICAgICAgICB0cmhhc2hfY29tcGFyZSwgdHJoYXNoX2R0b3IpKSB7CisgICAgZnJlZShjaGVjayk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KIAogICAvKiBtYWtlL2FkZCBuZXcgaGFzaCBlbnRyeSAqLwogICBpZighQ3VybF9oYXNoX2FkZChzaCwgKGNoYXIgKikmcywgc2l6ZW9mKGN1cmxfc29ja2V0X3QpLCBjaGVjaykpIHsKKyAgICBDdXJsX2hhc2hfZGVzdHJveSgmY2hlY2stPnRyYW5zZmVycyk7CiAgICAgZnJlZShjaGVjayk7CiAgICAgcmV0dXJuIE5VTEw7IC8qIG1ham9yIGZhaWx1cmUgKi8KICAgfQpAQCAtMjQxLDggKzI3MSwxMSBAQAogCiAKIC8qIGRlbGV0ZSB0aGUgZ2l2ZW4gc29ja2V0ICsgaGFuZGxlIGZyb20gdGhlIGhhc2ggKi8KLXN0YXRpYyB2b2lkIHNoX2RlbGVudHJ5KHN0cnVjdCBjdXJsX2hhc2ggKnNoLCBjdXJsX3NvY2tldF90IHMpCitzdGF0aWMgdm9pZCBzaF9kZWxlbnRyeShzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9oYXNoICpzaCwgY3VybF9zb2NrZXRfdCBzKQogeworICBDdXJsX2hhc2hfZGVzdHJveSgmZW50cnktPnRyYW5zZmVycyk7CisKICAgLyogV2UgcmVtb3ZlIHRoZSBoYXNoIGVudHJ5LiBUaGlzIHdpbGwgZW5kIHVwIGluIGEgY2FsbCB0bwogICAgICBzaF9mcmVlZW50cnkoKS4gKi8KICAgQ3VybF9oYXNoX2RlbGV0ZShzaCwgKGNoYXIgKikmcywgc2l6ZW9mKGN1cmxfc29ja2V0X3QpKTsKQEAgLTMxMSwxNyArMzQ0LDYgQEAKICAgcmV0dXJuIENVUkxNX09LOwogfQogCi0vKgotICogbXVsdGlfZnJlZWFtc2coKQotICoKLSAqIENhbGxiYWNrIHVzZWQgYnkgdGhlIGxsaXN0IHN5c3RlbSB3aGVuIGEgc2luZ2xlIGxpc3QgZW50cnkgaXMgZGVzdHJveWVkLgotICovCi1zdGF0aWMgdm9pZCBtdWx0aV9mcmVlYW1zZyh2b2lkICphLCB2b2lkICpiKQotewotICAodm9pZClhOwotICAodm9pZCliOwotfQotCiBzdHJ1Y3QgQ3VybF9tdWx0aSAqQ3VybF9tdWx0aV9oYW5kbGUoaW50IGhhc2hzaXplLCAvKiBzb2NrZXQgaGFzaCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFzaHNpemUpIC8qIGNvbm5lY3Rpb24gaGFzaCAqLwogewpAQCAtMzQxLDExICszNjMsMzAgQEAKICAgaWYoQ3VybF9jb25uY2FjaGVfaW5pdCgmbXVsdGktPmNvbm5fY2FjaGUsIGNoYXNoc2l6ZSkpCiAgICAgZ290byBlcnJvcjsKIAotICBDdXJsX2xsaXN0X2luaXQoJm11bHRpLT5tc2dsaXN0LCBtdWx0aV9mcmVlYW1zZyk7Ci0gIEN1cmxfbGxpc3RfaW5pdCgmbXVsdGktPnBlbmRpbmcsIG11bHRpX2ZyZWVhbXNnKTsKKyAgQ3VybF9sbGlzdF9pbml0KCZtdWx0aS0+bXNnbGlzdCwgTlVMTCk7CisgIEN1cmxfbGxpc3RfaW5pdCgmbXVsdGktPnBlbmRpbmcsIE5VTEwpOworCisgIG11bHRpLT5tdWx0aXBsZXhpbmcgPSBUUlVFOwogCiAgIC8qIC0xIG1lYW5zIGl0IG5vdCBzZXQgYnkgdXNlciwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlICovCiAgIG11bHRpLT5tYXhjb25uZWN0cyA9IC0xOworICBtdWx0aS0+bWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9IDEwMDsKKyAgbXVsdGktPmlwdjZfd29ya3MgPSBDdXJsX2lwdjZ3b3JrcyhOVUxMKTsKKworI2lmZGVmIEVOQUJMRV9XQUtFVVAKKyAgaWYoQ3VybF9zb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBtdWx0aS0+d2FrZXVwX3BhaXIpIDwgMCkgeworICAgIG11bHRpLT53YWtldXBfcGFpclswXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICBtdWx0aS0+d2FrZXVwX3BhaXJbMV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIH0KKyAgZWxzZSBpZihjdXJseF9ub25ibG9jayhtdWx0aS0+d2FrZXVwX3BhaXJbMF0sIFRSVUUpIDwgMCB8fAorICAgICAgICAgIGN1cmx4X25vbmJsb2NrKG11bHRpLT53YWtldXBfcGFpclsxXSwgVFJVRSkgPCAwKSB7CisgICAgc2Nsb3NlKG11bHRpLT53YWtldXBfcGFpclswXSk7CisgICAgc2Nsb3NlKG11bHRpLT53YWtldXBfcGFpclsxXSk7CisgICAgbXVsdGktPndha2V1cF9wYWlyWzBdID0gQ1VSTF9TT0NLRVRfQkFEOworICAgIG11bHRpLT53YWtldXBfcGFpclsxXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgfQorI2VuZGlmCisKICAgcmV0dXJuIG11bHRpOwogCiAgIGVycm9yOgpAQCAtNDUzLDE2ICs0OTQsMTYgQEAKICAgLyogaW5jcmVhc2UgdGhlIGFsaXZlLWNvdW50ZXIgKi8KICAgbXVsdGktPm51bV9hbGl2ZSsrOwogCi0gIC8qIEEgc29tZXdoYXQgY3J1ZGUgd29yay1hcm91bmQgZm9yIGEgbGl0dGxlIGdsaXRjaCBpbiB1cGRhdGVfdGltZXIoKSB0aGF0Ci0gICAgIGhhcHBlbnMgaWYgdGhlIGxhc3RjYWxsIHRpbWUgaXMgc2V0IHRvIHRoZSBzYW1lIHRpbWUgd2hlbiB0aGUgaGFuZGxlIGlzCi0gICAgIHJlbW92ZWQgYXMgd2hlbiB0aGUgbmV4dCBoYW5kbGUgaXMgYWRkZWQsIGFzIHRoZW4gdGhlIGNoZWNrIGluCi0gICAgIHVwZGF0ZV90aW1lcigpIHRoYXQgcHJldmVudHMgY2FsbGluZyB0aGUgYXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMgd2l0aAotICAgICB0aGUgc2FtZSB0aW1lciBpbmZvIHdpbGwgbm90IHRyaWdnZXIgYW5kIHRoZW4gdGhlIG5ldyBoYW5kbGUncyB0aW1lb3V0Ci0gICAgIHdpbGwgbm90IGJlIG5vdGlmaWVkIHRvIHRoZSBhcHAuCisgIC8qIEEgc29tZXdoYXQgY3J1ZGUgd29yay1hcm91bmQgZm9yIGEgbGl0dGxlIGdsaXRjaCBpbiBDdXJsX3VwZGF0ZV90aW1lcigpCisgICAgIHRoYXQgaGFwcGVucyBpZiB0aGUgbGFzdGNhbGwgdGltZSBpcyBzZXQgdG8gdGhlIHNhbWUgdGltZSB3aGVuIHRoZSBoYW5kbGUKKyAgICAgaXMgcmVtb3ZlZCBhcyB3aGVuIHRoZSBuZXh0IGhhbmRsZSBpcyBhZGRlZCwgYXMgdGhlbiB0aGUgY2hlY2sgaW4KKyAgICAgQ3VybF91cGRhdGVfdGltZXIoKSB0aGF0IHByZXZlbnRzIGNhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzCisgICAgIHdpdGggdGhlIHNhbWUgdGltZXIgaW5mbyB3aWxsIG5vdCB0cmlnZ2VyIGFuZCB0aGVuIHRoZSBuZXcgaGFuZGxlJ3MKKyAgICAgdGltZW91dCB3aWxsIG5vdCBiZSBub3RpZmllZCB0byB0aGUgYXBwLgogCiAgICAgIFRoZSB3b3JrLWFyb3VuZCBpcyB0aHVzIHNpbXBseSB0byBjbGVhciB0aGUgJ2xhc3RjYWxsJyB2YXJpYWJsZSB0byBmb3JjZQotICAgICB1cGRhdGVfdGltZXIoKSB0byBhbHdheXMgdHJpZ2dlciBhIGNhbGxiYWNrIHRvIHRoZSBhcHAgd2hlbiBhIG5ldyBlYXN5Ci0gICAgIGhhbmRsZSBpcyBhZGRlZCAqLworICAgICBDdXJsX3VwZGF0ZV90aW1lcigpIHRvIGFsd2F5cyB0cmlnZ2VyIGEgY2FsbGJhY2sgdG8gdGhlIGFwcCB3aGVuIGEgbmV3CisgICAgIGVhc3kgaGFuZGxlIGlzIGFkZGVkICovCiAgIG1lbXNldCgmbXVsdGktPnRpbWVyX2xhc3RjYWxsLCAwLCBzaXplb2YobXVsdGktPnRpbWVyX2xhc3RjYWxsKSk7CiAKICAgLyogVGhlIGNsb3N1cmUgaGFuZGxlIG9ubHkgZXZlciBoYXMgZGVmYXVsdCB0aW1lb3V0cyBzZXQuIFRvIGltcHJvdmUgdGhlCkBAIC00NzUsNyArNTE2LDcgQEAKICAgZGF0YS0+c3RhdGUuY29ubl9jYWNoZS0+Y2xvc3VyZV9oYW5kbGUtPnNldC5ub19zaWduYWwgPQogICAgIGRhdGEtPnNldC5ub19zaWduYWw7CiAKLSAgdXBkYXRlX3RpbWVyKG11bHRpKTsKKyAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gQ1VSTE1fT0s7CiB9CiAKQEAgLTUxMCw2ICs1NTEsOCBAQAogICAgIC8qIFN0b3AgaWYgbXVsdGlfZG9uZSgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCisgIGNvbm4tPmRhdGEgPSBkYXRhOyAvKiBlbnN1cmUgdGhlIGNvbm5lY3Rpb24gdXNlcyB0aGlzIHRyYW5zZmVyIG5vdyAqLworCiAgIC8qIFN0b3AgdGhlIHJlc29sdmVyIGFuZCBmcmVlIGl0cyBvd24gcmVzb3VyY2VzIChidXQgbm90IGRuc19lbnRyeSB5ZXQpLiAqLwogICBDdXJsX3Jlc29sdmVyX2tpbGwoY29ubik7CiAKQEAgLTU0NiwxNSArNTg5LDIwIEBACiAKICAgcHJvY2Vzc19wZW5kaW5nX2hhbmRsZXMoZGF0YS0+bXVsdGkpOyAvKiBjb25uZWN0aW9uIC8gbXVsdGlwbGV4ICovCiAKKyAgQ09OTl9MT0NLKGRhdGEpOwogICBkZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CiAgIGlmKENPTk5fSU5VU0UoY29ubikpIHsKICAgICAvKiBTdG9wIGlmIHN0aWxsIHVzZWQuICovCisgICAgLyogY29ubi0+ZGF0YSBtdXN0IG5vdCByZW1haW4gcG9pbnRpbmcgdG8gdGhpcyB0cmFuc2ZlciBzaW5jZSBpdCBpcyBnb2luZworICAgICAgIGF3YXkhIEZpbmQgYW5vdGhlciB0byBvd24gaXQhICovCisgICAgY29ubi0+ZGF0YSA9IGNvbm4tPmVhc3lxLmhlYWQtPnB0cjsKKyAgICBDT05OX1VOTE9DSyhkYXRhKTsKICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkNvbm5lY3Rpb24gc3RpbGwgaW4gdXNlICV6dSwgIgogICAgICAgICAgICAgICAgICAibm8gbW9yZSBtdWx0aV9kb25lIG5vdyFcbiIsCiAgICAgICAgICAgICAgICAgIGNvbm4tPmVhc3lxLnNpemUpKTsKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgIH0KLQorICBjb25uLT5kYXRhID0gTlVMTDsgLyogdGhlIGNvbm5lY3Rpb24gbm93IGhhcyBubyBvd25lciAqLwogICBkYXRhLT5zdGF0ZS5kb25lID0gVFJVRTsgLyogY2FsbGVkIGp1c3Qgbm93ISAqLwogCiAgIGlmKGNvbm4tPmRuc19lbnRyeSkgewpAQCAtNTk3LDcgKzY0NSwxMCBAQAogI2VuZGlmCiAgICAgICkgfHwgY29ubi0+Yml0cy5jbG9zZQogICAgICAgIHx8IChwcmVtYXR1cmUgJiYgIShjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1RSRUFNKSkpIHsKLSAgICBDVVJMY29kZSByZXMyID0gQ3VybF9kaXNjb25uZWN0KGRhdGEsIGNvbm4sIHByZW1hdHVyZSk7CisgICAgQ1VSTGNvZGUgcmVzMjsKKyAgICBjb25uY2xvc2UoY29ubiwgImRpc2Nvbm5lY3RpbmciKTsKKyAgICBDT05OX1VOTE9DSyhkYXRhKTsKKyAgICByZXMyID0gQ3VybF9kaXNjb25uZWN0KGRhdGEsIGNvbm4sIHByZW1hdHVyZSk7CiAKICAgICAvKiBJZiB3ZSBoYWQgYW4gZXJyb3IgYWxyZWFkeSwgbWFrZSBzdXJlIHdlIHJldHVybiB0aGF0IG9uZS4gQnV0CiAgICAgICAgaWYgd2UgZ290IGEgbmV3IGVycm9yLCByZXR1cm4gdGhhdC4gKi8KQEAgLTYxNCw5ICs2NjUsOSBAQAogICAgICAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6CiAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19ob3N0ID8gY29ubi0+Y29ubl90b19ob3N0LmRpc3BuYW1lIDoKICAgICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7Ci0KICAgICAvKiB0aGUgY29ubmVjdGlvbiBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoaXMgdHJhbnNmZXIgKi8KLSAgICBpZihDdXJsX2Nvbm5jYWNoZV9yZXR1cm5fY29ubihjb25uKSkgeworICAgIENPTk5fVU5MT0NLKGRhdGEpOworICAgIGlmKEN1cmxfY29ubmNhY2hlX3JldHVybl9jb25uKGRhdGEsIGNvbm4pKSB7CiAgICAgICAvKiByZW1lbWJlciB0aGUgbW9zdCByZWNlbnRseSB1c2VkIGNvbm5lY3Rpb24gKi8KICAgICAgIGRhdGEtPnN0YXRlLmxhc3Rjb25uZWN0ID0gY29ubjsKICAgICAgIGluZm9mKGRhdGEsICIlc1xuIiwgYnVmZmVyKTsKQEAgLTY3NCwxOSArNzI1LDE0IEBACiAgICAgZWFzeV9vd25zX2Nvbm4gPSBUUlVFOwogICB9CiAKLSAgLyogVGhlIHRpbWVyIG11c3QgYmUgc2h1dCBkb3duIGJlZm9yZSBkYXRhLT5tdWx0aSBpcyBzZXQgdG8gTlVMTCwKLSAgICAgZWxzZSB0aGUgdGltZW5vZGUgd2lsbCByZW1haW4gaW4gdGhlIHNwbGF5IHRyZWUgYWZ0ZXIKLSAgICAgY3VybF9lYXN5X2NsZWFudXAgaXMgY2FsbGVkLiAqLwotICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsKLQogICBpZihkYXRhLT5jb25uKSB7CiAKICAgICAvKiB3ZSBtdXN0IGNhbGwgbXVsdGlfZG9uZSgpIGhlcmUgKGlmIHdlIHN0aWxsIG93biB0aGUgY29ubmVjdGlvbikgc28gdGhhdAogICAgICAgIHdlIGRvbid0IGxlYXZlIGEgaGFsZi1iYWtlZCBvbmUgYXJvdW5kICovCiAgICAgaWYoZWFzeV9vd25zX2Nvbm4pIHsKIAotICAgICAgLyogbXVsdGlfZG9uZSgpIGNsZWFycyB0aGUgY29ubi0+ZGF0YSBmaWVsZCB0byBsb3NlIHRoZSBhc3NvY2lhdGlvbgotICAgICAgICAgYmV0d2VlbiB0aGUgZWFzeSBoYW5kbGUgYW5kIHRoZSBjb25uZWN0aW9uCisgICAgICAvKiBtdWx0aV9kb25lKCkgY2xlYXJzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBlYXN5IGhhbmRsZSBhbmQgdGhlCisgICAgICAgICBjb25uZWN0aW9uLgogCiAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBpZ25vcmVzIHRoZSByZXR1cm4gY29kZSBzaW1wbHkgYmVjYXVzZSB0aGVyZSdzCiAgICAgICAgICBub3RoaW5nIHJlYWxseSB1c2VmdWwgdG8gZG8gd2l0aCBpdCBhbnl3YXkhICovCkBAIC02OTQsNiArNzQwLDExIEBACiAgICAgfQogICB9CiAKKyAgLyogVGhlIHRpbWVyIG11c3QgYmUgc2h1dCBkb3duIGJlZm9yZSBkYXRhLT5tdWx0aSBpcyBzZXQgdG8gTlVMTCwgZWxzZSB0aGUKKyAgICAgdGltZW5vZGUgd2lsbCByZW1haW4gaW4gdGhlIHNwbGF5IHRyZWUgYWZ0ZXIgY3VybF9lYXN5X2NsZWFudXAgaXMKKyAgICAgY2FsbGVkLiBEbyBpdCBhZnRlciBtdWx0aV9kb25lKCkgaW4gY2FzZSB0aGF0IHNldHMgYW5vdGhlciB0aW1lISAqLworICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsKKwogICBpZihkYXRhLT5jb25uZWN0X3F1ZXVlLnB0cikKICAgICAvKiB0aGUgaGFuZGxlIHdhcyBpbiB0aGUgcGVuZGluZyBsaXN0IHdhaXRpbmcgZm9yIGFuIGF2YWlsYWJsZSBjb25uZWN0aW9uLAogICAgICAgIHNvIGdvIGFoZWFkIGFuZCByZW1vdmUgaXQgKi8KQEAgLTcyMywxMCArNzc0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFuaXNoIHdpdGggdGhpcyBoYW5kbGUgKi8KIAogICAvKiBSZW1vdmUgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gYW5kIHRoZSBoYW5kbGUgKi8KLSAgaWYoZGF0YS0+Y29ubikgewotICAgIGRhdGEtPmNvbm4tPmRhdGEgPSBOVUxMOworICBpZihkYXRhLT5jb25uKQogICAgIGRldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKLSAgfQogCiAjaWZkZWYgVVNFX0xJQlBTTAogICAvKiBSZW1vdmUgdGhlIFBTTCBhc3NvY2lhdGlvbi4gKi8KQEAgLTc2NSw3ICs4MTQsNyBAQAogICAgICBXZSBkbyBub3QgdG91Y2ggdGhlIGVhc3kgaGFuZGxlIGhlcmUhICovCiAgIG11bHRpLT5udW1fZWFzeS0tOyAvKiBvbmUgbGVzcyB0byBjYXJlIGFib3V0IG5vdyAqLwogCi0gIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKICAgcmV0dXJuIENVUkxNX09LOwogfQogCkBAIC03OTcsMjUgKzg0NiwzMCBAQAogfQogCiBzdGF0aWMgaW50IHdhaXRjb25uZWN0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCiB7CiAgIGludCBpOwogICBpbnQgcyA9IDA7CiAgIGludCByYyA9IDA7CiAKLSAgaWYoIW51bXNvY2tzKQotICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotCiAjaWZkZWYgVVNFX1NTTAogICBpZihDT05ORUNUX0ZJUlNUU09DS0VUX1BST1hZX1NTTCgpKQotICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKKyAgICByZXR1cm4gQ3VybF9zc2xfZ2V0c29jayhjb25uLCBzb2NrKTsKICNlbmRpZgogCisgIGlmKFNPQ0tTX1NUQVRFKGNvbm4tPmNubmN0LnN0YXRlKSkKKyAgICByZXR1cm4gQ3VybF9TT0NLU19nZXRzb2NrKGNvbm4sIHNvY2ssIEZJUlNUU09DS0VUKTsKKwogICBmb3IoaSA9IDA7IGk8MjsgaSsrKSB7CiAgICAgaWYoY29ubi0+dGVtcHNvY2tbaV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CiAgICAgICBzb2NrW3NdID0gY29ubi0+dGVtcHNvY2tbaV07Ci0gICAgICByYyB8PSBHRVRTT0NLX1dSSVRFU09DSyhzKyspOworICAgICAgcmMgfD0gR0VUU09DS19XUklURVNPQ0socyk7CisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgICAgIGlmKGNvbm4tPnRyYW5zcG9ydCA9PSBUUk5TUFJUX1FVSUMpCisgICAgICAgIC8qIHdoZW4gY29ubmVjdGluZyBRVUlDLCB3ZSB3YW50IHRvIHJlYWQgdGhlIHNvY2tldCB0b28gKi8KKyAgICAgICAgcmMgfD0gR0VUU09DS19SRUFEU09DSyhzKTsKKyNlbmRpZgorICAgICAgcysrOwogICAgIH0KICAgfQogCkBAIC04MjMsMTIgKzg3Nyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgd2FpdHByb3h5Y29ubmVjdF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKQogewotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogCiAgIC8qIHdoZW4gd2UndmUgc2VudCBhIENPTk5FQ1QgdG8gYSBwcm94eSwgd2Ugc2hvdWxkIHJhdGhlciB3YWl0IGZvciB0aGUKQEAgLTg0MCwxOSArODkwLDM3IEBACiB9CiAKIHN0YXRpYyBpbnQgZG9tb3JlX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKICAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5kb21vcmVfZ2V0c29jaykKLSAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+ZG9tb3JlX2dldHNvY2soY29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+ZG9tb3JlX2dldHNvY2soY29ubiwgc29ja3MpOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKIH0KIAotLyogcmV0dXJucyBiaXRtYXBwZWQgZmxhZ3MgZm9yIHRoaXMgaGFuZGxlIGFuZCBpdHMgc29ja2V0cyAqLworc3RhdGljIGludCBkb2luZ19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5kb2luZ19nZXRzb2NrKQorICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5kb2luZ19nZXRzb2NrKGNvbm4sIHNvY2tzKTsKKyAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Cit9CisKK3N0YXRpYyBpbnQgcHJvdG9jb2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCit7CisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvX2dldHNvY2spCisgICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnByb3RvX2dldHNvY2soY29ubiwgc29ja3MpOworICAvKiBCYWNrdXAgZ2V0c29jayBsb2dpYy4gU2luY2UgdGhlcmUgaXMgYSBsaXZlIHNvY2tldCBpbiB1c2UsIHdlIG11c3Qgd2FpdAorICAgICBmb3IgaXQgb3IgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gd2F0Y2hpbmcgd2hlbiB0aGUgbXVsdGlfc29ja2V0IEFQSSBpcworICAgICB1c2VkLiAqLworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICByZXR1cm4gR0VUU09DS19SRUFEU09DSygwKSB8IEdFVFNPQ0tfV1JJVEVTT0NLKDApOworfQorCisvKiByZXR1cm5zIGJpdG1hcHBlZCBmbGFncyBmb3IgdGhpcyBoYW5kbGUgYW5kIGl0cyBzb2NrZXRzLiBUaGUgJ3NvY2tzW10nCisgICBhcnJheSBjb250YWlucyBNQVhfU09DS1NQRVJFQVNZSEFORExFIGVudHJpZXMuICovCiBzdGF0aWMgaW50IG11bHRpX2dldHNvY2soc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAvKiBUaGUgbm8gY29ubmVjdGlvbiBjYXNlIGNhbiBoYXBwZW4gd2hlbiB0aGlzIGlzIGNhbGxlZCBmcm9tCiAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpID0+IHNpbmdsZXNvY2tldCgpID0+IG11bHRpX2dldHNvY2soKS4KQEAgLTg4NCwzMCArOTUyLDMwIEBACiAgICAgcmV0dXJuIDA7CiAKICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUkVTT0xWRToKLSAgICByZXR1cm4gQ3VybF9yZXNvbHZfZ2V0c29jayhkYXRhLT5jb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBDdXJsX3Jlc29sdl9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX1BST1RPQ09OTkVDVDoKICAgY2FzZSBDVVJMTV9TVEFURV9TRU5EUFJPVE9DT05ORUNUOgotICAgIHJldHVybiBDdXJsX3Byb3RvY29sX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gcHJvdG9jb2xfZ2V0c29jayhkYXRhLT5jb25uLCBzb2Nrcyk7CiAKICAgY2FzZSBDVVJMTV9TVEFURV9ETzoKICAgY2FzZSBDVVJMTV9TVEFURV9ET0lORzoKLSAgICByZXR1cm4gQ3VybF9kb2luZ19nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIGRvaW5nX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfV0FJVFBST1hZQ09OTkVDVDoKLSAgICByZXR1cm4gd2FpdHByb3h5Y29ubmVjdF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIHdhaXRwcm94eWNvbm5lY3RfZ2V0c29jayhkYXRhLT5jb25uLCBzb2Nrcyk7CiAKICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUQ09OTkVDVDoKLSAgICByZXR1cm4gd2FpdGNvbm5lY3RfZ2V0c29jayhkYXRhLT5jb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiB3YWl0Y29ubmVjdF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX0RPX01PUkU6Ci0gICAgcmV0dXJuIGRvbW9yZV9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIGRvbW9yZV9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX0RPX0RPTkU6IC8qIHNpbmNlIGlzIHNldCBhZnRlciBETyBpcyBjb21wbGV0ZWQsIHdlIHN3aXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdhaXRpbmcgZm9yIHRoZSBzYW1lIGFzIHRoZSAqUEVSRk9STQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcyAqLwogICBjYXNlIENVUkxNX1NUQVRFX1BFUkZPUk06Ci0gICAgcmV0dXJuIEN1cmxfc2luZ2xlX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gQ3VybF9zaW5nbGVfZ2V0c29jayhkYXRhLT5jb25uLCBzb2Nrcyk7CiAgIH0KIAogfQpAQCAtOTMzLDcgKzEwMDEsNyBAQAogCiAgIGRhdGEgPSBtdWx0aS0+ZWFzeXA7CiAgIHdoaWxlKGRhdGEpIHsKLSAgICBpbnQgYml0bWFwID0gbXVsdGlfZ2V0c29jayhkYXRhLCBzb2NrYnVuY2gsIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUpOworICAgIGludCBiaXRtYXAgPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tidW5jaCk7CiAKICAgICBmb3IoaSA9IDA7IGk8IE1BWF9TT0NLU1BFUkVBU1lIQU5ETEU7IGkrKykgewogICAgICAgY3VybF9zb2NrZXRfdCBzID0gQ1VSTF9TT0NLRVRfQkFEOwpAQCAtOTYzLDEyICsxMDMxLDEzIEBACiAKICNkZWZpbmUgTlVNX1BPTExTX09OX1NUQUNLIDEwCiAKLUNVUkxNY29kZSBDdXJsX211bHRpX3dhaXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF93YWl0ZmQgZXh0cmFfZmRzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBleHRyYV9uZmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dF9tcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmdvdHNvY2tldCkgLyogaWYgYW55IHNvY2tldCB3YXMgY2hlY2tlZCAqLworc3RhdGljIENVUkxNY29kZSBDdXJsX211bHRpX3dhaXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfd2FpdGZkIGV4dHJhX2Zkc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dF9tcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleHRyYXdhaXQsIC8qIHdoZW4gbm8gc29ja2V0LCB3YWl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV93YWtldXApCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGE7CiAgIGN1cmxfc29ja2V0X3Qgc29ja2J1bmNoW01BWF9TT0NLU1BFUkVBU1lIQU5ETEVdOwpAQCAtOTgyLDE5ICsxMDUxLDE5IEBACiAgIHN0cnVjdCBwb2xsZmQgYV9mZXdfb25fc3RhY2tbTlVNX1BPTExTX09OX1NUQUNLXTsKICAgc3RydWN0IHBvbGxmZCAqdWZkcyA9ICZhX2Zld19vbl9zdGFja1swXTsKIAotICBpZihnb3Rzb2NrZXQpCi0gICAgKmdvdHNvY2tldCA9IEZBTFNFOwotCiAgIGlmKCFHT09EX01VTFRJX0hBTkRMRShtdWx0aSkpCiAgICAgcmV0dXJuIENVUkxNX0JBRF9IQU5ETEU7CiAKICAgaWYobXVsdGktPmluX2NhbGxiYWNrKQogICAgIHJldHVybiBDVVJMTV9SRUNVUlNJVkVfQVBJX0NBTEw7CiAKKyAgaWYodGltZW91dF9tcyA8IDApCisgICAgcmV0dXJuIENVUkxNX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKwogICAvKiBDb3VudCB1cCBob3cgbWFueSBmZHMgd2UgaGF2ZSBmcm9tIHRoZSBtdWx0aSBoYW5kbGUgKi8KICAgZGF0YSA9IG11bHRpLT5lYXN5cDsKICAgd2hpbGUoZGF0YSkgewotICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoLCBNQVhfU09DS1NQRVJFQVNZSEFORExFKTsKKyAgICBiaXRtYXAgPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tidW5jaCk7CiAKICAgICBmb3IoaSA9IDA7IGk8IE1BWF9TT0NLU1BFUkVBU1lIQU5ETEU7IGkrKykgewogICAgICAgY3VybF9zb2NrZXRfdCBzID0gQ1VSTF9TT0NLRVRfQkFEOwpAQCAtMTAyNSw2ICsxMDk0LDEyIEBACiAgIGN1cmxmZHMgPSBuZmRzOyAvKiBudW1iZXIgb2YgaW50ZXJuYWwgZmlsZSBkZXNjcmlwdG9ycyAqLwogICBuZmRzICs9IGV4dHJhX25mZHM7IC8qIGFkZCB0aGUgZXh0ZXJuYWxseSBwcm92aWRlZCBvbmVzICovCiAKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgIGlmKHVzZV93YWtldXAgJiYgbXVsdGktPndha2V1cF9wYWlyWzBdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICsrbmZkczsKKyAgfQorI2VuZGlmCisKICAgaWYobmZkcyA+IE5VTV9QT0xMU19PTl9TVEFDSykgewogICAgIC8qICduZmRzJyBpcyBhIDMyIGJpdCB2YWx1ZSBhbmQgJ3N0cnVjdCBwb2xsZmQnIGlzIHR5cGljYWxseSA4IGJ5dGVzCiAgICAgICAgYmlnLCBzbyBhdCAyXjI5IHNvY2tldHMgdGhpcyB2YWx1ZSBtaWdodCB3cmFwLiBXaGVuIGEgcHJvY2VzcyBnZXRzCkBAIC0xMDQ0LDcgKzExMTksNyBAQAogICAgIC8qIEFkZCB0aGUgY3VybCBoYW5kbGVzIHRvIG91ciBwb2xsZmRzIGZpcnN0ICovCiAgICAgZGF0YSA9IG11bHRpLT5lYXN5cDsKICAgICB3aGlsZShkYXRhKSB7Ci0gICAgICBiaXRtYXAgPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tidW5jaCwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRSk7CisgICAgICBiaXRtYXAgPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tidW5jaCk7CiAKICAgICAgIGZvcihpID0gMDsgaTwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRTsgaSsrKSB7CiAgICAgICAgIGN1cmxfc29ja2V0X3QgcyA9IENVUkxfU09DS0VUX0JBRDsKQEAgLTEwODMsNiArMTE1OCwxNCBAQAogICAgICsrbmZkczsKICAgfQogCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICBpZih1c2Vfd2FrZXVwICYmIG11bHRpLT53YWtldXBfcGFpclswXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICB1ZmRzW25mZHNdLmZkID0gbXVsdGktPndha2V1cF9wYWlyWzBdOworICAgIHVmZHNbbmZkc10uZXZlbnRzID0gUE9MTElOOworICAgICsrbmZkczsKKyAgfQorI2VuZGlmCisKICAgaWYobmZkcykgewogICAgIGludCBwb2xscmM7CiAgICAgLyogd2FpdC4uLiAqLwpAQCAtMTEwNiw2ICsxMTg5LDI5IEBACiAKICAgICAgICAgZXh0cmFfZmRzW2ldLnJldmVudHMgPSBtYXNrOwogICAgICAgfQorCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICAgICAgaWYodXNlX3dha2V1cCAmJiBtdWx0aS0+d2FrZXVwX3BhaXJbMF0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgIGlmKHVmZHNbY3VybGZkcyArIGV4dHJhX25mZHNdLnJldmVudHMgJiBQT0xMSU4pIHsKKyAgICAgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICAgICAgd2hpbGUoMSkgeworICAgICAgICAgICAgLyogdGhlIHJlYWRpbmcgc29ja2V0IGlzIG5vbi1ibG9ja2luZywgdHJ5IHRvIHJlYWQKKyAgICAgICAgICAgICAgIGRhdGEgZnJvbSBpdCB1bnRpbCBpdCByZWNlaXZlcyBhbiBlcnJvciAoZXhjZXB0IEVJTlRSKS4KKyAgICAgICAgICAgICAgIEluIG5vcm1hbCBjYXNlcyBpdCB3aWxsIGdldCBFQUdBSU4gb3IgRVdPVUxEQkxPQ0sKKyAgICAgICAgICAgICAgIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhLCBicmVha2luZyB0aGUgbG9vcC4gKi8KKyAgICAgICAgICAgIGlmKHNyZWFkKG11bHRpLT53YWtldXBfcGFpclswXSwgYnVmLCBzaXplb2YoYnVmKSkgPD0gMCkgeworI2lmbmRlZiBVU0VfV0lOU09DSworICAgICAgICAgICAgICBpZihFSU5UUiA9PSBTT0NLRVJSTk8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGRvIG5vdCBjb3VudCB0aGUgd2FrZXVwIHNvY2tldCBpbnRvIHRoZSByZXR1cm5lZCB2YWx1ZSAqLworICAgICAgICAgIHJldGNvZGUtLTsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmCiAgICAgfQogICB9CiAKQEAgLTExMTMsOSArMTIxOSwyMyBAQAogICAgIGZyZWUodWZkcyk7CiAgIGlmKHJldCkKICAgICAqcmV0ID0gcmV0Y29kZTsKLSAgaWYoZ290c29ja2V0ICYmIChleHRyYV9mZHMgfHwgY3VybGZkcykpCisgIGlmKCFleHRyYXdhaXQgfHwgbmZkcykKICAgICAvKiBpZiBhbnkgc29ja2V0IHdhcyBjaGVja2VkICovCi0gICAgKmdvdHNvY2tldCA9IFRSVUU7CisgICAgOworICBlbHNlIHsKKyAgICBsb25nIHNsZWVwX21zID0gMDsKKworICAgIC8qIEF2b2lkIGJ1c3ktbG9vcGluZyB3aGVuIHRoZXJlJ3Mgbm90aGluZyBwYXJ0aWN1bGFyIHRvIHdhaXQgZm9yICovCisgICAgaWYoIWN1cmxfbXVsdGlfdGltZW91dChtdWx0aSwgJnNsZWVwX21zKSAmJiBzbGVlcF9tcykgeworICAgICAgaWYoc2xlZXBfbXMgPiB0aW1lb3V0X21zKQorICAgICAgICBzbGVlcF9tcyA9IHRpbWVvdXRfbXM7CisgICAgICAvKiB3aGVuIHRoZXJlIGFyZSBubyBlYXN5IGhhbmRsZXMgaW4gdGhlIG11bHRpLCB0aGlzIGhvbGRzIGEgLTEKKyAgICAgICAgIHRpbWVvdXQgKi8KKyAgICAgIGVsc2UgaWYoKHNsZWVwX21zIDwgMCkgJiYgZXh0cmF3YWl0KQorICAgICAgICBzbGVlcF9tcyA9IHRpbWVvdXRfbXM7CisgICAgICBDdXJsX3dhaXRfbXMoKGludClzbGVlcF9tcyk7CisgICAgfQorICB9CiAKICAgcmV0dXJuIENVUkxNX09LOwogfQpAQCAtMTEyNiw3ICsxMjQ2LDY1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCkKIHsKLSAgcmV0dXJuIEN1cmxfbXVsdGlfd2FpdChtdWx0aSwgZXh0cmFfZmRzLCBleHRyYV9uZmRzLCB0aW1lb3V0X21zLCByZXQsIE5VTEwpOworICByZXR1cm4gQ3VybF9tdWx0aV93YWl0KG11bHRpLCBleHRyYV9mZHMsIGV4dHJhX25mZHMsIHRpbWVvdXRfbXMsIHJldCwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOworfQorCitDVVJMTWNvZGUgY3VybF9tdWx0aV9wb2xsKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfd2FpdGZkIGV4dHJhX2Zkc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFfbmZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXRfbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmV0KQoreworICByZXR1cm4gQ3VybF9tdWx0aV93YWl0KG11bHRpLCBleHRyYV9mZHMsIGV4dHJhX25mZHMsIHRpbWVvdXRfbXMsIHJldCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKK30KKworQ1VSTE1jb2RlIGN1cmxfbXVsdGlfd2FrZXVwKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3sKKyAgLyogdGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLAorICAgICBpdCBoYXMgdG8gYmUgY2FyZWZ1bCBvbmx5IHRvIGFjY2VzcyBwYXJ0cyBvZiB0aGUKKyAgICAgQ3VybF9tdWx0aSBzdHJ1Y3QgdGhhdCBhcmUgY29uc3RhbnQgKi8KKworICAvKiBHT09EX01VTFRJX0hBTkRMRSBjYW4gYmUgc2FmZWx5IGNhbGxlZCAqLworICBpZighR09PRF9NVUxUSV9IQU5ETEUobXVsdGkpKQorICAgIHJldHVybiBDVVJMTV9CQURfSEFORExFOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICAvKiB0aGUgd2FrZXVwX3BhaXIgdmFyaWFibGUgaXMgb25seSB3cml0dGVuIGR1cmluZyBpbml0IGFuZCBjbGVhbnVwLAorICAgICBtYWtpbmcgaXQgc2FmZSB0byBhY2Nlc3MgZnJvbSBhbm90aGVyIHRocmVhZCBhZnRlciB0aGUgaW5pdCBwYXJ0CisgICAgIGFuZCBiZWZvcmUgY2xlYW51cCAqLworICBpZihtdWx0aS0+d2FrZXVwX3BhaXJbMV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgY2hhciBidWZbMV07CisgICAgYnVmWzBdID0gMTsKKyAgICB3aGlsZSgxKSB7CisgICAgICAvKiBzd3JpdGUoKSBpcyBub3QgdGhyZWFkLXNhZmUgaW4gZ2VuZXJhbCwgYmVjYXVzZSBjb25jdXJyZW50IGNhbGxzCisgICAgICAgICBjYW4gaGF2ZSB0aGVpciBtZXNzYWdlcyBpbnRlcmxlYXZlZCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgY29udGVudAorICAgICAgICAgb2YgdGhlIG1lc3NhZ2VzIGRvZXMgbm90IG1hdHRlciwgd2hpY2ggbWFrZXMgaXQgb2sgdG8gY2FsbC4KKworICAgICAgICAgVGhlIHdyaXRlIHNvY2tldCBpcyBzZXQgdG8gbm9uLWJsb2NraW5nLCB0aGlzIHdheSB0aGlzIGZ1bmN0aW9uCisgICAgICAgICBjYW5ub3QgYmxvY2ssIG1ha2luZyBpdCBzYWZlIHRvIGNhbGwgZXZlbiBmcm9tIHRoZSBzYW1lIHRocmVhZAorICAgICAgICAgdGhhdCB3aWxsIGNhbGwgQ3VybF9tdWx0aV93YWl0KCkuIElmIHN3cml0ZSgpIHJldHVybnMgdGhhdCBpdAorICAgICAgICAgd291bGQgYmxvY2ssIGl0J3MgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdAorICAgICAgICAgcHJldmlvdXMgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIHdha2UgdXAgdGhlIHBvbGwoKS4gKi8KKyAgICAgIGlmKHN3cml0ZShtdWx0aS0+d2FrZXVwX3BhaXJbMV0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCkgeworICAgICAgICBpbnQgZXJyID0gU09DS0VSUk5POworICAgICAgICBpbnQgcmV0dXJuX3N1Y2Nlc3M7CisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgICAgICAgcmV0dXJuX3N1Y2Nlc3MgPSBXU0FFV09VTERCTE9DSyA9PSBlcnI7CisjZWxzZQorICAgICAgICBpZihFSU5UUiA9PSBlcnIpCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybl9zdWNjZXNzID0gRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnI7CisjZW5kaWYKKyAgICAgICAgaWYoIXJldHVybl9zdWNjZXNzKQorICAgICAgICAgIHJldHVybiBDVVJMTV9XQUtFVVBfRkFJTFVSRTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDVVJMTV9PSzsKKyAgICB9CisgIH0KKyNlbmRpZgorICByZXR1cm4gQ1VSTE1fV0FLRVVQX0ZBSUxVUkU7CiB9CiAKIC8qCkBAIC0xMTg5LDYgKzEzNjcsNyBAQAogCiAgIERFQlVHQVNTRVJUKGNvbm4pOwogICBERUJVR0FTU0VSVChjb25uLT5oYW5kbGVyKTsKKyAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSA9PSBkYXRhKTsKIAogICBpZihjb25uLT5oYW5kbGVyLT5kb19pdCkgewogICAgIC8qIGdlbmVyaWMgcHJvdG9jb2wtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlciBzZXQgaW4gY3VybF9jb25uZWN0KCkgKi8KQEAgLTEyMjYsNiArMTQwNSwxMDkgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIFdlIGFyZSBkb2luZyBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW5nIGFuZCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZAorICogb3ZlciBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gcGhhc2UgaXMgZG9uZSBvbgorICogcHJvdG9jb2wgbGF5ZXIuCisgKi8KKworc3RhdGljIENVUkxjb2RlIHByb3RvY29sX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKSB7CisgICAgKmRvbmUgPSBGQUxTRTsKKyAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKGNvbm4sIGRvbmUpOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IFRSVUU7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdlIGFyZSBET0lORyB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZCBvdmVyIGZyb20gdGhlIG11bHRpIGludGVyZmFjZQorICogdW50aWwgdGhlIERPSU5HIHBoYXNlIGlzIGRvbmUgb24gcHJvdG9jb2wgbGF5ZXIuCisgKi8KKworc3RhdGljIENVUkxjb2RlIHByb3RvY29sX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5kb2luZykgeworICAgICpkb25lID0gRkFMU0U7CisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+ZG9pbmcoY29ubiwgZG9uZSk7CisgIH0KKyAgZWxzZQorICAgICpkb25lID0gVFJVRTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV2UgaGF2ZSBkaXNjb3ZlcmVkIHRoYXQgdGhlIFRDUCBjb25uZWN0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWwsIHdlIGNhbiBub3cKKyAqIHByb2NlZWQgd2l0aCBzb21lIGFjdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBDVVJMY29kZSBwcm90b2NvbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnByb3RvY29sX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHQVNTRVJUKGNvbm4pOworICBERUJVR0FTU0VSVChwcm90b2NvbF9kb25lKTsKKworICAqcHJvdG9jb2xfZG9uZSA9IEZBTFNFOworCisgIGlmKGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF0gJiYgY29ubi0+Yml0cy5wcm90b2Nvbm5zdGFydCkgeworICAgIC8qIFdlIGFscmVhZHkgYXJlIGNvbm5lY3RlZCwgZ2V0IGJhY2suIFRoaXMgbWF5IGhhcHBlbiB3aGVuIHRoZSBjb25uZWN0CisgICAgICAgd29ya2VkIGZpbmUgaW4gdGhlIGZpcnN0IGNhbGwsIGxpa2Ugd2hlbiB3ZSBjb25uZWN0IHRvIGEgbG9jYWwgc2VydmVyCisgICAgICAgb3IgcHJveHkuIE5vdGUgdGhhdCB3ZSBkb24ndCBrbm93IGlmIHRoZSBwcm90b2NvbCBpcyBhY3R1YWxseSBkb25lLgorCisgICAgICAgVW5sZXNzIHRoaXMgcHJvdG9jb2wgZG9lc24ndCBoYXZlIGFueSBwcm90b2NvbC1jb25uZWN0IGNhbGxiYWNrLCBhcworICAgICAgIHRoZW4gd2Uga25vdyB3ZSdyZSBkb25lLiAqLworICAgIGlmKCFjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKQorICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOworCisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoIWNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKKworICAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmKENPTk5FQ1RfRklSU1RTT0NLRVRfUFJPWFlfU1NMKCkpCisgICAgICAvKiB3YWl0IGZvciBIVFRQUyBwcm94eSBTU0wgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUgKi8KKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmIGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgQ3VybF9jb25uZWN0X29uZ29pbmcoY29ubikpCisgICAgICAvKiB3aGVuIHVzaW5nIGFuIEhUVFAgdHVubmVsIHByb3h5LCBhd2FpdCBjb21wbGV0ZSB0dW5uZWwgZXN0YWJsaXNobWVudAorICAgICAgICAgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4gUmV0dXJuIENVUkxFX09LIHNvIHdlJ2xsIGJlIGNhbGxlZCBhZ2FpbiAqLworICAgICAgcmV0dXJuIENVUkxFX09LOworCisgICAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdCkgeworICAgICAgLyogaXMgdGhlcmUgYSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0KCkgcHJvY2VkdXJlPyAqLworCisgICAgICAvKiBDYWxsIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0IGZ1bmN0aW9uICovCisgICAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5jb25uZWN0X2l0KGNvbm4sIHByb3RvY29sX2RvbmUpOworICAgIH0KKyAgICBlbHNlCisgICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CisKKyAgICAvKiBpdCBoYXMgc3RhcnRlZCwgcG9zc2libHkgZXZlbiBjb21wbGV0ZWQgYnV0IHRoYXQga25vd2xlZGdlIGlzbid0IHN0b3JlZAorICAgICAgIGluIHRoaXMgYml0ISAqLworICAgIGlmKCFyZXN1bHQpCisgICAgICBjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0ID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7IC8qIHBhc3MgYmFjayBzdGF0dXMgKi8KK30KKworCiBzdGF0aWMgQ1VSTE1jb2RlIG11bHRpX3J1bnNpbmdsZShzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKQEAgLTEyMzMsNyArMTUxNSw3IEBACiAgIHN0cnVjdCBDdXJsX21lc3NhZ2UgKm1zZyA9IE5VTEw7CiAgIGJvb2wgY29ubmVjdGVkOwogICBib29sIGFzeW5jOwotICBib29sIHByb3RvY29sX2Nvbm5lY3QgPSBGQUxTRTsKKyAgYm9vbCBwcm90b2NvbF9jb25uZWN0ZWQgPSBGQUxTRTsKICAgYm9vbCBkb3BoYXNlX2RvbmUgPSBGQUxTRTsKICAgYm9vbCBkb25lID0gRkFMU0U7CiAgIENVUkxNY29kZSByYzsKQEAgLTEyNTIsNiArMTUzNCw5IEBACiAgICAgYm9vbCBzdHJlYW1fZXJyb3IgPSBGQUxTRTsKICAgICByYyA9IENVUkxNX09LOwogCisgICAgREVCVUdBU1NFUlQoKGRhdGEtPm1zdGF0ZSA8PSBDVVJMTV9TVEFURV9DT05ORUNUKSB8fAorICAgICAgICAgICAgICAgIChkYXRhLT5tc3RhdGUgPj0gQ1VSTE1fU1RBVEVfRE9ORSkgfHwKKyAgICAgICAgICAgICAgICBkYXRhLT5jb25uKTsKICAgICBpZighZGF0YS0+Y29ubiAmJgogICAgICAgIGRhdGEtPm1zdGF0ZSA+IENVUkxNX1NUQVRFX0NPTk5FQ1QgJiYKICAgICAgICBkYXRhLT5tc3RhdGUgPCBDVVJMTV9TVEFURV9ET05FKSB7CkBAIC0xMzQ5LDcgKzE2MzQsNyBAQAogICAgICAgaWYoZGF0YS0+c2V0LmNvbm5lY3R0aW1lb3V0KQogICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCBkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQsIEVYUElSRV9DT05ORUNUVElNRU9VVCk7CiAKLSAgICAgIHJlc3VsdCA9IEN1cmxfY29ubmVjdChkYXRhLCAmYXN5bmMsICZwcm90b2NvbF9jb25uZWN0KTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfY29ubmVjdChkYXRhLCAmYXN5bmMsICZwcm90b2NvbF9jb25uZWN0ZWQpOwogICAgICAgaWYoQ1VSTEVfTk9fQ09OTkVDVElPTl9BVkFJTEFCTEUgPT0gcmVzdWx0KSB7CiAgICAgICAgIC8qIFRoZXJlIHdhcyBubyBjb25uZWN0aW9uIGF2YWlsYWJsZS4gV2Ugd2lsbCBnbyB0byB0aGUgcGVuZGluZwogICAgICAgICAgICBzdGF0ZSBhbmQgd2FpdCBmb3IgYW4gYXZhaWxhYmxlIGNvbm5lY3Rpb24uICovCkBAIC0xMzc3LDcgKzE2NjIsNyBAQAogICAgICAgICAgICAgIFdBSVRETyBvciBETyEgKi8KICAgICAgICAgICByYyA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKIAotICAgICAgICAgIGlmKHByb3RvY29sX2Nvbm5lY3QpCisgICAgICAgICAgaWYocHJvdG9jb2xfY29ubmVjdGVkKQogICAgICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9ETyk7CiAgICAgICAgICAgZWxzZSB7CiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCkBAIC0xNDMyLDcgKzE3MTcsNyBAQAogICAgICAgaWYoZG5zKSB7CiAgICAgICAgIC8qIFBlcmZvcm0gdGhlIG5leHQgc3RlcCBpbiB0aGUgY29ubmVjdGlvbiBwaGFzZSwgYW5kIHRoZW4gbW92ZSBvbgogICAgICAgICAgICB0byB0aGUgV0FJVENPTk5FQ1Qgc3RhdGUgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9vbmNlX3Jlc29sdmVkKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0KTsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9vbmNlX3Jlc29sdmVkKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0ZWQpOwogCiAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAvKiBpZiBDdXJsX29uY2VfcmVzb2x2ZWQoKSByZXR1cm5zIGZhaWx1cmUsIHRoZSBjb25uZWN0aW9uIHN0cnVjdApAQCAtMTQ0MSw3ICsxNzI2LDcgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgLyogY2FsbCBhZ2FpbiBwbGVhc2Ugc28gdGhhdCB3ZSBnZXQgdGhlIG5leHQgc29ja2V0IHNldHVwICovCiAgICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07Ci0gICAgICAgICAgaWYocHJvdG9jb2xfY29ubmVjdCkKKyAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgICBlbHNlIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKQEAgLTE0NjYsNyArMTc1MSw3IEBACiAgICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUOgogICAgICAgLyogdGhpcyBpcyBIVFRQLXNwZWNpZmljLCBidXQgc2VuZGluZyBDT05ORUNUIHRvIGEgcHJveHkgaXMgSFRUUC4uLiAqLwogICAgICAgREVCVUdBU1NFUlQoZGF0YS0+Y29ubik7Ci0gICAgICByZXN1bHQgPSBDdXJsX2h0dHBfY29ubmVjdChkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdCk7CisgICAgICByZXN1bHQgPSBDdXJsX2h0dHBfY29ubmVjdChkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdGVkKTsKIAogICAgICAgaWYoZGF0YS0+Y29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCkgewogICAgICAgICByYyA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKQEAgLTE1MTcsOCArMTgwMiw4IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfU0VORFBST1RPQ09OTkVDVDoKLSAgICAgIHJlc3VsdCA9IEN1cmxfcHJvdG9jb2xfY29ubmVjdChkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdCk7Ci0gICAgICBpZighcmVzdWx0ICYmICFwcm90b2NvbF9jb25uZWN0KQorICAgICAgcmVzdWx0ID0gcHJvdG9jb2xfY29ubmVjdChkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdGVkKTsKKyAgICAgIGlmKCFyZXN1bHQgJiYgIXByb3RvY29sX2Nvbm5lY3RlZCkKICAgICAgICAgLyogc3dpdGNoIHRvIHdhaXRpbmcgc3RhdGUgKi8KICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9QUk9UT0NPTk5FQ1QpOwogICAgICAgZWxzZSBpZighcmVzdWx0KSB7CkBAIC0xNTM2LDggKzE4MjEsOCBAQAogCiAgICAgY2FzZSBDVVJMTV9TVEFURV9QUk9UT0NPTk5FQ1Q6CiAgICAgICAvKiBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0IHBoYXNlICovCi0gICAgICByZXN1bHQgPSBDdXJsX3Byb3RvY29sX2Nvbm5lY3RpbmcoZGF0YS0+Y29ubiwgJnByb3RvY29sX2Nvbm5lY3QpOwotICAgICAgaWYoIXJlc3VsdCAmJiBwcm90b2NvbF9jb25uZWN0KSB7CisgICAgICByZXN1bHQgPSBwcm90b2NvbF9jb25uZWN0aW5nKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0ZWQpOworICAgICAgaWYoIXJlc3VsdCAmJiBwcm90b2NvbF9jb25uZWN0ZWQpIHsKICAgICAgICAgLyogYWZ0ZXIgdGhlIGNvbm5lY3QgaGFzIGNvbXBsZXRlZCwgZ28gV0FJVERPIG9yIERPICovCiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfRE8pOwogICAgICAgICByYyA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKQEAgLTE2NTksOCArMTk0NCw3IEBACiAgICAgY2FzZSBDVVJMTV9TVEFURV9ET0lORzoKICAgICAgIC8qIHdlIGNvbnRpbnVlIERPSU5HIHVudGlsIHRoZSBETyBwaGFzZSBpcyBjb21wbGV0ZSAqLwogICAgICAgREVCVUdBU1NFUlQoZGF0YS0+Y29ubik7Ci0gICAgICByZXN1bHQgPSBDdXJsX3Byb3RvY29sX2RvaW5nKGRhdGEtPmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3BoYXNlX2RvbmUpOworICAgICAgcmVzdWx0ID0gcHJvdG9jb2xfZG9pbmcoZGF0YS0+Y29ubiwgJmRvcGhhc2VfZG9uZSk7CiAgICAgICBpZighcmVzdWx0KSB7CiAgICAgICAgIGlmKGRvcGhhc2VfZG9uZSkgewogICAgICAgICAgIC8qIGFmdGVyIERPLCBnbyBET19ET05FIG9yIERPX01PUkUgKi8KQEAgLTE5MTEsOCArMjE5NSwxMyBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQotICAgICAgZWxzZSBpZihjb21lYmFjaykKLSAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICBlbHNlIGlmKGNvbWViYWNrKSB7CisgICAgICAgIC8qIFRoaXMgYXZvaWRzIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSBzbyB0aGF0IGEgdmVyeSBmYXN0IHRyYW5zZmVyCisgICAgICAgICAgIHdvbid0IGdldCBzdHVjayBvbiB0aGlzIHRyYW5zZmVyIGF0IHRoZSBleHBlbnNlIG9mIG90aGVyIGNvbmN1cnJlbnQKKyAgICAgICAgICAgdHJhbnNmZXJzICovCisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKKyAgICAgICAgcmMgPSBDVVJMTV9PSzsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTk4OCwxMyArMjI3NywxNSBAQAogICAgICAgICAgIGlmKHN0cmVhbV9lcnJvcikgewogICAgICAgICAgICAgLyogRG9uJ3QgYXR0ZW1wdCB0byBzZW5kIGRhdGEgb3ZlciBhIGNvbm5lY3Rpb24gdGhhdCB0aW1lZCBvdXQgKi8KICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uID0gcmVzdWx0ID09IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgcHJvcGVybHkgKi8KLSAgICAgICAgICAgIEN1cmxfZGlzY29ubmVjdChkYXRhLCBkYXRhLT5jb25uLCBkZWFkX2Nvbm5lY3Rpb24pOworICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gZGF0YS0+Y29ubjsKIAogICAgICAgICAgICAgLyogVGhpcyBpcyB3aGVyZSB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgY29ubiBwb2ludGVyIGlzIHJlc2V0LgogICAgICAgICAgICAgICAgV2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIGluIGV2ZXJ5IGNhc2UgYmxvY2sgYWJvdmUgd2hlcmUgYQogICAgICAgICAgICAgICAgZmFpbHVyZSBpcyBkZXRlY3RlZCAqLwogICAgICAgICAgICAgZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOworCisgICAgICAgICAgICAvKiBkaXNjb25uZWN0IHByb3Blcmx5ICovCisgICAgICAgICAgICBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgZGVhZF9jb25uZWN0aW9uKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihkYXRhLT5tc3RhdGUgPT0gQ1VSTE1fU1RBVEVfQ09OTkVDVCkgewpAQCAtMjA5Myw3ICsyMzg0LDcgQEAKICAgKnJ1bm5pbmdfaGFuZGxlcyA9IG11bHRpLT5udW1fYWxpdmU7CiAKICAgaWYoQ1VSTE1fT0sgPj0gcmV0dXJuY29kZSkKLSAgICB1cGRhdGVfdGltZXIobXVsdGkpOworICAgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKIAogICByZXR1cm4gcmV0dXJuY29kZTsKIH0KQEAgLTIxNDUsNiArMjQzNiwxMSBAQAogCiAgICAgQ3VybF9oYXNoX2Rlc3Ryb3koJm11bHRpLT5ob3N0Y2FjaGUpOwogICAgIEN1cmxfcHNsX2Rlc3Ryb3koJm11bHRpLT5wc2wpOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMF0pOworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMV0pOworI2VuZGlmCiAgICAgZnJlZShtdWx0aSk7CiAKICAgICByZXR1cm4gQ1VSTE1fT0s7CkBAIC0yMjEwLDcgKzI1MDYsNyBAQAogCiAgIC8qIEZpbGwgaW4gdGhlICdjdXJyZW50JyBzdHJ1Y3Qgd2l0aCB0aGUgc3RhdGUgYXMgaXQgaXMgbm93OiB3aGF0IHNvY2tldHMgdG8KICAgICAgc3VwZXJ2aXNlIGFuZCBmb3Igd2hhdCBhY3Rpb25zICovCi0gIGN1cnJhY3Rpb24gPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tzLCBNQVhfU09DS1NQRVJFQVNZSEFORExFKTsKKyAgY3VycmFjdGlvbiA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja3MpOwogCiAgIC8qIFdlIGhhdmUgMCAuLiBOIHNvY2tldHMgYWxyZWFkeSBhbmQgd2UgZ2V0IHRvIGtub3cgYWJvdXQgdGhlIDAgLi4gTQogICAgICBzb2NrZXRzIHdlIHNob3VsZCBoYXZlIGZyb20gbm93IG9uLiBEZXRlY3QgdGhlIGRpZmZlcmVuY2VzLCByZW1vdmUgbm8KQEAgLTIyMzgsMTQgKzI1MzQsMTQgQEAKICAgICBhY3Rpb25zW2ldID0gYWN0aW9uOwogICAgIGlmKGVudHJ5KSB7CiAgICAgICAvKiBjaGVjayBpZiBuZXcgZm9yIHRoaXMgdHJhbnNmZXIgKi8KLSAgICAgIGZvcihpID0gMDsgaTwgZGF0YS0+bnVtc29ja3M7IGkrKykgewotICAgICAgICBpZihzID09IGRhdGEtPnNvY2tldHNbaV0pIHsKLSAgICAgICAgICBwcmV2YWN0aW9uID0gZGF0YS0+YWN0aW9uc1tpXTsKKyAgICAgIGludCBqOworICAgICAgZm9yKGogPSAwOyBqPCBkYXRhLT5udW1zb2NrczsgaisrKSB7CisgICAgICAgIGlmKHMgPT0gZGF0YS0+c29ja2V0c1tqXSkgeworICAgICAgICAgIHByZXZhY3Rpb24gPSBkYXRhLT5hY3Rpb25zW2pdOwogICAgICAgICAgIHNpbmNlYmVmb3JlID0gVFJVRTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQotCiAgICAgfQogICAgIGVsc2UgewogICAgICAgLyogdGhpcyBpcyBhIHNvY2tldCB3ZSBkaWRuJ3QgaGF2ZSBiZWZvcmUsIGFkZCBpdCB0byB0aGUgaGFzaCEgKi8KQEAgLTIyNzMsMjkgKzI1NjksMjIgQEAKICAgICAgIGlmKGFjdGlvbiAmIENVUkxfUE9MTF9PVVQpCiAgICAgICAgIGVudHJ5LT53cml0ZXJzKys7CiAKLSAgICAgIC8qIGFkZCAnZGF0YScgdG8gdGhlIGxpc3Qgb2YgaGFuZGxlcyB1c2luZyB0aGlzIHNvY2tldCEgKi8KLSAgICAgIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoJmVudHJ5LT5saXN0LCBlbnRyeS0+bGlzdC50YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAmZGF0YS0+c2hfcXVldWUpOworICAgICAgLyogYWRkICdkYXRhJyB0byB0aGUgdHJhbnNmZXIgaGFzaCBvbiB0aGlzIHNvY2tldCEgKi8KKyAgICAgIGlmKCFDdXJsX2hhc2hfYWRkKCZlbnRyeS0+dHJhbnNmZXJzLCAoY2hhciAqKSZkYXRhLCAvKiBoYXNoIGtleSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBDdXJsX2Vhc3kgKiksIGRhdGEpKQorICAgICAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKICAgICB9CiAKICAgICBjb21ib2FjdGlvbiA9IChlbnRyeS0+d3JpdGVycz8gQ1VSTF9QT0xMX09VVCA6IDApIHwKICAgICAgIChlbnRyeS0+cmVhZGVycyA/IENVUkxfUE9MTF9JTiA6IDApOwogCi0jaWYgMAotICAgIGluZm9mKGRhdGEsICItLS0gQ29tYm9hY3Rpb246ICV1IHJlYWRlcnMgJXUgd3JpdGVyc1xuIiwKLSAgICAgICAgICBlbnRyeS0+cmVhZGVycywgZW50cnktPndyaXRlcnMpOwotI2VuZGlmCi0gICAgLyogY2hlY2sgaWYgaXQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgKi8KLSAgICBpZihlbnRyeS0+YWN0aW9uID09IGNvbWJvYWN0aW9uKQorICAgIC8qIHNvY2tldCBleGlzdGVkIGJlZm9yZSBhbmQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgYXMgYmVmb3JlICovCisgICAgaWYoc2luY2ViZWZvcmUgJiYgKGVudHJ5LT5hY3Rpb24gPT0gY29tYm9hY3Rpb24pKQogICAgICAgLyogc2FtZSwgY29udGludWUgKi8KICAgICAgIGNvbnRpbnVlOwogCi0gICAgLyogd2Uga25vdyAoZW50cnkgIT0gTlVMTCkgYXQgdGhpcyBwb2ludCwgc2VlIHRoZSBsb2dpYyBhYm92ZSAqLwogICAgIGlmKG11bHRpLT5zb2NrZXRfY2IpCi0gICAgICBtdWx0aS0+c29ja2V0X2NiKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbWJvYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAorICAgICAgbXVsdGktPnNvY2tldF9jYihkYXRhLCBzLCBjb21ib2FjdGlvbiwgbXVsdGktPnNvY2tldF91c2VycCwKICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNvY2tldHApOwogCiAgICAgZW50cnktPmFjdGlvbiA9IGNvbWJvYWN0aW9uOyAvKiBzdG9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhdGUgKi8KQEAgLTIzMzUsMTEgKzI2MjQsMTQgQEAKICAgICAgICAgICBtdWx0aS0+c29ja2V0X2NiKGRhdGEsIHMsIENVUkxfUE9MTF9SRU1PVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNvY2tldHApOwotICAgICAgICBzaF9kZWxlbnRyeSgmbXVsdGktPnNvY2toYXNoLCBzKTsKKyAgICAgICAgc2hfZGVsZW50cnkoZW50cnksICZtdWx0aS0+c29ja2hhc2gsIHMpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIHJlbW92ZSB0aGlzIHRyYW5zZmVyIGFzIGEgdXNlciBvZiB0aGlzIHNvY2tldCAqLwotICAgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmZW50cnktPmxpc3QsICZkYXRhLT5zaF9xdWV1ZSwgTlVMTCk7CisgICAgICAgIC8qIHN0aWxsIHVzZXJzLCBidXQgcmVtb3ZlIHRoaXMgaGFuZGxlIGFzIGEgdXNlciBvZiB0aGlzIHNvY2tldCAqLworICAgICAgICBpZihDdXJsX2hhc2hfZGVsZXRlKCZlbnRyeS0+dHJhbnNmZXJzLCAoY2hhciAqKSZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgQ3VybF9lYXN5ICopKSkgeworICAgICAgICAgIERFQlVHQVNTRVJUKE5VTEwpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9IC8qIGZvciBsb29wIG92ZXIgbnVtc29ja3MgKi8KQEAgLTIzODMsNyArMjY3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c29ja2V0cCk7CiAKICAgICAgICAgLyogbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBzb2NrZXQgaGFzaCAqLwotICAgICAgICBzaF9kZWxlbnRyeSgmbXVsdGktPnNvY2toYXNoLCBzKTsKKyAgICAgICAgc2hfZGVsZW50cnkoZW50cnksICZtdWx0aS0+c29ja2hhc2gsIHMpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjQ3NCw3ICsyNzY2LDYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIGlmKHMgIT0gQ1VSTF9TT0NLRVRfVElNRU9VVCkgewotCiAgICAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5ID0gc2hfZ2V0ZW50cnkoJm11bHRpLT5zb2NraGFzaCwgcyk7CiAKICAgICBpZighZW50cnkpCkBAIC0yNDg1LDM3ICsyNzc2LDIyIEBACiAgICAgICAgICBhbmQganVzdCBtb3ZlIG9uLiAqLwogICAgICAgOwogICAgIGVsc2UgewotICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSAmZW50cnktPmxpc3Q7Ci0gICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICplOwotICAgICAgU0lHUElQRV9WQVJJQUJMRShwaXBlX3N0KTsKKyAgICAgIHN0cnVjdCBjdXJsX2hhc2hfaXRlcmF0b3IgaXRlcjsKKyAgICAgIHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqaGU7CiAKICAgICAgIC8qIHRoZSBzb2NrZXQgY2FuIGJlIHNoYXJlZCBieSBtYW55IHRyYW5zZmVycywgaXRlcmF0ZSAqLwotICAgICAgZm9yKGUgPSBsaXN0LT5oZWFkOyBlOyBlID0gZS0+bmV4dCkgewotICAgICAgICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKillLT5wdHI7Ci0KLSAgICAgICAgaWYoZGF0YS0+bWFnaWMgIT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKQotICAgICAgICAgIC8qIGJhZCBiYWQgYmFkIGJhZCBiYWQgYmFkIGJhZCAqLwotICAgICAgICAgIHJldHVybiBDVVJMTV9JTlRFUk5BTF9FUlJPUjsKKyAgICAgIEN1cmxfaGFzaF9zdGFydF9pdGVyYXRlKCZlbnRyeS0+dHJhbnNmZXJzLCAmaXRlcik7CisgICAgICBmb3IoaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKTsgaGU7CisgICAgICAgICAgaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKSkgeworICAgICAgICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKiloZS0+cHRyOworICAgICAgICBERUJVR0FTU0VSVChkYXRhKTsKKyAgICAgICAgREVCVUdBU1NFUlQoZGF0YS0+bWFnaWMgPT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKTsKIAogICAgICAgICBpZihkYXRhLT5jb25uICYmICEoZGF0YS0+Y29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX0RJUkxPQ0spKQogICAgICAgICAgIC8qIHNldCBzb2NrZXQgZXZlbnQgYml0bWFzayBpZiB0aGV5J3JlIG5vdCBsb2NrZWQgKi8KICAgICAgICAgICBkYXRhLT5jb25uLT5jc2VsZWN0X2JpdHMgPSBldl9iaXRtYXNrOwogCi0gICAgICAgIHNpZ3BpcGVfaWdub3JlKGRhdGEsICZwaXBlX3N0KTsKLSAgICAgICAgcmVzdWx0ID0gbXVsdGlfcnVuc2luZ2xlKG11bHRpLCBub3csIGRhdGEpOwotICAgICAgICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwotCi0gICAgICAgIGlmKGRhdGEtPmNvbm4gJiYgIShkYXRhLT5jb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfRElSTE9DSykpCi0gICAgICAgICAgLyogY2xlYXIgdGhlIGJpdG1hc2sgb25seSBpZiBub3QgbG9ja2VkICovCi0gICAgICAgICAgZGF0YS0+Y29ubi0+Y3NlbGVjdF9iaXRzID0gMDsKLQotICAgICAgICBpZihDVVJMTV9PSyA+PSByZXN1bHQpIHsKLSAgICAgICAgICAvKiBnZXQgdGhlIHNvY2tldChzKSBhbmQgY2hlY2sgaWYgdGhlIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UKLSAgICAgICAgICAgICBsYXN0ICovCi0gICAgICAgICAgcmVzdWx0ID0gc2luZ2xlc29ja2V0KG11bHRpLCBkYXRhKTsKLSAgICAgICAgICBpZihyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKICAgICAgIH0KIAogICAgICAgLyogTm93IHdlIGZhbGwtdGhyb3VnaCBhbmQgZG8gdGhlIHRpbWVyLWJhc2VkIHN0dWZmLCBzaW5jZSB3ZSBkb24ndCB3YW50CkBAIC0yNTMwLDkgKzI4MDYsMTAgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBBc2tlZCB0byBydW4gZHVlIHRvIHRpbWUtb3V0LiBDbGVhciB0aGUgJ2xhc3RjYWxsJyB2YXJpYWJsZSB0byBmb3JjZQotICAgICAgIHVwZGF0ZV90aW1lcigpIHRvIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIGFnYWluIGV2ZW4gaWYgdGhlIHNhbWUKLSAgICAgICB0aW1lb3V0IGlzIHN0aWxsIHRoZSBvbmUgdG8gcnVuIGFmdGVyIHRoaXMgY2FsbC4gVGhhdCBoYW5kbGVzIHRoZSBjYXNlCi0gICAgICAgd2hlbiB0aGUgYXBwbGljYXRpb24gYXNrcyBsaWJjdXJsIHRvIHJ1biB0aGUgdGltZW91dCBwcmVtYXR1cmVseS4gKi8KKyAgICAgICBDdXJsX3VwZGF0ZV90aW1lcigpIHRvIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIGFnYWluIGV2ZW4gaWYgdGhlCisgICAgICAgc2FtZSB0aW1lb3V0IGlzIHN0aWxsIHRoZSBvbmUgdG8gcnVuIGFmdGVyIHRoaXMgY2FsbC4gVGhhdCBoYW5kbGVzIHRoZQorICAgICAgIGNhc2Ugd2hlbiB0aGUgYXBwbGljYXRpb24gYXNrcyBsaWJjdXJsIHRvIHJ1biB0aGUgdGltZW91dAorICAgICAgIHByZW1hdHVyZWx5LiAqLwogICAgIG1lbXNldCgmbXVsdGktPnRpbWVyX2xhc3RjYWxsLCAwLCBzaXplb2YobXVsdGktPnRpbWVyX2xhc3RjYWxsKSk7CiAgIH0KIApAQCAtMjYzMSw2ICsyOTA4LDE2IEBACiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE1PUFRfUElQRUxJTklOR19TRVJWRVJfQkw6CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE1PUFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzoKKyAgICB7CisgICAgICBsb25nIHN0cmVhbXMgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgICAgaWYoc3RyZWFtcyA8IDEpCisgICAgICAgIHN0cmVhbXMgPSAxMDA7CisgICAgICBtdWx0aS0+bWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9CisgICAgICAgIChzdHJlYW1zID4gKGxvbmcpSU5JVElBTF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKT8KKyAgICAgICAgSU5JVElBTF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIDogKHVuc2lnbmVkIGludClzdHJlYW1zOworICAgIH0KKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICByZXMgPSBDVVJMTV9VTktOT1dOX09QVElPTjsKICAgICBicmVhazsKQEAgLTI2NTAsNyArMjkzNyw3IEBACiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKICAgcmVzdWx0ID0gbXVsdGlfc29ja2V0KG11bHRpLCBGQUxTRSwgcywgMCwgcnVubmluZ19oYW5kbGVzKTsKICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQotICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYyLDcgKzI5NDksNyBAQAogICAgIHJldHVybiBDVVJMTV9SRUNVUlNJVkVfQVBJX0NBTEw7CiAgIHJlc3VsdCA9IG11bHRpX3NvY2tldChtdWx0aSwgRkFMU0UsIHMsIGV2X2JpdG1hc2ssIHJ1bm5pbmdfaGFuZGxlcyk7CiAgIGlmKENVUkxNX09LID49IHJlc3VsdCkKLSAgICB1cGRhdGVfdGltZXIobXVsdGkpOworICAgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY3NCw3ICsyOTYxLDcgQEAKICAgICByZXR1cm4gQ1VSTE1fUkVDVVJTSVZFX0FQSV9DQUxMOwogICByZXN1bHQgPSBtdWx0aV9zb2NrZXQobXVsdGksIFRSVUUsIENVUkxfU09DS0VUX0JBRCwgMCwgcnVubmluZ19oYW5kbGVzKTsKICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQotICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNzM0LDE0ICszMDIxLDE0IEBACiAgKiBUZWxsIHRoZSBhcHBsaWNhdGlvbiBpdCBzaG91bGQgdXBkYXRlIGl0cyB0aW1lcnMsIGlmIGl0IHN1YnNjcmliZXMgdG8gdGhlCiAgKiB1cGRhdGUgdGltZXIgY2FsbGJhY2suCiAgKi8KLXN0YXRpYyBpbnQgdXBkYXRlX3RpbWVyKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3ZvaWQgQ3VybF91cGRhdGVfdGltZXIoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpKQogewogICBsb25nIHRpbWVvdXRfbXM7CiAKICAgaWYoIW11bHRpLT50aW1lcl9jYikKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm47CiAgIGlmKG11bHRpX3RpbWVvdXQobXVsdGksICZ0aW1lb3V0X21zKSkgewotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm47CiAgIH0KICAgaWYodGltZW91dF9tcyA8IDApIHsKICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGN1cmx0aW1lIG5vbmUgPSB7MCwgMH07CkBAIC0yNzQ5LDkgKzMwMzYsMTAgQEAKICAgICAgIG11bHRpLT50aW1lcl9sYXN0Y2FsbCA9IG5vbmU7CiAgICAgICAvKiB0aGVyZSdzIG5vIHRpbWVvdXQgbm93IGJ1dCB0aGVyZSB3YXMgb25lIHByZXZpb3VzbHksIHRlbGwgdGhlIGFwcCB0bwogICAgICAgICAgZGlzYWJsZSBpdCAqLwotICAgICAgcmV0dXJuIG11bHRpLT50aW1lcl9jYihtdWx0aSwgLTEsIG11bHRpLT50aW1lcl91c2VycCk7CisgICAgICBtdWx0aS0+dGltZXJfY2IobXVsdGksIC0xLCBtdWx0aS0+dGltZXJfdXNlcnApOworICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm47CiAgIH0KIAogICAvKiBXaGVuIG11bHRpX3RpbWVvdXQoKSBpcyBkb25lLCBtdWx0aS0+dGltZXRyZWUgcG9pbnRzIHRvIHRoZSBub2RlIHdpdGggdGhlCkBAIC0yNzU5LDExICszMDQ3LDExIEBACiAgICAqIGlmIHRoaXMgaXMgdGhlIHNhbWUgKGZpeGVkKSB0aW1lIGFzIHdlIGdvdCBpbiBhIHByZXZpb3VzIGNhbGwgYW5kIHRoZW4KICAgICogYXZvaWQgY2FsbGluZyB0aGUgY2FsbGJhY2sgYWdhaW4uICovCiAgIGlmKEN1cmxfc3BsYXljb21wYXJla2V5cyhtdWx0aS0+dGltZXRyZWUtPmtleSwgbXVsdGktPnRpbWVyX2xhc3RjYWxsKSA9PSAwKQotICAgIHJldHVybiAwOworICAgIHJldHVybjsKIAogICBtdWx0aS0+dGltZXJfbGFzdGNhbGwgPSBtdWx0aS0+dGltZXRyZWUtPmtleTsKIAotICByZXR1cm4gbXVsdGktPnRpbWVyX2NiKG11bHRpLCB0aW1lb3V0X21zLCBtdWx0aS0+dGltZXJfdXNlcnApOworICBtdWx0aS0+dGltZXJfY2IobXVsdGksIHRpbWVvdXRfbXMsIG11bHRpLT50aW1lcl91c2VycCk7CiB9CiAKIC8qCkBAIC0yODQwLDcgKzMxMjgsNyBAQAogICoKICAqIEV4cGlyZSByZXBsYWNlcyBhIGZvcm1lciB0aW1lb3V0IHVzaW5nIHRoZSBzYW1lIGlkIGlmIGFscmVhZHkgc2V0LgogICovCi12b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVfdCBtaWxsaSwgZXhwaXJlX2lkIGlkKQordm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lZGlmZl90IG1pbGxpLCBleHBpcmVfaWQgaWQpCiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IGRhdGEtPm11bHRpOwogICBzdHJ1Y3QgY3VybHRpbWUgKm5vd3AgPSAmZGF0YS0+c3RhdGUuZXhwaXJldGltZTsKQEAgLTI4NTQsNyArMzE0Miw3IEBACiAgIERFQlVHQVNTRVJUKGlkIDwgRVhQSVJFX0xBU1QpOwogCiAgIHNldCA9IEN1cmxfbm93KCk7Ci0gIHNldC50dl9zZWMgKz0gbWlsbGkvMTAwMDsKKyAgc2V0LnR2X3NlYyArPSAodGltZV90KShtaWxsaS8xMDAwKTsgLyogbWlnaHQgYmUgYSA2NCB0byAzMiBiaXQgY29udmVyc2lvbiAqLwogICBzZXQudHZfdXNlYyArPSAodW5zaWduZWQgaW50KShtaWxsaSUxMDAwKSoxMDAwOwogCiAgIGlmKHNldC50dl91c2VjID49IDEwMDAwMDApIHsKQEAgLTMwNjgsMyArMzM1Niw5IEBACiAgIH0KIH0KICNlbmRpZgorCit1bnNpZ25lZCBpbnQgQ3VybF9tdWx0aV9tYXhfY29uY3VycmVudF9zdHJlYW1zKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3sKKyAgREVCVUdBU1NFUlQobXVsdGkpOworICByZXR1cm4gbXVsdGktPm1heF9jb25jdXJyZW50X3N0cmVhbXM7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWhhbmRsZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGloYW5kbGUuaAppbmRleCAyNzkzNzlhLi45MWVjYTE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWhhbmRsZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaGFuZGxlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImNvbm5jYWNoZS5oIgogI2luY2x1ZGUgInBzbC5oIgorI2luY2x1ZGUgInNvY2tldHBhaXIuaCIKIAogc3RydWN0IEN1cmxfbWVzc2FnZSB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgbGlzdDsKQEAgLTY2LDYgKzY3LDE0IEBACiAKICNkZWZpbmUgQ1VSTFBJUEVfQU5ZIChDVVJMUElQRV9NVUxUSVBMRVgpCiAKKyNpZiBkZWZpbmVkKFVTRV9TT0NLRVRQQUlSKSAmJiAhZGVmaW5lZChVU0VfQkxPQ0tJTkdfU09DS0VUUykKKyNkZWZpbmUgRU5BQkxFX1dBS0VVUAorI2VuZGlmCisKKworLyogdmFsdWUgZm9yIE1BWElNVU0gQ09OQ1VSUkVOVCBTVFJFQU1TIHVwcGVyIGxpbWl0ICovCisjZGVmaW5lIElOSVRJQUxfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyAoKDFVIDw8IDMxKSAtIDEpCisKIC8qIFRoaXMgaXMgdGhlIHN0cnVjdCBrbm93biBhcyBDVVJMTSBvbiB0aGUgb3V0c2lkZSAqLwogc3RydWN0IEN1cmxfbXVsdGkgewogICAvKiBGaXJzdCBhIHNpbXBsZSBpZGVudGlmaWVyIHRvIGVhc2llciBkZXRlY3QgaWYgYSB1c2VyIG1peCB1cApAQCAtMTEwLDExICsxMTksNiBAQAogICAgICBzYW1lIGFjdHVhbCBzb2NrZXQpICovCiAgIHN0cnVjdCBjdXJsX2hhc2ggc29ja2hhc2g7CiAKLSAgLyogbXVsdGlwbGV4aW5nIHdhbnRlZCAqLwotICBib29sIG11bHRpcGxleGluZzsKLQotICBib29sIHJlY2hlY2tzdGF0ZTsgLyogc2VlIEN1cmxfbXVsdGlfY29ubmNoYW5nZWQgKi8KLQogICAvKiBTaGFyZWQgY29ubmVjdGlvbiBjYWNoZSAoYnVuZGxlcykqLwogICBzdHJ1Y3QgY29ubmNhY2hlIGNvbm5fY2FjaGU7CiAKQEAgLTEzMiw3ICsxMzYsMTcgQEAKICAgdm9pZCAqdGltZXJfdXNlcnA7CiAgIHN0cnVjdCBjdXJsdGltZSB0aW1lcl9sYXN0Y2FsbDsgLyogdGhlIGZpeGVkIHRpbWUgZm9yIHRoZSB0aW1lb3V0IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGNhbGxiYWNrICovCisgIHVuc2lnbmVkIGludCBtYXhfY29uY3VycmVudF9zdHJlYW1zOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICBjdXJsX3NvY2tldF90IHdha2V1cF9wYWlyWzJdOyAvKiBzb2NrZXRwYWlyKCkgdXNlZCBmb3Igd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgaXMgdXNlZCBmb3IgcmVhZCwgMSBpcyB1c2VkIGZvciB3cml0ZSAqLworI2VuZGlmCisgIC8qIG11bHRpcGxleGluZyB3YW50ZWQgKi8KKyAgYm9vbCBtdWx0aXBsZXhpbmc7CisgIGJvb2wgcmVjaGVja3N0YXRlOyAvKiBzZWUgQ3VybF9tdWx0aV9jb25uY2hhbmdlZCAqLwogICBib29sIGluX2NhbGxiYWNrOyAgICAgICAgICAgIC8qIHRydWUgd2hpbGUgZXhlY3V0aW5nIGEgY2FsbGJhY2sgKi8KKyAgYm9vbCBpcHY2X3dvcmtzOwogfTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX01VTFRJSEFORExFX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaWYuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaWYuaAppbmRleCBlOGE1ZTcwLi5iZGU3NTVlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWlmLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGlpZi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywxMCArMjcsMTAgQEAKICAqLwogCiB2b2lkIEN1cmxfdXBkYXRlc29ja2V0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotdm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lX3QgbWlsbGksIGV4cGlyZV9pZCk7Cit2b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVkaWZmX3QgbWlsbGksIGV4cGlyZV9pZCk7CiB2b2lkIEN1cmxfZXhwaXJlX2NsZWFyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogdm9pZCBDdXJsX2V4cGlyZV9kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGV4cGlyZV9pZCBpZCk7Ci12b2lkIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX3VwZGF0ZV90aW1lcihzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwogdm9pZCBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogYm9vbCBDdXJsX211bHRpcGxleF93YW50ZWQoY29uc3Qgc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpKTsKQEAgLTg5LDExICs4OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIAotQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZ290c29ja2V0KTsgLyogaWYgYW55IHNvY2tldCB3YXMgY2hlY2tlZCAqLworCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBDVVJMTU9QVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIG9wdGlvbiAqLwordW5zaWduZWQgaW50IEN1cmxfbXVsdGlfbWF4X2NvbmN1cnJlbnRfc3RyZWFtcyhzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfTVVMVElJRl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9uZXRyYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbmV0cmMuYwppbmRleCAxYmQ5OThmLi4xYzlkYTMxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9uZXRyYy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL25ldHJjLmMKQEAgLTQ1LDI3ICs0NSwyNyBAQAogICBIT1NUVkFMSUQgICAgIC8qIHRoaXMgaXMgIm91ciIgbWFjaGluZSEgKi8KIH07CiAKKyNkZWZpbmUgTkVUUkNfRklMRV9NSVNTSU5HIDEKKyNkZWZpbmUgTkVUUkNfRkFJTEVEIC0xCisjZGVmaW5lIE5FVFJDX1NVQ0NFU1MgMAorCiAvKgotICogQHVuaXR0ZXN0OiAxMzA0Ci0gKgotICogKmxvZ2lucCBhbmQgKnBhc3N3b3JkcCBNVVNUIGJlIGFsbG9jYXRlZCBpZiB0aGV5IGFyZW4ndCBOVUxMIHdoZW4gcGFzc2VkCi0gKiBpbi4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgogICovCi1pbnQgQ3VybF9wYXJzZW5ldHJjKGNvbnN0IGNoYXIgKmhvc3QsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKipsb2dpbnAsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKipwYXNzd29yZHAsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgKmxvZ2luX2NoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgKnBhc3N3b3JkX2NoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ldHJjZmlsZSkKK3N0YXRpYyBpbnQgcGFyc2VuZXRyYyhjb25zdCBjaGFyICpob3N0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipsb2dpbnAsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkcCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpsb2dpbl9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBhc3N3b3JkX2NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV0cmNmaWxlKQogewogICBGSUxFICpmaWxlOwotICBpbnQgcmV0Y29kZSA9IDE7CisgIGludCByZXRjb2RlID0gTkVUUkNfRklMRV9NSVNTSU5HOwogICBjaGFyICpsb2dpbiA9ICpsb2dpbnA7CiAgIGNoYXIgKnBhc3N3b3JkID0gKnBhc3N3b3JkcDsKICAgYm9vbCBzcGVjaWZpY19sb2dpbiA9IChsb2dpbiAmJiAqbG9naW4gIT0gMCk7CiAgIGJvb2wgbG9naW5fYWxsb2MgPSBGQUxTRTsKICAgYm9vbCBwYXNzd29yZF9hbGxvYyA9IEZBTFNFOwotICBib29sIG5ldHJjX2FsbG9jID0gRkFMU0U7CiAgIGVudW0gaG9zdF9sb29rdXBfc3RhdGUgc3RhdGUgPSBOT1RISU5HOwogCiAgIGNoYXIgc3RhdGVfbG9naW4gPSAwOyAgICAgIC8qIEZvdW5kIGEgbG9naW4ga2V5d29yZCAqLwpAQCAtNzMsNTEgKzczLDkgQEAKICAgaW50IHN0YXRlX291cl9sb2dpbiA9IEZBTFNFOyAgLyogV2l0aCBzcGVjaWZpY19sb2dpbiwgZm91bmQgKm91ciogbG9naW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAqLwogCi0jZGVmaW5lIE5FVFJDIERPVF9DSEFSICJuZXRyYyIKLQotICBpZighbmV0cmNmaWxlKSB7Ci0gICAgYm9vbCBob21lX2FsbG9jID0gRkFMU0U7Ci0gICAgY2hhciAqaG9tZSA9IGN1cmxfZ2V0ZW52KCJIT01FIik7IC8qIHBvcnRhYmxlIGVudmlyb25tZW50IHJlYWRlciAqLwotICAgIGlmKGhvbWUpIHsKLSAgICAgIGhvbWVfYWxsb2MgPSBUUlVFOwotI2lmIGRlZmluZWQoSEFWRV9HRVRQV1VJRF9SKSAmJiBkZWZpbmVkKEhBVkVfR0VURVVJRCkKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzdHJ1Y3QgcGFzc3dkIHB3LCAqcHdfcmVzOwotICAgICAgY2hhciBwd2J1ZlsxMDI0XTsKLSAgICAgIGlmKCFnZXRwd3VpZF9yKGdldGV1aWQoKSwgJnB3LCBwd2J1Ziwgc2l6ZW9mKHB3YnVmKSwgJnB3X3JlcykKLSAgICAgICAgICYmIHB3X3JlcykgewotICAgICAgICBob21lID0gc3RyZHVwKHB3LnB3X2Rpcik7Ci0gICAgICAgIGlmKCFob21lKQotICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBob21lX2FsbG9jID0gVFJVRTsKLSAgICAgIH0KLSNlbGlmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCi0gICAgfQotICAgIGVsc2UgewotICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7Ci0gICAgICBwdyA9IGdldHB3dWlkKGdldGV1aWQoKSk7Ci0gICAgICBpZihwdykgewotICAgICAgICBob21lID0gcHctPnB3X2RpcjsKLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGlmKCFob21lKQotICAgICAgcmV0dXJuIHJldGNvZGU7IC8qIG5vIGhvbWUgZGlyZWN0b3J5IGZvdW5kIChvciBwb3NzaWJseSBvdXQgb2YgbWVtb3J5KSAqLwotCi0gICAgbmV0cmNmaWxlID0gY3VybF9tYXByaW50ZigiJXMlcyVzIiwgaG9tZSwgRElSX0NIQVIsIE5FVFJDKTsKLSAgICBpZihob21lX2FsbG9jKQotICAgICAgZnJlZShob21lKTsKLSAgICBpZighbmV0cmNmaWxlKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIG5ldHJjX2FsbG9jID0gVFJVRTsKLSAgfQorICBERUJVR0FTU0VSVChuZXRyY2ZpbGUpOwogCiAgIGZpbGUgPSBmb3BlbihuZXRyY2ZpbGUsIEZPUEVOX1JFQURURVhUKTsKLSAgaWYobmV0cmNfYWxsb2MpCi0gICAgZnJlZShuZXRyY2ZpbGUpOwogICBpZihmaWxlKSB7CiAgICAgY2hhciAqdG9rOwogICAgIGNoYXIgKnRva19idWY7CkBAIC0xMzAsNyArODgsNyBAQAogICAgICAgaWYodG9rICYmICp0b2sgPT0gJyMnKQogICAgICAgICAvKiB0cmVhdCBhbiBpbml0aWFsIGhhc2ggYXMgYSBjb21tZW50IGxpbmUgKi8KICAgICAgICAgY29udGludWU7Ci0gICAgICB3aGlsZSghZG9uZSAmJiB0b2spIHsKKyAgICAgIHdoaWxlKHRvaykgewogCiAgICAgICAgIGlmKChsb2dpbiAmJiAqbG9naW4pICYmIChwYXNzd29yZCAmJiAqcGFzc3dvcmQpKSB7CiAgICAgICAgICAgZG9uZSA9IFRSVUU7CkBAIC0xNDgsMTQgKzEwNiwxNCBAQAogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJkZWZhdWx0IiwgdG9rKSkgewogICAgICAgICAgICAgc3RhdGUgPSBIT1NUVkFMSUQ7Ci0gICAgICAgICAgICByZXRjb2RlID0gMDsgLyogd2UgZGlkIGZpbmQgb3VyIGhvc3QgKi8KKyAgICAgICAgICAgIHJldGNvZGUgPSBORVRSQ19TVUNDRVNTOyAvKiB3ZSBkaWQgZmluZCBvdXIgaG9zdCAqLwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIT1NURk9VTkQ6CiAgICAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoaG9zdCwgdG9rKSkgewogICAgICAgICAgICAgLyogYW5kIHllcywgdGhpcyBpcyBvdXIgaG9zdCEgKi8KICAgICAgICAgICAgIHN0YXRlID0gSE9TVFZBTElEOwotICAgICAgICAgICAgcmV0Y29kZSA9IDA7IC8qIHdlIGRpZCBmaW5kIG91ciBob3N0ICovCisgICAgICAgICAgICByZXRjb2RlID0gTkVUUkNfU1VDQ0VTUzsgLyogd2UgZGlkIGZpbmQgb3VyIGhvc3QgKi8KICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgLyogbm90IG91ciBob3N0ICovCkBAIC0xNzQsNyArMTMyLDcgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBsb2dpbiA9IHN0cmR1cCh0b2spOwogICAgICAgICAgICAgICBpZighbG9naW4pIHsKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gLTE7IC8qIGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICAgICAgcmV0Y29kZSA9IE5FVFJDX0ZBSUxFRDsgLyogYWxsb2NhdGlvbiBmYWlsZWQgKi8KICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBsb2dpbl9hbGxvYyA9IFRSVUU7CkBAIC0xOTAsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBwYXNzd29yZCA9IHN0cmR1cCh0b2spOwogICAgICAgICAgICAgICBpZighcGFzc3dvcmQpIHsKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gLTE7IC8qIGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICAgICAgcmV0Y29kZSA9IE5FVFJDX0ZBSUxFRDsgLyogYWxsb2NhdGlvbiBmYWlsZWQgKi8KICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBwYXNzd29yZF9hbGxvYyA9IFRSVUU7CkBAIC0yMTUsNiArMTczLDcgQEAKIAogICAgIG91dDoKICAgICBpZighcmV0Y29kZSkgeworICAgICAgLyogc3VjY2VzcyAqLwogICAgICAgKmxvZ2luX2NoYW5nZWQgPSBGQUxTRTsKICAgICAgICpwYXNzd29yZF9jaGFuZ2VkID0gRkFMU0U7CiAgICAgICBpZihsb2dpbl9hbGxvYykgewpAQCAtMjQyLDQgKzIwMSw3OCBAQAogICByZXR1cm4gcmV0Y29kZTsKIH0KIAorLyoKKyAqIEB1bml0dGVzdDogMTMwNAorICoKKyAqICpsb2dpbnAgYW5kICpwYXNzd29yZHAgTVVTVCBiZSBhbGxvY2F0ZWQgaWYgdGhleSBhcmVuJ3QgTlVMTCB3aGVuIHBhc3NlZAorICogaW4uCisgKi8KK2ludCBDdXJsX3BhcnNlbmV0cmMoY29uc3QgY2hhciAqaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmxvZ2lucCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkcCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqcGFzc3dvcmRfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV0cmNmaWxlKQoreworICBpbnQgcmV0Y29kZSA9IDE7CisgIGNoYXIgKmZpbGVhbGxvYyA9IE5VTEw7CisKKyAgaWYoIW5ldHJjZmlsZSkgeworICAgIGNoYXIgKmhvbWUgPSBOVUxMOworICAgIGNoYXIgKmhvbWVhID0gY3VybF9nZXRlbnYoIkhPTUUiKTsgLyogcG9ydGFibGUgZW52aXJvbm1lbnQgcmVhZGVyICovCisgICAgaWYoaG9tZWEpIHsKKyAgICAgIGhvbWUgPSBob21lYTsKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUFdVSURfUikgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCBwdywgKnB3X3JlczsKKyAgICAgIGNoYXIgcHdidWZbMTAyNF07CisgICAgICBpZighZ2V0cHd1aWRfcihnZXRldWlkKCksICZwdywgcHdidWYsIHNpemVvZihwd2J1ZiksICZwd19yZXMpCisgICAgICAgICAmJiBwd19yZXMpIHsKKyAgICAgICAgaG9tZSA9IHB3LnB3X2RpcjsKKyAgICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7CisgICAgICBwdyA9IGdldHB3dWlkKGdldGV1aWQoKSk7CisgICAgICBpZihwdykgeworICAgICAgICBob21lID0gcHctPnB3X2RpcjsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmKCFob21lKQorICAgICAgcmV0dXJuIHJldGNvZGU7IC8qIG5vIGhvbWUgZGlyZWN0b3J5IGZvdW5kIChvciBwb3NzaWJseSBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkpICovCisKKyAgICBmaWxlYWxsb2MgPSBjdXJsX21hcHJpbnRmKCIlcyVzLm5ldHJjIiwgaG9tZSwgRElSX0NIQVIpOworICAgIGlmKCFmaWxlYWxsb2MpIHsKKyAgICAgIGZyZWUoaG9tZWEpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXRjb2RlID0gcGFyc2VuZXRyYyhob3N0LCBsb2dpbnAsIHBhc3N3b3JkcCwgbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZF9jaGFuZ2VkLCBmaWxlYWxsb2MpOworICAgIGZyZWUoZmlsZWFsbG9jKTsKKyNpZmRlZiBXSU4zMgorICAgIGlmKHJldGNvZGUgPT0gTkVUUkNfRklMRV9NSVNTSU5HKSB7CisgICAgICAvKiBmYWxsYmFjayB0byB0aGUgb2xkLXN0eWxlICJfbmV0cmMiIGZpbGUgKi8KKyAgICAgIGZpbGVhbGxvYyA9IGN1cmxfbWFwcmludGYoIiVzJXNfbmV0cmMiLCBob21lLCBESVJfQ0hBUik7CisgICAgICBpZighZmlsZWFsbG9jKSB7CisgICAgICAgIGZyZWUoaG9tZWEpOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICByZXRjb2RlID0gcGFyc2VuZXRyYyhob3N0LCBsb2dpbnAsIHBhc3N3b3JkcCwgbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NoYW5nZWQsIGZpbGVhbGxvYyk7CisgICAgICBmcmVlKGZpbGVhbGxvYyk7CisgICAgfQorI2VuZGlmCisgICAgZnJlZShob21lYSk7CisgIH0KKyAgZWxzZQorICAgIHJldGNvZGUgPSBwYXJzZW5ldHJjKGhvc3QsIGxvZ2lucCwgcGFzc3dvcmRwLCBsb2dpbl9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NoYW5nZWQsIG5ldHJjZmlsZSk7CisgIHJldHVybiByZXRjb2RlOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbi1hc2NpaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKaW5kZXggNDJiZWFlYy4uYTQ4ZTY3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ub25ibG9jay5jCmluZGV4IDRkMTA1YzEuLmFiZWI2NTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmgKaW5kZXggZWIxOGVhMS4uZDUwZDMxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ub25ibG9jay5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9vcGVubGRhcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvb3BlbmxkYXAuYwppbmRleCBlZWFiMmM3Li43MzRjYTVmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9vcGVubGRhcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL29wZW5sZGFwLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAiYmFkIG9yIG1pc3NpbmcgZXh0ZW5zaW9ucyIKIH07CiAKLXR5cGVkZWYgc3RydWN0IGxkYXBjb25uaW5mbyB7CitzdHJ1Y3QgbGRhcGNvbm5pbmZvIHsKICAgTERBUCAqbGQ7CiAgIEN1cmxfcmVjdiAqcmVjdjsgIC8qIGZvciBzdGFja2luZyBTU0wgaGFuZGxlciAqLwogICBDdXJsX3NlbmQgKnNlbmQ7CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgYm9vbCBzc2xkb25lOwogICBib29sIHNzbGluc3Q7CiAgIGJvb2wgZGlkYmluZDsKLX0gbGRhcGNvbm5pbmZvOworfTsKIAogdHlwZWRlZiBzdHJ1Y3QgbGRhcHJlcWluZm8gewogICBpbnQgbXNnaWQ7CkBAIC0xNjksNyArMTY5LDcgQEAKIAogc3RhdGljIENVUkxjb2RlIGxkYXBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGk7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpOwogICBMREFQVVJMRGVzYyAqbHVkOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IHJjLCBwcm90bzsKQEAgLTE5MCwxMSArMTkwLDExIEBACiAgIHByb3RvID0gbGRhcF9wdnRfdXJsX3NjaGVtZTJwcm90byhsdWQtPmx1ZF9zY2hlbWUpOwogICBsZGFwX2ZyZWVfdXJsZGVzYyhsdWQpOwogCi0gIGxpID0gY2FsbG9jKDEsIHNpemVvZihsZGFwY29ubmluZm8pKTsKKyAgbGkgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsZGFwY29ubmluZm8pKTsKICAgaWYoIWxpKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICBsaS0+cHJvdG8gPSBwcm90bzsKLSAgY29ubi0+cHJvdG8uZ2VuZXJpYyA9IGxpOworICBjb25uLT5wcm90by5sZGFwYyA9IGxpOwogICBjb25ua2VlcChjb25uLCAiT3BlbkxEQVAgZGVmYXVsdCIpOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CkBAIC0yMDUsNyArMjA1LDcgQEAKIAogc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IHJjLCBwcm90byA9IExEQVBfVkVSU0lPTjM7CiAgIGNoYXIgaG9zdHVybFsxMDI0XTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCiBzdGF0aWMgQ1VSTGNvZGUgbGRhcF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKIHsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8ubGRhcGM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBMREFQTWVzc2FnZSAqbXNnID0gTlVMTDsKICAgc3RydWN0IHRpbWV2YWwgdHYgPSB7MCwgMX0sICp0dnA7CkBAIC0zNTcsNyArMzU3LDcgQEAKIAogc3RhdGljIENVUkxjb2RlIGxkYXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKICAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKIAogICBpZihsaSkgewpAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgICBsZGFwX3VuYmluZF9leHQobGktPmxkLCBOVUxMLCBOVUxMKTsKICAgICAgIGxpLT5sZCA9IE5VTEw7CiAgICAgfQotICAgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBOVUxMOworICAgIGNvbm4tPnByb3RvLmxkYXBjID0gTlVMTDsKICAgICBmcmVlKGxpKTsKICAgfQogICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0zNzMsNyArMzczLDcgQEAKIAogc3RhdGljIENVUkxjb2RlIGxkYXBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQogewotICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKICAgbGRhcHJlcWluZm8gKmxyOwogICBDVVJMY29kZSBzdGF0dXMgPSBDVVJMRV9PSzsKICAgaW50IHJjID0gMDsKQEAgLTQyNyw3ICs0MjcsNyBAQAogICBpZihscikgewogICAgIC8qIGlmIHRoZXJlIHdhcyBhIHNlYXJjaCBpbiBwcm9ncmVzcywgYWJhbmRvbiBpdCAqLwogICAgIGlmKGxyLT5tc2dpZCkgewotICAgICAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgICAgICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICAgICAgbGRhcF9hYmFuZG9uX2V4dChsaS0+bGQsIGxyLT5tc2dpZCwgTlVMTCwgTlVMTCk7CiAgICAgICBsci0+bXNnaWQgPSAwOwogICAgIH0KQEAgLTQ0MSw3ICs0NDEsNyBAQAogc3RhdGljIHNzaXplX3QgbGRhcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgbGRhcHJlcWluZm8gKmxyID0gZGF0YS0+cmVxLnByb3RvcDsKICAgaW50IHJjLCByZXQ7CkBAIC03MTgsNyArNzE4LDcgQEAKIGxkYXBzYl90bHNfcmVhZChTb2NrYnVmX0lPX0Rlc2MgKnNiaW9kLCB2b2lkICpidWYsIGJlcl9sZW5fdCBsZW4pCiB7CiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHNiaW9kLT5zYmlvZF9wdnQ7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBiZXJfc2xlbl90IHJldDsKICAgQ1VSTGNvZGUgZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKIApAQCAtNzMzLDcgKzczMyw3IEBACiBsZGFwc2JfdGxzX3dyaXRlKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmJ1ZiwgYmVyX2xlbl90IGxlbikKIHsKICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gc2Jpb2QtPnNiaW9kX3B2dDsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8ubGRhcGM7CiAgIGJlcl9zbGVuX3QgcmV0OwogICBDVVJMY29kZSBlcnIgPSBDVVJMRV9TRU5EX0VSUk9SOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wYXJzZWRhdGUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5jCmluZGV4IDdhZTVlYjguLjU4NWQ3ZWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5jCkBAIC0xMDAsMTYgKzEwMCwyMCBAQAogI2RlZmluZSBQQVJTRURBVEVfTEFURVIgIDEKICNkZWZpbmUgUEFSU0VEQVRFX1NPT05FUiAyCiAKLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BBUlNFREFURQotCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1BBUlNFREFURSkgfHwgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0ZUUCkgfHwgXAorICAhZGVmaW5lZChDVVJMX0RJU0FCTEVfRklMRSkKKy8qIFRoZXNlIG5hbWVzIGFyZSBhbHNvIHVzZWQgYnkgRlRQIGFuZCBGSUxFIGNvZGUgKi8KIGNvbnN0IGNoYXIgKiBjb25zdCBDdXJsX3drZGF5W10gPQogeyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4ifTsKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd2Vla2RheVtdID0KLXsgIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsCi0gICJGcmlkYXkiLCAiU2F0dXJkYXkiLCAiU3VuZGF5IiB9OwogY29uc3QgY2hhciAqIGNvbnN0IEN1cmxfbW9udGhbXT0KIHsgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OworI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BBUlNFREFURQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3ZWVrZGF5W10gPQoreyAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwKKyAgIkZyaWRheSIsICJTYXR1cmRheSIsICJTdW5kYXkiIH07CiAKIHN0cnVjdCB0emluZm8gewogICBjaGFyIG5hbWVbNV07CkBAIC01ODMsNiArNTg3LDMwIEBACiAgIHJldHVybiAtMTsKIH0KIAorLyogQ3VybF9nZXRkYXRlX2NhcHBlZCgpIGRpZmZlcnMgZnJvbSBjdXJsX2dldGRhdGUoKSBpbiB0aGF0IHRoaXMgd2lsbCByZXR1cm4KKyAgIFRJTUVfVF9NQVggaW4gY2FzZSB0aGUgcGFyc2VkIHRpbWUgdmFsdWUgd2FzIHRvbyBiaWcsIGluc3RlYWQgb2YgYW4KKyAgIGVycm9yLiAqLworCit0aW1lX3QgQ3VybF9nZXRkYXRlX2NhcHBlZChjb25zdCBjaGFyICpwKQoreworICB0aW1lX3QgcGFyc2VkID0gLTE7CisgIGludCByYyA9IHBhcnNlZGF0ZShwLCAmcGFyc2VkKTsKKworICBzd2l0Y2gocmMpIHsKKyAgY2FzZSBQQVJTRURBVEVfT0s6CisgICAgaWYocGFyc2VkID09IC0xKQorICAgICAgLyogYXZvaWQgcmV0dXJuaW5nIC0xIGZvciBhIHdvcmtpbmcgc2NlbmFyaW8gKi8KKyAgICAgIHBhcnNlZCsrOworICAgIHJldHVybiBwYXJzZWQ7CisgIGNhc2UgUEFSU0VEQVRFX0xBVEVSOgorICAgIC8qIHRoaXMgcmV0dXJucyB0aGUgbWF4aW11bSB0aW1lIHZhbHVlICovCisgICAgcmV0dXJuIHBhcnNlZDsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gLTE7IC8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBmYWlsICovCisgIH0KKyAgLyogVU5SRUFDSEFCTEUgKi8KK30KKwogLyoKICAqIEN1cmxfZ210aW1lKCkgaXMgYSBnbXRpbWUoKSByZXBsYWNlbWVudCBmb3IgcG9ydGFiaWxpdHkuIERvIG5vdCB1c2UgdGhlCiAgKiBnbXRpbWVfcigpIG9yIGdtdGltZSgpIGZ1bmN0aW9ucyBhbnl3aGVyZSBlbHNlIGJ1dCBoZXJlLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wYXJzZWRhdGUuaAppbmRleCA4ZGMzYjkwLi44YzdhZTk0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wYXJzZWRhdGUuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wYXJzZWRhdGUuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjcsNCArMjcsMTAgQEAKIAogQ1VSTGNvZGUgQ3VybF9nbXRpbWUodGltZV90IGludGltZSwgc3RydWN0IHRtICpzdG9yZSk7CiAKKy8qIEN1cmxfZ2V0ZGF0ZV9jYXBwZWQoKSBkaWZmZXJzIGZyb20gY3VybF9nZXRkYXRlKCkgaW4gdGhhdCB0aGlzIHdpbGwgcmV0dXJuCisgICBUSU1FX1RfTUFYIGluIGNhc2UgdGhlIHBhcnNlZCB0aW1lIHZhbHVlIHdhcyB0b28gYmlnLCBpbnN0ZWFkIG9mIGFuCisgICBlcnJvci4gKi8KKwordGltZV90IEN1cmxfZ2V0ZGF0ZV9jYXBwZWQoY29uc3QgY2hhciAqcCk7CisKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QQVJTRURBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmMKaW5kZXggZTk1NjhlZS4uZDA3MTAwNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02MCwxMiArNjAsMTIgQEAKICAgLyogV2l0aG91dCBhIHJlcXVlc3RlZCB0aW1lb3V0LCB3ZSBvbmx5IHdhaXQgJ3Jlc3BvbnNlX3RpbWUnIHNlY29uZHMgZm9yIHRoZQogICAgICBmdWxsIHJlc3BvbnNlIHRvIGFycml2ZSBiZWZvcmUgd2UgYmFpbCBvdXQgKi8KICAgdGltZW91dF9tcyA9IHJlc3BvbnNlX3RpbWUgLQotICAgIEN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwgcHAtPnJlc3BvbnNlKTsgLyogc3BlbnQgdGltZSAqLworICAgICh0aW1lX3QpQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCBwcC0+cmVzcG9uc2UpOyAvKiBzcGVudCB0aW1lICovCiAKICAgaWYoZGF0YS0+c2V0LnRpbWVvdXQgJiYgIWRpc2Nvbm5lY3RpbmcpIHsKICAgICAvKiBpZiB0aW1lb3V0IGlzIHJlcXVlc3RlZCwgZmluZCBvdXQgaG93IG11Y2ggcmVtYWluaW5nIHRpbWUgd2UgaGF2ZSAqLwogICAgIHRpbWVfdCB0aW1lb3V0Ml9tcyA9IGRhdGEtPnNldC50aW1lb3V0IC0gLyogdGltZW91dCB0aW1lICovCi0gICAgICBDdXJsX3RpbWVkaWZmKEN1cmxfbm93KCksIGNvbm4tPm5vdyk7IC8qIHNwZW50IHRpbWUgKi8KKyAgICAgICh0aW1lX3QpQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCBjb25uLT5ub3cpOyAvKiBzcGVudCB0aW1lICovCiAKICAgICAvKiBwaWNrIHRoZSBsb3dlc3QgbnVtYmVyICovCiAgICAgdGltZW91dF9tcyA9IENVUkxNSU4odGltZW91dF9tcywgdGltZW91dDJfbXMpOwpAQCAtNDYzLDE0ICs0NjMsOSBAQAogfQogCiBpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsCi0gICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKLQotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKIAogICBpZihwcC0+c2VuZGxlZnQpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5oCmluZGV4IGRiZTFmOGQuLjg0OWE3YzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTM1LDggKzEzNSw3IEBACiAvKiBjYWxsIHRoaXMgd2hlbiBhIHBpbmdwb25nIGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkICovCiBDVVJMY29kZSBDdXJsX3BwX2Rpc2Nvbm5lY3Qoc3RydWN0IHBpbmdwb25nICpwcCk7CiAKLWludCBDdXJsX3BwX2dldHNvY2soc3RydWN0IHBpbmdwb25nICpwcCwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuYwppbmRleCBjOGYzOTY1Li41N2MxMzczIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wb3AzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5jCkBAIC05NSw4ICs5NSw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IHBvcDNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BhcnNlX3VybF9vcHRpb25zKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CkBAIC0zMzksMTAgKzMzOCw4IEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BlcmZvcm1fc3RhcnR0bHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQogICAvKiBTZW5kIHRoZSBTVExTIGNvbW1hbmQgKi8KLSAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICIlcyIsICJTVExTIik7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiJXMiLCAiU1RMUyIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgUE9QM19TVEFSVFRMUyk7CkBAIC0zNTgsMTEgKzM1NSwxMCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19wZXJmb3JtX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOwotCiAgIC8qIFN0YXJ0IHRoZSBTU0wgY29ubmVjdGlvbiAqLwotICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmcG9wM2MtPnNzbGRvbmUpOworICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9wM2MtPnNzbGRvbmUpOwogCiAgIGlmKCFyZXN1bHQpIHsKICAgICBpZihwb3AzYy0+c3RhdGUgIT0gUE9QM19VUEdSQURFVExTKQpAQCAtNTkzLDEwICs1ODksOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19wZXJmb3JtX3F1aXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQogICAvKiBTZW5kIHRoZSBRVUlUIGNvbW1hbmQgKi8KLSAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICIlcyIsICJRVUlUIik7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiJXMiLCAiUVVJVCIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgUE9QM19RVUlUKTsKQEAgLTEwNjAsMTAgKzEwNTQsOSBAQAogfQogCiAvKiBGb3IgdGhlIFBPUDMgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCi1zdGF0aWMgaW50IHBvcDNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8ucG9wM2MucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnBvcDNjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5oCmluZGV4IGE4ZTY5N2MuLjNiYTc5OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wb3AzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Byb2dyZXNzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wcm9ncmVzcy5jCmluZGV4IGY1ODZkNTkuLjYwYTk0MWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Byb2dyZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcHJvZ3Jlc3MuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAKIC8qIGNoZWNrIHJhdGUgbGltaXRzIHdpdGhpbiB0aGlzIG1hbnkgcmVjZW50IG1pbGxpc2Vjb25kcywgYXQgbWluaW11bS4gKi8KQEAgLTE2OCw3ICsxNjksNyBAQAogdm9pZCBDdXJsX3BncnNUaW1lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVyaWQgdGltZXIpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICB0aW1lX3QgKmRlbHRhID0gTlVMTDsKKyAgdGltZWRpZmZfdCAqZGVsdGEgPSBOVUxMOwogCiAgIHN3aXRjaCh0aW1lcikgewogICBkZWZhdWx0OgpAQCAtMjM4LDYgKzIzOSw4IEBACiAgIGRhdGEtPnByb2dyZXNzLnVsX2xpbWl0X3N0YXJ0LnR2X3VzZWMgPSAwOwogICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydC50dl9zZWMgPSAwOwogICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydC50dl91c2VjID0gMDsKKyAgZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCA9IDA7CisgIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkID0gMDsKICAgLyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IEhJREUgYW5kIEhFQURFUlNfT1VUICovCiAgIGRhdGEtPnByb2dyZXNzLmZsYWdzICY9IFBHUlNfSElERXxQR1JTX0hFQURFUlNfT1VUOwogICBDdXJsX3JhdGVsaW1pdChkYXRhLCBkYXRhLT5wcm9ncmVzcy5zdGFydCk7CkBAIC0yNjgsOCArMjcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93KQogewogICBjdXJsX29mZl90IHNpemUgPSBjdXJzaXplIC0gc3RhcnRzaXplOwotICB0aW1lX3QgbWluaW11bTsKLSAgdGltZV90IGFjdHVhbDsKKyAgdGltZWRpZmZfdCBtaW5pbXVtOworICB0aW1lZGlmZl90IGFjdHVhbDsKIAogICBpZighbGltaXQgfHwgIXNpemUpCiAgICAgcmV0dXJuIDA7CkBAIC0yODIsMTAgKzI4NSwxMCBAQAogICAgIG1pbmltdW0gPSAodGltZV90KSAoQ1VSTF9PRkZfVF9DKDEwMDApICogc2l6ZSAvIGxpbWl0KTsKICAgZWxzZSB7CiAgICAgbWluaW11bSA9ICh0aW1lX3QpIChzaXplIC8gbGltaXQpOwotICAgIGlmKG1pbmltdW0gPCBUSU1FX1RfTUFYLzEwMDApCisgICAgaWYobWluaW11bSA8IFRJTUVESUZGX1RfTUFYLzEwMDApCiAgICAgICBtaW5pbXVtICo9IDEwMDA7CiAgICAgZWxzZQotICAgICAgbWluaW11bSA9IFRJTUVfVF9NQVg7CisgICAgICBtaW5pbXVtID0gVElNRURJRkZfVF9NQVg7CiAgIH0KIAogICAvKgpAQCAtMzY0LDE4ICszNjcsMTUgQEAKICAgfQogfQogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9QUk9HUkVTU19NRVRFUgotc3RhdGljIHZvaWQgcHJvZ3Jlc3NfbWV0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQorLyogcmV0dXJucyBUUlVFIGlmIGl0J3MgdGltZSB0byBzaG93IHRoZSBwcm9ncmVzcyBtZXRlciAqLworc3RhdGljIGJvb2wgcHJvZ3Jlc3NfY2FsYyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHN0cnVjdCBjdXJsdGltZSBub3cpCiB7Ci0gIHN0cnVjdCBjdXJsdGltZSBub3c7CiAgIGN1cmxfb2ZmX3QgdGltZXNwZW50OwogICBjdXJsX29mZl90IHRpbWVzcGVudF9tczsgLyogbWlsbGlzZWNvbmRzICovCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBib29sIHNob3dub3cgPSBGQUxTRTsKICAgY3VybF9vZmZfdCBkbCA9IGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQ7CiAgIGN1cmxfb2ZmX3QgdWwgPSBkYXRhLT5wcm9ncmVzcy51cGxvYWRlZDsKLQotICBub3cgPSBDdXJsX25vdygpOyAvKiB3aGF0IHRpbWUgaXMgaXQgKi8KKyAgYm9vbCB0aW1ldG9zaG93ID0gRkFMU0U7CiAKICAgLyogVGhlIHRpbWUgc3BlbnQgc28gZmFyIChmcm9tIHRoZSBzdGFydCkgKi8KICAgZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50ID0gQ3VybF90aW1lZGlmZl91cyhub3csIGRhdGEtPnByb2dyZXNzLnN0YXJ0KTsKQEAgLTM5OCwxMCArMzk4LDggQEAKICAgaWYoZGF0YS0+cHJvZ3Jlc3MubGFzdHNob3cgIT0gbm93LnR2X3NlYykgewogICAgIGludCBjb3VudGluZGV4OyAvKiBhbW91bnQgb2Ygc2Vjb25kcyBzdG9yZWQgaW4gdGhlIHNwZWVkZXIgYXJyYXkgKi8KICAgICBpbnQgbm93aW5kZXggPSBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX2MlIENVUlJfVElNRTsKLSAgICBpZighKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ISURFKSkKLSAgICAgIHNob3dub3cgPSBUUlVFOwotCiAgICAgZGF0YS0+cHJvZ3Jlc3MubGFzdHNob3cgPSBub3cudHZfc2VjOworICAgIHRpbWV0b3Nob3cgPSBUUlVFOwogCiAgICAgLyogTGV0J3MgZG8gdGhlICJjdXJyZW50IHNwZWVkIiB0aGluZywgd2l0aCB0aGUgZGwgKyB1bCBzcGVlZHMKICAgICAgICBjb21iaW5lZC4gU3RvcmUgdGhlIHNwZWVkIGF0IGVudHJ5ICdub3dpbmRleCcuICovCkBAIC00MzQsOCArNDMyLDcgQEAKICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc3BlZWRlcl9jJUNVUlJfVElNRTowOwogCiAgICAgICAvKiBGaWd1cmUgb3V0IHRoZSBleGFjdCB0aW1lIGZvciB0aGUgdGltZSBzcGFuICovCi0gICAgICBzcGFuX21zID0gQ3VybF90aW1lZGlmZihub3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX3RpbWVbY2hlY2tpbmRleF0pOworICAgICAgc3Bhbl9tcyA9IEN1cmxfdGltZWRpZmYobm93LCBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX3RpbWVbY2hlY2tpbmRleF0pOwogICAgICAgaWYoMCA9PSBzcGFuX21zKQogICAgICAgICBzcGFuX21zID0gMTsgLyogYXQgbGVhc3Qgb25lIG1pbGxpc2Vjb25kIE1VU1QgaGF2ZSBwYXNzZWQgKi8KIApAQCAtNDYxLDExOCArNDU4LDExOSBAQAogICAgICAgICBkYXRhLT5wcm9ncmVzcy51bHNwZWVkICsgZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZDsKIAogICB9IC8qIENhbGN1bGF0aW9ucyBlbmQgKi8KLSAgaWYoIXNob3dub3cpCi0gICAgLyogb25seSBzaG93IHRoZSBpbnRlcm5hbCBwcm9ncmVzcyBtZXRlciBvbmNlIHBlciBzZWNvbmQgKi8KLSAgICByZXR1cm47Ci0gIGVsc2UgewotICAgIC8qIElmIHRoZXJlJ3Mgbm8gZXh0ZXJuYWwgY2FsbGJhY2sgc2V0LCB1c2UgaW50ZXJuYWwgY29kZSB0byBzaG93Ci0gICAgICAgcHJvZ3Jlc3MgKi8KLSAgICAvKiBwcm9ncmVzcyBtZXRlciBoYXMgbm90IGJlZW4gc2h1dCBvZmYgKi8KLSAgICBjaGFyIG1heDVbNl1bMTBdOwotICAgIGN1cmxfb2ZmX3QgZGxwZXJjZW4gPSAwOwotICAgIGN1cmxfb2ZmX3QgdWxwZXJjZW4gPSAwOwotICAgIGN1cmxfb2ZmX3QgdG90YWxfcGVyY2VuID0gMDsKLSAgICBjdXJsX29mZl90IHRvdGFsX3RyYW5zZmVyOwotICAgIGN1cmxfb2ZmX3QgdG90YWxfZXhwZWN0ZWRfdHJhbnNmZXI7Ci0gICAgY2hhciB0aW1lX2xlZnRbMTBdOwotICAgIGNoYXIgdGltZV90b3RhbFsxMF07Ci0gICAgY2hhciB0aW1lX3NwZW50WzEwXTsKLSAgICBjdXJsX29mZl90IHVsZXN0aW1hdGUgPSAwOwotICAgIGN1cmxfb2ZmX3QgZGxlc3RpbWF0ZSA9IDA7Ci0gICAgY3VybF9vZmZfdCB0b3RhbF9lc3RpbWF0ZTsKKyAgcmV0dXJuIHRpbWV0b3Nob3c7Cit9CiAKLSAgICBpZighKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19IRUFERVJTX09VVCkpIHsKLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7Ci0gICAgICAgIGZwcmludGYoZGF0YS0+c2V0LmVyciwKLSAgICAgICAgICAgICAgICAiKiogUmVzdW1pbmcgdHJhbnNmZXIgZnJvbSBieXRlIHBvc2l0aW9uICUiCi0gICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiXG4iLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICB9CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9HUkVTU19NRVRFUgorc3RhdGljIHZvaWQgcHJvZ3Jlc3NfbWV0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY2hhciBtYXg1WzZdWzEwXTsKKyAgY3VybF9vZmZfdCBkbHBlcmNlbiA9IDA7CisgIGN1cmxfb2ZmX3QgdWxwZXJjZW4gPSAwOworICBjdXJsX29mZl90IHRvdGFsX3BlcmNlbiA9IDA7CisgIGN1cmxfb2ZmX3QgdG90YWxfdHJhbnNmZXI7CisgIGN1cmxfb2ZmX3QgdG90YWxfZXhwZWN0ZWRfdHJhbnNmZXI7CisgIGNoYXIgdGltZV9sZWZ0WzEwXTsKKyAgY2hhciB0aW1lX3RvdGFsWzEwXTsKKyAgY2hhciB0aW1lX3NwZW50WzEwXTsKKyAgY3VybF9vZmZfdCB1bGVzdGltYXRlID0gMDsKKyAgY3VybF9vZmZfdCBkbGVzdGltYXRlID0gMDsKKyAgY3VybF9vZmZfdCB0b3RhbF9lc3RpbWF0ZTsKKyAgY3VybF9vZmZfdCB0aW1lc3BlbnQgPQorICAgIChjdXJsX29mZl90KWRhdGEtPnByb2dyZXNzLnRpbWVzcGVudC8xMDAwMDAwOyAvKiBzZWNvbmRzICovCisKKyAgaWYoIShkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfSEVBREVSU19PVVQpKSB7CisgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKICAgICAgIGZwcmludGYoZGF0YS0+c2V0LmVyciwKLSAgICAgICAgICAgICAgIiAgJSUgVG90YWwgICAgJSUgUmVjZWl2ZWQgJSUgWGZlcmQgIEF2ZXJhZ2UgU3BlZWQgICAiCi0gICAgICAgICAgICAgICJUaW1lICAgIFRpbWUgICAgIFRpbWUgIEN1cnJlbnRcbiIKLSAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsb2FkICBVcGxvYWQgICAiCi0gICAgICAgICAgICAgICJUb3RhbCAgIFNwZW50ICAgIExlZnQgIFNwZWVkXG4iKTsKLSAgICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfSEVBREVSU19PVVQ7IC8qIGhlYWRlcnMgYXJlIHNob3duICovCisgICAgICAgICAgICAgICIqKiBSZXN1bWluZyB0cmFuc2ZlciBmcm9tIGJ5dGUgcG9zaXRpb24gJSIKKyAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiXG4iLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CiAgICAgfQotCi0gICAgLyogRmlndXJlIG91dCB0aGUgZXN0aW1hdGVkIHRpbWUgb2YgYXJyaXZhbCBmb3IgdGhlIHVwbG9hZCAqLwotICAgIGlmKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfVUxfU0laRV9LTk9XTikgJiYKLSAgICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKLSAgICAgIHVsZXN0aW1hdGUgPSBkYXRhLT5wcm9ncmVzcy5zaXplX3VsIC8gZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKLQotICAgICAgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCA+IENVUkxfT0ZGX1RfQygxMDAwMCkpCi0gICAgICAgIHVscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQgLwotICAgICAgICAgIChkYXRhLT5wcm9ncmVzcy5zaXplX3VsL0NVUkxfT0ZGX1RfQygxMDApKTsKLSAgICAgIGVsc2UgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCA+IENVUkxfT0ZGX1RfQygwKSkKLSAgICAgICAgdWxwZXJjZW4gPSAoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQqMTAwKSAvCi0gICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bDsKLSAgICB9Ci0KLSAgICAvKiAuLi4gYW5kIHRoZSBkb3dubG9hZCAqLwotICAgIGlmKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfRExfU0laRV9LTk9XTikgJiYKLSAgICAgICAoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKLSAgICAgIGRsZXN0aW1hdGUgPSBkYXRhLT5wcm9ncmVzcy5zaXplX2RsIC8gZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZDsKLQotICAgICAgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbCA+IENVUkxfT0ZGX1RfQygxMDAwMCkpCi0gICAgICAgIGRscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCAvCi0gICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfZGwvQ1VSTF9PRkZfVF9DKDEwMCkpOwotICAgICAgZWxzZSBpZihkYXRhLT5wcm9ncmVzcy5zaXplX2RsID4gQ1VSTF9PRkZfVF9DKDApKQotICAgICAgICBkbHBlcmNlbiA9IChkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKjEwMCkgLwotICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfZGw7Ci0gICAgfQotCi0gICAgLyogTm93IGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlbSBpcyBzbG93ZXIgYW5kIHVzZSB0aGF0IG9uZSBmb3IgdGhlCi0gICAgICAgdG90YWwgZXN0aW1hdGUhICovCi0gICAgdG90YWxfZXN0aW1hdGUgPSB1bGVzdGltYXRlPmRsZXN0aW1hdGU/dWxlc3RpbWF0ZTpkbGVzdGltYXRlOwotCi0gICAgLyogY3JlYXRlIHRoZSB0aHJlZSB0aW1lIHN0cmluZ3MgKi8KLSAgICB0aW1lMnN0cih0aW1lX2xlZnQsIHRvdGFsX2VzdGltYXRlID4gMD8odG90YWxfZXN0aW1hdGUgLSB0aW1lc3BlbnQpOjApOwotICAgIHRpbWUyc3RyKHRpbWVfdG90YWwsIHRvdGFsX2VzdGltYXRlKTsKLSAgICB0aW1lMnN0cih0aW1lX3NwZW50LCB0aW1lc3BlbnQpOwotCi0gICAgLyogR2V0IHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBleHBlY3RlZCB0byBnZXQgdHJhbnNmZXJyZWQgKi8KLSAgICB0b3RhbF9leHBlY3RlZF90cmFuc2ZlciA9Ci0gICAgICAoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKT8KLSAgICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsOmRhdGEtPnByb2dyZXNzLnVwbG9hZGVkKSsKLSAgICAgICgoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0RMX1NJWkVfS05PV04pPwotICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfZGw6ZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCk7Ci0KLSAgICAvKiBXZSBoYXZlIHRyYW5zZmVycmVkIHRoaXMgbXVjaCBzbyBmYXIgKi8KLSAgICB0b3RhbF90cmFuc2ZlciA9IGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQgKyBkYXRhLT5wcm9ncmVzcy51cGxvYWRlZDsKLQotICAgIC8qIEdldCB0aGUgcGVyY2VudGFnZSBvZiBkYXRhIHRyYW5zZmVycmVkIHNvIGZhciAqLwotICAgIGlmKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKLSAgICAgIHRvdGFsX3BlcmNlbiA9IHRvdGFsX3RyYW5zZmVyIC8KLSAgICAgICAgKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyL0NVUkxfT0ZGX1RfQygxMDApKTsKLSAgICBlbHNlIGlmKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID4gQ1VSTF9PRkZfVF9DKDApKQotICAgICAgdG90YWxfcGVyY2VuID0gKHRvdGFsX3RyYW5zZmVyKjEwMCkgLyB0b3RhbF9leHBlY3RlZF90cmFuc2ZlcjsKLQogICAgIGZwcmludGYoZGF0YS0+c2V0LmVyciwKLSAgICAgICAgICAgICJcciIKLSAgICAgICAgICAgICIlMyIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiICVzICAiCi0gICAgICAgICAgICAiJTMiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiAlcyAgIgotICAgICAgICAgICAgIiUzIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIgJXMgICVzICAlcyAlcyAlcyAlcyAlcyIsCi0gICAgICAgICAgICB0b3RhbF9wZXJjZW4sICAvKiAzIGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdG90YWwgJSAqLwotICAgICAgICAgICAgbWF4NWRhdGEodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIsIG1heDVbMl0pLCAgIC8qIHRvdGFsIHNpemUgKi8KLSAgICAgICAgICAgIGRscGVyY2VuLCAgICAgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiByY3ZkICUgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQsIG1heDVbMF0pLCAvKiByY3ZkIHNpemUgKi8KLSAgICAgICAgICAgIHVscGVyY2VuLCAgICAgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB4ZmVyICUgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkLCBtYXg1WzFdKSwgICAvKiB4ZmVyIHNpemUgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLmRsc3BlZWQsIG1heDVbM10pLCAgICAvKiBhdnJnIGRsIHNwZWVkICovCi0gICAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy51bHNwZWVkLCBtYXg1WzRdKSwgICAgLyogYXZyZyB1bCBzcGVlZCAqLwotICAgICAgICAgICAgdGltZV90b3RhbCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRvdGFsIHRpbWUgKi8KLSAgICAgICAgICAgIHRpbWVfc3BlbnQsICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0aW1lIHNwZW50ICovCi0gICAgICAgICAgICB0aW1lX2xlZnQsICAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdGltZSBsZWZ0ICovCi0gICAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5jdXJyZW50X3NwZWVkLCBtYXg1WzVdKQotICAgICAgKTsKKyAgICAgICAgICAgICIgICUlIFRvdGFsICAgICUlIFJlY2VpdmVkICUlIFhmZXJkICBBdmVyYWdlIFNwZWVkICAgIgorICAgICAgICAgICAgIlRpbWUgICAgVGltZSAgICAgVGltZSAgQ3VycmVudFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsb2FkICBVcGxvYWQgICAiCisgICAgICAgICAgICAiVG90YWwgICBTcGVudCAgICBMZWZ0ICBTcGVlZFxuIik7CisgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19IRUFERVJTX09VVDsgLyogaGVhZGVycyBhcmUgc2hvd24gKi8KKyAgfQogCi0gICAgLyogd2UgZmx1c2ggdGhlIG91dHB1dCBzdHJlYW0gdG8gbWFrZSBpdCBhcHBlYXIgYXMgc29vbiBhcyBwb3NzaWJsZSAqLwotICAgIGZmbHVzaChkYXRhLT5zZXQuZXJyKTsKLSAgfSAvKiBkb24ndCBzaG93IG5vdyAqLworICAvKiBGaWd1cmUgb3V0IHRoZSBlc3RpbWF0ZWQgdGltZSBvZiBhcnJpdmFsIGZvciB0aGUgdXBsb2FkICovCisgIGlmKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfVUxfU0laRV9LTk9XTikgJiYKKyAgICAgKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQgPiBDVVJMX09GRl9UX0MoMCkpKSB7CisgICAgdWxlc3RpbWF0ZSA9IGRhdGEtPnByb2dyZXNzLnNpemVfdWwgLyBkYXRhLT5wcm9ncmVzcy51bHNwZWVkOworCisgICAgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCA+IENVUkxfT0ZGX1RfQygxMDAwMCkpCisgICAgICB1bHBlcmNlbiA9IGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkIC8KKyAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfdWwvQ1VSTF9PRkZfVF9DKDEwMCkpOworICAgIGVsc2UgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCA+IENVUkxfT0ZGX1RfQygwKSkKKyAgICAgIHVscGVyY2VuID0gKGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkKjEwMCkgLworICAgICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsOworICB9CisKKyAgLyogLi4uIGFuZCB0aGUgZG93bmxvYWQgKi8KKyAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ETF9TSVpFX0tOT1dOKSAmJgorICAgICAoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKKyAgICBkbGVzdGltYXRlID0gZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbCAvIGRhdGEtPnByb2dyZXNzLmRsc3BlZWQ7CisKKyAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX2RsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKKyAgICAgIGRscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCAvCisgICAgICAgIChkYXRhLT5wcm9ncmVzcy5zaXplX2RsL0NVUkxfT0ZGX1RfQygxMDApKTsKKyAgICBlbHNlIGlmKGRhdGEtPnByb2dyZXNzLnNpemVfZGwgPiBDVVJMX09GRl9UX0MoMCkpCisgICAgICBkbHBlcmNlbiA9IChkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKjEwMCkgLworICAgICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX2RsOworICB9CisKKyAgLyogTm93IGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlbSBpcyBzbG93ZXIgYW5kIHVzZSB0aGF0IG9uZSBmb3IgdGhlCisgICAgIHRvdGFsIGVzdGltYXRlISAqLworICB0b3RhbF9lc3RpbWF0ZSA9IHVsZXN0aW1hdGU+ZGxlc3RpbWF0ZT91bGVzdGltYXRlOmRsZXN0aW1hdGU7CisKKyAgLyogY3JlYXRlIHRoZSB0aHJlZSB0aW1lIHN0cmluZ3MgKi8KKyAgdGltZTJzdHIodGltZV9sZWZ0LCB0b3RhbF9lc3RpbWF0ZSA+IDA/KHRvdGFsX2VzdGltYXRlIC0gdGltZXNwZW50KTowKTsKKyAgdGltZTJzdHIodGltZV90b3RhbCwgdG90YWxfZXN0aW1hdGUpOworICB0aW1lMnN0cih0aW1lX3NwZW50LCB0aW1lc3BlbnQpOworCisgIC8qIEdldCB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgZXhwZWN0ZWQgdG8gZ2V0IHRyYW5zZmVycmVkICovCisgIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID0KKyAgICAoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKT8KKyAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bDpkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCkrCisgICAgKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfRExfU0laRV9LTk9XTik/CisgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfZGw6ZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCk7CisKKyAgLyogV2UgaGF2ZSB0cmFuc2ZlcnJlZCB0aGlzIG11Y2ggc28gZmFyICovCisgIHRvdGFsX3RyYW5zZmVyID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCArIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOworCisgIC8qIEdldCB0aGUgcGVyY2VudGFnZSBvZiBkYXRhIHRyYW5zZmVycmVkIHNvIGZhciAqLworICBpZih0b3RhbF9leHBlY3RlZF90cmFuc2ZlciA+IENVUkxfT0ZGX1RfQygxMDAwMCkpCisgICAgdG90YWxfcGVyY2VuID0gdG90YWxfdHJhbnNmZXIgLworICAgICAgKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyL0NVUkxfT0ZGX1RfQygxMDApKTsKKyAgZWxzZSBpZih0b3RhbF9leHBlY3RlZF90cmFuc2ZlciA+IENVUkxfT0ZGX1RfQygwKSkKKyAgICB0b3RhbF9wZXJjZW4gPSAodG90YWxfdHJhbnNmZXIqMTAwKSAvIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyOworCisgIGZwcmludGYoZGF0YS0+c2V0LmVyciwKKyAgICAgICAgICAiXHIiCisgICAgICAgICAgIiUzIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIgJXMgICIKKyAgICAgICAgICAiJTMiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiAlcyAgIgorICAgICAgICAgICIlMyIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiICVzICAlcyAgJXMgJXMgJXMgJXMgJXMiLAorICAgICAgICAgIHRvdGFsX3BlcmNlbiwgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0b3RhbCAlICovCisgICAgICAgICAgbWF4NWRhdGEodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIsIG1heDVbMl0pLCAgIC8qIHRvdGFsIHNpemUgKi8KKyAgICAgICAgICBkbHBlcmNlbiwgICAgICAvKiAzIGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogcmN2ZCAlICovCisgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCwgbWF4NVswXSksIC8qIHJjdmQgc2l6ZSAqLworICAgICAgICAgIHVscGVyY2VuLCAgICAgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB4ZmVyICUgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCwgbWF4NVsxXSksICAgLyogeGZlciBzaXplICovCisgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCwgbWF4NVszXSksICAgIC8qIGF2cmcgZGwgc3BlZWQgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy51bHNwZWVkLCBtYXg1WzRdKSwgICAgLyogYXZyZyB1bCBzcGVlZCAqLworICAgICAgICAgIHRpbWVfdG90YWwsICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0b3RhbCB0aW1lICovCisgICAgICAgICAgdGltZV9zcGVudCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRpbWUgc3BlbnQgKi8KKyAgICAgICAgICB0aW1lX2xlZnQsICAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdGltZSBsZWZ0ICovCisgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuY3VycmVudF9zcGVlZCwgbWF4NVs1XSkKKyAgICApOworCisgIC8qIHdlIGZsdXNoIHRoZSBvdXRwdXQgc3RyZWFtIHRvIG1ha2UgaXQgYXBwZWFyIGFzIHNvb24gYXMgcG9zc2libGUgKi8KKyAgZmZsdXNoKGRhdGEtPnNldC5lcnIpOwogfQogI2Vsc2UKICAvKiBwcm9ncmVzcyBiYXIgZGlzYWJsZWQgKi8KLSNkZWZpbmUgcHJvZ3Jlc3NfbWV0ZXIoeCkKKyNkZWZpbmUgcHJvZ3Jlc3NfbWV0ZXIoeCkgQ3VybF9ub3Bfc3RtdAogI2VuZGlmCiAKIApAQCAtNTgzLDYgKzU4MSw4IEBACiBpbnQgQ3VybF9wZ3JzVXBkYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOyAvKiB3aGF0IHRpbWUgaXMgaXQgKi8KKyAgYm9vbCBzaG93cHJvZ3Jlc3MgPSBwcm9ncmVzc19jYWxjKGNvbm4sIG5vdyk7CiAgIGlmKCEoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0hJREUpKSB7CiAgICAgaWYoZGF0YS0+c2V0LmZ4ZmVyaW5mbykgewogICAgICAgaW50IHJlc3VsdDsKQEAgLTU5NCwxMSArNTk0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkKTsKICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLSAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNhbGxiYWNrIGFib3J0ZWQiKTsKLSAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBpZihyZXN1bHQgIT0gQ1VSTF9QUk9HUkVTU0ZVTkNfQ09OVElOVUUpIHsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIGZhaWxmKGRhdGEsICJDYWxsYmFjayBhYm9ydGVkIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CiAgICAgfQotICAgIGlmKGRhdGEtPnNldC5mcHJvZ3Jlc3MpIHsKKyAgICBlbHNlIGlmKGRhdGEtPnNldC5mcHJvZ3Jlc3MpIHsKICAgICAgIGludCByZXN1bHQ7CiAgICAgICAvKiBUaGUgb2xkZXIgZGVwcmVjYXRlZCBjYWxsYmFjayBpcyBzZXQsIGNhbGwgdGhhdCAqLwogICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CkBAIC02MDgsMTIgKzYxMCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnNpemVfdWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQpOwogICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotICAgICAgaWYocmVzdWx0KQotICAgICAgICBmYWlsZihkYXRhLCAiQ2FsbGJhY2sgYWJvcnRlZCIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGlmKHJlc3VsdCAhPSBDVVJMX1BST0dSRVNTRlVOQ19DT05USU5VRSkgeworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgZmFpbGYoZGF0YSwgIkNhbGxiYWNrIGFib3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KICAgICB9CisKKyAgICBpZihzaG93cHJvZ3Jlc3MpCisgICAgICBwcm9ncmVzc19tZXRlcihjb25uKTsKICAgfQotICBwcm9ncmVzc19tZXRlcihjb25uKTsKIAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3F1aWMuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3F1aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWIyM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcXVpYy5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfUVVJQ19ICisjZGVmaW5lIEhFQURFUl9DVVJMX1FVSUNfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgRU5BQkxFX1FVSUMKKyNpZmRlZiBVU0VfTkdUQ1AyCisjaW5jbHVkZSAidnF1aWMvbmd0Y3AyLmgiCisjZW5kaWYKKyNpZmRlZiBVU0VfUVVJQ0hFCisjaW5jbHVkZSAidnF1aWMvcXVpY2hlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKworLyogZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBzcGVjaWZpYyBiYWNrZW5kcyAqLworQ1VSTGNvZGUgQ3VybF9xdWljX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pOworQ1VSTGNvZGUgQ3VybF9xdWljX2lzX2Nvbm5lY3RlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQpOworaW50IEN1cmxfcXVpY192ZXIoY2hhciAqcCwgc2l6ZV90IGxlbik7CitDVVJMY29kZSBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Cit2b2lkIEN1cmxfcXVpY19kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgcHJlbWF0dXJlKTsKK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKKworI2Vsc2UgLyogRU5BQkxFX1FVSUMgKi8KKyNkZWZpbmUgQ3VybF9xdWljX2RvbmVfc2VuZGluZyh4KQorI2RlZmluZSBDdXJsX3F1aWNfZG9uZSh4LHkpCisjZGVmaW5lIEN1cmxfcXVpY19kYXRhX3BlbmRpbmcoeCkKKyNlbmRpZiAvKiAhRU5BQkxFX1FVSUMgKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1FVSUNfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5jCmluZGV4IDZlZTQ1ZmUuLmM0MTUwNDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEwNiw4ICsxMDYsNyBAQAogICogJ3JuZHB0cicgcG9pbnRzIHRvLgogICoKICAqIElmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aG91dCBUTFMgc3VwcG9ydCBvciB3aXRoIGEgVExTIGJhY2tlbmQgdGhhdCBsYWNrcyBhCi0gKiBwcm9wZXIgcmFuZG9tIEFQSSAoR3NraXQsIFBvbGFyU1NMIG9yIG1iZWRUTFMpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlCi0gKiAid2VhayIgcmFuZG9tLgorICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0IG9yIG1iZWRUTFMpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlICJ3ZWFrIiByYW5kb20uCiAgKgogICogV2hlbiBidWlsdCAqd2l0aCogVExTIHN1cHBvcnQgYW5kIGEgYmFja2VuZCB0aGF0IG9mZmVycyBzdHJvbmcgcmFuZG9tLCBpdAogICogd2lsbCByZXR1cm4gZXJyb3IgaWYgaXQgY2Fubm90IHByb3ZpZGUgc3Ryb25nIHJhbmRvbSB2YWx1ZXMuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmgKaW5kZXggNWRlYjA0MS4uM2M4ZTJiOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjcsOCArMjcsNyBAQAogICogJ3JuZCcgcG9pbnRzIHRvLgogICoKICAqIElmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aG91dCBUTFMgc3VwcG9ydCBvciB3aXRoIGEgVExTIGJhY2tlbmQgdGhhdCBsYWNrcyBhCi0gKiBwcm9wZXIgcmFuZG9tIEFQSSAoR3NraXQsIFBvbGFyU1NMIG9yIG1iZWRUTFMpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlCi0gKiAid2VhayIgcmFuZG9tLgorICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0IG9yIG1iZWRUTFMpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlICJ3ZWFrIiByYW5kb20uCiAgKgogICogV2hlbiBidWlsdCAqd2l0aCogVExTIHN1cHBvcnQgYW5kIGEgYmFja2VuZCB0aGF0IG9mZmVycyBzdHJvbmcgcmFuZG9tLCBpdAogICogd2lsbCByZXR1cm4gZXJyb3IgaWYgaXQgY2Fubm90IHByb3ZpZGUgc3Ryb25nIHJhbmRvbSB2YWx1ZXMuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3JlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMTcwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuYwpAQCAtMCwwICsxLDYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInJlbmFtZS5oIgorCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWYgKCFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykpIHx8ICBcCisgIGRlZmluZWQoVVNFX0FMVFNWQykKKworI2luY2x1ZGUgInRpbWV2YWwuaCIKKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiByZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGVycm9yICovCitpbnQgQ3VybF9yZW5hbWUoY29uc3QgY2hhciAqb2xkcGF0aCwgY29uc3QgY2hhciAqbmV3cGF0aCkKK3sKKyNpZmRlZiBXSU4zMgorICAvKiByZW5hbWUoKSBvbiBXaW5kb3dzIGRvZXNuJ3Qgb3ZlcndyaXRlLCBzbyB3ZSBjYW4ndCB1c2UgaXQgaGVyZS4KKyAgICAgTW92ZUZpbGVFeEEoKSB3aWxsIG92ZXJ3cml0ZSBhbmQgaXMgdXN1YWxseSBhdG9taWMsIGhvd2V2ZXIgaXQgZmFpbHMKKyAgICAgd2hlbiB0aGVyZSBhcmUgb3BlbiBoYW5kbGVzIHRvIHRoZSBmaWxlLiAqLworICBjb25zdCBpbnQgbWF4X3dhaXRfbXMgPSAxMDAwOworICBzdHJ1Y3QgY3VybHRpbWUgc3RhcnQgPSBDdXJsX25vdygpOworICBmb3IoOzspIHsKKyAgICB0aW1lZGlmZl90IGRpZmY7CisgICAgaWYoTW92ZUZpbGVFeEEob2xkcGF0aCwgbmV3cGF0aCwgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpCisgICAgICBicmVhazsKKyAgICBkaWZmID0gQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCBzdGFydCk7CisgICAgaWYoZGlmZiA8IDAgfHwgZGlmZiA+IG1heF93YWl0X21zKQorICAgICAgcmV0dXJuIDE7CisgICAgU2xlZXAoMSk7CisgIH0KKyNlbHNlCisgIGlmKHJlbmFtZShvbGRwYXRoLCBuZXdwYXRoKSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3JlbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDQyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1JFTkFNRV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1JFTkFNRV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IEN1cmxfcmVuYW1lKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfUkVOQU1FX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuYwppbmRleCA3NGNmMjMyLi5iYmE0YzE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5jCkBAIC01MiwxMCArNTIsNyBAQAogc3RhdGljIENVUkxjb2RlIHJ0c3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CiBzdGF0aWMgQ1VSTGNvZGUgcnRzcF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgcnRzcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKLQotc3RhdGljIGludCBydHNwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCBydHNwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAKIC8qCiAgKiBQYXJzZSBhbmQgd3JpdGUgb3V0IGFueSBhdmFpbGFibGUgUlRQIGRhdGEuCkBAIC03NywxMSArNzQsOSBAQAogICAgaW50ZXJmYWNlIGFuZCB0aGVuIHdlJ3JlIGFsd2F5cyBfc2VuZGluZ18gYSByZXF1ZXN0IGFuZCB0aHVzIHdlIHdhaXQgZm9yCiAgICB0aGUgc2luZ2xlIHNvY2tldCB0byBiZWNvbWUgd3JpdGFibGUgb25seSAqLwogc3RhdGljIGludCBydHNwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKICAgLyogd3JpdGUgbW9kZSAqLwotICAodm9pZCludW1zb2NrczsgLyogdW51c2VkLCB3ZSB0cnVzdCBpdCB0byBiZSBhdCBsZWFzdCAxICovCiAgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CiAgIHJldHVybiBHRVRTT0NLX1dSSVRFU09DSygwKTsKIH0KQEAgLTQ5MSw3ICs0ODYsNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiAKICAgaWYoKHJ0c3ByZXEgPT0gUlRTUFJFUV9TRVRVUCkgfHwgKHJ0c3ByZXEgPT0gUlRTUFJFUV9ERVNDUklCRSkpIHsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGRhdGEsIHJlcV9idWZmZXIpOworICAgIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oY29ubiwgcmVxX2J1ZmZlcik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5oCmluZGV4IDJmOWNjMzIuLjFhYWU4NjQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlY3VyaXR5LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWN1cml0eS5jCmluZGV4IDc2OTUxNTQuLjNiOWMyMGEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlY3VyaXR5LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VjdXJpdHkuYwpAQCAtNyw3ICs3LDcgQEAKICAqIHJld3JpdGUgdG8gd29yayBhcm91bmQgdGhlIHBhcmFncmFwaCAyIGluIHRoZSBCU0QgbGljZW5zZXMgYXMgZXhwbGFpbmVkCiAgKiBiZWxvdy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMTcgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorICogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5LCAyMDE3IEt1bmdsaWdhIFRla25pc2thIEjDg8K2Z3Nrb2xhbgogICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KQEAgLTE5MSw3ICsxOTEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3JiNWJ1ZmZlciAqYnVmKQogewogICBpbnQgbGVuOwotICB2b2lkICp0bXAgPSBOVUxMOwogICBDVVJMY29kZSByZXN1bHQ7CiAKICAgcmVzdWx0ID0gc29ja2V0X3JlYWQoZmQsICZsZW4sIHNpemVvZihsZW4pKTsKQEAgLTIwMSwxMiArMjAwLDExIEBACiAgIGlmKGxlbikgewogICAgIC8qIG9ubHkgcmVhbGxvYyBpZiB0aGVyZSB3YXMgYSBsZW5ndGggKi8KICAgICBsZW4gPSBudG9obChsZW4pOwotICAgIHRtcCA9IEN1cmxfc2FmZXJlYWxsb2MoYnVmLT5kYXRhLCBsZW4pOworICAgIGJ1Zi0+ZGF0YSA9IEN1cmxfc2FmZXJlYWxsb2MoYnVmLT5kYXRhLCBsZW4pOwogICB9Ci0gIGlmKHRtcCA9PSBOVUxMKQorICBpZighbGVuIHx8ICFidWYtPmRhdGEpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgYnVmLT5kYXRhID0gdG1wOwogICByZXN1bHQgPSBzb2NrZXRfcmVhZChmZCwgYnVmLT5kYXRhLCBsZW4pOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIzOCw3ICsyMzYsNyBAQAogCiAgIC8qIEhhbmRsZSBjbGVhciB0ZXh0IHJlc3BvbnNlLiAqLwogICBpZihjb25uLT5zZWNfY29tcGxldGUgPT0gMCB8fCBjb25uLT5kYXRhX3Byb3QgPT0gUFJPVF9DTEVBUikKLSAgICAgIHJldHVybiByZWFkKGZkLCBidWZmZXIsIGxlbik7CisgICAgICByZXR1cm4gc3JlYWQoZmQsIGJ1ZmZlciwgbGVuKTsKIAogICBpZihjb25uLT5pbl9idWZmZXIuZW9mX2ZsYWcpIHsKICAgICBjb25uLT5pbl9idWZmZXIuZW9mX2ZsYWcgPSAwOwpAQCAtMjY3LDcgKzI2NSw3IEBACiB9CiAKIC8qIFNlbmQgfGxlbmd0aHwgYnl0ZXMgZnJvbSB8ZnJvbXwgdG8gdGhlIHxmZHwgc29ja2V0IHRha2luZyBjYXJlIG9mIGVuY29kaW5nCi0gICBhbmQgbmVnb2NpYXRpbmcgd2l0aCB0aGUgc2VydmVyLiB8ZnJvbXwgY2FuIGJlIE5VTEwuICovCisgICBhbmQgbmVnb3RpYXRpbmcgd2l0aCB0aGUgc2VydmVyLiB8ZnJvbXwgY2FuIGJlIE5VTEwuICovCiBzdGF0aWMgdm9pZCBkb19zZWNfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgZmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmcm9tLCBpbnQgbGVuZ3RoKQogewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWxlY3QuYwppbmRleCA2ZTczODkwLi5hZTIzMTU1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWxlY3QuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWxlY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTMsOSArNTMsNiBAQAogLyogQ29udmVuaWVuY2UgbG9jYWwgbWFjcm9zICovCiAjZGVmaW5lIEVMQVBTRURfTVMoKSAoaW50KUN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwgaW5pdGlhbF90dikKIAotaW50IEN1cmxfYWNrX2VpbnRyID0gMDsKLSNkZWZpbmUgRVJST1JfTk9UX0VJTlRSKGVycm9yKSAoQ3VybF9hY2tfZWludHIgfHwgZXJyb3IgIT0gRUlOVFIpCi0KIC8qCiAgKiBJbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciB3YWl0aW5nIGEgc3BlY2lmaWMgYW1vdW50IG9mIG1zCiAgKiBpbiBDdXJsX3NvY2tldF9jaGVjaygpIGFuZCBDdXJsX3BvbGwoKSB3aGVuIG5vIGZpbGUgZGVzY3JpcHRvcgpAQCAtNzQsMTMgKzcxLDYgQEAKICAqLwogaW50IEN1cmxfd2FpdF9tcyhpbnQgdGltZW91dF9tcykKIHsKLSNpZiAhZGVmaW5lZChNU0RPUykgJiYgIWRlZmluZWQoVVNFX1dJTlNPQ0spCi0jaWZuZGVmIEhBVkVfUE9MTF9GSU5FCi0gIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7Ci0jZW5kaWYKLSAgc3RydWN0IGN1cmx0aW1lIGluaXRpYWxfdHY7Ci0gIGludCBwZW5kaW5nX21zOwotI2VuZGlmCiAgIGludCByID0gMDsKIAogICBpZighdGltZW91dF9tcykKQEAgLTk0LDI4ICs4NCwxNiBAQAogI2VsaWYgZGVmaW5lZChVU0VfV0lOU09DSykKICAgU2xlZXAodGltZW91dF9tcyk7CiAjZWxzZQotICBwZW5kaW5nX21zID0gdGltZW91dF9tczsKLSAgaW5pdGlhbF90diA9IEN1cmxfbm93KCk7Ci0gIGRvIHsKLSAgICBpbnQgZXJyb3I7CiAjaWYgZGVmaW5lZChIQVZFX1BPTExfRklORSkKLSAgICByID0gcG9sbChOVUxMLCAwLCBwZW5kaW5nX21zKTsKKyAgciA9IHBvbGwoTlVMTCwgMCwgdGltZW91dF9tcyk7CiAjZWxzZQotICAgIHBlbmRpbmdfdHYudHZfc2VjID0gcGVuZGluZ19tcyAvIDEwMDA7Ci0gICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7CisgIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCBwZW5kaW5nX3R2OworICAgIHBlbmRpbmdfdHYudHZfc2VjID0gdGltZW91dF9tcyAvIDEwMDA7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKHRpbWVvdXRfbXMgJSAxMDAwKSAqIDEwMDA7CiAgICAgciA9IHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmcGVuZGluZ190dik7CisgIH0KICNlbmRpZiAvKiBIQVZFX1BPTExfRklORSAqLwotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCk7Ci0gICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7CiAjZW5kaWYgLyogVVNFX1dJTlNPQ0sgKi8KICAgaWYocikKICAgICByID0gLTE7CkBAIC0xNTgsNyArMTM2LDYgQEAKICAgZmRfc2V0IGZkc19lcnI7CiAgIGN1cmxfc29ja2V0X3QgbWF4ZmQ7CiAjZW5kaWYKLSAgc3RydWN0IGN1cmx0aW1lIGluaXRpYWxfdHYgPSB7MCwgMH07CiAgIGludCBwZW5kaW5nX21zID0gMDsKICAgaW50IHI7CiAgIGludCByZXQ7CkBAIC0xODMsNyArMTYwLDYgQEAKIAogICBpZih0aW1lb3V0X21zID4gMCkgewogICAgIHBlbmRpbmdfbXMgPSAoaW50KXRpbWVvdXRfbXM7Ci0gICAgaW5pdGlhbF90diA9IEN1cmxfbm93KCk7CiAgIH0KIAogI2lmZGVmIEhBVkVfUE9MTF9GSU5FCkBAIC0yMDgsMjYgKzE4NCwxMSBAQAogICAgIG51bSsrOwogICB9CiAKLSAgZG8gewotICAgIGludCBlcnJvcjsKLSAgICBpZih0aW1lb3V0X21zIDwgMCkKLSAgICAgIHBlbmRpbmdfbXMgPSAtMTsKLSAgICBlbHNlIGlmKCF0aW1lb3V0X21zKQotICAgICAgcGVuZGluZ19tcyA9IDA7Ci0gICAgciA9IHBvbGwocGZkLCBudW0sIHBlbmRpbmdfbXMpOwotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgaWYodGltZW91dF9tcyA+IDApIHsKLSAgICAgIHBlbmRpbmdfbXMgPSAoaW50KSh0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpKTsKLSAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkgewotICAgICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSB3aGlsZShyID09IC0xKTsKKyAgaWYodGltZW91dF9tcyA8IDApCisgICAgcGVuZGluZ19tcyA9IC0xOworICBlbHNlIGlmKCF0aW1lb3V0X21zKQorICAgIHBlbmRpbmdfbXMgPSAwOworICByID0gcG9sbChwZmQsIG51bSwgcGVuZGluZ19tcyk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpAQCAtMjkwLDYxICsyNTEsNDUgQEAKIAogICBwdGltZW91dCA9ICh0aW1lb3V0X21zIDwgMCkgPyBOVUxMIDogJnBlbmRpbmdfdHY7CiAKLSAgZG8gewotICAgIGludCBlcnJvcjsKLSAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ190di50dl9zZWMgPSBwZW5kaW5nX21zIC8gMTAwMDsKLSAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChwZW5kaW5nX21zICUgMTAwMCkgKiAxMDAwOwotICAgIH0KLSAgICBlbHNlIGlmKCF0aW1lb3V0X21zKSB7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IDA7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3VzZWMgPSAwOwotICAgIH0KKyAgaWYodGltZW91dF9tcyA+IDApIHsKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOworICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChwZW5kaW5nX21zICUgMTAwMCkgKiAxMDAwOworICB9CisgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IDA7CisgICAgcGVuZGluZ190di50dl91c2VjID0gMDsKKyAgfQogCi0gICAgLyogV2luU29jayBzZWxlY3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBmZF9zZXQgdGhhdCBjb250YWlucyB6ZXJvCi0gICAgICAgZmQgZmxhZ3MsIG9yIGl0IHdpbGwgcmV0dXJuIFdTQUVJTlZBTC4gIEJ1dCwgaXQgYWxzbyBjYW4ndCBiZSBjYWxsZWQKLSAgICAgICB3aXRoIG5vIGZkX3NldHMgYXQgYWxsISAgRnJvbSB0aGUgZG9jdW1lbnRhdGlvbjoKKyAgLyogV2luU29jayBzZWxlY3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBmZF9zZXQgdGhhdCBjb250YWlucyB6ZXJvCisgICAgIGZkIGZsYWdzLCBvciBpdCB3aWxsIHJldHVybiBXU0FFSU5WQUwuICBCdXQsIGl0IGFsc28gY2FuJ3QgYmUgY2FsbGVkCisgICAgIHdpdGggbm8gZmRfc2V0cyBhdCBhbGwhICBGcm9tIHRoZSBkb2N1bWVudGF0aW9uOgogCi0gICAgICAgICBBbnkgdHdvIG9mIHRoZSBwYXJhbWV0ZXJzLCByZWFkZmRzLCB3cml0ZWZkcywgb3IgZXhjZXB0ZmRzLCBjYW4gYmUKLSAgICAgICAgIGdpdmVuIGFzIG51bGwuIEF0IGxlYXN0IG9uZSBtdXN0IGJlIG5vbi1udWxsLCBhbmQgYW55IG5vbi1udWxsCi0gICAgICAgICBkZXNjcmlwdG9yIHNldCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGhhbmRsZSB0byBhIHNvY2tldC4KKyAgICAgQW55IHR3byBvZiB0aGUgcGFyYW1ldGVycywgcmVhZGZkcywgd3JpdGVmZHMsIG9yIGV4Y2VwdGZkcywgY2FuIGJlCisgICAgIGdpdmVuIGFzIG51bGwuIEF0IGxlYXN0IG9uZSBtdXN0IGJlIG5vbi1udWxsLCBhbmQgYW55IG5vbi1udWxsCisgICAgIGRlc2NyaXB0b3Igc2V0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgaGFuZGxlIHRvIGEgc29ja2V0LgogCi0gICAgICAgV2Uga25vdyB0aGF0IHdlIGhhdmUgYXQgbGVhc3Qgb25lIGJpdCBzZXQgaW4gYXQgbGVhc3QgdHdvIGZkX3NldHMgaW4KLSAgICAgICB0aGlzIGNhc2UsIGJ1dCB3ZSBtYXkgaGF2ZSBubyBiaXRzIHNldCBpbiBlaXRoZXIgZmRzX3JlYWQgb3IgZmRfd3JpdGUsCi0gICAgICAgc28gY2hlY2sgZm9yIHRoYXQgYW5kIGhhbmRsZSBpdC4gIEx1Y2tpbHksIHdpdGggV2luU29jaywgd2UgY2FuIF9hbHNvXwotICAgICAgIGFzayBob3cgbWFueSBiaXRzIGFyZSBzZXQgb24gYW4gZmRfc2V0LgorICAgICBXZSBrbm93IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgYml0IHNldCBpbiBhdCBsZWFzdCB0d28gZmRfc2V0cyBpbgorICAgICB0aGlzIGNhc2UsIGJ1dCB3ZSBtYXkgaGF2ZSBubyBiaXRzIHNldCBpbiBlaXRoZXIgZmRzX3JlYWQgb3IgZmRfd3JpdGUsCisgICAgIHNvIGNoZWNrIGZvciB0aGF0IGFuZCBoYW5kbGUgaXQuICBMdWNraWx5LCB3aXRoIFdpblNvY2ssIHdlIGNhbiBfYWxzb18KKyAgICAgYXNrIGhvdyBtYW55IGJpdHMgYXJlIHNldCBvbiBhbiBmZF9zZXQuCiAKLSAgICAgICBJdCBpcyB1bmNsZWFyIHdoeSBXaW5Tb2NrIGRvZXNuJ3QganVzdCBoYW5kbGUgdGhpcyBmb3IgdXMgaW5zdGVhZCBvZgotICAgICAgIGNhbGxpbmcgdGhpcyBhbiBlcnJvci4KKyAgICAgSXQgaXMgdW5jbGVhciB3aHkgV2luU29jayBkb2Vzbid0IGp1c3QgaGFuZGxlIHRoaXMgZm9yIHVzIGluc3RlYWQgb2YKKyAgICAgY2FsbGluZyB0aGlzIGFuIGVycm9yLgogCi0gICAgICAgTm90ZSBhbHNvIHRoYXQgV2luU29jayBpZ25vcmVzIHRoZSBmaXJzdCBhcmd1bWVudCwgc28gd2UgZG9uJ3Qgd29ycnkKLSAgICAgICBhYm91dCB0aGUgZmFjdCB0aGF0IG1heGZkIGlzIGNvbXB1dGVkIGluY29ycmVjdGx5IHdpdGggV2luU29jayAoc2luY2UKLSAgICAgICBjdXJsX3NvY2tldF90IGlzIHVuc2lnbmVkIGluIHN1Y2ggY2FzZXMgYW5kIHRodXMgLTEgaXMgdGhlIGxhcmdlc3QKLSAgICAgICB2YWx1ZSkuCi0gICAgKi8KKyAgICAgTm90ZSBhbHNvIHRoYXQgV2luU29jayBpZ25vcmVzIHRoZSBmaXJzdCBhcmd1bWVudCwgc28gd2UgZG9uJ3Qgd29ycnkKKyAgICAgYWJvdXQgdGhlIGZhY3QgdGhhdCBtYXhmZCBpcyBjb21wdXRlZCBpbmNvcnJlY3RseSB3aXRoIFdpblNvY2sgKHNpbmNlCisgICAgIGN1cmxfc29ja2V0X3QgaXMgdW5zaWduZWQgaW4gc3VjaCBjYXNlcyBhbmQgdGh1cyAtMSBpcyB0aGUgbGFyZ2VzdAorICAgICB2YWx1ZSkuCisgICovCiAjaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAotICAgICAgICAgICAgICAgZmRzX3JlYWQuZmRfY291bnQgPyAmZmRzX3JlYWQgOiBOVUxMLAotICAgICAgICAgICAgICAgZmRzX3dyaXRlLmZkX2NvdW50ID8gJmZkc193cml0ZSA6IE5VTEwsCi0gICAgICAgICAgICAgICAmZmRzX2VyciwgcHRpbWVvdXQpOworICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAorICAgICAgICAgICAgIGZkc19yZWFkLmZkX2NvdW50ID8gJmZkc19yZWFkIDogTlVMTCwKKyAgICAgICAgICAgICBmZHNfd3JpdGUuZmRfY291bnQgPyAmZmRzX3dyaXRlIDogTlVMTCwKKyAgICAgICAgICAgICAmZmRzX2VyciwgcHRpbWVvdXQpOwogI2Vsc2UKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLCAmZmRzX3JlYWQsICZmZHNfd3JpdGUsICZmZHNfZXJyLCBwdGltZW91dCk7CisgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHB0aW1lb3V0KTsKICNlbmRpZgogCi0gICAgaWYociAhPSAtMSkKLSAgICAgIGJyZWFrOwotICAgIGVycm9yID0gU09DS0VSUk5POwotICAgIGlmKGVycm9yICYmIEVSUk9SX05PVF9FSU5UUihlcnJvcikpCi0gICAgICBicmVhazsKLSAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ19tcyA9IChpbnQpKHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCkpOwotICAgICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICAgIHIgPSAwOyAgLyogU2ltdWxhdGUgYSAiY2FsbCB0aW1lZCBvdXQiIGNhc2UgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlKHIgPT0gLTEpOwotCiAgIGlmKHIgPCAwKQogICAgIHJldHVybiAtMTsKICAgaWYociA9PSAwKQpAQCAtMzk5LDcgKzM0NCw2IEBACiAgIGZkX3NldCBmZHNfZXJyOwogICBjdXJsX3NvY2tldF90IG1heGZkOwogI2VuZGlmCi0gIHN0cnVjdCBjdXJsdGltZSBpbml0aWFsX3R2ID0gezAsIDB9OwogICBib29sIGZkc19ub25lID0gVFJVRTsKICAgdW5zaWduZWQgaW50IGk7CiAgIGludCBwZW5kaW5nX21zID0gMDsKQEAgLTQyNSwzMSArMzY5LDE1IEBACiAKICAgaWYodGltZW91dF9tcyA+IDApIHsKICAgICBwZW5kaW5nX21zID0gdGltZW91dF9tczsKLSAgICBpbml0aWFsX3R2ID0gQ3VybF9ub3coKTsKICAgfQogCiAjaWZkZWYgSEFWRV9QT0xMX0ZJTkUKIAotICBkbyB7Ci0gICAgaW50IGVycm9yOwotICAgIGlmKHRpbWVvdXRfbXMgPCAwKQotICAgICAgcGVuZGluZ19tcyA9IC0xOwotICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpCi0gICAgICBwZW5kaW5nX21zID0gMDsKLSAgICByID0gcG9sbCh1ZmRzLCBuZmRzLCBwZW5kaW5nX21zKTsKLSAgICBpZihyICE9IC0xKQotICAgICAgYnJlYWs7Ci0gICAgZXJyb3IgPSBTT0NLRVJSTk87Ci0gICAgaWYoZXJyb3IgJiYgRVJST1JfTk9UX0VJTlRSKGVycm9yKSkKLSAgICAgIGJyZWFrOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX21zID0gKGludCkodGltZW91dF9tcyAtIEVMQVBTRURfTVMoKSk7Ci0gICAgICBpZihwZW5kaW5nX21zIDw9IDApIHsKLSAgICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7CisgIGlmKHRpbWVvdXRfbXMgPCAwKQorICAgIHBlbmRpbmdfbXMgPSAtMTsKKyAgZWxzZSBpZighdGltZW91dF9tcykKKyAgICBwZW5kaW5nX21zID0gMDsKKyAgciA9IHBvbGwodWZkcywgbmZkcywgcGVuZGluZ19tcyk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpAQCAtNTAyLDQyICs0MzAsMjcgQEAKIAogICBwdGltZW91dCA9ICh0aW1lb3V0X21zIDwgMCkgPyBOVUxMIDogJnBlbmRpbmdfdHY7CiAKLSAgZG8gewotICAgIGludCBlcnJvcjsKLSAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ190di50dl9zZWMgPSBwZW5kaW5nX21zIC8gMTAwMDsKLSAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChwZW5kaW5nX21zICUgMTAwMCkgKiAxMDAwOwotICAgIH0KLSAgICBlbHNlIGlmKCF0aW1lb3V0X21zKSB7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IDA7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3VzZWMgPSAwOwotICAgIH0KKyAgaWYodGltZW91dF9tcyA+IDApIHsKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOworICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChwZW5kaW5nX21zICUgMTAwMCkgKiAxMDAwOworICB9CisgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IDA7CisgICAgcGVuZGluZ190di50dl91c2VjID0gMDsKKyAgfQogCiAjaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAotICAgICAgICAgICAgICAgLyogV2luU29jayBzZWxlY3QoKSBjYW4ndCBoYW5kbGUgZmRfc2V0cyB3aXRoIHplcm8gYml0cyBzZXQsIHNvCi0gICAgICAgICAgICAgICAgICBkb24ndCBnaXZlIGl0IHN1Y2ggYXJndW1lbnRzLiAgU2VlIHRoZSBjb21tZW50IGFib3V0IHRoaXMgaW4KLSAgICAgICAgICAgICAgICAgIEN1cmxfY2hlY2tfc29ja2V0KCkuCi0gICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgZmRzX3JlYWQuZmRfY291bnQgPyAmZmRzX3JlYWQgOiBOVUxMLAotICAgICAgICAgICAgICAgZmRzX3dyaXRlLmZkX2NvdW50ID8gJmZkc193cml0ZSA6IE5VTEwsCi0gICAgICAgICAgICAgICBmZHNfZXJyLmZkX2NvdW50ID8gJmZkc19lcnIgOiBOVUxMLCBwdGltZW91dCk7CisgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsCisgICAgICAgICAgICAgLyogV2luU29jayBzZWxlY3QoKSBjYW4ndCBoYW5kbGUgZmRfc2V0cyB3aXRoIHplcm8gYml0cyBzZXQsIHNvCisgICAgICAgICAgICAgICAgZG9uJ3QgZ2l2ZSBpdCBzdWNoIGFyZ3VtZW50cy4gIFNlZSB0aGUgY29tbWVudCBhYm91dCB0aGlzIGluCisgICAgICAgICAgICAgICAgQ3VybF9jaGVja19zb2NrZXQoKS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgIGZkc19yZWFkLmZkX2NvdW50ID8gJmZkc19yZWFkIDogTlVMTCwKKyAgICAgICAgICAgICBmZHNfd3JpdGUuZmRfY291bnQgPyAmZmRzX3dyaXRlIDogTlVMTCwKKyAgICAgICAgICAgICBmZHNfZXJyLmZkX2NvdW50ID8gJmZkc19lcnIgOiBOVUxMLCBwdGltZW91dCk7CiAjZWxzZQotICAgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHB0aW1lb3V0KTsKKyAgciA9IHNlbGVjdCgoaW50KW1heGZkICsgMSwgJmZkc19yZWFkLCAmZmRzX3dyaXRlLCAmZmRzX2VyciwgcHRpbWVvdXQpOwogI2VuZGlmCi0gICAgaWYociAhPSAtMSkKLSAgICAgIGJyZWFrOwotICAgIGVycm9yID0gU09DS0VSUk5POwotICAgIGlmKGVycm9yICYmIEVSUk9SX05PVF9FSU5UUihlcnJvcikpCi0gICAgICBicmVhazsKLSAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCk7Ci0gICAgICBpZihwZW5kaW5nX21zIDw9IDApIHsKLSAgICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWxlY3QuaAppbmRleCA5YTFiYTQ1Li5lYzMwMjFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWxlY3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWxlY3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzUsMjAgKzc1LDEyIEBACiBpbnQgQ3VybF9zb2NrZXRfY2hlY2soY3VybF9zb2NrZXRfdCByZWFkZmQsIGN1cmxfc29ja2V0X3QgcmVhZGZkMiwKICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQsCiAgICAgICAgICAgICAgICAgICAgICAgdGltZV90IHRpbWVvdXRfbXMpOwotCiAjZGVmaW5lIFNPQ0tFVF9SRUFEQUJMRSh4LHopIFwKLSAgQ3VybF9zb2NrZXRfY2hlY2soeCwgQ1VSTF9TT0NLRVRfQkFELCBDVVJMX1NPQ0tFVF9CQUQsIHopCisgIEN1cmxfc29ja2V0X2NoZWNrKHgsIENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCAodGltZV90KXopCiAjZGVmaW5lIFNPQ0tFVF9XUklUQUJMRSh4LHopIFwKLSAgQ3VybF9zb2NrZXRfY2hlY2soQ1VSTF9TT0NLRVRfQkFELCBDVVJMX1NPQ0tFVF9CQUQsIHgsIHopCisgIEN1cmxfc29ja2V0X2NoZWNrKENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB4LCAodGltZV90KXopCiAKIGludCBDdXJsX3BvbGwoc3RydWN0IHBvbGxmZCB1ZmRzW10sIHVuc2lnbmVkIGludCBuZmRzLCBpbnQgdGltZW91dF9tcyk7Ci0KLS8qIE9uIG5vbi1ET1MgYW5kIG5vbi1XaW5zb2NrIHBsYXRmb3Jtcywgd2hlbiBDdXJsX2Fja19laW50ciBpcyBzZXQsCi0gKiBFSU5UUiBjb25kaXRpb24gaXMgaG9ub3JlZCBhbmQgZnVuY3Rpb24gbWlnaHQgZXhpdCBlYXJseSB3aXRob3V0Ci0gKiBhd2FpdGluZyBmdWxsIHRpbWVvdXQuICBPdGhlcndpc2UgRUlOVFIgd2lsbCBiZSBpZ25vcmVkIGFuZCBmdWxsCi0gKiB0aW1lb3V0IHdpbGwgZWxhcHNlLiAqLwotZXh0ZXJuIGludCBDdXJsX2Fja19laW50cjsKLQogaW50IEN1cmxfd2FpdF9tcyhpbnQgdGltZW91dF9tcyk7CiAKICNpZmRlZiBUUEYKQEAgLTEwOSw3ICsxMDEsNyBAQAogICAgIFNFVF9TT0NLRVJSTk8oRUlOVkFMKTsgXAogICAgIHJldHVybiAtMTsgXAogICB9IFwKLX0gV0hJTEVfRkFMU0UKK30gd2hpbGUoMCkKICNlbmRpZgogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU0VMRUNUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbmRmLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZW5kZi5jCmluZGV4IDU5MTNlYTQuLjZlZjQ3YWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbmRmLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VuZGYuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzYsMTMgKzM2LDE0IEBACiAjaW5jbHVkZSAic2VuZGYuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAidnRscy92dGxzLmgiCi0jaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidnNzaC9zc2guaCIKICNpbmNsdWRlICJlYXN5aWYuaCIKICNpbmNsdWRlICJtdWx0aWlmLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiCiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNpbmNsdWRlICJzZWxlY3QuaCIKICNpbmNsdWRlICJzdHJkdXAuaCIKKyNpbmNsdWRlICJodHRwMi5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTIyNCw3ICsyMjUsNyBAQAogICAodm9pZClzb2NraW5kZXg7CiAgIHJldHVybiBmYWxzZTsKIH0KLSNkZWZpbmUgcHJlX3JlY2VpdmVfcGxhaW4oYyxuKSBkbyB7fSBXSElMRV9GQUxTRQorI2RlZmluZSBwcmVfcmVjZWl2ZV9wbGFpbihjLG4pIGRvIHt9IHdoaWxlKDApCiAjZGVmaW5lIGdldF9wcmVfcmVjdmVkKGMsbixiLGwpIDAKICNlbmRpZiAvKiAhIFVTRV9SRUNWX0JFRk9SRV9TRU5EX1dPUktBUk9VTkQgKi8KIApAQCAtNTAxLDYgKzUwMiw5IEBACiAgIHVuc2lnbmVkIGludCBpOwogICBib29sIG5ld3R5cGUgPSBUUlVFOwogCisgIC8qIElmIHRoaXMgdHJhbnNmZXJzIG92ZXIgSFRUUC8yLCBwYXVzZSB0aGUgc3RyZWFtISAqLworICBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShkYXRhLCBUUlVFKTsKKwogICBpZihzLT50ZW1wY291bnQpIHsKICAgICBmb3IoaSA9IDA7IGk8IHMtPnRlbXBjb3VudDsgaSsrKSB7CiAgICAgICBpZihzLT50ZW1wd3JpdGVbaV0udHlwZSA9PSB0eXBlKSB7CkBAIC01MjksNiArNTMzLDggQEAKICAgICAvKiB1cGRhdGUgdGhlIHBvaW50ZXIgYW5kIHRoZSBzaXplICovCiAgICAgcy0+dGVtcHdyaXRlW2ldLmJ1ZiA9IG5ld3B0cjsKICAgICBzLT50ZW1wd3JpdGVbaV0ubGVuID0gbmV3bGVuOworCisgICAgbGVuID0gbmV3bGVuOyAvKiBmb3IgdGhlIGRlYnVnIG91dHB1dCBiZWxvdyAqLwogICB9CiAgIGVsc2UgewogICAgIGR1cGwgPSBDdXJsX21lbWR1cChwdHIsIGxlbik7CkBAIC02OTIsMTkgKzY5OCwyMCBAQAogICBzc2l6ZV90IG5yZWFkID0gc3JlYWQoc29ja2ZkLCBidWYsIGJ5dGVzZnJvbXNvY2tldCk7CiAKICAgaWYoLTEgPT0gbnJlYWQpIHsKLSAgICBpbnQgZXJyID0gU09DS0VSUk5POwotICAgIGludCByZXR1cm5fZXJyb3I7CisgICAgY29uc3QgaW50IGVyciA9IFNPQ0tFUlJOTzsKKyAgICBjb25zdCBib29sIHJldHVybl9lcnJvciA9CiAjaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByZXR1cm5fZXJyb3IgPSBXU0FFV09VTERCTE9DSyA9PSBlcnI7CisgICAgICBXU0FFV09VTERCTE9DSyA9PSBlcnIKICNlbHNlCi0gICAgcmV0dXJuX2Vycm9yID0gRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnIgfHwgRUlOVFIgPT0gZXJyOworICAgICAgRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnIgfHwgRUlOVFIgPT0gZXJyCiAjZW5kaWYKKyAgICAgIDsKKyAgICAqbiA9IDA7IC8qIG5vIGRhdGEgcmV0dXJuZWQgKi8KICAgICBpZihyZXR1cm5fZXJyb3IpCiAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CiAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CiAgIH0KIAotICAvKiB3ZSBvbmx5IHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCB3aGVuIHdlIHJldHVybiBPSyAqLwogICAqbiA9IG5yZWFkOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXRvcHQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCmluZGV4IDkyY2Q1YjIuLjJlNDk0YTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTksOCArMTE5LDExIEBACiAjZGVmaW5lIENfU1NMVkVSU0lPTl9WQUxVRSh4KSAoeCAmIDB4ZmZmZikKICNkZWZpbmUgQ19TU0xWRVJTSU9OX01BWF9WQUxVRSh4KSAoeCAmIDB4ZmZmZjAwMDApCiAKLXN0YXRpYyBDVVJMY29kZSB2c2V0b3B0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBwYXJhbSkKKy8qCisgKiBEbyBub3QgbWFrZSBDdXJsX3ZzZXRvcHQoKSBzdGF0aWM6IGl0IGlzIGNhbGxlZCBmcm9tCisgKiBwYWNrYWdlcy9PUzQwMC9jY3NpZGN1cmwuYy4KKyAqLworQ1VSTGNvZGUgQ3VybF92c2V0b3B0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLCB2YV9saXN0IHBhcmFtKQogewogICBjaGFyICphcmdwdHI7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwpAQCAtMzEyLDcgKzMxNSw3IEBACiAgICAgICogUGFyc2UgdGhlICRIT01FLy5uZXRyYyBmaWxlCiAgICAgICovCiAgICAgYXJnID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKLSAgICBpZigoYXJnIDwgQ1VSTF9ORVRSQ19JR05PUkVEKSB8fCAoYXJnID4gQ1VSTF9ORVRSQ19SRVFVSVJFRCkpCisgICAgaWYoKGFyZyA8IENVUkxfTkVUUkNfSUdOT1JFRCkgfHwgKGFyZyA+PSBDVVJMX05FVFJDX0xBU1QpKQogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICBkYXRhLT5zZXQudXNlX25ldHJjID0gKGVudW0gQ1VSTF9ORVRSQ19PUFRJT04pYXJnOwogICAgIGJyZWFrOwpAQCAtMzM5LDcgKzM0Miw3IEBACiAgICAgICogY3VybC9jdXJsLmggaGVhZGVyIGZpbGUuCiAgICAgICovCiAgICAgYXJnID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKLSAgICBpZigoYXJnIDwgQ1VSTF9USU1FQ09ORF9OT05FKSB8fCAoYXJnID4gQ1VSTF9USU1FQ09ORF9MQVNUTU9EKSkKKyAgICBpZigoYXJnIDwgQ1VSTF9USU1FQ09ORF9OT05FKSB8fCAoYXJnID49IENVUkxfVElNRUNPTkRfTEFTVCkpCiAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICAgIGRhdGEtPnNldC50aW1lY29uZGl0aW9uID0gKGN1cmxfVGltZUNvbmQpYXJnOwogICAgIGJyZWFrOwpAQCAtNzQ5LDcgKzc1Miw3IEBACiAgICAgfQogICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoYXJncHRyLCAiRkxVU0giKSkgewogICAgICAgLyogZmx1c2ggY29va2llcyB0byBmaWxlLCB0YWtlcyBjYXJlIG9mIHRoZSBsb2NraW5nICovCi0gICAgICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgMCk7CisgICAgICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgRkFMU0UpOwogICAgIH0KICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGFyZ3B0ciwgIlJFTE9BRCIpKSB7CiAgICAgICAvKiByZWxvYWQgY29va2llcyBmcm9tIGZpbGUgKi8KQEAgLTgwNiwxMSArODA5LDE2IEBACiAgICAgYXJnID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKICAgICBpZihhcmcgPCBDVVJMX0hUVFBfVkVSU0lPTl9OT05FKQogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyNpZmRlZiBFTkFCTEVfUVVJQworICAgIGlmKGFyZyA9PSBDVVJMX0hUVFBfVkVSU0lPTl8zKQorICAgICAgOworICAgIGVsc2UKKyNlbmRpZgogI2lmbmRlZiBVU0VfTkdIVFRQMgogICAgIGlmKGFyZyA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yKQogICAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwogI2Vsc2UKLSAgICBpZihhcmcgPiBDVVJMX0hUVFBfVkVSU0lPTl8yX1BSSU9SX0tOT1dMRURHRSkKKyAgICBpZihhcmcgPj0gQ1VSTF9IVFRQX1ZFUlNJT05fTEFTVCkKICAgICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKICAgICBpZihhcmcgPT0gQ1VSTF9IVFRQX1ZFUlNJT05fTk9ORSkKICAgICAgIGFyZyA9IENVUkxfSFRUUF9WRVJTSU9OXzJUTFM7CkBAIC0xMTAxLDcgKzExMDksNyBAQAogICAgICAqIEhvdyBkbyBhY2Nlc3MgZmlsZXMgb3ZlciBGVFAuCiAgICAgICovCiAgICAgYXJnID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKLSAgICBpZigoYXJnIDwgQ1VSTEZUUE1FVEhPRF9ERUZBVUxUKSB8fCAoYXJnID4gQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QpKQorICAgIGlmKChhcmcgPCBDVVJMRlRQTUVUSE9EX0RFRkFVTFQpIHx8IChhcmcgPj0gQ1VSTEZUUE1FVEhPRF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID0gKGN1cmxfZnRwZmlsZSlhcmc7CiAgICAgYnJlYWs7CkBAIC0xMTI4LDcgKzExMzYsNyBAQAogCiAgIGNhc2UgQ1VSTE9QVF9GVFBfU1NMX0NDQzoKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMRlRQU1NMX0NDQ19OT05FKSB8fCAoYXJnID4gQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFKSkKKyAgICBpZigoYXJnIDwgQ1VSTEZUUFNTTF9DQ0NfTk9ORSkgfHwgKGFyZyA+PSBDVVJMRlRQU1NMX0NDQ19MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cF9jY2MgPSAoY3VybF9mdHBjY2MpYXJnOwogICAgIGJyZWFrOwpAQCAtMTE1Niw3ICsxMTY0LDcgQEAKICAgICAgKiBTZXQgYSBzcGVjaWZpYyBhdXRoIGZvciBGVFAtU1NMIHRyYW5zZmVycy4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMRlRQQVVUSF9ERUZBVUxUKSB8fCAoYXJnID4gQ1VSTEZUUEFVVEhfVExTKSkKKyAgICBpZigoYXJnIDwgQ1VSTEZUUEFVVEhfREVGQVVMVCkgfHwgKGFyZyA+PSBDVVJMRlRQQVVUSF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cHNzbGF1dGggPSAoY3VybF9mdHBhdXRoKWFyZzsKICAgICBicmVhazsKQEAgLTE3NzUsMTYgKzE3ODMsOSBAQAogICAgIGFyZyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAKICAgICAvKiBPYnZpb3VzbHkgcGVvcGxlIGFyZSBub3QgcmVhZGluZyBkb2N1bWVudGF0aW9uIGFuZCB0b28gbWFueSB0aG91Z2h0Ci0gICAgICAgdGhpcyBhcmd1bWVudCB0b29rIGEgYm9vbGVhbiB3aGVuIGl0IHdhc24ndCBhbmQgbWlzdXNlZCBpdC4gV2UgdGh1cyBiYW4KLSAgICAgICAxIGFzIGEgc2Vuc2libGUgaW5wdXQgYW5kIHdlIHdhcm4gYWJvdXQgaXRzIHVzZS4gVGhlbiB3ZSBvbmx5IGhhdmUgdGhlCi0gICAgICAgMiBhY3Rpb24gaW50ZXJuYWxseSBzdG9yZWQgYXMgVFJVRS4gKi8KLQotICAgIGlmKDEgPT0gYXJnKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBubyBsb25nZXIgc3VwcG9ydHMgMSBhcyB2YWx1ZSEiKTsKLSAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7Ci0gICAgfQotCi0gICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeWhvc3QgPSAoMCAhPSBhcmcpID8gVFJVRSA6IEZBTFNFOworICAgICAgIHRoaXMgYXJndW1lbnQgdG9vayBhIGJvb2xlYW4gd2hlbiBpdCB3YXNuJ3QgYW5kIG1pc3VzZWQgaXQuCisgICAgICAgVHJlYXQgMSBhbmQgMiB0aGUgc2FtZSAqLworICAgIGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlob3N0ID0gKGJvb2wpKChhcmcgJiAzKSA/IFRSVUUgOiBGQUxTRSk7CiAKICAgICAvKiBVcGRhdGUgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzc2xfY29uZmlnLiAqLwogICAgIGlmKGRhdGEtPmNvbm4pIHsKQEAgLTE3OTksMTcgKzE4MDAsOCBAQAogICAgICAqLwogICAgIGFyZyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAKLSAgICAvKiBPYnZpb3VzbHkgcGVvcGxlIGFyZSBub3QgcmVhZGluZyBkb2N1bWVudGF0aW9uIGFuZCB0b28gbWFueSB0aG91Z2h0Ci0gICAgICAgdGhpcyBhcmd1bWVudCB0b29rIGEgYm9vbGVhbiB3aGVuIGl0IHdhc24ndCBhbmQgbWlzdXNlZCBpdC4gV2UgdGh1cyBiYW4KLSAgICAgICAxIGFzIGEgc2Vuc2libGUgaW5wdXQgYW5kIHdlIHdhcm4gYWJvdXQgaXRzIHVzZS4gVGhlbiB3ZSBvbmx5IGhhdmUgdGhlCi0gICAgICAgMiBhY3Rpb24gaW50ZXJuYWxseSBzdG9yZWQgYXMgVFJVRS4gKi8KLQotICAgIGlmKDEgPT0gYXJnKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBubyBsb25nZXIgc3VwcG9ydHMgMSBhcyB2YWx1ZSEiKTsKLSAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7Ci0gICAgfQotCi0gICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3QgPSAoMCAhPSBhcmcpP1RSVUU6RkFMU0U7CisgICAgLyogVHJlYXQgYm90aCAxIGFuZCAyIGFzIFRSVUUgKi8KKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyaWZ5aG9zdCA9IChib29sKSgoYXJnICYgMyk/VFJVRTpGQUxTRSk7CiAKICAgICAvKiBVcGRhdGUgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBwcm94eV9zc2xfY29uZmlnLiAqLwogICAgIGlmKGRhdGEtPmNvbm4pIHsKQEAgLTIxMzEsNyArMjEyMyw3IEBACiAgICAgICogTWFrZSB0cmFuc2ZlcnMgYXR0ZW1wdCB0byB1c2UgU1NML1RMUy4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMVVNFU1NMX05PTkUpIHx8IChhcmcgPiBDVVJMVVNFU1NMX0FMTCkpCisgICAgaWYoKGFyZyA8IENVUkxVU0VTU0xfTk9ORSkgfHwgKGFyZyA+PSBDVVJMVVNFU1NMX0xBU1QpKQogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICBkYXRhLT5zZXQudXNlX3NzbCA9IChjdXJsX3VzZXNzbClhcmc7CiAgICAgYnJlYWs7CkBAIC0yMTQxLDYgKzIxMzMsNyBAQAogICAgIGRhdGEtPnNldC5zc2wuZW5hYmxlX2JlYXN0ID0KICAgICAgIChib29sKSgoYXJnJkNVUkxTU0xPUFRfQUxMT1dfQkVBU1QpID8gVFJVRSA6IEZBTFNFKTsKICAgICBkYXRhLT5zZXQuc3NsLm5vX3Jldm9rZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBkYXRhLT5zZXQuc3NsLm5vX3BhcnRpYWxjaGFpbiA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUEFSVElBTENIQUlOKTsKICAgICBicmVhazsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKQEAgLTIxNDksNiArMjE0Miw3IEBACiAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5lbmFibGVfYmVhc3QgPQogICAgICAgKGJvb2wpKChhcmcmQ1VSTFNTTE9QVF9BTExPV19CRUFTVCkgPyBUUlVFIDogRkFMU0UpOwogICAgIGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlID0gISEoYXJnICYgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOworICAgIGRhdGEtPnNldC5wcm94eV9zc2wubm9fcGFydGlhbGNoYWluID0gISEoYXJnICYgQ1VSTFNTTE9QVF9OT19QQVJUSUFMQ0hBSU4pOwogICAgIGJyZWFrOwogI2VuZGlmCiAKQEAgLTIyOTQsNyArMjI4OCw3IEBACiAKICAgY2FzZSBDVVJMT1BUX1NTSF9LRVlGVU5DVElPTjoKICAgICAvKiBzZXR0aW5nIHRvIE5VTEwgaXMgZmluZSBzaW5jZSB0aGUgc3NoLmMgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgd2lsbAotICAgICAgIHRoZW4gcmV2ZXIgdG8gdXNlIHRoZSBpbnRlcm5hbCBkZWZhdWx0ICovCisgICAgICAgdGhlbiByZXZlcnQgdG8gdXNlIHRoZSBpbnRlcm5hbCBkZWZhdWx0ICovCiAgICAgZGF0YS0+c2V0LnNzaF9rZXlmdW5jID0gdmFfYXJnKHBhcmFtLCBjdXJsX3NzaGtleWNhbGxiYWNrKTsKICAgICBicmVhazsKIApAQCAtMjM3MSw4ICsyMzY1LDcgQEAKICAgY2FzZSBDVVJMT1BUX1JFRElSX1BST1RPQ09MUzoKICAgICAvKiBzZXQgdGhlIGJpdG1hc2sgZm9yIHRoZSBwcm90b2NvbHMgdGhhdCBsaWJjdXJsIGlzIGFsbG93ZWQgdG8gZm9sbG93IHRvLAogICAgICAgIGFzIGEgc3Vic2V0IG9mIHRoZSBDVVJMT1BUX1BST1RPQ09MUyBvbmVzLiBUaGF0IG1lYW5zIHRoZSBwcm90b2NvbCBuZWVkcwotICAgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uIERlZmF1bHRzCi0gICAgICAgdG8gYWxsIHByb3RvY29scyBleGNlcHQgRklMRSBhbmQgU0NQLiAqLworICAgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uICovCiAgICAgZGF0YS0+c2V0LnJlZGlyX3Byb3RvY29scyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKQEAgLTIzOTgsOCArMjM5MSwxOCBAQAogICAgIC8qIFNldCB0aGUgbGlzdCBvZiBtYWlsIHJlY2lwaWVudHMgKi8KICAgICBkYXRhLT5zZXQubWFpbF9yY3B0ID0gdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX01BSUxfUkNQVF9BTExMT1dGQUlMUzoKKyAgICAvKiBhbGxvdyBSQ1BUIFRPIGNvbW1hbmQgdG8gZmFpbCBmb3Igc29tZSByZWNpcGllbnRzICovCisgICAgZGF0YS0+c2V0Lm1haWxfcmNwdF9hbGxvd2ZhaWxzID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CisgICAgYnJlYWs7CiAjZW5kaWYKIAorICBjYXNlIENVUkxPUFRfU0FTTF9BVVRIWklEOgorICAgIC8qIEF1dGhvcmlzYXRpb24gaWRlbnRpdHkgKGlkZW50aXR5IHRvIGFjdCBhcykgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU0FTTF9BVVRIWklEXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCiAgIGNhc2UgQ1VSTE9QVF9TQVNMX0lSOgogICAgIC8qIEVuYWJsZS9kaXNhYmxlIFNBU0wgaW5pdGlhbCByZXNwb25zZSAqLwogICAgIGRhdGEtPnNldC5zYXNsX2lyID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CkBAIC0yNTAzLDcgKzI1MDYsNyBAQAogCiAgIGNhc2UgQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VROgogICAgIC8qIFNhbWUgYXMgdGhlIGFib3ZlLCBidXQgZm9yIHNlcnZlci1pbml0aWF0ZWQgcmVxdWVzdHMgKi8KLSAgICBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXEgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9zZXJ2ZXJfQ1NlcSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKICAgY2FzZSBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBOgpAQCAtMjYxNSwxNCArMjYxOCwxMiBAQAogICAgIHJlc3VsdCA9IENVUkxFX05PVF9CVUlMVF9JTjsKICNlbmRpZgogICAgIGJyZWFrOwotI2lmZGVmIFVTRV9OR0hUVFAyCiAgIGNhc2UgQ1VSTE9QVF9TU0xfRU5BQkxFX05QTjoKICAgICBkYXRhLT5zZXQuc3NsX2VuYWJsZV9ucG4gPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NTTF9FTkFCTEVfQUxQTjoKICAgICBkYXRhLT5zZXQuc3NsX2VuYWJsZV9hbHBuID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CiAgICAgYnJlYWs7Ci0jZW5kaWYKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCiAgIGNhc2UgQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRIOgogICAgIGRhdGEtPnNldC5hYnN0cmFjdF91bml4X3NvY2tldCA9IEZBTFNFOwpAQCAtMjcyOCw3ICsyNzI5LDggQEAKICAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQUxUU1ZDXSwgYXJncHRyKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICh2b2lkKUN1cmxfYWx0c3ZjX2xvYWQoZGF0YS0+YXNpLCBhcmdwdHIpOworICAgIGlmKGFyZ3B0cikKKyAgICAgICh2b2lkKUN1cmxfYWx0c3ZjX2xvYWQoZGF0YS0+YXNpLCBhcmdwdHIpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfQUxUU1ZDX0NUUkw6CiAgICAgaWYoIWRhdGEtPmFzaSkgewpAQCAtMjc3MCw3ICsyNzcyLDcgQEAKIAogICB2YV9zdGFydChhcmcsIHRhZyk7CiAKLSAgcmVzdWx0ID0gdnNldG9wdChkYXRhLCB0YWcsIGFyZyk7CisgIHJlc3VsdCA9IEN1cmxfdnNldG9wdChkYXRhLCB0YWcsIGFyZyk7CiAKICAgdmFfZW5kKGFyZyk7CiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXRvcHQuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCmluZGV4IGM2NThlMDQuLjVlMzQ3ZGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMyw3ICsyMyw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBDVVJMY29kZSBDdXJsX3NldHN0cm9wdChjaGFyICoqY2hhcnAsIGNvbnN0IGNoYXIgKnMpOwotQ1VSTGNvZGUgQ3VybF92c2V0b3B0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJnKTsKK0NVUkxjb2RlIEN1cmxfdnNldG9wdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBDVVJMb3B0aW9uIG9wdGlvbiwgdmFfbGlzdCBhcmcpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU0VUT1BUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLW9zNDAwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC1vczQwMC5oCmluZGV4IGEzYzJhN2IuLjYyOWZkOTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLW9zNDAwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtb3M0MDAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjA2LDExICsyMDYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogZHN0YWRkciwgaW50IGFkZHJsZW4pOwogZXh0ZXJuIGludCBDdXJsX29zNDAwX3JlY3Zmcm9tKGludCBzZCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tYWRkciwgaW50ICphZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9nZXRwZWVybmFtZShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9nZXRzb2NrbmFtZShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKTsKIAogI2RlZmluZSBjb25uZWN0ICAgICAgICAgICAgICAgICBDdXJsX29zNDAwX2Nvbm5lY3QKICNkZWZpbmUgYmluZCAgICAgICAgICAgICAgICAgICAgQ3VybF9vczQwMF9iaW5kCiAjZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfc2VuZHRvCiAjZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfcmVjdmZyb20KKyNkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICAgICAgQ3VybF9vczQwMF9nZXRwZWVybmFtZQorI2RlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgICAgICBDdXJsX29zNDAwX2dldHNvY2tuYW1lCiAKICNpZmRlZiBIQVZFX0xJQloKICNkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgICAgQ3VybF9vczQwMF96bGliVmVyc2lvbgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zaGEyNTYuYwppbmRleCBmOTI4N2FmLi45NzIxNDE4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zaGEyNTYuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zaGEyNTYuYwpAQCAtNSw3ICs1LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBGbG9yaW4gUGV0cml1YywgPHBldHJpdWMuZmxvcmluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgRmxvcmluIFBldHJpdWMsIDxwZXRyaXVjLmZsb3JpbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNSwxNiArMzYsMTM1IEBACiAjZGVmaW5lIFVTRV9PUEVOU1NMX1NIQTI1NgogI2VuZGlmCiAKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9PUEVOU1NMICovCiAKLSNpZmRlZiBVU0VfT1BFTlNTTF9TSEEyNTYKKyNpZmRlZiBVU0VfTUJFRFRMUworI2luY2x1ZGUgPG1iZWR0bHMvdmVyc2lvbi5oPgorCisjaWYoTUJFRFRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAyMDcwMDAwKQorICAjZGVmaW5lIEhBU19SRVNVTFRfQ09ERV9CQVNFRF9GVU5DVElPTlMKKyNlbmRpZgorI2VuZGlmIC8qIFVTRV9NQkVEVExTICovCisKKy8qIFBsZWFzZSBrZWVwIHRoZSBTU0wgYmFja2VuZC1zcGVjaWZpYyAjaWYgYnJhbmNoZXMgaW4gdGhpcyBvcmRlcjoKKyAqCisgKiAxLiBVU0VfT1BFTlNTTAorICogMi4gVVNFX0dOVVRMU19ORVRUTEUKKyAqIDMuIFVTRV9HTlVUTFMKKyAqIDQuIFVTRV9NQkVEVExTCisgKiA1LiBVU0VfQ09NTU9OX0NSWVBUTworICogNi4gVVNFX1dJTjMyX0NSWVBUTworICoKKyAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBzYW1lIFNTTCBicmFuY2ggZ2V0cyBhY3RpdmF0ZWQgdGhyb3VnaG91dCB0aGlzIHNvdXJjZQorICogZmlsZSBldmVuIGlmIG11bHRpcGxlIGJhY2tlbmRzIGFyZSBlbmFibGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KKworI2lmIGRlZmluZWQoVVNFX09QRU5TU0xfU0hBMjU2KQorCiAvKiBXaGVuIE9wZW5TU0wgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGUgU0hBMjU2LWZ1bmN0aW9uIGZyb20gT3BlblNTTCAqLwogI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisKKyNpbmNsdWRlIDxuZXR0bGUvc2hhLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIHN0cnVjdCBzaGEyNTZfY3R4IFNIQTI1Nl9DVFg7CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgc2hhMjU2X2luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X1VwZGF0ZShTSEEyNTZfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisgIHNoYTI1Nl91cGRhdGUoY3R4LCBsZW5ndGgsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBTSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBTSEEyNTZfQ1RYICpjdHgpCit7CisgIHNoYTI1Nl9kaWdlc3QoY3R4LCBTSEEyNTZfRElHRVNUX1NJWkUsIGRpZ2VzdCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKworI2luY2x1ZGUgPGdjcnlwdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBnY3J5X21kX2hkX3QgU0hBMjU2X0NUWDsKKworc3RhdGljIHZvaWQgU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqY3R4KQoreworICBnY3J5X21kX29wZW4oY3R4LCBHQ1JZX01EX1NIQTI1NiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICBnY3J5X21kX3dyaXRlKCpjdHgsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgbWVtY3B5KGRpZ2VzdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCBTSEEyNTZfRElHRVNUX0xFTkdUSCk7CisgIGdjcnlfbWRfY2xvc2UoKmN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX01CRURUTFMpCisKKyNpbmNsdWRlIDxtYmVkdGxzL3NoYTI1Ni5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IFNIQTI1Nl9DVFg7CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmN0eCkKK3sKKyNpZiAhZGVmaW5lZChIQVNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TKQorICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoY3R4LCAwKTsKKyNlbHNlCisgICh2b2lkKSBtYmVkdGxzX3NoYTI1Nl9zdGFydHNfcmV0KGN0eCwgMCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X1VwZGF0ZShTSEEyNTZfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisjaWYgIWRlZmluZWQoSEFTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbHNlCisgICh2b2lkKSBtYmVkdGxzX3NoYTI1Nl91cGRhdGVfcmV0KGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBTSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBTSEEyNTZfQ1RYICpjdHgpCit7CisjaWYgIWRlZmluZWQoSEFTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19zaGEyNTZfZmluaXNoKGN0eCwgZGlnZXN0KTsKKyNlbHNlCisgICh2b2lkKSBtYmVkdGxzX3NoYTI1Nl9maW5pc2hfcmV0KGN0eCwgZGlnZXN0KTsKKyNlbmRpZgorfQorCiAjZWxzZQogCiAvKiBXaGVuIG5vIG90aGVyIGNyeXB0byBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgKi8KIAotLyogPT09PT0gc3RhcnQgLSBwdWJsaWMgZG9tYWluIFNIQTI1NiBpbXBsZW1lbnRhdGlvbiA9PT09PSAqLwogLyogVGhpcyBpcyBiYXNlZCBvbiBTSEEyNTYgaW1wbGVtZW50YXRpb24gaW4gTGliVG9tQ3J5cHQgdGhhdCB3YXMgcmVsZWFzZWQgaW50bwogICogcHVibGljIGRvbWFpbiBieSBUb20gU3QgRGVuaXMuICovCiAKQEAgLTk1LDcgKzIxNSw4IEBACiAgIHVuc2lnbmVkIGxvbmcgc3RhdGVbOF0sIGN1cmxlbjsKICAgdW5zaWduZWQgY2hhciBidWZbNjRdOwogfSBTSEEyNTZfQ1RYOwotLyogdGhlIEsgYXJyYXkgKi8KKworLyogVGhlIEsgYXJyYXkgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIEtbNjRdID0gewogICAweDQyOGEyZjk4VUwsIDB4NzEzNzQ0OTFVTCwgMHhiNWMwZmJjZlVMLCAweGU5YjVkYmE1VUwsIDB4Mzk1NmMyNWJVTCwKICAgMHg1OWYxMTFmMVVMLCAweDkyM2Y4MmE0VUwsIDB4YWIxYzVlZDVVTCwgMHhkODA3YWE5OFVMLCAweDEyODM1YjAxVUwsCkBAIC0xMTEsNiArMjMyLDcgQEAKICAgMHg2ODJlNmZmM1VMLCAweDc0OGY4MmVlVUwsIDB4NzhhNTYzNmZVTCwgMHg4NGM4NzgxNFVMLCAweDhjYzcwMjA4VUwsCiAgIDB4OTBiZWZmZmFVTCwgMHhhNDUwNmNlYlVMLCAweGJlZjlhM2Y3VUwsIDB4YzY3MTc4ZjJVTAogfTsKKwogLyogVmFyaW91cyBsb2dpY2FsIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBST1JjKHgsIHkpIFwKICgoKCgodW5zaWduZWQgbG9uZykoeCkgJiAweEZGRkZGRkZGVUwpID4+ICh1bnNpZ25lZCBsb25nKSgoeSkgJiAzMSkpIHwgXApAQCAtMTIzLDEzICsyNDUsMTUgQEAKICNkZWZpbmUgU2lnbWExKHgpICAgKFMoeCwgNikgXiBTKHgsIDExKSBeIFMoeCwgMjUpKQogI2RlZmluZSBHYW1tYTAoeCkgICAoUyh4LCA3KSBeIFMoeCwgMTgpIF4gUih4LCAzKSkKICNkZWZpbmUgR2FtbWExKHgpICAgKFMoeCwgMTcpIF4gUyh4LCAxOSkgXiBSKHgsIDEwKSkKLS8qIGNvbXByZXNzIDUxMi1iaXRzICovCisKKy8qIENvbXByZXNzIDUxMi1iaXRzICovCiBzdGF0aWMgaW50IHNoYTI1Nl9jb21wcmVzcyhzdHJ1Y3Qgc2hhMjU2X3N0YXRlICptZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKICAgdW5zaWduZWQgbG9uZyBTWzhdLCBXWzY0XTsKICAgaW50IGk7Ci0gIC8qIGNvcHkgc3RhdGUgaW50byBTICovCisKKyAgLyogQ29weSBzdGF0ZSBpbnRvIFMgKi8KICAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgU1tpXSA9IG1kLT5zdGF0ZVtpXTsKICAgfQpAQCAtMTQxLDYgKzI2NSw3IEBACiAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsKICAgICAgIFdbaSAtIDE2XTsKICAgfQorCiAgIC8qIENvbXByZXNzICovCiAjZGVmaW5lIFJORChhLGIsYyxkLGUsZixnLGgsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB1bnNpZ25lZCBsb25nIHQwID0gaCArIFNpZ21hMShlKSArIENoKGUsIGYsIGcpICsgS1tpXSArIFdbaV07IFwKQEAgLTE1MywxMiArMjc4LDE1IEBACiAgICAgdCA9IFNbN107IFNbN10gPSBTWzZdOyBTWzZdID0gU1s1XTsgU1s1XSA9IFNbNF07CiAgICAgU1s0XSA9IFNbM107IFNbM10gPSBTWzJdOyBTWzJdID0gU1sxXTsgU1sxXSA9IFNbMF07IFNbMF0gPSB0OwogICB9Ci0gIC8qIGZlZWRiYWNrICovCisKKyAgLyogRmVlZGJhY2sgKi8KICAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgbWQtPnN0YXRlW2ldID0gbWQtPnN0YXRlW2ldICsgU1tpXTsKICAgfQorCiAgIHJldHVybiAwOwogfQorCiAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlICovCiBzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChzdHJ1Y3Qgc2hhMjU2X3N0YXRlICptZCkKIHsKQEAgLTE3Myw3ICszMDEsOCBAQAogICBtZC0+c3RhdGVbNl0gPSAweDFGODNEOUFCVUw7CiAgIG1kLT5zdGF0ZVs3XSA9IDB4NUJFMENEMTlVTDsKIH0KLS8qKgorCisvKgogICAgUHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSB0aG91Z2ggdGhlIGhhc2gKICAgIEBwYXJhbSBtZCAgICAgVGhlIGhhc2ggc3RhdGUKICAgIEBwYXJhbSBpbiAgICAgVGhlIGRhdGEgdG8gaGFzaApAQCAtMTg1LDYgKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbmxlbikKIHsKICAgdW5zaWduZWQgbG9uZyBuOworCiAjZGVmaW5lIGJsb2NrX3NpemUgNjQKICAgaWYobWQtPmN1cmxlbiA+IHNpemVvZihtZC0+YnVmKSkKICAgICByZXR1cm4gLTE7CkBAIC0yMTAsOSArMzQwLDExIEBACiAgICAgICB9CiAgICAgfQogICB9CisKICAgcmV0dXJuIDA7CiB9Ci0vKioKKworLyoKICAgIFRlcm1pbmF0ZSB0aGUgaGFzaCB0byBnZXQgdGhlIGRpZ2VzdAogICAgQHBhcmFtIG1kICBUaGUgaGFzaCBzdGF0ZQogICAgQHBhcmFtIG91dCBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGhhc2ggKDMyIGJ5dGVzKQpAQCAtMjIyLDEzICszNTQsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaGEyNTZfc3RhdGUgKm1kKQogewogICBpbnQgaTsKKwogICBpZihtZC0+Y3VybGVuID49IHNpemVvZihtZC0+YnVmKSkKICAgICByZXR1cm4gLTE7Ci0gIC8qIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KKworICAvKiBJbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCiAgIG1kLT5sZW5ndGggKz0gbWQtPmN1cmxlbiAqIDg7Ci0gIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworCisgIC8qIEFwcGVuZCB0aGUgJzEnIGJpdCAqLwogICBtZC0+YnVmW21kLT5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikweDgwOwotICAvKiBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSBhYm92ZSA1NiBieXRlcyB3ZSBhcHBlbmQgemVyb3MKKworICAvKiBJZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSBhYm92ZSA1NiBieXRlcyB3ZSBhcHBlbmQgemVyb3MKICAgICogdGhlbiBjb21wcmVzcy4gIFRoZW4gd2UgY2FuIGZhbGwgYmFjayB0byBwYWRkaW5nIHplcm9zIGFuZCBsZW5ndGgKICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCiAgICAqLwpAQCAtMjM5LDI5ICszNzUsNDQgQEAKICAgICBzaGEyNTZfY29tcHJlc3MobWQsIG1kLT5idWYpOwogICAgIG1kLT5jdXJsZW4gPSAwOwogICB9Ci0gIC8qIHBhZCB1cCB0byA1NiBieXRlcyBvZiB6ZXJvZXMgKi8KKworICAvKiBQYWQgdXAgdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCiAgIHdoaWxlKG1kLT5jdXJsZW4gPCA1NikgewogICAgIG1kLT5idWZbbWQtPmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CiAgIH0KLSAgLyogc3RvcmUgbGVuZ3RoICovCisKKyAgLyogU3RvcmUgbGVuZ3RoICovCiAgIFdQQV9QVVRfQkU2NChtZC0+YnVmICsgNTYsIG1kLT5sZW5ndGgpOwogICBzaGEyNTZfY29tcHJlc3MobWQsIG1kLT5idWYpOwotICAvKiBjb3B5IG91dHB1dCAqLworCisgIC8qIENvcHkgb3V0cHV0ICovCiAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykKICAgICBXUEFfUFVUX0JFMzIob3V0ICsgKDQgKiBpKSwgbWQtPnN0YXRlW2ldKTsKKwogICByZXR1cm4gMDsKIH0KLS8qID09PT09IGVuZCAtIHB1YmxpYyBkb21haW4gU0hBMjU2IGltcGxlbWVudGF0aW9uID09PT09ICovCiAKLSNlbmRpZgorI2VuZGlmIC8qIENSWVBUTyBMSUJTICovCiAKLXZvaWQgQ3VybF9zaGEyNTZpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsIC8qIDMyIHVuc2lnbmVkIGNoYXJzICovCi0gICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQpCisvKgorICogQ3VybF9zaGEyNTZpdCgpCisgKgorICogR2VuZXJhdGVzIGEgU0hBMjU2IGhhc2ggZm9yIHRoZSBnaXZlbiBpbnB1dCBkYXRhLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogb3V0cHV0IFtpbi9vdXRdIC0gVGhlIG91dHB1dCBidWZmZXIuCisgKiBpbnB1dCAgW2luXSAgICAgLSBUaGUgaW5wdXQgZGF0YS4KKyAqIGxlbmd0aCBbaW5dICAgICAtIFRoZSBpbnB1dCBsZW5ndGguCisgKi8KK3ZvaWQgQ3VybF9zaGEyNTZpdCh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsZW5ndGgpCiB7CiAgIFNIQTI1Nl9DVFggY3R4OworCiAgIFNIQTI1Nl9Jbml0KCZjdHgpOwotICBTSEEyNTZfVXBkYXRlKCZjdHgsIGlucHV0LCBjdXJseF91enRvdWkoc3RybGVuKChjaGFyICopaW5wdXQpKSk7Ci0gIFNIQTI1Nl9GaW5hbChvdXRidWZmZXIsICZjdHgpOworICBTSEEyNTZfVXBkYXRlKCZjdHgsIGlucHV0LCBjdXJseF91enRvdWkobGVuZ3RoKSk7CisgIFNIQTI1Nl9GaW5hbChvdXRwdXQsICZjdHgpOwogfQogCiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuYwppbmRleCAzOTJiODRkLi5kMjdmYmUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5oCmluZGV4IGQ3M2RiZjYuLjc5OWIzYzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEzLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbWIuYwppbmRleCA3NmM5OWEyLi4xMmY5OTI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbWIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbWIuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKICAqIENvcHlyaWdodCAoQykgMjAxNCwgQmlsbCBOYWdlbCA8d25hZ2VsQHR5Y29pbnQuY29tPiwgRXhhY3EgVGVjaG5vbG9naWVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02NCw4ICs2NCw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgc21iX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpOwogc3RhdGljIENVUkxjb2RlIHNtYl9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKLXN0YXRpYyBpbnQgc21iX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgc21iX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBzdGF0aWMgQ1VSTGNvZGUgc21iX3BhcnNlX3VybF9wYXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKIC8qCkBAIC02MDcsNiArNjA2LDcgQEAKIHsKICAgc3RydWN0IHNtYl9jb25uICpzbWJjID0gJmNvbm4tPnByb3RvLnNtYmM7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyAgKm1zZyA9IE5VTEw7IC8qIGlmIGl0IHJldHVybnMgZWFybHkgKi8KIAogICAvKiBDaGVjayBpZiB0aGVyZSBpcyBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIgKi8KICAgaWYoIXNtYmMtPnNlbmRfc2l6ZSAmJiBzbWJjLT51cGxvYWRfc2l6ZSkgewpAQCAtNjgyLDcgKzY4Miw4IEBACiAKICAgc3dpdGNoKHNtYmMtPnN0YXRlKSB7CiAgIGNhc2UgU01CX05FR09USUFURToKLSAgICBpZihoLT5zdGF0dXMgfHwgc21iYy0+Z290IDwgc2l6ZW9mKCpucnNwKSArIHNpemVvZihzbWJjLT5jaGFsbGVuZ2UpIC0gMSkgeworICAgIGlmKChzbWJjLT5nb3QgPCBzaXplb2YoKm5yc3ApICsgc2l6ZW9mKHNtYmMtPmNoYWxsZW5nZSkgLSAxKSB8fAorICAgICAgIGgtPnN0YXR1cykgewogICAgICAgY29ubmNsb3NlKGNvbm4sICJTTUI6IG5lZ290aWF0aW9uIGZhaWxlZCIpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CkBAIC03ODUsNiArNzg2LDggQEAKICAgY2FzZSBTTUJfT1BFTjoKICAgICBpZihoLT5zdGF0dXMgfHwgc21iYy0+Z290IDwgc2l6ZW9mKHN0cnVjdCBzbWJfbnRfY3JlYXRlX3Jlc3BvbnNlKSkgewogICAgICAgcmVxLT5yZXN1bHQgPSBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CisgICAgICBpZihoLT5zdGF0dXMgPT0gc21iX3N3YXAzMihTTUJfRVJSX05PQUNDRVNTKSkKKyAgICAgICAgcmVxLT5yZXN1bHQgPSBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKICAgICAgIG5leHRfc3RhdGUgPSBTTUJfVFJFRV9ESVNDT05ORUNUOwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTM0LDEyICs5MzcsOCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgc21iX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBzbWJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCkgfCBHRVRTT0NLX1dSSVRFU09DSygwKTsKIH0KQEAgLTk1Nyw3ICs5NTYsNiBAQAogCiBzdGF0aWMgQ1VSTGNvZGUgc21iX3BhcnNlX3VybF9wYXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc21iX3JlcXVlc3QgKnJlcSA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIHN0cnVjdCBzbWJfY29ubiAqc21iYyA9ICZjb25uLT5wcm90by5zbWJjOwpAQCAtOTY1LDcgKzk2Myw4IEBACiAgIGNoYXIgKnNsYXNoOwogCiAgIC8qIFVSTCBkZWNvZGUgdGhlIHBhdGggKi8KLSAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZGF0YS0+c3RhdGUudXAucGF0aCwgMCwgJnBhdGgsIE5VTEwsIFRSVUUpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBkYXRhLT5zdGF0ZS51cC5wYXRoLCAwLCAmcGF0aCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmMKaW5kZXggNGEzNDYyYi4uZTE4NzI4NyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjcsNiArMjcsOSBAQAogICogUkZDNDc1MiBUaGUgS2VyYmVyb3MgVjUgKCJHU1NBUEkiKSBTQVNMIE1lY2hhbmlzbQogICogUkZDNDk1NCBTTVRQIEF1dGhlbnRpY2F0aW9uCiAgKiBSRkM1MzIxIFNNVFAgcHJvdG9jb2wKKyAqIFJGQzU4OTAgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIGZvciBBcHBsaWNhdGlvbnMgKElETkEpCisgKiBSRkM2NTMxIFNNVFAgRXh0ZW5zaW9uIGZvciBJbnRlcm5hdGlvbmFsaXplZCBFbWFpbAorICogUkZDNjUzMiBJbnRlcm5hdGlvbmFsaXplZCBFbWFpbCBIZWFkZXJzCiAgKiBSRkM2NzQ5IE9BdXRoIDIuMCBBdXRob3JpemF0aW9uIEZyYW1ld29yawogICogUkZDODMxNCBVc2Ugb2YgVExTIGZvciBFbWFpbCBTdWJtaXNzaW9uIGFuZCBBY2Nlc3MKICAqIERyYWZ0ICAgU01UUCBVUkwgSW50ZXJmYWNlICAgPGRyYWZ0LWVhcmhhcnQtdXJsLXNtdHAtMDAudHh0PgpAQCAtOTUsMTMgKzk4LDE0IEBACiBzdGF0aWMgQ1VSTGNvZGUgc210cF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IHNtdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BhcnNlX3VybF9vcHRpb25zKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGFyc2VfY3VzdG9tX3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBzbXRwX3BhcnNlX2FkZHJlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpmcW1hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqYWRkcmVzcywgc3RydWN0IGhvc3RuYW1lICpob3N0KTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BlcmZvcm1fYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKm1lY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJlc3ApOwogc3RhdGljIENVUkxjb2RlIHNtdHBfY29udGludWVfYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKnJlc3ApOwpAQCAtMzU5LDEwICszNjMsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgc210cF9wZXJmb3JtX3N0YXJ0dGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgU1RBUlRUTFMgY29tbWFuZCAqLwotICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIlNUQVJUVExTIik7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCAiU1RBUlRUTFMiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIFNNVFBfU1RBUlRUTFMpOwpAQCAtMzc4LDExICszODAsMTAgQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGVyZm9ybV91cGdyYWRlX3RscyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKLQogICAvKiBTdGFydCB0aGUgU1NMIGNvbm5lY3Rpb24gKi8KLSAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwgJnNtdHBjLT5zc2xkb25lKTsKKyAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNtdHBjLT5zc2xkb25lKTsKIAogICBpZighcmVzdWx0KSB7CiAgICAgaWYoc210cGMtPnN0YXRlICE9IFNNVFBfVVBHUkFERVRMUykKQEAgLTQ4NSwxMyArNDg2LDU1IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgU01UUCAqc210cCA9IGRhdGEtPnJlcS5wcm90b3A7CiAKLSAgLyogU2VuZCB0aGUgY29tbWFuZCAqLwotICBpZihzbXRwLT5yY3B0KQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+Y3VzdG9tICYmIHNtdHAtPmN1c3RvbVswXSAhPSAnXDAnID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAtPmN1c3RvbSA6ICJWUkZZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAtPnJjcHQtPmRhdGEpOworICBpZihzbXRwLT5yY3B0KSB7CisgICAgLyogV2Ugbm90aWZ5IHRoZSBzZXJ2ZXIgd2UgYXJlIHNlbmRpbmcgVVRGLTggZGF0YSBpZiBhKSBpdCBzdXBwb3J0cyB0aGUKKyAgICAgICBTTVRQVVRGOCBleHRlbnNpb24gYW5kIGIpIFRoZSBtYWlsYm94IGNvbnRhaW5zIFVURi04IGNoYXJhYWN0ZXJzLCBpbgorICAgICAgIGVpdGhlciB0aGUgbG9jYWwgYWRkcmVzcyBvciBob3N0IG5hbWUgcGFydHMuIFRoaXMgaXMgcmVnYXJkbGVzcyBvZgorICAgICAgIHdoZXRoZXIgdGhlIGhvc3QgbmFtZSBpcyBlbmNvZGVkIHVzaW5nIElETiBBQ0UgKi8KKyAgICBib29sIHV0ZjggPSBGQUxTRTsKKworICAgIGlmKCghc210cC0+Y3VzdG9tKSB8fCAoIXNtdHAtPmN1c3RvbVswXSkpIHsKKyAgICAgIGNoYXIgKmFkZHJlc3MgPSBOVUxMOworICAgICAgc3RydWN0IGhvc3RuYW1lIGhvc3QgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICAgICAgLyogUGFyc2UgdGhlIG1haWxib3ggdG8gdmVyaWZ5IGludG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGhvc3QgbmFtZQorICAgICAgICAgcGFydHMsIGNvbnZlcnRpbmcgdGhlIGhvc3QgbmFtZSB0byBhbiBJRE4gQS1sYWJlbCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIHJlc3VsdCA9IHNtdHBfcGFyc2VfYWRkcmVzcyhjb25uLCBzbXRwLT5yY3B0LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLCAmaG9zdCk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgIC8qIEVzdGFibGlzaCB3aGV0aGVyIHdlIHNob3VsZCByZXBvcnQgU01UUFVURjggdG8gdGhlIHNlcnZlciBmb3IgdGhpcworICAgICAgICAgbWFpbGJveCBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy4xIHBvaW50IDYgKi8KKyAgICAgIHV0ZjggPSAoY29ubi0+cHJvdG8uc210cGMudXRmOF9zdXBwb3J0ZWQpICYmCisgICAgICAgICAgICAgKChob3N0LmVuY2FsbG9jKSB8fCAoIUN1cmxfaXNfQVNDSUlfbmFtZShhZGRyZXNzKSkgfHwKKyAgICAgICAgICAgICAgKCFDdXJsX2lzX0FTQ0lJX25hbWUoaG9zdC5uYW1lKSkpOworCisgICAgICAvKiBTZW5kIHRoZSBWUkZZIGNvbW1hbmQgKE5vdGU6IFRoZSBob3N0IG5hbWUgcGFydCBtYXkgYmUgYWJzZW50IHdoZW4gdGhlCisgICAgICAgICBob3N0IGlzIGEgbG9jYWwgc3lzdGVtKSAqLworICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJWUkZZICVzJXMlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC5uYW1lID8gIkAiIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QubmFtZSA/IGhvc3QubmFtZSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4ID8gIiBTTVRQVVRGOCIgOiAiIik7CisKKyAgICAgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmhvc3QpOworICAgICAgZnJlZShhZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBFc3RhYmxpc2ggd2hldGhlciB3ZSBzaG91bGQgcmVwb3J0IHRoYXQgd2Ugc3VwcG9ydCBTTVRQVVRGOCBmb3IgRVhQTgorICAgICAgICAgY29tbWFuZHMgdG8gdGhlIHNlcnZlciBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy4xIHBvaW50IDYgKi8KKyAgICAgIHV0ZjggPSAoY29ubi0+cHJvdG8uc210cGMudXRmOF9zdXBwb3J0ZWQpICYmCisgICAgICAgICAgICAgKCFzdHJjbXAoc210cC0+Y3VzdG9tLCAiRVhQTiIpKTsKKworICAgICAgLyogU2VuZCB0aGUgY3VzdG9tIHJlY2lwaWVudCBiYXNlZCBjb21tYW5kIHN1Y2ggYXMgdGhlIEVYUE4gY29tbWFuZCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyAlcyVzIiwgc210cC0+Y3VzdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5yY3B0LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4ID8gIiBTTVRQVVRGOCIgOiAiIik7CisgICAgfQorICB9CiAgIGVsc2UKKyAgICAvKiBTZW5kIHRoZSBub24tcmVjaXBpZW50IGJhc2VkIGNvbW1hbmQgc3VjaCBhcyBIRUxQICovCiAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5jdXN0b20gJiYgc210cC0+Y3VzdG9tWzBdICE9ICdcMCcgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+Y3VzdG9tIDogIkhFTFAiKTsKQEAgLTUxNiwyMiArNTU5LDg2IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKIAorICAvKiBXZSBub3RpZnkgdGhlIHNlcnZlciB3ZSBhcmUgc2VuZGluZyBVVEYtOCBkYXRhIGlmIGEpIGl0IHN1cHBvcnRzIHRoZQorICAgICBTTVRQVVRGOCBleHRlbnNpb24gYW5kIGIpIFRoZSBtYWlsYm94IGNvbnRhaW5zIFVURi04IGNoYXJhYWN0ZXJzLCBpbgorICAgICBlaXRoZXIgdGhlIGxvY2FsIGFkZHJlc3Mgb3IgaG9zdCBuYW1lIHBhcnRzLiBUaGlzIGlzIHJlZ2FyZGxlc3Mgb2YKKyAgICAgd2hldGhlciB0aGUgaG9zdCBuYW1lIGlzIGVuY29kZWQgdXNpbmcgSUROIEFDRSAqLworICBib29sIHV0ZjggPSBGQUxTRTsKKwogICAvKiBDYWxjdWxhdGUgdGhlIEZST00gcGFyYW1ldGVyICovCi0gIGlmKCFkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dKQorICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dKSB7CisgICAgY2hhciAqYWRkcmVzcyA9IE5VTEw7CisgICAgc3RydWN0IGhvc3RuYW1lIGhvc3QgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICAgIC8qIFBhcnNlIHRoZSBGUk9NIG1haWxib3ggaW50byB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgaG9zdCBuYW1lIHBhcnRzLAorICAgICAgIGNvbnZlcnRpbmcgdGhlIGhvc3QgbmFtZSB0byBhbiBJRE4gQS1sYWJlbCBpZiBuZWNlc3NhcnkgKi8KKyAgICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MsICZob3N0KTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLyogRXN0YWJsaXNoIHdoZXRoZXIgd2Ugc2hvdWxkIHJlcG9ydCBTTVRQVVRGOCB0byB0aGUgc2VydmVyIGZvciB0aGlzCisgICAgICAgbWFpbGJveCBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy4xIHBvaW50IDQgYW5kIHNlY3QuIDMuNCAqLworICAgIHV0ZjggPSAoY29ubi0+cHJvdG8uc210cGMudXRmOF9zdXBwb3J0ZWQpICYmCisgICAgICAgICAgICgoaG9zdC5lbmNhbGxvYykgfHwgKCFDdXJsX2lzX0FTQ0lJX25hbWUoYWRkcmVzcykpIHx8CisgICAgICAgICAgICAoIUN1cmxfaXNfQVNDSUlfbmFtZShob3N0Lm5hbWUpKSk7CisKKyAgICBpZihob3N0Lm5hbWUpIHsKKyAgICAgIGZyb20gPSBhcHJpbnRmKCI8JXNAJXM+IiwgYWRkcmVzcywgaG9zdC5uYW1lKTsKKworICAgICAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmaG9zdCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIEFuIGludmFsaWQgbWFpbGJveCB3YXMgcHJvdmlkZWQgYnV0IHdlJ2xsIHNpbXBseSBsZXQgdGhlIHNlcnZlciB3b3JyeQorICAgICAgICAgYWJvdXQgdGhhdCBhbmQgcmVwbHkgd2l0aCBhIDUwMSBlcnJvciAqLworICAgICAgZnJvbSA9IGFwcmludGYoIjwlcz4iLCBhZGRyZXNzKTsKKworICAgIGZyZWUoYWRkcmVzcyk7CisgIH0KKyAgZWxzZQogICAgIC8qIE51bGwgcmV2ZXJzZS1wYXRoLCBSRkMtNTMyMSwgc2VjdC4gMy42LjMgKi8KICAgICBmcm9tID0gc3RyZHVwKCI8PiIpOwotICBlbHNlIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV1bMF0gPT0gJzwnKQotICAgIGZyb20gPSBhcHJpbnRmKCIlcyIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV0pOwotICBlbHNlCi0gICAgZnJvbSA9IGFwcmludGYoIjwlcz4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dKTsKIAogICBpZighZnJvbSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAvKiBDYWxjdWxhdGUgdGhlIG9wdGlvbmFsIEFVVEggcGFyYW1ldGVyICovCiAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfQVVUSF0gJiYgY29ubi0+cHJvdG8uc210cGMuc2FzbC5hdXRodXNlZCkgewotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfQVVUSF1bMF0gIT0gJ1wwJykKLSAgICAgIGF1dGggPSBhcHJpbnRmKCIlcyIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfQVVUSF0pOworICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfQVVUSF1bMF0gIT0gJ1wwJykgeworICAgICAgY2hhciAqYWRkcmVzcyA9IE5VTEw7CisgICAgICBzdHJ1Y3QgaG9zdG5hbWUgaG9zdCA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCisgICAgICAvKiBQYXJzZSB0aGUgQVVUSCBtYWlsYm94IGludG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGhvc3QgbmFtZSBwYXJ0cywKKyAgICAgICAgIGNvbnZlcnRpbmcgdGhlIGhvc3QgbmFtZSB0byBhbiBJRE4gQS1sYWJlbCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIHJlc3VsdCA9IHNtdHBfcGFyc2VfYWRkcmVzcyhjb25uLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLCAmaG9zdCk7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgZnJlZShmcm9tKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKworICAgICAgLyogRXN0YWJsaXNoIHdoZXRoZXIgd2Ugc2hvdWxkIHJlcG9ydCBTTVRQVVRGOCB0byB0aGUgc2VydmVyIGZvciB0aGlzCisgICAgICAgICBtYWlsYm94IGFzIHBlciBSRkMtNjUzMSBzZWN0LiAzLjEgcG9pbnQgNCBhbmQgc2VjdC4gMy40ICovCisgICAgICBpZigoIXV0ZjgpICYmIChjb25uLT5wcm90by5zbXRwYy51dGY4X3N1cHBvcnRlZCkgJiYKKyAgICAgICAgICgoaG9zdC5lbmNhbGxvYykgfHwgKCFDdXJsX2lzX0FTQ0lJX25hbWUoYWRkcmVzcykpIHx8CisgICAgICAgICAgKCFDdXJsX2lzX0FTQ0lJX25hbWUoaG9zdC5uYW1lKSkpKQorICAgICAgICB1dGY4ID0gVFJVRTsKKworICAgICAgaWYoaG9zdC5uYW1lKSB7CisgICAgICAgIGZyZWUoZnJvbSk7CisgICAgICAgIGZyb20gPSBhcHJpbnRmKCI8JXNAJXM+IiwgYWRkcmVzcywgaG9zdC5uYW1lKTsKKworICAgICAgICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZob3N0KTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgLyogQW4gaW52YWxpZCBtYWlsYm94IHdhcyBwcm92aWRlZCBidXQgd2UnbGwgc2ltcGx5IGxldCB0aGUgc2VydmVyCisgICAgICAgICAgIHdvcnJ5IGFib3V0IGl0ICovCisgICAgICAgIGF1dGggPSBhcHJpbnRmKCI8JXM+IiwgYWRkcmVzcyk7CisKKyAgICAgIGZyZWUoYWRkcmVzcyk7CisgICAgICBpZighZnJvbSkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQogICAgIGVsc2UKICAgICAgIC8qIEVtcHR5IEFVVEgsIFJGQy0yNTU0LCBzZWN0LiA1ICovCiAgICAgICBhdXRoID0gc3RyZHVwKCI8PiIpOwpAQCAtNTY1LDYgKzY3Miw3IEBACiAgICAgaWYocmVzdWx0KSB7CiAgICAgICBmcmVlKGZyb20pOwogICAgICAgZnJlZShhdXRoKTsKKwogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTU4NywxOSArNjk1LDMzIEBACiAgICAgfQogICB9CiAKKyAgLyogSWYgdGhlIG1haWxib3hlcyBpbiB0aGUgRlJPTSBhbmQgQVVUSCBwYXJhbWV0ZXJzIGRvbid0IGluY2x1ZGUgYSBVVEYtOAorICAgICBiYXNlZCBhZGRyZXNzIHRoZW4gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIHJlY2lwaWVudCBsaXN0IGFuZCBjaGVjayBpZgorICAgICBhbnkgdGhlcmUgZG8sIGFzIHdlIG5lZWQgdG8gY29ycmVjdGx5IGlkZW50aWZ5IG91ciBzdXBwb3J0IGZvciBTTVRQVVRGOAorICAgICBpbiB0aGUgZW52ZWxvcGUsIGFzIHBlciBSRkMtNjUzMSBzZWN0LiAzLjQgKi8KKyAgaWYoY29ubi0+cHJvdG8uc210cGMudXRmOF9zdXBwb3J0ZWQgJiYgIXV0ZjgpIHsKKyAgICBzdHJ1Y3QgU01UUCAqc210cCA9IGRhdGEtPnJlcS5wcm90b3A7CisgICAgc3RydWN0IGN1cmxfc2xpc3QgKnJjcHQgPSBzbXRwLT5yY3B0OworCisgICAgd2hpbGUocmNwdCAmJiAhdXRmOCkgeworICAgICAgLyogRG9lcyB0aGUgaG9zdCBuYW1lIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnM/ICovCisgICAgICBpZighQ3VybF9pc19BU0NJSV9uYW1lKHJjcHQtPmRhdGEpKQorICAgICAgICB1dGY4ID0gVFJVRTsKKworICAgICAgcmNwdCA9IHJjcHQtPm5leHQ7CisgICAgfQorICB9CisKICAgLyogU2VuZCB0aGUgTUFJTCBjb21tYW5kICovCi0gIGlmKCFhdXRoICYmICFzaXplKQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyIsIGZyb20pOwotICBlbHNlIGlmKGF1dGggJiYgIXNpemUpCi0gICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiTUFJTCBGUk9NOiVzIEFVVEg9JXMiLCBmcm9tLCBhdXRoKTsKLSAgZWxzZSBpZihhdXRoICYmIHNpemUpCi0gICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiTUFJTCBGUk9NOiVzIEFVVEg9JXMgU0laRT0lcyIsIGZyb20sIGF1dGgsIHNpemUpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiTUFJTCBGUk9NOiVzIFNJWkU9JXMiLCBmcm9tLCBzaXplKTsKKyAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyVzJXMlcyVzJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sICAgICAgICAgICAgICAgICAvKiBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aCA/ICIgQVVUSD0iIDogIiIsIC8qIE9wdGlvbmFsIG9uIEFVVEggc3VwcG9ydCAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoID8gYXV0aCA6ICIiLCAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPyAiIFNJWkU9IiA6ICIiLCAvKiBPcHRpb25hbCBvbiBTSVpFIHN1cHBvcnQgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA/IHNpemUgOiAiIiwgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4ID8gIiBTTVRQVVRGOCIgICAgLyogSW50ZXJuYXRpb25hbGlzZWQgbWFpbGJveCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiIpOyAgICAgICAgICAvKiBpbmNsdWRlZCBpbiBvdXIgZW52ZWxvcGUgICovCiAKICAgZnJlZShmcm9tKTsKICAgZnJlZShhdXRoKTsKQEAgLTYyMywxNCArNzQ1LDI4IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IFNNVFAgKnNtdHAgPSBkYXRhLT5yZXEucHJvdG9wOworICBjaGFyICphZGRyZXNzID0gTlVMTDsKKyAgc3RydWN0IGhvc3RuYW1lIGhvc3QgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICAvKiBQYXJzZSB0aGUgcmVjaXBpZW50IG1haWxib3ggaW50byB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgaG9zdCBuYW1lIHBhcnRzLAorICAgICBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgIHJlc3VsdCA9IHNtdHBfcGFyc2VfYWRkcmVzcyhjb25uLCBzbXRwLT5yY3B0LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MsICZob3N0KTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CiAKICAgLyogU2VuZCB0aGUgUkNQVCBUTyBjb21tYW5kICovCi0gIGlmKHNtdHAtPnJjcHQtPmRhdGFbMF0gPT0gJzwnKQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUkNQVCBUTzolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5yY3B0LT5kYXRhKTsKKyAgaWYoaG9zdC5uYW1lKQorICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUkNQVCBUTzo8JXNAJXM+IiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QubmFtZSk7CiAgIGVsc2UKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlJDUFQgVE86PCVzPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5yY3B0LT5kYXRhKTsKKyAgICAvKiBBbiBpbnZhbGlkIG1haWxib3ggd2FzIHByb3ZpZGVkIGJ1dCB3ZSdsbCBzaW1wbHkgbGV0IHRoZSBzZXJ2ZXIgd29ycnkKKyAgICAgICBhYm91dCB0aGF0IGFuZCByZXBseSB3aXRoIGEgNTAxIGVycm9yICovCisgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJSQ1BUIFRPOjwlcz4iLCBhZGRyZXNzKTsKKworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZob3N0KTsKKyAgZnJlZShhZGRyZXNzKTsKKwogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIFNNVFBfUkNQVCk7CiAKQEAgLTY0NSwxMCArNzgxLDggQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGVyZm9ybV9xdWl0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgUVVJVCBjb21tYW5kICovCi0gIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCAiUVVJVCIpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIlFVSVQiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIFNNVFBfUVVJVCk7CkBAIC03MjAsNyArODU0LDcgQEAKICAgICAgIHJlc3VsdCA9IENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOwogICAgIH0KICAgfQotICBlbHNlIHsKKyAgZWxzZSBpZihsZW4gPj0gNCkgewogICAgIGxpbmUgKz0gNDsKICAgICBsZW4gLT0gNDsKIApAQCAtNzMyLDYgKzg2NiwxMCBAQAogICAgIGVsc2UgaWYobGVuID49IDQgJiYgIW1lbWNtcChsaW5lLCAiU0laRSIsIDQpKQogICAgICAgc210cGMtPnNpemVfc3VwcG9ydGVkID0gVFJVRTsKIAorICAgIC8qIERvZXMgdGhlIHNlcnZlciBzdXBwb3J0IHRoZSBVVEYtOCBjYXBhYmlsaXR5PyAqLworICAgIGVsc2UgaWYobGVuID49IDggJiYgIW1lbWNtcChsaW5lLCAiU01UUFVURjgiLCA4KSkKKyAgICAgIHNtdHBjLT51dGY4X3N1cHBvcnRlZCA9IFRSVUU7CisKICAgICAvKiBEb2VzIHRoZSBzZXJ2ZXIgc3VwcG9ydCBhdXRoZW50aWNhdGlvbj8gKi8KICAgICBlbHNlIGlmKGxlbiA+PSA1ICYmICFtZW1jbXAobGluZSwgIkFVVEggIiwgNSkpIHsKICAgICAgIHNtdHBjLT5hdXRoX3N1cHBvcnRlZCA9IFRSVUU7CkBAIC03OTEsNiArOTI5LDEwIEBACiAgICAgICAgIHJlc3VsdCA9IHNtdHBfcGVyZm9ybV9hdXRoZW50aWNhdGlvbihjb25uKTsKICAgICB9CiAgIH0KKyAgZWxzZSB7CisgICAgZmFpbGYoZGF0YSwgIlVuZXhwZWN0ZWRseSBzaG9ydCBFSExPIHJlc3BvbnNlIik7CisgICAgcmVzdWx0ID0gQ1VSTEVfV0VJUkRfU0VSVkVSX1JFUExZOworICB9CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkxNywyNSArMTA1OSw1MyBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBTTVRQICpzbXRwID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgYm9vbCBpc19zbXRwX2VyciA9IEZBTFNFOworICBib29sIGlzX3NtdHBfYmxvY2tpbmdfZXJyID0gRkFMU0U7CiAKICAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLwogCi0gIGlmKHNtdHBjb2RlLzEwMCAhPSAyKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlJDUFQgZmFpbGVkOiAlZCIsIHNtdHBjb2RlKTsKLSAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICBpc19zbXRwX2VyciA9IChzbXRwY29kZS8xMDAgIT0gMikgPyBUUlVFIDogRkFMU0U7CisKKyAgLyogSWYgdGhlcmUncyBtdWx0aXBsZSBSQ1BUIFRPIHRvIGJlIGlzc3VlZCwgaXQncyBwb3NzaWJsZSB0byBpZ25vcmUgZXJyb3JzCisgICAgIGFuZCBwcm9jZWVkIHdpdGggb25seSB0aGUgdmFsaWQgYWRkcmVzc2VzLiAqLworICBpc19zbXRwX2Jsb2NraW5nX2VyciA9CisgICAgKGlzX3NtdHBfZXJyICYmICFkYXRhLT5zZXQubWFpbF9yY3B0X2FsbG93ZmFpbHMpID8gVFJVRSA6IEZBTFNFOworCisgIGlmKGlzX3NtdHBfZXJyKSB7CisgICAgLyogUmVtZW1iZXJpbmcgdGhlIGxhc3QgZmFpbHVyZSB3aGljaCB3ZSBjYW4gcmVwb3J0IGlmIGFsbCAiUkNQVCBUTyIgaGF2ZQorICAgICAgIGZhaWxlZCBhbmQgd2UgY2Fubm90IHByb2NlZWQuICovCisgICAgc210cC0+cmNwdF9sYXN0X2Vycm9yID0gc210cGNvZGU7CisKKyAgICBpZihpc19zbXRwX2Jsb2NraW5nX2VycikgeworICAgICAgZmFpbGYoZGF0YSwgIlJDUFQgZmFpbGVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgfQogICB9CiAgIGVsc2UgeworICAgIC8qIFNvbWUgUkNQVCBUTyBjb21tYW5kcyBoYXZlIHN1Y2NlZWRlZC4gKi8KKyAgICBzbXRwLT5yY3B0X2hhZF9vayA9IFRSVUU7CisgIH0KKworICBpZighaXNfc210cF9ibG9ja2luZ19lcnIpIHsKICAgICBzbXRwLT5yY3B0ID0gc210cC0+cmNwdC0+bmV4dDsKIAogICAgIGlmKHNtdHAtPnJjcHQpCiAgICAgICAvKiBTZW5kIHRoZSBuZXh0IFJDUFQgVE8gY29tbWFuZCAqLwogICAgICAgcmVzdWx0ID0gc210cF9wZXJmb3JtX3JjcHRfdG8oY29ubik7CiAgICAgZWxzZSB7Ci0gICAgICAvKiBTZW5kIHRoZSBEQVRBIGNvbW1hbmQgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCAiREFUQSIpOworICAgICAgLyogV2Ugd2VyZW4ndCBhYmxlIHRvIGlzc3VlIGEgc3VjY2Vzc2Z1bCBSQ1BUIFRPIGNvbW1hbmQgd2hpbGUgZ29pbmcKKyAgICAgICAgIG92ZXIgcmVjaXBpZW50cyAocG90ZW50aWFsbHkgbXVsdGlwbGUpLiBTZW5kaW5nIGJhY2sgbGFzdCBlcnJvci4gKi8KKyAgICAgIGlmKCFzbXRwLT5yY3B0X2hhZF9vaykgeworICAgICAgICBmYWlsZihkYXRhLCAiUkNQVCBmYWlsZWQ6ICVkIChsYXN0IGVycm9yKSIsIHNtdHAtPnJjcHRfbGFzdF9lcnJvcik7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogU2VuZCB0aGUgREFUQSBjb21tYW5kICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCAiREFUQSIpOwogCi0gICAgICBpZighcmVzdWx0KQotICAgICAgICBzdGF0ZShjb25uLCBTTVRQX0RBVEEpOworICAgICAgICBpZighcmVzdWx0KQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNNVFBfREFUQSk7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTExMTksMTAgKzEyODksOSBAQAogfQogCiAvKiBGb3IgdGhlIFNNVFAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCi1zdGF0aWMgaW50IHNtdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uc210cGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnNtdHBjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTI5MCw2ICsxNDU5LDEyIEBACiAgIC8qIFN0b3JlIHRoZSBmaXJzdCByZWNpcGllbnQgKG9yIE5VTEwgaWYgbm90IHNwZWNpZmllZCkgKi8KICAgc210cC0+cmNwdCA9IGRhdGEtPnNldC5tYWlsX3JjcHQ7CiAKKyAgLyogVHJhY2sgb2Ygd2hldGhlciB3ZSd2ZSBzdWNjZXNzZnVsbHkgc2VudCBhdCBsZWFzdCBvbmUgUkNQVCBUTyBjb21tYW5kICovCisgIHNtdHAtPnJjcHRfaGFkX29rID0gRkFMU0U7CisKKyAgLyogVHJhY2sgb2YgdGhlIGxhc3QgZXJyb3Igd2UndmUgcmVjZWl2ZWQgYnkgc2VuZGluZyBSQ1BUIFRPIGNvbW1hbmQgKi8KKyAgc210cC0+cmNwdF9sYXN0X2Vycm9yID0gMDsKKwogICAvKiBJbml0aWFsIGRhdGEgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gbGluZTogaXQgaXMgaW1wbGljaXRseQogICAgICBwcmVjZWRlZCBieSBhIHZpcnR1YWwgQ1JMRi4gKi8KICAgc210cC0+dHJhaWxpbmdfY3JsZiA9IFRSVUU7CkBAIC0xNTQwLDYgKzE3MTUsNzYgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc210cF9wYXJzZV9hZGRyZXNzKCkKKyAqCisgKiBQYXJzZSB0aGUgZnVsbHkgcXVhbGlmaWVkIG1haWxib3ggYWRkcmVzcyBpbnRvIGEgbG9jYWwgYWRkcmVzcyBwYXJ0IGFuZCB0aGUKKyAqIGhvc3QgbmFtZSwgY29udmVydGluZyB0aGUgaG9zdCBuYW1lIHRvIGFuIElETiBBLWxhYmVsLCBhcyBwZXIgUkZDLTU4OTAsIGlmCisgKiBuZWNlc3NhcnkuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBjb25uICBbaW5dICAgICAgICAgICAgICAtIFRoZSBjb25uZWN0aW9uIGhhbmRsZS4KKyAqIGZxbWEgIFtpbl0gICAgICAgICAgICAgIC0gVGhlIGZ1bGx5IHF1YWxpZmllZCBtYWlsYm94IGFkZHJlc3MgKHdoaWNoIG1heSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgbm90IGNvbnRhaW4gVVRGLTggY2hhcmFjdGVycykuCisgKiBhZGRyZXNzICAgICAgICBbaW4vb3V0XSAtIEEgbmV3IGFsbG9jYXRlZCBidWZmZXIgd2hpY2ggaG9sZHMgdGhlIGxvY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgcGFydCBvZiB0aGUgbWFpbGJveC4gVGhpcyBidWZmZXIgbXVzdCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlJ2VkIGJ5IHRoZSBjYWxsZXIuCisgKiBob3N0ICAgICAgICAgICBbaW4vb3V0XSAtIFRoZSBob3N0IG5hbWUgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIG9yaWdpbmFsLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3B0aW9uYWxseSBlbmNvZGVkLCBob3N0IG5hbWUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoKSBtdXN0IGJlIGNhbGxlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNlIHRoZSBjYWxsZXIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKgorICogTm90ZXM6CisgKgorICogU2hvdWxkIGEgVVRGLTggaG9zdCBuYW1lIHJlcXVpcmUgY29udmVyc2lvbiB0byBJRE4gQUNFIGFuZCB3ZSBjYW5ub3QgaG9ub3IKKyAqIHRoYXQgY29udmVydGlvbiB0aGVuIHdlIHNoYWxsIHJldHVybiBzdWNjZXNzLiBUaGlzIGFsbG93IHRoZSBjYWxsZXIgdG8gc2VuZAorICogdGhlIGRhdGEgdG8gdGhlIHNlcnZlciBhcyBhIFUtbGFiZWwgKGFzIHBlciBSRkMtNjUzMSBzZWN0LiAzLjIpLgorICoKKyAqIElmIGFuIG1haWxib3ggJ0AnIHNlcGVyYXRvciBjYW5ub3QgYmUgbG9jYXRlZCB0aGVuIHRoZSBtYWlsYm94IGlzIGNvbnNpZGVyZWQKKyAqIHRvIGJlIGVpdGhlciBhIGxvY2FsIG1haWxib3ggb3IgYW4gaW52YWxpZCBtYWlsYm94IChkZXBlbmRpbmcgb24gd2hhdCB0aGUKKyAqIGNhbGxpbmcgZnVuY3Rpb24gZGVlbXMgaXQgdG8gYmUpIHRoZW4gdGhlIGlucHV0IHdpbGwgc2ltcGx5IGJlIHJldHVybmVkIGluCisgKiB0aGUgYWRkcmVzcyBwYXJ0IHdpdGggdGhlIGhvc3QgbmFtZSBiZWluZyBOVUxMLgorICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV9hZGRyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqZnFtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFkZHJlc3MsIHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgLyogRHVwbGljYXRlIHRoZSBmdWxseSBxdWFsaWZpZWQgZW1haWwgYWRkcmVzcyBzbyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCwKKyAgICAgZW5zdXJpbmcgaXQgZG9lc24ndCBjb250YWluIHRoZSBkZWxpbWl0ZXJzIGlmIHNwZWNpZmllZCAqLworICBjaGFyICpkdXAgPSBzdHJkdXAoZnFtYVswXSA9PSAnPCcgPyBmcW1hICsgMSAgOiBmcW1hKTsKKyAgaWYoIWR1cCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBsZW5ndGggPSBzdHJsZW4oZHVwKTsKKyAgaWYoZHVwW2xlbmd0aCAtIDFdID09ICc+JykKKyAgICBkdXBbbGVuZ3RoIC0gMV0gPSAnXDAnOworCisgIC8qIEV4dHJhY3QgdGhlIGhvc3QgbmFtZSBmcm9tIHRoZSBhZGRyZXNzcyAoaWYgd2UgY2FuKSAqLworICBob3N0LT5uYW1lID0gc3RycGJyayhkdXAsICJAIik7CisgIGlmKGhvc3QtPm5hbWUpIHsKKyAgICAqaG9zdC0+bmFtZSA9ICdcMCc7CisgICAgaG9zdC0+bmFtZSA9IGhvc3QtPm5hbWUgKyAxOworCisgICAgLyogQXR0ZW1wdCB0byBjb252ZXJ0IHRoZSBob3N0IG5hbWUgdG8gSUROIEFDRSAqLworICAgICh2b2lkKSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgaG9zdCk7CisKKyAgICAvKiBJZiBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoKSBmYWlscyB0aGVuIHdlIHNoYWxsIGF0dGVtcHQgdG8gY29udGludWUKKyAgICAgICBhbmQgc2VuZCB0aGUgaG9zdCBuYW1lIHVzaW5nIFVURi04IHJhdGhlciB0aGFuIGFzIDctYml0IEFDRSAod2hpY2ggaXMKKyAgICAgICBvdXIgcHJlZmVyZW5jZSkgKi8KKyAgfQorCisgIC8qIEV4dHJhY3QgdGhlIGxvY2FsIGFkZHJlc3MgZnJvbSB0aGUgbWFpbGJveCAqLworICAqYWRkcmVzcyA9IGR1cDsKKworICByZXR1cm4gcmVzdWx0OworfQorCiBDVVJMY29kZSBDdXJsX3NtdHBfZXNjYXBlX2VvYihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IHNzaXplX3QgbnJlYWQpCiB7CiAgIC8qIFdoZW4gc2VuZGluZyBhIFNNVFAgcGF5bG9hZCB3ZSBtdXN0IGRldGVjdCBDUkxGLiBzZXF1ZW5jZXMgbWFraW5nIHN1cmUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuaAppbmRleCBiNjczNDBhLi4xNjRhMTc1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01NSw2ICs1NSw5IEBACiAgIGN1cmxfcHBfdHJhbnNmZXIgdHJhbnNmZXI7CiAgIGNoYXIgKmN1c3RvbTsgICAgICAgICAgICAvKiBDdXN0b20gUmVxdWVzdCAqLwogICBzdHJ1Y3QgY3VybF9zbGlzdCAqcmNwdDsgLyogUmVjaXBpZW50IGxpc3QgKi8KKyAgYm9vbCByY3B0X2hhZF9vazsgICAgICAgIC8qIFdoZXRoZXIgYW55IG9mIFJDUFQgVE8gY29tbWFuZHMgKGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsIG51bWJlciBvZiByZWNpcGllbnRzKSBzdWNjZWVkZWQgc28gZmFyICovCisgIGludCByY3B0X2xhc3RfZXJyb3I7ICAgICAvKiBUaGUgbGFzdCBlcnJvciByZWNlaXZlZCBmb3IgUkNQVCBUTyBjb21tYW5kICovCiAgIHNpemVfdCBlb2I7ICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgb2YgdGhlIEVPQiAoRW5kIE9mIEJvZHkpIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiByZWNlaXZlZCBzbyBmYXIgKi8KICAgYm9vbCB0cmFpbGluZ19jcmxmOyAgICAgIC8qIFNwZWNpZmllcyBpZiB0aGUgdGFpbGluZyBDUkxGIGlzIHByZXNlbnQgKi8KQEAgLTcxLDYgKzc0LDggQEAKICAgYm9vbCB0bHNfc3VwcG9ydGVkOyAgICAgIC8qIFN0YXJ0VExTIGNhcGFiaWxpdHkgc3VwcG9ydGVkIGJ5IHNlcnZlciAqLwogICBib29sIHNpemVfc3VwcG9ydGVkOyAgICAgLyogSWYgc2VydmVyIHN1cHBvcnRzIFNJWkUgZXh0ZW5zaW9uIGFjY29yZGluZyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDIDE4NzAgKi8KKyAgYm9vbCB1dGY4X3N1cHBvcnRlZDsgICAgIC8qIElmIHNlcnZlciBzdXBwb3J0cyBTTVRQVVRGOCBleHRlbnNpb24gYWNjb3JkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBSRkMgNjUzMSAqLwogICBib29sIGF1dGhfc3VwcG9ydGVkOyAgICAgLyogQVVUSCBjYXBhYmlsaXR5IHN1cHBvcnRlZCBieSBzZXJ2ZXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2thZGRyLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrYWRkci5oCmluZGV4IGRiMTQ2ODAuLmIwMzdlZTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2thZGRyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2FkZHIuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzBkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrZXRwYWlyLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorI2luY2x1ZGUgInNvY2tldHBhaXIuaCIKKworI2lmbmRlZiBIQVZFX1NPQ0tFVFBBSVIKKyNpZmRlZiBXSU4zMgorLyoKKyAqIFRoaXMgaXMgYSBzb2NrZXRwYWlyKCkgaW1wbGVtZW50YXRpb24gZm9yIFdpbmRvd3MuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPGlvLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4gLyogSVBQUk9UT19UQ1AgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmbmRlZiBJTkFERFJfTE9PUEJBQ0sKKyNkZWZpbmUgSU5BRERSX0xPT1BCQUNLIDB4N2YwMDAwMDEKKyNlbmRpZiAvKiAhSU5BRERSX0xPT1BCQUNLICovCisjZW5kaWYgLyogIVdJTjMyICovCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworaW50IEN1cmxfc29ja2V0cGFpcihpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tzWzJdKQoreworICB1bmlvbiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGluYWRkcjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKyAgfSBhOworICBjdXJsX3NvY2tldF90IGxpc3RlbmVyOworICBjdXJsX3NvY2tsZW5fdCBhZGRybGVuID0gc2l6ZW9mKGEuaW5hZGRyKTsKKyAgaW50IHJldXNlID0gMTsKKyAgY2hhciBkYXRhWzJdWzEyXTsKKyAgc3NpemVfdCBkbGVuOworICAodm9pZClkb21haW47CisgICh2b2lkKXR5cGU7CisgICh2b2lkKXByb3RvY29sOworCisgIGxpc3RlbmVyID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CisgIGlmKGxpc3RlbmVyID09IENVUkxfU09DS0VUX0JBRCkKKyAgICByZXR1cm4gLTE7CisKKyAgbWVtc2V0KCZhLCAwLCBzaXplb2YoYSkpOworICBhLmluYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgYS5pbmFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgYS5pbmFkZHIuc2luX3BvcnQgPSAwOworCisgIHNvY2tzWzBdID0gc29ja3NbMV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgaWYoc2V0c29ja29wdChsaXN0ZW5lciwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorICAgICAgICAgICAgICAgIChjaGFyICopJnJldXNlLCAoY3VybF9zb2NrbGVuX3Qpc2l6ZW9mKHJldXNlKSkgPT0gLTEpCisgICAgZ290byBlcnJvcjsKKyAgaWYoYmluZChsaXN0ZW5lciwgJmEuYWRkciwgc2l6ZW9mKGEuaW5hZGRyKSkgPT0gLTEpCisgICAgZ290byBlcnJvcjsKKyAgaWYoZ2V0c29ja25hbWUobGlzdGVuZXIsICZhLmFkZHIsICZhZGRybGVuKSA9PSAtMSkKKyAgICBnb3RvIGVycm9yOworICBpZihsaXN0ZW4obGlzdGVuZXIsIDEpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisgIHNvY2tzWzBdID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgaWYoc29ja3NbMF0gPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKGNvbm5lY3Qoc29ja3NbMF0sICZhLmFkZHIsIHNpemVvZihhLmluYWRkcikpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisgIHNvY2tzWzFdID0gYWNjZXB0KGxpc3RlbmVyLCBOVUxMLCBOVUxMKTsKKyAgaWYoc29ja3NbMV0gPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgIGdvdG8gZXJyb3I7CisKKyAgLyogdmVyaWZ5IHRoYXQgbm90aGluZyBlbHNlIGNvbm5lY3RlZCAqLworICBtc25wcmludGYoZGF0YVswXSwgc2l6ZW9mKGRhdGFbMF0pLCAiJXAiLCBzb2Nrcyk7CisgIGRsZW4gPSBzdHJsZW4oZGF0YVswXSk7CisgIGlmKHN3cml0ZShzb2Nrc1swXSwgZGF0YVswXSwgZGxlbikgIT0gZGxlbikKKyAgICBnb3RvIGVycm9yOworICBpZihzcmVhZChzb2Nrc1sxXSwgZGF0YVsxXSwgc2l6ZW9mKGRhdGFbMV0pKSAhPSBkbGVuKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKG1lbWNtcChkYXRhWzBdLCBkYXRhWzFdLCBkbGVuKSkKKyAgICBnb3RvIGVycm9yOworCisgIHNjbG9zZShsaXN0ZW5lcik7CisgIHJldHVybiAwOworCisgIGVycm9yOgorICBzY2xvc2UobGlzdGVuZXIpOworICBzY2xvc2Uoc29ja3NbMF0pOworICBzY2xvc2Uoc29ja3NbMV0pOworICByZXR1cm4gLTE7Cit9CisKKyNlbmRpZiAvKiAhIEhBVkVfU09DS0VUUEFJUiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWZiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrZXRwYWlyLmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9TT0NLRVRQQUlSX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU09DS0VUUEFJUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKyNpZm5kZWYgSEFWRV9TT0NLRVRQQUlSCitpbnQgQ3VybF9zb2NrZXRwYWlyKGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja3NbMl0pOworI2Vsc2UKKyNkZWZpbmUgQ3VybF9zb2NrZXRwYWlyKGEsYixjLGQpIHNvY2tldHBhaXIoYSxiLGMsZCkKKyNlbmRpZgorCisvKiBEZWZpbmVkIGhlcmUgdG8gYWxsb3cgc3BlY2lmaWMgYnVpbGQgY29uZmlncyB0byBkaXNhYmxlIGl0IGNvbXBsZXRlbHkgKi8KKyNkZWZpbmUgVVNFX1NPQ0tFVFBBSVIgMQorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfU09DS0VUUEFJUl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuYwppbmRleCBkOGZjYzNiLi4wZmI5N2UxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM3LDE2ICszNywxOSBAQAogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJ0aW1ldmFsLmgiCiAjaW5jbHVkZSAic29ja3MuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiIC8qIGZvciBnZXRzb2NrIG1hY3JvcyAqLwogCi0vKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKIC8qCiAgKiBIZWxwZXIgcmVhZC1mcm9tLXNvY2tldCBmdW5jdGlvbnMuIERvZXMgdGhlIHNhbWUgYXMgQ3VybF9yZWFkKCkgYnV0IGl0CiAgKiBibG9ja3MgdW50aWwgYWxsIGJ5dGVzIGFtb3VudCBvZiBidWZmZXJzaXplIHdpbGwgYmUgcmVhZC4gTm8gbW9yZSwgbm8gbGVzcy4KICAqCi0gKiBUaGlzIGlzIFNUVVBJRCBCTE9DS0lORyBiZWhhdmlvdXIgd2hpY2ggd2UgZnJvd24gdXBvbiwgYnV0IHJpZ2h0IG5vdyB0aGlzCi0gKiBpcyB3aGF0IHdlIGhhdmUuLi4KKyAqIFRoaXMgaXMgU1RVUElEIEJMT0NLSU5HIGJlaGF2aW9yLiBPbmx5IHVzZWQgYnkgdGhlIFNPQ0tTIEdTU0FQSSBmdW5jdGlvbnMuCiAgKi8KIGludCBDdXJsX2Jsb2NrcmVhZF9hbGwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsICAgICAvKiByZWFkIGZyb20gdGhpcyBzb2NrZXQgKi8KQEAgLTkyLDYgKzk1LDgxIEBACiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KKyNlbmRpZgorCisjaWZuZGVmIERFQlVHQlVJTEQKKyNkZWZpbmUgc3hzdGF0ZSh4LHkpIHNvY2tzc3RhdGUoeCx5KQorI2Vsc2UKKyNkZWZpbmUgc3hzdGF0ZSh4LHkpIHNvY2tzc3RhdGUoeCx5LCBfX0xJTkVfXykKKyNlbmRpZgorCisKKy8qIGFsd2F5cyB1c2UgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2Ugc3RhdGUsIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llciAqLworc3RhdGljIHZvaWQgc29ja3NzdGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY29ubmVjdF90IHN0YXRlCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgICAgICAgICAgICAgICAgICAsIGludCBsaW5lbm8KKyNlbmRpZgorKQoreworICBlbnVtIGNvbm5lY3RfdCBvbGRzdGF0ZSA9IGNvbm4tPmNubmN0LnN0YXRlOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogc3luY2VkIHdpdGggdGhlIHN0YXRlIGxpc3QgaW4gdXJsZGF0YS5oICovCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3RhdGVuYW1lW10gPSB7CisgICAgIklOSVQiLAorICAgICJTT0NLU19JTklUIiwKKyAgICAiU09DS1NfU0VORCIsCisgICAgIlNPQ0tTX1JFQURfSU5JVCIsCisgICAgIlNPQ0tTX1JFQUQiLAorICAgICJHU1NBUElfSU5JVCIsCisgICAgIkFVVEhfSU5JVCIsCisgICAgIkFVVEhfU0VORCIsCisgICAgIkFVVEhfUkVBRCIsCisgICAgIlJFUV9JTklUIiwKKyAgICAiUkVTT0xWSU5HIiwKKyAgICAiUkVTT0xWRUQiLAorICAgICJSRVNPTFZFX1JFTU9URSIsCisgICAgIlJFUV9TRU5EIiwKKyAgICAiUkVRX1NFTkRJTkciLAorICAgICJSRVFfUkVBRCIsCisgICAgIlJFUV9SRUFEX01PUkUiLAorICAgICJET05FIgorICB9OworI2VuZGlmCisKKyAgaWYob2xkc3RhdGUgPT0gc3RhdGUpCisgICAgLyogZG9uJ3QgYm90aGVyIHdoZW4gdGhlIG5ldyBzdGF0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIHN0YXRlICovCisgICAgcmV0dXJuOworCisgIGNvbm4tPmNubmN0LnN0YXRlID0gc3RhdGU7CisKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIGluZm9mKGNvbm4tPmRhdGEsCisgICAgICAgICJTWFNUQVRFOiAlcyA9PiAlcyBjb25uICVwOyBsaW5lICVkXG4iLAorICAgICAgICBzdGF0ZW5hbWVbb2xkc3RhdGVdLCBzdGF0ZW5hbWVbY29ubi0+Y25uY3Quc3RhdGVdLCBjb25uLAorICAgICAgICBsaW5lbm8pOworI2VuZGlmCit9CisKK2ludCBDdXJsX1NPQ0tTX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBpbnQgcmMgPSAwOworICBzb2NrWzBdID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBzd2l0Y2goY29ubi0+Y25uY3Quc3RhdGUpIHsKKyAgY2FzZSBDT05ORUNUX1JFU09MVklORzoKKyAgY2FzZSBDT05ORUNUX1NPQ0tTX1JFQUQ6CisgIGNhc2UgQ09OTkVDVF9BVVRIX1JFQUQ6CisgIGNhc2UgQ09OTkVDVF9SRVFfUkVBRDoKKyAgY2FzZSBDT05ORUNUX1JFUV9SRUFEX01PUkU6CisgICAgcmMgPSBHRVRTT0NLX1JFQURTT0NLKDApOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJjID0gR0VUU09DS19XUklURVNPQ0soMCk7CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIHJjOworfQogCiAvKgogKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgaW4gdG8gYSBTT0NLUzQgcHJveHkgYW5kIHNlbmRzIHRoZSBzcGVjaWZpY3MgdG8gdGhlIGZpbmFsCkBAIC0xMDgsNjIgKzE4Niw4OSBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKIHsKICAgY29uc3QgYm9vbCBwcm90b2NvbDRhID0KICAgICAoY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzRBKSA/IFRSVUUgOiBGQUxTRTsKLSNkZWZpbmUgU09DS1M0UkVRTEVOIDI2MgotICB1bnNpZ25lZCBjaGFyIHNvY2tzcmVxW1NPQ0tTNFJFUUxFTl07IC8qIHJvb20gZm9yIFNPQ0tTNCByZXF1ZXN0IGluY2wuIHVzZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAqLwotICBDVVJMY29kZSBjb2RlOwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHVuc2lnbmVkIGNoYXIgKnNvY2tzcmVxID0gJmNvbm4tPmNubmN0LnNvY2tzcmVxWzBdOworICBDVVJMY29kZSByZXN1bHQ7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGNvbm5zdGF0ZSAqc3ggPSAmY29ubi0+Y25uY3Q7CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zID0gTlVMTDsKKyAgc3NpemVfdCBhY3R1YWxyZWFkOworICBzc2l6ZV90IHdyaXR0ZW47CiAKLSAgaWYoQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKSA8IDApIHsKLSAgICAvKiB0aW1lLW91dCwgYmFpbCBvdXQsIGdvIGhvbWUgKi8KLSAgICBmYWlsZihkYXRhLCAiQ29ubmVjdGlvbiB0aW1lLW91dCIpOwotICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gIH0KKyAgaWYoIVNPQ0tTX1NUQVRFKHN4LT5zdGF0ZSkgJiYgISpkb25lKQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9TT0NLU19JTklUKTsKIAotICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKLSAgICBpbmZvZihjb25uLT5kYXRhLCAiU09DS1M0JXM6IGNvbm5lY3RpbmcgdG8gSFRUUCBwcm94eSAlcyBwb3J0ICVkXG4iLAotICAgICAgICAgIHByb3RvY29sNGEgPyAiYSIgOiAiIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKKyAgc3dpdGNoKHN4LT5zdGF0ZSkgeworICBjYXNlIENPTk5FQ1RfU09DS1NfSU5JVDoKKyAgICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzQlczogY29ubmVjdGluZyB0byBIVFRQIHByb3h5ICVzIHBvcnQgJWRcbiIsCisgICAgICAgICAgICBwcm90b2NvbDRhID8gImEiIDogIiIsIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CiAKLSAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgRkFMU0UpOworICAgIGluZm9mKGRhdGEsICJTT0NLUzQgY29tbXVuaWNhdGlvbiB0byAlczolZFxuIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKIAotICBpbmZvZihkYXRhLCAiU09DS1M0IGNvbW11bmljYXRpb24gdG8gJXM6JWRcbiIsIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisgICAgLyoKKyAgICAgKiBDb21wb3NlIHNvY2tzNCByZXF1ZXN0CisgICAgICoKKyAgICAgKiBSZXF1ZXN0IGZvcm1hdAorICAgICAqCisgICAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKKyAgICAgKiAgICAgfCBWTiB8IENEIHwgRFNUUE9SVCB8ICAgICAgRFNUSVAgICAgICAgIHwgVVNFUklEICAgICAgIHxOVUxMfAorICAgICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsuLi4uKy0tLS0rCisgICAgICogIyBvZiBieXRlczogIDEgICAgMSAgICAgIDIgICAgICAgICAgICAgIDQgICAgICAgICAgIHZhcmlhYmxlICAgICAgIDEKKyAgICAgKi8KIAotICAvKgotICAgKiBDb21wb3NlIHNvY2tzNCByZXF1ZXN0Ci0gICAqCi0gICAqIFJlcXVlc3QgZm9ybWF0Ci0gICAqCi0gICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsuLi4uKy0tLS0rCi0gICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfCBVU0VSSUQgICAgICAgfE5VTEx8Ci0gICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsuLi4uKy0tLS0rCi0gICAqICMgb2YgYnl0ZXM6ICAxICAgIDEgICAgICAyICAgICAgICAgICAgICA0ICAgICAgICAgICB2YXJpYWJsZSAgICAgICAxCi0gICAqLworICAgIHNvY2tzcmVxWzBdID0gNDsgLyogdmVyc2lvbiAoU09DS1M0KSAqLworICAgIHNvY2tzcmVxWzFdID0gMTsgLyogY29ubmVjdCAqLworICAgIHNvY2tzcmVxWzJdID0gKHVuc2lnbmVkIGNoYXIpKChyZW1vdGVfcG9ydCA+PiA4KSAmIDB4ZmYpOyAvKiBQT1JUIE1TQiAqLworICAgIHNvY2tzcmVxWzNdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7ICAgICAgICAvKiBQT1JUIExTQiAqLwogCi0gIHNvY2tzcmVxWzBdID0gNDsgLyogdmVyc2lvbiAoU09DS1M0KSAqLwotICBzb2Nrc3JlcVsxXSA9IDE7IC8qIGNvbm5lY3QgKi8KLSAgc29ja3NyZXFbMl0gPSAodW5zaWduZWQgY2hhcikoKHJlbW90ZV9wb3J0ID4+IDgpICYgMHhmZik7IC8qIFBPUlQgTVNCICovCi0gIHNvY2tzcmVxWzNdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7ICAgICAgICAvKiBQT1JUIExTQiAqLworICAgIC8qIEROUyByZXNvbHZlIG9ubHkgZm9yIFNPQ0tTNCwgbm90IFNPQ0tTNGEgKi8KKyAgICBpZighcHJvdG9jb2w0YSkgeworICAgICAgZW51bSByZXNvbHZlX3QgcmMgPQorICAgICAgICBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQsIEZBTFNFLCAmZG5zKTsKIAotICAvKiBETlMgcmVzb2x2ZSBvbmx5IGZvciBTT0NLUzQsIG5vdCBTT0NLUzRhICovCi0gIGlmKCFwcm90b2NvbDRhKSB7Ci0gICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnM7CisgICAgICBpZihyYyA9PSBDVVJMUkVTT0xWX0VSUk9SKQorICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOworICAgICAgZWxzZSBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpIHsKKyAgICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFU09MVklORyk7CisgICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzQgbm9uLWJsb2NraW5nIHJlc29sdmUgb2YgJXNcbiIsIGhvc3RuYW1lKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFU09MVkVEKTsKKyAgICAgIGdvdG8gQ09OTkVDVF9SRVNPTFZFRDsKKyAgICB9CisKKyAgICAvKiBzb2NrczRhIGRvZXNuJ3QgcmVzb2x2ZSBhbnl0aGluZyBsb2NhbGx5ICovCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICBnb3RvIENPTk5FQ1RfUkVRX0lOSVQ7CisKKyAgY2FzZSBDT05ORUNUX1JFU09MVklORzoKKyAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBuYW1lIHJlc29sdmVkIGJ5IG5vdyAqLworICAgIGRucyA9IEN1cmxfZmV0Y2hfYWRkcihjb25uLCBob3N0bmFtZSwgKGludCljb25uLT5wb3J0KTsKKworICAgIGlmKGRucykgeworI2lmZGVmIENVUkxSRVNfQVNZTkNICisgICAgICBjb25uLT5hc3luYy5kbnMgPSBkbnM7CisgICAgICBjb25uLT5hc3luYy5kb25lID0gVFJVRTsKKyNlbmRpZgorICAgICAgaW5mb2YoZGF0YSwgIkhvc3RuYW1lICclcycgd2FzIGZvdW5kXG4iLCBob3N0bmFtZSk7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVTT0xWRUQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcmVzb2x2X2NoZWNrKGRhdGEtPmNvbm4sICZkbnMpOworICAgICAgLyogc3RheSBpbiB0aGUgc3RhdGUgb3IgZXJyb3Igb3V0ICovCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFU09MVkVEOgorICBjYXNlIENPTk5FQ1RfUkVTT0xWRUQ6IHsKICAgICBDdXJsX2FkZHJpbmZvICpocCA9IE5VTEw7Ci0gICAgaW50IHJjOwotCi0gICAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQsIEZBTFNFLCAmZG5zKTsKLQotICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCi0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOwotCi0gICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQotICAgICAgLyogaWdub3JlcyB0aGUgcmV0dXJuIGNvZGUsIGJ1dCAnZG5zJyByZW1haW5zIE5VTEwgb24gZmFpbHVyZSAqLwotICAgICAgKHZvaWQpQ3VybF9yZXNvbHZlcl93YWl0X3Jlc29sdihjb25uLCAmZG5zKTsKLQorICAgIGNoYXIgYnVmWzY0XTsKICAgICAvKgogICAgICAqIFdlIGNhbm5vdCB1c2UgJ2hvc3RlbnQnIGFzIGEgc3RydWN0IHRoYXQgQ3VybF9yZXNvbHYoKSByZXR1cm5zLiAgSXQKICAgICAgKiByZXR1cm5zIGEgQ3VybF9hZGRyaW5mbyBwb2ludGVyIHRoYXQgbWF5IG5vdCBhbHdheXMgbG9vayB0aGUgc2FtZS4KQEAgLTE3MSw3ICsyNzYsNiBAQAogICAgIGlmKGRucykKICAgICAgIGhwID0gZG5zLT5hZGRyOwogICAgIGlmKGhwKSB7Ci0gICAgICBjaGFyIGJ1Zls2NF07CiAgICAgICBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKGhwLCBidWYsIHNpemVvZihidWYpKTsKIAogICAgICAgaWYoaHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7CkBAIC0xODcsNyArMjkxLDYgQEAKICAgICAgIH0KICAgICAgIGVsc2UgewogICAgICAgICBocCA9IE5VTEw7IC8qIGZhaWwhICovCi0KICAgICAgICAgZmFpbGYoZGF0YSwgIlNPQ0tTNCBjb25uZWN0aW9uIHRvICVzIG5vdCBzdXBwb3J0ZWRcbiIsIGJ1Zik7CiAgICAgICB9CiAKQEAgLTE5OSwxNDkgKzMwMiwxNjYgQEAKICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKICAgICB9CiAgIH0KLQotICAvKgotICAgKiBUaGlzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGluZyAiSWRlbnRpZmljYXRpb24gUHJvdG9jb2wgKFJGQzE0MTMpIi4KLSAgICovCi0gIHNvY2tzcmVxWzhdID0gMDsgLyogZW5zdXJlIGVtcHR5IHVzZXJpZCBpcyBOVUwtdGVybWluYXRlZCAqLwotICBpZihwcm94eV91c2VyKSB7Ci0gICAgc2l6ZV90IHBsZW4gPSBzdHJsZW4ocHJveHlfdXNlcik7Ci0gICAgaWYocGxlbiA+PSBzaXplb2Yoc29ja3NyZXEpIC0gOCkgewotICAgICAgZmFpbGYoZGF0YSwgIlRvbyBsb25nIFNPQ0tTIHByb3h5IG5hbWUsIGNhbid0IHVzZSFcbiIpOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICB9Ci0gICAgLyogY29weSB0aGUgcHJveHkgbmFtZSBXSVRIIHRyYWlsaW5nIHplcm8gKi8KLSAgICBtZW1jcHkoc29ja3NyZXEgKyA4LCBwcm94eV91c2VyLCBwbGVuICsgMSk7Ci0gIH0KLQotICAvKgotICAgKiBNYWtlIGNvbm5lY3Rpb24KLSAgICovCi0gIHsKLSAgICBpbnQgcmVzdWx0OwotICAgIHNzaXplX3QgYWN0dWFscmVhZDsKLSAgICBzc2l6ZV90IHdyaXR0ZW47Ci0gICAgc3NpemVfdCBob3N0bmFtZWxlbiA9IDA7Ci0gICAgc3NpemVfdCBwYWNrZXRzaXplID0gOSArCi0gICAgICBzdHJsZW4oKGNoYXIgKilzb2Nrc3JlcSArIDgpOyAvKiBzaXplIGluY2x1ZGluZyBOVUwgKi8KLQotICAgIC8qIElmIFNPQ0tTNGEsIHNldCBzcGVjaWFsIGludmFsaWQgSVAgYWRkcmVzcyAwLjAuMC54ICovCi0gICAgaWYocHJvdG9jb2w0YSkgewotICAgICAgc29ja3NyZXFbNF0gPSAwOwotICAgICAgc29ja3NyZXFbNV0gPSAwOwotICAgICAgc29ja3NyZXFbNl0gPSAwOwotICAgICAgc29ja3NyZXFbN10gPSAxOwotICAgICAgLyogSWYgc3RpbGwgZW5vdWdoIHJvb20gaW4gYnVmZmVyLCBhbHNvIGFwcGVuZCBob3N0bmFtZSAqLwotICAgICAgaG9zdG5hbWVsZW4gPSAoc3NpemVfdClzdHJsZW4oaG9zdG5hbWUpICsgMTsgLyogbGVuZ3RoIGluY2x1ZGluZyBOVUwgKi8KLSAgICAgIGlmKHBhY2tldHNpemUgKyBob3N0bmFtZWxlbiA8PSBTT0NLUzRSRVFMRU4pCi0gICAgICAgIHN0cmNweSgoY2hhciAqKXNvY2tzcmVxICsgcGFja2V0c2l6ZSwgaG9zdG5hbWUpOwotICAgICAgZWxzZQotICAgICAgICBob3N0bmFtZWxlbiA9IDA7IC8qIEZsYWc6IGhvc3RuYW1lIGRpZCBub3QgZml0IGluIGJ1ZmZlciAqLwotICAgIH0KLQotICAgIC8qIFNlbmQgcmVxdWVzdCAqLwotICAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0c2l6ZSArIGhvc3RuYW1lbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuKTsKLSAgICBpZihjb2RlIHx8ICh3cml0dGVuICE9IHBhY2tldHNpemUgKyBob3N0bmFtZWxlbikpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBTT0NLUzQgY29ubmVjdCByZXF1ZXN0LiIpOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICB9Ci0gICAgaWYocHJvdG9jb2w0YSAmJiBob3N0bmFtZWxlbiA9PSAwKSB7Ci0gICAgICAvKiBTT0NLUzRhIHdpdGggdmVyeSBsb25nIGhvc3RuYW1lIC0gc2VuZCB0aGF0IG5hbWUgc2VwYXJhdGVseSAqLwotICAgICAgaG9zdG5hbWVsZW4gPSAoc3NpemVfdClzdHJsZW4oaG9zdG5hbWUpICsgMTsKLSAgICAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopaG9zdG5hbWUsIGhvc3RuYW1lbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4pOwotICAgICAgaWYoY29kZSB8fCAod3JpdHRlbiAhPSBob3N0bmFtZWxlbikpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QuIik7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgQ09OTkVDVF9SRVFfSU5JVDoKKyAgY2FzZSBDT05ORUNUX1JFUV9JTklUOgorICAgIC8qCisgICAgICogVGhpcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRpbmcgIklkZW50aWZpY2F0aW9uIFByb3RvY29sIChSRkMxNDEzKSIuCisgICAgICovCisgICAgc29ja3NyZXFbOF0gPSAwOyAvKiBlbnN1cmUgZW1wdHkgdXNlcmlkIGlzIE5VTC10ZXJtaW5hdGVkICovCisgICAgaWYocHJveHlfdXNlcikgeworICAgICAgc2l6ZV90IHBsZW4gPSBzdHJsZW4ocHJveHlfdXNlcik7CisgICAgICBpZihwbGVuID49IHNpemVvZihzeC0+c29ja3NyZXEpIC0gOCkgeworICAgICAgICBmYWlsZihkYXRhLCAiVG9vIGxvbmcgU09DS1MgcHJveHkgbmFtZSwgY2FuJ3QgdXNlIVxuIik7CiAgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgICB9Ci0gICAgfQotCi0gICAgcGFja2V0c2l6ZSA9IDg7IC8qIHJlY2VpdmUgZGF0YSBzaXplICovCi0KLSAgICAvKiBSZWNlaXZlIHJlc3BvbnNlICovCi0gICAgcmVzdWx0ID0gQ3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIHBhY2tldHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhY3R1YWxyZWFkKTsKLSAgICBpZihyZXN1bHQgfHwgKGFjdHVhbHJlYWQgIT0gcGFja2V0c2l6ZSkpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTT0NLUzQgY29ubmVjdCByZXF1ZXN0IGFjay4iKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICAvKiBjb3B5IHRoZSBwcm94eSBuYW1lIFdJVEggdHJhaWxpbmcgemVybyAqLworICAgICAgbWVtY3B5KHNvY2tzcmVxICsgOCwgcHJveHlfdXNlciwgcGxlbiArIDEpOwogICAgIH0KIAogICAgIC8qCi0gICAgICogUmVzcG9uc2UgZm9ybWF0Ci0gICAgICoKLSAgICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKLSAgICAgKiAgICAgfCBWTiB8IENEIHwgRFNUUE9SVCB8ICAgICAgRFNUSVAgICAgICAgIHwKLSAgICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKLSAgICAgKiAjIG9mIGJ5dGVzOiAgMSAgICAxICAgICAgMiAgICAgICAgICAgICAgNAotICAgICAqCi0gICAgICogVk4gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHJlcGx5IGNvZGUgYW5kIHNob3VsZCBiZSAwLiBDRCBpcyB0aGUgcmVzdWx0Ci0gICAgICogY29kZSB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgICAgKgotICAgICAqIDkwOiByZXF1ZXN0IGdyYW50ZWQKLSAgICAgKiA5MTogcmVxdWVzdCByZWplY3RlZCBvciBmYWlsZWQKLSAgICAgKiA5MjogcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIFNPQ0tTIHNlcnZlciBjYW5ub3QgY29ubmVjdCB0bwotICAgICAqICAgICBpZGVudGQgb24gdGhlIGNsaWVudAotICAgICAqIDkzOiByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgdGhlIGNsaWVudCBwcm9ncmFtIGFuZCBpZGVudGQKLSAgICAgKiAgICAgcmVwb3J0IGRpZmZlcmVudCB1c2VyLWlkcworICAgICAqIE1ha2UgY29ubmVjdGlvbgogICAgICAqLworICAgIHsKKyAgICAgIHNzaXplX3QgcGFja2V0c2l6ZSA9IDkgKworICAgICAgICBzdHJsZW4oKGNoYXIgKilzb2Nrc3JlcSArIDgpOyAvKiBzaXplIGluY2x1ZGluZyBOVUwgKi8KIAotICAgIC8qIHdyb25nIHZlcnNpb24gPyAqLwotICAgIGlmKHNvY2tzcmVxWzBdICE9IDApIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiU09DS1M0IHJlcGx5IGhhcyB3cm9uZyB2ZXJzaW9uLCB2ZXJzaW9uIHNob3VsZCBiZSAwLiIpOworICAgICAgLyogSWYgU09DS1M0YSwgc2V0IHNwZWNpYWwgaW52YWxpZCBJUCBhZGRyZXNzIDAuMC4wLnggKi8KKyAgICAgIGlmKHByb3RvY29sNGEpIHsKKyAgICAgICAgc3NpemVfdCBob3N0bmFtZWxlbiA9IDA7CisgICAgICAgIHNvY2tzcmVxWzRdID0gMDsKKyAgICAgICAgc29ja3NyZXFbNV0gPSAwOworICAgICAgICBzb2Nrc3JlcVs2XSA9IDA7CisgICAgICAgIHNvY2tzcmVxWzddID0gMTsKKyAgICAgICAgLyogYXBwZW5kIGhvc3RuYW1lICovCisgICAgICAgIGhvc3RuYW1lbGVuID0gKHNzaXplX3Qpc3RybGVuKGhvc3RuYW1lKSArIDE7IC8qIGxlbmd0aCBpbmNsdWRpbmcgTlVMICovCisgICAgICAgIGlmKGhvc3RuYW1lbGVuIDw9IDI1NSkKKyAgICAgICAgICBzdHJjcHkoKGNoYXIgKilzb2Nrc3JlcSArIHBhY2tldHNpemUsIGhvc3RuYW1lKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNPQ0tTNDogdG9vIGxvbmcgaG9zdCBuYW1lIik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICAgICAgfQorICAgICAgICBwYWNrZXRzaXplICs9IGhvc3RuYW1lbGVuOworICAgICAgfQorICAgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsKKyAgICAgIHN4LT5vdXRzdGFuZGluZyA9IHBhY2tldHNpemU7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVRX1NFTkRJTkcpOworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfUkVRX1NFTkRJTkc6CisgICAgLyogU2VuZCByZXF1ZXN0ICovCisgICAgcmVzdWx0ID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZ3cml0dGVuKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBTT0NLUzQgY29ubmVjdCByZXF1ZXN0LiIpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CisgICAgaWYod3JpdHRlbiAhPSBzeC0+b3V0c3RhbmRpbmcpIHsKKyAgICAgIC8qIG5vdCBkb25lLCByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSB3cml0dGVuOworICAgICAgc3gtPm91dHAgKz0gd3JpdHRlbjsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CiAKLSAgICAvKiBSZXN1bHQgKi8KLSAgICBzd2l0Y2goc29ja3NyZXFbMV0pIHsKLSAgICBjYXNlIDkwOgotICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCVzIHJlcXVlc3QgZ3JhbnRlZC5cbiIsIHByb3RvY29sNGE/ImEiOiIiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgOTE6Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgotICAgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBvciBmYWlsZWQuIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIGNhc2UgOTI6Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgotICAgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIFNPQ0tTIHNlcnZlciBjYW5ub3QgY29ubmVjdCB0byAiCi0gICAgICAgICAgICAiaWRlbnRkIG9uIHRoZSBjbGllbnQuIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIGNhc2UgOTM6Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgotICAgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkICIKLSAgICAgICAgICAgICJyZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzLiIsCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNV0sCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCi0gICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzJdIDw8IDgpIHwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbM10pLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMV0pOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKLSAgICAgICAgICAgICIsIFVua25vd24uIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgLyogZG9uZSBzZW5kaW5nISAqLworICAgIHN4LT5vdXRzdGFuZGluZyA9IDg7IC8qIHJlY2VpdmUgZGF0YSBzaXplICovCisgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsKKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfU09DS1NfUkVBRCk7CisKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfU09DS1NfUkVBRDoKKyAgICAvKiBSZWNlaXZlIHJlc3BvbnNlICovCisgICAgcmVzdWx0ID0gQ3VybF9yZWFkX3BsYWluKHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmYWN0dWFscmVhZCk7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiU09DS1M0OiBGYWlsZWQgcmVjZWl2aW5nIGNvbm5lY3QgcmVxdWVzdCBhY2s6ICVzIiwKKyAgICAgICAgICAgIGN1cmxfZWFzeV9zdHJlcnJvcihyZXN1bHQpKTsKICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgfQorICAgIGVsc2UgaWYoYWN0dWFscmVhZCAhPSBzeC0+b3V0c3RhbmRpbmcpIHsKKyAgICAgIC8qIHJlbWFpbiBpbiByZWFkaW5nIHN0YXRlICovCisgICAgICBzeC0+b3V0c3RhbmRpbmcgLT0gYWN0dWFscmVhZDsKKyAgICAgIHN4LT5vdXRwICs9IGFjdHVhbHJlYWQ7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9ET05FKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDogLyogbG90cyBvZiB1bnVzZWQgc3RhdGVzIGluIFNPQ0tTNCAqLworICAgIGJyZWFrOwogICB9CiAKLSAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CisgIC8qCisgICAqIFJlc3BvbnNlIGZvcm1hdAorICAgKgorICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgICogICAgIHwgVk4gfCBDRCB8IERTVFBPUlQgfCAgICAgIERTVElQICAgICAgICB8CisgICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgKiAjIG9mIGJ5dGVzOiAgMSAgICAxICAgICAgMiAgICAgICAgICAgICAgNAorICAgKgorICAgKiBWTiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgcmVwbHkgY29kZSBhbmQgc2hvdWxkIGJlIDAuIENEIGlzIHRoZSByZXN1bHQKKyAgICogY29kZSB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgICoKKyAgICogOTA6IHJlcXVlc3QgZ3JhbnRlZAorICAgKiA5MTogcmVxdWVzdCByZWplY3RlZCBvciBmYWlsZWQKKyAgICogOTI6IHJlcXVlc3QgcmVqZWN0ZWQgYmVjYXVzZSBTT0NLUyBzZXJ2ZXIgY2Fubm90IGNvbm5lY3QgdG8KKyAgICogICAgIGlkZW50ZCBvbiB0aGUgY2xpZW50CisgICAqIDkzOiByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgdGhlIGNsaWVudCBwcm9ncmFtIGFuZCBpZGVudGQKKyAgICogICAgIHJlcG9ydCBkaWZmZXJlbnQgdXNlci1pZHMKKyAgICovCiAKKyAgLyogd3JvbmcgdmVyc2lvbiA/ICovCisgIGlmKHNvY2tzcmVxWzBdICE9IDApIHsKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJTT0NLUzQgcmVwbHkgaGFzIHdyb25nIHZlcnNpb24sIHZlcnNpb24gc2hvdWxkIGJlIDAuIik7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIC8qIFJlc3VsdCAqLworICBzd2l0Y2goc29ja3NyZXFbMV0pIHsKKyAgY2FzZSA5MDoKKyAgICBpbmZvZihkYXRhLCAiU09DS1M0JXMgcmVxdWVzdCBncmFudGVkLlxuIiwgcHJvdG9jb2w0YT8iYSI6IiIpOworICAgIGJyZWFrOworICBjYXNlIDkxOgorICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgorICAgICAgICAgICIsIHJlcXVlc3QgcmVqZWN0ZWQgb3IgZmFpbGVkLiIsCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzJdIDw8IDgpIHwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbM10pLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICBjYXNlIDkyOgorICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgorICAgICAgICAgICIsIHJlcXVlc3QgcmVqZWN0ZWQgYmVjYXVzZSBTT0NLUyBzZXJ2ZXIgY2Fubm90IGNvbm5lY3QgdG8gIgorICAgICAgICAgICJpZGVudGQgb24gdGhlIGNsaWVudC4iLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgY2FzZSA5MzoKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgdGhlIGNsaWVudCBwcm9ncmFtIGFuZCBpZGVudGQgIgorICAgICAgICAgICJyZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzLiIsCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzJdIDw8IDgpIHwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbM10pLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICBkZWZhdWx0OgorICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgorICAgICAgICAgICIsIFVua25vd24uIiwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNV0sCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAorICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMV0pOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworICAqZG9uZSA9IFRSVUU7CiAgIHJldHVybiBDVVJMRV9PSzsgLyogUHJveHkgd2FzIHN1Y2Nlc3NmdWwhICovCiB9CiAKQEAgLTM1NCw3ICs0NzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKIHsKICAgLyoKICAgICBBY2NvcmRpbmcgdG8gdGhlIFJGQzE5MjgsIHNlY3Rpb24gIjYuICBSZXBsaWVzIi4gVGhpcyBpcyB3aGF0IGEgU09DSzUKQEAgLTM3MiwxNDAgKzQ5MywxNTggQEAKICAgICBvICBSRVAgICAgUmVwbHkgZmllbGQ6CiAgICAgbyAgWCcwMCcgc3VjY2VlZGVkCiAgICovCi0KLSAgdW5zaWduZWQgY2hhciBzb2Nrc3JlcVs2MDBdOyAvKiByb29tIGZvciBsYXJnZSB1c2VyL3B3ICgyNTUgbWF4IGVhY2gpICovCisgIHVuc2lnbmVkIGNoYXIgKnNvY2tzcmVxID0gJmNvbm4tPmNubmN0LnNvY2tzcmVxWzBdOworICBjaGFyIGRlc3RbMjU2XSA9ICJ1bmtub3duIjsgIC8qIHByaW50YWJsZSBob3N0bmFtZTpwb3J0ICovCiAgIGludCBpZHg7CiAgIHNzaXplX3QgYWN0dWFscmVhZDsKICAgc3NpemVfdCB3cml0dGVuOwotICBpbnQgcmVzdWx0OwotICBDVVJMY29kZSBjb2RlOwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICB0aW1lZGlmZl90IHRpbWVvdXQ7CiAgIGJvb2wgc29ja3M1X3Jlc29sdmVfbG9jYWwgPQogICAgIChjb25uLT5zb2Nrc19wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNSkgPyBUUlVFIDogRkFMU0U7CiAgIGNvbnN0IHNpemVfdCBob3N0bmFtZV9sZW4gPSBzdHJsZW4oaG9zdG5hbWUpOwogICBzc2l6ZV90IGxlbiA9IDA7CiAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYXV0aCA9IGRhdGEtPnNldC5zb2NrczVhdXRoOwogICBib29sIGFsbG93X2dzc2FwaSA9IEZBTFNFOworICBzdHJ1Y3QgY29ubnN0YXRlICpzeCA9ICZjb25uLT5jbm5jdDsKKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMgPSBOVUxMOwogCi0gIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQotICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzU6IGNvbm5lY3RpbmcgdG8gSFRUUCBwcm94eSAlcyBwb3J0ICVkXG4iLAotICAgICAgICAgIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisgIGlmKCFTT0NLU19TVEFURShzeC0+c3RhdGUpICYmICEqZG9uZSkKKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfU09DS1NfSU5JVCk7CiAKLSAgLyogUkZDMTkyOCBjaGFwdGVyIDUgc3BlY2lmaWVzIG1heCAyNTUgY2hhcnMgZm9yIGRvbWFpbiBuYW1lIGluIHBhY2tldCAqLwotICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwgJiYgaG9zdG5hbWVfbGVuID4gMjU1KSB7Ci0gICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNTogc2VydmVyIHJlc29sdmluZyBkaXNhYmxlZCBmb3IgaG9zdG5hbWVzIG9mICIKLSAgICAgICAgICAibGVuZ3RoID4gMjU1IFthY3R1YWwgbGVuPSV6dV1cbiIsIGhvc3RuYW1lX2xlbik7Ci0gICAgc29ja3M1X3Jlc29sdmVfbG9jYWwgPSBUUlVFOwotICB9CisgIHN3aXRjaChzeC0+c3RhdGUpIHsKKyAgY2FzZSBDT05ORUNUX1NPQ0tTX0lOSVQ6CisgICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkpCisgICAgICBpbmZvZihjb25uLT5kYXRhLCAiU09DS1M1OiBjb25uZWN0aW5nIHRvIEhUVFAgcHJveHkgJXMgcG9ydCAlZFxuIiwKKyAgICAgICAgICAgIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CiAKLSAgLyogZ2V0IHRpbWVvdXQgKi8KLSAgdGltZW91dCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgLyogUkZDMTkyOCBjaGFwdGVyIDUgc3BlY2lmaWVzIG1heCAyNTUgY2hhcnMgZm9yIGRvbWFpbiBuYW1lIGluIHBhY2tldCAqLworICAgIGlmKCFzb2NrczVfcmVzb2x2ZV9sb2NhbCAmJiBob3N0bmFtZV9sZW4gPiAyNTUpIHsKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzU6IHNlcnZlciByZXNvbHZpbmcgZGlzYWJsZWQgZm9yIGhvc3RuYW1lcyBvZiAiCisgICAgICAgICAgICAibGVuZ3RoID4gMjU1IFthY3R1YWwgbGVuPSV6dV1cbiIsIGhvc3RuYW1lX2xlbik7CisgICAgICBzb2NrczVfcmVzb2x2ZV9sb2NhbCA9IFRSVUU7CisgICAgfQogCi0gIGlmKHRpbWVvdXQgPCAwKSB7Ci0gICAgLyogdGltZS1vdXQsIGJhaWwgb3V0LCBnbyBob21lICovCi0gICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdGltZS1vdXQiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICB9Ci0KLSAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7Ci0KLSAgLyogd2FpdCB1bnRpbCBzb2NrZXQgZ2V0cyBjb25uZWN0ZWQgKi8KLSAgcmVzdWx0ID0gU09DS0VUX1dSSVRBQkxFKHNvY2ssIHRpbWVvdXQpOwotCi0gIGlmKC0xID09IHJlc3VsdCkgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzU6IG5vIGNvbm5lY3Rpb24gaGVyZSIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLSAgaWYoMCA9PSByZXN1bHQpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICB9Ci0KLSAgaWYocmVzdWx0ICYgQ1VSTF9DU0VMRUNUX0VSUikgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzU6IGVycm9yIG9jY3VycmVkIGR1cmluZyBjb25uZWN0aW9uIik7Ci0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgfQotCi0gIGlmKGF1dGggJiB+KENVUkxBVVRIX0JBU0lDIHwgQ1VSTEFVVEhfR1NTQVBJKSkKLSAgICBpbmZvZihjb25uLT5kYXRhLAotICAgICAgICAid2FybmluZzogdW5zdXBwb3J0ZWQgdmFsdWUgcGFzc2VkIHRvIENVUkxPUFRfU09DS1M1X0FVVEg6ICVsdVxuIiwKLSAgICAgICAgYXV0aCk7Ci0gIGlmKCEoYXV0aCAmIENVUkxBVVRIX0JBU0lDKSkKLSAgICAvKiBkaXNhYmxlIHVzZXJuYW1lL3Bhc3N3b3JkIGF1dGggKi8KLSAgICBwcm94eV91c2VyID0gTlVMTDsKKyAgICBpZihhdXRoICYgfihDVVJMQVVUSF9CQVNJQyB8IENVUkxBVVRIX0dTU0FQSSkpCisgICAgICBpbmZvZihjb25uLT5kYXRhLAorICAgICAgICAgICAgIndhcm5pbmc6IHVuc3VwcG9ydGVkIHZhbHVlIHBhc3NlZCB0byBDVVJMT1BUX1NPQ0tTNV9BVVRIOiAlbHVcbiIsCisgICAgICAgICAgICBhdXRoKTsKKyAgICBpZighKGF1dGggJiBDVVJMQVVUSF9CQVNJQykpCisgICAgICAvKiBkaXNhYmxlIHVzZXJuYW1lL3Bhc3N3b3JkIGF1dGggKi8KKyAgICAgIHByb3h5X3VzZXIgPSBOVUxMOwogI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgaWYoYXV0aCAmIENVUkxBVVRIX0dTU0FQSSkKLSAgICBhbGxvd19nc3NhcGkgPSBUUlVFOworICAgIGlmKGF1dGggJiBDVVJMQVVUSF9HU1NBUEkpCisgICAgICBhbGxvd19nc3NhcGkgPSBUUlVFOwogI2VuZGlmCiAKLSAgaWR4ID0gMDsKLSAgc29ja3NyZXFbaWR4KytdID0gNTsgICAvKiB2ZXJzaW9uICovCi0gIGlkeCsrOyAgICAgICAgICAgICAgICAgLyogcmVzZXJ2ZSBmb3IgdGhlIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2RzICovCi0gIHNvY2tzcmVxW2lkeCsrXSA9IDA7ICAgLyogbm8gYXV0aGVudGljYXRpb24gKi8KLSAgaWYoYWxsb3dfZ3NzYXBpKQotICAgIHNvY2tzcmVxW2lkeCsrXSA9IDE7IC8qIEdTUy1BUEkgKi8KLSAgaWYocHJveHlfdXNlcikKLSAgICBzb2Nrc3JlcVtpZHgrK10gPSAyOyAvKiB1c2VybmFtZS9wYXNzd29yZCAqLwotICAvKiB3cml0ZSB0aGUgbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKi8KLSAgc29ja3NyZXFbMV0gPSAodW5zaWduZWQgY2hhcikgKGlkeCAtIDIpOworICAgIGlkeCA9IDA7CisgICAgc29ja3NyZXFbaWR4KytdID0gNTsgICAvKiB2ZXJzaW9uICovCisgICAgaWR4Kys7ICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLworICAgIHNvY2tzcmVxW2lkeCsrXSA9IDA7ICAgLyogbm8gYXV0aGVudGljYXRpb24gKi8KKyAgICBpZihhbGxvd19nc3NhcGkpCisgICAgICBzb2Nrc3JlcVtpZHgrK10gPSAxOyAvKiBHU1MtQVBJICovCisgICAgaWYocHJveHlfdXNlcikKKyAgICAgIHNvY2tzcmVxW2lkeCsrXSA9IDI7IC8qIHVzZXJuYW1lL3Bhc3N3b3JkICovCisgICAgLyogd3JpdGUgdGhlIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2RzICovCisgICAgc29ja3NyZXFbMV0gPSAodW5zaWduZWQgY2hhcikgKGlkeCAtIDIpOwogCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIEZBTFNFKTsKLQotICBpbmZvZihkYXRhLCAiU09DS1M1IGNvbW11bmljYXRpb24gdG8gJXM6JWRcbiIsIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7Ci0KLSAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgKDIgKyAoaW50KXNvY2tzcmVxWzFdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4pOwotICBpZihjb2RlIHx8ICh3cml0dGVuICE9ICgyICsgKGludClzb2Nrc3JlcVsxXSkpKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byBzZW5kIGluaXRpYWwgU09DS1M1IHJlcXVlc3QuIik7Ci0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgfQotCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOwotCi0gIHJlc3VsdCA9IFNPQ0tFVF9SRUFEQUJMRShzb2NrLCB0aW1lb3V0KTsKLQotICBpZigtMSA9PSByZXN1bHQpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1IG5vdGhpbmcgdG8gcmVhZCIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLSAgaWYoMCA9PSByZXN1bHQpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1IHJlYWQgdGltZW91dCIpOwotICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gIH0KLQotICBpZihyZXN1bHQgJiBDVVJMX0NTRUxFQ1RfRVJSKSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNSByZWFkIGVycm9yIG9jY3VycmVkIik7Ci0gICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7Ci0gIH0KLQotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7Ci0KLSAgcmVzdWx0ID0gQ3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIDIsICZhY3R1YWxyZWFkKTsKLSAgaWYocmVzdWx0IHx8IChhY3R1YWxyZWFkICE9IDIpKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byByZWNlaXZlIGluaXRpYWwgU09DS1M1IHJlc3BvbnNlLiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICBpZihzb2Nrc3JlcVswXSAhPSA1KSB7Ci0gICAgZmFpbGYoZGF0YSwgIlJlY2VpdmVkIGludmFsaWQgdmVyc2lvbiBpbiBpbml0aWFsIFNPQ0tTNSByZXNwb25zZS4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0gIGlmKHNvY2tzcmVxWzFdID09IDApIHsKLSAgICAvKiBOb3RoaW5nIHRvIGRvLCBubyBhdXRoZW50aWNhdGlvbiBuZWVkZWQgKi8KLSAgICA7Ci0gIH0KLSNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGVsc2UgaWYoYWxsb3dfZ3NzYXBpICYmIChzb2Nrc3JlcVsxXSA9PSAxKSkgewotICAgIGNvZGUgPSBDdXJsX1NPQ0tTNV9nc3NhcGlfbmVnb3RpYXRlKHNvY2tpbmRleCwgY29ubik7Ci0gICAgaWYoY29kZSkgewotICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byBuZWdvdGlhdGUgU09DS1M1IEdTUy1BUEkgY29udGV4dC4iKTsKKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzb2Nrc3JlcSwgaWR4LCAmd3JpdHRlbik7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHNlbmQgaW5pdGlhbCBTT0NLUzUgcmVxdWVzdC4iKTsKICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgfQotICB9CisgICAgaWYod3JpdHRlbiAhPSBpZHgpIHsKKyAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9TT0NLU19TRU5EKTsKKyAgICAgIHN4LT5vdXRzdGFuZGluZyA9IGlkeCAtIHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCA9ICZzb2Nrc3JlcVt3cml0dGVuXTsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1NPQ0tTX1JFQUQpOworICAgIGdvdG8gQ09OTkVDVF9TT0NLU19SRUFEX0lOSVQ7CisgIGNhc2UgQ09OTkVDVF9TT0NLU19TRU5EOgorICAgIHJlc3VsdCA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmd3JpdHRlbik7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHNlbmQgaW5pdGlhbCBTT0NLUzUgcmVxdWVzdC4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGlmKHdyaXR0ZW4gIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiBub3QgZG9uZSwgcmVtYWluIGluIHN0YXRlICovCisgICAgICBzeC0+b3V0c3RhbmRpbmcgLT0gd3JpdHRlbjsKKyAgICAgIHN4LT5vdXRwICs9IHdyaXR0ZW47CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIENPTk5FQ1RfU09DS1NfUkVBRF9JTklUOgorICBjYXNlIENPTk5FQ1RfU09DS1NfUkVBRF9JTklUOgorICAgIHN4LT5vdXRzdGFuZGluZyA9IDI7IC8qIGV4cGVjdCB0d28gYnl0ZXMgKi8KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOyAvKiBzdG9yZSBpdCBoZXJlICovCisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBDT05ORUNUX1NPQ0tTX1JFQUQ6CisgICAgcmVzdWx0ID0gQ3VybF9yZWFkX3BsYWluKHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmYWN0dWFscmVhZCk7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHJlY2VpdmUgaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gcmVhZGluZyBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBpbnZhbGlkIHZlcnNpb24gaW4gaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDApIHsKKyAgICAgIC8qIERPTkUhIE5vIGF1dGhlbnRpY2F0aW9uIG5lZWRlZC4gU2VuZCByZXF1ZXN0LiAqLworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICAgIGdvdG8gQ09OTkVDVF9SRVFfSU5JVDsKKyAgICB9CisgICAgZWxzZSBpZihzb2Nrc3JlcVsxXSA9PSAyKSB7CisgICAgICAvKiByZWd1bGFyIG5hbWUgKyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiAqLworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0FVVEhfSU5JVCk7CisgICAgICBnb3RvIENPTk5FQ1RfQVVUSF9JTklUOworICAgIH0KKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICAgZWxzZSBpZihhbGxvd19nc3NhcGkgJiYgKHNvY2tzcmVxWzFdID09IDEpKSB7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfR1NTQVBJX0lOSVQpOworICAgICAgcmVzdWx0ID0gQ3VybF9TT0NLUzVfZ3NzYXBpX25lZ290aWF0ZShzb2NraW5kZXgsIGNvbm4pOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbmVnb3RpYXRlIFNPQ0tTNSBHU1MtQVBJIGNvbnRleHQuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgfQogI2VuZGlmCi0gIGVsc2UgaWYoc29ja3NyZXFbMV0gPT0gMikgeworICAgIGVsc2UgeworICAgICAgLyogZXJyb3IgKi8KKyAgICAgIGlmKCFhbGxvd19nc3NhcGkgJiYgKHNvY2tzcmVxWzFdID09IDEpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICJTT0NLUzUgR1NTQVBJIHBlci1tZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeworICAgICAgICBmYWlsZihkYXRhLCAiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIHdhcyBhY2NlcHRhYmxlLiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgfQorICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJVbmRvY3VtZW50ZWQgU09DS1M1IG1vZGUgYXR0ZW1wdGVkIHRvIGJlIHVzZWQgYnkgc2VydmVyLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgYnJlYWs7CisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorICBjYXNlIENPTk5FQ1RfR1NTQVBJX0lOSVQ6CisgICAgLyogR1NTQVBJIHN0dWZmIGRvbmUgbm9uLWJsb2NraW5nICovCisgICAgYnJlYWs7CisjZW5kaWYKKworICBkZWZhdWx0OiAvKiBkbyBub3RoaW5nISAqLworICAgIGJyZWFrOworCisgIENPTk5FQ1RfQVVUSF9JTklUOgorICBjYXNlIENPTk5FQ1RfQVVUSF9JTklUOiB7CiAgICAgLyogTmVlZHMgdXNlciBuYW1lIGFuZCBwYXNzd29yZCAqLwogICAgIHNpemVfdCBwcm94eV91c2VyX2xlbiwgcHJveHlfcGFzc3dvcmRfbGVuOwogICAgIGlmKHByb3h5X3VzZXIgJiYgcHJveHlfcGFzc3dvcmQpIHsKQEAgLTU0NiwxOCArNjg1LDQxIEBACiAgICAgICBtZW1jcHkoc29ja3NyZXEgKyBsZW4sIHByb3h5X3Bhc3N3b3JkLCBwcm94eV9wYXNzd29yZF9sZW4pOwogICAgIH0KICAgICBsZW4gKz0gcHJveHlfcGFzc3dvcmRfbGVuOwotCi0gICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgbGVuLCAmd3JpdHRlbik7Ci0gICAgaWYoY29kZSB8fCAobGVuICE9IHdyaXR0ZW4pKSB7CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0FVVEhfU0VORCk7CisgICAgc3gtPm91dHN0YW5kaW5nID0gbGVuOworICAgIHN4LT5vdXRwID0gc29ja3NyZXE7CisgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfQVVUSF9TRU5EOgorICAgIHJlc3VsdCA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmd3JpdHRlbik7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M1IHN1Yi1uZWdvdGlhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9Ci0KLSAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgMiwgJmFjdHVhbHJlYWQpOwotICAgIGlmKHJlc3VsdCB8fCAoYWN0dWFscmVhZCAhPSAyKSkgeworICAgIGlmKHN4LT5vdXRzdGFuZGluZyAhPSB3cml0dGVuKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSB3cml0dGVuOworICAgICAgc3gtPm91dHAgKz0gd3JpdHRlbjsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsKKyAgICBzeC0+b3V0c3RhbmRpbmcgPSAyOworICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9BVVRIX1JFQUQpOworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9BVVRIX1JFQUQ6CisgICAgcmVzdWx0ID0gQ3VybF9yZWFkX3BsYWluKHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmYWN0dWFscmVhZCk7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHJlY2VpdmUgU09DS1M1IHN1Yi1uZWdvdGlhdGlvbiByZXNwb25zZS4iKTsKICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgfQorICAgIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSBhY3R1YWxyZWFkOworICAgICAgc3gtPm91dHAgKz0gYWN0dWFscmVhZDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CiAKICAgICAvKiBpZ25vcmUgdGhlIGZpcnN0IChWRVIpIGJ5dGUgKi8KICAgICBpZihzb2Nrc3JlcVsxXSAhPSAwKSB7IC8qIHN0YXR1cyAqLwpAQCAtNTY3LDIzNiArNzI5LDI0OCBAQAogICAgIH0KIAogICAgIC8qIEV2ZXJ5dGhpbmcgaXMgZ29vZCBzbyBmYXIsIHVzZXIgd2FzIGF1dGhlbnRpY2F0ZWQhICovCi0gIH0KLSAgZWxzZSB7Ci0gICAgLyogZXJyb3IgKi8KLSAgICBpZighYWxsb3dfZ3NzYXBpICYmIChzb2Nrc3JlcVsxXSA9PSAxKSkgewotICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJTT0NLUzUgR1NTQVBJIHBlci1tZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KLSAgICBpZihzb2Nrc3JlcVsxXSA9PSAyNTUpIHsKLSAgICAgIGlmKCFwcm94eV91c2VyIHx8ICEqcHJveHlfdXNlcikgewotICAgICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgICAiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIHdhcyBhY2NlcHRhYmxlLiAoSXQgaXMgcXVpdGUgbGlrZWx5IgotICAgICAgICAgICAgICAiIHRoYXQgdGhlIFNPQ0tTNSBzZXJ2ZXIgd2FudGVkIGEgdXNlcm5hbWUvcGFzc3dvcmQsIHNpbmNlIG5vbmUiCi0gICAgICAgICAgICAgICIgd2FzIHN1cHBsaWVkIHRvIHRoZSBzZXJ2ZXIgb24gdGhpcyBjb25uZWN0aW9uLikiKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBmYWlsZihkYXRhLCAiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIHdhcyBhY2NlcHRhYmxlLiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIlVuZG9jdW1lbnRlZCBTT0NLUzUgbW9kZSBhdHRlbXB0ZWQgdG8gYmUgdXNlZCBieSBzZXJ2ZXIuIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KLSAgfQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfSU5JVCk7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgQ09OTkVDVF9SRVFfSU5JVDoKKyAgY2FzZSBDT05ORUNUX1JFUV9JTklUOgorICAgIGlmKHNvY2tzNV9yZXNvbHZlX2xvY2FsKSB7CisgICAgICBlbnVtIHJlc29sdmVfdCByYyA9IEN1cmxfcmVzb2x2KGNvbm4sIGhvc3RuYW1lLCByZW1vdGVfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsICZkbnMpOwogCi0gIC8qIEF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLCBub3cgc3BlY2lmeSBkZXN0aW5hdGlvbiB0byB0aGUgcHJveHkgKi8KLSAgbGVuID0gMDsKLSAgc29ja3NyZXFbbGVuKytdID0gNTsgLyogdmVyc2lvbiAoU09DS1M1KSAqLwotICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBjb25uZWN0ICovCi0gIHNvY2tzcmVxW2xlbisrXSA9IDA7IC8qIG11c3QgYmUgemVybyAqLworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9FUlJPUikKKyAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogCi0gIGlmKCFzb2NrczVfcmVzb2x2ZV9sb2NhbCkgewotICAgIHNvY2tzcmVxW2xlbisrXSA9IDM7IC8qIEFUWVA6IGRvbWFpbiBuYW1lID0gMyAqLwotICAgIHNvY2tzcmVxW2xlbisrXSA9IChjaGFyKSBob3N0bmFtZV9sZW47IC8qIGFkZHJlc3MgbGVuZ3RoICovCi0gICAgbWVtY3B5KCZzb2Nrc3JlcVtsZW5dLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsgLyogYWRkcmVzcyBzdHIgdy9vIE5VTEwgKi8KLSAgICBsZW4gKz0gaG9zdG5hbWVfbGVuOwotICB9Ci0gIGVsc2UgewotICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZJTkcpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVTT0xWRUQpOworICAgICAgZ290byBDT05ORUNUX1JFU09MVkVEOworICAgIH0KKyAgICBnb3RvIENPTk5FQ1RfUkVTT0xWRV9SRU1PVEU7CisKKyAgY2FzZSBDT05ORUNUX1JFU09MVklORzoKKyAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBuYW1lIHJlc29sdmVkIGJ5IG5vdyAqLworICAgIGRucyA9IEN1cmxfZmV0Y2hfYWRkcihjb25uLCBob3N0bmFtZSwgKGludCljb25uLT5wb3J0KTsKKworICAgIGlmKGRucykgeworI2lmZGVmIENVUkxSRVNfQVNZTkNICisgICAgICBjb25uLT5hc3luYy5kbnMgPSBkbnM7CisgICAgICBjb25uLT5hc3luYy5kb25lID0gVFJVRTsKKyNlbmRpZgorICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNTogaG9zdG5hbWUgJyVzJyBmb3VuZFxuIiwgaG9zdG5hbWUpOworICAgIH0KKworICAgIGlmKCFkbnMpIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcmVzb2x2X2NoZWNrKGRhdGEtPmNvbm4sICZkbnMpOworICAgICAgLyogc3RheSBpbiB0aGUgc3RhdGUgb3IgZXJyb3Igb3V0ICovCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFU09MVkVEOgorICBjYXNlIENPTk5FQ1RfUkVTT0xWRUQ6IHsKICAgICBDdXJsX2FkZHJpbmZvICpocCA9IE5VTEw7Ci0gICAgaW50IHJjID0gQ3VybF9yZXNvbHYoY29ubiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0LCBGQUxTRSwgJmRucyk7Ci0KLSAgICBpZihyYyA9PSBDVVJMUkVTT0xWX0VSUk9SKQotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwotCi0gICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7Ci0gICAgICAvKiB0aGlzIHJlcXVpcmVzIHRoYXQgd2UncmUgaW4gIndhaXQgZm9yIHJlc29sdmUiIHN0YXRlICovCi0gICAgICBjb2RlID0gQ3VybF9yZXNvbHZlcl93YWl0X3Jlc29sdihjb25uLCAmZG5zKTsKLSAgICAgIGlmKGNvZGUpCi0gICAgICAgIHJldHVybiBjb2RlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogV2UgY2Fubm90IHVzZSAnaG9zdGVudCcgYXMgYSBzdHJ1Y3QgdGhhdCBDdXJsX3Jlc29sdigpIHJldHVybnMuICBJdAotICAgICAqIHJldHVybnMgYSBDdXJsX2FkZHJpbmZvIHBvaW50ZXIgdGhhdCBtYXkgbm90IGFsd2F5cyBsb29rIHRoZSBzYW1lLgotICAgICAqLwogICAgIGlmKGRucykKICAgICAgIGhwID0gZG5zLT5hZGRyOwotICAgIGlmKGhwKSB7Ci0gICAgICBjaGFyIGJ1Zls2NF07Ci0gICAgICBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKGhwLCBidWYsIHNpemVvZihidWYpKTsKLQotICAgICAgaWYoaHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyX2luOwotICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBBVFlQOiBJUHY0ID0gMSAqLwotCi0gICAgICAgIHNhZGRyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopaHAtPmFpX2FkZHI7Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgIHNvY2tzcmVxW2xlbisrXSA9ICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY0ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKLSAgICAgIH0KLSNpZmRlZiBFTkFCTEVfSVBWNgotICAgICAgZWxzZSBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcl9pbjY7Ci0gICAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDQ7IC8qIEFUWVA6IElQdjYgPSA0ICovCi0KLSAgICAgICAgc2FkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWhwLT5haV9hZGRyOwotICAgICAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgc29ja3NyZXFbbGVuKytdID0KLSAgICAgICAgICAgICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbjYtPnNpbjZfYWRkci5zNl9hZGRyKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY2ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgZWxzZSB7Ci0gICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KLQotICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgYnVmKTsKLSAgICAgIH0KLQotICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KLSAgICB9CiAgICAgaWYoIWhwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlc29sdmUgXCIlc1wiIGZvciBTT0NLUzUgY29ubmVjdC4iLAogICAgICAgICAgICAgaG9zdG5hbWUpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgIH0KLSAgfQogCi0gIHNvY2tzcmVxW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSgocmVtb3RlX3BvcnQgPj4gOCkgJiAweGZmKTsgLyogUE9SVCBNU0IgKi8KLSAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7ICAgICAgICAvKiBQT1JUIExTQiAqLworICAgIGlmKEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGRlc3QsIHNpemVvZihkZXN0KSkpIHsKKyAgICAgIHNpemVfdCBkZXN0bGVuID0gc3RybGVuKGRlc3QpOworICAgICAgbXNucHJpbnRmKGRlc3QgKyBkZXN0bGVuLCBzaXplb2YoZGVzdCkgLSBkZXN0bGVuLCAiOiVkIiwgcmVtb3RlX3BvcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0cmNweShkZXN0LCAidW5rbm93biIpOworICAgIH0KIAotI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgaWYoY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlNPQ0tTNSBHU1MtQVBJIHByb3RlY3Rpb24gbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKLSAgfQotICBlbHNlCi0jZW5kaWYKLSAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCBsZW4sICZ3cml0dGVuKTsKKyAgICBsZW4gPSAwOworICAgIHNvY2tzcmVxW2xlbisrXSA9IDU7IC8qIHZlcnNpb24gKFNPQ0tTNSkgKi8KKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBjb25uZWN0ICovCisgICAgc29ja3NyZXFbbGVuKytdID0gMDsgLyogbXVzdCBiZSB6ZXJvICovCisgICAgaWYoaHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICBpbnQgaTsKKyAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHJfaW47CisgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBBVFlQOiBJUHY0ID0gMSAqLwogCi0gIGlmKGNvZGUgfHwgKGxlbiAhPSB3cml0dGVuKSkgewotICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBTT0NLUzUgY29ubmVjdCByZXF1ZXN0LiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICBsZW4gPSAxMDsgLyogbWluaW11bSBwYWNrZXQgc2l6ZSBpcyAxMCAqLwotCi0jaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQotICBpZihjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKLSAgICBmYWlsZihkYXRhLCAiU09DS1M1IEdTUy1BUEkgcHJvdGVjdGlvbiBub3QgeWV0IGltcGxlbWVudGVkLiIpOwotICB9Ci0gIGVsc2UKLSNlbmRpZgotICAgIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sICZhY3R1YWxyZWFkKTsKLQotICBpZihyZXN1bHQgfHwgKGxlbiAhPSBhY3R1YWxyZWFkKSkgewotICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTT0NLUzUgY29ubmVjdCByZXF1ZXN0IGFjay4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgaWYoc29ja3NyZXFbMF0gIT0gNSkgeyAvKiB2ZXJzaW9uICovCi0gICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAiU09DS1M1IHJlcGx5IGhhcyB3cm9uZyB2ZXJzaW9uLCB2ZXJzaW9uIHNob3VsZCBiZSA1LiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICAvKiBGaXg6IGluIGdlbmVyYWwsIHJldHVybmVkIEJORC5BRERSIGlzIHZhcmlhYmxlIGxlbmd0aCBwYXJhbWV0ZXIgYnkgUkZDCi0gICAgIDE5MjgsIHNvIHRoZSByZXBseSBwYWNrZXQgc2hvdWxkIGJlIHJlYWQgdW50aWwgdGhlIGVuZCB0byBhdm9pZCBlcnJvcnMgYXQKLSAgICAgc3Vic2VxdWVudCBwcm90b2NvbCBsZXZlbC4KLQotICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLSAgICB8VkVSIHwgUkVQIHwgIFJTViAgfCBBVFlQIHwgQk5ELkFERFIgfCBCTkQuUE9SVCB8Ci0gICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotICAgIHwgMSAgfCAgMSAgfCBYJzAwJyB8ICAxICAgfCBWYXJpYWJsZSB8ICAgIDIgICAgIHwKLSAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi0KLSAgICAgQVRZUDoKLSAgICAgbyAgSVAgdjQgYWRkcmVzczogWCcwMScsIEJORC5BRERSID0gNCBieXRlCi0gICAgIG8gIGRvbWFpbiBuYW1lOiAgWCcwMycsIEJORC5BRERSID0gWyAxIGJ5dGUgbGVuZ3RoLCBzdHJpbmcgXQotICAgICBvICBJUCB2NiBhZGRyZXNzOiBYJzA0JywgQk5ELkFERFIgPSAxNiBieXRlCi0gICAgICovCi0KLSAgLyogQ2FsY3VsYXRlIHJlYWwgcGFja2V0IHNpemUgKi8KLSAgaWYoc29ja3NyZXFbM10gPT0gMykgewotICAgIC8qIGRvbWFpbiBuYW1lICovCi0gICAgaW50IGFkZHJsZW4gPSAoaW50KSBzb2Nrc3JlcVs0XTsKLSAgICBsZW4gPSA1ICsgYWRkcmxlbiArIDI7Ci0gIH0KLSAgZWxzZSBpZihzb2Nrc3JlcVszXSA9PSA0KSB7Ci0gICAgLyogSVB2NiAqLwotICAgIGxlbiA9IDQgKyAxNiArIDI7Ci0gIH0KLQotICAvKiBBdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgcmVhZCBmaXJzdCAxMCBieXRlcyAqLwotI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgaWYoIWNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSkgewotICAgIC8qIGRlY3J5cHRfZ3NzYXBpX2Jsb2NrcmVhZCBhbHJlYWR5IHJlYWQgdGhlIHdob2xlIHBhY2tldCAqLwotI2VuZGlmCi0gICAgaWYobGVuID4gMTApIHsKLSAgICAgIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKSZzb2Nrc3JlcVsxMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC0gMTAsICZhY3R1YWxyZWFkKTsKLSAgICAgIGlmKHJlc3VsdCB8fCAoKGxlbiAtIDEwKSAhPSBhY3R1YWxyZWFkKSkgewotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgU09DS1M1IGNvbm5lY3QgcmVxdWVzdCBhY2suIik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICBzYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWhwLT5haV9hZGRyOworICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIHNvY2tzcmVxW2xlbisrXSA9ICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKVtpXTsKICAgICAgIH0KKworICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBjb25uZWN0IHRvIElQdjQgJXMgKGxvY2FsbHkgcmVzb2x2ZWQpXG4iLCBkZXN0KTsKKyAgICB9CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBlbHNlIGlmKGhwLT5haV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgIGludCBpOworICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2FkZHJfaW42OworICAgICAgc29ja3NyZXFbbGVuKytdID0gNDsgLyogQVRZUDogSVB2NiA9IDQgKi8KKworICAgICAgc2FkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWhwLT5haV9hZGRyOworICAgICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPQorICAgICAgICAgICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbjYtPnNpbjZfYWRkci5zNl9hZGRyKVtpXTsKKyAgICAgIH0KKworICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBjb25uZWN0IHRvIElQdjYgJXMgKGxvY2FsbHkgcmVzb2x2ZWQpXG4iLCBkZXN0KTsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIHsKKyAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgY29ubmVjdGlvbiB0byAlcyBub3Qgc3VwcG9ydGVkXG4iLCBkZXN0KTsKKyAgICB9CisKKyAgICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgZG5zKTsgLyogbm90IHVzZWQgYW55bW9yZSBmcm9tIG5vdyBvbiAqLworICAgIGdvdG8gQ09OTkVDVF9SRVFfU0VORDsKKyAgfQorICBDT05ORUNUX1JFU09MVkVfUkVNT1RFOgorICBjYXNlIENPTk5FQ1RfUkVTT0xWRV9SRU1PVEU6CisgICAgLyogQXV0aGVudGljYXRpb24gaXMgY29tcGxldGUsIG5vdyBzcGVjaWZ5IGRlc3RpbmF0aW9uIHRvIHRoZSBwcm94eSAqLworICAgIGxlbiA9IDA7CisgICAgc29ja3NyZXFbbGVuKytdID0gNTsgLyogdmVyc2lvbiAoU09DS1M1KSAqLworICAgIHNvY2tzcmVxW2xlbisrXSA9IDE7IC8qIGNvbm5lY3QgKi8KKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAwOyAvKiBtdXN0IGJlIHplcm8gKi8KKworICAgIGlmKCFzb2NrczVfcmVzb2x2ZV9sb2NhbCkgeworICAgICAgc29ja3NyZXFbbGVuKytdID0gMzsgLyogQVRZUDogZG9tYWluIG5hbWUgPSAzICovCisgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAoY2hhcikgaG9zdG5hbWVfbGVuOyAvKiBvbmUgYnl0ZSBhZGRyZXNzIGxlbmd0aCAqLworICAgICAgbWVtY3B5KCZzb2Nrc3JlcVtsZW5dLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsgLyogYWRkcmVzcyB3L28gTlVMTCAqLworICAgICAgbGVuICs9IGhvc3RuYW1lX2xlbjsKKyAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byAlczolZCAocmVtb3RlbHkgcmVzb2x2ZWQpXG4iLAorICAgICAgICAgICAgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKKyAgICB9CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICBDT05ORUNUX1JFUV9TRU5EOgorICBjYXNlIENPTk5FQ1RfUkVRX1NFTkQ6CisgICAgLyogUE9SVCBNU0IgKi8KKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAodW5zaWduZWQgY2hhcikoKHJlbW90ZV9wb3J0ID4+IDgpICYgMHhmZik7CisgICAgLyogUE9SVCBMU0IgKi8KKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAodW5zaWduZWQgY2hhcikocmVtb3RlX3BvcnQgJiAweGZmKTsKKworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICBpZihjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgR1NTLUFQSSBwcm90ZWN0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyNlbmRpZgorICAgIHN4LT5vdXRwID0gc29ja3NyZXE7CisgICAgc3gtPm91dHN0YW5kaW5nID0gbGVuOworICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfU0VORElORyk7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBDT05ORUNUX1JFUV9TRU5ESU5HOgorICAgIHJlc3VsdCA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmd3JpdHRlbik7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M1IGNvbm5lY3QgcmVxdWVzdC4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGlmKHN4LT5vdXRzdGFuZGluZyAhPSB3cml0dGVuKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSB3cml0dGVuOworICAgICAgc3gtPm91dHAgKz0gd3JpdHRlbjsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKICAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQotICB9Ci0jZW5kaWYKLQotICBpZihzb2Nrc3JlcVsxXSAhPSAwKSB7IC8qIEFueXRoaW5nIGJlc2lkZXMgMCBpcyBhbiBlcnJvciAqLwotICAgIGlmKHNvY2tzcmVxWzNdID09IDEpIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs4XSA8PCA4KSB8Ci0gICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOV0pLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMV0pOworICAgIGlmKGNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSkgeworICAgICAgZmFpbGYoZGF0YSwgIlNPQ0tTNSBHU1MtQVBJIHByb3RlY3Rpb24gbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgfQotICAgIGVsc2UgaWYoc29ja3NyZXFbM10gPT0gMykgewotICAgICAgdW5zaWduZWQgY2hhciBwb3J0X3VwcGVyID0gKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbbGVuIC0gMl07Ci0gICAgICBzb2Nrc3JlcVtsZW4gLSAyXSA9IDA7CisjZW5kaWYKKyAgICBzeC0+b3V0c3RhbmRpbmcgPSAxMDsgLyogbWluaW11bSBwYWNrZXQgc2l6ZSBpcyAxMCAqLworICAgIHN4LT5vdXRwID0gc29ja3NyZXE7CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9SRUFEKTsKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfUkVRX1JFQUQ6CisgICAgcmVzdWx0ID0gQ3VybF9yZWFkX3BsYWluKHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gtPm91dHN0YW5kaW5nLCAmYWN0dWFscmVhZCk7CisgICAgaWYocmVzdWx0ICYmIChDVVJMRV9BR0FJTiAhPSByZXN1bHQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgU09DS1M1IGNvbm5lY3QgcmVxdWVzdCBhY2suIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSBhY3R1YWxyZWFkOworICAgICAgc3gtPm91dHAgKz0gYWN0dWFscmVhZDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisKKyAgICBpZihzb2Nrc3JlcVswXSAhPSA1KSB7IC8qIHZlcnNpb24gKi8KICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXM6JWQuICglZCkiLAotICAgICAgICAgICAgKGNoYXIgKikmc29ja3NyZXFbNV0sCi0gICAgICAgICAgICAoKHBvcnRfdXBwZXIgPDwgOCkgfAotICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxW2xlbiAtIDFdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHNvY2tzcmVxW2xlbiAtIDJdID0gcG9ydF91cHBlcjsKKyAgICAgICAgICAgICJTT0NLUzUgcmVwbHkgaGFzIHdyb25nIHZlcnNpb24sIHZlcnNpb24gc2hvdWxkIGJlIDUuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdICE9IDApIHsgLyogQW55dGhpbmcgYmVzaWRlcyAwIGlzIGFuIGVycm9yICovCisgICAgICBmYWlsZihkYXRhLCAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMuICglZCkiLAorICAgICAgICAgICAgaG9zdG5hbWUsICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgLyogRml4OiBpbiBnZW5lcmFsLCByZXR1cm5lZCBCTkQuQUREUiBpcyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGJ5IFJGQworICAgICAgIDE5MjgsIHNvIHRoZSByZXBseSBwYWNrZXQgc2hvdWxkIGJlIHJlYWQgdW50aWwgdGhlIGVuZCB0byBhdm9pZCBlcnJvcnMKKyAgICAgICBhdCBzdWJzZXF1ZW50IHByb3RvY29sIGxldmVsLgorCisgICAgICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgIHxWRVIgfCBSRVAgfCAgUlNWICB8IEFUWVAgfCBCTkQuQUREUiB8IEJORC5QT1JUIHwKKyAgICAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgfCAxICB8ICAxICB8IFgnMDAnIHwgIDEgICB8IFZhcmlhYmxlIHwgICAgMiAgICAgfAorICAgICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICAgICAgIEFUWVA6CisgICAgICAgbyAgSVAgdjQgYWRkcmVzczogWCcwMScsIEJORC5BRERSID0gNCBieXRlCisgICAgICAgbyAgZG9tYWluIG5hbWU6ICBYJzAzJywgQk5ELkFERFIgPSBbIDEgYnl0ZSBsZW5ndGgsIHN0cmluZyBdCisgICAgICAgbyAgSVAgdjYgYWRkcmVzczogWCcwNCcsIEJORC5BRERSID0gMTYgYnl0ZQorICAgICovCisKKyAgICAvKiBDYWxjdWxhdGUgcmVhbCBwYWNrZXQgc2l6ZSAqLworICAgIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKKyAgICAgIC8qIGRvbWFpbiBuYW1lICovCisgICAgICBpbnQgYWRkcmxlbiA9IChpbnQpIHNvY2tzcmVxWzRdOworICAgICAgbGVuID0gNSArIGFkZHJsZW4gKyAyOwogICAgIH0KICAgICBlbHNlIGlmKHNvY2tzcmVxWzNdID09IDQpIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJTAyeCUwMng6JTAyeCUwMng6IgotICAgICAgICAgICAgIiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiVkLiAoJWQpIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzhdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs5XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzEwXSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTFdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTJdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxM10sCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTddLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMThdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxOV0sCi0gICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzIwXSA8PCA4KSB8Ci0gICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMjFdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIC8qIElQdjYgKi8KKyAgICAgIGxlbiA9IDQgKyAxNiArIDI7CiAgICAgfQotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgcmVhZCBmaXJzdCAxMCBieXRlcyAqLworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICBpZighY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7CisgICAgICAvKiBkZWNyeXB0X2dzc2FwaV9ibG9ja3JlYWQgYWxyZWFkeSByZWFkIHRoZSB3aG9sZSBwYWNrZXQgKi8KKyNlbmRpZgorICAgICAgaWYobGVuID4gMTApIHsKKyAgICAgICAgc3gtPm91dHN0YW5kaW5nID0gbGVuIC0gMTA7IC8qIGdldCB0aGUgcmVzdCAqLworICAgICAgICBzeC0+b3V0cCA9ICZzb2Nrc3JlcVsxMF07CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfUkVBRF9NT1JFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICB9CisjZW5kaWYKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfUkVRX1JFQURfTU9SRToKKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTT0NLUzUgY29ubmVjdCByZXF1ZXN0IGFjay4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSBhY3R1YWxyZWFkOworICAgICAgc3gtPm91dHAgKz0gYWN0dWFscmVhZDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0RPTkUpOwogICB9CiAgIGluZm9mKGRhdGEsICJTT0NLUzUgcmVxdWVzdCBncmFudGVkLlxuIik7CiAKLSAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CisgICpkb25lID0gVFJVRTsKICAgcmV0dXJuIENVUkxFX09LOyAvKiBQcm94eSB3YXMgc3VjY2Vzc2Z1bCEgKi8KIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmgKaW5kZXggZGFhMDdjMS4uNjRhNzU2MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywxMyArMjcsMTMgQEAKICNpZmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICNkZWZpbmUgQ3VybF9TT0NLUzQoYSxiLGMsZCxlKSBDVVJMRV9OT1RfQlVJTFRfSU4KICNkZWZpbmUgQ3VybF9TT0NLUzUoYSxiLGMsZCxlLGYpIENVUkxFX05PVF9CVUlMVF9JTgorI2RlZmluZSBDdXJsX1NPQ0tTX2dldHNvY2soeCx5LHopIDAKICNlbHNlCiAvKgogICogSGVscGVyIHJlYWQtZnJvbS1zb2NrZXQgZnVuY3Rpb25zLiBEb2VzIHRoZSBzYW1lIGFzIEN1cmxfcmVhZCgpIGJ1dCBpdAogICogYmxvY2tzIHVudGlsIGFsbCBieXRlcyBhbW91bnQgb2YgYnVmZmVyc2l6ZSB3aWxsIGJlIHJlYWQuIE5vIG1vcmUsIG5vIGxlc3MuCiAgKgotICogVGhpcyBpcyBTVFVQSUQgQkxPQ0tJTkcgYmVoYXZpb3VyIHdoaWNoIHdlIGZyb3duIHVwb24sIGJ1dCByaWdodCBub3cgdGhpcwotICogaXMgd2hhdCB3ZSBoYXZlLi4uCisgKiBUaGlzIGlzIFNUVVBJRCBCTE9DS0lORyBiZWhhdmlvcgogICovCiBpbnQgQ3VybF9ibG9ja3JlYWRfYWxsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCkBAIC00MSw2ICs0MSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgYnVmZmVyc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqbik7CiAKK2ludCBDdXJsX1NPQ0tTX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KTsKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgaW4gdG8gYSBTT0NLUzQoYSkgcHJveHkgYW5kIHNlbmRzIHRoZSBzcGVjaWZpY3MgdG8gdGhlCiAgKiBmaW5hbCBkZXN0aW5hdGlvbiBzZXJ2ZXIuCkBAIC00OSw3ICs1Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgaW4gdG8gYSBTT0NLUzUgcHJveHkgYW5kIHNlbmRzIHRoZSBzcGVjaWZpY3MgdG8gdGhlCkBAIC02MCw3ICs2NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CiAKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAvKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrc19nc3NhcGkuYwppbmRleCA2NTI5NGJiLi45N2VlNzE4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrc19nc3NhcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrc19nc3NhcGkuYwpAQCAtNSw4ICs1LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJrdXMgTW9lbGxlciwgPG1hcmt1c19tb2VsbGVyQGNvbXB1c2VydmUuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTY3LDYgKzE2Nyw4IEBACiAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgfQogCisgICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIEZBTFNFKTsKKwogICAvKiBBcyBsb25nIGFzIHdlIG5lZWQgdG8ga2VlcCBzZW5kaW5nIHNvbWUgY29udGV4dCBpbmZvLCBhbmQgdGhlcmUncyBubyAgKi8KICAgLyogZXJyb3JzLCBrZWVwIHNlbmRpbmcgaXQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIGZvcig7OykgewpAQCAtNTEzLDYgKzUxNSw4IEBACiAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3JlY3ZfdG9rZW4pOwogICB9CiAKKyAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CisKICAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBhY2Nlc3Mgd2l0aCVzIHByb3RlY3Rpb24gZ3JhbnRlZC5cbiIsCiAgICAgICAgIChzb2Nrc3JlcVswXSA9PSAwKT8ib3V0IEdTUy1BUEkgZGF0YSI6CiAgICAgICAgICgoc29ja3NyZXFbMF0gPT0gMSk/IiBHU1MtQVBJIGludGVncml0eSI6IiBHU1MtQVBJIGNvbmZpZGVudGlhbGl0eSIpKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzX3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzX3NzcGkuYwppbmRleCA1NzAyN2VmLi5kNWJlNjRhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrc19zc3BpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3Nfc3NwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCBNYXJrdXMgTW9lbGxlciwgPG1hcmt1c19tb2VsbGVyQGNvbXB1c2VydmUuY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCkBAIC0xNTMsNiArMTUzLDggQEAKICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICB9CiAKKyAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgRkFMU0UpOworCiAgIC8qIEFzIGxvbmcgYXMgd2UgbmVlZCB0byBrZWVwIHNlbmRpbmcgc29tZSBjb250ZXh0IGluZm8sIGFuZCB0aGVyZSdzIG5vICAqLwogICAvKiBlcnJvcnMsIGtlZXAgc2VuZGluZyBpdC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgZm9yKDs7KSB7CkBAIC01ODcsNiArNTg5LDcgQEAKICAgICBtZW1jcHkoc29ja3NyZXEsIHNzcGlfd190b2tlblswXS5wdkJ1ZmZlciwgc3NwaV93X3Rva2VuWzBdLmNiQnVmZmVyKTsKICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKICAgfQorICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBUUlVFKTsKIAogICBpbmZvZihkYXRhLCAiU09DS1M1IGFjY2VzcyB3aXRoJXMgcHJvdGVjdGlvbiBncmFudGVkLlxuIiwKICAgICAgICAgKHNvY2tzcmVxWzBdID09IDApPyJvdXQgR1NTLUFQSSBkYXRhIjoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NwbGF5LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zcGxheS5oCmluZGV4IDQ2MTJlYzIuLjkyOTJmMzQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NwbGF5LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3BsYXkuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk3IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTksMTAgKzU5LDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoKGkudHZfdXNlYykgPCAoai50dl91c2VjKSkgPyAtMSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoKGkudHZfdXNlYykgPiAoai50dl91c2VjKSkgPyAgMSA6IDApKSkpCiAKLSNpZmRlZiBERUJVR0JVSUxECi12b2lkIEN1cmxfc3BsYXlwcmludChzdHJ1Y3QgQ3VybF90cmVlICogdCwgaW50IGQsIGNoYXIgb3V0cHV0KTsKLSNlbHNlCi0jZGVmaW5lIEN1cmxfc3BsYXlwcmludCh4LHkseikgQ3VybF9ub3Bfc3RtdAotI2VuZGlmCi0KICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TUExBWV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2gtbGlic3NoLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2gtbGlic3NoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZmQ2YmQuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3NoLWxpYnNzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE5IFJlZCBIYXQsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcywgVG9tYXMgTXJheiwgU3RhbmlzbGF2IFppZGVrLAotICogICAgICAgICAgUm9iZXJ0IEtvbGN1biwgQW5kcmVhcyBTY2huZWlkZXIKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwotICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCi0gKgotICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWZkZWYgVVNFX0xJQlNTSAotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlIDxsaWJzc2gvbGlic3NoLmg+Ci0jaW5jbHVkZSA8bGlic3NoL3NmdHAuaD4KLQotI2lmZGVmIEhBVkVfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9VVFNOQU1FX0gKLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVREQl9ICi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZgotI2lmZGVmIF9fVk1TCi0jaW5jbHVkZSA8aW4uaD4KLSNpbmNsdWRlIDxpbmV0Lmg+Ci0jZW5kaWYKLQotI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKLSN1bmRlZiBpbl9hZGRyX3QKLSNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0jaW5jbHVkZSAidXJsZGF0YS5oIgotI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAiaG9zdGlwLmgiCi0jaW5jbHVkZSAicHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJ0cmFuc2Zlci5oIgotI2luY2x1ZGUgImVzY2FwZS5oIgotI2luY2x1ZGUgImh0dHAuaCIgICAgICAgICAgICAgICAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KLSNpbmNsdWRlICJzc2guaCIKLSNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJzcGVlZGNoZWNrLmgiCi0jaW5jbHVkZSAiZ2V0aW5mby5oIgotI2luY2x1ZGUgInN0cmR1cC5oIgotI2luY2x1ZGUgInN0cmNhc2UuaCIKLSNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKLSNpbmNsdWRlICJjb25uZWN0LmgiCi0jaW5jbHVkZSAic3RyZXJyb3IuaCIKLSNpbmNsdWRlICJpbmV0X250b3AuaCIKLSNpbmNsdWRlICJwYXJzZWRhdGUuaCIgICAgICAgICAgLyogZm9yIHRoZSB3ZWVrIGRheSBhbmQgbW9udGggbmFtZXMgKi8KLSNpbmNsdWRlICJzb2NrYWRkci5oIiAgICAgICAgICAgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLwotI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgIm11bHRpaWYuaCIKLSNpbmNsdWRlICJzZWxlY3QuaCIKLSNpbmNsdWRlICJ3YXJubGVzcy5oIgotCi0vKiBmb3IgcGVybWlzc2lvbiBhbmQgb3BlbiBmbGFncyAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLQotLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLSNpbmNsdWRlICJtZW1kZWJ1Zy5oIgotI2luY2x1ZGUgImN1cmxfcGF0aC5oIgotCi0vKiBBIHJlY2VudCBtYWNybyBwcm92aWRlZCBieSBsaWJzc2guIE9yIG1ha2Ugb3VyIG93bi4gKi8KLSNpZm5kZWYgU1NIX1NUUklOR19GUkVFX0NIQVIKLS8qICFjaGVja3NyYyEgZGlzYWJsZSBBU1NJR05XSVRISU5DT05ESVRJT04gMSAqLwotI2RlZmluZSBTU0hfU1RSSU5HX0ZSRUVfQ0hBUih4KSBcCi0gICAgZG8geyBpZigoeCkgIT0gTlVMTCkgeyBzc2hfc3RyaW5nX2ZyZWVfY2hhcih4KTsgeCA9IE5VTEw7IH0gfSB3aGlsZSgwKQotI2VuZGlmCi0KLS8qIExvY2FsIGZ1bmN0aW9uczogKi8KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9faXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLQotc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwotc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKLQotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOwotc3RhdGljIENVUkxjb2RlIHNmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7Ci1zdGF0aWMKLUNVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci0KLXN0YXRpYyB2b2lkIHNmdHBfcXVvdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLXN0YXRpYyB2b2lkIHNmdHBfcXVvdGVfc3RhdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwotCi1zdGF0aWMgaW50IG15c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci0KLXN0YXRpYyBpbnQgbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwotCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwotCi0vKgotICogU0NQIHByb3RvY29sIGhhbmRsZXIuCi0gKi8KLQotY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0gewotICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KLSAgbXlzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLwotICBteXNzaF9kb19pdCwgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLwotICBzY3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KLSAgbXlzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLwotICBteXNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAvKiBjb25uZWN0aW5nICovCi0gIHNjcF9kb2luZywgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCi0gIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KLSAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLwotICBteXNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KLSAgc2NwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLwotICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCi0gIENVUkxQUk9UT19TQ1AsICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCi0gIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgLyogZmxhZ3MgKi8KLX07Ci0KLS8qCi0gKiBTRlRQIHByb3RvY29sIGhhbmRsZXIuCi0gKi8KLQotY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2Z0cCA9IHsKLSAgIlNGVFAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KLSAgbXlzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIG15c3NoX2RvX2l0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KLSAgc2Z0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBteXNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KLSAgbXlzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCi0gIHNmdHBfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCi0gIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIG15c3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCi0gIHNmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KLSAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCi0gIENVUkxQUk9UT19TRlRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgotICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi19OwotCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9lcnJvcl90b19DVVJMRShpbnQgZXJyKQotewotICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBTU0hfRlhfT0s6Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICBjYXNlIFNTSF9GWF9OT19TVUNIX0ZJTEU6Ci0gICAgY2FzZSBTU0hfRlhfTk9fU1VDSF9QQVRIOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDsKLQotICAgIGNhc2UgU1NIX0ZYX1BFUk1JU1NJT05fREVOSUVEOgotICAgIGNhc2UgU1NIX0ZYX1dSSVRFX1BST1RFQ1Q6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7Ci0KLSAgICBjYXNlIFNTSF9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX0VYSVNUUzsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBDVVJMRV9TU0g7Ci19Ci0KLSNpZm5kZWYgREVCVUdCVUlMRAotI2RlZmluZSBzdGF0ZSh4LHkpIG15c3RhdGUoeCx5KQotI2Vsc2UKLSNkZWZpbmUgc3RhdGUoeCx5KSBteXN0YXRlKHgseSwgX19MSU5FX18pCi0jZW5kaWYKLQotLyoKLSAqIFNTSCBTdGF0ZSBtYWNoaW5lIHJlbGF0ZWQgY29kZQotICovCi0vKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgU1NIIHN0YXRlISAqLwotc3RhdGljIHZvaWQgbXlzdGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHNzaHN0YXRlIG5vd3N0YXRlCi0jaWZkZWYgREVCVUdCVUlMRAotICAgICAgICAgICAgICAgICAgICAsIGludCBsaW5lbm8KLSNlbmRpZgotICApCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKLSAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCi0gIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0gewotICAgICJTU0hfU1RPUCIsCi0gICAgIlNTSF9JTklUIiwKLSAgICAiU1NIX1NfU1RBUlRVUCIsCi0gICAgIlNTSF9IT1NUS0VZIiwKLSAgICAiU1NIX0FVVEhMSVNUIiwKLSAgICAiU1NIX0FVVEhfUEtFWV9JTklUIiwKLSAgICAiU1NIX0FVVEhfUEtFWSIsCi0gICAgIlNTSF9BVVRIX1BBU1NfSU5JVCIsCi0gICAgIlNTSF9BVVRIX1BBU1MiLAotICAgICJTU0hfQVVUSF9BR0VOVF9JTklUIiwKLSAgICAiU1NIX0FVVEhfQUdFTlRfTElTVCIsCi0gICAgIlNTSF9BVVRIX0FHRU5UIiwKLSAgICAiU1NIX0FVVEhfSE9TVF9JTklUIiwKLSAgICAiU1NIX0FVVEhfSE9TVCIsCi0gICAgIlNTSF9BVVRIX0tFWV9JTklUIiwKLSAgICAiU1NIX0FVVEhfS0VZIiwKLSAgICAiU1NIX0FVVEhfR1NTQVBJIiwKLSAgICAiU1NIX0FVVEhfRE9ORSIsCi0gICAgIlNTSF9TRlRQX0lOSVQiLAotICAgICJTU0hfU0ZUUF9SRUFMUEFUSCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX0lOSVQiLAotICAgICJTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFIiwKLSAgICAiU1NIX1NGVFBfTkVYVF9RVU9URSIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NUQVQiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TRVRTVEFUIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU1lNTElOSyIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX01LRElSIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfUkVOQU1FIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfUk1ESVIiLAotICAgICJTU0hfU0ZUUF9RVU9URV9VTkxJTksiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUVkZTIiwKLSAgICAiU1NIX1NGVFBfR0VUSU5GTyIsCi0gICAgIlNTSF9TRlRQX0ZJTEVUSU1FIiwKLSAgICAiU1NIX1NGVFBfVFJBTlNfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1VQTE9BRF9JTklUIiwKLSAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCIsCi0gICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTIiwKLSAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0lOSVQiLAotICAgICJTU0hfU0ZUUF9SRUFERElSIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUl9MSU5LIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUl9CT1RUT00iLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0RPTkUiLAotICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9JTklUIiwKLSAgICAiU1NIX1NGVFBfRE9XTkxPQURfU1RBVCIsCi0gICAgIlNTSF9TRlRQX0NMT1NFIiwKLSAgICAiU1NIX1NGVFBfU0hVVERPV04iLAotICAgICJTU0hfU0NQX1RSQU5TX0lOSVQiLAotICAgICJTU0hfU0NQX1VQTE9BRF9JTklUIiwKLSAgICAiU1NIX1NDUF9ET1dOTE9BRF9JTklUIiwKLSAgICAiU1NIX1NDUF9ET1dOTE9BRCIsCi0gICAgIlNTSF9TQ1BfRE9ORSIsCi0gICAgIlNTSF9TQ1BfU0VORF9FT0YiLAotICAgICJTU0hfU0NQX1dBSVRfRU9GIiwKLSAgICAiU1NIX1NDUF9XQUlUX0NMT1NFIiwKLSAgICAiU1NIX1NDUF9DSEFOTkVMX0ZSRUUiLAotICAgICJTU0hfU0VTU0lPTl9ESVNDT05ORUNUIiwKLSAgICAiU1NIX1NFU1NJT05fRlJFRSIsCi0gICAgIlFVSVQiCi0gIH07Ci0KLQotICBpZihzc2hjLT5zdGF0ZSAhPSBub3dzdGF0ZSkgewotICAgIGluZm9mKGNvbm4tPmRhdGEsICJTU0ggJXAgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gJXMgKGxpbmUgJWQpXG4iLAotICAgICAgICAgICh2b2lkICopIHNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdLAotICAgICAgICAgIGxpbmVubyk7Ci0gIH0KLSNlbmRpZgotCi0gIHNzaGMtPnN0YXRlID0gbm93c3RhdGU7Ci19Ci0KLS8qIE11bHRpcGxlIG9wdGlvbnM6Ci0gKiAxLiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0gaXMgc2V0IHdpdGggYW4gTUQ1Ci0gKiAgICBoYXNoICg5MHMgc3R5bGUgYXV0aCwgbm90IHN1cmUgd2Ugc2hvdWxkIGhhdmUgaXQgaGVyZSkKLSAqIDIuIGRhdGEtPnNldC5zc2hfa2V5ZnVuYyBjYWxsYmFjayBpcyBzZXQuIFRoZW4gd2UgZG8gdHJ1c3Qgb24gZmlyc3QKLSAqICAgIHVzZS4gV2UgZXZlbiBzYXZlIG9uIGtub3duaG9zdHMgaWYgQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFCi0gKiAgICBpcyByZXR1cm5lZCBieSBpdC4KLSAqIDMuIG5vbmUgb2YgdGhlIGFib3ZlLiBXZSBvbmx5IGFjY2VwdCBpZiBpdCBpcyBwcmVzZW50IG9uIGtub3duIGhvc3RzLgotICoKLSAqIFJldHVybnMgU1NIX09LIG9yIFNTSF9FUlJPUi4KLSAqLwotc3RhdGljIGludCBteXNzaF9pc19rbm93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIGludCByYzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBzc2hfa2V5IHB1YmtleTsKLSAgc2l6ZV90IGhsZW47Ci0gIHVuc2lnbmVkIGNoYXIgKmhhc2ggPSBOVUxMOwotICBjaGFyICpiYXNlNjQgPSBOVUxMOwotICBpbnQgdnN0YXRlOwotICBlbnVtIGN1cmxfa2htYXRjaCBrZXltYXRjaDsKLSAgc3RydWN0IGN1cmxfa2hrZXkgZm91bmRrZXk7Ci0gIGN1cmxfc3Noa2V5Y2FsbGJhY2sgZnVuYyA9Ci0gICAgZGF0YS0+c2V0LnNzaF9rZXlmdW5jOwotCi0gIHJjID0gc3NoX2dldF9wdWJsaWNrZXkoc3NoYy0+c3NoX3Nlc3Npb24sICZwdWJrZXkpOwotICBpZihyYyAhPSBTU0hfT0spCi0gICAgcmV0dXJuIHJjOwotCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSkgewotICAgIHJjID0gc3NoX2dldF9wdWJsaWNrZXlfaGFzaChwdWJrZXksIFNTSF9QVUJMSUNLRVlfSEFTSF9NRDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoLCAmaGxlbik7Ci0gICAgaWYocmMgIT0gU1NIX09LKQotICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgaWYoaGxlbiAhPSBzdHJsZW4oZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdKSB8fAotICAgICAgIG1lbWNtcCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdLCBoYXNoLCBobGVuKSkgewotICAgICAgcmMgPSBTU0hfRVJST1I7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgcmMgPSBTU0hfT0s7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgaWYoZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeWhvc3QgIT0gVFJVRSkgewotICAgIHJjID0gU1NIX09LOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIHZzdGF0ZSA9IHNzaF9pc19zZXJ2ZXJfa25vd24oc3NoYy0+c3NoX3Nlc3Npb24pOwotICBzd2l0Y2godnN0YXRlKSB7Ci0gICAgY2FzZSBTU0hfU0VSVkVSX0tOT1dOX09LOgotICAgICAga2V5bWF0Y2ggPSBDVVJMS0hNQVRDSF9PSzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU1NIX1NFUlZFUl9GSUxFX05PVF9GT1VORDoKLSAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBTU0hfU0VSVkVSX05PVF9LTk9XTjoKLSAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTU0lORzsKLSAgICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgICAga2V5bWF0Y2ggPSBDVVJMS0hNQVRDSF9NSVNNQVRDSDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYoZnVuYykgeyAvKiB1c2UgY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGFjdGlvbiAqLwotICAgIHJjID0gc3NoX3BraV9leHBvcnRfcHVia2V5X2Jhc2U2NChwdWJrZXksICZiYXNlNjQpOwotICAgIGlmKHJjICE9IFNTSF9PSykKLSAgICAgIGdvdG8gY2xlYW51cDsKLQotICAgIGZvdW5ka2V5LmtleSA9IGJhc2U2NDsKLSAgICBmb3VuZGtleS5sZW4gPSBzdHJsZW4oYmFzZTY0KTsKLQotICAgIHN3aXRjaChzc2hfa2V5X3R5cGUocHVia2V5KSkgewotICAgICAgY2FzZSBTU0hfS0VZVFlQRV9SU0E6Ci0gICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQTE6Ci0gICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUNEU0E7Ci0gICAgICAgIGJyZWFrOwotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCw3LDApCi0gICAgICBjYXNlIFNTSF9LRVlUWVBFX0VEMjU1MTk6Ci0gICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VEMjU1MTk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICBjYXNlIFNTSF9LRVlUWVBFX0RTUzoKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRFNTOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJjID0gU1NIX0VSUk9SOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgLyogd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBlcXVpdmFsZW50IHRvIGtub3dua2V5LiBBbHdheXMgTlVMTCAqLwotICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOwotICAgIHJjID0gZnVuYyhkYXRhLCBOVUxMLCAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCi0gICAgICAgICAgICAgIGtleW1hdGNoLCBkYXRhLT5zZXQuc3NoX2tleWZ1bmNfdXNlcnApOwotICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLQotICAgIHN3aXRjaChyYykgewotICAgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEU6Ci0gICAgICAgIHJjID0gc3NoX3dyaXRlX2tub3duaG9zdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIGlmKHJjICE9IFNTSF9PSykgewotICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IC8qIFJFSkVDVC9ERUZFUiAqLwotICAgICAgICByYyA9IFNTSF9FUlJPUjsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICBpZihrZXltYXRjaCAhPSBDVVJMS0hNQVRDSF9PSykgewotICAgICAgcmMgPSBTU0hfRVJST1I7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICB9Ci0gIHJjID0gU1NIX09LOwotCi1jbGVhbnVwOgotICBpZihoYXNoKQotICAgIHNzaF9jbGVhbl9wdWJrZXlfaGFzaCgmaGFzaCk7Ci0gIHNzaF9rZXlfZnJlZShwdWJrZXkpOwotICByZXR1cm4gcmM7Ci19Ci0KLSNkZWZpbmUgTU9WRV9UT19FUlJPUl9TVEFURShfcikgeyBcCi0gIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOyBcCi0gIHNzaGMtPmFjdHVhbGNvZGUgPSBfcjsgXAotICByYyA9IFNTSF9FUlJPUjsgXAotICBicmVhazsgXAotfQotCi0jZGVmaW5lIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpIHsgXAotICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7IFwKLSAgc3NoYy0+YWN0dWFsY29kZSA9IHNmdHBfZXJyb3JfdG9fQ1VSTEUoc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7IFwKLSAgcmMgPSBTU0hfRVJST1I7IFwKLSAgYnJlYWs7IFwKLX0KLQotI2RlZmluZSBNT1ZFX1RPX0xBU1RfQVVUSCBcCi0gIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9QQVNTV09SRCkgeyBcCi0gICAgcmMgPSBTU0hfT0s7IFwKLSAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOyBcCi0gICAgYnJlYWs7IFwKLSAgfSBcCi0gIGVsc2UgeyBcCi0gICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOyBcCi0gIH0KLQotI2RlZmluZSBNT1ZFX1RPX1RFUlRJQVJZX0FVVEggXAotICBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfSU5URVJBQ1RJVkUpIHsgXAotICAgIHJjID0gU1NIX09LOyBcCi0gICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOyBcCi0gICAgYnJlYWs7IFwKLSAgfSBcCi0gIGVsc2UgeyBcCi0gICAgTU9WRV9UT19MQVNUX0FVVEg7IFwKLSAgfQotCi0jZGVmaW5lIE1PVkVfVE9fU0VDT05EQVJZX0FVVEggXAotICBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfR1NTQVBJX01JQykgeyBcCi0gICAgcmMgPSBTU0hfT0s7IFwKLSAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9HU1NBUEkpOyBcCi0gICAgYnJlYWs7IFwKLSAgfSBcCi0gIGVsc2UgeyBcCi0gICAgTU9WRV9UT19URVJUSUFSWV9BVVRIOyBcCi0gIH0KLQotc3RhdGljCi1pbnQgbXlzc2hfYXV0aF9pbnRlcmFjdGl2ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIGludCByYzsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIGludCBucHJvbXB0czsKLQotcmVzdGFydDoKLSAgc3dpdGNoKHNzaGMtPmtiZF9zdGF0ZSkgewotICAgIGNhc2UgMDoKLSAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikKLSAgICAgICAgcmV0dXJuIFNTSF9BR0FJTjsKLQotICAgICAgaWYocmMgIT0gU1NIX0FVVEhfSU5GTykKLSAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKLQotICAgICAgbnByb21wdHMgPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGlmKG5wcm9tcHRzID09IFNTSF9FUlJPUiB8fCBucHJvbXB0cyAhPSAxKQotICAgICAgICByZXR1cm4gU1NIX0VSUk9SOwotCi0gICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfc2V0YW5zd2VyKHNzaGMtPnNzaF9zZXNzaW9uLCAwLCBjb25uLT5wYXNzd2QpOwotICAgICAgaWYocmMgPCAwKQotICAgICAgICByZXR1cm4gU1NIX0VSUk9SOwotCi0gICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIDE6Ci0gICAgICBzc2hjLT5rYmRfc3RhdGUgPSAxOwotCi0gICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOwotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pCi0gICAgICAgIHJldHVybiBTU0hfQUdBSU47Ci0gICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpCi0gICAgICAgIHJjID0gU1NIX09LOwotICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9JTkZPKSB7Ci0gICAgICAgIG5wcm9tcHRzID0gc3NoX3VzZXJhdXRoX2tiZGludF9nZXRucHJvbXB0cyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIGlmKG5wcm9tcHRzICE9IDApCi0gICAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKLQotICAgICAgICBzc2hjLT5rYmRfc3RhdGUgPSAyOwotICAgICAgICBnb3RvIHJlc3RhcnQ7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJjID0gU1NIX0VSUk9SOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgc3NoYy0+a2JkX3N0YXRlID0gMjsKLQotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQotICAgICAgICByZXR1cm4gU1NIX0FHQUlOOwotICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKQotICAgICAgICByYyA9IFNTSF9PSzsKLSAgICAgIGVsc2UKLSAgICAgICAgcmMgPSBTU0hfRVJST1I7Ci0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gU1NIX0VSUk9SOwotICB9Ci0KLSAgc3NoYy0+a2JkX3N0YXRlID0gMDsKLSAgcmV0dXJuIHJjOwotfQotCi0vKgotICogc3NoX3N0YXRlbWFjaF9hY3QoKSBydW5zIHRoZSBTU0ggc3RhdGUgbWFjaGluZSBhcyBmYXIgYXMgaXQgY2FuIHdpdGhvdXQKLSAqIGJsb2NraW5nIGFuZCB3aXRob3V0IHJlYWNoaW5nIHRoZSBlbmQuICBUaGUgZGF0YSB0aGUgcG9pbnRlciAnYmxvY2snIHBvaW50cwotICogdG8gd2lsbCBiZSBzZXQgdG8gVFJVRSBpZiB0aGUgbGlic3NoIGZ1bmN0aW9uIHJldHVybnMgU1NIX0FHQUlOCi0gKiBtZWFuaW5nIGl0IHdhbnRzIHRvIGJlIGNhbGxlZCBhZ2FpbiB3aGVuIHRoZSBzb2NrZXQgaXMgcmVhZHkKLSAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX3N0YXRlbWFjaF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpibG9jaykKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgU1NIUFJPVE8gKnByb3RvcCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgaW50IHJjID0gU1NIX05PX0VSUk9SLCBlcnI7Ci0gIGNoYXIgKm5ld19yZWFkZGlyX2xpbmU7Ci0gIGludCBzZWVrZXJyID0gQ1VSTF9TRUVLRlVOQ19PSzsKLSAgY29uc3QgY2hhciAqZXJyX21zZzsKLSAgKmJsb2NrID0gMDsgICAgICAgICAgICAgICAgICAgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KLQotICBkbyB7Ci0KLSAgICBzd2l0Y2goc3NoYy0+c3RhdGUpIHsKLSAgICBjYXNlIFNTSF9JTklUOgotICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7Ci0KLSNpZiAwCi0gICAgICBzc2hfc2V0X2xvZ19sZXZlbChTU0hfTE9HX1BST1RPQ09MKTsKLSNlbmRpZgotCi0gICAgICAvKiBTZXQgbGlic3NoIHRvIG5vbi1ibG9ja2luZywgc2luY2UgZXZlcnl0aGluZyBpbnRlcm5hbGx5IGlzCi0gICAgICAgICBub24tYmxvY2tpbmcgKi8KLSAgICAgIHNzaF9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDApOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU19TVEFSVFVQKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0KLSAgICBjYXNlIFNTSF9TX1NUQVJUVVA6Ci0gICAgICByYyA9IHNzaF9jb25uZWN0KHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGlmKHJjID09IFNTSF9BR0FJTikKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGlmKHJjICE9IFNTSF9PSykgewotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb24iKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9GQUlMRURfSU5JVCk7Ci0gICAgICB9Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9IT1NUS0VZKTsKLQotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9IT1NUS0VZOgotCi0gICAgICByYyA9IG15c3NoX2lzX2tub3duKGNvbm4pOwotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OKTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhMSVNUKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBTU0hfQVVUSExJU1Q6ewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBGQUxTRTsKLQotICAgICAgICByYyA9IHNzaF91c2VyYXV0aF9ub25lKHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMKTsKLSAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKLSAgICAgICAgICByYyA9IFNTSF9BR0FJTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKLSAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGVkIHdpdGggbm9uZVxuIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9FUlJPUikgewotICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaGMtPmF1dGhfbWV0aG9kcyA9IHNzaF91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMKTsKLSAgICAgICAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BVQkxJQ0tFWSkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BLRVlfSU5JVCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIHVzaW5nIFNTSCBwdWJsaWMga2V5IGZpbGVcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX0dTU0FQSV9NSUMpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9HU1NBUEkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX0lOVEVSQUNUSVZFKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAvKiB1bnN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKi8KLSAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICBjYXNlIFNTSF9BVVRIX1BLRVlfSU5JVDoKLSAgICAgIGlmKCEoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkpIHsKLSAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKLSAgICAgIH0KLQotICAgICAgLyogVHdvIGNob2ljZXMsICgxKSBwcml2YXRlIGtleSB3YXMgZ2l2ZW4gb24gQ01ELAotICAgICAgICogKDIpIHVzZSB0aGUgImRlZmF1bHQiIGtleXMuICovCi0gICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKSB7Ci0gICAgICAgIGlmKHNzaGMtPnB1YmtleSAmJiAhZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkKSB7Ci0gICAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfdHJ5X3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnB1YmtleSk7Ci0gICAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKLSAgICAgICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9maWxlKGRhdGEtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZzc2hjLT5wcml2a2V5KTsKLSAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBsb2FkIHByaXZhdGUga2V5IGZpbGUgJXMiLAotICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0pOwotICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BLRVkpOwotICAgICAgICBicmVhazsKLQotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3B1YmxpY2tleV9hdXRvKHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QpOwotICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKLSAgICAgICAgICByYyA9IFNTSF9PSzsKLSAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgcHVibGljIGtleSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0hfQVVUSF9QS0VZOgotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBzc2hjLT5wcml2a2V5KTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb25cbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uIChyYzogJWQpXG4iLCByYyk7Ci0gICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfR1NTQVBJOgotICAgICAgaWYoIShkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfR1NTQVBJKSkgewotICAgICAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7Ci0gICAgICB9Ci0KLSAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2dzc2FwaShzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICByYyA9IFNTSF9BR0FJTjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKLSAgICAgICAgcmMgPSBTU0hfT0s7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgZ3NzYXBpIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfS0VZX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBNT1ZFX1RPX0xBU1RfQVVUSDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9LRVk6Ci0KLSAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCi0gICAgICByYyA9IG15c3NoX2F1dGhfaW50ZXJhY3RpdmUoY29ubik7Ci0gICAgICBpZihyYyA9PSBTU0hfQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSBTU0hfT0spIHsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgImNvbXBsZXRlZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6Ci0gICAgICBpZighKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QQVNTV09SRCkpIHsKLSAgICAgICAgLyogSG9zdCBrZXkgYXV0aGVudGljYXRpb24gaXMgaW50ZW50aW9uYWxseSBub3QgaW1wbGVtZW50ZWQgKi8KLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotCi0gICAgY2FzZSBTU0hfQVVUSF9QQVNTOgotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcGFzc3dvcmQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIGNvbm4tPnBhc3N3ZCk7Ci0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICByYyA9IFNTSF9BR0FJTjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9ET05FOgotICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgewotICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKgotICAgICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGF1dGhlbnRpY2F0ZWQgc3NoIHNlc3Npb24uCi0gICAgICAgKi8KLSAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZVxuIik7Ci0KLSAgICAgIEN1cmxfcGdyc1RpbWUoY29ubi0+ZGF0YSwgVElNRVJfQVBQQ09OTkVDVCk7ICAgICAgLyogU1NIIGlzIGNvbm5lY3RlZCAqLwotCi0gICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOwotICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7Ci0KLSAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9JTklUOgotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMSk7Ci0KLSAgICAgIHNzaGMtPnNmdHBfc2Vzc2lvbiA9IHNmdHBfbmV3KHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX3Nlc3Npb24pIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIHJjID0gc2Z0cF9pbml0KHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgcmMgPSBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBpbml0aWFsaXppbmcgc2Z0cCBzZXNzaW9uOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShzZnRwX2Vycm9yX3RvX0NVUkxFKHJjKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBTFBBVEgpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9TRlRQX1JFQUxQQVRIOgotICAgICAgLyoKLSAgICAgICAqIEdldCB0aGUgImhvbWUiIGRpcmVjdG9yeQotICAgICAgICovCi0gICAgICBzc2hjLT5ob21lZGlyID0gc2Z0cF9jYW5vbmljYWxpemVfcGF0aChzc2hjLT5zZnRwX3Nlc3Npb24sICIuIik7Ci0gICAgICBpZihzc2hjLT5ob21lZGlyID09IE5VTEwpIHsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9DT1VMRE5UX0NPTk5FQ1QpOwotICAgICAgfQotICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IHNzaGMtPmhvbWVkaXI7Ci0KLSAgICAgIC8qIFRoaXMgaXMgdGhlIGxhc3Qgc3RlcCBpbiB0aGUgU0ZUUCBjb25uZWN0IHBoYXNlLiBEbyBub3RlIHRoYXQgd2hpbGUKLSAgICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgotICAgICAgICAgc2luY2UgdGhlIGhvbWVkaXIgd2lsbCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiByZXF1ZXN0IGJ1dCB0aGUKLSAgICAgICAgIHdvcmtpbmcgcGF0aCB3aWxsIG5vdC4gKi8KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX0lOSVQ6Ci0KLSAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnByb3RvcC0+cGF0aCk7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYoZGF0YS0+c2V0LnF1b3RlKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJTZW5kaW5nIHF1b3RlIGNvbW1hbmRzXG4iKTsKLSAgICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IGRhdGEtPnNldC5xdW90ZTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOgotICAgICAgaWYoZGF0YS0+c2V0LnBvc3RxdW90ZSkgewotICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucG9zdHF1b3RlOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFOgotICAgICAgLyogU2VuZCBhbnkgcXVvdGUgY29tbWFuZHMgKi8KLSAgICAgIHNmdHBfcXVvdGUoY29ubik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfTkVYVF9RVU9URToKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0KLSAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBzc2hjLT5xdW90ZV9pdGVtLT5uZXh0OwotCi0gICAgICBpZihzc2hjLT5xdW90ZV9pdGVtKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgc3NoYy0+bmV4dHN0YXRlKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUOgotICAgICAgc2Z0cF9xdW90ZV9zdGF0KGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQ6Ci0gICAgICByYyA9IHNmdHBfc2V0c3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMpOwotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJBdHRlbXB0IHRvIHNldCBTRlRQIHN0YXRzIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIC8qIHNzaGMtPmFjdHVhbGNvZGUgPSBzZnRwX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgICAqIHdlIGRvIG5vdCBzZW5kIHRoZSBhY3R1YWwgZXJyb3I7IHdlIHJldHVybgotICAgICAgICAgKiB0aGUgZXJyb3IgdGhlIGxpYnNzaDIgYmFja2VuZCBpcyByZXR1cm5pbmcgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgotICAgICAgcmMgPSBzZnRwX3N5bWxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICBmYWlsZihkYXRhLCAic3ltbGluayBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfTUtESVI6Ci0gICAgICByYyA9IHNmdHBfbWtkaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKLSAgICAgICAgICAgICAgICAgICAgICAobW9kZV90KWRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUkVOQU1FOgotICAgICAgcmMgPSBzZnRwX3JlbmFtZShzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInJlbmFtZSBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6Ci0gICAgICByYyA9IHNmdHBfcm1kaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAicm1kaXIgY29tbWFuZCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1VOTElOSzoKLSAgICAgIHJjID0gc2Z0cF91bmxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlM6Ci0gICAgewotICAgICAgc2Z0cF9zdGF0dmZzX3Qgc3RhdHZmczsKLQotICAgICAgc3RhdHZmcyA9IHNmdHBfc3RhdHZmcyhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIGlmKCFzdGF0dmZzICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAic3RhdHZmcyBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWxzZSBpZihzdGF0dmZzKSB7Ci0gICAgICAgIGNoYXIgKnRtcCA9IGFwcmludGYoInN0YXR2ZnM6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYnNpemU6ICVsbHVcbiIgImZfZnJzaXplOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYmxvY2tzOiAlbGx1XG4iICJmX2JmcmVlOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYmF2YWlsOiAlbGx1XG4iICJmX2ZpbGVzOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfZmZyZWU6ICVsbHVcbiIgImZfZmF2YWlsOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfZnNpZDogJWxsdVxuIiAiZl9mbGFnOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfbmFtZW1heDogJWxsdVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2JzaXplLCBzdGF0dmZzLT5mX2Zyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2Jsb2Nrcywgc3RhdHZmcy0+Zl9iZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2JhdmFpbCwgc3RhdHZmcy0+Zl9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2ZmcmVlLCBzdGF0dmZzLT5mX2ZhdmFpbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2ZzaWQsIHN0YXR2ZnMtPmZfZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX25hbWVtYXgpOwotICAgICAgICBzZnRwX3N0YXR2ZnNfZnJlZShzdGF0dmZzKTsKLQotICAgICAgICBpZighdG1wKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKLSAgICAgICAgZnJlZSh0bXApOwotICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgotICAgICAgaWYoZGF0YS0+c2V0LmdldF9maWxldGltZSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9GSUxFVElNRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRklMRVRJTUU6Ci0gICAgewotICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOwotCi0gICAgICBhdHRycyA9IHNmdHBfc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCk7Ci0gICAgICBpZihhdHRycyAhPSAwKSB7Ci0gICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy0+bXRpbWU7Ci0gICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaWYocHJvdG9wLT5wYXRoW3N0cmxlbihwcm90b3AtPnBhdGgpLTFdID09ICcvJykKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0lOSVQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfVVBMT0FEX0lOSVQ6Ci0gICAgewotICAgICAgaW50IGZsYWdzOwotCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAhPSAwKSB7Ci0gICAgICAgIHNmdHBfYXR0cmlidXRlcyBhdHRyczsKLQotICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKLSAgICAgICAgICBhdHRycyA9IHNmdHBfc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCk7Ci0gICAgICAgICAgaWYoYXR0cnMgIT0gMCkgewotICAgICAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMtPnNpemU7Ci0gICAgICAgICAgICBpZihzaXplIDwgMCkgewotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOwotICAgICAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBhdHRycy0+c2l6ZTsKLQotICAgICAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoYXR0cnMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9hcHBlbmQpCi0gICAgICAgIC8qIFRyeSB0byBvcGVuIGZvciBhcHBlbmQsIGJ1dCBjcmVhdGUgaWYgbm9uZXhpc3RpbmcgKi8KLSAgICAgICAgZmxhZ3MgPSBPX1dST05MWXxPX0NSRUFUfE9fQVBQRU5EOwotICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApCi0gICAgICAgIC8qIElmIHdlIGhhdmUgcmVzdGFydCBwb3NpdGlvbiB0aGVuIG9wZW4gZm9yIGFwcGVuZCAqLwotICAgICAgICBmbGFncyA9IE9fV1JPTkxZfE9fQVBQRU5EOwotICAgICAgZWxzZQotICAgICAgICAvKiBDbGVhciBmaWxlIGJlZm9yZSB3cml0aW5nIChub3JtYWwgYmVoYXZpb3VyKSAqLwotICAgICAgICBmbGFncyA9IE9fV1JPTkxZfE9fQVBQRU5EfE9fQ1JFQVR8T19UUlVOQzsKLQotICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKQotICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7Ci0gICAgICBzc2hjLT5zZnRwX2ZpbGUgPQotICAgICAgICBzZnRwX29wZW4oc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICBmbGFncywgKG1vZGVfdClkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMpOwotICAgICAgaWYoIXNzaGMtPnNmdHBfZmlsZSkgewotICAgICAgICBlcnIgPSBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotCi0gICAgICAgIGlmKCgoZXJyID09IFNTSF9GWF9OT19TVUNIX0ZJTEUgfHwgZXJyID09IFNTSF9GWF9GQUlMVVJFIHx8Ci0gICAgICAgICAgICAgZXJyID09IFNTSF9GWF9OT19TVUNIX1BBVEgpKSAmJgotICAgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKLSAgICAgICAgICAgICAoc3RybGVuKHByb3RvcC0+cGF0aCkgPiAxKSkpIHsKLSAgICAgICAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgdGhlIHBhdGggcmVtb3RlbHkgKi8KLSAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAxOwotICAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvKiBJZiB3ZSBoYXZlIGEgcmVzdGFydCBwb2ludCB0aGVuIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgY29ycmVjdAotICAgICAgICAgcG9zaXRpb24uICovCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApIHsKLSAgICAgICAgLyogTGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaW5wdXQuICovCi0gICAgICAgIGlmKGNvbm4tPnNlZWtfZnVuYykgewotICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOwotICAgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFS19TRVQpOwotICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19PSykgewotICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkID0gMDsKLQotICAgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZWVrIHN0cmVhbSIpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBzZWVrZXJyID09IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgKGNhbid0IHNlZWsgdG8gb2Zmc2V0KSAqLwotICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNpemVfdCByZWFkdGhpc2Ftb3VudG5vdyA9Ci0gICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCA+IGRhdGEtPnNldC5idWZmZXJfc2l6ZSkgPwotICAgICAgICAgICAgICAoc2l6ZV90KWRhdGEtPnNldC5idWZmZXJfc2l6ZSA6Ci0gICAgICAgICAgICAgIGN1cmx4X3NvdG91eihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCk7Ci0KLSAgICAgICAgICAgIHNpemVfdCBhY3R1YWxseXJlYWQgPQotICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkdGhpc2Ftb3VudG5vdywgZGF0YS0+c3RhdGUuaW4pOwotCi0gICAgICAgICAgICBwYXNzZWQgKz0gYWN0dWFsbHlyZWFkOwotICAgICAgICAgICAgaWYoKGFjdHVhbGx5cmVhZCA9PSAwKSB8fCAoYWN0dWFsbHlyZWFkID4gcmVhZHRoaXNhbW91bnRub3cpKSB7Ci0gICAgICAgICAgICAgIC8qIHRoaXMgY2hlY2tzIGZvciBncmVhdGVyLXRoYW4gb25seSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgQ1VSTF9SRUFERlVOQ19BQk9SVCByZXR1cm4gY29kZSBzdGlsbCBhYm9ydHMgKi8KLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWFkIGRhdGEiKTsKLSAgICAgICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSB3aGlsZShwYXNzZWQgPCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBub3csIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSByZWFkICovCi0gICAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7Ci0gICAgICAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAtPSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKLSAgICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJjID0gc2Z0cF9zZWVrNjQoc3NoYy0+c2Z0cF9maWxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICAgIGlmKHJjICE9IDApIHsKLSAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOwotICAgICAgfQotICAgICAgLyogdXBsb2FkIGRhdGEgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOwotCi0gICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0Ci0gICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KLSAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247Ci0KLSAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggc2Z0cCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOwotCi0gICAgICAvKiBzaW5jZSB3ZSBkb24ndCByZWFsbHkgd2FpdCBmb3IgYW55dGhpbmcgYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0aGUKLSAgICAgICAgIHN0YXRlIG1hY2hpbmUgdG8gbW92ZSBvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIHNldCBhIHZlcnkgc2hvcnQKLSAgICAgICAgIHRpbWVvdXQgaGVyZSAqLwotICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQ6Ci0gICAgICBpZihzdHJsZW4ocHJvdG9wLT5wYXRoKSA+IDEpIHsKLSAgICAgICAgc3NoYy0+c2xhc2hfcG9zID0gcHJvdG9wLT5wYXRoICsgMTsgLyogaWdub3JlIHRoZSBsZWFkaW5nICcvJyAqLwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTOgotICAgICAgc3NoYy0+c2xhc2hfcG9zID0gc3RyY2hyKHNzaGMtPnNsYXNoX3BvcywgJy8nKTsKLSAgICAgIGlmKHNzaGMtPnNsYXNoX3BvcykgewotICAgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gMDsKLQotICAgICAgICBpbmZvZihkYXRhLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICclcydcbiIsIHByb3RvcC0+cGF0aCk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVI6Ci0gICAgICAvKiAnbW9kZScgLSBwYXJhbWV0ZXIgaXMgcHJlbGltaW5hcnkgLSBkZWZhdWx0IHRvIDA2NDQgKi8KLSAgICAgIHJjID0gc2Z0cF9ta2Rpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAobW9kZV90KWRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKLSAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAnLyc7Ci0gICAgICArK3NzaGMtPnNsYXNoX3BvczsKLSAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAvKgotICAgICAgICAgKiBBYm9ydCBpZiBmYWlsdXJlIHdhc24ndCB0aGF0IHRoZSBkaXIgYWxyZWFkeSBleGlzdHMgb3IgdGhlCi0gICAgICAgICAqIHBlcm1pc3Npb24gd2FzIGRlbmllZCAoY3JlYXRpb24gbWlnaHQgc3VjY2VlZCBmdXJ0aGVyIGRvd24gdGhlCi0gICAgICAgICAqIHBhdGgpIC0gcmV0cnkgb24gdW5zcGVjaWZpYyBGQUlMVVJFIGFsc28KLSAgICAgICAgICovCi0gICAgICAgIGVyciA9IHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGlmKChlcnIgIT0gU1NIX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCi0gICAgICAgICAgIChlcnIgIT0gU1NIX0ZYX0ZBSUxVUkUpICYmCi0gICAgICAgICAgIChlcnIgIT0gU1NIX0ZYX1BFUk1JU1NJT05fREVOSUVEKSkgewotICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgICB9Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9JTklUOgotICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKLSAgICAgIGlmKGRhdGEtPnNldC5vcHRfbm9fYm9keSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKgotICAgICAgICogVGhpcyBpcyBhIGRpcmVjdG9yeSB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZ2V0LCBzbyBwcm9kdWNlIGEgZGlyZWN0b3J5Ci0gICAgICAgKiBsaXN0aW5nCi0gICAgICAgKi8KLSAgICAgIHNzaGMtPnNmdHBfZGlyID0gc2Z0cF9vcGVuZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvcC0+cGF0aCk7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9kaXIpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUjoKLQotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9hdHRycykKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9hdHRycyk7Ci0KLSAgICAgIHNzaGMtPnJlYWRkaXJfYXR0cnMgPSBzZnRwX3JlYWRkaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5zZnRwX2Rpcik7Ci0gICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKSB7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX2F0dHJzLT5uYW1lOwotICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IHNzaGMtPnJlYWRkaXJfYXR0cnMtPmxvbmduYW1lOwotICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLQotICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSkgewotICAgICAgICAgIGNoYXIgKnRtcExpbmU7Ci0KLSAgICAgICAgICB0bXBMaW5lID0gYXByaW50ZigiJXNcbiIsIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICAgIGlmKHRtcExpbmUgPT0gTlVMTCkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBMaW5lLCBzc2hjLT5yZWFkZGlyX2xlbiArIDEpOwotICAgICAgICAgIGZyZWUodG1wTGluZSk7Ci0KLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBzaW5jZSB0aGlzIGNvdW50cyB3aGF0IHdlIHNlbmQgdG8gdGhlIGNsaWVudCwgd2UgaW5jbHVkZSB0aGUKLSAgICAgICAgICAgICBuZXdsaW5lIGluIHRoaXMgY291bnRlciAqLwotICAgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9sZW4gKyAxOwotCi0gICAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULAotICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuID0gODAgKyBzc2hjLT5yZWFkZGlyX2N1cnJMZW47Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gY2FsbG9jKHNzaGMtPnJlYWRkaXJfdG90YWxMZW4sIDEpOwotICAgICAgICAgIGlmKCFzc2hjLT5yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbWVtY3B5KHNzaGMtPnJlYWRkaXJfbGluZSwgc3NoYy0+cmVhZGRpcl9sb25nZW50cnksCi0gICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0gICAgICAgICAgaWYoKHNzaGMtPnJlYWRkaXJfYXR0cnMtPmZsYWdzICYgU1NIX0ZJTEVYRkVSX0FUVFJfUEVSTUlTU0lPTlMpICYmCi0gICAgICAgICAgICAgKChzc2hjLT5yZWFkZGlyX2F0dHJzLT5wZXJtaXNzaW9ucyAmIFNfSUZNVCkgPT0KLSAgICAgICAgICAgICAgU19JRkxOSykpIHsKLSAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPSBtYWxsb2MoUEFUSF9NQVggKyAxKTsKLSAgICAgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPT0gTlVMTCkgewotICAgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGgsIFBBVEhfTUFYLCAiJXMlcyIsIHByb3RvcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLQotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9MSU5LKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoc3NoYy0+cmVhZGRpcl9hdHRycyA9PSBOVUxMICYmIHNmdHBfZGlyX2VvZihzc2hjLT5zZnRwX2RpcikpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9ET05FKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfTElOSzoKLSAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycykKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKLQotICAgICAgc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID0gc2Z0cF9sc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOwotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID09IDApIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZm9yIHJlYWRpbmc6ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgIH0KLQotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5uYW1lID09IE5VTEwpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBzZnRwX3JlYWRsaW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOwotICAgICAgICBpZihzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl90bXApOwotICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IE5VTEw7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX3RtcDsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWUpOwotICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5uYW1lOwotICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IHNzaGMtPnJlYWRkaXJfbGlua19hdHRycy0+bG9uZ25hbWU7Ci0gICAgICB9Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0KLSAgICAgIC8qIGdldCByb29tIGZvciB0aGUgZmlsZW5hbWUgYW5kIGV4dHJhIG91dHB1dCAqLwotICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiArPSA0ICsgc3NoYy0+cmVhZGRpcl9sZW47Ci0gICAgICBuZXdfcmVhZGRpcl9saW5lID0gQ3VybF9zYWZlcmVhbGxvYyhzc2hjLT5yZWFkZGlyX2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuKTsKLSAgICAgIGlmKCFuZXdfcmVhZGRpcl9saW5lKSB7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gbmV3X3JlYWRkaXJfbGluZTsKLQotICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLQotICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKLSAgICAgIHNzaGMtPnJlYWRkaXJfbGlua19hdHRycyA9IE5VTEw7Ci0gICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKLSAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NOgotICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sICJcbiIpOwotICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0KLSAgICAgIGlmKCFyZXN1bHQpIHsKLQotICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAotICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKLSAgICAgIH0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKLSAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKLSAgICAgIHNzaGMtPnJlYWRkaXJfdG1wID0gTlVMTDsKLQotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9ET05FOgotICAgICAgc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2Rpcik7Ci0gICAgICBzc2hjLT5zZnRwX2RpciA9IE5VTEw7Ci0KLSAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQ6Ci0gICAgICAvKgotICAgICAgICogV29yayBvbiBnZXR0aW5nIHRoZSBzcGVjaWZpZWQgZmlsZQotICAgICAgICovCi0gICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpCi0gICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKLQotICAgICAgc3NoYy0+c2Z0cF9maWxlID0gc2Z0cF9vcGVuKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fUkRPTkxZLCAobW9kZV90KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9maWxlKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0KLSAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICB9Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQ6Ci0gICAgewotICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOwotICAgICAgY3VybF9vZmZfdCBzaXplOwotCi0gICAgICBhdHRycyA9IHNmdHBfZnN0YXQoc3NoYy0+c2Z0cF9maWxlKTsKLSAgICAgIGlmKCFhdHRycyB8fAotICAgICAgICAgICAgICAhKGF0dHJzLT5mbGFncyAmIFNTSF9GSUxFWEZFUl9BVFRSX1NJWkUpIHx8Ci0gICAgICAgICAgICAgIChhdHRycy0+c2l6ZSA9PSAwKSkgewotICAgICAgICAvKgotICAgICAgICAgKiBzZnRwX2ZzdGF0IGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKLSAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCi0gICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQotICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAotICAgICAgICAgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKLSAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0gICAgICAgIHNpemUgPSAwOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHNpemUgPSBhdHRycy0+c2l6ZTsKLQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7Ci0KLSAgICAgICAgaWYoc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICB9Ci0gICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgewotICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87Ci0gICAgICAgICAgY2hhciAqcHRyOwotICAgICAgICAgIGNoYXIgKnB0cjI7Ci0gICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKLSAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7Ci0KLSAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKLSAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpIHsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKLSAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKLSAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKSB7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLwotICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgewotICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbV90KSB7Ci0gICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCi0gICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOwotICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIHNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKGZyb20gPiB0bykgewotICAgICAgICAgICAgZnJvbSA9IHRvOwotICAgICAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2l6ZSA9IHRvIC0gZnJvbSArIDE7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmMgPSBzZnRwX3NlZWs2NChzc2hjLT5zZnRwX2ZpbGUsIGZyb20pOwotICAgICAgICAgIGlmKHJjICE9IDApIHsKLSAgICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKLSAgICAgIH0KLQotICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKLSAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KLSAgICAgICAgICBpZigoY3VybF9vZmZfdClzaXplIDwgLWRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIKLSAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAotICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIHNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIGRvd25sb2FkIGZyb20gd2hlcmU/ICovCi0gICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKz0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZigoY3VybF9vZmZfdClzaXplIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKLSAgICAgICAgICAgICAgICAgICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKLSAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBzaXplKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBEb2VzIGEgY29tcGxldGVkIGZpbGUgbmVlZCB0byBiZSBzZWVrZWQgYW5kIHN0YXJ0ZWQgb3IgY2xvc2VkID8gKi8KLSAgICAgICAgLyogTm93IHN0b3JlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgYXJlIGV4cGVjdGVkIHRvIGRvd25sb2FkICovCi0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLQotICAgICAgICByYyA9IHNmdHBfc2VlazY0KHNzaGMtPnNmdHBfZmlsZSwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotICAgICAgICBpZihyYyAhPSAwKSB7Ci0gICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBTZXR1cCB0aGUgYWN0dWFsIGRvd25sb2FkICovCi0gICAgaWYoZGF0YS0+cmVxLnNpemUgPT0gMCkgewotICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7Ci0gICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgZGF0YS0+cmVxLnNpemUsIEZBTFNFLCAtMSk7Ci0KLSAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKLQotICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOwotCi0gICAgaWYocmVzdWx0KSB7Ci0gICAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBvY2N1cjsgdGhlIGNsb3NlIHN0YXRlIHNob3VsZCBiZSBlbnRlcmVkCi0gICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHNzaGMtPnNmdHBfcmVjdl9zdGF0ZSA9IDA7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKLSAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkgewotICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7Ci0gICAgICAgIHNzaGMtPnNmdHBfZmlsZSA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBDdXJsX3NhZmVmcmVlKHByb3RvcC0+cGF0aCk7Ci0KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0ZUUCBET05FIGRvbmVcbiIpKTsKLQotICAgICAgLyogQ2hlY2sgaWYgbmV4dHN0YXRlIGlzIHNldCBhbmQgbW92ZSAubmV4dHN0YXRlIGNvdWxkIGJlIFBPU1RRVU9URV9JTklUCi0gICAgICAgICBBZnRlciBuZXh0c3RhdGUgaXMgZXhlY3V0ZWQsIHRoZSBjb250cm9sIHNob3VsZCBjb21lIGJhY2sgdG8KLSAgICAgICAgIFNTSF9TRlRQX0NMT1NFIHRvIHBhc3MgdGhlIGNvcnJlY3QgcmVzdWx0IGJhY2sgICovCi0gICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFICYmCi0gICAgICAgICBzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX1NGVFBfQ0xPU0UpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgc3NoYy0+bmV4dHN0YXRlKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfQ0xPU0U7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1NIVVRET1dOOgotICAgICAgLyogZHVyaW5nIHRpbWVzIHdlIGdldCBoZXJlIGR1ZSB0byBhIGJyb2tlbiB0cmFuc2ZlciBhbmQgdGhlbiB0aGUKLSAgICAgICAgIHNmdHBfaGFuZGxlIG1pZ2h0IG5vdCBoYXZlIGJlZW4gdGFrZW4gZG93biBzbyBtYWtlIHN1cmUgdGhhdCBpcyBkb25lCi0gICAgICAgICBiZWZvcmUgd2UgcHJvY2VlZCAqLwotCi0gICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpIHsKLSAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOwotICAgICAgICBzc2hjLT5zZnRwX2ZpbGUgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBpZihzc2hjLT5zZnRwX3Nlc3Npb24pIHsKLSAgICAgICAgc2Z0cF9mcmVlKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIHNzaGMtPnNmdHBfc2Vzc2lvbiA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHNzaGMtPmhvbWVkaXIpOwotICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotICAgICAgYnJlYWs7Ci0KLQotICAgIGNhc2UgU1NIX1NDUF9UUkFOU19JTklUOgotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBGdW5jdGlvbnMgZnJvbSB0aGUgU0NQIHN1YnN5c3RlbSBjYW5ub3QgaGFuZGxlL3JldHVybiBTU0hfQUdBSU4gKi8KLSAgICAgIHNzaF9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDEpOwotCi0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKSB7Ci0gICAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPCAwKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlNDUCByZXF1aXJlcyBhIGtub3duIGZpbGUgc2l6ZSBmb3IgdXBsb2FkIik7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1VQTE9BRF9GQUlMRUQ7Ci0gICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0KLSAgICAgICAgICBzc2hfc2NwX25ldyhzc2hjLT5zc2hfc2Vzc2lvbiwgU1NIX1NDUF9XUklURSwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9VUExPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPQotICAgICAgICAgIHNzaF9zY3BfbmV3KHNzaGMtPnNzaF9zZXNzaW9uLCBTU0hfU0NQX1JFQUQsIHByb3RvcC0+cGF0aCk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9XTkxPQURfSU5JVCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmKCFzc2hjLT5zY3Bfc2Vzc2lvbikgewotICAgICAgICBlcnJfbXNnID0gc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOwotICAgICAgfQotCi0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9VUExPQURfSU5JVDoKLQotICAgICAgcmMgPSBzc2hfc2NwX2luaXQoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7Ci0gICAgICB9Ci0KLSAgICAgIHJjID0gc3NoX3NjcF9wdXNoX2ZpbGUoc3NoYy0+c2NwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMpOwotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHVwbG9hZCBkYXRhICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKLQotICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKLQotICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAotICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCi0gICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOwotCi0gICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHNjcCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0RPV05MT0FEX0lOSVQ6Ci0KLSAgICAgIHJjID0gc3NoX3NjcF9pbml0KHNzaGMtPnNjcF9zZXNzaW9uKTsKLSAgICAgIGlmKHJjICE9IFNTSF9PSykgewotICAgICAgICBlcnJfbXNnID0gc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0NPVUxETlRfQ09OTkVDVCk7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPV05MT0FEKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0KLSAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQUQ6ewotICAgICAgICBjdXJsX29mZl90IGJ5dGVjb3VudDsKLQotICAgICAgICByYyA9IHNzaF9zY3BfcHVsbF9yZXF1ZXN0KHNzaGMtPnNjcF9zZXNzaW9uKTsKLSAgICAgICAgaWYocmMgIT0gU1NIX1NDUF9SRVFVRVNUX05FV0ZJTEUpIHsKLSAgICAgICAgICBlcnJfbXNnID0gc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZG93bmxvYWQgZGF0YSAqLwotICAgICAgICBieXRlY291bnQgPSBzc2hfc2NwX3JlcXVlc3RfZ2V0X3NpemUoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSAoY3VybF9vZmZfdCkgYnl0ZWNvdW50OwotICAgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBieXRlY291bnQsIEZBTFNFLCAtMSk7Ci0KLSAgICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwotCi0gICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaCByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOwotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgY2FzZSBTU0hfU0NQX0RPTkU6Ci0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1NFTkRfRU9GKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfU0VORF9FT0Y6Ci0gICAgICBpZihzc2hjLT5zY3Bfc2Vzc2lvbikgewotICAgICAgICByYyA9IHNzaF9zY3BfY2xvc2Uoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgICBpZihyYyA9PSBTU0hfQUdBSU4pIHsKLSAgICAgICAgICAvKiBDdXJyZW50bHkgdGhlIHNzaF9zY3BfY2xvc2UgaGFuZGxlcyB3YWl0aW5nIGZvciBFT0YgaW4KLSAgICAgICAgICAgKiBibG9ja2luZyB3YXkuCi0gICAgICAgICAgICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjbG9zZSBsaWJzc2ggc2NwIGNoYW5uZWw6ICVzXG4iLAotICAgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9DSEFOTkVMX0ZSRUU6Ci0gICAgICBpZihzc2hjLT5zY3Bfc2Vzc2lvbikgewotICAgICAgICBzc2hfc2NwX2ZyZWUoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNDUCBET05FIHBoYXNlIGNvbXBsZXRlXG4iKSk7Ci0KLSAgICAgIHNzaF9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDApOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0KLSAgICBjYXNlIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1Q6Ci0gICAgICAvKiBkdXJpbmcgd2VpcmQgdGltZXMgd2hlbiB3ZSd2ZSBiZWVuIHByZW1hdHVyZWx5IGFib3J0ZWQsIHRoZSBjaGFubmVsCi0gICAgICAgICBpcyBzdGlsbCBhbGl2ZSB3aGVuIHdlIHJlYWNoIHRoaXMgc3RhdGUgYW5kIHdlIE1VU1Qga2lsbCB0aGUgY2hhbm5lbAotICAgICAgICAgcHJvcGVybHkgZmlyc3QgKi8KLSAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIHNzaF9zY3BfZnJlZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgc3NoX2Rpc2Nvbm5lY3Qoc3NoYy0+c3NoX3Nlc3Npb24pOwotCi0gICAgICBTU0hfU1RSSU5HX0ZSRUVfQ0hBUihzc2hjLT5ob21lZGlyKTsKLSAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBTU0hfU0VTU0lPTl9GUkVFOgotICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKLSAgICAgICAgc3NoX2ZyZWUoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBzc2hjLT5zc2hfc2Vzc2lvbiA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdvcnN0LWNhc2Ugc2NlbmFyaW8gY2xlYW51cCAqLwotCi0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKTsKLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNjcF9zZXNzaW9uID09IE5VTEwpOwotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX3RtcCkgewotICAgICAgICBzc2hfc3RyaW5nX2ZyZWVfY2hhcihzc2hjLT5yZWFkZGlyX3RtcCk7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfdG1wID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMpCi0gICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnF1b3RlX2F0dHJzKTsKLQotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9hdHRycykKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9hdHRycyk7Ci0KLSAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycykKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKLQotICAgICAgaWYoc3NoYy0+cHJpdmtleSkKLSAgICAgICAgc3NoX2tleV9mcmVlKHNzaGMtPnByaXZrZXkpOwotICAgICAgaWYoc3NoYy0+cHVia2V5KQotICAgICAgICBzc2hfa2V5X2ZyZWUoc3NoYy0+cHVia2V5KTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGluZSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOwotICAgICAgU1NIX1NUUklOR19GUkVFX0NIQVIoc3NoYy0+aG9tZWRpcik7Ci0KLSAgICAgIC8qIHRoZSBjb2RlIHdlIGFyZSBhYm91dCB0byByZXR1cm4gKi8KLSAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0KLSAgICAgIG1lbXNldChzc2hjLCAwLCBzaXplb2Yoc3RydWN0IHNzaF9jb25uKSk7Ci0KLSAgICAgIGNvbm5jbG9zZShjb25uLCAiU1NIIHNlc3Npb24gZnJlZSIpOwotICAgICAgc3NoYy0+c3RhdGUgPSBTU0hfU0VTU0lPTl9GUkVFOyAgIC8qIGN1cnJlbnQgKi8KLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfUVVJVDoKLSAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCi0gICAgZGVmYXVsdDoKLSAgICAgIC8qIGludGVybmFsIGVycm9yICovCi0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIH0KLSAgfSB3aGlsZSghcmMgJiYgKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSk7Ci0KLQotICBpZihyYyA9PSBTU0hfQUdBSU4pIHsKLSAgICAvKiB3ZSB3b3VsZCBibG9jaywgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlIHJlYWR5IChpbiB0aGUKLSAgICAgICByaWdodCBkaXJlY3Rpb24gdG9vKSEgKi8KLSAgICAqYmxvY2sgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vKiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpIHRvIHdhaXQgZm9yIGFuZAotICAgZm9yIHdoYXQgYWN0aW9ucyBpbiB0aGUgRE9fRE9ORSwgUEVSRk9STSBhbmQgV0FJVFBFUkZPUk0gc3RhdGVzICovCi1zdGF0aWMgaW50IG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrLCAgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLXsKLSAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7Ci0gICh2b2lkKSBudW1zb2NrczsKLQotICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0KLSAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKLSAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7Ci0KLSAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKLSAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOwotCi0gIHJldHVybiBiaXRtYXA7Ci19Ci0KLS8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQotICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCi1zdGF0aWMgaW50IG15c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssICAvKiBwb2ludHMgdG8gbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQotewotICAvKiBpZiB3ZSBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKSBmdW5jdGlvbiBldmVuCi0gICAgIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCi0gIHJldHVybiBteXNzaF9wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOwotfQotCi1zdGF0aWMgdm9pZCBteXNzaF9ibG9jazJ3YWl0Zm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBibG9jaykKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgLyogSWYgaXQgZGlkbid0IGJsb2NrLCBvciBub3RoaW5nIHdhcyByZXR1cm5lZCBieSBzc2hfZ2V0X3BvbGxfZmxhZ3MKLSAgICogaGF2ZSB0aGUgb3JpZ2luYWwgc2V0ICovCi0gIGNvbm4tPndhaXRmb3IgPSBzc2hjLT5vcmlnX3dhaXRmb3I7Ci0KLSAgaWYoYmxvY2spIHsKLSAgICBpbnQgZGlyID0gc3NoX2dldF9wb2xsX2ZsYWdzKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICBpZihkaXIgJiBTU0hfUkVBRF9QRU5ESU5HKSB7Ci0gICAgICAvKiB0cmFuc2xhdGUgdGhlIGxpYnNzaCBkZWZpbmUgYml0cyBpbnRvIG91ciBvd24gYml0IGRlZmluZXMgKi8KLSAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7Ci0gICAgfQotICAgIGVsc2UgaWYoZGlyICYgU1NIX1dSSVRFX1BFTkRJTkcpIHsKLSAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7Ci0gICAgfQotICB9Ci19Ci0KLS8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBib29sIGJsb2NrOyAgICAvKiB3ZSBzdG9yZSB0aGUgc3RhdHVzIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIGEgc3NoX2dldHNvY2soKQotICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAqLwotCi0gIHJlc3VsdCA9IG15c3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKLSAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOwotICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIGJsb2NrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfYmxvY2tfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotCi0gIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgewotICAgIGJvb2wgYmxvY2s7Ci0gICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKLSAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKLQotICAgIHJlc3VsdCA9IG15c3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICBicmVhazsKLQotICAgIGlmKCFkaXNjb25uZWN0KSB7Ci0gICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCi0gICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKLSAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGxlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIEZBTFNFKTsKLSAgICAgIGlmKGxlZnQgPCAwKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0Iik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYoIXJlc3VsdCAmJiBibG9jaykgewotICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0gICAgICAvKiB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlY29tZSByZWFkeSAqLwotICAgICAgKHZvaWQpIEN1cmxfc29ja2V0X2NoZWNrKGZkX3JlYWQsIENVUkxfU09DS0VUX0JBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQsIGxlZnQgPiAxMDAwID8gMTAwMCA6IGxlZnQpOwotICAgIH0KLQotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFNTSCBzZXR1cCBjb25uZWN0aW9uCi0gKi8KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc3RydWN0IFNTSFBST1RPICpzc2g7Ci0KLSAgY29ubi0+ZGF0YS0+cmVxLnByb3RvcCA9IHNzaCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IFNTSFBST1RPKSk7Ci0gIGlmKCFzc2gpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ3VybF9yZWN2IHNjcF9yZWN2LCBzZnRwX3JlY3Y7Ci1zdGF0aWMgQ3VybF9zZW5kIHNjcF9zZW5kLCBzZnRwX3NlbmQ7Ci0KLS8qCi0gKiBDdXJsX3NzaF9jb25uZWN0KCkgZ2V0cyBjYWxsZWQgZnJvbSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoKSB0byBhbGxvdyB1cyB0bwotICogZG8gcHJvdG9jb2wtc3BlY2lmaWMgYWN0aW9ucyBhdCBjb25uZWN0LXRpbWUuCi0gKi8KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2g7Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotCi0gIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCi0gIGlmKCFkYXRhLT5yZXEucHJvdG9wKQotICAgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oY29ubik7Ci0KLSAgLyogV2UgZGVmYXVsdCB0byBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXZSBzZXQgdGhpcyBhbHJlYWR5IGluIHRoaXMgY29ubmVjdAotICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCi0gIGNvbm5rZWVwKGNvbm4sICJTU0ggZGVmYXVsdCIpOwotCi0gIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgewotICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2NwX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzY3Bfc2VuZDsKLSAgfQotICBlbHNlIHsKLSAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNmdHBfcmVjdjsKLSAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNmdHBfc2VuZDsKLSAgfQotCi0gIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOwotCi0gIHNzaC0+c3NoX3Nlc3Npb24gPSBzc2hfbmV3KCk7Ci0gIGlmKHNzaC0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgewotICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpc2luZyBzc2ggc2Vzc2lvbiIpOwotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKLSAgfQotCi0gIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19GRCwgJnNvY2spOwotCi0gIGlmKGNvbm4tPnVzZXIpIHsKLSAgICBpbmZvZihkYXRhLCAiVXNlcjogJXNcbiIsIGNvbm4tPnVzZXIpOwotICAgIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19VU0VSLCBjb25uLT51c2VyKTsKLSAgfQotCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSkgewotICAgIGluZm9mKGRhdGEsICJLbm93biBob3N0czogJXNcbiIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7Ci0gICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0tOT1dOSE9TVFMsCi0gICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7Ci0gIH0KLQotICBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgY29ubi0+aG9zdC5uYW1lKTsKLSAgaWYoY29ubi0+cmVtb3RlX3BvcnQpCi0gICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1BPUlQsCi0gICAgICAgICAgICAgICAgICAgICZjb25uLT5yZW1vdGVfcG9ydCk7Ci0KLSAgaWYoZGF0YS0+c2V0LnNzaF9jb21wcmVzc2lvbikgewotICAgIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19DT01QUkVTU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgInpsaWIsemxpYkBvcGVuc3NoLmNvbSxub25lIik7Ci0gIH0KLQotICBzc2gtPnByaXZrZXkgPSBOVUxMOwotICBzc2gtPnB1YmtleSA9IE5VTEw7Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldKSB7Ci0gICAgaW50IHJjID0gc3NoX3BraV9pbXBvcnRfcHVia2V5X2ZpbGUoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2gtPnB1YmtleSk7Ci0gICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGxvYWQgcHVibGljIGtleSBmaWxlIik7Ci0gICAgICAvKiBpZ25vcmUgKi8KLSAgICB9Ci0gIH0KLQotICAvKiB3ZSBkbyBub3QgdmVyaWZ5IGhlcmUsIHdlIGRvIGl0IGF0IHRoZSBzdGF0ZSBtYWNoaW5lLAotICAgKiBhZnRlciBjb25uZWN0aW9uICovCi0KLSAgc3RhdGUoY29ubiwgU1NIX0lOSVQpOwotCi0gIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0KLSAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogc2NwX3BlcmZvcm0oKQotICoKLSAqIFRoaXMgaXMgdGhlIGFjdHVhbCBETyBmdW5jdGlvbiBmb3IgU0NQLiBHZXQgYSBmaWxlIGFjY29yZGluZyB0bwotICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KLSAqLwotCi1zdGF0aWMKLUNVUkxjb2RlIHNjcF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOwotCi0gICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgICAgICAgIC8qIG5vdCBkb25lIHlldCAqLwotCi0gIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLwotICBzdGF0ZShjb25uLCBTU0hfU0NQX1RSQU5TX0lOSVQpOwotCi0gIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOwotCi0gICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOwotCi0gIGlmKCpkb3BoYXNlX2RvbmUpIHsKLSAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9faXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIGJvb2wgY29ubmVjdGVkID0gMDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotCi0gICpkb25lID0gRkFMU0U7ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgdG8gZmFsc2UgKi8KLQotICBkYXRhLT5yZXEuc2l6ZSA9IC0xOyAgICAgICAgICAvKiBtYWtlIHN1cmUgdGhpcyBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KLQotICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7ICAvKiByZXNldCBlcnJvciBjb2RlICovCi0gIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOyAgIC8qIHJlc2V0IHRoZSBjcmVhdGUgZGlyIGF0dGVtcHQgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKi8KLQotICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIDApOwotICBDdXJsX3BncnNTZXREb3dubG9hZENvdW50ZXIoZGF0YSwgMCk7Ci0gIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgLTEpOwotICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOwotCi0gIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkKLSAgICByZXN1bHQgPSBzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCBkb25lKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IHNmdHBfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCBkb25lKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KLSAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCi0gICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IHNzaF9jb25uICpzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKLQotICBpZihzc2gtPnNzaF9zZXNzaW9uKSB7Ci0gICAgLyogb25seSBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBzdGlsbCBhcm91bmQgdG8gdXNlISAqLwotCi0gICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0KLSAgICByZXN1bHQgPSBteXNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCi0gICBkb25lIGZ1bmN0aW9ucyAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3QgU1NIUFJPVE8gKnByb3RvcCA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7Ci0KLSAgaWYoIXN0YXR1cykgewotICAgIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLwotICAgIHJlc3VsdCA9IG15c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7Ci0gIH0KLSAgZWxzZQotICAgIHJlc3VsdCA9IHN0YXR1czsKLQotICBpZihwcm90b3ApCi0gICAgQ3VybF9zYWZlZnJlZShwcm90b3AtPnBhdGgpOwotICBpZihDdXJsX3BncnNEb25lKGNvbm4pKQotICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gIGNvbm4tPmRhdGEtPnJlcS5rZWVwb24gPSAwOyAgIC8qIGNsZWFyIGFsbCBiaXRzICovCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQotewotICAodm9pZCkgcHJlbWF0dXJlOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotCi0gIGlmKCFzdGF0dXMpCi0gICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET05FKTsKLQotICByZXR1cm4gbXlzc2hfZG9uZShjb25uLCBzdGF0dXMpOwotCi19Ci0KLXN0YXRpYyBzc2l6ZV90IHNjcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKLXsKLSAgaW50IHJjOwotICAodm9pZCkgc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLwotICAodm9pZCkgZXJyOwotCi0gIHJjID0gc3NoX3NjcF93cml0ZShjb25uLT5wcm90by5zc2hjLnNjcF9zZXNzaW9uLCBtZW0sIGxlbik7Ci0KLSNpZiAwCi0gIC8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBtaXNsZWFkaW5nLCBtb3N0bHkgYWRkZWQgYXMgd2lzaGZ1bCB0aGlua2luZwotICAgKiB0aGF0IGxpYnNzaCBhdCBzb21lIHBvaW50IHdpbGwgaW1wbGVtZW50IG5vbi1ibG9ja2luZyBzc2hfc2NwX3dyaXRlL3JlYWQuCi0gICAqIEN1cnJlbnRseSByYyBjYW4gb25seSBiZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciBTU0hfRVJST1IuICovCi0gIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKHJjID09IFNTSF9BR0FJTikgPyBUUlVFIDogRkFMU0UpOwotCi0gIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICByZXR1cm4gMDsKLSAgfQotICBlbHNlCi0jZW5kaWYKLSAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgKmVyciA9IENVUkxFX1NTSDsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICByZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbnJlYWQ7Ci0gICh2b2lkKSBlcnI7Ci0gICh2b2lkKSBzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCi0KLSAgLyogbGlic3NoIHJldHVybnMgaW50ICovCi0gIG5yZWFkID0gc3NoX3NjcF9yZWFkKGNvbm4tPnByb3RvLnNzaGMuc2NwX3Nlc3Npb24sIG1lbSwgbGVuKTsKLQotI2lmIDAKLSAgLyogVGhlIGZvbGxvd2luZyBjb2RlIGlzIG1pc2xlYWRpbmcsIG1vc3RseSBhZGRlZCBhcyB3aXNoZnVsIHRoaW5raW5nCi0gICAqIHRoYXQgbGlic3NoIGF0IHNvbWUgcG9pbnQgd2lsbCBpbXBsZW1lbnQgbm9uLWJsb2NraW5nIHNzaF9zY3Bfd3JpdGUvcmVhZC4KLSAgICogQ3VycmVudGx5IHJjIGNhbiBvbmx5IGJlIFNTSF9PSyBvciBTU0hfRVJST1IuICovCi0KLSAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gU1NIX0FHQUlOKSA/IFRSVUUgOiBGQUxTRSk7Ci0gIGlmKG5yZWFkID09IFNTSF9BR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICBucmVhZCA9IC0xOwotICB9Ci0jZW5kaWYKLQotICByZXR1cm4gbnJlYWQ7Ci19Ci0KLS8qCi0gKiA9PT09PT09PT09PT09PT0gU0ZUUCA9PT09PT09PT09PT09PT0KLSAqLwotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogc2Z0cF9wZXJmb3JtKCkKLSAqCi0gKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNGVFAuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bwotICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KLSAqLwotCi1zdGF0aWMKLUNVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKLQotICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLwotCi0gIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLwotICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9JTklUKTsKLQotICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KLSAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0gIGlmKCpkb3BoYXNlX2RvbmUpIHsKLSAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCi0gICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgotICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLwotc3RhdGljIENVUkxjb2RlIHNmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIHN0YXJ0cyBub3dcbiIpKTsKLQotICBpZihjb25uLT5wcm90by5zc2hjLnNzaF9zZXNzaW9uKSB7Ci0gICAgLyogb25seSBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBzdGlsbCBhcm91bmQgdG8gdXNlISAqLwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1NIVVRET1dOKTsKLSAgICByZXN1bHQgPSBteXNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7Ci0gIH0KLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKLQotICByZXR1cm4gcmVzdWx0OwotCi19Ci0KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotCi0gIGlmKCFzdGF0dXMpIHsKLSAgICAvKiBQb3N0IHF1b3RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgU0ZUUF9DTE9TRSBzdGF0ZSB0byBhdm9pZAotICAgICAgIGVycm9ycyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gb3BlbiBmaWxlIGhhbmRsZXMgZHVyaW5nIFBPU1RRVU9URQotICAgICAgIG9wZXJhdGlvbiAqLwotICAgIGlmKCFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSAmJiAhY29ubi0+Yml0cy5yZXRyeSkKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgfQotICByZXR1cm4gbXlzc2hfZG9uZShjb25uLCBzdGF0dXMpOwotfQotCi0vKiByZXR1cm4gbnVtYmVyIG9mIHNlbnQgYnl0ZXMgKi8KLXN0YXRpYyBzc2l6ZV90IHNmdHBfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG53cml0ZTsKLSAgKHZvaWQpc29ja2luZGV4OwotCi0gIG53cml0ZSA9IHNmdHBfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGUsIG1lbSwgbGVuKTsKLQotICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIEZBTFNFKTsKLQotI2lmIDAgLyogbm90IHJldHVybmVkIGJ5IGxpYnNzaCBvbiB3cml0ZSAqLwotICBpZihud3JpdGUgPT0gU1NIX0FHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIG53cml0ZSA9IDA7Ci0gIH0KLSAgZWxzZQotI2VuZGlmCi0gIGlmKG53cml0ZSA8IDApIHsKLSAgICAqZXJyID0gQ1VSTEVfU1NIOwotICAgIG53cml0ZSA9IC0xOwotICB9Ci0KLSAgcmV0dXJuIG53cml0ZTsKLX0KLQotLyoKLSAqIFJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMKLSAqIG9yIDwwIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHNmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG5yZWFkOwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgREVCVUdBU1NFUlQobGVuIDwgQ1VSTF9NQVhfUkVBRF9TSVpFKTsKLQotICBzd2l0Y2goY29ubi0+cHJvdG8uc3NoYy5zZnRwX3JlY3Zfc3RhdGUpIHsKLSAgICBjYXNlIDA6Ci0gICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZV9pbmRleCA9Ci0gICAgICAgICAgICBzZnRwX2FzeW5jX3JlYWRfYmVnaW4oY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KWxlbik7Ci0gICAgICBpZihjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZV9pbmRleCA8IDApIHsKLSAgICAgICAgKmVyciA9IENVUkxFX1JFQ1ZfRVJST1I7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLQotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIDE6Ci0gICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfcmVjdl9zdGF0ZSA9IDE7Ci0KLSAgICAgIG5yZWFkID0gc2Z0cF9hc3luY19yZWFkKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtLCAodWludDMyX3QpbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGVfaW5kZXgpOwotCi0gICAgICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBTU0hfQUdBSU4pP1RSVUU6RkFMU0UpOwotCi0gICAgICBpZihucmVhZCA9PSBTU0hfQUdBSU4pIHsKLSAgICAgICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKG5yZWFkIDwgMCkgewotICAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotCi0gICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfcmVjdl9zdGF0ZSA9IDA7Ci0gICAgICByZXR1cm4gbnJlYWQ7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgLyogd2UgbmV2ZXIgcmVhY2ggaGVyZSAqLwotICAgICAgcmV0dXJuIC0xOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNmdHBfcXVvdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBjb25zdCBjaGFyICpjcDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBTU0hQUk9UTyAqcHJvdG9wID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIENVUkxjb2RlIHJlc3VsdDsKLQotICAvKgotICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCi0gICAqLwotICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICBzc2hjLT5hY2NlcHRmYWlsID0gRkFMU0U7Ci0KLSAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgotICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCi0gICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KLQotICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgY21kKys7Ci0gICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7Ci0gIH0KLQotICBpZihzdHJjYXNlY29tcGFyZSgicHdkIiwgY21kKSkgewotICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KLSAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvcC0+cGF0aCk7Ci0gICAgaWYoIXRtcCkgewotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopICJQV0RcbiIsIDQpOwotICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOwotICAgIH0KLSAgICAvKiB0aGlzIHNlbmRzIGFuIEZUUC1saWtlICJoZWFkZXIiIHRvIHRoZSBoZWFkZXIgY2FsbGJhY2sgc28gdGhhdCB0aGUKLSAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgotICAgICAgIHVzaW5nIG9yZGluYXJ5IEZUUC4gKi8KLSAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIHRtcCwgc3RybGVuKHRtcCkpOwotICAgIGZyZWUodG1wKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qCi0gICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCi0gICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5Ci0gICAqLwotICBjcCA9IHN0cmNocihjbWQsICcgJyk7Ci0gIGlmKGNwID09IE5VTEwpIHsKLSAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIFNGVFAgY29tbWFuZC4gU3VwcGx5IHBhcmFtZXRlcihzKSEiKTsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKgotICAgKiBhbHNvLCBldmVyeSBjb21tYW5kIHRha2VzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCBzbyB3ZSBnZXQgdGhhdAotICAgKiBmaXJzdCBhcmd1bWVudCByaWdodCBub3cKLSAgICovCi0gIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgxLCBzc2hjLT5ob21lZGlyKTsKLSAgaWYocmVzdWx0KSB7Ci0gICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgIGVsc2UKLSAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IEJhZCBmaXJzdCBwYXJhbWV0ZXIiKTsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyoKLSAgICogU0ZUUCBpcyBhIGJpbmFyeSBwcm90b2NvbCwgc28gd2UgZG9uJ3Qgc2VuZCB0ZXh0IGNvbW1hbmRzCi0gICAqIHRvIHRoZSBzZXJ2ZXIuIEluc3RlYWQsIHdlIHNjYW4gZm9yIGNvbW1hbmRzIHVzZWQgYnkKLSAgICogT3BlblNTSCdzIHNmdHAgcHJvZ3JhbSBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbGlic3NoCi0gICAqIGZ1bmN0aW9ucy4KLSAgICovCi0gIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCAiLCA2KSB8fAotICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QgIiwgNikgfHwKLSAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duICIsIDYpKSB7Ci0gICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLwotCi0gICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCi0gICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLwotICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgZWxzZQotICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGNoZ3JwL2NobW9kL2Nob3duOiAiCi0gICAgICAgICAgICAgICJCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzc2hjLT5xdW90ZV9hdHRycyA9IE5VTEw7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJsbiAiLCAzKSB8fAotICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAic3ltbGluayAiLCA4KSkgewotICAgIC8qIHN5bWJvbGljIGxpbmtpbmcgKi8KLSAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBpcyB0aGUgc291cmNlICovCi0gICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLwotICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgZWxzZQotICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGxuL3N5bWxpbms6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NZTUxJTkspOwotICAgIHJldHVybjsKLSAgfQotICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJta2RpciAiLCA2KSkgewotICAgIC8qIGNyZWF0ZSBkaXIgKi8KLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9NS0RJUik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJlbmFtZSAiLCA3KSkgewotICAgIC8qIHJlbmFtZSBmaWxlICovCi0gICAgLyogZmlyc3QgcGFyYW0gaXMgdGhlIHNvdXJjZSBwYXRoICovCi0gICAgLyogc2Vjb25kIHBhcmFtIGlzIHRoZSBkZXN0LiBwYXRoICovCi0gICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gcmVuYW1lOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9SRU5BTUUpOwotICAgIHJldHVybjsKLSAgfQotICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybWRpciAiLCA2KSkgewotICAgIC8qIGRlbGV0ZSBkaXIgKi8KLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9STURJUik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtICIsIDMpKSB7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfVU5MSU5LKTsKLSAgICByZXR1cm47Ci0gIH0KLSNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCi0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInN0YXR2ZnMgIiwgOCkpIHsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTKTsKLSAgICByZXR1cm47Ci0gIH0KLSNlbmRpZgotCi0gIGZhaWxmKGRhdGEsICJVbmtub3duIFNGVFAgY29tbWFuZCIpOwotICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci19Ci0KLXN0YXRpYyB2b2lkIHNmdHBfcXVvdGVfc3RhdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKLSAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOwotCi0gIC8qIGlmIGEgY29tbWFuZCBzdGFydHMgd2l0aCBhbiBhc3Rlcmlzaywgd2hpY2ggYSBsZWdhbCBTRlRQIGNvbW1hbmQgbmV2ZXIKLSAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55Ci0gICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAotICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCi0KLSAgaWYoY21kWzBdID09ICcqJykgewotICAgIGNtZCsrOwotICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOwotICB9Ci0KLSAgLyogV2UgcmVhZCB0aGUgZmlsZSBhdHRyaWJ1dGVzLCBzdG9yZSB0aGVtIGluIHNzaGMtPnF1b3RlX2F0dHJzCi0gICAqIGFuZCBtb2RpZnkgdGhlbSBhY2NvcmRpbmdseSB0byBjb21tYW5kLiBUaGVuIHdlIHN3aXRjaCB0bwotICAgKiBRVU9URV9TRVRTVEFUIHN0YXRlIHRvIHdyaXRlIG5ldyBvbmVzLgotICAgKi8KLQotICBpZihzc2hjLT5xdW90ZV9hdHRycykKLSAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5xdW90ZV9hdHRycyk7Ci0gIHNzaGMtPnF1b3RlX2F0dHJzID0gc2Z0cF9zdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIpOwotICBpZihzc2hjLT5xdW90ZV9hdHRycyA9PSBOVUxMKSB7Ci0gICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gZ2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlZCIsCi0gICAgICAgICAgc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogTm93IHNldCB0aGUgbmV3IGF0dHJpYnV0ZXMuLi4gKi8KLSAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwIiwgNSkpIHsKLSAgICBzc2hjLT5xdW90ZV9hdHRycy0+Z2lkID0gKHVpbnQzMl90KXN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKLSAgICBpZihzc2hjLT5xdW90ZV9hdHRycy0+Z2lkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCi0gICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hncnAgZ2lkIG5vdCBhIG51bWJlciIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzc2hjLT5xdW90ZV9hdHRycy0+ZmxhZ3MgfD0gU1NIX0ZJTEVYRkVSX0FUVFJfVUlER0lEOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKLSAgICBtb2RlX3QgcGVybXM7Ci0gICAgcGVybXMgPSAobW9kZV90KXN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDgpOwotICAgIC8qIHBlcm1pc3Npb25zIGFyZSBvY3RhbCAqLwotICAgIGlmKHBlcm1zID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pKSB7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2htb2QgcGVybWlzc2lvbnMgbm90IGEgbnVtYmVyIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5wZXJtaXNzaW9ucyA9IHBlcm1zOwotICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5mbGFncyB8PSBTU0hfRklMRVhGRVJfQVRUUl9QRVJNSVNTSU9OUzsKLSAgfQotICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG93biIsIDUpKSB7Ci0gICAgc3NoYy0+cXVvdGVfYXR0cnMtPnVpZCA9ICh1aW50MzJfdClzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7Ci0gICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMtPnVpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgotICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNob3duIHVpZCBub3QgYSBudW1iZXIiKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3NoYy0+cXVvdGVfYXR0cnMtPmZsYWdzIHw9IFNTSF9GSUxFWEZFUl9BVFRSX1VJREdJRDsKLSAgfQotCi0gIC8qIE5vdyBzZW5kIHRoZSBjb21wbGV0ZWQgc3RydWN0dXJlLi4uICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQpOwotICByZXR1cm47Ci19Ci0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0VfTElCU1NIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjY1YzNjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICNkZWZpbmUgQ1VSTF9MSUJTU0gyX0RFQlVHICovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfTElCU1NIMgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlIDxsaWJzc2gyLmg+Ci0jaW5jbHVkZSA8bGlic3NoMl9zZnRwLmg+Ci0KLSNpZmRlZiBIQVZFX0ZDTlRMX0gKLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfVVRTTkFNRV9ICi0jaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTkVUREJfSAotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jZW5kaWYKLSNpZmRlZiBfX1ZNUwotI2luY2x1ZGUgPGluLmg+Ci0jaW5jbHVkZSA8aW5ldC5oPgotI2VuZGlmCi0KLSNpZiAoZGVmaW5lZChORVRXQVJFKSAmJiBkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykpCi0jdW5kZWYgaW5fYWRkcl90Ci0jZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCi0jZW5kaWYKLQotI2luY2x1ZGUgPGN1cmwvY3VybC5oPgotI2luY2x1ZGUgInVybGRhdGEuaCIKLSNpbmNsdWRlICJzZW5kZi5oIgotI2luY2x1ZGUgImhvc3RpcC5oIgotI2luY2x1ZGUgInByb2dyZXNzLmgiCi0jaW5jbHVkZSAidHJhbnNmZXIuaCIKLSNpbmNsdWRlICJlc2NhcGUuaCIKLSNpbmNsdWRlICJodHRwLmgiIC8qIGZvciBIVFRQIHByb3h5IHR1bm5lbCBzdHVmZiAqLwotI2luY2x1ZGUgInNzaC5oIgotI2luY2x1ZGUgInVybC5oIgotI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKLSNpbmNsdWRlICJnZXRpbmZvLmgiCi0jaW5jbHVkZSAic3RyZHVwLmgiCi0jaW5jbHVkZSAic3RyY2FzZS5oIgotI2luY2x1ZGUgInZ0bHMvdnRscy5oIgotI2luY2x1ZGUgImNvbm5lY3QuaCIKLSNpbmNsdWRlICJzdHJlcnJvci5oIgotI2luY2x1ZGUgImluZXRfbnRvcC5oIgotI2luY2x1ZGUgInBhcnNlZGF0ZS5oIiAvKiBmb3IgdGhlIHdlZWsgZGF5IGFuZCBtb250aCBuYW1lcyAqLwotI2luY2x1ZGUgInNvY2thZGRyLmgiIC8qIHJlcXVpcmVkIGZvciBDdXJsX3NvY2thZGRyX3N0b3JhZ2UgKi8KLSNpbmNsdWRlICJzdHJ0b29mZnQuaCIKLSNpbmNsdWRlICJtdWx0aWlmLmgiCi0jaW5jbHVkZSAic2VsZWN0LmgiCi0jaW5jbHVkZSAid2Fybmxlc3MuaCIKLSNpbmNsdWRlICJjdXJsX3BhdGguaCIKLQotLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLSNpbmNsdWRlICJtZW1kZWJ1Zy5oIgotCi0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwNgotLyogbGlic3NoMl9zZnRwX3N0YXR2ZnMgYW5kIGZyaWVuZHMgd2VyZSBhZGRlZCBpbiAxLjIuNiAqLwotI2RlZmluZSBIQVNfU1RBVFZGU19TVVBQT1JUIDEKLSNlbmRpZgotCi0jZGVmaW5lIHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHMpIGN1cmx4X3VsdG9zaShsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzKSkKLQotI2RlZmluZSBzZnRwX2xpYnNzaDJfcmVhbHBhdGgocyxwLHQsbSkgXAotICAgICAgICBsaWJzc2gyX3NmdHBfc3ltbGlua19leCgocyksIChwKSwgY3VybHhfdXp0b3VpKHN0cmxlbihwKSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQpLCAobSksIExJQlNTSDJfU0ZUUF9SRUFMUEFUSCkKLQotCi0vKiBMb2NhbCBmdW5jdGlvbnM6ICovCi1zdGF0aWMgY29uc3QgY2hhciAqc2Z0cF9saWJzc2gyX3N0cmVycm9yKGludCBlcnIpOwotc3RhdGljIExJQlNTSDJfQUxMT0NfRlVOQyhteV9saWJzc2gyX21hbGxvYyk7Ci1zdGF0aWMgTElCU1NIMl9SRUFMTE9DX0ZVTkMobXlfbGlic3NoMl9yZWFsbG9jKTsKLXN0YXRpYyBMSUJTU0gyX0ZSRUVfRlVOQyhteV9saWJzc2gyX2ZyZWUpOwotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci0KLXN0YXRpYyBDVVJMY29kZSBzY3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKLXN0YXRpYyBDVVJMY29kZSBzY3BfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOwotc3RhdGljIENVUkxjb2RlIHNjcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOwotCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKLXN0YXRpYwotQ1VSTGNvZGUgc2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKLQotc3RhdGljIGludCBzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcyBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwotCi1zdGF0aWMgaW50IHNzaF9wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKLQotc3RhdGljIENVUkxjb2RlIHNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci0KLS8qCi0gKiBTQ1AgcHJvdG9jb2wgaGFuZGxlci4KLSAqLwotCi1jb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zY3AgPSB7Ci0gICJTQ1AiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCi0gIHNzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLwotICBzc2hfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCi0gIHNjcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KLSAgc3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCi0gIHNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLwotICBzY3BfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCi0gIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLwotICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLwotICBzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLwotICBzY3BfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCi0gIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLwotICBDVVJMUFJPVE9fU0NQLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCi0gIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04KLSAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLwotfTsKLQotCi0vKgotICogU0ZUUCBwcm90b2NvbCBoYW5kbGVyLgotICovCi0KLWNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHAgPSB7Ci0gICJTRlRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCi0gIHNzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLwotICBzc2hfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCi0gIHNmdHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KLSAgc3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCi0gIHNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLwotICBzZnRwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCi0gIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLwotICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLwotICBzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLwotICBzZnRwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCi0gIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLwotICBDVVJMUFJPVE9fU0ZUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCi0gIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04KLSAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLwotfTsKLQotc3RhdGljIHZvaWQKLWtiZF9jYWxsYmFjayhjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sIGNvbnN0IGNoYXIgKmluc3RydWN0aW9uLAotICAgICAgICAgICAgIGludCBpbnN0cnVjdGlvbl9sZW4sIGludCBudW1fcHJvbXB0cywKLSAgICAgICAgICAgICBjb25zdCBMSUJTU0gyX1VTRVJBVVRIX0tCRElOVF9QUk9NUFQgKnByb21wdHMsCi0gICAgICAgICAgICAgTElCU1NIMl9VU0VSQVVUSF9LQkRJTlRfUkVTUE9OU0UgKnJlc3BvbnNlcywKLSAgICAgICAgICAgICB2b2lkICoqYWJzdHJhY3QpCi17Ci0gIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IChzdHJ1Y3QgY29ubmVjdGRhdGEgKikqYWJzdHJhY3Q7Ci0KLSNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKLSAgZnByaW50ZihzdGRlcnIsICJuYW1lPSVzXG4iLCBuYW1lKTsKLSAgZnByaW50ZihzdGRlcnIsICJuYW1lX2xlbj0lZFxuIiwgbmFtZV9sZW4pOwotICBmcHJpbnRmKHN0ZGVyciwgImluc3RydWN0aW9uPSVzXG4iLCBpbnN0cnVjdGlvbik7Ci0gIGZwcmludGYoc3RkZXJyLCAiaW5zdHJ1Y3Rpb25fbGVuPSVkXG4iLCBpbnN0cnVjdGlvbl9sZW4pOwotICBmcHJpbnRmKHN0ZGVyciwgIm51bV9wcm9tcHRzPSVkXG4iLCBudW1fcHJvbXB0cyk7Ci0jZWxzZQotICAodm9pZCluYW1lOwotICAodm9pZCluYW1lX2xlbjsKLSAgKHZvaWQpaW5zdHJ1Y3Rpb247Ci0gICh2b2lkKWluc3RydWN0aW9uX2xlbjsKLSNlbmRpZiAgLyogQ1VSTF9MSUJTU0gyX0RFQlVHICovCi0gIGlmKG51bV9wcm9tcHRzID09IDEpIHsKLSAgICByZXNwb25zZXNbMF0udGV4dCA9IHN0cmR1cChjb25uLT5wYXNzd2QpOwotICAgIHJlc3BvbnNlc1swXS5sZW5ndGggPSBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpOwotICB9Ci0gICh2b2lkKXByb21wdHM7Ci0gICh2b2lkKWFic3RyYWN0OwotfSAvKiBrYmRfY2FsbGJhY2sgKi8KLQotc3RhdGljIENVUkxjb2RlIHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShpbnQgZXJyKQotewotICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBMSUJTU0gyX0ZYX09LOgotICAgICAgcmV0dXJuIENVUkxFX09LOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NVQ0hfRklMRToKLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9QQVRIOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9QRVJNSVNTSU9OX0RFTklFRDoKLSAgICBjYXNlIExJQlNTSDJfRlhfV1JJVEVfUFJPVEVDVDoKLSAgICBjYXNlIExJQlNTSDJfRlhfTE9DS19DT05GbElDVDoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TUEFDRV9PTl9GSUxFU1lTVEVNOgotICAgIGNhc2UgTElCU1NIMl9GWF9RVU9UQV9FWENFRURFRDoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRElTS19GVUxMOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFM6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfRVhJU1RTOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0RJUl9OT1RfRU1QVFk6Ci0gICAgICByZXR1cm4gQ1VSTEVfUVVPVEVfRVJST1I7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gQ1VSTEVfU1NIOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKGludCBlcnIpCi17Ci0gIHN3aXRjaChlcnIpIHsKLSAgICAvKiBPcmRlcmVkIGJ5IG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gbGlic3NoMi5oICovCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX05PTkU6Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICAvKiBUaGlzIGlzIHRoZSBlcnJvciByZXR1cm5lZCBieSBsaWJzc2gyX3NjcF9yZWN2MgotICAgICAqIG9uIHVua25vd24gZmlsZSAqLwotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9TQ1BfUFJPVE9DT0w6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9OT05FOgotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9BTExPQzoKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9TRU5EOgotICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7Ci0KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfSE9TVEtFWV9JTklUOgotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9IT1NUS0VZX1NJR046Ci0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BVQkxJQ0tFWV9VTlJFQ09HTklaRUQ6Ci0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BVQkxJQ0tFWV9VTlZFUklGSUVEOgotICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9QQVNTV09SRF9FWFBJUkVEOgotICAgICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9TT0NLRVRfVElNRU9VVDoKLSAgICBjYXNlIExJQlNTSDJfRVJST1JfVElNRU9VVDoKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfRUFHQUlOOgotICAgICAgcmV0dXJuIENVUkxFX0FHQUlOOwotICB9Ci0KLSAgcmV0dXJuIENVUkxFX1NTSDsKLX0KLQotc3RhdGljIExJQlNTSDJfQUxMT0NfRlVOQyhteV9saWJzc2gyX21hbGxvYykKLXsKLSAgKHZvaWQpYWJzdHJhY3Q7IC8qIGFyZyBub3QgdXNlZCAqLwotICByZXR1cm4gbWFsbG9jKGNvdW50KTsKLX0KLQotc3RhdGljIExJQlNTSDJfUkVBTExPQ19GVU5DKG15X2xpYnNzaDJfcmVhbGxvYykKLXsKLSAgKHZvaWQpYWJzdHJhY3Q7IC8qIGFyZyBub3QgdXNlZCAqLwotICByZXR1cm4gcmVhbGxvYyhwdHIsIGNvdW50KTsKLX0KLQotc3RhdGljIExJQlNTSDJfRlJFRV9GVU5DKG15X2xpYnNzaDJfZnJlZSkKLXsKLSAgKHZvaWQpYWJzdHJhY3Q7IC8qIGFyZyBub3QgdXNlZCAqLwotICBpZihwdHIpIC8qIHNzaDIgYWdlbnQgc29tZXRpbWVzIGNhbGwgZnJlZSB3aXRoIG51bGwgcHRyICovCi0gICAgZnJlZShwdHIpOwotfQotCi0vKgotICogU1NIIFN0YXRlIG1hY2hpbmUgcmVsYXRlZCBjb2RlCi0gKi8KLS8qIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNoYW5nZSBTU0ggc3RhdGUhICovCi1zdGF0aWMgdm9pZCBzdGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHNzaHN0YXRlIG5vd3N0YXRlKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCi0gIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLwotICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW10gPSB7Ci0gICAgIlNTSF9TVE9QIiwKLSAgICAiU1NIX0lOSVQiLAotICAgICJTU0hfU19TVEFSVFVQIiwKLSAgICAiU1NIX0hPU1RLRVkiLAotICAgICJTU0hfQVVUSExJU1QiLAotICAgICJTU0hfQVVUSF9QS0VZX0lOSVQiLAotICAgICJTU0hfQVVUSF9QS0VZIiwKLSAgICAiU1NIX0FVVEhfUEFTU19JTklUIiwKLSAgICAiU1NIX0FVVEhfUEFTUyIsCi0gICAgIlNTSF9BVVRIX0FHRU5UX0lOSVQiLAotICAgICJTU0hfQVVUSF9BR0VOVF9MSVNUIiwKLSAgICAiU1NIX0FVVEhfQUdFTlQiLAotICAgICJTU0hfQVVUSF9IT1NUX0lOSVQiLAotICAgICJTU0hfQVVUSF9IT1NUIiwKLSAgICAiU1NIX0FVVEhfS0VZX0lOSVQiLAotICAgICJTU0hfQVVUSF9LRVkiLAotICAgICJTU0hfQVVUSF9HU1NBUEkiLAotICAgICJTU0hfQVVUSF9ET05FIiwKLSAgICAiU1NIX1NGVFBfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1JFQUxQQVRIIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1BPU1RRVU9URV9JTklUIiwKLSAgICAiU1NIX1NGVFBfUVVPVEUiLAotICAgICJTU0hfU0ZUUF9ORVhUX1FVT1RFIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NFVFNUQVQiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TWU1MSU5LIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfTUtESVIiLAotICAgICJTU0hfU0ZUUF9RVU9URV9SRU5BTUUiLAotICAgICJTU0hfU0ZUUF9RVU9URV9STURJUiIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1VOTElOSyIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NUQVRWRlMiLAotICAgICJTU0hfU0ZUUF9HRVRJTkZPIiwKLSAgICAiU1NIX1NGVFBfRklMRVRJTUUiLAotICAgICJTU0hfU0ZUUF9UUkFOU19JTklUIiwKLSAgICAiU1NIX1NGVFBfVVBMT0FEX0lOSVQiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUIiwKLSAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlMiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUiIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1JFQURESVIiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0xJTksiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfRE9ORSIsCi0gICAgIlNTSF9TRlRQX0RPV05MT0FEX0lOSVQiLAotICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUIiwKLSAgICAiU1NIX1NGVFBfQ0xPU0UiLAotICAgICJTU0hfU0ZUUF9TSFVURE9XTiIsCi0gICAgIlNTSF9TQ1BfVFJBTlNfSU5JVCIsCi0gICAgIlNTSF9TQ1BfVVBMT0FEX0lOSVQiLAotICAgICJTU0hfU0NQX0RPV05MT0FEX0lOSVQiLAotICAgICJTU0hfU0NQX0RPV05MT0FEIiwKLSAgICAiU1NIX1NDUF9ET05FIiwKLSAgICAiU1NIX1NDUF9TRU5EX0VPRiIsCi0gICAgIlNTSF9TQ1BfV0FJVF9FT0YiLAotICAgICJTU0hfU0NQX1dBSVRfQ0xPU0UiLAotICAgICJTU0hfU0NQX0NIQU5ORUxfRlJFRSIsCi0gICAgIlNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QiLAotICAgICJTU0hfU0VTU0lPTl9GUkVFIiwKLSAgICAiUVVJVCIKLSAgfTsKLQotICAvKiBhIHByZWNhdXRpb24gdG8gbWFrZSBzdXJlIHRoZSBsaXN0cyBhcmUgaW4gc3luYyAqLwotICBERUJVR0FTU0VSVChzaXplb2YobmFtZXMpL3NpemVvZihuYW1lc1swXSkgPT0gU1NIX0xBU1QpOwotCi0gIGlmKHNzaGMtPnN0YXRlICE9IG5vd3N0YXRlKSB7Ci0gICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNGVFAgJXAgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gJXNcbiIsCi0gICAgICAgICAgKHZvaWQgKilzc2hjLCBuYW1lc1tzc2hjLT5zdGF0ZV0sIG5hbWVzW25vd3N0YXRlXSk7Ci0gIH0KLSNlbmRpZgotCi0gIHNzaGMtPnN0YXRlID0gbm93c3RhdGU7Ci19Ci0KLQotI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCi1zdGF0aWMgaW50IHNzaGtleWNhbGxiYWNrKHN0cnVjdCBDdXJsX2Vhc3kgKmVhc3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjdXJsX2toa2V5ICprbm93bmtleSwgLyoga25vd24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfa2hrZXkgKmZvdW5ka2V5LCAvKiBmb3VuZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGN1cmxfa2htYXRjaCBtYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50cCkKLXsKLSAgKHZvaWQpZWFzeTsKLSAgKHZvaWQpa25vd25rZXk7Ci0gICh2b2lkKWZvdW5ka2V5OwotICAodm9pZCljbGllbnRwOwotCi0gIC8qIHdlIG9ubHkgYWxsb3cgcGVyZmVjdCBtYXRjaGVzLCBhbmQgd2UgcmVqZWN0IGV2ZXJ5dGhpbmcgZWxzZSAqLwotICByZXR1cm4gKG1hdGNoICE9IENVUkxLSE1BVENIX09LKT9DVVJMS0hTVEFUX1JFSkVDVDpDVVJMS0hTVEFUX0ZJTkU7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIEVhcmxpZXIgbGlic3NoMiB2ZXJzaW9ucyBkaWRuJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBzZWVrIHRvIDY0Yml0IHBvc2l0aW9ucwotICogd2l0aCAzMmJpdCBzaXplX3QuCi0gKi8KLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0ZUUF9TRUVLNjQKLSNkZWZpbmUgU0ZUUF9TRUVLKHgseSkgbGlic3NoMl9zZnRwX3NlZWs2NCh4LCAobGlic3NoMl91aW50NjRfdCl5KQotI2Vsc2UKLSNkZWZpbmUgU0ZUUF9TRUVLKHgseSkgbGlic3NoMl9zZnRwX3NlZWsoeCwgKHNpemVfdCl5KQotI2VuZGlmCi0KLS8qCi0gKiBFYXJsaWVyIGxpYnNzaDIgdmVyc2lvbnMgZGlkbid0IGRvIFNDUCBwcm9wZXJseSBiZXlvbmQgMzJiaXQgc2l6ZXMgb24gMzJiaXQKLSAqIGFyY2hpdGVjdHVyZXMgc28gd2UgY2hlY2sgb2YgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbiBpcyBwcmVzZW50LgotICovCi0jaWZuZGVmIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0Ci0jZGVmaW5lIFNDUF9TRU5EKGEsYixjLGQpIGxpYnNzaDJfc2NwX3NlbmRfZXgoYSwgYiwgKGludCkoYyksIChzaXplX3QpZCwgMCwgMCkKLSNlbHNlCi0jZGVmaW5lIFNDUF9TRU5EKGEsYixjLGQpIGxpYnNzaDJfc2NwX3NlbmQ2NChhLCBiLCAoaW50KShjKSwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlic3NoMl91aW50NjRfdClkLCAwLCAwKQotI2VuZGlmCi0KLS8qCi0gKiBsaWJzc2gyIDEuMi44IGZpeGVkIHRoZSBwcm9ibGVtIHdpdGggMzJiaXQgaW50cyB1c2VkIGZvciBzb2NrZXRzIG9uIHdpbjY0LgotICovCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fSEFORFNIQUtFCi0jZGVmaW5lIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwKHgseSkgbGlic3NoMl9zZXNzaW9uX2hhbmRzaGFrZSh4LHkpCi0jZW5kaWYKLQotc3RhdGljIENVUkxjb2RlIHNzaF9rbm93bmhvc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCi0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSkgewotICAgIC8qIHdlJ3JlIGFza2VkIHRvIHZlcmlmeSB0aGUgaG9zdCBhZ2FpbnN0IGEgZmlsZSAqLwotICAgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICAgIGludCByYzsKLSAgICBpbnQga2V5dHlwZTsKLSAgICBzaXplX3Qga2V5bGVuOwotICAgIGNvbnN0IGNoYXIgKnJlbW90ZWtleSA9IGxpYnNzaDJfc2Vzc2lvbl9ob3N0a2V5KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlsZW4sICZrZXl0eXBlKTsKLSAgICBpbnQga2V5Y2hlY2sgPSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19GQUlMVVJFOwotICAgIGludCBrZXliaXQgPSAwOwotCi0gICAgaWYocmVtb3Rla2V5KSB7Ci0gICAgICAvKgotICAgICAgICogQSBzdWJqZWN0IHRvIGZpZ3VyZSBvdXQgaXMgd2hhdCBob3N0IG5hbWUgd2UgbmVlZCB0byBwYXNzIGluIGhlcmUuCi0gICAgICAgKiBXaGF0IGhvc3QgbmFtZSBkb2VzIE9wZW5TU0ggc3RvcmUgaW4gaXRzIGZpbGUgaWYgYW4gSUROIG5hbWUgaXMKLSAgICAgICAqIHVzZWQ/Ci0gICAgICAgKi8KLSAgICAgIHN0cnVjdCBsaWJzc2gyX2tub3duaG9zdCAqaG9zdDsKLSAgICAgIGVudW0gY3VybF9raG1hdGNoIGtleW1hdGNoOwotICAgICAgY3VybF9zc2hrZXljYWxsYmFjayBmdW5jID0KLSAgICAgICAgZGF0YS0+c2V0LnNzaF9rZXlmdW5jP2RhdGEtPnNldC5zc2hfa2V5ZnVuYzpzc2hrZXljYWxsYmFjazsKLSAgICAgIHN0cnVjdCBjdXJsX2toa2V5IGtub3dua2V5OwotICAgICAgc3RydWN0IGN1cmxfa2hrZXkgKmtub3dua2V5cCA9IE5VTEw7Ci0gICAgICBzdHJ1Y3QgY3VybF9raGtleSBmb3VuZGtleTsKLQotICAgICAga2V5Yml0ID0gKGtleXR5cGUgPT0gTElCU1NIMl9IT1NUS0VZX1RZUEVfUlNBKT8KLSAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZX1NTSFJTQTpMSUJTU0gyX0tOT1dOSE9TVF9LRVlfU1NIRFNTOwotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9DSEVDS1AKLSAgICAgIGtleWNoZWNrID0gbGlic3NoMl9rbm93bmhvc3RfY2hlY2twKHNzaGMtPmtoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPnJlbW90ZV9wb3J0ICE9IFBPUlRfU1NIKT8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0Oi0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9UWVBFX1BMQUlOfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZRU5DX1JBV3wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0KTsKLSNlbHNlCi0gICAgICBrZXljaGVjayA9IGxpYnNzaDJfa25vd25ob3N0X2NoZWNrKHNzaGMtPmtoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9UWVBFX1BMQUlOfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0KTsKLSNlbmRpZgotCi0gICAgICBpbmZvZihkYXRhLCAiU1NIIGhvc3QgY2hlY2s6ICVkLCBrZXk6ICVzXG4iLCBrZXljaGVjaywKLSAgICAgICAgICAgIChrZXljaGVjayA8PSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NSVNNQVRDSCk/Ci0gICAgICAgICAgICBob3N0LT5rZXk6Ijxub25lPiIpOwotCi0gICAgICAvKiBzZXR1cCAna25vd25rZXknICovCi0gICAgICBpZihrZXljaGVjayA8PSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NSVNNQVRDSCkgewotICAgICAgICBrbm93bmtleS5rZXkgPSBob3N0LT5rZXk7Ci0gICAgICAgIGtub3dua2V5LmxlbiA9IDA7Ci0gICAgICAgIGtub3dua2V5LmtleXR5cGUgPSAoa2V5dHlwZSA9PSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0EpPwotICAgICAgICAgIENVUkxLSFRZUEVfUlNBIDogQ1VSTEtIVFlQRV9EU1M7Ci0gICAgICAgIGtub3dua2V5cCA9ICZrbm93bmtleTsKLSAgICAgIH0KLQotICAgICAgLyogc2V0dXAgJ2ZvdW5ka2V5JyAqLwotICAgICAgZm91bmRrZXkua2V5ID0gcmVtb3Rla2V5OwotICAgICAgZm91bmRrZXkubGVuID0ga2V5bGVuOwotICAgICAgZm91bmRrZXkua2V5dHlwZSA9IChrZXl0eXBlID09IExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQSk/Ci0gICAgICAgIENVUkxLSFRZUEVfUlNBIDogQ1VSTEtIVFlQRV9EU1M7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBpZiBhbnkgb2YgdGhlIExJQlNTSDJfS05PV05IT1NUX0NIRUNLXyogZGVmaW5lcyBhbmQgdGhlCi0gICAgICAgKiBjdXJsX2tobWF0Y2ggZW51bSBhcmUgZXZlciBtb2RpZmllZCwgd2UgbmVlZCB0byBpbnRyb2R1Y2UgYQotICAgICAgICogdHJhbnNsYXRpb24gdGFibGUgaGVyZSEKLSAgICAgICAqLwotICAgICAga2V5bWF0Y2ggPSAoZW51bSBjdXJsX2tobWF0Y2gpa2V5Y2hlY2s7Ci0KLSAgICAgIC8qIEFzayB0aGUgY2FsbGJhY2sgaG93IHRvIGJlaGF2ZSAqLwotICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7Ci0gICAgICByYyA9IGZ1bmMoZGF0YSwga25vd25rZXlwLCAvKiBmcm9tIHRoZSBrbm93bmhvc3RzIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCi0gICAgICAgICAgICAgICAga2V5bWF0Y2gsIGRhdGEtPnNldC5zc2hfa2V5ZnVuY191c2VycCk7Ci0gICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIC8qIG5vIHJlbW90ZWtleSBtZWFucyBmYWlsdXJlISAqLwotICAgICAgcmMgPSBDVVJMS0hTVEFUX1JFSkVDVDsKLQotICAgIHN3aXRjaChyYykgewotICAgIGRlZmF1bHQ6IC8qIHVua25vd24gcmV0dXJuIGNvZGVzIHdpbGwgZXF1YWwgcmVqZWN0ICovCi0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgQ1VSTEtIU1RBVF9SRUpFQ1Q6Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBDVVJMS0hTVEFUX0RFRkVSOgotICAgICAgLyogREVGRVIgbWVhbnMgYmFpbCBvdXQgYnV0IGtlZXAgdGhlIFNTSF9IT1NUS0VZIHN0YXRlICovCi0gICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkU6Ci0gICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEU6Ci0gICAgICAvKiBwcm9jZWVkICovCi0gICAgICBpZihrZXljaGVjayAhPSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NQVRDSCkgewotICAgICAgICAvKiB0aGUgZm91bmQgaG9zdCtrZXkgZGlkbid0IG1hdGNoIGJ1dCBoYXMgYmVlbiB0b2xkIHRvIGJlIGZpbmUKLSAgICAgICAgICAgYW55d2F5IHNvIHdlIGFkZCBpdCBpbiBtZW1vcnkgKi8KLSAgICAgICAgaW50IGFkZHJjID0gbGlic3NoMl9rbm93bmhvc3RfYWRkKHNzaGMtPmtoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9UWVBFX1BMQUlOfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZRU5DX1JBV3wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwgTlVMTCk7Ci0gICAgICAgIGlmKGFkZHJjKQotICAgICAgICAgIGluZm9mKGRhdGEsICJXYXJuaW5nIGFkZGluZyB0aGUga25vd24gaG9zdCAlcyBmYWlsZWQhXG4iLAotICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSk7Ci0gICAgICAgIGVsc2UgaWYocmMgPT0gQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFKSB7Ci0gICAgICAgICAgLyogbm93IHdlIHdyaXRlIHRoZSBlbnRpcmUgaW4tbWVtb3J5IGxpc3Qgb2Yga25vd24gaG9zdHMgdG8gdGhlCi0gICAgICAgICAgICAga25vd25faG9zdHMgZmlsZSAqLwotICAgICAgICAgIGludCB3cmMgPQotICAgICAgICAgICAgbGlic3NoMl9rbm93bmhvc3Rfd3JpdGVmaWxlKHNzaGMtPmtoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9GSUxFX09QRU5TU0gpOwotICAgICAgICAgIGlmKHdyYykgewotICAgICAgICAgICAgaW5mb2YoZGF0YSwgIldhcm5pbmcsIHdyaXRpbmcgJXMgZmFpbGVkIVxuIiwKLSAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSNlbHNlIC8qIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJICovCi0gICh2b2lkKWNvbm47Ci0jZW5kaWYKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIENVUkxjb2RlIHNzaF9jaGVja19maW5nZXJwcmludChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgY29uc3QgY2hhciAqcHVia2V5X21kNSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XTsKLSAgY2hhciBtZDVidWZmZXJbMzNdOwotCi0gIGNvbnN0IGNoYXIgKmZpbmdlcnByaW50ID0gbGlic3NoMl9ob3N0a2V5X2hhc2goc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICBMSUJTU0gyX0hPU1RLRVlfSEFTSF9NRDUpOwotCi0gIGlmKGZpbmdlcnByaW50KSB7Ci0gICAgLyogVGhlIGZpbmdlcnByaW50IHBvaW50cyB0byBzdGF0aWMgc3RvcmFnZSAoISksIGRvbid0IGZyZWUoKSBpdC4gKi8KLSAgICBpbnQgaTsKLSAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKQotICAgICAgbXNucHJpbnRmKCZtZDVidWZmZXJbaSoyXSwgMywgIiUwMngiLCAodW5zaWduZWQgY2hhcikgZmluZ2VycHJpbnRbaV0pOwotICAgIGluZm9mKGRhdGEsICJTU0ggTUQ1IGZpbmdlcnByaW50OiAlc1xuIiwgbWQ1YnVmZmVyKTsKLSAgfQotCi0gIC8qIEJlZm9yZSB3ZSBhdXRoZW50aWNhdGUgd2UgY2hlY2sgdGhlIGhvc3RrZXkncyBNRDUgZmluZ2VycHJpbnQKLSAgICogYWdhaW5zdCBhIGtub3duIGZpbmdlcnByaW50LCBpZiBhdmFpbGFibGUuCi0gICAqLwotICBpZihwdWJrZXlfbWQ1ICYmIHN0cmxlbihwdWJrZXlfbWQ1KSA9PSAzMikgewotICAgIGlmKCFmaW5nZXJwcmludCB8fCAhc3RyY2FzZWNvbXBhcmUobWQ1YnVmZmVyLCBwdWJrZXlfbWQ1KSkgewotICAgICAgaWYoZmluZ2VycHJpbnQpCi0gICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWlzbWF0Y2ggbWQ1IGZpbmdlcnByaW50LiAiCi0gICAgICAgICAgICAiUmVtb3RlICVzIGlzIG5vdCBlcXVhbCB0byAlcyIsIG1kNWJ1ZmZlciwgcHVia2V5X21kNSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWQ1IGZpbmdlcnByaW50IG5vdCBhdmFpbGFibGUiKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICAgIHJldHVybiBzc2hjLT5hY3R1YWxjb2RlOwotICAgIH0KLSAgICBpbmZvZihkYXRhLCAiTUQ1IGNoZWNrc3VtIG1hdGNoIVxuIik7Ci0gICAgLyogYXMgd2UgYWxyZWFkeSBtYXRjaGVkLCB3ZSBza2lwIHRoZSBjaGVjayBmb3Iga25vd24gaG9zdHMgKi8KLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gIH0KLSAgcmV0dXJuIHNzaF9rbm93bmhvc3QoY29ubik7Ci19Ci0KLS8qCi0gKiBzc2hfc3RhdGVtYWNoX2FjdCgpIHJ1bnMgdGhlIFNTSCBzdGF0ZSBtYWNoaW5lIGFzIGZhciBhcyBpdCBjYW4gd2l0aG91dAotICogYmxvY2tpbmcgYW5kIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGVuZC4gIFRoZSBkYXRhIHRoZSBwb2ludGVyICdibG9jaycgcG9pbnRzCi0gKiB0byB3aWxsIGJlIHNldCB0byBUUlVFIGlmIHRoZSBsaWJzc2gyIGZ1bmN0aW9uIHJldHVybnMgTElCU1NIMl9FUlJPUl9FQUdBSU4KLSAqIG1lYW5pbmcgaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQotICovCi0KLXN0YXRpYyBDVVJMY29kZSBzc2hfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmJsb2NrKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBkYXRhLT5yZXEucHJvdG9wOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0gIGNoYXIgKm5ld19yZWFkZGlyX2xpbmU7Ci0gIGludCByYyA9IExJQlNTSDJfRVJST1JfTk9ORTsKLSAgaW50IGVycjsKLSAgaW50IHNlZWtlcnIgPSBDVVJMX1NFRUtGVU5DX09LOwotICAqYmxvY2sgPSAwOyAvKiB3ZSdyZSBub3QgYmxvY2tpbmcgYnkgZGVmYXVsdCAqLwotCi0gIGRvIHsKLQotICAgIHN3aXRjaChzc2hjLT5zdGF0ZSkgewotICAgIGNhc2UgU1NIX0lOSVQ6Ci0gICAgICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsKLQotICAgICAgLyogU2V0IGxpYnNzaDIgdG8gbm9uLWJsb2NraW5nLCBzaW5jZSBldmVyeXRoaW5nIGludGVybmFsbHkgaXMKLSAgICAgICAgIG5vbi1ibG9ja2luZyAqLwotICAgICAgbGlic3NoMl9zZXNzaW9uX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TX1NUQVJUVVApOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NfU1RBUlRVUDoKLSAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoc3NoYy0+c3NoX3Nlc3Npb24sIChpbnQpc29jayk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjKSB7Ci0gICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb246ICVkLCAlcyIsIHJjLCBlcnJfbXNnKTsKLQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX0ZBSUxFRF9JTklUOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX0hPU1RLRVkpOwotCi0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX0hPU1RLRVk6Ci0gICAgICAvKgotICAgICAgICogQmVmb3JlIHdlIGF1dGhlbnRpY2F0ZSB3ZSBzaG91bGQgY2hlY2sgdGhlIGhvc3RrZXkncyBmaW5nZXJwcmludAotICAgICAgICogYWdhaW5zdCBvdXIga25vd24gaG9zdHMuIEhvdyB0aGF0IGlzIGhhbmRsZWQgKHJlYWRpbmcgZnJvbSBmaWxlLAotICAgICAgICogd2hhdGV2ZXIpIGlzIHVwIHRvIHVzLgotICAgICAgICovCi0gICAgICByZXN1bHQgPSBzc2hfY2hlY2tfZmluZ2VycHJpbnQoY29ubik7Ci0gICAgICBpZighcmVzdWx0KQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSExJU1QpOwotICAgICAgLyogc3NoX2NoZWNrX2ZpbmdlcnByaW50IHNldHMgc3RhdGUgYXBwcm9wcmlhdGVseSBvbiBlcnJvciAqLwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRITElTVDoKLSAgICAgIC8qCi0gICAgICAgKiBGaWd1cmUgb3V0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMKLSAgICAgICAqIE5COiBBcyBzb29uIGFzIHdlIGhhdmUgcHJvdmlkZWQgYSB1c2VybmFtZSB0byBhbiBvcGVuc3NoIHNlcnZlciB3ZQotICAgICAgICogbXVzdCBuZXZlciBjaGFuZ2UgaXQgbGF0ZXIuIFRodXMsIGFsd2F5cyBzcGVjaWZ5IHRoZSBjb3JyZWN0IHVzZXJuYW1lCi0gICAgICAgKiBoZXJlLCBldmVuIHRob3VnaCB0aGUgbGlic3NoMiBkb2NzIGtpbmQgb2YgaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQgYmUKLSAgICAgICAqIHBvc3NpYmxlIHRvIGdldCBhICdnZW5lcmljJyBsaXN0IChub3QgdXNlci1zcGVjaWZpYykgb2YgYXV0aGVudGljYXRpb24KLSAgICAgICAqIG1ldGhvZHMsIHByZXN1bWFibHkgd2l0aCBhIGJsYW5rIHVzZXJuYW1lLiBUaGF0IHdvbid0IHdvcmsgaW4gbXkKLSAgICAgICAqIGV4cGVyaWVuY2UuCi0gICAgICAgKiBTbyBhbHdheXMgc3BlY2lmeSBpdCBoZXJlLgotICAgICAgICovCi0gICAgICBzc2hjLT5hdXRobGlzdCA9IGxpYnNzaDJfdXNlcmF1dGhfbGlzdChzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnVzZXIpKSk7Ci0KLSAgICAgIGlmKCFzc2hjLT5hdXRobGlzdCkgewotICAgICAgICBpZihsaWJzc2gyX3VzZXJhdXRoX2F1dGhlbnRpY2F0ZWQoc3NoYy0+c3NoX3Nlc3Npb24pKSB7Ci0gICAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiU1NIIHVzZXIgYWNjZXB0ZWQgd2l0aCBubyBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBpZihlcnIgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCi0gICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaW5mb2YoZGF0YSwgIlNTSCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGF2YWlsYWJsZTogJXNcbiIsCi0gICAgICAgICAgICBzc2hjLT5hdXRobGlzdCk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BLRVlfSU5JVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfUEtFWV9JTklUOgotICAgICAgLyoKLSAgICAgICAqIENoZWNrIHRoZSBzdXBwb3J0ZWQgYXV0aCB0eXBlcyBpbiB0aGUgb3JkZXIgSSBmZWVsIGlzIG1vc3Qgc2VjdXJlCi0gICAgICAgKiB3aXRoIHRoZSByZXF1ZXN0ZWQgdHlwZSBvZiBhdXRoZW50aWNhdGlvbgotICAgICAgICovCi0gICAgICBzc2hjLT5hdXRoZWQgPSBGQUxTRTsKLQotICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QVUJMSUNLRVkpICYmCi0gICAgICAgICAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAicHVibGlja2V5IikgIT0gTlVMTCkpIHsKLSAgICAgICAgYm9vbCBvdXRfb2ZfbWVtb3J5ID0gRkFMU0U7Ci0KLSAgICAgICAgc3NoYy0+cnNhX3B1YiA9IHNzaGMtPnJzYSA9IE5VTEw7Ci0KLSAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSkKLSAgICAgICAgICBzc2hjLT5yc2EgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8qIFRvIHBvbmRlciBhYm91dDogc2hvdWxkIHJlYWxseSB0aGUgbGliIGJlIG1lc3NpbmcgYWJvdXQgd2l0aCB0aGUKLSAgICAgICAgICAgICBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGV0Yz8gKi8KLSAgICAgICAgICBjaGFyICpob21lID0gY3VybF9nZXRlbnYoIkhPTUUiKTsKLQotICAgICAgICAgIC8qIElmIG5vIHByaXZhdGUga2V5IGZpbGUgaXMgc3BlY2lmaWVkLCB0cnkgc29tZSBjb21tb24gcGF0aHMuICovCi0gICAgICAgICAgaWYoaG9tZSkgewotICAgICAgICAgICAgLyogVHJ5IH4vLnNzaCBmaXJzdC4gKi8KLSAgICAgICAgICAgIHNzaGMtPnJzYSA9IGFwcmludGYoIiVzLy5zc2gvaWRfcnNhIiwgaG9tZSk7Ci0gICAgICAgICAgICBpZighc3NoYy0+cnNhKQotICAgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKLSAgICAgICAgICAgIGVsc2UgaWYoYWNjZXNzKHNzaGMtPnJzYSwgUl9PSykgIT0gMCkgewotICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0gICAgICAgICAgICAgIHNzaGMtPnJzYSA9IGFwcmludGYoIiVzLy5zc2gvaWRfZHNhIiwgaG9tZSk7Ci0gICAgICAgICAgICAgIGlmKCFzc2hjLT5yc2EpCi0gICAgICAgICAgICAgICAgb3V0X29mX21lbW9yeSA9IFRSVUU7Ci0gICAgICAgICAgICAgIGVsc2UgaWYoYWNjZXNzKHNzaGMtPnJzYSwgUl9PSykgIT0gMCkgewotICAgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZShob21lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoIW91dF9vZl9tZW1vcnkgJiYgIXNzaGMtPnJzYSkgewotICAgICAgICAgICAgLyogTm90aGluZyBmb3VuZDsgdHJ5IHRoZSBjdXJyZW50IGRpci4gKi8KLSAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiaWRfcnNhIik7Ci0gICAgICAgICAgICBpZihzc2hjLT5yc2EgJiYgYWNjZXNzKHNzaGMtPnJzYSwgUl9PSykgIT0gMCkgewotICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0gICAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiaWRfZHNhIik7Ci0gICAgICAgICAgICAgIGlmKHNzaGMtPnJzYSAmJiBhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotICAgICAgICAgICAgICAgIC8qIE91dCBvZiBndWVzc2VzLiBTZXQgdG8gdGhlIGVtcHR5IHN0cmluZyB0byBhdm9pZAotICAgICAgICAgICAgICAgICAqIHN1cnByaXNpbmcgaW5mbyBtZXNzYWdlcy4gKi8KLSAgICAgICAgICAgICAgICBzc2hjLT5yc2EgPSBzdHJkdXAoIiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgc3BlY2lmaWVzIGEgcHVibGljIGtleSBmaWxlLCBsZXQKLSAgICAgICAgICogbGlic3NoMiBleHRyYWN0IHRoZSBwdWJsaWMga2V5IGZyb20gdGhlIHByaXZhdGUga2V5IGZpbGUuCi0gICAgICAgICAqIFRoaXMgaXMgZG9uZSBieSBzaW1wbHkgcGFzc2luZyBzc2hjLT5yc2FfcHViID0gTlVMTC4KLSAgICAgICAgICovCi0gICAgICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXQotICAgICAgICAgICAvKiB0cmVhdCBlbXB0eSBzdHJpbmcgdGhlIHNhbWUgd2F5IGFzIE5VTEwgKi8KLSAgICAgICAgICAgJiYgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldWzBdKSB7Ci0gICAgICAgICAgc3NoYy0+cnNhX3B1YiA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0pOwotICAgICAgICAgIGlmKCFzc2hjLT5yc2FfcHViKQotICAgICAgICAgICAgb3V0X29mX21lbW9yeSA9IFRSVUU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihvdXRfb2ZfbWVtb3J5IHx8IHNzaGMtPnJzYSA9PSBOVUxMKSB7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzc2hjLT5wYXNzcGhyYXNlID0gZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkOwotICAgICAgICBpZighc3NoYy0+cGFzc3BocmFzZSkKLSAgICAgICAgICBzc2hjLT5wYXNzcGhyYXNlID0gIiI7Ci0KLSAgICAgICAgaWYoc3NoYy0+cnNhX3B1YikKLSAgICAgICAgICBpbmZvZihkYXRhLCAiVXNpbmcgU1NIIHB1YmxpYyBrZXkgZmlsZSAnJXMnXG4iLCBzc2hjLT5yc2FfcHViKTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIlVzaW5nIFNTSCBwcml2YXRlIGtleSBmaWxlICclcydcbiIsIHNzaGMtPnJzYSk7Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QS0VZOgotICAgICAgLyogVGhlIGZ1bmN0aW9uIGJlbG93IGNoZWNrcyBpZiB0aGUgZmlsZXMgZXhpc3RzLCBubyBuZWVkIHRvIHN0YXQoKSBoZXJlLgotICAgICAgICovCi0gICAgICByYyA9IGxpYnNzaDJfdXNlcmF1dGhfcHVibGlja2V5X2Zyb21maWxlX2V4KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGNvbm4tPnVzZXIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cnNhX3B1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cnNhLCBzc2hjLT5wYXNzcGhyYXNlKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotCi0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBTU0ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICBpbmZvZihkYXRhLCAiU1NIIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gZmFpbGVkOiAlc1xuIiwgZXJyX21zZyk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfUEFTU19JTklUOgotICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QQVNTV09SRCkgJiYKLSAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwYXNzd29yZCIpICE9IE5VTEwpKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1MpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfUEFTUzoKLSAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wYXNzd29yZF9leChzc2hjLT5zc2hfc2Vzc2lvbiwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnVzZXIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihjb25uLT5wYXNzd2QpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgPT0gMCkgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiSW5pdGlhbGl6ZWQgcGFzc3dvcmQgYXV0aGVudGljYXRpb25cbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9IT1NUX0lOSVQpOwotICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0hPU1RfSU5JVDoKLSAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfSE9TVCkgJiYKLSAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJob3N0YmFzZWQiKSAhPSBOVUxMKSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9IT1NUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9IT1NUOgotICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfQUdFTlRfSU5JVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfQUdFTlRfSU5JVDoKLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX0FHRU5UKQotICAgICAgICAgJiYgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInB1YmxpY2tleSIpICE9IE5VTEwpKSB7Ci0KLSAgICAgICAgLyogQ29ubmVjdCB0byB0aGUgc3NoLWFnZW50ICovCi0gICAgICAgIC8qIFRoZSBhZ2VudCBjb3VsZCBiZSBzaGFyZWQgYnkgYSBjdXJsIHRocmVhZCBpIGJlbGlldmUKLSAgICAgICAgICAgYnV0IG5vdGhpbmcgb2J2aW91cyBhcyBrZXlzIGNhbiBiZSBhZGRlZC9yZW1vdmVkIGF0IGFueSB0aW1lICovCi0gICAgICAgIGlmKCFzc2hjLT5zc2hfYWdlbnQpIHsKLSAgICAgICAgICBzc2hjLT5zc2hfYWdlbnQgPSBsaWJzc2gyX2FnZW50X2luaXQoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICAgIGlmKCFzc2hjLT5zc2hfYWdlbnQpIHsKLSAgICAgICAgICAgIGluZm9mKGRhdGEsICJDb3VsZCBub3QgY3JlYXRlIGFnZW50IG9iamVjdFxuIik7Ci0KLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9jb25uZWN0KHNzaGMtPnNzaF9hZ2VudCk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSBjb25uZWN0aW5nIHRvIGFnZW50XG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9MSVNUKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotI2VuZGlmIC8qIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkgKi8KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0FHRU5UX0xJU1Q6Ci0jaWZkZWYgSEFWRV9MSUJTU0gyX0FHRU5UX0FQSQotICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2xpc3RfaWRlbnRpdGllcyhzc2hjLT5zc2hfYWdlbnQpOwotCi0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikKLSAgICAgICAgYnJlYWs7Ci0gICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWx1cmUgcmVxdWVzdGluZyBpZGVudGl0aWVzIHRvIGFnZW50XG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOwotICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UKTsKLSAgICAgICAgc3NoYy0+c3NoYWdlbnRfcHJldl9pZGVudGl0eSA9IE5VTEw7Ci0gICAgICB9Ci0jZW5kaWYKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9BR0VOVDoKLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICAvKiBhcyBwcmV2X2lkZW50aXR5IGV2b2x2ZXMgb25seSBhZnRlciBhbiBpZGVudGl0eSB1c2VyIGF1dGggZmluaXNoZWQgd2UKLSAgICAgICAgIGNhbiBzYWZlbHkgcmVxdWVzdCBpdCBhZ2FpbiBhcyBsb25nIGFzIEVBR0FJTiBpcyByZXR1cm5lZCBoZXJlIG9yIGJ5Ci0gICAgICAgICBsaWJzc2gyX2FnZW50X3VzZXJhdXRoICovCi0gICAgICByYyA9IGxpYnNzaDJfYWdlbnRfZ2V0X2lkZW50aXR5KHNzaGMtPnNzaF9hZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnNzaGFnZW50X2lkZW50aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5KTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYocmMgPT0gMCkgewotICAgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfdXNlcmF1dGgoc3NoYy0+c3NoX2FnZW50LCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHkpOwotCi0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGlmKHJjICE9IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgICAvKiB0cmllZCBhbmQgZmFpbGVkPyBnbyB0byBuZXh0IGlkZW50aXR5ICovCi0gICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmKHJjIDwgMCkKLSAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWx1cmUgcmVxdWVzdGluZyBpZGVudGl0aWVzIHRvIGFnZW50XG4iKTsKLSAgICAgIGVsc2UgaWYocmMgPT0gMSkKLSAgICAgICAgaW5mb2YoZGF0YSwgIk5vIGlkZW50aXR5IHdvdWxkIG1hdGNoXG4iKTsKLQotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9OT05FKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJBZ2VudCBiYXNlZCBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOwotICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgfQotI2VuZGlmCi0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfS0VZX0lOSVQ6Ci0gICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX0tFWUJPQVJEKQotICAgICAgICAgJiYgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImtleWJvYXJkLWludGVyYWN0aXZlIikgIT0gTlVMTCkpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9LRVk6Ci0gICAgICAvKiBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIENvbnRpbnVlIHdpdGgga2V5Ym9hcmQtaW50ZXJhY3RpdmUgbm93LiAqLwotICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX2tleWJvYXJkX2ludGVyYWN0aXZlX2V4KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGNvbm4tPnVzZXIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2JkX2NhbGxiYWNrKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgPT0gMCkgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiSW5pdGlhbGl6ZWQga2V5Ym9hcmQgaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb25cbiIpOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfRE9ORToKLSAgICAgIGlmKCFzc2hjLT5hdXRoZWQpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGZhaWx1cmUiKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKgotICAgICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGF1dGhlbnRpY2F0ZWQgc3NoIHNlc3Npb24uCi0gICAgICAgKi8KLSAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZVxuIik7Ci0KLSAgICAgIEN1cmxfcGdyc1RpbWUoY29ubi0+ZGF0YSwgVElNRVJfQVBQQ09OTkVDVCk7IC8qIFNTSCBpcyBjb25uZWN0ZWQgKi8KLQotICAgICAgY29ubi0+c29ja2ZkID0gc29jazsKLSAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gQ1VSTF9TT0NLRVRfQkFEOwotCi0gICAgICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCA9PSBDVVJMUFJPVE9fU0ZUUCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9JTklUKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfSU5JVDoKLSAgICAgIC8qCi0gICAgICAgKiBTdGFydCB0aGUgbGlic3NoMiBzZnRwIHNlc3Npb24KLSAgICAgICAqLwotICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gbGlic3NoMl9zZnRwX2luaXQoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYoIXNzaGMtPnNmdHBfc2Vzc2lvbikgewotICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgaWYobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pID09Ci0gICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpemluZyBzZnRwIHNlc3Npb246ICVzIiwgZXJyX21zZyk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBTFBBVEgpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQUxQQVRIOgotICAgIHsKLSAgICAgIGNoYXIgdGVtcEhvbWVbUEFUSF9NQVhdOwotCi0gICAgICAvKgotICAgICAgICogR2V0IHRoZSAiaG9tZSIgZGlyZWN0b3J5Ci0gICAgICAgKi8KLSAgICAgIHJjID0gc2Z0cF9saWJzc2gyX3JlYWxwYXRoKHNzaGMtPnNmdHBfc2Vzc2lvbiwgIi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEhvbWUsIFBBVEhfTUFYLTEpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA+IDApIHsKLSAgICAgICAgLyogSXQgc2VlbXMgdGhhdCB0aGlzIHN0cmluZyBpcyBub3QgYWx3YXlzIE5VTEwgdGVybWluYXRlZCAqLwotICAgICAgICB0ZW1wSG9tZVtyY10gPSAnXDAnOwotICAgICAgICBzc2hjLT5ob21lZGlyID0gc3RyZHVwKHRlbXBIb21lKTsKLSAgICAgICAgaWYoIXNzaGMtPmhvbWVkaXIpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IHNzaGMtPmhvbWVkaXI7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLyogUmV0dXJuIHRoZSBlcnJvciB0eXBlICovCi0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGlmKGVycikKLSAgICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGVycm9yIHdhc24ndCBpbiB0aGUgU0ZUUCBsZXZlbCBidXQgZm9yIGV4YW1wbGUKLSAgICAgICAgICAgICBhIHRpbWUtb3V0IG9yIHNpbWlsYXIgKi8KLSAgICAgICAgICByZXN1bHQgPSBDVVJMRV9TU0g7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiZXJyb3IgPSAlZCBtYWtlcyBsaWJjdXJsID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICBlcnIsIChpbnQpcmVzdWx0KSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIFRoaXMgaXMgdGhlIGxhc3Qgc3RlcCBpbiB0aGUgU0ZUUCBjb25uZWN0IHBoYXNlLiBEbyBub3RlIHRoYXQgd2hpbGUKLSAgICAgICB3ZSBnZXQgdGhlIGhvbWVkaXIgaGVyZSwgd2UgZ2V0IHRoZSAid29ya2luZ3BhdGgiIGluIHRoZSBETyBhY3Rpb24KLSAgICAgICBzaW5jZSB0aGUgaG9tZWRpciB3aWxsIHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIHJlcXVlc3QgYnV0IHRoZQotICAgICAgIHdvcmtpbmcgcGF0aCB3aWxsIG5vdC4gKi8KLSAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNTSCBDT05ORUNUIHBoYXNlIGRvbmVcbiIpKTsKLSAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX0lOSVQ6Ci0KLSAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnNmdHBfc2NwLT5wYXRoKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQucXVvdGUpIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOwotICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnF1b3RlOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQucG9zdHF1b3RlKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJTZW5kaW5nIHF1b3RlIGNvbW1hbmRzXG4iKTsKLSAgICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IGRhdGEtPnNldC5wb3N0cXVvdGU7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEU6Ci0gICAgICAvKiBTZW5kIGFueSBxdW90ZSBjb21tYW5kcyAqLwotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKmNwOwotCi0gICAgICAvKgotICAgICAgICogU3VwcG9ydCBzb21lIG9mIHRoZSAiRlRQIiBjb21tYW5kcwotICAgICAgICoKLSAgICAgICAqICdzc2hjLT5xdW90ZV9pdGVtJyBpcyBhbHJlYWR5IHZlcmlmaWVkIHRvIGJlIG5vbi1OVUxMIGJlZm9yZSBpdAotICAgICAgICogc3dpdGNoZWQgdG8gdGhpcyBzdGF0ZS4KLSAgICAgICAqLwotICAgICAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKLSAgICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKLQotICAgICAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgotICAgICAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55Ci0gICAgICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKLSAgICAgICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KLQotICAgICAgaWYoY21kWzBdID09ICcqJykgewotICAgICAgICBjbWQrKzsKLSAgICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKCJwd2QiLCBjbWQpKSB7Ci0gICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KLSAgICAgICAgY2hhciAqdG1wID0gYXByaW50ZigiMjU3IFwiJXNcIiBpcyBjdXJyZW50IGRpcmVjdG9yeS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgpOwotICAgICAgICBpZighdG1wKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULCAoY2hhciAqKSJQV0RcbiIsIDQpOwotICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCB0bXAsIHN0cmxlbih0bXApKTsKLSAgICAgICAgfQotICAgICAgICAvKiB0aGlzIHNlbmRzIGFuIEZUUC1saWtlICJoZWFkZXIiIHRvIHRoZSBoZWFkZXIgY2FsbGJhY2sgc28gdGhhdCB0aGUKLSAgICAgICAgICAgY3VycmVudCBkaXJlY3RvcnkgY2FuIGJlIHJlYWQgdmVyeSBzaW1pbGFyIHRvIGhvdyBpdCBpcyByZWFkIHdoZW4KLSAgICAgICAgICAgdXNpbmcgb3JkaW5hcnkgRlRQLiAqLwotICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIHRtcCwgc3RybGVuKHRtcCkpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgewotICAgICAgICAvKgotICAgICAgICAgKiB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgY29tbWFuZCBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQotICAgICAgICAgKiBjb21tYW5kIHdpdGggYSBzcGFjZSBzbyB3ZSBjYW4gY2hlY2sgZm9yIGl0IHVuY29uZGl0aW9uYWxseQotICAgICAgICAgKi8KLSAgICAgICAgY3AgPSBzdHJjaHIoY21kLCAnICcpOwotICAgICAgICBpZihjcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBTRlRQIGNvbW1hbmQuIFN1cHBseSBwYXJhbWV0ZXIocykhIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBhbHNvLCBldmVyeSBjb21tYW5kIHRha2VzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCBzbyB3ZSBnZXQgdGhhdAotICAgICAgICAgKiBmaXJzdCBhcmd1bWVudCByaWdodCBub3cKLSAgICAgICAgICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgxLCBzc2hjLT5ob21lZGlyKTsKLSAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IEJhZCBmaXJzdCBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTRlRQIGlzIGEgYmluYXJ5IHByb3RvY29sLCBzbyB3ZSBkb24ndCBzZW5kIHRleHQgY29tbWFuZHMKLSAgICAgICAgICogdG8gdGhlIHNlcnZlci4gSW5zdGVhZCwgd2Ugc2NhbiBmb3IgY29tbWFuZHMgdXNlZCBieQotICAgICAgICAgKiBPcGVuU1NIJ3Mgc2Z0cCBwcm9ncmFtIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBsaWJzc2gyCi0gICAgICAgICAqIGZ1bmN0aW9ucy4KLSAgICAgICAgICovCi0gICAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCAiLCA2KSB8fAotICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QgIiwgNikgfHwKLSAgICAgICAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duICIsIDYpICkgewotICAgICAgICAgIC8qIGF0dHJpYnV0ZSBjaGFuZ2UgKi8KLQotICAgICAgICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGNvbnRhaW5zIHRoZSBtb2RlIHRvIHNldCAqLwotICAgICAgICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7Ci0gICAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBjaGdycC9jaG1vZC9jaG93bjogIgotICAgICAgICAgICAgICAgICAgICAiQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBtZW1zZXQoJnNzaGMtPnF1b3RlX2F0dHJzLCAwLCBzaXplb2YoTElCU1NIMl9TRlRQX0FUVFJJQlVURVMpKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibG4gIiwgMykgfHwKLSAgICAgICAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgInN5bWxpbmsgIiwgOCkpIHsKLSAgICAgICAgICAvKiBzeW1ib2xpYyBsaW5raW5nICovCi0gICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgaXMgdGhlIHNvdXJjZSAqLwotICAgICAgICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7Ci0gICAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgIlN5bnRheCBlcnJvciBpbiBsbi9zeW1saW5rOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NZTUxJTkspOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgIm1rZGlyICIsIDYpKSB7Ci0gICAgICAgICAgLyogY3JlYXRlIGRpciAqLwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX01LRElSKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJyZW5hbWUgIiwgNykpIHsKLSAgICAgICAgICAvKiByZW5hbWUgZmlsZSAqLwotICAgICAgICAgIC8qIGZpcnN0IHBhcmFtIGlzIHRoZSBzb3VyY2UgcGF0aCAqLwotICAgICAgICAgIC8qIHNlY29uZCBwYXJhbSBpcyB0aGUgZGVzdC4gcGF0aCAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIHJlbmFtZTogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9SRU5BTUUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtZGlyICIsIDYpKSB7Ci0gICAgICAgICAgLyogZGVsZXRlIGRpciAqLwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JNRElSKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybSAiLCAzKSkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1VOTElOSyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCi0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInN0YXR2ZnMgIiwgOCkpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZmFpbGYoZGF0YSwgIlVua25vd24gU0ZUUCBjb21tYW5kIik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ORVhUX1FVT1RFOgotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLQotICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IHNzaGMtPnF1b3RlX2l0ZW0tPm5leHQ7Ci0KLSAgICAgIGlmKHNzaGMtPnF1b3RlX2l0ZW0pIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NUQVQ6Ci0gICAgewotICAgICAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKLSAgICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKLQotICAgICAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgotICAgICAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55Ci0gICAgICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKLSAgICAgICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KLQotICAgICAgaWYoY21kWzBdID09ICcqJykgewotICAgICAgICBjbWQrKzsKLSAgICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIGlmKCFzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgewotICAgICAgICAvKiBTaW5jZSBjaG93biBhbmQgY2hncnAgb25seSBzZXQgb3duZXIgT1IgZ3JvdXAgYnV0IGxpYnNzaDIgd2FudHMgdG8KLSAgICAgICAgICogc2V0IHRoZW0gYm90aCBhdCBvbmNlLCB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgY3VycmVudCBvd25lcnNoaXAKLSAgICAgICAgICogZmlyc3QuICBUaGlzIHRha2VzIGFuIGV4dHJhIHByb3RvY29sIHJvdW5kIHRyaXAuCi0gICAgICAgICAqLwotICAgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2hjLT5xdW90ZV9hdHRycyk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeyAvKiBnZXQgdGhvc2UgYXR0cmlidXRlcyAqLwotICAgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gZ2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIE5vdyBzZXQgdGhlIG5ldyBhdHRyaWJ1dGVzLi4uICovCi0gICAgICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAiLCA1KSkgewotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5naWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOwotICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKLSAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaGdycCBnaWQgbm90IGEgbnVtYmVyIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKLSAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMucGVybWlzc2lvbnMgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCA4KTsKLSAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMuZmxhZ3MgPSBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUzsKLSAgICAgICAgLyogcGVybWlzc2lvbnMgYXJlIG9jdGFsICovCi0gICAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLnBlcm1pc3Npb25zID09IDAgJiYKLSAgICAgICAgICAgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pKSB7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2htb2QgcGVybWlzc2lvbnMgbm90IGEgbnVtYmVyIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duIiwgNSkpIHsKLSAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMudWlkID0gc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOwotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1VJREdJRDsKLSAgICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMudWlkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCi0gICAgICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hvd24gdWlkIG5vdCBhIG51bWJlciIpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIE5vdyBzZW5kIHRoZSBjb21wbGV0ZWQgc3RydWN0dXJlLi4uICovCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVDoKLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU0VUU1RBVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJBdHRlbXB0IHRvIHNldCBTRlRQIHN0YXRzIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1lNTElOSzoKLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N5bWxpbmtfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU1lNTElOSyk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICBmYWlsZihkYXRhLCAic3ltbGluayBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfTUtESVI6Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ta2Rpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm5ld19kaXJlY3RvcnlfcGVybXMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAibWtkaXIgY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JFTkFNRToKLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlbmFtZV9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9PVkVSV1JJVEUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfQVRPTUlDIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX05BVElWRSk7Ci0KLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJyZW5hbWUgY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JNRElSOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcm1kaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJybWRpciBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfVU5MSU5LOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfdW5saW5rX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInJtIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0jaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUzoKLSAgICB7Ci0gICAgICBMSUJTU0gyX1NGVFBfU1RBVFZGUyBzdGF0dmZzOwotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdHZmcyhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dmZzKTsKLQotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAic3RhdHZmcyBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWxzZSBpZihyYyA9PSAwKSB7Ci0gICAgICAgIGNoYXIgKnRtcCA9IGFwcmludGYoInN0YXR2ZnM6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYnNpemU6ICVsbHVcbiIgImZfZnJzaXplOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYmxvY2tzOiAlbGx1XG4iICJmX2JmcmVlOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYmF2YWlsOiAlbGx1XG4iICJmX2ZpbGVzOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfZmZyZWU6ICVsbHVcbiIgImZfZmF2YWlsOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfZnNpZDogJWxsdVxuIiAiZl9mbGFnOiAlbGx1XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfbmFtZW1heDogJWxsdVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfYnNpemUsIHN0YXR2ZnMuZl9mcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2Jsb2Nrcywgc3RhdHZmcy5mX2JmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9iYXZhaWwsIHN0YXR2ZnMuZl9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfZmZyZWUsIHN0YXR2ZnMuZl9mYXZhaWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2ZzaWQsIHN0YXR2ZnMuZl9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9uYW1lbWF4KTsKLSAgICAgICAgaWYoIXRtcCkgewotICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgIGNhc2UgU1NIX1NGVFBfR0VUSU5GTzoKLSAgICB7Ci0gICAgICBpZihkYXRhLT5zZXQuZ2V0X2ZpbGV0aW1lKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0ZJTEVUSU1FKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfRklMRVRJTUU6Ci0gICAgewotICAgICAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgYXR0cnM7Ci0KLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU1RBVCwgJmF0dHJzKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgPT0gMCkgewotICAgICAgICBkYXRhLT5pbmZvLmZpbGV0aW1lID0gYXR0cnMubXRpbWU7Ci0gICAgICB9Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTU0hfU0ZUUF9UUkFOU19JTklUOgotICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOwotICAgICAgZWxzZSB7Ci0gICAgICAgIGlmKHNmdHBfc2NwLT5wYXRoW3N0cmxlbihzZnRwX3NjcC0+cGF0aCktMV0gPT0gJy8nKQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9VUExPQURfSU5JVDoKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgLyoKLSAgICAgICAqIE5PVEUhISEgIGxpYnNzaDIgcmVxdWlyZXMgdGhhdCB0aGUgZGVzdGluYXRpb24gcGF0aCBpcyBhIGZ1bGwgcGF0aAotICAgICAgICogICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSBhbmQgbmFtZSBPUiBlbmRzIGluIGEgIi8iCi0gICAgICAgKiAgICAgICAgICBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHdpbGwgYmUgbmFtZWQgdGhlCi0gICAgICAgKiAgICAgICAgICBzYW1lIG5hbWUgYXMgdGhlIGxhc3QgZGlyZWN0b3J5IGluIHRoZSBwYXRoLgotICAgICAgICovCi0KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICE9IDApIHsKLSAgICAgICAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgYXR0cnM7Ci0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgewotICAgICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOwotICAgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYocmMpIHsKLSAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjdXJsX29mZl90IHNpemUgPSBhdHRycy5maWxlc2l6ZTsKLSAgICAgICAgICAgIGlmKHNpemUgPCAwKSB7Ci0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgc2l6ZSk7Ci0gICAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBhdHRycy5maWxlc2l6ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9hcHBlbmQpCi0gICAgICAgIC8qIFRyeSB0byBvcGVuIGZvciBhcHBlbmQsIGJ1dCBjcmVhdGUgaWYgbm9uZXhpc3RpbmcgKi8KLSAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9DUkVBVHxMSUJTU0gyX0ZYRl9BUFBFTkQ7Ci0gICAgICBlbHNlIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkKLSAgICAgICAgLyogSWYgd2UgaGF2ZSByZXN0YXJ0IHBvc2l0aW9uIHRoZW4gb3BlbiBmb3IgYXBwZW5kICovCi0gICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQVBQRU5EOwotICAgICAgZWxzZQotICAgICAgICAvKiBDbGVhciBmaWxlIGJlZm9yZSB3cml0aW5nIChub3JtYWwgYmVoYXZpb3VyKSAqLwotICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0NSRUFUfExJQlNTSDJfRlhGX1RSVU5DOwotCi0gICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9Ci0gICAgICAgIGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKLQotICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pOwotCi0gICAgICAgIGlmKExJQlNTSDJfRVJST1JfRUFHQUlOID09IHJjKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmKExJQlNTSDJfRVJST1JfU0ZUUF9QUk9UT0NPTCA9PSByYykKLSAgICAgICAgICAvKiBvbmx5IHdoZW4gdGhlcmUgd2FzIGFuIFNGVFAgcHJvdG9jb2wgZXJyb3IgY2FuIHdlIGV4dHJhY3QKLSAgICAgICAgICAgICB0aGUgc2Z0cCBlcnJvciEgKi8KLSAgICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZXJyID0gLTE7IC8qIG5vdCBhbiBzZnRwIGVycm9yIGF0IGFsbCAqLwotCi0gICAgICAgIGlmKHNzaGMtPnNlY29uZENyZWF0ZURpcnMpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGVycj49IExJQlNTSDJfRlhfT0s/Ci0gICAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTpDVVJMRV9TU0g7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIkNyZWF0aW5nIHRoZSBkaXIvZmlsZSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoKChlcnIgPT0gTElCU1NIMl9GWF9OT19TVUNIX0ZJTEUpIHx8Ci0gICAgICAgICAgICAoZXJyID09IExJQlNTSDJfRlhfRkFJTFVSRSkgfHwKLSAgICAgICAgICAgIChlcnIgPT0gTElCU1NIMl9GWF9OT19TVUNIX1BBVEgpKSAmJgotICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9jcmVhdGVfbWlzc2luZ19kaXJzICYmCi0gICAgICAgICAgICAoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSA+IDEpKSkgewotICAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgdGhlIHBhdGggcmVtb3RlbHkgKi8KLSAgICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAxOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGVycj49IExJQlNTSDJfRlhfT0s/Ci0gICAgICAgICAgc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik6Q1VSTEVfU1NIOwotICAgICAgICBpZighc3NoYy0+YWN0dWFsY29kZSkgewotICAgICAgICAgIC8qIFNvbWV0aW1lcywgZm9yIHNvbWUgcmVhc29uIGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKCkgcmV0dXJucwotICAgICAgICAgICAgIHplcm8gZXZlbiB0aG91Z2ggbGlic3NoMl9zZnRwX29wZW4oKSBmYWlsZWQgcHJldmlvdXNseSEgV2UgbmVlZAotICAgICAgICAgICAgIHRvIHdvcmsgYXJvdW5kIHRoYXQhICovCi0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1NTSDsKLSAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgfQotICAgICAgICBmYWlsZihkYXRhLCAiVXBsb2FkIGZhaWxlZDogJXMgKCVkLyVkKSIsCi0gICAgICAgICAgICAgIGVycj49IExJQlNTSDJfRlhfT0s/c2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycik6InNzaCBlcnJvciIsCi0gICAgICAgICAgICAgIGVyciwgcmMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlc3RhcnQgcG9pbnQgdGhlbiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGNvcnJlY3QKLSAgICAgICAgIHBvc2l0aW9uLiAqLwotICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKSB7Ci0gICAgICAgIC8qIExldCdzIHJlYWQgb2ZmIHRoZSBwcm9wZXIgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGlucHV0LiAqLwotICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKLSAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKLSAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKLSAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKLSAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7Ci0KLSAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KLSAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQotICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KLSAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgotICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOwotCi0gICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkOwotICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7Ci0gICAgICAgICAgICBhY3R1YWxseXJlYWQgPSBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluKTsKLSAgICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLQotICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKLSAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgewotICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCi0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7Ci0gICAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKLSAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKLSAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgU0ZUUF9TRUVLKHNzaGMtPnNmdHBfaGFuZGxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICB9Ci0gICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgewotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7Ci0gICAgICB9Ci0gICAgICAvKiB1cGxvYWQgZGF0YSAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7Ci0KLSAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLwotICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7Ci0KLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAotICAgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KLSAgICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKLQotICAgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHNmdHAgc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgICAgLyogc2luY2Ugd2UgZG9uJ3QgcmVhbGx5IHdhaXQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdGhlCi0gICAgICAgICAgIHN0YXRlIG1hY2hpbmUgdG8gbW92ZSBvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIHNldCBhIHZlcnkgc2hvcnQKLSAgICAgICAgICAgdGltZW91dCBoZXJlICovCi0gICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKLQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQ6Ci0gICAgICBpZihzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkgewotICAgICAgICBzc2hjLT5zbGFzaF9wb3MgPSBzZnRwX3NjcC0+cGF0aCArIDE7IC8qIGlnbm9yZSB0aGUgbGVhZGluZyAnLycgKi8KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSUzoKLSAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHN0cmNocihzc2hjLT5zbGFzaF9wb3MsICcvJyk7Ci0gICAgICBpZihzc2hjLT5zbGFzaF9wb3MpIHsKLSAgICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9IDA7Ci0KLSAgICAgICAgaW5mb2YoZGF0YSwgIkNyZWF0aW5nIGRpcmVjdG9yeSAnJXMnXG4iLCBzZnRwX3NjcC0+cGF0aCk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVI6Ci0gICAgICAvKiAnbW9kZScgLSBwYXJhbWV0ZXIgaXMgcHJlbGltaW5hcnkgLSBkZWZhdWx0IHRvIDA2NDQgKi8KLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAnLyc7Ci0gICAgICArK3NzaGMtPnNsYXNoX3BvczsKLSAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAvKgotICAgICAgICAgKiBBYm9ydCBpZiBmYWlsdXJlIHdhc24ndCB0aGF0IHRoZSBkaXIgYWxyZWFkeSBleGlzdHMgb3IgdGhlCi0gICAgICAgICAqIHBlcm1pc3Npb24gd2FzIGRlbmllZCAoY3JlYXRpb24gbWlnaHQgc3VjY2VlZCBmdXJ0aGVyIGRvd24gdGhlCi0gICAgICAgICAqIHBhdGgpIC0gcmV0cnkgb24gdW5zcGVjaWZpYyBGQUlMVVJFIGFsc28KLSAgICAgICAgICovCi0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGlmKChlcnIgIT0gTElCU1NIMl9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTKSAmJgotICAgICAgICAgICAoZXJyICE9IExJQlNTSDJfRlhfRkFJTFVSRSkgJiYKLSAgICAgICAgICAgKGVyciAhPSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEKSkgewotICAgICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0P3Jlc3VsdDpDVVJMRV9TU0g7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0lOSVQ6Ci0gICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOwotICAgICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBUaGlzIGlzIGEgZGlyZWN0b3J5IHRoYXQgd2UgYXJlIHRyeWluZyB0byBnZXQsIHNvIHByb2R1Y2UgYSBkaXJlY3RvcnkKLSAgICAgICAqIGxpc3RpbmcKLSAgICAgICAqLwotICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIExJQlNTSDJfU0ZUUF9PUEVORElSKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgewotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgZm9yIHJlYWRpbmc6ICVzIiwKLSAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0P3Jlc3VsdDpDVVJMRV9TU0g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IG1hbGxvYyhQQVRIX01BWCArIDEpOwotICAgICAgaWYoIXNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IG1hbGxvYyhQQVRIX01BWCArIDEpOwotICAgICAgaWYoIXNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUjoKLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlYWRkaXJfZXgoc3NoYy0+c2Z0cF9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2hjLT5yZWFkZGlyX2F0dHJzKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgPiAwKSB7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuID0gKHNpemVfdCkgcmM7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWVbc3NoYy0+cmVhZGRpcl9sZW5dID0gJ1wwJzsKLQotICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSkgewotICAgICAgICAgIGNoYXIgKnRtcExpbmU7Ci0KLSAgICAgICAgICB0bXBMaW5lID0gYXByaW50ZigiJXNcbiIsIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICAgIGlmKHRtcExpbmUgPT0gTlVMTCkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBMaW5lLCBzc2hjLT5yZWFkZGlyX2xlbiArIDEpOwotICAgICAgICAgIGZyZWUodG1wTGluZSk7Ci0KLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBzaW5jZSB0aGlzIGNvdW50cyB3aGF0IHdlIHNlbmQgdG8gdGhlIGNsaWVudCwgd2UgaW5jbHVkZSB0aGUKLSAgICAgICAgICAgICBuZXdsaW5lIGluIHRoaXMgY291bnRlciAqLwotICAgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9sZW4gKyAxOwotCi0gICAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULCBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiA9IDgwICsgc3NoYy0+cmVhZGRpcl9jdXJyTGVuOwotICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IGNhbGxvYyhzc2hjLT5yZWFkZGlyX3RvdGFsTGVuLCAxKTsKLSAgICAgICAgICBpZighc3NoYy0+cmVhZGRpcl9saW5lKSB7Ci0gICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1lbWNweShzc2hjLT5yZWFkZGlyX2xpbmUsIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAotICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOwotICAgICAgICAgIGlmKChzc2hjLT5yZWFkZGlyX2F0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfUEVSTUlTU0lPTlMpICYmCi0gICAgICAgICAgICAgKChzc2hjLT5yZWFkZGlyX2F0dHJzLnBlcm1pc3Npb25zICYgTElCU1NIMl9TRlRQX1NfSUZNVCkgPT0KLSAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NfSUZMTkspKSB7Ci0gICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmtQYXRoID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7Ci0gICAgICAgICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwgUEFUSF9NQVgsICIlcyVzIiwgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0xJTkspOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihyYyA9PSAwKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYocmMgPCAwKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0P3Jlc3VsdDpDVVJMRV9TU0g7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMgOjogJWQiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSwKLSAgICAgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9MSU5LOgotICAgICAgcmMgPQotICAgICAgICBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cmVhZGRpcl9saW5rUGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX01BWCwgTElCU1NIMl9TRlRQX1JFQURMSU5LKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAoc2l6ZV90KSByYzsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0KLSAgICAgIC8qIGdldCByb29tIGZvciB0aGUgZmlsZW5hbWUgYW5kIGV4dHJhIG91dHB1dCAqLwotICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiArPSA0ICsgc3NoYy0+cmVhZGRpcl9sZW47Ci0gICAgICBuZXdfcmVhZGRpcl9saW5lID0gQ3VybF9zYWZlcmVhbGxvYyhzc2hjLT5yZWFkZGlyX2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuKTsKLSAgICAgIGlmKCFuZXdfcmVhZGRpcl9saW5lKSB7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IG5ld19yZWFkZGlyX2xpbmU7Ci0KLSAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiArPSBtc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0+ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTToKLSAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiArPSBtc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLCAiXG4iKTsKLSAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOwotCi0gICAgICBpZighcmVzdWx0KSB7Ci0KLSAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgewotICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsIHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBzc2hjLT5yZWFkZGlyX2N1cnJMZW47Ci0gICAgICB9Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGluZSk7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0RPTkU6Ci0gICAgICBpZihsaWJzc2gyX3NmdHBfY2xvc2VkaXIoc3NoYy0+c2Z0cF9oYW5kbGUpID09Ci0gICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0gTlVMTDsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLQotICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKLSAgICAgIC8qCi0gICAgICAgKiBXb3JrIG9uIGdldHRpbmcgdGhlIHNwZWNpZmllZCBmaWxlCi0gICAgICAgKi8KLSAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0KLSAgICAgICAgbGlic3NoMl9zZnRwX29wZW5fZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0ZYRl9SRUFELCBkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9PUEVORklMRSk7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9oYW5kbGUpIHsKLSAgICAgICAgaWYobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pID09Ci0gICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gcmVtb3RlIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiwKLSAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0P3Jlc3VsdDpDVVJMRV9TU0g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfU1RBVDoKLSAgICB7Ci0gICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKLQotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyB8fAotICAgICAgICAgIShhdHRycy5mbGFncyAmIExJQlNTSDJfU0ZUUF9BVFRSX1NJWkUpIHx8Ci0gICAgICAgICAoYXR0cnMuZmlsZXNpemUgPT0gMCkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogbGlic3NoMl9zZnRwX29wZW4oKSBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBzbyBtYXliZSB0aGUgc2VydmVyCi0gICAgICAgICAqIGp1c3QgZG9lc24ndCBzdXBwb3J0IHN0YXQoKQotICAgICAgICAgKiBPUiB0aGUgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgZmlsZSBzaXplIHdpdGggYSBzdGF0KCkKLSAgICAgICAgICogT1IgZmlsZSBzaXplIGlzIDAKLSAgICAgICAgICovCi0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gLTE7Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC0xOwotICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOwotCi0gICAgICAgIGlmKHNpemUgPCAwKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgfQotICAgICAgICBpZihjb25uLT5kYXRhLT5zdGF0ZS51c2VfcmFuZ2UpIHsKLSAgICAgICAgICBjdXJsX29mZl90IGZyb20sIHRvOwotICAgICAgICAgIGNoYXIgKnB0cjsKLSAgICAgICAgICBjaGFyICpwdHIyOwotICAgICAgICAgIENVUkxvZmZ0IHRvX3Q7Ci0gICAgICAgICAgQ1VSTG9mZnQgZnJvbV90OwotCi0gICAgICAgICAgZnJvbV90ID0gY3VybHhfc3RydG9vZmZ0KGNvbm4tPmRhdGEtPnN0YXRlLnJhbmdlLCAmcHRyLCAwLCAmZnJvbSk7Ci0gICAgICAgICAgaWYoZnJvbV90ID09IENVUkxfT0ZGVF9GTE9XKQotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOwotICAgICAgICAgIHdoaWxlKCpwdHIgJiYgKElTU1BBQ0UoKnB0cikgfHwgKCpwdHIgPT0gJy0nKSkpCi0gICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICB0b190ID0gY3VybHhfc3RydG9vZmZ0KHB0ciwgJnB0cjIsIDAsICZ0byk7Ci0gICAgICAgICAgaWYodG9fdCA9PSBDVVJMX09GRlRfRkxPVykKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKLSAgICAgICAgICBpZigodG9fdCA9PSBDVVJMX09GRlRfSU5WQUwpIC8qIG5vICJ0byIgdmFsdWUgZ2l2ZW4gKi8KLSAgICAgICAgICAgICB8fCAodG8gPj0gc2l6ZSkpIHsKLSAgICAgICAgICAgIHRvID0gc2l6ZSAtIDE7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKGZyb21fdCkgewotICAgICAgICAgICAgLyogZnJvbSBpcyByZWxhdGl2ZSB0byBlbmQgb2YgZmlsZSAqLwotICAgICAgICAgICAgZnJvbSA9IHNpemUgLSB0bzsKLSAgICAgICAgICAgIHRvID0gc2l6ZSAtIDE7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKGZyb20gPiBzaXplKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIKLSAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBmcm9tLCBhdHRycy5maWxlc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbSA+IHRvKSB7Ci0gICAgICAgICAgICBmcm9tID0gdG87Ci0gICAgICAgICAgICBzaXplID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplID0gdG8gLSBmcm9tICsgMTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBTRlRQX1NFRUsoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2hhbmRsZSwgZnJvbSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSBzaXplOwotICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgc2l6ZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFdlIGNhbiByZXN1bWUgaWYgd2UgY2FuIHNlZWsgdG8gdGhlIHJlc3VtZSBwb3NpdGlvbiAqLwotICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7Ci0gICAgICAgICAgLyogV2UncmUgc3VwcG9zZWQgdG8gZG93bmxvYWQgdGhlIGxhc3QgYWJzKGZyb20pIGJ5dGVzICovCi0gICAgICAgICAgaWYoKGN1cmxfb2ZmX3QpYXR0cnMuZmlsZXNpemUgPCAtZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCi0gICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgYXR0cnMuZmlsZXNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIGRvd25sb2FkIGZyb20gd2hlcmU/ICovCi0gICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKz0gYXR0cnMuZmlsZXNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaWYoKGN1cmxfb2ZmX3QpYXR0cnMuZmlsZXNpemUgPCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAotICAgICAgICAgICAgICAgICAgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAotICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIGF0dHJzLmZpbGVzaXplKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBEb2VzIGEgY29tcGxldGVkIGZpbGUgbmVlZCB0byBiZSBzZWVrZWQgYW5kIHN0YXJ0ZWQgb3IgY2xvc2VkID8gKi8KLSAgICAgICAgLyogTm93IHN0b3JlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgYXJlIGV4cGVjdGVkIHRvIGRvd25sb2FkICovCi0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKLSAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycy5maWxlc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgICAgU0ZUUF9TRUVLKHNzaGMtPnNmdHBfaGFuZGxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogU2V0dXAgdGhlIGFjdHVhbCBkb3dubG9hZCAqLwotICAgIGlmKGRhdGEtPnJlcS5zaXplID09IDApIHsKLSAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOwotICAgICAgaW5mb2YoZGF0YSwgIkZpbGUgYWxyZWFkeSBjb21wbGV0ZWx5IGRvd25sb2FkZWRcbiIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgLTEpOwotCi0gICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7Ci0KLSAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3JlY2VpdmluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyOyB0aGUgY2xvc2Ugc3RhdGUgc2hvdWxkIGJlIGVudGVyZWQKLSAgICAgICAgIGF0IHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnMgKi8KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfQ0xPU0U6Ci0gICAgICBpZihzc2hjLT5zZnRwX2hhbmRsZSkgewotICAgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2hhbmRsZSk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gY2xvc2UgbGlic3NoMiBmaWxlOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgQ3VybF9zYWZlZnJlZShzZnRwX3NjcC0+cGF0aCk7Ci0KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0ZUUCBET05FIGRvbmVcbiIpKTsKLQotICAgICAgLyogQ2hlY2sgaWYgbmV4dHN0YXRlIGlzIHNldCBhbmQgbW92ZSAubmV4dHN0YXRlIGNvdWxkIGJlIFBPU1RRVU9URV9JTklUCi0gICAgICAgICBBZnRlciBuZXh0c3RhdGUgaXMgZXhlY3V0ZWQsIHRoZSBjb250cm9sIHNob3VsZCBjb21lIGJhY2sgdG8KLSAgICAgICAgIFNTSF9TRlRQX0NMT1NFIHRvIHBhc3MgdGhlIGNvcnJlY3QgcmVzdWx0IGJhY2sgICovCi0gICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFICYmCi0gICAgICAgICBzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX1NGVFBfQ0xPU0UpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgc3NoYy0+bmV4dHN0YXRlKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfQ0xPU0U7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1NIVVRET1dOOgotICAgICAgLyogZHVyaW5nIHRpbWVzIHdlIGdldCBoZXJlIGR1ZSB0byBhIGJyb2tlbiB0cmFuc2ZlciBhbmQgdGhlbiB0aGUKLSAgICAgICAgIHNmdHBfaGFuZGxlIG1pZ2h0IG5vdCBoYXZlIGJlZW4gdGFrZW4gZG93biBzbyBtYWtlIHN1cmUgdGhhdCBpcyBkb25lCi0gICAgICAgICBiZWZvcmUgd2UgcHJvY2VlZCAqLwotCi0gICAgICBpZihzc2hjLT5zZnRwX2hhbmRsZSkgewotICAgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2hhbmRsZSk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sICZlcnJfbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gY2xvc2UgbGlic3NoMiBmaWxlOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGlmKHNzaGMtPnNmdHBfc2Vzc2lvbikgewotICAgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zaHV0ZG93bihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gc3RvcCBsaWJzc2gyIHNmdHAgc3Vic3lzdGVtXG4iKTsKLSAgICAgICAgfQotICAgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBOVUxMOwotICAgICAgfQotCi0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOwotICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfVFJBTlNfSU5JVDoKLSAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnNmdHBfc2NwLT5wYXRoKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKSB7Ci0gICAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPCAwKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlNDUCByZXF1aXJlcyBhIGtub3duIGZpbGUgc2l6ZSBmb3IgdXBsb2FkIik7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1VQTE9BRF9GQUlMRUQ7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfVVBMT0FEX0lOSVQpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9XTkxPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9VUExPQURfSU5JVDoKLSAgICAgIC8qCi0gICAgICAgKiBsaWJzc2gyIHJlcXVpcmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIHBhdGggaXMgYSBmdWxsIHBhdGggdGhhdAotICAgICAgICogaW5jbHVkZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUgYW5kIG5hbWUgT1IgZW5kcyBpbiBhICIvIiAuICBJZiB0aGlzIGlzCi0gICAgICAgKiBub3QgZG9uZSB0aGUgZGVzdGluYXRpb24gZmlsZSB3aWxsIGJlIG5hbWVkIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGxhc3QKLSAgICAgICAqIGRpcmVjdG9yeSBpbiB0aGUgcGF0aC4KLSAgICAgICAqLwotICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPQotICAgICAgICBTQ1BfU0VORChzc2hjLT5zc2hfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKLSAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7Ci0gICAgICBpZighc3NoYy0+c3NoX2NoYW5uZWwpIHsKLSAgICAgICAgaW50IHNzaF9lcnI7Ci0gICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotCi0gICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQotICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzc2hfZXJyID0gKGludCkobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCkpOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaF9lcnIpOwotICAgICAgICAvKiBNYXAgZ2VuZXJpYyBlcnJvcnMgdG8gdXBsb2FkIGZhaWxlZCAqLwotICAgICAgICBpZihzc2hjLT5hY3R1YWxjb2RlID09IENVUkxFX1NTSCB8fAotICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID09IENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORCkKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHVwbG9hZCBkYXRhICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKLQotICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKLQotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0Ci0gICAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLwotICAgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOwotCi0gICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgc2NwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLwotICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOwotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0RPV05MT0FEX0lOSVQ6Ci0gICAgewotICAgICAgY3VybF9vZmZfdCBieXRlY291bnQ7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBXZSBtdXN0IGNoZWNrIHRoZSByZW1vdGUgZmlsZTsgaWYgaXQgaXMgYSBkaXJlY3Rvcnkgbm8gdmFsdWVzIHdpbGwKLSAgICAgICAqIGJlIHNldCBpbiBzYgotICAgICAgICovCi0KLSAgICAgIC8qCi0gICAgICAgKiBJZiBzdXBwb3J0IGZvciA+MkdCIGZpbGVzIGV4aXN0cywgdXNlIGl0LgotICAgICAgICovCi0KLSAgICAgIC8qIGdldCBhIGZyZXNoIG5ldyBjaGFubmVsIGZyb20gdGhlIHNzaCBsYXllciAqLwotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPCAweDAxMDcwMAotICAgICAgc3RydWN0IHN0YXQgc2I7Ci0gICAgICBtZW1zZXQoJnNiLCAwLCBzaXplb2Yoc3RydWN0IHN0YXQpKTsKLSAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0gbGlic3NoMl9zY3BfcmVjdihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCwgJnNiKTsKLSNlbHNlCi0gICAgICBsaWJzc2gyX3N0cnVjdF9zdGF0IHNiOwotICAgICAgbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKGxpYnNzaDJfc3RydWN0X3N0YXQpKTsKLSAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0gbGlic3NoMl9zY3BfcmVjdjIoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoLCAmc2IpOwotI2VuZGlmCi0KLSAgICAgIGlmKCFzc2hjLT5zc2hfY2hhbm5lbCkgewotICAgICAgICBpbnQgc3NoX2VycjsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0KLSAgICAgICAgaWYobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pID09Ci0gICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0KLSAgICAgICAgc3NoX2VyciA9IChpbnQpKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRShzc2hfZXJyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGRvd25sb2FkIGRhdGEgKi8KLSAgICAgIGJ5dGVjb3VudCA9IChjdXJsX29mZl90KXNiLnN0X3NpemU7Ci0gICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSAgKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGJ5dGVjb3VudCwgRkFMU0UsIC0xKTsKLQotICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKLQotICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLwotICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOwotCi0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0RPTkU6Ci0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1NFTkRfRU9GKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfU0VORF9FT0Y6Ci0gICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgewotICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF9zZW5kX2VvZihzc2hjLT5zc2hfY2hhbm5lbCk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMpIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBzZW5kIGxpYnNzaDIgY2hhbm5lbCBFT0Y6ICVkICVzXG4iLAotICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9XQUlUX0VPRik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9XQUlUX0VPRjoKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3dhaXRfZW9mKHNzaGMtPnNzaF9jaGFubmVsKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYykgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGdldCBjaGFubmVsIEVPRjogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9XQUlUX0NMT1NFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1dBSVRfQ0xPU0U6Ci0gICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgewotICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF93YWl0X2Nsb3NlZChzc2hjLT5zc2hfY2hhbm5lbCk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMpIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkNoYW5uZWwgZmFpbGVkIHRvIGNsb3NlOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9DSEFOTkVMX0ZSRUU6Ci0gICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgewotICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF9mcmVlKHNzaGMtPnNzaF9jaGFubmVsKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBmcmVlIGxpYnNzaDIgc2NwIHN1YnN5c3RlbTogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0NQIERPTkUgcGhhc2UgY29tcGxldGVcbiIpKTsKLSNpZiAwIC8qIFBSRVYgKi8KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotI2VuZGlmCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1Q6Ci0gICAgICAvKiBkdXJpbmcgd2VpcmQgdGltZXMgd2hlbiB3ZSd2ZSBiZWVuIHByZW1hdHVyZWx5IGFib3J0ZWQsIHRoZSBjaGFubmVsCi0gICAgICAgICBpcyBzdGlsbCBhbGl2ZSB3aGVuIHdlIHJlYWNoIHRoaXMgc3RhdGUgYW5kIHdlIE1VU1Qga2lsbCB0aGUgY2hhbm5lbAotICAgICAgICAgcHJvcGVybHkgZmlyc3QgKi8KLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX2ZyZWUoc3NoYy0+c3NoX2NoYW5uZWwpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzY3Agc3Vic3lzdGVtOiAlZCAlc1xuIiwKLSAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBpZihzc2hjLT5zc2hfc2Vzc2lvbikgewotICAgICAgICByYyA9IGxpYnNzaDJfc2Vzc2lvbl9kaXNjb25uZWN0KHNzaGMtPnNzaF9zZXNzaW9uLCAiU2h1dGRvd24iKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBkaXNjb25uZWN0IGxpYnNzaDIgc2Vzc2lvbjogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NFU1NJT05fRlJFRToKLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQotICAgICAgaWYoc3NoYy0+a2gpIHsKLSAgICAgICAgbGlic3NoMl9rbm93bmhvc3RfZnJlZShzc2hjLT5raCk7Ci0gICAgICAgIHNzaGMtPmtoID0gTlVMTDsKLSAgICAgIH0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0FHRU5UX0FQSQotICAgICAgaWYoc3NoYy0+c3NoX2FnZW50KSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9kaXNjb25uZWN0KHNzaGMtPnNzaF9hZ2VudCk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tIGxpYnNzaDIgYWdlbnQ6ICVkICVzXG4iLAotICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKLSAgICAgICAgfQotICAgICAgICBsaWJzc2gyX2FnZW50X2ZyZWUoc3NoYy0+c3NoX2FnZW50KTsKLSAgICAgICAgc3NoYy0+c3NoX2FnZW50ID0gTlVMTDsKLQotICAgICAgICAvKiBOQjogdGhlcmUgaXMgbm8gbmVlZCB0byBmcmVlIGlkZW50aXRpZXMsIHRoZXkgYXJlIHBhcnQgb2YgaW50ZXJuYWwKLSAgICAgICAgICAgYWdlbnQgc3R1ZmYgKi8KLSAgICAgICAgc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHkgPSBOVUxMOwotICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gTlVMTDsKLSAgICAgIH0KLSNlbmRpZgotCi0gICAgICBpZihzc2hjLT5zc2hfc2Vzc2lvbikgewotICAgICAgICByYyA9IGxpYnNzaDJfc2Vzc2lvbl9mcmVlKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBmcmVlIGxpYnNzaDIgc2Vzc2lvbjogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKLSAgICAgICAgfQotICAgICAgICBzc2hjLT5zc2hfc2Vzc2lvbiA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdvcnN0LWNhc2Ugc2NlbmFyaW8gY2xlYW51cCAqLwotCi0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKTsKLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9jaGFubmVsID09IE5VTEwpOwotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2Z0cF9zZXNzaW9uID09IE5VTEwpOwotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2Z0cF9oYW5kbGUgPT0gTlVMTCk7Ci0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPmtoID09IE5VTEwpOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0FHRU5UX0FQSQotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX2FnZW50ID09IE5VTEwpOwotI2VuZGlmCi0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0KLSAgICAgIC8qIHRoZSBjb2RlIHdlIGFyZSBhYm91dCB0byByZXR1cm4gKi8KLSAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0KLSAgICAgIG1lbXNldChzc2hjLCAwLCBzaXplb2Yoc3RydWN0IHNzaF9jb25uKSk7Ci0KLSAgICAgIGNvbm5jbG9zZShjb25uLCAiU1NIIHNlc3Npb24gZnJlZSIpOwotICAgICAgc3NoYy0+c3RhdGUgPSBTU0hfU0VTU0lPTl9GUkVFOyAvKiBjdXJyZW50ICovCi0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1FVSVQ6Ci0gICAgICAvKiBmYWxsdGhyb3VnaCwganVzdCBzdG9wISAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBpbnRlcm5hbCBlcnJvciAqLwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gIH0gd2hpbGUoIXJjICYmIChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkpOwotCi0gIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgLyogd2Ugd291bGQgYmxvY2ssIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZSByZWFkeSAoaW4gdGhlCi0gICAgICAgcmlnaHQgZGlyZWN0aW9uIHRvbykhICovCi0gICAgKmJsb2NrID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykgdG8gd2FpdCBmb3IgYW5kCi0gICBmb3Igd2hhdCBhY3Rpb25zIGluIHRoZSBET19ET05FLCBQRVJGT1JNIGFuZCBXQUlUUEVSRk9STSBzdGF0ZXMgKi8KLXN0YXRpYyBpbnQgc3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0jaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCi0gIGludCBiaXRtYXAgPSBHRVRTT0NLX0JMQU5LOwotICAodm9pZCludW1zb2NrczsKLQotICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0KLSAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKLSAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7Ci0KLSAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKLSAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOwotCi0gIHJldHVybiBiaXRtYXA7Ci0jZWxzZQotICAvKiBpZiB3ZSBkb24ndCBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKQotICAgICBmdW5jdGlvbiBldmVuIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCi0gIHJldHVybiBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKLSNlbmRpZgotfQotCi0vKiBHZW5lcmljIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykKLSAgIHRvIHdhaXQgZm9yIGFuZCBmb3Igd2hhdCBhY3Rpb25zIGR1cmluZyB0aGUgRE9JTkcgYW5kIFBST1RPQ09OTkVDVCBzdGF0ZXMqLwotc3RhdGljIGludCBzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcyBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0jaWZuZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0JMT0NLX0RJUkVDVElPTgotICAodm9pZCljb25uOwotICAodm9pZClzb2NrOwotICAodm9pZCludW1zb2NrczsKLSAgLyogaWYgd2UgZG9uJ3Qga25vdyBhbnkgZGlyZWN0aW9uIHdlIGNhbiBqdXN0IHBsYXkgYWxvbmcgYXMgd2UgdXNlZCB0byBhbmQKLSAgICAgbm90IHByb3ZpZGUgYW55IHNlbnNpYmxlIGluZm8gKi8KLSAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0jZWxzZQotICAvKiBpZiB3ZSBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKSBmdW5jdGlvbiBldmVuCi0gICAgIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCi0gIHJldHVybiBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCi0vKgotICogV2hlbiBvbmUgb2YgdGhlIGxpYnNzaDIgZnVuY3Rpb25zIGhhcyByZXR1cm5lZCBMSUJTU0gyX0VSUk9SX0VBR0FJTiB0aGlzCi0gKiBmdW5jdGlvbiBpcyB1c2VkIHRvIGZpZ3VyZSBvdXQgaW4gd2hhdCBkaXJlY3Rpb24gYW5kIHN0b3JlcyB0aGlzIGluZm8gc28KLSAqIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuIE1ha2Ugc3VyZSB0byBjYWxsIHRoaXMKLSAqIGZ1bmN0aW9uIGluIGFsbCBjYXNlcyBzbyB0aGF0IHdoZW4gaXQgX2RvZXNuJ3RfIHJldHVybiBFQUdBSU4gd2UgY2FuCi0gKiByZXN0b3JlIHRoZSBkZWZhdWx0IHdhaXQgYml0cy4KLSAqLwotc3RhdGljIHZvaWQgc3NoX2Jsb2NrMndhaXRmb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGJsb2NrKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgaW50IGRpciA9IDA7Ci0gIGlmKGJsb2NrKSB7Ci0gICAgZGlyID0gbGlic3NoMl9zZXNzaW9uX2Jsb2NrX2RpcmVjdGlvbnMoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgIGlmKGRpcikgewotICAgICAgLyogdHJhbnNsYXRlIHRoZSBsaWJzc2gyIGRlZmluZSBiaXRzIGludG8gb3VyIG93biBiaXQgZGVmaW5lcyAqLwotICAgICAgY29ubi0+d2FpdGZvciA9ICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19JTkJPVU5EKT9LRUVQX1JFQ1Y6MCkgfAotICAgICAgICAoKGRpciZMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQpP0tFRVBfU0VORDowKTsKLSAgICB9Ci0gIH0KLSAgaWYoIWRpcikKLSAgICAvKiBJdCBkaWRuJ3QgYmxvY2sgb3IgbGlic3NoMiBkaWRuJ3QgcmV2ZWFsIGluIHdoaWNoIGRpcmVjdGlvbiwgcHV0IGJhY2sKLSAgICAgICB0aGUgb3JpZ2luYWwgc2V0ICovCi0gICAgY29ubi0+d2FpdGZvciA9IHNzaGMtPm9yaWdfd2FpdGZvcjsKLX0KLSNlbHNlCi0gIC8qIG5vIGxpYnNzaDIgZGlyZWN0aW9uYWwgc3VwcG9ydCBzbyB3ZSBzaW1wbHkgZG9uJ3Qga25vdyAqLwotI2RlZmluZSBzc2hfYmxvY2syd2FpdGZvcih4LHkpIEN1cmxfbm9wX3N0bXQKLSNlbmRpZgotCi0vKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLwotc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIGJvb2wgYmxvY2s7IC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCi0gICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCi0gIGRvIHsKLSAgICByZXN1bHQgPSBzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOwotICAgICpkb25lID0gKHNzaGMtPnN0YXRlID09IFNTSF9TVE9QKSA/IFRSVUUgOiBGQUxTRTsKLSAgICAvKiBpZiB0aGVyZSdzIG5vIGVycm9yLCBpdCBpc24ndCBkb25lIGFuZCBpdCBkaWRuJ3QgRVdPVUxEQkxPQ0ssIHRoZW4KLSAgICAgICB0cnkgYWdhaW4gKi8KLSAgfSB3aGlsZSghcmVzdWx0ICYmICEqZG9uZSAmJiAhYmxvY2spOwotICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCBibG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIENVUkxjb2RlIHNzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotCi0gIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgewotICAgIGJvb2wgYmxvY2s7Ci0gICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKLSAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKLQotICAgIHJlc3VsdCA9IHNzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgYnJlYWs7Ci0KLSAgICBpZighZGlzY29ubmVjdCkgewotICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQotICAgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKLQotICAgICAgcmVzdWx0ID0gQ3VybF9zcGVlZGNoZWNrKGRhdGEsIG5vdyk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBsZWZ0ID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBGQUxTRSk7Ci0gICAgICBpZihsZWZ0IDwgMCkgewotICAgICAgICBmYWlsZihkYXRhLCAiT3BlcmF0aW9uIHRpbWVkIG91dCIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgICAgfQotICAgIH0KLQotI2lmZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0JMT0NLX0RJUkVDVElPTgotICAgIGlmKCFyZXN1bHQgJiYgYmxvY2spIHsKLSAgICAgIGludCBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IENVUkxfU09DS0VUX0JBRDsKLSAgICAgIGN1cmxfc29ja2V0X3QgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7Ci0gICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfSU5CT1VORCAmIGRpcikKLSAgICAgICAgZmRfcmVhZCA9IHNvY2s7Ci0gICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQgJiBkaXIpCi0gICAgICAgIGZkX3dyaXRlID0gc29jazsKLSAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCi0gICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7IC8qIGlnbm9yZSByZXN1bHQgKi8KLSAgICB9Ci0jZW5kaWYKLQotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFNTSCBzZXR1cCBhbmQgY29ubmVjdGlvbgotICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBzdHJ1Y3QgU1NIUFJPVE8gKnNzaDsKLQotICBjb25uLT5kYXRhLT5yZXEucHJvdG9wID0gc3NoID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgU1NIUFJPVE8pKTsKLSAgaWYoIXNzaCkKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyBDdXJsX3JlY3Ygc2NwX3JlY3YsIHNmdHBfcmVjdjsKLXN0YXRpYyBDdXJsX3NlbmQgc2NwX3NlbmQsIHNmdHBfc2VuZDsKLQotLyoKLSAqIEN1cmxfc3NoX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCi0gKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4KLSAqLwotc3RhdGljIENVUkxjb2RlIHNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKLXsKLSNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKLSAgY3VybF9zb2NrZXRfdCBzb2NrOwotI2VuZGlmCi0gIHN0cnVjdCBzc2hfY29ubiAqc3NoOwotICBDVVJMY29kZSByZXN1bHQ7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotCi0gIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCi0gIGlmKCFkYXRhLT5yZXEucHJvdG9wKQotICAgIHNzaF9zZXR1cF9jb25uZWN0aW9uKGNvbm4pOwotCi0gIC8qIFdlIGRlZmF1bHQgdG8gcGVyc2lzdGVudCBjb25uZWN0aW9ucy4gV2Ugc2V0IHRoaXMgYWxyZWFkeSBpbiB0aGlzIGNvbm5lY3QKLSAgICAgZnVuY3Rpb24gdG8gbWFrZSB0aGUgcmUtdXNlIGNoZWNrcyBwcm9wZXJseSBiZSBhYmxlIHRvIGNoZWNrIHRoaXMgYml0LiAqLwotICBjb25ua2VlcChjb25uLCAiU1NIIGRlZmF1bHQiKTsKLQotICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApIHsKLSAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNjcF9yZWN2OwotICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2NwX3NlbmQ7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzZnRwX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzZnRwX3NlbmQ7Ci0gIH0KLSAgc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKLSAgaWYoY29ubi0+dXNlcikgewotICAgIGluZm9mKGRhdGEsICJVc2VyOiAlc1xuIiwgY29ubi0+dXNlcik7Ci0gIH0KLSAgaWYoY29ubi0+cGFzc3dkKSB7Ci0gICAgaW5mb2YoZGF0YSwgIlBhc3N3b3JkOiAlc1xuIiwgY29ubi0+cGFzc3dkKTsKLSAgfQotICBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0jZW5kaWYgLyogQ1VSTF9MSUJTU0gyX0RFQlVHICovCi0KLSAgc3NoLT5zc2hfc2Vzc2lvbiA9IGxpYnNzaDJfc2Vzc2lvbl9pbml0X2V4KG15X2xpYnNzaDJfbWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfbGlic3NoMl9mcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfbGlic3NoMl9yZWFsbG9jLCBjb25uKTsKLSAgaWYoc3NoLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKSB7Ci0gICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGlzaW5nIHNzaCBzZXNzaW9uIik7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICB9Ci0KLSAgaWYoZGF0YS0+c2V0LnNzaF9jb21wcmVzc2lvbikgewotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDgKLSAgICBpZihsaWJzc2gyX3Nlc3Npb25fZmxhZyhzc2gtPnNzaF9zZXNzaW9uLCBMSUJTU0gyX0ZMQUdfQ09NUFJFU1MsIDEpIDwgMCkKLSNlbmRpZgotICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBlbmFibGUgY29tcHJlc3Npb24gZm9yIHNzaCBzZXNzaW9uXG4iKTsKLSAgfQotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7Ci0gICAgaW50IHJjOwotICAgIHNzaC0+a2ggPSBsaWJzc2gyX2tub3duaG9zdF9pbml0KHNzaC0+c3NoX3Nlc3Npb24pOwotICAgIGlmKCFzc2gtPmtoKSB7Ci0gICAgICBsaWJzc2gyX3Nlc3Npb25fZnJlZShzc2gtPnNzaF9zZXNzaW9uKTsKLSAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKLSAgICB9Ci0KLSAgICAvKiByZWFkIGFsbCBrbm93biBob3N0cyBmcm9tIHRoZXJlICovCi0gICAgcmMgPSBsaWJzc2gyX2tub3duaG9zdF9yZWFkZmlsZShzc2gtPmtoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfRklMRV9PUEVOU1NIKTsKLSAgICBpZihyYyA8IDApCi0gICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHJlYWQga25vd24gaG9zdHMgZnJvbSAlc1xuIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7Ci0gIH0KLSNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLwotCi0jaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCi0gIGxpYnNzaDJfdHJhY2Uoc3NoLT5zc2hfc2Vzc2lvbiwgfjApOwotICBpbmZvZihkYXRhLCAiU1NIIHNvY2tldDogJWRcbiIsIChpbnQpc29jayk7Ci0jZW5kaWYgLyogQ1VSTF9MSUJTU0gyX0RFQlVHICovCi0KLSAgc3RhdGUoY29ubiwgU1NIX0lOSVQpOwotCi0gIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIHNjcF9wZXJmb3JtKCkKLSAqCi0gKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNDUC4gR2V0IGEgZmlsZSBhY2NvcmRpbmcgdG8KLSAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCi0gKi8KLQotc3RhdGljCi1DVVJMY29kZSBzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKLQotICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLwotCi0gIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLwotICBzdGF0ZShjb25uLCBTU0hfU0NQX1RSQU5TX0lOSVQpOwotCi0gIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLwotICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KLXN0YXRpYyBDVVJMY29kZSBzY3BfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogVGhlIERPIGZ1bmN0aW9uIGlzIGdlbmVyaWMgZm9yIGJvdGggcHJvdG9jb2xzLiBUaGVyZSB3YXMgcHJldmlvdXNseSB0d28KLSAqIHNlcGFyYXRlIG9uZXMgYnV0IHRoaXMgd2F5IG1lYW5zIGxlc3MgZHVwbGljYXRlZCBjb2RlLgotICovCi0KLXN0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIGJvb2wgY29ubmVjdGVkID0gMDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotCi0gICpkb25lID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gZmFsc2UgKi8KLQotICBkYXRhLT5yZXEuc2l6ZSA9IC0xOyAvKiBtYWtlIHN1cmUgdGhpcyBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KLQotICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7IC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KLSAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLwotCi0gIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7Ci0gIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKLSAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7Ci0gIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQotICAgIHJlc3VsdCA9IHNjcF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IHNmdHBfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCi0gICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgotICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLwotc3RhdGljIENVUkxjb2RlIHNjcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaCA9ICZjb25uLT5wcm90by5zc2hjOwotICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOwotCi0gIGlmKHNzaC0+c3NoX3Nlc3Npb24pIHsKLSAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCi0KLSAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKLQotICAgIHJlc3VsdCA9IHNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCi0gICBkb25lIGZ1bmN0aW9ucyAqLwotc3RhdGljIENVUkxjb2RlIHNzaF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7Ci0KLSAgaWYoIXN0YXR1cykgewotICAgIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLwotICAgIHJlc3VsdCA9IHNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgRkFMU0UpOwotICB9Ci0gIGVsc2UKLSAgICByZXN1bHQgPSBzdGF0dXM7Ci0KLSAgaWYoc2Z0cF9zY3ApCi0gICAgQ3VybF9zYWZlZnJlZShzZnRwX3NjcC0+cGF0aCk7Ci0gIGlmKEN1cmxfcGdyc0RvbmUoY29ubikpCi0gICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7Ci0KLSAgY29ubi0+ZGF0YS0+cmVxLmtlZXBvbiA9IDA7IC8qIGNsZWFyIGFsbCBiaXRzICovCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQotewotICAodm9pZClwcmVtYXR1cmU7IC8qIG5vdCB1c2VkICovCi0KLSAgaWYoIXN0YXR1cykKLSAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPTkUpOwotCi0gIHJldHVybiBzc2hfZG9uZShjb25uLCBzdGF0dXMpOwotCi19Ci0KLXN0YXRpYyBzc2l6ZV90IHNjcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKLXsKLSAgc3NpemVfdCBud3JpdGU7Ci0gICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KLQotICAvKiBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoKSByZXR1cm5zIGludCEgKi8KLSAgbndyaXRlID0gKHNzaXplX3QpCi0gICAgbGlic3NoMl9jaGFubmVsX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc3NoX2NoYW5uZWwsIG1lbSwgbGVuKTsKLQotICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKLQotICBpZihud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgbndyaXRlID0gMDsKLSAgfQotICBlbHNlIGlmKG53cml0ZSA8IExJQlNTSDJfRVJST1JfTk9ORSkgewotICAgICplcnIgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoKGludClud3JpdGUpOwotICAgIG53cml0ZSA9IC0xOwotICB9Ci0KLSAgcmV0dXJuIG53cml0ZTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2NwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG5yZWFkOwotICAodm9pZClzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCi0KLSAgLyogbGlic3NoMl9jaGFubmVsX3JlYWQoKSByZXR1cm5zIGludCAqLwotICBucmVhZCA9IChzc2l6ZV90KQotICAgIGxpYnNzaDJfY2hhbm5lbF9yZWFkKGNvbm4tPnByb3RvLnNzaGMuc3NoX2NoYW5uZWwsIG1lbSwgbGVuKTsKLQotICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOwotICBpZihucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICBucmVhZCA9IC0xOwotICB9Ci0KLSAgcmV0dXJuIG5yZWFkOwotfQotCi0vKgotICogPT09PT09PT09PT09PT09IFNGVFAgPT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIHNmdHBfcGVyZm9ybSgpCi0gKgotICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTRlRQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KLSAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCi0gKi8KLQotc3RhdGljCi1DVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7Ci0KLSAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KLQotICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KLSAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7Ci0KLSAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLwotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KLSAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCi0gICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOwotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1Qgc3RhcnRzIG5vd1xuIikpOwotCi0gIGlmKGNvbm4tPnByb3RvLnNzaGMuc3NoX3Nlc3Npb24pIHsKLSAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCi0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfU0hVVERPV04pOwotICAgIHJlc3VsdCA9IHNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7Ci0gIH0KLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKLQotICByZXR1cm4gcmVzdWx0OwotCi19Ci0KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotCi0gIGlmKCFzdGF0dXMpIHsKLSAgICAvKiBQb3N0IHF1b3RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgU0ZUUF9DTE9TRSBzdGF0ZSB0byBhdm9pZAotICAgICAgIGVycm9ycyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gb3BlbiBmaWxlIGhhbmRsZXMgZHVyaW5nIFBPU1RRVU9URQotICAgICAgIG9wZXJhdGlvbiAqLwotICAgIGlmKCFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSAmJiAhY29ubi0+Yml0cy5yZXRyeSkKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgfQotICByZXR1cm4gc3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKLX0KLQotLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCi1zdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKLXsKLSAgc3NpemVfdCBud3JpdGU7ICAgLyogbGlic3NoMl9zZnRwX3dyaXRlKCkgdXNlZCB0byByZXR1cm4gc2l6ZV90IGluIDAuMTQKLSAgICAgICAgICAgICAgICAgICAgICAgYnV0IGlzIGNoYW5nZWQgdG8gc3NpemVfdCBpbiAwLjE1LiBUaGVzZSBkYXlzIHdlIGRvbid0Ci0gICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbGlic3NoMiAwLjE1Ki8KLSAgKHZvaWQpc29ja2luZGV4OwotCi0gIG53cml0ZSA9IGxpYnNzaDJfc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7Ci0KLSAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7Ci0KLSAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIG53cml0ZSA9IDA7Ci0gIH0KLSAgZWxzZSBpZihud3JpdGUgPCBMSUJTU0gyX0VSUk9SX05PTkUpIHsKLSAgICAqZXJyID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKChpbnQpbndyaXRlKTsKLSAgICBud3JpdGUgPSAtMTsKLSAgfQotCi0gIHJldHVybiBud3JpdGU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzCi0gKiBvciA8MCBvbiBlcnJvcgotICovCi1zdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKLXsKLSAgc3NpemVfdCBucmVhZDsKLSAgKHZvaWQpc29ja2luZGV4OwotCi0gIG5yZWFkID0gbGlic3NoMl9zZnRwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2hhbmRsZSwgbWVtLCBsZW4pOwotCi0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7Ci0KLSAgaWYobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgbnJlYWQgPSAtMTsKLQotICB9Ci0gIGVsc2UgaWYobnJlYWQgPCAwKSB7Ci0gICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW5yZWFkKTsKLSAgfQotICByZXR1cm4gbnJlYWQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpzZnRwX2xpYnNzaDJfc3RyZXJyb3IoaW50IGVycikKLXsKLSAgc3dpdGNoKGVycikgewotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX0ZJTEU6Ci0gICAgICByZXR1cm4gIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgotICAgICAgcmV0dXJuICJQZXJtaXNzaW9uIGRlbmllZCI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfRkFJTFVSRToKLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIGZhaWxlZCI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfQkFEX01FU1NBR0U6Ci0gICAgICByZXR1cm4gIkJhZCBtZXNzYWdlIGZyb20gU0ZUUCBzZXJ2ZXIiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX0NPTk5FQ1RJT046Ci0gICAgICByZXR1cm4gIk5vdCBjb25uZWN0ZWQgdG8gU0ZUUCBzZXJ2ZXIiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0NPTk5FQ1RJT05fTE9TVDoKLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0byBTRlRQIHNlcnZlciBsb3N0IjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9PUF9VTlNVUFBPUlRFRDoKLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgU0ZUUCBzZXJ2ZXIiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0lOVkFMSURfSEFORExFOgotICAgICAgcmV0dXJuICJJbnZhbGlkIGhhbmRsZSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9QQVRIOgotICAgICAgcmV0dXJuICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTOgotICAgICAgcmV0dXJuICJGaWxlIGFscmVhZHkgZXhpc3RzIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgotICAgICAgcmV0dXJuICJGaWxlIGlzIHdyaXRlIHByb3RlY3RlZCI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fTUVESUE6Ci0gICAgICByZXR1cm4gIk5vIG1lZGlhIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TUEFDRV9PTl9GSUxFU1lTVEVNOgotICAgICAgcmV0dXJuICJEaXNrIGZ1bGwiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgotICAgICAgcmV0dXJuICJVc2VyIHF1b3RhIGV4Y2VlZGVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9VTktOT1dOX1BSSU5DSVBMRToKLSAgICAgIHJldHVybiAiVW5rbm93biBwcmluY2lwbGUiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0xPQ0tfQ09ORmxJQ1Q6Ci0gICAgICByZXR1cm4gIkZpbGUgbG9jayBjb25mbGljdCI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKLSAgICAgIHJldHVybiAiRGlyZWN0b3J5IG5vdCBlbXB0eSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9UX0FfRElSRUNUT1JZOgotICAgICAgcmV0dXJuICJOb3QgYSBkaXJlY3RvcnkiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0lOVkFMSURfRklMRU5BTUU6Ci0gICAgICByZXR1cm4gIkludmFsaWQgZmlsZW5hbWUiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0xJTktfTE9PUDoKLSAgICAgIHJldHVybiAiTGluayBwb2ludHMgdG8gaXRzZWxmIjsKLSAgfQotICByZXR1cm4gIlVua25vd24gZXJyb3IgaW4gbGlic3NoMiI7Ci19Ci0KLSNlbmRpZiAvKiBVU0VfTElCU1NIMiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3NoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYyMGFhYy4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0jaWZuZGVmIEhFQURFUl9DVVJMX1NTSF9ICi0jZGVmaW5lIEhFQURFUl9DVVJMX1NTSF9ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZiBkZWZpbmVkKEhBVkVfTElCU1NIMl9IKQotI2luY2x1ZGUgPGxpYnNzaDIuaD4KLSNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KLSNlbGlmIGRlZmluZWQoSEFWRV9MSUJTU0hfTElCU1NIX0gpCi0jaW5jbHVkZSA8bGlic3NoL2xpYnNzaC5oPgotI2luY2x1ZGUgPGxpYnNzaC9zZnRwLmg+Ci0jZW5kaWYgLyogSEFWRV9MSUJTU0gyX0ggKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNTSCB1bmlxdWUgc2V0dXAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIGVudW0gewotICBTU0hfTk9fU1RBVEUgPSAtMSwgIC8qIFVzZWQgZm9yICJuZXh0U3RhdGUiIHNvIHNheSB0aGVyZSBpcyBub25lICovCi0gIFNTSF9TVE9QID0gMCwgICAgICAgLyogZG8gbm90aGluZyBzdGF0ZSwgc3RvcHMgdGhlIHN0YXRlIG1hY2hpbmUgKi8KLQotICBTU0hfSU5JVCwgICAgICAgICAgIC8qIEZpcnN0IHN0YXRlIGluIFNTSC1DT05ORUNUICovCi0gIFNTSF9TX1NUQVJUVVAsICAgICAgLyogU2Vzc2lvbiBzdGFydHVwICovCi0gIFNTSF9IT1NUS0VZLCAgICAgICAgLyogdmVyaWZ5IGhvc3RrZXkgKi8KLSAgU1NIX0FVVEhMSVNULAotICBTU0hfQVVUSF9QS0VZX0lOSVQsCi0gIFNTSF9BVVRIX1BLRVksCi0gIFNTSF9BVVRIX1BBU1NfSU5JVCwKLSAgU1NIX0FVVEhfUEFTUywKLSAgU1NIX0FVVEhfQUdFTlRfSU5JVCwgLyogaW5pdGlhbGl6ZSB0aGVuIHdhaXQgZm9yIGNvbm5lY3Rpb24gdG8gYWdlbnQgKi8KLSAgU1NIX0FVVEhfQUdFTlRfTElTVCwgLyogYXNrIGZvciBsaXN0IHRoZW4gd2FpdCBmb3IgZW50aXJlIGxpc3QgdG8gY29tZSAqLwotICBTU0hfQVVUSF9BR0VOVCwgICAgICAvKiBhdHRlbXB0IG9uZSBrZXkgYXQgYSB0aW1lICovCi0gIFNTSF9BVVRIX0hPU1RfSU5JVCwKLSAgU1NIX0FVVEhfSE9TVCwKLSAgU1NIX0FVVEhfS0VZX0lOSVQsCi0gIFNTSF9BVVRIX0tFWSwKLSAgU1NIX0FVVEhfR1NTQVBJLAotICBTU0hfQVVUSF9ET05FLAotICBTU0hfU0ZUUF9JTklULAotICBTU0hfU0ZUUF9SRUFMUEFUSCwgICAvKiBMYXN0IHN0YXRlIGluIFNTSC1DT05ORUNUICovCi0KLSAgU1NIX1NGVFBfUVVPVEVfSU5JVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ETyAqLwotICBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVCwgLyogKFBvc3NpYmx5KSBGaXJzdCBzdGF0ZSBpbiBTRlRQLURPTkUgKi8KLSAgU1NIX1NGVFBfUVVPVEUsCi0gIFNTSF9TRlRQX05FWFRfUVVPVEUsCi0gIFNTSF9TRlRQX1FVT1RFX1NUQVQsCi0gIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQsCi0gIFNTSF9TRlRQX1FVT1RFX1NZTUxJTkssCi0gIFNTSF9TRlRQX1FVT1RFX01LRElSLAotICBTU0hfU0ZUUF9RVU9URV9SRU5BTUUsCi0gIFNTSF9TRlRQX1FVT1RFX1JNRElSLAotICBTU0hfU0ZUUF9RVU9URV9VTkxJTkssCi0gIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMsCi0gIFNTSF9TRlRQX0dFVElORk8sCi0gIFNTSF9TRlRQX0ZJTEVUSU1FLAotICBTU0hfU0ZUUF9UUkFOU19JTklULAotICBTU0hfU0ZUUF9VUExPQURfSU5JVCwKLSAgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCwKLSAgU1NIX1NGVFBfQ1JFQVRFX0RJUlMsCi0gIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSLAotICBTU0hfU0ZUUF9SRUFERElSX0lOSVQsCi0gIFNTSF9TRlRQX1JFQURESVIsCi0gIFNTSF9TRlRQX1JFQURESVJfTElOSywKLSAgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00sCi0gIFNTSF9TRlRQX1JFQURESVJfRE9ORSwKLSAgU1NIX1NGVFBfRE9XTkxPQURfSU5JVCwKLSAgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCwgLyogTGFzdCBzdGF0ZSBpbiBTRlRQLURPICovCi0gIFNTSF9TRlRQX0NMT1NFLCAgICAvKiBMYXN0IHN0YXRlIGluIFNGVFAtRE9ORSAqLwotICBTU0hfU0ZUUF9TSFVURE9XTiwgLyogRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ESVNDT05ORUNUICovCi0gIFNTSF9TQ1BfVFJBTlNfSU5JVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0NQLURPICovCi0gIFNTSF9TQ1BfVVBMT0FEX0lOSVQsCi0gIFNTSF9TQ1BfRE9XTkxPQURfSU5JVCwKLSAgU1NIX1NDUF9ET1dOTE9BRCwKLSAgU1NIX1NDUF9ET05FLAotICBTU0hfU0NQX1NFTkRfRU9GLAotICBTU0hfU0NQX1dBSVRfRU9GLAotICBTU0hfU0NQX1dBSVRfQ0xPU0UsCi0gIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFLCAgIC8qIExhc3Qgc3RhdGUgaW4gU0NQLURPTkUgKi8KLSAgU1NIX1NFU1NJT05fRElTQ09OTkVDVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0NQLURJU0NPTk5FQ1QgKi8KLSAgU1NIX1NFU1NJT05fRlJFRSwgICAgICAgLyogTGFzdCBzdGF0ZSBpbiBTQ1AvU0ZUUC1ESVNDT05ORUNUICovCi0gIFNTSF9RVUlULAotICBTU0hfTEFTVCAgLyogbmV2ZXIgdXNlZCAqLwotfSBzc2hzdGF0ZTsKLQotLyogdGhpcyBzdHJ1Y3QgaXMgdXNlZCBpbiB0aGUgSGFuZGxlRGF0YSBzdHJ1Y3Qgd2hpY2ggaXMgcGFydCBvZiB0aGUKLSAgIEN1cmxfZWFzeSwgd2hpY2ggbWVhbnMgdGhpcyBpcyB1c2VkIG9uIGEgcGVyLWVhc3kgaGFuZGxlIGJhc2lzLgotICAgRXZlcnl0aGluZyB0aGF0IGlzIHN0cmljdGx5IHJlbGF0ZWQgdG8gYSBjb25uZWN0aW9uIGlzIGJhbm5lZCBmcm9tIHRoaXMKLSAgIHN0cnVjdC4gKi8KLXN0cnVjdCBTU0hQUk9UTyB7Ci0gIGNoYXIgKnBhdGg7ICAgICAgICAgICAgICAgICAgLyogdGhlIHBhdGggd2Ugb3BlcmF0ZSBvbiAqLwotfTsKLQotLyogc3NoX2Nvbm4gaXMgdXNlZCBmb3Igc3RydWN0IGNvbm5lY3Rpb24tb3JpZW50ZWQgZGF0YSBpbiB0aGUgY29ubmVjdGRhdGEKLSAgIHN0cnVjdCAqLwotc3RydWN0IHNzaF9jb25uIHsKLSAgY29uc3QgY2hhciAqYXV0aGxpc3Q7ICAgICAgIC8qIExpc3Qgb2YgYXV0aC4gbWV0aG9kcywgbWFuYWdlZCBieSBsaWJzc2gyICovCi0KLSAgLyogY29tbW9uICovCi0gIGNvbnN0IGNoYXIgKnBhc3NwaHJhc2U7ICAgICAvKiBwYXNzLXBocmFzZSB0byB1c2UgKi8KLSAgY2hhciAqcnNhX3B1YjsgICAgICAgICAgICAgIC8qIHBhdGggbmFtZSAqLwotICBjaGFyICpyc2E7ICAgICAgICAgICAgICAgICAgLyogcGF0aCBuYW1lICovCi0gIGJvb2wgYXV0aGVkOyAgICAgICAgICAgICAgICAvKiB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIGZpbmUgKi8KLSAgc3Noc3RhdGUgc3RhdGU7ICAgICAgICAgICAgIC8qIGFsd2F5cyB1c2Ugc3NoLmM6c3RhdGUoKSB0byBjaGFuZ2Ugc3RhdGUhICovCi0gIHNzaHN0YXRlIG5leHRzdGF0ZTsgICAgICAgICAvKiB0aGUgc3RhdGUgdG8gZ290byBhZnRlciBzdG9wcGluZyAqLwotICBDVVJMY29kZSBhY3R1YWxjb2RlOyAgICAgICAgLyogdGhlIGFjdHVhbCBlcnJvciBjb2RlICovCi0gIHN0cnVjdCBjdXJsX3NsaXN0ICpxdW90ZV9pdGVtOyAvKiBmb3IgdGhlIHF1b3RlIG9wdGlvbiAqLwotICBjaGFyICpxdW90ZV9wYXRoMTsgICAgICAgICAgLyogdHdvIGdlbmVyaWMgcG9pbnRlcnMgZm9yIHRoZSBRVU9URSBzdHVmZiAqLwotICBjaGFyICpxdW90ZV9wYXRoMjsKLQotICBib29sIGFjY2VwdGZhaWw7ICAgICAgICAgICAgLyogdXNlZCBieSB0aGUgU0ZUUF9RVU9URSAoY29udGludWUgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlIGNvbW1hbmQgZmFpbHMpICovCi0gIGNoYXIgKmhvbWVkaXI7ICAgICAgICAgICAgICAvKiB3aGVuIGRvaW5nIFNGVFAgd2UgZmlndXJlIG91dCBob21lIGRpciBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3QgcGhhc2UgKi8KLSAgc2l6ZV90IHJlYWRkaXJfbGVuLCByZWFkZGlyX3RvdGFsTGVuLCByZWFkZGlyX2N1cnJMZW47Ci0gIGNoYXIgKnJlYWRkaXJfbGluZTsKLSAgY2hhciAqcmVhZGRpcl9saW5rUGF0aDsKLSAgLyogZW5kIG9mIFJFQURESVIgc3R1ZmYgKi8KLQotICBpbnQgc2Vjb25kQ3JlYXRlRGlyczsgICAgICAgICAvKiBjb3VudGVyIHVzZSBieSB0aGUgY29kZSB0byBzZWUgaWYgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2NyZWF0ZSBhIGRpcmVjdG9yeSAqLwotICBjaGFyICpzbGFzaF9wb3M7ICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX0NSRUFURV9ESVJTIHN0YXRlICovCi0KLSAgaW50IG9yaWdfd2FpdGZvcjsgICAgICAgICAgICAgLyogZGVmYXVsdCBSRUFEL1dSSVRFIGJpdHMgd2FpdCBmb3IgKi8KLQotI2lmIGRlZmluZWQoVVNFX0xJQlNTSCkKLS8qIG91ciB2YXJpYWJsZXMgKi8KLSAgdW5zaWduZWQga2JkX3N0YXRlOyAvKiAwIG9yIDEgKi8KLSAgc3NoX2tleSBwcml2a2V5OwotICBzc2hfa2V5IHB1YmtleTsKLSAgaW50IGF1dGhfbWV0aG9kczsKLSAgc3NoX3Nlc3Npb24gc3NoX3Nlc3Npb247Ci0gIHNzaF9zY3Agc2NwX3Nlc3Npb247Ci0gIHNmdHBfc2Vzc2lvbiBzZnRwX3Nlc3Npb247Ci0gIHNmdHBfZmlsZSBzZnRwX2ZpbGU7Ci0gIHNmdHBfZGlyIHNmdHBfZGlyOwotCi0gIHVuc2lnbmVkIHNmdHBfcmVjdl9zdGF0ZTsgLyogMCBvciAxICovCi0gIGludCBzZnRwX2ZpbGVfaW5kZXg7IC8qIGZvciBhc3luYyByZWFkICovCi0gIHNmdHBfYXR0cmlidXRlcyByZWFkZGlyX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQIHJlYWRkaXIgYWN0aW9ucyAqLwotICBzZnRwX2F0dHJpYnV0ZXMgcmVhZGRpcl9saW5rX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQIHJlYWRkaXIgYWN0aW9ucyAqLwotICBzZnRwX2F0dHJpYnV0ZXMgcXVvdGVfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgc3RhdGUgKi8KLQotICBjb25zdCBjaGFyICpyZWFkZGlyX2ZpbGVuYW1lOyAvKiBwb2ludHMgd2l0aGluIHJlYWRkaXJfYXR0cnMgKi8KLSAgY29uc3QgY2hhciAqcmVhZGRpcl9sb25nZW50cnk7Ci0gIGNoYXIgKnJlYWRkaXJfdG1wOwotI2VsaWYgZGVmaW5lZChVU0VfTElCU1NIMikKLSAgY2hhciAqcmVhZGRpcl9maWxlbmFtZTsKLSAgY2hhciAqcmVhZGRpcl9sb25nZW50cnk7Ci0KLSAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgcXVvdGVfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgc3RhdGUgKi8KLQotICAvKiBIZXJlJ3MgYSBzZXQgb2Ygc3RydWN0IG1lbWJlcnMgdXNlZCBieSB0aGUgU0ZUUF9SRUFERElSIHN0YXRlICovCi0gIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIHJlYWRkaXJfYXR0cnM7Ci0gIExJQlNTSDJfU0VTU0lPTiAqc3NoX3Nlc3Npb247IC8qIFNlY3VyZSBTaGVsbCBzZXNzaW9uICovCi0gIExJQlNTSDJfQ0hBTk5FTCAqc3NoX2NoYW5uZWw7IC8qIFNlY3VyZSBTaGVsbCBjaGFubmVsIGhhbmRsZSAqLwotICBMSUJTU0gyX1NGVFAgKnNmdHBfc2Vzc2lvbjsgICAvKiBTRlRQIGhhbmRsZSAqLwotICBMSUJTU0gyX1NGVFBfSEFORExFICpzZnRwX2hhbmRsZTsKLQotI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKLSAgTElCU1NIMl9BR0VOVCAqc3NoX2FnZW50OyAgICAgLyogcHJveHkgdG8gc3NoLWFnZW50L3BhZ2VhbnQgKi8KLSAgc3RydWN0IGxpYnNzaDJfYWdlbnRfcHVibGlja2V5ICpzc2hhZ2VudF9pZGVudGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzc2hhZ2VudF9wcmV2X2lkZW50aXR5OwotI2VuZGlmCi0KLSAgLyogbm90ZSB0aGF0IEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJIGlzIGEgZGVmaW5lIHNldCBpbiB0aGUgbGlic3NoMi5oCi0gICAgIGhlYWRlciAqLwotI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCi0gIExJQlNTSDJfS05PV05IT1NUUyAqa2g7Ci0jZW5kaWYKLSNlbmRpZiAvKiBVU0VfTElCU1NIICovCi19OwotCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIKQotCi0jZGVmaW5lIENVUkxfTElCU1NIX1ZFUlNJT04gc3NoX3ZlcnNpb24oMCkKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwOwotCi0jZWxpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKQotCi0vKiBGZWF0dXJlIGRldGVjdGlvbiBiYXNlZCBvbiB2ZXJzaW9uIG51bWJlcnMgdG8gYmV0dGVyIHdvcmsgd2l0aAotICAgbm9uLWNvbmZpZ3VyZSBwbGF0Zm9ybXMgKi8KLQotI2lmICFkZWZpbmVkKExJQlNTSDJfVkVSU0lPTl9OVU0pIHx8IChMSUJTU0gyX1ZFUlNJT05fTlVNIDwgMHgwMDEwMDApCi0jICBlcnJvciAiU0NQL1NGVFAgcHJvdG9jb2xzIHJlcXVpcmUgbGlic3NoMiAwLjE2IG9yIGxhdGVyIgotI2VuZGlmCi0KLSNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMDAwCi0jZGVmaW5lIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NCAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAxMDAKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX1ZFUlNJT04gMQotI2VuZGlmCi0KLSNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA1Ci0jZGVmaW5lIEhBVkVfTElCU1NIMl9JTklUIDEKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX0VYSVQgMQotI2VuZGlmCi0KLSNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2Ci0jZGVmaW5lIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tQIDEKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQgMQotI2VuZGlmCi0KLSNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA4Ci0jZGVmaW5lIEhBVkVfTElCU1NIMl9TRVNTSU9OX0hBTkRTSEFLRSAxCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTElCU1NIMl9WRVJTSU9OCi0vKiBnZXQgaXQgcnVuLXRpbWUgaWYgcG9zc2libGUgKi8KLSNkZWZpbmUgQ1VSTF9MSUJTU0gyX1ZFUlNJT04gbGlic3NoMl92ZXJzaW9uKDApCi0jZWxzZQotLyogdXNlIGJ1aWxkLXRpbWUgaWYgcnVuLXRpbWUgbm90IHBvc3NpYmxlICovCi0jZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIExJQlNTSDJfVkVSU0lPTgotI2VuZGlmCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zY3A7Ci1leHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2Z0cDsKLQotI2VuZGlmIC8qIFVTRV9MSUJTU0gyICovCi0KLSNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TU0hfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5jCmluZGV4IDI0YmNjYTkuLmEzMDllMzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDYgKzI2LDggQEAKIAogI2luY2x1ZGUgInN0cmNhc2UuaCIKIAorc3RhdGljIGNoYXIgcmF3X3RvbG93ZXIoY2hhciBpbik7CisKIC8qIFBvcnRhYmxlLCBjb25zaXN0ZW50IHRvdXBwZXIgKHJlbWVtYmVyIEVCQ0RJQykuIERvIG5vdCB1c2UgdG91cHBlcigpIGJlY2F1c2UKICAgIGl0cyBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KIGNoYXIgQ3VybF9yYXdfdG91cHBlcihjaGFyIGluKQpAQCAtOTMsNiArOTUsNzUgQEAKICAgcmV0dXJuIGluOwogfQogCisKKy8qIFBvcnRhYmxlLCBjb25zaXN0ZW50IHRvbG93ZXIgKHJlbWVtYmVyIEVCQ0RJQykuIERvIG5vdCB1c2UgdG9sb3dlcigpIGJlY2F1c2UKKyAgIGl0cyBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KK3N0YXRpYyBjaGFyIHJhd190b2xvd2VyKGNoYXIgaW4pCit7CisjaWYgIWRlZmluZWQoQ1VSTF9ET0VTX0NPTlZFUlNJT05TKQorICBpZihpbiA+PSAnQScgJiYgaW4gPD0gJ1onKQorICAgIHJldHVybiAoY2hhcikoJ2EnICsgaW4gLSAnQScpOworI2Vsc2UKKyAgc3dpdGNoKGluKSB7CisgIGNhc2UgJ0EnOgorICAgIHJldHVybiAnYSc7CisgIGNhc2UgJ0InOgorICAgIHJldHVybiAnYic7CisgIGNhc2UgJ0MnOgorICAgIHJldHVybiAnYyc7CisgIGNhc2UgJ0QnOgorICAgIHJldHVybiAnZCc7CisgIGNhc2UgJ0UnOgorICAgIHJldHVybiAnZSc7CisgIGNhc2UgJ0YnOgorICAgIHJldHVybiAnZic7CisgIGNhc2UgJ0cnOgorICAgIHJldHVybiAnZyc7CisgIGNhc2UgJ0gnOgorICAgIHJldHVybiAnaCc7CisgIGNhc2UgJ0knOgorICAgIHJldHVybiAnaSc7CisgIGNhc2UgJ0onOgorICAgIHJldHVybiAnaic7CisgIGNhc2UgJ0snOgorICAgIHJldHVybiAnayc7CisgIGNhc2UgJ0wnOgorICAgIHJldHVybiAnbCc7CisgIGNhc2UgJ00nOgorICAgIHJldHVybiAnbSc7CisgIGNhc2UgJ04nOgorICAgIHJldHVybiAnbic7CisgIGNhc2UgJ08nOgorICAgIHJldHVybiAnbyc7CisgIGNhc2UgJ1AnOgorICAgIHJldHVybiAncCc7CisgIGNhc2UgJ1EnOgorICAgIHJldHVybiAncSc7CisgIGNhc2UgJ1InOgorICAgIHJldHVybiAncic7CisgIGNhc2UgJ1MnOgorICAgIHJldHVybiAncyc7CisgIGNhc2UgJ1QnOgorICAgIHJldHVybiAndCc7CisgIGNhc2UgJ1UnOgorICAgIHJldHVybiAndSc7CisgIGNhc2UgJ1YnOgorICAgIHJldHVybiAndic7CisgIGNhc2UgJ1cnOgorICAgIHJldHVybiAndyc7CisgIGNhc2UgJ1gnOgorICAgIHJldHVybiAneCc7CisgIGNhc2UgJ1knOgorICAgIHJldHVybiAneSc7CisgIGNhc2UgJ1onOgorICAgIHJldHVybiAneic7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBpbjsKK30KKworCiAvKgogICogQ3VybF9zdHJjYXNlY29tcGFyZSgpIGlzIGZvciBkb2luZyAicmF3IiBjYXNlIGluc2Vuc2l0aXZlIHN0cmluZ3MuIFRoaXMgaXMKICAqIG1lYW50IHRvIGJlIGxvY2FsZSBpbmRlcGVuZGVudCBhbmQgb25seSBjb21wYXJlIHN0cmluZ3Mgd2Uga25vdyBhcmUgc2FmZQpAQCAtMTY1LDYgKzIzNiwyMSBAQAogICB9IHdoaWxlKCpzcmMrKyAmJiAtLW4pOwogfQogCisvKiBDb3B5IGEgbG93ZXIgY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgZnJvbSBzcmMgdG8gZGVzdC4gIFRoZQorICogc3RyaW5ncyBtYXkgb3ZlcmxhcC4gIE5vIG1vcmUgdGhhbiBuIGNoYXJhY3RlcnMgb2YgdGhlIHN0cmluZyBhcmUgY29waWVkCisgKiAoaW5jbHVkaW5nIGFueSBOVUwpIGFuZCB0aGUgZGVzdGluYXRpb24gc3RyaW5nIHdpbGwgTk9UIGJlCisgKiBOVUwtdGVybWluYXRlZCBpZiB0aGF0IGxpbWl0IGlzIHJlYWNoZWQuCisgKi8KK3ZvaWQgQ3VybF9zdHJudG9sb3dlcihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworICBpZihuIDwgMSkKKyAgICByZXR1cm47CisKKyAgZG8geworICAgICpkZXN0KysgPSByYXdfdG9sb3dlcigqc3JjKTsKKyAgfSB3aGlsZSgqc3JjKysgJiYgLS1uKTsKK30KKwogLyogLS0tIHB1YmxpYyBmdW5jdGlvbnMgLS0tICovCiAKIGludCBjdXJsX3N0cmVxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmgKaW5kZXggNmZlZTM4NC4uY2Q0YzQxOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDYsNSArNDYsNiBAQAogI2RlZmluZSBjaGVja3ByZWZpeChhLGIpICAgIGN1cmxfc3RybmVxdWFsKGEsYixzdHJsZW4oYSkpCiAKIHZvaWQgQ3VybF9zdHJudG91cHBlcihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKTsKK3ZvaWQgQ3VybF9zdHJudG9sb3dlcihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NUUkNBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZHVwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJkdXAuYwppbmRleCA1MWU3OTc4Li4xYWIxMGZkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJkdXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJkdXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmVycm9yLmMKaW5kZXggZTI3M2YzNy4uMWExNjZiZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMTEsNiArMzExLDE1IEBACiAgIGNhc2UgQ1VSTEVfUkVDVVJTSVZFX0FQSV9DQUxMOgogICAgIHJldHVybiAiQVBJIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIHdpdGhpbiBjYWxsYmFjayI7CiAKKyAgY2FzZSBDVVJMRV9BVVRIX0VSUk9SOgorICAgIHJldHVybiAiQW4gYXV0aGVudGljYXRpb24gZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3IiOworCisgIGNhc2UgQ1VSTEVfSFRUUDM6CisgICAgcmV0dXJuICJIVFRQLzMgZXJyb3IiOworCisgIGNhc2UgQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOgorICAgIHJldHVybiAiUVVJQyBjb25uZWN0aW9uIGVycm9yIjsKKwogICAgIC8qIGVycm9yIGNvZGVzIG5vdCB1c2VkIGJ5IGN1cnJlbnQgbGliY3VybCAqLwogICBjYXNlIENVUkxFX09CU09MRVRFMjA6CiAgIGNhc2UgQ1VSTEVfT0JTT0xFVEUyNDoKQEAgLTM4Myw2ICszOTIsMTIgQEAKICAgY2FzZSBDVVJMTV9SRUNVUlNJVkVfQVBJX0NBTEw6CiAgICAgcmV0dXJuICJBUEkgZnVuY3Rpb24gY2FsbGVkIGZyb20gd2l0aGluIGNhbGxiYWNrIjsKIAorICBjYXNlIENVUkxNX1dBS0VVUF9GQUlMVVJFOgorICAgIHJldHVybiAiV2FrZXVwIGlzIHVuYXZhaWxhYmxlIG9yIGZhaWxlZCI7CisKKyAgY2FzZSBDVVJMTV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ6CisgICAgcmV0dXJuICJBIGxpYmN1cmwgZnVuY3Rpb24gd2FzIGdpdmVuIGEgYmFkIGFyZ3VtZW50IjsKKwogICBjYXNlIENVUkxNX0xBU1Q6CiAgICAgYnJlYWs7CiAgIH0KQEAgLTQzMywxOSArNDQ4LDI2IEBACiB9CiAKICNpZmRlZiBVU0VfV0lOU09DSwotCi0vKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgbW9zdCAvIGFsbCAoPykgV2luc29jayBlcnJvcnMgY3VybCBpcyBhYmxlIHRvIHByb2R1Y2UuCisvKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBDdXJsX3N0cmVycm9yIHRoYXQgY29udmVydHMgV2luc29jayBlcnJvcgorICogY29kZXMgKFdTQUdldExhc3RFcnJvcikgdG8gZXJyb3IgbWVzc2FnZXMuCisgKiBSZXR1cm5zIE5VTEwgaWYgbm8gZXJyb3IgbWVzc2FnZSB3YXMgZm91bmQgZm9yIGVycm9yIGNvZGUuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICoKIGdldF93aW5zb2NrX2Vycm9yIChpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7Ci0jaWZkZWYgUFJFU0VSVkVfV0lORE9XU19FUlJPUl9DT0RFCi0gIERXT1JEIG9sZF93aW5fZXJyID0gR2V0TGFzdEVycm9yKCk7Ci0jZW5kaWYKLSAgaW50IG9sZF9lcnJubyA9IGVycm5vOwotICBjb25zdCBjaGFyICpwOwotCiAjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgY29uc3QgY2hhciAqcDsKKyNlbmRpZgorCisgIGlmKCFsZW4pCisgICAgcmV0dXJuIE5VTEw7CisKKyAgKmJ1ZiA9ICdcMCc7CisKKyNpZmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisgICh2b2lkKWVycjsKKyAgcmV0dXJuIE5VTEw7CisjZWxzZQogICBzd2l0Y2goZXJyKSB7CiAgIGNhc2UgV1NBRUlOVFI6CiAgICAgcCA9ICJDYWxsIGludGVycnVwdGVkIjsKQEAgLTYxNCwyNyArNjM2LDY0IEBACiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLSNlbHNlCi0gIGlmKCFlcnIpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGVsc2UKLSAgICBwID0gImVycm9yIjsKLSNlbmRpZgogICBzdHJuY3B5KGJ1ZiwgcCwgbGVuKTsKICAgYnVmIFtsZW4tMV0gPSAnXDAnOwotCi0gIGlmKGVycm5vICE9IG9sZF9lcnJubykKLSAgICBlcnJubyA9IG9sZF9lcnJubzsKLQotI2lmZGVmIFBSRVNFUlZFX1dJTkRPV1NfRVJST1JfQ09ERQotICBpZihvbGRfd2luX2VyciAhPSBHZXRMYXN0RXJyb3IoKSkKLSAgICBTZXRMYXN0RXJyb3Iob2xkX3dpbl9lcnIpOwotI2VuZGlmCi0KICAgcmV0dXJuIGJ1ZjsKKyNlbmRpZgogfQogI2VuZGlmICAgLyogVVNFX1dJTlNPQ0sgKi8KIAorI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKy8qIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIEN1cmxfc3RyZXJyb3IgdGhhdCBjb252ZXJ0cyBXaW5kb3dzIEFQSSBlcnJvcgorICogY29kZXMgKEdldExhc3RFcnJvcikgdG8gZXJyb3IgbWVzc2FnZXMuCisgKiBSZXR1cm5zIE5VTEwgaWYgbm8gZXJyb3IgbWVzc2FnZSB3YXMgZm91bmQgZm9yIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF93aW5hcGlfZXJyb3IoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICBjaGFyICpwOworCisgIGlmKCFidWZsZW4pCisgICAgcmV0dXJuIE5VTEw7CisKKyAgKmJ1ZiA9ICdcMCc7CisKKyNpZmRlZiBfV0lOMzJfV0NFCisgIHsKKyAgICB3Y2hhcl90IHdidWZbMjU2XTsKKyAgICB3YnVmWzBdID0gTCdcMCc7CisKKyAgICBpZihGb3JtYXRNZXNzYWdlKChGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSB8CisgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfSUdOT1JFX0lOU0VSVFMpLCBOVUxMLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIHdidWYsIHNpemVvZih3YnVmKS9zaXplb2Yod2NoYXJfdCksIE5VTEwpKSB7CisgICAgICBzaXplX3Qgd3JpdHRlbiA9IHdjc3RvbWJzKGJ1Ziwgd2J1ZiwgYnVmbGVuIC0gMSk7CisgICAgICBpZih3cml0dGVuICE9IChzaXplX3QpLTEpCisgICAgICAgIGJ1Zlt3cml0dGVuXSA9ICdcMCc7CisgICAgICBlbHNlCisgICAgICAgICpidWYgPSAnXDAnOworICAgIH0KKyAgfQorI2Vsc2UKKyAgaWYoIUZvcm1hdE1lc3NhZ2VBKChGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSB8CisgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfSUdOT1JFX0lOU0VSVFMpLCBOVUxMLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIGJ1ZiwgKERXT1JEKWJ1ZmxlbiwgTlVMTCkpIHsKKyAgICAqYnVmID0gJ1wwJzsKKyAgfQorI2VuZGlmCisKKyAgLyogVHJ1bmNhdGUgbXVsdGlwbGUgbGluZXMgKi8KKyAgcCA9IHN0cmNocihidWYsICdcbicpOworICBpZihwKSB7CisgICAgaWYocCA+IGJ1ZiAmJiAqKHAtMSkgPT0gJ1xyJykKKyAgICAgICoocC0xKSA9ICdcMCc7CisgICAgZWxzZQorICAgICAgKnAgPSAnXDAnOworICB9CisKKyAgcmV0dXJuICgqYnVmID8gYnVmIDogTlVMTCk7Cit9CisjZW5kaWYgLyogV0lOMzIgfHwgX1dJTjMyX1dDRSAqLworCiAvKgogICogT3VyIHRocmVhZC1zYWZlIGFuZCBzbWFydCBzdHJlcnJvcigpIHJlcGxhY2VtZW50LgogICoKQEAgLTY0NSw2ICs3MDQsMTQgQEAKICAqCiAgKiBXZSBkb24ndCBkbyByYW5nZSBjaGVja2luZyAob24gc3lzdGVtcyBvdGhlciB0aGFuIFdpbmRvd3MpIHNpbmNlIHRoZXJlIGlzCiAgKiBubyBnb29kIHJlbGlhYmxlIGFuZCBwb3J0YWJsZSB3YXkgdG8gZG8gaXQuCisgKgorICogT24gV2luZG93cyBkaWZmZXJlbnQgdHlwZXMgb2YgZXJyb3IgY29kZXMgb3ZlcmxhcC4gVGhpcyBmdW5jdGlvbiBoYXMgYW4KKyAqIG9yZGVyIG9mIHByZWZlcmVuY2Ugd2hlbiB0cnlpbmcgdG8gbWF0Y2ggZXJyb3IgY29kZXM6CisgKiBDUlQgKGVycm5vKSwgV2luc29jayAoV1NBR2V0TGFzdEVycm9yKSwgV2luZG93cyBBUEkgKEdldExhc3RFcnJvcikuCisgKgorICogSXQgbWF5IGJlIG1vcmUgY29ycmVjdCB0byBjYWxsIG9uZSBvZiB0aGUgdmFyaWFudCBmdW5jdGlvbnMgaW5zdGVhZDoKKyAqIENhbGwgQ3VybF9zc3BpX3N0cmVycm9yIGlmIHRoZSBlcnJvciBjb2RlIGlzIGRlZmluaXRlbHkgV2luZG93cyBTU1BJLgorICogQ2FsbCBDdXJsX3dpbmFwaV9zdHJlcnJvciBpZiB0aGUgZXJyb3IgY29kZSBpcyBkZWZpbml0ZWx5IFdpbmRvd3MgQVBJLgogICovCiBjb25zdCBjaGFyICpDdXJsX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKIHsKQEAgLTY1NSwzNSArNzIyLDMwIEBACiAgIGNoYXIgKnA7CiAgIHNpemVfdCBtYXg7CiAKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKwogICBERUJVR0FTU0VSVChlcnIgPj0gMCk7CiAKICAgbWF4ID0gYnVmbGVuIC0gMTsKICAgKmJ1ZiA9ICdcMCc7CiAKLSNpZmRlZiBVU0VfV0lOU09DSwotCi0jaWZkZWYgX1dJTjMyX1dDRQotICB7Ci0gICAgd2NoYXJfdCB3YnVmWzI1Nl07Ci0gICAgd2J1ZlswXSA9IEwnXDAnOwotCi0gICAgRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgTlVMTCwgZXJyLAotICAgICAgICAgICAgICAgICAgTEFOR19ORVVUUkFMLCB3YnVmLCBzaXplb2Yod2J1Zikvc2l6ZW9mKHdjaGFyX3QpLCBOVUxMKTsKLSAgICB3Y3N0b21icyhidWYsIHdidWYsIG1heCk7Ci0gIH0KLSNlbHNlCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorI2lmIGRlZmluZWQoV0lOMzIpCiAgIC8qICdzeXNfbmVycicgaXMgdGhlIG1heGltdW0gZXJybm8gbnVtYmVyLCBpdCBpcyBub3Qgd2lkZWx5IHBvcnRhYmxlICovCiAgIGlmKGVyciA+PSAwICYmIGVyciA8IHN5c19uZXJyKQogICAgIHN0cm5jcHkoYnVmLCBzdHJlcnJvcihlcnIpLCBtYXgpOwotICBlbHNlIHsKLSAgICBpZighZ2V0X3dpbnNvY2tfZXJyb3IoZXJyLCBidWYsIG1heCkgJiYKLSAgICAgICAhRm9ybWF0TWVzc2FnZUEoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sIE5VTEwsIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgTEFOR19ORVVUUkFMLCBidWYsIChEV09SRCltYXgsIE5VTEwpKQorICBlbHNlCisjZW5kaWYKKyAgeworICAgIGlmKAorI2lmZGVmIFVTRV9XSU5TT0NLCisgICAgICAgIWdldF93aW5zb2NrX2Vycm9yKGVyciwgYnVmLCBtYXgpICYmCisjZW5kaWYKKyAgICAgICAhZ2V0X3dpbmFwaV9lcnJvcigoRFdPUkQpZXJyLCBidWYsIG1heCkpCiAgICAgICBtc25wcmludGYoYnVmLCBtYXgsICJVbmtub3duIGVycm9yICVkICglI3gpIiwgZXJyLCBlcnIpOwogICB9Ci0jZW5kaWYKLQotI2Vsc2UgLyogbm90IFVTRV9XSU5TT0NLIGNvbWluZyB1cCAqLworI2Vsc2UgLyogbm90IFdpbmRvd3MgY29taW5nIHVwICovCiAKICNpZiBkZWZpbmVkKEhBVkVfU1RSRVJST1JfUikgJiYgZGVmaW5lZChIQVZFX1BPU0lYX1NUUkVSUk9SX1IpCiAgLyoKQEAgLTczMSw3ICs3OTMsNyBAQAogICB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIGVuZCBvZiAhIFVTRV9XSU5TT0NLICovCisjZW5kaWYgLyogZW5kIG9mIG5vdCBXaW5kb3dzICovCiAKICAgYnVmW21heF0gPSAnXDAnOyAvKiBtYWtlIHN1cmUgdGhlIHN0cmluZyBpcyB6ZXJvIHRlcm1pbmF0ZWQgKi8KIApAQCAtNzU0LDM0MSArODE2LDM1IEBACiAgIHJldHVybiBidWY7CiB9CiAKLSNpZmRlZiBVU0VfV0lORE9XU19TU1BJCi1jb25zdCBjaGFyICpDdXJsX3NzcGlfc3RyZXJyb3IoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorLyoKKyAqIEN1cmxfd2luYXBpX3N0cmVycm9yOgorICogVmFyaWFudCBvZiBDdXJsX3N0cmVycm9yIGlmIHRoZSBlcnJvciBjb2RlIGlzIGRlZmluaXRlbHkgV2luZG93cyBBUEkuCisgKi8KKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCitjb25zdCBjaGFyICpDdXJsX3dpbmFwaV9zdHJlcnJvcihEV09SRCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKIHsKICNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKICAgRFdPUkQgb2xkX3dpbl9lcnIgPSBHZXRMYXN0RXJyb3IoKTsKICNlbmRpZgogICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0gIGNvbnN0IGNoYXIgKnR4dDsKLSAgY2hhciAqb3V0YnVmOwotICBzaXplX3Qgb3V0bWF4OwotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCi0gIGNoYXIgdHh0YnVmWzgwXTsKLSAgY2hhciBtc2didWZbMjU2XTsKLSAgY2hhciAqcCwgKnN0ciwgKm1zZyA9IE5VTEw7Ci0gIGJvb2wgbXNnX2Zvcm1hdHRlZCA9IEZBTFNFOwotI2VuZGlmCiAKLSAgb3V0YnVmID0gYnVmOwotICBvdXRtYXggPSBidWZsZW4gLSAxOwotICAqb3V0YnVmID0gJ1wwJzsKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCi0KLSAgc3dpdGNoKGVycikgewotICAgIGNhc2UgU0VDX0VfT0s6Ci0gICAgICB0eHQgPSAiTm8gZXJyb3IiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUllQVF9FX1JFVk9LRUQ6Ci0gICAgICB0eHQgPSAiQ1JZUFRfRV9SRVZPS0VEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQUxHT1JJVEhNX01JU01BVENIOgotICAgICAgdHh0ID0gIlNFQ19FX0FMR09SSVRITV9NSVNNQVRDSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0JBRF9CSU5ESU5HUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9CQURfQklORElOR1MiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9CQURfUEtHSUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfQkFEX1BLR0lEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQlVGRkVSX1RPT19TTUFMTDoKLSAgICAgIHR4dCA9ICJTRUNfRV9CVUZGRVJfVE9PX1NNQUxMIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ0FOTk9UX0lOU1RBTEw6Ci0gICAgICB0eHQgPSAiU0VDX0VfQ0FOTk9UX0lOU1RBTEwiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9DQU5OT1RfUEFDSzoKLSAgICAgIHR4dCA9ICJTRUNfRV9DQU5OT1RfUEFDSyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0NFUlRfRVhQSVJFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9DRVJUX0VYUElSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9DRVJUX1VOS05PV046Ci0gICAgICB0eHQgPSAiU0VDX0VfQ0VSVF9VTktOT1dOIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ0VSVF9XUk9OR19VU0FHRToKLSAgICAgIHR4dCA9ICJTRUNfRV9DRVJUX1dST05HX1VTQUdFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ09OVEVYVF9FWFBJUkVEOgotICAgICAgdHh0ID0gIlNFQ19FX0NPTlRFWFRfRVhQSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0NST1NTUkVBTE1fREVMRUdBVElPTl9GQUlMVVJFOgotICAgICAgdHh0ID0gIlNFQ19FX0NST1NTUkVBTE1fREVMRUdBVElPTl9GQUlMVVJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEOgotICAgICAgdHh0ID0gIlNFQ19FX0NSWVBUT19TWVNURU1fSU5WQUxJRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RFQ1JZUFRfRkFJTFVSRToKLSAgICAgIHR4dCA9ICJTRUNfRV9ERUNSWVBUX0ZBSUxVUkUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9ERUxFR0FUSU9OX1BPTElDWToKLSAgICAgIHR4dCA9ICJTRUNfRV9ERUxFR0FUSU9OX1BPTElDWSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RFTEVHQVRJT05fUkVRVUlSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfREVMRUdBVElPTl9SRVFVSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RPV05HUkFERV9ERVRFQ1RFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9ET1dOR1JBREVfREVURUNURUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9FTkNSWVBUX0ZBSUxVUkU6Ci0gICAgICB0eHQgPSAiU0VDX0VfRU5DUllQVF9GQUlMVVJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfSUxMRUdBTF9NRVNTQUdFOgotICAgICAgdHh0ID0gIlNFQ19FX0lMTEVHQUxfTUVTU0FHRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOQ09NUExFVEVfQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfSU5DT01QTEVURV9DUkVERU5USUFMUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOQ09NUExFVEVfTUVTU0FHRToKLSAgICAgIHR4dCA9ICJTRUNfRV9JTkNPTVBMRVRFX01FU1NBR0UiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZOgotICAgICAgdHh0ID0gIlNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgIHR4dCA9ICJTRUNfRV9JTlRFUk5BTF9FUlJPUiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOVkFMSURfSEFORExFOgotICAgICAgdHh0ID0gIlNFQ19FX0lOVkFMSURfSEFORExFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9QQVJBTUVURVI6Ci0gICAgICB0eHQgPSAiU0VDX0VfSU5WQUxJRF9QQVJBTUVURVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlZBTElEX1RPS0VOOgotICAgICAgdHh0ID0gIlNFQ19FX0lOVkFMSURfVE9LRU4iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lTU1VJTkdfQ0FfVU5UUlVTVEVEX0tEQzoKLSAgICAgIHR4dCA9ICJTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRF9LREMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfQ0VSVF9FWFBJUkVEOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19DRVJUX0VYUElSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfQ0VSVF9SRVZPS0VEOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19DRVJUX1JFVk9LRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfSU5WQUxJRF9SRVFVRVNUOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19JTlZBTElEX1JFUVVFU1QiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfVU5BQkxFX1RPX1JFRkVSOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19VTkFCTEVfVE9fUkVGRVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfVU5LTk9XTl9FVFlQRToKLSAgICAgIHR4dCA9ICJTRUNfRV9LRENfVU5LTk9XTl9FVFlQRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0xPR09OX0RFTklFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9MT0dPTl9ERU5JRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NQVhfUkVGRVJSQUxTX0VYQ0VFREVEOgotICAgICAgdHh0ID0gIlNFQ19FX01BWF9SRUZFUlJBTFNfRVhDRUVERUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NRVNTQUdFX0FMVEVSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfTUVTU0FHRV9BTFRFUkVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTVVMVElQTEVfQUNDT1VOVFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTVVMVElQTEVfQUNDT1VOVFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NVVNUX0JFX0tEQzoKLSAgICAgIHR4dCA9ICJTRUNfRV9NVVNUX0JFX0tEQyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX05PVF9PV05FUjoKLSAgICAgIHR4dCA9ICJTRUNfRV9OT1RfT1dORVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19BVVRIRU5USUNBVElOR19BVVRIT1JJVFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fQ1JFREVOVElBTFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19JTVBFUlNPTkFUSU9OOgotICAgICAgdHh0ID0gIlNFQ19FX05PX0lNUEVSU09OQVRJT04iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19JUF9BRERSRVNTRVM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fSVBfQUREUkVTU0VTIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTk9fS0VSQl9LRVk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fS0VSQl9LRVkiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19QQV9EQVRBOgotICAgICAgdHh0ID0gIlNFQ19FX05PX1BBX0RBVEEiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19TNFVfUFJPVF9TVVBQT1JUOgotICAgICAgdHh0ID0gIlNFQ19FX05PX1M0VV9QUk9UX1NVUFBPUlQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19UR1RfUkVQTFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fVEdUX1JFUExZIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfT1VUX09GX1NFUVVFTkNFOgotICAgICAgdHh0ID0gIlNFQ19FX09VVF9PRl9TRVFVRU5DRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1BLSU5JVF9DTElFTlRfRkFJTFVSRToKLSAgICAgIHR4dCA9ICJTRUNfRV9QS0lOSVRfQ0xJRU5UX0ZBSUxVUkUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9QS0lOSVRfTkFNRV9NSVNNQVRDSDoKLSAgICAgIHR4dCA9ICJTRUNfRV9QS0lOSVRfTkFNRV9NSVNNQVRDSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1BPTElDWV9OTFRNX09OTFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfUE9MSUNZX05MVE1fT05MWSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEOgotICAgICAgdHh0ID0gIlNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfUkVWT0NBVElPTl9PRkZMSU5FX0M6Ci0gICAgICB0eHQgPSAiU0VDX0VfUkVWT0NBVElPTl9PRkZMSU5FX0MiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfS0RDOgotICAgICAgdHh0ID0gIlNFQ19FX1JFVk9DQVRJT05fT0ZGTElORV9LREMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TRUNQS0dfTk9UX0ZPVU5EOgotICAgICAgdHh0ID0gIlNFQ19FX1NFQ1BLR19OT1RfRk9VTkQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TRUNVUklUWV9RT1NfRkFJTEVEOgotICAgICAgdHh0ID0gIlNFQ19FX1NFQ1VSSVRZX1FPU19GQUlMRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9DRVJUX0VYUElSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU01BUlRDQVJEX0NFUlRfRVhQSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9DRVJUX1JFVk9LRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU01BUlRDQVJEX0NFUlRfUkVWT0tFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9MT0dPTl9SRVFVSVJFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9TTUFSVENBUkRfTE9HT05fUkVRVUlSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TVFJPTkdfQ1JZUFRPX05PVF9TVVBQT1JURUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU1RST05HX0NSWVBUT19OT1RfU1VQUE9SVEVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046Ci0gICAgICB0eHQgPSAiU0VDX0VfVEFSR0VUX1VOS05PV04iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9USU1FX1NLRVc6Ci0gICAgICB0eHQgPSAiU0VDX0VfVElNRV9TS0VXIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVE9PX01BTllfUFJJTkNJUEFMUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9UT09fTUFOWV9QUklOQ0lQQUxTIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVU5GSU5JU0hFRF9DT05URVhUX0RFTEVURUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfVU5GSU5JU0hFRF9DT05URVhUX0RFTEVURUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTOgotICAgICAgdHh0ID0gIlNFQ19FX1VOS05PV05fQ1JFREVOVElBTFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgIHR4dCA9ICJTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1VOU1VQUE9SVEVEX1BSRUFVVEg6Ci0gICAgICB0eHQgPSAiU0VDX0VfVU5TVVBQT1JURURfUFJFQVVUSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1VOVFJVU1RFRF9ST09UOgotICAgICAgdHh0ID0gIlNFQ19FX1VOVFJVU1RFRF9ST09UIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEU6Ci0gICAgICB0eHQgPSAiU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICB0eHQgPSAiU0VDX0VfV1JPTkdfUFJJTkNJUEFMIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFOgotICAgICAgdHh0ID0gIlNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0NPTVBMRVRFX05FRURFRDoKLSAgICAgIHR4dCA9ICJTRUNfSV9DT01QTEVURV9ORUVERUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfSV9DT05URVhUX0VYUElSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfQ09OVEVYVF9FWFBJUkVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfQ09OVElOVUVfTkVFREVEOgotICAgICAgdHh0ID0gIlNFQ19JX0NPTlRJTlVFX05FRURFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0lOQ09NUExFVEVfQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0lfSU5DT01QTEVURV9DUkVERU5USUFMUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0xPQ0FMX0xPR09OOgotICAgICAgdHh0ID0gIlNFQ19JX0xPQ0FMX0xPR09OIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfTk9fTFNBX0NPTlRFWFQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfTk9fTFNBX0NPTlRFWFQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfSV9SRU5FR09USUFURToKLSAgICAgIHR4dCA9ICJTRUNfSV9SRU5FR09USUFURSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX1NJR05BVFVSRV9ORUVERUQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfU0lHTkFUVVJFX05FRURFRCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgdHh0ID0gIlVua25vd24gZXJyb3IiOworICBpZighZ2V0X3dpbmFwaV9lcnJvcihlcnIsIGJ1ZiwgYnVmbGVuKSkgeworICAgIG1zbnByaW50ZihidWYsIGJ1ZmxlbiwgIlVua25vd24gZXJyb3IgJXUgKDB4JTA4WCkiLCBlcnIsIGVycik7CiAgIH0KLQotICBpZihlcnIgPT0gU0VDX0VfT0spCi0gICAgc3RybmNweShvdXRidWYsIHR4dCwgb3V0bWF4KTsKLSAgZWxzZSBpZihlcnIgPT0gU0VDX0VfSUxMRUdBTF9NRVNTQUdFKQotICAgIG1zbnByaW50ZihvdXRidWYsIG91dG1heCwKLSAgICAgICAgICAgICAgIlNFQ19FX0lMTEVHQUxfTUVTU0FHRSAoMHglMDhYKSAtIFRoaXMgZXJyb3IgdXN1YWxseSBvY2N1cnMgIgotICAgICAgICAgICAgICAid2hlbiBhIGZhdGFsIFNTTC9UTFMgYWxlcnQgaXMgcmVjZWl2ZWQgKGUuZy4gaGFuZHNoYWtlIGZhaWxlZCkuIgotICAgICAgICAgICAgICAiIE1vcmUgZGV0YWlsIG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgU3lzdGVtIGV2ZW50IGxvZy4iLAotICAgICAgICAgICAgICBlcnIpOwotICBlbHNlIHsKLSAgICBzdHIgPSB0eHRidWY7Ci0gICAgbXNucHJpbnRmKHR4dGJ1Ziwgc2l6ZW9mKHR4dGJ1ZiksICIlcyAoMHglMDhYKSIsIHR4dCwgZXJyKTsKLSAgICB0eHRidWZbc2l6ZW9mKHR4dGJ1ZiktMV0gPSAnXDAnOwotCi0jaWZkZWYgX1dJTjMyX1dDRQotICAgIHsKLSAgICAgIHdjaGFyX3Qgd2J1ZlsyNTZdOwotICAgICAgd2J1ZlswXSA9IEwnXDAnOwotCi0gICAgICBpZihGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfSUdOT1JFX0lOU0VSVFMsCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGVyciwgTEFOR19ORVVUUkFMLAotICAgICAgICAgICAgICAgICAgICAgICB3YnVmLCBzaXplb2Yod2J1Zikvc2l6ZW9mKHdjaGFyX3QpLCBOVUxMKSkgewotICAgICAgICB3Y3N0b21icyhtc2didWYsIHdidWYsIHNpemVvZihtc2didWYpLTEpOwotICAgICAgICBtc2dfZm9ybWF0dGVkID0gVFJVRTsKLSAgICAgIH0KLSAgICB9CiAjZWxzZQotICAgIGlmKEZvcm1hdE1lc3NhZ2VBKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUywKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBlcnIsIExBTkdfTkVVVFJBTCwKLSAgICAgICAgICAgICAgICAgICAgICBtc2didWYsIHNpemVvZihtc2didWYpLTEsIE5VTEwpKSB7Ci0gICAgICBtc2dfZm9ybWF0dGVkID0gVFJVRTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZihtc2dfZm9ybWF0dGVkKSB7Ci0gICAgICBtc2didWZbc2l6ZW9mKG1zZ2J1ZiktMV0gPSAnXDAnOwotICAgICAgLyogc3RyaXAgdHJhaWxpbmcgJ1xyXG4nIG9yICdcbicgKi8KLSAgICAgIHAgPSBzdHJyY2hyKG1zZ2J1ZiwgJ1xuJyk7Ci0gICAgICBpZihwICYmIChwIC0gbXNnYnVmKSA+PSAyKQotICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICBwID0gc3RycmNocihtc2didWYsICdccicpOwotICAgICAgaWYocCAmJiAocCAtIG1zZ2J1ZikgPj0gMSkKLSAgICAgICAgKnAgPSAnXDAnOwotICAgICAgbXNnID0gbXNnYnVmOwotICAgIH0KLSAgICBpZihtc2cpCi0gICAgICBtc25wcmludGYob3V0YnVmLCBvdXRtYXgsICIlcyAtICVzIiwgc3RyLCBtc2cpOwotICAgIGVsc2UKLSAgICAgIHN0cm5jcHkob3V0YnVmLCBzdHIsIG91dG1heCk7CisgIHsKKyAgICBjb25zdCBjaGFyICp0eHQgPSAoZXJyID09IEVSUk9SX1NVQ0NFU1MpID8gIk5vIGVycm9yIiA6ICJFcnJvciI7CisgICAgc3RybmNweShidWYsIHR4dCwgYnVmbGVuKTsKKyAgICBidWZbYnVmbGVuIC0gMV0gPSAnXDAnOwogICB9Ci0KLSNlbHNlCi0KLSAgaWYoZXJyID09IFNFQ19FX09LKQotICAgIHR4dCA9ICJObyBlcnJvciI7Ci0gIGVsc2UKLSAgICB0eHQgPSAiRXJyb3IiOwotCi0gIHN0cm5jcHkob3V0YnVmLCB0eHQsIG91dG1heCk7Ci0KICNlbmRpZgogCi0gIG91dGJ1ZltvdXRtYXhdID0gJ1wwJzsKLQogICBpZihlcnJubyAhPSBvbGRfZXJybm8pCiAgICAgZXJybm8gPSBvbGRfZXJybm87CiAKQEAgLTEwOTcsNiArODUzLDE1NyBAQAogICAgIFNldExhc3RFcnJvcihvbGRfd2luX2Vycik7CiAjZW5kaWYKIAotICByZXR1cm4gb3V0YnVmOworICByZXR1cm4gYnVmOworfQorI2VuZGlmIC8qIFdJTjMyIHx8IF9XSU4zMl9XQ0UgKi8KKworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKKy8qCisgKiBDdXJsX3NzcGlfc3RyZXJyb3I6CisgKiBWYXJpYW50IG9mIEN1cmxfc3RyZXJyb3IgaWYgdGhlIGVycm9yIGNvZGUgaXMgZGVmaW5pdGVseSBXaW5kb3dzIFNTUEkuCisgKi8KK2NvbnN0IGNoYXIgKkN1cmxfc3NwaV9zdHJlcnJvcihpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisjaWZkZWYgUFJFU0VSVkVfV0lORE9XU19FUlJPUl9DT0RFCisgIERXT1JEIG9sZF93aW5fZXJyID0gR2V0TGFzdEVycm9yKCk7CisjZW5kaWYKKyAgaW50IG9sZF9lcnJubyA9IGVycm5vOworICBjb25zdCBjaGFyICp0eHQ7CisKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU0VDX0VfT0s6CisgICAgICB0eHQgPSAiTm8gZXJyb3IiOworICAgICAgYnJlYWs7CisjZGVmaW5lIFNFQzJUWFQoc2VjKSBjYXNlIHNlYzogdHh0ID0gI3NlYzsgYnJlYWsKKyAgICBTRUMyVFhUKENSWVBUX0VfUkVWT0tFRCk7CisgICAgU0VDMlRYVChTRUNfRV9BTEdPUklUSE1fTUlTTUFUQ0gpOworICAgIFNFQzJUWFQoU0VDX0VfQkFEX0JJTkRJTkdTKTsKKyAgICBTRUMyVFhUKFNFQ19FX0JBRF9QS0dJRCk7CisgICAgU0VDMlRYVChTRUNfRV9CVUZGRVJfVE9PX1NNQUxMKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NBTk5PVF9JTlNUQUxMKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NBTk5PVF9QQUNLKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NFUlRfRVhQSVJFRCk7CisgICAgU0VDMlRYVChTRUNfRV9DRVJUX1VOS05PV04pOworICAgIFNFQzJUWFQoU0VDX0VfQ0VSVF9XUk9OR19VU0FHRSk7CisgICAgU0VDMlRYVChTRUNfRV9DT05URVhUX0VYUElSRUQpOworICAgIFNFQzJUWFQoU0VDX0VfQ1JPU1NSRUFMTV9ERUxFR0FUSU9OX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0RFQ1JZUFRfRkFJTFVSRSk7CisgICAgU0VDMlRYVChTRUNfRV9ERUxFR0FUSU9OX1BPTElDWSk7CisgICAgU0VDMlRYVChTRUNfRV9ERUxFR0FUSU9OX1JFUVVJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0RPV05HUkFERV9ERVRFQ1RFRCk7CisgICAgU0VDMlRYVChTRUNfRV9FTkNSWVBUX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfSUxMRUdBTF9NRVNTQUdFKTsKKyAgICBTRUMyVFhUKFNFQ19FX0lOQ09NUExFVEVfQ1JFREVOVElBTFMpOworICAgIFNFQzJUWFQoU0VDX0VfSU5DT01QTEVURV9NRVNTQUdFKTsKKyAgICBTRUMyVFhUKFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpOworICAgIFNFQzJUWFQoU0VDX0VfSU5URVJOQUxfRVJST1IpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9IQU5ETEUpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9QQVJBTUVURVIpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9UT0tFTik7CisgICAgU0VDMlRYVChTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRCk7CisgICAgU0VDMlRYVChTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRF9LREMpOworICAgIFNFQzJUWFQoU0VDX0VfS0RDX0NFUlRfRVhQSVJFRCk7CisgICAgU0VDMlRYVChTRUNfRV9LRENfQ0VSVF9SRVZPS0VEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0tEQ19JTlZBTElEX1JFUVVFU1QpOworICAgIFNFQzJUWFQoU0VDX0VfS0RDX1VOQUJMRV9UT19SRUZFUik7CisgICAgU0VDMlRYVChTRUNfRV9LRENfVU5LTk9XTl9FVFlQRSk7CisgICAgU0VDMlRYVChTRUNfRV9MT0dPTl9ERU5JRUQpOworICAgIFNFQzJUWFQoU0VDX0VfTUFYX1JFRkVSUkFMU19FWENFRURFRCk7CisgICAgU0VDMlRYVChTRUNfRV9NRVNTQUdFX0FMVEVSRUQpOworICAgIFNFQzJUWFQoU0VDX0VfTVVMVElQTEVfQUNDT1VOVFMpOworICAgIFNFQzJUWFQoU0VDX0VfTVVTVF9CRV9LREMpOworICAgIFNFQzJUWFQoU0VDX0VfTk9UX09XTkVSKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWSk7CisgICAgU0VDMlRYVChTRUNfRV9OT19DUkVERU5USUFMUyk7CisgICAgU0VDMlRYVChTRUNfRV9OT19JTVBFUlNPTkFUSU9OKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX0lQX0FERFJFU1NFUyk7CisgICAgU0VDMlRYVChTRUNfRV9OT19LRVJCX0tFWSk7CisgICAgU0VDMlRYVChTRUNfRV9OT19QQV9EQVRBKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX1M0VV9QUk9UX1NVUFBPUlQpOworICAgIFNFQzJUWFQoU0VDX0VfTk9fVEdUX1JFUExZKTsKKyAgICBTRUMyVFhUKFNFQ19FX09VVF9PRl9TRVFVRU5DRSk7CisgICAgU0VDMlRYVChTRUNfRV9QS0lOSVRfQ0xJRU5UX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfUEtJTklUX05BTUVfTUlTTUFUQ0gpOworICAgIFNFQzJUWFQoU0VDX0VfUE9MSUNZX05MVE1fT05MWSk7CisgICAgU0VDMlRYVChTRUNfRV9RT1BfTk9UX1NVUFBPUlRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfQyk7CisgICAgU0VDMlRYVChTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfS0RDKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NFQ1BLR19OT1RfRk9VTkQpOworICAgIFNFQzJUWFQoU0VDX0VfU0VDVVJJVFlfUU9TX0ZBSUxFRCk7CisgICAgU0VDMlRYVChTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUyk7CisgICAgU0VDMlRYVChTRUNfRV9TTUFSVENBUkRfQ0VSVF9FWFBJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NNQVJUQ0FSRF9DRVJUX1JFVk9LRUQpOworICAgIFNFQzJUWFQoU0VDX0VfU01BUlRDQVJEX0xPR09OX1JFUVVJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NUUk9OR19DUllQVE9fTk9UX1NVUFBPUlRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9UQVJHRVRfVU5LTk9XTik7CisgICAgU0VDMlRYVChTRUNfRV9USU1FX1NLRVcpOworICAgIFNFQzJUWFQoU0VDX0VfVE9PX01BTllfUFJJTkNJUEFMUyk7CisgICAgU0VDMlRYVChTRUNfRV9VTkZJTklTSEVEX0NPTlRFWFRfREVMRVRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTKTsKKyAgICBTRUMyVFhUKFNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OKTsKKyAgICBTRUMyVFhUKFNFQ19FX1VOU1VQUE9SVEVEX1BSRUFVVEgpOworICAgIFNFQzJUWFQoU0VDX0VfVU5UUlVTVEVEX1JPT1QpOworICAgIFNFQzJUWFQoU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEUpOworICAgIFNFQzJUWFQoU0VDX0VfV1JPTkdfUFJJTkNJUEFMKTsKKyAgICBTRUMyVFhUKFNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSk7CisgICAgU0VDMlRYVChTRUNfSV9DT01QTEVURV9ORUVERUQpOworICAgIFNFQzJUWFQoU0VDX0lfQ09OVEVYVF9FWFBJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19JX0NPTlRJTlVFX05FRURFRCk7CisgICAgU0VDMlRYVChTRUNfSV9JTkNPTVBMRVRFX0NSRURFTlRJQUxTKTsKKyAgICBTRUMyVFhUKFNFQ19JX0xPQ0FMX0xPR09OKTsKKyAgICBTRUMyVFhUKFNFQ19JX05PX0xTQV9DT05URVhUKTsKKyAgICBTRUMyVFhUKFNFQ19JX1JFTkVHT1RJQVRFKTsKKyAgICBTRUMyVFhUKFNFQ19JX1NJR05BVFVSRV9ORUVERUQpOworICAgIGRlZmF1bHQ6CisgICAgICB0eHQgPSAiVW5rbm93biBlcnJvciI7CisgIH0KKworICBpZihlcnIgPT0gU0VDX0VfSUxMRUdBTF9NRVNTQUdFKSB7CisgICAgbXNucHJpbnRmKGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAiU0VDX0VfSUxMRUdBTF9NRVNTQUdFICgweCUwOFgpIC0gVGhpcyBlcnJvciB1c3VhbGx5IG9jY3VycyAiCisgICAgICAgICAgICAgICJ3aGVuIGEgZmF0YWwgU1NML1RMUyBhbGVydCBpcyByZWNlaXZlZCAoZS5nLiBoYW5kc2hha2UgZmFpbGVkKS4iCisgICAgICAgICAgICAgICIgTW9yZSBkZXRhaWwgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBTeXN0ZW0gZXZlbnQgbG9nLiIsCisgICAgICAgICAgICAgIGVycik7CisgIH0KKyAgZWxzZSB7CisgICAgY2hhciB0eHRidWZbODBdOworICAgIGNoYXIgbXNnYnVmWzI1Nl07CisKKyAgICBtc25wcmludGYodHh0YnVmLCBzaXplb2YodHh0YnVmKSwgIiVzICgweCUwOFgpIiwgdHh0LCBlcnIpOworCisgICAgaWYoZ2V0X3dpbmFwaV9lcnJvcihlcnIsIG1zZ2J1Ziwgc2l6ZW9mKG1zZ2J1ZikpKQorICAgICAgbXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMgLSAlcyIsIHR4dGJ1ZiwgbXNnYnVmKTsKKyAgICBlbHNlIHsKKyAgICAgIHN0cm5jcHkoYnVmLCB0eHRidWYsIGJ1Zmxlbik7CisgICAgICBidWZbYnVmbGVuIC0gMV0gPSAnXDAnOworICAgIH0KKyAgfQorCisjZWxzZQorICBpZihlcnIgPT0gU0VDX0VfT0spCisgICAgdHh0ID0gIk5vIGVycm9yIjsKKyAgZWxzZQorICAgIHR4dCA9ICJFcnJvciI7CisgIHN0cm5jcHkoYnVmLCB0eHQsIGJ1Zmxlbik7CisgIGJ1ZltidWZsZW4gLSAxXSA9ICdcMCc7CisjZW5kaWYKKworICBpZihlcnJubyAhPSBvbGRfZXJybm8pCisgICAgZXJybm8gPSBvbGRfZXJybm87CisKKyNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKKyAgaWYob2xkX3dpbl9lcnIgIT0gR2V0TGFzdEVycm9yKCkpCisgICAgU2V0TGFzdEVycm9yKG9sZF93aW5fZXJyKTsKKyNlbmRpZgorCisgIHJldHVybiBidWY7CiB9CiAjZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmVycm9yLmgKaW5kZXggNjgzYjViNC4uYmFlOGY4OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNCw5ICsyNCwxMiBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogCi0jZGVmaW5lIFNUUkVSUk9SX0xFTiAxMjggLyogYSBzdWl0YWJsZSBsZW5ndGggKi8KKyNkZWZpbmUgU1RSRVJST1JfTEVOIDI1NiAvKiBhIHN1aXRhYmxlIGxlbmd0aCAqLwogCiBjb25zdCBjaGFyICpDdXJsX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorY29uc3QgY2hhciAqQ3VybF93aW5hcGlfc3RyZXJyb3IoRFdPUkQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworI2VuZGlmCiAjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQogY29uc3QgY2hhciAqQ3VybF9zc3BpX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cnRvay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKaW5kZXggNDYwZWI4Ny4uYmU4ZjQ4MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cnRvay5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmgKaW5kZXggOTBiODMxZS4uZTIyMWZhNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cnRvb2ZmdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9vZmZ0LmMKaW5kZXggNTQ2YTNmZi4uOTZlMzgyMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9vZmZ0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9vZmZ0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N5c3RlbV93aW4zMi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmMKaW5kZXggZjdmODE3ZC4uYjk1ODdiNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE2IC0gMjAxNywgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgLSAyMDIwLCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzYsNiArMzYsMTIgQEAKIExBUkdFX0lOVEVHRVIgQ3VybF9mcmVxOwogYm9vbCBDdXJsX2lzVmlzdGFPckdyZWF0ZXI7CiAKKy8qIEhhbmRsZSBvZiBpcGhscGFwcC5kbGwgKi8KK3N0YXRpYyBITU9EVUxFIHNfaElwSGxwQXBpRGxsID0gTlVMTDsKKworLyogUG9pbnRlciB0byB0aGUgaWZfbmFtZXRvaW5kZXggZnVuY3Rpb24gKi8KK0lGX05BTUVUT0lOREVYX0ZOIEN1cmxfaWZfbmFtZXRvaW5kZXggPSBOVUxMOworCiAvKiBDdXJsX3dpbjMyX2luaXQoKSBwZXJmb3JtcyB3aW4zMiBnbG9iYWwgaW5pdGlhbGl6YXRpb24gKi8KIENVUkxjb2RlIEN1cmxfd2luMzJfaW5pdChsb25nIGZsYWdzKQogewpAQCAtODksMjAgKzk1LDM3IEBACiAgIH0KICNlbmRpZgogCisgIHNfaElwSGxwQXBpRGxsID0gQ3VybF9sb2FkX2xpYnJhcnkoVEVYVCgiaXBobHBhcGkuZGxsIikpOworICBpZihzX2hJcEhscEFwaURsbCkgeworICAgIC8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgaWZfbmFtZXRvaW5kZXggZnVuY3Rpb24gKi8KKyAgICBJRl9OQU1FVE9JTkRFWF9GTiBwSWZOYW1lVG9JbmRleCA9CisgICAgICBDVVJMWF9GVU5DVElPTl9DQVNUKElGX05BTUVUT0lOREVYX0ZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoR2V0UHJvY0FkZHJlc3Moc19oSXBIbHBBcGlEbGwsICJpZl9uYW1ldG9pbmRleCIpKSk7CisKKyAgICBpZihwSWZOYW1lVG9JbmRleCkKKyAgICAgIEN1cmxfaWZfbmFtZXRvaW5kZXggPSBwSWZOYW1lVG9JbmRleDsKKyAgfQorCiAgIGlmKEN1cmxfdmVyaWZ5X3dpbmRvd3NfdmVyc2lvbig2LCAwLCBQTEFURk9STV9XSU5OVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fR1JFQVRFUl9USEFOX0VRVUFMKSkgewogICAgIEN1cmxfaXNWaXN0YU9yR3JlYXRlciA9IFRSVUU7Ci0gICAgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgmQ3VybF9mcmVxKTsKICAgfQogICBlbHNlCiAgICAgQ3VybF9pc1Zpc3RhT3JHcmVhdGVyID0gRkFMU0U7CiAKKyAgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgmQ3VybF9mcmVxKTsKICAgcmV0dXJuIENVUkxFX09LOwogfQogCiAvKiBDdXJsX3dpbjMyX2NsZWFudXAoKSBpcyB0aGUgb3Bwb3NpdGUgb2YgQ3VybF93aW4zMl9pbml0KCkgKi8KIHZvaWQgQ3VybF93aW4zMl9jbGVhbnVwKGxvbmcgaW5pdF9mbGFncykKIHsKKyAgaWYoc19oSXBIbHBBcGlEbGwpIHsKKyAgICBGcmVlTGlicmFyeShzX2hJcEhscEFwaURsbCk7CisgICAgc19oSXBIbHBBcGlEbGwgPSBOVUxMOworICAgIEN1cmxfaWZfbmFtZXRvaW5kZXggPSBOVUxMOworICB9CisKICNpZmRlZiBVU0VfV0lORE9XU19TU1BJCiAgIEN1cmxfc3NwaV9nbG9iYWxfY2xlYW51cCgpOwogI2VuZGlmCkBAIC0xMTQsMTAgKzEzNyw2IEBACiAgIH0KIH0KIAotI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkgfHwgKCFkZWZpbmVkKENVUkxfRElTQUJMRV9URUxORVQpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFVTRV9XSU5TT0NLKSkKLQotCiAjaWYgIWRlZmluZWQoTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpCiAjZGVmaW5lIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRIICAweDAwMDAwMDA4CiAjZW5kaWYKQEAgLTE0MCw4ICsxNTksNiBAQAogIyAgZGVmaW5lIExPQURMSUJBUllFWCAgICAiTG9hZExpYnJhcnlFeEEiCiAjZW5kaWYKIAotI2VuZGlmIC8qIFVTRV9XSU5ET1dTX1NTUEkgfHwgKCFDVVJMX0RJU0FCTEVfVEVMTkVUICYmIFVTRV9XSU5TT0NLKSAqLwotCiAvKgogICogQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKCkKICAqCkBAIC0zMzQsOSArMzUxLDYgQEAKICAgcmV0dXJuIG1hdGNoZWQ7CiB9CiAKLSNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpIHx8ICghZGVmaW5lZChDVVJMX0RJU0FCTEVfVEVMTkVUKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChVU0VfV0lOU09DSykpCi0KIC8qCiAgKiBDdXJsX2xvYWRfbGlicmFyeSgpCiAgKgpAQCAtMzUzLDYgKzM2Nyw3IEBACiAgKi8KIEhNT0RVTEUgQ3VybF9sb2FkX2xpYnJhcnkoTFBDVFNUUiBmaWxlbmFtZSkKIHsKKyNpZm5kZWYgQ1VSTF9XSU5ET1dTX0FQUAogICBITU9EVUxFIGhNb2R1bGUgPSBOVUxMOwogICBMT0FETElCUkFSWUVYX0ZOIHBMb2FkTGlicmFyeUV4ID0gTlVMTDsKIApAQCAtNDA3LDEwICs0MjIsMTIgQEAKICAgICAgIGZyZWUocGF0aCk7CiAgICAgfQogICB9Ci0KICAgcmV0dXJuIGhNb2R1bGU7CisjZWxzZQorICAvKiB0aGUgVW5pdmVyc2FsIFdpbmRvd3MgUGxhdGZvcm0gKFVXUCkgY2FuJ3QgZG8gdGhpcyAqLworICAodm9pZClmaWxlbmFtZTsKKyAgcmV0dXJuIE5VTEw7CisjZW5kaWYKIH0KIAotI2VuZGlmIC8qIFVTRV9XSU5ET1dTX1NTUEkgfHwgKCFDVVJMX0RJU0FCTEVfVEVMTkVUICYmIFVTRV9XSU5TT0NLKSAqLwotCiAjZW5kaWYgLyogV0lOMzIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N5c3RlbV93aW4zMi5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmgKaW5kZXggOTI2MzI4YS4uZDI4ODJmYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE2LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00OCwyMCArNDgsMjEgQEAKICAgUExBVEZPUk1fV0lOTlQKIH0gUGxhdGZvcm1JZGVudGlmaWVyOwogCisvKiBXZSB1c2Ugb3VyIG93biB0eXBlZGVmIGhlcmUgc2luY2Ugc29tZSBoZWFkZXJzIG1pZ2h0IGxhY2sgdGhpcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQoV0lOQVBJICpJRl9OQU1FVE9JTkRFWF9GTikoY29uc3QgY2hhciAqKTsKKworLyogVGhpcyBpcyB1c2VkIGluc3RlYWQgb2YgaWZfbmFtZXRvaW5kZXggaWYgYXZhaWxhYmxlIG9uIFdpbmRvd3MgKi8KK2V4dGVybiBJRl9OQU1FVE9JTkRFWF9GTiBDdXJsX2lmX25hbWV0b2luZGV4OworCiAvKiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IGlmIHdlIGFyZSBydW5uaW5nIG9uIGEgc3BlY2lmaWMgd2luZG93cyB2ZXJzaW9uICovCiBib29sIEN1cmxfdmVyaWZ5X3dpbmRvd3NfdmVyc2lvbihjb25zdCB1bnNpZ25lZCBpbnQgbWFqb3JWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1pbm9yVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBsYXRmb3JtSWRlbnRpZmllciBwbGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnNpb25Db25kaXRpb24gY29uZGl0aW9uKTsKIAotI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkgfHwgKCFkZWZpbmVkKENVUkxfRElTQUJMRV9URUxORVQpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFVTRV9XSU5TT0NLKSkKLQogLyogVGhpcyBpcyB1c2VkIHRvIGR5bmFtaWNhbGx5IGxvYWQgRExMcyAqLwogSE1PRFVMRSBDdXJsX2xvYWRfbGlicmFyeShMUENUU1RSIGZpbGVuYW1lKTsKIAotI2VuZGlmIC8qIFVTRV9XSU5ET1dTX1NTUEkgfHwgKCFDVVJMX0RJU0FCTEVfVEVMTkVUICYmIFVTRV9XSU5TT0NLKSAqLwotCiAjZW5kaWYgLyogV0lOMzIgKi8KIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NZU1RFTV9XSU4zMl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5jCmluZGV4IDk1NTI1NWMuLjRiZjRjNjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5jCkBAIC02OSwxMiArNjksMTIgQEAKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHgtPnN1YmVuZCA9IHgtPnN1YnBvaW50ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgQ1VSTF9TQl9DTEVBUih4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSBXSElMRV9GQUxTRQorICB9IHdoaWxlKDApCiAjZGVmaW5lIENVUkxfU0JfQUNDVU0oeCxjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZih4LT5zdWJwb2ludGVyIDwgKHgtPnN1YmJ1ZmZlciArIHNpemVvZih4LT5zdWJidWZmZXIpKSkgICBcCiAgICAgICAqeC0+c3VicG9pbnRlcisrID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IFdISUxFX0ZBTFNFCisgIH0gd2hpbGUoMCkKIAogI2RlZmluZSAgQ1VSTF9TQl9HRVQoeCkgKCgqeC0+c3VicG9pbnRlcisrKSYweGZmKQogI2RlZmluZSAgQ1VSTF9TQl9MRU4oeCkgKHgtPnN1YmVuZCAtIHgtPnN1YnBvaW50ZXIpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5oCmluZGV4IDY2OGE3OGEuLjQzMTQyN2YgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmMKaW5kZXggMjg5Y2RhMi4uMzQ2ZjI5MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuYwpAQCAtMTU3LDggKzE1Nyw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pOwogc3RhdGljIENVUkxjb2RlIHRmdHBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgaW50IHRmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgdGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIHRmdHBfdHJhbnNsYXRlX2NvZGUodGZ0cF9lcnJvcl90IGVycm9yKTsKIAogCkBAIC00MDQsMTMgKzQwMywxNCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBzaXplX3QgdGZ0cF9vcHRpb25fYWRkKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgc2l6ZV90IGNzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpvcHRpb24pCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9vcHRpb25fYWRkKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgc2l6ZV90ICpjc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpvcHRpb24pCiB7Ci0gIGlmKCggc3RybGVuKG9wdGlvbikgKyBjc2l6ZSArIDEpID4gKHNpemVfdClzdGF0ZS0+Ymxrc2l6ZSkKLSAgICByZXR1cm4gMDsKKyAgaWYoKCBzdHJsZW4ob3B0aW9uKSArICpjc2l6ZSArIDEpID4gKHNpemVfdClzdGF0ZS0+Ymxrc2l6ZSkKKyAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICBzdHJjcHkoYnVmLCBvcHRpb24pOwotICByZXR1cm4gc3RybGVuKG9wdGlvbikgKyAxOworICAqY3NpemUgKz0gc3RybGVuKG9wdGlvbikgKyAxOworICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKQEAgLTUxMSwyNiArNTExLDM4IEBACiAgICAgICBlbHNlCiAgICAgICAgIHN0cmNweShidWYsICIwIik7IC8qIHRoZSBkZXN0aW5hdGlvbiBpcyBsYXJnZSBlbm91Z2ggKi8KIAotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX1RTSVpFKTsKLSAgICAgIHNieXRlcyArPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLCBidWYpOworICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9UU0laRSk7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spCisgICAgICAgIHJlc3VsdCA9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgJnNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywgYnVmKTsKKwogICAgICAgLyogYWRkIGJsa3NpemUgb3B0aW9uICovCiAgICAgICBtc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgc3RhdGUtPnJlcXVlc3RlZF9ibGtzaXplKTsKLSAgICAgIHNieXRlcyArPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9CTEtTSVpFKTsKLSAgICAgIHNieXRlcyArPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLCBidWYpOworICAgICAgaWYocmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9CTEtTSVpFKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLCBidWYpOwogCiAgICAgICAvKiBhZGQgdGltZW91dCBvcHRpb24gKi8KICAgICAgIG1zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBzdGF0ZS0+cmV0cnlfdGltZSk7Ci0gICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZUUF9PUFRJT05fSU5URVJWQUwpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spCisgICAgICAgIHJlc3VsdCA9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgJnNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX0lOVEVSVkFMKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLCBidWYpOworCisgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlRGVFAgYnVmZmVyIHRvbyBzbWFsbCBmb3Igb3B0aW9ucyIpOworICAgICAgICBmcmVlKGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1RGVFBfSUxMRUdBTDsKKyAgICAgIH0KICAgICB9CiAKICAgICAvKiB0aGUgdHlwZWNhc2UgZm9yIHRoZSAzcmQgYXJndW1lbnQgaXMgbW9zdGx5IGZvciBzeXN0ZW1zIHRoYXQgZG8KQEAgLTk3Myw2ICs5ODUsNyBAQAogewogICB0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGU7CiAgIGludCBibGtzaXplOworICBpbnQgbmVlZF9ibGtzaXplOwogCiAgIGJsa3NpemUgPSBURlRQX0JMS1NJWkVfREVGQVVMVDsKIApAQCAtOTg3LDE1ICsxMDAwLDIwIEBACiAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICB9CiAKKyAgbmVlZF9ibGtzaXplID0gYmxrc2l6ZTsKKyAgLyogZGVmYXVsdCBzaXplIGlzIHRoZSBmYWxsYmFjayB3aGVuIG5vIE9BQ0sgaXMgcmVjZWl2ZWQgKi8KKyAgaWYobmVlZF9ibGtzaXplIDwgVEZUUF9CTEtTSVpFX0RFRkFVTFQpCisgICAgbmVlZF9ibGtzaXplID0gVEZUUF9CTEtTSVpFX0RFRkFVTFQ7CisKICAgaWYoIXN0YXRlLT5ycGFja2V0LmRhdGEpIHsKLSAgICBzdGF0ZS0+cnBhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisgICAgc3RhdGUtPnJwYWNrZXQuZGF0YSA9IGNhbGxvYygxLCBuZWVkX2Jsa3NpemUgKyAyICsgMik7CiAKICAgICBpZighc3RhdGUtPnJwYWNrZXQuZGF0YSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKICAgaWYoIXN0YXRlLT5zcGFja2V0LmRhdGEpIHsKLSAgICBzdGF0ZS0+c3BhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisgICAgc3RhdGUtPnNwYWNrZXQuZGF0YSA9IGNhbGxvYygxLCBuZWVkX2Jsa3NpemUgKyAyICsgMik7CiAKICAgICBpZighc3RhdGUtPnNwYWNrZXQuZGF0YSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMTAwOSw3ICsxMDI3LDcgQEAKICAgc3RhdGUtPnNvY2tmZCA9IHN0YXRlLT5jb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9TVEFSVDsKICAgc3RhdGUtPmVycm9yID0gVEZUUF9FUlJfTk9ORTsKLSAgc3RhdGUtPmJsa3NpemUgPSBibGtzaXplOworICBzdGF0ZS0+Ymxrc2l6ZSA9IFRGVFBfQkxLU0laRV9ERUZBVUxUOyAvKiBVbmxlc3MgdXBkYXRlZCBieSBPQUNLIHJlc3BvbnNlICovCiAgIHN0YXRlLT5yZXF1ZXN0ZWRfYmxrc2l6ZSA9IGJsa3NpemU7CiAKICAgKChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPmxvY2FsX2FkZHIpLT5zYV9mYW1pbHkgPQpAQCAtMTA4MiwxNCArMTEwMCw5IEBACiAgKiBUaGUgZ2V0c29jayBjYWxsYmFjawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCB0ZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgdGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIGlmKCFudW1zb2NrcykKLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLQogICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwotCiAgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApOwogfQogCkBAIC0xMzc2LDcgKzEzODksNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY2hhciAqdHlwZTsKIAotICBjb25uLT5zb2NrdHlwZSA9IFNPQ0tfREdSQU07ICAgLyogVURQIGRhdGFncmFtIGJhc2VkICovCisgIGNvbm4tPnRyYW5zcG9ydCA9IFRSTlNQUlRfVURQOwogCiAgIC8qIFRGVFAgVVJMcyBzdXBwb3J0IGFuIGV4dGVuc2lvbiBsaWtlICI7bW9kZT08dHlwZWNvZGU+IiB0aGF0CiAgICAqIHdlJ2xsIHRyeSB0byBnZXQgbm93ISAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5oCmluZGV4IDEzMzVmNjQuLjMzMzQ4MzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuYwppbmRleCBlMmJkN2ZkLi5lNzYxOTY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCw2ICsyOCw3IEBACiBleHRlcm4gTEFSR0VfSU5URUdFUiBDdXJsX2ZyZXE7CiBleHRlcm4gYm9vbCBDdXJsX2lzVmlzdGFPckdyZWF0ZXI7CiAKKy8qIEluIGNhc2Ugb2YgYnVnIGZpeCB0aGlzIGZ1bmN0aW9uIGhhcyBhIGNvdW50ZXJwYXJ0IGluIHRvb2xfdXRpbC5jICovCiBzdHJ1Y3QgY3VybHRpbWUgQ3VybF9ub3codm9pZCkKIHsKICAgc3RydWN0IGN1cmx0aW1lIG5vdzsKQEAgLTE3NCwxNCArMTc1LDYgQEAKIAogI2VuZGlmCiAKLSNpZiBTSVpFT0ZfVElNRV9UIDwgOAotI2RlZmluZSBUSU1FX01BWCBJTlRfTUFYCi0jZGVmaW5lIFRJTUVfTUlOIElOVF9NSU4KLSNlbHNlCi0jZGVmaW5lIFRJTUVfTUFYIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAotI2RlZmluZSBUSU1FX01JTiAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMCi0jZW5kaWYKLQogLyoKICAqIFJldHVybnM6IHRpbWUgZGlmZmVyZW5jZSBpbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBGb3IgdG9vIGxhcmdlIGRpZmZzIGl0CiAgKiByZXR1cm5zIG1heCB2YWx1ZS4KQEAgLTE5MSwxMCArMTg0LDEwIEBACiB0aW1lZGlmZl90IEN1cmxfdGltZWRpZmYoc3RydWN0IGN1cmx0aW1lIG5ld2VyLCBzdHJ1Y3QgY3VybHRpbWUgb2xkZXIpCiB7CiAgIHRpbWVkaWZmX3QgZGlmZiA9ICh0aW1lZGlmZl90KW5ld2VyLnR2X3NlYy1vbGRlci50dl9zZWM7Ci0gIGlmKGRpZmYgPj0gKFRJTUVfTUFYLzEwMDApKQotICAgIHJldHVybiBUSU1FX01BWDsKLSAgZWxzZSBpZihkaWZmIDw9IChUSU1FX01JTi8xMDAwKSkKLSAgICByZXR1cm4gVElNRV9NSU47CisgIGlmKGRpZmYgPj0gKFRJTUVESUZGX1RfTUFYLzEwMDApKQorICAgIHJldHVybiBUSU1FRElGRl9UX01BWDsKKyAgZWxzZSBpZihkaWZmIDw9IChUSU1FRElGRl9UX01JTi8xMDAwKSkKKyAgICByZXR1cm4gVElNRURJRkZfVF9NSU47CiAgIHJldHVybiBkaWZmICogMTAwMCArIChuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDA7CiB9CiAKQEAgLTIwNSw5ICsxOTgsOSBAQAogdGltZWRpZmZfdCBDdXJsX3RpbWVkaWZmX3VzKHN0cnVjdCBjdXJsdGltZSBuZXdlciwgc3RydWN0IGN1cmx0aW1lIG9sZGVyKQogewogICB0aW1lZGlmZl90IGRpZmYgPSAodGltZWRpZmZfdCluZXdlci50dl9zZWMtb2xkZXIudHZfc2VjOwotICBpZihkaWZmID49IChUSU1FX01BWC8xMDAwMDAwKSkKLSAgICByZXR1cm4gVElNRV9NQVg7Ci0gIGVsc2UgaWYoZGlmZiA8PSAoVElNRV9NSU4vMTAwMDAwMCkpCi0gICAgcmV0dXJuIFRJTUVfTUlOOworICBpZihkaWZmID49IChUSU1FRElGRl9UX01BWC8xMDAwMDAwKSkKKyAgICByZXR1cm4gVElNRURJRkZfVF9NQVg7CisgIGVsc2UgaWYoZGlmZiA8PSAoVElNRURJRkZfVF9NSU4vMTAwMDAwMCkpCisgICAgcmV0dXJuIFRJTUVESUZGX1RfTUlOOwogICByZXR1cm4gZGlmZiAqIDEwMDAwMDAgKyBuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWM7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmgKaW5kZXggOTY4NjdkNy4uNTNlMDYzNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuaApAQCAtMjQsMTMgKzI0LDEzIEBACiAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKLSNpZiBTSVpFT0ZfVElNRV9UIDwgOAotdHlwZWRlZiBpbnQgdGltZWRpZmZfdDsKLSNkZWZpbmUgQ1VSTF9GT1JNQVRfVElNRURJRkZfVCAiZCIKLSNlbHNlCisvKiBVc2UgYSBsYXJnZXIgdHlwZSBldmVuIGZvciAzMiBiaXQgdGltZV90IHN5c3RlbXMgc28gdGhhdCB3ZSBjYW4ga2VlcAorICAgbWljcm9zZWNvbmQgYWNjdXJhY3kgaW4gaXQgKi8KIHR5cGVkZWYgY3VybF9vZmZfdCB0aW1lZGlmZl90OwogI2RlZmluZSBDVVJMX0ZPUk1BVF9USU1FRElGRl9UIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKLSNlbmRpZgorCisjZGVmaW5lIFRJTUVESUZGX1RfTUFYIENVUkxfT0ZGX1RfTUFYCisjZGVmaW5lIFRJTUVESUZGX1RfTUlOIENVUkxfT0ZGX1RfTUlOCiAKIHN0cnVjdCBjdXJsdGltZSB7CiAgIHRpbWVfdCB0dl9zZWM7IC8qIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5jCmluZGV4IDUxNDMzMGUuLjgyNzA3NjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdHJhbnNmZXIuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTc2LDcgKzE3Niw3IEBACiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCiAgIGlmKGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID09IFRSQUlMRVJTX0lOSVRJQUxJWkVEKSB7CiAgICAgc3RydWN0IGN1cmxfc2xpc3QgKnRyYWlsZXJzID0gTlVMTDsKLSAgICBDVVJMY29kZSBjOworICAgIENVUkxjb2RlIHJlc3VsdDsKICAgICBpbnQgdHJhaWxlcnNfcmV0X2NvZGU7CiAKICAgICAvKiBhdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgY2FsbGJhY2sgZXhpc3RzCkBAIC0xOTUsMTcgKzE5NSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnRyYWlsZXJfZGF0YSk7CiAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwogICAgIGlmKHRyYWlsZXJzX3JldF9jb2RlID09IENVUkxfVFJBSUxFUkZVTkNfT0spIHsKLSAgICAgIGMgPSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyh0cmFpbGVycywgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmLCBkYXRhKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9jb21waWxlX3RyYWlsZXJzKHRyYWlsZXJzLCAmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgZmFpbGYoZGF0YSwgIm9wZXJhdGlvbiBhYm9ydGVkIGJ5IHRyYWlsaW5nIGhlYWRlcnMgY2FsbGJhY2siKTsKICAgICAgICpucmVhZHAgPSAwOwotICAgICAgYyA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgICAgICByZXN1bHQgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwogICAgIH0KLSAgICBpZihjICE9IENVUkxFX09LKSB7CisgICAgaWYocmVzdWx0KSB7CiAgICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmKTsKICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwodHJhaWxlcnMpOwotICAgICAgcmV0dXJuIGM7CisgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBpbmZvZihkYXRhLCAiU3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIHRyYWlsZXJzLlxyXG4iKTsKICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHRyYWlsZXJzKTsKQEAgLTIyNSw3ICsyMjYsNyBAQAogICBpZihkYXRhLT5zdGF0ZS50cmFpbGVyc19zdGF0ZSA9PSBUUkFJTEVSU19TRU5ESU5HKSB7CiAgICAgLyogaWYgd2UncmUgaGVyZSB0aGVuIHRoYXQgbWVhbnMgdGhhdCB3ZSBhbHJlYWR5IHNlbnQgdGhlIGxhc3QgZW1wdHkgY2h1bmsKICAgICAgICBidXQgd2UgZGlkbid0IHNlbmQgYSBmaW5hbCBDUiBMRiwgc28gd2Ugc2VudCAwIENSIExGLiBXZSB0aGVuIHN0YXJ0Ci0gICAgICAgcHVsbGluZyB0cmFpbGluZyBkYXRhIHVudGlsIHdlIMKyaGF2ZSBubyBtb3JlIGF0IHdoaWNoIHBvaW50IHdlCisgICAgICAgcHVsbGluZyB0cmFpbGluZyBkYXRhIHVudGlsIHdlIGhhdmUgbm8gbW9yZSBhdCB3aGljaCBwb2ludCB3ZQogICAgICAgIHNpbXBseSByZXR1cm4gdG8gdGhlIHByZXZpb3VzIHBvaW50IGluIHRoZSBzdGF0ZSBtYWNoaW5lIGFzIGlmCiAgICAgICAgbm90aGluZyBoYXBwZW5lZC4KICAgICAgICAqLwpAQCAtNDgzLDggKzQ4NCw5IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIGludCBkYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQorc3RhdGljIGludCBkYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKIHsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gZGF0YS0+Y29ubjsKICAgLyogaW4gdGhlIGNhc2Ugb2YgbGlic3NoMiwgd2UgY2FuIG5ldmVyIGJlIHJlYWxseSBzdXJlIHRoYXQgd2UgaGF2ZSBlbXB0aWVkCiAgICAgIGl0cyBpbnRlcm5hbCBidWZmZXJzIHNvIHdlIE1VU1QgYWx3YXlzIHRyeSB1bnRpbCB3ZSBnZXQgRUFHQUlOIGJhY2sgKi8KICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnByb3RvY29sJihDVVJMUFJPVE9fU0NQfENVUkxQUk9UT19TRlRQKSB8fApAQCAtNDk3LDcgKzQ5OSw5IEBACiAgICAgICAgVFJVRS4gVGhlIHRoaW5nIGlzIGlmIHdlIHJlYWQgZXZlcnl0aGluZywgdGhlbiBodHRwMl9yZWN2IHdvbid0CiAgICAgICAgYmUgY2FsbGVkIGFuZCB3ZSBjYW5ub3Qgc2lnbmFsIHRoZSBIVFRQLzIgc3RyZWFtIGhhcyBjbG9zZWQuIEFzCiAgICAgICAgYSB3b3JrYXJvdW5kLCB3ZSByZXR1cm4gbm9uemVybyBoZXJlIHRvIGNhbGwgaHR0cDJfcmVjdi4gKi8KLSAgICAoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJlBST1RPX0ZBTUlMWV9IVFRQKSAmJiBjb25uLT5odHRwdmVyc2lvbiA9PSAyMCk7CisgICAgKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCZQUk9UT19GQU1JTFlfSFRUUCkgJiYgY29ubi0+aHR0cHZlcnNpb24gPj0gMjApOworI2VsaWYgZGVmaW5lZChFTkFCTEVfUVVJQykKKyAgICBDdXJsX3NzbF9kYXRhX3BlbmRpbmcoY29ubiwgRklSU1RTT0NLRVQpIHx8IEN1cmxfcXVpY19kYXRhX3BlbmRpbmcoZGF0YSk7CiAjZWxzZQogICAgIEN1cmxfc3NsX2RhdGFfcGVuZGluZyhjb25uLCBGSVJTVFNPQ0tFVCk7CiAjZW5kaWYKQEAgLTYwMSw3ICs2MDUsNyBAQAogICAgICAgbnJlYWQgPSAwOwogICAgIH0KIAotICAgIGlmKChrLT5ieXRlY291bnQgPT0gMCkgJiYgKGstPndyaXRlYnl0ZWNvdW50ID09IDApKSB7CisgICAgaWYoIWstPmJ5dGVjb3VudCkgewogICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFRSQU5TRkVSKTsKICAgICAgIGlmKGstPmV4cDEwMCA+IEVYUDEwMF9TRU5EX0RBVEEpCiAgICAgICAgIC8qIHNldCB0aW1lIHN0YW1wIHRvIGNvbXBhcmUgd2l0aCB3aGVuIHdhaXRpbmcgZm9yIHRoZSAxMDAgKi8KQEAgLTc3NSwxNCArNzc5LDE0IEBACiAgICAgICAgICAqIGFuZCB3cml0ZXMgYXdheSB0aGUgZGF0YS4gVGhlIHJldHVybmVkICducmVhZCcgaG9sZHMgdGhlIG51bWJlcgogICAgICAgICAgKiBvZiBhY3R1YWwgZGF0YSBpdCB3cm90ZSB0byB0aGUgY2xpZW50LgogICAgICAgICAgKi8KLQorICAgICAgICBDVVJMY29kZSBleHRyYTsKICAgICAgICAgQ0hVTktjb2RlIHJlcyA9Ci0gICAgICAgICAgQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBrLT5zdHIsIG5yZWFkLCAmbnJlYWQpOworICAgICAgICAgIEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgay0+c3RyLCBucmVhZCwgJm5yZWFkLCAmZXh0cmEpOwogCiAgICAgICAgIGlmKENIVU5LRV9PSyA8IHJlcykgewotICAgICAgICAgIGlmKENIVU5LRV9XUklURV9FUlJPUiA9PSByZXMpIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgd3JpdGluZyBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgICAgICAgaWYoQ0hVTktFX1BBU1NUSFJVX0VSUk9SID09IHJlcykgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCByZWFkaW5nIHRoZSBjaHVua2VkLWVuY29kZWQgc3RyZWFtIik7CisgICAgICAgICAgICByZXR1cm4gZXh0cmE7CiAgICAgICAgICAgfQogICAgICAgICAgIGZhaWxmKGRhdGEsICIlcyBpbiBjaHVua2VkLWVuY29kaW5nIiwgQ3VybF9jaHVua2VkX3N0cmVycm9yKHJlcykpOwogICAgICAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOwpAQCAtOTE3LDcgKzkyMSw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAKLSAgfSB3aGlsZShkYXRhX3BlbmRpbmcoY29ubikgJiYgbWF4bG9vcHMtLSk7CisgIH0gd2hpbGUoZGF0YV9wZW5kaW5nKGRhdGEpICYmIG1heGxvb3BzLS0pOwogCiAgIGlmKG1heGxvb3BzIDw9IDApIHsKICAgICAvKiB3ZSBtYXJrIGl0IGFzIHJlYWQtYWdhaW4tcGxlYXNlICovCkBAIC05MzcsMTIgKzk0MSwxNCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBDVVJMY29kZSBkb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqaykKK0NVUkxjb2RlIEN1cmxfZG9uZV9zZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprKQogewogICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgLyogd2UncmUgZG9uZSB3cml0aW5nICovCiAKKyAgLyogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBoYW5kbGVyIHN0cnVjdCEgKi8KICAgQ3VybF9odHRwMl9kb25lX3NlbmRpbmcoY29ubik7CisgIEN1cmxfcXVpY19kb25lX3NlbmRpbmcoY29ubik7CiAKICAgaWYoY29ubi0+Yml0cy5yZXdpbmRhZnRlcnNlbmQpIHsKICAgICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3JlYWRyZXdpbmQoY29ubik7CkBAIC0xMDQ2LDcgKzEwNTIsNyBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGlmKG5yZWFkIDw9IDApIHsKLSAgICAgICAgcmVzdWx0ID0gZG9uZV9zZW5kaW5nKGNvbm4sIGspOworICAgICAgICByZXN1bHQgPSBDdXJsX2RvbmVfc2VuZGluZyhjb25uLCBrKTsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE2NCwxNCArMTE3MCwxNCBAQAogICAgICAgay0+dXBsb2FkX3ByZXNlbnQgPSAwOyAvKiBubyBtb3JlIGJ5dGVzIGxlZnQgKi8KIAogICAgICAgaWYoay0+dXBsb2FkX2RvbmUpIHsKLSAgICAgICAgcmVzdWx0ID0gZG9uZV9zZW5kaW5nKGNvbm4sIGspOworICAgICAgICByZXN1bHQgPSBDdXJsX2RvbmVfc2VuZGluZyhjb25uLCBrKTsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9CiAgICAgfQogCiAKLSAgfSBXSElMRV9GQUxTRTsgLyoganVzdCB0byBicmVhayBvdXQgZnJvbSEgKi8KKyAgfSB3aGlsZSgwKTsgLyoganVzdCB0byBicmVhayBvdXQgZnJvbSEgKi8KIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CkBAIC0xMjExLDcgKzEyMTcsOCBAQAogICBlbHNlCiAgICAgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7CiAKLSAgaWYoY29ubi0+ZGF0YS0+c3RhdGUuZHJhaW4pIHsKKyAgaWYoZGF0YS0+c3RhdGUuZHJhaW4pIHsKKyAgICBkYXRhLT5zdGF0ZS5kcmFpbi0tOwogICAgIHNlbGVjdF9yZXMgfD0gQ1VSTF9DU0VMRUNUX0lOOwogICAgIERFQlVHRihpbmZvZihkYXRhLCAiQ3VybF9yZWFkd3JpdGU6IGZvcmNpYmx5IHRvbGQgdG8gZHJhaW4gZGF0YVxuIikpOwogICB9CkBAIC0xMzU0LDIwICsxMzYxLDE0IEBACiAgKiBpbiB0aGUgcHJvcGVyIHN0YXRlIHRvIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCiAgKi8KIGludCBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcyBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCiB7CiAgIGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKICAgdW5zaWduZWQgc29ja2luZGV4ID0gMDsKIAogICBpZihjb25uLT5oYW5kbGVyLT5wZXJmb3JtX2dldHNvY2spCi0gICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnBlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrLCBudW1zb2Nrcyk7Ci0KLSAgaWYobnVtc29ja3MgPCAyKQotICAgIC8qIHNpbXBsZSBjaGVjayBidXQgd2UgbWlnaHQgbmVlZCB0d28gc2xvdHMgKi8KLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+cGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOwogCiAgIC8qIGRvbid0IGluY2x1ZGUgSE9MRCBhbmQgUEFVU0UgY29ubmVjdGlvbnMgKi8KICAgaWYoKGRhdGEtPnJlcS5rZWVwb24gJiBLRUVQX1JFQ1ZCSVRTKSA9PSBLRUVQX1JFQ1YpIHsKQEAgLTE1MTMsNiArMTUxNCw3IEBACiAgICAgICB9CiAgICAgfQogI2VuZGlmCisgICAgQ3VybF9odHRwMl9pbml0X3N0YXRlKCZkYXRhLT5zdGF0ZSk7CiAgIH0KIAogICByZXR1cm4gcmVzdWx0OwpAQCAtMTU5NCw3ICsxNTk2LDggQEAKIAogICBERUJVR0FTU0VSVChkYXRhLT5zdGF0ZS51aCk7CiAgIHVjID0gY3VybF91cmxfc2V0KGRhdGEtPnN0YXRlLnVoLCBDVVJMVVBBUlRfVVJMLCBuZXd1cmwsCi0gICAgICAgICAgICAgICAgICAgICh0eXBlID09IEZPTExPV19GQUtFKSA/IENVUkxVX05PTl9TVVBQT1JUX1NDSEVNRSA6IDApOworICAgICAgICAgICAgICAgICAgICAodHlwZSA9PSBGT0xMT1dfRkFLRSkgPyBDVVJMVV9OT05fU1VQUE9SVF9TQ0hFTUUgOgorICAgICAgICAgICAgICAgICAgICAoKHR5cGUgPT0gRk9MTE9XX1JFRElSKSA/IENVUkxVX1VSTEVOQ09ERSA6IDApICk7CiAgIGlmKHVjKSB7CiAgICAgaWYodHlwZSAhPSBGT0xMT1dfRkFLRSkKICAgICAgIHJldHVybiBDdXJsX3VjX3RvX2N1cmxjb2RlKHVjKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5oCmluZGV4IGE5YmZmNjMuLjY3ZmQ5MWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdHJhbnNmZXIuaApAQCAtMjksNyArMjksNiBAQAogdm9pZCBDdXJsX2luaXRfQ09OTkVDVChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogQ1VSTGNvZGUgQ3VybF9wcmV0cmFuc2ZlcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLUNVUkxjb2RlIEN1cmxfc2Vjb25kX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfcG9zdHRyYW5zZmVyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCiB0eXBlZGVmIGVudW0gewpAQCAtNDgsOCArNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCAqZG9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbWViYWNrKTsKIGludCBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIENVUkxjb2RlIEN1cmxfcmVhZHJld2luZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogQ1VSTGNvZGUgQ3VybF9maWxscmVhZGJ1ZmZlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHNpemVfdCBieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpucmVhZHApOwpAQCAtNTcsNiArNTUsOSBAQAogYm9vbCBDdXJsX21lZXRzX3RpbWVjb25kaXRpb24oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgdGltZV90IHRpbWVvZmRvYyk7CiBDVVJMY29kZSBDdXJsX2dldF91cGxvYWRfYnVmZmVyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCitDVVJMY29kZSBDdXJsX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayk7CisKIC8qIFRoaXMgc2V0cyB1cCBhIGZvcnRoY29taW5nIHRyYW5zZmVyICovCiB2b2lkCiBDdXJsX3NldHVwX3RyYW5zZmVyIChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmwuYwppbmRleCBjNDQxYWU3Li40N2ZjNjZhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmwuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmwuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaWZkZWYgSEFWRV9ORVRfSUZfSAogI2luY2x1ZGUgPG5ldC9pZi5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICisjaW5jbHVkZSA8SXBobHBhcGkuaD4KKyNlbmRpZgogI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNlbmRpZgotCiAjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCkBAIC05Myw2ICs5NSw3IEBACiAjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCiAjaW5jbHVkZSAiZ2V0aW5mby5oIgogI2luY2x1ZGUgInVybGFwaS1pbnQuaCIKKyNpbmNsdWRlICJzeXN0ZW1fd2luMzIuaCIKIAogLyogQW5kIG5vdyBmb3IgdGhlIHByb3RvY29scyAqLwogI2luY2x1ZGUgImZ0cC5oIgpAQCAtMTAzLDEzICsxMDYsMTIgQEAKICNpbmNsdWRlICJodHRwMi5oIgogI2luY2x1ZGUgImZpbGUuaCIKICNpbmNsdWRlICJjdXJsX2xkYXAuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgogI2luY2x1ZGUgImltYXAuaCIKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAiaW5ldF9udG9wLmgiCiAjaW5jbHVkZSAiaHR0cF9udGxtLmgiCi0jaW5jbHVkZSAic29ja3MuaCIKICNpbmNsdWRlICJjdXJsX3J0bXAuaCIKICNpbmNsdWRlICJnb3BoZXIuaCIKICNpbmNsdWRlICJodHRwX3Byb3h5LmgiCkBAIC0xMjYsNyArMTI4LDYgQEAKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCiBzdGF0aWMgdm9pZCBjb25uX2ZyZWUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLXN0YXRpYyB2b2lkIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKHN0cnVjdCBob3N0bmFtZSAqaG9zdCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9wcm90b2NvbF9mYW1pbHkodW5zaWduZWQgaW50IHByb3RvY29sKTsKIAogLyogU29tZSBwYXJ0cyBvZiB0aGUgY29kZSAoZS5nLiBjaHVua2VkIGVuY29kaW5nKSBhc3N1bWUgdGhpcyBidWZmZXIgaGFzIGF0CkBAIC0xODUsNyArMTg2LDcgQEAKICAgJkN1cmxfaGFuZGxlcl90ZnRwLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9TU0gpCisjaWYgZGVmaW5lZChVU0VfU1NIKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTSCkKICAgJkN1cmxfaGFuZGxlcl9zY3AsCiAjZW5kaWYKIApAQCAtMzE1LDEzICszMTYsMTcgQEAKICAqIHdoZW4gY3VybF9lYXN5X3BlcmZvcm0oKSBpcyBpbnZva2VkLgogICovCiAKLUNVUkxjb2RlIEN1cmxfY2xvc2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK0NVUkxjb2RlIEN1cmxfY2xvc2Uoc3RydWN0IEN1cmxfZWFzeSAqKmRhdGFwKQogewogICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbTsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YTsKIAotICBpZighZGF0YSkKKyAgaWYoIWRhdGFwIHx8ICEqZGF0YXApCiAgICAgcmV0dXJuIENVUkxFX09LOwogCisgIGRhdGEgPSAqZGF0YXA7CisgICpkYXRhcCA9IE5VTEw7CisKICAgQ3VybF9leHBpcmVfY2xlYXIoZGF0YSk7IC8qIHNodXQgb2ZmIHRpbWVycyAqLwogCiAgIG0gPSBkYXRhLT5tdWx0aTsKQEAgLTM3Miw5ICszNzcsOSBAQAogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7CiAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuaGVhZGVyYnVmZik7CiAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUudWxidWYpOwotICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgMSk7CisgIEN1cmxfZmx1c2hfY29va2llcyhkYXRhLCBUUlVFKTsKICNpZmRlZiBVU0VfQUxUU1ZDCi0gIEN1cmxfYWx0c3ZjX3NhdmUoZGF0YS0+YXNpLCBkYXRhLT5zZXQuc3RyW1NUUklOR19BTFRTVkNdKTsKKyAgQ3VybF9hbHRzdmNfc2F2ZShkYXRhLCBkYXRhLT5hc2ksIGRhdGEtPnNldC5zdHJbU1RSSU5HX0FMVFNWQ10pOwogICBDdXJsX2FsdHN2Y19jbGVhbnVwKGRhdGEtPmFzaSk7CiAgIGRhdGEtPmFzaSA9IE5VTEw7CiAjZW5kaWYKQEAgLTM5Nyw2ICs0MDIsMTIgQEAKICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9TSEFSRSk7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfRE9ICisgIGZyZWUoZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2gubWVtb3J5KTsKKyAgZnJlZShkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaC5tZW1vcnkpOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CisjZW5kaWYKKwogICAvKiBkZXN0cnVjdCB3aWxkY2FyZCBzdHJ1Y3R1cmVzIGlmIGl0IGlzIG5lZWRlZCAqLwogICBDdXJsX3dpbGRjYXJkX2R0b3IoJmRhdGEtPndpbGRjYXJkKTsKICAgQ3VybF9mcmVlc2V0KGRhdGEpOwpAQCAtNDM5LDcgKzQ1MCw3IEBACiAKICAgc2V0LT5odHRwcmVxID0gSFRUUFJFUV9HRVQ7IC8qIERlZmF1bHQgSFRUUCByZXF1ZXN0ICovCiAgIHNldC0+cnRzcHJlcSA9IFJUU1BSRVFfT1BUSU9OUzsgLyogRGVmYXVsdCBSVFNQIHJlcXVlc3QgKi8KLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZJTEUKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAogICBzZXQtPmZ0cF91c2VfZXBzdiA9IFRSVUU7ICAgLyogRlRQIGRlZmF1bHRzIHRvIEVQU1Ygb3BlcmF0aW9ucyAqLwogICBzZXQtPmZ0cF91c2VfZXBydCA9IFRSVUU7ICAgLyogRlRQIGRlZmF1bHRzIHRvIEVQUlQgb3BlcmF0aW9ucyAqLwogICBzZXQtPmZ0cF91c2VfcHJldCA9IEZBTFNFOyAgLyogbWFpbmx5IHVzZWZ1bCBmb3IgZHJmdHBkIHNlcnZlcnMgKi8KQEAgLTQ4NSw5ICs0OTYsOCBAQAogICAgICBkZWZpbmUgc2luY2Ugd2UgaW50ZXJuYWxseSBvbmx5IHVzZSB0aGUgbG93ZXIgMTYgYml0cyBmb3IgdGhlIHBhc3NlZAogICAgICBpbiBiaXRtYXNrIHRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBwcml2YXRlIGJpdHMgKi8KICAgc2V0LT5hbGxvd2VkX3Byb3RvY29scyA9IENVUkxQUk9UT19BTEw7Ci0gIHNldC0+cmVkaXJfcHJvdG9jb2xzID0gQ1VSTFBST1RPX0FMTCAmICAvKiBBbGwgZXhjZXB0IEZJTEUsIFNDUCBhbmQgU01CICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH4oQ1VSTFBST1RPX0ZJTEUgfCBDVVJMUFJPVE9fU0NQIHwgQ1VSTFBST1RPX1NNQiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFBST1RPX1NNQlMpOworICBzZXQtPnJlZGlyX3Byb3RvY29scyA9IENVUkxQUk9UT19IVFRQIHwgQ1VSTFBST1RPX0hUVFBTIHwgQ1VSTFBST1RPX0ZUUCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFBST1RPX0ZUUFM7CiAKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAgIC8qCkBAIC01NDQsNyArNTU0LDcgQEAKICAgc2V0LT51cGtlZXBfaW50ZXJ2YWxfbXMgPSBDVVJMX1VQS0VFUF9JTlRFUlZBTF9ERUZBVUxUOwogICBzZXQtPm1heGNvbm5lY3RzID0gREVGQVVMVF9DT05OQ0FDSEVfU0laRTsgLyogZm9yIGVhc3kgaGFuZGxlcyAqLwogICBzZXQtPm1heGFnZV9jb25uID0gMTE4OwotICBzZXQtPmh0dHAwOV9hbGxvd2VkID0gVFJVRTsKKyAgc2V0LT5odHRwMDlfYWxsb3dlZCA9IEZBTFNFOwogICBzZXQtPmh0dHB2ZXJzaW9uID0KICNpZmRlZiBVU0VfTkdIVFRQMgogICAgIENVUkxfSFRUUF9WRVJTSU9OXzJUTFMKQEAgLTYxMSw4ICs2MjEsNiBAQAogCiAgICAgICBkYXRhLT5wcm9ncmVzcy5mbGFncyB8PSBQR1JTX0hJREU7CiAgICAgICBkYXRhLT5zdGF0ZS5jdXJyZW50X3NwZWVkID0gLTE7IC8qIGluaXQgdG8gbmVnYXRpdmUgPT0gaW1wb3NzaWJsZSAqLwotCi0gICAgICBDdXJsX2h0dHAyX2luaXRfc3RhdGUoJmRhdGEtPnN0YXRlKTsKICAgICB9CiAgIH0KIApAQCAtNjY1LDcgKzY3Myw3IEBACiB9CiAjZWxzZSAgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAvKiBVc2UgImRvLW5vdGhpbmciIG1hY3JvIGluc3RlYWQgb2YgZnVuY3Rpb24gd2hlbiB3b3JrYXJvdW5kIG5vdCB1c2VkICovCi0jZGVmaW5lIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGMpIGRvIHt9IFdISUxFX0ZBTFNFCisjZGVmaW5lIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGMpIGRvIHt9IHdoaWxlKDApCiAjZW5kaWYgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAKIApAQCAtNzA1LDE0ICs3MTMsMTQgQEAKICAgaWYoIWNvbm4pCiAgICAgcmV0dXJuOwogCi0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmNvbm5fdG9faG9zdCk7Ci0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5odHRwX3Byb3h5Lmhvc3QpOwotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5odHRwX3Byb3h5Lmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5zb2Nrc19wcm94eS5ob3N0KTsKIAogICBDdXJsX3NhZmVmcmVlKGNvbm4tPnVzZXIpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPnBhc3N3ZCk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+b2F1dGhfYmVhcmVyKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5zYXNsX2F1dGh6aWQpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPm9wdGlvbnMpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkudXNlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+c29ja3NfcHJveHkudXNlcik7CkBAIC04NzMsMTEgKzg4MSw1OSBAQAogCiAgIHJldHVybiBGQUxTRTsKIH0KKworc3RhdGljIGJvb2wKK3NvY2tzX3Byb3h5X2luZm9fbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgcHJveHlfaW5mbyogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHJveHlfaW5mbyogbmVlZGxlKQoreworICBpZighcHJveHlfaW5mb19tYXRjaGVzKGRhdGEsIG5lZWRsZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIHRoZSB1c2VyIGluZm9ybWF0aW9uIGlzIGNhc2Utc2Vuc2l0aXZlCisgICAgIG9yIGF0IGxlYXN0IGl0IGlzIG5vdCBkZWZpbmVkIGFzIGNhc2UtaW5zZW5zaXRpdmUKKyAgICAgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjEgKi8KKyAgaWYoKGRhdGEtPnVzZXIgPT0gTlVMTCkgIT0gKG5lZWRsZS0+dXNlciA9PSBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIC8qIGN1cmxfc3RyZXF1YWwgZG9lcyBhIGNhc2UgaW5zZW50aXZlIGNvbXBhcmlzb24sIHNvIGRvIG5vdCB1c2UgaXQgaGVyZSEgKi8KKyAgaWYoZGF0YS0+dXNlciAmJgorICAgICBuZWVkbGUtPnVzZXIgJiYKKyAgICAgc3RyY21wKGRhdGEtPnVzZXIsIG5lZWRsZS0+dXNlcikgIT0gMCkKKyAgICByZXR1cm4gRkFMU0U7CisgIGlmKChkYXRhLT5wYXNzd2QgPT0gTlVMTCkgIT0gKG5lZWRsZS0+cGFzc3dkID09IE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKyAgLyogY3VybF9zdHJlcXVhbCBkb2VzIGEgY2FzZSBpbnNlbnRpdmUgY29tcGFyaXNvbiwgc28gZG8gbm90IHVzZSBpdCBoZXJlISAqLworICBpZihkYXRhLT5wYXNzd2QgJiYKKyAgICAgbmVlZGxlLT5wYXNzd2QgJiYKKyAgICAgc3RyY21wKGRhdGEtPnBhc3N3ZCwgbmVlZGxlLT5wYXNzd2QpICE9IDApCisgICAgcmV0dXJuIEZBTFNFOworICByZXR1cm4gVFJVRTsKK30KICNlbHNlCiAvKiBkaXNhYmxlZCwgd29uJ3QgZ2V0IGNhbGxlZCAqLwogI2RlZmluZSBwcm94eV9pbmZvX21hdGNoZXMoeCx5KSBGQUxTRQorI2RlZmluZSBzb2Nrc19wcm94eV9pbmZvX21hdGNoZXMoeCx5KSBGQUxTRQogI2VuZGlmCiAKKy8qIEEgY29ubmVjdGlvbiBoYXMgdG8gaGF2ZSBiZWVuIGlkbGUgZm9yIGEgc2hvcnRlciB0aW1lIHRoYW4gJ21heGFnZV9jb25uJyB0bworICAgYmUgc3ViamVjdCBmb3IgcmV1c2UuIFRoZSBzdWNjZXNzIHJhdGUgaXMganVzdCB0b28gbG93IGFmdGVyIHRoaXMuICovCisKK3N0YXRpYyBib29sIGNvbm5fbWF4YWdlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93KQoreworICBpZighY29ubi0+ZGF0YSkgeworICAgIHRpbWVkaWZmX3QgaWRsZXRpbWUgPSBDdXJsX3RpbWVkaWZmKG5vdywgY29ubi0+bGFzdHVzZWQpOworICAgIGlkbGV0aW1lIC89IDEwMDA7IC8qIGludGVnZXIgc2Vjb25kcyBpcyBmaW5lICovCisKKyAgICBpZihpZGxldGltZSA+IGRhdGEtPnNldC5tYXhhZ2VfY29ubikgeworICAgICAgaW5mb2YoZGF0YSwgIlRvbyBvbGQgY29ubmVjdGlvbiAoJWxkIHNlY29uZHMpLCBkaXNjb25uZWN0IGl0XG4iLAorICAgICAgICAgICAgaWRsZXRpbWUpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICB9CisgIHJldHVybiBGQUxTRTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBnaXZlbiBjb25uZWN0aW9uIGlzIGRlYWQgYW5kIGV4dHJhY3RzIGl0IGZyb20KICAqIHRoZSBjb25uZWN0aW9uIGNhY2hlIGlmIHNvLgpAQCAtODk0LDcgKzk1MCwxMSBAQAogICAgIC8qIFRoZSBjaGVjayBmb3IgYSBkZWFkIHNvY2tldCBtYWtlcyBzZW5zZSBvbmx5IGlmIHRoZSBjb25uZWN0aW9uIGlzbid0IGluCiAgICAgICAgdXNlICovCiAgICAgYm9vbCBkZWFkOwotICAgIGlmKGNvbm4tPmhhbmRsZXItPmNvbm5lY3Rpb25fY2hlY2spIHsKKyAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKyAgICBpZihjb25uX21heGFnZShkYXRhLCBjb25uLCBub3cpKSB7CisgICAgICBkZWFkID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZihjb25uLT5oYW5kbGVyLT5jb25uZWN0aW9uX2NoZWNrKSB7CiAgICAgICAvKiBUaGUgcHJvdG9jb2wgaGFzIGEgc3BlY2lhbCBtZXRob2QgZm9yIGNoZWNraW5nIHRoZSBzdGF0ZSBvZiB0aGUKICAgICAgICAgIGNvbm5lY3Rpb24uIFVzZSBpdCB0byBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLiAqLwogICAgICAgdW5zaWduZWQgaW50IHN0YXRlOwpAQCAtOTQ2LDcgKzEwMDYsOCBAQAogc3RhdGljIHZvaWQgcHJ1bmVfZGVhZF9jb25uZWN0aW9ucyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKLSAgdGltZV90IGVsYXBzZWQgPSBDdXJsX3RpbWVkaWZmKG5vdywgZGF0YS0+c3RhdGUuY29ubl9jYWNoZS0+bGFzdF9jbGVhbnVwKTsKKyAgdGltZWRpZmZfdCBlbGFwc2VkID0KKyAgICBDdXJsX3RpbWVkaWZmKG5vdywgZGF0YS0+c3RhdGUuY29ubl9jYWNoZS0+bGFzdF9jbGVhbnVwKTsKIAogICBpZihlbGFwc2VkID49IDEwMDBMKSB7CiAgICAgc3RydWN0IHBydW5lZGVhZCBwcnVuZTsKQEAgLTk2MSwyNSArMTAyMiw2IEBACiAgIH0KIH0KIAotLyogQSBjb25uZWN0aW9uIGhhcyB0byBoYXZlIGJlZW4gaWRsZSBmb3IgYSBzaG9ydGVyIHRpbWUgdGhhbiAnbWF4YWdlX2Nvbm4nIHRvCi0gICBiZSBzdWJqZWN0IGZvciByZXVzZS4gVGhlIHN1Y2Nlc3MgcmF0ZSBpcyBqdXN0IHRvbyBsb3cgYWZ0ZXIgdGhpcy4gKi8KLQotc3RhdGljIGJvb2wgY29ubl9tYXhhZ2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsdGltZSBub3cpCi17Ci0gIGlmKCFjb25uLT5kYXRhKSB7Ci0gICAgdGltZWRpZmZfdCBpZGxldGltZSA9IEN1cmxfdGltZWRpZmYobm93LCBjb25uLT5sYXN0dXNlZCk7Ci0gICAgaWRsZXRpbWUgLz0gMTAwMDsgLyogaW50ZWdlciBzZWNvbmRzIGlzIGZpbmUgKi8KLQotICAgIGlmKGlkbGV0aW1lLzEwMDAgPiBkYXRhLT5zZXQubWF4YWdlX2Nvbm4pIHsKLSAgICAgIGluZm9mKGRhdGEsICJUb28gb2xkIGNvbm5lY3Rpb24gKCVsZCBzZWNvbmRzKSwgZGlzY29ubmVjdCBpdFxuIiwKLSAgICAgICAgICAgIGlkbGV0aW1lKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotICByZXR1cm4gRkFMU0U7Ci19CiAvKgogICogR2l2ZW4gb25lIGZpbGxlZCBpbiBjb25uZWN0aW9uIHN0cnVjdCAobmFtZWQgbmVlZGxlKSwgdGhpcyBmdW5jdGlvbiBzaG91bGQKICAqIGRldGVjdCBpZiB0aGVyZSBhbHJlYWR5IGlzIG9uZSB0aGF0IGhhcyBhbGwgdGhlIHNpZ25pZmljYW50IGRldGFpbHMKQEAgLTEwMDMsNyArMTA0NSw3IEBACiAgIGJvb2wgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gRkFMU0U7CiAgIGJvb2wgY2FubXVsdGlwbGV4ID0gSXNNdWx0aXBsZXhpbmdQb3NzaWJsZShkYXRhLCBuZWVkbGUpOwogICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlOwotICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKyAgY29uc3QgY2hhciAqaG9zdGJ1bmRsZTsKIAogI2lmZGVmIFVTRV9OVExNCiAgIGJvb2wgd2FudE5UTE1odHRwID0gKChkYXRhLT5zdGF0ZS5hdXRoaG9zdC53YW50ICYKQEAgLTEwMjAsMjEgKzEwNjIsMjAgQEAKIAogICAvKiBMb29rIHVwIHRoZSBidW5kbGUgd2l0aCBhbGwgdGhlIGNvbm5lY3Rpb25zIHRvIHRoaXMgcGFydGljdWxhciBob3N0LgogICAgICBMb2NrcyB0aGUgY29ubmVjdGlvbiBjYWNoZSwgYmV3YXJlIG9mIGVhcmx5IHJldHVybnMhICovCi0gIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKG5lZWRsZSwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKG5lZWRsZSwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3RidW5kbGUpOwogICBpZihidW5kbGUpIHsKICAgICAvKiBNYXggcGlwZSBsZW5ndGggaXMgemVybyAodW5saW1pdGVkKSBmb3IgbXVsdGlwbGV4ZWQgY29ubmVjdGlvbnMgKi8KICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOwogCiAgICAgaW5mb2YoZGF0YSwgIkZvdW5kIGJ1bmRsZSBmb3IgaG9zdCAlczogJXAgWyVzXVxuIiwKLSAgICAgICAgICAobmVlZGxlLT5iaXRzLmNvbm5fdG9faG9zdCA/IG5lZWRsZS0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICBuZWVkbGUtPmhvc3QubmFtZSksICh2b2lkICopYnVuZGxlLAotICAgICAgICAgIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVggPwotICAgICAgICAgICAiY2FuIG11bHRpcGxleCIgOiAic2VyaWFsbHkiKSk7CisgICAgICAgICAgaG9zdGJ1bmRsZSwgKHZvaWQgKilidW5kbGUsIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVggPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBtdWx0aXBsZXgiIDogInNlcmlhbGx5IikpOwogCiAgICAgLyogV2UgY2FuJ3QgbXVsdGlwbGV4IGlmIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHNlcnZlciAqLwogICAgIGlmKGNhbm11bHRpcGxleCkgewogICAgICAgaWYoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfVU5LTk9XTikgewotICAgICAgICBpZigoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfVU5LTk9XTikgJiYgZGF0YS0+c2V0LnBpcGV3YWl0KSB7CisgICAgICAgIGlmKGRhdGEtPnNldC5waXBld2FpdCkgewogICAgICAgICAgIGluZm9mKGRhdGEsICJTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxleCB5ZXQsIHdhaXRcbiIpOwogICAgICAgICAgICp3YWl0cGlwZSA9IFRSVUU7CiAgICAgICAgICAgQ3VybF9jb25uY2FjaGVfdW5sb2NrKGRhdGEpOwpAQCAtMTA1OCw3ICsxMDk5LDcgQEAKICAgICBjdXJyID0gYnVuZGxlLT5jb25uX2xpc3QuaGVhZDsKICAgICB3aGlsZShjdXJyKSB7CiAgICAgICBib29sIG1hdGNoID0gRkFMU0U7Ci0gICAgICBzaXplX3QgbXVsdGlwbGV4ZWQ7CisgICAgICBzaXplX3QgbXVsdGlwbGV4ZWQgPSAwOwogCiAgICAgICAvKgogICAgICAgICogTm90ZSB0aGF0IGlmIHdlIHVzZSBhIEhUVFAgcHJveHkgaW4gbm9ybWFsIG1vZGUgKG5vIHR1bm5lbGluZyksIHdlCkBAIC0xMDY3LDIyICsxMTA4LDE1IEBACiAgICAgICBjaGVjayA9IGN1cnItPnB0cjsKICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogCi0gICAgICBpZihjaGVjay0+Yml0cy5jb25uZWN0X29ubHkpCi0gICAgICAgIC8qIGNvbm5lY3Qtb25seSBjb25uZWN0aW9ucyB3aWxsIG5vdCBiZSByZXVzZWQgKi8KKyAgICAgIGlmKGNoZWNrLT5iaXRzLmNvbm5lY3Rfb25seSB8fCBjaGVjay0+Yml0cy5jbG9zZSkKKyAgICAgICAgLyogY29ubmVjdC1vbmx5IG9yIHRvLWJlLWNsb3NlZCBjb25uZWN0aW9ucyB3aWxsIG5vdCBiZSByZXVzZWQgKi8KICAgICAgICAgY29udGludWU7CiAKLSAgICAgIGlmKGNvbm5fbWF4YWdlKGRhdGEsIGNoZWNrLCBub3cpIHx8IGV4dHJhY3RfaWZfZGVhZChjaGVjaywgZGF0YSkpIHsKLSAgICAgICAgLyogZGlzY29ubmVjdCBpdCAqLwotICAgICAgICAodm9pZClDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY2hlY2ssIC8qIGRlYWRfY29ubmVjdGlvbiAqL1RSVUUpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgbXVsdGlwbGV4ZWQgPSBDT05OX0lOVVNFKGNoZWNrKSAmJgotICAgICAgICAoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfTVVMVElQTEVYKTsKKyAgICAgIGlmKGJ1bmRsZS0+bXVsdGl1c2UgPT0gQlVORExFX01VTFRJUExFWCkKKyAgICAgICAgbXVsdGlwbGV4ZWQgPSBDT05OX0lOVVNFKGNoZWNrKTsKIAogICAgICAgaWYoY2FubXVsdGlwbGV4KSB7Ci0gICAgICAgIGlmKGNoZWNrLT5iaXRzLnByb3RvY29ubnN0YXJ0ICYmIGNoZWNrLT5iaXRzLmNsb3NlKQotICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICA7CiAgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgaWYobXVsdGlwbGV4ZWQpIHsKQEAgLTExMDIsMTIgKzExMzYsOSBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmKChjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0gPT0gQ1VSTF9TT0NLRVRfQkFEKSB8fAotICAgICAgICAgICBjaGVjay0+Yml0cy5jbG9zZSkgewotICAgICAgICAgIGlmKCFjaGVjay0+Yml0cy5jbG9zZSkKLSAgICAgICAgICAgIGZvdW5kUGVuZGluZ0NhbmRpZGF0ZSA9IFRSVUU7Ci0gICAgICAgICAgLyogRG9uJ3QgcGljayBhIGNvbm5lY3Rpb24gdGhhdCBoYXNuJ3QgY29ubmVjdGVkIHlldCBvciB0aGF0IGlzIGdvaW5nCi0gICAgICAgICAgICAgdG8gZ2V0IGNsb3NlZC4gKi8KKyAgICAgICAgaWYoY2hlY2stPnNvY2tbRklSU1RTT0NLRVRdID09IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICAgIGZvdW5kUGVuZGluZ0NhbmRpZGF0ZSA9IFRSVUU7CisgICAgICAgICAgLyogRG9uJ3QgcGljayBhIGNvbm5lY3Rpb24gdGhhdCBoYXNuJ3QgY29ubmVjdGVkIHlldCAqLwogICAgICAgICAgIGluZm9mKGRhdGEsICJDb25uZWN0aW9uICMlbGQgaXNuJ3Qgb3BlbiBlbm91Z2gsIGNhbid0IHJldXNlXG4iLAogICAgICAgICAgICAgICAgIGNoZWNrLT5jb25uZWN0aW9uX2lkKTsKICAgICAgICAgICBjb250aW51ZTsKQEAgLTExMzksOCArMTE3MCw5IEBACiAgICAgICAgICBuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAhPSBjaGVjay0+Yml0cy5zb2Nrc3Byb3h5KQogICAgICAgICBjb250aW51ZTsKIAotICAgICAgaWYobmVlZGxlLT5iaXRzLnNvY2tzcHJveHkgJiYgIXByb3h5X2luZm9fbWF0Y2hlcygmbmVlZGxlLT5zb2Nrc19wcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrLT5zb2Nrc19wcm94eSkpCisgICAgICBpZihuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAmJgorICAgICAgICAhc29ja3NfcHJveHlfaW5mb19tYXRjaGVzKCZuZWVkbGUtPnNvY2tzX3Byb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjay0+c29ja3NfcHJveHkpKQogICAgICAgICBjb250aW51ZTsKIAogICAgICAgaWYobmVlZGxlLT5iaXRzLmNvbm5fdG9faG9zdCAhPSBjaGVjay0+Yml0cy5jb25uX3RvX2hvc3QpCkBAIC0xMTgwLDEzICsxMjEyLDE0IEBACiAgICAgICAgIH0KICAgICAgIH0KIAorICAgICAgREVCVUdBU1NFUlQoIWNoZWNrLT5kYXRhIHx8IEdPT0RfRUFTWV9IQU5ETEUoY2hlY2stPmRhdGEpKTsKKwogICAgICAgaWYoIWNhbm11bHRpcGxleCAmJiBjaGVjay0+ZGF0YSkKICAgICAgICAgLyogdGhpcyByZXF1ZXN0IGNhbid0IGJlIG11bHRpcGxleGVkIGJ1dCB0aGUgY2hlY2tlZCBjb25uZWN0aW9uIGlzCiAgICAgICAgICAgIGFscmVhZHkgaW4gdXNlIHNvIHdlIHNraXAgaXQgKi8KICAgICAgICAgY29udGludWU7CiAKLSAgICAgIGlmKENPTk5fSU5VU0UoY2hlY2spICYmIGNoZWNrLT5kYXRhICYmCi0gICAgICAgICAoY2hlY2stPmRhdGEtPm11bHRpICE9IG5lZWRsZS0+ZGF0YS0+bXVsdGkpKQorICAgICAgaWYoY2hlY2stPmRhdGEgJiYgKGNoZWNrLT5kYXRhLT5tdWx0aSAhPSBuZWVkbGUtPmRhdGEtPm11bHRpKSkKICAgICAgICAgLyogdGhpcyBjb3VsZCBiZSBzdWJqZWN0IGZvciBtdWx0aXBsZXggdXNlLCBidXQgb25seSBpZiB0aGV5IGJlbG9uZyB0bwogICAgICAgICAgKiB0aGUgc2FtZSBtdWx0aSBoYW5kbGUgKi8KICAgICAgICAgY29udGludWU7CkBAIC0xMjM1LDcgKzEyNjgsNyBAQAogICAgICAgICAgICAgIG5lZWRsZS0+Y29ubl90b19wb3J0ID09IGNoZWNrLT5jb25uX3RvX3BvcnQpICYmCiAgICAgICAgICAgIHN0cmNhc2Vjb21wYXJlKG5lZWRsZS0+aG9zdC5uYW1lLCBjaGVjay0+aG9zdC5uYW1lKSAmJgogICAgICAgICAgICBuZWVkbGUtPnJlbW90ZV9wb3J0ID09IGNoZWNrLT5yZW1vdGVfcG9ydCkgewotICAgICAgICAgIC8qIFRoZSBzY2hlbWVzIG1hdGNoIG9yIHRoZSB0aGUgcHJvdG9jb2wgZmFtaWx5IGlzIHRoZSBzYW1lIGFuZCB0aGUKKyAgICAgICAgICAvKiBUaGUgc2NoZW1lcyBtYXRjaCBvciB0aGUgcHJvdG9jb2wgZmFtaWx5IGlzIHRoZSBzYW1lIGFuZCB0aGUKICAgICAgICAgICAgICBwcmV2aW91cyBjb25uZWN0aW9uIHdhcyBUTFMgdXBncmFkZWQsIGFuZCB0aGUgaG9zdG5hbWUgYW5kIGhvc3QKICAgICAgICAgICAgICBwb3J0IG1hdGNoICovCiAgICAgICAgICAgaWYobmVlZGxlLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKSB7CkBAIC0xMjc2LDggKzEzMDksMTQgQEAKICAgICAgICAgICAgcGFydHdheSB0aHJvdWdoIGEgaGFuZHNoYWtlISkgKi8KICAgICAgICAgaWYod2FudE5UTE1odHRwKSB7CiAgICAgICAgICAgaWYoc3RyY21wKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8Ci0gICAgICAgICAgICAgc3RyY21wKG5lZWRsZS0+cGFzc3dkLCBjaGVjay0+cGFzc3dkKSkKKyAgICAgICAgICAgICBzdHJjbXAobmVlZGxlLT5wYXNzd2QsIGNoZWNrLT5wYXNzd2QpKSB7CisKKyAgICAgICAgICAgIC8qIHdlIHByZWZlciBhIGNyZWRlbnRpYWwgbWF0Y2gsIGJ1dCB0aGlzIGlzIGF0IGxlYXN0IGEgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgcmV1c2VkIGFuZCAidXBncmFkZWQiIHRvIE5UTE0gKi8KKyAgICAgICAgICAgIGlmKGNoZWNrLT5odHRwX250bG1fc3RhdGUgPT0gTlRMTVNUQVRFX05PTkUpCisgICAgICAgICAgICAgIGNob3NlbiA9IGNoZWNrOwogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoY2hlY2stPmh0dHBfbnRsbV9zdGF0ZSAhPSBOVExNU1RBVEVfTk9ORSkgewogICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgdXNpbmcgTlRMTSBhdXRoIGJ1dCB3ZSBkb24ndCB3YW50IE5UTE0gKi8KQEAgLTEzMzcsNiArMTM3NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZXhlZCk7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihtdWx0aXBsZXhlZCA+PQorICAgICAgICAgICAgICAgICAgICBDdXJsX211bHRpX21heF9jb25jdXJyZW50X3N0cmVhbXMobmVlZGxlLT5kYXRhLT5tdWx0aSkpIHsKKyAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgImNsaWVudCBzaWRlIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgcmVhY2hlZCIKKyAgICAgICAgICAgICAgICAgICAgIiwgc2tpcCAoJXp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGV4ZWQpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAvKiBXaGVuIG5vdCBtdWx0aXBsZXhlZCwgd2UgaGF2ZSBhIG1hdGNoIGhlcmUhICovCkBAIC0xMzcxLDU4ICsxNDE3LDYgQEAKICAgcmV0dXJuIEZBTFNFOyAvKiBubyBtYXRjaGluZyBjb25uZWN0aW5nIGV4aXN0cyAqLwogfQogCi0vKiBhZnRlciBhIFRDUCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBoYXMgYmVlbiB2ZXJpZmllZCwgdGhpcyBmdW5jdGlvbiBkb2VzCi0gICB0aGUgbmV4dCBtYWdpYyBzdGVwLgotCi0gICBOb3RlOiB0aGlzIGZ1bmN0aW9uJ3Mgc3ViLWZ1bmN0aW9ucyBjYWxsIGZhaWxmKCkKLQotKi8KLUNVUkxjb2RlIEN1cmxfY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KSB7Ci0jaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQotICAgIC8qIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCAoRlRQKSwgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IgotICAgICAqIGJ1dCBpZ25vcmUgdGhlICJjb25uZWN0IHRvIHBvcnQiICh1c2UgdGhlIHNlY29uZGFyeSBwb3J0KQotICAgICAqLwotICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0ID0gY29ubi0+Yml0cy5odHRwcHJveHkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zZWNvbmRhcnlob3N0bmFtZSA6IGNvbm4tPmhvc3QubmFtZTsKLSAgICBjb25zdCBpbnQgcG9ydCA9IGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gKGludCljb25uLT5odHRwX3Byb3h5LnBvcnQgOgotICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/IGNvbm4tPnNlY29uZGFyeV9wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19wb3J0ID8gY29ubi0+Y29ubl90b19wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0OwotICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eV9jb25uZWN0aW5nID0gVFJVRTsKLSAgICBzd2l0Y2goY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlKSB7Ci0gICAgY2FzZSBDVVJMUFJPWFlfU09DS1M1OgotICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRToKLSAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M1KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBzb2NraW5kZXgsIGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzQ6Ci0gICAgY2FzZSBDVVJMUFJPWFlfU09DS1M0QToKLSAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M0KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGhvc3QsIHBvcnQsIHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInVua25vd24gcHJveHl0eXBlIG9wdGlvbiBnaXZlbiIpOwotICAgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0gLyogc3dpdGNoIHByb3h5dHlwZSAqLwotICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eV9jb25uZWN0aW5nID0gRkFMU0U7Ci0jZWxzZQotICAodm9pZClzb2NraW5kZXg7Ci0jZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCiAvKgogICogdmVyYm9zZWNvbm5lY3QoKSBkaXNwbGF5cyB2ZXJib3NlIGluZm9ybWF0aW9uIGFmdGVyIGEgY29ubmVjdAogICovCkBAIC0xNDM5LDEzNCArMTQzMywxNyBAQAogfQogI2VuZGlmCiAKLWludCBDdXJsX3Byb3RvY29sX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQotewotICBpZihjb25uLT5oYW5kbGVyLT5wcm90b19nZXRzb2NrKQotICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5wcm90b19nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7Ci0gIC8qIEJhY2t1cCBnZXRzb2NrIGxvZ2ljLiBTaW5jZSB0aGVyZSBpcyBhIGxpdmUgc29ja2V0IGluIHVzZSwgd2UgbXVzdCB3YWl0Ci0gICAgIGZvciBpdCBvciBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB3YXRjaGluZyB3aGVuIHRoZSBtdWx0aV9zb2NrZXQgQVBJIGlzCi0gICAgIHVzZWQuICovCi0gIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0gIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApIHwgR0VUU09DS19XUklURVNPQ0soMCk7Ci19Ci0KLWludCBDdXJsX2RvaW5nX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQotewotICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmRvaW5nX2dldHNvY2spCi0gICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPmRvaW5nX2dldHNvY2soY29ubiwgc29ja3MsIG51bXNvY2tzKTsKLSAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci19Ci0KLS8qCi0gKiBXZSBhcmUgZG9pbmcgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdGluZyBhbmQgdGhpcyBpcyBiZWluZyBjYWxsZWQgb3ZlciBhbmQKLSAqIG92ZXIgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIHVudGlsIHRoZSBjb25uZWN0aW9uIHBoYXNlIGlzIGRvbmUgb24KLSAqIHByb3RvY29sIGxheWVyLgotICovCi0KLUNVUkxjb2RlIEN1cmxfcHJvdG9jb2xfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKSB7Ci0gICAgKmRvbmUgPSBGQUxTRTsKLSAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKGNvbm4sIGRvbmUpOwotICB9Ci0gIGVsc2UKLSAgICAqZG9uZSA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFdlIGFyZSBET0lORyB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZCBvdmVyIGZyb20gdGhlIG11bHRpIGludGVyZmFjZQotICogdW50aWwgdGhlIERPSU5HIHBoYXNlIGlzIGRvbmUgb24gcHJvdG9jb2wgbGF5ZXIuCi0gKi8KLQotQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+ZG9pbmcpIHsKLSAgICAqZG9uZSA9IEZBTFNFOwotICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPmRvaW5nKGNvbm4sIGRvbmUpOwotICB9Ci0gIGVsc2UKLSAgICAqZG9uZSA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFdlIGhhdmUgZGlzY292ZXJlZCB0aGF0IHRoZSBUQ1AgY29ubmVjdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsLCB3ZSBjYW4gbm93Ci0gKiBwcm9jZWVkIHdpdGggc29tZSBhY3Rpb24uCi0gKgotICovCi1DVVJMY29kZSBDdXJsX3Byb3RvY29sX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnByb3RvY29sX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gICpwcm90b2NvbF9kb25lID0gRkFMU0U7Ci0KLSAgaWYoY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXSAmJiBjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0KSB7Ci0gICAgLyogV2UgYWxyZWFkeSBhcmUgY29ubmVjdGVkLCBnZXQgYmFjay4gVGhpcyBtYXkgaGFwcGVuIHdoZW4gdGhlIGNvbm5lY3QKLSAgICAgICB3b3JrZWQgZmluZSBpbiB0aGUgZmlyc3QgY2FsbCwgbGlrZSB3aGVuIHdlIGNvbm5lY3QgdG8gYSBsb2NhbCBzZXJ2ZXIKLSAgICAgICBvciBwcm94eS4gTm90ZSB0aGF0IHdlIGRvbid0IGtub3cgaWYgdGhlIHByb3RvY29sIGlzIGFjdHVhbGx5IGRvbmUuCi0KLSAgICAgICBVbmxlc3MgdGhpcyBwcm90b2NvbCBkb2Vzbid0IGhhdmUgYW55IHByb3RvY29sLWNvbm5lY3QgY2FsbGJhY2ssIGFzCi0gICAgICAgdGhlbiB3ZSBrbm93IHdlJ3JlIGRvbmUuICovCi0gICAgaWYoIWNvbm4tPmhhbmRsZXItPmNvbm5lY3RpbmcpCi0gICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7Ci0KLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gIH0KLQotICBpZighY29ubi0+Yml0cy5wcm90b2Nvbm5zdGFydCkgewotCi0gICAgcmVzdWx0ID0gQ3VybF9wcm94eV9jb25uZWN0KGNvbm4sIEZJUlNUU09DS0VUKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYoQ09OTkVDVF9GSVJTVFNPQ0tFVF9QUk9YWV9TU0woKSkKLSAgICAgIC8qIHdhaXQgZm9yIEhUVFBTIHByb3h5IFNTTCBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZSAqLwotICAgICAgcmV0dXJuIENVUkxFX09LOwotCi0gICAgaWYoY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYgY29ubi0+Yml0cy5odHRwcHJveHkgJiYKLSAgICAgICBDdXJsX2Nvbm5lY3Rfb25nb2luZyhjb25uKSkKLSAgICAgIC8qIHdoZW4gdXNpbmcgYW4gSFRUUCB0dW5uZWwgcHJveHksIGF3YWl0IGNvbXBsZXRlIHR1bm5lbCBlc3RhYmxpc2htZW50Ci0gICAgICAgICBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLiBSZXR1cm4gQ1VSTEVfT0sgc28gd2UnbGwgYmUgY2FsbGVkIGFnYWluICovCi0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICBpZihjb25uLT5oYW5kbGVyLT5jb25uZWN0X2l0KSB7Ci0gICAgICAvKiBpcyB0aGVyZSBhIHByb3RvY29sLXNwZWNpZmljIGNvbm5lY3QoKSBwcm9jZWR1cmU/ICovCi0KLSAgICAgIC8qIENhbGwgdGhlIHByb3RvY29sLXNwZWNpZmljIGNvbm5lY3QgZnVuY3Rpb24gKi8KLSAgICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPmNvbm5lY3RfaXQoY29ubiwgcHJvdG9jb2xfZG9uZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICpwcm90b2NvbF9kb25lID0gVFJVRTsKLQotICAgIC8qIGl0IGhhcyBzdGFydGVkLCBwb3NzaWJseSBldmVuIGNvbXBsZXRlZCBidXQgdGhhdCBrbm93bGVkZ2UgaXNuJ3Qgc3RvcmVkCi0gICAgICAgaW4gdGhpcyBiaXQhICovCi0gICAgaWYoIXJlc3VsdCkKLSAgICAgIGNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsgLyogcGFzcyBiYWNrIHN0YXR1cyAqLwotfQotCiAvKgogICogSGVscGVycyBmb3IgSUROQSBjb252ZXJzaW9ucy4KICAqLwotc3RhdGljIGJvb2wgaXNfQVNDSUlfbmFtZShjb25zdCBjaGFyICpob3N0bmFtZSkKK2Jvb2wgQ3VybF9pc19BU0NJSV9uYW1lKGNvbnN0IGNoYXIgKmhvc3RuYW1lKQogeworICAvKiBnZXQgYW4gVU5TSUdORUQgbG9jYWwgdmVyc2lvbiBvZiB0aGUgcG9pbnRlciAqLwogICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopaG9zdG5hbWU7CiAKKyAgaWYoIWhvc3RuYW1lKSAvKiBiYWQgaW5wdXQsIGNvbnNpZGVyIGl0IEFTQ0lJISAqLworICAgIHJldHVybiBUUlVFOworCiAgIHdoaWxlKCpjaCkgewogICAgIGlmKCpjaCsrICYgMHg4MCkKICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTE1OTEsOCArMTQ2OCw4IEBACiAvKgogICogUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IElETiBjb252ZXJzaW9uIG9mIGhvc3RuYW1lCiAgKi8KLXN0YXRpYyBDVVJMY29kZSBpZG5jb252ZXJ0X2hvc3RuYW1lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKK0NVUkxjb2RlIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RuYW1lICpob3N0KQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKIApAQCAtMTYwNyw3ICsxNDg0LDcgQEAKICAgaG9zdC0+ZGlzcG5hbWUgPSBob3N0LT5uYW1lOwogCiAgIC8qIENoZWNrIG5hbWUgZm9yIG5vbi1BU0NJSSBhbmQgY29udmVydCBob3N0bmFtZSB0byBBQ0UgZm9ybSBpZiB3ZSBjYW4gKi8KLSAgaWYoIWlzX0FTQ0lJX25hbWUoaG9zdC0+bmFtZSkpIHsKKyAgaWYoIUN1cmxfaXNfQVNDSUlfbmFtZShob3N0LT5uYW1lKSkgewogI2lmZGVmIFVTRV9MSUJJRE4yCiAgICAgaWYoaWRuMl9jaGVja192ZXJzaW9uKElETjJfVkVSU0lPTikpIHsKICAgICAgIGNoYXIgKmFjZV9ob3N0bmFtZSA9IE5VTEw7CkBAIC0xNjQwLDcgKzE1MTcsOSBAQAogICAgICAgaG9zdC0+bmFtZSA9IGhvc3QtPmVuY2FsbG9jOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gY29udmVydCAlcyB0byBBQ0U7XG4iLCBob3N0LT5uYW1lKTsKKyAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIGNvbnZlcnQgJXMgdG8gQUNFOyAlc1xuIiwgaG9zdC0+bmFtZSwKKyAgICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgICB9CiAjZWxzZQpAQCAtMTY1Myw3ICsxNTMyLDcgQEAKIC8qCiAgKiBGcmVlcyBkYXRhIGFsbG9jYXRlZCBieSBpZG5jb252ZXJ0X2hvc3RuYW1lKCkKICAqLwotc3RhdGljIHZvaWQgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoc3RydWN0IGhvc3RuYW1lICpob3N0KQordm9pZCBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKIHsKICNpZiBkZWZpbmVkKFVTRV9MSUJJRE4yKQogICBpZihob3N0LT5lbmNhbGxvYykgewpAQCAtMTY3MCwxMyArMTU0OSw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgbGxpc3RfZHRvcih2b2lkICp1c2VyLCB2b2lkICplbGVtZW50KQotewotICAodm9pZCl1c2VyOwotICAodm9pZCllbGVtZW50OwotICAvKiBEbyBub3RoaW5nICovCi19Ci0KIC8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBjb25uZWN0ZGF0YSBvYmplY3QuCiAgKi8KQEAgLTE3ODEsMTQgKzE2NTMsMTYgQEAKICAgY29ubi0+cHJveHlfc3NsX2NvbmZpZy52ZXJpZnlob3N0ID0gZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3Q7CiAgIGNvbm4tPmlwX3ZlcnNpb24gPSBkYXRhLT5zZXQuaXB2ZXI7CiAgIGNvbm4tPmJpdHMuY29ubmVjdF9vbmx5ID0gZGF0YS0+c2V0LmNvbm5lY3Rfb25seTsKKyAgY29ubi0+dHJhbnNwb3J0ID0gVFJOU1BSVF9UQ1A7IC8qIG1vc3Qgb2YgdGhlbSBhcmUgVENQIHN0cmVhbXMgKi8KIAogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiBkZWZpbmVkKFVTRV9OVExNKSAmJiBcCiAgICAgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCi0gIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IENVUkxfU09DS0VUX0JBRDsKKyAgY29ubi0+bnRsbS5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGNvbm4tPnByb3h5bnRsbS5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CiAjZW5kaWYKIAogICAvKiBJbml0aWFsaXplIHRoZSBlYXN5IGhhbmRsZSBsaXN0ICovCi0gIEN1cmxfbGxpc3RfaW5pdCgmY29ubi0+ZWFzeXEsIChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBDdXJsX2xsaXN0X2luaXQoJmNvbm4tPmVhc3lxLCBOVUxMKTsKIAogI2lmZGVmIEhBVkVfR1NTQVBJCiAgIGNvbm4tPmRhdGFfcHJvdCA9IFBST1RfQ0xFQVI7CkBAIC0xODA3LDYgKzE2ODEsNyBAQAogICAgICBpdCBtYXkgbGl2ZSBvbiB3aXRob3V0ICh0aGlzIHNwZWNpZmljKSBDdXJsX2Vhc3kgKi8KICAgY29ubi0+ZmNsb3Nlc29ja2V0ID0gZGF0YS0+c2V0LmZjbG9zZXNvY2tldDsKICAgY29ubi0+Y2xvc2Vzb2NrZXRfY2xpZW50ID0gZGF0YS0+c2V0LmNsb3Nlc29ja2V0X2NsaWVudDsKKyAgY29ubi0+bGFzdHVzZWQgPSBDdXJsX25vdygpOyAvKiB1c2VkIG5vdyAqLwogCiAgIHJldHVybiBjb25uOwogICBlcnJvcjoKQEAgLTE4ODQsNiArMTc1OSw1MCBAQAogfQogCiAvKgorICogSWYgdGhlIFVSTCB3YXMgc2V0IHdpdGggYW4gSVB2NiBudW1lcmljYWwgYWRkcmVzcyB3aXRoIGEgem9uZSBpZCBwYXJ0LCBzZXQKKyAqIHRoZSBzY29wZV9pZCBiYXNlZCBvbiB0aGF0IQorICovCisKK3N0YXRpYyB2b2lkIHpvbmVmcm9tX3VybChDVVJMVSAqdWgsIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY2hhciAqem9uZWlkOworICBDVVJMVWNvZGUgdWM7CisKKyAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9aT05FSUQsICZ6b25laWQsIDApOworCisgIGlmKCF1YyAmJiB6b25laWQpIHsKKyAgICBjaGFyICplbmRwOworICAgIHVuc2lnbmVkIGxvbmcgc2NvcGUgPSBzdHJ0b3VsKHpvbmVpZCwgJmVuZHAsIDEwKTsKKyAgICBpZighKmVuZHAgJiYgKHNjb3BlIDwgVUlOVF9NQVgpKQorICAgICAgLyogQSBwbGFpbiBudW1iZXIsIHVzZSBpdCBkaXJlY3RseSBhcyBhIHNjb3BlIGlkLiAqLworICAgICAgY29ubi0+c2NvcGVfaWQgPSAodW5zaWduZWQgaW50KXNjb3BlOworI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkKKyAgICBlbHNlIHsKKyNlbGlmIGRlZmluZWQoV0lOMzIpCisgICAgZWxzZSBpZihDdXJsX2lmX25hbWV0b2luZGV4KSB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkgfHwgZGVmaW5lZChXSU4zMikKKyAgICAgIC8qIFpvbmUgaWRlbnRpZmllciBpcyBub3QgbnVtZXJpYyAqLworICAgICAgdW5zaWduZWQgaW50IHNjb3BlaWR4ID0gMDsKKyNpZiBkZWZpbmVkKFdJTjMyKQorICAgICAgc2NvcGVpZHggPSBDdXJsX2lmX25hbWV0b2luZGV4KHpvbmVpZCk7CisjZWxzZQorICAgICAgc2NvcGVpZHggPSBpZl9uYW1ldG9pbmRleCh6b25laWQpOworI2VuZGlmCisgICAgICBpZighc2NvcGVpZHgpCisgICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJJbnZhbGlkIHpvbmVpZDogJXM7ICVzXG4iLCB6b25laWQsCisgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBlbHNlCisgICAgICAgIGNvbm4tPnNjb3BlX2lkID0gc2NvcGVpZHg7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfSUZfTkFNRVRPSU5ERVggfHwgV0lOMzIgKi8KKworICAgIGZyZWUoem9uZWlkKTsKKyAgfQorfQorCisvKgogICogUGFyc2UgVVJMIGFuZCBmaWxsIGluIHRoZSByZWxldmFudCBtZW1iZXJzIG9mIHRoZSBjb25uZWN0aW9uIHN0cnVjdC4KICAqLwogc3RhdGljIENVUkxjb2RlIHBhcnNldXJsYW5kZmlsbGNvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKQEAgLTE5MjEsNiArMTg0MCw3IEBACiAgIH0KIAogICBpZighZGF0YS0+c2V0LnVoKSB7CisgICAgY2hhciAqbmV3dXJsOwogICAgIHVjID0gY3VybF91cmxfc2V0KHVoLCBDVVJMVVBBUlRfVVJMLCBkYXRhLT5jaGFuZ2UudXJsLAogICAgICAgICAgICAgICAgICAgICBDVVJMVV9HVUVTU19TQ0hFTUUgfAogICAgICAgICAgICAgICAgICAgICBDVVJMVV9OT05fU1VQUE9SVF9TQ0hFTUUgfApAQCAtMTkzMSw2ICsxODUxLDE1IEBACiAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgImN1cmxfdXJsX3NldCByZWplY3RlZCAlc1xuIiwgZGF0YS0+Y2hhbmdlLnVybCkpOwogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwogICAgIH0KKworICAgIC8qIGFmdGVyIGl0IHdhcyBwYXJzZWQsIGdldCB0aGUgZ2VuZXJhdGVkIG5vcm1hbGl6ZWQgdmVyc2lvbiAqLworICAgIHVjID0gY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfVVJMLCAmbmV3dXJsLCAwKTsKKyAgICBpZih1YykKKyAgICAgIHJldHVybiBDdXJsX3VjX3RvX2N1cmxjb2RlKHVjKTsKKyAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKQorICAgICAgZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKKyAgICBkYXRhLT5jaGFuZ2UudXJsID0gbmV3dXJsOworICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBUUlVFOwogICB9CiAKICAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9TQ0hFTUUsICZkYXRhLT5zdGF0ZS51cC5zY2hlbWUsIDApOwpAQCAtMTk5MSw1NSArMTkyMCwyNyBAQAogICB9CiAgIGVsc2UgewogICAgIHVuc2lnbmVkIGxvbmcgcG9ydCA9IHN0cnRvdWwoZGF0YS0+c3RhdGUudXAucG9ydCwgTlVMTCwgMTApOwotICAgIGNvbm4tPnJlbW90ZV9wb3J0ID0gY3VybHhfdWx0b3VzKHBvcnQpOworICAgIGNvbm4tPnBvcnQgPSBjb25uLT5yZW1vdGVfcG9ydCA9IGN1cmx4X3VsdG91cyhwb3J0KTsKICAgfQogCiAgICh2b2lkKWN1cmxfdXJsX2dldCh1aCwgQ1VSTFVQQVJUX1FVRVJZLCAmZGF0YS0+c3RhdGUudXAucXVlcnksIDApOwogCiAgIGhvc3RuYW1lID0gZGF0YS0+c3RhdGUudXAuaG9zdG5hbWU7Ci0gIGlmKCFob3N0bmFtZSkKLSAgICAvKiB0aGlzIGlzIGZvciBmaWxlOi8vIHRyYW5zZmVycywgZ2V0IGEgZHVtbXkgbWFkZSAqLwotICAgIGhvc3RuYW1lID0gKGNoYXIgKikiIjsKLQotICBpZihob3N0bmFtZVswXSA9PSAnWycpIHsKKyAgaWYoaG9zdG5hbWUgJiYgaG9zdG5hbWVbMF0gPT0gJ1snKSB7CiAgICAgLyogVGhpcyBsb29rcyBsaWtlIGFuIElQdjYgYWRkcmVzcyBsaXRlcmFsLiBTZWUgaWYgdGhlcmUgaXMgYW4gYWRkcmVzcwogICAgICAgIHNjb3BlLiAqLwotICAgIGNoYXIgKnpvbmVpZDsKICAgICBzaXplX3QgaGxlbjsKLSAgICB1YyA9IGN1cmxfdXJsX2dldCh1aCwgQ1VSTFVQQVJUX1pPTkVJRCwgJnpvbmVpZCwgMCk7CiAgICAgY29ubi0+Yml0cy5pcHY2X2lwID0gVFJVRTsKLQogICAgIC8qIGN1dCBvZmYgdGhlIGJyYWNrZXRzISAqLwogICAgIGhvc3RuYW1lKys7CiAgICAgaGxlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAgICAgaG9zdG5hbWVbaGxlbiAtIDFdID0gMDsKLSAgICBpZighdWMgJiYgem9uZWlkKSB7Ci0gICAgICBjaGFyICplbmRwOwotICAgICAgdW5zaWduZWQgbG9uZyBzY29wZTsKLSAgICAgIHNjb3BlID0gc3RydG91bCh6b25laWQsICZlbmRwLCAxMCk7Ci0gICAgICBpZighKmVuZHAgJiYgKHNjb3BlIDwgVUlOVF9NQVgpKSB7Ci0gICAgICAgIC8qIEEgcGxhaW4gbnVtYmVyLCB1c2UgaXQgZGlyZWNseSBhcyBhIHNjb3BlIGlkLiAqLwotICAgICAgICBjb25uLT5zY29wZV9pZCA9ICh1bnNpZ25lZCBpbnQpc2NvcGU7Ci0gICAgICB9Ci0jaWZkZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAotICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIFpvbmUgaWRlbnRpZmllciBpcyBub3QgbnVtZXJpYyAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgc2NvcGVpZHggPSAwOwotICAgICAgICBzY29wZWlkeCA9IGlmX25hbWV0b2luZGV4KHpvbmVpZCk7Ci0gICAgICAgIGlmKCFzY29wZWlkeCkKLSAgICAgICAgICBpbmZvZihkYXRhLCAiSW52YWxpZCB6b25laWQgaWQ6ICVzOyAlc1xuIiwgem9uZWlkLAotICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb25uLT5zY29wZV9pZCA9IHNjb3BlaWR4OwogCi0gICAgICB9Ci0jZW5kaWYgLyogSEFWRV9JRl9OQU1FVE9JTkRFWCAqLwotICAgICAgZnJlZSh6b25laWQpOwotICAgIH0KKyAgICB6b25lZnJvbV91cmwodWgsIGNvbm4pOwogICB9CiAKICAgLyogbWFrZSBzdXJlIHRoZSBjb25uZWN0IHN0cnVjdCBnZXRzIGl0cyBvd24gY29weSBvZiB0aGUgaG9zdCBuYW1lICovCi0gIGNvbm4tPmhvc3QucmF3YWxsb2MgPSBzdHJkdXAoaG9zdG5hbWUpOworICBjb25uLT5ob3N0LnJhd2FsbG9jID0gc3RyZHVwKGhvc3RuYW1lID8gaG9zdG5hbWUgOiAiIik7CiAgIGlmKCFjb25uLT5ob3N0LnJhd2FsbG9jKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICBjb25uLT5ob3N0Lm5hbWUgPSBjb25uLT5ob3N0LnJhd2FsbG9jOwpAQCAtMjA5Nyw3ICsxOTk4LDYgQEAKIHsKICAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqIHA7CiAgIENVUkxjb2RlIHJlc3VsdDsKLSAgY29ubi0+c29ja3R5cGUgPSBTT0NLX1NUUkVBTTsgLyogbW9zdCBvZiB0aGVtIGFyZSBUQ1Agc3RyZWFtcyAqLwogCiAgIC8qIFBlcmZvcm0gc2V0dXAgY29tcGxlbWVudCBpZiBzb21lLiAqLwogICBwID0gY29ubi0+aGFuZGxlcjsKQEAgLTIxMjgsNiArMjAyOCwxMSBAQAogewogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnJlcS5wcm90b3ApOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnJlcS5uZXd1cmwpOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9ET0gKKyAgQ3VybF9jbG9zZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5lYXN5KTsKKyAgQ3VybF9jbG9zZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5lYXN5KTsKKyNlbmRpZgogfQogCiAKQEAgLTIyOTgsNyArMjIwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjaGFyICpwcm94eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3Byb3h5dHlwZSBwcm94eXR5cGUpCiB7Ci0gIGNoYXIgKnBvcnRwdHI7CisgIGNoYXIgKnBvcnRwdHIgPSBOVUxMOwogICBsb25nIHBvcnQgPSAtMTsKICAgY2hhciAqcHJveHl1c2VyID0gTlVMTDsKICAgY2hhciAqcHJveHlwYXNzd2QgPSBOVUxMOwpAQCAtMjQyMiw2ICsyMzI3LDcgQEAKICAgICBzaXplX3QgbGVuID0gc3RybGVuKGhvc3QpOwogICAgIGhvc3RbbGVuLTFdID0gMDsgLyogY2xlYXIgdGhlIHRyYWlsaW5nIGJyYWNrZXQgKi8KICAgICBob3N0Kys7CisgICAgem9uZWZyb21fdXJsKHVocCwgY29ubik7CiAgIH0KICAgcHJveHlpbmZvLT5ob3N0Lm5hbWUgPSBob3N0OwogCkBAIC0yODQ2LDggKzI3NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0cmNfdXNlcl9jaGFuZ2VkLCAmbmV0cmNfcGFzc3dkX2NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX05FVFJDX0ZJTEVdKTsKICAgICBpZihyZXQgPiAwKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiQ291bGRuJ3QgZmluZCBob3N0ICVzIGluIHRoZSAiCi0gICAgICAgICAgICBET1RfQ0hBUiAibmV0cmMgZmlsZTsgdXNpbmcgZGVmYXVsdHNcbiIsCisgICAgICBpbmZvZihkYXRhLCAiQ291bGRuJ3QgZmluZCBob3N0ICVzIGluIHRoZSAubmV0cmMgZmlsZTsgdXNpbmcgZGVmYXVsdHNcbiIsCiAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOwogICAgIH0KICAgICBlbHNlIGlmKHJldCA8IDApIHsKQEAgLTI5MTMsMTMgKzI4MTgsNiBAQAogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCi0gIC8qIGlmIHRoZXJlJ3MgYSB1c2VyIHdpdGhvdXQgcGFzc3dvcmQsIGNvbnNpZGVyIHBhc3N3b3JkIGJsYW5rICovCi0gIGlmKGNvbm4tPnVzZXIgJiYgIWNvbm4tPnBhc3N3ZCkgewotICAgIGNvbm4tPnBhc3N3ZCA9IHN0cmR1cCgiIik7Ci0gICAgaWYoIWNvbm4tPnBhc3N3ZCkKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTQ0LDI2ICszMDQyLDY1IEBACiAgIGlmKGRhdGEtPmFzaSAmJiAhaG9zdCAmJiAocG9ydCA9PSAtMSkgJiYKICAgICAgKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19IVFRQUykpIHsKICAgICAvKiBubyBjb25uZWN0X3RvIG1hdGNoLCB0cnkgYWx0LXN2YyEgKi8KLSAgICBjb25zdCBjaGFyICpuaG9zdDsKLSAgICBpbnQgbnBvcnQ7Ci0gICAgZW51bSBhbHBuaWQgbmFscG5pZDsKKyAgICBlbnVtIGFscG5pZCBzcmNhbHBuaWQ7CiAgICAgYm9vbCBoaXQ7CisgICAgc3RydWN0IGFsdHN2YyAqYXM7CisgICAgY29uc3QgaW50IGFsbG93ZWRfdmVyc2lvbnMgPSAoIEFMUE5faDEKKyNpZmRlZiBVU0VfTkdIVFRQMgorICAgICAgfCBBTFBOX2gyCisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfUVVJQworICAgICAgfCBBTFBOX2gzCisjZW5kaWYKKyAgICAgICkgJiBkYXRhLT5hc2ktPmZsYWdzOworCiAgICAgaG9zdCA9IGNvbm4tPmhvc3QucmF3YWxsb2M7CisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICAvKiB3aXRoIGgyIHN1cHBvcnQsIGNoZWNrIHRoYXQgZmlyc3QgKi8KKyAgICBzcmNhbHBuaWQgPSBBTFBOX2gyOwogICAgIGhpdCA9IEN1cmxfYWx0c3ZjX2xvb2t1cChkYXRhLT5hc2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMUE5faDEsIGhvc3QsIGNvbm4tPnJlbW90ZV9wb3J0LCAvKiBmcm9tICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYWxwbmlkLCAmbmhvc3QsICZucG9ydCAvKiB0byAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2FscG5pZCwgaG9zdCwgY29ubi0+cmVtb3RlX3BvcnQsIC8qIGZyb20gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzIC8qIHRvICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkX3ZlcnNpb25zKTsKKyAgICBpZighaGl0KQorI2VuZGlmCisgICAgeworICAgICAgc3JjYWxwbmlkID0gQUxQTl9oMTsKKyAgICAgIGhpdCA9IEN1cmxfYWx0c3ZjX2xvb2t1cChkYXRhLT5hc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjYWxwbmlkLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwgLyogZnJvbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcyAvKiB0byAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkX3ZlcnNpb25zKTsKKyAgICB9CiAgICAgaWYoaGl0KSB7Ci0gICAgICBjaGFyICpob3N0ZCA9IHN0cmR1cCgoY2hhciAqKW5ob3N0KTsKKyAgICAgIGNoYXIgKmhvc3RkID0gc3RyZHVwKChjaGFyICopYXMtPmRzdC5ob3N0KTsKICAgICAgIGlmKCFob3N0ZCkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICBjb25uLT5jb25uX3RvX2hvc3QucmF3YWxsb2MgPSBob3N0ZDsKICAgICAgIGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lID0gaG9zdGQ7CiAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA9IFRSVUU7Ci0gICAgICBjb25uLT5jb25uX3RvX3BvcnQgPSBucG9ydDsKKyAgICAgIGNvbm4tPmNvbm5fdG9fcG9ydCA9IGFzLT5kc3QucG9ydDsKICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19wb3J0ID0gVFJVRTsKKyAgICAgIGNvbm4tPmJpdHMuYWx0dXNlZCA9IFRSVUU7CiAgICAgICBpbmZvZihkYXRhLCAiQWx0LXN2YyBjb25uZWN0aW5nIGZyb20gWyVzXSVzOiVkIHRvIFslc10lczolZFxuIiwKLSAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihBTFBOX2gxKSwgaG9zdCwgY29ubi0+cmVtb3RlX3BvcnQsCi0gICAgICAgICAgICBDdXJsX2FscG5pZDJzdHIobmFscG5pZCksIGhvc3RkLCBucG9ydCk7CisgICAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoc3JjYWxwbmlkKSwgaG9zdCwgY29ubi0+cmVtb3RlX3BvcnQsCisgICAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdC5hbHBuaWQpLCBob3N0ZCwgYXMtPmRzdC5wb3J0KTsKKyAgICAgIGlmKHNyY2FscG5pZCAhPSBhcy0+ZHN0LmFscG5pZCkgeworICAgICAgICAvKiBwcm90b2NvbCB2ZXJzaW9uIHN3aXRjaCAqLworICAgICAgICBzd2l0Y2goYXMtPmRzdC5hbHBuaWQpIHsKKyAgICAgICAgY2FzZSBBTFBOX2gxOgorICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxQTl9oMjoKKyAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDIwOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMUE5faDM6CisgICAgICAgICAgY29ubi0+dHJhbnNwb3J0ID0gVFJOU1BSVF9RVUlDOworICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMzA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CiAgICAgfQogICB9CiAjZW5kaWYKQEAgLTMzMDAsOCArMzIzNyw4IEBACiBzdGF0aWMgdm9pZCByZXVzZV9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqb2xkX2Nvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJm9sZF9jb25uLT5odHRwX3Byb3h5Lmhvc3QpOwotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmb2xkX2Nvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKKyAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmb2xkX2Nvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwogCiAgIGZyZWUob2xkX2Nvbm4tPmh0dHBfcHJveHkuaG9zdC5yYXdhbGxvYyk7CiAgIGZyZWUob2xkX2Nvbm4tPnNvY2tzX3Byb3h5Lmhvc3QucmF3YWxsb2MpOwpAQCAtMzM0NSw4ICszMjgyLDggQEAKIAogICAvKiBob3N0IGNhbiBjaGFuZ2UsIHdoZW4gZG9pbmcga2VlcGFsaXZlIHdpdGggYSBwcm94eSBvciBpZiB0aGUgY2FzZSBpcwogICAgICBkaWZmZXJlbnQgdGhpcyB0aW1lIGV0YyAqLwotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+aG9zdCk7Ci0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5ob3N0KTsKKyAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+Y29ubl90b19ob3N0KTsKICAgQ3VybF9zYWZlZnJlZShjb25uLT5ob3N0LnJhd2FsbG9jKTsKICAgQ3VybF9zYWZlZnJlZShjb25uLT5jb25uX3RvX2hvc3QucmF3YWxsb2MpOwogICBjb25uLT5ob3N0ID0gb2xkX2Nvbm4tPmhvc3Q7CkBAIC0zNDQyLDkgKzMzNzksOSBAQAogICBpZihyZXN1bHQpCiAgICAgZ290byBvdXQ7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkgewotICAgIGNvbm4tPm9hdXRoX2JlYXJlciA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdKTsKLSAgICBpZighY29ubi0+b2F1dGhfYmVhcmVyKSB7CisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NBU0xfQVVUSFpJRF0pIHsKKyAgICBjb25uLT5zYXNsX2F1dGh6aWQgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfU0FTTF9BVVRIWklEXSk7CisgICAgaWYoIWNvbm4tPnNhc2xfYXV0aHppZCkgewogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTM1MDUsMjEgKzM0NDIsMjEgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICogSUROLWNvbnZlcnQgdGhlIGhvc3RuYW1lcwogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+aG9zdCk7CisgIHJlc3VsdCA9IEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+aG9zdCk7CiAgIGlmKHJlc3VsdCkKICAgICBnb3RvIG91dDsKICAgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpIHsKLSAgICByZXN1bHQgPSBpZG5jb252ZXJ0X2hvc3RuYW1lKGNvbm4sICZjb25uLT5jb25uX3RvX2hvc3QpOworICAgIHJlc3VsdCA9IEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+Y29ubl90b19ob3N0KTsKICAgICBpZihyZXN1bHQpCiAgICAgICBnb3RvIG91dDsKICAgfQogICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkgewotICAgIHJlc3VsdCA9IGlkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmh0dHBfcHJveHkuaG9zdCk7CisgICAgcmVzdWx0ID0gQ3VybF9pZG5jb252ZXJ0X2hvc3RuYW1lKGNvbm4sICZjb25uLT5odHRwX3Byb3h5Lmhvc3QpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGdvdG8gb3V0OwogICB9CiAgIGlmKGNvbm4tPmJpdHMuc29ja3Nwcm94eSkgewotICAgIHJlc3VsdCA9IGlkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOworICAgIHJlc3VsdCA9IEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBvdXQ7CiAgIH0KQEAgLTM2MzEsNiArMzU2OCwxMCBAQAogICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVIxM19MSVNUX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkuY2lwaGVyX2xpc3QxMyA9CiAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUjEzX0xJU1RfUFJPWFldOworICBkYXRhLT5zZXQuc3NsLnByaW1hcnkucGlubmVkX2tleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnBpbm5lZF9rZXkgPQorICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfUFJPWFldOwogCiAgIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLkNSTGZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9QUk9YWV07CkBAIC0zNjg4LDI1ICszNjI5LDYgQEAKICAgZWxzZQogICAgIHJldXNlID0gQ29ubmVjdGlvbkV4aXN0cyhkYXRhLCBjb25uLCAmY29ubl90ZW1wLCAmZm9yY2VfcmV1c2UsICZ3YWl0cGlwZSk7CiAKLSAgLyogSWYgd2UgZm91bmQgYSByZXVzYWJsZSBjb25uZWN0aW9uIHRoYXQgaXMgbm93IG1hcmtlZCBhcyBpbiB1c2UsIHdlIG1heQotICAgICBzdGlsbCB3YW50IHRvIG9wZW4gYSBuZXcgY29ubmVjdGlvbiBpZiB3ZSBhcmUgbXVsdGlwbGV4aW5nLiAqLwotICBpZihyZXVzZSAmJiAhZm9yY2VfcmV1c2UgJiYgSXNNdWx0aXBsZXhpbmdQb3NzaWJsZShkYXRhLCBjb25uX3RlbXApKSB7Ci0gICAgc2l6ZV90IG11bHRpcGxleGVkID0gQ09OTl9JTlVTRShjb25uX3RlbXApOwotICAgIGlmKG11bHRpcGxleGVkID4gMCkgewotICAgICAgaW5mb2YoZGF0YSwgIkZvdW5kIGNvbm5lY3Rpb24gJWxkLCB3aXRoICV6dSByZXF1ZXN0cyBvbiBpdFxuIiwKLSAgICAgICAgICAgIGNvbm5fdGVtcC0+Y29ubmVjdGlvbl9pZCwgbXVsdGlwbGV4ZWQpOwotCi0gICAgICBpZihDdXJsX2Nvbm5jYWNoZV9idW5kbGVfc2l6ZShjb25uX3RlbXApIDwgbWF4X2hvc3RfY29ubmVjdGlvbnMgJiYKLSAgICAgICAgIEN1cmxfY29ubmNhY2hlX3NpemUoZGF0YSkgPCBtYXhfdG90YWxfY29ubmVjdGlvbnMpIHsKLSAgICAgICAgLyogV2Ugd2FudCBhIG5ldyBjb25uZWN0aW9uIGFueXdheSAqLwotICAgICAgICByZXVzZSA9IEZBTFNFOwotCi0gICAgICAgIGluZm9mKGRhdGEsICJXZSBjYW4gcmV1c2UsIGJ1dCB3ZSB3YW50IGEgbmV3IGNvbm5lY3Rpb24gYW55d2F5XG4iKTsKLSAgICAgICAgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oY29ubl90ZW1wKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQogICBpZihyZXVzZSkgewogICAgIC8qCiAgICAgICogV2UgYWxyZWFkeSBoYXZlIGEgY29ubmVjdGlvbiBmb3IgdGhpcywgd2UgZ290IHRoZSBmb3JtZXIgY29ubmVjdGlvbgpAQCAtMzc0OSw4ICszNjcxLDkgQEAKICAgICAgIGNvbm5lY3Rpb25zX2F2YWlsYWJsZSA9IEZBTFNFOwogICAgIGVsc2UgewogICAgICAgLyogdGhpcyBnZXRzIGEgbG9jayBvbiB0aGUgY29ubmNhY2hlICovCisgICAgICBjb25zdCBjaGFyICpidW5kbGVob3N0OwogICAgICAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSA9Ci0gICAgICAgIEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKGNvbm4sIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUpOworICAgICAgICBDdXJsX2Nvbm5jYWNoZV9maW5kX2J1bmRsZShjb25uLCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLCAmYnVuZGxlaG9zdCk7CiAKICAgICAgIGlmKG1heF9ob3N0X2Nvbm5lY3Rpb25zID4gMCAmJiBidW5kbGUgJiYKICAgICAgICAgIChidW5kbGUtPm51bV9jb25uZWN0aW9ucyA+PSBtYXhfaG9zdF9jb25uZWN0aW9ucykpIHsKQEAgLTM3NjQsOCArMzY4Nyw4IEBACiAgICAgICAgICAgKHZvaWQpQ3VybF9kaXNjb25uZWN0KGRhdGEsIGNvbm5fY2FuZGlkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWFkX2Nvbm5lY3Rpb24gKi8gRkFMU0UpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiTm8gbW9yZSBjb25uZWN0aW9ucyBhbGxvd2VkIHRvIGhvc3Q6ICV6dVxuIiwKLSAgICAgICAgICAgICAgICBtYXhfaG9zdF9jb25uZWN0aW9ucyk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIk5vIG1vcmUgY29ubmVjdGlvbnMgYWxsb3dlZCB0byBob3N0ICVzOiAlenVcbiIsCisgICAgICAgICAgICAgICAgYnVuZGxlaG9zdCwgbWF4X2hvc3RfY29ubmVjdGlvbnMpOwogICAgICAgICAgIGNvbm5lY3Rpb25zX2F2YWlsYWJsZSA9IEZBTFNFOwogICAgICAgICB9CiAgICAgICB9CkBAIC0zOTI2LDcgKzM4NDksOSBAQAogICB9CiAgIGVsc2UgewogICAgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfQ09OTkVDVCk7ICAgIC8qIHdlJ3JlIGNvbm5lY3RlZCBhbHJlYWR5ICovCi0gICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KKyAgICBpZihjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSB8fAorICAgICAgIChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9TU0gpKQorICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KICAgICBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdID0gVFJVRTsKICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CiAgICAgQ3VybF91cGRhdGVjb25uaW5mbyhjb25uLCBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSk7CkBAIC00MTQ3LDM0ICs0MDcyLDMgQEAKIAogICByZXR1cm4gZmFtaWx5OwogfQotCi0KLS8qCi0gKiBXcmFwcGVyIHRvIGNhbGwgZnVuY3Rpb25zIGluIEN1cmxfY29ubmNhY2hlX2ZvcmVhY2goKQotICoKLSAqIFJldHVybnMgYWx3YXlzIDAuCi0gKi8KLXN0YXRpYyBpbnQgY29ubl91cGtlZXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJhbSkKLXsKLSAgLyogUGFyYW0gaXMgdW51c2VkLiAqLwotICAodm9pZClwYXJhbTsKLQotICBpZihjb25uLT5oYW5kbGVyLT5jb25uZWN0aW9uX2NoZWNrKSB7Ci0gICAgLyogRG8gYSBwcm90b2NvbC1zcGVjaWZpYyBrZWVwYWxpdmUgY2hlY2sgb24gdGhlIGNvbm5lY3Rpb24uICovCi0gICAgY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjayhjb25uLCBDT05OQ0hFQ0tfS0VFUEFMSVZFKTsKLSAgfQotCi0gIHJldHVybiAwOyAvKiBjb250aW51ZSBpdGVyYXRpb24gKi8KLX0KLQotQ1VSTGNvZGUgQ3VybF91cGtlZXAoc3RydWN0IGNvbm5jYWNoZSAqY29ubl9jYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKLXsKLSAgLyogTG9vcCBvdmVyIGV2ZXJ5IGNvbm5lY3Rpb24gYW5kIG1ha2UgY29ubmVjdGlvbiBhbGl2ZS4gKi8KLSAgQ3VybF9jb25uY2FjaGVfZm9yZWFjaChkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5fY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25uX3Vwa2VlcCk7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmgKaW5kZXggNGRiOWU4Ni4uNTAwMGM1MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ4LDQwICs0OCwyOSBAQAogQ1VSTGNvZGUgQ3VybF9pbml0X3VzZXJkZWZpbmVkKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCiB2b2lkIEN1cmxfZnJlZXNldChzdHJ1Y3QgQ3VybF9lYXN5ICogZGF0YSk7Ci0vKiBmcmVlIHRoZSBVUkwgcGllY2VzICovCi12b2lkIEN1cmxfdXBfZnJlZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIENVUkxjb2RlIEN1cmxfdWNfdG9fY3VybGNvZGUoQ1VSTFVjb2RlIHVjKTsKLUNVUkxjb2RlIEN1cmxfY2xvc2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7IC8qIG9wcG9zaXRlIG9mIGN1cmxfb3BlbigpICovCitDVVJMY29kZSBDdXJsX2Nsb3NlKHN0cnVjdCBDdXJsX2Vhc3kgKipkYXRhcCk7IC8qIG9wcG9zaXRlIG9mIGN1cmxfb3BlbigpICovCiBDVVJMY29kZSBDdXJsX2Nvbm5lY3Qoc3RydWN0IEN1cmxfZWFzeSAqLCBib29sICphc3luYywgYm9vbCAqcHJvdG9jb2xfY29ubmVjdCk7CiBDVVJMY29kZSBDdXJsX2Rpc2Nvbm5lY3Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOwotQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1DVVJMY29kZSBDdXJsX3Byb3RvY29sX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLUNVUkxjb2RlIEN1cmxfcHJvdG9jb2xfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIENVUkxjb2RlIEN1cmxfc2V0dXBfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcHJvdG9jb2xfZG9uZSk7CiB2b2lkIEN1cmxfZnJlZV9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotCi1pbnQgQ3VybF9wcm90b2NvbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci1pbnQgQ3VybF9kb2luZ19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CiBDVVJMY29kZSBDdXJsX3BhcnNlX2xvZ2luX2RldGFpbHMoY29uc3QgY2hhciAqbG9naW4sIGNvbnN0IHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnVzZXJwdHIsIGNoYXIgKipwYXNzd2RwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm9wdGlvbnNwdHIpOwotdm9pZCBDdXJsX2Nsb3NlX2Nvbm5lY3Rpb25zKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotQ1VSTGNvZGUgQ3VybF91cGtlZXAoc3RydWN0IGNvbm5jYWNoZSAqY29ubl9jYWNoZSwgdm9pZCAqZGF0YSk7CiAKIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKkN1cmxfYnVpbHRpbl9zY2hlbWUoY29uc3QgY2hhciAqc2NoZW1lKTsKIAorYm9vbCBDdXJsX2lzX0FTQ0lJX25hbWUoY29uc3QgY2hhciAqaG9zdG5hbWUpOworQ1VSTGNvZGUgQ3VybF9pZG5jb252ZXJ0X2hvc3RuYW1lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpOwordm9pZCBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKHN0cnVjdCBob3N0bmFtZSAqaG9zdCk7CisKICNkZWZpbmUgQ1VSTF9ERUZBVUxUX1BST1hZX1BPUlQgMTA4MCAvKiBkZWZhdWx0IHByb3h5IHBvcnQgdW5sZXNzIHNwZWNpZmllZCAqLwogI2RlZmluZSBDVVJMX0RFRkFVTFRfSFRUUFNfUFJPWFlfUE9SVCA0NDMgLyogZGVmYXVsdCBodHRwcyBwcm94eSBwb3J0IHVubGVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkICovCiAKLUNVUkxjb2RlIEN1cmxfY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7Ci0KICNpZmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAjZGVmaW5lIEN1cmxfdmVyYm9zZWNvbm5lY3QoeCkgIEN1cmxfbm9wX3N0bXQKICNlbHNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxhcGktaW50LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxhcGktaW50LmgKaW5kZXggNWYwNTljMi4uZDE0ZDUzZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLWludC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS1pbnQuaApAQCAtMjYsOSArMjYsNiBAQAogI2RlZmluZSBNQVhfU0NIRU1FX0xFTiA0MAogCiBib29sIEN1cmxfaXNfYWJzb2x1dGVfdXJsKGNvbnN0IGNoYXIgKnVybCwgY2hhciAqc2NoZW1lLCBzaXplX3QgYnVmbGVuKTsKLWNoYXIgKkN1cmxfY29uY2F0X3VybChjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpyZWx1cmwpOwotc2l6ZV90IEN1cmxfc3RybGVuX3VybChjb25zdCBjaGFyICp1cmwsIGJvb2wgcmVsYXRpdmUpOwotdm9pZCBDdXJsX3N0cmNweV91cmwoY2hhciAqb3V0cHV0LCBjb25zdCBjaGFyICp1cmwsIGJvb2wgcmVsYXRpdmUpOwogCiAjaWZkZWYgREVCVUdCVUlMRAogQ1VSTFVjb2RlIEN1cmxfcGFyc2VfcG9ydChzdHJ1Y3QgQ3VybF9VUkwgKnUsIGNoYXIgKmhvc3RuYW1lKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLmMKaW5kZXggZDA3ZTRmNS4uNTA2ZTI0NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJlc2NhcGUuaCIKICNpbmNsdWRlICJjdXJsX2N0eXBlLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtNjMsNiArNjQsNyBAQAogICBjaGFyICpmcmFnbWVudDsKIAogICBjaGFyICpzY3JhdGNoOyAvKiB0ZW1wb3Jhcnkgc2NyYXRjaCBhcmVhICovCisgIGNoYXIgKnRlbXBwYXRoOyAvKiB0ZW1wb3JhcnkgcGF0aCBwb2ludGVyICovCiAgIGxvbmcgcG9ydG51bTsgLyogdGhlIG51bWVyaWNhbCB2ZXJzaW9uICovCiB9OwogCkBAIC04MSw2ICs4Myw3IEBACiAgIGZyZWUodS0+cXVlcnkpOwogICBmcmVlKHUtPmZyYWdtZW50KTsKICAgZnJlZSh1LT5zY3JhdGNoKTsKKyAgZnJlZSh1LT50ZW1wcGF0aCk7CiB9CiAKIC8qIG1vdmUgdGhlIGZ1bGwgY29udGVudHMgb2Ygb25lIGhhbmRsZSBvbnRvIGFub3RoZXIgYW5kCkBAIC0zNTAsNyArMzUzLDcgQEAKICAgZWxzZSB7CiAgICAgLyogV2UgZ290IGEgbmV3IGFic29sdXRlIHBhdGggZm9yIHRoaXMgc2VydmVyICovCiAKLSAgICBpZigocmVsdXJsWzBdID09ICcvJykgJiYgKHJlbHVybFsxXSA9PSAnLycpKSB7CisgICAgaWYocmVsdXJsWzFdID09ICcvJykgewogICAgICAgLyogdGhlIG5ldyBVUkwgc3RhcnRzIHdpdGggLy8sIGp1c3Qga2VlcCB0aGUgcHJvdG9jb2wgcGFydCBmcm9tIHRoZQogICAgICAgICAgb3JpZ2luYWwgb25lICovCiAgICAgICAqcHJvdHNlcCA9IDA7CkBAIC00MjUsNyArNDI4LDYgQEAKICAqCiAgKi8KIHN0YXRpYyBDVVJMVWNvZGUgcGFyc2VfaG9zdG5hbWVfbG9naW4oc3RydWN0IEN1cmxfVVJMICp1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICpoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTQzNCw2ICs0MzYsNyBAQAogICBjaGFyICp1c2VycCA9IE5VTEw7CiAgIGNoYXIgKnBhc3N3ZHAgPSBOVUxMOwogICBjaGFyICpvcHRpb25zcCA9IE5VTEw7CisgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmggPSBOVUxMOwogCiAgIC8qIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGhvcGluZyBhbGwgdGhlIG90aGVyIHNwZWNpYWwgY2FzZXMgaGF2ZQogICAgKiBiZWVuIHRha2VuIGNhcmUgb2YsIHNvIGNvbm4tPmhvc3QubmFtZSBpcyBhdCBtb3N0CkBAIC00NTMsNiArNDU2LDEwIEBACiAgICAqIGZ0cDovL3VzZXI6cGFzc3dvcmRAZnRwLm15LnNpdGU6ODAyMS9SRUFETUUgKi8KICAgKmhvc3RuYW1lID0gKytwdHI7CiAKKyAgLyogaWYgdGhpcyBpcyBhIGtub3duIHNjaGVtZSwgZ2V0IHNvbWUgZGV0YWlscyAqLworICBpZih1LT5zY2hlbWUpCisgICAgaCA9IEN1cmxfYnVpbHRpbl9zY2hlbWUodS0+c2NoZW1lKTsKKwogICAvKiBXZSBjb3VsZCB1c2UgdGhlIGxvZ2luIGluZm9ybWF0aW9uIGluIHRoZSBVUkwgc28gZXh0cmFjdCBpdC4gT25seSBwYXJzZQogICAgICBvcHRpb25zIGlmIHRoZSBoYW5kbGVyIHNheXMgd2Ugc2hvdWxkLiBOb3RlIHRoYXQgJ2gnIG1pZ2h0IGJlIE5VTEwhICovCiAgIGNjb2RlID0gQ3VybF9wYXJzZV9sb2dpbl9kZXRhaWxzKGxvZ2luLCBwdHIgLSBsb2dpbiAtIDEsCkBAIC01NjgsNyArNTc1LDcgQEAKIH0KIAogLyogc2NhbiBmb3IgYnl0ZSB2YWx1ZXMgPCAzMSBvciAxMjcgKi8KLXN0YXRpYyBDVVJMVWNvZGUganVua3NjYW4oY2hhciAqcGFydCkKK3N0YXRpYyBDVVJMVWNvZGUganVua3NjYW4oY29uc3QgY2hhciAqcGFydCkKIHsKICAgaWYocGFydCkgewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGJhZGJ5dGVzW109ewpAQCAtNTkxLDIwICs1OTgsMjYgQEAKIAogc3RhdGljIENVUkxVY29kZSBob3N0bmFtZV9jaGVjayhzdHJ1Y3QgQ3VybF9VUkwgKnUsIGNoYXIgKmhvc3RuYW1lKQogewotICBjb25zdCBjaGFyICpsID0gTlVMTDsgLyogYWNjZXB0ZWQgY2hhcmFjdGVycyAqLwogICBzaXplX3QgbGVuOwogICBzaXplX3QgaGxlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAKICAgaWYoaG9zdG5hbWVbMF0gPT0gJ1snKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjaGFyIGRlc3RbMTZdOyAvKiBmaXRzIGEgYmluYXJ5IElQdjYgYWRkcmVzcyAqLworI2VuZGlmCisgICAgY29uc3QgY2hhciAqbCA9ICIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGOi4iOworICAgIGlmKGhsZW4gPCA1KSAvKiAnWzo6MV0nIGlzIHRoZSBzaG9ydGVzdCBwb3NzaWJsZSB2YWxpZCBzdHJpbmcgKi8KKyAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOwogICAgIGhvc3RuYW1lKys7Ci0gICAgbCA9ICIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGOjouIjsKICAgICBobGVuIC09IDI7Ci0gIH0KIAotICBpZihsKSB7CisgICAgaWYoaG9zdG5hbWVbaGxlbl0gIT0gJ10nKQorICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CisKICAgICAvKiBvbmx5IHZhbGlkIGxldHRlcnMgYXJlIG9rICovCiAgICAgbGVuID0gc3Ryc3BuKGhvc3RuYW1lLCBsKTsKICAgICBpZihobGVuICE9IGxlbikgeworICAgICAgaGxlbiA9IGxlbjsKICAgICAgIGlmKGhvc3RuYW1lW2xlbl0gPT0gJyUnKSB7CiAgICAgICAgIC8qIHRoaXMgY291bGQgbm93IGJlICclW3pvbmUgaWRdJyAqLwogICAgICAgICBjaGFyIHpvbmVpZFsxNl07CkBAIC02MjgsNiArNjQxLDEyIEBACiAgICAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOwogICAgICAgLyogaG9zdG5hbWUgaXMgZmluZSAqLwogICAgIH0KKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGhvc3RuYW1lW2hsZW5dID0gMDsgLyogZW5kIHRoZSBhZGRyZXNzIHRoZXJlICovCisgICAgaWYoMSAhPSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsIGRlc3QpKQorICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CisgICAgaG9zdG5hbWVbaGxlbl0gPSAnXSc7IC8qIHJlc3RvcmUgZW5kaW5nIGJyYWNrZXQgKi8KKyNlbmRpZgogICB9CiAgIGVsc2UgewogICAgIC8qIGxldHRlcnMgZnJvbSB0aGUgc2Vjb25kIHN0cmluZyBpcyBub3Qgb2sgKi8KQEAgLTY1MywxMCArNjcyLDkgQEAKICAgQ1VSTFVjb2RlIHJlc3VsdDsKICAgYm9vbCB1cmxfaGFzX3NjaGVtZSA9IEZBTFNFOwogICBjaGFyIHNjaGVtZWJ1ZltNQVhfU0NIRU1FX0xFTiArIDFdOwotICBjaGFyICpzY2hlbWVwID0gTlVMTDsKKyAgY29uc3QgY2hhciAqc2NoZW1lcCA9IE5VTEw7CiAgIHNpemVfdCBzY2hlbWVsZW4gPSAwOwogICBzaXplX3QgdXJsbGVuOwotICBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICpoID0gTlVMTDsKIAogICBpZighdXJsKQogICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOwpAQCAtNzc1LDYgKzc5Myw3IEBACiAKICAgICAgIGlmKGp1bmtzY2FuKHNjaGVtZXApKQogICAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKKwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIC8qIG5vIHNjaGVtZSEgKi8KQEAgLTc4Miw3ICs4MDEsNyBAQAogICAgICAgaWYoIShmbGFncyAmIChDVVJMVV9ERUZBVUxUX1NDSEVNRXxDVVJMVV9HVUVTU19TQ0hFTUUpKSkKICAgICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAgICAgICBpZihmbGFncyAmIENVUkxVX0RFRkFVTFRfU0NIRU1FKQotICAgICAgICBzY2hlbWVwID0gKGNoYXIgKikgREVGQVVMVF9TQ0hFTUU7CisgICAgICAgIHNjaGVtZXAgPSBERUZBVUxUX1NDSEVNRTsKIAogICAgICAgLyoKICAgICAgICAqIFRoZSBVUkwgd2FzIGJhZGx5IGZvcm1hdHRlZCwgbGV0J3MgdHJ5IHdpdGhvdXQgc2NoZW1lIHNwZWNpZmllZC4KQEAgLTc5NSw3NCArODE0LDgzIEBACiAgICAgICBwKys7CiAKICAgICBsZW4gPSBwIC0gaG9zdHA7Ci0gICAgaWYoIWxlbikKLSAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOwotCi0gICAgbWVtY3B5KGhvc3RuYW1lLCBob3N0cCwgbGVuKTsKLSAgICBob3N0bmFtZVtsZW5dID0gMDsKLQotICAgIGlmKChmbGFncyAmIENVUkxVX0dVRVNTX1NDSEVNRSkgJiYgIXNjaGVtZXApIHsKLSAgICAgIC8qIGxlZ2FjeSBjdXJsLXN0eWxlIGd1ZXNzIGJhc2VkIG9uIGhvc3QgbmFtZSAqLwotICAgICAgaWYoY2hlY2twcmVmaXgoImZ0cC4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJmdHAiOwotICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiZGljdC4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJkaWN0IjsKLSAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImxkYXAuIiwgaG9zdG5hbWUpKQotICAgICAgICBzY2hlbWVwID0gKGNoYXIgKikibGRhcCI7Ci0gICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJpbWFwLiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImltYXAiOwotICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgic210cC4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJzbXRwIjsKLSAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInBvcDMuIiwgaG9zdG5hbWUpKQotICAgICAgICBzY2hlbWVwID0gKGNoYXIgKikicG9wMyI7Ci0gICAgICBlbHNlCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJodHRwIjsKKyAgICBpZihsZW4pIHsKKyAgICAgIG1lbWNweShob3N0bmFtZSwgaG9zdHAsIGxlbik7CisgICAgICBob3N0bmFtZVtsZW5dID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZighKGZsYWdzICYgQ1VSTFVfTk9fQVVUSE9SSVRZKSkKKyAgICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAgICAgfQogCiAgICAgbGVuID0gc3RybGVuKHApOwogICAgIG1lbWNweShwYXRoLCBwLCBsZW4pOwogICAgIHBhdGhbbGVuXSA9IDA7CiAKLSAgICB1LT5zY2hlbWUgPSBzdHJkdXAoc2NoZW1lcCk7Ci0gICAgaWYoIXUtPnNjaGVtZSkKLSAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgICBpZihzY2hlbWVwKSB7CisgICAgICB1LT5zY2hlbWUgPSBzdHJkdXAoc2NoZW1lcCk7CisgICAgICBpZighdS0+c2NoZW1lKQorICAgICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7CisgICAgfQogICB9CiAKLSAgLyogaWYgdGhpcyBpcyBhIGtub3duIHNjaGVtZSwgZ2V0IHNvbWUgZGV0YWlscyAqLwotICBoID0gQ3VybF9idWlsdGluX3NjaGVtZSh1LT5zY2hlbWUpOwotCiAgIGlmKGp1bmtzY2FuKHBhdGgpKQogICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOwogCi0gIHF1ZXJ5ID0gc3RyY2hyKHBhdGgsICc/Jyk7Ci0gIGlmKHF1ZXJ5KQotICAgICpxdWVyeSsrID0gMDsKLQotICBmcmFnbWVudCA9IHN0cmNocihxdWVyeT9xdWVyeTpwYXRoLCAnIycpOwotICBpZihmcmFnbWVudCkKLSAgICAqZnJhZ21lbnQrKyA9IDA7Ci0KLSAgaWYoIXBhdGhbMF0pCi0gICAgLyogaWYgdGhlcmUncyBubyBwYXRoIHNldCwgdW5zZXQgKi8KLSAgICBwYXRoID0gTlVMTDsKLSAgZWxzZSBpZighKGZsYWdzICYgQ1VSTFVfUEFUSF9BU19JUykpIHsKLSAgICAvKiBzYW5pdGlzZSBwYXRocyBhbmQgcmVtb3ZlIC4uLyBhbmQgLi8gc2VxdWVuY2VzIGFjY29yZGluZyB0byBSRkMzOTg2ICovCi0gICAgY2hhciAqbmV3cCA9IEN1cmxfZGVkb3Rkb3RpZnkocGF0aCk7CisgIGlmKChmbGFncyAmIENVUkxVX1VSTEVOQ09ERSkgJiYgcGF0aFswXSkgeworICAgIC8qIHdvcnN0IGNhc2Ugb3V0cHV0IGxlbmd0aCBpcyAzeCB0aGUgb3JpZ2luYWwhICovCisgICAgY2hhciAqbmV3cCA9IG1hbGxvYyhzdHJsZW4ocGF0aCkgKiAzKTsKICAgICBpZighbmV3cCkKICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKLQotICAgIGlmKHN0cmNtcChuZXdwLCBwYXRoKSkgewotICAgICAgLyogaWYgd2UgZ290IGEgbmV3IHZlcnNpb24gKi8KLSAgICAgIHBhdGggPSBuZXdwOwotICAgICAgcGF0aF9hbGxvY2VkID0gVFJVRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZnJlZShuZXdwKTsKKyAgICBwYXRoX2FsbG9jZWQgPSBUUlVFOworICAgIHN0cmNweV91cmwobmV3cCwgcGF0aCwgVFJVRSk7IC8qIGNvbnNpZGVyIGl0IHJlbGF0aXZlICovCisgICAgdS0+dGVtcHBhdGggPSBwYXRoID0gbmV3cDsKICAgfQotICBpZihwYXRoKSB7CisKKyAgZnJhZ21lbnQgPSBzdHJjaHIocGF0aCwgJyMnKTsKKyAgaWYoZnJhZ21lbnQpIHsKKyAgICAqZnJhZ21lbnQrKyA9IDA7CisgICAgaWYoZnJhZ21lbnRbMF0pIHsKKyAgICAgIHUtPmZyYWdtZW50ID0gc3RyZHVwKGZyYWdtZW50KTsKKyAgICAgIGlmKCF1LT5mcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgfQorCisgIHF1ZXJ5ID0gc3RyY2hyKHBhdGgsICc/Jyk7CisgIGlmKHF1ZXJ5KSB7CisgICAgKnF1ZXJ5KysgPSAwOworICAgIC8qIGRvbmUgZXZlbiBpZiB0aGUgcXVlcnkgcGFydCBpcyBhIGJsYW5rIHN0cmluZyAqLworICAgIHUtPnF1ZXJ5ID0gc3RyZHVwKHF1ZXJ5KTsKKyAgICBpZighdS0+cXVlcnkpCisgICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBpZighcGF0aFswXSkKKyAgICAvKiBpZiB0aGVyZSdzIG5vIHBhdGggbGVmdCBzZXQsIHVuc2V0ICovCisgICAgcGF0aCA9IE5VTEw7CisgIGVsc2UgeworICAgIGlmKCEoZmxhZ3MgJiBDVVJMVV9QQVRIX0FTX0lTKSkgeworICAgICAgLyogcmVtb3ZlIC4uLyBhbmQgLi8gc2VxdWVuY2VzIGFjY29yZGluZyB0byBSRkMzOTg2ICovCisgICAgICBjaGFyICpuZXdwID0gQ3VybF9kZWRvdGRvdGlmeShwYXRoKTsKKyAgICAgIGlmKCFuZXdwKQorICAgICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7CisKKyAgICAgIGlmKHN0cmNtcChuZXdwLCBwYXRoKSkgeworICAgICAgICAvKiBpZiB3ZSBnb3QgYSBuZXcgdmVyc2lvbiAqLworICAgICAgICBpZihwYXRoX2FsbG9jZWQpCisgICAgICAgICAgQ3VybF9zYWZlZnJlZSh1LT50ZW1wcGF0aCk7CisgICAgICAgIHUtPnRlbXBwYXRoID0gcGF0aCA9IG5ld3A7CisgICAgICAgIHBhdGhfYWxsb2NlZCA9IFRSVUU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGZyZWUobmV3cCk7CisgICAgfQorCiAgICAgdS0+cGF0aCA9IHBhdGhfYWxsb2NlZD9wYXRoOnN0cmR1cChwYXRoKTsKICAgICBpZighdS0+cGF0aCkKICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgICB1LT50ZW1wcGF0aCA9IE5VTEw7IC8qIHVzZWQgbm93ICovCiAgIH0KIAogICBpZihob3N0bmFtZSkgewpAQCAtODcyLDcgKzkwMCw3IEBACiAgICAgaWYoanVua3NjYW4oaG9zdG5hbWUpKQogICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAKLSAgICByZXN1bHQgPSBwYXJzZV9ob3N0bmFtZV9sb2dpbih1LCBoLCAmaG9zdG5hbWUsIGZsYWdzKTsKKyAgICByZXN1bHQgPSBwYXJzZV9ob3N0bmFtZV9sb2dpbih1LCAmaG9zdG5hbWUsIGZsYWdzKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC04ODAsMjggKzkwOCw0NCBAQAogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICByZXN1bHQgPSBob3N0bmFtZV9jaGVjayh1LCBob3N0bmFtZSk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZigwID09IHN0cmxlbihob3N0bmFtZSkgJiYgKGZsYWdzICYgQ1VSTFVfTk9fQVVUSE9SSVRZKSkgeworICAgICAgLyogU2tpcCBob3N0bmFtZSBjaGVjaywgaXQncyBhbGxvd2VkIHRvIGJlIGVtcHR5LiAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IGhvc3RuYW1lX2NoZWNrKHUsIGhvc3RuYW1lKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKICAgICB1LT5ob3N0ID0gc3RyZHVwKGhvc3RuYW1lKTsKICAgICBpZighdS0+aG9zdCkKICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKworICAgIGlmKChmbGFncyAmIENVUkxVX0dVRVNTX1NDSEVNRSkgJiYgIXNjaGVtZXApIHsKKyAgICAgIC8qIGxlZ2FjeSBjdXJsLXN0eWxlIGd1ZXNzIGJhc2VkIG9uIGhvc3QgbmFtZSAqLworICAgICAgaWYoY2hlY2twcmVmaXgoImZ0cC4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAiZnRwIjsKKyAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImRpY3QuIiwgaG9zdG5hbWUpKQorICAgICAgICBzY2hlbWVwID0gImRpY3QiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgibGRhcC4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAibGRhcCI7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJpbWFwLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJpbWFwIjsKKyAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInNtdHAuIiwgaG9zdG5hbWUpKQorICAgICAgICBzY2hlbWVwID0gInNtdHAiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgicG9wMy4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAicG9wMyI7CisgICAgICBlbHNlCisgICAgICAgIHNjaGVtZXAgPSAiaHR0cCI7CisKKyAgICAgIHUtPnNjaGVtZSA9IHN0cmR1cChzY2hlbWVwKTsKKyAgICAgIGlmKCF1LT5zY2hlbWUpCisgICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgICB9CiAgIH0KIAotICBpZihxdWVyeSkgewotICAgIHUtPnF1ZXJ5ID0gc3RyZHVwKHF1ZXJ5KTsKLSAgICBpZighdS0+cXVlcnkpCi0gICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLSAgaWYoZnJhZ21lbnQgJiYgZnJhZ21lbnRbMF0pIHsKLSAgICB1LT5mcmFnbWVudCA9IHN0cmR1cChmcmFnbWVudCk7Ci0gICAgaWYoIXUtPmZyYWdtZW50KQotICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0KLSAgZnJlZSh1LT5zY3JhdGNoKTsKLSAgdS0+c2NyYXRjaCA9IE5VTEw7CisgIEN1cmxfc2FmZWZyZWUodS0+c2NyYXRjaCk7CisgIEN1cmxfc2FmZWZyZWUodS0+dGVtcHBhdGgpOwogCiAgIHJldHVybiBDVVJMVUVfT0s7CiB9CkBAIC0xMDY2LDI0ICsxMTEwLDIzIEBACiAgICAgICBlbHNlCiAgICAgICAgIHJldHVybiBDVVJMVUVfTk9fU0NIRU1FOwogCi0gICAgICBpZihzY2hlbWUpIHsKLSAgICAgICAgaCA9IEN1cmxfYnVpbHRpbl9zY2hlbWUoc2NoZW1lKTsKLSAgICAgICAgaWYoIXBvcnQgJiYgKGZsYWdzICYgQ1VSTFVfREVGQVVMVF9QT1JUKSkgewotICAgICAgICAgIC8qIHRoZXJlJ3Mgbm8gc3RvcmVkIHBvcnQgbnVtYmVyLCBidXQgYXNrZWQgdG8gZGVsaXZlcgotICAgICAgICAgICAgIGEgZGVmYXVsdCBvbmUgZm9yIHRoZSBzY2hlbWUgKi8KLSAgICAgICAgICBpZihoKSB7Ci0gICAgICAgICAgICBtc25wcmludGYocG9ydGJ1Ziwgc2l6ZW9mKHBvcnRidWYpLCAiJWxkIiwgaC0+ZGVmcG9ydCk7Ci0gICAgICAgICAgICBwb3J0ID0gcG9ydGJ1ZjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihwb3J0KSB7Ci0gICAgICAgICAgLyogdGhlcmUgaXMgYSBzdG9yZWQgcG9ydCBudW1iZXIsIGJ1dCBhc2tlZCB0byBpbmhpYml0IGlmIGl0IG1hdGNoZXMKLSAgICAgICAgICAgICB0aGUgZGVmYXVsdCBvbmUgZm9yIHRoZSBzY2hlbWUgKi8KLSAgICAgICAgICBpZihoICYmIChoLT5kZWZwb3J0ID09IHUtPnBvcnRudW0pICYmCi0gICAgICAgICAgICAgKGZsYWdzICYgQ1VSTFVfTk9fREVGQVVMVF9QT1JUKSkKLSAgICAgICAgICAgIHBvcnQgPSBOVUxMOworICAgICAgaCA9IEN1cmxfYnVpbHRpbl9zY2hlbWUoc2NoZW1lKTsKKyAgICAgIGlmKCFwb3J0ICYmIChmbGFncyAmIENVUkxVX0RFRkFVTFRfUE9SVCkpIHsKKyAgICAgICAgLyogdGhlcmUncyBubyBzdG9yZWQgcG9ydCBudW1iZXIsIGJ1dCBhc2tlZCB0byBkZWxpdmVyCisgICAgICAgICAgIGEgZGVmYXVsdCBvbmUgZm9yIHRoZSBzY2hlbWUgKi8KKyAgICAgICAgaWYoaCkgeworICAgICAgICAgIG1zbnByaW50Zihwb3J0YnVmLCBzaXplb2YocG9ydGJ1ZiksICIlbGQiLCBoLT5kZWZwb3J0KTsKKyAgICAgICAgICBwb3J0ID0gcG9ydGJ1ZjsKICAgICAgICAgfQogICAgICAgfQorICAgICAgZWxzZSBpZihwb3J0KSB7CisgICAgICAgIC8qIHRoZXJlIGlzIGEgc3RvcmVkIHBvcnQgbnVtYmVyLCBidXQgYXNrZWQgdG8gaW5oaWJpdCBpZiBpdCBtYXRjaGVzCisgICAgICAgICAgIHRoZSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLworICAgICAgICBpZihoICYmIChoLT5kZWZwb3J0ID09IHUtPnBvcnRudW0pICYmCisgICAgICAgICAgIChmbGFncyAmIENVUkxVX05PX0RFRkFVTFRfUE9SVCkpCisgICAgICAgICAgcG9ydCA9IE5VTEw7CisgICAgICB9CisKICAgICAgIGlmKGggJiYgIShoLT5mbGFncyAmIFBST1RPUFRfVVJMT1BUSU9OUykpCiAgICAgICAgIG9wdGlvbnMgPSBOVUxMOwogCkBAIC0xMzMxLDcgKzEzNzQsOCBAQAogICBkZWZhdWx0OgogICAgIHJldHVybiBDVVJMVUVfVU5LTk9XTl9QQVJUOwogICB9Ci0gIGlmKHN0b3JlcCkgeworICBERUJVR0FTU0VSVChzdG9yZXApOworICB7CiAgICAgY29uc3QgY2hhciAqbmV3cCA9IHBhcnQ7CiAgICAgc2l6ZV90IG5hbGxvYyA9IHN0cmxlbihwYXJ0KTsKIApAQCAtMTQyMyw5ICsxNDY3LDE0IEBACiAgICAgfQogCiAgICAgaWYod2hhdCA9PSBDVVJMVVBBUlRfSE9TVCkgewotICAgICAgaWYoaG9zdG5hbWVfY2hlY2sodSwgKGNoYXIgKiluZXdwKSkgewotICAgICAgICBmcmVlKChjaGFyICopbmV3cCk7Ci0gICAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOworICAgICAgaWYoMCA9PSBzdHJsZW4obmV3cCkgJiYgKGZsYWdzICYgQ1VSTFVfTk9fQVVUSE9SSVRZKSkgeworICAgICAgICAvKiBTa2lwIGhvc3RuYW1lIGNoZWNrLCBpdCdzIGFsbG93ZWQgdG8gYmUgZW1wdHkuICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoaG9zdG5hbWVfY2hlY2sodSwgKGNoYXIgKiluZXdwKSkgeworICAgICAgICAgIGZyZWUoKGNoYXIgKiluZXdwKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsZGF0YS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsZGF0YS5oCmluZGV4IGQ3NTk1OTIuLmUxMzQ4Y2YgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGRhdGEuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxkYXRhLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTY4LDYgKzY4LDcgQEAKICNkZWZpbmUgUFJPVE9fRkFNSUxZX1BPUDMgKENVUkxQUk9UT19QT1AzfENVUkxQUk9UT19QT1AzUykKICNkZWZpbmUgUFJPVE9fRkFNSUxZX1NNQiAgKENVUkxQUk9UT19TTUJ8Q1VSTFBST1RPX1NNQlMpCiAjZGVmaW5lIFBST1RPX0ZBTUlMWV9TTVRQIChDVVJMUFJPVE9fU01UUHxDVVJMUFJPVE9fU01UUFMpCisjZGVmaW5lIFBST1RPX0ZBTUlMWV9TU0ggIChDVVJMUFJPVE9fU0NQfENVUkxQUk9UT19TRlRQKQogCiAjZGVmaW5lIERFRkFVTFRfQ09OTkNBQ0hFX1NJWkUgNQogCkBAIC0xMjMsMTIgKzEyNCwxMyBAQAogI2luY2x1ZGUgInNtdHAuaCIKICNpbmNsdWRlICJmdHAuaCIKICNpbmNsdWRlICJmaWxlLmgiCi0jaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidnNzaC9zc2guaCIKICNpbmNsdWRlICJodHRwLmgiCiAjaW5jbHVkZSAicnRzcC5oIgogI2luY2x1ZGUgInNtYi5oIgogI2luY2x1ZGUgIndpbGRjYXJkLmgiCiAjaW5jbHVkZSAibXVsdGloYW5kbGUuaCIKKyNpbmNsdWRlICJxdWljLmgiCiAKICNpZmRlZiBIQVZFX0dTU0FQSQogIyBpZmRlZiBIQVZFX0dTU0dOVQpAQCAtMTU3LDcgKzE1OSwxMyBAQAogICAoKHgpICYmICgoeCktPm1hZ2ljID09IENVUkxFQVNZX01BR0lDX05VTUJFUikpCiAKIC8qIHRoZSB0eXBlIHdlIHVzZSBmb3Igc3RvcmluZyBhIHNpbmdsZSBib29sZWFuIGJpdCAqLworI2lmZGVmIF9NU0NfVkVSCit0eXBlZGVmIGJvb2wgYml0OworI2RlZmluZSBCSVQoeCkgYm9vbCB4CisjZWxzZQogdHlwZWRlZiB1bnNpZ25lZCBpbnQgYml0OworI2RlZmluZSBCSVQoeCkgYml0IHg6MQorI2VuZGlmCiAKICNpZmRlZiBIQVZFX0dTU0FQSQogLyogVHlwZXMgbmVlZGVkIGZvciBrcmI1LWZ0cCBjb25uZWN0aW9ucyAqLwpAQCAtMTY1LDcgKzE3Myw3IEBACiAgIHZvaWQgKmRhdGE7CiAgIHNpemVfdCBzaXplOwogICBzaXplX3QgaW5kZXg7Ci0gIGJpdCBlb2ZfZmxhZzoxOworICBCSVQoZW9mX2ZsYWcpOwogfTsKIAogZW51bSBwcm90ZWN0aW9uX2xldmVsIHsKQEAgLTIwOCw3ICsyMTYsNyBAQAogI2lmIGRlZmluZWQoVVNFX1NTTCkKICAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQ7CiAjZW5kaWYKLSAgYml0IHVzZToxOworICBCSVQodXNlKTsKIH07CiAKIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgewpAQCAtMjIxLDEwICsyMjksMTEgQEAKICAgY2hhciAqZWdkc29ja2V0OyAgICAgICAvKiBwYXRoIHRvIGZpbGUgY29udGFpbmluZyB0aGUgRUdEIGRhZW1vbiBzb2NrZXQgKi8KICAgY2hhciAqY2lwaGVyX2xpc3Q7ICAgICAvKiBsaXN0IG9mIGNpcGhlcnMgdG8gdXNlICovCiAgIGNoYXIgKmNpcGhlcl9saXN0MTM7ICAgLyogbGlzdCBvZiBUTFMgMS4zIGNpcGhlciBzdWl0ZXMgdG8gdXNlICovCi0gIGJpdCB2ZXJpZnlwZWVyOjE7ICAgICAgLyogc2V0IFRSVUUgaWYgdGhpcyBpcyBkZXNpcmVkICovCi0gIGJpdCB2ZXJpZnlob3N0OjE7ICAgICAgLyogc2V0IFRSVUUgaWYgQ04vU0FOIG11c3QgbWF0Y2ggaG9zdG5hbWUgKi8KLSAgYml0IHZlcmlmeXN0YXR1czoxOyAgICAvKiBzZXQgVFJVRSBpZiBjZXJ0aWZpY2F0ZSBzdGF0dXMgbXVzdCBiZSBjaGVja2VkICovCi0gIGJpdCBzZXNzaW9uaWQ6MTsgICAgICAgLyogY2FjaGUgc2Vzc2lvbiBJRHMgb3Igbm90ICovCisgIGNoYXIgKnBpbm5lZF9rZXk7CisgIEJJVCh2ZXJpZnlwZWVyKTsgICAgICAgLyogc2V0IFRSVUUgaWYgdGhpcyBpcyBkZXNpcmVkICovCisgIEJJVCh2ZXJpZnlob3N0KTsgICAgICAgLyogc2V0IFRSVUUgaWYgQ04vU0FOIG11c3QgbWF0Y2ggaG9zdG5hbWUgKi8KKyAgQklUKHZlcmlmeXN0YXR1cyk7ICAgICAvKiBzZXQgVFJVRSBpZiBjZXJ0aWZpY2F0ZSBzdGF0dXMgbXVzdCBiZSBjaGVja2VkICovCisgIEJJVChzZXNzaW9uaWQpOyAgICAgICAgLyogY2FjaGUgc2Vzc2lvbiBJRHMgb3Igbm90ICovCiB9OwogCiBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHsKQEAgLTI0NCwxMCArMjUzLDExIEBACiAgIGNoYXIgKnBhc3N3b3JkOyAvKiBUTFMgcGFzc3dvcmQgKGZvciwgZS5nLiwgU1JQKSAqLwogICBlbnVtIENVUkxfVExTQVVUSCBhdXRodHlwZTsgLyogVExTIGF1dGhlbnRpY2F0aW9uIHR5cGUgKGRlZmF1bHQgU1JQKSAqLwogI2VuZGlmCi0gIGJpdCBjZXJ0aW5mbzoxOyAgICAgLyogZ2F0aGVyIGxvdHMgb2YgY2VydGlmaWNhdGUgaW5mbyAqLwotICBiaXQgZmFsc2VzdGFydDoxOwotICBiaXQgZW5hYmxlX2JlYXN0OjE7IC8qIGFsbG93IHRoaXMgZmxhdyBmb3IgaW50ZXJvcGVyYWJpbGl0eSdzIHNha2UqLwotICBiaXQgbm9fcmV2b2tlOjE7ICAgIC8qIGRpc2FibGUgU1NMIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tzICovCisgIEJJVChjZXJ0aW5mbyk7ICAgICAvKiBnYXRoZXIgbG90cyBvZiBjZXJ0aWZpY2F0ZSBpbmZvICovCisgIEJJVChmYWxzZXN0YXJ0KTsKKyAgQklUKGVuYWJsZV9iZWFzdCk7IC8qIGFsbG93IHRoaXMgZmxhdyBmb3IgaW50ZXJvcGVyYWJpbGl0eSdzIHNha2UqLworICBCSVQobm9fcmV2b2tlKTsgICAgLyogZGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBjaGVja3MgKi8KKyAgQklUKG5vX3BhcnRpYWxjaGFpbik7IC8qIGRvbid0IGFjY2VwdCBwYXJ0aWFsIGNlcnRpZmljYXRlIGNoYWlucyAqLwogfTsKIAogc3RydWN0IHNzbF9nZW5lcmFsX2NvbmZpZyB7CkBAIC0yOTAsOCArMzAwLDggQEAKICAgY2hhciAqcW9wOwogICBjaGFyICphbGdvcml0aG07CiAgIGludCBuYzsgLyogbm91bmNlIGNvdW50ICovCi0gIGJpdCBzdGFsZToxOyAvKiBzZXQgdHJ1ZSBmb3IgcmUtbmVnb3RpYXRpb24gKi8KLSAgYml0IHVzZXJoYXNoOjE7CisgIEJJVChzdGFsZSk7IC8qIHNldCB0cnVlIGZvciByZS1uZWdvdGlhdGlvbiAqLworICBCSVQodXNlcmhhc2gpOwogI2VuZGlmCiB9OwogCkBAIC0zNTcsNiArMzY3LDE0IEBACiAgIHVuc2lnbmVkIGNoYXIgbm9uY2VbOF07CiAgIHZvaWQgKnRhcmdldF9pbmZvOyAvKiBUYXJnZXRJbmZvIHJlY2VpdmVkIGluIHRoZSBudGxtIHR5cGUtMiBtZXNzYWdlICovCiAgIHVuc2lnbmVkIGludCB0YXJnZXRfaW5mb19sZW47CisKKyNpZiBkZWZpbmVkKE5UTE1fV0JfRU5BQkxFRCkKKyAgLyogdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFNhbWJhJ3Mgd2luYmluZCBkYWVtb24gaGVscGVyIG50bG1fYXV0aCAqLworICBjdXJsX3NvY2tldF90IG50bG1fYXV0aF9obHByX3NvY2tldDsKKyAgcGlkX3QgbnRsbV9hdXRoX2hscHJfcGlkOworICBjaGFyICpjaGFsbGVuZ2U7IC8qIFRoZSByZWNlaXZlZCBiYXNlNjQgZW5jb2RlZCBudGxtIHR5cGUtMiBtZXNzYWdlICovCisgIGNoYXIgKnJlc3BvbnNlOyAgLyogVGhlIGdlbmVyYXRlZCBiYXNlNjQgbnRsbSB0eXBlLTEvdHlwZS0zIG1lc3NhZ2UgKi8KKyNlbmRpZgogI2VuZGlmCiB9OwogI2VuZGlmCkBAIC0zODUsMTAgKzQwMywxMCBAQAogICBzaXplX3Qgb3V0cHV0X3Rva2VuX2xlbmd0aDsKICNlbmRpZgogI2VuZGlmCi0gIGJvb2wgbm9hdXRocGVyc2lzdDsKLSAgYm9vbCBoYXZlbm9hdXRocGVyc2lzdDsKLSAgYm9vbCBoYXZlbmVnZGF0YTsKLSAgYm9vbCBoYXZlbXVsdGlwbGVyZXF1ZXN0czsKKyAgQklUKG5vYXV0aHBlcnNpc3QpOworICBCSVQoaGF2ZW5vYXV0aHBlcnNpc3QpOworICBCSVQoaGF2ZW5lZ2RhdGEpOworICBCSVQoaGF2ZW11bHRpcGxlcmVxdWVzdHMpOwogfTsKICNlbmRpZgogCkBAIC00MDIsNjMgKzQyMCw2MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvbXBsZXRlICovCiAgIGJvb2wgdGNwY29ubmVjdFsyXTsgLyogdGhlIFRDUCBsYXllciAob3Igc2ltaWxhcikgaXMgY29ubmVjdGVkLCB0aGlzIGlzIHNldAogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCB0aW1lIG9uIHRoZSBmaXJzdCBjb25uZWN0IGZ1bmN0aW9uIGNhbGwgKi8KLSAgYml0IGNsb3NlOjE7IC8qIGlmIHNldCwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyByZXF1ZXN0ICovCi0gIGJpdCByZXVzZToxOyAvKiBpZiBzZXQsIHRoaXMgaXMgYSByZS11c2VkIGNvbm5lY3Rpb24gKi8KLSAgYml0IGNvbm5fdG9faG9zdDoxOyAvKiBpZiBzZXQsIHRoaXMgY29ubmVjdGlvbiBoYXMgYSAiY29ubmVjdCB0byBob3N0IgotICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcnJpZGVzIHRoZSBob3N0IGluIHRoZSBVUkwgKi8KLSAgYml0IGNvbm5fdG9fcG9ydDoxOyAvKiBpZiBzZXQsIHRoaXMgY29ubmVjdGlvbiBoYXMgYSAiY29ubmVjdCB0byBwb3J0IgotICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcnJpZGVzIHRoZSBwb3J0IGluIHRoZSBVUkwgKHJlbW90ZSBwb3J0KSAqLwotICBiaXQgcHJveHk6MTsgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIHByb3h5IC0gYW55IHR5cGUgKi8KLSAgYml0IGh0dHBwcm94eToxOyAgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIGh0dHAgcHJveHkgKi8KLSAgYml0IHNvY2tzcHJveHk6MTsgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIHNvY2tzIHByb3h5ICovCi0gIGJpdCB1c2VyX3Bhc3N3ZDoxOyAvKiBkbyB3ZSB1c2UgdXNlcitwYXNzd29yZCBmb3IgdGhpcyBjb25uZWN0aW9uPyAqLwotICBiaXQgcHJveHlfdXNlcl9wYXNzd2Q6MTsgLyogdXNlcitwYXNzd29yZCBmb3IgdGhlIHByb3h5PyAqLwotICBiaXQgaXB2Nl9pcDoxOyAvKiB3ZSBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIHNpdGUgc3BlY2lmaWVkIHdpdGggcHVyZSBJUHY2Ci0gICAgICAgICAgICAgICAgICAgIElQIGFkZHJlc3MgKi8KLSAgYml0IGlwdjY6MTsgICAgLyogd2UgY29tbXVuaWNhdGUgd2l0aCBhIHNpdGUgdXNpbmcgYW4gSVB2NiBhZGRyZXNzICovCi0gIGJpdCBkb19tb3JlOjE7IC8qIHRoaXMgaXMgc2V0IFRSVUUgaWYgdGhlIC0+Y3VybF9kb19tb3JlKCkgZnVuY3Rpb24gaXMKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9zZWQgdG8gYmUgY2FsbGVkLCBhZnRlciAtPmN1cmxfZG8oKSAqLwotICBiaXQgcHJvdG9jb25uc3RhcnQ6MTsvKiB0aGUgcHJvdG9jb2wgbGF5ZXIgaGFzIFNUQVJURUQgaXRzIG9wZXJhdGlvbiBhZnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgVENQIGxheWVyIGNvbm5lY3QgKi8KLSAgYml0IHJldHJ5OjE7ICAgICAgICAgLyogdGhpcyBjb25uZWN0aW9uIGlzIGFib3V0IHRvIGdldCBjbG9zZWQgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXR0ZW1wdGVkIGF0IGFub3RoZXIgY29ubmVjdGlvbi4gKi8KLSAgYml0IHR1bm5lbF9wcm94eToxOyAgLyogaWYgQ09OTkVDVCBpcyB1c2VkIHRvICJ0dW5uZWwiIHRocm91Z2ggdGhlIHByb3h5LgotICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGltcGxpY2l0IHdoZW4gU1NMLXByb3RvY29scyBhcmUgdXNlZCB0aHJvdWdoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXMsIGJ1dCBjYW4gYWxzbyBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcyAqLwotICBiaXQgYXV0aG5lZzoxOyAgICAgICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaGFzIHN0YXJ0ZWQsIHdoaWNoIG1lYW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2UgYXJlIGNyZWF0aW5nIGEgcmVxdWVzdCB3aXRoIGFuIGF1dGggaGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgaXMgbm90IHRoZSBmaW5hbCByZXF1ZXN0IGluIHRoZSBhdXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ290aWF0aW9uLiAqLwotICBiaXQgcmV3aW5kYWZ0ZXJzZW5kOjE7LyogVFJVRSB3aGVuIHRoZSBzZW5kaW5nIGNvdWxkbid0IGJlIHN0b3BwZWQgZXZlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvdWdoIGl0IHdpbGwgYmUgZGlzY2FyZGVkLiBXaGVuIHRoZSB3aG9sZSBzZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gaXMgZG9uZSwgd2UgbXVzdCBjYWxsIHRoZSBkYXRhIHJld2luZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suICovCisgIEJJVChjbG9zZSk7IC8qIGlmIHNldCwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyByZXF1ZXN0ICovCisgIEJJVChyZXVzZSk7IC8qIGlmIHNldCwgdGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbiAqLworICBCSVQoYWx0dXNlZCk7IC8qIHRoaXMgaXMgYW4gYWx0LXN2YyAicmVkaXJlY3QiICovCisgIEJJVChjb25uX3RvX2hvc3QpOyAvKiBpZiBzZXQsIHRoaXMgY29ubmVjdGlvbiBoYXMgYSAiY29ubmVjdCB0byBob3N0IgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIGhvc3QgaW4gdGhlIFVSTCAqLworICBCSVQoY29ubl90b19wb3J0KTsgLyogaWYgc2V0LCB0aGlzIGNvbm5lY3Rpb24gaGFzIGEgImNvbm5lY3QgdG8gcG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcnJpZGVzIHRoZSBwb3J0IGluIHRoZSBVUkwgKHJlbW90ZSBwb3J0KSAqLworICBCSVQocHJveHkpOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLworICBCSVQoaHR0cHByb3h5KTsgIC8qIGlmIHNldCwgdGhpcyB0cmFuc2ZlciBpcyBkb25lIHRocm91Z2ggYSBodHRwIHByb3h5ICovCisgIEJJVChzb2Nrc3Byb3h5KTsgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIHNvY2tzIHByb3h5ICovCisgIEJJVCh1c2VyX3Bhc3N3ZCk7IC8qIGRvIHdlIHVzZSB1c2VyK3Bhc3N3b3JkIGZvciB0aGlzIGNvbm5lY3Rpb24/ICovCisgIEJJVChwcm94eV91c2VyX3Bhc3N3ZCk7IC8qIHVzZXIrcGFzc3dvcmQgZm9yIHRoZSBwcm94eT8gKi8KKyAgQklUKGlwdjZfaXApOyAvKiB3ZSBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIHNpdGUgc3BlY2lmaWVkIHdpdGggcHVyZSBJUHY2CisgICAgICAgICAgICAgICAgICAgSVAgYWRkcmVzcyAqLworICBCSVQoaXB2Nik7ICAgIC8qIHdlIGNvbW11bmljYXRlIHdpdGggYSBzaXRlIHVzaW5nIGFuIElQdjYgYWRkcmVzcyAqLworICBCSVQoZG9fbW9yZSk7IC8qIHRoaXMgaXMgc2V0IFRSVUUgaWYgdGhlIC0+Y3VybF9kb19tb3JlKCkgZnVuY3Rpb24gaXMKKyAgICAgICAgICAgICAgICAgICBzdXBwb3NlZCB0byBiZSBjYWxsZWQsIGFmdGVyIC0+Y3VybF9kbygpICovCisgIEJJVChwcm90b2Nvbm5zdGFydCk7LyogdGhlIHByb3RvY29sIGxheWVyIGhhcyBTVEFSVEVEIGl0cyBvcGVyYXRpb24gYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgVENQIGxheWVyIGNvbm5lY3QgKi8KKyAgQklUKHJldHJ5KTsgICAgICAgICAvKiB0aGlzIGNvbm5lY3Rpb24gaXMgYWJvdXQgdG8gZ2V0IGNsb3NlZCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgIHJlLWF0dGVtcHRlZCBhdCBhbm90aGVyIGNvbm5lY3Rpb24uICovCisgIEJJVCh0dW5uZWxfcHJveHkpOyAgLyogaWYgQ09OTkVDVCBpcyB1c2VkIHRvICJ0dW5uZWwiIHRocm91Z2ggdGhlIHByb3h5LgorICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaW1wbGljaXQgd2hlbiBTU0wtcHJvdG9jb2xzIGFyZSB1c2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm94aWVzLCBidXQgY2FuIGFsc28gYmUgZW5hYmxlZCBleHBsaWNpdGx5IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcyAqLworICBCSVQoYXV0aG5lZyk7ICAgICAgIC8qIFRSVUUgd2hlbiB0aGUgYXV0aCBwaGFzZSBoYXMgc3RhcnRlZCwgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdlIGFyZSBjcmVhdGluZyBhIHJlcXVlc3Qgd2l0aCBhbiBhdXRoIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgaXMgbm90IHRoZSBmaW5hbCByZXF1ZXN0IGluIHRoZSBhdXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgbmVnb3RpYXRpb24uICovCisgIEJJVChyZXdpbmRhZnRlcnNlbmQpOy8qIFRSVUUgd2hlbiB0aGUgc2VuZGluZyBjb3VsZG4ndCBiZSBzdG9wcGVkIGV2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvdWdoIGl0IHdpbGwgYmUgZGlzY2FyZGVkLiBXaGVuIHRoZSB3aG9sZSBzZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBpcyBkb25lLCB3ZSBtdXN0IGNhbGwgdGhlIGRhdGEgcmV3aW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLiAqLwogI2lmbmRlZiBDVVJMX0RJU0FCTEVfRlRQCi0gIGJpdCBmdHBfdXNlX2Vwc3Y6MTsgIC8qIEFzIHNldCB3aXRoIENVUkxPUFRfRlRQX1VTRV9FUFNWLCBidXQgaWYgd2UgZmluZCBvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRVBTViBkb2Vzbid0IHdvcmsgd2UgZGlzYWJsZSBpdCBmb3IgdGhlIGZvcnRoY29taW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICovCi0gIGJpdCBmdHBfdXNlX2VwcnQ6MTsgIC8qIEFzIHNldCB3aXRoIENVUkxPUFRfRlRQX1VTRV9FUFJULCBidXQgaWYgd2UgZmluZCBvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRVBSVCBkb2Vzbid0IHdvcmsgd2UgZGlzYWJsZSBpdCBmb3IgdGhlIGZvcnRoY29taW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICovCi0gIGJpdCBmdHBfdXNlX2RhdGFfc3NsOjE7IC8qIEVuYWJsZWQgU1NMIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uICovCisgIEJJVChmdHBfdXNlX2Vwc3YpOyAgLyogQXMgc2V0IHdpdGggQ1VSTE9QVF9GVFBfVVNFX0VQU1YsIGJ1dCBpZiB3ZSBmaW5kIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgIEVQU1YgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZworICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICovCisgIEJJVChmdHBfdXNlX2VwcnQpOyAgLyogQXMgc2V0IHdpdGggQ1VSTE9QVF9GVFBfVVNFX0VQUlQsIGJ1dCBpZiB3ZSBmaW5kIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgIEVQUlQgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZworICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICovCisgIEJJVChmdHBfdXNlX2RhdGFfc3NsKTsgLyogRW5hYmxlZCBTU0wgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24gKi8KICNlbmRpZgotICBiaXQgbmV0cmM6MTsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCi0gIGJpdCB1c2VycHdkX2luX3VybDoxOyAvKiBuYW1lK3Bhc3N3b3JkIGZvdW5kIGluIHVybCAqLwotICBiaXQgc3RyZWFtX3dhc19yZXdvdW5kOjE7IC8qIFRoZSBzdHJlYW0gd2FzIHJld291bmQgYWZ0ZXIgYSByZXF1ZXN0IHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0IHRoZSBlbmQgb2YgaXRzIHJlc3BvbnNlIGJ5dGUgYm91bmRhcnkgKi8KLSAgYml0IHByb3h5X2Nvbm5lY3RfY2xvc2VkOjE7IC8qIFRSVUUgaWYgYSBwcm94eSBkaXNjb25uZWN0ZWQgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgQ09OTkVDVCByZXF1ZXN0IHdpdGggYXV0aCwgc28gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBzaG91bGQgcmVjb25uZWN0IGFuZCBjb250aW51ZS4gKi8KLSAgYml0IGJvdW5kOjE7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCi0gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCi0gIGJpdCB0eXBlX3NldDoxOyAgLyogdHlwZT0gd2FzIHVzZWQgaW4gdGhlIFVSTCAqLwotICBiaXQgbXVsdGlwbGV4OjE7IC8qIGNvbm5lY3Rpb24gaXMgbXVsdGlwbGV4ZWQgKi8KLSAgYml0IHRjcF9mYXN0b3BlbjoxOyAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLwotICBiaXQgdGxzX2VuYWJsZV9ucG46MTsgIC8qIFRMUyBOUE4gZXh0ZW5zaW9uPyAqLwotICBiaXQgdGxzX2VuYWJsZV9hbHBuOjE7IC8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KLSAgYml0IHNvY2tzcHJveHlfY29ubmVjdGluZzoxOyAvKiBjb25uZWN0aW5nIHRocm91Z2ggYSBzb2NrcyBwcm94eSAqLwotICBiaXQgY29ubmVjdF9vbmx5OjE7CisgIEJJVChuZXRyYyk7ICAgICAgICAgLyogbmFtZStwYXNzd29yZCBwcm92aWRlZCBieSBuZXRyYyAqLworICBCSVQodXNlcnB3ZF9pbl91cmwpOyAvKiBuYW1lK3Bhc3N3b3JkIGZvdW5kIGluIHVybCAqLworICBCSVQoc3RyZWFtX3dhc19yZXdvdW5kKTsgLyogVGhlIHN0cmVhbSB3YXMgcmV3b3VuZCBhZnRlciBhIHJlcXVlc3QgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdCB0aGUgZW5kIG9mIGl0cyByZXNwb25zZSBieXRlIGJvdW5kYXJ5ICovCisgIEJJVChwcm94eV9jb25uZWN0X2Nsb3NlZCk7IC8qIFRSVUUgaWYgYSBwcm94eSBkaXNjb25uZWN0ZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBDT05ORUNUIHJlcXVlc3Qgd2l0aCBhdXRoLCBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmN1cmwgc2hvdWxkIHJlY29ubmVjdCBhbmQgY29udGludWUuICovCisgIEJJVChib3VuZCk7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCisgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgQklUKHR5cGVfc2V0KTsgIC8qIHR5cGU9IHdhcyB1c2VkIGluIHRoZSBVUkwgKi8KKyAgQklUKG11bHRpcGxleCk7IC8qIGNvbm5lY3Rpb24gaXMgbXVsdGlwbGV4ZWQgKi8KKyAgQklUKHRjcF9mYXN0b3Blbik7IC8qIHVzZSBUQ1AgRmFzdCBPcGVuICovCisgIEJJVCh0bHNfZW5hYmxlX25wbik7ICAvKiBUTFMgTlBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKHRsc19lbmFibGVfYWxwbik7IC8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKGNvbm5lY3Rfb25seSk7CiB9OwogCiBzdHJ1Y3QgaG9zdG5hbWUgewpAQCAtNDkxLDcgKzUwOSw3IEBACiAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOwogICBpbnQgc3RhdHVzOyAvKiBpZiBkb25lIGlzIFRSVUUsIHRoaXMgaXMgdGhlIHN0YXR1cyBmcm9tIHRoZSBjYWxsYmFjayAqLwogICB2b2lkICpvc19zcGVjaWZpYzsgIC8qICdzdHJ1Y3QgdGhyZWFkX2RhdGEnIGZvciBXaW5kb3dzICovCi0gIGJpdCBkb25lOjE7ICAvKiBzZXQgVFJVRSB3aGVuIHRoZSBsb29rdXAgaXMgY29tcGxldGUgKi8KKyAgQklUKGRvbmUpOyAgLyogc2V0IFRSVUUgd2hlbiB0aGUgbG9va3VwIGlzIGNvbXBsZXRlICovCiB9OwogCiAjZGVmaW5lIEZJUlNUU09DS0VUICAgICAwCkBAIC01MTgsNiArNTM2LDI0IEBACiAgIFVQR1IxMDFfV09SS0lORyAgICAgICAgICAgICAvKiB0YWxraW5nIHVwZ3JhZGVkIHByb3RvY29sICovCiB9OwogCitlbnVtIGRvaF9zbG90cyB7CisgIC8qIEV4cGxpY2l0IHZhbHVlcyBmb3IgZmlyc3QgdHdvIHN5bWJvbHMgc28gYXMgdG8gbWF0Y2ggaGFyZC1jb2RlZAorICAgKiBjb25zdGFudHMgaW4gZXhpc3RpbmcgY29kZQorICAgKi8KKyAgRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y0ID0gMCwgLyogbWFrZSAnVjQnIHN0YW5kIG91dCBmb3IgcmVhZGFiaWxpdHkgKi8KKyAgRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y2ID0gMSwgLyogJ1Y2JyBsaWtld2lzZSAqLworCisgIC8qIFNwYWNlIGhlcmUgZm9yIChwb3NzaWJseSBidWlsZC1zcGVjaWZpYykgYWRkaXRpb25hbCBzbG90IGRlZmluaXRpb25zICovCisKKyAgLyogZm9yIGV4YW1wbGUgKi8KKyAgLyogI2lmZGVmIFdBTlRfRE9IX0ZPT0JBUl9UWFQgKi8KKyAgLyogICBET0hfUFJPQkVfU0xPVF9GT09CQVJfVFhULCAqLworICAvKiAjZW5kaWYgKi8KKworICAvKiBBRlRFUiBhbGwgc2xvdCBkZWZpbml0aW9ucywgZXN0YWJsaXNoIGhvdyBtYW55IHdlIGhhdmUgKi8KKyAgRE9IX1BST0JFX1NMT1RTCit9OworCiBzdHJ1Y3QgZG9ocmVzcG9uc2UgewogICB1bnNpZ25lZCBjaGFyICptZW1vcnk7CiAgIHNpemVfdCBzaXplOwpAQCAtNTM0LDcgKzU3MCw3IEBACiAKIHN0cnVjdCBkb2hkYXRhIHsKICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM7Ci0gIHN0cnVjdCBkbnNwcm9iZSBwcm9iZVsyXTsKKyAgc3RydWN0IGRuc3Byb2JlIHByb2JlW0RPSF9QUk9CRV9TTE9UU107CiAgIHVuc2lnbmVkIGludCBwZW5kaW5nOyAvKiBzdGlsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyAqLwogICBjb25zdCBjaGFyICpob3N0OwogICBpbnQgcG9ydDsKQEAgLTYxMiwyMCArNjQ4LDIwIEBACiAjaWZuZGVmIENVUkxfRElTQUJMRV9ET0gKICAgc3RydWN0IGRvaGRhdGEgZG9oOyAvKiBEb0ggc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyByZXF1ZXN0ICovCiAjZW5kaWYKLSAgYml0IGhlYWRlcjoxOyAgICAgICAvKiBpbmNvbWluZyBkYXRhIGhhcyBIVFRQIGhlYWRlciAqLwotICBiaXQgY29udGVudF9yYW5nZToxOyAvKiBzZXQgVFJVRSBpZiBDb250ZW50LVJhbmdlOiB3YXMgZm91bmQgKi8KLSAgYml0IHVwbG9hZF9kb25lOjE7ICAvKiBzZXQgdG8gVFJVRSB3aGVuIGRvaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgYW5kIHdlJ3JlIHVwbG9hZGluZyB0aGUgbGFzdCBjaHVuayAqLwotICBiaXQgaWdub3JlYm9keToxOyAgIC8qIHdlIHJlYWQgYSByZXNwb25zZS1ib2R5IGJ1dCB3ZSBpZ25vcmUgaXQhICovCi0gIGJpdCBpZ25vcmVjbDoxOyAgICAgLyogVGhpcyBIVFRQIHJlc3BvbnNlIGhhcyBubyBib2R5IHNvIHdlIGlnbm9yZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50LUxlbmd0aDogaGVhZGVyICovCi0gIGJpdCBjaHVuazoxOyAvKiBpZiBzZXQsIHRoaXMgaXMgYSBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nICovCi0gIGJpdCB1cGxvYWRfY2h1bmt5OjE7IC8qIHNldCBUUlVFIGlmIHdlIGFyZSBkb2luZyBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHVwbG9hZCAqLwotICBiaXQgZ2V0aGVhZGVyOjE7ICAgIC8qIFRSVUUgaWYgaGVhZGVyIHBhcnNpbmcgaXMgd2FudGVkICovCi0gIGJpdCBmb3JiaWRjaHVuazoxOyAgLyogdXNlZCBvbmx5IHRvIGV4cGxpY2l0bHkgZm9yYmlkIGNodW5rLXVwbG9hZCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyB1cGxvYWQgYnVmZmVycy4gU2VlIHJlYWRtb3JlZGF0YSgpIGluIGh0dHAuYwotICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXRhaWxzLiAqLworICBCSVQoaGVhZGVyKTsgICAgICAgLyogaW5jb21pbmcgZGF0YSBoYXMgSFRUUCBoZWFkZXIgKi8KKyAgQklUKGNvbnRlbnRfcmFuZ2UpOyAvKiBzZXQgVFJVRSBpZiBDb250ZW50LVJhbmdlOiB3YXMgZm91bmQgKi8KKyAgQklUKHVwbG9hZF9kb25lKTsgIC8qIHNldCB0byBUUlVFIHdoZW4gZG9pbmcgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZworICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIGFuZCB3ZSdyZSB1cGxvYWRpbmcgdGhlIGxhc3QgY2h1bmsgKi8KKyAgQklUKGlnbm9yZWJvZHkpOyAgIC8qIHdlIHJlYWQgYSByZXNwb25zZS1ib2R5IGJ1dCB3ZSBpZ25vcmUgaXQhICovCisgIEJJVChodHRwX2JvZHlsZXNzKTsgLyogSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSBpcyBiZXR3ZWVuIDEwMCBhbmQgMTk5LAorICAgICAgICAgICAgICAgICAgICAgICAgIDIwNCBvciAzMDQgKi8KKyAgQklUKGNodW5rKTsgLyogaWYgc2V0LCB0aGlzIGlzIGEgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZyAqLworICBCSVQodXBsb2FkX2NodW5reSk7IC8qIHNldCBUUlVFIGlmIHdlIGFyZSBkb2luZyBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgb24gdXBsb2FkICovCisgIEJJVChnZXRoZWFkZXIpOyAgICAvKiBUUlVFIGlmIGhlYWRlciBwYXJzaW5nIGlzIHdhbnRlZCAqLworICBCSVQoZm9yYmlkY2h1bmspOyAgLyogdXNlZCBvbmx5IHRvIGV4cGxpY2l0bHkgZm9yYmlkIGNodW5rLXVwbG9hZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHVwbG9hZCBidWZmZXJzLiBTZWUgcmVhZG1vcmVkYXRhKCkgaW4gaHR0cC5jCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGV0YWlscy4gKi8KIH07CiAKIC8qCkBAIC02NjMsMjcgKzY5OSwyMyBAQAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgUFJPVE9DT05ORUNUIHBoYXNlLCBhbmQgaXQKICAgICAgc2hvdWxkIHRoZW4gcmV0dXJuIGEgcHJvcGVyIGZkIHNldCAqLwogICBpbnQgKCpwcm90b19nZXRzb2NrKShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAKICAgLyogQ2FsbGVkIGZyb20gdGhlIG11bHRpIGludGVyZmFjZSBkdXJpbmcgdGhlIERPSU5HIHBoYXNlLCBhbmQgaXQgc2hvdWxkCiAgICAgIHRoZW4gcmV0dXJuIGEgcHJvcGVyIGZkIHNldCAqLwogICBpbnQgKCpkb2luZ19nZXRzb2NrKShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAKICAgLyogQ2FsbGVkIGZyb20gdGhlIG11bHRpIGludGVyZmFjZSBkdXJpbmcgdGhlIERPX01PUkUgcGhhc2UsIGFuZCBpdCBzaG91bGQKICAgICAgdGhlbiByZXR1cm4gYSBwcm9wZXIgZmQgc2V0ICovCiAgIGludCAoKmRvbW9yZV9nZXRzb2NrKShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAKICAgLyogQ2FsbGVkIGZyb20gdGhlIG11bHRpIGludGVyZmFjZSBkdXJpbmcgdGhlIERPX0RPTkUsIFBFUkZPUk0gYW5kCiAgICAgIFdBSVRQRVJGT1JNIHBoYXNlcywgYW5kIGl0IHNob3VsZCB0aGVuIHJldHVybiBhIHByb3BlciBmZCBzZXQuIE5vdCBzZXR0aW5nCiAgICAgIHRoaXMgd2lsbCBtYWtlIGxpYmN1cmwgdXNlIHRoZSBnZW5lcmljIGRlZmF1bHQgb25lLiAqLwogICBpbnQgKCpwZXJmb3JtX2dldHNvY2spKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBUaGlzIGZ1bmN0aW9uICpNQVkqIGJlIHNldCB0byBhIHByb3RvY29sLWRlcGVuZGVudCBmdW5jdGlvbiB0aGF0IGlzIHJ1bgogICAgKiBieSB0aGUgY3VybF9kaXNjb25uZWN0KCksIGFzIGEgc3RlcCBpbiB0aGUgZGlzY29ubmVjdGlvbi4gIElmIHRoZSBoYW5kbGVyCkBAIC03NzgsOCArODEwLDQ1IEBACiAgICAgVFVOTkVMX0NPTk5FQ1QsIC8qIENPTk5FQ1QgaGFzIGJlZW4gc2VudCBvZmYgKi8KICAgICBUVU5ORUxfQ09NUExFVEUgLyogQ09OTkVDVCByZXNwb25zZSByZWNlaXZlZCBjb21wbGV0ZWx5ICovCiAgIH0gdHVubmVsX3N0YXRlOwotICBiaXQgY2h1bmtlZF9lbmNvZGluZzoxOwotICBiaXQgY2xvc2VfY29ubmVjdGlvbjoxOworICBCSVQoY2h1bmtlZF9lbmNvZGluZyk7CisgIEJJVChjbG9zZV9jb25uZWN0aW9uKTsKK307CisKK3N0cnVjdCBsZGFwY29ubmluZm87CisKKy8qIGZvciB0aGUgKFNPQ0tTKSBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KK2VudW0gY29ubmVjdF90IHsKKyAgQ09OTkVDVF9JTklULAorICBDT05ORUNUX1NPQ0tTX0lOSVQsIC8qIDEgKi8KKyAgQ09OTkVDVF9TT0NLU19TRU5ELCAvKiAyIHdhaXRpbmcgdG8gc2VuZCBtb3JlIGZpcnN0IGRhdGEgKi8KKyAgQ09OTkVDVF9TT0NLU19SRUFEX0lOSVQsIC8qIDMgc2V0IHVwIHJlYWQgKi8KKyAgQ09OTkVDVF9TT0NLU19SRUFELCAvKiA0IHJlYWQgc2VydmVyIHJlc3BvbnNlICovCisgIENPTk5FQ1RfR1NTQVBJX0lOSVQsIC8qIDUgKi8KKyAgQ09OTkVDVF9BVVRIX0lOSVQsIC8qIDYgc2V0dXAgb3V0Z29pbmcgYXV0aCBidWZmZXIgKi8KKyAgQ09OTkVDVF9BVVRIX1NFTkQsIC8qIDcgc2VuZCBhdXRoICovCisgIENPTk5FQ1RfQVVUSF9SRUFELCAvKiA4IHJlYWQgYXV0aCByZXNwb25zZSAqLworICBDT05ORUNUX1JFUV9JTklULCAgLyogOSBpbml0IFNPQ0tTICJyZXF1ZXN0IiAqLworICBDT05ORUNUX1JFU09MVklORywgLyogMTAgKi8KKyAgQ09OTkVDVF9SRVNPTFZFRCwgIC8qIDExICovCisgIENPTk5FQ1RfUkVTT0xWRV9SRU1PVEUsIC8qIDEyICovCisgIENPTk5FQ1RfUkVRX1NFTkQsICAvKiAxMyAqLworICBDT05ORUNUX1JFUV9TRU5ESU5HLCAvKiAxNCAqLworICBDT05ORUNUX1JFUV9SRUFELCAgLyogMTUgKi8KKyAgQ09OTkVDVF9SRVFfUkVBRF9NT1JFLCAvKiAxNiAqLworICBDT05ORUNUX0RPTkUgLyogMTcgY29ubmVjdGVkIGZpbmUgdG8gdGhlIHJlbW90ZSBvciB0aGUgU09DS1MgcHJveHkgKi8KK307CisKKyNkZWZpbmUgU09DS1NfU1RBVEUoeCkgKCgoeCkgPj0gQ09OTkVDVF9TT0NLU19JTklUKSAmJiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8IENPTk5FQ1RfRE9ORSkpCisjZGVmaW5lIFNPQ0tTX1JFUVVFU1RfQlVGU0laRSA2MDAgIC8qIHJvb20gZm9yIGxhcmdlIHVzZXIvcHcgKDI1NSBtYXggZWFjaCkgKi8KKworc3RydWN0IGNvbm5zdGF0ZSB7CisgIGVudW0gY29ubmVjdF90IHN0YXRlOworICB1bnNpZ25lZCBjaGFyIHNvY2tzcmVxW1NPQ0tTX1JFUVVFU1RfQlVGU0laRV07CisKKyAgLyogQ09OTkVDVF9TT0NLU19TRU5EICovCisgIHNzaXplX3Qgb3V0c3RhbmRpbmc7ICAvKiBzZW5kIHRoaXMgbWFueSBieXRlcyBtb3JlICovCisgIHVuc2lnbmVkIGNoYXIgKm91dHA7IC8qIHNlbmQgZnJvbSB0aGlzIHBvaW50ZXIgKi8KIH07CiAKIC8qCkBAIC03OTEsNyArODYwLDcgQEAKICAgICAgY2F1dGlvbiB0aGF0IHRoaXMgbWlnaHQgdmVyeSB3ZWxsIHZhcnkgYmV0d2VlbiBkaWZmZXJlbnQgdGltZXMgdGhpcwogICAgICBjb25uZWN0aW9uIGlzIHVzZWQhICovCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGE7Ci0KKyAgc3RydWN0IGNvbm5zdGF0ZSBjbm5jdDsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBidW5kbGVfbm9kZTsgLyogY29ubmNhY2hlICovCiAKICAgLyogY2h1bmsgaXMgZm9yIEhUVFAgY2h1bmtlZCBlbmNvZGluZywgYnV0IGlzIGluIHRoZSBnZW5lcmFsIGNvbm5lY3RkYXRhCkBAIC04MzEsNyArOTAwLDE2IEBACiAKICAgdW5zaWduZWQgaW50IHNjb3BlX2lkOyAgLyogU2NvcGUgaWQgZm9yIElQdjYgKi8KIAotICBpbnQgc29ja3R5cGU7ICAvKiBTT0NLX1NUUkVBTSBvciBTT0NLX0RHUkFNICovCisgIGVudW0geworICAgIFRSTlNQUlRfVENQID0gMywKKyAgICBUUk5TUFJUX1VEUCA9IDQsCisgICAgVFJOU1BSVF9RVUlDID0gNQorICB9IHRyYW5zcG9ydDsKKworI2lmZGVmIEVOQUJMRV9RVUlDCisgIHN0cnVjdCBxdWljc29ja2V0IGhlcXVpY1syXTsgLyogdHdvLCBmb3IgaGFwcHkgZXllYmFsbHMhICovCisgIHN0cnVjdCBxdWljc29ja2V0ICpxdWljOworI2VuZGlmCiAKICAgc3RydWN0IGhvc3RuYW1lIGhvc3Q7CiAgIGNoYXIgKmhvc3RuYW1lX3Jlc29sdmU7IC8qIGhvc3QgbmFtZSB0byByZXNvbHZlIHRvIGFkZHJlc3MsIGFsbG9jYXRlZCAqLwpAQCAtODcwLDcgKzk0OCw3IEBACiAgIGNoYXIgKnBhc3N3ZDsgIC8qIHBhc3N3b3JkIHN0cmluZywgYWxsb2NhdGVkICovCiAgIGNoYXIgKm9wdGlvbnM7IC8qIG9wdGlvbnMgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KIAotICBjaGFyICpvYXV0aF9iZWFyZXI7IC8qIGJlYXJlciB0b2tlbiBmb3IgT0F1dGggMi4wLCBhbGxvY2F0ZWQgKi8KKyAgY2hhciAqc2FzbF9hdXRoemlkOyAgICAgLyogYXV0aG9yaXNhdGlvbiBpZGVudGl0eSBzdHJpbmcsIGFsbG9jYXRlZCAqLwogCiAgIGludCBodHRwdmVyc2lvbjsgICAgICAgIC8qIHRoZSBIVFRQIHZlcnNpb24qMTAgcmVwb3J0ZWQgYnkgdGhlIHNlcnZlciAqLwogICBpbnQgcnRzcHZlcnNpb247ICAgICAgICAvKiB0aGUgUlRTUCB2ZXJzaW9uKjEwIHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgKi8KQEAgLTg4MSw4ICs5NTksNiBAQAogICBjdXJsX3NvY2tldF90IHNvY2tbMl07IC8qIHR3byBzb2NrZXRzLCB0aGUgc2Vjb25kIGlzIHVzZWQgZm9yIHRoZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgd2hlbiBkb2luZyBGVFAgKi8KICAgY3VybF9zb2NrZXRfdCB0ZW1wc29ja1syXTsgLyogdGVtcG9yYXJ5IHNvY2tldHMgZm9yIGhhcHB5IGV5ZWJhbGxzICovCi0gIGJvb2wgc29ja19hY2NlcHRlZFsyXTsgLyogVFJVRSBpZiB0aGUgc29ja2V0IG9uIHRoaXMgaW5kZXggd2FzIGNyZWF0ZWQgd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCgpICovCiAgIEN1cmxfcmVjdiAqcmVjdlsyXTsKICAgQ3VybF9zZW5kICpzZW5kWzJdOwogCkBAIC05MDQsOCArOTgwLDggQEAKICAgc3RydWN0IGN1cmx0aW1lIGNvbm5lY3R0aW1lOwogICAvKiBUaGUgdHdvIGZpZWxkcyBiZWxvdyBnZXQgc2V0IGluIEN1cmxfY29ubmVjdGhvc3QgKi8KICAgaW50IG51bV9hZGRyOyAvKiBudW1iZXIgb2YgYWRkcmVzc2VzIHRvIHRyeSB0byBjb25uZWN0IHRvICovCi0gIHRpbWVfdCB0aW1lb3V0bXNfcGVyX2FkZHI7IC8qIGhvdyBsb25nIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwZW5kIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeWluZyB0byBjb25uZWN0IHRvIGVhY2ggSVAgYWRkcmVzcyAqLworICB0aW1lZGlmZl90IHRpbWVvdXRtc19wZXJfYWRkcjsgLyogaG93IGxvbmcgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeWluZyB0byBjb25uZWN0IHRvIGVhY2ggSVAgYWRkcmVzcyAqLwogCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmhhbmRsZXI7IC8qIENvbm5lY3Rpb24ncyBwcm90b2NvbCBoYW5kbGVyICovCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmdpdmVuOyAgIC8qIFRoZSBwcm90b2NvbCBmaXJzdCBnaXZlbiAqLwpAQCAtOTQyLDcgKzEwMTgsNyBAQAogICB9IGFsbG9jcHRyOwogCiAjaWZkZWYgSEFWRV9HU1NBUEkKLSAgYml0IHNlY19jb21wbGV0ZToxOyAvKiBpZiBLZXJiZXJvcyBpcyBlbmFibGVkIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KKyAgQklUKHNlY19jb21wbGV0ZSk7IC8qIGlmIEtlcmJlcm9zIGlzIGVuYWJsZWQgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwogICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgY29tbWFuZF9wcm90OwogICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgZGF0YV9wcm90OwogICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgcmVxdWVzdF9kYXRhX3Byb3Q7CkBAIC05NzQsMTQgKzEwNTAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgYXV0aGVudGljYXRlcyBjb25uZWN0aW9ucywgbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlIHJlcXVlc3RzISAqLwogICBzdHJ1Y3QgbnRsbWRhdGEgcHJveHludGxtOyAvKiBOVExNIGRhdGEgZm9yIHByb3h5ICovCi0KLSNpZiBkZWZpbmVkKE5UTE1fV0JfRU5BQkxFRCkKLSAgLyogdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFNhbWJhJ3Mgd2luYmluZCBkYWVtb24gaGVscGVyIG50bG1fYXV0aCAqLwotICBjdXJsX3NvY2tldF90IG50bG1fYXV0aF9obHByX3NvY2tldDsKLSAgcGlkX3QgbnRsbV9hdXRoX2hscHJfcGlkOwotICBjaGFyICpjaGFsbGVuZ2VfaGVhZGVyOwotICBjaGFyICpyZXNwb25zZV9oZWFkZXI7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgVVNFX1NQTkVHTwpAQCAtMTAxMCw3ICsxMDc4LDggQEAKICAgICBzdHJ1Y3Qgc210cF9jb25uIHNtdHBjOwogICAgIHN0cnVjdCBydHNwX2Nvbm4gcnRzcGM7CiAgICAgc3RydWN0IHNtYl9jb25uIHNtYmM7Ci0gICAgdm9pZCAqZ2VuZXJpYzsgLyogUlRNUCBhbmQgTERBUCB1c2UgdGhpcyAqLworICAgIHZvaWQgKnJ0bXA7CisgICAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGRhcGM7CiAgIH0gcHJvdG87CiAKICAgaW50IGNzZWxlY3RfYml0czsgLyogYml0bWFzayBvZiBzb2NrZXQgZXZlbnRzICovCkBAIC0xMDM0LDE2ICsxMTAzLDE4IEBACiAKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCiAgIGNoYXIgKnVuaXhfZG9tYWluX3NvY2tldDsKLSAgYml0IGFic3RyYWN0X3VuaXhfc29ja2V0OjE7CisgIEJJVChhYnN0cmFjdF91bml4X3NvY2tldCk7CiAjZW5kaWYKLSAgYml0IHRsc191cGdyYWRlZDoxOworICBCSVQodGxzX3VwZ3JhZGVkKTsKICAgLyogdGhlIHR3byBmb2xsb3dpbmcgKl9pbnVzZSBmaWVsZHMgYXJlIG9ubHkgZmxhZ3MsIG5vdCBjb3VudGVycyBpbiBhbnkgd2F5LgogICAgICBJZiBUUlVFIGl0IG1lYW5zIHRoZSBjaGFubmVsIGlzIGluIHVzZSwgYW5kIGlmIEZBTFNFIGl0IG1lYW5zIHRoZSBjaGFubmVsCiAgICAgIGlzIHVwIGZvciBncmFicyBieSBvbmUuICovCi0gIGJpdCByZWFkY2hhbm5lbF9pbnVzZToxOyAgLyogd2hldGhlciB0aGUgcmVhZCBjaGFubmVsIGlzIGluIHVzZSBieSBhbiBlYXN5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlICovCi0gIGJpdCB3cml0ZWNoYW5uZWxfaW51c2U6MTsgLyogd2hldGhlciB0aGUgd3JpdGUgY2hhbm5lbCBpcyBpbiB1c2UgYnkgYW4gZWFzeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSAqLworICBCSVQocmVhZGNoYW5uZWxfaW51c2UpOyAgLyogd2hldGhlciB0aGUgcmVhZCBjaGFubmVsIGlzIGluIHVzZSBieSBhbiBlYXN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgKi8KKyAgQklUKHdyaXRlY2hhbm5lbF9pbnVzZSk7IC8qIHdoZXRoZXIgdGhlIHdyaXRlIGNoYW5uZWwgaXMgaW4gdXNlIGJ5IGFuIGVhc3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSAqLworICBCSVQoc29ja19hY2NlcHRlZCk7IC8qIFRSVUUgaWYgdGhlIFNFQ09OREFSWVNPQ0tFVCB3YXMgY3JlYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0KCkgKi8KIH07CiAKIC8qIFRoZSBlbmQgb2YgY29ubmVjdGRhdGEuICovCkBAIC0xMDY1LDYgKzExMzYsNyBAQAogICBsb25nIG51bWNvbm5lY3RzOyAvKiBob3cgbWFueSBuZXcgY29ubmVjdGlvbiBkaWQgbGliY3VybCBjcmVhdGVkICovCiAgIGNoYXIgKmNvbnRlbnR0eXBlOyAvKiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBvYmplY3QgKi8KICAgY2hhciAqd291bGRyZWRpcmVjdDsgLyogVVJMIHRoaXMgd291bGQndmUgYmVlbiByZWRpcmVjdGVkIHRvIGlmIGFza2VkIHRvICovCisgIGN1cmxfb2ZmX3QgcmV0cnlfYWZ0ZXI7IC8qIGluZm8gZnJvbSBSZXRyeS1BZnRlcjogaGVhZGVyICovCiAKICAgLyogUHVyZUluZm8gbWVtYmVycyAnY29ubl9wcmltYXJ5X2lwJywgJ2Nvbm5fcHJpbWFyeV9wb3J0JywgJ2Nvbm5fbG9jYWxfaXAnCiAgICAgIGFuZCwgJ2Nvbm5fbG9jYWxfcG9ydCcgYXJlIGNvcGllZCBvdmVyIGZyb20gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCBpbgpAQCAtMTA4MSwxMSArMTE1MywxMSBAQAogICBjb25zdCBjaGFyICpjb25uX3NjaGVtZTsKICAgdW5zaWduZWQgaW50IGNvbm5fcHJvdG9jb2w7CiAgIHN0cnVjdCBjdXJsX2NlcnRpbmZvIGNlcnRzOyAvKiBpbmZvIGFib3V0IHRoZSBjZXJ0cywgb25seSBwb3B1bGF0ZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5TU0wgYnVpbGRzLiBBc2tlZCBmb3Igd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DRVJUSU5GTyAvIENVUkxJTkZPX0NFUlRJTkZPICovCi0KLSAgYml0IHRpbWVjb25kOjE7ICAvKiBzZXQgdG8gVFJVRSBpZiB0aGUgdGltZSBjb25kaXRpb24gZGlkbid0IG1hdGNoLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAgIHRodXMgbWFkZSB0aGUgZG9jdW1lbnQgTk9UIGdldCBmZXRjaGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuU1NMLCBHbnVUTFMsIFNjaGFubmVsLCBOU1MgYW5kIEdTS2l0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMuIEFza2VkIGZvciB3aXRoIENVUkxPUFRfQ0VSVElORk8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KKyAgQklUKHRpbWVjb25kKTsgIC8qIHNldCB0byBUUlVFIGlmIHRoZSB0aW1lIGNvbmRpdGlvbiBkaWRuJ3QgbWF0Y2gsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICB0aHVzIG1hZGUgdGhlIGRvY3VtZW50IE5PVCBnZXQgZmV0Y2hlZCAqLwogfTsKIAogCkBAIC0xMTAyLDE3ICsxMTc0LDE3IEBACiAgIGludCB3aWR0aDsgLyogc2NyZWVuIHdpZHRoIGF0IGRvd25sb2FkIHN0YXJ0ICovCiAgIGludCBmbGFnczsgLyogc2VlIHByb2dyZXNzLmggKi8KIAotICB0aW1lX3QgdGltZXNwZW50OworICB0aW1lZGlmZl90IHRpbWVzcGVudDsKIAogICBjdXJsX29mZl90IGRsc3BlZWQ7CiAgIGN1cmxfb2ZmX3QgdWxzcGVlZDsKIAotICB0aW1lX3QgdF9uc2xvb2t1cDsKLSAgdGltZV90IHRfY29ubmVjdDsKLSAgdGltZV90IHRfYXBwY29ubmVjdDsKLSAgdGltZV90IHRfcHJldHJhbnNmZXI7Ci0gIHRpbWVfdCB0X3N0YXJ0dHJhbnNmZXI7Ci0gIHRpbWVfdCB0X3JlZGlyZWN0OworICB0aW1lZGlmZl90IHRfbnNsb29rdXA7CisgIHRpbWVkaWZmX3QgdF9jb25uZWN0OworICB0aW1lZGlmZl90IHRfYXBwY29ubmVjdDsKKyAgdGltZWRpZmZfdCB0X3ByZXRyYW5zZmVyOworICB0aW1lZGlmZl90IHRfc3RhcnR0cmFuc2ZlcjsKKyAgdGltZWRpZmZfdCB0X3JlZGlyZWN0OwogCiAgIHN0cnVjdCBjdXJsdGltZSBzdGFydDsKICAgc3RydWN0IGN1cmx0aW1lIHRfc3RhcnRzaW5nbGU7CkBAIC0xMTMyLDggKzEyMDQsOCBAQAogICBjdXJsX29mZl90IHNwZWVkZXJbIENVUlJfVElNRSBdOwogICBzdHJ1Y3QgY3VybHRpbWUgc3BlZWRlcl90aW1lWyBDVVJSX1RJTUUgXTsKICAgaW50IHNwZWVkZXJfYzsKLSAgYml0IGNhbGxiYWNrOjE7ICAvKiBzZXQgd2hlbiBwcm9ncmVzcyBjYWxsYmFjayBpcyB1c2VkICovCi0gIGJpdCBpc190X3N0YXJ0cmFuc2Zlcl9zZXQ6MTsKKyAgQklUKGNhbGxiYWNrKTsgIC8qIHNldCB3aGVuIHByb2dyZXNzIGNhbGxiYWNrIGlzIHVzZWQgKi8KKyAgQklUKGlzX3Rfc3RhcnRyYW5zZmVyX3NldCk7CiB9OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTE4MSwxMiArMTI1MywxMiBAQAogICB1bnNpZ25lZCBsb25nIHBpY2tlZDsKICAgdW5zaWduZWQgbG9uZyBhdmFpbDsgLyogQml0bWFzayBmb3Igd2hhdCB0aGUgc2VydmVyIHJlcG9ydHMgdG8gc3VwcG9ydCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyByZXNvdXJjZSAqLwotICBiaXQgZG9uZToxOyAgLyogVFJVRSB3aGVuIHRoZSBhdXRoIHBoYXNlIGlzIGRvbmUgYW5kIHJlYWR5IHRvIGRvIHRoZQotICAgICAgICAgICAgICAgICAqYWN0dWFsKiByZXF1ZXN0ICovCi0gIGJpdCBtdWx0aXBhc3M6MTsgLyogVFJVRSBpZiB0aGlzIGlzIG5vdCB5ZXQgYXV0aGVudGljYXRlZCBidXQgd2l0aGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICBhdXRoIG11bHRpcGFzcyBuZWdvdGlhdGlvbiAqLwotICBiaXQgaWVzdHlsZToxOyAvKiBUUlVFIGlmIGRpZ2VzdCBzaG91bGQgYmUgZG9uZSBJRS1zdHlsZSBvciBGQUxTRSBpZiBpdAotICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIFJGQyBjb21wbGlhbnQgKi8KKyAgQklUKGRvbmUpOyAgLyogVFJVRSB3aGVuIHRoZSBhdXRoIHBoYXNlIGlzIGRvbmUgYW5kIHJlYWR5IHRvIGRvIHRoZQorICAgICAgICAgICAgICAgICBhY3R1YWwgcmVxdWVzdCAqLworICBCSVQobXVsdGlwYXNzKTsgLyogVFJVRSBpZiB0aGlzIGlzIG5vdCB5ZXQgYXV0aGVudGljYXRlZCBidXQgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgYXV0aCBtdWx0aXBhc3MgbmVnb3RpYXRpb24gKi8KKyAgQklUKGllc3R5bGUpOyAvKiBUUlVFIGlmIGRpZ2VzdCBzaG91bGQgYmUgZG9uZSBJRS1zdHlsZSBvciBGQUxTRSBpZiBpdAorICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBSRkMgY29tcGxpYW50ICovCiB9OwogCiBzdHJ1Y3QgQ3VybF9odHRwMl9kZXAgewpAQCAtMTIyMCw2ICsxMjkyLDcgQEAKICAgRVhQSVJFX1NQRUVEQ0hFQ0ssCiAgIEVYUElSRV9USU1FT1VULAogICBFWFBJUkVfVE9PRkFTVCwKKyAgRVhQSVJFX1FVSUMsCiAgIEVYUElSRV9MQVNUIC8qIG5vdCBhbiBhY3R1YWwgdGltZXIsIHVzZWQgYXMgYSBtYXJrZXIgb25seSAqLwogfSBleHBpcmVfaWQ7CiAKQEAgLTEzMTUsNyArMTM4OCw3IEBACiAvKiBkbyBGVFAgbGluZS1lbmQgY29udmVyc2lvbnMgb24gbW9zdCBwbGF0Zm9ybXMgKi8KICNkZWZpbmUgQ1VSTF9ET19MSU5FRU5EX0NPTlYKICAgLyogZm9yIEZUUCBkb3dubG9hZHM6IHRyYWNrIENSTEYgc2VxdWVuY2VzIHRoYXQgc3BhbiBibG9ja3MgKi8KLSAgYml0IHByZXZfYmxvY2tfaGFkX3RyYWlsaW5nX2NyOjE7CisgIEJJVChwcmV2X2Jsb2NrX2hhZF90cmFpbGluZ19jcik7CiAgIC8qIGZvciBGVFAgZG93bmxvYWRzOiBob3cgbWFueSBDUkxGcyBkaWQgd2UgY29udmVydGVkIHRvIExGcz8gKi8KICAgY3VybF9vZmZfdCBjcmxmX2NvbnZlcnNpb25zOwogI2VuZGlmCkBAIC0xMzUwLDMyICsxNDIzLDM1IEBACiAgIHRyYWlsZXJzX3N0YXRlIHRyYWlsZXJzX3N0YXRlOyAvKiB3aGV0aGVyIHdlIGFyZSBzZW5kaW5nIHRyYWlsZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2hhdCBzdGFnZSBhcmUgd2UgYXQgKi8KICNpZmRlZiBDVVJMREVCVUcKLSAgYml0IGNvbm5jYWNoZV9sb2NrOjE7CisgIEJJVChjb25uY2FjaGVfbG9jayk7CiAjZW5kaWYKICAgLyogd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZCwgdGhlIG11bHRpIGhhbmRsZSBpcyAib3duZWQiIGJ5CiAgICAgIHRoZSBlYXN5IGhhbmRsZSBzbyBjdXJsX2Vhc3lfY2xlYW51cCgpIG9uIHN1Y2ggYW4gZWFzeSBoYW5kbGUgd2lsbAogICAgICBhbHNvIGNsb3NlIHRoZSBtdWx0aSBoYW5kbGUhICovCi0gIGJpdCBtdWx0aV9vd25lZF9ieV9lYXN5OjE7CisgIEJJVChtdWx0aV9vd25lZF9ieV9lYXN5KTsKIAotICBiaXQgdGhpc19pc19hX2ZvbGxvdzoxOyAvKiB0aGlzIGlzIGEgZm9sbG93ZWQgTG9jYXRpb246IHJlcXVlc3QgKi8KLSAgYml0IHJlZnVzZWRfc3RyZWFtOjE7IC8qIHRoaXMgd2FzIHJlZnVzZWQsIHRyeSBhZ2FpbiAqLwotICBiaXQgZXJyb3JidWY6MTsgLyogU2V0IHRvIFRSVUUgaWYgdGhlIGVycm9yIGJ1ZmZlciBpcyBhbHJlYWR5IGZpbGxlZCBpbi4KKyAgQklUKHRoaXNfaXNfYV9mb2xsb3cpOyAvKiB0aGlzIGlzIGEgZm9sbG93ZWQgTG9jYXRpb246IHJlcXVlc3QgKi8KKyAgQklUKHJlZnVzZWRfc3RyZWFtKTsgLyogdGhpcyB3YXMgcmVmdXNlZCwgdHJ5IGFnYWluICovCisgIEJJVChlcnJvcmJ1Zik7IC8qIFNldCB0byBUUlVFIGlmIHRoZSBlcnJvciBidWZmZXIgaXMgYWxyZWFkeSBmaWxsZWQgaW4uCiAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBzZXQgdG8gRkFMU0UgZXZlcnkgdGltZSBfZWFzeV9wZXJmb3JtKCkgaXMKICAgICAgICAgICAgICAgICAgICAgY2FsbGVkLiAqLwotICBiaXQgYWxsb3dfcG9ydDoxOyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKKyAgQklUKGFsbG93X3BvcnQpOyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHdheXMgc2V0IFRSVUUgd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZC4gKi8KLSAgYml0IGF1dGhwcm9ibGVtOjE7IC8qIFRSVUUgaWYgdGhlcmUncyBzb21lIHByb2JsZW0gYXV0aGVudGljYXRpbmcgKi8KKyAgQklUKGF1dGhwcm9ibGVtKTsgLyogVFJVRSBpZiB0aGVyZSdzIHNvbWUgcHJvYmxlbSBhdXRoZW50aWNhdGluZyAqLwogICAvKiBzZXQgYWZ0ZXIgaW5pdGlhbCBVU0VSIGZhaWx1cmUsIHRvIHByZXZlbnQgYW4gYXV0aGVudGljYXRpb24gbG9vcCAqLwotICBiaXQgZnRwX3RyeWluZ19hbHRlcm5hdGl2ZToxOwotICBiaXQgd2lsZGNhcmRtYXRjaDoxOyAvKiBlbmFibGUgd2lsZGNhcmQgbWF0Y2hpbmcgKi8KLSAgYml0IGV4cGVjdDEwMGhlYWRlcjoxOyAgLyogVFJVRSBpZiB3ZSBhZGRlZCBFeHBlY3Q6IDEwMC1jb250aW51ZSAqLwotICBiaXQgdXNlX3JhbmdlOjE7Ci0gIGJpdCByYW5nZXN0cmluZ2FsbG9jOjE7IC8qIHRoZSByYW5nZSBzdHJpbmcgaXMgbWFsbG9jKCknZWQgKi8KLSAgYml0IGRvbmU6MTsgLyogc2V0IHRvIEZBTFNFIHdoZW4gQ3VybF9pbml0X2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQorICBCSVQoZnRwX3RyeWluZ19hbHRlcm5hdGl2ZSk7CisgIEJJVCh3aWxkY2FyZG1hdGNoKTsgLyogZW5hYmxlIHdpbGRjYXJkIG1hdGNoaW5nICovCisgIEJJVChleHBlY3QxMDBoZWFkZXIpOyAgLyogVFJVRSBpZiB3ZSBhZGRlZCBFeHBlY3Q6IDEwMC1jb250aW51ZSAqLworICBCSVQoZGlzYWJsZWV4cGVjdCk7ICAgIC8qIFRSVUUgaWYgRXhwZWN0OiBpcyBkaXNhYmxlZCBkdWUgdG8gYSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxNyByZXNwb25zZSAqLworICBCSVQodXNlX3JhbmdlKTsKKyAgQklUKHJhbmdlc3RyaW5nYWxsb2MpOyAvKiB0aGUgcmFuZ2Ugc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCisgIEJJVChkb25lKTsgLyogc2V0IHRvIEZBTFNFIHdoZW4gQ3VybF9pbml0X2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQogICAgICAgICAgICAgICAgICAgd2hlbiBtdWx0aV9kb25lKCkgaXMgY2FsbGVkLCB0byBwcmV2ZW50IG11bHRpX2RvbmUoKSB0byBnZXQKICAgICAgICAgICAgICAgICAgIGludm9rZWQgdHdpY2Ugd2hlbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzIHVzZWQuICovCi0gIGJpdCBzdHJlYW1fZGVwZW5kc19lOjE7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KLSAgYml0IHByZXZpb3VzbHlwZW5kaW5nOjE7IC8qIHRoaXMgdHJhbnNmZXIgV0FTIGluIHRoZSBtdWx0aS0+cGVuZGluZyBxdWV1ZSAqLworICBCSVQoc3RyZWFtX2RlcGVuZHNfZSk7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KKyAgQklUKHByZXZpb3VzbHlwZW5kaW5nKTsgLyogdGhpcyB0cmFuc2ZlciBXQVMgaW4gdGhlIG11bHRpLT5wZW5kaW5nIHF1ZXVlICovCisgIEJJVChjb29raWVfZW5naW5lKTsKIH07CiAKIApAQCAtMTM5Myw5ICsxNDY5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoQ09PS0lFRklMRSkgY2FsbHMgKi8KICAgc3RydWN0IGN1cmxfc2xpc3QgKnJlc29sdmU7IC8qIHNldCB0byBwb2ludCB0byB0aGUgc2V0LnJlc29sdmUgbGlzdCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNob3VsZCBiZSBkZWFsdCB3aXRoIGluIHByZXRyYW5zZmVyICovCi0gIGJpdCB1cmxfYWxsb2M6MTsgICAvKiBVUkwgc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCi0gIGJpdCByZWZlcmVyX2FsbG9jOjE7IC8qIHJlZmVyZXIgc3RyaW5nIGlzIG1hbGxvYygpZWQgKi8KLSAgYml0IHdpbGRjYXJkX3Jlc29sdmU6MTsgLyogU2V0IHRvIHRydWUgaWYgYW55IHJlc29sdmUgY2hhbmdlIGlzIGEKKyAgQklUKHVybF9hbGxvYyk7ICAgLyogVVJMIHN0cmluZyBpcyBtYWxsb2MoKSdlZCAqLworICBCSVQocmVmZXJlcl9hbGxvYyk7IC8qIHJlZmVyZXIgc3RyaW5nIGlzIG1hbGxvYygpZWQgKi8KKyAgQklUKHdpbGRjYXJkX3Jlc29sdmUpOyAvKiBTZXQgdG8gdHJ1ZSBpZiBhbnkgcmVzb2x2ZSBjaGFuZ2UgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgKi8KIH07CiAKQEAgLTE0MTAsNiArMTQ4NiwxNCBAQAogCiBzdHJ1Y3QgQ3VybF9tdWx0aTsgICAgLyogZGVjbGFyZWQgYW5kIHVzZWQgb25seSBpbiBtdWx0aS5jICovCiAKKy8qCisgKiBUaGlzIGVudW1lcmF0aW9uIE1VU1Qgbm90IHVzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzICgjaWZkZWZzKSwgbmV3CisgKiBudWxsIHRlcm1pbmF0ZWQgc3RyaW5ncyBNVVNUIGJlIGFkZGVkIHRvIHRoZSBlbnVtZXJhdGlvbiBpbW1lZGlhdGVseQorICogYmVmb3JlIFNUUklOR19MQVNUWkVST1RFUk1JTkFURUQsIGJpbmFyeSBmaWVsZHMgaW1tZWRpYXRlbHkgYmVmb3JlCisgKiBTVFJJTkdfTEFTVC4gV2hlbiBkb2luZyBzbywgZW5zdXJlIHRoYXQgdGhlIHBhY2thZ2VzL09TNDAwL2Noa3N0cmluZy5jCisgKiB0ZXN0IGlzIHVwZGF0ZWQgYW5kIGFwcGxpY2FibGUgY2hhbmdlcyBmb3IgRUJDRElDIHRvIEFTQ0lJIGNvbnZlcnNpb24KKyAqIGFyZSBjYXRlcmVkIGZvciBpbiBjdXJsX2Vhc3lfc2V0b3B0X2Njc2lkKCkKKyAqLwogZW51bSBkdXBzdHJpbmcgewogICBTVFJJTkdfQ0VSVF9PUklHLCAgICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBuYW1lICovCiAgIFNUUklOR19DRVJUX1BST1hZLCAgICAgIC8qIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUgKi8KQEAgLTE0NjYsMzIgKzE1NTAsMzUgQEAKICAgU1RSSU5HX1JUU1BfU0VTU0lPTl9JRCwgLyogU2Vzc2lvbiBJRCB0byB1c2UgKi8KICAgU1RSSU5HX1JUU1BfU1RSRUFNX1VSSSwgLyogU3RyZWFtIFVSSSBmb3IgdGhpcyByZXF1ZXN0ICovCiAgIFNUUklOR19SVFNQX1RSQU5TUE9SVCwgIC8qIFRyYW5zcG9ydCBmb3IgdGhpcyBzZXNzaW9uICovCi0jaWZkZWYgVVNFX1NTSAorCiAgIFNUUklOR19TU0hfUFJJVkFURV9LRVksIC8qIHBhdGggdG8gdGhlIHByaXZhdGUga2V5IGZpbGUgZm9yIGF1dGggKi8KICAgU1RSSU5HX1NTSF9QVUJMSUNfS0VZLCAgLyogcGF0aCB0byB0aGUgcHVibGljIGtleSBmaWxlIGZvciBhdXRoICovCiAgIFNUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENSwgLyogbWQ1IG9mIGhvc3QgcHVibGljIGtleSBpbiBhc2NpaSBoZXggKi8KICAgU1RSSU5HX1NTSF9LTk9XTkhPU1RTLCAgLyogZmlsZSBuYW1lIG9mIGtub3duaG9zdHMgZmlsZSAqLwotI2VuZGlmCisKICAgU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRSwgLyogUHJveHkgc2VydmljZSBuYW1lICovCiAgIFNUUklOR19TRVJWSUNFX05BTUUsICAgIC8qIFNlcnZpY2UgbmFtZSAqLwogICBTVFJJTkdfTUFJTF9GUk9NLAogICBTVFJJTkdfTUFJTF9BVVRILAogCi0jaWZkZWYgVVNFX1RMU19TUlAKICAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJRywgIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KICAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfUFJPWFksIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KICAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJRywgIC8qIFRMUyBhdXRoIDxwYXNzd29yZD4gKi8KICAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfUFJPWFksIC8qIFRMUyBhdXRoIDxwYXNzd29yZD4gKi8KLSNlbmRpZgorCiAgIFNUUklOR19CRUFSRVIsICAgICAgICAgICAgICAgIC8qIDxiZWFyZXI+LCBpZiB1c2VkICovCi0jaWZkZWYgVVNFX1VOSVhfU09DS0VUUworCiAgIFNUUklOR19VTklYX1NPQ0tFVF9QQVRILCAgICAgIC8qIHBhdGggdG8gVW5peCBzb2NrZXQsIGlmIHVzZWQgKi8KLSNlbmRpZgorCiAgIFNUUklOR19UQVJHRVQsICAgICAgICAgICAgICAgIC8qIENVUkxPUFRfUkVRVUVTVF9UQVJHRVQgKi8KICAgU1RSSU5HX0RPSCwgICAgICAgICAgICAgICAgICAgLyogQ1VSTE9QVF9ET0hfVVJMICovCi0jaWZkZWYgVVNFX0FMVFNWQworCiAgIFNUUklOR19BTFRTVkMsICAgICAgICAgICAgICAgIC8qIENVUkxPUFRfQUxUU1ZDICovCi0jZW5kaWYKKworICBTVFJJTkdfU0FTTF9BVVRIWklELCAgICAgICAgICAvKiBDVVJMT1BUX1NBU0xfQVVUSFpJRCAqLworCisgIFNUUklOR19URU1QX1VSTCwgICAgICAgICAgICAgIC8qIHRlbXAgVVJMIHN0b3JhZ2UgZm9yIHByb3h5IHVzZSAqLworCiAgIC8qIC0tIGVuZCBvZiB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncyAtLSAqLwogCiAgIFNUUklOR19MQVNUWkVST1RFUk1JTkFURUQsCkBAIC0xNjcxLDg0ICsxNzU4LDg0IEBACiAgIENVUkxVICp1aDsgLyogVVJMIGhhbmRsZSBmb3IgdGhlIGN1cnJlbnQgcGFyc2VkIFVSTCAqLwogICB2b2lkICp0cmFpbGVyX2RhdGE7IC8qIHBvaW50ZXIgdG8gcGFzcyB0byB0cmFpbGVyIGRhdGEgY2FsbGJhY2sgKi8KICAgY3VybF90cmFpbGVyX2NhbGxiYWNrIHRyYWlsZXJfY2FsbGJhY2s7IC8qIHRyYWlsaW5nIGRhdGEgY2FsbGJhY2sgKi8KLSAgYml0IGlzX2ZyZWFkX3NldDoxOyAvKiBoYXMgcmVhZCBjYWxsYmFjayBiZWVuIHNldCB0byBub24tTlVMTD8gKi8KLSAgYml0IGlzX2Z3cml0ZV9zZXQ6MTsgLyogaGFzIHdyaXRlIGNhbGxiYWNrIGJlZW4gc2V0IHRvIG5vbi1OVUxMPyAqLwotICBiaXQgZnJlZV9yZWZlcmVyOjE7IC8qIHNldCBUUlVFIGlmICdyZWZlcmVyJyBwb2ludHMgdG8gYSBzdHJpbmcgd2UKKyAgQklUKGlzX2ZyZWFkX3NldCk7IC8qIGhhcyByZWFkIGNhbGxiYWNrIGJlZW4gc2V0IHRvIG5vbi1OVUxMPyAqLworICBCSVQoaXNfZndyaXRlX3NldCk7IC8qIGhhcyB3cml0ZSBjYWxsYmFjayBiZWVuIHNldCB0byBub24tTlVMTD8gKi8KKyAgQklUKGZyZWVfcmVmZXJlcik7IC8qIHNldCBUUlVFIGlmICdyZWZlcmVyJyBwb2ludHMgdG8gYSBzdHJpbmcgd2UKICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCAqLwotICBiaXQgdGZ0cF9ub19vcHRpb25zOjE7IC8qIGRvIG5vdCBzZW5kIFRGVFAgb3B0aW9ucyByZXF1ZXN0cyAqLwotICBiaXQgc2VwX2hlYWRlcnM6MTsgICAgIC8qIGhhbmRsZSBob3N0IGFuZCBwcm94eSBoZWFkZXJzIHNlcGFyYXRlbHkgKi8KLSAgYml0IGNvb2tpZXNlc3Npb246MTsgICAvKiBuZXcgY29va2llIHNlc3Npb24/ICovCi0gIGJpdCBjcmxmOjE7ICAgICAgICAgICAgLyogY29udmVydCBjcmxmIG9uIGZ0cCB1cGxvYWQoPykgKi8KLSAgYml0IHN0cmlwX3BhdGhfc2xhc2g6MTsgLyogc3RyaXAgb2ZmIGluaXRpYWwgc2xhc2ggZnJvbSBwYXRoICovCi0gIGJpdCBzc2hfY29tcHJlc3Npb246MTsgICAgICAgICAgICAvKiBlbmFibGUgU1NIIGNvbXByZXNzaW9uICovCisgIEJJVCh0ZnRwX25vX29wdGlvbnMpOyAvKiBkbyBub3Qgc2VuZCBURlRQIG9wdGlvbnMgcmVxdWVzdHMgKi8KKyAgQklUKHNlcF9oZWFkZXJzKTsgICAgIC8qIGhhbmRsZSBob3N0IGFuZCBwcm94eSBoZWFkZXJzIHNlcGFyYXRlbHkgKi8KKyAgQklUKGNvb2tpZXNlc3Npb24pOyAgIC8qIG5ldyBjb29raWUgc2Vzc2lvbj8gKi8KKyAgQklUKGNybGYpOyAgICAgICAgICAgIC8qIGNvbnZlcnQgY3JsZiBvbiBmdHAgdXBsb2FkKD8pICovCisgIEJJVChzdHJpcF9wYXRoX3NsYXNoKTsgLyogc3RyaXAgb2ZmIGluaXRpYWwgc2xhc2ggZnJvbSBwYXRoICovCisgIEJJVChzc2hfY29tcHJlc3Npb24pOyAgICAgICAgICAgIC8qIGVuYWJsZSBTU0ggY29tcHJlc3Npb24gKi8KIAogLyogSGVyZSBmb2xsb3dzIGJvb2xlYW4gc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IHRvIGJlaGF2ZSBkdXJpbmcKICAgIHRoaXMgc2Vzc2lvbi4gVGhleSBhcmUgU1RBVElDLCBzZXQgYnkgbGliY3VybCB1c2VycyBvciBhdCBsZWFzdCBpbml0aWFsbHkKICAgIGFuZCB0aGV5IGRvbid0IGNoYW5nZSBkdXJpbmcgb3BlcmF0aW9ucy4gKi8KLSAgYml0IGdldF9maWxldGltZToxOyAgICAgLyogZ2V0IHRoZSB0aW1lIGFuZCBnZXQgb2YgdGhlIHJlbW90ZSBmaWxlICovCi0gIGJpdCB0dW5uZWxfdGhydV9odHRwcHJveHk6MTsgLyogdXNlIENPTk5FQ1QgdGhyb3VnaCBhIEhUVFAgcHJveHkgKi8KLSAgYml0IHByZWZlcl9hc2NpaToxOyAgICAgLyogQVNDSUkgcmF0aGVyIHRoYW4gYmluYXJ5ICovCi0gIGJpdCBmdHBfYXBwZW5kOjE7ICAgICAgIC8qIGFwcGVuZCwgbm90IG92ZXJ3cml0ZSwgb24gdXBsb2FkICovCi0gIGJpdCBmdHBfbGlzdF9vbmx5OjE7ICAgIC8qIHN3aXRjaCBGVFAgY29tbWFuZCBmb3IgbGlzdGluZyBkaXJlY3RvcmllcyAqLworICBCSVQoZ2V0X2ZpbGV0aW1lKTsgICAgIC8qIGdldCB0aGUgdGltZSBhbmQgZ2V0IG9mIHRoZSByZW1vdGUgZmlsZSAqLworICBCSVQodHVubmVsX3RocnVfaHR0cHByb3h5KTsgLyogdXNlIENPTk5FQ1QgdGhyb3VnaCBhIEhUVFAgcHJveHkgKi8KKyAgQklUKHByZWZlcl9hc2NpaSk7ICAgICAvKiBBU0NJSSByYXRoZXIgdGhhbiBiaW5hcnkgKi8KKyAgQklUKGZ0cF9hcHBlbmQpOyAgICAgICAvKiBhcHBlbmQsIG5vdCBvdmVyd3JpdGUsIG9uIHVwbG9hZCAqLworICBCSVQoZnRwX2xpc3Rfb25seSk7ICAgIC8qIHN3aXRjaCBGVFAgY29tbWFuZCBmb3IgbGlzdGluZyBkaXJlY3RvcmllcyAqLwogI2lmbmRlZiBDVVJMX0RJU0FCTEVfRlRQCi0gIGJpdCBmdHBfdXNlX3BvcnQ6MTsgICAgIC8qIHVzZSB0aGUgRlRQIFBPUlQgY29tbWFuZCAqLwotICBiaXQgZnRwX3VzZV9lcHN2OjE7ICAgLyogaWYgRVBTViBpcyB0byBiZSBhdHRlbXB0ZWQgb3Igbm90ICovCi0gIGJpdCBmdHBfdXNlX2VwcnQ6MTsgICAvKiBpZiBFUFJUIGlzIHRvIGJlIGF0dGVtcHRlZCBvciBub3QgKi8KLSAgYml0IGZ0cF91c2VfcHJldDoxOyAgIC8qIGlmIFBSRVQgaXMgdG8gYmUgdXNlZCBiZWZvcmUgUEFTViBvciBub3QgKi8KLSAgYml0IGZ0cF9za2lwX2lwOjE7ICAgIC8qIHNraXAgdGhlIElQIGFkZHJlc3MgdGhlIEZUUCBzZXJ2ZXIgcGFzc2VzIG9uIHRvCisgIEJJVChmdHBfdXNlX3BvcnQpOyAgICAgLyogdXNlIHRoZSBGVFAgUE9SVCBjb21tYW5kICovCisgIEJJVChmdHBfdXNlX2Vwc3YpOyAgICAgLyogaWYgRVBTViBpcyB0byBiZSBhdHRlbXB0ZWQgb3Igbm90ICovCisgIEJJVChmdHBfdXNlX2VwcnQpOyAgICAgLyogaWYgRVBSVCBpcyB0byBiZSBhdHRlbXB0ZWQgb3Igbm90ICovCisgIEJJVChmdHBfdXNlX3ByZXQpOyAgICAgLyogaWYgUFJFVCBpcyB0byBiZSB1c2VkIGJlZm9yZSBQQVNWIG9yIG5vdCAqLworICBCSVQoZnRwX3NraXBfaXApOyAgICAgIC8qIHNraXAgdGhlIElQIGFkZHJlc3MgdGhlIEZUUCBzZXJ2ZXIgcGFzc2VzIG9uIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXMgKi8KICNlbmRpZgotICBiaXQgaGlkZV9wcm9ncmVzczoxOyAgICAvKiBkb24ndCB1c2UgdGhlIHByb2dyZXNzIG1ldGVyICovCi0gIGJpdCBodHRwX2ZhaWxfb25fZXJyb3I6MTsgIC8qIGZhaWwgb24gSFRUUCBlcnJvciBjb2RlcyA+PSA0MDAgKi8KLSAgYml0IGh0dHBfa2VlcF9zZW5kaW5nX29uX2Vycm9yOjE7IC8qIGZvciBIVFRQIHN0YXR1cyBjb2RlcyA+PSAzMDAgKi8KLSAgYml0IGh0dHBfZm9sbG93X2xvY2F0aW9uOjE7IC8qIGZvbGxvdyBIVFRQIHJlZGlyZWN0cyAqLwotICBiaXQgaHR0cF90cmFuc2Zlcl9lbmNvZGluZzoxOyAvKiByZXF1ZXN0IGNvbXByZXNzZWQgSFRUUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXItZW5jb2RpbmcgKi8KLSAgYml0IGFsbG93X2F1dGhfdG9fb3RoZXJfaG9zdHM6MTsKLSAgYml0IGluY2x1ZGVfaGVhZGVyOjE7IC8qIGluY2x1ZGUgcmVjZWl2ZWQgcHJvdG9jb2wgaGVhZGVycyBpbiBkYXRhIG91dHB1dCAqLwotICBiaXQgaHR0cF9zZXRfcmVmZXJlcjoxOyAvKiBpcyBhIGN1c3RvbSByZWZlcmVyIHVzZWQgKi8KLSAgYml0IGh0dHBfYXV0b19yZWZlcmVyOjE7IC8qIHNldCAiY29ycmVjdCIgcmVmZXJlciB3aGVuIGZvbGxvd2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAqLwotICBiaXQgb3B0X25vX2JvZHk6MTsgICAgLyogYXMgc2V0IHdpdGggQ1VSTE9QVF9OT0JPRFkgKi8KLSAgYml0IHVwbG9hZDoxOyAgICAgICAgIC8qIHVwbG9hZCByZXF1ZXN0ICovCi0gIGJpdCB2ZXJib3NlOjE7ICAgICAgICAvKiBvdXRwdXQgdmVyYm9zaXR5ICovCi0gIGJpdCBrcmI6MTsgICAgICAgICAgICAvKiBLZXJiZXJvcyBjb25uZWN0aW9uIHJlcXVlc3RlZCAqLwotICBiaXQgcmV1c2VfZm9yYmlkOjE7ICAgLyogZm9yYmlkZGVuIHRvIGJlIHJldXNlZCwgY2xvc2UgYWZ0ZXIgdXNlICovCi0gIGJpdCByZXVzZV9mcmVzaDoxOyAgICAvKiBkbyBub3QgcmUtdXNlIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gICovCi0KLSAgYml0IG5vX3NpZ25hbDoxOyAgICAgIC8qIGRvIG5vdCB1c2UgYW55IHNpZ25hbC9hbGFybSBoYW5kbGVyICovCi0gIGJpdCB0Y3Bfbm9kZWxheToxOyAgICAvKiB3aGV0aGVyIHRvIGVuYWJsZSBUQ1BfTk9ERUxBWSBvciBub3QgKi8KLSAgYml0IGlnbm9yZWNsOjE7ICAgICAgIC8qIGlnbm9yZSBjb250ZW50IGxlbmd0aCAqLwotICBiaXQgY29ubmVjdF9vbmx5OjE7ICAgLyogbWFrZSBjb25uZWN0aW9uLCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQgKi8KLSAgYml0IGh0dHBfdGVfc2tpcDoxOyAgIC8qIHBhc3MgdGhlIHJhdyBib2R5IGRhdGEgdG8gdGhlIHVzZXIsIGV2ZW4gd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyLWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCi0gIGJpdCBodHRwX2NlX3NraXA6MTsgICAvKiBwYXNzIHRoZSByYXcgYm9keSBkYXRhIHRvIHRoZSB1c2VyLCBldmVuIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCi0gIGJpdCBwcm94eV90cmFuc2Zlcl9tb2RlOjE7IC8qIHNldCB0cmFuc2ZlciBtb2RlICg7dHlwZT08YXxpPikgd2hlbiBkb2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRQIHZpYSBhbiBIVFRQIHByb3h5ICovCisgIEJJVChoaWRlX3Byb2dyZXNzKTsgICAgLyogZG9uJ3QgdXNlIHRoZSBwcm9ncmVzcyBtZXRlciAqLworICBCSVQoaHR0cF9mYWlsX29uX2Vycm9yKTsgIC8qIGZhaWwgb24gSFRUUCBlcnJvciBjb2RlcyA+PSA0MDAgKi8KKyAgQklUKGh0dHBfa2VlcF9zZW5kaW5nX29uX2Vycm9yKTsgLyogZm9yIEhUVFAgc3RhdHVzIGNvZGVzID49IDMwMCAqLworICBCSVQoaHR0cF9mb2xsb3dfbG9jYXRpb24pOyAvKiBmb2xsb3cgSFRUUCByZWRpcmVjdHMgKi8KKyAgQklUKGh0dHBfdHJhbnNmZXJfZW5jb2RpbmcpOyAvKiByZXF1ZXN0IGNvbXByZXNzZWQgSFRUUCB0cmFuc2Zlci1lbmNvZGluZyAqLworICBCSVQoYWxsb3dfYXV0aF90b19vdGhlcl9ob3N0cyk7CisgIEJJVChpbmNsdWRlX2hlYWRlcik7IC8qIGluY2x1ZGUgcmVjZWl2ZWQgcHJvdG9jb2wgaGVhZGVycyBpbiBkYXRhIG91dHB1dCAqLworICBCSVQoaHR0cF9zZXRfcmVmZXJlcik7IC8qIGlzIGEgY3VzdG9tIHJlZmVyZXIgdXNlZCAqLworICBCSVQoaHR0cF9hdXRvX3JlZmVyZXIpOyAvKiBzZXQgImNvcnJlY3QiIHJlZmVyZXIgd2hlbiBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246ICovCisgIEJJVChvcHRfbm9fYm9keSk7ICAgIC8qIGFzIHNldCB3aXRoIENVUkxPUFRfTk9CT0RZICovCisgIEJJVCh1cGxvYWQpOyAgICAgICAgIC8qIHVwbG9hZCByZXF1ZXN0ICovCisgIEJJVCh2ZXJib3NlKTsgICAgICAgIC8qIG91dHB1dCB2ZXJib3NpdHkgKi8KKyAgQklUKGtyYik7ICAgICAgICAgICAgLyogS2VyYmVyb3MgY29ubmVjdGlvbiByZXF1ZXN0ZWQgKi8KKyAgQklUKHJldXNlX2ZvcmJpZCk7ICAgLyogZm9yYmlkZGVuIHRvIGJlIHJldXNlZCwgY2xvc2UgYWZ0ZXIgdXNlICovCisgIEJJVChyZXVzZV9mcmVzaCk7ICAgIC8qIGRvIG5vdCByZS11c2UgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiAgKi8KKyAgQklUKG5vX3NpZ25hbCk7ICAgICAgLyogZG8gbm90IHVzZSBhbnkgc2lnbmFsL2FsYXJtIGhhbmRsZXIgKi8KKyAgQklUKHRjcF9ub2RlbGF5KTsgICAgLyogd2hldGhlciB0byBlbmFibGUgVENQX05PREVMQVkgb3Igbm90ICovCisgIEJJVChpZ25vcmVjbCk7ICAgICAgIC8qIGlnbm9yZSBjb250ZW50IGxlbmd0aCAqLworICBCSVQoY29ubmVjdF9vbmx5KTsgICAvKiBtYWtlIGNvbm5lY3Rpb24sIGxldCBhcHBsaWNhdGlvbiB1c2UgdGhlIHNvY2tldCAqLworICBCSVQoaHR0cF90ZV9za2lwKTsgICAvKiBwYXNzIHRoZSByYXcgYm9keSBkYXRhIHRvIHRoZSB1c2VyLCBldmVuIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXItZW5jb2RlZCAoY2h1bmtlZCwgY29tcHJlc3NlZCkgKi8KKyAgQklUKGh0dHBfY2Vfc2tpcCk7ICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQtZW5jb2RlZCAoY2h1bmtlZCwgY29tcHJlc3NlZCkgKi8KKyAgQklUKHByb3h5X3RyYW5zZmVyX21vZGUpOyAvKiBzZXQgdHJhbnNmZXIgbW9kZSAoO3R5cGU9PGF8aT4pIHdoZW4gZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVFAgdmlhIGFuIEhUVFAgcHJveHkgKi8KICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGJpdCBzb2NrczVfZ3NzYXBpX25lYzoxOyAvKiBGbGFnIHRvIHN1cHBvcnQgTkVDIFNPQ0tTNSBzZXJ2ZXIgKi8KKyAgQklUKHNvY2tzNV9nc3NhcGlfbmVjKTsgLyogRmxhZyB0byBzdXBwb3J0IE5FQyBTT0NLUzUgc2VydmVyICovCiAjZW5kaWYKLSAgYml0IHNhc2xfaXI6MTsgICAgICAgICAvKiBFbmFibGUvZGlzYWJsZSBTQVNMIGluaXRpYWwgcmVzcG9uc2UgKi8KLSAgYml0IHdpbGRjYXJkX2VuYWJsZWQ6MTsgLyogZW5hYmxlIHdpbGRjYXJkIG1hdGNoaW5nICovCi0gIGJpdCB0Y3Bfa2VlcGFsaXZlOjE7ICAvKiB1c2UgVENQIGtlZXBhbGl2ZXMgKi8KLSAgYml0IHRjcF9mYXN0b3BlbjoxOyAgIC8qIHVzZSBUQ1AgRmFzdCBPcGVuICovCi0gIGJpdCBzc2xfZW5hYmxlX25wbjoxOyAvKiBUTFMgTlBOIGV4dGVuc2lvbj8gKi8KLSAgYml0IHNzbF9lbmFibGVfYWxwbjoxOy8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KLSAgYml0IHBhdGhfYXNfaXM6MTsgICAgIC8qIGFsbG93IGRvdGRvdHM/ICovCi0gIGJpdCBwaXBld2FpdDoxOyAgICAgICAvKiB3YWl0IGZvciBtdWx0aXBsZXggc3RhdHVzIGJlZm9yZSBzdGFydGluZyBhIG5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiAqLwotICBiaXQgc3VwcHJlc3NfY29ubmVjdF9oZWFkZXJzOjE7IC8qIHN1cHByZXNzIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UgaGVhZGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHVzZXIgY2FsbGJhY2tzICovCi0gIGJpdCBkbnNfc2h1ZmZsZV9hZGRyZXNzZXM6MTsgLyogd2hldGhlciB0byBzaHVmZmxlIGFkZHJlc3NlcyBiZWZvcmUgdXNlICovCi0gIGJpdCBzdHJlYW1fZGVwZW5kc19lOjE7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KLSAgYml0IGhhcHJveHlwcm90b2NvbDoxOyAvKiB3aGV0aGVyIHRvIHNlbmQgSEFQcm94eSBQUk9YWSBwcm90b2NvbCB2MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKi8KLSAgYml0IGFic3RyYWN0X3VuaXhfc29ja2V0OjE7Ci0gIGJpdCBkaXNhbGxvd191c2VybmFtZV9pbl91cmw6MTsgLyogZGlzYWxsb3cgdXNlcm5hbWUgaW4gdXJsICovCi0gIGJpdCBkb2g6MTsgLyogRE5TLW92ZXItSFRUUFMgZW5hYmxlZCAqLwotICBiaXQgZG9oX2dldDoxOyAvKiB1c2UgR0VUIGZvciBEb0ggcmVxdWVzdHMsIGluc3RlYWQgb2YgUE9TVCAqLwotICBiaXQgaHR0cDA5X2FsbG93ZWQ6MTsgLyogYWxsb3cgSFRUUC8wLjkgcmVzcG9uc2VzICovCisgIEJJVChzYXNsX2lyKTsgICAgICAgICAvKiBFbmFibGUvZGlzYWJsZSBTQVNMIGluaXRpYWwgcmVzcG9uc2UgKi8KKyAgQklUKHdpbGRjYXJkX2VuYWJsZWQpOyAvKiBlbmFibGUgd2lsZGNhcmQgbWF0Y2hpbmcgKi8KKyAgQklUKHRjcF9rZWVwYWxpdmUpOyAgLyogdXNlIFRDUCBrZWVwYWxpdmVzICovCisgIEJJVCh0Y3BfZmFzdG9wZW4pOyAgIC8qIHVzZSBUQ1AgRmFzdCBPcGVuICovCisgIEJJVChzc2xfZW5hYmxlX25wbik7IC8qIFRMUyBOUE4gZXh0ZW5zaW9uPyAqLworICBCSVQoc3NsX2VuYWJsZV9hbHBuKTsvKiBUTFMgQUxQTiBleHRlbnNpb24/ICovCisgIEJJVChwYXRoX2FzX2lzKTsgICAgIC8qIGFsbG93IGRvdGRvdHM/ICovCisgIEJJVChwaXBld2FpdCk7ICAgICAgIC8qIHdhaXQgZm9yIG11bHRpcGxleCBzdGF0dXMgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgQklUKHN1cHByZXNzX2Nvbm5lY3RfaGVhZGVycyk7IC8qIHN1cHByZXNzIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UgaGVhZGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB1c2VyIGNhbGxiYWNrcyAqLworICBCSVQoZG5zX3NodWZmbGVfYWRkcmVzc2VzKTsgLyogd2hldGhlciB0byBzaHVmZmxlIGFkZHJlc3NlcyBiZWZvcmUgdXNlICovCisgIEJJVChzdHJlYW1fZGVwZW5kc19lKTsgLyogc2V0IG9yIGRvbid0IHNldCB0aGUgRXhjbHVzaXZlIGJpdCAqLworICBCSVQoaGFwcm94eXByb3RvY29sKTsgLyogd2hldGhlciB0byBzZW5kIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgdjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciAqLworICBCSVQoYWJzdHJhY3RfdW5peF9zb2NrZXQpOworICBCSVQoZGlzYWxsb3dfdXNlcm5hbWVfaW5fdXJsKTsgLyogZGlzYWxsb3cgdXNlcm5hbWUgaW4gdXJsICovCisgIEJJVChkb2gpOyAvKiBETlMtb3Zlci1IVFRQUyBlbmFibGVkICovCisgIEJJVChkb2hfZ2V0KTsgLyogdXNlIEdFVCBmb3IgRG9IIHJlcXVlc3RzLCBpbnN0ZWFkIG9mIFBPU1QgKi8KKyAgQklUKGh0dHAwOV9hbGxvd2VkKTsgLyogYWxsb3cgSFRUUC8wLjkgcmVzcG9uc2VzICovCisgIEJJVChtYWlsX3JjcHRfYWxsb3dmYWlscyk7IC8qIGFsbG93IFJDUFQgVE8gY29tbWFuZCB0byBmYWlsIGZvciBzb21lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwaWVudHMgKi8KIH07CiAKIHN0cnVjdCBOYW1lcyB7CkBAIC0xNzc3LDcgKzE4NjQsNiBAQAogCiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubjsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBjb25uZWN0X3F1ZXVlOwotICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50IHNoX3F1ZXVlOyAvKiBsaXN0IHBlciBDdXJsX3NoX2VudHJ5ICovCiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgY29ubl9xdWV1ZTsgLyogbGlzdCBwZXIgY29ubmVjdGRhdGEgKi8KIAogICBDVVJMTXN0YXRlIG1zdGF0ZTsgIC8qIHRoZSBoYW5kbGUncyBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY3JhbS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY3JhbS5jCmluZGV4IGQxNDg2MTguLjA0NDM4ZmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2NyYW0uYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9jcmFtLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2RpZ2VzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKaW5kZXggZjljZGM5ZC4uYTg4MzU3MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTYyLDcgKzYyLDcgQEAKICAgIHdoYXQgdWx0aW1hdGVseSBnb2VzIG92ZXIgdGhlIG5ldHdvcmsuCiAqLwogI2RlZmluZSBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihhLCBiKSBcCi0gIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIChjaGFyICopYiwgc3RybGVuKChjb25zdCBjaGFyICopYikpOyBcCisgIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIGIsIHN0cmxlbihiKSk7IFwKICAgaWYocmVzdWx0KSB7IFwKICAgICBmcmVlKGIpOyBcCiAgICAgcmV0dXJuIHJlc3VsdDsgXApAQCAtMzU3LDcgKzM1Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB0ciwgc2l6ZV90ICpvdXRsZW4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzaXplX3QgaTsKICAgTUQ1X2NvbnRleHQgKmN0eHQ7CiAgIGNoYXIgKnJlc3BvbnNlID0gTlVMTDsKQEAgLTM3NywxMCArMzc2LDEyIEBACiAgIGNoYXIgKnNwbiAgICAgICAgID0gTlVMTDsKIAogICAvKiBEZWNvZGUgdGhlIGNoYWxsZW5nZSBtZXNzYWdlICovCi0gIHJlc3VsdCA9IGF1dGhfZGVjb2RlX2RpZ2VzdF9tZDVfbWVzc2FnZShjaGxnNjQsIG5vbmNlLCBzaXplb2Yobm9uY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIHNpemVvZihyZWFsbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG0sIHNpemVvZihhbGdvcml0aG0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcW9wX29wdGlvbnMsIHNpemVvZihxb3Bfb3B0aW9ucykpOworICBDVVJMY29kZSByZXN1bHQgPSBhdXRoX2RlY29kZV9kaWdlc3RfbWQ1X21lc3NhZ2UoY2hsZzY0LCBub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihub25jZSksIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlYWxtKSwgYWxnb3JpdGhtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFsZ29yaXRobSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxb3Bfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihxb3Bfb3B0aW9ucykpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNjU5LDcgKzY2MCw3IEBACiB9CiAKIC8qCi0gKiBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKCkKKyAqIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIEhUVFAgRElHRVNUIHJlc3BvbnNlIG1lc3NhZ2UgcmVhZHkgZm9yIHNlbmRpbmcKICAqIHRvIHRoZSByZWNpcGllbnQuCkBAIC02NzgsNyArNjc5LDcgQEAKICAqCiAgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBDVVJMY29kZSBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKAorc3RhdGljIENVUkxjb2RlIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNlcnAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd2RwLApAQCAtNjg3LDEyICs2ODgsMTIgQEAKICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaWdlc3RkYXRhICpkaWdlc3QsCiAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLCBzaXplX3QgKm91dGxlbiwKICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjb252ZXJ0X3RvX2FzY2lpKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiksCi0gICAgICAgICAgICAgICAgICB2b2lkICgqaGFzaCkodW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICopKQorICAgICAgICAgICAgICAgICAgdm9pZCAoKmhhc2gpKHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCkpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgdW5zaWduZWQgY2hhciBoYXNoYnVmWzMyXTsgLyogMzIgYnl0ZXMvMjU2IGJpdHMgKi8KICAgdW5zaWduZWQgY2hhciByZXF1ZXN0X2RpZ2VzdFs2NV07Ci0gIHVuc2lnbmVkIGNoYXIgKmhhc2h0aGlzOwogICB1bnNpZ25lZCBjaGFyIGhhMVs2NV07ICAgIC8qIDY0IGRpZ2l0cyBhbmQgMSB6ZXJvIGJ5dGUgKi8KICAgdW5zaWduZWQgY2hhciBoYTJbNjVdOyAgICAvKiA2NCBkaWdpdHMgYW5kIDEgemVybyBieXRlICovCiAgIGNoYXIgdXNlcmhbNjVdOwpAQCAtNzAwLDYgKzcwMSw3IEBACiAgIHNpemVfdCBjbm9uY2Vfc3ogPSAwOwogICBjaGFyICp1c2VycF9xdW90ZWQ7CiAgIGNoYXIgKnJlc3BvbnNlID0gTlVMTDsKKyAgY2hhciAqaGFzaHRoaXMgPSBOVUxMOwogICBjaGFyICp0bXAgPSBOVUxMOwogCiAgIGlmKCFkaWdlc3QtPm5jKQpAQCAtNzIxLDEyICs3MjMsMTIgQEAKICAgfQogCiAgIGlmKGRpZ2VzdC0+dXNlcmhhc2gpIHsKLSAgICBoYXNodGhpcyA9ICh1bnNpZ25lZCBjaGFyICopIGFwcmludGYoIiVzOiVzIiwgdXNlcnAsIGRpZ2VzdC0+cmVhbG0pOworICAgIGhhc2h0aGlzID0gYXByaW50ZigiJXM6JXMiLCB1c2VycCwgZGlnZXN0LT5yZWFsbSk7CiAgICAgaWYoIWhhc2h0aGlzKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgICBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihkYXRhLCBoYXNodGhpcyk7Ci0gICAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgICAgaGFzaChoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKSBoYXNodGhpcywgc3RybGVuKGhhc2h0aGlzKSk7CiAgICAgZnJlZShoYXNodGhpcyk7CiAgICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKXVzZXJoKTsKICAgfQpAQCAtNzQyLDE0ICs3NDQsMTMgQEAKICAgICAgICAgICAgdW5xKG5vbmNlLXZhbHVlKSAiOiIgdW5xKGNub25jZS12YWx1ZSkKICAgKi8KIAotICBoYXNodGhpcyA9ICh1bnNpZ25lZCBjaGFyICopCi0gICAgYXByaW50ZigiJXM6JXM6JXMiLCBkaWdlc3QtPnVzZXJoYXNoID8gdXNlcmggOiB1c2VycCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+cmVhbG0sIHBhc3N3ZHApOworICBoYXNodGhpcyA9IGFwcmludGYoIiVzOiVzOiVzIiwgZGlnZXN0LT51c2VyaGFzaCA/IHVzZXJoIDogdXNlcnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPnJlYWxtLCBwYXNzd2RwKTsKICAgaWYoIWhhc2h0aGlzKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTEpOwogCkBAIC03NjIsNyArNzYzLDcgQEAKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgQ1VSTF9PVVRQVVRfRElHRVNUX0NPTlYoZGF0YSwgdG1wKTsgLyogQ29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgICBoYXNoKGhhc2hidWYsICh1bnNpZ25lZCBjaGFyICopIHRtcCk7CisgICAgaGFzaChoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKSB0bXAsIHN0cmxlbih0bXApKTsKICAgICBmcmVlKHRtcCk7CiAgICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTEpOwogICB9CkBAIC03ODAsMTkgKzc4MSwxOSBAQAogICAgIDUuMS4xIG9mIFJGQyAyNjE2KQogICAqLwogCi0gIGhhc2h0aGlzID0gKHVuc2lnbmVkIGNoYXIgKikgYXByaW50ZigiJXM6JXMiLCByZXF1ZXN0LCB1cmlwYXRoKTsKKyAgaGFzaHRoaXMgPSBhcHJpbnRmKCIlczolcyIsIHJlcXVlc3QsIHVyaXBhdGgpOwogICBpZighaGFzaHRoaXMpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgaWYoZGlnZXN0LT5xb3AgJiYgc3RyY2FzZWNvbXBhcmUoZGlnZXN0LT5xb3AsICJhdXRoLWludCIpKSB7CiAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBhdXRoLWludCBmb3IgUFVUIG9yIFBPU1QgKi8KICAgICBjaGFyIGhhc2hlZFs2NV07Ci0gICAgdW5zaWduZWQgY2hhciAqaGFzaHRoaXMyOworICAgIGNoYXIgKmhhc2h0aGlzMjsKIAotICAgIGhhc2goaGFzaGJ1ZiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikiIik7CisgICAgaGFzaChoYXNoYnVmLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSIiLCAwKTsKICAgICBjb252ZXJ0X3RvX2FzY2lpKGhhc2hidWYsICh1bnNpZ25lZCBjaGFyICopaGFzaGVkKTsKIAotICAgIGhhc2h0aGlzMiA9ICh1bnNpZ25lZCBjaGFyICopYXByaW50ZigiJXM6JXMiLCBoYXNodGhpcywgaGFzaGVkKTsKKyAgICBoYXNodGhpczIgPSBhcHJpbnRmKCIlczolcyIsIGhhc2h0aGlzLCBoYXNoZWQpOwogICAgIGZyZWUoaGFzaHRoaXMpOwogICAgIGhhc2h0aGlzID0gaGFzaHRoaXMyOwogICB9CkBAIC04MDEsMzEgKzgwMiwyMyBAQAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTIpOwogCiAgIGlmKGRpZ2VzdC0+cW9wKSB7Ci0gICAgaGFzaHRoaXMgPSAodW5zaWduZWQgY2hhciAqKSBhcHJpbnRmKCIlczolczolMDh4OiVzOiVzOiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0LT5ub25jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPm5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+Y25vbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+cW9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhMik7CisgICAgaGFzaHRoaXMgPSBhcHJpbnRmKCIlczolczolMDh4OiVzOiVzOiVzIiwgaGExLCBkaWdlc3QtPm5vbmNlLCBkaWdlc3QtPm5jLAorICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPmNub25jZSwgZGlnZXN0LT5xb3AsIGhhMik7CiAgIH0KICAgZWxzZSB7Ci0gICAgaGFzaHRoaXMgPSAodW5zaWduZWQgY2hhciAqKSBhcHJpbnRmKCIlczolczolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+bm9uY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGEyKTsKKyAgICBoYXNodGhpcyA9IGFwcmludGYoIiVzOiVzOiVzIiwgaGExLCBkaWdlc3QtPm5vbmNlLCBoYTIpOwogICB9CiAKICAgaWYoIWhhc2h0aGlzKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCByZXF1ZXN0X2RpZ2VzdCk7CiAKQEAgLTg5OCw3ICs4OTEsNyBAQAogCiAgIGlmKGRpZ2VzdC0+YWxnb3JpdGhtKSB7CiAgICAgLyogQXBwZW5kIHRoZSBhbGdvcml0aG0gKi8KLSAgICB0bXAgPSBhcHJpbnRmKCIlcywgYWxnb3JpdGhtPVwiJXNcIiIsIHJlc3BvbnNlLCBkaWdlc3QtPmFsZ29yaXRobSk7CisgICAgdG1wID0gYXByaW50ZigiJXMsIGFsZ29yaXRobT0lcyIsIHJlc3BvbnNlLCBkaWdlc3QtPmFsZ29yaXRobSk7CiAgICAgZnJlZShyZXNwb25zZSk7CiAgICAgaWYoIXRtcCkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtOTU0LDIxICs5NDcsMjEgQEAKICAgc3dpdGNoKGRpZ2VzdC0+YWxnbykgewogICBjYXNlIENVUkxESUdFU1RBTEdPX01ENToKICAgY2FzZSBDVVJMRElHRVNUQUxHT19NRDVTRVNTOgotICAgIHJldHVybiBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKGRhdGEsIHVzZXJwLCBwYXNzd2RwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIHVyaXBhdGgsIGRpZ2VzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdHIsIG91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2RpZ2VzdF9tZDVfdG9fYXNjaWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9tZDVpdCk7CisgICAgcmV0dXJuIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdXJpcGF0aCwgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZGlnZXN0X21kNV90b19hc2NpaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX21kNWl0KTsKIAogICBjYXNlIENVUkxESUdFU1RBTEdPX1NIQTI1NjoKICAgY2FzZSBDVVJMRElHRVNUQUxHT19TSEEyNTZTRVNTOgogICBjYXNlIENVUkxESUdFU1RBTEdPX1NIQTUxMl8yNTY6CiAgIGNhc2UgQ1VSTERJR0VTVEFMR09fU0hBNTEyXzI1NlNFU1M6Ci0gICAgcmV0dXJuIF9DdXJsX2F1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdXJpcGF0aCwgZGlnZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZGlnZXN0X3NoYTI1Nl90b19hc2NpaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NoYTI1Nml0KTsKKyAgICByZXR1cm4gYXV0aF9jcmVhdGVfZGlnZXN0X2h0dHBfbWVzc2FnZShkYXRhLCB1c2VycCwgcGFzc3dkcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB1cmlwYXRoLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHRyLCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9kaWdlc3Rfc2hhMjU2X3RvX2FzY2lpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2hhMjU2aXQpOwogCiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaAppbmRleCA4Njg2YzQ0Li5jYzA1ZmRiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2RpZ2VzdF9zc3BpLmMKaW5kZXggZmU4MDkzZS4uYTEwOTA1NiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3Rfc3NwaS5jCkBAIC02MSw2ICs2MSwxMSBAQAogICBzdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlTZWN1cml0eVBhY2thZ2VJbmZvKChUQ0hBUiAqKSBURVhUKFNQX05BTUVfRElHRVNUKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdXJpdHlQYWNrYWdlKTsKIAorICAvKiBSZWxlYXNlIHRoZSBwYWNrYWdlIGJ1ZmZlciBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSAqLworICBpZihzdGF0dXMgPT0gU0VDX0VfT0spIHsKKyAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoU2VjdXJpdHlQYWNrYWdlKTsKKyAgfQorCiAgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKIH0KIApAQCAtMjIwLDcgKzIyNSwxMCBAQAogICAgIGZyZWUob3V0cHV0X3Rva2VuKTsKICAgICBmcmVlKGlucHV0X3Rva2VuKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCkBAIC02MDcsNyArNjE1LDEwIEBACiAKICAgICAgIEN1cmxfc2FmZWZyZWUoZGlnZXN0LT5odHRwX2NvbnRleHQpOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgICAgfQogCiAgICAgb3V0cHV0X3Rva2VuX2xlbiA9IHJlc3BfYnVmLmNiQnVmZmVyOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgva3JiNV9nc3NhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfZ3NzYXBpLmMKaW5kZXggZWEwYTVmMS4uOTViYWIwZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgva3JiNV9nc3NhcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9rcmI1X2dzc2FwaS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgZnJlZShzcG4pOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KIAogICAgIGZyZWUoc3BuKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgIEN1cmxfZ3NzX2xvZ19lcnJvcihkYXRhLCAiZ3NzX2luaXRfc2VjX2NvbnRleHQoKSBmYWlsZWQ6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yX3N0YXR1cywgbWlub3Jfc3RhdHVzKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYob3V0cHV0X3Rva2VuLnZhbHVlICYmIG91dHB1dF90b2tlbi5sZW5ndGgpIHsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCiAgICAgZnJlZShjaGxnKTsKIAotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogQ29udmVydCB0aGUgdXNlcm5hbWUgZnJvbSBpbnRlcm5hbCBmb3JtYXQgdG8gYSBkaXNwbGF5YWJsZSB0b2tlbiAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKICAgICBmcmVlKGNobGcpOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBTZXR1cCB0aGUgY2hhbGxlbmdlICJpbnB1dCIgc2VjdXJpdHkgYnVmZmVyICovCkBAIC0zNTUsNyArMzU1LDcgQEAKIAogICAgIGZyZWUobWVzc2FnZSk7CiAKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9rcmI1X3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCmluZGV4IDFmNmU0NjIuLjk4MDQxZDkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCkBAIC01OCw2ICs1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoU1BfTkFNRV9LRVJCRVJPUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKwogICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7CiB9CiAKQEAgLTIxNyw4ICsyMjIsMTIgQEAKICAgLyogRnJlZSB0aGUgZGVjb2RlZCBjaGFsbGVuZ2UgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KICAgZnJlZShjaGxnKTsKIAorICBpZihzdGF0dXMgPT0gU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkgeworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKICAgaWYoc3RhdHVzICE9IFNFQ19FX09LICYmIHN0YXR1cyAhPSBTRUNfSV9DT05USU5VRV9ORUVERUQpIHsKLSAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIGlmKG1lbWNtcCgmY29udGV4dCwga3JiNS0+Y29udGV4dCwgc2l6ZW9mKGNvbnRleHQpKSkgewpAQCAtMzA5LDcgKzMxOCwxMCBAQAogICBpZihzdGF0dXMgIT0gU0VDX0VfT0spIHsKICAgICBmcmVlKGNobGcpOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgaWYoc3RhdHVzID09IFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogR2V0IHRoZSBmdWxseSBxdWFsaWZpZWQgdXNlcm5hbWUgYmFjayBmcm9tIHRoZSBjb250ZXh0ICovCkBAIC0zMTksNyArMzMxLDEwIEBACiAgIGlmKHN0YXR1cyAhPSBTRUNfRV9PSykgewogICAgIGZyZWUoY2hsZyk7CiAKLSAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICBpZihzdGF0dXMgPT0gU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBTZXR1cCB0aGUgImlucHV0IiBzZWN1cml0eSBidWZmZXIgKi8KQEAgLTQzOCw3ICs0NTMsMTAgQEAKICAgICBmcmVlKG1lc3NhZ2UpOwogICAgIGZyZWUodHJhaWxlcik7CiAKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBpZihzdGF0dXMgPT0gU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBBbGxvY2F0ZSB0aGUgZW5jcnlwdGlvbiAod3JhcCkgYnVmZmVyICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtLmMKaW5kZXggMDQ3YzJiNS4uOGY5MTAzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvbnRsbS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG0uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgImN1cmxfbnRsbV9jb3JlLmgiCiAjaW5jbHVkZSAiY3VybF9nZXRob3N0bmFtZS5oIgogI2luY2x1ZGUgImN1cmxfbXVsdGlieXRlLmgiCisjaW5jbHVkZSAiY3VybF9tZDUuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgInJhbmQuaCIKICNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKQEAgLTYyMSwxMSArNjIyLDExIEBACiAgICAgbWVtY3B5KHRtcCwgJm50bG0tPm5vbmNlWzBdLCA4KTsKICAgICBtZW1jcHkodG1wICsgOCwgZW50cm9weSwgOCk7CiAKLSAgICByZXN1bHQgPSBDdXJsX3NzbF9tZDVzdW0odG1wLCAxNiwgbWQ1c3VtLCBNRDVfRElHRVNUX0xFTkdUSCk7Ci0gICAgaWYoIXJlc3VsdCkKLSAgICAgIC8qIFdlIHNoYWxsIG9ubHkgdXNlIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIG1kNXN1bSwgYnV0IHRoZSBkZXMgY29kZSBpbgotICAgICAgICAgQ3VybF9udGxtX2NvcmVfbG1fcmVzcCBvbmx5IGVuY3J5cHQgdGhlIGZpcnN0IDggYnl0ZXMgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfbnRsbV9jb3JlX21rX250X2hhc2goZGF0YSwgcGFzc3dkcCwgbnRidWZmZXIpOworICAgIEN1cmxfbWQ1aXQobWQ1c3VtLCB0bXAsIDE2KTsKKworICAgIC8qIFdlIHNoYWxsIG9ubHkgdXNlIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIG1kNXN1bSwgYnV0IHRoZSBkZXMgY29kZSBpbgorICAgICAgIEN1cmxfbnRsbV9jb3JlX2xtX3Jlc3Agb25seSBlbmNyeXB0IHRoZSBmaXJzdCA4IGJ5dGVzICovCisgICAgcmVzdWx0ID0gQ3VybF9udGxtX2NvcmVfbWtfbnRfaGFzaChkYXRhLCBwYXNzd2RwLCBudGJ1ZmZlcik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvbnRsbV9zc3BpLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtX3NzcGkuYwppbmRleCA1ODljY2ExLi5jZDZjYjc5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtX3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtX3NzcGkuYwpAQCAtNTYsNiArNTYsMTEgQEAKICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX05UTE0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOwogCisgIC8qIFJlbGVhc2UgdGhlIHBhY2thZ2UgYnVmZmVyIGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlICovCisgIGlmKHN0YXR1cyA9PSBTRUNfRV9PSykgeworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihTZWN1cml0eVBhY2thZ2UpOworICB9CisKICAgcmV0dXJuIChzdGF0dXMgPT0gU0VDX0VfT0sgPyBUUlVFIDogRkFMU0UpOwogfQogCkBAIC0xNjksOCArMTc0LDEwIEBACiAgIGlmKHN0YXR1cyA9PSBTRUNfSV9DT01QTEVURV9ORUVERUQgfHwKICAgICBzdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFKQogICAgIHNfcFNlY0ZuLT5Db21wbGV0ZUF1dGhUb2tlbihudGxtLT5jb250ZXh0LCAmdHlwZV8xX2Rlc2MpOworICBlbHNlIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICBlbHNlIGlmKHN0YXR1cyAhPSBTRUNfRV9PSyAmJiBzdGF0dXMgIT0gU0VDX0lfQ09OVElOVUVfTkVFREVEKQotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCiAgIHJldHVybiBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgKGNoYXIgKikgbnRsbS0+b3V0cHV0X3Rva2VuLApAQCAtMzE2LDcgKzMyMywxMCBAQAogICAgIGluZm9mKGRhdGEsICJOVExNIGhhbmRzaGFrZSBmYWlsdXJlICh0eXBlLTMgbWVzc2FnZSk6IFN0YXR1cz0leFxuIiwKICAgICAgICAgICBzdGF0dXMpOwogCi0gICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgaWYoc3RhdHVzID09IFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogQmFzZTY0IGVuY29kZSB0aGUgcmVzcG9uc2UgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYwppbmRleCA1ZDQzZTExLi5lZDdjZTAyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fZ3NzYXBpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvc3BuZWdvX2dzc2FwaS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgZnJlZShzcG4pOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KIAogICAgIGZyZWUoc3BuKTsKQEAgLTE3MCwxNCArMTcwLDE0IEBACiAgICAgQ3VybF9nc3NfbG9nX2Vycm9yKGRhdGEsICJnc3NfaW5pdF9zZWNfY29udGV4dCgpIGZhaWxlZDogIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3Jfc3RhdHVzLCBtaW5vcl9zdGF0dXMpOwogCi0gICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIGlmKCFvdXRwdXRfdG9rZW4udmFsdWUgfHwgIW91dHB1dF90b2tlbi5sZW5ndGgpIHsKICAgICBpZihvdXRwdXRfdG9rZW4udmFsdWUpCiAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJnVudXNlZF9zdGF0dXMsICZvdXRwdXRfdG9rZW4pOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBGcmVlIHByZXZpb3VzIHRva2VuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvc3BuZWdvX3NzcGkuYwppbmRleCA0YjIxY2M3Li5iOWMyY2Y3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19zc3BpLmMKQEAgLTU5LDYgKzU5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVChTUF9OQU1FX05FR09USUFURSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKworCiAgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKIH0KIApAQCAtMTY1LDcgKzE3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ28tPnBfaWRlbnRpdHksIE5VTEwsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ28tPmNyZWRlbnRpYWxzLCAmZXhwaXJ5KTsKICAgICBpZihuZWdvLT5zdGF0dXMgIT0gU0VDX0VfT0spCi0gICAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAKICAgICAvKiBBbGxvY2F0ZSBvdXIgbmV3IGNvbnRleHQgaGFuZGxlICovCiAgICAgbmVnby0+Y29udGV4dCA9IGNhbGxvYygxLCBzaXplb2YoQ3R4dEhhbmRsZSkpOwpAQCAtMjUxLDE0ICsyNTcsMjUgQEAKICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgIGZhaWxmKGRhdGEsICJJbml0aWFsaXplU2VjdXJpdHlDb250ZXh0IGZhaWxlZDogJXMiLAogICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihuZWdvLT5zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIGlmKG5lZ28tPnN0YXR1cyA9PSAoRFdPUkQpU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICBpZihuZWdvLT5zdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfTkVFREVEIHx8CiAgICAgIG5lZ28tPnN0YXR1cyA9PSBTRUNfSV9DT01QTEVURV9BTkRfQ09OVElOVUUpIHsKICAgICBuZWdvLT5zdGF0dXMgPSBzX3BTZWNGbi0+Q29tcGxldGVBdXRoVG9rZW4obmVnby0+Y29udGV4dCwgJnJlc3BfZGVzYyk7CiAgICAgaWYoR1NTX0VSUk9SKG5lZ28tPnN0YXR1cykpIHsKLSAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyAgICAgIGZhaWxmKGRhdGEsICJDb21wbGV0ZUF1dGhUb2tlbiBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihuZWdvLT5zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKworICAgICAgaWYobmVnby0+c3RhdHVzID09IChEV09SRClTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3ZhdXRoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5oCmluZGV4IDczYmQyNWUuLmExYTU1N2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3ZhdXRoLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguaApAQCAtNDMsNyArNDMsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0jZGVmaW5lIEdTU19FUlJPUihzdGF0dXMpIChzdGF0dXMgJiAweDgwMDAwMDAwKQorI2RlZmluZSBHU1NfRVJST1Ioc3RhdHVzKSAoKHN0YXR1cykgJiAweDgwMDAwMDAwKQogI2VuZGlmCiAKIC8qIFRoaXMgaXMgdXNlZCB0byBidWlsZCBhIFNQTiBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZlcnNpb24uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZlcnNpb24uYwppbmRleCAxNGIwNTMxLi43N2FjYTdjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92ZXJzaW9uLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmVyc2lvbi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgogI2luY2x1ZGUgImh0dHAyLmgiCi0jaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidnNzaC9zc2guaCIKKyNpbmNsdWRlICJxdWljLmgiCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKIAogI2lmZGVmIFVTRV9BUkVTCkBAIC01MywxOCArNTQsNiBAQAogI2luY2x1ZGUgPGxpYnJ0bXAvcnRtcC5oPgogI2VuZGlmCiAKLSNpZmRlZiBVU0VfTElCU1NIMgotI2luY2x1ZGUgPGxpYnNzaDIuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1ZFUlNJT04KLS8qIGdldCBpdCBydW4tdGltZSBpZiBwb3NzaWJsZSAqLwotI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBsaWJzc2gyX3ZlcnNpb24oMCkKLSNlbHNlCi0vKiB1c2UgYnVpbGQtdGltZSBpZiBydW4tdGltZSBub3QgcG9zc2libGUgKi8KLSNkZWZpbmUgQ1VSTF9MSUJTU0gyX1ZFUlNJT04gTElCU1NIMl9WRVJTSU9OCi0jZW5kaWYKLQogI2lmZGVmIEhBVkVfWkxJQl9ICiAjaW5jbHVkZSA8emxpYi5oPgogI2lmZGVmIF9fU1lNQklBTjMyX18KQEAgLTEwMiw3ICs5MSw3IEBACiBjaGFyICpjdXJsX3ZlcnNpb24odm9pZCkKIHsKICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gIHN0YXRpYyBjaGFyIHZlcnNpb25bMjAwXTsKKyAgc3RhdGljIGNoYXIgdmVyc2lvblsyNTBdOwogICBjaGFyICpwdHIgPSB2ZXJzaW9uOwogICBzaXplX3QgbGVuOwogICBzaXplX3QgbGVmdCA9IHNpemVvZih2ZXJzaW9uKTsKQEAgLTExNSwxNCArMTA0LDEyIEBACiAgIGxlZnQgLT0gbGVuOwogICBwdHIgKz0gbGVuOwogCi0gIGlmKGxlZnQgPiAxKSB7Ci0gICAgbGVuID0gQ3VybF9zc2xfdmVyc2lvbihwdHIgKyAxLCBsZWZ0IC0gMSk7CisgIGxlbiA9IEN1cmxfc3NsX3ZlcnNpb24ocHRyICsgMSwgbGVmdCAtIDEpOwogCi0gICAgaWYobGVuID4gMCkgewotICAgICAgKnB0ciA9ICcgJzsKLSAgICAgIGxlZnQgLT0gKytsZW47Ci0gICAgICBwdHIgKz0gbGVuOwotICAgIH0KKyAgaWYobGVuID4gMCkgeworICAgICpwdHIgPSAnICc7CisgICAgbGVmdCAtPSArK2xlbjsKKyAgICBwdHIgKz0gbGVuOwogICB9CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTE3MiwxMyArMTU5LDEyIEBACiAgIGxlZnQgLT0gbGVuOwogICBwdHIgKz0gbGVuOwogI2VuZGlmCi0jaWZkZWYgVVNFX0xJQlNTSDIKLSAgbGVuID0gbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJzc2gyLyVzIiwgQ1VSTF9MSUJTU0gyX1ZFUlNJT04pOwotICBsZWZ0IC09IGxlbjsKLSAgcHRyICs9IGxlbjsKLSNlbmRpZgotI2lmZGVmIFVTRV9MSUJTU0gKLSAgbGVuID0gbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJzc2gvJXMiLCBDVVJMX0xJQlNTSF9WRVJTSU9OKTsKKyNpZmRlZiBVU0VfU1NICisgIGlmKGxlZnQpIHsKKyAgICAqcHRyKys9JyAnOworICAgIGxlZnQtLTsKKyAgfQorICBsZW4gPSBDdXJsX3NzaF92ZXJzaW9uKHB0ciwgbGVmdCk7CiAgIGxlZnQgLT0gbGVuOwogICBwdHIgKz0gbGVuOwogI2VuZGlmCkBAIC0xODcsNiArMTczLDExIEBACiAgIGxlZnQgLT0gbGVuOwogICBwdHIgKz0gbGVuOwogI2VuZGlmCisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgbGVuID0gQ3VybF9xdWljX3ZlcihwdHIsIGxlZnQpOworICBsZWZ0IC09IGxlbjsKKyAgcHRyICs9IGxlbjsKKyNlbmRpZgogI2lmZGVmIFVTRV9MSUJSVE1QCiAgIHsKICAgICBjaGFyIHN1ZmZbMl07CkBAIC0yNzQsOCArMjY1LDEwIEBACiAjaWZuZGVmIENVUkxfRElTQUJMRV9SVFNQCiAgICJydHNwIiwKICNlbmRpZgotI2lmIGRlZmluZWQoVVNFX1NTSCkKKyNpZiBkZWZpbmVkKFVTRV9TU0gpICYmICFkZWZpbmVkKFVTRV9XT0xGU1NIKQogICAic2NwIiwKKyNlbmRpZgorI2lmZGVmIFVTRV9TU0gKICAgInNmdHAiLAogI2VuZGlmCiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1NNQikgJiYgZGVmaW5lZChVU0VfTlRMTSkgJiYgXApAQCAtMzU4LDYgKzM1MSw5IEBACiAjaWYgZGVmaW5lZChVU0VfTkdIVFRQMikKICAgfCBDVVJMX1ZFUlNJT05fSFRUUDIKICNlbmRpZgorI2lmIGRlZmluZWQoRU5BQkxFX1FVSUMpCisgIHwgQ1VSTF9WRVJTSU9OX0hUVFAzCisjZW5kaWYKICNpZiBkZWZpbmVkKFVTRV9VTklYX1NPQ0tFVFMpCiAgIHwgQ1VSTF9WRVJTSU9OX1VOSVhfU09DS0VUUwogI2VuZGlmCkBAIC0zNzMsNiArMzY5LDkgQEAKICNpZiBkZWZpbmVkKFVTRV9BTFRTVkMpCiAgIHwgQ1VSTF9WRVJTSU9OX0FMVFNWQwogI2VuZGlmCisjaWZkZWYgVVNFX0VTTkkKKyAgfCBDVVJMX1ZFUlNJT05fRVNOSQorI2VuZGlmCiAgICwKICAgTlVMTCwgLyogc3NsX3ZlcnNpb24gKi8KICAgMCwgICAgLyogc3NsX3ZlcnNpb25fbnVtLCB0aGlzIGlzIGtlcHQgYXQgemVybyAqLwpAQCAtMzg1LDYgKzM4NCw5IEBACiAgIE5VTEwsIC8qIHNzaCBsaWIgdmVyc2lvbiAqLwogICAwLCAgICAvKiBicm90bGlfdmVyX251bSAqLwogICBOVUxMLCAvKiBicm90bGkgdmVyc2lvbiAqLworICAwLCAgICAvKiBuZ2h0dHAyIHZlcnNpb24gbnVtYmVyICovCisgIE5VTEwsIC8qIG5naHR0cDIgdmVyc2lvbiBzdHJpbmcgKi8KKyAgTlVMTCAgLyogcXVpYyBsaWJyYXJ5IHN0cmluZyAqLwogfTsKIAogY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqY3VybF92ZXJzaW9uX2luZm8oQ1VSTHZlcnNpb24gc3RhbXApCkBAIC00NDYsMTEgKzQ0OCw4IEBACiAjZW5kaWYgLyogX0xJQklDT05WX1ZFUlNJT04gKi8KICNlbmRpZgogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIMikKLSAgbXNucHJpbnRmKHNzaF9idWZmZXIsIHNpemVvZihzc2hfYnVmZmVyKSwgImxpYnNzaDIvJXMiLCBMSUJTU0gyX1ZFUlNJT04pOwotICB2ZXJzaW9uX2luZm8ubGlic3NoX3ZlcnNpb24gPSBzc2hfYnVmZmVyOwotI2VsaWYgZGVmaW5lZChVU0VfTElCU1NIKQotICBtc25wcmludGYoc3NoX2J1ZmZlciwgc2l6ZW9mKHNzaF9idWZmZXIpLCAibGlic3NoLyVzIiwgQ1VSTF9MSUJTU0hfVkVSU0lPTik7CisjaWYgZGVmaW5lZChVU0VfU1NIKQorICBDdXJsX3NzaF92ZXJzaW9uKHNzaF9idWZmZXIsIHNpemVvZihzc2hfYnVmZmVyKSk7CiAgIHZlcnNpb25faW5mby5saWJzc2hfdmVyc2lvbiA9IHNzaF9idWZmZXI7CiAjZW5kaWYKIApAQCAtNDYwLDYgKzQ1OSwyMiBAQAogICB2ZXJzaW9uX2luZm8uYnJvdGxpX3ZlcnNpb24gPSBicm90bGlfYnVmZmVyOwogI2VuZGlmCiAKKyNpZmRlZiBVU0VfTkdIVFRQMgorICB7CisgICAgbmdodHRwMl9pbmZvICpoMiA9IG5naHR0cDJfdmVyc2lvbigwKTsKKyAgICB2ZXJzaW9uX2luZm8ubmdodHRwMl92ZXJfbnVtID0gaDItPnZlcnNpb25fbnVtOworICAgIHZlcnNpb25faW5mby5uZ2h0dHAyX3ZlcnNpb24gPSBoMi0+dmVyc2lvbl9zdHI7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgeworICAgIHN0YXRpYyBjaGFyIHF1aWNidWZmZXJbODBdOworICAgIEN1cmxfcXVpY192ZXIocXVpY2J1ZmZlciwgc2l6ZW9mKHF1aWNidWZmZXIpKTsKKyAgICB2ZXJzaW9uX2luZm8ucXVpY192ZXJzaW9uID0gcXVpY2J1ZmZlcjsKKyAgfQorI2VuZGlmCisKICAgKHZvaWQpc3RhbXA7IC8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCB3ZSBkb24ndCB1c2UgdGhpcyAqLwogCiAgIGluaXRpYWxpemVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4ODQwNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5jCkBAIC0wLDAgKzEsMTc2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX05HVENQMgorI2luY2x1ZGUgPG5ndGNwMi9uZ3RjcDIuaD4KKyNpbmNsdWRlIDxuZ3RjcDIvbmd0Y3AyX2NyeXB0by5oPgorI2luY2x1ZGUgPG5naHR0cDMvbmdodHRwMy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgIm5ndGNwMi5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVycm9yLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogI2RlZmluZSBERUJVR19OR1RDUDIgKi8KKyNpZmRlZiBDVVJMREVCVUcKKyNkZWZpbmUgREVCVUdfSFRUUDMKKyNlbmRpZgorI2lmZGVmIERFQlVHX0hUVFAzCisjZGVmaW5lIEgzQlVHRih4KSB4CisjZWxzZQorI2RlZmluZSBIM0JVR0YoeCkgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaG9sZHMgb3V0Z29pbmcgSFRUUC8zIHN0cmVhbSBkYXRhIHRoYXQgaXMgdXNlZCBieSBuZ2h0dHAzIHVudGlsIGFja2VkLgorICogSXQgaXMgdXNlZCBhcyBhIGNpcmN1bGFyIGJ1ZmZlci4gQWRkIG5ldyBieXRlcyBhdCB0aGUgZW5kIHVudGlsIGl0IHJlYWNoZXMKKyAqIHRoZSBmYXIgZW5kLCB0aGVuIHN0YXJ0IG92ZXIgYXQgaW5kZXggMCBhZ2Fpbi4KKyAqLworCisjZGVmaW5lIEgzX1NFTkRfU0laRSAoMjAqMTAyNCkKK3N0cnVjdCBoM291dCB7CisgIHVpbnQ4X3QgYnVmW0gzX1NFTkRfU0laRV07CisgIHNpemVfdCB1c2VkOyAgIC8qIG51bWJlciBvZiBieXRlcyB1c2VkIGluIHRoZSBidWZmZXIgKi8KKyAgc2l6ZV90IHdpbmRleDsgLyogaW5kZXggaW4gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdGFydCB3cml0aW5nIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgICAgIGRhdGEgYmxvY2sgKi8KK307CisKKyNkZWZpbmUgUVVJQ19NQVhfU1RSRUFNUyAoMjU2KjEwMjQpCisjZGVmaW5lIFFVSUNfTUFYX0RBVEEgKDEqMTAyNCoxMDI0KQorI2RlZmluZSBRVUlDX0lETEVfVElNRU9VVCA2MDAwMCAvKiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgUVVJQ19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIlRMU19BRVNfMTI4X0dDTV9TSEEyNTY6VExTX0FFU18yNTZfR0NNX1NIQTM4NDpUTFNfQ0hBQ0hBMjBfIiAgICAgICAgICAgICAgIFwKKyAgIlBPTFkxMzA1X1NIQTI1NjpUTFNfQUVTXzEyOF9DQ01fU0hBMjU2IgorI2RlZmluZSBRVUlDX0dST1VQUyAiUC0yNTY6WDI1NTE5OlAtMzg0OlAtNTIxIgorCitzdGF0aWMgQ1VSTGNvZGUgbmdfcHJvY2Vzc19pbmdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcyk7CitzdGF0aWMgQ1VSTGNvZGUgbmdfZmx1c2hfZWdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKTsKK3N0YXRpYyBpbnQgY2JfaDNfYWNrZWRfc3RyZWFtX2RhdGEobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSk7CisKK3N0YXRpYyBuZ3RjcDJfdHN0YW1wIHRpbWVzdGFtcCh2b2lkKQoreworICBzdHJ1Y3QgY3VybHRpbWUgY3QgPSBDdXJsX25vdygpOworICByZXR1cm4gY3QudHZfc2VjICogTkdUQ1AyX1NFQ09ORFMgKyBjdC50dl91c2VjICogTkdUQ1AyX01JQ1JPU0VDT05EUzsKK30KKworI2lmZGVmIERFQlVHX05HVENQMgorc3RhdGljIHZvaWQgcXVpY19wcmludGYodm9pZCAqdXNlcl9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgKHZvaWQpdXNlcl9kYXRhOyAvKiBUT0RPLCB1c2UgdGhpcyB0byBkbyBpbmZvZigpIGluc3RlYWQgbG9uZy10ZXJtICovCisgIHZhX3N0YXJ0KGFwLCBmbXQpOworICB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisjZW5kaWYKKworc3RhdGljIG5ndGNwMl9jcnlwdG9fbGV2ZWwKK3F1aWNfZnJvbV9vc3NsX2xldmVsKE9TU0xfRU5DUllQVElPTl9MRVZFTCBvc3NsX2xldmVsKQoreworICBzd2l0Y2gob3NzbF9sZXZlbCkgeworICBjYXNlIHNzbF9lbmNyeXB0aW9uX2luaXRpYWw6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSU5JVElBTDsKKyAgY2FzZSBzc2xfZW5jcnlwdGlvbl9lYXJseV9kYXRhOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0VBUkxZOworICBjYXNlIHNzbF9lbmNyeXB0aW9uX2hhbmRzaGFrZToKKyAgICByZXR1cm4gTkdUQ1AyX0NSWVBUT19MRVZFTF9IQU5EU0hBS0U7CisgIGNhc2Ugc3NsX2VuY3J5cHRpb25fYXBwbGljYXRpb246CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfQVBQOworICBkZWZhdWx0OgorICAgIGFzc2VydCgwKTsKKyAgfQorfQorCitzdGF0aWMgaW50IHNldHVwX2luaXRpYWxfY3J5cHRvX2NvbnRleHQoc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBjb25zdCBuZ3RjcDJfY2lkICpkY2lkID0gbmd0Y3AyX2Nvbm5fZ2V0X2RjaWQocXMtPnFjb25uKTsKKworICBpZihuZ3RjcDJfY3J5cHRvX2Rlcml2ZV9hbmRfaW5zdGFsbF9pbml0aWFsX2tleSgKKyAgICAgICAgIHFzLT5xY29ubiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgZGNpZCwKKyAgICAgICAgIE5HVENQMl9DUllQVE9fU0lERV9DTElFTlQpICE9IDApCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdWljX3NldHRpbmdzKG5ndGNwMl9zZXR0aW5ncyAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgc3RyZWFtX2J1ZmZlcl9zaXplKQoreworICBuZ3RjcDJfc2V0dGluZ3NfZGVmYXVsdChzKTsKKyNpZmRlZiBERUJVR19OR1RDUDIKKyAgcy0+bG9nX3ByaW50ZiA9IHF1aWNfcHJpbnRmOworI2Vsc2UKKyAgcy0+bG9nX3ByaW50ZiA9IE5VTEw7CisjZW5kaWYKKyAgcy0+aW5pdGlhbF90cyA9IHRpbWVzdGFtcCgpOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfbG9jYWwgPSBzdHJlYW1fYnVmZmVyX3NpemU7CisgIHMtPnRyYW5zcG9ydF9wYXJhbXMuaW5pdGlhbF9tYXhfc3RyZWFtX2RhdGFfYmlkaV9yZW1vdGUgPSBRVUlDX01BWF9TVFJFQU1TOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X3N0cmVhbV9kYXRhX3VuaSA9IFFVSUNfTUFYX1NUUkVBTVM7CisgIHMtPnRyYW5zcG9ydF9wYXJhbXMuaW5pdGlhbF9tYXhfZGF0YSA9IFFVSUNfTUFYX0RBVEE7CisgIHMtPnRyYW5zcG9ydF9wYXJhbXMuaW5pdGlhbF9tYXhfc3RyZWFtc19iaWRpID0gMTsKKyAgcy0+dHJhbnNwb3J0X3BhcmFtcy5pbml0aWFsX21heF9zdHJlYW1zX3VuaSA9IDM7CisgIHMtPnRyYW5zcG9ydF9wYXJhbXMubWF4X2lkbGVfdGltZW91dCA9IFFVSUNfSURMRV9USU1FT1VUOworfQorCitzdGF0aWMgRklMRSAqa2V5bG9nX2ZpbGU7IC8qIG5vdCB0aHJlYWQtc2FmZSAqLworc3RhdGljIHZvaWQga2V5bG9nX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBjb25zdCBjaGFyICpsaW5lKQoreworICAodm9pZClzc2w7CisgIGZwdXRzKGxpbmUsIGtleWxvZ19maWxlKTsKKyAgZnB1dGMoJ1xuJywga2V5bG9nX2ZpbGUpOworICBmZmx1c2goa2V5bG9nX2ZpbGUpOworfQorCitzdGF0aWMgaW50IGluaXRfbmdoM19jb25uKHN0cnVjdCBxdWljc29ja2V0ICpxcyk7CisKK3N0YXRpYyBpbnQgcXVpY19zZXRfZW5jcnlwdGlvbl9zZWNyZXRzKFNTTCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NTTF9FTkNSWVBUSU9OX0xFVkVMIG9zc2xfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpyeF9zZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp0eF9zZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VjcmV0bGVuKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKilTU0xfZ2V0X2FwcF9kYXRhKHNzbCk7CisgIGludCBsZXZlbCA9IHF1aWNfZnJvbV9vc3NsX2xldmVsKG9zc2xfbGV2ZWwpOworCisgIGlmKG5ndGNwMl9jcnlwdG9fZGVyaXZlX2FuZF9pbnN0YWxsX2tleSgKKyAgICAgICAgIHFzLT5xY29ubiwgc3NsLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBsZXZlbCwgcnhfc2VjcmV0LAorICAgICAgICAgdHhfc2VjcmV0LCBzZWNyZXRsZW4sIE5HVENQMl9DUllQVE9fU0lERV9DTElFTlQpICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYobGV2ZWwgPT0gTkdUQ1AyX0NSWVBUT19MRVZFTF9BUFApIHsKKyAgICBpZihpbml0X25naDNfY29ubihxcykgIT0gQ1VSTEVfT0spCisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHF1aWNfYWRkX2hhbmRzaGFrZV9kYXRhKFNTTCAqc3NsLCBPU1NMX0VOQ1JZUFRJT05fTEVWRUwgb3NzbF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopU1NMX2dldF9hcHBfZGF0YShzc2wpOworICBzdHJ1Y3QgcXVpY19oYW5kc2hha2UgKmNyeXB0b19kYXRhOworICBuZ3RjcDJfY3J5cHRvX2xldmVsIGxldmVsID0gcXVpY19mcm9tX29zc2xfbGV2ZWwob3NzbF9sZXZlbCk7CisgIGludCBydjsKKworICBjcnlwdG9fZGF0YSA9ICZxcy0+Y3J5cHRvX2RhdGFbbGV2ZWxdOworICBpZihjcnlwdG9fZGF0YS0+YnVmID09IE5VTEwpIHsKKyAgICBjcnlwdG9fZGF0YS0+YnVmID0gbWFsbG9jKDQwOTYpOworICAgIGlmKCFjcnlwdG9fZGF0YS0+YnVmKQorICAgICAgcmV0dXJuIDA7CisgICAgY3J5cHRvX2RhdGEtPmFsbG9jbGVuID0gNDA5NjsKKyAgfQorCisgIC8qIFRPRE8gSnVzdCBwcmV0ZW5kIHRoYXQgaGFuZHNoYWtlIGRvZXMgbm90IGdyb3cgbW9yZSB0aGFuIDRLaUIgZm9yCisgICAgIG5vdyAqLworICBhc3NlcnQoY3J5cHRvX2RhdGEtPmxlbiArIGxlbiA8PSBjcnlwdG9fZGF0YS0+YWxsb2NsZW4pOworCisgIG1lbWNweSgmY3J5cHRvX2RhdGEtPmJ1ZltjcnlwdG9fZGF0YS0+bGVuXSwgZGF0YSwgbGVuKTsKKyAgY3J5cHRvX2RhdGEtPmxlbiArPSBsZW47CisKKyAgcnYgPSBuZ3RjcDJfY29ubl9zdWJtaXRfY3J5cHRvX2RhdGEoCisgICAgcXMtPnFjb25uLCBsZXZlbCwgKHVpbnQ4X3QgKikoJmNyeXB0b19kYXRhLT5idWZbY3J5cHRvX2RhdGEtPmxlbl0gLSBsZW4pLAorICAgIGxlbik7CisgIGlmKHJ2KSB7CisgICAgSDNCVUdGKGZwcmludGYoc3RkZXJyLCAid3JpdGVfY2xpZW50X2hhbmRzaGFrZSBmYWlsZWRcbiIpKTsKKyAgfQorICBhc3NlcnQoMCA9PSBydik7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19mbHVzaF9mbGlnaHQoU1NMICpzc2wpCit7CisgICh2b2lkKXNzbDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19zZW5kX2FsZXJ0KFNTTCAqc3NsLCBlbnVtIHNzbF9lbmNyeXB0aW9uX2xldmVsX3QgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFsZXJ0KQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKilTU0xfZ2V0X2FwcF9kYXRhKHNzbCk7CisgICh2b2lkKWxldmVsOworCisgIHFzLT50bHNfYWxlcnQgPSBhbGVydDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBTU0xfUVVJQ19NRVRIT0QgcXVpY19tZXRob2QgPSB7cXVpY19zZXRfZW5jcnlwdGlvbl9zZWNyZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWljX2FkZF9oYW5kc2hha2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpY19mbHVzaF9mbGlnaHQsIHF1aWNfc2VuZF9hbGVydH07CisKK3N0YXRpYyBTU0xfQ1RYICpxdWljX3NzbF9jdHgoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3sKKyAgU1NMX0NUWCAqc3NsX2N0eCA9IFNTTF9DVFhfbmV3KFRMU19tZXRob2QoKSk7CisgIGNvbnN0IGNoYXIgKmtleWxvZ19maWxlbmFtZTsKKworICBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihzc2xfY3R4LCBUTFMxXzNfVkVSU0lPTik7CisgIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uKHNzbF9jdHgsIFRMUzFfM19WRVJTSU9OKTsKKworICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhzc2xfY3R4KTsKKworICBpZihTU0xfQ1RYX3NldF9jaXBoZXJzdWl0ZXMoc3NsX2N0eCwgUVVJQ19DSVBIRVJTKSAhPSAxKSB7CisgICAgY2hhciBlcnJvcl9idWZmZXJbMjU2XTsKKyAgICBFUlJfZXJyb3Jfc3RyaW5nX24oRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICBmYWlsZihkYXRhLCAiU1NMX0NUWF9zZXRfY2lwaGVyc3VpdGVzOiAlcyIsIGVycm9yX2J1ZmZlcik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZihTU0xfQ1RYX3NldDFfZ3JvdXBzX2xpc3Qoc3NsX2N0eCwgUVVJQ19HUk9VUFMpICE9IDEpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMX0NUWF9zZXQxX2dyb3Vwc19saXN0IGZhaWxlZCIpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgU1NMX0NUWF9zZXRfcXVpY19tZXRob2Qoc3NsX2N0eCwgJnF1aWNfbWV0aG9kKTsKKworICBrZXlsb2dfZmlsZW5hbWUgPSBnZXRlbnYoIlNTTEtFWUxPR0ZJTEUiKTsKKyAgaWYoa2V5bG9nX2ZpbGVuYW1lKSB7CisgICAga2V5bG9nX2ZpbGUgPSBmb3BlbihrZXlsb2dfZmlsZW5hbWUsICJ3YiIpOworICAgIGlmKGtleWxvZ19maWxlKSB7CisgICAgICBTU0xfQ1RYX3NldF9rZXlsb2dfY2FsbGJhY2soc3NsX2N0eCwga2V5bG9nX2NhbGxiYWNrKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc3NsX2N0eDsKK30KKworLyoqIFNTTCBjYWxsYmFja3MgKioqLworCitzdGF0aWMgaW50IHF1aWNfaW5pdF9zc2woc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBjb25zdCB1aW50OF90ICphbHBuID0gTlVMTDsKKyAgc2l6ZV90IGFscG5sZW4gPSAwOworICAvKiB0aGlzIHdpbGwgbmVlZCBzb21lIGF0dGVudGlvbiB3aGVuIEhUVFBTIHByb3h5IG92ZXIgUVVJQyBnZXQgZml4ZWQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gcXMtPmNvbm4tPmhvc3QubmFtZTsKKworICBpZihxcy0+c3NsKQorICAgIFNTTF9mcmVlKHFzLT5zc2wpOworCisgIHFzLT5zc2wgPSBTU0xfbmV3KHFzLT5zc2xjdHgpOworCisgIFNTTF9zZXRfYXBwX2RhdGEocXMtPnNzbCwgcXMpOworICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUocXMtPnNzbCk7CisKKyAgc3dpdGNoKHFzLT52ZXJzaW9uKSB7CisjaWZkZWYgTkdUQ1AyX1BST1RPX1ZFUgorICBjYXNlIE5HVENQMl9QUk9UT19WRVI6CisgICAgYWxwbiA9IChjb25zdCB1aW50OF90ICopTkdUQ1AyX0FMUE5fSDM7CisgICAgYWxwbmxlbiA9IHNpemVvZihOR1RDUDJfQUxQTl9IMykgLSAxOworICAgIGJyZWFrOworI2VuZGlmCisgIH0KKyAgaWYoYWxwbikKKyAgICBTU0xfc2V0X2FscG5fcHJvdG9zKHFzLT5zc2wsIGFscG4sIChpbnQpYWxwbmxlbik7CisKKyAgLyogc2V0IFNOSSAqLworICBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUocXMtPnNzbCwgaG9zdG5hbWUpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9pbml0aWFsKG5ndGNwMl9jb25uICpxdWljLCB2b2lkICp1c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKworICBpZihuZ3RjcDJfY3J5cHRvX3JlYWRfd3JpdGVfY3J5cHRvX2RhdGEoCisgICAgICAgcXVpYywgcXMtPnNzbCwgTkdUQ1AyX0NSWVBUT19MRVZFTF9JTklUSUFMLCBOVUxMLCAwKSAhPSAwKQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NiX3JlY3ZfY3J5cHRvX2RhdGEobmd0Y3AyX2Nvbm4gKnRjb25uLCBuZ3RjcDJfY3J5cHRvX2xldmVsIGNyeXB0b19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKil1c2VyX2RhdGE7CisgICh2b2lkKW9mZnNldDsKKworICBpZihuZ3RjcDJfY3J5cHRvX3JlYWRfd3JpdGVfY3J5cHRvX2RhdGEodGNvbm4sIHFzLT5zc2wsIGNyeXB0b19sZXZlbCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFsZW4pICE9IDApCisgICAgcmV0dXJuIE5HVENQMl9FUlJfQ1JZUFRPOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX2hhbmRzaGFrZV9jb21wbGV0ZWQobmd0Y3AyX2Nvbm4gKnRjb25uLCB2b2lkICp1c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgKHZvaWQpdGNvbm47CisgIGluZm9mKHFzLT5jb25uLT5kYXRhLCAiUVVJQyBoYW5kc2hha2UgaXMgY29tcGxldGVkXG4iKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXh0ZW5kX3N0cmVhbV93aW5kb3cobmd0Y3AyX2Nvbm4gKnRjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEhUVFAgKnN0cmVhbSkKK3sKKyAgc2l6ZV90IHRoaXNtdWNoID0gc3RyZWFtLT51bmFja2VkX3dpbmRvdzsKKyAgbmd0Y3AyX2Nvbm5fZXh0ZW5kX21heF9zdHJlYW1fb2Zmc2V0KHRjb25uLCBzdHJlYW0tPnN0cmVhbTNfaWQsIHRoaXNtdWNoKTsKKyAgbmd0Y3AyX2Nvbm5fZXh0ZW5kX21heF9vZmZzZXQodGNvbm4sIHRoaXNtdWNoKTsKKyAgc3RyZWFtLT51bmFja2VkX3dpbmRvdyA9IDA7Cit9CisKKworc3RhdGljIGludCBjYl9yZWN2X3N0cmVhbV9kYXRhKG5ndGNwMl9jb25uICp0Y29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbiwgdWludDY0X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgc3NpemVfdCBuY29uc3VtZWQ7CisgICh2b2lkKW9mZnNldDsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKworICBuY29uc3VtZWQgPQorICAgIG5naHR0cDNfY29ubl9yZWFkX3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQsIGJ1ZiwgYnVmbGVuLCBmaW4pOworICBpZihuY29uc3VtZWQgPCAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fcmVhZF9zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IoKGludCluY29uc3VtZWQpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgLyogbnVtYmVyIG9mIGJ5dGVzIGluc2lkZSBidWZsZW4gd2hpY2ggY29uc2lzdHMgb2YgZnJhbWluZyBvdmVyaGVhZAorICAgKiBpbmNsdWRpbmcgUVBBQ0sgSEVBREVSUy4gSW4gb3RoZXIgd29yZHMsIGl0IGRvZXMgbm90IGNvbnN1bWUgcGF5bG9hZCBvZgorICAgKiBEQVRBIGZyYW1lLiAqLworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X3N0cmVhbV9vZmZzZXQodGNvbm4sIHN0cmVhbV9pZCwgbmNvbnN1bWVkKTsKKyAgbmd0Y3AyX2Nvbm5fZXh0ZW5kX21heF9vZmZzZXQodGNvbm4sIG5jb25zdW1lZCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NiX2Fja2VkX3N0cmVhbV9kYXRhX29mZnNldChuZ3RjcDJfY29ubiAqdGNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG9mZnNldCwgc2l6ZV90IGRhdGFsZW4sIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKil1c2VyX2RhdGE7CisgIGludCBydjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZCl0Y29ubjsKKyAgKHZvaWQpb2Zmc2V0OworICAodm9pZClkYXRhbGVuOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworCisgIHJ2ID0gbmdodHRwM19jb25uX2FkZF9hY2tfb2Zmc2V0KHFzLT5oM2Nvbm4sIHN0cmVhbV9pZCwgZGF0YWxlbik7CisgIGlmKHJ2ICE9IDApIHsKKyAgICBmYWlsZihxcy0+Y29ubi0+ZGF0YSwgIm5naHR0cDNfY29ubl9hZGRfYWNrX29mZnNldCByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgbmdodHRwM19zdHJlcnJvcihydikpOworICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9zdHJlYW1fY2xvc2Uobmd0Y3AyX2Nvbm4gKnRjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFwcF9lcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKil1c2VyX2RhdGE7CisgIGludCBydjsKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKXN0cmVhbV91c2VyX2RhdGE7CisgIC8qIHN0cmVhbSBpcyBjbG9zZWQuLi4gKi8KKworICBydiA9IG5naHR0cDNfY29ubl9jbG9zZV9zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwX2Vycm9yX2NvZGUpOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fY2xvc2Vfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgcmV0dXJuIE5HVENQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX3N0cmVhbV9yZXNldChuZ3RjcDJfY29ubiAqdGNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmluYWxfc2l6ZSwgdWludDY0X3QgYXBwX2Vycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgaW50IHJ2OworICAodm9pZCl0Y29ubjsKKyAgKHZvaWQpZmluYWxfc2l6ZTsKKyAgKHZvaWQpYXBwX2Vycm9yX2NvZGU7CisgICh2b2lkKXN0cmVhbV91c2VyX2RhdGE7CisKKyAgcnYgPSBuZ2h0dHAzX2Nvbm5fcmVzZXRfc3RyZWFtKHFzLT5oM2Nvbm4sIHN0cmVhbV9pZCk7CisgIGlmKHJ2ICE9IDApIHsKKyAgICBmYWlsZihxcy0+Y29ubi0+ZGF0YSwgIm5naHR0cDNfY29ubl9yZXNldF9zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfcmVjdl9yZXRyeShuZ3RjcDJfY29ubiAqdGNvbm4sIGNvbnN0IG5ndGNwMl9wa3RfaGQgKmhkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ndGNwMl9wa3RfcmV0cnkgKnJldHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIFJlLWdlbmVyYXRlIGhhbmRzaGFrZSBzZWNyZXRzIGhlcmUgYmVjYXVzZSBjb25uZWN0aW9uIElEIG1pZ2h0IGNoYW5nZS4gKi8KKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICAodm9pZCl0Y29ubjsKKyAgKHZvaWQpaGQ7CisgICh2b2lkKXJldHJ5OworCisgIHNldHVwX2luaXRpYWxfY3J5cHRvX2NvbnRleHQocXMpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX2V4dGVuZF9tYXhfbG9jYWxfc3RyZWFtc19iaWRpKG5ndGNwMl9jb25uICp0Y29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWF4X3N0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKW1heF9zdHJlYW1zOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfZXh0ZW5kX21heF9zdHJlYW1fZGF0YShuZ3RjcDJfY29ubiAqdGNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kYXRhLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXRjb25uOworICAodm9pZCltYXhfZGF0YTsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKworICBydiA9IG5naHR0cDNfY29ubl91bmJsb2NrX3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fdW5ibG9ja19zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfZ2V0X25ld19jb25uZWN0aW9uX2lkKG5ndGNwMl9jb25uICp0Y29ubiwgbmd0Y3AyX2NpZCAqY2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdG9rZW4sIHNpemVfdCBjaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICAodm9pZCl0Y29ubjsKKworICByZXN1bHQgPSBDdXJsX3JhbmQocXMtPmNvbm4tPmRhdGEsIGNpZC0+ZGF0YSwgY2lkbGVuKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIGNpZC0+ZGF0YWxlbiA9IGNpZGxlbjsKKworICByZXN1bHQgPSBDdXJsX3JhbmQocXMtPmNvbm4tPmRhdGEsIHRva2VuLCBOR1RDUDJfU1RBVEVMRVNTX1JFU0VUX1RPS0VOTEVOKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBuZ3RjcDJfY29ubl9jYWxsYmFja3MgbmdfY2FsbGJhY2tzID0geworICBjYl9pbml0aWFsLAorICBOVUxMLCAvKiByZWN2X2NsaWVudF9pbml0aWFsICovCisgIGNiX3JlY3ZfY3J5cHRvX2RhdGEsCisgIGNiX2hhbmRzaGFrZV9jb21wbGV0ZWQsCisgIE5VTEwsIC8qIHJlY3ZfdmVyc2lvbl9uZWdvdGlhdGlvbiAqLworICBuZ3RjcDJfY3J5cHRvX2VuY3J5cHRfY2IsCisgIG5ndGNwMl9jcnlwdG9fZGVjcnlwdF9jYiwKKyAgbmd0Y3AyX2NyeXB0b19ocF9tYXNrX2NiLAorICBjYl9yZWN2X3N0cmVhbV9kYXRhLAorICBOVUxMLCAvKiBhY2tlZF9jcnlwdG9fb2Zmc2V0ICovCisgIGNiX2Fja2VkX3N0cmVhbV9kYXRhX29mZnNldCwKKyAgTlVMTCwgLyogc3RyZWFtX29wZW4gKi8KKyAgY2Jfc3RyZWFtX2Nsb3NlLAorICBOVUxMLCAvKiByZWN2X3N0YXRlbGVzc19yZXNldCAqLworICBjYl9yZWN2X3JldHJ5LAorICBjYl9leHRlbmRfbWF4X2xvY2FsX3N0cmVhbXNfYmlkaSwKKyAgTlVMTCwgLyogZXh0ZW5kX21heF9sb2NhbF9zdHJlYW1zX3VuaSAqLworICBOVUxMLCAvKiByYW5kICAqLworICBjYl9nZXRfbmV3X2Nvbm5lY3Rpb25faWQsCisgIE5VTEwsIC8qIHJlbW92ZV9jb25uZWN0aW9uX2lkICovCisgIG5ndGNwMl9jcnlwdG9fdXBkYXRlX2tleV9jYiwgLyogdXBkYXRlX2tleSAqLworICBOVUxMLCAvKiBwYXRoX3ZhbGlkYXRpb24gKi8KKyAgTlVMTCwgLyogc2VsZWN0X3ByZWZlcnJlZF9hZGRyICovCisgIGNiX3N0cmVhbV9yZXNldCwKKyAgTlVMTCwgLyogZXh0ZW5kX21heF9yZW1vdGVfc3RyZWFtc19iaWRpICovCisgIE5VTEwsIC8qIGV4dGVuZF9tYXhfcmVtb3RlX3N0cmVhbXNfdW5pICovCisgIGNiX2V4dGVuZF9tYXhfc3RyZWFtX2RhdGEsCisgIE5VTEwsIC8qIGRjaWRfc3RhdHVzICovCisgIE5VTEwgIC8qIGhhbmRzaGFrZV9jb25maXJtZWQgKi8KK307CisKKy8qCisgKiBNaWdodCBiZSBjYWxsZWQgdHdpY2UgZm9yIGhhcHB5IGV5ZWJhbGxzLgorICovCitDVVJMY29kZSBDdXJsX3F1aWNfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKyAgaW50IHJjOworICBpbnQgcnY7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgbmd0Y3AyX3BhdGggcGF0aDsgLyogVE9ETzogdGhpcyBtdXN0IGJlIGluaXRpYWxpemVkIHByb3Blcmx5ICovCisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAmY29ubi0+aGVxdWljW3NvY2tpbmRleF07CisgIGNoYXIgaXBidWZbNDBdOworICBsb25nIHBvcnQ7CisgIHVpbnQ4X3QgcGFyYW1zYnVmWzY0XTsKKyAgbmd0Y3AyX3RyYW5zcG9ydF9wYXJhbXMgcGFyYW1zOworICBzc2l6ZV90IG53cml0ZTsKKworICBxcy0+Y29ubiA9IGNvbm47CisKKyAgLyogZXh0cmFjdCB0aGUgdXNlZCBhZGRyZXNzIGFzIGEgc3RyaW5nICovCisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKWFkZHIsIGFkZHJsZW4sIGlwYnVmLCAmcG9ydCkpIHsKKyAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOworICAgIGZhaWxmKGRhdGEsICJzc3JlbSBpbmV0X250b3AoKSBmYWlsZWQgd2l0aCBlcnJubyAlZDogJXMiLAorICAgICAgICAgIFNPQ0tFUlJOTywgQ3VybF9zdHJlcnJvcihTT0NLRVJSTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICB9CisKKyAgaW5mb2YoZGF0YSwgIkNvbm5lY3Qgc29ja2V0ICVkIG92ZXIgUVVJQyB0byAlczolbGRcbiIsCisgICAgICAgIHNvY2tmZCwgaXBidWYsIHBvcnQpOworCisgIHFzLT52ZXJzaW9uID0gTkdUQ1AyX1BST1RPX1ZFUjsKKyAgcXMtPnNzbGN0eCA9IHF1aWNfc3NsX2N0eChkYXRhKTsKKyAgaWYoIXFzLT5zc2xjdHgpCisgICAgcmV0dXJuIENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKworICBpZihxdWljX2luaXRfc3NsKHFzKSkKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIHFzLT5kY2lkLmRhdGFsZW4gPSBOR1RDUDJfTUFYX0NJRExFTjsKKyAgcmVzdWx0ID0gQ3VybF9yYW5kKGRhdGEsIHFzLT5kY2lkLmRhdGEsIE5HVENQMl9NQVhfQ0lETEVOKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgcXMtPnNjaWQuZGF0YWxlbiA9IE5HVENQMl9NQVhfQ0lETEVOOworICByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgcXMtPnNjaWQuZGF0YSwgTkdUQ1AyX01BWF9DSURMRU4pOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBxdWljX3NldHRpbmdzKCZxcy0+c2V0dGluZ3MsIGRhdGEtPnNldC5idWZmZXJfc2l6ZSk7CisKKyAgcXMtPmxvY2FsX2FkZHJsZW4gPSBzaXplb2YocXMtPmxvY2FsX2FkZHIpOworICBydiA9IGdldHNvY2tuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZxcy0+bG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICAgICAmcXMtPmxvY2FsX2FkZHJsZW4pOworICBpZihydiA9PSAtMSkKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIG5ndGNwMl9hZGRyX2luaXQoJnBhdGgubG9jYWwsICh1aW50OF90ICopJnFzLT5sb2NhbF9hZGRyLCBxcy0+bG9jYWxfYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5yZW1vdGUsICh1aW50OF90KilhZGRyLCBhZGRybGVuLCBOVUxMKTsKKworI2lmZGVmIE5HVENQMl9QUk9UT19WRVIKKyNkZWZpbmUgUVVJQ1ZFUiBOR1RDUDJfUFJPVE9fVkVSCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBuZ3RjcDIgdmVyc2lvbiIKKyNlbmRpZgorICByYyA9IG5ndGNwMl9jb25uX2NsaWVudF9uZXcoJnFzLT5xY29ubiwgJnFzLT5kY2lkLCAmcXMtPnNjaWQsICZwYXRoLCBRVUlDVkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5nX2NhbGxiYWNrcywgJnFzLT5zZXR0aW5ncywgTlVMTCwgcXMpOworICBpZihyYykKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIG5ndGNwMl9jb25uX2dldF9sb2NhbF90cmFuc3BvcnRfcGFyYW1zKHFzLT5xY29ubiwgJnBhcmFtcyk7CisgIG53cml0ZSA9IG5ndGNwMl9lbmNvZGVfdHJhbnNwb3J0X3BhcmFtcygKKyAgICBwYXJhbXNidWYsIHNpemVvZihwYXJhbXNidWYpLCBOR1RDUDJfVFJBTlNQT1JUX1BBUkFNU19UWVBFX0NMSUVOVF9IRUxMTywKKyAgICAmcGFyYW1zKTsKKyAgaWYobndyaXRlIDwgMCkgeworICAgIGZhaWxmKGRhdGEsICJuZ3RjcDJfZW5jb2RlX3RyYW5zcG9ydF9wYXJhbXM6ICVzXG4iLAorICAgICAgICAgIG5ndGNwMl9zdHJlcnJvcigoaW50KW53cml0ZSkpOworICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBpZighU1NMX3NldF9xdWljX3RyYW5zcG9ydF9wYXJhbXMocXMtPnNzbCwgcGFyYW1zYnVmLCBud3JpdGUpKQorICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisKKyAgcmMgPSBzZXR1cF9pbml0aWFsX2NyeXB0b19jb250ZXh0KHFzKTsKKyAgaWYocmMpCisgICAgcmV0dXJuIENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBTdG9yZSBuZ3RwMiB2ZXJzaW9uIGluZm8gaW4gdGhpcyBidWZmZXIsIFByZWZpeCB3aXRoIGEgc3BhY2UuICBSZXR1cm4gdG90YWwKKyAqIGxlbmd0aCB3cml0dGVuLgorICovCitpbnQgQ3VybF9xdWljX3ZlcihjaGFyICpwLCBzaXplX3QgbGVuKQoreworICBuZ3RjcDJfaW5mbyAqbmcyID0gbmd0Y3AyX3ZlcnNpb24oMCk7CisgIG5naHR0cDNfaW5mbyAqaHQzID0gbmdodHRwM192ZXJzaW9uKDApOworICByZXR1cm4gbXNucHJpbnRmKHAsIGxlbiwgIiBuZ3RjcDIvJXMgbmdodHRwMy8lcyIsCisgICAgICAgICAgICAgICAgICAgbmcyLT52ZXJzaW9uX3N0ciwgaHQzLT52ZXJzaW9uX3N0cik7Cit9CisKK3N0YXRpYyBpbnQgbmdfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQoreworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZjb25uLT5kYXRhLT5yZXE7CisgIGludCBiaXRtYXAgPSBHRVRTT0NLX0JMQU5LOworCisgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgLyogaW4gYSBIVFRQLzIgY29ubmVjdGlvbiB3ZSBjYW4gYmFzaWNhbGx5IGFsd2F5cyBnZXQgYSBmcmFtZSBzbyB3ZSBzaG91bGQKKyAgICAgYWx3YXlzIGJlIHJlYWR5IGZvciBvbmUgKi8KKyAgYml0bWFwIHw9IEdFVFNPQ0tfUkVBRFNPQ0soRklSU1RTT0NLRVQpOworCisgIC8qIHdlJ3JlIHN0aWxsIHVwbG9hZGluZyBvciB0aGUgSFRUUC8yIGxheWVyIHdhbnRzIHRvIHNlbmQgZGF0YSAqLworICBpZigoay0+a2VlcG9uICYgKEtFRVBfU0VORHxLRUVQX1NFTkRfUEFVU0UpKSA9PSBLRUVQX1NFTkQpCisgICAgYml0bWFwIHw9IEdFVFNPQ0tfV1JJVEVTT0NLKEZJUlNUU09DS0VUKTsKKworICByZXR1cm4gYml0bWFwOworfQorCitzdGF0aWMgaW50IG5nX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgcmV0dXJuIG5nX2dldHNvY2soKHN0cnVjdCBjb25uZWN0ZGF0YSAqKWNvbm4sIHNvY2tzKTsKK30KKworc3RhdGljIENVUkxjb2RlIG5nX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIGludCBpOworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAmY29ubi0+aGVxdWljWzBdOworICAodm9pZClkZWFkX2Nvbm5lY3Rpb247CisgIGlmKHFzLT5zc2wpCisgICAgU1NMX2ZyZWUocXMtPnNzbCk7CisgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKyAgICBmcmVlKHFzLT5jcnlwdG9fZGF0YVtpXS5idWYpOworICBuZ2h0dHAzX2Nvbm5fZGVsKHFzLT5oM2Nvbm4pOworICBuZ3RjcDJfY29ubl9kZWwocXMtPnFjb25uKTsKKyAgU1NMX0NUWF9mcmVlKHFzLT5zc2xjdHgpOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmdfY29ubmNoZWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGVja3NfdG9fcGVyZm9ybSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY2hlY2tzX3RvX3BlcmZvcm07CisgIHJldHVybiBDT05OUkVTVUxUX05PTkU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9odHRwMyA9IHsKKyAgIkhUVFBTIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIEN1cmxfaHR0cCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgQ3VybF9odHRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgbmdfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIG5nX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIG5nX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIG5nX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBuZ19jb25uY2hlY2ssICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KKyAgUE9SVF9IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19IVFRQUywgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9TU0wgfCBQUk9UT1BUX1NUUkVBTSAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworc3RhdGljIGludCBjYl9oM19zdHJlYW1fY2xvc2UobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFwcF9lcnJvcl9jb2RlLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpYXBwX2Vycm9yX2NvZGU7CisgICh2b2lkKXVzZXJfZGF0YTsKKyAgSDNCVUdGKGluZm9mKGRhdGEsICJjYl9oM19zdHJlYW1fY2xvc2UgQ0FMTEVEXG4iKSk7CisKKyAgc3RyZWFtLT5jbG9zZWQgPSBUUlVFOworICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUVVJQyk7CisgIC8qIG1ha2Ugc3VyZSB0aGF0IG5naDNfc3RyZWFtX3JlY3YgaXMgY2FsbGVkIGFnYWluIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2ZlcgorICAgICBldmVuIGlmIHRoZXJlIGFyZSBubyBtb3JlIHBhY2tldHMgdG8gYmUgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLiAqLworICBkYXRhLT5zdGF0ZS5kcmFpbiA9IDE7CisgIHJldHVybiAwOworfQorCisvKiBNaW5pbXVtIHNpemUgb2YgdGhlIG92ZXJmbG93IGJ1ZmZlciAqLworI2RlZmluZSBPVkVSRkxPV1NJWkUgMTAyNAorCisvKgorICogYWxsb2NhdGVfb3ZlcmZsb3coKSBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgcm9vbSBmb3IgaW5jb21pbmcgZGF0YSBpbiB0aGUKKyAqIG92ZXJmbG93IGJ1ZmZlciwgZ3Jvd2luZyBpdCB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGRhdGEgaWYgbmVjZXNzYXJ5LiBXZQorICogbWF5IG5lZWQgdG8gdXNlIHRoZSBvdmVyZmxvdyBidWZmZXIgYmVjYXVzZSB3ZSBjYW4ndCBwcmVjaXNlbHkgbGltaXQgdGhlCisgKiBhbW91bnQgb2YgSFRUUC8zIGhlYWRlciBkYXRhIHdlIHJlY2VpdmUgdXNpbmcgUVVJQyBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcy4KKyAqLworc3RhdGljIENVUkxjb2RlIGFsbG9jYXRlX292ZXJmbG93KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEhUVFAgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKQoreworICBzaXplX3QgbWF4bGVmdDsKKyAgc2l6ZV90IG5ld3NpemU7CisgIC8qIGxlbmd0aCBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2UsIHNvIHRha2UgY2FyZSBub3QgdG8gb3ZlcmZsb3cgbmV3c2l6ZSAqLworICBtYXhsZWZ0ID0gQ1VSTF9NQVhfUkVBRF9TSVpFIC0gc3RyZWFtLT5vdmVyZmxvd19idWZsZW47CisgIGlmKGxlbmd0aCA+IG1heGxlZnQpIHsKKyAgICAvKiBUaGUgcmVhc29uIHRvIGhhdmUgYSBtYXggbGltaXQgZm9yIHRoaXMgaXMgdG8gYXZvaWQgdGhlIHJpc2sgb2YgYSBiYWQKKyAgICAgICBzZXJ2ZXIgZmVlZGluZyBsaWJjdXJsIHdpdGggYSBoaWdobHkgY29tcHJlc3NlZCBsaXN0IG9mIGhlYWRlcnMgdGhhdAorICAgICAgIHdpbGwgY2F1c2Ugb3VyIG92ZXJmbG93IGJ1ZmZlciB0byBncm93IHRvbyBsYXJnZSAqLworICAgIGZhaWxmKGRhdGEsICJSZWplY3RlZCAlenUgYnl0ZXMgb2Ygb3ZlcmZsb3cgZGF0YSAobWF4IGlzICVkKSEiLAorICAgICAgICAgIHN0cmVhbS0+b3ZlcmZsb3dfYnVmbGVuICsgbGVuZ3RoLCBDVVJMX01BWF9SRUFEX1NJWkUpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIG5ld3NpemUgPSBzdHJlYW0tPm92ZXJmbG93X2J1ZmxlbiArIGxlbmd0aDsKKyAgaWYobmV3c2l6ZSA+IHN0cmVhbS0+b3ZlcmZsb3dfYnVmc2l6ZSkgeworICAgIC8qIFdlIGVubGFyZ2UgdGhlIG92ZXJmbG93IGJ1ZmZlciBhcyBpdCBpcyB0b28gc21hbGwgKi8KKyAgICBjaGFyICpuZXdidWZmOworICAgIG5ld3NpemUgPSBDVVJMTUFYKG5ld3NpemUgKiAzIC8gMiwgc3RyZWFtLT5vdmVyZmxvd19idWZzaXplKjIpOworICAgIG5ld3NpemUgPSBDVVJMTUlOKENVUkxNQVgoT1ZFUkZMT1dTSVpFLCBuZXdzaXplKSwgQ1VSTF9NQVhfUkVBRF9TSVpFKTsKKyAgICBuZXdidWZmID0gcmVhbGxvYyhzdHJlYW0tPm92ZXJmbG93X2J1ZiwgbmV3c2l6ZSk7CisgICAgaWYoIW5ld2J1ZmYpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGZvciBvdmVyZmxvdyBidWZmZXIhIik7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgc3RyZWFtLT5vdmVyZmxvd19idWYgPSBuZXdidWZmOworICAgIHN0cmVhbS0+b3ZlcmZsb3dfYnVmc2l6ZSA9IG5ld3NpemU7CisgICAgaW5mb2YoZGF0YSwgIkdyZXcgSFRUUC8zIG92ZXJmbG93IGJ1ZmZlciB0byAlenUgYnl0ZXNcbiIsIG5ld3NpemUpOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIHdyaXRlX2RhdGEoKSBjb3BpZXMgZGF0YSB0byB0aGUgc3RyZWFtJ3MgcmVjZWl2ZSBidWZmZXIuIElmIG5vdCBlbm91Z2gKKyAqIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgcmVjZWl2ZSBidWZmZXIsIGl0IGNvcGllcyB0aGUgcmVzdCB0byB0aGUKKyAqIHN0cmVhbSdzIG92ZXJmbG93IGJ1ZmZlci4KKyAqLworc3RhdGljIENVUkxjb2RlIHdyaXRlX2RhdGEoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBIVFRQICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBtZW1sZW4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBjb25zdCBjaGFyICpidWYgPSBtZW07CisgIHNpemVfdCBuY29weSA9IG1lbWxlbjsKKyAgLyogY29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIHRvIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworICBpZihzdHJlYW0tPmxlbikgeworICAgIHNpemVfdCBsZW4gPSBDVVJMTUlOKG5jb3B5LCBzdHJlYW0tPmxlbik7CisjaWYgMCAvKiBleHRyYSBkZWJ1Z2dpbmcgb2YgaW5jb21pbmcgaDMgZGF0YSAqLworICAgIGZwcmludGYoc3RkZXJyLCAiISEgQ29waWVzICV6ZCBieXRlcyB0byAlcCAodG90YWwgJXpkKVxuIiwKKyAgICAgICAgICAgIGxlbiwgc3RyZWFtLT5tZW0sIHN0cmVhbS0+bWVtbGVuKTsKKyNlbmRpZgorICAgIG1lbWNweShzdHJlYW0tPm1lbSwgYnVmLCBsZW4pOworICAgIHN0cmVhbS0+bGVuIC09IGxlbjsKKyAgICBzdHJlYW0tPm1lbWxlbiArPSBsZW47CisgICAgc3RyZWFtLT5tZW0gKz0gbGVuOworICAgIGJ1ZiArPSBsZW47CisgICAgbmNvcHkgLT0gbGVuOworICB9CisgIC8qIGNvcHkgdGhlIHJlc3QgdG8gdGhlIG92ZXJmbG93IGJ1ZmZlciAqLworICBpZihuY29weSkgeworICAgIHJlc3VsdCA9IGFsbG9jYXRlX292ZXJmbG93KGRhdGEsIHN0cmVhbSwgbmNvcHkpOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjaWYgMCAvKiBleHRyYSBkZWJ1Z2dpbmcgb2YgaW5jb21pbmcgaDMgZGF0YSAqLworICAgIGZwcmludGYoc3RkZXJyLCAiISEgQ29waWVzICV6ZCBvdmVyZmxvdyBieXRlcyB0byAlcCAodG90YWwgJXpkKVxuIiwKKyAgICAgICAgICAgIG5jb3B5LCBzdHJlYW0tPm92ZXJmbG93X2J1Ziwgc3RyZWFtLT5vdmVyZmxvd19idWZsZW4pOworI2VuZGlmCisgICAgbWVtY3B5KHN0cmVhbS0+b3ZlcmZsb3dfYnVmICsgc3RyZWFtLT5vdmVyZmxvd19idWZsZW4sIGJ1ZiwgbmNvcHkpOworICAgIHN0cmVhbS0+b3ZlcmZsb3dfYnVmbGVuICs9IG5jb3B5OworICB9CisjaWYgMCAvKiBleHRyYSBkZWJ1Z2dpbmcgb2YgaW5jb21pbmcgaDMgZGF0YSAqLworICB7CisgICAgc2l6ZV90IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgbWVtbGVuOyBpKyspIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiISEgZGF0YVslZF06ICUwMnggJyVjJ1xuIiwgaSwgYnVmW2ldLCBidWZbaV0pOworICAgIH0KKyAgfQorI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfcmVjdl9kYXRhKG5naHR0cDNfY29ubiAqY29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisKKyAgcmVzdWx0ID0gd3JpdGVfZGF0YShkYXRhLCBzdHJlYW0sIGJ1ZiwgYnVmbGVuKTsKKyAgaWYocmVzdWx0KSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHN0cmVhbS0+dW5hY2tlZF93aW5kb3cgKz0gYnVmbGVuOworICAodm9pZClzdHJlYW1faWQ7CisgICh2b2lkKXVzZXJfZGF0YTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfZGVmZXJyZWRfY29uc3VtZShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb25zdW1lZCwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IHVzZXJfZGF0YTsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKyAgKHZvaWQpc3RyZWFtX2lkOworCisgIG5ndGNwMl9jb25uX2V4dGVuZF9tYXhfc3RyZWFtX29mZnNldChxcy0+cWNvbm4sIHN0cmVhbV9pZCwgY29uc3VtZWQpOworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X29mZnNldChxcy0+cWNvbm4sIGNvbnN1bWVkKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERlY29kZSBIVFRQIHN0YXR1cyBjb2RlLiAgUmV0dXJucyAtMSBpZiBubyB2YWxpZCBzdGF0dXMgY29kZSB3YXMKKyAgIGRlY29kZWQuIChkdXBsaWNhdGUgZnJvbSBodHRwMi5jKSAqLworc3RhdGljIGludCBkZWNvZGVfc3RhdHVzX2NvZGUoY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCBsZW4pCit7CisgIGludCBpOworICBpbnQgcmVzOworCisgIGlmKGxlbiAhPSAzKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmVzID0gMDsKKworICBmb3IoaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICBjaGFyIGMgPSB2YWx1ZVtpXTsKKworICAgIGlmKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJlcyAqPSAxMDsKKyAgICByZXMgKz0gYyAtICcwJzsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfZW5kX2hlYWRlcnMobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICAodm9pZCljb25uOworICAodm9pZClzdHJlYW1faWQ7CisgICh2b2lkKXVzZXJfZGF0YTsKKworICAvKiBhZGQgYSBDUkxGIG9ubHkgaWYgd2UndmUgcmVjZWl2ZWQgc29tZSBoZWFkZXJzICovCisgIGlmKHN0cmVhbS0+Zmlyc3RoZWFkZXIpIHsKKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKGRhdGEsIHN0cmVhbSwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfcmVjdl9oZWFkZXIobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0b2tlbiwgbmdodHRwM19yY2J1ZiAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwM19yY2J1ZiAqdmFsdWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgbmdodHRwM192ZWMgaDNuYW1lID0gbmdodHRwM19yY2J1Zl9nZXRfYnVmKG5hbWUpOworICBuZ2h0dHAzX3ZlYyBoM3ZhbCA9IG5naHR0cDNfcmNidWZfZ2V0X2J1Zih2YWx1ZSk7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdG9rZW47CisgICh2b2lkKWZsYWdzOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgaWYoaDNuYW1lLmxlbiA9PSBzaXplb2YoIjpzdGF0dXMiKSAtIDEgJiYKKyAgICAgIW1lbWNtcCgiOnN0YXR1cyIsIGgzbmFtZS5iYXNlLCBoM25hbWUubGVuKSkgeworICAgIGNoYXIgbGluZVsxNF07IC8qIHN0YXR1cyBsaW5lIGlzIGFsd2F5cyAxMyBjaGFyYWN0ZXJzIGxvbmcgKi8KKyAgICBzaXplX3QgbmNvcHk7CisgICAgaW50IHN0YXR1cyA9IGRlY29kZV9zdGF0dXNfY29kZShoM3ZhbC5iYXNlLCBoM3ZhbC5sZW4pOworICAgIERFQlVHQVNTRVJUKHN0YXR1cyAhPSAtMSk7CisgICAgbmNvcHkgPSBtc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiSFRUUC8zICUwM2QgXHJcbiIsIHN0YXR1cyk7CisgICAgcmVzdWx0ID0gd3JpdGVfZGF0YShkYXRhLCBzdHJlYW0sIGxpbmUsIG5jb3B5KTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogc3RvcmUgYXMgYSBIVFRQMS1zdHlsZSBoZWFkZXIgKi8KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKGRhdGEsIHN0cmVhbSwgaDNuYW1lLmJhc2UsIGgzbmFtZS5sZW4pOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKGRhdGEsIHN0cmVhbSwgIjogIiwgMik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlc3VsdCA9IHdyaXRlX2RhdGEoZGF0YSwgc3RyZWFtLCBoM3ZhbC5iYXNlLCBoM3ZhbC5sZW4pOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKGRhdGEsIHN0cmVhbSwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworICBzdHJlYW0tPmZpcnN0aGVhZGVyID0gVFJVRTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfc2VuZF9zdG9wX3NlbmRpbmcobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYXBwX2Vycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZClhcHBfZXJyb3JfY29kZTsKKyAgKHZvaWQpdXNlcl9kYXRhOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworICByZXR1cm4gMDsKK30KKworc3RhdGljIG5naHR0cDNfY29ubl9jYWxsYmFja3MgbmdoM19jYWxsYmFja3MgPSB7CisgIGNiX2gzX2Fja2VkX3N0cmVhbV9kYXRhLCAvKiBhY2tlZF9zdHJlYW1fZGF0YSAqLworICBjYl9oM19zdHJlYW1fY2xvc2UsCisgIGNiX2gzX3JlY3ZfZGF0YSwKKyAgY2JfaDNfZGVmZXJyZWRfY29uc3VtZSwKKyAgTlVMTCwgLyogYmVnaW5faGVhZGVycyAqLworICBjYl9oM19yZWN2X2hlYWRlciwKKyAgY2JfaDNfZW5kX2hlYWRlcnMsCisgIE5VTEwsIC8qIGJlZ2luX3RyYWlsZXJzICovCisgIGNiX2gzX3JlY3ZfaGVhZGVyLAorICBOVUxMLCAvKiBlbmRfdHJhaWxlcnMgKi8KKyAgTlVMTCwgLyogaHR0cF9iZWdpbl9wdXNoX3Byb21pc2UgKi8KKyAgTlVMTCwgLyogaHR0cF9yZWN2X3B1c2hfcHJvbWlzZSAqLworICBOVUxMLCAvKiBodHRwX2VuZF9wdXNoX3Byb21pc2UgKi8KKyAgTlVMTCwgLyogaHR0cF9jYW5jZWxfcHVzaCAqLworICBjYl9oM19zZW5kX3N0b3Bfc2VuZGluZywKKyAgTlVMTCwgLyogcHVzaF9zdHJlYW0gKi8KKyAgTlVMTCwgLyogZW5kX3N0cmVhbSAqLworfTsKKworc3RhdGljIGludCBpbml0X25naDNfY29ubihzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgaW50IHJjOworICBpbnQ2NF90IGN0cmxfc3RyZWFtX2lkLCBxcGFja19lbmNfc3RyZWFtX2lkLCBxcGFja19kZWNfc3RyZWFtX2lkOworCisgIGlmKG5ndGNwMl9jb25uX2dldF9tYXhfbG9jYWxfc3RyZWFtc191bmkocXMtPnFjb25uKSA8IDMpIHsKKyAgICBmYWlsZihxcy0+Y29ubi0+ZGF0YSwgInRvbyBmZXcgYXZhaWxhYmxlIFFVSUMgc3RyZWFtcyIpOworICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBuZ2h0dHAzX2Nvbm5fc2V0dGluZ3NfZGVmYXVsdCgmcXMtPmgzc2V0dGluZ3MpOworCisgIHJjID0gbmdodHRwM19jb25uX2NsaWVudF9uZXcoJnFzLT5oM2Nvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5naDNfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxcy0+aDNzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX21lbV9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXMpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX3VuaV9zdHJlYW0ocXMtPnFjb25uLCAmY3RybF9zdHJlYW1faWQsIE5VTEwpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByYyA9IG5naHR0cDNfY29ubl9iaW5kX2NvbnRyb2xfc3RyZWFtKHFzLT5oM2Nvbm4sIGN0cmxfc3RyZWFtX2lkKTsKKyAgaWYocmMpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX3VuaV9zdHJlYW0ocXMtPnFjb25uLCAmcXBhY2tfZW5jX3N0cmVhbV9pZCwgTlVMTCk7CisgIGlmKHJjKSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIHJjID0gbmd0Y3AyX2Nvbm5fb3Blbl91bmlfc3RyZWFtKHFzLT5xY29ubiwgJnFwYWNrX2RlY19zdHJlYW1faWQsIE5VTEwpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByYyA9IG5naHR0cDNfY29ubl9iaW5kX3FwYWNrX3N0cmVhbXMocXMtPmgzY29ubiwgcXBhY2tfZW5jX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFwYWNrX2RlY19zdHJlYW1faWQpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7CisgIGZhaWw6CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEN1cmxfcmVjdiBuZ2gzX3N0cmVhbV9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBuZ2gzX3N0cmVhbV9zZW5kOworCitzdGF0aWMgc2l6ZV90IGRyYWluX292ZXJmbG93X2J1ZmZlcihzdHJ1Y3QgSFRUUCAqc3RyZWFtKQoreworICBzaXplX3QgbmNvcHkgPSBDVVJMTUlOKHN0cmVhbS0+b3ZlcmZsb3dfYnVmbGVuLCBzdHJlYW0tPmxlbik7CisgIGlmKG5jb3B5ID4gMCkgeworICAgIG1lbWNweShzdHJlYW0tPm1lbSwgc3RyZWFtLT5vdmVyZmxvd19idWYsIG5jb3B5KTsKKyAgICBzdHJlYW0tPmxlbiAtPSBuY29weTsKKyAgICBzdHJlYW0tPm1lbSArPSBuY29weTsKKyAgICBzdHJlYW0tPm1lbWxlbiArPSBuY29weTsKKyAgICBzdHJlYW0tPm92ZXJmbG93X2J1ZmxlbiAtPSBuY29weTsKKyAgICBtZW1tb3ZlKHN0cmVhbS0+b3ZlcmZsb3dfYnVmLCBzdHJlYW0tPm92ZXJmbG93X2J1ZiArIG5jb3B5LAorICAgICAgICAgICAgc3RyZWFtLT5vdmVyZmxvd19idWZsZW4pOworICB9CisgIHJldHVybiBuY29weTsKK30KKworLyogaW5jb21pbmcgZGF0YSBmcmFtZXMgb24gdGhlIGgzIHN0cmVhbSAqLworc3RhdGljIHNzaXplX3QgbmdoM19zdHJlYW1fcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSBjb25uLT5xdWljOworCisgIGlmKCFzdHJlYW0tPm1lbWxlbikgeworICAgIC8qIHJlbWVtYmVyIHdoZXJlIHRvIHN0b3JlIGluY29taW5nIGRhdGEgZm9yIHRoaXMgc3RyZWFtIGFuZCBob3cgYmlnIHRoZQorICAgICAgIGJ1ZmZlciBpcyAqLworICAgIHN0cmVhbS0+bWVtID0gYnVmOworICAgIHN0cmVhbS0+bGVuID0gYnVmZmVyc2l6ZTsKKyAgfQorICAvKiBlbHNlLCB0aGVyZSdzIGRhdGEgaW4gdGhlIGJ1ZmZlciBhbHJlYWR5ICovCisKKyAgLyogaWYgdGhlcmUncyBkYXRhIGluIHRoZSBvdmVyZmxvdyBidWZmZXIgZnJvbSBhIHByZXZpb3VzIGNhbGwsIGNvcHkgYXMgbXVjaAorICAgICBhcyBwb3NzaWJsZSB0byB0aGUgcmVjZWl2ZSBidWZmZXIgYmVmb3JlIHJlY2VpdmluZyBtb3JlICovCisgIGRyYWluX292ZXJmbG93X2J1ZmZlcihzdHJlYW0pOworCisgIGlmKG5nX3Byb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmKG5nX2ZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYoc3RyZWFtLT5tZW1sZW4pIHsKKyAgICBzc2l6ZV90IG1lbWxlbiA9IHN0cmVhbS0+bWVtbGVuOworICAgIC8qIGRhdGEgYXJyaXZlZCAqLworICAgICpjdXJsY29kZSA9IENVUkxFX09LOworICAgIC8qIHJlc2V0IHRvIGFsbG93IG1vcmUgZGF0YSB0byBjb21lICovCisgICAgc3RyZWFtLT5tZW1sZW4gPSAwOworICAgIHN0cmVhbS0+bWVtID0gYnVmOworICAgIHN0cmVhbS0+bGVuID0gYnVmZmVyc2l6ZTsKKyAgICAvKiBleHRlbmQgdGhlIHN0cmVhbSB3aW5kb3cgd2l0aCB0aGUgZGF0YSB3ZSdyZSBjb25zdW1pbmcgYW5kIHNlbmQgb3V0CisgICAgICAgYW55IGFkZGl0aW9uYWwgcGFja2V0cyB0byB0ZWxsIHRoZSBzZXJ2ZXIgdGhhdCB3ZSBjYW4gcmVjZWl2ZSBtb3JlICovCisgICAgZXh0ZW5kX3N0cmVhbV93aW5kb3cocXMtPnFjb25uLCBzdHJlYW0pOworICAgIGlmKG5nX2ZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIG1lbWxlbjsKKyAgfQorCisgIGlmKHN0cmVhbS0+Y2xvc2VkKSB7CisgICAgKmN1cmxjb2RlID0gQ1VSTEVfT0s7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpbmZvZihjb25uLT5kYXRhLCAibmdoM19zdHJlYW1fcmVjdiByZXR1cm5zIDAgYnl0ZXMgYW5kIEVBR0FJTlxuIik7CisgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICByZXR1cm4gLTE7Cit9CisKKy8qIHRoaXMgYW1vdW50IG9mIGRhdGEgaGFzIG5vdyBiZWVuIGFja2VkIG9uIHRoaXMgc3RyZWFtICovCitzdGF0aWMgaW50IGNiX2gzX2Fja2VkX3N0cmVhbV9kYXRhKG5naHR0cDNfY29ubiAqY29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgaWYoIWRhdGEtPnNldC5wb3N0ZmllbGRzKSB7CisgICAgc3RyZWFtLT5oM291dC0+dXNlZCAtPSBkYXRhbGVuOworICAgIEgzQlVHRihpbmZvZihkYXRhLAorICAgICAgICAgICAgICAgICAiY2JfaDNfYWNrZWRfc3RyZWFtX2RhdGEsICV6ZCBieXRlcywgJXpkIGxlZnQgdW5hY2tlZFxuIiwKKyAgICAgICAgICAgICAgICAgZGF0YWxlbiwgc3RyZWFtLT5oM291dC0+dXNlZCkpOworICAgIERFQlVHQVNTRVJUKHN0cmVhbS0+aDNvdXQtPnVzZWQgPCBIM19TRU5EX1NJWkUpOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBjYl9oM19yZWFkZnVuY3Rpb24obmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX3ZlYyAqdmVjLCBzaXplX3QgdmVjY250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwZmxhZ3MsIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc2l6ZV90IG5yZWFkOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZCl1c2VyX2RhdGE7CisgICh2b2lkKXZlY2NudDsKKworICBpZihkYXRhLT5zZXQucG9zdGZpZWxkcykgeworICAgIHZlY1swXS5iYXNlID0gZGF0YS0+c2V0LnBvc3RmaWVsZHM7CisgICAgdmVjWzBdLmxlbiA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7CisgICAgKnBmbGFncyA9IE5HSFRUUDNfREFUQV9GTEFHX0VPRjsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIG5yZWFkID0gQ1VSTE1JTihzdHJlYW0tPnVwbG9hZF9sZW4sIEgzX1NFTkRfU0laRSAtIHN0cmVhbS0+aDNvdXQtPnVzZWQpOworICBpZihucmVhZCA+IDApIHsKKyAgICAvKiBuZ2h0dHAzIHdhbnRzIHVzIHRvIGhvbGQgb24gdG8gdGhlIGRhdGEgdW50aWwgaXQgdGVsbHMgdXMgaXQgaXMgb2theSB0bworICAgICAgIGRlbGV0ZSBpdC4gQXBwZW5kIHRoZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIGgzb3V0IGJ1ZmZlci4gU2luY2Ugd2UgY2FuCisgICAgICAgb25seSByZXR1cm4gY29uc2VjdXRpdmUgZGF0YSwgY29weSB0aGUgYW1vdW50IHRoYXQgZml0cyBhbmQgdGhlIG5leHQKKyAgICAgICBwYXJ0IGNvbWVzIGluIG5leHQgaW52b2tlLiAqLworICAgIHN0cnVjdCBoM291dCAqb3V0ID0gc3RyZWFtLT5oM291dDsKKyAgICBpZihucmVhZCArIG91dC0+d2luZGV4ID4gSDNfU0VORF9TSVpFKQorICAgICAgbnJlYWQgPSBIM19TRU5EX1NJWkUgLSBvdXQtPndpbmRleDsKKworICAgIG1lbWNweSgmb3V0LT5idWZbb3V0LT53aW5kZXhdLCBzdHJlYW0tPnVwbG9hZF9tZW0sIG5yZWFkKTsKKyAgICBvdXQtPndpbmRleCArPSBucmVhZDsKKyAgICBvdXQtPnVzZWQgKz0gbnJlYWQ7CisKKyAgICAvKiB0aGF0J3MgdGhlIGNodW5rIHdlIHJldHVybiB0byBuZ2h0dHAzICovCisgICAgdmVjWzBdLmJhc2UgPSAmb3V0LT5idWZbb3V0LT53aW5kZXhdOworICAgIHZlY1swXS5sZW4gPSBucmVhZDsKKworICAgIGlmKG91dC0+d2luZGV4ID09IEgzX1NFTkRfU0laRSkKKyAgICAgIG91dC0+d2luZGV4ID0gMDsgLyogd3JhcCAqLworICAgIHN0cmVhbS0+dXBsb2FkX21lbSArPSBucmVhZDsKKyAgICBzdHJlYW0tPnVwbG9hZF9sZW4gLT0gbnJlYWQ7CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkgeworICAgICAgc3RyZWFtLT51cGxvYWRfbGVmdCAtPSBucmVhZDsKKyAgICAgIGlmKCFzdHJlYW0tPnVwbG9hZF9sZWZ0KQorICAgICAgICAqcGZsYWdzID0gTkdIVFRQM19EQVRBX0ZMQUdfRU9GOworICAgIH0KKyAgICBIM0JVR0YoaW5mb2YoZGF0YSwgImNiX2gzX3JlYWRmdW5jdGlvbiAlemQgYnl0ZXMlcyAoYXQgJXpkIHVuYWNrZWQpXG4iLAorICAgICAgICAgICAgICAgICBucmVhZCwgKnBmbGFncyA9PSBOR0hUVFAzX0RBVEFfRkxBR19FT0Y/IiBFT0YiOiIiLAorICAgICAgICAgICAgICAgICBvdXQtPnVzZWQpKTsKKyAgfQorICBpZihzdHJlYW0tPnVwbG9hZF9kb25lICYmICFzdHJlYW0tPnVwbG9hZF9sZW4gJiYKKyAgICAgKHN0cmVhbS0+dXBsb2FkX2xlZnQgPD0gMCkpIHsKKyAgICBIM0JVR0YoaW5mb2YoZGF0YSwgIiEhISEhISEhISBjYl9oM19yZWFkZnVuY3Rpb24gc2V0cyBFT0ZcbiIpKTsKKyAgICAqcGZsYWdzID0gTkdIVFRQM19EQVRBX0ZMQUdfRU9GOworICAgIHJldHVybiAwOworICB9CisgIGVsc2UgaWYoIW5yZWFkKSB7CisgICAgcmV0dXJuIE5HSFRUUDNfRVJSX1dPVUxEQkxPQ0s7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIEluZGV4IHdoZXJlIDphdXRob3JpdHkgaGVhZGVyIGZpZWxkIHdpbGwgYXBwZWFyIGluIHJlcXVlc3QgaGVhZGVyCisgICBmaWVsZCBsaXN0LiAqLworI2RlZmluZSBBVVRIT1JJVFlfRFNUX0lEWCAzCisKK3N0YXRpYyBDVVJMY29kZSBodHRwX3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICBzaXplX3QgbmhlYWRlcjsKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBhdXRob3JpdHlfaWR4OworICBjaGFyICpoZGJ1ZiA9IChjaGFyICopbWVtOworICBjaGFyICplbmQsICpsaW5lX2VuZDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBuZ2h0dHAzX252ICpudmEgPSBOVUxMOworICBpbnQ2NF90IHN0cmVhbTNfaWQ7CisgIGludCByYzsKKyAgc3RydWN0IGgzb3V0ICpoM291dCA9IE5VTEw7CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX2JpZGlfc3RyZWFtKHFzLT5xY29ubiwgJnN0cmVhbTNfaWQsIE5VTEwpOworICBpZihyYykgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJjYW4gZ2V0IGJpZGkgc3RyZWFtcyIpOworICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgc3RyZWFtLT5zdHJlYW0zX2lkID0gc3RyZWFtM19pZDsKKyAgc3RyZWFtLT5oM3JlcSA9IFRSVUU7IC8qIHNlbmYgb2ZmISAqLworCisgIC8qIENhbGN1bGF0ZSBudW1iZXIgb2YgaGVhZGVycyBjb250YWluZWQgaW4gW21lbSwgbWVtICsgbGVuKS4gQXNzdW1lcyBhCisgICAgIGNvcnJlY3RseSBnZW5lcmF0ZWQgSFRUUCBoZWFkZXIgZmllbGQgYmxvY2suICovCisgIG5oZWFkZXIgPSAwOworICBmb3IoaSA9IDE7IGkgPCBsZW47ICsraSkgeworICAgIGlmKGhkYnVmW2ldID09ICdcbicgJiYgaGRidWZbaSAtIDFdID09ICdccicpIHsKKyAgICAgICsrbmhlYWRlcjsKKyAgICAgICsraTsKKyAgICB9CisgIH0KKyAgaWYobmhlYWRlciA8IDIpCisgICAgZ290byBmYWlsOworCisgIC8qIFdlIGNvdW50ZWQgYWRkaXRpb25hbCAyIFxyXG4gaW4gdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUuIFdlIG5lZWQgMworICAgICBuZXcgaGVhZGVyczogOm1ldGhvZCwgOnBhdGggYW5kIDpzY2hlbWUuIFRoZXJlZm9yZSB3ZSBuZWVkIG9uZQorICAgICBtb3JlIHNwYWNlLiAqLworICBuaGVhZGVyICs9IDE7CisgIG52YSA9IG1hbGxvYyhzaXplb2YobmdodHRwM19udikgKiBuaGVhZGVyKTsKKyAgaWYoIW52YSkgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogRXh0cmFjdCA6bWV0aG9kLCA6cGF0aCBmcm9tIHJlcXVlc3QgbGluZQorICAgICBXZSBkbyBsaW5lIGVuZGluZ3Mgd2l0aCBDUkxGIHNvIGNoZWNraW5nIGZvciBDUiBpcyBlbm91Z2ggKi8KKyAgbGluZV9lbmQgPSBtZW1jaHIoaGRidWYsICdccicsIGxlbik7CisgIGlmKCFsaW5lX2VuZCkgeworICAgIHJlc3VsdCA9IENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICBnb3RvIGZhaWw7CisgIH0KKworICAvKiBNZXRob2QgZG9lcyBub3QgY29udGFpbiBzcGFjZXMgKi8KKyAgZW5kID0gbWVtY2hyKGhkYnVmLCAnICcsIGxpbmVfZW5kIC0gaGRidWYpOworICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVswXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOm1ldGhvZCI7CisgIG52YVswXS5uYW1lbGVuID0gc3RybGVuKChjaGFyICopbnZhWzBdLm5hbWUpOworICBudmFbMF0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICBudmFbMF0udmFsdWVsZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisgIG52YVswXS5mbGFncyA9IE5HSFRUUDNfTlZfRkxBR19OT05FOworCisgIGhkYnVmID0gZW5kICsgMTsKKworICAvKiBQYXRoIG1heSBjb250YWluIHNwYWNlcyBzbyBzY2FuIGJhY2t3YXJkcyAqLworICBlbmQgPSBOVUxMOworICBmb3IoaSA9IChzaXplX3QpKGxpbmVfZW5kIC0gaGRidWYpOyBpOyAtLWkpIHsKKyAgICBpZihoZGJ1ZltpIC0gMV0gPT0gJyAnKSB7CisgICAgICBlbmQgPSAmaGRidWZbaSAtIDFdOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGlmKCFlbmQgfHwgZW5kID09IGhkYnVmKQorICAgIGdvdG8gZmFpbDsKKyAgbnZhWzFdLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6cGF0aCI7CisgIG52YVsxXS5uYW1lbGVuID0gc3RybGVuKChjaGFyICopbnZhWzFdLm5hbWUpOworICBudmFbMV0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICBudmFbMV0udmFsdWVsZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisgIG52YVsxXS5mbGFncyA9IE5HSFRUUDNfTlZfRkxBR19OT05FOworCisgIG52YVsyXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOnNjaGVtZSI7CisgIG52YVsyXS5uYW1lbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLm5hbWUpOworICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgIG52YVsyXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopImh0dHBzIjsKKyAgZWxzZQorICAgIG52YVsyXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopImh0dHAiOworICBudmFbMl0udmFsdWVsZW4gPSBzdHJsZW4oKGNoYXIgKiludmFbMl0udmFsdWUpOworICBudmFbMl0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworCisgIGF1dGhvcml0eV9pZHggPSAwOworICBpID0gMzsKKyAgd2hpbGUoaSA8IG5oZWFkZXIpIHsKKyAgICBzaXplX3QgaGxlbjsKKworICAgIGhkYnVmID0gbGluZV9lbmQgKyAyOworCisgICAgLyogY2hlY2sgZm9yIG5leHQgQ1IsIGJ1dCBvbmx5IHdpdGhpbiB0aGUgcGllY2Ugb2YgZGF0YSBsZWZ0IGluIHRoZSBnaXZlbgorICAgICAgIGJ1ZmZlciAqLworICAgIGxpbmVfZW5kID0gbWVtY2hyKGhkYnVmLCAnXHInLCBsZW4gLSAoaGRidWYgLSAoY2hhciAqKW1lbSkpOworICAgIGlmKCFsaW5lX2VuZCB8fCAobGluZV9lbmQgPT0gaGRidWYpKQorICAgICAgZ290byBmYWlsOworCisgICAgLyogaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgbm90IHN1cHBvcnRlZCAqLworICAgIGlmKCpoZGJ1ZiA9PSAnICcgfHwgKmhkYnVmID09ICdcdCcpCisgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IoZW5kID0gaGRidWY7IGVuZCA8IGxpbmVfZW5kICYmICplbmQgIT0gJzonOyArK2VuZCkKKyAgICAgIDsKKyAgICBpZihlbmQgPT0gaGRidWYgfHwgZW5kID09IGxpbmVfZW5kKQorICAgICAgZ290byBmYWlsOworICAgIGhsZW4gPSBlbmQgLSBoZGJ1ZjsKKworICAgIGlmKGhsZW4gPT0gNCAmJiBzdHJuY2FzZWNvbXBhcmUoImhvc3QiLCBoZGJ1ZiwgNCkpIHsKKyAgICAgIGF1dGhvcml0eV9pZHggPSBpOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6YXV0aG9yaXR5IjsKKyAgICAgIG52YVtpXS5uYW1lbGVuID0gc3RybGVuKChjaGFyICopbnZhW2ldLm5hbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG52YVtpXS5uYW1lbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgICAgLyogTG93ZXIgY2FzZSB0aGUgaGVhZGVyIG5hbWUgZm9yIEhUVFAvMyAqLworICAgICAgQ3VybF9zdHJudG9sb3dlcigoY2hhciAqKWhkYnVmLCBoZGJ1ZiwgbnZhW2ldLm5hbWVsZW4pOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgIH0KKyAgICBudmFbaV0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKyAgICBoZGJ1ZiA9IGVuZCArIDE7CisgICAgd2hpbGUoKmhkYnVmID09ICcgJyB8fCAqaGRidWYgPT0gJ1x0JykKKyAgICAgICsraGRidWY7CisgICAgZW5kID0gbGluZV9lbmQ7CisKKyNpZiAwIC8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGluIG1vcmUgb3IgbGVzcyBsaWtlIHRoaXMgKi8KKyAgICBzd2l0Y2goaW5zcGVjdF9oZWFkZXIoKGNvbnN0IGNoYXIgKiludmFbaV0ubmFtZSwgbnZhW2ldLm5hbWVsZW4sIGhkYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSBoZGJ1ZikpIHsKKyAgICBjYXNlIEhFQURFUklOU1RfSUdOT1JFOgorICAgICAgLyogc2tpcCBoZWFkZXIgZmllbGRzIHByb2hpYml0ZWQgYnkgSFRUUC8yIHNwZWNpZmljYXRpb24uICovCisgICAgICAtLW5oZWFkZXI7CisgICAgICBjb250aW51ZTsKKyAgICBjYXNlIEhFQURFUklOU1RfVEVfVFJBSUxFUlM6CisgICAgICBudmFbaV0udmFsdWUgPSAodWludDhfdCopInRyYWlsZXJzIjsKKyAgICAgIG52YVtpXS52YWx1ZV9sZW4gPSBzaXplb2YoInRyYWlsZXJzIikgLSAxOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgICBudmFbaV0udmFsdWVfbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgIH0KKyNlbmRpZgorICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgbnZhW2ldLnZhbHVlbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgIG52YVtpXS5mbGFncyA9IE5HSFRUUDNfTlZfRkxBR19OT05FOworCisgICAgKytpOworICB9CisKKyAgLyogOmF1dGhvcml0eSBtdXN0IGNvbWUgYmVmb3JlIG5vbi1wc2V1ZG8gaGVhZGVyIGZpZWxkcyAqLworICBpZihhdXRob3JpdHlfaWR4ICE9IDAgJiYgYXV0aG9yaXR5X2lkeCAhPSBBVVRIT1JJVFlfRFNUX0lEWCkgeworICAgIG5naHR0cDNfbnYgYXV0aG9yaXR5ID0gbnZhW2F1dGhvcml0eV9pZHhdOworICAgIGZvcihpID0gYXV0aG9yaXR5X2lkeDsgaSA+IEFVVEhPUklUWV9EU1RfSURYOyAtLWkpIHsKKyAgICAgIG52YVtpXSA9IG52YVtpIC0gMV07CisgICAgfQorICAgIG52YVtpXSA9IGF1dGhvcml0eTsKKyAgfQorCisgIC8qIFdhcm4gc3RyZWFtIG1heSBiZSByZWplY3RlZCBpZiBjdW11bGF0aXZlIGxlbmd0aCBvZiBoZWFkZXJzIGlzIHRvbworICAgICBsYXJnZS4gKi8KKyNkZWZpbmUgTUFYX0FDQyA2MDAwMCAgLyogPDY0S0IgdG8gYWNjb3VudCBmb3Igc29tZSBvdmVyaGVhZCAqLworICB7CisgICAgc2l6ZV90IGFjYyA9IDA7CisgICAgZm9yKGkgPSAwOyBpIDwgbmhlYWRlcjsgKytpKQorICAgICAgYWNjICs9IG52YVtpXS5uYW1lbGVuICsgbnZhW2ldLnZhbHVlbGVuOworCisgICAgaWYoYWNjID4gTUFYX0FDQykgeworICAgICAgaW5mb2YoZGF0YSwgImh0dHBfcmVxdWVzdDogV2FybmluZzogVGhlIGN1bXVsYXRpdmUgbGVuZ3RoIG9mIGFsbCAiCisgICAgICAgICAgICAiaGVhZGVycyBleGNlZWRzICV6dSBieXRlcyBhbmQgdGhhdCBjb3VsZCBjYXVzZSB0aGUgIgorICAgICAgICAgICAgInN0cmVhbSB0byBiZSByZWplY3RlZC5cbiIsIE1BWF9BQ0MpOworICAgIH0KKyAgfQorCisgIHN3aXRjaChkYXRhLT5zZXQuaHR0cHJlcSkgeworICBjYXNlIEhUVFBSRVFfUE9TVDoKKyAgY2FzZSBIVFRQUkVRX1BPU1RfRk9STToKKyAgY2FzZSBIVFRQUkVRX1BPU1RfTUlNRToKKyAgY2FzZSBIVFRQUkVRX1BVVDogeworICAgIG5naHR0cDNfZGF0YV9yZWFkZXIgZGF0YV9yZWFkZXI7CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgIGVsc2UKKyAgICAgIC8qIGRhdGEgc2VuZGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRhdGEgYW1vdW50IHVwIGZyb250ICovCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gLTE7IC8qIHVua25vd24sIGJ1dCBub3QgemVybyAqLworCisgICAgZGF0YV9yZWFkZXIucmVhZF9kYXRhID0gY2JfaDNfcmVhZGZ1bmN0aW9uOworCisgICAgaDNvdXQgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBoM291dCksIDEpOworICAgIGlmKCFoM291dCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgc3RyZWFtLT5oM291dCA9IGgzb3V0OworCisgICAgcmMgPSBuZ2h0dHAzX2Nvbm5fc3VibWl0X3JlcXVlc3QocXMtPmgzY29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG52YSwgbmhlYWRlciwgJmRhdGFfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmRhdGEpOworICAgIGlmKHJjKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICBkZWZhdWx0OgorICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSAwOyAvKiBub3RoaW5nIGxlZnQgdG8gc2VuZCAqLworICAgIHJjID0gbmdodHRwM19jb25uX3N1Ym1pdF9yZXF1ZXN0KHFzLT5oM2Nvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudmEsIG5oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogbm8gYm9keSEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhKTsKKyAgICBpZihyYykgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKworICBDdXJsX3NhZmVmcmVlKG52YSk7CisKKyAgaW5mb2YoZGF0YSwgIlVzaW5nIEhUVFAvMyBTdHJlYW0gSUQ6ICV4IChlYXN5IGhhbmRsZSAlcClcbiIsCisgICAgICAgIHN0cmVhbTNfaWQsICh2b2lkICopZGF0YSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworCitmYWlsOgorICBmcmVlKG52YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CitzdGF0aWMgc3NpemVfdCBuZ2gzX3N0cmVhbV9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIHNzaXplX3Qgc2VudDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdHJlYW0tPmgzcmVxKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gaHR0cF9yZXF1ZXN0KGNvbm4sIG1lbSwgbGVuKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbnQgPSBsZW47CisgIH0KKyAgZWxzZSB7CisgICAgSDNCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJuZ2gzX3N0cmVhbV9zZW5kKCkgd2FudHMgdG8gc2VuZCAlemQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgIGxlbikpOworICAgIGlmKCFzdHJlYW0tPnVwbG9hZF9sZW4pIHsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX21lbSA9IG1lbTsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlbiA9IGxlbjsKKyAgICAgICh2b2lkKW5naHR0cDNfY29ubl9yZXN1bWVfc3RyZWFtKHFzLT5oM2Nvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCk7CisgICAgICBzZW50ID0gbGVuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIGlmKG5nX2ZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKmN1cmxjb2RlID0gQ1VSTEVfT0s7CisgIHJldHVybiBzZW50OworfQorCitzdGF0aWMgdm9pZCBuZ19oYXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHRlbXBpbmRleCkKK3sKKyAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBuZ2gzX3N0cmVhbV9yZWN2OworICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IG5naDNfc3RyZWFtX3NlbmQ7CisgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX2h0dHAzOworICBjb25uLT5iaXRzLm11bHRpcGxleCA9IFRSVUU7IC8qIGF0IGxlYXN0IHBvdGVudGlhbGx5IG11bHRpcGxleGVkICovCisgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMzA7CisgIGNvbm4tPmJ1bmRsZS0+bXVsdGl1c2UgPSBCVU5ETEVfTVVMVElQTEVYOworICBjb25uLT5xdWljID0gJmNvbm4tPmhlcXVpY1t0ZW1waW5kZXhdOworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIm5ndGNwMiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIVxuIikpOworfQorCisvKgorICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGNvbm5lY3Rpb24gYXR0ZW1wdHMgZ29pbmcgb24gaW4gcGFyYWxsZWwuCisgKi8KK0NVUkxjb2RlIEN1cmxfcXVpY19pc19jb25uZWN0ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9ICZjb25uLT5oZXF1aWNbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT50ZW1wc29ja1tzb2NraW5kZXhdOworCisgIHJlc3VsdCA9IG5nX3Byb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgcmVzdWx0ID0gbmdfZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihuZ3RjcDJfY29ubl9nZXRfaGFuZHNoYWtlX2NvbXBsZXRlZChxcy0+cWNvbm4pKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIG5nX2hhc19jb25uZWN0ZWQoY29ubiwgc29ja2luZGV4KTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBuZ19wcm9jZXNzX2luZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpCit7CisgIHNzaXplX3QgcmVjdmQ7CisgIGludCBydjsKKyAgdWludDhfdCBidWZbNjU1MzZdOworICBzaXplX3QgYnVmc2l6ZSA9IHNpemVvZihidWYpOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSByZW1vdGVfYWRkcjsKKyAgc29ja2xlbl90IHJlbW90ZV9hZGRybGVuOworICBuZ3RjcDJfcGF0aCBwYXRoOworICBuZ3RjcDJfdHN0YW1wIHRzID0gdGltZXN0YW1wKCk7CisKKyAgZm9yKDs7KSB7CisgICAgcmVtb3RlX2FkZHJsZW4gPSBzaXplb2YocmVtb3RlX2FkZHIpOworICAgIHdoaWxlKChyZWN2ZCA9IHJlY3Zmcm9tKHNvY2tmZCwgYnVmLCBidWZzaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmcmVtb3RlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlbW90ZV9hZGRybGVuKSkgPT0gLTEgJiYKKyAgICAgICAgICBTT0NLRVJSTk8gPT0gRUlOVFIpCisgICAgICA7CisgICAgaWYocmVjdmQgPT0gLTEpIHsKKyAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFQUdBSU4gfHwgU09DS0VSUk5PID09IEVXT1VMREJMT0NLKQorICAgICAgICBicmVhazsKKworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIm5ndGNwMjogcmVjdmZyb20oKSB1bmV4cGVjdGVkbHkgcmV0dXJuZWQgJWQiLCByZWN2ZCk7CisgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICB9CisKKyAgICBuZ3RjcDJfYWRkcl9pbml0KCZwYXRoLmxvY2FsLCAodWludDhfdCAqKSZxcy0+bG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIHFzLT5sb2NhbF9hZGRybGVuLCBOVUxMKTsKKyAgICBuZ3RjcDJfYWRkcl9pbml0KCZwYXRoLnJlbW90ZSwgKHVpbnQ4X3QgKikmcmVtb3RlX2FkZHIsIHJlbW90ZV9hZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBydiA9IG5ndGNwMl9jb25uX3JlYWRfcGt0KHFzLT5xY29ubiwgJnBhdGgsIGJ1ZiwgcmVjdmQsIHRzKTsKKyAgICBpZihydiAhPSAwKSB7CisgICAgICAvKiBUT0RPIFNlbmQgQ09OTkVDVElPTl9DTE9TRSBpZiBwb3NzaWJsZSAqLworICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgfQorICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbmdfZmx1c2hfZWdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBpbnQgcnY7CisgIHNzaXplX3Qgc2VudDsKKyAgc3NpemVfdCBvdXRsZW47CisgIHVpbnQ4X3Qgb3V0W05HVENQMl9NQVhfUEtUTEVOX0lQVjRdOworICBzaXplX3QgcGt0bGVuOworICBuZ3RjcDJfcGF0aF9zdG9yYWdlIHBzOworICBuZ3RjcDJfdHN0YW1wIHRzID0gdGltZXN0YW1wKCk7CisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHJlbW90ZV9hZGRyOworICBuZ3RjcDJfdHN0YW1wIGV4cGlyeTsKKyAgbmd0Y3AyX2R1cmF0aW9uIHRpbWVvdXQ7CisgIGludDY0X3Qgc3RyZWFtX2lkOworICBzc2l6ZV90IHZlY2NudDsKKyAgaW50IGZpbjsKKyAgbmdodHRwM192ZWMgdmVjWzE2XTsKKyAgc3NpemVfdCBuZGF0YWxlbjsKKworICBzd2l0Y2gocXMtPmxvY2FsX2FkZHIuc3NfZmFtaWx5KSB7CisgIGNhc2UgQUZfSU5FVDoKKyAgICBwa3RsZW4gPSBOR1RDUDJfTUFYX1BLVExFTl9JUFY0OworICAgIGJyZWFrOworI2lmZGVmIEVOQUJMRV9JUFY2CisgIGNhc2UgQUZfSU5FVDY6CisgICAgcGt0bGVuID0gTkdUQ1AyX01BWF9QS1RMRU5fSVBWNjsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIGFzc2VydCgwKTsKKyAgfQorCisgIHJ2ID0gbmd0Y3AyX2Nvbm5faGFuZGxlX2V4cGlyeShxcy0+cWNvbm4sIHRzKTsKKyAgaWYocnYgIT0gMCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl9oYW5kbGVfZXhwaXJ5IHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBuZ3RjcDJfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgfQorCisgIG5ndGNwMl9wYXRoX3N0b3JhZ2VfemVybygmcHMpOworCisgIGZvcig7OykgeworICAgIG91dGxlbiA9IC0xOworICAgIGlmKHFzLT5oM2Nvbm4gJiYgbmd0Y3AyX2Nvbm5fZ2V0X21heF9kYXRhX2xlZnQocXMtPnFjb25uKSkgeworICAgICAgdmVjY250ID0gbmdodHRwM19jb25uX3dyaXRldl9zdHJlYW0ocXMtPmgzY29ubiwgJnN0cmVhbV9pZCwgJmZpbiwgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZlYykgLyBzaXplb2YodmVjWzBdKSk7CisgICAgICBpZih2ZWNjbnQgPCAwKSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fd3JpdGV2X3N0cmVhbSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IoKGludCl2ZWNjbnQpKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlIGlmKHZlY2NudCA+IDApIHsKKyAgICAgICAgb3V0bGVuID0KKyAgICAgICAgICBuZ3RjcDJfY29ubl93cml0ZXZfc3RyZWFtKHFzLT5xY29ubiwgJnBzLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIHBrdGxlbiwgJm5kYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdUQ1AyX1dSSVRFX1NUUkVBTV9GTEFHX01PUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1faWQsIGZpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBuZ3RjcDJfdmVjICopdmVjLCB2ZWNjbnQsIHRzKTsKKyAgICAgICAgaWYob3V0bGVuID09IDApIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihvdXRsZW4gPCAwKSB7CisgICAgICAgICAgaWYob3V0bGVuID09IE5HVENQMl9FUlJfU1RSRUFNX0RBVEFfQkxPQ0tFRCB8fAorICAgICAgICAgICAgIG91dGxlbiA9PSBOR1RDUDJfRVJSX1NUUkVBTV9TSFVUX1dSKSB7CisgICAgICAgICAgICBydiA9IG5naHR0cDNfY29ubl9ibG9ja19zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtX2lkKTsKKyAgICAgICAgICAgIGlmKHJ2ICE9IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIm5naHR0cDNfY29ubl9ibG9ja19zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYob3V0bGVuID09IE5HVENQMl9FUlJfV1JJVEVfU1RSRUFNX01PUkUpIHsKKyAgICAgICAgICAgIGFzc2VydChuZGF0YWxlbiA+IDApOworICAgICAgICAgICAgcnYgPSBuZ2h0dHAzX2Nvbm5fYWRkX3dyaXRlX29mZnNldChxcy0+aDNjb25uLCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kYXRhbGVuKTsKKyAgICAgICAgICAgIGlmKHJ2ICE9IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIm5naHR0cDNfY29ubl9hZGRfd3JpdGVfb2Zmc2V0IHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgbmdodHRwM19zdHJlcnJvcihydikpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl93cml0ZXZfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5ndGNwMl9zdHJlcnJvcigoaW50KW91dGxlbikpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYobmRhdGFsZW4gPj0gMCkgeworICAgICAgICAgIHJ2ID0gbmdodHRwM19jb25uX2FkZF93cml0ZV9vZmZzZXQocXMtPmgzY29ubiwgc3RyZWFtX2lkLCBuZGF0YWxlbik7CisgICAgICAgICAgaWYocnYgIT0gMCkgeworICAgICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICJuZ2h0dHAzX2Nvbm5fYWRkX3dyaXRlX29mZnNldCByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYob3V0bGVuIDwgMCkgeworICAgICAgb3V0bGVuID0gbmd0Y3AyX2Nvbm5fd3JpdGVfcGt0KHFzLT5xY29ubiwgJnBzLnBhdGgsIG91dCwgcGt0bGVuLCB0cyk7CisgICAgICBpZihvdXRsZW4gPCAwKSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl93cml0ZV9wa3QgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBuZ3RjcDJfc3RyZXJyb3IoKGludClvdXRsZW4pKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBpZihvdXRsZW4gPT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbWVtY3B5KCZyZW1vdGVfYWRkciwgcHMucGF0aC5yZW1vdGUuYWRkciwgcHMucGF0aC5yZW1vdGUuYWRkcmxlbik7CisgICAgd2hpbGUoKHNlbnQgPSBzZW5kKHNvY2tmZCwgb3V0LCBvdXRsZW4sIDApKSA9PSAtMSAmJgorICAgICAgICAgIFNPQ0tFUlJOTyA9PSBFSU5UUikKKyAgICAgIDsKKworICAgIGlmKHNlbnQgPT0gLTEpIHsKKyAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFQUdBSU4gfHwgU09DS0VSUk5PID09IEVXT1VMREJMT0NLKSB7CisgICAgICAgIC8qIFRPRE8gQ2FjaGUgcGFja2V0ICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJzZW5kKCkgcmV0dXJuZWQgJXpkIChlcnJubyAlZClcbiIsIHNlbnQsCisgICAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGV4cGlyeSA9IG5ndGNwMl9jb25uX2dldF9leHBpcnkocXMtPnFjb25uKTsKKyAgaWYoZXhwaXJ5ICE9IFVJTlQ2NF9NQVgpIHsKKyAgICBpZihleHBpcnkgPD0gdHMpIHsKKyAgICAgIHRpbWVvdXQgPSBOR1RDUDJfTUlMTElTRUNPTkRTOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRpbWVvdXQgPSBleHBpcnkgLSB0czsKKyAgICB9CisgICAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgdGltZW91dCAvIE5HVENQMl9NSUxMSVNFQ09ORFMsIEVYUElSRV9RVUlDKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIHRyYW5zZmVyLmM6ZG9uZV9zZW5kaW5nIHdoZW4gd2Ugc3RvcCBIVFRQLzMgdXBsb2FkaW5nLgorICovCitDVVJMY29kZSBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoY29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAzKSB7CisgICAgLyogb25seSBmb3IgSFRUUC8zIHRyYW5zZmVycyAqLworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgICAgc3RyZWFtLT51cGxvYWRfZG9uZSA9IFRSVUU7CisgICAgKHZvaWQpbmdodHRwM19jb25uX3Jlc3VtZV9zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIGh0dHAuYzpDdXJsX2h0dHBfZG9uZSB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuCisgKi8KK3ZvaWQgQ3VybF9xdWljX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsKKyAgaWYoZGF0YS0+Y29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAzKSB7CisgICAgLyogb25seSBmb3IgSFRUUC8zIHRyYW5zZmVycyAqLworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICAgIEN1cmxfc2FmZWZyZWUoc3RyZWFtLT5vdmVyZmxvd19idWYpOworICB9Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRhdGFfcGVuZGluZyB0byBrbm93IGlmIHdlIHNob3VsZCBrZWVwIGxvb3BpbmcKKyAqIHRvIHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKi8KK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQoreworICAvKiBXZSBtYXkgaGF2ZSByZWNlaXZlZCBtb3JlIGRhdGEgdGhhbiB3ZSdyZSBhYmxlIHRvIGhvbGQgaW4gdGhlIHJlY2VpdmUKKyAgICAgYnVmZmVyIGFuZCBhbGxvY2F0ZWQgYW4gb3ZlcmZsb3cgYnVmZmVyLiBTaW5jZSBpdCdzIHBvc3NpYmxlIHRoYXQKKyAgICAgdGhlcmUncyBubyBtb3JlIGRhdGEgY29taW5nIG9uIHRoZSBzb2NrZXQsIHdlIG5lZWQgdG8ga2VlcCByZWFkaW5nCisgICAgIHVudGlsIHRoZSBvdmVyZmxvdyBidWZmZXIgaXMgZW1wdHkuICovCisgIGNvbnN0IHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICByZXR1cm4gc3RyZWFtLT5vdmVyZmxvd19idWZsZW4gPiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkNDQyZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVlFVSUNfTkdUQ1AyX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVlFVSUNfTkdUQ1AyX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9OR1RDUDIKKworI2luY2x1ZGUgPG5ndGNwMi9uZ3RjcDIuaD4KKyNpbmNsdWRlIDxuZ2h0dHAzL25naHR0cDMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorCitzdHJ1Y3QgcXVpY19oYW5kc2hha2UgeworICBjaGFyICpidWY7ICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciAqLworICBzaXplX3QgYWxsb2NsZW47IC8qIHNpemUgb2YgYWxsb2NhdGlvbiAqLworICBzaXplX3QgbGVuOyAgICAgIC8qIHNpemUgb2YgY29udGVudCBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IG5yZWFkOyAgICAvKiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVhZCAqLworfTsKKworc3RydWN0IHF1aWNzb2NrZXQgeworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47IC8qIHBvaW50IGJhY2sgdG8gdGhlIGNvbm5lY3Rpb24gKi8KKyAgbmd0Y3AyX2Nvbm4gKnFjb25uOworICBuZ3RjcDJfY2lkIGRjaWQ7CisgIG5ndGNwMl9jaWQgc2NpZDsKKyAgdWludDMyX3QgdmVyc2lvbjsKKyAgbmd0Y3AyX3NldHRpbmdzIHNldHRpbmdzOworICBTU0xfQ1RYICpzc2xjdHg7CisgIFNTTCAqc3NsOworICBzdHJ1Y3QgcXVpY19oYW5kc2hha2UgY3J5cHRvX2RhdGFbM107CisgIC8qIHRoZSBsYXN0IFRMUyBhbGVydCBkZXNjcmlwdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIGxvY2FsIGVuZHBvaW50ICovCisgIHVpbnQ4X3QgdGxzX2FsZXJ0OworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbF9hZGRyOworICBzb2NrbGVuX3QgbG9jYWxfYWRkcmxlbjsKKworICBuZ2h0dHAzX2Nvbm4gKmgzY29ubjsKKyAgbmdodHRwM19jb25uX3NldHRpbmdzIGgzc2V0dGluZ3M7Cit9OworCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX05HVENQMl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL3F1aWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWJhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuYwpAQCAtMCwwICsxLDgwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX1FVSUNIRQorI2luY2x1ZGUgPHF1aWNoZS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInF1aWMuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgREVCVUdfSFRUUDMKKy8qICNkZWZpbmUgREVCVUdfUVVJQ0hFICovCisjaWZkZWYgREVCVUdfSFRUUDMKKyNkZWZpbmUgSDNCVUdGKHgpIHgKKyNlbHNlCisjZGVmaW5lIEgzQlVHRih4KSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIFFVSUNfTUFYX1NUUkVBTVMgKDI1NioxMDI0KQorI2RlZmluZSBRVUlDX01BWF9EQVRBICgxKjEwMjQqMTAyNCkKKyNkZWZpbmUgUVVJQ19JRExFX1RJTUVPVVQgKDYwICogMTAwMCkgLyogbWlsbGlzZWNvbmRzICovCisKK3N0YXRpYyBDVVJMY29kZSBwcm9jZXNzX2luZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKTsKKworc3RhdGljIENVUkxjb2RlIGZsdXNoX2VncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpOworCitzdGF0aWMgQ1VSTGNvZGUgaHR0cF9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKK3N0YXRpYyBDdXJsX3JlY3YgaDNfc3RyZWFtX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIGgzX3N0cmVhbV9zZW5kOworCisKK3N0YXRpYyBpbnQgcXVpY2hlX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOworICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIC8qIGluIGEgSFRUUC8yIGNvbm5lY3Rpb24gd2UgY2FuIGJhc2ljYWxseSBhbHdheXMgZ2V0IGEgZnJhbWUgc28gd2Ugc2hvdWxkCisgICAgIGFsd2F5cyBiZSByZWFkeSBmb3Igb25lICovCisgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICAvKiB3ZSdyZSBzdGlsbCB1cGxvYWRpbmcgb3IgdGhlIEhUVFAvMiBsYXllciB3YW50cyB0byBzZW5kIGRhdGEgKi8KKyAgaWYoKGstPmtlZXBvbiAmIChLRUVQX1NFTkR8S0VFUF9TRU5EX1BBVVNFKSkgPT0gS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworc3RhdGljIGludCBxdWljaGVfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgcmV0dXJuIHF1aWNoZV9nZXRzb2NrKChzdHJ1Y3QgY29ubmVjdGRhdGEgKiljb25uLCBzb2Nrcyk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBxdWljaGVfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKKyAgcXVpY2hlX2gzX2NvbmZpZ19mcmVlKHFzLT5oM2NvbmZpZyk7CisgIHF1aWNoZV9oM19jb25uX2ZyZWUocXMtPmgzYyk7CisgIHF1aWNoZV9jb25maWdfZnJlZShxcy0+Y2ZnKTsKKyAgcXVpY2hlX2Nvbm5fZnJlZShxcy0+Y29ubik7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBxdWljaGVfY29ubmNoZWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hlY2tzX3RvX3BlcmZvcm0pCit7CisgICh2b2lkKWNvbm47CisgICh2b2lkKWNoZWNrc190b19wZXJmb3JtOworICByZXR1cm4gQ09OTlJFU1VMVF9OT05FOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcXVpY2hlX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgIHN0cmVhbS0+aDNyZXEgPSBGQUxTRTsgLyogbm90IHNlbnQgKi8KKyAgcmV0dXJuIEN1cmxfaHR0cChjb25uLCBkb25lKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAzID0geworICAiSFRUUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcXVpY2hlX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBxdWljaGVfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgcXVpY2hlX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgcXVpY2hlX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcXVpY2hlX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIHF1aWNoZV9jb25uY2hlY2ssICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0hUVFBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX1NTTCB8IFBST1RPUFRfU1RSRUFNICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisjaWZkZWYgREVCVUdfUVVJQ0hFCitzdGF0aWMgdm9pZCBxdWljaGVfZGVidWdfbG9nKGNvbnN0IGNoYXIgKmxpbmUsIHZvaWQgKmFyZ3ApCit7CisgICh2b2lkKWFyZ3A7CisgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGxpbmUpOworfQorI2VuZGlmCisKK0NVUkxjb2RlIEN1cmxfcXVpY19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAmY29ubi0+aGVxdWljW3NvY2tpbmRleF07CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisjaWZkZWYgREVCVUdfUVVJQ0hFCisgIC8qIGluaXRpYWxpemUgZGVidWcgbG9nIGNhbGxiYWNrIG9ubHkgb25jZSAqLworICBzdGF0aWMgaW50IGRlYnVnX2xvZ19pbml0ID0gMDsKKyAgaWYoIWRlYnVnX2xvZ19pbml0KSB7CisgICAgcXVpY2hlX2VuYWJsZV9kZWJ1Z19sb2dnaW5nKHF1aWNoZV9kZWJ1Z19sb2csIE5VTEwpOworICAgIGRlYnVnX2xvZ19pbml0ID0gMTsKKyAgfQorI2VuZGlmCisKKyAgKHZvaWQpYWRkcjsKKyAgKHZvaWQpYWRkcmxlbjsKKworICBxcy0+Y2ZnID0gcXVpY2hlX2NvbmZpZ19uZXcoUVVJQ0hFX1BST1RPQ09MX1ZFUlNJT04pOworICBpZighcXMtPmNmZykgeworICAgIGZhaWxmKGRhdGEsICJjYW4ndCBjcmVhdGUgcXVpY2hlIGNvbmZpZyIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIHF1aWNoZV9jb25maWdfc2V0X21heF9pZGxlX3RpbWVvdXQocXMtPmNmZywgUVVJQ19JRExFX1RJTUVPVVQpOworICBxdWljaGVfY29uZmlnX3NldF9pbml0aWFsX21heF9kYXRhKHFzLT5jZmcsIFFVSUNfTUFYX0RBVEEpOworICBxdWljaGVfY29uZmlnX3NldF9pbml0aWFsX21heF9zdHJlYW1fZGF0YV9iaWRpX2xvY2FsKHFzLT5jZmcsIFFVSUNfTUFYX0RBVEEpOworICBxdWljaGVfY29uZmlnX3NldF9pbml0aWFsX21heF9zdHJlYW1fZGF0YV9iaWRpX3JlbW90ZShxcy0+Y2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUlDX01BWF9EQVRBKTsKKyAgcXVpY2hlX2NvbmZpZ19zZXRfaW5pdGlhbF9tYXhfc3RyZWFtX2RhdGFfdW5pKHFzLT5jZmcsIFFVSUNfTUFYX0RBVEEpOworICBxdWljaGVfY29uZmlnX3NldF9pbml0aWFsX21heF9zdHJlYW1zX2JpZGkocXMtPmNmZywgUVVJQ19NQVhfU1RSRUFNUyk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbXNfdW5pKHFzLT5jZmcsIFFVSUNfTUFYX1NUUkVBTVMpOworICBxdWljaGVfY29uZmlnX3NldF9hcHBsaWNhdGlvbl9wcm90b3MocXMtPmNmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUlDSEVfSDNfQVBQTElDQVRJT05fUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoUVVJQ0hFX0gzX0FQUExJQ0FUSU9OX1BST1RPQ09MKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxKTsKKworICByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgcXMtPnNjaWQsIHNpemVvZihxcy0+c2NpZCkpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihnZXRlbnYoIlNTTEtFWUxPR0ZJTEUiKSkKKyAgICBxdWljaGVfY29uZmlnX2xvZ19rZXlzKHFzLT5jZmcpOworCisgIHFzLT5jb25uID0gcXVpY2hlX2Nvbm5lY3QoY29ubi0+aG9zdC5uYW1lLCAoY29uc3QgdWludDhfdCAqKSBxcy0+c2NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocXMtPnNjaWQpLCBxcy0+Y2ZnKTsKKyAgaWYoIXFzLT5jb25uKSB7CisgICAgZmFpbGYoZGF0YSwgImNhbid0IGNyZWF0ZSBxdWljaGUgY29ubmVjdGlvbiIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmVzdWx0ID0gZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBzdG9yZSB0aGUgdXNlZCBhZGRyZXNzIGFzIGEgc3RyaW5nICovCisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKWFkZHIsIGFkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByaW1hcnlfaXAsICZjb25uLT5wcmltYXJ5X3BvcnQpKSB7CisgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyAgICBmYWlsZihkYXRhLCAic3NyZW0gaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBTT0NLRVJSTk8sIEN1cmxfc3RyZXJyb3IoU09DS0VSUk5PLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyAgfQorICBtZW1jcHkoY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnByaW1hcnlfaXAsIE1BWF9JUEFEUl9MRU4pOworICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKKworICAvKiBmb3IgY29ubmVjdGlvbiByZXVzZSBwdXJwb3NlczogKi8KKyAgY29ubi0+c3NsW0ZJUlNUU09DS0VUXS5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworCisgIGluZm9mKGRhdGEsICJTZW50IFFVSUMgY2xpZW50IEluaXRpYWwsIEFMUE46ICVzXG4iLAorICAgICAgICBRVUlDSEVfSDNfQVBQTElDQVRJT05fUFJPVE9DT0wgKyAxKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBxdWljaGVfaGFzX2Nvbm5lY3RlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcGluZGV4KQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWMgPSAmY29ubi0+aGVxdWljW3RlbXBpbmRleF07CisKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gaDNfc3RyZWFtX3JlY3Y7CisgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGgzX3N0cmVhbV9zZW5kOworICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9odHRwMzsKKyAgY29ubi0+Yml0cy5tdWx0aXBsZXggPSBUUlVFOyAvKiBhdCBsZWFzdCBwb3RlbnRpYWxseSBtdWx0aXBsZXhlZCAqLworICBjb25uLT5odHRwdmVyc2lvbiA9IDMwOworICBjb25uLT5idW5kbGUtPm11bHRpdXNlID0gQlVORExFX01VTFRJUExFWDsKKworICBxcy0+aDNjb25maWcgPSBxdWljaGVfaDNfY29uZmlnX25ldygpOworICBpZighcXMtPmgzY29uZmlnKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIC8qIENyZWF0ZSBhIG5ldyBIVFRQLzMgY29ubmVjdGlvbiBvbiB0aGUgUVVJQyBjb25uZWN0aW9uLiAqLworICBxcy0+aDNjID0gcXVpY2hlX2gzX2Nvbm5fbmV3X3dpdGhfdHJhbnNwb3J0KHFzLT5jb25uLCBxcy0+aDNjb25maWcpOworICBpZighcXMtPmgzYykgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisgIGlmKGNvbm4tPmhlcXVpY1sxLXRlbXBpbmRleF0uY2ZnKSB7CisgICAgcXMgPSAmY29ubi0+aGVxdWljWzEtdGVtcGluZGV4XTsKKyAgICBxdWljaGVfY29uZmlnX2ZyZWUocXMtPmNmZyk7CisgICAgcXVpY2hlX2Nvbm5fZnJlZShxcy0+Y29ubik7CisgICAgcXMtPmNmZyA9IE5VTEw7CisgICAgcXMtPmNvbm4gPSBOVUxMOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKKyAgZmFpbDoKKyAgcXVpY2hlX2gzX2NvbmZpZ19mcmVlKHFzLT5oM2NvbmZpZyk7CisgIHF1aWNoZV9oM19jb25uX2ZyZWUocXMtPmgzYyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcG9sbGVkIHRvIGNoZWNrIGlmIHRoaXMgUVVJQyBjb25uZWN0aW9uIGhhcyBjb25uZWN0ZWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcXVpY19pc19jb25uZWN0ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9ICZjb25uLT5oZXF1aWNbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT50ZW1wc29ja1tzb2NraW5kZXhdOworCisgIHJlc3VsdCA9IHByb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgcmVzdWx0ID0gZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihxdWljaGVfY29ubl9pc19lc3RhYmxpc2hlZChxcy0+Y29ubikpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmVzdWx0ID0gcXVpY2hlX2hhc19jb25uZWN0ZWQoY29ubiwgMCwgc29ja2luZGV4KTsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgInF1aWNoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIVxuIikpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHByb2Nlc3NfaW5ncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgc3NpemVfdCByZWN2ZDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHVpbnQ4X3QgKmJ1ZiA9ICh1aW50OF90ICopZGF0YS0+c3RhdGUuYnVmZmVyOworICBzaXplX3QgYnVmc2l6ZSA9IGRhdGEtPnNldC5idWZmZXJfc2l6ZTsKKworICAvKiBpbiBjYXNlIHRoZSB0aW1lb3V0IGV4cGlyZWQgKi8KKyAgcXVpY2hlX2Nvbm5fb25fdGltZW91dChxcy0+Y29ubik7CisKKyAgZG8geworICAgIHJlY3ZkID0gcmVjdihzb2NrZmQsIGJ1ZiwgYnVmc2l6ZSwgMCk7CisgICAgaWYoKHJlY3ZkIDwgMCkgJiYgKChTT0NLRVJSTk8gPT0gRUFHQUlOKSB8fCAoU09DS0VSUk5PID09IEVXT1VMREJMT0NLKSkpCisgICAgICBicmVhazsKKworICAgIGlmKHJlY3ZkIDwgMCkgeworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInF1aWNoZTogcmVjdigpIHVuZXhwZWN0ZWRseSByZXR1cm5lZCAlZCAiCisgICAgICAgICAgICAiKGVycm5vOiAlZCwgc29ja2V0ICVkKSIsIHJlY3ZkLCBTT0NLRVJSTk8sIHNvY2tmZCk7CisgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICB9CisKKyAgICByZWN2ZCA9IHF1aWNoZV9jb25uX3JlY3YocXMtPmNvbm4sIGJ1ZiwgcmVjdmQpOworICAgIGlmKHJlY3ZkID09IFFVSUNIRV9FUlJfRE9ORSkKKyAgICAgIGJyZWFrOworCisgICAgaWYocmVjdmQgPCAwKSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAicXVpY2hlX2Nvbm5fcmVjdigpID09ICVkIiwgcmVjdmQpOworICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgfQorICB9IHdoaWxlKDEpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIGZsdXNoX2VncmVzcyBkcmFpbnMgdGhlIGJ1ZmZlcnMgYW5kIHNlbmRzIG9mZiBkYXRhLgorICogQ2FsbHMgZmFpbGYoKSBvbiBlcnJvcnMuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBmbHVzaF9lZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpCit7CisgIHNzaXplX3Qgc2VudDsKKyAgc3RhdGljIHVpbnQ4X3Qgb3V0WzEyMDBdOworICBpbnQ2NF90IHRpbWVvdXRfbnM7CisKKyAgZG8geworICAgIHNlbnQgPSBxdWljaGVfY29ubl9zZW5kKHFzLT5jb25uLCBvdXQsIHNpemVvZihvdXQpKTsKKyAgICBpZihzZW50ID09IFFVSUNIRV9FUlJfRE9ORSkKKyAgICAgIGJyZWFrOworCisgICAgaWYoc2VudCA8IDApIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJxdWljaGVfY29ubl9zZW5kIHJldHVybmVkICV6ZFxuIiwKKyAgICAgICAgICAgIHNlbnQpOworICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgfQorCisgICAgc2VudCA9IHNlbmQoc29ja2ZkLCBvdXQsIHNlbnQsIDApOworICAgIGlmKHNlbnQgPCAwKSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAic2VuZCgpIHJldHVybmVkICV6ZFxuIiwgc2VudCk7CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CisgIH0gd2hpbGUoMSk7CisKKyAgLyogdGltZSB1bnRpbCB0aGUgbmV4dCB0aW1lb3V0IGV2ZW50LCBhcyBuYW5vc2Vjb25kcy4gKi8KKyAgdGltZW91dF9ucyA9IHF1aWNoZV9jb25uX3RpbWVvdXRfYXNfbmFub3MocXMtPmNvbm4pOworICBpZih0aW1lb3V0X25zKQorICAgIC8qIGV4cGlyZSB1c2VzIG1pbGxpc2Vjb25kcyAqLworICAgIEN1cmxfZXhwaXJlKGNvbm4tPmRhdGEsICh0aW1lb3V0X25zICsgOTk5OTk5KSAvIDEwMDAwMDAsIEVYUElSRV9RVUlDKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0cnVjdCBoM2gxaGVhZGVyIHsKKyAgY2hhciAqZGVzdDsKKyAgc2l6ZV90IGRlc3RsZW47IC8qIGxlZnQgdG8gdXNlICovCisgIHNpemVfdCBubGVuOyAvKiB1c2VkICovCit9OworCitzdGF0aWMgaW50IGNiX2VhY2hfaGVhZGVyKHVpbnQ4X3QgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ3ApCit7CisgIHN0cnVjdCBoM2gxaGVhZGVyICpoZWFkZXJzID0gKHN0cnVjdCBoM2gxaGVhZGVyICopYXJncDsKKyAgc2l6ZV90IG9sZW4gPSAwOworCisgIGlmKChuYW1lX2xlbiA9PSA3KSAmJiAhc3RybmNtcCgiOnN0YXR1cyIsIChjaGFyICopbmFtZSwgNykpIHsKKyAgICBtc25wcmludGYoaGVhZGVycy0+ZGVzdCwKKyAgICAgICAgICAgICAgaGVhZGVycy0+ZGVzdGxlbiwgIkhUVFAvMyAlLipzXG4iLAorICAgICAgICAgICAgICAoaW50KSB2YWx1ZV9sZW4sIHZhbHVlKTsKKyAgfQorICBlbHNlIGlmKCFoZWFkZXJzLT5ubGVuKSB7CisgICAgcmV0dXJuIENVUkxFX0hUVFAzOworICB9CisgIGVsc2UgeworICAgIG1zbnByaW50ZihoZWFkZXJzLT5kZXN0LAorICAgICAgICAgICAgICBoZWFkZXJzLT5kZXN0bGVuLCAiJS4qczogJS4qc1xuIiwKKyAgICAgICAgICAgICAgKGludCluYW1lX2xlbiwgbmFtZSwgKGludCkgdmFsdWVfbGVuLCB2YWx1ZSk7CisgIH0KKyAgb2xlbiA9IHN0cmxlbihoZWFkZXJzLT5kZXN0KTsKKyAgaGVhZGVycy0+ZGVzdGxlbiAtPSBvbGVuOworICBoZWFkZXJzLT5ubGVuICs9IG9sZW47CisgIGhlYWRlcnMtPmRlc3QgKz0gb2xlbjsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGgzX3N0cmVhbV9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgc3NpemVfdCByZWN2ZCA9IC0xOworICBzc2l6ZV90IHJjb2RlOworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSBjb25uLT5xdWljOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgcXVpY2hlX2gzX2V2ZW50ICpldjsKKyAgaW50IHJjOworICBzdHJ1Y3QgaDNoMWhlYWRlciBoZWFkZXJzOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgIGhlYWRlcnMuZGVzdCA9IGJ1ZjsKKyAgaGVhZGVycy5kZXN0bGVuID0gYnVmZmVyc2l6ZTsKKyAgaGVhZGVycy5ubGVuID0gMDsKKworICBpZihwcm9jZXNzX2luZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICBpbmZvZihkYXRhLCAiaDNfc3RyZWFtX3JlY3YgcmV0dXJucyBvbiBpbmdyZXNzXG4iKTsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHdoaWxlKHJlY3ZkIDwgMCkgeworICAgIGludDY0X3QgcyA9IHF1aWNoZV9oM19jb25uX3BvbGwocXMtPmgzYywgcXMtPmNvbm4sICZldik7CisgICAgaWYocyA8IDApCisgICAgICAvKiBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKyAgICAgIGJyZWFrOworCisgICAgaWYocyAhPSBzdHJlYW0tPnN0cmVhbTNfaWQpIHsKKyAgICAgIC8qIGFub3RoZXIgdHJhbnNmZXIsIGlnbm9yZSBmb3Igbm93ICovCisgICAgICBpbmZvZihkYXRhLCAiR290IGgzIGZvciBzdHJlYW0gJXUsIGV4cGVjdHMgJXVcbiIsCisgICAgICAgICAgICBzLCBzdHJlYW0tPnN0cmVhbTNfaWQpOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgc3dpdGNoKHF1aWNoZV9oM19ldmVudF90eXBlKGV2KSkgeworICAgIGNhc2UgUVVJQ0hFX0gzX0VWRU5UX0hFQURFUlM6CisgICAgICByYyA9IHF1aWNoZV9oM19ldmVudF9mb3JfZWFjaF9oZWFkZXIoZXYsIGNiX2VhY2hfaGVhZGVyLCAmaGVhZGVycyk7CisgICAgICBpZihyYykgeworICAgICAgICAqY3VybGNvZGUgPSByYzsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIGluIEhUVFAvMyByZXNwb25zZSBoZWFkZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByZWN2ZCA9IGhlYWRlcnMubmxlbjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUVVJQ0hFX0gzX0VWRU5UX0RBVEE6CisgICAgICBpZighc3RyZWFtLT5maXJzdGJvZHkpIHsKKyAgICAgICAgLyogYWRkIGEgaGVhZGVyLWJvZHkgc2VwYXJhdG9yIENSTEYgKi8KKyAgICAgICAgYnVmWzBdID0gJ1xyJzsKKyAgICAgICAgYnVmWzFdID0gJ1xuJzsKKyAgICAgICAgYnVmICs9IDI7CisgICAgICAgIGJ1ZmZlcnNpemUgLT0gMjsKKyAgICAgICAgc3RyZWFtLT5maXJzdGJvZHkgPSBUUlVFOworICAgICAgICByZWN2ZCA9IDI7IC8qIHR3byBieXRlcyBhbHJlYWR5ICovCisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJlY3ZkID0gMDsKKyAgICAgIHJjb2RlID0gcXVpY2hlX2gzX3JlY3ZfYm9keShxcy0+aDNjLCBxcy0+Y29ubiwgcywgKHVuc2lnbmVkIGNoYXIgKilidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyc2l6ZSk7CisgICAgICBpZihyY29kZSA8PSAwKSB7CisgICAgICAgIHJlY3ZkID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgcmVjdmQgKz0gcmNvZGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUVVJQ0hFX0gzX0VWRU5UX0ZJTklTSEVEOgorICAgICAgc3RyZWFtY2xvc2UoY29ubiwgIkVuZCBvZiBzdHJlYW0iKTsKKyAgICAgIHJlY3ZkID0gMDsgLyogZW5kIG9mIHN0cmVhbSAqLworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHF1aWNoZV9oM19ldmVudF9mcmVlKGV2KTsKKyAgfQorICBpZihmbHVzaF9lZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgICpjdXJsY29kZSA9ICgtMSA9PSByZWN2ZCk/IENVUkxFX0FHQUlOIDogQ1VSTEVfT0s7CisgIGlmKHJlY3ZkID49IDApCisgICAgLyogR2V0IHRoaXMgY2FsbGVkIGFnYWluIHRvIGRyYWluIHRoZSBldmVudCBxdWV1ZSAqLworICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9RVUlDKTsKKworICBkYXRhLT5zdGF0ZS5kcmFpbiA9IChyZWN2ZCA+PSAwKSA/IDEgOiAwOworICByZXR1cm4gcmVjdmQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGgzX3N0cmVhbV9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzc2l6ZV90IHNlbnQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKworICBpZighc3RyZWFtLT5oM3JlcSkgeworICAgIENVUkxjb2RlIHJlc3VsdCA9IGh0dHBfcmVxdWVzdChjb25uLCBtZW0sIGxlbik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZW50ID0gbGVuOworICB9CisgIGVsc2UgeworICAgIEgzQlVHRihpbmZvZihjb25uLT5kYXRhLCAiUGFzcyBvbiAlemQgYm9keSBieXRlcyB0byBxdWljaGVcbiIsCisgICAgICAgICAgICAgICAgIGxlbikpOworICAgIHNlbnQgPSBxdWljaGVfaDNfc2VuZF9ib2R5KHFzLT5oM2MsIHFzLT5jb25uLCBzdHJlYW0tPnN0cmVhbTNfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiltZW0sIGxlbiwgRkFMU0UpOworICAgIGlmKHNlbnQgPCAwKSB7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIGlmKGZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKmN1cmxjb2RlID0gQ1VSTEVfT0s7CisgIHJldHVybiBzZW50OworfQorCisvKgorICogU3RvcmUgcXVpY2hlIHZlcnNpb24gaW5mbyBpbiB0aGlzIGJ1ZmZlciwgUHJlZml4IHdpdGggYSBzcGFjZS4gIFJldHVybiB0b3RhbAorICogbGVuZ3RoIHdyaXR0ZW4uCisgKi8KK2ludCBDdXJsX3F1aWNfdmVyKGNoYXIgKnAsIHNpemVfdCBsZW4pCit7CisgIHJldHVybiBtc25wcmludGYocCwgbGVuLCAiIHF1aWNoZS8lcyIsIHF1aWNoZV92ZXJzaW9uKCkpOworfQorCisvKiBJbmRleCB3aGVyZSA6YXV0aG9yaXR5IGhlYWRlciBmaWVsZCB3aWxsIGFwcGVhciBpbiByZXF1ZXN0IGhlYWRlcgorICAgZmllbGQgbGlzdC4gKi8KKyNkZWZpbmUgQVVUSE9SSVRZX0RTVF9JRFggMworCitzdGF0aWMgQ1VSTGNvZGUgaHR0cF9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKQoreworICAvKgorICAgKi8KKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgIHNpemVfdCBuaGVhZGVyOworICBzaXplX3QgaTsKKyAgc2l6ZV90IGF1dGhvcml0eV9pZHg7CisgIGNoYXIgKmhkYnVmID0gKGNoYXIgKiltZW07CisgIGNoYXIgKmVuZCwgKmxpbmVfZW5kOworICBpbnQ2NF90IHN0cmVhbTNfaWQ7CisgIHF1aWNoZV9oM19oZWFkZXIgKm52YSA9IE5VTEw7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBzdHJlYW0tPmgzcmVxID0gVFJVRTsgLyogc2VuZiBvZmYhICovCisKKyAgLyogQ2FsY3VsYXRlIG51bWJlciBvZiBoZWFkZXJzIGNvbnRhaW5lZCBpbiBbbWVtLCBtZW0gKyBsZW4pLiBBc3N1bWVzIGEKKyAgICAgY29ycmVjdGx5IGdlbmVyYXRlZCBIVFRQIGhlYWRlciBmaWVsZCBibG9jay4gKi8KKyAgbmhlYWRlciA9IDA7CisgIGZvcihpID0gMTsgaSA8IGxlbjsgKytpKSB7CisgICAgaWYoaGRidWZbaV0gPT0gJ1xuJyAmJiBoZGJ1ZltpIC0gMV0gPT0gJ1xyJykgeworICAgICAgKytuaGVhZGVyOworICAgICAgKytpOworICAgIH0KKyAgfQorICBpZihuaGVhZGVyIDwgMikKKyAgICBnb3RvIGZhaWw7CisKKyAgLyogV2UgY291bnRlZCBhZGRpdGlvbmFsIDIgXHJcbiBpbiB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZS4gV2UgbmVlZCAzCisgICAgIG5ldyBoZWFkZXJzOiA6bWV0aG9kLCA6cGF0aCBhbmQgOnNjaGVtZS4gVGhlcmVmb3JlIHdlIG5lZWQgb25lCisgICAgIG1vcmUgc3BhY2UuICovCisgIG5oZWFkZXIgKz0gMTsKKyAgbnZhID0gbWFsbG9jKHNpemVvZihxdWljaGVfaDNfaGVhZGVyKSAqIG5oZWFkZXIpOworICBpZighbnZhKSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICAvKiBFeHRyYWN0IDptZXRob2QsIDpwYXRoIGZyb20gcmVxdWVzdCBsaW5lCisgICAgIFdlIGRvIGxpbmUgZW5kaW5ncyB3aXRoIENSTEYgc28gY2hlY2tpbmcgZm9yIENSIGlzIGVub3VnaCAqLworICBsaW5lX2VuZCA9IG1lbWNocihoZGJ1ZiwgJ1xyJywgbGVuKTsKKyAgaWYoIWxpbmVfZW5kKSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOyAvKiBpbnRlcm5hbCBlcnJvciAqLworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIC8qIE1ldGhvZCBkb2VzIG5vdCBjb250YWluIHNwYWNlcyAqLworICBlbmQgPSBtZW1jaHIoaGRidWYsICcgJywgbGluZV9lbmQgLSBoZGJ1Zik7CisgIGlmKCFlbmQgfHwgZW5kID09IGhkYnVmKQorICAgIGdvdG8gZmFpbDsKKyAgbnZhWzBdLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6bWV0aG9kIjsKKyAgbnZhWzBdLm5hbWVfbGVuID0gc3RybGVuKChjaGFyICopbnZhWzBdLm5hbWUpOworICBudmFbMF0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICBudmFbMF0udmFsdWVfbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworCisgIGhkYnVmID0gZW5kICsgMTsKKworICAvKiBQYXRoIG1heSBjb250YWluIHNwYWNlcyBzbyBzY2FuIGJhY2t3YXJkcyAqLworICBlbmQgPSBOVUxMOworICBmb3IoaSA9IChzaXplX3QpKGxpbmVfZW5kIC0gaGRidWYpOyBpOyAtLWkpIHsKKyAgICBpZihoZGJ1ZltpIC0gMV0gPT0gJyAnKSB7CisgICAgICBlbmQgPSAmaGRidWZbaSAtIDFdOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGlmKCFlbmQgfHwgZW5kID09IGhkYnVmKQorICAgIGdvdG8gZmFpbDsKKyAgbnZhWzFdLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6cGF0aCI7CisgIG52YVsxXS5uYW1lX2xlbiA9IHN0cmxlbigoY2hhciAqKW52YVsxXS5uYW1lKTsKKyAgbnZhWzFdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzFdLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKworICBudmFbMl0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIjpzY2hlbWUiOworICBudmFbMl0ubmFtZV9sZW4gPSBzdHJsZW4oKGNoYXIgKiludmFbMl0ubmFtZSk7CisgIGlmKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpCisgICAgbnZhWzJdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKikiaHR0cHMiOworICBlbHNlCisgICAgbnZhWzJdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKikiaHR0cCI7CisgIG52YVsyXS52YWx1ZV9sZW4gPSBzdHJsZW4oKGNoYXIgKiludmFbMl0udmFsdWUpOworCisKKyAgYXV0aG9yaXR5X2lkeCA9IDA7CisgIGkgPSAzOworICB3aGlsZShpIDwgbmhlYWRlcikgeworICAgIHNpemVfdCBobGVuOworCisgICAgaGRidWYgPSBsaW5lX2VuZCArIDI7CisKKyAgICAvKiBjaGVjayBmb3IgbmV4dCBDUiwgYnV0IG9ubHkgd2l0aGluIHRoZSBwaWVjZSBvZiBkYXRhIGxlZnQgaW4gdGhlIGdpdmVuCisgICAgICAgYnVmZmVyICovCisgICAgbGluZV9lbmQgPSBtZW1jaHIoaGRidWYsICdccicsIGxlbiAtIChoZGJ1ZiAtIChjaGFyICopbWVtKSk7CisgICAgaWYoIWxpbmVfZW5kIHx8IChsaW5lX2VuZCA9PSBoZGJ1ZikpCisgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBoZWFkZXIgY29udGludWF0aW9uIGxpbmVzIGFyZSBub3Qgc3VwcG9ydGVkICovCisgICAgaWYoKmhkYnVmID09ICcgJyB8fCAqaGRidWYgPT0gJ1x0JykKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIGZvcihlbmQgPSBoZGJ1ZjsgZW5kIDwgbGluZV9lbmQgJiYgKmVuZCAhPSAnOic7ICsrZW5kKQorICAgICAgOworICAgIGlmKGVuZCA9PSBoZGJ1ZiB8fCBlbmQgPT0gbGluZV9lbmQpCisgICAgICBnb3RvIGZhaWw7CisgICAgaGxlbiA9IGVuZCAtIGhkYnVmOworCisgICAgaWYoaGxlbiA9PSA0ICYmIHN0cm5jYXNlY29tcGFyZSgiaG9zdCIsIGhkYnVmLCA0KSkgeworICAgICAgYXV0aG9yaXR5X2lkeCA9IGk7CisgICAgICBudmFbaV0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIjphdXRob3JpdHkiOworICAgICAgbnZhW2ldLm5hbWVfbGVuID0gc3RybGVuKChjaGFyICopbnZhW2ldLm5hbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG52YVtpXS5uYW1lX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICAgIC8qIExvd2VyIGNhc2UgdGhlIGhlYWRlciBuYW1lIGZvciBIVFRQLzMgKi8KKyAgICAgIEN1cmxfc3RybnRvbG93ZXIoKGNoYXIgKiloZGJ1ZiwgaGRidWYsIG52YVtpXS5uYW1lX2xlbik7CisgICAgICBudmFbaV0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgfQorICAgIGhkYnVmID0gZW5kICsgMTsKKyAgICB3aGlsZSgqaGRidWYgPT0gJyAnIHx8ICpoZGJ1ZiA9PSAnXHQnKQorICAgICAgKytoZGJ1ZjsKKyAgICBlbmQgPSBsaW5lX2VuZDsKKworI2lmIDAgLyogVGhpcyBzaG91bGQgcHJvYmFibHkgZ28gaW4gbW9yZSBvciBsZXNzIGxpa2UgdGhpcyAqLworICAgIHN3aXRjaChpbnNwZWN0X2hlYWRlcigoY29uc3QgY2hhciAqKW52YVtpXS5uYW1lLCBudmFbaV0ubmFtZWxlbiwgaGRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAtIGhkYnVmKSkgeworICAgIGNhc2UgSEVBREVSSU5TVF9JR05PUkU6CisgICAgICAvKiBza2lwIGhlYWRlciBmaWVsZHMgcHJvaGliaXRlZCBieSBIVFRQLzIgc3BlY2lmaWNhdGlvbi4gKi8KKyAgICAgIC0tbmhlYWRlcjsKKyAgICAgIGNvbnRpbnVlOworICAgIGNhc2UgSEVBREVSSU5TVF9URV9UUkFJTEVSUzoKKyAgICAgIG52YVtpXS52YWx1ZSA9ICh1aW50OF90KikidHJhaWxlcnMiOworICAgICAgbnZhW2ldLnZhbHVlX2xlbiA9IHNpemVvZigidHJhaWxlcnMiKSAtIDE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbnZhW2ldLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgICAgIG52YVtpXS52YWx1ZV9sZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisgICAgfQorI2VuZGlmCisgICAgbnZhW2ldLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgICBudmFbaV0udmFsdWVfbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworCisgICAgKytpOworICB9CisKKyAgLyogOmF1dGhvcml0eSBtdXN0IGNvbWUgYmVmb3JlIG5vbi1wc2V1ZG8gaGVhZGVyIGZpZWxkcyAqLworICBpZihhdXRob3JpdHlfaWR4ICE9IDAgJiYgYXV0aG9yaXR5X2lkeCAhPSBBVVRIT1JJVFlfRFNUX0lEWCkgeworICAgIHF1aWNoZV9oM19oZWFkZXIgYXV0aG9yaXR5ID0gbnZhW2F1dGhvcml0eV9pZHhdOworICAgIGZvcihpID0gYXV0aG9yaXR5X2lkeDsgaSA+IEFVVEhPUklUWV9EU1RfSURYOyAtLWkpIHsKKyAgICAgIG52YVtpXSA9IG52YVtpIC0gMV07CisgICAgfQorICAgIG52YVtpXSA9IGF1dGhvcml0eTsKKyAgfQorCisgIC8qIFdhcm4gc3RyZWFtIG1heSBiZSByZWplY3RlZCBpZiBjdW11bGF0aXZlIGxlbmd0aCBvZiBoZWFkZXJzIGlzIHRvbworICAgICBsYXJnZS4gKi8KKyNkZWZpbmUgTUFYX0FDQyA2MDAwMCAgLyogPDY0S0IgdG8gYWNjb3VudCBmb3Igc29tZSBvdmVyaGVhZCAqLworICB7CisgICAgc2l6ZV90IGFjYyA9IDA7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBuaGVhZGVyOyArK2kpIHsKKyAgICAgIGFjYyArPSBudmFbaV0ubmFtZV9sZW4gKyBudmFbaV0udmFsdWVfbGVuOworCisgICAgICBIM0JVR0YoaW5mb2YoZGF0YSwgImgzIFslLipzOiAlLipzXVxuIiwKKyAgICAgICAgICAgICAgICAgICBudmFbaV0ubmFtZV9sZW4sIG52YVtpXS5uYW1lLAorICAgICAgICAgICAgICAgICAgIG52YVtpXS52YWx1ZV9sZW4sIG52YVtpXS52YWx1ZSkpOworICAgIH0KKworICAgIGlmKGFjYyA+IE1BWF9BQ0MpIHsKKyAgICAgIGluZm9mKGRhdGEsICJodHRwX3JlcXVlc3Q6IFdhcm5pbmc6IFRoZSBjdW11bGF0aXZlIGxlbmd0aCBvZiBhbGwgIgorICAgICAgICAgICAgImhlYWRlcnMgZXhjZWVkcyAlenUgYnl0ZXMgYW5kIHRoYXQgY291bGQgY2F1c2UgdGhlICIKKyAgICAgICAgICAgICJzdHJlYW0gdG8gYmUgcmVqZWN0ZWQuXG4iLCBNQVhfQUNDKTsKKyAgICB9CisgIH0KKworICBzd2l0Y2goZGF0YS0+c2V0Lmh0dHByZXEpIHsKKyAgY2FzZSBIVFRQUkVRX1BPU1Q6CisgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CisgIGNhc2UgSFRUUFJFUV9QT1NUX01JTUU6CisgIGNhc2UgSFRUUFJFUV9QVVQ6CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgIGVsc2UKKyAgICAgIC8qIGRhdGEgc2VuZGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRhdGEgYW1vdW50IHVwIGZyb250ICovCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gLTE7IC8qIHVua25vd24sIGJ1dCBub3QgemVybyAqLworCisgICAgc3RyZWFtM19pZCA9IHF1aWNoZV9oM19zZW5kX3JlcXVlc3QocXMtPmgzYywgcXMtPmNvbm4sIG52YSwgbmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID8gRkFMU0U6IFRSVUUpOworICAgIGlmKChzdHJlYW0zX2lkID49IDApICYmIGRhdGEtPnNldC5wb3N0ZmllbGRzKSB7CisgICAgICBzc2l6ZV90IHNlbnQgPSBxdWljaGVfaDNfc2VuZF9ib2R5KHFzLT5oM2MsIHFzLT5jb25uLCBzdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0LCBUUlVFKTsKKyAgICAgIGlmKHNlbnQgPD0gMCkgeworICAgICAgICBmYWlsZihkYXRhLCAicXVpY2hlX2gzX3NlbmRfYm9keSBmYWlsZWQhIik7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsgLyogbm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgc3RyZWFtM19pZCA9IHF1aWNoZV9oM19zZW5kX3JlcXVlc3QocXMtPmgzYywgcXMtPmNvbm4sIG52YSwgbmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKKyAgICBicmVhazsKKyAgfQorCisgIEN1cmxfc2FmZWZyZWUobnZhKTsKKworICBpZihzdHJlYW0zX2lkIDwgMCkgeworICAgIEgzQlVHRihpbmZvZihkYXRhLCAicXVpY2hlX2gzX3NlbmRfcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgc3RyZWFtM19pZCkpOworICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgaW5mb2YoZGF0YSwgIlVzaW5nIEhUVFAvMyBTdHJlYW0gSUQ6ICV4IChlYXN5IGhhbmRsZSAlcClcbiIsCisgICAgICAgIHN0cmVhbTNfaWQsICh2b2lkICopZGF0YSk7CisgIHN0cmVhbS0+c3RyZWFtM19pZCA9IHN0cmVhbTNfaWQ7CisKKyAgcmV0dXJuIENVUkxFX09LOworCitmYWlsOgorICBmcmVlKG52YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRvbmVfc2VuZGluZyB3aGVuIHdlIHN0b3AgSFRUUC8zIHVwbG9hZGluZy4KKyAqLworQ1VSTGNvZGUgQ3VybF9xdWljX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGlmKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9odHRwMykgeworICAgIC8qIG9ubHkgZm9yIEhUVFAvMyB0cmFuc2ZlcnMgKi8KKyAgICBzc2l6ZV90IHNlbnQ7CisgICAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiEhISBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nXG4iKTsKKyAgICBzdHJlYW0tPnVwbG9hZF9kb25lID0gVFJVRTsKKyAgICBzZW50ID0gcXVpY2hlX2gzX3NlbmRfYm9keShxcy0+aDNjLCBxcy0+Y29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFRSVUUpOworICAgIGlmKHNlbnQgPCAwKQorICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBodHRwLmM6Q3VybF9odHRwX2RvbmUgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLgorICovCit2b2lkIEN1cmxfcXVpY19kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgcHJlbWF0dXJlKQoreworICAodm9pZClkYXRhOworICAodm9pZClwcmVtYXR1cmU7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRhdGFfcGVuZGluZyB0byBrbm93IGlmIHdlIHNob3VsZCBrZWVwIGxvb3BpbmcKKyAqIHRvIHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKi8KK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQoreworICAodm9pZClkYXRhOworICByZXR1cm4gRkFMU0U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvcXVpY2hlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQxODM3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvcXVpY2hlLmgKQEAgLTAsMCArMSw0OSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDSEVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDSEVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX1FVSUNIRQorCisjaW5jbHVkZSA8cXVpY2hlLmg+CisKK3N0cnVjdCBxdWljX2hhbmRzaGFrZSB7CisgIGNoYXIgKmJ1ZjsgICAgICAgLyogcG9pbnRlciB0byB0aGUgYnVmZmVyICovCisgIHNpemVfdCBhbGxvY2xlbjsgLyogc2l6ZSBvZiBhbGxvY2F0aW9uICovCisgIHNpemVfdCBsZW47ICAgICAgLyogc2l6ZSBvZiBjb250ZW50IGluIGJ1ZmZlciAqLworICBzaXplX3QgbnJlYWQ7ICAgIC8qIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWFkICovCit9OworCitzdHJ1Y3QgcXVpY3NvY2tldCB7CisgIHF1aWNoZV9jb25maWcgKmNmZzsKKyAgcXVpY2hlX2Nvbm4gKmNvbm47CisgIHF1aWNoZV9oM19jb25uICpoM2M7CisgIHF1aWNoZV9oM19jb25maWcgKmgzY29uZmlnOworICB1aW50OF90IHNjaWRbUVVJQ0hFX01BWF9DT05OX0lEX0xFTl07CisgIHVpbnQzMl90IHZlcnNpb247Cit9OworCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNIRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL2xpYnNzaC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC9saWJzc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDdiNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC9saWJzc2guYwpAQCAtMCwwICsxLDI4MzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMjAgUmVkIEhhdCwgSW5jLgorICoKKyAqIEF1dGhvcnM6IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zLCBUb21hcyBNcmF6LCBTdGFuaXNsYXYgWmlkZWssCisgKiAgICAgICAgICBSb2JlcnQgS29sY3VuLCBBbmRyZWFzIFNjaG5laWRlcgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfTElCU1NICisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGxpYnNzaC9saWJzc2guaD4KKyNpbmNsdWRlIDxsaWJzc2gvc2Z0cC5oPgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VUU05BTUVfSAorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgX19WTVMKKyNpbmNsdWRlIDxpbi5oPgorI2luY2x1ZGUgPGluZXQuaD4KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoTkVUV0FSRSkgJiYgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pKQorI3VuZGVmIGluX2FkZHJfdAorI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAiaHR0cC5oIiAgICAgICAgICAgICAgIC8qIGZvciBIVFRQIHByb3h5IHR1bm5lbCBzdHVmZiAqLworI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKKyNpbmNsdWRlICJnZXRpbmZvLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgorI2luY2x1ZGUgInZ0bHMvdnRscy5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgImluZXRfbnRvcC5oIgorI2luY2x1ZGUgInBhcnNlZGF0ZS5oIiAgICAgICAgICAvKiBmb3IgdGhlIHdlZWsgZGF5IGFuZCBtb250aCBuYW1lcyAqLworI2luY2x1ZGUgInNvY2thZGRyLmgiICAgICAgICAgICAvKiByZXF1aXJlZCBmb3IgQ3VybF9zb2NrYWRkcl9zdG9yYWdlICovCisjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKy8qIGZvciBwZXJtaXNzaW9uIGFuZCBvcGVuIGZsYWdzICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisjaW5jbHVkZSAiY3VybF9wYXRoLmgiCisKKy8qIEEgcmVjZW50IG1hY3JvIHByb3ZpZGVkIGJ5IGxpYnNzaC4gT3IgbWFrZSBvdXIgb3duLiAqLworI2lmbmRlZiBTU0hfU1RSSU5HX0ZSRUVfQ0hBUgorI2RlZmluZSBTU0hfU1RSSU5HX0ZSRUVfQ0hBUih4KSAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoeCk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgeCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDApCisjZW5kaWYKKworLyogTG9jYWwgZnVuY3Rpb25zOiAqLworc3RhdGljIENVUkxjb2RlIG15c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBteXNzaF9kb19pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOworCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKK3N0YXRpYworQ1VSTGNvZGUgc2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKKworc3RhdGljIHZvaWQgc2Z0cF9xdW90ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIHZvaWQgc2Z0cF9xdW90ZV9zdGF0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgaW50IG15c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrKTsKK3N0YXRpYyBpbnQgbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spOworCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisvKgorICogU0NQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0geworICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgbXlzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBteXNzaF9kb19pdCwgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzY3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgbXlzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBteXNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIHNjcF9kb2luZywgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBteXNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2NwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19TQ1AsICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgLyogZmxhZ3MgKi8KK307CisKKy8qCisgKiBTRlRQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2Z0cCA9IHsKKyAgIlNGVFAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgbXlzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIG15c3NoX2RvX2l0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgc2Z0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBteXNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgbXlzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIHNmdHBfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIG15c3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHNmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KKyAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19TRlRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgorICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9lcnJvcl90b19DVVJMRShpbnQgZXJyKQoreworICBzd2l0Y2goZXJyKSB7CisgICAgY2FzZSBTU0hfRlhfT0s6CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICBjYXNlIFNTSF9GWF9OT19TVUNIX0ZJTEU6CisgICAgY2FzZSBTU0hfRlhfTk9fU1VDSF9QQVRIOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDsKKworICAgIGNhc2UgU1NIX0ZYX1BFUk1JU1NJT05fREVOSUVEOgorICAgIGNhc2UgU1NIX0ZYX1dSSVRFX1BST1RFQ1Q6CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CisKKyAgICBjYXNlIFNTSF9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX0VYSVNUUzsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBDVVJMRV9TU0g7Cit9CisKKyNpZm5kZWYgREVCVUdCVUlMRAorI2RlZmluZSBzdGF0ZSh4LHkpIG15c3RhdGUoeCx5KQorI2Vsc2UKKyNkZWZpbmUgc3RhdGUoeCx5KSBteXN0YXRlKHgseSwgX19MSU5FX18pCisjZW5kaWYKKworLyoKKyAqIFNTSCBTdGF0ZSBtYWNoaW5lIHJlbGF0ZWQgY29kZQorICovCisvKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgU1NIIHN0YXRlISAqLworc3RhdGljIHZvaWQgbXlzdGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHNzaHN0YXRlIG5vd3N0YXRlCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgICAgICAgICAgICAgICAsIGludCBsaW5lbm8KKyNlbmRpZgorICApCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCisgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geworICAgICJTU0hfU1RPUCIsCisgICAgIlNTSF9JTklUIiwKKyAgICAiU1NIX1NfU1RBUlRVUCIsCisgICAgIlNTSF9IT1NUS0VZIiwKKyAgICAiU1NIX0FVVEhMSVNUIiwKKyAgICAiU1NIX0FVVEhfUEtFWV9JTklUIiwKKyAgICAiU1NIX0FVVEhfUEtFWSIsCisgICAgIlNTSF9BVVRIX1BBU1NfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BBU1MiLAorICAgICJTU0hfQVVUSF9BR0VOVF9JTklUIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfTElTVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UIiwKKyAgICAiU1NIX0FVVEhfSE9TVF9JTklUIiwKKyAgICAiU1NIX0FVVEhfSE9TVCIsCisgICAgIlNTSF9BVVRIX0tFWV9JTklUIiwKKyAgICAiU1NIX0FVVEhfS0VZIiwKKyAgICAiU1NIX0FVVEhfR1NTQVBJIiwKKyAgICAiU1NIX0FVVEhfRE9ORSIsCisgICAgIlNTSF9TRlRQX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFMUEFUSCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFIiwKKyAgICAiU1NIX1NGVFBfTkVYVF9RVU9URSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NUQVQiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TRVRTVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1lNTElOSyIsCisgICAgIlNTSF9TRlRQX1FVT1RFX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfUkVOQU1FIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfUk1ESVIiLAorICAgICJTU0hfU0ZUUF9RVU9URV9VTkxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUVkZTIiwKKyAgICAiU1NIX1NGVFBfR0VUSU5GTyIsCisgICAgIlNTSF9TRlRQX0ZJTEVUSU1FIiwKKyAgICAiU1NIX1NGVFBfVFJBTlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIiLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFERElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9MSU5LIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9CT1RUT00iLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0RPTkUiLAorICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfU1RBVCIsCisgICAgIlNTSF9TRlRQX0NMT1NFIiwKKyAgICAiU1NIX1NGVFBfU0hVVERPV04iLAorICAgICJTU0hfU0NQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0NQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRCIsCisgICAgIlNTSF9TQ1BfRE9ORSIsCisgICAgIlNTSF9TQ1BfU0VORF9FT0YiLAorICAgICJTU0hfU0NQX1dBSVRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0NMT1NFIiwKKyAgICAiU1NIX1NDUF9DSEFOTkVMX0ZSRUUiLAorICAgICJTU0hfU0VTU0lPTl9ESVNDT05ORUNUIiwKKyAgICAiU1NIX1NFU1NJT05fRlJFRSIsCisgICAgIlFVSVQiCisgIH07CisKKworICBpZihzc2hjLT5zdGF0ZSAhPSBub3dzdGF0ZSkgeworICAgIGluZm9mKGNvbm4tPmRhdGEsICJTU0ggJXAgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gJXMgKGxpbmUgJWQpXG4iLAorICAgICAgICAgICh2b2lkICopIHNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdLAorICAgICAgICAgIGxpbmVubyk7CisgIH0KKyNlbmRpZgorCisgIHNzaGMtPnN0YXRlID0gbm93c3RhdGU7Cit9CisKKy8qIE11bHRpcGxlIG9wdGlvbnM6CisgKiAxLiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0gaXMgc2V0IHdpdGggYW4gTUQ1CisgKiAgICBoYXNoICg5MHMgc3R5bGUgYXV0aCwgbm90IHN1cmUgd2Ugc2hvdWxkIGhhdmUgaXQgaGVyZSkKKyAqIDIuIGRhdGEtPnNldC5zc2hfa2V5ZnVuYyBjYWxsYmFjayBpcyBzZXQuIFRoZW4gd2UgZG8gdHJ1c3Qgb24gZmlyc3QKKyAqICAgIHVzZS4gV2UgZXZlbiBzYXZlIG9uIGtub3duaG9zdHMgaWYgQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFCisgKiAgICBpcyByZXR1cm5lZCBieSBpdC4KKyAqIDMuIG5vbmUgb2YgdGhlIGFib3ZlLiBXZSBvbmx5IGFjY2VwdCBpZiBpdCBpcyBwcmVzZW50IG9uIGtub3duIGhvc3RzLgorICoKKyAqIFJldHVybnMgU1NIX09LIG9yIFNTSF9FUlJPUi4KKyAqLworc3RhdGljIGludCBteXNzaF9pc19rbm93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGludCByYzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBzc2hfa2V5IHB1YmtleTsKKyAgc2l6ZV90IGhsZW47CisgIHVuc2lnbmVkIGNoYXIgKmhhc2ggPSBOVUxMOworICBjaGFyICpmb3VuZF9iYXNlNjQgPSBOVUxMOworICBjaGFyICprbm93bl9iYXNlNjQgPSBOVUxMOworICBpbnQgdnN0YXRlOworICBlbnVtIGN1cmxfa2htYXRjaCBrZXltYXRjaDsKKyAgc3RydWN0IGN1cmxfa2hrZXkgZm91bmRrZXk7CisgIHN0cnVjdCBjdXJsX2toa2V5ICprbm93bmtleXAgPSBOVUxMOworICBjdXJsX3NzaGtleWNhbGxiYWNrIGZ1bmMgPQorICAgIGRhdGEtPnNldC5zc2hfa2V5ZnVuYzsKKworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCw5LDApCisgIHN0cnVjdCBzc2hfa25vd25ob3N0c19lbnRyeSAqa25vd25ob3N0c2VudHJ5ID0gTlVMTDsKKyAgc3RydWN0IGN1cmxfa2hrZXkga25vd25rZXk7CisjZW5kaWYKKworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCw4LDApCisgIHJjID0gc3NoX2dldF9zZXJ2ZXJfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCAmcHVia2V5KTsKKyNlbHNlCisgIHJjID0gc3NoX2dldF9wdWJsaWNrZXkoc3NoYy0+c3NoX3Nlc3Npb24sICZwdWJrZXkpOworI2VuZGlmCisgIGlmKHJjICE9IFNTSF9PSykKKyAgICByZXR1cm4gcmM7CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdKSB7CisgICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleV9oYXNoKHB1YmtleSwgU1NIX1BVQkxJQ0tFWV9IQVNIX01ENSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc2gsICZobGVuKTsKKyAgICBpZihyYyAhPSBTU0hfT0spCisgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpZihobGVuICE9IHN0cmxlbihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0pIHx8CisgICAgICAgbWVtY21wKCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0sIGhhc2gsIGhsZW4pKSB7CisgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICByYyA9IFNTSF9PSzsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCAhPSBUUlVFKSB7CisgICAgcmMgPSBTU0hfT0s7CisgICAgZ290byBjbGVhbnVwOworICB9CisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICAvKiBHZXQgdGhlIGtub3duX2tleSBmcm9tIHRoZSBrbm93biBob3N0cyBmaWxlICovCisgIHZzdGF0ZSA9IHNzaF9zZXNzaW9uX2dldF9rbm93bl9ob3N0c19lbnRyeShzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbm93bmhvc3RzZW50cnkpOworCisgIC8qIENhc2UgYW4gZW50cnkgd2FzIGZvdW5kIGluIGEga25vd24gaG9zdHMgZmlsZSAqLworICBpZihrbm93bmhvc3RzZW50cnkpIHsKKyAgICBpZihrbm93bmhvc3RzZW50cnktPnB1YmxpY2tleSkgeworICAgICAgcmMgPSBzc2hfcGtpX2V4cG9ydF9wdWJrZXlfYmFzZTY0KGtub3duaG9zdHNlbnRyeS0+cHVibGlja2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbm93bl9iYXNlNjQpOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgIH0KKyAgICAgIGtub3dua2V5LmtleSA9IGtub3duX2Jhc2U2NDsKKyAgICAgIGtub3dua2V5LmxlbiA9IHN0cmxlbihrbm93bl9iYXNlNjQpOworCisgICAgICBzd2l0Y2goc3NoX2tleV90eXBlKGtub3duaG9zdHNlbnRyeS0+cHVibGlja2V5KSkgeworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQToKKyAgICAgICAgICBrbm93bmtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9SU0E7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NIX0tFWVRZUEVfUlNBMToKKyAgICAgICAgICBrbm93bmtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9SU0ExOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBOgorICAgICAgICAgIGtub3dua2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VDRFNBOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VEMjU1MTk6CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUQyNTUxOTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0hfS0VZVFlQRV9EU1M6CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRFNTOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgIH0KKyAgICAgIGtub3dua2V5cCA9ICZrbm93bmtleTsKKyAgICB9CisgIH0KKworICBzd2l0Y2godnN0YXRlKSB7CisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfT0s6CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX09LOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfT1RIRVI6CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX0tOT1dOX0hPU1RTX05PVF9GT1VORDoKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfVU5LTk9XTjoKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfRVJST1I6CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU1NJTkc7CisgICAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTTUFUQ0g7CisgICAgICBicmVhazsKKyAgfQorCisjZWxzZQorICB2c3RhdGUgPSBzc2hfaXNfc2VydmVyX2tub3duKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgc3dpdGNoKHZzdGF0ZSkgeworICAgIGNhc2UgU1NIX1NFUlZFUl9LTk9XTl9PSzoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfT0s7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTSF9TRVJWRVJfRklMRV9OT1RfRk9VTkQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX1NFUlZFUl9OT1RfS05PV046CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU1NJTkc7CisgICAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTTUFUQ0g7CisgICAgICBicmVhazsKKyAgfQorI2VuZGlmCisKKyAgaWYoZnVuYykgeyAvKiB1c2UgY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGFjdGlvbiAqLworICAgIHJjID0gc3NoX3BraV9leHBvcnRfcHVia2V5X2Jhc2U2NChwdWJrZXksICZmb3VuZF9iYXNlNjQpOworICAgIGlmKHJjICE9IFNTSF9PSykKKyAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGZvdW5ka2V5LmtleSA9IGZvdW5kX2Jhc2U2NDsKKyAgICBmb3VuZGtleS5sZW4gPSBzdHJsZW4oZm91bmRfYmFzZTY0KTsKKworICAgIHN3aXRjaChzc2hfa2V5X3R5cGUocHVia2V5KSkgeworICAgICAgY2FzZSBTU0hfS0VZVFlQRV9SU0E6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQTE6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQToKKyAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUNEU0E7CisgICAgICAgIGJyZWFrOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCw3LDApCisgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VEMjU1MTk6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VEMjU1MTk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIFNTSF9LRVlUWVBFX0RTUzoKKyAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRFNTOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CisgICAgcmMgPSBmdW5jKGRhdGEsIGtub3dua2V5cCwgLyogZnJvbSB0aGUga25vd25ob3N0cyBmaWxlICovCisgICAgICAgICAgICAgICZmb3VuZGtleSwgLyogZnJvbSB0aGUgcmVtb3RlIGhvc3QgKi8KKyAgICAgICAgICAgICAga2V5bWF0Y2gsIGRhdGEtPnNldC5zc2hfa2V5ZnVuY191c2VycCk7CisgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOworCisgICAgc3dpdGNoKHJjKSB7CisgICAgICBjYXNlIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRToKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOCwwKQorICAgICAgICByYyA9IHNzaF9zZXNzaW9uX3VwZGF0ZV9rbm93bl9ob3N0cyhzc2hjLT5zc2hfc2Vzc2lvbik7CisjZWxzZQorICAgICAgICByYyA9IHNzaF93cml0ZV9rbm93bmhvc3Qoc3NoYy0+c3NoX3Nlc3Npb24pOworI2VuZGlmCisgICAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IC8qIFJFSkVDVC9ERUZFUiAqLworICAgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBpZihrZXltYXRjaCAhPSBDVVJMS0hNQVRDSF9PSykgeworICAgICAgcmMgPSBTU0hfRVJST1I7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICB9CisgIHJjID0gU1NIX09LOworCitjbGVhbnVwOgorICBpZihmb3VuZF9iYXNlNjQpIHsKKyAgICBmcmVlKGZvdW5kX2Jhc2U2NCk7CisgIH0KKyAgaWYoa25vd25fYmFzZTY0KSB7CisgICAgZnJlZShrbm93bl9iYXNlNjQpOworICB9CisgIGlmKGhhc2gpCisgICAgc3NoX2NsZWFuX3B1YmtleV9oYXNoKCZoYXNoKTsKKyAgc3NoX2tleV9mcmVlKHB1YmtleSk7CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLDksMCkKKyAgaWYoa25vd25ob3N0c2VudHJ5KSB7CisgICAgc3NoX2tub3duaG9zdHNfZW50cnlfZnJlZShrbm93bmhvc3RzZW50cnkpOworICB9CisjZW5kaWYKKyAgcmV0dXJuIHJjOworfQorCisjZGVmaW5lIE1PVkVfVE9fRVJST1JfU1RBVEUoX3IpIHsgXAorICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsgXAorICBzc2hjLT5hY3R1YWxjb2RlID0gX3I7IFwKKyAgcmMgPSBTU0hfRVJST1I7IFwKKyAgYnJlYWs7IFwKK30KKworI2RlZmluZSBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKSB7IFwKKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOyBcCisgIHNzaGMtPmFjdHVhbGNvZGUgPSBzZnRwX2Vycm9yX3RvX0NVUkxFKHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOyBcCisgIHJjID0gU1NIX0VSUk9SOyBcCisgIGJyZWFrOyBcCit9CisKKyNkZWZpbmUgTU9WRV9UT19MQVNUX0FVVEggXAorICBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfUEFTU1dPUkQpIHsgXAorICAgIHJjID0gU1NIX09LOyBcCisgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsgXAorICAgIGJyZWFrOyBcCisgIH0gXAorICBlbHNlIHsgXAorICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsgXAorICB9CisKKyNkZWZpbmUgTU9WRV9UT19URVJUSUFSWV9BVVRIIFwKKyAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX0lOVEVSQUNUSVZFKSB7IFwKKyAgICByYyA9IFNTSF9PSzsgXAorICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsgXAorICAgIGJyZWFrOyBcCisgIH0gXAorICBlbHNlIHsgXAorICAgIE1PVkVfVE9fTEFTVF9BVVRIOyBcCisgIH0KKworI2RlZmluZSBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIIFwKKyAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX0dTU0FQSV9NSUMpIHsgXAorICAgIHJjID0gU1NIX09LOyBcCisgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfR1NTQVBJKTsgXAorICAgIGJyZWFrOyBcCisgIH0gXAorICBlbHNlIHsgXAorICAgIE1PVkVfVE9fVEVSVElBUllfQVVUSDsgXAorICB9CisKK3N0YXRpYworaW50IG15c3NoX2F1dGhfaW50ZXJhY3RpdmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgcmM7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBpbnQgbnByb21wdHM7CisKK3Jlc3RhcnQ6CisgIHN3aXRjaChzc2hjLT5rYmRfc3RhdGUpIHsKKyAgICBjYXNlIDA6CisgICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pCisgICAgICAgIHJldHVybiBTU0hfQUdBSU47CisKKyAgICAgIGlmKHJjICE9IFNTSF9BVVRIX0lORk8pCisgICAgICAgIHJldHVybiBTU0hfRVJST1I7CisKKyAgICAgIG5wcm9tcHRzID0gc3NoX3VzZXJhdXRoX2tiZGludF9nZXRucHJvbXB0cyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihucHJvbXB0cyAhPSAxKQorICAgICAgICByZXR1cm4gU1NIX0VSUk9SOworCisgICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfc2V0YW5zd2VyKHNzaGMtPnNzaF9zZXNzaW9uLCAwLCBjb25uLT5wYXNzd2QpOworICAgICAgaWYocmMgPCAwKQorICAgICAgICByZXR1cm4gU1NIX0VSUk9SOworCisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIDE6CisgICAgICBzc2hjLT5rYmRfc3RhdGUgPSAxOworCisgICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pCisgICAgICAgIHJldHVybiBTU0hfQUdBSU47CisgICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpCisgICAgICAgIHJjID0gU1NIX09LOworICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9JTkZPKSB7CisgICAgICAgIG5wcm9tcHRzID0gc3NoX3VzZXJhdXRoX2tiZGludF9nZXRucHJvbXB0cyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKG5wcm9tcHRzICE9IDApCisgICAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKworICAgICAgICBzc2hjLT5rYmRfc3RhdGUgPSAyOworICAgICAgICBnb3RvIHJlc3RhcnQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgc3NoYy0+a2JkX3N0YXRlID0gMjsKKworICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQorICAgICAgICByZXR1cm4gU1NIX0FHQUlOOworICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKQorICAgICAgICByYyA9IFNTSF9PSzsKKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBTU0hfRVJST1I7CisKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gU1NIX0VSUk9SOworICB9CisKKyAgc3NoYy0+a2JkX3N0YXRlID0gMDsKKyAgcmV0dXJuIHJjOworfQorCisvKgorICogc3NoX3N0YXRlbWFjaF9hY3QoKSBydW5zIHRoZSBTU0ggc3RhdGUgbWFjaGluZSBhcyBmYXIgYXMgaXQgY2FuIHdpdGhvdXQKKyAqIGJsb2NraW5nIGFuZCB3aXRob3V0IHJlYWNoaW5nIHRoZSBlbmQuICBUaGUgZGF0YSB0aGUgcG9pbnRlciAnYmxvY2snIHBvaW50cworICogdG8gd2lsbCBiZSBzZXQgdG8gVFJVRSBpZiB0aGUgbGlic3NoIGZ1bmN0aW9uIHJldHVybnMgU1NIX0FHQUlOCisgKiBtZWFuaW5nIGl0IHdhbnRzIHRvIGJlIGNhbGxlZCBhZ2FpbiB3aGVuIHRoZSBzb2NrZXQgaXMgcmVhZHkKKyAqLworc3RhdGljIENVUkxjb2RlIG15c3NoX3N0YXRlbWFjaF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpibG9jaykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU1NIUFJPVE8gKnByb3RvcCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgaW50IHJjID0gU1NIX05PX0VSUk9SLCBlcnI7CisgIGNoYXIgKm5ld19yZWFkZGlyX2xpbmU7CisgIGludCBzZWVrZXJyID0gQ1VSTF9TRUVLRlVOQ19PSzsKKyAgY29uc3QgY2hhciAqZXJyX21zZzsKKyAgKmJsb2NrID0gMDsgICAgICAgICAgICAgICAgICAgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisKKyAgICBzd2l0Y2goc3NoYy0+c3RhdGUpIHsKKyAgICBjYXNlIFNTSF9JTklUOgorICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7CisKKyNpZiAwCisgICAgICBzc2hfc2V0X2xvZ19sZXZlbChTU0hfTE9HX1BST1RPQ09MKTsKKyNlbmRpZgorCisgICAgICAvKiBTZXQgbGlic3NoIHRvIG5vbi1ibG9ja2luZywgc2luY2UgZXZlcnl0aGluZyBpbnRlcm5hbGx5IGlzCisgICAgICAgICBub24tYmxvY2tpbmcgKi8KKyAgICAgIHNzaF9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDApOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU19TVEFSVFVQKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisKKyAgICBjYXNlIFNTSF9TX1NUQVJUVVA6CisgICAgICByYyA9IHNzaF9jb25uZWN0KHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFNTSF9BR0FJTikKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb24iKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9GQUlMRURfSU5JVCk7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9IT1NUS0VZKTsKKworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9IT1NUS0VZOgorCisgICAgICByYyA9IG15c3NoX2lzX2tub3duKGNvbm4pOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OKTsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhMSVNUKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfQVVUSExJU1Q6eworICAgICAgICBzc2hjLT5hdXRoZWQgPSBGQUxTRTsKKworICAgICAgICByYyA9IHNzaF91c2VyYXV0aF9ub25lKHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMKTsKKyAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGVkIHdpdGggbm9uZVxuIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9FUlJPUikgeworICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzaGMtPmF1dGhfbWV0aG9kcyA9IHNzaF91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMKTsKKyAgICAgICAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BVQkxJQ0tFWSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BLRVlfSU5JVCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIHVzaW5nIFNTSCBwdWJsaWMga2V5IGZpbGVcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX0dTU0FQSV9NSUMpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9HU1NBUEkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX0lOVEVSQUNUSVZFKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAvKiB1bnN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKi8KKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIFNTSF9BVVRIX1BLRVlfSU5JVDoKKyAgICAgIGlmKCEoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkpIHsKKyAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKKyAgICAgIH0KKworICAgICAgLyogVHdvIGNob2ljZXMsICgxKSBwcml2YXRlIGtleSB3YXMgZ2l2ZW4gb24gQ01ELAorICAgICAgICogKDIpIHVzZSB0aGUgImRlZmF1bHQiIGtleXMuICovCisgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKSB7CisgICAgICAgIGlmKHNzaGMtPnB1YmtleSAmJiAhZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkKSB7CisgICAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfdHJ5X3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnB1YmtleSk7CisgICAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgICAgIHJjID0gU1NIX0FHQUlOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9maWxlKGRhdGEtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZzc2hjLT5wcml2a2V5KTsKKyAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBsb2FkIHByaXZhdGUga2V5IGZpbGUgJXMiLAorICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0pOworICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BLRVkpOworICAgICAgICBicmVhazsKKworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3B1YmxpY2tleV9hdXRvKHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QpOworICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgeworICAgICAgICAgIHJjID0gU1NIX0FHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgICByYyA9IFNTSF9PSzsKKyAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgcHVibGljIGtleSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfQVVUSF9QS0VZOgorICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBzc2hjLT5wcml2a2V5KTsKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7CisgICAgICAgIHJjID0gU1NIX0FHQUlOOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgeworICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uIChyYzogJWQpXG4iLCByYyk7CisgICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfR1NTQVBJOgorICAgICAgaWYoIShkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfR1NTQVBJKSkgeworICAgICAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7CisgICAgICB9CisKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2dzc2FwaShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgeworICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgcmMgPSBTU0hfT0s7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgZ3NzYXBpIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfS0VZX0lOSVQ6CisgICAgICBpZihkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBNT1ZFX1RPX0xBU1RfQVVUSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9LRVk6CisKKyAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCisgICAgICByYyA9IG15c3NoX2F1dGhfaW50ZXJhY3RpdmUoY29ubik7CisgICAgICBpZihyYyA9PSBTU0hfQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSBTU0hfT0spIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgImNvbXBsZXRlZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6CisgICAgICBpZighKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QQVNTV09SRCkpIHsKKyAgICAgICAgLyogSG9zdCBrZXkgYXV0aGVudGljYXRpb24gaXMgaW50ZW50aW9uYWxseSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTOgorICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcGFzc3dvcmQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIGNvbm4tPnBhc3N3ZCk7CisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgeworICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9ET05FOgorICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgeworICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKgorICAgICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGF1dGhlbnRpY2F0ZWQgc3NoIHNlc3Npb24uCisgICAgICAgKi8KKyAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZVxuIik7CisKKyAgICAgIEN1cmxfcGdyc1RpbWUoY29ubi0+ZGF0YSwgVElNRVJfQVBQQ09OTkVDVCk7ICAgICAgLyogU1NIIGlzIGNvbm5lY3RlZCAqLworCisgICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMSk7CisKKyAgICAgIHNzaGMtPnNmdHBfc2Vzc2lvbiA9IHNmdHBfbmV3KHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX3Nlc3Npb24pIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJjID0gc2Z0cF9pbml0KHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgcmMgPSBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBpbml0aWFsaXppbmcgc2Z0cCBzZXNzaW9uOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShzZnRwX2Vycm9yX3RvX0NVUkxFKHJjKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBTFBBVEgpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TRlRQX1JFQUxQQVRIOgorICAgICAgLyoKKyAgICAgICAqIEdldCB0aGUgImhvbWUiIGRpcmVjdG9yeQorICAgICAgICovCisgICAgICBzc2hjLT5ob21lZGlyID0gc2Z0cF9jYW5vbmljYWxpemVfcGF0aChzc2hjLT5zZnRwX3Nlc3Npb24sICIuIik7CisgICAgICBpZihzc2hjLT5ob21lZGlyID09IE5VTEwpIHsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9DT1VMRE5UX0NPTk5FQ1QpOworICAgICAgfQorICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IHNzaGMtPmhvbWVkaXI7CisKKyAgICAgIC8qIFRoaXMgaXMgdGhlIGxhc3Qgc3RlcCBpbiB0aGUgU0ZUUCBjb25uZWN0IHBoYXNlLiBEbyBub3RlIHRoYXQgd2hpbGUKKyAgICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgorICAgICAgICAgc2luY2UgdGhlIGhvbWVkaXIgd2lsbCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiByZXF1ZXN0IGJ1dCB0aGUKKyAgICAgICAgIHdvcmtpbmcgcGF0aCB3aWxsIG5vdC4gKi8KKyAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX0lOSVQ6CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnByb3RvcC0+cGF0aCk7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LnF1b3RlKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJTZW5kaW5nIHF1b3RlIGNvbW1hbmRzXG4iKTsKKyAgICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IGRhdGEtPnNldC5xdW90ZTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnBvc3RxdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucG9zdHF1b3RlOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFOgorICAgICAgLyogU2VuZCBhbnkgcXVvdGUgY29tbWFuZHMgKi8KKyAgICAgIHNmdHBfcXVvdGUoY29ubik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfTkVYVF9RVU9URToKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisKKyAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBzc2hjLT5xdW90ZV9pdGVtLT5uZXh0OworCisgICAgICBpZihzc2hjLT5xdW90ZV9pdGVtKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgc3NoYy0+bmV4dHN0YXRlKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUOgorICAgICAgc2Z0cF9xdW90ZV9zdGF0KGNvbm4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQ6CisgICAgICByYyA9IHNmdHBfc2V0c3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIGZhaWxmKGRhdGEsICJBdHRlbXB0IHRvIHNldCBTRlRQIHN0YXRzIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIC8qIHNzaGMtPmFjdHVhbGNvZGUgPSBzZnRwX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgICAqIHdlIGRvIG5vdCBzZW5kIHRoZSBhY3R1YWwgZXJyb3I7IHdlIHJldHVybgorICAgICAgICAgKiB0aGUgZXJyb3IgdGhlIGxpYnNzaDIgYmFja2VuZCBpcyByZXR1cm5pbmcgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgorICAgICAgcmMgPSBzZnRwX3N5bWxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAic3ltbGluayBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfTUtESVI6CisgICAgICByYyA9IHNmdHBfbWtkaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAobW9kZV90KWRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUkVOQU1FOgorICAgICAgcmMgPSBzZnRwX3JlbmFtZShzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJlbmFtZSBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6CisgICAgICByYyA9IHNmdHBfcm1kaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAicm1kaXIgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1VOTElOSzoKKyAgICAgIHJjID0gc2Z0cF91bmxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlM6CisgICAgeworICAgICAgc2Z0cF9zdGF0dmZzX3Qgc3RhdHZmczsKKworICAgICAgc3RhdHZmcyA9IHNmdHBfc3RhdHZmcyhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIGlmKCFzdGF0dmZzICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAic3RhdHZmcyBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZihzdGF0dmZzKSB7CisgICAgICAgIGNoYXIgKnRtcCA9IGFwcmludGYoInN0YXR2ZnM6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYnNpemU6ICVsbHVcbiIgImZfZnJzaXplOiAlbGx1XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYmxvY2tzOiAlbGx1XG4iICJmX2JmcmVlOiAlbGx1XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfYmF2YWlsOiAlbGx1XG4iICJmX2ZpbGVzOiAlbGx1XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfZmZyZWU6ICVsbHVcbiIgImZfZmF2YWlsOiAlbGx1XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfZnNpZDogJWxsdVxuIiAiZl9mbGFnOiAlbGx1XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZfbmFtZW1heDogJWxsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2JzaXplLCBzdGF0dmZzLT5mX2Zyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2Jsb2Nrcywgc3RhdHZmcy0+Zl9iZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2JhdmFpbCwgc3RhdHZmcy0+Zl9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2ZmcmVlLCBzdGF0dmZzLT5mX2ZhdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX2ZzaWQsIHN0YXR2ZnMtPmZfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLT5mX25hbWVtYXgpOworICAgICAgICBzZnRwX3N0YXR2ZnNfZnJlZShzdGF0dmZzKTsKKworICAgICAgICBpZighdG1wKSB7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICAgICAgZnJlZSh0bXApOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgorICAgICAgaWYoZGF0YS0+c2V0LmdldF9maWxldGltZSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9GSUxFVElNRSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfRklMRVRJTUU6CisgICAgeworICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOworCisgICAgICBhdHRycyA9IHNmdHBfc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCk7CisgICAgICBpZihhdHRycyAhPSAwKSB7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy0+bXRpbWU7CisgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6CisgICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYocHJvdG9wLT5wYXRoW3N0cmxlbihwcm90b3AtPnBhdGgpLTFdID09ICcvJykKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0lOSVQpOworICAgICAgICBlbHNlCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfVVBMT0FEX0lOSVQ6CisgICAgeworICAgICAgaW50IGZsYWdzOworCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAhPSAwKSB7CisgICAgICAgIHNmdHBfYXR0cmlidXRlcyBhdHRyczsKKworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICBhdHRycyA9IHNmdHBfc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCk7CisgICAgICAgICAgaWYoYXR0cnMgIT0gMCkgeworICAgICAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMtPnNpemU7CisgICAgICAgICAgICBpZihzaXplIDwgMCkgeworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBhdHRycy0+c2l6ZTsKKworICAgICAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoYXR0cnMpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9hcHBlbmQpCisgICAgICAgIC8qIFRyeSB0byBvcGVuIGZvciBhcHBlbmQsIGJ1dCBjcmVhdGUgaWYgbm9uZXhpc3RpbmcgKi8KKyAgICAgICAgZmxhZ3MgPSBPX1dST05MWXxPX0NSRUFUfE9fQVBQRU5EOworICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApCisgICAgICAgIC8qIElmIHdlIGhhdmUgcmVzdGFydCBwb3NpdGlvbiB0aGVuIG9wZW4gZm9yIGFwcGVuZCAqLworICAgICAgICBmbGFncyA9IE9fV1JPTkxZfE9fQVBQRU5EOworICAgICAgZWxzZQorICAgICAgICAvKiBDbGVhciBmaWxlIGJlZm9yZSB3cml0aW5nIChub3JtYWwgYmVoYXZpb3VyKSAqLworICAgICAgICBmbGFncyA9IE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQzsKKworICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKQorICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7CisgICAgICBzc2hjLT5zZnRwX2ZpbGUgPQorICAgICAgICBzZnRwX29wZW4oc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICBmbGFncywgKG1vZGVfdClkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMpOworICAgICAgaWYoIXNzaGMtPnNmdHBfZmlsZSkgeworICAgICAgICBlcnIgPSBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworCisgICAgICAgIGlmKCgoZXJyID09IFNTSF9GWF9OT19TVUNIX0ZJTEUgfHwgZXJyID09IFNTSF9GWF9GQUlMVVJFIHx8CisgICAgICAgICAgICAgZXJyID09IFNTSF9GWF9OT19TVUNIX1BBVEgpKSAmJgorICAgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKKyAgICAgICAgICAgICAoc3RybGVuKHByb3RvcC0+cGF0aCkgPiAxKSkpIHsKKyAgICAgICAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgdGhlIHBhdGggcmVtb3RlbHkgKi8KKyAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAxOworICAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBJZiB3ZSBoYXZlIGEgcmVzdGFydCBwb2ludCB0aGVuIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgY29ycmVjdAorICAgICAgICAgcG9zaXRpb24uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApIHsKKyAgICAgICAgLyogTGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaW5wdXQuICovCisgICAgICAgIGlmKGNvbm4tPnNlZWtfZnVuYykgeworICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFS19TRVQpOworICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19PSykgeworICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkID0gMDsKKworICAgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZWVrIHN0cmVhbSIpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBzZWVrZXJyID09IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgKGNhbid0IHNlZWsgdG8gb2Zmc2V0KSAqLworICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHNpemVfdCByZWFkdGhpc2Ftb3VudG5vdyA9CisgICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCA+IGRhdGEtPnNldC5idWZmZXJfc2l6ZSkgPworICAgICAgICAgICAgICAoc2l6ZV90KWRhdGEtPnNldC5idWZmZXJfc2l6ZSA6CisgICAgICAgICAgICAgIGN1cmx4X3NvdG91eihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCk7CisKKyAgICAgICAgICAgIHNpemVfdCBhY3R1YWxseXJlYWQgPQorICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkdGhpc2Ftb3VudG5vdywgZGF0YS0+c3RhdGUuaW4pOworCisgICAgICAgICAgICBwYXNzZWQgKz0gYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgaWYoKGFjdHVhbGx5cmVhZCA9PSAwKSB8fCAoYWN0dWFsbHlyZWFkID4gcmVhZHRoaXNhbW91bnRub3cpKSB7CisgICAgICAgICAgICAgIC8qIHRoaXMgY2hlY2tzIGZvciBncmVhdGVyLXRoYW4gb25seSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgQ1VSTF9SRUFERlVOQ19BQk9SVCByZXR1cm4gY29kZSBzdGlsbCBhYm9ydHMgKi8KKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWFkIGRhdGEiKTsKKyAgICAgICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSB3aGlsZShwYXNzZWQgPCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBub3csIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSByZWFkICovCisgICAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7CisgICAgICAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAtPSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7CisgICAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gc2Z0cF9zZWVrNjQoc3NoYy0+c2Z0cF9maWxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIGlmKHJjICE9IDApIHsKKyAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgfQorICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0CisgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KKyAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggc2Z0cCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAorICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOworCisgICAgICAvKiBzaW5jZSB3ZSBkb24ndCByZWFsbHkgd2FpdCBmb3IgYW55dGhpbmcgYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0aGUKKyAgICAgICAgIHN0YXRlIG1hY2hpbmUgdG8gbW92ZSBvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIHNldCBhIHZlcnkgc2hvcnQKKyAgICAgICAgIHRpbWVvdXQgaGVyZSAqLworICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQ6CisgICAgICBpZihzdHJsZW4ocHJvdG9wLT5wYXRoKSA+IDEpIHsKKyAgICAgICAgc3NoYy0+c2xhc2hfcG9zID0gcHJvdG9wLT5wYXRoICsgMTsgLyogaWdub3JlIHRoZSBsZWFkaW5nICcvJyAqLworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTOgorICAgICAgc3NoYy0+c2xhc2hfcG9zID0gc3RyY2hyKHNzaGMtPnNsYXNoX3BvcywgJy8nKTsKKyAgICAgIGlmKHNzaGMtPnNsYXNoX3BvcykgeworICAgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gMDsKKworICAgICAgICBpbmZvZihkYXRhLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICclcydcbiIsIHByb3RvcC0+cGF0aCk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVI6CisgICAgICAvKiAnbW9kZScgLSBwYXJhbWV0ZXIgaXMgcHJlbGltaW5hcnkgLSBkZWZhdWx0IHRvIDA2NDQgKi8KKyAgICAgIHJjID0gc2Z0cF9ta2Rpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAobW9kZV90KWRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKKyAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAnLyc7CisgICAgICArK3NzaGMtPnNsYXNoX3BvczsKKyAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBBYm9ydCBpZiBmYWlsdXJlIHdhc24ndCB0aGF0IHRoZSBkaXIgYWxyZWFkeSBleGlzdHMgb3IgdGhlCisgICAgICAgICAqIHBlcm1pc3Npb24gd2FzIGRlbmllZCAoY3JlYXRpb24gbWlnaHQgc3VjY2VlZCBmdXJ0aGVyIGRvd24gdGhlCisgICAgICAgICAqIHBhdGgpIC0gcmV0cnkgb24gdW5zcGVjaWZpYyBGQUlMVVJFIGFsc28KKyAgICAgICAgICovCisgICAgICAgIGVyciA9IHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGlmKChlcnIgIT0gU1NIX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCisgICAgICAgICAgIChlcnIgIT0gU1NIX0ZYX0ZBSUxVUkUpICYmCisgICAgICAgICAgIChlcnIgIT0gU1NIX0ZYX1BFUk1JU1NJT05fREVOSUVEKSkgeworICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOworICAgICAgICB9CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9JTklUOgorICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKKyAgICAgIGlmKGRhdGEtPnNldC5vcHRfbm9fYm9keSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKgorICAgICAgICogVGhpcyBpcyBhIGRpcmVjdG9yeSB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZ2V0LCBzbyBwcm9kdWNlIGEgZGlyZWN0b3J5CisgICAgICAgKiBsaXN0aW5nCisgICAgICAgKi8KKyAgICAgIHNzaGMtPnNmdHBfZGlyID0gc2Z0cF9vcGVuZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvcC0+cGF0aCk7CisgICAgICBpZighc3NoYy0+c2Z0cF9kaXIpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUjoKKworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9hdHRycykKKyAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9hdHRycyk7CisKKyAgICAgIHNzaGMtPnJlYWRkaXJfYXR0cnMgPSBzZnRwX3JlYWRkaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5zZnRwX2Rpcik7CisgICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKSB7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX2F0dHJzLT5uYW1lOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IHNzaGMtPnJlYWRkaXJfYXR0cnMtPmxvbmduYW1lOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSkgeworICAgICAgICAgIGNoYXIgKnRtcExpbmU7CisKKyAgICAgICAgICB0bXBMaW5lID0gYXByaW50ZigiJXNcbiIsIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICAgIGlmKHRtcExpbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBMaW5lLCBzc2hjLT5yZWFkZGlyX2xlbiArIDEpOworICAgICAgICAgIGZyZWUodG1wTGluZSk7CisKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBzaW5jZSB0aGlzIGNvdW50cyB3aGF0IHdlIHNlbmQgdG8gdGhlIGNsaWVudCwgd2UgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICBuZXdsaW5lIGluIHRoaXMgY291bnRlciAqLworICAgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9sZW4gKyAxOworCisgICAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworICAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULAorICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuID0gODAgKyBzc2hjLT5yZWFkZGlyX2N1cnJMZW47CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gY2FsbG9jKHNzaGMtPnJlYWRkaXJfdG90YWxMZW4sIDEpOworICAgICAgICAgIGlmKCFzc2hjLT5yZWFkZGlyX2xpbmUpIHsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgbWVtY3B5KHNzaGMtPnJlYWRkaXJfbGluZSwgc3NoYy0+cmVhZGRpcl9sb25nZW50cnksCisgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7CisgICAgICAgICAgaWYoKHNzaGMtPnJlYWRkaXJfYXR0cnMtPmZsYWdzICYgU1NIX0ZJTEVYRkVSX0FUVFJfUEVSTUlTU0lPTlMpICYmCisgICAgICAgICAgICAgKChzc2hjLT5yZWFkZGlyX2F0dHJzLT5wZXJtaXNzaW9ucyAmIFNfSUZNVCkgPT0KKyAgICAgICAgICAgICAgU19JRkxOSykpIHsKKyAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPSBtYWxsb2MoUEFUSF9NQVggKyAxKTsKKyAgICAgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGgsIFBBVEhfTUFYLCAiJXMlcyIsIHByb3RvcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9MSU5LKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc2Z0cF9kaXJfZW9mKHNzaGMtPnNmdHBfZGlyKSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gcmVtb3RlIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9MSU5LOgorICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQorICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOworCisgICAgICBzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMgPSBzZnRwX2xzdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisgICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMgPT0gMCkgeworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHJlYWQgc3ltbGluayBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOworICAgICAgfQorCisgICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWUgPT0gTlVMTCkgeworICAgICAgICBzc2hjLT5yZWFkZGlyX3RtcCA9IHNmdHBfcmVhZGxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX3RtcCk7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IHNzaGMtPnJlYWRkaXJfdG1wOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycy0+bmFtZSk7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWU7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5sb25nbmFtZTsKKyAgICAgIH0KKworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKKworICAgICAgLyogZ2V0IHJvb20gZm9yIHRoZSBmaWxlbmFtZSBhbmQgZXh0cmEgb3V0cHV0ICovCisgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuICs9IDQgKyBzc2hjLT5yZWFkZGlyX2xlbjsKKyAgICAgIG5ld19yZWFkZGlyX2xpbmUgPSBDdXJsX3NhZmVyZWFsbG9jKHNzaGMtPnJlYWRkaXJfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOworICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gTlVMTDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBuZXdfcmVhZGRpcl9saW5lOworCisgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGluZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtPiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworCisgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOworICAgICAgc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID0gTlVMTDsKKyAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBOVUxMOworICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBOVUxMOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9CT1RUT006CisgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGluZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwgIlxuIik7CisgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKKworICAgICAgaWYoIXJlc3VsdCkgeworCisgICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULCBzc2hjLT5yZWFkZGlyX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOworICAgICAgICB9CisgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9jdXJyTGVuOworICAgICAgfQorICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOworICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoc3NoYy0+cmVhZGRpcl90bXApOworICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0RPTkU6CisgICAgICBzZnRwX2Nsb3NlZGlyKHNzaGMtPnNmdHBfZGlyKTsKKyAgICAgIHNzaGMtPnNmdHBfZGlyID0gTlVMTDsKKworICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKKyAgICAgIC8qCisgICAgICAgKiBXb3JrIG9uIGdldHRpbmcgdGhlIHNwZWNpZmllZCBmaWxlCisgICAgICAgKi8KKyAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkKKyAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOworCisgICAgICBzc2hjLT5zZnRwX2ZpbGUgPSBzZnRwX29wZW4oc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT19SRE9OTFksIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2ZpbGUpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKworICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfU1RBVDoKKyAgICB7CisgICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7CisgICAgICBjdXJsX29mZl90IHNpemU7CisKKyAgICAgIGF0dHJzID0gc2Z0cF9mc3RhdChzc2hjLT5zZnRwX2ZpbGUpOworICAgICAgaWYoIWF0dHJzIHx8CisgICAgICAgICAgICAgICEoYXR0cnMtPmZsYWdzICYgU1NIX0ZJTEVYRkVSX0FUVFJfU0laRSkgfHwKKyAgICAgICAgICAgICAgKGF0dHJzLT5zaXplID09IDApKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNmdHBfZnN0YXQgZGlkbid0IHJldHVybiBhbiBlcnJvciwgc28gbWF5YmUgdGhlIHNlcnZlcgorICAgICAgICAgKiBqdXN0IGRvZXNuJ3Qgc3VwcG9ydCBzdGF0KCkKKyAgICAgICAgICogT1IgdGhlIHNlcnZlciBkb2Vzbid0IHJldHVybiBhIGZpbGUgc2l6ZSB3aXRoIGEgc3RhdCgpCisgICAgICAgICAqIE9SIGZpbGUgc2l6ZSBpcyAwCisgICAgICAgICAqLworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IC0xOworICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSAtMTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKKyAgICAgICAgc2l6ZSA9IDA7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc2l6ZSA9IGF0dHJzLT5zaXplOworCisgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKKworICAgICAgICBpZihzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgIH0KKyAgICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlKSB7CisgICAgICAgICAgY3VybF9vZmZfdCBmcm9tLCB0bzsKKyAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgY2hhciAqcHRyMjsKKyAgICAgICAgICBDVVJMb2ZmdCB0b190OworICAgICAgICAgIENVUkxvZmZ0IGZyb21fdDsKKworICAgICAgICAgIGZyb21fdCA9IGN1cmx4X3N0cnRvb2ZmdChjb25uLT5kYXRhLT5zdGF0ZS5yYW5nZSwgJnB0ciwgMCwgJmZyb20pOworICAgICAgICAgIGlmKGZyb21fdCA9PSBDVVJMX09GRlRfRkxPVykgeworICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOworICAgICAgICAgIH0KKyAgICAgICAgICB3aGlsZSgqcHRyICYmIChJU1NQQUNFKCpwdHIpIHx8ICgqcHRyID09ICctJykpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgdG9fdCA9IGN1cmx4X3N0cnRvb2ZmdChwdHIsICZwdHIyLCAwLCAmdG8pOworICAgICAgICAgIGlmKHRvX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpIHsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoKHRvX3QgPT0gQ1VSTF9PRkZUX0lOVkFMKSAvKiBubyAidG8iIHZhbHVlIGdpdmVuICovCisgICAgICAgICAgICAgfHwgKHRvID49IHNpemUpKSB7CisgICAgICAgICAgICB0byA9IHNpemUgLSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihmcm9tX3QpIHsKKyAgICAgICAgICAgIC8qIGZyb20gaXMgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICAgIGZyb20gPSBzaXplIC0gdG87CisgICAgICAgICAgICB0byA9IHNpemUgLSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihmcm9tID4gc2l6ZSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKKyAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgZnJvbSwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbSA+IHRvKSB7CisgICAgICAgICAgICBmcm9tID0gdG87CisgICAgICAgICAgICBzaXplID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzaXplID0gdG8gLSBmcm9tICsgMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByYyA9IHNmdHBfc2VlazY0KHNzaGMtPnNmdHBfZmlsZSwgZnJvbSk7CisgICAgICAgICAgaWYocmMgIT0gMCkgeworICAgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRhdGEtPnJlcS5zaXplID0gc2l6ZTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIHNpemUpOworICAgICAgfQorCisgICAgICAvKiBXZSBjYW4gcmVzdW1lIGlmIHdlIGNhbiBzZWVrIHRvIHRoZSByZXN1bWUgcG9zaXRpb24gKi8KKyAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgeworICAgICAgICAgIC8qIFdlJ3JlIHN1cHBvc2VkIHRvIGRvd25sb2FkIHRoZSBsYXN0IGFicyhmcm9tKSBieXRlcyAqLworICAgICAgICAgIGlmKChjdXJsX29mZl90KXNpemUgPCAtZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KKyAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBzaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGlmKChjdXJsX29mZl90KXNpemUgPCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAorICAgICAgICAgICAgICAgICAgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIE5vdyBzdG9yZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGFyZSBleHBlY3RlZCB0byBkb3dubG9hZCAqLworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisKKyAgICAgICAgcmMgPSBzZnRwX3NlZWs2NChzc2hjLT5zZnRwX2ZpbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgaWYocmMgIT0gMCkgeworICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogU2V0dXAgdGhlIGFjdHVhbCBkb3dubG9hZCAqLworICAgIGlmKGRhdGEtPnJlcS5zaXplID09IDApIHsKKyAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAgICAgaW5mb2YoZGF0YSwgIkZpbGUgYWxyZWFkeSBjb21wbGV0ZWx5IGRvd25sb2FkZWRcbiIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgLTEpOworCisgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7CisKKyAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3JlY2VpdmluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaCByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAorICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKKworICAgIGlmKHJlc3VsdCkgeworICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXI7IHRoZSBjbG9zZSBzdGF0ZSBzaG91bGQgYmUgZW50ZXJlZAorICAgICAgICAgYXQgdGhlIHRpbWUgdGhlIGVycm9yIG9jY3VycyAqLworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzc2hjLT5zZnRwX3JlY3Zfc3RhdGUgPSAwOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfQ0xPU0U6CisgICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpIHsKKyAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOworICAgICAgICBzc2hjLT5zZnRwX2ZpbGUgPSBOVUxMOworICAgICAgfQorICAgICAgQ3VybF9zYWZlZnJlZShwcm90b3AtPnBhdGgpOworCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNGVFAgRE9ORSBkb25lXG4iKSk7CisKKyAgICAgIC8qIENoZWNrIGlmIG5leHRzdGF0ZSBpcyBzZXQgYW5kIG1vdmUgLm5leHRzdGF0ZSBjb3VsZCBiZSBQT1NUUVVPVEVfSU5JVAorICAgICAgICAgQWZ0ZXIgbmV4dHN0YXRlIGlzIGV4ZWN1dGVkLCB0aGUgY29udHJvbCBzaG91bGQgY29tZSBiYWNrIHRvCisgICAgICAgICBTU0hfU0ZUUF9DTE9TRSB0byBwYXNzIHRoZSBjb3JyZWN0IHJlc3VsdCBiYWNrICAqLworICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSAmJgorICAgICAgICAgc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9TRlRQX0NMT1NFKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX0NMT1NFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIC8qIGR1cmluZyB0aW1lcyB3ZSBnZXQgaGVyZSBkdWUgdG8gYSBicm9rZW4gdHJhbnNmZXIgYW5kIHRoZW4gdGhlCisgICAgICAgICBzZnRwX2hhbmRsZSBtaWdodCBub3QgaGF2ZSBiZWVuIHRha2VuIGRvd24gc28gbWFrZSBzdXJlIHRoYXQgaXMgZG9uZQorICAgICAgICAgYmVmb3JlIHdlIHByb2NlZWQgKi8KKworICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKSB7CisgICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKKyAgICAgICAgc3NoYy0+c2Z0cF9maWxlID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgaWYoc3NoYy0+c2Z0cF9zZXNzaW9uKSB7CisgICAgICAgIHNmdHBfZnJlZShzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICBTU0hfU1RSSU5HX0ZSRUVfQ0hBUihzc2hjLT5ob21lZGlyKTsKKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIFNTSF9TQ1BfVFJBTlNfSU5JVDoKKyAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnByb3RvcC0+cGF0aCk7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogRnVuY3Rpb25zIGZyb20gdGhlIFNDUCBzdWJzeXN0ZW0gY2Fubm90IGhhbmRsZS9yZXR1cm4gU1NIX0FHQUlOICovCisgICAgICBzc2hfc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAxKTsKKworICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTQ1AgcmVxdWlyZXMgYSBrbm93biBmaWxlIHNpemUgZm9yIHVwbG9hZCIpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOworICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7CisgICAgICAgIH0KKworICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9CisgICAgICAgICAgc3NoX3NjcF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24sIFNTSF9TQ1BfV1JJVEUsIHByb3RvcC0+cGF0aCk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfVVBMT0FEX0lOSVQpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0KKyAgICAgICAgICBzc2hfc2NwX25ldyhzc2hjLT5zc2hfc2Vzc2lvbiwgU1NIX1NDUF9SRUFELCBwcm90b3AtPnBhdGgpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorCisgICAgICBpZighc3NoYy0+c2NwX3Nlc3Npb24pIHsKKyAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfVVBMT0FEX0lOSVQ6CisKKyAgICAgIHJjID0gc3NoX3NjcF9pbml0KHNzaGMtPnNjcF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICBlcnJfbXNnID0gc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOworICAgICAgfQorCisgICAgICByYyA9IHNzaF9zY3BfcHVzaF9maWxlKHNzaGMtPnNjcF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKKyAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICBlcnJfbXNnID0gc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOworICAgICAgfQorCisgICAgICAvKiB1cGxvYWQgZGF0YSAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgZGF0YS0+cmVxLnNpemUsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7CisKKyAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKKyAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLworICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKKworICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaCBzY3Agc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworCisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9ET1dOTE9BRF9JTklUOgorCisgICAgICByYyA9IHNzaF9zY3BfaW5pdChzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9DT1VMRE5UX0NPTk5FQ1QpOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU0NQX0RPV05MT0FEOnsKKyAgICAgICAgY3VybF9vZmZfdCBieXRlY291bnQ7CisKKyAgICAgICAgcmMgPSBzc2hfc2NwX3B1bGxfcmVxdWVzdChzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjICE9IFNTSF9TQ1BfUkVRVUVTVF9ORVdGSUxFKSB7CisgICAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOworICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRvd25sb2FkIGRhdGEgKi8KKyAgICAgICAgYnl0ZWNvdW50ID0gc3NoX3NjcF9yZXF1ZXN0X2dldF9zaXplKHNzaGMtPnNjcF9zZXNzaW9uKTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gKGN1cmxfb2ZmX3QpIGJ5dGVjb3VudDsKKyAgICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgYnl0ZWNvdW50LCBGQUxTRSwgLTEpOworCisgICAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKworICAgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3JlY2VpdmluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIGNhc2UgU1NIX1NDUF9ET05FOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9TRU5EX0VPRik7CisgICAgICBlbHNlCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1NFTkRfRU9GOgorICAgICAgaWYoc3NoYy0+c2NwX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBzc2hfc2NwX2Nsb3NlKHNzaGMtPnNjcF9zZXNzaW9uKTsKKyAgICAgICAgaWYocmMgPT0gU1NIX0FHQUlOKSB7CisgICAgICAgICAgLyogQ3VycmVudGx5IHRoZSBzc2hfc2NwX2Nsb3NlIGhhbmRsZXMgd2FpdGluZyBmb3IgRU9GIGluCisgICAgICAgICAgICogYmxvY2tpbmcgd2F5LgorICAgICAgICAgICAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gY2xvc2UgbGlic3NoIHNjcCBjaGFubmVsOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFOgorICAgICAgaWYoc3NoYy0+c2NwX3Nlc3Npb24pIHsKKyAgICAgICAgc3NoX3NjcF9mcmVlKHNzaGMtPnNjcF9zZXNzaW9uKTsKKyAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTQ1AgRE9ORSBwaGFzZSBjb21wbGV0ZVxuIikpOworCisgICAgICBzc2hfc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAwKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU0VTU0lPTl9ESVNDT05ORUNUOgorICAgICAgLyogZHVyaW5nIHdlaXJkIHRpbWVzIHdoZW4gd2UndmUgYmVlbiBwcmVtYXR1cmVseSBhYm9ydGVkLCB0aGUgY2hhbm5lbAorICAgICAgICAgaXMgc3RpbGwgYWxpdmUgd2hlbiB3ZSByZWFjaCB0aGlzIHN0YXRlIGFuZCB3ZSBNVVNUIGtpbGwgdGhlIGNoYW5uZWwKKyAgICAgICAgIHByb3Blcmx5IGZpcnN0ICovCisgICAgICBpZihzc2hjLT5zY3Bfc2Vzc2lvbikgeworICAgICAgICBzc2hfc2NwX2ZyZWUoc3NoYy0+c2NwX3Nlc3Npb24pOworICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIHNzaF9kaXNjb25uZWN0KHNzaGMtPnNzaF9zZXNzaW9uKTsKKworICAgICAgU1NIX1NUUklOR19GUkVFX0NIQVIoc3NoYy0+aG9tZWRpcik7CisgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgU1NIX1NFU1NJT05fRlJFRToKKyAgICAgIGlmKHNzaGMtPnNzaF9zZXNzaW9uKSB7CisgICAgICAgIHNzaF9mcmVlKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgc3NoYy0+c3NoX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICAvKiB3b3JzdC1jYXNlIHNjZW5hcmlvIGNsZWFudXAgKi8KKworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCk7CisgICAgICBERUJVR0FTU0VSVChzc2hjLT5zY3Bfc2Vzc2lvbiA9PSBOVUxMKTsKKworICAgICAgaWYoc3NoYy0+cmVhZGRpcl90bXApIHsKKyAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoc3NoYy0+cmVhZGRpcl90bXApOworICAgICAgICBzc2hjLT5yZWFkZGlyX3RtcCA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzKQorICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5xdW90ZV9hdHRycyk7CisKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfYXR0cnMpCisgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnJlYWRkaXJfYXR0cnMpOworCisgICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpCisgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycyk7CisKKyAgICAgIGlmKHNzaGMtPnByaXZrZXkpCisgICAgICAgIHNzaF9rZXlfZnJlZShzc2hjLT5wcml2a2V5KTsKKyAgICAgIGlmKHNzaGMtPnB1YmtleSkKKyAgICAgICAgc3NoX2tleV9mcmVlKHNzaGMtPnB1YmtleSk7CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKKyAgICAgIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHNzaGMtPmhvbWVkaXIpOworCisgICAgICAvKiB0aGUgY29kZSB3ZSBhcmUgYWJvdXQgdG8gcmV0dXJuICovCisgICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlOworCisgICAgICBtZW1zZXQoc3NoYywgMCwgc2l6ZW9mKHN0cnVjdCBzc2hfY29ubikpOworCisgICAgICBjb25uY2xvc2UoY29ubiwgIlNTSCBzZXNzaW9uIGZyZWUiKTsKKyAgICAgIHNzaGMtPnN0YXRlID0gU1NIX1NFU1NJT05fRlJFRTsgICAvKiBjdXJyZW50ICovCisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1FVSVQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCwganVzdCBzdG9wISAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBpbnRlcm5hbCBlcnJvciAqLworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICB9CisgIH0gd2hpbGUoIXJjICYmIChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkpOworCisKKyAgaWYocmMgPT0gU1NIX0FHQUlOKSB7CisgICAgLyogd2Ugd291bGQgYmxvY2ssIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZSByZWFkeSAoaW4gdGhlCisgICAgICAgcmlnaHQgZGlyZWN0aW9uIHRvbykhICovCisgICAgKmJsb2NrID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKSB0byB3YWl0IGZvciBhbmQKKyAgIGZvciB3aGF0IGFjdGlvbnMgaW4gdGhlIERPX0RPTkUsIFBFUkZPUk0gYW5kIFdBSVRQRVJGT1JNIHN0YXRlcyAqLworc3RhdGljIGludCBteXNzaF9wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7CisgIHNvY2tbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKworICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9SRUNWKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworLyogR2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpCisgICB0byB3YWl0IGZvciBhbmQgZm9yIHdoYXQgYWN0aW9ucyBkdXJpbmcgdGhlIERPSU5HIGFuZCBQUk9UT0NPTk5FQ1Qgc3RhdGVzKi8KK3N0YXRpYyBpbnQgbXlzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgLyogaWYgd2Uga25vdyB0aGUgZGlyZWN0aW9uIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgKl9nZXRzb2NrKCkgZnVuY3Rpb24gZXZlbgorICAgICBmb3IgdGhlIHByb3RvY29sX2Nvbm5lY3QgYW5kIGRvaW5nIHN0YXRlcyAqLworICByZXR1cm4gbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOworfQorCitzdGF0aWMgdm9pZCBteXNzaF9ibG9jazJ3YWl0Zm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBibG9jaykKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisKKyAgLyogSWYgaXQgZGlkbid0IGJsb2NrLCBvciBub3RoaW5nIHdhcyByZXR1cm5lZCBieSBzc2hfZ2V0X3BvbGxfZmxhZ3MKKyAgICogaGF2ZSB0aGUgb3JpZ2luYWwgc2V0ICovCisgIGNvbm4tPndhaXRmb3IgPSBzc2hjLT5vcmlnX3dhaXRmb3I7CisKKyAgaWYoYmxvY2spIHsKKyAgICBpbnQgZGlyID0gc3NoX2dldF9wb2xsX2ZsYWdzKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICBpZihkaXIgJiBTU0hfUkVBRF9QRU5ESU5HKSB7CisgICAgICAvKiB0cmFuc2xhdGUgdGhlIGxpYnNzaCBkZWZpbmUgYml0cyBpbnRvIG91ciBvd24gYml0IGRlZmluZXMgKi8KKyAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgfQorICAgIGVsc2UgaWYoZGlyICYgU1NIX1dSSVRFX1BFTkRJTkcpIHsKKyAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgfQorICB9Cit9CisKKy8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIGJvb2wgYmxvY2s7ICAgIC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCisgIENVUkxjb2RlIHJlc3VsdCA9IG15c3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKworICAqZG9uZSA9IChzc2hjLT5zdGF0ZSA9PSBTU0hfU1RPUCkgPyBUUlVFIDogRkFMU0U7CisgIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgYmxvY2spOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBteXNzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRpc2Nvbm5lY3QpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7CisgICAgYm9vbCBibG9jazsKKyAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOworICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOworCisgICAgcmVzdWx0ID0gbXlzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYoIWRpc2Nvbm5lY3QpIHsKKyAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKworICAgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgRkFMU0UpOworICAgICAgaWYobGVmdCA8IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihibG9jaykgeworICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgICAgICAvKiB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlY29tZSByZWFkeSAqLworICAgICAgKHZvaWQpIEN1cmxfc29ja2V0X2NoZWNrKGZkX3JlYWQsIENVUkxfU09DS0VUX0JBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQsIGxlZnQgPiAxMDAwID8gMTAwMCA6IGxlZnQpOworICAgIH0KKworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFNTSCBzZXR1cCBjb25uZWN0aW9uCisgKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNTSFBST1RPICpzc2g7CisKKyAgY29ubi0+ZGF0YS0+cmVxLnByb3RvcCA9IHNzaCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IFNTSFBST1RPKSk7CisgIGlmKCFzc2gpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ3VybF9yZWN2IHNjcF9yZWN2LCBzZnRwX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHNjcF9zZW5kLCBzZnRwX3NlbmQ7CisKKy8qCisgKiBDdXJsX3NzaF9jb25uZWN0KCkgZ2V0cyBjYWxsZWQgZnJvbSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoKSB0byBhbGxvdyB1cyB0bworICogZG8gcHJvdG9jb2wtc3BlY2lmaWMgYWN0aW9ucyBhdCBjb25uZWN0LXRpbWUuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2g7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oY29ubik7CisKKyAgLyogV2UgZGVmYXVsdCB0byBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXZSBzZXQgdGhpcyBhbHJlYWR5IGluIHRoaXMgY29ubmVjdAorICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCisgIGNvbm5rZWVwKGNvbm4sICJTU0ggZGVmYXVsdCIpOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgeworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2NwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzY3Bfc2VuZDsKKyAgfQorICBlbHNlIHsKKyAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNmdHBfcmVjdjsKKyAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNmdHBfc2VuZDsKKyAgfQorCisgIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOworCisgIHNzaC0+c3NoX3Nlc3Npb24gPSBzc2hfbmV3KCk7CisgIGlmKHNzaC0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpc2luZyBzc2ggc2Vzc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19GRCwgJnNvY2spOworCisgIGlmKGNvbm4tPnVzZXIpIHsKKyAgICBpbmZvZihkYXRhLCAiVXNlcjogJXNcbiIsIGNvbm4tPnVzZXIpOworICAgIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19VU0VSLCBjb25uLT51c2VyKTsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSkgeworICAgIGluZm9mKGRhdGEsICJLbm93biBob3N0czogJXNcbiIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0tOT1dOSE9TVFMsCisgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgIH0KKworICBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgY29ubi0+aG9zdC5uYW1lKTsKKyAgaWYoY29ubi0+cmVtb3RlX3BvcnQpCisgICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICZjb25uLT5yZW1vdGVfcG9ydCk7CisKKyAgaWYoZGF0YS0+c2V0LnNzaF9jb21wcmVzc2lvbikgeworICAgIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19DT01QUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgInpsaWIsemxpYkBvcGVuc3NoLmNvbSxub25lIik7CisgIH0KKworICBzc2gtPnByaXZrZXkgPSBOVUxMOworICBzc2gtPnB1YmtleSA9IE5VTEw7CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldKSB7CisgICAgaW50IHJjID0gc3NoX3BraV9pbXBvcnRfcHVia2V5X2ZpbGUoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2gtPnB1YmtleSk7CisgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGxvYWQgcHVibGljIGtleSBmaWxlIik7CisgICAgICAvKiBpZ25vcmUgKi8KKyAgICB9CisgIH0KKworICAvKiB3ZSBkbyBub3QgdmVyaWZ5IGhlcmUsIHdlIGRvIGl0IGF0IHRoZSBzdGF0ZSBtYWNoaW5lLAorICAgKiBhZnRlciBjb25uZWN0aW9uICovCisKKyAgc3RhdGUoY29ubiwgU1NIX0lOSVQpOworCisgIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2NwX3BlcmZvcm0oKQorICoKKyAqIFRoaXMgaXMgdGhlIGFjdHVhbCBETyBmdW5jdGlvbiBmb3IgU0NQLiBHZXQgYSBmaWxlIGFjY29yZGluZyB0bworICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KKyAqLworCitzdGF0aWMKK0NVUkxjb2RlIHNjcF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOworCisgICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgICAgICAgIC8qIG5vdCBkb25lIHlldCAqLworCisgIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLworICBzdGF0ZShjb25uLCBTU0hfU0NQX1RSQU5TX0lOSVQpOworCisgIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9faXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIGJvb2wgY29ubmVjdGVkID0gMDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgICpkb25lID0gRkFMU0U7ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgdG8gZmFsc2UgKi8KKworICBkYXRhLT5yZXEuc2l6ZSA9IC0xOyAgICAgICAgICAvKiBtYWtlIHN1cmUgdGhpcyBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KKworICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7ICAvKiByZXNldCBlcnJvciBjb2RlICovCisgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOyAgIC8qIHJlc2V0IHRoZSBjcmVhdGUgZGlyIGF0dGVtcHQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKi8KKworICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXREb3dubG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgLTEpOworICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkKKyAgICByZXN1bHQgPSBzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCBkb25lKTsKKyAgZWxzZQorICAgIHJlc3VsdCA9IHNmdHBfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCBkb25lKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KKyAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCisgICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IHNzaF9jb25uICpzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKKworICBpZihzc2gtPnNzaF9zZXNzaW9uKSB7CisgICAgLyogb25seSBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBzdGlsbCBhcm91bmQgdG8gdXNlISAqLworCisgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisKKyAgICByZXN1bHQgPSBteXNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCisgICBkb25lIGZ1bmN0aW9ucyAqLworc3RhdGljIENVUkxjb2RlIG15c3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU1NIUFJPVE8gKnByb3RvcCA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisKKyAgaWYoIXN0YXR1cykgeworICAgIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLworICAgIHJlc3VsdCA9IG15c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHN0YXR1czsKKworICBpZihwcm90b3ApCisgICAgQ3VybF9zYWZlZnJlZShwcm90b3AtPnBhdGgpOworICBpZihDdXJsX3BncnNEb25lKGNvbm4pKQorICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgIGNvbm4tPmRhdGEtPnJlcS5rZWVwb24gPSAwOyAgIC8qIGNsZWFyIGFsbCBiaXRzICovCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICAodm9pZCkgcHJlbWF0dXJlOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLworCisgIGlmKCFzdGF0dXMpCisgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET05FKTsKKworICByZXR1cm4gbXlzc2hfZG9uZShjb25uLCBzdGF0dXMpOworCit9CisKK3N0YXRpYyBzc2l6ZV90IHNjcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgaW50IHJjOworICAodm9pZCkgc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworICAodm9pZCkgZXJyOworCisgIHJjID0gc3NoX3NjcF93cml0ZShjb25uLT5wcm90by5zc2hjLnNjcF9zZXNzaW9uLCBtZW0sIGxlbik7CisKKyNpZiAwCisgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBtaXNsZWFkaW5nLCBtb3N0bHkgYWRkZWQgYXMgd2lzaGZ1bCB0aGlua2luZworICAgKiB0aGF0IGxpYnNzaCBhdCBzb21lIHBvaW50IHdpbGwgaW1wbGVtZW50IG5vbi1ibG9ja2luZyBzc2hfc2NwX3dyaXRlL3JlYWQuCisgICAqIEN1cnJlbnRseSByYyBjYW4gb25seSBiZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciBTU0hfRVJST1IuICovCisgIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKHJjID09IFNTSF9BR0FJTikgPyBUUlVFIDogRkFMU0UpOworCisgIGlmKHJjID09IFNTSF9BR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlCisjZW5kaWYKKyAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgKmVyciA9IENVUkxFX1NTSDsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbnJlYWQ7CisgICh2b2lkKSBlcnI7CisgICh2b2lkKSBzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCisKKyAgLyogbGlic3NoIHJldHVybnMgaW50ICovCisgIG5yZWFkID0gc3NoX3NjcF9yZWFkKGNvbm4tPnByb3RvLnNzaGMuc2NwX3Nlc3Npb24sIG1lbSwgbGVuKTsKKworI2lmIDAKKyAgLyogVGhlIGZvbGxvd2luZyBjb2RlIGlzIG1pc2xlYWRpbmcsIG1vc3RseSBhZGRlZCBhcyB3aXNoZnVsIHRoaW5raW5nCisgICAqIHRoYXQgbGlic3NoIGF0IHNvbWUgcG9pbnQgd2lsbCBpbXBsZW1lbnQgbm9uLWJsb2NraW5nIHNzaF9zY3Bfd3JpdGUvcmVhZC4KKyAgICogQ3VycmVudGx5IHJjIGNhbiBvbmx5IGJlIFNTSF9PSyBvciBTU0hfRVJST1IuICovCisKKyAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gU1NIX0FHQUlOKSA/IFRSVUUgOiBGQUxTRSk7CisgIGlmKG5yZWFkID09IFNTSF9BR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBucmVhZCA9IC0xOworICB9CisjZW5kaWYKKworICByZXR1cm4gbnJlYWQ7Cit9CisKKy8qCisgKiA9PT09PT09PT09PT09PT0gU0ZUUCA9PT09PT09PT09PT09PT0KKyAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2Z0cF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNGVFAuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bworICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KKyAqLworCitzdGF0aWMKK0NVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLworCisgIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9JTklUKTsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCisgICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgorICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLworc3RhdGljIENVUkxjb2RlIHNmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIHN0YXJ0cyBub3dcbiIpKTsKKworICBpZihjb25uLT5wcm90by5zc2hjLnNzaF9zZXNzaW9uKSB7CisgICAgLyogb25seSBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBzdGlsbCBhcm91bmQgdG8gdXNlISAqLworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1NIVVRET1dOKTsKKyAgICByZXN1bHQgPSBteXNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBQb3N0IHF1b3RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgU0ZUUF9DTE9TRSBzdGF0ZSB0byBhdm9pZAorICAgICAgIGVycm9ycyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gb3BlbiBmaWxlIGhhbmRsZXMgZHVyaW5nIFBPU1RRVU9URQorICAgICAgIG9wZXJhdGlvbiAqLworICAgIGlmKCFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSAmJiAhY29ubi0+Yml0cy5yZXRyeSkKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgfQorICByZXR1cm4gbXlzc2hfZG9uZShjb25uLCBzdGF0dXMpOworfQorCisvKiByZXR1cm4gbnVtYmVyIG9mIHNlbnQgYnl0ZXMgKi8KK3N0YXRpYyBzc2l6ZV90IHNmdHBfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG53cml0ZTsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG53cml0ZSA9IHNmdHBfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGUsIG1lbSwgbGVuKTsKKworICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIEZBTFNFKTsKKworI2lmIDAgLyogbm90IHJldHVybmVkIGJ5IGxpYnNzaCBvbiB3cml0ZSAqLworICBpZihud3JpdGUgPT0gU1NIX0FHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG53cml0ZSA9IDA7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgIGlmKG53cml0ZSA8IDApIHsKKyAgICAqZXJyID0gQ1VSTEVfU1NIOworICAgIG53cml0ZSA9IC0xOworICB9CisKKyAgcmV0dXJuIG53cml0ZTsKK30KKworLyoKKyAqIFJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMKKyAqIG9yIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkOworICAodm9pZClzb2NraW5kZXg7CisKKyAgREVCVUdBU1NFUlQobGVuIDwgQ1VSTF9NQVhfUkVBRF9TSVpFKTsKKworICBzd2l0Y2goY29ubi0+cHJvdG8uc3NoYy5zZnRwX3JlY3Zfc3RhdGUpIHsKKyAgICBjYXNlIDA6CisgICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZV9pbmRleCA9CisgICAgICAgICAgICBzZnRwX2FzeW5jX3JlYWRfYmVnaW4oY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KWxlbik7CisgICAgICBpZihjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZV9pbmRleCA8IDApIHsKKyAgICAgICAgKmVyciA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIDE6CisgICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfcmVjdl9zdGF0ZSA9IDE7CisKKyAgICAgIG5yZWFkID0gc2Z0cF9hc3luY19yZWFkKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtLCAodWludDMyX3QpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGVfaW5kZXgpOworCisgICAgICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBTU0hfQUdBSU4pP1RSVUU6RkFMU0UpOworCisgICAgICBpZihucmVhZCA9PSBTU0hfQUdBSU4pIHsKKyAgICAgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICBlbHNlIGlmKG5yZWFkIDwgMCkgeworICAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorCisgICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfcmVjdl9zdGF0ZSA9IDA7CisgICAgICByZXR1cm4gbnJlYWQ7CisKKyAgICBkZWZhdWx0OgorICAgICAgLyogd2UgbmV2ZXIgcmVhY2ggaGVyZSAqLworICAgICAgcmV0dXJuIC0xOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHNmdHBfcXVvdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBjb25zdCBjaGFyICpjcDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBTU0hQUk9UTyAqcHJvdG9wID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIENVUkxjb2RlIHJlc3VsdDsKKworICAvKgorICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCisgICAqLworICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOworICBzc2hjLT5hY2NlcHRmYWlsID0gRkFMU0U7CisKKyAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgorICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKKyAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCisgICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KKworICBpZihjbWRbMF0gPT0gJyonKSB7CisgICAgY21kKys7CisgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7CisgIH0KKworICBpZihzdHJjYXNlY29tcGFyZSgicHdkIiwgY21kKSkgeworICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KKyAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvcC0+cGF0aCk7CisgICAgaWYoIXRtcCkgeworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopICJQV0RcbiIsIDQpOworICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOworICAgIH0KKyAgICAvKiB0aGlzIHNlbmRzIGFuIEZUUC1saWtlICJoZWFkZXIiIHRvIHRoZSBoZWFkZXIgY2FsbGJhY2sgc28gdGhhdCB0aGUKKyAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgorICAgICAgIHVzaW5nIG9yZGluYXJ5IEZUUC4gKi8KKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIHRtcCwgc3RybGVuKHRtcCkpOworICAgIGZyZWUodG1wKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgIHJldHVybjsKKyAgfQorCisgIC8qCisgICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCisgICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5CisgICAqLworICBjcCA9IHN0cmNocihjbWQsICcgJyk7CisgIGlmKGNwID09IE5VTEwpIHsKKyAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIFNGVFAgY29tbWFuZC4gU3VwcGx5IHBhcmFtZXRlcihzKSEiKTsKKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICByZXR1cm47CisgIH0KKworICAvKgorICAgKiBhbHNvLCBldmVyeSBjb21tYW5kIHRha2VzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCBzbyB3ZSBnZXQgdGhhdAorICAgKiBmaXJzdCBhcmd1bWVudCByaWdodCBub3cKKyAgICovCisgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgxLCBzc2hjLT5ob21lZGlyKTsKKyAgaWYocmVzdWx0KSB7CisgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgIGVsc2UKKyAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IEJhZCBmaXJzdCBwYXJhbWV0ZXIiKTsKKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgcmV0dXJuOworICB9CisKKyAgLyoKKyAgICogU0ZUUCBpcyBhIGJpbmFyeSBwcm90b2NvbCwgc28gd2UgZG9uJ3Qgc2VuZCB0ZXh0IGNvbW1hbmRzCisgICAqIHRvIHRoZSBzZXJ2ZXIuIEluc3RlYWQsIHdlIHNjYW4gZm9yIGNvbW1hbmRzIHVzZWQgYnkKKyAgICogT3BlblNTSCdzIHNmdHAgcHJvZ3JhbSBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbGlic3NoCisgICAqIGZ1bmN0aW9ucy4KKyAgICovCisgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCAiLCA2KSB8fAorICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QgIiwgNikgfHwKKyAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duICIsIDYpKSB7CisgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLworCisgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCisgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgZWxzZQorICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGNoZ3JwL2NobW9kL2Nob3duOiAiCisgICAgICAgICAgICAgICJCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzc2hjLT5xdW90ZV9hdHRycyA9IE5VTEw7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVCk7CisgICAgcmV0dXJuOworICB9CisgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJsbiAiLCAzKSB8fAorICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAic3ltbGluayAiLCA4KSkgeworICAgIC8qIHN5bWJvbGljIGxpbmtpbmcgKi8KKyAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBpcyB0aGUgc291cmNlICovCisgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgZWxzZQorICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGxuL3N5bWxpbms6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NZTUxJTkspOworICAgIHJldHVybjsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJta2RpciAiLCA2KSkgeworICAgIC8qIGNyZWF0ZSBkaXIgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9NS0RJUik7CisgICAgcmV0dXJuOworICB9CisgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJlbmFtZSAiLCA3KSkgeworICAgIC8qIHJlbmFtZSBmaWxlICovCisgICAgLyogZmlyc3QgcGFyYW0gaXMgdGhlIHNvdXJjZSBwYXRoICovCisgICAgLyogc2Vjb25kIHBhcmFtIGlzIHRoZSBkZXN0LiBwYXRoICovCisgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOworICAgIGlmKHJlc3VsdCkgeworICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7CisgICAgICBlbHNlCisgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gcmVuYW1lOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9SRU5BTUUpOworICAgIHJldHVybjsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybWRpciAiLCA2KSkgeworICAgIC8qIGRlbGV0ZSBkaXIgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9STURJUik7CisgICAgcmV0dXJuOworICB9CisgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtICIsIDMpKSB7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfVU5MSU5LKTsKKyAgICByZXR1cm47CisgIH0KKyNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCisgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInN0YXR2ZnMgIiwgOCkpIHsKKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTKTsKKyAgICByZXR1cm47CisgIH0KKyNlbmRpZgorCisgIGZhaWxmKGRhdGEsICJVbmtub3duIFNGVFAgY29tbWFuZCIpOworICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkIHNmdHBfcXVvdGVfc3RhdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKKyAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgIC8qIGlmIGEgY29tbWFuZCBzdGFydHMgd2l0aCBhbiBhc3Rlcmlzaywgd2hpY2ggYSBsZWdhbCBTRlRQIGNvbW1hbmQgbmV2ZXIKKyAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55CisgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCisKKyAgaWYoY21kWzBdID09ICcqJykgeworICAgIGNtZCsrOworICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOworICB9CisKKyAgLyogV2UgcmVhZCB0aGUgZmlsZSBhdHRyaWJ1dGVzLCBzdG9yZSB0aGVtIGluIHNzaGMtPnF1b3RlX2F0dHJzCisgICAqIGFuZCBtb2RpZnkgdGhlbSBhY2NvcmRpbmdseSB0byBjb21tYW5kLiBUaGVuIHdlIHN3aXRjaCB0bworICAgKiBRVU9URV9TRVRTVEFUIHN0YXRlIHRvIHdyaXRlIG5ldyBvbmVzLgorICAgKi8KKworICBpZihzc2hjLT5xdW90ZV9hdHRycykKKyAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5xdW90ZV9hdHRycyk7CisgIHNzaGMtPnF1b3RlX2F0dHJzID0gc2Z0cF9zdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIpOworICBpZihzc2hjLT5xdW90ZV9hdHRycyA9PSBOVUxMKSB7CisgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gZ2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlZCIsCisgICAgICAgICAgc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogTm93IHNldCB0aGUgbmV3IGF0dHJpYnV0ZXMuLi4gKi8KKyAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwIiwgNSkpIHsKKyAgICBzc2hjLT5xdW90ZV9hdHRycy0+Z2lkID0gKHVpbnQzMl90KXN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKKyAgICBpZihzc2hjLT5xdW90ZV9hdHRycy0+Z2lkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCisgICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hncnAgZ2lkIG5vdCBhIG51bWJlciIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzc2hjLT5xdW90ZV9hdHRycy0+ZmxhZ3MgfD0gU1NIX0ZJTEVYRkVSX0FUVFJfVUlER0lEOworICB9CisgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKKyAgICBtb2RlX3QgcGVybXM7CisgICAgcGVybXMgPSAobW9kZV90KXN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDgpOworICAgIC8qIHBlcm1pc3Npb25zIGFyZSBvY3RhbCAqLworICAgIGlmKHBlcm1zID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2htb2QgcGVybWlzc2lvbnMgbm90IGEgbnVtYmVyIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5wZXJtaXNzaW9ucyA9IHBlcm1zOworICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5mbGFncyB8PSBTU0hfRklMRVhGRVJfQVRUUl9QRVJNSVNTSU9OUzsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG93biIsIDUpKSB7CisgICAgc3NoYy0+cXVvdGVfYXR0cnMtPnVpZCA9ICh1aW50MzJfdClzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMtPnVpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgorICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNob3duIHVpZCBub3QgYSBudW1iZXIiKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3NoYy0+cXVvdGVfYXR0cnMtPmZsYWdzIHw9IFNTSF9GSUxFWEZFUl9BVFRSX1VJREdJRDsKKyAgfQorCisgIC8qIE5vdyBzZW5kIHRoZSBjb21wbGV0ZWQgc3RydWN0dXJlLi4uICovCisgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQpOworICByZXR1cm47Cit9CisKK0NVUkxjb2RlIEN1cmxfc3NoX2luaXQodm9pZCkKK3sKKyAgaWYoc3NoX2luaXQoKSkgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBsaWJzc2hfaW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCit2b2lkIEN1cmxfc3NoX2NsZWFudXAodm9pZCkKK3sKKyAgKHZvaWQpc3NoX2ZpbmFsaXplKCk7Cit9CisKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgImxpYnNzaC8lcyIsIENVUkxfTElCU1NIX1ZFUlNJT04pOworfQorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTRV9MSUJTU0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoMi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC9saWJzc2gyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwNDM3NAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoMi5jCkBAIC0wLDAgKzEsMzUwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAjZGVmaW5lIENVUkxfTElCU1NIMl9ERUJVRyAqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX0xJQlNTSDIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSA8bGlic3NoMi5oPgorI2luY2x1ZGUgPGxpYnNzaDJfc2Z0cC5oPgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VUU05BTUVfSAorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgX19WTVMKKyNpbmNsdWRlIDxpbi5oPgorI2luY2x1ZGUgPGluZXQuaD4KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoTkVUV0FSRSkgJiYgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pKQorI3VuZGVmIGluX2FkZHJfdAorI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzcGVlZGNoZWNrLmgiCisjaW5jbHVkZSAiZ2V0aW5mby5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKKyNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJwYXJzZWRhdGUuaCIgLyogZm9yIHRoZSB3ZWVrIGRheSBhbmQgbW9udGggbmFtZXMgKi8KKyNpbmNsdWRlICJzb2NrYWRkci5oIiAvKiByZXF1aXJlZCBmb3IgQ3VybF9zb2NrYWRkcl9zdG9yYWdlICovCisjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAiY3VybF9wYXRoLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDYKKy8qIGxpYnNzaDJfc2Z0cF9zdGF0dmZzIGFuZCBmcmllbmRzIHdlcmUgYWRkZWQgaW4gMS4yLjYgKi8KKyNkZWZpbmUgSEFTX1NUQVRWRlNfU1VQUE9SVCAxCisjZW5kaWYKKworI2RlZmluZSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzKSBjdXJseF91bHRvc2kobGlic3NoMl9zZnRwX2xhc3RfZXJyb3IocykpCisKKyNkZWZpbmUgc2Z0cF9saWJzc2gyX3JlYWxwYXRoKHMscCx0LG0pIFwKKyAgICAgICAgbGlic3NoMl9zZnRwX3N5bWxpbmtfZXgoKHMpLCAocCksIGN1cmx4X3V6dG91aShzdHJsZW4ocCkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0KSwgKG0pLCBMSUJTU0gyX1NGVFBfUkVBTFBBVEgpCisKKworLyogTG9jYWwgZnVuY3Rpb25zOiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNmdHBfbGlic3NoMl9zdHJlcnJvcihpbnQgZXJyKTsKK3N0YXRpYyBMSUJTU0gyX0FMTE9DX0ZVTkMobXlfbGlic3NoMl9tYWxsb2MpOworc3RhdGljIExJQlNTSDJfUkVBTExPQ19GVU5DKG15X2xpYnNzaDJfcmVhbGxvYyk7CitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKTsKKworc3RhdGljIENVUkxjb2RlIHNzaF9mb3JjZV9rbm93bmhvc3Rfa2V5X3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbik7CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIGludCBzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisvKgorICogU0NQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0geworICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzY3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2NwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2NwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NDUCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKworLyoKKyAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0geworICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2Z0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2Z0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKK3N0YXRpYyB2b2lkCitrYmRfY2FsbGJhY2soY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICppbnN0cnVjdGlvbiwKKyAgICAgICAgICAgICBpbnQgaW5zdHJ1Y3Rpb25fbGVuLCBpbnQgbnVtX3Byb21wdHMsCisgICAgICAgICAgICAgY29uc3QgTElCU1NIMl9VU0VSQVVUSF9LQkRJTlRfUFJPTVBUICpwcm9tcHRzLAorICAgICAgICAgICAgIExJQlNTSDJfVVNFUkFVVEhfS0JESU5UX1JFU1BPTlNFICpyZXNwb25zZXMsCisgICAgICAgICAgICAgdm9pZCAqKmFic3RyYWN0KQoreworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopKmFic3RyYWN0OworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGZwcmludGYoc3RkZXJyLCAibmFtZT0lc1xuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAibmFtZV9sZW49JWRcbiIsIG5hbWVfbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJpbnN0cnVjdGlvbj0lc1xuIiwgaW5zdHJ1Y3Rpb24pOworICBmcHJpbnRmKHN0ZGVyciwgImluc3RydWN0aW9uX2xlbj0lZFxuIiwgaW5zdHJ1Y3Rpb25fbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJudW1fcHJvbXB0cz0lZFxuIiwgbnVtX3Byb21wdHMpOworI2Vsc2UKKyAgKHZvaWQpbmFtZTsKKyAgKHZvaWQpbmFtZV9sZW47CisgICh2b2lkKWluc3RydWN0aW9uOworICAodm9pZClpbnN0cnVjdGlvbl9sZW47CisjZW5kaWYgIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworICBpZihudW1fcHJvbXB0cyA9PSAxKSB7CisgICAgcmVzcG9uc2VzWzBdLnRleHQgPSBzdHJkdXAoY29ubi0+cGFzc3dkKTsKKyAgICByZXNwb25zZXNbMF0ubGVuZ3RoID0gY3VybHhfdXp0b3VpKHN0cmxlbihjb25uLT5wYXNzd2QpKTsKKyAgfQorICAodm9pZClwcm9tcHRzOworICAodm9pZClhYnN0cmFjdDsKK30gLyoga2JkX2NhbGxiYWNrICovCisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgTElCU1NIMl9GWF9PSzoKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX0ZJTEU6CisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSDoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQ6CisgICAgY2FzZSBMSUJTU0gyX0ZYX1dSSVRFX1BST1RFQ1Q6CisgICAgY2FzZSBMSUJTU0gyX0ZYX0xPQ0tfQ09ORmxJQ1Q6CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1BBQ0VfT05fRklMRVNZU1RFTToKKyAgICBjYXNlIExJQlNTSDJfRlhfUVVPVEFfRVhDRUVERUQ6CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0RJU0tfRlVMTDsKKworICAgIGNhc2UgTElCU1NIMl9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX0VYSVNUUzsKKworICAgIGNhc2UgTElCU1NIMl9GWF9ESVJfTk9UX0VNUFRZOgorICAgICAgcmV0dXJuIENVUkxFX1FVT1RFX0VSUk9SOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIENVUkxFX1NTSDsKK30KKworc3RhdGljIENVUkxjb2RlIGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRShpbnQgZXJyKQoreworICBzd2l0Y2goZXJyKSB7CisgICAgLyogT3JkZXJlZCBieSBvcmRlciBvZiBhcHBlYXJhbmNlIGluIGxpYnNzaDIuaCAqLworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9OT05FOgorICAgICAgcmV0dXJuIENVUkxFX09LOworCisgICAgLyogVGhpcyBpcyB0aGUgZXJyb3IgcmV0dXJuZWQgYnkgbGlic3NoMl9zY3BfcmVjdjIKKyAgICAgKiBvbiB1bmtub3duIGZpbGUgKi8KKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU0NQX1BST1RPQ09MOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9TT0NLRVRfTk9ORToKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfQUxMT0M6CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9TT0NLRVRfU0VORDoKKyAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0hPU1RLRVlfSU5JVDoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfSE9TVEtFWV9TSUdOOgorICAgIGNhc2UgTElCU1NIMl9FUlJPUl9QVUJMSUNLRVlfVU5SRUNPR05JWkVEOgorICAgIGNhc2UgTElCU1NIMl9FUlJPUl9QVUJMSUNLRVlfVU5WRVJJRklFRDoKKyAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUEFTU1dPUkRfRVhQSVJFRDoKKyAgICAgIHJldHVybiBDVVJMRV9MT0dJTl9ERU5JRUQ7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX1RJTUVPVVQ6CisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1RJTUVPVVQ6CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0VBR0FJTjoKKyAgICAgIHJldHVybiBDVVJMRV9BR0FJTjsKKyAgfQorCisgIHJldHVybiBDVVJMRV9TU0g7Cit9CisKK3N0YXRpYyBMSUJTU0gyX0FMTE9DX0ZVTkMobXlfbGlic3NoMl9tYWxsb2MpCit7CisgICh2b2lkKWFic3RyYWN0OyAvKiBhcmcgbm90IHVzZWQgKi8KKyAgcmV0dXJuIG1hbGxvYyhjb3VudCk7Cit9CisKK3N0YXRpYyBMSUJTU0gyX1JFQUxMT0NfRlVOQyhteV9saWJzc2gyX3JlYWxsb2MpCit7CisgICh2b2lkKWFic3RyYWN0OyAvKiBhcmcgbm90IHVzZWQgKi8KKyAgcmV0dXJuIHJlYWxsb2MocHRyLCBjb3VudCk7Cit9CisKK3N0YXRpYyBMSUJTU0gyX0ZSRUVfRlVOQyhteV9saWJzc2gyX2ZyZWUpCit7CisgICh2b2lkKWFic3RyYWN0OyAvKiBhcmcgbm90IHVzZWQgKi8KKyAgaWYocHRyKSAvKiBzc2gyIGFnZW50IHNvbWV0aW1lcyBjYWxsIGZyZWUgd2l0aCBudWxsIHB0ciAqLworICAgIGZyZWUocHRyKTsKK30KKworLyoKKyAqIFNTSCBTdGF0ZSBtYWNoaW5lIHJlbGF0ZWQgY29kZQorICovCisvKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgU1NIIHN0YXRlISAqLworc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2hzdGF0ZSBub3dzdGF0ZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAvKiBmb3IgZGVidWcgcHVycG9zZXMgKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdID0geworICAgICJTU0hfU1RPUCIsCisgICAgIlNTSF9JTklUIiwKKyAgICAiU1NIX1NfU1RBUlRVUCIsCisgICAgIlNTSF9IT1NUS0VZIiwKKyAgICAiU1NIX0FVVEhMSVNUIiwKKyAgICAiU1NIX0FVVEhfUEtFWV9JTklUIiwKKyAgICAiU1NIX0FVVEhfUEtFWSIsCisgICAgIlNTSF9BVVRIX1BBU1NfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BBU1MiLAorICAgICJTU0hfQVVUSF9BR0VOVF9JTklUIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfTElTVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UIiwKKyAgICAiU1NIX0FVVEhfSE9TVF9JTklUIiwKKyAgICAiU1NIX0FVVEhfSE9TVCIsCisgICAgIlNTSF9BVVRIX0tFWV9JTklUIiwKKyAgICAiU1NIX0FVVEhfS0VZIiwKKyAgICAiU1NIX0FVVEhfR1NTQVBJIiwKKyAgICAiU1NIX0FVVEhfRE9ORSIsCisgICAgIlNTSF9TRlRQX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFMUEFUSCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFIiwKKyAgICAiU1NIX1NGVFBfTkVYVF9RVU9URSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NUQVQiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TRVRTVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1lNTElOSyIsCisgICAgIlNTSF9TRlRQX1FVT1RFX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfUkVOQU1FIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfUk1ESVIiLAorICAgICJTU0hfU0ZUUF9RVU9URV9VTkxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUVkZTIiwKKyAgICAiU1NIX1NGVFBfR0VUSU5GTyIsCisgICAgIlNTSF9TRlRQX0ZJTEVUSU1FIiwKKyAgICAiU1NIX1NGVFBfVFJBTlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIiLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFERElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9MSU5LIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9CT1RUT00iLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0RPTkUiLAorICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfU1RBVCIsCisgICAgIlNTSF9TRlRQX0NMT1NFIiwKKyAgICAiU1NIX1NGVFBfU0hVVERPV04iLAorICAgICJTU0hfU0NQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0NQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRCIsCisgICAgIlNTSF9TQ1BfRE9ORSIsCisgICAgIlNTSF9TQ1BfU0VORF9FT0YiLAorICAgICJTU0hfU0NQX1dBSVRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0NMT1NFIiwKKyAgICAiU1NIX1NDUF9DSEFOTkVMX0ZSRUUiLAorICAgICJTU0hfU0VTU0lPTl9ESVNDT05ORUNUIiwKKyAgICAiU1NIX1NFU1NJT05fRlJFRSIsCisgICAgIlFVSVQiCisgIH07CisKKyAgLyogYSBwcmVjYXV0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgbGlzdHMgYXJlIGluIHN5bmMgKi8KKyAgREVCVUdBU1NFUlQoc2l6ZW9mKG5hbWVzKS9zaXplb2YobmFtZXNbMF0pID09IFNTSF9MQVNUKTsKKworICBpZihzc2hjLT5zdGF0ZSAhPSBub3dzdGF0ZSkgeworICAgIGluZm9mKGNvbm4tPmRhdGEsICJTRlRQICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzXG4iLAorICAgICAgICAgICh2b2lkICopc3NoYywgbmFtZXNbc3NoYy0+c3RhdGVdLCBuYW1lc1tub3dzdGF0ZV0pOworICB9CisjZW5kaWYKKworICBzc2hjLT5zdGF0ZSA9IG5vd3N0YXRlOworfQorCisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorc3RhdGljIGludCBzc2hrZXljYWxsYmFjayhzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXksIC8qIGtub3duICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjdXJsX2toa2V5ICpmb3VuZGtleSwgLyogZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjdXJsX2tobWF0Y2ggbWF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudHApCit7CisgICh2b2lkKWVhc3k7CisgICh2b2lkKWtub3dua2V5OworICAodm9pZClmb3VuZGtleTsKKyAgKHZvaWQpY2xpZW50cDsKKworICAvKiB3ZSBvbmx5IGFsbG93IHBlcmZlY3QgbWF0Y2hlcywgYW5kIHdlIHJlamVjdCBldmVyeXRoaW5nIGVsc2UgKi8KKyAgcmV0dXJuIChtYXRjaCAhPSBDVVJMS0hNQVRDSF9PSyk/Q1VSTEtIU1RBVF9SRUpFQ1Q6Q1VSTEtIU1RBVF9GSU5FOworfQorI2VuZGlmCisKKy8qCisgKiBFYXJsaWVyIGxpYnNzaDIgdmVyc2lvbnMgZGlkbid0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2VlayB0byA2NGJpdCBwb3NpdGlvbnMKKyAqIHdpdGggMzJiaXQgc2l6ZV90LgorICovCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NGVFBfU0VFSzY0CisjZGVmaW5lIFNGVFBfU0VFSyh4LHkpIGxpYnNzaDJfc2Z0cF9zZWVrNjQoeCwgKGxpYnNzaDJfdWludDY0X3QpeSkKKyNlbHNlCisjZGVmaW5lIFNGVFBfU0VFSyh4LHkpIGxpYnNzaDJfc2Z0cF9zZWVrKHgsIChzaXplX3QpeSkKKyNlbmRpZgorCisvKgorICogRWFybGllciBsaWJzc2gyIHZlcnNpb25zIGRpZG4ndCBkbyBTQ1AgcHJvcGVybHkgYmV5b25kIDMyYml0IHNpemVzIG9uIDMyYml0CisgKiBhcmNoaXRlY3R1cmVzIHNvIHdlIGNoZWNrIG9mIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb24gaXMgcHJlc2VudC4KKyAqLworI2lmbmRlZiBIQVZFX0xJQlNTSDJfU0NQX1NFTkQ2NAorI2RlZmluZSBTQ1BfU0VORChhLGIsYyxkKSBsaWJzc2gyX3NjcF9zZW5kX2V4KGEsIGIsIChpbnQpKGMpLCAoc2l6ZV90KWQsIDAsIDApCisjZWxzZQorI2RlZmluZSBTQ1BfU0VORChhLGIsYyxkKSBsaWJzc2gyX3NjcF9zZW5kNjQoYSwgYiwgKGludCkoYyksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpYnNzaDJfdWludDY0X3QpZCwgMCwgMCkKKyNlbmRpZgorCisvKgorICogbGlic3NoMiAxLjIuOCBmaXhlZCB0aGUgcHJvYmxlbSB3aXRoIDMyYml0IGludHMgdXNlZCBmb3Igc29ja2V0cyBvbiB3aW42NC4KKyAqLworI2lmZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0hBTkRTSEFLRQorI2RlZmluZSBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCh4LHkpIGxpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UoeCx5KQorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSBzc2hfa25vd25ob3N0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKKyAgICAvKiB3ZSdyZSBhc2tlZCB0byB2ZXJpZnkgdGhlIGhvc3QgYWdhaW5zdCBhIGZpbGUgKi8KKyAgICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgICBpbnQgcmM7CisgICAgaW50IGtleXR5cGU7CisgICAgc2l6ZV90IGtleWxlbjsKKyAgICBjb25zdCBjaGFyICpyZW1vdGVrZXkgPSBsaWJzc2gyX3Nlc3Npb25faG9zdGtleShzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5bGVuLCAma2V5dHlwZSk7CisgICAgaW50IGtleWNoZWNrID0gTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfRkFJTFVSRTsKKyAgICBpbnQga2V5Yml0ID0gMDsKKworICAgIGlmKHJlbW90ZWtleSkgeworICAgICAgLyoKKyAgICAgICAqIEEgc3ViamVjdCB0byBmaWd1cmUgb3V0IGlzIHdoYXQgaG9zdCBuYW1lIHdlIG5lZWQgdG8gcGFzcyBpbiBoZXJlLgorICAgICAgICogV2hhdCBob3N0IG5hbWUgZG9lcyBPcGVuU1NIIHN0b3JlIGluIGl0cyBmaWxlIGlmIGFuIElETiBuYW1lIGlzCisgICAgICAgKiB1c2VkPworICAgICAgICovCisgICAgICBzdHJ1Y3QgbGlic3NoMl9rbm93bmhvc3QgKmhvc3Q7CisgICAgICBlbnVtIGN1cmxfa2htYXRjaCBrZXltYXRjaDsKKyAgICAgIGN1cmxfc3Noa2V5Y2FsbGJhY2sgZnVuYyA9CisgICAgICAgIGRhdGEtPnNldC5zc2hfa2V5ZnVuYz9kYXRhLT5zZXQuc3NoX2tleWZ1bmM6c3Noa2V5Y2FsbGJhY2s7CisgICAgICBzdHJ1Y3QgY3VybF9raGtleSBrbm93bmtleTsKKyAgICAgIHN0cnVjdCBjdXJsX2toa2V5ICprbm93bmtleXAgPSBOVUxMOworICAgICAgc3RydWN0IGN1cmxfa2hrZXkgZm91bmRrZXk7CisKKyAgICAgIHN3aXRjaChrZXl0eXBlKSB7CisgICAgICBjYXNlIExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQToKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX1NTSFJTQTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExJQlNTSDJfSE9TVEtFWV9UWVBFX0RTUzoKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX1NTSERTUzsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUNEU0FfMjU2CisgICAgICBjYXNlIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VDRFNBXzI1NjoKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzI1NjsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FQ0RTQV8zODQKKyAgICAgIGNhc2UgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUNEU0FfMzg0OgorICAgICAgICBrZXliaXQgPSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfMzg0OworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VDRFNBXzUyMQorICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FQ0RTQV81MjE6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV81MjE7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUQyNTUxOQorICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FRDI1NTE5OgorICAgICAgICBrZXliaXQgPSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUQyNTUxOTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGluZm9mKGRhdGEsICJ1bnN1cHBvcnRlZCBrZXkgdHlwZSwgY2FuJ3QgY2hlY2sga25vd25ob3N0cyFcbiIpOworICAgICAgICBrZXliaXQgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKCFrZXliaXQpCisgICAgICAgIC8qIG5vIGNoZWNrIG1lYW5zIGZhaWx1cmUhICovCisgICAgICAgIHJjID0gQ1VSTEtIU1RBVF9SRUpFQ1Q7CisgICAgICBlbHNlIHsKKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0NIRUNLUAorICAgICAgICBrZXljaGVjayA9IGxpYnNzaDJfa25vd25ob3N0X2NoZWNrcChzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+cmVtb3RlX3BvcnQgIT0gUE9SVF9TU0gpPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZW1vdGVfcG9ydDotMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWUVOQ19SQVd8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOworI2Vsc2UKKyAgICAgICAga2V5Y2hlY2sgPSBsaWJzc2gyX2tub3duaG9zdF9jaGVjayhzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfVFlQRV9QTEFJTnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCk7CisjZW5kaWYKKworICAgICAgICBpbmZvZihkYXRhLCAiU1NIIGhvc3QgY2hlY2s6ICVkLCBrZXk6ICVzXG4iLCBrZXljaGVjaywKKyAgICAgICAgICAgICAgKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKT8KKyAgICAgICAgICAgICAgaG9zdC0+a2V5OiI8bm9uZT4iKTsKKworICAgICAgICAvKiBzZXR1cCAna25vd25rZXknICovCisgICAgICAgIGlmKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKSB7CisgICAgICAgICAga25vd25rZXkua2V5ID0gaG9zdC0+a2V5OworICAgICAgICAgIGtub3dua2V5LmxlbiA9IDA7CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IChrZXl0eXBlID09IExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQSk/CisgICAgICAgICAgICBDVVJMS0hUWVBFX1JTQSA6IENVUkxLSFRZUEVfRFNTOworICAgICAgICAgIGtub3dua2V5cCA9ICZrbm93bmtleTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldHVwICdmb3VuZGtleScgKi8KKyAgICAgICAgZm91bmRrZXkua2V5ID0gcmVtb3Rla2V5OworICAgICAgICBmb3VuZGtleS5sZW4gPSBrZXlsZW47CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSAoa2V5dHlwZSA9PSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0EpPworICAgICAgICAgIENVUkxLSFRZUEVfUlNBIDogQ1VSTEtIVFlQRV9EU1M7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgYW55IG9mIHRoZSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS18qIGRlZmluZXMgYW5kIHRoZQorICAgICAgICAgKiBjdXJsX2tobWF0Y2ggZW51bSBhcmUgZXZlciBtb2RpZmllZCwgd2UgbmVlZCB0byBpbnRyb2R1Y2UgYQorICAgICAgICAgKiB0cmFuc2xhdGlvbiB0YWJsZSBoZXJlIQorICAgICAgICAgKi8KKyAgICAgICAga2V5bWF0Y2ggPSAoZW51bSBjdXJsX2tobWF0Y2gpa2V5Y2hlY2s7CisKKyAgICAgICAgLyogQXNrIHRoZSBjYWxsYmFjayBob3cgdG8gYmVoYXZlICovCisgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgICAgICByYyA9IGZ1bmMoZGF0YSwga25vd25rZXlwLCAvKiBmcm9tIHRoZSBrbm93bmhvc3RzIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICZmb3VuZGtleSwgLyogZnJvbSB0aGUgcmVtb3RlIGhvc3QgKi8KKyAgICAgICAgICAgICAgICAgIGtleW1hdGNoLCBkYXRhLT5zZXQuc3NoX2tleWZ1bmNfdXNlcnApOworICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIG5vIHJlbW90ZWtleSBtZWFucyBmYWlsdXJlISAqLworICAgICAgcmMgPSBDVVJMS0hTVEFUX1JFSkVDVDsKKworICAgIHN3aXRjaChyYykgeworICAgIGRlZmF1bHQ6IC8qIHVua25vd24gcmV0dXJuIGNvZGVzIHdpbGwgZXF1YWwgcmVqZWN0ICovCisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgQ1VSTEtIU1RBVF9SRUpFQ1Q6CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBDVVJMS0hTVEFUX0RFRkVSOgorICAgICAgLyogREVGRVIgbWVhbnMgYmFpbCBvdXQgYnV0IGtlZXAgdGhlIFNTSF9IT1NUS0VZIHN0YXRlICovCisgICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkU6CisgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEU6CisgICAgICAvKiBwcm9jZWVkICovCisgICAgICBpZihrZXljaGVjayAhPSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NQVRDSCkgeworICAgICAgICAvKiB0aGUgZm91bmQgaG9zdCtrZXkgZGlkbid0IG1hdGNoIGJ1dCBoYXMgYmVlbiB0b2xkIHRvIGJlIGZpbmUKKyAgICAgICAgICAgYW55d2F5IHNvIHdlIGFkZCBpdCBpbiBtZW1vcnkgKi8KKyAgICAgICAgaW50IGFkZHJjID0gbGlic3NoMl9rbm93bmhvc3RfYWRkKHNzaGMtPmtoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9UWVBFX1BMQUlOfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZRU5DX1JBV3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwgTlVMTCk7CisgICAgICAgIGlmKGFkZHJjKQorICAgICAgICAgIGluZm9mKGRhdGEsICJXYXJuaW5nIGFkZGluZyB0aGUga25vd24gaG9zdCAlcyBmYWlsZWQhXG4iLAorICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSk7CisgICAgICAgIGVsc2UgaWYocmMgPT0gQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFKSB7CisgICAgICAgICAgLyogbm93IHdlIHdyaXRlIHRoZSBlbnRpcmUgaW4tbWVtb3J5IGxpc3Qgb2Yga25vd24gaG9zdHMgdG8gdGhlCisgICAgICAgICAgICAga25vd25faG9zdHMgZmlsZSAqLworICAgICAgICAgIGludCB3cmMgPQorICAgICAgICAgICAgbGlic3NoMl9rbm93bmhvc3Rfd3JpdGVmaWxlKHNzaGMtPmtoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9GSUxFX09QRU5TU0gpOworICAgICAgICAgIGlmKHdyYykgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIldhcm5pbmcsIHdyaXRpbmcgJXMgZmFpbGVkIVxuIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyNlbHNlIC8qIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJICovCisgICh2b2lkKWNvbm47CisjZW5kaWYKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHNzaF9jaGVja19maW5nZXJwcmludChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY29uc3QgY2hhciAqcHVia2V5X21kNSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XTsKKyAgY2hhciBtZDVidWZmZXJbMzNdOworCisgIGNvbnN0IGNoYXIgKmZpbmdlcnByaW50ID0gbGlic3NoMl9ob3N0a2V5X2hhc2goc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICBMSUJTU0gyX0hPU1RLRVlfSEFTSF9NRDUpOworCisgIGlmKGZpbmdlcnByaW50KSB7CisgICAgLyogVGhlIGZpbmdlcnByaW50IHBvaW50cyB0byBzdGF0aWMgc3RvcmFnZSAoISksIGRvbid0IGZyZWUoKSBpdC4gKi8KKyAgICBpbnQgaTsKKyAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgICAgbXNucHJpbnRmKCZtZDVidWZmZXJbaSoyXSwgMywgIiUwMngiLCAodW5zaWduZWQgY2hhcikgZmluZ2VycHJpbnRbaV0pOworICAgIGluZm9mKGRhdGEsICJTU0ggTUQ1IGZpbmdlcnByaW50OiAlc1xuIiwgbWQ1YnVmZmVyKTsKKyAgfQorCisgIC8qIEJlZm9yZSB3ZSBhdXRoZW50aWNhdGUgd2UgY2hlY2sgdGhlIGhvc3RrZXkncyBNRDUgZmluZ2VycHJpbnQKKyAgICogYWdhaW5zdCBhIGtub3duIGZpbmdlcnByaW50LCBpZiBhdmFpbGFibGUuCisgICAqLworICBpZihwdWJrZXlfbWQ1ICYmIHN0cmxlbihwdWJrZXlfbWQ1KSA9PSAzMikgeworICAgIGlmKCFmaW5nZXJwcmludCB8fCAhc3RyY2FzZWNvbXBhcmUobWQ1YnVmZmVyLCBwdWJrZXlfbWQ1KSkgeworICAgICAgaWYoZmluZ2VycHJpbnQpCisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWlzbWF0Y2ggbWQ1IGZpbmdlcnByaW50LiAiCisgICAgICAgICAgICAiUmVtb3RlICVzIGlzIG5vdCBlcXVhbCB0byAlcyIsIG1kNWJ1ZmZlciwgcHVia2V5X21kNSk7CisgICAgICBlbHNlCisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWQ1IGZpbmdlcnByaW50IG5vdCBhdmFpbGFibGUiKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIHJldHVybiBzc2hjLT5hY3R1YWxjb2RlOworICAgIH0KKyAgICBpbmZvZihkYXRhLCAiTUQ1IGNoZWNrc3VtIG1hdGNoIVxuIik7CisgICAgLyogYXMgd2UgYWxyZWFkeSBtYXRjaGVkLCB3ZSBza2lwIHRoZSBjaGVjayBmb3Iga25vd24gaG9zdHMgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKyAgcmV0dXJuIHNzaF9rbm93bmhvc3QoY29ubik7Cit9CisKKy8qCisgKiBzc2hfZm9yY2Vfa25vd25ob3N0X2tleV90eXBlKCkgd2lsbCBjaGVjayB0aGUga25vd24gaG9zdHMgZmlsZSBhbmQgdHJ5IHRvCisgKiBmb3JjZSBhIHNwZWNpZmljIHB1YmxpYyBrZXkgdHlwZSBmcm9tIHRoZSBzZXJ2ZXIgaWYgYW4gZW50cnkgaXMgZm91bmQuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBzc2hfZm9yY2Vfa25vd25ob3N0X2tleV90eXBlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTkKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfZWQyNTUxOQorICAgID0gInNzaC1lZDI1NTE5IjsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV81MjEKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfZWNkc2FfNTIxCisgICAgPSAiZWNkc2Etc2hhMi1uaXN0cDUyMSI7CisjZW5kaWYKKyNpZmRlZiBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfMzg0CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2VjZHNhXzM4NAorICAgID0gImVjZHNhLXNoYTItbmlzdHAzODQiOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzI1NgorICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8yNTYKKyAgICA9ICJlY2RzYS1zaGEyLW5pc3RwMjU2IjsKKyNlbmRpZgorICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RrZXlfbWV0aG9kX3NzaF9yc2EKKyAgICA9ICJzc2gtcnNhIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfZHNzCisgICAgPSAic3NoLWRzcyI7CisKKyAgY29uc3QgY2hhciAqaG9zdGtleV9tZXRob2QgPSBOVUxMOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBsaWJzc2gyX2tub3duaG9zdCogc3RvcmUgPSBOVUxMOworICBjb25zdCBjaGFyICpraF9uYW1lX2VuZCA9IE5VTEw7CisgIHNpemVfdCBraF9uYW1lX3NpemUgPSAwOworICBpbnQgcG9ydCA9IDA7CisgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICBpZihzc2hjLT5raCAmJiAhZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdKSB7CisgICAgLyogbGV0cyB0cnkgdG8gZmluZCBvdXIgaG9zdCBpbiB0aGUga25vd24gaG9zdHMgZmlsZSAqLworICAgIHdoaWxlKCFsaWJzc2gyX2tub3duaG9zdF9nZXQoc3NoYy0+a2gsICZzdG9yZSwgc3RvcmUpKSB7CisgICAgICAvKiBGb3Igbm9uLXN0YW5kYXJkIHBvcnRzLCB0aGUgbmFtZSB3aWxsIGJlIGVuY2xvc2VkIGluICovCisgICAgICAvKiBzcXVhcmUgYnJhY2tldHMsIGZvbGxvd2VkIGJ5IGEgY29sb24gYW5kIHRoZSBwb3J0ICovCisgICAgICBpZihzdG9yZS0+bmFtZVswXSA9PSAnWycpIHsKKyAgICAgICAga2hfbmFtZV9lbmQgPSBzdHJzdHIoc3RvcmUtPm5hbWUsICJdOiIpOworICAgICAgICBpZigha2hfbmFtZV9lbmQpIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiSW52YWxpZCBob3N0IHBhdHRlcm4gJXMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgc3RvcmUtPm5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcG9ydCA9IGF0b2koa2hfbmFtZV9lbmQgKyAyKTsKKyAgICAgICAgaWYoa2hfbmFtZV9lbmQgJiYgKHBvcnQgPT0gY29ubi0+cmVtb3RlX3BvcnQpKSB7CisgICAgICAgICAga2hfbmFtZV9zaXplID0gc3RybGVuKHN0b3JlLT5uYW1lKSAtIDEgLSBzdHJsZW4oa2hfbmFtZV9lbmQpOworICAgICAgICAgIGlmKHN0cm5jbXAoc3RvcmUtPm5hbWUgKyAxLCBjb25uLT5ob3N0Lm5hbWUsIGtoX25hbWVfc2l6ZSkgPT0gMCkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKHN0cmNtcChzdG9yZS0+bmFtZSwgY29ubi0+aG9zdC5uYW1lKSA9PSAwKSB7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYoZm91bmQpIHsKKyAgICAgIGluZm9mKGRhdGEsICJGb3VuZCBob3N0ICVzIGluICVzXG4iLAorICAgICAgICAgICAgc3RvcmUtPm5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisKKyAgICAgIHN3aXRjaChzdG9yZS0+dHlwZW1hc2sgJiBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfTUFTSykgeworI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FRDI1NTE5CisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9FRDI1NTE5OgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lZDI1NTE5OworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV81MjEKKyAgICAgIGNhc2UgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzUyMToKKyAgICAgICAgaG9zdGtleV9tZXRob2QgPSBob3N0a2V5X21ldGhvZF9zc2hfZWNkc2FfNTIxOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV8zODQKKyAgICAgIGNhc2UgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NDoKKyAgICAgICAgaG9zdGtleV9tZXRob2QgPSBob3N0a2V5X21ldGhvZF9zc2hfZWNkc2FfMzg0OworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV8yNTYKKyAgICAgIGNhc2UgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzI1NjoKKyAgICAgICAgaG9zdGtleV9tZXRob2QgPSBob3N0a2V5X21ldGhvZF9zc2hfZWNkc2FfMjU2OworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfU1NIUlNBOgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9yc2E7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfU1NIRFNTOgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9kc3M7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfUlNBMToKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZvdW5kIGhvc3Qga2V5IHR5cGUgUlNBMSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTSDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGZhaWxmKGRhdGEsICJVbmtub3duIGhvc3Qga2V5IHR5cGU6ICVpXG4iLAorICAgICAgICAgICAgICAoc3RvcmUtPnR5cGVtYXNrICYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX01BU0spKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTSDsKKyAgICAgIH0KKworICAgICAgaW5mb2YoZGF0YSwgIlNldCBcIiVzXCIgYXMgU1NIIGhvc3RrZXkgdHlwZVxuIiwgaG9zdGtleV9tZXRob2QpOworICAgICAgcmVzdWx0ID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKAorICAgICAgICAgIGxpYnNzaDJfc2Vzc2lvbl9tZXRob2RfcHJlZigKKyAgICAgICAgICAgICAgc3NoYy0+c3NoX3Nlc3Npb24sIExJQlNTSDJfTUVUSE9EX0hPU1RLRVksIGhvc3RrZXlfbWV0aG9kKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaW5mb2YoZGF0YSwgIkRpZCBub3QgZmluZCBob3N0ICVzIGluICVzXG4iLAorICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgIH0KKyAgfQorCisjZW5kaWYgLyogSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogc3NoX3N0YXRlbWFjaF9hY3QoKSBydW5zIHRoZSBTU0ggc3RhdGUgbWFjaGluZSBhcyBmYXIgYXMgaXQgY2FuIHdpdGhvdXQKKyAqIGJsb2NraW5nIGFuZCB3aXRob3V0IHJlYWNoaW5nIHRoZSBlbmQuICBUaGUgZGF0YSB0aGUgcG9pbnRlciAnYmxvY2snIHBvaW50cworICogdG8gd2lsbCBiZSBzZXQgdG8gVFJVRSBpZiB0aGUgbGlic3NoMiBmdW5jdGlvbiByZXR1cm5zIExJQlNTSDJfRVJST1JfRUFHQUlOCisgKiBtZWFuaW5nIGl0IHdhbnRzIHRvIGJlIGNhbGxlZCBhZ2FpbiB3aGVuIHRoZSBzb2NrZXQgaXMgcmVhZHkKKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgc3NoX3N0YXRlbWFjaF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpibG9jaykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU1NIUFJPVE8gKnNmdHBfc2NwID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICBjaGFyICpuZXdfcmVhZGRpcl9saW5lOworICBpbnQgcmMgPSBMSUJTU0gyX0VSUk9SX05PTkU7CisgIGludCBlcnI7CisgIGludCBzZWVrZXJyID0gQ1VSTF9TRUVLRlVOQ19PSzsKKyAgKmJsb2NrID0gMDsgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisKKyAgICBzd2l0Y2goc3NoYy0+c3RhdGUpIHsKKyAgICBjYXNlIFNTSF9JTklUOgorICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7CisKKyAgICAgIC8qIFNldCBsaWJzc2gyIHRvIG5vbi1ibG9ja2luZywgc2luY2UgZXZlcnl0aGluZyBpbnRlcm5hbGx5IGlzCisgICAgICAgICBub24tYmxvY2tpbmcgKi8KKyAgICAgIGxpYnNzaDJfc2Vzc2lvbl9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDApOworCisgICAgICByZXN1bHQgPSBzc2hfZm9yY2Vfa25vd25ob3N0X2tleV90eXBlKGNvbm4pOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU19TVEFSVFVQOgorICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMpIHsKKyAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogJWQsICVzIiwgcmMsIGVycl9tc2cpOworCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfSE9TVEtFWToKKyAgICAgIC8qCisgICAgICAgKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIHNob3VsZCBjaGVjayB0aGUgaG9zdGtleSdzIGZpbmdlcnByaW50CisgICAgICAgKiBhZ2FpbnN0IG91ciBrbm93biBob3N0cy4gSG93IHRoYXQgaXMgaGFuZGxlZCAocmVhZGluZyBmcm9tIGZpbGUsCisgICAgICAgKiB3aGF0ZXZlcikgaXMgdXAgdG8gdXMuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdCA9IHNzaF9jaGVja19maW5nZXJwcmludChjb25uKTsKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7CisgICAgICAvKiBzc2hfY2hlY2tfZmluZ2VycHJpbnQgc2V0cyBzdGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGVycm9yICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhMSVNUOgorICAgICAgLyoKKyAgICAgICAqIEZpZ3VyZSBvdXQgYXV0aGVudGljYXRpb24gbWV0aG9kcworICAgICAgICogTkI6IEFzIHNvb24gYXMgd2UgaGF2ZSBwcm92aWRlZCBhIHVzZXJuYW1lIHRvIGFuIG9wZW5zc2ggc2VydmVyIHdlCisgICAgICAgKiBtdXN0IG5ldmVyIGNoYW5nZSBpdCBsYXRlci4gVGh1cywgYWx3YXlzIHNwZWNpZnkgdGhlIGNvcnJlY3QgdXNlcm5hbWUKKyAgICAgICAqIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBsaWJzc2gyIGRvY3Mga2luZCBvZiBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZQorICAgICAgICogcG9zc2libGUgdG8gZ2V0IGEgJ2dlbmVyaWMnIGxpc3QgKG5vdCB1c2VyLXNwZWNpZmljKSBvZiBhdXRoZW50aWNhdGlvbgorICAgICAgICogbWV0aG9kcywgcHJlc3VtYWJseSB3aXRoIGEgYmxhbmsgdXNlcm5hbWUuIFRoYXQgd29uJ3Qgd29yayBpbiBteQorICAgICAgICogZXhwZXJpZW5jZS4KKyAgICAgICAqIFNvIGFsd2F5cyBzcGVjaWZ5IGl0IGhlcmUuCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhsaXN0ID0gbGlic3NoMl91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpKTsKKworICAgICAgaWYoIXNzaGMtPmF1dGhsaXN0KSB7CisgICAgICAgIGlmKGxpYnNzaDJfdXNlcmF1dGhfYXV0aGVudGljYXRlZChzc2hjLT5zc2hfc2Vzc2lvbikpIHsKKyAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICAgIGluZm9mKGRhdGEsICJTU0ggdXNlciBhY2NlcHRlZCB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlcnIgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKGVyciA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXZhaWxhYmxlOiAlc1xuIiwKKyAgICAgICAgICAgIHNzaGMtPmF1dGhsaXN0KTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6CisgICAgICAvKgorICAgICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBhdXRoIHR5cGVzIGluIHRoZSBvcmRlciBJIGZlZWwgaXMgbW9zdCBzZWN1cmUKKyAgICAgICAqIHdpdGggdGhlIHJlcXVlc3RlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOworCisgICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkgJiYKKyAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwdWJsaWNrZXkiKSAhPSBOVUxMKSkgeworICAgICAgICBib29sIG91dF9vZl9tZW1vcnkgPSBGQUxTRTsKKworICAgICAgICBzc2hjLT5yc2FfcHViID0gc3NoYy0+cnNhID0gTlVMTDsKKworICAgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKQorICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogVG8gcG9uZGVyIGFib3V0OiBzaG91bGQgcmVhbGx5IHRoZSBsaWIgYmUgbWVzc2luZyBhYm91dCB3aXRoIHRoZQorICAgICAgICAgICAgIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgZXRjPyAqLworICAgICAgICAgIGNoYXIgKmhvbWUgPSBjdXJsX2dldGVudigiSE9NRSIpOworCisgICAgICAgICAgLyogSWYgbm8gcHJpdmF0ZSBrZXkgZmlsZSBpcyBzcGVjaWZpZWQsIHRyeSBzb21lIGNvbW1vbiBwYXRocy4gKi8KKyAgICAgICAgICBpZihob21lKSB7CisgICAgICAgICAgICAvKiBUcnkgfi8uc3NoIGZpcnN0LiAqLworICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9yc2EiLCBob21lKTsKKyAgICAgICAgICAgIGlmKCFzc2hjLT5yc2EpCisgICAgICAgICAgICAgIG91dF9vZl9tZW1vcnkgPSBUUlVFOworICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKKyAgICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EiLCBob21lKTsKKyAgICAgICAgICAgICAgaWYoIXNzaGMtPnJzYSkKKyAgICAgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKKyAgICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKGhvbWUpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZighb3V0X29mX21lbW9yeSAmJiAhc3NoYy0+cnNhKSB7CisgICAgICAgICAgICAvKiBOb3RoaW5nIGZvdW5kOyB0cnkgdGhlIGN1cnJlbnQgZGlyLiAqLworICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9yc2EiKTsKKyAgICAgICAgICAgIGlmKHNzaGMtPnJzYSAmJiBhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKKyAgICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9kc2EiKTsKKyAgICAgICAgICAgICAgaWYoc3NoYy0+cnNhICYmIGFjY2Vzcyhzc2hjLT5yc2EsIFJfT0spICE9IDApIHsKKyAgICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICAgICAgICAgICAgLyogT3V0IG9mIGd1ZXNzZXMuIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICogc3VycHJpc2luZyBpbmZvIG1lc3NhZ2VzLiAqLworICAgICAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBVbmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZpZXMgYSBwdWJsaWMga2V5IGZpbGUsIGxldAorICAgICAgICAgKiBsaWJzc2gyIGV4dHJhY3QgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXkgZmlsZS4KKyAgICAgICAgICogVGhpcyBpcyBkb25lIGJ5IHNpbXBseSBwYXNzaW5nIHNzaGMtPnJzYV9wdWIgPSBOVUxMLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldCisgICAgICAgICAgIC8qIHRyZWF0IGVtcHR5IHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgTlVMTCAqLworICAgICAgICAgICAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV1bMF0pIHsKKyAgICAgICAgICBzc2hjLT5yc2FfcHViID0gc3RyZHVwKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSk7CisgICAgICAgICAgaWYoIXNzaGMtPnJzYV9wdWIpCisgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKG91dF9vZl9tZW1vcnkgfHwgc3NoYy0+cnNhID09IE5VTEwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2Q7CisgICAgICAgIGlmKCFzc2hjLT5wYXNzcGhyYXNlKQorICAgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSAiIjsKKworICAgICAgICBpZihzc2hjLT5yc2FfcHViKQorICAgICAgICAgIGluZm9mKGRhdGEsICJVc2luZyBTU0ggcHVibGljIGtleSBmaWxlICclcydcbiIsIHNzaGMtPnJzYV9wdWIpOworICAgICAgICBpbmZvZihkYXRhLCAiVXNpbmcgU1NIIHByaXZhdGUga2V5IGZpbGUgJyVzJ1xuIiwgc3NoYy0+cnNhKTsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX1BLRVk6CisgICAgICAvKiBUaGUgZnVuY3Rpb24gYmVsb3cgY2hlY2tzIGlmIHRoZSBmaWxlcyBleGlzdHMsIG5vIG5lZWQgdG8gc3RhdCgpIGhlcmUuCisgICAgICAgKi8KKyAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXlfZnJvbWZpbGVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2FfcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2EsIHNzaGMtPnBhc3NwaHJhc2UpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisKKyAgICAgIGlmKHJjID09IDApIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkluaXRpYWxpemVkIFNTSCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgIGluZm9mKGRhdGEsICJTU0ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzXG4iLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKKyAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6CisgICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInBhc3N3b3JkIikgIT0gTlVMTCkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfSE9TVF9JTklUKTsKKyAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTOgorICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkX2V4KHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfSE9TVF9JTklUOgorICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9IT1NUKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImhvc3RiYXNlZCIpICE9IE5VTEwpKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1QpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0hPU1Q6CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9BR0VOVF9JTklUOgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfQUdFTlQpCisgICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAicHVibGlja2V5IikgIT0gTlVMTCkpIHsKKworICAgICAgICAvKiBDb25uZWN0IHRvIHRoZSBzc2gtYWdlbnQgKi8KKyAgICAgICAgLyogVGhlIGFnZW50IGNvdWxkIGJlIHNoYXJlZCBieSBhIGN1cmwgdGhyZWFkIGkgYmVsaWV2ZQorICAgICAgICAgICBidXQgbm90aGluZyBvYnZpb3VzIGFzIGtleXMgY2FuIGJlIGFkZGVkL3JlbW92ZWQgYXQgYW55IHRpbWUgKi8KKyAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IGxpYnNzaDJfYWdlbnRfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBjcmVhdGUgYWdlbnQgb2JqZWN0XG4iKTsKKworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsdXJlIGNvbm5lY3RpbmcgdG8gYWdlbnRcbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKKyAgICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0xJU1QpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogSEFWRV9MSUJTU0gyX0FHRU5UX0FQSSAqLworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfQUdFTlRfTElTVDoKKyNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCisgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfbGlzdF9pZGVudGl0aWVzKHNzaGMtPnNzaF9hZ2VudCk7CisKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQorICAgICAgICBicmVhazsKKyAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfQUdFTlQpOworICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gTlVMTDsKKyAgICAgIH0KKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0FHRU5UOgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIC8qIGFzIHByZXZfaWRlbnRpdHkgZXZvbHZlcyBvbmx5IGFmdGVyIGFuIGlkZW50aXR5IHVzZXIgYXV0aCBmaW5pc2hlZCB3ZQorICAgICAgICAgY2FuIHNhZmVseSByZXF1ZXN0IGl0IGFnYWluIGFzIGxvbmcgYXMgRUFHQUlOIGlzIHJldHVybmVkIGhlcmUgb3IgYnkKKyAgICAgICAgIGxpYnNzaDJfYWdlbnRfdXNlcmF1dGggKi8KKyAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9nZXRfaWRlbnRpdHkoc3NoYy0+c3NoX2FnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF91c2VyYXV0aChzc2hjLT5zc2hfYWdlbnQsIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSk7CisKKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgaWYocmMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICAgIC8qIHRyaWVkIGFuZCBmYWlsZWQ/IGdvIHRvIG5leHQgaWRlbnRpdHkgKi8KKyAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYocmMgPCAwKQorICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOworICAgICAgZWxzZSBpZihyYyA9PSAxKQorICAgICAgICBpbmZvZihkYXRhLCAiTm8gaWRlbnRpdHkgd291bGQgbWF0Y2hcbiIpOworCisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkFnZW50IGJhc2VkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisjZW5kaWYKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpCisgICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAia2V5Ym9hcmQtaW50ZXJhY3RpdmUiKSAhPSBOVUxMKSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0tFWToKKyAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCisgICAgICByYyA9IGxpYnNzaDJfdXNlcmF1dGhfa2V5Ym9hcmRfaW50ZXJhY3RpdmVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrYmRfY2FsbGJhY2spOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9ET05FOgorICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgeworICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KKyAgICAgICAqLworICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKKworICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogU1NIIGlzIGNvbm5lY3RlZCAqLworCisgICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFN0YXJ0IHRoZSBsaWJzc2gyIHNmdHAgc2Vzc2lvbgorICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBsaWJzc2gyX3NmdHBfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7CisgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6CisgICAgeworICAgICAgY2hhciB0ZW1wSG9tZVtQQVRIX01BWF07CisKKyAgICAgIC8qCisgICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKKyAgICAgICAqLworICAgICAgcmMgPSBzZnRwX2xpYnNzaDJfcmVhbHBhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wSG9tZSwgUEFUSF9NQVgtMSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjID4gMCkgeworICAgICAgICAvKiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RyaW5nIGlzIG5vdCBhbHdheXMgTlVMTCB0ZXJtaW5hdGVkICovCisgICAgICAgIHRlbXBIb21lW3JjXSA9ICdcMCc7CisgICAgICAgIHNzaGMtPmhvbWVkaXIgPSBzdHJkdXAodGVtcEhvbWUpOworICAgICAgICBpZighc3NoYy0+aG9tZWRpcikgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBSZXR1cm4gdGhlIGVycm9yIHR5cGUgKi8KKyAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgaWYoZXJyKQorICAgICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOworICAgICAgICBlbHNlCisgICAgICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgZXJyb3Igd2Fzbid0IGluIHRoZSBTRlRQIGxldmVsIGJ1dCBmb3IgZXhhbXBsZQorICAgICAgICAgICAgIGEgdGltZS1vdXQgb3Igc2ltaWxhciAqLworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX1NTSDsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJlcnJvciA9ICVkIG1ha2VzIGxpYmN1cmwgPSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGVyciwgKGludClyZXN1bHQpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQorICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgorICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCisgICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLworICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOworICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKKworICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKKyAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOworICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKKyAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCisgICAgeworICAgICAgY29uc3QgY2hhciAqY3A7CisKKyAgICAgIC8qCisgICAgICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCisgICAgICAgKgorICAgICAgICogJ3NzaGMtPnF1b3RlX2l0ZW0nIGlzIGFscmVhZHkgdmVyaWZpZWQgdG8gYmUgbm9uLU5VTEwgYmVmb3JlIGl0CisgICAgICAgKiBzd2l0Y2hlZCB0byB0aGlzIHN0YXRlLgorICAgICAgICovCisgICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOworICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKKyAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgICAgICBpZihjbWRbMF0gPT0gJyonKSB7CisgICAgICAgIGNtZCsrOworICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKKyAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCk7CisgICAgICAgIGlmKCF0bXApIHsKKyAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopIlBXRFxuIiwgNCk7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOworICAgICAgICB9CisgICAgICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQorICAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgorICAgICAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCisgICAgICAgICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5CisgICAgICAgICAqLworICAgICAgICBjcCA9IHN0cmNocihjbWQsICcgJyk7CisgICAgICAgIGlmKGNwID09IE5VTEwpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIFNGVFAgY29tbWFuZC4gU3VwcGx5IHBhcmFtZXRlcihzKSEiKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFsc28sIGV2ZXJ5IGNvbW1hbmQgdGFrZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHNvIHdlIGdldCB0aGF0CisgICAgICAgICAqIGZpcnN0IGFyZ3VtZW50IHJpZ2h0IG5vdworICAgICAgICAgKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDEsIHNzaGMtPmhvbWVkaXIpOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogQmFkIGZpcnN0IHBhcmFtZXRlciIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcworICAgICAgICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5CisgICAgICAgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaDIKKyAgICAgICAgICogZnVuY3Rpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8CisgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAorICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikgKSB7CisgICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLworCisgICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCisgICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGNoZ3JwL2NobW9kL2Nob3duOiAiCisgICAgICAgICAgICAgICAgICAgICJCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIG1lbXNldCgmc3NoYy0+cXVvdGVfYXR0cnMsIDAsIHNpemVvZihMSUJTU0gyX1NGVFBfQVRUUklCVVRFUykpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJsbiAiLCAzKSB8fAorICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAic3ltbGluayAiLCA4KSkgeworICAgICAgICAgIC8qIHN5bWJvbGljIGxpbmtpbmcgKi8KKyAgICAgICAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBpcyB0aGUgc291cmNlICovCisgICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgICAgICAgICAiU3ludGF4IGVycm9yIGluIGxuL3N5bWxpbms6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1lNTElOSyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibWtkaXIgIiwgNikpIHsKKyAgICAgICAgICAvKiBjcmVhdGUgZGlyICovCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfTUtESVIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJlbmFtZSAiLCA3KSkgeworICAgICAgICAgIC8qIHJlbmFtZSBmaWxlICovCisgICAgICAgICAgLyogZmlyc3QgcGFyYW0gaXMgdGhlIHNvdXJjZSBwYXRoICovCisgICAgICAgICAgLyogc2Vjb25kIHBhcmFtIGlzIHRoZSBkZXN0LiBwYXRoICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gcmVuYW1lOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm1kaXIgIiwgNikpIHsKKyAgICAgICAgICAvKiBkZWxldGUgZGlyICovCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUk1ESVIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtICIsIDMpKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfVU5MSU5LKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmZGVmIEhBU19TVEFUVkZTX1NVUFBPUlQKKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAic3RhdHZmcyAiLCA4KSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBmYWlsZihkYXRhLCAiVW5rbm93biBTRlRQIGNvbW1hbmQiKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX05FWFRfUVVPVEU6CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworCisgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gc3NoYy0+cXVvdGVfaXRlbS0+bmV4dDsKKworICAgICAgaWYoc3NoYy0+cXVvdGVfaXRlbSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVDoKKyAgICB7CisgICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOworICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKKyAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgICAgICBpZihjbWRbMF0gPT0gJyonKSB7CisgICAgICAgIGNtZCsrOworICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYoIXN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCIsIDUpKSB7CisgICAgICAgIC8qIFNpbmNlIGNob3duIGFuZCBjaGdycCBvbmx5IHNldCBvd25lciBPUiBncm91cCBidXQgbGlic3NoMiB3YW50cyB0bworICAgICAgICAgKiBzZXQgdGhlbSBib3RoIGF0IG9uY2UsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBjdXJyZW50IG93bmVyc2hpcAorICAgICAgICAgKiBmaXJzdC4gIFRoaXMgdGFrZXMgYW4gZXh0cmEgcHJvdG9jb2wgcm91bmQgdHJpcC4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7IC8qIGdldCB0aG9zZSBhdHRyaWJ1dGVzICovCisgICAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogTm93IHNldCB0aGUgbmV3IGF0dHJpYnV0ZXMuLi4gKi8KKyAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCIsIDUpKSB7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmdpZCA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMuZmxhZ3MgPSBMSUJTU0gyX1NGVFBfQVRUUl9VSURHSUQ7CisgICAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLmdpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgorICAgICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNoZ3JwIGdpZCBub3QgYSBudW1iZXIiKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgeworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5wZXJtaXNzaW9ucyA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDgpOworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1BFUk1JU1NJT05TOworICAgICAgICAvKiBwZXJtaXNzaW9ucyBhcmUgb2N0YWwgKi8KKyAgICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMucGVybWlzc2lvbnMgPT0gMCAmJgorICAgICAgICAgICAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG1vZCBwZXJtaXNzaW9ucyBub3QgYSBudW1iZXIiKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24iLCA1KSkgeworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy51aWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOworICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG93biB1aWQgbm90IGEgbnVtYmVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogTm93IHNlbmQgdGhlIGNvbXBsZXRlZCBzdHJ1Y3R1cmUuLi4gKi8KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TRVRTVEFULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+cXVvdGVfYXR0cnMpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gc2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TWU1MSU5LKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIGZhaWxmKGRhdGEsICJzeW1saW5rIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9NS0RJUjoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUkVOQU1FOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVuYW1lX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX09WRVJXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9BVE9NSUMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfTkFUSVZFKTsKKworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJlbmFtZSBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ybWRpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJtZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9VTkxJTks6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF91bmxpbmtfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSkpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTOgorICAgIHsKKyAgICAgIExJQlNTSDJfU0ZUUF9TVEFUVkZTIHN0YXR2ZnM7CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0dmZzKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnMpOworCisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJzdGF0dmZzIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IDApIHsKKyAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9ic2l6ZSwgc3RhdHZmcy5mX2Zyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfYmxvY2tzLCBzdGF0dmZzLmZfYmZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2JhdmFpbCwgc3RhdHZmcy5mX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9mZnJlZSwgc3RhdHZmcy5mX2ZhdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfZnNpZCwgc3RhdHZmcy5mX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX25hbWVtYXgpOworICAgICAgICBpZighdG1wKSB7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICAgICAgZnJlZSh0bXApOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgorICAgIHsKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKKyAgICB7CisgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKKworICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy5tdGltZTsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6CisgICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc2Z0cF9zY3AtPnBhdGhbc3RybGVuKHNmdHBfc2NwLT5wYXRoKS0xXSA9PSAnLycpCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAvKgorICAgICAgICogTk9URSEhISAgbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoCisgICAgICAgKiAgICAgICAgICB0aGF0IGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIKKyAgICAgICAqICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUKKyAgICAgICAqICAgICAgICAgIHNhbWUgbmFtZSBhcyB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgeworICAgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7CisgICAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihyYykgeworICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKKyAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLworICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0NSRUFUfExJQlNTSDJfRlhGX0FQUEVORDsKKyAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQorICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KKyAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9BUFBFTkQ7CisgICAgICBlbHNlCisgICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCisgICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQ1JFQVR8TElCU1NIMl9GWEZfVFJVTkM7CisKKyAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0KKyAgICAgICAgbGlic3NoMl9zZnRwX29wZW5fZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfT1BFTkZJTEUpOworCisgICAgICBpZighc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7CisKKyAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9FQUdBSU4gPT0gcmMpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MID09IHJjKQorICAgICAgICAgIC8qIG9ubHkgd2hlbiB0aGVyZSB3YXMgYW4gU0ZUUCBwcm90b2NvbCBlcnJvciBjYW4gd2UgZXh0cmFjdAorICAgICAgICAgICAgIHRoZSBzZnRwIGVycm9yISAqLworICAgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlcnIgPSAtMTsgLyogbm90IGFuIHNmdHAgZXJyb3IgYXQgYWxsICovCisKKyAgICAgICAgaWYoc3NoYy0+c2Vjb25kQ3JlYXRlRGlycykgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gZXJyPj0gTElCU1NIMl9GWF9PSz8KKyAgICAgICAgICAgIHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOkNVUkxFX1NTSDsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQ3JlYXRpbmcgdGhlIGRpci9maWxlIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZigoKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfRklMRSkgfHwKKyAgICAgICAgICAgIChlcnIgPT0gTElCU1NIMl9GWF9GQUlMVVJFKSB8fAorICAgICAgICAgICAgKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSCkpICYmCisgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKKyAgICAgICAgICAgIChzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkpKSB7CisgICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLworICAgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gZXJyPj0gTElCU1NIMl9GWF9PSz8KKyAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTpDVVJMRV9TU0g7CisgICAgICAgIGlmKCFzc2hjLT5hY3R1YWxjb2RlKSB7CisgICAgICAgICAgLyogU29tZXRpbWVzLCBmb3Igc29tZSByZWFzb24gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3IoKSByZXR1cm5zCisgICAgICAgICAgICAgemVybyBldmVuIHRob3VnaCBsaWJzc2gyX3NmdHBfb3BlbigpIGZhaWxlZCBwcmV2aW91c2x5ISBXZSBuZWVkCisgICAgICAgICAgICAgdG8gd29yayBhcm91bmQgdGhhdCEgKi8KKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfU1NIOworICAgICAgICAgIGVyciA9IC0xOworICAgICAgICB9CisgICAgICAgIGZhaWxmKGRhdGEsICJVcGxvYWQgZmFpbGVkOiAlcyAoJWQvJWQpIiwKKyAgICAgICAgICAgICAgZXJyPj0gTElCU1NIMl9GWF9PSz9zZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKToic3NoIGVycm9yIiwKKyAgICAgICAgICAgICAgZXJyLCByYyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiBJZiB3ZSBoYXZlIGEgcmVzdGFydCBwb2ludCB0aGVuIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgY29ycmVjdAorICAgICAgICAgcG9zaXRpb24uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApIHsKKyAgICAgICAgLyogTGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaW5wdXQuICovCisgICAgICAgIGlmKGNvbm4tPnNlZWtfZnVuYykgeworICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFS19TRVQpOworICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19PSykgeworICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkID0gMDsKKworICAgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZWVrIHN0cmVhbSIpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBzZWVrZXJyID09IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgKGNhbid0IHNlZWsgdG8gb2Zmc2V0KSAqLworICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHNpemVfdCByZWFkdGhpc2Ftb3VudG5vdyA9CisgICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCA+IGRhdGEtPnNldC5idWZmZXJfc2l6ZSkgPworICAgICAgICAgICAgICAoc2l6ZV90KWRhdGEtPnNldC5idWZmZXJfc2l6ZSA6CisgICAgICAgICAgICAgIGN1cmx4X3NvdG91eihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCk7CisKKyAgICAgICAgICAgIHNpemVfdCBhY3R1YWxseXJlYWQ7CisgICAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICAgIGFjdHVhbGx5cmVhZCA9IGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmMoZGF0YS0+c3RhdGUuYnVmZmVyLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkdGhpc2Ftb3VudG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaW4pOworICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOworCisgICAgICAgICAgICBwYXNzZWQgKz0gYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgaWYoKGFjdHVhbGx5cmVhZCA9PSAwKSB8fCAoYWN0dWFsbHlyZWFkID4gcmVhZHRoaXNhbW91bnRub3cpKSB7CisgICAgICAgICAgICAgIC8qIHRoaXMgY2hlY2tzIGZvciBncmVhdGVyLXRoYW4gb25seSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgQ1VSTF9SRUFERlVOQ19BQk9SVCByZXR1cm4gY29kZSBzdGlsbCBhYm9ydHMgKi8KKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWFkIGRhdGEiKTsKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gd2hpbGUocGFzc2VkIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93LCBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVhZCAqLworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgeworICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgLT0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBTRlRQX1NFRUsoc3NoYy0+c2Z0cF9oYW5kbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgIH0KKyAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7CisgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKKyAgICAgIH0KKyAgICAgIC8qIHVwbG9hZCBkYXRhICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0CisgICAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLworICAgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOworCisgICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgc2Z0cCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAorICAgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKKworICAgICAgICAvKiBzaW5jZSB3ZSBkb24ndCByZWFsbHkgd2FpdCBmb3IgYW55dGhpbmcgYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0aGUKKyAgICAgICAgICAgc3RhdGUgbWFjaGluZSB0byBtb3ZlIG9uIGFzIHNvb24gYXMgcG9zc2libGUgc28gd2Ugc2V0IGEgdmVyeSBzaG9ydAorICAgICAgICAgICB0aW1lb3V0IGhlcmUgKi8KKyAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOworCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVDoKKyAgICAgIGlmKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkgPiAxKSB7CisgICAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHNmdHBfc2NwLT5wYXRoICsgMTsgLyogaWdub3JlIHRoZSBsZWFkaW5nICcvJyAqLworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTOgorICAgICAgc3NoYy0+c2xhc2hfcG9zID0gc3RyY2hyKHNzaGMtPnNsYXNoX3BvcywgJy8nKTsKKyAgICAgIGlmKHNzaGMtPnNsYXNoX3BvcykgeworICAgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gMDsKKworICAgICAgICBpbmZvZihkYXRhLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICclcydcbiIsIHNmdHBfc2NwLT5wYXRoKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUjoKKyAgICAgIC8qICdtb2RlJyAtIHBhcmFtZXRlciBpcyBwcmVsaW1pbmFyeSAtIGRlZmF1bHQgdG8gMDY0NCAqLworICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfbWtkaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9ICcvJzsKKyAgICAgICsrc3NoYy0+c2xhc2hfcG9zOworICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEFib3J0IGlmIGZhaWx1cmUgd2Fzbid0IHRoYXQgdGhlIGRpciBhbHJlYWR5IGV4aXN0cyBvciB0aGUKKyAgICAgICAgICogcGVybWlzc2lvbiB3YXMgZGVuaWVkIChjcmVhdGlvbiBtaWdodCBzdWNjZWVkIGZ1cnRoZXIgZG93biB0aGUKKyAgICAgICAgICogcGF0aCkgLSByZXRyeSBvbiB1bnNwZWNpZmljIEZBSUxVUkUgYWxzbworICAgICAgICAgKi8KKyAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgaWYoKGVyciAhPSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCisgICAgICAgICAgIChlcnIgIT0gTElCU1NIMl9GWF9GQUlMVVJFKSAmJgorICAgICAgICAgICAoZXJyICE9IExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQpKSB7CisgICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQorICAgICAgICogbGlzdGluZworICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTElCU1NIMl9TRlRQX09QRU5ESVIpOworICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7CisgICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQorICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICBpZighc3NoYy0+cmVhZGRpcl9maWxlbmFtZSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICBpZighc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVhZGRpcl9leChzc2hjLT5zZnRwX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX01BWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnJlYWRkaXJfYXR0cnMpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA+IDApIHsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAoc2l6ZV90KSByYzsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZVtzc2hjLT5yZWFkZGlyX2xlbl0gPSAnXDAnOworCisgICAgICAgIGlmKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5KSB7CisgICAgICAgICAgY2hhciAqdG1wTGluZTsKKworICAgICAgICAgIHRtcExpbmUgPSBhcHJpbnRmKCIlc1xuIiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgICAgaWYodG1wTGluZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcExpbmUsIHNzaGMtPnJlYWRkaXJfbGVuICsgMSk7CisgICAgICAgICAgZnJlZSh0bXBMaW5lKTsKKworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQorICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCisgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBzc2hjLT5yZWFkZGlyX2xlbiArIDE7CisKKyAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuID0gODAgKyBzc2hjLT5yZWFkZGlyX2N1cnJMZW47CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gY2FsbG9jKHNzaGMtPnJlYWRkaXJfdG90YWxMZW4sIDEpOworICAgICAgICAgIGlmKCFzc2hjLT5yZWFkZGlyX2xpbmUpIHsKKyAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgbWVtY3B5KHNzaGMtPnJlYWRkaXJfbGluZSwgc3NoYy0+cmVhZGRpcl9sb25nZW50cnksCisgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7CisgICAgICAgICAgaWYoKHNzaGMtPnJlYWRkaXJfYXR0cnMuZmxhZ3MgJiBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUykgJiYKKyAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMucGVybWlzc2lvbnMgJiBMSUJTU0gyX1NGVFBfU19JRk1UKSA9PQorICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU19JRkxOSykpIHsKKyAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPSBtYWxsb2MoUEFUSF9NQVggKyAxKTsKKyAgICAgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoLCBQQVRIX01BWCwgIiVzJXMiLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfTElOSyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IDApIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA8IDApIHsKKyAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyA6OiAlZCIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpLAorICAgICAgICAgICAgICBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0xJTks6CisgICAgICByYyA9CisgICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLCBMSUJTU0gyX1NGVFBfUkVBRExJTkspOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IChzaXplX3QpIHJjOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKKworICAgICAgLyogZ2V0IHJvb20gZm9yIHRoZSBmaWxlbmFtZSBhbmQgZXh0cmEgb3V0cHV0ICovCisgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuICs9IDQgKyBzc2hjLT5yZWFkZGlyX2xlbjsKKyAgICAgIG5ld19yZWFkZGlyX2xpbmUgPSBDdXJsX3NhZmVyZWFsbG9jKHNzaGMtPnJlYWRkaXJfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOworICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gTlVMTDsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gbmV3X3JlYWRkaXJfbGluZTsKKworICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NOgorICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sICJcbiIpOworICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7CisKKyAgICAgIGlmKCFyZXN1bHQpIHsKKworICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAorICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfRE9ORToKKyAgICAgIGlmKGxpYnNzaDJfc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2hhbmRsZSkgPT0KKyAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworCisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFdvcmsgb24gZ2V0dGluZyB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgICAqLworICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQorICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfRlhGX1JFQUQsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgeworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUOgorICAgIHsKKyAgICAgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIGF0dHJzOworCisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjIHx8CisgICAgICAgICAhKGF0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfU0laRSkgfHwKKyAgICAgICAgIChhdHRycy5maWxlc2l6ZSA9PSAwKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBsaWJzc2gyX3NmdHBfb3BlbigpIGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCisgICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQorICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAorICAgICAgICAgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7CisKKyAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgeworICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87CisgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgIGNoYXIgKnB0cjI7CisgICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKKyAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7CisKKyAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKKyAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpCisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7CisgICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKKyAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKQorICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOworICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLworICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgeworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbV90KSB7CisgICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIGF0dHJzLmZpbGVzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihmcm9tID4gdG8pIHsKKyAgICAgICAgICAgIGZyb20gPSB0bzsKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSB0byAtIGZyb20gKyAxOworICAgICAgICAgIH0KKworICAgICAgICAgIFNGVFBfU0VFSyhjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBmcm9tKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKKyAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBhdHRycy5maWxlc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KKyAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBhdHRycy5maWxlc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisgICAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgYXR0cnMuZmlsZXNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIE5vdyBzdG9yZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGFyZSBleHBlY3RlZCB0byBkb3dubG9hZCAqLworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIFNGVFBfU0VFSyhzc2hjLT5zZnRwX2hhbmRsZSwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgfQorICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KKyAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7CisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOworCisgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgaWYocmVzdWx0KSB7CisgICAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBvY2N1cjsgdGhlIGNsb3NlIHN0YXRlIHNob3VsZCBiZSBlbnRlcmVkCisgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaDIgZmlsZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc2Z0cF9zY3AtPnBhdGgpOworCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNGVFAgRE9ORSBkb25lXG4iKSk7CisKKyAgICAgIC8qIENoZWNrIGlmIG5leHRzdGF0ZSBpcyBzZXQgYW5kIG1vdmUgLm5leHRzdGF0ZSBjb3VsZCBiZSBQT1NUUVVPVEVfSU5JVAorICAgICAgICAgQWZ0ZXIgbmV4dHN0YXRlIGlzIGV4ZWN1dGVkLCB0aGUgY29udHJvbCBzaG91bGQgY29tZSBiYWNrIHRvCisgICAgICAgICBTU0hfU0ZUUF9DTE9TRSB0byBwYXNzIHRoZSBjb3JyZWN0IHJlc3VsdCBiYWNrICAqLworICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSAmJgorICAgICAgICAgc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9TRlRQX0NMT1NFKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX0NMT1NFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIC8qIGR1cmluZyB0aW1lcyB3ZSBnZXQgaGVyZSBkdWUgdG8gYSBicm9rZW4gdHJhbnNmZXIgYW5kIHRoZW4gdGhlCisgICAgICAgICBzZnRwX2hhbmRsZSBtaWdodCBub3QgaGF2ZSBiZWVuIHRha2VuIGRvd24gc28gbWFrZSBzdXJlIHRoYXQgaXMgZG9uZQorICAgICAgICAgYmVmb3JlIHdlIHByb2NlZWQgKi8KKworICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaDIgZmlsZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZihzc2hjLT5zZnRwX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc2h1dGRvd24oc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHN0b3AgbGlic3NoMiBzZnRwIHN1YnN5c3RlbVxuIik7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6CisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZzZnRwX3NjcC0+cGF0aCk7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTQ1AgcmVxdWlyZXMgYSBrbm93biBmaWxlIHNpemUgZm9yIHVwbG9hZCIpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfVVBMT0FEX0lOSVQ6CisgICAgICAvKgorICAgICAgICogbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoIHRoYXQKKyAgICAgICAqIGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIgLiAgSWYgdGhpcyBpcworICAgICAgICogbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBsYXN0CisgICAgICAgKiBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKyAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0KKyAgICAgICAgU0NQX1NFTkQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCBkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMsCisgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIGludCBzc2hfZXJyOworICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3NoX2VyciA9IChpbnQpKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRShzc2hfZXJyKTsKKyAgICAgICAgLyogTWFwIGdlbmVyaWMgZXJyb3JzIHRvIHVwbG9hZCBmYWlsZWQgKi8KKyAgICAgICAgaWYoc3NoYy0+YWN0dWFsY29kZSA9PSBDVVJMRV9TU0ggfHwKKyAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9PSBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQpCisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1VQTE9BRF9GQUlMRUQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiB1cGxvYWQgZGF0YSAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgZGF0YS0+cmVxLnNpemUsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7CisKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAorICAgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KKyAgICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKKworICAgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHNjcCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAorICAgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9ET1dOTE9BRF9JTklUOgorICAgIHsKKyAgICAgIGN1cmxfb2ZmX3QgYnl0ZWNvdW50OworCisgICAgICAvKgorICAgICAgICogV2UgbXVzdCBjaGVjayB0aGUgcmVtb3RlIGZpbGU7IGlmIGl0IGlzIGEgZGlyZWN0b3J5IG5vIHZhbHVlcyB3aWxsCisgICAgICAgKiBiZSBzZXQgaW4gc2IKKyAgICAgICAqLworCisgICAgICAvKgorICAgICAgICogSWYgc3VwcG9ydCBmb3IgPjJHQiBmaWxlcyBleGlzdHMsIHVzZSBpdC4KKyAgICAgICAqLworCisgICAgICAvKiBnZXQgYSBmcmVzaCBuZXcgY2hhbm5lbCBmcm9tIHRoZSBzc2ggbGF5ZXIgKi8KKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNIDwgMHgwMTA3MDAKKyAgICAgIHN0cnVjdCBzdGF0IHNiOworICAgICAgbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IGxpYnNzaDJfc2NwX3JlY3Yoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsICZzYik7CisjZWxzZQorICAgICAgbGlic3NoMl9zdHJ1Y3Rfc3RhdCBzYjsKKyAgICAgIG1lbXNldCgmc2IsIDAsIHNpemVvZihsaWJzc2gyX3N0cnVjdF9zdGF0KSk7CisgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IGxpYnNzaDJfc2NwX3JlY3YyKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCwgJnNiKTsKKyNlbmRpZgorCisgICAgICBpZighc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgaW50IHNzaF9lcnI7CisgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworCisgICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQorICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisgICAgICAgIHNzaF9lcnIgPSAoaW50KShsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKSk7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoc3NoX2Vycik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiBkb3dubG9hZCBkYXRhICovCisgICAgICBieXRlY291bnQgPSAoY3VybF9vZmZfdClzYi5zdF9zaXplOworICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gIChjdXJsX29mZl90KXNiLnN0X3NpemU7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBieXRlY291bnQsIEZBTFNFLCAtMSk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7CisKKyAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9ET05FOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9TRU5EX0VPRik7CisgICAgICBlbHNlCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1NFTkRfRU9GOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfc2VuZF9lb2Yoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBsaWJzc2gyIGNoYW5uZWwgRU9GOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9FT0YpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfV0FJVF9FT0Y6CisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF93YWl0X2VvZihzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBFT0Y6ICVkICVzXG4iLCByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9DTE9TRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9XQUlUX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd2FpdF9jbG9zZWQoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJDaGFubmVsIGZhaWxlZCB0byBjbG9zZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfZnJlZShzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNjcCBzdWJzeXN0ZW06ICVkICVzXG4iLAorICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IE5VTEw7CisgICAgICB9CisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNDUCBET05FIHBoYXNlIGNvbXBsZXRlXG4iKSk7CisjaWYgMCAvKiBQUkVWICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyNlbmRpZgorICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0VTU0lPTl9ESVNDT05ORUNUOgorICAgICAgLyogZHVyaW5nIHdlaXJkIHRpbWVzIHdoZW4gd2UndmUgYmVlbiBwcmVtYXR1cmVseSBhYm9ydGVkLCB0aGUgY2hhbm5lbAorICAgICAgICAgaXMgc3RpbGwgYWxpdmUgd2hlbiB3ZSByZWFjaCB0aGlzIHN0YXRlIGFuZCB3ZSBNVVNUIGtpbGwgdGhlIGNoYW5uZWwKKyAgICAgICAgIHByb3Blcmx5IGZpcnN0ICovCisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF9mcmVlKHNzaGMtPnNzaF9jaGFubmVsKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBmcmVlIGxpYnNzaDIgc2NwIHN1YnN5c3RlbTogJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOworICAgICAgICB9CisgICAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbiwgIlNodXRkb3duIik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZGlzY29ubmVjdCBsaWJzc2gyIHNlc3Npb246ICVkICVzXG4iLAorICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgICAgIGlmKHNzaGMtPmtoKSB7CisgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X2ZyZWUoc3NoYy0+a2gpOworICAgICAgICBzc2hjLT5raCA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIGlmKHNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfZGlzY29ubmVjdChzc2hjLT5zc2hfYWdlbnQpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSBsaWJzc2gyIGFnZW50OiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgbGlic3NoMl9hZ2VudF9mcmVlKHNzaGMtPnNzaF9hZ2VudCk7CisgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IE5VTEw7CisKKyAgICAgICAgLyogTkI6IHRoZXJlIGlzIG5vIG5lZWQgdG8gZnJlZSBpZGVudGl0aWVzLCB0aGV5IGFyZSBwYXJ0IG9mIGludGVybmFsCisgICAgICAgICAgIGFnZW50IHN0dWZmICovCisgICAgICAgIHNzaGMtPnNzaGFnZW50X2lkZW50aXR5ID0gTlVMTDsKKyAgICAgICAgc3NoYy0+c3NoYWdlbnRfcHJldl9pZGVudGl0eSA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNlc3Npb246ICVkICVzXG4iLCByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c3NoX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICAvKiB3b3JzdC1jYXNlIHNjZW5hcmlvIGNsZWFudXAgKi8KKworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCk7CisgICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfY2hhbm5lbCA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNmdHBfc2Vzc2lvbiA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNmdHBfaGFuZGxlID09IE5VTEwpOworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgICAgICBERUJVR0FTU0VSVChzc2hjLT5raCA9PSBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9hZ2VudCA9PSBOVUxMKTsKKyNlbmRpZgorCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGluZSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOworCisgICAgICAvKiB0aGUgY29kZSB3ZSBhcmUgYWJvdXQgdG8gcmV0dXJuICovCisgICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlOworCisgICAgICBtZW1zZXQoc3NoYywgMCwgc2l6ZW9mKHN0cnVjdCBzc2hfY29ubikpOworCisgICAgICBjb25uY2xvc2UoY29ubiwgIlNTSCBzZXNzaW9uIGZyZWUiKTsKKyAgICAgIHNzaGMtPnN0YXRlID0gU1NIX1NFU1NJT05fRlJFRTsgLyogY3VycmVudCAqLworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9RVUlUOgorICAgICAgLyogZmFsbHRocm91Z2gsIGp1c3Qgc3RvcCEgKi8KKyAgICBkZWZhdWx0OgorICAgICAgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICB9IHdoaWxlKCFyYyAmJiAoc3NoYy0+c3RhdGUgIT0gU1NIX1NUT1ApKTsKKworICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgIC8qIHdlIHdvdWxkIGJsb2NrLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgcmVhZHkgKGluIHRoZQorICAgICAgIHJpZ2h0IGRpcmVjdGlvbiB0b28pISAqLworICAgICpibG9jayA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpIHRvIHdhaXQgZm9yIGFuZAorICAgZm9yIHdoYXQgYWN0aW9ucyBpbiB0aGUgRE9fRE9ORSwgUEVSRk9STSBhbmQgV0FJVFBFUkZPUk0gc3RhdGVzICovCitzdGF0aWMgaW50IHNzaF9wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCit7CisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgIGludCBiaXRtYXAgPSBHRVRTT0NLX0JMQU5LOworCisgIHNvY2tbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKworICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9SRUNWKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKKyNlbHNlCisgIC8qIGlmIHdlIGRvbid0IGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpCisgICAgIGZ1bmN0aW9uIGV2ZW4gZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KKyAgcmV0dXJuIEN1cmxfc2luZ2xlX2dldHNvY2soY29ubiwgc29jayk7CisjZW5kaWYKK30KKworLyogR2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpCisgICB0byB3YWl0IGZvciBhbmQgZm9yIHdoYXQgYWN0aW9ucyBkdXJpbmcgdGhlIERPSU5HIGFuZCBQUk9UT0NPTk5FQ1Qgc3RhdGVzKi8KK3N0YXRpYyBpbnQgc3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKQoreworI2lmbmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9CTE9DS19ESVJFQ1RJT04KKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29jazsKKyAgLyogaWYgd2UgZG9uJ3Qga25vdyBhbnkgZGlyZWN0aW9uIHdlIGNhbiBqdXN0IHBsYXkgYWxvbmcgYXMgd2UgdXNlZCB0byBhbmQKKyAgICAgbm90IHByb3ZpZGUgYW55IHNlbnNpYmxlIGluZm8gKi8KKyAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CisjZWxzZQorICAvKiBpZiB3ZSBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKSBmdW5jdGlvbiBldmVuCisgICAgIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCisgIHJldHVybiBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOworI2VuZGlmCit9CisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9CTE9DS19ESVJFQ1RJT04KKy8qCisgKiBXaGVuIG9uZSBvZiB0aGUgbGlic3NoMiBmdW5jdGlvbnMgaGFzIHJldHVybmVkIExJQlNTSDJfRVJST1JfRUFHQUlOIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmlndXJlIG91dCBpbiB3aGF0IGRpcmVjdGlvbiBhbmQgc3RvcmVzIHRoaXMgaW5mbyBzbworICogdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdC4gTWFrZSBzdXJlIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gaW4gYWxsIGNhc2VzIHNvIHRoYXQgd2hlbiBpdCBfZG9lc24ndF8gcmV0dXJuIEVBR0FJTiB3ZSBjYW4KKyAqIHJlc3RvcmUgdGhlIGRlZmF1bHQgd2FpdCBiaXRzLgorICovCitzdGF0aWMgdm9pZCBzc2hfYmxvY2syd2FpdGZvcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgYmxvY2spCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBpbnQgZGlyID0gMDsKKyAgaWYoYmxvY2spIHsKKyAgICBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgaWYoZGlyKSB7CisgICAgICAvKiB0cmFuc2xhdGUgdGhlIGxpYnNzaDIgZGVmaW5lIGJpdHMgaW50byBvdXIgb3duIGJpdCBkZWZpbmVzICovCisgICAgICBjb25uLT53YWl0Zm9yID0gKChkaXImTElCU1NIMl9TRVNTSU9OX0JMT0NLX0lOQk9VTkQpP0tFRVBfUkVDVjowKSB8CisgICAgICAgICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19PVVRCT1VORCk/S0VFUF9TRU5EOjApOworICAgIH0KKyAgfQorICBpZighZGlyKQorICAgIC8qIEl0IGRpZG4ndCBibG9jayBvciBsaWJzc2gyIGRpZG4ndCByZXZlYWwgaW4gd2hpY2ggZGlyZWN0aW9uLCBwdXQgYmFjaworICAgICAgIHRoZSBvcmlnaW5hbCBzZXQgKi8KKyAgICBjb25uLT53YWl0Zm9yID0gc3NoYy0+b3JpZ193YWl0Zm9yOworfQorI2Vsc2UKKyAgLyogbm8gbGlic3NoMiBkaXJlY3Rpb25hbCBzdXBwb3J0IHNvIHdlIHNpbXBseSBkb24ndCBrbm93ICovCisjZGVmaW5lIHNzaF9ibG9jazJ3YWl0Zm9yKHgseSkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKy8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgYm9vbCBibG9jazsgLyogd2Ugc3RvcmUgdGhlIHN0YXR1cyBhbmQgdXNlIHRoYXQgdG8gcHJvdmlkZSBhIHNzaF9nZXRzb2NrKCkKKyAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKi8KKyAgZG8geworICAgIHJlc3VsdCA9IHNzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7CisgICAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IsIGl0IGlzbid0IGRvbmUgYW5kIGl0IGRpZG4ndCBFV09VTERCTE9DSywgdGhlbgorICAgICAgIHRyeSBhZ2FpbiAqLworICB9IHdoaWxlKCFyZXN1bHQgJiYgISpkb25lICYmICFibG9jayk7CisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIGJsb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2Jsb2NrX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRpc2Nvbm5lY3QpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7CisgICAgYm9vbCBibG9jazsKKyAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOworICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOworCisgICAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKCFkaXNjb25uZWN0KSB7CisgICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCisgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGxlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIEZBTFNFKTsKKyAgICAgIGlmKGxlZnQgPCAwKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0Iik7CisgICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgICAgaWYoYmxvY2spIHsKKyAgICAgIGludCBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfSU5CT1VORCAmIGRpcikKKyAgICAgICAgZmRfcmVhZCA9IHNvY2s7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQgJiBkaXIpCisgICAgICAgIGZkX3dyaXRlID0gc29jazsKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6KHRpbWVfdClsZWZ0KTsKKyAgICB9CisjZW5kaWYKKworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFNTSCBzZXR1cCBhbmQgY29ubmVjdGlvbgorICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgU1NIUFJPVE8gKnNzaDsKKworICBjb25uLT5kYXRhLT5yZXEucHJvdG9wID0gc3NoID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgU1NIUFJPVE8pKTsKKyAgaWYoIXNzaCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDdXJsX3JlY3Ygc2NwX3JlY3YsIHNmdHBfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgc2NwX3NlbmQsIHNmdHBfc2VuZDsKKworLyoKKyAqIEN1cmxfc3NoX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCisgKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4KKyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKKyAgY3VybF9zb2NrZXRfdCBzb2NrOworI2VuZGlmCisgIHN0cnVjdCBzc2hfY29ubiAqc3NoOworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIHNzaF9zZXR1cF9jb25uZWN0aW9uKGNvbm4pOworCisgIC8qIFdlIGRlZmF1bHQgdG8gcGVyc2lzdGVudCBjb25uZWN0aW9ucy4gV2Ugc2V0IHRoaXMgYWxyZWFkeSBpbiB0aGlzIGNvbm5lY3QKKyAgICAgZnVuY3Rpb24gdG8gbWFrZSB0aGUgcmUtdXNlIGNoZWNrcyBwcm9wZXJseSBiZSBhYmxlIHRvIGNoZWNrIHRoaXMgYml0LiAqLworICBjb25ua2VlcChjb25uLCAiU1NIIGRlZmF1bHQiKTsKKworICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApIHsKKyAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNjcF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2NwX3NlbmQ7CisgIH0KKyAgZWxzZSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzZnRwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzZnRwX3NlbmQ7CisgIH0KKyAgc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7CisKKyNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKKyAgaWYoY29ubi0+dXNlcikgeworICAgIGluZm9mKGRhdGEsICJVc2VyOiAlc1xuIiwgY29ubi0+dXNlcik7CisgIH0KKyAgaWYoY29ubi0+cGFzc3dkKSB7CisgICAgaW5mb2YoZGF0YSwgIlBhc3N3b3JkOiAlc1xuIiwgY29ubi0+cGFzc3dkKTsKKyAgfQorICBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisjZW5kaWYgLyogQ1VSTF9MSUJTU0gyX0RFQlVHICovCisKKyAgc3NoLT5zc2hfc2Vzc2lvbiA9IGxpYnNzaDJfc2Vzc2lvbl9pbml0X2V4KG15X2xpYnNzaDJfbWFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfbGlic3NoMl9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfbGlic3NoMl9yZWFsbG9jLCBjb25uKTsKKyAgaWYoc3NoLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGlzaW5nIHNzaCBzZXNzaW9uIik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgaWYoZGF0YS0+c2V0LnNzaF9jb21wcmVzc2lvbikgeworI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDgKKyAgICBpZihsaWJzc2gyX3Nlc3Npb25fZmxhZyhzc2gtPnNzaF9zZXNzaW9uLCBMSUJTU0gyX0ZMQUdfQ09NUFJFU1MsIDEpIDwgMCkKKyNlbmRpZgorICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBlbmFibGUgY29tcHJlc3Npb24gZm9yIHNzaCBzZXNzaW9uXG4iKTsKKyAgfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7CisgICAgaW50IHJjOworICAgIHNzaC0+a2ggPSBsaWJzc2gyX2tub3duaG9zdF9pbml0KHNzaC0+c3NoX3Nlc3Npb24pOworICAgIGlmKCFzc2gtPmtoKSB7CisgICAgICBsaWJzc2gyX3Nlc3Npb25fZnJlZShzc2gtPnNzaF9zZXNzaW9uKTsKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICB9CisKKyAgICAvKiByZWFkIGFsbCBrbm93biBob3N0cyBmcm9tIHRoZXJlICovCisgICAgcmMgPSBsaWJzc2gyX2tub3duaG9zdF9yZWFkZmlsZShzc2gtPmtoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfRklMRV9PUEVOU1NIKTsKKyAgICBpZihyYyA8IDApCisgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHJlYWQga25vd24gaG9zdHMgZnJvbSAlc1xuIiwKKyAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGxpYnNzaDJfdHJhY2Uoc3NoLT5zc2hfc2Vzc2lvbiwgfjApOworICBpbmZvZihkYXRhLCAiU1NIIHNvY2tldDogJWRcbiIsIChpbnQpc29jayk7CisjZW5kaWYgLyogQ1VSTF9MSUJTU0gyX0RFQlVHICovCisKKyAgc3RhdGUoY29ubiwgU1NIX0lOSVQpOworCisgIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNjcF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNDUC4gR2V0IGEgZmlsZSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLworCisgIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLworICBzdGF0ZShjb25uLCBTU0hfU0NQX1RSQU5TX0lOSVQpOworCisgIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLworICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KK3N0YXRpYyBDVVJMY29kZSBzY3BfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVGhlIERPIGZ1bmN0aW9uIGlzIGdlbmVyaWMgZm9yIGJvdGggcHJvdG9jb2xzLiBUaGVyZSB3YXMgcHJldmlvdXNseSB0d28KKyAqIHNlcGFyYXRlIG9uZXMgYnV0IHRoaXMgd2F5IG1lYW5zIGxlc3MgZHVwbGljYXRlZCBjb2RlLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIGJvb2wgY29ubmVjdGVkID0gMDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgICpkb25lID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gZmFsc2UgKi8KKworICBkYXRhLT5yZXEuc2l6ZSA9IC0xOyAvKiBtYWtlIHN1cmUgdGhpcyBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KKworICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7IC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KKyAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLworCisgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHJlc3VsdCA9IHNjcF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKKyAgZWxzZQorICAgIHJlc3VsdCA9IHNmdHBfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCisgICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgorICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLworc3RhdGljIENVUkxjb2RlIHNjcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaCA9ICZjb25uLT5wcm90by5zc2hjOworICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOworCisgIGlmKHNzaC0+c3NoX3Nlc3Npb24pIHsKKyAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCisKKyAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKworICAgIHJlc3VsdCA9IHNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCisgICBkb25lIGZ1bmN0aW9ucyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisKKyAgaWYoIXN0YXR1cykgeworICAgIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLworICAgIHJlc3VsdCA9IHNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgRkFMU0UpOworICB9CisgIGVsc2UKKyAgICByZXN1bHQgPSBzdGF0dXM7CisKKyAgaWYoc2Z0cF9zY3ApCisgICAgQ3VybF9zYWZlZnJlZShzZnRwX3NjcC0+cGF0aCk7CisgIGlmKEN1cmxfcGdyc0RvbmUoY29ubikpCisgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgY29ubi0+ZGF0YS0+cmVxLmtlZXBvbiA9IDA7IC8qIGNsZWFyIGFsbCBiaXRzICovCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICAodm9pZClwcmVtYXR1cmU7IC8qIG5vdCB1c2VkICovCisKKyAgaWYoIXN0YXR1cykKKyAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPTkUpOworCisgIHJldHVybiBzc2hfZG9uZShjb25uLCBzdGF0dXMpOworCit9CisKK3N0YXRpYyBzc2l6ZV90IHNjcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7CisgICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KKworICAvKiBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoKSByZXR1cm5zIGludCEgKi8KKyAgbndyaXRlID0gKHNzaXplX3QpCisgICAgbGlic3NoMl9jaGFubmVsX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc3NoX2NoYW5uZWwsIG1lbSwgbGVuKTsKKworICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKKworICBpZihud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbndyaXRlID0gMDsKKyAgfQorICBlbHNlIGlmKG53cml0ZSA8IExJQlNTSDJfRVJST1JfTk9ORSkgeworICAgICplcnIgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoKGludClud3JpdGUpOworICAgIG53cml0ZSA9IC0xOworICB9CisKKyAgcmV0dXJuIG53cml0ZTsKK30KKworc3RhdGljIHNzaXplX3Qgc2NwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkOworICAodm9pZClzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCisKKyAgLyogbGlic3NoMl9jaGFubmVsX3JlYWQoKSByZXR1cm5zIGludCAqLworICBucmVhZCA9IChzc2l6ZV90KQorICAgIGxpYnNzaDJfY2hhbm5lbF9yZWFkKGNvbm4tPnByb3RvLnNzaGMuc3NoX2NoYW5uZWwsIG1lbSwgbGVuKTsKKworICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOworICBpZihucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBucmVhZCA9IC0xOworICB9CisKKyAgcmV0dXJuIG5yZWFkOworfQorCisvKgorICogPT09PT09PT09PT09PT09IFNGVFAgPT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmdHBfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTRlRQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKworICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKKworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KKyAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCisgICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1Qgc3RhcnRzIG5vd1xuIikpOworCisgIGlmKGNvbm4tPnByb3RvLnNzaGMuc3NoX3Nlc3Npb24pIHsKKyAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfU0hVVERPV04pOworICAgIHJlc3VsdCA9IHNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBQb3N0IHF1b3RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgU0ZUUF9DTE9TRSBzdGF0ZSB0byBhdm9pZAorICAgICAgIGVycm9ycyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gb3BlbiBmaWxlIGhhbmRsZXMgZHVyaW5nIFBPU1RRVU9URQorICAgICAgIG9wZXJhdGlvbiAqLworICAgIGlmKCFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSAmJiAhY29ubi0+Yml0cy5yZXRyeSkKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgfQorICByZXR1cm4gc3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7ICAgLyogbGlic3NoMl9zZnRwX3dyaXRlKCkgdXNlZCB0byByZXR1cm4gc2l6ZV90IGluIDAuMTQKKyAgICAgICAgICAgICAgICAgICAgICAgYnV0IGlzIGNoYW5nZWQgdG8gc3NpemVfdCBpbiAwLjE1LiBUaGVzZSBkYXlzIHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbGlic3NoMiAwLjE1Ki8KKyAgKHZvaWQpc29ja2luZGV4OworCisgIG53cml0ZSA9IGxpYnNzaDJfc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7CisKKyAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG53cml0ZSA9IDA7CisgIH0KKyAgZWxzZSBpZihud3JpdGUgPCBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKyAgICAqZXJyID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKChpbnQpbndyaXRlKTsKKyAgICBud3JpdGUgPSAtMTsKKyAgfQorCisgIHJldHVybiBud3JpdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzCisgKiBvciA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBucmVhZDsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG5yZWFkID0gbGlic3NoMl9zZnRwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2hhbmRsZSwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKworICB9CisgIGVsc2UgaWYobnJlYWQgPCAwKSB7CisgICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW5yZWFkKTsKKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZnRwX2xpYnNzaDJfc3RyZXJyb3IoaW50IGVycikKK3sKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX0ZJTEU6CisgICAgICByZXR1cm4gIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgorICAgICAgcmV0dXJuICJQZXJtaXNzaW9uIGRlbmllZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRkFJTFVSRToKKyAgICAgIHJldHVybiAiT3BlcmF0aW9uIGZhaWxlZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfQkFEX01FU1NBR0U6CisgICAgICByZXR1cm4gIkJhZCBtZXNzYWdlIGZyb20gU0ZUUCBzZXJ2ZXIiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX0NPTk5FQ1RJT046CisgICAgICByZXR1cm4gIk5vdCBjb25uZWN0ZWQgdG8gU0ZUUCBzZXJ2ZXIiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0NPTk5FQ1RJT05fTE9TVDoKKyAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0byBTRlRQIHNlcnZlciBsb3N0IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9PUF9VTlNVUFBPUlRFRDoKKyAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgU0ZUUCBzZXJ2ZXIiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0lOVkFMSURfSEFORExFOgorICAgICAgcmV0dXJuICJJbnZhbGlkIGhhbmRsZSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9QQVRIOgorICAgICAgcmV0dXJuICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTOgorICAgICAgcmV0dXJuICJGaWxlIGFscmVhZHkgZXhpc3RzIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgorICAgICAgcmV0dXJuICJGaWxlIGlzIHdyaXRlIHByb3RlY3RlZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fTUVESUE6CisgICAgICByZXR1cm4gIk5vIG1lZGlhIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9OT19TUEFDRV9PTl9GSUxFU1lTVEVNOgorICAgICAgcmV0dXJuICJEaXNrIGZ1bGwiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgorICAgICAgcmV0dXJuICJVc2VyIHF1b3RhIGV4Y2VlZGVkIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9VTktOT1dOX1BSSU5DSVBMRToKKyAgICAgIHJldHVybiAiVW5rbm93biBwcmluY2lwbGUiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0xPQ0tfQ09ORmxJQ1Q6CisgICAgICByZXR1cm4gIkZpbGUgbG9jayBjb25mbGljdCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKKyAgICAgIHJldHVybiAiRGlyZWN0b3J5IG5vdCBlbXB0eSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9UX0FfRElSRUNUT1JZOgorICAgICAgcmV0dXJuICJOb3QgYSBkaXJlY3RvcnkiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0lOVkFMSURfRklMRU5BTUU6CisgICAgICByZXR1cm4gIkludmFsaWQgZmlsZW5hbWUiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0xJTktfTE9PUDoKKyAgICAgIHJldHVybiAiTGluayBwb2ludHMgdG8gaXRzZWxmIjsKKyAgfQorICByZXR1cm4gIlVua25vd24gZXJyb3IgaW4gbGlic3NoMiI7Cit9CisKK0NVUkxjb2RlIEN1cmxfc3NoX2luaXQodm9pZCkKK3sKKyNpZmRlZiBIQVZFX0xJQlNTSDJfSU5JVAorICBpZihsaWJzc2gyX2luaXQoMCkpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoMl9pbml0IGZhaWxlZFxuIikpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorI2VuZGlmCisgIHJldHVybiBDVVJMRV9PSzsKK30KKwordm9pZCBDdXJsX3NzaF9jbGVhbnVwKHZvaWQpCit7CisjaWZkZWYgSEFWRV9MSUJTU0gyX0VYSVQKKyAgKHZvaWQpbGlic3NoMl9leGl0KCk7CisjZW5kaWYKK30KKworc2l6ZV90IEN1cmxfc3NoX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQoreworICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgYnVmbGVuLCAibGlic3NoMi8lcyIsIExJQlNTSDJfVkVSU0lPTik7Cit9CisKKyNlbmRpZiAvKiBVU0VfTElCU1NIMiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC9zc2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvc3NoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ZWU1MgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvc3NoLmgKQEAgLTAsMCArMSwyNjIgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU1NIX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU1NIX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmIGRlZmluZWQoSEFWRV9MSUJTU0gyX0gpCisjaW5jbHVkZSA8bGlic3NoMi5oPgorI2luY2x1ZGUgPGxpYnNzaDJfc2Z0cC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX0xJQlNTSF9MSUJTU0hfSCkKKyNpbmNsdWRlIDxsaWJzc2gvbGlic3NoLmg+CisjaW5jbHVkZSA8bGlic3NoL3NmdHAuaD4KKyNlbGlmIGRlZmluZWQoVVNFX1dPTEZTU0gpCisjaW5jbHVkZSA8d29sZnNzaC9zc2guaD4KKyNpbmNsdWRlIDx3b2xmc3NoL3dvbGZzZnRwLmg+CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNTSCB1bmlxdWUgc2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0geworICBTU0hfTk9fU1RBVEUgPSAtMSwgIC8qIFVzZWQgZm9yICJuZXh0U3RhdGUiIHNvIHNheSB0aGVyZSBpcyBub25lICovCisgIFNTSF9TVE9QID0gMCwgICAgICAgLyogZG8gbm90aGluZyBzdGF0ZSwgc3RvcHMgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKworICBTU0hfSU5JVCwgICAgICAgICAgIC8qIEZpcnN0IHN0YXRlIGluIFNTSC1DT05ORUNUICovCisgIFNTSF9TX1NUQVJUVVAsICAgICAgLyogU2Vzc2lvbiBzdGFydHVwICovCisgIFNTSF9IT1NUS0VZLCAgICAgICAgLyogdmVyaWZ5IGhvc3RrZXkgKi8KKyAgU1NIX0FVVEhMSVNULAorICBTU0hfQVVUSF9QS0VZX0lOSVQsCisgIFNTSF9BVVRIX1BLRVksCisgIFNTSF9BVVRIX1BBU1NfSU5JVCwKKyAgU1NIX0FVVEhfUEFTUywKKyAgU1NIX0FVVEhfQUdFTlRfSU5JVCwgLyogaW5pdGlhbGl6ZSB0aGVuIHdhaXQgZm9yIGNvbm5lY3Rpb24gdG8gYWdlbnQgKi8KKyAgU1NIX0FVVEhfQUdFTlRfTElTVCwgLyogYXNrIGZvciBsaXN0IHRoZW4gd2FpdCBmb3IgZW50aXJlIGxpc3QgdG8gY29tZSAqLworICBTU0hfQVVUSF9BR0VOVCwgICAgICAvKiBhdHRlbXB0IG9uZSBrZXkgYXQgYSB0aW1lICovCisgIFNTSF9BVVRIX0hPU1RfSU5JVCwKKyAgU1NIX0FVVEhfSE9TVCwKKyAgU1NIX0FVVEhfS0VZX0lOSVQsCisgIFNTSF9BVVRIX0tFWSwKKyAgU1NIX0FVVEhfR1NTQVBJLAorICBTU0hfQVVUSF9ET05FLAorICBTU0hfU0ZUUF9JTklULAorICBTU0hfU0ZUUF9SRUFMUEFUSCwgICAvKiBMYXN0IHN0YXRlIGluIFNTSC1DT05ORUNUICovCisKKyAgU1NIX1NGVFBfUVVPVEVfSU5JVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ETyAqLworICBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVCwgLyogKFBvc3NpYmx5KSBGaXJzdCBzdGF0ZSBpbiBTRlRQLURPTkUgKi8KKyAgU1NIX1NGVFBfUVVPVEUsCisgIFNTSF9TRlRQX05FWFRfUVVPVEUsCisgIFNTSF9TRlRQX1FVT1RFX1NUQVQsCisgIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQsCisgIFNTSF9TRlRQX1FVT1RFX1NZTUxJTkssCisgIFNTSF9TRlRQX1FVT1RFX01LRElSLAorICBTU0hfU0ZUUF9RVU9URV9SRU5BTUUsCisgIFNTSF9TRlRQX1FVT1RFX1JNRElSLAorICBTU0hfU0ZUUF9RVU9URV9VTkxJTkssCisgIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMsCisgIFNTSF9TRlRQX0dFVElORk8sCisgIFNTSF9TRlRQX0ZJTEVUSU1FLAorICBTU0hfU0ZUUF9UUkFOU19JTklULAorICBTU0hfU0ZUUF9VUExPQURfSU5JVCwKKyAgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCwKKyAgU1NIX1NGVFBfQ1JFQVRFX0RJUlMsCisgIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSLAorICBTU0hfU0ZUUF9SRUFERElSX0lOSVQsCisgIFNTSF9TRlRQX1JFQURESVIsCisgIFNTSF9TRlRQX1JFQURESVJfTElOSywKKyAgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00sCisgIFNTSF9TRlRQX1JFQURESVJfRE9ORSwKKyAgU1NIX1NGVFBfRE9XTkxPQURfSU5JVCwKKyAgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCwgLyogTGFzdCBzdGF0ZSBpbiBTRlRQLURPICovCisgIFNTSF9TRlRQX0NMT1NFLCAgICAvKiBMYXN0IHN0YXRlIGluIFNGVFAtRE9ORSAqLworICBTU0hfU0ZUUF9TSFVURE9XTiwgLyogRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ESVNDT05ORUNUICovCisgIFNTSF9TQ1BfVFJBTlNfSU5JVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0NQLURPICovCisgIFNTSF9TQ1BfVVBMT0FEX0lOSVQsCisgIFNTSF9TQ1BfRE9XTkxPQURfSU5JVCwKKyAgU1NIX1NDUF9ET1dOTE9BRCwKKyAgU1NIX1NDUF9ET05FLAorICBTU0hfU0NQX1NFTkRfRU9GLAorICBTU0hfU0NQX1dBSVRfRU9GLAorICBTU0hfU0NQX1dBSVRfQ0xPU0UsCisgIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFLCAgIC8qIExhc3Qgc3RhdGUgaW4gU0NQLURPTkUgKi8KKyAgU1NIX1NFU1NJT05fRElTQ09OTkVDVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0NQLURJU0NPTk5FQ1QgKi8KKyAgU1NIX1NFU1NJT05fRlJFRSwgICAgICAgLyogTGFzdCBzdGF0ZSBpbiBTQ1AvU0ZUUC1ESVNDT05ORUNUICovCisgIFNTSF9RVUlULAorICBTU0hfTEFTVCAgLyogbmV2ZXIgdXNlZCAqLworfSBzc2hzdGF0ZTsKKworLyogdGhpcyBzdHJ1Y3QgaXMgdXNlZCBpbiB0aGUgSGFuZGxlRGF0YSBzdHJ1Y3Qgd2hpY2ggaXMgcGFydCBvZiB0aGUKKyAgIEN1cmxfZWFzeSwgd2hpY2ggbWVhbnMgdGhpcyBpcyB1c2VkIG9uIGEgcGVyLWVhc3kgaGFuZGxlIGJhc2lzLgorICAgRXZlcnl0aGluZyB0aGF0IGlzIHN0cmljdGx5IHJlbGF0ZWQgdG8gYSBjb25uZWN0aW9uIGlzIGJhbm5lZCBmcm9tIHRoaXMKKyAgIHN0cnVjdC4gKi8KK3N0cnVjdCBTU0hQUk9UTyB7CisgIGNoYXIgKnBhdGg7ICAgICAgICAgICAgICAgICAgLyogdGhlIHBhdGggd2Ugb3BlcmF0ZSBvbiAqLworfTsKKworLyogc3NoX2Nvbm4gaXMgdXNlZCBmb3Igc3RydWN0IGNvbm5lY3Rpb24tb3JpZW50ZWQgZGF0YSBpbiB0aGUgY29ubmVjdGRhdGEKKyAgIHN0cnVjdCAqLworc3RydWN0IHNzaF9jb25uIHsKKyAgY29uc3QgY2hhciAqYXV0aGxpc3Q7ICAgICAgIC8qIExpc3Qgb2YgYXV0aC4gbWV0aG9kcywgbWFuYWdlZCBieSBsaWJzc2gyICovCisKKyAgLyogY29tbW9uICovCisgIGNvbnN0IGNoYXIgKnBhc3NwaHJhc2U7ICAgICAvKiBwYXNzLXBocmFzZSB0byB1c2UgKi8KKyAgY2hhciAqcnNhX3B1YjsgICAgICAgICAgICAgIC8qIHBhdGggbmFtZSAqLworICBjaGFyICpyc2E7ICAgICAgICAgICAgICAgICAgLyogcGF0aCBuYW1lICovCisgIGJvb2wgYXV0aGVkOyAgICAgICAgICAgICAgICAvKiB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIGZpbmUgKi8KKyAgc3Noc3RhdGUgc3RhdGU7ICAgICAgICAgICAgIC8qIGFsd2F5cyB1c2Ugc3NoLmM6c3RhdGUoKSB0byBjaGFuZ2Ugc3RhdGUhICovCisgIHNzaHN0YXRlIG5leHRzdGF0ZTsgICAgICAgICAvKiB0aGUgc3RhdGUgdG8gZ290byBhZnRlciBzdG9wcGluZyAqLworICBDVVJMY29kZSBhY3R1YWxjb2RlOyAgICAgICAgLyogdGhlIGFjdHVhbCBlcnJvciBjb2RlICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpxdW90ZV9pdGVtOyAvKiBmb3IgdGhlIHF1b3RlIG9wdGlvbiAqLworICBjaGFyICpxdW90ZV9wYXRoMTsgICAgICAgICAgLyogdHdvIGdlbmVyaWMgcG9pbnRlcnMgZm9yIHRoZSBRVU9URSBzdHVmZiAqLworICBjaGFyICpxdW90ZV9wYXRoMjsKKworICBib29sIGFjY2VwdGZhaWw7ICAgICAgICAgICAgLyogdXNlZCBieSB0aGUgU0ZUUF9RVU9URSAoY29udGludWUgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlIGNvbW1hbmQgZmFpbHMpICovCisgIGNoYXIgKmhvbWVkaXI7ICAgICAgICAgICAgICAvKiB3aGVuIGRvaW5nIFNGVFAgd2UgZmlndXJlIG91dCBob21lIGRpciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3QgcGhhc2UgKi8KKyAgc2l6ZV90IHJlYWRkaXJfbGVuLCByZWFkZGlyX3RvdGFsTGVuLCByZWFkZGlyX2N1cnJMZW47CisgIGNoYXIgKnJlYWRkaXJfbGluZTsKKyAgY2hhciAqcmVhZGRpcl9saW5rUGF0aDsKKyAgLyogZW5kIG9mIFJFQURESVIgc3R1ZmYgKi8KKworICBpbnQgc2Vjb25kQ3JlYXRlRGlyczsgICAgICAgICAvKiBjb3VudGVyIHVzZSBieSB0aGUgY29kZSB0byBzZWUgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gY2hhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2NyZWF0ZSBhIGRpcmVjdG9yeSAqLworICBjaGFyICpzbGFzaF9wb3M7ICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX0NSRUFURV9ESVJTIHN0YXRlICovCisKKyAgaW50IG9yaWdfd2FpdGZvcjsgICAgICAgICAgICAgLyogZGVmYXVsdCBSRUFEL1dSSVRFIGJpdHMgd2FpdCBmb3IgKi8KKworI2lmIGRlZmluZWQoVVNFX0xJQlNTSCkKKy8qIG91ciB2YXJpYWJsZXMgKi8KKyAgdW5zaWduZWQga2JkX3N0YXRlOyAvKiAwIG9yIDEgKi8KKyAgc3NoX2tleSBwcml2a2V5OworICBzc2hfa2V5IHB1YmtleTsKKyAgaW50IGF1dGhfbWV0aG9kczsKKyAgc3NoX3Nlc3Npb24gc3NoX3Nlc3Npb247CisgIHNzaF9zY3Agc2NwX3Nlc3Npb247CisgIHNmdHBfc2Vzc2lvbiBzZnRwX3Nlc3Npb247CisgIHNmdHBfZmlsZSBzZnRwX2ZpbGU7CisgIHNmdHBfZGlyIHNmdHBfZGlyOworCisgIHVuc2lnbmVkIHNmdHBfcmVjdl9zdGF0ZTsgLyogMCBvciAxICovCisgIGludCBzZnRwX2ZpbGVfaW5kZXg7IC8qIGZvciBhc3luYyByZWFkICovCisgIHNmdHBfYXR0cmlidXRlcyByZWFkZGlyX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQIHJlYWRkaXIgYWN0aW9ucyAqLworICBzZnRwX2F0dHJpYnV0ZXMgcmVhZGRpcl9saW5rX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQIHJlYWRkaXIgYWN0aW9ucyAqLworICBzZnRwX2F0dHJpYnV0ZXMgcXVvdGVfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgc3RhdGUgKi8KKworICBjb25zdCBjaGFyICpyZWFkZGlyX2ZpbGVuYW1lOyAvKiBwb2ludHMgd2l0aGluIHJlYWRkaXJfYXR0cnMgKi8KKyAgY29uc3QgY2hhciAqcmVhZGRpcl9sb25nZW50cnk7CisgIGNoYXIgKnJlYWRkaXJfdG1wOworI2VsaWYgZGVmaW5lZChVU0VfTElCU1NIMikKKyAgY2hhciAqcmVhZGRpcl9maWxlbmFtZTsKKyAgY2hhciAqcmVhZGRpcl9sb25nZW50cnk7CisKKyAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgcXVvdGVfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgc3RhdGUgKi8KKworICAvKiBIZXJlJ3MgYSBzZXQgb2Ygc3RydWN0IG1lbWJlcnMgdXNlZCBieSB0aGUgU0ZUUF9SRUFERElSIHN0YXRlICovCisgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIHJlYWRkaXJfYXR0cnM7CisgIExJQlNTSDJfU0VTU0lPTiAqc3NoX3Nlc3Npb247IC8qIFNlY3VyZSBTaGVsbCBzZXNzaW9uICovCisgIExJQlNTSDJfQ0hBTk5FTCAqc3NoX2NoYW5uZWw7IC8qIFNlY3VyZSBTaGVsbCBjaGFubmVsIGhhbmRsZSAqLworICBMSUJTU0gyX1NGVFAgKnNmdHBfc2Vzc2lvbjsgICAvKiBTRlRQIGhhbmRsZSAqLworICBMSUJTU0gyX1NGVFBfSEFORExFICpzZnRwX2hhbmRsZTsKKworI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgTElCU1NIMl9BR0VOVCAqc3NoX2FnZW50OyAgICAgLyogcHJveHkgdG8gc3NoLWFnZW50L3BhZ2VhbnQgKi8KKyAgc3RydWN0IGxpYnNzaDJfYWdlbnRfcHVibGlja2V5ICpzc2hhZ2VudF9pZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzc2hhZ2VudF9wcmV2X2lkZW50aXR5OworI2VuZGlmCisKKyAgLyogbm90ZSB0aGF0IEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJIGlzIGEgZGVmaW5lIHNldCBpbiB0aGUgbGlic3NoMi5oCisgICAgIGhlYWRlciAqLworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgIExJQlNTSDJfS05PV05IT1NUUyAqa2g7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoVVNFX1dPTEZTU0gpCisgIFdPTEZTU0ggKnNzaF9zZXNzaW9uOworICBXT0xGU1NIX0NUWCAqY3R4OworICB3b3JkMzIgaGFuZGxlU3o7CisgIGJ5dGUgaGFuZGxlW1dPTEZTU0hfTUFYX0hBTkRMRV07CisgIGN1cmxfb2ZmX3Qgb2Zmc2V0OworI2VuZGlmIC8qIFVTRV9MSUJTU0ggKi8KK307CisKKyNpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCisKKyNkZWZpbmUgQ1VSTF9MSUJTU0hfVkVSU0lPTiBzc2hfdmVyc2lvbigwKQorCisjZWxpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKQorCisvKiBGZWF0dXJlIGRldGVjdGlvbiBiYXNlZCBvbiB2ZXJzaW9uIG51bWJlcnMgdG8gYmV0dGVyIHdvcmsgd2l0aAorICAgbm9uLWNvbmZpZ3VyZSBwbGF0Zm9ybXMgKi8KKworI2lmICFkZWZpbmVkKExJQlNTSDJfVkVSU0lPTl9OVU0pIHx8IChMSUJTU0gyX1ZFUlNJT05fTlVNIDwgMHgwMDEwMDApCisjICBlcnJvciAiU0NQL1NGVFAgcHJvdG9jb2xzIHJlcXVpcmUgbGlic3NoMiAwLjE2IG9yIGxhdGVyIgorI2VuZGlmCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMDAwCisjZGVmaW5lIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NCAxCisjZW5kaWYKKworI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAxMDAKKyNkZWZpbmUgSEFWRV9MSUJTU0gyX1ZFUlNJT04gMQorI2VuZGlmCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA1CisjZGVmaW5lIEhBVkVfTElCU1NIMl9JTklUIDEKKyNkZWZpbmUgSEFWRV9MSUJTU0gyX0VYSVQgMQorI2VuZGlmCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2CisjZGVmaW5lIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tQIDEKKyNkZWZpbmUgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQgMQorI2VuZGlmCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA4CisjZGVmaW5lIEhBVkVfTElCU1NIMl9TRVNTSU9OX0hBTkRTSEFLRSAxCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCU1NIMl9WRVJTSU9OCisvKiBnZXQgaXQgcnVuLXRpbWUgaWYgcG9zc2libGUgKi8KKyNkZWZpbmUgQ1VSTF9MSUJTU0gyX1ZFUlNJT04gbGlic3NoMl92ZXJzaW9uKDApCisjZWxzZQorLyogdXNlIGJ1aWxkLXRpbWUgaWYgcnVuLXRpbWUgbm90IHBvc3NpYmxlICovCisjZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIExJQlNTSDJfVkVSU0lPTgorI2VuZGlmCisKKyNlbmRpZiAvKiBVU0VfTElCU1NIMiAqLworCisjaWZkZWYgVVNFX1NTSAorCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7CisKKy8qIGdlbmVyaWMgU1NIIGJhY2tlbmQgZnVuY3Rpb25zICovCitDVVJMY29kZSBDdXJsX3NzaF9pbml0KHZvaWQpOwordm9pZCBDdXJsX3NzaF9jbGVhbnVwKHZvaWQpOworc2l6ZV90IEN1cmxfc3NoX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKKyNlbHNlCisvKiBmb3Igbm9uLVNTSCBidWlsZHMgKi8KKyNkZWZpbmUgQ3VybF9zc2hfY2xlYW51cCgpCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NTSF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvd29sZnNzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2M2E1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guYwpAQCAtMCwwICsxLDExNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9XT0xGU1NICisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPHdvbGZzc2gvc3NoLmg+CisjaW5jbHVkZSA8d29sZnNzaC93b2xmc2Z0cC5oPgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImN1cmxfcGF0aC5oIgorI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSB3c3NoX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHdzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKyNpZiAwCitzdGF0aWMgQ1VSTGNvZGUgd3NjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgd3NjcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOworI2VuZGlmCitzdGF0aWMgQ1VSTGNvZGUgd3NmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHdzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIENVUkxjb2RlIHdzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOworc3RhdGljIGludCB3c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jayk7CitzdGF0aWMgaW50IHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jayk7CitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKKyNpZiAwCisvKgorICogU0NQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0geworICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICB3c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgd3NzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICB3c2NwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHdzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICB3c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgd3NjcF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICB3c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgd3NzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgd3NzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgd3NjcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NDUCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKyNlbmRpZgorCisvKgorICogU0ZUUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHAgPSB7CisgICJTRlRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIHdzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICB3c3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHdzZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgd3NzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIHdzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICB3c2Z0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIHdzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICB3c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICB3c3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICB3c2Z0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCisgIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fU0ZUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04KKyAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworLyoKKyAqIFNTSCBTdGF0ZSBtYWNoaW5lIHJlbGF0ZWQgY29kZQorICovCisvKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgU1NIIHN0YXRlISAqLworc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2hzdGF0ZSBub3dzdGF0ZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAvKiBmb3IgZGVidWcgcHVycG9zZXMgKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdID0geworICAgICJTU0hfU1RPUCIsCisgICAgIlNTSF9JTklUIiwKKyAgICAiU1NIX1NfU1RBUlRVUCIsCisgICAgIlNTSF9IT1NUS0VZIiwKKyAgICAiU1NIX0FVVEhMSVNUIiwKKyAgICAiU1NIX0FVVEhfUEtFWV9JTklUIiwKKyAgICAiU1NIX0FVVEhfUEtFWSIsCisgICAgIlNTSF9BVVRIX1BBU1NfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BBU1MiLAorICAgICJTU0hfQVVUSF9BR0VOVF9JTklUIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfTElTVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UIiwKKyAgICAiU1NIX0FVVEhfSE9TVF9JTklUIiwKKyAgICAiU1NIX0FVVEhfSE9TVCIsCisgICAgIlNTSF9BVVRIX0tFWV9JTklUIiwKKyAgICAiU1NIX0FVVEhfS0VZIiwKKyAgICAiU1NIX0FVVEhfR1NTQVBJIiwKKyAgICAiU1NIX0FVVEhfRE9ORSIsCisgICAgIlNTSF9TRlRQX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFMUEFUSCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFIiwKKyAgICAiU1NIX1NGVFBfTkVYVF9RVU9URSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NUQVQiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TRVRTVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1lNTElOSyIsCisgICAgIlNTSF9TRlRQX1FVT1RFX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfUkVOQU1FIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfUk1ESVIiLAorICAgICJTU0hfU0ZUUF9RVU9URV9VTkxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUVkZTIiwKKyAgICAiU1NIX1NGVFBfR0VUSU5GTyIsCisgICAgIlNTSF9TRlRQX0ZJTEVUSU1FIiwKKyAgICAiU1NIX1NGVFBfVFJBTlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIiLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFERElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9MSU5LIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9CT1RUT00iLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0RPTkUiLAorICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfU1RBVCIsCisgICAgIlNTSF9TRlRQX0NMT1NFIiwKKyAgICAiU1NIX1NGVFBfU0hVVERPV04iLAorICAgICJTU0hfU0NQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0NQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRCIsCisgICAgIlNTSF9TQ1BfRE9ORSIsCisgICAgIlNTSF9TQ1BfU0VORF9FT0YiLAorICAgICJTU0hfU0NQX1dBSVRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0NMT1NFIiwKKyAgICAiU1NIX1NDUF9DSEFOTkVMX0ZSRUUiLAorICAgICJTU0hfU0VTU0lPTl9ESVNDT05ORUNUIiwKKyAgICAiU1NIX1NFU1NJT05fRlJFRSIsCisgICAgIlFVSVQiCisgIH07CisKKyAgLyogYSBwcmVjYXV0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgbGlzdHMgYXJlIGluIHN5bmMgKi8KKyAgREVCVUdBU1NFUlQoc2l6ZW9mKG5hbWVzKS9zaXplb2YobmFtZXNbMF0pID09IFNTSF9MQVNUKTsKKworICBpZihzc2hjLT5zdGF0ZSAhPSBub3dzdGF0ZSkgeworICAgIGluZm9mKGNvbm4tPmRhdGEsICJ3b2xmc3NoICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzXG4iLAorICAgICAgICAgICh2b2lkICopc3NoYywgbmFtZXNbc3NoYy0+c3RhdGVdLCBuYW1lc1tub3dzdGF0ZV0pOworICB9CisjZW5kaWYKKworICBzc2hjLT5zdGF0ZSA9IG5vd3N0YXRlOworfQorCitzdGF0aWMgc3NpemVfdCB3c2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGUgPSAwOworICAodm9pZCljb25uOworICAodm9pZClzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCisgICh2b2lkKW1lbTsKKyAgKHZvaWQpbGVuOworICAodm9pZCllcnI7CisKKyAgcmV0dXJuIG53cml0ZTsKK30KKworc3RhdGljIHNzaXplX3Qgd3NjcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbnJlYWQgPSAwOworICAodm9pZCljb25uOworICAodm9pZClzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCisgICh2b2lkKW1lbTsKKyAgKHZvaWQpbGVuOworICAodm9pZCllcnI7CisKKyAgcmV0dXJuIG5yZWFkOworfQorCisvKiByZXR1cm4gbnVtYmVyIG9mIHNlbnQgYnl0ZXMgKi8KK3N0YXRpYyBzc2l6ZV90IHdzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICB3b3JkMzIgb2Zmc2V0WzJdOworICBpbnQgcmM7CisgICh2b2lkKXNvY2tpbmRleDsKKworICBvZmZzZXRbMF0gPSAgKHdvcmQzMilzc2hjLT5vZmZzZXQmMHhGRkZGRkZGRjsKKyAgb2Zmc2V0WzFdID0gICh3b3JkMzIpKHNzaGMtPm9mZnNldD4+MzIpJjB4RkZGRkZGRkY7CisKKyAgcmMgPSB3b2xmU1NIX1NGVFBfU2VuZFdyaXRlUGFja2V0KHNzaGMtPnNzaF9zZXNzaW9uLCBzc2hjLT5oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGVTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSAqKW1lbSwgKHdvcmQzMilsZW4pOworCisgIGlmKHJjID09IFdTX0ZBVEFMX0VSUk9SKQorICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmKHJjIDwgMCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJ3b2xmU1NIX1NGVFBfU2VuZFdyaXRlUGFja2V0IHJldHVybmVkICVkXG4iLCByYyk7CisgICAgcmV0dXJuIC0xOworICB9CisgIERFQlVHQVNTRVJUKHJjID09IChpbnQpbGVuKTsKKyAgaW5mb2YoY29ubi0+ZGF0YSwgInNlbnQgJXpkIGJ5dGVzIFNGVFAgZnJvbSBvZmZzZXQgJXpkXG4iLAorICAgICAgICBsZW4sIHNzaGMtPm9mZnNldCk7CisgIHNzaGMtPm9mZnNldCArPSBsZW47CisgIHJldHVybiAoc3NpemVfdClyYzsKK30KKworLyoKKyAqIFJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMKKyAqIG9yIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzc2l6ZV90IHdzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIGludCByYzsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIHdvcmQzMiBvZmZzZXRbMl07CisgICh2b2lkKXNvY2tpbmRleDsKKworICBvZmZzZXRbMF0gPSAgKHdvcmQzMilzc2hjLT5vZmZzZXQmMHhGRkZGRkZGRjsKKyAgb2Zmc2V0WzFdID0gICh3b3JkMzIpKHNzaGMtPm9mZnNldD4+MzIpJjB4RkZGRkZGRkY7CisKKyAgcmMgPSB3b2xmU1NIX1NGVFBfU2VuZFJlYWRQYWNrZXQoc3NoYy0+c3NoX3Nlc3Npb24sIHNzaGMtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+aGFuZGxlU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlICopbWVtLCAod29yZDMyKWxlbik7CisgIGlmKHJjID09IFdTX0ZBVEFMX0VSUk9SKQorICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgREVCVUdBU1NFUlQocmMgPD0gKGludClsZW4pOworCisgIGlmKHJjIDwgMCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJ3b2xmU1NIX1NGVFBfU2VuZFJlYWRQYWNrZXQgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgc3NoYy0+b2Zmc2V0ICs9IGxlbjsKKworICByZXR1cm4gKHNzaXplX3QpcmM7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgYW5kIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTU0hQUk9UTyAqc3NoOworCisgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOworICBpZighc3NoKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIEN1cmxfcmVjdiB3c2NwX3JlY3YsIHdzZnRwX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHdzY3Bfc2VuZCwgd3NmdHBfc2VuZDsKKworc3RhdGljIGludCB1c2VyYXV0aChieXRlIGF1dGh0eXBlLAorICAgICAgICAgICAgICAgICAgICBXU19Vc2VyQXV0aERhdGEqIGF1dGhkYXRhLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgpCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IGN0eDsKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJ3b2xmc3NoIGNhbGxiYWNrOiB0eXBlICVzXG4iLAorICAgICAgICAgICAgICAgYXV0aHR5cGUgPT0gV09MRlNTSF9VU0VSQVVUSF9QQVNTV09SRCA/ICJQQVNTV09SRCIgOgorICAgICAgICAgICAgICAgIlBVQkxJQ0NLRVkiKSk7CisgIGlmKGF1dGh0eXBlID09IFdPTEZTU0hfVVNFUkFVVEhfUEFTU1dPUkQpIHsKKyAgICBhdXRoZGF0YS0+c2YucGFzc3dvcmQucGFzc3dvcmQgPSAoYnl0ZSAqKWNvbm4tPnBhc3N3ZDsKKyAgICBhdXRoZGF0YS0+c2YucGFzc3dvcmQucGFzc3dvcmRTeiA9ICh3b3JkMzIpIHN0cmxlbihjb25uLT5wYXNzd2QpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgaW50IHJjOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIHdzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKKworICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0CisgICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KKyAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSB3c2NwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSB3c2NwX3NlbmQ7CisgIH0KKyAgZWxzZSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSB3c2Z0cF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gd3NmdHBfc2VuZDsKKyAgfQorICBzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIHNzaGMtPmN0eCA9IHdvbGZTU0hfQ1RYX25ldyhXT0xGU1NIX0VORFBPSU5UX0NMSUVOVCwgTlVMTCk7CisgIGlmKCFzc2hjLT5jdHgpIHsKKyAgICBmYWlsZihkYXRhLCAiTm8gd29sZlNTSCBjb250ZXh0Iik7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIHNzaGMtPnNzaF9zZXNzaW9uID0gd29sZlNTSF9uZXcoc3NoYy0+Y3R4KTsKKyAgaWYoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJObyB3b2xmU1NIIHNlc3Npb24iKTsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgcmMgPSB3b2xmU1NIX1NldFVzZXJuYW1lKHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyKTsKKyAgaWYocmMgIT0gV1NfU1VDQ0VTUykgeworICAgIGZhaWxmKGRhdGEsICJ3b2xmU1NIIGZhaWxlZCB0byBzZXQgdXNlciBuYW1lIik7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIC8qIHNldCBjYWxsYmFjayBmb3IgYXV0aGVudGljYXRpb24gKi8KKyAgd29sZlNTSF9TZXRVc2VyQXV0aChzc2hjLT5jdHgsIHVzZXJhdXRoKTsKKyAgd29sZlNTSF9TZXRVc2VyQXV0aEN0eChzc2hjLT5zc2hfc2Vzc2lvbiwgY29ubik7CisKKyAgcmMgPSB3b2xmU1NIX3NldF9mZChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihkYXRhLCAid29sZlNTSCBmYWlsZWQgdG8gc2V0IHNvY2tldCIpOworICAgIGdvdG8gZXJyb3I7CisgIH0KKworI2lmIDAKKyAgd29sZlNTSF9EZWJ1Z2dpbmdfT04oKTsKKyNlbmRpZgorCisgICpkb25lID0gVFJVRTsKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKyAgZWxzZQorICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworCisgIHJldHVybiB3c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKKyAgZXJyb3I6CisgIHdvbGZTU0hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgIHdvbGZTU0hfQ1RYX2ZyZWUoc3NoYy0+Y3R4KTsKKyAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworfQorCisvKgorICogd3NzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0CisgKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKKyAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIHdvbGZzc2ggZnVuY3Rpb24gcmV0dXJucyBFQUdBSU4gbWVhbmluZyBpdAorICogd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQorICovCisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX3N0YXRlbWFjaF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpibG9jaykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIFdTX1NGVFBOQU1FICpuYW1lOworICBpbnQgcmMgPSAwOworICAqYmxvY2sgPSBGQUxTRTsgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisgICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7CisgICAgY2FzZSBTU0hfSU5JVDoKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TX1NUQVJUVVApOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TX1NUQVJUVVA6CisgICAgICByYyA9IHdvbGZTU0hfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBXU19TVUNDRVNTKQorICAgICAgICByYyA9IHdvbGZTU0hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyAhPSBXU19TVUNDRVNTKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTSDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJ3b2xmc3NoIGNvbm5lY3RlZCFcbiIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfU1RPUDoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgcmMgPSB3b2xmU1NIX1NGVFBfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBXU19TVUNDRVNTKQorICAgICAgICByYyA9IHdvbGZTU0hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19TVUNDRVNTKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJ3b2xmc3NoIFNGVFAgY29ubmVjdGVkIVxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQUxQQVRIKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIGNvbm5lY3QgZXJyb3IgJWQiLCByYyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0g7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTSF9TRlRQX1JFQUxQQVRIOgorICAgICAgbmFtZSA9IHdvbGZTU0hfU0ZUUF9SZWFsUGF0aChzc2hjLT5zc2hfc2Vzc2lvbiwgKGNoYXIgKikiLiIpOworICAgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYobmFtZSAmJiAocmMgPT0gV1NfU1VDQ0VTUykpIHsKKyAgICAgICAgc3NoYy0+aG9tZWRpciA9IG1hbGxvYyhuYW1lLT5mU3ogKyAxKTsKKyAgICAgICAgaWYoIXNzaGMtPmhvbWVkaXIpIHsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBtZW1jcHkoc3NoYy0+aG9tZWRpciwgbmFtZS0+Zk5hbWUsIG5hbWUtPmZTeik7CisgICAgICAgICAgc3NoYy0+aG9tZWRpcltuYW1lLT5mU3pdID0gMDsKKyAgICAgICAgICBpbmZvZihkYXRhLCAid29sZnNzaCBTRlRQIHJlYWxwYXRoIHN1Y2NlZWRlZCFcbiIpOworICAgICAgICB9CisgICAgICAgIHdvbGZTU0hfU0ZUUE5BTUVfbGlzdF9mcmVlKG5hbWUpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGZhaWxmKGRhdGEsICJ3b2xmc3NoIFNGVFAgcmVhbHBhdGggJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9JTklUOgorICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX1NGVFBfR0VUSU5GTzoKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfU0ZUUF9UUkFOU19JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmKHNmdHBfc2NwLT5wYXRoW3N0cmxlbihzZnRwX3NjcC0+cGF0aCktMV0gPT0gJy8nKQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX1NGVFBfVVBMT0FEX0lOSVQ6IHsKKyAgICAgIHdvcmQzMiBmbGFnczsKKyAgICAgIFdTX1NGVFBfRklMRUFUUkIgY3JlYXRlYXR0cnM7CisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBXU19TRlRQX0ZJTEVBVFJCIGF0dHJzOworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9TVEFUKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRycyk7CisgICAgICAgICAgaWYocmMgIT0gV1NfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjdXJsX29mZl90IHNpemUgPSAoKGN1cmxfb2ZmX3QpYXR0cnMuc3pbMV0gPDwgMzIpIHwgYXR0cnMuc3pbMF07CisgICAgICAgICAgICBpZihzaXplIDwgMCkgeworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gc2l6ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9hcHBlbmQpCisgICAgICAgIC8qIFRyeSB0byBvcGVuIGZvciBhcHBlbmQsIGJ1dCBjcmVhdGUgaWYgbm9uZXhpc3RpbmcgKi8KKyAgICAgICAgZmxhZ3MgPSBXT0xGU1NIX0ZYRl9XUklURXxXT0xGU1NIX0ZYRl9DUkVBVHxXT0xGU1NIX0ZYRl9BUFBFTkQ7CisgICAgICBlbHNlIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkKKyAgICAgICAgLyogSWYgd2UgaGF2ZSByZXN0YXJ0IHBvc2l0aW9uIHRoZW4gb3BlbiBmb3IgYXBwZW5kICovCisgICAgICAgIGZsYWdzID0gV09MRlNTSF9GWEZfV1JJVEV8V09MRlNTSF9GWEZfQVBQRU5EOworICAgICAgZWxzZQorICAgICAgICAvKiBDbGVhciBmaWxlIGJlZm9yZSB3cml0aW5nIChub3JtYWwgYmVoYXZpb3VyKSAqLworICAgICAgICBmbGFncyA9IFdPTEZTU0hfRlhGX1dSSVRFfFdPTEZTU0hfRlhGX0NSRUFUfFdPTEZTU0hfRlhGX1RSVU5DOworCisgICAgICBtZW1zZXQoJmNyZWF0ZWF0dHJzLCAwLCBzaXplb2YoY3JlYXRlYXR0cnMpKTsKKyAgICAgIGNyZWF0ZWF0dHJzLnBlciA9ICh3b3JkMzIpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zOworICAgICAgc3NoYy0+aGFuZGxlU3ogPSBzaXplb2Yoc3NoYy0+aGFuZGxlKTsKKyAgICAgIHJjID0gd29sZlNTSF9TRlRQX09wZW4oc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmNyZWF0ZWF0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGUsICZzc2hjLT5oYW5kbGVTeik7CisgICAgICBpZihyYyA9PSBXU19GQVRBTF9FUlJPUikKKyAgICAgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfU1VDQ0VTUykgeworICAgICAgICBpbmZvZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gc3VjY2VlZGVkIVxuIik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIndvbGZzc2ggU0ZUUCB1cGxvYWQgb3BlbiBmYWlsZWQ6ICVkIiwgcmMpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgYSByZXN0YXJ0IHBvaW50IHRoZW4gd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBjb3JyZWN0CisgICAgICAgICBwb3NpdGlvbi4gKi8KKyAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkgeworICAgICAgICAvKiBMZXQncyByZWFkIG9mZiB0aGUgcHJvcGVyIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4gKi8KKyAgICAgICAgaW50IHNlZWtlcnIgPSBDVVJMX1NFRUtGVU5DX09LOworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICBhY3R1YWxseXJlYWQgPSBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluKTsKKyAgICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgICB9CisKKyAgICAgICAgc3NoYy0+b2Zmc2V0ICs9IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgfQorICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgfQorICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKKyAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzZnRwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOworCisgICAgICAgIC8qIHNpbmNlIHdlIGRvbid0IHJlYWxseSB3YWl0IGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRoZQorICAgICAgICAgICBzdGF0ZSBtYWNoaW5lIHRvIG1vdmUgb24gYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBzZXQgYSB2ZXJ5IHNob3J0CisgICAgICAgICAgIHRpbWVvdXQgaGVyZSAqLworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKKyAgICAgIHNzaGMtPmhhbmRsZVN6ID0gc2l6ZW9mKHNzaGMtPmhhbmRsZSk7CisgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9PcGVuKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTSF9GWEZfUkVBRCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+aGFuZGxlLCAmc3NoYy0+aGFuZGxlU3opOworICAgICAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gV1NfV0FOVF9SRUFEKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfV0FOVF9XUklURSkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIndvbGZzc2ggU0ZUUCBvcGVuIHN1Y2NlZWRlZCFcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0g7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQ6IHsKKyAgICAgIFdTX1NGVFBfRklMRUFUUkIgYXR0cnM7CisgICAgICBjdXJsX29mZl90IHNpemU7CisKKyAgICAgIHJjID0gd29sZlNTSF9TRlRQX1NUQVQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCAmYXR0cnMpOworICAgICAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gV1NfV0FOVF9SRUFEKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfV0FOVF9XUklURSkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIndvbGZzc2ggU1RBVCBzdWNjZWVkZWQhXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0g7CisgICAgICB9CisKKyAgICAgIHNpemUgPSAoKGN1cmxfb2ZmX3QpYXR0cnMuc3pbMV0gPDwzMikgfCBhdHRycy5zelswXTsKKworICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplOworICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZTsKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKworICAgICAgaW5mb2YoZGF0YSwgIlNGVFAgZG93bmxvYWQgJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiIGJ5dGVzXG4iLCBzaXplKTsKKworICAgICAgLyogV2UgY2Fubm90IHNlZWsgd2l0aCB3b2xmU1NIIHNvIHJlc3VtaW5nIGFuZCByYW5nZSByZXF1ZXN0cyBhcmUgbm90CisgICAgICAgICBwb3NzaWJsZSAqLworICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlIHx8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJ3b2xmU1NIIGNhbm5vdCBkbyByYW5nZS9zZWVrIG9uIFNGVFBcbiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgIH0KKworICAgICAgLyogU2V0dXAgdGhlIGFjdHVhbCBkb3dubG9hZCAqLworICAgICAgaWYoZGF0YS0+cmVxLnNpemUgPT0gMCkgeworICAgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAgICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKworICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXI7IHRoZSBjbG9zZSBzdGF0ZSBzaG91bGQgYmUgZW50ZXJlZAorICAgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKKyAgICAgIGlmKHNzaGMtPmhhbmRsZVN6KQorICAgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9DbG9zZShzc2hjLT5zc2hfc2Vzc2lvbiwgc3NoYy0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGVTeik7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gV1NfU1VDQ0VTUzsgLyogZGlyZWN0b3J5IGxpc3RpbmcgKi8KKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19TVUNDRVNTKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIENMT1NFIGZhaWxlZDogJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0lOSVQ6CisgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOworICAgICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgorICAgICAgbmFtZSA9IHdvbGZTU0hfU0ZUUF9MUyhzc2hjLT5zc2hfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYoIW5hbWUpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgZWxzZQorICAgICAgICByYyA9IFdTX1NVQ0NFU1M7CisKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihuYW1lICYmIChyYyA9PSBXU19TVUNDRVNTKSkgeworICAgICAgICBXU19TRlRQTkFNRSAqb3JpZ25hbWUgPSBuYW1lOworICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsKKyAgICAgICAgd2hpbGUobmFtZSkgeworICAgICAgICAgIGNoYXIgKmxpbmUgPSBhcHJpbnRmKCIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+Zk5hbWUgOiBuYW1lLT5sTmFtZSk7CisgICAgICAgICAgaWYobGluZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIHN0cmxlbihsaW5lKSk7CisgICAgICAgICAgZnJlZShsaW5lKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgbmFtZSA9IG5hbWUtPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgd29sZlNTSF9TRlRQTkFNRV9saXN0X2ZyZWUob3JpZ25hbWUpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIGxzIGZhaWxlZDogJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7CisgICAgICB3b2xmU1NIX2ZyZWUoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgd29sZlNTSF9DVFhfZnJlZShzc2hjLT5jdHgpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIH0gd2hpbGUoIXJjICYmIChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBib29sIGJsb2NrOyAvKiB3ZSBzdG9yZSB0aGUgc3RhdHVzIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIGEgc3NoX2dldHNvY2soKQorICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAqLworICBkbyB7CisgICAgcmVzdWx0ID0gd3NzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7CisgICAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IsIGl0IGlzbid0IGRvbmUgYW5kIGl0IGRpZG4ndCBFV09VTERCTE9DSywgdGhlbgorICAgICAgIHRyeSBhZ2FpbiAqLworICAgIGlmKCpkb25lKSB7CisgICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIndzc2hfc3RhdGVtYWNoX2FjdCBzYXlzIERPTkVcbiIpKTsKKyAgICB9CisgIH0gd2hpbGUoIXJlc3VsdCAmJiAhKmRvbmUgJiYgIWJsb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMKK0NVUkxjb2RlIHdzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY29ubmVjdGVkOworICAodm9pZClkb3BoYXNlX2RvbmU7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljCitDVVJMY29kZSB3c2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIHJlc3VsdCA9IHdzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGUgRE8gZnVuY3Rpb24gaXMgZ2VuZXJpYyBmb3IgYm90aCBwcm90b2NvbHMuCisgKi8KK3N0YXRpYyBDVVJMY29kZSB3c3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisgIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7IC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KKyAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLworCisgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHJlc3VsdCA9IHdzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSB3c2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgeworICAgIGJvb2wgYmxvY2s7CisgICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKKyAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKworICAgIHJlc3VsdCA9IHdzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYoIWRpc2Nvbm5lY3QpIHsKKyAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKworICAgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgRkFMU0UpOworICAgICAgaWYobGVmdCA8IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZighcmVzdWx0KSB7CisgICAgICBpbnQgZGlyID0gY29ubi0+d2FpdGZvcjsKKyAgICAgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgY3VybF9zb2NrZXRfdCBmZF93cml0ZSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGlmKGRpciA9PSBLRUVQX1JFQ1YpCisgICAgICAgIGZkX3JlYWQgPSBzb2NrOworICAgICAgZWxzZSBpZihkaXIgPT0gS0VFUF9TRU5EKQorICAgICAgICBmZF93cml0ZSA9IHNvY2s7CisKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7IC8qIGlnbm9yZSByZXN1bHQgKi8KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCisgICBkb25lIGZ1bmN0aW9ucyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgICByZXN1bHQgPSB3c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHN0YXR1czsKKworICBpZihzZnRwX3NjcCkKKyAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIDAKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlIGNvZGUsIGJvb2wgcHJlbWF0dXJlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY29kZTsKKyAgKHZvaWQpcHJlbWF0dXJlOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpZG9waGFzZV9kb25lOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKKworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgY29kZSwgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsKKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworCisgIHJldHVybiB3c3NoX2RvbmUoY29ubiwgY29kZSk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IHdzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgd3NmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWRlYWQ7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gd3NzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgcmV0dXJuIHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOworfQorCitzdGF0aWMgaW50IHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7CisgIGludCBkaXIgPSBjb25uLT53YWl0Zm9yOworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoZGlyID09IEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisgIGVsc2UgaWYoZGlyID09IEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7Cit9CisKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgIndvbGZzc2gvJXMiLCBMSUJXT0xGU1NIX1ZFUlNJT05fU1RSSU5HKTsKK30KKworQ1VSTGNvZGUgQ3VybF9zc2hfaW5pdCh2b2lkKQoreworICBpZihXU19TVUNDRVNTICE9IHdvbGZTU0hfSW5pdCgpKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHdvbGZTU0hfSW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9Cit2b2lkIEN1cmxfc3NoX2NsZWFudXAodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIFVTRV9XT0xGU1NIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvd29sZnNzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjlhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1dPTEZTU0hfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9XT0xGU1NIX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XT0xGU1NIX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOTQ1OAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5jCkBAIC0wLDAgKzEsODY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIE1pY2hhZWwgRm9ybmV5LCA8bWZvcm5leUBtZm9ybmV5Lm9yZz4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9CRUFSU1NMCisKKyNpbmNsdWRlIDxiZWFyc3NsLmg+CisKKyNpbmNsdWRlICJiZWFyc3NsLmgiCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAidnRscy5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCitzdHJ1Y3QgeDUwOV9jb250ZXh0IHsKKyAgY29uc3QgYnJfeDUwOV9jbGFzcyAqdnRhYmxlOworICBicl94NTA5X21pbmltYWxfY29udGV4dCBtaW5pbWFsOworICBib29sIHZlcmlmeWhvc3Q7CisgIGJvb2wgdmVyaWZ5cGVlcjsKK307CisKK3N0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKKyAgYnJfc3NsX2NsaWVudF9jb250ZXh0IGN0eDsKKyAgc3RydWN0IHg1MDlfY29udGV4dCB4NTA5OworICB1bnNpZ25lZCBjaGFyIGJ1ZltCUl9TU0xfQlVGU0laRV9CSURJXTsKKyAgYnJfeDUwOV90cnVzdF9hbmNob3IgKmFuY2hvcnM7CisgIHNpemVfdCBhbmNob3JzX2xlbjsKKyAgY29uc3QgY2hhciAqcHJvdG9jb2xzWzJdOworICAvKiBTU0wgY2xpZW50IGNvbnRleHQgaXMgYWN0aXZlICovCisgIGJvb2wgYWN0aXZlOworICAvKiBzaXplIG9mIHBlbmRpbmcgd3JpdGUsIHlldCB0byBiZSBmbHVzaGVkICovCisgIHNpemVfdCBwZW5kaW5nX3dyaXRlOworfTsKKworI2RlZmluZSBCQUNLRU5EIGNvbm5zc2wtPmJhY2tlbmQKKworc3RydWN0IGNhZmlsZV9wYXJzZXIgeworICBDVVJMY29kZSBlcnI7CisgIGJvb2wgaW5fY2VydDsKKyAgYnJfeDUwOV9kZWNvZGVyX2NvbnRleHQgeGM7CisgIC8qIGFycmF5IG9mIHRydXN0IGFuY2hvcnMgbG9hZGVkIGZyb20gQ0FmaWxlICovCisgIGJyX3g1MDlfdHJ1c3RfYW5jaG9yICphbmNob3JzOworICBzaXplX3QgYW5jaG9yc19sZW47CisgIC8qIGJ1ZmZlciBmb3IgRE4gZGF0YSAqLworICB1bnNpZ25lZCBjaGFyIGRuWzEwMjRdOworICBzaXplX3QgZG5fbGVuOworfTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2RuKHZvaWQgKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgY2FmaWxlX3BhcnNlciAqY2EgPSBjdHg7CisKKyAgaWYoY2EtPmVyciAhPSBDVVJMRV9PSyB8fCAhY2EtPmluX2NlcnQpCisgICAgcmV0dXJuOworICBpZihzaXplb2YoY2EtPmRuKSAtIGNhLT5kbl9sZW4gPCBsZW4pIHsKKyAgICBjYS0+ZXJyID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgcmV0dXJuOworICB9CisgIG1lbWNweShjYS0+ZG4gKyBjYS0+ZG5fbGVuLCBidWYsIGxlbik7CisgIGNhLT5kbl9sZW4gKz0gbGVuOworfQorCitzdGF0aWMgdm9pZCB4NTA5X3B1c2godm9pZCAqY3R4LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBjYWZpbGVfcGFyc2VyICpjYSA9IGN0eDsKKworICBpZihjYS0+aW5fY2VydCkKKyAgICBicl94NTA5X2RlY29kZXJfcHVzaCgmY2EtPnhjLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsb2FkX2NhZmlsZShjb25zdCBjaGFyICpwYXRoLCBicl94NTA5X3RydXN0X2FuY2hvciAqKmFuY2hvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICphbmNob3JzX2xlbikKK3sKKyAgc3RydWN0IGNhZmlsZV9wYXJzZXIgY2E7CisgIGJyX3BlbV9kZWNvZGVyX2NvbnRleHQgcGM7CisgIGJyX3g1MDlfdHJ1c3RfYW5jaG9yICp0YTsKKyAgc2l6ZV90IHRhX3NpemU7CisgIGJyX3g1MDlfdHJ1c3RfYW5jaG9yICpuZXdfYW5jaG9yczsKKyAgc2l6ZV90IG5ld19hbmNob3JzX2xlbjsKKyAgYnJfeDUwOV9wa2V5ICpwa2V5OworICBGSUxFICpmcDsKKyAgdW5zaWduZWQgY2hhciBidWZbQlVGU0laXSwgKnA7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHNpemVfdCBuLCBpLCBwdXNoZWQ7CisKKyAgZnAgPSBmb3BlbihwYXRoLCAicmIiKTsKKyAgaWYoIWZwKQorICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisKKyAgY2EuZXJyID0gQ1VSTEVfT0s7CisgIGNhLmluX2NlcnQgPSBGQUxTRTsKKyAgY2EuYW5jaG9ycyA9IE5VTEw7CisgIGNhLmFuY2hvcnNfbGVuID0gMDsKKyAgYnJfcGVtX2RlY29kZXJfaW5pdCgmcGMpOworICBicl9wZW1fZGVjb2Rlcl9zZXRkZXN0KCZwYywgeDUwOV9wdXNoLCAmY2EpOworICBmb3IoOzspIHsKKyAgICBuID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgZnApOworICAgIGlmKG4gPT0gMCkKKyAgICAgIGJyZWFrOworICAgIHAgPSBidWY7CisgICAgd2hpbGUobikgeworICAgICAgcHVzaGVkID0gYnJfcGVtX2RlY29kZXJfcHVzaCgmcGMsIHAsIG4pOworICAgICAgaWYoY2EuZXJyKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgICBwICs9IHB1c2hlZDsKKyAgICAgIG4gLT0gcHVzaGVkOworCisgICAgICBzd2l0Y2goYnJfcGVtX2RlY29kZXJfZXZlbnQoJnBjKSkgeworICAgICAgY2FzZSAwOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQlJfUEVNX0JFR0lOX09CSjoKKyAgICAgICAgbmFtZSA9IGJyX3BlbV9kZWNvZGVyX25hbWUoJnBjKTsKKyAgICAgICAgaWYoc3RyY21wKG5hbWUsICJDRVJUSUZJQ0FURSIpICYmIHN0cmNtcChuYW1lLCAiWDUwOSBDRVJUSUZJQ0FURSIpKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBicl94NTA5X2RlY29kZXJfaW5pdCgmY2EueGMsIGFwcGVuZF9kbiwgJmNhKTsKKyAgICAgICAgaWYoY2EuYW5jaG9yc19sZW4gPT0gU0laRV9NQVggLyBzaXplb2YoY2EuYW5jaG9yc1swXSkpIHsKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBuZXdfYW5jaG9yc19sZW4gPSBjYS5hbmNob3JzX2xlbiArIDE7CisgICAgICAgIG5ld19hbmNob3JzID0gcmVhbGxvYyhjYS5hbmNob3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FuY2hvcnNfbGVuICogc2l6ZW9mKGNhLmFuY2hvcnNbMF0pKTsKKyAgICAgICAgaWYoIW5ld19hbmNob3JzKSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgY2EuYW5jaG9ycyA9IG5ld19hbmNob3JzOworICAgICAgICBjYS5hbmNob3JzX2xlbiA9IG5ld19hbmNob3JzX2xlbjsKKyAgICAgICAgY2EuaW5fY2VydCA9IFRSVUU7CisgICAgICAgIGNhLmRuX2xlbiA9IDA7CisgICAgICAgIHRhID0gJmNhLmFuY2hvcnNbY2EuYW5jaG9yc19sZW4gLSAxXTsKKyAgICAgICAgdGEtPmRuLmRhdGEgPSBOVUxMOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQlJfUEVNX0VORF9PQko6CisgICAgICAgIGlmKCFjYS5pbl9jZXJ0KQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYS5pbl9jZXJ0ID0gRkFMU0U7CisgICAgICAgIGlmKGJyX3g1MDlfZGVjb2Rlcl9sYXN0X2Vycm9yKCZjYS54YykpIHsKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIHRhLT5mbGFncyA9IDA7CisgICAgICAgIGlmKGJyX3g1MDlfZGVjb2Rlcl9pc0NBKCZjYS54YykpCisgICAgICAgICAgdGEtPmZsYWdzIHw9IEJSX1g1MDlfVEFfQ0E7CisgICAgICAgIHBrZXkgPSBicl94NTA5X2RlY29kZXJfZ2V0X3BrZXkoJmNhLnhjKTsKKyAgICAgICAgaWYoIXBrZXkpIHsKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIHRhLT5wa2V5ID0gKnBrZXk7CisKKyAgICAgICAgLyogY2FsY3VsYXRlIHNwYWNlIG5lZWRlZCBmb3IgdHJ1c3QgYW5jaG9yIGRhdGEgKi8KKyAgICAgICAgdGFfc2l6ZSA9IGNhLmRuX2xlbjsKKyAgICAgICAgc3dpdGNoKHBrZXktPmtleV90eXBlKSB7CisgICAgICAgIGNhc2UgQlJfS0VZVFlQRV9SU0E6CisgICAgICAgICAgdGFfc2l6ZSArPSBwa2V5LT5rZXkucnNhLm5sZW4gKyBwa2V5LT5rZXkucnNhLmVsZW47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJfS0VZVFlQRV9FQzoKKyAgICAgICAgICB0YV9zaXplICs9IHBrZXktPmtleS5lYy5xbGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGNhLmVyciA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGZpbGwgaW4gdHJ1c3QgYW5jaG9yIEROIGFuZCBwdWJsaWMga2V5IGRhdGEgKi8KKyAgICAgICAgdGEtPmRuLmRhdGEgPSBtYWxsb2ModGFfc2l6ZSk7CisgICAgICAgIGlmKCF0YS0+ZG4uZGF0YSkgeworICAgICAgICAgIGNhLmVyciA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0YS0+ZG4uZGF0YSwgY2EuZG4sIGNhLmRuX2xlbik7CisgICAgICAgIHRhLT5kbi5sZW4gPSBjYS5kbl9sZW47CisgICAgICAgIHN3aXRjaChwa2V5LT5rZXlfdHlwZSkgeworICAgICAgICBjYXNlIEJSX0tFWVRZUEVfUlNBOgorICAgICAgICAgIHRhLT5wa2V5LmtleS5yc2EubiA9IHRhLT5kbi5kYXRhICsgdGEtPmRuLmxlbjsKKyAgICAgICAgICBtZW1jcHkodGEtPnBrZXkua2V5LnJzYS5uLCBwa2V5LT5rZXkucnNhLm4sIHBrZXktPmtleS5yc2Eubmxlbik7CisgICAgICAgICAgdGEtPnBrZXkua2V5LnJzYS5lID0gdGEtPnBrZXkua2V5LnJzYS5uICsgdGEtPnBrZXkua2V5LnJzYS5ubGVuOworICAgICAgICAgIG1lbWNweSh0YS0+cGtleS5rZXkucnNhLmUsIHBrZXktPmtleS5yc2EuZSwgcGtleS0+a2V5LnJzYS5lbGVuKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUl9LRVlUWVBFX0VDOgorICAgICAgICAgIHRhLT5wa2V5LmtleS5lYy5xID0gdGEtPmRuLmRhdGEgKyB0YS0+ZG4ubGVuOworICAgICAgICAgIG1lbWNweSh0YS0+cGtleS5rZXkuZWMucSwgcGtleS0+a2V5LmVjLnEsIHBrZXktPmtleS5lYy5xbGVuKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhLmVyciA9IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKyAgfQorICBpZihmZXJyb3IoZnApKQorICAgIGNhLmVyciA9IENVUkxFX1JFQURfRVJST1I7CisKK2ZhaWw6CisgIGZjbG9zZShmcCk7CisgIGlmKGNhLmVyciA9PSBDVVJMRV9PSykgeworICAgICphbmNob3JzID0gY2EuYW5jaG9yczsKKyAgICAqYW5jaG9yc19sZW4gPSBjYS5hbmNob3JzX2xlbjsKKyAgfQorICBlbHNlIHsKKyAgICBmb3IoaSA9IDA7IGkgPCBjYS5hbmNob3JzX2xlbjsgKytpKQorICAgICAgZnJlZShjYS5hbmNob3JzW2ldLmRuLmRhdGEpOworICAgIGZyZWUoY2EuYW5jaG9ycyk7CisgIH0KKworICByZXR1cm4gY2EuZXJyOworfQorCitzdGF0aWMgdm9pZCB4NTA5X3N0YXJ0X2NoYWluKGNvbnN0IGJyX3g1MDlfY2xhc3MgKipjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9uYW1lKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgaWYoIXg1MDktPnZlcmlmeWhvc3QpCisgICAgc2VydmVyX25hbWUgPSBOVUxMOworICB4NTA5LT5taW5pbWFsLnZ0YWJsZS0+c3RhcnRfY2hhaW4oJng1MDktPm1pbmltYWwudnRhYmxlLCBzZXJ2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHg1MDlfc3RhcnRfY2VydChjb25zdCBicl94NTA5X2NsYXNzICoqY3R4LCB1aW50MzJfdCBsZW5ndGgpCit7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgKng1MDkgPSAoc3RydWN0IHg1MDlfY29udGV4dCAqKWN0eDsKKworICB4NTA5LT5taW5pbWFsLnZ0YWJsZS0+c3RhcnRfY2VydCgmeDUwOS0+bWluaW1hbC52dGFibGUsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHg1MDlfYXBwZW5kKGNvbnN0IGJyX3g1MDlfY2xhc3MgKipjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgKng1MDkgPSAoc3RydWN0IHg1MDlfY29udGV4dCAqKWN0eDsKKworICB4NTA5LT5taW5pbWFsLnZ0YWJsZS0+YXBwZW5kKCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCB4NTA5X2VuZF9jZXJ0KGNvbnN0IGJyX3g1MDlfY2xhc3MgKipjdHgpCit7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgKng1MDkgPSAoc3RydWN0IHg1MDlfY29udGV4dCAqKWN0eDsKKworICB4NTA5LT5taW5pbWFsLnZ0YWJsZS0+ZW5kX2NlcnQoJng1MDktPm1pbmltYWwudnRhYmxlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHg1MDlfZW5kX2NoYWluKGNvbnN0IGJyX3g1MDlfY2xhc3MgKipjdHgpCit7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgKng1MDkgPSAoc3RydWN0IHg1MDlfY29udGV4dCAqKWN0eDsKKyAgdW5zaWduZWQgZXJyOworCisgIGVyciA9IHg1MDktPm1pbmltYWwudnRhYmxlLT5lbmRfY2hhaW4oJng1MDktPm1pbmltYWwudnRhYmxlKTsKKyAgaWYoZXJyICYmICF4NTA5LT52ZXJpZnlwZWVyKSB7CisgICAgLyogaWdub3JlIGFueSBYLjUwOSBlcnJvcnMgKi8KKyAgICBlcnIgPSBCUl9FUlJfT0s7CisgIH0KKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3QgYnJfeDUwOV9wa2V5ICp4NTA5X2dldF9wa2V5KGNvbnN0IGJyX3g1MDlfY2xhc3MgKmNvbnN0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICp1c2FnZXMpCit7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgKng1MDkgPSAoc3RydWN0IHg1MDlfY29udGV4dCAqKWN0eDsKKworICByZXR1cm4geDUwOS0+bWluaW1hbC52dGFibGUtPmdldF9wa2V5KCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSwgdXNhZ2VzKTsKK30KKworc3RhdGljIGNvbnN0IGJyX3g1MDlfY2xhc3MgeDUwOV92dGFibGUgPSB7CisgIHNpemVvZihzdHJ1Y3QgeDUwOV9jb250ZXh0KSwKKyAgeDUwOV9zdGFydF9jaGFpbiwKKyAgeDUwOV9zdGFydF9jZXJ0LAorICB4NTA5X2FwcGVuZCwKKyAgeDUwOV9lbmRfY2VydCwKKyAgeDUwOV9lbmRfY2hhaW4sCisgIHg1MDlfZ2V0X3BrZXkKK307CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGNoYXIgKmhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7CisgIGNvbnN0IGJvb2wgdmVyaWZ5aG9zdCA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KTsKKyAgQ1VSTGNvZGUgcmV0OworICB1bnNpZ25lZCB2ZXJzaW9uX21pbiwgdmVyc2lvbl9tYXg7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisjZWxzZQorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworI2VuZGlmCisKKyAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgeworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKKyAgICBmYWlsZihkYXRhLCAiQmVhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyAgICBmYWlsZihkYXRhLCAiQmVhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYzIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgorICAgIHZlcnNpb25fbWluID0gQlJfVExTMTA7CisgICAgdmVyc2lvbl9tYXggPSBCUl9UTFMxMDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICB2ZXJzaW9uX21pbiA9IEJSX1RMUzExOworICAgIHZlcnNpb25fbWF4ID0gQlJfVExTMTE7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CisgICAgdmVyc2lvbl9taW4gPSBCUl9UTFMxMjsKKyAgICB2ZXJzaW9uX21heCA9IEJSX1RMUzEyOworICAgIGJyZWFrOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKKyAgICB2ZXJzaW9uX21pbiA9IEJSX1RMUzEwOworICAgIHZlcnNpb25fbWF4ID0gQlJfVExTMTI7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgIkJlYXJTU0w6IHVua25vd24gQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgaWYoc3NsX2NhZmlsZSkgeworICAgIHJldCA9IGxvYWRfY2FmaWxlKHNzbF9jYWZpbGUsICZCQUNLRU5ELT5hbmNob3JzLCAmQkFDS0VORC0+YW5jaG9yc19sZW4pOworICAgIGlmKHJldCAhPSBDVVJMRV9PSykgeworICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgorICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iLCBzc2xfY2FmaWxlKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgorICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOworICAgIH0KKyAgfQorCisgIC8qIGluaXRpYWxpemUgU1NMIGNvbnRleHQgKi8KKyAgYnJfc3NsX2NsaWVudF9pbml0X2Z1bGwoJkJBQ0tFTkQtPmN0eCwgJkJBQ0tFTkQtPng1MDkubWluaW1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQkFDS0VORC0+YW5jaG9ycywgQkFDS0VORC0+YW5jaG9yc19sZW4pOworICBicl9zc2xfZW5naW5lX3NldF92ZXJzaW9ucygmQkFDS0VORC0+Y3R4LmVuZywgdmVyc2lvbl9taW4sIHZlcnNpb25fbWF4KTsKKyAgYnJfc3NsX2VuZ2luZV9zZXRfYnVmZmVyKCZCQUNLRU5ELT5jdHguZW5nLCBCQUNLRU5ELT5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQkFDS0VORC0+YnVmKSwgMSk7CisKKyAgLyogaW5pdGlhbGl6ZSBYLjUwOSBjb250ZXh0ICovCisgIEJBQ0tFTkQtPng1MDkudnRhYmxlID0gJng1MDlfdnRhYmxlOworICBCQUNLRU5ELT54NTA5LnZlcmlmeXBlZXIgPSB2ZXJpZnlwZWVyOworICBCQUNLRU5ELT54NTA5LnZlcmlmeWhvc3QgPSB2ZXJpZnlob3N0OworICBicl9zc2xfZW5naW5lX3NldF94NTA5KCZCQUNLRU5ELT5jdHguZW5nLCAmQkFDS0VORC0+eDUwOS52dGFibGUpOworCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIHZvaWQgKnNlc3Npb247CisKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7CisgICAgICBicl9zc2xfZW5naW5lX3NldF9zZXNzaW9uX3BhcmFtZXRlcnMoJkJBQ0tFTkQtPmN0eC5lbmcsIHNlc3Npb24pOworICAgICAgaW5mb2YoZGF0YSwgIkJlYXJTU0w6IHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOworICAgIH0KKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOworICB9CisKKyAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKKyAgICBpbnQgY3VyID0gMDsKKworICAgIC8qIE5PVEU6IHdoZW4gYWRkaW5nIG1vcmUgcHJvdG9jb2xzIGhlcmUsIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZQorICAgICAqIHByb3RvY29scyBhcnJheSBpbiBgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGFgLgorICAgICAqLworCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMiAmJgorICAgICAgICghU1NMX0lTX1BST1hZKCkgfHwgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSkgeworICAgICAgQkFDS0VORC0+cHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKKyAgICB9CisjZW5kaWYKKworICAgIEJBQ0tFTkQtPnByb3RvY29sc1tjdXIrK10gPSBBTFBOX0hUVFBfMV8xOworICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7CisKKyAgICBicl9zc2xfZW5naW5lX3NldF9wcm90b2NvbF9uYW1lcygmQkFDS0VORC0+Y3R4LmVuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQUNLRU5ELT5wcm90b2NvbHMsIGN1cik7CisgIH0KKworICBpZigoMSA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpKQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICB8fCAoMSA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkKKyNlbmRpZgorICAgICApIHsKKyAgICBpZih2ZXJpZnlob3N0KSB7CisgICAgICBmYWlsZihkYXRhLCAiQmVhclNTTDogIgorICAgICAgICAgICAgImhvc3QgdmVyaWZpY2F0aW9uIG9mIElQIGFkZHJlc3MgaXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgaG9zdG5hbWUgPSBOVUxMOworICB9CisKKyAgaWYoIWJyX3NzbF9jbGllbnRfcmVzZXQoJkJBQ0tFTkQtPmN0eCwgaG9zdG5hbWUsIDApKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgQkFDS0VORC0+YWN0aXZlID0gVFJVRTsKKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMjsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX3J1bl91bnRpbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICB1bnNpZ25lZCBzdGF0ZTsKKyAgdW5zaWduZWQgY2hhciAqYnVmOworICBzaXplX3QgbGVuOworICBzc2l6ZV90IHJldDsKKyAgaW50IGVycjsKKworICBmb3IoOzspIHsKKyAgICBzdGF0ZSA9IGJyX3NzbF9lbmdpbmVfY3VycmVudF9zdGF0ZSgmQkFDS0VORC0+Y3R4LmVuZyk7CisgICAgaWYoc3RhdGUgJiBCUl9TU0xfQ0xPU0VEKSB7CisgICAgICBlcnIgPSBicl9zc2xfZW5naW5lX2xhc3RfZXJyb3IoJkJBQ0tFTkQtPmN0eC5lbmcpOworICAgICAgc3dpdGNoKGVycikgeworICAgICAgY2FzZSBCUl9FUlJfT0s6CisgICAgICAgIC8qIFRMUyBjbG9zZSBub3RpZnkgKi8KKyAgICAgICAgaWYoY29ubnNzbC0+c3RhdGUgIT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb25uZWN0aW9uIGNsb3NlZCBkdXJpbmcgaGFuZHNoYWtlIik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIGNhc2UgQlJfRVJSX1g1MDlfRVhQSVJFRDoKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogWC41MDkgdmVyaWZpY2F0aW9uOiAiCisgICAgICAgICAgICAgICJjZXJ0aWZpY2F0ZSBpcyBleHBpcmVkIG9yIG5vdCB5ZXQgdmFsaWQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIGNhc2UgQlJfRVJSX1g1MDlfQkFEX1NFUlZFUl9OQU1FOgorICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBYLjUwOSB2ZXJpZmljYXRpb246ICIKKyAgICAgICAgICAgICAgImV4cGVjdGVkIHNlcnZlciBuYW1lIHdhcyBub3QgZm91bmQgaW4gdGhlIGNoYWluIik7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICBjYXNlIEJSX0VSUl9YNTA5X05PVF9UUlVTVEVEOgorICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBYLjUwOSB2ZXJpZmljYXRpb246ICIKKyAgICAgICAgICAgICAgImNoYWluIGNvdWxkIG5vdCBiZSBsaW5rZWQgdG8gYSB0cnVzdCBhbmNob3IiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIH0KKyAgICAgIC8qIFguNTA5IGVycm9ycyBhcmUgZG9jdW1lbnRlZCB0byBoYXZlIHRoZSByYW5nZSAzMi4uNjMgKi8KKyAgICAgIGlmKGVyciA+PSAzMiAmJiBlcnIgPCA2NCkKKyAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgICAgaWYoc3RhdGUgJiB0YXJnZXQpCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgaWYoc3RhdGUgJiBCUl9TU0xfU0VORFJFQykgeworICAgICAgYnVmID0gYnJfc3NsX2VuZ2luZV9zZW5kcmVjX2J1ZigmQkFDS0VORC0+Y3R4LmVuZywgJmxlbik7CisgICAgICByZXQgPSBzd3JpdGUoc29ja2ZkLCBidWYsIGxlbik7CisgICAgICBpZihyZXQgPT0gLTEpIHsKKyAgICAgICAgaWYoU09DS0VSUk5PID09IEVBR0FJTiB8fCBTT0NLRVJSTk8gPT0gRVdPVUxEQkxPQ0spIHsKKyAgICAgICAgICBpZihjb25uc3NsLT5zdGF0ZSAhPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICAgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmc7CisgICAgICAgICAgcmV0dXJuIENVUkxFX0FHQUlOOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDVVJMRV9XUklURV9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGJyX3NzbF9lbmdpbmVfc2VuZHJlY19hY2soJkJBQ0tFTkQtPmN0eC5lbmcsIHJldCk7CisgICAgfQorICAgIGVsc2UgaWYoc3RhdGUgJiBCUl9TU0xfUkVDVlJFQykgeworICAgICAgYnVmID0gYnJfc3NsX2VuZ2luZV9yZWN2cmVjX2J1ZigmQkFDS0VORC0+Y3R4LmVuZywgJmxlbik7CisgICAgICByZXQgPSBzcmVhZChzb2NrZmQsIGJ1ZiwgbGVuKTsKKyAgICAgIGlmKHJldCA9PSAwKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IEVPRiB3aXRob3V0IGNsb3NlIG5vdGlmeSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGlmKHJldCA9PSAtMSkgeworICAgICAgICBpZihTT0NLRVJSTk8gPT0gRUFHQUlOIHx8IFNPQ0tFUlJOTyA9PSBFV09VTERCTE9DSykgeworICAgICAgICAgIGlmKGNvbm5zc2wtPnN0YXRlICE9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKQorICAgICAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENVUkxFX1JFQURfRVJST1I7CisgICAgICB9CisgICAgICBicl9zc2xfZW5naW5lX3JlY3ZyZWNfYWNrKCZCQUNLRU5ELT5jdHguZW5nLCByZXQpOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgQ1VSTGNvZGUgYmVhcnNzbF9jb25uZWN0X3N0ZXAyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBDVVJMY29kZSByZXQ7CisKKyAgcmV0ID0gYmVhcnNzbF9ydW5fdW50aWwoY29ubiwgc29ja2luZGV4LCBCUl9TU0xfU0VOREFQUCB8IEJSX1NTTF9SRUNWQVBQKTsKKyAgaWYocmV0ID09IENVUkxFX0FHQUlOKQorICAgIHJldHVybiBDVVJMRV9PSzsKKyAgaWYocmV0ID09IENVUkxFX09LKSB7CisgICAgaWYoYnJfc3NsX2VuZ2luZV9jdXJyZW50X3N0YXRlKCZCQUNLRU5ELT5jdHguZW5nKSA9PSBCUl9TU0xfQ0xPU0VEKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb25uZWN0aW9uIGNsb3NlZCBkdXJpbmcgaGFuZHNoYWtlIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8zOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIENVUkxjb2RlIHJldDsKKworICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOworCisgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CisgICAgY29uc3QgY2hhciAqcHJvdG9jb2w7CisKKyAgICBwcm90b2NvbCA9IGJyX3NzbF9lbmdpbmVfZ2V0X3NlbGVjdGVkX3Byb3RvY29sKCZCQUNLRU5ELT5jdHguZW5nKTsKKyAgICBpZihwcm90b2NvbCkgeworICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIHByb3RvY29sKTsKKworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgICBpZighc3RyY21wKHByb3RvY29sLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQpKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8yOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICBpZighc3RyY21wKHByb3RvY29sLCBBTFBOX0hUVFBfMV8xKSkKKyAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOworICAgICAgZWxzZQorICAgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgdW5yZWNvZ25pemVkIHByb3RvY29sICVzXG4iLCBwcm90b2NvbCk7CisgICAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKKyAgfQorCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIGJvb2wgaW5jYWNoZTsKKyAgICB2b2lkICpvbGRzZXNzaW9uOworICAgIGJyX3NzbF9zZXNzaW9uX3BhcmFtZXRlcnMgKnNlc3Npb247CisKKyAgICBzZXNzaW9uID0gbWFsbG9jKHNpemVvZigqc2Vzc2lvbikpOworICAgIGlmKCFzZXNzaW9uKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgYnJfc3NsX2VuZ2luZV9nZXRfc2Vzc2lvbl9wYXJhbWV0ZXJzKCZCQUNLRU5ELT5jdHguZW5nLCBzZXNzaW9uKTsKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZHNlc3Npb24sIE5VTEwsIHNvY2tpbmRleCkpOworICAgIGlmKGluY2FjaGUpCisgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkc2Vzc2lvbik7CisgICAgcmV0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIHNlc3Npb24sIDAsIHNvY2tpbmRleCk7CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIGZyZWUoc2Vzc2lvbik7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfZG9uZTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJlYXJzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHVuc2lnbmVkIGNoYXIgKmFwcDsKKyAgc2l6ZV90IGFwcGxlbjsKKworICBmb3IoOzspIHsKKyAgICAqZXJyID0gYmVhcnNzbF9ydW5fdW50aWwoY29ubiwgc29ja2luZGV4LCBCUl9TU0xfU0VOREFQUCk7CisgICAgaWYgKCplcnIgIT0gQ1VSTEVfT0spCisgICAgICByZXR1cm4gLTE7CisgICAgYXBwID0gYnJfc3NsX2VuZ2luZV9zZW5kYXBwX2J1ZigmQkFDS0VORC0+Y3R4LmVuZywgJmFwcGxlbik7CisgICAgaWYoIWFwcCkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY29ubmVjdGlvbiBjbG9zZWQgZHVyaW5nIHdyaXRlIik7CisgICAgICAqZXJyID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYoQkFDS0VORC0+cGVuZGluZ193cml0ZSkgeworICAgICAgYXBwbGVuID0gQkFDS0VORC0+cGVuZGluZ193cml0ZTsKKyAgICAgIEJBQ0tFTkQtPnBlbmRpbmdfd3JpdGUgPSAwOworICAgICAgcmV0dXJuIGFwcGxlbjsKKyAgICB9CisgICAgaWYoYXBwbGVuID4gbGVuKQorICAgICAgYXBwbGVuID0gbGVuOworICAgIG1lbWNweShhcHAsIGJ1ZiwgYXBwbGVuKTsKKyAgICBicl9zc2xfZW5naW5lX3NlbmRhcHBfYWNrKCZCQUNLRU5ELT5jdHguZW5nLCBhcHBsZW4pOworICAgIGJyX3NzbF9lbmdpbmVfZmx1c2goJkJBQ0tFTkQtPmN0eC5lbmcsIDApOworICAgIEJBQ0tFTkQtPnBlbmRpbmdfd3JpdGUgPSBhcHBsZW47CisgIH0KK30KKworc3RhdGljIHNzaXplX3QgYmVhcnNzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICB1bnNpZ25lZCBjaGFyICphcHA7CisgIHNpemVfdCBhcHBsZW47CisKKyAgKmVyciA9IGJlYXJzc2xfcnVuX3VudGlsKGNvbm4sIHNvY2tpbmRleCwgQlJfU1NMX1JFQ1ZBUFApOworICBpZigqZXJyICE9IENVUkxFX09LKQorICAgIHJldHVybiAtMTsKKyAgYXBwID0gYnJfc3NsX2VuZ2luZV9yZWN2YXBwX2J1ZigmQkFDS0VORC0+Y3R4LmVuZywgJmFwcGxlbik7CisgIGlmKCFhcHApCisgICAgcmV0dXJuIDA7CisgIGlmKGFwcGxlbiA+IGxlbikKKyAgICBhcHBsZW4gPSBsZW47CisgIG1lbWNweShidWYsIGFwcCwgYXBwbGVuKTsKKyAgYnJfc3NsX2VuZ2luZV9yZWN2YXBwX2FjaygmQkFDS0VORC0+Y3R4LmVuZywgYXBwbGVuKTsKKworICByZXR1cm4gYXBwbGVuOworfQorCitzdGF0aWMgQ1VSTGNvZGUgYmVhcnNzbF9jb25uZWN0X2NvbW1vbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJldDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgdGltZV90IHRpbWVvdXRfbXM7CisgIGludCB3aGF0OworCisgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KKyAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgcmV0ID0gYmVhcnNzbF9jb25uZWN0X3N0ZXAxKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmV0KQorICAgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIHdoaWxlKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCisgICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKworICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyAgICBpZihzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgaWYod2hhdCA8IDApIHsKKyAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgICAgKmRvbmUgPSBGQUxTRTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmIHRoaXMKKyAgICAgKiBjb25uZWN0aW9uIGlzIGRvbmUgbm9uYmxvY2tpbmcgYW5kIHRoaXMgbG9vcCB3b3VsZCBleGVjdXRlIGFnYWluLiBUaGlzCisgICAgICogcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8gYWJvcnQgYSBjb25uZWN0aW9uIGF0dGVtcHQKKyAgICAgKiBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZSBlbnN1cmluZyB0aGF0IGEgY2xpZW50IHVzaW5nIHNlbGVjdCgpCisgICAgICogb3IgZXBvbGwoKSB3aWxsIGFsd2F5cyBoYXZlIGEgdmFsaWQgZmRzZXQgdG8gd2FpdCBvbi4KKyAgICAgKi8KKyAgICByZXQgPSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXQgfHwgKG5vbmJsb2NraW5nICYmCisgICAgICAgICAgICAgICAoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgICAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkpKQorICAgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIHJldCA9IGJlYXJzc2xfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJldCkKKyAgICAgIHJldHVybiByZXQ7CisgIH0KKworICBpZihzc2xfY29ubmVjdF9kb25lID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGJlYXJzc2xfcmVjdjsKKyAgICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSBiZWFyc3NsX3NlbmQ7CisgICAgKmRvbmUgPSBUUlVFOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IEZBTFNFOworCisgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgc2l6ZV90IEN1cmxfYmVhcnNzbF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiQmVhclNTTCIpOworfQorCitzdGF0aWMgYm9vbCBDdXJsX2JlYXJzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbm5pbmRleCkKK3sKKyAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW2Nvbm5pbmRleF07CisKKyAgcmV0dXJuIGJyX3NzbF9lbmdpbmVfY3VycmVudF9zdGF0ZSgmQkFDS0VORC0+Y3R4LmVuZykgJiBCUl9TU0xfUkVDVkFQUDsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfYmVhcnNzbF9yYW5kb20oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSBVTlVTRURfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbnRyb3B5LCBzaXplX3QgbGVuZ3RoKQoreworICBzdGF0aWMgYnJfaG1hY19kcmJnX2NvbnRleHQgY3R4OworICBzdGF0aWMgYm9vbCBzZWVkZWQgPSBGQUxTRTsKKworICBpZighc2VlZGVkKSB7CisgICAgYnJfcHJuZ19zZWVkZXIgc2VlZGVyOworCisgICAgYnJfaG1hY19kcmJnX2luaXQoJmN0eCwgJmJyX3NoYTI1Nl92dGFibGUsIE5VTEwsIDApOworICAgIHNlZWRlciA9IGJyX3Bybmdfc2VlZGVyX3N5c3RlbShOVUxMKTsKKyAgICBpZighc2VlZGVyIHx8ICFzZWVkZXIoJmN0eC52dGFibGUpKQorICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIHNlZWRlZCA9IFRSVUU7CisgIH0KKyAgYnJfaG1hY19kcmJnX2dlbmVyYXRlKCZjdHgsIGVudHJvcHksIGxlbmd0aCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9iZWFyc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBDVVJMY29kZSByZXQ7CisgIGJvb2wgZG9uZSA9IEZBTFNFOworCisgIHJldCA9IGJlYXJzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBGQUxTRSwgJmRvbmUpOworICBpZihyZXQpCisgICAgcmV0dXJuIHJldDsKKworICBERUJVR0FTU0VSVChkb25lKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2JlYXJzc2xfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgYm9vbCAqZG9uZSkKK3sKKyAgcmV0dXJuIGJlYXJzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBUUlVFLCBkb25lKTsKK30KKworc3RhdGljIHZvaWQgKkN1cmxfYmVhcnNzbF9nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQoreworICByZXR1cm4gJkJBQ0tFTkQtPmN0eDsKK30KKworc3RhdGljIHZvaWQgQ3VybF9iZWFyc3NsX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHNpemVfdCBpOworCisgIGlmKEJBQ0tFTkQtPmFjdGl2ZSkgeworICAgIGJyX3NzbF9lbmdpbmVfY2xvc2UoJkJBQ0tFTkQtPmN0eC5lbmcpOworICAgICh2b2lkKWJlYXJzc2xfcnVuX3VudGlsKGNvbm4sIHNvY2tpbmRleCwgQlJfU1NMX0NMT1NFRCk7CisgIH0KKyAgZm9yKGkgPSAwOyBpIDwgQkFDS0VORC0+YW5jaG9yc19sZW47ICsraSkKKyAgICBmcmVlKEJBQ0tFTkQtPmFuY2hvcnNbaV0uZG4uZGF0YSk7CisgIGZyZWUoQkFDS0VORC0+YW5jaG9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIEN1cmxfYmVhcnNzbF9zZXNzaW9uX2ZyZWUodm9pZCAqcHRyKQoreworICBmcmVlKHB0cik7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2JlYXJzc2xfbWQ1c3VtKHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbWQ1c3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1kNWxlbiBVTlVTRURfUEFSQU0pCit7CisgIGJyX21kNV9jb250ZXh0IGN0eDsKKworICBicl9tZDVfaW5pdCgmY3R4KTsKKyAgYnJfbWQ1X3VwZGF0ZSgmY3R4LCBpbnB1dCwgaW5wdXRsZW4pOworICBicl9tZDVfb3V0KCZjdHgsIG1kNXN1bSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfYmVhcnNzbF9zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuIFVOVVNFRF9QQVJBTSkKK3sKKyAgYnJfc2hhMjU2X2NvbnRleHQgY3R4OworCisgIGJyX3NoYTI1Nl9pbml0KCZjdHgpOworICBicl9zaGEyNTZfdXBkYXRlKCZjdHgsIGlucHV0LCBpbnB1dGxlbik7CisgIGJyX3NoYTI1Nl9vdXQoJmN0eCwgc2hhMjU2c3VtKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfYmVhcnNzbCA9IHsKKyAgeyBDVVJMU1NMQkFDS0VORF9CRUFSU1NMLCAiYmVhcnNzbCIgfSwKKworICAwLAorCisgIHNpemVvZihzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSksCisKKyAgQ3VybF9ub25lX2luaXQsCisgIEN1cmxfbm9uZV9jbGVhbnVwLAorICBDdXJsX2JlYXJzc2xfdmVyc2lvbiwKKyAgQ3VybF9ub25lX2NoZWNrX2N4biwKKyAgQ3VybF9ub25lX3NodXRkb3duLAorICBDdXJsX2JlYXJzc2xfZGF0YV9wZW5kaW5nLAorICBDdXJsX2JlYXJzc2xfcmFuZG9tLAorICBDdXJsX25vbmVfY2VydF9zdGF0dXNfcmVxdWVzdCwKKyAgQ3VybF9iZWFyc3NsX2Nvbm5lY3QsCisgIEN1cmxfYmVhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nLAorICBDdXJsX2JlYXJzc2xfZ2V0X2ludGVybmFscywKKyAgQ3VybF9iZWFyc3NsX2Nsb3NlLAorICBDdXJsX25vbmVfY2xvc2VfYWxsLAorICBDdXJsX2JlYXJzc2xfc2Vzc2lvbl9mcmVlLAorICBDdXJsX25vbmVfc2V0X2VuZ2luZSwKKyAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwKKyAgQ3VybF9ub25lX2VuZ2luZXNfbGlzdCwKKyAgQ3VybF9ub25lX2ZhbHNlX3N0YXJ0LAorICBDdXJsX2JlYXJzc2xfbWQ1c3VtLAorICBDdXJsX2JlYXJzc2xfc2hhMjU2c3VtCit9OworCisjZW5kaWYgLyogVVNFX0JFQVJTU0wgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5NDkyMgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfQkVBUlNTTF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0JFQVJTU0xfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LCBNaWNoYWVsIEZvcm5leSwgPG1mb3JuZXlAbWZvcm5leS5vcmc+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9CRUFSU1NMCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfYmVhcnNzbDsKKworI2VuZGlmIC8qIFVTRV9CRUFSU1NMICovCisjZW5kaWYgLyogSEVBREVSX0NVUkxfQkVBUlNTTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2N5YXNzbC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9jeWFzc2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRhMmJkZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2N5YXNzbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTb3VyY2UgZmlsZSBmb3IgYWxsIEN5YVNTTC1zcGVjaWZpYyBjb2RlIGZvciB0aGUgVExTL1NTTCBsYXllci4gTm8gY29kZQotICogYnV0IHZ0bHMuYyBzaG91bGQgZXZlciBjYWxsIG9yIHVzZSB0aGVzZSBmdW5jdGlvbnMuCi0gKgotICovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfQ1lBU1NMCi0KLSNkZWZpbmUgV09MRlNTTF9PUFRJT05TX0lHTk9SRV9TWVMKLS8qIEN5YVNTTCdzIHZlcnNpb24uaCwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gb25seSB0aGUgdmVyc2lvbiwgc2hvdWxkIGNvbWUKLWJlZm9yZSBhbGwgb3RoZXIgQ3lhU1NMIGluY2x1ZGVzIGFuZCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBidWlsZCBjb25maWcKLWFrYSBvcHRpb25zLmguIGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTUtMDQvMDA2OS5odG1sICovCi0jaW5jbHVkZSA8Y3lhc3NsL3ZlcnNpb24uaD4KLSNpZiBkZWZpbmVkKEhBVkVfQ1lBU1NMX09QVElPTlNfSCkgJiYgKExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDgpCi0jaWYgZGVmaW5lZChDWUFTU0xfQVBJKSB8fCBkZWZpbmVkKFdPTEZTU0xfQVBJKQotLyogU2FmZXR5IG1lYXN1cmUuIElmIGVpdGhlciBpcyBkZWZpbmVkIHNvbWUgQVBJIGluY2x1ZGUgd2FzIGFscmVhZHkgaW5jbHVkZWQKLWFuZCB0aGF0J3MgYSBwcm9ibGVtIHNpbmNlIG9wdGlvbnMuaCBoYXNuJ3QgYmVlbiBpbmNsdWRlZCB5ZXQuICovCi0jZXJyb3IgIkN5YVNTTCBBUEkgd2FzIGluY2x1ZGVkIGJlZm9yZSB0aGUgQ3lhU1NMIGJ1aWxkIG9wdGlvbnMuIgotI2VuZGlmCi0jaW5jbHVkZSA8Y3lhc3NsL29wdGlvbnMuaD4KLSNlbmRpZgotCi0vKiBUbyBkZXRlcm1pbmUgd2hhdCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3ZSByZWx5IG9uIG9uZSBvciBib3RoIG9mOgotICAgLSB0aGUgdXNlcidzIG9wdGlvbnMuaCBnZW5lcmF0ZWQgYnkgQ3lhU1NML3dvbGZTU0wKLSAgIC0gdGhlIHN5bWJvbHMgZGV0ZWN0ZWQgYnkgY3VybCdzIGNvbmZpZ3VyZQotICAgU2luY2UgdGhleSBhcmUgbWFya2VkbHkgZGlmZmVyZW50IGZyb20gb25lIGFub3RoZXIsIGFuZCBvbmUgb3IgdGhlIG90aGVyIG1heQotICAgbm90IGJlIGF2YWlsYWJsZSwgd2UgZG8gc29tZSBjaGVja2luZyBiZWxvdyB0byBicmluZyB0aGluZ3MgaW4gc3luYy4gKi8KLQotLyogSEFWRV9BTFBOIGlzIHdvbGZTU0wncyBidWlsZCB0aW1lIHN5bWJvbCBmb3IgZW5hYmxpbmcgQUxQTiBpbiBvcHRpb25zLmguICovCi0jaWZuZGVmIEhBVkVfQUxQTgotI2lmZGVmIEhBVkVfV09MRlNTTF9VU0VBTFBOCi0jZGVmaW5lIEhBVkVfQUxQTgotI2VuZGlmCi0jZW5kaWYKLQotLyogV09MRlNTTF9BTExPV19TU0xWMyBpcyB3b2xmU1NMJ3MgYnVpbGQgdGltZSBzeW1ib2wgZm9yIGVuYWJsaW5nIFNTTHYzIGluCi0gICBvcHRpb25zLmgsIGJ1dCBpcyBvbmx5IHNlZW4gaW4gPj0gMy42LjYgc2luY2UgdGhhdCdzIHdoZW4gdGhleSBzdGFydGVkCi0gICBkaXNhYmxpbmcgU1NMdjMgYnkgZGVmYXVsdC4gKi8KLSNpZm5kZWYgV09MRlNTTF9BTExPV19TU0xWMwotI2lmIChMSUJDWUFTU0xfVkVSU0lPTl9IRVggPCAweDAzMDA2MDA2KSB8fCBcCi0gICAgZGVmaW5lZChIQVZFX1dPTEZTU0xWM19DTElFTlRfTUVUSE9EKQotI2RlZmluZSBXT0xGU1NMX0FMTE9XX1NTTFYzCi0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlICJ1cmxkYXRhLmgiCi0jaW5jbHVkZSAic2VuZGYuaCIKLSNpbmNsdWRlICJpbmV0X3B0b24uaCIKLSNpbmNsdWRlICJ2dGxzLmgiCi0jaW5jbHVkZSAicGFyc2VkYXRlLmgiCi0jaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwotI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInN0cmNhc2UuaCIKLSNpbmNsdWRlICJ4NTA5YXNuMS5oIgotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAibXVsdGlpZi5oIgotCi0jaW5jbHVkZSA8Y3lhc3NsL29wZW5zc2wvc3NsLmg+Ci0jaW5jbHVkZSA8Y3lhc3NsL3NzbC5oPgotI2lmZGVmIEhBVkVfQ1lBU1NMX0VSUk9SX1NTTF9ICi0jaW5jbHVkZSA8Y3lhc3NsL2Vycm9yLXNzbC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxjeWFzc2wvZXJyb3IuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9zaGEyNTYuaD4KLQotI2luY2x1ZGUgImN5YXNzbC5oIgotCi0vKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmU6ICovCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLSNpbmNsdWRlICJtZW1kZWJ1Zy5oIgotCi0jaWYgTElCQ1lBU1NMX1ZFUlNJT05fSEVYIDwgMHgwMjAwNzAwMiAvKiA8IDIuNy4yICovCi0jZGVmaW5lIENZQVNTTF9NQVhfRVJST1JfU1ogODAKLSNlbmRpZgotCi0vKiBLRUVQX1BFRVJfQ0VSVCBpcyBhIHByb2R1Y3Qgb2YgdGhlIHByZXNlbmNlIG9mIGJ1aWxkIHRpbWUgc3ltYm9sCi0gICBPUEVOU1NMX0VYVFJBIHdpdGhvdXQgTk9fQ0VSVFMsIGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbi4gS0VFUF9QRUVSX0NFUlQgaXMKLSAgIGluIHdvbGZTU0wncyBzZXR0aW5ncy5oLCBhbmQgdGhlIGxhdHRlciB0d28gYXJlIGJ1aWxkIHRpbWUgc3ltYm9scyBpbgotICAgb3B0aW9ucy5oLiAqLwotI2lmbmRlZiBLRUVQX1BFRVJfQ0VSVAotI2lmIGRlZmluZWQoSEFWRV9DWUFTU0xfR0VUX1BFRVJfQ0VSVElGSUNBVEUpIHx8IFwKLSAgICBkZWZpbmVkKEhBVkVfV09MRlNTTF9HRVRfUEVFUl9DRVJUSUZJQ0FURSkgfHwgXAotICAgIChkZWZpbmVkKE9QRU5TU0xfRVhUUkEpICYmICFkZWZpbmVkKE5PX0NFUlRTKSkKLSNkZWZpbmUgS0VFUF9QRUVSX0NFUlQKLSNlbmRpZgotI2VuZGlmCi0KLXN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKLSAgU1NMX0NUWCogY3R4OwotICBTU0wqICAgICBoYW5kbGU7Ci19OwotCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCi1zdGF0aWMgQ3VybF9yZWN2IGN5YXNzbF9yZWN2Owotc3RhdGljIEN1cmxfc2VuZCBjeWFzc2xfc2VuZDsKLQotCi1zdGF0aWMgaW50IGRvX2ZpbGVfdHlwZShjb25zdCBjaGFyICp0eXBlKQotewotICBpZighdHlwZSB8fCAhdHlwZVswXSkKLSAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKLSAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlBFTSIpKQotICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOwotICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiREVSIikpCi0gICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9BU04xOwotICByZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFsbCB0aGUgY2xpZW50L0NBIGNlcnRpZmljYXRlcyBhbmQgQ1JMcy4gU2V0dXAgdGhlIFRMUwotICogbGF5ZXIgYW5kIGRvIGFsbCBuZWNlc3NhcnkgbWFnaWMuCi0gKi8KLXN0YXRpYyBDVVJMY29kZQotY3lhc3NsX2Nvbm5lY3Rfc3RlcDEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKLXsKLSAgY2hhciAqY2lwaGVyczsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBTU0xfTUVUSE9EKiByZXFfbWV0aG9kID0gTlVMTDsKLSAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0jaWZkZWYgSEFWRV9TTkkKLSAgYm9vbCBzbmkgPSBGQUxTRTsKLSNkZWZpbmUgdXNlX3NuaSh4KSAgc25pID0gKHgpCi0jZWxzZQotI2RlZmluZSB1c2Vfc25pKHgpICBDdXJsX25vcF9zdG10Ci0jZW5kaWYKLQotICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcnNpb25fbWF4KSAhPSBDVVJMX1NTTFZFUlNJT05fTUFYX05PTkUpIHsKLSAgICBmYWlsZihkYXRhLCAiQ3lhU1NMIGRvZXMgbm90IHN1cHBvcnQgdG8gc2V0IG1heGltdW0gU1NML1RMUyB2ZXJzaW9uIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGJlZW4gdG9sZCB0byB1c2UgYW4gZXhwbGljaXQgU1NML1RMUyB2ZXJzaW9uICovCi0gIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0jaWYgTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDMwMDMwMDAgLyogPj0gMy4zLjAgKi8KLSAgICAvKiBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24gaXMgc2V0IGxhdGVyIGFmdGVyIHRoZSBDVFggb2JqZWN0IGlzIGNyZWF0ZWQgKi8KLSAgICByZXFfbWV0aG9kID0gU1NMdjIzX2NsaWVudF9tZXRob2QoKTsKLSNlbHNlCi0gICAgaW5mb2YoZGF0YSwgIkN5YVNTTCA8My4zLjAgY2Fubm90IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIFRMUyAxLjAtMS4yLCAiCi0gICAgICAgICAgIlRMUyAxLjAgaXMgdXNlZCBleGNsdXNpdmVseVxuIik7Ci0gICAgcmVxX21ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKLSNlbmRpZgotICAgIHVzZV9zbmkoVFJVRSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0jaWZkZWYgV09MRlNTTF9BTExPV19UTFNWMTAKLSAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpOwotICAgIHVzZV9zbmkoVFJVRSk7Ci0jZWxzZQotICAgIGZhaWxmKGRhdGEsICJDeWFTU0wgZG9lcyBub3Qgc3VwcG9ydCBUTFMgMS4wIik7Ci0gICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKLSNlbmRpZgotICAgIGJyZWFrOwotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgIHJlcV9tZXRob2QgPSBUTFN2MV8xX2NsaWVudF9tZXRob2QoKTsKLSAgICB1c2Vfc25pKFRSVUUpOwotICAgIGJyZWFrOwotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgIHJlcV9tZXRob2QgPSBUTFN2MV8yX2NsaWVudF9tZXRob2QoKTsKLSAgICB1c2Vfc25pKFRSVUUpOwotICAgIGJyZWFrOwotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotI2lmZGVmIFdPTEZTU0xfVExTMTMKLSAgICByZXFfbWV0aG9kID0gd29sZlRMU3YxXzNfY2xpZW50X21ldGhvZCgpOwotICAgIHVzZV9zbmkoVFJVRSk7Ci0gICAgYnJlYWs7Ci0jZWxzZQotICAgIGZhaWxmKGRhdGEsICJDeWFTU0w6IFRMUyAxLjMgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0jZW5kaWYKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6Ci0jaWZkZWYgV09MRlNTTF9BTExPV19TU0xWMwotICAgIHJlcV9tZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7Ci0gICAgdXNlX3NuaShGQUxTRSk7Ci0jZWxzZQotICAgIGZhaWxmKGRhdGEsICJDeWFTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOwotICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47Ci0jZW5kaWYKLSAgICBicmVhazsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6Ci0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICBkZWZhdWx0OgotICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgaWYoIXJlcV9tZXRob2QpIHsKLSAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBtZXRob2QhIik7Ci0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQotICBpZihCQUNLRU5ELT5jdHgpCi0gICAgU1NMX0NUWF9mcmVlKEJBQ0tFTkQtPmN0eCk7Ci0gIEJBQ0tFTkQtPmN0eCA9IFNTTF9DVFhfbmV3KHJlcV9tZXRob2QpOwotCi0gIGlmKCFCQUNLRU5ELT5jdHgpIHsKLSAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0ISIpOwotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0KLSAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSNpZiBMSUJDWUFTU0xfVkVSU0lPTl9IRVggPiAweDAzMDA0MDA2IC8qID4gMy40LjYgKi8KLSAgICAvKiBWZXJzaW9ucyAzLjMuMCB0byAzLjQuNiB3ZSBrbm93IHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24gaXMgd2hhdGV2ZXIKLSAgICBtaW5pbXVtIHZlcnNpb24gb2YgVExTIHdhcyBidWlsdCBpbiBhbmQgYXQgbGVhc3QgVExTIDEuMC4gRm9yIGxhdGVyIGxpYnJhcnkKLSAgICB2ZXJzaW9ucyB0aGF0IGNvdWxkIGNoYW5nZSAoZWcgVExTIDEuMCBidWlsdCBpbiBidXQgZGVmYXVsdHMgdG8gVExTIDEuMSkgc28KLSAgICB3ZSBoYXZlIHRoaXMgc2hvcnQgY2lyY3VpdCBldmFsdWF0aW9uIHRvIGZpbmQgdGhlIG1pbmltdW0gc3VwcG9ydGVkIFRMUwotICAgIHZlcnNpb24uIFdlIHVzZSB3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uIGFuZCBub3QgQ3lhU1NMX1NldE1pblZlcnNpb24KLSAgICBiZWNhdXNlIG9ubHkgdGhlIGZvcm1lciB3aWxsIHdvcmsgYmVmb3JlIHRoZSB1c2VyJ3MgQ1RYIGNhbGxiYWNrIGlzIGNhbGxlZC4KLSAgICAqLwotICAgIGlmKCh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKEJBQ0tFTkQtPmN0eCwgV09MRlNTTF9UTFNWMSkgIT0gMSkgJiYKLSAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihCQUNLRU5ELT5jdHgsIFdPTEZTU0xfVExTVjFfMSkgIT0gMSkgJiYKLSAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihCQUNLRU5ELT5jdHgsIFdPTEZTU0xfVExTVjFfMikgIT0gMSkKLSNpZmRlZiBXT0xGU1NMX1RMUzEzCi0gICAgICAgJiYgKHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24oQkFDS0VORC0+Y3R4LCBXT0xGU1NMX1RMU1YxXzMpICE9IDEpCi0jZW5kaWYKLSAgICAgICkgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3Qgc2V0IHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24iKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0jZW5kaWYKLSAgICBicmVhazsKLSAgfQotCi0gIGNpcGhlcnMgPSBTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpOwotICBpZihjaXBoZXJzKSB7Ci0gICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KEJBQ0tFTkQtPmN0eCwgY2lwaGVycykpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBjaXBoZXIgbGlzdDogJXMiLCBjaXBoZXJzKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0lQSEVSOwotICAgIH0KLSAgICBpbmZvZihkYXRhLCAiQ2lwaGVyIHNlbGVjdGlvbjogJXNcbiIsIGNpcGhlcnMpOwotICB9Ci0KLSNpZm5kZWYgTk9fRklMRVNZU1RFTQotICAvKiBsb2FkIHRydXN0ZWQgY2FjZXJ0ICovCi0gIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKSB7Ci0gICAgaWYoMSAhPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCQUNLRU5ELT5jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKLSAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewotICAgICAgICAvKiBGYWlsIGlmIHdlIGluc2lzdCBvbiBzdWNjZXNzZnVsbHkgdmVyaWZ5aW5nIHRoZSBzZXJ2ZXIuICovCi0gICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iCi0gICAgICAgICAgICAgICIgIENBZmlsZTogJXNcbiAgQ0FwYXRoOiAlcyIsCi0gICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpPwotICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKTogIm5vbmUiLAotICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKT8KLSAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgOiAibm9uZSIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEp1c3QgY29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gc3RyaWN0IGNlcnRpZmljYXRlCi0gICAgICAgICAgIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gKi8KLSAgICAgICAgaW5mb2YoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9ucywiCi0gICAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAvKiBFdmVyeXRoaW5nIGlzIGZpbmUuICovCi0gICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHNldCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIik7Ci0gICAgfQotICAgIGluZm9mKGRhdGEsCi0gICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgotICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCi0gICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgPyBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKToKLSAgICAgICAgICAibm9uZSIsCi0gICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgPyBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKToKLSAgICAgICAgICAibm9uZSIpOwotICB9Ci0KLSAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlLCBhbmQgcHJpdmF0ZSBrZXkgKi8KLSAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkgJiYgU1NMX1NFVF9PUFRJT04oa2V5KSkgewotICAgIGludCBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoU1NMX1NFVF9PUFRJT04oY2VydF90eXBlKSk7Ci0KLSAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKEJBQ0tFTkQtPmN0eCwgU1NMX1NFVF9PUFRJT04oY2VydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7Ci0gICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBvciB3cm9uZyBwYXNzIgotICAgICAgICAgICAgIiBwaHJhc2U/KSIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIH0KLQotICAgIGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihrZXlfdHlwZSkpOwotICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShCQUNLRU5ELT5jdHgsIFNTTF9TRVRfT1BUSU9OKGtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5Iik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotICB9Ci0jZW5kaWYgLyogIU5PX0ZJTEVTWVNURU0gKi8KLQotICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKLSAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQotICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCi0gICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLwotICBTU0xfQ1RYX3NldF92ZXJpZnkoQkFDS0VORC0+Y3R4LAotICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpP1NTTF9WRVJJRllfUEVFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotI2lmZGVmIEhBVkVfU05JCi0gIGlmKHNuaSkgewotICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OwotI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OwotI2VuZGlmCi0gICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6Ci0gICAgICBjb25uLT5ob3N0Lm5hbWU7Ci0gICAgc2l6ZV90IGhvc3RuYW1lX2xlbiA9IHN0cmxlbihob3N0bmFtZSk7Ci0gICAgaWYoKGhvc3RuYW1lX2xlbiA8IFVTSFJUX01BWCkgJiYKLSAgICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHI0KSkgJiYKLSNpZmRlZiBFTkFCTEVfSVBWNgotICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmFkZHI2KSkgJiYKLSNlbmRpZgotICAgICAgIChDeWFTU0xfQ1RYX1VzZVNOSShCQUNLRU5ELT5jdHgsIENZQVNTTF9TTklfSE9TVF9OQU1FLCBob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0KWhvc3RuYW1lX2xlbikgIT0gMSkpIHsKLSAgICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBmYWlsZWQgdG8gY29uZmlndXJlIHNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgIgotICAgICAgICAgICAgIlRMUyBleHRlbnNpb25cbiIpOwotICAgIH0KLSAgfQotI2VuZGlmCi0KLSAgLyogZ2l2ZSBhcHBsaWNhdGlvbiBhIGNoYW5jZSB0byBpbnRlcmZlcmUgd2l0aCBTU0wgc2V0IHVwLiAqLwotICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpIHsKLSAgICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgICByZXN1bHQgPSAoKmRhdGEtPnNldC5zc2wuZnNzbGN0eCkoZGF0YSwgQkFDS0VORC0+Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmZzc2xjdHhwKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzaWduYWxlZCBieSBzc2wgY3R4IGNhbGxiYWNrIik7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgfQotI2lmZGVmIE5PX0ZJTEVTWVNURU0KLSAgZWxzZSBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKLSAgICBmYWlsZihkYXRhLCAiU1NMOiBDZXJ0aWZpY2F0ZXMgY291bGRuJ3QgYmUgbG9hZGVkIGJlY2F1c2UgQ3lhU1NMIHdhcyBidWlsdCIKLSAgICAgICAgICAiIHdpdGggXCJubyBmaWxlc3lzdGVtXCIuIEVpdGhlciBkaXNhYmxlIHBlZXIgdmVyaWZpY2F0aW9uIgotICAgICAgICAgICIgKGluc2VjdXJlKSBvciBpZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIHdpdGggbGliY3VybCB5b3UiCi0gICAgICAgICAgIiBjYW4gbG9hZCBjZXJ0aWZpY2F0ZXMgdmlhIENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTi4iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLSNlbmRpZgotCi0gIC8qIExldCdzIG1ha2UgYW4gU1NMIHN0cnVjdHVyZSAqLwotICBpZihCQUNLRU5ELT5oYW5kbGUpCi0gICAgU1NMX2ZyZWUoQkFDS0VORC0+aGFuZGxlKTsKLSAgQkFDS0VORC0+aGFuZGxlID0gU1NMX25ldyhCQUNLRU5ELT5jdHgpOwotICBpZighQkFDS0VORC0+aGFuZGxlKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCAoaGFuZGxlKSEiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0jaWZkZWYgSEFWRV9BTFBOCi0gIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgY2hhciBwcm90b2NvbHNbMTI4XTsKLSAgICAqcHJvdG9jb2xzID0gJ1wwJzsKLQotICAgIC8qIHdvbGZTU0wncyBBTFBOIHByb3RvY29sIG5hbWUgbGlzdCBmb3JtYXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mCi0gICAgICAgcHJvdG9jb2xzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgcHJlZmVyZW5jZSwgZWc6ICJoMixodHRwLzEuMSIgKi8KLQotI2lmZGVmIFVTRV9OR0hUVFAyCi0gICAgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIpIHsKLSAgICAgIHN0cmNweShwcm90b2NvbHMgKyBzdHJsZW4ocHJvdG9jb2xzKSwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEICIsIik7Ci0gICAgICBpbmZvZihkYXRhLCAiQUxQTiwgb2ZmZXJpbmcgJXNcbiIsIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdHJjcHkocHJvdG9jb2xzICsgc3RybGVuKHByb3RvY29scyksIEFMUE5fSFRUUF8xXzEpOwotICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7Ci0KLSAgICBpZih3b2xmU1NMX1VzZUFMUE4oQkFDS0VORC0+aGFuZGxlLCBwcm90b2NvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClzdHJsZW4ocHJvdG9jb2xzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9BTFBOX0NPTlRJTlVFX09OX01JU01BVENIKSAhPSBTU0xfU1VDQ0VTUykgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHNldHRpbmcgQUxQTiBwcm90b2NvbHMiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLSNlbmRpZiAvKiBIQVZFX0FMUE4gKi8KLQotICAvKiBDaGVjayBpZiB0aGVyZSdzIGEgY2FjaGVkIElEIHdlIGNhbi9zaG91bGQgdXNlIGhlcmUhICovCi0gIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgewotICAgIHZvaWQgKnNzbF9zZXNzaW9uaWQgPSBOVUxMOwotCi0gICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmc3NsX3Nlc3Npb25pZCwgTlVMTCwgc29ja2luZGV4KSkgewotICAgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLwotICAgICAgaWYoIVNTTF9zZXRfc2Vzc2lvbihCQUNLRU5ELT5oYW5kbGUsIHNzbF9zZXNzaW9uaWQpKSB7Ci0gICAgICAgIGNoYXIgZXJyb3JfYnVmZmVyW0NZQVNTTF9NQVhfRVJST1JfU1pdOwotICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X3Nlc3Npb24gZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIDApLAotICAgICAgICAgICAgICBlcnJvcl9idWZmZXIpKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgfQotICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCi0gICAgICBpbmZvZihkYXRhLCAiU1NMIHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOwotICAgIH0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICB9Ci0KLSAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXIgKi8KLSAgaWYoIVNTTF9zZXRfZmQoQkFDS0VORC0+aGFuZGxlLCAoaW50KXNvY2tmZCkpIHsKLSAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X2ZkIGZhaWxlZCIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0gIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlCi1jeWFzc2xfY29ubmVjdF9zdGVwMihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBpbnQgcmV0ID0gLTE7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSogY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6Ci0gICAgY29ubi0+aG9zdC5uYW1lOwotICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/Ci0gICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZTsKLSAgY29uc3QgY2hhciAqIGNvbnN0IHBpbm5lZHB1YmtleSA9IFNTTF9JU19QUk9YWSgpID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfUFJPWFldIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfT1JJR107Ci0KLSAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gY3lhc3NsX3JlY3Y7Ci0gIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGN5YXNzbF9zZW5kOwotCi0gIC8qIEVuYWJsZSBSRkMyODE4IGNoZWNrcyAqLwotICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKLSAgICByZXQgPSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoQkFDS0VORC0+aGFuZGxlLCBob3N0bmFtZSk7Ci0gICAgaWYocmV0ID09IFNTTF9GQUlMVVJFKQotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQotICByZXQgPSBTU0xfY29ubmVjdChCQUNLRU5ELT5oYW5kbGUpOwotICBpZihyZXQgIT0gMSkgewotICAgIGNoYXIgZXJyb3JfYnVmZmVyW0NZQVNTTF9NQVhfRVJST1JfU1pdOwotICAgIGludCAgZGV0YWlsID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIHJldCk7Ci0KLSAgICBpZihTU0xfRVJST1JfV0FOVF9SRUFEID09IGRldGFpbCkgewotICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICB9Ci0gICAgZWxzZSBpZihTU0xfRVJST1JfV0FOVF9XUklURSA9PSBkZXRhaWwpIHsKLSAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmc7Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgfQotICAgIC8qIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIG92ZXJyaWRlIG9ubHkgdGhlIENOIG1hdGNoaW5nLgotICAgICAqIFRoaXMgd2lsbCBlbmFibGUgdGhlIG92ZXJyaWRlIG9mIGJvdGggbWlzbWF0Y2hpbmcgU3ViamVjdEFsdE5hbWVzCi0gICAgICogYXMgYWxzbyBtaXNtYXRjaGluZyBDTiBmaWVsZHMgKi8KLSAgICBlbHNlIGlmKERPTUFJTl9OQU1FX01JU01BVENIID09IGRldGFpbCkgewotI2lmIDEKLSAgICAgIGZhaWxmKGRhdGEsICJcdHN1YmplY3QgYWx0IG5hbWUocykgb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKLSAgICAgICAgICAgIGRpc3BuYW1lKTsKLSAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0jZWxzZQotICAgICAgLyogV2hlbiB0aGUgQ3lhU1NMX2NoZWNrX2RvbWFpbl9uYW1lKCkgaXMgdXNlZCBhbmQgeW91IGRlc2lyZSB0byBjb250aW51ZQotICAgICAgICogb24gYSBET01BSU5fTkFNRV9NSVNNQVRDSCwgaS5lLiAnY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0ID09IDAnLAotICAgICAgICogQ3lhU1NMIHZlcnNpb24gMi40LjAgd2lsbCBmYWlsIHdpdGggYW4gSU5DT01QTEVURV9EQVRBIGVycm9yLiBUaGUgb25seQotICAgICAgICogd2F5IHRvIGRvIHRoaXMgaXMgY3VycmVudGx5IHRvIHN3aXRjaCB0aGUgQ3lhU1NMX2NoZWNrX2RvbWFpbl9uYW1lKCkKLSAgICAgICAqIGluIGFuZCBvdXQgYmFzZWQgb24gdGhlICdjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QnIHZhbHVlLiAqLwotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAgICJcdHN1YmplY3QgYWx0IG5hbWUocykgb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgZGlzcG5hbWUpOwotICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGluZm9mKGRhdGEsCi0gICAgICAgICAgICAgICJcdHN1YmplY3QgYWx0IG5hbWUocykgYW5kL29yIGNvbW1vbiBuYW1lIGRvIG5vdCBtYXRjaCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgIGRpc3BuYW1lKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgICAgfQotI2VuZGlmCi0gICAgfQotI2lmIExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+PSAweDAyMDA3MDAwIC8qIDIuNy4wICovCi0gICAgZWxzZSBpZihBU05fTk9fU0lHTkVSX0UgPT0gZGV0YWlsKSB7Ci0gICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIlx0Q0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvblxuIik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUKLSAgICAgICAgICAgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiAqLwotICAgICAgICBpbmZvZihkYXRhLCAiQ0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvbiwgIgotICAgICAgICAgICAgICAgICAgICAiY29udGludWluZyBhbnl3YXlcbiIpOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIGVsc2UgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTF9jb25uZWN0IGZhaWxlZCB3aXRoIGVycm9yICVkOiAlcyIsIGRldGFpbCwKLSAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGRldGFpbCwgZXJyb3JfYnVmZmVyKSk7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgaWYocGlubmVkcHVia2V5KSB7Ci0jaWZkZWYgS0VFUF9QRUVSX0NFUlQKLSAgICBYNTA5ICp4NTA5OwotICAgIGNvbnN0IGNoYXIgKng1MDlfZGVyOwotICAgIGludCB4NTA5X2Rlcl9sZW47Ci0gICAgY3VybF9YNTA5Y2VydGlmaWNhdGUgeDUwOV9wYXJzZWQ7Ci0gICAgY3VybF9hc24xRWxlbWVudCAqcHVia2V5OwotICAgIENVUkxjb2RlIHJlc3VsdDsKLQotICAgIHg1MDkgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoQkFDS0VORC0+aGFuZGxlKTsKLSAgICBpZigheDUwOSkgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHJldHJpZXZpbmcgc2VydmVyIGNlcnRpZmljYXRlIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOwotICAgIH0KLQotICAgIHg1MDlfZGVyID0gKGNvbnN0IGNoYXIgKilDeWFTU0xfWDUwOV9nZXRfZGVyKHg1MDksICZ4NTA5X2Rlcl9sZW4pOwotICAgIGlmKCF4NTA5X2RlcikgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHJldHJpZXZpbmcgQVNOLjEgc2VydmVyIGNlcnRpZmljYXRlIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOwotICAgIH0KLQotICAgIG1lbXNldCgmeDUwOV9wYXJzZWQsIDAsIHNpemVvZih4NTA5X3BhcnNlZCkpOwotICAgIGlmKEN1cmxfcGFyc2VYNTA5KCZ4NTA5X3BhcnNlZCwgeDUwOV9kZXIsIHg1MDlfZGVyICsgeDUwOV9kZXJfbGVuKSkKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0KLSAgICBwdWJrZXkgPSAmeDUwOV9wYXJzZWQuc3ViamVjdFB1YmxpY0tleUluZm87Ci0gICAgaWYoIXB1YmtleS0+aGVhZGVyIHx8IHB1YmtleS0+ZW5kIDw9IHB1YmtleS0+aGVhZGVyKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBwdWJsaWMga2V5IGZyb20gc2VydmVyIGNlcnRpZmljYXRlIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOwotICAgIH0KLQotICAgIHJlc3VsdCA9IEN1cmxfcGluX3BlZXJfcHVia2V5KGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkcHVia2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopcHVia2V5LT5oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkocHVia2V5LT5lbmQgLSBwdWJrZXktPmhlYWRlcikpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTDogcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBwaW5uZWQgcHVibGljIGtleSEiKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2Vsc2UKLSAgICBmYWlsZihkYXRhLCAiTGlicmFyeSBsYWNrcyBwaW5uaW5nIHN1cHBvcnQgYnVpbHQtaW4iKTsKLSAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwotI2VuZGlmCi0gIH0KLQotI2lmZGVmIEhBVkVfQUxQTgotICBpZihjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbikgewotICAgIGludCByYzsKLSAgICBjaGFyICpwcm90b2NvbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2xfbGVuID0gMDsKLQotICAgIHJjID0gd29sZlNTTF9BTFBOX0dldFByb3RvY29sKEJBQ0tFTkQtPmhhbmRsZSwgJnByb3RvY29sLCAmcHJvdG9jb2xfbGVuKTsKLQotICAgIGlmKHJjID09IFNTTF9TVUNDRVNTKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiQUxQTiwgc2VydmVyIGFjY2VwdGVkIHRvIHVzZSAlLipzXG4iLCBwcm90b2NvbF9sZW4sCi0gICAgICAgICAgICBwcm90b2NvbCk7Ci0KLSAgICAgIGlmKHByb3RvY29sX2xlbiA9PSBBTFBOX0hUVFBfMV8xX0xFTkdUSCAmJgotICAgICAgICAgIW1lbWNtcChwcm90b2NvbCwgQUxQTl9IVFRQXzFfMSwgQUxQTl9IVFRQXzFfMV9MRU5HVEgpKQotICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7Ci0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICAgIGVsc2UgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIgJiYKLSAgICAgICAgICAgICAgcHJvdG9jb2xfbGVuID09IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4gJiYKLSAgICAgICAgICAgICAgIW1lbWNtcChwcm90b2NvbCwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lELAotICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKQotICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8yOwotI2VuZGlmCi0gICAgICBlbHNlCi0gICAgICAgIGluZm9mKGRhdGEsICJBTFBOLCB1bnJlY29nbml6ZWQgcHJvdG9jb2wgJS4qc1xuIiwgcHJvdG9jb2xfbGVuLAotICAgICAgICAgICAgICBwcm90b2NvbCk7Ci0gICAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7Ci0gICAgfQotICAgIGVsc2UgaWYocmMgPT0gU1NMX0FMUE5fTk9UX0ZPVU5EKQotICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOwotICAgIGVsc2UgewotICAgICAgZmFpbGYoZGF0YSwgIkFMUE4sIGZhaWx1cmUgZ2V0dGluZyBwcm90b2NvbCwgZXJyb3IgJWQiLCByYyk7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotICB9Ci0jZW5kaWYgLyogSEFWRV9BTFBOICovCi0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzM7Ci0jaWYgKExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+PSAweDAzMDA5MDEwKQotICBpbmZvZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdXNpbmcgJXMgLyAlc1xuIiwKLSAgICAgICAgd29sZlNTTF9nZXRfdmVyc2lvbihCQUNLRU5ELT5oYW5kbGUpLAotICAgICAgICB3b2xmU1NMX2dldF9jaXBoZXJfbmFtZShCQUNLRU5ELT5oYW5kbGUpKTsKLSNlbHNlCi0gIGluZm9mKGRhdGEsICJTU0wgY29ubmVjdGVkXG4iKTsKLSNlbmRpZgotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUKLWN5YXNzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0KLSAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKLQotICBpZihTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpIHsKLSAgICBib29sIGluY2FjaGU7Ci0gICAgU1NMX1NFU1NJT04gKm91cl9zc2xfc2Vzc2lvbmlkOwotICAgIHZvaWQgKm9sZF9zc2xfc2Vzc2lvbmlkID0gTlVMTDsKLQotICAgIG91cl9zc2xfc2Vzc2lvbmlkID0gU1NMX2dldF9zZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSk7Ci0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXgpKTsKLSAgICBpZihpbmNhY2hlKSB7Ci0gICAgICBpZihvbGRfc3NsX3Nlc3Npb25pZCAhPSBvdXJfc3NsX3Nlc3Npb25pZCkgewotICAgICAgICBpbmZvZihkYXRhLCAib2xkIFNTTCBzZXNzaW9uIElEIGlzIHN0YWxlLCByZW1vdmluZ1xuIik7Ci0gICAgICAgIEN1cmxfc3NsX2RlbHNlc3Npb25pZChjb25uLCBvbGRfc3NsX3Nlc3Npb25pZCk7Ci0gICAgICAgIGluY2FjaGUgPSBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZighaW5jYWNoZSkgewotICAgICAgcmVzdWx0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIG91cl9zc2xfc2Vzc2lvbmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogdW5rbm93biBzaXplICovLCBzb2NraW5kZXgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gc3RvcmUgc3NsIHNlc3Npb24iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKLSAgfQotCi0gIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF9kb25lOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgY3lhc3NsX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBjaGFyIGVycm9yX2J1ZmZlcltDWUFTU0xfTUFYX0VSUk9SX1NaXTsKLSAgaW50ICBtZW1sZW4gPSAobGVuID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWxlbjsKLSAgaW50ICByYyAgICAgPSBTU0xfd3JpdGUoQkFDS0VORC0+aGFuZGxlLCBtZW0sIG1lbWxlbik7Ci0KLSAgaWYocmMgPCAwKSB7Ci0gICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCByYyk7Ci0KLSAgICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF93cml0ZSgpICovCi0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKLSAgICAgIHJldHVybiAtMTsKLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTCB3cml0ZTogJXMsIGVycm5vICVkIiwKLSAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoZXJyLCBlcnJvcl9idWZmZXIpLAotICAgICAgICAgICAgU09DS0VSUk5PKTsKLSAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9Ci0gIHJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgQ3VybF9jeWFzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQotewotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLQotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKLSAgICAodm9pZClTU0xfc2h1dGRvd24oQkFDS0VORC0+aGFuZGxlKTsKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7Ci0gIH0KLSAgaWYoQkFDS0VORC0+Y3R4KSB7Ci0gICAgU1NMX0NUWF9mcmVlKEJBQ0tFTkQtPmN0eCk7Ci0gICAgQkFDS0VORC0+Y3R4ID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgc3NpemVfdCBjeWFzc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtudW1dOwotICBjaGFyIGVycm9yX2J1ZmZlcltDWUFTU0xfTUFYX0VSUk9SX1NaXTsKLSAgaW50ICBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7Ci0gIGludCAgbnJlYWQgICAgPSBTU0xfcmVhZChCQUNLRU5ELT5oYW5kbGUsIGJ1ZiwgYnVmZnNpemUpOwotCi0gIGlmKG5yZWFkIDwgMCkgewotICAgIGludCBlcnIgPSBTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgbnJlYWQpOwotCi0gICAgc3dpdGNoKGVycikgewotICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOiAvKiBubyBtb3JlIGRhdGEgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgLyogdGhlcmUncyBkYXRhIHBlbmRpbmcsIHJlLWludm9rZSBTU0xfcmVhZCgpICovCi0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKLSAgICAgIHJldHVybiAtMTsKLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTCByZWFkOiAlcywgZXJybm8gJWQiLAotICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCi0gICAgICAgICAgICBTT0NLRVJSTk8pOwotICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5yZWFkOwotfQotCi0KLXN0YXRpYyB2b2lkIEN1cmxfY3lhc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpCi17Ci0gICh2b2lkKXB0cjsKLSAgLyogQ3lhU1NMIHJldXNlcyBzZXNzaW9ucyBvbiBvd24sIG5vIGZyZWUgKi8KLX0KLQotCi1zdGF0aWMgc2l6ZV90IEN1cmxfY3lhc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLSNpZiBMSUJDWUFTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwNjAwMAotICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIndvbGZTU0wvJXMiLCB3b2xmU1NMX2xpYl92ZXJzaW9uKCkpOwotI2VsaWYgZGVmaW5lZChXT0xGU1NMX1ZFUlNJT04pCi0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAid29sZlNTTC8lcyIsIFdPTEZTU0xfVkVSU0lPTik7Ci0jZWxpZiBkZWZpbmVkKENZQVNTTF9WRVJTSU9OKQotICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIkN5YVNTTC8lcyIsIENZQVNTTF9WRVJTSU9OKTsKLSNlbHNlCi0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiQ3lhU1NMLyVzIiwgIjwxLjguOCIpOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIGludCBDdXJsX2N5YXNzbF9pbml0KHZvaWQpCi17Ci0gIHJldHVybiAoQ3lhU1NMX0luaXQoKSA9PSBTU0xfU1VDQ0VTUyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgQ3VybF9jeWFzc2xfY2xlYW51cCh2b2lkKQotewotICBDeWFTU0xfQ2xlYW51cCgpOwotfQotCi0KLXN0YXRpYyBib29sIEN1cmxfY3lhc3NsX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEqIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbm5pbmRleCkKLXsKLSAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW2Nvbm5pbmRleF07Ci0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkgICAvKiBTU0wgaXMgaW4gdXNlICovCi0gICAgcmV0dXJuICgwICE9IFNTTF9wZW5kaW5nKEJBQ0tFTkQtPmhhbmRsZSkpID8gVFJVRSA6IEZBTFNFOwotICBlbHNlCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzaHV0IGRvd24gdGhlIFNTTCBsYXllciBidXQga2VlcCB0aGUKLSAqIHNvY2tldCBvcGVuIChDQ0MgLSBDbGVhciBDb21tYW5kIENoYW5uZWwpCi0gKi8KLXN0YXRpYyBpbnQgQ3VybF9jeWFzc2xfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQotewotICBpbnQgcmV0dmFsID0gMDsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0KLSAgaWYoQkFDS0VORC0+aGFuZGxlKSB7Ci0gICAgU1NMX2ZyZWUoQkFDS0VORC0+aGFuZGxlKTsKLSAgICBCQUNLRU5ELT5oYW5kbGUgPSBOVUxMOwotICB9Ci0gIHJldHVybiByZXR2YWw7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlCi1jeWFzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZywKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIHRpbWVfdCB0aW1lb3V0X21zOwotICBpbnQgd2hhdDsKLQotICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCi0gIGlmKHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlID09IGNvbm5zc2wtPnN0YXRlKSB7Ci0gICAgKmRvbmUgPSBUUlVFOwotICAgIHJldHVybiBDVVJMRV9PSzsKLSAgfQotCi0gIGlmKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7Ci0KLSAgICBpZih0aW1lb3V0X21zIDwgMCkgewotICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KLSAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGN5YXNzbF9jb25uZWN0X3N0ZXAxKGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHdoaWxlKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotCi0gICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KLSAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQotICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgfQotCi0gICAgLyogaWYgc3NsIGlzIGV4cGVjdGluZyBzb21ldGhpbmcsIGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlLiAqLwotICAgIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nCi0gICAgICAgfHwgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8yX3dyaXRpbmcpIHsKLQotICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkID0gc3NsX2Nvbm5lY3RfMl93cml0aW5nID09Ci0gICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKLSAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09Ci0gICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKLQotICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7Ci0gICAgICBpZih3aGF0IDwgMCkgewotICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwotICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgfQotICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKLSAgICAgICAgaWYobm9uYmxvY2tpbmcpIHsKLSAgICAgICAgICAqZG9uZSA9IEZBTFNFOwotICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAvKiB0aW1lb3V0ICovCi0gICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBzb2NrZXQgaXMgcmVhZGFibGUgb3Igd3JpdGFibGUgKi8KLSAgICB9Ci0KLSAgICAvKiBSdW4gdHJhbnNhY3Rpb24sIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciBpZiBpdCBmYWlsZWQgb3IgaWYKLSAgICAgKiB0aGlzIGNvbm5lY3Rpb24gaXMgcGFydCBvZiBhIG11bHRpIGhhbmRsZSBhbmQgdGhpcyBsb29wIHdvdWxkCi0gICAgICogZXhlY3V0ZSBhZ2Fpbi4gVGhpcyBwZXJtaXRzIHRoZSBvd25lciBvZiBhIG11bHRpIGhhbmRsZSB0bwotICAgICAqIGFib3J0IGEgY29ubmVjdGlvbiBhdHRlbXB0IGJlZm9yZSBzdGVwMiBoYXMgY29tcGxldGVkIHdoaWxlCi0gICAgICogZW5zdXJpbmcgdGhhdCBhIGNsaWVudCB1c2luZyBzZWxlY3QoKSBvciBlcG9sbCgpIHdpbGwgYWx3YXlzCi0gICAgICogaGF2ZSBhIHZhbGlkIGZkc2V0IHRvIHdhaXQgb24uCi0gICAgICovCi0gICAgcmVzdWx0ID0gY3lhc3NsX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQgfHwgKG5vbmJsb2NraW5nICYmCi0gICAgICAgICAgICAgICAgICAoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkpKQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAvKiByZXBlYXQgc3RlcDIgdW50aWwgYWxsIHRyYW5zYWN0aW9ucyBhcmUgZG9uZS4gKi8KLQotICBpZihzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKLSAgICByZXN1bHQgPSBjeWFzc2xfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBpZihzc2xfY29ubmVjdF9kb25lID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKLSAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOwotICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGN5YXNzbF9yZWN2OwotICAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGN5YXNzbF9zZW5kOwotICAgICpkb25lID0gVFJVRTsKLSAgfQotICBlbHNlCi0gICAgKmRvbmUgPSBGQUxTRTsKLQotICAvKiBSZXNldCBvdXIgY29ubmVjdCBzdGF0ZSBtYWNoaW5lICovCi0gIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8xOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9jeWFzc2xfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQotewotICByZXR1cm4gY3lhc3NsX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgVFJVRSwgZG9uZSk7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlIEN1cmxfY3lhc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIGJvb2wgZG9uZSA9IEZBTFNFOwotCi0gIHJlc3VsdCA9IGN5YXNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7Ci0gIGlmKHJlc3VsdCkKLSAgICByZXR1cm4gcmVzdWx0OwotCi0gIERFQlVHQVNTRVJUKGRvbmUpOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIENVUkxjb2RlIEN1cmxfY3lhc3NsX3JhbmRvbShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbnRyb3B5LCBzaXplX3QgbGVuZ3RoKQotewotICBSTkcgcm5nOwotICAodm9pZClkYXRhOwotICBpZihJbml0Um5nKCZybmcpKQotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKLSAgaWYobGVuZ3RoID4gVUlOVF9NQVgpCi0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICBpZihSTkdfR2VuZXJhdGVCbG9jaygmcm5nLCBlbnRyb3B5LCAodW5zaWduZWQpbGVuZ3RoKSkKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIGlmKEZyZWVSbmcoJnJuZykpCi0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBDdXJsX2N5YXNzbF9zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqdG1wLCAvKiBpbnB1dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0bXBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2hhMjU2c3VtIC8qIG91dHB1dCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdW51c2VkKQotewotICBTaGEyNTYgU0hBMjU2cHc7Ci0gICh2b2lkKXVudXNlZDsKLSAgSW5pdFNoYTI1NigmU0hBMjU2cHcpOwotICBTaGEyNTZVcGRhdGUoJlNIQTI1NnB3LCB0bXAsICh3b3JkMzIpdG1wbGVuKTsKLSAgU2hhMjU2RmluYWwoJlNIQTI1NnB3LCBzaGEyNTZzdW0pOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkICpDdXJsX2N5YXNzbF9nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk8gaW5mbyBVTlVTRURfUEFSQU0pCi17Ci0gICh2b2lkKWluZm87Ci0gIHJldHVybiBCQUNLRU5ELT5oYW5kbGU7Ci19Ci0KLWNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9jeWFzc2wgPSB7Ci0gIHsgQ1VSTFNTTEJBQ0tFTkRfV09MRlNTTCwgIldvbGZTU0wiIH0sIC8qIGluZm8gKi8KLQotI2lmZGVmIEtFRVBfUEVFUl9DRVJUCi0gIFNTTFNVUFBfUElOTkVEUFVCS0VZIHwKLSNlbmRpZgotICBTU0xTVVBQX1NTTF9DVFgsCi0KLSAgc2l6ZW9mKHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhKSwKLQotICBDdXJsX2N5YXNzbF9pbml0LCAgICAgICAgICAgICAgICAvKiBpbml0ICovCi0gIEN1cmxfY3lhc3NsX2NsZWFudXAsICAgICAgICAgICAgIC8qIGNsZWFudXAgKi8KLSAgQ3VybF9jeWFzc2xfdmVyc2lvbiwgICAgICAgICAgICAgLyogdmVyc2lvbiAqLwotICBDdXJsX25vbmVfY2hlY2tfY3huLCAgICAgICAgICAgICAvKiBjaGVja19jeG4gKi8KLSAgQ3VybF9jeWFzc2xfc2h1dGRvd24sICAgICAgICAgICAgLyogc2h1dGRvd24gKi8KLSAgQ3VybF9jeWFzc2xfZGF0YV9wZW5kaW5nLCAgICAgICAgLyogZGF0YV9wZW5kaW5nICovCi0gIEN1cmxfY3lhc3NsX3JhbmRvbSwgICAgICAgICAgICAgIC8qIHJhbmRvbSAqLwotICBDdXJsX25vbmVfY2VydF9zdGF0dXNfcmVxdWVzdCwgICAvKiBjZXJ0X3N0YXR1c19yZXF1ZXN0ICovCi0gIEN1cmxfY3lhc3NsX2Nvbm5lY3QsICAgICAgICAgICAgIC8qIGNvbm5lY3QgKi8KLSAgQ3VybF9jeWFzc2xfY29ubmVjdF9ub25ibG9ja2luZywgLyogY29ubmVjdF9ub25ibG9ja2luZyAqLwotICBDdXJsX2N5YXNzbF9nZXRfaW50ZXJuYWxzLCAgICAgICAvKiBnZXRfaW50ZXJuYWxzICovCi0gIEN1cmxfY3lhc3NsX2Nsb3NlLCAgICAgICAgICAgICAgIC8qIGNsb3NlX29uZSAqLwotICBDdXJsX25vbmVfY2xvc2VfYWxsLCAgICAgICAgICAgICAvKiBjbG9zZV9hbGwgKi8KLSAgQ3VybF9jeWFzc2xfc2Vzc2lvbl9mcmVlLCAgICAgICAgLyogc2Vzc2lvbl9mcmVlICovCi0gIEN1cmxfbm9uZV9zZXRfZW5naW5lLCAgICAgICAgICAgIC8qIHNldF9lbmdpbmUgKi8KLSAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwgICAgLyogc2V0X2VuZ2luZV9kZWZhdWx0ICovCi0gIEN1cmxfbm9uZV9lbmdpbmVzX2xpc3QsICAgICAgICAgIC8qIGVuZ2luZXNfbGlzdCAqLwotICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsICAgICAgICAgICAvKiBmYWxzZV9zdGFydCAqLwotICBDdXJsX25vbmVfbWQ1c3VtLCAgICAgICAgICAgICAgICAvKiBtZDVzdW0gKi8KLSAgQ3VybF9jeWFzc2xfc2hhMjU2c3VtICAgICAgICAgICAgLyogc2hhMjU2c3VtICovCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2N5YXNzbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWUxMWNjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jaWZuZGVmIEhFQURFUl9DVVJMX0NZQVNTTF9ICi0jZGVmaW5lIEhFQURFUl9DVVJMX0NZQVNTTF9ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWZkZWYgVVNFX0NZQVNTTAotCi1leHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX2N5YXNzbDsKLQotI2VuZGlmIC8qIFVTRV9DWUFTU0wgKi8KLSNlbmRpZiAvKiBIRUFERVJfQ1VSTF9DWUFTU0xfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5jCmluZGV4IGI5M2ZmNWQuLjMyMTUzZGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3NraXQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDYgKzI2LDggQEAKIAogI2luY2x1ZGUgPGdza3NzbC5oPgogI2luY2x1ZGUgPHFzb2FzeW5jLmg+CisjdW5kZWYgSEFWRV9TT0NLRVRQQUlSIC8qIGJlY2F1c2UgdGhlIG5hdGl2ZSBvbmUgaXNuJ3QgZ29vZCBlbm91Z2ggKi8KKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAKIC8qIFNvbWUgc3ltYm9scyBhcmUgdW5kZWZpbmVkL3Vuc3VwcG9ydGVkIG9uIE9TNDAwIHZlcnNpb25zIDwgVjdSMS4gKi8KICNpZm5kZWYgR1NLX1NTTF9FWFROX1NFUlZFUk5BTUVfUkVRVUVTVApAQCAtNTExLDEwMCArNTEzLDYgQEAKICAgQkFDS0VORC0+aW9jcG9ydCA9IC0xOwogfQogCi0vKiBTU0wgb3ZlciBTU0wKLSAqIFByb2JsZW1zOgotICogMSkgR1NLaXQgY2FuIG9ubHkgcGVyZm9ybSBTU0wgb24gYW4gQUZfSU5FVCBvciBBRl9JTkVUNiBzdHJlYW0gc29ja2V0LiBUbwotICogICAgcGlwZSBhbiBTU0wgc3RyZWFtIGludG8gYW5vdGhlciwgaXQgaXMgdGhlcmVmb3JlIG5lZWRlZCB0byBoYXZlIGEgcGFpcgotICogICAgb2Ygc3VjaCBjb21tdW5pY2F0aW5nIHNvY2tldHMgYW5kIGhhbmRsZSB0aGUgcGlwZWxpbmluZyBleHBsaWNpdGx5LgotICogMikgT1MvNDAwIHNvY2tldHBhaXIoKSBpcyBvbmx5IGltcGxlbWVudGVkIGZvciBkb21haW4gQUZfVU5JWCwgdGh1cyBjYW5ub3QKLSAqICAgIGJlIHVzZWQgdG8gcHJvZHVjZSB0aGUgcGlwZWxpbmUuCi0gKiBUaGUgc29sdXRpb24gaXMgdG8gc2ltdWxhdGUgc29ja2V0cGFpcigpIGZvciBBRl9JTkVUIHdpdGggbG93LWxldmVsIEFQSQotICogICAgbGlzdGVuKCksIGJpbmQoKSBhbmQgY29ubmVjdCgpLgotICovCi0KLXN0YXRpYyBpbnQKLWluZXRzb2NrZXRwYWlyKGludCBzdlsyXSkKLXsKLSAgaW50IGxmZDsgICAgICAvKiBMaXN0ZW5pbmcgc29ja2V0LiAqLwotICBpbnQgc2ZkOyAgICAgIC8qIFNlcnZlciBzb2NrZXQuICovCi0gIGludCBjZmQ7ICAgICAgLyogQ2xpZW50IHNvY2tldC4gKi8KLSAgaW50IGxlbjsKLSAgc3RydWN0IHNvY2thZGRyX2luIGFkZHIxOwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjI7Ci0KLSAgLyogQ3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgb24gYSBsb2NhbCBkeW5hbWljIHBvcnQuICovCi0gIGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0gIGlmKGxmZCA8IDApCi0gICAgcmV0dXJuIC0xOwotICBtZW1zZXQoKGNoYXIgKikgJmFkZHIxLCAwLCBzaXplb2YoYWRkcjEpKTsKLSAgYWRkcjEuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gIGFkZHIxLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7Ci0gIGFkZHIxLnNpbl9wb3J0ID0gMDsKLSAgaWYoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIxLCBzaXplb2YoYWRkcjEpKSB8fAotICAgICBsaXN0ZW4obGZkLCAyKSA8IDApIHsKLSAgICBjbG9zZShsZmQpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIEdldCB0aGUgYWxsb2NhdGVkIHBvcnQuICovCi0gIGxlbiA9IHNpemVvZihhZGRyMSk7Ci0gIGlmKGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsICZsZW4pIDwgMCkgewotICAgIGNsb3NlKGxmZCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogQ3JlYXRlIHRoZSBjbGllbnQgc29ja2V0LiAqLwotICBjZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwotICBpZihjZmQgPCAwKSB7Ci0gICAgY2xvc2UobGZkKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBSZXF1ZXN0IHVuYmxvY2tpbmcgY29ubmVjdGlvbiB0byB0aGUgbGlzdGVuaW5nIHNvY2tldC4gKi8KLSAgY3VybHhfbm9uYmxvY2soY2ZkLCBUUlVFKTsKLSAgaWYoY29ubmVjdChjZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIxLCBzaXplb2YoYWRkcjEpKSA8IDAgJiYKLSAgICAgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKLSAgICBjbG9zZShsZmQpOwotICAgIGNsb3NlKGNmZCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogR2V0IHRoZSBjbGllbnQgZHluYW1pYyBwb3J0IGZvciBpbnRydXNpb24gY2hlY2sgYmVsb3cuICovCi0gIGxlbiA9IHNpemVvZihhZGRyMik7Ci0gIGlmKGdldHNvY2tuYW1lKGNmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjIsICZsZW4pIDwgMCkgewotICAgIGNsb3NlKGxmZCk7Ci0gICAgY2xvc2UoY2ZkKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBBY2NlcHQgdGhlIGluY29taW5nIGNvbm5lY3Rpb24gYW5kIGdldCB0aGUgc2VydmVyIHNvY2tldC4gKi8KLSAgY3VybHhfbm9uYmxvY2sobGZkLCBUUlVFKTsKLSAgZm9yKDs7KSB7Ci0gICAgbGVuID0gc2l6ZW9mKGFkZHIxKTsKLSAgICBzZmQgPSBhY2NlcHQobGZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyMSwgJmxlbik7Ci0gICAgaWYoc2ZkIDwgMCkgewotICAgICAgY2xvc2UobGZkKTsKLSAgICAgIGNsb3NlKGNmZCk7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgZm9yIHBvc3NpYmxlIGludHJ1c2lvbiBmcm9tIGFuIGV4dGVybmFsIHByb2Nlc3MuICovCi0gICAgaWYoYWRkcjEuc2luX2FkZHIuc19hZGRyID09IGFkZHIyLnNpbl9hZGRyLnNfYWRkciAmJgotICAgICAgIGFkZHIxLnNpbl9wb3J0ID09IGFkZHIyLnNpbl9wb3J0KQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBJbnRydXNpb246IHJlamVjdCBpbmNvbWluZyBjb25uZWN0aW9uLiAqLwotICAgIGNsb3NlKHNmZCk7Ci0gIH0KLQotICAvKiBEb25lLCByZXR1cm4gc29ja2V0cyBhbmQgc3VjY2VlZC4gKi8KLSAgY2xvc2UobGZkKTsKLSAgY3VybHhfbm9uYmxvY2soY2ZkLCBGQUxTRSk7Ci0gIHN2WzBdID0gY2ZkOwotICBzdlsxXSA9IHNmZDsKLSAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcGlwZV9zc2xvdmVyc3NsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb25zKQogewpAQCAtODU1LDcgKzc2Myw3IEBACiAKICAgLyogRXN0YWJsaXNoIGEgcGlwZWxpbmluZyBzb2NrZXQgcGFpciBmb3IgU1NMIG92ZXIgU1NMLiAqLwogICBpZihjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XS51c2UpIHsKLSAgICBpZihpbmV0c29ja2V0cGFpcihzb2NrcGFpcikpCisgICAgaWYoQ3VybF9zb2NrZXRwYWlyKDAsIDAsIDAsIHNvY2twYWlyKSkKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICBCQUNLRU5ELT5sb2NhbGZkID0gc29ja3BhaXJbMF07CiAgICAgQkFDS0VORC0+cmVtb3RlZmQgPSBzb2NrcGFpclsxXTsKQEAgLTExNTcsNyArMTA2NSw3IEBACiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgbG9uZyB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCiAgICpkb25lID0gY29ubnNzbC0+c3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmgKaW5kZXggNDY2ZWU0ZC4uYjA2YjVlMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3NraXQuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2d0bHMuYwppbmRleCA4NjkzY2RjLi41Zjc0MGVlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2d0bHMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2d0bHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjg4LDcgKzI4OCw3IEBACiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogCiAgIGZvcig7OykgewotICAgIHRpbWVfdCB0aW1lb3V0X21zOworICAgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgICBpbnQgcmM7CiAKICAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLwpAQCAtMzExLDcgKzMxMSw3IEBACiAKICAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXM/dGltZW91dF9tczoxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X21zPyh0aW1lX3QpdGltZW91dF9tczoxMDAwKTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtNjY2LDYgKzY2NiwxMCBAQAogICAvKiBJbml0aWFsaXplIFRMUyBzZXNzaW9uIGFzIGEgY2xpZW50ICovCiAgIGluaXRfZmxhZ3MgPSBHTlVUTFNfQ0xJRU5UOwogCisjaWYgZGVmaW5lZChHTlVUTFNfRk9SQ0VfQ0xJRU5UX0NFUlQpCisgIGluaXRfZmxhZ3MgfD0gR05VVExTX0ZPUkNFX0NMSUVOVF9DRVJUOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEdOVVRMU19OT19USUNLRVRTKQogICAvKiBEaXNhYmxlIFRMUyBzZXNzaW9uIHRpY2tldHMgKi8KICAgaW5pdF9mbGFncyB8PSBHTlVUTFNfTk9fVElDS0VUUzsKQEAgLTE2MDgsNyArMTYxMiw3IEBACiBzdGF0aWMgdm9pZCBjbG9zZV9vbmUoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiB7CiAgIGlmKEJBQ0tFTkQtPnNlc3Npb24pIHsKLSAgICBnbnV0bHNfYnllKEJBQ0tFTkQtPnNlc3Npb24sIEdOVVRMU19TSFVUX1JEV1IpOworICAgIGdudXRsc19ieWUoQkFDS0VORC0+c2Vzc2lvbiwgR05VVExTX1NIVVRfV1IpOwogICAgIGdudXRsc19kZWluaXQoQkFDS0VORC0+c2Vzc2lvbik7CiAgICAgQkFDS0VORC0+c2Vzc2lvbiA9IE5VTEw7CiAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzLmMKaW5kZXggNjNkMWY0Yy4uZjA1NzMxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDExLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU1LDcgKzU1LDcgQEAKICNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCiAjaW5jbHVkZSAic2VsZWN0LmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgInBvbGFyc3NsX3RocmVhZGxvY2suaCIKKyNpbmNsdWRlICJtYmVkdGxzX3RocmVhZGxvY2suaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCkBAIC05MSwxMiArOTEsMTIgQEAKIHN0YXRpYyB2b2lkIGVudHJvcHlfaW5pdF9tdXRleChtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4KQogewogICAvKiBsb2NrIDAgPSBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwotICBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKDApOworICBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMCk7CiAgIGlmKGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCA9PSAwKSB7CiAgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoY3R4KTsKICAgICBlbnRyb3B5X2luaXRfaW5pdGlhbGl6ZWQgPSAxOwogICB9Ci0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigwKTsKKyAgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oMCk7CiB9CiAvKiBlbmQgb2YgZW50cm9weV9pbml0X211dGV4KCkgKi8KIApAQCAtMTA1LDkgKzEwNSw5IEBACiB7CiAgIGludCByZXQ7CiAgIC8qIGxvY2sgMSA9IGVudHJvcHlfZnVuY19tdXRleCgpICovCi0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMSk7CisgIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbigxKTsKICAgcmV0ID0gbWJlZHRsc19lbnRyb3B5X2Z1bmMoZGF0YSwgb3V0cHV0LCBsZW4pOwotICBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oMSk7CisgIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKDEpOwogCiAgIHJldHVybiByZXQ7CiB9CkBAIC01ODgsNiArNTg4LDkgQEAKICAgICBlbHNlIGlmKHJldCAmIE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEKQogICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9OT1RfVFJVU1RFRCIpOwogCisgICAgZWxzZSBpZihyZXQgJiBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkUpCisgICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX0ZVVFVSRSIpOworCiAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgfQogCkBAIC04ODQsNyArODg3LDcgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgbG9uZyB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIGludCB3aGF0OwogCiAgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KQEAgLTkzMCw3ICs5MzMsNyBAQAogICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CiAKICAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZyA/IDAgOiB0aW1lb3V0X21zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZyA/IDAgOiAodGltZV90KXRpbWVvdXRfbXMpOwogICAgICAgaWYod2hhdCA8IDApIHsKICAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CkBAIC0xMDE0LDEyICsxMDE3LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgQ3VybF9tYmVkdGxzX2luaXQodm9pZCkKIHsKLSAgcmV0dXJuIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9zZXR1cCgpOworICByZXR1cm4gQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfc2V0dXAoKTsKIH0KIAogc3RhdGljIHZvaWQgQ3VybF9tYmVkdGxzX2NsZWFudXAodm9pZCkKIHsKLSAgKHZvaWQpQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAoKTsKKyAgKHZvaWQpQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCgpOwogfQogCiBzdGF0aWMgYm9vbCBDdXJsX21iZWR0bHNfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzLmgKaW5kZXggNGE5Mzg2MC4uMGNjNjRiMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRsc190aHJlYWRsb2NrLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjcyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWYgZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpKSB8fCAgIFwKKyAgIChkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKSkpCisKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQorIyAgaW5jbHVkZSA8cHRocmVhZC5oPgorIyAgZGVmaW5lIE1CRURUTFNfTVVURVhfVCBwdGhyZWFkX211dGV4X3QKKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCisjICBpbmNsdWRlIDxwcm9jZXNzLmg+CisjICBkZWZpbmUgTUJFRFRMU19NVVRFWF9UIEhBTkRMRQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzX3RocmVhZGxvY2suaCIKKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiBudW1iZXIgb2YgdGhyZWFkIGxvY2tzICovCisjZGVmaW5lIE5VTVQgICAgICAgICAgICAgICAgICAgIDIKKworLyogVGhpcyBhcnJheSB3aWxsIHN0b3JlIGFsbCBvZiB0aGUgbXV0ZXhlcyBhdmFpbGFibGUgdG8gTWJlZHRscy4gKi8KK3N0YXRpYyBNQkVEVExTX01VVEVYX1QgKm11dGV4X2J1ZiA9IE5VTEw7CisKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3RocmVhZF9zZXR1cCh2b2lkKQoreworICBpbnQgaTsKKworICBtdXRleF9idWYgPSBjYWxsb2MoTlVNVCAqIHNpemVvZihNQkVEVExTX01VVEVYX1QpLCAxKTsKKyAgaWYoIW11dGV4X2J1ZikKKyAgICByZXR1cm4gMDsgICAgIC8qIGVycm9yLCBubyBudW1iZXIgb2YgdGhyZWFkcyBkZWZpbmVkICovCisKKyAgZm9yKGkgPSAwOyAgaSA8IE5VTVQ7ICBpKyspIHsKKyAgICBpbnQgcmV0OworI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCisgICAgcmV0ID0gcHRocmVhZF9tdXRleF9pbml0KCZtdXRleF9idWZbaV0sIE5VTEwpOworICAgIGlmKHJldCkKKyAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2luaXQgZmFpbGVkICovCisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQorICAgIG11dGV4X2J1ZltpXSA9IENyZWF0ZU11dGV4KDAsIEZBTFNFLCAwKTsKKyAgICBpZihtdXRleF9idWZbaV0gPT0gMCkKKyAgICAgIHJldHVybiAwOyAgLyogQ3JlYXRlTXV0ZXggZmFpbGVkICovCisjZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KKyAgfQorCisgIHJldHVybiAxOyAvKiBPSyAqLworfQorCitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCh2b2lkKQoreworICBpbnQgaTsKKworICBpZighbXV0ZXhfYnVmKQorICAgIHJldHVybiAwOyAvKiBlcnJvciwgbm8gdGhyZWFkcyBsb2NrcyBkZWZpbmVkICovCisKKyAgZm9yKGkgPSAwOyBpIDwgTlVNVDsgaSsrKSB7CisgICAgaW50IHJldDsKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQorICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbXV0ZXhfYnVmW2ldKTsKKyAgICBpZihyZXQpCisgICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9kZXN0cm95IGZhaWxlZCAqLworI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKKyAgICByZXQgPSBDbG9zZUhhbmRsZShtdXRleF9idWZbaV0pOworICAgIGlmKCFyZXQpCisgICAgICByZXR1cm4gMDsgLyogQ2xvc2VIYW5kbGUgZmFpbGVkICovCisjZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KKyAgfQorICBmcmVlKG11dGV4X2J1Zik7CisgIG11dGV4X2J1ZiA9IE5VTEw7CisKKyAgcmV0dXJuIDE7IC8qIE9LICovCit9CisKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oaW50IG4pCit7CisgIGlmKG4gPCBOVU1UKSB7CisgICAgaW50IHJldDsKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQorICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXhfYnVmW25dKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCisgICAgfQorI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKKyAgICByZXQgPSAoV2FpdEZvclNpbmdsZU9iamVjdChtdXRleF9idWZbbl0sIElORklOSVRFKSA9PSBXQUlUX0ZBSUxFRD8xOjApOworICAgIGlmKHJldCkgeworICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBtYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOworICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KKyAgICB9CisjZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KKyAgfQorICByZXR1cm4gMTsgLyogT0sgKi8KK30KKworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKGludCBuKQoreworICBpZihuIDwgTlVNVCkgeworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyAgICByZXQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXhfYnVmW25dKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOworICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIGZhaWxlZCAqLworICAgIH0KKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCisgICAgcmV0ID0gUmVsZWFzZU11dGV4KG11dGV4X2J1ZltuXSk7CisgICAgaWYoIXJldCkgeworICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBtYmVkdGxzdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24gZmFpbGVkXG4iKSk7CisgICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9sb2NrIGZhaWxlZCAqLworICAgIH0KKyNlbmRpZiAvKiBVU0VfVEhSRUFEU19QT1NJWCAmJiBIQVZFX1BUSFJFQURfSCAqLworICB9CisgIHJldHVybiAxOyAvKiBPSyAqLworfQorCisjZW5kaWYgLyogVVNFX01CRURUTFMgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRsc190aHJlYWRsb2NrLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTc4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTUJFRFRMU19USFJFQURMT0NLX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTUJFRFRMU19USFJFQURMT0NLX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfTUJFRFRMUworCisjaWYgKGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpKSB8fCBcCisgICAgKGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpKQorCitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfc2V0dXAodm9pZCk7CitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCh2b2lkKTsKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oaW50IG4pOworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKGludCBuKTsKKworI2Vsc2UKKworI2RlZmluZSBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3RocmVhZF9zZXR1cCgpIDEKKyNkZWZpbmUgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCgpIDEKKyNkZWZpbmUgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKHgpIDEKKyNkZWZpbmUgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oeCkgMQorCisjZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggfHwgVVNFX1RIUkVBRFNfV0lOMzIgKi8KKworI2VuZGlmIC8qIFVTRV9NQkVEVExTICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NQkVEVExTX1RIUkVBRExPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tZXNhbGluay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tZXNhbGluay5jCmluZGV4IDcxOGMyODIuLmNhYjFlMzkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWVzYWxpbmsuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21lc2FsaW5rLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4LCBZaW1pbmcgSmluZywgPGppbmd5aW1pbmdAYmFpZHUuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTczLDYgKzczLDE3IEBACiBzdGF0aWMgQ3VybF9yZWN2IG1lc2FsaW5rX3JlY3Y7CiBzdGF0aWMgQ3VybF9zZW5kIG1lc2FsaW5rX3NlbmQ7CiAKK3N0YXRpYyBpbnQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgIGlmKCF0eXBlIHx8ICF0eXBlWzBdKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiUEVNIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07CisgIGlmKHN0cmNhc2Vjb21wYXJlKHR5cGUsICJERVIiKSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0FTTjE7CisgIHJldHVybiAtMTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWxsIHRoZSBjbGllbnQvQ0EgY2VydGlmaWNhdGVzIGFuZCBDUkxzLiBTZXR1cCB0aGUgVExTCiAgKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KQEAgLTgzLDkgKzk0LDYgQEAKICAgY2hhciAqY2lwaGVyczsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7Ci0gIGNvbnN0IGNoYXIgKmNvbnN0IHNzbF9jYWZpbGUgPSBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKTsKLSAgY29uc3QgY2hhciAqY29uc3Qgc3NsX2NhcGF0aCA9IFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpOwogICBzdHJ1Y3QgaW5fYWRkciBhZGRyNDsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7CkBAIC0xNDIsMjEgKzE1MCwyNSBAQAogICB9CiAKICAgU1NMX0NUWF9zZXRfdmVyaWZ5KAotICAgIEJBQ0tFTkQtPmN0eCwgdmVyaWZ5cGVlciA/IFNTTF9WRVJJRllfUEVFUiA6IFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CisgICAgQkFDS0VORC0+Y3R4LCBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikgPworICAgICAgU1NMX1ZFUklGWV9QRUVSIDogU1NMX1ZFUklGWV9OT05FLCBOVUxMKTsKIAotICBpZihzc2xfY2FmaWxlIHx8IHNzbF9jYXBhdGgpIHsKLSAgICBpZighU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQkFDS0VORC0+Y3R4LCBzc2xfY2FmaWxlLCBzc2xfY2FwYXRoKSkgewotICAgICAgaWYodmVyaWZ5cGVlcikgeworICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSB8fCBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkgeworICAgIGlmKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCQUNLRU5ELT5jdHgsIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpKSkgeworICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgICAgICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iCiAgICAgICAgICAgICAgICIgIENBZmlsZTogJXNcbiAgQ0FwYXRoOiAlcyIsCi0gICAgICAgICAgICAgIHNzbF9jYWZpbGUgPyBzc2xfY2FmaWxlIDogIm5vbmUiLAotICAgICAgICAgICAgICBzc2xfY2FwYXRoID8gc3NsX2NhcGF0aCA6ICJub25lIik7CisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpID8KKyAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgOiAibm9uZSIsCisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpID8KKyAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgOiAibm9uZSIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQogICAgICAgaW5mb2YoZGF0YSwKLSAgICAgICAgICAgICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgotICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOworICAgICAgICAgICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgorICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHNldCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIik7CkBAIC0xNjQsOCArMTc2LDMyIEBACiAgICAgaW5mb2YoZGF0YSwKICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iCiAgICAgICAgICAgIiAgQ0FwYXRoOiAlc1xuIiwKLSAgICAgICAgICBzc2xfY2FmaWxlID8gc3NsX2NhZmlsZSA6ICJub25lIiwKLSAgICAgICAgICBzc2xfY2FwYXRoID8gc3NsX2NhcGF0aCA6ICJub25lIik7CisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSk/CisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSk6ICJub25lIiwKKyAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKT8KKyAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKTogIm5vbmUiKTsKKyAgfQorCisgIGlmKFNTTF9TRVRfT1BUSU9OKGNlcnQpICYmIFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKKyAgICBpbnQgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKFNTTF9TRVRfT1BUSU9OKGNlcnRfdHlwZSkpOworCisgICAgaWYoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShCQUNLRU5ELT5jdHgsIFNTTF9TRVRfT1BUSU9OKGNlcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byB1c2UgY2xpZW50IGNlcnRpZmljYXRlIChubyBrZXkgb3Igd3JvbmcgcGFzcyIKKyAgICAgICAgICAgICIgcGhyYXNlPykiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisKKyAgICBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoU1NMX1NFVF9PUFRJT04oa2V5X3R5cGUpKTsKKyAgICBpZihTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHNldCBwcml2YXRlIGtleSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgICBpbmZvZihkYXRhLAorICAgICAgICAgICJjbGllbnQgY2VydDogJXNcbiIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKGNsaWVudGNlcnQpPworICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhjbGllbnRjZXJ0KTogIm5vbmUiKTsKICAgfQogCiAgIGNpcGhlcnMgPSBTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpOwpAQCAtMjY1LDcgKzMwMSw2IEBACiAKICAgcmV0ID0gU1NMX2Nvbm5lY3QoQkFDS0VORC0+aGFuZGxlKTsKICAgaWYocmV0ICE9IFNTTF9TVUNDRVNTKSB7Ci0gICAgY2hhciBlcnJvcl9idWZmZXJbTUVTQUxJTktfTUFYX0VSUk9SX1NaXTsKICAgICBpbnQgZGV0YWlsID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIHJldCk7CiAKICAgICBpZihTU0xfRVJST1JfV0FOVF9DT05ORUNUID09IGRldGFpbCB8fCBTU0xfRVJST1JfV0FOVF9SRUFEID09IGRldGFpbCkgewpAQCAtMjczLDYgKzMwOCw3IEBACiAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgY2hhciBlcnJvcl9idWZmZXJbTUVTQUxJTktfTUFYX0VSUk9SX1NaXTsKICAgICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgICAiU1NMX2Nvbm5lY3QgZmFpbGVkIHdpdGggZXJyb3IgJWQ6ICVzIiwKICAgICAgICAgICAgIGRldGFpbCwKQEAgLTQ1OCw3ICs0OTQsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwotICB0aW1lX3QgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC01MDcsNyArNTQzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENVUkxfU09DS0VUX0JBRDsKIAogICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKAotICAgICAgICByZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CisgICAgICAgIHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAorICAgICAgICBub25ibG9ja2luZyA/IDAgOiAodGltZV90KXRpbWVvdXRfbXMpOwogICAgICAgaWYod2hhdCA8IDApIHsKICAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL25zcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9uc3MuYwppbmRleCA0OTFkZWYxLi5lZjUxYjBkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL25zcy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbnNzLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogICBwdHItPnR5cGUgPSAoX3R5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBwdHItPnBWYWx1ZSA9IChfdmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBwdHItPnVsVmFsdWVMZW4gPSAoX2xlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBXSElMRV9GQUxTRQorfSB3aGlsZSgwKQogCiAjZGVmaW5lIENFUlRfTmV3VGVtcENlcnRpZmljYXRlIF9fQ0VSVF9OZXdUZW1wQ2VydGlmaWNhdGUKIApAQCAtMjE2LDExICsyMTYsMTkgQEAKICB7ImRoZV9yc2FfY2hhY2hhMjBfcG9seTEzMDVfc2hhXzI1NiIsCiAgICAgIFRMU19ESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2fSwKICNlbmRpZgorI2lmZGVmIFRMU19BRVNfMjU2X0dDTV9TSEEzODQKKyB7ImFlc18xMjhfZ2NtX3NoYV8yNTYiLCAgICAgICAgICAgICAgVExTX0FFU18xMjhfR0NNX1NIQTI1Nn0sCisgeyJhZXNfMjU2X2djbV9zaGFfMzg0IiwgICAgICAgICAgICAgIFRMU19BRVNfMjU2X0dDTV9TSEEzODR9LAorIHsiY2hhY2hhMjBfcG9seTEzMDVfc2hhXzI1NiIsICAgICAgICBUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2fSwKKyNlbmRpZgogfTsKIAotI2lmZGVmIFdJTjMyCisjaWYgZGVmaW5lZChXSU4zMikKIHN0YXRpYyBjb25zdCBjaGFyICpwZW1fbGlicmFyeSA9ICJuc3NwZW0uZGxsIjsKIHN0YXRpYyBjb25zdCBjaGFyICp0cnVzdF9saWJyYXJ5ID0gIm5zc2NrYmkuZGxsIjsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGNvbnN0IGNoYXIgKnBlbV9saWJyYXJ5ID0gImxpYm5zc3BlbS5keWxpYiI7CitzdGF0aWMgY29uc3QgY2hhciAqdHJ1c3RfbGlicmFyeSA9ICJsaWJuc3Nja2JpLmR5bGliIjsKICNlbHNlCiBzdGF0aWMgY29uc3QgY2hhciAqcGVtX2xpYnJhcnkgPSAibGlibnNzcGVtLnNvIjsKIHN0YXRpYyBjb25zdCBjaGFyICp0cnVzdF9saWJyYXJ5ID0gImxpYm5zc2NrYmkuc28iOwpAQCAtNTczLDE5ICs1ODEsMjEgQEAKICAgLyogYWNxdWlyZSBsb2NrIGJlZm9yZSBjYWxsIG9mIENFUlRfQ2FjaGVDUkwoKSBhbmQgYWNjZXNzaW5nIG5zc19jcmxfbGlzdCAqLwogICBQUl9Mb2NrKG5zc19jcmxsb2NrKTsKIAotICAvKiBzdG9yZSB0aGUgQ1JMIGl0ZW0gc28gdGhhdCB3ZSBjYW4gZnJlZSBpdCBpbiBDdXJsX25zc19jbGVhbnVwKCkgKi8KLSAgaWYoaW5zZXJ0X3dyYXBwZWRfcHRyKCZuc3NfY3JsX2xpc3QsIGNybF9kZXIpICE9IENVUkxFX09LKSB7Ci0gICAgU0VDSVRFTV9GcmVlSXRlbShjcmxfZGVyLCBQUl9UUlVFKTsKLSAgICBQUl9VbmxvY2sobnNzX2NybGxvY2spOwotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0KICAgaWYoU0VDU3VjY2VzcyAhPSBDRVJUX0NhY2hlQ1JMKGRiLCBjcmxfZGVyKSkgewogICAgIC8qIHVuYWJsZSB0byBjYWNoZSBDUkwgKi8KKyAgICBTRUNJVEVNX0ZyZWVJdGVtKGNybF9kZXIsIFBSX1RSVUUpOwogICAgIFBSX1VubG9jayhuc3NfY3JsbG9jayk7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKICAgfQogCisgIC8qIHN0b3JlIHRoZSBDUkwgaXRlbSBzbyB0aGF0IHdlIGNhbiBmcmVlIGl0IGluIEN1cmxfbnNzX2NsZWFudXAoKSAqLworICBpZihpbnNlcnRfd3JhcHBlZF9wdHIoJm5zc19jcmxfbGlzdCwgY3JsX2RlcikgIT0gQ1VSTEVfT0spIHsKKyAgICBpZihTRUNTdWNjZXNzID09IENFUlRfVW5jYWNoZUNSTChkYiwgY3JsX2RlcikpCisgICAgICBTRUNJVEVNX0ZyZWVJdGVtKGNybF9kZXIsIFBSX1RSVUUpOworICAgIFBSX1VubG9jayhuc3NfY3JsbG9jayk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKwogICAvKiB3ZSBuZWVkIHRvIGNsZWFyIHNlc3Npb24gY2FjaGUsIHNvIHRoYXQgdGhlIENSTCBjb3VsZCB0YWtlIGVmZmVjdCAqLwogICBTU0xfQ2xlYXJTZXNzaW9uQ2FjaGUoKTsKICAgUFJfVW5sb2NrKG5zc19jcmxsb2NrKTsKQEAgLTY4MSw3ICs2OTEsMTAgQEAKICAgdG1wID0gU0VDTU9EX1dhaXRGb3JBbnlUb2tlbkV2ZW50KHBlbV9tb2R1bGUsIDAsIDApOwogICBpZih0bXApCiAgICAgUEsxMV9GcmVlU2xvdCh0bXApOwotICBQSzExX0lzUHJlc2VudChzbG90KTsKKyAgaWYoIVBLMTFfSXNQcmVzZW50KHNsb3QpKSB7CisgICAgUEsxMV9GcmVlU2xvdChzbG90KTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICB9CiAKICAgc3RhdHVzID0gUEsxMV9BdXRoZW50aWNhdGUoc2xvdCwgUFJfVFJVRSwgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOwogICBQSzExX0ZyZWVTbG90KHNsb3QpOwpAQCAtMTQxNiw3ICsxNDI5LDcgQEAKIHsKICAgLyogY3VybF9nbG9iYWxfaW5pdCgpIGlzIG5vdCB0aHJlYWQtc2FmZSBzbyB0aGlzIHRlc3QgaXMgb2sgKi8KICAgaWYobnNzX2luaXRsb2NrID09IE5VTEwpIHsKLSAgICBQUl9Jbml0KFBSX1VTRVJfVEhSRUFELCBQUl9QUklPUklUWV9OT1JNQUwsIDI1Nik7CisgICAgUFJfSW5pdChQUl9VU0VSX1RIUkVBRCwgUFJfUFJJT1JJVFlfTk9STUFMLCAwKTsKICAgICBuc3NfaW5pdGxvY2sgPSBQUl9OZXdMb2NrKCk7CiAgICAgbnNzX2NybGxvY2sgPSBQUl9OZXdMb2NrKCk7CiAgICAgbnNzX2ZpbmRzbG90X2xvY2sgPSBQUl9OZXdMb2NrKCk7CkBAIC0xNzIxLDIwICsxNzM0LDE2IEBACiAgIENVUkxjb2RlIHJlc3VsdDsKICAgY29uc3QgbG9uZyBtaW4gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7CiAgIGNvbnN0IGxvbmcgbWF4ID0gU1NMX0NPTk5fQ09ORklHKHZlcnNpb25fbWF4KTsKLQotICAvKiBtYXAgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgdG8gTlNTIGRlZmF1bHQgKi8KLSAgaWYobWluID09IENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUIHx8IG1heCA9PSBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQpIHsKLSAgICAvKiBtYXAgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgdG8gTlNTIGRlZmF1bHQgKi8KLSAgICBpZihTU0xfVmVyc2lvblJhbmdlR2V0RGVmYXVsdChzc2xfdmFyaWFudF9zdHJlYW0sIHNzbHZlcikgIT0gU0VDU3VjY2VzcykKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAvKiAuLi4gYnV0IG1ha2Ugc3VyZSB3ZSB1c2UgYXQgbGVhc3QgVExTdjEuMCBhY2NvcmRpbmcgdG8gbGliY3VybCBBUEkgKi8KLSAgICBpZihzc2x2ZXItPm1pbiA8IFNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMCkKLSAgICAgIHNzbHZlci0+bWluID0gU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8wOwotICB9CisgIFNTTFZlcnNpb25SYW5nZSB2cmFuZ2U7CiAKICAgc3dpdGNoKG1pbikgewogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgICAvKiBCdW1wIG91ciBtaW5pbXVtIFRMUyB2ZXJzaW9uIGlmIE5TUyBoYXMgc3RyaWN0ZXIgcmVxdWlyZW1lbnRzLiAqLworICAgIGlmKFNTTF9WZXJzaW9uUmFuZ2VHZXREZWZhdWx0KHNzbF92YXJpYW50X3N0cmVhbSwgJnZyYW5nZSkgIT0gU0VDU3VjY2VzcykKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICBpZihzc2x2ZXItPm1pbiA8IHZyYW5nZS5taW4pCisgICAgICBzc2x2ZXItPm1pbiA9IHZyYW5nZS5taW47CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAgcmVzdWx0ID0gbnNzX3NzbHZlcl9mcm9tX2N1cmwoJnNzbHZlci0+bWluLCBtaW4pOwpAQCAtMjExOCw3ICsyMTI3LDcgQEAKIAogCiAgIC8qIGNoZWNrIHRpbWVvdXQgc2l0dWF0aW9uICovCi0gIGNvbnN0IHRpbWVfdCB0aW1lX2xlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworICBjb25zdCB0aW1lZGlmZl90IHRpbWVfbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CiAgIGlmKHRpbWVfbGVmdCA8IDApIHsKICAgICBmYWlsZihkYXRhLCAidGltZWQgb3V0IGJlZm9yZSBTU0wgaGFuZHNoYWtlIik7CiAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9vcGVuc3NsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYwppbmRleCA4NWU5YmU2Li4xZDA5Y2FkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsMTEgKzI1LDYgQEAKICAqIGJ1dCB2dGxzLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgogICovCiAKLS8qCi0gKiBUaGUgb3JpZ2luYWwgU1NMZWF5LXVzaW5nIGNvZGUgZm9yIGN1cmwgd2FzIHdyaXR0ZW4gYnkgTGluYXMgVmVwc3RhcyBhbmQKLSAqIFNhbXBvIEtlbGxvbWFraSAxOTk4LgotICovCi0KICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKICNpZmRlZiBVU0VfT1BFTlNTTApAQCAtNDksNiArNDQsNyBAQAogI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJob3N0Y2hlY2suaCIKICNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CkBAIC03NSw3ICs3MSw3IEBACiAjZW5kaWYKIAogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDcwMGZMKSAmJiAvKiAwLjkuNyBvciBsYXRlciAqLyAgICAgXAotICAhZGVmaW5lZChPUEVOU1NMX05PX0VOR0lORSkKKyAgIWRlZmluZWQoT1BFTlNTTF9OT19FTkdJTkUpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVUlfQ09OU09MRSkKICNkZWZpbmUgVVNFX09QRU5TU0xfRU5HSU5FCiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNlbmRpZgpAQCAtMTQ2LDE2ICsxNDIsMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBMSUJSRVNTTF9WRVJTSU9OX05VTUJFUgotI2RlZmluZSBPcGVuU1NMX3ZlcnNpb25fbnVtKCkgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIKLSNlbmRpZgotCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMjAwZkwpICYmIC8qIDEuMC4yIG9yIGxhdGVyICovIFwKICAgICAhKGRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpICYmIFwKICAgICAgIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgyMDcwMDAwMEwpCiAjZGVmaW5lIEhBVkVfWDUwOV9HRVQwX1NJR05BVFVSRSAxCiAjZW5kaWYKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMGZMKSAvKiAxLjAuMiBvciBsYXRlciAqLworI2RlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQorI2VuZGlmCisKICNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMDNMICYmIFwKICAgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8PSAweDEwMDAyRkZGTCAmJiBcCiAgICFkZWZpbmVkKE9QRU5TU0xfTk9fQ09NUCkKQEAgLTM5Miw3ICszODgsMjAgQEAKICAqLwogc3RhdGljIGNoYXIgKm9zc2xfc3RyZXJyb3IodW5zaWduZWQgbG9uZyBlcnJvciwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKKyAgaWYoc2l6ZSkKKyAgICAqYnVmID0gJ1wwJzsKKworI2lmZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCisgIEVSUl9lcnJvcl9zdHJpbmdfbigodWludDMyX3QpZXJyb3IsIGJ1Ziwgc2l6ZSk7CisjZWxzZQogICBFUlJfZXJyb3Jfc3RyaW5nX24oZXJyb3IsIGJ1Ziwgc2l6ZSk7CisjZW5kaWYKKworICBpZihzaXplID4gMSAmJiAhKmJ1ZikgeworICAgIHN0cm5jcHkoYnVmLCAoZXJyb3IgPyAiVW5rbm93biBlcnJvciIgOiAiTm8gZXJyb3IiKSwgc2l6ZSk7CisgICAgYnVmW3NpemUgLSAxXSA9ICdcMCc7CisgIH0KKwogICByZXR1cm4gYnVmOwogfQogCkBAIC0xMDIyLDE0ICsxMDMxLDggQEAKICAgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKCk7CiAjZW5kaWYKIAotICAvKiBPUEVOU1NMX2NvbmZpZyhOVUxMKTsgaXMgInN0cm9uZ2x5IHJlY29tbWVuZGVkIiB0byB1c2UgYnV0IHVuZm9ydHVuYXRlbHkKLSAgICAgdGhhdCBmdW5jdGlvbiBtYWtlcyBhbiBleGl0KCkgY2FsbCBvbiB3cm9uZ2x5IGZvcm1hdHRlZCBjb25maWcgZmlsZXMKLSAgICAgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byB1c2UgaW4gc29tZSBzaXR1YXRpb25zLiBPUEVOU1NMX2NvbmZpZygpIGl0c2VsZgotICAgICBjYWxscyBDT05GX21vZHVsZXNfbG9hZF9maWxlKCkgYW5kIHdlIHVzZSB0aGF0IGluc3RlYWQgYW5kIHdlIGlnbm9yZQotICAgICBpdHMgcmV0dXJuIGNvZGUhICovCi0KLSAgLyogQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OIGludHJvZHVjZWQgc29tZSB0aW1lIGJldHdlZW4gMC45LjhiIGFuZAotICAgICAwLjkuOGUgKi8KKy8qIENPTkZfTUZMQUdTX0RFRkFVTFRfU0VDVElPTiB3YXMgaW50cm9kdWNlZCBzb21lIHRpbWUgYmV0d2VlbiAwLjkuOGIgYW5kCisgICAwLjkuOGUgKi8KICNpZm5kZWYgQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OCiAjZGVmaW5lIENPTkZfTUZMQUdTX0RFRkFVTFRfU0VDVElPTiAweDAKICNlbmRpZgpAQCAtMTUzNiw4ICsxNTM5LDEzIEBACiAgIGFsdG5hbWVzID0gWDUwOV9nZXRfZXh0X2QyaShzZXJ2ZXJfY2VydCwgTklEX3N1YmplY3RfYWx0X25hbWUsIE5VTEwsIE5VTEwpOwogCiAgIGlmKGFsdG5hbWVzKSB7CisjaWZkZWYgT1BFTlNTTF9JU19CT1JJTkdTU0wKKyAgICBzaXplX3QgbnVtYWx0czsKKyAgICBzaXplX3QgaTsKKyNlbHNlCiAgICAgaW50IG51bWFsdHM7CiAgICAgaW50IGk7CisjZW5kaWYKICAgICBib29sIGRuc21hdGNoZWQgPSBGQUxTRTsKICAgICBib29sIGlwbWF0Y2hlZCA9IEZBTFNFOwogCkBAIC0xNTY3LDExICsxNTc1LDEwIEBACiAgICAgICAgICAgICAgYXNzdW1lZCB0aGF0IHRoZSBkYXRhIHJldHVybmVkIGJ5IEFTTjFfU1RSSU5HX2RhdGEoKSBpcyBudWxsCiAgICAgICAgICAgICAgdGVybWluYXRlZCBvciBkb2VzIG5vdCBjb250YWluIGVtYmVkZGVkIG51bGxzLiIgQnV0IGFsc28gdGhhdAogICAgICAgICAgICAgICJUaGUgYWN0dWFsIGZvcm1hdCBvZiB0aGUgZGF0YSB3aWxsIGRlcGVuZCBvbiB0aGUgYWN0dWFsIHN0cmluZwotICAgICAgICAgICAgIHR5cGUgaXRzZWxmOiBmb3IgZXhhbXBsZSBmb3IgYW5kIElBNVN0cmluZyB0aGUgZGF0YSB3aWxsIGJlIEFTQ0lJIgorICAgICAgICAgICAgIHR5cGUgaXRzZWxmOiBmb3IgZXhhbXBsZSBmb3IgYW4gSUE1U3RyaW5nIHRoZSBkYXRhIHdpbGwgYmUgQVNDSUkiCiAKLSAgICAgICAgICAgICBHaXNsZSByZXNlYXJjaGVkIHRoZSBPcGVuU1NMIHNvdXJjZXM6Ci0gICAgICAgICAgICAgIkkgY2hlY2tlZCB0aGUgMC45LjYgYW5kIDAuOS44IHNvdXJjZXMgYmVmb3JlIG15IHBhdGNoIGFuZAotICAgICAgICAgICAgIGl0IGFsd2F5cyAwLXRlcm1pbmF0ZXMgYW4gSUE1U3RyaW5nLiIKKyAgICAgICAgICAgICBJdCBoYXMgYmVlbiBob3dldmVyIHZlcmlmaWVkIHRoYXQgaW4gMC45LjYgYW5kIDAuOS43LCBJQTVTdHJpbmcKKyAgICAgICAgICAgICBpcyBhbHdheXMgemVyby10ZXJtaW5hdGVkLgogICAgICAgICAgICovCiAgICAgICAgICAgaWYoKGFsdGxlbiA9PSBzdHJsZW4oYWx0cHRyKSkgJiYKICAgICAgICAgICAgICAvKiBpZiB0aGlzIGlzbid0IHRydWUsIHRoZXJlIHdhcyBhbiBlbWJlZGRlZCB6ZXJvIGluIHRoZSBuYW1lCkBAIC0xNjM1LDggKzE2NDIsNyBAQAogICAgICAgLyogSW4gT3BlblNTTCAwLjkuN2QgYW5kIGVhcmxpZXIsIEFTTjFfU1RSSU5HX3RvX1VURjggZmFpbHMgaWYgdGhlIGlucHV0CiAgICAgICAgICBpcyBhbHJlYWR5IFVURi04IGVuY29kZWQuIFdlIGNoZWNrIGZvciB0aGlzIGNhc2UgYW5kIGNvcHkgdGhlIHJhdwogICAgICAgICAgc3RyaW5nIG1hbnVhbGx5IHRvIGF2b2lkIHRoZSBwcm9ibGVtLiBUaGlzIGNvZGUgY2FuIGJlIG1hZGUKLSAgICAgICAgIGNvbmRpdGlvbmFsIGluIHRoZSBmdXR1cmUgd2hlbiBPcGVuU1NMIGhhcyBiZWVuIGZpeGVkLiBXb3JrLWFyb3VuZAotICAgICAgICAgYnJvdWdodCBieSBBbGV4aXMgUy4gTC4gQ2FydmFsaG8uICovCisgICAgICAgICBjb25kaXRpb25hbCBpbiB0aGUgZnV0dXJlIHdoZW4gT3BlblNTTCBoYXMgYmVlbiBmaXhlZC4gKi8KICAgICAgIGlmKHRtcCkgewogICAgICAgICBpZihBU04xX1NUUklOR190eXBlKHRtcCkgPT0gVl9BU04xX1VURjhTVFJJTkcpIHsKICAgICAgICAgICBqID0gQVNOMV9TVFJJTkdfbGVuZ3RoKHRtcCk7CkBAIC0yMTU2LDkgKzIxNjIsMTAwIEBACiB9CiAjZW5kaWYKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAvKiAxLjEuMCAqLwogc3RhdGljIENVUkxjb2RlCi1zZXRfc3NsX3ZlcnNpb25fbWluX21heChsb25nICpjdHhfb3B0aW9ucywgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3NldF9zc2xfdmVyc2lvbl9taW5fbWF4KFNTTF9DVFggKmN0eCwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICAvKiBmaXJzdCwgVExTIG1pbiB2ZXJzaW9uLi4uICovCisgIGxvbmcgY3VybF9zc2xfdmVyc2lvbl9taW4gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7CisgIGxvbmcgY3VybF9zc2xfdmVyc2lvbl9tYXg7CisKKyAgLyogY29udmVydCBjVVJMIG1pbiBTU0wgdmVyc2lvbiBvcHRpb24gdG8gT3BlblNTTCBjb25zdGFudCAqLworI2lmIGRlZmluZWQoT1BFTlNTTF9JU19CT1JJTkdTU0wpIHx8IGRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisgIHVpbnQxNl90IG9zc2xfc3NsX3ZlcnNpb25fbWluID0gMDsKKyAgdWludDE2X3Qgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSAwOworI2Vsc2UKKyAgbG9uZyBvc3NsX3NzbF92ZXJzaW9uX21pbiA9IDA7CisgIGxvbmcgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSAwOworI2VuZGlmCisgIHN3aXRjaChjdXJsX3NzbF92ZXJzaW9uX21pbikgeworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOiAvKiBUTFMgMS54ICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV9WRVJTSU9OOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV8xX1ZFUlNJT047CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9taW4gPSBUTFMxXzJfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworI2lmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV8zX1ZFUlNJT047CisgICAgICBicmVhazsKKyNlbmRpZgorICB9CisKKyAgLyogQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgbWVhbnMgdGhhdCBubyBvcHRpb24gd2FzIHNlbGVjdGVkLgorICAgICBXZSBkb24ndCB3YW50IHRvIHBhc3MgMCB0byBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbiBhcworICAgICBpdCB3b3VsZCBlbmFibGUgYWxsIHZlcnNpb25zIGRvd24gdG8gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgYnkKKyAgICAgdGhlIGxpYnJhcnkuCisgICAgIFNvIHdlIHNraXAgdGhpcywgYW5kIHN0YXkgd2l0aCB0aGUgT1MgZGVmYXVsdAorICAqLworICBpZihjdXJsX3NzbF92ZXJzaW9uX21pbiAhPSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCkgeworICAgIGlmKCFTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihjdHgsIG9zc2xfc3NsX3ZlcnNpb25fbWluKSkgeworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorCisgIC8qIC4uLiB0aGVuLCBUTFMgbWF4IHZlcnNpb24gKi8KKyAgY3VybF9zc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOworCisgIC8qIGNvbnZlcnQgY1VSTCBtYXggU1NMIHZlcnNpb24gb3B0aW9uIHRvIE9wZW5TU0wgY29uc3RhbnQgKi8KKyAgc3dpdGNoKGN1cmxfc3NsX3ZlcnNpb25fbWF4KSB7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzA6CisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IFRMUzFfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSBUTFMxXzFfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSBUTFMxXzJfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworI2lmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzM6CisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IFRMUzFfM19WRVJTSU9OOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORTogIC8qIG5vbmUgc2VsZWN0ZWQgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDogIC8qIG1heCBzZWxlY3RlZCAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbiBzdGF0ZXMgdGhhdDoKKyAgICAgICAgc2V0dGluZyB0aGUgbWF4aW11bSB0byAwIHdpbGwgZW5hYmxlCisgICAgICAgIHByb3RvY29sIHZlcnNpb25zIHVwIHRvIHRoZSBoaWdoZXN0IHZlcnNpb24KKyAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5ICovCisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IDA7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmKCFTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihjdHgsIG9zc2xfc3NsX3ZlcnNpb25fbWF4KSkgeworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9JU19CT1JJTkdTU0wKK3R5cGVkZWYgdWludDMyX3QgY3R4X29wdGlvbl90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBjdHhfb3B0aW9uX3Q7CisjZW5kaWYKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwpIC8qIDEuMS4wICovCitzdGF0aWMgQ1VSTGNvZGUKK3NldF9zc2xfdmVyc2lvbl9taW5fbWF4X2xlZ2FjeShjdHhfb3B0aW9uX3QgKmN0eF9vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwRkwpIHx8ICFkZWZpbmVkKFRMUzFfM19WRVJTSU9OKQogICAvKiBjb252b2x1dGVkICNpZiBjb25kaXRpb24ganVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyBvbiB1bnVzZWQKQEAgLTIyMzAsNiArMjMyNyw3IEBACiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQorI2VuZGlmCiAKIC8qIFRoZSAibmV3IHNlc3Npb24iIGNhbGxiYWNrIG11c3QgcmV0dXJuIHplcm8gaWYgdGhlIHNlc3Npb24gY2FuIGJlIHJlbW92ZWQKICAqIG9yIG5vbi16ZXJvIGlmIHRoZSBzZXNzaW9uIGhhcyBiZWVuIHB1dCBpbnRvIHRoZSBzZXNzaW9uIGNhY2hlLgpAQCAtMjI5Niw3ICsyMzk0LDggQEAKICAgWDUwOV9MT09LVVAgKmxvb2t1cCA9IE5VTEw7CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgbG9uZyBjdHhfb3B0aW9ucyA9IDA7CisgIGN0eF9vcHRpb25fdCBjdHhfb3B0aW9ucyA9IDA7CisKICNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCiAgIGJvb2wgc25pOwogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKQEAgLTI0NTksNDggKzI1NTgsNjYgQEAKICNlbmRpZgogCiAgIHN3aXRjaChzc2xfdmVyc2lvbikgewotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7Ci0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOwotI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMTsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKLSNpZmRlZiBUTFMxXzNfVkVSU0lPTgotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworICAgIC8qICItLXNzbHYyIiBvcHRpb24gbWVhbnMgU1NMdjIgb25seSwgZGlzYWJsZSBhbGwgb3RoZXJzICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCAvKiAxLjEuMCAqLworICAgICAgU1NMX0NUWF9zZXRfbWluX3Byb3RvX3ZlcnNpb24oQkFDS0VORC0+Y3R4LCBTU0wyX1ZFUlNJT04pOworICAgICAgU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oQkFDS0VORC0+Y3R4LCBTU0wyX1ZFUlNJT04pOworI2Vsc2UKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MTsKKyMgIGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOworICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzI7CisjICAgIGlmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMzsKKyMgICAgZW5kaWYKKyMgIGVuZGlmCiAjZW5kaWYKLSNlbmRpZgotICAgIGJyZWFrOworICAgICAgYnJlYWs7CiAKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0gICAgLyogYXNraW5nIGZvciBhbnkgVExTIHZlcnNpb24gYXMgdGhlIG1pbmltdW0sIG1lYW5zIG5vIFNTTCB2ZXJzaW9ucwotICAgICAgIGFsbG93ZWQgKi8KLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7Ci0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOwotICAgIHJlc3VsdCA9IHNldF9zc2xfdmVyc2lvbl9taW5fbWF4KCZjdHhfb3B0aW9ucywgY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCi0gICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBicmVhazsKLQotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjM7Ci0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOwotI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMTsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKLSNpZmRlZiBUTFMxXzNfVkVSU0lPTgotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworICAgIC8qICItLXNzbHYzIiBvcHRpb24gbWVhbnMgU1NMdjMgb25seSwgZGlzYWJsZSBhbGwgb3RoZXJzICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCAvKiAxLjEuMCAqLworICAgICAgU1NMX0NUWF9zZXRfbWluX3Byb3RvX3ZlcnNpb24oQkFDS0VORC0+Y3R4LCBTU0wzX1ZFUlNJT04pOworICAgICAgU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oQkFDS0VORC0+Y3R4LCBTU0wzX1ZFUlNJT04pOworI2Vsc2UKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MTsKKyMgIGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOworICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzI7CisjICAgIGlmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMzsKKyMgICAgZW5kaWYKKyMgIGVuZGlmCiAjZW5kaWYKLSNlbmRpZgotICAgIGJyZWFrOworICAgICAgYnJlYWs7CiAKLSAgZGVmYXVsdDoKLSAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAvKiAiLS10bHN2PHgueT4iIG9wdGlvbnMgbWVhbiBUTFMgPj0gdmVyc2lvbiA8eC55PiAqLworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6IC8qIFRMUyA+PSB2ZXJzaW9uIDEuMCAqLworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6IC8qIFRMUyA+PSB2ZXJzaW9uIDEuMCAqLworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6IC8qIFRMUyA+PSB2ZXJzaW9uIDEuMSAqLworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6IC8qIFRMUyA+PSB2ZXJzaW9uIDEuMiAqLworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6IC8qIFRMUyA+PSB2ZXJzaW9uIDEuMyAqLworICAgICAgLyogYXNraW5nIGZvciBhbnkgVExTIHZlcnNpb24gYXMgdGhlIG1pbmltdW0sIG1lYW5zIG5vIFNTTCB2ZXJzaW9ucworICAgICAgICBhbGxvd2VkICovCisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7CisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjM7CisKKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCkgLyogMS4xLjAgKi8KKyAgICAgIHJlc3VsdCA9IHNldF9zc2xfdmVyc2lvbl9taW5fbWF4KEJBQ0tFTkQtPmN0eCwgY29ubik7CisjZWxzZQorICAgICAgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXhfbGVnYWN5KCZjdHhfb3B0aW9ucywgY29ubiwgc29ja2luZGV4KTsKKyNlbmRpZgorICAgICAgaWYocmVzdWx0ICE9IENVUkxFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQogCiAgIFNTTF9DVFhfc2V0X29wdGlvbnMoQkFDS0VORC0+Y3R4LCBjdHhfb3B0aW9ucyk7CkBAIC0yNjU1LDE5ICsyNzcyLDI5IEBACiAgICAgaW5mb2YoZGF0YSwgIiAgQ1JMZmlsZTogJXNcbiIsIHNzbF9jcmxmaWxlKTsKICAgfQogCi0gIC8qIFRyeSBidWlsZGluZyBhIGNoYWluIHVzaW5nIGlzc3VlcnMgaW4gdGhlIHRydXN0ZWQgc3RvcmUgZmlyc3QgdG8gYXZvaWQKLSAgcHJvYmxlbXMgd2l0aCBzZXJ2ZXItc2VudCBsZWdhY3kgaW50ZXJtZWRpYXRlcy4KLSAgTmV3ZXIgdmVyc2lvbnMgb2YgT3BlblNTTCBkbyBhbHRlcm5hdGUgY2hhaW4gY2hlY2tpbmcgYnkgZGVmYXVsdCB3aGljaAotICBnaXZlcyB1cyB0aGUgc2FtZSBmaXggd2l0aG91dCBhcyBtdWNoIG9mIGEgcGVyZm9ybWFuY2UgaGl0IChzbGlnaHQpLCBzbyB3ZQotICBwcmVmZXIgdGhhdCBpZiBhdmFpbGFibGUuCi0gIGh0dHBzOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0zNjIxJnVzZXI9Z3Vlc3QmcGFzcz1ndWVzdAotICAqLwotI2lmIGRlZmluZWQoWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVCkgJiYgIWRlZmluZWQoWDUwOV9WX0ZMQUdfTk9fQUxUX0NIQUlOUykKICAgaWYodmVyaWZ5cGVlcikgeworICAgIC8qIFRyeSBidWlsZGluZyBhIGNoYWluIHVzaW5nIGlzc3VlcnMgaW4gdGhlIHRydXN0ZWQgc3RvcmUgZmlyc3QgdG8gYXZvaWQKKyAgICAgICBwcm9ibGVtcyB3aXRoIHNlcnZlci1zZW50IGxlZ2FjeSBpbnRlcm1lZGlhdGVzLiAgTmV3ZXIgdmVyc2lvbnMgb2YKKyAgICAgICBPcGVuU1NMIGRvIGFsdGVybmF0ZSBjaGFpbiBjaGVja2luZyBieSBkZWZhdWx0IHdoaWNoIGdpdmVzIHVzIHRoZSBzYW1lCisgICAgICAgZml4IHdpdGhvdXQgYXMgbXVjaCBvZiBhIHBlcmZvcm1hbmNlIGhpdCAoc2xpZ2h0KSwgc28gd2UgcHJlZmVyIHRoYXQgaWYKKyAgICAgICBhdmFpbGFibGUuCisgICAgICAgaHR0cHM6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTM2MjEmdXNlcj1ndWVzdCZwYXNzPWd1ZXN0CisgICAgKi8KKyNpZiBkZWZpbmVkKFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpICYmICFkZWZpbmVkKFg1MDlfVl9GTEFHX05PX0FMVF9DSEFJTlMpCiAgICAgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShCQUNLRU5ELT5jdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpOwotICB9CiAjZW5kaWYKKyNpZmRlZiBYNTA5X1ZfRkxBR19QQVJUSUFMX0NIQUlOCisgICAgaWYoIVNTTF9TRVRfT1BUSU9OKG5vX3BhcnRpYWxjaGFpbikpIHsKKyAgICAgIC8qIEhhdmUgaW50ZXJtZWRpYXRlIGNlcnRpZmljYXRlcyBpbiB0aGUgdHJ1c3Qgc3RvcmUgYmUgdHJlYXRlZCBhcworICAgICAgICAgdHJ1c3QtYW5jaG9ycywgaW4gdGhlIHNhbWUgd2F5IGFzIHNlbGYtc2lnbmVkIHJvb3QgQ0EgY2VydGlmaWNhdGVzCisgICAgICAgICBhcmUuIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHZlcmlmeSBzZXJ2ZXJzIHVzaW5nIHRoZSBpbnRlcm1lZGlhdGUgY2VydAorICAgICAgICAgb25seSwgaW5zdGVhZCBvZiBuZWVkaW5nIHRoZSB3aG9sZSBjaGFpbi4gKi8KKyAgICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1BBUlRJQUxfQ0hBSU4pOworICAgIH0KKyNlbmRpZgorICB9CiAKICAgLyogU1NMIGFsd2F5cyB0cmllcyB0byB2ZXJpZnkgdGhlIHBlZXIsIHRoaXMgb25seSBzYXlzIHdoZXRoZXIgaXQgc2hvdWxkCiAgICAqIGZhaWwgdG8gY29ubmVjdCBpZiB0aGUgdmVyaWZpY2F0aW9uIGZhaWxzLCBvciBpZiBpdCBzaG91bGQgY29udGludWUKQEAgLTI2OTMsOCArMjgyMCwxMCBAQAogCiAgIC8qIGdpdmUgYXBwbGljYXRpb24gYSBjaGFuY2UgdG8gaW50ZXJmZXJlIHdpdGggU1NMIHNldCB1cC4gKi8KICAgaWYoZGF0YS0+c2V0LnNzbC5mc3NsY3R4KSB7CisgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CiAgICAgcmVzdWx0ID0gKCpkYXRhLT5zZXQuc3NsLmZzc2xjdHgpKGRhdGEsIEJBQ0tFTkQtPmN0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5mc3NsY3R4cCk7CisgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNpZ25hbGVkIGJ5IHNzbCBjdHggY2FsbGJhY2siKTsKICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yODc1LDggKzMwMDQsMTMgQEAKICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPwogICAgICAgICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lOwogICAgICAgICBjb25zdCBsb25nIGludCBwb3J0ID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5wb3J0IDogY29ubi0+cmVtb3RlX3BvcnQ7CisgICAgICAgIGNoYXIgZXh0cmFtc2dbODBdPSIiOworICAgICAgICBpbnQgc29ja2VyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgaWYoc29ja2VyciAmJiBkZXRhaWwgPT0gU1NMX0VSUk9SX1NZU0NBTEwpCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihzb2NrZXJyLCBleHRyYW1zZywgc2l6ZW9mKGV4dHJhbXNnKSk7CiAgICAgICAgIGZhaWxmKGRhdGEsIE9TU0xfUEFDS0FHRSAiIFNTTF9jb25uZWN0OiAlcyBpbiBjb25uZWN0aW9uIHRvICVzOiVsZCAiLAotICAgICAgICAgICAgICBTU0xfRVJST1JfdG9fc3RyKGRldGFpbCksIGhvc3RuYW1lLCBwb3J0KTsKKyAgICAgICAgICAgICAgZXh0cmFtc2dbMF0gPyBleHRyYW1zZyA6IFNTTF9FUlJPUl90b19zdHIoZGV0YWlsKSwKKyAgICAgICAgICAgICAgaG9zdG5hbWUsIHBvcnQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgfQogCkBAIC0yOTUyLDcgKzMwODYsNyBAQAogICBDdXJsX3NzbF9wdXNoX2NlcnRpbmZvX2xlbihkYXRhLCBfbnVtLCBfbGFiZWwsIHB0ciwgaW5mb19sZW4pOyBcCiAgIGlmKDEgIT0gQklPX3Jlc2V0KG1lbSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBXSElMRV9GQUxTRQorfSB3aGlsZSgwKQogCiBzdGF0aWMgdm9pZCBwdWJrZXlfc2hvdyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgQklPICptZW0sCkBAIC0yOTg0LDMxICszMTE4LDI4IEBACiAgIGlmKF90eXBlLT5fbmFtZSkgeyBcCiAgICAgcHVia2V5X3Nob3coZGF0YSwgbWVtLCBfbnVtLCAjX3R5cGUsICNfbmFtZSwgX3R5cGUtPl9uYW1lKTsgXAogICB9IFwKLX0gV0hJTEVfRkFMU0UKK30gd2hpbGUoMCkKICNlbmRpZgogCi1zdGF0aWMgaW50IFg1MDlWM19leHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKK3N0YXRpYyB2b2lkIFg1MDlWM19leHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydG51bSwKICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9FWFRTIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0cykKIHsKICAgaW50IGk7Ci0gIHNpemVfdCBqOwogCiAgIGlmKChpbnQpc2tfWDUwOV9FWFRFTlNJT05fbnVtKGV4dHMpIDw9IDApCiAgICAgLyogbm8gZXh0ZW5zaW9ucywgYmFpbCBvdXQgKi8KLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm47CiAKICAgZm9yKGkgPSAwOyBpIDwgKGludClza19YNTA5X0VYVEVOU0lPTl9udW0oZXh0cyk7IGkrKykgewogICAgIEFTTjFfT0JKRUNUICpvYmo7CiAgICAgWDUwOV9FWFRFTlNJT04gKmV4dCA9IHNrX1g1MDlfRVhURU5TSU9OX3ZhbHVlKGV4dHMsIGkpOwogICAgIEJVRl9NRU0gKmJpb21lbTsKLSAgICBjaGFyIGJ1Zls1MTJdOwotICAgIGNoYXIgKnB0ciA9IGJ1ZjsKICAgICBjaGFyIG5hbWVidWZbMTI4XTsKICAgICBCSU8gKmJpb19vdXQgPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKIAogICAgIGlmKCFiaW9fb3V0KQotICAgICAgcmV0dXJuIDE7CisgICAgICByZXR1cm47CiAKICAgICBvYmogPSBYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0KGV4dCk7CiAKQEAgLTMwMTgsMjggKzMxNDksMTggQEAKICAgICAgIEFTTjFfU1RSSU5HX3ByaW50KGJpb19vdXQsIChBU04xX1NUUklORyAqKVg1MDlfRVhURU5TSU9OX2dldF9kYXRhKGV4dCkpOwogCiAgICAgQklPX2dldF9tZW1fcHRyKGJpb19vdXQsICZiaW9tZW0pOwotCi0gICAgZm9yKGogPSAwOyBqIDwgKHNpemVfdCliaW9tZW0tPmxlbmd0aDsgaisrKSB7Ci0gICAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKLSAgICAgIGlmKGJpb21lbS0+ZGF0YVtqXSA9PSAnXG4nKSB7Ci0gICAgICAgIHNlcCA9ICIsICI7Ci0gICAgICAgIGorKzsgLyogc2tpcCB0aGUgbmV3bGluZSAqLwotICAgICAgfTsKLSAgICAgIHdoaWxlKChqPChzaXplX3QpYmlvbWVtLT5sZW5ndGgpICYmIChiaW9tZW0tPmRhdGFbal0gPT0gJyAnKSkKLSAgICAgICAgaisrOwotICAgICAgaWYoajwoc2l6ZV90KWJpb21lbS0+bGVuZ3RoKQotICAgICAgICBwdHIgKz0gbXNucHJpbnRmKHB0ciwgc2l6ZW9mKGJ1ZiktKHB0ci1idWYpLCAiJXMlYyIsIHNlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmRhdGFbal0pOwotICAgIH0KLQotICAgIEN1cmxfc3NsX3B1c2hfY2VydGluZm8oZGF0YSwgY2VydG51bSwgbmFtZWJ1ZiwgYnVmKTsKLQorICAgIEN1cmxfc3NsX3B1c2hfY2VydGluZm9fbGVuKGRhdGEsIGNlcnRudW0sIG5hbWVidWYsIGJpb21lbS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmxlbmd0aCk7CiAgICAgQklPX2ZyZWUoYmlvX291dCk7Ci0KICAgfQotICByZXR1cm4gMDsgLyogYWxsIGlzIGZpbmUgKi8KIH0KIAorI2lmZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCit0eXBlZGVmIHNpemVfdCBudW1jZXJ0X3Q7CisjZWxzZQordHlwZWRlZiBpbnQgbnVtY2VydF90OworI2VuZGlmCisKIHN0YXRpYyBDVVJMY29kZSBnZXRfY2VydF9jaGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiAKQEAgLTMwNDgsNyArMzE2OSw3IEBACiAgIFNUQUNLX09GKFg1MDkpICpzazsKICAgaW50IGk7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBpbnQgbnVtY2VydHM7CisgIG51bWNlcnRfdCBudW1jZXJ0czsKICAgQklPICptZW07CiAKICAgc2sgPSBTU0xfZ2V0X3BlZXJfY2VydF9jaGFpbihCQUNLRU5ELT5oYW5kbGUpOwpAQCAtMzA1OCwxNCArMzE3OSwxNCBAQAogCiAgIG51bWNlcnRzID0gc2tfWDUwOV9udW0oc2spOwogCi0gIHJlc3VsdCA9IEN1cmxfc3NsX2luaXRfY2VydGluZm8oZGF0YSwgbnVtY2VydHMpOworICByZXN1bHQgPSBDdXJsX3NzbF9pbml0X2NlcnRpbmZvKGRhdGEsIChpbnQpbnVtY2VydHMpOwogICBpZihyZXN1bHQpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgbWVtID0gQklPX25ldyhCSU9fc19tZW0oKSk7CiAKLSAgZm9yKGkgPSAwOyBpIDwgbnVtY2VydHM7IGkrKykgeworICBmb3IoaSA9IDA7IGkgPCAoaW50KW51bWNlcnRzOyBpKyspIHsKICAgICBBU04xX0lOVEVHRVIgKm51bTsKICAgICBYNTA5ICp4ID0gc2tfWDUwOV92YWx1ZShzaywgaSk7CiAgICAgRVZQX1BLRVkgKnB1YmtleSA9IE5VTEw7CkBAIC0zMDkxLDE4ICszMjEyLDI1IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfWDUwOV9HRVQwX1NJR05BVFVSRSkgJiYgZGVmaW5lZChIQVZFX1g1MDlfR0VUMF9FWFRFTlNJT05TKQogICAgIHsKLSAgICAgIGNvbnN0IFg1MDlfQUxHT1IgKnBhbGcgPSBOVUxMOwotICAgICAgQVNOMV9TVFJJTkcgKmEgPSBBU04xX1NUUklOR19uZXcoKTsKLSAgICAgIGlmKGEpIHsKLSAgICAgICAgWDUwOV9nZXQwX3NpZ25hdHVyZSgmcHNpZywgJnBhbGcsIHgpOwotICAgICAgICBYNTA5X3NpZ25hdHVyZV9wcmludChtZW0sIEFSRzJfWDUwOV9zaWduYXR1cmVfcHJpbnQgcGFsZywgYSk7Ci0gICAgICAgIEFTTjFfU1RSSU5HX2ZyZWUoYSk7CisgICAgICBjb25zdCBYNTA5X0FMR09SICpzaWdhbGcgPSBOVUxMOworICAgICAgWDUwOV9QVUJLRVkgKnhwdWJrZXkgPSBOVUxMOworICAgICAgQVNOMV9PQkpFQ1QgKnB1YmtleW9pZCA9IE5VTEw7CiAKLSAgICAgICAgaWYocGFsZykgewotICAgICAgICAgIGkyYV9BU04xX09CSkVDVChtZW0sIHBhbGctPmFsZ29yaXRobSk7CisgICAgICBYNTA5X2dldDBfc2lnbmF0dXJlKCZwc2lnLCAmc2lnYWxnLCB4KTsKKyAgICAgIGlmKHNpZ2FsZykgeworICAgICAgICBpMmFfQVNOMV9PQkpFQ1QobWVtLCBzaWdhbGctPmFsZ29yaXRobSk7CisgICAgICAgIHB1c2hfY2VydGluZm8oIlNpZ25hdHVyZSBBbGdvcml0aG0iLCBpKTsKKyAgICAgIH0KKworICAgICAgeHB1YmtleSA9IFg1MDlfZ2V0X1g1MDlfUFVCS0VZKHgpOworICAgICAgaWYoeHB1YmtleSkgeworICAgICAgICBYNTA5X1BVQktFWV9nZXQwX3BhcmFtKCZwdWJrZXlvaWQsIE5VTEwsIE5VTEwsIE5VTEwsIHhwdWJrZXkpOworICAgICAgICBpZihwdWJrZXlvaWQpIHsKKyAgICAgICAgICBpMmFfQVNOMV9PQkpFQ1QobWVtLCBwdWJrZXlvaWQpOwogICAgICAgICAgIHB1c2hfY2VydGluZm8oIlB1YmxpYyBLZXkgQWxnb3JpdGhtIiwgaSk7CiAgICAgICAgIH0KICAgICAgIH0KKwogICAgICAgWDUwOVYzX2V4dChkYXRhLCBpLCBYNTA5X2dldDBfZXh0ZW5zaW9ucyh4KSk7CiAgICAgfQogI2Vsc2UKQEAgLTMxNTQsNyArMzI4Miw3IEBACiAgICAgICAgICAgY29uc3QgQklHTlVNICplOwogCiAgICAgICAgICAgUlNBX2dldDBfa2V5KHJzYSwgJm4sICZlLCBOVUxMKTsKLSAgICAgICAgICBCTl9wcmludChtZW0sIG4pOworICAgICAgICAgIEJJT19wcmludGYobWVtLCAiJWQiLCBCTl9udW1fYml0cyhuKSk7CiAgICAgICAgICAgcHVzaF9jZXJ0aW5mbygiUlNBIFB1YmxpYyBLZXkiLCBpKTsKICAgICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBuLCBpKTsKICAgICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBlLCBpKTsKQEAgLTMyNzksNyArMzQwNyw2IEBACiAgICAgaWYobGVuMSA8IDEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCiAKLSAgICAvKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9idWZmZXIuaHRtbCAqLwogICAgIGJ1ZmYxID0gdGVtcCA9IG1hbGxvYyhsZW4xKTsKICAgICBpZighYnVmZjEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCkBAIC0zMzAxLDcgKzM0MjgsNiBAQAogICAgIHJlc3VsdCA9IEN1cmxfcGluX3BlZXJfcHVia2V5KGRhdGEsIHBpbm5lZHB1YmtleSwgYnVmZjEsIGxlbjEpOwogICB9IHdoaWxlKDApOwogCi0gIC8qIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL2J1ZmZlci5odG1sICovCiAgIGlmKGJ1ZmYxKQogICAgIGZyZWUoYnVmZjEpOwogCkBAIC0zNTMxLDcgKzM2NTcsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwotICB0aW1lX3QgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0zNTc4LDcgKzM3MDQsNyBAQAogICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CiAKICAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6KHRpbWVfdCl0aW1lb3V0X21zKTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtMzcwMiwxMCArMzgyOCwyMiBAQAogICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CiAgICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0xfd3JpdGUoKSByZXR1cm5lZCBTWVNDQUxMLCBlcnJubyA9ICVkIiwKLSAgICAgICAgICAgIFNPQ0tFUlJOTyk7Ci0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOwotICAgICAgcmV0dXJuIC0xOworICAgICAgeworICAgICAgICBpbnQgc29ja2VyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CisgICAgICAgIGlmKHNzbGVycm9yKQorICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICBlbHNlIGlmKHNvY2tlcnIpCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihzb2NrZXJyLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3RybmNweShlcnJvcl9idWZmZXIsIFNTTF9FUlJPUl90b19zdHIoZXJyKSwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICAgIGVycm9yX2J1ZmZlcltzaXplb2YoZXJyb3JfYnVmZmVyKSAtIDFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihjb25uLT5kYXRhLCBPU1NMX1BBQ0tBR0UgIiBTU0xfd3JpdGU6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICAgIGVycm9yX2J1ZmZlciwgc29ja2Vycik7CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CiAgICAgICAvKiAgQSBmYWlsdXJlIGluIHRoZSBTU0wgbGlicmFyeSBvY2N1cnJlZCwgdXN1YWxseSBhIHByb3RvY29sIGVycm9yLgogICAgICAgICAgIFRoZSBPcGVuU1NMIGVycm9yIHF1ZXVlIGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGVycm9yLiAqLwpAQCAtMzc2MCw3ICszODk4LDEwIEBACiAgICAgICBicmVhazsKICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjogLyogbm8gbW9yZSBkYXRhICovCiAgICAgICAvKiBjbG9zZV9ub3RpZnkgYWxlcnQgKi8KLSAgICAgIGNvbm5jbG9zZShjb25uLCAiVExTIGNsb3NlX25vdGlmeSIpOworICAgICAgaWYobnVtID09IEZJUlNUU09DS0VUKQorICAgICAgICAvKiBtYXJrIHRoZSBjb25uZWN0aW9uIGZvciBjbG9zZSBpZiBpdCBpcyBpbmRlZWQgdGhlIGNvbnRyb2wKKyAgICAgICAgICAgY29ubmVjdGlvbiAqLworICAgICAgICBjb25uY2xvc2UoY29ubiwgIlRMUyBjbG9zZV9ub3RpZnkiKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgpAQCAtMzc3NSwxNCArMzkxNiw0NCBAQAogICAgICAgaWYoKG5yZWFkIDwgMCkgfHwgc3NsZXJyb3IpIHsKICAgICAgICAgLyogSWYgdGhlIHJldHVybiBjb2RlIHdhcyBuZWdhdGl2ZSBvciB0aGVyZSBhY3R1YWxseSBpcyBhbiBlcnJvciBpbiB0aGUKICAgICAgICAgICAgcXVldWUgKi8KKyAgICAgICAgaW50IHNvY2tlcnIgPSBTT0NLRVJSTk87CisgICAgICAgIGlmKHNzbGVycm9yKQorICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICBlbHNlIGlmKHNvY2tlcnIgJiYgZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKQorICAgICAgICAgIEN1cmxfc3RyZXJyb3Ioc29ja2VyciwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0cm5jcHkoZXJyb3JfYnVmZmVyLCBTU0xfRVJST1JfdG9fc3RyKGVyciksIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgICBlcnJvcl9idWZmZXJbc2l6ZW9mKGVycm9yX2J1ZmZlcikgLSAxXSA9ICdcMCc7CisgICAgICAgIH0KICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgT1NTTF9QQUNLQUdFICIgU1NMX3JlYWQ6ICVzLCBlcnJubyAlZCIsCi0gICAgICAgICAgICAgIChzc2xlcnJvciA/Ci0gICAgICAgICAgICAgICBvc3NsX3N0cmVycm9yKHNzbGVycm9yLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKSA6Ci0gICAgICAgICAgICAgICBTU0xfRVJST1JfdG9fc3RyKGVycikpLAotICAgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgICAgICAgICBlcnJvcl9idWZmZXIsIHNvY2tlcnIpOwogICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CisgICAgICAvKiBGb3IgZGVidWcgYnVpbGRzIGJlIGEgbGl0dGxlIHN0cmljdGVyIGFuZCBlcnJvciBvbiBhbnkKKyAgICAgICAgIFNTTF9FUlJPUl9TWVNDQUxMLiBGb3IgZXhhbXBsZSBhIHNlcnZlciBtYXkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgIGFicnVwdGx5IHdpdGhvdXQgYSBjbG9zZV9ub3RpZnkgYWxlcnQuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKKyAgICAgICAgIHBlZXJzIHdlIGRvbid0IGRvIHRoaXMgYnkgZGVmYXVsdC4gIzQ2MjQKKworICAgICAgICAgV2UgY2FuIHVzZSB0aGlzIHRvIGdhdWdlIGhvdyBtYW55IHVzZXJzIG1heSBiZSBhZmZlY3RlZCwgYW5kCisgICAgICAgICBpZiBpdCBnb2VzIG9rIGV2ZW50dWFsbHkgdHJhbnNpdGlvbiB0byBhbGxvdyBpbiBkZXYgYW5kIHJlbGVhc2Ugd2l0aAorICAgICAgICAgdGhlIG5ld2VzdCBPcGVuU1NMOiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMTAwMEwpICovCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaWYoZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKSB7CisgICAgICAgIGludCBzb2NrZXJyID0gU09DS0VSUk5POworICAgICAgICBpZihzb2NrZXJyKQorICAgICAgICAgIEN1cmxfc3RyZXJyb3Ioc29ja2VyciwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIG1zbnByaW50ZihlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBjbG9zZWQgYWJydXB0bHkiKTsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihjb25uLT5kYXRhLCBPU1NMX1BBQ0tBR0UgIiBTU0xfcmVhZDogJXMsIGVycm5vICVkIgorICAgICAgICAgICAgICAiIChGYXRhbCBiZWNhdXNlIHRoaXMgaXMgYSBjdXJsIGRlYnVnIGJ1aWxkKSIsCisgICAgICAgICAgICAgIGVycm9yX2J1ZmZlciwgc29ja2Vycik7CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgfQogICByZXR1cm4gbnJlYWQ7CkBAIC0zNzkwLDEzICszOTYxLDM1IEBACiAKIHN0YXRpYyBzaXplX3QgQ3VybF9vc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLSNpZmRlZiBPUEVOU1NMX0lTX0JPUklOR1NTTAorI2lmZGVmIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSCisjaWYgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIgPCAweDIwNzAxMDBmTAorICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVseC4lbHguJWx4IiwKKyAgICAgICAgICAgICAgICAgICBPU1NMX1BBQ0tBR0UsCisgICAgICAgICAgICAgICAgICAgKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSPj4yOCkmMHhmLAorICAgICAgICAgICAgICAgICAgIChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUj4+MjApJjB4ZmYsCisgICAgICAgICAgICAgICAgICAgKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSPj4xMikmMHhmZik7CisjZWxzZSAvKiBPcGVuU1NMX3ZlcnNpb24oKSBmaXJzdCBhcHBlYXJlZCBpbiBMaWJyZVNTTCAyLjcuMSAqLworICBjaGFyICpwOworICBpbnQgY291bnQ7CisgIGNvbnN0IGNoYXIgKnZlciA9IE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX1ZFUlNJT04pOworICBjb25zdCBjaGFyIGV4cGVjdGVkW10gPSBPU1NMX1BBQ0tBR0UgIiAiOyAvKiBpZSAiTGlicmVTU0wgIiAqLworICBpZihDdXJsX3N0cm5jYXNlY29tcGFyZSh2ZXIsIGV4cGVjdGVkLCBzaXplb2YoZXhwZWN0ZWQpIC0gMSkpIHsKKyAgICB2ZXIgKz0gc2l6ZW9mKGV4cGVjdGVkKSAtIDE7CisgIH0KKyAgY291bnQgPSBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMvJXMiLCBPU1NMX1BBQ0tBR0UsIHZlcik7CisgIGZvcihwID0gYnVmZmVyOyAqcDsgKytwKSB7CisgICAgaWYoSVNTUEFDRSgqcCkpCisgICAgICAqcCA9ICdfJzsKKyAgfQorICByZXR1cm4gY291bnQ7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9JU19CT1JJTkdTU0wpCiAgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCBPU1NMX1BBQ0tBR0UpOwogI2VsaWYgZGVmaW5lZChIQVZFX09QRU5TU0xfVkVSU0lPTikgJiYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fU1RSSU5HKQogICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVzIiwKICAgICAgICAgICAgICAgICAgICBPU1NMX1BBQ0tBR0UsIE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX1ZFUlNJT05fU1RSSU5HKSk7CiAjZWxzZQotICAvKiBub3QgQm9yaW5nU1NMIGFuZCBub3QgdXNpbmcgT3BlblNTTF92ZXJzaW9uICovCisgIC8qIG5vdCBMaWJyZVNTTCwgQm9yaW5nU1NMIGFuZCBub3QgdXNpbmcgT3BlblNTTF92ZXJzaW9uICovCiAKICAgY2hhciBzdWJbM107CiAgIHVuc2lnbmVkIGxvbmcgc3NsZWF5X3ZhbHVlOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWEyNmI0Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuYworKysgL2Rldi9udWxsCkBAIC0xLDkzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwotICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCi0gKgotICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU291cmNlIGZpbGUgZm9yIGFsbCBQb2xhclNTTC1zcGVjaWZpYyBjb2RlIGZvciB0aGUgVExTL1NTTCBsYXllci4gTm8gY29kZQotICogYnV0IHZ0bHMuYyBzaG91bGQgZXZlciBjYWxsIG9yIHVzZSB0aGVzZSBmdW5jdGlvbnMuCi0gKgotICovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfUE9MQVJTU0wKLSNpbmNsdWRlIDxwb2xhcnNzbC9uZXQuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC9zc2wuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC9jZXJ0cy5oPgotI2luY2x1ZGUgPHBvbGFyc3NsL3g1MDkuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvc2hhMjU2Lmg+Ci0KLSNpZiBQT0xBUlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MDEwMzAwMDAKLSNlcnJvciB0b28gb2xkIFBvbGFyU1NMCi0jZW5kaWYKLQotI2luY2x1ZGUgPHBvbGFyc3NsL2Vycm9yLmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvZW50cm9weS5oPgotI2luY2x1ZGUgPHBvbGFyc3NsL2N0cl9kcmJnLmg+Ci0KLSNpbmNsdWRlICJ1cmxkYXRhLmgiCi0jaW5jbHVkZSAic2VuZGYuaCIKLSNpbmNsdWRlICJpbmV0X3B0b24uaCIKLSNpbmNsdWRlICJwb2xhcnNzbC5oIgotI2luY2x1ZGUgInZ0bHMuaCIKLSNpbmNsdWRlICJwYXJzZWRhdGUuaCIKLSNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCi0jaW5jbHVkZSAic2VsZWN0LmgiCi0jaW5jbHVkZSAic3RyY2FzZS5oIgotI2luY2x1ZGUgInBvbGFyc3NsX3RocmVhZGxvY2suaCIKLSNpbmNsdWRlICJtdWx0aWlmLmgiCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCi0jaW5jbHVkZSAibWVtZGVidWcuaCIKLQotLyogU2VlIGh0dHBzOi8vdGxzLm1iZWQub3JnL2Rpc2N1c3Npb25zL2dlbmVyaWMvCi0gICBob3d0by1kZXRlcm1pbmUtZXhhY3QtYnVmZmVyLWxlbi1mb3ItbWJlZHRsc19wa193cml0ZV9wdWJrZXlfZGVyCi0qLwotI2RlZmluZSBSU0FfUFVCX0RFUl9NQVhfQllURVMgICAoMzggKyAyICogUE9MQVJTU0xfTVBJX01BWF9TSVpFKQotI2RlZmluZSBFQ1BfUFVCX0RFUl9NQVhfQllURVMgICAoMzAgKyAyICogUE9MQVJTU0xfRUNQX01BWF9CWVRFUykKLQotI2RlZmluZSBQVUJfREVSX01BWF9CWVRFUyAgIChSU0FfUFVCX0RFUl9NQVhfQllURVMgPiBFQ1BfUFVCX0RFUl9NQVhfQllURVMgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9QVUJfREVSX01BWF9CWVRFUyA6IEVDUF9QVUJfREVSX01BWF9CWVRFUykKLQotc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgewotICBjdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOwotICBlbnRyb3B5X2NvbnRleHQgZW50cm9weTsKLSAgc3NsX2NvbnRleHQgc3NsOwotICBpbnQgc2VydmVyX2ZkOwotICB4NTA5X2NydCBjYWNlcnQ7Ci0gIHg1MDlfY3J0IGNsaWNlcnQ7Ci0gIHg1MDlfY3JsIGNybDsKLSAgcnNhX2NvbnRleHQgcnNhOwotfTsKLQotI2RlZmluZSBCQUNLRU5EIGNvbm5zc2wtPmJhY2tlbmQKLQotLyogYXBwbHkgdGhyZWFkaW5nPyAqLwotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpIHx8IGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCi0jZGVmaW5lIFRIUkVBRElOR19TVVBQT1JUCi0jZW5kaWYKLQotI2lmbmRlZiBQT0xBUlNTTF9FUlJPUl9DCi0jZGVmaW5lIGVycm9yX3N0cmVycm9yKHgseSx6KQotI2VuZGlmIC8qIFBPTEFSU1NMX0VSUk9SX0MgKi8KLQotCi0jaWYgZGVmaW5lZChUSFJFQURJTkdfU1VQUE9SVCkKLXN0YXRpYyBlbnRyb3B5X2NvbnRleHQgZW50cm9weTsKLQotc3RhdGljIGludCAgZW50cm9weV9pbml0X2luaXRpYWxpemVkICA9IDA7Ci0KLS8qIHN0YXJ0IG9mIGVudHJvcHlfaW5pdF9tdXRleCgpICovCi1zdGF0aWMgdm9pZCBlbnRyb3B5X2luaXRfbXV0ZXgoZW50cm9weV9jb250ZXh0ICpjdHgpCi17Ci0gIC8qIGxvY2sgMCA9IGVudHJvcHlfaW5pdF9tdXRleCgpICovCi0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMCk7Ci0gIGlmKGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCA9PSAwKSB7Ci0gICAgZW50cm9weV9pbml0KGN0eCk7Ci0gICAgZW50cm9weV9pbml0X2luaXRpYWxpemVkID0gMTsKLSAgfQotICBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oMCk7Ci19Ci0vKiBlbmQgb2YgZW50cm9weV9pbml0X211dGV4KCkgKi8KLQotLyogc3RhcnQgb2YgZW50cm9weV9mdW5jX211dGV4KCkgKi8KLXN0YXRpYyBpbnQgZW50cm9weV9mdW5jX211dGV4KHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbikKLXsKLSAgaW50IHJldDsKLSAgLyogbG9jayAxID0gZW50cm9weV9mdW5jX211dGV4KCkgKi8KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbigxKTsKLSAgcmV0ID0gZW50cm9weV9mdW5jKGRhdGEsIG91dHB1dCwgbGVuKTsKLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKDEpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0vKiBlbmQgb2YgZW50cm9weV9mdW5jX211dGV4KCkgKi8KLQotI2VuZGlmIC8qIFRIUkVBRElOR19TVVBQT1JUICovCi0KLS8qIERlZmluZSB0aGlzIHRvIGVuYWJsZSBsb3RzIG9mIGRlYnVnZ2luZyBmb3IgUG9sYXJTU0wgKi8KLSN1bmRlZiBQT0xBUlNTTF9ERUJVRwotCi0jaWZkZWYgUE9MQVJTU0xfREVCVUcKLXN0YXRpYyB2b2lkIHBvbGFyc3NsX2RlYnVnKHZvaWQgKmNvbnRleHQsIGludCBsZXZlbCwgY29uc3QgY2hhciAqbGluZSkKLXsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IE5VTEw7Ci0KLSAgaWYoIWNvbnRleHQpCi0gICAgcmV0dXJuOwotCi0gIGRhdGEgPSAoc3RydWN0IEN1cmxfZWFzeSAqKWNvbnRleHQ7Ci0KLSAgaW5mb2YoZGF0YSwgIiVzIiwgbGluZSk7Ci0gICh2b2lkKSBsZXZlbDsKLX0KLSNlbHNlCi0jZW5kaWYKLQotLyogQUxQTiBmb3IgaHR0cDI/ICovCi0jaWZkZWYgUE9MQVJTU0xfU1NMX0FMUE4KLSMgIGRlZmluZSBIQVNfQUxQTgotI2VuZGlmCi0KLXN0YXRpYyBDdXJsX3JlY3YgcG9sYXJzc2xfcmVjdjsKLXN0YXRpYyBDdXJsX3NlbmQgcG9sYXJzc2xfc2VuZDsKLQotc3RhdGljIENVUkxjb2RlIHBvbGFyc3NsX3ZlcnNpb25fZnJvbV9jdXJsKGludCAqcG9sYXJ2ZXIsIGxvbmcgc3NsX3ZlcnNpb24pCi17Ci0gIHN3aXRjaChzc2xfdmVyc2lvbikgewotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgICAqcG9sYXJ2ZXIgPSBTU0xfTUlOT1JfVkVSU0lPTl8xOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gICAgICAqcG9sYXJ2ZXIgPSBTU0xfTUlOT1JfVkVSU0lPTl8yOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gICAgICAqcG9sYXJ2ZXIgPSBTU0xfTUlOT1JfVkVSU0lPTl8zOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZQotc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQotewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGxvbmcgc3NsX3ZlcnNpb24gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7Ci0gIGxvbmcgc3NsX3ZlcnNpb25fbWF4ID0gU1NMX0NPTk5fQ09ORklHKHZlcnNpb25fbWF4KTsKLSAgaW50IHNzbF9taW5fdmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMTsKLSAgaW50IHNzbF9tYXhfdmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMTsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgc3dpdGNoKHNzbF92ZXJzaW9uKSB7Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICAgIHNzbF92ZXJzaW9uID0gQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHN3aXRjaChzc2xfdmVyc2lvbl9tYXgpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORToKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDoKLSAgICAgIHNzbF92ZXJzaW9uX21heCA9IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMjsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmVzdWx0ID0gcG9sYXJzc2xfdmVyc2lvbl9mcm9tX2N1cmwoJnNzbF9taW5fdmVyLCBzc2xfdmVyc2lvbik7Ci0gIGlmKHJlc3VsdCkgewotICAgIGZhaWxmKGRhdGEsICJ1bnN1cHBvcnRlZCBtaW4gdmVyc2lvbiBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgcmVzdWx0ID0gcG9sYXJzc2xfdmVyc2lvbl9mcm9tX2N1cmwoJnNzbF9tYXhfdmVyLCBzc2xfdmVyc2lvbl9tYXggPj4gMTYpOwotICBpZihyZXN1bHQpIHsKLSAgICBmYWlsZihkYXRhLCAidW5zdXBwb3J0ZWQgbWF4IHZlcnNpb24gcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgc3NsX3NldF9taW5fdmVyc2lvbigmQkFDS0VORC0+c3NsLCBTU0xfTUFKT1JfVkVSU0lPTl8zLCBzc2xfbWluX3Zlcik7Ci0gIHNzbF9zZXRfbWF4X3ZlcnNpb24oJkJBQ0tFTkQtPnNzbCwgU1NMX01BSk9SX1ZFUlNJT05fMywgc3NsX21heF92ZXIpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZQotcG9sYXJzc2xfY29ubmVjdF9zdGVwMShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSogY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY29uc3QgY2hhciAqY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7Ci0gIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgotICAgIGNvbm4tPmhvc3QubmFtZTsKLSAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OwotICBpbnQgcmV0ID0gLTE7Ci0gIGNoYXIgZXJyb3JidWZbMTI4XTsKLSAgZXJyb3JidWZbMF0gPSAwOwotCi0gIC8qIFBvbGFyU1NMIG9ubHkgc3VwcG9ydHMgU1NMdjMgYW5kIFRMU3YxICovCi0gIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjIpIHsKLSAgICBmYWlsZihkYXRhLCAiUG9sYXJTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0jaWZkZWYgVEhSRUFESU5HX1NVUFBPUlQKLSAgZW50cm9weV9pbml0X211dGV4KCZlbnRyb3B5KTsKLQotICBpZigocmV0ID0gY3RyX2RyYmdfaW5pdCgmQkFDS0VORC0+Y3RyX2RyYmcsIGVudHJvcHlfZnVuY19tdXRleCwgJmVudHJvcHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApKSAhPSAwKSB7Ci0gICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgZmFpbGYoZGF0YSwgIkZhaWxlZCAtIFBvbGFyU1NMOiBjdHJfZHJiZ19pbml0IHJldHVybmVkICgtMHglMDRYKSAlc1xuIiwKLSAgICAgICAgICAtcmV0LCBlcnJvcmJ1Zik7Ci0gIH0KLSNlbHNlCi0gIGVudHJvcHlfaW5pdCgmQkFDS0VORC0+ZW50cm9weSk7Ci0KLSAgaWYoKHJldCA9IGN0cl9kcmJnX2luaXQoJkJBQ0tFTkQtPmN0cl9kcmJnLCBlbnRyb3B5X2Z1bmMsICZCQUNLRU5ELT5lbnRyb3B5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKSkgIT0gMCkgewotICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgLSBQb2xhclNTTDogY3RyX2RyYmdfaW5pdCByZXR1cm5lZCAoLTB4JTA0WCkgJXNcbiIsCi0gICAgICAgICAgLXJldCwgZXJyb3JidWYpOwotICB9Ci0jZW5kaWYgLyogVEhSRUFESU5HX1NVUFBPUlQgKi8KLQotICAvKiBMb2FkIHRoZSB0cnVzdGVkIENBICovCi0gIG1lbXNldCgmQkFDS0VORC0+Y2FjZXJ0LCAwLCBzaXplb2YoeDUwOV9jcnQpKTsKLQotICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSkgewotICAgIHJldCA9IHg1MDlfY3J0X3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNhY2VydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKTsKLQotICAgIGlmKHJldDwwKSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIC1yZXQsIGVycm9yYnVmKTsKLQotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwotICAgIH0KLSAgfQotCi0gIGlmKGNhcGF0aCkgewotICAgIHJldCA9IHg1MDlfY3J0X3BhcnNlX3BhdGgoJkJBQ0tFTkQtPmNhY2VydCwgY2FwYXRoKTsKLQotICAgIGlmKHJldDwwKSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNhIGNlcnQgcGF0aCAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgY2FwYXRoLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKLSAgICB9Ci0gIH0KLQotICAvKiBMb2FkIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgKi8KLSAgbWVtc2V0KCZCQUNLRU5ELT5jbGljZXJ0LCAwLCBzaXplb2YoeDUwOV9jcnQpKTsKLQotICBpZihTU0xfU0VUX09QVElPTihjZXJ0KSkgewotICAgIHJldCA9IHg1MDlfY3J0X3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNsaWNlcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihjZXJ0KSk7Ci0KLSAgICBpZihyZXQpIHsKLSAgICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgY2xpZW50IGNlcnQgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCksIC1yZXQsIGVycm9yYnVmKTsKLQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKLSAgICB9Ci0gIH0KLQotICAvKiBMb2FkIHRoZSBjbGllbnQgcHJpdmF0ZSBrZXkgKi8KLSAgaWYoU1NMX1NFVF9PUFRJT04oa2V5KSkgewotICAgIHBrX2NvbnRleHQgcGs7Ci0gICAgcGtfaW5pdCgmcGspOwotICAgIHJldCA9IHBrX3BhcnNlX2tleWZpbGUoJnBrLCBTU0xfU0VUX09QVElPTihrZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOwotICAgIGlmKHJldCA9PSAwICYmICFwa19jYW5fZG8oJnBrLCBQT0xBUlNTTF9QS19SU0EpKQotICAgICAgcmV0ID0gUE9MQVJTU0xfRVJSX1BLX1RZUEVfTUlTTUFUQ0g7Ci0gICAgaWYocmV0ID09IDApCi0gICAgICByc2FfY29weSgmQkFDS0VORC0+cnNhLCBwa19yc2EocGspKTsKLSAgICBlbHNlCi0gICAgICByc2FfZnJlZSgmQkFDS0VORC0+cnNhKTsKLSAgICBwa19mcmVlKCZwayk7Ci0KLSAgICBpZihyZXQpIHsKLSAgICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgcHJpdmF0ZSBrZXkgJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSksIC1yZXQsIGVycm9yYnVmKTsKLQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKLSAgICB9Ci0gIH0KLQotICAvKiBMb2FkIHRoZSBDUkwgKi8KLSAgbWVtc2V0KCZCQUNLRU5ELT5jcmwsIDAsIHNpemVvZih4NTA5X2NybCkpOwotCi0gIGlmKFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKSB7Ci0gICAgcmV0ID0geDUwOV9jcmxfcGFyc2VfZmlsZSgmQkFDS0VORC0+Y3JsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSkpOwotCi0gICAgaWYocmV0KSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIENSTCBmaWxlICVzIC0gUG9sYXJTU0w6ICgtMHglMDRYKSAlcyIsCi0gICAgICAgICAgICBTU0xfU0VUX09QVElPTihDUkxmaWxlKSwgLXJldCwgZXJyb3JidWYpOwotCi0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NSTF9CQURGSUxFOwotICAgIH0KLSAgfQotCi0gIGluZm9mKGRhdGEsICJQb2xhclNTTDogQ29ubmVjdGluZyB0byAlczolZFxuIiwgaG9zdG5hbWUsIHBvcnQpOwotCi0gIGlmKHNzbF9pbml0KCZCQUNLRU5ELT5zc2wpKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlBvbGFyU1NMOiBzc2xfaW5pdCBmYWlsZWQiKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgIHNzbF9zZXRfbWluX3ZlcnNpb24oJkJBQ0tFTkQtPnNzbCwgU1NMX01BSk9SX1ZFUlNJT05fMywKLSAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9NSU5PUl9WRVJTSU9OXzEpOwotICAgIGJyZWFrOwotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKLSAgICBzc2xfc2V0X21pbl92ZXJzaW9uKCZCQUNLRU5ELT5zc2wsIFNTTF9NQUpPUl9WRVJTSU9OXzMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTU0xfTUlOT1JfVkVSU0lPTl8wKTsKLSAgICBzc2xfc2V0X21heF92ZXJzaW9uKCZCQUNLRU5ELT5zc2wsIFNTTF9NQUpPUl9WRVJTSU9OXzMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTU0xfTUlOT1JfVkVSU0lPTl8wKTsKLSAgICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IEZvcmNlZCBtaW4uIFNTTCBWZXJzaW9uIHRvIGJlIFNTTHYzXG4iKTsKLSAgICBicmVhazsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKLSAgICB7Ci0gICAgICBDVVJMY29kZSByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heChjb25uLCBzb2NraW5kZXgpOwotICAgICAgaWYocmVzdWx0ICE9IENVUkxFX09LKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgYnJlYWs7Ci0gICAgfQotICBkZWZhdWx0OgotICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgc3NsX3NldF9lbmRwb2ludCgmQkFDS0VORC0+c3NsLCBTU0xfSVNfQ0xJRU5UKTsKLSAgc3NsX3NldF9hdXRobW9kZSgmQkFDS0VORC0+c3NsLCBTU0xfVkVSSUZZX09QVElPTkFMKTsKLQotICBzc2xfc2V0X3JuZygmQkFDS0VORC0+c3NsLCBjdHJfZHJiZ19yYW5kb20sCi0gICAgICAgICAgICAgICZCQUNLRU5ELT5jdHJfZHJiZyk7Ci0gIHNzbF9zZXRfYmlvKCZCQUNLRU5ELT5zc2wsCi0gICAgICAgICAgICAgIG5ldF9yZWN2LCAmY29ubi0+c29ja1tzb2NraW5kZXhdLAotICAgICAgICAgICAgICBuZXRfc2VuZCwgJmNvbm4tPnNvY2tbc29ja2luZGV4XSk7Ci0KLSAgc3NsX3NldF9jaXBoZXJzdWl0ZXMoJkJBQ0tFTkQtPnNzbCwgc3NsX2xpc3RfY2lwaGVyc3VpdGVzKCkpOwotCi0gIC8qIENoZWNrIGlmIHRoZXJlJ3MgYSBjYWNoZWQgSUQgd2UgY2FuL3Nob3VsZCB1c2UgaGVyZSEgKi8KLSAgaWYoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKSB7Ci0gICAgdm9pZCAqb2xkX3Nlc3Npb24gPSBOVUxMOwotCi0gICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3Nlc3Npb24sIE5VTEwsIHNvY2tpbmRleCkpIHsKLSAgICAgIHJldCA9IHNzbF9zZXRfc2Vzc2lvbigmQkFDS0VORC0+c3NsLCBvbGRfc2Vzc2lvbik7Ci0gICAgICBpZihyZXQpIHsKLSAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInNzbF9zZXRfc2Vzc2lvbiByZXR1cm5lZCAtMHgleCIsIC1yZXQpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgICB9Ci0gICAgICBpbmZvZihkYXRhLCAiUG9sYXJTU0wgcmUtdXNpbmcgc2Vzc2lvblxuIik7Ci0gICAgfQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gIH0KLQotICBzc2xfc2V0X2NhX2NoYWluKCZCQUNLRU5ELT5zc2wsCi0gICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNhY2VydCwKLSAgICAgICAgICAgICAgICAgICAmQkFDS0VORC0+Y3JsLAotICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lKTsKLQotICBzc2xfc2V0X293bl9jZXJ0X3JzYSgmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICAgICAgICAgICAmQkFDS0VORC0+Y2xpY2VydCwgJkJBQ0tFTkQtPnJzYSk7Ci0KLSAgaWYoc3NsX3NldF9ob3N0bmFtZSgmQkFDS0VORC0+c3NsLCBob3N0bmFtZSkpIHsKLSAgICAvKiBzc2xfc2V0X2hvc3RuYW1lKCkgc2V0cyB0aGUgbmFtZSB0byB1c2UgaW4gQ04vU0FOIGNoZWNrcyAqYW5kKiB0aGUgbmFtZQotICAgICAgIHRvIHNldCBpbiB0aGUgU05JIGV4dGVuc2lvbi4gU28gZXZlbiBpZiBjdXJsIGNvbm5lY3RzIHRvIGEgaG9zdAotICAgICAgIHNwZWNpZmllZCBhcyBhbiBJUCBhZGRyZXNzLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZC4gKi8KLSAgICBmYWlsZihkYXRhLCAiY291bGRuJ3Qgc2V0IGhvc3RuYW1lIGluIFBvbGFyU1NMIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSNpZmRlZiBIQVNfQUxQTgotICBpZihjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbikgewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpwcm90b2NvbHNbM107Ci0gICAgaW50IGN1ciA9IDA7Ci0KLSNpZmRlZiBVU0VfTkdIVFRQMgotICAgIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yKSB7Ci0gICAgICBwcm90b2NvbHNbY3VyKytdID0gTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEOwotICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIG9mZmVyaW5nICVzXG4iLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcHJvdG9jb2xzW2N1cisrXSA9IEFMUE5fSFRUUF8xXzE7Ci0gICAgaW5mb2YoZGF0YSwgIkFMUE4sIG9mZmVyaW5nICVzXG4iLCBBTFBOX0hUVFBfMV8xKTsKLQotICAgIHByb3RvY29sc1tjdXJdID0gTlVMTDsKLQotICAgIHNzbF9zZXRfYWxwbl9wcm90b2NvbHMoJkJBQ0tFTkQtPnNzbCwgcHJvdG9jb2xzKTsKLSAgfQotI2VuZGlmCi0KLSNpZmRlZiBQT0xBUlNTTF9ERUJVRwotICBzc2xfc2V0X2RiZygmQkFDS0VORC0+c3NsLCBwb2xhcnNzbF9kZWJ1ZywgZGF0YSk7Ci0jZW5kaWYKLQotICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMjsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZQotcG9sYXJzc2xfY29ubmVjdF9zdGVwMihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIGludCByZXQ7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSogY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY2hhciBidWZmZXJbMTAyNF07Ci0gIGNvbnN0IGNoYXIgKiBjb25zdCBwaW5uZWRwdWJrZXkgPSBTU0xfSVNfUFJPWFkoKSA/Ci0gICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX1BST1hZXSA6Ci0gICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOwotCi0KLSAgY2hhciBlcnJvcmJ1ZlsxMjhdOwotICBlcnJvcmJ1ZlswXSA9IDA7Ci0KLSAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gcG9sYXJzc2xfcmVjdjsKLSAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gcG9sYXJzc2xfc2VuZDsKLQotICByZXQgPSBzc2xfaGFuZHNoYWtlKCZCQUNLRU5ELT5zc2wpOwotCi0gIHN3aXRjaChyZXQpIHsKLSAgY2FzZSAwOgotICAgIGJyZWFrOwotCi0gIGNhc2UgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQ6Ci0gICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgY2FzZSBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfV1JJVEU6Ci0gICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgZGVmYXVsdDoKLSAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICBmYWlsZihkYXRhLCAic3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgIC1yZXQsIGVycm9yYnVmKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IEhhbmRzaGFrZSBjb21wbGV0ZSwgY2lwaGVyIGlzICVzXG4iLAotICAgICAgICBzc2xfZ2V0X2NpcGhlcnN1aXRlKCZCQUNLRU5ELT5zc2wpICk7Ci0KLSAgcmV0ID0gc3NsX2dldF92ZXJpZnlfcmVzdWx0KCZCQUNLRU5ELT5zc2wpOwotCi0gIGlmKHJldCAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKLSAgICBpZihyZXQgJiBCQURDRVJUX0VYUElSRUQpCi0gICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX0VYUElSRUQiKTsKLQotICAgIGlmKHJldCAmIEJBRENFUlRfUkVWT0tFRCkgewotICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9SRVZPS0VEIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotICAgIH0KLQotICAgIGlmKHJldCAmIEJBRENFUlRfQ05fTUlTTUFUQ0gpCi0gICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX0NOX01JU01BVENIIik7Ci0KLSAgICBpZihyZXQgJiBCQURDRVJUX05PVF9UUlVTVEVEKQotICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9OT1RfVFJVU1RFRCIpOwotCi0gICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgfQotCi0gIGlmKHNzbF9nZXRfcGVlcl9jZXJ0KCYoQkFDS0VORC0+c3NsKSkpIHsKLSAgICAvKiBJZiB0aGUgc2Vzc2lvbiB3YXMgcmVzdW1lZCwgdGhlcmUgd2lsbCBiZSBubyBwZWVyIGNlcnRzICovCi0gICAgbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwotCi0gICAgaWYoeDUwOV9jcnRfaW5mbyhidWZmZXIsIHNpemVvZihidWZmZXIpLCAoY2hhciAqKSIqICIsCi0gICAgICAgICAgICAgICAgICAgICBzc2xfZ2V0X3BlZXJfY2VydCgmKEJBQ0tFTkQtPnNzbCkpKSAhPSAtMSkKLSAgICAgIGluZm9mKGRhdGEsICJEdW1waW5nIGNlcnQgaW5mbzpcbiVzXG4iLCBidWZmZXIpOwotICB9Ci0KLSAgLyogYWRhcHRlZCBmcm9tIG1iZWR0bHMuYyAqLwotICBpZihwaW5uZWRwdWJrZXkpIHsKLSAgICBpbnQgc2l6ZTsKLSAgICBDVVJMY29kZSByZXN1bHQ7Ci0gICAgeDUwOV9jcnQgKnA7Ci0gICAgdW5zaWduZWQgY2hhciBwdWJrZXlbUFVCX0RFUl9NQVhfQllURVNdOwotICAgIGNvbnN0IHg1MDlfY3J0ICpwZWVyY2VydDsKLQotICAgIHBlZXJjZXJ0ID0gc3NsX2dldF9wZWVyX2NlcnQoJkJBQ0tFTkQtPnNzbCk7Ci0KLSAgICBpZighcGVlcmNlcnQgfHwgIXBlZXJjZXJ0LT5yYXcucCB8fCAhcGVlcmNlcnQtPnJhdy5sZW4pIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgZHVlIHRvIG1pc3NpbmcgcGVlciBjZXJ0aWZpY2F0ZSIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKLSAgICB9Ci0KLSAgICBwID0gY2FsbG9jKDEsIHNpemVvZigqcCkpOwotCi0gICAgaWYoIXApCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICAgIHg1MDlfY3J0X2luaXQocCk7Ci0KLSAgICAvKiBNYWtlIGEgY29weSBvZiBvdXIgY29uc3QgcGVlcmNlcnQgYmVjYXVzZSBwa193cml0ZV9wdWJrZXlfZGVyCi0gICAgICAgbmVlZHMgYSBub24tY29uc3Qga2V5LCBmb3Igbm93LgotICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvaXNzdWVzLzM5NiAqLwotICAgIGlmKHg1MDlfY3J0X3BhcnNlX2RlcihwLCBwZWVyY2VydC0+cmF3LnAsIHBlZXJjZXJ0LT5yYXcubGVuKSkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBjb3B5aW5nIHBlZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHg1MDlfY3J0X2ZyZWUocCk7Ci0gICAgICBmcmVlKHApOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKLSAgICB9Ci0KLSAgICBzaXplID0gcGtfd3JpdGVfcHVia2V5X2RlcigmcC0+cGssIHB1YmtleSwgUFVCX0RFUl9NQVhfQllURVMpOwotCi0gICAgaWYoc2l6ZSA8PSAwKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIGNvcHlpbmcgcHVibGljIGtleSBmcm9tIHBlZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHg1MDlfY3J0X2ZyZWUocCk7Ci0gICAgICBmcmVlKHApOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKLSAgICB9Ci0KLSAgICAvKiBwa193cml0ZV9wdWJrZXlfZGVyIHdyaXRlcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gKi8KLSAgICByZXN1bHQgPSBDdXJsX3Bpbl9wZWVyX3B1YmtleShkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZHB1YmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHVia2V5W1BVQl9ERVJfTUFYX0JZVEVTIC0gc2l6ZV0sIHNpemUpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgeDUwOV9jcnRfZnJlZShwKTsKLSAgICAgIGZyZWUocCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHg1MDlfY3J0X2ZyZWUocCk7Ci0gICAgZnJlZShwKTsKLSAgfQotCi0jaWZkZWYgSEFTX0FMUE4KLSAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBjb25zdCBjaGFyICpuZXh0X3Byb3RvY29sID0gc3NsX2dldF9hbHBuX3Byb3RvY29sKCZCQUNLRU5ELT5zc2wpOwotCi0gICAgaWYobmV4dF9wcm90b2NvbCAhPSBOVUxMKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiQUxQTiwgc2VydmVyIGFjY2VwdGVkIHRvIHVzZSAlc1xuIiwgbmV4dF9wcm90b2NvbCk7Ci0KLSNpZmRlZiBVU0VfTkdIVFRQMgotICAgICAgaWYoIXN0cm5jbXAobmV4dF9wcm90b2NvbCwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lELAotICAgICAgICAgICAgICAgICAgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEX0xFTikpIHsKLSAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBpZighc3RybmNtcChuZXh0X3Byb3RvY29sLCBBTFBOX0hUVFBfMV8xLCBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpIHsKLSAgICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOwotICAgIEN1cmxfbXVsdGl1c2Vfc3RhdGUoY29ubiwgY29ubi0+bmVnbnBuID09IENVUkxfSFRUUF9WRVJTSU9OXzIgPwotICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7Ci0gIH0KLSNlbmRpZgotCi0gIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8zOwotICBpbmZvZihkYXRhLCAiU1NMIGNvbm5lY3RlZFxuIik7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBDVVJMY29kZSByZXRjb2RlID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLQotICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwotCi0gIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgewotICAgIGludCByZXQ7Ci0gICAgc3NsX3Nlc3Npb24gKm91cl9zc2xfc2Vzc2lvbmlkOwotICAgIHZvaWQgKm9sZF9zc2xfc2Vzc2lvbmlkID0gTlVMTDsKLQotICAgIG91cl9zc2xfc2Vzc2lvbmlkID0gY2FsbG9jKDEsIHNpemVvZihzc2xfc2Vzc2lvbikpOwotICAgIGlmKCFvdXJfc3NsX3Nlc3Npb25pZCkKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCi0gICAgcmV0ID0gc3NsX2dldF9zZXNzaW9uKCZCQUNLRU5ELT5zc2wsIG91cl9zc2xfc2Vzc2lvbmlkKTsKLSAgICBpZihyZXQpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJzc2xfZ2V0X3Nlc3Npb24gcmV0dXJuZWQgLTB4JXgiLCAtcmV0KTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiBJZiB0aGVyZSdzIGFscmVhZHkgYSBtYXRjaGluZyBzZXNzaW9uIGluIHRoZSBjYWNoZSwgZGVsZXRlIGl0ICovCi0gICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwsIHNvY2tpbmRleCkpCi0gICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkX3NzbF9zZXNzaW9uaWQpOwotCi0gICAgcmV0Y29kZSA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBvdXJfc3NsX3Nlc3Npb25pZCwgMCwgc29ja2luZGV4KTsKLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICAgIGlmKHJldGNvZGUpIHsKLSAgICAgIGZyZWUob3VyX3NzbF9zZXNzaW9uaWQpOwotICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCB0byBzdG9yZSBzc2wgc2Vzc2lvbiIpOwotICAgICAgcmV0dXJuIHJldGNvZGU7Ci0gICAgfQotICB9Ci0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgc3NpemVfdCBwb2xhcnNzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBpbnQgcmV0ID0gLTE7Ci0KLSAgcmV0ID0gc3NsX3dyaXRlKCZCQUNLRU5ELT5zc2wsCi0gICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKW1lbSwgbGVuKTsKLQotICBpZihyZXQgPCAwKSB7Ci0gICAgKmN1cmxjb2RlID0gKHJldCA9PSBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfV1JJVEUpID8KLSAgICAgIENVUkxFX0FHQUlOIDogQ1VSTEVfU0VORF9FUlJPUjsKLSAgICByZXQgPSAtMTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIEN1cmxfcG9sYXJzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQotewotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgcnNhX2ZyZWUoJkJBQ0tFTkQtPnJzYSk7Ci0gIHg1MDlfY3J0X2ZyZWUoJkJBQ0tFTkQtPmNsaWNlcnQpOwotICB4NTA5X2NydF9mcmVlKCZCQUNLRU5ELT5jYWNlcnQpOwotICB4NTA5X2NybF9mcmVlKCZCQUNLRU5ELT5jcmwpOwotICBzc2xfZnJlZSgmQkFDS0VORC0+c3NsKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcG9sYXJzc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07Ci0gIGludCByZXQgPSAtMTsKLSAgc3NpemVfdCBsZW4gPSAtMTsKLQotICBtZW1zZXQoYnVmLCAwLCBidWZmZXJzaXplKTsKLSAgcmV0ID0gc3NsX3JlYWQoJkJBQ0tFTkQtPnNzbCwgKHVuc2lnbmVkIGNoYXIgKilidWYsIGJ1ZmZlcnNpemUpOwotCi0gIGlmKHJldCA8PSAwKSB7Ci0gICAgaWYocmV0ID09IFBPTEFSU1NMX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkpCi0gICAgICByZXR1cm4gMDsKLQotICAgICpjdXJsY29kZSA9IChyZXQgPT0gUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQpID8KLSAgICAgIENVUkxFX0FHQUlOIDogQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBsZW4gPSByZXQ7Ci0KLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHZvaWQgQ3VybF9wb2xhcnNzbF9zZXNzaW9uX2ZyZWUodm9pZCAqcHRyKQotewotICBzc2xfc2Vzc2lvbl9mcmVlKHB0cik7Ci0gIGZyZWUocHRyKTsKLX0KLQotLyogMS4zLjEwIHdhcyB0aGUgZmlyc3QgcmVicmFuZGVkIHZlcnNpb24uIEFsbCBuZXcgcmVsZWFzZXMgKGluIDEuMyBicmFuY2ggYW5kCi0gICBoaWdoZXIpIHdpbGwgYmUgbWJlZCBUTFMgYnJhbmRlZC4uICovCi0KLXN0YXRpYyBzaXplX3QgQ3VybF9wb2xhcnNzbF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCi17Ci0gIHVuc2lnbmVkIGludCB2ZXJzaW9uID0gdmVyc2lvbl9nZXRfbnVtYmVyKCk7Ci0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMvJWQuJWQuJWQiLAotICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPj0gMHgwMTAzMEEwMD8ibWJlZFRMUyI6IlBvbGFyU1NMIiwKLSAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPj4yNCwgKHZlcnNpb24+PjE2KSYweGZmLCAodmVyc2lvbj4+OCkmMHhmZik7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZQotcG9sYXJzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9uYmxvY2tpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIGxvbmcgdGltZW91dF9tczsKLSAgaW50IHdoYXQ7Ci0KLSAgLyogY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCAqLwotICBpZihzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSA9PSBjb25uc3NsLT5zdGF0ZSkgewotICAgICpkb25lID0gVFJVRTsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gIH0KLQotICBpZihzc2xfY29ubmVjdF8xID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKLSAgICAvKiBGaW5kIG91dCBob3cgbXVjaCBtb3JlIHRpbWUgd2UncmUgYWxsb3dlZCAqLwotICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwotCi0gICAgaWYodGltZW91dF9tcyA8IDApIHsKLSAgICAgIC8qIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCi0gICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOwotICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBwb2xhcnNzbF9jb25uZWN0X3N0ZXAxKGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHdoaWxlKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotCi0gICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KLSAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQotICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgfQotCi0gICAgLyogaWYgc3NsIGlzIGV4cGVjdGluZyBzb21ldGhpbmcsIGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlLiAqLwotICAgIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nIHx8Ci0gICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8yX3dyaXRpbmcpIHsKLQotICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkID0gc3NsX2Nvbm5lY3RfMl93cml0aW5nID09Ci0gICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKLSAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09Ci0gICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKLQotICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7Ci0gICAgICBpZih3aGF0IDwgMCkgewotICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwotICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgfQotICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKLSAgICAgICAgaWYobm9uYmxvY2tpbmcpIHsKLSAgICAgICAgICAqZG9uZSA9IEZBTFNFOwotICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAvKiB0aW1lb3V0ICovCi0gICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBzb2NrZXQgaXMgcmVhZGFibGUgb3Igd3JpdGFibGUgKi8KLSAgICB9Ci0KLSAgICAvKiBSdW4gdHJhbnNhY3Rpb24sIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciBpZiBpdCBmYWlsZWQgb3IgaWYKLSAgICAgKiB0aGlzIGNvbm5lY3Rpb24gaXMgcGFydCBvZiBhIG11bHRpIGhhbmRsZSBhbmQgdGhpcyBsb29wIHdvdWxkCi0gICAgICogZXhlY3V0ZSBhZ2Fpbi4gVGhpcyBwZXJtaXRzIHRoZSBvd25lciBvZiBhIG11bHRpIGhhbmRsZSB0bwotICAgICAqIGFib3J0IGEgY29ubmVjdGlvbiBhdHRlbXB0IGJlZm9yZSBzdGVwMiBoYXMgY29tcGxldGVkIHdoaWxlCi0gICAgICogZW5zdXJpbmcgdGhhdCBhIGNsaWVudCB1c2luZyBzZWxlY3QoKSBvciBlcG9sbCgpIHdpbGwgYWx3YXlzCi0gICAgICogaGF2ZSBhIHZhbGlkIGZkc2V0IHRvIHdhaXQgb24uCi0gICAgICovCi0gICAgcmVzdWx0ID0gcG9sYXJzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCB8fCAobm9uYmxvY2tpbmcgJiYKLSAgICAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCi0gICAgICByZXR1cm4gcmVzdWx0OwotCi0gIH0gLyogcmVwZWF0IHN0ZXAyIHVudGlsIGFsbCB0cmFuc2FjdGlvbnMgYXJlIGRvbmUuICovCi0KLSAgaWYoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgcmVzdWx0ID0gcG9sYXJzc2xfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBpZihzc2xfY29ubmVjdF9kb25lID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKLSAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOwotICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHBvbGFyc3NsX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gcG9sYXJzc2xfc2VuZDsKLSAgICAqZG9uZSA9IFRSVUU7Ci0gIH0KLSAgZWxzZQotICAgICpkb25lID0gRkFMU0U7Ci0KLSAgLyogUmVzZXQgb3VyIGNvbm5lY3Qgc3RhdGUgbWFjaGluZSAqLwotICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBDdXJsX3BvbGFyc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQotewotICByZXR1cm4gcG9sYXJzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBUUlVFLCBkb25lKTsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotICBib29sIGRvbmUgPSBGQUxTRTsKLQotICByZXN1bHQgPSBwb2xhcnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7Ci0gIGlmKHJlc3VsdCkKLSAgICByZXR1cm4gcmVzdWx0OwotCi0gIERFQlVHQVNTRVJUKGRvbmUpOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotLyoKLSAqIHJldHVybiAwIGVycm9yIGluaXRpYWxpemluZyBTU0wKLSAqIHJldHVybiAxIFNTTCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkKLSAqLwotc3RhdGljIGludCBDdXJsX3BvbGFyc3NsX2luaXQodm9pZCkKLXsKLSAgcmV0dXJuIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9zZXR1cCgpOwotfQotCi1zdGF0aWMgdm9pZCBDdXJsX3BvbGFyc3NsX2NsZWFudXAodm9pZCkKLXsKLSAgKHZvaWQpQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAoKTsKLX0KLQotc3RhdGljIGJvb2wgQ3VybF9wb2xhcnNzbF9kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKLXsKLSAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIHJldHVybiBzc2xfZ2V0X2J5dGVzX2F2YWlsKCZCQUNLRU5ELT5zc2wpICE9IDA7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBDdXJsX3BvbGFyc3NsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTI1NnN1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaGEyNTZsZW4gVU5VU0VEX1BBUkFNKQotewotICAodm9pZClzaGEyNTZsZW47Ci0gIHNoYTI1NihpbnB1dCwgaW5wdXRsZW4sIHNoYTI1NnN1bSwgMCk7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIHZvaWQgKkN1cmxfcG9sYXJzc2xfZ2V0X2ludGVybmFscyhzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk8gaW5mbyBVTlVTRURfUEFSQU0pCi17Ci0gICh2b2lkKWluZm87Ci0gIHJldHVybiAmQkFDS0VORC0+c3NsOwotfQotCi1jb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfcG9sYXJzc2wgPSB7Ci0gIHsgQ1VSTFNTTEJBQ0tFTkRfUE9MQVJTU0wsICJwb2xhcnNzbCIgfSwgLyogaW5mbyAqLwotCi0gIFNTTFNVUFBfQ0FfUEFUSCB8Ci0gIFNTTFNVUFBfUElOTkVEUFVCS0VZLAotCi0gIHNpemVvZihzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSksCi0KLSAgQ3VybF9wb2xhcnNzbF9pbml0LCAgICAgICAgICAgICAgICAvKiBpbml0ICovCi0gIEN1cmxfcG9sYXJzc2xfY2xlYW51cCwgICAgICAgICAgICAgLyogY2xlYW51cCAqLwotICBDdXJsX3BvbGFyc3NsX3ZlcnNpb24sICAgICAgICAgICAgIC8qIHZlcnNpb24gKi8KLSAgQ3VybF9ub25lX2NoZWNrX2N4biwgICAgICAgICAgICAgICAvKiBjaGVja19jeG4gKi8KLSAgQ3VybF9ub25lX3NodXRkb3duLCAgICAgICAgICAgICAgICAvKiBzaHV0ZG93biAqLwotICBDdXJsX3BvbGFyc3NsX2RhdGFfcGVuZGluZywgICAgICAgIC8qIGRhdGFfcGVuZGluZyAqLwotICAvKiBUaGlzIG1pZ2h0IGNhdXNlIGxpYmN1cmwgdG8gdXNlIGEgd2Vla2VyIHJhbmRvbSEgKi8KLSAgQ3VybF9ub25lX3JhbmRvbSwgICAgICAgICAgICAgICAgICAvKiByYW5kb20gKi8KLSAgQ3VybF9ub25lX2NlcnRfc3RhdHVzX3JlcXVlc3QsICAgICAvKiBjZXJ0X3N0YXR1c19yZXF1ZXN0ICovCi0gIEN1cmxfcG9sYXJzc2xfY29ubmVjdCwgICAgICAgICAgICAgLyogY29ubmVjdCAqLwotICBDdXJsX3BvbGFyc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcsIC8qIGNvbm5lY3Rfbm9uYmxvY2tpbmcgKi8KLSAgQ3VybF9wb2xhcnNzbF9nZXRfaW50ZXJuYWxzLCAgICAgICAvKiBnZXRfaW50ZXJuYWxzICovCi0gIEN1cmxfcG9sYXJzc2xfY2xvc2UsICAgICAgICAgICAgICAgLyogY2xvc2Vfb25lICovCi0gIEN1cmxfbm9uZV9jbG9zZV9hbGwsICAgICAgICAgICAgICAgLyogY2xvc2VfYWxsICovCi0gIEN1cmxfcG9sYXJzc2xfc2Vzc2lvbl9mcmVlLCAgICAgICAgLyogc2Vzc2lvbl9mcmVlICovCi0gIEN1cmxfbm9uZV9zZXRfZW5naW5lLCAgICAgICAgICAgICAgLyogc2V0X2VuZ2luZSAqLwotICBDdXJsX25vbmVfc2V0X2VuZ2luZV9kZWZhdWx0LCAgICAgIC8qIHNldF9lbmdpbmVfZGVmYXVsdCAqLwotICBDdXJsX25vbmVfZW5naW5lc19saXN0LCAgICAgICAgICAgIC8qIGVuZ2luZXNfbGlzdCAqLwotICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsICAgICAgICAgICAgIC8qIGZhbHNlX3N0YXJ0ICovCi0gIEN1cmxfbm9uZV9tZDVzdW0sICAgICAgICAgICAgICAgICAgLyogbWQ1c3VtICovCi0gIEN1cmxfcG9sYXJzc2xfc2hhMjU2c3VtICAgICAgICAgICAgLyogc2hhMjU2c3VtICovCi19OwotCi0jZW5kaWYgLyogVVNFX1BPTEFSU1NMICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYzM2MzYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9ICi0jZGVmaW5lIEhFQURFUl9DVVJMX1BPTEFSU1NMX0gKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfUE9MQVJTU0wKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9wb2xhcnNzbDsKLQotI2VuZGlmIC8qIFVTRV9QT0xBUlNTTCAqLwotI2VuZGlmIC8qIEhFQURFUl9DVVJMX1BPTEFSU1NMX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3Yzk0YjEuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwotICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZiAoZGVmaW5lZChVU0VfUE9MQVJTU0wpIHx8IGRlZmluZWQoVVNFX01CRURUTFMpKSAmJiBcCi0gICAgKChkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKSkgfHwgXAotICAgICAoZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkpKQotCi0jaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKLSMgIGluY2x1ZGUgPHB0aHJlYWQuaD4KLSMgIGRlZmluZSBQT0xBUlNTTF9NVVRFWF9UIHB0aHJlYWRfbXV0ZXhfdAotI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKLSMgIGluY2x1ZGUgPHByb2Nlc3MuaD4KLSMgIGRlZmluZSBQT0xBUlNTTF9NVVRFWF9UIEhBTkRMRQotI2VuZGlmCi0KLSNpbmNsdWRlICJwb2xhcnNzbF90aHJlYWRsb2NrLmgiCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCi0jaW5jbHVkZSAibWVtZGVidWcuaCIKLQotLyogbnVtYmVyIG9mIHRocmVhZCBsb2NrcyAqLwotI2RlZmluZSBOVU1UICAgICAgICAgICAgICAgICAgICAyCi0KLS8qIFRoaXMgYXJyYXkgd2lsbCBzdG9yZSBhbGwgb2YgdGhlIG11dGV4ZXMgYXZhaWxhYmxlIHRvIFBvbGFyU1NMLiAqLwotc3RhdGljIFBPTEFSU1NMX01VVEVYX1QgKm11dGV4X2J1ZiA9IE5VTEw7Ci0KLWludCBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfc2V0dXAodm9pZCkKLXsKLSAgaW50IGk7Ci0KLSAgbXV0ZXhfYnVmID0gY2FsbG9jKE5VTVQgKiBzaXplb2YoUE9MQVJTU0xfTVVURVhfVCksIDEpOwotICBpZighbXV0ZXhfYnVmKQotICAgIHJldHVybiAwOyAgICAgLyogZXJyb3IsIG5vIG51bWJlciBvZiB0aHJlYWRzIGRlZmluZWQgKi8KLQotICBmb3IoaSA9IDA7ICBpIDwgTlVNVDsgIGkrKykgewotICAgIGludCByZXQ7Ci0jaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKLSAgICByZXQgPSBwdGhyZWFkX211dGV4X2luaXQoJm11dGV4X2J1ZltpXSwgTlVMTCk7Ci0gICAgaWYocmV0KQotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfaW5pdCBmYWlsZWQgKi8KLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0gICAgbXV0ZXhfYnVmW2ldID0gQ3JlYXRlTXV0ZXgoMCwgRkFMU0UsIDApOwotICAgIGlmKG11dGV4X2J1ZltpXSA9PSAwKQotICAgICAgcmV0dXJuIDA7ICAvKiBDcmVhdGVNdXRleCBmYWlsZWQgKi8KLSNlbmRpZiAvKiBVU0VfVEhSRUFEU19QT1NJWCAmJiBIQVZFX1BUSFJFQURfSCAqLwotICB9Ci0KLSAgcmV0dXJuIDE7IC8qIE9LICovCi19Ci0KLWludCBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCh2b2lkKQotewotICBpbnQgaTsKLQotICBpZighbXV0ZXhfYnVmKQotICAgIHJldHVybiAwOyAvKiBlcnJvciwgbm8gdGhyZWFkcyBsb2NrcyBkZWZpbmVkICovCi0KLSAgZm9yKGkgPSAwOyBpIDwgTlVNVDsgaSsrKSB7Ci0gICAgaW50IHJldDsKLSNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQotICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbXV0ZXhfYnVmW2ldKTsKLSAgICBpZihyZXQpCi0gICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9kZXN0cm95IGZhaWxlZCAqLwotI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKLSAgICByZXQgPSBDbG9zZUhhbmRsZShtdXRleF9idWZbaV0pOwotICAgIGlmKCFyZXQpCi0gICAgICByZXR1cm4gMDsgLyogQ2xvc2VIYW5kbGUgZmFpbGVkICovCi0jZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KLSAgfQotICBmcmVlKG11dGV4X2J1Zik7Ci0gIG11dGV4X2J1ZiA9IE5VTEw7Ci0KLSAgcmV0dXJuIDE7IC8qIE9LICovCi19Ci0KLWludCBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKGludCBuKQotewotICBpZihuIDwgTlVNVCkgewotICAgIGludCByZXQ7Ci0jaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKLSAgICByZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4X2J1ZltuXSk7Ci0gICAgaWYocmV0KSB7Ci0gICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IHBvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOwotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KLSAgICB9Ci0jZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQotICAgIHJldCA9IChXYWl0Rm9yU2luZ2xlT2JqZWN0KG11dGV4X2J1ZltuXSwgSU5GSU5JVEUpID09IFdBSVRfRkFJTEVEPzE6MCk7Ci0gICAgaWYocmV0KSB7Ci0gICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IHBvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOwotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KLSAgfQotICByZXR1cm4gMTsgLyogT0sgKi8KLX0KLQotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbikKLXsKLSAgaWYobiA8IE5VTVQpIHsKLSAgICBpbnQgcmV0OwotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4X2J1ZltuXSk7Ci0gICAgaWYocmV0KSB7Ci0gICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IHBvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24gZmFpbGVkXG4iKSk7Ci0gICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF91bmxvY2sgZmFpbGVkICovCi0gICAgfQotI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKLSAgICByZXQgPSBSZWxlYXNlTXV0ZXgobXV0ZXhfYnVmW25dKTsKLSAgICBpZighcmV0KSB7Ci0gICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IHBvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24gZmFpbGVkXG4iKSk7Ci0gICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9sb2NrIGZhaWxlZCAqLwotICAgIH0KLSNlbmRpZiAvKiBVU0VfVEhSRUFEU19QT1NJWCAmJiBIQVZFX1BUSFJFQURfSCAqLwotICB9Ci0gIHJldHVybiAxOyAvKiBPSyAqLwotfQotCi0jZW5kaWYgLyogVVNFX1BPTEFSU1NMIHx8IFVTRV9NQkVEVExTICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjI2NDc1Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI2lmbmRlZiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9USFJFQURMT0NLX0gKLSNkZWZpbmUgSEVBREVSX0NVUkxfUE9MQVJTU0xfVEhSRUFETE9DS19ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwotICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCi0gKgotICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmIChkZWZpbmVkIFVTRV9QT0xBUlNTTCkgfHwgKGRlZmluZWQgVVNFX01CRURUTFMpCi0KLSNpZiAoZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkpIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkpCi0KLWludCBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfc2V0dXAodm9pZCk7Ci1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCk7Ci1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbihpbnQgbik7Ci1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKGludCBuKTsKLQotI2Vsc2UKLQotI2RlZmluZSBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfc2V0dXAoKSAxCi0jZGVmaW5lIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKCkgMQotI2RlZmluZSBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKHgpIDEKLSNkZWZpbmUgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKHgpIDEKLQotI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYIHx8IFVTRV9USFJFQURTX1dJTjMyICovCi0KLSNlbmRpZiAvKiBVU0VfUE9MQVJTU0wgKi8KLQotI2VuZGlmIC8qIEhFQURFUl9DVVJMX1BPTEFSU1NMX1RIUkVBRExPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbC5jCmluZGV4IDBmNmY3MzQuLjA4MThkOTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWwuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNiwgTWFyYyBIb2Vyc2tlbiwgPGluZm9AbWFyYy1ob2Vyc2tlbi5kZT4KICAqIENvcHlyaWdodCAoQykgMjAxMiwgTWFyayBTYWxpc2J1cnksIDxtYXJrLnNhbGlzYnVyeUBocC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTU0LDEwICs1NTQsNiBAQAogICAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgc2NoYW5uZWxfY3JlZC5ncmJpdEVuYWJsZWRQcm90b2NvbHMgPSBTUF9QUk9UX1RMUzFfMF9DTElFTlQgfAotICAgICAgICBTUF9QUk9UX1RMUzFfMV9DTElFTlQgfAotICAgICAgICBTUF9QUk9UX1RMUzFfMl9DTElFTlQ7Ci0gICAgICBicmVhazsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKQEAgLTcyMiw3ICs3MTgsNyBAQAogICAgIHVuc2lnbmVkIHNob3J0KiBsaXN0X2xlbiA9IE5VTEw7CiAKICAgICAvKiBUaGUgZmlyc3QgZm91ciBieXRlcyB3aWxsIGJlIGFuIHVuc2lnbmVkIGludCBpbmRpY2F0aW5nIG51bWJlcgotICAgICAgIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIHRoZSBidWZmZXIuICovCisgICAgICAgb2YgYnl0ZXMgb2YgZGF0YSBpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLiAqLwogICAgIGV4dGVuc2lvbl9sZW4gPSAodW5zaWduZWQgaW50ICopKCZhbHBuX2J1ZmZlcltjdXJdKTsKICAgICBjdXIgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAKQEAgLTExODEsNiArMTE3Nyw3IEBACiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubjsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBpbnQgaWR4OworICBpbnQgY2VydHNfY291bnQ7CiB9OwogCiBzdGF0aWMgYm9vbApAQCAtMTE5MSw3ICsxMTg4LDkgQEAKICAgaWYodmFsaWRfY2VydF9lbmNvZGluZyhjY2VydF9jb250ZXh0KSkgewogICAgIGNvbnN0IGNoYXIgKmJlZyA9IChjb25zdCBjaGFyICopIGNjZXJ0X2NvbnRleHQtPnBiQ2VydEVuY29kZWQ7CiAgICAgY29uc3QgY2hhciAqZW5kID0gYmVnICsgY2NlcnRfY29udGV4dC0+Y2JDZXJ0RW5jb2RlZDsKLSAgICBhcmdzLT5yZXN1bHQgPSBDdXJsX2V4dHJhY3RfY2VydGluZm8oYXJncy0+Y29ubiwgKGFyZ3MtPmlkeCkrKywgYmVnLCBlbmQpOworICAgIGludCBpbnNlcnRfaW5kZXggPSAoYXJncy0+Y2VydHNfY291bnQgLSAxKSAtIGFyZ3MtPmlkeDsKKyAgICBhcmdzLT5yZXN1bHQgPSBDdXJsX2V4dHJhY3RfY2VydGluZm8oYXJncy0+Y29ubiwgaW5zZXJ0X2luZGV4LCBiZWcsIGVuZCk7CisgICAgYXJncy0+aWR4Kys7CiAgIH0KICAgcmV0dXJuIGFyZ3MtPnJlc3VsdCA9PSBDVVJMRV9PSzsKIH0KQEAgLTEzMjYsNiArMTMyNSw3IEBACiAgICAgICBzdHJ1Y3QgQWRkZXJfYXJncyBhcmdzOwogICAgICAgYXJncy5jb25uID0gY29ubjsKICAgICAgIGFyZ3MuaWR4ID0gMDsKKyAgICAgIGFyZ3MuY2VydHNfY291bnQgPSBjZXJ0c19jb3VudDsKICAgICAgIHRyYXZlcnNlX2NlcnRfc3RvcmUoY2NlcnRfY29udGV4dCwgYWRkX2NlcnRfdG9fY2VydGluZm8sICZhcmdzKTsKICAgICAgIHJlc3VsdCA9IGFyZ3MucmVzdWx0OwogICAgIH0KQEAgLTEzNDcsNyArMTM0Nyw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIHRpbWVfdCB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIGludCB3aGF0OwogCiAgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KQEAgLTEzOTQsNyArMTM5NCw3IEBACiAgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPyBzb2NrZmQgOiBDVVJMX1NPQ0tFVF9CQUQ7CiAKICAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZyA/IDAgOiB0aW1lb3V0X21zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZyA/IDAgOiAodGltZV90KXRpbWVvdXRfbXMpOwogICAgICAgaWYod2hhdCA8IDApIHsKICAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTC9UTFMgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtMTU0NCw3ICsxNTQ0LDcgQEAKICAgICAvKiBzZW5kIGVudGlyZSBtZXNzYWdlIG9yIGZhaWwgKi8KICAgICB3aGlsZShsZW4gPiAoc2l6ZV90KXdyaXR0ZW4pIHsKICAgICAgIHNzaXplX3QgdGhpc193cml0ZTsKLSAgICAgIHRpbWVfdCB0aW1lbGVmdDsKKyAgICAgIHRpbWVkaWZmX3QgdGltZWxlZnQ7CiAgICAgICBpbnQgd2hhdDsKIAogICAgICAgdGhpc193cml0ZSA9IDA7CkBAIC0xODU1LDcgKzE4NTUsOSBAQAogICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KICAgICBlbHNlIHsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyNlbmRpZgogICAgICAgKmVyciA9IENVUkxFX1JFQ1ZfRVJST1I7CiAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IGZhaWxlZCB0byByZWFkIGRhdGEgZnJvbSBzZXJ2ZXI6ICVzXG4iLAogICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsX3ZlcmlmeS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbF92ZXJpZnkuYwppbmRleCA1YTA5ZTk2Li5lNzUxMzJjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsX3ZlcmlmeS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWxfdmVyaWZ5LmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNiwgTWFyYyBIb2Vyc2tlbiwgPGluZm9AbWFyYy1ob2Vyc2tlbi5kZT4KICAqIENvcHlyaWdodCAoQykgMjAxMiwgTWFyayBTYWxpc2J1cnksIDxtYXJrLnNhbGlzYnVyeUBocC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtOTksNyArOTksOCBAQAogICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IGludmFsaWQgcGF0aCBuYW1lIGZvciBDQSBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICBjYV9maWxlLCBDdXJsX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgICAgY2FfZmlsZSwKKyAgICAgICAgICBDdXJsX3dpbmFwaV9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICBnb3RvIGNsZWFudXA7CiAgIH0KQEAgLTExMSw3ICsxMTIsNyBAQAogICAgKi8KICAgY2FfZmlsZV9oYW5kbGUgPSBDcmVhdGVGaWxlKGNhX2ZpbGVfdHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1NIQVJFX1JFQUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKQEAgLTEyMCw3ICsxMjEsOCBAQAogICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IGZhaWxlZCB0byBvcGVuIENBIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICBjYV9maWxlLAorICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQpAQCAtMTI5LDcgKzEzMSw4IEBACiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIGRldGVybWluZSBzaXplIG9mIENBIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICBjYV9maWxlLAorICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQpAQCAtMTU5LDcgKzE2Miw4IEBACiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIHJlYWQgZnJvbSBDQSBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgIGNhX2ZpbGUsCisgICAgICAgICAgICBDdXJsX3dpbmFwaV9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTIyMyw3ICsyMjcsNyBAQAogICAgICAgICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIGV4dHJhY3QgY2VydGlmaWNhdGUgZnJvbSBDQSBmaWxlICIKICAgICAgICAgICAgICAgICAiJyVzJzogJXMiLAogICAgICAgICAgICAgICAgIGNhX2ZpbGUsCi0gICAgICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgICAgIG1vcmVfY2VydHMgPSAwOwogICAgICAgICB9CkBAIC0yNTIsNyArMjU2LDggQEAKICAgICAgICAgICAgICAgICAgICAgInNjaGFubmVsOiBmYWlsZWQgdG8gYWRkIGNlcnRpZmljYXRlIGZyb20gQ0EgZmlsZSAnJXMnICIKICAgICAgICAgICAgICAgICAgICAgInRvIGNlcnRpZmljYXRlIHN0b3JlOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgIGNhX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgICAgICAgICBtb3JlX2NlcnRzID0gMDsKICAgICAgICAgICAgIH0KQEAgLTI4OCw2ICsyOTMsMTMzIEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBuZWNlc3NhcnkgdG8gcG9wdWxhdGUgYWxsIHRoZSBob3N0X25hbWVzLgorICogSWYgaG9zdF9uYW1lcyBpcyBub3QgTlVMTCwgcG9wdWxhdGUgaXQgd2l0aCBhbGwgdGhlIGhvc3QgbmFtZXMuIEVhY2ggc3RyaW5nCisgKiBpbiB0aGUgaG9zdF9uYW1lcyBpcyBudWxsLXRlcm1pbmF0ZWQgYW5kIHRoZSBsYXN0IHN0cmluZyBpcyBkb3VibGUKKyAqIG51bGwtdGVybWluYXRlZC4gSWYgbm8gRE5TIG5hbWVzIGFyZSBmb3VuZCwgYSBzaW5nbGUgbnVsbC10ZXJtaW5hdGVkIGVtcHR5CisgKiBzdHJpbmcgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBEV09SRCBjZXJ0X2dldF9uYW1lX3N0cmluZyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfQ09OVEVYVCAqY2VydF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVFNUUiBob3N0X25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGxlbmd0aCkKK3sKKyAgRFdPUkQgYWN0dWFsX2xlbmd0aCA9IDA7CisgIEJPT0wgY29tcHV0ZV9jb250ZW50ID0gRkFMU0U7CisgIENFUlRfSU5GTyAqY2VydF9pbmZvID0gTlVMTDsKKyAgQ0VSVF9FWFRFTlNJT04gKmV4dGVuc2lvbiA9IE5VTEw7CisgIENSWVBUX0RFQ09ERV9QQVJBIGRlY29kZV9wYXJhID0gezAsIDAsIDB9OworICBDRVJUX0FMVF9OQU1FX0lORk8gKmFsdF9uYW1lX2luZm8gPSBOVUxMOworICBEV09SRCBhbHRfbmFtZV9pbmZvX3NpemUgPSAwOworICBCT09MIHJldF92YWwgPSBGQUxTRTsKKyAgTFBUU1RSIGN1cnJlbnRfcG9zID0gTlVMTDsKKyAgRFdPUkQgaTsKKworICAvKiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHIGlzIGF2YWlsYWJsZSBmcm9tIFdpbmRvd3MgOCBvbndhcmRzLiAqLworICBpZihDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNiwgMiwgUExBVEZPUk1fV0lOTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0dSRUFURVJfVEhBTl9FUVVBTCkpIHsKKyNpZmRlZiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHCisgICAgLyogQ2VydEdldE5hbWVTdHJpbmcgd2lsbCBwcm92aWRlIHRoZSA4LWJpdCBjaGFyYWN0ZXIgc3RyaW5nIHdpdGhvdXQKKyAgICAgKiBhbnkgZGVjb2RpbmcgKi8KKyAgICBEV09SRCBuYW1lX2ZsYWdzID0KKyAgICAgIENFUlRfTkFNRV9ESVNBQkxFX0lFNF9VVEY4X0ZMQUcgfCBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHOworICAgIGFjdHVhbF9sZW5ndGggPSBDZXJ0R2V0TmFtZVN0cmluZyhjZXJ0X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfTkFNRV9ETlNfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyNlbmRpZgorICB9CisKKyAgY29tcHV0ZV9jb250ZW50ID0gaG9zdF9uYW1lcyAhPSBOVUxMICYmIGxlbmd0aCAhPSAwOworCisgIC8qIEluaXRpYWxpemUgZGVmYXVsdCByZXR1cm4gdmFsdWVzLiAqLworICBhY3R1YWxfbGVuZ3RoID0gMTsKKyAgaWYoY29tcHV0ZV9jb250ZW50KSB7CisgICAgKmhvc3RfbmFtZXMgPSAnXDAnOworICB9CisKKyAgaWYoIWNlcnRfY29udGV4dCkgeworICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogTnVsbCBjZXJ0aWZpY2F0ZSBjb250ZXh0LiIpOworICAgIHJldHVybiBhY3R1YWxfbGVuZ3RoOworICB9CisKKyAgY2VydF9pbmZvID0gY2VydF9jb250ZXh0LT5wQ2VydEluZm87CisgIGlmKCFjZXJ0X2luZm8pIHsKKyAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IE51bGwgY2VydGlmaWNhdGUgaW5mby4iKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyAgfQorCisgIGV4dGVuc2lvbiA9IENlcnRGaW5kRXh0ZW5zaW9uKHN6T0lEX1NVQkpFQ1RfQUxUX05BTUUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2luZm8tPmNFeHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfaW5mby0+cmdFeHRlbnNpb24pOworICBpZighZXh0ZW5zaW9uKSB7CisgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBDZXJ0RmluZEV4dGVuc2lvbigpIHJldHVybmVkIG5vIGV4dGVuc2lvbi4iKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyAgfQorCisgIGRlY29kZV9wYXJhLmNiU2l6ZSAgPSAgc2l6ZW9mKENSWVBUX0RFQ09ERV9QQVJBKTsKKworICByZXRfdmFsID0KKyAgICBDcnlwdERlY29kZU9iamVjdEV4KFg1MDlfQVNOX0VOQ09ESU5HIHwgUEtDU183X0FTTl9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6T0lEX1NVQkpFQ1RfQUxUX05BTUUyLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLT5WYWx1ZS5wYkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24tPlZhbHVlLmNiRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX0RFQ09ERV9BTExPQ19GTEFHIHwgQ1JZUFRfREVDT0RFX05PQ09QWV9GTEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgJmRlY29kZV9wYXJhLAorICAgICAgICAgICAgICAgICAgICAgICAgJmFsdF9uYW1lX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAmYWx0X25hbWVfaW5mb19zaXplKTsKKyAgaWYoIXJldF92YWwpIHsKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJzY2hhbm5lbDogQ3J5cHREZWNvZGVPYmplY3RFeCgpIHJldHVybmVkIG5vIGFsdGVybmF0ZSBuYW1lICIKKyAgICAgICAgICAiaW5mb3JtYXRpb24uIik7CisgICAgcmV0dXJuIGFjdHVhbF9sZW5ndGg7CisgIH0KKworICBjdXJyZW50X3BvcyA9IGhvc3RfbmFtZXM7CisKKyAgLyogSXRlcmF0ZSBvdmVyIHRoZSBhbHRlcm5hdGUgbmFtZXMgYW5kIHBvcHVsYXRlIGhvc3RfbmFtZXMuICovCisgIGZvcihpID0gMDsgaSA8IGFsdF9uYW1lX2luZm8tPmNBbHRFbnRyeTsgaSsrKSB7CisgICAgY29uc3QgQ0VSVF9BTFRfTkFNRV9FTlRSWSAqZW50cnkgPSAmYWx0X25hbWVfaW5mby0+cmdBbHRFbnRyeVtpXTsKKyAgICB3Y2hhcl90ICpkbnNfdyA9IE5VTEw7CisgICAgc2l6ZV90IGN1cnJlbnRfbGVuZ3RoID0gMDsKKworICAgIGlmKGVudHJ5LT5kd0FsdE5hbWVDaG9pY2UgIT0gQ0VSVF9BTFRfTkFNRV9ETlNfTkFNRSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmKGVudHJ5LT5wd3N6RE5TTmFtZSA9PSBOVUxMKSB7CisgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IEVtcHR5IEROUyBuYW1lLiIpOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGN1cnJlbnRfbGVuZ3RoID0gd2NzbGVuKGVudHJ5LT5wd3N6RE5TTmFtZSkgKyAxOworICAgIGlmKCFjb21wdXRlX2NvbnRlbnQpIHsKKyAgICAgIGFjdHVhbF9sZW5ndGggKz0gKERXT1JEKWN1cnJlbnRfbGVuZ3RoOworICAgICAgY29udGludWU7CisgICAgfQorICAgIC8qIFNhbml0eSBjaGVjayB0byBwcmV2ZW50IGJ1ZmZlciBvdmVycnVuLiAqLworICAgIGlmKChhY3R1YWxfbGVuZ3RoICsgY3VycmVudF9sZW5ndGgpID4gbGVuZ3RoKSB7CisgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIGxpc3QgYWxsIGhvc3QgbmFtZXMuIik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZG5zX3cgPSBlbnRyeS0+cHdzekROU05hbWU7CisgICAgLyogcHdzekROU05hbWUgaXMgaW4gaWE1IHN0cmluZyBmb3JtYXQgYW5kIGhlbmNlIGRvZXNuJ3QgY29udGFpbiBhbnkKKyAgICAgKiBub24tYXNjaWkgY2hhcmFjdGVycy4gKi8KKyAgICB3aGlsZSgqZG5zX3cgIT0gJ1wwJykgeworICAgICAgKmN1cnJlbnRfcG9zKysgPSAoY2hhcikoKmRuc193KyspOworICAgIH0KKyAgICAqY3VycmVudF9wb3MrKyA9ICdcMCc7CisgICAgYWN0dWFsX2xlbmd0aCArPSAoRFdPUkQpY3VycmVudF9sZW5ndGg7CisgIH0KKyAgaWYoY29tcHV0ZV9jb250ZW50KSB7CisgICAgLyogTGFzdCBzdHJpbmcgaGFzIGRvdWJsZSBudWxsLXRlcm1pbmF0b3IuICovCisgICAgKmN1cnJlbnRfcG9zID0gJ1wwJzsKKyAgfQorICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKK30KKwogc3RhdGljIENVUkxjb2RlIHZlcmlmeV9ob3N0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVF9DT05URVhUICpwQ2VydENvbnRleHRTZXJ2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IGNvbm5faG9zdG5hbWUpCkBAIC0yOTgsMjEgKzQzMCw4IEBACiAgIERXT1JEIGxlbiA9IDA7CiAgIERXT1JEIGFjdHVhbF9sZW4gPSAwOwogCi0gIC8qIENlcnRHZXROYW1lU3RyaW5nIHdpbGwgcHJvdmlkZSB0aGUgOC1iaXQgY2hhcmFjdGVyIHN0cmluZyB3aXRob3V0Ci0gICAqIGFueSBkZWNvZGluZyAqLwotICBEV09SRCBuYW1lX2ZsYWdzID0gQ0VSVF9OQU1FX0RJU0FCTEVfSUU0X1VURjhfRkxBRzsKLQotI2lmZGVmIENFUlRfTkFNRV9TRUFSQ0hfQUxMX05BTUVTX0ZMQUcKLSAgbmFtZV9mbGFncyB8PSBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHOwotI2VuZGlmCi0KICAgLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgbmVlZGVkIGZvciB0aGUgY2VydCBob3N0bmFtZSAqLwotICBsZW4gPSBDZXJ0R2V0TmFtZVN0cmluZyhwQ2VydENvbnRleHRTZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfTkFNRV9ETlNfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgIGxlbiA9IGNlcnRfZ2V0X25hbWVfc3RyaW5nKGRhdGEsIHBDZXJ0Q29udGV4dFNlcnZlciwgTlVMTCwgMCk7CiAgIGlmKGxlbiA9PSAwKSB7CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IENlcnRHZXROYW1lU3RyaW5nKCkgcmV0dXJuZWQgbm8gIgpAQCAtMzI5LDEyICs0NDgsOCBAQAogICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgZ290byBjbGVhbnVwOwogICB9Ci0gIGFjdHVhbF9sZW4gPSBDZXJ0R2V0TmFtZVN0cmluZyhwQ2VydENvbnRleHRTZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJUX05BTUVfRE5TX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFRTVFIpIGNlcnRfaG9zdG5hbWVfYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbik7CisgIGFjdHVhbF9sZW4gPSBjZXJ0X2dldF9uYW1lX3N0cmluZygKKyAgICBkYXRhLCBwQ2VydENvbnRleHRTZXJ2ZXIsIChMUFRTVFIpY2VydF9ob3N0bmFtZV9idWZmLCBsZW4pOwogCiAgIC8qIFNhbml0eSBjaGVjayAqLwogICBpZihhY3R1YWxfbGVuICE9IGxlbikgewpAQCAtNDYwLDcgKzU3NSw3IEBACiAgICAgICBpZighdHJ1c3Rfc3RvcmUpIHsKICAgICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBmYWlsZWQgdG8gY3JlYXRlIGNlcnRpZmljYXRlIHN0b3JlOiAlcyIsCi0gICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQogICAgICAgZWxzZSB7CkBAIC00ODksNyArNjA0LDcgQEAKICAgICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAgICAgInNjaGFubmVsOiBmYWlsZWQgdG8gY3JlYXRlIGNlcnRpZmljYXRlIGNoYWluIGVuZ2luZTogJXMiLAotICAgICAgICAgICAgICBDdXJsX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICAgIH0KICAgICB9CkBAIC01MTIsNyArNjI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBDaGFpbkNvbnRleHQpKSB7CiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBDZXJ0R2V0Q2VydGlmaWNhdGVDaGFpbiBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICBwQ2hhaW5Db250ZXh0ID0gTlVMTDsKICAgICAgIHJlc3VsdCA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NlY3RyYW5zcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zZWN0cmFuc3AuYwppbmRleCAyZmRmNjYyLi43ZGQwMjhmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NlY3RyYW5zcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2VjdHJhbnNwLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE3LCBOaWNrIFppdHptYW5uLCA8bmlja3ptYW5AZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03OSw3ICs3OSw3IEBACiAvKiBUaGVzZSBtYWNyb3MgbWVhbiAidGhlIGZvbGxvd2luZyBjb2RlIGlzIHByZXNlbnQgdG8gYWxsb3cgcnVudGltZSBiYWNrd2FyZAogICAgY29tcGF0aWJpbGl0eSB3aXRoIGF0IGxlYXN0IHRoaXMgY2F0IG9yIGVhcmxpZXIiOgogICAgKFlvdSBzZXQgdGhpcyBhdCBidWlsZC10aW1lIHVzaW5nIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUgb3B0aW9uCi0gICAiLW1tYWNvcy12ZXJzaW9uLW1pbi4iKSAqLworICAgIi1tbWFjb3N4LXZlcnNpb24tbWluLiIpICovCiAjZGVmaW5lIENVUkxfU1VQUE9SVF9NQUNfMTBfNSBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDUwCiAjZGVmaW5lIENVUkxfU1VQUE9SVF9NQUNfMTBfNiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDYwCiAjZGVmaW5lIENVUkxfU1VQUE9SVF9NQUNfMTBfNyBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDcwCkBAIC0xMTY0LDcgKzExNjQsNyBAQAogICAgKiB0aGUgS2V5Y2hhaW4uCiAgICAqCiAgICAqIEFzIHRoaXMgZG9lc24ndCBtYXRjaCBpT1MsIGFuZCBhcHBzIG1heSBub3Qgd2FudCB0byBzZWUgdGhlaXIgY2xpZW50Ci0gICAqIGNlcnRpZmljYXRlIHNhdmVkIGluIHRoZSB0aGUgdXNlcidzIGtleWNoYWluLCB3ZSB1c2UgU2VjSXRlbUltcG9ydAorICAgKiBjZXJ0aWZpY2F0ZSBzYXZlZCBpbiB0aGUgdXNlcidzIGtleWNoYWluLCB3ZSB1c2UgU2VjSXRlbUltcG9ydAogICAgKiB3aXRoIGEgTlVMTCBrZXljaGFpbiB0byBhdm9pZCBpbXBvcnRpbmcgaXQuCiAgICAqCiAgICAqIFRoaXMgcmV0dXJucyBhIFNlY0NlcnRpZmljYXRlUmVmIGZyb20gd2hpY2ggd2UgY2FuIGNvbnN0cnVjdCBhCkBAIC0yMTExLDggKzIxMTEsOCBAQAogICAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfY2VydChjb25zdCBjaGFyICpjYWZpbGUsIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIFNTTENvbnRleHRSZWYgY3R4KQorc3RhdGljIENVUkxjb2RlIHZlcmlmeV9jZXJ0KGNvbnN0IGNoYXIgKmNhZmlsZSwgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xDb250ZXh0UmVmIGN0eCkKIHsKICAgaW50IG4gPSAwLCByYzsKICAgbG9uZyByZXM7CkBAIC0yMzcwLDEwICsyMzcwLDEwIEBACiAgICAgICAgIExlb3BhcmQncyBoZWFkZXJzICovCiAgICAgICBjYXNlIC05ODQxOgogICAgICAgICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKLSAgICAgICAgICBpbnQgcmVzID0gdmVyaWZ5X2NlcnQoU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBQ0tFTkQtPnNzbF9jdHgpOwotICAgICAgICAgIGlmKHJlcyAhPSBDVVJMRV9PSykKLSAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gdmVyaWZ5X2NlcnQoU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFDS0VORC0+c3NsX2N0eCk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAvKiB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIG5lZWQgdG8gY2FsbCBTU0xIYW5kc2hha2UoKSBhZ2FpbiAqLwogICAgICAgICByZXR1cm4gc2VjdHJhbnNwX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKQEAgLTI4MDUsNyArMjgwNSw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIGxvbmcgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0yODUyLDcgKzI4NTIsNyBAQAogICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOwogCiAgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOih0aW1lX3QpdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKQEAgLTMxODYsNyArMzE4NiwxMCBAQAogICAvKnN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOyovCiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtudW1dOwogICBzaXplX3QgcHJvY2Vzc2VkID0gMFVMOwotICBPU1N0YXR1cyBlcnIgPSBTU0xSZWFkKEJBQ0tFTkQtPnNzbF9jdHgsIGJ1ZiwgYnVmZmVyc2l6ZSwgJnByb2Nlc3NlZCk7CisgIE9TU3RhdHVzIGVycjsKKworICBhZ2FpbjoKKyAgZXJyID0gU1NMUmVhZChCQUNLRU5ELT5zc2xfY3R4LCBidWYsIGJ1ZmZlcnNpemUsICZwcm9jZXNzZWQpOwogCiAgIGlmKGVyciAhPSBub0VycikgewogICAgIHN3aXRjaChlcnIpIHsKQEAgLTMyMDcsNiArMzIxMCwxNiBAQAogICAgICAgICByZXR1cm4gLTFMOwogICAgICAgICBicmVhazsKIAorICAgICAgICAvKiBUaGUgYmVsb3cgaXMgZXJyU1NMUGVlckF1dGhDb21wbGV0ZWQ7IGl0J3Mgbm90IGRlZmluZWQgaW4KKyAgICAgICAgICAgTGVvcGFyZCdzIGhlYWRlcnMgKi8KKyAgICAgIGNhc2UgLTk4NDE6CisgICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpICYmIFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgeworICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9IHZlcmlmeV9jZXJ0KFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLCBjb25uLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBQ0tFTkQtPnNzbF9jdHgpOworICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZ290byBhZ2FpbjsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0xSZWFkKCkgcmV0dXJuIGVycm9yICVkIiwgZXJyKTsKICAgICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfUkVDVl9FUlJPUjsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmMKaW5kZXggYTc0NTJkYy4uZGZlZmExYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTk3LDcgKzk3LDggQEAKICAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPnJhbmRvbV9maWxlLCBuZWVkbGUtPnJhbmRvbV9maWxlKSAmJgogICAgICBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoZGF0YS0+ZWdkc29ja2V0LCBuZWVkbGUtPmVnZHNvY2tldCkgJiYKICAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmNpcGhlcl9saXN0LCBuZWVkbGUtPmNpcGhlcl9saXN0KSAmJgotICAgICBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoZGF0YS0+Y2lwaGVyX2xpc3QxMywgbmVlZGxlLT5jaXBoZXJfbGlzdDEzKSkKKyAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmNpcGhlcl9saXN0MTMsIG5lZWRsZS0+Y2lwaGVyX2xpc3QxMykgJiYKKyAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPnBpbm5lZF9rZXksIG5lZWRsZS0+cGlubmVkX2tleSkpCiAgICAgcmV0dXJuIFRSVUU7CiAKICAgcmV0dXJuIEZBTFNFOwpAQCAtMTIxLDYgKzEyMiw3IEBACiAgIENMT05FX1NUUklORyhlZ2Rzb2NrZXQpOwogICBDTE9ORV9TVFJJTkcoY2lwaGVyX2xpc3QpOwogICBDTE9ORV9TVFJJTkcoY2lwaGVyX2xpc3QxMyk7CisgIENMT05FX1NUUklORyhwaW5uZWRfa2V5KTsKIAogICByZXR1cm4gVFJVRTsKIH0KQEAgLTEzNCw2ICsxMzYsNyBAQAogICBDdXJsX3NhZmVmcmVlKHNzbGMtPmVnZHNvY2tldCk7CiAgIEN1cmxfc2FmZWZyZWUoc3NsYy0+Y2lwaGVyX2xpc3QpOwogICBDdXJsX3NhZmVmcmVlKHNzbGMtPmNpcGhlcl9saXN0MTMpOworICBDdXJsX3NhZmVmcmVlKHNzbGMtPnBpbm5lZF9rZXkpOwogfQogCiAjaWZkZWYgVVNFX1NTTApAQCAtNTEzLDE2ICs1MTYsMTIgQEAKIH0KIAogI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKLSAgZGVmaW5lZChVU0VfU0VDVFJBTlNQKSB8fCBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCi0gIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX0NZQVNTTCkKLWludCBDdXJsX3NzbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgIGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCisgIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX0JFQVJTU0wpCitpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbRklSU1RTT0NLRVRdOwogCi0gIGlmKCFudW1zb2NrcykKLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLQogICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgewogICAgIC8qIHdyaXRlIG1vZGUgKi8KICAgICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwpAQCAtNTM4LDEyICs1MzcsMTAgQEAKIH0KICNlbHNlCiBpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAodm9pZCljb25uOwogICAodm9pZClzb2NrczsKLSAgKHZvaWQpbnVtc29ja3M7CiAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwogfQogLyogVVNFX09QRU5TU0wgfHwgVVNFX0dOVVRMUyB8fCBVU0VfU0NIQU5ORUwgfHwgVVNFX1NFQ1RSQU5TUCB8fCBVU0VfTlNTICovCkBAIC0xMTcyLDggKzExNjksOCBAQAogY29uc3Qgc3RydWN0IEN1cmxfc3NsICpDdXJsX3NzbCA9CiAjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQogICAmQ3VybF9zc2xfbXVsdGk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9DWUFTU0wpCi0gICZDdXJsX3NzbF9jeWFzc2w7CisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NMKQorICAmQ3VybF9zc2xfd29sZnNzbDsKICNlbGlmIGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkKICAgJkN1cmxfc3NsX3NlY3RyYW5zcDsKICNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKQEAgLTExODYsMTkgKzExODMsMTkgQEAKICAgJkN1cmxfc3NsX25zczsKICNlbGlmIGRlZmluZWQoVVNFX09QRU5TU0wpCiAgICZDdXJsX3NzbF9vcGVuc3NsOwotI2VsaWYgZGVmaW5lZChVU0VfUE9MQVJTU0wpCi0gICZDdXJsX3NzbF9wb2xhcnNzbDsKICNlbGlmIGRlZmluZWQoVVNFX1NDSEFOTkVMKQogICAmQ3VybF9zc2xfc2NoYW5uZWw7CiAjZWxpZiBkZWZpbmVkKFVTRV9NRVNBTElOSykKICAgJkN1cmxfc3NsX21lc2FsaW5rOworI2VsaWYgZGVmaW5lZChVU0VfQkVBUlNTTCkKKyAgJkN1cmxfc3NsX2JlYXJzc2w7CiAjZWxzZQogI2Vycm9yICJNaXNzaW5nIHN0cnVjdCBDdXJsX3NzbCBmb3Igc2VsZWN0ZWQgU1NMIGJhY2tlbmQiCiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqYXZhaWxhYmxlX2JhY2tlbmRzW10gPSB7Ci0jaWYgZGVmaW5lZChVU0VfQ1lBU1NMKQotICAmQ3VybF9zc2xfY3lhc3NsLAorI2lmIGRlZmluZWQoVVNFX1dPTEZTU0wpCisgICZDdXJsX3NzbF93b2xmc3NsLAogI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfU0VDVFJBTlNQKQogICAmQ3VybF9zc2xfc2VjdHJhbnNwLApAQCAtMTIxOCwxNSArMTIxNSwxNSBAQAogI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpCiAgICZDdXJsX3NzbF9vcGVuc3NsLAogI2VuZGlmCi0jaWYgZGVmaW5lZChVU0VfUE9MQVJTU0wpCi0gICZDdXJsX3NzbF9wb2xhcnNzbCwKLSNlbmRpZgogI2lmIGRlZmluZWQoVVNFX1NDSEFOTkVMKQogICAmQ3VybF9zc2xfc2NoYW5uZWwsCiAjZW5kaWYKICNpZiBkZWZpbmVkKFVTRV9NRVNBTElOSykKICAgJkN1cmxfc3NsX21lc2FsaW5rLAogI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfQkVBUlNTTCkKKyAgJkN1cmxfc3NsX2JlYXJzc2wsCisjZW5kaWYKICAgTlVMTAogfTsKIApAQCAtMTIzNCw3ICsxMjMxLDcgQEAKIHsKICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqc2VsZWN0ZWQ7CiAgIHN0YXRpYyBjaGFyIGJhY2tlbmRzWzIwMF07Ci0gIHN0YXRpYyBzaXplX3QgdG90YWw7CisgIHN0YXRpYyBzaXplX3QgYmFja2VuZHNfbGVuOwogICBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgKmN1cnJlbnQ7CiAKICAgY3VycmVudCA9IEN1cmxfc3NsID09ICZDdXJsX3NzbF9tdWx0aSA/IGF2YWlsYWJsZV9iYWNrZW5kc1swXSA6IEN1cmxfc3NsOwpAQCAtMTI0NiwyNyArMTI0MywzMiBAQAogCiAgICAgc2VsZWN0ZWQgPSBjdXJyZW50OwogCi0gICAgZm9yKGkgPSAwOyBhdmFpbGFibGVfYmFja2VuZHNbaV0gJiYgcCA8IChlbmQgLSA0KTsgaSsrKSB7Ci0gICAgICBpZihpKQotICAgICAgICAqKHArKykgPSAnICc7Ci0gICAgICBpZihzZWxlY3RlZCAhPSBhdmFpbGFibGVfYmFja2VuZHNbaV0pCi0gICAgICAgICoocCsrKSA9ICcoJzsKLSAgICAgIHAgKz0gYXZhaWxhYmxlX2JhY2tlbmRzW2ldLT52ZXJzaW9uKHAsIGVuZCAtIHAgLSAyKTsKLSAgICAgIGlmKHNlbGVjdGVkICE9IGF2YWlsYWJsZV9iYWNrZW5kc1tpXSkKLSAgICAgICAgKihwKyspID0gJyknOworICAgIGJhY2tlbmRzWzBdID0gJ1wwJzsKKworICAgIGZvcihpID0gMDsgYXZhaWxhYmxlX2JhY2tlbmRzW2ldOyArK2kpIHsKKyAgICAgIGNoYXIgdmJbMjAwXTsKKyAgICAgIGJvb2wgcGFyZW4gPSAoc2VsZWN0ZWQgIT0gYXZhaWxhYmxlX2JhY2tlbmRzW2ldKTsKKworICAgICAgaWYoYXZhaWxhYmxlX2JhY2tlbmRzW2ldLT52ZXJzaW9uKHZiLCBzaXplb2YodmIpKSkgeworICAgICAgICBwICs9IG1zbnByaW50ZihwLCBlbmQgLSBwLCAiJXMlcyVzJXMiLCAocCAhPSBiYWNrZW5kcyA/ICIgIiA6ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVuID8gIigiIDogIiIpLCB2YiwgKHBhcmVuID8gIikiIDogIiIpKTsKKyAgICAgIH0KICAgICB9Ci0gICAgKnAgPSAnXDAnOwotICAgIHRvdGFsID0gcCAtIGJhY2tlbmRzOworCisgICAgYmFja2VuZHNfbGVuID0gcCAtIGJhY2tlbmRzOwogICB9CiAKLSAgaWYoc2l6ZSA+IHRvdGFsKQotICAgIG1lbWNweShidWZmZXIsIGJhY2tlbmRzLCB0b3RhbCArIDEpOwotICBlbHNlIHsKLSAgICBtZW1jcHkoYnVmZmVyLCBiYWNrZW5kcywgc2l6ZSAtIDEpOworICBpZighc2l6ZSkKKyAgICByZXR1cm4gMDsKKworICBpZihzaXplIDw9IGJhY2tlbmRzX2xlbikgeworICAgIHN0cm5jcHkoYnVmZmVyLCBiYWNrZW5kcywgc2l6ZSAtIDEpOwogICAgIGJ1ZmZlcltzaXplIC0gMV0gPSAnXDAnOworICAgIHJldHVybiBzaXplIC0gMTsKICAgfQogCi0gIHJldHVybiBDVVJMTUlOKHNpemUgLSAxLCB0b3RhbCk7CisgIHN0cmNweShidWZmZXIsIGJhY2tlbmRzKTsKKyAgcmV0dXJuIGJhY2tlbmRzX2xlbjsKIH0KIAogc3RhdGljIGludCBtdWx0aXNzbF9pbml0KGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqYmFja2VuZCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKaW5kZXggMmE4N2NhMS4uZjU4YWRlZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEwMiwxMiArMTAyLDEyIEBACiAjaW5jbHVkZSAiZ3Rscy5oIiAgICAgICAgICAgLyogR251VExTIHZlcnNpb25zICovCiAjaW5jbHVkZSAibnNzZy5oIiAgICAgICAgICAgLyogTlNTIHZlcnNpb25zICovCiAjaW5jbHVkZSAiZ3NraXQuaCIgICAgICAgICAgLyogR2xvYmFsIFNlY3VyZSBUb29sS2l0IHZlcnNpb25zICovCi0jaW5jbHVkZSAicG9sYXJzc2wuaCIgICAgICAgLyogUG9sYXJTU0wgdmVyc2lvbnMgKi8KLSNpbmNsdWRlICJjeWFzc2wuaCIgICAgICAgICAvKiBDeWFTU0wgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJ3b2xmc3NsLmgiICAgICAgICAvKiB3b2xmU1NMIHZlcnNpb25zICovCiAjaW5jbHVkZSAic2NoYW5uZWwuaCIgICAgICAgLyogU2NoYW5uZWwgU1NQSSB2ZXJzaW9uICovCiAjaW5jbHVkZSAic2VjdHJhbnNwLmgiICAgICAgLyogU2VjdXJlVHJhbnNwb3J0IChEYXJ3aW4pIHZlcnNpb24gKi8KICNpbmNsdWRlICJtYmVkdGxzLmgiICAgICAgICAvKiBtYmVkVExTIHZlcnNpb25zICovCiAjaW5jbHVkZSAibWVzYWxpbmsuaCIgICAgICAgLyogTWVzYUxpbmsgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJiZWFyc3NsLmgiICAgICAgICAvKiBCZWFyU1NMIHZlcnNpb25zICovCiAKICNpZm5kZWYgTUFYX1BJTk5FRF9QVUJLRVlfU0laRQogI2RlZmluZSBNQVhfUElOTkVEX1BVQktFWV9TSVpFIDEwNDg1NzYgLyogMU1CICovCkBAIC0xNDMsOCArMTQzLDcgQEAKIGJvb2wgQ3VybF9jbG9uZV9wcmltYXJ5X3NzbF9jb25maWcoc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpkZXN0KTsKIHZvaWQgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBzc2xjKTsKLWludCBDdXJsX3NzbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworaW50IEN1cmxfc3NsX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAKIGludCBDdXJsX3NzbF9iYWNrZW5kKHZvaWQpOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvd29sZnNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMmQzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuYwpAQCAtMCwwICsxLDk5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogU291cmNlIGZpbGUgZm9yIGFsbCB3b2xmU1NMIHNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCisgKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9XT0xGU1NMCisKKyNkZWZpbmUgV09MRlNTTF9PUFRJT05TX0lHTk9SRV9TWVMKKyNpbmNsdWRlIDx3b2xmc3NsL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wdGlvbnMuaD4KKworLyogVG8gZGV0ZXJtaW5lIHdoYXQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2UgcmVseSBvbiBvbmUgb3IgYm90aCBvZjoKKyAgIC0gdGhlIHVzZXIncyBvcHRpb25zLmggZ2VuZXJhdGVkIGJ5IHdvbGZTU0wKKyAgIC0gdGhlIHN5bWJvbHMgZGV0ZWN0ZWQgYnkgY3VybCdzIGNvbmZpZ3VyZQorICAgU2luY2UgdGhleSBhcmUgbWFya2VkbHkgZGlmZmVyZW50IGZyb20gb25lIGFub3RoZXIsIGFuZCBvbmUgb3IgdGhlIG90aGVyIG1heQorICAgbm90IGJlIGF2YWlsYWJsZSwgd2UgZG8gc29tZSBjaGVja2luZyBiZWxvdyB0byBicmluZyB0aGluZ3MgaW4gc3luYy4gKi8KKworLyogSEFWRV9BTFBOIGlzIHdvbGZTU0wncyBidWlsZCB0aW1lIHN5bWJvbCBmb3IgZW5hYmxpbmcgQUxQTiBpbiBvcHRpb25zLmguICovCisjaWZuZGVmIEhBVkVfQUxQTgorI2lmZGVmIEhBVkVfV09MRlNTTF9VU0VBTFBOCisjZGVmaW5lIEhBVkVfQUxQTgorI2VuZGlmCisjZW5kaWYKKworLyogV09MRlNTTF9BTExPV19TU0xWMyBpcyB3b2xmU1NMJ3MgYnVpbGQgdGltZSBzeW1ib2wgZm9yIGVuYWJsaW5nIFNTTHYzIGluCisgICBvcHRpb25zLmgsIGJ1dCBpcyBvbmx5IHNlZW4gaW4gPj0gMy42LjYgc2luY2UgdGhhdCdzIHdoZW4gdGhleSBzdGFydGVkCisgICBkaXNhYmxpbmcgU1NMdjMgYnkgZGVmYXVsdC4gKi8KKyNpZm5kZWYgV09MRlNTTF9BTExPV19TU0xWMworI2lmIChMSUJXT0xGU1NMX1ZFUlNJT05fSEVYIDwgMHgwMzAwNjAwNikgfHwgXAorICBkZWZpbmVkKEhBVkVfV09MRlNTTFYzX0NMSUVOVF9NRVRIT0QpCisjZGVmaW5lIFdPTEZTU0xfQUxMT1dfU1NMVjMKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgInZ0bHMuaCIKKyNpbmNsdWRlICJwYXJzZWRhdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgorI2luY2x1ZGUgIng1MDlhc24xLmgiCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL2Vycm9yLXNzbC5oPgorI2luY2x1ZGUgIndvbGZzc2wuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogS0VFUF9QRUVSX0NFUlQgaXMgYSBwcm9kdWN0IG9mIHRoZSBwcmVzZW5jZSBvZiBidWlsZCB0aW1lIHN5bWJvbAorICAgT1BFTlNTTF9FWFRSQSB3aXRob3V0IE5PX0NFUlRTLCBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24uIEtFRVBfUEVFUl9DRVJUIGlzCisgICBpbiB3b2xmU1NMJ3Mgc2V0dGluZ3MuaCwgYW5kIHRoZSBsYXR0ZXIgdHdvIGFyZSBidWlsZCB0aW1lIHN5bWJvbHMgaW4KKyAgIG9wdGlvbnMuaC4gKi8KKyNpZm5kZWYgS0VFUF9QRUVSX0NFUlQKKyNpZiBkZWZpbmVkKEhBVkVfV09MRlNTTF9HRVRfUEVFUl9DRVJUSUZJQ0FURSkgfHwgXAorICAgIChkZWZpbmVkKE9QRU5TU0xfRVhUUkEpICYmICFkZWZpbmVkKE5PX0NFUlRTKSkKKyNkZWZpbmUgS0VFUF9QRUVSX0NFUlQKKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKKyAgU1NMX0NUWCogY3R4OworICBTU0wqICAgICBoYW5kbGU7Cit9OworCisjZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAorCitzdGF0aWMgQ3VybF9yZWN2IHdvbGZzc2xfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgd29sZnNzbF9zZW5kOworCisKK3N0YXRpYyBpbnQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgIGlmKCF0eXBlIHx8ICF0eXBlWzBdKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiUEVNIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07CisgIGlmKHN0cmNhc2Vjb21wYXJlKHR5cGUsICJERVIiKSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0FTTjE7CisgIHJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWxsIHRoZSBjbGllbnQvQ0EgY2VydGlmaWNhdGVzIGFuZCBDUkxzLiBTZXR1cCB0aGUgVExTCisgKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KKyAqLworc3RhdGljIENVUkxjb2RlCit3b2xmc3NsX2Nvbm5lY3Rfc3RlcDEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgY2hhciAqY2lwaGVyczsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBTU0xfTUVUSE9EKiByZXFfbWV0aG9kID0gTlVMTDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisjaWZkZWYgSEFWRV9TTkkKKyAgYm9vbCBzbmkgPSBGQUxTRTsKKyNkZWZpbmUgdXNlX3NuaSh4KSAgc25pID0gKHgpCisjZWxzZQorI2RlZmluZSB1c2Vfc25pKHgpICBDdXJsX25vcF9zdG10CisjZW5kaWYKKworICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcnNpb25fbWF4KSAhPSBDVVJMX1NTTFZFUlNJT05fTUFYX05PTkUpIHsKKyAgICBmYWlsZihkYXRhLCAid29sZlNTTCBkb2VzIG5vdCBzdXBwb3J0IHRvIHNldCBtYXhpbXVtIFNTTC9UTFMgdmVyc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLworICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgorI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwMzAwMCAvKiA+PSAzLjMuMCAqLworICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyBzZXQgbGF0ZXIgYWZ0ZXIgdGhlIENUWCBvYmplY3QgaXMgY3JlYXRlZCAqLworICAgIHJlcV9tZXRob2QgPSBTU0x2MjNfY2xpZW50X21ldGhvZCgpOworI2Vsc2UKKyAgICBpbmZvZihkYXRhLCAid29sZlNTTCA8My4zLjAgY2Fubm90IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIFRMUyAxLjAtMS4yLCAiCisgICAgICAgICAgIlRMUyAxLjAgaXMgdXNlZCBleGNsdXNpdmVseVxuIik7CisgICAgcmVxX21ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKKyNlbmRpZgorICAgIHVzZV9zbmkoVFJVRSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6CisjaWZkZWYgV09MRlNTTF9BTExPV19UTFNWMTAKKyAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpOworICAgIHVzZV9zbmkoVFJVRSk7CisjZWxzZQorICAgIGZhaWxmKGRhdGEsICJ3b2xmU1NMIGRvZXMgbm90IHN1cHBvcnQgVExTIDEuMCIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICByZXFfbWV0aG9kID0gVExTdjFfMV9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKKyAgICByZXFfbWV0aG9kID0gVExTdjFfMl9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcmVxX21ldGhvZCA9IHdvbGZUTFN2MV8zX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKFRSVUUpOworICAgIGJyZWFrOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAid29sZlNTTDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyNlbmRpZgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCisgICAgcmVxX21ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKEZBTFNFKTsKKyNlbHNlCisgICAgZmFpbGYoZGF0YSwgIndvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisgICAgZmFpbGYoZGF0YSwgIndvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIGlmKCFyZXFfbWV0aG9kKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgbWV0aG9kISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoQkFDS0VORC0+Y3R4KQorICAgIFNTTF9DVFhfZnJlZShCQUNLRU5ELT5jdHgpOworICBCQUNLRU5ELT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKKworICBpZighQkFDS0VORC0+Y3R4KSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCEiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CisjaWYgTElCV09MRlNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDYgLyogPiAzLjQuNiAqLworICAgIC8qIFZlcnNpb25zIDMuMy4wIHRvIDMuNC42IHdlIGtub3cgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcworICAgICAqIHdoYXRldmVyIG1pbmltdW0gdmVyc2lvbiBvZiBUTFMgd2FzIGJ1aWx0IGluIGFuZCBhdCBsZWFzdCBUTFMgMS4wLiBGb3IKKyAgICAgKiBsYXRlciBsaWJyYXJ5IHZlcnNpb25zIHRoYXQgY291bGQgY2hhbmdlIChlZyBUTFMgMS4wIGJ1aWx0IGluIGJ1dAorICAgICAqIGRlZmF1bHRzIHRvIFRMUyAxLjEpIHNvIHdlIGhhdmUgdGhpcyBzaG9ydCBjaXJjdWl0IGV2YWx1YXRpb24gdG8gZmluZAorICAgICAqIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBUTFMgdmVyc2lvbi4KKyAgICAqLworICAgIGlmKCh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKEJBQ0tFTkQtPmN0eCwgV09MRlNTTF9UTFNWMSkgIT0gMSkgJiYKKyAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihCQUNLRU5ELT5jdHgsIFdPTEZTU0xfVExTVjFfMSkgIT0gMSkgJiYKKyAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihCQUNLRU5ELT5jdHgsIFdPTEZTU0xfVExTVjFfMikgIT0gMSkKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgJiYgKHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24oQkFDS0VORC0+Y3R4LCBXT0xGU1NMX1RMU1YxXzMpICE9IDEpCisjZW5kaWYKKyAgICAgICkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3Qgc2V0IHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24iKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKyAgICBicmVhazsKKyAgfQorCisgIGNpcGhlcnMgPSBTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpOworICBpZihjaXBoZXJzKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KEJBQ0tFTkQtPmN0eCwgY2lwaGVycykpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBjaXBoZXIgbGlzdDogJXMiLCBjaXBoZXJzKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0lQSEVSOworICAgIH0KKyAgICBpbmZvZihkYXRhLCAiQ2lwaGVyIHNlbGVjdGlvbjogJXNcbiIsIGNpcGhlcnMpOworICB9CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAvKiBsb2FkIHRydXN0ZWQgY2FjZXJ0ICovCisgIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKSB7CisgICAgaWYoMSAhPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCQUNLRU5ELT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgeworICAgICAgICAvKiBGYWlsIGlmIHdlIGluc2lzdCBvbiBzdWNjZXNzZnVsbHkgdmVyaWZ5aW5nIHRoZSBzZXJ2ZXIuICovCisgICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iCisgICAgICAgICAgICAgICIgIENBZmlsZTogJXNcbiAgQ0FwYXRoOiAlcyIsCisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpPworICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKTogIm5vbmUiLAorICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKT8KKyAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgOiAibm9uZSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEp1c3QgY29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gc3RyaWN0IGNlcnRpZmljYXRlCisgICAgICAgICAgIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gKi8KKyAgICAgICAgaW5mb2YoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9ucywiCisgICAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBFdmVyeXRoaW5nIGlzIGZpbmUuICovCisgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHNldCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIik7CisgICAgfQorICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgorICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgPyBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKToKKyAgICAgICAgICAibm9uZSIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgPyBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKToKKyAgICAgICAgICAibm9uZSIpOworICB9CisKKyAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlLCBhbmQgcHJpdmF0ZSBrZXkgKi8KKyAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkgJiYgU1NMX1NFVF9PUFRJT04oa2V5KSkgeworICAgIGludCBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoU1NMX1NFVF9PUFRJT04oY2VydF90eXBlKSk7CisKKyAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKEJBQ0tFTkQtPmN0eCwgU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBvciB3cm9uZyBwYXNzIgorICAgICAgICAgICAgIiBwaHJhc2U/KSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKworICAgIGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihrZXlfdHlwZSkpOworICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShCQUNLRU5ELT5jdHgsIFNTTF9TRVRfT1BUSU9OKGtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5Iik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisjZW5kaWYgLyogIU5PX0ZJTEVTWVNURU0gKi8KKworICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKKyAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQorICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCisgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLworICBTU0xfQ1RYX3NldF92ZXJpZnkoQkFDS0VORC0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpP1NTTF9WRVJJRllfUEVFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworI2lmZGVmIEhBVkVfU05JCisgIGlmKHNuaSkgeworICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworI2VuZGlmCisgICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgICBjb25uLT5ob3N0Lm5hbWU7CisgICAgc2l6ZV90IGhvc3RuYW1lX2xlbiA9IHN0cmxlbihob3N0bmFtZSk7CisgICAgaWYoKGhvc3RuYW1lX2xlbiA8IFVTSFJUX01BWCkgJiYKKyAgICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHI0KSkgJiYKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmFkZHI2KSkgJiYKKyNlbmRpZgorICAgICAgICh3b2xmU1NMX0NUWF9Vc2VTTkkoQkFDS0VORC0+Y3R4LCBXT0xGU1NMX1NOSV9IT1NUX05BTUUsIGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpaG9zdG5hbWVfbGVuKSAhPSAxKSkgeworICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBjb25maWd1cmUgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSAiCisgICAgICAgICAgICAiVExTIGV4dGVuc2lvblxuIik7CisgICAgfQorICB9CisjZW5kaWYKKworICAvKiBnaXZlIGFwcGxpY2F0aW9uIGEgY2hhbmNlIHRvIGludGVyZmVyZSB3aXRoIFNTTCBzZXQgdXAuICovCisgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eCkgeworICAgIENVUkxjb2RlIHJlc3VsdCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCBCQUNLRU5ELT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuZnNzbGN0eHApOworICAgIGlmKHJlc3VsdCkgeworICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNpZ25hbGVkIGJ5IHNzbCBjdHggY2FsbGJhY2siKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisjaWZkZWYgTk9fRklMRVNZU1RFTQorICBlbHNlIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgeworICAgIGZhaWxmKGRhdGEsICJTU0w6IENlcnRpZmljYXRlcyBjYW4ndCBiZSBsb2FkZWQgYmVjYXVzZSB3b2xmU1NMIHdhcyBidWlsdCIKKyAgICAgICAgICAiIHdpdGggXCJubyBmaWxlc3lzdGVtXCIuIEVpdGhlciBkaXNhYmxlIHBlZXIgdmVyaWZpY2F0aW9uIgorICAgICAgICAgICIgKGluc2VjdXJlKSBvciBpZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIHdpdGggbGliY3VybCB5b3UiCisgICAgICAgICAgIiBjYW4gbG9hZCBjZXJ0aWZpY2F0ZXMgdmlhIENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTi4iKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKyNlbmRpZgorCisgIC8qIExldCdzIG1ha2UgYW4gU1NMIHN0cnVjdHVyZSAqLworICBpZihCQUNLRU5ELT5oYW5kbGUpCisgICAgU1NMX2ZyZWUoQkFDS0VORC0+aGFuZGxlKTsKKyAgQkFDS0VORC0+aGFuZGxlID0gU1NMX25ldyhCQUNLRU5ELT5jdHgpOworICBpZighQkFDS0VORC0+aGFuZGxlKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCAoaGFuZGxlKSEiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisjaWZkZWYgSEFWRV9BTFBOCisgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CisgICAgY2hhciBwcm90b2NvbHNbMTI4XTsKKyAgICAqcHJvdG9jb2xzID0gJ1wwJzsKKworICAgIC8qIHdvbGZTU0wncyBBTFBOIHByb3RvY29sIG5hbWUgbGlzdCBmb3JtYXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mCisgICAgICAgcHJvdG9jb2xzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgcHJlZmVyZW5jZSwgZWc6ICJoMixodHRwLzEuMSIgKi8KKworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIpIHsKKyAgICAgIHN0cmNweShwcm90b2NvbHMgKyBzdHJsZW4ocHJvdG9jb2xzKSwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEICIsIik7CisgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgb2ZmZXJpbmcgJXNcbiIsIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCk7CisgICAgfQorI2VuZGlmCisKKyAgICBzdHJjcHkocHJvdG9jb2xzICsgc3RybGVuKHByb3RvY29scyksIEFMUE5fSFRUUF8xXzEpOworICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7CisKKyAgICBpZih3b2xmU1NMX1VzZUFMUE4oQkFDS0VORC0+aGFuZGxlLCBwcm90b2NvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClzdHJsZW4ocHJvdG9jb2xzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9BTFBOX0NPTlRJTlVFX09OX01JU01BVENIKSAhPSBTU0xfU1VDQ0VTUykgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHNldHRpbmcgQUxQTiBwcm90b2NvbHMiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBIQVZFX0FMUE4gKi8KKworICAvKiBDaGVjayBpZiB0aGVyZSdzIGEgY2FjaGVkIElEIHdlIGNhbi9zaG91bGQgdXNlIGhlcmUhICovCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIHZvaWQgKnNzbF9zZXNzaW9uaWQgPSBOVUxMOworCisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7CisgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmc3NsX3Nlc3Npb25pZCwgTlVMTCwgc29ja2luZGV4KSkgeworICAgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLworICAgICAgaWYoIVNTTF9zZXRfc2Vzc2lvbihCQUNLRU5ELT5oYW5kbGUsIHNzbF9zZXNzaW9uaWQpKSB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmZmVyW1dPTEZTU0xfTUFYX0VSUk9SX1NaXTsKKyAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9zZXNzaW9uIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgfQorICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCisgICAgICBpbmZvZihkYXRhLCAiU1NMIHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOworICAgIH0KKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOworICB9CisKKyAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXIgKi8KKyAgaWYoIVNTTF9zZXRfZmQoQkFDS0VORC0+aGFuZGxlLCAoaW50KXNvY2tmZCkpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X2ZkIGZhaWxlZCIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIENVUkxjb2RlCit3b2xmc3NsX2Nvbm5lY3Rfc3RlcDIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgaW50IHJldCA9IC0xOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGRpc3BuYW1lID0gU1NMX0lTX1BST1hZKCkgPworICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6IGNvbm4tPmhvc3QuZGlzcG5hbWU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBwaW5uZWRwdWJrZXkgPSBTU0xfSVNfUFJPWFkoKSA/CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX1BST1hZXSA6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworCisgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHdvbGZzc2xfcmVjdjsKKyAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gd29sZnNzbF9zZW5kOworCisgIC8qIEVuYWJsZSBSRkMyODE4IGNoZWNrcyAqLworICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKKyAgICByZXQgPSB3b2xmU1NMX2NoZWNrX2RvbWFpbl9uYW1lKEJBQ0tFTkQtPmhhbmRsZSwgaG9zdG5hbWUpOworICAgIGlmKHJldCA9PSBTU0xfRkFJTFVSRSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmV0ID0gU1NMX2Nvbm5lY3QoQkFDS0VORC0+aGFuZGxlKTsKKyAgaWYocmV0ICE9IDEpIHsKKyAgICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgaW50ICBkZXRhaWwgPSBTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgcmV0KTsKKworICAgIGlmKFNTTF9FUlJPUl9XQU5UX1JFQUQgPT0gZGV0YWlsKSB7CisgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBlbHNlIGlmKFNTTF9FUlJPUl9XQU5UX1dSSVRFID09IGRldGFpbCkgeworICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gb3ZlcnJpZGUgb25seSB0aGUgQ04gbWF0Y2hpbmcuCisgICAgICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgb3ZlcnJpZGUgb2YgYm90aCBtaXNtYXRjaGluZyBTdWJqZWN0QWx0TmFtZXMKKyAgICAgKiBhcyBhbHNvIG1pc21hdGNoaW5nIENOIGZpZWxkcyAqLworICAgIGVsc2UgaWYoRE9NQUlOX05BTUVfTUlTTUFUQ0ggPT0gZGV0YWlsKSB7CisjaWYgMQorICAgICAgZmFpbGYoZGF0YSwgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAorICAgICAgICAgICAgZGlzcG5hbWUpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyNlbHNlCisgICAgICAvKiBXaGVuIHRoZSB3b2xmc3NsX2NoZWNrX2RvbWFpbl9uYW1lKCkgaXMgdXNlZCBhbmQgeW91IGRlc2lyZSB0bworICAgICAgICogY29udGludWUgb24gYSBET01BSU5fTkFNRV9NSVNNQVRDSCwgaS5lLiAnY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0CisgICAgICAgKiA9PSAwJywgQ3lhU1NMIHZlcnNpb24gMi40LjAgd2lsbCBmYWlsIHdpdGggYW4gSU5DT01QTEVURV9EQVRBCisgICAgICAgKiBlcnJvci4gVGhlIG9ubHkgd2F5IHRvIGRvIHRoaXMgaXMgY3VycmVudGx5IHRvIHN3aXRjaCB0aGUKKyAgICAgICAqIFdvbGZzc2xfY2hlY2tfZG9tYWluX25hbWUoKSBpbiBhbmQgb3V0IGJhc2VkIG9uIHRoZQorICAgICAgICogJ2Nvbm4tPnNzbF9jb25maWcudmVyaWZ5aG9zdCcgdmFsdWUuICovCisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAorICAgICAgICAgICAgICBkaXNwbmFtZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBhbmQvb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgZGlzcG5hbWUpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisjZW5kaWYKKyAgICB9CisjaWYgTElCV09MRlNTTF9WRVJTSU9OX0hFWCA+PSAweDAyMDA3MDAwIC8qIDIuNy4wICovCisgICAgZWxzZSBpZihBU05fTk9fU0lHTkVSX0UgPT0gZGV0YWlsKSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlx0Q0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvblxuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUKKyAgICAgICAgICAgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiAqLworICAgICAgICBpbmZvZihkYXRhLCAiQ0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAiY29udGludWluZyBhbnl3YXlcbiIpOworICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTF9jb25uZWN0IGZhaWxlZCB3aXRoIGVycm9yICVkOiAlcyIsIGRldGFpbCwKKyAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGRldGFpbCwgZXJyb3JfYnVmZmVyKSk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisKKyAgaWYocGlubmVkcHVia2V5KSB7CisjaWZkZWYgS0VFUF9QRUVSX0NFUlQKKyAgICBYNTA5ICp4NTA5OworICAgIGNvbnN0IGNoYXIgKng1MDlfZGVyOworICAgIGludCB4NTA5X2Rlcl9sZW47CisgICAgY3VybF9YNTA5Y2VydGlmaWNhdGUgeDUwOV9wYXJzZWQ7CisgICAgY3VybF9hc24xRWxlbWVudCAqcHVia2V5OworICAgIENVUkxjb2RlIHJlc3VsdDsKKworICAgIHg1MDkgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoQkFDS0VORC0+aGFuZGxlKTsKKyAgICBpZigheDUwOSkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHJldHJpZXZpbmcgc2VydmVyIGNlcnRpZmljYXRlIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOworICAgIH0KKworICAgIHg1MDlfZGVyID0gKGNvbnN0IGNoYXIgKil3b2xmU1NMX1g1MDlfZ2V0X2Rlcih4NTA5LCAmeDUwOV9kZXJfbGVuKTsKKyAgICBpZigheDUwOV9kZXIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGZhaWxlZCByZXRyaWV2aW5nIEFTTi4xIHNlcnZlciBjZXJ0aWZpY2F0ZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKKyAgICB9CisKKyAgICBtZW1zZXQoJng1MDlfcGFyc2VkLCAwLCBzaXplb2YoeDUwOV9wYXJzZWQpKTsKKyAgICBpZihDdXJsX3BhcnNlWDUwOSgmeDUwOV9wYXJzZWQsIHg1MDlfZGVyLCB4NTA5X2RlciArIHg1MDlfZGVyX2xlbikpCisgICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOworCisgICAgcHVia2V5ID0gJng1MDlfcGFyc2VkLnN1YmplY3RQdWJsaWNLZXlJbmZvOworICAgIGlmKCFwdWJrZXktPmhlYWRlciB8fCBwdWJrZXktPmVuZCA8PSBwdWJrZXktPmhlYWRlcikgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHJldHJpZXZpbmcgcHVibGljIGtleSBmcm9tIHNlcnZlciBjZXJ0aWZpY2F0ZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBDdXJsX3Bpbl9wZWVyX3B1YmtleShkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZHB1YmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKXB1YmtleS0+aGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKHB1YmtleS0+ZW5kIC0gcHVia2V5LT5oZWFkZXIpKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTU0w6IHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcGlubmVkIHB1YmxpYyBrZXkhIik7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbHNlCisgICAgZmFpbGYoZGF0YSwgIkxpYnJhcnkgbGFja3MgcGlubmluZyBzdXBwb3J0IGJ1aWx0LWluIik7CisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgorICB9CisKKyNpZmRlZiBIQVZFX0FMUE4KKyAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKKyAgICBpbnQgcmM7CisgICAgY2hhciAqcHJvdG9jb2wgPSBOVUxMOworICAgIHVuc2lnbmVkIHNob3J0IHByb3RvY29sX2xlbiA9IDA7CisKKyAgICByYyA9IHdvbGZTU0xfQUxQTl9HZXRQcm90b2NvbChCQUNLRU5ELT5oYW5kbGUsICZwcm90b2NvbCwgJnByb3RvY29sX2xlbik7CisKKyAgICBpZihyYyA9PSBTU0xfU1VDQ0VTUykgeworICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJS4qc1xuIiwgcHJvdG9jb2xfbGVuLAorICAgICAgICAgICAgcHJvdG9jb2wpOworCisgICAgICBpZihwcm90b2NvbF9sZW4gPT0gQUxQTl9IVFRQXzFfMV9MRU5HVEggJiYKKyAgICAgICAgICFtZW1jbXAocHJvdG9jb2wsIEFMUE5fSFRUUF8xXzEsIEFMUE5fSFRUUF8xXzFfTEVOR1RIKSkKKyAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yICYmCisgICAgICAgICAgICAgIHByb3RvY29sX2xlbiA9PSBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSURfTEVOICYmCisgICAgICAgICAgICAgICFtZW1jbXAocHJvdG9jb2wsIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSURfTEVOKSkKKyAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMjsKKyNlbmRpZgorICAgICAgZWxzZQorICAgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgdW5yZWNvZ25pemVkIHByb3RvY29sICUuKnNcbiIsIHByb3RvY29sX2xlbiwKKyAgICAgICAgICAgICAgcHJvdG9jb2wpOworICAgICAgQ3VybF9tdWx0aXVzZV9zdGF0ZShjb25uLCBjb25uLT5uZWducG4gPT0gQ1VSTF9IVFRQX1ZFUlNJT05fMiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIEJVTkRMRV9NVUxUSVBMRVggOiBCVU5ETEVfTk9fTVVMVElVU0UpOworICAgIH0KKyAgICBlbHNlIGlmKHJjID09IFNTTF9BTFBOX05PVF9GT1VORCkKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGRhdGEsICJBTFBOLCBmYWlsdXJlIGdldHRpbmcgcHJvdG9jb2wsIGVycm9yICVkIiwgcmMpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfQUxQTiAqLworCisgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8zOworI2lmIChMSUJXT0xGU1NMX1ZFUlNJT05fSEVYID49IDB4MDMwMDkwMTApCisgIGluZm9mKGRhdGEsICJTU0wgY29ubmVjdGlvbiB1c2luZyAlcyAvICVzXG4iLAorICAgICAgICB3b2xmU1NMX2dldF92ZXJzaW9uKEJBQ0tFTkQtPmhhbmRsZSksCisgICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lKEJBQ0tFTkQtPmhhbmRsZSkpOworI2Vsc2UKKyAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0ZWRcbiIpOworI2VuZGlmCisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK3N0YXRpYyBDVVJMY29kZQord29sZnNzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisKKyAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKKworICBpZihTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpIHsKKyAgICBib29sIGluY2FjaGU7CisgICAgU1NMX1NFU1NJT04gKm91cl9zc2xfc2Vzc2lvbmlkOworICAgIHZvaWQgKm9sZF9zc2xfc2Vzc2lvbmlkID0gTlVMTDsKKworICAgIG91cl9zc2xfc2Vzc2lvbmlkID0gU1NMX2dldF9zZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSk7CisKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXgpKTsKKyAgICBpZihpbmNhY2hlKSB7CisgICAgICBpZihvbGRfc3NsX3Nlc3Npb25pZCAhPSBvdXJfc3NsX3Nlc3Npb25pZCkgeworICAgICAgICBpbmZvZihkYXRhLCAib2xkIFNTTCBzZXNzaW9uIElEIGlzIHN0YWxlLCByZW1vdmluZ1xuIik7CisgICAgICAgIEN1cmxfc3NsX2RlbHNlc3Npb25pZChjb25uLCBvbGRfc3NsX3Nlc3Npb25pZCk7CisgICAgICAgIGluY2FjaGUgPSBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZighaW5jYWNoZSkgeworICAgICAgcmVzdWx0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIG91cl9zc2xfc2Vzc2lvbmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogdW5rbm93biBzaXplICovLCBzb2NraW5kZXgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CisgICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gc3RvcmUgc3NsIHNlc3Npb24iKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICB9CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgfQorCisgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF9kb25lOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgd29sZnNzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgY2hhciBlcnJvcl9idWZmZXJbV09MRlNTTF9NQVhfRVJST1JfU1pdOworICBpbnQgIG1lbWxlbiA9IChsZW4gPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpbGVuOworICBpbnQgIHJjICAgICA9IFNTTF93cml0ZShCQUNLRU5ELT5oYW5kbGUsIG1lbSwgbWVtbGVuKTsKKworICBpZihyYyA8IDApIHsKKyAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIHJjKTsKKworICAgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgIC8qIHRoZXJlJ3MgZGF0YSBwZW5kaW5nLCByZS1pbnZva2UgU1NMX3dyaXRlKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHdyaXRlOiAlcywgZXJybm8gJWQiLAorICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCisgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBDdXJsX3dvbGZzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKworICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKKyAgICAodm9pZClTU0xfc2h1dGRvd24oQkFDS0VORC0+aGFuZGxlKTsKKyAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOworICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7CisgIH0KKyAgaWYoQkFDS0VORC0+Y3R4KSB7CisgICAgU1NMX0NUWF9mcmVlKEJBQ0tFTkQtPmN0eCk7CisgICAgQkFDS0VORC0+Y3R4ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdCB3b2xmc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbbnVtXTsKKyAgY2hhciBlcnJvcl9idWZmZXJbV09MRlNTTF9NQVhfRVJST1JfU1pdOworICBpbnQgIGJ1ZmZzaXplID0gKGJ1ZmZlcnNpemUgPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpYnVmZmVyc2l6ZTsKKyAgaW50ICBucmVhZCAgICA9IFNTTF9yZWFkKEJBQ0tFTkQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7CisKKyAgaWYobnJlYWQgPCAwKSB7CisgICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCBucmVhZCk7CisKKyAgICBzd2l0Y2goZXJyKSB7CisgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46IC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9yZWFkKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHJlYWQ6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgZXJyb3JfYnVmZmVyKSwKKyAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKKworc3RhdGljIHZvaWQgQ3VybF93b2xmc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpCit7CisgICh2b2lkKXB0cjsKKyAgLyogd29sZlNTTCByZXVzZXMgc2Vzc2lvbnMgb24gb3duLCBubyBmcmVlICovCit9CisKKworc3RhdGljIHNpemVfdCBDdXJsX3dvbGZzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwNjAwMAorICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIndvbGZTU0wvJXMiLCB3b2xmU1NMX2xpYl92ZXJzaW9uKCkpOworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1ZFUlNJT04pCisgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAid29sZlNTTC8lcyIsIFdPTEZTU0xfVkVSU0lPTik7CisjZW5kaWYKK30KKworCitzdGF0aWMgaW50IEN1cmxfd29sZnNzbF9pbml0KHZvaWQpCit7CisgIHJldHVybiAod29sZlNTTF9Jbml0KCkgPT0gU1NMX1NVQ0NFU1MpOworfQorCisKK3N0YXRpYyB2b2lkIEN1cmxfd29sZnNzbF9jbGVhbnVwKHZvaWQpCit7CisgIHdvbGZTU0xfQ2xlYW51cCgpOworfQorCisKK3N0YXRpYyBib29sIEN1cmxfd29sZnNzbF9kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhKiBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25uaW5kZXgpCit7CisgIGNvbnN0IHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtjb25uaW5kZXhdOworICBpZihCQUNLRU5ELT5oYW5kbGUpICAgLyogU1NMIGlzIGluIHVzZSAqLworICAgIHJldHVybiAoMCAhPSBTU0xfcGVuZGluZyhCQUNLRU5ELT5oYW5kbGUpKSA/IFRSVUUgOiBGQUxTRTsKKyAgZWxzZQorICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gc2h1dCBkb3duIHRoZSBTU0wgbGF5ZXIgYnV0IGtlZXAgdGhlCisgKiBzb2NrZXQgb3BlbiAoQ0NDIC0gQ2xlYXIgQ29tbWFuZCBDaGFubmVsKQorICovCitzdGF0aWMgaW50IEN1cmxfd29sZnNzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIGludCByZXR2YWwgPSAwOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKworICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKKyAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOworICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7CisgIH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUKK3dvbGZzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHRpbWVfdCB0aW1lb3V0X21zOworICBpbnQgd2hhdDsKKworICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCisgIGlmKHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlID09IGNvbm5zc2wtPnN0YXRlKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIGlmKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCisgICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMShjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICB3aGlsZShzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKworICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCisgICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKworICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZworICAgICAgIHx8IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgaWYod2hhdCA8IDApIHsKKyAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgICAgKmRvbmUgPSBGQUxTRTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmCisgICAgICogdGhpcyBjb25uZWN0aW9uIGlzIHBhcnQgb2YgYSBtdWx0aSBoYW5kbGUgYW5kIHRoaXMgbG9vcCB3b3VsZAorICAgICAqIGV4ZWN1dGUgYWdhaW4uIFRoaXMgcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8KKyAgICAgKiBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZQorICAgICAqIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkgb3IgZXBvbGwoKSB3aWxsIGFsd2F5cworICAgICAqIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgorICAgICAqLworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLworCisgIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpZihzc2xfY29ubmVjdF9kb25lID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHdvbGZzc2xfcmVjdjsKKyAgICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSB3b2xmc3NsX3NlbmQ7CisgICAgKmRvbmUgPSBUUlVFOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IEZBTFNFOworCisgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3dvbGZzc2xfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQoreworICByZXR1cm4gd29sZnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3dvbGZzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmVzdWx0ID0gd29sZnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIERFQlVHQVNTRVJUKGRvbmUpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfd29sZnNzbF9yYW5kb20oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW50cm9weSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgV0NfUk5HIHJuZzsKKyAgKHZvaWQpZGF0YTsKKyAgaWYod2NfSW5pdFJuZygmcm5nKSkKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIGlmKGxlbmd0aCA+IFVJTlRfTUFYKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgaWYod2NfUk5HX0dlbmVyYXRlQmxvY2soJnJuZywgZW50cm9weSwgKHVuc2lnbmVkKWxlbmd0aCkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICBpZih3Y19GcmVlUm5nKCZybmcpKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF93b2xmc3NsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICp0bXAsIC8qIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdG1wbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2hhMjU2c3VtIC8qIG91dHB1dCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1bnVzZWQpCit7CisgIHdjX1NoYTI1NiBTSEEyNTZwdzsKKyAgKHZvaWQpdW51c2VkOworICB3Y19Jbml0U2hhMjU2KCZTSEEyNTZwdyk7CisgIHdjX1NoYTI1NlVwZGF0ZSgmU0hBMjU2cHcsIHRtcCwgKHdvcmQzMil0bXBsZW4pOworICB3Y19TaGEyNTZGaW5hbCgmU0hBMjU2cHcsIHNoYTI1NnN1bSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgKkN1cmxfd29sZnNzbF9nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk8gaW5mbyBVTlVTRURfUEFSQU0pCit7CisgICh2b2lkKWluZm87CisgIHJldHVybiBCQUNLRU5ELT5oYW5kbGU7Cit9CisKK2NvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF93b2xmc3NsID0geworICB7IENVUkxTU0xCQUNLRU5EX1dPTEZTU0wsICJXb2xmU1NMIiB9LCAvKiBpbmZvICovCisKKyNpZmRlZiBLRUVQX1BFRVJfQ0VSVAorICBTU0xTVVBQX1BJTk5FRFBVQktFWSB8CisjZW5kaWYKKyAgU1NMU1VQUF9TU0xfQ1RYLAorCisgIHNpemVvZihzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSksCisKKyAgQ3VybF93b2xmc3NsX2luaXQsICAgICAgICAgICAgICAgIC8qIGluaXQgKi8KKyAgQ3VybF93b2xmc3NsX2NsZWFudXAsICAgICAgICAgICAgIC8qIGNsZWFudXAgKi8KKyAgQ3VybF93b2xmc3NsX3ZlcnNpb24sICAgICAgICAgICAgIC8qIHZlcnNpb24gKi8KKyAgQ3VybF9ub25lX2NoZWNrX2N4biwgICAgICAgICAgICAgLyogY2hlY2tfY3huICovCisgIEN1cmxfd29sZnNzbF9zaHV0ZG93biwgICAgICAgICAgICAvKiBzaHV0ZG93biAqLworICBDdXJsX3dvbGZzc2xfZGF0YV9wZW5kaW5nLCAgICAgICAgLyogZGF0YV9wZW5kaW5nICovCisgIEN1cmxfd29sZnNzbF9yYW5kb20sICAgICAgICAgICAgICAvKiByYW5kb20gKi8KKyAgQ3VybF9ub25lX2NlcnRfc3RhdHVzX3JlcXVlc3QsICAgLyogY2VydF9zdGF0dXNfcmVxdWVzdCAqLworICBDdXJsX3dvbGZzc2xfY29ubmVjdCwgICAgICAgICAgICAgLyogY29ubmVjdCAqLworICBDdXJsX3dvbGZzc2xfY29ubmVjdF9ub25ibG9ja2luZywgLyogY29ubmVjdF9ub25ibG9ja2luZyAqLworICBDdXJsX3dvbGZzc2xfZ2V0X2ludGVybmFscywgICAgICAgLyogZ2V0X2ludGVybmFscyAqLworICBDdXJsX3dvbGZzc2xfY2xvc2UsICAgICAgICAgICAgICAgLyogY2xvc2Vfb25lICovCisgIEN1cmxfbm9uZV9jbG9zZV9hbGwsICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLworICBDdXJsX3dvbGZzc2xfc2Vzc2lvbl9mcmVlLCAgICAgICAgLyogc2Vzc2lvbl9mcmVlICovCisgIEN1cmxfbm9uZV9zZXRfZW5naW5lLCAgICAgICAgICAgIC8qIHNldF9lbmdpbmUgKi8KKyAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwgICAgLyogc2V0X2VuZ2luZV9kZWZhdWx0ICovCisgIEN1cmxfbm9uZV9lbmdpbmVzX2xpc3QsICAgICAgICAgIC8qIGVuZ2luZXNfbGlzdCAqLworICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsICAgICAgICAgICAvKiBmYWxzZV9zdGFydCAqLworICBDdXJsX25vbmVfbWQ1c3VtLCAgICAgICAgICAgICAgICAvKiBtZDVzdW0gKi8KKyAgQ3VybF93b2xmc3NsX3NoYTI1NnN1bSAgICAgICAgICAgIC8qIHNoYTI1NnN1bSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvd29sZnNzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTY3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1dPTEZTU0xfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9XT0xGU1NMX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTTAorCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX3dvbGZzc2w7CisKKyNlbmRpZiAvKiBVU0VfV09MRlNTTCAqLworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1dPTEZTU0xfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmMKaW5kZXggMGMxMjU2Yi4uZWNlNTM2NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCiAjaWYgZGVmaW5lZChVU0VfR1NLSVQpIHx8IGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfR05VVExTKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfQ1lBU1NMKSB8fCBkZWZpbmVkKFVTRV9TQ0hBTk5FTCkKKyAgICBkZWZpbmVkKFVTRV9XT0xGU1NMKSB8fCBkZWZpbmVkKFVTRV9TQ0hBTk5FTCkKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogI2luY2x1ZGUgInVybGRhdGEuaCIKQEAgLTExMDQsNyArMTEwNCw3IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotI2VuZGlmIC8qIFVTRV9HU0tJVCBvciBVU0VfTlNTIG9yIFVTRV9HTlVUTFMgb3IgVVNFX0NZQVNTTCBvciBVU0VfU0NIQU5ORUwgKi8KKyNlbmRpZiAvKiBVU0VfR1NLSVQgb3IgVVNFX05TUyBvciBVU0VfR05VVExTIG9yIFVTRV9XT0xGU1NMIG9yIFVTRV9TQ0hBTk5FTCAqLwogCiAjaWYgZGVmaW5lZChVU0VfR1NLSVQpCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5oCmluZGV4IGNlNDAyOTcuLjIwNWZkYzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKIAogI2lmIGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX0dOVVRMUykgfHwgXAotICAgIGRlZmluZWQoVVNFX0NZQVNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpCisgICAgZGVmaW5lZChVU0VfV09MRlNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpCiAKICNpbmNsdWRlICJ1cmxkYXRhLmgiCiAKQEAgLTEzMCw1ICsxMzAsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKTsKIENVUkxjb2RlIEN1cmxfdmVyaWZ5aG9zdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpOwotI2VuZGlmIC8qIFVTRV9HU0tJVCBvciBVU0VfTlNTIG9yIFVTRV9HTlVUTFMgb3IgVVNFX0NZQVNTTCBvciBVU0VfU0NIQU5ORUwgKi8KKyNlbmRpZiAvKiBVU0VfR1NLSVQgb3IgVVNFX05TUyBvciBVU0VfR05VVExTIG9yIFVTRV9XT0xGU1NMIG9yIFVTRV9TQ0hBTk5FTCAqLwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1g1MDlBU04xX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CmluZGV4IDYwYzgzMTYuLmQ0NzI5YjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw5ICsxLDQzIEBACisjCitJRigwKSAjIENNYWtlIGhhbmRsZXMgcG9saWN5IHNldHRpbmdzIGluIGl0cyBvd24gYnVpbGQuCitDTUFLRV9NSU5JTVVNX1JFUVVJUkVEKFZFUlNJT04gMi44LjEyIEZBVEFMX0VSUk9SKQoraWYoUE9MSUNZIENNUDAwNzQpCisgIGNtYWtlX3BvbGljeShTRVQgQ01QMDA3NCBORVcpICMzLjEyLjAgYGZpbmRfcGFja2FnZSgpYGAgdXNlcyBgYDxQYWNrYWdlTmFtZT5fUk9PVGBgIHZhcmlhYmxlcy4KK2VuZGlmKCkKK0VORElGKCkKKyMKIFBST0pFQ1QobGliYXJjaGl2ZSBDKQogIwogU0VUKENNQUtFX01PRFVMRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vYnVpbGQvY21ha2UiKQogaWYoTk9UIENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSkKICAgc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke2xpYmFyY2hpdmVfQklOQVJZX0RJUn0vYmluKQogZW5kaWYoKQorSUYoMCkgIyBDTWFrZSBoYW5kbGVzIGJ1aWxkIHR5cGUgc2VsZWN0aW9uIGluIGl0cyBvd24gYnVpbGQuCisjCisjIFNldCB0aGUgQnVpbGQgdHlwZSBmb3IgbWFrZSBiYXNlZCBnZW5lcmF0b3JzLgorIyBZb3UgY2FuIGNob29zZSBmb2xsb3dpbmcgdHlwZXM6CisjICAgRGVidWcgICAgICAgICAgOiBEZWJ1ZyBidWlsZAorIyAgIFJlbGVhc2UgICAgICAgIDogUmVsZWFzZSBidWlsZAorIyAgIFJlbFdpdGhEZWJJbmZvIDogUmVsZWFzZSBidWlsZCB3aXRoIERlYnVnIEluZm8KKyMgICBNaW5TaXplUmVsICAgICA6IFJlbGVhc2UgTWluIFNpemUgYnVpbGQKK0lGKE5PVCBDTUFLRV9CVUlMRF9UWVBFKQorICBTRVQoQ01BS0VfQlVJTERfVFlQRSAiUmVsZWFzZSIgQ0FDSEUgU1RSSU5HICJCdWlsZCBUeXBlIiBGT1JDRSkKK0VORElGKE5PVCBDTUFLRV9CVUlMRF9UWVBFKQorIyBTZXQgYSB2YWx1ZSB0eXBlIHRvIHByb3Blcmx5IGRpc3BsYXkgQ01BS0VfQlVJTERfVFlQRSBvbiBHVUkgaWYgdGhlCisjIHZhbHVlIHR5cGUgaXMgIlVOSU5JVElBTElaRUQiLgorR0VUX1BST1BFUlRZKGNhY2hlZF90eXBlIENBQ0hFIENNQUtFX0JVSUxEX1RZUEUgUFJPUEVSVFkgVFlQRSkKK0lGKCIke2NhY2hlZF90eXBlfSIgU1RSRVFVQUwgIlVOSU5JVElBTElaRUQiKQorICBTRVQoQ01BS0VfQlVJTERfVFlQRSAiJHtDTUFLRV9CVUlMRF9UWVBFfSIgQ0FDSEUgU1RSSU5HICJCdWlsZCBUeXBlIiBGT1JDRSkKK0VORElGKCIke2NhY2hlZF90eXBlfSIgU1RSRVFVQUwgIlVOSU5JVElBTElaRUQiKQorIyBDaGVjayB0aGUgQnVpbGQgVHlwZS4KK0lGKE5PVCAiJHtDTUFLRV9CVUlMRF9UWVBFfSIKKyAgICAgICBNQVRDSEVTICJeKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbClcJCIpCisgIE1FU1NBR0UoRkFUQUxfRVJST1IKKyAgICAgICAgICAiVW5rbm93biBrZXl3b3JkIGZvciBDTUFLRV9CVUlMRF9UWVBFOiAke0NNQUtFX0JVSUxEX1RZUEV9XG4iCisgICAgICAgICAgIkFjY2VwdGFibGUga2V5d29yZHM6IERlYnVnLFJlbGVhc2UsUmVsV2l0aERlYkluZm8sTWluU2l6ZVJlbCIpCitFTkRJRihOT1QgIiR7Q01BS0VfQlVJTERfVFlQRX0iCisgICAgICAgICAgTUFUQ0hFUyAiXihEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpXCQiKQorRU5ESUYoKQogCiAjIE9uIE1hY09TLCBwcmVmZXIgTWFjUG9ydHMgbGlicmFyaWVzIHRvIHN5c3RlbSBsaWJyYXJpZXMuCiAjIEkgaGF2ZW4ndCBjb21lIHVwIHdpdGggYSBjb21wZWxsaW5nIGFyZ3VtZW50IGZvciB0aGlzIHRvIGJlIGNvbmRpdGlvbmFsLgpAQCAtNjYsMTQgKzEwMCwxMjIgQEAKICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXdvZmZhbGwiKQogRU5ESUYoKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IG5lZWQgZmxhZ3Mgc3BlY2lmaWMgdG8gbGliYXJjaGl2ZSB1cHN0cmVhbSBkZXZlbG9wbWVudC4KK2lmIChDTUFLRV9CVUlMRF9UWVBFIFNUUkVRVUFMICJEZWJ1ZyIpCisgIE9QVElPTihFTkFCTEVfV0VSUk9SICJUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMgLSBkZWZhdWx0IGlzIE9OIGZvciBEZWJ1ZywgT0ZGIG90aGVyd2lzZS4iIE9OKQorZWxzZSAoKQorICBPUFRJT04oRU5BQkxFX1dFUlJPUiAiVHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzIC0gZGVmYXVsdCBpcyBPTiBmb3IgRGVidWcsIE9GRiBvdGhlcndpc2UuIiBPRkYpCitlbmRpZiAoKQorCisjIEVzcGVjaWFsbHkgZm9yIGVhcmx5IGRldmVsb3BtZW50LCB3ZSB3YW50IHRvIGJlIGEgbGl0dGxlCisjIGFnZ3Jlc3NpdmUgYWJvdXQgZGlhZ25vc2luZyBidWlsZCBwcm9ibGVtczsgdGhpcyBjYW4gZ2V0CisjIHJlbGF4ZWQgc29tZXdoYXQgaW4gZmluYWwgc2hpcHBpbmcgdmVyc2lvbnMuCitJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLVdhbGwgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJpdHkiKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBhbGwgYnVpbGQgdHlwZXMuCisgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XYWxsIC1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IikKKyAgaWYgKEVOQUJMRV9XRVJST1IpCisgICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdlcnJvciIpCisgIGVuZGlmICgpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGRlYnVnIGJ1aWxkLgorICAjIFRoaXMgaXMgYWRkZWQgaW50byBDTUFLRV9DX0ZMQUdTIHdoZW4gQ01BS0VfQlVJTERfVFlQRSBpcyAiRGVidWciCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XZXh0cmEiKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV3VudXNlZCIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1Xc2hhZG93IikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdtaXNzaW5nLXByb3RvdHlwZXMiKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV2Nhc3QtcXVhbCIpCitFTkRJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIpCitJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0ZMQUdTICItV2FsbCAtV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSIpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGFsbCBidWlsZCB0eXBlcy4KKyAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdhbGwgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJpdHkiKQorICBpZiAoRU5BQkxFX1dFUlJPUikKKyAgICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV2Vycm9yIikKKyAgZW5kaWYgKCkKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyBTZXQgY29tcGlsZSBmbGFncyBmb3IgZGVidWcgYnVpbGQuCisgICMgVGhpcyBpcyBhZGRlZCBpbnRvIENNQUtFX0NfRkxBR1Mgd2hlbiBDTUFLRV9CVUlMRF9UWVBFIGlzICJEZWJ1ZyIKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLWciKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV2V4dHJhIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVd1bnVzZWQiKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV3NoYWRvdyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XbWlzc2luZy1wcm90b3R5cGVzIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdjYXN0LXF1YWwiKQorRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkNsYW5nJCIpCitJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwkIikKKyAgU0VUKENNQUtFX0NfQ09NUElMRVIgInhsY19yIikKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0ZMQUdTICItcWZsYWc9ZTplIC1xZm9ybWF0PXNlYyIpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGFsbCBidWlsZCB0eXBlcy4KKyAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXFmbGFnPWU6ZSAtcWZvcm1hdD1zZWMiKQorICBpZiAoRU5BQkxFX1dFUlJPUikKKyAgICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtcWhhbHQ9dyIpCisgIGVuZGlmICgpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGRlYnVnIGJ1aWxkLgorICAjIFRoaXMgaXMgYWRkZWQgaW50byBDTUFLRV9DX0ZMQUdTIHdoZW4gQ01BS0VfQlVJTERfVFlQRSBpcyAiRGVidWciCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1nIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLXFmbGFnPXc6dyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1xaW5mbz1wcm86dXNlIikKK0VORElGKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMJCIpCitJRiAoTVNWQykKKyAgaWYgKEVOQUJMRV9XRVJST1IpCisgICAgIyAvV1ggb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGdjYydzIC1XZXJyb3Igb3B0aW9uLgorICAgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XWCIpCisgIGVuZGlmICgpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGRlYnVnIGJ1aWxkLgorICAjIFRoaXMgaXMgYWRkZWQgaW50byBDTUFLRV9DX0ZMQUdTIHdoZW4gQ01BS0VfQlVJTERfVFlQRSBpcyAiRGVidWciCisgICMgRW5hYmxlIGxldmVsIDQgQzQwNjI6IFRoZSBlbnVtZXJhdGUgaGFzIG5vIGFzc29jaWF0ZWQgaGFuZGxlciBpbiBhIHN3aXRjaAorICAjICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYW5kIHRoZXJlIGlzIG5vIGRlZmF1bHQgdGhhdCBjYW4gY2F0Y2ggaXQuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQwNjIiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0MjU0OiBBIGxhcmdlciBiaXQgZmllbGQgd2FzIGFzc2lnbmVkIHRvIGEgc21hbGxlciBiaXQKKyAgIyAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQyNTQiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0Mjk1OiBBbiBhcnJheSB3YXMgaW5pdGlhbGl6ZWQgYnV0IHRoZSBsYXN0IGNoYXJhY3RlciBpbgorICAjICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXJyYXkgaXMgbm90IGEgbnVsbDsgYWNjZXNzaW5nIHRoZSBhcnJheSBtYXkKKyAgIyAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQyOTUiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0Mjk2OiBBbiB1bnNpZ25lZCB2YXJpYWJsZSB3YXMgdXNlZCBpbiBhIGNvbXBhcmlzb24KKyAgIyAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHdpdGggemVyby4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDI5NiIpCisgICMgRW5hYmxlIGxldmVsIDQgQzQzODk6IEFuIG9wZXJhdGlvbiBpbnZvbHZlZCBzaWduZWQgYW5kIHVuc2lnbmVkIHZhcmlhYmxlcy4KKyAgIyAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VsZCByZXN1bHQgaW4gYSBsb3NzIG9mIGRhdGEuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQzODkiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0NTA1OiBUaGUgZ2l2ZW4gZnVuY3Rpb24gaXMgbG9jYWwgYW5kIG5vdCByZWZlcmVuY2VkIGluCisgICMgICAgICAgICAgICAgICAgICAgICAgIHRoZSBib2R5IG9mIHRoZSBtb2R1bGU7IHRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGlzCisgICMgICAgICAgICAgICAgICAgICAgICAgIGRlYWQgY29kZS4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDUwNSIpCisgICMgRW5hYmxlIGxldmVsIDQgQzQ1MTQ6IFRoZSBvcHRpbWl6ZXIgcmVtb3ZlZCBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBpcyBub3QKKyAgIyAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0NTE0IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDcwMjogVW5yZWFjaGFibGUgY29kZS4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDcwMiIpCisgICMgRW5hYmxlIGxldmVsIDQgQzQ3MDY6IFRoZSB0ZXN0IHZhbHVlIGluIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB3YXMgdGhlCisgICMgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBvZiBhbiBhc3NpZ25tZW50LgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0NzA2IikKKyAgIyAvT2kgb3B0aW9uIGVuYWJsZXMgYnVpbHQtaW4gZnVuY3Rpb25zLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvT2kiKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciByZWxlYXNlIGJ1aWxkLgorICBTRVQoQ01BS0VfQ19GTEFHU19SRUxFQVNFICIke0NNQUtFX0NfRkxBR1NfUkVMRUFTRX0gL09pIikKK0VORElGIChNU1ZDKQorRU5ESUYoKQorCiAjIEVuYWJsZSBDVGVzdC9DRGFzaCBzdXBwb3J0CiBpbmNsdWRlKENUZXN0KQogCi1PUFRJT04oRU5BQkxFX05FVFRMRSAiRW5hYmxlIHVzZSBvZiBOZXR0bGUiIE9OKQorT1BUSU9OKEVOQUJMRV9NQkVEVExTICJFbmFibGUgdXNlIG9mIG1iZWQgVExTIiBPRkYpCitPUFRJT04oRU5BQkxFX05FVFRMRSAiRW5hYmxlIHVzZSBvZiBOZXR0bGUiIE9GRikKIE9QVElPTihFTkFCTEVfT1BFTlNTTCAiRW5hYmxlIHVzZSBvZiBPcGVuU1NMIiBPTikKK09QVElPTihFTkFCTEVfTElCQjIgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTElCQjIgbGlicmFyeSBpZiBmb3VuZCIgT04pCiBPUFRJT04oRU5BQkxFX0xaNCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMWjQgbGlicmFyeSBpZiBmb3VuZCIgT04pCiBPUFRJT04oRU5BQkxFX0xaTyAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMWk8gbGlicmFyeSBpZiBmb3VuZCIgT0ZGKQogT1BUSU9OKEVOQUJMRV9MWk1BICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIExaTUEgbGlicmFyeSBpZiBmb3VuZCIgT04pCitPUFRJT04oRU5BQkxFX1pTVEQgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0genN0ZCBsaWJyYXJ5IGlmIGZvdW5kIiBPTikKIAogT1BUSU9OKEVOQUJMRV9aTElCICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIFpMSUIgbGlicmFyeSBpZiBmb3VuZCIgT04pCiBPUFRJT04oRU5BQkxFX0JaaXAyICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIEJaaXAyIGxpYnJhcnkgaWYgZm91bmQiIE9OKQpAQCAtODQsMjMgKzIyNiw5OCBAQAogIyBDTkcgaXMgdXNlZCBmb3IgZW5jcnlwdC9kZWNyeXB0IFppcCBhcmNoaXZlcyBvbiBXaW5kb3dzLgogT1BUSU9OKEVOQUJMRV9DTkcgIkVuYWJsZSB0aGUgdXNlIG9mIENORyhDcnlwdG8gTmV4dCBHZW5lcmF0aW9uKSIgT04pCiAKK0lGKDApICMgQ01ha2UgZG9lcyBub3QgYnVpbGQgbGliYXJjaGl2ZSdzIGNvbW1hbmQtbGluZSB0b29scy4KK09QVElPTihFTkFCTEVfVEFSICJFbmFibGUgdGFyIGJ1aWxkaW5nIiBPTikKK09QVElPTihFTkFCTEVfVEFSX1NIQVJFRCAiRW5hYmxlIGR5bmFtaWMgYnVpbGQgb2YgdGFyIiBGQUxTRSkKK09QVElPTihFTkFCTEVfQ1BJTyAiRW5hYmxlIGNwaW8gYnVpbGRpbmciIE9OKQorT1BUSU9OKEVOQUJMRV9DUElPX1NIQVJFRCAiRW5hYmxlIGR5bmFtaWMgYnVpbGQgb2YgY3BpbyIgRkFMU0UpCitPUFRJT04oRU5BQkxFX0NBVCAiRW5hYmxlIGNhdCBidWlsZGluZyIgT04pCitPUFRJT04oRU5BQkxFX0NBVF9TSEFSRUQgIkVuYWJsZSBkeW5hbWljIGJ1aWxkIG9mIGNhdCIgRkFMU0UpCitFTkRJRigpCiBPUFRJT04oRU5BQkxFX1hBVFRSICJFbmFibGUgZXh0ZW5kZWQgYXR0cmlidXRlIHN1cHBvcnQiIE9OKQogT1BUSU9OKEVOQUJMRV9BQ0wgIkVuYWJsZSBBQ0wgc3VwcG9ydCIgT04pCiBPUFRJT04oRU5BQkxFX0lDT05WICJFbmFibGUgaWNvbnYgc3VwcG9ydCIgT04pCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyB0ZXN0cy4KK09QVElPTihFTkFCTEVfVEVTVCAiRW5hYmxlIHVuaXQgYW5kIHJlZ3Jlc3Npb24gdGVzdHMiIE9OKQorT1BUSU9OKEVOQUJMRV9DT1ZFUkFHRSAiRW5hYmxlIGNvZGUgY292ZXJhZ2UgKEdDQyBvbmx5LCBhdXRvbWF0aWNhbGx5IHNldHMgRU5BQkxFX1RFU1QgdG8gT04pIiBGQUxTRSkKK09QVElPTihFTkFCTEVfSU5TVEFMTCAiRW5hYmxlIGluc3RhbGxpbmcgb2YgbGlicmFyaWVzIiBPTikKKworU0VUKFBPU0lYX1JFR0VYX0xJQiAiQVVUTyIgQ0FDSEUgU1RSSU5HICJDaG9vc2Ugd2hhdCBsaWJyYXJ5IHNob3VsZCBwcm92aWRlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IikKK1NFVChFTkFCTEVfU0FGRVNFSCAiQVVUTyIgQ0FDSEUgU1RSSU5HICJFbmFibGUgdXNlIG9mIC9TQUZFU0VIIGxpbmtlciBmbGFnIChNU1ZDIG9ubHkpIikKK1NFVChXSU5ET1dTX1ZFUlNJT04gIldJTjciIENBQ0hFIFNUUklORyAiU2V0IFdpbmRvd3MgdmVyc2lvbiB0byB1c2UgKFdpbmRvd3Mgb25seSkiKQorCitJRihFTkFCTEVfQ09WRVJBR0UpCisgICAgICAgaW5jbHVkZShMaWJhcmNoaXZlQ29kZUNvdmVyYWdlKQorRU5ESUYoRU5BQkxFX0NPVkVSQUdFKQorCitJRihFTkFCTEVfVEVTVCkKKyAgICAgICBFTkFCTEVfVEVTVElORygpCitFTkRJRihFTkFCTEVfVEVTVCkKK0VORElGKCkKIAogSUYoV0lOMzIpCi0gICNFTFNFSUYoV0lORE9XU19WRVJTSU9OIFNUUkVRVUFMICJXSU5YUCIpCiAgIFNFVChOVERESV9WRVJTSU9OIDB4MDUwMTAwMDApCiAgIFNFVChfV0lOMzJfV0lOTlQgMHgwNTAxKQogICBTRVQoV0lOVkVSIDB4MDUwMSkKIEVORElGKFdJTjMyKQogCi1zZXQoSEFWRV9QVEhSRUFEX0ggMCkgIyBubyB0aHJlYWRzIGluIENNYWtlCitJRigwKSAjIENNYWtlIGhhcmQtY29kZXMgaXRzIG93biBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBXaW5kb3dzLgorSUYoV0lOMzIpCisgIElGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lOOCIpCisgICAgU0VUKE5URERJX1ZFUlNJT04gMHgwNjAyMDAwMCkKKyAgICBTRVQoX1dJTjMyX1dJTk5UIDB4MDYwMikKKyAgICBTRVQoV0lOVkVSIDB4MDYwMikKKyAgRUxTRUlGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lONyIpCisgICAgU0VUKE5URERJX1ZFUlNJT04gMHgwNjAxMDAwMCkKKyAgICBTRVQoX1dJTjMyX1dJTk5UIDB4MDYwMSkKKyAgICBTRVQoV0lOVkVSIDB4MDYwMSkKKyAgRUxTRUlGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV1MwOCIpCisgICAgU0VUKE5URERJX1ZFUlNJT04gMHgwNjAwMDEwMCkKKyAgICBTRVQoX1dJTjMyX1dJTk5UIDB4MDYwMCkKKyAgICBTRVQoV0lOVkVSIDB4MDYwMCkKKyAgRUxTRUlGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiVklTVEEiKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMDAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDApCisgICAgU0VUKFdJTlZFUiAweDA2MDApCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldTMDMiKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDUwMjAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA1MDIpCisgICAgU0VUKFdJTlZFUiAweDA1MDIpCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTlhQIikKKyAgICBTRVQoTlRERElfVkVSU0lPTiAweDA1MDEwMDAwKQorICAgIFNFVChfV0lOMzJfV0lOTlQgMHgwNTAxKQorICAgIFNFVChXSU5WRVIgMHgwNTAxKQorICBFTFNFKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lOOCIpCisgICAgIyBEZWZhdWx0IHRvIFdpbmRvd3MgU2VydmVyIDIwMDMgQVBJIGlmIHdlIGRvbid0IHJlY29nbml6ZSB0aGUgc3BlY2lmaWVyCisgICAgU0VUKE5URERJX1ZFUlNJT04gMHgwNTAyMDAwMCkKKyAgICBTRVQoX1dJTjMyX1dJTk5UIDB4MDUwMikKKyAgICBTRVQoV0lOVkVSIDB4MDUwMikKKyAgRU5ESUYoV0lORE9XU19WRVJTSU9OIFNUUkVRVUFMICJXSU44IikKK0VORElGKFdJTjMyKQorCitJRihNU1ZDKQorICBJRihFTkFCTEVfU0FGRVNFSCBTVFJFUVVBTCAiWUVTIikKKyAgICBTRVQoQ01BS0VfRVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvU0FGRVNFSCIpCisgICAgU0VUKENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30gL1NBRkVTRUgiKQorICAgIFNFVChDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1N9IC9TQUZFU0VIIikKKyAgICBTRVQoRU5We0xERkxBR1N9ICIkRU5We0xERkxBR1N9IC9TQUZFU0VIIikKKyAgRUxTRUlGKEVOQUJMRV9TQUZFU0VIIFNUUkVRVUFMICJOTyIpCisgICAgU0VUKENNQUtFX0VYRV9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfRVhFX0xJTktFUl9GTEFHU30gL1NBRkVTRUg6Tk8iKQorICAgIFNFVChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TQUZFU0VIOk5PIikKKyAgICBTRVQoQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTfSAvU0FGRVNFSDpOTyIpCisgICAgU0VUKEVOVntMREZMQUdTfSAiJEVOVntMREZMQUdTfSAvU0FGRVNFSDpOTyIpCisgIEVORElGKEVOQUJMRV9TQUZFU0VIIFNUUkVRVUFMICJZRVMiKQorRU5ESUYoTVNWQykKK0VORElGKCkKIAogSUYoIiR7Q01BS0VfQ19QTEFURk9STV9JRH0iIE1BVENIRVMgIl4oSFAtVVgpJCIpCiAgIEFERF9ERUZJTklUSU9OUygtRF9YT1BFTl9TT1VSQ0U9NTAwKSAjIEFzayB3Y2hhci5oIGZvciBtYnN0YXRlX3QKIEVORElGKCkKIAorSUYoTUlOR1cpCisgIEFERF9ERUZJTklUSU9OUygtRF9fVVNFX01JTkdXX0FOU0lfU1RESU8pCitFTkRJRigpCisKICMKIElOQ0xVREUoQ2hlY2tDU291cmNlQ29tcGlsZXMpCiBJTkNMVURFKENoZWNrQ1NvdXJjZVJ1bnMpCkBAIC0yODAsOCArNDk3LDYgQEAKICAgICBBRERfREVGSU5JVElPTlMoLURVU0VfQlpJUDJfU1RBVElDKQogICBFTkRJRihVU0VfQlpJUDJfRExMKQogRU5ESUYoQlpJUDJfRk9VTkQpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIEJaSVAyX0lOQ0xVREVfRElSKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBCWklQMl9MSUJSQVJJRVMpCiAKIAogIwpAQCAtMjkwLDEyICs1MDUsMTUgQEAKIElGKEVOQUJMRV9MWk1BKQogICBGSU5EX1BBQ0tBR0UoTGliTFpNQSkKIEVMU0UoKQotICBTRVQoTElCWk1BX0ZPVU5EIEZBTFNFKSAjIE92ZXJyaWRlIGNhY2hlZCB2YWx1ZQorICBTRVQoTElCTFpNQV9GT1VORCBGQUxTRSkgIyBPdmVycmlkZSBjYWNoZWQgdmFsdWUKIEVORElGKCkKIAogSUYoTElCTFpNQV9GT1VORCkKICAgU0VUKEhBVkVfTElCTFpNQSAxKQogICBTRVQoSEFWRV9MWk1BX0ggMSkKKyAgQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke0xJQkxaTUFfSU5DTFVERV9ESVJ9KQorICBTRVQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7TElCTFpNQV9MSUJSQVJJRVN9KQogICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7TElCTFpNQV9JTkNMVURFX0RJUlN9KQogICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtMSUJMWk1BX0xJQlJBUklFU30pCiAgIElGKENNQUtFX1VTRV9TWVNURU1fTElCTFpNQSkKQEAgLTMxMSwxMCArNTI5LDEwIEBACiAgIEVMU0UoKQogICAgIEFERF9ERUZJTklUSU9OUygtRExaTUFfQVBJX1NUQVRJQykKICAgRU5ESUYoKQorICBDTUFLRV9QT1BfQ0hFQ0tfU1RBVEUoKQogRUxTRShMSUJMWk1BX0ZPVU5EKQogIyBMWk1BIG5vdCBmb3VuZCBhbmQgd2lsbCBub3QgYmUgdXNlZC4KIEVORElGKExJQkxaTUFfRk9VTkQpCi1JRigwKSAjIENNYWtlIGRvZXMgbm90IG5lZWQgTFpPMiBzdXBwb3J0IGluIGxpYmFyY2hpdmUKICMKICMgRmluZCBMWk8yCiAjCkBAIC0zNDEsMTAgKzU1OSwzNSBAQAogICAjIFRPRE86IHRlc3QgZm9yIHN0YXRpYyBsaWJyYXJ5LgogICAjCiBFTkRJRihMWk8yX0ZPVU5EKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBMWk8yX0lOQ0xVREVfRElSKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBMWk8yX0xJQlJBUlkpCi1FTkRJRigpCi1JRigwKSAjIENNYWtlIGRvZXMgbm90IG5lZWQgTFo0IHN1cHBvcnQgaW4gbGliYXJjaGl2ZQorIworIyBGaW5kIGxpYmIyCisjCitJRihFTkFCTEVfTElCQjIpCisgIElGIChMSUJCMl9JTkNMVURFX0RJUikKKyAgICAjIEFscmVhZHkgaW4gY2FjaGUsIGJlIHNpbGVudAorICAgIFNFVChMSUJCMl9GSU5EX1FVSUVUTFkgVFJVRSkKKyAgRU5ESUYgKExJQkIyX0lOQ0xVREVfRElSKQorCisgIEZJTkRfUEFUSChMSUJCMl9JTkNMVURFX0RJUiBibGFrZTIuaCkKKyAgRklORF9MSUJSQVJZKExJQkIyX0xJQlJBUlkgTkFNRVMgYjIgbGliYjIpCisgIElOQ0xVREUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhMSUJCMiBERUZBVUxUX01TRyBMSUJCMl9MSUJSQVJZIExJQkIyX0lOQ0xVREVfRElSKQorRUxTRShFTkFCTEVfTElCQjIpCisgIFNFVChMSUJCMl9GT1VORCBGQUxTRSkgIyBPdmVycmlkZSBjYWNoZWQgdmFsdWUKK0VORElGKEVOQUJMRV9MSUJCMikKK0lGKExJQkIyX0ZPVU5EKQorICBTRVQoSEFWRV9MSUJCMiAxKQorICBTRVQoSEFWRV9CTEFLRTJfSCAxKQorICBTRVQoQVJDSElWRV9CTEFLRTIgRkFMU0UpCisgIExJU1QoQVBQRU5EIEFERElUSU9OQUxfTElCUyAke0xJQkIyX0xJQlJBUll9KQorICBDTUFLRV9QVVNIX0NIRUNLX1NUQVRFKCkKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke0xJQkIyX0xJQlJBUll9KQorICBTRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtMSUJCMl9JTkNMVURFX0RJUn0pCisgIENIRUNLX0ZVTkNUSU9OX0VYSVNUUyhibGFrZTJzcF9pbml0IEhBVkVfTElCQjIpCisgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCitFTFNFKExJQkIyX0ZPVU5EKQorICBTRVQoQVJDSElWRV9CTEFLRTIgVFJVRSkKK0VORElGKExJQkIyX0ZPVU5EKQogIwogIyBGaW5kIExaNAogIwpAQCAtMzc0LDMzICs2MTcsNDIgQEAKICAgIyBUT0RPOiB0ZXN0IGZvciBzdGF0aWMgbGlicmFyeS4KICAgIwogRU5ESUYoTFo0X0ZPVU5EKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBMWjRfSU5DTFVERV9ESVIpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExaNF9MSUJSQVJZKQotRU5ESUYoKQogIwogIyBGaW5kIFpzdGQKICMKLUlGIChaU1REX0lOQ0xVREVfRElSKQotICAjIEFscmVhZHkgaW4gY2FjaGUsIGJlIHNpbGVudAotICBTRVQoWlNURF9GSU5EX1FVSUVUTFkgVFJVRSkKLUVORElGIChaU1REX0lOQ0xVREVfRElSKQorSUYoRU5BQkxFX1pTVEQpCisgIElGIChaU1REX0lOQ0xVREVfRElSKQorICAgICMgQWxyZWFkeSBpbiBjYWNoZSwgYmUgc2lsZW50CisgICAgU0VUKFpTVERfRklORF9RVUlFVExZIFRSVUUpCisgIEVORElGIChaU1REX0lOQ0xVREVfRElSKQogCi1GSU5EX1BBVEgoWlNURF9JTkNMVURFX0RJUiB6c3RkLmgpCi1GSU5EX0xJQlJBUlkoWlNURF9MSUJSQVJZIE5BTUVTIHpzdGQgbGlienN0ZCkKLUlOQ0xVREUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCi1GSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoWlNURCBERUZBVUxUX01TRyBaU1REX0xJQlJBUlkgWlNURF9JTkNMVURFX0RJUikKKyAgRklORF9QQVRIKFpTVERfSU5DTFVERV9ESVIgenN0ZC5oKQorICBGSU5EX0xJQlJBUlkoWlNURF9MSUJSQVJZIE5BTUVTIHpzdGQgbGlienN0ZCkKKyAgSU5DTFVERShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKyAgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKFpTVEQgREVGQVVMVF9NU0cgWlNURF9MSUJSQVJZIFpTVERfSU5DTFVERV9ESVIpCitFTFNFKEVOQUJMRV9aU1REKQorICBTRVQoWlNURF9GT1VORCBGQUxTRSkgIyBPdmVycmlkZSBjYWNoZWQgdmFsdWUKK0VORElGKEVOQUJMRV9aU1REKQogSUYoWlNURF9GT1VORCkKICAgU0VUKEhBVkVfWlNURF9IIDEpCiAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtaU1REX0lOQ0xVREVfRElSfSkKICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7WlNURF9MSUJSQVJZfSkKICAgU0VUKEhBVkVfTElCWlNURCAxKQorICBJRigwKSAjIENNYWtlIGV4cGVjdHMgdGhlIHpzdGQgbGlicmFyeSB0byB3b3JrLgorICBDTUFLRV9QVVNIX0NIRUNLX1NUQVRFKCkKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke1pTVERfTElCUkFSWX0pCisgIFNFVChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke1pTVERfSU5DTFVERV9ESVJ9KQorICBDSEVDS19GVU5DVElPTl9FWElTVFMoWlNURF9jb21wcmVzc1N0cmVhbSBIQVZFX0xJQlpTVEQpCiAgICMKICAgIyBUT0RPOiB0ZXN0IGZvciBzdGF0aWMgbGlicmFyeS4KICAgIworICBDTUFLRV9QT1BfQ0hFQ0tfU1RBVEUoKQorICBFTkRJRigpCiBFTkRJRihaU1REX0ZPVU5EKQogTUFSS19BU19BRFZBTkNFRChDTEVBUiBaU1REX0lOQ0xVREVfRElSKQogTUFSS19BU19BRFZBTkNFRChDTEVBUiBaU1REX0xJQlJBUlkpCiAKKwogIwogIyBDaGVjayBoZWFkZXJzCiAjCkBAIC00MjAsOSArNjcyLDExIEBACiAjIEFscGhhYmV0aXplIHRoZSByZXN0IHVubGVzcyB0aGVyZSdzIGEgY29tcGVsbGluZyByZWFzb24KIElGKEVOQUJMRV9BQ0wpCiAgIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiYWNsL2xpYmFjbC5oIiBIQVZFX0FDTF9MSUJBQ0xfSCkKLUVMU0UoRU5BQkxFX0FDTCkKKyAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJhdHRyL3hhdHRyLmgiIEhBVkVfQVRUUl9YQVRUUl9IKQorRUxTRSgpCiAgIFNFVChIQVZFX0FDTF9MSUJBQ0xfSCBGQUxTRSkKLUVORElGKEVOQUJMRV9BQ0wpCisgIFNFVChIQVZFX0FUVFJfWEFUVFJfSCBGQUxTRSkKK0VORElGKCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiY3R5cGUuaCIgSEFWRV9DVFlQRV9IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJjb3B5ZmlsZS5oIiBIQVZFX0NPUFlGSUxFX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImRpcmVjdC5oIiBIQVZFX0RJUkVDVF9IKQpAQCAtNTIwLDYgKzc3NCwyNiBAQAogIFNBRkVfVE9fREVGSU5FX0VYVEVOU0lPTlMpCiAKICMKKyMgRmluZCBtYmVkIFRMUworIworSUYoRU5BQkxFX01CRURUTFMpCisgIEZJTkRfUEFDS0FHRShNYmVkVExTKQorICBJRihNQkVEVExTX0ZPVU5EKQorICAgIFNFVChIQVZFX0xJQk1CRURDUllQVE8gMSkKKyAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtNQkVEQ1JZUFRPX0xJQlJBUll9KQorICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtNQkVEVExTX0lOQ0xVREVfRElSU30pCisKKyAgICBMSVNUKEFQUEVORCBDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke01CRURUTFNfSU5DTFVERV9ESVJTfSkKKyAgICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoIm1iZWR0bHMvYWVzLmgiIEhBVkVfTUJFRFRMU19BRVNfSCkKKyAgICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoIm1iZWR0bHMvbWQuaCIgSEFWRV9NQkVEVExTX01EX0gpCisgICAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJtYmVkdGxzL3BrY3M1LmgiIEhBVkVfTUJFRFRMU19QS0NTNV9IKQorCisgIEVORElGKE1CRURUTFNfRk9VTkQpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTUJFRFRMU19JTkNMVURFX0RJUlMpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTUJFRENSWVBUT19MSUJSQVJZKQorRU5ESUYoRU5BQkxFX01CRURUTFMpCisKKyMKICMgRmluZCBOZXR0bGUKICMKIElGKEVOQUJMRV9ORVRUTEUpCkBAIC01ODAsNiArODU0LDggQEAKICAgICAgIFNUUklORyhUT1VQUEVSICIke0FMR09SSVRITX0iIGFsZ29yaXRobSkKICAgICAgIElGICgiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5PUEVOU1NMJCIgQU5EIE5PVCBPUEVOU1NMX0ZPVU5EKQogICAgICAgICBTRVQoQVJDSElWRV9DUllQVE9fJHtBTEdPUklUSE19XyR7SU1QTEVNRU5UQVRJT059IEZBTFNFKQorICAgICAgRUxTRUlGKCIke0lNUExFTUVOVEFUSU9OfSIgTUFUQ0hFUyAiXk1CRURUTFMkIiBBTkQgTk9UIE1CRURUTFNfRk9VTkQpCisgICAgICAgIFNFVChBUkNISVZFX0NSWVBUT18ke0FMR09SSVRITX1fJHtJTVBMRU1FTlRBVElPTn0gRkFMU0UpCiAgICAgICBFTFNFSUYoIiR7SU1QTEVNRU5UQVRJT059IiBNQVRDSEVTICJeTkVUVExFJCIgQU5EIE5PVCBORVRUTEVfRk9VTkQpCiAgICAgICAgIFNFVChBUkNISVZFX0NSWVBUT18ke0FMR09SSVRITX1fJHtJTVBMRU1FTlRBVElPTn0gRkFMU0UpCiAgICAgICBFTkRJRigiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5PUEVOU1NMJCIgQU5EIE5PVCBPUEVOU1NMX0ZPVU5EKQpAQCAtNTk1LDYgKzg3MSwxMSBAQAogCSAgICAgICIke1RSWV9DUllQVE9fUkVRVUlSRURfSU5DTFVERVN9OyR7T1BFTlNTTF9JTkNMVURFX0RJUn0iKQogCSAgICBTRVQoVFJZX0NSWVBUT19SRVFVSVJFRF9MSUJTCiAJICAgICAgICAiLURMSU5LX0xJQlJBUklFUzpTVFJJTkc9JHtPUEVOU1NMX0xJQlJBUklFU30iKQorCUVMU0VJRigiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5NQkVEVExTJCIgQU5EIE1CRURUTFNfRk9VTkQpCisJICAgIFNFVChUUllfQ1JZUFRPX1JFUVVJUkVEX0lOQ0xVREVTCisJICAgICAgIiR7VFJZX0NSWVBUT19SRVFVSVJFRF9JTkNMVURFU307JHtNQkVEVExTX0lOQ0xVREVfRElSU30iKQorCSAgICBTRVQoVFJZX0NSWVBUT19SRVFVSVJFRF9MSUJTCisJICAgICAgIi1ETElOS19MSUJSQVJJRVM6U1RSSU5HPSR7TUJFRENSWVBUT19MSUJSQVJZfSIpCiAJRUxTRUlGKCIke0lNUExFTUVOVEFUSU9OfSIgTUFUQ0hFUyAiXk5FVFRMRSQiIEFORCBORVRUTEVfRk9VTkQpCiAJICAgIFNFVChUUllfQ1JZUFRPX1JFUVVJUkVEX0lOQ0xVREVTCiAJICAgICAgIiR7VFJZX0NSWVBUT19SRVFVSVJFRF9JTkNMVURFU307JHtORVRUTEVfSU5DTFVERV9ESVJ9IikKQEAgLTc1OSwxOCArMTA0MCwxOSBAQAogTUFDUk8oQ0hFQ0tfSUNPTlYgTElCIFRSWV9JQ09OVl9DT05TVCkKICAgSUYoTk9UIEhBVkVfSUNPTlYpCiAgICAgQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCSMgU2F2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcwotICAgIElGIChDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIE9SCi0gICAgICAgIENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgICBJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIgT1IKKyAgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKICAgICAgICMKICAgICAgICMgRHVyaW5nIGNoZWNraW5nIGljb252IHByb3RvIHR5cGUsIHdlIHNob3VsZCB1c2UgLVdlcnJvciB0byBhdm9pZCB0aGUKICAgICAgICMgc3VjY2VzcyBvZiBpY29udiBkZXRlY3Rpb24gd2l0aCBhIHdhcm5pZyB3aGljaCBzdWNjZXNzIGlzIGEgbWlzcwogICAgICAgIyBkZXRlY3Rpb24uIFNvIHRoaXMgbmVlZHMgZm9yIGFsbCBidWlsZCBtb2RlKGV2ZW4gaXQncyBhIHJlbGVhc2UgbW9kZSkuCiAgICAgICAjCiAgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIiR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IC1XZXJyb3IiKQotICAgIEVORElGICgpCi0gICAgSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIikKKyAgICBFTkRJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIgT1IKKyAgICAgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKKyAgICBJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwkIikKICAgICAgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30gLXFoYWx0PXcgLXFmbGFnPXc6dyIpCi0gICAgRU5ESUYgKCkKKyAgICBFTkRJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwkIikKICAgICBJRiAoTVNWQykKICAgICAgICMgTk9URTogL1dYIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBnY2MncyAtV2Vycm9yIG9wdGlvbi4KICAgICAgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30gL1dYIikKQEAgLTg5MCw3ICsxMTcyLDYgQEAKICAgVU5TRVQoTElCQ0hBUlNFVF9TVEFUSUMgQ0FDSEUpCiBFTkRJRihFTkFCTEVfSUNPTlYpCiAKLUlGKDApICMgQ01ha2UgZG9lcyBub3QgbmVlZCBYTUwgc3VwcG9ydCBpbiBsaWJhcmNoaXZlCiAjCiAjIEZpbmQgTGlieG1sMgogIwpAQCAtOTM3LDIzICsxMjE4LDEzNSBAQAogICAgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCSMgUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcwogICBFTkRJRihFWFBBVF9GT1VORCkKIEVORElGKExJQlhNTDJfRk9VTkQpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExJQlhNTDJfSU5DTFVERV9ESVIpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExJQlhNTDJfTElCUkFSSUVTKQotRU5ESUYoKQorCisjCisjIFBPU0lYIFJlZ3VsYXIgRXhwcmVzc2lvbiBzdXBwb3J0CisjCitJRihQT1NJWF9SRUdFWF9MSUIgTUFUQ0hFUyAiXihBVVRPfExJQkN8TElCUkVHRVgpJCIpCisgICMKKyAgIyBJZiBQQ1JFUE9TSVggaXMgbm90IGZvdW5kIG9yIG5vdCByZXF1ZXN0ZWQsIHRyeSB1c2luZyByZWdleAorICAjIGZyb20gbGliYyBvciBsaWJyZWdleAorICAjCisgIEZJTkRfUEFUSChSRUdFWF9JTkNMVURFX0RJUiByZWdleC5oKQorICBJRihSRUdFWF9JTkNMVURFX0RJUikKKyAgICBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMocmVnY29tcCBIQVZFX1JFR0NPTVBfTElCQykKKyAgICAjCisgICAgIyBJZiBsaWJjIGRvZXMgbm90IHByb3ZpZGUgcmVnZXgsIGZpbmQgbGlicmVnZXguCisgICAgIworICAgIElGKE5PVCBIQVZFX1JFR0NPTVBfTElCQykKKyAgICAgIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQkjIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMKKyAgICAgIEZJTkRfTElCUkFSWShSRUdFWF9MSUJSQVJZIHJlZ2V4KQorICAgICAgSUYoUkVHRVhfTElCUkFSWSkKKyAgICAgICAgU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke1JFR0VYX0xJQlJBUll9KQorICAgICAgICBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMocmVnY29tcCBIQVZFX1JFR0NPTVBfTElCUkVHRVgpCisgICAgICAgIElGKEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKKyAgICAgICAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtSRUdFWF9MSUJSQVJZfSkKKyAgICAgICAgICAjCisgICAgICAgICAgIyBJZiByZWdleC5oIGlzIG5vdCBmb3VuZCwgcmV0cnkgbG9va2luZyBmb3IgcmVnZXguaCBhdAorICAgICAgICAgICMgUkVHRVhfSU5DTFVERV9ESVIKKyAgICAgICAgICAjCisgICAgICAgICAgSUYoTk9UIEhBVkVfUkVHRVhfSCkKKyAgICAgICAgICAgIFVOU0VUKEhBVkVfUkVHRVhfSCBDQUNIRSkKKyAgICAgICAgICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtSRUdFWF9JTkNMVURFX0RJUn0pCisgICAgICAgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtSRUdFWF9JTkNMVURFX0RJUn0pCisgICAgICAgICAgICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoInJlZ2V4LmgiIEhBVkVfUkVHRVhfSCkKKyAgICAgICAgICBFTkRJRihOT1QgSEFWRV9SRUdFWF9IKQorICAgICAgICAgICMgVGVzdCBpZiBhIG1hY3JvIGlzIG5lZWRlZCBmb3IgdGhlIGxpYnJhcnkuCisgICAgICAgICAgVFJZX01BQ1JPX0ZPUl9MSUJSQVJZKAorICAgICAgICAgICAgIiR7UkVHRVhfSU5DTFVERV9ESVJ9IiAiJHtSRUdFWF9MSUJSQVJZfSIKKyAgICAgICAgICAgIENPTVBJTEVTCisgICAgICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPlxuI2luY2x1ZGUgPHJlZ2V4Lmg+XG5pbnQgbWFpbigpIHtyZWdleF90IHI7cmV0dXJuIHJlZ2NvbXAoJnIsIFwiXCIsIDApO30iCisgICAgICAgICAgICAiVVNFX1JFR0VYX0RMTDtVU0VfUkVHRVhfU1RBVElDIikKKyAgICAgICAgICBJRihVU0VfUkVHRVhfRExMKQorICAgICAgICAgICAgQUREX0RFRklOSVRJT05TKC1EVVNFX1JFR0VYX0RMTCkKKyAgICAgICAgICBFTFNFSUYoVVNFX1JFR0VYX1NUQVRJQykKKyAgICAgICAgICAgIEFERF9ERUZJTklUSU9OUygtRFVTRV9SRUdFWF9TVEFUSUMpCisgICAgICAgICAgRU5ESUYoVVNFX1JFR0VYX0RMTCkKKyAgICAgICAgRU5ESUYoSEFWRV9SRUdDT01QX0xJQlJFR0VYKQorICAgICAgRU5ESUYoUkVHRVhfTElCUkFSWSkKKyAgICAgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCSMgUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcworICAgIEVORElGKE5PVCBIQVZFX1JFR0NPTVBfTElCQykKKyAgRU5ESUYoUkVHRVhfSU5DTFVERV9ESVIpCisgIElGKEhBVkVfUkVHQ09NUF9MSUJDIE9SIEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKKyAgICBTRVQoRk9VTkRfUE9TSVhfUkVHRVhfTElCIDEpCisgIEVORElGKEhBVkVfUkVHQ09NUF9MSUJDIE9SIEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKK0VORElGKFBPU0lYX1JFR0VYX0xJQiBNQVRDSEVTICJeKEFVVE98TElCQ3xMSUJSRUdFWCkkIikKKworSUYoTk9UIEZPVU5EX1BPU0lYX1JFR0VYX0xJQiBBTkQgUE9TSVhfUkVHRVhfTElCIE1BVENIRVMgIl4oQVVUT3xMSUJQQ1JFUE9TSVgpJCIpCisgICMKKyAgIyBJZiByZXF1ZXN0ZWQsIHRyeSBmaW5kaW5nIGxpYnJhcnkgZm9yIFBDUkVQT1NJWAorICAjCisgIElGKEVOQUJMRV9MaWJHQ0MpCisgICAgRklORF9QQUNLQUdFKExpYkdDQykKKyAgRUxTRSgpCisgICAgU0VUKExJQkdDQ19GT1VORCBGQUxTRSkgIyBPdmVycmlkZSBjYWNoZWQgdmFsdWUKKyAgRU5ESUYoKQorICBJRihFTkFCTEVfUENSRVBPU0lYKQorICAgIEZJTkRfUEFDS0FHRShQQ1JFUE9TSVgpCisgIEVMU0UoKQorICAgIFNFVChQQ1JFUE9TSVhfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCisgIEVORElGKCkKKyAgSUYoUENSRVBPU0lYX0ZPVU5EKQorICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQQ1JFX0lOQ0xVREVfRElSfSkKKyAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSkKKyAgICAjIFRlc3QgaWYgYSBtYWNybyBpcyBuZWVkZWQgZm9yIHRoZSBsaWJyYXJ5LgorICAgIFRSWV9NQUNST19GT1JfTElCUkFSWSgKKyAgICAgICIke1BDUkVfSU5DTFVERV9ESVJ9IiAiJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSIKKyAgICAgIENPTVBJTEVTCisgICAgICAiI2luY2x1ZGUgPHBjcmVwb3NpeC5oPlxuaW50IG1haW4oKSB7cmVnZXhfdCByO3JldHVybiByZWdjb21wKCZyLCBcIlwiLCAwKTt9IgorICAgICAgIldJVEhPVVRfUENSRV9TVEFUSUM7UENSRV9TVEFUSUMiKQorICAgIElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgIEFERF9ERUZJTklUSU9OUygtRFBDUkVfU1RBVElDKQorCUVMU0VJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgTk9UIFBDUkVfU1RBVElDIEFORCBQQ1JFX0ZPVU5EKQorCSAgIyBEZXRlcm1pbmUgaWYgcGNyZSBzdGF0aWMgbGlicmFyaWVzIGFyZSB0byBiZSB1c2VkLgorICAgICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7UENSRV9MSUJSQVJJRVN9KQorICAgICAgU0VUKFRNUF9MSUJSQVJJRVMgJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSAke1BDUkVfTElCUkFSSUVTfSkKKyAgICAgIE1FU1NBR0UoU1RBVFVTICJ0cnlpbmcgYWdhaW4gd2l0aCAtbHBjcmUgaW5jbHVkZWQiKQorICAgICAgVFJZX01BQ1JPX0ZPUl9MSUJSQVJZKAorICAgICAgICAiJHtQQ1JFX0lOQ0xVREVfRElSfSIgIiR7VE1QX0xJQlJBUklFU30iCisgICAgICAgIENPTVBJTEVTCisgICAgICAgICIjaW5jbHVkZSA8cGNyZXBvc2l4Lmg+XG5pbnQgbWFpbigpIHtyZWdleF90IHI7cmV0dXJuIHJlZ2NvbXAoJnIsIFwiXCIsIDApO30iCisgICAgICAgICJXSVRIT1VUX1BDUkVfU1RBVElDO1BDUkVfU1RBVElDIikKKyAgICAgIElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgICAgQUREX0RFRklOSVRJT05TKC1EUENSRV9TVEFUSUMpCisgICAgICBFTFNFSUYoTk9UIFdJVEhPVVRfUENSRV9TVEFUSUMgQU5EIE5PVCBQQ1JFX1NUQVRJQyBBTkQgTVNWQyBBTkQgTElCR0NDX0ZPVU5EKQorICAgICAgICAjIFdoZW4gZG9pbmcgYSBWaXN1YWwgU3R1ZGlvIGJ1aWxkIHVzaW5nIHBjcmUgc3RhdGljIGxpYnJhcmllcworICAgICAgICAjIGJ1aWx0IHVzaW5nIHRoZSBtaW5ndyB0b29sY2hhaW4sIC1sZ2NjIGlzIG5lZWRlZCB0byByZXNvbHZlCisgICAgICAgICMgX19fY2hrc3RrX21zLgorICAgICAgICBNRVNTQUdFKFNUQVRVUyAiVmlzdWFsIFN0dWRpbyBidWlsZCBkZXRlY3RlZCwgdHJ5aW5nIGFnYWluIHdpdGggLWxnY2MgaW5jbHVkZWQiKQorICAgICAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtMSUJHQ0NfTElCUkFSSUVTfSkKKyAgICAgICAgU0VUKFRNUF9MSUJSQVJJRVMgJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSAke1BDUkVfTElCUkFSSUVTfSAke0xJQkdDQ19MSUJSQVJJRVN9KQorICAgICAgICAgIFRSWV9NQUNST19GT1JfTElCUkFSWSgKKyAgICAgICAgICAgICIke1BDUkVfSU5DTFVERV9ESVJ9IiAiJHtUTVBfTElCUkFSSUVTfSIKKyAgICAgICAgICAgIENPTVBJTEVTCisgICAgICAgICAgICAiI2luY2x1ZGUgPHBjcmVwb3NpeC5oPlxuaW50IG1haW4oKSB7cmVnZXhfdCByO3JldHVybiByZWdjb21wKCZyLCBcIlwiLCAwKTt9IgorICAgICAgICAgICAgIldJVEhPVVRfUENSRV9TVEFUSUM7UENSRV9TVEFUSUMiKQorICAgICAgICAgIElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgICAgICAgIEFERF9ERUZJTklUSU9OUygtRFBDUkVfU1RBVElDKQorICAgICAgICAgIEVORElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgIEVORElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICBFTkRJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgIEVORElGKFBDUkVQT1NJWF9GT1VORCkKKyAgTUFSS19BU19BRFZBTkNFRChDTEVBUiBQQ1JFX0lOQ0xVREVfRElSKQorICBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIFBDUkVQT1NJWF9MSUJSQVJJRVMpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgUENSRV9MSUJSQVJJRVMpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTElCR0NDX0xJQlJBUklFUykKK0VORElGKE5PVCBGT1VORF9QT1NJWF9SRUdFWF9MSUIgQU5EIFBPU0lYX1JFR0VYX0xJQiBNQVRDSEVTICJeKEFVVE98TElCUENSRVBPU0lYKSQiKQogCiAjCiAjIENoZWNrIGZ1bmN0aW9ucwogIwogQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCSMgU2F2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcwotSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIgT1IKLSAgICBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDbGFuZyIpCitJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIgT1IKKyAgICBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5DbGFuZyQiKQogICAjCiAgICMgRHVyaW5nIGNoZWNraW5nIGZ1bmN0aW9ucywgd2Ugc2hvdWxkIHVzZSAtZm5vLWJ1aWx0aW4gdG8gYXZvaWQgdGhlCiAgICMgZmFpbHVyZSBvZiBmdW5jdGlvbiBkZXRlY3Rpb24gd2hpY2ggZmFpbHVyZSBpcyBhbiBlcnJvciAiY29uZmxpY3RpbmcKICAgIyB0eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb24iIGNhdXNlZCBieSB1c2luZyAtV2Vycm9yIG9wdGlvbi4KICAgIwogICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIiR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IC1mbm8tYnVpbHRpbiIpCi1FTkRJRiAoKQorRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiIE9SCisgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKIENIRUNLX1NZTUJPTF9FWElTVFMoX0NydFNldFJlcG9ydE1vZGUgImNydGRiZy5oIiBIQVZFX19DcnRTZXRSZXBvcnRNb2RlKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKGFyYzRyYW5kb21fYnVmIEhBVkVfQVJDNFJBTkRPTV9CVUYpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoY2hmbGFncyBIQVZFX0NIRkxBR1MpCkBAIC0xMDE3LDYgKzE0MTAsNyBAQAogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHN5bWxpbmsgSEFWRV9TWU1MSU5LKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHRpbWVnbSBIQVZFX1RJTUVHTSkKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh0enNldCBIQVZFX1RaU0VUKQorQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHVubGlua2F0IEhBVkVfVU5MSU5LQVQpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkModW5zZXRlbnYgSEFWRV9VTlNFVEVOVikKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh1dGltZSBIQVZFX1VUSU1FKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHV0aW1lcyBIQVZFX1VUSU1FUykKQEAgLTEwMzAsNiArMTQyNCw3IEBACiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX2N0aW1lNjRfcyBIQVZFX19DVElNRTY0X1MpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX2ZzZWVraTY0IEhBVkVfX0ZTRUVLSTY0KQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9nZXRfdGltZXpvbmUgSEFWRV9fR0VUX1RJTUVaT05FKQorQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9nbXRpbWU2NF9zIEhBVkVfX0dNVElNRTY0X1MpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX2xvY2FsdGltZTY0X3MgSEFWRV9fTE9DQUxUSU1FNjRfUykKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyhfbWtnbXRpbWU2NCBIQVZFX19NS0dNVElNRTY0KQogCkBAIC0xMjk4LDYgKzE2OTMsMTEgQEAKICAgQ0hFQ0tfTElCUkFSWV9FWElTVFMoYXR0ciAic2V0eGF0dHIiICIiIEhBVkVfTElCQVRUUikKICAgSUYoSEFWRV9MSUJBVFRSKQogICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgImF0dHIiKQorICBFTFNFKCkKKyAgICBDSEVDS19MSUJSQVJZX0VYSVNUUyhnbnUgInNldHhhdHRyIiAiIiBIQVZFX0xJQkFUVFJfR05VKQorICAgIElGKEhBVkVfTElCQVRUUl9HTlUpCisgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICJnbnUiKQorICAgIEVORElGKCkKICAgRU5ESUYoSEFWRV9MSUJBVFRSKQogICBDSEVDS19TWU1CT0xfRVhJU1RTKEVYVEFUVFJfTkFNRVNQQUNFX1VTRVIgInN5cy90eXBlcy5oO3N5cy9leHRhdHRyLmgiIEhBVkVfREVDTF9FWFRBVFRSX05BTUVTUEFDRV9VU0VSKQogICBDSEVDS19TWU1CT0xfRVhJU1RTKFhBVFRSX05PRk9MTE9XICJzeXMveGF0dHIuaCIgSEFWRV9ERUNMX1hBVFRSX05PRk9MTE9XKQpAQCAtMTYyMSw2ICsyMDIxLDcgQEAKIENIRUNLX0NSWVBUTygiU0hBMjU2O1NIQTM4NDtTSEE1MTIiIExJQkMyKQogQ0hFQ0tfQ1JZUFRPKCJTSEEyNTY7U0hBMzg0O1NIQTUxMiIgTElCQzMpCiBDSEVDS19DUllQVE8oIk1ENTtTSEExO1NIQTI1NjtTSEEzODQ7U0hBNTEyIiBMSUJTWVNURU0pCitDSEVDS19DUllQVE8oIk1ENTtSTUQxNjA7U0hBMTtTSEEyNTY7U0hBMzg0O1NIQTUxMiIgTUJFRFRMUykKIENIRUNLX0NSWVBUTygiTUQ1O1JNRDE2MDtTSEExO1NIQTI1NjtTSEEzODQ7U0hBNTEyIiBORVRUTEUpCiBDSEVDS19DUllQVE8oIk1ENTtSTUQxNjA7U0hBMTtTSEEyNTY7U0hBMzg0O1NIQTUxMiIgT1BFTlNTTCkKIApAQCAtMTYzNSw2ICsyMDM2LDExIEBACiBJTkNMVURFX0RJUkVDVE9SSUVTKEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCiBBRERfREVGSU5JVElPTlMoLURIQVZFX0NPTkZJR19IKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyBwYWNrYWdlcy4KKyMgSGFuZGxlIGdlbmVyYXRpb24gb2YgdGhlIGxpYmFyY2hpdmUucGMgZmlsZSBmb3IgcGtnLWNvbmZpZworSU5DTFVERShDcmVhdGVQa2dDb25maWdGaWxlKQorRU5ESUYoKQorCiAjCiAjIFJlZ2lzdGVyIGluc3RhbGxhdGlvbiBvZiBQREYgZG9jdW1lbnRzLgogIwpAQCAtMTY2MCwxMSArMjA2NiwyMiBAQAogICBBRERfREVGSU5JVElPTlMoLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpCiBFTkRJRihNU1ZDKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyB0ZXN0cy4KK0lGKEVOQUJMRV9URVNUKQorICBBRERfQ1VTVE9NX1RBUkdFVChydW5fYWxsX3Rlc3RzKQorRU5ESUYoRU5BQkxFX1RFU1QpCitFTkRJRigpCisKICMgV2UgbmVlZCBDb3JlU2VydmljZXMgb24gTWFjIE9TLgogSUYoQVBQTEUpCiAgIExJU1QoQVBQRU5EIEFERElUSU9OQUxfTElCUyAiLWZyYW1ld29yayBDb3JlU2VydmljZXMiKQogRU5ESUYoQVBQTEUpCiAKIGFkZF9zdWJkaXJlY3RvcnkobGliYXJjaGl2ZSkKK0lGKDApICMgQ01ha2UgZG9lcyBub3QgYnVpbGQgbGliYXJjaGl2ZSdzIGNvbW1hbmQtbGluZSB0b29scy4KK2FkZF9zdWJkaXJlY3RvcnkoY2F0KQorYWRkX3N1YmRpcmVjdG9yeSh0YXIpCithZGRfc3ViZGlyZWN0b3J5KGNwaW8pCitFTkRJRigpCiAKIGluc3RhbGwoRklMRVMgQ09QWUlORyBERVNUSU5BVElPTiAke0NNQUtFX0RPQ19ESVJ9L2NtbGliYXJjaGl2ZSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ09QWUlORyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ09QWUlORwppbmRleCA5Mzk1MmI3Li4xNGJiZWZhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NPUFlJTkcKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DT1BZSU5HCkBAIC0yMyw2ICsyMywxMyBAQAogKiBUaGUgZm9sbG93aW5nIHNvdXJjZSBmaWxlcyBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAgICBsaWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jCiAKKyogVGhlIGZvbGxvd2luZyBzb3VyY2UgZmlsZXMgYXJlIHRyaXBsZS1saWNlbnNlZCB3aXRoIHRoZSBhYmlsaXR5IHRvIGNob29zZQorICBmcm9tIENDMCAxLjAgVW5pdmVyc2FsLCBPcGVuU1NMIG9yIEFwYWNoZSAyLjAgbGljZW5zZXM6CisgICBsaWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyLmgKKyAgIGxpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJfaW1wbC5oCisgICBsaWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc19yZWYuYworICAgbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNwX3JlZi5jCisKICogVGhlIGJ1aWxkIGZpbGVzLS0taW5jbHVkaW5nIE1ha2VmaWxlcywgY29uZmlndXJlIHNjcmlwdHMsCiAgIGFuZCBhdXhpbGlhcnkgc2NyaXB0cyB1c2VkIGFzIHBhcnQgb2YgdGhlIGNvbXBpbGUgcHJvY2Vzcy0tLWhhdmUKICAgd2lkZWx5IHZhcnlpbmcgbGljZW5zaW5nIHRlcm1zLiAgUGxlYXNlIGNoZWNrIGluZGl2aWR1YWwgZmlsZXMgYmVmb3JlCkBAIC0zNCw3ICs0MSw3IEBACiBzZWVtcyB0byBiZSBhbiB1bmF2b2lkYWJsZSBtZXNzLgogCiAKLUNvcHlyaWdodCAoYykgMjAwMy0yMDA5IDxhdXRob3Iocyk+CitDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOCA8YXV0aG9yKHMpPgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL0ZpbmRNYmVkVExTLmNtYWtlIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9GaW5kTWJlZFRMUy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTE2Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9GaW5kTWJlZFRMUy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitmaW5kX3BhdGgoTUJFRFRMU19JTkNMVURFX0RJUlMgbWJlZHRscy9zc2wuaCkKKworZmluZF9saWJyYXJ5KE1CRURUTFNfTElCUkFSWSBtYmVkdGxzKQorZmluZF9saWJyYXJ5KE1CRURYNTA5X0xJQlJBUlkgbWJlZHg1MDkpCitmaW5kX2xpYnJhcnkoTUJFRENSWVBUT19MSUJSQVJZIG1iZWRjcnlwdG8pCisKK3NldChNQkVEVExTX0xJQlJBUklFUyAiJHtNQkVEVExTX0xJQlJBUll9IiAiJHtNQkVEWDUwOV9MSUJSQVJZfSIgIiR7TUJFRENSWVBUT19MSUJSQVJZfSIpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTUJFRFRMUyBERUZBVUxUX01TRworICAgIE1CRURUTFNfSU5DTFVERV9ESVJTIE1CRURUTFNfTElCUkFSWSBNQkVEWDUwOV9MSUJSQVJZIE1CRURDUllQVE9fTElCUkFSWSkKKworbWFya19hc19hZHZhbmNlZChNQkVEVExTX0lOQ0xVREVfRElSUyBNQkVEVExTX0xJQlJBUlkgTUJFRFg1MDlfTElCUkFSWSBNQkVEQ1JZUFRPX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL2NvbmZpZy5oLmluIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9jb25maWcuaC5pbgppbmRleCAxODUxZDgxLi5iY2RhNGMzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL2NvbmZpZy5oLmluCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvY21ha2UvY29uZmlnLmguaW4KQEAgLTY4Myw2ICs2ODMsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYnoyJyBsaWJyYXJ5ICgtbGJ6MikuICovCiAjY21ha2VkZWZpbmUgSEFWRV9MSUJCWjIgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGIyJyBsaWJyYXJ5ICgtbGIyKS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xJQkIyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxibGFrZTIuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9CTEFLRTJfSCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hhcnNldCcgbGlicmFyeSAoLWxjaGFyc2V0KS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQkNIQVJTRVQgMQogCkBAIC03MDcsNiArNzEzLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHpvMicgbGlicmFyeSAoLWxsem8yKS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQkxaTzIgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1iZWRjcnlwdG8nIGxpYnJhcnkgKC1sbWJlZGNyeXB0bykuICovCisjY21ha2VkZWZpbmUgSEFWRV9MSUJNQkVEQ1JZUFRPIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBuZXR0bGUnIGxpYnJhcnkgKC1sbmV0dGxlKS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQk5FVFRMRSAxCiAKQEAgLTExMTEsNiArMTEyMCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1VOSVNURF9IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmxpbmthdCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9VTkxJTktBVCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5zZXRlbnYnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQogCkBAIC0xMjA0LDYgKzEyMTYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZ2V0X3RpbWV6b25lJyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX19HRVRfVElNRVpPTkUgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nbXRpbWU2NF9zJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX19HTVRJTUU2NF9TIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfbG9jYWx0aW1lNjRfcycgZnVuY3Rpb24uICovCiAjY21ha2VkZWZpbmUgSEFWRV9fTE9DQUxUSU1FNjRfUyAxCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvdmVyc2lvbiBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvdmVyc2lvbgppbmRleCAyNDI3ZWFiLi43OGJlM2FiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL3ZlcnNpb24KKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC92ZXJzaW9uCkBAIC0xICsxIEBACi0zMDAzMDAzCiszMDA0MDAyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTM4ZDY2NC4uODkxYTE0MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtNTEsNiArNTEsOCBAQAogICBhcmNoaXZlX3BsYXRmb3JtX2FjbC5oCiAgIGFyY2hpdmVfcGxhdGZvcm1feGF0dHIuaAogICBhcmNoaXZlX3BwbWRfcHJpdmF0ZS5oCisgIGFyY2hpdmVfcHBtZDguYworICBhcmNoaXZlX3BwbWQ4X3ByaXZhdGUuaAogICBhcmNoaXZlX3BwbWQ3LmMKICAgYXJjaGl2ZV9wcG1kN19wcml2YXRlLmgKICAgYXJjaGl2ZV9wcml2YXRlLmgKQEAgLTEwMCw2ICsxMDIsNyBAQAogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhLmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X210cmVlLmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jCisgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhdy5jCiAgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIuYwogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYy5jCkBAIC0xNDcsNiArMTUwLDcgQEAKICAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2lzbzk2NjAuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfbXRyZWUuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcGF4LmMKKyAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaAogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcmF3LmMKICAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdXN0YXIuYwpAQCAtMTY3LDYgKzE3MSw3IEBACiAgIGFyY2hpdmVfZW50cnkuMwogICBhcmNoaXZlX2VudHJ5X2FjbC4zCiAgIGFyY2hpdmVfZW50cnlfbGlua2lmeS4zCisgIGFyY2hpdmVfZW50cnlfbWlzYy4zCiAgIGFyY2hpdmVfZW50cnlfcGF0aHMuMwogICBhcmNoaXZlX2VudHJ5X3Blcm1zLjMKICAgYXJjaGl2ZV9lbnRyeV9zdGF0LjMKQEAgLTIxNSw2ICsyMjAsMTEgQEAKICAgTElTVChBUFBFTkQgbGliYXJjaGl2ZV9TT1VSQ0VTIGZpbHRlcl9mb3JrX3dpbmRvd3MuYykKIEVORElGKFdJTjMyIEFORCBOT1QgQ1lHV0lOKQogCitJRihBUkNISVZFX0JMQUtFMikKKyAgTElTVChBUFBFTkQgbGliYXJjaGl2ZV9TT1VSQ0VTIGFyY2hpdmVfYmxha2Uyc3BfcmVmLmMpCisgIExJU1QoQVBQRU5EIGxpYmFyY2hpdmVfU09VUkNFUyBhcmNoaXZlX2JsYWtlMnNfcmVmLmMpCitFTkRJRihBUkNISVZFX0JMQUtFMikKKwogSUYoQVJDSElWRV9BQ0xfREFSV0lOKQogICBMSVNUKEFQUEVORCBsaWJhcmNoaXZlX1NPVVJDRVMgYXJjaGl2ZV9kaXNrX2FjbF9kYXJ3aW4uYykKIEVMU0VJRihBUkNISVZFX0FDTF9GUkVFQlNEKQpAQCAtMjI4LDMgKzIzOCwzMyBAQAogIyBDTWFrZSBuZWVkcyBqdXN0IG9uZSBzdGF0aWMgImNtbGliYXJjaGl2ZSIgbGlicmFyeS4KIEFERF9MSUJSQVJZKGNtbGliYXJjaGl2ZSBTVEFUSUMgJHtsaWJhcmNoaXZlX1NPVVJDRVN9ICR7aW5jbHVkZV9IRUFERVJTfSkKIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhjbWxpYmFyY2hpdmUgJHtBRERJVElPTkFMX0xJQlN9KQorCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyBmdWxsIHBhY2thZ2UuCisjIExpYmFyY2hpdmUgaXMgYSBzaGFyZWQgbGlicmFyeQorQUREX0xJQlJBUlkoYXJjaGl2ZSBTSEFSRUQgJHtsaWJhcmNoaXZlX1NPVVJDRVN9ICR7aW5jbHVkZV9IRUFERVJTfSkKK1RBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTKGFyY2hpdmUgUFVCTElDIC4pCitUQVJHRVRfTElOS19MSUJSQVJJRVMoYXJjaGl2ZSAke0FERElUSU9OQUxfTElCU30pCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYXJjaGl2ZSBQUk9QRVJUSUVTIFNPVkVSU0lPTiAke1NPVkVSU0lPTn0pCisKKyMgYXJjaGl2ZV9zdGF0aWMgaXMgYSBzdGF0aWMgbGlicmFyeQorQUREX0xJQlJBUlkoYXJjaGl2ZV9zdGF0aWMgU1RBVElDICR7bGliYXJjaGl2ZV9TT1VSQ0VTfSAke2luY2x1ZGVfSEVBREVSU30pCitUQVJHRVRfTElOS19MSUJSQVJJRVMoYXJjaGl2ZV9zdGF0aWMgJHtBRERJVElPTkFMX0xJQlN9KQorU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGFyY2hpdmVfc3RhdGljIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUworICBMSUJBUkNISVZFX1NUQVRJQykKKyMgT24gUG9zaXggc3lzdGVtcywgbGliYXJjaGl2ZS5zbyBhbmQgbGliYXJjaGl2ZS5hIGNhbiBjby1leGlzdC4KK0lGKE5PVCBXSU4zMiBPUiBDWUdXSU4pCisgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhhcmNoaXZlX3N0YXRpYyBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIGFyY2hpdmUpCitFTkRJRihOT1QgV0lOMzIgT1IgQ1lHV0lOKQorCitJRihFTkFCTEVfSU5TVEFMTCkKKyAgIyBIb3cgdG8gaW5zdGFsbCB0aGUgbGlicmFyaWVzCisgIElOU1RBTEwoVEFSR0VUUyBhcmNoaXZlIGFyY2hpdmVfc3RhdGljCisgICAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KKyAgICAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYgorICAgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliKQorICBJTlNUQUxMX01BTigke2xpYmFyY2hpdmVfTUFOU30pCisgIElOU1RBTEwoRklMRVMgJHtpbmNsdWRlX0hFQURFUlN9IERFU1RJTkFUSU9OIGluY2x1ZGUpCitFTkRJRigpCisKK2FkZF9zdWJkaXJlY3RvcnkodGVzdCkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCmluZGV4IGYzZWJiZmUuLjU3NGUwODcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmUuaApAQCAtMzYsNyArMzYsNyBAQAogICogYXNzZXJ0IHRoYXQgQVJDSElWRV9WRVJTSU9OX05VTUJFUiA+PSAyMDEyMTA4LgogICovCiAvKiBOb3RlOiBDb21waWxlciB3aWxsIGNvbXBsYWluIGlmIHRoaXMgZG9lcyBub3QgbWF0Y2ggYXJjaGl2ZV9lbnRyeS5oISAqLwotI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fTlVNQkVSIDMwMDMwMDMKKyNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX05VTUJFUiAzMDA0MDAyCiAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogZm9yIHdjaGFyX3QgKi8KQEAgLTUyLDcgKzUyLDcgQEAKICAqLwogI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBfX0JPUkxBTkRDX18gPj0gMHg1NjAKICMgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZWxpZiAhZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fSU5URVJJWCkgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfU0NPX0RTKSAmJiAhZGVmaW5lZChfX29zZl9fKQorI2VsaWYgIWRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX0lOVEVSSVgpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoX1NDT19EUykgJiYgIWRlZmluZWQoX19vc2ZfXykgJiYgIWRlZmluZWQoX19DTEFOR19JTlRUWVBFU19IKQogIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2VuZGlmCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogLyoKICAqIFRleHR1YWwgbmFtZS92ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB1c2VmdWwgZm9yIHZlcnNpb24gZGlzcGxheXMuCiAgKi8KLSNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX09OTFlfU1RSSU5HICIzLjMuMyIKKyNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX09OTFlfU1RSSU5HICIzLjQuMiIKICNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX1NUUklORyAibGliYXJjaGl2ZSAiIEFSQ0hJVkVfVkVSU0lPTl9PTkxZX1NUUklORwogX19MQV9ERUNMIGNvbnN0IGNoYXIgKglhcmNoaXZlX3ZlcnNpb25fc3RyaW5nKHZvaWQpOwogCkBAIC0zMzcsNiArMzM3LDcgQEAKICNkZWZpbmUJQVJDSElWRV9GT1JNQVRfUkFSCQkJMHhEMDAwMAogI2RlZmluZQlBUkNISVZFX0ZPUk1BVF83WklQCQkJMHhFMDAwMAogI2RlZmluZQlBUkNISVZFX0ZPUk1BVF9XQVJDCQkJMHhGMDAwMAorI2RlZmluZQlBUkNISVZFX0ZPUk1BVF9SQVJfVjUJCQkweDEwMDAwMAogCiAvKgogICogQ29kZXMgcmV0dXJuZWQgYnkgYXJjaGl2ZV9yZWFkX2Zvcm1hdF9jYXBhYmlsaXRpZXMoKS4KQEAgLTQ0Niw2ICs0NDcsNyBAQAogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhKHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUoc3RydWN0IGFyY2hpdmUgKik7CiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIoc3RydWN0IGFyY2hpdmUgKik7CitfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1KHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3KHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyKHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYyhzdHJ1Y3QgYXJjaGl2ZSAqKTsKQEAgLTY4OCw2ICs2OTAsOCBAQAogI2RlZmluZSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyAoMHgxMDAwMCkKIC8qIERlZmF1bHQ6IERvIG5vdCBjbGVhciBuby1jaGFuZ2UgZmxhZ3Mgd2hlbiB1bmxpbmtpbmcgb2JqZWN0ICovCiAjZGVmaW5lCUFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MJKDB4MjAwMDApCisvKiBEZWZhdWx0OiBEbyBub3QgZXh0cmFjdCBhdG9taWNhbGx5ICh1c2luZyByZW5hbWUpICovCisjZGVmaW5lCUFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUwkJKDB4NDAwMDApCiAKIF9fTEFfREVDTCBpbnQgYXJjaGl2ZV9yZWFkX2V4dHJhY3Qoc3RydWN0IGFyY2hpdmUgKiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKiwKIAkJICAgICBpbnQgZmxhZ3MpOwpAQCAtMTA5MCw2ICsxMDk0LDggQEAKICAqLwogX19MQV9ERUNMIGludAlhcmNoaXZlX21hdGNoX3BhdGhfZXhjbHVkZWQoc3RydWN0IGFyY2hpdmUgKiwKIAkJICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOworLyogQ29udHJvbCByZWN1cnNpdmUgaW5jbHVzaW9uIG9mIGRpcmVjdG9yeSBjb250ZW50IHdoZW4gZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBEZWZhdWx0IG9uLiAqLworX19MQV9ERUNMIGludAlhcmNoaXZlX21hdGNoX3NldF9pbmNsdXNpb25fcmVjdXJzaW9uKHN0cnVjdCBhcmNoaXZlICosIGludCk7CiAvKiBBZGQgZXhjbHVzaW9uIHBhdGhuYW1lIHBhdHRlcm4uICovCiBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZV9wYXR0ZXJuKHN0cnVjdCBhcmNoaXZlICosIGNvbnN0IGNoYXIgKik7CiBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZV9wYXR0ZXJuX3coc3RydWN0IGFyY2hpdmUgKiwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2FjbC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMKaW5kZXggNDczNjUzMS4uOTUyZTIwZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMKQEAgLTEzOCwxNCArMTM4LDEwIEBACiAJCWZyZWUoYWNsLT5hY2xfaGVhZCk7CiAJCWFjbC0+YWNsX2hlYWQgPSBhcDsKIAl9Ci0JaWYgKGFjbC0+YWNsX3RleHRfdyAhPSBOVUxMKSB7Ci0JCWZyZWUoYWNsLT5hY2xfdGV4dF93KTsKLQkJYWNsLT5hY2xfdGV4dF93ID0gTlVMTDsKLQl9Ci0JaWYgKGFjbC0+YWNsX3RleHQgIT0gTlVMTCkgewotCQlmcmVlKGFjbC0+YWNsX3RleHQpOwotCQlhY2wtPmFjbF90ZXh0ID0gTlVMTDsKLQl9CisJZnJlZShhY2wtPmFjbF90ZXh0X3cpOworCWFjbC0+YWNsX3RleHRfdyA9IE5VTEw7CisJZnJlZShhY2wtPmFjbF90ZXh0KTsKKwlhY2wtPmFjbF90ZXh0ID0gTlVMTDsKIAlhY2wtPmFjbF9wID0gTlVMTDsKIAlhY2wtPmFjbF90eXBlcyA9IDA7CiAJYWNsLT5hY2xfc3RhdGUgPSAwOyAvKiBOb3QgY291bnRpbmcuICovCkBAIC0zMjQsMTQgKzMyMCwxMCBAQAogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAotCWlmIChhY2wtPmFjbF90ZXh0X3cgIT0gTlVMTCkgewotCQlmcmVlKGFjbC0+YWNsX3RleHRfdyk7Ci0JCWFjbC0+YWNsX3RleHRfdyA9IE5VTEw7Ci0JfQotCWlmIChhY2wtPmFjbF90ZXh0ICE9IE5VTEwpIHsKLQkJZnJlZShhY2wtPmFjbF90ZXh0KTsKLQkJYWNsLT5hY2xfdGV4dCA9IE5VTEw7Ci0JfQorCWZyZWUoYWNsLT5hY2xfdGV4dF93KTsKKwlhY2wtPmFjbF90ZXh0X3cgPSBOVUxMOworCWZyZWUoYWNsLT5hY2xfdGV4dCk7CisJYWNsLT5hY2xfdGV4dCA9IE5VTEw7CiAKIAkvKgogCSAqIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBhbHJlYWR5IGluIHRoZSBsaXN0LCBvdmVyd3JpdGUgaXQuCkBAIC03NTMsOCArNzQ1LDEwIEBACiAJCQlhcHBlbmRfZW50cnlfdygmd3AsIHByZWZpeCwgYXAtPnR5cGUsIGFwLT50YWcsIGZsYWdzLAogCQkJICAgIHduYW1lLCBhcC0+cGVybXNldCwgaWQpOwogCQkJY291bnQrKzsKLQkJfSBlbHNlIGlmIChyIDwgMCAmJiBlcnJubyA9PSBFTk9NRU0pCisJCX0gZWxzZSBpZiAociA8IDAgJiYgZXJybm8gPT0gRU5PTUVNKSB7CisJCQlmcmVlKHdzKTsKIAkJCXJldHVybiAoTlVMTCk7CisJCX0KIAl9CiAKIAkvKiBBZGQgdGVybWluYXRpbmcgY2hhcmFjdGVyICovCkBAIC05NzUsOCArOTY5LDEwIEBACiAJCQlwcmVmaXggPSBOVUxMOwogCQlyID0gYXJjaGl2ZV9tc3RyaW5nX2dldF9tYnNfbCgKIAkJICAgICZhcC0+bmFtZSwgJm5hbWUsICZsZW4sIHNjKTsKLQkJaWYgKHIgIT0gMCkKKwkJaWYgKHIgIT0gMCkgeworCQkJZnJlZShzKTsKIAkJCXJldHVybiAoTlVMTCk7CisJCX0KIAkJaWYgKGNvdW50ID4gMCkKIAkJCSpwKysgPSBzZXBhcmF0b3I7CiAJCWlmIChuYW1lID09IE5VTEwgfHwKQEAgLTE1ODEsMTcgKzE1NzcsMjkgQEAKIAogCS8qIFNjYW4gZm9yIHRoZSBzZXBhcmF0b3IuICovCiAJd2hpbGUgKCoqd3AgIT0gTCdcMCcgJiYgKip3cCAhPSBMJywnICYmICoqd3AgIT0gTCc6JyAmJgotCSAgICAqKndwICE9IEwnXG4nKSB7CisJICAgICoqd3AgIT0gTCdcbicgJiYgKip3cCAhPSBMJyMnKSB7CiAJCSgqd3ApKys7CiAJfQogCSpzZXAgPSAqKndwOwogCi0JLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGxvY2F0ZSBlbmQgb2YgZmllbGQuICovCi0JKmVuZCA9ICp3cCAtIDE7Ci0Jd2hpbGUgKCoqZW5kID09IEwnICcgfHwgKiplbmQgPT0gTCdcdCcgfHwgKiplbmQgPT0gTCdcbicpIHsKLQkJKCplbmQpLS07CisJLyogTG9jYXRlIGVuZCBvZiBmaWVsZCwgdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIGlmIG5lY2Vzc2FyeSAqLworCWlmICgqd3AgPT0gKnN0YXJ0KSB7CisJCSplbmQgPSAqd3A7CisJfSBlbHNlIHsKKwkJKmVuZCA9ICp3cCAtIDE7CisJCXdoaWxlICgqKmVuZCA9PSBMJyAnIHx8ICoqZW5kID09IEwnXHQnIHx8ICoqZW5kID09IEwnXG4nKSB7CisJCQkoKmVuZCktLTsKKwkJfQorCQkoKmVuZCkrKzsKIAl9Ci0JKCplbmQpKys7CisKKwkvKiBIYW5kbGUgaW4tZmllbGQgY29tbWVudHMgKi8KKwlpZiAoKnNlcCA9PSBMJyMnKSB7CisJCXdoaWxlICgqKndwICE9IEwnXDAnICYmICoqd3AgIT0gTCcsJyAmJiAqKndwICE9IEwnXG4nKSB7CisJCQkoKndwKSsrOworCQl9CisJCSpzZXAgPSAqKndwOworCX0KIAogCS8qIEFkanVzdCBzY2FubmVyIGxvY2F0aW9uLiAqLwogCWlmICgqKndwICE9IEwnXDAnKQpAQCAtMTY0Miw3ICsxNjUwLDcgQEAKIAlyZXQgPSBBUkNISVZFX09LOwogCXR5cGVzID0gMDsKIAotCXdoaWxlICh0ZXh0ICE9IE5VTEwgICYmICAqdGV4dCAhPSAnXDAnKSB7CisJd2hpbGUgKHRleHQgIT0gTlVMTCAmJiAgKnRleHQgIT0gJ1wwJykgewogCQkvKgogCQkgKiBQYXJzZSB0aGUgZmllbGRzIG91dCBvZiB0aGUgbmV4dCBlbnRyeSwKIAkJICogYWR2YW5jZSAndGV4dCcgdG8gc3RhcnQgb2YgbmV4dCBlbnRyeS4KQEAgLTE3MDcsNiArMTcxNSwxMSBAQAogCQkJc3QgPSBmaWVsZFtuXS5zdGFydCArIDE7CiAJCQlsZW4gPSBmaWVsZFtuXS5lbmQgLSBmaWVsZFtuXS5zdGFydDsKIAorCQkJaWYgKGxlbiA9PSAwKSB7CisJCQkJcmV0ID0gQVJDSElWRV9XQVJOOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQlzd2l0Y2ggKCpzKSB7CiAJCQljYXNlICd1JzoKIAkJCQlpZiAobGVuID09IDEgfHwgKGxlbiA9PSA0CkBAIC0yMDUzLDE3ICsyMDY2LDMwIEBACiAJKnN0YXJ0ID0gKnA7CiAKIAkvKiBTY2FuIGZvciB0aGUgc2VwYXJhdG9yLiAqLwotCXdoaWxlICgqKnAgIT0gJ1wwJyAmJiAqKnAgIT0gJywnICYmICoqcCAhPSAnOicgJiYgKipwICE9ICdcbicpIHsKKwl3aGlsZSAoKipwICE9ICdcMCcgJiYgKipwICE9ICcsJyAmJiAqKnAgIT0gJzonICYmICoqcCAhPSAnXG4nICYmCisJICAgICoqcCAhPSAnIycpIHsKIAkJKCpwKSsrOwogCX0KIAkqc2VwID0gKipwOwogCi0JLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGxvY2F0ZSBlbmQgb2YgZmllbGQuICovCi0JKmVuZCA9ICpwIC0gMTsKLQl3aGlsZSAoKiplbmQgPT0gJyAnIHx8ICoqZW5kID09ICdcdCcgfHwgKiplbmQgPT0gJ1xuJykgewotCQkoKmVuZCktLTsKKwkvKiBMb2NhdGUgZW5kIG9mIGZpZWxkLCB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCpwID09ICpzdGFydCkgeworCQkqZW5kID0gKnA7CisJfSBlbHNlIHsKKwkJKmVuZCA9ICpwIC0gMTsKKwkJd2hpbGUgKCoqZW5kID09ICcgJyB8fCAqKmVuZCA9PSAnXHQnIHx8ICoqZW5kID09ICdcbicpIHsKKwkJCSgqZW5kKS0tOworCQl9CisJCSgqZW5kKSsrOwogCX0KLQkoKmVuZCkrKzsKKworCS8qIEhhbmRsZSBpbi1maWVsZCBjb21tZW50cyAqLworCWlmICgqc2VwID09ICcjJykgeworCQl3aGlsZSAoKipwICE9ICdcMCcgJiYgKipwICE9ICcsJyAmJiAqKnAgIT0gJ1xuJykgeworCQkJKCpwKSsrOworCQl9CisJCSpzZXAgPSAqKnA7CisJfQogCiAJLyogQWRqdXN0IHNjYW5uZXIgbG9jYXRpb24uICovCiAJaWYgKCoqcCAhPSAnXDAnKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2FjbF9wcml2YXRlLmgKaW5kZXggZWYwYjAyMy4uYWYxMDgxNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2xfcHJpdmF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9BQ0xfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfQUNMX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX0FDTF9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9BQ0xfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX3N0cmluZy5oIgogCiBzdHJ1Y3QgYXJjaGl2ZV9hY2xfZW50cnkgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZmZTZmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyLmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgQ29weXJpZ2h0IDIwMTIsIFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uICBZb3UgbWF5IHVzZSB0aGlzIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhlIENDMCwgdGhlIE9wZW5TU0wgTGljZW5jZSwgb3IgdGhlIEFwYWNoZSBQdWJsaWMgTGljZW5zZSAyLjAsIGF0CisgICB5b3VyIG9wdGlvbi4gIFRoZSB0ZXJtcyBvZiB0aGVzZSBsaWNlbnNlcyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgIC0gQ0MwIDEuMCBVbml2ZXJzYWwgOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAKKyAgIC0gT3BlblNTTCBsaWNlbnNlICAgOiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCisgICAtIEFwYWNoZSAyLjAgICAgICAgIDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJMQUtFMiBoYXNoIGZ1bmN0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgaHR0cHM6Ly9ibGFrZTIubmV0LgorKi8KKworI2lmbmRlZiBBUkNISVZFX0JMQUtFMl9ICisjZGVmaW5lIEFSQ0hJVkVfQkxBS0UyX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQkxBS0UyX1BBQ0tFRCh4KSBfX3ByYWdtYShwYWNrKHB1c2gsIDEpKSB4IF9fcHJhZ21hKHBhY2socG9wKSkKKyNlbHNlCisjZGVmaW5lIEJMQUtFMl9QQUNLRUQoeCkgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICBlbnVtIGJsYWtlMnNfY29uc3RhbnQKKyAgeworICAgIEJMQUtFMlNfQkxPQ0tCWVRFUyA9IDY0LAorICAgIEJMQUtFMlNfT1VUQllURVMgICA9IDMyLAorICAgIEJMQUtFMlNfS0VZQllURVMgICA9IDMyLAorICAgIEJMQUtFMlNfU0FMVEJZVEVTICA9IDgsCisgICAgQkxBS0UyU19QRVJTT05BTEJZVEVTID0gOAorICB9OworCisgIGVudW0gYmxha2UyYl9jb25zdGFudAorICB7CisgICAgQkxBS0UyQl9CTE9DS0JZVEVTID0gMTI4LAorICAgIEJMQUtFMkJfT1VUQllURVMgICA9IDY0LAorICAgIEJMQUtFMkJfS0VZQllURVMgICA9IDY0LAorICAgIEJMQUtFMkJfU0FMVEJZVEVTICA9IDE2LAorICAgIEJMQUtFMkJfUEVSU09OQUxCWVRFUyA9IDE2CisgIH07CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2Uyc19zdGF0ZV9fCisgIHsKKyAgICB1aW50MzJfdCBoWzhdOworICAgIHVpbnQzMl90IHRbMl07CisgICAgdWludDMyX3QgZlsyXTsKKyAgICB1aW50OF90ICBidWZbQkxBS0UyU19CTE9DS0JZVEVTXTsKKyAgICBzaXplX3QgICBidWZsZW47CisgICAgc2l6ZV90ICAgb3V0bGVuOworICAgIHVpbnQ4X3QgIGxhc3Rfbm9kZTsKKyAgfSBibGFrZTJzX3N0YXRlOworCisgIHR5cGVkZWYgc3RydWN0IGJsYWtlMmJfc3RhdGVfXworICB7CisgICAgdWludDY0X3QgaFs4XTsKKyAgICB1aW50NjRfdCB0WzJdOworICAgIHVpbnQ2NF90IGZbMl07CisgICAgdWludDhfdCAgYnVmW0JMQUtFMkJfQkxPQ0tCWVRFU107CisgICAgc2l6ZV90ICAgYnVmbGVuOworICAgIHNpemVfdCAgIG91dGxlbjsKKyAgICB1aW50OF90ICBsYXN0X25vZGU7CisgIH0gYmxha2UyYl9zdGF0ZTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJzcF9zdGF0ZV9fCisgIHsKKyAgICBibGFrZTJzX3N0YXRlIFNbOF1bMV07CisgICAgYmxha2Uyc19zdGF0ZSBSWzFdOworICAgIHVpbnQ4X3QgICAgICAgYnVmWzggKiBCTEFLRTJTX0JMT0NLQllURVNdOworICAgIHNpemVfdCAgICAgICAgYnVmbGVuOworICAgIHNpemVfdCAgICAgICAgb3V0bGVuOworICB9IGJsYWtlMnNwX3N0YXRlOworCisgIHR5cGVkZWYgc3RydWN0IGJsYWtlMmJwX3N0YXRlX18KKyAgeworICAgIGJsYWtlMmJfc3RhdGUgU1s0XVsxXTsKKyAgICBibGFrZTJiX3N0YXRlIFJbMV07CisgICAgdWludDhfdCAgICAgICBidWZbNCAqIEJMQUtFMkJfQkxPQ0tCWVRFU107CisgICAgc2l6ZV90ICAgICAgICBidWZsZW47CisgICAgc2l6ZV90ICAgICAgICBvdXRsZW47CisgIH0gYmxha2UyYnBfc3RhdGU7CisKKyAgQkxBS0UyX1BBQ0tFRChzdHJ1Y3QgYmxha2Uyc19wYXJhbV9fCisgIHsKKyAgICB1aW50OF90ICBkaWdlc3RfbGVuZ3RoOyAvKiAxICovCisgICAgdWludDhfdCAga2V5X2xlbmd0aDsgICAgLyogMiAqLworICAgIHVpbnQ4X3QgIGZhbm91dDsgICAgICAgIC8qIDMgKi8KKyAgICB1aW50OF90ICBkZXB0aDsgICAgICAgICAvKiA0ICovCisgICAgdWludDMyX3QgbGVhZl9sZW5ndGg7ICAgLyogOCAqLworICAgIHVpbnQzMl90IG5vZGVfb2Zmc2V0OyAgLyogMTIgKi8KKyAgICB1aW50MTZfdCB4b2ZfbGVuZ3RoOyAgICAvKiAxNCAqLworICAgIHVpbnQ4X3QgIG5vZGVfZGVwdGg7ICAgIC8qIDE1ICovCisgICAgdWludDhfdCAgaW5uZXJfbGVuZ3RoOyAgLyogMTYgKi8KKyAgICAvKiB1aW50OF90ICByZXNlcnZlZFswXTsgKi8KKyAgICB1aW50OF90ICBzYWx0W0JMQUtFMlNfU0FMVEJZVEVTXTsgLyogMjQgKi8KKyAgICB1aW50OF90ICBwZXJzb25hbFtCTEFLRTJTX1BFUlNPTkFMQllURVNdOyAgLyogMzIgKi8KKyAgfSk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2Uyc19wYXJhbV9fIGJsYWtlMnNfcGFyYW07CisKKyAgQkxBS0UyX1BBQ0tFRChzdHJ1Y3QgYmxha2UyYl9wYXJhbV9fCisgIHsKKyAgICB1aW50OF90ICBkaWdlc3RfbGVuZ3RoOyAvKiAxICovCisgICAgdWludDhfdCAga2V5X2xlbmd0aDsgICAgLyogMiAqLworICAgIHVpbnQ4X3QgIGZhbm91dDsgICAgICAgIC8qIDMgKi8KKyAgICB1aW50OF90ICBkZXB0aDsgICAgICAgICAvKiA0ICovCisgICAgdWludDMyX3QgbGVhZl9sZW5ndGg7ICAgLyogOCAqLworICAgIHVpbnQzMl90IG5vZGVfb2Zmc2V0OyAgIC8qIDEyICovCisgICAgdWludDMyX3QgeG9mX2xlbmd0aDsgICAgLyogMTYgKi8KKyAgICB1aW50OF90ICBub2RlX2RlcHRoOyAgICAvKiAxNyAqLworICAgIHVpbnQ4X3QgIGlubmVyX2xlbmd0aDsgIC8qIDE4ICovCisgICAgdWludDhfdCAgcmVzZXJ2ZWRbMTRdOyAgLyogMzIgKi8KKyAgICB1aW50OF90ICBzYWx0W0JMQUtFMkJfU0FMVEJZVEVTXTsgLyogNDggKi8KKyAgICB1aW50OF90ICBwZXJzb25hbFtCTEFLRTJCX1BFUlNPTkFMQllURVNdOyAgLyogNjQgKi8KKyAgfSk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2UyYl9wYXJhbV9fIGJsYWtlMmJfcGFyYW07CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2UyeHNfc3RhdGVfXworICB7CisgICAgYmxha2Uyc19zdGF0ZSBTWzFdOworICAgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKyAgfSBibGFrZTJ4c19zdGF0ZTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJ4Yl9zdGF0ZV9fCisgIHsKKyAgICBibGFrZTJiX3N0YXRlIFNbMV07CisgICAgYmxha2UyYl9wYXJhbSBQWzFdOworICB9IGJsYWtlMnhiX3N0YXRlOworCisgIC8qIFBhZGRlZCBzdHJ1Y3RzIHJlc3VsdCBpbiBhIGNvbXBpbGUtdGltZSBlcnJvciAqLworICBlbnVtIHsKKyAgICBCTEFLRTJfRFVNTVlfMSA9IDEvKHNpemVvZihibGFrZTJzX3BhcmFtKSA9PSBCTEFLRTJTX09VVEJZVEVTKSwKKyAgICBCTEFLRTJfRFVNTVlfMiA9IDEvKHNpemVvZihibGFrZTJiX3BhcmFtKSA9PSBCTEFLRTJCX09VVEJZVEVTKQorICB9OworCisgIC8qIFN0cmVhbWluZyBBUEkgKi8KKyAgaW50IGJsYWtlMnNfaW5pdCggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApOworICBpbnQgYmxha2Uyc19pbml0X2tleSggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJzX2luaXRfcGFyYW0oIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IGJsYWtlMnNfcGFyYW0gKlAgKTsKKyAgaW50IGJsYWtlMnNfdXBkYXRlKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJzX2ZpbmFsKCBibGFrZTJzX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKTsKKworICBpbnQgYmxha2UyYl9pbml0KCBibGFrZTJiX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICk7CisgIGludCBibGFrZTJiX2luaXRfa2V5KCBibGFrZTJiX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMmJfaW5pdF9wYXJhbSggYmxha2UyYl9zdGF0ZSAqUywgY29uc3QgYmxha2UyYl9wYXJhbSAqUCApOworICBpbnQgYmxha2UyYl91cGRhdGUoIGJsYWtlMmJfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMmJfZmluYWwoIGJsYWtlMmJfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApOworCisgIGludCBibGFrZTJzcF9pbml0KCBibGFrZTJzcF9zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApOworICBpbnQgYmxha2Uyc3BfaW5pdF9rZXkoIGJsYWtlMnNwX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnNwX3VwZGF0ZSggYmxha2Uyc3Bfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMnNwX2ZpbmFsKCBibGFrZTJzcF9zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuICk7CisKKyAgaW50IGJsYWtlMmJwX2luaXQoIGJsYWtlMmJwX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICk7CisgIGludCBibGFrZTJicF9pbml0X2tleSggYmxha2UyYnBfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworICBpbnQgYmxha2UyYnBfdXBkYXRlKCBibGFrZTJicF9zdGF0ZSAqUywgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiApOworICBpbnQgYmxha2UyYnBfZmluYWwoIGJsYWtlMmJwX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKTsKKworICAvKiBWYXJpYWJsZSBvdXRwdXQgbGVuZ3RoIEFQSSAqLworICBpbnQgYmxha2UyeHNfaW5pdCggYmxha2UyeHNfc3RhdGUgKlMsIGNvbnN0IHNpemVfdCBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMnhzX2luaXRfa2V5KCBibGFrZTJ4c19zdGF0ZSAqUywgY29uc3Qgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJ4c191cGRhdGUoIGJsYWtlMnhzX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJ4c19maW5hbChibGFrZTJ4c19zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworICBpbnQgYmxha2UyeGJfaW5pdCggYmxha2UyeGJfc3RhdGUgKlMsIGNvbnN0IHNpemVfdCBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMnhiX2luaXRfa2V5KCBibGFrZTJ4Yl9zdGF0ZSAqUywgY29uc3Qgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJ4Yl91cGRhdGUoIGJsYWtlMnhiX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJ4Yl9maW5hbChibGFrZTJ4Yl9zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworICAvKiBTaW1wbGUgQVBJICovCisgIGludCBibGFrZTJzKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworICBpbnQgYmxha2UyYiggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKworICBpbnQgYmxha2Uyc3AoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJicCggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKworICBpbnQgYmxha2UyeHMoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJ4Yiggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKworICAvKiBUaGlzIGlzIHNpbXBseSBhbiBhbGlhcyBmb3IgYmxha2UyYiAqLworICBpbnQgYmxha2UyKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMl9pbXBsLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDVkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJfaW1wbC5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIENvcHlyaWdodCAyMDEyLCBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+LiAgWW91IG1heSB1c2UgdGhpcyB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoZSBDQzAsIHRoZSBPcGVuU1NMIExpY2VuY2UsIG9yIHRoZSBBcGFjaGUgUHVibGljIExpY2Vuc2UgMi4wLCBhdAorICAgeW91ciBvcHRpb24uICBUaGUgdGVybXMgb2YgdGhlc2UgbGljZW5zZXMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAtIENDMCAxLjAgVW5pdmVyc2FsIDogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wCisgICAtIE9wZW5TU0wgbGljZW5zZSAgIDogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAgLSBBcGFjaGUgMi4wICAgICAgICA6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCTEFLRTIgaGFzaCBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHBzOi8vYmxha2UyLm5ldC4KKyovCisKKyNpZm5kZWYgQVJDSElWRV9CTEFLRTJfSU1QTF9ICisjZGVmaW5lIEFSQ0hJVkVfQkxBS0UyX0lNUExfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgKCFkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pIHx8IF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMKQorICAjaWYgICBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgQkxBS0UyX0lOTElORSBfX2lubGluZQorICAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICNkZWZpbmUgQkxBS0UyX0lOTElORSBfX2lubGluZV9fCisgICNlbHNlCisgICAgI2RlZmluZSBCTEFLRTJfSU5MSU5FCisgICNlbmRpZgorI2Vsc2UKKyAgI2RlZmluZSBCTEFLRTJfSU5MSU5FIGlubGluZQorI2VuZGlmCisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQzMl90IGxvYWQzMiggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICB1aW50MzJfdCB3OworICBtZW1jcHkoJncsIHNyYywgc2l6ZW9mIHcpOworICByZXR1cm4gdzsKKyNlbHNlCisgIGNvbnN0IHVpbnQ4X3QgKnAgPSAoIGNvbnN0IHVpbnQ4X3QgKiApc3JjOworICByZXR1cm4gKCggdWludDMyX3QgKSggcFswXSApIDw8ICAwKSB8CisgICAgICAgICAoKCB1aW50MzJfdCApKCBwWzFdICkgPDwgIDgpIHwKKyAgICAgICAgICgoIHVpbnQzMl90ICkoIHBbMl0gKSA8PCAxNikgfAorICAgICAgICAgKCggdWludDMyX3QgKSggcFszXSApIDw8IDI0KSA7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDY0X3QgbG9hZDY0KCBjb25zdCB2b2lkICpzcmMgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIHVpbnQ2NF90IHc7CisgIG1lbWNweSgmdywgc3JjLCBzaXplb2Ygdyk7CisgIHJldHVybiB3OworI2Vsc2UKKyAgY29uc3QgdWludDhfdCAqcCA9ICggY29uc3QgdWludDhfdCAqIClzcmM7CisgIHJldHVybiAoKCB1aW50NjRfdCApKCBwWzBdICkgPDwgIDApIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbMV0gKSA8PCAgOCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFsyXSApIDw8IDE2KSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzNdICkgPDwgMjQpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbNF0gKSA8PCAzMikgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs1XSApIDw8IDQwKSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzZdICkgPDwgNDgpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbN10gKSA8PCA1NikgOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQxNl90IGxvYWQxNiggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICB1aW50MTZfdCB3OworICBtZW1jcHkoJncsIHNyYywgc2l6ZW9mIHcpOworICByZXR1cm4gdzsKKyNlbHNlCisgIGNvbnN0IHVpbnQ4X3QgKnAgPSAoIGNvbnN0IHVpbnQ4X3QgKiApc3JjOworICByZXR1cm4gKCB1aW50MTZfdCApKCgoIHVpbnQzMl90ICkoIHBbMF0gKSA8PCAgMCkgfAorICAgICAgICAgICAgICAgICAgICAgICgoIHVpbnQzMl90ICkoIHBbMV0gKSA8PCAgOCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHZvaWQgc3RvcmUxNiggdm9pZCAqZHN0LCB1aW50MTZfdCB3ICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICBtZW1jcHkoZHN0LCAmdywgc2l6ZW9mIHcpOworI2Vsc2UKKyAgdWludDhfdCAqcCA9ICggdWludDhfdCAqIClkc3Q7CisgICpwKysgPSAoIHVpbnQ4X3QgKXc7IHcgPj49IDg7CisgICpwKysgPSAoIHVpbnQ4X3QgKXc7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdm9pZCBzdG9yZTMyKCB2b2lkICpkc3QsIHVpbnQzMl90IHcgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIG1lbWNweShkc3QsICZ3LCBzaXplb2Ygdyk7CisjZWxzZQorICB1aW50OF90ICpwID0gKCB1aW50OF90ICogKWRzdDsKKyAgcFswXSA9ICh1aW50OF90KSh3ID4+ICAwKTsKKyAgcFsxXSA9ICh1aW50OF90KSh3ID4+ICA4KTsKKyAgcFsyXSA9ICh1aW50OF90KSh3ID4+IDE2KTsKKyAgcFszXSA9ICh1aW50OF90KSh3ID4+IDI0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgQkxBS0UyX0lOTElORSB2b2lkIHN0b3JlNjQoIHZvaWQgKmRzdCwgdWludDY0X3QgdyApCit7CisjaWYgZGVmaW5lZChOQVRJVkVfTElUVExFX0VORElBTikKKyAgbWVtY3B5KGRzdCwgJncsIHNpemVvZiB3KTsKKyNlbHNlCisgIHVpbnQ4X3QgKnAgPSAoIHVpbnQ4X3QgKiApZHN0OworICBwWzBdID0gKHVpbnQ4X3QpKHcgPj4gIDApOworICBwWzFdID0gKHVpbnQ4X3QpKHcgPj4gIDgpOworICBwWzJdID0gKHVpbnQ4X3QpKHcgPj4gMTYpOworICBwWzNdID0gKHVpbnQ4X3QpKHcgPj4gMjQpOworICBwWzRdID0gKHVpbnQ4X3QpKHcgPj4gMzIpOworICBwWzVdID0gKHVpbnQ4X3QpKHcgPj4gNDApOworICBwWzZdID0gKHVpbnQ4X3QpKHcgPj4gNDgpOworICBwWzddID0gKHVpbnQ4X3QpKHcgPj4gNTYpOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQ2NF90IGxvYWQ0OCggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgY29uc3QgdWludDhfdCAqcCA9ICggY29uc3QgdWludDhfdCAqIClzcmM7CisgIHJldHVybiAoKCB1aW50NjRfdCApKCBwWzBdICkgPDwgIDApIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbMV0gKSA8PCAgOCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFsyXSApIDw8IDE2KSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzNdICkgPDwgMjQpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbNF0gKSA8PCAzMikgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs1XSApIDw8IDQwKSA7Cit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHZvaWQgc3RvcmU0OCggdm9pZCAqZHN0LCB1aW50NjRfdCB3ICkKK3sKKyAgdWludDhfdCAqcCA9ICggdWludDhfdCAqIClkc3Q7CisgIHBbMF0gPSAodWludDhfdCkodyA+PiAgMCk7CisgIHBbMV0gPSAodWludDhfdCkodyA+PiAgOCk7CisgIHBbMl0gPSAodWludDhfdCkodyA+PiAxNik7CisgIHBbM10gPSAodWludDhfdCkodyA+PiAyNCk7CisgIHBbNF0gPSAodWludDhfdCkodyA+PiAzMik7CisgIHBbNV0gPSAodWludDhfdCkodyA+PiA0MCk7Cit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQzMl90IHJvdHIzMiggY29uc3QgdWludDMyX3QgdywgY29uc3QgdW5zaWduZWQgYyApCit7CisgIHJldHVybiAoIHcgPj4gYyApIHwgKCB3IDw8ICggMzIgLSBjICkgKTsKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDY0X3Qgcm90cjY0KCBjb25zdCB1aW50NjRfdCB3LCBjb25zdCB1bnNpZ25lZCBjICkKK3sKKyAgcmV0dXJuICggdyA+PiBjICkgfCAoIHcgPDwgKCA2NCAtIGMgKSApOworfQorCisvKiBwcmV2ZW50cyBjb21waWxlciBvcHRpbWl6aW5nIG91dCBtZW1zZXQoKSAqLworc3RhdGljIEJMQUtFMl9JTkxJTkUgdm9pZCBzZWN1cmVfemVyb19tZW1vcnkodm9pZCAqdiwgc2l6ZV90IG4pCit7CisgIHN0YXRpYyB2b2lkICooKmNvbnN0IHZvbGF0aWxlIG1lbXNldF92KSh2b2lkICosIGludCwgc2l6ZV90KSA9ICZtZW1zZXQ7CisgIG1lbXNldF92KHYsIDAsIG4pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNfcmVmLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJzX3JlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJzX3JlZi5jCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIENvcHlyaWdodCAyMDEyLCBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+LiAgWW91IG1heSB1c2UgdGhpcyB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoZSBDQzAsIHRoZSBPcGVuU1NMIExpY2VuY2UsIG9yIHRoZSBBcGFjaGUgUHVibGljIExpY2Vuc2UgMi4wLCBhdAorICAgeW91ciBvcHRpb24uICBUaGUgdGVybXMgb2YgdGhlc2UgbGljZW5zZXMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAtIENDMCAxLjAgVW5pdmVyc2FsIDogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wCisgICAtIE9wZW5TU0wgbGljZW5zZSAgIDogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAgLSBBcGFjaGUgMi4wICAgICAgICA6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCTEFLRTIgaGFzaCBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHBzOi8vYmxha2UyLm5ldC4KKyovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiYXJjaGl2ZV9ibGFrZTIuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2JsYWtlMl9pbXBsLmgiCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBibGFrZTJzX0lWWzhdID0KK3sKKyAgMHg2QTA5RTY2N1VMLCAweEJCNjdBRTg1VUwsIDB4M0M2RUYzNzJVTCwgMHhBNTRGRjUzQVVMLAorICAweDUxMEU1MjdGVUwsIDB4OUIwNTY4OENVTCwgMHgxRjgzRDlBQlVMLCAweDVCRTBDRDE5VUwKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGJsYWtlMnNfc2lnbWFbMTBdWzE2XSA9Cit7CisgIHsgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfSAsCisgIHsgMTQsIDEwLCAgNCwgIDgsICA5LCAxNSwgMTMsICA2LCAgMSwgMTIsICAwLCAgMiwgMTEsICA3LCAgNSwgIDMgfSAsCisgIHsgMTEsICA4LCAxMiwgIDAsICA1LCAgMiwgMTUsIDEzLCAxMCwgMTQsICAzLCAgNiwgIDcsICAxLCAgOSwgIDQgfSAsCisgIHsgIDcsICA5LCAgMywgIDEsIDEzLCAxMiwgMTEsIDE0LCAgMiwgIDYsICA1LCAxMCwgIDQsICAwLCAxNSwgIDggfSAsCisgIHsgIDksICAwLCAgNSwgIDcsICAyLCAgNCwgMTAsIDE1LCAxNCwgIDEsIDExLCAxMiwgIDYsICA4LCAgMywgMTMgfSAsCisgIHsgIDIsIDEyLCAgNiwgMTAsICAwLCAxMSwgIDgsICAzLCAgNCwgMTMsICA3LCAgNSwgMTUsIDE0LCAgMSwgIDkgfSAsCisgIHsgMTIsICA1LCAgMSwgMTUsIDE0LCAxMywgIDQsIDEwLCAgMCwgIDcsICA2LCAgMywgIDksICAyLCAgOCwgMTEgfSAsCisgIHsgMTMsIDExLCAgNywgMTQsIDEyLCAgMSwgIDMsICA5LCAgNSwgIDAsIDE1LCAgNCwgIDgsICA2LCAgMiwgMTAgfSAsCisgIHsgIDYsIDE1LCAxNCwgIDksIDExLCAgMywgIDAsICA4LCAxMiwgIDIsIDEzLCAgNywgIDEsICA0LCAxMCwgIDUgfSAsCisgIHsgMTAsICAyLCAgOCwgIDQsICA3LCAgNiwgIDEsICA1LCAxNSwgMTEsICA5LCAxNCwgIDMsIDEyLCAxMyAsIDAgfSAsCit9OworCitzdGF0aWMgdm9pZCBibGFrZTJzX3NldF9sYXN0bm9kZSggYmxha2Uyc19zdGF0ZSAqUyApCit7CisgIFMtPmZbMV0gPSAodWludDMyX3QpLTE7Cit9CisKKy8qIFNvbWUgaGVscGVyIGZ1bmN0aW9ucywgbm90IG5lY2Vzc2FyaWx5IHVzZWZ1bCAqLworc3RhdGljIGludCBibGFrZTJzX2lzX2xhc3RibG9jayggY29uc3QgYmxha2Uyc19zdGF0ZSAqUyApCit7CisgIHJldHVybiBTLT5mWzBdICE9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfc2V0X2xhc3RibG9jayggYmxha2Uyc19zdGF0ZSAqUyApCit7CisgIGlmKCBTLT5sYXN0X25vZGUgKSBibGFrZTJzX3NldF9sYXN0bm9kZSggUyApOworCisgIFMtPmZbMF0gPSAodWludDMyX3QpLTE7Cit9CisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IHVpbnQzMl90IGluYyApCit7CisgIFMtPnRbMF0gKz0gaW5jOworICBTLT50WzFdICs9ICggUy0+dFswXSA8IGluYyApOworfQorCitzdGF0aWMgdm9pZCBibGFrZTJzX2luaXQwKCBibGFrZTJzX3N0YXRlICpTICkKK3sKKyAgc2l6ZV90IGk7CisgIG1lbXNldCggUywgMCwgc2l6ZW9mKCBibGFrZTJzX3N0YXRlICkgKTsKKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgUy0+aFtpXSA9IGJsYWtlMnNfSVZbaV07Cit9CisKKy8qIGluaXQyIHhvcnMgSVYgd2l0aCBpbnB1dCBwYXJhbWV0ZXIgYmxvY2sgKi8KK2ludCBibGFrZTJzX2luaXRfcGFyYW0oIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IGJsYWtlMnNfcGFyYW0gKlAgKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKCBjb25zdCB1bnNpZ25lZCBjaGFyICogKSggUCApOworICBzaXplX3QgaTsKKworICBibGFrZTJzX2luaXQwKCBTICk7CisKKyAgLyogSVYgWE9SIFBhcmFtQmxvY2sgKi8KKyAgZm9yKCBpID0gMDsgaSA8IDg7ICsraSApCisgICAgUy0+aFtpXSBePSBsb2FkMzIoICZwW2kgKiA0XSApOworCisgIFMtPm91dGxlbiA9IFAtPmRpZ2VzdF9sZW5ndGg7CisgIHJldHVybiAwOworfQorCisKKy8qIFNlcXVlbnRpYWwgYmxha2UycyBpbml0aWFsaXphdGlvbiAqLworaW50IGJsYWtlMnNfaW5pdCggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKworICAvKiBNb3ZlIGludGVydmFsIHZlcmlmaWNhdGlvbiBoZXJlPyAqLworICBpZiAoICggIW91dGxlbiApIHx8ICggb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApICkgcmV0dXJuIC0xOworCisgIFAtPmRpZ2VzdF9sZW5ndGggPSAodWludDhfdClvdXRsZW47CisgIFAtPmtleV9sZW5ndGggICAgPSAwOworICBQLT5mYW5vdXQgICAgICAgID0gMTsKKyAgUC0+ZGVwdGggICAgICAgICA9IDE7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIDAgKTsKKyAgc3RvcmUxNiggJlAtPnhvZl9sZW5ndGgsIDAgKTsKKyAgUC0+bm9kZV9kZXB0aCAgICA9IDA7CisgIFAtPmlubmVyX2xlbmd0aCAgPSAwOworICAvKiBtZW1zZXQoUC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihQLT5yZXNlcnZlZCkgKTsgKi8KKyAgbWVtc2V0KCBQLT5zYWx0LCAgICAgMCwgc2l6ZW9mKCBQLT5zYWx0ICkgKTsKKyAgbWVtc2V0KCBQLT5wZXJzb25hbCwgMCwgc2l6ZW9mKCBQLT5wZXJzb25hbCApICk7CisgIHJldHVybiBibGFrZTJzX2luaXRfcGFyYW0oIFMsIFAgKTsKK30KKworaW50IGJsYWtlMnNfaW5pdF9rZXkoIGJsYWtlMnNfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKworICBpZiAoICggIW91dGxlbiApIHx8ICggb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApICkgcmV0dXJuIC0xOworCisgIGlmICggIWtleSB8fCAha2V5bGVuIHx8IGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCAgICA9ICh1aW50OF90KWtleWxlbjsKKyAgUC0+ZmFub3V0ICAgICAgICA9IDE7CisgIFAtPmRlcHRoICAgICAgICAgPSAxOworICBzdG9yZTMyKCAmUC0+bGVhZl9sZW5ndGgsIDAgKTsKKyAgc3RvcmUzMiggJlAtPm5vZGVfb2Zmc2V0LCAwICk7CisgIHN0b3JlMTYoICZQLT54b2ZfbGVuZ3RoLCAwICk7CisgIFAtPm5vZGVfZGVwdGggICAgPSAwOworICBQLT5pbm5lcl9sZW5ndGggID0gMDsKKyAgLyogbWVtc2V0KFAtPnJlc2VydmVkLCAwLCBzaXplb2YoUC0+cmVzZXJ2ZWQpICk7ICovCisgIG1lbXNldCggUC0+c2FsdCwgICAgIDAsIHNpemVvZiggUC0+c2FsdCApICk7CisgIG1lbXNldCggUC0+cGVyc29uYWwsIDAsIHNpemVvZiggUC0+cGVyc29uYWwgKSApOworCisgIGlmKCBibGFrZTJzX2luaXRfcGFyYW0oIFMsIFAgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgeworICAgIHVpbnQ4X3QgYmxvY2tbQkxBS0UyU19CTE9DS0JZVEVTXTsKKyAgICBtZW1zZXQoIGJsb2NrLCAwLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICBtZW1jcHkoIGJsb2NrLCBrZXksIGtleWxlbiApOworICAgIGJsYWtlMnNfdXBkYXRlKCBTLCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgc2VjdXJlX3plcm9fbWVtb3J5KCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7IC8qIEJ1cm4gdGhlIGtleSBmcm9tIHN0YWNrICovCisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgRyhyLGksYSxiLGMsZCkgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYSA9IGEgKyBiICsgbVtibGFrZTJzX3NpZ21hW3JdWzIqaSswXV07IFwKKyAgICBkID0gcm90cjMyKGQgXiBhLCAxNik7ICAgICAgICAgICAgICAgICAgXAorICAgIGMgPSBjICsgZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYiA9IHJvdHIzMihiIF4gYywgMTIpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBhID0gYSArIGIgKyBtW2JsYWtlMnNfc2lnbWFbcl1bMippKzFdXTsgXAorICAgIGQgPSByb3RyMzIoZCBeIGEsIDgpOyAgICAgICAgICAgICAgICAgICBcCisgICAgYyA9IGMgKyBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBiID0gcm90cjMyKGIgXiBjLCA3KTsgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDApCisKKyNkZWZpbmUgUk9VTkQocikgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHKHIsMCx2WyAwXSx2WyA0XSx2WyA4XSx2WzEyXSk7IFwKKyAgICBHKHIsMSx2WyAxXSx2WyA1XSx2WyA5XSx2WzEzXSk7IFwKKyAgICBHKHIsMix2WyAyXSx2WyA2XSx2WzEwXSx2WzE0XSk7IFwKKyAgICBHKHIsMyx2WyAzXSx2WyA3XSx2WzExXSx2WzE1XSk7IFwKKyAgICBHKHIsNCx2WyAwXSx2WyA1XSx2WzEwXSx2WzE1XSk7IFwKKyAgICBHKHIsNSx2WyAxXSx2WyA2XSx2WzExXSx2WzEyXSk7IFwKKyAgICBHKHIsNix2WyAyXSx2WyA3XSx2WyA4XSx2WzEzXSk7IFwKKyAgICBHKHIsNyx2WyAzXSx2WyA0XSx2WyA5XSx2WzE0XSk7IFwKKyAgfSB3aGlsZSgwKQorCitzdGF0aWMgdm9pZCBibGFrZTJzX2NvbXByZXNzKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCB1aW50OF90IGluW0JMQUtFMlNfQkxPQ0tCWVRFU10gKQoreworICB1aW50MzJfdCBtWzE2XTsKKyAgdWludDMyX3QgdlsxNl07CisgIHNpemVfdCBpOworCisgIGZvciggaSA9IDA7IGkgPCAxNjsgKytpICkgeworICAgIG1baV0gPSBsb2FkMzIoIGluICsgaSAqIHNpemVvZiggbVtpXSApICk7CisgIH0KKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgeworICAgIHZbaV0gPSBTLT5oW2ldOworICB9CisKKyAgdlsgOF0gPSBibGFrZTJzX0lWWzBdOworICB2WyA5XSA9IGJsYWtlMnNfSVZbMV07CisgIHZbMTBdID0gYmxha2Uyc19JVlsyXTsKKyAgdlsxMV0gPSBibGFrZTJzX0lWWzNdOworICB2WzEyXSA9IFMtPnRbMF0gXiBibGFrZTJzX0lWWzRdOworICB2WzEzXSA9IFMtPnRbMV0gXiBibGFrZTJzX0lWWzVdOworICB2WzE0XSA9IFMtPmZbMF0gXiBibGFrZTJzX0lWWzZdOworICB2WzE1XSA9IFMtPmZbMV0gXiBibGFrZTJzX0lWWzddOworCisgIFJPVU5EKCAwICk7CisgIFJPVU5EKCAxICk7CisgIFJPVU5EKCAyICk7CisgIFJPVU5EKCAzICk7CisgIFJPVU5EKCA0ICk7CisgIFJPVU5EKCA1ICk7CisgIFJPVU5EKCA2ICk7CisgIFJPVU5EKCA3ICk7CisgIFJPVU5EKCA4ICk7CisgIFJPVU5EKCA5ICk7CisKKyAgZm9yKCBpID0gMDsgaSA8IDg7ICsraSApIHsKKyAgICBTLT5oW2ldID0gUy0+aFtpXSBeIHZbaV0gXiB2W2kgKyA4XTsKKyAgfQorfQorCisjdW5kZWYgRworI3VuZGVmIFJPVU5ECisKK2ludCBibGFrZTJzX3VwZGF0ZSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3Qgdm9pZCAqcGluLCBzaXplX3QgaW5sZW4gKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICogaW4gPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXBpbjsKKyAgaWYoIGlubGVuID4gMCApCisgIHsKKyAgICBzaXplX3QgbGVmdCA9IFMtPmJ1ZmxlbjsKKyAgICBzaXplX3QgZmlsbCA9IEJMQUtFMlNfQkxPQ0tCWVRFUyAtIGxlZnQ7CisgICAgaWYoIGlubGVuID4gZmlsbCApCisgICAgeworICAgICAgUy0+YnVmbGVuID0gMDsKKyAgICAgIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGZpbGwgKTsgLyogRmlsbCBidWZmZXIgKi8KKyAgICAgIGJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoIFMsIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICAgICAgYmxha2Uyc19jb21wcmVzcyggUywgUy0+YnVmICk7IC8qIENvbXByZXNzICovCisgICAgICBpbiArPSBmaWxsOyBpbmxlbiAtPSBmaWxsOworICAgICAgd2hpbGUoaW5sZW4gPiBCTEFLRTJTX0JMT0NLQllURVMpIHsKKyAgICAgICAgYmxha2Uyc19pbmNyZW1lbnRfY291bnRlcihTLCBCTEFLRTJTX0JMT0NLQllURVMpOworICAgICAgICBibGFrZTJzX2NvbXByZXNzKCBTLCBpbiApOworICAgICAgICBpbiArPSBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgICAgIGlubGVuIC09IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICAgIH0KKyAgICB9CisgICAgbWVtY3B5KCBTLT5idWYgKyBTLT5idWZsZW4sIGluLCBpbmxlbiApOworICAgIFMtPmJ1ZmxlbiArPSBpbmxlbjsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGJsYWtlMnNfZmluYWwoIGJsYWtlMnNfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApCit7CisgIHVpbnQ4X3QgYnVmZmVyW0JMQUtFMlNfT1VUQllURVNdID0gezB9OworICBzaXplX3QgaTsKKworICBpZiggb3V0ID09IE5VTEwgfHwgb3V0bGVuIDwgUy0+b3V0bGVuICkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYoIGJsYWtlMnNfaXNfbGFzdGJsb2NrKCBTICkgKQorICAgIHJldHVybiAtMTsKKworICBibGFrZTJzX2luY3JlbWVudF9jb3VudGVyKCBTLCAoIHVpbnQzMl90IClTLT5idWZsZW4gKTsKKyAgYmxha2Uyc19zZXRfbGFzdGJsb2NrKCBTICk7CisgIG1lbXNldCggUy0+YnVmICsgUy0+YnVmbGVuLCAwLCBCTEFLRTJTX0JMT0NLQllURVMgLSBTLT5idWZsZW4gKTsgLyogUGFkZGluZyAqLworICBibGFrZTJzX2NvbXByZXNzKCBTLCBTLT5idWYgKTsKKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgLyogT3V0cHV0IGZ1bGwgaGFzaCB0byB0ZW1wIGJ1ZmZlciAqLworICAgIHN0b3JlMzIoIGJ1ZmZlciArIHNpemVvZiggUy0+aFtpXSApICogaSwgUy0+aFtpXSApOworCisgIG1lbWNweSggb3V0LCBidWZmZXIsIG91dGxlbiApOworICBzZWN1cmVfemVyb19tZW1vcnkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIHJldHVybiAwOworfQorCitpbnQgYmxha2Uycyggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKQoreworICBibGFrZTJzX3N0YXRlIFNbMV07CisKKyAgLyogVmVyaWZ5IHBhcmFtZXRlcnMgKi8KKyAgaWYgKCBOVUxMID09IGluICYmIGlubGVuID4gMCApIHJldHVybiAtMTsKKworICBpZiAoIE5VTEwgPT0gb3V0ICkgcmV0dXJuIC0xOworCisgIGlmICggTlVMTCA9PSBrZXkgJiYga2V5bGVuID4gMCkgcmV0dXJuIC0xOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoIGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoIGtleWxlbiA+IDAgKQorICB7CisgICAgaWYoIGJsYWtlMnNfaW5pdF9rZXkoIFMsIG91dGxlbiwga2V5LCBrZXlsZW4gKSA8IDAgKSByZXR1cm4gLTE7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYoIGJsYWtlMnNfaW5pdCggUywgb3V0bGVuICkgPCAwICkgcmV0dXJuIC0xOworICB9CisKKyAgYmxha2Uyc191cGRhdGUoIFMsICggY29uc3QgdWludDhfdCAqIClpbiwgaW5sZW4gKTsKKyAgYmxha2Uyc19maW5hbCggUywgb3V0LCBvdXRsZW4gKTsKKyAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKFNVUEVSQ09QKQoraW50IGNyeXB0b19oYXNoKCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGxvbmcgaW5sZW4gKQoreworICByZXR1cm4gYmxha2Uycyggb3V0LCBCTEFLRTJTX09VVEJZVEVTLCBpbiwgaW5sZW4sIE5VTEwsIDAgKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTEFLRTJTX1NFTEZURVNUKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImJsYWtlMi1rYXQuaCIKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgdWludDhfdCBrZXlbQkxBS0UyU19LRVlCWVRFU107CisgIHVpbnQ4X3QgYnVmW0JMQUtFMl9LQVRfTEVOR1RIXTsKKyAgc2l6ZV90IGksIHN0ZXA7CisKKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMlNfS0VZQllURVM7ICsraSApCisgICAga2V5W2ldID0gKCB1aW50OF90IClpOworCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgICBidWZbaV0gPSAoIHVpbnQ4X3QgKWk7CisKKyAgLyogVGVzdCBzaW1wbGUgQVBJICovCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgeworICAgIHVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKyAgICBibGFrZTJzKCBoYXNoLCBCTEFLRTJTX09VVEJZVEVTLCBidWYsIGksIGtleSwgQkxBS0UyU19LRVlCWVRFUyApOworCisgICAgaWYoIDAgIT0gbWVtY21wKCBoYXNoLCBibGFrZTJzX2tleWVkX2thdFtpXSwgQkxBS0UyU19PVVRCWVRFUyApICkKKyAgICB7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICB9CisKKyAgLyogVGVzdCBzdHJlYW1pbmcgQVBJICovCisgIGZvcihzdGVwID0gMTsgc3RlcCA8IEJMQUtFMlNfQkxPQ0tCWVRFUzsgKytzdGVwKSB7CisgICAgZm9yIChpID0gMDsgaSA8IEJMQUtFMl9LQVRfTEVOR1RIOyArK2kpIHsKKyAgICAgIHVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKyAgICAgIGJsYWtlMnNfc3RhdGUgUzsKKyAgICAgIHVpbnQ4X3QgKiBwID0gYnVmOworICAgICAgc2l6ZV90IG1sZW4gPSBpOworICAgICAgaW50IGVyciA9IDA7CisKKyAgICAgIGlmKCAoZXJyID0gYmxha2Uyc19pbml0X2tleSgmUywgQkxBS0UyU19PVVRCWVRFUywga2V5LCBCTEFLRTJTX0tFWUJZVEVTKSkgPCAwICkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIHdoaWxlIChtbGVuID49IHN0ZXApIHsKKyAgICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc191cGRhdGUoJlMsIHAsIHN0ZXApKSA8IDAgKSB7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIG1sZW4gLT0gc3RlcDsKKyAgICAgICAgcCArPSBzdGVwOworICAgICAgfQorICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc191cGRhdGUoJlMsIHAsIG1sZW4pKSA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc19maW5hbCgmUywgaGFzaCwgQkxBS0UyU19PVVRCWVRFUykpIDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGlmICgwICE9IG1lbWNtcChoYXNoLCBibGFrZTJzX2tleWVkX2thdFtpXSwgQkxBS0UyU19PVVRCWVRFUykpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1dHMoICJvayIgKTsKKyAgcmV0dXJuIDA7CitmYWlsOgorICBwdXRzKCJlcnJvciIpOworICByZXR1cm4gLTE7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNwX3JlZi5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc3BfcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmMTAxMAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNwX3JlZi5jCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIENvcHlyaWdodCAyMDEyLCBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+LiAgWW91IG1heSB1c2UgdGhpcyB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoZSBDQzAsIHRoZSBPcGVuU1NMIExpY2VuY2UsIG9yIHRoZSBBcGFjaGUgUHVibGljIExpY2Vuc2UgMi4wLCBhdAorICAgeW91ciBvcHRpb24uICBUaGUgdGVybXMgb2YgdGhlc2UgbGljZW5zZXMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAtIENDMCAxLjAgVW5pdmVyc2FsIDogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wCisgICAtIE9wZW5TU0wgbGljZW5zZSAgIDogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAgLSBBcGFjaGUgMi4wICAgICAgICA6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCTEFLRTIgaGFzaCBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHBzOi8vYmxha2UyLm5ldC4KKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgZGVmaW5lZChfT1BFTk1QKQorI2luY2x1ZGUgPG9tcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmNoaXZlX2JsYWtlMi5oIgorI2luY2x1ZGUgImFyY2hpdmVfYmxha2UyX2ltcGwuaCIKKworI2RlZmluZSBQQVJBTExFTElTTV9ERUdSRUUgOAorCisvKgorICBibGFrZTJzcF9pbml0X3BhcmFtIGRlZmF1bHRzIHRvIHNldHRpbmcgdGhlIGV4cGVjdGluZyBvdXRwdXQgbGVuZ3RoCisgIGZyb20gdGhlIGRpZ2VzdF9sZW5ndGggcGFyYW1ldGVyIGJsb2NrIGZpZWxkLgorCisgIEluIHNvbWUgY2FzZXMsIGhvd2V2ZXIsIHdlIGRvIG5vdCB3YW50IHRoaXMsIGFzIHRoZSBvdXRwdXQgbGVuZ3RoCisgIG9mIHRoZXNlIGluc3RhbmNlcyBpcyBnaXZlbiBieSBpbm5lcl9sZW5ndGggaW5zdGVhZC4KKyovCitzdGF0aWMgaW50IGJsYWtlMnNwX2luaXRfbGVhZl9wYXJhbSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3QgYmxha2Uyc19wYXJhbSAqUCApCit7CisgIGludCBlcnIgPSBibGFrZTJzX2luaXRfcGFyYW0oUywgUCk7CisgIFMtPm91dGxlbiA9IFAtPmlubmVyX2xlbmd0aDsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBibGFrZTJzcF9pbml0X2xlYWYoIGJsYWtlMnNfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIHNpemVfdCBrZXlsZW4sIHVpbnQzMl90IG9mZnNldCApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCA9ICh1aW50OF90KWtleWxlbjsKKyAgUC0+ZmFub3V0ID0gUEFSQUxMRUxJU01fREVHUkVFOworICBQLT5kZXB0aCA9IDI7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIG9mZnNldCApOworICBzdG9yZTE2KCAmUC0+eG9mX2xlbmd0aCwgMCApOworICBQLT5ub2RlX2RlcHRoID0gMDsKKyAgUC0+aW5uZXJfbGVuZ3RoID0gQkxBS0UyU19PVVRCWVRFUzsKKyAgbWVtc2V0KCBQLT5zYWx0LCAwLCBzaXplb2YoIFAtPnNhbHQgKSApOworICBtZW1zZXQoIFAtPnBlcnNvbmFsLCAwLCBzaXplb2YoIFAtPnBlcnNvbmFsICkgKTsKKyAgcmV0dXJuIGJsYWtlMnNwX2luaXRfbGVhZl9wYXJhbSggUywgUCApOworfQorCitzdGF0aWMgaW50IGJsYWtlMnNwX2luaXRfcm9vdCggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgc2l6ZV90IGtleWxlbiApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCA9ICh1aW50OF90KWtleWxlbjsKKyAgUC0+ZmFub3V0ID0gUEFSQUxMRUxJU01fREVHUkVFOworICBQLT5kZXB0aCA9IDI7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIDAgKTsKKyAgc3RvcmUxNiggJlAtPnhvZl9sZW5ndGgsIDAgKTsKKyAgUC0+bm9kZV9kZXB0aCA9IDE7CisgIFAtPmlubmVyX2xlbmd0aCA9IEJMQUtFMlNfT1VUQllURVM7CisgIG1lbXNldCggUC0+c2FsdCwgMCwgc2l6ZW9mKCBQLT5zYWx0ICkgKTsKKyAgbWVtc2V0KCBQLT5wZXJzb25hbCwgMCwgc2l6ZW9mKCBQLT5wZXJzb25hbCApICk7CisgIHJldHVybiBibGFrZTJzX2luaXRfcGFyYW0oIFMsIFAgKTsKK30KKworCitpbnQgYmxha2Uyc3BfaW5pdCggYmxha2Uyc3Bfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4gKQoreworICBzaXplX3QgaTsKKworICBpZiggIW91dGxlbiB8fCBvdXRsZW4gPiBCTEFLRTJTX09VVEJZVEVTICkgcmV0dXJuIC0xOworCisgIG1lbXNldCggUy0+YnVmLCAwLCBzaXplb2YoIFMtPmJ1ZiApICk7CisgIFMtPmJ1ZmxlbiA9IDA7CisgIFMtPm91dGxlbiA9IG91dGxlbjsKKworICBpZiggYmxha2Uyc3BfaW5pdF9yb290KCBTLT5SLCBvdXRsZW4sIDAgKSA8IDAgKQorICAgIHJldHVybiAtMTsKKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGlmKCBibGFrZTJzcF9pbml0X2xlYWYoIFMtPlNbaV0sIG91dGxlbiwgMCwgKHVpbnQzMl90KWkgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgUy0+Ui0+bGFzdF9ub2RlID0gMTsKKyAgUy0+U1tQQVJBTExFTElTTV9ERUdSRUUgLSAxXS0+bGFzdF9ub2RlID0gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBibGFrZTJzcF9pbml0X2tleSggYmxha2Uyc3Bfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIHNpemVfdCBpOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoICFrZXkgfHwgIWtleWxlbiB8fCBrZXlsZW4gPiBCTEFLRTJTX0tFWUJZVEVTICkgcmV0dXJuIC0xOworCisgIG1lbXNldCggUy0+YnVmLCAwLCBzaXplb2YoIFMtPmJ1ZiApICk7CisgIFMtPmJ1ZmxlbiA9IDA7CisgIFMtPm91dGxlbiA9IG91dGxlbjsKKworICBpZiggYmxha2Uyc3BfaW5pdF9yb290KCBTLT5SLCBvdXRsZW4sIGtleWxlbiApIDwgMCApCisgICAgcmV0dXJuIC0xOworCisgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgaWYoIGJsYWtlMnNwX2luaXRfbGVhZiggUy0+U1tpXSwgb3V0bGVuLCBrZXlsZW4sICh1aW50MzJfdClpICkgPCAwICkgcmV0dXJuIC0xOworCisgIFMtPlItPmxhc3Rfbm9kZSA9IDE7CisgIFMtPlNbUEFSQUxMRUxJU01fREVHUkVFIC0gMV0tPmxhc3Rfbm9kZSA9IDE7CisgIHsKKyAgICB1aW50OF90IGJsb2NrW0JMQUtFMlNfQkxPQ0tCWVRFU107CisgICAgbWVtc2V0KCBibG9jaywgMCwgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgbWVtY3B5KCBibG9jaywga2V5LCBrZXlsZW4gKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgICBibGFrZTJzX3VwZGF0ZSggUy0+U1tpXSwgYmxvY2ssIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworCisgICAgc2VjdXJlX3plcm9fbWVtb3J5KCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7IC8qIEJ1cm4gdGhlIGtleSBmcm9tIHN0YWNrICovCisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworaW50IGJsYWtlMnNwX3VwZGF0ZSggYmxha2Uyc3Bfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKnBpbiwgc2l6ZV90IGlubGVuICkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqIGluID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwaW47CisgIHNpemVfdCBsZWZ0ID0gUy0+YnVmbGVuOworICBzaXplX3QgZmlsbCA9IHNpemVvZiggUy0+YnVmICkgLSBsZWZ0OworICBzaXplX3QgaTsKKworICBpZiggbGVmdCAmJiBpbmxlbiA+PSBmaWxsICkKKyAgeworICAgIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGZpbGwgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgICBibGFrZTJzX3VwZGF0ZSggUy0+U1tpXSwgUy0+YnVmICsgaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisKKyAgICBpbiArPSBmaWxsOworICAgIGlubGVuIC09IGZpbGw7CisgICAgbGVmdCA9IDA7CisgIH0KKworI2lmIGRlZmluZWQoX09QRU5NUCkKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgc2hhcmVkKFMpLCBudW1fdGhyZWFkcyhQQVJBTExFTElTTV9ERUdSRUUpCisjZWxzZQorICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorI2VuZGlmCisgIHsKKyNpZiBkZWZpbmVkKF9PUEVOTVApCisgICAgc2l6ZV90ICAgICAgaSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworI2VuZGlmCisgICAgc2l6ZV90IGlubGVuX18gPSBpbmxlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbl9fID0gKCBjb25zdCB1bnNpZ25lZCBjaGFyICogKWluOworICAgIGluX18gKz0gaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKworICAgIHdoaWxlKCBpbmxlbl9fID49IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUyApCisgICAgeworICAgICAgYmxha2Uyc191cGRhdGUoIFMtPlNbaV0sIGluX18sIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICAgICAgaW5fXyArPSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgICBpbmxlbl9fIC09IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICB9CisgIH0KKworICBpbiArPSBpbmxlbiAtIGlubGVuICUgKCBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgaW5sZW4gJT0gUEFSQUxMRUxJU01fREVHUkVFICogQkxBS0UyU19CTE9DS0JZVEVTOworCisgIGlmKCBpbmxlbiA+IDAgKQorICAgIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGlubGVuICk7CisKKyAgUy0+YnVmbGVuID0gbGVmdCArIGlubGVuOworICByZXR1cm4gMDsKK30KKworCitpbnQgYmxha2Uyc3BfZmluYWwoIGJsYWtlMnNwX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKQoreworICB1aW50OF90IGhhc2hbUEFSQUxMRUxJU01fREVHUkVFXVtCTEFLRTJTX09VVEJZVEVTXTsKKyAgc2l6ZV90IGk7CisKKyAgaWYob3V0ID09IE5VTEwgfHwgb3V0bGVuIDwgUy0+b3V0bGVuKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgeworICAgIGlmKCBTLT5idWZsZW4gPiBpICogQkxBS0UyU19CTE9DS0JZVEVTICkKKyAgICB7CisgICAgICBzaXplX3QgbGVmdCA9IFMtPmJ1ZmxlbiAtIGkgKiBCTEFLRTJTX0JMT0NLQllURVM7CisKKyAgICAgIGlmKCBsZWZ0ID4gQkxBS0UyU19CTE9DS0JZVEVTICkgbGVmdCA9IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKworICAgICAgYmxha2Uyc191cGRhdGUoIFMtPlNbaV0sIFMtPmJ1ZiArIGkgKiBCTEFLRTJTX0JMT0NLQllURVMsIGxlZnQgKTsKKyAgICB9CisKKyAgICBibGFrZTJzX2ZpbmFsKCBTLT5TW2ldLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisgIH0KKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGJsYWtlMnNfdXBkYXRlKCBTLT5SLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisKKyAgcmV0dXJuIGJsYWtlMnNfZmluYWwoIFMtPlIsIG91dCwgUy0+b3V0bGVuICk7Cit9CisKKworaW50IGJsYWtlMnNwKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIHVpbnQ4X3QgaGFzaFtQQVJBTExFTElTTV9ERUdSRUVdW0JMQUtFMlNfT1VUQllURVNdOworICBibGFrZTJzX3N0YXRlIFNbUEFSQUxMRUxJU01fREVHUkVFXVsxXTsKKyAgYmxha2Uyc19zdGF0ZSBGU1sxXTsKKyAgc2l6ZV90IGk7CisKKyAgLyogVmVyaWZ5IHBhcmFtZXRlcnMgKi8KKyAgaWYgKCBOVUxMID09IGluICYmIGlubGVuID4gMCApIHJldHVybiAtMTsKKworICBpZiAoIE5VTEwgPT0gb3V0ICkgcmV0dXJuIC0xOworCisgIGlmICggTlVMTCA9PSBrZXkgJiYga2V5bGVuID4gMCkgcmV0dXJuIC0xOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoIGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgICBpZiggYmxha2Uyc3BfaW5pdF9sZWFmKCBTW2ldLCBvdXRsZW4sIGtleWxlbiwgKHVpbnQzMl90KWkgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgU1tQQVJBTExFTElTTV9ERUdSRUUgLSAxXS0+bGFzdF9ub2RlID0gMTsgLyogbWFyayBsYXN0IG5vZGUgKi8KKworICBpZigga2V5bGVuID4gMCApCisgIHsKKyAgICB1aW50OF90IGJsb2NrW0JMQUtFMlNfQkxPQ0tCWVRFU107CisgICAgbWVtc2V0KCBibG9jaywgMCwgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgbWVtY3B5KCBibG9jaywga2V5LCBrZXlsZW4gKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgICBibGFrZTJzX3VwZGF0ZSggU1tpXSwgYmxvY2ssIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworCisgICAgc2VjdXJlX3plcm9fbWVtb3J5KCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7IC8qIEJ1cm4gdGhlIGtleSBmcm9tIHN0YWNrICovCisgIH0KKworI2lmIGRlZmluZWQoX09QRU5NUCkKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgc2hhcmVkKFMsaGFzaCksIG51bV90aHJlYWRzKFBBUkFMTEVMSVNNX0RFR1JFRSkKKyNlbHNlCisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyNlbmRpZgorICB7CisjaWYgZGVmaW5lZChfT1BFTk1QKQorICAgIHNpemVfdCAgICAgIGkgPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsKKyNlbmRpZgorICAgIHNpemVfdCBpbmxlbl9fID0gaW5sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5fXyA9ICggY29uc3QgdW5zaWduZWQgY2hhciAqIClpbjsKKyAgICBpbl9fICs9IGkgKiBCTEFLRTJTX0JMT0NLQllURVM7CisKKyAgICB3aGlsZSggaW5sZW5fXyA+PSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVMgKQorICAgIHsKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTW2ldLCBpbl9fLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICAgIGluX18gKz0gUEFSQUxMRUxJU01fREVHUkVFICogQkxBS0UyU19CTE9DS0JZVEVTOworICAgICAgaW5sZW5fXyAtPSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgfQorCisgICAgaWYoIGlubGVuX18gPiBpICogQkxBS0UyU19CTE9DS0JZVEVTICkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgbGVmdCA9IGlubGVuX18gLSBpICogQkxBS0UyU19CTE9DS0JZVEVTOworICAgICAgY29uc3Qgc2l6ZV90IGxlbiA9IGxlZnQgPD0gQkxBS0UyU19CTE9DS0JZVEVTID8gbGVmdCA6IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTW2ldLCBpbl9fLCBsZW4gKTsKKyAgICB9CisKKyAgICBibGFrZTJzX2ZpbmFsKCBTW2ldLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisgIH0KKworICBpZiggYmxha2Uyc3BfaW5pdF9yb290KCBGUywgb3V0bGVuLCBrZXlsZW4gKSA8IDAgKQorICAgIHJldHVybiAtMTsKKworICBGUy0+bGFzdF9ub2RlID0gMTsKKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGJsYWtlMnNfdXBkYXRlKCBGUywgaGFzaFtpXSwgQkxBS0UyU19PVVRCWVRFUyApOworCisgIHJldHVybiBibGFrZTJzX2ZpbmFsKCBGUywgb3V0LCBvdXRsZW4gKTsKK30KKworCisKKyNpZiBkZWZpbmVkKEJMQUtFMlNQX1NFTEZURVNUKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImJsYWtlMi1rYXQuaCIKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgdWludDhfdCBrZXlbQkxBS0UyU19LRVlCWVRFU107CisgIHVpbnQ4X3QgYnVmW0JMQUtFMl9LQVRfTEVOR1RIXTsKKyAgc2l6ZV90IGksIHN0ZXA7CisKKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMlNfS0VZQllURVM7ICsraSApCisgICAga2V5W2ldID0gKCB1aW50OF90IClpOworCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgICBidWZbaV0gPSAoIHVpbnQ4X3QgKWk7CisKKyAgLyogVGVzdCBzaW1wbGUgQVBJICovCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgeworICAgIHVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKyAgICBibGFrZTJzcCggaGFzaCwgQkxBS0UyU19PVVRCWVRFUywgYnVmLCBpLCBrZXksIEJMQUtFMlNfS0VZQllURVMgKTsKKworICAgIGlmKCAwICE9IG1lbWNtcCggaGFzaCwgYmxha2Uyc3Bfa2V5ZWRfa2F0W2ldLCBCTEFLRTJTX09VVEJZVEVTICkgKQorICAgIHsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIH0KKworICAvKiBUZXN0IHN0cmVhbWluZyBBUEkgKi8KKyAgZm9yKHN0ZXAgPSAxOyBzdGVwIDwgQkxBS0UyU19CTE9DS0JZVEVTOyArK3N0ZXApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQkxBS0UyX0tBVF9MRU5HVEg7ICsraSkgeworICAgICAgdWludDhfdCBoYXNoW0JMQUtFMlNfT1VUQllURVNdOworICAgICAgYmxha2Uyc3Bfc3RhdGUgUzsKKyAgICAgIHVpbnQ4X3QgKiBwID0gYnVmOworICAgICAgc2l6ZV90IG1sZW4gPSBpOworICAgICAgaW50IGVyciA9IDA7CisKKyAgICAgIGlmKCAoZXJyID0gYmxha2Uyc3BfaW5pdF9rZXkoJlMsIEJMQUtFMlNfT1VUQllURVMsIGtleSwgQkxBS0UyU19LRVlCWVRFUykpIDwgMCApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICB3aGlsZSAobWxlbiA+PSBzdGVwKSB7CisgICAgICAgIGlmICggKGVyciA9IGJsYWtlMnNwX3VwZGF0ZSgmUywgcCwgc3RlcCkpIDwgMCApIHsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgbWxlbiAtPSBzdGVwOworICAgICAgICBwICs9IHN0ZXA7CisgICAgICB9CisgICAgICBpZiAoIChlcnIgPSBibGFrZTJzcF91cGRhdGUoJlMsIHAsIG1sZW4pKSA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc3BfZmluYWwoJlMsIGhhc2gsIEJMQUtFMlNfT1VUQllURVMpKSA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpZiAoMCAhPSBtZW1jbXAoaGFzaCwgYmxha2Uyc3Bfa2V5ZWRfa2F0W2ldLCBCTEFLRTJTX09VVEJZVEVTKSkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHV0cyggIm9rIiApOworICByZXR1cm4gMDsKK2ZhaWw6CisgIHB1dHMoImVycm9yIik7CisgIHJldHVybiAtMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY21kbGluZV9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaAppbmRleCA0ZTQwOWU4Li41N2ExOTQ5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaApAQCAtMjUsMTUgKzI1LDE1IEBACiAgKiAkRnJlZUJTRCQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfQ01ETElORV9QUklWQVRFX0gKKyNkZWZpbmUgQVJDSElWRV9DTURMSU5FX1BSSVZBVEVfSAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfQ01ETElORV9QUklWQVRFX0gKLSNkZWZpbmUgQVJDSElWRV9DTURMSU5FX1BSSVZBVEVfSAotCiBzdHJ1Y3QgYXJjaGl2ZV9jbWRsaW5lIHsKICAgICAgICAgY2hhciAgICAgICAgICAgICpwYXRoOwogICAgICAgICBjaGFyICAgICAgICAgICAgKiphcmd2OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3JjMzIuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyYzMyLmgKaW5kZXggY2Q2MzNhZi4uNGYxYWVkMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3JjMzIuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcmMzMi5oCkBAIC0yNSw2ICsyNSw5IEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX2NyYzMyLmggMjAxMTAyIDIwMDktMTItMjggMDM6MTE6MzZaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfQ1JDMzJfSAorI2RlZmluZSBBUkNISVZFX0NSQzMyX0gKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCkBAIC03NiwzICs3OSw1IEBACiAJCWNyYyA9IGNyY190YmxbKGNyYyBeICpwKyspICYgMHhmZl0gXiAoY3JjID4+IDgpOwogCXJldHVybiAoY3JjIF4gMHhmZmZmZmZmZlVMKTsKIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yLmMKaW5kZXggNzE5NjdjOS4uOGFiMmIwOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyeXB0b3IuYwpAQCAtODUsNiArODUsMzUgQEAKIAlyZXR1cm4gKEJDUllQVF9TVUNDRVNTKHN0YXR1cykpID8gMDogLTE7CiB9CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19QS0NTNV9IKQorCitzdGF0aWMgaW50CitwYmtkZjJfc2hhMShjb25zdCBjaGFyICpwdywgc2l6ZV90IHB3X2xlbiwgY29uc3QgdWludDhfdCAqc2FsdCwKKyAgICBzaXplX3Qgc2FsdF9sZW4sIHVuc2lnbmVkIHJvdW5kcywgdWludDhfdCAqZGVyaXZlZF9rZXksCisgICAgc2l6ZV90IGRlcml2ZWRfa2V5X2xlbikKK3sKKwltYmVkdGxzX21kX2NvbnRleHRfdCBjdHg7CisJY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKmluZm87CisJaW50IHJldDsKKworCW1iZWR0bHNfbWRfaW5pdCgmY3R4KTsKKwlpbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZShNQkVEVExTX01EX1NIQTEpOworCWlmIChpbmZvID09IE5VTEwpIHsKKwkJbWJlZHRsc19tZF9mcmVlKCZjdHgpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0ID0gbWJlZHRsc19tZF9zZXR1cCgmY3R4LCBpbmZvLCAxKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJbWJlZHRsc19tZF9mcmVlKCZjdHgpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0ID0gbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYygmY3R4LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKXB3LAorCSAgICBwd19sZW4sIHNhbHQsIHNhbHRfbGVuLCByb3VuZHMsIGRlcml2ZWRfa2V5X2xlbiwgZGVyaXZlZF9rZXkpOworCisJbWJlZHRsc19tZF9mcmVlKCZjdHgpOworCXJldHVybiAocmV0KTsKK30KKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9QQktERjJfSCkKIAogc3RhdGljIGludApAQCAtMjY5LDYgKzI5OCwzOSBAQAogCXJldHVybiAwOwogfQogCisjZWxpZiBkZWZpbmVkKEhBVkVfTElCTUJFRENSWVBUTykgJiYgZGVmaW5lZChIQVZFX01CRURUTFNfQUVTX0gpCisKK3N0YXRpYyBpbnQKK2Flc19jdHJfaW5pdChhcmNoaXZlX2NyeXB0b19jdHggKmN0eCwgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbikKK3sKKwltYmVkdGxzX2Flc19pbml0KCZjdHgtPmN0eCk7CisJY3R4LT5rZXlfbGVuID0ga2V5X2xlbjsKKwltZW1jcHkoY3R4LT5rZXksIGtleSwga2V5X2xlbik7CisJbWVtc2V0KGN0eC0+bm9uY2UsIDAsIHNpemVvZihjdHgtPm5vbmNlKSk7CisJY3R4LT5lbmNyX3BvcyA9IEFFU19CTE9DS19TSVpFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithZXNfY3RyX2VuY3J5cHRfY291bnRlcihhcmNoaXZlX2NyeXB0b19jdHggKmN0eCkKK3sKKwlpZiAobWJlZHRsc19hZXNfc2V0a2V5X2VuYygmY3R4LT5jdHgsIGN0eC0+a2V5LAorCSAgICBjdHgtPmtleV9sZW4gKiA4KSAhPSAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAobWJlZHRsc19hZXNfY3J5cHRfZWNiKCZjdHgtPmN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgY3R4LT5ub25jZSwKKwkgICAgY3R4LT5lbmNyX2J1ZikgIT0gMCkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Flc19jdHJfcmVsZWFzZShhcmNoaXZlX2NyeXB0b19jdHggKmN0eCkKK3sKKwltYmVkdGxzX2Flc19mcmVlKCZjdHgtPmN0eCk7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9BRVNfSCkKIAogc3RhdGljIGludApAQCAtMzE2LDcgKzM3OCwxNCBAQAogCW1lbWNweShjdHgtPmtleSwga2V5LCBrZXlfbGVuKTsKIAltZW1zZXQoY3R4LT5ub25jZSwgMCwgc2l6ZW9mKGN0eC0+bm9uY2UpKTsKIAljdHgtPmVuY3JfcG9zID0gQUVTX0JMT0NLX1NJWkU7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiAgPj0gMHgxMDEwMDAwMEwgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisJaWYgKCFFVlBfQ0lQSEVSX0NUWF9yZXNldChjdHgtPmN0eCkpIHsKKwkJRVZQX0NJUEhFUl9DVFhfZnJlZShjdHgtPmN0eCk7CisJCWN0eC0+Y3R4ID0gTlVMTDsKKwl9CisjZWxzZQogCUVWUF9DSVBIRVJfQ1RYX2luaXQoY3R4LT5jdHgpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyeXB0b3JfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmgKaW5kZXggYjk3NTkyMi4uNjRhMjA1NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmgKQEAgLTIzLDEzICsyMywxMiBAQAogKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKi8KIAotI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKLSNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgotI2VuZGlmCi0KICNpZm5kZWYgQVJDSElWRV9DUllQVE9SX1BSSVZBVEVfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX0NSWVBUT1JfUFJJVkFURV9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgogLyoKICAqIE9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbnkgcmVjb2duaXplZCBjcnlwdG8gbGlicmFyaWVzLAogICogdGhlIGFyY2hpdmVfY3J5cHRvci5jIGZpbGUgd2lsbCBub3JtYWxseSBkZWZpbmUgbm8gdXNhYmxlIHN5bWJvbHMuCkBAIC04Myw2ICs4MiwyMyBAQAogCXVuc2lnbmVkCWVuY3JfcG9zOwogfSBhcmNoaXZlX2NyeXB0b19jdHg7CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19BRVNfSCkKKyNpbmNsdWRlIDxtYmVkdGxzL2Flcy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvbWQuaD4KKyNpbmNsdWRlIDxtYmVkdGxzL3BrY3M1Lmg+CisKKyNkZWZpbmUgQUVTX01BWF9LRVlfU0laRSAzMgorI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorCit0eXBlZGVmIHN0cnVjdCB7CisJbWJlZHRsc19hZXNfY29udGV4dAljdHg7CisJdWludDhfdAkJa2V5W0FFU19NQVhfS0VZX1NJWkVdOworCXVuc2lnbmVkCWtleV9sZW47CisJdWludDhfdAkJbm9uY2VbQUVTX0JMT0NLX1NJWkVdOworCXVpbnQ4X3QJCWVuY3JfYnVmW0FFU19CTE9DS19TSVpFXTsKKwl1bnNpZ25lZAllbmNyX3BvczsKK30gYXJjaGl2ZV9jcnlwdG9fY3R4OworCiAjZWxpZiBkZWZpbmVkKEhBVkVfTElCTkVUVExFKSAmJiBkZWZpbmVkKEhBVkVfTkVUVExFX0FFU19IKQogI2lmIGRlZmluZWQoSEFWRV9ORVRUTEVfUEJLREYyX0gpCiAjaW5jbHVkZSA8bmV0dGxlL3Bia2RmMi5oPgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlnZXN0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYwppbmRleCA0MTUzOTIzLi4zNGM1OGFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYwpAQCAtMTc4LDYgKzE3OCw0MCBAQAogICByZXR1cm4gKEFSQ0hJVkVfT0spOwogfQogCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9NQkVEVExTKQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19tZDVpbml0KGFyY2hpdmVfbWQ1X2N0eCAqY3R4KQoreworICBtYmVkdGxzX21kNV9pbml0KGN0eCk7CisgIGlmIChtYmVkdGxzX21kNV9zdGFydHNfcmV0KGN0eCkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfbWQ1dXBkYXRlKGFyY2hpdmVfbWQ1X2N0eCAqY3R4LCBjb25zdCB2b2lkICppbmRhdGEsCisgICAgc2l6ZV90IGluc2l6ZSkKK3sKKyAgaWYgKG1iZWR0bHNfbWQ1X3VwZGF0ZV9yZXQoY3R4LCBpbmRhdGEsIGluc2l6ZSkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfbWQ1ZmluYWwoYXJjaGl2ZV9tZDVfY3R4ICpjdHgsIHZvaWQgKm1kKQoreworICBpZiAobWJlZHRsc19tZDVfZmluaXNoX3JldChjdHgsIG1kKSA9PSAwKSB7CisgICAgbWJlZHRsc19tZDVfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIH0gZWxzZSB7CisgICAgbWJlZHRsc19tZDVfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisgIH0KK30KKwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTkVUVExFKQogCiBzdGF0aWMgaW50CkBAIC0zMzUsNiArMzY5LDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MGluaXQoYXJjaGl2ZV9ybWQxNjBfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfcmlwZW1kMTYwX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfcmlwZW1kMTYwX3N0YXJ0c19yZXQoY3R4KSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjB1cGRhdGUoYXJjaGl2ZV9ybWQxNjBfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjBmaW5hbChhcmNoaXZlX3JtZDE2MF9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3JpcGVtZDE2MF9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTQ5MSw2ICs1NTksNDAgQEAKICAgcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTFpbml0KGFyY2hpdmVfc2hhMV9jdHggKmN0eCkKK3sKKyAgbWJlZHRsc19zaGExX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhMV9zdGFydHNfcmV0KGN0eCkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMXVwZGF0ZShhcmNoaXZlX3NoYTFfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGExX3VwZGF0ZV9yZXQoY3R4LCBpbmRhdGEsIGluc2l6ZSkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMWZpbmFsKGFyY2hpdmVfc2hhMV9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTFfZmluaXNoX3JldChjdHgsIG1kKSA9PSAwKSB7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICB9IGVsc2UgeworICAgIG1iZWR0bHNfc2hhMV9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTkVUVExFKQogCiBzdGF0aWMgaW50CkBAIC03MjAsNiArODIyLDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NmluaXQoYXJjaGl2ZV9zaGEyNTZfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfc2hhMjU2X2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhMjU2X3N0YXJ0c19yZXQoY3R4LCAwKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEyNTZ1cGRhdGUoYXJjaGl2ZV9zaGEyNTZfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGEyNTZfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEyNTZmaW5hbChhcmNoaXZlX3NoYTI1Nl9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTI1Nl9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTkyMSw2ICsxMDU3LDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTM4NGluaXQoYXJjaGl2ZV9zaGEzODRfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfc2hhNTEyX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhNTEyX3N0YXJ0c19yZXQoY3R4LCAxKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEzODR1cGRhdGUoYXJjaGl2ZV9zaGEzODRfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGE1MTJfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEzODRmaW5hbChhcmNoaXZlX3NoYTM4NF9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTUxMl9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTExNDYsNiArMTMxNiw0MCBAQAogICByZXR1cm4gKEFSQ0hJVkVfT0spOwogfQogCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGE1MTJpbml0KGFyY2hpdmVfc2hhNTEyX2N0eCAqY3R4KQoreworICBtYmVkdGxzX3NoYTUxMl9pbml0KGN0eCk7CisgIGlmIChtYmVkdGxzX3NoYTUxMl9zdGFydHNfcmV0KGN0eCwgMCkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhNTEydXBkYXRlKGFyY2hpdmVfc2hhNTEyX2N0eCAqY3R4LCBjb25zdCB2b2lkICppbmRhdGEsCisgICAgc2l6ZV90IGluc2l6ZSkKK3sKKyAgaWYgKG1iZWR0bHNfc2hhNTEyX3VwZGF0ZV9yZXQoY3R4LCBpbmRhdGEsIGluc2l6ZSkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhNTEyZmluYWwoYXJjaGl2ZV9zaGE1MTJfY3R4ICpjdHgsIHZvaWQgKm1kKQoreworICBpZiAobWJlZHRsc19zaGE1MTJfZmluaXNoX3JldChjdHgsIG1kKSA9PSAwKSB7CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIH0gZWxzZSB7CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisgIH0KK30KKwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTkVUVExFKQogCiBzdGF0aWMgaW50CkBAIC0xMjc2LDYgKzE0ODAsMTAgQEAKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fbWQ1aW5pdCwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fbWQ1dXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9tZDVmaW5hbCwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X01CRURUTFMpCisgICZfX2FyY2hpdmVfbWJlZHRsc19tZDVpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfbWQ1dXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfbWQ1ZmluYWwsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX21kNWluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX21kNXVwZGF0ZSwKQEAgLTEzMDMsNiArMTUxMSwxMCBAQAogICAmX19hcmNoaXZlX2xpYm1kX3JpcGVtZDE2MGluaXQsCiAgICZfX2FyY2hpdmVfbGlibWRfcmlwZW1kMTYwdXBkYXRlLAogICAmX19hcmNoaXZlX2xpYm1kX3JpcGVtZDE2MGZpbmFsLAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MGluaXQsCisgICZfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjB1cGRhdGUsCisgICZfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjBmaW5hbCwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkKICAgJl9fYXJjaGl2ZV9uZXR0bGVfcmlwZW1kMTYwaW5pdCwKICAgJl9fYXJjaGl2ZV9uZXR0bGVfcmlwZW1kMTYwdXBkYXRlLApAQCAtMTMzMCw2ICsxNTQyLDEwIEBACiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTFpbml0LAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGExdXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGExZmluYWwsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTUJFRFRMUykKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTFpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMXVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTFmaW5hbCwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTFpbml0LAogICAmX19hcmNoaXZlX25ldHRsZV9zaGExdXBkYXRlLApAQCAtMTM2OSw2ICsxNTg1LDEwIEBACiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTI1NmluaXQsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTI1NnVwZGF0ZSwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMjU2ZmluYWwsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKQorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMjU2aW5pdCwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NnVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NmZpbmFsLAogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTkVUVExFKQogICAmX19hcmNoaXZlX25ldHRsZV9zaGEyNTZpbml0LAogICAmX19hcmNoaXZlX25ldHRsZV9zaGEyNTZ1cGRhdGUsCkBAIC0xNDA0LDYgKzE2MjQsMTAgQEAKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMzg0aW5pdCwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMzg0dXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGEzODRmaW5hbCwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGEzODRpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMzg0dXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMzg0ZmluYWwsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTM4NGluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTM4NHVwZGF0ZSwKQEAgLTE0NDMsNiArMTY2NywxMCBAQAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGE1MTJpbml0LAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGE1MTJ1cGRhdGUsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTUxMmZpbmFsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKQorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhNTEyaW5pdCwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTUxMnVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTUxMmZpbmFsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTUxMmluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTUxMnVwZGF0ZSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdF9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3RfcHJpdmF0ZS5oCmluZGV4IGI0ZmQ2Y2EuLjE1MzEyZWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdF9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlnZXN0X3ByaXZhdGUuaApAQCAtMjQsMTMgKzI0LDEyIEBACiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCisjaWZuZGVmIEFSQ0hJVkVfRElHRVNUX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX0RJR0VTVF9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCi0KLSNpZm5kZWYgQVJDSElWRV9DUllQVE9fUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfQ1JZUFRPX1BSSVZBVEVfSF9JTkNMVURFRAotCiAvKgogICogQ3J5cHRvIHN1cHBvcnQgaW4gdmFyaW91cyBPcGVyYXRpbmcgU3lzdGVtczoKICAqCkBAIC0xMTIsNiArMTExLDI0IEBACiAjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgogI2VuZGlmCiAKKy8qIG1iZWQgVExTIGNyeXB0byBoZWFkZXJzICovCisjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL21kNS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL3JpcGVtZDE2MC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX01CRURUTFMpCisjaW5jbHVkZSA8bWJlZHRscy9zaGExLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKQorI2luY2x1ZGUgPG1iZWR0bHMvc2hhMjU2Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9NQkVEVExTKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL3NoYTUxMi5oPgorI2VuZGlmCisKIC8qIE5ldHRsZSBjcnlwdG8gaGVhZGVycyAqLwogI2lmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X05FVFRMRSkKICNpbmNsdWRlIDxuZXR0bGUvbWQ1Lmg+CkBAIC0xNTksNiArMTc2LDggQEAKIHR5cGVkZWYgTUQ1X0NUWCBhcmNoaXZlX21kNV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJTWVNURU0pCiB0eXBlZGVmIENDX01ENV9DVFggYXJjaGl2ZV9tZDVfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykKK3R5cGVkZWYgbWJlZHRsc19tZDVfY29udGV4dCBhcmNoaXZlX21kNV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9ORVRUTEUpCiB0eXBlZGVmIHN0cnVjdCBtZDVfY3R4IGFyY2hpdmVfbWQ1X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X09QRU5TU0wpCkBAIC0xNzMsNiArMTkyLDggQEAKIHR5cGVkZWYgUk1EMTYwX0NUWCBhcmNoaXZlX3JtZDE2MF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9MSUJNRCkKIHR5cGVkZWYgUklQRU1EMTYwX0NUWCBhcmNoaXZlX3JtZDE2MF9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0IGFyY2hpdmVfcm1kMTYwX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHJpcGVtZDE2MF9jdHggYXJjaGl2ZV9ybWQxNjBfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfT1BFTlNTTCkKQEAgLTE4Nyw2ICsyMDgsOCBAQAogdHlwZWRlZiBTSEExX0NUWCBhcmNoaXZlX3NoYTFfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfU0hBMV9DVFggYXJjaGl2ZV9zaGExX2N0eDsKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3NoYTFfY29udGV4dCBhcmNoaXZlX3NoYTFfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHNoYTFfY3R4IGFyY2hpdmVfc2hhMV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfT1BFTlNTTCkKQEAgLTIwNyw2ICsyMzAsOCBAQAogdHlwZWRlZiBTSEEyNTZfQ1RYIGFyY2hpdmVfc2hhMjU2X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfU0hBMjU2X0NUWCBhcmNoaXZlX3NoYTI1Nl9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IGFyY2hpdmVfc2hhMjU2X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHNoYTI1Nl9jdHggYXJjaGl2ZV9zaGEyNTZfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfT1BFTlNTTCkKQEAgLTIyNSw2ICsyNTAsOCBAQAogdHlwZWRlZiBTSEEyX0NUWCBhcmNoaXZlX3NoYTM4NF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJTWVNURU0pCiB0eXBlZGVmIENDX1NIQTUxMl9DVFggYXJjaGl2ZV9zaGEzODRfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTUJFRFRMUykKK3R5cGVkZWYgbWJlZHRsc19zaGE1MTJfY29udGV4dCBhcmNoaXZlX3NoYTM4NF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpCiB0eXBlZGVmIHN0cnVjdCBzaGEzODRfY3R4IGFyY2hpdmVfc2hhMzg0X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X09QRU5TU0wpCkBAIC0yNDUsNiArMjcyLDggQEAKIHR5cGVkZWYgU0hBNTEyX0NUWCBhcmNoaXZlX3NoYTUxMl9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJTWVNURU0pCiB0eXBlZGVmIENDX1NIQTUxMl9DVFggYXJjaGl2ZV9zaGE1MTJfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTUJFRFRMUykKK3R5cGVkZWYgbWJlZHRsc19zaGE1MTJfY29udGV4dCBhcmNoaXZlX3NoYTUxMl9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9ORVRUTEUpCiB0eXBlZGVmIHN0cnVjdCBzaGE1MTJfY3R4IGFyY2hpdmVfc2hhNTEyX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX09QRU5TU0wpCkBAIC0yNTksNiArMjg4LDcgQEAKICNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJDKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTElCTUQpIHx8CVwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTElCU1lTVEVNKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X09QRU5TU0wpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9XSU4pCkBAIC0yNzIsNiArMzAyLDcgQEAKICAgX19hcmNoaXZlX2RpZ2VzdC5tZDV1cGRhdGUoY3R4LCBidWYsIG4pCiAKICNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9MSUJDKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX09QRU5TU0wpCiAjZGVmaW5lIEFSQ0hJVkVfSEFTX1JNRDE2MApAQCAtMjg2LDYgKzMxNyw3IEBACiAjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX0xJQkMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCTUQpIHx8CVwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX0xJQlNZU1RFTSkgfHxcCisgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9PUEVOU1NMKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX1dJTikKQEAgLTMwMyw2ICszMzUsNyBAQAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9MSUJDMykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQk1EKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCU1lTVEVNKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X09QRU5TU0wpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9XSU4pCkBAIC0zMTksNiArMzUyLDcgQEAKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTElCQzIpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJDMykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQlNZU1RFTSkgfHxcCisgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9PUEVOU1NMKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfV0lOKQpAQCAtMzM2LDYgKzM3MCw3IEBACiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQkMzKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTElCTUQpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJTWVNURU0pIHx8XAorICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTkVUVExFKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfT1BFTlNTTCkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX1dJTikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2Rpc2tfYWNsX3N1bm9zLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaXNrX2FjbF9zdW5vcy5jCmluZGV4IGJjODRmZDYuLmIwZjVkZmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2Rpc2tfYWNsX3N1bm9zLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlza19hY2xfc3Vub3MuYwpAQCAtMTQ1LDEwICsxNDUsOCBAQAogCQkJCQljbnQgPSBmYWNsKGZkLCBjbWQsIGNudCwgYWNscCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAoYWNscCAhPSBOVUxMKSB7Ci0JCQkJZnJlZShhY2xwKTsKLQkJCQlhY2xwID0gTlVMTDsKLQkJCX0KKwkJCWZyZWUoYWNscCk7CisJCQlhY2xwID0gTlVMTDsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW5kaWFuLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaAppbmRleCAxYzQ4NTYzLi5lNmQzZjJjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaApAQCAtMjgsMTYgKzI4LDE1IEBACiAgKiBCb3Jyb3dlZCBmcm9tIEZyZWVCU0QncyA8c3lzL2VuZGlhbi5oPgogICovCiAKLSNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECi0jZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KLSNlbmRpZgorI2lmbmRlZiBBUkNISVZFX0VORElBTl9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfRU5ESUFOX0hfSU5DTFVERUQKIAogLyogTm90ZTogIFRoaXMgaXMgYSBwdXJlbHkgaW50ZXJuYWwgaGVhZGVyISAqLwogLyogRG8gbm90IHVzZSB0aGlzIG91dHNpZGUgb2YgbGliYXJjaGl2ZSBpbnRlcm5hbCBjb2RlISAqLwogCi0jaWZuZGVmIEFSQ0hJVkVfRU5ESUFOX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9FTkRJQU5fSF9JTkNMVURFRAotCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKIAogLyoKICAqIERpc2FibGluZyBpbmxpbmUga2V5d29yZCBmb3IgY29tcGlsZXJzIGtub3duIHRvIGNob2tlIG9uIGl0OgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LjMKaW5kZXggZjc1OTE2Yy4uMmY2MmE0YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS4zCkBAIC0zMiw3ICszMiw3IEBACiAuTm0gYXJjaGl2ZV9lbnRyeV9jbGVhciAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9jbG9uZSAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9mcmVlICwKLS5ObSBhcmNoaXZlX2VudHJ5X25ldyAsCisuTm0gYXJjaGl2ZV9lbnRyeV9uZXcKIC5OZCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGFyY2hpdmUgZW50cnkgZGVzY3JpcHRpb25zCiAuU2ggTElCUkFSWQogU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQpAQCAtMTI2LDcgKzEyNiw2IEBACiBTaW1pbGFybHksIGlmIHlvdSBzdG9yZSBhIHdpZGUgc3RyaW5nIGFuZCB0aGVuIHN0b3JlIGEKIG5hcnJvdyBzdHJpbmcgZm9yIHRoZSBzYW1lIGRhdGEsIHRoZSBwcmV2aW91c2x5LXNldCB3aWRlIHN0cmluZyB3aWxsCiBiZSBkaXNjYXJkZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBkYXRhLgotLlBwCiAuXCIgLlNoIEVYQU1QTEUKIC5cIiAuU2ggUkVUVVJOIFZBTFVFUwogLlwiIC5TaCBFUlJPUlMKQEAgLTEzNCw4ICsxMzMsOCBAQAogLlhyIGFyY2hpdmVfZW50cnlfYWNsIDMgLAogLlhyIGFyY2hpdmVfZW50cnlfcGF0aHMgMyAsCiAuWHIgYXJjaGl2ZV9lbnRyeV9wZXJtcyAzICwKLS5YciBhcmNoaXZlX2VudHJ5X3RpbWUgMwotLlhyIGxpYmFyY2hpdmUgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeV90aW1lIDMgLAorLlhyIGxpYmFyY2hpdmUgMwogLlNoIEhJU1RPUlkKIFRoZQogLk5tIGxpYmFyY2hpdmUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5jCmluZGV4IGY3MjJiYmUuLmExNWU5OGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuYwpAQCAtMTY4LDYgKzE2OCw3IEBACiAJYXJjaGl2ZV9lbnRyeV94YXR0cl9jbGVhcihlbnRyeSk7CiAJYXJjaGl2ZV9lbnRyeV9zcGFyc2VfY2xlYXIoZW50cnkpOwogCWZyZWUoZW50cnktPnN0YXQpOworCWVudHJ5LT5hZV9zeW1saW5rX3R5cGUgPSBBRV9TWU1MSU5LX1RZUEVfVU5ERUZJTkVEOwogCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOwogCXJldHVybiBlbnRyeTsKIH0KQEAgLTIwMiw2ICsyMDMsOSBAQAogCWVudHJ5Mi0+YWVfc2V0ID0gZW50cnktPmFlX3NldDsKIAlhcmNoaXZlX21zdHJpbmdfY29weSgmZW50cnkyLT5hZV91bmFtZSwgJmVudHJ5LT5hZV91bmFtZSk7CiAKKwkvKiBDb3B5IHN5bWxpbmsgdHlwZSAqLworCWVudHJ5Mi0+YWVfc3ltbGlua190eXBlID0gZW50cnktPmFlX3N5bWxpbmtfdHlwZTsKKwogCS8qIENvcHkgZW5jcnlwdGlvbiBzdGF0dXMgKi8KIAllbnRyeTItPmVuY3J5cHRpb24gPSBlbnRyeS0+ZW5jcnlwdGlvbjsKIAkKQEAgLTI1Myw2ICsyNTcsNyBAQAogCWlmIChlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCWVudHJ5LT5hcmNoaXZlID0gYTsKKwllbnRyeS0+YWVfc3ltbGlua190eXBlID0gQUVfU1lNTElOS19UWVBFX1VOREVGSU5FRDsKIAlyZXR1cm4gKGVudHJ5KTsKIH0KIApAQCAtNjc1LDYgKzY4MCwxMiBAQAogCXJldHVybiAoTlVMTCk7CiB9CiAKK2ludAorYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQoreworCXJldHVybiAoZW50cnktPmFlX3N5bWxpbmtfdHlwZSk7Cit9CisKIGNvbnN0IGNoYXIgKgogYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3V0Zjgoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQogewpAQCAtMTI0Niw2ICsxMjU3LDEyIEBACiB9CiAKIHZvaWQKK2FyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGludCB0eXBlKQoreworCWVudHJ5LT5hZV9zeW1saW5rX3R5cGUgPSB0eXBlOworfQorCit2b2lkCiBhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3V0Zjgoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5rbmFtZSkKIHsKIAlhcmNoaXZlX21zdHJpbmdfY29weV91dGY4KCZlbnRyeS0+YWVfc3ltbGluaywgbGlua25hbWUpOwpAQCAtMTU2MCwxMCArMTU3Nyw4IEBACiBjb25zdCB3Y2hhcl90ICoKIGFyY2hpdmVfZW50cnlfYWNsX3RleHRfdyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGludCBmbGFncykKIHsKLQlpZiAoZW50cnktPmFjbC5hY2xfdGV4dF93ICE9IE5VTEwpIHsKLQkJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0X3cpOwotCQllbnRyeS0+YWNsLmFjbF90ZXh0X3cgPSBOVUxMOwotCX0KKwlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHRfdyk7CisJZW50cnktPmFjbC5hY2xfdGV4dF93ID0gTlVMTDsKIAlpZiAoYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF9jb21wYXQoJmZsYWdzKSA9PSAwKQogCQllbnRyeS0+YWNsLmFjbF90ZXh0X3cgPSBhcmNoaXZlX2FjbF90b190ZXh0X3coJmVudHJ5LT5hY2wsCiAJCSAgICBOVUxMLCBmbGFncywgZW50cnktPmFyY2hpdmUpOwpAQCAtMTU3NCwxMCArMTU4OSw4IEBACiBjb25zdCBjaGFyICoKIGFyY2hpdmVfZW50cnlfYWNsX3RleHQoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKGVudHJ5LT5hY2wuYWNsX3RleHQgIT0gTlVMTCkgewotCQlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHQpOwotCQllbnRyeS0+YWNsLmFjbF90ZXh0ID0gTlVMTDsKLQl9CisJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0KTsKKwllbnRyeS0+YWNsLmFjbF90ZXh0ID0gTlVMTDsKIAlpZiAoYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF9jb21wYXQoJmZsYWdzKSA9PSAwKQogCQllbnRyeS0+YWNsLmFjbF90ZXh0ID0gYXJjaGl2ZV9hY2xfdG9fdGV4dF9sKCZlbnRyeS0+YWNsLCBOVUxMLAogCQkgICAgZmxhZ3MsIE5VTEwpOwpAQCAtMTU5MCwxMCArMTYwMyw4IEBACiBfYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF9sKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgaW50IGZsYWdzLAogICAgIGNvbnN0IGNoYXIgKiphY2xfdGV4dCwgc2l6ZV90ICpsZW4sIHN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzYykKIHsKLQlpZiAoZW50cnktPmFjbC5hY2xfdGV4dCAhPSBOVUxMKSB7Ci0JCWZyZWUoZW50cnktPmFjbC5hY2xfdGV4dCk7Ci0JCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBOVUxMOwotICAgICAgICB9CisJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0KTsKKwllbnRyeS0+YWNsLmFjbF90ZXh0ID0gTlVMTDsKIAogCWlmIChhcmNoaXZlX2VudHJ5X2FjbF90ZXh0X2NvbXBhdCgmZmxhZ3MpID09IDApCiAJCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBhcmNoaXZlX2FjbF90b190ZXh0X2woJmVudHJ5LT5hY2wsCkBAIC0xNjM4LDE5OCArMTY0OSwyMTUgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKKy8qCisgKiBTdXBwb3J0ZWQgZmlsZSBmbGFncyBvbiBGcmVlQlNEIGFuZCBNYWMgT1M6CisgKiBzYXBwbmQsc2FwcGVuZAkJU0ZfQVBQRU5ECisgKiBhcmNoLGFyY2hpdmVkCQlTRl9BUkNISVZFRAorICogc2NoZyxzY2hhbmdlLHNpbW11dGFibGUJU0ZfSU1NVVRBQkxFCisgKiBzdW5sbmssc3VubGluawkJU0ZfTk9VTkxJTksJKEZyZWVCU0Qgb25seSkKKyAqIHVhcHBuZCx1YXBwZW5kCQlVRl9BUFBFTkQKKyAqIGNvbXByZXNzZWQJCQlVRl9DT01QUkVTU0VECShNYWMgT1Mgb25seSkKKyAqIGhpZGRlbix1aGlkZGVuCQlVRl9ISURERU4KKyAqIHVjaGcsdWNoYW5nZSx1aW1tdXRhYmxlCVVGX0lNTVVUQUJMRQorICogbm9kdW1wCQkJVUZfTk9EVU1QCisgKiB1dW5sbmssdXVubGluawkJVUZfTk9VTkxJTksJKEZyZWVCU0Qgb25seSkKKyAqIG9mZmxpbmUsdW9mZmxpbmUJCVVGX09GRkxJTkUJKEZyZWVCU0Qgb25seSkKKyAqIG9wYXF1ZQkJCVVGX09QQVFVRQorICogcmRvbmx5LHVyZG9ubHkscmVhZG9ubHkJVUZfUkVBRE9OTFkJKEZyZWVCU0Qgb25seSkKKyAqIHJlcGFyc2UsdXJlcGFyc2UJCVVGX1JFUEFSU0UJKEZyZWVCU0Qgb25seSkKKyAqIHNwYXJzZSx1c3BhcnNlCQlVRl9TUEFSU0UJKEZyZWVCU0Qgb25seSkKKyAqIHN5c3RlbSx1c3lzdGVtCQlVRl9TWVNURU0JKEZyZWVCU0Qgb25seSkKKyAqCisgKiBTZWUgY2hmbGFncygyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICoKKyAqIFN1cHBvcnRlZCBmaWxlIGF0dHJpYnV0ZXMgb24gTGludXg6CisgKiBhCWFwcGVuZCBvbmx5CQkJRlNfQVBQRU5EX0ZMCQlzYXBwbmQKKyAqIEEJbm8gYXRpbWUgdXBkYXRlcwkJRlNfTk9BVElNRV9GTAkJYXRpbWUKKyAqIGMJY29tcHJlc3MJCQlGU19DT01QUl9GTAkJY29tcHJlc3MKKyAqIEMJbm8gY29weSBvbiB3cml0ZQkJRlNfTk9DT1dfRkwJCWNvdworICogZAlubyBkdW1wCQkJCUZTX05PRFVNUF9GTAkJZHVtcAorICogRAlzeW5jaHJvbm91cyBkaXJlY3RvcnkgdXBkYXRlcwlGU19ESVJTWU5DX0ZMCQlkaXJzeW5jCisgKiBpCWltbXV0YWJsZQkJCUZTX0lNTVVUQUJMRV9GTAkJc2NoZworICogaglkYXRhIGpvdXJuYWxsaW5nCQlGU19KT1VSTkFMX0RBVEFfRkwJam91cm5hbAorICogUAlwcm9qZWN0IGhpZXJhcmNoeQkJRlNfUFJPSklOSEVSSVRfRkwJcHJvamluaGVyaXQKKyAqIHMJc2VjdXJlIGRlbGV0aW9uCQkJRlNfU0VDUk1fRkwJCXNlY3VyZWRlbGV0aW9uCisgKiBTCXN5bmNocm9ub3VzIHVwZGF0ZXMJCUZTX1NZTkNfRkwJCXN5bmMKKyAqIHQJbm8gdGFpbC1tZXJnaW5nCQkJRlNfTk9UQUlMX0ZMCQl0YWlsCisgKiBUCXRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2h5CUZTX1RPUERJUl9GTAkJdG9wZGlyCisgKiB1CXVuZGVsZXRhYmxlCQkJRlNfVU5STV9GTAkJdW5kZWwKKyAqCisgKiBTZWUgaW9jdGxfaWZsYWdzKDIpIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKgorICogRXF1aXZhbGVudCBmaWxlIGZsYWdzIHN1cHBvcnRlZCBvbiBGcmVlQlNEIC8gTWFjIE9TIGFuZCBMaW51eDoKKyAqIFNGX0FQUEVORAkJRlNfQVBQRU5EX0ZMCQlzYXBwbmQKKyAqIFNGX0lNTVVUQUJMRQkJRlNfSU1NVVRBQkxFX0ZMCQlzY2hnCisgKiBVRl9OT0RVTVAJCUZTX05PRFVNUF9GTAkJbm9kdW1wCisgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFnIHsKIAljb25zdCBjaGFyCSpuYW1lOwogCWNvbnN0IHdjaGFyX3QJKnduYW1lOwogCXVuc2lnbmVkIGxvbmcJIHNldDsKIAl1bnNpZ25lZCBsb25nCSBjbGVhcjsKLX0gZmxhZ3NbXSA9IHsKK30gZmlsZWZsYWdzW10gPSB7CiAJLyogUHJlZmVycmVkIChzaG9ydGVyKSBuYW1lcyBwZXIgZmxhZyBmaXJzdCwgYWxsIHByZWZpeGVkIGJ5ICJubyIgKi8KICNpZmRlZiBTRl9BUFBFTkQKLQl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJU0ZfQVBQRU5ELAkwIH0sCi0JeyAibm9zYXBwZW5kIiwJTCJub3NhcHBlbmQiLAkJU0ZfQVBQRU5ELAkwIH0sCisJeyAibm9zYXBwbmQiLAlMIm5vc2FwcG5kIiwJCVNGX0FQUEVORCwJMH0sCisJeyAibm9zYXBwZW5kIiwJTCJub3NhcHBlbmQiLAkJU0ZfQVBQRU5ELAkwfSwKICNlbmRpZgogI2lmIGRlZmluZWQoRlNfQVBQRU5EX0ZMKQkJCS8qICdhJyAqLwotCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlGU19BUFBFTkRfRkwsCTAgfSwKLQl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlGU19BUFBFTkRfRkwsCTAgfSwKKwl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJRlNfQVBQRU5EX0ZMLAkwfSwKKwl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlGU19BUFBFTkRfRkwsCTB9LAogI2VsaWYgZGVmaW5lZChFWFQyX0FQUEVORF9GTCkJCQkvKiAnYScgKi8KLQl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJRVhUMl9BUFBFTkRfRkwsCTAgfSwKLQl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlFWFQyX0FQUEVORF9GTCwJMCB9LAorCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlFWFQyX0FQUEVORF9GTCwJMH0sCisJeyAibm9zYXBwZW5kIiwJTCJub3NhcHBlbmQiLAkJRVhUMl9BUFBFTkRfRkwsCTB9LAogI2VuZGlmCiAjaWZkZWYgU0ZfQVJDSElWRUQKLQl7ICJub2FyY2giLAlMIm5vYXJjaCIsCQlTRl9BUkNISVZFRCwJMCB9LAotCXsgIm5vYXJjaGl2ZWQiLAlMIm5vYXJjaGl2ZWQiLCAgICAgICAJU0ZfQVJDSElWRUQsCTAgfSwKKwl7ICJub2FyY2giLAlMIm5vYXJjaCIsCQlTRl9BUkNISVZFRCwJMH0sCisJeyAibm9hcmNoaXZlZCIsCUwibm9hcmNoaXZlZCIsICAgICAgIAlTRl9BUkNISVZFRCwJMH0sCiAjZW5kaWYKICNpZmRlZiBTRl9JTU1VVEFCTEUKLQl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlTRl9JTU1VVEFCTEUsCTAgfSwKLQl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlTRl9JTU1VVEFCTEUsCTAgfSwKLQl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCVNGX0lNTVVUQUJMRSwJMCB9LAorCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCVNGX0lNTVVUQUJMRSwJMH0sCisJeyAibm9zY2hhbmdlIiwJTCJub3NjaGFuZ2UiLAkJU0ZfSU1NVVRBQkxFLAkwfSwKKwl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCVNGX0lNTVVUQUJMRSwJMH0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKEZTX0lNTVVUQUJMRV9GTCkJCQkvKiAnaScgKi8KLQl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlGU19JTU1VVEFCTEVfRkwsCTAgfSwKLQl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlGU19JTU1VVEFCTEVfRkwsCTAgfSwKLQl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCUZTX0lNTVVUQUJMRV9GTCwJMCB9LAorCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCUZTX0lNTVVUQUJMRV9GTCwJMH0sCisJeyAibm9zY2hhbmdlIiwJTCJub3NjaGFuZ2UiLAkJRlNfSU1NVVRBQkxFX0ZMLAkwfSwKKwl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCUZTX0lNTVVUQUJMRV9GTCwJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfSU1NVVRBQkxFX0ZMKQkJLyogJ2knICovCi0JeyAibm9zY2hnIiwJTCJub3NjaGciLAkJRVhUMl9JTU1VVEFCTEVfRkwsCTAgfSwKLQl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlFWFQyX0lNTVVUQUJMRV9GTCwJMCB9LAotCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJRVhUMl9JTU1VVEFCTEVfRkwsCTAgfSwKKwl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlFWFQyX0lNTVVUQUJMRV9GTCwJMH0sCisJeyAibm9zY2hhbmdlIiwJTCJub3NjaGFuZ2UiLAkJRVhUMl9JTU1VVEFCTEVfRkwsCTB9LAorCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJRVhUMl9JTU1VVEFCTEVfRkwsCTB9LAogI2VuZGlmCiAjaWZkZWYgU0ZfTk9VTkxJTksKLQl7ICJub3N1bmxuayIsCUwibm9zdW5sbmsiLAkJU0ZfTk9VTkxJTkssCTAgfSwKLQl7ICJub3N1bmxpbmsiLAlMIm5vc3VubGluayIsCQlTRl9OT1VOTElOSywJMCB9LAotI2VuZGlmCi0jaWZkZWYgU0ZfU05BUFNIT1QKLQl7ICJub3NuYXBzaG90IiwJTCJub3NuYXBzaG90IiwJU0ZfU05BUFNIT1QsCTAgfSwKKwl7ICJub3N1bmxuayIsCUwibm9zdW5sbmsiLAkJU0ZfTk9VTkxJTkssCTB9LAorCXsgIm5vc3VubGluayIsCUwibm9zdW5saW5rIiwJCVNGX05PVU5MSU5LLAkwfSwKICNlbmRpZgogI2lmZGVmIFVGX0FQUEVORAotCXsgIm5vdWFwcG5kIiwJTCJub3VhcHBuZCIsCQlVRl9BUFBFTkQsCTAgfSwKLQl7ICJub3VhcHBlbmQiLAlMIm5vdWFwcGVuZCIsCQlVRl9BUFBFTkQsCTAgfSwKKwl7ICJub3VhcHBuZCIsCUwibm91YXBwbmQiLAkJVUZfQVBQRU5ELAkwfSwKKwl7ICJub3VhcHBlbmQiLAlMIm5vdWFwcGVuZCIsCQlVRl9BUFBFTkQsCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfSU1NVVRBQkxFCi0JeyAibm91Y2hnIiwJTCJub3VjaGciLAkJVUZfSU1NVVRBQkxFLAkwIH0sCi0JeyAibm91Y2hhbmdlIiwJTCJub3VjaGFuZ2UiLAkJVUZfSU1NVVRBQkxFLAkwIH0sCi0JeyAibm91aW1tdXRhYmxlIiwJTCJub3VpbW11dGFibGUiLAlVRl9JTU1VVEFCTEUsCTAgfSwKKwl7ICJub3VjaGciLAlMIm5vdWNoZyIsCQlVRl9JTU1VVEFCTEUsCTB9LAorCXsgIm5vdWNoYW5nZSIsCUwibm91Y2hhbmdlIiwJCVVGX0lNTVVUQUJMRSwJMH0sCisJeyAibm91aW1tdXRhYmxlIiwJTCJub3VpbW11dGFibGUiLAlVRl9JTU1VVEFCTEUsCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfTk9EVU1QCiAJeyAibm9kdW1wIiwJTCJub2R1bXAiLAkJMCwJCVVGX05PRFVNUH0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKEZTX05PRFVNUF9GTCkJLyogJ2QnICovCiAJeyAibm9kdW1wIiwJTCJub2R1bXAiLAkJMCwJCUZTX05PRFVNUF9GTH0sCi0jZWxpZiBkZWZpbmVkKEVYVDJfTk9EVU1QX0ZMKSAJLyogJ2QnICovCisjZWxpZiBkZWZpbmVkKEVYVDJfTk9EVU1QX0ZMKQogCXsgIm5vZHVtcCIsCUwibm9kdW1wIiwJCTAsCQlFWFQyX05PRFVNUF9GTH0sCiAjZW5kaWYKICNpZmRlZiBVRl9PUEFRVUUKLQl7ICJub29wYXF1ZSIsCUwibm9vcGFxdWUiLAkJVUZfT1BBUVVFLAkwIH0sCisJeyAibm9vcGFxdWUiLAlMIm5vb3BhcXVlIiwJCVVGX09QQVFVRSwJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9OT1VOTElOSwotCXsgIm5vdXVubG5rIiwJTCJub3V1bmxuayIsCQlVRl9OT1VOTElOSywJMCB9LAotCXsgIm5vdXVubGluayIsCUwibm91dW5saW5rIiwJCVVGX05PVU5MSU5LLAkwIH0sCisJeyAibm91dW5sbmsiLAlMIm5vdXVubG5rIiwJCVVGX05PVU5MSU5LLAkwfSwKKwl7ICJub3V1bmxpbmsiLAlMIm5vdXVubGluayIsCQlVRl9OT1VOTElOSywJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9DT01QUkVTU0VECi0JeyAibm9jb21wcmVzc2VkIixMIm5vY29tcHJlc3NlZCIsCVVGX0NPTVBSRVNTRUQsCTAgfSwKKwkvKiBNYWMgT1MgKi8KKwl7ICJub2NvbXByZXNzZWQiLAlMIm5vY29tcHJlc3NlZCIsCVVGX0NPTVBSRVNTRUQsCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfSElEREVOCi0JeyAibm9oaWRkZW4iLAlMIm5vaGlkZGVuIiwJCVVGX0hJRERFTiwJMCB9LAorCXsgIm5vaGlkZGVuIiwJTCJub2hpZGRlbiIsCQlVRl9ISURERU4sCTB9LAorCXsgIm5vdWhpZGRlbiIsCUwibm91aGlkZGVuIiwJCVVGX0hJRERFTiwJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1VOUk1fRkwpCi0gICAgICAgIHsgIm5vdXVubGluayIsCUwibm91dW5saW5rIiwJCUZTX1VOUk1fRkwsCTB9LAorI2lmZGVmIEZJTEVfQVRUUklCVVRFX0hJRERFTgorCXsgIm5vaGlkZGVuIiwJTCJub2hpZGRlbiIsCUZJTEVfQVRUUklCVVRFX0hJRERFTiwJMH0sCisJeyAibm91aGlkZGVuIiwJTCJub3VoaWRkZW4iLAlGSUxFX0FUVFJJQlVURV9ISURERU4sCTB9LAorI2VuZGlmCisjaWZkZWYgVUZfT0ZGTElORQorCXsgIm5vb2ZmbGluZSIsCUwibm9vZmZsaW5lIiwJCVVGX09GRkxJTkUsCTB9LAorCXsgIm5vdW9mZmxpbmUiLAlMIm5vdW9mZmxpbmUiLAkJVUZfT0ZGTElORSwJMH0sCisjZW5kaWYKKyNpZmRlZiBVRl9SRUFET05MWQorCXsgIm5vcmRvbmx5IiwJTCJub3Jkb25seSIsCQlVRl9SRUFET05MWSwJMH0sCisJeyAibm91cmRvbmx5IiwJTCJub3VyZG9ubHkiLAkJVUZfUkVBRE9OTFksCTB9LAorCXsgIm5vcmVhZG9ubHkiLAlMIm5vcmVhZG9ubHkiLAkJVUZfUkVBRE9OTFksCTB9LAorI2VuZGlmCisjaWZkZWYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkKKwl7ICJub3Jkb25seSIsCUwibm9yZG9ubHkiLAlGSUxFX0FUVFJJQlVURV9SRUFET05MWSwJMH0sCisJeyAibm91cmRvbmx5IiwJTCJub3VyZG9ubHkiLAlGSUxFX0FUVFJJQlVURV9SRUFET05MWSwJMH0sCisJeyAibm9yZWFkb25seSIsCUwibm9yZWFkb25seSIsCUZJTEVfQVRUUklCVVRFX1JFQURPTkxZLAkwfSwKKyNlbmRpZgorI2lmZGVmIFVGX1NQQVJTRQorCXsgIm5vc3BhcnNlIiwJTCJub3NwYXJzZSIsCQlVRl9TUEFSU0UsCTB9LAorCXsgIm5vdXNwYXJzZSIsCUwibm91c3BhcnNlIiwJCVVGX1NQQVJTRSwJMH0sCisjZW5kaWYKKyNpZmRlZiBVRl9SRVBBUlNFCisJeyAibm9yZXBhcnNlIiwJTCJub3JlcGFyc2UiLAkJVUZfUkVQQVJTRSwJMH0sCisJeyAibm91cmVwYXJzZSIsCUwibm91cmVwYXJzZSIsCQlVRl9SRVBBUlNFLAkwfSwKKyNlbmRpZgorI2lmZGVmIFVGX1NZU1RFTQorCXsgIm5vc3lzdGVtIiwJTCJub3N5c3RlbSIsCQlVRl9TWVNURU0sCTB9LAorCXsgIm5vdXN5c3RlbSIsCUwibm91c3lzdGVtIiwJCVVGX1NZU1RFTSwJMH0sCisjZW5kaWYKKyNpZmRlZiBGSUxFX0FUVFJJQlVURV9TWVNURU0KKwl7ICJub3N5c3RlbSIsCUwibm9zeXN0ZW0iLAlGSUxFX0FUVFJJQlVURV9TWVNURU0sCTB9LAorCXsgIm5vdXN5c3RlbSIsCUwibm91c3lzdGVtIiwJRklMRV9BVFRSSUJVVEVfU1lTVEVNLAkwfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoRlNfVU5STV9GTCkJCS8qICd1JyAqLworCXsgIm5vdW5kZWwiLAlMIm5vdW5kZWwiLAkJRlNfVU5STV9GTCwJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfVU5STV9GTCkKLSAgICAgICAgeyAibm91dW5saW5rIiwJTCJub3V1bmxpbmsiLAkJRVhUMl9VTlJNX0ZMLAkwfSwKKwl7ICJub3VuZGVsIiwJTCJub3VuZGVsIiwJCUVYVDJfVU5STV9GTCwJMH0sCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoRlNfQlRSRUVfRkwpCi0gICAgICAgIHsgIm5vYnRyZWUiLAlMIm5vYnRyZWUiLCAgICAgICAJRlNfQlRSRUVfRkwsCTAgfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9CVFJFRV9GTCkKLSAgICAgICAgeyAibm9idHJlZSIsCUwibm9idHJlZSIsICAgICAgIAlFWFQyX0JUUkVFX0ZMLAkwIH0sCisjaWYgZGVmaW5lZChGU19DT01QUl9GTCkJLyogJ2MnICovCisJeyAibm9jb21wcmVzcyIsCUwibm9jb21wcmVzcyIsICAgICAgIAlGU19DT01QUl9GTCwJMH0sCisjZWxpZiBkZWZpbmVkKEVYVDJfQ09NUFJfRkwpCisJeyAibm9jb21wcmVzcyIsCUwibm9jb21wcmVzcyIsICAgICAgIAlFWFQyX0NPTVBSX0ZMLAkwfSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChGU19FQ09NUFJfRkwpCi0gICAgICAgIHsgIm5vY29tcGVyciIsCUwibm9jb21wZXJyIiwgICAgICAgCUZTX0VDT01QUl9GTCwJMCB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0VDT01QUl9GTCkKLSAgICAgICAgeyAibm9jb21wZXJyIiwJTCJub2NvbXBlcnIiLCAgICAgICAJRVhUMl9FQ09NUFJfRkwsCTAgfSwKKyNpZiBkZWZpbmVkKEZTX05PQVRJTUVfRkwpCS8qICdBJyAqLworCXsgIm5vYXRpbWUiLAlMIm5vYXRpbWUiLAkJMCwJCUZTX05PQVRJTUVfRkx9LAorI2VsaWYgZGVmaW5lZChFWFQyX05PQVRJTUVfRkwpCisJeyAibm9hdGltZSIsCUwibm9hdGltZSIsCQkwLAkJRVhUMl9OT0FUSU1FX0ZMfSwKICNlbmRpZgotCi0jaWYgZGVmaW5lZChGU19DT01QUl9GTCkJCQkvKiAnYycgKi8KLSAgICAgICAgeyAibm9jb21wcmVzcyIsCUwibm9jb21wcmVzcyIsICAgICAgIAlGU19DT01QUl9GTCwJMCB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0NPTVBSX0ZMKQkJCS8qICdjJyAqLwotICAgICAgICB7ICJub2NvbXByZXNzIiwJTCJub2NvbXByZXNzIiwgICAgICAgCUVYVDJfQ09NUFJfRkwsCTAgfSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChGU19OT0FUSU1FX0ZMKQkJCS8qICdBJyAqLwotICAgICAgICB7ICJub2F0aW1lIiwJTCJub2F0aW1lIiwJCTAsCQlGU19OT0FUSU1FX0ZMfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9OT0FUSU1FX0ZMKQkJCS8qICdBJyAqLwotICAgICAgICB7ICJub2F0aW1lIiwJTCJub2F0aW1lIiwJCTAsCQlFWFQyX05PQVRJTUVfRkx9LAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEZTX0RJUlRZX0ZMKQotICAgICAgICB7ICJub2NvbXBkaXJ0eSIsTCJub2NvbXBkaXJ0eSIsCQlGU19ESVJUWV9GTCwJCTB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0RJUlRZX0ZMKQotICAgICAgICB7ICJub2NvbXBkaXJ0eSIsTCJub2NvbXBkaXJ0eSIsCQlFWFQyX0RJUlRZX0ZMLAkJMH0sCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoRlNfQ09NUFJCTEtfRkwpCi0jaWYgZGVmaW5lZChGU19OT0NPTVBSX0ZMKQotICAgICAgICB7ICJub2NvbXByYmxrIiwJTCJub2NvbXByYmxrIiwJCUZTX0NPTVBSQkxLX0ZMLCBGU19OT0NPTVBSX0ZMfSwKLSNlbHNlCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRlNfQ09NUFJCTEtfRkwsCTB9LAotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKEVYVDJfQ09NUFJCTEtfRkwpCi0jaWYgZGVmaW5lZChFWFQyX05PQ09NUFJfRkwpCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRVhUMl9DT01QUkJMS19GTCwgRVhUMl9OT0NPTVBSX0ZMfSwKLSNlbHNlCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRVhUMl9DT01QUkJMS19GTCwJMH0sCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoRlNfRElSU1lOQ19GTCkKLSAgICAgICAgeyAibm9kaXJzeW5jIiwJTCJub2RpcnN5bmMiLAkJRlNfRElSU1lOQ19GTCwJMH0sCisjaWYgZGVmaW5lZChGU19ESVJTWU5DX0ZMKQkvKiAnRCcgKi8KKwl7ICJub2RpcnN5bmMiLAlMIm5vZGlyc3luYyIsCQlGU19ESVJTWU5DX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfRElSU1lOQ19GTCkKLSAgICAgICAgeyAibm9kaXJzeW5jIiwJTCJub2RpcnN5bmMiLAkJRVhUMl9ESVJTWU5DX0ZMLAkwfSwKKwl7ICJub2RpcnN5bmMiLAlMIm5vZGlyc3luYyIsCQlFWFQyX0RJUlNZTkNfRkwsCTB9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChGU19JTkRFWF9GTCkKLSAgICAgICAgeyAibm9oYXNoaWR4IiwJTCJub2hhc2hpZHgiLAkJRlNfSU5ERVhfRkwsCQkwfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9JTkRFWF9GTCkKLSAgICAgICAgeyAibm9oYXNoaWR4IiwJTCJub2hhc2hpZHgiLAkJRVhUMl9JTkRFWF9GTCwJCTB9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19JTUFHSUNfRkwpCi0gICAgICAgIHsgIm5vaW1hZ2ljIiwJTCJub2ltYWdpYyIsCQlGU19JTUFHSUNfRkwsCQkwfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9JTUFHSUNfRkwpCi0gICAgICAgIHsgIm5vaW1hZ2ljIiwJTCJub2ltYWdpYyIsCQlFWFQyX0lNQUdJQ19GTCwJCTB9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19KT1VSTkFMX0RBVEFfRkwpCi0gICAgICAgIHsgIm5vam91cm5hbCIsCUwibm9qb3VybmFsIiwJCUZTX0pPVVJOQUxfREFUQV9GTCwJMH0sCisjaWYgZGVmaW5lZChGU19KT1VSTkFMX0RBVEFfRkwpCS8qICdqJyAqLworCXsgIm5vam91cm5hbC1kYXRhIixMIm5vam91cm5hbC1kYXRhIiwJRlNfSk9VUk5BTF9EQVRBX0ZMLAkwfSwKKwl7ICJub2pvdXJuYWwiLAlMIm5vam91cm5hbCIsCQlGU19KT1VSTkFMX0RBVEFfRkwsCTB9LAogI2VsaWYgZGVmaW5lZChFWFQzX0pPVVJOQUxfREFUQV9GTCkKLSAgICAgICAgeyAibm9qb3VybmFsIiwJTCJub2pvdXJuYWwiLAkJRVhUM19KT1VSTkFMX0RBVEFfRkwsCTB9LAorCXsgIm5vam91cm5hbC1kYXRhIixMIm5vam91cm5hbC1kYXRhIiwJRVhUM19KT1VSTkFMX0RBVEFfRkwsCTB9LAorCXsgIm5vam91cm5hbCIsCUwibm9qb3VybmFsIiwJCUVYVDNfSk9VUk5BTF9EQVRBX0ZMLAkwfSwKICNlbmRpZgotI2lmIGRlZmluZWQoRlNfU0VDUk1fRkwpCi0gICAgICAgIHsgIm5vc2VjdXJlZGVsZXRpb24iLEwibm9zZWN1cmVkZWxldGlvbiIsRlNfU0VDUk1fRkwsCQkwfSwKKyNpZiBkZWZpbmVkKEZTX1NFQ1JNX0ZMKQkvKiAncycgKi8KKwl7ICJub3NlY2RlbCIsCUwibm9zZWNkZWwiLAkJRlNfU0VDUk1fRkwsCQkwfSwKKwl7ICJub3NlY3VyZWRlbGV0aW9uIixMIm5vc2VjdXJlZGVsZXRpb24iLEZTX1NFQ1JNX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfU0VDUk1fRkwpCi0gICAgICAgIHsgIm5vc2VjdXJlZGVsZXRpb24iLEwibm9zZWN1cmVkZWxldGlvbiIsRVhUMl9TRUNSTV9GTCwJCTB9LAorCXsgIm5vc2VjZGVsIiwJTCJub3NlY2RlbCIsCQlFWFQyX1NFQ1JNX0ZMLAkJMH0sCisJeyAibm9zZWN1cmVkZWxldGlvbiIsTCJub3NlY3VyZWRlbGV0aW9uIixFWFQyX1NFQ1JNX0ZMLAkJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1NZTkNfRkwpCi0gICAgICAgIHsgIm5vc3luYyIsCUwibm9zeW5jIiwJCUZTX1NZTkNfRkwsCQkwfSwKKyNpZiBkZWZpbmVkKEZTX1NZTkNfRkwpCQkvKiAnUycgKi8KKwl7ICJub3N5bmMiLAlMIm5vc3luYyIsCQlGU19TWU5DX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfU1lOQ19GTCkKLSAgICAgICAgeyAibm9zeW5jIiwJTCJub3N5bmMiLAkJRVhUMl9TWU5DX0ZMLAkJMH0sCisJeyAibm9zeW5jIiwJTCJub3N5bmMiLAkJRVhUMl9TWU5DX0ZMLAkJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX05PVEFJTF9GTCkKLSAgICAgICAgeyAibm90YWlsIiwJTCJub3RhaWwiLAkJMCwJCUZTX05PVEFJTF9GTH0sCisjaWYgZGVmaW5lZChGU19OT1RBSUxfRkwpCS8qICd0JyAqLworCXsgIm5vdGFpbCIsCUwibm90YWlsIiwJCTAsCQlGU19OT1RBSUxfRkx9LAogI2VsaWYgZGVmaW5lZChFWFQyX05PVEFJTF9GTCkKLSAgICAgICAgeyAibm90YWlsIiwJTCJub3RhaWwiLAkJMCwJCUVYVDJfTk9UQUlMX0ZMfSwKKwl7ICJub3RhaWwiLAlMIm5vdGFpbCIsCQkwLAkJRVhUMl9OT1RBSUxfRkx9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChGU19UT1BESVJfRkwpCi0gICAgICAgIHsgIm5vdG9wZGlyIiwJTCJub3RvcGRpciIsCQlGU19UT1BESVJfRkwsCQkwfSwKKyNpZiBkZWZpbmVkKEZTX1RPUERJUl9GTCkJLyogJ1QnICovCisJeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUZTX1RPUERJUl9GTCwJCTB9LAogI2VsaWYgZGVmaW5lZChFWFQyX1RPUERJUl9GTCkKLSAgICAgICAgeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUVYVDJfVE9QRElSX0ZMLAkJMH0sCisJeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUVYVDJfVE9QRElSX0ZMLAkJMH0sCiAjZW5kaWYKLSNpZmRlZiBGU19FTkNSWVBUX0ZMCi0gICAgICAgIHsgIm5vZW5jcnlwdCIsCUwibm9lbmNyeXB0IiwJCUZTX0VOQ1JZUFRfRkwsCTB9LAorI2lmZGVmIEZTX05PQ09XX0ZMCS8qICdDJyAqLworCXsgIm5vY293IiwJTCJub2NvdyIsCQkwLAlGU19OT0NPV19GTH0sCiAjZW5kaWYKLSNpZmRlZiBGU19IVUdFX0ZJTEVfRkwKLSAgICAgICAgeyAibm9odWdlZmlsZSIsCUwibm9odWdlZmlsZSIsCQlGU19IVUdFX0ZJTEVfRkwsCTB9LAorI2lmZGVmIEZTX1BST0pJTkhFUklUX0ZMCS8qICdQJyAqLworCXsgIm5vcHJvamluaGVyaXQiLEwibm9wcm9qaW5oZXJpdCIsCUZTX1BST0pJTkhFUklUX0ZMLAkwfSwKICNlbmRpZgotI2lmZGVmIEZTX0VYVEVOVF9GTAotICAgICAgICB7ICJub2V4dGVudCIsCUwibm9leHRlbnQiLAkJRlNfRVhURU5UX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX0VBX0lOT0RFX0ZMCi0gICAgICAgIHsgIm5vZWFpbm9kZSIsCUwibm9lYWlub2RlIiwJCUZTX0VBX0lOT0RFX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX0VPRkJMT0NLU19GTAotICAgICAgICB7ICJub2VvZmJsb2NrcyIsTCJub2VvZmJsb2NrcyIsCQlGU19FT0ZCTE9DS1NfRkwsCTB9LAotI2VuZGlmCi0jaWZkZWYgRlNfTk9DT1dfRkwKLSAgICAgICAgeyAibm9jb3ciLAlMIm5vY293IiwJCUZTX05PQ09XX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX0lOTElORV9EQVRBX0ZMCi0gICAgICAgIHsgIm5vaW5saW5lZGF0YSIsTCJub2lubGluZWRhdGEiLAlGU19JTkxJTkVfREFUQV9GTCwJMH0sCi0jZW5kaWYKLSNpZmRlZiBGU19QUk9KSU5IRVJJVF9GTAotICAgICAgICB7ICJub3Byb2ppbmhlcml0IixMIm5vcHJvamluaGVyaXQiLAlGU19QUk9KSU5IRVJJVF9GTCwJMH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1JFU0VSVkVEX0ZMKQotICAgICAgICB7ICJub3Jlc2VydmVkIiwJTCJub3Jlc2VydmVkIiwJCUZTX1JFU0VSVkVEX0ZMLAkwfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9SRVNFUlZFRF9GTCkKLSAgICAgICAgeyAibm9yZXNlcnZlZCIsCUwibm9yZXNlcnZlZCIsCQlFWFQyX1JFU0VSVkVEX0ZMLAkwfSwKLSNlbmRpZgotCXsgTlVMTCwJCU5VTEwsCQkJMCwJCTAgfQorCXsgTlVMTCwJCU5VTEwsCQkJMCwJCTB9CiB9OwogCiAvKgpAQCAtMTg0OCw3ICsxODc2LDcgQEAKIAogCWJpdHMgPSBiaXRzZXQgfCBiaXRjbGVhcjsKIAlsZW5ndGggPSAwOwotCWZvciAoZmxhZyA9IGZsYWdzOyBmbGFnLT5uYW1lICE9IE5VTEw7IGZsYWcrKykKKwlmb3IgKGZsYWcgPSBmaWxlZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKQogCQlpZiAoYml0cyAmIChmbGFnLT5zZXQgfCBmbGFnLT5jbGVhcikpIHsKIAkJCWxlbmd0aCArPSBzdHJsZW4oZmxhZy0+bmFtZSkgKyAxOwogCQkJYml0cyAmPSB+KGZsYWctPnNldCB8IGZsYWctPmNsZWFyKTsKQEAgLTE4NjEsNyArMTg4OSw3IEBACiAJCXJldHVybiAoTlVMTCk7CiAKIAlkcCA9IHN0cmluZzsKLQlmb3IgKGZsYWcgPSBmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspIHsKKwlmb3IgKGZsYWcgPSBmaWxlZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKSB7CiAJCWlmIChiaXRzZXQgJiBmbGFnLT5zZXQgfHwgYml0Y2xlYXIgJiBmbGFnLT5jbGVhcikgewogCQkJc3AgPSBmbGFnLT5uYW1lICsgMjsKIAkJfSBlbHNlIGlmIChiaXRzZXQgJiBmbGFnLT5jbGVhciAgfHwgIGJpdGNsZWFyICYgZmxhZy0+c2V0KSB7CkBAIC0xOTEzLDcgKzE5NDEsNyBAQAogCQkgICAgKmVuZCAhPSAnICcgICYmICAqZW5kICE9ICcsJykKIAkJCWVuZCsrOwogCQlsZW5ndGggPSBlbmQgLSBzdGFydDsKLQkJZm9yIChmbGFnID0gZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKSB7CisJCWZvciAoZmxhZyA9IGZpbGVmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspIHsKIAkJCXNpemVfdCBmbGFnX2xlbmd0aCA9IHN0cmxlbihmbGFnLT5uYW1lKTsKIAkJCWlmIChsZW5ndGggPT0gZmxhZ19sZW5ndGgKIAkJCSAgICAmJiBtZW1jbXAoc3RhcnQsIGZsYWctPm5hbWUsIGxlbmd0aCkgPT0gMCkgewpAQCAtMTk4MSw3ICsyMDA5LDcgQEAKIAkJICAgICplbmQgIT0gTCcgJyAgJiYgICplbmQgIT0gTCcsJykKIAkJCWVuZCsrOwogCQlsZW5ndGggPSBlbmQgLSBzdGFydDsKLQkJZm9yIChmbGFnID0gZmxhZ3M7IGZsYWctPnduYW1lICE9IE5VTEw7IGZsYWcrKykgeworCQlmb3IgKGZsYWcgPSBmaWxlZmxhZ3M7IGZsYWctPnduYW1lICE9IE5VTEw7IGZsYWcrKykgewogCQkJc2l6ZV90IGZsYWdfbGVuZ3RoID0gd2NzbGVuKGZsYWctPnduYW1lKTsKIAkJCWlmIChsZW5ndGggPT0gZmxhZ19sZW5ndGgKIAkJCSAgICAmJiB3bWVtY21wKHN0YXJ0LCBmbGFnLT53bmFtZSwgbGVuZ3RoKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuaAppbmRleCBhOTEzNGY2Li4wMDUzZmFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmgKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUJQVJDSElWRV9FTlRSWV9IX0lOQ0xVREVECiAKIC8qIE5vdGU6IENvbXBpbGVyIHdpbGwgY29tcGxhaW4gaWYgdGhpcyBkb2VzIG5vdCBtYXRjaCBhcmNoaXZlLmghICovCi0jZGVmaW5lCUFSQ0hJVkVfVkVSU0lPTl9OVU1CRVIgMzAwMzAwMworI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fTlVNQkVSIDMwMDQwMDIKIAogLyoKICAqIE5vdGU6IGFyY2hpdmVfZW50cnkuaCBpcyBmb3IgdXNlIG91dHNpZGUgb2YgbGliYXJjaGl2ZTsgdGhlCkBAIC0xODgsNiArMTg4LDEzIEBACiAjZGVmaW5lIEFFX0lGSUZPCSgoX19MQV9NT0RFX1QpMDAxMDAwMCkKIAogLyoKKyAqIFN5bWxpbmsgdHlwZXMKKyAqLworI2RlZmluZSBBRV9TWU1MSU5LX1RZUEVfVU5ERUZJTkVECTAKKyNkZWZpbmUgQUVfU1lNTElOS19UWVBFX0ZJTEUJCTEKKyNkZWZpbmUgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWQkyCisKKy8qCiAgKiBCYXNpYyBvYmplY3QgbWFuaXB1bGF0aW9uCiAgKi8KIApAQCAtMjcyLDYgKzI3OSw3IEBACiBfX0xBX0RFQ0wgY29uc3QgY2hhcgkqYXJjaGl2ZV9lbnRyeV9zdHJtb2RlKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogX19MQV9ERUNMIGNvbnN0IGNoYXIJKmFyY2hpdmVfZW50cnlfc3ltbGluayhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBjb25zdCBjaGFyCSphcmNoaXZlX2VudHJ5X3N5bWxpbmtfdXRmOChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKK19fTEFfREVDTCBpbnQJCSBhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZShzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBjb25zdCB3Y2hhcl90CSphcmNoaXZlX2VudHJ5X3N5bWxpbmtfdyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBsYV9pbnQ2NF90CSBhcmNoaXZlX2VudHJ5X3VpZChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBjb25zdCBjaGFyCSphcmNoaXZlX2VudHJ5X3VuYW1lKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwpAQCAtMzQ3LDYgKzM1NSw3IEBACiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X2NvcHlfc291cmNlcGF0aChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCBjaGFyICopOwogX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9jb3B5X3NvdXJjZXBhdGhfdyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCB3Y2hhcl90ICopOwogX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGluayhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCBjaGFyICopOworX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGludCk7CiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3V0Zjgoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgY29uc3QgY2hhciAqKTsKIF9fTEFfREVDTCB2b2lkCWFyY2hpdmVfZW50cnlfY29weV9zeW1saW5rKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IGNoYXIgKik7CiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X2NvcHlfc3ltbGlua193KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IHdjaGFyX3QgKik7CkBAIC01MTIsOSArNTIxLDYgQEAKIF9fTEFfREVDTCBpbnQJIGFyY2hpdmVfZW50cnlfYWNsX25leHQoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgaW50IC8qIHdhbnRfdHlwZSAqLywKIAkgICAgaW50ICogLyogdHlwZSAqLywgaW50ICogLyogcGVybXNldCAqLywgaW50ICogLyogdGFnICovLAogCSAgICBpbnQgKiAvKiBxdWFsICovLCBjb25zdCBjaGFyICoqIC8qIG5hbWUgKi8pOwotX19MQV9ERUNMIGludAkgYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dF93KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGludCAvKiB3YW50X3R5cGUgKi8sCi0JICAgIGludCAqIC8qIHR5cGUgKi8sIGludCAqIC8qIHBlcm1zZXQgKi8sIGludCAqIC8qIHRhZyAqLywKLQkgICAgaW50ICogLyogcXVhbCAqLywgY29uc3Qgd2NoYXJfdCAqKiAvKiBuYW1lICovKTsKIAogLyoKICAqIENvbnN0cnVjdCBhIHRleHQtZm9ybWF0IEFDTC4gIFRoZSBmbGFncyBhcmd1bWVudCBpcyBhIGJpdG1hc2sgdGhhdApAQCAtNjg5LDcgKzY5NSw2IEBACiAgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKiosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICoqKTsKIF9fTEFfREVDTCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYXJjaGl2ZV9lbnRyeV9wYXJ0aWFsX2xpbmtzKAogICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5X2xpbmtyZXNvbHZlciAqcmVzLCB1bnNpZ25lZCBpbnQgKmxpbmtzKTsKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X2FjbC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMKaW5kZXggNTM0ZGJmYS4uNTBkZDY0MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMKQEAgLTM0LDcgKzM0LDYgQEAKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF9mcm9tX3RleHQgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX2Zyb21fdGV4dF93ICwKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0ICwKLS5ObSBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX3Jlc2V0ICwKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0ICwKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0X3cgLApAQCAtODksMTYgKzg4LDYgQEAKIC5GYSAiY29uc3QgY2hhciAqKnJldF9uYW1lIgogLkZjCiAuRnQgaW50Ci0uRm8gYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dF93Ci0uRmEgInN0cnVjdCBhcmNoaXZlX2VudHJ5ICphIgotLkZhICJpbnQgdHlwZSIKLS5GYSAiaW50ICpyZXRfdHlwZSIKLS5GYSAiaW50ICpyZXRfcGVybXNldCIKLS5GYSAiaW50ICpyZXRfdGFnIgotLkZhICJpbnQgKnJldF9xdWFsIgotLkZhICJjb25zdCB3Y2hhcl90ICoqcmV0X25hbWUiCi0uRmMKLS5GdCBpbnQKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9yZXNldCAic3RydWN0IGFyY2hpdmVfZW50cnkgKmEiICJpbnQgdHlwZSIKIC5GdCBjaGFyICoKIC5GbyBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0CkBAIC0xMTgsMTUgKzEwNywxNiBAQAogLlNoIERFU0NSSVBUSU9OCiBUaGUKIC5EcSBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykKLWV4dGVuZCB0aGUgc3RhbmRhcmQgVW5peCBwZXJzc2lvbiBtb2RlbC4KK2V4dGVuZCB0aGUgc3RhbmRhcmQgVW5peCBwZXJtaXNzaW9uIG1vZGVsLgogVGhlIEFDTCBpbnRlcmZhY2Ugb2YKIC5ObSBsaWJhcmNoaXZlCi1zdXBwb3J0cyBib3RoIFBPU0lYLjFlIGFuZCBORlN2NCBzdHlsZSBBQ0xzLiBVc2Ugb2YgQUNMcyBpcyByZXN0cmljdGVkIGJ5CitzdXBwb3J0cyBib3RoIFBPU0lYLjFlIGFuZCBORlN2NCBzdHlsZSBBQ0xzLgorVXNlIG9mIEFDTHMgaXMgcmVzdHJpY3RlZCBieQogdmFyaW91cyBsZXZlbHMgb2YgQUNMIHN1cHBvcnQgaW4gb3BlcmF0aW5nIHN5c3RlbXMsIGZpbGUgc3lzdGVtcyBhbmQgYXJjaGl2ZQogZm9ybWF0cy4KIC5TcyBQT1NJWC4xZSBBY2Nlc3MgQ29udHJvbCBMaXN0cwogQSBQT1NJWC4xZSBBQ0wgY29uc2lzdHMgb2YgYSBudW1iZXIgb2YgaW5kZXBlbmRlbnQgZW50cmllcy4KLUVhY2ggZW50cnkgc3BlY2lmaWVzIHRoZSBwZXJtaXNzaW9uIHNldCBhcyBiaXRtYXNrIG9mIGJhc2ljIHBlcm1pc3Npb25zLgorRWFjaCBlbnRyeSBzcGVjaWZpZXMgdGhlIHBlcm1pc3Npb24gc2V0IGFzIGEgYml0bWFzayBvZiBiYXNpYyBwZXJtaXNzaW9ucy4KIFZhbGlkIHBlcm1pc3Npb25zIGluIHRoZQogLkZhIHBlcm1zZXQKIGFyZToKQEAgLTE0NywxMyArMTM3LDEzIEBACiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfVVNFUl9PQkoKIFRoZSBvd25lciBvZiB0aGUgZmlsZS4KIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9HUk9VUAotVGhlIGdyb3VwIHNwZWNpZWQgYnkgdGhlIG5hbWUgZmllbGQuCitUaGUgZ3JvdXAgc3BlY2lmaWVkIGJ5IHRoZSBuYW1lIGZpZWxkLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0dST1VQX09CSgotVGhlIGdyb3VwIHdobyBvd25zIHRoZSBmaWxlLgorVGhlIGdyb3VwIHdoaWNoIG93bnMgdGhlIGZpbGUuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfTUFTSwogVGhlIG1heGltdW0gcGVybWlzc2lvbnMgdG8gYmUgb2J0YWluZWQgdmlhIGdyb3VwIHBlcm1pc3Npb25zLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX09USEVSCi1BbnkgcHJpbmNpcGFsIHdobyBpcyBub3QgZmlsZSBvd25lciBvciBhIG1lbWJlciBvZiB0aGUgb3duaW5nIGdyb3VwLgorQW55IHByaW5jaXBhbCB3aG8gaXMgbm90IHRoZSBmaWxlIG93bmVyIG9yIGEgbWVtYmVyIG9mIHRoZSBvd25pbmcgZ3JvdXAuCiAuRWwKIC5QcAogVGhlIHByaW5jaXBhbHMKQEAgLTE2NCwxMiArMTU0LDEyIEBACiBhcmUgZXF1aXZhbGVudCB0byB1c2VyLCBncm91cCBhbmQgb3RoZXIgaW4gdGhlIGNsYXNzaWMgVW5peCBwZXJtaXNzaW9uCiBtb2RlbCBhbmQgc3BlY2lmeSBub24tZXh0ZW5kZWQgQUNMIGVudHJpZXMuCiAuUHAKLUFsbCBmaWxlcyB3aXRoIGhhdmUgYW4gYWNjZXNzIEFDTAorQWxsIGZpbGVzIGhhdmUgYW4gYWNjZXNzIEFDTAogLlBxIER2IEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTIC4KIFRoaXMgc3BlY2lmaWVzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgYWNjZXNzIHRvIHRoZSBmaWxlIGl0c2VsZi4KIERpcmVjdG9yaWVzIGhhdmUgYW4gYWRkaXRpb25hbCBBQ0wKIC5QcSBEdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQgLAotd2hpY2ggY29udHJvbHMgdGhlIGluaXRpYWwgYWNjZXNzIEFDTCBmb3IgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnkgZW50cmllcy4KK3doaWNoIGNvbnRyb2xzIHRoZSBpbml0aWFsIGFjY2VzcyBBQ0wgZm9yIG5ld2x5LWNyZWF0ZWQgZGlyZWN0b3J5IGVudHJpZXMuCiAuU3MgTkZTdjQgQWNjZXNzIENvbnRyb2wgTGlzdHMKIEEgTkZTdjQgQUNMIGNvbnNpc3RzIG9mIG11bHRpcGxlIGluZGl2aWR1YWwgZW50cmllcyBjYWxsZWQgQWNjZXNzIENvbnRyb2wKIEVudHJpZXMgKEFDRXMpLgpAQCAtMTk3LDExICsxODcsMTEgQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9VU0VSX09CSgogVGhlIG93bmVyIG9mIHRoZSBmaWxlLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0dST1VQCi1UaGUgZ3JvdXAgc3BlY2llZCBieSB0aGUgbmFtZSBmaWVsZC4KK1RoZSBncm91cCBzcGVjaWZpZWQgYnkgdGhlIG5hbWUgZmllbGQuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfR1JPVVBfT0JKCi1UaGUgZ3JvdXAgd2hvIG93bnMgdGhlIGZpbGUuCitUaGUgZ3JvdXAgd2hpY2ggb3ducyB0aGUgZmlsZS4KIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9FVkVSWU9ORQotQW55IHByaW5jaXBhbCB3aG8gaXMgbm90IGZpbGUgb3duZXIgb3IgYSBtZW1iZXIgb2YgdGhlIG93bmluZyBncm91cC4KK0FueSBwcmluY2lwYWwgd2hvIGlzIG5vdCB0aGUgZmlsZSBvd25lciBvciBhIG1lbWJlciBvZiB0aGUgb3duaW5nIGdyb3VwLgogLkVsCiAuUHAKIEVudHJpZXMgd2l0aCB0aGUKQEAgLTIxNiw5ICsyMDYsMTAgQEAKIC5QcAogTkZTdjQgQUNFIHBlcm1pc3Npb25zIGFuZCBmbGFncyBhcmUgc3RvcmVkIGluIHRoZSBzYW1lCiAuRmEgcGVybXNldAotYml0ZmllbGQuIFNvbWUgcGVybWlzc2lvbnMgc2hhcmUgdGhlIHNhbWUgY29uc3RhbnQgYW5kIHBlcm1pc3Npb24gY2hhcmFjdGVyIGJ1dAotaGF2ZSBkaWZmZXJlbnQgZWZmZWN0IG9uIGRpcmVjdG9yaWVzIHRoYW4gb24gZmlsZXMuIFRoZSBmb2xsb3dpbmcgQUNFCi1wZXJtaXNzaW9ucyBhcmUgc3VwcG9ydGVkOgorYml0ZmllbGQuCitTb21lIHBlcm1pc3Npb25zIHNoYXJlIHRoZSBzYW1lIGNvbnN0YW50IGFuZCBwZXJtaXNzaW9uIGNoYXJhY3RlcgorYnV0IGhhdmUgZGlmZmVyZW50IGVmZmVjdCBvbiBkaXJlY3RvcmllcyB0aGFuIG9uIGZpbGVzLgorVGhlIGZvbGxvd2luZyBBQ0UgcGVybWlzc2lvbnMgYXJlIHN1cHBvcnRlZDoKIC5CbCAtdGFnIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0IC13aWR0aCBBUkNISVYKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9SRUFEX0RBVEEgKCBTeSByICkKIFJlYWQgZGF0YSAoZmlsZSkuCkBAIC0yNjUsNyArMjU2LDggQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9FTlRSWV9JTkhFUklUX09OTFkgKCBTeSBpICkKIE9ubHkgaW5oZXJpdCwgZG8gbm90IGFwcGx5IHRoZSBwZXJtaXNzaW9uIG9uIHRoZSBkaXJlY3RvcnkgaXRzZWxmLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX05PX1BST1BBR0FURV9JTkhFUklUICggU3kgbiApCi1EbyBub3QgcHJvcGFnYXRlIGluaGVyaXQgZmxhZ3MuIE9ubHkgZmlyc3QtbGV2ZWwgZW50cmllcyBpbmhlcml0IEFDTHMuCitEbyBub3QgcHJvcGFnYXRlIGluaGVyaXQgZmxhZ3MuCitPbmx5IGZpcnN0LWxldmVsIGVudHJpZXMgaW5oZXJpdCBBQ0xzLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX1NVQ0NFU1NGVUxfQUNDRVNTICggU3kgUyApCiBUcmlnZ2VyIGFsYXJtIG9yIGF1ZGl0IG9uIHN1Y2Nlc3NmdWwgYWNjZXNzLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX0ZBSUxFRF9BQ0NFU1MgKCBTeSBGICkKQEAgLTI3OSw4ICsyNzEsOCBAQAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX2FkZF9lbnRyeV93CiBhZGQgYSBzaW5nbGUgQUNMIGVudHJ5LgogRm9yIHRoZSBhY2Nlc3MgQUNMIGFuZCBub24tZXh0ZW5kZWQgcHJpbmNpcGFscywgdGhlIGNsYXNzaWMgVW5peCBwZXJtaXNzaW9ucwotYXJlIHVwZGF0ZWQuIEFuIGFyY2hpdmUgZW50cnkgY2Fubm90IGNvbnRhaW4gYm90aCBQT1NJWC4xZSBhbmQgTkZTdjQgQUNMCi1lbnRyaWVzLgorYXJlIHVwZGF0ZWQuCitBbiBhcmNoaXZlIGVudHJ5IGNhbm5vdCBjb250YWluIGJvdGggUE9TSVguMWUgYW5kIE5GU3Y0IEFDTCBlbnRyaWVzLgogLlBwCiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfY2xlYXIKIHJlbW92ZXMgYWxsIEFDTCBlbnRyaWVzIGFuZCByZXNldHMgdGhlIGVudW1lcmF0aW9uIHBvaW50ZXIuCkBAIC0zMDAsNyArMjkyLDggQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0FVRElUCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9BTEFSTQogLkVsCi1mb3IgTkZTdjQgQUNMcy4gRm9yIFBPU0lYLjFlIEFDTHMgaWYKK2ZvciBORlN2NCBBQ0xzLgorRm9yIFBPU0lYLjFlIEFDTHMgaWYKIC5EdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0FDQ0VTUwogaXMgaW5jbHVkZWQgYW5kIGF0IGxlYXN0IG9uZSBleHRlbmRlZCBBQ0wgZW50cnkgaXMgZm91bmQsCiB0aGUgdGhyZWUgbm9uLWV4dGVuZGVkIEFDTHMgYXJlIGFkZGVkLgpAQCAtMzEyLDcgKzMwNSw4IEBACiAuUHEgb3IgbWVyZ2Ugd2l0aCBleGlzdGluZwogQUNMIGVudHJpZXMgZnJvbQogLlBxIHdpZGUKLXRleHQuIFRoZSBhcmd1bWVudAordGV4dC4KK1RoZSBhcmd1bWVudAogLkZhIHR5cGUKIG1heSB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKIC5CbCAtdGFnIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0IC13aWR0aCAiQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9ERUZBVUxUIgpAQCAtMzIyLDExICszMTYsMTMgQEAKIC5FbAogU3VwcG9ydHMgYWxsIGZvcm1hdHMgdGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoCiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfdG9fdGV4dAotb3IgcmVzcGVjdGl2ZQorb3IgcmVzcGVjdGl2ZWx5CiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfdG9fdGV4dF93IC4KLUV4aXN0aW5nIEFDTCBlbnRyaWVzIGFyZSBwcmVzZXJ2ZWQuIFRvIGdldCBhIGNsZWFuIG5ldyBBQ0wgZnJvbSB0ZXh0CitFeGlzdGluZyBBQ0wgZW50cmllcyBhcmUgcHJlc2VydmVkLgorVG8gZ2V0IGEgY2xlYW4gbmV3IEFDTCBmcm9tIHRleHQKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9jbGVhcgotbXVzdCBiZSBjYWxsZWQgZmlyc3QuIEVudHJpZXMgcHJlZml4ZWQgd2l0aAorbXVzdCBiZSBjYWxsZWQgZmlyc3QuCitFbnRyaWVzIHByZWZpeGVkIHdpdGgKIC5EcSBkZWZhdWx0OgogYXJlIHRyZWF0ZWQgYXMKIC5EdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQKQEAgLTM0Miw4ICszMzgsNiBAQAogYXJlIHNraXBwZWQuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0Ci1hbmQKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cKIHJldHVybiB0aGUgbmV4dCBlbnRyeSBvZiB0aGUgQUNMIGxpc3QuCiBUaGlzIGZ1bmN0aW9ucyBtYXkgb25seSBiZSBjYWxsZWQgYWZ0ZXIKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9yZXNldApAQCAtMzUxLDEwICszNDUsOCBAQAogLlBwCiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfcmVzZXQKIHByZXBhcmUgcmVhZGluZyB0aGUgbGlzdCBvZiBBQ0wgZW50cmllcyB3aXRoCi0uRm4gYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dAotb3IKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cgLgotVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIDAsIGlmIG5vIG5vbi1leHRlbmRlZCBBQ0xzIGFyZSBmb3VuZC4KKy5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0IC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDAgaWYgbm8gbm9uLWV4dGVuZGVkIEFDTHMgYXJlIGZvdW5kLgogSW4gdGhpcyBjYXNlLCB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIHNob3VsZCBiZSBvYnRhaW5lZCBieQogLlhyIGFyY2hpdmVfZW50cnlfbW9kZSAzCiBvciBzZXQgdXNpbmcKQEAgLTM2Nyw3ICszNTksOCBAQAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX3RvX3RleHRfdwogY29udmVydCB0aGUgQUNMIGVudHJpZXMgZm9yIHRoZSBnaXZlbiB0eXBlIGludG8gYQogLlBxIHdpZGUKLXN0cmluZyBvZiBBQ0wgZW50cmllcyBzZXBhcmF0ZWQgYnkgbmV3bGluZS4gSWYgdGhlIHBvaW50ZXIKK3N0cmluZyBvZiBBQ0wgZW50cmllcyBzZXBhcmF0ZWQgYnkgbmV3bGluZS4KK0lmIHRoZSBwb2ludGVyCiAuRmEgbGVuX3AKIGlzIG5vdCBOVUxMLCB0aGVuIHRoZSBmdW5jdGlvbiBzaGFsbCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nCiAuUHEgbm90IGluY2x1ZGluZyB0aGUgTlVMTCB0ZXJtaW5hdG9yCkBAIC00MTUsNyArNDA4LDggQEAKIC5EcSBkZWZhdWx0OiAuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF90eXBlcwotZ2V0IEFDTCBlbnRyeSB0eXBlcyBjb250YWluZWQgaW4gYW4gYXJjaGl2ZSBlbnRyeSdzIEFDTC4gQXMgUE9TSVguMWUgYW5kIE5GU3Y0CitnZXQgQUNMIGVudHJ5IHR5cGVzIGNvbnRhaW5lZCBpbiBhbiBhcmNoaXZlIGVudHJ5J3MgQUNMLgorQXMgUE9TSVguMWUgYW5kIE5GU3Y0CiBBQ0wgZW50cmllcyBjYW5ub3QgYmUgbWl4ZWQsIHRoaXMgZnVuY3Rpb24gaXMgYSB2ZXJ5IGVmZmljaWVudCB3YXkgdG8gZGV0ZWN0IGlmCiBhbiBBQ0wgYWxyZWFkeSBjb250YWlucyBQT1NJWC4xZSBvciBORlN2NCBBQ0wgZW50cmllcy4KIC5TaCBSRVRVUk4gVkFMVUVTCkBAIC00MzgsOSArNDMyLDcgQEAKIGlmIG9uZSBvciBtb3JlIGVudHJpZXMgd2VyZSBpbnZhbGlkIG9yIG5vbi1wYXJzZWFibGUuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0Ci1hbmQKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cKLXJldHVybgorcmV0dXJucwogLkR2IEFSQ0hJVkVfT0sKIG9uIHN1Y2Nlc3MsCiAuRHYgQVJDSElWRV9FT0YKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X2xvY2FsZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmgKaW5kZXggNDQ1NTBjNS4uODAzYzAzNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0QkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX0VOVFJZX0xPQ0FMRV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfRU5UUllfTE9DQUxFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9FTlRSWV9MT0NBTEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX0VOVFJZX0xPQ0FMRV9IX0lOQ0xVREVECi0KIHN0cnVjdCBhcmNoaXZlX2VudHJ5Owogc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnY7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X21pc2MuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X21pc2MuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFiN2RkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbWlzYy4zCkBAIC0wLDAgKzEsNjMgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMTkgTWFydGluIE1hdHVza2EKKy5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisuXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisuXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisuXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKy5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisuXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorLlwiIFNVQ0ggREFNQUdFLgorLlwiCisuRGQgQXByaWwgMTUsIDIwMTkKKy5EdCBBUkNISVZFX0VOVFJZX01JU0MgMworLk9zCisuU2ggTkFNRQorLk5tIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlICwKKy5ObSBhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUKKy5OZCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHByb3BlcnRpZXMgb2YgYXJjaGl2ZV9lbnRyeQorLlNoIExJQlJBUlkKK1N0cmVhbWluZyBBcmNoaXZlIExpYnJhcnkgKGxpYmFyY2hpdmUsIC1sYXJjaGl2ZSkKKy5TaCBTWU5PUFNJUworLkluIGFyY2hpdmVfZW50cnkuaAorLkZ0IGludAorLkZuIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlICJzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYSIKKy5GdCB2b2lkCisuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlICJzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYSIgImludCIKKy5TaCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uCisuRm4gYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUKK3JldHVybnMgYW5kIHRoZSBmdW5jdGlvbgorLkZuIGFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZQorc2V0cyB0aGUgdHlwZSBvZiB0aGUgc3ltYm9saWMgbGluayBzdG9yZWQgaW4gYW4gYXJjaGl2ZSBlbnRyeS4KK1RoZXNlIGZ1bmN0aW9ucworaGF2ZSBzcGVjaWFsIG1lYW5pbmcgb24gb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIHN5bWJvbGljIGxpbmsKK3R5cGVzIChlLmcuIE1pY3Jvc29mdCBXaW5kb3dzKS4KKy5QcAorU3VwcG9ydGVkIHZhbHVlcyBhcmU6CisuQmwgLXRhZyAtd2lkdGggIkFFX1NZTUxJTktfVFlQRV9ESVJFQ1RPUlkiIC1jb21wYWN0CisuSXQgQUVfU1lNTElOS19UWVBFX1VOREVGSU5FRAorU3ltYm9saWMgbGluayB0YXJnZXQgdHlwZSBpcyBub3QgZGVmaW5lZCAoZGVmYXVsdCBvbiB1bml4IHN5c3RlbXMpCisuSXQgQUVfU1lNTElOS19UWVBFX0ZJTEUKK1N5bWJvbGljIGxpbmsgcG9pbnRzIHRvIGEgZmlsZQorLkl0IEFFX1NZTUxJTktfVFlQRV9ESVJFQ1RPUlkKK1N5bWJvbGljIGxpbmsgcG9pbnRzIHRvIGEgZGlyZWN0b3J5CisuRWwKKy5TaCBTRUUgQUxTTworLlhyIGFyY2hpdmVfZW50cnkgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeV9wYXRocyAzICwKKy5YciBhcmNoaXZlX2VudHJ5X3N0YXQgMyAsCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wYXRocy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGF0aHMuMwppbmRleCBmNjQ3MjEyLi4wZjg0OWM5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wYXRocy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3BhdGhzLjMKQEAgLTEzMyw3ICsxMzMsNyBAQAogLkZuIFhYWF93IC4KIC5JdCBVVEYtOAogVW5pY29kZSBzdHJpbmdzIGVuY29kZWQgYXMgVVRGLTguCi1UaGlzIGFyZSBjb252aWVuY2UgZnVuY3Rpb25zIHRvIHVwZGF0ZSBib3RoIHRoZSBtdWx0aWJ5dGUgYW5kIHdpZGUKK1RoZXNlIGFyZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gdXBkYXRlIGJvdGggdGhlIG11bHRpYnl0ZSBhbmQgd2lkZQogY2hhcmFjdGVyIHN0cmluZ3MgYXQgdGhlIHNhbWUgdGltZS4KIC5FbAogLlBwCkBAIC0xNDEsMTMgKzE0MSwxMyBAQAogYXJjaGl2ZSBkaXJlY3RseS4KIC5QcAogRm9yIHRoYXQgcmVhc29uLCBpdCBpcyBvbmx5IGF2YWlsYWJsZSBhcyBtdWx0aWJ5dGUgc3RyaW5nLgotVGhlIGxpbmsgcGF0aCBpcyBhIGNvbnZpZW5jZSBmdW5jdGlvbiBmb3IgY29uZGl0aW9uYWxseSBzZXR0aW5nCitUaGUgbGluayBwYXRoIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgc2V0dGluZwogaGFyZGxpbmsgb3Igc3ltbGluayBkZXN0aW5hdGlvbi4KIEl0IGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZ2V0IGFjY2Vzc29yIGZ1bmN0aW9uLgogLlBwCiAuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfWFhYCi1pcyBhbiBhbGlhcyBmb3IgCitpcyBhbiBhbGlhcyBmb3IKIC5GbiBhcmNoaXZlX2VudHJ5X2NvcHlfWFhYIC4KIC5TaCBTRUUgQUxTTwotLlhyIGFyY2hpdmVfZW50cnkgMwotLlhyIGxpYmFyY2hpdmUgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeSAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3Blcm1zLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wZXJtcy4zCmluZGV4IGFhZTM2NDguLjAyOTFiN2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3Blcm1zLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGVybXMuMwpAQCAtMTI2LDcgKzEyNiw3IEBACiBhbmQKIC5GbiBhcmNoaXZlX2VudHJ5X3NldF9wZXJtCiBzdG9yZSB0aGUgZ2l2ZW4gdXNlciBpZCwgZ3JvdXAgaWQgYW5kIHBlcm1pc3Npb24gaW4gdGhlIGVudHJ5LgotVGhlIHBlcm1pc3Npb24gaXMgYWxzbyBzZXQgYXMgc2lkZSBlZmZlY3Qgb2YgY2FsbGluZworVGhlIHBlcm1pc3Npb24gaXMgYWxzbyBzZXQgYXMgYSBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nCiAuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZSAuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X3N0cm1vZGUKQEAgLTE0MywxMiArMTQzLDEyIEBACiAuRm4gWFhYX3cgLgogLkl0IFVURi04CiBVbmljb2RlIHN0cmluZ3MgZW5jb2RlZCBhcyBVVEYtOC4KLVRoaXMgYXJlIGNvbnZpZW5jZSBmdW5jdGlvbnMgdG8gdXBkYXRlIGJvdGggdGhlIG11bHRpYnl0ZSBhbmQgd2lkZQorVGhlc2UgYXJlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byB1cGRhdGUgYm90aCB0aGUgbXVsdGlieXRlIGFuZCB3aWRlCiBjaGFyYWN0ZXIgc3RyaW5ncyBhdCB0aGUgc2FtZSB0aW1lLgogLkVsCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X3NldF9YWFgKLWlzIGFuIGFsaWFzIGZvciAKK2lzIGFuIGFsaWFzIGZvcgogLkZuIGFyY2hpdmVfZW50cnlfY29weV9YWFggLgogLlNzIEZpbGUgRmxhZ3MKIEZpbGUgZmxhZ3MgYXJlIHRyYW5zcGFyZW50bHkgY29udmVydGVkIGJldHdlZW4gYSBiaXRtYXAKQEAgLTE4Miw3ICsxODIsNyBAQAogLkZuIGFyY2hpdmVfZW50cnlfY29weV9mZmxhZ3NfdGV4dAogYW5kCiAuRm4gYXJjaGl2ZV9lbnRyeV9jb3B5X2ZmbGFnc190ZXh0X3cKLWZ1bmN0aW9ucyBwYXJzZSB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgc2V0cyB0aGUgaW50ZXJuYWwgYml0bWFwIHZhbHVlcy4KK2Z1bmN0aW9ucyBwYXJzZSB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgc2V0IHRoZSBpbnRlcm5hbCBiaXRtYXAgdmFsdWVzLgogVGhpcyBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIG9wZXJhdGlvbjsgbmFtZXMgdGhhdCBhcmUgbm90IG1lYW5pbmdmdWwKIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtIHdpbGwgYmUgaWdub3JlZC4KIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IG5hbWUgdGhhdCB3YXMgbm90CkBAIC0xOTcsOCArMTk3LDggQEAKIC5YciBhcmNoaXZlX2VudHJ5IDMgLAogLlhyIGFyY2hpdmVfZW50cnlfYWNsIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kaXNrIDMgLAotLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX3dyaXRlX2Rpc2sgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggQlVHUwogVGhlIHBsYXRmb3JtIHR5cGVzCiAuVnQgdWlkX3QKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3ByaXZhdGUuaAppbmRleCBjNjkyMzNlLi4yYjlhMDg0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcHJpdmF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcHJpdmF0ZS5oIDIwMTA5NiAyMDA5LTEyLTI4IDAyOjQxOjI3WiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZV9hY2xfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAKQEAgLTE3Niw2ICsxNzYsOSBAQAogCiAJLyogTWlzY2VsbGFuZW91cy4gKi8KIAljaGFyCQkgc3RybW9kZVsxMl07CisKKwkvKiBTeW1saW5rIHR5cGUgc3VwcG9ydCAqLworCWludCBhZV9zeW1saW5rX3R5cGU7CiB9OwogCiAjZW5kaWYgLyogQVJDSElWRV9FTlRSWV9QUklWQVRFX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3N0YXQuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3N0YXQuMwppbmRleCAyNjYxMWU0Li5hYTVjOGUwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9zdGF0LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfc3RhdC4zCkBAIC01NCw3ICs1NCw3IEBACiAuTm0gYXJjaGl2ZV9lbnRyeV9yZGV2bWFqb3IgLAogLk5tIGFyY2hpdmVfZW50cnlfc2V0X3JkZXZtYWpvciAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9yZGV2bWlub3IgLAotLk5tIGFyY2hpdmVfZW50cnlfc2V0X3JkZXZtaW5vciAsCisuTm0gYXJjaGl2ZV9lbnRyeV9zZXRfcmRldm1pbm9yCiAuTmQgYWNjZXNzb3IgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgYXJjaGl2ZSBlbnRyeSBkZXNjcmlwdGlvbnMKIC5TaCBMSUJSQVJZCiBTdHJlYW1pbmcgQXJjaGl2ZSBMaWJyYXJ5IChsaWJhcmNoaXZlLCAtbGFyY2hpdmUpCkBAIC0yNjcsOCArMjY3LDggQEAKIFNvbWUgYXJjaGl2ZSBmb3JtYXRzIHVzZSB0aGUgY29tYmluZWQgZm9ybSwgd2hpbGUgb3RoZXIgZm9ybWF0cyB1c2UKIHRoZSBzcGxpdCBmb3JtLgogLlNoIFNFRSBBTFNPCisuWHIgc3RhdCAyICwKIC5YciBhcmNoaXZlX2VudHJ5X2FjbCAzICwKIC5YciBhcmNoaXZlX2VudHJ5X3Blcm1zIDMgLAogLlhyIGFyY2hpdmVfZW50cnlfdGltZSAzICwKLS5YciBsaWJhcmNoaXZlIDMgLAotLlhyIHN0YXQgMgorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfdGltZS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfdGltZS4zCmluZGV4IDE4NjQ1MjEuLmQwNTYzZWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3RpbWUuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV90aW1lLjMKQEAgLTQ4LDcgKzQ4LDcgQEAKIC5ObSBhcmNoaXZlX2VudHJ5X210aW1lX25zZWMgLAogLk5tIGFyY2hpdmVfZW50cnlfbXRpbWVfaXNfc2V0ICwKIC5ObSBhcmNoaXZlX2VudHJ5X3NldF9tdGltZSAsCi0uTm0gYXJjaGl2ZV9lbnRyeV91bnNldF9tdGltZSAsCisuTm0gYXJjaGl2ZV9lbnRyeV91bnNldF9tdGltZQogLk5kIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHRpbWVzIGluIGFyY2hpdmUgZW50cnkgZGVzY3JpcHRpb25zCiAuU2ggTElCUkFSWQogU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQpAQCAtMTEzLDggKzExMyw4IEBACiAuRm4gWFhYX2lzX3NldCAuCiBVbnNldCB0aW1lIGZpZWxkcyBoYXZlIGEgc2Vjb25kIGFuZCBuYW5vc2Vjb25kIGZpZWxkIG9mIDAuCiAuU2ggU0VFIEFMU08KLS5YciBhcmNoaXZlX2VudHJ5IDMKLS5YciBsaWJhcmNoaXZlIDMgLAorLlhyIGFyY2hpdmVfZW50cnkgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCiAuTm0gbGliYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jCmluZGV4IDAzMGMwODMuLjY3ODZkMzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmMKQEAgLTI3LDYgKzI3LDkgQEAKICoqICBUaGlzIGNvZGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4gYW5kIGhhcyBubyBjb3B5cmlnaHQuCiAqLwogCisjaWZuZGVmIENNX0dFVF9EQVRFCisjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybS5oIgorI2VuZGlmCiAjaWZkZWYgX19GcmVlQlNEX18KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKQEAgLTY5NCw4ICs2OTcsMTYgQEAKIAlzaWduZWQgY2hhciBEYXlzSW5Nb250aFsxMl0gPSB7CiAJCTMxLCAwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMQogCX07Ci0JdGltZV90CUp1bGlhbjsKLQlpbnQJaTsKKwl0aW1lX3QJCUp1bGlhbjsKKwlpbnQJCWk7CisJc3RydWN0IHRtCSpsdGltZTsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0JdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdAkJdGVycjsKKwlfX3RpbWU2NF90CXRtcHRpbWU7CisjZW5kaWYKIAogCWlmIChZZWFyIDwgNjkpCiAJCVllYXIgKz0gMjAwMDsKQEAgLTcyMiwyMSArNzMzLDY0IEBACiAJSnVsaWFuICo9IERBWTsKIAlKdWxpYW4gKz0gVGltZXpvbmU7CiAJSnVsaWFuICs9IEhvdXJzICogSE9VUiArIE1pbnV0ZXMgKiBNSU5VVEUgKyBTZWNvbmRzOworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikKKwlsdGltZSA9IGxvY2FsdGltZV9yKCZKdWxpYW4sICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJdG1wdGltZSA9IEp1bGlhbjsKKwl0ZXJyID0gX2xvY2FsdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCWx0aW1lID0gTlVMTDsKKwllbHNlCisJCWx0aW1lID0gJnRtYnVmOworI2Vsc2UKKwlsdGltZSA9IGxvY2FsdGltZSgmSnVsaWFuKTsKKyNlbmRpZgogCWlmIChEU1Rtb2RlID09IERTVG9uCi0JICAgIHx8IChEU1Rtb2RlID09IERTVG1heWJlICYmIGxvY2FsdGltZSgmSnVsaWFuKS0+dG1faXNkc3QpKQorCSAgICB8fCAoRFNUbW9kZSA9PSBEU1RtYXliZSAmJiBsdGltZS0+dG1faXNkc3QpKQogCQlKdWxpYW4gLT0gSE9VUjsKIAlyZXR1cm4gSnVsaWFuOwogfQogCi0KIHN0YXRpYyB0aW1lX3QKIERTVGNvcnJlY3QodGltZV90IFN0YXJ0LCB0aW1lX3QgRnV0dXJlKQogewotCXRpbWVfdAlTdGFydERheTsKLQl0aW1lX3QJRnV0dXJlRGF5OworCXRpbWVfdAkJU3RhcnREYXk7CisJdGltZV90CQlGdXR1cmVEYXk7CisJc3RydWN0IHRtCSpsdGltZTsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0JdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdAkJdGVycjsKKwlfX3RpbWU2NF90CXRtcHRpbWU7CisjZW5kaWYKIAotCVN0YXJ0RGF5ID0gKGxvY2FsdGltZSgmU3RhcnQpLT50bV9ob3VyICsgMSkgJSAyNDsKLQlGdXR1cmVEYXkgPSAobG9jYWx0aW1lKCZGdXR1cmUpLT50bV9ob3VyICsgMSkgJSAyNDsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpCisJbHRpbWUgPSBsb2NhbHRpbWVfcigmU3RhcnQsICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJdG1wdGltZSA9IFN0YXJ0OworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJbHRpbWUgPSBOVUxMOworCWVsc2UKKwkJbHRpbWUgPSAmdG1idWY7CisjZWxzZQorCWx0aW1lID0gbG9jYWx0aW1lKCZTdGFydCk7CisjZW5kaWYKKwlTdGFydERheSA9IChsdGltZS0+dG1faG91ciArIDEpICUgMjQ7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCWx0aW1lID0gbG9jYWx0aW1lX3IoJkZ1dHVyZSwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwl0bXB0aW1lID0gRnV0dXJlOworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJbHRpbWUgPSBOVUxMOworCWVsc2UKKwkJbHRpbWUgPSAmdG1idWY7CisjZWxzZQorCWx0aW1lID0gbG9jYWx0aW1lKCZGdXR1cmUpOworI2VuZGlmCisJRnV0dXJlRGF5ID0gKGx0aW1lLT50bV9ob3VyICsgMSkgJSAyNDsKIAlyZXR1cm4gKEZ1dHVyZSAtIFN0YXJ0KSArIChTdGFydERheSAtIEZ1dHVyZURheSkgKiBIT1VSOwogfQogCkBAIC03NDcsOSArODAxLDI3IEBACiB7CiAJc3RydWN0IHRtCSp0bTsKIAl0aW1lX3QJdCwgbm93OworI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCXN0cnVjdCB0bQl0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwllcnJub190CQl0ZXJyOworCV9fdGltZTY0X3QJdG1wdGltZTsKKyNlbmRpZgogCiAJdCA9IFN0YXJ0IC0gem9uZTsKKyNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpCisJdG0gPSBnbXRpbWVfcigmdCwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwl0bXB0aW1lID0gdDsKKwl0ZXJyID0gX2dtdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXRtID0gTlVMTDsKKwllbHNlCisJCXRtID0gJnRtYnVmOworI2Vsc2UKIAl0bSA9IGdtdGltZSgmdCk7CisjZW5kaWYKIAlub3cgPSBTdGFydDsKIAlub3cgKz0gREFZICogKChEYXlOdW1iZXIgLSB0bS0+dG1fd2RheSArIDcpICUgNyk7CiAJbm93ICs9IDcgKiBEQVkgKiAoRGF5T3JkaW5hbCA8PSAwID8gRGF5T3JkaW5hbCA6IERheU9yZGluYWwgLSAxKTsKQEAgLTc2NSwxMCArODM3LDI4IEBACiAJc3RydWN0IHRtCSp0bTsKIAl0aW1lX3QJTW9udGg7CiAJdGltZV90CVllYXI7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKSB8fCBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJc3RydWN0IHRtCXRtYnVmOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCWVycm5vX3QJCXRlcnI7CisJX190aW1lNjRfdAl0bXB0aW1lOworI2VuZGlmCiAKIAlpZiAoUmVsTW9udGggPT0gMCkKIAkJcmV0dXJuIDA7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCXRtID0gbG9jYWx0aW1lX3IoJlN0YXJ0LCAmdG1idWYpOworI2VsaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXRtcHRpbWUgPSBTdGFydDsKKwl0ZXJyID0gX2xvY2FsdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXRtID0gTlVMTDsKKwllbHNlCisJCXRtID0gJnRtYnVmOworI2Vsc2UKIAl0bSA9IGxvY2FsdGltZSgmU3RhcnQpOworI2VuZGlmCiAJTW9udGggPSAxMiAqICh0bS0+dG1feWVhciArIDE5MDApICsgdG0tPnRtX21vbiArIFJlbE1vbnRoOwogCVllYXIgPSBNb250aCAvIDEyOwogCU1vbnRoID0gTW9udGggJSAxMiArIDE7CkBAIC05MDUsNiArOTk1LDEwIEBACiAJdGltZV90CQlTdGFydDsKIAl0aW1lX3QJCXRvZDsKIAlsb25nCQl0em9uZTsKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpIHx8IGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwllcnJub190CQl0ZXJyOworCV9fdGltZTY0X3QJdG1wdGltZTsKKyNlbmRpZgogCiAJLyogQ2xlYXIgb3V0IHRoZSBwYXJzZWQgdG9rZW4gYXJyYXkuICovCiAJbWVtc2V0KHRva2VucywgMCwgc2l6ZW9mKHRva2VucykpOwpAQCAtOTEzLDIwICsxMDA3LDQ0IEBACiAJZ2RzID0gJl9nZHM7CiAKIAkvKiBMb29rIHVwIHRoZSBjdXJyZW50IHRpbWUuICovCisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCXRtID0gbG9jYWx0aW1lX3IoJm5vdywgJmxvY2FsKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwl0bXB0aW1lID0gbm93OworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmbG9jYWwsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJdG0gPSBOVUxMOworCWVsc2UKKwkJdG0gPSAmbG9jYWw7CisjZWxzZQogCW1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihsb2NhbCkpOwotCXRtID0gbG9jYWx0aW1lICgmbm93KTsKKwl0bSA9IGxvY2FsdGltZSgmbm93KTsKKyNlbmRpZgogCWlmICh0bSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CisjaWYgIWRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikgJiYgIWRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKIAlsb2NhbCA9ICp0bTsKKyNlbmRpZgogCiAJLyogTG9vayB1cCBVVEMgaWYgd2UgY2FuIGFuZCB1c2UgdGhhdCB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQKIAkgKiB0aW1lem9uZSBvZmZzZXQuICovCisjaWYgZGVmaW5lZChIQVZFX0dNVElNRV9SKQorCWdtdF9wdHIgPSBnbXRpbWVfcigmbm93LCAmZ210KTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwl0bXB0aW1lID0gbm93OworCXRlcnIgPSBfZ210aW1lNjRfcygmZ210LCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCWdtdF9wdHIgPSBOVUxMOworCWVsc2UKKwkJZ210X3B0ciA9ICZnbXQ7CisjZWxzZQogCW1lbXNldCgmZ210LCAwLCBzaXplb2YoZ210KSk7Ci0JZ210X3B0ciA9IGdtdGltZSAoJm5vdyk7CisJZ210X3B0ciA9IGdtdGltZSgmbm93KTsKIAlpZiAoZ210X3B0ciAhPSBOVUxMKSB7CiAJCS8qIENvcHksIGluIGNhc2UgbG9jYWx0aW1lIGFuZCBnbXRpbWUgdXNlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KIAkJZ210ID0gKmdtdF9wdHI7CiAJfQorI2VuZGlmCiAJaWYgKGdtdF9wdHIgIT0gTlVMTCkKIAkJdHpvbmUgPSBkaWZmdG0gKCZnbXQsICZsb2NhbCk7CiAJZWxzZQpAQCAtOTYwLDcgKzEwNzgsMTggQEAKIAkgKiB0aW1lIGNvbXBvbmVudHMgaW5zdGVhZCBvZiB0aGUgbG9jYWwgdGltZXpvbmUuICovCiAJaWYgKGdkcy0+SGF2ZVpvbmUgJiYgZ210X3B0ciAhPSBOVUxMKSB7CiAJCW5vdyAtPSBnZHMtPlRpbWV6b25lOwotCQlnbXRfcHRyID0gZ210aW1lICgmbm93KTsKKyNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpCisJCWdtdF9wdHIgPSBnbXRpbWVfcigmbm93LCAmZ210KTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwkJdG1wdGltZSA9IG5vdzsKKwkJdGVyciA9IF9nbXRpbWU2NF9zKCZnbXQsICZ0bXB0aW1lKTsKKwkJaWYgKHRlcnIpCisJCQlnbXRfcHRyID0gTlVMTDsKKwkJZWxzZQorCQkJZ210X3B0ciA9ICZnbXQ7CisjZWxzZQorCQlnbXRfcHRyID0gZ210aW1lKCZub3cpOworI2VuZGlmCiAJCWlmIChnbXRfcHRyICE9IE5VTEwpCiAJCQlsb2NhbCA9ICpnbXRfcHRyOwogCQlub3cgKz0gZ2RzLT5UaW1lem9uZTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuaAppbmRleCA2NjZmZjVmLi45MDBhOGY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgPHRpbWUuaD4KIAogdGltZV90IF9fYXJjaGl2ZV9nZXRfZGF0ZSh0aW1lX3Qgbm93LCBjb25zdCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hYy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hYy5jCmluZGV4IGYyOTk2NTUuLjJhOWQwNGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2htYWMuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjLmMKQEAgLTgzLDYgKzgzLDkgQEAKIHN0YXRpYyBpbnQKIF9faG1hY19zaGExX2luaXQoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW4pCiB7CisjaWZkZWYgX19HTlVDX18KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjYXN0LXF1YWwiCisjZW5kaWYKIAlCQ1JZUFRfQUxHX0hBTkRMRSBoQWxnOwogCUJDUllQVF9IQVNIX0hBTkRMRSBoSGFzaDsKIAlEV09SRCBoYXNoX2xlbjsKQEAgLTE0Nyw2ICsxNTAsNTMgQEAKIAl9CiB9CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19NRF9IKQorCitzdGF0aWMgaW50CitfX2htYWNfc2hhMV9pbml0KGFyY2hpdmVfaG1hY19zaGExX2N0eCAqY3R4LCBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuKQoreworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mbzsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBtYmVkdGxzX21kX2luaXQoY3R4KTsKKyAgICAgICAgaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoTUJFRFRMU19NRF9TSEExKTsKKyAgICAgICAgaWYgKGluZm8gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZnJlZShjdHgpOworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisgICAgICAgIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoY3R4LCBpbmZvLCAxKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9mcmVlKGN0eCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKwlyZXQgPSBtYmVkdGxzX21kX2htYWNfc3RhcnRzKGN0eCwga2V5LCBrZXlfbGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJbWJlZHRsc19tZF9mcmVlKGN0eCk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19faG1hY19zaGExX3VwZGF0ZShhcmNoaXZlX2htYWNfc2hhMV9jdHggKmN0eCwgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9sZW4pCit7CisJbWJlZHRsc19tZF9obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGRhdGFfbGVuKTsKK30KKworc3RhdGljIHZvaWQgX19obWFjX3NoYTFfZmluYWwoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIHVpbnQ4X3QgKm91dCwgc2l6ZV90ICpvdXRfbGVuKQoreworCSh2b2lkKW91dF9sZW47CS8qIFVOVVNFRCAqLworCisJbWJlZHRsc19tZF9obWFjX2ZpbmlzaChjdHgsIG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faG1hY19zaGExX2NsZWFudXAoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgpCit7CisJbWJlZHRsc19tZF9mcmVlKGN0eCk7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKK30KKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9ITUFDX0gpCiAKIHN0YXRpYyBpbnQKQEAgLTE5OCw2ICsyNDgsNyBAQAogX19obWFjX3NoYTFfZmluYWwoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIHVpbnQ4X3QgKm91dCwgc2l6ZV90ICpvdXRfbGVuKQogewogCXVuc2lnbmVkIGludCBsZW4gPSAodW5zaWduZWQgaW50KSpvdXRfbGVuOworCiAJSE1BQ19GaW5hbCgqY3R4LCBvdXQsICZsZW4pOwogCSpvdXRfbGVuID0gbGVuOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hY19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaAppbmRleCBlYjQ1YzRlLi4xM2E2N2Q0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaApAQCAtMjMsMTMgKzIzLDEyIEBACiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCi0jaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAotI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCi0jZW5kaWYKLQogI2lmbmRlZiBBUkNISVZFX0hNQUNfUFJJVkFURV9IX0lOQ0xVREVECiAjZGVmaW5lIEFSQ0hJVkVfSE1BQ19QUklWQVRFX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCiAvKgogICogT24gc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFueSByZWNvZ25pemVkIGNyeXB0byBsaWJyYXJpZXMsCiAgKiB0aGUgYXJjaGl2ZV9obWFjLmMgZmlsZSBpcyBleHBlY3RlZCB0byBkZWZpbmUgbm8gdXNhYmxlIHN5bWJvbHMuCkBAIC02NCw2ICs2MywxMSBAQAogCiB9IGFyY2hpdmVfaG1hY19zaGExX2N0eDsKIAorI2VsaWYgZGVmaW5lZChIQVZFX0xJQk1CRURDUllQVE8pICYmIGRlZmluZWQoSEFWRV9NQkVEVExTX01EX0gpCisjaW5jbHVkZSA8bWJlZHRscy9tZC5oPgorCit0eXBlZGVmIG1iZWR0bHNfbWRfY29udGV4dF90IGFyY2hpdmVfaG1hY19zaGExX2N0eDsKKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9ITUFDX0gpCiAjaW5jbHVkZSA8bmV0dGxlL2htYWMuaD4KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMKaW5kZXggZjE1MGU4Mi4uMDQ3NDdiMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jCkBAIC05Myw2ICs5Myw5IEBACiAJLyogZXhjbHVzaW9uL2luY2x1c2lvbiBzZXQgZmxhZy4gKi8KIAlpbnQJCQkgc2V0ZmxhZzsKIAorCS8qIFJlY3Vyc2l2ZWx5IGluY2x1ZGUgZGlyZWN0b3J5IGNvbnRlbnQ/ICovCisJaW50CQkJIHJlY3Vyc2l2ZV9pbmNsdWRlOworCiAJLyoKIAkgKiBNYXRjaGluZyBmaWxlbmFtZSBwYXR0ZXJucy4KIAkgKi8KQEAgLTIyMyw2ICsyMjYsNyBAQAogCQlyZXR1cm4gKE5VTEwpOwogCWEtPmFyY2hpdmUubWFnaWMgPSBBUkNISVZFX01BVENIX01BR0lDOwogCWEtPmFyY2hpdmUuc3RhdGUgPSBBUkNISVZFX1NUQVRFX05FVzsKKwlhLT5yZWN1cnNpdmVfaW5jbHVkZSA9IDE7CiAJbWF0Y2hfbGlzdF9pbml0KCYoYS0+aW5jbHVzaW9ucykpOwogCW1hdGNoX2xpc3RfaW5pdCgmKGEtPmV4Y2x1c2lvbnMpKTsKIAlfX2FyY2hpdmVfcmJfdHJlZV9pbml0KCYoYS0+ZXhjbHVzaW9uX3RyZWUpLCAmcmJfb3BzX21icyk7CkBAIC00NzEsNiArNDc1LDI4IEBACiB9CiAKIC8qCisgKiBXaGVuIHJlY3Vyc2l2ZSBpbmNsdXNpb24gb2YgZGlyZWN0b3J5IGNvbnRlbnQgaXMgZW5hYmxlZCwKKyAqIGFuIGluY2x1c2lvbiBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhIGRpcmVjdG9yeSB3aWxsIGFsc28KKyAqIGluY2x1ZGUgZXZlcnl0aGluZyBiZW5lYXRoIHRoYXQgZGlyZWN0b3J5LiBFbmFibGVkIGJ5IGRlZmF1bHQuCisgKgorICogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTlUgdGFyLCBleGNsdXNpb24gcGF0dGVybnMgYWx3YXlzCisgKiBtYXRjaCBpZiBhIHN1YnNldCBvZiB0aGUgZnVsbCBwYXRjaCBtYXRjaGVzIChpLmUuLCB0aGV5IGFyZQorICogYXJlIG5vdCByb290ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCkgYW5kIHRodXMgdGhlcmUKKyAqIGlzIG5vIGNvcnJlc3BvbmRpbmcgbm9uLXJlY3Vyc2l2ZSBleGNsdXNpb24gbW9kZS4KKyAqLworaW50CithcmNoaXZlX21hdGNoX3NldF9pbmNsdXNpb25fcmVjdXJzaW9uKHN0cnVjdCBhcmNoaXZlICpfYSwgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGFyY2hpdmVfbWF0Y2ggKmE7CisKKwlhcmNoaXZlX2NoZWNrX21hZ2ljKF9hLCBBUkNISVZFX01BVENIX01BR0lDLAorCSAgICBBUkNISVZFX1NUQVRFX05FVywgImFyY2hpdmVfbWF0Y2hfc2V0X2luY2x1c2lvbl9yZWN1cnNpb24iKTsKKwlhID0gKHN0cnVjdCBhcmNoaXZlX21hdGNoICopX2E7CisJYS0+cmVjdXJzaXZlX2luY2x1ZGUgPSBlbmFibGVkOworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKKy8qCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byBnZXQgc3RhdGlzdGljIGluZm9ybWF0aW9uIGZvciBpbmNsdXNpb24gcGF0dGVybnMuCiAgKi8KIGludApAQCAtNzgxLDcgKzgwNywxMCBAQAogbWF0Y2hfcGF0aF9pbmNsdXNpb24oc3RydWN0IGFyY2hpdmVfbWF0Y2ggKmEsIHN0cnVjdCBtYXRjaCAqbSwKICAgICBpbnQgbWJzLCBjb25zdCB2b2lkICpwbikKIHsKLQlpbnQgZmxhZyA9IFBBVEhNQVRDSF9OT19BTkNIT1JfRU5EOworCS8qIFJlY3Vyc2l2ZSBvcGVyYXRpb24gcmVxdWlyZXMgb25seSBhIHByZWZpeCBtYXRjaC4gKi8KKwlpbnQgZmxhZyA9IGEtPnJlY3Vyc2l2ZV9pbmNsdWRlID8KKwkJUEFUSE1BVENIX05PX0FOQ0hPUl9FTkQgOgorCQkwOwogCWludCByOwogCiAJaWYgKG1icykgewpAQCAtMTIzMiw3ICsxMjYxLDcgQEAKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgRUlOVkFMLCAicGF0aG5hbWUgaXMgZW1wdHkiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJfQotCWlmIChzdGF0KHBhdGgsICZzdCkgIT0gMCkgeworCWlmIChsYV9zdGF0KHBhdGgsICZzdCkgIT0gMCkgewogCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBlcnJubywgIkZhaWxlZCB0byBzdGF0KCkiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9ldnBfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9ldnBfcHJpdmF0ZS5oCmluZGV4IDQzYTNjY2MuLmViYjA2NzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfZXZwX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2V2cF9wcml2YXRlLmgKQEAgLTIyLDkgKzIyLDE0IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBBUkNISVZFX09QRU5TU0xfRVZQX1BSSVZBVEVfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX09QRU5TU0xfRVZQX1BSSVZBVEVfSF9JTkNMVURFRAogCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKKwogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2htYWNfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9obWFjX3ByaXZhdGUuaAppbmRleCA5MjEyNDliLi4yNWM4ZGRhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2htYWNfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfaG1hY19wcml2YXRlLmgKQEAgLTIyLDkgKzIyLDE0IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBBUkNISVZFX09QRU5TU0xfSE1BQ19QUklWQVRFX0hfSU5DTFVERUQKICNkZWZpbmUgQVJDSElWRV9PUEVOU1NMX0hNQUNfUFJJVkFURV9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcHRpb25zX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oCmluZGV4IDZlZjAxNjUuLjlhN2Y4MDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oCkBAIC0yMyw2ICsyMyw5IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZm5kZWYgQVJDSElWRV9PUFRJT05TX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX09QVElPTlNfUFJJVkFURV9IX0lOQ0xVREVECisKICNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtLmgiCiBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKQEAgLTQ1LDMgKzQ4LDQgQEAKICAgICBjb25zdCBjaGFyICptLCBjb25zdCBjaGFyICpvLCBjb25zdCBjaGFyICp2LAogICAgIG9wdGlvbl9oYW5kbGVyIHVzZV9mb3JtYXRfb3B0aW9uLCBvcHRpb25faGFuZGxlciB1c2VfZmlsdGVyX29wdGlvbik7CiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhY2tfZGV2LmMKaW5kZXggNTNiZGRkNy4uZjgyODZkOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5jCkBAIC01Nyw4ICs1NywxMiBAQAogI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19TWVNNQUNST1NfSAorI2lmIE1BSk9SX0lOX01LREVWCisjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CisjZGVmaW5lIEhBVkVfTUFKT1IKKyNlbGlmIE1BSk9SX0lOX1NZU01BQ1JPUwogI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KKyNkZWZpbmUgSEFWRV9NQUpPUgogI2VuZGlmCiAjaWZkZWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhY2tfZGV2LmgKaW5kZXggNzQ5ZmQzZC4uZWFmMjNlMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5oCkBAIC0zMSw4ICszMSw4IEBACiAKIC8qIE9yaWdpbmFsbHkgZnJvbSBOZXRCU0QncyBta25vZCg4KSBzb3VyY2UuICovCiAKLSNpZm5kZWYJX1BBQ0tfREVWX0gKLSNkZWZpbmUJX1BBQ0tfREVWX0gKKyNpZm5kZWYJQVJDSElWRV9QQUNLX0RFVl9ICisjZGVmaW5lCUFSQ0hJVkVfUEFDS19ERVZfSAogCiB0eXBlZGVmCWRldl90IHBhY2tfdChpbnQsIHVuc2lnbmVkIGxvbmcgW10sIGNvbnN0IGNoYXIgKiopOwogCkBAIC00Niw0ICs0Niw0IEBACiAJCQkJCSAoKCh5KSA8PCAxMikgJiAweGZmZjAwMDAwKSB8IFwKIAkJCQkJICgoKHkpIDw8ICAwKSAmIDB4MDAwMDAwZmYpKSkKIAotI2VuZGlmCS8qIF9QQUNLX0RFVl9IICovCisjZW5kaWYJLyogQVJDSElWRV9QQUNLX0RFVl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYXRobWF0Y2guaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oCmluZGV4IGU2OTAxNzcuLjk5OTUxNDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oCkBAIC0yNiwxNSArMjYsMTUgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9QQVRITUFUQ0hfSAorI2RlZmluZSBBUkNISVZFX1BBVEhNQVRDSF9ICisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9QQVRITUFUQ0hfSAotI2RlZmluZSBBUkNISVZFX1BBVEhNQVRDSF9ICi0KIC8qIERvbid0IGFuY2hvciBhdCBiZWdpbm5pbmcgdW5sZXNzIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICJeIiAqLwogI2RlZmluZSBQQVRITUFUQ0hfTk9fQU5DSE9SX1NUQVJUCTEKIC8qIERvbid0IGFuY2hvciBhdCBlbmQgdW5sZXNzIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aCAiJCIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybS5oCmluZGV4IGUxNjFlNjQuLjkwZGIzMWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm0uaApAQCAtNjksNiArNjksOCBAQAogICogZWl0aGVyIFdpbmRvd3Mgb3IgUG9zaXggQVBJcy4gKi8KICNpZiAoZGVmaW5lZChfX1dJTjMyX18pIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzIpKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQogI2luY2x1ZGUgImFyY2hpdmVfd2luZG93cy5oIgorI2Vsc2UKKyNkZWZpbmUgbGFfc3RhdChwYXRoLHN0cmVmKQkJc3RhdChwYXRoLHN0cmVmKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV9hY2wuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX2FjbC5oCmluZGV4IDM0OThmNzguLjI2NGU2ZGUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX2FjbC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX2FjbC5oCkBAIC0zMCw2ICszMCwxMiBAQAogI2lmbmRlZiBBUkNISVZFX1BMQVRGT1JNX0FDTF9IX0lOQ0xVREVECiAjZGVmaW5lIEFSQ0hJVkVfUExBVEZPUk1fQUNMX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1RfQ09NTU9OCisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgorI2VuZGlmCisKIC8qCiAgKiBEZXRlcm1pbmUgd2hhdCBBQ0wgdHlwZXMgYXJlIHN1cHBvcnRlZAogICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV94YXR0ci5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1feGF0dHIuaAppbmRleCA0ZWRmZWNmLi5hZDRiOTBhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV94YXR0ci5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX3hhdHRyLmgKQEAgLTMwLDYgKzMwLDEyIEBACiAjaWZuZGVmIEFSQ0hJVkVfUExBVEZPUk1fWEFUVFJfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX1BMQVRGT1JNX1hBVFRSX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1RfQ09NTU9OCisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgorI2VuZGlmCisKIC8qCiAgKiBEZXRlcm1pbmUgaWYgd2Ugc3VwcG9ydCBleHRlbmRlZCBhdHRyaWJ1dGVzCiAgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kNy5jCmluZGV4IGQwYmFjYzYuLjQwMjkzOTUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDcuYwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAogc3RhdGljIHZvaWQgUmFuZ2VFbmNfRW5jb2RlKENQcG1kN3pfUmFuZ2VFbmMgKnAsIFVJbnQzMiBzdGFydCwgVUludDMyIHNpemUsIFVJbnQzMiB0b3RhbCkKIHsKLSAgcC0+TG93ICs9IHN0YXJ0ICogKHAtPlJhbmdlIC89IHRvdGFsKTsKKyAgcC0+TG93ICs9IChVSW50NjQpc3RhcnQgKiAoVUludDY0KShwLT5SYW5nZSAvPSB0b3RhbCk7CiAgIHAtPlJhbmdlICo9IHNpemU7CiAgIHdoaWxlIChwLT5SYW5nZSA8IGtUb3BWYWx1ZSkKICAgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDdfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDdfcHJpdmF0ZS5oCmluZGV4IDU3N2Q2ZmIuLjcxYjk1NDQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kN19wcml2YXRlLmgKQEAgLTYsMTMgKzYsMTMgQEAKIG9mIFJhbmdlQ29kZXIgZnJvbSA3eiwgaW5zdGVhZCBvZiBSYW5nZUNvZGVyIGZyb20gb3JpZ2luYWwgUFBNZCB2YXIuSC4KIElmIHlvdSBuZWVkIHRoZSBjb21wYXRpYmlsaXR5IHdpdGggb3JpZ2luYWwgUFBNZCB2YXIuSCwgeW91IGNhbiB1c2UgZXh0ZXJuYWwgUmFuZ2VEZWNvZGVyICovCiAKKyNpZm5kZWYgQVJDSElWRV9QUE1EN19QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9QUE1EN19QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9QUE1EN19QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9QUE1EN19QUklWQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgImFyY2hpdmVfcHBtZF9wcml2YXRlLmgiCiAKICNkZWZpbmUgUFBNRDdfTUlOX09SREVSIDIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ4LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzc5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kOC5jCkBAIC0wLDAgKzEsMTI4NyBAQAorLyogUHBtZDguYyAtLSBQUE1kSSBjb2RlYworMjAxNi0wNS0yMSA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbgorVGhpcyBjb2RlIGlzIGJhc2VkIG9uIFBQTWQgdmFyLkkgKDIwMDIpOiBEbWl0cnkgU2hrYXJpbiA6IFB1YmxpYyBkb21haW4gKi8KKworI2luY2x1ZGUgImFyY2hpdmVfcGxhdGZvcm0uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiYXJjaGl2ZV9wcG1kOF9wcml2YXRlLmgiCisKK2NvbnN0IEJ5dGUgUFBNRDhfa0V4cEVzY2FwZVsxNl0gPSB7IDI1LCAxNCwgOSwgNywgNSwgNSwgNCwgNCwgNCwgMywgMywgMywgMiwgMiwgMiwgMiB9Oworc3RhdGljIGNvbnN0IFVJbnQxNiBrSW5pdEJpbkVzY1tdID0geyAweDNDREQsIDB4MUYzRiwgMHg1OUJGLCAweDQ4RjMsIDB4NjRBMSwgMHg1QUJDLCAweDY2MzIsIDB4NjA1MX07CisKKyNkZWZpbmUgTUFYX0ZSRVEgMTI0CisjZGVmaW5lIFVOSVRfU0laRSAxMgorCisjZGVmaW5lIFUyQihudSkgKChVSW50MzIpKG51KSAqIFVOSVRfU0laRSkKKyNkZWZpbmUgVTJJKG51KSAocC0+VW5pdHMySW5keFsobnUpIC0gMV0pCisjZGVmaW5lIEkyVShpbmR4KSAocC0+SW5keDJVbml0c1tpbmR4XSkKKworI2lmZGVmIFBQTURfMzJCSVQKKyAgI2RlZmluZSBSRUYocHRyKSAocHRyKQorI2Vsc2UKKyAgI2RlZmluZSBSRUYocHRyKSAoKFVJbnQzMikoKEJ5dGUgKikocHRyKSAtIChwKS0+QmFzZSkpCisjZW5kaWYKKworI2RlZmluZSBTVEFUU19SRUYocHRyKSAoKENQcG1kX1N0YXRlX1JlZilSRUYocHRyKSkKKworI2RlZmluZSBDVFgocmVmKSAoKENQcG1kOF9Db250ZXh0ICopUHBtZDhfR2V0Q29udGV4dChwLCByZWYpKQorI2RlZmluZSBTVEFUUyhjdHgpIFBwbWQ4X0dldFN0YXRzKHAsIGN0eCkKKyNkZWZpbmUgT05FX1NUQVRFKGN0eCkgUHBtZDhDb250ZXh0X09uZVN0YXRlKGN0eCkKKyNkZWZpbmUgU1VGRklYKGN0eCkgQ1RYKChjdHgpLT5TdWZmaXgpCisKKyNkZWZpbmUga1RvcCAoMSA8PCAyNCkKKyNkZWZpbmUga0JvdCAoMSA8PCAxNSkKKwordHlwZWRlZiBDUHBtZDhfQ29udGV4dCAqIENUWF9QVFI7CisKK3N0cnVjdCBDUHBtZDhfTm9kZV87CisKK3R5cGVkZWYKKyAgI2lmZGVmIFBQTURfMzJCSVQKKyAgICBzdHJ1Y3QgQ1BwbWQ4X05vZGVfICoKKyAgI2Vsc2UKKyAgICBVSW50MzIKKyAgI2VuZGlmCisgIENQcG1kOF9Ob2RlX1JlZjsKKwordHlwZWRlZiBzdHJ1Y3QgQ1BwbWQ4X05vZGVfCit7CisgIFVJbnQzMiBTdGFtcDsKKyAgQ1BwbWQ4X05vZGVfUmVmIE5leHQ7CisgIFVJbnQzMiBOVTsKK30gQ1BwbWQ4X05vZGU7CisKKyNpZmRlZiBQUE1EXzMyQklUCisgICNkZWZpbmUgTk9ERShwdHIpIChwdHIpCisjZWxzZQorICAjZGVmaW5lIE5PREUob2ZmcykgKChDUHBtZDhfTm9kZSAqKShwLT5CYXNlICsgKG9mZnMpKSkKKyNlbmRpZgorCisjZGVmaW5lIEVNUFRZX05PREUgMHhGRkZGRkZGRgorCit2b2lkIFBwbWQ4X0NvbnN0cnVjdChDUHBtZDggKnApCit7CisgIHVuc2lnbmVkIGksIGssIG07CisKKyAgcC0+QmFzZSA9IDA7CisKKyAgZm9yIChpID0gMCwgayA9IDA7IGkgPCBQUE1EX05VTV9JTkRFWEVTOyBpKyspCisgIHsKKyAgICB1bnNpZ25lZCBzdGVwID0gKGkgPj0gMTIgPyA0IDogKGkgPj4gMikgKyAxKTsKKyAgICBkbyB7IHAtPlVuaXRzMkluZHhbaysrXSA9IChCeXRlKWk7IH0gd2hpbGUgKC0tc3RlcCk7CisgICAgcC0+SW5keDJVbml0c1tpXSA9IChCeXRlKWs7CisgIH0KKworICBwLT5OUzJCU0luZHhbMF0gPSAoMCA8PCAxKTsKKyAgcC0+TlMyQlNJbmR4WzFdID0gKDEgPDwgMSk7CisgIG1lbXNldChwLT5OUzJCU0luZHggKyAyLCAoMiA8PCAxKSwgOSk7CisgIG1lbXNldChwLT5OUzJCU0luZHggKyAxMSwgKDMgPDwgMSksIDI1NiAtIDExKTsKKworICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorICAgIHAtPk5TMkluZHhbaV0gPSAoQnl0ZSlpOworICBmb3IgKG0gPSBpLCBrID0gMTsgaSA8IDI2MDsgaSsrKQorICB7CisgICAgcC0+TlMySW5keFtpXSA9IChCeXRlKW07CisgICAgaWYgKC0tayA9PSAwKQorICAgICAgayA9ICgrK20pIC0gNDsKKyAgfQorfQorCit2b2lkIFBwbWQ4X0ZyZWUoQ1BwbWQ4ICpwKQoreworICBmcmVlKHAtPkJhc2UpOworICBwLT5TaXplID0gMDsKKyAgcC0+QmFzZSA9IDA7Cit9CisKK0Jvb2wgUHBtZDhfQWxsb2MoQ1BwbWQ4ICpwLCBVSW50MzIgc2l6ZSkKK3sKKyAgaWYgKHAtPkJhc2UgPT0gMCB8fCBwLT5TaXplICE9IHNpemUpCisgIHsKKyAgICBQcG1kOF9GcmVlKHApOworICAgIHAtPkFsaWduT2Zmc2V0ID0KKyAgICAgICNpZmRlZiBQUE1EXzMyQklUCisgICAgICAgICg0IC0gc2l6ZSkgJiAzOworICAgICAgI2Vsc2UKKyAgICAgICAgNCAtIChzaXplICYgMyk7CisgICAgICAjZW5kaWYKKyAgICBpZiAoKHAtPkJhc2UgPSAoQnl0ZSAqKW1hbGxvYyhwLT5BbGlnbk9mZnNldCArIHNpemUpKSA9PSAwKQorICAgICAgcmV0dXJuIEZhbHNlOworICAgIHAtPlNpemUgPSBzaXplOworICB9CisgIHJldHVybiBUcnVlOworfQorCitzdGF0aWMgdm9pZCBJbnNlcnROb2RlKENQcG1kOCAqcCwgdm9pZCAqbm9kZSwgdW5zaWduZWQgaW5keCkKK3sKKyAgKChDUHBtZDhfTm9kZSAqKW5vZGUpLT5TdGFtcCA9IEVNUFRZX05PREU7CisgICgoQ1BwbWQ4X05vZGUgKilub2RlKS0+TmV4dCA9IChDUHBtZDhfTm9kZV9SZWYpcC0+RnJlZUxpc3RbaW5keF07CisgICgoQ1BwbWQ4X05vZGUgKilub2RlKS0+TlUgPSBJMlUoaW5keCk7CisgIHAtPkZyZWVMaXN0W2luZHhdID0gUkVGKG5vZGUpOworICBwLT5TdGFtcHNbaW5keF0rKzsKK30KKworc3RhdGljIHZvaWQgKlJlbW92ZU5vZGUoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBpbmR4KQoreworICBDUHBtZDhfTm9kZSAqbm9kZSA9IE5PREUoKENQcG1kOF9Ob2RlX1JlZilwLT5GcmVlTGlzdFtpbmR4XSk7CisgIHAtPkZyZWVMaXN0W2luZHhdID0gbm9kZS0+TmV4dDsKKyAgcC0+U3RhbXBzW2luZHhdLS07CisgIHJldHVybiBub2RlOworfQorCitzdGF0aWMgdm9pZCBTcGxpdEJsb2NrKENQcG1kOCAqcCwgdm9pZCAqcHRyLCB1bnNpZ25lZCBvbGRJbmR4LCB1bnNpZ25lZCBuZXdJbmR4KQoreworICB1bnNpZ25lZCBpLCBudSA9IEkyVShvbGRJbmR4KSAtIEkyVShuZXdJbmR4KTsKKyAgcHRyID0gKEJ5dGUgKilwdHIgKyBVMkIoSTJVKG5ld0luZHgpKTsKKyAgaWYgKEkyVShpID0gVTJJKG51KSkgIT0gbnUpCisgIHsKKyAgICB1bnNpZ25lZCBrID0gSTJVKC0taSk7CisgICAgSW5zZXJ0Tm9kZShwLCAoKEJ5dGUgKilwdHIpICsgVTJCKGspLCBudSAtIGsgLSAxKTsKKyAgfQorICBJbnNlcnROb2RlKHAsIHB0ciwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIEdsdWVGcmVlQmxvY2tzKENQcG1kOCAqcCkKK3sKKyAgQ1BwbWQ4X05vZGVfUmVmIGhlYWQgPSAwOworICBDUHBtZDhfTm9kZV9SZWYgKnByZXYgPSAmaGVhZDsKKyAgdW5zaWduZWQgaTsKKworICBwLT5HbHVlQ291bnQgPSAxIDw8IDEzOworICBtZW1zZXQocC0+U3RhbXBzLCAwLCBzaXplb2YocC0+U3RhbXBzKSk7CisgIAorICAvKiBPcmRlci0wIGNvbnRleHQgaXMgYWx3YXlzIGF0IHRvcCBVTklULCBzbyB3ZSBkb24ndCBuZWVkIGd1YXJkIE5PREUgYXQgdGhlIGVuZC4KKyAgICAgQWxsIGJsb2NrcyB1cCB0byBwLT5Mb1VuaXQgY2FuIGJlIGZyZWUsIHNvIHdlIG5lZWQgZ3VhcmQgTk9ERSBhdCBMb1VuaXQuICovCisgIGlmIChwLT5Mb1VuaXQgIT0gcC0+SGlVbml0KQorICAgICgoQ1BwbWQ4X05vZGUgKilwLT5Mb1VuaXQpLT5TdGFtcCA9IDA7CisKKyAgLyogR2x1ZSBmcmVlIGJsb2NrcyAqLworICBmb3IgKGkgPSAwOyBpIDwgUFBNRF9OVU1fSU5ERVhFUzsgaSsrKQorICB7CisgICAgQ1BwbWQ4X05vZGVfUmVmIG5leHQgPSAoQ1BwbWQ4X05vZGVfUmVmKXAtPkZyZWVMaXN0W2ldOworICAgIHAtPkZyZWVMaXN0W2ldID0gMDsKKyAgICB3aGlsZSAobmV4dCAhPSAwKQorICAgIHsKKyAgICAgIENQcG1kOF9Ob2RlICpub2RlID0gTk9ERShuZXh0KTsKKyAgICAgIGlmIChub2RlLT5OVSAhPSAwKQorICAgICAgeworICAgICAgICBDUHBtZDhfTm9kZSAqbm9kZTI7CisgICAgICAgICpwcmV2ID0gbmV4dDsKKyAgICAgICAgcHJldiA9ICYobm9kZS0+TmV4dCk7CisgICAgICAgIHdoaWxlICgobm9kZTIgPSBub2RlICsgbm9kZS0+TlUpLT5TdGFtcCA9PSBFTVBUWV9OT0RFKQorICAgICAgICB7CisgICAgICAgICAgbm9kZS0+TlUgKz0gbm9kZTItPk5VOworICAgICAgICAgIG5vZGUyLT5OVSA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIG5leHQgPSBub2RlLT5OZXh0OworICAgIH0KKyAgfQorICAqcHJldiA9IDA7CisgIAorICAvKiBGaWxsIGxpc3RzIG9mIGZyZWUgYmxvY2tzICovCisgIHdoaWxlIChoZWFkICE9IDApCisgIHsKKyAgICBDUHBtZDhfTm9kZSAqbm9kZSA9IE5PREUoaGVhZCk7CisgICAgdW5zaWduZWQgbnU7CisgICAgaGVhZCA9IG5vZGUtPk5leHQ7CisgICAgbnUgPSBub2RlLT5OVTsKKyAgICBpZiAobnUgPT0gMCkKKyAgICAgIGNvbnRpbnVlOworICAgIGZvciAoOyBudSA+IDEyODsgbnUgLT0gMTI4LCBub2RlICs9IDEyOCkKKyAgICAgIEluc2VydE5vZGUocCwgbm9kZSwgUFBNRF9OVU1fSU5ERVhFUyAtIDEpOworICAgIGlmIChJMlUoaSA9IFUySShudSkpICE9IG51KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGsgPSBJMlUoLS1pKTsKKyAgICAgIEluc2VydE5vZGUocCwgbm9kZSArIGssIG51IC0gayAtIDEpOworICAgIH0KKyAgICBJbnNlcnROb2RlKHAsIG5vZGUsIGkpOworICB9Cit9CisKK3N0YXRpYyB2b2lkICpBbGxvY1VuaXRzUmFyZShDUHBtZDggKnAsIHVuc2lnbmVkIGluZHgpCit7CisgIHVuc2lnbmVkIGk7CisgIHZvaWQgKnJldFZhbDsKKyAgaWYgKHAtPkdsdWVDb3VudCA9PSAwKQorICB7CisgICAgR2x1ZUZyZWVCbG9ja3MocCk7CisgICAgaWYgKHAtPkZyZWVMaXN0W2luZHhdICE9IDApCisgICAgICByZXR1cm4gUmVtb3ZlTm9kZShwLCBpbmR4KTsKKyAgfQorICBpID0gaW5keDsKKyAgZG8KKyAgeworICAgIGlmICgrK2kgPT0gUFBNRF9OVU1fSU5ERVhFUykKKyAgICB7CisgICAgICBVSW50MzIgbnVtQnl0ZXMgPSBVMkIoSTJVKGluZHgpKTsKKyAgICAgIHAtPkdsdWVDb3VudC0tOworICAgICAgcmV0dXJuICgoVUludDMyKShwLT5Vbml0c1N0YXJ0IC0gcC0+VGV4dCkgPiBudW1CeXRlcykgPyAocC0+VW5pdHNTdGFydCAtPSBudW1CeXRlcykgOiAoTlVMTCk7CisgICAgfQorICB9CisgIHdoaWxlIChwLT5GcmVlTGlzdFtpXSA9PSAwKTsKKyAgcmV0VmFsID0gUmVtb3ZlTm9kZShwLCBpKTsKKyAgU3BsaXRCbG9jayhwLCByZXRWYWwsIGksIGluZHgpOworICByZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgdm9pZCAqQWxsb2NVbml0cyhDUHBtZDggKnAsIHVuc2lnbmVkIGluZHgpCit7CisgIFVJbnQzMiBudW1CeXRlczsKKyAgaWYgKHAtPkZyZWVMaXN0W2luZHhdICE9IDApCisgICAgcmV0dXJuIFJlbW92ZU5vZGUocCwgaW5keCk7CisgIG51bUJ5dGVzID0gVTJCKEkyVShpbmR4KSk7CisgIGlmIChudW1CeXRlcyA8PSAoVUludDMyKShwLT5IaVVuaXQgLSBwLT5Mb1VuaXQpKQorICB7CisgICAgdm9pZCAqcmV0VmFsID0gcC0+TG9Vbml0OworICAgIHAtPkxvVW5pdCArPSBudW1CeXRlczsKKyAgICByZXR1cm4gcmV0VmFsOworICB9CisgIHJldHVybiBBbGxvY1VuaXRzUmFyZShwLCBpbmR4KTsKK30KKworI2RlZmluZSBNeU1lbTEyQ3B5KGRlc3QsIHNyYywgbnVtKSBcCisgIHsgVUludDMyICpkID0gKFVJbnQzMiAqKWRlc3Q7IGNvbnN0IFVJbnQzMiAqeiA9IChjb25zdCBVSW50MzIgKilzcmM7IFVJbnQzMiBuID0gbnVtOyBcCisgICAgZG8geyBkWzBdID0gelswXTsgZFsxXSA9IHpbMV07IGRbMl0gPSB6WzJdOyB6ICs9IDM7IGQgKz0gMzsgfSB3aGlsZSAoLS1uKTsgfQorCitzdGF0aWMgdm9pZCAqU2hyaW5rVW5pdHMoQ1BwbWQ4ICpwLCB2b2lkICpvbGRQdHIsIHVuc2lnbmVkIG9sZE5VLCB1bnNpZ25lZCBuZXdOVSkKK3sKKyAgdW5zaWduZWQgaTAgPSBVMkkob2xkTlUpOworICB1bnNpZ25lZCBpMSA9IFUySShuZXdOVSk7CisgIGlmIChpMCA9PSBpMSkKKyAgICByZXR1cm4gb2xkUHRyOworICBpZiAocC0+RnJlZUxpc3RbaTFdICE9IDApCisgIHsKKyAgICB2b2lkICpwdHIgPSBSZW1vdmVOb2RlKHAsIGkxKTsKKyAgICBNeU1lbTEyQ3B5KHB0ciwgb2xkUHRyLCBuZXdOVSk7CisgICAgSW5zZXJ0Tm9kZShwLCBvbGRQdHIsIGkwKTsKKyAgICByZXR1cm4gcHRyOworICB9CisgIFNwbGl0QmxvY2socCwgb2xkUHRyLCBpMCwgaTEpOworICByZXR1cm4gb2xkUHRyOworfQorCitzdGF0aWMgdm9pZCBGcmVlVW5pdHMoQ1BwbWQ4ICpwLCB2b2lkICpwdHIsIHVuc2lnbmVkIG51KQoreworICBJbnNlcnROb2RlKHAsIHB0ciwgVTJJKG51KSk7Cit9CisKK3N0YXRpYyB2b2lkIFNwZWNpYWxGcmVlVW5pdChDUHBtZDggKnAsIHZvaWQgKnB0cikKK3sKKyAgaWYgKChCeXRlICopcHRyICE9IHAtPlVuaXRzU3RhcnQpCisgICAgSW5zZXJ0Tm9kZShwLCBwdHIsIDApOworICBlbHNlCisgIHsKKyAgICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgICAqKFVJbnQzMiAqKXB0ciA9IEVNUFRZX05PREU7IC8qIGl0J3MgdXNlZCBmb3IgKEZsYWdzID09IDB4RkYpIGNoZWNrIGluIFJlbW92ZUJpbkNvbnRleHRzICovCisgICAgI2VuZGlmCisgICAgcC0+VW5pdHNTdGFydCArPSBVTklUX1NJWkU7CisgIH0KK30KKworc3RhdGljIHZvaWQgKk1vdmVVbml0c1VwKENQcG1kOCAqcCwgdm9pZCAqb2xkUHRyLCB1bnNpZ25lZCBudSkKK3sKKyAgdW5zaWduZWQgaW5keCA9IFUySShudSk7CisgIHZvaWQgKnB0cjsKKyAgaWYgKChCeXRlICopb2xkUHRyID4gcC0+VW5pdHNTdGFydCArIDE2ICogMTAyNCB8fCBSRUYob2xkUHRyKSA+IHAtPkZyZWVMaXN0W2luZHhdKQorICAgIHJldHVybiBvbGRQdHI7CisgIHB0ciA9IFJlbW92ZU5vZGUocCwgaW5keCk7CisgIE15TWVtMTJDcHkocHRyLCBvbGRQdHIsIG51KTsKKyAgaWYgKChCeXRlKilvbGRQdHIgIT0gcC0+VW5pdHNTdGFydCkKKyAgICBJbnNlcnROb2RlKHAsIG9sZFB0ciwgaW5keCk7CisgIGVsc2UKKyAgICBwLT5Vbml0c1N0YXJ0ICs9IFUyQihJMlUoaW5keCkpOworICByZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCBFeHBhbmRUZXh0QXJlYShDUHBtZDggKnApCit7CisgIFVJbnQzMiBjb3VudFtQUE1EX05VTV9JTkRFWEVTXTsKKyAgdW5zaWduZWQgaTsKKyAgbWVtc2V0KGNvdW50LCAwLCBzaXplb2YoY291bnQpKTsKKyAgaWYgKHAtPkxvVW5pdCAhPSBwLT5IaVVuaXQpCisgICAgKChDUHBtZDhfTm9kZSAqKXAtPkxvVW5pdCktPlN0YW1wID0gMDsKKyAgCisgIHsKKyAgICBDUHBtZDhfTm9kZSAqbm9kZSA9IChDUHBtZDhfTm9kZSAqKXAtPlVuaXRzU3RhcnQ7CisgICAgZm9yICg7IG5vZGUtPlN0YW1wID09IEVNUFRZX05PREU7IG5vZGUgKz0gbm9kZS0+TlUpCisgICAgeworICAgICAgbm9kZS0+U3RhbXAgPSAwOworICAgICAgY291bnRbVTJJKG5vZGUtPk5VKV0rKzsKKyAgICB9CisgICAgcC0+VW5pdHNTdGFydCA9IChCeXRlICopbm9kZTsKKyAgfQorICAKKyAgZm9yIChpID0gMDsgaSA8IFBQTURfTlVNX0lOREVYRVM7IGkrKykKKyAgeworICAgIENQcG1kOF9Ob2RlX1JlZiAqbmV4dCA9IChDUHBtZDhfTm9kZV9SZWYgKikmcC0+RnJlZUxpc3RbaV07CisgICAgd2hpbGUgKGNvdW50W2ldICE9IDApCisgICAgeworICAgICAgQ1BwbWQ4X05vZGUgKm5vZGUgPSBOT0RFKCpuZXh0KTsKKyAgICAgIHdoaWxlIChub2RlLT5TdGFtcCA9PSAwKQorICAgICAgeworICAgICAgICAqbmV4dCA9IG5vZGUtPk5leHQ7CisgICAgICAgIG5vZGUgPSBOT0RFKCpuZXh0KTsKKyAgICAgICAgcC0+U3RhbXBzW2ldLS07CisgICAgICAgIGlmICgtLWNvdW50W2ldID09IDApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBuZXh0ID0gJm5vZGUtPk5leHQ7CisgICAgfQorICB9Cit9CisKKyNkZWZpbmUgU1VDQ0VTU09SKHApICgoQ1BwbWRfVm9pZF9SZWYpKChwKS0+U3VjY2Vzc29yTG93IHwgKChVSW50MzIpKHApLT5TdWNjZXNzb3JIaWdoIDw8IDE2KSkpCisKK3N0YXRpYyB2b2lkIFNldFN1Y2Nlc3NvcihDUHBtZF9TdGF0ZSAqcCwgQ1BwbWRfVm9pZF9SZWYgdikKK3sKKyAgKHApLT5TdWNjZXNzb3JMb3cgPSAoVUludDE2KSgoVUludDMyKSh2KSAmIDB4RkZGRik7CisgIChwKS0+U3VjY2Vzc29ySGlnaCA9IChVSW50MTYpKCgoVUludDMyKSh2KSA+PiAxNikgJiAweEZGRkYpOworfQorCisjZGVmaW5lIFJFU0VUX1RFWFQob2ZmcykgeyBwLT5UZXh0ID0gcC0+QmFzZSArIHAtPkFsaWduT2Zmc2V0ICsgKG9mZnMpOyB9CisKK3N0YXRpYyB2b2lkIFJlc3RhcnRNb2RlbChDUHBtZDggKnApCit7CisgIHVuc2lnbmVkIGksIGssIG0sIHI7CisKKyAgbWVtc2V0KHAtPkZyZWVMaXN0LCAwLCBzaXplb2YocC0+RnJlZUxpc3QpKTsKKyAgbWVtc2V0KHAtPlN0YW1wcywgMCwgc2l6ZW9mKHAtPlN0YW1wcykpOworICBSRVNFVF9URVhUKDApOworICBwLT5IaVVuaXQgPSBwLT5UZXh0ICsgcC0+U2l6ZTsKKyAgcC0+TG9Vbml0ID0gcC0+VW5pdHNTdGFydCA9IHAtPkhpVW5pdCAtIHAtPlNpemUgLyA4IC8gVU5JVF9TSVpFICogNyAqIFVOSVRfU0laRTsKKyAgcC0+R2x1ZUNvdW50ID0gMDsKKworICBwLT5PcmRlckZhbGwgPSBwLT5NYXhPcmRlcjsKKyAgcC0+UnVuTGVuZ3RoID0gcC0+SW5pdFJMID0gLShJbnQzMikoKHAtPk1heE9yZGVyIDwgMTIpID8gcC0+TWF4T3JkZXIgOiAxMikgLSAxOworICBwLT5QcmV2U3VjY2VzcyA9IDA7CisKKyAgcC0+TWluQ29udGV4dCA9IHAtPk1heENvbnRleHQgPSAoQ1RYX1BUUikocC0+SGlVbml0IC09IFVOSVRfU0laRSk7IC8qIEFsbG9jQ29udGV4dChwKTsgKi8KKyAgcC0+TWluQ29udGV4dC0+U3VmZml4ID0gMDsKKyAgcC0+TWluQ29udGV4dC0+TnVtU3RhdHMgPSAyNTU7CisgIHAtPk1pbkNvbnRleHQtPkZsYWdzID0gMDsKKyAgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgPSAyNTYgKyAxOworICBwLT5Gb3VuZFN0YXRlID0gKENQcG1kX1N0YXRlICopcC0+TG9Vbml0OyAvKiBBbGxvY1VuaXRzKHAsIFBQTURfTlVNX0lOREVYRVMgLSAxKTsgKi8KKyAgcC0+TG9Vbml0ICs9IFUyQigyNTYgLyAyKTsKKyAgcC0+TWluQ29udGV4dC0+U3RhdHMgPSBSRUYocC0+Rm91bmRTdGF0ZSk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgeworICAgIENQcG1kX1N0YXRlICpzID0gJnAtPkZvdW5kU3RhdGVbaV07CisgICAgcy0+U3ltYm9sID0gKEJ5dGUpaTsKKyAgICBzLT5GcmVxID0gMTsKKyAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgIH0KKworICBmb3IgKGkgPSBtID0gMDsgbSA8IDI1OyBtKyspCisgIHsKKyAgICB3aGlsZSAocC0+TlMySW5keFtpXSA9PSBtKQorICAgICAgaSsrOworICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspCisgICAgeworICAgICAgVUludDE2IHZhbCA9IChVSW50MTYpKFBQTURfQklOX1NDQUxFIC0ga0luaXRCaW5Fc2Nba10gLyAoaSArIDEpKTsKKyAgICAgIFVJbnQxNiAqZGVzdCA9IHAtPkJpblN1bW1bbV0gKyBrOworICAgICAgZm9yIChyID0gMDsgciA8IDY0OyByICs9IDgpCisgICAgICAgIGRlc3Rbcl0gPSB2YWw7CisgICAgfQorICB9CisKKyAgZm9yIChpID0gbSA9IDA7IG0gPCAyNDsgbSsrKQorICB7CisgICAgd2hpbGUgKHAtPk5TMkluZHhbaSArIDNdID09IG0gKyAzKQorICAgICAgaSsrOworICAgIGZvciAoayA9IDA7IGsgPCAzMjsgaysrKQorICAgIHsKKyAgICAgIENQcG1kX1NlZSAqcyA9ICZwLT5TZWVbbV1ba107CisgICAgICBzLT5TdW1tID0gKFVJbnQxNikoKDIgKiBpICsgNSkgPDwgKHMtPlNoaWZ0ID0gUFBNRF9QRVJJT0RfQklUUyAtIDQpKTsKKyAgICAgIHMtPkNvdW50ID0gNzsKKyAgICB9CisgIH0KK30KKwordm9pZCBQcG1kOF9Jbml0KENQcG1kOCAqcCwgdW5zaWduZWQgbWF4T3JkZXIsIHVuc2lnbmVkIHJlc3RvcmVNZXRob2QpCit7CisgIHAtPk1heE9yZGVyID0gbWF4T3JkZXI7CisgIHAtPlJlc3RvcmVNZXRob2QgPSByZXN0b3JlTWV0aG9kOworICBSZXN0YXJ0TW9kZWwocCk7CisgIHAtPkR1bW15U2VlLlNoaWZ0ID0gUFBNRF9QRVJJT0RfQklUUzsKKyAgcC0+RHVtbXlTZWUuU3VtbSA9IDA7IC8qIHVudXNlZCAqLworICBwLT5EdW1teVNlZS5Db3VudCA9IDY0OyAvKiB1bnVzZWQgKi8KK30KKworc3RhdGljIHZvaWQgUmVmcmVzaChDUHBtZDggKnAsIENUWF9QVFIgY3R4LCB1bnNpZ25lZCBvbGROVSwgdW5zaWduZWQgc2NhbGUpCit7CisgIHVuc2lnbmVkIGkgPSBjdHgtPk51bVN0YXRzLCBlc2NGcmVxLCBzdW1GcmVxLCBmbGFnczsKKyAgQ1BwbWRfU3RhdGUgKnMgPSAoQ1BwbWRfU3RhdGUgKilTaHJpbmtVbml0cyhwLCBTVEFUUyhjdHgpLCBvbGROVSwgKGkgKyAyKSA+PiAxKTsKKyAgY3R4LT5TdGF0cyA9IFJFRihzKTsKKyAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgIC8qIGZpeGVkIG92ZXIgU2hrYXJpbidzIGNvZGUuIEZpeGVkIGNvZGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvcmlnaW5hbCBjb2RlIGZvciBzb21lIGZpbGVzIGluIEZSRUVaRSBtb2RlLiAqLworICBzY2FsZSB8PSAoY3R4LT5TdW1tRnJlcSA+PSAoKFVJbnQzMikxIDw8IDE1KSk7CisgICNlbmRpZgorICBmbGFncyA9IChjdHgtPkZsYWdzICYgKDB4MTAgKyAweDA0ICogc2NhbGUpKSArIDB4MDggKiAocy0+U3ltYm9sID49IDB4NDApOworICBlc2NGcmVxID0gY3R4LT5TdW1tRnJlcSAtIHMtPkZyZXE7CisgIHN1bUZyZXEgPSAocy0+RnJlcSA9IChCeXRlKSgocy0+RnJlcSArIHNjYWxlKSA+PiBzY2FsZSkpOworICBkbworICB7CisgICAgZXNjRnJlcSAtPSAoKytzKS0+RnJlcTsKKyAgICBzdW1GcmVxICs9IChzLT5GcmVxID0gKEJ5dGUpKChzLT5GcmVxICsgc2NhbGUpID4+IHNjYWxlKSk7CisgICAgZmxhZ3MgfD0gMHgwOCAqIChzLT5TeW1ib2wgPj0gMHg0MCk7CisgIH0KKyAgd2hpbGUgKC0taSk7CisgIGN0eC0+U3VtbUZyZXEgPSAoVUludDE2KShzdW1GcmVxICsgKChlc2NGcmVxICsgc2NhbGUpID4+IHNjYWxlKSk7CisgIGN0eC0+RmxhZ3MgPSAoQnl0ZSlmbGFnczsKK30KKworc3RhdGljIHZvaWQgU3dhcFN0YXRlcyhDUHBtZF9TdGF0ZSAqdDEsIENQcG1kX1N0YXRlICp0MikKK3sKKyAgQ1BwbWRfU3RhdGUgdG1wID0gKnQxOworICAqdDEgPSAqdDI7CisgICp0MiA9IHRtcDsKK30KKworc3RhdGljIENQcG1kX1ZvaWRfUmVmIEN1dE9mZihDUHBtZDggKnAsIENUWF9QVFIgY3R4LCB1bnNpZ25lZCBvcmRlcikKK3sKKyAgaW50IGk7CisgIHVuc2lnbmVkIHRtcDsKKyAgQ1BwbWRfU3RhdGUgKnM7CisgIAorICBpZiAoIWN0eC0+TnVtU3RhdHMpCisgIHsKKyAgICBzID0gT05FX1NUQVRFKGN0eCk7CisgICAgaWYgKChCeXRlICopUHBtZDhfR2V0UHRyKHAsIFNVQ0NFU1NPUihzKSkgPj0gcC0+VW5pdHNTdGFydCkKKyAgICB7CisgICAgICBpZiAob3JkZXIgPCBwLT5NYXhPcmRlcikKKyAgICAgICAgU2V0U3VjY2Vzc29yKHMsIEN1dE9mZihwLCBDVFgoU1VDQ0VTU09SKHMpKSwgb3JkZXIgKyAxKSk7CisgICAgICBlbHNlCisgICAgICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgICAgIGlmIChTVUNDRVNTT1IocykgfHwgb3JkZXIgPD0gOSkgLyogT19CT1VORCAqLworICAgICAgICByZXR1cm4gUkVGKGN0eCk7CisgICAgfQorICAgIFNwZWNpYWxGcmVlVW5pdChwLCBjdHgpOworICAgIHJldHVybiAwOworICB9CisKKyAgY3R4LT5TdGF0cyA9IFNUQVRTX1JFRihNb3ZlVW5pdHNVcChwLCBTVEFUUyhjdHgpLCB0bXAgPSAoKHVuc2lnbmVkKWN0eC0+TnVtU3RhdHMgKyAyKSA+PiAxKSk7CisKKyAgZm9yIChzID0gU1RBVFMoY3R4KSArIChpID0gY3R4LT5OdW1TdGF0cyk7IHMgPj0gU1RBVFMoY3R4KTsgcy0tKQorICAgIGlmICgoQnl0ZSAqKVBwbWQ4X0dldFB0cihwLCBTVUNDRVNTT1IocykpIDwgcC0+VW5pdHNTdGFydCkKKyAgICB7CisgICAgICBDUHBtZF9TdGF0ZSAqczIgPSBTVEFUUyhjdHgpICsgKGktLSk7CisgICAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgICAgICBTd2FwU3RhdGVzKHMsIHMyKTsKKyAgICB9CisgICAgZWxzZSBpZiAob3JkZXIgPCBwLT5NYXhPcmRlcikKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCBDdXRPZmYocCwgQ1RYKFNVQ0NFU1NPUihzKSksIG9yZGVyICsgMSkpOworICAgIGVsc2UKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgICAKKyAgaWYgKGkgIT0gY3R4LT5OdW1TdGF0cyAmJiBvcmRlcikKKyAgeworICAgIGN0eC0+TnVtU3RhdHMgPSAoQnl0ZSlpOworICAgIHMgPSBTVEFUUyhjdHgpOworICAgIGlmIChpIDwgMCkKKyAgICB7CisgICAgICBGcmVlVW5pdHMocCwgcywgdG1wKTsKKyAgICAgIFNwZWNpYWxGcmVlVW5pdChwLCBjdHgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChpID09IDApCisgICAgeworICAgICAgY3R4LT5GbGFncyA9IChCeXRlKSgoY3R4LT5GbGFncyAmIDB4MTApICsgMHgwOCAqIChzLT5TeW1ib2wgPj0gMHg0MCkpOworICAgICAgKk9ORV9TVEFURShjdHgpID0gKnM7CisgICAgICBGcmVlVW5pdHMocCwgcywgdG1wKTsKKyAgICAgIC8qIDkuMzE6IHRoZSBjb2RlIHdhcyBmaXhlZC4gSXQncyB3YXMgbm90IEJVRywgaWYgRnJlcSA8PSBNQVhfRlJFUSA9IDEyNCAqLworICAgICAgT05FX1NUQVRFKGN0eCktPkZyZXEgPSAoQnl0ZSkoKCh1bnNpZ25lZClPTkVfU1RBVEUoY3R4KS0+RnJlcSArIDExKSA+PiAzKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgUmVmcmVzaChwLCBjdHgsIHRtcCwgY3R4LT5TdW1tRnJlcSA+IDE2ICogaSk7CisgIH0KKyAgcmV0dXJuIFJFRihjdHgpOworfQorCisjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKK3N0YXRpYyBDUHBtZF9Wb2lkX1JlZiBSZW1vdmVCaW5Db250ZXh0cyhDUHBtZDggKnAsIENUWF9QVFIgY3R4LCB1bnNpZ25lZCBvcmRlcikKK3sKKyAgQ1BwbWRfU3RhdGUgKnM7CisgIGlmICghY3R4LT5OdW1TdGF0cykKKyAgeworICAgIHMgPSBPTkVfU1RBVEUoY3R4KTsKKyAgICBpZiAoKEJ5dGUgKilQcG1kOF9HZXRQdHIocCwgU1VDQ0VTU09SKHMpKSA+PSBwLT5Vbml0c1N0YXJ0ICYmIG9yZGVyIDwgcC0+TWF4T3JkZXIpCisgICAgICBTZXRTdWNjZXNzb3IocywgUmVtb3ZlQmluQ29udGV4dHMocCwgQ1RYKFNVQ0NFU1NPUihzKSksIG9yZGVyICsgMSkpOworICAgIGVsc2UKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgICAvKiBTdWZmaXggY29udGV4dCBjYW4gYmUgcmVtb3ZlZCBhbHJlYWR5LCBzaW5jZSBkaWZmZXJlbnQgKGhpZ2gtb3JkZXIpCisgICAgICAgU3VjY2Vzc29ycyBtYXkgcmVmZXIgdG8gc2FtZSBjb250ZXh0LiBTbyB3ZSBjaGVjayBGbGFncyA9PSAweEZGIChTdGFtcCA9PSBFTVBUWV9OT0RFKSAqLworICAgIGlmICghU1VDQ0VTU09SKHMpICYmICghU1VGRklYKGN0eCktPk51bVN0YXRzIHx8IFNVRkZJWChjdHgpLT5GbGFncyA9PSAweEZGKSkKKyAgICB7CisgICAgICBGcmVlVW5pdHMocCwgY3R4LCAxKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gUkVGKGN0eCk7CisgIH0KKworICBmb3IgKHMgPSBTVEFUUyhjdHgpICsgY3R4LT5OdW1TdGF0czsgcyA+PSBTVEFUUyhjdHgpOyBzLS0pCisgICAgaWYgKChCeXRlICopUHBtZDhfR2V0UHRyKHAsIFNVQ0NFU1NPUihzKSkgPj0gcC0+VW5pdHNTdGFydCAmJiBvcmRlciA8IHAtPk1heE9yZGVyKQorICAgICAgU2V0U3VjY2Vzc29yKHMsIFJlbW92ZUJpbkNvbnRleHRzKHAsIENUWChTVUNDRVNTT1IocykpLCBvcmRlciArIDEpKTsKKyAgICBlbHNlCisgICAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgIAorICByZXR1cm4gUkVGKGN0eCk7Cit9CisjZW5kaWYKKworc3RhdGljIFVJbnQzMiBHZXRVc2VkTWVtb3J5KGNvbnN0IENQcG1kOCAqcCkKK3sKKyAgVUludDMyIHYgPSAwOworICB1bnNpZ25lZCBpOworICBmb3IgKGkgPSAwOyBpIDwgUFBNRF9OVU1fSU5ERVhFUzsgaSsrKQorICAgIHYgKz0gcC0+U3RhbXBzW2ldICogSTJVKGkpOworICByZXR1cm4gcC0+U2l6ZSAtIChVSW50MzIpKHAtPkhpVW5pdCAtIHAtPkxvVW5pdCkgLSAoVUludDMyKShwLT5Vbml0c1N0YXJ0IC0gcC0+VGV4dCkgLSBVMkIodik7Cit9CisKKyNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAjZGVmaW5lIFJFU1RPUkVfTU9ERUwoYzEsIGZTdWNjZXNzb3IpIFJlc3RvcmVNb2RlbChwLCBjMSwgZlN1Y2Nlc3NvcikKKyNlbHNlCisgICNkZWZpbmUgUkVTVE9SRV9NT0RFTChjMSwgZlN1Y2Nlc3NvcikgUmVzdG9yZU1vZGVsKHAsIGMxKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIFJlc3RvcmVNb2RlbChDUHBtZDggKnAsIENUWF9QVFIgYzEKKyAgICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgICAsIENUWF9QVFIgZlN1Y2Nlc3NvcgorICAgICNlbmRpZgorICAgICkKK3sKKyAgQ1RYX1BUUiBjOworICBDUHBtZF9TdGF0ZSAqczsKKyAgUkVTRVRfVEVYVCgwKTsKKyAgZm9yIChjID0gcC0+TWF4Q29udGV4dDsgYyAhPSBjMTsgYyA9IFNVRkZJWChjKSkKKyAgICBpZiAoLS0oYy0+TnVtU3RhdHMpID09IDApCisgICAgeworICAgICAgcyA9IFNUQVRTKGMpOworICAgICAgYy0+RmxhZ3MgPSAoQnl0ZSkoKGMtPkZsYWdzICYgMHgxMCkgKyAweDA4ICogKHMtPlN5bWJvbCA+PSAweDQwKSk7CisgICAgICAqT05FX1NUQVRFKGMpID0gKnM7CisgICAgICBTcGVjaWFsRnJlZVVuaXQocCwgcyk7CisgICAgICBPTkVfU1RBVEUoYyktPkZyZXEgPSAoQnl0ZSkoKCh1bnNpZ25lZClPTkVfU1RBVEUoYyktPkZyZXEgKyAxMSkgPj4gMyk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIFJlZnJlc2gocCwgYywgKGMtPk51bVN0YXRzKzMpID4+IDEsIDApOworIAorICBmb3IgKDsgYyAhPSBwLT5NaW5Db250ZXh0OyBjID0gU1VGRklYKGMpKQorICAgIGlmICghYy0+TnVtU3RhdHMpCisgICAgICBPTkVfU1RBVEUoYyktPkZyZXEgPSAoQnl0ZSkoT05FX1NUQVRFKGMpLT5GcmVxIC0gKE9ORV9TVEFURShjKS0+RnJlcSA+PiAxKSk7CisgICAgZWxzZSBpZiAoKGMtPlN1bW1GcmVxICs9IDQpID4gMTI4ICsgNCAqIGMtPk51bVN0YXRzKQorICAgICAgUmVmcmVzaChwLCBjLCAoYy0+TnVtU3RhdHMgKyAyKSA+PiAxLCAxKTsKKworICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgaWYgKHAtPlJlc3RvcmVNZXRob2QgPiBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUpCisgIHsKKyAgICBwLT5NYXhDb250ZXh0ID0gZlN1Y2Nlc3NvcjsKKyAgICBwLT5HbHVlQ291bnQgKz0gIShwLT5TdGFtcHNbMV0gJiAxKTsKKyAgfQorICBlbHNlIGlmIChwLT5SZXN0b3JlTWV0aG9kID09IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRSkKKyAgeworICAgIHdoaWxlIChwLT5NYXhDb250ZXh0LT5TdWZmaXgpCisgICAgICBwLT5NYXhDb250ZXh0ID0gU1VGRklYKHAtPk1heENvbnRleHQpOworICAgIFJlbW92ZUJpbkNvbnRleHRzKHAsIHAtPk1heENvbnRleHQsIDApOworICAgIHAtPlJlc3RvcmVNZXRob2QrKzsKKyAgICBwLT5HbHVlQ291bnQgPSAwOworICAgIHAtPk9yZGVyRmFsbCA9IHAtPk1heE9yZGVyOworICB9CisgIGVsc2UKKyAgI2VuZGlmCisgIGlmIChwLT5SZXN0b3JlTWV0aG9kID09IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX1JFU1RBUlQgfHwgR2V0VXNlZE1lbW9yeShwKSA8IChwLT5TaXplID4+IDEpKQorICAgIFJlc3RhcnRNb2RlbChwKTsKKyAgZWxzZQorICB7CisgICAgd2hpbGUgKHAtPk1heENvbnRleHQtPlN1ZmZpeCkKKyAgICAgIHAtPk1heENvbnRleHQgPSBTVUZGSVgocC0+TWF4Q29udGV4dCk7CisgICAgZG8KKyAgICB7CisgICAgICBDdXRPZmYocCwgcC0+TWF4Q29udGV4dCwgMCk7CisgICAgICBFeHBhbmRUZXh0QXJlYShwKTsKKyAgICB9CisgICAgd2hpbGUgKEdldFVzZWRNZW1vcnkocCkgPiAzICogKHAtPlNpemUgPj4gMikpOworICAgIHAtPkdsdWVDb3VudCA9IDA7CisgICAgcC0+T3JkZXJGYWxsID0gcC0+TWF4T3JkZXI7CisgIH0KK30KKworc3RhdGljIENUWF9QVFIgQ3JlYXRlU3VjY2Vzc29ycyhDUHBtZDggKnAsIEJvb2wgc2tpcCwgQ1BwbWRfU3RhdGUgKnMxLCBDVFhfUFRSIGMpCit7CisgIENQcG1kX1N0YXRlIHVwU3RhdGU7CisgIEJ5dGUgZmxhZ3M7CisgIENQcG1kX0J5dGVfUmVmIHVwQnJhbmNoID0gKENQcG1kX0J5dGVfUmVmKVNVQ0NFU1NPUihwLT5Gb3VuZFN0YXRlKTsKKyAgLyogZml4ZWQgb3ZlciBTaGthcmluJ3MgY29kZS4gTWF5YmUgaXQgY291bGQgd29yayB3aXRob3V0ICsgMSB0b28uICovCisgIENQcG1kX1N0YXRlICpwc1tQUE1EOF9NQVhfT1JERVIgKyAxXTsKKyAgdW5zaWduZWQgbnVtUHMgPSAwOworICAKKyAgaWYgKCFza2lwKQorICAgIHBzW251bVBzKytdID0gcC0+Rm91bmRTdGF0ZTsKKyAgCisgIHdoaWxlIChjLT5TdWZmaXgpCisgIHsKKyAgICBDUHBtZF9Wb2lkX1JlZiBzdWNjZXNzb3I7CisgICAgQ1BwbWRfU3RhdGUgKnM7CisgICAgYyA9IFNVRkZJWChjKTsKKyAgICBpZiAoczEpCisgICAgeworICAgICAgcyA9IHMxOworICAgICAgczEgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChjLT5OdW1TdGF0cyAhPSAwKQorICAgIHsKKyAgICAgIGZvciAocyA9IFNUQVRTKGMpOyBzLT5TeW1ib2wgIT0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sOyBzKyspOworICAgICAgaWYgKHMtPkZyZXEgPCBNQVhfRlJFUSAtIDkpCisgICAgICB7CisgICAgICAgIHMtPkZyZXErKzsKKyAgICAgICAgYy0+U3VtbUZyZXErKzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHMgPSBPTkVfU1RBVEUoYyk7CisgICAgICBzLT5GcmVxID0gKEJ5dGUpKHMtPkZyZXEgKyAoIVNVRkZJWChjKS0+TnVtU3RhdHMgJiAocy0+RnJlcSA8IDI0KSkpOworICAgIH0KKyAgICBzdWNjZXNzb3IgPSBTVUNDRVNTT1Iocyk7CisgICAgaWYgKHN1Y2Nlc3NvciAhPSB1cEJyYW5jaCkKKyAgICB7CisgICAgICBjID0gQ1RYKHN1Y2Nlc3Nvcik7CisgICAgICBpZiAobnVtUHMgPT0gMCkKKyAgICAgICAgcmV0dXJuIGM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgcHNbbnVtUHMrK10gPSBzOworICB9CisgIAorICB1cFN0YXRlLlN5bWJvbCA9ICooY29uc3QgQnl0ZSAqKVBwbWQ4X0dldFB0cihwLCB1cEJyYW5jaCk7CisgIFNldFN1Y2Nlc3NvcigmdXBTdGF0ZSwgdXBCcmFuY2ggKyAxKTsKKyAgZmxhZ3MgPSAoQnl0ZSkoMHgxMCAqIChwLT5Gb3VuZFN0YXRlLT5TeW1ib2wgPj0gMHg0MCkgKyAweDA4ICogKHVwU3RhdGUuU3ltYm9sID49IDB4NDApKTsKKworICBpZiAoYy0+TnVtU3RhdHMgPT0gMCkKKyAgICB1cFN0YXRlLkZyZXEgPSBPTkVfU1RBVEUoYyktPkZyZXE7CisgIGVsc2UKKyAgeworICAgIFVJbnQzMiBjZiwgczA7CisgICAgQ1BwbWRfU3RhdGUgKnM7CisgICAgZm9yIChzID0gU1RBVFMoYyk7IHMtPlN5bWJvbCAhPSB1cFN0YXRlLlN5bWJvbDsgcysrKTsKKyAgICBjZiA9IHMtPkZyZXEgLSAxOworICAgIHMwID0gYy0+U3VtbUZyZXEgLSBjLT5OdW1TdGF0cyAtIGNmOworICAgIHVwU3RhdGUuRnJlcSA9IChCeXRlKSgxICsgKCgyICogY2YgPD0gczApID8gKDUgKiBjZiA+IHMwKSA6ICgoY2YgKyAyICogczAgLSAzKSAvIHMwKSkpOworICB9CisKKyAgZG8KKyAgeworICAgIC8qIENyZWF0ZSBDaGlsZCAqLworICAgIENUWF9QVFIgYzE7IC8qID0gQWxsb2NDb250ZXh0KHApOyAqLworICAgIGlmIChwLT5IaVVuaXQgIT0gcC0+TG9Vbml0KQorICAgICAgYzEgPSAoQ1RYX1BUUikocC0+SGlVbml0IC09IFVOSVRfU0laRSk7CisgICAgZWxzZSBpZiAocC0+RnJlZUxpc3RbMF0gIT0gMCkKKyAgICAgIGMxID0gKENUWF9QVFIpUmVtb3ZlTm9kZShwLCAwKTsKKyAgICBlbHNlCisgICAgeworICAgICAgYzEgPSAoQ1RYX1BUUilBbGxvY1VuaXRzUmFyZShwLCAwKTsKKyAgICAgIGlmICghYzEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjMS0+TnVtU3RhdHMgPSAwOworICAgIGMxLT5GbGFncyA9IGZsYWdzOworICAgICpPTkVfU1RBVEUoYzEpID0gdXBTdGF0ZTsKKyAgICBjMS0+U3VmZml4ID0gUkVGKGMpOworICAgIFNldFN1Y2Nlc3Nvcihwc1stLW51bVBzXSwgUkVGKGMxKSk7CisgICAgYyA9IGMxOworICB9CisgIHdoaWxlIChudW1QcyAhPSAwKTsKKyAgCisgIHJldHVybiBjOworfQorCitzdGF0aWMgQ1RYX1BUUiBSZWR1Y2VPcmRlcihDUHBtZDggKnAsIENQcG1kX1N0YXRlICpzMSwgQ1RYX1BUUiBjKQoreworICBDUHBtZF9TdGF0ZSAqcyA9IE5VTEw7CisgIENUWF9QVFIgYzEgPSBjOworICBDUHBtZF9Wb2lkX1JlZiB1cEJyYW5jaCA9IFJFRihwLT5UZXh0KTsKKyAgCisgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAvKiBUaGUgQlVHIGluIFNoa2FyaW4ncyBjb2RlIHdhcyBmaXhlZDogcHMgY291bGQgb3ZlcmZsb3cgaW4gQ1VUX09GRiBtb2RlLiAqLworICBDUHBtZF9TdGF0ZSAqcHNbUFBNRDhfTUFYX09SREVSICsgMV07CisgIHVuc2lnbmVkIG51bVBzID0gMDsKKyAgcHNbbnVtUHMrK10gPSBwLT5Gb3VuZFN0YXRlOworICAjZW5kaWYKKworICBTZXRTdWNjZXNzb3IocC0+Rm91bmRTdGF0ZSwgdXBCcmFuY2gpOworICBwLT5PcmRlckZhbGwrKzsKKworICBmb3IgKDs7KQorICB7CisgICAgaWYgKHMxKQorICAgIHsKKyAgICAgIGMgPSBTVUZGSVgoYyk7CisgICAgICBzID0gczE7CisgICAgICBzMSA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIWMtPlN1ZmZpeCkKKyAgICAgIHsKKyAgICAgICAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICAgICAgIGlmIChwLT5SZXN0b3JlTWV0aG9kID4gUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFKQorICAgICAgICB7CisgICAgICAgICAgZG8geyBTZXRTdWNjZXNzb3IocHNbLS1udW1Qc10sIFJFRihjKSk7IH0gd2hpbGUgKG51bVBzKTsKKyAgICAgICAgICBSRVNFVF9URVhUKDEpOworICAgICAgICAgIHAtPk9yZGVyRmFsbCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgIHJldHVybiBjOworICAgICAgfQorICAgICAgYyA9IFNVRkZJWChjKTsKKyAgICAgIGlmIChjLT5OdW1TdGF0cykKKyAgICAgIHsKKyAgICAgICAgaWYgKChzID0gU1RBVFMoYykpLT5TeW1ib2wgIT0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sKQorICAgICAgICAgIGRvIHsgcysrOyB9IHdoaWxlIChzLT5TeW1ib2wgIT0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sKTsKKyAgICAgICAgaWYgKHMtPkZyZXEgPCBNQVhfRlJFUSAtIDkpCisgICAgICAgIHsKKyAgICAgICAgICBzLT5GcmVxICs9IDI7CisgICAgICAgICAgYy0+U3VtbUZyZXEgKz0gMjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBzID0gT05FX1NUQVRFKGMpOworICAgICAgICBzLT5GcmVxID0gKEJ5dGUpKHMtPkZyZXEgKyAocy0+RnJlcSA8IDMyKSk7CisgICAgICB9CisgICAgfQorICAgIGlmIChTVUNDRVNTT1IocykpCisgICAgICBicmVhazsKKyAgICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgICBwc1tudW1QcysrXSA9IHM7CisgICAgI2VuZGlmCisgICAgU2V0U3VjY2Vzc29yKHMsIHVwQnJhbmNoKTsKKyAgICBwLT5PcmRlckZhbGwrKzsKKyAgfQorICAKKyAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgIGlmIChwLT5SZXN0b3JlTWV0aG9kID4gUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFKQorICB7CisgICAgYyA9IENUWChTVUNDRVNTT1IocykpOworICAgIGRvIHsgU2V0U3VjY2Vzc29yKHBzWy0tbnVtUHNdLCBSRUYoYykpOyB9IHdoaWxlIChudW1Qcyk7CisgICAgUkVTRVRfVEVYVCgxKTsKKyAgICBwLT5PcmRlckZhbGwgPSAxOworICAgIHJldHVybiBjOworICB9CisgIGVsc2UKKyAgI2VuZGlmCisgIGlmIChTVUNDRVNTT1IocykgPD0gdXBCcmFuY2gpCisgIHsKKyAgICBDVFhfUFRSIHN1Y2Nlc3NvcjsKKyAgICBDUHBtZF9TdGF0ZSAqczIgPSBwLT5Gb3VuZFN0YXRlOworICAgIHAtPkZvdW5kU3RhdGUgPSBzOworCisgICAgc3VjY2Vzc29yID0gQ3JlYXRlU3VjY2Vzc29ycyhwLCBGYWxzZSwgTlVMTCwgYyk7CisgICAgaWYgKHN1Y2Nlc3NvciA9PSBOVUxMKQorICAgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICAgIGVsc2UKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCBSRUYoc3VjY2Vzc29yKSk7CisgICAgcC0+Rm91bmRTdGF0ZSA9IHMyOworICB9CisgIAorICBpZiAocC0+T3JkZXJGYWxsID09IDEgJiYgYzEgPT0gcC0+TWF4Q29udGV4dCkKKyAgeworICAgIFNldFN1Y2Nlc3NvcihwLT5Gb3VuZFN0YXRlLCBTVUNDRVNTT1IocykpOworICAgIHAtPlRleHQtLTsKKyAgfQorICBpZiAoU1VDQ0VTU09SKHMpID09IDApCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiBDVFgoU1VDQ0VTU09SKHMpKTsKK30KKworc3RhdGljIHZvaWQgVXBkYXRlTW9kZWwoQ1BwbWQ4ICpwKQoreworICBDUHBtZF9Wb2lkX1JlZiBzdWNjZXNzb3IsIGZTdWNjZXNzb3IgPSBTVUNDRVNTT1IocC0+Rm91bmRTdGF0ZSk7CisgIENUWF9QVFIgYzsKKyAgdW5zaWduZWQgczAsIG5zLCBmRnJlcSA9IHAtPkZvdW5kU3RhdGUtPkZyZXE7CisgIEJ5dGUgZmxhZywgZlN5bWJvbCA9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbDsKKyAgQ1BwbWRfU3RhdGUgKnMgPSBOVUxMOworICAKKyAgaWYgKHAtPkZvdW5kU3RhdGUtPkZyZXEgPCBNQVhfRlJFUSAvIDQgJiYgcC0+TWluQ29udGV4dC0+U3VmZml4ICE9IDApCisgIHsKKyAgICBjID0gU1VGRklYKHAtPk1pbkNvbnRleHQpOworICAgIAorICAgIGlmIChjLT5OdW1TdGF0cyA9PSAwKQorICAgIHsKKyAgICAgIHMgPSBPTkVfU1RBVEUoYyk7CisgICAgICBpZiAocy0+RnJlcSA8IDMyKQorICAgICAgICBzLT5GcmVxKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzID0gU1RBVFMoYyk7CisgICAgICBpZiAocy0+U3ltYm9sICE9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbCkKKyAgICAgIHsKKyAgICAgICAgZG8geyBzKys7IH0gd2hpbGUgKHMtPlN5bWJvbCAhPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2wpOworICAgICAgICBpZiAoc1swXS5GcmVxID49IHNbLTFdLkZyZXEpCisgICAgICAgIHsKKyAgICAgICAgICBTd2FwU3RhdGVzKCZzWzBdLCAmc1stMV0pOworICAgICAgICAgIHMtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHMtPkZyZXEgPCBNQVhfRlJFUSAtIDkpCisgICAgICB7CisgICAgICAgIHMtPkZyZXEgKz0gMjsKKyAgICAgICAgYy0+U3VtbUZyZXEgKz0gMjsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIGMgPSBwLT5NYXhDb250ZXh0OworICBpZiAocC0+T3JkZXJGYWxsID09IDAgJiYgZlN1Y2Nlc3NvcikKKyAgeworICAgIENUWF9QVFIgY3MgPSBDcmVhdGVTdWNjZXNzb3JzKHAsIFRydWUsIHMsIHAtPk1pbkNvbnRleHQpOworICAgIGlmIChjcyA9PSAwKQorICAgIHsKKyAgICAgIFNldFN1Y2Nlc3NvcihwLT5Gb3VuZFN0YXRlLCAwKTsKKyAgICAgIFJFU1RPUkVfTU9ERUwoYywgQ1RYKGZTdWNjZXNzb3IpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFNldFN1Y2Nlc3NvcihwLT5Gb3VuZFN0YXRlLCBSRUYoY3MpKTsKKyAgICAgIHAtPk1heENvbnRleHQgPSBjczsKKyAgICB9CisgICAgcmV0dXJuOworICB9CisgIAorICAqcC0+VGV4dCsrID0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sOworICBzdWNjZXNzb3IgPSBSRUYocC0+VGV4dCk7CisgIGlmIChwLT5UZXh0ID49IHAtPlVuaXRzU3RhcnQpCisgIHsKKyAgICBSRVNUT1JFX01PREVMKGMsIENUWChmU3VjY2Vzc29yKSk7IC8qIGNoZWNrIGl0ICovCisgICAgcmV0dXJuOworICB9CisgIAorICBpZiAoIWZTdWNjZXNzb3IpCisgIHsKKyAgICBDVFhfUFRSIGNzID0gUmVkdWNlT3JkZXIocCwgcywgcC0+TWluQ29udGV4dCk7CisgICAgaWYgKGNzID09IE5VTEwpCisgICAgeworICAgICAgUkVTVE9SRV9NT0RFTChjLCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZlN1Y2Nlc3NvciA9IFJFRihjcyk7CisgIH0KKyAgZWxzZSBpZiAoKEJ5dGUgKilQcG1kOF9HZXRQdHIocCwgZlN1Y2Nlc3NvcikgPCBwLT5Vbml0c1N0YXJ0KQorICB7CisgICAgQ1RYX1BUUiBjcyA9IENyZWF0ZVN1Y2Nlc3NvcnMocCwgRmFsc2UsIHMsIHAtPk1pbkNvbnRleHQpOworICAgIGlmIChjcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFJFU1RPUkVfTU9ERUwoYywgMCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZTdWNjZXNzb3IgPSBSRUYoY3MpOworICB9CisgIAorICBpZiAoLS1wLT5PcmRlckZhbGwgPT0gMCkKKyAgeworICAgIHN1Y2Nlc3NvciA9IGZTdWNjZXNzb3I7CisgICAgcC0+VGV4dCAtPSAocC0+TWF4Q29udGV4dCAhPSBwLT5NaW5Db250ZXh0KTsKKyAgfQorICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgZWxzZSBpZiAocC0+UmVzdG9yZU1ldGhvZCA+IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRSkKKyAgeworICAgIHN1Y2Nlc3NvciA9IGZTdWNjZXNzb3I7CisgICAgUkVTRVRfVEVYVCgwKTsKKyAgICBwLT5PcmRlckZhbGwgPSAwOworICB9CisgICNlbmRpZgorICAKKyAgczAgPSBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSAtIChucyA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzKSAtIGZGcmVxOworICBmbGFnID0gKEJ5dGUpKDB4MDggKiAoZlN5bWJvbCA+PSAweDQwKSk7CisgIAorICBmb3IgKDsgYyAhPSBwLT5NaW5Db250ZXh0OyBjID0gU1VGRklYKGMpKQorICB7CisgICAgdW5zaWduZWQgbnMxOworICAgIFVJbnQzMiBjZiwgc2Y7CisgICAgaWYgKChuczEgPSBjLT5OdW1TdGF0cykgIT0gMCkKKyAgICB7CisgICAgICBpZiAoKG5zMSAmIDEpICE9IDApCisgICAgICB7CisgICAgICAgIC8qIEV4cGFuZCBmb3Igb25lIFVOSVQgKi8KKyAgICAgICAgdW5zaWduZWQgb2xkTlUgPSAobnMxICsgMSkgPj4gMTsKKyAgICAgICAgdW5zaWduZWQgaSA9IFUySShvbGROVSk7CisgICAgICAgIGlmIChpICE9IFUySShvbGROVSArIDEpKQorICAgICAgICB7CisgICAgICAgICAgdm9pZCAqcHRyID0gQWxsb2NVbml0cyhwLCBpICsgMSk7CisgICAgICAgICAgdm9pZCAqb2xkUHRyOworICAgICAgICAgIGlmICghcHRyKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFJFU1RPUkVfTU9ERUwoYywgQ1RYKGZTdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgb2xkUHRyID0gU1RBVFMoYyk7CisgICAgICAgICAgTXlNZW0xMkNweShwdHIsIG9sZFB0ciwgb2xkTlUpOworICAgICAgICAgIEluc2VydE5vZGUocCwgb2xkUHRyLCBpKTsKKyAgICAgICAgICBjLT5TdGF0cyA9IFNUQVRTX1JFRihwdHIpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjLT5TdW1tRnJlcSA9IChVSW50MTYpKGMtPlN1bW1GcmVxICsgKDMgKiBuczEgKyAxIDwgbnMpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIENQcG1kX1N0YXRlICpzMiA9IChDUHBtZF9TdGF0ZSopQWxsb2NVbml0cyhwLCAwKTsKKyAgICAgIGlmICghczIpCisgICAgICB7CisgICAgICAgIFJFU1RPUkVfTU9ERUwoYywgQ1RYKGZTdWNjZXNzb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgKnMyID0gKk9ORV9TVEFURShjKTsKKyAgICAgIGMtPlN0YXRzID0gUkVGKHMyKTsKKyAgICAgIGlmIChzMi0+RnJlcSA8IE1BWF9GUkVRIC8gNCAtIDEpCisgICAgICAgIHMyLT5GcmVxIDw8PSAxOworICAgICAgZWxzZQorICAgICAgICBzMi0+RnJlcSA9IE1BWF9GUkVRIC0gNDsKKyAgICAgIGMtPlN1bW1GcmVxID0gKFVJbnQxNikoczItPkZyZXEgKyBwLT5Jbml0RXNjICsgKG5zID4gMikpOworICAgIH0KKyAgICBjZiA9IDIgKiBmRnJlcSAqIChjLT5TdW1tRnJlcSArIDYpOworICAgIHNmID0gKFVJbnQzMilzMCArIGMtPlN1bW1GcmVxOworICAgIGlmIChjZiA8IDYgKiBzZikKKyAgICB7CisgICAgICBjZiA9IDEgKyAoY2YgPiBzZikgKyAoY2YgPj0gNCAqIHNmKTsKKyAgICAgIGMtPlN1bW1GcmVxICs9IDQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBjZiA9IDQgKyAoY2YgPiA5ICogc2YpICsgKGNmID4gMTIgKiBzZikgKyAoY2YgPiAxNSAqIHNmKTsKKyAgICAgIGMtPlN1bW1GcmVxID0gKFVJbnQxNikoYy0+U3VtbUZyZXEgKyBjZik7CisgICAgfQorICAgIHsKKyAgICAgIENQcG1kX1N0YXRlICpzMiA9IFNUQVRTKGMpICsgbnMxICsgMTsKKyAgICAgIFNldFN1Y2Nlc3NvcihzMiwgc3VjY2Vzc29yKTsKKyAgICAgIHMyLT5TeW1ib2wgPSBmU3ltYm9sOworICAgICAgczItPkZyZXEgPSAoQnl0ZSljZjsKKyAgICAgIGMtPkZsYWdzIHw9IGZsYWc7CisgICAgICBjLT5OdW1TdGF0cyA9IChCeXRlKShuczEgKyAxKTsKKyAgICB9CisgIH0KKyAgcC0+TWF4Q29udGV4dCA9IHAtPk1pbkNvbnRleHQgPSBDVFgoZlN1Y2Nlc3Nvcik7Cit9CisgIAorc3RhdGljIHZvaWQgUmVzY2FsZShDUHBtZDggKnApCit7CisgIHVuc2lnbmVkIGksIGFkZGVyLCBzdW1GcmVxLCBlc2NGcmVxOworICBDUHBtZF9TdGF0ZSAqc3RhdHMgPSBTVEFUUyhwLT5NaW5Db250ZXh0KTsKKyAgQ1BwbWRfU3RhdGUgKnMgPSBwLT5Gb3VuZFN0YXRlOworICB7CisgICAgQ1BwbWRfU3RhdGUgdG1wID0gKnM7CisgICAgZm9yICg7IHMgIT0gc3RhdHM7IHMtLSkKKyAgICAgIHNbMF0gPSBzWy0xXTsKKyAgICAqcyA9IHRtcDsKKyAgfQorICBlc2NGcmVxID0gcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgLSBzLT5GcmVxOworICBzLT5GcmVxICs9IDQ7CisgIGFkZGVyID0gKHAtPk9yZGVyRmFsbCAhPSAwCisgICAgICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgICAgIHx8IHAtPlJlc3RvcmVNZXRob2QgPiBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUKKyAgICAgICNlbmRpZgorICAgICAgKTsKKyAgcy0+RnJlcSA9IChCeXRlKSgocy0+RnJlcSArIGFkZGVyKSA+PiAxKTsKKyAgc3VtRnJlcSA9IHMtPkZyZXE7CisgIAorICBpID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHM7CisgIGRvCisgIHsKKyAgICBlc2NGcmVxIC09ICgrK3MpLT5GcmVxOworICAgIHMtPkZyZXEgPSAoQnl0ZSkoKHMtPkZyZXEgKyBhZGRlcikgPj4gMSk7CisgICAgc3VtRnJlcSArPSBzLT5GcmVxOworICAgIGlmIChzWzBdLkZyZXEgPiBzWy0xXS5GcmVxKQorICAgIHsKKyAgICAgIENQcG1kX1N0YXRlICpzMSA9IHM7CisgICAgICBDUHBtZF9TdGF0ZSB0bXAgPSAqczE7CisgICAgICBkbworICAgICAgICBzMVswXSA9IHMxWy0xXTsKKyAgICAgIHdoaWxlICgtLXMxICE9IHN0YXRzICYmIHRtcC5GcmVxID4gczFbLTFdLkZyZXEpOworICAgICAgKnMxID0gdG1wOworICAgIH0KKyAgfQorICB3aGlsZSAoLS1pKTsKKyAgCisgIGlmIChzLT5GcmVxID09IDApCisgIHsKKyAgICB1bnNpZ25lZCBudW1TdGF0cyA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzOworICAgIHVuc2lnbmVkIG4wLCBuMTsKKyAgICBkbyB7IGkrKzsgfSB3aGlsZSAoKC0tcyktPkZyZXEgPT0gMCk7CisgICAgZXNjRnJlcSArPSBpOworICAgIHAtPk1pbkNvbnRleHQtPk51bVN0YXRzID0gKEJ5dGUpKHAtPk1pbkNvbnRleHQtPk51bVN0YXRzIC0gaSk7CisgICAgaWYgKHAtPk1pbkNvbnRleHQtPk51bVN0YXRzID09IDApCisgICAgeworICAgICAgQ1BwbWRfU3RhdGUgdG1wID0gKnN0YXRzOworICAgICAgdG1wLkZyZXEgPSAoQnl0ZSkoKDIgKiB0bXAuRnJlcSArIGVzY0ZyZXEgLSAxKSAvIGVzY0ZyZXEpOworICAgICAgaWYgKHRtcC5GcmVxID4gTUFYX0ZSRVEgLyAzKQorICAgICAgICB0bXAuRnJlcSA9IE1BWF9GUkVRIC8gMzsKKyAgICAgIEluc2VydE5vZGUocCwgc3RhdHMsIFUySSgobnVtU3RhdHMgKyAyKSA+PiAxKSk7CisgICAgICBwLT5NaW5Db250ZXh0LT5GbGFncyA9IChCeXRlKSgocC0+TWluQ29udGV4dC0+RmxhZ3MgJiAweDEwKSArIDB4MDggKiAodG1wLlN5bWJvbCA+PSAweDQwKSk7CisgICAgICAqKHAtPkZvdW5kU3RhdGUgPSBPTkVfU1RBVEUocC0+TWluQ29udGV4dCkpID0gdG1wOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBuMCA9IChudW1TdGF0cyArIDIpID4+IDE7CisgICAgbjEgPSAocC0+TWluQ29udGV4dC0+TnVtU3RhdHMgKyAyKSA+PiAxOworICAgIGlmIChuMCAhPSBuMSkKKyAgICAgIHAtPk1pbkNvbnRleHQtPlN0YXRzID0gU1RBVFNfUkVGKFNocmlua1VuaXRzKHAsIHN0YXRzLCBuMCwgbjEpKTsKKyAgICBwLT5NaW5Db250ZXh0LT5GbGFncyAmPSB+MHgwODsKKyAgICBwLT5NaW5Db250ZXh0LT5GbGFncyB8PSAweDA4ICogKChzID0gU1RBVFMocC0+TWluQ29udGV4dCkpLT5TeW1ib2wgPj0gMHg0MCk7CisgICAgaSA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzOworICAgIGRvIHsgcC0+TWluQ29udGV4dC0+RmxhZ3MgfD0gMHgwOCooKCsrcyktPlN5bWJvbCA+PSAweDQwKTsgfSB3aGlsZSAoLS1pKTsKKyAgfQorICBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSA9IChVSW50MTYpKHN1bUZyZXEgKyBlc2NGcmVxIC0gKGVzY0ZyZXEgPj4gMSkpOworICBwLT5NaW5Db250ZXh0LT5GbGFncyB8PSAweDQ7CisgIHAtPkZvdW5kU3RhdGUgPSBTVEFUUyhwLT5NaW5Db250ZXh0KTsKK30KKworQ1BwbWRfU2VlICpQcG1kOF9NYWtlRXNjRnJlcShDUHBtZDggKnAsIHVuc2lnbmVkIG51bU1hc2tlZDEsIFVJbnQzMiAqZXNjRnJlcSkKK3sKKyAgQ1BwbWRfU2VlICpzZWU7CisgIGlmIChwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyAhPSAweEZGKQorICB7CisgICAgc2VlID0gcC0+U2VlWyh1bnNpZ25lZClwLT5OUzJJbmR4Wyh1bnNpZ25lZClwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyArIDJdIC0gM10gKworICAgICAgICAocC0+TWluQ29udGV4dC0+U3VtbUZyZXEgPiAxMSAqICgodW5zaWduZWQpcC0+TWluQ29udGV4dC0+TnVtU3RhdHMgKyAxKSkgKworICAgICAgICAyICogKHVuc2lnbmVkKSgyICogKHVuc2lnbmVkKXAtPk1pbkNvbnRleHQtPk51bVN0YXRzIDwKKyAgICAgICAgKCh1bnNpZ25lZClTVUZGSVgocC0+TWluQ29udGV4dCktPk51bVN0YXRzICsgbnVtTWFza2VkMSkpICsKKyAgICAgICAgcC0+TWluQ29udGV4dC0+RmxhZ3M7CisgICAgeworICAgICAgdW5zaWduZWQgciA9IChzZWUtPlN1bW0gPj4gc2VlLT5TaGlmdCk7CisgICAgICBzZWUtPlN1bW0gPSAoVUludDE2KShzZWUtPlN1bW0gLSByKTsKKyAgICAgICplc2NGcmVxID0gciArIChyID09IDApOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBzZWUgPSAmcC0+RHVtbXlTZWU7CisgICAgKmVzY0ZyZXEgPSAxOworICB9CisgIHJldHVybiBzZWU7Cit9CisKK3N0YXRpYyB2b2lkIE5leHRDb250ZXh0KENQcG1kOCAqcCkKK3sKKyAgQ1RYX1BUUiBjID0gQ1RYKFNVQ0NFU1NPUihwLT5Gb3VuZFN0YXRlKSk7CisgIGlmIChwLT5PcmRlckZhbGwgPT0gMCAmJiAoQnl0ZSAqKWMgPj0gcC0+VW5pdHNTdGFydCkKKyAgICBwLT5NaW5Db250ZXh0ID0gcC0+TWF4Q29udGV4dCA9IGM7CisgIGVsc2UKKyAgeworICAgIFVwZGF0ZU1vZGVsKHApOworICAgIHAtPk1pbkNvbnRleHQgPSBwLT5NYXhDb250ZXh0OworICB9Cit9CisKK3ZvaWQgUHBtZDhfVXBkYXRlMShDUHBtZDggKnApCit7CisgIENQcG1kX1N0YXRlICpzID0gcC0+Rm91bmRTdGF0ZTsKKyAgcy0+RnJlcSArPSA0OworICBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSArPSA0OworICBpZiAoc1swXS5GcmVxID4gc1stMV0uRnJlcSkKKyAgeworICAgIFN3YXBTdGF0ZXMoJnNbMF0sICZzWy0xXSk7CisgICAgcC0+Rm91bmRTdGF0ZSA9IC0tczsKKyAgICBpZiAocy0+RnJlcSA+IE1BWF9GUkVRKQorICAgICAgUmVzY2FsZShwKTsKKyAgfQorICBOZXh0Q29udGV4dChwKTsKK30KKwordm9pZCBQcG1kOF9VcGRhdGUxXzAoQ1BwbWQ4ICpwKQoreworICBwLT5QcmV2U3VjY2VzcyA9ICgyICogcC0+Rm91bmRTdGF0ZS0+RnJlcSA+PSBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSk7CisgIHAtPlJ1bkxlbmd0aCArPSBwLT5QcmV2U3VjY2VzczsKKyAgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgKz0gNDsKKyAgaWYgKChwLT5Gb3VuZFN0YXRlLT5GcmVxICs9IDQpID4gTUFYX0ZSRVEpCisgICAgUmVzY2FsZShwKTsKKyAgTmV4dENvbnRleHQocCk7Cit9CisKK3ZvaWQgUHBtZDhfVXBkYXRlQmluKENQcG1kOCAqcCkKK3sKKyAgcC0+Rm91bmRTdGF0ZS0+RnJlcSA9IChCeXRlKShwLT5Gb3VuZFN0YXRlLT5GcmVxICsgKHAtPkZvdW5kU3RhdGUtPkZyZXEgPCAxOTYpKTsKKyAgcC0+UHJldlN1Y2Nlc3MgPSAxOworICBwLT5SdW5MZW5ndGgrKzsKKyAgTmV4dENvbnRleHQocCk7Cit9CisKK3ZvaWQgUHBtZDhfVXBkYXRlMihDUHBtZDggKnApCit7CisgIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxICs9IDQ7CisgIGlmICgocC0+Rm91bmRTdGF0ZS0+RnJlcSArPSA0KSA+IE1BWF9GUkVRKQorICAgIFJlc2NhbGUocCk7CisgIHAtPlJ1bkxlbmd0aCA9IHAtPkluaXRSTDsKKyAgVXBkYXRlTW9kZWwocCk7CisgIHAtPk1pbkNvbnRleHQgPSBwLT5NYXhDb250ZXh0OworfQorCisvKiBQcG1kOERlYy5jIC0tIFBQTWRJIERlY29kZXIKKzIwMTAtMDQtMTYgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4KK1RoaXMgY29kZSBpcyBiYXNlZCBvbjoKKyAgUFBNZCB2YXIuSSAoMjAwMik6IERtaXRyeSBTaGthcmluIDogUHVibGljIGRvbWFpbgorICBDYXJyeWxlc3MgcmFuZ2Vjb2RlciAoMTk5OSk6IERtaXRyeSBTdWJib3RpbiA6IFB1YmxpYyBkb21haW4gKi8KKworQm9vbCBQcG1kOF9SYW5nZURlY19Jbml0KENQcG1kOCAqcCkKK3sKKyAgdW5zaWduZWQgaTsKKyAgcC0+TG93ID0gMDsKKyAgcC0+UmFuZ2UgPSAweEZGRkZGRkZGOworICBwLT5Db2RlID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICBwLT5Db2RlID0gKHAtPkNvZGUgPDwgOCkgfCBwLT5TdHJlYW0uSW4tPlJlYWQocC0+U3RyZWFtLkluKTsKKyAgcmV0dXJuIChwLT5Db2RlIDwgMHhGRkZGRkZGRik7Cit9CisKK3N0YXRpYyBVSW50MzIgUmFuZ2VEZWNfR2V0VGhyZXNob2xkKENQcG1kOCAqcCwgVUludDMyIHRvdGFsKQoreworICByZXR1cm4gcC0+Q29kZSAvIChwLT5SYW5nZSAvPSB0b3RhbCk7Cit9CisKK3N0YXRpYyB2b2lkIFJhbmdlRGVjX0RlY29kZShDUHBtZDggKnAsIFVJbnQzMiBzdGFydCwgVUludDMyIHNpemUpCit7CisgIHN0YXJ0ICo9IHAtPlJhbmdlOworICBwLT5Mb3cgKz0gc3RhcnQ7CisgIHAtPkNvZGUgLT0gc3RhcnQ7CisgIHAtPlJhbmdlICo9IHNpemU7CisKKyAgd2hpbGUgKChwLT5Mb3cgXiAocC0+TG93ICsgcC0+UmFuZ2UpKSA8IGtUb3AgfHwKKyAgICAgIChwLT5SYW5nZSA8IGtCb3QgJiYgKChwLT5SYW5nZSA9ICgwIC0gcC0+TG93KSAmIChrQm90IC0gMSkpLCAxKSkpCisgIHsKKyAgICBwLT5Db2RlID0gKHAtPkNvZGUgPDwgOCkgfCBwLT5TdHJlYW0uSW4tPlJlYWQocC0+U3RyZWFtLkluKTsKKyAgICBwLT5SYW5nZSA8PD0gODsKKyAgICBwLT5Mb3cgPDw9IDg7CisgIH0KK30KKworI2RlZmluZSBNQVNLKHN5bSkgKChzaWduZWQgY2hhciAqKWNoYXJNYXNrKVtzeW1dCisKK2ludCBQcG1kOF9EZWNvZGVTeW1ib2woQ1BwbWQ4ICpwKQoreworICBzaXplX3QgY2hhck1hc2tbMjU2IC8gc2l6ZW9mKHNpemVfdCldOworICBpZiAocC0+TWluQ29udGV4dC0+TnVtU3RhdHMgIT0gMCkKKyAgeworICAgIENQcG1kX1N0YXRlICpzID0gUHBtZDhfR2V0U3RhdHMocCwgcC0+TWluQ29udGV4dCk7CisgICAgdW5zaWduZWQgaTsKKyAgICBVSW50MzIgY291bnQsIGhpQ250OworICAgIGlmICgoY291bnQgPSBSYW5nZURlY19HZXRUaHJlc2hvbGQocCwgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEpKSA8IChoaUNudCA9IHMtPkZyZXEpKQorICAgIHsKKyAgICAgIEJ5dGUgc3ltYm9sOworICAgICAgUmFuZ2VEZWNfRGVjb2RlKHAsIDAsIHMtPkZyZXEpOworICAgICAgcC0+Rm91bmRTdGF0ZSA9IHM7CisgICAgICBzeW1ib2wgPSBzLT5TeW1ib2w7CisgICAgICBQcG1kOF9VcGRhdGUxXzAocCk7CisgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKyAgICBwLT5QcmV2U3VjY2VzcyA9IDA7CisgICAgaSA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzOworICAgIGRvCisgICAgeworICAgICAgaWYgKChoaUNudCArPSAoKytzKS0+RnJlcSkgPiBjb3VudCkKKyAgICAgIHsKKyAgICAgICAgQnl0ZSBzeW1ib2w7CisgICAgICAgIFJhbmdlRGVjX0RlY29kZShwLCBoaUNudCAtIHMtPkZyZXEsIHMtPkZyZXEpOworICAgICAgICBwLT5Gb3VuZFN0YXRlID0gczsKKyAgICAgICAgc3ltYm9sID0gcy0+U3ltYm9sOworICAgICAgICBQcG1kOF9VcGRhdGUxKHApOworICAgICAgICByZXR1cm4gc3ltYm9sOworICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoLS1pKTsKKyAgICBpZiAoY291bnQgPj0gcC0+TWluQ29udGV4dC0+U3VtbUZyZXEpCisgICAgICByZXR1cm4gLTI7CisgICAgUmFuZ2VEZWNfRGVjb2RlKHAsIGhpQ250LCBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSAtIGhpQ250KTsKKyAgICBQUE1EX1NldEFsbEJpdHNJbjI1NkJ5dGVzKGNoYXJNYXNrKTsKKyAgICBNQVNLKHMtPlN5bWJvbCkgPSAwOworICAgIGkgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0czsKKyAgICBkbyB7IE1BU0soKC0tcyktPlN5bWJvbCkgPSAwOyB9IHdoaWxlICgtLWkpOworICB9CisgIGVsc2UKKyAgeworICAgIFVJbnQxNiAqcHJvYiA9IFBwbWQ4X0dldEJpblN1bW0ocCk7CisgICAgaWYgKCgocC0+Q29kZSAvIChwLT5SYW5nZSA+Pj0gMTQpKSA8ICpwcm9iKSkKKyAgICB7CisgICAgICBCeXRlIHN5bWJvbDsKKyAgICAgIFJhbmdlRGVjX0RlY29kZShwLCAwLCAqcHJvYik7CisgICAgICAqcHJvYiA9IChVSW50MTYpUFBNRF9VUERBVEVfUFJPQl8wKCpwcm9iKTsKKyAgICAgIHN5bWJvbCA9IChwLT5Gb3VuZFN0YXRlID0gUHBtZDhDb250ZXh0X09uZVN0YXRlKHAtPk1pbkNvbnRleHQpKS0+U3ltYm9sOworICAgICAgUHBtZDhfVXBkYXRlQmluKHApOworICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICB9CisgICAgUmFuZ2VEZWNfRGVjb2RlKHAsICpwcm9iLCAoMSA8PCAxNCkgLSAqcHJvYik7CisgICAgKnByb2IgPSAoVUludDE2KVBQTURfVVBEQVRFX1BST0JfMSgqcHJvYik7CisgICAgcC0+SW5pdEVzYyA9IFBQTUQ4X2tFeHBFc2NhcGVbKnByb2IgPj4gMTBdOworICAgIFBQTURfU2V0QWxsQml0c0luMjU2Qnl0ZXMoY2hhck1hc2spOworICAgIE1BU0soUHBtZDhDb250ZXh0X09uZVN0YXRlKHAtPk1pbkNvbnRleHQpLT5TeW1ib2wpID0gMDsKKyAgICBwLT5QcmV2U3VjY2VzcyA9IDA7CisgIH0KKyAgZm9yICg7OykKKyAgeworICAgIENQcG1kX1N0YXRlICpwc1syNTZdLCAqczsKKyAgICBVSW50MzIgZnJlcVN1bSwgY291bnQsIGhpQ250OworICAgIENQcG1kX1NlZSAqc2VlOworICAgIHVuc2lnbmVkIGksIG51bSwgbnVtTWFza2VkID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHM7CisgICAgZG8KKyAgICB7CisgICAgICBwLT5PcmRlckZhbGwrKzsKKyAgICAgIGlmICghcC0+TWluQ29udGV4dC0+U3VmZml4KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBwLT5NaW5Db250ZXh0ID0gUHBtZDhfR2V0Q29udGV4dChwLCBwLT5NaW5Db250ZXh0LT5TdWZmaXgpOworICAgIH0KKyAgICB3aGlsZSAocC0+TWluQ29udGV4dC0+TnVtU3RhdHMgPT0gbnVtTWFza2VkKTsKKyAgICBoaUNudCA9IDA7CisgICAgcyA9IFBwbWQ4X0dldFN0YXRzKHAsIHAtPk1pbkNvbnRleHQpOworICAgIGkgPSAwOworICAgIG51bSA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzIC0gbnVtTWFza2VkOworICAgIGRvCisgICAgeworICAgICAgaW50IGsgPSAoaW50KShNQVNLKHMtPlN5bWJvbCkpOworICAgICAgaGlDbnQgKz0gKHMtPkZyZXEgJiBrKTsKKyAgICAgIHBzW2ldID0gcysrOworICAgICAgaSAtPSBrOworICAgIH0KKyAgICB3aGlsZSAoaSAhPSBudW0pOworICAgIAorICAgIHNlZSA9IFBwbWQ4X01ha2VFc2NGcmVxKHAsIG51bU1hc2tlZCwgJmZyZXFTdW0pOworICAgIGZyZXFTdW0gKz0gaGlDbnQ7CisgICAgY291bnQgPSBSYW5nZURlY19HZXRUaHJlc2hvbGQocCwgZnJlcVN1bSk7CisgICAgCisgICAgaWYgKGNvdW50IDwgaGlDbnQpCisgICAgeworICAgICAgQnl0ZSBzeW1ib2w7CisgICAgICBDUHBtZF9TdGF0ZSAqKnBwcyA9IHBzOworICAgICAgZm9yIChoaUNudCA9IDA7IChoaUNudCArPSAoKnBwcyktPkZyZXEpIDw9IGNvdW50OyBwcHMrKyk7CisgICAgICBzID0gKnBwczsKKyAgICAgIFJhbmdlRGVjX0RlY29kZShwLCBoaUNudCAtIHMtPkZyZXEsIHMtPkZyZXEpOworICAgICAgUHBtZF9TZWVfVXBkYXRlKHNlZSk7CisgICAgICBwLT5Gb3VuZFN0YXRlID0gczsKKyAgICAgIHN5bWJvbCA9IHMtPlN5bWJvbDsKKyAgICAgIFBwbWQ4X1VwZGF0ZTIocCk7CisgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKyAgICBpZiAoY291bnQgPj0gZnJlcVN1bSkKKyAgICAgIHJldHVybiAtMjsKKyAgICBSYW5nZURlY19EZWNvZGUocCwgaGlDbnQsIGZyZXFTdW0gLSBoaUNudCk7CisgICAgc2VlLT5TdW1tID0gKFVJbnQxNikoc2VlLT5TdW1tICsgZnJlcVN1bSk7CisgICAgZG8geyBNQVNLKHBzWy0taV0tPlN5bWJvbCkgPSAwOyB9IHdoaWxlIChpICE9IDApOworICB9Cit9CisKKy8qIEgtPkkgY2hhbmdlczoKKyAgTlMySW5keAorICBHbGV3Q291bnQsIGFuZCBHbHVlIG1ldGhvZAorICBCaW5TdW0KKyAgU2VlIC8gRXNjRnJlcQorICBDcmVhdGVTdWNjZXNzb3JzIHVwZGF0ZXMgbW9yZSBzdWZmaXggY29udGV4dHMKKyAgVXBkYXRlTW9kZWwgY29uc3RzLgorICBQcmV2U3VjY2VzcyBVcGRhdGUKKyovCisKK2NvbnN0IElQcG1kOCBfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zID0KK3sKKyAgJlBwbWQ4X0NvbnN0cnVjdCwKKyAgJlBwbWQ4X0FsbG9jLAorICAmUHBtZDhfRnJlZSwKKyAgJlBwbWQ4X0luaXQsCisgICZQcG1kOF9SYW5nZURlY19Jbml0LAorICAmUHBtZDhfRGVjb2RlU3ltYm9sLAorfTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ4X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ4X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTRiNzVmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDhfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKiBQcG1kOC5oIC0tIFBQTWRJIGNvZGVjCisyMDExLTAxLTI3IDogSWdvciBQYXZsb3YgOiBQdWJsaWMgZG9tYWluCitUaGlzIGNvZGUgaXMgYmFzZWQgb246CisgIFBQTWQgdmFyLkkgKDIwMDIpOiBEbWl0cnkgU2hrYXJpbiA6IFB1YmxpYyBkb21haW4KKyAgQ2FycnlsZXNzIHJhbmdlY29kZXIgKDE5OTkpOiBEbWl0cnkgU3ViYm90aW4gOiBQdWJsaWMgZG9tYWluICovCisKKyNpZm5kZWYgQVJDSElWRV9QUE1EOF9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9QUE1EOF9QUklWQVRFX0hfSU5DTFVERUQKKworI2luY2x1ZGUgImFyY2hpdmVfcHBtZF9wcml2YXRlLmgiCisKKyNkZWZpbmUgUFBNRDhfTUlOX09SREVSIDIKKyNkZWZpbmUgUFBNRDhfTUFYX09SREVSIDE2CisKK3N0cnVjdCBDUHBtZDhfQ29udGV4dF87CisKK3R5cGVkZWYKKyAgI2lmZGVmIFBQTURfMzJCSVQKKyAgICBzdHJ1Y3QgQ1BwbWQ4X0NvbnRleHRfICoKKyAgI2Vsc2UKKyAgICBVSW50MzIKKyAgI2VuZGlmCisgIENQcG1kOF9Db250ZXh0X1JlZjsKKworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCisKK3R5cGVkZWYgc3RydWN0IENQcG1kOF9Db250ZXh0XworeworICBCeXRlIE51bVN0YXRzOworICBCeXRlIEZsYWdzOworICBVSW50MTYgU3VtbUZyZXE7CisgIENQcG1kX1N0YXRlX1JlZiBTdGF0czsKKyAgQ1BwbWQ4X0NvbnRleHRfUmVmIFN1ZmZpeDsKK30gQ1BwbWQ4X0NvbnRleHQ7CisKKyNwcmFnbWEgcGFjayhwb3ApCisKKyNkZWZpbmUgUHBtZDhDb250ZXh0X09uZVN0YXRlKHApICgoQ1BwbWRfU3RhdGUgKikmKHApLT5TdW1tRnJlcSkKKworLyogVGhlIEJVRyBpbiBTaGthcmluJ3MgY29kZSBmb3IgRlJFRVpFIG1vZGUgd2FzIGZpeGVkLCBidXQgdGhhdCBmaXhlZAorICAgY29kZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9yaWdpbmFsIGNvZGUgZm9yIHNvbWUgZmlsZXMgY29tcHJlc3NlZAorICAgaW4gRlJFRVpFIG1vZGUuIFNvIHdlIGRpc2FibGUgRlJFRVpFIG1vZGUgc3VwcG9ydC4gKi8KKworZW51bQoreworICBQUE1EOF9SRVNUT1JFX01FVEhPRF9SRVNUQVJULAorICBQUE1EOF9SRVNUT1JFX01FVEhPRF9DVVRfT0ZGCisgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAsIFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRQorICAjZW5kaWYKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIENQcG1kOF9Db250ZXh0ICpNaW5Db250ZXh0LCAqTWF4Q29udGV4dDsKKyAgQ1BwbWRfU3RhdGUgKkZvdW5kU3RhdGU7CisgIHVuc2lnbmVkIE9yZGVyRmFsbCwgSW5pdEVzYywgUHJldlN1Y2Nlc3MsIE1heE9yZGVyOworICBJbnQzMiBSdW5MZW5ndGgsIEluaXRSTDsgLyogbXVzdCBiZSAzMi1iaXQgYXQgbGVhc3QgKi8KKworICBVSW50MzIgU2l6ZTsKKyAgVUludDMyIEdsdWVDb3VudDsKKyAgQnl0ZSAqQmFzZSwgKkxvVW5pdCwgKkhpVW5pdCwgKlRleHQsICpVbml0c1N0YXJ0OworICBVSW50MzIgQWxpZ25PZmZzZXQ7CisgIHVuc2lnbmVkIFJlc3RvcmVNZXRob2Q7CisKKyAgLyogUmFuZ2UgQ29kZXIgKi8KKyAgVUludDMyIFJhbmdlOworICBVSW50MzIgQ29kZTsKKyAgVUludDMyIExvdzsKKyAgdW5pb24KKyAgeworICAgIElCeXRlSW4gKkluOworICAgIElCeXRlT3V0ICpPdXQ7CisgIH0gU3RyZWFtOworCisgIEJ5dGUgSW5keDJVbml0c1tQUE1EX05VTV9JTkRFWEVTXTsKKyAgQnl0ZSBVbml0czJJbmR4WzEyOF07CisgIENQcG1kX1ZvaWRfUmVmIEZyZWVMaXN0W1BQTURfTlVNX0lOREVYRVNdOworICBVSW50MzIgU3RhbXBzW1BQTURfTlVNX0lOREVYRVNdOworCisgIEJ5dGUgTlMyQlNJbmR4WzI1Nl0sIE5TMkluZHhbMjYwXTsKKyAgQ1BwbWRfU2VlIER1bW15U2VlLCBTZWVbMjRdWzMyXTsKKyAgVUludDE2IEJpblN1bW1bMjVdWzY0XTsKK30gQ1BwbWQ4OworCit2b2lkIFBwbWQ4X0NvbnN0cnVjdChDUHBtZDggKnApOworQm9vbCBQcG1kOF9BbGxvYyhDUHBtZDggKnAsIFVJbnQzMiBzaXplKTsKK3ZvaWQgUHBtZDhfRnJlZShDUHBtZDggKnApOwordm9pZCBQcG1kOF9Jbml0KENQcG1kOCAqcCwgdW5zaWduZWQgbWF4T3JkZXIsIHVuc2lnbmVkIHJlc3RvcmVNZXRob2QpOworI2RlZmluZSBQcG1kOF9XYXNBbGxvY2F0ZWQocCkgKChwKS0+QmFzZSAhPSBOVUxMKQorCisKKy8qIC0tLS0tLS0tLS0gSW50ZXJuYWwgRnVuY3Rpb25zIC0tLS0tLS0tLS0gKi8KKworZXh0ZXJuIGNvbnN0IEJ5dGUgUFBNRDhfa0V4cEVzY2FwZVsxNl07CisKKyNpZmRlZiBQUE1EXzMyQklUCisgICNkZWZpbmUgUHBtZDhfR2V0UHRyKHAsIHB0cikgKHB0cikKKyAgI2RlZmluZSBQcG1kOF9HZXRDb250ZXh0KHAsIHB0cikgKHB0cikKKyAgI2RlZmluZSBQcG1kOF9HZXRTdGF0cyhwLCBjdHgpICgoY3R4KS0+U3RhdHMpCisjZWxzZQorICAjZGVmaW5lIFBwbWQ4X0dldFB0cihwLCBvZmZzKSAoKHZvaWQgKikoKHApLT5CYXNlICsgKG9mZnMpKSkKKyAgI2RlZmluZSBQcG1kOF9HZXRDb250ZXh0KHAsIG9mZnMpICgoQ1BwbWQ4X0NvbnRleHQgKilQcG1kOF9HZXRQdHIoKHApLCAob2ZmcykpKQorICAjZGVmaW5lIFBwbWQ4X0dldFN0YXRzKHAsIGN0eCkgKChDUHBtZF9TdGF0ZSAqKVBwbWQ4X0dldFB0cigocCksICgoY3R4KS0+U3RhdHMpKSkKKyNlbmRpZgorCit2b2lkIFBwbWQ4X1VwZGF0ZTEoQ1BwbWQ4ICpwKTsKK3ZvaWQgUHBtZDhfVXBkYXRlMV8wKENQcG1kOCAqcCk7Cit2b2lkIFBwbWQ4X1VwZGF0ZTIoQ1BwbWQ4ICpwKTsKK3ZvaWQgUHBtZDhfVXBkYXRlQmluKENQcG1kOCAqcCk7CisKKyNkZWZpbmUgUHBtZDhfR2V0QmluU3VtbShwKSBcCisgICAgJnAtPkJpblN1bW1bcC0+TlMySW5keFtQcG1kOENvbnRleHRfT25lU3RhdGUocC0+TWluQ29udGV4dCktPkZyZXEgLSAxXV1bIFwKKyAgICBwLT5OUzJCU0luZHhbUHBtZDhfR2V0Q29udGV4dChwLCBwLT5NaW5Db250ZXh0LT5TdWZmaXgpLT5OdW1TdGF0c10gKyBcCisgICAgcC0+UHJldlN1Y2Nlc3MgKyBwLT5NaW5Db250ZXh0LT5GbGFncyArICgocC0+UnVuTGVuZ3RoID4+IDI2KSAmIDB4MjApXQorCitDUHBtZF9TZWUgKlBwbWQ4X01ha2VFc2NGcmVxKENQcG1kOCAqcCwgdW5zaWduZWQgbnVtTWFza2VkLCBVSW50MzIgKnNjYWxlKTsKKworCisvKiAtLS0tLS0tLS0tIERlY29kZSAtLS0tLS0tLS0tICovCisKK0Jvb2wgUHBtZDhfUmFuZ2VEZWNfSW5pdChDUHBtZDggKnApOworI2RlZmluZSBQcG1kOF9SYW5nZURlY19Jc0ZpbmlzaGVkT0socCkgKChwKS0+Q29kZSA9PSAwKQoraW50IFBwbWQ4X0RlY29kZVN5bWJvbChDUHBtZDggKnApOyAvKiByZXR1cm5zOiAtMSBhcyBFbmRNYXJrZXIsIC0yIGFzIERhdGFFcnJvciAqLworCisvKiAtLS0tLS0tLS0tIEVuY29kZSAtLS0tLS0tLS0tICovCisKKyNkZWZpbmUgUHBtZDhfUmFuZ2VFbmNfSW5pdChwKSB7IChwKS0+TG93ID0gMDsgKHApLT5SYW5nZSA9IDB4RkZGRkZGRkY7IH0KK3ZvaWQgUHBtZDhfUmFuZ2VFbmNfRmx1c2hEYXRhKENQcG1kOCAqcCk7Cit2b2lkIFBwbWQ4X0VuY29kZVN5bWJvbChDUHBtZDggKnAsIGludCBzeW1ib2wpOyAvKiBzeW1ib2wgPSAtMSBtZWFucyBFbmRNYXJrZXIgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogQmFzZSBGdW5jdGlvbnMgKi8KKyAgdm9pZCAoKlBwbWQ4X0NvbnN0cnVjdCkoQ1BwbWQ4ICpwKTsKKyAgQm9vbCAoKlBwbWQ4X0FsbG9jKShDUHBtZDggKnAsIFVJbnQzMiBzaXplKTsKKyAgdm9pZCAoKlBwbWQ4X0ZyZWUpKENQcG1kOCAqcCk7CisgIHZvaWQgKCpQcG1kOF9Jbml0KShDUHBtZDggKnAsIHVuc2lnbmVkIG1heF9vcmRlciwgdW5zaWduZWQgcmVzdG9yZV9tZXRob2QpOworICAjZGVmaW5lIFBwbWQ3X1dhc0FsbG9jYXRlZChwKSAoKHApLT5CYXNlICE9IE5VTEwpCisKKyAgLyogRGVjb2RlIEZ1bmN0aW9ucyAqLworICBpbnQgKCpQcG1kOF9SYW5nZURlY19Jbml0KShDUHBtZDggKnApOworICBpbnQgKCpQcG1kOF9EZWNvZGVTeW1ib2wpKENQcG1kOCAqcCk7Cit9IElQcG1kODsKKworZXh0ZXJuIGNvbnN0IElQcG1kOCBfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWRfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZF9wcml2YXRlLmgKaW5kZXggYTgzYjg1MS4uNTgyODAzZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZF9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZF9wcml2YXRlLmgKQEAgLTIsMTMgKzIsMTMgQEAKIDIwMTAtMDMtMTIgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4KIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBQUE1kIHZhci5IICgyMDAxKTogRG1pdHJ5IFNoa2FyaW4gOiBQdWJsaWMgZG9tYWluICovCiAKKyNpZm5kZWYgQVJDSElWRV9QUE1EX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1BQTURfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfUFBNRF9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9QUE1EX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKICNpbmNsdWRlICJhcmNoaXZlX3JlYWRfcHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHJpdmF0ZS5oCmluZGV4IDRiNGJlOTcuLjkzN2E4N2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcml2YXRlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcml2YXRlLmggMjAxMDk4IDIwMDktMTItMjggMDI6NTg6MTRaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lCUFSQ0hJVkVfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpZiBIQVZFX0lDT05WX0gKICNpbmNsdWRlIDxpY29udi5oPgogI2VuZGlmCkBAIC0xNTMsNiArMTUzLDExIEBACiAKIHZvaWQJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoaW50IGZkKTsKIGludAlfX2FyY2hpdmVfbWt0ZW1wKGNvbnN0IGNoYXIgKnRtcGRpcik7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCitpbnQJX19hcmNoaXZlX21rc3RlbXAod2NoYXJfdCAqdGVtcGxhdGUpOworI2Vsc2UKK2ludAlfX2FyY2hpdmVfbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSk7CisjZW5kaWYKIAogaW50CV9fYXJjaGl2ZV9jbGVhbihzdHJ1Y3QgYXJjaGl2ZSAqKTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmFuZG9tX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgKaW5kZXggYzQxNDc3OS4uMDhiOTFiMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmFuZG9tX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYW5kb21fcHJpdmF0ZS5oCkBAIC0yMywxMyArMjMsMTMgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1JBTkRPTV9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9SQU5ET01fUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfUkFORE9NX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1JBTkRPTV9QUklWQVRFX0hfSU5DTFVERUQKLQogLyogUmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCiBpbnQgYXJjaGl2ZV9yYW5kb20odm9pZCAqYnVmLCBzaXplX3QgbmJ5dGVzKTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmIuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JiLmgKaW5kZXggNDU2MmU5ZS4uODg1MWYxMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmIuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYi5oCkBAIC0yOCw4ICsyOCw5IEBACiAgKgogICogQmFzZWQgb24gTmV0QlNEOiByYi5oLHYgMS4xMyAyMDA5LzA4LzE2IDEwOjU3OjAxIHlhbXQgRXhwCiAgKi8KLSNpZm5kZWYgQVJDSElWRV9SQl9IXwotI2RlZmluZQlBUkNISVZFX1JCX0hfCisKKyNpZm5kZWYgQVJDSElWRV9SQl9IX0lOQ0xVREVECisjZGVmaW5lCUFSQ0hJVkVfUkJfSF9JTkNMVURFRAogCiBzdHJ1Y3QgYXJjaGl2ZV9yYl9ub2RlIHsKIAlzdHJ1Y3QgYXJjaGl2ZV9yYl9ub2RlICpyYl9ub2Rlc1syXTsKQEAgLTQ4LDEyICs0OSwyNCBAQAogICAgIF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoKFQpLCBOVUxMLCBBUkNISVZFX1JCX0RJUl9MRUZUKQogI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfTUFYKFQpIFwKICAgICBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKChUKSwgTlVMTCwgQVJDSElWRV9SQl9ESVJfUklHSFQpCisjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9ORVhUKFQsIE4pIFwKKyAgICBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKChUKSwgKE4pLCBBUkNISVZFX1JCX0RJUl9SSUdIVCkKKyNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX1BSRVYoVCwgTikgXAorICAgIF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoKFQpLCAoTiksIEFSQ0hJVkVfUkJfRElSX0xFRlQpCiAjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIKE4sIFQpIFwKICAgICBmb3IgKChOKSA9IEFSQ0hJVkVfUkJfVFJFRV9NSU4oVCk7IChOKTsgXAotCShOKSA9IF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoKFQpLCAoTiksIEFSQ0hJVkVfUkJfRElSX1JJR0hUKSkKKwkoTikgPSBBUkNISVZFX1JCX1RSRUVfTkVYVCgoVCksIChOKSkpCiAjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIX1JFVkVSU0UoTiwgVCkgXAogICAgIGZvciAoKE4pID0gQVJDSElWRV9SQl9UUkVFX01BWChUKTsgKE4pOyBcCi0JKE4pID0gX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgoVCksIChOKSwgQVJDSElWRV9SQl9ESVJfTEVGVCkpCisJKE4pID0gQVJDSElWRV9SQl9UUkVFX1BSRVYoKFQpLCAoTikpKQorI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfRk9SRUFDSF9TQUZFKE4sIFQsIFMpIFwKKyAgICBmb3IgKChOKSA9IEFSQ0hJVkVfUkJfVFJFRV9NSU4oVCk7IFwKKwkoTikgJiYgKChTKSA9IEFSQ0hJVkVfUkJfVFJFRV9ORVhUKChUKSwgKE4pKSwgMSk7IFwKKwkoTikgPSAoUykpCisjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIX1JFVkVSU0VfU0FGRShOLCBULCBTKSBcCisgICAgZm9yICgoTikgPSBBUkNISVZFX1JCX1RSRUVfTUFYKFQpOyBcCisgICAgICAgIChOKSAmJiAoKFMpID0gQVJDSElWRV9SQl9UUkVFX1BSRVYoKFQpLCAoTikpLCAxKTsgXAorICAgICAgICAoTikgPSAoUykpCiAKIC8qCiAgKiBhcmNoaXZlX3JidG9fY29tcGFyZV9ub2Rlc19mbjoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuMwppbmRleCBkMzdlNzMyLi5jYmVkZDBhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC4zCkBAIC0xNTUsNyArMTU1LDcgQEAKIC5GbiBhcmNoaXZlX3JlYWRfZnJlZQogdG8gcmVsZWFzZSBhbGwgcmVzb3VyY2VzLCBpbmNsdWRpbmcgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGxpYnJhcnkuCiAuXCIKLS5TaCBFWEFNUExFCisuU2ggRVhBTVBMRVMKIFRoZSBmb2xsb3dpbmcgaWxsdXN0cmF0ZXMgYmFzaWMgdXNhZ2Ugb2YgdGhlIGxpYnJhcnkuCiBJbiB0aGlzIGV4YW1wbGUsCiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBzaW1wbHkgd3JhcHBlcnMgYXJvdW5kIHRoZSBzdGFuZGFyZApAQCAtMjE3LDE2ICsyMTcsMTYgQEAKIC5cIiAuU2ggRVJST1JTCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKLS5YciBhcmNoaXZlX3JlYWRfbmV3IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9leHRyYWN0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3JlYWRfaGVhZGVyIDMgLAorLlhyIGFyY2hpdmVfcmVhZF9uZXcgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX29wZW4gMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CiAuU2ggSElTVE9SWQogVGhlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLmMKaW5kZXggMGU1NmU3Ni4uNGE5MzNiMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuYwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJCXJldHVybiBBUkNISVZFX0ZBVEFMOwogCX0KIAlhLT5jbGllbnQuZGF0YXNldCA9IChzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2RhdGFfbm9kZSAqKXA7Ci0JZm9yIChpID0gYS0+Y2xpZW50Lm5vZGVzIC0gMTsgaSA+IGlpbmRleCAmJiBpID4gMDsgaS0tKSB7CisJZm9yIChpID0gYS0+Y2xpZW50Lm5vZGVzIC0gMTsgaSA+IGlpbmRleDsgaS0tKSB7CiAJCWEtPmNsaWVudC5kYXRhc2V0W2ldLmRhdGEgPSBhLT5jbGllbnQuZGF0YXNldFtpLTFdLmRhdGE7CiAJCWEtPmNsaWVudC5kYXRhc2V0W2ldLmJlZ2luX3Bvc2l0aW9uID0gLTE7CiAJCWEtPmNsaWVudC5kYXRhc2V0W2ldLnRvdGFsX3NpemUgPSAtMTsKQEAgLTYxMSw2ICs2MTEsMTUgQEAKIAlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogfQogCitpbnQKK19fYXJjaGl2ZV9yZWFkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnkpCit7CisJaWYgKGEtPmZpbHRlci0+cmVhZF9oZWFkZXIpCisJCXJldHVybiBhLT5maWx0ZXItPnJlYWRfaGVhZGVyKGEtPmZpbHRlciwgZW50cnkpOworCWVsc2UKKwkJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKwogLyoKICAqIFJlYWQgaGVhZGVyIG9mIG5leHQgZW50cnkuCiAgKi8KQEAgLTgzNSw3ICs4NDQsOCBAQAogCWRlc3QgPSAoY2hhciAqKWJ1ZmY7CiAKIAl3aGlsZSAocyA+IDApIHsKLQkJaWYgKGEtPnJlYWRfZGF0YV9yZW1haW5pbmcgPT0gMCkgeworCQlpZiAoYS0+cmVhZF9kYXRhX29mZnNldCA9PSBhLT5yZWFkX2RhdGFfb3V0cHV0X29mZnNldCAmJgorCQkgICAgYS0+cmVhZF9kYXRhX3JlbWFpbmluZyA9PSAwKSB7CiAJCQlyZWFkX2J1ZiA9IGEtPnJlYWRfZGF0YV9ibG9jazsKIAkJCWEtPnJlYWRfZGF0YV9pc19wb3NpeF9yZWFkID0gMTsKIAkJCWEtPnJlYWRfZGF0YV9yZXF1ZXN0ZWQgPSBzOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZS4zCmluZGV4IDhiMjQyZWEuLmNhNjBkNGYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfYWRkX3Bhc3NwaHJhc2UuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2FkZF9wYXNzcGhyYXNlLjMKQEAgLTU5LDE2ICs1OSwxNiBAQAogd2lsbCBiZSByZXR1cm5lZC4KIE90aGVyd2lzZSwKIC5DbSBBUkNISVZFX09LCi13aWxsIGJlIHJldHVybmVkLiAKK3dpbGwgYmUgcmV0dXJuZWQuCiAuSXQgRm4gYXJjaGl2ZV9yZWFkX3NldF9wYXNzcGhyYXNlX2NhbGxiYWNrCi1SZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCB0byBnZXQgYSBwYXNzcGhyYXNlIAotZm9yIGRlY3JwdGlvbiBhZnRlciB0cnlpbmcgYWxsIHBhc3NwaHJhc2VzIHJlZ2lzdGVyZWQgYnkgdGhlCitSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIHRvIGdldCBhIHBhc3NwaHJhc2UgCitmb3IgZGVjcnlwdGlvbiBhZnRlciB0cnlpbmcgYWxsIHRoZSBwYXNzcGhyYXNlcyByZWdpc3RlcmVkIGJ5IHRoZQogLkZuIGFyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZQogZnVuY3Rpb24gZmFpbGVkLgogLkVsCiAuXCIgLlNoIEVSUk9SUwogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAotLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzCisuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kYXRhLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2RhdGEuMwppbmRleCBjMWJjMTVkLi43OGMwYzkwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2RhdGEuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2RhdGEuMwpAQCAtMjgsNyArMjgsNyBAQAogLkR0IEFSQ0hJVkVfUkVBRF9EQVRBIDMKIC5PcwogLlNoIE5BTUUKLS5ObSBhcmNoaXZlX3JlYWRfZGF0YQorLk5tIGFyY2hpdmVfcmVhZF9kYXRhICwKIC5ObSBhcmNoaXZlX3JlYWRfZGF0YV9ibG9jayAsCiAuTm0gYXJjaGl2ZV9yZWFkX2RhdGFfc2tpcCAsCiAuTm0gYXJjaGl2ZV9yZWFkX2RhdGFfaW50b19mZApAQCAtMTE4LDcgKzExOCw2IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZXh0cmFjdCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLApAQCAtMTI3LDQgKzEyNiw1IEBACiAuWHIgYXJjaGl2ZV9yZWFkX29wZW4gMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2suMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlzay4zCmluZGV4IDAyN2Y2M2MuLjgyZDZhNWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlzay4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlzay4zCkBAIC05OSw5ICs5OSwxMCBAQAogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoICJpbmRlbnQiCiAuSXQgQ20gQVJDSElWRV9SRUFERElTS19IT05PUl9OT0RVTVAKIFNraXAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggdGhlIG5vZHVtcCBmaWxlIGF0dHJpYnV0ZSAoZmlsZSBmbGFnKSBzZXQuCi1CeSBkZWZhdWx0LCB0aGUgbm9kdW1wIGZpbGUgYXRycmlidXRlIGlzIGlnbm9yZWQuCitCeSBkZWZhdWx0LCB0aGUgbm9kdW1wIGZpbGUgYXR0cmlidXRlIGlzIGlnbm9yZWQuCiAuSXQgQ20gQVJDSElWRV9SRUFERElTS19NQUNfQ09QWUZJTEUKLU1hYyBPUyBYIHNwZWNpZmljLiBSZWFkIG1ldGFkYXRhIChBQ0xzIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzKSB3aXRoCitNYWMgT1MgWCBzcGVjaWZpYy4KK1JlYWQgbWV0YWRhdGEgKEFDTHMgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMpIHdpdGgKIC5YciBjb3B5ZmlsZSAzIC4KIEJ5IGRlZmF1bHQsIG1ldGFkYXRhIGlzIHJlYWQgdXNpbmcKIC5YciBjb3B5ZmlsZSAzIC4KQEAgLTEyMCw3ICsxMjEsNyBAQAogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZmlsZSBhdHRyaWJ1dGVzLgogLkl0IENtIEFSQ0hJVkVfUkVBRERJU0tfTk9fVFJBVkVSU0VfTU9VTlRTCiBEbyBub3QgdHJhdmVyc2UgbW91bnQgcG9pbnRzLgotQnkgZGVmYXV0LCBtb2ludCBwb2ludHMgYXJlIHRyYXZlcnNlZC4KK0J5IGRlZmF1bHQsIG1vdW50IHBvaW50cyBhcmUgdHJhdmVyc2VkLgogLkl0IENtIEFSQ0hJVkVfUkVBRERJU0tfTk9fWEFUVFIKIERvIG5vdCByZWFkIGV4dGVuZGVkIGZpbGUgYXR0cmlidXRlcyAoeGF0dHJzKS4KIEJ5IGRlZmF1bHQsIGV4dGVuZGVkIGZpbGUgYXR0cmlidXRlcyBhcmUgcmVhZCBmcm9tIGRpc2suCkBAIC0yMTYsNyArMjE3LDcgQEAKIChGb3IgZXhhbXBsZSwgZGlyZWN0b3J5IHRyYXZlcnNhbCBsaWJyYXJpZXMgb2Z0ZW4gcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uLikKIC5QcAogV2hlcmUgbmVjZXNzYXJ5LCB1c2VyIGFuZCBncm91cCBpZHMgYXJlIGNvbnZlcnRlZCB0byB1c2VyIGFuZCBncm91cCBuYW1lcwotdXNpbmcgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGxvb2t1cCBmdW5jdGlvbnMgYWJvdmUuCit1c2luZyB0aGUgY3VycmVudGx5LXJlZ2lzdGVyZWQgbG9va3VwIGZ1bmN0aW9ucyBhYm92ZS4KIFRoaXMgYWZmZWN0cyB0aGUgZmlsZSBvd25lcnNoaXAgZmllbGRzIGFuZCBBQ0wgdmFsdWVzIGluIHRoZQogLlRuIHN0cnVjdCBhcmNoaXZlX2VudHJ5CiBvYmplY3QuCkBAIC0yMjYsNyArMjI3LDcgQEAKIG9iamVjdCBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBsaWJyYXJ5IGNhbiBiZSBmb3VuZCBpbiB0aGUKIC5YciBsaWJhcmNoaXZlIDMKIG92ZXJ2aWV3LgotLlNoIEVYQU1QTEUKKy5TaCBFWEFNUExFUwogVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgbGlicmFyeSBieQogc2hvd2luZyBob3cgdG8gdXNlIGl0IHRvIGNvcHkgYW4gaXRlbSBvbiBkaXNrIGludG8gYW4gYXJjaGl2ZS4KIC5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudApAQCAtMjkxLDExICsyOTIsMTEgQEAKIGZ1bmN0aW9ucy4KIC5cIgogLlNoIFNFRSBBTFNPCisuWHIgdGFyIDEgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Rpc2sgMyAsCi0uWHIgdGFyIDEgLAogLlhyIGxpYmFyY2hpdmUgMwogLlNoIEhJU1RPUlkKIFRoZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX2VudHJ5X2Zyb21fZmlsZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX2VudHJ5X2Zyb21fZmlsZS5jCmluZGV4IDE3ODZjZmYuLjJhOGNlYzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19lbnRyeV9mcm9tX2ZpbGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfZW50cnlfZnJvbV9maWxlLmMKQEAgLTE2Myw2ICsxNjMsOSBAQAogCWludCBpbml0aWFsX2ZkID0gZmQ7CiAJaW50IHIsIHIxOwogCisJYXJjaGl2ZV9jaGVja19tYWdpYyhfYSwgQVJDSElWRV9SRUFEX0RJU0tfTUFHSUMsIEFSQ0hJVkVfU1RBVEVfQU5ZLAorCQkiYXJjaGl2ZV9yZWFkX2Rpc2tfZW50cnlfZnJvbV9maWxlIik7CisKIAlhcmNoaXZlX2NsZWFyX2Vycm9yKF9hKTsKIAlwYXRoID0gYXJjaGl2ZV9lbnRyeV9zb3VyY2VwYXRoKGVudHJ5KTsKIAlpZiAocGF0aCA9PSBOVUxMKQpAQCAtMTg4LDcgKzE5MSw3IEBACiAJCQkJfQogCQkJfSBlbHNlCiAjZW5kaWYKLQkJCWlmIChzdGF0KHBhdGgsICZzKSAhPSAwKSB7CisJCQlpZiAobGFfc3RhdChwYXRoLCAmcykgIT0gMCkgewogCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKIAkJCQkgICAgIkNhbid0IHN0YXQgJXMiLCBwYXRoKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKQEAgLTI0NiwxMSArMjQ5LDExIEBACiAKICNpZiBkZWZpbmVkKEhBVkVfUkVBRExJTkspIHx8IGRlZmluZWQoSEFWRV9SRUFETElOS0FUKQogCWlmIChTX0lTTE5LKHN0LT5zdF9tb2RlKSkgewotCQlzaXplX3QgbGlua2J1ZmZlcl9sZW4gPSBzdC0+c3Rfc2l6ZSArIDE7CisJCXNpemVfdCBsaW5rYnVmZmVyX2xlbiA9IHN0LT5zdF9zaXplOwogCQljaGFyICpsaW5rYnVmZmVyOwogCQlpbnQgbG5rbGVuOwogCi0JCWxpbmtidWZmZXIgPSBtYWxsb2MobGlua2J1ZmZlcl9sZW4pOworCQlsaW5rYnVmZmVyID0gbWFsbG9jKGxpbmtidWZmZXJfbGVuICsgMSk7CiAJCWlmIChsaW5rYnVmZmVyID09IE5VTEwpIHsKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCiAJCQkgICAgIkNvdWxkbid0IHJlYWQgbGluayBkYXRhIik7CkBAIC0yNzcsNyArMjgwLDcgQEAKIAkJCWZyZWUobGlua2J1ZmZlcik7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKIAkJfQotCQlsaW5rYnVmZmVyW2xua2xlbl0gPSAwOworCQlsaW5rYnVmZmVyW2xua2xlbl0gPSAnXDAnOwogCQlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rKGVudHJ5LCBsaW5rYnVmZmVyKTsKIAkJZnJlZShsaW5rYnVmZmVyKTsKIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcG9zaXguYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wb3NpeC5jCmluZGV4IGNkZjc1NDEuLjUyZmVjN2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wb3NpeC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wb3NpeC5jCkBAIC02OTQsNiArNjk0LDcgQEAKIAlzdHJ1Y3QgdHJlZSAqdCA9IGEtPnRyZWU7CiAJaW50IHI7CiAJc3NpemVfdCBieXRlczsKKwlpbnQ2NF90IHNwYXJzZV9ieXRlczsKIAlzaXplX3QgYnVmZmJ5dGVzOwogCWludCBlbXB0eV9zcGFyc2VfcmVnaW9uID0gMDsKIApAQCAtNzI4LDI3ICs3MjksMjMgQEAKIAkJaWYgKCh0LT5mbGFncyAmIG5lZWRzUmVzdG9yZVRpbWVzKSAhPSAwICYmCiAJCSAgICB0LT5yZXN0b3JlX3RpbWUubm9hdGltZSA9PSAwKQogCQkJZmxhZ3MgfD0gT19OT0FUSU1FOwotCQlkbyB7CiAjZW5kaWYKLQkJCXQtPmVudHJ5X2ZkID0gb3Blbl9vbl9jdXJyZW50X2Rpcih0LAotCQkJICAgIHRyZWVfY3VycmVudF9hY2Nlc3NfcGF0aCh0KSwgZmxhZ3MpOwotCQkJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcodC0+ZW50cnlfZmQpOworCQl0LT5lbnRyeV9mZCA9IG9wZW5fb25fY3VycmVudF9kaXIodCwKKwkJICAgIHRyZWVfY3VycmVudF9hY2Nlc3NfcGF0aCh0KSwgZmxhZ3MpOworCQlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyh0LT5lbnRyeV9mZCk7CiAjaWYgZGVmaW5lZChPX05PQVRJTUUpCi0JCQkvKgotCQkJICogV2hlbiB3ZSBkaWQgb3BlbiB0aGUgZmlsZSB3aXRoIE9fTk9BVElNRSBmbGFnLAotCQkJICogaWYgc3VjY2Vzc2Z1bCwgc2V0IDEgdG8gdC0+cmVzdG9yZV90aW1lLm5vYXRpbWUKLQkJCSAqIG5vdCB0byByZXN0b3JlIGFuIGF0aW1lIG9mIHRoZSBmaWxlIGxhdGVyLgotCQkJICogaWYgZmFpbGVkIGJ5IEVQRVJNLCByZXRyeSBpdCB3aXRob3V0IE9fTk9BVElNRSBmbGFnLgotCQkJICovCi0JCQlpZiAoZmxhZ3MgJiBPX05PQVRJTUUpIHsKLQkJCQlpZiAodC0+ZW50cnlfZmQgPj0gMCkKLQkJCQkJdC0+cmVzdG9yZV90aW1lLm5vYXRpbWUgPSAxOwotCQkJCWVsc2UgaWYgKGVycm5vID09IEVQRVJNKSB7Ci0JCQkJCWZsYWdzICY9IH5PX05PQVRJTUU7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJfSB3aGlsZSAoMCk7CisJCS8qCisJCSAqIFdoZW4gd2UgZGlkIG9wZW4gdGhlIGZpbGUgd2l0aCBPX05PQVRJTUUgZmxhZywKKwkJICogaWYgc3VjY2Vzc2Z1bCwgc2V0IDEgdG8gdC0+cmVzdG9yZV90aW1lLm5vYXRpbWUKKwkJICogbm90IHRvIHJlc3RvcmUgYW4gYXRpbWUgb2YgdGhlIGZpbGUgbGF0ZXIuCisJCSAqIGlmIGZhaWxlZCBieSBFUEVSTSwgcmV0cnkgaXQgd2l0aG91dCBPX05PQVRJTUUgZmxhZy4KKwkJICovCisJCWlmIChmbGFncyAmIE9fTk9BVElNRSkgeworCQkJaWYgKHQtPmVudHJ5X2ZkID49IDApCisJCQkJdC0+cmVzdG9yZV90aW1lLm5vYXRpbWUgPSAxOworCQkJZWxzZSBpZiAoZXJybm8gPT0gRVBFUk0pCisJCQkJZmxhZ3MgJj0gfk9fTk9BVElNRTsKKwkJfQogI2VuZGlmCiAJCWlmICh0LT5lbnRyeV9mZCA8IDApIHsKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKQEAgLTc5Miw5ICs3ODksOSBAQAogCQkJYS0+YXJjaGl2ZS5zdGF0ZSA9IEFSQ0hJVkVfU1RBVEVfRkFUQUw7CiAJCQlnb3RvIGFib3J0X3JlYWRfZGF0YTsKIAkJfQotCQlieXRlcyA9IHQtPmN1cnJlbnRfc3BhcnNlLT5vZmZzZXQgLSB0LT5lbnRyeV90b3RhbDsKLQkJdC0+ZW50cnlfcmVtYWluaW5nX2J5dGVzIC09IGJ5dGVzOwotCQl0LT5lbnRyeV90b3RhbCArPSBieXRlczsKKwkJc3BhcnNlX2J5dGVzID0gdC0+Y3VycmVudF9zcGFyc2UtPm9mZnNldCAtIHQtPmVudHJ5X3RvdGFsOworCQl0LT5lbnRyeV9yZW1haW5pbmdfYnl0ZXMgLT0gc3BhcnNlX2J5dGVzOworCQl0LT5lbnRyeV90b3RhbCArPSBzcGFyc2VfYnl0ZXM7CiAJfQogCiAJLyoKQEAgLTg1Niw3ICs4NTMsMTIgQEAKIAljb25zdCBzdHJ1Y3Qgc3RhdCAqc3Q7IC8qIGluZm8gdG8gdXNlIGZvciB0aGlzIGVudHJ5ICovCiAJY29uc3Qgc3RydWN0IHN0YXQgKmxzdDsvKiBsc3RhdCgpIGluZm9ybWF0aW9uICovCiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgZGVzY2VuZCwgcjsKKwlpbnQgZGVsYXllZCwgZGVsYXllZF9lcnJubywgZGVzY2VuZCwgcjsKKwlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgZGVsYXllZF9zdHI7CisKKwlkZWxheWVkID0gQVJDSElWRV9PSzsKKwlkZWxheWVkX2Vycm5vID0gMDsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZkZWxheWVkX3N0cik7CiAKIAlzdCA9IE5VTEw7CiAJbHN0ID0gTlVMTDsKQEAgLTg4NSwxNCArODg3LDI2IEBACiAJCWNhc2UgVFJFRV9SRUdVTEFSOgogCQkJbHN0ID0gdHJlZV9jdXJyZW50X2xzdGF0KHQpOwogCQkJaWYgKGxzdCA9PSBOVUxMKSB7CisJCQkgICAgaWYgKGVycm5vID09IEVOT0VOVCAmJiB0LT5kZXB0aCA+IDApIHsKKwkJCQlkZWxheWVkID0gQVJDSElWRV9XQVJOOworCQkJCWRlbGF5ZWRfZXJybm8gPSBlcnJubzsKKwkJCQlpZiAoZGVsYXllZF9zdHIubGVuZ3RoID09IDApIHsKKwkJCQkJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmZGVsYXllZF9zdHIsCisJCQkJCSAgICAiJXMiLCB0cmVlX2N1cnJlbnRfcGF0aCh0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmZGVsYXllZF9zdHIsCisJCQkJCSAgICAiICVzIiwgdHJlZV9jdXJyZW50X3BhdGgodCkpOworCQkJCX0KKwkJCSAgICB9IGVsc2UgewogCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKIAkJCQkgICAgIiVzOiBDYW5ub3Qgc3RhdCIsCiAJCQkJICAgIHRyZWVfY3VycmVudF9wYXRoKHQpKTsKIAkJCQl0cmVlX2VudGVyX2luaXRpYWxfZGlyKHQpOwogCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJICAgIH0KIAkJCX0KIAkJCWJyZWFrOwotCQl9CQorCQl9CiAJfSB3aGlsZSAobHN0ID09IE5VTEwpOwogCiAjaWZkZWYgX19BUFBMRV9fCkBAIC0xMDgzLDYgKzEwOTcsMTcgQEAKIAlyID0gYXJjaGl2ZV9yZWFkX2Rpc2tfZW50cnlfZnJvbV9maWxlKCYoYS0+YXJjaGl2ZSksIGVudHJ5LAogCQl0LT5lbnRyeV9mZCwgc3QpOwogCisJaWYgKHIgPT0gQVJDSElWRV9PSykgeworCQlyID0gZGVsYXllZDsKKwkJaWYgKHIgIT0gQVJDSElWRV9PSykgeworCQkJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmZGVsYXllZF9zdHIsICI6ICVzIiwKKwkJCSAgICAiRmlsZSByZW1vdmVkIGJlZm9yZSB3ZSByZWFkIGl0Iik7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBkZWxheWVkX2Vycm5vLAorCQkJICAgICIlcyIsIGRlbGF5ZWRfc3RyLnMpOworCQl9CisJfQorCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmRlbGF5ZWRfc3RyKTsKKwogCXJldHVybiAocik7CiB9CiAKQEAgLTExMTQsNiArMTEzOSw4IEBACiAJCXQtPmVudHJ5X2ZkID0gLTE7CiAJfQogCisJYXJjaGl2ZV9lbnRyeV9jbGVhcihlbnRyeSk7CisKIAlmb3IgKDs7KSB7CiAJCXIgPSBuZXh0X2VudHJ5KGEsIHQsIGVudHJ5KTsKIAkJaWYgKHQtPmVudHJ5X2ZkID49IDApIHsKQEAgLTEyNjYsMTAgKzEyOTMsMjMgQEAKIAlpZiAodC0+dmlzaXRfdHlwZSAhPSBUUkVFX1JFR1VMQVIgfHwgIXQtPmRlc2NlbmQpCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKKwkvKgorCSAqIFdlIG11c3Qgbm90IHRyZWF0IHRoZSBpbml0aWFsIHNwZWNpZmllZCBwYXRoIGFzIGEgcGh5c2ljYWwgZGlyLAorCSAqIGJlY2F1c2UgaWYgd2UgZG8gdGhlbiB3ZSB3aWxsIHRyeSBhbmQgYXNjZW5kIG91dCBvZiBpdCBieSBvcGVuaW5nCisJICogIi4uIiB3aGljaCBpcyAoYSkgd3JvbmcgYW5kIChiKSBjYXVzZXMgc3B1cmlvdXMgcGVybWlzc2lvbnMgZXJyb3JzCisJICogaWYgIi4uIiBpcyBub3QgcmVhZGFibGUgYnkgdXMuIEluc3RlYWQsIHRyZWF0IGl0IGFzIGlmIGl0IHdlcmUgYQorCSAqIHN5bWxpbmsuIChUaGlzIHVzZXMgYW4gZXh0cmEgZmQsIGJ1dCBpdCBjYW4gb25seSBoYXBwZW4gb25jZSBhdCB0aGUKKwkgKiB0b3AgbGV2ZWwgb2YgYSB0cmF2ZXJzZS4pIEJ1dCB3ZSBjYW4ndCBuZWNlc3NhcmlseSBhc3N1bWUgdC0+c3QgaXMKKwkgKiB2YWxpZCBoZXJlICh0aG91Z2ggdC0+bHN0IGlzKSwgd2hpY2ggY29tcGxpY2F0ZXMgdGhlIGxvZ2ljIGEKKwkgKiBsaXR0bGUuCisJICovCiAJaWYgKHRyZWVfY3VycmVudF9pc19waHlzaWNhbF9kaXIodCkpIHsKIAkJdHJlZV9wdXNoKHQsIHQtPmJhc2VuYW1lLCB0LT5jdXJyZW50X2ZpbGVzeXN0ZW1faWQsCiAJCSAgICB0LT5sc3Quc3RfZGV2LCB0LT5sc3Quc3RfaW5vLCAmdC0+cmVzdG9yZV90aW1lKTsKLQkJdC0+c3RhY2stPmZsYWdzIHw9IGlzRGlyOworCQlpZiAodC0+c3RhY2stPnBhcmVudC0+cGFyZW50ICE9IE5VTEwpCisJCQl0LT5zdGFjay0+ZmxhZ3MgfD0gaXNEaXI7CisJCWVsc2UKKwkJCXQtPnN0YWNrLT5mbGFncyB8PSBpc0Rpckxpbms7CiAJfSBlbHNlIGlmICh0cmVlX2N1cnJlbnRfaXNfZGlyKHQpKSB7CiAJCXRyZWVfcHVzaCh0LCB0LT5iYXNlbmFtZSwgdC0+Y3VycmVudF9maWxlc3lzdGVtX2lkLAogCQkgICAgdC0+c3Quc3RfZGV2LCB0LT5zdC5zdF9pbm8sICZ0LT5yZXN0b3JlX3RpbWUpOwpAQCAtMjEyMiw2ICsyMTYyLDE3IEBACiBzdGF0aWMgc3RydWN0IHRyZWUgKgogdHJlZV9yZW9wZW4oc3RydWN0IHRyZWUgKnQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXN0b3JlX3RpbWUpCiB7CisjaWYgZGVmaW5lZChPX1BBVEgpCisJLyogTGludXggKi8KKwljb25zdCBpbnQgb19mbGFnID0gT19QQVRIOworI2VsaWYgZGVmaW5lZChPX1NFQVJDSCkKKwkvKiBTdW5PUyAqLworCWNvbnN0IGludCBvX2ZsYWcgPSBPX1NFQVJDSDsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoT19FWEVDKQorCS8qIEZyZWVCU0QgKi8KKwljb25zdCBpbnQgb19mbGFnID0gT19FWEVDOworI2VuZGlmCisKIAl0LT5mbGFncyA9IChyZXN0b3JlX3RpbWUgIT0gMCk/bmVlZHNSZXN0b3JlVGltZXM6MDsKIAl0LT5mbGFncyB8PSBvbkluaXRpYWxEaXI7CiAJdC0+dmlzaXRfdHlwZSA9IDA7CkBAIC0yMTQzLDYgKzIxOTQsMTYgQEAKIAl0LT5zdGFjay0+ZmxhZ3MgPSBuZWVkc0ZpcnN0VmlzaXQ7CiAJdC0+bWF4T3BlbkNvdW50ID0gdC0+b3BlbkNvdW50ID0gMTsKIAl0LT5pbml0aWFsX2Rpcl9mZCA9IG9wZW4oIi4iLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CisjaWYgZGVmaW5lZChPX1BBVEgpIHx8IGRlZmluZWQoT19TRUFSQ0gpIHx8IFwKKyAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChPX0VYRUMpKQorCS8qCisJICogTW9zdCBsaWtlbHkgcmVhc29uIHRvIGZhaWwgb3BlbmluZyAiLiIgaXMgdGhhdCBpdCdzIG5vdCByZWFkYWJsZSwKKwkgKiBzbyB0cnkgYWdhaW4gZm9yIGV4ZWN1dGUuIFRoZSBjb25zZXF1ZW5jZXMgb2Ygbm90IG9wZW5pbmcgdGhpcyBhcmUKKwkgKiB1bmhlbHBmdWwgYW5kIHVubmVjZXNzYXJ5IGVycm9ycyBsYXRlci4KKwkgKi8KKwlpZiAodC0+aW5pdGlhbF9kaXJfZmQgPCAwKQorCQl0LT5pbml0aWFsX2Rpcl9mZCA9IG9wZW4oIi4iLCBvX2ZsYWcgfCBPX0NMT0VYRUMpOworI2VuZGlmCiAJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcodC0+aW5pdGlhbF9kaXJfZmQpOwogCXQtPndvcmtpbmdfZGlyX2ZkID0gdHJlZV9kdXAodC0+aW5pdGlhbF9kaXJfZmQpOwogCXJldHVybiAodCk7CkBAIC0yNDUwLDcgKzI1MTEsNyBAQAogI2Vsc2UKIAkJaWYgKHRyZWVfZW50ZXJfd29ya2luZ19kaXIodCkgIT0gMCkKIAkJCXJldHVybiBOVUxMOwotCQlpZiAoc3RhdCh0cmVlX2N1cnJlbnRfYWNjZXNzX3BhdGgodCksICZ0LT5zdCkgIT0gMCkKKwkJaWYgKGxhX3N0YXQodHJlZV9jdXJyZW50X2FjY2Vzc19wYXRoKHQpLCAmdC0+c3QpICE9IDApCiAjZW5kaWYKIAkJCXJldHVybiBOVUxMOwogCQl0LT5mbGFncyB8PSBoYXNTdGF0OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wcml2YXRlLmgKaW5kZXggZjAzYTBhOS4uYmM4YWJjMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcHJpdmF0ZS5oCkBAIC0yNiwxMyArMjYsMTMgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3ByaXZhdGUuaCAyMDExMDUgMjAwOS0xMi0yOCAwMzoyMDo1NFoga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9SRUFEX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUkVBRF9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1JFQURfRElTS19QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9SRUFEX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtX2FjbC5oIgogCiBzdHJ1Y3QgdHJlZTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza193aW5kb3dzLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfd2luZG93cy5jCmluZGV4IGQ4MjA0OGQuLmZkZDM3NmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza193aW5kb3dzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3dpbmRvd3MuYwpAQCAtMjk5LDggKzI5OSwxNTUgQEAKIAkJICAgIHN0cnVjdCByZXN0b3JlX3RpbWUgKik7CiBzdGF0aWMgaW50CXNldHVwX3NwYXJzZV9mcm9tX2Rpc2soc3RydWN0IGFyY2hpdmVfcmVhZF9kaXNrICosCiAJCSAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBIQU5ETEUpOworc3RhdGljIGludAlsYV9saW5rbmFtZV9mcm9tX2hhbmRsZShIQU5ETEUsIHdjaGFyX3QgKiosIGludCAqKTsKK3N0YXRpYyBpbnQJbGFfbGlua25hbWVfZnJvbV9wYXRodyhjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCAqKTsKK3N0YXRpYyB2b2lkCWVudHJ5X3N5bWxpbmtfZnJvbV9wYXRodyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLAorCQkgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCk7CiAKK3R5cGVkZWYgc3RydWN0IF9SRVBBUlNFX0RBVEFfQlVGRkVSIHsKKwlVTE9ORwlSZXBhcnNlVGFnOworCVVTSE9SVCBSZXBhcnNlRGF0YUxlbmd0aDsKKwlVU0hPUlQJUmVzZXJ2ZWQ7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJVVNIT1JUCVN1YnN0aXR1dGVOYW1lT2Zmc2V0OworCQkJVVNIT1JUCVN1YnN0aXR1dGVOYW1lTGVuZ3RoOworCQkJVVNIT1JUCVByaW50TmFtZU9mZnNldDsKKwkJCVVTSE9SVAlQcmludE5hbWVMZW5ndGg7CisJCQlVTE9ORwlGbGFnczsKKwkJCVdDSEFSCVBhdGhCdWZmZXJbMV07CisJCX0gU3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlcjsKKwkJc3RydWN0IHsKKwkJCVVTSE9SVAlTdWJzdGl0dXRlTmFtZU9mZnNldDsKKwkJCVVTSE9SVAlTdWJzdGl0dXRlTmFtZUxlbmd0aDsKKwkJCVVTSE9SVAlQcmludE5hbWVPZmZzZXQ7CisJCQlVU0hPUlQJUHJpbnROYW1lTGVuZ3RoOworCQkJV0NIQVIJUGF0aEJ1ZmZlclsxXTsKKwkJfSBNb3VudFBvaW50UmVwYXJzZUJ1ZmZlcjsKKwkJc3RydWN0IHsKKwkJCVVDSEFSCURhdGFCdWZmZXJbMV07CisJCX0gR2VuZXJpY1JlcGFyc2VCdWZmZXI7CisJfSBEVU1NWVVOSU9OTkFNRTsKK30gUkVQQVJTRV9EQVRBX0JVRkZFUiwgKlBSRVBBUlNFX0RBVEFfQlVGRkVSOwogCisvKgorICogUmVhZHMgdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmsKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZQorICogb3V0YnVmIGlzIGFsbG9jYXRlZCBpbiB0aGUgZnVuY3Rpb24KKyAqLworc3RhdGljIGludAorbGFfbGlua25hbWVfZnJvbV9oYW5kbGUoSEFORExFIGgsIHdjaGFyX3QgKipsaW5rbmFtZSwgaW50ICpsaW5rdHlwZSkKK3sKKwlEV09SRCBpbmJ5dGVzOworCVJFUEFSU0VfREFUQV9CVUZGRVIgKmJ1ZjsKKwlCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBzdDsKKwlzaXplX3QgbGVuOworCUJPT0wgcmV0OworCUJZVEUgKmluZGF0YTsKKwl3Y2hhcl90ICp0YnVmOworCisJcmV0ID0gR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaCwgJnN0KTsKKwlpZiAocmV0ID09IDAgfHwKKwkgICAgKHN0LmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSA9PSAwKSB7CisJCXJldHVybiAoLTEpOworCX0KKworCWluZGF0YSA9IG1hbGxvYyhNQVhJTVVNX1JFUEFSU0VfREFUQV9CVUZGRVJfU0laRSk7CisJcmV0ID0gRGV2aWNlSW9Db250cm9sKGgsIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5ULCBOVUxMLCAwLCBpbmRhdGEsCisJICAgIDEwMjQsICZpbmJ5dGVzLCBOVUxMKTsKKwlpZiAocmV0ID09IDApIHsKKwkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJZnJlZShpbmRhdGEpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlidWYgPSAoUkVQQVJTRV9EQVRBX0JVRkZFUiAqKSBpbmRhdGE7CisJaWYgKGJ1Zi0+UmVwYXJzZVRhZyAhPSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSB7CisJCWZyZWUoaW5kYXRhKTsKKwkJLyogRmlsZSBpcyBub3QgYSBzeW1ib2xpYyBsaW5rICovCisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlsZW4gPSBidWYtPlN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXIuU3Vic3RpdHV0ZU5hbWVMZW5ndGg7CisJaWYgKGxlbiA8PSAwKSB7CisJCWZyZWUoaW5kYXRhKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJdGJ1ZiA9IG1hbGxvYyhsZW4gKyAxICogc2l6ZW9mKHdjaGFyX3QpKTsKKwlpZiAodGJ1ZiA9PSBOVUxMKSB7CisJCWZyZWUoaW5kYXRhKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtY3B5KHRidWYsICYoKEJZVEUgKilidWYtPlN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXIuUGF0aEJ1ZmZlcikKKwkgICAgW2J1Zi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5TdWJzdGl0dXRlTmFtZU9mZnNldF0sIGxlbik7CisJZnJlZShpbmRhdGEpOworCisJdGJ1ZltsZW4gLyBzaXplb2Yod2NoYXJfdCldID0gTCdcMCc7CisKKwkqbGlua25hbWUgPSB0YnVmOworCisJLyoKKwkgKiBUcmFuc2xhdGUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBmb3IgbGliYXJjaGl2ZSBpbnRlcm5hbCB1c2UKKwkgKi8KKwl3aGlsZSgqdGJ1ZiAhPSBMJ1wwJykgeworCQlpZiAoKnRidWYgPT0gTCdcXCcpCisJCQkqdGJ1ZiA9IEwnLyc7CisJCXRidWYrKzsKKwl9CisKKwlpZiAoKHN0LmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpID09IDApCisJCSpsaW5rdHlwZSA9IEFFX1NZTUxJTktfVFlQRV9GSUxFOworCWVsc2UKKwkJKmxpbmt0eXBlID0gQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIEFFX1NZTUxJTktfVFlQRV9GSUxFLCBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZIG9yIC0xIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQKK2xhX2xpbmtuYW1lX2Zyb21fcGF0aHcoY29uc3Qgd2NoYXJfdCAqcGF0aCwgd2NoYXJfdCAqKm91dGJ1ZiwgaW50ICpsaW5rdHlwZSkKK3sKKwlIQU5ETEUgaDsKKwljb25zdCBEV09SRCBmbGFnID0gRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MgfAorCSAgICBGSUxFX0ZMQUdfT1BFTl9SRVBBUlNFX1BPSU5UOworCWludCByZXQ7CisKKwloID0gQ3JlYXRlRmlsZVcocGF0aCwgMCwgRklMRV9TSEFSRV9SRUFELCBOVUxMLCBPUEVOX0VYSVNUSU5HLCBmbGFnLAorCSAgICBOVUxMKTsKKwlpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXQgPSBsYV9saW5rbmFtZV9mcm9tX2hhbmRsZShoLCBvdXRidWYsIGxpbmt0eXBlKTsKKwlDbG9zZUhhbmRsZShoKTsKKworCXJldHVybiAocmV0KTsKK30KKworc3RhdGljIHZvaWQKK2VudHJ5X3N5bWxpbmtfZnJvbV9wYXRodyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGNvbnN0IHdjaGFyX3QgKnBhdGgpCit7CisJd2NoYXJfdCAqbGlua25hbWUgPSBOVUxMOworCWludCByZXQsIGxpbmt0eXBlOworCisJcmV0ID0gbGFfbGlua25hbWVfZnJvbV9wYXRodyhwYXRoLCAmbGlua25hbWUsICZsaW5rdHlwZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm47CisJaWYgKGxpbmt0eXBlID49IDApIHsKKwkJYXJjaGl2ZV9lbnRyeV9jb3B5X3N5bWxpbmtfdyhlbnRyeSwgbGlua25hbWUpOworCQlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUoZW50cnksIGxpbmt0eXBlKTsKKwl9CisJZnJlZShsaW5rbmFtZSk7CisKKwlyZXR1cm47Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgYXJjaGl2ZV92dGFibGUgKgogYXJjaGl2ZV9yZWFkX2Rpc2tfdnRhYmxlKHZvaWQpCkBAIC05MDAsNiArMTA0NywxOSBAQAogCX0KIAogCS8qCisJICogRmlsZSBhdHRyaWJ1dGVzCisJICovCisJaWYgKChhLT5mbGFncyAmIEFSQ0hJVkVfUkVBRERJU0tfTk9fRkZMQUdTKSA9PSAwKSB7CisJCWNvbnN0IGludCBzdXBwb3J0ZWRfYXR0cnMgPQorCQkgICAgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkgfAorCQkgICAgRklMRV9BVFRSSUJVVEVfSElEREVOIHwKKwkJICAgIEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKKwkJRFdPUkQgZmlsZV9hdHRycyA9IHN0LT5kd0ZpbGVBdHRyaWJ1dGVzICYgc3VwcG9ydGVkX2F0dHJzOworCQlpZiAoZmlsZV9hdHRycyAhPSAwKQorCQkJYXJjaGl2ZV9lbnRyeV9zZXRfZmZsYWdzKGVudHJ5LCBmaWxlX2F0dHJzLCAwKTsKKwl9CisKKwkvKgogCSAqIEludm9rZSBhIG1ldGEgZGF0YSBmaWx0ZXIgY2FsbGJhY2suCiAJICovCiAJaWYgKGEtPm1ldGFkYXRhX2ZpbHRlcl9mdW5jKSB7CkBAIC05NjYsNiArMTEyNiw4IEBACiAJCXQtPmVudHJ5X2ZoID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAJfQogCisJYXJjaGl2ZV9lbnRyeV9jbGVhcihlbnRyeSk7CisKIAl3aGlsZSAoKHIgPSBuZXh0X2VudHJ5KGEsIHQsIGVudHJ5KSkgPT0gQVJDSElWRV9SRVRSWSkKIAkJYXJjaGl2ZV9lbnRyeV9jbGVhcihlbnRyeSk7CiAKQEAgLTE4MzgsOSArMjAwMCwxMCBAQAogCQltb2RlIHw9IFNfSVdVU1IgfCBTX0lXR1JQIHwgU19JV09USDsKIAlpZiAoKGJoZmktPmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSAmJgogCSAgICBmaW5kRGF0YSAhPSBOVUxMICYmCi0JICAgIGZpbmREYXRhLT5kd1Jlc2VydmVkMCA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKQorCSAgICBmaW5kRGF0YS0+ZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgewogCQltb2RlIHw9IFNfSUZMTks7Ci0JZWxzZSBpZiAoYmhmaS0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJZW50cnlfc3ltbGlua19mcm9tX3BhdGh3KGVudHJ5LCBwYXRoKTsKKwl9IGVsc2UgaWYgKGJoZmktPmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCiAJCW1vZGUgfD0gU19JRkRJUiB8IFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USDsKIAllbHNlIHsKIAkJY29uc3Qgd2NoYXJfdCAqcDsKQEAgLTIxMzksNiArMjMwMiw4IEBACiAJCWZpbGVBdHRyaWJ1dGVzID0gYmhmaS5kd0ZpbGVBdHRyaWJ1dGVzOwogCX0gZWxzZSB7CiAJCWFyY2hpdmVfZW50cnlfY29weV9zdGF0KGVudHJ5LCBzdCk7CisJCWlmIChzdC0+c3RfbW9kZSAmIFNfSUZMTkspCisJCQllbnRyeV9zeW1saW5rX2Zyb21fcGF0aHcoZW50cnksIHBhdGgpOwogCQloID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAJfQogCkBAIC0yMTUxLDYgKzIzMTYsMTkgQEAKIAkJYXJjaGl2ZV9lbnRyeV9jb3B5X2duYW1lKGVudHJ5LCBuYW1lKTsKIAogCS8qCisJICogRmlsZSBhdHRyaWJ1dGVzCisJICovCisJaWYgKChhLT5mbGFncyAmIEFSQ0hJVkVfUkVBRERJU0tfTk9fRkZMQUdTKSA9PSAwKSB7CisJCWNvbnN0IGludCBzdXBwb3J0ZWRfYXR0cnMgPQorCQkgICAgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkgfAorCQkgICAgRklMRV9BVFRSSUJVVEVfSElEREVOIHwKKwkJICAgIEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKKwkJRFdPUkQgZmlsZV9hdHRycyA9IGZpbGVBdHRyaWJ1dGVzICYgc3VwcG9ydGVkX2F0dHJzOworCQlpZiAoZmlsZV9hdHRycyAhPSAwKQorCQkJYXJjaGl2ZV9lbnRyeV9zZXRfZmZsYWdzKGVudHJ5LCBmaWxlX2F0dHJzLCAwKTsKKwl9CisKKwkvKgogCSAqIENhbiB0aGlzIGZpbGUgYmUgc3BhcnNlIGZpbGUgPwogCSAqLwogCWlmIChhcmNoaXZlX2VudHJ5X2ZpbGV0eXBlKGVudHJ5KSAhPSBBRV9JRlJFRwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9leHRyYWN0LjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2V4dHJhY3QuMwppbmRleCA2ZWMwY2VkLi44NThmMzk3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2V4dHJhY3QuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2V4dHJhY3QuMwpAQCAtMTI2LDcgKzEyNiw2IEBACiBmdW5jdGlvbnMuCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKQEAgLTEzNCw0ICsxMzMsNSBAQAogLlhyIGFyY2hpdmVfcmVhZF9vcGVuIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9maWx0ZXIuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZmlsdGVyLjMKaW5kZXggZWYwYTcwMS4uMWJhNWZjYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9maWx0ZXIuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZpbHRlci4zCkBAIC0xNDcsOCArMTQ3LDggQEAKIGZ1bmN0aW9ucy4KIC5cIgogLlNoIFNFRSBBTFNPCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzICwKLS5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMKKy5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mb3JtYXQuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZm9ybWF0LjMKaW5kZXggOTFjNWQyYy4uZjM4MDRjZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mb3JtYXQuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Zvcm1hdC4zCkBAIC0xMDIsNyArMTAyLDcgQEAKIC5GbiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyCiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgdmFyaWV0eSBvZiBzdGFuZGFyZCB0YXIgZm9ybWF0cywgb2xkLXN0eWxlIHRhciwKIHVzdGFyLCBwYXggaW50ZXJjaGFuZ2UgZm9ybWF0LCBhbmQgbWFueSBjb21tb24gdmFyaWFudHMuCi0uSXQgRm4gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbCAKKy5JdCBGbiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYWxsCiBFbmFibGVzIHN1cHBvcnQgZm9yIGFsbCBhdmFpbGFibGUgZm9ybWF0cyBleGNlcHQgdGhlCiAuRHEgcmF3CiBmb3JtYXQgKHNlZSBiZWxvdykuCkBAIC0xMjUsNyArMTI1LDcgQEAKIGFuIGVtcHR5IGZpbGUgYmFzZWQgcHVyZWx5IG9uIGNvbnRlbnRzLgogU28gZW1wdHkgZmlsZXMgYXJlIHRyZWF0ZWQgYnkgbGliYXJjaGl2ZSBhcyBhIGRpc3RpbmN0CiBmb3JtYXQuCi0uSXQgRm4gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhdyAKKy5JdCBGbiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3CiBUaGUKIC5EcSByYXcKIGZvcm1hdCBoYW5kbGVyIGFsbG93cyBsaWJhcmNoaXZlIHRvIGJlIHVzZWQgdG8gcmVhZCBhcmJpdHJhcnkgZGF0YS4KQEAgLTE1MywxMSArMTUzLDExIEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CiAuU2ggQlVHUwogTWFueSB0cmFkaXRpb25hbCBhcmNoaXZlciBwcm9ncmFtcyB0cmVhdApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mcmVlLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZyZWUuMwppbmRleCA1YjIxODIyLi44MzcxYzNhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZyZWUuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZyZWUuMwpAQCAtODMsMTEgKzgzLDExIEBACiBmdW5jdGlvbnMuCiAuXCIKIC5TaCBTRUUgQUxTTwotLlhyIGxpYmFyY2hpdmUgMyAsCi0uWHIgYXJjaGl2ZV9yZWFkX25ldyAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCisuWHIgYXJjaGl2ZV9yZWFkX25ldyAzICwKIC5YciBhcmNoaXZlX3JlYWRfb3BlbiAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCi0uWHIgYXJjaGl2ZV91dGlsIDMKKy5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2hlYWRlci4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9oZWFkZXIuMwppbmRleCA0ODBhNjY2Li4xZTk3ZjNhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2hlYWRlci4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfaGVhZGVyLjMKQEAgLTc5LDcgKzc5LDYgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9leHRyYWN0IDMgLApAQCAtODgsNCArODcsNSBAQAogLlhyIGFyY2hpdmVfcmVhZF9vcGVuIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9uZXcuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfbmV3LjMKaW5kZXggMGM5ZDFhNy4uOGJiNmI4NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9uZXcuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX25ldy4zCkBAIC01MCwxMCArNTAsMTAgQEAKIC5cIiAuU2ggRVJST1JTCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW4uMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbi4zCmluZGV4IDIyNzhlYmMuLmY2NzY3NzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbi4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbi4zCkBAIC0yMDUsNyArMjA1LDcgQEAKIC5GbiBhcmNoaXZlX3NldF9lcnJvcgogdG8gcmVnaXN0ZXIgYW4gZXJyb3IgY29kZSBhbmQgbWVzc2FnZSBhbmQKIHJldHVybgotLkNtIEFSQ0hJVkVfRkFUQUwuCisuQ20gQVJDSElWRV9GQVRBTCAuCiAuXCIgLlNoIEVYQU1QTEUKIC5cIgogLlNoIFJFVFVSTiBWQUxVRVMKQEAgLTIyMywxMSArMjIzLDExIEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW5fZmlsZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuX2ZpbGUuYwppbmRleCBiZmU5MzNiLi4xMDFkYWU2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW5fZmlsZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbl9maWxlLmMKQEAgLTE3NCw4ICsxNzQsNyBAQAogCXN0cnVjdCByZWFkX0ZJTEVfZGF0YSAqbWluZSA9IChzdHJ1Y3QgcmVhZF9GSUxFX2RhdGEgKiljbGllbnRfZGF0YTsKIAogCSh2b2lkKWE7IC8qIFVOVVNFRCAqLwotCWlmIChtaW5lLT5idWZmZXIgIT0gTlVMTCkKLQkJZnJlZShtaW5lLT5idWZmZXIpOworCWZyZWUobWluZS0+YnVmZmVyKTsKIAlmcmVlKG1pbmUpOwogCXJldHVybiAoQVJDSElWRV9PSyk7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfcHJpdmF0ZS5oCmluZGV4IDc4NTQ2ZGMuLmM4NDJlNmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfcHJpdmF0ZS5oCkBAIC0yNSwxNSArMjUsMTUgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9wcml2YXRlLmggMjAxMDg4IDIwMDktMTItMjggMDI6MTg6NTVaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfUkVBRF9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9SRUFEX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfUkVBRF9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9SRUFEX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCkBAIC05OCw2ICs5OCw4IEBACiAJaW50ICgqY2xvc2UpKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpzZWxmKTsKIAkvKiBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgc3dpdGNoaW5nIGZyb20gcmVhZGluZyBvbmUgYmxvY2sgdG8gdGhlIG5leHQvcHJldiAqLwogCWludCAoKnNzd2l0Y2gpKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpzZWxmLCB1bnNpZ25lZCBpbnQgaWluZGV4KTsKKwkvKiBSZWFkIGFueSBoZWFkZXIgbWV0YWRhdGEgaWYgYXZhaWxhYmxlLiAqLworCWludCAoKnJlYWRfaGVhZGVyKShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqc2VsZiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KTsKIAkvKiBNeSBwcml2YXRlIGRhdGEuICovCiAJdm9pZCAqZGF0YTsKIApAQCAtMjUwLDYgKzI1Miw3IEBACiBpbnQ2NF90CV9fYXJjaGl2ZV9yZWFkX2ZpbHRlcl9zZWVrKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICosIGludDY0X3QsIGludCk7CiBpbnQ2NF90CV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoc3RydWN0IGFyY2hpdmVfcmVhZCAqLCBpbnQ2NF90KTsKIGludDY0X3QJX19hcmNoaXZlX3JlYWRfZmlsdGVyX2NvbnN1bWUoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKiwgaW50NjRfdCk7CitpbnQgX19hcmNoaXZlX3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQgKiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKik7CiBpbnQgX19hcmNoaXZlX3JlYWRfcHJvZ3JhbShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqLCBjb25zdCBjaGFyICopOwogdm9pZCBfX2FyY2hpdmVfcmVhZF9mcmVlX2ZpbHRlcnMoc3RydWN0IGFyY2hpdmVfcmVhZCAqKTsKIHN0cnVjdCBhcmNoaXZlX3JlYWRfZXh0cmFjdCAqX19hcmNoaXZlX3JlYWRfZ2V0X2V4dHJhY3Qoc3RydWN0IGFyY2hpdmVfcmVhZCAqKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X2Zvcm1hdC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfZm9ybWF0LmMKaW5kZXggMTkwZjQzNi4uMWQzZTQ5ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfZm9ybWF0LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfZm9ybWF0LmMKQEAgLTczLDYgKzczLDkgQEAKICAgICBjYXNlIEFSQ0hJVkVfRk9STUFUX1JBUjoKICAgICAgIHN0cmNweShzdHIsICJyYXIiKTsKICAgICAgIGJyZWFrOworICAgIGNhc2UgQVJDSElWRV9GT1JNQVRfUkFSX1Y1OgorICAgICAgc3RyY3B5KHN0ciwgInJhcjUiKTsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgQVJDSElWRV9GT1JNQVRfVEFSOgogICAgICAgc3RyY3B5KHN0ciwgInRhciIpOwogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zLjMKaW5kZXggMWEyNTFjZS4uNzhkOTk5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMuMwpAQCAtMjQsNyArMjQsNyBAQAogLlwiCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBGZWJydWFyeSAyLCAyMDEyCisuRGQgSmFudWFyeSAzMSwgMjAyMAogLkR0IEFSQ0hJVkVfUkVBRF9PUFRJT05TIDMKIC5PcwogLlNoIE5BTUUKQEAgLTE4MCw2ICsxODAsMTggQEAKIC5cIgogLlNoIE9QVElPTlMKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBGb3JtYXQgY2FiCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSBuYW1lcy4KKy5FbAorLkl0IEZvcm1hdCBjcGlvCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSBuYW1lcy4KKy5FbAogLkl0IEZvcm1hdCBpc285NjYwCiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CiAuSXQgQ20gam9saWV0CkBAIC0xOTMsNiArMjA1LDI0IEBACiAuQ20gIXJvY2tyaWRnZQogdG8gZGlzYWJsZS4KIC5FbAorLkl0IEZvcm1hdCBsaGEKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IG10cmVlCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gY2hlY2tmcworQWxsb3cgcmVhZGluZyBpbmZvcm1hdGlvbiBtaXNzaW5nIGZyb20gdGhlIG10cmVlIGZyb20gdGhlIGZpbGUgc3lzdGVtLgorRGlzYWJsZWQgYnkgZGVmYXVsdC4KKy5FbAorLkl0IEZvcm1hdCByYXIKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgorLkVsCiAuSXQgRm9ybWF0IHRhcgogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAogLkl0IENtIGNvbXBhdC0yeApAQCAtMjAyLDcgKzIzMiw3IEBACiBzbyB0aGF0IHN1Y2ggYXJjaGl2ZXMgY2FuIGJlIHJlYWQgY29ycmVjdGx5LgogLkl0IENtIGhkcmNoYXJzZXQKIFRoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQotdXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGVuYW1lcy4KK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgogLkl0IENtIG1hYy1leHQKIFN1cHBvcnQgTWFjIE9TIG1ldGFkYXRhIGV4dGVuc2lvbiB0aGF0IHJlY29yZHMgZGF0YSBpbiBzcGVjaWFsCiBmaWxlcyBiZWdpbm5pbmcgd2l0aCBhIHBlcmlvZCBhbmQgdW5kZXJzY29yZS4KQEAgLTIxMiw3ICsyNDIsOCBAQAogdG8gZGlzYWJsZS4KIC5JdCBDbSByZWFkX2NvbmNhdGVuYXRlZF9hcmNoaXZlcwogSWdub3JlIHplcm9lZCBibG9ja3MgaW4gdGhlIGFyY2hpdmUsIHdoaWNoIG9jY3VycyB3aGVuIG11bHRpcGxlIHRhciBhcmNoaXZlcwotaGF2ZSBiZWVuIGNvbmNhdGVuYXRlZCB0b2dldGhlci4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIG9ubHkgdGhlIGNvbnRlbnRzIG9mCitoYXZlIGJlZW4gY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgorV2l0aG91dCB0aGlzIG9wdGlvbiwgb25seSB0aGUgY29udGVudHMgb2YKIHRoZSBmaXJzdCBjb25jYXRlbmF0ZWQgYXJjaGl2ZSB3b3VsZCBiZSByZWFkLgogLkVsCiAuRWwKQEAgLTIyNiw2ICsyNTcsNiBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKLS5YciBhcmNoaXZlX3JlYWQgMworLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9nemlwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2d6aXAuYwppbmRleCBlOWY1OWYxLi45NWNmZDU0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2d6aXAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2d6aXAuYwpAQCAtMzcsNiArMzcsOSBAQAogI2lmZGVmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgorI2lmZGVmIEhBVkVfTElNSVRTX0gKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgogI2lmZGVmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgpAQCAtNDUsNiArNDgsOCBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeS5oIgorI2luY2x1ZGUgImFyY2hpdmVfZW5kaWFuLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaCIKIApAQCAtNTYsNiArNjEsOCBAQAogCXNpemVfdAkJIG91dF9ibG9ja19zaXplOwogCWludDY0X3QJCSB0b3RhbF9vdXQ7CiAJdW5zaWduZWQgbG9uZwkgY3JjOworCXVpbnQzMl90CSBtdGltZTsKKwljaGFyCQkqbmFtZTsKIAljaGFyCQkgZW9mOyAvKiBUcnVlID0gZm91bmQgZW5kIG9mIGNvbXByZXNzZWQgZGF0YS4gKi8KIH07CiAKQEAgLTEyMywxMiArMTMwLDIxIEBACiAgKiBjb3VudCBvZiBiaXRzIHZlcmlmaWVkLCBzdWl0YWJsZSBmb3IgdXNlIGJ5IGJpZGRlci4KICAqLwogc3RhdGljIHNzaXplX3QKLXBlZWtfYXRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpmaWx0ZXIsIGludCAqcGJpdHMpCitwZWVrX2F0X2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqZmlsdGVyLCBpbnQgKnBiaXRzLAorI2lmZGVmIEhBVkVfWkxJQl9ICisJICAgICAgIHN0cnVjdCBwcml2YXRlX2RhdGEgKnN0YXRlCisjZWxzZQorCSAgICAgICB2b2lkICpzdGF0ZQorI2VuZGlmCisJICAgICAgKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAJc3NpemVfdCBhdmFpbCwgbGVuOwogCWludCBiaXRzID0gMDsKIAlpbnQgaGVhZGVyX2ZsYWdzOworI2lmbmRlZiBIQVZFX1pMSUJfSAorCSh2b2lkKXN0YXRlOyAvKiBVTlVTRUQgKi8KKyNlbmRpZgogCiAJLyogU3RhcnQgYnkgbG9va2luZyBhdCB0aGUgZmlyc3QgdGVuIGJ5dGVzIG9mIHRoZSBoZWFkZXIsIHdoaWNoCiAJICogaXMgYWxsIGZpeGVkIGxheW91dC4gKi8KQEAgLTE0NCw3ICsxNjAsMTEgQEAKIAkJcmV0dXJuICgwKTsKIAliaXRzICs9IDM7CiAJaGVhZGVyX2ZsYWdzID0gcFszXTsKLQkvKiBCeXRlcyA0LTcgYXJlIG1vZCB0aW1lLiAqLworCS8qIEJ5dGVzIDQtNyBhcmUgbW9kIHRpbWUgaW4gbGl0dGxlIGVuZGlhbi4gKi8KKyNpZmRlZiBIQVZFX1pMSUJfSAorCWlmIChzdGF0ZSkKKwkJc3RhdGUtPm10aW1lID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA0KTsKKyNlbmRpZgogCS8qIEJ5dGUgOCBpcyBkZWZsYXRlIGZsYWdzLiAqLwogCS8qIFhYWFggVE9ETzogcmV0dXJuIGRlZmxhdGUgZmxhZ3MgYmFjayB0byBjb25zdW1lX2hlYWRlciBmb3IgdXNlCiAJICAgaW4gaW5pdGlhbGl6aW5nIHRoZSBkZWNvbXByZXNzb3IuICovCkBAIC0xNjEsNiArMTgxLDkgQEAKIAogCS8qIE51bGwtdGVybWluYXRlZCBvcHRpb25hbCBmaWxlbmFtZS4gKi8KIAlpZiAoaGVhZGVyX2ZsYWdzICYgOCkgeworI2lmZGVmIEhBVkVfWkxJQl9ICisJCXNzaXplX3QgZmlsZV9zdGFydCA9IGxlbjsKKyNlbmRpZgogCQlkbyB7CiAJCQkrK2xlbjsKIAkJCWlmIChhdmFpbCA8IGxlbikKQEAgLTE2OSw2ICsxOTIsMTQgQEAKIAkJCWlmIChwID09IE5VTEwpCiAJCQkJcmV0dXJuICgwKTsKIAkJfSB3aGlsZSAocFtsZW4gLSAxXSAhPSAwKTsKKworI2lmZGVmIEhBVkVfWkxJQl9ICisJCWlmIChzdGF0ZSkgeworCQkJLyogUmVzZXQgdGhlIG5hbWUgaW4gY2FzZSBvZiByZXBlYXQgaGVhZGVyIHJlYWRzLiAqLworCQkJZnJlZShzdGF0ZS0+bmFtZSk7CisJCQlzdGF0ZS0+bmFtZSA9IHN0cmR1cCgoY29uc3QgY2hhciAqKSZwW2ZpbGVfc3RhcnRdKTsKKwkJfQorI2VuZGlmCiAJfQogCiAJLyogTnVsbC10ZXJtaW5hdGVkIG9wdGlvbmFsIGNvbW1lbnQuICovCkBAIC0yMTQsMTIgKzI0NSwxMSBAQAogCiAJKHZvaWQpc2VsZjsgLyogVU5VU0VEICovCiAKLQlpZiAocGVla19hdF9oZWFkZXIoZmlsdGVyLCAmYml0c19jaGVja2VkKSkKKwlpZiAocGVla19hdF9oZWFkZXIoZmlsdGVyLCAmYml0c19jaGVja2VkLCBOVUxMKSkKIAkJcmV0dXJuIChiaXRzX2NoZWNrZWQpOwogCXJldHVybiAoMCk7CiB9CiAKLQogI2lmbmRlZiBIQVZFX1pMSUJfSAogCiAvKgpAQCAtMjQzLDYgKzI3MywyNCBAQAogCiAjZWxzZQogCitzdGF0aWMgaW50CitnemlwX3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpzZWxmLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGU7CisKKwlzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopc2VsZi0+ZGF0YTsKKworCS8qIEEgbXRpbWUgb2YgMCBpcyBjb25zaWRlcmVkIGludmFsaWQvbWlzc2luZy4gKi8KKwlpZiAoc3RhdGUtPm10aW1lICE9IDApCisJCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LCBzdGF0ZS0+bXRpbWUsIDApOworCisJLyogSWYgdGhlIG5hbWUgaXMgYXZhaWxhYmxlLCBleHRyYWN0IGl0LiAqLworCWlmIChzdGF0ZS0+bmFtZSkKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfcGF0aG5hbWUoZW50cnksIHN0YXRlLT5uYW1lKTsKKworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBmaWx0ZXIgb2JqZWN0LgogICovCkBAIC0yNzIsNiArMzIwLDkgQEAKIAlzZWxmLT5yZWFkID0gZ3ppcF9maWx0ZXJfcmVhZDsKIAlzZWxmLT5za2lwID0gTlVMTDsgLyogbm90IHN1cHBvcnRlZCAqLwogCXNlbGYtPmNsb3NlID0gZ3ppcF9maWx0ZXJfY2xvc2U7CisjaWZkZWYgSEFWRV9aTElCX0gKKwlzZWxmLT5yZWFkX2hlYWRlciA9IGd6aXBfcmVhZF9oZWFkZXI7CisjZW5kaWYKIAogCXN0YXRlLT5pbl9zdHJlYW0gPSAwOyAvKiBXZSdyZSBub3QgYWN0dWFsbHkgd2l0aGluIGEgc3RyZWFtIHlldC4gKi8KIApAQCAtMjg5LDcgKzM0MCw3IEBACiAJc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKXNlbGYtPmRhdGE7CiAKIAkvKiBJZiB0aGlzIGlzIGEgcmVhbCBoZWFkZXIsIGNvbnN1bWUgaXQuICovCi0JbGVuID0gcGVla19hdF9oZWFkZXIoc2VsZi0+dXBzdHJlYW0sIE5VTEwpOworCWxlbiA9IHBlZWtfYXRfaGVhZGVyKHNlbGYtPnVwc3RyZWFtLCBOVUxMLCBzdGF0ZSk7CiAJaWYgKGxlbiA9PSAwKQogCQlyZXR1cm4gKEFSQ0hJVkVfRU9GKTsKIAlfX2FyY2hpdmVfcmVhZF9maWx0ZXJfY29uc3VtZShzZWxmLT51cHN0cmVhbSwgbGVuKTsKQEAgLTM3NCw3ICs0MjUsNyBAQAogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKnN0YXRlOwogCXNpemVfdCBkZWNvbXByZXNzZWQ7Ci0Jc3NpemVfdCBhdmFpbF9pbjsKKwlzc2l6ZV90IGF2YWlsX2luLCBtYXhfaW47CiAJaW50IHJldDsKIAogCXN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilzZWxmLT5kYXRhOwpAQCAtNDA4LDYgKzQ1OSwxMiBAQAogCQkJICAgICJ0cnVuY2F0ZWQgZ3ppcCBpbnB1dCIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQorCQlpZiAoVUlOVF9NQVggPj0gU1NJWkVfTUFYKQorCQkJbWF4X2luID0gU1NJWkVfTUFYOworCQllbHNlCisJCQltYXhfaW4gPSBVSU5UX01BWDsKKwkJaWYgKGF2YWlsX2luID4gbWF4X2luKQorCQkJYXZhaWxfaW4gPSBtYXhfaW47CiAJCXN0YXRlLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClhdmFpbF9pbjsKIAogCQkvKiBEZWNvbXByZXNzIGFuZCBjb25zdW1lIHNvbWUgb2YgdGhhdCBkYXRhLiAqLwpAQCAtNDY5LDYgKzUyNiw3IEBACiAJCX0KIAl9CiAKKwlmcmVlKHN0YXRlLT5uYW1lKTsKIAlmcmVlKHN0YXRlLT5vdXRfYmxvY2spOwogCWZyZWUoc3RhdGUpOwogCXJldHVybiAocmV0KTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHo0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6NC5jCmluZGV4IDE0N2Y1MDIuLjQzZWU2YzIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHo0LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9sejQuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAKIAlfX2FyY2hpdmVfcmVhZF9maWx0ZXJfY29uc3VtZShzZWxmLT51cHN0cmVhbSwgZGVzY3JpcHRvcl9ieXRlcyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBlbm91Z2ggYnVmZmVyIGZvciB1bmNvbXByZXNzZWQgZGF0YS4gKi8KKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGxhcmdlIGVub3VnaCBidWZmZXIgZm9yIHVuY29tcHJlc3NlZCBkYXRhLiAqLwogCWlmIChsejRfYWxsb2NhdGVfb3V0X2Jsb2NrKHNlbGYpICE9IEFSQ0hJVkVfT0spCiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJaWYgKHN0YXRlLT5mbGFncy5zdHJlYW1fY2hlY2tzdW0pCkBAIC01MjAsNyArNTIwLDcgQEAKIAlpZiAocmVhZF9idWYgPT0gTlVMTCkKIAkJZ290byB0cnVuY2F0ZWRfZXJyb3I7CiAKLQkvKiBPcHRpb25hbCBwcm9jZXNzLCBjaGVja2luZyBhIGJsb2NrIHN1bS4gKi8KKwkvKiBPcHRpb25hbCBwcm9jZXNzaW5nLCBjaGVja2luZyBhIGJsb2NrIHN1bS4gKi8KIAlpZiAoY2hlY2tzdW1fc2l6ZSkgewogCQl1bnNpZ25lZCBpbnQgY2hzdW0gPSBfX2FyY2hpdmVfeHhoYXNoLlhYSDMyKAogCQkJcmVhZF9idWYgKyA0LCAoaW50KWNvbXByZXNzZWRfc2l6ZSwgMCk7CkBAIC02NDAsNyArNjQwLDcgQEAKIAlpZiAocmV0ID09IDAgJiYgKnAgPT0gTlVMTCkKIAkJc3RhdGUtPnN0YWdlID0gU0VMRUNUX1NUUkVBTTsKIAotCS8qIE9wdGlvbmFsIHByb2Nlc3MsIGNoZWNraW5nIGEgc3RyZWFtIHN1bS4gKi8KKwkvKiBPcHRpb25hbCBwcm9jZXNzaW5nLCBjaGVja2luZyBhIHN0cmVhbSBzdW0uICovCiAJaWYgKHN0YXRlLT5mbGFncy5zdHJlYW1fY2hlY2tzdW0pIHsKIAkJaWYgKHN0YXRlLT5zdGFnZSA9PSBTRUxFQ1RfU1RSRUFNKSB7CiAJCQl1bnNpZ25lZCBpbnQgY2hlY2tzdW07CkBAIC02NjAsNyArNjYwLDcgQEAKIAkJCWlmIChjaGVja3N1bSAhPSBjaGVja3N1bV9zdHJlYW0pIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmc2VsZi0+YXJjaGl2ZS0+YXJjaGl2ZSwKIAkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJCSAgICAibHo0IHN0cmVhbSBjaGVrc3VtIGVycm9yIik7CisJCQkJICAgICJsejQgc3RyZWFtIGNoZWNrc3VtIGVycm9yIik7CiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChyZXQgPiAwKQpAQCAtNjc0LDcgKzY3NCw3IEBACiBsejRfZmlsdGVyX3JlYWRfbGVnYWN5X3N0cmVhbShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqc2VsZiwgY29uc3Qgdm9pZCAqKnApCiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKXNlbGYtPmRhdGE7Ci0JaW50IGNvbXByZXNzZWQ7CisJdWludDMyX3QgY29tcHJlc3NlZDsKIAljb25zdCBjaGFyICpyZWFkX2J1ZjsKIAlzc2l6ZV90IHJldDsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl91dS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl91dS5jCmluZGV4IDY0MTI5NzkuLjY3ZGRmZmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfdXUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3V1LmMKQEAgLTU3NCwxNCArNTc0LDEzIEBACiAJCQl3aGlsZSAobCA+IDApIHsKIAkJCQlpbnQgbiA9IDA7CiAKLQkJCQlpZiAobCA+IDApIHsKLQkJCQkJaWYgKCF1dWNoYXJbYlswXV0gfHwgIXV1Y2hhcltiWzFdXSkKLQkJCQkJCWJyZWFrOwotCQkJCQluID0gVVVERUNPREUoKmIrKykgPDwgMTg7Ci0JCQkJCW4gfD0gVVVERUNPREUoKmIrKykgPDwgMTI7Ci0JCQkJCSpvdXQrKyA9IG4gPj4gMTY7IHRvdGFsKys7Ci0JCQkJCS0tbDsKLQkJCQl9CisJCQkJaWYgKCF1dWNoYXJbYlswXV0gfHwgIXV1Y2hhcltiWzFdXSkKKwkJCQkJYnJlYWs7CisJCQkJbiA9IFVVREVDT0RFKCpiKyspIDw8IDE4OworCQkJCW4gfD0gVVVERUNPREUoKmIrKykgPDwgMTI7CisJCQkJKm91dCsrID0gbiA+PiAxNjsgdG90YWwrKzsKKwkJCQktLWw7CisKIAkJCQlpZiAobCA+IDApIHsKIAkJCQkJaWYgKCF1dWNoYXJbYlswXV0pCiAJCQkJCQlicmVhazsKQEAgLTYyNiwxNCArNjI1LDEzIEBACiAJCQl3aGlsZSAobCA+IDApIHsKIAkJCQlpbnQgbiA9IDA7CiAKLQkJCQlpZiAobCA+IDApIHsKLQkJCQkJaWYgKCFiYXNlNjRbYlswXV0gfHwgIWJhc2U2NFtiWzFdXSkKLQkJCQkJCWJyZWFrOwotCQkJCQluID0gYmFzZTY0bnVtWypiKytdIDw8IDE4OwotCQkJCQluIHw9IGJhc2U2NG51bVsqYisrXSA8PCAxMjsKLQkJCQkJKm91dCsrID0gbiA+PiAxNjsgdG90YWwrKzsKLQkJCQkJbCAtPSAyOwotCQkJCX0KKwkJCQlpZiAoIWJhc2U2NFtiWzBdXSB8fCAhYmFzZTY0W2JbMV1dKQorCQkJCQlicmVhazsKKwkJCQluID0gYmFzZTY0bnVtWypiKytdIDw8IDE4OworCQkJCW4gfD0gYmFzZTY0bnVtWypiKytdIDw8IDEyOworCQkJCSpvdXQrKyA9IG4gPj4gMTY7IHRvdGFsKys7CisJCQkJbCAtPSAyOworCiAJCQkJaWYgKGwgPiAwKSB7CiAJCQkJCWlmICgqYiA9PSAnPScpCiAJCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfN3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMKaW5kZXggYTg4NWE0Yy4uYzlmMzUyNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMKQEAgLTEwODYsMTAgKzEwODYsMTcgQEAKIAkJCQl6aXAtPmJjal9zdGF0ZSA9IDA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIF83Wl9ERUxUQToKKwkJCQlpZiAoY29kZXIyLT5wcm9wZXJ0aWVzU2l6ZSAhPSAxKSB7CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCQkgICAgIkludmFsaWQgRGVsdGEgcGFyYW1ldGVyIik7CisJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJCX0KIAkJCQlmaWx0ZXJzW2ZpXS5pZCA9IExaTUFfRklMVEVSX0RFTFRBOwogCQkJCW1lbXNldCgmZGVsdGFfb3B0LCAwLCBzaXplb2YoZGVsdGFfb3B0KSk7CiAJCQkJZGVsdGFfb3B0LnR5cGUgPSBMWk1BX0RFTFRBX1RZUEVfQllURTsKLQkJCQlkZWx0YV9vcHQuZGlzdCA9IDE7CisJCQkJZGVsdGFfb3B0LmRpc3QgPQorCQkJCSAgICAodWludDMyX3QpY29kZXIyLT5wcm9wZXJ0aWVzWzBdICsgMTsKIAkJCQlmaWx0ZXJzW2ZpXS5vcHRpb25zID0gJmRlbHRhX29wdDsKIAkJCQlmaSsrOwogCQkJCWJyZWFrOwpAQCAtMTc4Nyw3ICsxNzk0LDcgQEAKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQlpZiAoKnAgIT0ga1NpemUpCisJaWYgKCpwICE9IGtDUkMpCiAJCXJldHVybiAoLTEpOwogCiAJaWYgKHJlYWRfRGlnZXN0cyhhLCAmKHBpLT5kaWdlc3QpLCAoc2l6ZV90KXBpLT5udW1QYWNrU3RyZWFtcykgPCAwKQpAQCAtMjk2NCwxMyArMjk3MSw3IEBACiAJaWYgKHppcC0+Y29kZWMgPT0gXzdaX0NPUFkgJiYgemlwLT5jb2RlYzIgPT0gKHVuc2lnbmVkIGxvbmcpLTEpIHsKIAkJLyogQ29weSBtb2RlLiAqLwogCi0JCS8qCi0JCSAqIE5vdGU6ICcxJyBoZXJlIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgotCQkgKiBSZWNhbGwgdGhhdCB0aGUgZGVjb21wcmVzc2lvbiBsYXllciByZXR1cm5zIGEgY291bnQgb2YKLQkJICogYXZhaWxhYmxlIGJ5dGVzOyBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGF0IGZvcmNlcyB0aGUKLQkJICogZGVjb21wcmVzc29yIHRvIGNvbWJpbmUgcmVhZHMgYnkgY29weWluZyBkYXRhLgotCQkgKi8KLQkJKmJ1ZmYgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxLCAmYnl0ZXNfYXZhaWwpOworCQkqYnVmZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIG1pbmltdW0sICZieXRlc19hdmFpbCk7CiAJCWlmIChieXRlc19hdmFpbCA8PSAwKSB7CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKIAkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULApAQCAtMzMyMyw4ICszMzI0LDcgQEAKIAkgKiBSZWxlYXNlIHRoZSBtZW1vcnkgd2hpY2ggdGhlIHByZXZpb3VzIGZvbGRlciB1c2VkIGZvciBCQ0oyLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaWYgKHppcC0+c3ViX3N0cmVhbV9idWZmW2ldICE9IE5VTEwpCi0JCQlmcmVlKHppcC0+c3ViX3N0cmVhbV9idWZmW2ldKTsKKwkJZnJlZSh6aXAtPnN1Yl9zdHJlYW1fYnVmZltpXSk7CiAJCXppcC0+c3ViX3N0cmVhbV9idWZmW2ldID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYWxsLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbC5jCmluZGV4IDIxMjdlYmQzLi5kZWE1NThiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYWxsLmMKQEAgLTcyLDYgKzcyLDcgQEAKIAlhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfN3ppcChhKTsKIAlhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY2FiKGEpOwogCWFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIoYSk7CisJYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUoYSk7CiAJYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2lzbzk2NjAoYSk7CiAJLyogU2VlayBpcyByZWFsbHkgYmFkLCBzaW5jZSBpdCBmb3JjZXMgdGhlIHJlYWQtYWhlYWQKIAkgKiBsb2dpYyB0byBkaXNjYXJkIGJ1ZmZlcmVkIGRhdGEuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FyLmMKaW5kZXggYjZiOWZjMy4uMjk2YjdkYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYXIuYwpAQCAtMTM4LDggKzEzOCw3IEBACiAJc3RydWN0IGFyICphcjsKIAogCWFyID0gKHN0cnVjdCBhciAqKShhLT5mb3JtYXQtPmRhdGEpOwotCWlmIChhci0+c3RydGFiKQotCQlmcmVlKGFyLT5zdHJ0YWIpOworCWZyZWUoYXItPnN0cnRhYik7CiAJZnJlZShhcik7CiAJKGEtPmZvcm1hdC0+ZGF0YSkgPSBOVUxMOwogCXJldHVybiAoQVJDSElWRV9PSyk7CkBAIC0zODgsOSArMzg3LDEwIEBACiAKIAkvKgogCSAqICIvIiBpcyB0aGUgU1ZSNC9HTlUgYXJjaGl2ZSBzeW1ib2wgdGFibGUuCisJICogIi9TWU02NC8iIGlzIHRoZSBTVlI0L0dOVSA2NC1iaXQgdmFyaWFudCBhcmNoaXZlIHN5bWJvbCB0YWJsZS4KIAkgKi8KLQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLyIpID09IDApIHsKLQkJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGVudHJ5LCAiLyIpOworCWlmIChzdHJjbXAoZmlsZW5hbWUsICIvIikgPT0gMCB8fCBzdHJjbXAoZmlsZW5hbWUsICIvU1lNNjQvIikgPT0gMCkgeworCQlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoZW50cnksIGZpbGVuYW1lKTsKIAkJLyogUGFyc2UgdGhlIHRpbWUsIG93bmVyLCBtb2RlLCBzaXplIGZpZWxkcy4gKi8KIAkJciA9IGFyX3BhcnNlX2NvbW1vbl9oZWFkZXIoYXIsIGVudHJ5LCBoKTsKIAkJLyogRm9yY2UgdGhlIGZpbGUgdHlwZSB0byBhIHJlZ3VsYXIgZmlsZS4gKi8KQEAgLTQ1OSw2ICs0NTksNyBAQAogCXVpbnQ2NF90IG47CiAKIAkvKiBDb3B5IHJlbWFpbmluZyBoZWFkZXIgKi8KKwlhcmNoaXZlX2VudHJ5X3NldF9maWxldHlwZShlbnRyeSwgQUVfSUZSRUcpOwogCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LAogCSAgICAodGltZV90KWFyX2F0b2wxMChoICsgQVJfZGF0ZV9vZmZzZXQsIEFSX2RhdGVfc2l6ZSksIDBMKTsKIAlhcmNoaXZlX2VudHJ5X3NldF91aWQoZW50cnksCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2J5X2NvZGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYnlfY29kZS5jCmluZGV4IDA4NDU2M2YuLjAzNDM1M2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYnlfY29kZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYnlfY29kZS5jCkBAIC02MCw2ICs2MCw5IEBACiAJY2FzZSBBUkNISVZFX0ZPUk1BVF9SQVI6CiAJCXJldHVybiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyKGEpOwogCQlicmVhazsKKwljYXNlIEFSQ0hJVkVfRk9STUFUX1JBUl9WNToKKwkJcmV0dXJuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1KGEpOworCQlicmVhazsKIAljYXNlIEFSQ0hJVkVfRk9STUFUX1RBUjoKIAkJcmV0dXJuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIoYSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jYWIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY2FiLmMKaW5kZXggNTFmNzlmYS4uYzc4OWQxMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jYWIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NhYi5jCkBAIC0xNTA5LDggKzE1MDksOCBAQAogCQkJfQogCQkJaWYgKG1zemlwID09IDEgJiYgY2FiLT5zdHJlYW0ubmV4dF9pblswXSAhPSAweDRiKQogCQkJCWdvdG8gbm9tc3ppcDsKLQkJCWVsc2UgaWYgKGNhYi0+c3RyZWFtLm5leHRfaW5bMF0gIT0gMHg0MyB8fAotCQkJICAgIGNhYi0+c3RyZWFtLm5leHRfaW5bMV0gIT0gMHg0YikKKwkJCWVsc2UgaWYgKG1zemlwID09IDIgJiYgKGNhYi0+c3RyZWFtLm5leHRfaW5bMF0gIT0gMHg0MyB8fAorCQkJICAgIGNhYi0+c3RyZWFtLm5leHRfaW5bMV0gIT0gMHg0YikpCiAJCQkJZ290byBub21zemlwOwogCQkJY2FiLT5zdHJlYW0ubmV4dF9pbiArPSBtc3ppcDsKIAkJCWNhYi0+c3RyZWFtLmF2YWlsX2luIC09IG1zemlwOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jcGlvLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NwaW8uYwppbmRleCA2N2Q1YjIxLi4xYzk2ZTZhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NwaW8uYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NwaW8uYwpAQCAtOTU1LDggKzk1NSw3IEBACiAgICAgICAgIHdoaWxlIChjcGlvLT5saW5rc19oZWFkICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlua3NfZW50cnkgKmxwID0gY3Bpby0+bGlua3NfaGVhZC0+bmV4dDsKIAotICAgICAgICAgICAgICAgIGlmIChjcGlvLT5saW5rc19oZWFkLT5uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjcGlvLT5saW5rc19oZWFkLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBmcmVlKGNwaW8tPmxpbmtzX2hlYWQtPm5hbWUpOwogICAgICAgICAgICAgICAgIGZyZWUoY3Bpby0+bGlua3NfaGVhZCk7CiAgICAgICAgICAgICAgICAgY3Bpby0+bGlua3NfaGVhZCA9IGxwOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2lzbzk2NjAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfaXNvOTY2MC5jCmluZGV4IDkzNjQ5ZjguLmNmMTQxOWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfaXNvOTY2MC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfaXNvOTY2MC5jCkBAIC0xNzI0LDggKzE3MjQsNyBAQAogCWZyZWUoaXNvOTY2MC0+cmVhZF9jZV9yZXEucmVxcyk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmaXNvOTY2MC0+cGF0aG5hbWUpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmlzbzk2NjAtPnByZXZpb3VzX3BhdGhuYW1lKTsKLQlpZiAoaXNvOTY2MC0+cGVuZGluZ19maWxlcy5maWxlcykKLQkJZnJlZShpc285NjYwLT5wZW5kaW5nX2ZpbGVzLmZpbGVzKTsKKwlmcmVlKGlzbzk2NjAtPnBlbmRpbmdfZmlsZXMuZmlsZXMpOwogI2lmZGVmIEhBVkVfWkxJQl9ICiAJZnJlZShpc285NjYwLT5lbnRyeV96aXNvZnMudW5jb21wcmVzc2VkX2J1ZmZlcik7CiAJZnJlZShpc285NjYwLT5lbnRyeV96aXNvZnMuYmxvY2tfcG9pbnRlcnMpOwpAQCAtMjEwMiw2ICsyMTAxLDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQpCiB7CiAJc3RydWN0IGlzbzk2NjAgKmlzbzk2NjA7CisJaW50IGVudHJ5X3NlZW4gPSAwOwogCiAJaXNvOTY2MCA9IChzdHJ1Y3QgaXNvOTY2MCAqKShhLT5mb3JtYXQtPmRhdGEpOwogCkBAIC0yMjU3LDggKzIyNTcsMTYgQEAKIAkJfQogCiAJCXAgKz0gcFsyXTsKKwkJZW50cnlfc2VlbiA9IDE7CiAJfQotCXJldHVybiAoQVJDSElWRV9PSyk7CisKKwlpZiAoZW50cnlfc2VlbikKKwkJcmV0dXJuIChBUkNISVZFX09LKTsKKwllbHNlIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAiVHJpZWQgdG8gcGFyc2UgUm9ja3JpZGdlIGV4dGVuc2lvbnMsIGJ1dCBub25lIGZvdW5kIik7CisJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMwMjksOCArMzAzNyw3IEBACiAJCWlmIChoZWFwLT5hbGxvY2F0ZWQpCiAJCQltZW1jcHkobmV3X3BlbmRpbmdfZmlsZXMsIGhlYXAtPmZpbGVzLAogCQkJICAgIGhlYXAtPmFsbG9jYXRlZCAqIHNpemVvZihuZXdfcGVuZGluZ19maWxlc1swXSkpOwotCQlpZiAoaGVhcC0+ZmlsZXMgIT0gTlVMTCkKLQkJCWZyZWUoaGVhcC0+ZmlsZXMpOworCQlmcmVlKGhlYXAtPmZpbGVzKTsKIAkJaGVhcC0+ZmlsZXMgPSBuZXdfcGVuZGluZ19maWxlczsKIAkJaGVhcC0+YWxsb2NhdGVkID0gbmV3X3NpemU7CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhLmMKaW5kZXggOThkMDJjNi4uMTM1N2Y5YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2xoYS5jCkBAIC0xNzUsNyArMTc1LDkgQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgCSBnbmFtZTsKIAl1aW50MTZfdAkJIGhlYWRlcl9jcmM7CiAJdWludDE2X3QJCSBjcmM7Ci0Jc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKnNjb252OworCS8qIGRpcm5hbWUgYW5kIGZpbGVuYW1lIGNvdWxkIGJlIGluIGRpZmZlcmVudCBjb2RlcGFnZXMgKi8KKwlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfZGlyOworCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzY29udl9mbmFtZTsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqb3B0X3Njb252OwogCiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nIAkgZGlybmFtZTsKQEAgLTIzMiw4ICsyMzQsOCBAQAogc3RhdGljIHRpbWVfdAlsaGFfd2luX3RpbWUodWludDY0X3QsIGxvbmcgKik7CiBzdGF0aWMgdW5zaWduZWQgY2hhcglsaGFfY2FsY3N1bSh1bnNpZ25lZCBjaGFyLCBjb25zdCB2b2lkICosCiAJCSAgICBpbnQsIHNpemVfdCk7Ci1zdGF0aWMgaW50CWxoYV9wYXJzZV9saW5rbmFtZShzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKiwKLQkJICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqKTsKK3N0YXRpYyBpbnQJbGhhX3BhcnNlX2xpbmtuYW1lKHN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgKiwKKwkJICAgIHN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgKik7CiBzdGF0aWMgaW50CWxoYV9yZWFkX2RhdGFfbm9uZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICosIGNvbnN0IHZvaWQgKiosCiAJCSAgICBzaXplX3QgKiwgaW50NjRfdCAqKTsKIHN0YXRpYyBpbnQJbGhhX3JlYWRfZGF0YV9semgoc3RydWN0IGFyY2hpdmVfcmVhZCAqLCBjb25zdCB2b2lkICoqLApAQCAtNDczLDEzICs0NzUsMTUgQEAKIGFyY2hpdmVfcmVhZF9mb3JtYXRfbGhhX3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsCiAgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBsaW5rbmFtZTsKLQlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgcGF0aG5hbWU7CisJc3RydWN0IGFyY2hpdmVfd3N0cmluZyBsaW5rbmFtZTsKKwlzdHJ1Y3QgYXJjaGl2ZV93c3RyaW5nIHBhdGhuYW1lOwogCXN0cnVjdCBsaGEgKmxoYTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwogCWNvbnN0IGNoYXIgKnNpZ25hdHVyZTsKIAlpbnQgZXJyOwotCQorCXN0cnVjdCBhcmNoaXZlX21zdHJpbmcgY29udl9idWZmZXI7CisJY29uc3Qgd2NoYXJfdCAqY29udl9idWZmZXJfcDsKKwogCWxoYV9jcmMxNl9pbml0KCk7CiAKIAlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0ID0gQVJDSElWRV9GT1JNQVRfTEhBOwpAQCAtNTYxLDEwICs1NjUsMTMgQEAKIAlhcmNoaXZlX3N0cmluZ19lbXB0eSgmbGhhLT5kaXJuYW1lKTsKIAlhcmNoaXZlX3N0cmluZ19lbXB0eSgmbGhhLT5maWxlbmFtZSk7CiAJbGhhLT5kb3NfYXR0ciA9IDA7Ci0JaWYgKGxoYS0+b3B0X3Njb252ICE9IE5VTEwpCi0JCWxoYS0+c2NvbnYgPSBsaGEtPm9wdF9zY29udjsKLQllbHNlCi0JCWxoYS0+c2NvbnYgPSBOVUxMOworCWlmIChsaGEtPm9wdF9zY29udiAhPSBOVUxMKSB7CisJCWxoYS0+c2NvbnZfZGlyID0gbGhhLT5vcHRfc2NvbnY7CisJCWxoYS0+c2NvbnZfZm5hbWUgPSBsaGEtPm9wdF9zY29udjsKKwl9IGVsc2UgeworCQlsaGEtPnNjb252X2RpciA9IE5VTEw7CisJCWxoYS0+c2NvbnZfZm5hbWUgPSBOVUxMOworCX0KIAogCXN3aXRjaCAocFtIX0xFVkVMX09GRlNFVF0pIHsKIAljYXNlIDA6CkBAIC01OTQsMTIgKzYwMSw1NCBAQAogCQlyZXR1cm4gKHRydW5jYXRlZF9lcnJvcihhKSk7CiAKIAkvKgotCSAqIE1ha2UgYSBwYXRobmFtZSBmcm9tIGEgZGlybmFtZSBhbmQgYSBmaWxlbmFtZS4KLQkgKi8KLQlhcmNoaXZlX3N0cmluZ19jb25jYXQoJmxoYS0+ZGlybmFtZSwgJmxoYS0+ZmlsZW5hbWUpOworCSAqIE1ha2UgYSBwYXRobmFtZSBmcm9tIGEgZGlybmFtZSBhbmQgYSBmaWxlbmFtZSwgYWZ0ZXIgY29udmVydGluZyB0byBVbmljb2RlLgorCSAqIFRoaXMgaXMgYmVjYXVzZSBjb2RlcGFnZXMgbWlnaHQgZGlmZmVyIGJldHdlZW4gZGlybmFtZSBhbmQgZmlsZW5hbWUuCisJKi8KIAlhcmNoaXZlX3N0cmluZ19pbml0KCZwYXRobmFtZSk7CiAJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmbGlua25hbWUpOwotCWFyY2hpdmVfc3RyaW5nX2NvcHkoJnBhdGhuYW1lLCAmbGhhLT5kaXJuYW1lKTsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZjb252X2J1ZmZlci5hZXNfbWJzKTsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZjb252X2J1ZmZlci5hZXNfbWJzX2luX2xvY2FsZSk7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmY29udl9idWZmZXIuYWVzX3V0ZjgpOworCWFyY2hpdmVfc3RyaW5nX2luaXQoJmNvbnZfYnVmZmVyLmFlc193Y3MpOworCWlmICgwICE9IGFyY2hpdmVfbXN0cmluZ19jb3B5X21ic19sZW5fbCgmY29udl9idWZmZXIsIGxoYS0+ZGlybmFtZS5zLCBsaGEtPmRpcm5hbWUubGVuZ3RoLCBsaGEtPnNjb252X2RpcikpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQlBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJIlBhdGhuYW1lIGNhbm5vdCBiZSBjb252ZXJ0ZWQgIgorCQkJImZyb20gJXMgdG8gVW5pY29kZS4iLAorCQkJYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUobGhhLT5zY29udl9kaXIpKTsKKwkJZXJyID0gQVJDSElWRV9GQVRBTDsKKwl9IGVsc2UgaWYgKDAgIT0gYXJjaGl2ZV9tc3RyaW5nX2dldF93Y3MoJmEtPmFyY2hpdmUsICZjb252X2J1ZmZlciwgJmNvbnZfYnVmZmVyX3ApKQorCQllcnIgPSBBUkNISVZFX0ZBVEFMOworCWlmIChlcnIgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX21zdHJpbmdfY2xlYW4oJmNvbnZfYnVmZmVyKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwkJcmV0dXJuIChlcnIpOworCX0KKwlhcmNoaXZlX3dzdHJpbmdfY29weSgmcGF0aG5hbWUsICZjb252X2J1ZmZlci5hZXNfd2NzKTsKKworCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZjb252X2J1ZmZlci5hZXNfbWJzKTsKKwlhcmNoaXZlX3N0cmluZ19lbXB0eSgmY29udl9idWZmZXIuYWVzX21ic19pbl9sb2NhbGUpOworCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZjb252X2J1ZmZlci5hZXNfdXRmOCk7CisJYXJjaGl2ZV93c3RyaW5nX2VtcHR5KCZjb252X2J1ZmZlci5hZXNfd2NzKTsKKwlpZiAoMCAhPSBhcmNoaXZlX21zdHJpbmdfY29weV9tYnNfbGVuX2woJmNvbnZfYnVmZmVyLCBsaGEtPmZpbGVuYW1lLnMsIGxoYS0+ZmlsZW5hbWUubGVuZ3RoLCBsaGEtPnNjb252X2ZuYW1lKSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCUFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkiUGF0aG5hbWUgY2Fubm90IGJlIGNvbnZlcnRlZCAiCisJCQkiZnJvbSAlcyB0byBVbmljb2RlLiIsCisJCQlhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2NoYXJzZXRfbmFtZShsaGEtPnNjb252X2ZuYW1lKSk7CisJCWVyciA9IEFSQ0hJVkVfRkFUQUw7CisJfQorCWVsc2UgaWYgKDAgIT0gYXJjaGl2ZV9tc3RyaW5nX2dldF93Y3MoJmEtPmFyY2hpdmUsICZjb252X2J1ZmZlciwgJmNvbnZfYnVmZmVyX3ApKQorCQllcnIgPSBBUkNISVZFX0ZBVEFMOworCWlmIChlcnIgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX21zdHJpbmdfY2xlYW4oJmNvbnZfYnVmZmVyKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwkJcmV0dXJuIChlcnIpOworCX0KKwlhcmNoaXZlX3dzdHJpbmdfY29uY2F0KCZwYXRobmFtZSwgJmNvbnZfYnVmZmVyLmFlc193Y3MpOworCWFyY2hpdmVfbXN0cmluZ19jbGVhbigmY29udl9idWZmZXIpOwogCiAJaWYgKChsaGEtPm1vZGUgJiBBRV9JRk1UKSA9PSBBRV9JRkxOSykgewogCQkvKgpAQCAtNjEwLDggKzY1OSw4IEBACiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKIAkJICAgIAkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJCSAgICAiVW5rbm93biBzeW1saW5rLW5hbWUiKTsKLQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKLQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwkJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZwYXRobmFtZSk7CisJCQlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmbGlua25hbWUpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtNjI5LDM5ICs2NzgsMTMgQEAKIAkvKgogCSAqIFNldCBiYXNpYyBmaWxlIHBhcmFtZXRlcnMuCiAJICovCi0JaWYgKGFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZV9sKGVudHJ5LCBwYXRobmFtZS5zLAotCSAgICBwYXRobmFtZS5sZW5ndGgsIGxoYS0+c2NvbnYpICE9IDApIHsKLQkJaWYgKGVycm5vID09IEVOT01FTSkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKLQkJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBQYXRobmFtZSIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKLQkJfQotCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCSAgICAiUGF0aG5hbWUgY2Fubm90IGJlIGNvbnZlcnRlZCAiCi0JCSAgICAiZnJvbSAlcyB0byBjdXJyZW50IGxvY2FsZS4iLAotCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUobGhhLT5zY29udikpOwotCQllcnIgPSBBUkNISVZFX1dBUk47Ci0JfQotCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWVfdyhlbnRyeSwgcGF0aG5hbWUucyk7CisJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKIAlpZiAoYXJjaGl2ZV9zdHJsZW4oJmxpbmtuYW1lKSA+IDApIHsKLQkJaWYgKGFyY2hpdmVfZW50cnlfY29weV9zeW1saW5rX2woZW50cnksIGxpbmtuYW1lLnMsCi0JCSAgICBsaW5rbmFtZS5sZW5ndGgsIGxoYS0+c2NvbnYpICE9IDApIHsKLQkJCWlmIChlcnJubyA9PSBFTk9NRU0pIHsKLQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAotCQkJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBMaW5rbmFtZSIpOwotCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7Ci0JCQl9Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJMaW5rbmFtZSBjYW5ub3QgYmUgY29udmVydGVkICIKLQkJCSAgICAiZnJvbSAlcyB0byBjdXJyZW50IGxvY2FsZS4iLAotCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKGxoYS0+c2NvbnYpKTsKLQkJCWVyciA9IEFSQ0hJVkVfV0FSTjsKLQkJfQorCQlhcmNoaXZlX2VudHJ5X2NvcHlfc3ltbGlua193KGVudHJ5LCBsaW5rbmFtZS5zKTsKIAl9IGVsc2UKIAkJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGluayhlbnRyeSwgTlVMTCk7Ci0JYXJjaGl2ZV9zdHJpbmdfZnJlZSgmbGlua25hbWUpOworCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZsaW5rbmFtZSk7CiAJLyoKIAkgKiBXaGVuIGEgaGVhZGVyIGxldmVsIGlzIDAsIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdAogCSAqIGEgcGF0aG5hbWUgYW5kIGEgc3ltbGluayBoYXMgJ1wnIGNoYXJhY3RlciwgYSBkaXJlY3RvcnkKQEAgLTEyMDgsNiArMTIzMSwyNyBAQAogCQkJYXJjaGl2ZV9zdHJuY3B5KCZsaGEtPmZpbGVuYW1lLAogCQkJICAgIChjb25zdCBjaGFyICopZXh0ZGhlYWRlciwgZGF0YXNpemUpOwogCQkJYnJlYWs7CisJCWNhc2UgRVhUX1VURjE2X0ZJTEVOQU1FOgorCQkJaWYgKGRhdGFzaXplID09IDApIHsKKwkJCQkvKiBtYXliZSBkaXJlY3RvcnkgaGVhZGVyICovCisJCQkJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJmxoYS0+ZmlsZW5hbWUpOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChkYXRhc2l6ZSAmIDEpIHsKKwkJCQkvKiBVVEYtMTYgY2hhcmFjdGVycyB0YWtlIGFsd2F5cyAyIG9yIDQgYnl0ZXMgKi8KKwkJCQlnb3RvIGludmFsaWQ7CisJCQl9CisJCQlpZiAoZXh0ZGhlYWRlclswXSA9PSAnXDAnKQorCQkJCWdvdG8gaW52YWxpZDsKKwkJCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZsaGEtPmZpbGVuYW1lKTsKKwkJCWFyY2hpdmVfYXJyYXlfYXBwZW5kKCZsaGEtPmZpbGVuYW1lLAorCQkJCShjb25zdCBjaGFyICopZXh0ZGhlYWRlciwgZGF0YXNpemUpOworCQkJLyogU2V0dXAgYSBzdHJpbmcgY29udmVyc2lvbiBmb3IgYSBmaWxlbmFtZS4gKi8KKwkJCWxoYS0+c2NvbnZfZm5hbWUgPQorCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KCZhLT5hcmNoaXZlLAorCQkJICAgICAgICAiVVRGLTE2TEUiLCAxKTsKKwkJCWlmIChsaGEtPnNjb252X2ZuYW1lID09IE5VTEwpCisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCWJyZWFrOwogCQljYXNlIEVYVF9ESVJFQ1RPUlk6CiAJCQlpZiAoZGF0YXNpemUgPT0gMCB8fCBleHRkaGVhZGVyWzBdID09ICdcMCcpCiAJCQkJLyogbm8gZGlyZWN0b3J5IG5hbWUgZGF0YS4gZXhpdCB0aGlzIGNhc2UuICovCkBAIC0xMjI4LDYgKzEyNzIsNTAgQEAKIAkJCQkvKiBpbnZhbGlkIGRpcmVjdG9yeSBkYXRhICovCiAJCQkJZ290byBpbnZhbGlkOwogCQkJYnJlYWs7CisJCWNhc2UgRVhUX1VURjE2X0RJUkVDVE9SWToKKwkJCS8qIFVURi0xNiBjaGFyYWN0ZXJzIHRha2UgYWx3YXlzIDIgb3IgNCBieXRlcyAqLworCQkJaWYgKGRhdGFzaXplID09IDAgfHwgKGRhdGFzaXplICYgMSkgfHwKKwkJCSAgICBleHRkaGVhZGVyWzBdID09ICdcMCcpIHsKKwkJCQkvKiBubyBkaXJlY3RvcnkgbmFtZSBkYXRhLiBleGl0IHRoaXMgY2FzZS4gKi8KKwkJCQlnb3RvIGludmFsaWQ7CisJCQl9CisKKwkJCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZsaGEtPmRpcm5hbWUpOworCQkJYXJjaGl2ZV9hcnJheV9hcHBlbmQoJmxoYS0+ZGlybmFtZSwKKwkJCQkoY29uc3QgY2hhciAqKWV4dGRoZWFkZXIsIGRhdGFzaXplKTsKKwkJCWxoYS0+c2NvbnZfZGlyID0KKwkJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2Zyb21fY2hhcnNldCgmYS0+YXJjaGl2ZSwKKwkJCSAgICAgICAgIlVURi0xNkxFIiwgMSk7CisJCQlpZiAobGhhLT5zY29udl9kaXIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBDb252ZXJ0IGRpcmVjdG9yeSBkZWxpbWl0ZXIgZnJvbSAweEZGRkYKKwkJCQkgKiB0byAnLycgZm9yIGxvY2FsIHN5c3RlbS4KKwkJCQkgKi8KKwkJCQl1aW50MTZfdCBkaXJTZXA7CisJCQkJdWludDE2X3QgZCA9IDE7CisJCQkJaWYgKGFyY2hpdmVfYmUxNmRlYygmZCkgPT0gMSkKKwkJCQkJZGlyU2VwID0gMHgyRjAwOworCQkJCWVsc2UKKwkJCQkJZGlyU2VwID0gMHgwMDJGOworCisJCQkJLyogVVRGLTE2TEUgY2hhcmFjdGVyICovCisJCQkJdWludDE2X3QgKnV0ZjE2bmFtZSA9CisJCQkJICAgICh1aW50MTZfdCAqKWxoYS0+ZGlybmFtZS5zOworCQkJCWZvciAoaSA9IDA7IGkgPCBsaGEtPmRpcm5hbWUubGVuZ3RoIC8gMjsgaSsrKSB7CisJCQkJCWlmICh1dGYxNm5hbWVbaV0gPT0gMHhGRkZGKSB7CisJCQkJCQl1dGYxNm5hbWVbaV0gPSBkaXJTZXA7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogSXMgbGFzdCBjaGFyYWN0ZXIgZGlyZWN0b3J5IHNlcGFyYXRvcj8gKi8KKwkJCQlpZiAodXRmMTZuYW1lW2xoYS0+ZGlybmFtZS5sZW5ndGggLyAyIC0gMV0gIT0KKwkJCQkgICAgZGlyU2VwKSB7CisJCQkJCS8qIGludmFsaWQgZGlyZWN0b3J5IGRhdGEgKi8KKwkJCQkJZ290byBpbnZhbGlkOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIEVYVF9ET1NfQVRUUjoKIAkJCWlmIChkYXRhc2l6ZSA9PSAyKQogCQkJCWxoYS0+ZG9zX2F0dHIgPSAodW5zaWduZWQgY2hhcikKQEAgLTEyNzYsMTEgKzEzNjQsMTYgQEAKIAkJCQkJY2hhcnNldCA9IGNwLnM7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlsaGEtPnNjb252ID0KKwkJCQlsaGEtPnNjb252X2RpciA9CisJCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KAorCQkJCQkmKGEtPmFyY2hpdmUpLCBjaGFyc2V0LCAxKTsKKwkJCQlsaGEtPnNjb252X2ZuYW1lID0KIAkJCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9mcm9tX2NoYXJzZXQoCiAJCQkJCSYoYS0+YXJjaGl2ZSksIGNoYXJzZXQsIDEpOwogCQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmNwKTsKLQkJCQlpZiAobGhhLT5zY29udiA9PSBOVUxMKQorCQkJCWlmIChsaGEtPnNjb252X2RpciA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJCWlmIChsaGEtPnNjb252X2ZuYW1lID09IE5VTEwpCiAJCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCQl9CiAJCQlicmVhazsKQEAgLTEzMzYsOCArMTQyOSw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBFWFRfVElNRVpPTkU6CQkvKiBOb3Qgc3VwcG9ydGVkICovCi0JCWNhc2UgRVhUX1VURjE2X0ZJTEVOQU1FOgkvKiBOb3Qgc3VwcG9ydGVkICovCi0JCWNhc2UgRVhUX1VURjE2X0RJUkVDVE9SWToJLyogTm90IHN1cHBvcnRlZCAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMTYwMCwxOSArMTY5MiwxOSBAQAogICogIHRoZW4gYSBhcmNoaXZlZCBwYXRobmFtZSBpcyAneHh4L2JiYnxhYWEvYmIvY2MnCiAgKi8KIHN0YXRpYyBpbnQKLWxoYV9wYXJzZV9saW5rbmFtZShzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKmxpbmtuYW1lLAotICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqcGF0aG5hbWUpCitsaGFfcGFyc2VfbGlua25hbWUoc3RydWN0IGFyY2hpdmVfd3N0cmluZyAqbGlua25hbWUsCisgICAgc3RydWN0IGFyY2hpdmVfd3N0cmluZyAqcGF0aG5hbWUpCiB7Ci0JY2hhciAqCWxpbmtwdHI7CisJd2NoYXJfdCAqCWxpbmtwdHI7CiAJc2l6ZV90IAlzeW1sZW47CiAKLQlsaW5rcHRyID0gc3RyY2hyKHBhdGhuYW1lLT5zLCAnfCcpOworCWxpbmtwdHIgPSB3Y3NjaHIocGF0aG5hbWUtPnMsIEwnfCcpOwogCWlmIChsaW5rcHRyICE9IE5VTEwpIHsKLQkJc3ltbGVuID0gc3RybGVuKGxpbmtwdHIgKyAxKTsKLQkJYXJjaGl2ZV9zdHJuY3B5KGxpbmtuYW1lLCBsaW5rcHRyKzEsIHN5bWxlbik7CisJCXN5bWxlbiA9IHdjc2xlbihsaW5rcHRyICsgMSk7CisJCWFyY2hpdmVfd3N0cm5jcHkobGlua25hbWUsIGxpbmtwdHIrMSwgc3ltbGVuKTsKIAogCQkqbGlua3B0ciA9IDA7Ci0JCXBhdGhuYW1lLT5sZW5ndGggPSBzdHJsZW4ocGF0aG5hbWUtPnMpOworCQlwYXRobmFtZS0+bGVuZ3RoID0gd2NzbGVuKHBhdGhuYW1lLT5zKTsKIAogCQlyZXR1cm4gKDEpOwogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUuYwppbmRleCA1YjBlYWRjLi4zMzI5NDRhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X210cmVlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9tdHJlZS5jCkBAIC00NSw2ICs0NSw5IEBACiAjaWZkZWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9DVFlQRV9ICisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKQEAgLTI1NSw2ICsyNTgsNyBAQAogCQkgICAgIkNhbid0IGFsbG9jYXRlIG10cmVlIGRhdGEiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAl9CisJbXRyZWUtPmNoZWNrZnMgPSAwOwogCW10cmVlLT5mZCA9IC0xOwogCiAJX19hcmNoaXZlX3JiX3RyZWVfaW5pdCgmbXRyZWUtPnJidHJlZSwgJnJiX29wcyk7CkBAIC0xMDExLDcgKzEwMTUsNyBAQAogewogCXNzaXplX3QgbGVuOwogCXVpbnRtYXhfdCBjb3VudGVyOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnM7CiAJc3RydWN0IG10cmVlX29wdGlvbiAqZ2xvYmFsOwogCXN0cnVjdCBtdHJlZV9lbnRyeSAqbGFzdF9lbnRyeTsKIAlpbnQgciwgaXNfZm9ybV9kOwpAQCAtMTAyNSw2ICsxMDI5LDcgQEAKIAkodm9pZClkZXRlY3RfZm9ybShhLCAmaXNfZm9ybV9kKTsKIAogCWZvciAoY291bnRlciA9IDE7IDsgKytjb3VudGVyKSB7CisJCXIgPSBBUkNISVZFX09LOwogCQlsZW4gPSByZWFkbGluZShhLCBtdHJlZSwgJnAsIDY1NTM2KTsKIAkJaWYgKGxlbiA9PSAwKSB7CiAJCQltdHJlZS0+dGhpc19lbnRyeSA9IG10cmVlLT5lbnRyaWVzOwpAQCAtMTA0NSw2ICsxMDUwLDE1IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCpwID09ICdccicgfHwgKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXDAnKQogCQkJY29udGludWU7CisJCS8qIE5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgKi8KKwkJZm9yIChzID0gcDtzIDwgcCArIGxlbiAtIDE7IHMrKykgeworCQkJaWYgKCFpc3ByaW50KCpzKSkgeworCQkJCXIgPSBBUkNISVZFX0ZBVEFMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChyICE9IEFSQ0hJVkVfT0spCisJCQlicmVhazsKIAkJaWYgKCpwICE9ICcvJykgewogCQkJciA9IHByb2Nlc3NfYWRkX2VudHJ5KGEsIG10cmVlLCAmZ2xvYmFsLCBwLCBsZW4sCiAJCQkgICAgJmxhc3RfZW50cnksIGlzX2Zvcm1fZCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYwppbmRleCBjNjhkNzdiLi4xMjYxMTkxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyLmMKQEAgLTE0OCw2ICsxNDgsOSBAQAogI2RlZmluZSBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkgMHgxMAogI2VuZGlmCiAKKyN1bmRlZiBtaW5pbXVtCisjZGVmaW5lIG1pbmltdW0oYSwgYikJKChhKTwoYik/KGEpOihiKSkKKwogLyogRmllbGRzIGNvbW1vbiB0byBhbGwgaGVhZGVycyAqLwogc3RydWN0IHJhcl9oZWFkZXIKIHsKQEAgLTI1OCw2ICsyNjEsNyBAQAogICBzdHJ1Y3QgZGF0YV9ibG9ja19vZmZzZXRzICpkYm87CiAgIHVuc2lnbmVkIGludCBjdXJzb3I7CiAgIHVuc2lnbmVkIGludCBub2RlczsKKyAgY2hhciBmaWxlbmFtZV9tdXN0X21hdGNoOwogCiAgIC8qIExaU1MgbWVtYmVycyAqLwogICBzdHJ1Y3QgaHVmZm1hbl9jb2RlIG1haW5jb2RlOwpAQCAtMTAyMyw4ICsxMDI3LDExIEBACiAgIGNhc2UgQ09NUFJFU1NfTUVUSE9EX0dPT0Q6CiAgIGNhc2UgQ09NUFJFU1NfTUVUSE9EX0JFU1Q6CiAgICAgcmV0ID0gcmVhZF9kYXRhX2NvbXByZXNzZWQoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBpZiAocmV0ICE9IEFSQ0hJVkVfT0sgJiYgcmV0ICE9IEFSQ0hJVkVfV0FSTikKKyAgICBpZiAocmV0ICE9IEFSQ0hJVkVfT0sgJiYgcmV0ICE9IEFSQ0hJVkVfV0FSTikgewogICAgICAgX19hcmNoaXZlX3BwbWQ3X2Z1bmN0aW9ucy5QcG1kN19GcmVlKCZyYXItPnBwbWQ3X2NvbnRleHQpOworICAgICAgcmFyLT5zdGFydF9uZXdfdGFibGUgPSAxOworICAgICAgcmFyLT5wcG1kX3ZhbGlkID0gMDsKKyAgICB9CiAgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKQEAgLTE1NjAsNiArMTU2NywxMiBAQAogICAgIH0KICAgICByZXR1cm4gcmV0OwogICB9CisgIGVsc2UgaWYgKHJhci0+ZmlsZW5hbWVfbXVzdF9tYXRjaCkKKyAgeworICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorICAgICAgIk1pc21hdGNoIG9mIGZpbGUgcGFydHMgc3BsaXQgYWNyb3NzIG11bHRpLXZvbHVtZSBhcmNoaXZlIik7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQogCiAgIHJhci0+ZmlsZW5hbWVfc2F2ZSA9IChjaGFyKilyZWFsbG9jKHJhci0+ZmlsZW5hbWVfc2F2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVfc2l6ZSArIDEpOwpAQCAtMTcxMiw2ICsxNzI1LDEzIEBACiAgIHN0cnVjdCB0bSAqdG07CiAgIHRpbWVfdCB0OwogICBsb25nIG5zZWM7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKSB8fCBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisgIHN0cnVjdCB0bSB0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKyAgZXJybm9fdCB0ZXJyOworICBfX3RpbWU2NF90IHRtcHRpbWU7CisjZW5kaWYKIAogICBpZiAocCArIDIgPiBlbmRwKQogICAgIHJldHVybiAoLTEpOwpAQCAtMTc0Myw3ICsxNzYzLDE4IEBACiAgICAgICAgIHJlbSA9ICgoKHVuc2lnbmVkKSh1bnNpZ25lZCBjaGFyKSpwKSA8PCAxNikgfCAocmVtID4+IDgpOwogICAgICAgICBwKys7CiAgICAgICB9CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorICAgICAgdG0gPSBsb2NhbHRpbWVfcigmdCwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKyAgICAgIHRtcHRpbWUgPSB0OworICAgICAgdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZ0bWJ1ZiwgJnRtcHRpbWUpOworICAgICAgaWYgKHRlcnIpCisgICAgICAgIHRtID0gTlVMTDsKKyAgICAgIGVsc2UKKyAgICAgICAgdG0gPSAmdG1idWY7CisjZWxzZQogICAgICAgdG0gPSBsb2NhbHRpbWUoJnQpOworI2VuZGlmCiAgICAgICBuc2VjID0gdG0tPnRtX3NlYyArIHJlbSAvIE5TX1VOSVQ7CiAgICAgICBpZiAocm1vZGUgJiA0KQogICAgICAgewpAQCAtMjMwMCw2ICsyMzMxLDExIEBACiAgICAgICBuZXdfc2l6ZSA9IERJQ1RJT05BUllfTUFYX1NJWkU7CiAgICAgZWxzZQogICAgICAgbmV3X3NpemUgPSByYXJfZmxzKCh1bnNpZ25lZCBpbnQpcmFyLT51bnBfc2l6ZSkgPDwgMTsKKyAgICBpZiAobmV3X3NpemUgPT0gMCkgeworICAgICAgYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAiWmVybyB3aW5kb3cgc2l6ZSBpcyBpbnZhbGlkLiIpOworICAgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgICB9CiAgICAgbmV3X3dpbmRvdyA9IHJlYWxsb2MocmFyLT5senNzLndpbmRvdywgbmV3X3NpemUpOwogICAgIGlmIChuZXdfd2luZG93ID09IE5VTEwpIHsKICAgICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCkBAIC0yNDM3LDggKzI0NzMsMTEgQEAKICAgICAgIGlmIChhZGRfdmFsdWUoYSwgY29kZSwgaiwgY29kZWJpdHMsIGkpICE9IEFSQ0hJVkVfT0spCiAgICAgICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAgICAgICBjb2RlYml0cysrOwotICAgICAgaWYgKC0tc3ltYm9sc2xlZnQgPD0gMCkgeyBicmVhazsgYnJlYWs7IH0KKyAgICAgIGlmICgtLXN5bWJvbHNsZWZ0IDw9IDApCisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBpZiAoc3ltYm9sc2xlZnQgPD0gMCkKKyAgICAgIGJyZWFrOwogICAgIGNvZGViaXRzIDw8PSAxOwogICB9CiAgIHJldHVybiAoQVJDSElWRV9PSyk7CkBAIC0yNDQ4LDcgKzI0ODcsOCBAQAogYWRkX3ZhbHVlKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCBodWZmbWFuX2NvZGUgKmNvZGUsIGludCB2YWx1ZSwKICAgICAgICAgICBpbnQgY29kZWJpdHMsIGludCBsZW5ndGgpCiB7Ci0gIGludCByZXBlYXRwb3MsIGxhc3Rub2RlLCBiaXRwb3MsIGJpdCwgcmVwZWF0bm9kZSwgbmV4dG5vZGU7CisgIGludCBsYXN0bm9kZSwgYml0cG9zLCBiaXQ7CisgIC8qIGludCByZXBlYXRwb3MsIHJlcGVhdG5vZGUsIG5leHRub2RlOyAqLwogCiAgIGZyZWUoY29kZS0+dGFibGUpOwogICBjb2RlLT50YWJsZSA9IE5VTEw7CkBAIC0yNDU4LDYgKzI0OTgsOSBAQAogICBpZihsZW5ndGggPCBjb2RlLT5taW5sZW5ndGgpCiAgICAgY29kZS0+bWlubGVuZ3RoID0gbGVuZ3RoOwogCisgIC8qCisgICAqIERlYWQgY29kZSwgcmVwZWF0cG9zIHdhcyBpcyAtMQorICAgKgogICByZXBlYXRwb3MgPSAtMTsKICAgaWYgKHJlcGVhdHBvcyA9PSAwIHx8IChyZXBlYXRwb3MgPj0gMAogICAgICYmICgoKGNvZGViaXRzID4+IChyZXBlYXRwb3MgLSAxKSkgJiAzKSA9PSAwCkBAIC0yNDY3LDYgKzI1MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHJlcGVhdCBwb3NpdGlvbiIpOwogICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAgIH0KKyAgKi8KIAogICBsYXN0bm9kZSA9IDA7CiAgIGZvciAoYml0cG9zID0gbGVuZ3RoIC0gMTsgYml0cG9zID49IDA7IGJpdHBvcy0tKQpAQCAtMjQ4Miw5ICsyNTI2LDEyIEBACiAgICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogICAgIH0KIAorICAgIC8qCisgICAgICogRGVhZCBjb2RlLCByZXBlYXRwb3Mgd2FzIC0xLCBiaXRwb3MgPj0wCisgICAgICoKICAgICBpZiAoYml0cG9zID09IHJlcGVhdHBvcykKICAgICB7Ci0gICAgICAvKiBPcGVuIGJyYW5jaCBjaGVjayAqLworICAgICAgKiBPcGVuIGJyYW5jaCBjaGVjayAqCiAgICAgICBpZiAoIShjb2RlLT50cmVlW2xhc3Rub2RlXS5icmFuY2hlc1tiaXRdIDwgMCkpCiAgICAgICB7CiAgICAgICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULApAQCAtMjUwMywxNiArMjU1MCwxNyBAQAogICAgICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogICAgICAgfQogCi0gICAgICAvKiBTZXQgYnJhbmNoZXMgKi8KKyAgICAgICogU2V0IGJyYW5jaGVzICoKICAgICAgIGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzW2JpdF0gPSByZXBlYXRub2RlOwogICAgICAgY29kZS0+dHJlZVtyZXBlYXRub2RlXS5icmFuY2hlc1tiaXRdID0gcmVwZWF0bm9kZTsKICAgICAgIGNvZGUtPnRyZWVbcmVwZWF0bm9kZV0uYnJhbmNoZXNbYml0XjFdID0gbmV4dG5vZGU7CiAgICAgICBsYXN0bm9kZSA9IG5leHRub2RlOwogCi0gICAgICBiaXRwb3MrKzsgLyogdGVybWluYXRpbmcgYml0IGFscmVhZHkgaGFuZGxlZCwgc2tpcCBpdCAqLworICAgICAgYml0cG9zKys7ICogdGVybWluYXRpbmcgYml0IGFscmVhZHkgaGFuZGxlZCwgc2tpcCBpdCAqCiAgICAgfQogICAgIGVsc2UKICAgICB7CisgICAgKi8KICAgICAgIC8qIE9wZW4gYnJhbmNoIGNoZWNrICovCiAgICAgICBpZiAoY29kZS0+dHJlZVtsYXN0bm9kZV0uYnJhbmNoZXNbYml0XSA8IDApCiAgICAgICB7CkBAIC0yNTI2LDcgKzI1NzQsNyBAQAogCiAgICAgICAvKiBzZXQgdG8gYnJhbmNoICovCiAgICAgICBsYXN0bm9kZSA9IGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzW2JpdF07Ci0gICAgfQorIC8qIH0gKi8KICAgfQogCiAgIGlmICghKGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzWzBdID09IC0xCkBAIC0yNjEwLDExICsyNjU4LDE1IEBACiAgICAgICB0YWJsZVtpXS52YWx1ZSA9IGNvZGUtPnRyZWVbbm9kZV0uYnJhbmNoZXNbMF07CiAgICAgfQogICB9CisgIC8qCisgICAqIERlYWQgY29kZSwgbm9kZSA+PSAwCisgICAqCiAgIGVsc2UgaWYgKG5vZGUgPCAwKQogICB7CiAgICAgZm9yKGkgPSAwOyBpIDwgY3VycnRhYmxlc2l6ZTsgaSsrKQogICAgICAgdGFibGVbaV0ubGVuZ3RoID0gLTE7CiAgIH0KKyAgICovCiAgIGVsc2UKICAgewogICAgIGlmKGRlcHRoID09IG1heGRlcHRoKQpAQCAtMjY0Niw2ICsyNjk4LDEwIEBACiAgICAgICAwLCAxLCAxLCAxLCAxLCAyLCAyLAogICAgICAgMiwgMiwgMywgMywgMywgMywgNCwKICAgICAgIDQsIDQsIDQsIDUsIDUsIDUsIDUgfTsKKyAgc3RhdGljIGNvbnN0IGludCBsZW5ndGhiX21pbiA9IG1pbmltdW0oCisgICAgKGludCkoc2l6ZW9mKGxlbmd0aGJhc2VzKS9zaXplb2YobGVuZ3RoYmFzZXNbMF0pKSwKKyAgICAoaW50KShzaXplb2YobGVuZ3RoYml0cykvc2l6ZW9mKGxlbmd0aGJpdHNbMF0pKQorICApOwogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldGJhc2VzW10gPQogICAgIHsgICAgICAgMCwgICAgICAgMSwgICAgICAgMiwgICAgICAgMywgICAgICAgNCwgICAgICAgNiwKICAgICAgICAgICAgIDgsICAgICAgMTIsICAgICAgMTYsICAgICAgMjQsICAgICAgMzIsICAgICAgNDgsCkBAIC0yNjYzLDYgKzI3MTksMTAgQEAKICAgICAgIDExLCAxMSwgMTIsIDEyLCAxMywgMTMsIDE0LCAxNCwgMTUsIDE1LCAxNiwgMTYsCiAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAogICAgICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCB9OworICBzdGF0aWMgY29uc3QgaW50IG9mZnNldGJfbWluID0gbWluaW11bSgKKyAgICAoaW50KShzaXplb2Yob2Zmc2V0YmFzZXMpL3NpemVvZihvZmZzZXRiYXNlc1swXSkpLAorICAgIChpbnQpKHNpemVvZihvZmZzZXRiaXRzKS9zaXplb2Yob2Zmc2V0Yml0c1swXSkpCisgICk7CiAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNob3J0YmFzZXNbXSA9CiAgICAgeyAwLCA0LCA4LCAxNiwgMzIsIDY0LCAxMjgsIDE5MiB9OwogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaG9ydGJpdHNbXSA9CkBAIC0yNzQyLDkgKzI4MDIsNyBAQAogCiAgICAgICBpZiAoKGxlbnN5bWJvbCA9IHJlYWRfbmV4dF9zeW1ib2woYSwgJnJhci0+bGVuZ3RoY29kZSkpIDwgMCkKICAgICAgICAgZ290byBiYWRfZGF0YTsKLSAgICAgIGlmIChsZW5zeW1ib2wgPiAoaW50KShzaXplb2YobGVuZ3RoYmFzZXMpL3NpemVvZihsZW5ndGhiYXNlc1swXSkpKQotICAgICAgICBnb3RvIGJhZF9kYXRhOwotICAgICAgaWYgKGxlbnN5bWJvbCA+IChpbnQpKHNpemVvZihsZW5ndGhiaXRzKS9zaXplb2YobGVuZ3RoYml0c1swXSkpKQorICAgICAgaWYgKGxlbnN5bWJvbCA+IGxlbmd0aGJfbWluKQogICAgICAgICBnb3RvIGJhZF9kYXRhOwogICAgICAgbGVuID0gbGVuZ3RoYmFzZXNbbGVuc3ltYm9sXSArIDI7CiAgICAgICBpZiAobGVuZ3RoYml0c1tsZW5zeW1ib2xdID4gMCkgewpAQCAtMjc3Niw5ICsyODM0LDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGlmIChzeW1ib2wtMjcxID4gKGludCkoc2l6ZW9mKGxlbmd0aGJhc2VzKS9zaXplb2YobGVuZ3RoYmFzZXNbMF0pKSkKLSAgICAgICAgZ290byBiYWRfZGF0YTsKLSAgICAgIGlmIChzeW1ib2wtMjcxID4gKGludCkoc2l6ZW9mKGxlbmd0aGJpdHMpL3NpemVvZihsZW5ndGhiaXRzWzBdKSkpCisgICAgICBpZiAoc3ltYm9sLTI3MSA+IGxlbmd0aGJfbWluKQogICAgICAgICBnb3RvIGJhZF9kYXRhOwogICAgICAgbGVuID0gbGVuZ3RoYmFzZXNbc3ltYm9sLTI3MV0rMzsKICAgICAgIGlmKGxlbmd0aGJpdHNbc3ltYm9sLTI3MV0gPiAwKSB7CkBAIC0yNzkwLDkgKzI4NDYsNyBAQAogCiAgICAgICBpZiAoKG9mZnNzeW1ib2wgPSByZWFkX25leHRfc3ltYm9sKGEsICZyYXItPm9mZnNldGNvZGUpKSA8IDApCiAgICAgICAgIGdvdG8gYmFkX2RhdGE7Ci0gICAgICBpZiAob2Zmc3N5bWJvbCA+IChpbnQpKHNpemVvZihvZmZzZXRiYXNlcykvc2l6ZW9mKG9mZnNldGJhc2VzWzBdKSkpCi0gICAgICAgIGdvdG8gYmFkX2RhdGE7Ci0gICAgICBpZiAob2Zmc3N5bWJvbCA+IChpbnQpKHNpemVvZihvZmZzZXRiaXRzKS9zaXplb2Yob2Zmc2V0Yml0c1swXSkpKQorICAgICAgaWYgKG9mZnNzeW1ib2wgPiBvZmZzZXRiX21pbikKICAgICAgICAgZ290byBiYWRfZGF0YTsKICAgICAgIG9mZnMgPSBvZmZzZXRiYXNlc1tvZmZzc3ltYm9sXSsxOwogICAgICAgaWYob2Zmc2V0Yml0c1tvZmZzc3ltYm9sXSA+IDApCkBAIC0yOTI4LDEyICsyOTgyLDE0IEBACiAgICAgZWxzZSBpZiAoKmF2YWlsID09IDAgJiYgcmFyLT5tYWluX2ZsYWdzICYgTUhEX1ZPTFVNRSAmJgogICAgICAgcmFyLT5maWxlX2ZsYWdzICYgRkhEX1NQTElUX0FGVEVSKQogICAgIHsKKyAgICAgIHJhci0+ZmlsZW5hbWVfbXVzdF9tYXRjaCA9IDE7CiAgICAgICByZXQgPSBhcmNoaXZlX3JlYWRfZm9ybWF0X3Jhcl9yZWFkX2hlYWRlcihhLCBhLT5lbnRyeSk7CiAgICAgICBpZiAocmV0ID09IChBUkNISVZFX0VPRikpCiAgICAgICB7CiAgICAgICAgIHJhci0+aGFzX2VuZGFyY19oZWFkZXIgPSAxOwogICAgICAgICByZXQgPSBhcmNoaXZlX3JlYWRfZm9ybWF0X3Jhcl9yZWFkX2hlYWRlcihhLCBhLT5lbnRyeSk7CiAgICAgICB9CisgICAgICByYXItPmZpbGVuYW1lX211c3RfbWF0Y2ggPSAwOwogICAgICAgaWYgKHJldCAhPSAoQVJDSElWRV9PSykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgcmV0dXJuIHJhcl9yZWFkX2FoZWFkKGEsIG1pbiwgYXZhaWwpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQwY2NlCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMKQEAgLTAsMCArMSw0MTAzIEBACisvKi0KKyogQ29weXJpZ2h0IChjKSAyMDE4IEdyemVnb3J6IEFudG9uaWFrIChodHRwOi8vYW50b25pYWsub3JnKQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgImFyY2hpdmVfZW5kaWFuLmgiCisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfWkxJQl9ICisjaW5jbHVkZSA8Y21femxpYi5oPiAvKiBjcmMzMiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaWZuZGVmIEhBVkVfWkxJQl9ICisjaW5jbHVkZSAiYXJjaGl2ZV9jcmMzMi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X3ByaXZhdGUuaCIKKworI2lmZGVmIEhBVkVfQkxBS0UyX0gKKyNpbmNsdWRlIDxibGFrZTIuaD4KKyNlbHNlCisjaW5jbHVkZSAiYXJjaGl2ZV9ibGFrZTIuaCIKKyNlbmRpZgorCisvKiNkZWZpbmUgQ0hFQ0tfQ1JDX09OX1NPTElEX1NLSVAqLworLyojZGVmaW5lIERPTlRfRkFJTF9PTl9DUkNfRVJST1IqLworLyojZGVmaW5lIERFQlVHKi8KKworI2RlZmluZSByYXI1X21pbihhLCBiKSAoKChhKSA+IChiKSkgPyAoYikgOiAoYSkpCisjZGVmaW5lIHJhcjVfbWF4KGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgcmFyNV9jb3VudG9mKFgpICgoY29uc3Qgc3NpemVfdCkgKHNpemVvZihYKSAvIHNpemVvZigqWCkpKQorCisjaWYgZGVmaW5lZCBERUJVRworI2RlZmluZSBERUJVR19DT0RFIGlmKDEpCisjZGVmaW5lIExPRyguLi4pIGRvIHsgcHJpbnRmKCJyYXI1OiAiIF9fVkFfQVJHU19fKTsgcHV0cygiIik7IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIERFQlVHX0NPREUgaWYoMCkKKyNlbmRpZgorCisvKiBSZWFsIFJBUjUgbWFnaWMgbnVtYmVyIGlzOgorICoKKyAqIDB4NTIsIDB4NjEsIDB4NzIsIDB4MjEsIDB4MWEsIDB4MDcsIDB4MDEsIDB4MDAKKyAqICJSYXIh4oaS4oCi4pi6wrdceDAwIgorICoKKyAqIFJldHJpZXZlZCB3aXRoIGByYXI1X3NpZ25hdHVyZSgpYCBieSBYT1InaW5nIGl0IHdpdGggMHhBMSwgYmVjYXVzZSBJIGRvbid0CisgKiB3YW50IHRvIHB1dCB0aGlzIG1hZ2ljIHNlcXVlbmNlIGluIGVhY2ggYmluYXJ5IHRoYXQgdXNlcyBsaWJhcmNoaXZlLCBzbworICogYXBwbGljYXRpb25zIHRoYXQgc2NhbiB0aHJvdWdoIHRoZSBmaWxlIGZvciB0aGlzIG1hcmtlciB3b24ndCB0cmlnZ2VyIG9uCisgKiB0aGlzICJmYWxzZSIgb25lLgorICoKKyAqIFRoZSBhcnJheSBpdHNlbGYgaXMgZGVjcnlwdGVkIGluIGByYXI1X2luaXRgIGZ1bmN0aW9uLiAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciByYXI1X3NpZ25hdHVyZV94b3JbXSA9IHsgMjQzLCAxOTIsIDIxMSwgMTI4LCAxODcsIDE2NiwgMTYwLCAxNjEgfTsKK3N0YXRpYyBjb25zdCBzaXplX3QgZ191bnBhY2tfd2luZG93X3NpemUgPSAweDIwMDAwOworCisvKiBUaGVzZSBjb3VsZCBoYXZlIGJlZW4gc3RhdGljIGNvbnN0J3MsIGJ1dCB0aGV5IGFyZW4ndCwgYmVjYXVzZSBvZgorICogVmlzdWFsIFN0dWRpby4gKi8KKyNkZWZpbmUgTUFYX05BTUVfSU5fQ0hBUlMgMjA0OAorI2RlZmluZSBNQVhfTkFNRV9JTl9CWVRFUyAoNCAqIE1BWF9OQU1FX0lOX0NIQVJTKQorCitzdHJ1Y3QgZmlsZV9oZWFkZXIgeworCXNzaXplX3QgYnl0ZXNfcmVtYWluaW5nOworCXNzaXplX3QgdW5wYWNrZWRfc2l6ZTsKKwlpbnQ2NF90IGxhc3Rfb2Zmc2V0OyAgICAgICAgIC8qIFVzZWQgaW4gc2FuaXR5IGNoZWNrcy4gKi8KKwlpbnQ2NF90IGxhc3Rfc2l6ZTsgICAgICAgICAgIC8qIFVzZWQgaW4gc2FuaXR5IGNoZWNrcy4gKi8KKworCXVpbnQ4X3Qgc29saWQgOiAxOyAgICAgICAgICAgLyogSXMgdGhpcyBhIHNvbGlkIHN0cmVhbT8gKi8KKwl1aW50OF90IHNlcnZpY2UgOiAxOyAgICAgICAgIC8qIElzIHRoaXMgZmlsZSBhIHNlcnZpY2UgZGF0YT8gKi8KKwl1aW50OF90IGVvZiA6IDE7ICAgICAgICAgICAgIC8qIERpZCB3ZSBmaW5pc2ggdW5wYWNraW5nIHRoZSBmaWxlPyAqLworCXVpbnQ4X3QgZGlyIDogMTsgICAgICAgICAgICAgLyogSXMgdGhpcyBmaWxlIGVudHJ5IGEgZGlyZWN0b3J5PyAqLworCisJLyogT3B0aW9uYWwgdGltZSBmaWVsZHMuICovCisJdWludDY0X3QgZV9tdGltZTsKKwl1aW50NjRfdCBlX2N0aW1lOworCXVpbnQ2NF90IGVfYXRpbWU7CisJdWludDMyX3QgZV91bml4X25zOworCisJLyogT3B0aW9uYWwgaGFzaCBmaWVsZHMuICovCisJdWludDMyX3Qgc3RvcmVkX2NyYzMyOworCXVpbnQzMl90IGNhbGN1bGF0ZWRfY3JjMzI7CisJdWludDhfdCBibGFrZTJzcFszMl07CisJYmxha2Uyc3Bfc3RhdGUgYjJzdGF0ZTsKKwljaGFyIGhhc19ibGFrZTI7CisKKwkvKiBPcHRpb25hbCByZWRpciBmaWVsZHMgKi8KKwl1aW50NjRfdCByZWRpcl90eXBlOworCXVpbnQ2NF90IHJlZGlyX2ZsYWdzOworCisJc3NpemVfdCBzb2xpZF93aW5kb3dfc2l6ZTsgLyogVXNlZCBpbiBmaWxlIGZvcm1hdCBjaGVjay4gKi8KK307CisKK2VudW0gRVhUUkEgeworCUVYX0NSWVBUID0gMHgwMSwKKwlFWF9IQVNIID0gMHgwMiwKKwlFWF9IVElNRSA9IDB4MDMsCisJRVhfVkVSU0lPTiA9IDB4MDQsCisJRVhfUkVESVIgPSAweDA1LAorCUVYX1VPV05FUiA9IDB4MDYsCisJRVhfU1VCREFUQSA9IDB4MDcKK307CisKKyNkZWZpbmUgUkVESVJfU1lNTElOS19JU19ESVIJMQorCitlbnVtIFJFRElSX1RZUEUgeworCVJFRElSX1RZUEVfTk9ORSA9IDAsCisJUkVESVJfVFlQRV9VTklYU1lNTElOSyA9IDEsCisJUkVESVJfVFlQRV9XSU5TWU1MSU5LID0gMiwKKwlSRURJUl9UWVBFX0pVTkNUSU9OID0gMywKKwlSRURJUl9UWVBFX0hBUkRMSU5LID0gNCwKKwlSRURJUl9UWVBFX0ZJTEVDT1BZID0gNSwKK307CisKKyNkZWZpbmUJT1dORVJfVVNFUl9OQU1FCQkweDAxCisjZGVmaW5lCU9XTkVSX0dST1VQX05BTUUJMHgwMgorI2RlZmluZQlPV05FUl9VU0VSX1VJRAkJMHgwNAorI2RlZmluZQlPV05FUl9HUk9VUF9HSUQJCTB4MDgKKyNkZWZpbmUJT1dORVJfTUFYTkFNRUxFTgkyNTYKKworZW51bSBGSUxURVJfVFlQRSB7CisJRklMVEVSX0RFTFRBID0gMCwgICAvKiBHZW5lcmljIHBhdHRlcm4uICovCisJRklMVEVSX0U4ICAgID0gMSwgICAvKiBJbnRlbCB4ODYgY29kZS4gKi8KKwlGSUxURVJfRThFOSAgPSAyLCAgIC8qIEludGVsIHg4NiBjb2RlLiAqLworCUZJTFRFUl9BUk0gICA9IDMsICAgLyogQVJNIGNvZGUuICovCisJRklMVEVSX0FVRElPID0gNCwgICAvKiBBdWRpbyBmaWx0ZXIsIG5vdCB1c2VkIGluIFJBUnY1LiAqLworCUZJTFRFUl9SR0IgICA9IDUsICAgLyogQ29sb3IgcGFsZXR0ZSwgbm90IHVzZWQgaW4gUkFSdjUuICovCisJRklMVEVSX0lUQU5JVU0gPSA2LCAvKiBJbnRlbCdzIEl0YW5pdW0sIG5vdCB1c2VkIGluIFJBUnY1LiAqLworCUZJTFRFUl9QUE0gICA9IDcsICAgLyogUHJlZGljdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLCBub3QgdXNlZCBpbgorCQkJICAgICAgIFJBUnY1LiAqLworCUZJTFRFUl9OT05FICA9IDgsCit9OworCitzdHJ1Y3QgZmlsdGVyX2luZm8geworCWludCB0eXBlOworCWludCBjaGFubmVsczsKKwlpbnQgcG9zX3I7CisKKwlpbnQ2NF90IGJsb2NrX3N0YXJ0OworCXNzaXplX3QgYmxvY2tfbGVuZ3RoOworCXVpbnQxNl90IHdpZHRoOworfTsKKworc3RydWN0IGRhdGFfcmVhZHkgeworCWNoYXIgdXNlZDsKKwljb25zdCB1aW50OF90KiBidWY7CisJc2l6ZV90IHNpemU7CisJaW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgY2RlcXVlIHsKKwl1aW50MTZfdCBiZWdfcG9zOworCXVpbnQxNl90IGVuZF9wb3M7CisJdWludDE2X3QgY2FwX21hc2s7CisJdWludDE2X3Qgc2l6ZTsKKwlzaXplX3QqIGFycjsKK307CisKK3N0cnVjdCBkZWNvZGVfdGFibGUgeworCXVpbnQzMl90IHNpemU7CisJaW50MzJfdCBkZWNvZGVfbGVuWzE2XTsKKwl1aW50MzJfdCBkZWNvZGVfcG9zWzE2XTsKKwl1aW50MzJfdCBxdWlja19iaXRzOworCXVpbnQ4X3QgcXVpY2tfbGVuWzEgPDwgMTBdOworCXVpbnQxNl90IHF1aWNrX251bVsxIDw8IDEwXTsKKwl1aW50MTZfdCBkZWNvZGVfbnVtWzMwNl07Cit9OworCitzdHJ1Y3QgY29tcF9zdGF0ZSB7CisJLyogRmxhZyB1c2VkIHRvIHNwZWNpZnkgaWYgdW5wYWNrZXIgbmVlZHMgdG8gcmVpbml0aWFsaXplIHRoZQorCSAgIHVuY29tcHJlc3Npb24gY29udGV4dC4gKi8KKwl1aW50OF90IGluaXRpYWxpemVkIDogMTsKKworCS8qIEZsYWcgdXNlZCB3aGVuIGFwcGx5aW5nIGZpbHRlcnMuICovCisJdWludDhfdCBhbGxfZmlsdGVyc19hcHBsaWVkIDogMTsKKworCS8qIEZsYWcgdXNlZCB0byBza2lwIGZpbGUgY29udGV4dCByZWluaXRpYWxpemF0aW9uLCB1c2VkIHdoZW4gdW5wYWNrZXIKKwkgICBpcyBza2lwcGluZyB0aHJvdWdoIGRpZmZlcmVudCBtdWx0aXZvbHVtZSBhcmNoaXZlcy4gKi8KKwl1aW50OF90IHN3aXRjaF9tdWx0aXZvbHVtZSA6IDE7CisKKwkvKiBGbGFnIHVzZWQgdG8gc3BlY2lmeSBpZiB1bnBhY2tlciBoYXMgcHJvY2Vzc2VkIHRoZSB3aG9sZSBkYXRhIGJsb2NrCisJICAgb3IganVzdCBhIHBhcnQgb2YgaXQuICovCisJdWludDhfdCBibG9ja19wYXJzaW5nX2ZpbmlzaGVkIDogMTsKKworCXNpZ25lZCBpbnQgbm90dXNlZCA6IDQ7CisKKwlpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIFVuY29tcHJlc3Npb24gZmxhZ3MuICovCisJaW50IG1ldGhvZDsgICAgICAgICAgICAgICAgICAvKiBVbmNvbXByZXNzaW9uIGFsZ29yaXRobSBtZXRob2QuICovCisJaW50IHZlcnNpb247ICAgICAgICAgICAgICAgICAvKiBVbmNvbXByZXNzaW9uIGFsZ29yaXRobSB2ZXJzaW9uLiAqLworCXNzaXplX3Qgd2luZG93X3NpemU7ICAgICAgICAgLyogU2l6ZSBvZiB3aW5kb3dfYnVmLiAqLworCXVpbnQ4X3QqIHdpbmRvd19idWY7ICAgICAgICAgLyogQ2lyY3VsYXIgYnVmZmVyIHVzZWQgZHVyaW5nCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uLiAqLworCXVpbnQ4X3QqIGZpbHRlcmVkX2J1ZjsgICAgICAgLyogQnVmZmVyIHVzZWQgd2hlbiBhcHBseWluZyBmaWx0ZXJzLiAqLworCWNvbnN0IHVpbnQ4X3QqIGJsb2NrX2J1ZjsgICAgLyogQnVmZmVyIHVzZWQgd2hlbiBtZXJnaW5nIGJsb2Nrcy4gKi8KKwlzaXplX3Qgd2luZG93X21hc2s7ICAgICAgICAgIC8qIENvbnZlbmllbmNlIGZpZWxkOyB3aW5kb3dfc2l6ZSAtIDEuICovCisJaW50NjRfdCB3cml0ZV9wdHI7ICAgICAgICAgICAvKiBUaGlzIGFtb3VudCBvZiBkYXRhIGhhcyBiZWVuIHVucGFja2VkCisJCQkJCWluIHRoZSB3aW5kb3cgYnVmZmVyLiAqLworCWludDY0X3QgbGFzdF93cml0ZV9wdHI7ICAgICAgLyogVGhpcyBhbW91bnQgb2YgZGF0YSBoYXMgYmVlbiBzdG9yZWQgaW4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgZmlsZS4gKi8KKwlpbnQ2NF90IGxhc3RfdW5zdG9yZV9wdHI7ICAgIC8qIENvdW50ZXIgb2YgYnl0ZXMgZXh0cmFjdGVkIGR1cmluZworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdG9yaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfd3JpdGVfcHRyIGJlY2F1c2Ugb2YgaG93IFNFUlZJQ0UKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgYmxvY2tzIGFyZSBoYW5kbGVkIGR1cmluZyBza2lwcGluZworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc29saWQgbXVsdGlhcmNoaXZlIGFyY2hpdmVzLiAqLworCWludDY0X3Qgc29saWRfb2Zmc2V0OyAgICAgICAgLyogQWRkaXRpb25hbCBvZmZzZXQgaW5zaWRlIHRoZSB3aW5kb3cKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgdXNlZCBpbiB1bnBhY2tpbmcgc29saWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVzLiAqLworCXNzaXplX3QgY3VyX2Jsb2NrX3NpemU7ICAgICAgLyogU2l6ZSBvZiBjdXJyZW50IGRhdGEgYmxvY2suICovCisJaW50IGxhc3RfbGVuOyAgICAgICAgICAgICAgICAvKiBGbGFnIHVzZWQgaW4gbHpzcyBkZWNvbXByZXNzaW9uLiAqLworCisJLyogRGVjb2RlIHRhYmxlcyB1c2VkIGR1cmluZyBsenNzIHVuY29tcHJlc3Npb24uICovCisKKyNkZWZpbmUgSFVGRl9CQyAyMAorCXN0cnVjdCBkZWNvZGVfdGFibGUgYmQ7ICAgICAgLyogaHVmZm1hbiBiaXQgbGVuZ3RocyAqLworI2RlZmluZSBIVUZGX05DIDMwNgorCXN0cnVjdCBkZWNvZGVfdGFibGUgbGQ7ICAgICAgLyogbGl0ZXJhbHMgKi8KKyNkZWZpbmUgSFVGRl9EQyA2NAorCXN0cnVjdCBkZWNvZGVfdGFibGUgZGQ7ICAgICAgLyogZGlzdGFuY2VzICovCisjZGVmaW5lIEhVRkZfTERDIDE2CisJc3RydWN0IGRlY29kZV90YWJsZSBsZGQ7ICAgICAvKiBsb3dlciBiaXRzIG9mIGRpc3RhbmNlcyAqLworI2RlZmluZSBIVUZGX1JDIDQ0CisJc3RydWN0IGRlY29kZV90YWJsZSByZDsgICAgICAvKiByZXBlYXRpbmcgZGlzdGFuY2VzICovCisjZGVmaW5lIEhVRkZfVEFCTEVfU0laRSAoSFVGRl9OQyArIEhVRkZfREMgKyBIVUZGX1JDICsgSFVGRl9MREMpCisKKwkvKiBDaXJjdWxhciBkZXF1ZSBmb3Igc3RvcmluZyBmaWx0ZXJzLiAqLworCXN0cnVjdCBjZGVxdWUgZmlsdGVyczsKKwlpbnQ2NF90IGxhc3RfYmxvY2tfc3RhcnQ7ICAgIC8qIFVzZWQgZm9yIHNhbml0eSBjaGVja2luZy4gKi8KKwlzc2l6ZV90IGxhc3RfYmxvY2tfbGVuZ3RoOyAgIC8qIFVzZWQgZm9yIHNhbml0eSBjaGVja2luZy4gKi8KKworCS8qIERpc3RhbmNlIGNhY2hlIHVzZWQgZHVyaW5nIGx6c3MgdW5jb21wcmVzc2lvbi4gKi8KKwlpbnQgZGlzdF9jYWNoZVs0XTsKKworCS8qIERhdGEgYnVmZmVyIHN0YWNrLiAqLworCXN0cnVjdCBkYXRhX3JlYWR5IGRyZWFkeVsyXTsKK307CisKKy8qIEJpdCByZWFkZXIgc3RhdGUuICovCitzdHJ1Y3QgYml0X3JlYWRlciB7CisJaW50OF90IGJpdF9hZGRyOyAgICAvKiBDdXJyZW50IGJpdCBwb2ludGVyIGluc2lkZSBjdXJyZW50IGJ5dGUuICovCisJaW50IGluX2FkZHI7ICAgICAgICAvKiBDdXJyZW50IGJ5dGUgcG9pbnRlci4gKi8KK307CisKKy8qIFJBUnY1IGJsb2NrIGhlYWRlciBzdHJ1Y3R1cmUuIFVzZSBiZl8qIGZ1bmN0aW9ucyB0byBnZXQgdmFsdWVzIGZyb20KKyAqIGJsb2NrX2ZsYWdzX3U4IGZpZWxkLiBJLmUuIGJmX2J5dGVfY291bnQsIGV0Yy4gKi8KK3N0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciB7CisJLyogYmxvY2tfZmxhZ3NfdTggY29udGFpbiBmaWVsZHMgZW5jb2RlZCBpbiBsaXR0bGUtZW5kaWFuIGJpdGZpZWxkOgorCSAqCisJICogLSB0YWJsZSBwcmVzZW50IGZsYWcgKHNociA3LCBhbmQgMSksCisJICogLSBsYXN0IGJsb2NrIGZsYWcgICAgKHNociA2LCBhbmQgMSksCisJICogLSBieXRlX2NvdW50ICAgICAgICAgKHNociAzLCBhbmQgNyksCisJICogLSBiaXRfc2l6ZSAgICAgICAgICAgKHNociAwLCBhbmQgNykuCisJICovCisJdWludDhfdCBibG9ja19mbGFnc191ODsKKwl1aW50OF90IGJsb2NrX2Nrc3VtOworfTsKKworLyogUkFSdjUgbWFpbiBoZWFkZXIgc3RydWN0dXJlLiAqLworc3RydWN0IG1haW5faGVhZGVyIHsKKwkvKiBEb2VzIHRoZSBhcmNoaXZlIGNvbnRhaW4gc29saWQgc3RyZWFtcz8gKi8KKwl1aW50OF90IHNvbGlkIDogMTsKKworCS8qIElmIHRoaXMgYSBtdWx0aS1maWxlIGFyY2hpdmU/ICovCisJdWludDhfdCB2b2x1bWUgOiAxOworCXVpbnQ4X3QgZW5kYXJjIDogMTsKKwl1aW50OF90IG5vdHVzZWQgOiA1OworCisJdW5zaWduZWQgaW50IHZvbF9ubzsKK307CisKK3N0cnVjdCBnZW5lcmljX2hlYWRlciB7CisJdWludDhfdCBzcGxpdF9hZnRlciA6IDE7CisJdWludDhfdCBzcGxpdF9iZWZvcmUgOiAxOworCXVpbnQ4X3QgcGFkZGluZyA6IDY7CisJaW50IHNpemU7CisJaW50IGxhc3RfaGVhZGVyX2lkOworfTsKKworc3RydWN0IG11bHRpdm9sdW1lIHsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfdm9sX25vOworCXVpbnQ4X3QqIHB1c2hfYnVmOworfTsKKworLyogTWFpbiBjb250ZXh0IHN0cnVjdHVyZS4gKi8KK3N0cnVjdCByYXI1IHsKKwlpbnQgaGVhZGVyX2luaXRpYWxpemVkOworCisJLyogU2V0IHRvIDEgaWYgY3VycmVudCBmaWxlIGlzIHBvc2l0aW9uZWQgQUZURVIgdGhlIG1hZ2ljIHZhbHVlCisJICogb2YgdGhlIGFyY2hpdmUgZmlsZS4gVGhpcyBpcyB1c2VkIGluIGhlYWRlciByZWFkaW5nIGZ1bmN0aW9ucy4gKi8KKwlpbnQgc2tpcHBlZF9tYWdpYzsKKworCS8qIFNldCB0byBub3QgemVybyBpZiB3ZSdyZSBpbiBza2lwIG1vZGUgKGVpdGhlciBieSBjYWxsaW5nCisJICogcmFyNV9kYXRhX3NraXAgZnVuY3Rpb24gb3Igd2hlbiBza2lwcGluZyBvdmVyIHNvbGlkIHN0cmVhbXMpLgorCSAqIFNldCB0byAwIHdoZW4gaW4gKiBleHRyYWN0aW9uIG1vZGUuIFRoaXMgaXMgdXNlZCBkdXJpbmcgY2hlY2tzdW0KKwkgKiBjYWxjdWxhdGlvbiBmdW5jdGlvbnMuICovCisJaW50IHNraXBfbW9kZTsKKworCS8qIFNldCB0byBub3QgemVybyBpZiB3ZSdyZSBpbiBibG9jayBtZXJnaW5nIG1vZGUgKGkuZS4gd2hlbiBzd2l0Y2hpbmcKKwkgKiB0byBhbm90aGVyIGZpbGUgaW4gbXVsdGl2b2x1bWUgYXJjaGl2ZSwgbGFzdCBibG9jayBmcm9tIDFzdCBhcmNoaXZlCisJICogbmVlZHMgdG8gYmUgbWVyZ2VkIHdpdGggMXN0IGJsb2NrIGZyb20gMm5kIGFyY2hpdmUpLiBUaGlzIGZsYWcKKwkgKiBndWFyZHMgYWdhaW5zdCByZWN1cnNpdmUgdXNlIG9mIHRoZSBtZXJnaW5nIGZ1bmN0aW9uLCB3aGljaCBkb2Vzbid0CisJICogc3VwcG9ydCByZWN1cnNpdmUgY2FsbHMuICovCisJaW50IG1lcmdlX21vZGU7CisKKwkvKiBBbiBvZmZzZXQgdG8gUXVpY2tPcGVuIGxpc3QuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHVucGFja2VyLAorCSAqIGJlY2F1c2Ugd2UncmUgZm9jdXNpbmcgb24gc3RyZWFtaW5nIGludGVyZmFjZS4gUXVpY2tPcGVuIGlzIGRlc2lnbmVkCisJICogdG8gbWFrZSB0aGluZ3MgcXVpY2tlciBmb3Igbm9uLXN0cmVhbSBpbnRlcmZhY2VzLCBzbyBpdCdzIG5vdCBvdXIKKwkgKiB1c2UgY2FzZS4gKi8KKwl1aW50NjRfdCBxbGlzdF9vZmZzZXQ7CisKKwkvKiBBbiBvZmZzZXQgdG8gYWRkaXRpb25hbCBSZWNvdmVyeSBkYXRhLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcworCSAqIHVucGFja2VyLiBSZWNvdmVyeSBkYXRhIGFyZSBhZGRpdGlvbmFsIFJlZWQtU29sb21vbiBjb2RlcyB0aGF0IGNvdWxkCisJICogYmUgdXNlZCB0byBjYWxjdWxhdGUgYnl0ZXMgdGhhdCBhcmUgbWlzc2luZyBpbiBhcmNoaXZlIG9yIGFyZQorCSAqIGNvcnJ1cHRlZC4gKi8KKwl1aW50NjRfdCBycl9vZmZzZXQ7CisKKwkvKiBWYXJpb3VzIGNvbnRleHQgdmFyaWFibGVzIGdyb3VwZWQgdG8gZGlmZmVyZW50IHN0cnVjdHVyZXMuICovCisJc3RydWN0IGdlbmVyaWNfaGVhZGVyIGdlbmVyaWM7CisJc3RydWN0IG1haW5faGVhZGVyIG1haW47CisJc3RydWN0IGNvbXBfc3RhdGUgY3N0YXRlOworCXN0cnVjdCBmaWxlX2hlYWRlciBmaWxlOworCXN0cnVjdCBiaXRfcmVhZGVyIGJpdHM7CisJc3RydWN0IG11bHRpdm9sdW1lIHZvbDsKKworCS8qIFRoZSBoZWFkZXIgb2YgY3VycmVudGx5IHByb2Nlc3NlZCBSQVJ2NSBibG9jay4gVXNlZCBpbiBtYWluCisJICogZGVjb21wcmVzc2lvbiBsb2dpYyBsb29wLiAqLworCXN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciBsYXN0X2Jsb2NrX2hkcjsKK307CisKKy8qIEZvcndhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAqLworCitzdGF0aWMgdm9pZCByYXI1X3NpZ25hdHVyZShjaGFyICpidWYpOworc3RhdGljIGludCB2ZXJpZnlfZ2xvYmFsX2NoZWNrc3VtcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKTsKK3N0YXRpYyBpbnQgcmFyNV9yZWFkX2RhdGFfc2tpcChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphKTsKK3N0YXRpYyBpbnQgcHVzaF9kYXRhX3JlYWR5KHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisJY29uc3QgdWludDhfdCogYnVmLCBzaXplX3Qgc2l6ZSwgaW50NjRfdCBvZmZzZXQpOworCisvKiBDREVfeHh4ID0gQ2lyY3VsYXIgRG91YmxlIEVuZGVkIChRdWV1ZSkgcmV0dXJuIHZhbHVlcy4gKi8KK2VudW0gQ0RFX1JFVFVSTl9WQUxVRVMgeworCUNERV9PSywgQ0RFX0FMTE9DLCBDREVfUEFSQU0sIENERV9PVVRfT0ZfQk9VTkRTLAorfTsKKworLyogQ2xlYXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIGNpcmN1bGFyIGRlcXVlLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX2NsZWFyKHN0cnVjdCBjZGVxdWUqIGQpIHsKKwlkLT5zaXplID0gMDsKKwlkLT5iZWdfcG9zID0gMDsKKwlkLT5lbmRfcG9zID0gMDsKK30KKworLyogQ3JlYXRlcyBhIG5ldyBjaXJjdWxhciBkZXF1ZSBvYmplY3QuIENhcGFjaXR5IG11c3QgYmUgcG93ZXIgb2YgMjogOCwgMTYsIDMyLAorICogNjQsIDI1NiwgZXRjLiBXaGVuIHRoZSB1c2VyIHdpbGwgYWRkIGFub3RoZXIgaXRlbSBhYm92ZSBjdXJyZW50IGNhcGFjaXR5LAorICogdGhlIGNpcmN1bGFyIGRlcXVlIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGRlc3QgZW50cnkuICovCitzdGF0aWMgaW50IGNkZXF1ZV9pbml0KHN0cnVjdCBjZGVxdWUqIGQsIGludCBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMikgeworCWlmKGQgPT0gTlVMTCB8fCBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMiA9PSAwKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJZC0+Y2FwX21hc2sgPSBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMiAtIDE7CisJZC0+YXJyID0gTlVMTDsKKworCWlmKChtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMiAmIGQtPmNhcF9tYXNrKSAhPSAwKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJY2RlcXVlX2NsZWFyKGQpOworCWQtPmFyciA9IG1hbGxvYyhzaXplb2Yodm9pZCopICogbWF4X2NhcGFjaXR5X3Bvd2VyX29mXzIpOworCisJcmV0dXJuIGQtPmFyciA/IENERV9PSyA6IENERV9BTExPQzsKK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgKG5vdCBjYXBhY2l0eSkgb2YgY2lyY3VsYXIgZGVxdWUgYGRgLiAqLworc3RhdGljIHNpemVfdCBjZGVxdWVfc2l6ZShzdHJ1Y3QgY2RlcXVlKiBkKSB7CisJcmV0dXJuIGQtPnNpemU7Cit9CisKKy8qIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBjaXJjdWxhciBkZXF1ZS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGRvZXNuJ3QgcGVyZm9ybSBhbnkgYm91bmRzIGNoZWNraW5nLiBJZiB5b3UgbmVlZCBib3VuZHMgY2hlY2tpbmcsIHVzZQorICogYGNkZXF1ZV9mcm9udCgpYCBmdW5jdGlvbiBpbnN0ZWFkLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX2Zyb250X2Zhc3Qoc3RydWN0IGNkZXF1ZSogZCwgdm9pZCoqIHZhbHVlKSB7CisJKnZhbHVlID0gKHZvaWQqKSBkLT5hcnJbZC0+YmVnX3Bvc107Cit9CisKKy8qIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBjaXJjdWxhciBkZXF1ZS4gVGhpcyBmdW5jdGlvbgorICogcGVyZm9ybXMgYm91bmRzIGNoZWNraW5nLiAqLworc3RhdGljIGludCBjZGVxdWVfZnJvbnQoc3RydWN0IGNkZXF1ZSogZCwgdm9pZCoqIHZhbHVlKSB7CisJaWYoZC0+c2l6ZSA+IDApIHsKKwkJY2RlcXVlX2Zyb250X2Zhc3QoZCwgdmFsdWUpOworCQlyZXR1cm4gQ0RFX09LOworCX0gZWxzZQorCQlyZXR1cm4gQ0RFX09VVF9PRl9CT1VORFM7Cit9CisKKy8qIFB1c2hlcyBhIG5ldyBlbGVtZW50IGludG8gdGhlIGVuZCBvZiB0aGlzIGNpcmN1bGFyIGRlcXVlIG9iamVjdC4gSWYgY3VycmVudAorICogc2l6ZSB3aWxsIGV4Y2VlZCBjYXBhY2l0eSwgdGhlIG9sZGVzdCBlbGVtZW50IHdpbGwgYmUgb3ZlcndyaXR0ZW4uICovCitzdGF0aWMgaW50IGNkZXF1ZV9wdXNoX2JhY2soc3RydWN0IGNkZXF1ZSogZCwgdm9pZCogaXRlbSkgeworCWlmKGQgPT0gTlVMTCkKKwkJcmV0dXJuIENERV9QQVJBTTsKKworCWlmKGQtPnNpemUgPT0gZC0+Y2FwX21hc2sgKyAxKQorCQlyZXR1cm4gQ0RFX09VVF9PRl9CT1VORFM7CisKKwlkLT5hcnJbZC0+ZW5kX3Bvc10gPSAoc2l6ZV90KSBpdGVtOworCWQtPmVuZF9wb3MgPSAoZC0+ZW5kX3BvcyArIDEpICYgZC0+Y2FwX21hc2s7CisJZC0+c2l6ZSsrOworCisJcmV0dXJuIENERV9PSzsKK30KKworLyogUG9wcyBhIGZyb250IGVsZW1lbnQgb2YgdGhpcyBjaXJjdWxhciBkZXF1ZSBvYmplY3QgYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHBlcmZvcm0gYW55IGJvdW5kcyBjaGVja2luZy4gKi8KK3N0YXRpYyB2b2lkIGNkZXF1ZV9wb3BfZnJvbnRfZmFzdChzdHJ1Y3QgY2RlcXVlKiBkLCB2b2lkKiogdmFsdWUpIHsKKwkqdmFsdWUgPSAodm9pZCopIGQtPmFycltkLT5iZWdfcG9zXTsKKwlkLT5iZWdfcG9zID0gKGQtPmJlZ19wb3MgKyAxKSAmIGQtPmNhcF9tYXNrOworCWQtPnNpemUtLTsKK30KKworLyogUG9wcyBhIGZyb250IGVsZW1lbnQgb2YgdGhpcyBjaXJjdWxhciBkZXF1ZSBvYmplY3QgYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcuICovCitzdGF0aWMgaW50IGNkZXF1ZV9wb3BfZnJvbnQoc3RydWN0IGNkZXF1ZSogZCwgdm9pZCoqIHZhbHVlKSB7CisJaWYoIWQgfHwgIXZhbHVlKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJaWYoZC0+c2l6ZSA9PSAwKQorCQlyZXR1cm4gQ0RFX09VVF9PRl9CT1VORFM7CisKKwljZGVxdWVfcG9wX2Zyb250X2Zhc3QoZCwgdmFsdWUpOworCXJldHVybiBDREVfT0s7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNhc3QgZmlsdGVyX2luZm8qKiB0byB2b2lkICoqLiAqLworc3RhdGljIHZvaWQqKiBjZGVxdWVfZmlsdGVyX3Aoc3RydWN0IGZpbHRlcl9pbmZvKiogZikgeworCXJldHVybiAodm9pZCoqKSAoc2l6ZV90KSBmOworfQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjYXN0IGZpbHRlcl9pbmZvKiB0byB2b2lkICouICovCitzdGF0aWMgdm9pZCogY2RlcXVlX2ZpbHRlcihzdHJ1Y3QgZmlsdGVyX2luZm8qIGYpIHsKKwlyZXR1cm4gKHZvaWQqKikgKHNpemVfdCkgZjsKK30KKworLyogRGVzdHJveXMgdGhpcyBjaXJjdWxhciBkZXF1ZSBvYmplY3QuIERlYWxsb2NhdGVzIHRoZSBtZW1vcnkgb2YgdGhlCisgKiBjb2xsZWN0aW9uIGJ1ZmZlciwgYnV0IGRvZXNuJ3QgZGVhbGxvY2F0ZSB0aGUgbWVtb3J5IG9mIGFueSBwb2ludGVyIHBhc3NlZAorICogdG8gdGhpcyBkZXF1ZSBhcyBhIHZhbHVlLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX2ZyZWUoc3RydWN0IGNkZXF1ZSogZCkgeworCWlmKCFkKQorCQlyZXR1cm47CisKKwlpZighZC0+YXJyKQorCQlyZXR1cm47CisKKwlmcmVlKGQtPmFycik7CisKKwlkLT5hcnIgPSBOVUxMOworCWQtPmJlZ19wb3MgPSAtMTsKKwlkLT5lbmRfcG9zID0gLTE7CisJZC0+Y2FwX21hc2sgPSAwOworfQorCitzdGF0aWMgaW5saW5lCit1aW50OF90IGJmX2JpdF9zaXplKGNvbnN0IHN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciogaGRyKSB7CisJcmV0dXJuIGhkci0+YmxvY2tfZmxhZ3NfdTggJiA3OworfQorCitzdGF0aWMgaW5saW5lCit1aW50OF90IGJmX2J5dGVfY291bnQoY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIpIHsKKwlyZXR1cm4gKGhkci0+YmxvY2tfZmxhZ3NfdTggPj4gMykgJiA3OworfQorCitzdGF0aWMgaW5saW5lCit1aW50OF90IGJmX2lzX3RhYmxlX3ByZXNlbnQoY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIpIHsKKwlyZXR1cm4gKGhkci0+YmxvY2tfZmxhZ3NfdTggPj4gNykgJiAxOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByYXI1KiBnZXRfY29udGV4dChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJcmV0dXJuIChzdHJ1Y3QgcmFyNSopIGEtPmZvcm1hdC0+ZGF0YTsKK30KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHVzZWQgYnkgZmlsdGVyIGltcGxlbWVudGF0aW9ucy4gKi8KK3N0YXRpYyB2b2lkIGNpcmN1bGFyX21lbWNweSh1aW50OF90KiBkc3QsIHVpbnQ4X3QqIHdpbmRvdywgY29uc3QgdWludDY0X3QgbWFzaywKKyAgICBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCkKK3sKKwlpZigoc3RhcnQgJiBtYXNrKSA+IChlbmQgJiBtYXNrKSkgeworCQlzc2l6ZV90IGxlbjEgPSBtYXNrICsgMSAtIChzdGFydCAmIG1hc2spOworCQlzc2l6ZV90IGxlbjIgPSBlbmQgJiBtYXNrOworCisJCW1lbWNweShkc3QsICZ3aW5kb3dbc3RhcnQgJiBtYXNrXSwgbGVuMSk7CisJCW1lbWNweShkc3QgKyBsZW4xLCB3aW5kb3csIGxlbjIpOworCX0gZWxzZSB7CisJCW1lbWNweShkc3QsICZ3aW5kb3dbc3RhcnQgJiBtYXNrXSwgKHNpemVfdCkgKGVuZCAtIHN0YXJ0KSk7CisJfQorfQorCitzdGF0aWMgdWludDMyX3QgcmVhZF9maWx0ZXJfZGF0YShzdHJ1Y3QgcmFyNSogcmFyLCB1aW50MzJfdCBvZmZzZXQpIHsKKwl1aW50OF90IGxpbmVhcl9idWZbNF07CisJY2lyY3VsYXJfbWVtY3B5KGxpbmVhcl9idWYsIHJhci0+Y3N0YXRlLndpbmRvd19idWYsCisJICAgIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrLCBvZmZzZXQsIG9mZnNldCArIDQpOworCXJldHVybiBhcmNoaXZlX2xlMzJkZWMobGluZWFyX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ZpbHRlcl9kYXRhKHN0cnVjdCByYXI1KiByYXIsIHVpbnQzMl90IG9mZnNldCwKKyAgICB1aW50MzJfdCB2YWx1ZSkKK3sKKwlhcmNoaXZlX2xlMzJlbmMoJnJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZltvZmZzZXRdLCB2YWx1ZSk7Cit9CisKKy8qIEFsbG9jYXRlcyBhIG5ldyBmaWx0ZXIgZGVzY3JpcHRvciBhbmQgYWRkcyBpdCB0byB0aGUgZmlsdGVyIGFycmF5LiAqLworc3RhdGljIHN0cnVjdCBmaWx0ZXJfaW5mbyogYWRkX25ld19maWx0ZXIoc3RydWN0IHJhcjUqIHJhcikgeworCXN0cnVjdCBmaWx0ZXJfaW5mbyogZiA9CisJCShzdHJ1Y3QgZmlsdGVyX2luZm8qKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBmaWx0ZXJfaW5mbykpOworCisJaWYoIWYpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2RlcXVlX3B1c2hfYmFjaygmcmFyLT5jc3RhdGUuZmlsdGVycywgY2RlcXVlX2ZpbHRlcihmKSk7CisJcmV0dXJuIGY7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2RlbHRhX2ZpbHRlcihzdHJ1Y3QgcmFyNSogcmFyLCBzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdCkgeworCWludCBpOworCXNzaXplX3QgZGVzdF9wb3MsIHNyY19wb3MgPSAwOworCisJZm9yKGkgPSAwOyBpIDwgZmx0LT5jaGFubmVsczsgaSsrKSB7CisJCXVpbnQ4X3QgcHJldl9ieXRlID0gMDsKKwkJZm9yKGRlc3RfcG9zID0gaTsKKwkJCQlkZXN0X3BvcyA8IGZsdC0+YmxvY2tfbGVuZ3RoOworCQkJCWRlc3RfcG9zICs9IGZsdC0+Y2hhbm5lbHMpCisJCXsKKwkJCXVpbnQ4X3QgYnl0ZTsKKworCQkJYnl0ZSA9IHJhci0+Y3N0YXRlLndpbmRvd19idWZbCisJCQkgICAgKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQgKworCQkJICAgIHNyY19wb3MpICYgcmFyLT5jc3RhdGUud2luZG93X21hc2tdOworCisJCQlwcmV2X2J5dGUgLT0gYnl0ZTsKKwkJCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZltkZXN0X3Bvc10gPSBwcmV2X2J5dGU7CisJCQlzcmNfcG9zKys7CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBydW5fZThlOV9maWx0ZXIoc3RydWN0IHJhcjUqIHJhciwgc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQsCisJCWludCBleHRlbmRlZCkKK3sKKwljb25zdCB1aW50MzJfdCBmaWxlX3NpemUgPSAweDEwMDAwMDA7CisJc3NpemVfdCBpOworCisJY2lyY3VsYXJfbWVtY3B5KHJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiwKKwkgICAgcmFyLT5jc3RhdGUud2luZG93X2J1ZiwgcmFyLT5jc3RhdGUud2luZG93X21hc2ssCisJICAgIHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQsCisJICAgIHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQgKyBmbHQtPmJsb2NrX2xlbmd0aCk7CisKKwlmb3IoaSA9IDA7IGkgPCBmbHQtPmJsb2NrX2xlbmd0aCAtIDQ7KSB7CisJCXVpbnQ4X3QgYiA9IHJhci0+Y3N0YXRlLndpbmRvd19idWZbCisJCSAgICAocmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArCisJCSAgICBpKyspICYgcmFyLT5jc3RhdGUud2luZG93X21hc2tdOworCisJCS8qCisJCSAqIDB4RTggPSB4ODYncyBjYWxsIDxyZWxhdGl2ZV9hZGRyX3VpbnQzMj4gKGZ1bmN0aW9uIGNhbGwpCisJCSAqIDB4RTkgPSB4ODYncyBqbXAgPHJlbGF0aXZlX2FkZHJfdWludDMyPiAodW5jb25kaXRpb25hbCBqdW1wKQorCQkgKi8KKwkJaWYoYiA9PSAweEU4IHx8IChleHRlbmRlZCAmJiBiID09IDB4RTkpKSB7CisKKwkJCXVpbnQzMl90IGFkZHI7CisJCQl1aW50MzJfdCBvZmZzZXQgPSAoaSArIGZsdC0+YmxvY2tfc3RhcnQpICUgZmlsZV9zaXplOworCisJCQlhZGRyID0gcmVhZF9maWx0ZXJfZGF0YShyYXIsCisJCQkgICAgKHVpbnQzMl90KShyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCQkJICAgIGZsdC0+YmxvY2tfc3RhcnQgKyBpKSAmIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrKTsKKworCQkJaWYoYWRkciAmIDB4ODAwMDAwMDApIHsKKwkJCQlpZigoKGFkZHIgKyBvZmZzZXQpICYgMHg4MDAwMDAwMCkgPT0gMCkgeworCQkJCQl3cml0ZV9maWx0ZXJfZGF0YShyYXIsICh1aW50MzJfdClpLAorCQkJCQkgICAgYWRkciArIGZpbGVfc2l6ZSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZigoYWRkciAtIGZpbGVfc2l6ZSkgJiAweDgwMDAwMDAwKSB7CisJCQkJCXVpbnQzMl90IG5hZGRyID0gYWRkciAtIG9mZnNldDsKKwkJCQkJd3JpdGVfZmlsdGVyX2RhdGEocmFyLCAodWludDMyX3QpaSwKKwkJCQkJICAgIG5hZGRyKTsKKwkJCQl9CisJCQl9CisKKwkJCWkgKz0gNDsKKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJ1bl9hcm1fZmlsdGVyKHN0cnVjdCByYXI1KiByYXIsIHN0cnVjdCBmaWx0ZXJfaW5mbyogZmx0KSB7CisJc3NpemVfdCBpID0gMDsKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwljaXJjdWxhcl9tZW1jcHkocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmLAorCSAgICByYXItPmNzdGF0ZS53aW5kb3dfYnVmLCByYXItPmNzdGF0ZS53aW5kb3dfbWFzaywKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCwKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArIGZsdC0+YmxvY2tfbGVuZ3RoKTsKKworCWZvcihpID0gMDsgaSA8IGZsdC0+YmxvY2tfbGVuZ3RoIC0gMzsgaSArPSA0KSB7CisJCXVpbnQ4X3QqIGIgPSAmcmFyLT5jc3RhdGUud2luZG93X2J1ZlsKKwkJICAgIChyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCQkgICAgZmx0LT5ibG9ja19zdGFydCArIGkgKyAzKSAmIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrXTsKKworCQlpZigqYiA9PSAweEVCKSB7CisJCQkvKiAweEVCID0gQVJNJ3MgQkwgKGJyYW5jaCArIGxpbmspIGluc3RydWN0aW9uLiAqLworCQkJb2Zmc2V0ID0gcmVhZF9maWx0ZXJfZGF0YShyYXIsCisJCQkgICAgKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQgKyBpKSAmCisJCQkgICAgIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrKSAmIDB4MDBmZmZmZmY7CisKKwkJCW9mZnNldCAtPSAodWludDMyX3QpICgoaSArIGZsdC0+YmxvY2tfc3RhcnQpIC8gNCk7CisJCQlvZmZzZXQgPSAob2Zmc2V0ICYgMHgwMGZmZmZmZikgfCAweGViMDAwMDAwOworCQkJd3JpdGVfZmlsdGVyX2RhdGEocmFyLCAodWludDMyX3QpaSwgb2Zmc2V0KTsKKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJ1bl9maWx0ZXIoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQpIHsKKwlpbnQgcmV0OworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWZyZWUocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmKTsKKworCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiA9IG1hbGxvYyhmbHQtPmJsb2NrX2xlbmd0aCk7CisJaWYoIXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZikgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsdGVyIGRhdGEuIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXN3aXRjaChmbHQtPnR5cGUpIHsKKwkJY2FzZSBGSUxURVJfREVMVEE6CisJCQlyZXQgPSBydW5fZGVsdGFfZmlsdGVyKHJhciwgZmx0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRklMVEVSX0U4OgorCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBGSUxURVJfRThFOToKKwkJCXJldCA9IHJ1bl9lOGU5X2ZpbHRlcihyYXIsIGZsdCwKKwkJCSAgICBmbHQtPnR5cGUgPT0gRklMVEVSX0U4RTkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGSUxURVJfQVJNOgorCQkJcmV0ID0gcnVuX2FybV9maWx0ZXIocmFyLCBmbHQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlVuc3VwcG9ydGVkIGZpbHRlciB0eXBlOiAweCV4IiwgZmx0LT50eXBlKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCS8qIEZpbHRlciBoYXMgZmFpbGVkLiAqLworCQlyZXR1cm4gcmV0OworCX0KKworCWlmKEFSQ0hJVkVfT0sgIT0gcHVzaF9kYXRhX3JlYWR5KGEsIHJhciwgcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmLAorCSAgICBmbHQtPmJsb2NrX2xlbmd0aCwgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIpKQorCXsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJTdGFjayBvdmVyZmxvdyB3aGVuIHN1Ym1pdHRpbmcgdW5wYWNrZWQgZGF0YSIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyICs9IGZsdC0+YmxvY2tfbGVuZ3RoOworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBUaGUgYHB1c2hfZGF0YWAgZnVuY3Rpb24gc3VibWl0cyB0aGUgc2VsZWN0ZWQgZGF0YSByYW5nZSB0byB0aGUgdXNlci4KKyAqIE5leHQgY2FsbCBvZiBgdXNlX2RhdGFgIHdpbGwgdXNlIHRoZSBwb2ludGVyLCBzaXplIGFuZCBvZmZzZXQgYXJndW1lbnRzCisgKiB0aGF0IGFyZSBzcGVjaWZpZWQgaGVyZS4gVGhlc2UgYXJndW1lbnRzIGFyZSBwdXNoZWQgdG8gdGhlIEZJRk8gc3RhY2sgaGVyZSwKKyAqIGFuZCBwb3BwZWQgZnJvbSB0aGUgc3RhY2sgYnkgdGhlIGB1c2VfZGF0YWAgZnVuY3Rpb24uICovCitzdGF0aWMgdm9pZCBwdXNoX2RhdGEoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBjb25zdCB1aW50OF90KiBidWYsIGludDY0X3QgaWR4X2JlZ2luLCBpbnQ2NF90IGlkeF9lbmQpCit7CisJY29uc3QgdWludDY0X3Qgd21hc2sgPSByYXItPmNzdGF0ZS53aW5kb3dfbWFzazsKKwljb25zdCBzc2l6ZV90IHNvbGlkX3dyaXRlX3B0ciA9IChyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCSAgICByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cikgJiB3bWFzazsKKworCWlkeF9iZWdpbiArPSByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQ7CisJaWR4X2VuZCArPSByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQ7CisKKwkvKiBDaGVjayBpZiBvdXIgdW5wYWNrZWQgZGF0YSBpcyB3cmFwcGVkIGluc2lkZSB0aGUgd2luZG93IGNpcmN1bGFyCisJICogYnVmZmVyLiAgSWYgaXQncyBub3Qgd3JhcHBlZCwgaXQgY2FuIGJlIGNvcGllZCBvdXQgYnkgdXNpbmcKKwkgKiBhIHNpbmdsZSBtZW1jcHksIGJ1dCB3aGVuIGl0J3Mgd3JhcHBlZCwgd2UgbmVlZCB0byBjb3B5IHRoZSBmaXJzdAorCSAqIHBhcnQgd2l0aCBvbmUgbWVtY3B5LCBhbmQgdGhlIHNlY29uZCBwYXJ0IHdpdGggYW5vdGhlciBtZW1jcHkuICovCisKKwlpZigoaWR4X2JlZ2luICYgd21hc2spID4gKGlkeF9lbmQgJiB3bWFzaykpIHsKKwkJLyogVGhlIGRhdGEgaXMgd3JhcHBlZCAoYmVnaW4gb2Zmc2V0IHNpcyBiaWdnZXIgdGhhbiBlbmQKKwkJICogb2Zmc2V0KS4gKi8KKwkJY29uc3Qgc3NpemVfdCBmcmFnMV9zaXplID0gcmFyLT5jc3RhdGUud2luZG93X3NpemUgLQorCQkgICAgKGlkeF9iZWdpbiAmIHdtYXNrKTsKKwkJY29uc3Qgc3NpemVfdCBmcmFnMl9zaXplID0gaWR4X2VuZCAmIHdtYXNrOworCisJCS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGJ1ZmZlciBmaXJzdC4gKi8KKwkJcHVzaF9kYXRhX3JlYWR5KGEsIHJhciwgYnVmICsgc29saWRfd3JpdGVfcHRyLCBmcmFnMV9zaXplLAorCQkgICAgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIpOworCisJCS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBidWZmZXIuICovCisJCXB1c2hfZGF0YV9yZWFkeShhLCByYXIsIGJ1ZiwgZnJhZzJfc2l6ZSwKKwkJICAgIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyICsgZnJhZzFfc2l6ZSk7CisKKwkJcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgKz0gZnJhZzFfc2l6ZSArIGZyYWcyX3NpemU7CisJfSBlbHNlIHsKKwkJLyogRGF0YSBpcyBub3Qgd3JhcHBlZCwgc28gd2UgY2FuIGp1c3QgdXNlIG9uZSBjYWxsIHRvIGNvcHkgdGhlCisJCSAqIGRhdGEuICovCisJCXB1c2hfZGF0YV9yZWFkeShhLCByYXIsCisJCSAgICBidWYgKyBzb2xpZF93cml0ZV9wdHIsIChpZHhfZW5kIC0gaWR4X2JlZ2luKSAmIHdtYXNrLAorCQkgICAgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIpOworCisJCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyICs9IGlkeF9lbmQgLSBpZHhfYmVnaW47CisJfQorfQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IHN1Ym1pdHMgdGhlIGRhdGEgdG8gdGhlIHVzZXIuIEl0IHVzZXMgdGhlCisgKiB1bnBhY2sgd2luZG93IGJ1ZmZlciBhcyBhIHNvdXJjZSBsb2NhdGlvbi4gKi8KK3N0YXRpYyB2b2lkIHB1c2hfd2luZG93X2RhdGEoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBpbnQ2NF90IGlkeF9iZWdpbiwgaW50NjRfdCBpZHhfZW5kKQoreworCXB1c2hfZGF0YShhLCByYXIsIHJhci0+Y3N0YXRlLndpbmRvd19idWYsIGlkeF9iZWdpbiwgaWR4X2VuZCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZmlsdGVycyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQ7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCWludCByZXQ7CisKKwlyYXItPmNzdGF0ZS5hbGxfZmlsdGVyc19hcHBsaWVkID0gMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZmlsdGVyIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb3VyIGRhdGEuIFRoZSBkYXRhCisJICogbmVlZHMgdG8gYmUgZnVsbHkgdW5wYWNrZWQgYmVmb3JlIHRoZSBmaWx0ZXIgY2FuIGJlIHJ1bi4gKi8KKwlpZihDREVfT0sgPT0gY2RlcXVlX2Zyb250KCZyYXItPmNzdGF0ZS5maWx0ZXJzLAorCSAgICBjZGVxdWVfZmlsdGVyX3AoJmZsdCkpKSB7CisJCS8qIENoZWNrIGlmIG91ciB1bnBhY2tlZCBkYXRhIGZ1bGx5IGNvdmVycyB0aGlzIGZpbHRlcidzCisJCSAqIHJhbmdlLiAqLworCQlpZihyYXItPmNzdGF0ZS53cml0ZV9wdHIgPiBmbHQtPmJsb2NrX3N0YXJ0ICYmCisJCSAgICByYXItPmNzdGF0ZS53cml0ZV9wdHIgPj0gZmx0LT5ibG9ja19zdGFydCArCisJCSAgICBmbHQtPmJsb2NrX2xlbmd0aCkgeworCQkJLyogQ2hlY2sgaWYgd2UgaGF2ZSBzb21lIGRhdGEgcGVuZGluZyB0byBiZSB3cml0dGVuCisJCQkgKiByaWdodCBiZWZvcmUgdGhlIGZpbHRlcidzIHN0YXJ0IG9mZnNldC4gKi8KKwkJCWlmKHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID09IGZsdC0+YmxvY2tfc3RhcnQpIHsKKwkJCQkvKiBSdW4gdGhlIGZpbHRlciBzcGVjaWZpZWQgYnkgZGVzY3JpcHRvcgorCQkJCSAqIGBmbHRgLiAqLworCQkJCXJldCA9IHJ1bl9maWx0ZXIoYSwgZmx0KTsKKwkJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCQkvKiBGaWx0ZXIgZmFpbHVyZSwgcmV0dXJuIGVycm9yLiAqLworCQkJCQlyZXR1cm4gcmV0OworCQkJCX0KKworCQkJCS8qIEZpbHRlciBkZXNjcmlwdG9yIHdvbid0IGJlIG5lZWRlZCBhbnltb3JlCisJCQkJICogYWZ0ZXIgaXQncyB1c2VkLCAqIHNvIHJlbW92ZSBpdCBmcm9tIHRoZQorCQkJCSAqIGZpbHRlciBsaXN0IGFuZCBmcmVlIGl0cyBtZW1vcnkuICovCisJCQkJKHZvaWQpIGNkZXF1ZV9wb3BfZnJvbnQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsCisJCQkJICAgIGNkZXF1ZV9maWx0ZXJfcCgmZmx0KSk7CisKKwkJCQlmcmVlKGZsdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIFdlIGNhbid0IHJ1biBmaWx0ZXJzIHlldCwgZHVtcCB0aGUgbWVtb3J5CisJCQkJICogcmlnaHQgYmVmb3JlIHRoZSBmaWx0ZXIuICovCisJCQkJcHVzaF93aW5kb3dfZGF0YShhLCByYXIsCisJCQkJICAgIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyLAorCQkJCSAgICBmbHQtPmJsb2NrX3N0YXJ0KTsKKwkJCX0KKworCQkJLyogUmV0dXJuICdmaWx0ZXIgYXBwbGllZCBvciBub3QgbmVlZGVkJyBzdGF0ZSB0byB0aGUKKwkJCSAqIGNhbGxlci4gKi8KKwkJCXJldHVybiBBUkNISVZFX1JFVFJZOworCQl9CisJfQorCisJcmFyLT5jc3RhdGUuYWxsX2ZpbHRlcnNfYXBwbGllZCA9IDE7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3RfY2FjaGVfcHVzaChzdHJ1Y3QgcmFyNSogcmFyLCBpbnQgdmFsdWUpIHsKKwlpbnQqIHEgPSByYXItPmNzdGF0ZS5kaXN0X2NhY2hlOworCisJcVszXSA9IHFbMl07CisJcVsyXSA9IHFbMV07CisJcVsxXSA9IHFbMF07CisJcVswXSA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IGRpc3RfY2FjaGVfdG91Y2goc3RydWN0IHJhcjUqIHJhciwgaW50IGlkeCkgeworCWludCogcSA9IHJhci0+Y3N0YXRlLmRpc3RfY2FjaGU7CisJaW50IGksIGRpc3QgPSBxW2lkeF07CisKKwlmb3IoaSA9IGlkeDsgaSA+IDA7IGktLSkKKwkJcVtpXSA9IHFbaSAtIDFdOworCisJcVswXSA9IGRpc3Q7CisJcmV0dXJuIGRpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZmlsdGVycyhzdHJ1Y3QgcmFyNSogcmFyKSB7CisJc3RydWN0IGNkZXF1ZSogZCA9ICZyYXItPmNzdGF0ZS5maWx0ZXJzOworCisJLyogRnJlZSBhbnkgcmVtYWluaW5nIGZpbHRlcnMuIEFsbCBmaWx0ZXJzIHNob3VsZCBiZSBuYXR1cmFsbHkKKwkgKiBjb25zdW1lZCBieSB0aGUgdW5wYWNraW5nIGZ1bmN0aW9uLCBzbyByZW1haW5pbmcgZmlsdGVycyBhZnRlcgorCSAqIHVucGFja2luZyBub3JtYWxseSBtZWFuIHRoYXQgdW5wYWNraW5nIHdhc24ndCBzdWNjZXNzZnVsLgorCSAqIEJ1dCBzdGlsbCBvZiBjb3Vyc2Ugd2Ugc2hvdWxkbid0IGxlYWsgbWVtb3J5IGluIHN1Y2ggY2FzZS4gKi8KKworCS8qIGNkZXF1ZV9zaXplKCkgaXMgYSBmYXN0IG9wZXJhdGlvbiwgc28gd2UgY2FuIHVzZSBpdCBhcyBhIGxvb3AKKwkgKiBleHByZXNzaW9uLiAqLworCXdoaWxlKGNkZXF1ZV9zaXplKGQpID4gMCkgeworCQlzdHJ1Y3QgZmlsdGVyX2luZm8qIGYgPSBOVUxMOworCisJCS8qIFBvcF9mcm9udCB3aWxsIGFsc28gZGVjcmVhc2UgdGhlIGNvbGxlY3Rpb24ncyBzaXplLiAqLworCQlpZiAoQ0RFX09LID09IGNkZXF1ZV9wb3BfZnJvbnQoZCwgY2RlcXVlX2ZpbHRlcl9wKCZmKSkpCisJCQlmcmVlKGYpOworCX0KKworCWNkZXF1ZV9jbGVhcihkKTsKKworCS8qIEFsc28gY2xlYXIgb3V0IHRoZSB2YXJpYWJsZXMgbmVlZGVkIGZvciBzYW5pdHkgY2hlY2tpbmcuICovCisJcmFyLT5jc3RhdGUubGFzdF9ibG9ja19zdGFydCA9IDA7CisJcmFyLT5jc3RhdGUubGFzdF9ibG9ja19sZW5ndGggPSAwOworfQorCitzdGF0aWMgdm9pZCByZXNldF9maWxlX2NvbnRleHQoc3RydWN0IHJhcjUqIHJhcikgeworCW1lbXNldCgmcmFyLT5maWxlLCAwLCBzaXplb2YocmFyLT5maWxlKSk7CisJYmxha2Uyc3BfaW5pdCgmcmFyLT5maWxlLmIyc3RhdGUsIDMyKTsKKworCWlmKHJhci0+bWFpbi5zb2xpZCkgeworCQlyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKz0gcmFyLT5jc3RhdGUud3JpdGVfcHRyOworCX0gZWxzZSB7CisJCXJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCA9IDA7CisJfQorCisJcmFyLT5jc3RhdGUud3JpdGVfcHRyID0gMDsKKwlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciA9IDA7CisJcmFyLT5jc3RhdGUubGFzdF91bnN0b3JlX3B0ciA9IDA7CisKKwlyYXItPmZpbGUucmVkaXJfdHlwZSA9IFJFRElSX1RZUEVfTk9ORTsKKwlyYXItPmZpbGUucmVkaXJfZmxhZ3MgPSAwOworCisJZnJlZV9maWx0ZXJzKHJhcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9hcmNoaXZlX3JlYWQoc3RydWN0IGFyY2hpdmUqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfcmVhZCoqIGFyKQoreworCSphciA9IChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKikgYTsKKwlhcmNoaXZlX2NoZWNrX21hZ2ljKGEsIEFSQ0hJVkVfUkVBRF9NQUdJQywgQVJDSElWRV9TVEFURV9ORVcsCisJICAgICJhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyNSIpOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9haGVhZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzaXplX3QgaG93X21hbnksCisgICAgY29uc3QgdWludDhfdCoqIHB0cikKK3sKKwlzc2l6ZV90IGF2YWlsID0gLTE7CisJaWYoIXB0cikKKwkJcmV0dXJuIDA7CisKKwkqcHRyID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgaG93X21hbnksICZhdmFpbCk7CisJaWYoKnB0ciA9PSBOVUxMKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbnN1bWUoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgaW50NjRfdCBob3dfbWFueSkgeworCWludCByZXQ7CisKKwlyZXQgPSBob3dfbWFueSA9PSBfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIGhvd19tYW55KQorCQk/IEFSQ0hJVkVfT0sKKwkJOiBBUkNISVZFX0ZBVEFMOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBSZWFkIGEgUkFSNSB2YXJpYWJsZSBzaXplZCBudW1lcmljIHZhbHVlLiBUaGlzIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluCisgKiBgcHZhbHVlYC4gVGhlIGBwdmFsdWVfbGVuYCBhcmd1bWVudCBwb2ludHMgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZQorICogdGhlIGJ5dGUgY291bnQgdGhhdCB3YXMgY29uc3VtZWQgaW4gb3JkZXIgdG8gZGVjb2RlIHRoZSBgcHZhbHVlYCB2YWx1ZSwgcGx1cworICogb25lLgorICoKKyAqIHB2YWx1ZV9sZW4gaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBOVUxMLgorICoKKyAqIE5PVEU6IGlmIGBwdmFsdWVfbGVuYCBpcyBOT1QgTlVMTCwgdGhlIGNhbGxlciBuZWVkcyB0byBtYW51YWxseSBjb25zdW1lCisgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgYHB2YWx1ZV9sZW5gIHZhbHVlIGNvbnRhaW5zLiBJZiB0aGUgYHB2YWx1ZV9sZW5gCisgKiBpcyBOVUxMLCB0aGlzIGNvbnN1bWluZyBvcGVyYXRpb24gaXMgZG9uZSBhdXRvbWF0aWNhbGx5LgorICoKKyAqIFJldHVybnMgMSBpZiAqcHZhbHVlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZC4KKyAqIFJldHVybnMgMCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuIEluIHRoaXMgY2FzZSwgKnB2YWx1ZSBjb250YWlucyBhbgorICogICAgICAgICAgIGludmFsaWQgdmFsdWUuCisgKi8KKworc3RhdGljIGludCByZWFkX3ZhcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCB1aW50NjRfdCogcHZhbHVlLAorICAgIHVpbnQ2NF90KiBwdmFsdWVfbGVuKQoreworCXVpbnQ2NF90IHJlc3VsdCA9IDA7CisJc2l6ZV90IHNoaWZ0LCBpOworCWNvbnN0IHVpbnQ4X3QqIHA7CisJdWludDhfdCBiOworCisJLyogV2Ugd2lsbCByZWFkIG1heGltdW0gb2YgOCBieXRlcy4gV2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhlCisJICogc2l0dWF0aW9uIHRvIHJlYWQgdGhlIFJBUjUgdmFyaWFibGUtc2l6ZWQgdmFsdWUgc3RvcmVkIGF0IHRoZSBlbmQgb2YKKwkgKiB0aGUgZmlsZSwgYmVjYXVzZSBzdWNoIHNpdHVhdGlvbiB3aWxsIG5ldmVyIGhhcHBlbi4gKi8KKwlpZighcmVhZF9haGVhZChhLCA4LCAmcCkpCisJCXJldHVybiAwOworCisJZm9yKHNoaWZ0ID0gMCwgaSA9IDA7IGkgPCA4OyBpKyssIHNoaWZ0ICs9IDcpIHsKKwkJYiA9IHBbaV07CisKKwkJLyogU3RyaXAgdGhlIE1TQiBmcm9tIHRoZSBpbnB1dCBieXRlIGFuZCBhZGQgdGhlIHJlc3VsdGluZworCQkgKiBudW1iZXIgdG8gdGhlIGByZXN1bHRgLiAqLworCQlyZXN1bHQgKz0gKGIgJiAodWludDY0X3QpMHg3RikgPDwgc2hpZnQ7CisKKwkJLyogTVNCIHNldCB0byAxIG1lYW5zIHdlIG5lZWQgdG8gY29udGludWUgZGVjb2RpbmcgcHJvY2Vzcy4KKwkJICogTVNCIHNldCB0byAwIG1lYW5zIHdlJ3JlIGRvbmUuCisJCSAqCisJCSAqIFRoaXMgY29uZGl0aW9uYWwgY2hlY2tzIGZvciB0aGUgc2Vjb25kIGNhc2UuICovCisJCWlmKChiICYgMHg4MCkgPT0gMCkgeworCQkJaWYocHZhbHVlKSB7CisJCQkJKnB2YWx1ZSA9IHJlc3VsdDsKKwkJCX0KKworCQkJLyogSWYgdGhlIGNhbGxlciBoYXMgcGFzc2VkIHRoZSBgcHZhbHVlX2xlbmAgcG9pbnRlciwKKwkJCSAqIHN0b3JlIHRoZSBudW1iZXIgb2YgY29uc3VtZWQgYnl0ZXMgaW4gaXQgYW5kIGRvIE5PVAorCQkJICogY29uc3VtZSB0aG9zZSBieXRlcywgc2luY2UgdGhlIGNhbGxlciBoYXMgYWxsIHRoZQorCQkJICogaW5mb3JtYXRpb24gaXQgbmVlZHMgdG8gcGVyZm9ybSAqLworCQkJaWYocHZhbHVlX2xlbikgeworCQkJCSpwdmFsdWVfbGVuID0gMSArIGk7CisJCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSBjYWxsZXIgZGlkIG5vdCBwcm92aWRlIHRoZQorCQkJCSAqIGBwdmFsdWVfbGVuYCBwb2ludGVyLCBpdCB3aWxsIG5vdCBoYXZlIHRoZQorCQkJCSAqIHBvc3NpYmlsaXR5IHRvIGFkdmFuY2UgdGhlIGZpbGUgcG9pbnRlciwKKwkJCQkgKiBiZWNhdXNlIGl0IHdpbGwgbm90IGtub3cgaG93IG1hbnkgYnl0ZXMgaXQKKwkJCQkgKiBuZWVkcyB0byBjb25zdW1lLiBUaGlzIGlzIHdoeSB3ZSBoYW5kbGUKKwkJCQkgKiBzdWNoIHNpdHVhdGlvbiBoZXJlIGF1dG9tYXRpY2FsbHkuICovCisJCQkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIDEgKyBpKSkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEVuZCBvZiBkZWNvZGluZyBwcm9jZXNzLCByZXR1cm4gc3VjY2Vzcy4gKi8KKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogVGhlIGRlY29kZWQgdmFsdWUgdGFrZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIDggYnl0ZXMuCisJICogSXQncyBhIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCBzbyBlbmQgZGVjb2RpbmcgcHJvY2VzcyBoZXJlCisJICogZXZlbiBpZiB0aGUgZmlyc3QgYml0IG9mIGxhc3QgYnl0ZSBpcyAxLiAqLworCWlmKHB2YWx1ZSkgeworCQkqcHZhbHVlID0gcmVzdWx0OworCX0KKworCWlmKHB2YWx1ZV9sZW4pIHsKKwkJKnB2YWx1ZV9sZW4gPSA5OworCX0gZWxzZSB7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCA5KSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZWFkX3Zhcl9zaXplZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzaXplX3QqIHB2YWx1ZSwKKyAgICBzaXplX3QqIHB2YWx1ZV9sZW4pCit7CisJdWludDY0X3QgdjsKKwl1aW50NjRfdCB2X3NpemUgPSAwOworCisJY29uc3QgaW50IHJldCA9IHB2YWx1ZV9sZW4gPyByZWFkX3ZhcihhLCAmdiwgJnZfc2l6ZSkKKwkJCQkgICA6IHJlYWRfdmFyKGEsICZ2LCBOVUxMKTsKKworCWlmKHJldCA9PSAxICYmIHB2YWx1ZSkgeworCQkqcHZhbHVlID0gKHNpemVfdCkgdjsKKwl9CisKKwlpZihwdmFsdWVfbGVuKSB7CisJCS8qIFBvc3NpYmxlIGRhdGEgdHJ1bmNhdGlvbiBzaG91bGQgYmUgc2FmZS4gKi8KKwkJKnB2YWx1ZV9sZW4gPSAoc2l6ZV90KSB2X3NpemU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWFkX2JpdHNfMzIoc3RydWN0IHJhcjUqIHJhciwgY29uc3QgdWludDhfdCogcCwgdWludDMyX3QqIHZhbHVlKSB7CisJdWludDMyX3QgYml0cyA9ICgodWludDMyX3QpIHBbcmFyLT5iaXRzLmluX2FkZHJdKSA8PCAyNDsKKwliaXRzIHw9IHBbcmFyLT5iaXRzLmluX2FkZHIgKyAxXSA8PCAxNjsKKwliaXRzIHw9IHBbcmFyLT5iaXRzLmluX2FkZHIgKyAyXSA8PCA4OworCWJpdHMgfD0gcFtyYXItPmJpdHMuaW5fYWRkciArIDNdOworCWJpdHMgPDw9IHJhci0+Yml0cy5iaXRfYWRkcjsKKwliaXRzIHw9IHBbcmFyLT5iaXRzLmluX2FkZHIgKyA0XSA+PiAoOCAtIHJhci0+Yml0cy5iaXRfYWRkcik7CisJKnZhbHVlID0gYml0czsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByZWFkX2JpdHNfMTYoc3RydWN0IHJhcjUqIHJhciwgY29uc3QgdWludDhfdCogcCwgdWludDE2X3QqIHZhbHVlKSB7CisJaW50IGJpdHMgPSAoaW50KSAoKHVpbnQzMl90KSBwW3Jhci0+Yml0cy5pbl9hZGRyXSkgPDwgMTY7CisJYml0cyB8PSAoaW50KSBwW3Jhci0+Yml0cy5pbl9hZGRyICsgMV0gPDwgODsKKwliaXRzIHw9IChpbnQpIHBbcmFyLT5iaXRzLmluX2FkZHIgKyAyXTsKKwliaXRzID4+PSAoOCAtIHJhci0+Yml0cy5iaXRfYWRkcik7CisJKnZhbHVlID0gYml0cyAmIDB4ZmZmZjsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIHZvaWQgc2tpcF9iaXRzKHN0cnVjdCByYXI1KiByYXIsIGludCBiaXRzKSB7CisJY29uc3QgaW50IG5ld19iaXRzID0gcmFyLT5iaXRzLmJpdF9hZGRyICsgYml0czsKKwlyYXItPmJpdHMuaW5fYWRkciArPSBuZXdfYml0cyA+PiAzOworCXJhci0+Yml0cy5iaXRfYWRkciA9IG5ld19iaXRzICYgNzsKK30KKworLyogbiA9IHVwIHRvIDE2ICovCitzdGF0aWMgaW50IHJlYWRfY29uc3VtZV9iaXRzKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHVpbnQ4X3QqIHAsIGludCBuLAorICAgIGludCogdmFsdWUpCit7CisJdWludDE2X3QgdjsKKwlpbnQgcmV0LCBudW07CisKKwlpZihuID09IDAgfHwgbiA+IDE2KSB7CisJCS8qIFRoaXMgaXMgYSBwcm9ncmFtbWVyIGVycm9yIGFuZCBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCSAqIGluIHJ1bnRpbWUuICovCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJldCA9IHJlYWRfYml0c18xNihyYXIsIHAsICZ2KTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIHJldDsKKworCW51bSA9IChpbnQpIHY7CisJbnVtID4+PSAxNiAtIG47CisKKwlza2lwX2JpdHMocmFyLCBuKTsKKworCWlmKHZhbHVlKQorCQkqdmFsdWUgPSBudW07CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByZWFkX3UzMihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCB1aW50MzJfdCogcHZhbHVlKSB7CisJY29uc3QgdWludDhfdCogcDsKKwlpZighcmVhZF9haGVhZChhLCA0LCAmcCkpCisJCXJldHVybiAwOworCisJKnB2YWx1ZSA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKKwlyZXR1cm4gQVJDSElWRV9PSyA9PSBjb25zdW1lKGEsIDQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF91NjQoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgdWludDY0X3QqIHB2YWx1ZSkgeworCWNvbnN0IHVpbnQ4X3QqIHA7CisJaWYoIXJlYWRfYWhlYWQoYSwgOCwgJnApKQorCQlyZXR1cm4gMDsKKworCSpwdmFsdWUgPSBhcmNoaXZlX2xlNjRkZWMocCk7CisJcmV0dXJuIEFSQ0hJVkVfT0sgPT0gY29uc3VtZShhLCA4KSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGJpZF9zdGFuZGFyZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJY29uc3QgdWludDhfdCogcDsKKwljaGFyIHNpZ25hdHVyZVtzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKV07CisKKwlyYXI1X3NpZ25hdHVyZShzaWduYXR1cmUpOworCisJaWYoIXJlYWRfYWhlYWQoYSwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvciksICZwKSkKKwkJcmV0dXJuIC0xOworCisJaWYoIW1lbWNtcChzaWduYXR1cmUsIHAsIHNpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpKSkKKwkJcmV0dXJuIDMwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJhcjVfYmlkKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGludCBiZXN0X2JpZCkgeworCWludCBteV9iaWQ7CisKKwlpZihiZXN0X2JpZCA+IDMwKQorCQlyZXR1cm4gLTE7CisKKwlteV9iaWQgPSBiaWRfc3RhbmRhcmQoYSk7CisJaWYobXlfYmlkID4gLTEpIHsKKwkJcmV0dXJuIG15X2JpZDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9vcHRpb25zKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IGNoYXIgKmtleSwKKyAgICBjb25zdCBjaGFyICp2YWwpIHsKKwkodm9pZCkgYTsKKwkodm9pZCkga2V5OworCSh2b2lkKSB2YWw7CisKKwkvKiBObyBvcHRpb25zIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24uIFJldHVybiB0aGUgQVJDSElWRV9XQVJOIGNvZGUKKwkgKiB0byBzaWduYWwgdGhlIG9wdGlvbnMgc3VwZXJ2aXNvciB0aGF0IHRoZSB1bnBhY2tlciBkaWRuJ3QgaGFuZGxlCisJICogc2V0dGluZyB0aGlzIG9wdGlvbi4gKi8KKworCXJldHVybiBBUkNISVZFX1dBUk47Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0ID0gQVJDSElWRV9GT1JNQVRfUkFSX1Y1OworCWEtPmFyY2hpdmUuYXJjaGl2ZV9mb3JtYXRfbmFtZSA9ICJSQVI1IjsKK30KKworc3RhdGljIHZvaWQgaW5pdF93aW5kb3dfbWFzayhzdHJ1Y3QgcmFyNSogcmFyKSB7CisJaWYgKHJhci0+Y3N0YXRlLndpbmRvd19zaXplKQorCQlyYXItPmNzdGF0ZS53aW5kb3dfbWFzayA9IHJhci0+Y3N0YXRlLndpbmRvd19zaXplIC0gMTsKKwllbHNlCisJCXJhci0+Y3N0YXRlLndpbmRvd19tYXNrID0gMDsKK30KKworZW51bSBIRUFERVJfRkxBR1MgeworCUhGTF9FWFRSQV9EQVRBID0gMHgwMDAxLAorCUhGTF9EQVRBID0gMHgwMDAyLAorCUhGTF9TS0lQX0lGX1VOS05PV04gPSAweDAwMDQsCisJSEZMX1NQTElUX0JFRk9SRSA9IDB4MDAwOCwKKwlIRkxfU1BMSVRfQUZURVIgPSAweDAwMTAsCisJSEZMX0NISUxEID0gMHgwMDIwLAorCUhGTF9JTkhFUklURUQgPSAweDAwNDAKK307CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19tYWluX2xvY2F0b3JfZXh0cmFfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwKKyAgICBzdHJ1Y3QgcmFyNSogcmFyKQoreworCXVpbnQ2NF90IGxvY2F0b3JfZmxhZ3M7CisKKwllbnVtIExPQ0FUT1JfRkxBR1MgeworCQlRTElTVCA9IDB4MDEsIFJFQ09WRVJZID0gMHgwMiwKKwl9OworCisJaWYoIXJlYWRfdmFyKGEsICZsb2NhdG9yX2ZsYWdzLCBOVUxMKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYobG9jYXRvcl9mbGFncyAmIFFMSVNUKSB7CisJCWlmKCFyZWFkX3ZhcihhLCAmcmFyLT5xbGlzdF9vZmZzZXQsIE5VTEwpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKiBxbGlzdCBpcyBub3QgdXNlZCAqLworCX0KKworCWlmKGxvY2F0b3JfZmxhZ3MgJiBSRUNPVkVSWSkgeworCQlpZighcmVhZF92YXIoYSwgJnJhci0+cnJfb2Zmc2V0LCBOVUxMKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJLyogcnIgaXMgbm90IHVzZWQgKi8KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2V4dHJhX2hhc2goc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJc2l6ZV90IGhhc2hfdHlwZSA9IDA7CisJc2l6ZV90IHZhbHVlX2xlbjsKKworCWVudW0gSEFTSF9UWVBFIHsKKwkJQkxBS0Uyc3AgPSAweDAwCisJfTsKKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmaGFzaF90eXBlLCAmdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9sZW47CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHZhbHVlX2xlbikpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCS8qIFRoZSBmaWxlIHVzZXMgQkxBS0Uyc3AgY2hlY2tzdW0gYWxnb3JpdGhtIGluc3RlYWQgb2YgcGxhaW4gb2xkCisJICogQ1JDMzIuICovCisJaWYoaGFzaF90eXBlID09IEJMQUtFMnNwKSB7CisJCWNvbnN0IHVpbnQ4X3QqIHA7CisJCWNvbnN0IGludCBoYXNoX3NpemUgPSBzaXplb2YocmFyLT5maWxlLmJsYWtlMnNwKTsKKworCQlpZighcmVhZF9haGVhZChhLCBoYXNoX3NpemUsICZwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlyYXItPmZpbGUuaGFzX2JsYWtlMiA9IDE7CisJCW1lbWNweSgmcmFyLT5maWxlLmJsYWtlMnNwLCBwLCBoYXNoX3NpemUpOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCBoYXNoX3NpemUpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkqZXh0cmFfZGF0YV9zaXplIC09IGhhc2hfc2l6ZTsKKwl9IGVsc2UgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJVbnN1cHBvcnRlZCBoYXNoIHR5cGUgKDB4JXgpIiwgKGludCkgaGFzaF90eXBlKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyB1aW50NjRfdCB0aW1lX3dpbl90b191bml4KHVpbnQ2NF90IHdpbl90aW1lKSB7CisJY29uc3Qgc2l6ZV90IG5zX2luX3NlYyA9IDEwMDAwMDAwOworCWNvbnN0IHVpbnQ2NF90IHNlY190b191bml4ID0gMTE2NDQ0NzM2MDBMTDsKKwlyZXR1cm4gd2luX3RpbWUgLyBuc19pbl9zZWMgLSBzZWNfdG9fdW5peDsKK30KKworc3RhdGljIGludCBwYXJzZV9odGltZV9pdGVtKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGNoYXIgdW5peF90aW1lLAorICAgIHVpbnQ2NF90KiB3aGVyZSwgc3NpemVfdCogZXh0cmFfZGF0YV9zaXplKQoreworCWlmKHVuaXhfdGltZSkgeworCQl1aW50MzJfdCB0aW1lX3ZhbDsKKwkJaWYoIXJlYWRfdTMyKGEsICZ0aW1lX3ZhbCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSA0OworCQkqd2hlcmUgPSAodWludDY0X3QpIHRpbWVfdmFsOworCX0gZWxzZSB7CisJCXVpbnQ2NF90IHdpbmRvd3NfdGltZTsKKwkJaWYoIXJlYWRfdTY0KGEsICZ3aW5kb3dzX3RpbWUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCSp3aGVyZSA9IHRpbWVfd2luX3RvX3VuaXgod2luZG93c190aW1lKTsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSA4OworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfZXh0cmFfdmVyc2lvbihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJc2l6ZV90IGZsYWdzID0gMDsKKwlzaXplX3QgdmVyc2lvbiA9IDA7CisJc2l6ZV90IHZhbHVlX2xlbiA9IDA7CisJc3RydWN0IGFyY2hpdmVfc3RyaW5nIHZlcnNpb25fc3RyaW5nOworCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBuYW1lX3V0Zjhfc3RyaW5nOworCWNvbnN0IGNoYXIqIGN1cl9maWxlbmFtZTsKKworCS8qIEZsYWdzIGFyZSBpZ25vcmVkLiAqLworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZmxhZ3MsICZ2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX2xlbjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZ2ZXJzaW9uLCAmdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9sZW47CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHZhbHVlX2xlbikpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCS8qIGV4dHJhX2RhdGFfc2l6ZSBzaG91bGQgYmUgemVybyBoZXJlLiAqLworCisJY3VyX2ZpbGVuYW1lID0gYXJjaGl2ZV9lbnRyeV9wYXRobmFtZV91dGY4KGUpOworCWlmKGN1cl9maWxlbmFtZSA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiVmVyc2lvbiBlbnRyeSB3aXRob3V0IGZpbGUgbmFtZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZ2ZXJzaW9uX3N0cmluZyk7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmbmFtZV91dGY4X3N0cmluZyk7CisKKwkvKiBQcmVwYXJlIGEgOzEyMyBzdWZmaXggZm9yIHRoZSBmaWxlbmFtZSwgd2hlcmUgJzEyMycgaXMgdGhlIHZlcnNpb24KKwkgKiB2YWx1ZSBvZiB0aGlzIGZpbGUuICovCisJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmdmVyc2lvbl9zdHJpbmcsICI7JXp1IiwgdmVyc2lvbik7CisKKwkvKiBCdWlsZCB0aGUgbmV3IGZpbGVuYW1lLiAqLworCWFyY2hpdmVfc3RyY2F0KCZuYW1lX3V0Zjhfc3RyaW5nLCBjdXJfZmlsZW5hbWUpOworCWFyY2hpdmVfc3RyY2F0KCZuYW1lX3V0Zjhfc3RyaW5nLCB2ZXJzaW9uX3N0cmluZy5zKTsKKworCS8qIEFwcGx5IHRoZSBuZXcgZmlsZW5hbWUgaW50byB0aGlzIGZpbGUncyBjb250ZXh0LiAqLworCWFyY2hpdmVfZW50cnlfdXBkYXRlX3BhdGhuYW1lX3V0ZjgoZSwgbmFtZV91dGY4X3N0cmluZy5zKTsKKworCS8qIEZyZWUgYnVmZmVycy4gKi8KKwlhcmNoaXZlX3N0cmluZ19mcmVlKCZ2ZXJzaW9uX3N0cmluZyk7CisJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmbmFtZV91dGY4X3N0cmluZyk7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmlsZV9leHRyYV9odGltZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlLCBzdHJ1Y3QgcmFyNSogcmFyLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJY2hhciB1bml4X3RpbWUgPSAwOworCXNpemVfdCBmbGFncyA9IDA7CisJc2l6ZV90IHZhbHVlX2xlbjsKKworCWVudW0gSFRJTUVfRkxBR1MgeworCQlJU19VTklYICAgICAgID0gMHgwMSwKKwkJSEFTX01USU1FICAgICA9IDB4MDIsCisJCUhBU19DVElNRSAgICAgPSAweDA0LAorCQlIQVNfQVRJTUUgICAgID0gMHgwOCwKKwkJSEFTX1VOSVhfTlMgICA9IDB4MTAsCisJfTsKKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZmxhZ3MsICZ2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX2xlbjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFsdWVfbGVuKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJdW5peF90aW1lID0gZmxhZ3MgJiBJU19VTklYOworCisJaWYoZmxhZ3MgJiBIQVNfTVRJTUUpIHsKKwkJcGFyc2VfaHRpbWVfaXRlbShhLCB1bml4X3RpbWUsICZyYXItPmZpbGUuZV9tdGltZSwKKwkJICAgIGV4dHJhX2RhdGFfc2l6ZSk7CisJCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGUsIHJhci0+ZmlsZS5lX210aW1lLCAwKTsKKwl9CisKKwlpZihmbGFncyAmIEhBU19DVElNRSkgeworCQlwYXJzZV9odGltZV9pdGVtKGEsIHVuaXhfdGltZSwgJnJhci0+ZmlsZS5lX2N0aW1lLAorCQkgICAgZXh0cmFfZGF0YV9zaXplKTsKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfY3RpbWUoZSwgcmFyLT5maWxlLmVfY3RpbWUsIDApOworCX0KKworCWlmKGZsYWdzICYgSEFTX0FUSU1FKSB7CisJCXBhcnNlX2h0aW1lX2l0ZW0oYSwgdW5peF90aW1lLCAmcmFyLT5maWxlLmVfYXRpbWUsCisJCSAgICBleHRyYV9kYXRhX3NpemUpOworCQlhcmNoaXZlX2VudHJ5X3NldF9hdGltZShlLCByYXItPmZpbGUuZV9hdGltZSwgMCk7CisJfQorCisJaWYoZmxhZ3MgJiBIQVNfVU5JWF9OUykgeworCQlpZighcmVhZF91MzIoYSwgJnJhci0+ZmlsZS5lX3VuaXhfbnMpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCSpleHRyYV9kYXRhX3NpemUgLT0gNDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2V4dHJhX3JlZGlyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHN0cnVjdCByYXI1KiByYXIsIHNzaXplX3QqIGV4dHJhX2RhdGFfc2l6ZSkKK3sKKwl1aW50NjRfdCB2YWx1ZV9zaXplID0gMDsKKwlzaXplX3QgdGFyZ2V0X3NpemUgPSAwOworCWNoYXIgdGFyZ2V0X3V0ZjhfYnVmW01BWF9OQU1FX0lOX0JZVEVTXTsKKwljb25zdCB1aW50OF90KiBwOworCisJaWYoIXJlYWRfdmFyKGEsICZyYXItPmZpbGUucmVkaXJfdHlwZSwgJnZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJaWYoIXJlYWRfdmFyKGEsICZyYXItPmZpbGUucmVkaXJfZmxhZ3MsICZ2YWx1ZV9zaXplKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCl2YWx1ZV9zaXplKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCSpleHRyYV9kYXRhX3NpemUgLT0gdmFsdWVfc2l6ZTsKKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmdGFyZ2V0X3NpemUsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB0YXJnZXRfc2l6ZSArIDE7CisKKwlpZighcmVhZF9haGVhZChhLCB0YXJnZXRfc2l6ZSwgJnApKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZih0YXJnZXRfc2l6ZSA+IChNQVhfTkFNRV9JTl9DSEFSUyAtIDEpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkxpbmsgdGFyZ2V0IGlzIHRvbyBsb25nIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKHRhcmdldF9zaXplID09IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiTm8gbGluayB0YXJnZXQgc3BlY2lmaWVkIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCW1lbWNweSh0YXJnZXRfdXRmOF9idWYsIHAsIHRhcmdldF9zaXplKTsKKwl0YXJnZXRfdXRmOF9idWZbdGFyZ2V0X3NpemVdID0gMDsKKworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCl0YXJnZXRfc2l6ZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCXN3aXRjaChyYXItPmZpbGUucmVkaXJfdHlwZSkgeworCQljYXNlIFJFRElSX1RZUEVfVU5JWFNZTUxJTks6CisJCWNhc2UgUkVESVJfVFlQRV9XSU5TWU1MSU5LOgorCQkJYXJjaGl2ZV9lbnRyeV9zZXRfZmlsZXR5cGUoZSwgQUVfSUZMTkspOworCQkJYXJjaGl2ZV9lbnRyeV91cGRhdGVfc3ltbGlua191dGY4KGUsIHRhcmdldF91dGY4X2J1Zik7CisJCQlpZiAocmFyLT5maWxlLnJlZGlyX2ZsYWdzICYgUkVESVJfU1lNTElOS19JU19ESVIpIHsKKwkJCQlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUoZSwKKwkJCQkJQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSk7CisJCQl9IGVsc2UgeworCQkJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlLAorCQkJCUFFX1NZTUxJTktfVFlQRV9GSUxFKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkVESVJfVFlQRV9IQVJETElOSzoKKwkJCWFyY2hpdmVfZW50cnlfc2V0X2ZpbGV0eXBlKGUsIEFFX0lGUkVHKTsKKwkJCWFyY2hpdmVfZW50cnlfdXBkYXRlX2hhcmRsaW5rX3V0ZjgoZSwgdGFyZ2V0X3V0ZjhfYnVmKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBVbmtub3duIHJlZGlyIHR5cGUsIHNraXAgaXQuICovCisJCQlicmVhazsKKwl9CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmlsZV9leHRyYV9vd25lcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJdWludDY0X3QgZmxhZ3MgPSAwOworCXVpbnQ2NF90IHZhbHVlX3NpemUgPSAwOworCXVpbnQ2NF90IGlkID0gMDsKKwlzaXplX3QgbmFtZV9sZW4gPSAwOworCXNpemVfdCBuYW1lX3NpemUgPSAwOworCWNoYXIgbmFtZWJ1ZltPV05FUl9NQVhOQU1FTEVOXTsKKwljb25zdCB1aW50OF90KiBwOworCisJaWYoIXJlYWRfdmFyKGEsICZmbGFncywgJnZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJaWYgKChmbGFncyAmIE9XTkVSX1VTRVJfTkFNRSkgIT0gMCkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJm5hbWVfc2l6ZSwgTlVMTCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCSpleHRyYV9kYXRhX3NpemUgLT0gbmFtZV9zaXplICsgMTsKKworCQlpZighcmVhZF9haGVhZChhLCBuYW1lX3NpemUsICZwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlpZiAobmFtZV9zaXplID49IE9XTkVSX01BWE5BTUVMRU4pIHsKKwkJCW5hbWVfbGVuID0gT1dORVJfTUFYTkFNRUxFTiAtIDE7CisJCX0gZWxzZSB7CisJCQluYW1lX2xlbiA9IG5hbWVfc2l6ZTsKKwkJfQorCisJCW1lbWNweShuYW1lYnVmLCBwLCBuYW1lX2xlbik7CisJCW5hbWVidWZbbmFtZV9sZW5dID0gMDsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KW5hbWVfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfdW5hbWUoZSwgbmFtZWJ1Zik7CisJfQorCWlmICgoZmxhZ3MgJiBPV05FUl9HUk9VUF9OQU1FKSAhPSAwKSB7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmbmFtZV9zaXplLCBOVUxMKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSBuYW1lX3NpemUgKyAxOworCisJCWlmKCFyZWFkX2FoZWFkKGEsIG5hbWVfc2l6ZSwgJnApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWlmIChuYW1lX3NpemUgPj0gT1dORVJfTUFYTkFNRUxFTikgeworCQkJbmFtZV9sZW4gPSBPV05FUl9NQVhOQU1FTEVOIC0gMTsKKwkJfSBlbHNlIHsKKwkJCW5hbWVfbGVuID0gbmFtZV9zaXplOworCQl9CisKKwkJbWVtY3B5KG5hbWVidWYsIHAsIG5hbWVfbGVuKTsKKwkJbmFtZWJ1ZltuYW1lX2xlbl0gPSAwOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgKGludDY0X3QpbmFtZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlhcmNoaXZlX2VudHJ5X3NldF9nbmFtZShlLCBuYW1lYnVmKTsKKwl9CisJaWYgKChmbGFncyAmIE9XTkVSX1VTRVJfVUlEKSAhPSAwKSB7CisJCWlmKCFyZWFkX3ZhcihhLCAmaWQsICZ2YWx1ZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX3NpemU7CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfdWlkKGUsIChsYV9pbnQ2NF90KWlkKTsKKwl9CisJaWYgKChmbGFncyAmIE9XTkVSX0dST1VQX0dJRCkgIT0gMCkgeworCQlpZighcmVhZF92YXIoYSwgJmlkLCAmdmFsdWVfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCl2YWx1ZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJCWFyY2hpdmVfZW50cnlfc2V0X2dpZChlLCAobGFfaW50NjRfdClpZCk7CisJfQorCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGVhZF9maWxlX2V4dHJhKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHN0cnVjdCByYXI1KiByYXIsIHNzaXplX3QgZXh0cmFfZGF0YV9zaXplKQoreworCXNpemVfdCBleHRyYV9maWVsZF9zaXplOworCXNpemVfdCBleHRyYV9maWVsZF9pZCA9IDA7CisJaW50IHJldCA9IEFSQ0hJVkVfRkFUQUw7CisJc2l6ZV90IHZhcl9zaXplOworCisJd2hpbGUoZXh0cmFfZGF0YV9zaXplID4gMCkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX3NpemUsICZ2YXJfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJZXh0cmFfZGF0YV9zaXplIC09IHZhcl9zaXplOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFyX3NpemUpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX2lkLCAmdmFyX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWV4dHJhX2RhdGFfc2l6ZSAtPSB2YXJfc2l6ZTsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHZhcl9zaXplKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJc3dpdGNoKGV4dHJhX2ZpZWxkX2lkKSB7CisJCQljYXNlIEVYX0hBU0g6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9oYXNoKGEsIHJhciwKKwkJCQkgICAgJmV4dHJhX2RhdGFfc2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYX0hUSU1FOgorCQkJCXJldCA9IHBhcnNlX2ZpbGVfZXh0cmFfaHRpbWUoYSwgZSwgcmFyLAorCQkJCSAgICAmZXh0cmFfZGF0YV9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhfUkVESVI6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9yZWRpcihhLCBlLCByYXIsCisJCQkJICAgICZleHRyYV9kYXRhX3NpemUpOworCQkJCWJyZWFrOworCQkJY2FzZSBFWF9VT1dORVI6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9vd25lcihhLCBlLAorCQkJCSAgICAmZXh0cmFfZGF0YV9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhfVkVSU0lPTjoKKwkJCQlyZXQgPSBwYXJzZV9maWxlX2V4dHJhX3ZlcnNpb24oYSwgZSwKKwkJCQkgICAgJmV4dHJhX2RhdGFfc2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYX0NSWVBUOgorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIEVYX1NVQkRBVEE6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogU2tpcCB1bnN1cHBvcnRlZCBlbnRyeS4gKi8KKwkJCQlyZXR1cm4gY29uc3VtZShhLCBleHRyYV9kYXRhX3NpemUpOworCQl9CisJfQorCisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJLyogQXR0cmlidXRlIG5vdCBpbXBsZW1lbnRlZC4gKi8KKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2hlYWRfZmlsZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlbnRyeSwgc2l6ZV90IGJsb2NrX2ZsYWdzKQoreworCXNzaXplX3QgZXh0cmFfZGF0YV9zaXplID0gMDsKKwlzaXplX3QgZGF0YV9zaXplID0gMDsKKwlzaXplX3QgZmlsZV9mbGFncyA9IDA7CisJc2l6ZV90IGZpbGVfYXR0ciA9IDA7CisJc2l6ZV90IGNvbXByZXNzaW9uX2luZm8gPSAwOworCXNpemVfdCBob3N0X29zID0gMDsKKwlzaXplX3QgbmFtZV9zaXplID0gMDsKKwl1aW50NjRfdCB1bnBhY2tlZF9zaXplLCB3aW5kb3dfc2l6ZTsKKwl1aW50MzJfdCBtdGltZSA9IDAsIGNyYyA9IDA7CisJaW50IGNfbWV0aG9kID0gMCwgY192ZXJzaW9uID0gMDsKKwljaGFyIG5hbWVfdXRmOF9idWZbTUFYX05BTUVfSU5fQllURVNdOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKwllbnVtIEZJTEVfRkxBR1MgeworCQlESVJFQ1RPUlkgPSAweDAwMDEsIFVUSU1FID0gMHgwMDAyLCBDUkMzMiA9IDB4MDAwNCwKKwkJVU5LTk9XTl9VTlBBQ0tFRF9TSVpFID0gMHgwMDA4LAorCX07CisKKwllbnVtIEZJTEVfQVRUUlMgeworCQlBVFRSX1JFQURPTkxZID0gMHgxLCBBVFRSX0hJRERFTiA9IDB4MiwgQVRUUl9TWVNURU0gPSAweDQsCisJCUFUVFJfRElSRUNUT1JZID0gMHgxMCwKKwl9OworCisJZW51bSBDT01QX0lORk9fRkxBR1MgeworCQlTT0xJRCA9IDB4MDA0MCwKKwl9OworCisJZW51bSBIT1NUX09TIHsKKwkJSE9TVF9XSU5ET1dTID0gMCwKKwkJSE9TVF9VTklYID0gMSwKKwl9OworCisJYXJjaGl2ZV9lbnRyeV9jbGVhcihlbnRyeSk7CisKKwkvKiBEbyBub3QgcmVzZXQgZmlsZSBjb250ZXh0IGlmIHdlJ3JlIHN3aXRjaGluZyBhcmNoaXZlcy4gKi8KKwlpZighcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lKSB7CisJCXJlc2V0X2ZpbGVfY29udGV4dChyYXIpOworCX0KKworCWlmKGJsb2NrX2ZsYWdzICYgSEZMX0VYVFJBX0RBVEEpIHsKKwkJc2l6ZV90IGVkYXRhX3NpemUgPSAwOworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmVkYXRhX3NpemUsIE5VTEwpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCS8qIEludGVudGlvbmFsIHR5cGUgY2FzdCBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZC4gKi8KKwkJZXh0cmFfZGF0YV9zaXplID0gKHNzaXplX3QpIGVkYXRhX3NpemU7CisJfQorCisJaWYoYmxvY2tfZmxhZ3MgJiBIRkxfREFUQSkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmRhdGFfc2l6ZSwgTlVMTCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9IGRhdGFfc2l6ZTsKKwl9IGVsc2UgeworCQlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID0gMDsKKworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkibm8gZGF0YSBmb3VuZCBpbiBmaWxlL3NlcnZpY2UgYmxvY2siKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZmaWxlX2ZsYWdzLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfdmFyKGEsICZ1bnBhY2tlZF9zaXplLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoZmlsZV9mbGFncyAmIFVOS05PV05fVU5QQUNLRURfU0laRSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIkZpbGVzIHdpdGggdW5rbm93biB1bnBhY2tlZCBzaXplIGFyZSBub3Qgc3VwcG9ydGVkIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJhci0+ZmlsZS5kaXIgPSAodWludDhfdCkgKChmaWxlX2ZsYWdzICYgRElSRUNUT1JZKSA+IDApOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZmaWxlX2F0dHIsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihmaWxlX2ZsYWdzICYgVVRJTUUpIHsKKwkJaWYoIXJlYWRfdTMyKGEsICZtdGltZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoZmlsZV9mbGFncyAmIENSQzMyKSB7CisJCWlmKCFyZWFkX3UzMihhLCAmY3JjKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmNvbXByZXNzaW9uX2luZm8sIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwljX21ldGhvZCA9IChpbnQpIChjb21wcmVzc2lvbl9pbmZvID4+IDcpICYgMHg3OworCWNfdmVyc2lvbiA9IChpbnQpIChjb21wcmVzc2lvbl9pbmZvICYgMHgzZik7CisKKwkvKiBSQVI1IHNlZW1zIHRvIGxpbWl0IHRoZSBkaWN0aW9uYXJ5IHNpemUgdG8gNjRNQi4gKi8KKwl3aW5kb3dfc2l6ZSA9IChyYXItPmZpbGUuZGlyID4gMCkgPworCQkwIDoKKwkJZ191bnBhY2tfd2luZG93X3NpemUgPDwgKChjb21wcmVzc2lvbl9pbmZvID4+IDEwKSAmIDE1KTsKKwlyYXItPmNzdGF0ZS5tZXRob2QgPSBjX21ldGhvZDsKKwlyYXItPmNzdGF0ZS52ZXJzaW9uID0gY192ZXJzaW9uICsgNTA7CisJcmFyLT5maWxlLnNvbGlkID0gKGNvbXByZXNzaW9uX2luZm8gJiBTT0xJRCkgPiAwOworCisJLyogQXJjaGl2ZXMgd2hpY2ggZGVjbGFyZSBzb2xpZCBmaWxlcyB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgd2luZG93CisJICogYnVmZmVyIGZpcnN0IGFyZSBpbnZhbGlkLiAqLworCisJaWYocmFyLT5maWxlLnNvbGlkID4gMCAmJiByYXItPmNzdGF0ZS53aW5kb3dfYnVmID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAiRGVjbGFyZWQgc29saWQgZmlsZSwgYnV0IG5vIHdpbmRvdyBidWZmZXIgIgorCQkJCSAgImluaXRpYWxpemVkIHlldC4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogQ2hlY2sgaWYgd2luZG93X3NpemUgaXMgYSBzYW5lIHZhbHVlLiBBbHNvLCBpZiB0aGUgZmlsZSBpcyBub3QKKwkgKiBkZWNsYXJlZCBhcyBhIGRpcmVjdG9yeSwgZGlzYWxsb3cgd2luZG93X3NpemUgPT0gMC4gKi8KKwlpZih3aW5kb3dfc2l6ZSA+ICg2NCAqIDEwMjQgKiAxMDI0KSB8fAorCSAgICAocmFyLT5maWxlLmRpciA9PSAwICYmIHdpbmRvd19zaXplID09IDApKQorCXsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiRGVjbGFyZWQgZGljdGlvbmFyeSBzaXplIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKHJhci0+ZmlsZS5zb2xpZCA+IDApIHsKKwkJLyogUmUtY2hlY2sgaWYgY3VycmVudCB3aW5kb3cgc2l6ZSBpcyB0aGUgc2FtZSBhcyBwcmV2aW91cworCQkgKiB3aW5kb3cgc2l6ZSAoZm9yIHNvbGlkIGZpbGVzIG9ubHkpLiAqLworCQlpZihyYXItPmZpbGUuc29saWRfd2luZG93X3NpemUgPiAwICYmCisJCSAgICByYXItPmZpbGUuc29saWRfd2luZG93X3NpemUgIT0gKHNzaXplX3QpIHdpbmRvd19zaXplKQorCQl7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiV2luZG93IHNpemUgZm9yIHRoaXMgc29saWQgZmlsZSBkb2Vzbid0IG1hdGNoICIKKwkJCSAgICAidGhlIHdpbmRvdyBzaXplIHVzZWQgaW4gcHJldmlvdXMgc29saWQgZmlsZS4gIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCX0KKworCS8qIElmIHdlJ3JlIGN1cnJlbnRseSBzd2l0Y2hpbmcgdm9sdW1lcywgaWdub3JlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZgorCSAqIHdpbmRvd19zaXplLiAqLworCWlmKHJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSA9PSAwKSB7CisJCS8qIFZhbHVlcyB1cCB0byA2NE0gc2hvdWxkIGZpdCBpbnRvIHNzaXplX3Qgb24gZXZlcnkKKwkJICogYXJjaGl0ZWN0dXJlLiAqLworCQlyYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSA9IChzc2l6ZV90KSB3aW5kb3dfc2l6ZTsKKwl9CisKKwlpZihyYXItPmZpbGUuc29saWQgPiAwICYmIHJhci0+ZmlsZS5zb2xpZF93aW5kb3dfc2l6ZSA9PSAwKSB7CisJCS8qIFNvbGlkIGZpbGVzIGhhdmUgdG8gaGF2ZSB0aGUgc2FtZSB3aW5kb3dfc2l6ZSBhY3Jvc3MKKwkJICAgd2hvbGUgYXJjaGl2ZS4gUmVtZW1iZXIgdGhlIHdpbmRvd19zaXplIHBhcmFtZXRlcgorCQkgICBmb3IgZmlyc3Qgc29saWQgZmlsZSBmb3VuZC4gKi8KKwkJcmFyLT5maWxlLnNvbGlkX3dpbmRvd19zaXplID0gcmFyLT5jc3RhdGUud2luZG93X3NpemU7CisJfQorCisJaW5pdF93aW5kb3dfbWFzayhyYXIpOworCisJcmFyLT5maWxlLnNlcnZpY2UgPSAwOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZob3N0X29zLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoaG9zdF9vcyA9PSBIT1NUX1dJTkRPV1MpIHsKKwkJLyogSG9zdCBPUyBpcyBXaW5kb3dzICovCisKKwkJX19MQV9NT0RFX1QgbW9kZTsKKworCQlpZihmaWxlX2F0dHIgJiBBVFRSX0RJUkVDVE9SWSkgeworCQkJaWYgKGZpbGVfYXR0ciAmIEFUVFJfUkVBRE9OTFkpIHsKKwkJCQltb2RlID0gMDU1NSB8IEFFX0lGRElSOworCQkJfSBlbHNlIHsKKwkJCQltb2RlID0gMDc1NSB8IEFFX0lGRElSOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGZpbGVfYXR0ciAmIEFUVFJfUkVBRE9OTFkpIHsKKwkJCQltb2RlID0gMDQ0NCB8IEFFX0lGUkVHOworCQkJfSBlbHNlIHsKKwkJCQltb2RlID0gMDY0NCB8IEFFX0lGUkVHOworCQkJfQorCQl9CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShlbnRyeSwgbW9kZSk7CisKKwkJaWYgKGZpbGVfYXR0ciAmIChBVFRSX1JFQURPTkxZIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZU1RFTSkpIHsKKwkJCWNoYXIgKmZmbGFnc190ZXh0LCAqcHRyOworCQkJLyogYWxsb2NhdGUgZm9yICJyZG9ubHksaGlkZGVuLHN5c3RlbSwiICovCisJCQlmZmxhZ3NfdGV4dCA9IG1hbGxvYygyMiAqIHNpemVvZihjaGFyKSk7CisJCQlpZiAoZmZsYWdzX3RleHQgIT0gTlVMTCkgeworCQkJCXB0ciA9IGZmbGFnc190ZXh0OworCQkJCWlmIChmaWxlX2F0dHIgJiBBVFRSX1JFQURPTkxZKSB7CisJCQkJCXN0cmNweShwdHIsICJyZG9ubHksIik7CisJCQkJCXB0ciA9IHB0ciArIDc7CisJCQkJfQorCQkJCWlmIChmaWxlX2F0dHIgJiBBVFRSX0hJRERFTikgeworCQkJCQlzdHJjcHkocHRyLCAiaGlkZGVuLCIpOworCQkJCQlwdHIgPSBwdHIgKyA3OworCQkJCX0KKwkJCQlpZiAoZmlsZV9hdHRyICYgQVRUUl9TWVNURU0pIHsKKwkJCQkJc3RyY3B5KHB0ciwgInN5c3RlbSwiKTsKKwkJCQkJcHRyID0gcHRyICsgNzsKKwkJCQl9CisJCQkJaWYgKHB0ciA+IGZmbGFnc190ZXh0KSB7CisJCQkJCS8qIERlbGV0ZSB0cmFpbGluZyBjb21tYSAqLworCQkJCQkqKHB0ciAtIDEpID0gJ1wwJzsKKwkJCQkJYXJjaGl2ZV9lbnRyeV9jb3B5X2ZmbGFnc190ZXh0KGVudHJ5LAorCQkJCQkgICAgZmZsYWdzX3RleHQpOworCQkJCX0KKwkJCQlmcmVlKGZmbGFnc190ZXh0KTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZihob3N0X29zID09IEhPU1RfVU5JWCkgeworCQkvKiBIb3N0IE9TIGlzIFVuaXggKi8KKwkJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShlbnRyeSwgKF9fTEFfTU9ERV9UKSBmaWxlX2F0dHIpOworCX0gZWxzZSB7CisJCS8qIFVua25vd24gaG9zdCBPUyAqLworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkiVW5zdXBwb3J0ZWQgSG9zdCBPUzogMHgleCIsIChpbnQpIGhvc3Rfb3MpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmbmFtZV9zaXplLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfYWhlYWQoYSwgbmFtZV9zaXplLCAmcCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWlmKG5hbWVfc2l6ZSA+IChNQVhfTkFNRV9JTl9DSEFSUyAtIDEpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSJGaWxlbmFtZSBpcyB0b28gbG9uZyIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKG5hbWVfc2l6ZSA9PSAwKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSJObyBmaWxlbmFtZSBzcGVjaWZpZWQiKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwltZW1jcHkobmFtZV91dGY4X2J1ZiwgcCwgbmFtZV9zaXplKTsKKwluYW1lX3V0ZjhfYnVmW25hbWVfc2l6ZV0gPSAwOworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCBuYW1lX3NpemUpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlhcmNoaXZlX2VudHJ5X3VwZGF0ZV9wYXRobmFtZV91dGY4KGVudHJ5LCBuYW1lX3V0ZjhfYnVmKTsKKworCWlmKGV4dHJhX2RhdGFfc2l6ZSA+IDApIHsKKwkJaW50IHJldCA9IHByb2Nlc3NfaGVhZF9maWxlX2V4dHJhKGEsIGVudHJ5LCByYXIsCisJCSAgICBleHRyYV9kYXRhX3NpemUpOworCisJCS8qCisJCSAqIFRPRE86IHJld3JpdGUgb3IgcmVtb3ZlIHVzZWxlc3Mgc2FuaXR5IGNoZWNrCisJCSAqICAgICAgIGFzIGV4dHJhX2RhdGFfc2l6ZSBpcyBub3QgcGFzc2VkIGFzIGEgcG9pbnRlcgorCQkgKgorCQlpZihleHRyYV9kYXRhX3NpemUgPCAwKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkJICAgICJGaWxlIGV4dHJhIGRhdGEgc2l6ZSBpcyBub3QgemVybyIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKwkJICovCisKKwkJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmKChmaWxlX2ZsYWdzICYgVU5LTk9XTl9VTlBBQ0tFRF9TSVpFKSA9PSAwKSB7CisJCXJhci0+ZmlsZS51bnBhY2tlZF9zaXplID0gKHNzaXplX3QpIHVucGFja2VkX3NpemU7CisJCWlmKHJhci0+ZmlsZS5yZWRpcl90eXBlID09IFJFRElSX1RZUEVfTk9ORSkKKwkJCWFyY2hpdmVfZW50cnlfc2V0X3NpemUoZW50cnksIHVucGFja2VkX3NpemUpOworCX0KKworCWlmKGZpbGVfZmxhZ3MgJiBVVElNRSkgeworCQlhcmNoaXZlX2VudHJ5X3NldF9tdGltZShlbnRyeSwgKHRpbWVfdCkgbXRpbWUsIDApOworCX0KKworCWlmKGZpbGVfZmxhZ3MgJiBDUkMzMikgeworCQlyYXItPmZpbGUuc3RvcmVkX2NyYzMyID0gY3JjOworCX0KKworCWlmKCFyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUpIHsKKwkJLyogRG8gbm90IHJlaW5pdGlhbGl6ZSB1bnBhY2tpbmcgc3RhdGUgaWYgd2UncmUgc3dpdGNoaW5nCisJCSAqIGFyY2hpdmVzLiAqLworCQlyYXItPmNzdGF0ZS5ibG9ja19wYXJzaW5nX2ZpbmlzaGVkID0gMTsKKwkJcmFyLT5jc3RhdGUuYWxsX2ZpbHRlcnNfYXBwbGllZCA9IDE7CisJCXJhci0+Y3N0YXRlLmluaXRpYWxpemVkID0gMDsKKwl9CisKKwlpZihyYXItPmdlbmVyaWMuc3BsaXRfYmVmb3JlID4gMCkgeworCQkvKiBJZiBub3cgd2UncmUgc3RhbmRpbmcgb24gYSBoZWFkZXIgdGhhdCBoYXMgYSAnc3BsaXQgYmVmb3JlJworCQkgKiBtYXJrLCBpdCBtZWFucyB3ZSdyZSBzdGFuZGluZyBvbiBhICdjb250aW51YXRpb24nIGZpbGUKKwkJICogaGVhZGVyLiBTaWduYWwgdGhlIGNhbGxlciB0aGF0IGlmIGl0IHdhbnRzIHRvIG1vdmUgdG8KKwkJICogYW5vdGhlciBmaWxlLCBpdCBtdXN0IGNhbGwgcmFyNV9yZWFkX2hlYWRlcigpIGZ1bmN0aW9uCisJCSAqIGFnYWluLiAqLworCisJCXJldHVybiBBUkNISVZFX1JFVFJZOworCX0gZWxzZSB7CisJCXJldHVybiBBUkNISVZFX09LOworCX0KK30KKworc3RhdGljIGludCBwcm9jZXNzX2hlYWRfc2VydmljZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlbnRyeSwgc2l6ZV90IGJsb2NrX2ZsYWdzKQoreworCS8qIFByb2Nlc3MgdGhpcyBTRVJWSUNFIGJsb2NrIHRoZSBzYW1lIHdheSBhcyBGSUxFIGJsb2Nrcy4gKi8KKwlpbnQgcmV0ID0gcHJvY2Vzc19oZWFkX2ZpbGUoYSwgcmFyLCBlbnRyeSwgYmxvY2tfZmxhZ3MpOworCWlmKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gcmV0OworCisJcmFyLT5maWxlLnNlcnZpY2UgPSAxOworCisJLyogQnV0IHNraXAgdGhlIGRhdGEgcGFydCBhdXRvbWF0aWNhbGx5LiBJdCdzIG5vIHVzZSBmb3IgdGhlIHVzZXIKKwkgKiBhbnl3YXkuICBJdCBjb250YWlucyBvbmx5IHNlcnZpY2UgZGF0YSwgbm90IGV2ZW4gbmVlZGVkIHRvCisJICogcHJvcGVybHkgdW5wYWNrIHRoZSBmaWxlLiAqLworCXJldCA9IHJhcjVfcmVhZF9kYXRhX3NraXAoYSk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByZXQ7CisKKwkvKiBBZnRlciBza2lwcGluZywgdHJ5IHBhcnNpbmcgYW5vdGhlciBibG9jayBhdXRvbWF0aWNhbGx5LiAqLworCXJldHVybiBBUkNISVZFX1JFVFJZOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGVhZF9tYWluKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5LCBzaXplX3QgYmxvY2tfZmxhZ3MpCit7CisJaW50IHJldDsKKwlzaXplX3QgZXh0cmFfZGF0YV9zaXplID0gMDsKKwlzaXplX3QgZXh0cmFfZmllbGRfc2l6ZSA9IDA7CisJc2l6ZV90IGV4dHJhX2ZpZWxkX2lkID0gMDsKKwlzaXplX3QgYXJjaGl2ZV9mbGFncyA9IDA7CisKKwllbnVtIE1BSU5fRkxBR1MgeworCQlWT0xVTUUgPSAweDAwMDEsICAgICAgICAgLyogbXVsdGktdm9sdW1lIGFyY2hpdmUgKi8KKwkJVk9MVU1FX05VTUJFUiA9IDB4MDAwMiwgIC8qIHZvbHVtZSBudW1iZXIsIGZpcnN0IHZvbCBkb2Vzbid0CisJCQkJCSAgKiBoYXZlIGl0ICovCisJCVNPTElEID0gMHgwMDA0LCAgICAgICAgICAvKiBzb2xpZCBhcmNoaXZlICovCisJCVBST1RFQ1QgPSAweDAwMDgsICAgICAgICAvKiBjb250YWlucyBSZWNvdmVyeSBpbmZvICovCisJCUxPQ0sgPSAweDAwMTAsICAgICAgICAgICAvKiByZWFkb25seSBmbGFnLCBub3QgdXNlZCAqLworCX07CisKKwllbnVtIE1BSU5fRVhUUkEgeworCQkvLyBKdXN0IG9uZSBhdHRyaWJ1dGUgaGVyZS4KKwkJTE9DQVRPUiA9IDB4MDEsCisJfTsKKworCSh2b2lkKSBlbnRyeTsKKworCWlmKGJsb2NrX2ZsYWdzICYgSEZMX0VYVFJBX0RBVEEpIHsKKwkJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZleHRyYV9kYXRhX3NpemUsIE5VTEwpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0gZWxzZSB7CisJCWV4dHJhX2RhdGFfc2l6ZSA9IDA7CisJfQorCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZhcmNoaXZlX2ZsYWdzLCBOVUxMKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJcmFyLT5tYWluLnZvbHVtZSA9IChhcmNoaXZlX2ZsYWdzICYgVk9MVU1FKSA+IDA7CisJcmFyLT5tYWluLnNvbGlkID0gKGFyY2hpdmVfZmxhZ3MgJiBTT0xJRCkgPiAwOworCisJaWYoYXJjaGl2ZV9mbGFncyAmIFZPTFVNRV9OVU1CRVIpIHsKKwkJc2l6ZV90IHYgPSAwOworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJnYsIE5VTEwpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlpZiAodiA+IFVJTlRfTUFYKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJJbnZhbGlkIHZvbHVtZSBudW1iZXIiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJcmFyLT5tYWluLnZvbF9ubyA9ICh1bnNpZ25lZCBpbnQpIHY7CisJfSBlbHNlIHsKKwkJcmFyLT5tYWluLnZvbF9ubyA9IDA7CisJfQorCisJaWYocmFyLT52b2wuZXhwZWN0ZWRfdm9sX25vID4gMCAmJgorCQlyYXItPm1haW4udm9sX25vICE9IHJhci0+dm9sLmV4cGVjdGVkX3ZvbF9ubykKKwl7CisJCS8qIFJldHVybmluZyBFT0YgaW5zdGVhZCBvZiBGQVRBTCBiZWNhdXNlIG9mIHN0cmFuZ2UKKwkJICogbGliYXJjaGl2ZSBiZWhhdmlvci4gV2hlbiBvcGVuaW5nIG11bHRpcGxlIGZpbGVzIHZpYQorCQkgKiBhcmNoaXZlX3JlYWRfb3Blbl9maWxlbmFtZXMoKSwgYWZ0ZXIgcmVhZGluZyB1cCB0aGUgd2hvbGUKKwkJICogbGFzdCBmaWxlLCB0aGUgX19hcmNoaXZlX3JlYWRfYWhlYWQgZnVuY3Rpb24gd3JhcHMgdXAgdG8KKwkJICogdGhlIGZpcnN0IGFyY2hpdmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgRU9GLiAqLworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoZXh0cmFfZGF0YV9zaXplID09IDApIHsKKwkJLyogRWFybHkgcmV0dXJuLiAqLworCQlyZXR1cm4gQVJDSElWRV9PSzsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX3NpemUsIE5VTEwpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX2lkLCBOVUxMKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoZXh0cmFfZmllbGRfc2l6ZSA9PSAwKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkludmFsaWQgZXh0cmEgZmllbGQgc2l6ZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlzd2l0Y2goZXh0cmFfZmllbGRfaWQpIHsKKwkJY2FzZSBMT0NBVE9SOgorCQkJcmV0ID0gcHJvY2Vzc19tYWluX2xvY2F0b3JfZXh0cmFfYmxvY2soYSwgcmFyKTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJLyogRXJyb3Igd2hpbGUgcGFyc2luZyBtYWluIGxvY2F0b3IgZXh0cmEKKwkJCQkgKiBibG9jay4gKi8KKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlVuc3VwcG9ydGVkIGV4dHJhIHR5cGUgKDB4JXgpIiwKKwkJCSAgICAoaW50KSBleHRyYV9maWVsZF9pZCk7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBza2lwX3VucHJvY2Vzc2VkX2J5dGVzKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJaW50IHJldDsKKworCWlmKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcpIHsKKwkJLyogVXNlIGRpZmZlcmVudCBza2lwcGluZyBtZXRob2QgaW4gYmxvY2sgbWVyZ2luZyBtb2RlIHRoYW4gaW4KKwkJICogbm9ybWFsIG1vZGUuIElmIG1lcmdlIG1vZGUgaXMgYWN0aXZlLCByYXI1X3JlYWRfZGF0YV9za2lwCisJCSAqIGNhbid0IGJlIHVzZWQsIGJlY2F1c2UgaXQgY291bGQgYWxsb3cgcmVjdXJzaXZlIHVzZSBvZgorCQkgKiBtZXJnZV9ibG9jaygpICogZnVuY3Rpb24sIGFuZCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydAorCQkgKiByZWN1cnNpdmUgdXNlLiAqLworCQlpZihyYXItPm1lcmdlX21vZGUpIHsKKwkJCS8qIERpc2NhcmQgd2hvbGUgbWVyZ2VkIGJsb2NrLiBUaGlzIGlzIHZhbGlkIGluIHNvbGlkCisJCQkgKiBtb2RlIGFzIHdlbGwsIGJlY2F1c2UgdGhlIGNvZGUgd2lsbCBkaXNjYXJkIGJsb2NrcworCQkJICogb25seSBpZiB0aG9zZSBibG9ja3MgYXJlIHNhZmUgdG8gZGlzY2FyZCAoaS5lLgorCQkJICogdGhleSdyZSBub3QgRklMRSBibG9ja3MpLiAgKi8KKwkJCXJldCA9IGNvbnN1bWUoYSwgcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyk7CisJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIElmIHdlJ3JlIG5vdCBpbiBtZXJnZSBtb2RlLCB1c2Ugc2FmZSBza2lwcGluZyBjb2RlLgorCQkJICogVGhpcyB3aWxsIGVuc3VyZSB3ZSdsbCBoYW5kbGUgc29saWQgYXJjaGl2ZXMKKwkJCSAqIHByb3Blcmx5LiAqLworCQkJcmV0ID0gcmFyNV9yZWFkX2RhdGFfc2tpcChhKTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHNjYW5fZm9yX3NpZ25hdHVyZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKTsKKworLyogQmFzZSBibG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9uLiBBICdiYXNlIGJsb2NrJyBpcyBhIFJBUnY1IGhlYWRlciBibG9jaworICogdGhhdCB0ZWxscyB0aGUgcmVhZGVyIHdoYXQga2luZCBvZiBkYXRhIGlzIHN0b3JlZCBpbnNpZGUgdGhlIGJsb2NrLgorICoKKyAqIEZyb20gdGhlIGJpcmRzLWV5ZSB2aWV3IGEgUkFSIGZpbGUgbG9va3MgZmlsZSB0aGlzOgorICoKKyAqIDxtYWdpYz48YmFzZV9ibG9ja18xPjxiYXNlX2Jsb2NrXzI+Li4uPGJhc2VfYmxvY2tfbj4KKyAqCisgKiBUaGVyZSBhcmUgYSBmZXcgdHlwZXMgb2YgYmFzZSBibG9ja3MuIFRob3NlIHR5cGVzIGFyZSBzcGVjaWZpZWQgaW5zaWRlCisgKiB0aGUgJ3N3aXRjaCcgc3RhdGVtZW50IGluIHRoaXMgZnVuY3Rpb24uIEZvciBleGFtcGxlIHB1cnBvc2VzLCBJJ2xsIHdyaXRlCisgKiBob3cgYSBzdGFuZGFyZCBSQVJ2NSBmaWxlIGNvdWxkIGxvb2sgbGlrZSBoZXJlOgorICoKKyAqIDxtYWdpYz48TUFJTj48RklMRT48RklMRT48RklMRT48U0VSVklDRT48RU5EQVJDPgorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgYWJvdmUgY291bGQgZGVzY3JpYmUgYW4gYXJjaGl2ZSBmaWxlIHdpdGggMyBmaWxlcyBpbiBpdCwKKyAqIG9uZSBzZXJ2aWNlICJRdWlja09wZW4iIGJsb2NrICh0aGF0IGlzIGlnbm9yZWQgYnkgdGhpcyBwYXJzZXIpLCBhbmQgYW4KKyAqIGVuZCBvZiBmaWxlIGJhc2UgYmxvY2sgbWFya2VyLgorICoKKyAqIElmIHRoZSBmaWxlIGlzIHN0b3JlZCBpbiBtdWx0aXBsZSBhcmNoaXZlIGZpbGVzICgibXVsdGlhcmNoaXZlIiksIGl0IG1pZ2h0CisgKiBsb29rIGxpa2UgdGhpczoKKyAqCisgKiAucGFydDAxLnJhcjogPG1hZ2ljPjxNQUlOPjxGSUxFPjxFTkRBUkM+CisgKiAucGFydDAyLnJhcjogPG1hZ2ljPjxNQUlOPjxGSUxFPjxFTkRBUkM+CisgKiAucGFydDAzLnJhcjogPG1hZ2ljPjxNQUlOPjxGSUxFPjxFTkRBUkM+CisgKgorICogVGhpcyBleGFtcGxlIGNvdWxkIGRlc2NyaWJlIDMgUkFSIGZpbGVzIHRoYXQgY29udGFpbiBPTkUgYXJjaGl2ZWQgZmlsZS4KKyAqIE9yIGl0IGNvdWxkIGRlc2NyaWJlIDMgUkFSIGZpbGVzIHRoYXQgY29udGFpbiAzIGRpZmZlcmVudCBmaWxlcy4gT3IgMworICogUkFSIGZpbGVzIHRoYW4gY29udGFpbiAyIGZpbGVzLiBJdCBhbGwgZGVwZW5kcyB3aGF0IG1ldGFkYXRhIGlzIHN0b3JlZCBpbgorICogdGhlIGhlYWRlcnMgb2YgPEZJTEU+IGJsb2Nrcy4KKyAqCisgKiBFYWNoIDxGSUxFPiBibG9jayBjb250YWlucyBpbmZvIGFib3V0IGl0cyBzaXplLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpdCdzCisgKiBzdG9yaW5nIGluc2lkZSwgYW5kIHdoZXRoZXIgdGhpcyBGSUxFIGJsb2NrIGlzIGEgY29udGludWF0aW9uIGJsb2NrIG9mCisgKiBwcmV2aW91cyBhcmNoaXZlICgnc3BsaXQgYmVmb3JlJyksIGFuZCBpcyB0aGlzIEZJTEUgYmxvY2sgc2hvdWxkIGJlCisgKiBjb250aW51ZWQgaW4gYW5vdGhlciBhcmNoaXZlICgnc3BsaXQgYWZ0ZXInKS4gQnkgcGFyc2luZyB0aGUgJ3NwbGl0IGJlZm9yZScKKyAqIGFuZCAnc3BsaXQgYWZ0ZXInIGZsYWdzLCB3ZSdyZSBhYmxlIHRvIHRlbGwgaWYgbXVsdGlwbGUgPEZJTEU+IGJhc2UgYmxvY2tzCisgKiBhcmUgZGVzY3JpYmluZyBvbmUgZmlsZSwgb3IgbXVsdGlwbGUgZmlsZXMgKHdpdGggdGhlIHNhbWUgZmlsZW5hbWUsIGZvcgorICogZXhhbXBsZSkuCisgKgorICogT25lIHRoaW5nIHRvIG5vdGUgaXMgdGhhdCBpZiB3ZSdyZSBwYXJzaW5nIHRoZSBmaXJzdCA8RklMRT4gYmxvY2ssIGFuZAorICogd2Ugc2VlICdzcGxpdCBhZnRlcicgZmxhZywgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgb3ZlciB0byBhbm90aGVyIDxGSUxFPgorICogYmxvY2sgdG8gYmUgYWJsZSB0byBkZWNvbXByZXNzIHJlc3Qgb2YgdGhlIGRhdGEuIFRvIGRvIHRoaXMsIHdlIG5lZWQKKyAqIHRvIHNraXAgdGhlIDxFTkRBUkM+IGJsb2NrLCB0aGVuIHN3aXRjaCB0byBhbm90aGVyIGZpbGUsIHRoZW4gc2tpcCB0aGUKKyAqIDxtYWdpYz4gYmxvY2ssIDxNQUlOPiBibG9jaywgYW5kIHRoZW4gd2UncmUgc3RhbmRpbmcgb24gdGhlIHByb3BlcgorICogPEZJTEU+IGJsb2NrLgorICovCisKK3N0YXRpYyBpbnQgcHJvY2Vzc19iYXNlX2Jsb2NrKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5KQoreworCWNvbnN0IHNpemVfdCBTTUFMTEVTVF9SQVI1X0JMT0NLX1NJWkUgPSAzOworCisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCXVpbnQzMl90IGhkcl9jcmMsIGNvbXB1dGVkX2NyYzsKKwlzaXplX3QgcmF3X2hkcl9zaXplID0gMCwgaGRyX3NpemVfbGVuLCBoZHJfc2l6ZTsKKwlzaXplX3QgaGVhZGVyX2lkID0gMDsKKwlzaXplX3QgaGVhZGVyX2ZsYWdzID0gMDsKKwljb25zdCB1aW50OF90KiBwOworCWludCByZXQ7CisKKwllbnVtIEhFQURFUl9UWVBFIHsKKwkJSEVBRF9NQVJLICAgID0gMHgwMCwgSEVBRF9NQUlOICA9IDB4MDEsIEhFQURfRklMRSAgID0gMHgwMiwKKwkJSEVBRF9TRVJWSUNFID0gMHgwMywgSEVBRF9DUllQVCA9IDB4MDQsIEhFQURfRU5EQVJDID0gMHgwNSwKKwkJSEVBRF9VTktOT1dOID0gMHhmZiwKKwl9OworCisJLyogU2tpcCBhbnkgdW5wcm9jZXNzZWQgZGF0YSBmb3IgdGhpcyBmaWxlLiAqLworCXJldCA9IHNraXBfdW5wcm9jZXNzZWRfYnl0ZXMoYSk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByZXQ7CisKKwkvKiBSZWFkIHRoZSBleHBlY3RlZCBDUkMzMiBjaGVja3N1bS4gKi8KKwlpZighcmVhZF91MzIoYSwgJmhkcl9jcmMpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwkvKiBSZWFkIGhlYWRlciBzaXplLiAqLworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmcmF3X2hkcl9zaXplLCAmaGRyX3NpemVfbGVuKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaGRyX3NpemUgPSByYXdfaGRyX3NpemUgKyBoZHJfc2l6ZV9sZW47CisKKwkvKiBTYW5pdHkgY2hlY2ssIG1heGltdW0gaGVhZGVyIHNpemUgZm9yIFJBUjUgaXMgMk1CLiAqLworCWlmKGhkcl9zaXplID4gKDIgKiAxMDI0ICogMTAyNCkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiQmFzZSBibG9jayBoZWFkZXIgaXMgdG9vIGxhcmdlIik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogQWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIHRvIHdlZWQgb3V0IGludmFsaWQgZmlsZXMuICovCisJaWYocmF3X2hkcl9zaXplID09IDAgfHwgaGRyX3NpemVfbGVuID09IDAgfHwKKwkJaGRyX3NpemUgPCBTTUFMTEVTVF9SQVI1X0JMT0NLX1NJWkUpCisJeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUb28gc21hbGwgYmxvY2sgZW5jb3VudGVyZWQgKCV6dSBieXRlcykiLAorCQkgICAgcmF3X2hkcl9zaXplKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBSZWFkIHRoZSB3aG9sZSBoZWFkZXIgZGF0YSBpbnRvIG1lbW9yeSwgbWF4aW11bSBtZW1vcnkgdXNlIGhlcmUgaXMKKwkgKiAyTUIuICovCisJaWYoIXJlYWRfYWhlYWQoYSwgaGRyX3NpemUsICZwKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJLyogVmVyaWZ5IHRoZSBDUkMzMiBvZiB0aGUgaGVhZGVyIGRhdGEuICovCisJY29tcHV0ZWRfY3JjID0gKHVpbnQzMl90KSBjcmMzMigwLCBwLCAoaW50KSBoZHJfc2l6ZSk7CisJaWYoY29tcHV0ZWRfY3JjICE9IGhkcl9jcmMpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSGVhZGVyIENSQyBlcnJvciIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIElmIHRoZSBjaGVja3N1bSBpcyBPSywgd2UgcHJvY2VlZCB3aXRoIHBhcnNpbmcuICovCisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIGhkcl9zaXplX2xlbikpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmaGVhZGVyX2lkLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZoZWFkZXJfZmxhZ3MsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlyYXItPmdlbmVyaWMuc3BsaXRfYWZ0ZXIgPSAoaGVhZGVyX2ZsYWdzICYgSEZMX1NQTElUX0FGVEVSKSA+IDA7CisJcmFyLT5nZW5lcmljLnNwbGl0X2JlZm9yZSA9IChoZWFkZXJfZmxhZ3MgJiBIRkxfU1BMSVRfQkVGT1JFKSA+IDA7CisJcmFyLT5nZW5lcmljLnNpemUgPSAoaW50KWhkcl9zaXplOworCXJhci0+Z2VuZXJpYy5sYXN0X2hlYWRlcl9pZCA9IChpbnQpaGVhZGVyX2lkOworCXJhci0+bWFpbi5lbmRhcmMgPSAwOworCisJLyogVGhvc2UgYXJlIHBvc3NpYmxlIGhlYWRlciBpZHMgaW4gUkFSdjUuICovCisJc3dpdGNoKGhlYWRlcl9pZCkgeworCQljYXNlIEhFQURfTUFJTjoKKwkJCXJldCA9IHByb2Nlc3NfaGVhZF9tYWluKGEsIHJhciwgZW50cnksIGhlYWRlcl9mbGFncyk7CisKKwkJCS8qIE1haW4gaGVhZGVyIGRvZXNuJ3QgaGF2ZSBhbnkgZmlsZXMgaW4gaXQsIHNvIGl0J3MKKwkJCSAqIHBvaW50bGVzcyB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4gUmV0cnkgdG8gbmV4dAorCQkJICogaGVhZGVyLCB3aGljaCBzaG91bGQgYmUgSEVBRF9GSUxFL0hFQURfU0VSVklDRS4gKi8KKwkJCWlmKHJldCA9PSBBUkNISVZFX09LKQorCQkJCXJldHVybiBBUkNISVZFX1JFVFJZOworCisJCQlyZXR1cm4gcmV0OworCQljYXNlIEhFQURfU0VSVklDRToKKwkJCXJldCA9IHByb2Nlc3NfaGVhZF9zZXJ2aWNlKGEsIHJhciwgZW50cnksIGhlYWRlcl9mbGFncyk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIEhFQURfRklMRToKKwkJCXJldCA9IHByb2Nlc3NfaGVhZF9maWxlKGEsIHJhciwgZW50cnksIGhlYWRlcl9mbGFncyk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIEhFQURfQ1JZUFQ6CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJFbmNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQljYXNlIEhFQURfRU5EQVJDOgorCQkJcmFyLT5tYWluLmVuZGFyYyA9IDE7CisKKwkJCS8qIEFmdGVyIGVuY291bnRlcmluZyBhbiBlbmQgb2YgZmlsZSBtYXJrZXIsIHdlIG5lZWQKKwkJCSAqIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uIGlmIHRoaXMgYXJjaGl2ZSBpcworCQkJICogY29udGludWVkIGluIGFub3RoZXIgZmlsZSAoaS5lLiBpcyBpdCBwYXJ0MDEucmFyOgorCQkJICogaXMgdGhlcmUgYSBwYXJ0MDIucmFyPykgKi8KKwkJCWlmKHJhci0+bWFpbi52b2x1bWUpIHsKKwkJCQkvKiBJbiBjYXNlIHRoZXJlIGlzIHBhcnQwMi5yYXIsIHBvc2l0aW9uIHRoZQorCQkJCSAqIHJlYWQgcG9pbnRlciBpbiBhIHByb3BlciBwbGFjZSwgc28gd2UgY2FuCisJCQkJICogcmVzdW1lIHBhcnNpbmcuICovCisJCQkJcmV0ID0gc2Nhbl9mb3Jfc2lnbmF0dXJlKGEpOworCQkJCWlmKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZihyYXItPnZvbC5leHBlY3RlZF92b2xfbm8gPT0KKwkJCQkJICAgIFVJTlRfTUFYKSB7CisJCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCQkJICAgICJIZWFkZXIgZXJyb3IiKTsKKwkJCQkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCQkJfQorCisJCQkJCXJhci0+dm9sLmV4cGVjdGVkX3ZvbF9ubyA9CisJCQkJCSAgICByYXItPm1haW4udm9sX25vICsgMTsKKwkJCQkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCQl9CisJCWNhc2UgSEVBRF9NQVJLOgorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQlkZWZhdWx0OgorCQkJaWYoKGhlYWRlcl9mbGFncyAmIEhGTF9TS0lQX0lGX1VOS05PV04pID09IDApIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIkhlYWRlciB0eXBlIGVycm9yIik7CisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSBibG9jayBpcyBtYXJrZWQgYXMgJ3NraXAgaWYgdW5rbm93bicsCisJCQkJICogZG8gYXMgdGhlIGZsYWcgc2F5czogc2tpcCB0aGUgYmxvY2sKKwkJCQkgKiBpbnN0ZWFkIG9uIGZhaWxpbmcgb24gaXQuICovCisJCQkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisJCQl9CisJfQorCisjaWYgIWRlZmluZWQgV0lOMzIKKwkvLyBOb3QgcmVhY2hlZC4KKwlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCSAgICAiSW50ZXJuYWwgdW5wYWNrZXIgZXJyb3IiKTsKKwlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHNraXBfYmFzZV9ibG9jayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwkvKiBDcmVhdGUgYSBuZXcgbG9jYWwgYXJjaGl2ZV9lbnRyeSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIG9wZXJhdGVkIG9uCisJICogYnkgaGVhZGVyIHJlYWRlcjsgb3BlcmF0aW9ucyBvbiB0aGlzIGFyY2hpdmVfZW50cnkgd2lsbCBiZSBkaXNjYXJkZWQuCisJICovCisJc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5ID0gYXJjaGl2ZV9lbnRyeV9uZXcoKTsKKwlyZXQgPSBwcm9jZXNzX2Jhc2VfYmxvY2soYSwgZW50cnkpOworCisJLyogRGlzY2FyZCBvcGVyYXRpb25zIG9uIHRoaXMgYXJjaGl2ZV9lbnRyeSBzdHJ1Y3R1cmUuICovCisJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5KTsKKwlpZihyZXQgPT0gQVJDSElWRV9GQVRBTCkKKwkJcmV0dXJuIHJldDsKKworCWlmKHJhci0+Z2VuZXJpYy5sYXN0X2hlYWRlcl9pZCA9PSAyICYmIHJhci0+Z2VuZXJpYy5zcGxpdF9iZWZvcmUgPiAwKQorCQlyZXR1cm4gQVJDSElWRV9PSzsKKworCWlmKHJldCA9PSBBUkNISVZFX09LKQorCQlyZXR1cm4gQVJDSElWRV9SRVRSWTsKKwllbHNlCisJCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9yZWFkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJaW50IHJldDsKKworCWlmKHJhci0+aGVhZGVyX2luaXRpYWxpemVkID09IDApIHsKKwkJaW5pdF9oZWFkZXIoYSk7CisJCXJhci0+aGVhZGVyX2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlpZihyYXItPnNraXBwZWRfbWFnaWMgPT0gMCkgeworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcikpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlyYXItPnNraXBwZWRfbWFnaWMgPSAxOworCX0KKworCWRvIHsKKwkJcmV0ID0gcHJvY2Vzc19iYXNlX2Jsb2NrKGEsIGVudHJ5KTsKKwl9IHdoaWxlKHJldCA9PSBBUkNISVZFX1JFVFJZIHx8CisJCQkocmFyLT5tYWluLmVuZGFyYyA+IDAgJiYgcmV0ID09IEFSQ0hJVkVfT0spKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdW5wYWNrKHN0cnVjdCByYXI1KiByYXIpIHsKKwlyYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiA9IDA7CisJaW5pdF93aW5kb3dfbWFzayhyYXIpOworCisJZnJlZShyYXItPmNzdGF0ZS53aW5kb3dfYnVmKTsKKwlmcmVlKHJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1Zik7CisKKwlpZihyYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSA+IDApIHsKKwkJcmFyLT5jc3RhdGUud2luZG93X2J1ZiA9IGNhbGxvYygxLCByYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSk7CisJCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiA9IGNhbGxvYygxLCByYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSk7CisJfSBlbHNlIHsKKwkJcmFyLT5jc3RhdGUud2luZG93X2J1ZiA9IE5VTEw7CisJCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiA9IE5VTEw7CisJfQorCisJcmFyLT5jc3RhdGUud3JpdGVfcHRyID0gMDsKKwlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciA9IDA7CisKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmJkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUuYmQpKTsKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmxkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUubGQpKTsKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmRkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUuZGQpKTsKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmxkZCwgMCwgc2l6ZW9mKHJhci0+Y3N0YXRlLmxkZCkpOworCW1lbXNldCgmcmFyLT5jc3RhdGUucmQsIDAsIHNpemVvZihyYXItPmNzdGF0ZS5yZCkpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY3JjKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHVpbnQ4X3QqIHAsIHNpemVfdCB0b19yZWFkKSB7CisgICAgaW50IHZlcmlmeV9jcmM7CisKKwlpZihyYXItPnNraXBfbW9kZSkgeworI2lmIGRlZmluZWQgQ0hFQ0tfQ1JDX09OX1NPTElEX1NLSVAKKwkJdmVyaWZ5X2NyYyA9IDE7CisjZWxzZQorCQl2ZXJpZnlfY3JjID0gMDsKKyNlbmRpZgorCX0gZWxzZQorCQl2ZXJpZnlfY3JjID0gMTsKKworCWlmKHZlcmlmeV9jcmMpIHsKKwkJLyogRG9uJ3QgdXBkYXRlIENSQzMyIGlmIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSB0aGUKKwkJICogYHN0b3JlZF9jcmMzMmAgaW5mbyBmaWxsZWQgaW4uICovCisJCWlmKHJhci0+ZmlsZS5zdG9yZWRfY3JjMzIgPiAwKSB7CisJCQlyYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiA9CisJCQkJY3JjMzIocmFyLT5maWxlLmNhbGN1bGF0ZWRfY3JjMzIsIHAsIHRvX3JlYWQpOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhlIGZpbGUgdXNlcyBhbiBvcHRpb25hbCBCTEFLRTJzcCBjaGVja3N1bQorCQkgKiBhbGdvcml0aG0uICovCisJCWlmKHJhci0+ZmlsZS5oYXNfYmxha2UyID4gMCkgeworCQkJLyogUmV0dXJuIHZhbHVlIG9mIHRoZSBgdXBkYXRlYCBmdW5jdGlvbiBpcyBhbHdheXMgMCwKKwkJCSAqIHNvIHdlIGNhbiBleHBsaWNpdGx5IGlnbm9yZSBpdCBoZXJlLiAqLworCQkJKHZvaWQpIGJsYWtlMnNwX3VwZGF0ZSgmcmFyLT5maWxlLmIyc3RhdGUsIHAsIHRvX3JlYWQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNyZWF0ZV9kZWNvZGVfdGFibGVzKHVpbnQ4X3QqIGJpdF9sZW5ndGgsCisgICAgc3RydWN0IGRlY29kZV90YWJsZSogdGFibGUsIGludCBzaXplKQoreworCWludCBjb2RlLCB1cHBlcl9saW1pdCA9IDAsIGksIGxjWzE2XTsKKwl1aW50MzJfdCBkZWNvZGVfcG9zX2Nsb25lW3JhcjVfY291bnRvZih0YWJsZS0+ZGVjb2RlX3BvcyldOworCXNzaXplX3QgY3VyX2xlbiwgcXVpY2tfZGF0YV9zaXplOworCisJbWVtc2V0KCZsYywgMCwgc2l6ZW9mKGxjKSk7CisJbWVtc2V0KHRhYmxlLT5kZWNvZGVfbnVtLCAwLCBzaXplb2YodGFibGUtPmRlY29kZV9udW0pKTsKKwl0YWJsZS0+c2l6ZSA9IHNpemU7CisJdGFibGUtPnF1aWNrX2JpdHMgPSBzaXplID09IEhVRkZfTkMgPyAxMCA6IDc7CisKKwlmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJbGNbYml0X2xlbmd0aFtpXSAmIDE1XSsrOworCX0KKworCWxjWzBdID0gMDsKKwl0YWJsZS0+ZGVjb2RlX3Bvc1swXSA9IDA7CisJdGFibGUtPmRlY29kZV9sZW5bMF0gPSAwOworCisJZm9yKGkgPSAxOyBpIDwgMTY7IGkrKykgeworCQl1cHBlcl9saW1pdCArPSBsY1tpXTsKKworCQl0YWJsZS0+ZGVjb2RlX2xlbltpXSA9IHVwcGVyX2xpbWl0IDw8ICgxNiAtIGkpOworCQl0YWJsZS0+ZGVjb2RlX3Bvc1tpXSA9IHRhYmxlLT5kZWNvZGVfcG9zW2kgLSAxXSArIGxjW2kgLSAxXTsKKworCQl1cHBlcl9saW1pdCA8PD0gMTsKKwl9CisKKwltZW1jcHkoZGVjb2RlX3Bvc19jbG9uZSwgdGFibGUtPmRlY29kZV9wb3MsIHNpemVvZihkZWNvZGVfcG9zX2Nsb25lKSk7CisKKwlmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJdWludDhfdCBjbGVuID0gYml0X2xlbmd0aFtpXSAmIDE1OworCQlpZihjbGVuID4gMCkgeworCQkJaW50IGxhc3RfcG9zID0gZGVjb2RlX3Bvc19jbG9uZVtjbGVuXTsKKwkJCXRhYmxlLT5kZWNvZGVfbnVtW2xhc3RfcG9zXSA9IGk7CisJCQlkZWNvZGVfcG9zX2Nsb25lW2NsZW5dKys7CisJCX0KKwl9CisKKwlxdWlja19kYXRhX3NpemUgPSAoaW50NjRfdCkxIDw8IHRhYmxlLT5xdWlja19iaXRzOworCWN1cl9sZW4gPSAxOworCWZvcihjb2RlID0gMDsgY29kZSA8IHF1aWNrX2RhdGFfc2l6ZTsgY29kZSsrKSB7CisJCWludCBiaXRfZmllbGQgPSBjb2RlIDw8ICgxNiAtIHRhYmxlLT5xdWlja19iaXRzKTsKKwkJaW50IGRpc3QsIHBvczsKKworCQl3aGlsZShjdXJfbGVuIDwgcmFyNV9jb3VudG9mKHRhYmxlLT5kZWNvZGVfbGVuKSAmJgorCQkJCWJpdF9maWVsZCA+PSB0YWJsZS0+ZGVjb2RlX2xlbltjdXJfbGVuXSkgeworCQkJY3VyX2xlbisrOworCQl9CisKKwkJdGFibGUtPnF1aWNrX2xlbltjb2RlXSA9ICh1aW50OF90KSBjdXJfbGVuOworCisJCWRpc3QgPSBiaXRfZmllbGQgLSB0YWJsZS0+ZGVjb2RlX2xlbltjdXJfbGVuIC0gMV07CisJCWRpc3QgPj49ICgxNiAtIGN1cl9sZW4pOworCisJCXBvcyA9IHRhYmxlLT5kZWNvZGVfcG9zW2N1cl9sZW4gJiAxNV0gKyBkaXN0OworCQlpZihjdXJfbGVuIDwgcmFyNV9jb3VudG9mKHRhYmxlLT5kZWNvZGVfcG9zKSAmJiBwb3MgPCBzaXplKSB7CisJCQl0YWJsZS0+cXVpY2tfbnVtW2NvZGVdID0gdGFibGUtPmRlY29kZV9udW1bcG9zXTsKKwkJfSBlbHNlIHsKKwkJCXRhYmxlLT5xdWlja19udW1bY29kZV0gPSAwOworCQl9CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX251bWJlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgZGVjb2RlX3RhYmxlKiB0YWJsZSwKKyAgICBjb25zdCB1aW50OF90KiBwLCB1aW50MTZfdCogbnVtKQoreworCWludCBpLCBiaXRzLCBkaXN0OworCXVpbnQxNl90IGJpdGZpZWxkOworCXVpbnQzMl90IHBvczsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZiaXRmaWVsZCkpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWJpdGZpZWxkICY9IDB4ZmZmZTsKKworCWlmKGJpdGZpZWxkIDwgdGFibGUtPmRlY29kZV9sZW5bdGFibGUtPnF1aWNrX2JpdHNdKSB7CisJCWludCBjb2RlID0gYml0ZmllbGQgPj4gKDE2IC0gdGFibGUtPnF1aWNrX2JpdHMpOworCQlza2lwX2JpdHMocmFyLCB0YWJsZS0+cXVpY2tfbGVuW2NvZGVdKTsKKwkJKm51bSA9IHRhYmxlLT5xdWlja19udW1bY29kZV07CisJCXJldHVybiBBUkNISVZFX09LOworCX0KKworCWJpdHMgPSAxNTsKKworCWZvcihpID0gdGFibGUtPnF1aWNrX2JpdHMgKyAxOyBpIDwgMTU7IGkrKykgeworCQlpZihiaXRmaWVsZCA8IHRhYmxlLT5kZWNvZGVfbGVuW2ldKSB7CisJCQliaXRzID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2tpcF9iaXRzKHJhciwgYml0cyk7CisKKwlkaXN0ID0gYml0ZmllbGQgLSB0YWJsZS0+ZGVjb2RlX2xlbltiaXRzIC0gMV07CisJZGlzdCA+Pj0gKDE2IC0gYml0cyk7CisJcG9zID0gdGFibGUtPmRlY29kZV9wb3NbYml0c10gKyBkaXN0OworCisJaWYocG9zID49IHRhYmxlLT5zaXplKQorCQlwb3MgPSAwOworCisJKm51bSA9IHRhYmxlLT5kZWNvZGVfbnVtW3Bvc107CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIFJlYWRzIGFuZCBwYXJzZXMgSHVmZm1hbiB0YWJsZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jay4gKi8KK3N0YXRpYyBpbnQgcGFyc2VfdGFibGVzKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgY29uc3QgdWludDhfdCogcCkKK3sKKwlpbnQgcmV0LCB2YWx1ZSwgaSwgdywgaWR4ID0gMDsKKwl1aW50OF90IGJpdF9sZW5ndGhbSFVGRl9CQ10sCisJCXRhYmxlW0hVRkZfVEFCTEVfU0laRV0sCisJCW5pYmJsZV9tYXNrID0gMHhGMCwKKwkJbmliYmxlX3NoaWZ0ID0gNDsKKworCWVudW0geyBFU0NBUEUgPSAxNSB9OworCisJLyogVGhlIGRhdGEgZm9yIHRhYmxlIGdlbmVyYXRpb24gaXMgY29tcHJlc3NlZCB1c2luZyBhIHNpbXBsZSBSTEUtbGlrZQorCSAqIGFsZ29yaXRobSB3aGVuIHN0b3JpbmcgemVyb2VzLCBzbyB3ZSBuZWVkIHRvIHVucGFjayBpdCBmaXJzdC4gKi8KKwlmb3IodyA9IDAsIGkgPSAwOyB3IDwgSFVGRl9CQzspIHsKKwkJaWYoaSA+PSByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZSkgeworCQkJLyogVHJ1bmNhdGVkIGRhdGEsIGNhbid0IGNvbnRpbnVlLiAqLworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiVHJ1bmNhdGVkIGRhdGEgaW4gaHVmZm1hbiB0YWJsZXMiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJdmFsdWUgPSAocFtpXSAmIG5pYmJsZV9tYXNrKSA+PiBuaWJibGVfc2hpZnQ7CisKKwkJaWYobmliYmxlX21hc2sgPT0gMHgwRikKKwkJCSsraTsKKworCQluaWJibGVfbWFzayBePSAweEZGOworCQluaWJibGVfc2hpZnQgXj0gNDsKKworCQkvKiBWYWx1ZXMgc21hbGxlciB0aGFuIDE1IGlzIGRhdGEsIHNvIHdlIHdyaXRlIGl0IGRpcmVjdGx5LgorCQkgKiBWYWx1ZSAxNSBpcyBhIGZsYWcgdGVsbGluZyB1cyB0aGF0IHdlIG5lZWQgdG8gdW5wYWNrIG1vcmUKKwkJICogYnl0ZXMuICovCisJCWlmKHZhbHVlID09IEVTQ0FQRSkgeworCQkJdmFsdWUgPSAocFtpXSAmIG5pYmJsZV9tYXNrKSA+PiBuaWJibGVfc2hpZnQ7CisJCQlpZihuaWJibGVfbWFzayA9PSAweDBGKQorCQkJCSsraTsKKwkJCW5pYmJsZV9tYXNrIF49IDB4RkY7CisJCQluaWJibGVfc2hpZnQgXj0gNDsKKworCQkJaWYodmFsdWUgPT0gMCkgeworCQkJCS8qIFdlIHNvbWV0aW1lcyBuZWVkIHRvIHdyaXRlIHRoZSBhY3R1YWwgdmFsdWUKKwkJCQkgKiBvZiAxNSwgc28gdGhpcyBjYXNlIGhhbmRsZXMgdGhhdC4gKi8KKwkJCQliaXRfbGVuZ3RoW3crK10gPSBFU0NBUEU7CisJCQl9IGVsc2UgeworCQkJCWludCBrOworCisJCQkJLyogRmlsbCB6ZXJvZXMuICovCisJCQkJZm9yKGsgPSAwOyAoayA8IHZhbHVlICsgMikgJiYgKHcgPCBIVUZGX0JDKTsKKwkJCQkgICAgaysrKSB7CisJCQkJCWJpdF9sZW5ndGhbdysrXSA9IDA7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJYml0X2xlbmd0aFt3KytdID0gdmFsdWU7CisJCX0KKwl9CisKKwlyYXItPmJpdHMuaW5fYWRkciA9IGk7CisJcmFyLT5iaXRzLmJpdF9hZGRyID0gbmliYmxlX3NoaWZ0IF4gNDsKKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKGJpdF9sZW5ndGgsICZyYXItPmNzdGF0ZS5iZCwgSFVGRl9CQyk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiRGVjb2RpbmcgaHVmZm1hbiB0YWJsZXMgZmFpbGVkIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWZvcihpID0gMDsgaSA8IEhVRkZfVEFCTEVfU0laRTspIHsKKwkJdWludDE2X3QgbnVtOworCisJCWlmKChyYXItPmJpdHMuaW5fYWRkciArIDYpID49IHJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplKSB7CisJCQkvKiBUcnVuY2F0ZWQgZGF0YSwgY2FuJ3QgY29udGludWUuICovCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJUcnVuY2F0ZWQgZGF0YSBpbiBodWZmbWFuIHRhYmxlcyAoIzIpIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCXJldCA9IGRlY29kZV9udW1iZXIoYSwgJnJhci0+Y3N0YXRlLmJkLCBwLCAmbnVtKTsKKwkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIkRlY29kaW5nIGh1ZmZtYW4gdGFibGVzIGZhaWxlZCIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQlpZihudW0gPCAxNikgeworCQkJLyogMC4uMTU6IHN0b3JlIGRpcmVjdGx5ICovCisJCQl0YWJsZVtpXSA9ICh1aW50OF90KSBudW07CisJCQlpKys7CisJCX0gZWxzZSBpZihudW0gPCAxOCkgeworCQkJLyogMTYuLjE3OiByZXBlYXQgcHJldmlvdXMgY29kZSAqLworCQkJdWludDE2X3QgbjsKKworCQkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2JpdHNfMTYocmFyLCBwLCAmbikpCisJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCQlpZihudW0gPT0gMTYpIHsKKwkJCQluID4+PSAxMzsKKwkJCQluICs9IDM7CisJCQkJc2tpcF9iaXRzKHJhciwgMyk7CisJCQl9IGVsc2UgeworCQkJCW4gPj49IDk7CisJCQkJbiArPSAxMTsKKwkJCQlza2lwX2JpdHMocmFyLCA3KTsKKwkJCX0KKworCQkJaWYoaSA+IDApIHsKKwkJCQl3aGlsZShuLS0gPiAwICYmIGkgPCBIVUZGX1RBQkxFX1NJWkUpIHsKKwkJCQkJdGFibGVbaV0gPSB0YWJsZVtpIC0gMV07CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgICAiVW5leHBlY3RlZCBlcnJvciB3aGVuIGRlY29kaW5nICIKKwkJCQkgICAgImh1ZmZtYW4gdGFibGVzIik7CisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBvdGhlciBjb2RlczogZmlsbCB3aXRoIHplcm9lcyBgbmAgdGltZXMgKi8KKwkJCXVpbnQxNl90IG47CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9iaXRzXzE2KHJhciwgcCwgJm4pKQorCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkJaWYobnVtID09IDE4KSB7CisJCQkJbiA+Pj0gMTM7CisJCQkJbiArPSAzOworCQkJCXNraXBfYml0cyhyYXIsIDMpOworCQkJfSBlbHNlIHsKKwkJCQluID4+PSA5OworCQkJCW4gKz0gMTE7CisJCQkJc2tpcF9iaXRzKHJhciwgNyk7CisJCQl9CisKKwkJCXdoaWxlKG4tLSA+IDAgJiYgaSA8IEhVRkZfVEFCTEVfU0laRSkKKwkJCQl0YWJsZVtpKytdID0gMDsKKwkJfQorCX0KKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKCZ0YWJsZVtpZHhdLCAmcmFyLT5jc3RhdGUubGQsIEhVRkZfTkMpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgICJGYWlsZWQgdG8gY3JlYXRlIGxpdGVyYWwgdGFibGUiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWR4ICs9IEhVRkZfTkM7CisKKwlyZXQgPSBjcmVhdGVfZGVjb2RlX3RhYmxlcygmdGFibGVbaWR4XSwgJnJhci0+Y3N0YXRlLmRkLCBIVUZGX0RDKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJGYWlsZWQgdG8gY3JlYXRlIGRpc3RhbmNlIHRhYmxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlkeCArPSBIVUZGX0RDOworCisJcmV0ID0gY3JlYXRlX2RlY29kZV90YWJsZXMoJnRhYmxlW2lkeF0sICZyYXItPmNzdGF0ZS5sZGQsIEhVRkZfTERDKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJGYWlsZWQgdG8gY3JlYXRlIGxvd2VyIGJpdHMgb2YgZGlzdGFuY2VzIHRhYmxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlkeCArPSBIVUZGX0xEQzsKKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKCZ0YWJsZVtpZHhdLCAmcmFyLT5jc3RhdGUucmQsIEhVRkZfUkMpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgcmVwZWF0aW5nIGRpc3RhbmNlcyB0YWJsZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogUGFyc2VzIHRoZSBibG9jayBoZWFkZXIsIHZlcmlmaWVzIGl0cyBDUkMgYnl0ZSwgYW5kIHNhdmVzIHRoZSBoZWFkZXIKKyAqIGZpZWxkcyBpbnNpZGUgdGhlIGBoZHJgIHBvaW50ZXIuICovCitzdGF0aWMgaW50IHBhcnNlX2Jsb2NrX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBjb25zdCB1aW50OF90KiBwLAorICAgIHNzaXplX3QqIGJsb2NrX3NpemUsIHN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciogaGRyKQoreworCXVpbnQ4X3QgY2FsY3VsYXRlZF9ja3N1bTsKKwltZW1jcHkoaGRyLCBwLCBzaXplb2Yoc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKSk7CisKKwlpZihiZl9ieXRlX2NvdW50KGhkcikgPiAyKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlVuc3VwcG9ydGVkIGJsb2NrIGhlYWRlciBzaXplICh3YXMgJWQsIG1heCBpcyAyKSIsCisJCSAgICBiZl9ieXRlX2NvdW50KGhkcikpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgYml0IHJlYWRlciBpbnRlcmZhY2UgaW4gb3JkZXIgdG8gYmUgbW9yZQorCSAqIGZ1dHVyZS1wcm9vZi4gKi8KKwkqYmxvY2tfc2l6ZSA9IDA7CisJc3dpdGNoKGJmX2J5dGVfY291bnQoaGRyKSkgeworCQkvKiAxLWJ5dGUgYmxvY2sgc2l6ZSAqLworCQljYXNlIDA6CisJCQkqYmxvY2tfc2l6ZSA9ICooY29uc3QgdWludDhfdCopICZwWzJdOworCQkJYnJlYWs7CisKKwkJLyogMi1ieXRlIGJsb2NrIHNpemUgKi8KKwkJY2FzZSAxOgorCQkJKmJsb2NrX3NpemUgPSBhcmNoaXZlX2xlMTZkZWMoJnBbMl0pOworCQkJYnJlYWs7CisKKwkJLyogMy1ieXRlIGJsb2NrIHNpemUgKi8KKwkJY2FzZSAyOgorCQkJKmJsb2NrX3NpemUgPSBhcmNoaXZlX2xlMzJkZWMoJnBbMl0pOworCQkJKmJsb2NrX3NpemUgJj0gMHgwMEZGRkZGRjsKKwkJCWJyZWFrOworCisJCS8qIE90aGVyIGJsb2NrIHNpemVzIGFyZSBub3Qgc3VwcG9ydGVkLiBUaGlzIGNhc2UgaXMgbm90CisJCSAqIHJlYWNoZWQsIGJlY2F1c2Ugd2UgaGF2ZSBhbiAnaWYnIGd1YXJkIGJlZm9yZSB0aGUgc3dpdGNoCisJCSAqIHRoYXQgbWFrZXMgc3VyZSBvZiBpdC4gKi8KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFZlcmlmeSB0aGUgYmxvY2sgaGVhZGVyIGNoZWNrc3VtLiAweDVBIGlzIGEgbWFnaWMgdmFsdWUgYW5kIGlzCisJICogYWx3YXlzICogY29uc3RhbnQuICovCisJY2FsY3VsYXRlZF9ja3N1bSA9IDB4NUEKKwkgICAgXiAodWludDhfdCkgaGRyLT5ibG9ja19mbGFnc191OAorCSAgICBeICh1aW50OF90KSAqYmxvY2tfc2l6ZQorCSAgICBeICh1aW50OF90KSAoKmJsb2NrX3NpemUgPj4gOCkKKwkgICAgXiAodWludDhfdCkgKCpibG9ja19zaXplID4+IDE2KTsKKworCWlmKGNhbGN1bGF0ZWRfY2tzdW0gIT0gaGRyLT5ibG9ja19ja3N1bSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJCbG9jayBjaGVja3N1bSBlcnJvcjogZ290IDB4JXgsIGV4cGVjdGVkIDB4JXgiLAorCQkgICAgaGRyLT5ibG9ja19ja3N1bSwgY2FsY3VsYXRlZF9ja3N1bSk7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIGZpbHRlciBwcm9jZXNzaW5nLiAqLworc3RhdGljIGludCBwYXJzZV9maWx0ZXJfZGF0YShzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB1aW50OF90KiBwLAorICAgIHVpbnQzMl90KiBmaWx0ZXJfZGF0YSkKK3sKKwlpbnQgaSwgYnl0ZXM7CisJdWludDMyX3QgZGF0YSA9IDA7CisKKwlpZihBUkNISVZFX09LICE9IHJlYWRfY29uc3VtZV9iaXRzKHJhciwgcCwgMiwgJmJ5dGVzKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJYnl0ZXMrKzsKKworCWZvcihpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHsKKwkJdWludDE2X3QgYnl0ZTsKKworCQlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZieXRlKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJLyogQ2FzdCB0byB1aW50MzJfdCB3aWxsIGVuc3VyZSB0aGUgc2hpZnQgb3BlcmF0aW9uIHdpbGwgbm90CisJCSAqIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdC4gKi8KKwkJZGF0YSArPSAoKHVpbnQzMl90KSBieXRlID4+IDgpIDw8IChpICogOCk7CisJCXNraXBfYml0cyhyYXIsIDgpOworCX0KKworCSpmaWx0ZXJfZGF0YSA9IGRhdGE7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIHNhbml0eSBjaGVja2luZy4gKi8KK3N0YXRpYyBpbnQgaXNfdmFsaWRfZmlsdGVyX2Jsb2NrX3N0YXJ0KHN0cnVjdCByYXI1KiByYXIsCisgICAgdWludDMyX3Qgc3RhcnQpCit7CisJY29uc3QgaW50NjRfdCBibG9ja19zdGFydCA9IChzc2l6ZV90KSBzdGFydCArIHJhci0+Y3N0YXRlLndyaXRlX3B0cjsKKwljb25zdCBpbnQ2NF90IGxhc3RfYnMgPSByYXItPmNzdGF0ZS5sYXN0X2Jsb2NrX3N0YXJ0OworCWNvbnN0IHNzaXplX3QgbGFzdF9ibCA9IHJhci0+Y3N0YXRlLmxhc3RfYmxvY2tfbGVuZ3RoOworCisJaWYobGFzdF9icyA9PSAwIHx8IGxhc3RfYmwgPT0gMCkgeworCQkvKiBXZSBkaWRuJ3QgaGF2ZSBhbnkgZmlsdGVycyB5ZXQsIHNvIGFjY2VwdCB0aGlzIG9mZnNldC4gKi8KKwkJcmV0dXJuIDE7CisJfQorCisJaWYoYmxvY2tfc3RhcnQgPj0gbGFzdF9icyArIGxhc3RfYmwpIHsKKwkJLyogQ3VycmVudCBvZmZzZXQgaXMgYmlnZ2VyIHRoYW4gbGFzdCBibG9jaydzIGVuZCBvZmZzZXQsIHNvCisJCSAqIGFjY2VwdCBjdXJyZW50IG9mZnNldC4gKi8KKwkJcmV0dXJuIDE7CisJfQorCisJLyogQW55IG90aGVyIGNhc2UgaXMgbm90IGEgbm9ybWFsIHNpdHVhdGlvbiBhbmQgd2Ugc2hvdWxkIGZhaWwuICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBmaWx0ZXIsIHJlYWQgaXRzIHBhcmFtZXRlcnMgZnJvbSB0aGUgaW5wdXQKKyAqIHN0cmVhbSBhbmQgYWRkIGl0IHRvIHRoZSBmaWx0ZXIgY29sbGVjdGlvbi4gKi8KK3N0YXRpYyBpbnQgcGFyc2VfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGFyLCBjb25zdCB1aW50OF90KiBwKSB7CisJdWludDMyX3QgYmxvY2tfc3RhcnQsIGJsb2NrX2xlbmd0aDsKKwl1aW50MTZfdCBmaWx0ZXJfdHlwZTsKKwlzdHJ1Y3QgZmlsdGVyX2luZm8qIGZpbHQgPSBOVUxMOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhcik7CisKKwkvKiBSZWFkIHRoZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gKi8KKwlpZihBUkNISVZFX09LICE9IHBhcnNlX2ZpbHRlcl9kYXRhKHJhciwgcCwgJmJsb2NrX3N0YXJ0KSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoQVJDSElWRV9PSyAhPSBwYXJzZV9maWx0ZXJfZGF0YShyYXIsIHAsICZibG9ja19sZW5ndGgpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZmaWx0ZXJfdHlwZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWZpbHRlcl90eXBlID4+PSAxMzsKKwlza2lwX2JpdHMocmFyLCAzKTsKKworCS8qIFBlcmZvcm0gc29tZSBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgZmlsdGVyIHBhcmFtZXRlcnMuIE5vdGUgdGhhdCB3ZQorCSAqIGFsbG93IG9ubHkgREVMVEEsIEU4L0U5IGFuZCBBUk0gZmlsdGVycyBoZXJlLCBiZWNhdXNlIHJlc3Qgb2YKKwkgKiBmaWx0ZXJzIGFyZSBub3QgdXNlZCBpbiBSQVJ2NS4gKi8KKworCWlmKGJsb2NrX2xlbmd0aCA8IDQgfHwKKwkgICAgYmxvY2tfbGVuZ3RoID4gMHg0MDAwMDAgfHwKKwkgICAgZmlsdGVyX3R5cGUgPiBGSUxURVJfQVJNIHx8CisJICAgICFpc192YWxpZF9maWx0ZXJfYmxvY2tfc3RhcnQocmFyLCBibG9ja19zdGFydCkpCisJeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSW52YWxpZCBmaWx0ZXIgZW5jb3VudGVyZWQiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogQWxsb2NhdGUgYSBuZXcgZmlsdGVyLiAqLworCWZpbHQgPSBhZGRfbmV3X2ZpbHRlcihyYXIpOworCWlmKGZpbHQgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZmlsdGVyIGRlc2NyaXB0b3IuIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWZpbHQtPnR5cGUgPSBmaWx0ZXJfdHlwZTsKKwlmaWx0LT5ibG9ja19zdGFydCA9IHJhci0+Y3N0YXRlLndyaXRlX3B0ciArIGJsb2NrX3N0YXJ0OworCWZpbHQtPmJsb2NrX2xlbmd0aCA9IGJsb2NrX2xlbmd0aDsKKworCXJhci0+Y3N0YXRlLmxhc3RfYmxvY2tfc3RhcnQgPSBmaWx0LT5ibG9ja19zdGFydDsKKwlyYXItPmNzdGF0ZS5sYXN0X2Jsb2NrX2xlbmd0aCA9IGZpbHQtPmJsb2NrX2xlbmd0aDsKKworCS8qIFJlYWQgc29tZSBtb3JlIGRhdGEgaW4gY2FzZSB0aGlzIGlzIGEgREVMVEEgZmlsdGVyLiBPdGhlciBmaWx0ZXIKKwkgKiB0eXBlcyBkb24ndCByZXF1aXJlIGFueSBhZGRpdGlvbmFsIGRhdGEgb3ZlciB3aGF0IHdhcyBhbHJlYWR5CisJICogcmVhZC4gKi8KKwlpZihmaWx0ZXJfdHlwZSA9PSBGSUxURVJfREVMVEEpIHsKKwkJaW50IGNoYW5uZWxzOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9jb25zdW1lX2JpdHMocmFyLCBwLCA1LCAmY2hhbm5lbHMpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWZpbHQtPmNoYW5uZWxzID0gY2hhbm5lbHMgKyAxOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IGRlY29kZV9jb2RlX2xlbmd0aChzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB1aW50OF90KiBwLAorICAgIHVpbnQxNl90IGNvZGUpCit7CisJaW50IGxiaXRzLCBsZW5ndGggPSAyOworCWlmKGNvZGUgPCA4KSB7CisJCWxiaXRzID0gMDsKKwkJbGVuZ3RoICs9IGNvZGU7CisJfSBlbHNlIHsKKwkJbGJpdHMgPSBjb2RlIC8gNCAtIDE7CisJCWxlbmd0aCArPSAoNCB8IChjb2RlICYgMykpIDw8IGxiaXRzOworCX0KKworCWlmKGxiaXRzID4gMCkgeworCQlpbnQgYWRkOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9jb25zdW1lX2JpdHMocmFyLCBwLCBsYml0cywgJmFkZCkpCisJCQlyZXR1cm4gLTE7CisKKwkJbGVuZ3RoICs9IGFkZDsKKwl9CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgaW50IGNvcHlfc3RyaW5nKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGludCBsZW4sIGludCBkaXN0KSB7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCWNvbnN0IHVpbnQ2NF90IGNtYXNrID0gcmFyLT5jc3RhdGUud2luZG93X21hc2s7CisJY29uc3QgdWludDY0X3Qgd3JpdGVfcHRyID0gcmFyLT5jc3RhdGUud3JpdGVfcHRyICsKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0OworCWludCBpOworCisJaWYgKHJhci0+Y3N0YXRlLndpbmRvd19idWYgPT0gTlVMTCkKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisKKwkvKiBUaGUgdW5wYWNrZXIgc3BlbmRzIG1vc3Qgb2YgdGhlIHRpbWUgaW4gdGhpcyBmdW5jdGlvbi4gSXQgd291bGQgYmUKKwkgKiBhIGdvb2QgaWRlYSB0byBpbnRyb2R1Y2Ugc29tZSBvcHRpbWl6YXRpb25zIGhlcmUuCisJICoKKwkgKiBKdXN0IHJlbWVtYmVyIHRoYXQgdGhpcyBsb29wIHRyZWF0cyBidWZmZXJzIHRoYXQgb3ZlcmxhcCBkaWZmZXJlbnRseQorCSAqIHRoYW4gYnVmZmVycyB0aGF0IGRvIG5vdCBvdmVybGFwLiBUaGlzIGlzIHdoeSBhIHNpbXBsZSBtZW1jcHkoMykKKwkgKiBjYWxsIHdpbGwgbm90IGJlIGVub3VnaC4gKi8KKworCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWNvbnN0IHNzaXplX3Qgd3JpdGVfaWR4ID0gKHdyaXRlX3B0ciArIGkpICYgY21hc2s7CisJCWNvbnN0IHNzaXplX3QgcmVhZF9pZHggPSAod3JpdGVfcHRyICsgaSAtIGRpc3QpICYgY21hc2s7CisJCXJhci0+Y3N0YXRlLndpbmRvd19idWZbd3JpdGVfaWR4XSA9CisJCSAgICByYXItPmNzdGF0ZS53aW5kb3dfYnVmW3JlYWRfaWR4XTsKKwl9CisKKwlyYXItPmNzdGF0ZS53cml0ZV9wdHIgKz0gbGVuOworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IGRvX3VuY29tcHJlc3NfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgY29uc3QgdWludDhfdCogcCkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwl1aW50MTZfdCBudW07CisJaW50IHJldDsKKworCWNvbnN0IHVpbnQ2NF90IGNtYXNrID0gcmFyLT5jc3RhdGUud2luZG93X21hc2s7CisJY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIgPSAmcmFyLT5sYXN0X2Jsb2NrX2hkcjsKKwljb25zdCB1aW50OF90IGJpdF9zaXplID0gMSArIGJmX2JpdF9zaXplKGhkcik7CisKKwl3aGlsZSgxKSB7CisJCWlmKHJhci0+Y3N0YXRlLndyaXRlX3B0ciAtIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID4KKwkJICAgIChyYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSA+PiAxKSkgeworCQkJLyogRG9uJ3QgYWxsb3cgZ3Jvd2luZyBkYXRhIGJ5IG1vcmUgdGhhbiBoYWxmIG9mIHRoZQorCQkJICogd2luZG93IHNpemUgYXQgYSB0aW1lLiBJbiBzdWNoIGNhc2UsIGJyZWFrIHRoZSBsb29wOworCQkJICogIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udGludWUgcHJvY2Vzc2luZworCQkJICogIGZyb20gdGhpcyBtb21lbnQuICovCisJCQlicmVhazsKKwkJfQorCisJCWlmKHJhci0+Yml0cy5pbl9hZGRyID4gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUgLSAxIHx8CisJCSAgICAocmFyLT5iaXRzLmluX2FkZHIgPT0gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUgLSAxICYmCisJCSAgICByYXItPmJpdHMuYml0X2FkZHIgPj0gYml0X3NpemUpKQorCQl7CisJCQkvKiBJZiB0aGUgcHJvZ3JhbSBjb3VudGVyIGlzIGhlcmUsIGl0IG1lYW5zIHRoZQorCQkJICogZnVuY3Rpb24gaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIGJsb2NrLiAqLworCQkJcmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIERlY29kZSB0aGUgbmV4dCBsaXRlcmFsLiAqLworCQlpZihBUkNISVZFX09LICE9IGRlY29kZV9udW1iZXIoYSwgJnJhci0+Y3N0YXRlLmxkLCBwLCAmbnVtKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJLyogTnVtIGhvbGRzIGEgZGVjb21wcmVzc2lvbiBsaXRlcmFsLCBvciAnY29tbWFuZCBjb2RlJy4KKwkJICoKKwkJICogLSBWYWx1ZXMgbG93ZXIgdGhhbiAyNTYgYXJlIGp1c3QgYnl0ZXMuIFRob3NlIGNvZGVzCisJCSAqICAgY2FuIGJlIHN0b3JlZCBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBkaXJlY3RseS4KKwkJICoKKwkJICogLSBDb2RlIDI1NiBkZWZpbmVzIGEgbmV3IGZpbHRlciwgd2hpY2ggaXMgbGF0ZXIgdXNlZCB0bworCQkgKiAgIHJhbnNmb3JtIHRoZSBkYXRhIGJsb2NrIGFjY29yZGluZ2x5IHRvIHRoZSBmaWx0ZXIgdHlwZS4KKwkJICogICBUaGUgZGF0YSBibG9jayBuZWVkcyB0byBiZSBmdWxseSB1bmNvbXByZXNzZWQgZmlyc3QuCisJCSAqCisJCSAqIC0gQ29kZSBiaWdnZXIgdGhhbiAyNTcgYW5kIHNtYWxsZXIgdGhhbiAyNjIgZGVmaW5lCisJCSAqICAgYSByZXBldGl0aW9uIHBhdHRlcm4gdGhhdCBzaG91bGQgYmUgY29waWVkIGZyb20KKwkJICogICBhbiBhbHJlYWR5IHVuY29tcHJlc3NlZCBjaHVuayBvZiBkYXRhLgorCQkgKi8KKworCQlpZihudW0gPCAyNTYpIHsKKwkJCS8qIERpcmVjdGx5IHN0b3JlIHRoZSBieXRlLiAqLworCQkJaW50NjRfdCB3cml0ZV9pZHggPSByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCQkJICAgIHJhci0+Y3N0YXRlLndyaXRlX3B0cisrOworCisJCQlyYXItPmNzdGF0ZS53aW5kb3dfYnVmW3dyaXRlX2lkeCAmIGNtYXNrXSA9CisJCQkgICAgKHVpbnQ4X3QpIG51bTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYobnVtID49IDI2MikgeworCQkJdWludDE2X3QgZGlzdF9zbG90OworCQkJaW50IGxlbiA9IGRlY29kZV9jb2RlX2xlbmd0aChyYXIsIHAsIG51bSAtIDI2MiksCisJCQkJZGJpdHMsCisJCQkJZGlzdCA9IDE7CisKKwkJCWlmKGxlbiA9PSAtMSkgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkJICAgICJGYWlsZWQgdG8gZGVjb2RlIHRoZSBjb2RlIGxlbmd0aCIpOworCisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gZGVjb2RlX251bWJlcihhLCAmcmFyLT5jc3RhdGUuZGQsIHAsCisJCQkgICAgJmRpc3Rfc2xvdCkpCisJCQl7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCQkgICAgIkZhaWxlZCB0byBkZWNvZGUgdGhlIGRpc3RhbmNlIHNsb3QiKTsKKworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJfQorCisJCQlpZihkaXN0X3Nsb3QgPCA0KSB7CisJCQkJZGJpdHMgPSAwOworCQkJCWRpc3QgKz0gZGlzdF9zbG90OworCQkJfSBlbHNlIHsKKwkJCQlkYml0cyA9IGRpc3Rfc2xvdCAvIDIgLSAxOworCisJCQkJLyogQ2FzdCB0byB1aW50MzJfdCB3aWxsIG1ha2Ugc3VyZSB0aGUgc2hpZnQKKwkJCQkgKiBsZWZ0IG9wZXJhdGlvbiB3b24ndCBwcm9kdWNlIHVuZGVmaW5lZAorCQkJCSAqIHJlc3VsdC4gVGhlbiwgdGhlIHVpbnQzMl90IHR5cGUgd2lsbAorCQkJCSAqIGJlIGltcGxpY2l0bHkgY2FzdGVkIHRvIGludC4gKi8KKwkJCQlkaXN0ICs9ICh1aW50MzJfdCkgKDIgfAorCQkJCSAgICAoZGlzdF9zbG90ICYgMSkpIDw8IGRiaXRzOworCQkJfQorCisJCQlpZihkYml0cyA+IDApIHsKKwkJCQlpZihkYml0cyA+PSA0KSB7CisJCQkJCXVpbnQzMl90IGFkZCA9IDA7CisJCQkJCXVpbnQxNl90IGxvd19kaXN0OworCisJCQkJCWlmKGRiaXRzID4gNCkgeworCQkJCQkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2JpdHNfMzIoCisJCQkJCQkgICAgcmFyLCBwLCAmYWRkKSkgeworCQkJCQkJCS8qIFJldHVybiBFT0YgaWYgd2UKKwkJCQkJCQkgKiBjYW4ndCByZWFkIG1vcmUKKwkJCQkJCQkgKiBkYXRhLiAqLworCQkJCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCQkJCX0KKworCQkJCQkJc2tpcF9iaXRzKHJhciwgZGJpdHMgLSA0KTsKKwkJCQkJCWFkZCA9IChhZGQgPj4gKAorCQkJCQkJICAgIDM2IC0gZGJpdHMpKSA8PCA0OworCQkJCQkJZGlzdCArPSBhZGQ7CisJCQkJCX0KKworCQkJCQlpZihBUkNISVZFX09LICE9IGRlY29kZV9udW1iZXIoYSwKKwkJCQkJICAgICZyYXItPmNzdGF0ZS5sZGQsIHAsICZsb3dfZGlzdCkpCisJCQkJCXsKKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCQkJCSAgICAiRmFpbGVkIHRvIGRlY29kZSB0aGUgIgorCQkJCQkJICAgICJkaXN0YW5jZSBzbG90Iik7CisKKwkJCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJCQl9CisKKwkJCQkJaWYoZGlzdCA+PSBJTlRfTUFYIC0gbG93X2Rpc3QgLSAxKSB7CisJCQkJCQkvKiBUaGlzIG9ubHkgaGFwcGVucyBpbgorCQkJCQkJICogaW52YWxpZCBhcmNoaXZlcy4gKi8KKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCQkgICAgIkRpc3RhbmNlIHBvaW50ZXIgIgorCQkJCQkJICAgICJvdmVyZmxvdyIpOworCQkJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQkJCX0KKworCQkJCQlkaXN0ICs9IGxvd19kaXN0OworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGRiaXRzIGlzIG9uZSBvZiBbMCwxLDIsM10gKi8KKwkJCQkJaW50IGFkZDsKKworCQkJCQlpZihBUkNISVZFX09LICE9IHJlYWRfY29uc3VtZV9iaXRzKHJhciwKKwkJCQkJICAgICBwLCBkYml0cywgJmFkZCkpIHsKKwkJCQkJCS8qIFJldHVybiBFT0YgaWYgd2UgY2FuJ3QgcmVhZAorCQkJCQkJICogbW9yZSBkYXRhLiAqLworCQkJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkJCQl9CisKKwkJCQkJZGlzdCArPSBhZGQ7CisJCQkJfQorCQkJfQorCisJCQlpZihkaXN0ID4gMHgxMDApIHsKKwkJCQlsZW4rKzsKKworCQkJCWlmKGRpc3QgPiAweDIwMDApIHsKKwkJCQkJbGVuKys7CisKKwkJCQkJaWYoZGlzdCA+IDB4NDAwMDApIHsKKwkJCQkJCWxlbisrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlkaXN0X2NhY2hlX3B1c2gocmFyLCBkaXN0KTsKKwkJCXJhci0+Y3N0YXRlLmxhc3RfbGVuID0gbGVuOworCisJCQlpZihBUkNISVZFX09LICE9IGNvcHlfc3RyaW5nKGEsIGxlbiwgZGlzdCkpCisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYobnVtID09IDI1NikgeworCQkJLyogQ3JlYXRlIGEgZmlsdGVyLiAqLworCQkJcmV0ID0gcGFyc2VfZmlsdGVyKGEsIHApOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCQkJcmV0dXJuIHJldDsKKworCQkJY29udGludWU7CisJCX0gZWxzZSBpZihudW0gPT0gMjU3KSB7CisJCQlpZihyYXItPmNzdGF0ZS5sYXN0X2xlbiAhPSAwKSB7CisJCQkJaWYoQVJDSElWRV9PSyAhPSBjb3B5X3N0cmluZyhhLAorCQkJCSAgICByYXItPmNzdGF0ZS5sYXN0X2xlbiwKKwkJCQkgICAgcmFyLT5jc3RhdGUuZGlzdF9jYWNoZVswXSkpCisJCQkJeworCQkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogbnVtIDwgMjYyICovCisJCQljb25zdCBpbnQgaWR4ID0gbnVtIC0gMjU4OworCQkJY29uc3QgaW50IGRpc3QgPSBkaXN0X2NhY2hlX3RvdWNoKHJhciwgaWR4KTsKKworCQkJdWludDE2X3QgbGVuX3Nsb3Q7CisJCQlpbnQgbGVuOworCisJCQlpZihBUkNISVZFX09LICE9IGRlY29kZV9udW1iZXIoYSwgJnJhci0+Y3N0YXRlLnJkLCBwLAorCQkJICAgICZsZW5fc2xvdCkpIHsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCX0KKworCQkJbGVuID0gZGVjb2RlX2NvZGVfbGVuZ3RoKHJhciwgcCwgbGVuX3Nsb3QpOworCQkJcmFyLT5jc3RhdGUubGFzdF9sZW4gPSBsZW47CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gY29weV9zdHJpbmcoYSwgbGVuLCBkaXN0KSkKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUaGUgcHJvZ3JhbSBjb3VudGVyIHNob3VsZG4ndCByZWFjaCBoZXJlLiAqLworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJVbnN1cHBvcnRlZCBibG9jayBjb2RlOiAweCV4IiwgbnVtKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogQmluYXJ5IHNlYXJjaCBmb3IgdGhlIFJBUnY1IHNpZ25hdHVyZS4gKi8KK3N0YXRpYyBpbnQgc2Nhbl9mb3Jfc2lnbmF0dXJlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwljb25zdCB1aW50OF90KiBwOworCWNvbnN0IGludCBjaHVua19zaXplID0gNTEyOworCXNzaXplX3QgaTsKKwljaGFyIHNpZ25hdHVyZVtzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKV07CisKKwkvKiBJZiB3ZSdyZSBoZXJlLCBpdCBtZWFucyB3ZSdyZSBvbiBhbiAndW5rbm93biB0ZXJyaXRvcnknIGRhdGEuCisJICogVGhlcmUncyBubyBpbmRpY2F0aW9uIHdoYXQga2luZCBvZiBkYXRhIHdlJ3JlIHJlYWRpbmcgaGVyZS4KKwkgKiBJdCBjb3VsZCBiZSBzb21lIHRleHQgY29tbWVudCwgYW55IGtpbmQgb2YgYmluYXJ5IGRhdGEsCisJICogZGlnaXRhbCBzaWduLCBkcmFnb25zLCBldGMuCisJICoKKwkgKiBXZSB3YW50IHRvIGZpbmQgYSB2YWxpZCBSQVJ2NSBtYWdpYyBoZWFkZXIgaW5zaWRlIHRoaXMgdW5rbm93bgorCSAqIGRhdGEuICovCisKKwkvKiBJcyBpdCBwb3NzaWJsZSBpbiBsaWJhcmNoaXZlIHRvIGp1c3Qgc2tpcCBldmVyeXRoaW5nIHVudGlsIHRoZQorCSAqIGVuZCBvZiB0aGUgZmlsZT8gSWYgc28sIGl0IHdvdWxkIGJlIGEgYmV0dGVyIGFwcHJvYWNoIHRoYW4gdGhlCisJICogY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiAqLworCisJcmFyNV9zaWduYXR1cmUoc2lnbmF0dXJlKTsKKworCXdoaWxlKDEpIHsKKwkJaWYoIXJlYWRfYWhlYWQoYSwgY2h1bmtfc2l6ZSwgJnApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWZvcihpID0gMDsgaSA8IGNodW5rX3NpemUgLSAoaW50KXNpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpOworCQkgICAgaSsrKSB7CisJCQlpZihtZW1jbXAoJnBbaV0sIHNpZ25hdHVyZSwKKwkJCSAgICBzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKSkgPT0gMCkgeworCQkJCS8qIENvbnN1bWUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSd2ZSB1c2VkIHRvCisJCQkJICogc2VhcmNoIGZvciB0aGUgc2lnbmF0dXJlLCBhcyB3ZWxsIGFzIHRoZQorCQkJCSAqIG51bWJlciBvZiBieXRlcyB1c2VkIGJ5IHRoZSBzaWduYXR1cmUKKwkJCQkgKiBpdHNlbGYuIEFmdGVyIHRoaXMgd2Ugc2hvdWxkIGJlIHN0YW5kaW5nCisJCQkJICogb24gYSB2YWxpZCBiYXNlIGJsb2NrIGhlYWRlci4gKi8KKwkJCQkodm9pZCkgY29uc3VtZShhLAorCQkJCSAgICBpICsgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcikpOworCQkJCXJldHVybiBBUkNISVZFX09LOworCQkJfQorCQl9CisKKwkJY29uc3VtZShhLCBjaHVua19zaXplKTsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9GQVRBTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIHN3aXRjaCB0aGUgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlIHRvIGFub3RoZXIgZmlsZSwKKyAqIGkuZS4gZnJvbSBwYXJ0MDMgdG8gcGFydCAwNC4gKi8KK3N0YXRpYyBpbnQgYWR2YW5jZV9tdWx0aXZvbHVtZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJaW50IGxyZXQ7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCisJLyogQSBzbWFsbCBzdGF0ZSBtYWNoaW5lIHRoYXQgd2lsbCBza2lwIHVubmVjZXNzYXJ5IGRhdGEsIG5lZWRlZCB0bworCSAqIHN3aXRjaCBmcm9tIG9uZSBtdWx0aXZvbHVtZSB0byBhbm90aGVyLiBTdWNoIHNraXBwaW5nIGlzIG5lZWRlZCBpZgorCSAqIHdlIHdhbnQgdG8gYmUgYW4gc3RyZWFtLW9yaWVudGVkIChpbnN0ZWFkIG9mIGZpbGUtb3JpZW50ZWQpCisJICogdW5wYWNrZXIuCisJICoKKwkgKiBUaGUgc3RhdGUgbWFjaGluZSBzdGFydHMgd2l0aCBgcmFyLT5tYWluLmVuZGFyY2AgPT0gMC4gSXQgYWxzbworCSAqIGFzc3VtZXMgdGhhdCBjdXJyZW50IHN0cmVhbSBwb2ludGVyIHBvaW50cyB0byBzb21lIGJhc2UgYmxvY2sKKwkgKiBoZWFkZXIuCisJICoKKwkgKiBUaGUgYGVuZGFyY2AgZmllbGQgaXMgYmVpbmcgc2V0IHdoZW4gdGhlIGJhc2UgYmxvY2sgcGFyc2luZworCSAqIGZ1bmN0aW9uIGVuY291bnRlcnMgdGhlICdlbmQgb2YgYXJjaGl2ZScgbWFya2VyLgorCSAqLworCisJd2hpbGUoMSkgeworCQlpZihyYXItPm1haW4uZW5kYXJjID09IDEpIHsKKwkJCWludCBsb29waW5nID0gMTsKKworCQkJcmFyLT5tYWluLmVuZGFyYyA9IDA7CisKKwkJCXdoaWxlKGxvb3BpbmcpIHsKKwkJCQlscmV0ID0gc2tpcF9iYXNlX2Jsb2NrKGEpOworCQkJCXN3aXRjaChscmV0KSB7CisJCQkJCWNhc2UgQVJDSElWRV9SRVRSWToKKwkJCQkJCS8qIENvbnRpbnVlIGxvb3BpbmcuICovCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBBUkNISVZFX09LOgorCQkJCQkJLyogQnJlYWsgbG9vcC4gKi8KKwkJCQkJCWxvb3BpbmcgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQkvKiBGb3J3YXJkIGFueSBlcnJvcnMgdG8gdGhlCisJCQkJCQkgKiBjYWxsZXIuICovCisJCQkJCQlyZXR1cm4gbHJldDsKKwkJCQl9CisJCQl9CisKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogU2tpcCBjdXJyZW50IGJhc2UgYmxvY2suIEluIG9yZGVyIHRvIHByb3Blcmx5IHNraXAKKwkJCSAqIGl0LCB3ZSByZWFsbHkgbmVlZCB0byBzaW1wbHkgcGFyc2UgaXQgYW5kIGRpc2NhcmQKKwkJCSAqIHRoZSByZXN1bHRzLiAqLworCisJCQlscmV0ID0gc2tpcF9iYXNlX2Jsb2NrKGEpOworCQkJaWYobHJldCA9PSBBUkNISVZFX0ZBVEFMIHx8IGxyZXQgPT0gQVJDSElWRV9GQUlMRUQpCisJCQkJcmV0dXJuIGxyZXQ7CisKKwkJCS8qIFRoZSBgc2tpcF9iYXNlX2Jsb2NrYCBmdW5jdGlvbiB0ZWxscyB1cyBpZiB3ZQorCQkJICogc2hvdWxkIGNvbnRpbnVlIHdpdGggc2tpcHBpbmcsIG9yIHdlIHNob3VsZCBzdG9wCisJCQkgKiBza2lwcGluZy4gV2UncmUgdHJ5aW5nIHRvIHNraXAgZXZlcnl0aGluZyB1cCB0bworCQkJICogYSBiYXNlIEZJTEUgYmxvY2suICovCisKKwkJCWlmKGxyZXQgIT0gQVJDSElWRV9SRVRSWSkgeworCQkJCS8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgc2tpcHBpbmcsIG9yIHdlCisJCQkJICogaGF2ZSBqdXN0IHNraXBwZWQgYSBGSUxFIGJhc2UgYmxvY2suLi4gKi8KKworCQkJCWlmKHJhci0+bWFpbi5lbmRhcmMgPT0gMCkgeworCQkJCQlyZXR1cm4gbHJldDsKKwkJCQl9IGVsc2UgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogTWVyZ2VzIHRoZSBwYXJ0aWFsIGJsb2NrIGZyb20gdGhlIGZpcnN0IG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZSwgYW5kCisgKiBwYXJ0aWFsIGJsb2NrIGZyb20gdGhlIHNlY29uZCBtdWx0aXZvbHVtZSBhcmNoaXZlIGZpbGUuIFRoZSByZXN1bHQgaXMKKyAqIGEgY2h1bmsgb2YgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIHdob2xlIGJsb2NrLCBhbmQgdGhlIHN0cmVhbSBwb2ludGVyCisgKiBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBibG9jayBpbiB0aGUgc2Vjb25kIG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZS4gKi8KK3N0YXRpYyBpbnQgbWVyZ2VfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3NpemVfdCBibG9ja19zaXplLAorICAgIGNvbnN0IHVpbnQ4X3QqKiBwKQoreworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlzc2l6ZV90IGN1cl9ibG9ja19zaXplLCBwYXJ0aWFsX29mZnNldCA9IDA7CisJY29uc3QgdWludDhfdCogbHA7CisJaW50IHJldDsKKworCWlmKHJhci0+bWVyZ2VfbW9kZSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIlJlY3Vyc2l2ZSBtZXJnZSBpcyBub3QgYWxsb3dlZCIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFNldCBhIGZsYWcgdGhhdCB3ZSdyZSBpbiB0aGUgc3dpdGNoaW5nIG1vZGUuICovCisJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMTsKKworCS8qIFJlYWxsb2NhdGUgdGhlIG1lbW9yeSB3aGljaCB3aWxsIGhvbGQgdGhlIHdob2xlIGJsb2NrLiAqLworCWlmKHJhci0+dm9sLnB1c2hfYnVmKQorCQlmcmVlKCh2b2lkKikgcmFyLT52b2wucHVzaF9idWYpOworCisJLyogSW5jcmVhc2luZyB0aGUgYWxsb2NhdGlvbiBibG9jayBieSA4IGlzIGR1ZSB0byBiaXQgcmVhZGluZyBmdW5jdGlvbnMsCisJICogd2hpY2ggYXJlIHVzaW5nIGFkZGl0aW9uYWwgMiBvciA0IGJ5dGVzLiBBbGxvY2F0aW5nIHRoZSBibG9jayBzaXplCisJICogYnkgZXhhY3QgdmFsdWUgd291bGQgbWFrZSBiaXQgcmVhZGVyIHBlcmZvcm0gcmVhZHMgZnJvbSBpbnZhbGlkCisJICogbWVtb3J5IGJsb2NrIHdoZW4gcmVhZGluZyB0aGUgbGFzdCBieXRlIGZyb20gdGhlIGJ1ZmZlci4gKi8KKwlyYXItPnZvbC5wdXNoX2J1ZiA9IG1hbGxvYyhibG9ja19zaXplICsgOCk7CisJaWYoIXJhci0+dm9sLnB1c2hfYnVmKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhIG1lcmdlIGJsb2NrIGJ1ZmZlci4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogVmFsZ3JpbmQgY29tcGxhaW5zIGlmIHRoZSBleHRlbnNpb24gYmxvY2sgZm9yIGJpdCByZWFkZXIgaXMgbm90CisJICogaW5pdGlhbGl6ZWQsIHNvIGluaXRpYWxpemUgaXQuICovCisJbWVtc2V0KCZyYXItPnZvbC5wdXNoX2J1ZltibG9ja19zaXplXSwgMCwgOCk7CisKKwkvKiBBIHNpbmdsZSBibG9jayBjYW4gc3BhbiBhY3Jvc3MgbXVsdGlwbGUgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlcywKKwkgKiBzbyB3ZSB1c2UgYSBsb29wIGhlcmUuIFRoaXMgbG9vcCB3aWxsIGNvbnN1bWUgZW5vdWdoIG11bHRpdm9sdW1lCisJICogYXJjaGl2ZSBmaWxlcyB1bnRpbCB0aGUgd2hvbGUgYmxvY2sgaXMgcmVhZC4gKi8KKworCXdoaWxlKDEpIHsKKwkJLyogR2V0IHRoZSBzaXplIG9mIGN1cnJlbnQgYmxvY2sgY2h1bmsgaW4gdGhpcyBtdWx0aXZvbHVtZQorCQkgKiBhcmNoaXZlIGZpbGUgYW5kIHJlYWQgaXQuICovCisJCWN1cl9ibG9ja19zaXplID0gcmFyNV9taW4ocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZywKKwkJICAgIGJsb2NrX3NpemUgLSBwYXJ0aWFsX29mZnNldCk7CisKKwkJaWYoY3VyX2Jsb2NrX3NpemUgPT0gMCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiRW5jb3VudGVyZWQgYmxvY2sgc2l6ZSA9PSAwIGR1cmluZyBibG9jayBtZXJnZSIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQlpZighcmVhZF9haGVhZChhLCBjdXJfYmxvY2tfc2l6ZSwgJmxwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkvKiBTYW5pdHkgY2hlY2s7IHRoZXJlIHNob3VsZCBuZXZlciBiZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGlzCisJCSAqIGZ1bmN0aW9uIHJlYWRzIG1vcmUgZGF0YSB0aGFuIHRoZSBibG9jaydzIHNpemUuICovCisJCWlmKHBhcnRpYWxfb2Zmc2V0ICsgY3VyX2Jsb2NrX3NpemUgPiBibG9ja19zaXplKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkgICAgIkNvbnN1bWVkIHRvbyBtdWNoIGRhdGEgd2hlbiBtZXJnaW5nIGJsb2Nrcy4iKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJLyogTWVyZ2UgcHJldmlvdXMgYmxvY2sgY2h1bmsgd2l0aCBjdXJyZW50IGJsb2NrIGNodW5rLAorCQkgKiBvciBjcmVhdGUgZmlyc3QgYmxvY2sgY2h1bmsgaWYgdGhpcyBpcyBvdXIgZmlyc3QKKwkJICogaXRlcmF0aW9uLiAqLworCQltZW1jcHkoJnJhci0+dm9sLnB1c2hfYnVmW3BhcnRpYWxfb2Zmc2V0XSwgbHAsIGN1cl9ibG9ja19zaXplKTsKKworCQkvKiBBZHZhbmNlIHRoZSBzdHJlYW0gcmVhZCBwb2ludGVyIGJ5IHRoaXMgYmxvY2sgY2h1bmsgc2l6ZS4gKi8KKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIGN1cl9ibG9ja19zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkvKiBVcGRhdGUgdGhlIHBvaW50ZXJzLiBgcGFydGlhbF9vZmZzZXRgIGNvbnRhaW5zIGluZm9ybWF0aW9uCisJCSAqIGFib3V0IHRoZSBzdW0gb2YgbWVyZ2VkIGJsb2NrIGNodW5rcy4gKi8KKwkJcGFydGlhbF9vZmZzZXQgKz0gY3VyX2Jsb2NrX3NpemU7CisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgLT0gY3VyX2Jsb2NrX3NpemU7CisKKwkJLyogSWYgYHBhcnRpYWxfb2Zmc2V0YCBpcyB0aGUgc2FtZSBhcyBgYmxvY2tfc2l6ZWAsIHRoaXMgbWVhbnMKKwkJICogd2UndmUgbWVyZ2VkIGFsbCBibG9jayBjaHVua3MgYW5kIHdlIGhhdmUgYSB2YWxpZCBmdWxsCisJCSAqIGJsb2NrLiAqLworCQlpZihwYXJ0aWFsX29mZnNldCA9PSBibG9ja19zaXplKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRvbid0IGhhdmUgYW55IGJ5dGVzIHRvIHJlYWQsIHRoaXMgbWVhbnMgd2Ugc2hvdWxkCisJCSAqIHN3aXRjaCB0byBhbm90aGVyIG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZS4gKi8KKwkJaWYocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9PSAwKSB7CisJCQlyYXItPm1lcmdlX21vZGUrKzsKKwkJCXJldCA9IGFkdmFuY2VfbXVsdGl2b2x1bWUoYSk7CisJCQlyYXItPm1lcmdlX21vZGUtLTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCSpwID0gcmFyLT52b2wucHVzaF9idWY7CisKKwkvKiBJZiB3ZSdyZSBoZXJlLCB3ZSBjYW4gcmVzdW1lIHVucGFja2luZyBieSBwcm9jZXNzaW5nIHRoZSBibG9jaworCSAqIHBvaW50ZWQgdG8gYnkgdGhlIGAqcGAgbWVtb3J5IHBvaW50ZXIuICovCisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2Jsb2NrKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwljb25zdCB1aW50OF90KiBwOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlpbnQgcmV0OworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB0byBiZSBwcm9jZXNzZWQsIHRoaXMgbW9zdCBwcm9iYWJseSBtZWFucworCSAqIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IHZvbHVtZS4gKi8KKwlpZihyYXItPm1haW4udm9sdW1lICYmIHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPT0gMCkgeworCQlyZXQgPSBhZHZhbmNlX211bHRpdm9sdW1lKGEpOworCQlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCkgeworCQlzc2l6ZV90IGJsb2NrX3NpemU7CisJCXNzaXplX3QgdG9fc2tpcDsKKwkJc3NpemVfdCBjdXJfYmxvY2tfc2l6ZTsKKworCQkvKiBUaGUgaGVhZGVyIHNpemUgd29uJ3QgYmUgYmlnZ2VyIHRoYW4gNiBieXRlcy4gKi8KKwkJaWYoIXJlYWRfYWhlYWQoYSwgNiwgJnApKSB7CisJCQkvKiBGYWlsZWQgdG8gcHJlZmV0Y2ggZGF0YSBibG9jayBoZWFkZXIuICovCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKgorCQkgKiBSZWFkIGJsb2NrX3NpemUgYnkgcGFyc2luZyBibG9jayBoZWFkZXIuIFZhbGlkYXRlIHRoZSBoZWFkZXIKKwkJICogYnkgY2FsY3VsYXRpbmcgQ1JDIGJ5dGUgc3RvcmVkIGluc2lkZSB0aGUgaGVhZGVyLiBTaXplIG9mCisJCSAqIHRoZSBoZWFkZXIgaXMgbm90IGNvbnN0YW50IChibG9jayBzaXplIGNhbiBiZSBzdG9yZWQgZWl0aGVyCisJCSAqIGluIDEgb3IgMiBieXRlcyksIHRoYXQncyB3aHkgYmxvY2sgc2l6ZSBpcyBsZWZ0IG91dCBmcm9tIHRoZQorCQkgKiBgY29tcHJlc3NlZF9ibG9ja19oZWFkZXJgIHN0cnVjdHVyZSBhbmQgcmV0dXJuZWQgYnkKKwkJICogYHBhcnNlX2Jsb2NrX2hlYWRlcmAgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gKi8KKworCQlyZXQgPSBwYXJzZV9ibG9ja19oZWFkZXIoYSwgcCwgJmJsb2NrX3NpemUsCisJCSAgICAmcmFyLT5sYXN0X2Jsb2NrX2hkcik7CisJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJLyogU2tpcCBibG9jayBoZWFkZXIuIE5leHQgZGF0YSBpcyBodWZmbWFuIHRhYmxlcywKKwkJICogaWYgcHJlc2VudC4gKi8KKwkJdG9fc2tpcCA9IHNpemVvZihzdHJ1Y3QgY29tcHJlc3NlZF9ibG9ja19oZWFkZXIpICsKKwkJCWJmX2J5dGVfY291bnQoJnJhci0+bGFzdF9ibG9ja19oZHIpICsgMTsKKworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdG9fc2tpcCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyAtPSB0b19za2lwOworCisJCS8qIFRoZSBibG9jayBzaXplIGdpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3aG9sZSBibG9jayBzaXplLAorCQkgKiBidXQgdGhlIGJsb2NrIGNvdWxkIGJlIHN0b3JlZCBpbiBzcGxpdCBmb3JtIHdoZW4gdXNpbmcKKwkJICogbXVsdGktdm9sdW1lIGFyY2hpdmVzLiBJbiB0aGlzIGNhc2UsIHRoZSBibG9jayBzaXplIHdpbGwgYmUKKwkJICogYmlnZ2VyIHRoYW4gdGhlIGFjdHVhbCBkYXRhIHN0b3JlZCBpbiB0aGlzIGZpbGUuIFJlbWFpbmluZworCQkgKiBwYXJ0IG9mIHRoZSBkYXRhIHdpbGwgYmUgaW4gYW5vdGhlciBmaWxlLiAqLworCisJCWN1cl9ibG9ja19zaXplID0KKwkJCXJhcjVfbWluKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcsIGJsb2NrX3NpemUpOworCisJCWlmKGJsb2NrX3NpemUgPiByYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nKSB7CisJCQkvKiBJZiBjdXJyZW50IGJsb2Nrcycgc2l6ZSBpcyBiaWdnZXIgdGhhbiBvdXIgZGF0YQorCQkJICogc2l6ZSwgdGhpcyBtZWFucyB3ZSBoYXZlIGEgbXVsdGl2b2x1bWUgYXJjaGl2ZS4KKwkJCSAqIEluIHRoaXMgY2FzZSwgc2tpcCBhbGwgYmFzZSBoZWFkZXJzIHVudGlsIHRoZSBlbmQKKwkJCSAqIG9mIHRoZSBmaWxlLCBwcm9jZWVkIHRvIG5leHQgInBhcnRYWFgucmFyIiB2b2x1bWUsCisJCQkgKiBmaW5kIGl0cyBzaWduYXR1cmUsIHNraXAgYWxsIGhlYWRlcnMgdXAgdG8gdGhlIGZpcnN0CisJCQkgKiBGSUxFIGJhc2UgaGVhZGVyLCBhbmQgY29udGludWUgZnJvbSB0aGVyZS4KKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgYG1lcmdlX2Jsb2NrYCB3aWxsIHVwZGF0ZSB0aGUgYHJhcmAKKwkJCSAqIGNvbnRleHQgc3RydWN0dXJlIHF1aXRlIGV4dGVuc2l2ZWx5LiAqLworCisJCQlyZXQgPSBtZXJnZV9ibG9jayhhLCBibG9ja19zaXplLCAmcCk7CisJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWN1cl9ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKKworCQkJLyogQ3VycmVudCBzdHJlYW0gcG9pbnRlciBzaG91bGQgYmUgbm93IGRpcmVjdGx5CisJCQkgKiAqYWZ0ZXIqIHRoZSBibG9jayB0aGF0IHNwYW5uZWQgdGhyb3VnaCBtdWx0aXBsZQorCQkJICogYXJjaGl2ZSBmaWxlcy4gYHBgIHBvaW50ZXIgc2hvdWxkIGhhdmUgdGhlIGRhdGEgb2YKKwkJCSAqIHRoZSAqd2hvbGUqIGJsb2NrIChtZXJnZWQgZnJvbSBwYXJ0aWFsIGJsb2NrcworCQkJICogc3RvcmVkIGluIG11bHRpcGxlIGFyY2hpdmVzIGZpbGVzKS4gKi8KKwkJfSBlbHNlIHsKKwkJCXJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSA9IDA7CisKKwkJCS8qIFJlYWQgdGhlIHdob2xlIGJsb2NrIHNpemUgaW50byBtZW1vcnkuIFRoaXMgY2FuIHRha2UKKwkJCSAqIHVwIHRvICA4IG1lZ2FieXRlcyBvZiBtZW1vcnkgaW4gdGhlb3JldGljYWwgY2FzZXMuCisJCQkgKiBNaWdodCBiZSB3b3J0aCB0byBvcHRpbWl6ZSB0aGlzIGFuZCB1c2UgYSBzdGFuZGFyZAorCQkJICogY2h1bmsgb2YgNGtiJ3MuICovCisJCQlpZighcmVhZF9haGVhZChhLCA0ICsgY3VyX2Jsb2NrX3NpemUsICZwKSkgeworCQkJCS8qIEZhaWxlZCB0byBwcmVmZXRjaCBibG9jayBkYXRhLiAqLworCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCX0KKwkJfQorCisJCXJhci0+Y3N0YXRlLmJsb2NrX2J1ZiA9IHA7CisJCXJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplID0gY3VyX2Jsb2NrX3NpemU7CisJCXJhci0+Y3N0YXRlLmJsb2NrX3BhcnNpbmdfZmluaXNoZWQgPSAwOworCisJCXJhci0+Yml0cy5pbl9hZGRyID0gMDsKKwkJcmFyLT5iaXRzLmJpdF9hZGRyID0gMDsKKworCQlpZihiZl9pc190YWJsZV9wcmVzZW50KCZyYXItPmxhc3RfYmxvY2tfaGRyKSkgeworCQkJLyogTG9hZCBIdWZmbWFuIHRhYmxlcy4gKi8KKwkJCXJldCA9IHBhcnNlX3RhYmxlcyhhLCByYXIsIHApOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCQkvKiBFcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbiBvZiBIdWZmbWFuCisJCQkJICogdGFibGVzLiAqLworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBCbG9jayBwYXJzaW5nIG5vdCBmaW5pc2hlZCwgcmV1c2UgcHJldmlvdXMgbWVtb3J5IGJ1ZmZlci4gKi8KKwkJcCA9IHJhci0+Y3N0YXRlLmJsb2NrX2J1ZjsKKwl9CisKKwkvKiBVbmNvbXByZXNzIHRoZSBibG9jaywgb3IgYSBwYXJ0IG9mIGl0LCBkZXBlbmRpbmcgb24gaG93IG1hbnkgYnl0ZXMKKwkgKiB3aWxsIGJlIGdlbmVyYXRlZCBieSB1bmNvbXByZXNzaW5nIHRoZSBibG9jay4KKwkgKgorCSAqIEluIGNhc2UgdG9vIG1hbnkgYnl0ZXMgd2lsbCBiZSBnZW5lcmF0ZWQsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorCSAqIGFnYWluIHdpbGwgcmVzdW1lIHRoZSB1bmNvbXByZXNzaW9uIG9wZXJhdGlvbi4gKi8KKwlyZXQgPSBkb191bmNvbXByZXNzX2Jsb2NrKGEsIHApOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCAmJgorCSAgICByYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPT0gMCAmJgorCSAgICByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZSA+IDApCisJeworCQkvKiBJZiB3ZSdyZSBwcm9jZXNzaW5nIGEgbm9ybWFsIGJsb2NrLCBjb25zdW1lIHRoZSB3aG9sZQorCQkgKiBibG9jay4gV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IHJlYWQgdGhlIHdob2xlCisJCSAqIGJsb2NrIHRvIG1lbW9yeS4gKi8KKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgLT0gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemU7CisJfSBlbHNlIGlmKHJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSkgeworCQkvKiBEb24ndCBjb25zdW1lIHRoZSBibG9jayBpZiB3ZSdyZSBkb2luZyBtdWx0aXZvbHVtZQorCQkgKiBwcm9jZXNzaW5nLiBUaGUgdm9sdW1lIHN3aXRjaGluZyBmdW5jdGlvbiB3aWxsIGNvbnN1bWUKKwkJICogdGhlIHByb3BlciBjb3VudCBvZiBieXRlcyBpbnN0ZWFkLiAqLworCQlyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPSAwOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBQb3BzIHRoZSBgYnVmYCwgYHNpemVgIGFuZCBgb2Zmc2V0YCBmcm9tIHRoZSAiZGF0YSByZWFkeSIgc3RhY2suCisgKgorICogUmV0dXJucyBBUkNISVZFX09LIHdoZW4gdGhvc2UgYXJndW1lbnRzIGNhbiBiZSB1c2VkLCBBUkNISVZFX1JFVFJZCisgKiB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgb24gdGhlIHN0YWNrLiAqLworc3RhdGljIGludCB1c2VfZGF0YShzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB2b2lkKiogYnVmLCBzaXplX3QqIHNpemUsCisgICAgaW50NjRfdCogb2Zmc2V0KQoreworCWludCBpOworCisJZm9yKGkgPSAwOyBpIDwgcmFyNV9jb3VudG9mKHJhci0+Y3N0YXRlLmRyZWFkeSk7IGkrKykgeworCQlzdHJ1Y3QgZGF0YV9yZWFkeSAqZCA9ICZyYXItPmNzdGF0ZS5kcmVhZHlbaV07CisKKwkJaWYoZC0+dXNlZCkgeworCQkJaWYoYnVmKSAgICAqYnVmID0gZC0+YnVmOworCQkJaWYoc2l6ZSkgICAqc2l6ZSA9IGQtPnNpemU7CisJCQlpZihvZmZzZXQpICpvZmZzZXQgPSBkLT5vZmZzZXQ7CisKKwkJCWQtPnVzZWQgPSAwOworCQkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9SRVRSWTsKK30KKworLyogUHVzaGVzIHRoZSBgYnVmYCwgYHNpemVgIGFuZCBgb2Zmc2V0YCBhcmd1bWVudHMgdG8gdGhlIHJhci0+Y3N0YXRlLmRyZWFkeQorICogRklGTyBzdGFjay4gVGhvc2UgdmFsdWVzIHdpbGwgYmUgcG9wcGVkIGZyb20gdGhpcyBzdGFjayBieSB0aGUgYHVzZV9kYXRhYAorICogZnVuY3Rpb24uICovCitzdGF0aWMgaW50IHB1c2hfZGF0YV9yZWFkeShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIGNvbnN0IHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IHNpemUsIGludDY0X3Qgb2Zmc2V0KQoreworCWludCBpOworCisJLyogRG9uJ3QgcHVzaCBpZiB3ZSdyZSBpbiBza2lwIG1vZGUuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29saWQKKwkgKiBzdHJlYW1zIG5lZWQgZnVsbCBwcm9jZXNzaW5nIGV2ZW4gaWYgd2UncmUgc2tpcHBpbmcgZGF0YS4gQWZ0ZXIKKwkgKiBmdWxseSBwcm9jZXNzaW5nIHRoZSBzdHJlYW0sIHdlIG5lZWQgdG8gZGlzY2FyZCB0aGUgZ2VuZXJhdGVkIGJ5dGVzLAorCSAqIGJlY2F1c2Ugd2UncmUgaW50ZXJlc3RlZCBvbmx5IGluIHRoZSBzaWRlIGVmZmVjdDogYnVpbGRpbmcgdXAgdGhlCisJICogaW50ZXJuYWwgd2luZG93IGNpcmN1bGFyIGJ1ZmZlci4gVGhpcyB3aW5kb3cgYnVmZmVyIHdpbGwgYmUgdXNlZAorCSAqIGxhdGVyIGR1cmluZyB1bnBhY2tpbmcgb2YgcmVxdWVzdGVkIGRhdGEuICovCisJaWYocmFyLT5za2lwX21vZGUpCisJCXJldHVybiBBUkNISVZFX09LOworCisJLyogU2FuaXR5IGNoZWNrLiAqLworCWlmKG9mZnNldCAhPSByYXItPmZpbGUubGFzdF9vZmZzZXQgKyByYXItPmZpbGUubGFzdF9zaXplKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiU2FuaXR5IGNoZWNrIGVycm9yOiBvdXRwdXQgc3RyZWFtIGlzIG5vdCBjb250aW51b3VzIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWZvcihpID0gMDsgaSA8IHJhcjVfY291bnRvZihyYXItPmNzdGF0ZS5kcmVhZHkpOyBpKyspIHsKKwkJc3RydWN0IGRhdGFfcmVhZHkqIGQgPSAmcmFyLT5jc3RhdGUuZHJlYWR5W2ldOworCQlpZighZC0+dXNlZCkgeworCQkJZC0+dXNlZCA9IDE7CisJCQlkLT5idWYgPSBidWY7CisJCQlkLT5zaXplID0gc2l6ZTsKKwkJCWQtPm9mZnNldCA9IG9mZnNldDsKKworCQkJLyogVGhlc2UgZmllbGRzIGFyZSB1c2VkIG9ubHkgaW4gc2FuaXR5IGNoZWNraW5nLiAqLworCQkJcmFyLT5maWxlLmxhc3Rfb2Zmc2V0ID0gb2Zmc2V0OworCQkJcmFyLT5maWxlLmxhc3Rfc2l6ZSA9IHNpemU7CisKKwkJCS8qIENhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gb2YgdGhpcyBuZXcgYmxvY2sgYmVmb3JlCisJCQkgKiBzdWJtaXR0aW5nIGRhdGEgdG8gbGliYXJjaGl2ZSdzIGVuZ2luZS4gKi8KKwkJCXVwZGF0ZV9jcmMocmFyLCBkLT5idWYsIGQtPnNpemUpOworCisJCQlyZXR1cm4gQVJDSElWRV9PSzsKKwkJfQorCX0KKworCS8qIFByb2dyYW0gY291bnRlciB3aWxsIHJlYWNoIHRoaXMgY29kZSBpZiB0aGUgYHJhci0+Y3N0YXRlLmRhdGFfcmVhZHlgCisJICogc3RhY2sgd2lsbCBiZSBmaWxsZWQgdXAgc28gdGhhdCBubyBuZXcgZW50cmllcyB3aWxsIGJlIGFsbG93ZWQuIFRoZQorCSAqIGNvZGUgc2hvdWxkbid0IGFsbG93IHN1Y2ggc2l0dWF0aW9uIHRvIG9jY3VyLiBTbyB3ZSB0cmVhdCB0aGlzIGNhc2UKKwkgKiBhcyBhbiBpbnRlcm5hbCBlcnJvci4gKi8KKworCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJICAgICJFcnJvcjogcHJlbWF0dXJlIGVuZCBvZiBkYXRhX3JlYWR5IHN0YWNrIik7CisJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdW5jb21wcmVzc2VzIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIGluIHRoZSA8RklMRT4gYmFzZQorICogYmxvY2suCisgKgorICogVGhlIEZJTEUgYmFzZSBibG9jayBsb29rcyBsaWtlIHRoaXM6CisgKgorICogPGhlYWRlcj48aHVmZm1hbiB0YWJsZXM+PGJsb2NrXzE+PGJsb2NrXzI+Li4uPGJsb2NrX24+CisgKgorICogVGhlIDxoZWFkZXI+IGlzIGEgYmxvY2sgaGVhZGVyLCB0aGF0IGlzIHBhcnNlZCBpbiBwYXJzZV9ibG9ja19oZWFkZXIoKS4KKyAqIEl0J3MgYSAiY29tcHJlc3NlZF9ibG9ja19oZWFkZXIiIHN0cnVjdHVyZSwgY29udGFpbmluZyBtZXRhZGF0YSBuZWVkZWQKKyAqIHRvIGtub3cgd2hlbiB3ZSBzaG91bGQgc3RvcCBsb29raW5nIGZvciBtb3JlIDxibG9ja19uPiBibG9ja3MuCisgKgorICogPGh1ZmZtYW4gdGFibGVzPiBjb250YWluIGRhdGEgbmVlZGVkIHRvIHNldCB1cCB0aGUgaHVmZm1hbiB0YWJsZXMsIG5lZWRlZAorICogZm9yIHRoZSBhY3R1YWwgZGVjb21wcmVzc2lvbi4KKyAqCisgKiBFYWNoIDxibG9ja19uPiBjb25zaXN0cyBvZiBzZXJpZXMgb2YgbGl0ZXJhbHM6CisgKgorICogPGxpdGVyYWw+PGxpdGVyYWw+PGxpdGVyYWw+Li4uPGxpdGVyYWw+CisgKgorICogVGhvc2UgbGl0ZXJhbHMgZ2VuZXJhdGUgdGhlIHVuY29tcHJlc3Npb24gZGF0YS4gVGhleSBvcGVyYXRlIG9uIGEgY2lyY3VsYXIKKyAqIGJ1ZmZlciwgc29tZXRpbWVzIHdyaXRpbmcgcmF3IGRhdGEgaW50byBpdCwgc29tZXRpbWVzIHJlZmVyZW5jaW5nCisgKiBzb21lIHByZXZpb3VzIGRhdGEgaW5zaWRlIHRoaXMgYnVmZmVyLCBhbmQgc29tZXRpbWVzIGRlY2xhcmluZyBhIGZpbHRlcgorICogdGhhdCB3aWxsIG5lZWQgdG8gYmUgZXhlY3V0ZWQgb24gdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBJdCBhbGwgZGVwZW5kcyBvbiB0aGUgbGl0ZXJhbCB0aGF0IGlzIHVzZWQuCisgKgorICogU29tZXRpbWVzIGJsb2NrcyBwcm9kdWNlIG91dHB1dCBkYXRhLCBzb21ldGltZXMgdGhleSBkb24ndC4gRm9yIGV4YW1wbGUsIGZvcgorICogc29tZSBodWdlIGZpbGVzIHRoYXQgdXNlIGxvdHMgb2YgZmlsdGVycywgc29tZXRpbWVzIGEgYmxvY2sgaXMgZmlsbGVkIHdpdGgKKyAqIG9ubHkgZmlsdGVyIGRlY2xhcmF0aW9uIGxpdGVyYWxzLiBTdWNoIGJsb2NrcyB3b24ndCBwcm9kdWNlIGFueSBkYXRhIGluIHRoZQorICogY2lyY3VsYXIgYnVmZmVyLgorICoKKyAqIFNvbWV0aW1lcyBibG9ja3Mgd2lsbCBwcm9kdWNlIDQgYnl0ZXMgb2YgZGF0YSwgYW5kIHNvbWV0aW1lcyAxIG1lZ2FieXRlLAorICogYmVjYXVzZSBhIGxpdGVyYWwgY2FuIHJlZmVyZW5jZSBwcmV2aW91c2x5IGRlY29tcHJlc3NlZCBkYXRhLiBGb3IgZXhhbXBsZSwKKyAqIHRoZXJlIGNhbiBiZSBhIGxpdGVyYWwgdGhhdCBzYXlzOiAnYXBwZW5kIGEgYnl0ZSAweEZFIGhlcmUnLCBhbmQgYWZ0ZXIKKyAqIGl0IGFub3RoZXIgbGl0ZXJhbCBjYW4gc2F5ICdhcHBlbmQgMSBtZWdhYnl0ZSBvZiBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyCisgKiBvZmZzZXQgMHgxMjM0NScuIFRoaXMgaXMgaG93IFJBUiBmb3JtYXQgaGFuZGxlcyBjb21wcmVzc2luZyByZXBlYXRlZAorICogcGF0dGVybnMuCisgKgorICogVGhlIFJBUiBjb21wcmVzc29yIGNyZWF0ZXMgdGhvc2UgbGl0ZXJhbHMgYW5kIHRoZSBhY3R1YWwgZWZmaWNpZW5jeSBvZgorICogY29tcHJlc3Npb24gZGVwZW5kcyBvbiB3aGF0IHRob3NlIGxpdGVyYWxzIGFyZS4gVGhlIGxpdGVyYWxzIGNhbiBhbHNvCisgKiBiZSBzZWVuIGFzIGEga2luZCBvZiBhIG5vbi10dXJpbmctY29tcGxldGUgdmlydHVhbCBtYWNoaW5lIHRoYXQgc2ltcGx5CisgKiB0ZWxscyB0aGUgZGVjb21wcmVzc29yIHdoYXQgaXQgc2hvdWxkIGRvLgorICogKi8KKworc3RhdGljIGludCBkb191bmNvbXByZXNzX2ZpbGUoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlpbnQgcmV0OworCWludDY0X3QgbWF4X2VuZF9wb3M7CisKKwlpZighcmFyLT5jc3RhdGUuaW5pdGlhbGl6ZWQpIHsKKwkJLyogRG9uJ3QgcGVyZm9ybSBmdWxsIGNvbnRleHQgcmVpbml0aWFsaXphdGlvbiBpZiB3ZSdyZQorCQkgKiBwcm9jZXNzaW5nIGEgc29saWQgYXJjaGl2ZS4gKi8KKwkJaWYoIXJhci0+bWFpbi5zb2xpZCB8fCAhcmFyLT5jc3RhdGUud2luZG93X2J1ZikgeworCQkJaW5pdF91bnBhY2socmFyKTsKKwkJfQorCisJCXJhci0+Y3N0YXRlLmluaXRpYWxpemVkID0gMTsKKwl9CisKKwlpZihyYXItPmNzdGF0ZS5hbGxfZmlsdGVyc19hcHBsaWVkID09IDEpIHsKKwkJLyogV2UgdXNlIHdoaWxlKDEpIGhlcmUsIGJ1dCBzdGFuZGFyZCBjYXNlIGFsbG93cyBmb3IganVzdCAxCisJCSAqIGl0ZXJhdGlvbi4gVGhlIGxvb3Agd2lsbCBpdGVyYXRlIGlmIHByb2Nlc3NfYmxvY2soKSBkaWRuJ3QKKwkJICogZ2VuZXJhdGUgYW55IGRhdGEgYXQgYWxsLiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGJsb2NrCisJCSAqIGNvbnRhaW5zIG9ubHkgZmlsdGVyIGRlZmluaXRpb25zICh0aGlzIGlzIGNvbW1vbiBpbiBiaWcKKwkJICogZmlsZXMpLiAqLworCQl3aGlsZSgxKSB7CisJCQlyZXQgPSBwcm9jZXNzX2Jsb2NrKGEpOworCQkJaWYocmV0ID09IEFSQ0hJVkVfRU9GIHx8IHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQkJCXJldHVybiByZXQ7CisKKwkJCWlmKHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID09CisJCQkgICAgcmFyLT5jc3RhdGUud3JpdGVfcHRyKSB7CisJCQkJLyogVGhlIGJsb2NrIGRpZG4ndCBnZW5lcmF0ZSBhbnkgbmV3IGRhdGEsCisJCQkJICogc28ganVzdCBwcm9jZXNzIGEgbmV3IGJsb2NrLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBUaGUgYmxvY2sgaGFzIGdlbmVyYXRlZCBzb21lIG5ldyBkYXRhLCBzbyBicmVhaworCQkJICogdGhlIGxvb3AuICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFRyeSB0byBydW4gZmlsdGVycy4gSWYgZmlsdGVycyB3b24ndCBiZSBhcHBsaWVkLCBpdCBtZWFucyB0aGF0CisJICogaW5zdWZmaWNpZW50IGRhdGEgd2FzIGdlbmVyYXRlZC4gKi8KKwlyZXQgPSBhcHBseV9maWx0ZXJzKGEpOworCWlmKHJldCA9PSBBUkNISVZFX1JFVFJZKSB7CisJCXJldHVybiBBUkNISVZFX09LOworCX0gZWxzZSBpZihyZXQgPT0gQVJDSElWRV9GQVRBTCkgeworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBJZiBhcHBseV9maWx0ZXJzKCkgd2lsbCByZXR1cm4gQVJDSElWRV9PSywgd2UgY2FuIGNvbnRpbnVlIGhlcmUuICovCisKKwlpZihjZGVxdWVfc2l6ZSgmcmFyLT5jc3RhdGUuZmlsdGVycykgPiAwKSB7CisJCS8qIENoZWNrIGlmIHdlIGNhbiB3cml0ZSBzb21ldGhpbmcgYmVmb3JlIGhpdHRpbmcgZmlyc3QKKwkJICogZmlsdGVyLiAqLworCQlzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdDsKKworCQkvKiBHZXQgdGhlIGJsb2NrX3N0YXJ0IG9mZnNldCBmcm9tIHRoZSBmaXJzdCBmaWx0ZXIuICovCisJCWlmKENERV9PSyAhPSBjZGVxdWVfZnJvbnQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsCisJCSAgICBjZGVxdWVfZmlsdGVyX3AoJmZsdCkpKQorCQl7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkgICAgIkNhbid0IHJlYWQgZmlyc3QgZmlsdGVyIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCW1heF9lbmRfcG9zID0gcmFyNV9taW4oZmx0LT5ibG9ja19zdGFydCwKKwkJICAgIHJhci0+Y3N0YXRlLndyaXRlX3B0cik7CisJfSBlbHNlIHsKKwkJLyogVGhlcmUgYXJlIG5vIGZpbHRlcnMgZGVmaW5lZCwgb3IgYWxsIGZpbHRlcnMgd2VyZSBhcHBsaWVkLgorCQkgKiBUaGlzIG1lYW5zIHdlIGNhbiBqdXN0IHN0b3JlIHRoZSBkYXRhIHdpdGhvdXQgYW55CisJCSAqIHBvc3Rwcm9jZXNzaW5nLiAqLworCQltYXhfZW5kX3BvcyA9IHJhci0+Y3N0YXRlLndyaXRlX3B0cjsKKwl9CisKKwlpZihtYXhfZW5kX3BvcyA9PSByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cikgeworCQkvKiBXZSBjYW4ndCB3cml0ZSBhbnl0aGluZyB5ZXQuIFRoZSBibG9jayB1bmNvbXByZXNzaW9uCisJCSAqIGZ1bmN0aW9uIGRpZCBub3QgZ2VuZXJhdGUgZW5vdWdoIGRhdGEsIGFuZCBubyBmaWx0ZXIgY2FuIGJlCisJCSAqIGFwcGxpZWQuIEF0IHRoZSBzYW1lIHRpbWUgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB0aGF0IGNhbiBiZQorCQkgKiAgc3RvcmVkIHdpdGhvdXQgZmlsdGVyIHBvc3Rwcm9jZXNzaW5nLiBUaGlzIG1lYW5zIHdlIG5lZWQgdG8KKwkJICogIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBiZSBnZW5lcmF0ZWQsIHNvIHdlIGNhbiBhcHBseSB0aGUKKwkJICogZmlsdGVycy4KKwkJICoKKwkJICogU2lnbmFsIHRoZSBjYWxsZXIgdGhhdCB3ZSBuZWVkIG1vcmUgZGF0YSB0byBiZSBhYmxlIHRvIGRvCisJCSAqIGFueXRoaW5nLgorCQkgKi8KKwkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisJfSBlbHNlIHsKKwkJLyogV2UgY2FuIHdyaXRlIHRoZSBkYXRhIGJlZm9yZSBoaXR0aW5nIHRoZSBmaXJzdCBmaWx0ZXIuCisJCSAqIFNvIGxldCdzIGRvIGl0LiBUaGUgcHVzaF93aW5kb3dfZGF0YSgpIGZ1bmN0aW9uIHdpbGwKKwkJICogZWZmZWN0aXZlbHkgcmV0dXJuIHRoZSBzZWxlY3RlZCBkYXRhIGJsb2NrIHRvIHRoZSB1c2VyCisJCSAqIGFwcGxpY2F0aW9uLiAqLworCQlwdXNoX3dpbmRvd19kYXRhKGEsIHJhciwgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIsCisJCSAgICBtYXhfZW5kX3Bvcyk7CisJCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID0gbWF4X2VuZF9wb3M7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgdW5jb21wcmVzc19maWxlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlpbnQgcmV0OworCisJd2hpbGUoMSkgeworCQkvKiBTb21ldGltZXMgdGhlIHVuY29tcHJlc3Npb24gZnVuY3Rpb24gd2lsbCByZXR1cm4gYQorCQkgKiAncmV0cnknIHNpZ25hbC4gSWYgdGhpcyB3aWxsIGhhcHBlbiwgd2UgaGF2ZSB0byByZXRyeQorCQkgKiB0aGUgZnVuY3Rpb24uICovCisJCXJldCA9IGRvX3VuY29tcHJlc3NfZmlsZShhKTsKKwkJaWYocmV0ICE9IEFSQ0hJVkVfUkVUUlkpCisJCQlyZXR1cm4gcmV0OworCX0KK30KKworCitzdGF0aWMgaW50IGRvX3Vuc3RvcmVfZmlsZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHZvaWQqKiBidWYsIHNpemVfdCogc2l6ZSwgaW50NjRfdCogb2Zmc2V0KQoreworCXNpemVfdCB0b19yZWFkOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKwlpZihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID09IDAgJiYgcmFyLT5tYWluLnZvbHVtZSA+IDAgJiYKKwkgICAgcmFyLT5nZW5lcmljLnNwbGl0X2FmdGVyID4gMCkKKwl7CisJCWludCByZXQ7CisKKwkJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMTsKKwkJcmV0ID0gYWR2YW5jZV9tdWx0aXZvbHVtZShhKTsKKwkJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMDsKKworCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJLyogRmFpbGVkIHRvIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXZvbHVtZSBhcmNoaXZlCisJCQkgKiBmaWxlLiAqLworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXRvX3JlYWQgPSByYXI1X21pbihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nLCA2NCAqIDEwMjQpOworCWlmKHRvX3JlYWQgPT0gMCkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoIXJlYWRfYWhlYWQoYSwgdG9fcmVhZCwgJnApKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkkvTyBlcnJvciB3aGVuIHVuc3RvcmluZyBmaWxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCB0b19yZWFkKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoYnVmKSAgICAqYnVmID0gcDsKKwlpZihzaXplKSAgICpzaXplID0gdG9fcmVhZDsKKwlpZihvZmZzZXQpICpvZmZzZXQgPSByYXItPmNzdGF0ZS5sYXN0X3Vuc3RvcmVfcHRyOworCisJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyAtPSB0b19yZWFkOworCXJhci0+Y3N0YXRlLmxhc3RfdW5zdG9yZV9wdHIgKz0gdG9fcmVhZDsKKworCXVwZGF0ZV9jcmMocmFyLCBwLCB0b19yZWFkKTsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBkb191bnBhY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBjb25zdCB2b2lkKiogYnVmLCBzaXplX3QqIHNpemUsIGludDY0X3QqIG9mZnNldCkKK3sKKwllbnVtIENPTVBSRVNTSU9OX01FVEhPRCB7CisJCVNUT1JFID0gMCwgRkFTVEVTVCA9IDEsIEZBU1QgPSAyLCBOT1JNQUwgPSAzLCBHT09EID0gNCwKKwkJQkVTVCA9IDUKKwl9OworCisJaWYocmFyLT5maWxlLnNlcnZpY2UgPiAwKSB7CisJCXJldHVybiBkb191bnN0b3JlX2ZpbGUoYSwgcmFyLCBidWYsIHNpemUsIG9mZnNldCk7CisJfSBlbHNlIHsKKwkJc3dpdGNoKHJhci0+Y3N0YXRlLm1ldGhvZCkgeworCQkJY2FzZSBTVE9SRToKKwkJCQlyZXR1cm4gZG9fdW5zdG9yZV9maWxlKGEsIHJhciwgYnVmLCBzaXplLAorCQkJCSAgICBvZmZzZXQpOworCQkJY2FzZSBGQVNURVNUOgorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIEZBU1Q6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgTk9STUFMOgorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIEdPT0Q6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgQkVTVDoKKwkJCQlyZXR1cm4gdW5jb21wcmVzc19maWxlKGEpOworCQkJZGVmYXVsdDoKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIkNvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkOiAweCV4IiwKKwkJCQkgICAgcmFyLT5jc3RhdGUubWV0aG9kKTsKKworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisJfQorCisjaWYgIWRlZmluZWQgV0lOMzIKKwkvKiBOb3QgcmVhY2hlZC4gKi8KKwlyZXR1cm4gQVJDSElWRV9PSzsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHZlcmlmeV9jaGVja3N1bXMoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCWludCB2ZXJpZnlfY3JjOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCS8qIENoZWNrIGNoZWNrc3VtcyBvbmx5IHdoZW4gYWN0dWFsbHkgdW5wYWNraW5nIHRoZSBkYXRhLiBUaGVyZSdzIG5vCisJICogbmVlZCB0byBjYWxjdWxhdGUgY2hlY2tzdW0gd2hlbiB3ZSdyZSBza2lwcGluZyBkYXRhIGluIHNvbGlkIGFyY2hpdmVzCisJICogKHNraXBwaW5nIGluIHNvbGlkIGFyY2hpdmVzIGlzIHRoZSBzYW1lIHRoaW5nIGFzIHVucGFja2luZyBjb21wcmVzc2VkCisJICogZGF0YSBhbmQgZGlzY2FyZGluZyB0aGUgcmVzdWx0KS4gKi8KKworCWlmKCFyYXItPnNraXBfbW9kZSkgeworCQkvKiBBbHdheXMgY2hlY2sgY2hlY2tzdW1zIGlmIHdlJ3JlIG5vdCBpbiBza2lwIG1vZGUgKi8KKwkJdmVyaWZ5X2NyYyA9IDE7CisJfSBlbHNlIHsKKwkJLyogV2UgY2FuIG92ZXJyaWRlIHRoZSBsb2dpYyBhYm92ZSB3aXRoIGEgY29tcGlsZS10aW1lIG9wdGlvbgorCQkgKiBOT19DUkNfT05fU09MSURfU0tJUC4gVGhpcyBvcHRpb24gaXMgdXNlZCBkdXJpbmcgZGVidWdnaW5nLAorCQkgKiBhbmQgaXQgd2lsbCBjaGVjayBjaGVja3N1bXMgb2YgdW5wYWNrZWQgZGF0YSBldmVuIHdoZW4KKwkJICogd2UncmUgc2tpcHBpbmcgaXQuICovCisKKyNpZiBkZWZpbmVkIENIRUNLX0NSQ19PTl9TT0xJRF9TS0lQCisJCS8qIERlYnVnIGNhc2UgKi8KKwkJdmVyaWZ5X2NyYyA9IDE7CisjZWxzZQorCQkvKiBOb3JtYWwgY2FzZSAqLworCQl2ZXJpZnlfY3JjID0gMDsKKyNlbmRpZgorCX0KKworCWlmKHZlcmlmeV9jcmMpIHsKKwkJLyogRHVyaW5nIHVucGFja2luZywgb24gZWFjaCB1bnBhY2tlZCBibG9jayB3ZSdyZSBjYWxsaW5nIHRoZQorCQkgKiB1cGRhdGVfY3JjKCkgZnVuY3Rpb24uIFNpbmNlIHdlIGFyZSBoZXJlLCB0aGUgdW5wYWNraW5nCisJCSAqIHByb2Nlc3MgaXMgYWxyZWFkeSBvdmVyIGFuZCB3ZSBjYW4gY2hlY2sgaWYgY2FsY3VsYXRlZAorCQkgKiBjaGVja3N1bSAoQ1JDMzIgb3IgQkxBS0Uyc3ApIGlzIHRoZSBzYW1lIGFzIHdoYXQgaXMgc3RvcmVkCisJCSAqIGluIHRoZSBhcmNoaXZlLiAqLworCQlpZihyYXItPmZpbGUuc3RvcmVkX2NyYzMyID4gMCkgeworCQkJLyogQ2hlY2sgQ1JDMzIgb25seSB3aGVuIHRoZSBmaWxlIGNvbnRhaW5zIGEgQ1JDMzIKKwkJCSAqIHZhbHVlIGZvciB0aGlzIGZpbGUuICovCisKKwkJCWlmKHJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyICE9CisJCQkgICAgcmFyLT5maWxlLnN0b3JlZF9jcmMzMikgeworCQkJCS8qIENoZWNrc3VtcyBkbyBub3QgbWF0Y2g7IHRoZSB1bnBhY2tlZCBmaWxlCisJCQkJICogaXMgY29ycnVwdGVkLiAqLworCisJCQkJREVCVUdfQ09ERSB7CisJCQkJCXByaW50ZigiQ2hlY2tzdW0gZXJyb3I6IENSQzMyICIKKwkJCQkJICAgICIod2FzOiAlMDh4LCBleHBlY3RlZDogJTA4eClcbiIsCisJCQkJCSAgICByYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiwKKwkJCQkJICAgIHJhci0+ZmlsZS5zdG9yZWRfY3JjMzIpOworCQkJCX0KKworI2lmbmRlZiBET05UX0ZBSUxfT05fQ1JDX0VSUk9SCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAgICJDaGVja3N1bSBlcnJvcjogQ1JDMzIiKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQlERUJVR19DT0RFIHsKKwkJCQkJcHJpbnRmKCJDaGVja3N1bSBPSzogQ1JDMzIgIgorCQkJCQkgICAgIiglMDh4LyUwOHgpXG4iLAorCQkJCQkgICAgcmFyLT5maWxlLnN0b3JlZF9jcmMzMiwKKwkJCQkJICAgIHJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZihyYXItPmZpbGUuaGFzX2JsYWtlMiA+IDApIHsKKwkJCS8qIEJMQUtFMnNwIGlzIGFuIG9wdGlvbmFsIGNoZWNrc3VtIGFsZ29yaXRobSB0aGF0IGlzCisJCQkgKiBhZGRlZCB0byBSQVJ2NSBhcmNoaXZlcyB3aGVuIHVzaW5nIHRoZSBgLWh0YmAgc3dpdGNoCisJCQkgKiAgZHVyaW5nIGNyZWF0aW9uIG9mIGFyY2hpdmUuCisJCQkgKgorCQkJICogV2Ugbm93IGZpbmFsaXplIHRoZSBoYXNoIGNhbGN1bGF0aW9uIGJ5IGNhbGxpbmcgdGhlCisJCQkgKiBgZmluYWxgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZpbmFsIGhhc2gKKwkJCSAqIHZhbHVlIHdlIGNhbiB1c2UgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBCTEFLRTJzcAorCQkJICogY2hlY2tzdW0gdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGFyY2hpdmUuCisJCQkgKgorCQkJICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGBmaW5hbGAgZnVuY3Rpb24gaXMgbm90CisJCQkgKiB2ZXJ5IGhlbHBmdWwsIGFzIGl0IGd1YXJkcyBvbmx5IGFnYWluc3QgaW1wcm9wZXIgdXNlLgorIAkJCSAqIFRoaXMgaXMgd2h5IHdlJ3JlIGV4cGxpY2l0bHkgaWdub3JpbmcgaXQuICovCisKKwkJCXVpbnQ4X3QgYjJfYnVmWzMyXTsKKwkJCSh2b2lkKSBibGFrZTJzcF9maW5hbCgmcmFyLT5maWxlLmIyc3RhdGUsIGIyX2J1ZiwgMzIpOworCisJCQlpZihtZW1jbXAoJnJhci0+ZmlsZS5ibGFrZTJzcCwgYjJfYnVmLCAzMikgIT0gMCkgeworI2lmbmRlZiBET05UX0ZBSUxfT05fQ1JDX0VSUk9SCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAgICJDaGVja3N1bSBlcnJvcjogQkxBS0UyIik7CisKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKyNlbmRpZgorCQkJfQorCQl9CisJfQorCisJLyogRmluYWxpemF0aW9uIGZvciB0aGlzIGZpbGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gKi8KKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCB2ZXJpZnlfZ2xvYmFsX2NoZWNrc3VtcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJcmV0dXJuIHZlcmlmeV9jaGVja3N1bXMoYSk7Cit9CisKKy8qCisgKiBEZWNyeXB0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbWFnaWMgc2lnbmF0dXJlIHBhdHRlcm4uIENoZWNrIHRoZSBjb21tZW50IG5lYXIKKyAqIHRoZSBgcmFyNV9zaWduYXR1cmVfeG9yYCBzeW1ib2wgdG8gcmVhZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLgorICovCitzdGF0aWMgdm9pZCByYXI1X3NpZ25hdHVyZShjaGFyICpidWYpIHsKKwkJc2l6ZV90IGk7CisKKwkJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcik7IGkrKykgeworCQkJYnVmW2ldID0gcmFyNV9zaWduYXR1cmVfeG9yW2ldIF4gMHhBMTsKKwkJfQorfQorCitzdGF0aWMgaW50IHJhcjVfcmVhZF9kYXRhKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorICAgIHNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KSB7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwlpZihyYXItPmZpbGUuZGlyID4gMCkgeworCQkvKiBEb24ndCBwcm9jZXNzIGFueSBkYXRhIGlmIHRoaXMgZmlsZSBlbnRyeSB3YXMgZGVjbGFyZWQKKwkJICogYXMgYSBkaXJlY3RvcnkuIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlIGVudHJpZXMgbWFya2VkIGFzCisJCSAqIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgYW55IGRpY3Rpb25hcnkgYnVmZmVyIGFsbG9jYXRlZCwgc28KKwkJICogaXQncyBpbXBvc3NpYmxlIHRvIHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24uICovCisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkNhbid0IGRlY29tcHJlc3MgYW4gZW50cnkgbWFya2VkIGFzIGEgZGlyZWN0b3J5Iik7CisJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKKwl9CisKKwlpZighcmFyLT5za2lwX21vZGUgJiYgKHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID4gcmFyLT5maWxlLnVucGFja2VkX3NpemUpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiVW5wYWNrZXIgaGFzIHdyaXR0ZW4gdG9vIG1hbnkgYnl0ZXMiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0ID0gdXNlX2RhdGEocmFyLCBidWZmLCBzaXplLCBvZmZzZXQpOworCWlmKHJldCA9PSBBUkNISVZFX09LKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5maWxlLmVvZiA9PSAxKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlyZXQgPSBkb191bnBhY2soYSwgcmFyLCBidWZmLCBzaXplLCBvZmZzZXQpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9PSAwICYmCisJCQlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciA9PSByYXItPmZpbGUudW5wYWNrZWRfc2l6ZSkKKwl7CisJCS8qIElmIGFsbCBieXRlcyBvZiBjdXJyZW50IGZpbGUgd2VyZSBwcm9jZXNzZWQsIHJ1bgorCQkgKiBmaW5hbGl6YXRpb24uCisJCSAqCisJCSAqIEZpbmFsaXphdGlvbiB3aWxsIGNoZWNrIGNoZWNrc3VtIGFnYWluc3QgcHJvcGVyIHZhbHVlcy4gSWYKKwkJICogc29tZSBvZiB0aGUgY2hlY2tzdW1zIHdpbGwgbm90IG1hdGNoLCB3ZSdsbCByZXR1cm4gYW4gZXJyb3IKKwkJICogdmFsdWUgaW4gdGhlIGxhc3QgYGFyY2hpdmVfcmVhZF9kYXRhYCBjYWxsIHRvIHNpZ25hbCBhbiBlcnJvcgorCQkgKiB0byB0aGUgdXNlci4gKi8KKworCQlyYXItPmZpbGUuZW9mID0gMTsKKwkJcmV0dXJuIHZlcmlmeV9nbG9iYWxfY2hlY2tzdW1zKGEpOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJhcjVfcmVhZF9kYXRhX3NraXAoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWlmKHJhci0+bWFpbi5zb2xpZCkgeworCQkvKiBJbiBzb2xpZCBhcmNoaXZlcywgaW5zdGVhZCBvZiBza2lwcGluZyB0aGUgZGF0YSwgd2UgbmVlZCB0bworCQkgKiBleHRyYWN0IGl0LCBhbmQgZGlzcG9zZSB0aGUgcmVzdWx0LiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcworCQkgKiBvcGVyYXRpb24gd2lsbCBiZSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIHdpbmRvdyBidWZmZXIgc3RhdGUKKwkJICogbmVlZGVkIHRvIGJlIGFibGUgdG8gZXh0cmFjdCB0aGUgc2VsZWN0ZWQgZmlsZS4gKi8KKworCQlpbnQgcmV0OworCisJCS8qIE1ha2Ugc3VyZSB0byBwcm9jZXNzIGFsbCBibG9ja3MgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtLiAqLworCQl3aGlsZShyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID4gMCkgeworCQkJLyogU2V0dGluZyB0aGUgInNraXAgbW9kZSIgd2lsbCBhbGxvdyB1cyB0byBza2lwCisJCQkgKiBjaGVja3N1bSBjaGVja3MgZHVyaW5nIGRhdGEgc2tpcHBpbmcuIENoZWNraW5nIHRoZQorCQkJICogY2hlY2tzdW0gb2Ygc2tpcHBlZCBkYXRhIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgYW5kCisJCQkgKiBpdCdzIG9ubHkgc2xvd2luZyB0aGluZ3MgZG93bi4KKwkJCSAqCisJCQkgKiBUaGlzIGlzIGluY3JlbWVudGVkIGluc3RlYWQgb2Ygc2V0dGluZyB0byAxIGJlY2F1c2UKKwkJCSAqIHRoaXMgZGF0YSBza2lwcGluZyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCisJCQkgKiByZWN1cnNpdmVseS4gKi8KKwkJCXJhci0+c2tpcF9tb2RlKys7CisKKwkJCS8qIFdlJ3JlIGRpc3Bvc2luZyAxIGJsb2NrIG9mIGRhdGEsIHNvIHdlIHVzZSB0cmlwbGUKKwkJCSAqIE5VTExzIGluIGFyZ3VtZW50cy4gKi8KKwkJCXJldCA9IHJhcjVfcmVhZF9kYXRhKGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQkvKiBUdXJuIG9mZiAic2tpcCBtb2RlIi4gKi8KKwkJCXJhci0+c2tpcF9tb2RlLS07CisKKwkJCWlmKHJldCA8IDAgfHwgcmV0ID09IEFSQ0hJVkVfRU9GKSB7CisJCQkJLyogUHJvcGFnYXRlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucworCQkJCSAqIHRvIHRoZSBjYWxsZXIuICovCisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIEluIHN0YW5kYXJkIGFyY2hpdmVzLCB3ZSBjYW4ganVzdCBqdW1wIG92ZXIgdGhlIGNvbXByZXNzZWQKKwkJICogc3RyZWFtLiBFYWNoIGZpbGUgaW4gbm9uLXNvbGlkIGFyY2hpdmVzIHN0YXJ0cyBmcm9tIGFuIGVtcHR5CisJCSAqIHdpbmRvdyBidWZmZXIuICovCisKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPSAwOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50NjRfdCByYXI1X3NlZWtfZGF0YShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBpbnQ2NF90IG9mZnNldCwKKyAgICBpbnQgd2hlbmNlKQoreworCSh2b2lkKSBhOworCSh2b2lkKSBvZmZzZXQ7CisJKHZvaWQpIHdoZW5jZTsKKworCS8qIFdlJ3JlIGEgc3RyZWFtaW5nIHVucGFja2VyLCBhbmQgd2UgZG9uJ3Qgc3VwcG9ydCBzZWVraW5nLiAqLworCisJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9jbGVhbnVwKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEpIHsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwlmcmVlKHJhci0+Y3N0YXRlLndpbmRvd19idWYpOworCWZyZWUocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmKTsKKworCWZyZWUocmFyLT52b2wucHVzaF9idWYpOworCisJZnJlZV9maWx0ZXJzKHJhcik7CisJY2RlcXVlX2ZyZWUoJnJhci0+Y3N0YXRlLmZpbHRlcnMpOworCisJZnJlZShyYXIpOworCWEtPmZvcm1hdC0+ZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByYXI1X2NhcGFiaWxpdGllcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkICogYSkgeworCSh2b2lkKSBhOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhcjVfaGFzX2VuY3J5cHRlZF9lbnRyaWVzKHN0cnVjdCBhcmNoaXZlX3JlYWQgKl9hKSB7CisJKHZvaWQpIF9hOworCisJLyogVW5zdXBwb3J0ZWQgZm9yIG5vdy4gKi8KKwlyZXR1cm4gQVJDSElWRV9SRUFEX0ZPUk1BVF9FTkNSWVBUSU9OX1VOU1VQUE9SVEVEOworfQorCitzdGF0aWMgaW50IHJhcjVfaW5pdChzdHJ1Y3QgcmFyNSogcmFyKSB7CisJbWVtc2V0KHJhciwgMCwgc2l6ZW9mKHN0cnVjdCByYXI1KSk7CisKKwlpZihDREVfT0sgIT0gY2RlcXVlX2luaXQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsIDgxOTIpKQorCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCitpbnQgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUoc3RydWN0IGFyY2hpdmUgKl9hKSB7CisJc3RydWN0IGFyY2hpdmVfcmVhZCogYXI7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyOworCisJaWYoQVJDSElWRV9PSyAhPSAocmV0ID0gZ2V0X2FyY2hpdmVfcmVhZChfYSwgJmFyKSkpCisJCXJldHVybiByZXQ7CisKKwlyYXIgPSBtYWxsb2Moc2l6ZW9mKCpyYXIpKTsKKwlpZihyYXIgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSByYXI1IGRhdGEiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYoQVJDSElWRV9PSyAhPSByYXI1X2luaXQocmFyKSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSByYXI1IGZpbHRlciBidWZmZXIiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0ID0gX19hcmNoaXZlX3JlYWRfcmVnaXN0ZXJfZm9ybWF0KGFyLAorCSAgICByYXIsCisJICAgICJyYXI1IiwKKwkgICAgcmFyNV9iaWQsCisJICAgIHJhcjVfb3B0aW9ucywKKwkgICAgcmFyNV9yZWFkX2hlYWRlciwKKwkgICAgcmFyNV9yZWFkX2RhdGEsCisJICAgIHJhcjVfcmVhZF9kYXRhX3NraXAsCisJICAgIHJhcjVfc2Vla19kYXRhLAorCSAgICByYXI1X2NsZWFudXAsCisJICAgIHJhcjVfY2FwYWJpbGl0aWVzLAorCSAgICByYXI1X2hhc19lbmNyeXB0ZWRfZW50cmllcyk7CisKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkodm9pZCkgcmFyNV9jbGVhbnVwKGFyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3LmMKaW5kZXggZWZhMmM2YS4uZWMwNTIwYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhdy5jCkBAIC0xMjAsNyArMTIwLDkgQEAKIAlhcmNoaXZlX2VudHJ5X3NldF9maWxldHlwZShlbnRyeSwgQUVfSUZSRUcpOwogCWFyY2hpdmVfZW50cnlfc2V0X3Blcm0oZW50cnksIDA2NDQpOwogCS8qIEknbSBkZWxpYmVyYXRlbHkgbGVhdmluZyBtb3N0IGZpZWxkcyB1bnNldCBoZXJlLiAqLwotCXJldHVybiAoQVJDSElWRV9PSyk7CisKKwkvKiBMZXQgdGhlIGZpbHRlciBmaWxsIG91dCBhbnkgZmllbGRzIGl0IG1pZ2h0IGhhdmUuICovCisJcmV0dXJuIF9fYXJjaGl2ZV9yZWFkX2hlYWRlcihhLCBlbnRyeSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Rhci5jCmluZGV4IDYwODAwYmIuLmM2M2Q0NmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIuYwpAQCAtNjk0LDExICs2OTQsMTMgQEAKICAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIHNpemVfdCAqdW5jb25zdW1lZCkKIHsKIAlzc2l6ZV90IGJ5dGVzOwotCWludCBlcnI7CisJaW50IGVyciwgZW9mX3ZvbF9oZWFkZXI7CiAJY29uc3QgY2hhciAqaDsKIAljb25zdCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeV9oZWFkZXJfdXN0YXIgKmhlYWRlcjsKIAljb25zdCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeV9oZWFkZXJfZ251dGFyICpnbnVoZWFkZXI7CiAKKwllb2Zfdm9sX2hlYWRlciA9IDA7CisKIAkvKiBMb29wIHVudGlsIHdlIGZpbmQgYSB3b3JrYWJsZSBoZWFkZXIgcmVjb3JkLiAqLwogCWZvciAoOzspIHsKIAkJdGFyX2ZsdXNoX3VuY29uc3VtZWQoYSwgdW5jb25zdW1lZCk7CkBAIC03ODgsNiArNzkwLDggQEAKIAkJYnJlYWs7CiAJY2FzZSAnVic6IC8qIEdOVSB2b2x1bWUgaGVhZGVyICovCiAJCWVyciA9IGhlYWRlcl92b2x1bWUoYSwgdGFyLCBlbnRyeSwgaCwgdW5jb25zdW1lZCk7CisJCWlmIChlcnIgPT0gQVJDSElWRV9FT0YpCisJCQllb2Zfdm9sX2hlYWRlciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgJ1gnOiAvKiBVc2VkIGJ5IFNVTiB0YXI7IHNhbWUgYXMgJ3gnLiAqLwogCQlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0ID0gQVJDSElWRV9GT1JNQVRfVEFSX1BBWF9JTlRFUkNIQU5HRTsKQEAgLTg2Miw5ICs4NjYsMTcgQEAKIAkJfQogCQlyZXR1cm4gKGVycik7CiAJfQotCWlmIChlcnIgPT0gQVJDSElWRV9FT0YpCi0JCS8qIEVPRiB3aGVuIHJlY3Vyc2l2ZWx5IHJlYWRpbmcgYSBoZWFkZXIgaXMgYmFkLiAqLwotCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRUlOVkFMLCAiRGFtYWdlZCB0YXIgYXJjaGl2ZSIpOworCWlmIChlcnIgPT0gQVJDSElWRV9FT0YpIHsKKwkJaWYgKCFlb2Zfdm9sX2hlYWRlcikgeworCQkJLyogRU9GIHdoZW4gcmVjdXJzaXZlbHkgcmVhZGluZyBhIGhlYWRlciBpcyBiYWQuICovCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRUlOVkFMLAorCQkJICAgICJEYW1hZ2VkIHRhciBhcmNoaXZlIik7CisJCX0gZWxzZSB7CisJCQkvKiBJZiB3ZSBlbmNvdW50ZXIganVzdCBhIEdOVSB2b2x1bWUgaGVhZGVyIHRyZWF0CisJCQkgKiB0aGlzIHNpdHVhdGlvbiBhcyBhbiBlbXB0eSBhcmNoaXZlICovCisJCQlyZXR1cm4gKEFSQ0hJVkVfRU9GKTsKKwkJfQorCX0KIAlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogfQogCkBAIC0xOTQyLDYgKzE5NTQsMTUgQEAKIAkJCXBheF90aW1lKHZhbHVlLCAmcywgJm4pOwogCQkJYXJjaGl2ZV9lbnRyeV9zZXRfYmlydGh0aW1lKGVudHJ5LCBzLCBuKTsKIAkJfQorCQlpZiAoc3RyY21wKGtleSwgIkxJQkFSQ0hJVkUuc3ltbGlua3R5cGUiKSA9PSAwKSB7CisJCQlpZiAoc3RyY21wKHZhbHVlLCAiZmlsZSIpID09IDApIHsKKwkJCQlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUoZW50cnksCisJCQkJICAgIEFFX1NZTUxJTktfVFlQRV9GSUxFKTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAiZGlyIikgPT0gMCkgeworCQkJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlbnRyeSwKKwkJCQkgICAgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSk7CisJCQl9CisJCX0KIAkJaWYgKG1lbWNtcChrZXksICJMSUJBUkNISVZFLnhhdHRyLiIsIDE3KSA9PSAwKQogCQkJcGF4X2F0dHJpYnV0ZV94YXR0cihlbnRyeSwga2V5LCB2YWx1ZSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF93YXJjLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYwppbmRleCBlODc1Mzg1Li43Mjk3N2I4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYwpAQCAtMzg2LDYgKzM4NiwxMSBAQAogCQlyZXR1cm4gKEFSQ0hJVkVfRU9GKTsKIAl9CiAKKwlpZiAody0+dW5jb25zdW1lZCkgeworCQlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIHctPnVuY29uc3VtZWQpOworCQl3LT51bmNvbnN1bWVkID0gMFU7CisJfQorCiAJcmFiID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMVUsICZucmQpOwogCWlmIChucmQgPCAwKSB7CiAJCSpic3ogPSAwVTsKQEAgLTYyMSw3ICs2MjYsOCBAQAogCQlpZiAodmVyID49IDEyMDBVKSB7CiAJCQlpZiAobWVtY21wKGMsICJcclxuIiwgMlUpICE9IDApCiAJCQkJdmVyID0gMFU7Ci0JCX0gZWxzZSBpZiAodmVyIDwgMTIwMFUpIHsKKwkJfSBlbHNlIHsKKwkJCS8qIHZlciA8IDEyMDBVICovCiAJCQlpZiAoKmMgIT0gJyAnICYmICpjICE9ICdcdCcpCiAJCQkJdmVyID0gMFU7CiAJCX0KQEAgLTczOSw4ICs3NDUsOSBAQAogCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0ICovCiAJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSp2YWwpKQogCQlyZXR1cm4gLTE7CisJZXJybm8gPSAwOwogCWxlbiA9IHN0cnRvbCh2YWwsICZvbiwgMTApOwotCWlmIChvbiAhPSBlb2wpIHsKKwlpZiAoZXJybm8gIT0gMCB8fCBvbiAhPSBlb2wpIHsKIAkJLyogbGluZSBtdXN0IGVuZCBoZXJlICovCiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF94YXIuYwppbmRleCA5MjkyZWQ3Li4yYmM1YzdiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfeGFyLmMKQEAgLTE2Nyw2ICsxNjcsOSBAQAogI2RlZmluZSBIQVNfRkZMQUdTCQkweDAxMDAwCiAjZGVmaW5lIEhBU19YQVRUUgkJMHgwMjAwMAogI2RlZmluZSBIQVNfQUNMCQkJMHgwNDAwMAorI2RlZmluZSBIQVNfQ1RJTUUJCTB4MDgwMDAKKyNkZWZpbmUgSEFTX01USU1FCQkweDEwMDAwCisjZGVmaW5lIEhBU19BVElNRQkJMHgyMDAwMAogCiAJdWludDY0X3QJCSBpZDsKIAl1aW50NjRfdAkJIGxlbmd0aDsKQEAgLTY5NSw5ICs2OTgsMTUgQEAKIAkJICovCiAJCWZpbGVfZnJlZShmaWxlKTsKIAl9Ci0JYXJjaGl2ZV9lbnRyeV9zZXRfYXRpbWUoZW50cnksIGZpbGUtPmF0aW1lLCAwKTsKLQlhcmNoaXZlX2VudHJ5X3NldF9jdGltZShlbnRyeSwgZmlsZS0+Y3RpbWUsIDApOwotCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LCBmaWxlLT5tdGltZSwgMCk7CisgICAgICAgIGlmIChmaWxlLT5oYXMgJiBIQVNfQVRJTUUpIHsKKyAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9hdGltZShlbnRyeSwgZmlsZS0+YXRpbWUsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChmaWxlLT5oYXMgJiBIQVNfQ1RJTUUpIHsKKyAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9jdGltZShlbnRyeSwgZmlsZS0+Y3RpbWUsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChmaWxlLT5oYXMgJiBIQVNfTVRJTUUpIHsKKyAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9tdGltZShlbnRyeSwgZmlsZS0+bXRpbWUsIDApOworICAgICAgICB9CiAJYXJjaGl2ZV9lbnRyeV9zZXRfZ2lkKGVudHJ5LCBmaWxlLT5naWQpOwogCWlmIChmaWxlLT5nbmFtZS5sZW5ndGggPiAwICYmCiAJICAgIGFyY2hpdmVfZW50cnlfY29weV9nbmFtZV9sKGVudHJ5LCBmaWxlLT5nbmFtZS5zLApAQCAtNzg5LDcgKzc5OCw4IEBACiAJeGF0dHIgPSBmaWxlLT54YXR0cl9saXN0OwogCXdoaWxlICh4YXR0ciAhPSBOVUxMKSB7CiAJCWNvbnN0IHZvaWQgKmQ7Ci0JCXNpemVfdCBvdXRieXRlcywgdXNlZDsKKwkJc2l6ZV90IG91dGJ5dGVzID0gMDsKKwkJc2l6ZV90IHVzZWQgPSAwOwogCiAJCXIgPSBtb3ZlX3JlYWRpbmdfcG9pbnQoYSwgeGF0dHItPm9mZnNldCk7CiAJCWlmIChyICE9IEFSQ0hJVkVfT0spCkBAIC04MTEsOCArODIxLDE4IEBACiAJCXIgPSBjaGVja3N1bV9maW5hbChhLAogCQkgICAgeGF0dHItPmFfc3VtLnZhbCwgeGF0dHItPmFfc3VtLmxlbiwKIAkJICAgIHhhdHRyLT5lX3N1bS52YWwsIHhhdHRyLT5lX3N1bS5sZW4pOwotCQlpZiAociAhPSBBUkNISVZFX09LKQorCQlpZiAociAhPSBBUkNISVZFX09LKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgIlhhdHRyIGNoZWNrc3VtIGVycm9yIik7CisJCQlyID0gQVJDSElWRV9XQVJOOwogCQkJYnJlYWs7CisJCX0KKwkJaWYgKHhhdHRyLT5uYW1lLnMgPT0gTlVMTCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJYYXR0ciBuYW1lIGVycm9yIik7CisJCQlyID0gQVJDSElWRV9XQVJOOworCQkJYnJlYWs7CisJCX0KIAkJYXJjaGl2ZV9lbnRyeV94YXR0cl9hZGRfZW50cnkoZW50cnksCiAJCSAgICB4YXR0ci0+bmFtZS5zLCBkLCBvdXRieXRlcyk7CiAJCXhhdHRyID0geGF0dHItPm5leHQ7CkBAIC04MzgsNyArODU4LDcgQEAKICAgICBjb25zdCB2b2lkICoqYnVmZiwgc2l6ZV90ICpzaXplLCBpbnQ2NF90ICpvZmZzZXQpCiB7CiAJc3RydWN0IHhhciAqeGFyOwotCXNpemVfdCB1c2VkOworCXNpemVfdCB1c2VkID0gMDsKIAlpbnQgcjsKIAogCXhhciA9IChzdHJ1Y3QgeGFyICopKGEtPmZvcm1hdC0+ZGF0YSk7CkBAIC05NjcsNyArOTg3LDcgQEAKIAkJCQlyZXR1cm4gKChpbnQpc3RlcCk7CiAJCQl4YXItPm9mZnNldCArPSBzdGVwOwogCQl9IGVsc2UgewotCQkJaW50NjRfdCBwb3MgPSBfX2FyY2hpdmVfcmVhZF9zZWVrKGEsIG9mZnNldCwgU0VFS19TRVQpOworCQkJaW50NjRfdCBwb3MgPSBfX2FyY2hpdmVfcmVhZF9zZWVrKGEsIHhhci0+aF9iYXNlICsgb2Zmc2V0LCBTRUVLX1NFVCk7CiAJCQlpZiAocG9zID09IEFSQ0hJVkVfRkFJTEVEKSB7CiAJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwKIAkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLApAQCAtMTIyMCw4ICsxMjQwLDcgQEAKIAkJfQogCQltZW1jcHkobmV3X3BlbmRpbmdfZmlsZXMsIGhlYXAtPmZpbGVzLAogCQkgICAgaGVhcC0+YWxsb2NhdGVkICogc2l6ZW9mKG5ld19wZW5kaW5nX2ZpbGVzWzBdKSk7Ci0JCWlmIChoZWFwLT5maWxlcyAhPSBOVUxMKQotCQkJZnJlZShoZWFwLT5maWxlcyk7CisJCWZyZWUoaGVhcC0+ZmlsZXMpOwogCQloZWFwLT5maWxlcyA9IG5ld19wZW5kaW5nX2ZpbGVzOwogCQloZWFwLT5hbGxvY2F0ZWQgPSBuZXdfc2l6ZTsKIAl9CkBAIC0xNzY3LDggKzE3ODYsOCBAQAogCX0KIAlmaWxlLT5wYXJlbnQgPSB4YXItPmZpbGU7CiAJZmlsZS0+bW9kZSA9IDA3NzcgfCBBRV9JRlJFRzsKLQlmaWxlLT5hdGltZSA9IHRpbWUoTlVMTCk7Ci0JZmlsZS0+bXRpbWUgPSB0aW1lKE5VTEwpOworCWZpbGUtPmF0aW1lID0gIDA7CisJZmlsZS0+bXRpbWUgPSAwOwogCXhhci0+ZmlsZSA9IGZpbGU7CiAJeGFyLT54YXR0ciA9IE5VTEw7CiAJZm9yIChhdHRyID0gbGlzdC0+Zmlyc3Q7IGF0dHIgIT0gTlVMTDsgYXR0ciA9IGF0dHItPm5leHQpIHsKQEAgLTI1OTQsMTUgKzI2MTMsMTQgQEAKIAl3aGlsZSAobCA+IDApIHsKIAkJaW50IG4gPSAwOwogCi0JCWlmIChsID4gMCkgewotCQkJaWYgKGJhc2U2NFtiWzBdXSA8IDAgfHwgYmFzZTY0W2JbMV1dIDwgMCkKLQkJCQlicmVhazsKLQkJCW4gPSBiYXNlNjRbKmIrK10gPDwgMTg7Ci0JCQluIHw9IGJhc2U2NFsqYisrXSA8PCAxMjsKLQkJCSpvdXQrKyA9IG4gPj4gMTY7Ci0JCQlsZW4rKzsKLQkJCWwgLT0gMjsKLQkJfQorCQlpZiAoYmFzZTY0W2JbMF1dIDwgMCB8fCBiYXNlNjRbYlsxXV0gPCAwKQorCQkJYnJlYWs7CisJCW4gPSBiYXNlNjRbKmIrK10gPDwgMTg7CisJCW4gfD0gYmFzZTY0WypiKytdIDw8IDEyOworCQkqb3V0KysgPSBuID4+IDE2OworCQlsZW4rKzsKKwkJbCAtPSAyOworCiAJCWlmIChsID4gMCkgewogCQkJaWYgKGJhc2U2NFsqYl0gPCAwKQogCQkJCWJyZWFrOwpAQCAtMjc1MSwxNSArMjc2OSwxNSBAQAogCQl4YXItPmZpbGUtPnVpZCA9IGF0b2wxMChzLCBsZW4pOwogCQlicmVhazsKIAljYXNlIEZJTEVfQ1RJTUU6Ci0JCXhhci0+ZmlsZS0+aGFzIHw9IEhBU19USU1FOworCQl4YXItPmZpbGUtPmhhcyB8PSBIQVNfVElNRSB8IEhBU19DVElNRTsKIAkJeGFyLT5maWxlLT5jdGltZSA9IHBhcnNlX3RpbWUocywgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBGSUxFX01USU1FOgotCQl4YXItPmZpbGUtPmhhcyB8PSBIQVNfVElNRTsKKwkJeGFyLT5maWxlLT5oYXMgfD0gSEFTX1RJTUUgfCBIQVNfTVRJTUU7CiAJCXhhci0+ZmlsZS0+bXRpbWUgPSBwYXJzZV90aW1lKHMsIGxlbik7CiAJCWJyZWFrOwogCWNhc2UgRklMRV9BVElNRToKLQkJeGFyLT5maWxlLT5oYXMgfD0gSEFTX1RJTUU7CisJCXhhci0+ZmlsZS0+aGFzIHw9IEhBU19USU1FIHwgSEFTX0FUSU1FOwogCQl4YXItPmZpbGUtPmF0aW1lID0gcGFyc2VfdGltZShzLCBsZW4pOwogCQlicmVhazsKIAljYXNlIEZJTEVfREFUQV9MRU5HVEg6CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF96aXAuYwppbmRleCA3ZTk5YjEyLi4zNjgzMWY3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfemlwLmMKQEAgLTUyLDYgKzUyLDEyIEBACiAjaWZkZWYgSEFWRV9aTElCX0gKICNpbmNsdWRlIDxjbV96bGliLmg+CiAjZW5kaWYKKyNpZmRlZiBIQVZFX0JaTElCX0gKKyNpbmNsdWRlIDxiemxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MWk1BX0gKKyNpbmNsdWRlIDxsem1hLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKICNpbmNsdWRlICJhcmNoaXZlX2RpZ2VzdF9wcml2YXRlLmgiCkBAIC02Myw2ICs2OSw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9yYi5oIgogI2luY2x1ZGUgImFyY2hpdmVfcmVhZF9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9wcG1kOF9wcml2YXRlLmgiCiAKICNpZm5kZWYgSEFWRV9aTElCX0gKICNpbmNsdWRlICJhcmNoaXZlX2NyYzMyLmgiCkBAIC0xNjUsMTMgKzE3MiwzMCBAQAogCWNoYXIJCQlkZWNvbXByZXNzX2luaXQ7CiAJY2hhcgkJCWVuZF9vZl9lbnRyeTsKIAotI2lmZGVmIEhBVkVfWkxJQl9ICiAJdW5zaWduZWQgY2hhciAJCSp1bmNvbXByZXNzZWRfYnVmZmVyOwogCXNpemVfdCAJCQl1bmNvbXByZXNzZWRfYnVmZmVyX3NpemU7CisKKyNpZmRlZiBIQVZFX1pMSUJfSAogCXpfc3RyZWFtCQlzdHJlYW07CiAJY2hhcgkJCXN0cmVhbV92YWxpZDsKICNlbmRpZgogCisjaWYgSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BCisJbHptYV9zdHJlYW0JCXppcHhfbHptYV9zdHJlYW07CisJY2hhciAgICAgICAgICAgIHppcHhfbHptYV92YWxpZDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9CWkxJQl9ICisJYnpfc3RyZWFtCQlienN0cmVhbTsKKwljaGFyICAgICAgICAgICAgYnpzdHJlYW1fdmFsaWQ7CisjZW5kaWYKKworCUlCeXRlSW4JCQl6aXB4X3BwbWRfc3RyZWFtOworCXNzaXplX3QJCQl6aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkOworCUNQcG1kOAkJCXBwbWQ4OworCWNoYXIJCQlwcG1kOF92YWxpZDsKKwljaGFyCQkJcHBtZDhfc3RyZWFtX2ZhaWxlZDsKKwogCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzY29udjsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfZGVmYXVsdDsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfdXRmODsKQEAgLTIyMiw2ICsyNDYsMzMgQEAKIC8qIE1hbnkgc3lzdGVtcyBkZWZpbmUgbWluIG9yIE1JTiwgYnV0IG5vdCBhbGwuICovCiAjZGVmaW5lCXppcG1pbihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCiAKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBQcG1kOF9EZWNvZGVTeW1ib2wgZHVyaW5nIGRlY29tcHJlc3Npb24gb2YgUHBtZDgKKyAqIHN0cmVhbXMgaW5zaWRlIFpJUCBmaWxlcy4gSXQgaGFzIDIgcHVycG9zZXM6IG9uZSBpcyB0byBmZXRjaCB0aGUgbmV4dAorICogY29tcHJlc3NlZCBieXRlIGZyb20gdGhlIHN0cmVhbSwgc2Vjb25kIG9uZSBpcyB0byBpbmNyZWFzZSB0aGUgY291bnRlciBob3cKKyAqIG1hbnkgY29tcHJlc3NlZCBieXRlcyB3ZXJlIHJlYWQuICovCitzdGF0aWMgQnl0ZQorcHBtZF9yZWFkKHZvaWQqIHApIHsKKwkvKiBHZXQgdGhlIGhhbmRsZSB0byBjdXJyZW50IGRlY29tcHJlc3Npb24gY29udGV4dC4gKi8KKwlzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphID0gKChJQnl0ZUluKilwKS0+YTsKKwlzdHJ1Y3QgemlwICp6aXAgPSAoc3RydWN0IHppcCopIGEtPmZvcm1hdC0+ZGF0YTsKKwlzc2l6ZV90IGJ5dGVzX2F2YWlsID0gMDsKKworCS8qIEZldGNoIG5leHQgYnl0ZS4gKi8KKwljb25zdCB1aW50OF90KiBkYXRhID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMSwgJmJ5dGVzX2F2YWlsKTsKKwlpZihieXRlc19hdmFpbCA8IDEpIHsKKwkJemlwLT5wcG1kOF9zdHJlYW1fZmFpbGVkID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCAxKTsKKworCS8qIEluY3JlbWVudCB0aGUgY291bnRlci4gKi8KKwkrK3ppcC0+emlweF9wcG1kX3JlYWRfY29tcHJlc3NlZDsKKworCS8qIFJldHVybiB0aGUgbmV4dCBjb21wcmVzc2VkIGJ5dGUuICovCisJcmV0dXJuIGRhdGFbMF07Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgpAQCAtMzcyLDYgKzQyMyw4IEBACiAJezE3LCAicmVzZXJ2ZWQifSwgLyogUmVzZXJ2ZWQgYnkgUEtXQVJFICovCiAJezE4LCAiaWJtLXRlcnNlLW5ldyJ9LCAvKiBGaWxlIGlzIGNvbXByZXNzZWQgdXNpbmcgSUJNIFRFUlNFIChuZXcpICovCiAJezE5LCAiaWJtLWx6Nzc3In0sLyogSUJNIExaNzcgeiBBcmNoaXRlY3R1cmUgKFBGUykgKi8KKwl7OTUsICJ4eiJ9LCAgICAgICAvKiBYWiBjb21wcmVzc2VkIGRhdGEgKi8KKwl7OTYsICJqcGVnIn0sICAgICAvKiBKUEVHIGNvbXByZXNzZWQgZGF0YSAqLwogCXs5NywgIndhdi1wYWNrIn0sIC8qIFdhdlBhY2sgY29tcHJlc3NlZCBkYXRhICovCiAJezk4LCAicHBtZC0xIn0sICAgLyogUFBNZCB2ZXJzaW9uIEksIFJldiAxICovCiAJezk5LCAiYWVzIn0gICAgICAgLyogV2luWmlwIEFFUyBlbmNyeXB0aW9uICAqLwpAQCAtNDE5LDI3ICs0NzIsNDkgQEAKICAqICB0cmlwbGV0cy4gIGlkIGFuZCBzaXplIGFyZSAyIGJ5dGVzIGVhY2guCiAgKi8KIHN0YXRpYyBpbnQKLXByb2Nlc3NfZXh0cmEoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgY29uc3QgY2hhciAqcCwgc2l6ZV90IGV4dHJhX2xlbmd0aCwgc3RydWN0IHppcF9lbnRyeSogemlwX2VudHJ5KQorcHJvY2Vzc19leHRyYShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksCisgICAgIGNvbnN0IGNoYXIgKnAsIHNpemVfdCBleHRyYV9sZW5ndGgsIHN0cnVjdCB6aXBfZW50cnkqIHppcF9lbnRyeSkKIHsKIAl1bnNpZ25lZCBvZmZzZXQgPSAwOworCXN0cnVjdCB6aXAgKnppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CiAKIAlpZiAoZXh0cmFfbGVuZ3RoID09IDApIHsKIAkJcmV0dXJuIEFSQ0hJVkVfT0s7CiAJfQogCiAJaWYgKGV4dHJhX2xlbmd0aCA8IDQpIHsKLQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCSAgICAiVG9vLXNtYWxsIGV4dHJhIGRhdGE6IE5lZWQgYXQgbGVhc3QgNCBieXRlcywgYnV0IG9ubHkgZm91bmQgJWQgYnl0ZXMiLCAoaW50KWV4dHJhX2xlbmd0aCk7Ci0JCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKKwkJc2l6ZV90IGkgPSAwOworCQkvKiBTb21lIFpJUCBmaWxlcyBtYXkgaGF2ZSB0cmFpbGluZyAwIGJ5dGVzLiBMZXQncyBjaGVjayB0aGV5CisJCSAqIGFyZSBhbGwgMCBhbmQgaWdub3JlIHRoZW0gaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IuCisJCSAqCisJCSAqIFRoaXMgaXMgbm90IHRlY2huaWNhbGx5IGNvcnJlY3QsIGJ1dCBzb21lIFpJUCBmaWxlcyBsb29rCisJCSAqIGxpa2UgdGhpcyBhbmQgb3RoZXIgdG9vbHMgc3VwcG9ydCB0aG9zZSBmaWxlcyAtIHNvIGxldCdzCisJCSAqIGFsc28gIHN1cHBvcnQgdGhlbS4KKwkJICovCisJCWZvciAoOyBpIDwgZXh0cmFfbGVuZ3RoOyBpKyspIHsKKwkJCWlmIChwW2ldICE9IDApIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIlRvby1zbWFsbCBleHRyYSBkYXRhOiAiCisJCQkJICAgICJOZWVkIGF0IGxlYXN0IDQgYnl0ZXMsICIKKwkJCQkgICAgImJ1dCBvbmx5IGZvdW5kICVkIGJ5dGVzIiwKKwkJCQkgICAgKGludClleHRyYV9sZW5ndGgpOworCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBBUkNISVZFX09LOwogCX0KKwogCXdoaWxlIChvZmZzZXQgPD0gZXh0cmFfbGVuZ3RoIC0gNCkgewogCQl1bnNpZ25lZCBzaG9ydCBoZWFkZXJpZCA9IGFyY2hpdmVfbGUxNmRlYyhwICsgb2Zmc2V0KTsKIAkJdW5zaWduZWQgc2hvcnQgZGF0YXNpemUgPSBhcmNoaXZlX2xlMTZkZWMocCArIG9mZnNldCArIDIpOwogCiAJCW9mZnNldCArPSA0OwogCQlpZiAob2Zmc2V0ICsgZGF0YXNpemUgPiBleHRyYV9sZW5ndGgpIHsKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJFeHRyYSBkYXRhIG92ZXJmbG93OiBOZWVkICVkIGJ5dGVzIGJ1dCBvbmx5IGZvdW5kICVkIGJ5dGVzIiwKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsICJFeHRyYSBkYXRhIG92ZXJmbG93OiAiCisJCQkgICAgIk5lZWQgJWQgYnl0ZXMgYnV0IG9ubHkgZm91bmQgJWQgYnl0ZXMiLAogCQkJICAgIChpbnQpZGF0YXNpemUsIChpbnQpKGV4dHJhX2xlbmd0aCAtIG9mZnNldCkpOwogCQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwogCQl9CkBAIC00NTQsOSArNTI5LDEyIEBACiAJCQlpZiAoemlwX2VudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9PSAweGZmZmZmZmZmKSB7CiAJCQkJdWludDY0X3QgdCA9IDA7CiAJCQkJaWYgKGRhdGFzaXplIDwgOAotCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPiBJTlQ2NF9NQVgpIHsKLQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCB1bmNvbXByZXNzZWQgc2l6ZSIpOworCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPgorCQkJCSAgICBJTlQ2NF9NQVgpIHsKKwkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgIgorCQkJCQkgICAgInVuY29tcHJlc3NlZCBzaXplIik7CiAJCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJCQl9CiAJCQkJemlwX2VudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IHQ7CkBAIC00NjYsOSArNTQ0LDEyIEBACiAJCQlpZiAoemlwX2VudHJ5LT5jb21wcmVzc2VkX3NpemUgPT0gMHhmZmZmZmZmZikgewogCQkJCXVpbnQ2NF90IHQgPSAwOwogCQkJCWlmIChkYXRhc2l6ZSA8IDgKLQkJCQkgICAgfHwgKHQgPSBhcmNoaXZlX2xlNjRkZWMocCArIG9mZnNldCkpID4gSU5UNjRfTUFYKSB7Ci0JCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgY29tcHJlc3NlZCBzaXplIik7CisJCQkJICAgIHx8ICh0ID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyBvZmZzZXQpKSA+CisJCQkJICAgIElOVDY0X01BWCkgeworCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCAiCisJCQkJCSAgICAiY29tcHJlc3NlZCBzaXplIik7CiAJCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJCQl9CiAJCQkJemlwX2VudHJ5LT5jb21wcmVzc2VkX3NpemUgPSB0OwpAQCAtNDc4LDkgKzU1OSwxMiBAQAogCQkJaWYgKHppcF9lbnRyeS0+bG9jYWxfaGVhZGVyX29mZnNldCA9PSAweGZmZmZmZmZmKSB7CiAJCQkJdWludDY0X3QgdCA9IDA7CiAJCQkJaWYgKGRhdGFzaXplIDwgOAotCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPiBJTlQ2NF9NQVgpIHsKLQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCBsb2NhbCBoZWFkZXIgb2Zmc2V0Iik7CisJCQkJICAgIHx8ICh0ID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyBvZmZzZXQpKSA+CisJCQkJICAgIElOVDY0X01BWCkgeworCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCAiCisJCQkJCSAgICAibG9jYWwgaGVhZGVyIG9mZnNldCIpOwogCQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQkJfQogCQkJCXppcF9lbnRyeS0+bG9jYWxfaGVhZGVyX29mZnNldCA9IHQ7CkBAIC01MTMsNyArNTk3LDggQEAKIAkJCS8qIEV4dGVuZGVkIHRpbWUgZmllbGQgIlVUIi4gKi8KIAkJCWludCBmbGFnczsKIAkJCWlmIChkYXRhc2l6ZSA9PSAwKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCQkJICAgICJJbmNvbXBsZXRlIGV4dGVuZGVkIHRpbWUgZmllbGQiKTsKIAkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQl9CkBAIC01OTUsNyArNjgwLDggQEAKIAkJCSAqICBpZiBiaXRtYXAgJiAxLCAyIGJ5dGUgInZlcnNpb24gbWFkZSBieSIKIAkJCSAqICBpZiBiaXRtYXAgJiAyLCAyIGJ5dGUgImludGVybmFsIGZpbGUgYXR0cmlidXRlcyIKIAkJCSAqICBpZiBiaXRtYXAgJiA0LCA0IGJ5dGUgImV4dGVybmFsIGZpbGUgYXR0cmlidXRlcyIKLQkJCSAqICBpZiBiaXRtYXAgJiA4LCAyIGJ5dGUgY29tbWVudCBsZW5ndGggKyBuIGJ5dGUgY29tbWVudAorCQkJICogIGlmIGJpdG1hcCAmIDgsIDIgYnl0ZSBjb21tZW50IGxlbmd0aCArIG4gYnl0ZQorCQkJICogIGNvbW1lbnQKIAkJCSAqLwogCQkJaW50IGJpdG1hcCwgYml0bWFwX2xhc3Q7CiAKQEAgLTY0NiwxMyArNzMyLDE4IEBACiAJCQkJCSAgICA9IGV4dGVybmFsX2F0dHJpYnV0ZXMgPj4gMTY7CiAJCQkJfSBlbHNlIGlmICh6aXBfZW50cnktPnN5c3RlbSA9PSAwKSB7CiAJCQkJCS8vIEludGVycHJldCBNU0RPUyBkaXJlY3RvcnkgYml0Ci0JCQkJCWlmICgweDEwID09IChleHRlcm5hbF9hdHRyaWJ1dGVzICYgMHgxMCkpIHsKLQkJCQkJCXppcF9lbnRyeS0+bW9kZSA9IEFFX0lGRElSIHwgMDc3NTsKKwkJCQkJaWYgKDB4MTAgPT0gKGV4dGVybmFsX2F0dHJpYnV0ZXMgJgorCQkJCQkgICAgMHgxMCkpIHsKKwkJCQkJCXppcF9lbnRyeS0+bW9kZSA9CisJCQkJCQkgICAgQUVfSUZESVIgfCAwNzc1OwogCQkJCQl9IGVsc2UgewotCQkJCQkJemlwX2VudHJ5LT5tb2RlID0gQUVfSUZSRUcgfCAwNjY0OworCQkJCQkJemlwX2VudHJ5LT5tb2RlID0KKwkJCQkJCSAgICBBRV9JRlJFRyB8IDA2NjQ7CiAJCQkJCX0KLQkJCQkJaWYgKDB4MDEgPT0gKGV4dGVybmFsX2F0dHJpYnV0ZXMgJiAweDAxKSkgewotCQkJCQkJLy8gUmVhZC1vbmx5IGJpdDsgc3RyaXAgd3JpdGUgcGVybWlzc2lvbnMKKwkJCQkJaWYgKDB4MDEgPT0gKGV4dGVybmFsX2F0dHJpYnV0ZXMgJgorCQkJCQkgICAgMHgwMSkpIHsKKwkJCQkJCS8qIFJlYWQtb25seSBiaXQ7CisJCQkJCQkgKiBzdHJpcCB3cml0ZSBwZXJtaXNzaW9ucyAqLwogCQkJCQkJemlwX2VudHJ5LT5tb2RlICY9IDA1NTU7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewpAQCAtNjc5LDYgKzc3MCw1OSBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KKwkJY2FzZSAweDcwNzU6CisJCXsKKwkJCS8qIEluZm8tWklQIFVuaWNvZGUgUGF0aCBFeHRyYSBGaWVsZC4gKi8KKwkJCWlmIChkYXRhc2l6ZSA8IDUgfHwgZW50cnkgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCW9mZnNldCArPSA1OworCQkJZGF0YXNpemUgLT0gNTsKKworCQkJLyogVGhlIHBhdGggbmFtZSBpbiB0aGlzIGZpZWxkIGlzIGFsd2F5cyBlbmNvZGVkCisJCQkgKiBpbiBVVEYtOC4gKi8KKwkJCWlmICh6aXAtPnNjb252X3V0ZjggPT0gTlVMTCkgeworCQkJCXppcC0+c2NvbnZfdXRmOCA9CisJCQkJCWFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KAorCQkJCQkmYS0+YXJjaGl2ZSwgIlVURi04IiwgMSk7CisJCQkJLyogSWYgdGhlIGNvbnZlcnRlciBmcm9tIFVURi04IGlzIG5vdAorCQkJCSAqIGF2YWlsYWJsZSwgdGhlbiB0aGUgcGF0aCBuYW1lIGZyb20gdGhlIG1haW4KKwkJCQkgKiBmaWVsZCB3aWxsIG1vcmUgbGlrZWx5IGJlIGNvcnJlY3QuICovCisJCQkJaWYgKHppcC0+c2NvbnZfdXRmOCA9PSBOVUxMKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTWFrZSBzdXJlIHRoZSBDUkMzMiBvZiB0aGUgZmlsZW5hbWUgbWF0Y2hlcy4gKi8KKwkJCWlmICghemlwLT5pZ25vcmVfY3JjMzIpIHsKKwkJCQljb25zdCBjaGFyICpjcCA9IGFyY2hpdmVfZW50cnlfcGF0aG5hbWUoZW50cnkpOworCQkJCWlmIChjcCkgeworCQkJCQl1bnNpZ25lZCBsb25nIGZpbGVfY3JjID0KKwkJCQkJICAgIHppcC0+Y3JjMzJmdW5jKDAsIGNwLCBzdHJsZW4oY3ApKTsKKwkJCQkJdW5zaWduZWQgbG9uZyB1dGZfY3JjID0KKwkJCQkJICAgIGFyY2hpdmVfbGUzMmRlYyhwICsgb2Zmc2V0IC0gNCk7CisJCQkJCWlmIChmaWxlX2NyYyAhPSB1dGZfY3JjKSB7CisjaWZkZWYgREVCVUcKKwkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJICAgICJDUkMgZmlsZW5hbWUgbWlzbWF0Y2g7ICIKKwkJCQkJCSAgICAiQ0RFIGlzICVseCwgYnV0IFVURjggIgorCQkJCQkJICAgICJpcyBvdXRkYXRlZCB3aXRoICVseFxuIiwKKwkJCQkJCSAgICBmaWxlX2NyYywgdXRmX2NyYyk7CisjZW5kaWYKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lX2woZW50cnksCisJCQkgICAgcCArIG9mZnNldCwgZGF0YXNpemUsIHppcC0+c2NvbnZfdXRmOCkgIT0gMCkgeworCQkJCS8qIElnbm9yZSB0aGUgZXJyb3IsIGFuZCBmYWxsYmFjayB0byB0aGUgcGF0aAorCQkJCSAqIG5hbWUgZnJvbSB0aGUgbWFpbiBmaWVsZC4gKi8KKyNpZmRlZiBERUJVRworCQkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgdGhlIFpJUCAiCisJCQkJICAgICIweDcwNzUgZXh0cmEgZmllbGQgcGF0aC5cbiIpOworI2VuZGlmCisJCQl9CisJCQlicmVhazsKKwkJfQogCQljYXNlIDB4Nzg1NToKIAkJCS8qIEluZm8tWklQIFVuaXggRXh0cmEgRmllbGQgKHR5cGUgMikgIlV4Ii4gKi8KICNpZmRlZiBERUJVRwpAQCAtNzEzLDcgKzg1Nyw4IEBACiAJCQkJfQogCQkJCWlmIChkYXRhc2l6ZSA+PSAoMiArIHVpZHNpemUgKyAzKSkgewogCQkJCQkvKiBnZXQgYSBnaWQgc2l6ZS4gKi8KLQkJCQkJZ2lkc2l6ZSA9IDB4ZmYgJiAoaW50KXBbb2Zmc2V0KzIrdWlkc2l6ZV07CisJCQkJCWdpZHNpemUgPSAweGZmICYKKwkJCQkJICAgIChpbnQpcFtvZmZzZXQrMit1aWRzaXplXTsKIAkJCQkJaWYgKGdpZHNpemUgPT0gMikKIAkJCQkJCXppcF9lbnRyeS0+Z2lkID0KIAkJCQkJCSAgICBhcmNoaXZlX2xlMTZkZWMoCkBAIC03MzAsNyArODc1LDggQEAKIAkJY2FzZSAweDk5MDE6CiAJCQkvKiBXaW5aaXAgQUVTIGV4dHJhIGRhdGEgZmllbGQuICovCiAJCQlpZiAoZGF0YXNpemUgPCA2KSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCQkJICAgICJJbmNvbXBsZXRlIEFFUyBmaWVsZCIpOwogCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJCX0KQEAgLTc1MCwxMiArODk2LDYgQEAKIAkJfQogCQlvZmZzZXQgKz0gZGF0YXNpemU7CiAJfQotCWlmIChvZmZzZXQgIT0gZXh0cmFfbGVuZ3RoKSB7Ci0JCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkgICAgIk1hbGZvcm1lZCBleHRyYSBkYXRhOiBDb25zdW1lZCAlZCBieXRlcyBvZiAlZCBieXRlcyIsCi0JCSAgICAoaW50KW9mZnNldCwgKGludClleHRyYV9sZW5ndGgpOwotCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7Ci0JfQogCXJldHVybiBBUkNISVZFX09LOwogfQogCkBAIC04NzUsNyArMTAxNSw4IEBACiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJfQogCi0JaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBoLCBleHRyYV9sZW5ndGgsIHppcF9lbnRyeSkpIHsKKwlpZiAoQVJDSElWRV9PSyAhPSBwcm9jZXNzX2V4dHJhKGEsIGVudHJ5LCBoLCBleHRyYV9sZW5ndGgsCisJICAgIHppcF9lbnRyeSkpIHsKIAkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJfQogCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgZXh0cmFfbGVuZ3RoKTsKQEAgLTg5Miw4ICsxMDMzLDggQEAKIAkJemlwX2VudHJ5LT5tb2RlIHw9IDA2NjQ7CiAJfQogCi0JLyogV2luZG93cyBhcmNoaXZlcnMgc29tZXRpbWVzIHVzZSBiYWNrc2xhc2ggYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi0JICAgTm9ybWFsaXplIHRvIHNsYXNoLiAqLworCS8qIFdpbmRvd3MgYXJjaGl2ZXJzIHNvbWV0aW1lcyB1c2UgYmFja3NsYXNoIGFzIHRoZSBkaXJlY3RvcnkKKwkgKiBzZXBhcmF0b3IuIE5vcm1hbGl6ZSB0byBzbGFzaC4gKi8KIAlpZiAoemlwX2VudHJ5LT5zeXN0ZW0gPT0gMCAmJgogCSAgICAod3AgPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lX3coZW50cnkpKSAhPSBOVUxMKSB7CiAJCWlmICh3Y3NjaHIod3AsIEwnLycpID09IE5VTEwgJiYgd2NzY2hyKHdwLCBMJ1xcJykgIT0gTlVMTCkgewpAQCAtOTEyLDcgKzEwNTMsNyBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgZW50cmllcyB3aXRoIGEgdHJhaWxpbmcgJy8nIGFyZSBtYXJrZWQgYXMgZGlyZWN0b3JpZXMKIAkgKiBldmVuIGlmIHRoZSBFeHRlcm5hbCBGaWxlIEF0dHJpYnV0ZXMgY29udGFpbnMgYm9ndXMgdmFsdWVzLiAgSWYgdGhpcwotCSAqIGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgdGhlcmUgaXMgbm8gdHlwZSwgYXNzdW1lIHJlZ3VsYXJmaWxlLiAqLworCSAqIGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgdGhlcmUgaXMgbm8gdHlwZSwgYXNzdW1lIGEgcmVndWxhciBmaWxlLiAqLwogCWlmICgoemlwX2VudHJ5LT5tb2RlICYgQUVfSUZNVCkgIT0gQUVfSUZESVIpIHsKIAkJaW50IGhhc19zbGFzaDsKIApAQCAtOTYzLDcgKzExMDQsNyBAQAogCX0KIAogCWlmICh6aXBfZW50cnktPmZsYWdzICYgTEFfRlJPTV9DRU5UUkFMX0RJUkVDVE9SWSkgewotCQkvKiBJZiB0aGlzIGNhbWUgZnJvbSB0aGUgY2VudHJhbCBkaXIsIGl0J3Mgc2l6ZSBpbmZvCisJCS8qIElmIHRoaXMgY2FtZSBmcm9tIHRoZSBjZW50cmFsIGRpciwgaXRzIHNpemUgaW5mbwogCQkgKiBpcyBkZWZpbml0aXZlLCBzbyBpZ25vcmUgdGhlIGxlbmd0aC1hdC1lbmQgZmxhZy4gKi8KIAkJemlwX2VudHJ5LT56aXBfZmxhZ3MgJj0gflpJUF9MRU5HVEhfQVRfRU5EOwogCQkvKiBJZiBsb2NhbCBoZWFkZXIgaXMgbWlzc2luZyBhIHZhbHVlLCB1c2UgdGhlIG9uZSBmcm9tCkBAIC0xMjAyLDcgKzEzNDMsOCBAQAogCQkJCXppcC0+ZW50cnktPmNyYzMyID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA0KTsKIAkJCQljb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyA4KTsKIAkJCQl1bmNvbXByZXNzZWQgPSBhcmNoaXZlX2xlNjRkZWMocCArIDE2KTsKLQkJCQlpZiAoY29tcHJlc3NlZCA+IElOVDY0X01BWCB8fCB1bmNvbXByZXNzZWQgPiBJTlQ2NF9NQVgpIHsKKwkJCQlpZiAoY29tcHJlc3NlZCA+IElOVDY0X01BWCB8fCB1bmNvbXByZXNzZWQgPgorCQkJCSAgICBJTlQ2NF9NQVgpIHsKIAkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCiAJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkJCQkgICAgIk92ZXJmbG93IG9mIDY0LWJpdCBmaWxlIHNpemVzIik7CkBAIC0xMjk2LDYgKzE0MzgsNzQ1IEBACiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorc3RhdGljIGludAorY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWlmICh6aXAtPmVuZF9vZl9lbnRyeSAmJiAoemlwLT5lbnRyeS0+emlwX2ZsYWdzICYgWklQX0xFTkdUSF9BVF9FTkQpKSB7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJaWYgKE5VTEwgPT0gKHAgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAyNCwgTlVMTCkpKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJUcnVuY2F0ZWQgWklQIGVuZC1vZi1maWxlIHJlY29yZCIpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJfQorCQkvKiBDb25zdW1lIHRoZSBvcHRpb25hbCBQS1wwMDdcMDEwIG1hcmtlci4gKi8KKwkJaWYgKHBbMF0gPT0gJ1AnICYmIHBbMV0gPT0gJ0snICYmCisJCSAgICBwWzJdID09ICdcMDA3JyAmJiBwWzNdID09ICdcMDEwJykgeworCQkJcCArPSA0OworCQkJemlwLT51bmNvbnN1bWVkID0gNDsKKwkJfQorCQlpZiAoemlwLT5lbnRyeS0+ZmxhZ3MgJiBMQV9VU0VEX1pJUDY0KSB7CisJCQl1aW50NjRfdCBjb21wcmVzc2VkLCB1bmNvbXByZXNzZWQ7CisJCQl6aXAtPmVudHJ5LT5jcmMzMiA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKKwkJCWNvbXByZXNzZWQgPSBhcmNoaXZlX2xlNjRkZWMocCArIDQpOworCQkJdW5jb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyAxMik7CisJCQlpZiAoY29tcHJlc3NlZCA+IElOVDY0X01BWCB8fAorCQkJICAgIHVuY29tcHJlc3NlZCA+IElOVDY0X01BWCkgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgICAiT3ZlcmZsb3cgb2YgNjQtYml0IGZpbGUgc2l6ZXMiKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJCQl9CisJCQl6aXAtPmVudHJ5LT5jb21wcmVzc2VkX3NpemUgPSBjb21wcmVzc2VkOworCQkJemlwLT5lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgPSB1bmNvbXByZXNzZWQ7CisJCQl6aXAtPnVuY29uc3VtZWQgKz0gMjA7CisJCX0gZWxzZSB7CisJCQl6aXAtPmVudHJ5LT5jcmMzMiA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKKwkJCXppcC0+ZW50cnktPmNvbXByZXNzZWRfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYyhwICsgNCk7CisJCQl6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYyhwICsgOCk7CisJCQl6aXAtPnVuY29uc3VtZWQgKz0gMTI7CisJCX0KKwl9CisKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworfQorCisjaWYgSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BCitzdGF0aWMgaW50Cit6aXB4X3h6X2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWx6bWFfcmV0IHI7CisKKwlpZih6aXAtPnppcHhfbHptYV92YWxpZCkgeworCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCX0KKworCW1lbXNldCgmemlwLT56aXB4X2x6bWFfc3RyZWFtLCAwLCBzaXplb2YoemlwLT56aXB4X2x6bWFfc3RyZWFtKSk7CisJciA9IGx6bWFfc3RyZWFtX2RlY29kZXIoJnppcC0+emlweF9sem1hX3N0cmVhbSwgVUlOVDY0X01BWCwgMCk7CisJaWYgKHIgIT0gTFpNQV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCSAgICAieHogaW5pdGlhbGl6YXRpb24gZmFpbGVkKCVkKSIsCisJCSAgICByKTsKKworCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwl9CisKKwl6aXAtPnppcHhfbHptYV92YWxpZCA9IDE7CisKKwlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CisKKwl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkgICAgKHVpbnQ4X3QqKSBtYWxsb2MoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCWlmICh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIk5vIG1lbW9yeSBmb3IgeHogZGVjb21wcmVzc2lvbiIpOworCQkgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKworc3RhdGljIGludAoremlweF9sem1hX2Fsb25lX2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWx6bWFfcmV0IHI7CisJY29uc3QgdWludDhfdCogcDsKKworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKKwlzdHJ1Y3QgX2Fsb25lX2hlYWRlciB7CisJICAgIHVpbnQ4X3QgYnl0ZXNbNV07CisJICAgIHVpbnQ2NF90IHVuY29tcHJlc3NlZF9zaXplOworCX0gYWxvbmVfaGVhZGVyOworI3ByYWdtYSBwYWNrKHBvcCkKKworCWlmKHppcC0+emlweF9sem1hX3ZhbGlkKSB7CisJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQl6aXAtPnppcHhfbHptYV92YWxpZCA9IDA7CisJfQorCisJLyogVG8gdW5wYWNrIFpJUFgncyAiTFpNQSIgKGlkIDE0KSBzdHJlYW0gd2UgY2FuIHVzZSBzdGFuZGFyZCBsaWJsem1hCisJICogdGhhdCBpcyBhIHBhcnQgb2YgWFogVXRpbHMuIFRoZSBzdHJlYW0gZm9ybWF0IHN0b3JlZCBpbnNpZGUgWklQWAorCSAqIGZpbGUgaXMgYSBtb2RpZmllZCAibHptYSBhbG9uZSIgZmlsZSBmb3JtYXQsIHRoYXQgd2FzIHVzZWQgYnkgdGhlCisJICogYGx6bWFgIHV0aWxpdHkgd2hpY2ggd2FzIGxhdGVyIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGB4emAgdXRpbGl0eS4gCSAqIFNpbmNlIHRob3NlIGZvcm1hdHMgYXJlIG5lYXJseSB0aGUgc2FtZSwgd2UgY2FuIHVzZSBhIHN0YW5kYXJkCisJICogImx6bWEgYWxvbmUiIGRlY29kZXIgZnJvbSBYWiBVdGlscy4gKi8KKworCW1lbXNldCgmemlwLT56aXB4X2x6bWFfc3RyZWFtLCAwLCBzaXplb2YoemlwLT56aXB4X2x6bWFfc3RyZWFtKSk7CisJciA9IGx6bWFfYWxvbmVfZGVjb2RlcigmemlwLT56aXB4X2x6bWFfc3RyZWFtLCBVSU5UNjRfTUFYKTsKKwlpZiAociAhPSBMWk1BX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCYoYS0+YXJjaGl2ZSksIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJICAgICJsem1hIGluaXRpYWxpemF0aW9uIGZhaWxlZCglZCkiLCByKTsKKworCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwl9CisKKwkvKiBGbGFnIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgd2Ugd2FudCBvdXIgbHptYS1yZWxhdGVkIHN0cnVjdHVyZXMKKwkgKiB0byBiZSBmcmVlZCBsYXRlci4gKi8KKwl6aXAtPnppcHhfbHptYV92YWxpZCA9IDE7CisKKwkvKiBUaGUgImx6bWEgYWxvbmUiIGZpbGUgZm9ybWF0IGFuZCB0aGUgc3RyZWFtIGZvcm1hdCBpbnNpZGUgWklQeCBhcmUKKwkgKiBhbG1vc3QgdGhlIHNhbWUuIEhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0dXJlIG9mICJsem1hIGFsb25lIgorCSAqIGZvcm1hdDoKKwkgKgorCSAqICQgY2F0IC9iaW4vbHMgfCBsem1hIHwgeHhkIHwgaGVhZCAtbiAxCisJICogMDAwMDAwMDA6IDVkMDAgMDA4MCAwMGZmIGZmZmYgZmZmZiBmZmZmIGZmMDAgMjgxNAorCSAqCisJICogICAgNSBieXRlcyAgICAgICAgOCBieXRlcyAgICAgICAgbiBieXRlcworCSAqIDxsem1hX3BhcmFtcz48dW5jb21wcmVzc2VkX3NpemU+PGRhdGEuLi4+CisJICoKKwkgKiBsem1hX3BhcmFtcyBpcyBhIDUtYnl0ZSBibG9iIHRoYXQgaGFzIHRvIGJlIGRlY29kZWQgdG8gZXh0cmFjdAorCSAqIHBhcmFtZXRlcnMgb2YgdGhpcyBMWk1BIHN0cmVhbS4gVGhlIHVuY29tcHJlc3NlZF9zaXplIGZpZWxkIGlzIGFuCisJICogdWludDY0X3QgdmFsdWUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgKiB1bmNvbXByZXNzZWQgZmlsZSwgb3IgVUlOVDY0X01BWCBpZiB0aGlzIHZhbHVlIGlzIHVua25vd24uCisJICogVGhlIDxkYXRhLi4uPiBwYXJ0IGlzIHRoZSBhY3R1YWwgbHptYS1jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgorCSAqCisJICogTm93IGhlcmUncyB0aGUgc3RydWN0dXJlIG9mIHRoZSBzdHJlYW0gaW5zaWRlIHRoZSBaSVBYIGZpbGU6CisJICoKKwkgKiAkIGNhdCBzdHJlYW1faW5zaWRlX3ppcHggfCB4eGQgfCBoZWFkIC1uIDEKKwkgKiAwMDAwMDAwMDogMDkxNCAwNTAwIDVkMDAgODAwMCAwMDAwIDI4MTQgLi4uLiAuLi4uCisJICoKKwkgKiAgMmJ5dGUgICAyYnl0ZSAgICA1IGJ5dGVzICAgICBuIGJ5dGVzCisJICogPG1hZ2ljMT48bWFnaWMyPjxsem1hX3BhcmFtcz48ZGF0YS4uLj4KKwkgKgorCSAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgWklQWCBmaWxlIGNvbnRhaW5zIGFuIGFkZGl0aW9uYWwgbWFnaWMxIGFuZAorCSAqIG1hZ2ljMiBoZWFkZXJzLCB0aGUgbHptYV9wYXJhbXMgZmllbGQgY29udGFpbnMgdGhlIHNhbWUgcGFyYW1ldGVyCisJICogc2V0IGFzIGluIHRoZSAibHptYSBhbG9uZSIgZm9ybWF0LCBhbmQgdGhlIDxkYXRhLi4uPiBmaWVsZCBpcyB0aGUKKwkgKiBzYW1lIGFzIGluIHRoZSAibHptYSBhbG9uZSIgZm9ybWF0IGFzIHdlbGwuIE5vdGUgdGhhdCBhbHNvIHRoZSB6aXB4CisJICogZm9ybWF0IGlzIG1pc3NpbmcgdGhlIHVuY29tcHJlc3NlZF9zaXplIGZpZWxkLgorCSAqCisJICogU28sIGluIG9yZGVyIHRvIHVzZSB0aGUgImx6bWEgYWxvbmUiIGRlY29kZXIgZm9yIHRoZSB6aXB4IGx6bWEKKwkgKiBzdHJlYW0sIHdlIHNpbXBseSBuZWVkIHRvIHNodWZmbGUgYXJvdW5kIHNvbWUgZmllbGRzLCBwcmVwYXJlIGEgbmV3CisJICogbHptYSBhbG9uZSBoZWFkZXIsIGZlZWQgaXQgaW50byBsem1hIGFsb25lIGRlY29kZXIgc28gaXQgd2lsbAorCSAqIGluaXRpYWxpemUgaXRzZWxmIHByb3Blcmx5LCBhbmQgdGhlbiB3ZSBjYW4gc3RhcnQgZmVlZGluZyBub3JtYWwKKwkgKiB6aXB4IGx6bWEgc3RyZWFtIGludG8gdGhlIGRlY29kZXIuCisJICovCisKKwkvKiBSZWFkIG1hZ2ljMSxtYWdpYzIsbHptYV9wYXJhbXMgZnJvbSB0aGUgWklQWCBzdHJlYW0uICovCisJaWYoKHAgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCA5LCBOVUxMKSkgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgbHptYSBkYXRhIik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJaWYocFsyXSAhPSAweDA1IHx8IHBbM10gIT0gMHgwMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJJbnZhbGlkIGx6bWEgZGF0YSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFByZXBhcmUgYW4gbHptYSBhbG9uZSBoZWFkZXI6IGNvcHkgdGhlIGx6bWFfcGFyYW1zIGJsb2IgaW50bworCSAqIGEgcHJvcGVyIHBsYWNlIGludG8gdGhlIGx6bWEgYWxvbmUgaGVhZGVyLiAqLworCW1lbWNweSgmYWxvbmVfaGVhZGVyLmJ5dGVzWzBdLCBwICsgNCwgNSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSAndW5jb21wcmVzc2VkIHNpemUnIGZpZWxkIHRvIHVua25vd247IHdlJ2xsIG1hbnVhbGx5CisJICogbW9uaXRvciBob3cgbWFueSBieXRlcyB0aGVyZSBhcmUgc3RpbGwgdG8gYmUgdW5jb21wcmVzc2VkLiAqLworCWFsb25lX2hlYWRlci51bmNvbXByZXNzZWRfc2l6ZSA9IFVJTlQ2NF9NQVg7CisKKwlpZighemlwLT51bmNvbXByZXNzZWRfYnVmZmVyKSB7CisJCXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplID0gMjU2ICogMTAyNDsKKwkJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkJCSh1aW50OF90KikgbWFsbG9jKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplKTsKKworCQlpZiAoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCQkgICAgIk5vIG1lbW9yeSBmb3IgbHptYSBkZWNvbXByZXNzaW9uIik7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQl9CisJfQorCisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfaW4gPSAodm9pZCopICZhbG9uZV9oZWFkZXI7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX2luID0gc2l6ZW9mKGFsb25lX2hlYWRlcik7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luID0gMDsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX291dCA9IHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplOworCXppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9vdXQgPSAwOworCisJLyogRmVlZCBvbmx5IHRoZSBoZWFkZXIgaW50byB0aGUgbHptYSBhbG9uZSBkZWNvZGVyLiBUaGlzIHdpbGwKKwkgKiBlZmZlY3RpdmVseSBpbml0aWFsaXplIHRoZSBkZWNvZGVyLCBhbmQgd2lsbCBub3QgcHJvZHVjZSBhbnkKKwkgKiBvdXRwdXQgYnl0ZXMgeWV0LiAqLworCXIgPSBsem1hX2NvZGUoJnppcC0+emlweF9sem1hX3N0cmVhbSwgTFpNQV9SVU4pOworCWlmIChyICE9IExaTUFfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJsem1hIHN0cmVhbSBpbml0aWFsaXphdGlvbiBlcnJvciIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBXZSd2ZSBhbHJlYWR5IGNvbnN1bWVkIHNvbWUgYnl0ZXMsIHNvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuICovCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCA5KTsKKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSA5OworCXppcC0+ZW50cnlfY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IDk7CisKKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKworc3RhdGljIGludAoremlwX3JlYWRfZGF0YV96aXB4X3h6KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorCXNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB6aXAqIHppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CisJaW50IHJldDsKKwlsem1hX3JldCBsel9yZXQ7CisJY29uc3Qgdm9pZCogY29tcHJlc3NlZF9idWY7CisJc3NpemVfdCBieXRlc19hdmFpbCwgaW5fYnl0ZXMsIHRvX2NvbnN1bWUgPSAwOworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJbml0aWFsaXplIGRlY29tcHJlc3NvciBpZiBub3QgeWV0IGluaXRpYWxpemVkLiAqLworCWlmICghemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJcmV0ID0gemlweF94el9pbml0KGEsIHppcCk7CisJCWlmIChyZXQgIT0gQVJDSElWRV9PSykKKwkJCXJldHVybiAocmV0KTsKKwl9CisKKwljb21wcmVzc2VkX2J1ZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDEsICZieXRlc19hdmFpbCk7CisJaWYgKGJ5dGVzX2F2YWlsIDwgMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgeHogZmlsZSBib2R5Iik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJaW5fYnl0ZXMgPSB6aXBtaW4oemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcsIGJ5dGVzX2F2YWlsKTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9pbiA9IGNvbXByZXNzZWRfYnVmOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9pbiA9IGluX2J5dGVzOworCXppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbiA9IDA7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfb3V0ID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0ID0gMDsKKworCS8qIFBlcmZvcm0gdGhlIGRlY29tcHJlc3Npb24uICovCisJbHpfcmV0ID0gbHptYV9jb2RlKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0sIExaTUFfUlVOKTsKKwlzd2l0Y2gobHpfcmV0KSB7CisJCWNhc2UgTFpNQV9EQVRBX0VSUk9SOgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAieHogZGF0YSBlcnJvciAoZXJyb3IgJWQpIiwgKGludCkgbHpfcmV0KTsKKwkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisKKwkJY2FzZSBMWk1BX05PX0NIRUNLOgorCQljYXNlIExaTUFfT0s6CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAieHogdW5rbm93biBlcnJvciAlZCIsIChpbnQpIGx6X3JldCk7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCisJCWNhc2UgTFpNQV9TVFJFQU1fRU5EOgorCQkJbHptYV9lbmQoJnppcC0+emlweF9sem1hX3N0cmVhbSk7CisJCQl6aXAtPnppcHhfbHptYV92YWxpZCA9IDA7CisKKwkJCWlmKChpbnQ2NF90KSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfaW4gIT0KKwkJCSAgICB6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZykKKwkJCXsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCSAgICAieHogcHJlbWF0dXJlIGVuZCBvZiBzdHJlYW0iKTsKKwkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQorCisJCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJCQlicmVhazsKKwl9CisKKwl0b19jb25zdW1lID0gemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luOworCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCB0b19jb25zdW1lKTsKKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IHRvX2NvbnN1bWU7CisJemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCisJKnNpemUgPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCSpidWZmID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCisJcmV0ID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiAocmV0KTsKKworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF9sem1hX2Fsb25lKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorICAgIHNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB6aXAqIHppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CisJaW50IHJldDsKKwlsem1hX3JldCBsel9yZXQ7CisJY29uc3Qgdm9pZCogY29tcHJlc3NlZF9idWY7CisJc3NpemVfdCBieXRlc19hdmFpbCwgaW5fYnl0ZXMsIHRvX2NvbnN1bWU7CisKKwkodm9pZCkgb2Zmc2V0OyAvKiBVTlVTRUQgKi8KKworCS8qIEluaXRpYWxpemUgZGVjb21wcmVzc29yIGlmIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuICovCisJaWYgKCF6aXAtPmRlY29tcHJlc3NfaW5pdCkgeworCQlyZXQgPSB6aXB4X2x6bWFfYWxvbmVfaW5pdChhLCB6aXApOworCQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyogRmV0Y2ggbW9yZSBjb21wcmVzc2VkIGRhdGEuIFRoZSBzYW1lIG5vdGUgYXMgaW4gZGVmbGF0ZSBoYW5kbGVyCisJICogYXBwbGllcyBoZXJlIGFzIHdlbGw6CisJICoKKwkgKiBOb3RlOiAnMScgaGVyZSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gUmVjYWxsIHRoYXQgdGhlCisJICogZGVjb21wcmVzc2lvbiBsYXllciByZXR1cm5zIGEgY291bnQgb2YgYXZhaWxhYmxlIGJ5dGVzOyBhc2tpbmcgZm9yCisJICogbW9yZSB0aGFuIHRoYXQgZm9yY2VzIHRoZSBkZWNvbXByZXNzb3IgdG8gY29tYmluZSByZWFkcyBieSBjb3B5aW5nCisJICogZGF0YS4KKwkgKi8KKwljb21wcmVzc2VkX2J1ZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDEsICZieXRlc19hdmFpbCk7CisJaWYgKGJ5dGVzX2F2YWlsIDwgMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgbHptYSBmaWxlIGJvZHkiKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwkvKiBTZXQgZGVjb21wcmVzc29yIHBhcmFtZXRlcnMuICovCisJaW5fYnl0ZXMgPSB6aXBtaW4oemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcsIGJ5dGVzX2F2YWlsKTsKKworCXppcC0+emlweF9sem1hX3N0cmVhbS5uZXh0X2luID0gY29tcHJlc3NlZF9idWY7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX2luID0gaW5fYnl0ZXM7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luID0gMDsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX291dCA9CisJCS8qIFRoZXNlIGx6bWFfYWxvbmUgc3RyZWFtcyBsYWNrIGVuZCBvZiBzdHJlYW0gbWFya2VyLCBzbyBsZXQncworCQkgKiBtYWtlIHN1cmUgdGhlIHVucGFja2VyIHdvbid0IHRyeSB0byB1bnBhY2sgbW9yZSB0aGFuIGl0J3MKKwkJICogc3VwcG9zZWQgdG8uICovCisJCXppcG1pbigoaW50NjRfdCkgemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUsCisJCSAgICB6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSAtCisJCSAgICB6aXAtPmVudHJ5X3VuY29tcHJlc3NlZF9ieXRlc19yZWFkKTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0ID0gMDsKKworCS8qIFBlcmZvcm0gdGhlIGRlY29tcHJlc3Npb24uICovCisJbHpfcmV0ID0gbHptYV9jb2RlKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0sIExaTUFfUlVOKTsKKwlzd2l0Y2gobHpfcmV0KSB7CisJCWNhc2UgTFpNQV9EQVRBX0VSUk9SOgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAibHptYSBkYXRhIGVycm9yIChlcnJvciAlZCkiLCAoaW50KSBsel9yZXQpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKworCQkvKiBUaGlzIGNhc2UgaXMgb3B0aW9uYWwgaW4gbHptYSBhbG9uZSBmb3JtYXQuIEl0IGNhbiBoYXBwZW4sCisJCSAqIGJ1dCBtb3N0IG9mIHRoZSBmaWxlcyBkb24ndCBoYXZlIGl0LiAoR2l0SHViICMxMjU3KSAqLworCQljYXNlIExaTUFfU1RSRUFNX0VORDoKKwkJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCQkJaWYoKGludDY0X3QpIHppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbiAhPQorCQkJICAgIHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKQorCQkJeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkJICAgICJsem1hIGFsb25lIHByZW1hdHVyZSBlbmQgb2Ygc3RyZWFtIik7CisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCX0KKworCQkJemlwLT5lbmRfb2ZfZW50cnkgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBMWk1BX09LOgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgImx6bWEgdW5rbm93biBlcnJvciAlZCIsIChpbnQpIGx6X3JldCk7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCXRvX2NvbnN1bWUgPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfaW47CisKKwkvKiBVcGRhdGUgcG9pbnRlcnMuICovCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCB0b19jb25zdW1lKTsKKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IHRvX2NvbnN1bWU7CisJemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCisJaWYoemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPT0gMCkgeworCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJfQorCisJLyogUmV0dXJuIHZhbHVlcy4gKi8KKwkqc2l6ZSA9IHppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9vdXQ7CisJKmJ1ZmYgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisKKwkvKiBCZWhhdmUgdGhlIHNhbWUgd2F5IGFzIGR1cmluZyBkZWZsYXRlIGRlY29tcHJlc3Npb24uICovCisJcmV0ID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiAocmV0KTsKKworCS8qIEZyZWUgbHptYSBkZWNvZGVyIGhhbmRsZSBiZWNhdXNlIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0LiAqLworCWlmKHppcC0+ZW5kX29mX2VudHJ5KSB7CisJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQl6aXAtPnppcHhfbHptYV92YWxpZCA9IDA7CisJfQorCisJLyogSWYgd2UncmUgaGVyZSwgdGhlbiB3ZSdyZSBnb29kISAqLworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisjZW5kaWYgLyogSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BICovCisKK3N0YXRpYyBpbnQKK3ppcHhfcHBtZDhfaW5pdChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgemlwICp6aXApCit7CisJY29uc3Qgdm9pZCogcDsKKwl1aW50MzJfdCB2YWw7CisJdWludDMyX3Qgb3JkZXI7CisJdWludDMyX3QgbWVtOworCXVpbnQzMl90IHJlc3RvcmVfbWV0aG9kOworCisJLyogUmVtb3ZlIHByZXZpb3VzIGRlY29tcHJlc3Npb24gY29udGV4dCBpZiBpdCBleGlzdHMuICovCisJaWYoemlwLT5wcG1kOF92YWxpZCkgeworCQlfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0ZyZWUoJnppcC0+cHBtZDgpOworCQl6aXAtPnBwbWQ4X3ZhbGlkID0gMDsKKwl9CisKKwkvKiBDcmVhdGUgYSBuZXcgZGVjb21wcmVzc2lvbiBjb250ZXh0LiAqLworCV9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfQ29uc3RydWN0KCZ6aXAtPnBwbWQ4KTsKKwl6aXAtPnBwbWQ4X3N0cmVhbV9mYWlsZWQgPSAwOworCisJLyogU2V0dXAgZnVuY3Rpb24gcG9pbnRlcnMgcmVxdWlyZWQgYnkgUHBtZDggZGVjb21wcmVzc29yLiBUaGUKKwkgKiAncHBtZF9yZWFkJyBmdW5jdGlvbiB3aWxsIGZlZWQgbmV3IGJ5dGVzIHRvIHRoZSBkZWNvbXByZXNzb3IsCisJICogYW5kIHdpbGwgaW5jcmVtZW50IHRoZSAnemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkJyBjb3VudGVyLiAqLworCXppcC0+cHBtZDguU3RyZWFtLkluID0gJnppcC0+emlweF9wcG1kX3N0cmVhbTsKKwl6aXAtPnppcHhfcHBtZF9zdHJlYW0uYSA9IGE7CisJemlwLT56aXB4X3BwbWRfc3RyZWFtLlJlYWQgPSAmcHBtZF9yZWFkOworCisJLyogUmVzZXQgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgdG8gMC4gKi8KKwl6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQgPSAwOworCisJLyogUmVhZCBQcG1kOCBoZWFkZXIgKDIgYnl0ZXMpLiAqLworCXAgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAyLCBOVUxMKTsKKwlpZighcCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgZmlsZSBkYXRhIGluIFBQTWQ4IHN0cmVhbSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKwlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIDIpOworCisJLyogRGVjb2RlIHRoZSBzdHJlYW0ncyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiAqLworCXZhbCA9IGFyY2hpdmVfbGUxNmRlYyhwKTsKKwlvcmRlciA9ICh2YWwgJiAxNSkgKyAxOworCW1lbSA9ICgodmFsID4+IDQpICYgMHhmZikgKyAxOworCXJlc3RvcmVfbWV0aG9kID0gKHZhbCA+PiAxMik7CisKKwlpZihvcmRlciA8IDIgfHwgcmVzdG9yZV9tZXRob2QgPiAyKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkludmFsaWQgcGFyYW1ldGVyIHNldCBpbiBQUE1kOCBzdHJlYW0gKG9yZGVyPSVkLCAiCisJCSAgICAicmVzdG9yZT0lZCkiLCBvcmRlciwgcmVzdG9yZV9tZXRob2QpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IG5lZWRlZCB0byBwcm9wZXJseSBkZWNvbXByZXNzIHRoZSBmaWxlLiAqLworCWlmKCFfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0FsbG9jKCZ6aXAtPnBwbWQ4LCBtZW0gPDwgMjApKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUFBNZDggc3RyZWFtOiAlZCBieXRlcyIsCisJCSAgICBtZW0gPDwgMjApOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFNpZ25hbCB0aGUgY2xlYW51cCBmdW5jdGlvbiB0byByZWxlYXNlIFBwbWQ4IGNvbnRleHQgaW4gdGhlCisJICogY2xlYW51cCBwaGFzZS4gKi8KKwl6aXAtPnBwbWQ4X3ZhbGlkID0gMTsKKworCS8qIFBlcmZvcm0gZnVydGhlciBQcG1kOCBpbml0aWFsaXphdGlvbi4gKi8KKwlpZighX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9SYW5nZURlY19Jbml0KCZ6aXAtPnBwbWQ4KSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIlBQTWQ4IHN0cmVhbSByYW5nZSBkZWNvZGVyIGluaXRpYWxpemF0aW9uIGVycm9yIik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9Jbml0KCZ6aXAtPnBwbWQ4LCBvcmRlciwKKwkgICAgcmVzdG9yZV9tZXRob2QpOworCisJLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB1bmNvbXByZXNzZWQgZGF0YS4gKi8KKwlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CisKKwl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkgICAgKHVpbnQ4X3QqKSBtYWxsb2MoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCisJaWYoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJObyBtZW1vcnkgZm9yIFBQTWQ4IGRlY29tcHJlc3Npb24iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogUHBtZDggaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gKi8KKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisKKwkvKiBXZSd2ZSBhbHJlYWR5IHJlYWQgMiBieXRlcyBpbiB0aGUgb3V0cHV0IHN0cmVhbS4gQWRkaXRpb25hbGx5LAorCSAqIFBwbWQ4IGluaXRpYWxpemF0aW9uIGNvZGUgY291bGQgcmVhZCBzb21lIGRhdGEgYXMgd2VsbC4gU28gd2UKKwkgKiBhcmUgYWR2YW5jaW5nIHRoZSBzdHJlYW0gYnkgMiBieXRlcyBwbHVzIHdoYXRldmVyIG51bWJlciBvZgorCSAqIGJ5dGVzIFBwbWQ4IGluaXQgZnVuY3Rpb24gdXNlZC4gKi8KKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSAyICsgemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF9wcG1kKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorICAgIHNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB6aXAqIHppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CisJaW50IHJldDsKKwlzaXplX3QgY29uc3VtZWRfYnl0ZXMgPSAwOworCXNzaXplX3QgYnl0ZXNfYXZhaWwgPSAwOworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJZiB3ZSdyZSBoZXJlIGZvciB0aGUgZmlyc3QgdGltZSwgaW5pdGlhbGl6ZSBQcG1kOCBkZWNvbXByZXNzaW9uCisJICogY29udGV4dCBmaXJzdC4gKi8KKwlpZighemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJcmV0ID0gemlweF9wcG1kOF9pbml0KGEsIHppcCk7CisJCWlmKHJldCAhPSBBUkNISVZFX09LKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBGZXRjaCBmb3IgbW9yZSBkYXRhLiBXZSdyZSByZWFkaW5nIDEgYnl0ZSBoZXJlLCBidXQgbGliYXJjaGl2ZQorCSAqIHNob3VsZCBwcmVmZXRjaCBtb3JlIGJ5dGVzLiAqLworCSh2b2lkKSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxLCAmYnl0ZXNfYXZhaWwpOworCWlmKGJ5dGVzX2F2YWlsIDwgMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgUFBNZDggZmlsZSBib2R5Iik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJLyogVGhpcyBjb3VudGVyIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUgcHBtZF9yZWFkKCksIHdoaWNoIGF0IG9uZQorCSAqIHBvaW50IHdpbGwgYmUgY2FsbGVkIGJ5IFBwbWQ4X0RlY29kZVN5bWJvbC4gKi8KKwl6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQgPSAwOworCisJLyogRGVjb21wcmVzc2lvbiBsb29wLiAqLworCWRvIHsKKwkJaW50IHN5bSA9IF9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfRGVjb2RlU3ltYm9sKAorCQkgICAgJnppcC0+cHBtZDgpOworCQlpZihzeW0gPCAwKSB7CisJCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFRoaXMgZmllbGQgaXMgc2V0IGJ5IHBwbWRfcmVhZCgpIHdoZW4gdGhlcmUgd2FzIG5vIG1vcmUgZGF0YQorCQkgKiB0byBiZSByZWFkLiAqLworCQlpZih6aXAtPnBwbWQ4X3N0cmVhbV9mYWlsZWQpIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlRydW5jYXRlZCBQUE1kOCBmaWxlIGJvZHkiKTsKKwkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCX0KKworCQl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJbY29uc3VtZWRfYnl0ZXNdID0gKHVpbnQ4X3QpIHN5bTsKKwkJKytjb25zdW1lZF9ieXRlczsKKwl9IHdoaWxlKGNvbnN1bWVkX2J5dGVzIDwgemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCisJLyogVXBkYXRlIHBvaW50ZXJzIGZvciBsaWJhcmNoaXZlLiAqLworCSpidWZmID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCSpzaXplID0gY29uc3VtZWRfYnl0ZXM7CisKKwkvKiBVcGRhdGUgcG9pbnRlcnMgc28gd2UgY2FuIGNvbnRpbnVlIGRlY29tcHJlc3Npb24gaW4gYW5vdGhlciBjYWxsLiAqLworCXppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nIC09IHppcC0+emlweF9wcG1kX3JlYWRfY29tcHJlc3NlZDsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQ7CisJemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSBjb25zdW1lZF9ieXRlczsKKworCS8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2Ygc3RyZWFtLCBkZWluaXRpYWxpemUgUHBtZDggY29udGV4dC4gKi8KKwlpZih6aXAtPmVuZF9vZl9lbnRyeSkgeworCQlfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0ZyZWUoJnppcC0+cHBtZDgpOworCQl6aXAtPnBwbWQ4X3ZhbGlkID0gMDsKKwl9CisKKwkvKiBTZWVrIGZvciBvcHRpb25hbCBtYXJrZXIsIHNhbWUgd2F5IGFzIGluIGVhY2ggemlwIGVudHJ5LiAqLworCXJldCA9IGNvbnN1bWVfb3B0aW9uYWxfbWFya2VyKGEsIHppcCk7CisJaWYgKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKyNpZmRlZiBIQVZFX0JaTElCX0gKK3N0YXRpYyBpbnQKK3ppcHhfYnppcDJfaW5pdChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgemlwICp6aXApCit7CisJaW50IHI7CisKKwkvKiBEZWFsbG9jYXRlIGFscmVhZHkgZXhpc3RpbmcgQloyIGRlY29tcHJlc3Npb24gY29udGV4dCBpZiBpdAorCSAqIGV4aXN0cy4gKi8KKwlpZih6aXAtPmJ6c3RyZWFtX3ZhbGlkKSB7CisJCUJaMl9iekRlY29tcHJlc3NFbmQoJnppcC0+YnpzdHJlYW0pOworCQl6aXAtPmJ6c3RyZWFtX3ZhbGlkID0gMDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIG5ldyBCWjIgZGVjb21wcmVzc2lvbiBjb250ZXh0LiAqLworCW1lbXNldCgmemlwLT5ienN0cmVhbSwgMCwgc2l6ZW9mKGJ6X3N0cmVhbSkpOworCXIgPSBCWjJfYnpEZWNvbXByZXNzSW5pdCgmemlwLT5ienN0cmVhbSwgMCwgMSk7CisJaWYociAhPSBCWl9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCSAgICAiYnppcDIgaW5pdGlhbGl6YXRpb24gZmFpbGVkKCVkKSIsCisJCSAgICByKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJfQorCisJLyogTWFyayB0aGUgYnpzdHJlYW0gZmllbGQgdG8gYmUgcmVsZWFzZWQgaW4gY2xlYW51cCBwaGFzZS4gKi8KKwl6aXAtPmJ6c3RyZWFtX3ZhbGlkID0gMTsKKworCS8qIChSZSlhbGxvY2F0ZSB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIGRlY29tcHJlc3NlZCBieXRlcy4gKi8KKwlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CisKKwl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkgICAgKHVpbnQ4X3QqKSBtYWxsb2MoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCWlmICh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIk5vIG1lbW9yeSBmb3IgYnppcDIgZGVjb21wcmVzc2lvbiIpOworCQkgICAgcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogSW5pdGlhbGl6YXRpb24gZG9uZS4gKi8KKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF9iemlwMihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBjb25zdCB2b2lkICoqYnVmZiwKKyAgICBzaXplX3QgKnNpemUsIGludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgemlwICp6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCXNzaXplX3QgYnl0ZXNfYXZhaWwgPSAwLCBpbl9ieXRlcywgdG9fY29uc3VtZTsKKwljb25zdCB2b2lkICpjb21wcmVzc2VkX2J1ZmY7CisJaW50IHI7CisJdWludDY0X3QgdG90YWxfb3V0OworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJbml0aWFsaXplIGRlY29tcHJlc3Npb24gY29udGV4dCBpZiB3ZSdyZSBoZXJlIGZvciB0aGUgZmlyc3QgdGltZS4gKi8KKwlpZighemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJciA9IHppcHhfYnppcDJfaW5pdChhLCB6aXApOworCQlpZihyICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBGZXRjaCBtb3JlIGNvbXByZXNzZWQgYnl0ZXMuICovCisJY29tcHJlc3NlZF9idWZmID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMSwgJmJ5dGVzX2F2YWlsKTsKKwlpZihieXRlc19hdmFpbCA8IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGJ6aXAyIGZpbGUgYm9keSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCWluX2J5dGVzID0gemlwbWluKHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nLCBieXRlc19hdmFpbCk7CisJaWYoaW5fYnl0ZXMgPCAxKSB7CisJCS8qIGxpYmJ6MiBkb2Vzbid0IGNvbXBsYWluIHdoZW4gY2FsbGVyIGZlZWRzIGF2YWlsX2luID09IDAuCisJCSAqIEl0IHdpbGwgYWN0dWFsbHkgcmV0dXJuIHN1Y2Nlc3MgaW4gdGhpcyBjYXNlLCB3aGljaCBpcworCQkgKiB1bmRlc2lyYWJsZS4gVGhpcyBpcyB3aHkgd2UgbmVlZCB0byBtYWtlIHRoaXMgY2hlY2sKKwkJICogbWFudWFsbHkuICovCisKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGJ6aXAyIGZpbGUgYm9keSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFNldHVwIGJ1ZmZlciBib3VuZGFyaWVzLiAqLworCXppcC0+YnpzdHJlYW0ubmV4dF9pbiA9IChjaGFyKikodWludHB0cl90KSBjb21wcmVzc2VkX2J1ZmY7CisJemlwLT5ienN0cmVhbS5hdmFpbF9pbiA9IGluX2J5dGVzOworCXppcC0+YnpzdHJlYW0udG90YWxfaW5faGkzMiA9IDA7CisJemlwLT5ienN0cmVhbS50b3RhbF9pbl9sbzMyID0gMDsKKwl6aXAtPmJ6c3RyZWFtLm5leHRfb3V0ID0gKGNoYXIqKSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisJemlwLT5ienN0cmVhbS5hdmFpbF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZTsKKwl6aXAtPmJ6c3RyZWFtLnRvdGFsX291dF9oaTMyID0gMDsKKwl6aXAtPmJ6c3RyZWFtLnRvdGFsX291dF9sbzMyID0gMDsKKworCS8qIFBlcmZvcm0gdGhlIGRlY29tcHJlc3Npb24uICovCisJciA9IEJaMl9iekRlY29tcHJlc3MoJnppcC0+YnpzdHJlYW0pOworCXN3aXRjaChyKSB7CisJCWNhc2UgQlpfU1RSRUFNX0VORDoKKwkJCS8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgZGVpbml0aWFsaXplIHRoZQorCQkJICogZGVjb21wcmVzc2lvbiBjb250ZXh0IG5vdy4gKi8KKwkJCXN3aXRjaChCWjJfYnpEZWNvbXByZXNzRW5kKCZ6aXAtPmJ6c3RyZWFtKSkgeworCQkJCWNhc2UgQlpfT0s6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCQkgICAgIkZhaWxlZCB0byBjbGVhbiB1cCBiemlwMiAiCisJCQkJCSAgICAiZGVjb21wcmVzc29yIik7CisJCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJfQorCisJCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBCWl9PSzoKKwkJCS8qIFRoZSBkZWNvbXByZXNzb3IgaGFzIHN1Y2Nlc3NmdWxseSBkZWNvZGVkIHRoaXMKKwkJCSAqIGNodW5rIG9mIGRhdGEsIGJ1dCBtb3JlIGRhdGEgaXMgc3RpbGwgaW4gcXVldWUuICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgImJ6aXAyIGRlY29tcHJlc3Npb24gZmFpbGVkIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIHBvaW50ZXJzIHNvIGRlY29tcHJlc3NvciBjYW4gY29udGludWUgZGVjb2RpbmcuICovCisJdG9fY29uc3VtZSA9IHppcC0+YnpzdHJlYW0udG90YWxfaW5fbG8zMjsKKwlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIHRvX2NvbnN1bWUpOworCisJdG90YWxfb3V0ID0gKCh1aW50NjRfdCkgemlwLT5ienN0cmVhbS50b3RhbF9vdXRfaGkzMiA8PCAzMikgKworCSAgICB6aXAtPmJ6c3RyZWFtLnRvdGFsX291dF9sbzMyOworCisJemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgLT0gdG9fY29uc3VtZTsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfdW5jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gdG90YWxfb3V0OworCisJLyogR2l2ZSBsaWJhcmNoaXZlIGl0cyBkdWUuICovCisJKnNpemUgPSB0b3RhbF9vdXQ7CisJKmJ1ZmYgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisKKwkvKiBTZWVrIGZvciBvcHRpb25hbCBtYXJrZXIsIGxpa2UgaW4gb3RoZXIgZW50cmllcy4gKi8KKwlyID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZihyICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9aTElCX0gKIHN0YXRpYyBpbnQKIHppcF9kZWZsYXRlX2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQpAQCAtMTM3MSw4ICsyMjUyLDEwIEBACiAJaWYgKHppcC0+dGN0eF92YWxpZCB8fCB6aXAtPmNjdHhfdmFsaWQpIHsKIAkJaWYgKHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyA8IChzaXplX3QpYnl0ZXNfYXZhaWwpIHsKIAkJCXNpemVfdCBidWZmX3JlbWFpbmluZyA9Ci0JCQkgICAgKHppcC0+ZGVjcnlwdGVkX2J1ZmZlciArIHppcC0+ZGVjcnlwdGVkX2J1ZmZlcl9zaXplKQotCQkJICAgIC0gKHppcC0+ZGVjcnlwdGVkX3B0ciArIHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyk7CisJCQkgICAgKHppcC0+ZGVjcnlwdGVkX2J1ZmZlciArCisJCQkgICAgemlwLT5kZWNyeXB0ZWRfYnVmZmVyX3NpemUpCisJCQkgICAgLSAoemlwLT5kZWNyeXB0ZWRfcHRyICsKKwkJCSAgICB6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcpOwogCiAJCQlpZiAoYnVmZl9yZW1haW5pbmcgPiAoc2l6ZV90KWJ5dGVzX2F2YWlsKQogCQkJCWJ1ZmZfcmVtYWluaW5nID0gKHNpemVfdClieXRlc19hdmFpbDsKQEAgLTEzODMsMTIgKzIyNjYsMTIgQEAKIAkJCQkgICAgKyBidWZmX3JlbWFpbmluZykKIAkJCQkgICAgICA+IHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKSB7CiAJCQkJCWlmICh6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA8Ci0JCQkJCSAgICAgIChpbnQ2NF90KXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZykKKwkJCQkJICAgIChpbnQ2NF90KXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZykKIAkJCQkJCWJ1ZmZfcmVtYWluaW5nID0gMDsKIAkJCQkJZWxzZQogCQkJCQkJYnVmZl9yZW1haW5pbmcgPQogCQkJCQkJICAgIChzaXplX3QpemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcKLQkJCQkJCSAgICAgIC0gemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nOworCQkJCQkJICAgIC0gemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nOwogCQkJCX0KIAkJCX0KIAkJCWlmIChidWZmX3JlbWFpbmluZyA+IDApIHsKQEAgLTE0MDcsNyArMjI5MCw4IEBACiAJCQkJCSAgICAgICsgemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nLAogCQkJCQkgICAgJmRzaXplKTsKIAkJCQl9Ci0JCQkJemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nICs9IGJ1ZmZfcmVtYWluaW5nOworCQkJCXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyArPQorCQkJCSAgICBidWZmX3JlbWFpbmluZzsKIAkJCX0KIAkJfQogCQlieXRlc19hdmFpbCA9IHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZzsKQEAgLTE0NzAsNDIgKzIzNTQsOSBAQAogCQkJcmV0dXJuIChyKTsKIAl9CiAKLQlpZiAoemlwLT5lbmRfb2ZfZW50cnkgJiYgKHppcC0+ZW50cnktPnppcF9mbGFncyAmIFpJUF9MRU5HVEhfQVRfRU5EKSkgewotCQljb25zdCBjaGFyICpwOwotCi0JCWlmIChOVUxMID09IChwID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMjQsIE5VTEwpKSkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAiVHJ1bmNhdGVkIFpJUCBlbmQtb2YtZmlsZSByZWNvcmQiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7Ci0JCX0KLQkJLyogQ29uc3VtZSB0aGUgb3B0aW9uYWwgUEtcMDA3XDAxMCBtYXJrZXIuICovCi0JCWlmIChwWzBdID09ICdQJyAmJiBwWzFdID09ICdLJyAmJgotCQkgICAgcFsyXSA9PSAnXDAwNycgJiYgcFszXSA9PSAnXDAxMCcpIHsKLQkJCXAgKz0gNDsKLQkJCXppcC0+dW5jb25zdW1lZCA9IDQ7Ci0JCX0KLQkJaWYgKHppcC0+ZW50cnktPmZsYWdzICYgTEFfVVNFRF9aSVA2NCkgewotCQkJdWludDY0X3QgY29tcHJlc3NlZCwgdW5jb21wcmVzc2VkOwotCQkJemlwLT5lbnRyeS0+Y3JjMzIgPSBhcmNoaXZlX2xlMzJkZWMocCk7Ci0JCQljb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyA0KTsKLQkJCXVuY29tcHJlc3NlZCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgMTIpOwotCQkJaWYgKGNvbXByZXNzZWQgPiBJTlQ2NF9NQVggfHwgdW5jb21wcmVzc2VkID4gSU5UNjRfTUFYKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkJICAgICJPdmVyZmxvdyBvZiA2NC1iaXQgZmlsZSBzaXplcyIpOwotCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKLQkJCX0KLQkJCXppcC0+ZW50cnktPmNvbXByZXNzZWRfc2l6ZSA9IGNvbXByZXNzZWQ7Ci0JCQl6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IHVuY29tcHJlc3NlZDsKLQkJCXppcC0+dW5jb25zdW1lZCArPSAyMDsKLQkJfSBlbHNlIHsKLQkJCXppcC0+ZW50cnktPmNyYzMyID0gYXJjaGl2ZV9sZTMyZGVjKHApOwotCQkJemlwLT5lbnRyeS0+Y29tcHJlc3NlZF9zaXplID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA0KTsKLQkJCXppcC0+ZW50cnktPnVuY29tcHJlc3NlZF9zaXplID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA4KTsKLQkJCXppcC0+dW5jb25zdW1lZCArPSAxMjsKLQkJfQotCX0KKwlyID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZiAociAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gKHIpOwogCiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KQEAgLTE5MzMsNiArMjc4NCwyNCBAQAogCWNhc2UgMDogIC8qIE5vIGNvbXByZXNzaW9uLiAqLwogCQlyID0gIHppcF9yZWFkX2RhdGFfbm9uZShhLCBidWZmLCBzaXplLCBvZmZzZXQpOwogCQlicmVhazsKKyNpZmRlZiBIQVZFX0JaTElCX0gKKwljYXNlIDEyOiAvKiBaSVB4IGJ6aXAyIGNvbXByZXNzaW9uLiAqLworCQlyID0gemlwX3JlYWRfZGF0YV96aXB4X2J6aXAyKGEsIGJ1ZmYsIHNpemUsIG9mZnNldCk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BCisJY2FzZSAxNDogLyogWklQeCBMWk1BIGNvbXByZXNzaW9uLiAqLworCQlyID0gemlwX3JlYWRfZGF0YV96aXB4X2x6bWFfYWxvbmUoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSA5NTogLyogWklQeCBYWiBjb21wcmVzc2lvbi4gKi8KKwkJciA9IHppcF9yZWFkX2RhdGFfemlweF94eihhLCBidWZmLCBzaXplLCBvZmZzZXQpOworCQlicmVhazsKKyNlbmRpZgorCS8qIFBQTWQgc3VwcG9ydCBpcyBidWlsdC1pbiwgc28gd2UgZG9uJ3QgbmVlZCBhbnkgI2lmIGd1YXJkcy4gKi8KKwljYXNlIDk4OiAvKiBaSVB4IFBQTWQgY29tcHJlc3Npb24uICovCisJCXIgPSB6aXBfcmVhZF9kYXRhX3ppcHhfcHBtZChhLCBidWZmLCBzaXplLCBvZmZzZXQpOworCQlicmVhazsKKwogI2lmZGVmIEhBVkVfWkxJQl9ICiAJY2FzZSA4OiAvKiBEZWZsYXRlIGNvbXByZXNzaW9uLiAqLwogCQlyID0gIHppcF9yZWFkX2RhdGFfZGVmbGF0ZShhLCBidWZmLCBzaXplLCBvZmZzZXQpOwpAQCAtMTk0MSw4ICsyODEwLDggQEAKIAlkZWZhdWx0OiAvKiBVbnN1cHBvcnRlZCBjb21wcmVzc2lvbi4gKi8KIAkJLyogUmV0dXJuIGEgd2FybmluZy4gKi8KIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCSAgICAiVW5zdXBwb3J0ZWQgWklQIGNvbXByZXNzaW9uIG1ldGhvZCAoJXMpIiwKLQkJICAgIGNvbXByZXNzaW9uX25hbWUoemlwLT5lbnRyeS0+Y29tcHJlc3Npb24pKTsKKwkJICAgICJVbnN1cHBvcnRlZCBaSVAgY29tcHJlc3Npb24gbWV0aG9kICglZDogJXMpIiwKKwkJICAgIHppcC0+ZW50cnktPmNvbXByZXNzaW9uLCBjb21wcmVzc2lvbl9uYW1lKHppcC0+ZW50cnktPmNvbXByZXNzaW9uKSk7CiAJCS8qIFdlIGNhbid0IGRlY29tcHJlc3MgdGhpcyBlbnRyeSwgYnV0IHdlIHdpbGwKIAkJICogYmUgYWJsZSB0byBza2lwKCkgaXQgYW5kIHRyeSB0aGUgbmV4dCBlbnRyeS4gKi8KIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CkBAIC0yMDAwLDExICsyODY5LDI5IEBACiAJc3RydWN0IHppcF9lbnRyeSAqemlwX2VudHJ5LCAqbmV4dF96aXBfZW50cnk7CiAKIAl6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCiAjaWZkZWYgSEFWRV9aTElCX0gKIAlpZiAoemlwLT5zdHJlYW1fdmFsaWQpCiAJCWluZmxhdGVFbmQoJnppcC0+c3RyZWFtKTsKLQlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CiAjZW5kaWYKKworI2lmIEhBVkVfTFpNQV9IICYmIEhBVkVfTElCTFpNQQorICAgIGlmICh6aXAtPnppcHhfbHptYV92YWxpZCkgeworCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQlpMSUJfSAorCWlmICh6aXAtPmJ6c3RyZWFtX3ZhbGlkKSB7CisJCUJaMl9iekRlY29tcHJlc3NFbmQoJnppcC0+YnpzdHJlYW0pOworCX0KKyNlbmRpZgorCisJZnJlZSh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIpOworCisJaWYgKHppcC0+cHBtZDhfdmFsaWQpCisJCV9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfRnJlZSgmemlwLT5wcG1kOCk7CisKIAlpZiAoemlwLT56aXBfZW50cmllcykgewogCQl6aXBfZW50cnkgPSB6aXAtPnppcF9lbnRyaWVzOwogCQl3aGlsZSAoemlwX2VudHJ5ICE9IE5VTEwpIHsKQEAgLTI2MjgsNyArMzUxNSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNsdXJwX2NlbnRyYWxfZGlyZWN0b3J5KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCB6aXAgKnppcCkKK3NsdXJwX2NlbnRyYWxfZGlyZWN0b3J5KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlbnRyeSwKKyAgICBzdHJ1Y3QgemlwICp6aXApCiB7CiAJc3NpemVfdCBpOwogCXVuc2lnbmVkIGZvdW5kOwpAQCAtMjcwOCw2ICszNTk2LDExIEBACiAJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKIAogCQl6aXBfZW50cnkgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB6aXBfZW50cnkpKTsKKwkJaWYgKHppcF9lbnRyeSA9PSBOVUxMKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkJCSJDYW4ndCBhbGxvY2F0ZSB6aXAgZW50cnkiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CiAJCXppcF9lbnRyeS0+bmV4dCA9IHppcC0+emlwX2VudHJpZXM7CiAJCXppcF9lbnRyeS0+ZmxhZ3MgfD0gTEFfRlJPTV9DRU5UUkFMX0RJUkVDVE9SWTsKIAkJemlwLT56aXBfZW50cmllcyA9IHppcF9lbnRyeTsKQEAgLTI3MzMsOCArMzYyNiwxMCBAQAogCQlmaWxlbmFtZV9sZW5ndGggPSBhcmNoaXZlX2xlMTZkZWMocCArIDI4KTsKIAkJZXh0cmFfbGVuZ3RoID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzMCk7CiAJCWNvbW1lbnRfbGVuZ3RoID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzMik7Ci0JCS8qIGRpc2tfc3RhcnQgPSBhcmNoaXZlX2xlMTZkZWMocCArIDM0KTsgKi8gLyogQmV0dGVyIGJlIHplcm8uICovCi0JCS8qIGludGVybmFsX2F0dHJpYnV0ZXMgPSBhcmNoaXZlX2xlMTZkZWMocCArIDM2KTsgKi8gLyogdGV4dCBiaXQgKi8KKwkJLyogZGlza19zdGFydCA9IGFyY2hpdmVfbGUxNmRlYyhwICsgMzQpOworCQkgKiAgIEJldHRlciBiZSB6ZXJvLgorCQkgKiBpbnRlcm5hbF9hdHRyaWJ1dGVzID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzNik7CisJCSAqICAgdGV4dCBiaXQgKi8KIAkJZXh0ZXJuYWxfYXR0cmlidXRlcyA9IGFyY2hpdmVfbGUzMmRlYyhwICsgMzgpOwogCQl6aXBfZW50cnktPmxvY2FsX2hlYWRlcl9vZmZzZXQgPQogCQkgICAgYXJjaGl2ZV9sZTMyZGVjKHAgKyA0MikgKyBjb3JyZWN0aW9uOwpAQCAtMjc3MCw3ICszNjY1LDggQEAKIAkJCSAgICAiVHJ1bmNhdGVkIFpJUCBmaWxlIGhlYWRlciIpOwogCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJCX0KLQkJaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBwICsgZmlsZW5hbWVfbGVuZ3RoLCBleHRyYV9sZW5ndGgsIHppcF9lbnRyeSkpIHsKKwkJaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBlbnRyeSwgcCArIGZpbGVuYW1lX2xlbmd0aCwKKwkJICAgIGV4dHJhX2xlbmd0aCwgemlwX2VudHJ5KSkgewogCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJCX0KIApAQCAtMjc5Miw3ICszNjg4LDggQEAKIAkJCQkgKiBhIGRpcmVjdG9yeS4gV2Ugc2hvdWxkIHRyZWF0IGl0IGFzIGEgbm9uCiAJCQkJICogcmVzb3VyY2UgZm9yayBmaWxlIHRvIGV4cG9zZSBpdC4gKi8KIAkJCQlpZiAobmFtZVtmaWxlbmFtZV9sZW5ndGgtMV0gIT0gJy8nICYmCi0JCQkJICAgIChyIC0gbmFtZSA8IDMgfHwgclswXSAhPSAnLicgfHwgclsxXSAhPSAnXycpKSB7CisJCQkJICAgIChyIC0gbmFtZSA8IDMgfHwgclswXSAhPSAnLicgfHwKKwkJCQkgICAgIHJbMV0gIT0gJ18nKSkgewogCQkJCQlfX2FyY2hpdmVfcmJfdHJlZV9pbnNlcnRfbm9kZSgKIAkJCQkJICAgICZ6aXAtPnRyZWUsICZ6aXBfZW50cnktPm5vZGUpOwogCQkJCQkvKiBFeHBvc2UgaXRzIHBhcmVudCBkaXJlY3Rvcmllcy4gKi8KQEAgLTI4NjksOCArMzc2NiwxMCBAQAogCXN3aXRjaChyc3JjLT5jb21wcmVzc2lvbikgewogCWNhc2UgMDogIC8qIE5vIGNvbXByZXNzaW9uLiAqLwogCQlpZiAocnNyYy0+dW5jb21wcmVzc2VkX3NpemUgIT0gcnNyYy0+Y29tcHJlc3NlZF9zaXplKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAiTWFsZm9ybWVkIE9TIFggbWV0YWRhdGEgZW50cnk6IGluY29uc2lzdGVudCBzaXplIik7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJNYWxmb3JtZWQgT1MgWCBtZXRhZGF0YSBlbnRyeTogIgorCQkJICAgICJpbmNvbnNpc3RlbnQgc2l6ZSIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQogI2lmZGVmIEhBVkVfWkxJQl9ICkBAIC0zMDI5LDcgKzM5MjgsNyBAQAogCQlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0X25hbWUgPSAiWklQIjsKIAogCWlmICh6aXAtPnppcF9lbnRyaWVzID09IE5VTEwpIHsKLQkJciA9IHNsdXJwX2NlbnRyYWxfZGlyZWN0b3J5KGEsIHppcCk7CisJCXIgPSBzbHVycF9jZW50cmFsX2RpcmVjdG9yeShhLCBlbnRyeSwgemlwKTsKIAkJaWYgKHIgIT0gQVJDSElWRV9PSykKIAkJCXJldHVybiByOwogCQkvKiBHZXQgZmlyc3QgZW50cnkgd2hvc2UgbG9jYWwgaGVhZGVyIG9mZnNldCBpcyBsb3dlciB0aGFuCkBAIC0zMDU5LDggKzM5NTgsOCBAQAogCV9fYXJjaGl2ZV9yZWFkX3Jlc2V0X3Bhc3NwaHJhc2UoYSk7CiAKIAkvKiBGaWxlIGVudHJpZXMgYXJlIHNvcnRlZCBieSB0aGUgaGVhZGVyIG9mZnNldCwgd2Ugc2hvdWxkIG1vc3RseQotCSAqIHVzZSBfX2FyY2hpdmVfcmVhZF9jb25zdW1lIHRvIGFkdmFuY2UgYSByZWFkIHBvaW50IHRvIGF2b2lkIHJlZHVuZGFudAotCSAqIGRhdGEgcmVhZGluZy4gICovCisJICogdXNlIF9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUgdG8gYWR2YW5jZSBhIHJlYWQgcG9pbnQgdG8gYXZvaWQKKwkgKiByZWR1bmRhbnQgZGF0YSByZWFkaW5nLiAgKi8KIAlvZmZzZXQgPSBhcmNoaXZlX2ZpbHRlcl9ieXRlcygmYS0+YXJjaGl2ZSwgMCk7CiAJaWYgKG9mZnNldCA8IHppcC0+ZW50cnktPmxvY2FsX2hlYWRlcl9vZmZzZXQpCiAJCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwKQEAgLTMxNDEsMyArNDA0MCw1IEBACiAJCWZyZWUoemlwKTsKIAlyZXR1cm4gKEFSQ0hJVkVfT0spOwogfQorCisvKiMgdmltOnNldCBub2V0OiovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5jCmluZGV4IDg1NTk0Y2MuLmM3N2RjZjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5jCkBAIC03NSw2ICs3NSw5IEBACiAjZGVmaW5lIHdtZW1tb3ZlKGEsYixpKSAgKHdjaGFyX3QgKiltZW1tb3ZlKChhKSwgKGIpLCAoaSkgKiBzaXplb2Yod2NoYXJfdCkpCiAjZW5kaWYKIAorI3VuZGVmIG1heAorI2RlZmluZSBtYXgoYSwgYikgICAgICAgKChhKT4oYik/KGEpOihiKSkKKwogc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgewogCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252CSpuZXh0OwogCWNoYXIJCQkJKmZyb21fY2hhcnNldDsKQEAgLTQ1OCw3ICs0NjEsNyBAQAogCiAJaWYgKGZyb21fY3AgPT0gQ1BfQ19MT0NBTEUpIHsKIAkJLyoKLQkJICogIkMiIGxvY2FsZSBzcGVjaWFsIHByb2Nlc3MuCisJCSAqICJDIiBsb2NhbGUgc3BlY2lhbCBwcm9jZXNzaW5nLgogCQkgKi8KIAkJd2NoYXJfdCAqd3M7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1wOwpAQCAtNTkxLDcgKzU5NCw3IEBACiAJICogTm8gc2luZ2xlIGJ5dGUgd2lsbCBiZSBtb3JlIHRoYW4gb25lIHdpZGUgY2hhcmFjdGVyLAogCSAqIHNvIHRoaXMgbGVuZ3RoIGVzdGltYXRlIHdpbGwgYWx3YXlzIGJlIGJpZyBlbm91Z2guCiAJICovCi0Jc2l6ZV90IHdjc19sZW5ndGggPSBsZW47CisJLy8gc2l6ZV90IHdjc19sZW5ndGggPSBsZW47CiAJc2l6ZV90IG1ic19sZW5ndGggPSBsZW47CiAJY29uc3QgY2hhciAqbWJzID0gcDsKIAl3Y2hhcl90ICp3Y3M7CkBAIC02MDAsNyArNjAzLDExIEBACiAKIAltZW1zZXQoJnNoaWZ0X3N0YXRlLCAwLCBzaXplb2Yoc2hpZnRfc3RhdGUpKTsKICNlbmRpZgotCWlmIChOVUxMID09IGFyY2hpdmVfd3N0cmluZ19lbnN1cmUoZGVzdCwgZGVzdC0+bGVuZ3RoICsgd2NzX2xlbmd0aCArIDEpKQorCS8qCisJICogQXMgd2UgZGVjaWRlZCB0byBoYXZlIHdjc19sZW5ndGggPT0gbWJzX2xlbmd0aCA9PSBsZW4KKwkgKiB3ZSBjYW4gdXNlIGxlbiBoZXJlIGluc3RlYWQgb2Ygd2NzX2xlbmd0aAorCSAqLworCWlmIChOVUxMID09IGFyY2hpdmVfd3N0cmluZ19lbnN1cmUoZGVzdCwgZGVzdC0+bGVuZ3RoICsgbGVuICsgMSkpCiAJCXJldHVybiAoLTEpOwogCXdjcyA9IGRlc3QtPnMgKyBkZXN0LT5sZW5ndGg7CiAJLyoKQEAgLTYwOSw2ICs2MTYsMTIgQEAKIAkgKiBtdWx0aSBieXRlcy4KIAkgKi8KIAl3aGlsZSAoKm1icyAmJiBtYnNfbGVuZ3RoID4gMCkgeworCQkvKgorCQkgKiBUaGUgYnVmZmVyIHdlIGFsbG9jYXRlZCBpcyBhbHdheXMgYmlnIGVub3VnaC4KKwkJICogS2VlcCB0aGlzIGNvZGUgcGF0aCBpbiBhIGNvbW1lbnQgaWYgd2UgZGVjaWRlIHRvIGNob29zZQorCQkgKiBzbWFsbGVyIHdjc19sZW5ndGggaW4gdGhlIGZ1dHVyZQorCQkgKi8KKy8qCiAJCWlmICh3Y3NfbGVuZ3RoID09IDApIHsKIAkJCWRlc3QtPmxlbmd0aCA9IHdjcyAtIGRlc3QtPnM7CiAJCQlkZXN0LT5zW2Rlc3QtPmxlbmd0aF0gPSBMJ1wwJzsKQEAgLTYxOCwyNCArNjMxLDIwIEBACiAJCQkJcmV0dXJuICgtMSk7CiAJCQl3Y3MgPSBkZXN0LT5zICsgZGVzdC0+bGVuZ3RoOwogCQl9CisqLwogI2lmIEhBVkVfTUJSVE9XQwotCQlyID0gbWJydG93Yyh3Y3MsIG1icywgd2NzX2xlbmd0aCwgJnNoaWZ0X3N0YXRlKTsKKwkJciA9IG1icnRvd2Mod2NzLCBtYnMsIG1ic19sZW5ndGgsICZzaGlmdF9zdGF0ZSk7CiAjZWxzZQotCQlyID0gbWJ0b3djKHdjcywgbWJzLCB3Y3NfbGVuZ3RoKTsKKwkJciA9IG1idG93Yyh3Y3MsIG1icywgbWJzX2xlbmd0aCk7CiAjZW5kaWYKIAkJaWYgKHIgPT0gKHNpemVfdCktMSB8fCByID09IChzaXplX3QpLTIpIHsKIAkJCXJldF92YWwgPSAtMTsKLQkJCWlmIChlcnJubyA9PSBFSUxTRVEpIHsKLQkJCQkrK21iczsKLQkJCQktLW1ic19sZW5ndGg7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChyID09IDAgfHwgciA+IG1ic19sZW5ndGgpCiAJCQlicmVhazsKIAkJd2NzKys7Ci0JCXdjc19sZW5ndGgtLTsKKwkJLy8gd2NzX2xlbmd0aC0tOwogCQltYnMgKz0gcjsKIAkJbWJzX2xlbmd0aCAtPSByOwogCX0KQEAgLTY4MCw3ICs2ODksNyBAQAogCiAJaWYgKHRvX2NwID09IENQX0NfTE9DQUxFKSB7CiAJCS8qCi0JCSAqICJDIiBsb2NhbGUgc3BlY2lhbCBwcm9jZXNzLgorCQkgKiAiQyIgbG9jYWxlIHNwZWNpYWwgcHJvY2Vzc2luZy4KIAkJICovCiAJCWNvbnN0IHdjaGFyX3QgKndwID0gd3M7CiAJCWNoYXIgKnA7CkBAIC03OTksNyArODA4LDggQEAKIAkJCWFzLT5zW2FzLT5sZW5ndGhdID0gJ1wwJzsKIAkJCS8qIFJlLWFsbG9jYXRlIGJ1ZmZlciBmb3IgTUJTLiAqLwogCQkJaWYgKGFyY2hpdmVfc3RyaW5nX2Vuc3VyZShhcywKLQkJCSAgICBhcy0+bGVuZ3RoICsgbGVuICogMiArIDEpID09IE5VTEwpCisJCQkgICAgYXMtPmxlbmd0aCArIG1heChsZW4gKiAyLAorCQkJICAgIChzaXplX3QpTUJfQ1VSX01BWCkgKyAxKSA9PSBOVUxMKQogCQkJCXJldHVybiAoLTEpOwogCQkJcCA9IGFzLT5zICsgYXMtPmxlbmd0aDsKIAkJCWVuZCA9IGFzLT5zICsgYXMtPmJ1ZmZlcl9sZW5ndGggLSBNQl9DVVJfTUFYIC0xOwpAQCAtODkwLDcgKzkwMCw3IEBACiAgICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICopKQogewogCWlmIChzYyA9PSBOVUxMIHx8IHNjLT5uY29udmVydGVyID49IDIpCi0JCV9fYXJjaGl2ZV9lcnJ4KDEsICJQcm9ncmFtaW5nIGVycm9yIik7CisJCV9fYXJjaGl2ZV9lcnJ4KDEsICJQcm9ncmFtbWluZyBlcnJvciIpOwogCXNjLT5jb252ZXJ0ZXJbc2MtPm5jb252ZXJ0ZXIrK10gPSBjb252ZXJ0ZXI7CiB9CiAKQEAgLTM0NDEsNyArMzQ1MSw4IEBACiAJCQlhcy0+bGVuZ3RoID0gcCAtIGFzLT5zOwogCQkJLyogUmUtYWxsb2NhdGUgYnVmZmVyIGZvciBNQlMuICovCiAJCQlpZiAoYXJjaGl2ZV9zdHJpbmdfZW5zdXJlKGFzLAotCQkJICAgIGFzLT5sZW5ndGggKyBsZW4gKiAyICsgMSkgPT0gTlVMTCkKKwkJCSAgICBhcy0+bGVuZ3RoICsgbWF4KGxlbiAqIDIsCisJCQkgICAgKHNpemVfdClNQl9DVVJfTUFYKSArIDEpID09IE5VTEwpCiAJCQkJcmV0dXJuICgtMSk7CiAJCQlwID0gYXMtPnMgKyBhcy0+bGVuZ3RoOwogCQkJZW5kID0gYXMtPnMgKyBhcy0+YnVmZmVyX2xlbmd0aCAtIE1CX0NVUl9NQVggLTE7CkBAIC00MDUzLDYgKzQwNjQsNyBAQAogewogICBpZiAodXRmOCA9PSBOVUxMKSB7CiAgICAgYWVzLT5hZXNfc2V0ID0gMDsKKyAgICByZXR1cm4gKDApOwogICB9CiAgIGFlcy0+YWVzX3NldCA9IEFFU19TRVRfVVRGODsKICAgYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJihhZXMtPmFlc19tYnMpKTsKQEAgLTQwNjcsNiArNDA3OSw3IEBACiB7CiAJaWYgKHdjcyA9PSBOVUxMKSB7CiAJCWFlcy0+YWVzX3NldCA9IDA7CisJCXJldHVybiAoMCk7CiAJfQogCWFlcy0+YWVzX3NldCA9IEFFU19TRVRfV0NTOyAvKiBPbmx5IFdDUyBmb3JtIHNldC4gKi8KIAlhcmNoaXZlX3N0cmluZ19lbXB0eSgmKGFlcy0+YWVzX21icykpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuaAppbmRleCA1NmRmYmIyLi4yN2UxYWQ2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuaApAQCAtMjYsMTUgKzI2LDE1IEBACiAgKgogICovCiAKKyNpZm5kZWYgQVJDSElWRV9TVFJJTkdfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1NUUklOR19IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9TVFJJTkdfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX1NUUklOR19IX0lOQ0xVREVECi0KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+ICAvKiByZXF1aXJlZCBmb3Igd2NoYXJfdCBvbiBzb21lIHN5c3RlbXMgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZ19jb21wb3NpdGlvbi5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nX2NvbXBvc2l0aW9uLmgKaW5kZXggODkwMmFjMS4uZDBhYzM0MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nX2NvbXBvc2l0aW9uLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nX2NvbXBvc2l0aW9uLmgKQEAgLTM0LDEzICszNCwxMyBAQAogICogIFNlZSBhbHNvIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnQvdHIxNS8KICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfU1RSSU5HX0NPTVBPU0lUSU9OX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9TVFJJTkdfQ09NUE9TSVRJT05fSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1NUUklOR19DT01QT1NJVElPTl9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfU1RSSU5HX0NPTVBPU0lUSU9OX0hfSU5DTFVERUQKLQogc3RydWN0IHVuaWNvZGVfY29tcG9zaXRpb25fdGFibGUgewogCXVpbnQzMl90IGNwMTsKIAl1aW50MzJfdCBjcDI7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLjMKaW5kZXggOTlhYjg0Mi4uZDVkNGU3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuMwpAQCAtOTIsMTAgKzkyLDEwIEBACiBOb3QgZ2VuZXJhbGx5IHVzZWQgaW4gY2xpZW50IGNvZGUuCiAuSXQgRm4gYXJjaGl2ZV9jb21wcmVzc2lvbgogU3lub255bSBmb3IKLS5GbiBhcmNoaXZlX2ZpbHRlcl9jb2RlKGEsIDApIC4KKy5GbiBhcmNoaXZlX2ZpbHRlcl9jb2RlIGEgMCAuCiAuSXQgRm4gYXJjaGl2ZV9jb21wcmVzc2lvbl9uYW1lCiBTeW5vbnltIGZvcgotLkZuIGFyY2hpdmVfZmlsdGVyX25hbWUoYSwgMCkgLgorLkZuIGFyY2hpdmVfZmlsdGVyX25hbWUgYSAwIC4KIC5JdCBGbiBhcmNoaXZlX2NvcHlfZXJyb3IKIENvcGllcyBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIG9uZSBhcmNoaXZlIHRvIGFub3RoZXIuCiAuSXQgRm4gYXJjaGl2ZV9lcnJubwpAQCAtMTQyLDEzICsxNDIsMTMgQEAKIGZpbHRlciAxIGlzIHRoZSB1dWRlY29kZSBmaWx0ZXIsCiBhbmQgZmlsdGVyIDIgaXMgdGhlIHBzZXVkby1maWx0ZXIgdGhhdCB3cmFwcyB0aGUgYXJjaGl2ZSByZWFkIGZ1bmN0aW9ucy4KIEluIHRoaXMgY2FzZSwgcmVxdWVzdGluZwotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgLTEpCisuRm4gYXJjaGl2ZV9wb3NpdGlvbiBhIC0xCiB3b3VsZCBiZSBhIHN5bm9ueW0gZm9yCi0uRm4gYXJjaGl2ZV9wb3NpdGlvbihhLCAyKQorLkZuIGFyY2hpdmVfcG9zaXRpb24gYSAyCiB3aGljaCB3b3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgcmVhZCBmcm9tIHRoZSBhcmNoaXZlLCB3aGlsZQotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgMSkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgMQogd291bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWZ0ZXIgdXVkZWNvZGluZywgYW5kCi0uRm4gYXJjaGl2ZV9wb3NpdGlvbihhLCAwKQorLkZuIGFyY2hpdmVfcG9zaXRpb24gYSAwCiB3b3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhZnRlciBkZWNvbXByZXNzaW9uLgogLkl0IEZuIGFyY2hpdmVfZmlsdGVyX25hbWUKIFJldHVybnMgYSB0ZXh0dWFsIG5hbWUgaWRlbnRpZnlpbmcgdGhlIGluZGljYXRlZCBmaWx0ZXIuCkBAIC0xNzAsOSArMTcwLDkgQEAKIC5JdCBGbiBhcmNoaXZlX3Bvc2l0aW9uCiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIGluZGljYXRlZCBmaWx0ZXIuCiBJbiBwYXJ0aWN1bGFyLAotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgMCkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgMAogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3Igd3JpdHRlbiBieSB0aGUgZm9ybWF0IGhhbmRsZXIsIHdoaWxlCi0uRm4gYXJjaGl2ZV9wb3NpdGlvbihhLCAtMSkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgLTEKIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIHdyaXR0ZW4gdG8gdGhlIGFyY2hpdmUuCiBTZWUKIC5GbiBhcmNoaXZlX2ZpbHRlcl9jb3VudApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC5jCmluZGV4IGU1YzZlM2IuLmU0Y2IwNTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLmMKQEAgLTIxOCw4ICsyMTgsOCBAQAogICogQWxzbyBXaW5kb3dzIHZlcnNpb24gb2YgbWt0ZW1wIGZhbWlseSBpbmNsdWRpbmcgX21rdGVtcF9zCiAgKiBhcmUgbm90IHNlY3VyZS4KICAqLwotaW50Ci1fX2FyY2hpdmVfbWt0ZW1wKGNvbnN0IGNoYXIgKnRtcGRpcikKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9ta3RlbXB4KGNvbnN0IGNoYXIgKnRtcGRpciwgd2NoYXJfdCAqdGVtcGxhdGUpCiB7CiAJc3RhdGljIGNvbnN0IHdjaGFyX3QgcHJlZml4W10gPSBMImxpYmFyY2hpdmVfIjsKIAlzdGF0aWMgY29uc3Qgd2NoYXJfdCBzdWZmaXhbXSA9IEwiWFhYWFhYWFhYWCI7CkBAIC0yNDMsNjQgKzI0Myw3NiBAQAogCWhQcm92ID0gKEhDUllQVFBST1YpTlVMTDsKIAlmZCA9IC0xOwogCXdzID0gTlVMTDsKLQlhcmNoaXZlX3N0cmluZ19pbml0KCZ0ZW1wX25hbWUpOwogCi0JLyogR2V0IGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gKi8KLQlpZiAodG1wZGlyID09IE5VTEwpIHsKLQkJc2l6ZV90IGw7Ci0JCXdjaGFyX3QgKnRtcDsKKwlpZiAodGVtcGxhdGUgPT0gTlVMTCkgeworCQlhcmNoaXZlX3N0cmluZ19pbml0KCZ0ZW1wX25hbWUpOwogCi0JCWwgPSBHZXRUZW1wUGF0aFcoMCwgTlVMTCk7Ci0JCWlmIChsID09IDApIHsKLQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7Ci0JCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQkJfQotCQl0bXAgPSBtYWxsb2MobCpzaXplb2Yod2NoYXJfdCkpOwotCQlpZiAodG1wID09IE5VTEwpIHsKLQkJCWVycm5vID0gRU5PTUVNOwotCQkJZ290byBleGl0X3RtcGZpbGU7Ci0JCX0KLQkJR2V0VGVtcFBhdGhXKChEV09SRClsLCB0bXApOwotCQlhcmNoaXZlX3dzdHJjcHkoJnRlbXBfbmFtZSwgdG1wKTsKLQkJZnJlZSh0bXApOwotCX0gZWxzZSB7Ci0JCWlmIChhcmNoaXZlX3dzdHJpbmdfYXBwZW5kX2Zyb21fbWJzKCZ0ZW1wX25hbWUsIHRtcGRpciwKLQkJICAgIHN0cmxlbih0bXBkaXIpKSA8IDApCi0JCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQkJaWYgKHRlbXBfbmFtZS5zW3RlbXBfbmFtZS5sZW5ndGgtMV0gIT0gTCcvJykKLQkJCWFyY2hpdmVfd3N0cmFwcGVuZF93Y2hhcigmdGVtcF9uYW1lLCBMJy8nKTsKLQl9CisJCS8qIEdldCBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuICovCisJCWlmICh0bXBkaXIgPT0gTlVMTCkgeworCQkJc2l6ZV90IGw7CisJCQl3Y2hhcl90ICp0bXA7CiAKLQkvKiBDaGVjayBpZiB0ZW1wX25hbWUgaXMgYSBkaXJlY3RvcnkuICovCi0JYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyh0ZW1wX25hbWUucyk7Ci0JaWYgKGF0dHIgPT0gKERXT1JEKS0xKSB7Ci0JCWlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgewotCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKLQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJbCA9IEdldFRlbXBQYXRoVygwLCBOVUxMKTsKKwkJCWlmIChsID09IDApIHsKKwkJCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJfQorCQkJdG1wID0gbWFsbG9jKGwqc2l6ZW9mKHdjaGFyX3QpKTsKKwkJCWlmICh0bXAgPT0gTlVMTCkgeworCQkJCWVycm5vID0gRU5PTUVNOworCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJfQorCQkJR2V0VGVtcFBhdGhXKChEV09SRClsLCB0bXApOworCQkJYXJjaGl2ZV93c3RyY3B5KCZ0ZW1wX25hbWUsIHRtcCk7CisJCQlmcmVlKHRtcCk7CisJCX0gZWxzZSB7CisJCQlpZiAoYXJjaGl2ZV93c3RyaW5nX2FwcGVuZF9mcm9tX21icygmdGVtcF9uYW1lLCB0bXBkaXIsCisJCQkgICAgc3RybGVuKHRtcGRpcikpIDwgMCkKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCWlmICh0ZW1wX25hbWUuc1t0ZW1wX25hbWUubGVuZ3RoLTFdICE9IEwnLycpCisJCQkJYXJjaGl2ZV93c3RyYXBwZW5kX3djaGFyKCZ0ZW1wX25hbWUsIEwnLycpOwogCQl9Ci0JCXdzID0gX19sYV93aW5fcGVybWlzc2l2ZV9uYW1lX3codGVtcF9uYW1lLnMpOwotCQlpZiAod3MgPT0gTlVMTCkgewotCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQkJfQotCQlhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdzKTsKKworCQkvKiBDaGVjayBpZiB0ZW1wX25hbWUgaXMgYSBkaXJlY3RvcnkuICovCisJCWF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1codGVtcF9uYW1lLnMpOwogCQlpZiAoYXR0ciA9PSAoRFdPUkQpLTEpIHsKLQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCQlpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIHsKKwkJCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJfQorCQkJd3MgPSBfX2xhX3dpbl9wZXJtaXNzaXZlX25hbWVfdyh0ZW1wX25hbWUucyk7CisJCQlpZiAod3MgPT0gTlVMTCkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJfQorCQkJYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3cyk7CisJCQlpZiAoYXR0ciA9PSAoRFdPUkQpLTEpIHsKKwkJCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJfQorCQl9CisJCWlmICghKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSB7CisJCQllcnJubyA9IEVOT1RESVI7CiAJCQlnb3RvIGV4aXRfdG1wZmlsZTsKIAkJfQotCX0KLQlpZiAoIShhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkgewotCQllcnJubyA9IEVOT1RESVI7Ci0JCWdvdG8gZXhpdF90bXBmaWxlOwotCX0KIAotCS8qCi0JICogQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUuCi0JICovCi0JYXJjaGl2ZV93c3RyY2F0KCZ0ZW1wX25hbWUsIHByZWZpeCk7Ci0JYXJjaGl2ZV93c3RyY2F0KCZ0ZW1wX25hbWUsIHN1ZmZpeCk7Ci0JZXAgPSB0ZW1wX25hbWUucyArIGFyY2hpdmVfc3RybGVuKCZ0ZW1wX25hbWUpOwotCXhwID0gZXAgLSB3Y3NsZW4oc3VmZml4KTsKKwkJLyoKKwkJICogQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUuCisJCSAqLworCQlhcmNoaXZlX3dzdHJjYXQoJnRlbXBfbmFtZSwgcHJlZml4KTsKKwkJYXJjaGl2ZV93c3RyY2F0KCZ0ZW1wX25hbWUsIHN1ZmZpeCk7CisJCWVwID0gdGVtcF9uYW1lLnMgKyBhcmNoaXZlX3N0cmxlbigmdGVtcF9uYW1lKTsKKwkJeHAgPSBlcCAtIHdjc2xlbihzdWZmaXgpOworCQl0ZW1wbGF0ZSA9IHRlbXBfbmFtZS5zOworCX0gZWxzZSB7CisJCXhwID0gd2NzY2hyKHRlbXBsYXRlLCBMJ1gnKTsKKwkJaWYgKHhwID09IE5VTEwpCS8qIE5vIFgsIHByb2dyYW1taW5nIGVycm9yICovCisJCQlhYm9ydCgpOworCQlmb3IgKGVwID0geHA7ICplcCA9PSBMJ1gnOyBlcCsrKQorCQkJY29udGludWU7CisJCWlmICgqZXApCS8qIFggZm9sbG93ZWQgYnkgbm9uIFgsIHByb2dyYW1taW5nIGVycm9yICovCisJCQlhYm9ydCgpOworCX0KIAogCWlmICghQ3J5cHRBY3F1aXJlQ29udGV4dCgmaFByb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsCiAJCUNSWVBUX1ZFUklGWUNPTlRFWFQpKSB7CkBAIC0zMjMsMjAgKzMzNSwyNCBAQAogCQkJKnAgPSBudW1bKChEV09SRCkqcCkgJSAoc2l6ZW9mKG51bSkvc2l6ZW9mKG51bVswXSkpXTsKIAogCQlmcmVlKHdzKTsKLQkJd3MgPSBfX2xhX3dpbl9wZXJtaXNzaXZlX25hbWVfdyh0ZW1wX25hbWUucyk7CisJCXdzID0gX19sYV93aW5fcGVybWlzc2l2ZV9uYW1lX3codGVtcGxhdGUpOwogCQlpZiAod3MgPT0gTlVMTCkgewogCQkJZXJybm8gPSBFSU5WQUw7CiAJCQlnb3RvIGV4aXRfdG1wZmlsZTsKIAkJfQotCQkvKiBTcGVjaWZpZXMgRklMRV9GTEFHX0RFTEVURV9PTl9DTE9TRSBmbGFnIGlzIHRvCi0JCSAqIGRlbGV0ZSB0aGlzIHRlbXBvcmFyeSBmaWxlIGltbWVkaWF0ZWx5IHdoZW4gdGhpcwotCQkgKiBmaWxlIGNsb3NlZC4gKi8KKwkJaWYgKHRlbXBsYXRlID09IHRlbXBfbmFtZS5zKSB7CisJCQlhdHRyID0gRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZIHwKKwkJCSAgICAgICBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFOworCQl9IGVsc2UgeworCQkJLyogbWtzdGVtcCAqLworCQkJYXR0ciA9IEZJTEVfQVRUUklCVVRFX05PUk1BTDsKKwkJfQogCQloID0gQ3JlYXRlRmlsZVcod3MsCiAJCSAgICBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFIHwgREVMRVRFLAogCQkgICAgMCwvKiBOb3Qgc2hhcmUgKi8KIAkJICAgIE5VTEwsCiAJCSAgICBDUkVBVEVfTkVXLC8qIENyZWF0ZSBhIG5ldyBmaWxlIG9ubHkgKi8KLQkJICAgIEZJTEVfQVRUUklCVVRFX1RFTVBPUkFSWSB8IEZJTEVfRkxBR19ERUxFVEVfT05fQ0xPU0UsCisJCSAgICBhdHRyLAogCQkgICAgTlVMTCk7CiAJCWlmIChoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAJCQkvKiBUaGUgc2FtZSBmaWxlIGFscmVhZHkgZXhpc3RzLiByZXRyeSB3aXRoCkBAIC0zNTgsMTAgKzM3NCwyMyBAQAogCWlmIChoUHJvdiAhPSAoSENSWVBUUFJPVilOVUxMKQogCQlDcnlwdFJlbGVhc2VDb250ZXh0KGhQcm92LCAwKTsKIAlmcmVlKHdzKTsKLQlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmdGVtcF9uYW1lKTsKKwlpZiAodGVtcGxhdGUgPT0gdGVtcF9uYW1lLnMpCisJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZ0ZW1wX25hbWUpOwogCXJldHVybiAoZmQpOwogfQogCitpbnQKK19fYXJjaGl2ZV9ta3RlbXAoY29uc3QgY2hhciAqdG1wZGlyKQoreworCXJldHVybiBfX2FyY2hpdmVfbWt0ZW1weCh0bXBkaXIsIE5VTEwpOworfQorCitpbnQKK19fYXJjaGl2ZV9ta3N0ZW1wKHdjaGFyX3QgKnRlbXBsYXRlKQoreworCXJldHVybiBfX2FyY2hpdmVfbWt0ZW1weChOVUxMLCB0ZW1wbGF0ZSk7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBpbnQKQEAgLTQxNCwxNCArNDQzLDI0IEBACiAJcmV0dXJuIChmZCk7CiB9CiAKLSNlbHNlCitpbnQKK19fYXJjaGl2ZV9ta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCWludCBmZCA9IC0xOworCWZkID0gbWtzdGVtcCh0ZW1wbGF0ZSk7CisJaWYgKGZkID49IDApCisJCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKGZkKTsKKwlyZXR1cm4gKGZkKTsKK30KKworI2Vsc2UgLyogIUhBVkVfTUtTVEVNUCAqLwogCiAvKgogICogV2UgdXNlIGEgcHJpdmF0ZSByb3V0aW5lLgogICovCiAKLWludAotX19hcmNoaXZlX21rdGVtcChjb25zdCBjaGFyICp0bXBkaXIpCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWt0ZW1weChjb25zdCBjaGFyICp0bXBkaXIsIGNoYXIgKnRlbXBsYXRlKQogewogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBudW1bXSA9IHsKIAkJJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsCkBAIC00MzksMjYgKzQ3OCwzNyBAQAogCWNoYXIgKnRwLCAqZXA7CiAKIAlmZCA9IC0xOwotCWFyY2hpdmVfc3RyaW5nX2luaXQoJnRlbXBfbmFtZSk7Ci0JaWYgKHRtcGRpciA9PSBOVUxMKSB7Ci0JCWlmIChnZXRfdGVtcGRpcigmdGVtcF9uYW1lKSAhPSBBUkNISVZFX09LKQorCWlmICh0ZW1wbGF0ZSA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc3RyaW5nX2luaXQoJnRlbXBfbmFtZSk7CisJCWlmICh0bXBkaXIgPT0gTlVMTCkgeworCQkJaWYgKGdldF90ZW1wZGlyKCZ0ZW1wX25hbWUpICE9IEFSQ0hJVkVfT0spCisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCX0gZWxzZQorCQkJYXJjaGl2ZV9zdHJjcHkoJnRlbXBfbmFtZSwgdG1wZGlyKTsKKwkJaWYgKHRlbXBfbmFtZS5zW3RlbXBfbmFtZS5sZW5ndGgtMV0gPT0gJy8nKSB7CisJCQl0ZW1wX25hbWUuc1t0ZW1wX25hbWUubGVuZ3RoLTFdID0gJ1wwJzsKKwkJCXRlbXBfbmFtZS5sZW5ndGggLS07CisJCX0KKwkJaWYgKGxhX3N0YXQodGVtcF9uYW1lLnMsICZzdCkgPCAwKQogCQkJZ290byBleGl0X3RtcGZpbGU7Ci0JfSBlbHNlCi0JCWFyY2hpdmVfc3RyY3B5KCZ0ZW1wX25hbWUsIHRtcGRpcik7Ci0JaWYgKHRlbXBfbmFtZS5zW3RlbXBfbmFtZS5sZW5ndGgtMV0gPT0gJy8nKSB7Ci0JCXRlbXBfbmFtZS5zW3RlbXBfbmFtZS5sZW5ndGgtMV0gPSAnXDAnOwotCQl0ZW1wX25hbWUubGVuZ3RoIC0tOworCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWVycm5vID0gRU5PVERJUjsKKwkJCWdvdG8gZXhpdF90bXBmaWxlOworCQl9CisJCWFyY2hpdmVfc3RyY2F0KCZ0ZW1wX25hbWUsICIvbGliYXJjaGl2ZV8iKTsKKwkJdHAgPSB0ZW1wX25hbWUucyArIGFyY2hpdmVfc3RybGVuKCZ0ZW1wX25hbWUpOworCQlhcmNoaXZlX3N0cmNhdCgmdGVtcF9uYW1lLCAiWFhYWFhYWFhYWCIpOworCQllcCA9IHRlbXBfbmFtZS5zICsgYXJjaGl2ZV9zdHJsZW4oJnRlbXBfbmFtZSk7CisJCXRlbXBsYXRlID0gdGVtcF9uYW1lLnM7CisJfSBlbHNlIHsKKwkJdHAgPSBzdHJjaHIodGVtcGxhdGUsICdYJyk7CisJCWlmICh0cCA9PSBOVUxMKQkvKiBObyBYLCBwcm9ncmFtbWluZyBlcnJvciAqLworCQkJYWJvcnQoKTsKKwkJZm9yIChlcCA9IHRwOyAqZXAgPT0gJ1gnOyBlcCsrKQorCQkJY29udGludWU7CisJCWlmICgqZXApCS8qIFggZm9sbG93ZWQgYnkgbm9uIFgsIHByb2dyYW1taW5nIGVycm9yICovCisJCQlhYm9ydCgpOwogCX0KLQlpZiAoc3RhdCh0ZW1wX25hbWUucywgJnN0KSA8IDApCi0JCWdvdG8gZXhpdF90bXBmaWxlOwotCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQllcnJubyA9IEVOT1RESVI7Ci0JCWdvdG8gZXhpdF90bXBmaWxlOwotCX0KLQlhcmNoaXZlX3N0cmNhdCgmdGVtcF9uYW1lLCAiL2xpYmFyY2hpdmVfIik7Ci0JdHAgPSB0ZW1wX25hbWUucyArIGFyY2hpdmVfc3RybGVuKCZ0ZW1wX25hbWUpOwotCWFyY2hpdmVfc3RyY2F0KCZ0ZW1wX25hbWUsICJYWFhYWFhYWFhYIik7Ci0JZXAgPSB0ZW1wX25hbWUucyArIGFyY2hpdmVfc3RybGVuKCZ0ZW1wX25hbWUpOwogCiAJZG8gewogCQljaGFyICpwOwpAQCAtNDY5LDE5ICs1MTksMzMgQEAKIAkJCWludCBkID0gKigodW5zaWduZWQgY2hhciAqKXApICUgc2l6ZW9mKG51bSk7CiAJCQkqcCsrID0gbnVtW2RdOwogCQl9Ci0JCWZkID0gb3Blbih0ZW1wX25hbWUucywgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiB8IE9fQ0xPRVhFQywKKwkJZmQgPSBvcGVuKHRlbXBsYXRlLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSIHwgT19DTE9FWEVDLAogCQkJICAwNjAwKTsKIAl9IHdoaWxlIChmZCA8IDAgJiYgZXJybm8gPT0gRUVYSVNUKTsKIAlpZiAoZmQgPCAwKQogCQlnb3RvIGV4aXRfdG1wZmlsZTsKIAlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyhmZCk7Ci0JdW5saW5rKHRlbXBfbmFtZS5zKTsKKwlpZiAodGVtcGxhdGUgPT0gdGVtcF9uYW1lLnMpCisJCXVubGluayh0ZW1wX25hbWUucyk7CiBleGl0X3RtcGZpbGU6Ci0JYXJjaGl2ZV9zdHJpbmdfZnJlZSgmdGVtcF9uYW1lKTsKKwlpZiAodGVtcGxhdGUgPT0gdGVtcF9uYW1lLnMpCisJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnRlbXBfbmFtZSk7CiAJcmV0dXJuIChmZCk7CiB9CiAKLSNlbmRpZiAvKiBIQVZFX01LU1RFTVAgKi8KK2ludAorX19hcmNoaXZlX21rdGVtcChjb25zdCBjaGFyICp0bXBkaXIpCit7CisJcmV0dXJuIF9fYXJjaGl2ZV9ta3RlbXB4KHRtcGRpciwgTlVMTCk7Cit9CisKK2ludAorX19hcmNoaXZlX21rc3RlbXAoY2hhciAqdGVtcGxhdGUpCit7CisJcmV0dXJuIF9fYXJjaGl2ZV9ta3RlbXB4KE5VTEwsIHRlbXBsYXRlKTsKK30KKworI2VuZGlmIC8qICFIQVZFX01LU1RFTVAgKi8KICNlbmRpZiAvKiAhX1dJTjMyIHx8IF9fQ1lHV0lOX18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuYwppbmRleCA2ZmY4NzQ5Li42MjRlMjcwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5jCkBAIC00NDUsNyArNDQ1LDggQEAKICAqIFdpbmRvd3MnIHN0YXQoKSBkb2VzIG5vdCBhY2NlcHQgdGhlIHBhdGggYWRkZWQgIlxcP1wiIGVzcGVjaWFsbHkgIj8iCiAgKiBjaGFyYWN0ZXIuCiAgKiBJdCBtZWFucyB3ZSBjYW5ub3QgYWNjZXNzIHRoZSBsb25nIG5hbWUgcGF0aCBsb25nZXIgdGhhbiBNQVhfUEFUSC4KLSAqIFNvIEkndmUgaW1wbGVtZW50ZWQgc2ltdWxhciBXaW5kb3dzJyBzdGF0KCkgdG8gYWNjZXNzIHRoZSBsb25nIG5hbWUgcGF0aC4KKyAqIFNvIEkndmUgaW1wbGVtZW50ZWQgYSBmdW5jdGlvbiBzaW1pbGFyIHRvIFdpbmRvd3MnIHN0YXQoKSB0byBhY2Nlc3MgdGhlCisgKiBsb25nIG5hbWUgcGF0aC4KICAqIEFuZCBJJ3ZlIGFkZGVkIHNvbWUgZmVhdHVyZS4KICAqIDEuIHNldCBzdF9pbm8gYnkgbkZpbGVJbmRleEhpZ2ggYW5kIG5GaWxlSW5kZXhMb3cgb2YKICAqICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5oCmluZGV4IGMzYWVkMGMuLmRkYTYzYjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmgKQEAgLTI3LDEwICsyNyw2IEBACiAgKiAkRnJlZUJTRCQKICAqLwogCi0jaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAotI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCi0jZW5kaWYKLQogLyoKICAqIFRPRE86IEEgbG90IG9mIHN0dWZmIGluIGhlcmUgaXNuJ3QgYWN0dWFsbHkgdXNlZCBieSBsaWJhcmNoaXZlIGFuZAogICogY2FuIGJlIHRyaW1tZWQgb3V0LiAgTm90ZSB0aGF0IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGxpYmFyY2hpdmUgYW5kCkBAIC00OCw2ICs0NCwxMCBAQAogI2lmbmRlZiBMSUJBUkNISVZFX0FSQ0hJVkVfV0lORE9XU19IX0lOQ0xVREVECiAjZGVmaW5lCUxJQkFSQ0hJVkVfQVJDSElWRV9XSU5ET1dTX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCisKIC8qIFN0YXJ0IG9mIGNvbmZpZ3VyYXRpb24gZm9yIG5hdGl2ZSBXaW4zMiAgKi8KICNpZm5kZWYgTUlOR1dfSEFTX1NFQ1VSRV9BUEkKICNkZWZpbmUgTUlOR1dfSEFTX1NFQ1VSRV9BUEkgMQpAQCAtMTE3LDEwICsxMTcsNyBAQAogI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoX19XQVRDT01DX18pCiAjZGVmaW5lIHNldG1vZGUJCV9zZXRtb2RlCiAjZW5kaWYKLSNpZmRlZiBzdGF0Ci0jdW5kZWYgc3RhdAotI2VuZGlmCi0jZGVmaW5lCXN0YXQocGF0aCxzdHJlZikJCV9fbGFfc3RhdChwYXRoLHN0cmVmKQorI2RlZmluZQlsYV9zdGF0KHBhdGgsc3RyZWYpCQlfX2xhX3N0YXQocGF0aCxzdHJlZikKICNpZiAhZGVmaW5lZChfX1dBVENPTUNfXykKICNpZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCiAjZGVmaW5lCXN0cmR1cAkJX3N0cmR1cApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLjMKaW5kZXggYzExNjRmNS4uZTdmN2YxMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS4zCkBAIC0xMTgsNyArMTE4LDcgQEAKIC5GbiBhcmNoaXZlX3dyaXRlX2ZyZWUKIGZ1bmN0aW9uIHRvIHJlbGVhc2UgYWxsIHJlc291cmNlcy4KIC5cIgotLlNoIEVYQU1QTEUKKy5TaCBFWEFNUExFUwogVGhlIGZvbGxvd2luZyBza2V0Y2ggaWxsdXN0cmF0ZXMgYmFzaWMgdXNhZ2Ugb2YgdGhlIGxpYnJhcnkuCiBJbiB0aGlzIGV4YW1wbGUsCiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBzaW1wbHkgd3JhcHBlcnMgYXJvdW5kIHRoZSBzdGFuZGFyZApAQCAtMTkyLDcgKzE5Miw3IEBACiAgIGlmIChhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfZmlsdGVyX2J5X2V4dChhLCBvdXRuYW1lKSAhPSBBUkNISVZFX09LKSAgewogICAgIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9nemlwKGEpOwogICAgIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3RhcihhKTsKLSAgfSAgCisgIH0KICAgYXJjaGl2ZV93cml0ZV9vcGVuKGEsIG15ZGF0YSwgbXlvcGVuLCBteXdyaXRlLCBteWNsb3NlKTsKICAgd2hpbGUgKCpmaWxlbmFtZSkgewogICAgIHN0YXQoKmZpbGVuYW1lLCAmc3QpOwpAQCAtMjI1LDggKzIyNSw4IEBACiAuRWQKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYwppbmRleCBlOGRhZjUzLi45OGE1NWZiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKQEAgLTIxMiw2ICsyMTIsNyBAQAogCiAJZiA9IGNhbGxvYygxLCBzaXplb2YoKmYpKTsKIAlmLT5hcmNoaXZlID0gX2E7CisJZi0+c3RhdGUgPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9ORVc7CiAJaWYgKGEtPmZpbHRlcl9maXJzdCA9PSBOVUxMKQogCQlhLT5maWx0ZXJfZmlyc3QgPSBmOwogCWVsc2UKQEAgLTIyOCw2ICsyMjksOSBAQAogICAgIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBsZW5ndGgpCiB7CiAJaW50IHI7CisJLyogTmV2ZXIgd3JpdGUgdG8gbm9uLW9wZW4gZmlsdGVycyAqLworCWlmIChmLT5zdGF0ZSAhPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9PUEVOKQorCQlyZXR1cm4oQVJDSElWRV9GQVRBTCk7CiAJaWYgKGxlbmd0aCA9PSAwKQogCQlyZXR1cm4oQVJDSElWRV9PSyk7CiAJaWYgKGYtPndyaXRlID09IE5VTEwpCkBAIC0yNDAsMjcgKzI0NCw3MCBAQAogfQogCiAvKgotICogT3BlbiBhIGZpbHRlci4KKyAqIFJlY3Vyc2l2ZSBmdW5jdGlvbiBmb3Igb3BlbmluZyB0aGUgZmlsdGVyIGNoYWluCisgKiBMYXN0IGZpbHRlciBpcyBvcGVuZWQgZmlyc3QKICAqLwotaW50CitzdGF0aWMgaW50CiBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewotCWlmIChmLT5vcGVuID09IE5VTEwpCisJaW50IHJldDsKKworCXJldCA9IEFSQ0hJVkVfT0s7CisJaWYgKGYtPm5leHRfZmlsdGVyICE9IE5VTEwpCisJCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7CisJaWYgKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gKHJldCk7CisJaWYgKGYtPnN0YXRlICE9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX05FVykKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwlpZiAoZi0+b3BlbiA9PSBOVUxMKSB7CisJCWYtPnN0YXRlID0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfT1BFTjsKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKLQlyZXR1cm4gKGYtPm9wZW4pKGYpOworCX0KKwlyZXQgPSAoZi0+b3BlbikoZik7CisJaWYgKHJldCA9PSBBUkNISVZFX09LKQorCQlmLT5zdGF0ZSA9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX09QRU47CisJZWxzZQorCQlmLT5zdGF0ZSA9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX0ZBVEFMOworCXJldHVybiAocmV0KTsKIH0KIAogLyoKLSAqIENsb3NlIGEgZmlsdGVyLgorICogT3BlbiBhbGwgZmlsdGVycwogICovCi1pbnQKLV9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQorc3RhdGljIGludAorX19hcmNoaXZlX3dyaXRlX2ZpbHRlcnNfb3BlbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqYSkKIHsKLQlpZiAoZi0+Y2xvc2UgIT0gTlVMTCkKLQkJcmV0dXJuIChmLT5jbG9zZSkoZik7Ci0JaWYgKGYtPm5leHRfZmlsdGVyICE9IE5VTEwpCi0JCXJldHVybiAoX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcikpOwotCXJldHVybiAoQVJDSElWRV9PSyk7CisJcmV0dXJuIChfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoYS0+ZmlsdGVyX2ZpcnN0KSk7Cit9CisKKy8qCisgKiBDbG9zZSBhbGwgZmlsdGVzCisgKi8KK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV93cml0ZV9maWx0ZXJzX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlICphKQoreworCXN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZjsKKwlpbnQgcmV0LCByZXQxOworCXJldCA9IEFSQ0hJVkVfT0s7CisJZm9yIChmID0gYS0+ZmlsdGVyX2ZpcnN0OyBmICE9IE5VTEw7IGYgPSBmLT5uZXh0X2ZpbHRlcikgeworCQkvKiBEbyBub3QgY2xvc2UgZmlsdGVycyB0aGF0IGFyZSBub3Qgb3BlbiAqLworCQlpZiAoZi0+c3RhdGUgPT0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfT1BFTikgeworCQkJaWYgKGYtPmNsb3NlICE9IE5VTEwpIHsKKwkJCQlyZXQxID0gKGYtPmNsb3NlKShmKTsKKwkJCQlpZiAocmV0MSA8IHJldCkKKwkJCQkJcmV0ID0gcmV0MTsKKwkJCQlpZiAocmV0MSA9PSBBUkNISVZFX09LKSB7CisJCQkJCWYtPnN0YXRlID0KKwkJCQkJICAgIEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX0NMT1NFRDsKKwkJCQl9IGVsc2UgeworCQkJCQlmLT5zdGF0ZSA9CisJCQkJCSAgICBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9GQVRBTDsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQlmLT5zdGF0ZSA9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX0NMT1NFRDsKKwkJfQorCX0KKwlyZXR1cm4gKHJldCk7CiB9CiAKIGludApAQCAtMjkyLDYgKzMzOSw3IEBACiAJc3RydWN0IGFyY2hpdmVfbm9uZSAqc3RhdGU7CiAJdm9pZCAqYnVmZmVyOwogCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgcmV0OwogCiAJZi0+Ynl0ZXNfcGVyX2Jsb2NrID0gYXJjaGl2ZV93cml0ZV9nZXRfYnl0ZXNfcGVyX2Jsb2NrKGYtPmFyY2hpdmUpOwogCWYtPmJ5dGVzX2luX2xhc3RfYmxvY2sgPQpAQCAtMzE2LDcgKzM2NCwxMyBAQAogCiAJaWYgKGEtPmNsaWVudF9vcGVuZXIgPT0gTlVMTCkKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKLQlyZXR1cm4gKGEtPmNsaWVudF9vcGVuZXIoZi0+YXJjaGl2ZSwgYS0+Y2xpZW50X2RhdGEpKTsKKwlyZXQgPSBhLT5jbGllbnRfb3BlbmVyKGYtPmFyY2hpdmUsIGEtPmNsaWVudF9kYXRhKTsKKwlpZiAocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJZnJlZShzdGF0ZS0+YnVmZmVyKTsKKwkJZnJlZShzdGF0ZSk7CisJCWYtPmRhdGEgPSBOVUxMOworCX0KKwlyZXR1cm4gKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQzOSw4ICs0OTMsNiBAQAogCQkoKmEtPmNsaWVudF9jbG9zZXIpKCZhLT5hcmNoaXZlLCBhLT5jbGllbnRfZGF0YSk7CiAJZnJlZShzdGF0ZS0+YnVmZmVyKTsKIAlmcmVlKHN0YXRlKTsKLQkvKiBDbGVhciB0aGUgY2xvc2UgaGFuZGxlciBteXNlbGYgbm90IHRvIGJlIGNhbGxlZCBhZ2Fpbi4gKi8KLQlmLT5jbG9zZSA9IE5VTEw7CiAJYS0+Y2xpZW50X2RhdGEgPSBOVUxMOwogCS8qIENsZWFyIHBhc3NwaHJhc2UuICovCiAJaWYgKGEtPnBhc3NwaHJhc2UgIT0gTlVMTCkgewpAQCAtNDQ4LDYgKzUwMCw4IEBACiAJCWZyZWUoYS0+cGFzc3BocmFzZSk7CiAJCWEtPnBhc3NwaHJhc2UgPSBOVUxMOwogCX0KKwkvKiBDbGVhciB0aGUgY2xvc2UgaGFuZGxlciBteXNlbGYgbm90IHRvIGJlIGNhbGxlZCBhZ2Fpbi4gKi8KKwlmLT5zdGF0ZSA9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX0NMT1NFRDsKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTQ3Nyw5ICs1MzEsMTAgQEAKIAljbGllbnRfZmlsdGVyLT53cml0ZSA9IGFyY2hpdmVfd3JpdGVfY2xpZW50X3dyaXRlOwogCWNsaWVudF9maWx0ZXItPmNsb3NlID0gYXJjaGl2ZV93cml0ZV9jbGllbnRfY2xvc2U7CiAKLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoYS0+ZmlsdGVyX2ZpcnN0KTsKKwlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyc19vcGVuKGEpOwogCWlmIChyZXQgPCBBUkNISVZFX1dBUk4pIHsKLQkJcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGEtPmZpbHRlcl9maXJzdCk7CisJCXIxID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcnNfY2xvc2UoYSk7CisJCV9fYXJjaGl2ZV93cml0ZV9maWx0ZXJzX2ZyZWUoX2EpOwogCQlyZXR1cm4gKHIxIDwgcmV0ID8gcjEgOiByZXQpOwogCX0KIApAQCAtNTIxLDcgKzU3Niw3IEBACiAJfQogCiAJLyogRmluaXNoIHRoZSBjb21wcmVzc2lvbiBhbmQgY2xvc2UgdGhlIHN0cmVhbS4gKi8KLQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoYS0+ZmlsdGVyX2ZpcnN0KTsKKwlyMSA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXJzX2Nsb3NlKGEpOwogCWlmIChyMSA8IHIpCiAJCXIgPSByMTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iNjRlbmNvZGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYjY0ZW5jb2RlLmMKaW5kZXggYjQ2YjE5YS4uODdmZGI3MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iNjRlbmNvZGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2I2NGVuY29kZS5jCkBAIC0xNDksMTEgKzE0OSw2IEBACiB7CiAJc3RydWN0IHByaXZhdGVfYjY0ZW5jb2RlICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9iNjRlbmNvZGUgKilmLT5kYXRhOwogCXNpemVfdCBicyA9IDY1NTM2LCBicGI7Ci0JaW50IHJldDsKLQotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7CiAKIAlpZiAoZi0+YXJjaGl2ZS0+bWFnaWMgPT0gQVJDSElWRV9XUklURV9NQUdJQykgewogCQkvKiBCdWZmZXIgc2l6ZSBzaG91bGQgYmUgYSBtdWx0aXBsZSBudW1iZXIgb2YgdGhlIG9mIGJ5dGVzCkBAIC0yNjYsNyArMjYxLDYgQEAKIGFyY2hpdmVfZmlsdGVyX2I2NGVuY29kZV9jbG9zZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHByaXZhdGVfYjY0ZW5jb2RlICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9iNjRlbmNvZGUgKilmLT5kYXRhOwotCWludCByZXQsIHJldDI7CiAKIAkvKiBGbHVzaCByZW1haW5pbmcgYnl0ZXMuICovCiAJaWYgKHN0YXRlLT5ob2xkX2xlbiAhPSAwKQpAQCAtMjc0LDEyICsyNjgsOCBAQAogCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoJnN0YXRlLT5lbmNvZGVkX2J1ZmYsICI9PT09XG4iKTsKIAkvKiBXcml0ZSB0aGUgbGFzdCBibG9jayAqLwogCWFyY2hpdmVfd3JpdGVfc2V0X2J5dGVzX2luX2xhc3RfYmxvY2soZi0+YXJjaGl2ZSwgMSk7Ci0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKKwlyZXR1cm4gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKIAkgICAgc3RhdGUtPmVuY29kZWRfYnVmZi5zLCBhcmNoaXZlX3N0cmxlbigmc3RhdGUtPmVuY29kZWRfYnVmZikpOwotCXJldDIgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ID4gcmV0MikKLQkJcmV0ID0gcmV0MjsKLQlyZXR1cm4gKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYnppcDIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYnppcDIuYwppbmRleCA2YmQwZDFkLi41MzVlZjE3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2J6aXAyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iemlwMi5jCkBAIC0xNjcsMTAgKzE2Nyw2IEBACiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiAocmV0KTsKLQogCWlmIChkYXRhLT5jb21wcmVzc2VkID09IE5VTEwpIHsKIAkJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAkJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKQEAgLTI2Miw3ICsyNTgsNyBAQAogYXJjaGl2ZV9jb21wcmVzc29yX2J6aXAyX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQsIHIxOworCWludCByZXQ7CiAKIAkvKiBGaW5pc2ggY29tcHJlc3Npb24gY3ljbGUuICovCiAJcmV0ID0gZHJpdmVfY29tcHJlc3NvcihmLCBkYXRhLCAxKTsKQEAgLTI4MSw5ICsyNzcsNyBAQAogCQkgICAgIkZhaWxlZCB0byBjbGVhbiB1cCBjb21wcmVzc29yIik7CiAJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CiAJfQotCi0JcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlyZXR1cm4gKHIxIDwgcmV0ID8gcjEgOiByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfY29tcHJlc3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfY29tcHJlc3MuYwppbmRleCAyNmZjZWY0Li5kNDA0ZmFlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2NvbXByZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9jb21wcmVzcy5jCkBAIC0xNDYsMTcgKzE0NiwxMiBAQAogc3RhdGljIGludAogYXJjaGl2ZV9jb21wcmVzc29yX2NvbXByZXNzX29wZW4oc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewotCWludCByZXQ7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGU7CiAJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAogCWYtPmNvZGUgPSBBUkNISVZFX0ZJTFRFUl9DT01QUkVTUzsKIAlmLT5uYW1lID0gImNvbXByZXNzIjsKIAotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7Ci0KIAlzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopY2FsbG9jKDEsIHNpemVvZigqc3RhdGUpKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkgewogCQlhcmNoaXZlX3NldF9lcnJvcihmLT5hcmNoaXZlLCBFTk9NRU0sCkBAIC00MjYsMzAgKzQyMSwyNyBAQAogYXJjaGl2ZV9jb21wcmVzc29yX2NvbXByZXNzX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcmV0LCByZXQyOworCWludCByZXQ7CiAKIAlyZXQgPSBvdXRwdXRfY29kZShmLCBzdGF0ZS0+Y3VyX2NvZGUpOwogCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJZ290byBjbGVhbnVwOworCQlyZXR1cm4gcmV0OwogCXJldCA9IG91dHB1dF9mbHVzaChmKTsKIAlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCWdvdG8gY2xlYW51cDsKKwkJcmV0dXJuIHJldDsKIAogCS8qIFdyaXRlIHRoZSBsYXN0IGJsb2NrICovCiAJcmV0ID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKIAkgICAgc3RhdGUtPmNvbXByZXNzZWQsIHN0YXRlLT5jb21wcmVzc2VkX29mZnNldCk7Ci1jbGVhbnVwOgotCXJldDIgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ID4gcmV0MikKLQkJcmV0ID0gcmV0MjsKLQlmcmVlKHN0YXRlLT5jb21wcmVzc2VkKTsKLQlmcmVlKHN0YXRlKTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQKIGFyY2hpdmVfY29tcHJlc3Nvcl9jb21wcmVzc19mcmVlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKLQkodm9pZClmOyAvKiBVTlVTRUQgKi8KKwlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKKworCWZyZWUoc3RhdGUtPmNvbXByZXNzZWQpOworCWZyZWUoc3RhdGUpOwogCXJldHVybiAoQVJDSElWRV9PSyk7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2d6aXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jCmluZGV4IDk4NjEyM2EuLjhkNjgzOGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jCkBAIC0xODQsMTAgKzE4NCw2IEBACiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKLQogCWlmIChkYXRhLT5jb21wcmVzc2VkID09IE5VTEwpIHsKIAkJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAkJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKQEAgLTMwNyw3ICszMDMsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgdHJhaWxlcls4XTsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQsIHIxOworCWludCByZXQ7CiAKIAkvKiBGaW5pc2ggY29tcHJlc3Npb24gY3ljbGUgKi8KIAlyZXQgPSBkcml2ZV9jb21wcmVzc29yKGYsIGRhdGEsIDEpOwpAQCAtMzM4LDggKzMzNCw3IEBACiAJCSAgICAiRmFpbGVkIHRvIGNsZWFuIHVwIGNvbXByZXNzb3IiKTsKIAkJcmV0ID0gQVJDSElWRV9GQVRBTDsKIAl9Ci0JcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlyZXR1cm4gKHIxIDwgcmV0ID8gcjEgOiByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6NC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sejQuYwppbmRleCAxNWZkNDk0Li5jZjE5ZmFkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6NC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHo0LmMKQEAgLTIyMywxNiArMjIzLDExIEBACiBhcmNoaXZlX2ZpbHRlcl9sejRfb3BlbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcmV0OwogCXNpemVfdCByZXF1aXJlZF9zaXplOwogCXN0YXRpYyBzaXplX3QgY29uc3QgYmttYXBbXSA9IHsgNjQgKiAxMDI0LCAyNTYgKiAxMDI0LCAxICogMTAyNCAqIDEwMjQsCiAJCQkgICA0ICogMTAyNCAqIDEwMjQgfTsKIAlzaXplX3QgcHJlX2Jsb2NrX3NpemU7CiAKLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIChyZXQpOwotCiAJaWYgKGRhdGEtPmJsb2NrX21heGltdW1fc2l6ZSA8IDQpCiAJCWRhdGEtPmJsb2NrX3NpemUgPSBia21hcFswXTsKIAllbHNlCkBAIC0zNDMsNyArMzM4LDcgQEAKIGFyY2hpdmVfZmlsdGVyX2x6NF9jbG9zZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcmV0LCByMTsKKwlpbnQgcmV0OwogCiAJLyogRmluaXNoIGNvbXByZXNzaW9uIGN5Y2xlLiAqLwogCXJldCA9IChpbnQpbHo0X3dyaXRlX29uZV9ibG9jayhmLCBOVUxMLCAwKTsKQEAgLTM2Niw5ICszNjEsNyBAQAogCQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLAogCQkJICAgIGRhdGEtPm91dF9idWZmZXIsIGRhdGEtPm91dCAtIGRhdGEtPm91dF9idWZmZXIpOwogCX0KLQotCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JcmV0dXJuIChyMSA8IHJldCA/IHIxIDogcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6b3AuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHpvcC5jCmluZGV4IGFkNzA1YzQuLjNiZDkwNjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHpvcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHpvcC5jCkBAIC0yMjgsMTEgKzIyOCw2IEBACiBhcmNoaXZlX3dyaXRlX2x6b3Bfb3BlbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHdyaXRlX2x6b3AgKmRhdGEgPSAoc3RydWN0IHdyaXRlX2x6b3AgKilmLT5kYXRhOwotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyZXQpOwogCiAJc3dpdGNoIChkYXRhLT5jb21wcmVzc2lvbl9sZXZlbCkgewogCWNhc2UgMToKQEAgLTQzOSwxMCArNDM0LDcgQEAKIAl9CiAJLyogV3JpdGUgYSB6ZXJvIHVuY29tcHJlc3NlZCBzaXplIGFzIHRoZSBlbmQgbWFyayBvZiB0aGUgc2VyaWVzIG9mCiAJICogY29tcHJlc3NlZCBibG9jay4gKi8KLQlyID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwgJmVuZG1hcmssIHNpemVvZihlbmRtYXJrKSk7Ci0JaWYgKHIgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyKTsKLQlyZXR1cm4gKF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpKTsKKwlyZXR1cm4gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwgJmVuZG1hcmssIHNpemVvZihlbmRtYXJrKSk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3Byb2dyYW0uYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfcHJvZ3JhbS5jCmluZGV4IDY2MGY2OTMuLmE0YmMxZDkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfcHJvZ3JhbS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfcHJvZ3JhbS5jCkBAIC0yMTIsMTEgKzIxMiw2IEBACiAgICAgc3RydWN0IGFyY2hpdmVfd3JpdGVfcHJvZ3JhbV9kYXRhICpkYXRhLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJcGlkX3QgY2hpbGQ7Ci0JaW50IHJldDsKLQotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7CiAKIAlpZiAoZGF0YS0+Y2hpbGRfYnVmID09IE5VTEwpIHsKIAkJZGF0YS0+Y2hpbGRfYnVmX2xlbiA9IDY1NTM2OwpAQCAtMzUzLDExICszNDgsMTEgQEAKIF9fYXJjaGl2ZV93cml0ZV9wcm9ncmFtX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZiwKICAgICBzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9wcm9ncmFtX2RhdGEgKmRhdGEpCiB7Ci0JaW50IHJldCwgcjEsIHN0YXR1czsKKwlpbnQgcmV0LCBzdGF0dXM7CiAJc3NpemVfdCBieXRlc19yZWFkOwogCiAJaWYgKGRhdGEtPmNoaWxkID09IDApCi0JCXJldHVybiBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKKwkJcmV0dXJuIEFSQ0hJVkVfT0s7CiAKIAlyZXQgPSAwOwogCWNsb3NlKGRhdGEtPmNoaWxkX3N0ZGluKTsKQEAgLTQwOSw3ICs0MDQsNiBAQAogCQkgICAgIkVycm9yIGNsb3NpbmcgcHJvZ3JhbTogJXMiLCBkYXRhLT5wcm9ncmFtX25hbWUpOwogCQlyZXQgPSBBUkNISVZFX0ZBVEFMOwogCX0KLQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCXJldHVybiAocjEgPCByZXQgPyByMSA6IHJldCk7CisJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl91dWVuY29kZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl91dWVuY29kZS5jCmluZGV4IDIzZDljMTUuLjFhZDQ1ODkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfdXVlbmNvZGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3V1ZW5jb2RlLmMKQEAgLTEzOCwxMSArMTM4LDYgQEAKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV91dWVuY29kZSAqc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfdXVlbmNvZGUgKilmLT5kYXRhOwogCXNpemVfdCBicyA9IDY1NTM2LCBicGI7Ci0JaW50IHJldDsKLQotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7CiAKIAlpZiAoZi0+YXJjaGl2ZS0+bWFnaWMgPT0gQVJDSElWRV9XUklURV9NQUdJQykgewogCQkvKiBCdWZmZXIgc2l6ZSBzaG91bGQgYmUgYSBtdWx0aXBsZSBudW1iZXIgb2YgdGhlIG9mIGJ5dGVzCkBAIC0yNTcsNyArMjUyLDYgQEAKIGFyY2hpdmVfZmlsdGVyX3V1ZW5jb2RlX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV91dWVuY29kZSAqc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfdXVlbmNvZGUgKilmLT5kYXRhOwotCWludCByZXQsIHJldDI7CiAKIAkvKiBGbHVzaCByZW1haW5pbmcgYnl0ZXMuICovCiAJaWYgKHN0YXRlLT5ob2xkX2xlbiAhPSAwKQpAQCAtMjY1LDEyICsyNTksOCBAQAogCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoJnN0YXRlLT5lbmNvZGVkX2J1ZmYsICJgXG5lbmRcbiIpOwogCS8qIFdyaXRlIHRoZSBsYXN0IGJsb2NrICovCiAJYXJjaGl2ZV93cml0ZV9zZXRfYnl0ZXNfaW5fbGFzdF9ibG9jayhmLT5hcmNoaXZlLCAxKTsKLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLAorCXJldHVybiBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLAogCSAgICBzdGF0ZS0+ZW5jb2RlZF9idWZmLnMsIGFyY2hpdmVfc3RybGVuKCZzdGF0ZS0+ZW5jb2RlZF9idWZmKSk7Ci0JcmV0MiA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgPiByZXQyKQotCQlyZXQgPSByZXQyOwotCXJldHVybiAocmV0KTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl94ei5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl94ei5jCmluZGV4IGU0YTM1MzUuLjJhZDRiY2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfeHouYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3h6LmMKQEAgLTMwOSwxMCArMzA5LDYgQEAKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gZi0+ZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKLQogCWlmIChkYXRhLT5jb21wcmVzc2VkID09IE5VTEwpIHsKIAkJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAkJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKQEAgLTM5MCwxMCArMzg2LDEzIEBACiAJCQlkYXRhLT5jb21wcmVzc2lvbl9sZXZlbCA9IDY7CiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAJfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAidGhyZWFkcyIpID09IDApIHsKKwkJY2hhciAqZW5kcHRyOworCiAJCWlmICh2YWx1ZSA9PSBOVUxMKQogCQkJcmV0dXJuIChBUkNISVZFX1dBUk4pOwotCQlkYXRhLT50aHJlYWRzID0gKGludClzdHJ0b3VsKHZhbHVlLCBOVUxMLCAxMCk7Ci0JCWlmIChkYXRhLT50aHJlYWRzID09IDAgJiYgZXJybm8gIT0gMCkgeworCQllcnJubyA9IDA7CisJCWRhdGEtPnRocmVhZHMgPSAoaW50KXN0cnRvdWwodmFsdWUsICZlbmRwdHIsIDEwKTsKKwkJaWYgKGVycm5vICE9IDAgfHwgKmVuZHB0ciAhPSAnXDAnKSB7CiAJCQlkYXRhLT50aHJlYWRzID0gMTsKIAkJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKIAkJfQpAQCAtNDQ1LDcgKzQ0NCw3IEBACiBhcmNoaXZlX2NvbXByZXNzb3JfeHpfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcjE7CisJaW50IHJldDsKIAogCXJldCA9IGRyaXZlX2NvbXByZXNzb3IoZiwgZGF0YSwgMSk7CiAJaWYgKHJldCA9PSBBUkNISVZFX09LKSB7CkBAIC00NjMsOCArNDYyLDcgQEAKIAkJfQogCX0KIAlsem1hX2VuZCgmKGRhdGEtPnN0cmVhbSkpOwotCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JcmV0dXJuIChyMSA8IHJldCA/IHIxIDogcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZC5jCmluZGV4IDI1MWIxN2QuLmQwZDc4YTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZC5jCkBAIC0xNzIsMTEgKzE3Miw2IEBACiBhcmNoaXZlX2NvbXByZXNzb3JfenN0ZF9vcGVuKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyZXQpOwogCiAJaWYgKGRhdGEtPm91dC5kc3QgPT0gTlVMTCkgewogCQlzaXplX3QgYnMgPSBaU1REX0NTdHJlYW1PdXRTaXplKCksIGJwYjsKQEAgLTIzOCwxNCArMjMzLDkgQEAKIGFyY2hpdmVfY29tcHJlc3Nvcl96c3RkX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByMSwgcjI7CiAKIAkvKiBGaW5pc2ggenN0ZCBmcmFtZSAqLwotCXIxID0gZHJpdmVfY29tcHJlc3NvcihmLCBkYXRhLCAxLCBOVUxMLCAwKTsKLQotCXIyID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0KLQlyZXR1cm4gcjEgPCByMiA/IHIxIDogcjI7CisJcmV0dXJuIGRyaXZlX2NvbXByZXNzb3IoZiwgZGF0YSwgMSwgTlVMTCwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9ibG9ja3NpemUuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Jsb2Nrc2l6ZS4zCmluZGV4IGFmZDg0ZWEuLjQ5NzNmOTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Jsb2Nrc2l6ZS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Jsb2Nrc2l6ZS4zCkBAIC0xMDcsOCArMTA3LDggQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2RhdGEuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2RhdGEuMwppbmRleCA5YzE2Y2Q5Li5iYzIwOGI0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kYXRhLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGF0YS4zCkBAIC04Miw5ICs4Miw5IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5IDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKaW5kZXggOTQ5YzllZi4uMmZhMDE2ZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMwpAQCAtMjQsNyArMjQsNyBAQAogLlwiCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBBcHJpbCAzLCAyMDE3CisuRGQgSmFudWFyeSAxOSwgMjAyMAogLkR0IEFSQ0hJVkVfV1JJVEVfRElTSyAzCiAuT3MKIC5TaCBOQU1FCkBAIC0xMTMsNyArMTEzLDggQEAKIC5QcSBGcmVlQlNELCBNYWMgT1MgWAogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZmlsZSBhdHRyaWJ1dGVzLgogLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9NQUNfTUVUQURBVEEKLU1hYyBPUyBYIHNwZWNpZmljLiBSZXN0b3JlIG1ldGFkYXRhIHVzaW5nCitNYWMgT1MgWCBzcGVjaWZpYy4KK1Jlc3RvcmUgbWV0YWRhdGEgdXNpbmcKIC5YciBjb3B5ZmlsZSAzIC4KIEJ5IGRlZmF1bHQsCiAuWHIgY29weWZpbGUgMwpAQCAtMTM4LDYgKzEzOSwxMSBAQAogaWYgdGhlIGRlZmF1bHQgdXNlciBhbmQgZ3JvdXAgSURzIG9mIG5ld2x5LWNyZWF0ZWQgb2JqZWN0cyBvbiBkaXNrCiBoYXBwZW4gdG8gbWF0Y2ggdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBhcmNoaXZlIGVudHJ5LgogQnkgZGVmYXVsdCwgb25seSBiYXNpYyBwZXJtaXNzaW9ucyBhcmUgcmVzdG9yZWQsIGFuZCB1bWFzayBpcyBvYmV5ZWQuCisuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NBRkVfV1JJVEVTCitFeHRyYWN0IGZpbGVzIGF0b21pY2FsbHksIGJ5IGZpcnN0IGNyZWF0aW5nIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIGFuZCB0aGVuCityZW5hbWluZyBpdCB0byBpdHMgcmVxdWlyZWQgZGVzdGluYXRpb24gbmFtZS4KK1RoaXMgYXZvaWRzIGEgcmFjZSB3aGVyZSBhbiBhcHBsaWNhdGlvbiBtaWdodCBzZWUgYSBwYXJ0aWFsIGZpbGUgKG9yIG5vCitmaWxlKSBkdXJpbmcgZXh0cmFjdGlvbi4KIC5JdCBDbSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUwogUmVmdXNlIHRvIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KQEAgLTI2NCw5ICsyNzAsOSBAQAogZnVuY3Rpb25zLgogLlwiCiAuU2ggU0VFIEFMU08KKy5YciB0YXIgMSAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCi0uWHIgdGFyIDEgLAogLlhyIGxpYmFyY2hpdmUgMwogLlNoIEhJU1RPUlkKIFRoZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCmluZGV4IGFmZmE1MDMuLjFmN2U2NzMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKQEAgLTE2NSw2ICsxNjUsMTAgQEAKICNkZWZpbmUgT19OT0ZPTExPVyAwCiAjZW5kaWYKIAorI2lmbmRlZiBBVF9GRENXRAorI2RlZmluZSBBVF9GRENXRCAtMTAwCisjZW5kaWYKKwogc3RydWN0IGZpeHVwX2VudHJ5IHsKIAlzdHJ1Y3QgZml4dXBfZW50cnkJKm5leHQ7CiAJc3RydWN0IGFyY2hpdmVfYWNsCSBhY2w7CkBAIC0yNDksNiArMjUzLDggQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9lbnRyeQkqZW50cnk7IC8qIEVudHJ5IGJlaW5nIGV4dHJhY3RlZC4gKi8KIAljaGFyCQkJKm5hbWU7IC8qIE5hbWUgb2YgZW50cnksIHBvc3NpYmx5IGVkaXRlZC4gKi8KIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcJIF9uYW1lX2RhdGE7IC8qIGJhY2tpbmcgc3RvcmUgZm9yICduYW1lJyAqLworCWNoYXIJCQkqdG1wbmFtZTsgLyogVGVtcG9yYXJ5IG5hbWUgKiAqLworCXN0cnVjdCBhcmNoaXZlX3N0cmluZwkgX3RtcG5hbWVfZGF0YTsgLyogYmFja2luZyBzdG9yZSBmb3IgJ3RtcG5hbWUnICovCiAJLyogVGFza3MgcmVtYWluaW5nIGZvciB0aGlzIG9iamVjdC4gKi8KIAlpbnQJCQkgdG9kbzsKIAkvKiBUYXNrcyBkZWZlcnJlZCB1bnRpbCBlbmQtb2YtYXJjaGl2ZS4gKi8KQEAgLTM0OCw2ICszNTQsOSBAQAogCiAjZGVmaW5lIEhGU19CTE9DS1MocykJKChzKSA+PiAxMikKIAorCitzdGF0aWMgaW50CWxhX29wZW5kaXJhdChpbnQsIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50CWxhX21rdGVtcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIHZvaWQJZnNvYmpfZXJyb3IoaW50ICosIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKIAkJICAgIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgaW50CWNoZWNrX3N5bWxpbmtzX2Zzb2JqKGNoYXIgKiwgaW50ICosIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqLApAQCAtNDAxLDYgKzQxMCw2MSBAQAogCQkgICAgc2l6ZV90LCBpbnQ2NF90KTsKIAogc3RhdGljIGludAorbGFfbWt0ZW1wKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCit7CisJaW50IG9lcnJubywgZmQ7CisJbW9kZV90IG1vZGU7CisKKwlhcmNoaXZlX3N0cmluZ19lbXB0eSgmYS0+X3RtcG5hbWVfZGF0YSk7CisJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmYS0+X3RtcG5hbWVfZGF0YSwgIiVzLlhYWFhYWCIsIGEtPm5hbWUpOworCWEtPnRtcG5hbWUgPSBhLT5fdG1wbmFtZV9kYXRhLnM7CisKKwlmZCA9IF9fYXJjaGl2ZV9ta3N0ZW1wKGEtPnRtcG5hbWUpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJbW9kZSA9IGEtPm1vZGUgJiAwNzc3ICYgfmEtPnVzZXJfdW1hc2s7CisJaWYgKGZjaG1vZChmZCwgbW9kZSkgPT0gLTEpIHsKKwkJb2Vycm5vID0gZXJybm87CisJCWNsb3NlKGZkKTsKKwkJZXJybm8gPSBvZXJybm87CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50CitsYV9vcGVuZGlyYXQoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoKSB7CisJY29uc3QgaW50IGZsYWdzID0gT19DTE9FWEVDCisjaWYgZGVmaW5lZChPX0JJTkFSWSkKKwkgICAgfCBPX0JJTkFSWQorI2VuZGlmCisjaWYgZGVmaW5lZChPX0RJUkVDVE9SWSkKKwkgICAgfCBPX0RJUkVDVE9SWQorI2VuZGlmCisjaWYgZGVmaW5lZChPX1BBVEgpCisJICAgIHwgT19QQVRICisjZWxpZiBkZWZpbmVkKE9fU0VBUkNIKQorCSAgICB8IE9fU0VBUkNICisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKE9fRVhFQykKKwkgICAgfCBPX0VYRUMKKyNlbHNlCisJICAgIHwgT19SRE9OTFkKKyNlbmRpZgorCSAgICA7CisKKyNpZiAhZGVmaW5lZChIQVZFX09QRU5BVCkKKwlpZiAoZmQgIT0gQVRfRkRDV0QpIHsKKwkJZXJybm8gPSBFTk9UU1VQOworCQlyZXR1cm4gKC0xKTsKKwl9IGVsc2UKKwkJcmV0dXJuIChvcGVuKHBhdGgsIGZsYWdzKSk7CisjZWxzZQorCXJldHVybiAob3BlbmF0KGZkLCBwYXRoLCBmbGFncykpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKIGxhenlfc3RhdChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewogCWlmIChhLT5wc3QgIT0gTlVMTCkgewpAQCAtMTcwNSw2ICsxNzY5LDIwIEBACiAJfQogCiAJLyoKKwkgKiBIWVBPVEhFU0lTOgorCSAqIElmIHdlJ3JlIG5vdCByb290LCB3ZSB3b24ndCBiZSBzZXR0aW5nIGFueSBzZWN1cml0eQorCSAqIGF0dHJpYnV0ZXMgdGhhdCBtYXkgYmUgd2lwZWQgYnkgdGhlIHNldF9tb2RlKCkgcm91dGluZQorCSAqIGJlbG93LiAgV2UgYWxzbyBjYW4ndCBzZXQgeGF0dHIgb24gbm9uLW93bmVyLXdyaXRhYmxlIGZpbGVzLAorCSAqIHdoaWNoIG1heSBiZSB0aGUgc3RhdGUgYWZ0ZXIgc2V0X21vZGUoKS4gUGVyZm9ybQorCSAqIHNldF94YXR0cnMoKSBmaXJzdCBiYXNlZCBvbiB0aGVzZSBjb25zdHJhaW50cy4KKwkgKi8KKwlpZiAoYS0+dXNlcl91aWQgIT0gMCAmJgorCSAgICAoYS0+dG9kbyAmIFRPRE9fWEFUVFIpKSB7CisJCWludCByMiA9IHNldF94YXR0cnMoYSk7CisJCWlmIChyMiA8IHJldCkgcmV0ID0gcjI7CisJfQorCisJLyoKIAkgKiBzZXRfbW9kZSBtdXN0IHByZWNlZGUgQUNMcyBvbiBzeXN0ZW1zIHN1Y2ggYXMgU29sYXJpcyBhbmQKIAkgKiBGcmVlQlNEIHdoZXJlIHNldHRpbmcgdGhlIG1vZGUgaW1wbGljaXRseSBjbGVhcnMgZXh0ZW5kZWQgQUNMcwogCSAqLwpAQCAtMTcxNyw4ICsxNzk1LDEwIEBACiAJICogU2VjdXJpdHktcmVsYXRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIChzdWNoIGFzCiAJICogc2VjdXJpdHkuY2FwYWJpbGl0eSBvbiBMaW51eCkgaGF2ZSB0byBiZSByZXN0b3JlZCBsYXN0LAogCSAqIHNpbmNlIHRoZXkncmUgaW1wbGljaXRseSByZW1vdmVkIGJ5IG90aGVyIGZpbGUgY2hhbmdlcy4KKwkgKiBXZSBkbyB0aGlzIGxhc3Qgb25seSB3aGVuIHJvb3QuCiAJICovCi0JaWYgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSB7CisJaWYgKGEtPnVzZXJfdWlkID09IDAgJiYKKwkgICAgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSkgewogCQlpbnQgcjIgPSBzZXRfeGF0dHJzKGEpOwogCQlpZiAocjIgPCByZXQpIHJldCA9IHIyOwogCX0KQEAgLTE3NzMsMTIgKzE4NTMsMTggQEAKIAlpZiAoYS0+ZmQgPj0gMCkgewogCQljbG9zZShhLT5mZCk7CiAJCWEtPmZkID0gLTE7CisJCWlmIChhLT50bXBuYW1lKSB7CisJCQlpZiAocmVuYW1lKGEtPnRtcG5hbWUsIGEtPm5hbWUpID09IC0xKSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAorCQkJCSAgICAicmVuYW1lIGZhaWxlZCIpOworCQkJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CisJCQl9CisJCQlhLT50bXBuYW1lID0gTlVMTDsKKwkJfQogCX0KIAkvKiBJZiB0aGVyZSdzIGFuIGVudHJ5LCB3ZSBjYW4gcmVsZWFzZSBpdCBub3cuICovCi0JaWYgKGEtPmVudHJ5KSB7Ci0JCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7Ci0JCWEtPmVudHJ5ID0gTlVMTDsKLQl9CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKKwlhLT5lbnRyeSA9IE5VTEw7CiAJYS0+YXJjaGl2ZS5zdGF0ZSA9IEFSQ0hJVkVfU1RBVEVfSEVBREVSOwogCXJldHVybiAocmV0KTsKIH0KQEAgLTE4OTUsNyArMTk4MSw3IEBACiAJCXJldHVybjsKIAogCS8qIFRyeSB0byByZWNvcmQgb3VyIHN0YXJ0aW5nIGRpci4gKi8KLQlhLT5yZXN0b3JlX3B3ZCA9IG9wZW4oIi4iLCBPX1JET05MWSB8IE9fQklOQVJZIHwgT19DTE9FWEVDKTsKKwlhLT5yZXN0b3JlX3B3ZCA9IGxhX29wZW5kaXJhdChBVF9GRENXRCwgIi4iKTsKIAlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyhhLT5yZXN0b3JlX3B3ZCk7CiAJaWYgKGEtPnJlc3RvcmVfcHdkIDwgMCkKIAkJcmV0dXJuOwpAQCAtMjAxOCw3ICsyMTA0LDcgQEAKIAkJICogZm9sbG93IHRoZSBzeW1saW5rIGlmIHdlJ3JlIGNyZWF0aW5nIGEgZGlyLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoYS0+bW9kZSkpCi0JCQlyID0gc3RhdChhLT5uYW1lLCAmYS0+c3QpOworCQkJciA9IGxhX3N0YXQoYS0+bmFtZSwgJmEtPnN0KTsKIAkJLyoKIAkJICogSWYgaXQncyBub3QgYSBkaXIgKG9yIGl0J3MgYSBicm9rZW4gc3ltbGluayksCiAJCSAqIHRoZW4gZG9uJ3QgZm9sbG93IGl0LgpAQCAtMjA1MiwxNyArMjEzOCwyOCBAQAogCQl9CiAKIAkJaWYgKCFTX0lTRElSKGEtPnN0LnN0X21vZGUpKSB7Ci0JCQkvKiBBIG5vbi1kaXIgaXMgaW4gdGhlIHdheSwgdW5saW5rIGl0LiAqLwogCQkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykKIAkJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7Ci0JCQlpZiAodW5saW5rKGEtPm5hbWUpICE9IDApIHsKLQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCi0JCQkJICAgICJDYW4ndCB1bmxpbmsgYWxyZWFkeS1leGlzdGluZyBvYmplY3QiKTsKLQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKworCQkJaWYgKChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykgJiYKKwkJCSAgICBTX0lTUkVHKGEtPnN0LnN0X21vZGUpKSB7CisJCQkJLyogVXNlIGEgdGVtcG9yYXJ5IGZpbGUgdG8gZXh0cmFjdCAqLworCQkJCWlmICgoYS0+ZmQgPSBsYV9ta3RlbXAoYSkpID09IC0xKQorCQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJCQkJYS0+cHN0ID0gTlVMTDsKKwkJCQllbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIEEgbm9uLWRpciBpcyBpbiB0aGUgd2F5LCB1bmxpbmsgaXQuICovCisJCQkJaWYgKHVubGluayhhLT5uYW1lKSAhPSAwKSB7CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKKwkJCQkJICAgICJDYW4ndCB1bmxpbmsgYWxyZWFkeS1leGlzdGluZyAiCisJCQkJCSAgICAib2JqZWN0Iik7CisJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJCX0KKwkJCQlhLT5wc3QgPSBOVUxMOworCQkJCS8qIFRyeSBhZ2Fpbi4gKi8KKwkJCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKIAkJCX0KLQkJCWEtPnBzdCA9IE5VTEw7Ci0JCQkvKiBUcnkgYWdhaW4uICovCi0JCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKIAkJfSBlbHNlIGlmICghU19JU0RJUihhLT5tb2RlKSkgewogCQkJLyogQSBkaXIgaXMgaW4gdGhlIHdheSBvZiBhIG5vbi1kaXIsIHJtZGlyIGl0LiAqLwogCQkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykKQEAgLTIxNjQsNiArMjI2MSwxMyBAQAogCQl9CiAJCWZyZWUobGlua25hbWVfY29weSk7CiAJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVycm9yX3N0cmluZyk7CisJCS8qCisJCSAqIFVubGlua2luZyBhbmQgbGlua2luZyBoZXJlIGlzIHJlYWxseSBub3QgYXRvbWljLAorCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCSAqIGFuIG1rdGVtcGxpbmsoKSBmdW5jdGlvbiwgYW5kIHRoZW4gdXNlIHJlbmFtZSgyKS4KKwkJICovCisJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykKKwkJCXVubGluayhhLT5uYW1lKTsKIAkJciA9IGxpbmsobGlua25hbWUsIGEtPm5hbWUpID8gZXJybm8gOiAwOwogCQkvKgogCQkgKiBOZXcgY3BpbyBhbmQgcGF4IGZvcm1hdHMgYWxsb3cgaGFyZGxpbmsgZW50cmllcwpAQCAtMjE4NCw3ICsyMjg4LDcgQEAKICNpZmRlZiBIQVZFX0xTVEFUCiAJCQlyID0gbHN0YXQoYS0+bmFtZSwgJnN0KTsKICNlbHNlCi0JCQlyID0gc3RhdChhLT5uYW1lLCAmc3QpOworCQkJciA9IGxhX3N0YXQoYS0+bmFtZSwgJnN0KTsKICNlbmRpZgogCQkJaWYgKHIgIT0gMCkKIAkJCQlyID0gZXJybm87CkBAIC0yMjAyLDYgKzIzMDYsMTMgQEAKIAlsaW5rbmFtZSA9IGFyY2hpdmVfZW50cnlfc3ltbGluayhhLT5lbnRyeSk7CiAJaWYgKGxpbmtuYW1lICE9IE5VTEwpIHsKICNpZiBIQVZFX1NZTUxJTksKKwkJLyoKKwkJICogVW5saW5raW5nIGFuZCBsaW5raW5nIGhlcmUgaXMgcmVhbGx5IG5vdCBhdG9taWMsCisJCSAqIGJ1dCBkb2luZyBpdCByaWdodCwgd291bGQgcmVxdWlyZSB1cyB0byBjb25zdHJ1Y3QKKwkJICogYW4gbWt0ZW1wc3ltbGluaygpIGZ1bmN0aW9uLCBhbmQgdGhlbiB1c2UgcmVuYW1lKDIpLgorCQkgKi8KKwkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1NBRkVfV1JJVEVTKQorCQkJdW5saW5rKGEtPm5hbWUpOwogCQlyZXR1cm4gc3ltbGluayhsaW5rbmFtZSwgYS0+bmFtZSkgPyBlcnJubyA6IDA7CiAjZWxzZQogCQlyZXR1cm4gKEVQRVJNKTsKQEAgLTIyMjMsMTEgKzIzMzQsMjEgQEAKIAkgKi8KIAltb2RlID0gZmluYWxfbW9kZSAmIDA3NzcgJiB+YS0+dXNlcl91bWFzazsKIAorCS8qIAorCSAqIEFsd2F5cyBjcmVhdGUgd3JpdGFibGUgc3VjaCB0aGF0IFtmXXNldHhhdHRyKCkgd29ya3MgaWYgd2UncmUgbm90CisJICogcm9vdC4KKwkgKi8KKwlpZiAoYS0+dXNlcl91aWQgIT0gMCAmJgorCSAgICBhLT50b2RvICYgKFRPRE9fSEZTX0NPTVBSRVNTSU9OIHwgVE9ET19YQVRUUikpIHsKKwkJbW9kZSB8PSAwMjAwOworCX0KKwogCXN3aXRjaCAoYS0+bW9kZSAmIEFFX0lGTVQpIHsKIAlkZWZhdWx0OgogCQkvKiBQT1NJWCByZXF1aXJlcyB0aGF0IHdlIGZhbGwgdGhyb3VnaCBoZXJlLiAqLwogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgQUVfSUZSRUc6CisJCWEtPnRtcG5hbWUgPSBOVUxMOwogCQlhLT5mZCA9IG9wZW4oYS0+bmFtZSwKIAkJICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCB8IE9fQklOQVJZIHwgT19DTE9FWEVDLCBtb2RlKTsKIAkJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoYS0+ZmQpOwpAQCAtMjMxOSw3ICsyNDQwLDcgQEAKIHsKIAlzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphID0gKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKilfYTsKIAlzdHJ1Y3QgZml4dXBfZW50cnkgKm5leHQsICpwOwotCWludCByZXQ7CisJaW50IGZkLCByZXQ7CiAKIAlhcmNoaXZlX2NoZWNrX21hZ2ljKCZhLT5hcmNoaXZlLCBBUkNISVZFX1dSSVRFX0RJU0tfTUFHSUMsCiAJICAgIEFSQ0hJVkVfU1RBVEVfSEVBREVSIHwgQVJDSElWRV9TVEFURV9EQVRBLApAQCAtMjMzMCwyMSArMjQ1MSwzMyBAQAogCXAgPSBzb3J0X2Rpcl9saXN0KGEtPmZpeHVwX2xpc3QpOwogCiAJd2hpbGUgKHAgIT0gTlVMTCkgeworCQlmZCA9IC0xOwogCQlhLT5wc3QgPSBOVUxMOyAvKiBNYXJrIHN0YXQgY2FjaGUgYXMgb3V0LW9mLWRhdGUuICovCisJCWlmIChwLT5maXh1cCAmCisJCSAgICAoVE9ET19USU1FUyB8IFRPRE9fTU9ERV9CQVNFIHwgVE9ET19BQ0xTIHwgVE9ET19GRkxBR1MpKSB7CisJCQlmZCA9IG9wZW4ocC0+bmFtZSwKKwkJCSAgICBPX1dST05MWSB8IE9fQklOQVJZIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyk7CisJCX0KIAkJaWYgKHAtPmZpeHVwICYgVE9ET19USU1FUykgewotCQkJc2V0X3RpbWVzKGEsIC0xLCBwLT5tb2RlLCBwLT5uYW1lLAorCQkJc2V0X3RpbWVzKGEsIGZkLCBwLT5tb2RlLCBwLT5uYW1lLAogCQkJICAgIHAtPmF0aW1lLCBwLT5hdGltZV9uYW5vcywKIAkJCSAgICBwLT5iaXJ0aHRpbWUsIHAtPmJpcnRodGltZV9uYW5vcywKIAkJCSAgICBwLT5tdGltZSwgcC0+bXRpbWVfbmFub3MsCiAJCQkgICAgcC0+Y3RpbWUsIHAtPmN0aW1lX25hbm9zKTsKIAkJfQotCQlpZiAocC0+Zml4dXAgJiBUT0RPX01PREVfQkFTRSkKKwkJaWYgKHAtPmZpeHVwICYgVE9ET19NT0RFX0JBU0UpIHsKKyNpZmRlZiBIQVZFX0ZDSE1PRAorCQkJaWYgKGZkID49IDApCisJCQkJZmNobW9kKGZkLCBwLT5tb2RlKTsKKwkJCWVsc2UKKyNlbmRpZgogCQkJY2htb2QocC0+bmFtZSwgcC0+bW9kZSk7CisJCX0KIAkJaWYgKHAtPmZpeHVwICYgVE9ET19BQ0xTKQotCQkJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9hY2xzKCZhLT5hcmNoaXZlLCAtMSwgcC0+bmFtZSwKLQkJCSAgICAmcC0+YWNsLCBwLT5tb2RlKTsKKwkJCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfYWNscygmYS0+YXJjaGl2ZSwgZmQsCisJCQkgICAgcC0+bmFtZSwgJnAtPmFjbCwgcC0+bW9kZSk7CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fRkZMQUdTKQotCQkJc2V0X2ZmbGFnc19wbGF0Zm9ybShhLCAtMSwgcC0+bmFtZSwKKwkJCXNldF9mZmxhZ3NfcGxhdGZvcm0oYSwgZmQsIHAtPm5hbWUsCiAJCQkgICAgcC0+bW9kZSwgcC0+ZmZsYWdzX3NldCwgMCk7CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fTUFDX01FVEFEQVRBKQogCQkJc2V0X21hY19tZXRhZGF0YShhLCBwLT5uYW1lLCBwLT5tYWNfbWV0YWRhdGEsCkBAIC0yMzUzLDYgKzI0ODYsOCBAQAogCQlhcmNoaXZlX2FjbF9jbGVhcigmcC0+YWNsKTsKIAkJZnJlZShwLT5tYWNfbWV0YWRhdGEpOwogCQlmcmVlKHAtPm5hbWUpOworCQlpZiAoZmQgPj0gMCkKKwkJCWNsb3NlKGZkKTsKIAkJZnJlZShwKTsKIAkJcCA9IG5leHQ7CiAJfQpAQCAtMjM3Myw5ICsyNTA4LDkgQEAKIAlyZXQgPSBfYXJjaGl2ZV93cml0ZV9kaXNrX2Nsb3NlKCZhLT5hcmNoaXZlKTsKIAlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X2dyb3VwX2xvb2t1cCgmYS0+YXJjaGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF91c2VyX2xvb2t1cCgmYS0+YXJjaGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JaWYgKGEtPmVudHJ5KQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOworCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+X25hbWVfZGF0YSk7CisJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+X3RtcG5hbWVfZGF0YSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+YXJjaGl2ZS5lcnJvcl9zdHJpbmcpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmEtPnBhdGhfc2FmZSk7CiAJYS0+YXJjaGl2ZS5tYWdpYyA9IDA7CkBAIC0yNTE4LDggKzI2NTMsNiBAQAogICogc2NhbiB0aGUgcGF0aCBhbmQgYm90aCBjYW4gYmUgb3B0aW1pemVkIGJ5IGNvbXBhcmluZyBhZ2FpbnN0IG90aGVyCiAgKiByZWNlbnQgcGF0aHMuCiAgKi8KLS8qIFRPRE86IEV4dGVuZCB0aGlzIHRvIHN1cHBvcnQgc3ltbGlua3Mgb24gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIuICovCi0KIC8qCiAgKiBDaGVja3MgdGhlIGdpdmVuIHBhdGggdG8gc2VlIGlmIGFueSBlbGVtZW50cyBhbG9uZyBpdCBhcmUgc3ltbGlua3MuICBSZXR1cm5zCiAgKiBBUkNISVZFX09LIGlmIHRoZXJlIGFyZSBub25lLCBvdGhlcndpc2UgcHV0cyBhbiBlcnJvciBpbiBlcnJtc2cuCkBAIC0yNTI4LDcgKzI2NjEsOCBAQAogY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICphX2Vubywgc3RydWN0IGFyY2hpdmVfc3RyaW5nICphX2VzdHIsCiAgICAgaW50IGZsYWdzKQogewotI2lmICFkZWZpbmVkKEhBVkVfTFNUQVQpCisjaWYgIWRlZmluZWQoSEFWRV9MU1RBVCkgJiYgXAorICAgICEoZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkpCiAJLyogUGxhdGZvcm0gZG9lc24ndCBoYXZlIGxzdGF0LCBzbyB3ZSBjYW4ndCBsb29rIGZvciBzeW1saW5rcy4gKi8KIAkodm9pZClwYXRoOyAvKiBVTlVTRUQgKi8KIAkodm9pZCllcnJvcl9udW1iZXI7IC8qIFVOVVNFRCAqLwpAQCAtMjU0Myw3ICsyNjc3LDEwIEBACiAJY2hhciBjOwogCWludCByOwogCXN0cnVjdCBzdGF0IHN0OwotCWludCByZXN0b3JlX3B3ZDsKKwlpbnQgY2hkaXJfZmQ7CisjaWYgZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkKKwlpbnQgZmQ7CisjZW5kaWYKIAogCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSBpZiBuYW1lIGlzIGVtcHR5ICovCiAJaWYocGF0aFswXSA9PSAnXDAnKQpAQCAtMjU2NCwxMCArMjcwMSwxMyBAQAogCSAqICBjIGhvbGRzIHdoYXQgdXNlZCB0byBiZSBpbiAqdGFpbAogCSAqICBsYXN0IGlzIDEgaWYgdGhpcyBpcyB0aGUgbGFzdCB0YWlsCiAJICovCi0JcmVzdG9yZV9wd2QgPSBvcGVuKCIuIiwgT19SRE9OTFkgfCBPX0JJTkFSWSB8IE9fQ0xPRVhFQyk7Ci0JX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcocmVzdG9yZV9wd2QpOwotCWlmIChyZXN0b3JlX3B3ZCA8IDApCisJY2hkaXJfZmQgPSBsYV9vcGVuZGlyYXQoQVRfRkRDV0QsICIuIik7CisJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoY2hkaXJfZmQpOworCWlmIChjaGRpcl9mZCA8IDApIHsKKwkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgZXJybm8sCisJCSAgICAiQ291bGQgbm90IG9wZW4gIiwgcGF0aCk7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQogCWhlYWQgPSBwYXRoOwogCXRhaWwgPSBwYXRoOwogCWxhc3QgPSAwOwpAQCAtMjU5Niw3ICsyNzM2LDExIEBACiAJCWMgPSB0YWlsWzBdOwogCQl0YWlsWzBdID0gJ1wwJzsKIAkJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IGhpdCBhIHN5bWxpbmsuICovCisjaWYgZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkKKwkJciA9IGZzdGF0YXQoY2hkaXJfZmQsIGhlYWQsICZzdCwgQVRfU1lNTElOS19OT0ZPTExPVyk7CisjZWxzZQogCQlyID0gbHN0YXQoaGVhZCwgJnN0KTsKKyNlbmRpZgogCQlpZiAociAhPSAwKSB7CiAJCQl0YWlsWzBdID0gYzsKIAkJCS8qIFdlJ3ZlIGhpdCBhIGRpciB0aGF0IGRvZXNuJ3QgZXhpc3Q7IHN0b3Agbm93LiAqLwpAQCAtMjYyMiw3ICsyNzY2LDE5IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewogCQkJaWYgKCFsYXN0KSB7Ci0JCQkJaWYgKGNoZGlyKGhlYWQpICE9IDApIHsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCWZkID0gbGFfb3BlbmRpcmF0KGNoZGlyX2ZkLCBoZWFkKTsKKwkJCQlpZiAoZmQgPCAwKQorCQkJCQlyID0gLTE7CisJCQkJZWxzZSB7CisJCQkJCXIgPSAwOworCQkJCQljbG9zZShjaGRpcl9mZCk7CisJCQkJCWNoZGlyX2ZkID0gZmQ7CisJCQkJfQorI2Vsc2UKKwkJCQlyID0gY2hkaXIoaGVhZCk7CisjZW5kaWYKKwkJCQlpZiAociAhPSAwKSB7CiAJCQkJCXRhaWxbMF0gPSBjOwogCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBlcnJubywKIAkJCQkJICAgICJDb3VsZCBub3QgY2hkaXIgIiwgcGF0aCk7CkBAIC0yNjM5LDcgKzI3OTUsMTIgQEAKIAkJCQkgKiBzbyB3ZSBjYW4gb3ZlcndyaXRlIGl0IHdpdGggdGhlCiAJCQkJICogaXRlbSBiZWluZyBleHRyYWN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKHVubGluayhoZWFkKSkgeworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCQkJciA9IHVubGlua2F0KGNoZGlyX2ZkLCBoZWFkLCAwKTsKKyNlbHNlCisJCQkJciA9IHVubGluayhoZWFkKTsKKyNlbmRpZgorCQkJCWlmIChyICE9IDApIHsKIAkJCQkJdGFpbFswXSA9IGM7CiAJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIGVycm5vLAogCQkJCQkgICAgIkNvdWxkIG5vdCByZW1vdmUgc3ltbGluayAiLApAQCAtMjY2OSw3ICsyODMwLDEyIEBACiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1VOTElOSykgewogCQkJCS8qIFVzZXIgYXNrZWQgdXMgdG8gcmVtb3ZlIHByb2JsZW1zLiAqLwotCQkJCWlmICh1bmxpbmsoaGVhZCkgIT0gMCkgeworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCQkJciA9IHVubGlua2F0KGNoZGlyX2ZkLCBoZWFkLCAwKTsKKyNlbHNlCisJCQkJciA9IHVubGluayhoZWFkKTsKKyNlbmRpZgorCQkJCWlmIChyICE9IDApIHsKIAkJCQkJdGFpbFswXSA9IGM7CiAJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIDAsCiAJCQkJCSAgICAiQ2Fubm90IHJlbW92ZSBpbnRlcnZlbmluZyAiCkBAIC0yNjg3LDcgKzI4NTMsMTEgQEAKIAkJCQkgKiBUaGlzIGlzIG5lZWRlZCB0byBleHRyYWN0IGhhcmRsaW5rcyBvdmVyCiAJCQkJICogc3ltbGlua3MuCiAJCQkJICovCi0JCQkJciA9IHN0YXQoaGVhZCwgJnN0KTsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCXIgPSBmc3RhdGF0KGNoZGlyX2ZkLCBoZWFkLCAmc3QsIDApOworI2Vsc2UKKwkJCQlyID0gbGFfc3RhdChoZWFkLCAmc3QpOworI2VuZGlmCiAJCQkJaWYgKHIgIT0gMCkgewogCQkJCQl0YWlsWzBdID0gYzsKIAkJCQkJaWYgKGVycm5vID09IEVOT0VOVCkgewpAQCAtMjcwMCw3ICsyODcwLDE5IEBACiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQkJCQlpZiAoY2hkaXIoaGVhZCkgIT0gMCkgeworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCQkJCWZkID0gbGFfb3BlbmRpcmF0KGNoZGlyX2ZkLCBoZWFkKTsKKwkJCQkJaWYgKGZkIDwgMCkKKwkJCQkJCXIgPSAtMTsKKwkJCQkJZWxzZSB7CisJCQkJCQlyID0gMDsKKwkJCQkJCWNsb3NlKGNoZGlyX2ZkKTsKKwkJCQkJCWNoZGlyX2ZkID0gZmQ7CisJCQkJCX0KKyNlbHNlCisJCQkJCXIgPSBjaGRpcihoZWFkKTsKKyNlbmRpZgorCQkJCQlpZiAociAhPSAwKSB7CiAJCQkJCQl0YWlsWzBdID0gYzsKIAkJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsCiAJCQkJCQkgICAgZXJybm8sCkBAIC0yNzM2LDE2ICsyOTE4LDIxIEBACiAJfQogCS8qIENhdGNoZXMgbG9vcCBleGl0cyB2aWEgYnJlYWsgKi8KIAl0YWlsWzBdID0gYzsKLSNpZmRlZiBIQVZFX0ZDSERJUgorI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJLyogSWYgd2Ugb3BlcmF0ZSB3aXRoIG9wZW5hdCgpLCBmc3RhdGF0KCkgYW5kIHVubGlua2F0KCkgdGhlcmUgd2FzCisJICogbm8gY2hkaXIoKSwgc28ganVzdCBjbG9zZSB0aGUgZmQgKi8KKwlpZiAoY2hkaXJfZmQgPj0gMCkKKwkJY2xvc2UoY2hkaXJfZmQpOworI2VsaWYgSEFWRV9GQ0hESVIKIAkvKiBJZiB3ZSBjaGFuZ2VkIGRpcmVjdG9yeSBhYm92ZSwgcmVzdG9yZSBpdCBoZXJlLiAqLwotCWlmIChyZXN0b3JlX3B3ZCA+PSAwKSB7Ci0JCXIgPSBmY2hkaXIocmVzdG9yZV9wd2QpOworCWlmIChjaGRpcl9mZCA+PSAwKSB7CisJCXIgPSBmY2hkaXIoY2hkaXJfZmQpOwogCQlpZiAociAhPSAwKSB7CiAJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBlcnJubywKIAkJCSAgICAiY2hkaXIoKSBmYWlsdXJlIiwgIiIpOwogCQl9Ci0JCWNsb3NlKHJlc3RvcmVfcHdkKTsKLQkJcmVzdG9yZV9wd2QgPSAtMTsKKwkJY2xvc2UoY2hkaXJfZmQpOworCQljaGRpcl9mZCA9IC0xOwogCQlpZiAociAhPSAwKSB7CiAJCQlyZXMgPSAoQVJDSElWRV9GQVRBTCk7CiAJCX0KQEAgLTMwMjcsNyArMzIxNCw3IEBACiAJICogaGVyZSBsb3NlcyB0aGUgYWJpbGl0eSB0byBleHRyYWN0IHRocm91Z2ggc3ltbGlua3MuICBBbHNvIG5vdGUKIAkgKiB0aGF0IHRoaXMgc2hvdWxkIG5vdCB1c2UgdGhlIGEtPnN0IGNhY2hlLgogCSAqLwotCWlmIChzdGF0KHBhdGgsICZzdCkgPT0gMCkgeworCWlmIChsYV9zdGF0KHBhdGgsICZzdCkgPT0gMCkgewogCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJCXJldHVybiAoQVJDSElWRV9PSyk7CiAJCWlmICgoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfTk9fT1ZFUldSSVRFKSkgewpAQCAtMzA4NSw3ICszMjcyLDcgQEAKIAkgKiBkb24ndCBhZGQgaXQgdG8gdGhlIGZpeHVwIGxpc3QgaGVyZSwgYXMgaXQncyBhbHJlYWR5IGJlZW4KIAkgKiBhZGRlZC4KIAkgKi8KLQlpZiAoc3RhdChwYXRoLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKwlpZiAobGFfc3RhdChwYXRoLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAogCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywgIkZhaWxlZCB0byBjcmVhdGUgZGlyICclcyciLApAQCAtMzEwNiwxMiArMzI5MywxNCBAQAogc3RhdGljIGludAogc2V0X293bmVyc2hpcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewotI2lmbmRlZiBfX0NZR1dJTl9fCi0vKiB1bmZvcnR1bmF0ZWx5LCBvbiB3aW4zMiB0aGVyZSBpcyBubyAncm9vdCcgdXNlciB3aXRoIHVpZCAwLAotICAgc28gd2UganVzdCBoYXZlIHRvIHRyeSB0aGUgY2hvd24gYW5kIHNlZSBpZiBpdCB3b3JrcyAqLwotCi0JLyogSWYgd2Uga25vdyB3ZSBjYW4ndCBjaGFuZ2UgaXQsIGRvbid0IGJvdGhlciB0cnlpbmcuICovCi0JaWYgKGEtPnVzZXJfdWlkICE9IDAgICYmICBhLT51c2VyX3VpZCAhPSBhLT51aWQpIHsKKyNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pCisvKgorICogT24gTGludXgsIGEgcHJvY2VzcyBtYXkgaGF2ZSB0aGUgQ0FQX0NIT1dOIGNhcGFiaWxpdHkuCisgKiBPbiBXaW5kb3dzIHRoZXJlIGlzIG5vICdyb290JyB1c2VyIHdpdGggdWlkIDAuCisgKiBFbHNld2hlcmUgd2UgY2FuIHNraXAgY2FsbGluZyBjaG93biBpZiB3ZSBhcmUgbm90IHJvb3QgYW5kIHRoZSBkZXNpcmVkCisgKiB1c2VyIGlkIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHVzZXIuCisgKi8KKwlpZiAoYS0+dXNlcl91aWQgIT0gMCAmJiBhLT51c2VyX3VpZCAhPSBhLT51aWQpIHsKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkgICAgIkNhbid0IHNldCBVSUQ9JWpkIiwgKGludG1heF90KWEtPnVpZCk7CiAJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKQEAgLTMzNjAsNiArMzU0OSw3IEBACiBzZXRfbW9kZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphLCBpbnQgbW9kZSkKIHsKIAlpbnQgciA9IEFSQ0hJVkVfT0s7CisJaW50IHIyOwogCW1vZGUgJj0gMDc3Nzc7IC8qIFN0cmlwIG9mZiBmaWxlIHR5cGUgYml0cy4gKi8KIAogCWlmIChhLT50b2RvICYgVE9ET19TR0lEX0NIRUNLKSB7CkBAIC0zNDUzLDIxICszNjQzLDE5IEBACiAJCSAqIHBvc3QtZXh0cmFjdCBmaXh1cCwgd2hpY2ggaXMgaGFuZGxlZCBlbHNld2hlcmUuCiAJCSAqLwogI2lmZGVmIEhBVkVfRkNITU9ECi0JCWlmIChhLT5mZCA+PSAwKSB7Ci0JCQlpZiAoZmNobW9kKGEtPmZkLCBtb2RlKSAhPSAwKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAotCQkJCSAgICAiQ2FuJ3Qgc2V0IHBlcm1pc3Npb25zIHRvIDAlbyIsIChpbnQpbW9kZSk7Ci0JCQkJciA9IEFSQ0hJVkVfV0FSTjsKLQkJCX0KLQkJfSBlbHNlCisJCWlmIChhLT5mZCA+PSAwKQorCQkJcjIgPSBmY2htb2QoYS0+ZmQsIG1vZGUpOworCQllbHNlCiAjZW5kaWYKLQkJCS8qIElmIHRoaXMgcGxhdGZvcm0gbGFja3MgZmNobW9kKCksIHRoZW4KLQkJCSAqIHdlJ2xsIGp1c3QgdXNlIGNobW9kKCkuICovCi0JCQlpZiAoY2htb2QoYS0+bmFtZSwgbW9kZSkgIT0gMCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKLQkJCQkgICAgIkNhbid0IHNldCBwZXJtaXNzaW9ucyB0byAwJW8iLCAoaW50KW1vZGUpOwotCQkJCXIgPSBBUkNISVZFX1dBUk47Ci0JCQl9CisJCS8qIElmIHRoaXMgcGxhdGZvcm0gbGFja3MgZmNobW9kKCksIHRoZW4KKwkJICogd2UnbGwganVzdCB1c2UgY2htb2QoKS4gKi8KKwkJcjIgPSBjaG1vZChhLT5uYW1lLCBtb2RlKTsKKworCQlpZiAocjIgIT0gMCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAorCQkJICAgICJDYW4ndCBzZXQgcGVybWlzc2lvbnMgdG8gMCVvIiwgKGludCltb2RlKTsKKwkJCXIgPSBBUkNISVZFX1dBUk47CisJCX0KIAl9CiAJcmV0dXJuIChyKTsKIH0KQEAgLTM0NzgsOSArMzY2Niw3IEBACiAJc3RydWN0IGZpeHVwX2VudHJ5ICpsZTsKIAl1bnNpZ25lZCBsb25nCXNldCwgY2xlYXI7CiAJaW50CQlyOwotCWludAkJY3JpdGljYWxfZmxhZ3M7CiAJbW9kZV90CQltb2RlID0gYXJjaGl2ZV9lbnRyeV9tb2RlKGEtPmVudHJ5KTsKLQogCS8qCiAJICogTWFrZSAnY3JpdGljYWxfZmxhZ3MnIGhvbGQgYWxsIGZpbGUgZmxhZ3MgdGhhdCBjYW4ndCBiZQogCSAqIGltbWVkaWF0ZWx5IHJlc3RvcmVkLiAgRm9yIGV4YW1wbGUsIG9uIEJTRCBzeXN0ZW1zLApAQCAtMzQ5NiwzMyArMzY4MiwzMyBAQAogCSAqIG90aGVyIHByb2dyYW1zIHRoYXQgbWlnaHQgdHJ5IHRvIG11Y2sgd2l0aCBmaWxlcyBhcyB0aGV5J3JlCiAJICogYmVpbmcgcmVzdG9yZWQuCiAJICovCi0JLyogSG9wZWZ1bGx5LCB0aGUgY29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGlzIG1lc3MgaW50byBhIGNvbnN0YW50LiAqLwotCWNyaXRpY2FsX2ZsYWdzID0gMDsKKwljb25zdCBpbnQJY3JpdGljYWxfZmxhZ3MgPSAwCiAjaWZkZWYgU0ZfSU1NVVRBQkxFCi0JY3JpdGljYWxfZmxhZ3MgfD0gU0ZfSU1NVVRBQkxFOworCSAgICB8IFNGX0lNTVVUQUJMRQogI2VuZGlmCiAjaWZkZWYgVUZfSU1NVVRBQkxFCi0JY3JpdGljYWxfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFOworCSAgICB8IFVGX0lNTVVUQUJMRQogI2VuZGlmCiAjaWZkZWYgU0ZfQVBQRU5ECi0JY3JpdGljYWxfZmxhZ3MgfD0gU0ZfQVBQRU5EOworCSAgICB8IFNGX0FQUEVORAogI2VuZGlmCiAjaWZkZWYgVUZfQVBQRU5ECi0JY3JpdGljYWxfZmxhZ3MgfD0gVUZfQVBQRU5EOworCSAgICB8IFVGX0FQUEVORAogI2VuZGlmCiAjaWYgZGVmaW5lZChGU19BUFBFTkRfRkwpCi0JY3JpdGljYWxfZmxhZ3MgfD0gRlNfQVBQRU5EX0ZMOworCSAgICB8IEZTX0FQUEVORF9GTAogI2VsaWYgZGVmaW5lZChFWFQyX0FQUEVORF9GTCkKLQljcml0aWNhbF9mbGFncyB8PSBFWFQyX0FQUEVORF9GTDsKKwkgICAgfCBFWFQyX0FQUEVORF9GTAogI2VuZGlmCiAjaWYgZGVmaW5lZChGU19JTU1VVEFCTEVfRkwpCi0JY3JpdGljYWxfZmxhZ3MgfD0gRlNfSU1NVVRBQkxFX0ZMOworCSAgICB8IEZTX0lNTVVUQUJMRV9GTAogI2VsaWYgZGVmaW5lZChFWFQyX0lNTVVUQUJMRV9GTCkKLQljcml0aWNhbF9mbGFncyB8PSBFWFQyX0lNTVVUQUJMRV9GTDsKKwkgICAgfCBFWFQyX0lNTVVUQUJMRV9GTAogI2VuZGlmCiAjaWZkZWYgRlNfSk9VUk5BTF9EQVRBX0ZMCi0JY3JpdGljYWxfZmxhZ3MgfD0gRlNfSk9VUk5BTF9EQVRBX0ZMOworCSAgICB8IEZTX0pPVVJOQUxfREFUQV9GTAogI2VuZGlmCisJOwogCiAJaWYgKGEtPnRvZG8gJiBUT0RPX0ZGTEFHUykgewogCQlhcmNoaXZlX2VudHJ5X2ZmbGFncyhhLT5lbnRyeSwgJnNldCwgJmNsZWFyKTsKQEAgLTM1NTMsMjkgKzM3MzksMjcgQEAKIHN0YXRpYyBpbnQKIGNsZWFyX25vY2hhbmdlX2ZmbGFncyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewotCWludAkJbm9jaGFuZ2VfZmxhZ3M7CiAJbW9kZV90CQltb2RlID0gYXJjaGl2ZV9lbnRyeV9tb2RlKGEtPmVudHJ5KTsKLQotCS8qIEhvcGVmdWxseSwgdGhlIGNvbXBpbGVyIHdpbGwgb3B0aW1pemUgdGhpcyBtZXNzIGludG8gYSBjb25zdGFudC4gKi8KLQlub2NoYW5nZV9mbGFncyA9IDA7CisJY29uc3QgaW50IG5vY2hhbmdlX2ZsYWdzID0gMAogI2lmZGVmIFNGX0lNTVVUQUJMRQotCW5vY2hhbmdlX2ZsYWdzIHw9IFNGX0lNTVVUQUJMRTsKKwkgICAgfCBTRl9JTU1VVEFCTEUKICNlbmRpZgogI2lmZGVmIFVGX0lNTVVUQUJMRQotCW5vY2hhbmdlX2ZsYWdzIHw9IFVGX0lNTVVUQUJMRTsKKwkgICAgfCBVRl9JTU1VVEFCTEUKICNlbmRpZgogI2lmZGVmIFNGX0FQUEVORAotCW5vY2hhbmdlX2ZsYWdzIHw9IFNGX0FQUEVORDsKKwkgICAgfCBTRl9BUFBFTkQKICNlbmRpZgogI2lmZGVmIFVGX0FQUEVORAotCW5vY2hhbmdlX2ZsYWdzIHw9IFVGX0FQUEVORDsKKwkgICAgfCBVRl9BUFBFTkQKICNlbmRpZgogI2lmZGVmIEVYVDJfQVBQRU5EX0ZMCi0Jbm9jaGFuZ2VfZmxhZ3MgfD0gRVhUMl9BUFBFTkRfRkw7CisJICAgIHwgRVhUMl9BUFBFTkRfRkwKICNlbmRpZgogI2lmZGVmIEVYVDJfSU1NVVRBQkxFX0ZMCi0Jbm9jaGFuZ2VfZmxhZ3MgfD0gRVhUMl9JTU1VVEFCTEVfRkw7CisJICAgIHwgRVhUMl9JTU1VVEFCTEVfRkwKICNlbmRpZgorCTsKIAogCXJldHVybiAoc2V0X2ZmbGFnc19wbGF0Zm9ybShhLCBhLT5mZCwgYS0+bmFtZSwgbW9kZSwgMCwKIAkgICAgbm9jaGFuZ2VfZmxhZ3MpKTsKQEAgLTM1OTEsOCArMzc3NSwyMiBAQAogICAgIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyBjbGVhcikKIHsKIAlpbnQgcjsKLQorCWNvbnN0IGludCBzZl9tYXNrID0gMAorI2lmZGVmIFNGX0FQUEVORAorCSAgICB8IFNGX0FQUEVORAorI2VuZGlmCisjaWZkZWYgU0ZfQVJDSElWRUQKKwkgICAgfCBTRl9BUkNISVZFRAorI2VuZGlmCisjaWZkZWYgU0ZfSU1NVVRBQkxFCisJICAgIHwgU0ZfSU1NVVRBQkxFCisjZW5kaWYKKyNpZmRlZiBTRl9OT1VOTElOSworCSAgICB8IFNGX05PVU5MSU5LCisjZW5kaWYKKwk7CiAJKHZvaWQpbW9kZTsgLyogVU5VU0VEICovCisKIAlpZiAoc2V0ID09IDAgICYmIGNsZWFyID09IDApCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKQEAgLTM2MDcsNiArMzgwNSwxMiBAQAogCiAJYS0+c3Quc3RfZmxhZ3MgJj0gfmNsZWFyOwogCWEtPnN0LnN0X2ZsYWdzIHw9IHNldDsKKworCS8qIE9ubHkgc3VwZXItdXNlciBtYXkgY2hhbmdlIFNGXyogZmxhZ3MgKi8KKworCWlmIChhLT51c2VyX3VpZCAhPSAwKQorCQlhLT5zdC5zdF9mbGFncyAmPSB+c2ZfbWFzazsKKwogI2lmZGVmIEhBVkVfRkNIRkxBR1MKIAkvKiBJZiBwbGF0Zm9ybSBoYXMgZmNoZmxhZ3MoKSBhbmQgd2Ugd2VyZSBnaXZlbiBhbiBmZCwgdXNlIGl0LiAqLwogCWlmIChmZCA+PSAwICYmIGZjaGZsYWdzKGZkLCBhLT5zdC5zdF9mbGFncykgPT0gMCkKQEAgLTM2NDgsNyArMzg1MiwyOCBAQAogCWludAkJIHJldDsKIAlpbnQJCSBteWZkID0gZmQ7CiAJaW50IG5ld2ZsYWdzLCBvbGRmbGFnczsKLQlpbnQgc2ZfbWFzayA9IDA7CisJLyoKKwkgKiBMaW51eCBoYXMgbm8gZGVmaW5lIGZvciB0aGUgZmxhZ3MgdGhhdCBhcmUgb25seSBzZXR0YWJsZSBieQorCSAqIHRoZSByb290IHVzZXIuICBUaGlzIGNvZGUgbWF5IHNlZW0gYSBsaXR0bGUgY29tcGxleCwgYnV0CisJICogdGhlcmUgc2VlbSB0byBiZSBzb21lIExpbnV4IHN5c3RlbXMgdGhhdCBsYWNrIHRoZXNlCisJICogZGVmaW5lcy4gKD8pICBUaGUgY29kZSBiZWxvdyBkZWdyYWRlcyByZWFzb25hYmx5IGdyYWNlZnVsbHkKKwkgKiBpZiBzZl9tYXNrIGlzIGluY29tcGxldGUuCisJICovCisJY29uc3QgaW50IHNmX21hc2sgPSAwCisjaWYgZGVmaW5lZChGU19JTU1VVEFCTEVfRkwpCisJICAgIHwgRlNfSU1NVVRBQkxFX0ZMCisjZWxpZiBkZWZpbmVkKEVYVDJfSU1NVVRBQkxFX0ZMKQorCSAgICB8IEVYVDJfSU1NVVRBQkxFX0ZMCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTX0FQUEVORF9GTCkKKwkgICAgfCBGU19BUFBFTkRfRkwKKyNlbGlmIGRlZmluZWQoRVhUMl9BUFBFTkRfRkwpCisJICAgIHwgRVhUMl9BUFBFTkRfRkwKKyNlbmRpZgorI2lmIGRlZmluZWQoRlNfSk9VUk5BTF9EQVRBX0ZMKQorCSAgICB8IEZTX0pPVVJOQUxfREFUQV9GTAorI2VuZGlmCisJOwogCiAJaWYgKHNldCA9PSAwICYmIGNsZWFyID09IDApCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CkBAIC0zNjY1LDI2ICszODkwLDYgQEAKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAogCS8qCi0JICogTGludXggaGFzIG5vIGRlZmluZSBmb3IgdGhlIGZsYWdzIHRoYXQgYXJlIG9ubHkgc2V0dGFibGUgYnkKLQkgKiB0aGUgcm9vdCB1c2VyLiAgVGhpcyBjb2RlIG1heSBzZWVtIGEgbGl0dGxlIGNvbXBsZXgsIGJ1dAotCSAqIHRoZXJlIHNlZW0gdG8gYmUgc29tZSBMaW51eCBzeXN0ZW1zIHRoYXQgbGFjayB0aGVzZQotCSAqIGRlZmluZXMuICg/KSAgVGhlIGNvZGUgYmVsb3cgZGVncmFkZXMgcmVhc29uYWJseSBncmFjZWZ1bGx5Ci0JICogaWYgc2ZfbWFzayBpcyBpbmNvbXBsZXRlLgotCSAqLwotI2lmIGRlZmluZWQoRlNfSU1NVVRBQkxFX0ZMKQotCXNmX21hc2sgfD0gRlNfSU1NVVRBQkxFX0ZMOwotI2VsaWYgZGVmaW5lZChFWFQyX0lNTVVUQUJMRV9GTCkKLQlzZl9tYXNrIHw9IEVYVDJfSU1NVVRBQkxFX0ZMOwotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19BUFBFTkRfRkwpCi0Jc2ZfbWFzayB8PSBGU19BUFBFTkRfRkw7Ci0jZWxpZiBkZWZpbmVkKEVYVDJfQVBQRU5EX0ZMKQotCXNmX21hc2sgfD0gRVhUMl9BUFBFTkRfRkw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKEZTX0pPVVJOQUxfREFUQV9GTCkKLQlzZl9tYXNrIHw9IEZTX0pPVVJOQUxfREFUQV9GTDsKLSNlbmRpZgotCS8qCiAJICogWFhYIEFzIGFib3ZlLCB0aGlzIHdvdWxkIGJlIHdheSBzaW1wbGVyIGlmIHdlIGRpZG4ndCBoYXZlCiAJICogdG8gcmVhZCB0aGUgY3VycmVudCBmbGFncyBmcm9tIGRpc2suIFhYWAogCSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaAppbmRleCBiNjU1ZGVhLi41NTdkN2UyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcHJpdmF0ZS5oIDIwMTA4NiAyMDA5LTEyLTI4IDAyOjE3OjUzWiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1dSSVRFX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfV1JJVEVfRElTS19QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9XUklURV9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1dSSVRFX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtX2FjbC5oIgogI2luY2x1ZGUgImFyY2hpdmVfYWNsX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9zdGFuZGFyZF9sb29rdXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3N0YW5kYXJkX2xvb2t1cC5jCmluZGV4IDVjNzY2ZDcuLjVmY2NkYjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3N0YW5kYXJkX2xvb2t1cC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3N0YW5kYXJkX2xvb2t1cC5jCkBAIC0xMTQsOCArMTE0LDcgQEAKIAkJcmV0dXJuICgoZ2lkX3QpYi0+aWQpOwogCiAJLyogRnJlZSB0aGUgY2FjaGUgc2xvdCBmb3IgYSBuZXcgZW50cnkuICovCi0JaWYgKGItPm5hbWUgIT0gTlVMTCkKLQkJZnJlZShiLT5uYW1lKTsKKwlmcmVlKGItPm5hbWUpOwogCWItPm5hbWUgPSBzdHJkdXAoZ25hbWUpOwogCS8qIE5vdGU6IElmIHN0cmR1cCBmYWlscywgdGhhdCdzIG9rYXk7IHdlIGp1c3Qgd29uJ3QgY2FjaGUuICovCiAJYi0+aGFzaCA9IGg7CkBAIC0xODQsOCArMTgzLDcgQEAKIAkJcmV0dXJuICgodWlkX3QpYi0+aWQpOwogCiAJLyogRnJlZSB0aGUgY2FjaGUgc2xvdCBmb3IgYSBuZXcgZW50cnkuICovCi0JaWYgKGItPm5hbWUgIT0gTlVMTCkKLQkJZnJlZShiLT5uYW1lKTsKKwlmcmVlKGItPm5hbWUpOwogCWItPm5hbWUgPSBzdHJkdXAodW5hbWUpOwogCS8qIE5vdGU6IElmIHN0cmR1cCBmYWlscywgdGhhdCdzIG9rYXk7IHdlIGp1c3Qgd29uJ3QgY2FjaGUuICovCiAJYi0+aGFzaCA9IGg7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3dpbmRvd3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfd2luZG93cy5jCmluZGV4IDc4ZWRhNGEuLjc3ZTM2YzQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfd2luZG93cy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfd2luZG93cy5jCkBAIC0xNjUsNiArMTY1LDggQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9lbnRyeQkqZW50cnk7IC8qIEVudHJ5IGJlaW5nIGV4dHJhY3RlZC4gKi8KIAl3Y2hhcl90CQkJKm5hbWU7IC8qIE5hbWUgb2YgZW50cnksIHBvc3NpYmx5IGVkaXRlZC4gKi8KIAlzdHJ1Y3QgYXJjaGl2ZV93c3RyaW5nCSBfbmFtZV9kYXRhOyAvKiBiYWNraW5nIHN0b3JlIGZvciAnbmFtZScgKi8KKwl3Y2hhcl90CQkJKnRtcG5hbWU7IC8qIFRlbXBvcmFyeSBuYW1lICovCisJc3RydWN0IGFyY2hpdmVfd3N0cmluZwlfdG1wbmFtZV9kYXRhOyAvKiBiYWNraW5nIHN0b3JlIGZvciAndG1wbmFtZScgKi8KIAkvKiBUYXNrcyByZW1haW5pbmcgZm9yIHRoaXMgb2JqZWN0LiAqLwogCWludAkJCSB0b2RvOwogCS8qIFRhc2tzIGRlZmVycmVkIHVudGlsIGVuZC1vZi1hcmNoaXZlLiAqLwpAQCAtMjA1LDYgKzIwNyw4IEBACiAjZGVmaW5lCU1JTklNVU1fRElSX01PREUgMDcwMAogI2RlZmluZQlNQVhJTVVNX0RJUl9NT0RFIDA3NzUKIAorc3RhdGljIGludAlkaXNrX3VubGluayhjb25zdCB3Y2hhcl90ICopOworc3RhdGljIGludAlkaXNrX3JtZGlyKGNvbnN0IHdjaGFyX3QgKik7CiBzdGF0aWMgaW50CWNoZWNrX3N5bWxpbmtzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CiBzdGF0aWMgaW50CWNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIHN0cnVjdCBmaXh1cF9lbnRyeSAqY3VycmVudF9maXh1cChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosCkBAIC0yMTMsMTMgKzIxNywxNyBAQAogc3RhdGljIGludAljcmVhdGVfZGlyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKiwgd2NoYXJfdCAqKTsKIHN0YXRpYyBpbnQJY3JlYXRlX3BhcmVudF9kaXIoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqLCB3Y2hhcl90ICopOwogc3RhdGljIGludAlsYV9jaG1vZChjb25zdCB3Y2hhcl90ICosIG1vZGVfdCk7CitzdGF0aWMgaW50CWxhX21rdGVtcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlvbGRlcihCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIHN0YXRpYyBpbnQJcGVybWlzc2l2ZV9uYW1lX3coc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyBpbnQJcmVzdG9yZV9lbnRyeShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlzZXRfYWNscyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosIEhBTkRMRSBoLAogCQkgICAgY29uc3Qgd2NoYXJfdCAqLCBzdHJ1Y3QgYXJjaGl2ZV9hY2wgKik7CiBzdGF0aWMgaW50CXNldF94YXR0cnMoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKK3N0YXRpYyBpbnQJY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CiBzdGF0aWMgaW50CXNldF9mZmxhZ3Moc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKK3N0YXRpYyBpbnQJc2V0X2ZmbGFnc19wbGF0Zm9ybShjb25zdCB3Y2hhcl90ICosIHVuc2lnbmVkIGxvbmcsCisJCSAgICB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQJc2V0X293bmVyc2hpcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlzZXRfbW9kZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosIGludCBtb2RlKTsKIHN0YXRpYyBpbnQJc2V0X3RpbWVzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKiwgSEFORExFLCBpbnQsCkBAIC00NzQsNiArNDgyLDExIEBACiAJewogCQlhcmNoaXZlX3dzdHJuY3B5KCYoYS0+X25hbWVfZGF0YSksIHdzcCwgbCk7CiAJfQorCWVsc2UgaWYgKGwgPiAyICYmIHdzcFswXSA9PSBMJ1xcJyAmJiB3c3BbMV0gPT0gTCdcXCcgJiYgd3NwWzJdICE9IEwnXFwnKQorCXsKKwkJYXJjaGl2ZV93c3RybmNweSgmKGEtPl9uYW1lX2RhdGEpLCBMIlxcXFw/XFxVTkNcXCIsIDgpOworCQlhcmNoaXZlX3dzdHJuY2F0KCYoYS0+X25hbWVfZGF0YSksIHdzcCsyLCBsLTIpOworCX0KIAllbHNlCiAJewogCQlhcmNoaXZlX3dzdHJuY3B5KCYoYS0+X25hbWVfZGF0YSksIEwiXFxcXD9cXCIsIDQpOwpAQCAtNTI0LDYgKzUzNywyOCBAQAogCXJldHVybiAocmV0KTsKIH0KIAorc3RhdGljIGludAorbGFfbWt0ZW1wKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCit7CisJaW50IGZkOworCW1vZGVfdCBtb2RlOworCisJYXJjaGl2ZV93c3RyaW5nX2VtcHR5KCYoYS0+X3RtcG5hbWVfZGF0YSkpOworCWFyY2hpdmVfd3N0cmNweSgmKGEtPl90bXBuYW1lX2RhdGEpLCBhLT5uYW1lKTsKKwlhcmNoaXZlX3dzdHJjYXQoJihhLT5fdG1wbmFtZV9kYXRhKSwgTCIuWFhYWFhYIik7CisJYS0+dG1wbmFtZSA9IGEtPl90bXBuYW1lX2RhdGEuczsKKworCWZkID0gX19hcmNoaXZlX21rc3RlbXAoYS0+dG1wbmFtZSk7CisKKwltb2RlID0gYS0+bW9kZSAmIDA3NzcgJiB+YS0+dXNlcl91bWFzazsKKwlpZiAobGFfY2htb2QoYS0+dG1wbmFtZSwgbW9kZSkgPT0gLTEpIHsKKwkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJX2Nsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gKGZkKTsKK30KKwogc3RhdGljIHZvaWQgKgogbGFfR2V0RnVuY3Rpb25LZXJuZWwzMihjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNTUxLDggKzU4NiwxMCBAQAogCQlzZXQgPSAxOwogCQlmID0gbGFfR2V0RnVuY3Rpb25LZXJuZWwzMigiQ3JlYXRlSGFyZExpbmtXIik7CiAJfQotCWlmICghZikKKwlpZiAoIWYpIHsKKwkJZXJybm8gPSBFTk9UU1VQOwogCQlyZXR1cm4gKDApOworCX0KIAlyZXQgPSAoKmYpKGxpbmtuYW1lLCB0YXJnZXQsIE5VTEwpOwogCWlmICghcmV0KSB7CiAJCS8qIFVuZGVyIHdpbmRvd3MgMjAwMCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZQpAQCAtNTc3LDYgKzYxNCwxMDMgQEAKIAlyZXR1cm4gKHJldCk7CiB9CiAKKy8qCisgKiBDcmVhdGUgZmlsZSBvciBkaXJlY3Rvcnkgc3ltb2xpYyBsaW5rCisgKgorICogSWYgbGlua3R5cGUgaXMgQUVfU1lNTElOS19UWVBFX1VOREVGSU5FRCAob3IgdW5rbm93biksIGd1ZXNzIGxpbmt0eXBlIGZyb20KKyAqIHRoZSBsaW5rIHRhcmdldAorICovCitzdGF0aWMgaW50CitsYV9DcmVhdGVTeW1ib2xpY0xpbmtXKGNvbnN0IHdjaGFyX3QgKmxpbmtuYW1lLCBjb25zdCB3Y2hhcl90ICp0YXJnZXQsCisgICAgaW50IGxpbmt0eXBlKSB7CisJc3RhdGljIEJPT0xFQU4gKFdJTkFQSSAqZikoTFBDV1NUUiwgTFBDV1NUUiwgRFdPUkQpOworCXN0YXRpYyBpbnQgc2V0OworCXdjaGFyX3QgKnR0YXJnZXQsICpwOworCWludCBsZW47CisJRFdPUkQgYXR0cnMgPSAwOworCURXT1JEIGZsYWdzID0gMDsKKwlEV09SRCBuZXdmbGFncyA9IDA7CisJQk9PTCByZXQgPSAwOworCisJaWYgKCFzZXQpIHsKKwkJc2V0ID0gMTsKKwkJZiA9IGxhX0dldEZ1bmN0aW9uS2VybmVsMzIoIkNyZWF0ZVN5bWJvbGljTGlua1ciKTsKKwl9CisJaWYgKCFmKQorCQlyZXR1cm4gKDApOworCisJbGVuID0gd2NzbGVuKHRhcmdldCk7CisJaWYgKGxlbiA9PSAwKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4oMCk7CisJfQorCS8qCisJICogV2hlbiB3cml0aW5nIHBhdGggdGFyZ2V0cywgd2UgbmVlZCB0byB0cmFuc2xhdGUgc2xhc2hlcworCSAqIHRvIGJhY2tzbGFzaGVzCisJICovCisJdHRhcmdldCA9IG1hbGxvYygobGVuICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworCWlmICh0dGFyZ2V0ID09IE5VTEwpCisJCXJldHVybigwKTsKKworCXAgPSB0dGFyZ2V0OworCisJd2hpbGUoKnRhcmdldCAhPSBMJ1wwJykgeworCQlpZiAoKnRhcmdldCA9PSBMJy8nKQorCQkJKnAgPSBMJ1xcJzsKKwkJZWxzZQorCQkJKnAgPSAqdGFyZ2V0OworCQl0YXJnZXQrKzsKKwkJcCsrOworCX0KKwkqcCA9IEwnXDAnOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIHVuZGVmaW5lZCBzeW1saW5rIHR5cGUgd2UgZ3Vlc3MgaXQgZnJvbSB0aGUgdGFyZ2V0LgorCSAqIElmIHRoZSB0YXJnZXQgZXF1YWxzICIuIiwgIi4uIiwgZW5kcyB3aXRoIGEgYmFja3NsYXNoIG9yIGEKKwkgKiBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgIi4iIG9yICIuLiIgd2UgYXNzdW1lIGl0IGlzIGEgZGlyZWN0b3J5CisJICogc3ltbGluay4gSW4gYWxsIG90aGVyIGNhc2VzIHdlIGFzc3VtZSBhIGZpbGUgc3ltbGluay4KKwkgKi8KKwlpZiAobGlua3R5cGUgIT0gQUVfU1lNTElOS19UWVBFX0ZJTEUgJiYgKAorCQlsaW5rdHlwZSA9PSBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZIHx8CisJCSoocCAtIDEpID09IEwnXFwnIHx8ICgqKHAgLSAxKSA9PSBMJy4nICYmICgKKwkgICAgbGVuID09IDEgfHwgKihwIC0gMikgPT0gTCdcXCcgfHwgKCAqKHAgLSAyKSA9PSBMJy4nICYmICgKKwkgICAgbGVuID09IDIgfHwgKihwIC0gMykgPT0gTCdcXCcpKSkpKSkgeworI2lmIGRlZmluZWQoU1lNQk9MSUNfTElOS19GTEFHX0RJUkVDVE9SWSkKKwkJZmxhZ3MgfD0gU1lNQk9MSUNfTElOS19GTEFHX0RJUkVDVE9SWTsKKyNlbHNlCisJCWZsYWdzIHw9IDB4MTsKKyNlbmRpZgorCX0KKworI2lmIGRlZmluZWQoU1lNQk9MSUNfTElOS19GTEFHX0FMTE9XX1VOUFJJVklMRUdFRF9DUkVBVEUpCisJbmV3ZmxhZ3MgPSBmbGFncyB8IFNZTUJPTElDX0xJTktfRkxBR19BTExPV19VTlBSSVZJTEVHRURfQ1JFQVRFOworI2Vsc2UKKwluZXdmbGFncyA9IGZsYWdzIHwgMHgyOworI2VuZGlmCisKKwkvKgorCSAqIFdpbmRvd3Mgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGxpbmtzCisJICovCisJYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cobGlua25hbWUpOworCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQlkaXNrX3JtZGlyKGxpbmtuYW1lKTsKKwkJZWxzZQorCQkJZGlza191bmxpbmsobGlua25hbWUpOworCX0KKworCXJldCA9ICgqZikobGlua25hbWUsIHR0YXJnZXQsIG5ld2ZsYWdzKTsKKwkvKgorCSAqIFByaW9yIHRvIFdpbmRvd3MgMTAgY2FsbGluZyBDcmVhdGVTeW1ib2xpY0xpbmtXKCkgd2lsbCBmYWlsCisJICogaWYgU1lNQk9MSUNfTElOS19GTEFHX0FMTE9XX1VOUFJJVklMRUdFRF9DUkVBVEUgaXMgc2V0CisJICovCisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gKCpmKShsaW5rbmFtZSwgdHRhcmdldCwgZmxhZ3MpOworCX0KKwlmcmVlKHR0YXJnZXQpOworCXJldHVybiAocmV0KTsKK30KKwogc3RhdGljIGludAogbGFfZnRydW5jYXRlKEhBTkRMRSBoYW5kbGUsIGludDY0X3QgbGVuZ3RoKQogewpAQCAtNjk2LDEwICs4MzAsOCBAQAogCWEtPnBzdCA9IE5VTEw7CiAJYS0+Y3VycmVudF9maXh1cCA9IE5VTEw7CiAJYS0+ZGVmZXJyZWQgPSAwOwotCWlmIChhLT5lbnRyeSkgewotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOwotCQlhLT5lbnRyeSA9IE5VTEw7Ci0JfQorCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7CisJYS0+ZW50cnkgPSBOVUxMOwogCWEtPmVudHJ5ID0gYXJjaGl2ZV9lbnRyeV9jbG9uZShlbnRyeSk7CiAJYS0+ZmggPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAlhLT5mZF9vZmZzZXQgPSAwOwpAQCAtODYwLDkgKzk5MiwxMSBAQAogCX0KIAogCWlmIChhLT5kZWZlcnJlZCAmIFRPRE9fRkZMQUdTKSB7CisJCXVuc2lnbmVkIGxvbmcgc2V0LCBjbGVhcjsKKwogCQlmZSA9IGN1cnJlbnRfZml4dXAoYSwgYXJjaGl2ZV9lbnRyeV9wYXRobmFtZV93KGVudHJ5KSk7Ci0JCWZlLT5maXh1cCB8PSBUT0RPX0ZGTEFHUzsKLQkJLyogVE9ETzogQ29tcGxldGUgdGhpcy4uIGRlZmVyIGZmbGFncyBmcm9tIGJlbG93LiAqLworCQlhcmNoaXZlX2VudHJ5X2ZmbGFncyhlbnRyeSwgJnNldCwgJmNsZWFyKTsKKwkJZmUtPmZmbGFnc19zZXQgPSBzZXQ7CiAJfQogCiAJLyoKQEAgLTExNDMsMTIgKzEyNzcsMjAgQEAKIAlpZiAoYS0+ZmggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKIAkJQ2xvc2VIYW5kbGUoYS0+ZmgpOwogCQlhLT5maCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCQlpZiAoYS0+dG1wbmFtZSkgeworCQkJLyogV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IGF0b21pYyByZW5hbWUgKi8KKwkJCWRpc2tfdW5saW5rKGEtPm5hbWUpOworCQkJaWYgKF93cmVuYW1lKGEtPnRtcG5hbWUsIGEtPm5hbWUpICE9IDApIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCisJCQkJICAgICJyZW5hbWUgZmFpbGVkIik7CisJCQkJcmV0ID0gQVJDSElWRV9GQVRBTDsKKwkJCX0KKwkJCWEtPnRtcG5hbWUgPSBOVUxMOworCQl9CiAJfQogCS8qIElmIHRoZXJlJ3MgYW4gZW50cnksIHdlIGNhbiByZWxlYXNlIGl0IG5vdy4gKi8KLQlpZiAoYS0+ZW50cnkpIHsKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKLQkJYS0+ZW50cnkgPSBOVUxMOwotCX0KKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOworCWEtPmVudHJ5ID0gTlVMTDsKIAlhLT5hcmNoaXZlLnN0YXRlID0gQVJDSElWRV9TVEFURV9IRUFERVI7CiAJcmV0dXJuIChyZXQpOwogfQpAQCAtMTIzOSw3ICsxMzgxLDcgQEAKIH0KIAogc3RhdGljIGludAotZGlza191bmxpbmsod2NoYXJfdCAqcGF0aCkKK2Rpc2tfdW5saW5rKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAJd2NoYXJfdCAqZnVsbG5hbWU7CiAJaW50IHI7CkBAIC0xMjU0LDcgKzEzOTYsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1kaXNrX3JtZGlyKHdjaGFyX3QgKnBhdGgpCitkaXNrX3JtZGlyKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAJd2NoYXJfdCAqZnVsbG5hbWU7CiAJaW50IHI7CkBAIC0xMjg1LDYgKzE0MjcsOCBAQAogCQkgKiBvYmplY3QgaXMgYSBkaXIsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGUgb2xkCiAJCSAqIG9iamVjdCBpc24ndCBhIGRpci4KIAkJICovCisJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpCisJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7CiAJCWlmIChkaXNrX3VubGluayhhLT5uYW1lKSA9PSAwKSB7CiAJCQkvKiBXZSByZW1vdmVkIGl0LCByZXNldCBjYWNoZWQgc3RhdC4gKi8KIAkJCWEtPnBzdCA9IE5VTEw7CkBAIC0xMzU5LDI4ICsxNTAzLDQ1IEBACiAJCWVuID0gY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KGEpOwogCX0gZWxzZSBpZiAoZW4gPT0gRUVYSVNUKSB7CiAJCW1vZGVfdCBzdF9tb2RlOworCQltb2RlX3QgbHN0X21vZGU7CisJCUJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGxzdDsKIAkJLyoKIAkJICogV2Uga25vdyBzb21ldGhpbmcgaXMgaW4gdGhlIHdheSwgYnV0IHdlIGRvbid0IGtub3cgd2hhdDsKIAkJICogd2UgbmVlZCB0byBmaW5kIG91dCBiZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIuCiAJCSAqLwogCQlpbnQgciA9IDA7CisJCWludCBkaXJsbmsgPSAwOworCiAJCS8qCiAJCSAqIFRoZSBTRUNVUkVfU1lNTElOSyBsb2dpYyBoYXMgYWxyZWFkeSByZW1vdmVkIGEKIAkJICogc3ltbGluayB0byBhIGRpciBpZiB0aGUgY2xpZW50IHdhbnRzIHRoYXQuICBTbwogCQkgKiBmb2xsb3cgdGhlIHN5bWxpbmsgaWYgd2UncmUgY3JlYXRpbmcgYSBkaXIuCi0JCSAqLwotCQlpZiAoU19JU0RJUihhLT5tb2RlKSkKLQkJCXIgPSBmaWxlX2luZm9ybWF0aW9uKGEsIGEtPm5hbWUsICZhLT5zdCwgJnN0X21vZGUsIDApOwotCQkvKgogCQkgKiBJZiBpdCdzIG5vdCBhIGRpciAob3IgaXQncyBhIGJyb2tlbiBzeW1saW5rKSwKIAkJICogdGhlbiBkb24ndCBmb2xsb3cgaXQuCisJCSAqCisJCSAqIFdpbmRvd3MgZGlzdGluZ3Vpc2hlcyBmaWxlIGFuZCBkaXJlY3Rvcnkgc3ltbGlua3MuCisJCSAqIEEgZmlsZSBzeW1saW5rIG1heSBlcnJvbmVvdXNseSBwb2ludCB0byBhIGRpcmVjdG9yeQorCQkgKiBhbmQgYSBkaXJlY3Rvcnkgc3ltbGluayB0byBhIGZpbGUuIFdpbmRvd3MgZG9lcyBub3QgZm9sbG93CisJCSAqIHN1Y2ggc3ltbGlua3MuIFdlIGFsd2F5cyBuZWVkIGJvdGggc291cmNlIGFuZCB0YXJnZXQKKwkJICogaW5mb3JtYXRpb24uCiAJCSAqLwotCQlpZiAociAhPSAwIHx8ICFTX0lTRElSKGEtPm1vZGUpKQotCQkJciA9IGZpbGVfaW5mb3JtYXRpb24oYSwgYS0+bmFtZSwgJmEtPnN0LCAmc3RfbW9kZSwgMSk7CisJCXIgPSBmaWxlX2luZm9ybWF0aW9uKGEsIGEtPm5hbWUsICZsc3QsICZsc3RfbW9kZSwgMSk7CiAJCWlmIChyICE9IDApIHsKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKIAkJCSAgICAiQ2FuJ3Qgc3RhdCBleGlzdGluZyBvYmplY3QiKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQl9IGVsc2UgaWYgKFNfSVNMTksobHN0X21vZGUpKSB7CisJCQlpZiAobHN0LmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQkJZGlybG5rID0gMTsKKwkJCS8qIEluIGNhc2Ugb2YgYSBzeW1saW5rIHdlIG5lZWQgdGFyZ2V0IGluZm9ybWF0aW9uICovCisJCQlyID0gZmlsZV9pbmZvcm1hdGlvbihhLCBhLT5uYW1lLCAmYS0+c3QsICZzdF9tb2RlLCAwKTsKKwkJCWlmIChyICE9IDApIHsKKwkJCQlhLT5zdCA9IGxzdDsKKwkJCQlzdF9tb2RlID0gbHN0X21vZGU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhLT5zdCA9IGxzdDsKKwkJCXN0X21vZGUgPSBsc3RfbW9kZTsKIAkJfQogCiAJCS8qCkBAIC0xNDA0LDE3ICsxNTY1LDUwIEBACiAJCX0KIAogCQlpZiAoIVNfSVNESVIoc3RfbW9kZSkpIHsKLQkJCS8qIEEgbm9uLWRpciBpcyBpbiB0aGUgd2F5LCB1bmxpbmsgaXQuICovCi0JCQlpZiAoZGlza191bmxpbmsoYS0+bmFtZSkgIT0gMCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKLQkJCQkgICAgIkNhbid0IHVubGluayBhbHJlYWR5LWV4aXN0aW5nIG9iamVjdCIpOwotCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJaWYgKGEtPmZsYWdzICYKKwkJCSAgICBBUkNISVZFX0VYVFJBQ1RfQ0xFQVJfTk9DSEFOR0VfRkZMQUdTKSB7CisJCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOwogCQkJfQotCQkJYS0+cHN0ID0gTlVMTDsKLQkJCS8qIFRyeSBhZ2Fpbi4gKi8KLQkJCWVuID0gY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KGEpOworCQkJaWYgKChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykgJiYKKwkJCQlTX0lTUkVHKHN0X21vZGUpKSB7CisJCQkJaW50IGZkID0gbGFfbWt0ZW1wKGEpOworCisJCQkJaWYgKGZkID09IC0xKQorCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQlhLT5maCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworCQkJCWlmIChhLT5maCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisKKwkJCQlhLT5wc3QgPSBOVUxMOworCQkJCWVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRpcmxuaykgeworCQkJCQkvKiBFZGdlIGNhc2U6IGRpciBzeW1saW5rIHBvaW50aW5nCisJCQkJCSAqIHRvIGEgZmlsZSAqLworCQkJCQlpZiAoZGlza19ybWRpcihhLT5uYW1lKSAhPSAwKSB7CisJCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJCSAgICBlcnJubywgIkNhbid0IHVubGluayAiCisJCQkJCQkgICAgImRpcmVjdG9yeSBzeW1saW5rIik7CisJCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChkaXNrX3VubGluayhhLT5uYW1lKSAhPSAwKSB7CisJCQkJCQkvKiBBIG5vbi1kaXIgaXMgaW4gdGhlIHdheSwKKwkJCQkJCSAqIHVubGluayBpdC4gKi8KKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIGVycm5vLCAiQ2FuJ3QgdW5saW5rICIKKwkJCQkJCSAgICAiYWxyZWFkeS1leGlzdGluZyBvYmplY3QiKTsKKwkJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJCQl9CisJCQkJfQorCQkJCWEtPnBzdCA9IE5VTEw7CisJCQkJLyogVHJ5IGFnYWluLiAqLworCQkJCWVuID0gY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KGEpOworCQkJfQogCQl9IGVsc2UgaWYgKCFTX0lTRElSKGEtPm1vZGUpKSB7CiAJCQkvKiBBIGRpciBpcyBpbiB0aGUgd2F5IG9mIGEgbm9uLWRpciwgcm1kaXIgaXQuICovCisJCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfQ0xFQVJfTk9DSEFOR0VfRkZMQUdTKQorCQkJCSh2b2lkKWNsZWFyX25vY2hhbmdlX2ZmbGFncyhhKTsKIAkJCWlmIChkaXNrX3JtZGlyKGEtPm5hbWUpICE9IDApIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCiAJCQkJICAgICJDYW4ndCByZW1vdmUgYWxyZWFkeS1leGlzdGluZyBkaXIiKTsKQEAgLTE0NjIsNiArMTY1Niw3IEBACiAJd2NoYXJfdCAqZnVsbG5hbWU7CiAJbW9kZV90IGZpbmFsX21vZGUsIG1vZGU7CiAJaW50IHI7CisJRFdPUkQgYXR0cnMgPSAwOwogCiAJLyogV2UgaWRlbnRpZnkgaGFyZC9zeW1saW5rcyBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgbmFtZXMuICovCiAJLyogU2luY2UgbGluaygyKSBhbmQgc3ltbGluaygyKSBkb24ndCBoYW5kbGUgbW9kZXMsIHdlJ3JlIGRvbmUgaGVyZS4gKi8KQEAgLTE0NzUsNiArMTY3MCwyMCBAQAogCQkJZXJybm8gPSBFSU5WQUw7CiAJCQlyID0gLTE7CiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVW5saW5raW5nIGFuZCBsaW5raW5nIGhlcmUgaXMgcmVhbGx5IG5vdCBhdG9taWMsCisJCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCQkgKiBhbiBta3RlbXBsaW5rKCkgZnVuY3Rpb24sIGFuZCB0aGVuIHVzZSBfd3JlbmFtZSgpLgorCQkJICovCisJCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0FGRV9XUklURVMpIHsKKwkJCQlhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhuYW1lZnVsbCk7CisJCQkJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisJCQkJCWlmIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJCQkJCWRpc2tfcm1kaXIobmFtZWZ1bGwpOworCQkJCQllbHNlCisJCQkJCQlkaXNrX3VubGluayhuYW1lZnVsbCk7CisJCQkJfQorCQkJfQogCQkJciA9IGxhX0NyZWF0ZUhhcmRMaW5rVyhuYW1lZnVsbCwgbGlua2Z1bGwpOwogCQkJaWYgKHIgPT0gMCkgewogCQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CkBAIC0xNTExLDEwICsxNzIwLDMxIEBACiAJfQogCWxpbmtuYW1lID0gYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3coYS0+ZW50cnkpOwogCWlmIChsaW5rbmFtZSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFVubGlua2luZyBhbmQgbGlua2luZyBoZXJlIGlzIHJlYWxseSBub3QgYXRvbWljLAorCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCSAqIGFuIG1rdGVtcGxpbmsoKSBmdW5jdGlvbiwgYW5kIHRoZW4gdXNlIF93cmVuYW1lKCkuCisJCSAqLworCQlhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhhLT5uYW1lKTsKKwkJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisJCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQkJZGlza19ybWRpcihhLT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlkaXNrX3VubGluayhhLT5uYW1lKTsKKwkJfQogI2lmIEhBVkVfU1lNTElOSwogCQlyZXR1cm4gc3ltbGluayhsaW5rbmFtZSwgYS0+bmFtZSkgPyBlcnJubyA6IDA7CiAjZWxzZQotCQlyZXR1cm4gKEVQRVJNKTsKKwkJZXJybm8gPSAwOworCQlyID0gbGFfQ3JlYXRlU3ltYm9saWNMaW5rVygoY29uc3Qgd2NoYXJfdCAqKWEtPm5hbWUsIGxpbmtuYW1lLAorCQkgICAgYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoYS0+ZW50cnkpKTsKKwkJaWYgKHIgPT0gMCkgeworCQkJaWYgKGVycm5vID09IDApCisJCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJCXIgPSBlcnJubzsKKwkJfSBlbHNlCisJCQlyID0gMDsKKwkJcmV0dXJuIChyKTsKICNlbmRpZgogCX0KIApAQCAtMTUzOCw2ICsxNzY4LDcgQEAKIAkJLyogUE9TSVggcmVxdWlyZXMgdGhhdCB3ZSBmYWxsIHRocm91Z2ggaGVyZS4gKi8KIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIEFFX0lGUkVHOgorCQlhLT50bXBuYW1lID0gTlVMTDsKIAkJZnVsbG5hbWUgPSBhLT5uYW1lOwogCQkvKiBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgKi8KIAkJYS0+ZmggPSBDcmVhdGVGaWxlVyhmdWxsbmFtZSwgR0VORVJJQ19XUklURSwgMCwgTlVMTCwKQEAgLTE2NjcsNiArMTg5OCw4IEBACiAJCQlsYV9jaG1vZChwLT5uYW1lLCBwLT5tb2RlKTsKIAkJaWYgKHAtPmZpeHVwICYgVE9ET19BQ0xTKQogCQkJc2V0X2FjbHMoYSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUsIHAtPm5hbWUsICZwLT5hY2wpOworCQlpZiAocC0+Zml4dXAgJiBUT0RPX0ZGTEFHUykKKwkJCXNldF9mZmxhZ3NfcGxhdGZvcm0ocC0+bmFtZSwgcC0+ZmZsYWdzX3NldCwgMCk7CiAJCW5leHQgPSBwLT5uZXh0OwogCQlhcmNoaXZlX2FjbF9jbGVhcigmcC0+YWNsKTsKIAkJZnJlZShwLT5uYW1lKTsKQEAgLTE2OTAsOSArMTkyMyw5IEBACiAJcmV0ID0gX2FyY2hpdmVfd3JpdGVfZGlza19jbG9zZSgmYS0+YXJjaGl2ZSk7CiAJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9ncm91cF9sb29rdXAoJmEtPmFyY2hpdmUsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfdXNlcl9sb29rdXAoJmEtPmFyY2hpdmUsIE5VTEwsIE5VTEwsIE5VTEwpOwotCWlmIChhLT5lbnRyeSkKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOwogCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZhLT5fbmFtZV9kYXRhKTsKKwlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmYS0+X3RtcG5hbWVfZGF0YSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+YXJjaGl2ZS5lcnJvcl9zdHJpbmcpOwogCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZhLT5wYXRoX3NhZmUpOwogCWEtPmFyY2hpdmUubWFnaWMgPSAwOwpAQCAtMTc4NCw2ICsyMDE3LDcgQEAKIAlhLT5maXh1cF9saXN0ID0gZmU7CiAJZmUtPmZpeHVwID0gMDsKIAlmZS0+bmFtZSA9IF93Y3NkdXAocGF0aG5hbWUpOworCWZlLT5mZmxhZ3Nfc2V0ID0gMDsKIAlyZXR1cm4gKGZlKTsKIH0KIApAQCAtMTc5OCw3ICsyMDMyLDYgQEAKIAlyZXR1cm4gKGEtPmN1cnJlbnRfZml4dXApOwogfQogCi0vKiBUT0RPOiBNYWtlIHRoaXMgd29yay4gKi8KIC8qCiAgKiBUT0RPOiBUaGUgZGVlcC1kaXJlY3Rvcnkgc3VwcG9ydCBieXBhc3NlcyB0aGlzOyBkaXNhYmxlIGRlZXAgZGlyZWN0b3J5CiAgKiBzdXBwb3J0IGlmIHdlJ3JlIGRvaW5nIHN5bWxpbmsgY2hlY2tzLgpAQCAtMTgwOCw3ICsyMDQxLDYgQEAKICAqIHNjYW4gdGhlIHBhdGggYW5kIGJvdGggY2FuIGJlIG9wdGltaXplZCBieSBjb21wYXJpbmcgYWdhaW5zdCBvdGhlcgogICogcmVjZW50IHBhdGhzLgogICovCi0vKiBUT0RPOiBFeHRlbmQgdGhpcyB0byBzdXBwb3J0IHN5bWxpbmtzIG9uIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVyLiAqLwogc3RhdGljIGludAogY2hlY2tfc3ltbGlua3Moc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKIHsKQEAgLTE4MjcsNiArMjA1OSw5IEBACiAJcCA9IGEtPnBhdGhfc2FmZS5zOwogCXdoaWxlICgoKnBuICE9ICdcMCcpICYmICgqcCA9PSAqcG4pKQogCQkrK3AsICsrcG47CisJLyogU2tpcCBsZWFkaW5nIGJhY2tzbGFzaGVzICovCisJd2hpbGUgKCpwbiA9PSAnXFwnKQorCQkrK3BuOwogCWMgPSBwblswXTsKIAkvKiBLZWVwIGdvaW5nIHVudGlsIHdlJ3ZlIGNoZWNrZWQgdGhlIGVudGlyZSBuYW1lLiAqLwogCXdoaWxlIChwblswXSAhPSAnXDAnICYmIChwblswXSAhPSAnXFwnIHx8IHBuWzFdICE9ICdcMCcpKSB7CkBAIC0xODQ0LDExICsyMDc5LDIxIEBACiAJCX0gZWxzZSBpZiAoU19JU0xOSyhzdF9tb2RlKSkgewogCQkJaWYgKGMgPT0gJ1wwJykgewogCQkJCS8qCi0JCQkJICogTGFzdCBlbGVtZW50IGlzIHN5bWxpbms7IHJlbW92ZSBpdAotCQkJCSAqIHNvIHdlIGNhbiBvdmVyd3JpdGUgaXQgd2l0aCB0aGUKKwkJCQkgKiBMYXN0IGVsZW1lbnQgaXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBzeW1saW5rLgorCQkJCSAqIFJlbW92ZSBpdCBzbyB3ZSBjYW4gb3ZlcndyaXRlIGl0IHdpdGggdGhlCiAJCQkJICogaXRlbSBiZWluZyBleHRyYWN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKGRpc2tfdW5saW5rKGEtPm5hbWUpKSB7CisJCQkJaWYgKGEtPmZsYWdzICYKKwkJCQkgICAgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykgeworCQkJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7CisJCQkJfQorCQkJCWlmIChzdC5kd0ZpbGVBdHRyaWJ1dGVzICYKKwkJCQkgICAgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSB7CisJCQkJCXIgPSBkaXNrX3JtZGlyKGEtPm5hbWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXIgPSBkaXNrX3VubGluayhhLT5uYW1lKTsKKwkJCQl9CisJCQkJaWYgKHIpIHsKIAkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkJCQkgICAgIkNvdWxkIG5vdCByZW1vdmUgc3ltbGluayAlbHMiLAogCQkJCQkgICAgYS0+bmFtZSk7CkBAIC0xODcyLDcgKzIxMTcsMTcgQEAKIAkJCQlyZXR1cm4gKDApOwogCQkJfSBlbHNlIGlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9VTkxJTkspIHsKIAkJCQkvKiBVc2VyIGFza2VkIHVzIHRvIHJlbW92ZSBwcm9ibGVtcy4gKi8KLQkJCQlpZiAoZGlza191bmxpbmsoYS0+bmFtZSkgIT0gMCkgeworCQkJCWlmIChhLT5mbGFncyAmCisJCQkJICAgIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpIHsKKwkJCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOworCQkJCX0KKwkJCQlpZiAoc3QuZHdGaWxlQXR0cmlidXRlcyAmCisJCQkJICAgIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgeworCQkJCQlyID0gZGlza19ybWRpcihhLT5uYW1lKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyID0gZGlza191bmxpbmsoYS0+bmFtZSk7CisJCQkJfQorCQkJCWlmIChyICE9IDApIHsKIAkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIDAsCiAJCQkJCSAgICAiQ2Fubm90IHJlbW92ZSBpbnRlcnZlbmluZyAiCiAJCQkJCSAgICAic3ltbGluayAlbHMiLCBhLT5uYW1lKTsKQEAgLTE4ODgsNiArMjE0Myw4IEBACiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCQl9CiAJCX0KKwkJcG5bMF0gPSBjOworCQlwbisrOwogCX0KIAlwblswXSA9IGM7CiAJLyogV2UndmUgY2hlY2tlZCBhbmQvb3IgY2xlYW5lZCB0aGUgd2hvbGUgcGF0aCwgc28gcmVtZW1iZXIgaXQuICovCkBAIC0yNDM4LDEwICsyNjk1LDU2IEBACiAJcmV0dXJuIChyKTsKIH0KIAorc3RhdGljIGludCBzZXRfZmZsYWdzX3BsYXRmb3JtKGNvbnN0IHdjaGFyX3QgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmZsYWdzX3NldCwKKyAgICB1bnNpZ25lZCBsb25nIGZmbGFnc19jbGVhcikKK3sKKwlEV09SRCBvbGRmbGFncywgbmV3ZmxhZ3M7CisJd2NoYXJfdCAqZnVsbG5hbWU7CisKKwljb25zdCBEV09SRCBzZXR0YWJsZV9mbGFncyA9CisJICAgIEZJTEVfQVRUUklCVVRFX0FSQ0hJVkUgfAorCSAgICBGSUxFX0FUVFJJQlVURV9ISURERU4gfAorCSAgICBGSUxFX0FUVFJJQlVURV9OT1JNQUwgfAorCSAgICBGSUxFX0FUVFJJQlVURV9OT1RfQ09OVEVOVF9JTkRFWEVEIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfT0ZGTElORSB8CisJICAgIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfU1lTVEVNIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZOworCisJb2xkZmxhZ3MgPSBHZXRGaWxlQXR0cmlidXRlc1cobmFtZSk7CisJaWYgKG9sZGZsYWdzID09IChEV09SRCktMSAmJgorCSAgICBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JTlZBTElEX05BTUUpIHsKKwkJZnVsbG5hbWUgPSBfX2xhX3dpbl9wZXJtaXNzaXZlX25hbWVfdyhuYW1lKTsKKwkJb2xkZmxhZ3MgPSBHZXRGaWxlQXR0cmlidXRlc1coZnVsbG5hbWUpOworCX0KKwlpZiAob2xkZmxhZ3MgPT0gKERXT1JEKS0xKSB7CisJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKKwl9CisJbmV3ZmxhZ3MgPSAoKG9sZGZsYWdzICYgfmZmbGFnc19jbGVhcikgfCBmZmxhZ3Nfc2V0KSAmIHNldHRhYmxlX2ZsYWdzOworCWlmKFNldEZpbGVBdHRyaWJ1dGVzVyhuYW1lLCBuZXdmbGFncykgPT0gMCkKKwkJcmV0dXJuIChBUkNISVZFX1dBUk4pOworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKK3N0YXRpYyBpbnQKK2NsZWFyX25vY2hhbmdlX2ZmbGFncyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQoreworCXJldHVybiAoc2V0X2ZmbGFnc19wbGF0Zm9ybShhLT5uYW1lLCAwLCBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpOworfQorCiBzdGF0aWMgaW50CiBzZXRfZmZsYWdzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCiB7Ci0JKHZvaWQpYTsgLyogVU5VU0VEICovCisJdW5zaWduZWQgbG9uZwlzZXQsIGNsZWFyOworCisJaWYgKGEtPnRvZG8gJiBUT0RPX0ZGTEFHUykgeworCQlhcmNoaXZlX2VudHJ5X2ZmbGFncyhhLT5lbnRyeSwgJnNldCwgJmNsZWFyKTsKKwkJaWYgKHNldCA9PSAwICAmJiBjbGVhciA9PSAwKQorCQkJcmV0dXJuIChBUkNISVZFX09LKTsKKwkJcmV0dXJuIChzZXRfZmZsYWdzX3BsYXRmb3JtKGEtPm5hbWUsIHNldCwgY2xlYXIpKTsKKworICAgICAgICB9CiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmlsdGVyLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maWx0ZXIuMwppbmRleCBkNmZhMDcxLi5jODNlYjc3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maWx0ZXIuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maWx0ZXIuMwpAQCAtNDMsNyArNDMsNyBAQAogLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9wcm9ncmFtICwKIC5ObSBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfdXVlbmNvZGUgLAogLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl94eiAsCi0uTm0gYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQgLAorLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl96c3RkCiAuTmQgZnVuY3Rpb25zIGVuYWJsaW5nIG91dHB1dCBmaWx0ZXJzCiAuU2ggTElCUkFSWQogU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQpAQCAtMTI1LDEwICsxMjUsMTAgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5LjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkuMwppbmRleCBkYzFiOTRiLi41Nzk3ZTE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkuMwpAQCAtNzEsOSArNzEsOSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Zvcm1hdC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZm9ybWF0LjMKaW5kZXggYWFhZmIwYS4uNDdhNzQwMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZm9ybWF0LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZm9ybWF0LjMKQEAgLTUyLDcgKzUyLDcgQEAKIC5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdjd0YXIgLAogLk5tIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjICwKIC5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfeGFyICwKLS5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwICwKKy5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwCiAuTmQgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBhcmNoaXZlcwogLlNoIExJQlJBUlkKIFN0cmVhbWluZyBBcmNoaXZlIExpYnJhcnkgKGxpYmFyY2hpdmUsIC1sYXJjaGl2ZSkKQEAgLTE2Niw5ICsxNjYsOSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIGxpYmFyY2hpdmUtZm9ybWF0cyA1ICwKIC5YciBtdHJlZSA1ICwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZyZWUuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZyZWUuMwppbmRleCAxYjJkMDcxLi41MjEwZTJhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9mcmVlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZnJlZS4zCkBAIC01Niw3ICs1Niw3IEBACiB0byByZWxlYXNlIHRoZSByZXNvdXJjZXMuCiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHJlY292ZXJ5IHdoZW4gdGhlIGFyY2hpdmUgY3JlYXRpb24KIG11c3QgYmUgYWJvcnRlZC4KLU5vdGUgdGhhdCB0aGUgY3JlYXRlZCBhcmNoaXZlIGlzIGxpa2VseSB0byBiZSBtYWxmb3JtZWQgaW4gdGhpcyBjYXNlOyAKK05vdGUgdGhhdCB0aGUgY3JlYXRlZCBhcmNoaXZlIGlzIGxpa2VseSB0byBiZSBtYWxmb3JtZWQgaW4gdGhpcyBjYXNlOwogLkl0IEZuIGFyY2hpdmVfd3JpdGVfY2xvc2UKIENvbXBsZXRlIHRoZSBhcmNoaXZlIGFuZCBpbnZva2UgdGhlIGNsb3NlIGNhbGxiYWNrLgogLkl0IEZuIGFyY2hpdmVfd3JpdGVfZmluaXNoCkBAIC04OSw4ICs4OSw4IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9oZWFkZXIuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2hlYWRlci4zCmluZGV4IDRkZTU4ZjMuLjIyMTdiMTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2hlYWRlci4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2hlYWRlci4zCkBAIC02Niw4ICs2Niw4IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9uZXcuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX25ldy4zCmluZGV4IGYwNWQyNjkuLjc4OGNiYjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX25ldy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX25ldy4zCkBAIC01MCw5ICs1MCw5IEBACiAuXCIgLlNoIEVSUk9SUwogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfb3Blbi4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfb3Blbi4zCmluZGV4IDQ1Nzg3M2UuLjAxMjlkMTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX29wZW4uMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9vcGVuLjMKQEAgLTIwMCw3ICsyMDAsNyBAQAogLkZuIGFyY2hpdmVfc2V0X2Vycm9yCiB0byByZWdpc3RlciBhbiBlcnJvciBjb2RlIGFuZCBtZXNzYWdlIGFuZAogcmV0dXJuCi0uQ20gQVJDSElWRV9GQVRBTC4KKy5DbSBBUkNISVZFX0ZBVEFMIC4KIC5QcAogTm90ZSB0aGF0IGlmIHRoZSBjbGllbnQtcHJvdmlkZWQgd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb24KIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhhdCBlcnJvciB3aWxsIGJlIHByb3BhZ2F0ZWQgYmFjayB0byB0aGUgY2FsbGVyCkBAIC0yMzQsMTMgKzIzNCwxMyBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfYmxvY2tzaXplIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfbmV3IDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgKaW5kZXggMGRmZDFiMS4uMjdjYmEwMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3ByaXZhdGUuaApAQCAtMjUsMTkgKzI1LDI0IEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCAyMDExNTUgMjAwOS0xMi0yOSAwNToyMDoxMloga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9XUklURV9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9XUklURV9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1QKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1dSSVRFX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX1dSSVRFX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAKKyNkZWZpbmUJQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfTkVXCQkxVQorI2RlZmluZQlBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9PUEVOCQkyVQorI2RlZmluZQlBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9DTE9TRUQJNFUKKyNkZWZpbmUJQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfRkFUQUwJMHg4MDAwVQorCiBzdHJ1Y3QgYXJjaGl2ZV93cml0ZTsKIAogc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyIHsKQEAgLTU1LDYgKzYwLDcgQEAKIAlpbnQJICBjb2RlOwogCWludAkgIGJ5dGVzX3Blcl9ibG9jazsKIAlpbnQJICBieXRlc19pbl9sYXN0X2Jsb2NrOworCWludAkgIHN0YXRlOwogfTsKIAogI2lmIEFSQ0hJVkVfVkVSU0lPTiA8IDQwMDAwMDAKQEAgLTY2LDggKzcyLDYgQEAKIGludCBfX2FyY2hpdmVfd3JpdGVfb3V0cHV0KHN0cnVjdCBhcmNoaXZlX3dyaXRlICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIGludCBfX2FyY2hpdmVfd3JpdGVfbnVsbHMoc3RydWN0IGFyY2hpdmVfd3JpdGUgKiwgc2l6ZV90KTsKIGludCBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7Ci1pbnQgX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqKTsKLWludCBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqKTsKIAogc3RydWN0IGFyY2hpdmVfd3JpdGUgewogCXN0cnVjdCBhcmNoaXZlCWFyY2hpdmU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0LmMKaW5kZXggMGY3MDYyMy4uMTJkZTA4MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXQuYwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIC8qIEEgdGFibGUgdGhhdCBtYXBzIGZvcm1hdCBjb2RlcyB0byBmdW5jdGlvbnMuICovCiBzdGF0aWMgY29uc3QKQEAgLTc2LDMgKzc3LDQ3IEBACiAJYXJjaGl2ZV9zZXRfZXJyb3IoYSwgRUlOVkFMLCAiTm8gc3VjaCBmb3JtYXQiKTsKIAlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogfQorCit2b2lkCitfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoc3RydWN0IGFyY2hpdmUgKmEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpmb3JtYXQpCit7CisJY2hhciAqbmFtZSA9IE5VTEw7CisKKwlzd2l0Y2ggKGFyY2hpdmVfZW50cnlfZmlsZXR5cGUoZW50cnkpKSB7CisJLyoKKwkgKiBBbGwgZm9ybWF0cyBzaG91bGQgYmUgYWJsZSB0byBhcmNoaXZlIHJlZ3VsYXIgZmlsZXMgKEFFX0lGUkVHKQorCSAqLworCWNhc2UgQUVfSUZESVI6CisJCW5hbWUgPSAiZGlyZWN0b3JpZXMiOworCQlicmVhazsKKwljYXNlIEFFX0lGTE5LOgorCQluYW1lID0gInN5bWJvbGljIGxpbmtzIjsKKwkJYnJlYWs7CisJY2FzZSBBRV9JRkNIUjoKKwkJbmFtZSA9ICJjaGFyYWN0ZXIgZGV2aWNlcyI7CisJCWJyZWFrOworCWNhc2UgQUVfSUZCTEs6CisJCW5hbWUgPSAiYmxvY2sgZGV2aWNlcyI7CisJCWJyZWFrOworCWNhc2UgQUVfSUZJRk86CisJCW5hbWUgPSAibmFtZWQgcGlwZXMiOworCQlicmVhazsKKwljYXNlIEFFX0lGU09DSzoKKwkJbmFtZSA9ICJzb2NrZXRzIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKG5hbWUgIT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcihhLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIiVzOiAlcyBmb3JtYXQgY2Fubm90IGFyY2hpdmUgJXMiLAorCQkgICAgYXJjaGl2ZV9lbnRyeV9wYXRobmFtZShlbnRyeSksIGZvcm1hdCwgbmFtZSk7CisJfSBlbHNlIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoYSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICIlczogJXMgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIGZpbGVzIHdpdGggbW9kZSAwJWxvIiwKKwkJICAgIGFyY2hpdmVfZW50cnlfcGF0aG5hbWUoZW50cnkpLCBmb3JtYXQsCisJCSAgICAodW5zaWduZWQgbG9uZylhcmNoaXZlX2VudHJ5X21vZGUoZW50cnkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0Xzd6aXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfN3ppcC5jCmluZGV4IDJiZDRlYzQuLmNlOTZmMmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfN3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfN3ppcC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9yYi5oIgogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogLyoKICAqIENvZGVjIElECkBAIC0xNjQsNyArMTY1LDcgQEAKIAltb2RlX3QJCQkgbW9kZTsKIAl1aW50MzJfdAkJIGNyYzMyOwogCi0JaW50CQkJIGRpcjoxOworCXNpZ25lZCBpbnQJCSBkaXI6MTsKIH07CiAKIHN0cnVjdCBfN3ppcCB7CkBAIC00MzksNyArNDQwLDggQEAKIAogCXIgPSBmaWxlX25ldyhhLCBlbnRyeSwgJmZpbGUpOwogCWlmIChyIDwgQVJDSElWRV9XQVJOKSB7Ci0JCWZpbGVfZnJlZShmaWxlKTsKKwkJaWYgKGZpbGUgIT0gTlVMTCkKKwkJCWZpbGVfZnJlZShmaWxlKTsKIAkJcmV0dXJuIChyKTsKIAl9CiAJaWYgKGZpbGUtPnNpemUgPT0gMCAmJiBmaWxlLT5kaXIpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfYXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfYXIuYwppbmRleCA1MDMwNWNjLi5mYzBkZTFlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2FyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9hci5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0cnVjdCBhcl93IHsKIAl1aW50NjRfdAkgZW50cnlfYnl0ZXNfcmVtYWluaW5nOwpAQCAtMTg3LDYgKzE4OCwxMSBAQAogCQlidWZmW0FSX25hbWVfb2Zmc2V0XSA9ICcvJzsKIAkJZ290byBzdGF0OwogCX0KKwlpZiAoc3RyY21wKHBhdGhuYW1lLCAiL1NZTTY0LyIpID09IDApIHsKKwkJLyogRW50cnkgaXMgYXJjaGl2ZSBzeW1ib2wgdGFibGUgaW4gR05VIDY0LWJpdCBmb3JtYXQgKi8KKwkJbWVtY3B5KGJ1ZmYgKyBBUl9uYW1lX29mZnNldCwgIi9TWU02NC8iLCA3KTsKKwkJZ290byBzdGF0OworCX0KIAlpZiAoc3RyY21wKHBhdGhuYW1lLCAiX18uU1lNREVGIikgPT0gMCkgewogCQkvKiBFbnRyeSBpcyBhcmNoaXZlIHN5bWJvbCB0YWJsZSBpbiBCU0QgZm9ybWF0ICovCiAJCW1lbWNweShidWZmICsgQVJfbmFtZV9vZmZzZXQsICJfXy5TWU1ERUYiLCA5KTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpby5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvLmMKaW5kZXggYTRjOWQxZS4uNzI5ZjljNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0YXRpYyBzc2l6ZV90CWFyY2hpdmVfd3JpdGVfY3Bpb19kYXRhKHN0cnVjdCBhcmNoaXZlX3dyaXRlICosCiAJCSAgICBjb25zdCB2b2lkICpidWZmLCBzaXplX3Qgcyk7CkBAIC00MDgsOCArNDA5LDcgQEAKIAkJfQogCX0KIGV4aXRfd3JpdGVfaGVhZGVyOgotCWlmIChlbnRyeV9tYWluKQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCXJldHVybiAocmV0X2ZpbmFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvX25ld2MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpb19uZXdjLmMKaW5kZXggOTU3ZjFhMy4uMTcyZmRhNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvX25ld2MuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW9fbmV3Yy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdGF0aWMgc3NpemVfdAlhcmNoaXZlX3dyaXRlX25ld2NfZGF0YShzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqLAogCQkgICAgY29uc3Qgdm9pZCAqYnVmZiwgc2l6ZV90IHMpOwpAQCAtMzY2LDggKzM2Nyw3IEBACiAJCX0KIAl9CiBleGl0X3dyaXRlX2hlYWRlcjoKLQlpZiAoZW50cnlfbWFpbikKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAlyZXR1cm4gKHJldF9maW5hbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfZ251dGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2dudXRhci5jCmluZGV4IDJkODU4YzkuLmVjMjljNWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfZ251dGFyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9nbnV0YXIuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfbG9jYWxlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IGdudXRhciB7CiAJdWludDY0X3QJZW50cnlfYnl0ZXNfcmVtYWluaW5nOwpAQCAtMzM5LDcgKzM0MCw3IEBACiAJCSAqIGNhc2UgZ2V0dGluZyBXQ1MgZmFpbGVkLiBPbiBQT1NJWCwgdGhpcyBpcyBhCiAJCSAqIG5vcm1hbCBvcGVyYXRpb24uCiAJCSAqLwotCQlpZiAocCAhPSBOVUxMICYmIHBbc3RybGVuKHApIC0gMV0gIT0gJy8nKSB7CisJCWlmIChwICE9IE5VTEwgJiYgcFswXSAhPSAnXDAnICYmIHBbc3RybGVuKHApIC0gMV0gIT0gJy8nKSB7CiAJCQlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgYXM7CiAKIAkJCWFyY2hpdmVfc3RyaW5nX2luaXQoJmFzKTsKQEAgLTUzNCwxNyArNTM1LDkgQEAKIAkJY2FzZSBBRV9JRkJMSzogdGFydHlwZSA9ICc0JyA7IGJyZWFrOwogCQljYXNlIEFFX0lGRElSOiB0YXJ0eXBlID0gJzUnIDsgYnJlYWs7CiAJCWNhc2UgQUVfSUZJRk86IHRhcnR5cGUgPSAnNicgOyBicmVhazsKLQkJY2FzZSBBRV9JRlNPQ0s6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHNvY2tldCIpOwotCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7Ci0JCQlnb3RvIGV4aXRfd3JpdGVfaGVhZGVyOwotCQlkZWZhdWx0OgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSB0aGlzIChtb2RlPTAlbG8pIiwKLQkJCSAgICAodW5zaWduZWQgbG9uZylhcmNoaXZlX2VudHJ5X21vZGUoZW50cnkpKTsKKwkJZGVmYXVsdDogLyogQUVfSUZTT0NLIGFuZCB1bmtub3duICovCisJCQlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmEtPmFyY2hpdmUsIGVudHJ5LCAiZ251dGFyIik7CiAJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKIAkJCWdvdG8gZXhpdF93cml0ZV9oZWFkZXI7CiAJCX0KQEAgLTU2NSw4ICs1NTgsNyBAQAogCWdudXRhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nID0gYXJjaGl2ZV9lbnRyeV9zaXplKGVudHJ5KTsKIAlnbnV0YXItPmVudHJ5X3BhZGRpbmcgPSAweDFmZiAmICgtKGludDY0X3QpZ251dGFyLT5lbnRyeV9ieXRlc19yZW1haW5pbmcpOwogZXhpdF93cml0ZV9oZWFkZXI6Ci0JaWYgKGVudHJ5X21haW4pCi0JCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJcmV0dXJuIChyZXQpOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2lzbzk2NjAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfaXNvOTY2MC5jCmluZGV4IDRhZGY2OGUuLjU2NGQ0ZDcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfaXNvOTY2MC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfaXNvOTY2MC5jCkBAIC0yODksMTIgKzI4OSwxMiBAQAogCQlzdHJ1Y3QgZXh0cl9yZWMJKmN1cnJlbnQ7CiAJfQkJCSBleHRyX3JlY19saXN0OwogCi0JaW50CQkJIHZpcnR1YWw6MTsKKwlzaWduZWQgaW50CQkgdmlydHVhbDoxOwogCS8qIElmIHNldCB0byBvbmUsIHRoaXMgZmlsZSB0eXBlIGlzIGEgZGlyZWN0b3J5LgogCSAqIEEgY29udmVuaWVuY2UgZmxhZyB0byBiZSB1c2VkIGFzCiAJICogImFyY2hpdmVfZW50cnlfZmlsZXR5cGUoaXNvZW50LT5maWxlLT5lbnRyeSkgPT0gQUVfSUZESVIiLgogCSAqLwotCWludAkJCSBkaXI6MTsKKwlzaWduZWQgaW50CQkgZGlyOjE7CiB9OwogCiBzdHJ1Y3QgaGFyZGxpbmsgewpAQCAtNzU1LDkgKzc1NSw5IEBACiAKIAkvKiBVc2VkIGZvciBtYWtpbmcgemlzb2ZzLiAqLwogCXN0cnVjdCB7Ci0JCWludAkJIGRldGVjdF9tYWdpYzoxOwotCQlpbnQJCSBtYWtpbmc6MTsKLQkJaW50CQkgYWxsemVybzoxOworCQlzaWduZWQgaW50CSBkZXRlY3RfbWFnaWM6MTsKKwkJc2lnbmVkIGludAkgbWFraW5nOjE7CisJCXNpZ25lZCBpbnQJIGFsbHplcm86MTsKIAkJdW5zaWduZWQgY2hhcgkgbWFnaWNfYnVmZmVyWzY0XTsKIAkJaW50CQkgbWFnaWNfY250OwogCkBAIC0zNjUwLDcgKzM2NTAsNyBAQAogCWlmIChzaXplID4gaXNvOTY2MC0+d2J1ZmZfcmVtYWluaW5nIHx8CiAJICAgIGlzbzk2NjAtPndidWZmX3JlbWFpbmluZyA9PSAwKSB7CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCSAgICAiSW50ZXJuYWwgUHJvZ3JhbWluZyBlcnJvcjogaXNvOTY2MDp3Yl9jb25zdW1lKCkiCisJCSAgICAiSW50ZXJuYWwgUHJvZ3JhbW1pbmcgZXJyb3I6IGlzbzk2NjA6d2JfY29uc3VtZSgpIgogCQkgICAgIiBzaXplPSVqZCwgd2J1ZmZfcmVtYWluaW5nPSVqZCIsCiAJCSAgICAoaW50bWF4X3Qpc2l6ZSwgKGludG1heF90KWlzbzk2NjAtPndidWZmX3JlbWFpbmluZyk7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CkBAIC0zNjcxLDcgKzM2NzEsNyBAQAogCiAJaWYgKGlzbzk2NjAtPndidWZmX3R5cGUgIT0gV0JfVE9fVEVNUCkgewogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkgICAgIkludGVybmFsIFByb2dyYW1pbmcgZXJyb3I6IGlzbzk2NjA6d2Jfc2V0X29mZnNldCgpIik7CisJCSAgICAiSW50ZXJuYWwgUHJvZ3JhbW1pbmcgZXJyb3I6IGlzbzk2NjA6d2Jfc2V0X29mZnNldCgpIik7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJfQogCkBAIC00ODk5LDEwICs0ODk5LDEwIEBACiAJCWlmIChwWzBdID09ICcvJykgewogCQkJaWYgKHBbMV0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8vJyAtLT4gJy8nICovCi0JCQkJc3RyY3B5KHAsIHArMSk7CisJCQkJbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpICsgMSk7CiAJCQllbHNlIGlmIChwWzFdID09ICcuJyAmJiBwWzJdID09ICcvJykKIAkJCQkvKiBDb252ZXJ0ICcvLi8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsyKTsKKwkJCQltZW1tb3ZlKHAsIHArMiwgc3RybGVuKHArMikgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy4nICYmIHBbM10gPT0gJy8nKSB7CiAJCQkJLyogQ29udmVydCAnZGlyL2RpcjEvLi4vZGlyMi8nCiAJCQkJICogICAgIC0tPiAnZGlyL2RpcjIvJwpAQCAtNTA5NCwxMyArNTA5NCwxMSBAQAogc3RhdGljIHZvaWQKIGlzb2ZpbGVfZnJlZV9oYXJkbGlua3Moc3RydWN0IGlzbzk2NjAgKmlzbzk2NjApCiB7Ci0Jc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqbiwgKm5leHQ7CisJc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqbiwgKnRtcDsKIAotCWZvciAobiA9IEFSQ0hJVkVfUkJfVFJFRV9NSU4oJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpKTsgbjspIHsKLQkJbmV4dCA9IF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpLAotCQkgICAgbiwgQVJDSElWRV9SQl9ESVJfUklHSFQpOworCUFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIX1NBRkUobiwgJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpLCB0bXApIHsKKwkJX19hcmNoaXZlX3JiX3RyZWVfcmVtb3ZlX25vZGUoJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpLCBuKTsKIAkJZnJlZShuKTsKLQkJbiA9IG5leHQ7CiAJfQogfQogCkBAIC03ODAxLDggKzc3OTksOCBAQAogCXVpbnQ2NF90CSBwel91bmNvbXByZXNzZWRfc2l6ZTsKIAlzaXplX3QJCSB1bmNvbXByZXNzZWRfYnVmZmVyX3NpemU7CiAKLQlpbnQJCSBpbml0aWFsaXplZDoxOwotCWludAkJIGhlYWRlcl9wYXNzZWQ6MTsKKwlzaWduZWQgaW50CSBpbml0aWFsaXplZDoxOworCXNpZ25lZCBpbnQJIGhlYWRlcl9wYXNzZWQ6MTsKIAogCXVpbnQzMl90CSBwel9vZmZzZXQ7CiAJdW5zaWduZWQgY2hhcgkqYmxvY2tfcG9pbnRlcnM7CkBAIC04MTI4LDcgKzgxMjYsNyBAQAogewogCSh2b2lkKWJ1ZmY7IC8qIFVOVVNFRCAqLwogCSh2b2lkKXM7IC8qIFVOVVNFRCAqLwotCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsICJQcm9ncmFtaW5nIGVycm9yIik7CisJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywgIlByb2dyYW1taW5nIGVycm9yIik7CiAJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9tdHJlZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9tdHJlZS5jCmluZGV4IDQ5M2Q0NzMuLmFhNDFlOWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfbXRyZWUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X210cmVlLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogI2VuZGlmCiAJLyogS2V5d29yZCBvcHRpb25zICovCiAJaW50IGtleXM7Ci0jZGVmaW5lCUZfQ0tTVU0JCTB4MDAwMDAwMDEJCS8qIGNoZWNrIHN1bSAqLworI2RlZmluZQlGX0NLU1VNCQkweDAwMDAwMDAxCQkvKiBjaGVja3N1bSAqLwogI2RlZmluZQlGX0RFVgkJMHgwMDAwMDAwMgkJLyogZGV2aWNlIHR5cGUgKi8KICNkZWZpbmUJRl9ET05FCQkweDAwMDAwMDA0CQkvKiBkaXJlY3RvcnkgZG9uZSAqLwogI2RlZmluZQlGX0ZMQUdTCQkweDAwMDAwMDA4CQkvKiBmaWxlIGZsYWdzICovCkBAIC0zNzEsNyArMzcxLDcgQEAKIH0KIAogLyoKLSAqIEluZGVudCBhIGxpbmUgYXMgbXRyZWUgdXRpbGl0eSB0byBiZSByZWFkYWJsZSBmb3IgcGVvcGxlLgorICogSW5kZW50IGEgbGluZSBhcyB0aGUgbXRyZWUgdXRpbGl0eSBkb2VzIHNvIGl0IGlzIHJlYWRhYmxlIGZvciBwZW9wbGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBtdHJlZV9pbmRlbnQoc3RydWN0IG10cmVlX3dyaXRlciAqbXRyZWUpCkBAIC00NDYsOCArNDQ2LDggQEAKIAogLyoKICAqIFdyaXRlIC9zZXQga2V5d29yZC4KLSAqIFNldCBtb3N0IHVzZWQgdmFsdWUgb2YgdWlkLGdpZCxtb2RlIGFuZCBmZmxhZ3MsIHdoaWNoIGFyZQotICogY29sbGVjdGVkIGJ5IGF0dHJfY291bnRlcl9zZXRfY29sbGVjdCgpIGZ1bmN0aW9uLgorICogU2V0IHRoZSBtb3N0IHVzZWQgdmFsdWUgb2YgdWlkLCBnaWQsIG1vZGUgYW5kIGZmbGFncywgd2hpY2ggYXJlCisgKiBjb2xsZWN0ZWQgYnkgdGhlIGF0dHJfY291bnRlcl9zZXRfY29sbGVjdCgpIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZAogd3JpdGVfZ2xvYmFsKHN0cnVjdCBtdHJlZV93cml0ZXIgKm10cmVlKQpAQCAtNjQ5LDcgKzY0OSw3IEBACiB9CiAKIC8qCi0gKiBUYWJ1bGF0ZSB1aWQsZ2lkLG1vZGUgYW5kIGZmbGFncyBvZiBhIGVudHJ5IGluIG9yZGVyIHRvIGJlIHVzZWQgZm9yIC9zZXQuCisgKiBUYWJ1bGF0ZSB1aWQsIGdpZCwgbW9kZSBhbmQgZmZsYWdzIG9mIGEgZW50cnkgaW4gb3JkZXIgdG8gYmUgdXNlZCBmb3IgL3NldC4KICAqLwogc3RhdGljIGludAogYXR0cl9jb3VudGVyX3NldF9jb2xsZWN0KHN0cnVjdCBtdHJlZV93cml0ZXIgKm10cmVlLCBzdHJ1Y3QgbXRyZWVfZW50cnkgKm1lKQpAQCAtOTEyLDcgKzkxMiw3IEBACiAKIAkvKiBJZiB0aGUgY3VycmVudCBmaWxlIGlzIGEgcmVndWxhciBmaWxlLCB3ZSBoYXZlIHRvCiAJICogY29tcHV0ZSB0aGUgc3VtIG9mIGl0cyBjb250ZW50LgotCSAqIEluaXRpYWxpemUgYSBidW5jaCBvZiBzdW0gY2hlY2sgY29udGV4dC4gKi8KKwkgKiBJbml0aWFsaXplIGEgYnVuY2ggb2YgY2hlY2tzdW0gY29udGV4dC4gKi8KIAlpZiAobXRyZWVfZW50cnktPnJlZ19pbmZvKQogCQlzdW1faW5pdChtdHJlZSk7CiAKQEAgLTEyNjUsNyArMTI2NSw3IEBACiAJaWYgKG10cmVlID09IE5VTEwpCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgZG90IG5vdCBsZWF2ZSBhbnkgZW50cmllcy4gKi8KKwkvKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYXZlIGFueSBlbnRyaWVzLiAqLwogCW10cmVlX2VudHJ5X3JlZ2lzdGVyX2ZyZWUobXRyZWUpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJm10cmVlLT5jdXJfZGlyc3RyKTsKIAlhcmNoaXZlX3N0cmluZ19mcmVlKCZtdHJlZS0+ZWJ1Zik7CkBAIC0xODEwLDEwICsxODEwLDEwIEBACiAJCWlmIChwWzBdID09ICcvJykgewogCQkJaWYgKHBbMV0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8vJyAtLT4gJy8nICovCi0JCQkJc3RyY3B5KHAsIHArMSk7CisJCQkJbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpICsgMSk7CiAJCQllbHNlIGlmIChwWzFdID09ICcuJyAmJiBwWzJdID09ICcvJykKIAkJCQkvKiBDb252ZXJ0ICcvLi8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsyKTsKKwkJCQltZW1tb3ZlKHAsIHArMiwgc3RybGVuKHArMikgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy4nICYmIHBbM10gPT0gJy8nKSB7CiAJCQkJLyogQ29udmVydCAnZGlyL2RpcjEvLi4vZGlyMi8nCiAJCQkJICogICAgIC0tPiAnZGlyL2RpcjIvJwpAQCAtMjAyNCw3ICsyMDI0LDcgQEAKIAogCWlmIChmaWxlLT5wYXJlbnRkaXIubGVuZ3RoID09IDApIHsKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLQkJICAgICJJbnRlcm5hbCBwcm9ncmFtaW5nIGVycm9yICIKKwkJICAgICJJbnRlcm5hbCBwcm9ncmFtbWluZyBlcnJvciAiCiAJCSAgICAiaW4gZ2VuZXJhdGluZyBjYW5vbmljYWwgbmFtZSBmb3IgJXMiLAogCQkgICAgZmlsZS0+cGF0aG5hbWUucyk7CiAJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wYXguYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcGF4LmMKaW5kZXggM2NlYmVhZS4uYTJiMjcxMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wYXguYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3BheC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3Qgc3BhcnNlX2Jsb2NrIHsKIAlzdHJ1Y3Qgc3BhcnNlX2Jsb2NrCSpuZXh0OwpAQCAtMTk5LDYgKzIwMCwyOCBAQAogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKIAkJCSAgICAicGF4OiBpbnZhbGlkIGNoYXJzZXQgbmFtZSIpOwogCQlyZXR1cm4gKHJldCk7CisJfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAieGF0dHJoZWFkZXIiKSA9PSAwKSB7CisJCWlmICh2YWwgPT0gTlVMTCB8fCB2YWxbMF0gPT0gMCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAicGF4OiB4YXR0cmhlYWRlciByZXF1aXJlcyBhIHZhbHVlIik7CisJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgIkFMTCIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh2YWwsICJhbGwiKSA9PSAwKSB7CisJCQlwYXgtPmZsYWdzIHw9IFdSSVRFX0xJQkFSQ0hJVkVfWEFUVFIgfCBXUklURV9TQ0hJTFlfWEFUVFI7CisJCQlyZXQgPSBBUkNISVZFX09LOworCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICJTQ0hJTFkiKSA9PSAwIHx8CisJCSAgICBzdHJjbXAodmFsLCAic2NoaWx5IikgPT0gMCkgeworCQkJcGF4LT5mbGFncyB8PSBXUklURV9TQ0hJTFlfWEFUVFI7CisJCQlwYXgtPmZsYWdzICY9IH5XUklURV9MSUJBUkNISVZFX1hBVFRSOworCQkJcmV0ID0gQVJDSElWRV9PSzsKKwkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAiTElCQVJDSElWRSIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh2YWwsICJsaWJhcmNoaXZlIikgPT0gMCkgeworCQkJcGF4LT5mbGFncyB8PSBXUklURV9MSUJBUkNISVZFX1hBVFRSOworCQkJcGF4LT5mbGFncyAmPSB+V1JJVEVfU0NISUxZX1hBVFRSOworCQkJcmV0ID0gQVJDSElWRV9PSzsKKwkJfSBlbHNlCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJwYXg6IGludmFsaWQgeGF0dHIgaGVhZGVyIG5hbWUiKTsKKwkJcmV0dXJuIChyZXQpOwogCX0KIAogCS8qIE5vdGU6IFRoZSAid2FybiIgcmV0dXJuIGlzIGp1c3QgdG8gaW5mb3JtIHRoZSBvcHRpb25zCkBAIC01MjIsMTEgKzU0NSwxMyBAQAogCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwgIiVzICVzICVzIiwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgIiwgYXR0ciwgIiB0byBVVEYtOCIpOwogCQlyZXR1cm4oQVJDSElWRV9XQVJOKTsKLQl9IGVsc2UgaWYgKCpwICE9ICdcMCcpIHsKKwl9CisKKwlpZiAoKnAgIT0gJ1wwJykgewogCQlhZGRfcGF4X2F0dHIoJihwYXgtPnBheF9oZWFkZXIpLAogCQkgICAgYXR0ciwgcCk7Ci0JCWZyZWUocCk7CiAJfQorCWZyZWUocCk7CiAJcmV0dXJuKEFSQ0hJVkVfT0spOwogfQogCkBAIC02NjAsNyArNjg1LDcgQEAKIAkJCSAqIGNhc2UgZ2V0dGluZyBXQ1MgZmFpbGVkLiBPbiBQT1NJWCwgdGhpcyBpcyBhCiAJCQkgKiBub3JtYWwgb3BlcmF0aW9uLgogCQkJICovCi0JCQlpZiAocCAhPSBOVUxMICYmIHBbc3RybGVuKHApIC0gMV0gIT0gJy8nKSB7CisJCQlpZiAocCAhPSBOVUxMICYmIHBbMF0gIT0gJ1wwJyAmJiBwW3N0cmxlbihwKSAtIDFdICE9ICcvJykgewogCQkJCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBhczsKIAogCQkJCWFyY2hpdmVfc3RyaW5nX2luaXQoJmFzKTsKQEAgLTY4OSwxNyArNzE0LDkgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JCWNhc2UgQUVfSUZTT0NLOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBzb2NrZXQiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQlkZWZhdWx0OgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSB0aGlzICh0eXBlPTAlbG8pIiwKLQkJCSAgICAodW5zaWduZWQgbG9uZykKLQkJCSAgICBhcmNoaXZlX2VudHJ5X2ZpbGV0eXBlKGVudHJ5X29yaWdpbmFsKSk7CisJCWRlZmF1bHQ6IC8qIEFFX0lGU09DSyBhbmQgdW5rbm93biAqLworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeV9vcmlnaW5hbCwgInBheCIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCX0KIAl9CkBAIC04MzUsMTMgKzg1MiwxNiBAQAogCSAqIHRoZW0gZG8uCiAJICovCiAJciA9IGdldF9lbnRyeV9wYXRobmFtZShhLCBlbnRyeV9tYWluLCAmcGF0aCwgJnBhdGhfbGVuZ3RoLCBzY29udik7Ci0JaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyKTsKLQllbHNlIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwl9IGVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQlyID0gZ2V0X2VudHJ5X3BhdGhuYW1lKGEsIGVudHJ5X21haW4sICZwYXRoLAogCQkgICAgJnBhdGhfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgcGF0aG5hbWUgJyVzJyB0byAlcyIsIHBhdGgsCiAJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2NoYXJzZXRfbmFtZShzY29udikpOwpAQCAtODQ5LDEyICs4NjksMTUgQEAKIAkJc2NvbnYgPSBOVUxMOy8qIFRoZSBoZWFkZXIgY2hhcnNldCBzd2l0Y2hlcyB0byBiaW5hcnkgbW9kZS4gKi8KIAl9CiAJciA9IGdldF9lbnRyeV91bmFtZShhLCBlbnRyeV9tYWluLCAmdW5hbWUsICZ1bmFtZV9sZW5ndGgsIHNjb252KTsKLQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHIpOwotCWVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgeworCX0gZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCXIgPSBnZXRfZW50cnlfdW5hbWUoYSwgZW50cnlfbWFpbiwgJnVuYW1lLCAmdW5hbWVfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgdW5hbWUgJyVzJyB0byAlcyIsIHVuYW1lLAogCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUoc2NvbnYpKTsKQEAgLTg2MiwxMiArODg1LDE1IEBACiAJCXNjb252ID0gTlVMTDsvKiBUaGUgaGVhZGVyIGNoYXJzZXQgc3dpdGNoZXMgdG8gYmluYXJ5IG1vZGUuICovCiAJfQogCXIgPSBnZXRfZW50cnlfZ25hbWUoYSwgZW50cnlfbWFpbiwgJmduYW1lLCAmZ25hbWVfbGVuZ3RoLCBzY29udik7Ci0JaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyKTsKLQllbHNlIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwl9IGVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQlyID0gZ2V0X2VudHJ5X2duYW1lKGEsIGVudHJ5X21haW4sICZnbmFtZSwgJmduYW1lX2xlbmd0aCwgTlVMTCk7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7CisJCX0KIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCSAgICAiQ2FuJ3QgdHJhbnNsYXRlIGduYW1lICclcycgdG8gJXMiLCBnbmFtZSwKIAkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKHNjb252KSk7CkBAIC04NzksMTMgKzkwNSwxNiBAQAogCWlmIChsaW5rcGF0aCA9PSBOVUxMKSB7CiAJCXIgPSBnZXRfZW50cnlfc3ltbGluayhhLCBlbnRyeV9tYWluLCAmbGlua3BhdGgsCiAJCSAgICAmbGlua3BhdGhfbGVuZ3RoLCBzY29udik7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7Ci0JCWVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgeworCQl9IGVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQkJciA9IGdldF9lbnRyeV9zeW1saW5rKGEsIGVudHJ5X21haW4sICZsaW5rcGF0aCwKIAkJCSAgICAmbGlua3BhdGhfbGVuZ3RoLCBOVUxMKTsKLQkJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJCXJldHVybiAocik7CisJCQl9CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKIAkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkJICAgICJDYW4ndCB0cmFuc2xhdGUgbGlua25hbWUgJyVzJyB0byAlcyIsIGxpbmtwYXRoLApAQCAtOTAxLDIxICs5MzAsMjkgQEAKIAkJaWYgKGhhcmRsaW5rICE9IE5VTEwpIHsKIAkJCXIgPSBnZXRfZW50cnlfaGFyZGxpbmsoYSwgZW50cnlfbWFpbiwgJmhhcmRsaW5rLAogCQkJICAgICZoYXJkbGlua19sZW5ndGgsIE5VTEwpOwotCQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQkJcmV0dXJuIChyKTsKKwkJCX0KIAkJCWxpbmtwYXRoID0gaGFyZGxpbms7CiAJCQlsaW5rcGF0aF9sZW5ndGggPSBoYXJkbGlua19sZW5ndGg7CiAJCX0KIAkJciA9IGdldF9lbnRyeV9wYXRobmFtZShhLCBlbnRyeV9tYWluLCAmcGF0aCwKIAkJICAgICZwYXRoX2xlbmd0aCwgTlVMTCk7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7CisJCX0KIAkJciA9IGdldF9lbnRyeV91bmFtZShhLCBlbnRyeV9tYWluLCAmdW5hbWUsICZ1bmFtZV9sZW5ndGgsIE5VTEwpOwotCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQlyZXR1cm4gKHIpOworCQl9CiAJCXIgPSBnZXRfZW50cnlfZ25hbWUoYSwgZW50cnlfbWFpbiwgJmduYW1lLCAmZ25hbWVfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCX0KIAogCS8qIFN0b3JlIHRoZSBoZWFkZXIgZW5jb2RpbmcgZmlyc3QsIHRvIGJlIG5pY2UgdG8gcmVhZGVycy4gKi8KQEAgLTExMTIsNiArMTE0OSwxMCBAQAogCWlmICghbmVlZF9leHRlbnNpb24gJiYgYWNsX3R5cGVzICE9IDApCiAJCW5lZWRfZXh0ZW5zaW9uID0gMTsKIAorCS8qIElmIHRoZSBzeW1saW5rIHR5cGUgaXMgZGVmaW5lZCwgd2UgbmVlZCBhbiBleHRlbnNpb24gKi8KKwlpZiAoIW5lZWRfZXh0ZW5zaW9uICYmIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlKGVudHJ5X21haW4pID4gMCkKKwkJbmVlZF9leHRlbnNpb24gPSAxOworCiAJLyoKIAkgKiBMaWJhcmNoaXZlIHVzZWQgdG8gaW5jbHVkZSB0aGVzZSBpbiBleHRlbmRlZCBoZWFkZXJzIGZvcgogCSAqIHJlc3RyaWN0ZWQgcGF4IGZvcm1hdCwgYnV0IHRoYXQgY29uZnVzZWQgcGVvcGxlIHdobwpAQCAtMTE2OCwyNCArMTIwOSwzMyBAQAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX0VYVFJBX0lEIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9TRVBBUkFUT1JfQ09NTUEgfAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX0NPTVBBQ1QpOwotCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQl9CiAJCX0KIAkJaWYgKGFjbF90eXBlcyAmIEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTKSB7CiAJCQlyZXQgPSBhZGRfcGF4X2FjbChhLCBlbnRyeV9vcmlnaW5hbCwgcGF4LAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9FWFRSQV9JRCB8CiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfU1RZTEVfU0VQQVJBVE9SX0NPTU1BKTsKLQkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQogCQl9CiAJCWlmIChhY2xfdHlwZXMgJiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQpIHsKIAkJCXJldCA9IGFkZF9wYXhfYWNsKGEsIGVudHJ5X29yaWdpbmFsLCBwYXgsCiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9ERUZBVUxUIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9FWFRSQV9JRCB8CiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfU1RZTEVfU0VQQVJBVE9SX0NPTU1BKTsKLQkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQogCQl9CiAKIAkJLyogV2UgdXNlIEdOVS10YXItY29tcGF0aWJsZSBzcGFyc2UgYXR0cmlidXRlcy4gKi8KQEAgLTEyNDUsNiArMTI5NSwxNyBAQAogCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CisKKwkJLyogU3RvcmUgZXh0ZW5kZWQgc3ltbGluayBpbmZvcm1hdGlvbiAqLworCQlpZiAoYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoZW50cnlfbWFpbikgPT0KKwkJICAgIEFFX1NZTUxJTktfVFlQRV9GSUxFKSB7CisJCQlhZGRfcGF4X2F0dHIoJihwYXgtPnBheF9oZWFkZXIpLAorCQkJICAgICJMSUJBUkNISVZFLnN5bWxpbmt0eXBlIiwgImZpbGUiKTsKKwkJfSBlbHNlIGlmIChhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZShlbnRyeV9tYWluKSA9PQorCQkgICAgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSkgeworCQkJYWRkX3BheF9hdHRyKCYocGF4LT5wYXhfaGVhZGVyKSwKKwkJCSAgICAiTElCQVJDSElWRS5zeW1saW5rdHlwZSIsICJkaXIiKTsKKwkJfQogCX0KIAogCS8qIE9ubHkgcmVndWxhciBmaWxlcyBoYXZlIGRhdGEuICovCkBAIC0xMzEzLDggKzEzNzQsMTEgQEAKIAkgKiBudW1lcmljIGZpZWxkcywgdGhvdWdoIHRoZXkncmUgbGVzcyBjcml0aWNhbC4KIAkgKi8KIAlpZiAoX19hcmNoaXZlX3dyaXRlX2Zvcm1hdF9oZWFkZXJfdXN0YXIoYSwgdXN0YXJidWZmLCBlbnRyeV9tYWluLCAtMSwgMCwKLQkgICAgTlVMTCkgPT0gQVJDSElWRV9GQVRBTCkKKwkgICAgTlVMTCkgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KIAogCS8qIElmIHdlIGJ1aWx0IGFueSBleHRlbmRlZCBhdHRyaWJ1dGVzLCB3cml0ZSB0aGF0IGVudHJ5IGZpcnN0LiAqLwogCWlmIChhcmNoaXZlX3N0cmxlbigmKHBheC0+cGF4X2hlYWRlcikpID4gMCkgewpAQCAtMTM3OSw2ICsxNDQzLDggQEAKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCiAJCQkgICAgImFyY2hpdmVfd3JpdGVfcGF4X2hlYWRlcjogIgogCQkJICAgICIneCcgaGVhZGVyIGZhaWxlZD8hICBUaGlzIGNhbid0IGhhcHBlbi5cbiIpOworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9IGVsc2UgaWYgKHIgPCByZXQpCiAJCQlyZXQgPSByOwpAQCAtMTM4Nyw2ICsxNDUzLDggQEAKIAkJCXNwYXJzZV9saXN0X2NsZWFyKHBheCk7CiAJCQlwYXgtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA9IDA7CiAJCQlwYXgtPmVudHJ5X3BhZGRpbmcgPSAwOworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CiAKQEAgLTEzOTgsMTIgKzE0NjYsMTYgQEAKIAkJICAgIGFyY2hpdmVfc3RybGVuKCYocGF4LT5wYXhfaGVhZGVyKSkpOwogCQlpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCQkvKiBJZiBhIHdyaXRlIGZhaWxzLCB3ZSdyZSBwcmV0dHkgbXVjaCB0b2FzdC4gKi8KKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQogCQkvKiBQYWQgb3V0IHRoZSBlbmQgb2YgdGhlIGVudHJ5LiAqLwogCQlyID0gX19hcmNoaXZlX3dyaXRlX251bGxzKGEsIChzaXplX3QpcGF4LT5lbnRyeV9wYWRkaW5nKTsKIAkJaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQkJLyogSWYgYSB3cml0ZSBmYWlscywgd2UncmUgcHJldHR5IG11Y2ggdG9hc3QuICovCisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCX0KIAkJcGF4LT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPSBwYXgtPmVudHJ5X3BhZGRpbmcgPSAwOwpAQCAtMTQxMSw4ICsxNDgzLDExIEBACiAKIAkvKiBXcml0ZSB0aGUgaGVhZGVyIGZvciBtYWluIGVudHJ5LiAqLwogCXIgPSBfX2FyY2hpdmVfd3JpdGVfb3V0cHV0KGEsIHVzdGFyYnVmZiwgNTEyKTsKLQlpZiAociAhPSBBUkNISVZFX09LKQorCWlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJcmV0dXJuIChyKTsKKwl9CiAKIAkvKgogCSAqIEluZm9ybSB0aGUgY2xpZW50IG9mIHRoZSBvbi1kaXNrIHNpemUgd2UncmUgdXNpbmcsIHNvCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDAyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaApAQCAtMCwwICsxLDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAyMCBNYXJ0aW4gTWF0dXNrYQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBBUkNISVZFX1dSSVRFX1NFVF9GT1JNQVRfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfV1JJVEVfU0VUX0ZPUk1BVF9QUklWQVRFX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1QKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCisKK3ZvaWQgX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKHN0cnVjdCBhcmNoaXZlICphLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqZm9ybWF0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9zaGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYwppbmRleCA1YmUzMTBhLi45ZTQ5MzFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3Qgc2hhciB7CiAJaW50CQkJIGR1bXA7CkBAIC0xNjksOCArMTcwLDcgQEAKIAl9CiAKIAkvKiBTYXZlIHRoZSBlbnRyeSBmb3IgdGhlIGNsb3NpbmcuICovCi0JaWYgKHNoYXItPmVudHJ5KQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoc2hhci0+ZW50cnkpOworCWFyY2hpdmVfZW50cnlfZnJlZShzaGFyLT5lbnRyeSk7CiAJc2hhci0+ZW50cnkgPSBhcmNoaXZlX2VudHJ5X2Nsb25lKGVudHJ5KTsKIAluYW1lID0gYXJjaGl2ZV9lbnRyeV9wYXRobmFtZShlbnRyeSk7CiAKQEAgLTE5NSw4ICsxOTUsOCBAQAogCQlhcmNoaXZlX2VudHJ5X3NldF9zaXplKGVudHJ5LCAwKTsKIAkJaWYgKGFyY2hpdmVfZW50cnlfaGFyZGxpbmsoZW50cnkpID09IE5VTEwgJiYKIAkJICAgIGFyY2hpdmVfZW50cnlfc3ltbGluayhlbnRyeSkgPT0gTlVMTCkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLQkJCSAgICAic2hhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgdGhpcyIpOworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgInNoYXIiKTsKIAkJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKIAkJfQogCX0KQEAgLTI4OSw4ICsyODksNyBAQAogCQkJICAgICJta2RpciAtcCAlcyA+IC9kZXYvbnVsbCAyPiYxXG4iLAogCQkJICAgIHNoYXItPnF1b3RlZF9uYW1lLnMpOwogCQkJLyogUmVjb3JkIHRoYXQgd2UganVzdCBjcmVhdGVkIHRoaXMgZGlyZWN0b3J5LiAqLwotCQkJaWYgKHNoYXItPmxhc3RfZGlyICE9IE5VTEwpCi0JCQkJZnJlZShzaGFyLT5sYXN0X2Rpcik7CisJCQlmcmVlKHNoYXItPmxhc3RfZGlyKTsKIAogCQkJc2hhci0+bGFzdF9kaXIgPSBzdHJkdXAobmFtZSk7CiAJCQkvKiBUcmltIGEgdHJhaWxpbmcgJy8nLiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3Rhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3Rhci5jCmluZGV4IGM1NGFlYWIuLmQxYTA2YmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdXN0YXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3VzdGFyLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0cnVjdCB1c3RhciB7CiAJdWludDY0X3QJZW50cnlfYnl0ZXNfcmVtYWluaW5nOwpAQCAtMzUyLDE0ICszNTMsMTIgQEAKICNlbmRpZgogCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9mb3JtYXRfaGVhZGVyX3VzdGFyKGEsIGJ1ZmYsIGVudHJ5LCAtMSwgMSwgc2NvbnYpOwogCWlmIChyZXQgPCBBUkNISVZFX1dBUk4pIHsKLQkJaWYgKGVudHJ5X21haW4pCi0JCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyZXQpOwogCX0KIAlyZXQyID0gX19hcmNoaXZlX3dyaXRlX291dHB1dChhLCBidWZmLCA1MTIpOwogCWlmIChyZXQyIDwgQVJDSElWRV9XQVJOKSB7Ci0JCWlmIChlbnRyeV9tYWluKQotCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCXJldHVybiAocmV0Mik7CiAJfQogCWlmIChyZXQyIDwgcmV0KQpAQCAtMzY3LDggKzM2Niw3IEBACiAKIAl1c3Rhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nID0gYXJjaGl2ZV9lbnRyeV9zaXplKGVudHJ5KTsKIAl1c3Rhci0+ZW50cnlfcGFkZGluZyA9IDB4MWZmICYgKC0oaW50NjRfdCl1c3Rhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKTsKLQlpZiAoZW50cnlfbWFpbikKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTUxNSw5ICs1MTMsMTEgQEAKIAl9CiAJaWYgKGNvcHlfbGVuZ3RoID4gMCkgewogCQlpZiAoY29weV9sZW5ndGggPiBVU1RBUl91bmFtZV9zaXplKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJICAgICJVc2VybmFtZSB0b28gbG9uZyIpOwotCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CisJCQlpZiAodGFydHlwZSAhPSAneCcpIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLCAiVXNlcm5hbWUgdG9vIGxvbmciKTsKKwkJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKKwkJCX0KIAkJCWNvcHlfbGVuZ3RoID0gVVNUQVJfdW5hbWVfc2l6ZTsKIAkJfQogCQltZW1jcHkoaCArIFVTVEFSX3VuYW1lX29mZnNldCwgcCwgY29weV9sZW5ndGgpOwpAQCAtNTM4LDkgKzUzOCwxMSBAQAogCX0KIAlpZiAoY29weV9sZW5ndGggPiAwKSB7CiAJCWlmIChzdHJsZW4ocCkgPiBVU1RBUl9nbmFtZV9zaXplKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJICAgICJHcm91cCBuYW1lIHRvbyBsb25nIik7Ci0JCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKKwkJCWlmICh0YXJ0eXBlICE9ICd4JykgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsICJHcm91cCBuYW1lIHRvbyBsb25nIik7CisJCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CisJCQl9CiAJCQljb3B5X2xlbmd0aCA9IFVTVEFSX2duYW1lX3NpemU7CiAJCX0KIAkJbWVtY3B5KGggKyBVU1RBUl9nbmFtZV9vZmZzZXQsIHAsIGNvcHlfbGVuZ3RoKTsKQEAgLTYxMiwxNiArNjE0LDkgQEAKIAkJY2FzZSBBRV9JRkJMSzogaFtVU1RBUl90eXBlZmxhZ19vZmZzZXRdID0gJzQnIDsgYnJlYWs7CiAJCWNhc2UgQUVfSUZESVI6IGhbVVNUQVJfdHlwZWZsYWdfb2Zmc2V0XSA9ICc1JyA7IGJyZWFrOwogCQljYXNlIEFFX0lGSUZPOiBoW1VTVEFSX3R5cGVmbGFnX29mZnNldF0gPSAnNicgOyBicmVhazsKLQkJY2FzZSBBRV9JRlNPQ0s6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHNvY2tldCIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0JCWRlZmF1bHQ6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHRoaXMgKG1vZGU9MCVsbykiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWFyY2hpdmVfZW50cnlfbW9kZShlbnRyeSkpOworCQlkZWZhdWx0OiAvKiBBRV9JRlNPQ0sgYW5kIHVua25vd24gKi8KKwkJCV9fYXJjaGl2ZV93cml0ZV9lbnRyeV9maWxldHlwZV91bnN1cHBvcnRlZCgKKwkJCSAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJ1c3RhciIpOwogCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3Y3dGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3Y3dGFyLmMKaW5kZXggNjJiMTUyMi4uNTk5NDA3MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF92N3Rhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdjd0YXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfbG9jYWxlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IHY3dGFyIHsKIAl1aW50NjRfdAllbnRyeV9ieXRlc19yZW1haW5pbmc7CkBAIC0yODQsNyArMjg1LDcgQEAKIAkJICogY2FzZSBnZXR0aW5nIFdDUyBmYWlsZWQuIE9uIFBPU0lYLCB0aGlzIGlzIGEKIAkJICogbm9ybWFsIG9wZXJhdGlvbi4KIAkJICovCi0JCWlmIChwICE9IE5VTEwgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKKwkJaWYgKHAgIT0gTlVMTCAmJiBwWzBdICE9ICdcMCcgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKIAkJCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBhczsKIAogCQkJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmYXMpOwpAQCAtMzMwLDE0ICszMzEsMTIgQEAKICNlbmRpZgogCXJldCA9IGZvcm1hdF9oZWFkZXJfdjd0YXIoYSwgYnVmZiwgZW50cnksIDEsIHNjb252KTsKIAlpZiAocmV0IDwgQVJDSElWRV9XQVJOKSB7Ci0JCWlmIChlbnRyeV9tYWluKQotCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCXJldHVybiAocmV0KTsKIAl9CiAJcmV0MiA9IF9fYXJjaGl2ZV93cml0ZV9vdXRwdXQoYSwgYnVmZiwgNTEyKTsKIAlpZiAocmV0MiA8IEFSQ0hJVkVfV0FSTikgewotCQlpZiAoZW50cnlfbWFpbikKLQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHJldDIpOwogCX0KIAlpZiAocmV0MiA8IHJldCkKQEAgLTM0NSw4ICszNDQsNyBAQAogCiAJdjd0YXItPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA9IGFyY2hpdmVfZW50cnlfc2l6ZShlbnRyeSk7CiAJdjd0YXItPmVudHJ5X3BhZGRpbmcgPSAweDFmZiAmICgtKGludDY0X3Qpdjd0YXItPmVudHJ5X2J5dGVzX3JlbWFpbmluZyk7Ci0JaWYgKGVudHJ5X21haW4pCi0JCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJcmV0dXJuIChyZXQpOwogfQogCkBAIC00OTQsMzEgKzQ5MiwxMSBAQAogCQljYXNlIEFFX0lGTE5LOgogCQkJaFtWN1RBUl90eXBlZmxhZ19vZmZzZXRdID0gJzInOwogCQkJYnJlYWs7Ci0JCWNhc2UgQUVfSUZDSFI6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIGNoYXJhY3RlciBkZXZpY2UiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQljYXNlIEFFX0lGQkxLOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBibG9jayBkZXZpY2UiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQljYXNlIEFFX0lGSUZPOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBmaWZvIik7Ci0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKLQkJY2FzZSBBRV9JRlNPQ0s6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHNvY2tldCIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCWRlZmF1bHQ6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHRoaXMgKG1vZGU9MCVsbykiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWFyY2hpdmVfZW50cnlfbW9kZShlbnRyeSkpOworCQkJLyogQUVfSUZCTEssIEFFX0lGQ0hSLCBBRV9JRklGTywgQUVfSUZTT0NLCisJCQkgKiBhbmQgdW5rbm93biAqLworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgInY3dGFyIik7CiAJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfd2FyYy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMKaW5kZXggZWRhZDA3Mi4uNDZiMDU3MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IHdhcmNfcyB7CiAJdW5zaWduZWQgaW50IG9taXRfd2FyY2luZm86MTsKQEAgLTI1OSwxMCArMjYwLDggQEAKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAl9CiAJLyoganVzdCByZXNvcnQgdG8gZXJyb3JpbmcgYXMgcGVyIFRpbSdzIGFkdmljZSAqLwotCWFyY2hpdmVfc2V0X2Vycm9yKAotCQkmYS0+YXJjaGl2ZSwKLQkJQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJIldBUkMgY2FuIG9ubHkgcHJvY2VzcyByZWd1bGFyIGZpbGVzIik7CisJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCSAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJXQVJDIik7CiAJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiB9CiAKQEAgLTMzMyw2ICszMzIsMTAgQEAKICNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKIAlzdHJ1Y3QgdG0gdGltZUhlcmU7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0dNVElNRTY0X1MpCisJZXJybm9fdCB0ZXJyOworCV9fdGltZTY0X3QgdG1wdGltZTsKKyNlbmRpZgogCWNoYXIgc3RydGltZVsxMDBdOwogCXNpemVfdCBsZW47CiAKQEAgLTM0MCw3ICszNDMsMTIgQEAKIAlpZiAoKHJ0ID0gZ210aW1lX3IoJnQsICZ0aW1lSGVyZSkpID09IE5VTEwpCiAJCXJldHVybjsKICNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKLQlfZ210aW1lNjRfcygmdGltZUhlcmUsICZ0KTsKKwl0bXB0aW1lID0gdDsKKwl0ZXJyID0gX2dtdGltZTY0X3MoJnRpbWVIZXJlLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXJ0ID0gTlVMTDsKKwllbHNlCisJCXJ0ID0gJnRpbWVIZXJlOwogI2Vsc2UKIAlpZiAoKHJ0ID0gZ210aW1lKCZ0KSkgPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF94YXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfeGFyLmMKaW5kZXggM2M2MTdlYy4uMzU4ZjYxZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF94YXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3hhci5jCkBAIC0yMTIsOCArMjEyLDggQEAKIAlzdHJ1Y3QgaGVhcF9kYXRhCSBkYXRhOwogICAgICAgICBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgICAgc2NyaXB0OwogCi0JaW50CQkJIHZpcnR1YWw6MTsKLQlpbnQJCQkgZGlyOjE7CisJc2lnbmVkIGludAkJIHZpcnR1YWw6MTsKKwlzaWduZWQgaW50CQkgZGlyOjE7CiB9OwogCiBzdHJ1Y3QgaGFyZGxpbmsgewpAQCAtNDExLDYgKzQxMSw4IEBACiAJaWYgKHN0cmNtcChrZXksICJjaGVja3N1bSIpID09IDApIHsKIAkJaWYgKHZhbHVlID09IE5VTEwpCiAJCQl4YXItPm9wdF9zdW1hbGcgPSBDS1NVTV9OT05FOworCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJub25lIikgPT0gMCkKKwkJCXhhci0+b3B0X3N1bWFsZyA9IENLU1VNX05PTkU7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgInNoYTEiKSA9PSAwKQogCQkJeGFyLT5vcHRfc3VtYWxnID0gQ0tTVU1fU0hBMTsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAibWQ1IikgPT0gMCkKQEAgLTQyOSw2ICs0MzEsOCBAQAogCiAJCWlmICh2YWx1ZSA9PSBOVUxMKQogCQkJeGFyLT5vcHRfY29tcHJlc3Npb24gPSBOT05FOworCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJub25lIikgPT0gMCkKKwkJCXhhci0+b3B0X2NvbXByZXNzaW9uID0gTk9ORTsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAiZ3ppcCIpID09IDApCiAJCQl4YXItPm9wdF9jb21wcmVzc2lvbiA9IEdaSVA7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgImJ6aXAyIikgPT0gMCkKQEAgLTQ4Miw2ICs0ODYsOCBAQAogCWlmIChzdHJjbXAoa2V5LCAidG9jLWNoZWNrc3VtIikgPT0gMCkgewogCQlpZiAodmFsdWUgPT0gTlVMTCkKIAkJCXhhci0+b3B0X3RvY19zdW1hbGcgPSBDS1NVTV9OT05FOworCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJub25lIikgPT0gMCkKKwkJCXhhci0+b3B0X3RvY19zdW1hbGcgPSBDS1NVTV9OT05FOwogCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJzaGExIikgPT0gMCkKIAkJCXhhci0+b3B0X3RvY19zdW1hbGcgPSBDS1NVTV9TSEExOwogCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJtZDUiKSA9PSAwKQpAQCAtNDk2LDEwICs1MDIsMTMgQEAKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAl9CiAJaWYgKHN0cmNtcChrZXksICJ0aHJlYWRzIikgPT0gMCkgeworCQljaGFyICplbmRwdHI7CisKIAkJaWYgKHZhbHVlID09IE5VTEwpCiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKLQkJeGFyLT5vcHRfdGhyZWFkcyA9IChpbnQpc3RydG91bCh2YWx1ZSwgTlVMTCwgMTApOwotCQlpZiAoeGFyLT5vcHRfdGhyZWFkcyA9PSAwICYmIGVycm5vICE9IDApIHsKKwkJZXJybm8gPSAwOworCQl4YXItPm9wdF90aHJlYWRzID0gKGludClzdHJ0b3VsKHZhbHVlLCAmZW5kcHRyLCAxMCk7CisJCWlmIChlcnJubyAhPSAwIHx8ICplbmRwdHIgIT0gJ1wwJykgewogCQkJeGFyLT5vcHRfdGhyZWFkcyA9IDE7CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLAogCQkJICAgIEFSQ0hJVkVfRVJSTk9fTUlTQywKQEAgLTY5MywxMyArNzAyLDM3IEBACiAJCWVsc2UKIAkJCXJ1biA9IEFSQ0hJVkVfWl9GSU5JU0g7CiAJCS8qIENvbXByZXNzIGZpbGUgZGF0YS4gKi8KLQkJciA9IGNvbXByZXNzaW9uX2NvZGUoJihhLT5hcmNoaXZlKSwgJih4YXItPnN0cmVhbSksIHJ1bik7Ci0JCWlmIChyICE9IEFSQ0hJVkVfT0sgJiYgciAhPSBBUkNISVZFX0VPRikKLQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCWZvciAoOzspIHsKKwkJCXIgPSBjb21wcmVzc2lvbl9jb2RlKCYoYS0+YXJjaGl2ZSksICYoeGFyLT5zdHJlYW0pLAorCQkJICAgIHJ1bik7CisJCQlpZiAociAhPSBBUkNISVZFX09LICYmIHIgIT0gQVJDSElWRV9FT0YpCisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCWlmICh4YXItPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCB8fAorCQkJICAgIHJ1biA9PSBBUkNISVZFX1pfRklOSVNIKSB7CisJCQkJc2l6ZSA9IHNpemVvZih4YXItPndidWZmKSAtCisJCQkJICAgIHhhci0+c3RyZWFtLmF2YWlsX291dDsKKwkJCQljaGVja3N1bV91cGRhdGUoJih4YXItPmFfc3Vtd3JrKSwgeGFyLT53YnVmZiwKKwkJCQkgICAgc2l6ZSk7CisJCQkJeGFyLT5jdXJfZmlsZS0+ZGF0YS5sZW5ndGggKz0gc2l6ZTsKKwkJCQlpZiAod3JpdGVfdG9fdGVtcChhLCB4YXItPndidWZmLAorCQkJCSAgICBzaXplKSAhPSBBUkNISVZFX09LKQorCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJCWlmIChyID09IEFSQ0hJVkVfT0spIHsKKwkJCQkJLyogT3V0cHV0IGJ1ZmZlciB3YXMgZnVsbCAqLworCQkJCQl4YXItPnN0cmVhbS5uZXh0X291dCA9IHhhci0+d2J1ZmY7CisJCQkJCXhhci0+c3RyZWFtLmF2YWlsX291dCA9CisJCQkJCSAgICBzaXplb2YoeGFyLT53YnVmZik7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogQVJDSElWRV9FT0YgLSBXZSBhcmUgZG9uZSAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIENvbXByZXNzb3Igd2FudHMgbW9yZSBpbnB1dCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CiAJCXJzaXplID0gcyAtIHhhci0+c3RyZWFtLmF2YWlsX2luOwogCQljaGVja3N1bV91cGRhdGUoJih4YXItPmVfc3Vtd3JrKSwgYnVmZiwgcnNpemUpOwotCQlzaXplID0gc2l6ZW9mKHhhci0+d2J1ZmYpIC0geGFyLT5zdHJlYW0uYXZhaWxfb3V0OwotCQljaGVja3N1bV91cGRhdGUoJih4YXItPmFfc3Vtd3JrKSwgeGFyLT53YnVmZiwgc2l6ZSk7CiAJfQogI2lmICFkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogCWlmICh4YXItPmJ5dGVzX3JlbWFpbmluZyA9PQpAQCAtNzM2LDEyICs3NjksOSBAQAogCWlmICh4YXItPmN1cl9maWxlLT5kYXRhLmNvbXByZXNzaW9uID09IE5PTkUpIHsKIAkJaWYgKHdyaXRlX3RvX3RlbXAoYSwgYnVmZiwgc2l6ZSkgIT0gQVJDSElWRV9PSykKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHdyaXRlX3RvX3RlbXAoYSwgeGFyLT53YnVmZiwgc2l6ZSkgIT0gQVJDSElWRV9PSykKLQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCXhhci0+Y3VyX2ZpbGUtPmRhdGEubGVuZ3RoICs9IHNpemU7CiAJfQogCXhhci0+Ynl0ZXNfcmVtYWluaW5nIC09IHJzaXplOwotCXhhci0+Y3VyX2ZpbGUtPmRhdGEubGVuZ3RoICs9IHNpemU7CiAKIAlyZXR1cm4gKHJzaXplKTsKIH0KQEAgLTg3NSwxMSArOTA1LDE1IEBACiB7CiAJY2hhciB0aW1lc3RyWzEwMF07CiAJc3RydWN0IHRtIHRtOworI2lmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwlfX3RpbWU2NF90IHRtcHRpbWU7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikKIAlnbXRpbWVfcigmdCwgJnRtKTsKICNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKLQlfZ210aW1lNjRfcygmdG0sICZ0KTsKKwl0bXB0aW1lID0gdDsKKwlfZ210aW1lNjRfcygmdG0sICZ0bXB0aW1lKTsKICNlbHNlCiAJbWVtY3B5KCZ0bSwgZ210aW1lKCZ0KSwgc2l6ZW9mKHRtKSk7CiAjZW5kaWYKQEAgLTIxMDAsNyArMjEzNCw3IEBACiAJd2hpbGUgKGxlbiA+IDApIHsKIAkJc2l6ZV90IGxsID0gbGVuOwogCi0JCWlmIChsZW4gPiAwICYmIHBbbGVuLTFdID09ICcvJykgeworCQlpZiAocFtsZW4tMV0gPT0gJy8nKSB7CiAJCQlwW2xlbi0xXSA9ICdcMCc7CiAJCQlsZW4tLTsKIAkJfQpAQCAtMjEyMCwxMCArMjE1NCwxMCBAQAogCQlpZiAocFswXSA9PSAnLycpIHsKIAkJCWlmIChwWzFdID09ICcvJykKIAkJCQkvKiBDb252ZXJ0ICcvLycgLS0+ICcvJyAqLwotCQkJCXN0cmNweShwLCBwKzEpOworCQkJCW1lbW1vdmUocCwgcCsxLCBzdHJsZW4ocCsxKSArIDEpOwogCQkJZWxzZSBpZiAocFsxXSA9PSAnLicgJiYgcFsyXSA9PSAnLycpCiAJCQkJLyogQ29udmVydCAnLy4vJyAtLT4gJy8nICovCi0JCQkJc3RyY3B5KHAsIHArMik7CisJCQkJbWVtbW92ZShwLCBwKzIsIHN0cmxlbihwKzIpICsgMSk7CiAJCQllbHNlIGlmIChwWzFdID09ICcuJyAmJiBwWzJdID09ICcuJyAmJiBwWzNdID09ICcvJykgewogCQkJCS8qIENvbnZlcnQgJ2Rpci9kaXIxLy4uL2RpcjIvJwogCQkJCSAqICAgICAtLT4gJ2Rpci9kaXIyLycKQEAgLTI1MjksMTMgKzI1NjMsMTEgQEAKIHN0YXRpYyB2b2lkCiBmaWxlX2ZyZWVfaGFyZGxpbmtzKHN0cnVjdCB4YXIgKnhhcikKIHsKLQlzdHJ1Y3QgYXJjaGl2ZV9yYl9ub2RlICpuLCAqbmV4dDsKKwlzdHJ1Y3QgYXJjaGl2ZV9yYl9ub2RlICpuLCAqdG1wOwogCi0JZm9yIChuID0gQVJDSElWRV9SQl9UUkVFX01JTigmKHhhci0+aGFyZGxpbmtfcmJ0cmVlKSk7IG47KSB7Ci0JCW5leHQgPSBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKCYoeGFyLT5oYXJkbGlua19yYnRyZWUpLAotCQkgICAgbiwgQVJDSElWRV9SQl9ESVJfUklHSFQpOworCUFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIX1NBRkUobiwgJih4YXItPmhhcmRsaW5rX3JidHJlZSksIHRtcCkgeworCQlfX2FyY2hpdmVfcmJfdHJlZV9yZW1vdmVfbm9kZSgmKHhhci0+aGFyZGxpbmtfcmJ0cmVlKSwgbik7CiAJCWZyZWUobik7Ci0JCW4gPSBuZXh0OwogCX0KIH0KIApAQCAtMzE2OSw4ICszMjAxLDEwIEBACiAJCQljaGVja3N1bV91cGRhdGUoJih4YXItPmFfc3Vtd3JrKSwKIAkJCSAgICB4YXItPndidWZmLCBzaXplKTsKIAkJCWlmICh3cml0ZV90b190ZW1wKGEsIHhhci0+d2J1ZmYsIHNpemUpCi0JCQkgICAgIT0gQVJDSElWRV9PSykKKwkJCSAgICAhPSBBUkNISVZFX09LKSB7CisJCQkJZnJlZShoZWFwKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQogCQkJaWYgKHIgPT0gQVJDSElWRV9PSykgewogCQkJCXhhci0+c3RyZWFtLm5leHRfb3V0ID0geGFyLT53YnVmZjsKIAkJCQl4YXItPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoeGFyLT53YnVmZik7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF96aXAuYwppbmRleCBhNGFlMjI5Li4xZWRlNWVlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogI2lmbmRlZiBIQVZFX1pMSUJfSAogI2luY2x1ZGUgImFyY2hpdmVfY3JjMzIuaCIKQEAgLTUyNiw4ICs1MjcsOCBAQAogCS8qIElnbm9yZSB0eXBlcyBvZiBlbnRyaWVzIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydC4gKi8KIAl0eXBlID0gYXJjaGl2ZV9lbnRyeV9maWxldHlwZShlbnRyeSk7CiAJaWYgKHR5cGUgIT0gQUVfSUZSRUcgJiYgdHlwZSAhPSBBRV9JRkRJUiAmJiB0eXBlICE9IEFFX0lGTE5LKSB7Ci0JCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCSAgICAiRmlsZXR5cGUgbm90IHN1cHBvcnRlZCIpOworCQlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisJCSAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJ6aXAiKTsKIAkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwogCX07CiAKQEAgLTU2NCwxMCArNTY1LDggQEAKIAl6aXAtPmVudHJ5X3VzZXNfemlwNjQgPSAwOwogCXppcC0+ZW50cnlfY3JjMzIgPSB6aXAtPmNyYzMyZnVuYygwLCBOVUxMLCAwKTsKIAl6aXAtPmVudHJ5X2VuY3J5cHRpb24gPSAwOwotCWlmICh6aXAtPmVudHJ5ICE9IE5VTEwpIHsKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKHppcC0+ZW50cnkpOwotCQl6aXAtPmVudHJ5ID0gTlVMTDsKLQl9CisJYXJjaGl2ZV9lbnRyeV9mcmVlKHppcC0+ZW50cnkpOworCXppcC0+ZW50cnkgPSBOVUxMOwogCiAJaWYgKHppcC0+Y2N0eF92YWxpZCkKIAkJYXJjaGl2ZV9lbmNyeXB0b19hZXNfY3RyX3JlbGVhc2UoJnppcC0+Y2N0eCk7CkBAIC0xMzc0LDEwICsxMzczLDI4IEBACiB7CiAJc3RydWN0IHRtICp0OwogCXVuc2lnbmVkIGludCBkdDsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0gdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdCB0ZXJyOworCV9fdGltZTY0X3QgdG1wdGltZTsKKyNlbmRpZgogCiAJLyogVGhpcyB3aWxsIG5vdCBwcmVzZXJ2ZSB0aW1lIHdoZW4gY3JlYXRpbmcvZXh0cmFjdGluZyB0aGUgYXJjaGl2ZQogCSAqIG9uIHR3byBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IHRpbWUgem9uZXMuICovCisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCXQgPSBsb2NhbHRpbWVfcigmdW5peF90aW1lLCAmdG1idWYpOworI2VsaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXRtcHRpbWUgPSB1bml4X3RpbWU7CisJdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZ0bWJ1ZiwgJnRtcHRpbWUpOworCWlmICh0ZXJyKQorCQl0ID0gTlVMTDsKKwllbHNlCisJCXQgPSAmdG1idWY7CisjZWxzZQogCXQgPSBsb2NhbHRpbWUoJnVuaXhfdGltZSk7CisjZW5kaWYKIAogCS8qIE1TRE9TLXN0eWxlIGRhdGUvdGltZSBpcyBvbmx5IGJldHdlZW4gMTk4MC0wMS0wMSBhbmQgMjEwNy0xMi0zMSAqLwogCWlmICh0LT50bV95ZWFyIDwgMTk4MCAtIDE5MDApCkBAIC0xNDA0LDE4ICsxNDIxLDE3IEBACiB7CiAJbW9kZV90IHR5cGU7CiAJY29uc3QgY2hhciAqcGF0aDsKKwlzaXplX3QgbGVuOwogCiAJdHlwZSA9IGFyY2hpdmVfZW50cnlfZmlsZXR5cGUoZW50cnkpOwogCXBhdGggPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lKGVudHJ5KTsKIAogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAoMCk7Ci0JaWYgKHR5cGUgPT0gQUVfSUZESVIgJiYKLQkgICAgKHBhdGhbMF0gPT0gJ1wwJyB8fCBwYXRoW3N0cmxlbihwYXRoKSAtIDFdICE9ICcvJykpIHsKLQkJcmV0dXJuIHN0cmxlbihwYXRoKSArIDE7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHN0cmxlbihwYXRoKTsKLQl9CisJbGVuID0gc3RybGVuKHBhdGgpOworCWlmICh0eXBlID09IEFFX0lGRElSICYmIChwYXRoWzBdID09ICdcMCcgfHwgcGF0aFtsZW4gLSAxXSAhPSAnLycpKQorCQkrK2xlbjsgLyogU3BhY2UgZm9yIHRoZSB0cmFpbGluZyAvICovCisJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIGludApAQCAtMTQzMCw2ICsxNDQ2LDkgQEAKIAl0eXBlID0gYXJjaGl2ZV9lbnRyeV9maWxldHlwZShlbnRyeSk7CiAJd3JpdHRlbl9ieXRlcyA9IDA7CiAKKwlpZiAocGF0aCA9PSBOVUxMKQorCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCiAJcmV0ID0gX19hcmNoaXZlX3dyaXRlX291dHB1dChhcmNoaXZlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOwogCWlmIChyZXQgIT0gQVJDSElWRV9PSykKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKQEAgLTE0NjAsMTAgKzE0NzksOCBAQAogCW1lbWNweShwLCBwYXRoLCBwYXRobGVuKTsKIAogCS8qIEZvbGRlcnMgYXJlIHJlY29nbml6ZWQgYnkgYSB0cmFpbGluZyBzbGFzaC4gKi8KLQlpZiAoKHR5cGUgPT0gQUVfSUZESVIpICYgKHBhdGhbcGF0aGxlbiAtIDFdICE9ICcvJykpIHsKKwlpZiAoKHR5cGUgPT0gQUVfSUZESVIpICYmIChwYXRoW3BhdGhsZW4gLSAxXSAhPSAnLycpKQogCQlwW3BhdGhsZW5dID0gJy8nOwotCQlwW3BhdGhsZW4gKyAxXSA9ICdcMCc7Ci0JfQogfQogCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucy4zCmluZGV4IGFlYjdhMTguLmNmZmU1NzEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMuMwpAQCAtMjQsNyArMjQsNyBAQAogLlwiCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBGZWJydWFyeSAyLCAyMDEyCisuRGQgSmFudWFyeSAzMSwgMjAyMAogLkR0IEFSQ0hJVkVfV1JJVEVfT1BUSU9OUyAzCiAuT3MKIC5TaCBOQU1FCkBAIC03MCw3ICs3MCw3IEBACiAuRm4gYXJjaGl2ZV93cml0ZV9zZXRfZmlsdGVyX29wdGlvbiAsCiAuRm4gYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X29wdGlvbgogLlhjCi1TcGVjaWZpZXMgYW4gb3B0aW9uIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gY3VycmVudGx5LXJlZ2lzdGVyZWQKK1NwZWNpZmllcyBhbiBvcHRpb24gdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY3VycmVudGx5LXJlZ2lzdGVyZWQKIGZpbHRlcnMgKGluY2x1ZGluZyBkZWNvbXByZXNzaW9uIGZpbHRlcnMpIG9yIGZvcm1hdCByZWFkZXJzLgogLlBwCiBJZgpAQCAtMTM4LDcgKzEzOCw3IEBACiAuQ20gQVJDSElWRV9GQVRBTAogd2lsbCBiZSByZXR1cm5lZAogaW1tZWRpYXRlbHkuCi1PdGhlcndpc2UsIGdyZWF0ZXIgb2YgdGhlIHR3byB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZC4KK090aGVyd2lzZSwgdGhlIGdyZWF0ZXIgb2YgdGhlIHR3byB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZC4KIC5cIgogLkl0IEZuIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMKIC5BciBvcHRpb25zCkBAIC0xNzAsNTUgKzE3MCwxNTMgQEAKIC5cIgogLlNoIE9QVElPTlMKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBGaWx0ZXIgYjY0ZW5jb2RlCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gbW9kZQorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIG9jdGFsIGRpZ2l0cyBzcGVjaWZ5aW5nIHRoZSBmaWxlIG1vZGUuCisuSXQgQ20gbmFtZQorVGhlIHZhbHVlIHNwZWNpZmllcyB0aGUgZmlsZSBuYW1lLgorLkVsCisuSXQgRmlsdGVyIGJ6aXAyCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gY29tcHJlc3Npb24tbGV2ZWwKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorYnppcDIgY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMSB0byA5LgorLkVsCiAuSXQgRmlsdGVyIGd6aXAKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAogVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCi1nemlwIGNvbXByZXNzaW9uIGxldmVsLgorZ3ppcCBjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDkuCisuSXQgQ20gdGltZXN0YW1wCitTdG9yZSB0aW1lc3RhbXAuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLkVsCisuSXQgRmlsdGVyIGxyemlwCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gY29tcHJlc3Npb24gTnMgPSBOcyBBciB0eXBlCitVc2UKKy5BciB0eXBlCithcyBjb21wcmVzc2lvbiBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIGJ6aXAyICwKKy5EcSBnemlwaSAsCisuRHEgbHpvCisuUHEgdWx0cmEgZmFzdCAsCithbmQKKy5EcSB6cGFxCisuUHEgYmVzdCwgZXh0cmVtZWx5IHNsb3cgLgorLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKK2xyemlwIGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gOS4KKy5FbAorLkl0IEZpbHRlciBsejQKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitsejQgY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMCB0byA5LgorLkl0IENtIHN0cmVhbS1jaGVja3N1bQorRW5hYmxlIHN0cmVhbSBjaGVja3N1bS4gVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSXQgQ20gYmxvY2stY2hlY2tzdW0KK0VuYWJsZSBibG9jayBjaGVja3N1bS4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLkl0IENtIGJsb2NrLXNpemUKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorbHo0IGNvbXByZXNzaW9uIGJsb2NrIHNpemUuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gNCB0byA3CisuUHEgZGVmYXVsdCAuCisuSXQgQ20gYmxvY2stZGVwZW5kZW5jZQorVXNlIHRoZSBwcmV2aW91cyBibG9jayBvZiB0aGUgYmxvY2sgYmVpbmcgY29tcHJlc3NlZCBmb3IKK2EgY29tcHJlc3Npb24gZGljdGlvbmFyeSB0byBpbXByb3ZlIGNvbXByZXNzaW9uIHJhdGlvLgorVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLkVsCisuSXQgRmlsdGVyIGx6b3AKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitsem9wIGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gOS4KKy5FbAorLkl0IEZpbHRlciB1dWVuY29kZQorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIG1vZGUKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBvY3RhbCBkaWdpdHMgc3BlY2lmeWluZyB0aGUgZmlsZSBtb2RlLgorLkl0IENtIG5hbWUKK1RoZSB2YWx1ZSBzcGVjaWZpZXMgdGhlIGZpbGUgbmFtZS4KIC5FbAogLkl0IEZpbHRlciB4egogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAogLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCiBUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKLWNvbXByZXNzaW9uIGxldmVsLgorY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMCB0byA5LgorLkl0IENtIHRocmVhZHMKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorbnVtYmVyIG9mIHRocmVhZHMgZm9yIG11bHRpLXRocmVhZGVkIGx6bWEgY29tcHJlc3Npb24uCitJZiBzdXBwb3J0ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHJlYWQgZnJvbQorLkZuIGx6bWFfY3B1dGhyZWFkcyAuCiAuRWwKLS5JdCBGb3JtYXQgbXRyZWUKKy5JdCBGaWx0ZXIgenN0ZAogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAotLkl0IENtIGNrc3VtICwgQ20gZGV2aWNlICwgQ20gZmxhZ3MgLCBDbSBnaWQgLCBDbSBnbmFtZSAsIENtIGluZGVudCAsIENtIGxpbmsgLCBDbSBtZDUgLCBDbSBtb2RlICwgQ20gbmxpbmsgLCBDbSBybWQxNjAgLCBDbSBzaGExICwgQ20gc2hhMjU2ICwgQ20gc2hhMzg0ICwgQ20gc2hhNTEyICwgQ20gc2l6ZSAsIENtIHRpbWUgLCBDbSB1aWQgLCBDbSB1bmFtZQotRW5hYmxlIGEgcGFydGljdWxhciBrZXl3b3JkIGluIHRoZSBtdHJlZSBvdXRwdXQuCi1QcmVmaXggd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIHRvIGRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcga2V5d29yZC4KLVRoZSBkZWZhdWx0IGlzIGVxdWl2YWxlbnQgdG8KLS5EcSBkZXZpY2UsIGZsYWdzLCBnaWQsIGduYW1lLCBsaW5rLCBtb2RlLCBubGluaywgc2l6ZSwgdGltZSwgdHlwZSwgdWlkLCB1bmFtZSAuCi0uSXQgQ20gYWxsCi1FbmFibGVzIGFsbCBvZiB0aGUgYWJvdmUga2V5d29yZHMuCi0uSXQgQ20gdXNlLXNldAotRW5hYmxlcyBnZW5lcmF0aW9uIG9mCi0uQ20gL3NldAotbGluZXMgdGhhdCBzcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZC9vciBkaXJlY3Rvcmllcy4KLS5JdCBDbSBpbmRlbnQKLVhYWCBuZWVkcyBleHBsYW5hdGlvbiBYWFgKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAxIHRvIDIyLgorLkVsCisuSXQgRm9ybWF0IDd6aXAKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbgorVGhlIHZhbHVlIGlzIG9uZSBvZgorLkRxIHN0b3JlICwKKy5EcSBkZWZsYXRlICwKKy5EcSBiemlwMiAsCisuRHEgbHptYTEgLAorLkRxIGx6bWEyCitvcgorLkRxIHBwbWQKK3RvIGluZGljYXRlIGhvdyB0aGUgZm9sbG93aW5nIGVudHJpZXMgc2hvdWxkIGJlIGNvbXByZXNzZWQuCitOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIGlnbm9yZWQgZm9yIGRpcmVjdG9yaWVzLCBzeW1ib2xpYyBsaW5rcywKK2FuZCBvdGhlciBzcGVjaWFsIGVudHJpZXMuCisuSXQgQ20gY29tcHJlc3Npb24tbGV2ZWwKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorY29tcHJlc3Npb24gbGV2ZWwuCitWYWx1ZXMgYmV0d2VlbiAwIGFuZCA5IGFyZSBzdXBwb3J0ZWQuCitUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxldmVsIGRlcGVuZHMgb24gdGhlIGNob3NlbgorY29tcHJlc3Npb24gbWV0aG9kLgorLkVsCisuSXQgRm9ybWF0IGNwaW8KKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IGdudXRhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUsIGdyb3VwIGFuZCB1c2VyIG5hbWVzLgogLkVsCiAuSXQgRm9ybWF0IGlzbzk2NjAgLSB2b2x1bWUgbWV0YWRhdGEKIFRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdG8gc2V0IHN0YW5kYXJkIElTTzk2NjAgbWV0YWRhdGEuCiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CiAuSXQgQ20gYWJzdHJhY3QtZmlsZSBOcyA9IE5zIEFyIGZpbGVuYW1lCiBUaGUgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSB3aWxsIGJlIGlkZW50aWZpZWQgaW4gdGhlIElTTzk2NjAgbWV0YWRhdGEKLWFzIGhvbGRpbmcgdGhlIGFic3RyYWN0IGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBhYnN0cmFjdCBmb3IgdGhpcyB2b2x1bWUuCitEZWZhdWx0OiBub25lLgogLkl0IENtIGFwcGxpY2F0aW9uLWlkIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgYXBwbGljYXRpb24gaWRlbnRpZmllciBmb3IgdGhpcyB2b2x1bWUuICBEZWZhdWx0OiBub25lLgorYXMgaG9sZGluZyB0aGUgYXBwbGljYXRpb24gaWRlbnRpZmllciBmb3IgdGhpcyB2b2x1bWUuCitEZWZhdWx0OiBub25lLgogLkl0IENtIGJpYmxpby1maWxlIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgYmlibGlvZ3JhcGh5IGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBiaWJsaW9ncmFwaHkgZm9yIHRoaXMgdm9sdW1lLgorRGVmYXVsdDogbm9uZS4KIC5JdCBDbSBjb3B5cmlnaHQtZmlsZSBOcyA9IE5zIEFyIGZpbGVuYW1lCiBUaGUgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSB3aWxsIGJlIGlkZW50aWZpZWQgaW4gdGhlIElTTzk2NjAgbWV0YWRhdGEKLWFzIGhvbGRpbmcgdGhlIGNvcHlyaWdodCBmb3IgdGhpcyB2b2x1bWUuICBEZWZhdWx0OiBub25lLgorYXMgaG9sZGluZyB0aGUgY29weXJpZ2h0IGZvciB0aGlzIHZvbHVtZS4KK0RlZmF1bHQ6IG5vbmUuCiAuSXQgQ20gcHVibGlzaGVyIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgcHVibGlzaGVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBwdWJsaXNoZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgdm9sdW1lLgorRGVmYXVsdDogbm9uZS4KIC5JdCBDbSB2b2x1bWUtaWQgTnMgPSBOcyBBciBzdHJpbmcKIFRoZSBzcGVjaWZpZWQgc3RyaW5nIHdpbGwgYmUgdXNlZCBhcyB0aGUgVm9sdW1lIElkZW50aWZpZXIgaW4gdGhlIElTTzk2NjAgbWV0YWRhdGEuCi1JdCBpcyBsaW1pdGVkIHRvIDMyIGJ5dGVzLiBEZWZhdWx0OiBub25lLgorSXQgaXMgbGltaXRlZCB0byAzMiBieXRlcy4KK0RlZmF1bHQ6IG5vbmUuCiAuRWwKIC5JdCBGb3JtYXQgaXNvOTY2MCAtIGJvb3Qgc3VwcG9ydAogVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB0byBtYWtlIGFuIElTTzk2NjAgaW1hZ2UgdGhhdCBjYW4gYmUgZGlyZWN0bHkKQEAgLTI2Niw3ICszNjQsNyBAQAogdGhlIGRlZmF1bHQgaXMKIC5DbSBmZCAsCiBvdGhlcndpc2UgdGhlIGRlZmF1bHQgaXMKLS5DbSBuby1lbXVsYXRpb24uCisuQ20gbm8tZW11bGF0aW9uIC4KIC5FbAogLkl0IEZvcm1hdCBpc285NjYwIC0gZmlsZW5hbWUgYW5kIHNpemUgZXh0ZW5zaW9ucwogVmFyaW91cyBleHRlbnNpb25zIHRvIHRoZSBiYXNlIElTTzk2NjAgZm9ybWF0LgpAQCAtMjkwLDcgKzM4OCw3IEBACiBEZWZhdWx0OiBkaXNhYmxlZC4KIC5JdCBDbSBhbGxvdy1wZXJpb2QKIElmIGVuYWJsZWQsIGFsbG93cyBmaWxlbmFtZXMgdG8gY29udGFpbiB0cmFpbGluZyBwZXJpb2QgY2hhcmFjdGVycywgaW4gdmlvbGF0aW9uIG9mIHRoZSBJU085NjYwIHNwZWNpZmljYXRpb24uCi1JZiBkaXNhYmxlZCx0cmFpbGluZyBwZXJpb2RzIHdpbGwgYmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmUgY2hhcmFjdGVycy4KK0lmIGRpc2FibGVkLCB0cmFpbGluZyBwZXJpb2RzIHdpbGwgYmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmUgY2hhcmFjdGVycy4KIFRoaXMgZG9lcyBub3QgaW1wYWN0IG5hbWVzIHN0b3JlZCBpbiB0aGUgUm9ja3JpZGdlIG9yIEpvbGlldCBleHRlbnNpb24gYXJlYS4KIERlZmF1bHQ6IGRpc2FibGVkLgogLkl0IENtIGFsbG93LXB2ZC1sb3dlcmNhc2UKQEAgLTM5OCw2ICs0OTYsMTExIEBACiBUaGlzIG9wdGlvbiBjYW4gYmUgcHJvdmlkZWQgbXVsdGlwbGUgdGltZXMgdG8gc3VwcHJlc3MgY29tcHJlc3Npb24KIG9uIG1hbnkgZmlsZXMuCiAuRWwKKy5JdCBGb3JtYXQgbXRyZWUKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBja3N1bSAsIENtIGRldmljZSAsIENtIGZsYWdzICwgQ20gZ2lkICwgQ20gZ25hbWUgLCBDbSBpbmRlbnQgLCBDbSBsaW5rICwgQ20gbWQ1ICwgQ20gbW9kZSAsIENtIG5saW5rICwgQ20gcm1kMTYwICwgQ20gc2hhMSAsIENtIHNoYTI1NiAsIENtIHNoYTM4NCAsIENtIHNoYTUxMiAsIENtIHNpemUgLCBDbSB0aW1lICwgQ20gdWlkICwgQ20gdW5hbWUKK0VuYWJsZSBhIHBhcnRpY3VsYXIga2V5d29yZCBpbiB0aGUgbXRyZWUgb3V0cHV0LgorUHJlZml4IHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayB0byBkaXNhYmxlIHRoZSBjb3JyZXNwb25kaW5nIGtleXdvcmQuCitUaGUgZGVmYXVsdCBpcyBlcXVpdmFsZW50IHRvCisuRHEgZGV2aWNlLCBmbGFncywgZ2lkLCBnbmFtZSwgbGluaywgbW9kZSwgbmxpbmssIHNpemUsIHRpbWUsIHR5cGUsIHVpZCwgdW5hbWUgLgorLkl0IENtIGFsbAorRW5hYmxlcyBhbGwgb2YgdGhlIGFib3ZlIGtleXdvcmRzLgorLkl0IENtIHVzZS1zZXQKK0VuYWJsZXMgZ2VuZXJhdGlvbiBvZgorLkNtIC9zZXQKK2xpbmVzIHRoYXQgc3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMuCisuSXQgQ20gaW5kZW50CitYWFggbmVlZHMgZXhwbGFuYXRpb24gWFhYCisuRWwKKy5JdCBGb3JtYXQgbmV3YworLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKKy5JdCBGb3JtYXQgcGF4CisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSwgZ3JvdXAgYW5kIHVzZXIgbmFtZXMuCitUaGUgdmFsdWUgaXMgb25lIG9mCisuRHEgQklOQVJZCitvcgorLkRxIFVURi04IC4KK1dpdGgKKy5EcSBCSU5BUlkKK3RoZXJlIGlzIG5vIGNoYXJhY3RlciBjb252ZXJzaW9uLCB3aXRoCisuRHEgVVRGLTgKK25hbWVzIGFyZSBjb252ZXJ0ZWQgdG8gVVRGLTguCisuSXQgQ20geGF0dHJoZWFkZXIKK1doZW4gc3RvcmluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLCB0aGlzIG9wdGlvbiBjb25maWd1cmVzIHdoaWNoCitoZWFkZXJzIHNob3VsZCBiZSB3cml0dGVuLiBUaGUgdmFsdWUgaXMgb25lIG9mCisuRHEgYWxsICwKKy5EcSBMSUJBUkNISVZFICwKK29yCisuRHEgU0NISUxZIC4KK0J5IGRlZmF1bHQsIGJvdGgKKy5EcSBMSUJBUkNISVZFLnhhdHRyCithbmQKKy5EcSBTQ0hJTFkueGF0dHIKK2hlYWRlcnMgYXJlIHdyaXR0ZW4uCisuRWwKKy5JdCBGb3JtYXQgdXN0YXIKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlLCBncm91cCBhbmQgdXNlciBuYW1lcy4KKy5FbAorLkl0IEZvcm1hdCB2N3RhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUsIGdyb3VwIGFuZCB1c2VyIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IHdhcmMKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBvbWl0LXdhcmNpbmZvCitTZXQgdG8KKy5EcSB0cnVlCit0byBkaXNhYmxlIG91dHB1dCBvZiB0aGUgd2FyY2luZm8gcmVjb3JkLgorLkVsCisuSXQgRm9ybWF0IHhhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNoZWNrc3VtIE5zID0gTnMgQXIgdHlwZQorVXNlCisuQXIgdHlwZQorYXMgZmlsZSBjaGVja3N1bSBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIG5vbmUgLAorLkRxIG1kNSAsCithbmQKKy5EcSBzaGExCisuUHEgZGVmYXVsdCAuCisuSXQgQ20gY29tcHJlc3Npb24gTnMgPSBOcyBBciB0eXBlCitVc2UKKy5BciB0eXBlCithcyBjb21wcmVzc2lvbiBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIG5vbmUgLAorLkRxIGJ6aXAyICwKKy5EcSBnemlwCisuUHEgZGVmYXVsdCAsCisuRHEgbHptYQorYW5kCisuRHEgeHogLgorLkl0IENtIGNvbXByZXNzaW9uX2xldmVsCitUaGUgdmFsdWUgaXMgYSBkZWNpbWFsIGludGVnZXIgZnJvbSAxIHRvIDkgc3BlY2lmeWluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwuCisuSXQgQ20gdG9jLWNoZWNrc3VtIE5zID0gTnMgQXIgdHlwZQorVXNlCisuQXIgdHlwZQorYXMgdGFibGUgb2YgY29udGVudHMgY2hlY2tzdW0gbWV0aG9kLgorU3VwcG9ydGVkIHZhbHVlcyBhcmUKKy5EcSBub25lICwKKy5EcSBtZDUKK2FuZAorLkRxIHNoYTEKKy5QcSBkZWZhdWx0IC4KKy5FbAogLkl0IEZvcm1hdCB6aXAKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBjb21wcmVzc2lvbgpAQCAtNDA4LDYgKzYxMSwyOSBAQAogdG8gaW5kaWNhdGUgaG93IHRoZSBmb2xsb3dpbmcgZW50cmllcyBzaG91bGQgYmUgY29tcHJlc3NlZC4KIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgaWdub3JlZCBmb3IgZGlyZWN0b3JpZXMsIHN5bWJvbGljIGxpbmtzLAogYW5kIG90aGVyIHNwZWNpYWwgZW50cmllcy4KKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitjb21wcmVzc2lvbiBsZXZlbC4KK1ZhbHVlcyBiZXR3ZWVuIDAgYW5kIDkgYXJlIHN1cHBvcnRlZC4KK0EgY29tcHJlc3Npb24gbGV2ZWwgb2YgMCBzd2l0Y2hlcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvCisuRHEgc3RvcmUgLAorb3RoZXIgdmFsdWVzIHdpbGwgZW5hYmxlCisuRHEgZGVmbGF0ZQorY29tcHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gbGV2ZWwuCisuSXQgQ20gZW5jcnlwdGlvbgorRW5hYmxlIGVuY3J5cHRpb24gdXNpbmcgdHJhZGl0aW9uYWwgemlwIGVuY3J5cHRpb24uCisuSXQgQ20gZW5jcnlwdGlvbiBOcyA9IE5zIEFyIHR5cGUKK1VzZQorLkFyIHR5cGUKK2FzIGVuY3J5cHRpb24gdHlwZS4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlCisuRHEgemlwY3J5cHQKKy5QcSB0cmFkaXRpb25hbCB6aXAgZW5jcnlwdGlvbiAsCisuRHEgYWVzMTI4CisuUHEgV2luWmlwIEFFUy0xMjggZW5jcnlwdGlvbgorYW5kCisuRHEgYWVzMjU2CisuUHEgV2luWmlwIEFFUy0yNTYgZW5jcnlwdGlvbiAuCiAuSXQgQ20gZXhwZXJpbWVudGFsCiBUaGlzIGJvb2xlYW4gb3B0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhwZXJpbWVudGFsIFppcCBmZWF0dXJlcwogdGhhdCBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBvdGhlciBaaXAgaW1wbGVtZW50YXRpb25zLgpAQCAtNDE2LDcgKzY0Miw4IEBACiBBbGwgQ1JDIGZpZWxkcyBhcmUgc2V0IHRvIHplcm8uCiBJdCBzaG91bGQgbm90IGJlIHVzZWQgZXhjZXB0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogLkl0IENtIGhkcmNoYXJzZXQKLVRoaXMgc2V0cyB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGZvciBmaWxlbmFtZXMuCitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgogLkl0IENtIHppcDY0CiBaaXA2NCBleHRlbnNpb25zIHByb3ZpZGUgYWRkaXRpb25hbCBmaWxlIHNpemUgaW5mb3JtYXRpb24KIGZvciBlbnRyaWVzIGxhcmdlciB0aGFuIDQgR2lCLgpAQCAtNDY1LDkgKzY5Miw5IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKLS5YciBhcmNoaXZlX3dyaXRlIDMKKy5YciBhcmNoaXZlX3dyaXRlIDMgLAorLlhyIGxpYmFyY2hpdmUgMwogLlNoIEhJU1RPUlkKIFRoZQogLk5tIGxpYmFyY2hpdmUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfcGFzc3BocmFzZS4zCmluZGV4IDI1ODU1OTUuLjJkYjc3MDMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X3Bhc3NwaHJhc2UuMwpAQCAtNDksNyArNDksNyBAQAogLlNoIERFU0NSSVBUSU9OCiAuQmwgLXRhZyAtd2lkdGggaW5kZW50CiAuSXQgRm4gYXJjaGl2ZV93cml0ZV9zZXRfcGFzc3BocmFzZQotU2V0IGEgcGFzc3BocmFzZSBmb3Igd3JpdGluZyBhbiBlbmNyeXB0aW9uIGFyY2hpdmUuCitTZXQgYSBwYXNzcGhyYXNlIGZvciB3cml0aW5nIGFuIGVuY3J5cHRlZCBhcmNoaXZlLgogSWYKIC5BciBwYXNzcGhyYXNlCiBpcwpAQCAtNTksMTYgKzU5LDE2IEBACiB3aWxsIGJlIHJldHVybmVkLgogT3RoZXJ3aXNlLAogLkNtIEFSQ0hJVkVfT0sKLXdpbGwgYmUgcmV0dXJuZWQuIAord2lsbCBiZSByZXR1cm5lZC4KIC5JdCBGbiBhcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlX2NhbGxiYWNrCi1SZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCB0byBnZXQgYSBwYXNzcGhyYXNlCi1mb3IgZW5jcnB0aW9uIGlmIHRoZSBwYXNzcGhyYXNlIHdhcyBub3Qgc2V0IGJ5IHRoZQorUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCB0byBnZXQgYSBwYXNzcGhyYXNlCitmb3IgZW5jcnlwdGlvbiBpZiB0aGUgcGFzc3BocmFzZSB3YXMgbm90IHNldCBieSB0aGUKIC5GbiBhcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlCiBmdW5jdGlvbi4KIC5FbAogLlwiIC5TaCBFUlJPUlMKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCi0uWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzCisuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3h4aGFzaC5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmgKaW5kZXggNDI3MjQxNi4uMWM3MTMxYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmgKQEAgLTI0LDEyICsyNCwxMyBAQAogICoKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfWFhIQVNIX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9YWEhBU0hfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1hYSEFTSF9ICi0jZGVmaW5lIEFSQ0hJVkVfWFhIQVNIX0gKIAogdHlwZWRlZiBlbnVtIHsgWFhIX09LPTAsIFhYSF9FUlJPUiB9IFhYSF9lcnJvcmNvZGU7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9jb25maWdfZnJlZWJzZC5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmgKaW5kZXggYmUyNTI1OC4uZjE2ZmQzNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmgKQEAgLTIxMCw2ICsyMTAsNyBAQAogI2RlZmluZSBIQVZFX1RaU0VUIDEKICNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQogI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKyNkZWZpbmUgSEFWRV9VTkxJTktBVCAxCiAjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQogI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyAxCiAjZGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCAxCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvZmlsdGVyX2ZvcmsuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oCmluZGV4IGEyODI3MmIuLjkwOGU3Y2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2ZpbHRlcl9mb3JrLmggMjAxMDg3IDIwMDktMTItMjggMDI6MTg6MjZaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEZJTFRFUl9GT1JLX0gKKyNkZWZpbmUgRklMVEVSX0ZPUktfSAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBGSUxURVJfRk9SS19ICi0jZGVmaW5lIEZJTFRFUl9GT1JLX0gKLQogcGlkX3QKIF9fYXJjaGl2ZV9jcmVhdGVfY2hpbGQoY29uc3QgY2hhciAqY21kLCBpbnQgKmNoaWxkX3N0ZGluLCBpbnQgKmNoaWxkX3N0ZG91dCk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2NoYW5nZXMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2NoYW5nZXMuMwppbmRleCBhZGM4N2ZlLi42YmY4ZGIwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV9jaGFuZ2VzLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfY2hhbmdlcy4zCkBAIC0zNSw3ICszNSw2IEBACiBUaGlzIHBhZ2UgZGVzY3JpYmVzIHVzZXItdmlzaWJsZSBjaGFuZ2VzIGluIGxpYmFyY2hpdmUzLCBhbmQgbGlzdHMKIHB1YmxpYyBmdW5jdGlvbnMgYW5kIG90aGVyIHN5bWJvbHMgY2hhbmdlZCwgZGVwcmVjYXRlZCBvciByZW1vdmVkCiBpbiBsaWJhcmNoaXZlMywgYWxvbmcgd2l0aCB0aGVpciByZXBsYWNlbWVudHMgaWYgYW55LgotLlBwCiAuXCIKIC5TcyBNdWx0aXBsZSBGaWx0ZXJzCiAuXCIKQEAgLTMzMCwxMyArMzI5LDEzIEBACiAuTGkgMTAyNDAKIC5FbAogLlNoIFNFRSBBTFNPCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKKy5YciBhcmNoaXZlX3V0aWwgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAotLlhyIGFyY2hpdmVfdXRpbCAzCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV9pbnRlcm5hbHMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zCmluZGV4IDgyNzVkNjYuLmQ2NzJmM2UgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zCkBAIC0zNTAsOCArMzUwLDggQEAKIC5YciBhcmNoaXZlX2VudHJ5IDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAotLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX3dyaXRlX2Rpc2sgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCiAuTm0gbGliYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL210cmVlLjUgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNQppbmRleCBlNjA3ZTRhLi44MTQ3Nzk2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNQorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNQpAQCAtMTMzLDcgKzEzMyw2IEBACiAuU3kgY2hhcgogZmlsZSB0eXBlcy4KIFRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotLlBwCiAuQmwgLXRhZyAtd2lkdGggNG4KIC5JdCBBciBmb3JtYXQgLCBOcyBBciBtYWpvciAsIE5zIEFyIG1pbm9yIE5zIEJvICwgTnMgQXIgc3VidW5pdCBCYwogQSBkZXZpY2Ugd2l0aApAQCAtMTY1LDggKzE2NCw4IEBACiAuU3kgc29sYXJpcyAsCiAuU3kgc3Vub3MgLAogLlN5IHN2cjMgLAotLlN5IHN2cjQgLCAgCi1hbmQgCisuU3kgc3ZyNCAsCithbmQKIC5TeSB1bHRyaXggLgogLlBwCiBTZWUKQEAgLTI4OCwxMiArMjg3LDEwIEBACiAuSXQgQ20gdW5hbWUKIFRoZSBmaWxlIG93bmVyIGFzIGEgc3ltYm9saWMgbmFtZS4KIC5FbAotLlBwCiAuU2ggU0VFIEFMU08KIC5YciBja3N1bSAxICwKIC5YciBmaW5kIDEgLAogLlhyIG10cmVlIDgKLS5TaCBCVUdTCiAuU2ggSElTVE9SWQogVGhlCiAuTm0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS90YXIuNSBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS90YXIuNQppbmRleCAzMGI4MzdkLi4zNGFkNGY3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvdGFyLjUKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL3Rhci41CkBAIC00NDEsNyArNDQxLDcgQEAKIFZlbmRvci1zcGVjaWZpYyBhdHRyaWJ1dGVzIHVzZWQgYnkgSm9lcmcgU2NoaWxsaW5nJ3MKIC5ObSBzdGFyCiBpbXBsZW1lbnRhdGlvbi4KLS5JdCBDbSBTQ0hJTFkuYWNsLmFjY2VzcyAsIENtIFNDSElMWS5hY2wuZGVmYXVsdCwgQ20gU0NISUxZLmFjbC5hY2UKKy5JdCBDbSBTQ0hJTFkuYWNsLmFjY2VzcyAsIENtIFNDSElMWS5hY2wuZGVmYXVsdCAsIENtIFNDSElMWS5hY2wuYWNlCiBTdG9yZXMgdGhlIGFjY2VzcywgZGVmYXVsdCBhbmQgTkZTdjQgQUNMcyBhcyB0ZXh0dWFsIHN0cmluZ3MgaW4gYSBmb3JtYXQKIHRoYXQgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IFBPU0lYLjFlIGRyYWZ0IDE3LgogSW4gcGFydGljdWxhciwgZWFjaCB1c2VyIG9yIGdyb3VwIGFjY2VzcyBzcGVjaWZpY2F0aW9uIGNhbiBpbmNsdWRlCkBAIC00NTYsNyArNDU2LDcgQEAKIC5JdCBDbSBTQ0hJTFkucmVhbHNpemUKIFRoZSBmdWxsIHNpemUgb2YgdGhlIGZpbGUgb24gZGlzay4KIFhYWCBleHBsYWluPyBYWFgKLS5JdCBDbSBTQ0hJTFkuZGV2LCBDbSBTQ0hJTFkuaW5vICwgQ20gU0NISUxZLm5saW5rcworLkl0IENtIFNDSElMWS5kZXYgLCBDbSBTQ0hJTFkuaW5vICwgQ20gU0NISUxZLm5saW5rcwogVGhlIGRldmljZSBudW1iZXIsIGlub2RlIG51bWJlciwgYW5kIGxpbmsgY291bnQgZm9yIHRoZSBlbnRyeS4KIEluIHBhcnRpY3VsYXIsIG5vdGUgdGhhdCBhIHBheCBpbnRlcmNoYW5nZSBmb3JtYXQgYXJjaGl2ZSB1c2luZyBKb2VyZwogU2NoaWxsaW5nJ3MKQEAgLTQ3Myw3ICs0NzMsNyBAQAogLkRxIGN0aW1lCiBhdHRyaWJ1dGUsIHdoaWNoIHJlZmVycyB0byB0aGUgdGltZSB3aGVuIHRoZSBmaWxlCiBtZXRhZGF0YSB3YXMgbGFzdCBjaGFuZ2VkLikKLS5JdCBDbSBMSUJBUkNISVZFLnhhdHRyLiBOcyBBciBuYW1lc3BhY2UgTnMgLiBOcyBBciBrZXkKKy5JdCBDbSBMSUJBUkNISVZFLnhhdHRyIC4gTnMgQXIgbmFtZXNwYWNlIC4gTnMgQXIga2V5CiBMaWJhcmNoaXZlIHN0b3JlcyBQT1NJWC4xZS1zdHlsZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHVzaW5nCiBrZXlzIG9mIHRoaXMgZm9ybS4KIFRoZQpAQCAtODkwLDcgKzg5MCw4IEBACiAuSXQgQ20gTQogR05VIHRhciBtdWx0aXZvbHVtZSBtYXJrZXIsIGluZGljYXRpbmcgdGhlIGZpbGUgaXMgYSBjb250aW51YXRpb24gb2YgYSBmaWxlIGZyb20gdGhlIHByZXZpb3VzIHZvbHVtZS4KIC5JdCBDbSBOCi1HTlUgdGFyIGxvbmcgZmlsZW5hbWUgc3VwcG9ydC4gIERlcHJlY2F0ZWQuCitHTlUgdGFyIGxvbmcgZmlsZW5hbWUgc3VwcG9ydC4KK0RlcHJlY2F0ZWQuCiAuSXQgQ20gUwogR05VIHRhciBzcGFyc2UgcmVndWxhciBmaWxlLgogLkl0IENtIFYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ01ha2VMaXN0cy50eHQKaW5kZXggNjA2N2I3ZC4uMWIwMjVmYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ01ha2VMaXN0cy50eHQKQEAgLTM3LDQgKzM3LDQgQEAKIAogYWRkX2xpYnJhcnkoY21saWJyaGFzaCAke2xpYnJoYXNoX3NvdXJjZXN9KQogCi1pbnN0YWxsKEZJTEVTIENPUFlJTkcgUkVBRE1FIERFU1RJTkFUSU9OICR7Q01BS0VfRE9DX0RJUn0vY21saWJyaGFzaCkKK2luc3RhbGwoRklMRVMgQ09QWUlORyBERVNUSU5BVElPTiAke0NNQUtFX0RPQ19ESVJ9L2NtbGlicmhhc2gpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9DT1BZSU5HIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ09QWUlORwppbmRleCBiZjY1ZWUxLi5iZTdkNGE5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9DT1BZSU5HCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NPUFlJTkcKQEAgLTEsMTUgKzEsMTUgQEAKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSGFzaCBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCU0QgWmVybyBDbGF1c2UgTGljZW5zZQogCi1Db3B5cmlnaHQgKGMpIDIwMDUtMjAxNCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KK0NvcHlyaWdodCAoYykgMjAwNSwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAKLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci1vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvICB1c2UsICBjb3B5LCAgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSAgdGhlIFNvZnR3YXJlICBpcwotZnVybmlzaGVkIHRvIGRvIHNvLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAKLVRoZSBTb2Z0d2FyZSAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dCBXSVRIT1VUCi1BTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlICB0aGlzICBwcm9ncmFtICBhdCAgeW91ciAgb3duICByaXNrIQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKK1JFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KK0xPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCitPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL1JFQURNRSBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhNDkyZi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgPT09IE5vdGVzIG9uIFJIYXNoIExpY2Vuc2UgPT09Ci0KLVRoZSBSSGFzaCBwcm9ncmFtIGFuZCBMaWJSSGFzaCBsaWJyYXJ5IGFyZSBkaXN0cmlidXRlZCB1bmRlciAgUkhhc2ggTGljZW5zZSwKLXNlZSB0aGUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLiAgSW4gcGFydGljdWxhciwgIHRoZSBwcm9ncmFtLCAgdGhlIGxpYnJhcnkKLWFuZCAgc291cmNlIGNvZGUgIGNhbiBiZSAgdXNlZCAgZnJlZSBvZiBjaGFyZ2UgIHVuZGVyICB0aGUgIE1JVCwgIEJTRCwgIEdQTCwKLWNvbW1lcmNpYWwgb3IgZnJlZXdhcmUgbGljZW5zZSB3aXRob3V0IGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zLiAgSW4gdGhlIGNhc2UKLXRoZSBPU0ktYXBwcm92ZWQgbGljZW5zZSBpcyByZXF1aXJlZCB0aGUgIE1JVCBsaWNlbnNlIHNob3VsZCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5jCmluZGV4IGZjMDE2OTAuLmNkZDQwNTMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9hbGdvcml0aG1zLmMKQEAgLTEsMTcgKzEsMTcgQEAKIC8qIGFsZ29yaXRobXMuYyAtIHRoZSBhbGdvcml0aG1zIHN1cHBvcnRlZCBieSB0aGUgcmhhc2ggbGlicmFyeQogICoKLSAqIENvcHlyaWdodDogMjAxMS0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDExLCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yNyw3ICsyNyw4IEBACiAjaW5jbHVkZSAiY3JjMzIuaCIKICNpbmNsdWRlICJlZDJrLmgiCiAjaW5jbHVkZSAiZWRvbnIuaCIKLSNpbmNsdWRlICJnb3N0LmgiCisjaW5jbHVkZSAiZ29zdDEyLmgiCisjaW5jbHVkZSAiZ29zdDk0LmgiCiAjaW5jbHVkZSAiaGFzMTYwLmgiCiAjaW5jbHVkZSAibWQ0LmgiCiAjZW5kaWYKQEAgLTU0LDE4ICs1NSwxMyBAQAogI2Vsc2UKICMgZGVmaW5lIE5FRURfT1BFTlNTTF9JTklUIDAKICNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLwotI2lmZGVmIEdFTkVSQVRFX0dPU1RfTE9PS1VQX1RBQkxFCi0jIGRlZmluZSBORUVEX0dPU1RfSU5JVCAoUkhBU0hfR09TVCB8IFJIQVNIX0dPU1RfQ1JZUFRPUFJPKQorI2lmZGVmIEdFTkVSQVRFX0dPU1Q5NF9MT09LVVBfVEFCTEUKKyMgZGVmaW5lIE5FRURfR09TVDk0X0lOSVQgKFJIQVNIX0dPU1Q5NCB8IFJIQVNIX0dPU1Q5NF9DUllQVE9QUk8pCiAjZWxzZQotIyBkZWZpbmUgTkVFRF9HT1NUX0lOSVQgMAotI2VuZGlmIC8qIEdFTkVSQVRFX0dPU1RfTE9PS1VQX1RBQkxFICovCi0jaWZkZWYgR0VORVJBVEVfQ1JDMzJfVEFCTEUKLSMgZGVmaW5lIE5FRURfQ1JDMzJfSU5JVCBSSEFTSF9DUkMzMgotI2Vsc2UKLSMgZGVmaW5lIE5FRURfQ1JDMzJfSU5JVCAwCi0jZW5kaWYgLyogR0VORVJBVEVfQ1JDMzJfVEFCTEUgKi8KKyMgZGVmaW5lIE5FRURfR09TVDk0X0lOSVQgMAorI2VuZGlmIC8qIEdFTkVSQVRFX0dPU1Q5NF9MT09LVVBfVEFCTEUgKi8KIAotI2RlZmluZSBSSEFTSF9ORUVEX0lOSVRfQUxHIChORUVEX0NSQzMyX0lOSVQgfCBORUVEX0dPU1RfSU5JVCB8IE5FRURfT1BFTlNTTF9JTklUKQorI2RlZmluZSBSSEFTSF9ORUVEX0lOSVRfQUxHIChORUVEX0dPU1Q5NF9JTklUIHwgTkVFRF9PUEVOU1NMX0lOSVQpCiB1bnNpZ25lZCByaGFzaF91bmluaXRpYWxpemVkX2FsZ29yaXRobXMgPSBSSEFTSF9ORUVEX0lOSVRfQUxHOwogCiByaGFzaF9oYXNoX2luZm8qIHJoYXNoX2luZm9fdGFibGUgPSByaGFzaF9oYXNoX2luZm9fZGVmYXVsdDsKQEAgLTc1LDEwICs3MSwxNCBAQAogc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJfaW5pdCh1aW50MzJfdCogY3JjMzIpOwogc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJfdXBkYXRlKHVpbnQzMl90KiBjcmMzMiwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgdm9pZCByaGFzaF9jcmMzMl9maW5hbCh1aW50MzJfdCogY3JjMzIsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CitzdGF0aWMgdm9pZCByaGFzaF9jcmMzMmNfaW5pdCh1aW50MzJfdCogY3JjMzIpOworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX3VwZGF0ZSh1aW50MzJfdCogY3JjMzIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX2ZpbmFsKHVpbnQzMl90KiBjcmMzMiwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKICNlbmRpZgogCiAjaWYgMAotcmhhc2hfaW5mbyBpbmZvX2NyYzMyID0geyBSSEFTSF9DUkMzMiwgRl9CRTMyLCA0LCAiQ1JDMzIiLCAiY3JjMzIiIH07CityaGFzaF9pbmZvIGluZm9fY3JjMzIgID0geyBSSEFTSF9DUkMzMiwgIEZfQkUzMiwgNCwgIkNSQzMyIiwgImNyYzMyIiB9Oworcmhhc2hfaW5mbyBpbmZvX2NyYzMyYyA9IHsgUkhBU0hfQ1JDMzJDLCBGX0JFMzIsIDQsICJDUkMzMkMiLCAiY3JjMzJjIiB9Owogcmhhc2hfaW5mbyBpbmZvX21kNCA9IHsgUkhBU0hfTUQ0LCBGX0xFMzIsIDE2LCAiTUQ0IiwgIm1kNCIgfTsKICNlbmRpZgogcmhhc2hfaW5mbyBpbmZvX21kNSA9IHsgUkhBU0hfTUQ1LCBGX0xFMzIsIDE2LCAiTUQ1IiwgIm1kNSIgfTsKQEAgLTkxLDggKzkxLDEwIEBACiByaGFzaF9pbmZvIGluZm9fYWljaCA9IHsgUkhBU0hfQUlDSCwgICAgICBGX0JTMzIsIDIwLCAiQUlDSCIsICJhaWNoIiB9Owogcmhhc2hfaW5mbyBpbmZvX3doaXJscG9vbCA9IHsgUkhBU0hfV0hJUkxQT09MLCBGX0JFNjQsIDY0LCAiV0hJUkxQT09MIiwgIndoaXJscG9vbCIgfTsKIHJoYXNoX2luZm8gaW5mb19ybWQxNjAgPSB7IFJIQVNIX1JJUEVNRDE2MCwgIEZfTEUzMiwgMjAsICJSSVBFTUQtMTYwIiwgInJpcGVtZDE2MCIgfTsKLXJoYXNoX2luZm8gaW5mb19nb3N0ID0gICB7IFJIQVNIX0dPU1QsICAgICAgIEZfTEUzMiwgMzIsICJHT1NUIiwgImdvc3QiIH07Ci1yaGFzaF9pbmZvIGluZm9fZ29zdHBybyA9IHsgUkhBU0hfR09TVF9DUllQVE9QUk8sIEZfTEUzMiwgMzIsICJHT1NULUNSWVBUT1BSTyIsICJnb3N0LWNyeXB0b3BybyIgfTsKK3JoYXNoX2luZm8gaW5mb19nb3N0MTJfMjU2ID0geyBSSEFTSF9HT1NUMTJfMjU2LCBGX0xFNjQsIDMyLCAiR09TVDEyLTI1NiIsICJnb3N0MTItMjU2IiB9Oworcmhhc2hfaW5mbyBpbmZvX2dvc3QxMl81MTIgPSB7IFJIQVNIX0dPU1QxMl81MTIsIEZfTEU2NCwgNjQsICJHT1NUMTItNTEyIiwgImdvc3QxMi01MTIiIH07CityaGFzaF9pbmZvIGluZm9fZ29zdDk0ID0geyBSSEFTSF9HT1NUOTQsICAgICAgIEZfTEUzMiwgMzIsICJHT1NUOTQiLCAiZ29zdDk0IiB9Oworcmhhc2hfaW5mbyBpbmZvX2dvc3Q5NHBybyA9IHsgUkhBU0hfR09TVDk0X0NSWVBUT1BSTywgRl9MRTMyLCAzMiwgIkdPU1Q5NC1DUllQVE9QUk8iLCAiZ29zdDk0LWNyeXB0b3BybyIgfTsKIHJoYXNoX2luZm8gaW5mb19oYXMxNjAgPSB7IFJIQVNIX0hBUzE2MCwgICAgIEZfTEUzMiwgMjAsICJIQVMtMTYwIiwgImhhczE2MCIgfTsKIHJoYXNoX2luZm8gaW5mb19zbmYxMjggPSB7IFJIQVNIX1NORUZSVTEyOCwgIEZfQkUzMiwgMTYsICJTTkVGUlUtMTI4IiwgInNuZWZydTEyOCIgfTsKIHJoYXNoX2luZm8gaW5mb19zbmYyNTYgPSB7IFJIQVNIX1NORUZSVTI1NiwgIEZfQkUzMiwgMzIsICJTTkVGUlUtMjU2IiwgInNuZWZydTI1NiIgfTsKQEAgLTExNyw5ICsxMTksMTAgQEAKICNkZWZpbmUgdXBkKG5hbWUpICgocHVwZGF0ZV90KShuYW1lIyNfdXBkYXRlKSkKICNkZWZpbmUgZmluKG5hbWUpICgocGZpbmFsX3QpKG5hbWUjI19maW5hbCkpCiAjZGVmaW5lIGl1ZihuYW1lKSBpbmkobmFtZSksIHVwZChuYW1lKSwgZmluKG5hbWUpCisjZGVmaW5lIGl1ZjIobmFtZTEsIG5hbWUyKSBpbmkobmFtZTEpLCB1cGQobmFtZTIpLCBmaW4obmFtZTIpCiAjZGVmaW5lIGRpdWYobmFtZSkgZGdzaGZ0KG5hbWUpLCBpbmkobmFtZSksIHVwZChuYW1lKSwgZmluKG5hbWUpCiAKLS8qIGluZm9ybWF0aW9uIGFib3V0IGFsbCBoYXNoZXMgKi8KKy8qIGluZm9ybWF0aW9uIGFib3V0IGFsbCBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMgKi8KIHJoYXNoX2hhc2hfaW5mbyByaGFzaF9oYXNoX2luZm9fZGVmYXVsdFtSSEFTSF9IQVNIX0NPVU5UXSA9CiB7CiAjaWYgMApAQCAtMTM1LDI4ICsxMzgsMzUgQEAKIAl7ICZpbmZvX2FpY2gsIHNpemVvZihhaWNoX2N0eCksIGRnc2hmdDIoYWljaCwgc2hhMV9jb250ZXh0Lmhhc2gpLCBpdWYocmhhc2hfYWljaCksIChwY2xlYW51cF90KXJoYXNoX2FpY2hfY2xlYW51cCB9LCAvKiAxNjAgYml0ICovCiAJeyAmaW5mb193aGlybHBvb2wsIHNpemVvZih3aGlybHBvb2xfY3R4KSwgZGdzaGZ0KHdoaXJscG9vbCksIGl1ZihyaGFzaF93aGlybHBvb2wpLCAwIH0sIC8qIDUxMiBiaXQgKi8KIAl7ICZpbmZvX3JtZDE2MCwgc2l6ZW9mKHJpcGVtZDE2MF9jdHgpLCBkZ3NoZnQocmlwZW1kMTYwKSwgaXVmKHJoYXNoX3JpcGVtZDE2MCksIDAgfSwgLyogMTYwIGJpdCAqLwotCXsgJmluZm9fZ29zdCwgc2l6ZW9mKGdvc3RfY3R4KSwgZGdzaGZ0KGdvc3QpLCBpdWYocmhhc2hfZ29zdCksIDAgfSwgLyogMjU2IGJpdCAqLwotCXsgJmluZm9fZ29zdHBybywgc2l6ZW9mKGdvc3RfY3R4KSwgZGdzaGZ0KGdvc3QpLCBpbmkocmhhc2hfZ29zdF9jcnlwdG9wcm8pLCB1cGQocmhhc2hfZ29zdCksIGZpbihyaGFzaF9nb3N0KSwgMCB9LCAvKiAyNTYgYml0ICovCisJeyAmaW5mb19nb3N0OTQsIHNpemVvZihnb3N0OTRfY3R4KSwgZGdzaGZ0KGdvc3Q5NCksIGl1ZihyaGFzaF9nb3N0OTQpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKwl7ICZpbmZvX2dvc3Q5NHBybywgc2l6ZW9mKGdvc3Q5NF9jdHgpLCBkZ3NoZnQoZ29zdDk0KSwgaXVmMihyaGFzaF9nb3N0OTRfY3J5cHRvcHJvLCByaGFzaF9nb3N0OTQpLCAwIH0sIC8qIDI1NiBiaXQgKi8KIAl7ICZpbmZvX2hhczE2MCwgc2l6ZW9mKGhhczE2MF9jdHgpLCBkZ3NoZnQoaGFzMTYwKSwgaXVmKHJoYXNoX2hhczE2MCksIDAgfSwgLyogMTYwIGJpdCAqLwotCXsgJmluZm9fc25mMTI4LCBzaXplb2Yoc25lZnJ1X2N0eCksIGRnc2hmdChzbmVmcnUpLCBpbmkocmhhc2hfc25lZnJ1MTI4KSwgdXBkKHJoYXNoX3NuZWZydSksIGZpbihyaGFzaF9zbmVmcnUpLCAwIH0sIC8qIDEyOCBiaXQgKi8KLQl7ICZpbmZvX3NuZjI1Niwgc2l6ZW9mKHNuZWZydV9jdHgpLCBkZ3NoZnQoc25lZnJ1KSwgaW5pKHJoYXNoX3NuZWZydTI1NiksIHVwZChyaGFzaF9zbmVmcnUpLCBmaW4ocmhhc2hfc25lZnJ1KSwgMCB9LCAvKiAyNTYgYml0ICovCisJeyAmaW5mb19nb3N0MTJfMjU2LCBzaXplb2YoZ29zdDEyX2N0eCksIGRnc2hmdDIoZ29zdDEyLCBoKSArIDMyLCBpdWYyKHJoYXNoX2dvc3QxMl8yNTYsIHJoYXNoX2dvc3QxMiksIDAgfSwgLyogMjU2IGJpdCAqLworCXsgJmluZm9fZ29zdDEyXzUxMiwgc2l6ZW9mKGdvc3QxMl9jdHgpLCBkZ3NoZnQyKGdvc3QxMiwgaCksIGl1ZjIocmhhc2hfZ29zdDEyXzUxMiwgcmhhc2hfZ29zdDEyKSwgMCB9LCAvKiA1MTIgYml0ICovCiAjZW5kaWYKLQl7ICZpbmZvX3NoYTIyNCwgc2l6ZW9mKHNoYTI1Nl9jdHgpLCBkZ3NoZnQoc2hhMjU2KSwgaW5pKHJoYXNoX3NoYTIyNCksIHVwZChyaGFzaF9zaGEyNTYpLCBmaW4ocmhhc2hfc2hhMjU2KSwgMCB9LCAvKiAyMjQgYml0ICovCisJeyAmaW5mb19zaGEyMjQsIHNpemVvZihzaGEyNTZfY3R4KSwgZGdzaGZ0KHNoYTI1NiksIGl1ZjIocmhhc2hfc2hhMjI0LCByaGFzaF9zaGEyNTYpLCAwIH0sIC8qIDIyNCBiaXQgKi8KIAl7ICZpbmZvX3NoYTI1Niwgc2l6ZW9mKHNoYTI1Nl9jdHgpLCBkZ3NoZnQoc2hhMjU2KSwgaXVmKHJoYXNoX3NoYTI1NiksIDAgfSwgIC8qIDI1NiBiaXQgKi8KLQl7ICZpbmZvX3NoYTM4NCwgc2l6ZW9mKHNoYTUxMl9jdHgpLCBkZ3NoZnQoc2hhNTEyKSwgaW5pKHJoYXNoX3NoYTM4NCksIHVwZChyaGFzaF9zaGE1MTIpLCBmaW4ocmhhc2hfc2hhNTEyKSwgMCB9LCAvKiAzODQgYml0ICovCisJeyAmaW5mb19zaGEzODQsIHNpemVvZihzaGE1MTJfY3R4KSwgZGdzaGZ0KHNoYTUxMiksIGl1ZjIocmhhc2hfc2hhMzg0LCByaGFzaF9zaGE1MTIpLCAwIH0sIC8qIDM4NCBiaXQgKi8KIAl7ICZpbmZvX3NoYTUxMiwgc2l6ZW9mKHNoYTUxMl9jdHgpLCBkZ3NoZnQoc2hhNTEyKSwgaXVmKHJoYXNoX3NoYTUxMiksIDAgfSwgIC8qIDUxMiBiaXQgKi8KICNpZiAwCi0JeyAmaW5mb19lZHIyNTYsIHNpemVvZihlZG9ucl9jdHgpLCBkZ3NoZnQyKGVkb25yLCB1LmRhdGEyNTYuaGFzaCkgKyAzMiwgaXVmKHJoYXNoX2Vkb25yMjU2KSwgMCB9LCAgLyogMjU2IGJpdCAqLwotCXsgJmluZm9fZWRyNTEyLCBzaXplb2YoZWRvbnJfY3R4KSwgZGdzaGZ0MihlZG9uciwgdS5kYXRhNTEyLmhhc2gpICsgNjQsIGl1ZihyaGFzaF9lZG9ucjUxMiksIDAgfSwgIC8qIDUxMiBiaXQgKi8KKwl7ICZpbmZvX2VkcjI1Niwgc2l6ZW9mKGVkb25yX2N0eCksICBkZ3NoZnQyKGVkb25yLCB1LmRhdGEyNTYuaGFzaCkgKyAzMiwgaXVmKHJoYXNoX2Vkb25yMjU2KSwgMCB9LCAgLyogMjU2IGJpdCAqLworCXsgJmluZm9fZWRyNTEyLCBzaXplb2YoZWRvbnJfY3R4KSwgIGRnc2hmdDIoZWRvbnIsIHUuZGF0YTUxMi5oYXNoKSArIDY0LCBpdWYocmhhc2hfZWRvbnI1MTIpLCAwIH0sICAvKiA1MTIgYml0ICovCiAjZW5kaWYKLQl7ICZpbmZvX3NoYTNfMjI0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzIyNCksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDIyNCBiaXQgKi8KLQl7ICZpbmZvX3NoYTNfMjU2LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzI1NiksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDI1NiBiaXQgKi8KLQl7ICZpbmZvX3NoYTNfMzg0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzM4NCksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDM4NCBiaXQgKi8KLQl7ICZpbmZvX3NoYTNfNTEyLCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzUxMiksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDUxMiBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfMjI0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM18yMjQsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDIyNCBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfMjU2LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM18yNTYsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfMzg0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM18zODQsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDM4NCBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfNTEyLCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM181MTIsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDUxMiBiaXQgKi8KKyNpZiAwCisJeyAmaW5mb19jcmMzMmMsIHNpemVvZih1aW50MzJfdCksIDAsIGl1ZihyaGFzaF9jcmMzMmMpLCAwIH0sIC8qIDMyIGJpdCAqLworCXsgJmluZm9fc25mMTI4LCBzaXplb2Yoc25lZnJ1X2N0eCksIGRnc2hmdChzbmVmcnUpLCBpdWYyKHJoYXNoX3NuZWZydTEyOCwgcmhhc2hfc25lZnJ1KSwgMCB9LCAvKiAxMjggYml0ICovCisJeyAmaW5mb19zbmYyNTYsIHNpemVvZihzbmVmcnVfY3R4KSwgZGdzaGZ0KHNuZWZydSksIGl1ZjIocmhhc2hfc25lZnJ1MjU2LCByaGFzaF9zbmVmcnUpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKyNlbmRpZgogfTsKIAogLyoqCiAgKiBJbml0aWFsaXplIHJlcXVlc3RlZCBhbGdvcml0aG1zLgorICoKKyAqIEBwYXJhbSBtYXNrIGlkcyBvZiBoYXNoIHN1bXMgdG8gaW5pdGlhbGl6ZQogICovCiB2b2lkIHJoYXNoX2luaXRfYWxnb3JpdGhtcyh1bnNpZ25lZCBtYXNrKQogewpAQCAtMTY1LDE1ICsxNzUsMjYgQEAKIAkvKiB2ZXJpZnkgdGhhdCBSSEFTSF9IQVNIX0NPVU5UIGlzIHRoZSBpbmRleCBvZiB0aGUgbWFqb3IgYml0IG9mIFJIQVNIX0FMTF9IQVNIRVMgKi8KIAlhc3NlcnQoMSA9PSAoUkhBU0hfQUxMX0hBU0hFUyA+PiAoUkhBU0hfSEFTSF9DT1VOVCAtIDEpKSk7CiAKLSNpZmRlZiBHRU5FUkFURV9DUkMzMl9UQUJMRQotCXJoYXNoX2NyYzMyX2luaXRfdGFibGUoKTsKLSNlbmRpZgotI2lmZGVmIEdFTkVSQVRFX0dPU1RfTE9PS1VQX1RBQkxFCi0Jcmhhc2hfZ29zdF9pbml0X3RhYmxlKCk7CisjaWZkZWYgR0VORVJBVEVfR09TVDk0X0xPT0tVUF9UQUJMRQorCXJoYXNoX2dvc3Q5NF9pbml0X3RhYmxlKCk7CiAjZW5kaWYKIAlyaGFzaF91bmluaXRpYWxpemVkX2FsZ29yaXRobXMgPSAwOwogfQogCisvKioKKyAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBoYXNoIGZ1bmN0aW9uIGJ5IGl0cyBoYXNoX2lkLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiBwb2ludGVyIHRvIHRoZSByaGFzaF9pbmZvIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbgorICovCitjb25zdCByaGFzaF9pbmZvKiByaGFzaF9pbmZvX2J5X2lkKHVuc2lnbmVkIGhhc2hfaWQpCit7CisJaGFzaF9pZCAmPSBSSEFTSF9BTExfSEFTSEVTOworCS8qIGNoZWNrIHRoYXQgb25lIGFuZCBvbmx5IG9uZSBiaXQgaXMgc2V0ICovCisJaWYgKCFoYXNoX2lkIHx8IChoYXNoX2lkICYgKGhhc2hfaWQgLSAxKSkgIT0gMCkgcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJoYXNoX2luZm9fdGFibGVbcmhhc2hfY3R6KGhhc2hfaWQpXS5pbmZvOworfQorCiAjaWYgMAogLyogQ1JDMzIgaGVscGVyIGZ1bmN0aW9ucyAqLwogCkBAIC0yMTcsNCArMjM4LDQ1IEBACiAJcmVzdWx0WzJdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMiA+PiA4KSwgcmVzdWx0WzNdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMik7CiAjZW5kaWYKIH0KKworLyoqCisgKiBJbml0aWFsaXplIGNyYzMyYyBoYXNoLgorICoKKyAqIEBwYXJhbSBjcmMzMmMgcG9pbnRlciB0byB0aGUgaGFzaCB0byBpbml0aWFsaXplCisgKi8KK3N0YXRpYyB2b2lkIHJoYXNoX2NyYzMyY19pbml0KHVpbnQzMl90KiBjcmMzMmMpCit7CisJKmNyYzMyYyA9IDA7IC8qIG5vdGU6IGNvbnRleHQgc2l6ZSBpcyBzaXplb2YodWludDMyX3QpICovCit9CisKKy8qKgorICogQ2FsY3VsYXRlIG1lc3NhZ2UgQ1JDMzJDIGhhc2guCisgKiBDYW4gYmUgY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBjaHVua3Mgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgaGFzaGVkLgorICoKKyAqIEBwYXJhbSBjcmMzMmMgcG9pbnRlciB0byB0aGUgaGFzaAorICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCisgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKKyAqLworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX3VwZGF0ZSh1aW50MzJfdCogY3JjMzJjLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQoreworCSpjcmMzMmMgPSByaGFzaF9nZXRfY3JjMzJjKCpjcmMzMmMsIG1zZywgc2l6ZSk7Cit9CisKKy8qKgorICogU3RvcmUgY2FsY3VsYXRlZCBoYXNoIGludG8gdGhlIGdpdmVuIGFycmF5LgorICoKKyAqIEBwYXJhbSBjcmMzMmMgcG9pbnRlciB0byB0aGUgY3VycmVudCBoYXNoIHZhbHVlCisgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQorICovCitzdGF0aWMgdm9pZCByaGFzaF9jcmMzMmNfZmluYWwodWludDMyX3QqIGNyYzMyYywgdW5zaWduZWQgY2hhciogcmVzdWx0KQoreworI2lmIGRlZmluZWQoQ1BVX0lBMzIpIHx8IGRlZmluZWQoQ1BVX1g2NCkKKwkvKiBpbnRlbCBDUFVzIHN1cHBvcnQgYXNzaWdtZW50IHdpdGggbm9uIDMyLWJpdCBhbGlnbmVkIHBvaW50ZXJzICovCisJKih1bnNpZ25lZCopcmVzdWx0ID0gYmUybWVfMzIoKmNyYzMyYyk7CisjZWxzZQorCS8qIGNvcnJlY3Qgc2F2aW5nIEJpZ0VuZGlhbiBpbnRlZ2VyIG9uIGFsbCBhcmNocyAqLworCXJlc3VsdFswXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzJjID4+IDI0KSwgcmVzdWx0WzFdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMmMgPj4gMTYpOworCXJlc3VsdFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzJjID4+IDgpLCByZXN1bHRbM10gPSAodW5zaWduZWQgY2hhcikoKmNyYzMyYyk7CisjZW5kaWYKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5oCmluZGV4IDRkYjI1MTcuLjAxZGRhODggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9hbGdvcml0aG1zLmgKQEAgLTIsOSArMiw5IEBACiAjaWZuZGVmIFJIQVNIX0FMR09SSVRITVNfSAogI2RlZmluZSBSSEFTSF9BTEdPUklUSE1TX0gKIAotI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBmb3IgcHRyZGlmZl90ICovCiAjaW5jbHVkZSAicmhhc2guaCIKICNpbmNsdWRlICJieXRlX29yZGVyLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0xNSw4ICsxNSw0MCBAQAogIyBkZWZpbmUgUkhBU0hfQVBJCiAjZW5kaWYKIAorLyoqCisgKiBCaXQgZmxhZzogZGVmYXVsdCBoYXNoIG91dHB1dCBmb3JtYXQgaXMgYmFzZTMyLgorICovCisjZGVmaW5lIFJIQVNIX0lORk9fQkFTRTMyIDEKKworLyoqCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhhc2ggZnVuY3Rpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHJoYXNoX2luZm8KK3sKKwkvKioKKwkgKiBIYXNoIGZ1bmN0aW9uIGluZGVudGlmaWVyLgorCSAqLworCXVuc2lnbmVkIGhhc2hfaWQ7CisJLyoqCisJICogRmxhZ3MgYml0LW1hc2ssIGluY2x1ZGluZyBSSEFTSF9JTkZPX0JBU0UzMiBiaXQuCisJICovCisJdW5zaWduZWQgZmxhZ3M7CisJLyoqCisJIFRoZSBzaXplIG9mIG9mIHRoZSByYXcgbWVzc2FnZSBkaWdlc3QgaW4gYnl0ZXMuCisJICovCisJc2l6ZV90IGRpZ2VzdF9zaXplOworCS8qKgorCSAqIFRoZSBoYXNoIGZ1bmN0aW9uIG5hbWUuCisJICovCisJY29uc3QgY2hhciogbmFtZTsKKwkvKioKKwkgKiBUaGUgY29ycmVzcG9uZGluZyBwYXJhbWVudGVyIG5hbWUgaW4gYSBtYWduZXQgbGluay4KKwkgKi8KKwljb25zdCBjaGFyKiBtYWduZXRfbmFtZTsKK30gcmhhc2hfaW5mbzsKKwogdHlwZWRlZiB2b2lkICgqcGluaXRfdCkodm9pZCopOwotdHlwZWRlZiB2b2lkICgqcHVwZGF0ZV90KSh2b2lkICpjdHgsIGNvbnN0IHZvaWQqIG1zZywgc2l6ZV90IHNpemUpOwordHlwZWRlZiB2b2lkICgqcHVwZGF0ZV90KSh2b2lkKiBjdHgsIGNvbnN0IHZvaWQqIG1zZywgc2l6ZV90IHNpemUpOwogdHlwZWRlZiB2b2lkICgqcGZpbmFsX3QpKHZvaWQqLCB1bnNpZ25lZCBjaGFyKik7CiB0eXBlZGVmIHZvaWQgKCpwY2xlYW51cF90KSh2b2lkKik7CiAKQEAgLTI1LDcgKzU3LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3Qgcmhhc2hfaGFzaF9pbmZvCiB7Ci0Jcmhhc2hfaW5mbyAqaW5mbzsKKwlyaGFzaF9pbmZvKiBpbmZvOwogCXNpemVfdCBjb250ZXh0X3NpemU7CiAJcHRyZGlmZl90ICBkaWdlc3RfZGlmZjsKIAlwaW5pdF90ICAgIGluaXQ7CkBAIC00MCw3ICs3Miw3IEBACiB0eXBlZGVmIHN0cnVjdCByaGFzaF92ZWN0b3JfaXRlbQogewogCXN0cnVjdCByaGFzaF9oYXNoX2luZm8qIGhhc2hfaW5mbzsKLQl2b2lkICpjb250ZXh0OworCXZvaWQqIGNvbnRleHQ7CiB9IHJoYXNoX3ZlY3Rvcl9pdGVtOwogCiAvKioKQEAgLTUyLDggKzg0LDkgQEAKIAl1bnNpZ25lZCBoYXNoX3ZlY3Rvcl9zaXplOyAvKiBudW1iZXIgb2YgY29udGFpbmVkIGhhc2ggc3VtcyAqLwogCXVuc2lnbmVkIGZsYWdzOwogCXVuc2lnbmVkIHN0YXRlOwotCXZvaWQgKmNhbGxiYWNrLCAqY2FsbGJhY2tfZGF0YTsKLQl2b2lkICpidF9jdHg7CisJdm9pZCogY2FsbGJhY2s7CisJdm9pZCogY2FsbGJhY2tfZGF0YTsKKwl2b2lkKiBidF9jdHg7CiAJcmhhc2hfdmVjdG9yX2l0ZW0gdmVjdG9yWzFdOyAvKiBjb250ZXh0cyBvZiBjb250YWluZWQgaGFzaCBzdW1zICovCiB9IHJoYXNoX2NvbnRleHRfZXh0OwogCkBAIC02Myw2ICs5Niw3IEBACiBleHRlcm4gdW5zaWduZWQgcmhhc2hfdW5pbml0aWFsaXplZF9hbGdvcml0aG1zOwogCiBleHRlcm4gcmhhc2hfaW5mbyBpbmZvX2NyYzMyOworZXh0ZXJuIHJoYXNoX2luZm8gaW5mb19jcmMzMmM7CiBleHRlcm4gcmhhc2hfaW5mbyBpbmZvX21kNDsKIGV4dGVybiByaGFzaF9pbmZvIGluZm9fbWQ1OwogZXh0ZXJuIHJoYXNoX2luZm8gaW5mb19zaGExOwpAQCAtOTUsNyArMTI5LDcgQEAKICNkZWZpbmUgRl9TV0FQNjQgNAogCiAvKiBkZWZpbmUgZW5kaWFubmVzcyBmbGFncyAqLwotI2lmbmRlZiBDUFVfQklHX0VORElBTgorI2lmIElTX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgRl9MRTMyIDAKICNkZWZpbmUgRl9MRTY0IDAKICNkZWZpbmUgRl9CRTMyIEZfU1dBUDMyCkBAIC0xMDgsNiArMTQyLDcgQEAKICNlbmRpZgogCiB2b2lkIHJoYXNoX2luaXRfYWxnb3JpdGhtcyh1bnNpZ25lZCBtYXNrKTsKK2NvbnN0IHJoYXNoX2luZm8qIHJoYXNoX2luZm9fYnlfaWQodW5zaWduZWQgaGFzaF9pZCk7IC8qIGdldCBoYXNoIHN1bSBpbmZvIGJ5IGhhc2ggaWQgKi8KIAogI2lmIGRlZmluZWQoT1BFTlNTTF9SVU5USU1FKSAmJiAhZGVmaW5lZChVU0VfT1BFTlNTTCkKICMgZGVmaW5lIFVTRV9PUEVOU1NMCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmMKaW5kZXggOGNlNmZjOC4uZGUyYzU4MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuYwpAQCAtMSwyMSArMSwyMSBAQAogLyogYnl0ZV9vcmRlci5jIC0gYnl0ZSBvcmRlciByZWxhdGVkIHBsYXRmb3JtIGRlcGVuZGVudCByb3V0aW5lcywKICAqCi0gKiBDb3B5cmlnaHQ6IDIwMDgtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAjaW5jbHVkZSAiYnl0ZV9vcmRlci5oIgogCi0jaWYgIShfX0dOVUNfXyA+PSA0IHx8IChfX0dOVUNfXyA9PTMgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpIC8qIGlmICFHQ0Mgb3IgR0NDIDwgNC4zICovCisjaWZuZGVmIHJoYXNoX2N0egogCiAjICBpZiBfTVNDX1ZFUiA+PSAxMzAwICYmIChfTV9JWDg2IHx8IF9NX0FNRDY0IHx8IF9NX0lBNjQpIC8qIGlmIE1TVkMrKyA+PSAyMDAyIG9uIHg4Ni94NjQgKi8KICMgIGluY2x1ZGUgPGludHJpbi5oPgpAQCAtNTksNyArNTksNyBAQAogCXJldHVybiAodW5zaWduZWQpYml0X3Bvc1soKHVpbnQzMl90KSgoeCAmIC14KSAqIDB4MDc3Q0I1MzFVKSkgPj4gMjddOwogfQogIyAgZW5kaWYgLyogX01TQ19WRVIgPj0gMTMwMC4uLiAqLwotI2VuZGlmIC8qICEoR0NDID49IDQuMykgKi8KKyNlbmRpZiAvKiByaGFzaF9jdHogKi8KIAogLyoqCiAgKiBDb3B5IGEgbWVtb3J5IGJsb2NrIHdpdGggc2ltdWx0YW5lb3VzIGV4Y2hhbmdpbmcgYnl0ZSBvcmRlci4KQEAgLTc5LDEwICs3OSwxMiBAQAogCQljb25zdCB1aW50MzJfdCogc3JjID0gKGNvbnN0IHVpbnQzMl90Kilmcm9tOwogCQljb25zdCB1aW50MzJfdCogZW5kID0gKGNvbnN0IHVpbnQzMl90KikoKGNvbnN0IGNoYXIqKXNyYyArIGxlbmd0aCk7CiAJCXVpbnQzMl90KiBkc3QgPSAodWludDMyX3QqKSgoY2hhciopdG8gKyBpbmRleCk7Ci0JCXdoaWxlIChzcmMgPCBlbmQpICooZHN0KyspID0gYnN3YXBfMzIoICooc3JjKyspICk7CisJCWZvciAoOyBzcmMgPCBlbmQ7IGRzdCsrLCBzcmMrKykKKwkJCSpkc3QgPSBic3dhcF8zMigqc3JjKTsKIAl9IGVsc2UgewogCQljb25zdCBjaGFyKiBzcmMgPSAoY29uc3QgY2hhciopZnJvbTsKLQkJZm9yIChsZW5ndGggKz0gaW5kZXg7IChzaXplX3QpaW5kZXggPCBsZW5ndGg7IGluZGV4KyspICgoY2hhciopdG8pW2luZGV4IF4gM10gPSAqKHNyYysrKTsKKwkJZm9yIChsZW5ndGggKz0gaW5kZXg7IChzaXplX3QpaW5kZXggPCBsZW5ndGg7IGluZGV4KyspCisJCQkoKGNoYXIqKXRvKVtpbmRleCBeIDNdID0gKihzcmMrKyk7CiAJfQogfQogCkBAIC0xNDEsMTAgKzE0MywzMSBAQAogICogQHBhcmFtIGFyciAgICB0aGUgYXJyYXkgdG8gcHJvY2VzcwogICogQHBhcmFtIGxlbmd0aCBhcnJheSBsZW5ndGgKICAqLwotdm9pZCByaGFzaF91MzJfbWVtX3N3YXAodW5zaWduZWQgKmFyciwgaW50IGxlbmd0aCkKK3ZvaWQgcmhhc2hfdTMyX21lbV9zd2FwKHVuc2lnbmVkKiBhcnIsIGludCBsZW5ndGgpCiB7CiAJdW5zaWduZWQqIGVuZCA9IGFyciArIGxlbmd0aDsKIAlmb3IgKDsgYXJyIDwgZW5kOyBhcnIrKykgewogCQkqYXJyID0gYnN3YXBfMzIoKmFycik7CiAJfQogfQorCisjaWZkZWYgSEFTX0lOVEVMX0NQVUlECisjaW5jbHVkZSA8Y3B1aWQuaD4KKworc3RhdGljIHVpbnQ2NF90IGdldF9jcHVpZF9mZWF0dXJlcyh2b2lkKQoreworCXVpbnQzMl90IHRtcCwgZWR4LCBlY3g7CisJaWYgKF9fZ2V0X2NwdWlkKDEsICZ0bXAsICZ0bXAsICZlY3gsICZlZHgpKQorCQlyZXR1cm4gKCgoKHVpbnQ2NF90KWVjeCkgPDwgMzIpIF4gZWR4KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGhhc19jcHVfZmVhdHVyZSh1bnNpZ25lZCBmZWF0dXJlX2JpdCkKK3sKKwlzdGF0aWMgdWludDY0X3QgZmVhdHVyZXM7CisJY29uc3QgdWludDY0X3QgZmVhdHVyZSA9ICgodWludDY0X3QpMSkgPDwgZmVhdHVyZV9iaXQ7CisJaWYgKCFmZWF0dXJlcykKKwkJZmVhdHVyZXMgPSAoZ2V0X2NwdWlkX2ZlYXR1cmVzKCkgfCAxKTsKKwlyZXR1cm4gISEoZmVhdHVyZXMgJiBmZWF0dXJlKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5oCmluZGV4IGQzNGEwMjAuLmE1ODE3NGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmgKQEAgLTQsNiArNCwxOSBAQAogI2luY2x1ZGUgInVzdGQuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2lmIDAKKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykKKyMgaW5jbHVkZSA8ZW5kaWFuLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZWxpZiBkZWZpbmVkIChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQorIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTI2LDggKzM5LDYgQEAKICMgZW5kaWYKICNlbmRpZgogCi0KLS8qIGRldGVjdCBDUFUgZW5kaWFubmVzcyAqLwogI2luY2x1ZGUgPGNtX2t3aW1sLmg+CiAjaWYgS1dJTUxfQUJJX0VORElBTl9JRCA9PSBLV0lNTF9BQklfRU5ESUFOX0lEX0xJVFRMRQogIyBkZWZpbmUgQ1BVX0xJVFRMRV9FTkRJQU4KQEAgLTM3LDggKzQ4LDUzIEBACiAjIGRlZmluZSBDUFVfQklHX0VORElBTgogIyBkZWZpbmUgSVNfQklHX0VORElBTiAxCiAjIGRlZmluZSBJU19MSVRUTEVfRU5ESUFOIDAKKyNlbmRpZgorCisjaWYgMAorI2RlZmluZSBSSEFTSF9CWVRFX09SREVSX0xFIDEyMzQKKyNkZWZpbmUgUkhBU0hfQllURV9PUkRFUl9CRSA0MzIxCisKKyNpZiAoZGVmaW5lZChfX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSB8fCBcCisgICAgKGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIGRlZmluZWQoX19PUkRFUl9MSVRUTEVfRU5ESUFOX18pICYmIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fKQorIyAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9MRQorI2VsaWYgKGRlZmluZWQoX19CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9fQklHX0VORElBTikgJiYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTikgfHwgXAorICAgICAgKGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIGRlZmluZWQoX19PUkRFUl9CSUdfRU5ESUFOX18pICYmIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfQklHX0VORElBTl9fKQorIyAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9CRQorI2VsaWYgZGVmaW5lZChfQllURV9PUkRFUikKKyMgIGlmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pICYmIChfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTikKKyMgICAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9MRQorIyAgZWxpZiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiAoX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4pCisjICAgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfQkUKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fc3VuKSAmJiBkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKQorIyAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9MRQorI2VsaWYgZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfQklHX0VORElBTikKKyMgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfQkUKKyNlbmRpZgorCisvKiB0cnkgZGV0ZWN0aW5nIGVuZGlhbm5lc3MgYnkgQ1BVICovCisjaWZkZWYgUkhBU0hfQllURV9PUkRFUgorI2VsaWYgZGVmaW5lZChDUFVfSUEzMikgfHwgZGVmaW5lZChDUFVfWDY0KSB8fCBkZWZpbmVkKF9faWE2NCkgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgXAorICAgICAgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX01fQUxQSEEpIHx8IGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKE1JUFNFTCkgfHwgXAorICAgICAgZGVmaW5lZChfQVJNXykgfHwgZGVmaW5lZChfX2FybV9fKQorIyAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9MRQorI2VsaWYgZGVmaW5lZChfX3NwYXJjKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChzcGFyYykgfHwgXAorICAgICAgZGVmaW5lZChfQVJDSF9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDNjQpIHx8IGRlZmluZWQoX1BPV0VSKSB8fCBcCisgICAgICBkZWZpbmVkKF9fUE9XRVJQQ19fKSB8fCBkZWZpbmVkKFBPV0VSUEMpIHx8IGRlZmluZWQoX19wb3dlcnBjKSB8fCBcCisgICAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQoX19wcGNfXykgfHwgXAorICAgICAgZGVmaW5lZChfX2hwdXgpICB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQobWM2ODAwMCkgfHwgXAorICAgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IGRlZmluZWQoc2VsKQorIyBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0JFCiAjZWxzZQotIyBlcnJvciAiQ2FuJ3QgZGV0ZWN0IENQVSBhcmNoaXRlY2h0dXJlIgorIyAgZXJyb3IgIkNhbid0IGRldGVjdCBDUFUgYXJjaGl0ZWNodHVyZSIKKyNlbmRpZgorCisjZGVmaW5lIElTX0JJR19FTkRJQU4gKFJIQVNIX0JZVEVfT1JERVIgPT0gUkhBU0hfQllURV9PUkRFUl9CRSkKKyNkZWZpbmUgSVNfTElUVExFX0VORElBTiAoUkhBU0hfQllURV9PUkRFUiA9PSBSSEFTSF9CWVRFX09SREVSX0xFKQorI2VuZGlmCisKKyNpZm5kZWYgX19oYXNfYnVpbHRpbgorIyBkZWZpbmUgX19oYXNfYnVpbHRpbih4KSAwCiAjZW5kaWYKIAogI2RlZmluZSBJU19BTElHTkVEXzMyKHApICgwID09ICgzICYgKChjb25zdCBjaGFyKikocCkgLSAoY29uc3QgY2hhciopMCkpKQpAQCAtNTYsMTEgKzExMiwyMyBAQAogI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQogI2RlZmluZSBJNjQoeCkgeCMjdWk2NAogI2Vsc2UKLSNkZWZpbmUgSTY0KHgpIHgjI0xMCisjZGVmaW5lIEk2NCh4KSB4IyNVTEwKICNlbmRpZgogCi0vKiBjb252ZXJ0IGEgaGFzaCBmbGFnIHRvIGluZGV4ICovCi0jaWYgX19HTlVDX18gPj0gNCB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSAvKiBHQ0MgPCAzLjQgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBSSEFTSF9JTkxJTkUgX19pbmxpbmUKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyNkZWZpbmUgUkhBU0hfSU5MSU5FIGlubGluZQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgUkhBU0hfSU5MSU5FIF9faW5saW5lX18KKyNlbHNlCisjZGVmaW5lIFJIQVNIX0lOTElORQorI2VuZGlmCisKKy8qIGRlZmluZSByaGFzaF9jdHogLSBjb3VudCB0cmFsaW5nIHplcm8gYml0cyAqLworI2lmIChkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSA0IHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDQpKSB8fCBcCisgICAgKGRlZmluZWQoX19jbGFuZ19fKSAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9jdHopKQorLyogR0NDID49IDMuNCBvciBjbGFuZyAqLwogIyBkZWZpbmUgcmhhc2hfY3R6KHgpIF9fYnVpbHRpbl9jdHooeCkKICNlbHNlCiB1bnNpZ25lZCByaGFzaF9jdHoodW5zaWduZWQpOyAvKiBkZWZpbmUgYXMgZnVuY3Rpb24gKi8KQEAgLTY5LDQyICsxMzcsMzEgQEAKIHZvaWQgcmhhc2hfc3dhcF9jb3B5X3N0cl90b191MzIodm9pZCogdG8sIGludCBpbmRleCwgY29uc3Qgdm9pZCogZnJvbSwgc2l6ZV90IGxlbmd0aCk7CiB2b2lkIHJoYXNoX3N3YXBfY29weV9zdHJfdG9fdTY0KHZvaWQqIHRvLCBpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGZyb20sIHNpemVfdCBsZW5ndGgpOwogdm9pZCByaGFzaF9zd2FwX2NvcHlfdTY0X3RvX3N0cih2b2lkKiB0bywgY29uc3Qgdm9pZCogZnJvbSwgc2l6ZV90IGxlbmd0aCk7Ci12b2lkIHJoYXNoX3UzMl9tZW1fc3dhcCh1bnNpZ25lZCAqcCwgaW50IGxlbmd0aF9pbl91MzIpOwordm9pZCByaGFzaF91MzJfbWVtX3N3YXAodW5zaWduZWQqIHAsIGludCBsZW5ndGhfaW5fdTMyKTsKIAotI2lmbmRlZiBfX2hhc19idWlsdGluCi0jIGRlZmluZSBfX2hhc19idWlsdGluKHgpIDAKLSNlbmRpZgotCi0vKiBkZWZpbmUgYnN3YXBfMzIgKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKENQVV9JQTMyKSAmJiAhZGVmaW5lZChfX2kzODZfXykKLS8qIGZvciBpbnRlbCB4ODYgQ1BVICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IGJzd2FwXzMyKHVpbnQzMl90IHgpIHsKLQlfX2FzbSgiYnN3YXBcdCUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7Ci0JcmV0dXJuIHg7Ci19Ci0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAgJiYgKF9fR05VQ19fID49IDQpICYmIChfX0dOVUNfXyA+IDQgfHwgX19HTlVDX01JTk9SX18gPj0gMykKLS8qIGZvciBHQ0MgPj0gNC4zICovCisvKiBic3dhcCBkZWZpbml0aW9ucyAqLworI2lmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gNCkgJiYgKF9fR05VQ19fID4gNCB8fCBfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgXAorICAgIChkZWZpbmVkKF9fY2xhbmdfXykgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fYnN3YXAzMikgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fYnN3YXA2NCkpCisvKiBHQ0MgPj0gNC4zIG9yIGNsYW5nICovCiAjIGRlZmluZSBic3dhcF8zMih4KSBfX2J1aWx0aW5fYnN3YXAzMih4KQotI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2Jzd2FwMzIpCi0jIGRlZmluZSBic3dhcF8zMih4KSBfX2J1aWx0aW5fYnN3YXAzMih4KQorIyBkZWZpbmUgYnN3YXBfNjQoeCkgX19idWlsdGluX2Jzd2FwNjQoeCkKICNlbGlmIChfTVNDX1ZFUiA+IDEzMDApICYmIChkZWZpbmVkKENQVV9JQTMyKSB8fCBkZWZpbmVkKENQVV9YNjQpKSAvKiBNUyBWQyAqLwogIyBkZWZpbmUgYnN3YXBfMzIoeCkgX2J5dGVzd2FwX3Vsb25nKCh1bnNpZ25lZCBsb25nKXgpCi0jZWxzZQotLyogZ2VuZXJhbCBic3dhcF8zMiBkZWZpbml0aW9uICovCi1zdGF0aWMgdWludDMyX3QgYnN3YXBfMzIodWludDMyX3QgeCkgewotCXggPSAoKHggPDwgOCkgJiAweEZGMDBGRjAwKSB8ICgoeCA+PiA4KSAmIDB4MDBGRjAwRkYpOwotCXJldHVybiAoeCA+PiAxNikgfCAoeCA8PCAxNik7Ci19Ci0jZW5kaWYgLyogYnN3YXBfMzIgKi8KLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KSAmJiAoX19HTlVDX18gPiA0IHx8IF9fR05VQ19NSU5PUl9fID49IDMpCi0jIGRlZmluZSBic3dhcF82NCh4KSBfX2J1aWx0aW5fYnN3YXA2NCh4KQotI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2Jzd2FwNjQpCi0jIGRlZmluZSBic3dhcF82NCh4KSBfX2J1aWx0aW5fYnN3YXA2NCh4KQotI2VsaWYgKF9NU0NfVkVSID4gMTMwMCkgJiYgKGRlZmluZWQoQ1BVX0lBMzIpIHx8IGRlZmluZWQoQ1BVX1g2NCkpIC8qIE1TIFZDICovCiAjIGRlZmluZSBic3dhcF82NCh4KSBfYnl0ZXN3YXBfdWludDY0KChfX2ludDY0KXgpCiAjZWxzZQotc3RhdGljIHVpbnQ2NF90IGJzd2FwXzY0KHVpbnQ2NF90IHgpIHsKKy8qIGZhbGxiYWNrIHRvIGdlbmVyaWMgYnN3YXAgZGVmaW5pdGlvbiAqLworc3RhdGljIFJIQVNIX0lOTElORSB1aW50MzJfdCBic3dhcF8zMih1aW50MzJfdCB4KQoreworIyBpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKENQVV9JQTMyKSAmJiAhZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoUkhBU0hfTk9fQVNNKQorCV9fYXNtKCJic3dhcFx0JTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsgLyogZ2NjIHg4NiB2ZXJzaW9uICovCisJcmV0dXJuIHg7CisjIGVsc2UKKwl4ID0gKCh4IDw8IDgpICYgMHhGRjAwRkYwMHUpIHwgKCh4ID4+IDgpICYgMHgwMEZGMDBGRnUpOworCXJldHVybiAoeCA+PiAxNikgfCAoeCA8PCAxNik7CisjIGVuZGlmCit9CitzdGF0aWMgUkhBU0hfSU5MSU5FIHVpbnQ2NF90IGJzd2FwXzY0KHVpbnQ2NF90IHgpCit7CiAJdW5pb24gewogCQl1aW50NjRfdCBsbDsKIAkJdWludDMyX3QgbFsyXTsKQEAgLTExNCw5ICsxNzEsOSBAQAogCXIubFsxXSA9IGJzd2FwXzMyKHcubFswXSk7CiAJcmV0dXJuIHIubGw7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBic3dhcCBkZWZpbml0aW9ucyAqLwogCi0jaWZkZWYgQ1BVX0JJR19FTkRJQU4KKyNpZiBJU19CSUdfRU5ESUFOCiAjIGRlZmluZSBiZTJtZV8zMih4KSAoeCkKICMgZGVmaW5lIGJlMm1lXzY0KHgpICh4KQogIyBkZWZpbmUgbGUybWVfMzIoeCkgYnN3YXBfMzIoeCkKQEAgLTEyOSw3ICsxODYsNyBAQAogIyBkZWZpbmUgbWU2NF90b19iZV9zdHIodG8sIGZyb20sIGxlbmd0aCkgbWVtY3B5KCh0byksIChmcm9tKSwgKGxlbmd0aCkpCiAjIGRlZmluZSBtZTY0X3RvX2xlX3N0cih0bywgZnJvbSwgbGVuZ3RoKSByaGFzaF9zd2FwX2NvcHlfdTY0X3RvX3N0cigodG8pLCAoZnJvbSksIChsZW5ndGgpKQogCi0jZWxzZSAvKiBDUFVfQklHX0VORElBTiAqLworI2Vsc2UgLyogSVNfQklHX0VORElBTiAqLwogIyBkZWZpbmUgYmUybWVfMzIoeCkgYnN3YXBfMzIoeCkKICMgZGVmaW5lIGJlMm1lXzY0KHgpIGJzd2FwXzY0KHgpCiAjIGRlZmluZSBsZTJtZV8zMih4KSAoeCkKQEAgLTE0MSw3ICsxOTgsNyBAQAogIyBkZWZpbmUgbGU2NF9jb3B5KHRvLCBpbmRleCwgZnJvbSwgbGVuZ3RoKSBtZW1jcHkoKHRvKSArIChpbmRleCksIChmcm9tKSwgKGxlbmd0aCkpCiAjIGRlZmluZSBtZTY0X3RvX2JlX3N0cih0bywgZnJvbSwgbGVuZ3RoKSByaGFzaF9zd2FwX2NvcHlfdTY0X3RvX3N0cigodG8pLCAoZnJvbSksIChsZW5ndGgpKQogIyBkZWZpbmUgbWU2NF90b19sZV9zdHIodG8sIGZyb20sIGxlbmd0aCkgbWVtY3B5KCh0byksIChmcm9tKSwgKGxlbmd0aCkpCi0jZW5kaWYgLyogQ1BVX0JJR19FTkRJQU4gKi8KKyNlbmRpZiAvKiBJU19CSUdfRU5ESUFOICovCiAKIC8qIFJPVEwvUk9UUiBtYWNyb3Mgcm90YXRlIGEgMzIvNjQtYml0IHdvcmQgbGVmdC9yaWdodCBieSBuIGJpdHMgKi8KICNkZWZpbmUgUk9UTDMyKGR3b3JkLCBuKSAoKGR3b3JkKSA8PCAobikgXiAoKGR3b3JkKSA+PiAoMzIgLSAobikpKSkKQEAgLTE0OSw2ICsyMDYsMTYgQEAKICNkZWZpbmUgUk9UTDY0KHF3b3JkLCBuKSAoKHF3b3JkKSA8PCAobikgXiAoKHF3b3JkKSA+PiAoNjQgLSAobikpKSkKICNkZWZpbmUgUk9UUjY0KHF3b3JkLCBuKSAoKHF3b3JkKSA+PiAobikgXiAoKHF3b3JkKSA8PCAoNjQgLSAobikpKSkKIAorI2RlZmluZSBDUFVfRkVBVFVSRV9TU0U0XzIgKDUyKQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkgXAorCSYmIChkZWZpbmVkKENQVV9YNjQpIHx8IGRlZmluZWQoQ1BVX0lBMzIpKQorIyBkZWZpbmUgSEFTX0lOVEVMX0NQVUlECitpbnQgaGFzX2NwdV9mZWF0dXJlKHVuc2lnbmVkIGZlYXR1cmVfYml0KTsKKyNlbHNlCisjIGRlZmluZSBoYXNfY3B1X2ZlYXR1cmUoeCkgKDApCisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAiQyIgKi8KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguYwppbmRleCBjOTQxMTQ5Li5mMGJiZjA0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguYwpAQCAtMSw3MSArMSw1NyBAQAogLyogaGV4LmMgLSBjb252ZXJzaW9uIGZvciBoZXhhZGVjaW1hbCBhbmQgYmFzZTMyIHN0cmluZ3MuCiAgKgotICogQ29weXJpZ2h0OiAyMDA4LTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSAiaGV4LmgiCi0KLS8qKgotKiBDb252ZXJ0IGEgYnl0ZSB0byBhIGhleGFkZWNpbWFsIG51bWJlci4gVGhlIHJlc3VsdCwgY29uc2lzdGluZyBvZiB0d28KLSogaGV4YWRlY2ltYWwgZGlnaXRzIGlzIHN0b3JlZCBpbnRvIGEgYnVmZmVyLgotICoKLSAqIEBwYXJhbSBkZXN0ICB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgdHdvIHN5bWJvbHMgb2YgaGV4IHJlcHJlc2VudGF0aW9uCi0gKiBAcGFyYW0gYnl0ZSB0aGUgYnl0ZSB0byBkZWNvZGUKLSAqIEBwYXJhbSB1cHBlcl9jYXNlIGZsYWcgdG8gcHJpbnQgc3RyaW5nIGluIHVwcGVyY2FzZQotICogQHJldHVybiBwb2ludGVyIHRvIHRoZSBjaGFyYXJjdGVyIGp1c3QgYWZ0ZXIgdGhlIHdyaXR0ZW4gbnVtYmVyIChkZXN0ICsgMikKLSAqLwotY2hhciogcmhhc2hfcHJpbnRfaGV4X2J5dGUoY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciBieXRlLCBpbnQgdXBwZXJfY2FzZSkKLXsKLQljb25zdCBjaGFyIGFkZCA9ICh1cHBlcl9jYXNlID8gJ0EnIC0gMTAgOiAnYScgLSAxMCk7Ci0JdW5zaWduZWQgY2hhciBjID0gKGJ5dGUgPj4gNCkgJiAxNTsKLQkqZGVzdCsrID0gKGMgPiA5ID8gYyArIGFkZCA6IGMgKyAnMCcpOwotCWMgPSBieXRlICYgMTU7Ci0JKmRlc3QrKyA9IChjID4gOSA/IGMgKyBhZGQgOiBjICsgJzAnKTsKLQlyZXR1cm4gZGVzdDsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAvKioKICAqIFN0b3JlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgYmluYXJ5IHN0cmluZyB0byBnaXZlbiBidWZmZXIuCiAgKgotICogQHBhcmFtIGRlc3QgdGhlIGJ1ZmZlciB0byByZWNlaXZlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uCisgKiBAcGFyYW0gZHN0IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbgogICogQHBhcmFtIHNyYyBiaW5hcnkgc3RyaW5nCi0gKiBAcGFyYW0gbGVuIHN0cmluZyBsZW5ndGgKKyAqIEBwYXJhbSBsZW5ndGggc3RyaW5nIGxlbmd0aAogICogQHBhcmFtIHVwcGVyX2Nhc2UgZmxhZyB0byBwcmludCBzdHJpbmcgaW4gdXBwZXJjYXNlCiAgKi8KLXZvaWQgcmhhc2hfYnl0ZV90b19oZXgoY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGludCB1cHBlcl9jYXNlKQordm9pZCByaGFzaF9ieXRlX3RvX2hleChjaGFyKiBkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCwgaW50IHVwcGVyX2Nhc2UpCiB7Ci0Jd2hpbGUgKGxlbi0tID4gMCkgewotCQlkZXN0ID0gcmhhc2hfcHJpbnRfaGV4X2J5dGUoZGVzdCwgKnNyYysrLCB1cHBlcl9jYXNlKTsKKwljb25zdCBjaGFyIGhleF9hZGQgPSAodXBwZXJfY2FzZSA/ICdBJyAtIDEwIDogJ2EnIC0gMTApOworCWZvciAoOyBsZW5ndGggPiAwOyBzcmMrKywgbGVuZ3RoLS0pIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciBoaSA9ICgqc3JjID4+IDQpICYgMTU7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgbG8gPSAqc3JjICYgMTU7CisJCSpkc3QrKyA9IChoaSA+IDkgPyBoaSArIGhleF9hZGQgOiBoaSArICcwJyk7CisJCSpkc3QrKyA9IChsbyA+IDkgPyBsbyArIGhleF9hZGQgOiBsbyArICcwJyk7CiAJfQotCSpkZXN0ID0gJ1wwJzsKKwkqZHN0ID0gJ1wwJzsKIH0KIAogLyoqCiAgKiBFbmNvZGUgYSBiaW5hcnkgc3RyaW5nIHRvIGJhc2UzMi4KICAqCi0gKiBAcGFyYW0gZGVzdCB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlc3VsdAorICogQHBhcmFtIGRzdCB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlc3VsdAogICogQHBhcmFtIHNyYyBiaW5hcnkgc3RyaW5nCi0gKiBAcGFyYW0gbGVuIHN0cmluZyBsZW5ndGgKKyAqIEBwYXJhbSBsZW5ndGggc3RyaW5nIGxlbmd0aAogICogQHBhcmFtIHVwcGVyX2Nhc2UgZmxhZyB0byBwcmludCBzdHJpbmcgaW4gdXBwZXJjYXNlCiAgKi8KLXZvaWQgcmhhc2hfYnl0ZV90b19iYXNlMzIoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCB1bnNpZ25lZCBsZW4sIGludCB1cHBlcl9jYXNlKQordm9pZCByaGFzaF9ieXRlX3RvX2Jhc2UzMihjaGFyKiBkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCwgaW50IHVwcGVyX2Nhc2UpCiB7CiAJY29uc3QgY2hhciBhID0gKHVwcGVyX2Nhc2UgPyAnQScgOiAnYScpOwogCXVuc2lnbmVkIHNoaWZ0ID0gMDsKIAl1bnNpZ25lZCBjaGFyIHdvcmQ7Ci0JY29uc3QgdW5zaWduZWQgY2hhciogZSA9IHNyYyArIGxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyKiBlID0gc3JjICsgbGVuZ3RoOwogCXdoaWxlIChzcmMgPCBlKSB7CiAJCWlmIChzaGlmdCA+IDMpIHsKIAkJCXdvcmQgPSAoKnNyYyAmICgweEZGID4+IHNoaWZ0KSk7CkBAIC03OSwyNSArNjUsMjUgQEAKIAkJCXdvcmQgPSAoICpzcmMgPj4gKCAoOCAtIHNoaWZ0KSAmIDcgKSApICYgMHgxRjsKIAkJCWlmIChzaGlmdCA9PSAwKSBzcmMrKzsKIAkJfQotCQkqZGVzdCsrID0gKCB3b3JkIDwgMjYgPyB3b3JkICsgYSA6IHdvcmQgKyAnMicgLSAyNiApOworCQkqZHN0KysgPSAoIHdvcmQgPCAyNiA/IHdvcmQgKyBhIDogd29yZCArICcyJyAtIDI2ICk7CiAJfQotCSpkZXN0ID0gJ1wwJzsKKwkqZHN0ID0gJ1wwJzsKIH0KIAogLyoqCiAgKiBFbmNvZGUgYSBiaW5hcnkgc3RyaW5nIHRvIGJhc2U2NC4KICAqIEVuY29kZWQgb3V0cHV0IGxlbmd0aCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLgogICoKLSAqIEBwYXJhbSBkZXN0IHRoZSBidWZmZXIgdG8gc3RvcmUgcmVzdWx0CisgKiBAcGFyYW0gZHN0IHRoZSBidWZmZXIgdG8gc3RvcmUgcmVzdWx0CiAgKiBAcGFyYW0gc3JjIGJpbmFyeSBzdHJpbmcKLSAqIEBwYXJhbSBsZW4gc3RyaW5nIGxlbmd0aAorICogQHBhcmFtIGxlbmd0aCBzdHJpbmcgbGVuZ3RoCiAgKi8KLXZvaWQgcmhhc2hfYnl0ZV90b19iYXNlNjQoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCB1bnNpZ25lZCBsZW4pCit2b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTY0KGNoYXIqIGRzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoKQogewogCXN0YXRpYyBjb25zdCBjaGFyKiB0YWlsID0gIjAxMjM0NTY3ODkrLyI7CiAJdW5zaWduZWQgc2hpZnQgPSAwOwogCXVuc2lnbmVkIGNoYXIgd29yZDsKLQljb25zdCB1bnNpZ25lZCBjaGFyKiBlID0gc3JjICsgbGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIqIGUgPSBzcmMgKyBsZW5ndGg7CiAJd2hpbGUgKHNyYyA8IGUpIHsKIAkJaWYgKHNoaWZ0ID4gMikgewogCQkJd29yZCA9ICgqc3JjICYgKDB4RkYgPj4gc2hpZnQpKTsKQEAgLTExMSw0NSArOTcsODAgQEAKIAkJCXdvcmQgPSAoICpzcmMgPj4gKCAoOCAtIHNoaWZ0KSAmIDcgKSApICYgMHgzRjsKIAkJCWlmIChzaGlmdCA9PSAwKSBzcmMrKzsKIAkJfQotCQkqZGVzdCsrID0gKCB3b3JkIDwgNTIgPyAod29yZCA8IDI2ID8gd29yZCArICdBJyA6IHdvcmQgLSAyNiArICdhJykgOiB0YWlsW3dvcmQgLSA1Ml0pOworCQkqZHN0KysgPSAoIHdvcmQgPCA1MiA/ICh3b3JkIDwgMjYgPyB3b3JkICsgJ0EnIDogd29yZCAtIDI2ICsgJ2EnKSA6IHRhaWxbd29yZCAtIDUyXSk7CiAJfQogCWlmIChzaGlmdCA+IDApIHsKLQkJKmRlc3QrKyA9ICc9JzsKLQkJaWYgKHNoaWZ0ID09IDQpICpkZXN0KysgPSAnPSc7CisJCSpkc3QrKyA9ICc9JzsKKwkJaWYgKHNoaWZ0ID09IDQpICpkc3QrKyA9ICc9JzsKIAl9Ci0JKmRlc3QgPSAnXDAnOworCSpkc3QgPSAnXDAnOwogfQogCi0vKiB1bnNhZmUgY2hhcmFjdGVycyBhcmUgIjw+e31bXSUjL3xcXn5gQDo7Pz0mKyAqLwotI2RlZmluZSBJU19HT09EX1VSTF9DSEFSKGMpIChpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKWMpIHx8IHN0cmNocigiJC1fLiEnKCksIiwgYykpCitzaXplX3Qgcmhhc2hfYmFzZTY0X3VybF9lbmNvZGVkX2hlbHBlcihjaGFyKiBkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCwgaW50IHVybF9lbmNvZGUsIGludCB1cHBlcl9jYXNlKQoreworI2RlZmluZSBCNjRfQ0hVTktfU0laRSAxMjAKKwljaGFyIGJ1ZmZlclsxNjRdOworCWFzc2VydCgoQkFTRTY0X0xFTkdUSChCNjRfQ0hVTktfU0laRSkgKyA0KSA8PSBzaXplb2YoYnVmZmVyKSk7CisJYXNzZXJ0KChCNjRfQ0hVTktfU0laRSAlIDYpID09IDApOworCWlmICh1cmxfZW5jb2RlKSB7CisJCXNpemVfdCByZXN1bHRfbGVuZ3RoID0gMDsKKwkJZm9yICg7IGxlbmd0aCA+IDA7IHNyYyArPSBCNjRfQ0hVTktfU0laRSkgeworCQkJc2l6ZV90IGNodW5rX3NpemUgPSAobGVuZ3RoIDwgQjY0X0NIVU5LX1NJWkUgPyBsZW5ndGggOiBCNjRfQ0hVTktfU0laRSk7CisJCQlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJCQlyaGFzaF9ieXRlX3RvX2Jhc2U2NChidWZmZXIsIHNyYywgY2h1bmtfc2l6ZSk7CisJCQllbmNvZGVkX2xlbmd0aCA9IHJoYXNoX3VybGVuY29kZShkc3QsIGJ1ZmZlciwgQkFTRTY0X0xFTkdUSChjaHVua19zaXplKSwgdXBwZXJfY2FzZSk7CisJCQlyZXN1bHRfbGVuZ3RoICs9IGVuY29kZWRfbGVuZ3RoOworCQkJZHN0ICs9IGVuY29kZWRfbGVuZ3RoOworCQkJbGVuZ3RoIC09IGNodW5rX3NpemU7CisJCX0KKwkJcmV0dXJuIHJlc3VsdF9sZW5ndGg7CisJfQorCXJoYXNoX2J5dGVfdG9fYmFzZTY0KGRzdCwgc3JjLCBsZW5ndGgpOworCXJldHVybiBCQVNFNjRfTEVOR1RIKGxlbmd0aCk7Cit9CisKKy8qIFJGQyAzOTg2OiBzYWZlIHVybCBjaGFyYWN0ZXJzIGFyZSBhc2NpaSBhbHBoYS1udW1lcmljIGFuZCAiLS5ffiIsIG90aGVyIGNoYXJhY3RlcnMgc2hvdWxkIGJlIHBlcmNlbnQtZW5jb2RlZCAqLworc3RhdGljIHVuc2lnbmVkIHVybF9zYWZlX2NoYXJfbWFza1s0XSA9IHsgMCwgMHgwM2ZmNjAwMCwgMHg4N2ZmZmZmZSwgMHg0N2ZmZmZmZSB9OworI2RlZmluZSBJU19VUkxfR09PRF9DSEFSKGMpICgodW5zaWduZWQpKGMpIDwgMTI4ICYmICh1cmxfc2FmZV9jaGFyX21hc2tbYyA+PiA1XSAmICgxIDw8IChjICYgMzEpKSkpCiAKIC8qKgotICogVVJMLWVuY29kZSBhIHN0cmluZy4KKyAqIFVSTC1lbmNvZGUgc3BlY2lmaWVkIGJpbmFyeSBzdHJpbmcuCiAgKgotICogQHBhcmFtIGRzdCBidWZmZXIgdG8gcmVjZWl2ZSByZXN1bHQgb3IgTlVMTCB0byBjYWxjdWxhdGUKLSAqICAgIHRoZSBsZW5ndGhzIG9mIGVuY29kZWQgc3RyaW5nCi0gKiBAcGFyYW0gZmlsZW5hbWUgdGhlIGZpbGUgbmFtZQorICogQHBhcmFtIGRzdCAobnVsbGFibGUpIGJ1ZmZlciB0byBvdXRwdXQgZW5jb2RlZCBzdHJpbmcgdG8sCisgKiAgICAgICAgICAgIE5VTEwgdG8ganVzdCBjYWxjdWxhdGUgdGhlIGxlbmd0aHMgb2YgZW5jb2RlZCBzdHJpbmcKKyAqIEBwYXJhbSBzcmMgYmluYXJ5IHN0cmluZyB0byBlbmNvZGUKKyAqIEBwYXJhbSBzaXplIHNpemUgb2YgdGhlIGJpbmFyeSBzdHJpbmcKKyAqIEBwYXJhbSB1cHBlcl9jYXNlIGZsYWcgdG8gb3V0cHV0IGhleC1jb2RlcyBpbiB1cHBlcmNhc2UKICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZwogICovCi1pbnQgcmhhc2hfdXJsZW5jb2RlKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqbmFtZSkKK3NpemVfdCByaGFzaF91cmxlbmNvZGUoY2hhciogZHN0LCBjb25zdCBjaGFyKiBzcmMsIHNpemVfdCBzaXplLCBpbnQgdXBwZXJfY2FzZSkKIHsKLQljb25zdCBjaGFyICpzdGFydDsKKwljb25zdCBjaGFyKiBzdGFydDsKKwlzaXplX3QgaTsKIAlpZiAoIWRzdCkgewotCQlpbnQgbGVuOwotCQlmb3IgKGxlbiA9IDA7ICpuYW1lOyBuYW1lKyspIGxlbiArPSAoSVNfR09PRF9VUkxfQ0hBUigqbmFtZSkgPyAxIDogMyk7Ci0JCXJldHVybiBsZW47Ci0JfQotCS8qIGVuY29kZSBVUkwgYXMgc3BlY2lmaWVkIGJ5IFJGQyAxNzM4ICovCi0JZm9yIChzdGFydCA9IGRzdDsgKm5hbWU7IG5hbWUrKykgewotCQlpZiAoIElTX0dPT0RfVVJMX0NIQVIoKm5hbWUpICkgewotCQkJKmRzdCsrID0gKm5hbWU7Ci0JCX0gZWxzZSB7Ci0JCQkqZHN0KysgPSAnJSc7Ci0JCQlkc3QgPSByaGFzaF9wcmludF9oZXhfYnl0ZShkc3QsICpuYW1lLCAnQScpOworCQlzaXplX3QgbGVuZ3RoID0gc2l6ZTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJCWlmICghSVNfVVJMX0dPT0RfQ0hBUihzcmNbaV0pKQorCQkJCWxlbmd0aCArPSAyOworCQlyZXR1cm4gbGVuZ3RoOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgaGV4X2FkZCA9ICh1cHBlcl9jYXNlID8gJ0EnIC0gMTAgOiAnYScgLSAxMCk7CisJCXN0YXJ0ID0gZHN0OworCQkvKiBwZXJjZW50LWVuY29kZSBhbGwgYnV0IHVucmVzZXJ2ZWQgVVJMIGNoYXJhY3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJaWYgKElTX1VSTF9HT09EX0NIQVIoc3JjW2ldKSkgeworCQkJCSpkc3QrKyA9IHNyY1tpXTsKKwkJCX0gZWxzZSB7CisJCQkJdW5zaWduZWQgY2hhciBoaSA9ICgodW5zaWduZWQgY2hhcikoc3JjW2ldKSA+PiA0KSAmIDB4MGY7CisJCQkJdW5zaWduZWQgY2hhciBsbyA9ICh1bnNpZ25lZCBjaGFyKShzcmNbaV0pICYgMHgwZjsKKwkJCQkqZHN0KysgPSAnJSc7CisJCQkJKmRzdCsrID0gKGhpID4gOSA/IGhpICsgaGV4X2FkZCA6IGhpICsgJzAnKTsKKwkJCQkqZHN0KysgPSAobG8gPiA5ID8gbG8gKyBoZXhfYWRkIDogbG8gKyAnMCcpOworCQkJfQogCQl9CisJCSpkc3QgPSAwOwogCX0KLQkqZHN0ID0gMDsKLQlyZXR1cm4gKGludCkoZHN0IC0gc3RhcnQpOworCXJldHVybiBkc3QgLSBzdGFydDsKIH0KIAogLyoqCkBAIC0xNjAsMTAgKzE4MSwxMSBAQAogICogQHBhcmFtIG51bWJlciB0aGUgbnVtYmVyIHRvIHByaW50CiAgKiBAcmV0dXJuIGxlbmd0aCBvZiB0aGUgcHJpbnRlZCBudW1iZXIgKHdpdGhvdXQgdHJhaWxpbmcgJ1wwJykKICAqLwotaW50IHJoYXNoX3NwcmludEk2NChjaGFyICpkc3QsIHVpbnQ2NF90IG51bWJlcikKK2ludCByaGFzaF9zcHJpbnRJNjQoY2hhciogZHN0LCB1aW50NjRfdCBudW1iZXIpCiB7CiAJLyogVGhlIGJpZ2dlc3QgbnVtYmVyIGhhcyAyMCBkaWdpdHM6IDJeNjQgPSAxOCA0NDYgNzQ0IDA3MyA3MDkgNTUxIDYxNiAqLwotCWNoYXIgYnVmWzI0XSwgKnA7CisJY2hhciBidWZbMjRdOworCWNoYXIqIHA7CiAJc2l6ZV90IGxlbmd0aDsKIAogCWlmIChkc3QgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguaAppbmRleCAyYjM2NWUyLi42YmVhMDM2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguaApAQCAtOCwxMiArOCwxMyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotdm9pZCByaGFzaF9ieXRlX3RvX2hleChjaGFyICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGxlbiwgaW50IHVwcGVyX2Nhc2UpOwotdm9pZCByaGFzaF9ieXRlX3RvX2Jhc2UzMihjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHVuc2lnbmVkIGxlbiwgaW50IHVwcGVyX2Nhc2UpOwotdm9pZCByaGFzaF9ieXRlX3RvX2Jhc2U2NChjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHVuc2lnbmVkIGxlbik7Ci1jaGFyKiByaGFzaF9wcmludF9oZXhfYnl0ZShjaGFyICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyIGJ5dGUsIGludCB1cHBlcl9jYXNlKTsKLWludCAgcmhhc2hfdXJsZW5jb2RlKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqbmFtZSk7Ci1pbnQgIHJoYXNoX3NwcmludEk2NChjaGFyICpkc3QsIHVpbnQ2NF90IG51bWJlcik7Cit2b2lkIHJoYXNoX2J5dGVfdG9faGV4KGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCwgaW50IHVwcGVyX2Nhc2UpOwordm9pZCByaGFzaF9ieXRlX3RvX2Jhc2UzMihjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgsIGludCB1cHBlcl9jYXNlKTsKK3ZvaWQgcmhhc2hfYnl0ZV90b19iYXNlNjQoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoKTsKK2NoYXIqIHJoYXNoX3ByaW50X2hleF9ieXRlKGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHVwcGVyX2Nhc2UpOworc2l6ZV90IHJoYXNoX3VybGVuY29kZShjaGFyKiBkc3QsIGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IHNpemUsIGludCB1cHBlcl9jYXNlKTsKK3NpemVfdCByaGFzaF9iYXNlNjRfdXJsX2VuY29kZWRfaGVscGVyKGNoYXIqIGRzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoLCBpbnQgdXJsX2VuY29kZSwgaW50IHVwcGVyX2Nhc2UpOworaW50IHJoYXNoX3NwcmludEk2NChjaGFyKiBkc3QsIHVpbnQ2NF90IG51bWJlcik7CiAKICNkZWZpbmUgQkFTRTMyX0xFTkdUSChieXRlcykgKCgoYnl0ZXMpICogOCArIDQpIC8gNSkKICNkZWZpbmUgQkFTRTY0X0xFTkdUSChieXRlcykgKCgoKGJ5dGVzKSArIDIpIC8gMykgKiA0KQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuYwppbmRleCBiMjBkZTQ1Li45Yjc2ODIyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuYwpAQCAtMSwxNyArMSwxNyBAQAogLyogbWQ1LmMgLSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUQ1IGFsZ29yaXRobSwgYmFzZWQgb24gUkZDIDEzMjEuCiAgKgotICogQ29weXJpZ2h0OiAyMDA3LTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9tZDVfaW5pdChtZDVfY3R4ICpjdHgpCit2b2lkIHJoYXNoX21kNV9pbml0KG1kNV9jdHgqIGN0eCkKIHsKIAljdHgtPmxlbmd0aCA9IDA7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCiAgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKICAqLwotdm9pZCByaGFzaF9tZDVfdXBkYXRlKG1kNV9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgcmhhc2hfbWQ1X3VwZGF0ZShtZDVfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgaW5kZXggPSAodW5zaWduZWQpY3R4LT5sZW5ndGggJiA2MzsKIAljdHgtPmxlbmd0aCArPSBzaXplOwpAQCAtMjA1LDcgKzIwNSw3IEBACiAgKiBAcGFyYW0gY3R4IHRoZSBhbGdvcml0aG0gY29udGV4dCBjb250YWluaW5nIGN1cnJlbnQgaGFzaGluZyBzdGF0ZQogICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KICAqLwotdm9pZCByaGFzaF9tZDVfZmluYWwobWQ1X2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCit2b2lkIHJoYXNoX21kNV9maW5hbChtZDVfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAl1bnNpZ25lZCBpbmRleCA9ICgodW5zaWduZWQpY3R4LT5sZW5ndGggJiA2MykgPj4gMjsKIAl1bnNpZ25lZCBzaGlmdCA9ICgodW5zaWduZWQpY3R4LT5sZW5ndGggJiAzKSAqIDg7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5oCmluZGV4IDFhZjZmMTMuLjEyYTZiNTIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5oCkBAIC0yMCw5ICsyMCw5IEBACiAKIC8qIGhhc2ggZnVuY3Rpb25zICovCiAKLXZvaWQgcmhhc2hfbWQ1X2luaXQobWQ1X2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfbWQ1X3VwZGF0ZShtZDVfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwotdm9pZCByaGFzaF9tZDVfZmluYWwobWQ1X2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyIHJlc3VsdFsxNl0pOwordm9pZCByaGFzaF9tZDVfaW5pdChtZDVfY3R4KiBjdHgpOwordm9pZCByaGFzaF9tZDVfdXBkYXRlKG1kNV9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJoYXNoX21kNV9maW5hbChtZDVfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzE2XSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAvKiBleHRlcm4gIkMiICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guYwppbmRleCAzNGUxZWIzLi5jZTZhY2U0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmMKQEAgLTEsNDIgKzEsNDAgQEAKIC8qIHJoYXNoLmMgLSBpbXBsZW1lbnRhdGlvbiBvZiBMaWJSSGFzaCBsaWJyYXJ5IGNhbGxzCiAgKgotICogQ29weXJpZ2h0OiAyMDA4LTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCisvKiBtb2RpZmllciBmb3IgV2luZG93cyBETEwgKi8KKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykpICYmIGRlZmluZWQoUkhBU0hfRVhQT1JUUykKKyMgZGVmaW5lIFJIQVNIX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorCiAvKiBtYWNyb3MgZm9yIGxhcmdlIGZpbGUgc3VwcG9ydCwgbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBhbnkgaW5jbHVkZSBmaWxlICovCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKIAogI2luY2x1ZGUgInVzdGQuaCIgICAvKiBOZWVkIHRoaXMgZmlyc3Qgd2l0aGluIENNYWtlLiAgKi8KIAotI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBtZW1zZXQoKSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBmcmVlKCkgKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4gLyogcHRyZGlmZl90ICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJyaGFzaC5oIgorI2luY2x1ZGUgImFsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJieXRlX29yZGVyLmgiCisjaW5jbHVkZSAiaGV4LmgiCisjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qIG1vZGlmaWVyIGZvciBXaW5kb3dzIERMTCAqLwotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFJIQVNIX0VYUE9SVFMpCi0jIGRlZmluZSBSSEFTSF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jZW5kaWYKLQotI2luY2x1ZGUgImJ5dGVfb3JkZXIuaCIKLSNpbmNsdWRlICJhbGdvcml0aG1zLmgiCi0jaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgImhleC5oIgotI2luY2x1ZGUgInJoYXNoLmgiIC8qIFJIYXNoIGxpYnJhcnkgaW50ZXJmYWNlICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNkZWZpbmUgU1RBVEVfQUNUSVZFICAweGIwMWRiYWJlCiAjZGVmaW5lIFNUQVRFX1NUT1BFRCAgMHhkZWFkYmVlZgpAQCAtNDUsMTEgKzQzLDggQEAKICNkZWZpbmUgUkNUWF9GSU5BTElaRUQgIDB4MgogI2RlZmluZSBSQ1RYX0ZJTkFMSVpFRF9NQVNLIChSQ1RYX0FVVE9fRklOQUwgfCBSQ1RYX0ZJTkFMSVpFRCkKICNkZWZpbmUgUkhQUl9GT1JNQVQgKFJIUFJfUkFXIHwgUkhQUl9IRVggfCBSSFBSX0JBU0UzMiB8IFJIUFJfQkFTRTY0KQotI2RlZmluZSBSSFBSX01PRElGSUVSIChSSFBSX1VQUEVSQ0FTRSB8IFJIUFJfUkVWRVJTRSkKKyNkZWZpbmUgUkhQUl9NT0RJRklFUiAoUkhQUl9VUFBFUkNBU0UgfCBSSFBSX1VSTEVOQ09ERSB8IFJIUFJfUkVWRVJTRSkKIAotLyoqCi0gKiBJbml0aWFsaXplIHN0YXRpYyBkYXRhIG9mIHJoYXNoIGFsZ29yaXRobXMKLSAqLwogdm9pZCByaGFzaF9saWJyYXJ5X2luaXQodm9pZCkKIHsKIAlyaGFzaF9pbml0X2FsZ29yaXRobXMoUkhBU0hfQUxMX0hBU0hFUyk7CkBAIC01OCwzMSArNTMsMTggQEAKICNlbmRpZgogfQogCi0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG1zLgotICoKLSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMKLSAqLwogaW50IFJIQVNIX0FQSSByaGFzaF9jb3VudCh2b2lkKQogewogCXJldHVybiByaGFzaF9pbmZvX3NpemU7CiB9CiAKLS8qIExvLWxldmVsIHJoYXNoIGxpYnJhcnkgZnVuY3Rpb25zICovCisvKiBMT1ctTEVWRUwgTElCUkhBU0ggSU5URVJGQUNFICovCiAKLS8qKgotICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgUkhhc2ggY29udGV4dCBmb3IgY2FsY3VsYXRpbmcgaGFzaChlcykuCi0gKiBBZnRlciBpbml0aWFsaXppbmcgcmhhc2hfdXBkYXRlKCkvcmhhc2hfZmluYWwoKSBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQuCi0gKiBUaGVuIHRoZSBjb250ZXh0IG11c3QgYmUgZnJlZWQgYnkgY2FsbGluZyByaGFzaF9mcmVlKCkuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdW5pb24gb2YgYml0IGZsYWdzLCBjb250YWluaW5nIGlkcyBvZiBoYXNoZXMgdG8gY2FsY3VsYXRlLgotICogQHJldHVybiBpbml0aWFsaXplZCByaGFzaCBjb250ZXh0LCBOVUxMIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKLSAqLwogUkhBU0hfQVBJIHJoYXNoIHJoYXNoX2luaXQodW5zaWduZWQgaGFzaF9pZCkKIHsKIAl1bnNpZ25lZCB0YWlsX2JpdF9pbmRleDsgLyogaW5kZXggb2YgaGFzaF9pZCB0cmFpbGluZyBiaXQgKi8KIAl1bnNpZ25lZCBudW0gPSAwOyAgICAgICAgLyogbnVtYmVyIG9mIGhhc2hlcyB0byBjb21wdXRlICovCi0Jcmhhc2hfY29udGV4dF9leHQgKnJjdHggPSBOVUxMOyAvKiBhbGxvY2F0ZWQgcmhhc2ggY29udGV4dCAqLworCXJoYXNoX2NvbnRleHRfZXh0KiByY3R4ID0gTlVMTDsgLyogYWxsb2NhdGVkIHJoYXNoIGNvbnRleHQgKi8KIAlzaXplX3QgaGFzaF9zaXplX3N1bSA9IDA7ICAgLyogc2l6ZSBvZiBoYXNoIGNvbnRleHRzIHRvIHN0b3JlIGluIHJjdHggKi8KIAogCXVuc2lnbmVkIGksIGJpdF9pbmRleCwgaWQ7CkBAIC0xMjMsNyArMTA1LDcgQEAKIAl9CiAKIAkvKiBhbGlnbiB0aGUgc2l6ZSBvZiB0aGUgcmhhc2ggY29udGV4dCBjb21tb24gcGFydCAqLwotCWFsaWduZWRfc2l6ZSA9IChvZmZzZXRvZihyaGFzaF9jb250ZXh0X2V4dCwgdmVjdG9yW251bV0pICsgNykgJiB+NzsKKwlhbGlnbmVkX3NpemUgPSAoKG9mZnNldG9mKHJoYXNoX2NvbnRleHRfZXh0LCB2ZWN0b3IpICsgc2l6ZW9mKHJoYXNoX3ZlY3Rvcl9pdGVtKSAqIG51bSkgKyA3KSAmIH43OwogCWFzc2VydChhbGlnbmVkX3NpemUgPj0gc2l6ZW9mKHJoYXNoX2NvbnRleHRfZXh0KSk7CiAKIAkvKiBhbGxvY2F0ZSByaGFzaCBjb250ZXh0IHdpdGggZW5vdWdoIG1lbW9yeSB0byBzdG9yZSBjb250ZXh0cyBvZiBhbGwgdXNlZCBoYXNoZXMgKi8KQEAgLTE3MCwxMSArMTUyLDYgQEAKIAlyZXR1cm4gJnJjdHgtPnJjOyAvKiByZXR1cm4gYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCByaGFzaCBjb250ZXh0ICovCiB9CiAKLS8qKgotICogRnJlZSBSSGFzaCBjb250ZXh0IG1lbW9yeS4KLSAqCi0gKiBAcGFyYW0gY3R4IHRoZSBjb250ZXh0IHRvIGZyZWUuCi0gKi8KIHZvaWQgcmhhc2hfZnJlZShyaGFzaCBjdHgpCiB7CiAJcmhhc2hfY29udGV4dF9leHQqIGNvbnN0IGVjdHggPSAocmhhc2hfY29udGV4dF9leHQqKWN0eDsKQEAgLTE5NSwxMiArMTcyLDYgQEAKIAlmcmVlKGVjdHgpOwogfQogCi0vKioKLSAqIFJlLWluaXRpYWxpemUgUkhhc2ggY29udGV4dCB0byByZXVzZSBpdC4KLSAqIFVzZWZ1bCB0byBzcGVlZCB1cCBwcm9jZXNzaW5nIG9mIG1hbnkgc21hbGwgbWVzc2FnZXMuCi0gKgotICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIHJlaW5pdGlhbGl6ZQotICovCiBSSEFTSF9BUEkgdm9pZCByaGFzaF9yZXNldChyaGFzaCBjdHgpCiB7CiAJcmhhc2hfY29udGV4dF9leHQqIGNvbnN0IGVjdHggPSAocmhhc2hfY29udGV4dF9leHQqKWN0eDsKQEAgLTIyMywxNSArMTk0LDYgQEAKIAllY3R4LT5mbGFncyAmPSB+UkNUWF9GSU5BTElaRUQ7IC8qIGNsZWFyIGZpbmFsaXplZCBzdGF0ZSAqLwogfQogCi0vKioKLSAqIENhbGN1bGF0ZSBoYXNoZXMgb2YgbWVzc2FnZS4KLSAqIENhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSB3aXRoIGNodW5rcyBvZiB0aGUgbWVzc2FnZSB0byBiZSBoYXNoZWQuCi0gKgotICogQHBhcmFtIGN0eCB0aGUgcmhhc2ggY29udGV4dAotICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSBjaHVuawotICogQHBhcmFtIGxlbmd0aCBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzOyBPbiBmYWlsIHJldHVybiAtMSBhbmQgc2V0IGVycm5vCi0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfdXBkYXRlKHJoYXNoIGN0eCwgY29uc3Qgdm9pZCogbWVzc2FnZSwgc2l6ZV90IGxlbmd0aCkKIHsKIAlyaGFzaF9jb250ZXh0X2V4dCogY29uc3QgZWN0eCA9IChyaGFzaF9jb250ZXh0X2V4dCopY3R4OwpAQCAtMjUxLDEzICsyMTMsNiBAQAogCXJldHVybiAwOyAvKiBubyBlcnJvciBwcm9jZXNzaW5nIGF0IHRoZSBtb21lbnQgKi8KIH0KIAotLyoqCi0gKiBGaW5hbGl6ZSBoYXNoIGNhbGN1bGF0aW9uIGFuZCBvcHRpb25hbGx5IHN0b3JlIHRoZSBmaXJzdCBoYXNoLgotICoKLSAqIEBwYXJhbSBjdHggdGhlIHJoYXNoIGNvbnRleHQKLSAqIEBwYXJhbSBmaXJzdF9yZXN1bHQgb3B0aW9uYWwgYnVmZmVyIHRvIHN0b3JlIGEgY2FsY3VsYXRlZCBoYXNoIHdpdGggdGhlIGxvd2VzdCBhdmFpbGFibGUgaWQKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzOyBPbiBmYWlsIHJldHVybiAtMSBhbmQgc2V0IGVycm5vCi0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfZmluYWwocmhhc2ggY3R4LCB1bnNpZ25lZCBjaGFyKiBmaXJzdF9yZXN1bHQpCiB7CiAJdW5zaWduZWQgaSA9IDA7CkBAIC0yOTUsNyArMjUwLDcgQEAKIHsKIAlyaGFzaF9jb250ZXh0X2V4dCogY29uc3QgZWN0eCA9IChyaGFzaF9jb250ZXh0X2V4dCopY3R4OwogCXVuc2lnbmVkIGk7Ci0Jcmhhc2hfdmVjdG9yX2l0ZW0gKml0ZW07CisJcmhhc2hfdmVjdG9yX2l0ZW0qIGl0ZW07CiAJc3RydWN0IHJoYXNoX2hhc2hfaW5mbyogaW5mbzsKIAl1bnNpZ25lZCBjaGFyKiBkaWdlc3Q7CiAKQEAgLTMzMiwzNCArMjg3LDE0IEBACiAJfQogfQogCi0vKioKLSAqIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gdGhlCi0gKiByaGFzaF9maWxlKCkgYW5kIHJoYXNoX2ZpbGVfdXBkYXRlKCkgZnVuY3Rpb25zCi0gKiBvbiBwcm9jZXNzaW5nIGV2ZXJ5IGZpbGUgYmxvY2suIFRoZSBmaWxlIGJsb2NrCi0gKiBzaXplIGlzIHNldCBpbnRlcm5hbGx5IGJ5IHJoYXNoIGFuZCBub3cgaXMgOCBLaUIuCi0gKgotICogQHBhcmFtIGN0eCByaGFzaCBjb250ZXh0Ci0gKiBAcGFyYW0gY2FsbGJhY2sgcG9pbnRlciB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAqIEBwYXJhbSBjYWxsYmFja19kYXRhIHBvaW50ZXIgdG8gZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCi0gKi8KIFJIQVNIX0FQSSB2b2lkIHJoYXNoX3NldF9jYWxsYmFjayhyaGFzaCBjdHgsIHJoYXNoX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQqIGNhbGxiYWNrX2RhdGEpCiB7Ci0JKChyaGFzaF9jb250ZXh0X2V4dCopY3R4KS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkoKHJoYXNoX2NvbnRleHRfZXh0KiljdHgpLT5jYWxsYmFjayA9ICh2b2lkKiljYWxsYmFjazsKIAkoKHJoYXNoX2NvbnRleHRfZXh0KiljdHgpLT5jYWxsYmFja19kYXRhID0gY2FsbGJhY2tfZGF0YTsKIH0KIAorLyogSElHSC1MRVZFTCBMSUJSSEFTSCBJTlRFUkZBQ0UgKi8KIAotLyogaGktbGV2ZWwgbWVzc2FnZSBoYXNoaW5nIGludGVyZmFjZSAqLwotCi0vKioKLSAqIENvbXB1dGUgYSBoYXNoIG9mIHRoZSBnaXZlbiBtZXNzYWdlLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIGhhc2ggc3VtIHRvIGNvbXB1dGUKLSAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIHByb2Nlc3MKLSAqIEBwYXJhbSBsZW5ndGggbWVzc2FnZSBsZW5ndGgKLSAqIEBwYXJhbSByZXN1bHQgYnVmZmVyIHRvIHJlY2VpdmUgYmluYXJ5IGhhc2ggc3RyaW5nCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9tc2codW5zaWduZWQgaGFzaF9pZCwgY29uc3Qgdm9pZCogbWVzc2FnZSwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXJoYXNoIGN0eDsKQEAgLTM3MiwyMiArMzA3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogSGFzaCBhIGZpbGUgb3Igc3RyZWFtLiBNdWx0aXBsZSBoYXNoZXMgY2FuIGJlIGNvbXB1dGVkLgotICogRmlyc3QsIGluaW50aWFsaXplIGN0eCBwYXJhbWV0ZXIgd2l0aCByaGFzaF9pbml0KCkgYmVmb3JlIGNhbGxpbmcKLSAqIHJoYXNoX2ZpbGVfdXBkYXRlKCkuIFRoZW4gdXNlIHJoYXNoX2ZpbmFsKCkgYW5kIHJoYXNoX3ByaW50KCkKLSAqIHRvIHJldHJpdmUgaGFzaCB2YWx1ZXMuIEZpbmFseSBjYWxsIHJoYXNoX2ZyZWUoKSBvbiBjdHgKLSAqIHRvIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBvciBjYWxsIHJoYXNoX3Jlc2V0KCkgdG8gcmV1c2UgY3R4LgotICoKLSAqIEBwYXJhbSBjdHggcmhhc2ggY29udGV4dAotICogQHBhcmFtIGZkIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gaGFzaAotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9maWxlX3VwZGF0ZShyaGFzaCBjdHgsIEZJTEUqIGZkKQogewogCXJoYXNoX2NvbnRleHRfZXh0KiBjb25zdCBlY3R4ID0gKHJoYXNoX2NvbnRleHRfZXh0KiljdHg7CiAJY29uc3Qgc2l6ZV90IGJsb2NrX3NpemUgPSA4MTkyOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKnBtZW07CisJdW5zaWduZWQgY2hhciogYnVmZmVyOworCXVuc2lnbmVkIGNoYXIqIHBtZW07CiAJc2l6ZV90IGxlbmd0aCA9IDAsIGFsaWduODsKIAlpbnQgcmVzID0gMDsKIAlpZiAoZWN0eC0+c3RhdGUgIT0gU1RBVEVfQUNUSVZFKSByZXR1cm4gMDsgLyogZG8gbm90aGluZyBpZiBjYW5jZWxlZCAqLwpAQCAtNDI1LDE0ICszNTAsNiBAQAogCXJldHVybiByZXM7CiB9CiAKLS8qKgotICogQ29tcHV0ZSBhIHNpbmdsZSBoYXNoIGZvciBnaXZlbiBmaWxlLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIGhhc2ggc3VtIHRvIGNvbXB1dGUKLSAqIEBwYXJhbSBmaWxlcGF0aCBwYXRoIHRvIHRoZSBmaWxlIHRvIGhhc2gKLSAqIEBwYXJhbSByZXN1bHQgYnVmZmVyIHRvIHJlY2VpdmUgaGFzaCB2YWx1ZSB3aXRoIHRoZSBsb3dlc3QgcmVxdWVzdGVkIGlkCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX2ZpbGUodW5zaWduZWQgaGFzaF9pZCwgY29uc3QgY2hhciogZmlsZXBhdGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlGSUxFKiBmZDsKQEAgLTQ0Nyw3ICszNjQsMTAgQEAKIAogCWlmICgoZmQgPSBmb3BlbihmaWxlcGF0aCwgInJiIikpID09IE5VTEwpIHJldHVybiAtMTsKIAotCWlmICgoY3R4ID0gcmhhc2hfaW5pdChoYXNoX2lkKSkgPT0gTlVMTCkgcmV0dXJuIC0xOworCWlmICgoY3R4ID0gcmhhc2hfaW5pdChoYXNoX2lkKSkgPT0gTlVMTCkgeworCQlmY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQogCiAJcmVzID0gcmhhc2hfZmlsZV91cGRhdGUoY3R4LCBmZCk7IC8qIGhhc2ggdGhlIGZpbGUgKi8KIAlmY2xvc2UoZmQpOwpAQCAtNDYwLDE0ICszODAsNiBAQAogI2lmZGVmIF9XSU4zMiAvKiB3aW5kb3dzIG9ubHkgZnVuY3Rpb24gKi8KICNpbmNsdWRlIDxzaGFyZS5oPgogCi0vKioKLSAqIENvbXB1dGUgYSBzaW5nbGUgaGFzaCBmb3IgZ2l2ZW4gZmlsZS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiBoYXNoIHN1bSB0byBjb21wdXRlCi0gKiBAcGFyYW0gZmlsZXBhdGggcGF0aCB0byB0aGUgZmlsZSB0byBoYXNoCi0gKiBAcGFyYW0gcmVzdWx0IGJ1ZmZlciB0byByZWNlaXZlIGhhc2ggdmFsdWUgd2l0aCB0aGUgbG93ZXN0IHJlcXVlc3RlZCBpZAotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLCAtMSBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0Ci0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfd2ZpbGUodW5zaWduZWQgaGFzaF9pZCwgY29uc3Qgd2NoYXJfdCogZmlsZXBhdGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlGSUxFKiBmZDsKQEAgLTQ4Miw3ICszOTQsMTAgQEAKIAogCWlmICgoZmQgPSBfd2Zzb3BlbihmaWxlcGF0aCwgTCJyYiIsIF9TSF9ERU5ZV1IpKSA9PSBOVUxMKSByZXR1cm4gLTE7CiAKLQlpZiAoKGN0eCA9IHJoYXNoX2luaXQoaGFzaF9pZCkpID09IE5VTEwpIHJldHVybiAtMTsKKwlpZiAoKGN0eCA9IHJoYXNoX2luaXQoaGFzaF9pZCkpID09IE5VTEwpIHsKKwkJZmNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KIAogCXJlcyA9IHJoYXNoX2ZpbGVfdXBkYXRlKGN0eCwgZmQpOyAvKiBoYXNoIHRoZSBmaWxlICovCiAJZmNsb3NlKGZkKTsKQEAgLTQ5NSwyOCArNDEwLDcgQEAKIAogLyogUkhhc2ggaW5mb3JtYXRpb24gZnVuY3Rpb25zICovCiAKLS8qKgotICogUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGhhc2ggZnVuY3Rpb24gYnkgaXRzIGhhc2hfaWQuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCi0gKiBAcmV0dXJuIHBvaW50ZXIgdG8gdGhlIHJoYXNoX2luZm8gc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uCi0gKi8KLWNvbnN0IHJoYXNoX2luZm8qIHJoYXNoX2luZm9fYnlfaWQodW5zaWduZWQgaGFzaF9pZCkKLXsKLQloYXNoX2lkICY9IFJIQVNIX0FMTF9IQVNIRVM7Ci0JLyogY2hlY2sgdGhhdCBvbmx5IG9uZSBiaXQgaXMgc2V0ICovCi0JaWYgKGhhc2hfaWQgIT0gKGhhc2hfaWQgJiAtKGludCloYXNoX2lkKSkgcmV0dXJuIE5VTEw7Ci0JLyogbm90ZTogYWx0ZXJuYXRpdmUgY29uZGl0aW9uIGlzIChoYXNoX2lkID09IDAgfHwgKGhhc2hfaWQgJiAoaGFzaF9pZCAtIDEpKSAhPSAwKSAqLwotCXJldHVybiByaGFzaF9pbmZvX3RhYmxlW3JoYXNoX2N0eihoYXNoX2lkKV0uaW5mbzsKLX0KLQogI2lmIDAKLS8qKgotICogRGV0ZWN0IGRlZmF1bHQgZGlnZXN0IG91dHB1dCBmb3JtYXQgZm9yIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQotICogQHJldHVybiAxIGZvciBiYXNlMzIgZm9ybWF0LCAwIGZvciBoZXhhZGVjaW1hbAotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX2lzX2Jhc2UzMih1bnNpZ25lZCBoYXNoX2lkKQogewogCS8qIGZhc3QgbWV0aG9kIGlzIGp1c3QgdG8gdGVzdCBhIGJpdC1tYXNrICovCkBAIC01MjQsMTIgKzQxOCw2IEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBSZXR1cm5zIHNpemUgb2YgYmluYXJ5IGRpZ2VzdCBmb3IgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCi0gKiBAcmV0dXJuIGRpZ2VzdCBzaXplIGluIGJ5dGVzCi0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfZ2V0X2RpZ2VzdF9zaXplKHVuc2lnbmVkIGhhc2hfaWQpCiB7CiAJaGFzaF9pZCAmPSBSSEFTSF9BTExfSEFTSEVTOwpAQCAtNTM3LDEyICs0MjUsNiBAQAogCXJldHVybiAoaW50KXJoYXNoX2luZm9fdGFibGVbcmhhc2hfY3R6KGhhc2hfaWQpXS5pbmZvLT5kaWdlc3Rfc2l6ZTsKIH0KIAotLyoqCi0gKiBSZXR1cm5zIGxlbmd0aCBvZiBkaWdlc3QgaGFzaCBzdHJpbmcgaW4gZGVmYXVsdCBvdXRwdXQgZm9ybWF0LgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQotICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIGhhc2ggc3RyaW5nCi0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfZ2V0X2hhc2hfbGVuZ3RoKHVuc2lnbmVkIGhhc2hfaWQpCiB7CiAJY29uc3Qgcmhhc2hfaW5mbyogaW5mbyA9IHJoYXNoX2luZm9fYnlfaWQoaGFzaF9pZCk7CkBAIC01NTAsMjYgKzQzMiwxMiBAQAogCQlCQVNFMzJfTEVOR1RIKGluZm8tPmRpZ2VzdF9zaXplKSA6IGluZm8tPmRpZ2VzdF9zaXplICogMikgOiAwKTsKIH0KIAotLyoqCi0gKiBSZXR1cm5zIGEgbmFtZSBvZiBnaXZlbiBoYXNoIGFsZ29yaXRobS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KLSAqIEByZXR1cm4gYWxnb3JpdGhtIG5hbWUKLSAqLwogUkhBU0hfQVBJIGNvbnN0IGNoYXIqIHJoYXNoX2dldF9uYW1lKHVuc2lnbmVkIGhhc2hfaWQpCiB7CiAJY29uc3Qgcmhhc2hfaW5mbyogaW5mbyA9IHJoYXNoX2luZm9fYnlfaWQoaGFzaF9pZCk7CiAJcmV0dXJuIChpbmZvID8gaW5mby0+bmFtZSA6IDApOwogfQogCi0vKioKLSAqIFJldHVybnMgYSBuYW1lIHBhcnQgb2YgbWFnbmV0IHVybiBvZiB0aGUgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCi0gKiBTdWNoIG1hZ25ldF9uYW1lIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBtYWduZXQgbGluayBvZiB0aGUgZm9ybQotICogdXJuOiZsdDttYWduZXRfbmFtZSZndDs9Jmx0O2hhc2hfdmFsdWUmZ3Q7LgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQotICogQHJldHVybiBuYW1lCi0gKi8KIFJIQVNIX0FQSSBjb25zdCBjaGFyKiByaGFzaF9nZXRfbWFnbmV0X25hbWUodW5zaWduZWQgaGFzaF9pZCkKIHsKIAljb25zdCByaGFzaF9pbmZvKiBpbmZvID0gcmhhc2hfaW5mb19ieV9pZChoYXNoX2lkKTsKQEAgLTU5OSw3ICs0NjcsNyBAQAogCX0KIAogCWlmIChmaWxlcGF0aCkgewotCQlzaXplICs9IDQgKyByaGFzaF91cmxlbmNvZGUoTlVMTCwgZmlsZXBhdGgpOworCQlzaXplICs9IDQgKyByaGFzaF91cmxlbmNvZGUoTlVMTCwgZmlsZXBhdGgsIHN0cmxlbihmaWxlcGF0aCksIDApOwogCX0KIAogCS8qIGxvb3AgdGhyb3VnaCBoYXNoIHZhbHVlcyAqLwpAQCAtNjEwLDM0ICs0NzgsMjAgQEAKIAogCQlzaXplICs9ICg3ICsgMikgKyBzdHJsZW4obmFtZSk7CiAJCXNpemUgKz0gcmhhc2hfcHJpbnQoTlVMTCwgY29udGV4dCwgYml0LAotCQkJKGJpdCAmIChSSEFTSF9TSEExIHwgUkhBU0hfQlRJSCkgPyBSSFBSX0JBU0UzMiA6IDApKTsKKwkJCShiaXQgJiBSSEFTSF9TSEExID8gUkhQUl9CQVNFMzIgOiAwKSk7CiAJfQogCiAJcmV0dXJuIHNpemU7CiB9CiAKLS8qKgotICogUHJpbnQgbWFnbmV0IGxpbmsgd2l0aCBnaXZlbiBmaWxlcGF0aCBhbmQgY2FsY3VsYXRlZCBoYXNoIHN1bXMgaW50byB0aGUKLSAqIG91dHB1dCBidWZmZXIuIFRoZSBoYXNoX21hc2sgY2FuIGxpbWl0IHdoaWNoIGhhc2ggdmFsdWVzIHdpbGwgYmUgcHJpbnRlZC4KLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBidWZmZXIuCi0gKiBJZiBvdXRwdXQgaXMgTlVMTCB0aGUgLgotICoKLSAqIEBwYXJhbSBvdXRwdXQgYSBzdHJpbmcgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG1hZ25ldCBsaW5rIG9yIE5VTEwKLSAqIEBwYXJhbSBmaWxlcGF0aCB0aGUgZmlsZSBwYXRoIHRvIGJlIHByaW50ZWQgb3IgTlVMTAotICogQHBhcmFtIGNvbnRleHQgYWxnb3JpdGhtcyBzdGF0ZQotICogQHBhcmFtIGhhc2hfbWFzayBiaXQgbWFzayBvZiB0aGUgaGFzaCBzdW1zIHRvIGFkZCB0byB0aGUgbGluawotICogQHBhcmFtIGZsYWdzICAgY2FuIGJlIGNvbWJpbmF0aW9uIG9mIGJpdHMgUkhQUl9VUFBFUkNBU0UsIFJIUFJfTk9fTUFHTkVULAotICogICAgICAgICAgICAgICAgUkhQUl9GSUxFU0laRQotICogQHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgdGVybWluYXRpbmcgJ1wwJyBvbiBzdWNjZXNzLCAwIG9uIGZhaWwKLSAqLwogUkhBU0hfQVBJIHNpemVfdCByaGFzaF9wcmludF9tYWduZXQoY2hhciogb3V0cHV0LCBjb25zdCBjaGFyKiBmaWxlcGF0aCwKIAlyaGFzaCBjb250ZXh0LCB1bnNpZ25lZCBoYXNoX21hc2ssIGludCBmbGFncykKIHsKIAlpbnQgaTsKIAljb25zdCBjaGFyKiBiZWdpbiA9IG91dHB1dDsKIAotCWlmIChvdXRwdXQgPT0gTlVMTCkgcmV0dXJuIHJoYXNoX2dldF9tYWduZXRfdXJsX3NpemUoCi0JCWZpbGVwYXRoLCBjb250ZXh0LCBoYXNoX21hc2ssIGZsYWdzKTsKKwlpZiAob3V0cHV0ID09IE5VTEwpCisJCXJldHVybiByaGFzaF9nZXRfbWFnbmV0X3VybF9zaXplKGZpbGVwYXRoLCBjb250ZXh0LCBoYXNoX21hc2ssIGZsYWdzKTsKIAogCS8qIFJIUFJfTk9fTUFHTkVULCBSSFBSX0ZJTEVTSVpFICovCiAJaWYgKChmbGFncyAmIFJIUFJfTk9fTUFHTkVUKSA9PSAwKSB7CkBAIC02NTIsMTMgKzUwNiwxMyBAQAogCQkqKG91dHB1dCsrKSA9ICcmJzsKIAl9CiAKKwlmbGFncyAmPSBSSFBSX1VQUEVSQ0FTRTsKIAlpZiAoZmlsZXBhdGgpIHsKIAkJc3RyY3B5KG91dHB1dCwgImRuPSIpOwogCQlvdXRwdXQgKz0gMzsKLQkJb3V0cHV0ICs9IHJoYXNoX3VybGVuY29kZShvdXRwdXQsIGZpbGVwYXRoKTsKKwkJb3V0cHV0ICs9IHJoYXNoX3VybGVuY29kZShvdXRwdXQsIGZpbGVwYXRoLCBzdHJsZW4oZmlsZXBhdGgpLCBmbGFncyk7CiAJCSoob3V0cHV0KyspID0gJyYnOwogCX0KLQlmbGFncyAmPSBSSFBSX1VQUEVSQ0FTRTsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJdW5zaWduZWQgYml0OwpAQCAtNjc5LDcgKzUzMyw3IEBACiAJCQlvdXRwdXQgKz0gc3RybGVuKG5hbWUpOwogCQkJKihvdXRwdXQrKykgPSAnOic7CiAJCQlvdXRwdXQgKz0gcmhhc2hfcHJpbnQob3V0cHV0LCBjb250ZXh0LCBiaXQsCi0JCQkJKGJpdCAmIChSSEFTSF9TSEExIHwgUkhBU0hfQlRJSCkgPyBmbGFncyB8IFJIUFJfQkFTRTMyIDogZmxhZ3MpKTsKKwkJCQkoYml0ICYgUkhBU0hfU0hBMSA/IGZsYWdzIHwgUkhQUl9CQVNFMzIgOiBmbGFncykpOwogCQkJKihvdXRwdXQrKykgPSAnJic7CiAJCX0KIAl9CkBAIC02ODgsNjIgKzU0MiwzOSBAQAogCXJldHVybiAob3V0cHV0IC0gYmVnaW4pOwogfQogCi0vKiBoYXNoIHN1bSBvdXRwdXQgKi8KIAotLyoqCi0gKiBQcmludCBhIHRleHQgcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gaGFzaCBzdW0gdG8gdGhlIHNwZWNpZmllZCBidWZmZXIsCi0gKgotICogQHBhcmFtIG91dHB1dCBhIGJ1ZmZlciB0byBwcmludCB0aGUgaGFzaCB0bwotICogQHBhcmFtIGJ5dGVzIGEgaGFzaCBzdW0gdG8gcHJpbnQKLSAqIEBwYXJhbSBzaXplIGEgc2l6ZSBvZiBoYXNoIHN1bSBpbiBieXRlcwotICogQHBhcmFtIGZsYWdzICBhIGJpdC1tYXNrIGNvbnRyb2xsaW5nIGhvdyB0byBmb3JtYXQgdGhlIGhhc2ggc3VtLAotICogICAgICAgICAgICAgICBjYW4gYmUgYSBtaXggb2YgdGhlIGZsYWdzOiBSSFBSX1JBVywgUkhQUl9IRVgsIFJIUFJfQkFTRTMyLAotICogICAgICAgICAgICAgICBSSFBSX0JBU0U2NCwgUkhQUl9VUFBFUkNBU0UsIFJIUFJfUkVWRVJTRQotICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gY2hhcmFjdGVycwotICovCi1zaXplX3Qgcmhhc2hfcHJpbnRfYnl0ZXMoY2hhciogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcywKLQlzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorLyogSEFTSCBTVU0gT1VUUFVUIElOVEVSRkFDRSAqLworCitzaXplX3Qgcmhhc2hfcHJpbnRfYnl0ZXMoY2hhciogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcywgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKLQlzaXplX3Qgc3RyX2xlbjsKKwlzaXplX3QgcmVzdWx0X2xlbmd0aDsKIAlpbnQgdXBwZXJfY2FzZSA9IChmbGFncyAmIFJIUFJfVVBQRVJDQVNFKTsKIAlpbnQgZm9ybWF0ID0gKGZsYWdzICYgflJIUFJfTU9ESUZJRVIpOwogCiAJc3dpdGNoIChmb3JtYXQpIHsKIAljYXNlIFJIUFJfSEVYOgotCQlzdHJfbGVuID0gc2l6ZSAqIDI7Ci0JCXJoYXNoX2J5dGVfdG9faGV4KG91dHB1dCwgYnl0ZXMsICh1bnNpZ25lZClzaXplLCB1cHBlcl9jYXNlKTsKKwkJcmVzdWx0X2xlbmd0aCA9IHNpemUgKiAyOworCQlyaGFzaF9ieXRlX3RvX2hleChvdXRwdXQsIGJ5dGVzLCBzaXplLCB1cHBlcl9jYXNlKTsKIAkJYnJlYWs7CiAJY2FzZSBSSFBSX0JBU0UzMjoKLQkJc3RyX2xlbiA9IEJBU0UzMl9MRU5HVEgoc2l6ZSk7Ci0JCXJoYXNoX2J5dGVfdG9fYmFzZTMyKG91dHB1dCwgYnl0ZXMsICh1bnNpZ25lZClzaXplLCB1cHBlcl9jYXNlKTsKKwkJcmVzdWx0X2xlbmd0aCA9IEJBU0UzMl9MRU5HVEgoc2l6ZSk7CisJCXJoYXNoX2J5dGVfdG9fYmFzZTMyKG91dHB1dCwgYnl0ZXMsIHNpemUsIHVwcGVyX2Nhc2UpOwogCQlicmVhazsKIAljYXNlIFJIUFJfQkFTRTY0OgotCQlzdHJfbGVuID0gQkFTRTY0X0xFTkdUSChzaXplKTsKLQkJcmhhc2hfYnl0ZV90b19iYXNlNjQob3V0cHV0LCBieXRlcywgKHVuc2lnbmVkKXNpemUpOworCQlyZXN1bHRfbGVuZ3RoID0gcmhhc2hfYmFzZTY0X3VybF9lbmNvZGVkX2hlbHBlcihvdXRwdXQsIGJ5dGVzLCBzaXplLCAoZmxhZ3MgJiBSSFBSX1VSTEVOQ09ERSksIHVwcGVyX2Nhc2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzdHJfbGVuID0gc2l6ZTsKLQkJbWVtY3B5KG91dHB1dCwgYnl0ZXMsIHNpemUpOworCQlpZiAoZmxhZ3MgJiBSSFBSX1VSTEVOQ09ERSkgeworCQkJcmVzdWx0X2xlbmd0aCA9IHJoYXNoX3VybGVuY29kZShvdXRwdXQsIChjaGFyKilieXRlcywgc2l6ZSwgdXBwZXJfY2FzZSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkob3V0cHV0LCBieXRlcywgc2l6ZSk7CisJCQlyZXN1bHRfbGVuZ3RoID0gc2l6ZTsKKwkJfQogCQlicmVhazsKIAl9Ci0JcmV0dXJuIHN0cl9sZW47CisJcmV0dXJuIHJlc3VsdF9sZW5ndGg7CiB9CiAKLS8qKgotICogUHJpbnQgdGV4dCBwcmVzZW50YXRpb24gb2YgYSBoYXNoIHN1bSB3aXRoIGdpdmVuIGhhc2hfaWQgdG8gdGhlIHNwZWNpZmllZAotICogb3V0cHV0IGJ1ZmZlci4gSWYgdGhlIGhhc2hfaWQgaXMgemVybywgdGhlbiBwcmludCB0aGUgaGFzaCBzdW0gd2l0aAotICogdGhlIGxvd2VzdCBpZCBzdG9yZWQgaW4gdGhlIGhhc2ggY29udGV4dC4KLSAqIFRoZSBmdW5jdGlvbiBjYWxsIGZhaWxzIGlmIHRoZSBjb250ZXh0IGRvZXNuJ3QgaW5jbHVkZSBhIGhhc2ggd2l0aCB0aGUKLSAqIGdpdmVuIGhhc2hfaWQuCi0gKgotICogQHBhcmFtIG91dHB1dCBhIGJ1ZmZlciB0byBwcmludCB0aGUgaGFzaCB0bwotICogQHBhcmFtIGNvbnRleHQgYWxnb3JpdGhtcyBzdGF0ZQotICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgdGhlIGhhc2ggc3VtIHRvIHByaW50IG9yIDAgdG8gcHJpbnQgdGhlIGZpcnN0IGhhc2gKLSAqICAgICAgICAgICAgICAgIHNhdmVkIGluIHRoZSBjb250ZXh0LgotICogQHBhcmFtIGZsYWdzICBhIGJpdG1hc2sgY29udHJvbGxpbmcgaG93IHRvIHByaW50IHRoZSBoYXNoLiBDYW4gY29udGFpbiBmbGFncwotICogICAgICAgICAgICAgICBSSFBSX1VQUEVSQ0FTRSwgUkhQUl9IRVgsIFJIUFJfQkFTRTMyLCBSSFBSX0JBU0U2NCwgZXRjLgotICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gY2hhcmFjdGVycyBvbiBzdWNjZXNzIG9yIDAgb24gZmFpbAotICovCiBzaXplX3QgUkhBU0hfQVBJIHJoYXNoX3ByaW50KGNoYXIqIG91dHB1dCwgcmhhc2ggY29udGV4dCwgdW5zaWduZWQgaGFzaF9pZCwgaW50IGZsYWdzKQogewogCWNvbnN0IHJoYXNoX2luZm8qIGluZm87CkBAIC03NjQsMTUgKzU5NSwxNiBAQAogCX0KIAogCWlmIChvdXRwdXQgPT0gTlVMTCkgeworCQlzaXplX3QgbXVsdGlwbGllciA9IChmbGFncyAmIFJIUFJfVVJMRU5DT0RFID8gMyA6IDEpOwogCQlzd2l0Y2ggKGZsYWdzICYgUkhQUl9GT1JNQVQpIHsKIAkJY2FzZSBSSFBSX0hFWDoKIAkJCXJldHVybiAoZGlnZXN0X3NpemUgKiAyKTsKIAkJY2FzZSBSSFBSX0JBU0UzMjoKIAkJCXJldHVybiBCQVNFMzJfTEVOR1RIKGRpZ2VzdF9zaXplKTsKIAkJY2FzZSBSSFBSX0JBU0U2NDoKLQkJCXJldHVybiBCQVNFNjRfTEVOR1RIKGRpZ2VzdF9zaXplKTsKKwkJCXJldHVybiBCQVNFNjRfTEVOR1RIKGRpZ2VzdF9zaXplKSAqIG11bHRpcGxpZXI7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gZGlnZXN0X3NpemU7CisJCQlyZXR1cm4gZGlnZXN0X3NpemUgKiBtdWx0aXBsaWVyOwogCQl9CiAJfQogCkBAIC03ODEsNyArNjEzLDggQEAKIAogCWlmICgoZmxhZ3MgJiB+UkhQUl9VUFBFUkNBU0UpID09IChSSFBSX1JFVkVSU0UgfCBSSFBSX0hFWCkpIHsKIAkJLyogcmV2ZXJzZSB0aGUgZGlnZXN0ICovCi0JCXVuc2lnbmVkIGNoYXIgKnAgPSBkaWdlc3QsICpyID0gZGlnZXN0ICsgZGlnZXN0X3NpemUgLSAxOworCQl1bnNpZ25lZCBjaGFyKiBwID0gZGlnZXN0OworCQl1bnNpZ25lZCBjaGFyKiByID0gZGlnZXN0ICsgZGlnZXN0X3NpemUgLSAxOwogCQljaGFyIHRtcDsKIAkJZm9yICg7IHAgPCByOyBwKyssIHItLSkgewogCQkJdG1wID0gKnA7CkBAIC03OTMsNyArNjI2LDcgQEAKIAlyZXR1cm4gcmhhc2hfcHJpbnRfYnl0ZXMob3V0cHV0LCBkaWdlc3QsIGRpZ2VzdF9zaXplLCBmbGFncyk7CiB9CiAKLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChSSEFTSF9FWFBPUlRTKQorI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSkgJiYgZGVmaW5lZChSSEFTSF9FWFBPUlRTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIEJPT0wgQVBJRU5UUlkgRGxsTWFpbihITU9EVUxFIGhNb2R1bGUsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKTsKIEJPT0wgQVBJRU5UUlkgRGxsTWFpbihITU9EVUxFIGhNb2R1bGUsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQpAQCAtODE0LDE3ICs2NDcsOCBAQAogfQogI2VuZGlmCiAKLSNkZWZpbmUgUFZPSUQyVVBUUihwKSAoKHJoYXNoX3VwdHJfdCkoKGNoYXIqKXAgLSAwKSkKKyNkZWZpbmUgUFZPSUQyVVBUUihwKSAoKHJoYXNoX3VwdHJfdCkoKChjaGFyKikocCkpICsgMCkpCiAKLS8qKgotICogUHJvY2VzcyBhIHJoYXNoIG1lc3NhZ2UuCi0gKgotICogQHBhcmFtIG1zZ19pZCBtZXNzYWdlIGlkZW50aWZpZXIKLSAqIEBwYXJhbSBkc3QgbWVzc2FnZSBkZXN0aW5hdGlvbiAoY2FuIGJlIE5VTEwgZm9yIGdlbmVyaWMgbWVzc2FnZXMpCi0gKiBAcGFyYW0gbGRhdGEgZGF0YSBkZXBlbmRpbmcgb24gbWVzc2FnZQotICogQHBhcmFtIHJkYXRhIGRhdGEgZGVwZW5kaW5nIG9uIG1lc3NhZ2UKLSAqIEByZXR1cm4gbWVzc2FnZS1zcGVjaWZpYyBkYXRhCi0gKi8KIFJIQVNIX0FQSSByaGFzaF91cHRyX3Qgcmhhc2hfdHJhbnNtaXQodW5zaWduZWQgbXNnX2lkLCB2b2lkKiBkc3QsIHJoYXNoX3VwdHJfdCBsZGF0YSwgcmhhc2hfdXB0cl90IHJkYXRhKQogewogCS8qIGZvciBtZXNzYWdlcyB3b3JraW5nIHdpdGggcmhhc2ggY29udGV4dCAqLwpAQCAtODY1LDYgKzY4OSwxMCBAQAogCWNhc2UgUk1TR19HRVRfT1BFTlNTTF9NQVNLOgogCQlyZXR1cm4gcmhhc2hfb3BlbnNzbF9oYXNoX21hc2s7CiAjZW5kaWYKKwljYXNlIFJNU0dfR0VUX09QRU5TU0xfU1VQUE9SVEVEX01BU0s6CisJCXJldHVybiByaGFzaF9nZXRfb3BlbnNzbF9zdXBwb3J0ZWRfaGFzaF9tYXNrKCk7CisJY2FzZSBSTVNHX0dFVF9PUEVOU1NMX0FWQUlMQUJMRV9NQVNLOgorCQlyZXR1cm4gcmhhc2hfZ2V0X29wZW5zc2xfYXZhaWxhYmxlX2hhc2hfbWFzaygpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIFJIQVNIX0VSUk9SOyAvKiB1bmtub3duIG1lc3NhZ2UgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oCmluZGV4IGNlZTBlMjUuLmMwMTE3NjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guaApAQCAtOSw3ICs5LDkgQEAKICNlbmRpZgogCiAjaWZuZGVmIFJIQVNIX0FQSQotLyogbW9kaWZpZXIgZm9yIExpYlJIYXNoIGZ1bmN0aW9ucyAqLworLyoqCisgKiBNb2RpZmllciBmb3IgTGliUkhhc2ggZnVuY3Rpb25zCisgKi8KICMgZGVmaW5lIFJIQVNIX0FQSQogI2VuZGlmCiAKQEAgLTMyLDExICszNCwxMSBAQAogCVJIQVNIX0FJQ0ggID0gMHgxMDAsCiAJUkhBU0hfV0hJUkxQT09MID0gMHgyMDAsCiAJUkhBU0hfUklQRU1EMTYwID0gMHg0MDAsCi0JUkhBU0hfR09TVCAgICAgID0gMHg4MDAsCi0JUkhBU0hfR09TVF9DUllQVE9QUk8gPSAweDEwMDAsCi0JUkhBU0hfSEFTMTYwICAgID0gMHgyMDAwLAotCVJIQVNIX1NORUZSVTEyOCA9IDB4NDAwMCwKLQlSSEFTSF9TTkVGUlUyNTYgPSAweDgwMDAsCisJUkhBU0hfR09TVDk0ICAgID0gMHg4MDAsCisJUkhBU0hfR09TVDk0X0NSWVBUT1BSTyA9IDB4MTAwMCwKKwlSSEFTSF9IQVMxNjAgICAgID0gMHgyMDAwLAorCVJIQVNIX0dPU1QxMl8yNTYgPSAweDQwMDAsCisJUkhBU0hfR09TVDEyXzUxMiA9IDB4ODAwMCwKIAlSSEFTSF9TSEEyMjQgICAgPSAweDEwMDAwLAogCVJIQVNIX1NIQTI1NiAgICA9IDB4MjAwMDAsCiAJUkhBU0hfU0hBMzg0ICAgID0gMHg0MDAwMCwKQEAgLTQ3LDE4ICs0OSwyOCBAQAogCVJIQVNIX1NIQTNfMjU2ICA9IDB4MDgwMDAwMCwKIAlSSEFTSF9TSEEzXzM4NCAgPSAweDEwMDAwMDAsCiAJUkhBU0hfU0hBM181MTIgID0gMHgyMDAwMDAwLAorCVJIQVNIX0NSQzMyQyAgICA9IDB4NDAwMDAwMCwKKwlSSEFTSF9TTkVGUlUxMjggPSAweDgwMDAwMDAsCisJUkhBU0hfU05FRlJVMjU2ID0gMHgxMDAwMDAwMCwKIAotCS8qKiBUaGUgYml0LW1hc2sgY29udGFpbmluZyBhbGwgc3VwcG9ydGVkIGhhc2hlIGZ1bmN0aW9ucyAqLwotCVJIQVNIX0FMTF9IQVNIRVMgPSBSSEFTSF9DUkMzMiB8IFJIQVNIX01ENCB8IFJIQVNIX01ENSB8IFJIQVNIX0VEMksgfCBSSEFTSF9TSEExIHwKLQkJUkhBU0hfVElHRVIgfCBSSEFTSF9UVEggfCBSSEFTSF9HT1NUIHwgUkhBU0hfR09TVF9DUllQVE9QUk8gfAorCS8qKgorCSAqIFRoZSBiaXQtbWFzayBjb250YWluaW5nIGFsbCBzdXBwb3J0ZWQgaGFzaGUgZnVuY3Rpb25zLgorCSAqLworCVJIQVNIX0FMTF9IQVNIRVMgPSBSSEFTSF9DUkMzMiB8IFJIQVNIX0NSQzMyQyB8IFJIQVNIX01ENCB8IFJIQVNIX01ENSB8CisJCVJIQVNIX0VEMksgfCBSSEFTSF9TSEExIHxSSEFTSF9USUdFUiB8IFJIQVNIX1RUSCB8CisJCVJIQVNIX0dPU1Q5NCB8IFJIQVNIX0dPU1Q5NF9DUllQVE9QUk8gfCBSSEFTSF9HT1NUMTJfMjU2IHwgUkhBU0hfR09TVDEyXzUxMiB8CiAJCVJIQVNIX0JUSUggfCBSSEFTSF9BSUNIIHwgUkhBU0hfV0hJUkxQT09MIHwgUkhBU0hfUklQRU1EMTYwIHwKIAkJUkhBU0hfSEFTMTYwIHwgUkhBU0hfU05FRlJVMTI4IHwgUkhBU0hfU05FRlJVMjU2IHwKIAkJUkhBU0hfU0hBMjI0IHwgUkhBU0hfU0hBMjU2IHwgUkhBU0hfU0hBMzg0IHwgUkhBU0hfU0hBNTEyIHwKIAkJUkhBU0hfU0hBM18yMjQgfCBSSEFTSF9TSEEzXzI1NiB8IFJIQVNIX1NIQTNfMzg0IHwgUkhBU0hfU0hBM181MTIgfAogCQlSSEFTSF9FRE9OUjI1NiB8IFJIQVNIX0VET05SNTEyLAogCi0JLyoqIFRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zICovCi0JUkhBU0hfSEFTSF9DT1VOVCA9IDI2CisJUkhBU0hfR09TVCA9IFJIQVNIX0dPU1Q5NCwgLyogZGVwcmVjYXRlZCBjb25zdGFudCBuYW1lICovCisJUkhBU0hfR09TVF9DUllQVE9QUk8gPSBSSEFTSF9HT1NUOTRfQ1JZUFRPUFJPLCAvKiBkZXByZWNhdGVkIGNvbnN0YW50IG5hbWUgKi8KKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGZ1bmN0aW9ucy4KKwkgKi8KKwlSSEFTSF9IQVNIX0NPVU5UID0gMjkKICNlbHNlCiAJUkhBU0hfTUQ1ICAgICAgICA9IDB4MDEsCiAJUkhBU0hfU0hBMSAgICAgICA9IDB4MDIsCkBAIC04NiwxNSArOTgsMTcgQEAKIH07CiAKIC8qKgotICogVGhlIHJoYXNoIGNvbnRleHQgc3RydWN0dXJlIGNvbnRhaW5zIGNvbnRleHRzIGZvciBzZXZlcmFsIGhhc2ggZnVuY3Rpb25zCisgKiBUaGUgcmhhc2ggY29udGV4dCBzdHJ1Y3R1cmUgY29udGFpbnMgY29udGV4dHMgZm9yIHNldmVyYWwgaGFzaCBmdW5jdGlvbnMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHJoYXNoX2NvbnRleHQKIHsKLQkvKiogVGhlIHNpemUgb2YgdGhlIGhhc2hlZCBtZXNzYWdlICovCisJLyoqCisJICogVGhlIHNpemUgb2YgdGhlIGhhc2hlZCBtZXNzYWdlLgorCSAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtc2dfc2l6ZTsKIAogCS8qKgotCSAqIFRoZSBiaXQtbWFzayBjb250YWluaW5nIGlkZW50aWZpZXJzIG9mIHRoZSBoYXNoZXMgYmVpbmcgY2FsY3VsYXRlZAorCSAqIFRoZSBiaXQtbWFzayBjb250YWluaW5nIGlkZW50aWZpZXJzIG9mIHRoZSBoYXNoZXMgYmVpbmcgY2FsY3VsYXRlZC4KIAkgKi8KIAl1bnNpZ25lZCBoYXNoX2lkOwogfSByaGFzaF9jb250ZXh0OwpAQCAtMTA3LDEwOSArMTIxLDI4NSBAQAogdHlwZWRlZiBzdHJ1Y3Qgcmhhc2hfY29udGV4dCogcmhhc2g7CiAjZW5kaWYgLyogTElCUkhBU0hfUkhBU0hfQ1RYX0RFRklORUQgKi8KIAotLyoqIHR5cGUgb2YgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IHdoaWxlIGhhc2hpbmcgYSBmaWxlICovCisvKioKKyAqIFR5cGUgb2YgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IHdoaWxlIGhhc2hpbmcgYSBmaWxlLgorICovCiB0eXBlZGVmIHZvaWQgKCpyaGFzaF9jYWxsYmFja190KSh2b2lkKiBkYXRhLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KTsKIAotUkhBU0hfQVBJIHZvaWQgcmhhc2hfbGlicmFyeV9pbml0KHZvaWQpOyAvKiBpbml0aWFsaXplIHN0YXRpYyBkYXRhICovCisvKioKKyAqIEluaXRpYWxpemUgc3RhdGljIGRhdGEgb2Ygcmhhc2ggYWxnb3JpdGhtcworICovCitSSEFTSF9BUEkgdm9pZCByaGFzaF9saWJyYXJ5X2luaXQodm9pZCk7CiAKLS8qIGhpLWxldmVsIGhhc2hpbmcgZnVuY3Rpb25zICovCisKKy8qIEhJR0gtTEVWRUwgTElCUkhBU0ggSU5URVJGQUNFICovCisKKy8qKgorICogQ29tcHV0ZSBhIGhhc2ggb2YgdGhlIGdpdmVuIG1lc3NhZ2UuCisgKgorICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgaGFzaCBzdW0gdG8gY29tcHV0ZQorICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UgdG8gcHJvY2VzcworICogQHBhcmFtIGxlbmd0aCBtZXNzYWdlIGxlbmd0aAorICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcmVjZWl2ZSBiaW5hcnkgaGFzaCBzdHJpbmcKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX21zZyh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCB2b2lkKiBtZXNzYWdlLCBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwotUkhBU0hfQVBJIGludCByaGFzaF9maWxlKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IGNoYXIqIGZpbGVwYXRoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwotUkhBU0hfQVBJIGludCByaGFzaF9maWxlX3VwZGF0ZShyaGFzaCBjdHgsIEZJTEUqIGZkKTsKIAotI2lmZGVmIF9XSU4zMiAvKiB3aW5kb3dzIG9ubHkgZnVuY3Rpb24gKi8KKy8qKgorICogQ29tcHV0ZSBhIHNpbmdsZSBoYXNoIGZvciBnaXZlbiBmaWxlLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIGhhc2ggc3VtIHRvIGNvbXB1dGUKKyAqIEBwYXJhbSBmaWxlcGF0aCBwYXRoIHRvIHRoZSBmaWxlIHRvIGhhc2gKKyAqIEBwYXJhbSByZXN1bHQgYnVmZmVyIHRvIHJlY2VpdmUgaGFzaCB2YWx1ZSB3aXRoIHRoZSBsb3dlc3QgcmVxdWVzdGVkIGlkCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAorICovCitSSEFTSF9BUEkgaW50IHJoYXNoX2ZpbGUodW5zaWduZWQgaGFzaF9pZCwgY29uc3QgY2hhciogZmlsZXBhdGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CisKKyNpZmRlZiBfV0lOMzIKKy8qKgorICogQ29tcHV0ZSBhIHNpbmdsZSBoYXNoIGZvciBnaXZlbiBmaWxlIChXaW5kb3dzLXNwZWNpZmljIGZ1bmN0aW9uKS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiBoYXNoIHN1bSB0byBjb21wdXRlCisgKiBAcGFyYW0gZmlsZXBhdGggcGF0aCB0byB0aGUgZmlsZSB0byBoYXNoCisgKiBAcGFyYW0gcmVzdWx0IGJ1ZmZlciB0byByZWNlaXZlIGhhc2ggdmFsdWUgd2l0aCB0aGUgbG93ZXN0IHJlcXVlc3RlZCBpZAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLCAtMSBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0CisgKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfd2ZpbGUodW5zaWduZWQgaGFzaF9pZCwgY29uc3Qgd2NoYXJfdCogZmlsZXBhdGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CiAjZW5kaWYKIAotLyogbG8tbGV2ZWwgaW50ZXJmYWNlICovCi1SSEFTSF9BUEkgcmhhc2ggcmhhc2hfaW5pdCh1bnNpZ25lZCBoYXNoX2lkKTsKLS8qUkhBU0hfQVBJIHJoYXNoIHJoYXNoX2luaXRfYnlfaWRzKHVuc2lnbmVkIGhhc2hfaWRzW10sIHVuc2lnbmVkIGNvdW50KTsqLwotUkhBU0hfQVBJIGludCAgcmhhc2hfdXBkYXRlKHJoYXNoIGN0eCwgY29uc3Qgdm9pZCogbWVzc2FnZSwgc2l6ZV90IGxlbmd0aCk7Ci1SSEFTSF9BUEkgaW50ICByaGFzaF9maW5hbChyaGFzaCBjdHgsIHVuc2lnbmVkIGNoYXIqIGZpcnN0X3Jlc3VsdCk7Ci1SSEFTSF9BUEkgdm9pZCByaGFzaF9yZXNldChyaGFzaCBjdHgpOyAvKiByZWluaXRpYWxpemUgdGhlIGNvbnRleHQgKi8KLVJIQVNIX0FQSSB2b2lkIHJoYXNoX2ZyZWUocmhhc2ggY3R4KTsKIAotLyogYWRkaXRpb25hbCBsby1sZXZlbCBmdW5jdGlvbnMgKi8KLVJIQVNIX0FQSSB2b2lkICByaGFzaF9zZXRfY2FsbGJhY2socmhhc2ggY3R4LCByaGFzaF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkKiBjYWxsYmFja19kYXRhKTsKLQotLyoqIGJpdC1mbGFnOiBkZWZhdWx0IGhhc2ggb3V0cHV0IGZvcm1hdCBpcyBiYXNlMzIgKi8KLSNkZWZpbmUgUkhBU0hfSU5GT19CQVNFMzIgMQorLyogTE9XLUxFVkVMIExJQlJIQVNIIElOVEVSRkFDRSAqLwogCiAvKioKLSAqIEluZm9ybWF0aW9uIGFib3V0IGEgaGFzaCBmdW5jdGlvbi4KKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIFJIYXNoIGNvbnRleHQgZm9yIGNhbGN1bGF0aW5nIGhhc2goZXMpLgorICogQWZ0ZXIgaW5pdGlhbGl6aW5nIHJoYXNoX3VwZGF0ZSgpL3JoYXNoX2ZpbmFsKCkgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkLgorICogVGhlbiB0aGUgY29udGV4dCBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcgcmhhc2hfZnJlZSgpLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHVuaW9uIG9mIGJpdCBmbGFncywgY29udGFpbmluZyBpZHMgb2YgaGFzaGVzIHRvIGNhbGN1bGF0ZS4KKyAqIEByZXR1cm4gaW5pdGlhbGl6ZWQgcmhhc2ggY29udGV4dCwgTlVMTCBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0CiAgKi8KLXR5cGVkZWYgc3RydWN0IHJoYXNoX2luZm8KLXsKLQkvKiogaGFzaCBmdW5jdGlvbiBpbmRlbnRpZmllciAqLwotCXVuc2lnbmVkIGhhc2hfaWQ7Ci0JLyoqIGZsYWdzIGJpdC1tYXNrLCBpbmNsdWRpbmcgUkhBU0hfSU5GT19CQVNFMzIgYml0ICovCi0JdW5zaWduZWQgZmxhZ3M7Ci0JLyoqIHNpemUgb2YgYmluYXJ5IG1lc3NhZ2UgZGlnZXN0IGluIGJ5dGVzICovCi0Jc2l6ZV90IGRpZ2VzdF9zaXplOwotCWNvbnN0IGNoYXIqIG5hbWU7Ci0JY29uc3QgY2hhciogbWFnbmV0X25hbWU7Ci19IHJoYXNoX2luZm87CitSSEFTSF9BUEkgcmhhc2ggcmhhc2hfaW5pdCh1bnNpZ25lZCBoYXNoX2lkKTsKIAotLyogaW5mb3JtYXRpb24gZnVuY3Rpb25zICovCisvKioKKyAqIENhbGN1bGF0ZSBoYXNoZXMgb2YgbWVzc2FnZS4KKyAqIENhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSB3aXRoIGNodW5rcyBvZiB0aGUgbWVzc2FnZSB0byBiZSBoYXNoZWQuCisgKgorICogQHBhcmFtIGN0eCB0aGUgcmhhc2ggY29udGV4dAorICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSBjaHVuaworICogQHBhcmFtIGxlbmd0aCBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzOyBPbiBmYWlsIHJldHVybiAtMSBhbmQgc2V0IGVycm5vCisgKi8KK1JIQVNIX0FQSSBpbnQgcmhhc2hfdXBkYXRlKHJoYXNoIGN0eCwgY29uc3Qgdm9pZCogbWVzc2FnZSwgc2l6ZV90IGxlbmd0aCk7CisKKy8qKgorICogSGFzaCBhIGZpbGUgb3Igc3RyZWFtLiBNdWx0aXBsZSBoYXNoZXMgY2FuIGJlIGNvbXB1dGVkLgorICogRmlyc3QsIGluaW50aWFsaXplIGN0eCBwYXJhbWV0ZXIgd2l0aCByaGFzaF9pbml0KCkgYmVmb3JlIGNhbGxpbmcKKyAqIHJoYXNoX2ZpbGVfdXBkYXRlKCkuIFRoZW4gdXNlIHJoYXNoX2ZpbmFsKCkgYW5kIHJoYXNoX3ByaW50KCkKKyAqIHRvIHJldHJpdmUgaGFzaCB2YWx1ZXMuIEZpbmFseSBjYWxsIHJoYXNoX2ZyZWUoKSBvbiBjdHgKKyAqIHRvIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBvciBjYWxsIHJoYXNoX3Jlc2V0KCkgdG8gcmV1c2UgY3R4LgorICoKKyAqIEBwYXJhbSBjdHggcmhhc2ggY29udGV4dAorICogQHBhcmFtIGZkIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gaGFzaAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKKyAqLworUkhBU0hfQVBJIGludCByaGFzaF9maWxlX3VwZGF0ZShyaGFzaCBjdHgsIEZJTEUqIGZkKTsKKworLyoqCisgKiBGaW5hbGl6ZSBoYXNoIGNhbGN1bGF0aW9uIGFuZCBvcHRpb25hbGx5IHN0b3JlIHRoZSBmaXJzdCBoYXNoLgorICoKKyAqIEBwYXJhbSBjdHggdGhlIHJoYXNoIGNvbnRleHQKKyAqIEBwYXJhbSBmaXJzdF9yZXN1bHQgb3B0aW9uYWwgYnVmZmVyIHRvIHN0b3JlIGEgY2FsY3VsYXRlZCBoYXNoIHdpdGggdGhlIGxvd2VzdCBhdmFpbGFibGUgaWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzOyBPbiBmYWlsIHJldHVybiAtMSBhbmQgc2V0IGVycm5vCisgKi8KK1JIQVNIX0FQSSBpbnQgcmhhc2hfZmluYWwocmhhc2ggY3R4LCB1bnNpZ25lZCBjaGFyKiBmaXJzdF9yZXN1bHQpOworCisvKioKKyAqIFJlLWluaXRpYWxpemUgUkhhc2ggY29udGV4dCB0byByZXVzZSBpdC4KKyAqIFVzZWZ1bCB0byBzcGVlZCB1cCBwcm9jZXNzaW5nIG9mIG1hbnkgc21hbGwgbWVzc2FnZXMuCisgKgorICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIHJlaW5pdGlhbGl6ZQorICovCitSSEFTSF9BUEkgdm9pZCByaGFzaF9yZXNldChyaGFzaCBjdHgpOworCisvKioKKyAqIEZyZWUgUkhhc2ggY29udGV4dCBtZW1vcnkuCisgKgorICogQHBhcmFtIGN0eCB0aGUgY29udGV4dCB0byBmcmVlLgorICovCitSSEFTSF9BUEkgdm9pZCByaGFzaF9mcmVlKHJoYXNoIGN0eCk7CisKKy8qKgorICogU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSB0aGUKKyAqIHJoYXNoX2ZpbGUoKSBhbmQgcmhhc2hfZmlsZV91cGRhdGUoKSBmdW5jdGlvbnMKKyAqIG9uIHByb2Nlc3NpbmcgZXZlcnkgZmlsZSBibG9jay4gVGhlIGZpbGUgYmxvY2sKKyAqIHNpemUgaXMgc2V0IGludGVybmFsbHkgYnkgcmhhc2ggYW5kIG5vdyBpcyA4IEtpQi4KKyAqCisgKiBAcGFyYW0gY3R4IHJoYXNoIGNvbnRleHQKKyAqIEBwYXJhbSBjYWxsYmFjayBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogQHBhcmFtIGNhbGxiYWNrX2RhdGEgcG9pbnRlciB0byBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAqLworUkhBU0hfQVBJIHZvaWQgIHJoYXNoX3NldF9jYWxsYmFjayhyaGFzaCBjdHgsIHJoYXNoX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQqIGNhbGxiYWNrX2RhdGEpOworCisKKy8qIElORk9STUFUSU9OIEZVTkNUSU9OUyAqLworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMKKyAqLwogUkhBU0hfQVBJIGludCAgcmhhc2hfY291bnQodm9pZCk7IC8qIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaGVzICovCisKKy8qKgorICogUmV0dXJucyBzaXplIG9mIGJpbmFyeSBkaWdlc3QgZm9yIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiBkaWdlc3Qgc2l6ZSBpbiBieXRlcworICovCiBSSEFTSF9BUEkgaW50ICByaGFzaF9nZXRfZGlnZXN0X3NpemUodW5zaWduZWQgaGFzaF9pZCk7IC8qIHNpemUgb2YgYmluYXJ5IG1lc3NhZ2UgZGlnZXN0ICovCisKKy8qKgorICogUmV0dXJucyBsZW5ndGggb2YgZGlnZXN0IGhhc2ggc3RyaW5nIGluIGRlZmF1bHQgb3V0cHV0IGZvcm1hdC4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KKyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiBoYXNoIHN0cmluZworICovCiBSSEFTSF9BUEkgaW50ICByaGFzaF9nZXRfaGFzaF9sZW5ndGgodW5zaWduZWQgaGFzaF9pZCk7IC8qIGxlbmd0aCBvZiBmb3JtYXR0ZWQgaGFzaCBzdHJpbmcgKi8KKworLyoqCisgKiBEZXRlY3QgZGVmYXVsdCBkaWdlc3Qgb3V0cHV0IGZvcm1hdCBmb3IgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCisgKgorICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCisgKiBAcmV0dXJuIDEgZm9yIGJhc2UzMiBmb3JtYXQsIDAgZm9yIGhleGFkZWNpbWFsCisgKi8KIFJIQVNIX0FQSSBpbnQgIHJoYXNoX2lzX2Jhc2UzMih1bnNpZ25lZCBoYXNoX2lkKTsgLyogZGVmYXVsdCBkaWdlc3Qgb3V0cHV0IGZvcm1hdCAqLworCisvKioKKyAqIFJldHVybnMgYSBuYW1lIG9mIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiBhbGdvcml0aG0gbmFtZQorICovCiBSSEFTSF9BUEkgY29uc3QgY2hhciogcmhhc2hfZ2V0X25hbWUodW5zaWduZWQgaGFzaF9pZCk7IC8qIGdldCBoYXNoIGZ1bmN0aW9uIG5hbWUgKi8KKworLyoqCisgKiBSZXR1cm5zIGEgbmFtZSBwYXJ0IG9mIG1hZ25ldCB1cm4gb2YgdGhlIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgorICogU3VjaCBtYWduZXRfbmFtZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgbWFnbmV0IGxpbmsgb2YgdGhlIGZvcm0KKyAqIHVybjombHQ7bWFnbmV0X25hbWUmZ3Q7PSZsdDtoYXNoX3ZhbHVlJmd0Oy4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KKyAqIEByZXR1cm4gbmFtZQorICovCiBSSEFTSF9BUEkgY29uc3QgY2hhciogcmhhc2hfZ2V0X21hZ25ldF9uYW1lKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBnZXQgbmFtZSBwYXJ0IG9mIG1hZ25ldCB1cm4gKi8KIAotLyogbm90ZSwgdGhhdCByaGFzaF9pbmZvX2J5X2lkKCkgaXMgbm90IGV4cG9ydGVkIHRvIGEgc2hhcmVkIGxpYnJhcnkgb3IgRExMICovCi1jb25zdCByaGFzaF9pbmZvKiByaGFzaF9pbmZvX2J5X2lkKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBnZXQgaGFzaCBzdW0gaW5mbyBieSBoYXNoIGlkICovCisvKiBIQVNIIFNVTSBPVVRQVVQgSU5URVJGQUNFICovCiAKICNpZiAwCiAvKioKLSAqIEZsYWdzIGZvciBwcmludGluZyBhIGhhc2ggc3VtCisgKiBGbGFncyBmb3IgcHJpbnRpbmcgYSBoYXNoIHN1bS4KICAqLwogZW51bSByaGFzaF9wcmludF9zdW1fZmxhZ3MKIHsKLQkvKiogcHJpbnQgaW4gYSBkZWZhdWx0IGZvcm1hdCAqLworCS8qCisJICogUHJpbnQgaW4gYSBkZWZhdWx0IGZvcm1hdAorCSAqLwogCVJIUFJfREVGQVVMVCAgID0gMHgwLAotCS8qKiBvdXRwdXQgYXMgYmluYXJ5IG1lc3NhZ2UgZGlnZXN0ICovCisJLyoKKwkgKiBPdXRwdXQgYXMgYmluYXJ5IG1lc3NhZ2UgZGlnZXN0CisJICovCiAJUkhQUl9SQVcgICAgICAgPSAweDEsCi0JLyoqIHByaW50IGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nICovCisJLyoKKwkgKiBQcmludCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZworCSAqLwogCVJIUFJfSEVYICAgICAgID0gMHgyLAotCS8qKiBwcmludCBhcyBhIGJhc2UzMi1lbmNvZGVkIHN0cmluZyAqLworCS8qCisJICogUHJpbnQgYXMgYSBiYXNlMzItZW5jb2RlZCBzdHJpbmcKKwkgKi8KIAlSSFBSX0JBU0UzMiAgICA9IDB4MywKLQkvKiogcHJpbnQgYXMgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgKi8KKwkvKgorCSAqIFByaW50IGFzIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nCisJICovCiAJUkhQUl9CQVNFNjQgICAgPSAweDQsCi0KLQkvKioKKwkvKgogCSAqIFByaW50IGFzIGFuIHVwcGVyY2FzZSBzdHJpbmcuIENhbiBiZSB1c2VkCiAJICogZm9yIGJhc2UzMiBvciBoZXhhZGVjaW1hbCBmb3JtYXQgb25seS4KIAkgKi8KIAlSSFBSX1VQUEVSQ0FTRSA9IDB4OCwKLQotCS8qKgorCS8qCiAJICogUmV2ZXJzZSBoYXNoIGJ5dGVzLiBDYW4gYmUgdXNlZCBmb3IgR09TVCBoYXNoLgogCSAqLwogCVJIUFJfUkVWRVJTRSAgID0gMHgxMCwKLQotCS8qKiBkb24ndCBwcmludCAnbWFnbmV0Oj8nIHByZWZpeCBpbiByaGFzaF9wcmludF9tYWduZXQgKi8KKwkvKgorCSAqIERvbid0IHByaW50ICdtYWduZXQ6PycgcHJlZml4IGluIHJoYXNoX3ByaW50X21hZ25ldAorCSAqLwogCVJIUFJfTk9fTUFHTkVUICA9IDB4MjAsCi0JLyoqIHByaW50IGZpbGUgc2l6ZSBpbiByaGFzaF9wcmludF9tYWduZXQgKi8KKwkvKgorCSAqIFByaW50IGZpbGUgc2l6ZSBpbiByaGFzaF9wcmludF9tYWduZXQKKwkgKi8KIAlSSFBSX0ZJTEVTSVpFICA9IDB4NDAsCisJLyoKKwkgKiBQcmludCBhcyBVUkwtZW5jb2RlZCBzdHJpbmcKKwkgKi8KKwlSSFBSX1VSTEVOQ09ERSAgPSAweDgwCiB9OwogI2VuZGlmCiAKLS8qIG91dHB1dCBoYXNoIGludG8gdGhlIGdpdmVuIGJ1ZmZlciAqLworCisvKioKKyAqIFByaW50IGEgdGV4dCBwcmVzZW50YXRpb24gb2YgYSBnaXZlbiBoYXNoIHN1bSB0byB0aGUgc3BlY2lmaWVkIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gb3V0cHV0IGEgYnVmZmVyIHRvIHByaW50IHRoZSBoYXNoIHRvCisgKiBAcGFyYW0gYnl0ZXMgYSBoYXNoIHN1bSB0byBwcmludAorICogQHBhcmFtIHNpemUgYSBzaXplIG9mIGhhc2ggc3VtIGluIGJ5dGVzCisgKiBAcGFyYW0gZmxhZ3MgIGEgYml0LW1hc2sgY29udHJvbGxpbmcgaG93IHRvIGZvcm1hdCB0aGUgaGFzaCBzdW0sCisgKiAgICAgICAgICAgICAgIGNhbiBiZSBhIG1peCBvZiB0aGUgZmxhZ3M6IFJIUFJfUkFXLCBSSFBSX0hFWCwgUkhQUl9CQVNFMzIsCisgKiAgICAgICAgICAgICAgIFJIUFJfQkFTRTY0LCBSSFBSX1VSTEVOQ09ERSwgUkhQUl9VUFBFUkNBU0UsIFJIUFJfUkVWRVJTRQorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gY2hhcmFjdGVycworICovCiBSSEFTSF9BUEkgc2l6ZV90IHJoYXNoX3ByaW50X2J5dGVzKGNoYXIqIG91dHB1dCwKIAljb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcywgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiAKKy8qKgorICogUHJpbnQgdGV4dCBwcmVzZW50YXRpb24gb2YgYSBoYXNoIHN1bSB3aXRoIGdpdmVuIGhhc2hfaWQgdG8gdGhlIHNwZWNpZmllZAorICogb3V0cHV0IGJ1ZmZlci4gSWYgdGhlIGhhc2hfaWQgaXMgemVybywgdGhlbiBwcmludCB0aGUgaGFzaCBzdW0gd2l0aAorICogdGhlIGxvd2VzdCBpZCBzdG9yZWQgaW4gdGhlIGhhc2ggY29udGV4dC4KKyAqIFRoZSBmdW5jdGlvbiBjYWxsIGZhaWxzIGlmIHRoZSBjb250ZXh0IGRvZXNuJ3QgaW5jbHVkZSBhIGhhc2ggd2l0aCB0aGUKKyAqIGdpdmVuIGhhc2hfaWQuCisgKgorICogQHBhcmFtIG91dHB1dCBhIGJ1ZmZlciB0byBwcmludCB0aGUgaGFzaCB0bworICogQHBhcmFtIGN0eCAgICBhbGdvcml0aG1zIHN0YXRlCisgKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiB0aGUgaGFzaCBzdW0gdG8gcHJpbnQgb3IgMCB0byBwcmludCB0aGUgZmlyc3QgaGFzaAorICogICAgICAgICAgICAgICAgc2F2ZWQgaW4gdGhlIGNvbnRleHQuCisgKiBAcGFyYW0gZmxhZ3MgIGEgYml0bWFzayBjb250cm9sbGluZyBob3cgdG8gcHJpbnQgdGhlIGhhc2guIENhbiBjb250YWluIGZsYWdzCisgKiAgICAgICAgICAgICAgIFJIUFJfVVBQRVJDQVNFLCBSSFBSX0hFWCwgUkhQUl9CQVNFMzIsIFJIUFJfQkFTRTY0LCBldGMuCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBjaGFyYWN0ZXJzIG9uIHN1Y2Nlc3Mgb3IgMCBvbiBmYWlsCisgKi8KIFJIQVNIX0FQSSBzaXplX3Qgcmhhc2hfcHJpbnQoY2hhciogb3V0cHV0LCByaGFzaCBjdHgsIHVuc2lnbmVkIGhhc2hfaWQsCiAJaW50IGZsYWdzKTsKIAotLyogb3V0cHV0IG1hZ25ldCBVUkwgaW50byB0aGUgZ2l2ZW4gYnVmZmVyICovCisvKioKKyAqIFByaW50IG1hZ25ldCBsaW5rIHdpdGggZ2l2ZW4gZmlsZXBhdGggYW5kIGNhbGN1bGF0ZWQgaGFzaCBzdW1zIGludG8gdGhlCisgKiBvdXRwdXQgYnVmZmVyLiBUaGUgaGFzaF9tYXNrIGNhbiBsaW1pdCB3aGljaCBoYXNoIHZhbHVlcyB3aWxsIGJlIHByaW50ZWQuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWlyZWQgYnVmZmVyLgorICogSWYgb3V0cHV0IGlzIE5VTEwgdGhlIC4KKyAqCisgKiBAcGFyYW0gb3V0cHV0IGEgc3RyaW5nIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBtYWduZXQgbGluayBvciBOVUxMCisgKiBAcGFyYW0gZmlsZXBhdGggdGhlIGZpbGUgcGF0aCB0byBiZSBwcmludGVkIG9yIE5VTEwKKyAqIEBwYXJhbSBjb250ZXh0IGFsZ29yaXRobXMgc3RhdGUKKyAqIEBwYXJhbSBoYXNoX21hc2sgYml0IG1hc2sgb2YgdGhlIGhhc2ggc3VtcyB0byBhZGQgdG8gdGhlIGxpbmsKKyAqIEBwYXJhbSBmbGFncyAgIGNhbiBiZSBjb21iaW5hdGlvbiBvZiBiaXRzIFJIUFJfVVBQRVJDQVNFLCBSSFBSX05PX01BR05FVCwKKyAqICAgICAgICAgICAgICAgIFJIUFJfRklMRVNJWkUKKyAqIEByZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gY2hhcmFjdGVycywgaW5jbHVkaW5nIHRlcm1pbmF0aW5nICdcMCcgb24gc3VjY2VzcywgMCBvbiBmYWlsCisgKi8KIFJIQVNIX0FQSSBzaXplX3Qgcmhhc2hfcHJpbnRfbWFnbmV0KGNoYXIqIG91dHB1dCwgY29uc3QgY2hhciogZmlsZXBhdGgsCiAJcmhhc2ggY29udGV4dCwgdW5zaWduZWQgaGFzaF9tYXNrLCBpbnQgZmxhZ3MpOwogCi0vKiBtYWNyb3MgZm9yIG1lc3NhZ2UgQVBJICovCiAKLS8qKiBUaGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgcG9pbnRlciAqLworLyogTUVTU0FHRSBBUEkgKi8KKworLyoqCisgKiBUaGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgcG9pbnRlci4KKyAqLwogI2lmIGRlZmluZWQoVUlOVFBUUl9NQVgpCiB0eXBlZGVmIHVpbnRwdHJfdCByaGFzaF91cHRyX3Q7CiAjZWxpZiBkZWZpbmVkKF9MUDY0KSB8fCBkZWZpbmVkKF9fTFA2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KSB8fCBcCkBAIC0yMTksMTQgKzQwOSwyOCBAQAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHJoYXNoX3VwdHJfdDsKICNlbmRpZgogCi0vKiogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHJoYXNoX3RyYW5zbWl0IG9uIGVycm9yICovCisvKioKKyAqIFRoZSB2YWx1ZSByZXR1cm5lZCBieSByaGFzaF90cmFuc21pdCBvbiBlcnJvci4KKyAqLwogI2RlZmluZSBSSEFTSF9FUlJPUiAoKHJoYXNoX3VwdHJfdCktMSkKLS8qKiBDb252ZXJ0IGEgcG9pbnRlciB0byByaGFzaF91cHRyX3QgKi8KKy8qKgorICogQ29udmVydCBhIHBvaW50ZXIgdG8gcmhhc2hfdXB0cl90LgorICovCiAjZGVmaW5lIFJIQVNIX1NUUjJVUFRSKHN0cikgKChyaGFzaF91cHRyX3QpKGNoYXIqKShzdHIpKQotLyoqIENvbnZlcnQgYSByaGFzaF91cHRyX3QgdG8gYSB2b2lkKiBwb2ludGVyICovCi0jZGVmaW5lIFJIQVNIX1VQVFIyUFZPSUQodSkgKCh2b2lkKikoKGNoYXIqKTAgKyAodSkpKQorLyoqCisgKiBDb252ZXJ0IGEgcmhhc2hfdXB0cl90IHRvIGEgdm9pZCogcG9pbnRlci4KKyAqLworI2RlZmluZSBSSEFTSF9VUFRSMlBWT0lEKHUpICgodm9pZCopKCh1KSArIDApKQogCi0vKiByaGFzaCBBUEkgdG8gc2V0L2dldCBkYXRhIHZpYSBtZXNzYWdlcyAqLworLyoqCisgKiBQcm9jZXNzIGEgcmhhc2ggbWVzc2FnZS4KKyAqCisgKiBAcGFyYW0gbXNnX2lkIG1lc3NhZ2UgaWRlbnRpZmllcgorICogQHBhcmFtIGRzdCBtZXNzYWdlIGRlc3RpbmF0aW9uIChjYW4gYmUgTlVMTCBmb3IgZ2VuZXJpYyBtZXNzYWdlcykKKyAqIEBwYXJhbSBsZGF0YSBkYXRhIGRlcGVuZGluZyBvbiBtZXNzYWdlCisgKiBAcGFyYW0gcmRhdGEgZGF0YSBkZXBlbmRpbmcgb24gbWVzc2FnZQorICogQHJldHVybiBtZXNzYWdlLXNwZWNpZmljIGRhdGEKKyAqLwogUkhBU0hfQVBJIHJoYXNoX3VwdHJfdCByaGFzaF90cmFuc21pdCgKIAl1bnNpZ25lZCBtc2dfaWQsIHZvaWQqIGRzdCwgcmhhc2hfdXB0cl90IGxkYXRhLCByaGFzaF91cHRyX3QgcmRhdGEpOwogCkBAIC0yMzksMjIgKzQ0MywzMiBAQAogI2RlZmluZSBSTVNHX1NFVF9BVVRPRklOQUwgNQogI2RlZmluZSBSTVNHX1NFVF9PUEVOU1NMX01BU0sgMTAKICNkZWZpbmUgUk1TR19HRVRfT1BFTlNTTF9NQVNLIDExCisjZGVmaW5lIFJNU0dfR0VUX09QRU5TU0xfU1VQUE9SVEVEX01BU0sgMTIKKyNkZWZpbmUgUk1TR19HRVRfT1BFTlNTTF9BVkFJTEFCTEVfTUFTSyAxMwogCi0vKiBoZWxwZXIgbWFjcm9zICovCisvKiBIRUxQRVIgTUFDUk9TICovCiAKLS8qKiBHZXQgYSBwb2ludGVyIHRvIGNvbnRleHQgb2YgdGhlIHNwZWNpZmllZCBoYXNoIGZ1bmN0aW9uICovCisvKioKKyAqIEdldCBhIHBvaW50ZXIgdG8gY29udGV4dCBvZiB0aGUgc3BlY2lmaWVkIGhhc2ggZnVuY3Rpb24uCisgKi8KICNkZWZpbmUgcmhhc2hfZ2V0X2NvbnRleHRfcHRyKGN0eCwgaGFzaF9pZCkgUkhBU0hfVVBUUjJQVk9JRChyaGFzaF90cmFuc21pdChSTVNHX0dFVF9DT05URVhULCBjdHgsIGhhc2hfaWQsIDApKQotLyoqIENhbmNlbCBoYXNoIGNhbGN1bGF0aW9uIG9mIGEgZmlsZSAqLworLyoqCisgKiBDYW5jZWwgaGFzaCBjYWxjdWxhdGlvbiBvZiBhIGZpbGUuCisgKi8KICNkZWZpbmUgcmhhc2hfY2FuY2VsKGN0eCkgcmhhc2hfdHJhbnNtaXQoUk1TR19DQU5DRUwsIGN0eCwgMCwgMCkKLS8qKiBSZXR1cm4gbm9uLXplcm8gaWYgaGFzaCBjYWxjdWxhdGlvbiB3YXMgY2FuY2VsZWQsIHplcm8gb3RoZXJ3aXNlICovCisvKioKKyAqIFJldHVybiBub24temVybyBpZiBoYXNoIGNhbGN1bGF0aW9uIHdhcyBjYW5jZWxlZCwgemVybyBvdGhlcndpc2UuCisgKi8KICNkZWZpbmUgcmhhc2hfaXNfY2FuY2VsZWQoY3R4KSByaGFzaF90cmFuc21pdChSTVNHX0lTX0NBTkNFTEVELCBjdHgsIDAsIDApCi0vKiogUmV0dXJuIG5vbi16ZXJvIGlmIHJoYXNoX2ZpbmFsIHdhcyBjYWxsZWQgZm9yIHJoYXNoX2NvbnRleHQgKi8KKy8qKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHJoYXNoX2ZpbmFsIHdhcyBjYWxsZWQgZm9yIHJoYXNoX2NvbnRleHQuCisgKi8KICNkZWZpbmUgcmhhc2hfZ2V0X2ZpbmFsaXplZChjdHgpIHJoYXNoX3RyYW5zbWl0KFJNU0dfR0VUX0ZJTkFMSVpFRCwgY3R4LCAwLCAwKQogCiAvKioKICAqIFR1cm4gb24vb2ZmIHRoZSBhdXRvLWZpbmFsIGZsYWcgZm9yIHRoZSBnaXZlbiByaGFzaF9jb250ZXh0LiBCeSBkZWZhdWx0CiAgKiBhdXRvLWZpbmFsIGlzIG9uLCB3aGljaCBtZWFucyByaGFzaF9maW5hbCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgaWYKLSAqIG5lZWRlZCB3aGVuIGEgaGFzaCB2YWx1ZSBpcyByZXRyaXZlZCBieSByaGFzaF9wcmludCBjYWxsLgorICogbmVlZGVkIHdoZW4gYSBoYXNoIHZhbHVlIGlzIHJldHJpZXZlZCBieSByaGFzaF9wcmludCBjYWxsLgogICovCiAjZGVmaW5lIHJoYXNoX3NldF9hdXRvZmluYWwoY3R4LCBvbikgcmhhc2hfdHJhbnNtaXQoUk1TR19TRVRfQVVUT0ZJTkFMLCBjdHgsIG9uLCAwKQogCkBAIC0yNjcsMTkgKzQ4MSwzNiBAQAogI2RlZmluZSByaGFzaF9zZXRfb3BlbnNzbF9tYXNrKG1hc2spIHJoYXNoX3RyYW5zbWl0KFJNU0dfU0VUX09QRU5TU0xfTUFTSywgTlVMTCwgbWFzaywgMCkKIAogLyoqCi0gKiBSZXR1cm4gY3VycmVudCBiaXQtbWFzayBvZiBoYXNoIGFsZ29yaXRobXMgc2VsZWN0ZWQgdG8gYmUgY2FsY3VsYXRlZAotICogYnkgT3BlblNTTCBsaWJyYXJ5LgorICogUmV0dXJuIGN1cnJlbnQgYml0LW1hc2sgb2YgaGFzaCBhbGdvcml0aG1zIHNlbGVjdGVkIHRvIGJlIGNhbGN1bGF0ZWQgYnkgT3BlblNTTAorICogbGlicmFyeS4gUmV0dXJuIFJIQVNIX0VSUk9SIGlmIExpYlJIYXNoIGlzIGNvbXBpbGVkIHdpdGhvdXQgT3BlblNTTCBzdXBwb3J0LgogICovCiAjZGVmaW5lIHJoYXNoX2dldF9vcGVuc3NsX21hc2soKSByaGFzaF90cmFuc21pdChSTVNHX0dFVF9PUEVOU1NMX01BU0ssIE5VTEwsIDAsIDApCiAKLS8qKiBUaGUgYml0IG1hc2sgb2YgaGFzaCBhbGdvcml0aG1zIGltcGxlbWVudGVkIGJ5IE9wZW5TU0wgKi8KLSNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE9QRU5TU0xfUlVOVElNRSkKLSMgZGVmaW5lIFJIQVNIX09QRU5TU0xfU1VQUE9SVEVEX0hBU0hFUyAoUkhBU0hfTUQ0IHwgUkhBU0hfTUQ1IHwgXAotCVJIQVNIX1NIQTEgfCBSSEFTSF9TSEEyMjQgfCBSSEFTSF9TSEEyNTYgfCBSSEFTSF9TSEEzODQgfCBcCi0JUkhBU0hfU0hBNTEyIHwgUkhBU0hfUklQRU1EMTYwIHwgUkhBU0hfV0hJUkxQT09MKQotI2Vsc2UKLSMgZGVmaW5lIFJIQVNIX09QRU5TU0xfU1VQUE9SVEVEX0hBU0hFUyAwCi0jZW5kaWYKKy8qKgorICogUmV0dXJuIHRoZSBiaXQtbWFzayBvZiBhbGdvcml0aG1zIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBPcGVuU1NMIHBsdWdpbiwKKyAqIGlmIHRoZSBsaWJyYXJ5IGlzIGNvbXBpbGVkIHdpdGggT3BlblNTTCBzdXBwb3J0LCAwIG90aGVyd2lzZS4gVGhpcyBiaXQtbWFzayBpcworICogYSBjb25zdGFudCB2YWx1ZSBjb21wdXRlZCBhdCBjb21waWxlLXRpbWUuCisgKi8KKyNkZWZpbmUgcmhhc2hfZ2V0X29wZW5zc2xfc3VwcG9ydGVkX21hc2soKSByaGFzaF90cmFuc21pdChSTVNHX0dFVF9PUEVOU1NMX1NVUFBPUlRFRF9NQVNLLCBOVUxMLCAwLCAwKQorCisvKioKKyAqIFJldHVybiB0aGUgYml0LW1hc2sgb2YgYWxnb3JpdGhtcyB0aGF0IGFyZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGZyb20KKyAqIE9wZW5TU0wgbGlicmFyeS4gSWYgdGhlIGxpYnJhcnkgaXMgbm90IGxvYWRlZCBvciBub3Qgc3VwcG9ydGVkIGJ5IExpYlJIYXNoLAorICogdGhlbiByZXR1cm4gMC4KKyAqLworI2RlZmluZSByaGFzaF9nZXRfb3BlbnNzbF9hdmFpbGFibGVfbWFzaygpIHJoYXNoX3RyYW5zbWl0KFJNU0dfR0VUX09QRU5TU0xfQVZBSUxBQkxFX01BU0ssIE5VTEwsIDAsIDApCisKKworLyoqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgTGliUkhhc2ggaGFzaCBiZWVuIGNvbXBpbGVkIHdpdGggT3BlblNTTCBzdXBwb3J0LAorICogYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCisjZGVmaW5lIHJoYXNoX2lzX29wZW5zc2xfc3VwcG9ydGVkKCkgKHJoYXNoX2dldF9vcGVuc3NsX21hc2soKSAhPSBSSEFTSF9FUlJPUikKKworLyoqCisgKiBMZWdhY3kgbWFjcm8uIFRoZSBiaXQgbWFzayBvZiBoYXNoIGFsZ29yaXRobXMgaW1wbGVtZW50ZWQgYnkgT3BlblNTTC4KKyAqLworIyBkZWZpbmUgUkhBU0hfT1BFTlNTTF9TVVBQT1JURURfSEFTSEVTIChyaGFzaF9nZXRfb3BlbnNzbF9zdXBwb3J0ZWRfbWFzaygpKQogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gLyogZXh0ZXJuICJDIiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5jCmluZGV4IGY1YTA1M2IuLmIyMjY5MjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmMKQEAgLTEsMTggKzEsMTggQEAKIC8qIHNoYTEuYyAtIGFuIGltcGxlbWVudGF0aW9uIG9mIFNlY3VyZSBIYXNoIEFsZ29yaXRobSAxIChTSEExKQogICogYmFzZWQgb24gUkZDIDMxNzQuCiAgKgotICogQ29weXJpZ2h0OiAyMDA4LTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0yNCw3ICsyNCw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGExX2luaXQoc2hhMV9jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhMV9pbml0KHNoYTFfY3R4KiBjdHgpCiB7CiAJY3R4LT5sZW5ndGggPSAwOwogCkBAIC0xMjEsNyArMTIxLDcgQEAKICAqIEBwYXJhbSBtc2cgbWVzc2FnZSBjaHVuawogICogQHBhcmFtIHNpemUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCiAgKi8KLXZvaWQgcmhhc2hfc2hhMV91cGRhdGUoc2hhMV9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgcmhhc2hfc2hhMV91cGRhdGUoc2hhMV9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbmRleCA9ICh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDYzOwogCWN0eC0+bGVuZ3RoICs9IHNpemU7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAqIEBwYXJhbSBjdHggdGhlIGFsZ29yaXRobSBjb250ZXh0IGNvbnRhaW5pbmcgY3VycmVudCBoYXNoaW5nIHN0YXRlCiAgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQogICovCi12b2lkIHJoYXNoX3NoYTFfZmluYWwoc2hhMV9jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQordm9pZCByaGFzaF9zaGExX2ZpbmFsKHNoYTFfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAl1bnNpZ25lZCAgaW5kZXggPSAodW5zaWduZWQpY3R4LT5sZW5ndGggJiA2MzsKIAl1bnNpZ25lZCogbXNnMzIgPSAodW5zaWduZWQqKWN0eC0+bWVzc2FnZTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuaAppbmRleCA3NGIyZjk0Li43ZTk5NTQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5oCkBAIC0yMCw5ICsyMCw5IEBACiAKIC8qIGhhc2ggZnVuY3Rpb25zICovCiAKLXZvaWQgcmhhc2hfc2hhMV9pbml0KHNoYTFfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGExX3VwZGF0ZShzaGExX2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKLXZvaWQgcmhhc2hfc2hhMV9maW5hbChzaGExX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwordm9pZCByaGFzaF9zaGExX2luaXQoc2hhMV9jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTFfdXBkYXRlKHNoYTFfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwordm9pZCByaGFzaF9zaGExX2ZpbmFsKHNoYTFfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAvKiBleHRlcm4gIkMiICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5jCmluZGV4IGFmNWIwZmUuLjIxYTY5YWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5jCkBAIC0xLDE4ICsxLDE4IEBACiAvKiBzaGEyNTYuYyAtIGFuIGltcGxlbWVudGF0aW9uIG9mIFNIQS0yNTYvMjI0IGhhc2ggZnVuY3Rpb25zCiAgKiBiYXNlZCBvbiBGSVBTIDE4MC0zIChGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcnQpLgogICoKLSAqIENvcHlyaWdodDogMjAxMC0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNjUsNyArNjUsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhMjU2X2luaXQoc2hhMjU2X2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEyNTZfaW5pdChzaGEyNTZfY3R4KiBjdHgpCiB7CiAJLyogSW5pdGlhbCB2YWx1ZXMuIFRoZXNlIHdvcmRzIHdlcmUgb2J0YWluZWQgYnkgdGFraW5nIHRoZSBmaXJzdCAzMgogCSAqIGJpdHMgb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIHNxdWFyZSByb290cyBvZiB0aGUgZmlyc3QKQEAgLTg3LDcgKzg3LDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTIyNF9pbml0KHN0cnVjdCBzaGEyNTZfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTIyNF9pbml0KHN0cnVjdCBzaGEyNTZfY3R4KiBjdHgpCiB7CiAJLyogSW5pdGlhbCB2YWx1ZXMgZnJvbSBGSVBTIDE4MC0zLiBUaGVzZSB3b3JkcyB3ZXJlIG9idGFpbmVkIGJ5IHRha2luZwogCSAqIGJpdHMgZnJvbSAzM3RoIHRvIDY0dGggb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIHNxdWFyZQpAQCAtMTEzLDcgKzExMyw3IEBACiB7CiAJdW5zaWduZWQgQSwgQiwgQywgRCwgRSwgRiwgRywgSDsKIAl1bnNpZ25lZCBXWzE2XTsKLQljb25zdCB1bnNpZ25lZCAqazsKKwljb25zdCB1bnNpZ25lZCogazsKIAlpbnQgaTsKIAogCUEgPSBoYXNoWzBdLCBCID0gaGFzaFsxXSwgQyA9IGhhc2hbMl0sIEQgPSBoYXNoWzNdOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgKiBAcGFyYW0gbXNnIG1lc3NhZ2UgY2h1bmsKICAqIEBwYXJhbSBzaXplIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuawogICovCi12b2lkIHJoYXNoX3NoYTI1Nl91cGRhdGUoc2hhMjU2X2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIHNpemVfdCBzaXplKQordm9pZCByaGFzaF9zaGEyNTZfdXBkYXRlKHNoYTI1Nl9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKIHsKIAlzaXplX3QgaW5kZXggPSAoc2l6ZV90KWN0eC0+bGVuZ3RoICYgNjM7CiAJY3R4LT5sZW5ndGggKz0gc2l6ZTsKQEAgLTIxMCw3ICsyMTAsNyBAQAogICogQHBhcmFtIGN0eCB0aGUgYWxnb3JpdGhtIGNvbnRleHQgY29udGFpbmluZyBjdXJyZW50IGhhc2hpbmcgc3RhdGUKICAqIEBwYXJhbSByZXN1bHQgY2FsY3VsYXRlZCBoYXNoIGluIGJpbmFyeSBmb3JtCiAgKi8KLXZvaWQgcmhhc2hfc2hhMjU2X2ZpbmFsKHNoYTI1Nl9jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQordm9pZCByaGFzaF9zaGEyNTZfZmluYWwoc2hhMjU2X2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJc2l6ZV90IGluZGV4ID0gKCh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDYzKSA+PiAyOwogCXVuc2lnbmVkIHNoaWZ0ID0gKCh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDMpICogODsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmgKaW5kZXggZjg3ZWJhYS4uMzYyNWNmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmgKQEAgLTIwLDEwICsyMCwxMCBAQAogCXVuc2lnbmVkIGRpZ2VzdF9sZW5ndGg7IC8qIGxlbmd0aCBvZiB0aGUgYWxnb3JpdGhtIGRpZ2VzdCBpbiBieXRlcyAqLwogfSBzaGEyNTZfY3R4OwogCi12b2lkIHJoYXNoX3NoYTIyNF9pbml0KHNoYTI1Nl9jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTI1Nl9pbml0KHNoYTI1Nl9jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTI1Nl91cGRhdGUoc2hhMjU2X2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLXZvaWQgcmhhc2hfc2hhMjU2X2ZpbmFsKHNoYTI1Nl9jdHggKmN0eCwgdW5zaWduZWQgY2hhciByZXN1bHRbMzJdKTsKK3ZvaWQgcmhhc2hfc2hhMjI0X2luaXQoc2hhMjU2X2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhMjU2X2luaXQoc2hhMjU2X2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhMjU2X3VwZGF0ZShzaGEyNTZfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwordm9pZCByaGFzaF9zaGEyNTZfZmluYWwoc2hhMjU2X2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyIHJlc3VsdFszMl0pOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gLyogZXh0ZXJuICJDIiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5jCmluZGV4IGU0YTg0NWYuLmJkMjg1NGYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmMKQEAgLTMsMTggKzMsMTggQEAKICAqIFRoZSBLZWNjYWsgU0hBLTMgc3VibWlzc2lvbi4gU3VibWlzc2lvbiB0byBOSVNUIChSb3VuZCAzKSwgMjAxMQogICogYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sIE1pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlCiAgKgotICogQ29weXJpZ2h0OiAyMDEzIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPGFzc2VydC5oPgpAQCAtMzYsNyArMzYsNyBAQAogfTsKIAogLyogSW5pdGlhbGl6aW5nIGEgc2hhMyBjb250ZXh0IGZvciBnaXZlbiBudW1iZXIgb2Ygb3V0cHV0IGJpdHMgKi8KLXN0YXRpYyB2b2lkIHJoYXNoX2tlY2Nha19pbml0KHNoYTNfY3R4ICpjdHgsIHVuc2lnbmVkIGJpdHMpCitzdGF0aWMgdm9pZCByaGFzaF9rZWNjYWtfaW5pdChzaGEzX2N0eCogY3R4LCB1bnNpZ25lZCBiaXRzKQogewogCS8qIE5COiBUaGUgS2VjY2FrIGNhcGFjaXR5IHBhcmFtZXRlciA9IGJpdHMgKiAyICovCiAJdW5zaWduZWQgcmF0ZSA9IDE2MDAgLSBiaXRzICogMjsKQEAgLTUxLDcgKzUxLDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTNfMjI0X2luaXQoc2hhM19jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhM18yMjRfaW5pdChzaGEzX2N0eCogY3R4KQogewogCXJoYXNoX2tlY2Nha19pbml0KGN0eCwgMjI0KTsKIH0KQEAgLTYxLDcgKzYxLDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTNfMjU2X2luaXQoc2hhM19jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhM18yNTZfaW5pdChzaGEzX2N0eCogY3R4KQogewogCXJoYXNoX2tlY2Nha19pbml0KGN0eCwgMjU2KTsKIH0KQEAgLTcxLDcgKzcxLDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTNfMzg0X2luaXQoc2hhM19jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhM18zODRfaW5pdChzaGEzX2N0eCogY3R4KQogewogCXJoYXNoX2tlY2Nha19pbml0KGN0eCwgMzg0KTsKIH0KQEAgLTgxLDM3ICs4MSwzNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhM181MTJfaW5pdChzaGEzX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEzXzUxMl9pbml0KHNoYTNfY3R4KiBjdHgpCiB7CiAJcmhhc2hfa2VjY2FrX2luaXQoY3R4LCA1MTIpOwogfQogCisjZGVmaW5lIFhPUkVEX0EoaSkgQVsoaSldIF4gQVsoaSkgKyA1XSBeIEFbKGkpICsgMTBdIF4gQVsoaSkgKyAxNV0gXiBBWyhpKSArIDIwXQorI2RlZmluZSBUSEVUQV9TVEVQKGkpIFwKKwlBWyhpKV0gICAgICBePSBEWyhpKV07IFwKKwlBWyhpKSArIDVdICBePSBEWyhpKV07IFwKKwlBWyhpKSArIDEwXSBePSBEWyhpKV07IFwKKwlBWyhpKSArIDE1XSBePSBEWyhpKV07IFwKKwlBWyhpKSArIDIwXSBePSBEWyhpKV0gXAorCiAvKiBLZWNjYWsgdGhldGEoKSB0cmFuc2Zvcm1hdGlvbiAqLwotc3RhdGljIHZvaWQga2VjY2FrX3RoZXRhKHVpbnQ2NF90ICpBKQorc3RhdGljIHZvaWQga2VjY2FrX3RoZXRhKHVpbnQ2NF90KiBBKQogewotCXVuc2lnbmVkIGludCB4OwotCXVpbnQ2NF90IENbNV0sIERbNV07Ci0KLQlmb3IgKHggPSAwOyB4IDwgNTsgeCsrKSB7Ci0JCUNbeF0gPSBBW3hdIF4gQVt4ICsgNV0gXiBBW3ggKyAxMF0gXiBBW3ggKyAxNV0gXiBBW3ggKyAyMF07Ci0JfQotCURbMF0gPSBST1RMNjQoQ1sxXSwgMSkgXiBDWzRdOwotCURbMV0gPSBST1RMNjQoQ1syXSwgMSkgXiBDWzBdOwotCURbMl0gPSBST1RMNjQoQ1szXSwgMSkgXiBDWzFdOwotCURbM10gPSBST1RMNjQoQ1s0XSwgMSkgXiBDWzJdOwotCURbNF0gPSBST1RMNjQoQ1swXSwgMSkgXiBDWzNdOwotCi0JZm9yICh4ID0gMDsgeCA8IDU7IHgrKykgewotCQlBW3hdICAgICAgXj0gRFt4XTsKLQkJQVt4ICsgNV0gIF49IERbeF07Ci0JCUFbeCArIDEwXSBePSBEW3hdOwotCQlBW3ggKyAxNV0gXj0gRFt4XTsKLQkJQVt4ICsgMjBdIF49IERbeF07Ci0JfQorCXVpbnQ2NF90IERbNV07CisJRFswXSA9IFJPVEw2NChYT1JFRF9BKDEpLCAxKSBeIFhPUkVEX0EoNCk7CisJRFsxXSA9IFJPVEw2NChYT1JFRF9BKDIpLCAxKSBeIFhPUkVEX0EoMCk7CisJRFsyXSA9IFJPVEw2NChYT1JFRF9BKDMpLCAxKSBeIFhPUkVEX0EoMSk7CisJRFszXSA9IFJPVEw2NChYT1JFRF9BKDQpLCAxKSBeIFhPUkVEX0EoMik7CisJRFs0XSA9IFJPVEw2NChYT1JFRF9BKDApLCAxKSBeIFhPUkVEX0EoMyk7CisJVEhFVEFfU1RFUCgwKTsKKwlUSEVUQV9TVEVQKDEpOworCVRIRVRBX1NURVAoMik7CisJVEhFVEFfU1RFUCgzKTsKKwlUSEVUQV9TVEVQKDQpOwogfQogCiAvKiBLZWNjYWsgcGkoKSB0cmFuc2Zvcm1hdGlvbiAqLwotc3RhdGljIHZvaWQga2VjY2FrX3BpKHVpbnQ2NF90ICpBKQorc3RhdGljIHZvaWQga2VjY2FrX3BpKHVpbnQ2NF90KiBBKQogewogCXVpbnQ2NF90IEExOwogCUExID0gQVsxXTsKQEAgLTE0MiwyMSArMTQyLDI3IEBACiAJLyogbm90ZTogQVsgMF0gaXMgbGVmdCBhcyBpcyAqLwogfQogCisjZGVmaW5lIENISV9TVEVQKGkpIFwKKwlBMCA9IEFbMCArIChpKV07IFwKKwlBMSA9IEFbMSArIChpKV07IFwKKwlBWzAgKyAoaSldIF49IH5BMSAmIEFbMiArIChpKV07IFwKKwlBWzEgKyAoaSldIF49IH5BWzIgKyAoaSldICYgQVszICsgKGkpXTsgXAorCUFbMiArIChpKV0gXj0gfkFbMyArIChpKV0gJiBBWzQgKyAoaSldOyBcCisJQVszICsgKGkpXSBePSB+QVs0ICsgKGkpXSAmIEEwOyBcCisJQVs0ICsgKGkpXSBePSB+QTAgJiBBMSBcCisKIC8qIEtlY2NhayBjaGkoKSB0cmFuc2Zvcm1hdGlvbiAqLwotc3RhdGljIHZvaWQga2VjY2FrX2NoaSh1aW50NjRfdCAqQSkKK3N0YXRpYyB2b2lkIGtlY2Nha19jaGkodWludDY0X3QqIEEpCiB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IDI1OyBpICs9IDUpIHsKLQkJdWludDY0X3QgQTAgPSBBWzAgKyBpXSwgQTEgPSBBWzEgKyBpXTsKLQkJQVswICsgaV0gXj0gfkExICYgQVsyICsgaV07Ci0JCUFbMSArIGldIF49IH5BWzIgKyBpXSAmIEFbMyArIGldOwotCQlBWzIgKyBpXSBePSB+QVszICsgaV0gJiBBWzQgKyBpXTsKLQkJQVszICsgaV0gXj0gfkFbNCArIGldICYgQTA7Ci0JCUFbNCArIGldIF49IH5BMCAmIEExOwotCX0KKwl1aW50NjRfdCBBMCwgQTE7CisJQ0hJX1NURVAoMCk7CisJQ0hJX1NURVAoNSk7CisJQ0hJX1NURVAoMTApOworCUNISV9TVEVQKDE1KTsKKwlDSElfU1RFUCgyMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJoYXNoX3NoYTNfcGVybXV0YXRpb24odWludDY0X3QgKnN0YXRlKQorc3RhdGljIHZvaWQgcmhhc2hfc2hhM19wZXJtdXRhdGlvbih1aW50NjRfdCogc3RhdGUpCiB7CiAJaW50IHJvdW5kOwogCWZvciAocm91bmQgPSAwOyByb3VuZCA8IE51bWJlck9mUm91bmRzOyByb3VuZCsrKQpAQCAtMjA0LDcgKzIxMCw3IEBACiAgKiBAcGFyYW0gYmxvY2sgdGhlIG1lc3NhZ2UgYmxvY2sgdG8gcHJvY2VzcwogICogQHBhcmFtIGJsb2NrX3NpemUgdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NlZCBibG9jayBpbiBieXRlcwogICovCi1zdGF0aWMgdm9pZCByaGFzaF9zaGEzX3Byb2Nlc3NfYmxvY2sodWludDY0X3QgaGFzaFsyNV0sIGNvbnN0IHVpbnQ2NF90ICpibG9jaywgc2l6ZV90IGJsb2NrX3NpemUpCitzdGF0aWMgdm9pZCByaGFzaF9zaGEzX3Byb2Nlc3NfYmxvY2sodWludDY0X3QgaGFzaFsyNV0sIGNvbnN0IHVpbnQ2NF90KiBibG9jaywgc2l6ZV90IGJsb2NrX3NpemUpCiB7CiAJLyogZXhwYW5kZWQgbG9vcCAqLwogCWhhc2hbIDBdIF49IGxlMm1lXzY0KGJsb2NrWyAwXSk7CkBAIC0yNjAsNyArMjY2LDcgQEAKICAqIEBwYXJhbSBtc2cgbWVzc2FnZSBjaHVuawogICogQHBhcmFtIHNpemUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCiAgKi8KLXZvaWQgcmhhc2hfc2hhM191cGRhdGUoc2hhM19jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgcmhhc2hfc2hhM191cGRhdGUoc2hhM19jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKIHsKIAlzaXplX3QgaW5kZXggPSAoc2l6ZV90KWN0eC0+cmVzdDsKIAlzaXplX3QgYmxvY2tfc2l6ZSA9IChzaXplX3QpY3R4LT5ibG9ja19zaXplOwpAQCAtMzA1LDcgKzMxMSw3IEBACiAgKiBAcGFyYW0gY3R4IHRoZSBhbGdvcml0aG0gY29udGV4dCBjb250YWluaW5nIGN1cnJlbnQgaGFzaGluZyBzdGF0ZQogICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KICAqLwotdm9pZCByaGFzaF9zaGEzX2ZpbmFsKHNoYTNfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3ZvaWQgcmhhc2hfc2hhM19maW5hbChzaGEzX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJc2l6ZV90IGRpZ2VzdF9sZW5ndGggPSAxMDAgLSBjdHgtPmJsb2NrX3NpemUgLyAyOwogCWNvbnN0IHNpemVfdCBibG9ja19zaXplID0gY3R4LT5ibG9ja19zaXplOwpAQCAtMzMzLDcgKzMzOSw3IEBACiAqIEBwYXJhbSBjdHggdGhlIGFsZ29yaXRobSBjb250ZXh0IGNvbnRhaW5pbmcgY3VycmVudCBoYXNoaW5nIHN0YXRlCiAqIEBwYXJhbSByZXN1bHQgY2FsY3VsYXRlZCBoYXNoIGluIGJpbmFyeSBmb3JtCiAqLwotdm9pZCByaGFzaF9rZWNjYWtfZmluYWwoc2hhM19jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQordm9pZCByaGFzaF9rZWNjYWtfZmluYWwoc2hhM19jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXNpemVfdCBkaWdlc3RfbGVuZ3RoID0gMTAwIC0gY3R4LT5ibG9ja19zaXplIC8gMjsKIAljb25zdCBzaXplX3QgYmxvY2tfc2l6ZSA9IGN0eC0+YmxvY2tfc2l6ZTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuaAppbmRleCAyODMxOTk3Li5lMDAwNDFkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogLyogbWV0aG9kcyBmb3IgY2FsY3VsYXRpbmcgdGhlIGhhc2ggZnVuY3Rpb24gKi8KIAotdm9pZCByaGFzaF9zaGEzXzIyNF9pbml0KHNoYTNfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGEzXzI1Nl9pbml0KHNoYTNfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGEzXzM4NF9pbml0KHNoYTNfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGEzXzUxMl9pbml0KHNoYTNfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGEzX3VwZGF0ZShzaGEzX2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKLXZvaWQgcmhhc2hfc2hhM19maW5hbChzaGEzX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwordm9pZCByaGFzaF9zaGEzXzIyNF9pbml0KHNoYTNfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGEzXzI1Nl9pbml0KHNoYTNfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGEzXzM4NF9pbml0KHNoYTNfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGEzXzUxMl9pbml0KHNoYTNfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGEzX3VwZGF0ZShzaGEzX2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKK3ZvaWQgcmhhc2hfc2hhM19maW5hbChzaGEzX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwogCiAjaWZkZWYgVVNFX0tFQ0NBSwogI2RlZmluZSByaGFzaF9rZWNjYWtfMjI0X2luaXQgcmhhc2hfc2hhM18yMjRfaW5pdApAQCAtNDQsNyArNDQsNyBAQAogI2RlZmluZSByaGFzaF9rZWNjYWtfMzg0X2luaXQgcmhhc2hfc2hhM18zODRfaW5pdAogI2RlZmluZSByaGFzaF9rZWNjYWtfNTEyX2luaXQgcmhhc2hfc2hhM181MTJfaW5pdAogI2RlZmluZSByaGFzaF9rZWNjYWtfdXBkYXRlIHJoYXNoX3NoYTNfdXBkYXRlCi12b2lkIHJoYXNoX2tlY2Nha19maW5hbChzaGEzX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwordm9pZCByaGFzaF9rZWNjYWtfZmluYWwoc2hhM19jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmMKaW5kZXggYTNlNjgxZC4uNTU1ZTZlZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmMKQEAgLTEsMTggKzEsMTggQEAKIC8qIHNoYTUxMi5jIC0gYW4gaW1wbGVtZW50YXRpb24gb2YgU0hBLTM4NC81MTIgaGFzaCBmdW5jdGlvbnMKICAqIGJhc2VkIG9uIEZJUFMgMTgwLTMgKEZlZGVyYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBTdGFuZGFydCkuCiAgKgotICogQ29weXJpZ2h0OiAyMDEwLTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC04MSw3ICs4MSw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGE1MTJfaW5pdChzaGE1MTJfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTUxMl9pbml0KHNoYTUxMl9jdHgqIGN0eCkKIHsKIAkvKiBJbml0aWFsIHZhbHVlcy4gVGhlc2Ugd29yZHMgd2VyZSBvYnRhaW5lZCBieSB0YWtpbmcgdGhlIGZpcnN0IDMyCiAJICogYml0cyBvZiB0aGUgZnJhY3Rpb25hbCBwYXJ0cyBvZiB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZSBmaXJzdApAQCAtMTA0LDcgKzEwNCw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEzODRfaW5pdChzdHJ1Y3Qgc2hhNTEyX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEzODRfaW5pdChzdHJ1Y3Qgc2hhNTEyX2N0eCogY3R4KQogewogCS8qIEluaXRpYWwgdmFsdWVzIGZyb20gRklQUyAxODAtMy4gVGhlc2Ugd29yZHMgd2VyZSBvYnRhaW5lZCBieSB0YWtpbmcKIAkgKiB0aGUgZmlyc3Qgc2l4dHktZm91ciBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzIG9mIHRoZSBzcXVhcmUKQEAgLTEzMSw3ICsxMzEsNyBAQAogewogCXVpbnQ2NF90IEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg7CiAJdWludDY0X3QgV1sxNl07Ci0JY29uc3QgdWludDY0X3QgKms7CisJY29uc3QgdWludDY0X3QqIGs7CiAJaW50IGk7CiAKIAlBID0gaGFzaFswXSwgQiA9IGhhc2hbMV0sIEMgPSBoYXNoWzJdLCBEID0gaGFzaFszXTsKQEAgLTE4Niw3ICsxODYsNyBAQAogICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCiAgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKICAqLwotdm9pZCByaGFzaF9zaGE1MTJfdXBkYXRlKHNoYTUxMl9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgcmhhc2hfc2hhNTEyX3VwZGF0ZShzaGE1MTJfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCiB7CiAJc2l6ZV90IGluZGV4ID0gKHNpemVfdCljdHgtPmxlbmd0aCAmIDEyNzsKIAljdHgtPmxlbmd0aCArPSBzaXplOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgKiBAcGFyYW0gY3R4IHRoZSBhbGdvcml0aG0gY29udGV4dCBjb250YWluaW5nIGN1cnJlbnQgaGFzaGluZyBzdGF0ZQogICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KICAqLwotdm9pZCByaGFzaF9zaGE1MTJfZmluYWwoc2hhNTEyX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCit2b2lkIHJoYXNoX3NoYTUxMl9maW5hbChzaGE1MTJfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlzaXplX3QgaW5kZXggPSAoKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgMTI3KSA+PiAzOwogCXVuc2lnbmVkIHNoaWZ0ID0gKCh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDcpICogODsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmgKaW5kZXggN2M2ODliZS4uZjgwYWUwZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmgKQEAgLTIwLDEwICsyMCwxMCBAQAogCXVuc2lnbmVkIGRpZ2VzdF9sZW5ndGg7IC8qIGxlbmd0aCBvZiB0aGUgYWxnb3JpdGhtIGRpZ2VzdCBpbiBieXRlcyAqLwogfSBzaGE1MTJfY3R4OwogCi12b2lkIHJoYXNoX3NoYTM4NF9pbml0KHNoYTUxMl9jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTUxMl9pbml0KHNoYTUxMl9jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTUxMl91cGRhdGUoc2hhNTEyX2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLXZvaWQgcmhhc2hfc2hhNTEyX2ZpbmFsKHNoYTUxMl9jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKK3ZvaWQgcmhhc2hfc2hhMzg0X2luaXQoc2hhNTEyX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhNTEyX2luaXQoc2hhNTEyX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhNTEyX3VwZGF0ZShzaGE1MTJfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwordm9pZCByaGFzaF9zaGE1MTJfZmluYWwoc2hhNTEyX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gLyogZXh0ZXJuICJDIiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXN0ZC5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXN0ZC5oCmluZGV4IDAxOWI5MzEuLjkxN2ZiNmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3VzdGQuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91c3RkLmgKQEAgLTM2LDQgKzM2LDM2IEBACiAjIGRlZmluZSB1aW50OF90IEtXSU1MX0lOVF91aW50OF90CiAjZW5kaWYKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgMAorI2lmIF9NU0NfVkVSID4gMTAwMAorIyBpbmNsdWRlIDxzdGRkZWYuaD4gLyogc2l6ZV90IGZvciB2YzYuMCAqLworCisjIGlmIF9NU0NfVkVSID49IDE2MDAKKy8qIFZpc3VhbCBTdHVkaW8gPj0gMjAxMCBoYXMgc3RkaW50LmggKi8KKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbHNlCisgIC8qIHZjNi4wIGhhcyBidWcgd2l0aCBfX2ludDgsIHNvIHVzaW5nIGNoYXIgaW5zdGVhZCAqLworICB0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgIGludDhfdDsKKyAgdHlwZWRlZiBzaWduZWQgX19pbnQxNiAgICBpbnQxNl90OworICB0eXBlZGVmIHNpZ25lZCBfX2ludDMyICAgIGludDMyX3Q7CisgIHR5cGVkZWYgc2lnbmVkIF9faW50NjQgICAgaW50NjRfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICB1aW50OF90OworICB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgIHVpbnQxNl90OworICB0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgIHVpbnQzMl90OworICB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgIHVpbnQ2NF90OworIyBlbmRpZiAvKiBfTVNDX1ZFUiA+PSAxNjAwICovCisKKy8qIGRpc2FibGUgd2FybmluZ3M6IFRoZSBQT1NJWCBuYW1lIGZvciB0aGlzIGl0ZW0gaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBJU08gQysrIGNvbmZvcm1hbnQgbmFtZS4gKi8KKyMgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ5OTYpCisKKyNlbHNlIC8qIF9NU0NfVkVSID4gMTAwMCAqLworCisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKworI2VuZGlmIC8qIF9NU0NfVkVSID4gMTAwMCAqLworI2VuZGlmCisKICNlbmRpZiAvKiBMSUJSSEFTSF9VU1REX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3V0aWwuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3V0aWwuaAppbmRleCA5ZjM3MTU3Li41N2NhZTliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91dGlsLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXRpbC5oCkBAIC0yMCw3ICsyMCw3IEBACiAjIGRlZmluZSBhdG9taWNfY29tcGFyZV9hbmRfc3dhcChwdHIsIG9sZHZhbCwgbmV3dmFsKSBhdG9taWNfY2FzXzMyKHB0ciwgb2xkdmFsLCBuZXd2YWwpCiAjZWxzZQogLyogcHJheSB0aGF0IGl0IHdpbGwgd29yayAqLwotIyBkZWZpbmUgYXRvbWljX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGR2YWwsIG5ld3ZhbCkgeyBpZigqKHB0cikgPT0gKG9sZHZhbCkpICoocHRyKSA9IChuZXd2YWwpOyB9CisjIGRlZmluZSBhdG9taWNfY29tcGFyZV9hbmRfc3dhcChwdHIsIG9sZHZhbCwgbmV3dmFsKSB7IGlmICgqKHB0cikgPT0gKG9sZHZhbCkpICoocHRyKSA9IChuZXd2YWwpOyB9CiAjIGRlZmluZSBOT19BVE9NSUNfQlVJTFRJTlMKICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkLy5naXRhdHRyaWJ1dGVzIGIvVXRpbGl0aWVzL3N0ZC8uZ2l0YXR0cmlidXRlcwppbmRleCBjZDIwNTQ5Li5hZDU0NTlkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvc3RkLy5naXRhdHRyaWJ1dGVzCisrKyBiL1V0aWxpdGllcy9zdGQvLmdpdGF0dHJpYnV0ZXMKQEAgLTEgKzEsMiBAQAotY20vKiBvdXItYy1zdHlsZQorY20vKiogb3VyLWMtc3R5bGUKK2NtZXh0LyoqIG91ci1jLXN0eWxlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL3N0ZC9DTWFrZUxpc3RzLnR4dAppbmRleCA2M2MwYTYwLi5hNzJhYmI3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvc3RkL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9zdGQvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw4IEBACiAKKyMgVG8gZW5zdXJlIG1heGltdW0gcG9ydGFiaWxpdHkgYWNyb3NzIHZhcmlvdXMgY29tcGlsZXJzIGFuZCBwbGF0Zm9ybXMKKyMgZGVhY3RpdmF0ZSBhbnkgY29tcGlsZXIgZXh0ZW5zaW9ucworc2V0KENNQUtFX0NYWF9FWFRFTlNJT05TIEZBTFNFKQorCiAjIHNvdXJjZSBmaWxlcyBmb3IgQ01ha2Ugc3RkIGxpYnJhcnkKIHNldChTUkNTIGNtL2JpdHMvc3RyaW5nX3ZpZXcuY3h4CiAgICAgICAgICBjbS9tZW1vcnkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vYml0cy9lcmFzZV9pZi5oeHggYi9VdGlsaXRpZXMvc3RkL2NtL2JpdHMvZXJhc2VfaWYuaHh4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTJmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2JpdHMvZXJhc2VfaWYuaHh4CkBAIC0wLDAgKzEsMjkgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpZm5kZWYgY21fYml0c19lcmFzZV9pZl9oeHgKKyNkZWZpbmUgY21fYml0c19lcmFzZV9pZl9oeHgKKworbmFtZXNwYWNlIGNtIHsKK25hbWVzcGFjZSBpbnRlcm5hbHMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyLCB0eXBlbmFtZSBQcmVkaWNhdGU+Cit2b2lkIGVyYXNlX2lmKENvbnRhaW5lciYgY29udCwgUHJlZGljYXRlIHByZWQpCit7CisgIGZvciAodHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBpdGVyID0gY29udC5iZWdpbigpLCBsYXN0ID0gY29udC5lbmQoKTsKKyAgICAgICBpdGVyICE9IGxhc3Q7KSB7CisgICAgaWYgKHByZWQoKml0ZXIpKSB7CisgICAgICBpdGVyID0gY29udC5lcmFzZShpdGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgKytpdGVyOworICAgIH0KKyAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBpbnRlcm5hbHMKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9kZXF1ZSBiL1V0aWxpdGllcy9zdGQvY20vZGVxdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiNjcyNQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY20vZGVxdWUKQEAgLTAsMCArMSw0MCBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fZGVxdWUKKyNkZWZpbmUgY21fZGVxdWUKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxkZXF1ZT4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZTsKK3VzaW5nIHN0ZDo6ZXJhc2VfaWY7CisKKyNlbHNlCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFY+CitpbmxpbmUgdm9pZCBlcmFzZShzdGQ6OmRlcXVlPFQsIEFsbG9jYXRvcj4mIGNvbnQsIGNvbnN0IFYmIHZhbHVlKQoreworICBjb250LmVyYXNlKHN0ZDo6cmVtb3ZlKGNvbnQuYmVnaW4oKSwgY29udC5lbmQoKSwgdmFsdWUpLCBjb250LmVuZCgpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgUHJlZGljYXRlPgoraW5saW5lIHZvaWQgZXJhc2VfaWYoc3RkOjpkZXF1ZTxULCBBbGxvY2F0b3I+JiBjb250LCBQcmVkaWNhdGUgcHJlZCkKK3sKKyAgY29udC5lcmFzZShzdGQ6OnJlbW92ZV9pZihjb250LmJlZ2luKCksIGNvbnQuZW5kKCksIHByZWQpLCBjb250LmVuZCgpKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9saXN0IGIvVXRpbGl0aWVzL3N0ZC9jbS9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNWQ5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2xpc3QKQEAgLTAsMCArMSwzOSBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fbGlzdAorI2RlZmluZSBjbV9saXN0CisKKyNpbmNsdWRlIDxsaXN0PiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKK25hbWVzcGFjZSBjbSB7CisKKy8vIHNob3VsZCBiZSB1cGRhdGVkIHdoZW4gQysrMjAgaXMgZmluYWxpemVkCisjaWYgKF9fY3BsdXNwbHVzID4gMjAxNzAzTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPiAyMDE3MDMpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlZmluZWQoX19jcHBfbGliX2VyYXNlX2lmKQorCit1c2luZyBzdGQ6OmVyYXNlOwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgVj4KK2lubGluZSB2b2lkIGVyYXNlKHN0ZDo6bGlzdDxULCBBbGxvY2F0b3I+JiBjb250LCBjb25zdCBWJiB2YWx1ZSkKK3sKKyAgY29udC5yZW1vdmVfaWYoWyZdKGF1dG8mIGVsZW0pIHsgcmV0dXJuIGVsZW0gPT0gdmFsdWU7IH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSBQcmVkaWNhdGU+CitpbmxpbmUgdm9pZCBlcmFzZV9pZihzdGQ6Omxpc3Q8VCwgQWxsb2NhdG9yPiYgY29udCwgUHJlZGljYXRlIHByZWQpCit7CisgIGNvbnQucmVtb3ZlX2lmKHByZWQpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL21hcCBiL1V0aWxpdGllcy9zdGQvY20vbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDhkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL21hcApAQCAtMCwwICsxLDQ0IEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV9tYXAKKyNkZWZpbmUgY21fbWFwCisKKyNpbmNsdWRlIDxtYXA+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworI2luY2x1ZGUgPGNtL2JpdHMvZXJhc2VfaWYuaHh4PgorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcGFyZSwgdHlwZW5hbWUgQWxsb2NhdG9yLAorICAgICAgICAgIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6bWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlLCB0eXBlbmFtZSBBbGxvY2F0b3IsCisgICAgICAgICAgdHlwZW5hbWUgUHJlZGljYXRlPgoraW5saW5lIHZvaWQgZXJhc2VfaWYoc3RkOjptdWx0aW1hcDxLZXksIFQsIENvbXBhcmUsIEFsbG9jYXRvcj4mIGNvbnQsCisgICAgICAgICAgICAgICAgICAgICBQcmVkaWNhdGUgcHJlZCkKK3sKKyAgaW50ZXJuYWxzOjplcmFzZV9pZihjb250LCBwcmVkKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9tZW1vcnkgYi9VdGlsaXRpZXMvc3RkL2NtL21lbW9yeQppbmRleCA4ZWJkZWQyLi5kZDBmODIyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvc3RkL2NtL21lbW9yeQorKysgYi9VdGlsaXRpZXMvc3RkL2NtL21lbW9yeQpAQCAtOCw2ICs4LDggQEAKIAogI2luY2x1ZGUgPG1lbW9yeT4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAogI2lmICFkZWZpbmVkKENNYWtlX0hBVkVfQ1hYX01BS0VfVU5JUVVFKQorIyAgaW5jbHVkZSA8Y3N0ZGRlZj4KKyMgIGluY2x1ZGUgPHR5cGVfdHJhaXRzPgogIyAgaW5jbHVkZSA8dXRpbGl0eT4KICNlbmRpZgogCkBAIC0xOSwxMiArMjEsNDUgQEAKIAogI2Vsc2UKIAorbmFtZXNwYWNlIGludGVybmFscyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IG1ha2VfdW5pcXVlX2lmCit7CisgIHVzaW5nIHNpbmdsZSA9IHN0ZDo6dW5pcXVlX3B0cjxUPjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IG1ha2VfdW5pcXVlX2lmPFRbXT4KK3sKKyAgdXNpbmcgdW5ib3VuZF9hcnJheSA9IHN0ZDo6dW5pcXVlX3B0cjxUW10+OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgbWFrZV91bmlxdWVfaWY8VFtOXT4KK3sKKyAgdXNpbmcgYm91bmRfYXJyYXkgPSB2b2lkOworfTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+Ci1zdGQ6OnVuaXF1ZV9wdHI8VD4gbWFrZV91bmlxdWUoQXJncyYmLi4uIGFyZ3MpCit0eXBlbmFtZSBpbnRlcm5hbHM6Om1ha2VfdW5pcXVlX2lmPFQ+OjpzaW5nbGUgbWFrZV91bmlxdWUoQXJncyYmLi4uIGFyZ3MpCiB7CiAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4obmV3IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordHlwZW5hbWUgaW50ZXJuYWxzOjptYWtlX3VuaXF1ZV9pZjxUPjo6dW5ib3VuZF9hcnJheSBtYWtlX3VuaXF1ZShzdGQ6OnNpemVfdCBuKQoreworICB1c2luZyBFID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFQ+Ojp0eXBlOworCisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4obmV3IEVbbl0oKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgordHlwZW5hbWUgaW50ZXJuYWxzOjptYWtlX3VuaXF1ZV9pZjxUPjo6Ym91bmRfYXJyYXkgbWFrZV91bmlxdWUoQXJncyYmLi4uKSA9CisgIGRlbGV0ZTsKKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIGNtCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3NldCBiL1V0aWxpdGllcy9zdGQvY20vc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGQ0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL3NldApAQCAtMCwwICsxLDQzIEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV9zZXQKKyNkZWZpbmUgY21fc2V0CisKKyNpbmNsdWRlIDxzZXQ+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworI2luY2x1ZGUgPGNtL2JpdHMvZXJhc2VfaWYuaHh4PgorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgQ29tcGFyZSwgdHlwZW5hbWUgQWxsb2NhdG9yLAorICAgICAgICAgIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6c2V0PEtleSwgQ29tcGFyZSwgQWxsb2NhdG9yPiYgY29udCwgUHJlZGljYXRlIHByZWQpCit7CisgIGludGVybmFsczo6ZXJhc2VfaWYoY29udCwgcHJlZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIENvbXBhcmUsIHR5cGVuYW1lIEFsbG9jYXRvciwKKyAgICAgICAgICB0eXBlbmFtZSBQcmVkaWNhdGU+CitpbmxpbmUgdm9pZCBlcmFzZV9pZihzdGQ6Om11bHRpc2V0PEtleSwgQ29tcGFyZSwgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3N0cmluZyBiL1V0aWxpdGllcy9zdGQvY20vc3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNGM3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL3N0cmluZwpAQCAtMCwwICsxLDQyIEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV9zdHJpbmcKKyNkZWZpbmUgY21fc3RyaW5nCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKK25hbWVzcGFjZSBjbSB7CisKKy8vIHNob3VsZCBiZSB1cGRhdGVkIHdoZW4gQysrMjAgaXMgZmluYWxpemVkCisjaWYgKF9fY3BsdXNwbHVzID4gMjAxNzAzTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPiAyMDE3MDMpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlZmluZWQoX19jcHBfbGliX2VyYXNlX2lmKQorCit1c2luZyBzdGQ6OmVyYXNlOwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgZXJhc2Uoc3RkOjpiYXNpY19zdHJpbmc8VCwgVHJhaXRzLCBBbGxvY2F0b3I+JiBjb250LAorICAgICAgICAgICAgICAgICAgY29uc3QgViYgdmFsdWUpCit7CisgIGNvbnQuZXJhc2Uoc3RkOjpyZW1vdmUoY29udC5iZWdpbigpLCBjb250LmVuZCgpLCB2YWx1ZSksIGNvbnQuZW5kKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6YmFzaWNfc3RyaW5nPFQsIFRyYWl0cywgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBjb250LmVyYXNlKHN0ZDo6cmVtb3ZlX2lmKGNvbnQuYmVnaW4oKSwgY29udC5lbmQoKSwgcHJlZCksIGNvbnQuZW5kKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3R5cGVfdHJhaXRzIGIvVXRpbGl0aWVzL3N0ZC9jbS90eXBlX3RyYWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzJjMmM2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS90eXBlX3RyYWl0cwpAQCAtMCwwICsxLDYzIEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV90eXBlX3RyYWl0cworI2RlZmluZSBjbV90eXBlX3RyYWl0cworCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworbmFtZXNwYWNlIGNtIHsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTQwMkwgfHwgKGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA+PSAyMDE0MDJMKQorCisvLyBNaXNjZWxsYW5lb3VzIHRyYW5zZm9ybWF0aW9ucwordGVtcGxhdGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Cit1c2luZyBlbmFibGVfaWZfdCA9IHN0ZDo6ZW5hYmxlX2lmX3Q8QiwgVD47CisKKyNlbHNlCisKKy8vIE1pc2NlbGxhbmVvdXMgdHJhbnNmb3JtYXRpb25zCit0ZW1wbGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KK3VzaW5nIGVuYWJsZV9pZl90ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CisKKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCB8fCAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID49IDIwMTcwMykKKworLy8gSGVscGVyIGNsYXNzZXMKK3VzaW5nIHN0ZDo6Ym9vbF9jb25zdGFudDsKKworLy8gTWlzY2VsbGFuZW91cyB0cmFuc2Zvcm1hdGlvbnMKK3VzaW5nIHN0ZDo6aW52b2tlX3Jlc3VsdDsKK3VzaW5nIHN0ZDo6aW52b2tlX3Jlc3VsdF90OworCit1c2luZyBzdGQ6OnZvaWRfdDsKKworI2Vsc2UKKworLy8gSGVscGVyIGNsYXNzZXMKK3RlbXBsYXRlIDxib29sIEI+Cit1c2luZyBib29sX2NvbnN0YW50ID0gc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBCPjsKKworLy8gTWlzY2VsbGFuZW91cyB0cmFuc2Zvcm1hdGlvbnMKK3RlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdUeXBlcz4KK3VzaW5nIGludm9rZV9yZXN1bHQgPSBzdGQ6OnJlc3VsdF9vZjxGKEFyZ1R5cGVzLi4uKT47CisKK3RlbXBsYXRlIDxjbGFzcyBGLCB0eXBlbmFtZS4uLiBBcmdUeXBlcz4KK3VzaW5nIGludm9rZV9yZXN1bHRfdCA9IHR5cGVuYW1lIGludm9rZV9yZXN1bHQ8RiwgQXJnVHlwZXMuLi4+Ojp0eXBlOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJnVHlwZXM+CitzdHJ1Y3QgbWFrZV92b2lkCit7CisgIHR5cGVkZWYgdm9pZCB0eXBlOworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdUeXBlcz4KK3VzaW5nIHZvaWRfdCA9IHR5cGVuYW1lIG1ha2Vfdm9pZDxBcmdUeXBlcy4uLj46OnR5cGU7CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vdW5vcmRlcmVkX21hcCBiL1V0aWxpdGllcy9zdGQvY20vdW5vcmRlcmVkX21hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhhNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS91bm9yZGVyZWRfbWFwCkBAIC0wLDAgKzEsNDUgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtX3Vub3JkZXJlZF9tYXAKKyNkZWZpbmUgY21fdW5vcmRlcmVkX21hcAorCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCisjaW5jbHVkZSA8Y20vYml0cy9lcmFzZV9pZi5oeHg+CisKK25hbWVzcGFjZSBjbSB7CisKKy8vIHNob3VsZCBiZSB1cGRhdGVkIHdoZW4gQysrMjAgaXMgZmluYWxpemVkCisjaWYgKF9fY3BsdXNwbHVzID4gMjAxNzAzTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPiAyMDE3MDMpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlZmluZWQoX19jcHBfbGliX2VyYXNlX2lmKQorCit1c2luZyBzdGQ6OmVyYXNlX2lmOworCisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoLCB0eXBlbmFtZSBLZXlFcXVhbCwKKyAgICAgICAgICB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKAorICBzdGQ6OnVub3JkZXJlZF9tYXA8S2V5LCBULCBIYXNoLCBLZXlFcXVhbCwgQWxsb2NhdG9yPiYgY29udCwgUHJlZGljYXRlIHByZWQpCit7CisgIGludGVybmFsczo6ZXJhc2VfaWYoY29udCwgcHJlZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2gsIHR5cGVuYW1lIEtleUVxdWFsLAorICAgICAgICAgIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgUHJlZGljYXRlPgoraW5saW5lIHZvaWQgZXJhc2VfaWYoCisgIHN0ZDo6dW5vcmRlcmVkX211bHRpbWFwPEtleSwgVCwgSGFzaCwgS2V5RXF1YWwsIEFsbG9jYXRvcj4mIGNvbnQsCisgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3Vub3JkZXJlZF9zZXQgYi9VdGlsaXRpZXMvc3RkL2NtL3Vub3JkZXJlZF9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlYmFjNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY20vdW5vcmRlcmVkX3NldApAQCAtMCwwICsxLDQ1IEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV91bm9yZGVyZWRfc2V0CisjZGVmaW5lIGNtX3Vub3JkZXJlZF9zZXQKKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworI2luY2x1ZGUgPGNtL2JpdHMvZXJhc2VfaWYuaHh4PgorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaCwgdHlwZW5hbWUgS2V5RXF1YWwsIHR5cGVuYW1lIEFsbG9jYXRvciwKKyAgICAgICAgICB0eXBlbmFtZSBQcmVkaWNhdGU+CitpbmxpbmUgdm9pZCBlcmFzZV9pZihzdGQ6OnVub3JkZXJlZF9zZXQ8S2V5LCBIYXNoLCBLZXlFcXVhbCwgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBIYXNoLCB0eXBlbmFtZSBLZXlFcXVhbCwgdHlwZW5hbWUgQWxsb2NhdG9yLAorICAgICAgICAgIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKAorICBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDxLZXksIEhhc2gsIEtleUVxdWFsLCBBbGxvY2F0b3I+JiBjb250LAorICBQcmVkaWNhdGUgcHJlZCkKK3sKKyAgaW50ZXJuYWxzOjplcmFzZV9pZihjb250LCBwcmVkKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS92ZWN0b3IgYi9VdGlsaXRpZXMvc3RkL2NtL3ZlY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGJlNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS92ZWN0b3IKQEAgLTAsMCArMSw0MCBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fdmVjdG9yCisjZGVmaW5lIGNtX3ZlY3RvcgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZlY3Rvcj4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZTsKK3VzaW5nIHN0ZDo6ZXJhc2VfaWY7CisKKyNlbHNlCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFY+CitpbmxpbmUgdm9pZCBlcmFzZShzdGQ6OnZlY3RvcjxULCBBbGxvY2F0b3I+JiBjb250LCBjb25zdCBWJiB2YWx1ZSkKK3sKKyAgY29udC5lcmFzZShzdGQ6OnJlbW92ZShjb250LmJlZ2luKCksIGNvbnQuZW5kKCksIHZhbHVlKSwgY29udC5lbmQoKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6dmVjdG9yPFQsIEFsbG9jYXRvcj4mIGNvbnQsIFByZWRpY2F0ZSBwcmVkKQoreworICBjb250LmVyYXNlKHN0ZDo6cmVtb3ZlX2lmKGNvbnQuYmVnaW4oKSwgY29udC5lbmQoKSwgcHJlZCksIGNvbnQuZW5kKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtZXh0L2FsZ29yaXRobSBiL1V0aWxpdGllcy9zdGQvY21leHQvYWxnb3JpdGhtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTYxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L2FsZ29yaXRobQpAQCAtMCwwICsxLDE2MyBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21leHRfYWxnb3JpdGhtCisjZGVmaW5lIGNtZXh0X2FsZ29yaXRobQorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CisjaW5jbHVkZSA8Y21leHQvaXRlcmF0b3I+CisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiBkZWZpbmVkKF9fc3BhcmMpCisjICBpbmNsdWRlIDxsaXN0PgorIyAgaW5jbHVkZSA8dmVjdG9yPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtZXh0L3R5cGVfdHJhaXRzPgorI2VuZGlmCisKK25hbWVzcGFjZSBjbSB7CisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiBkZWZpbmVkKF9fc3BhcmMpCisvLyBPcmFjbGUgRGV2ZWxvcGVyU3R1ZGlvIEMrKyBjb21waWxlciBvbiBTb2xhcmlzL1NwYXJjIGZhaWxzIHRvIGNvbXBpbGUKKy8vIHRlbXBsYXRlcyB3aXRoIGNvbnN0cmFpbnRzLgorLy8gU28sIG9uIHRoaXMgcGxhdGZvcm0sIHVzZSBvbmx5IHNpbXBsZSB0ZW1wbGF0ZXMuCisjICBkZWZpbmUgQVBQRU5EX1RXTyhDMSwgQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBhcHBlbmQoQzE8c3RkOjp1bmlxdWVfcHRyPFQ+PiYgdiwgQzI8c3RkOjp1bmlxdWVfcHRyPFU+PiYmIHIpICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGQ6OnRyYW5zZm9ybSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHIuYmVnaW4oKSwgci5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHYpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFtdKHN0ZDo6dW5pcXVlX3B0cjxVPiYgaXRlbSkgeyByZXR1cm4gc3RkOjptb3ZlKGl0ZW0pOyB9KTsgICAgICAgICAgICBcCisgICAgICByLmNsZWFyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBhcHBlbmQoQzE8VCo+JiB2LCBDMjxzdGQ6OnVuaXF1ZV9wdHI8VT4+IGNvbnN0JiByKSAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGQ6OnRyYW5zZm9ybSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHIuYmVnaW4oKSwgci5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHYpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFtdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxVPiYgaXRlbSkgeyByZXR1cm4gaXRlbS5nZXQoKTsgfSk7ICAgICAgICAgICBcCisgICAgfQorCisjICBkZWZpbmUgQVBQRU5EX09ORShDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIElucHV0SXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGNtOjplbmFibGVfaWZfdDxjbTo6aXNfaW5wdXRfaXRlcmF0b3I8SW5wdXRJdD46OnZhbHVlLCBpbnQ+ID0gICBcCisgICAgICAgICAgICAgICAgMD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBhcHBlbmQoQzxUPiYgdiwgSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB2Lmluc2VydCh2LmVuZCgpLCBmaXJzdCwgbGFzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhbmdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGNtOjplbmFibGVfaWZfdDxjbTo6aXNfaW5wdXRfcmFuZ2U8UmFuZ2U+Ojp2YWx1ZSwgaW50PiA9IDA+ICAgICBcCisgICAgdm9pZCBhcHBlbmQoQzxUPiYgdiwgUmFuZ2UgY29uc3QmIHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB2Lmluc2VydCh2LmVuZCgpLCByLmJlZ2luKCksIHIuZW5kKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjICBkZWZpbmUgQVBQRU5EKEMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVBQRU5EX1RXTyhDLCBDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVBQRU5EX09ORShDKQorCisjICBkZWZpbmUgQVBQRU5EX01JWChDMSwgQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVBQRU5EX1RXTyhDMSwgQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVBQRU5EX1RXTyhDMiwgQzEpCisKKy8vIEZvciBub3csIG1hbmFnZSBvbmx5IHN1cHBvcnQgZm9yIHN0ZDo6dmVjdG9yIGFuZCBzdGQ6Omxpc3QuCisvLyBPdGhlciBzZXF1ZW50aWFsIGNvbnRhaW5lciBzdXBwb3J0IGNhbiBiZSBhZGRlZCBpZiBuZWVkZWQuCitBUFBFTkQoc3RkOjp2ZWN0b3IpCitBUFBFTkQoc3RkOjpsaXN0KQorQVBQRU5EX01JWChzdGQ6OnZlY3Rvciwgc3RkOjpsaXN0KQorCisjICB1bmRlZiBBUFBFTkQKKyMgIHVuZGVmIEFQUEVORF9NSVgKKyMgIHVuZGVmIEFQUEVORF9UV08KKyMgIHVuZGVmIEFQUEVORF9PTkUKKworI2Vsc2UKKwordGVtcGxhdGUgPAorICB0eXBlbmFtZSBDb250YWluZXIxLCB0eXBlbmFtZSBDb250YWluZXIyLAorICBjbTo6ZW5hYmxlX2lmX3Q8CisgICAgY206OmlzX3NlcXVlbmNlX2NvbnRhaW5lcjxDb250YWluZXIxPjo6dmFsdWUgJiYKKyAgICAgIGNtOjppc191bmlxdWVfcHRyPHR5cGVuYW1lIENvbnRhaW5lcjE6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICAgY206OmlzX3VuaXF1ZV9wdHI8dHlwZW5hbWUgQ29udGFpbmVyMjo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lIENvbnRhaW5lcjI6OnZhbHVlX3R5cGU6OnBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIENvbnRhaW5lcjE6OnZhbHVlX3R5cGU6OnBvaW50ZXI+Ojp2YWx1ZSwKKyAgICBpbnQ+ID0gMD4KK3ZvaWQgYXBwZW5kKENvbnRhaW5lcjEmIHYsIENvbnRhaW5lcjImJiByKQoreworICBzdGQ6OnRyYW5zZm9ybSgKKyAgICByLmJlZ2luKCksIHIuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcih2KSwKKyAgICBbXSh0eXBlbmFtZSBDb250YWluZXIyOjp2YWx1ZV90eXBlJiBpdGVtKSB7IHJldHVybiBzdGQ6Om1vdmUoaXRlbSk7IH0pOworICByLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIxLCB0eXBlbmFtZSBDb250YWluZXIyLAorICAgICAgICAgIGNtOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIGNtOjppc19zZXF1ZW5jZV9jb250YWluZXI8Q29udGFpbmVyMT46OnZhbHVlICYmCisgICAgICAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjx0eXBlbmFtZSBDb250YWluZXIxOjp2YWx1ZV90eXBlPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgY206OmlzX3VuaXF1ZV9wdHI8dHlwZW5hbWUgQ29udGFpbmVyMjo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICAgICAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8dHlwZW5hbWUgQ29udGFpbmVyMjo6dmFsdWVfdHlwZTo6cG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBDb250YWluZXIxOjp2YWx1ZV90eXBlPjo6dmFsdWUsCisgICAgICAgICAgICBpbnQ+ID0gMD4KKyMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit2b2lkIGFwcGVuZChDb250YWluZXIxJiB2LCBDb250YWluZXIyIGNvbnN0JiByLCBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDA+KQorIyAgZWxzZQordm9pZCBhcHBlbmQoQ29udGFpbmVyMSYgdiwgQ29udGFpbmVyMiBjb25zdCYgcikKKyMgIGVuZGlmCit7CisgIHN0ZDo6dHJhbnNmb3JtKAorICAgIHIuYmVnaW4oKSwgci5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHYpLAorICAgIFtdKGNvbnN0IHR5cGVuYW1lIENvbnRhaW5lcjI6OnZhbHVlX3R5cGUmIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uZ2V0KCk7IH0pOworfQorCit0ZW1wbGF0ZSA8CisgIHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUgSW5wdXRJdCwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIGNtOjppc19zZXF1ZW5jZV9jb250YWluZXI8Q29udGFpbmVyPjo6dmFsdWUgJiYKKyAgICAgIGNtOjppc19pbnB1dF9pdGVyYXRvcjxJbnB1dEl0Pjo6dmFsdWUgJiYKKyAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SW5wdXRJdD46OnZhbHVlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZT46OnZhbHVlLAorICAgIGludD4gPSAwPgordm9pZCBhcHBlbmQoQ29udGFpbmVyJiB2LCBJbnB1dEl0IGZpcnN0LCBJbnB1dEl0IGxhc3QpCit7CisgIHYuaW5zZXJ0KHYuZW5kKCksIGZpcnN0LCBsYXN0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUgUmFuZ2UsCisgICAgICAgICAgY206OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgY206OmlzX3NlcXVlbmNlX2NvbnRhaW5lcjxDb250YWluZXI+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICBjbTo6aXNfaW5wdXRfcmFuZ2U8UmFuZ2U+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAhY206OmlzX3VuaXF1ZV9wdHI8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIWNtOjppc191bmlxdWVfcHRyPHR5cGVuYW1lIFJhbmdlOjp2YWx1ZV90eXBlPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTx0eXBlbmFtZSBSYW5nZTo6dmFsdWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGU+Ojp2YWx1ZSwKKyAgICAgICAgICAgIGludD4gPSAwPgorIyAgaWYgZGVmaW5lZChfX1NVTlBST19DQykKK3ZvaWQgYXBwZW5kKENvbnRhaW5lciYgdiwgUmFuZ2UgY29uc3QmIHIsIGRldGFpbDo6b3ZlcmxvYWRfc2VsZWN0b3I8MT4pCisjICBlbHNlCit2b2lkIGFwcGVuZChDb250YWluZXImIHYsIFJhbmdlIGNvbnN0JiByKQorIyAgZW5kaWYKK3sKKyAgdi5pbnNlcnQodi5lbmQoKSwgci5iZWdpbigpLCByLmVuZCgpKTsKK30KKworIyAgaWYgZGVmaW5lZChfX1NVTlBST19DQykKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgordm9pZCBhcHBlbmQoVCYgdiwgVSBjb25zdCYgcikKK3sKKyAgY206OmFwcGVuZCh2LCByLCBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDE+e30pOworfQorIyAgZW5kaWYKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY21leHQvaXRlcmF0b3IgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L2l0ZXJhdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTk0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L2l0ZXJhdG9yCkBAIC0wLDAgKzEsNDkgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtZXh0X2l0ZXJhdG9yCisjZGVmaW5lIGNtZXh0X2l0ZXJhdG9yCisKKyNpbmNsdWRlIDxpdGVyYXRvcj4KKworI2luY2x1ZGUgPGNtL3R5cGVfdHJhaXRzPgorCituYW1lc3BhY2UgY20geworCisvLyBjaGVja3MgaWYgYSB0eXBlIGlzIGFuIGl0ZXJhdG9yIHR5cGUKK3RlbXBsYXRlIDx0eXBlbmFtZSBJPgordXNpbmcgaXNfaXRlcmF0b3IgPQorICBzdGQ6OmlzX2ludGVncmFsPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEk+OjpkaWZmZXJlbmNlX3R5cGU+OworCisvLyBjaGVja3MgaWYgYSB0eXBlIGlzIGFuIGlucHV0IGl0ZXJhdG9yIHR5cGUKK3RlbXBsYXRlIDx0eXBlbmFtZSBJPgordXNpbmcgaXNfaW5wdXRfaXRlcmF0b3IgPQorICBzdGQ6OmlzX2Jhc2Vfb2Y8c3RkOjppbnB1dF9pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJPjo6aXRlcmF0b3JfY2F0ZWdvcnk+OworCisvLyBjaGVja3MgaWYgYSB0eXBlIGlzIGEgcmFuZ2UgdHlwZTogbXVzdCBoYXZlIGEgZGlmZmVyZW5jZV90eXBlIHR5cGUKK3RlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KK3VzaW5nIGlzX3JhbmdlID0gY206OmJvb2xfY29uc3RhbnQ8CisgIGNtOjppc19pdGVyYXRvcjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8Y29uc3QgUmFuZ2U+KCkuYmVnaW4oKSk+Ojp2YWx1ZSAmJgorICBjbTo6aXNfaXRlcmF0b3I8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGNvbnN0IFJhbmdlPigpLmVuZCgpKT46OnZhbHVlPjsKKworLy8gY2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCByYW5nZSB0eXBlOiBtdXN0IGhhdmUgbWV0aG9kcyBiZWdpbigpIGFuZCBlbmQoKQorLy8gcmV0dXJuaW5nIGFuIGlucHV0IGl0ZXJhdG9yCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+Cit1c2luZyBpc19pbnB1dF9yYW5nZSA9CisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTIwCisgIC8vIE1TIEMrKyBpcyBub3QgYWJsZSB0byBldmFsdWF0ZSBjb21wbGV4IHR5cGUgaW50cm9zcGVjdGlvbiwKKyAgLy8gc28gdXNlIGEgc2ltcGxpZmllZCB2ZXJzaW9uCisgIGNtOjppc19pbnB1dF9pdGVyYXRvcjx0eXBlbmFtZSBSYW5nZTo6Y29uc3RfaXRlcmF0b3I+OworI2Vsc2UKKyAgY206OmJvb2xfY29uc3RhbnQ8CisgICAgY206OmlzX2lucHV0X2l0ZXJhdG9yPGRlY2x0eXBlKAorICAgICAgc3RkOjpkZWNsdmFsPGNvbnN0IFJhbmdlPigpLmJlZ2luKCkpPjo6dmFsdWUgJiYKKyAgICBjbTo6aXNfaW5wdXRfaXRlcmF0b3I8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGNvbnN0IFJhbmdlPigpLmVuZCgpKT46OnZhbHVlPjsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5IGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9tZW1vcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNzlkZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5CkBAIC0wLDAgKzEsNDAgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtZXh0X21lbW9yeQorI2RlZmluZSBjbWV4dF9tZW1vcnkKKworI2luY2x1ZGUgPHR5cGVpbmZvPgorCisjaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CisKK25hbWVzcGFjZSBjbSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPLAorICAgICAgICAgIGNtOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjxjbTo6aW52b2tlX3Jlc3VsdF90PGRlY2x0eXBlKCZPOjpnZXQpLCBPPj46OnZhbHVlLAorICAgICAgICAgICAgaW50PiA9IDA+CitUJiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3QoTyYgaXRlbSkKK3sKKyAgcmV0dXJuICooc3RhdGljX2Nhc3Q8VCo+KGl0ZW0uZ2V0KCkpKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPLAorICAgICAgICAgIGNtOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjxjbTo6aW52b2tlX3Jlc3VsdF90PGRlY2x0eXBlKCZPOjpnZXQpLCBPPj46OnZhbHVlLAorICAgICAgICAgICAgaW50PiA9IDA+CitUJiBkeW5hbWljX3JlZmVyZW5jZV9jYXN0KE8mIGl0ZW0pCit7CisgIGF1dG8gcCA9IGR5bmFtaWNfY2FzdDxUKj4oaXRlbS5nZXQoKSk7CisKKyAgaWYgKHAgPT0gbnVsbHB0cikgeworICAgIHRocm93IHN0ZDo6YmFkX2Nhc3QoKTsKKyAgfQorCisgIHJldHVybiAqcDsKK30KKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtZXh0L3R5cGVfdHJhaXRzIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC90eXBlX3RyYWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDk4NGNiCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC90eXBlX3RyYWl0cwpAQCAtMCwwICsxLDg2IEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbWV4dF90eXBlX3RyYWl0cworI2RlZmluZSBjbWV4dF90eXBlX3RyYWl0cworCisjaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CisKK25hbWVzcGFjZSBjbSB7CisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQorLy8gT3JhY2xlIERldmVsb3BlclN0dWRpbyBDKysgY29tcGlsZXIgZG8gbm90IHN1cHBvcnQgb3ZlcmxvYWRlZCB0ZW1wbGF0ZXMgd2l0aAorLy8gc2FtZSBzaWduYXR1cmUgYnV0IGRpZmZlcmVudCBjb25zdHJhaW50cyBvdmVyIHRlbXBsYXRlIGFyZ3VtZW50cworLy8gKGkuZS4gbWV0YS1wcm9ncmFtbWluZykuCisvLyBBcyBhIHdvcmstYXJvdW5kLCB1c2UgYSBzdHJ1Y3R1cmUgdG8gYXZvaWQgdGVtcGxhdGVzIHdpdGggc2FtZSBzaWduYXR1cmUuCituYW1lc3BhY2UgZGV0YWlsIHsKK3RlbXBsYXRlIDxpbnQgTj4KK3N0cnVjdCBvdmVybG9hZF9zZWxlY3RvciA6IG92ZXJsb2FkX3NlbGVjdG9yPE4gLSAxPgoreworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBvdmVybG9hZF9zZWxlY3RvcjwwPgoreworfTsKK30KKyNlbmRpZgorCisvLyB0eXBlIHRyYWl0cyBmb3IgbWFuYWdlZCBwb2ludGVyIHR5cGVzCit0ZW1wbGF0ZSA8dHlwZW5hbWU+CitzdHJ1Y3QgaXNfdW5pcXVlX3B0ciA6IHN0ZDo6ZmFsc2VfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX3VuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPFQ+PiA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworCisvLyB0eXBlIHRyYWl0cyBmb3IgY29udGFpbmVycwordGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWRfdDw+Pgorc3RydWN0IGlzX2NvbnRhaW5lciA6IHN0ZDo6ZmFsc2VfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX2NvbnRhaW5lcjwKKyAgVCwKKyAgY206OnZvaWRfdDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlLCB0eXBlbmFtZSBUOjpzaXplX3R5cGUsCisgICAgICAgICAgICAgdHlwZW5hbWUgVDo6ZGlmZmVyZW5jZV90eXBlLCB0eXBlbmFtZSBUOjppdGVyYXRvcj4+CisgIDogc3RkOjp0cnVlX3R5cGUKK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkX3Q8Pj4KK3N0cnVjdCBpc19hc3NvY2lhdGl2ZV9jb250YWluZXIgOiBzdGQ6OmZhbHNlX3R5cGUKK3sKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19hc3NvY2lhdGl2ZV9jb250YWluZXI8CisgIFQsIGNtOjp2b2lkX3Q8dHlwZW5hbWUgVDo6a2V5X3R5cGUsIHR5cGVuYW1lIFQ6OmtleV9jb21wYXJlPj4KKyAgOiBjbTo6aXNfY29udGFpbmVyPFQ+Cit7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZF90PD4+CitzdHJ1Y3QgaXNfdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lciA6IHN0ZDo6ZmFsc2VfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX3Vub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXI8CisgIFQsCisgIGNtOjp2b2lkX3Q8dHlwZW5hbWUgVDo6a2V5X3R5cGUsIHR5cGVuYW1lIFQ6Omhhc2hlciwgdHlwZW5hbWUgVDo6a2V5X2VxdWFsLAorICAgICAgICAgICAgIHR5cGVuYW1lIFQ6OmxvY2FsX2l0ZXJhdG9yPj4gOiBjbTo6aXNfY29udGFpbmVyPFQ+Cit7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIGlzX3NlcXVlbmNlX2NvbnRhaW5lciA9CisgIGNtOjpib29sX2NvbnN0YW50PGNtOjppc19jb250YWluZXI8VD46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgICFjbTo6aXNfYXNzb2NpYXRpdmVfY29udGFpbmVyPFQ+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAhY206OmlzX3Vub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXI8VD46OnZhbHVlPjsKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib290c3RyYXAgYi9ib290c3RyYXAKaW5kZXggMWY4ZWFhNS4uNjZkYzg2MSAxMDA3NTUKLS0tIGEvYm9vdHN0cmFwCisrKyBiL2Jvb3RzdHJhcApAQCAtMTcsNyArMTcsNyBAQAogY21ha2VfdmVyc2lvbl9jb21wb25lbnQoKQogewogICBzZWQgLW4gIgotL15zZXQoQ01ha2VfVkVSU0lPTl8kezF9LyB7cy9zZXQoQ01ha2VfVkVSU0lPTl8kezF9ICpcKFswLTldKlwpKS9cMS87cDt9CisvXnNldChDTWFrZV9WRVJTSU9OXyR7MX0vIHtzL3NldChDTWFrZV9WRVJTSU9OXyR7MX0gKlwoWzAtOV0qXCkpLiovXDEvO3A7fQogIiAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Tb3VyY2UvQ01ha2VWZXJzaW9uLmNtYWtlIgogfQogCkBAIC0yOTQsNiArMjk0LDcgQEAKICAgY21DcmVhdGVUZXN0U291cmNlTGlzdCBcCiAgIGNtQ3VzdG9tQ29tbWFuZCBcCiAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBcCisgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIFwKICAgY21EZWZpbmVQcm9wZXJ0eUNvbW1hbmQgXAogICBjbURlZmluaXRpb25zIFwKICAgY21EZXBlbmRzIFwKQEAgLTM3Miw2ICszNzMsNyBAQAogICBjbUxEQ29uZmlnVG9vbCBcCiAgIGNtTGlua0RpcmVjdG9yaWVzQ29tbWFuZCBcCiAgIGNtTGlua0l0ZW0gXAorICBjbUxpbmtJdGVtR3JhcGhWaXNpdG9yIFwKICAgY21MaW5rTGluZUNvbXB1dGVyIFwKICAgY21MaW5rTGluZURldmljZUNvbXB1dGVyIFwKICAgY21MaXN0Q29tbWFuZCBcCkBAIC0xMTY2LDEwICsxMTY4LDIwIEBACiB9CiAjZW5kaWYKIAotI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wKKyNpZiAoX19jcGx1c3BsdXMgPj0gMjAxNzAzTCB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQoX19jcHBfaWZfY29uc3RleHByKSkKICNpbmNsdWRlIDxvcHRpb25hbD4KK3RlbXBsYXRlIDx0eXBlbmFtZSBULAorICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3VsdDxkZWNsdHlwZSgmVDo6Z2V0KSwgVD46OnR5cGUgPSBudWxscHRyPgordHlwZW5hbWUgVDo6cG9pbnRlciBnZXRfcHRyKFQmIGl0ZW0pCit7CisgIHJldHVybiBpdGVtLmdldCgpOworfQorCiBpbnQgY2hlY2tfY3h4MTcoKQogeworICAvLyBJbnRlbCBjb21waWxlciBkbyBub3QgaGFuZGxlIGNvcnJlY3RseSAnZGVjbHR5cGUnIGluc2lkZSAnaW52b2tlX3Jlc3VsdCcKKyAgc3RkOjp1bmlxdWVfcHRyPGludD4gdShuZXcgaW50KDApKTsKKyAgZ2V0X3B0cih1KTsKICAgc3RkOjpvcHRpb25hbDxpbnQ+IG9pID0gMDsKICAgcmV0dXJuIG9pLnZhbHVlKCk7CiB9CkBAIC0xMjIyLDYgKzEyMzQsMjkgQEAKIGVjaG8gIkMrKyBjb21waWxlciBvbiB0aGlzIHN5c3RlbSBpczogJHtjbWFrZV9jeHhfY29tcGlsZXJ9ICR7Y21ha2VfY3h4X2ZsYWdzfSIKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgQ1hYIGZlYXR1cmVzCisKK2NtYWtlX2N4eF9mZWF0dXJlcz0ibWFrZV91bmlxdWUiCisKK2ZvciBmZWF0dXJlIGluICR7Y21ha2VfY3h4X2ZlYXR1cmVzfTsgZG8KKyAgZXZhbCAiY21ha2VfaGF2ZV9jeHhfJHtmZWF0dXJlfT0wIgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyICcke2NtYWtlX2N4eF9jb21waWxlcn0gJHtjbWFrZV9jeHhfZmxhZ3N9JyBzdXBwb3J0cyAnJHtmZWF0dXJlfScuIiA+PiBjbWFrZV9ib290c3RyYXAubG9nIDI+JjEKKyAgaWYgY21ha2VfdHJ5X3J1biAiJHtjbWFrZV9jeHhfY29tcGlsZXJ9IiAiJHtjbWFrZV9jeHhfZmxhZ3N9IiBcCisgICAgICAgICAgICAgICAgICAgIiR7Y21ha2Vfc291cmNlX2Rpcn0vU291cmNlL0NoZWNrcy9jbV9jeHhfJHtmZWF0dXJlfS5jeHgiID4+IGNtYWtlX2Jvb3RzdHJhcC5sb2cgMj4mMTsgdGhlbgorICAgIGV2YWwgImNtYWtlX2hhdmVfY3h4XyR7ZmVhdHVyZX09MSIKKyAgZmkKK2RvbmUKKworY21ha2VfaGF2ZV9jeHhfZmVhdHVyZXM9IiIKK2ZvciBmZWF0dXJlIGluICR7Y21ha2VfY3h4X2ZlYXR1cmVzfTsgZG8KKyAgZmVhdHVyZV92YXJpYWJsZT0iY21ha2VfaGF2ZV9jeHhfJHtmZWF0dXJlfSIKKyAgZXZhbCAiZmVhdHVyZV92YWx1ZT1cJHske2ZlYXR1cmVfdmFyaWFibGV9fSIKKyAgaWYgWyAiJHtmZWF0dXJlX3ZhbHVlfSIgLWVxICIxIiBdOyB0aGVuCisgICAgY21ha2VfaGF2ZV9jeHhfZmVhdHVyZXM9IiR7Y21ha2VfaGF2ZV9jeHhfZmVhdHVyZXN9IC1EQ01ha2VfSEFWRV9DWFhfYGNtYWtlX3RvdXBwZXIgJHtmZWF0dXJlfWA9JHtmZWF0dXJlX3ZhbHVlfSIKKyAgZmkKK2RvbmUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRlc3QgTWFrZQogCiBjbWFrZV9tYWtlX3Byb2Nlc3Nvcj0KQEAgLTE1MjIsNiArMTU1Nyw3IEBACiAgIC1JYGNtYWtlX2VzY2FwZSBcIiR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzXCJgIgogY21ha2VfY3h4X2ZsYWdzPSIke2NtYWtlX2N4eF9mbGFnc30gXAogICAtRENNQUtFX0JPT1RTVFJBUCBcCisgICR7Y21ha2VfaGF2ZV9jeHhfZmVhdHVyZXN9IFwKICAgLUlgY21ha2VfZXNjYXBlIFwiJHtjbWFrZV9ib290c3RyYXBfZGlyfVwiYCBcCiAgIC1JYGNtYWtlX2VzY2FwZSBcIiR7Y21ha2Vfc291cmNlX2Rpcn0vU291cmNlXCJgIFwKICAgLUlgY21ha2VfZXNjYXBlIFwiJHtjbWFrZV9zb3VyY2VfZGlyfS9Tb3VyY2UvTGV4ZXJQYXJzZXJcImAgXApAQCAtMTU4Myw2ICsxNjE5LDcgQEAKIGVjaG8gJwogIyBHZW5lcmF0ZWQgYnkgJyIke2NtYWtlX3NvdXJjZV9kaXJ9IicvYm9vdHN0cmFwCiAjIERlZmF1bHQgY21ha2Ugc2V0dGluZ3MuICBUaGVzZSBtYXkgYmUgb3ZlcnJpZGRlbiBhbnkgc2V0dGluZ3MgYmVsb3cuCitzZXQgKENNQUtFX0JVSUxEX1RZUEUgIlJlbGVhc2UiIENBQ0hFIFNUUklORyAiQ2hvb3NlIHRoZSB0eXBlIG9mIGJ1aWxkLiIpICMgbm90IEZPUkNFIHRvIHByZXNlcnZlIGRlZmF1bHRzIHNwZWNpZmllZCBlbHNld2hlcmUKIHNldCAoQ01BS0VfSU5TVEFMTF9QUkVGSVggIiciJHtjbWFrZV9wcmVmaXhfZGlyfSInIiBDQUNIRSBQQVRIICJJbnN0YWxsIHBhdGggcHJlZml4LCBwcmVwZW5kZWQgb250byBpbnN0YWxsIGRpcmVjdG9yaWVzLiIgRk9SQ0UpCiBzZXQgKENNQUtFX0RPQ19ESVIgIiciJHtjbWFrZV9kb2NfZGlyfSInIiBDQUNIRSBQQVRIICJJbnN0YWxsIGxvY2F0aW9uIGZvciBkb2N1bWVudGF0aW9uIChyZWxhdGl2ZSB0byBwcmVmaXgpLiIgRk9SQ0UpCiBzZXQgKENNQUtFX01BTl9ESVIgIiciJHtjbWFrZV9tYW5fZGlyfSInIiBDQUNIRSBQQVRIICJJbnN0YWxsIGxvY2F0aW9uIGZvciBtYW4gcGFnZXMgKHJlbGF0aXZlIHRvIHByZWZpeCkuIiBGT1JDRSkKZGlmZiAtLWdpdCBhL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbiBiL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbgppbmRleCBkODFmNjJhLi5iNWZjNzAwIDEwMDY0NAotLS0gYS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KKysrIGIvY21ha2VfdW5pbnN0YWxsLmNtYWtlLmluCkBAIC04LDcgKzgsNyBAQAogICBtZXNzYWdlKFNUQVRVUyAiVW5pbnN0YWxsaW5nIFwiJEVOVntERVNURElSfSR7ZmlsZX1cIiIpCiAgIGlmKEVYSVNUUyAiJEVOVntERVNURElSfSR7ZmlsZX0iKQogICAgIGV4ZWNfcHJvZ3JhbSgKLSAgICAgICJAQ01BS0VfQ09NTUFOREAiIEFSR1MgIi1FIHJlbW92ZSBcIiRFTlZ7REVTVERJUn0ke2ZpbGV9XCIiCisgICAgICAiQENNQUtFX0NPTU1BTkRAIiBBUkdTICItRSBybSAtZiBcIiRFTlZ7REVTVERJUn0ke2ZpbGV9XCIiCiAgICAgICBPVVRQVVRfVkFSSUFCTEUgcm1fb3V0CiAgICAgICBSRVRVUk5fVkFMVUUgcm1fcmV0dmFsCiAgICAgICApCg==